1. 程式人生 > >機器學習演算法之K-means-spark

機器學習演算法之K-means-spark

1 聚類

簡單回顧一下:

首先,隨機在點群中選取K個點,作為劃分聚落的種子點;

然後,求點群中所有的點到這K個點的距離;

接下來,將離種子點近的點都移動到種子點附近;

最後,不斷重複第二和第三步,直到沒有點需要移動了。

以上只是一個概念的解釋,我想這種問題還是必須看看公式才能清楚理解:

1、隨機選取K個種子點,設為μ1......μk;

2、對點群中的每一個點計算公式:

argminj||xiμj||,得到最小距離的那個種子點的J。

即該點屬於K個類別中的cj類。

3、這次所有點都計算完畢就完事了嗎?

當然不是了,畢竟種子點也是瞎選的,一般情況都不是最優的分類。所以需要迭代計算新聚落的質心。算出的質心又被拿出來當種子點繼續重複第二步。

最後直到質心的位置基本不變為止,基本可以確定聚落情況。

2 聚類與EM

當我們在對點群進行聚類的時候,是不知道每個點的具體類別的。所以第一次我們指定x這個樣本的類別假設為y。

通過極大似然估計,是可以衡量xy這個分類的可能性的。

所以現在可以先調節其他引數讓當前條件下的極大似然Pxy的可能性最大。

y這個類別是我們隨便選的,就算現在情況下可能性已經最好了,但是萬一存在更好的分類y,還可以使得Pxy更大,那麼就可以繼續調節引數使得yPxy最大化。

這樣反覆迭代,直到沒有更好的得y存在。

y:聚類界不允許有這麼牛逼的y存在

3 EM演算法

訓練樣本,就是上文中的點群x

1,x2.....xm,假設各點之間是相互獨立的,那麼假設每個樣本都一個隱含的類別ym。x點都是n維的向量,必須的。

在假設條件下求最大似然估計:

L(θ)=m1logyp(x,y;θ)

此時,想求解引數還有一個未知量y的存在,就算求了導數也是枉費。

於是EM假設每個樣本類別都存在一個分佈Qi

在做一個簡單等價:

L(θ)=m1logyp(xi,yi;θ)=m1logyQi(yi)p(xi,yi;θ)Qi(yi)iziQi(yi)logp(xi,yi;θ)Qi(yi)

這個大於等於是根據一個叫做Jensen不等式得到的。

Jensen不等式就是嚴格凸函式的函式期望小於等於x期望做引數時的函式值。

等於符號成立的條件是引數x是常量。

現在問題變成求L(θ)的下界了。

那麼等式成立的條件就是:

p(xi,yi;θ)Qi(yi)=C

又類別的分佈滿足:

iQi(yi)=1

於是綜合可得:

ip(xi,yi;θ)=C

Qi(yi)=p(xi,yi;θ)ip(xi,yi;θ)=p(

相關推薦

機器學習演算法K-means-spark

1 聚類 簡單回顧一下: 首先,隨機在點群中選取K個點,作為劃分聚落的種子點; 然後,求點群中所有的點到這K個點的距離; 接下來,將離種子點近的點都移動到種子點附近; 最後,不斷重複第二和第三步,直到沒有點需要移動了。 以上只是一個概念的解釋,我想這

「AI科技」機器學習演算法K-means演算法原理及缺點改進思路

https://www.toutiao.com/a6641916717624721933/   2019-01-03 08:00:00 K-means演算法是使用得最為廣泛的一個演算法,本文將介紹K-means 聚類演算法、原理、特點及改進思路。 K-means聚類演算法簡

機器學習(25)K-Means聚類演算法詳解

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 K-Means演算法是無監督的聚類演算法,它實現起來比較簡單,聚類效果也不錯,因此應用很廣泛。K-Means演算法有大量的變體,本文就從最傳統的K-Means演算

機器學習筆記K-means聚類

K-means聚類是聚類分析中比較基礎的演算法,屬於典型的非監督學習演算法。其定義為對未知標記的資料集,按照資料內部存在的資料特徵將資料集劃分為多個不同的類別,使類別內的資料儘可能接近,類別間的資料相似度比較大。用於衡量距離的方法主要有曼哈頓距離、歐氏距離、切比雪夫距離,其中

機器學習實戰k-means聚類_程式碼註釋

#-*- coding: UTF-8 -*- from numpy import * def loadDataSet(fileName):#函式的輸入為檔名稱,函式的主要作用是將檔案中的每行內容轉換成浮點型, # 每行

機器學習實戰K-means

1 演算法思想 聚類的基本思想是將資料集中的樣本劃分為若干個通常是不相交的子集,每個子集稱為一個”簇”(cluster)。劃分後,每個簇可能有相同對應的概念(性質)。K-均值演算法就是一個使用很廣泛的聚類演算法,其中的K就表示簇的數量,K-means簡單的說就

機器學習演算法二:5分鐘上手K-Means

1.案例:承襲KNN,這個資料依舊是用打鬥次數和接吻次數來界定電影型別,接吻多的是Romance型別的,而打鬥多的是動作電影。 2.問題:現在有一部名字未知的電影,打鬥次數為18次,接吻次數為90

機器學習經典演算法K-Means

一、簡介 K-Means 是一種非監督學習,解決的是聚類問題。K 代表的是 K 類,Means 代表的是中心,你可以理解這個演算法的本質是確定 K 類的中心點,當你找到了這些中心點,也就完成了聚類。 /*請尊重作者勞動成果,轉載請標明原文連結:*/ /* https://www.cnblogs.com/jpc

吳恩達機器學習 筆記八 K-means聚類演算法

1. 代價函式   K-means演算法是比較容易理解的,它屬於無監督學習方法,所以訓練樣本資料不再含有標籤。我們假設有樣本資料x(1),x(2),⋯,x(m)x(1),x(2),⋯,x(m),我們選擇設定KK個聚類中心u1,u2,⋯,uKu1,u2,⋯,uK

Python機器學習演算法實踐——k均值聚類(k-means

一開始的目的是學習十大挖掘演算法(機器學習演算法),並用編碼實現一遍,但越往後學習,越往後實現編碼,越發現自己的編碼水平低下,學習能力低。這一個k-means演算法用Python實現竟用了三天時間,可見編碼水平之低,而且在編碼的過程中看了別人的編碼,才發現自己對

機器學習實戰k-近鄰演算法(3)---如何視覺化資料

關於視覺化: 《機器學習實戰》書中的一個小錯誤,P22的datingTestSet.txt這個檔案,根據網上的原始碼,應該選擇datingTestSet2.txt這個檔案。主要的區別是最後的標籤,作者原來使用字串‘veryLike’作為標籤,但是Python轉換會出現Val

機器學習系列K-近鄰演算法(監督學習-分類問題)

''' @description : 演算法優點: a簡單、易於理解、易於實現、無需估計引數、無需訓練 演算法缺點: a懶惰演算法,對測試樣本分類時計算量大,記憶體開銷大 b必須制定k值,k值得選擇

機器學習實戰K-近鄰演算法總結和程式碼解析

            機器學習實戰是入手機器學習和python實戰的比較好的書,可惜我現在才開始練習程式碼!先宣告:本人菜鳥一枚,機器學習的理論知識剛看了一部分,python的知識也沒學很多,所以寫程式碼除錯的過程很痛可!但是還是挨個找出了問題所在,蠻開心的!看了很多大牛

機器學習實戰k-近鄰演算法(4)--- 如何歸一化資料

歸一化的公式: newValue = (oldValue - min) / (max - min) 就是把資料歸一化到[0, 1]區間上。 好處: 防止某一維度的資料的數值大小對距離就算產生影響。多個維度的特徵是等權重的,所以不能被數值大小影響。 下面是歸一化特徵值的程式碼

機器學習演算法KNN

1、基本思想 物以類聚、人以群分,一個例項與它周圍的例項屬於同一類的概率較大。 2、演算法 給定一個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就

機器學習演算法正則化

>By joey周琦 正則化 假設目標函式為 J J, 比如 J J可以是對數似然函式的負數形式,特徵 i i的係數為 wi w_i, 係數向量 w=[w1,...,

機器學習演算法:決策樹 (decision trees)

> By joey周琦 概述 線性模型一般variance小,bias大;而樹模型一般variance大,bias小 決策樹的優點:具有可讀性,分類速度快 一般包含三個步驟: 特徵選擇 決策樹生成 剪枝

機器學習演算法: 邏輯迴歸 logistic regression (LR)

by joey周琦 LR介紹 邏輯迴歸屬於probabilistic discriminative model這一類的分類演算法 probabilistic discriminative mode這類演算法的思路如下: - 直接建模 P(Ck|x)

機器學習演算法:分類演算法概述

By joey周琦 常見的分類演算法大致可以分為三類: 直接給一個discriminant function,直接確定輸入feature x的屬於哪一類。這類演算法有SVM probabilistic discriminative model.該類方法直接給P(C

機器學習實戰K近鄰改進的約會網站程式碼及手寫字型識別程式碼

from numpy import * import operator import os def createDataSet(): group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) labels=['A','A','B','B']