原文:http://blog.csdn.net/abcjennifer/article/details/7914952算法
本欄目(Machine learning)包括單參數的線性迴歸、多參數的線性迴歸、Octave Tutorial、Logistic Regression、Regularization、神經網絡、機器學習系統設計、SVM(Support Vector Machines 支持向量機)、聚類、降維、異常檢測、大規模機器學習等章節。內容大多來自Standford公開課machine learning中Andrew老師的講解和其餘書籍的借鑑。(https://class.coursera.org/ml/class/index)網絡
第九講. 聚類——Clusteringdom
===============================機器學習
(一)、什麼是無監督學習?學習
(二)、KMeans聚類算法優化
(三)、Cluster問題的(distortion)cost functionspa
(四)、如何選擇初始化時的類中心.net
(五)、聚類個數的選擇設計
=====================================blog
(一)、什麼是無監督學習
以前的幾章咱們只涉及到有監督學習,本章中,咱們經過討論另外一種Machine learning方式:無監督學習。首先呢,咱們來看一下有監督學習與無監督學習的區別。
給定一組數據(input,target)爲Z=(X,Y)。
有監督學習:最多見的是regression & classification。
,其中fi(X)=P(Y=i | X);
無監督學習:無監督學習的目的是學習一個function f,使它能夠描述給定數據的位置分佈P(Z)。 包括兩種:density estimation & clustering.
好了,你們理解了吧,unsupervised learning也就是不帶類標號的機器學習。
練習:
=====================================
(二)、K-Means聚類算法
KMeans是聚類算法的一種,先來直觀的看一下該算法是怎樣聚類的。給定一組數據以下圖所示,K-Means算法的聚類流程如圖:
圖中顯示了Kmeans聚類過程,給定一組輸入數據{x(1),x(2),...,x(n)}和預分類數k,算法以下:
首先隨機指定k個類的中心U1~Uk,而後迭代地更新該centroid。
其中,C(i)表示第i個數據離那個類中心最近,也就是將其斷定爲屬於那個類,而後將這k各種的中心分別更新爲全部屬於這個類的數據的平均值。
=====================================
(三)、Cluster問題的(distortion)cost function
在supervised learning中咱們曾講過cost function,相似的,在K-means算法中一樣有cost function,咱們有時稱其爲distortion cost function.
以下圖所示,J(C,U)就是咱們要minimize的function.
即最小化全部數據與其聚類中心的歐氏距離和。
再看上一節中咱們講過的KMeans算法流程,第一步爲固定類中心U,優化C的過程:
第二步爲優化U的過程:
這樣進行迭代,就能夠完成cost function J的優化。
練習:
這裏你們注意,迴歸問題中有可能由於學習率設置過大產生隨着迭代次數增長,cost function反倒增大的狀況。但聚類是不會產生這樣的問題的,由於每一次聚類都保證了使J降低,且無學習率作參數。
=====================================
(四)、如何選擇初始化時的類中心
在上面的kmeans算法中,咱們提到能夠用randomly的方法選擇類中心,然而有時效果並非很是好,以下圖所示:
fig.1. original data
對於上圖的這樣一組數據,若是咱們幸運地初始化類中心如圖2,
fig.2. lucky initialization
fig.3. unfortunate initialization
但若是將數據初始化中心選擇如圖3中的兩種狀況,就悲劇了!最後的聚類結果cost function也會比較大。針對這個問題,咱們提出的solution是,進行不一樣initialization(50~1000次),每一種initialization的狀況分別進行聚類,最後選取cost function J(C,U)最小的做爲聚類結果。
=====================================
(五)、聚類個數的選擇
How to choose the number of clusters? 這應該是聚類問題中一個頭疼的part,好比KMeans算法中K的選擇。本節就來解決這個問題。
最著名的一個方法就是elbow-method,作圖k-J(cost function)以下:
若作出的圖如上面左圖所示,那麼咱們就找圖中的elbow位置做爲k的選定值,若是像右圖所示並沒有明顯的elbow點呢,大概就是下圖所示的數據分佈:
這種狀況下須要咱們根據本身的需求來進行聚類,好比Tshirt的size,能夠聚成{L,M,S}三類,也能夠分爲{XL,L,M,S,XS}5類。須要你們具體狀況具體分析了~
練習: