摘要:算法的關(guān)鍵在于初始中心的選擇和距離公式。并行設置的實現(xiàn)算法,有其中表示用方式實現(xiàn)雖然有很多參數(shù),但是都已經(jīng)給出了默認值。
K-means算法簡介
K-means是機器學習中一個比較常用的算法,屬于無監(jiān)督學習算法,其常被用于數(shù)據(jù)的聚類,只需為它指定簇的數(shù)量即可自動將數(shù)據(jù)聚合到多類中,相同簇中的數(shù)據(jù)相似度較高,不同簇中數(shù)據(jù)相似度較低。
K-menas的優(yōu)缺點:優(yōu)點:
原理簡單
速度快
對大數(shù)據(jù)集有比較好的伸縮性
缺點:
需要指定聚類 數(shù)量K
對異常值敏感
對初始值敏感
K-means的聚類過程其聚類過程類似于梯度下降算法,建立代價函數(shù)并通過迭代使得代價函數(shù)值越來越小
適當選擇c個類的初始中心;
在第k次迭代中,對任意一個樣本,求其到c個中心的距離,將該樣本歸到距離最短的中心所在的類;
利用均值等方法更新該類的中心值;
對于所有的c個聚類中心,如果利用(2)(3)的迭代法更新后,值保持不變,則迭代結(jié)束,否則繼續(xù)迭代。
該算法的最大優(yōu)勢在于簡潔和快速。算法的關(guān)鍵在于初始中心的選擇和距離公式。
K-means 實例展示python中km的一些參數(shù):
sklearn.cluster.KMeans( n_clusters=8, init="k-means++", n_init=10, max_iter=300, tol=0.0001, precompute_distances="auto", verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm="auto" ) n_clusters: 簇的個數(shù),即你想聚成幾類 init: 初始簇中心的獲取方法 n_init: 獲取初始簇中心的更迭次數(shù),為了彌補初始質(zhì)心的影響,算法默認會初始10個質(zhì)心,實現(xiàn)算法,然后返回最好的結(jié)果。 max_iter: 最大迭代次數(shù)(因為kmeans算法的實現(xiàn)需要迭代) tol: 容忍度,即kmeans運行準則收斂的條件 precompute_distances:是否需要提前計算距離,這個參數(shù)會在空間和時間之間做權(quán)衡,如果是True 會把整個距離矩陣都放到內(nèi)存中,auto 會默認在數(shù)據(jù)樣本大于featurs*samples 的數(shù)量大于12e6 的時候False,False 時核心實現(xiàn)的方法是利用Cpython 來實現(xiàn)的 verbose: 冗長模式(不太懂是啥意思,反正一般不去改默認值) random_state: 隨機生成簇中心的狀態(tài)條件。 copy_x: 對是否修改數(shù)據(jù)的一個標記,如果True,即復制了就不會修改數(shù)據(jù)。bool 在scikit-learn 很多接口中都會有這個參數(shù)的,就是是否對輸入數(shù)據(jù)繼續(xù)copy 操作,以便不修改用戶的輸入數(shù)據(jù)。這個要理解Python 的內(nèi)存機制才會比較清楚。 n_jobs: 并行設置 algorithm: kmeans的實現(xiàn)算法,有:’auto’, ‘full’, ‘elkan’, 其中 ‘full’表示用EM方式實現(xiàn) 雖然有很多參數(shù),但是都已經(jīng)給出了默認值。所以我們一般不需要去傳入這些參數(shù),參數(shù)的。可以根據(jù)實際需要來調(diào)用。
下面展示一個代碼例子
from sklearn.cluster import KMeans from sklearn.externals import joblib from sklearn import cluster import numpy as np # 生成10*3的矩陣 data = np.random.rand(10,3) print data # 聚類為4類 estimator=KMeans(n_clusters=4) # fit_predict表示擬合+預測,也可以分開寫 res=estimator.fit_predict(data) # 預測類別標簽結(jié)果 lable_pred=estimator.labels_ # 各個類別的聚類中心值 centroids=estimator.cluster_centers_ # 聚類中心均值向量的總和 inertia=estimator.inertia_ print lable_pred print centroids print inertia 代碼執(zhí)行結(jié)果 [0 2 1 0 2 2 0 3 2 0] [[ 0.3028348 0.25183096 0.62493622] [ 0.88481287 0.70891813 0.79463764] [ 0.66821961 0.54817207 0.30197415] [ 0.11629904 0.85684903 0.7088385 ]] 0.570794546829
為了更直觀的描述,這次在圖上做一個展示,由于圖像上繪制二維比較直觀,所以數(shù)據(jù)調(diào)整到了二維,選取100個點繪制,聚類類別為3類
from sklearn.cluster import KMeans from sklearn.externals import joblib from sklearn import cluster import numpy as np import matplotlib.pyplot as plt data = np.random.rand(100,2) estimator=KMeans(n_clusters=3) res=estimator.fit_predict(data) lable_pred=estimator.labels_ centroids=estimator.cluster_centers_ inertia=estimator.inertia_ #print res print lable_pred print centroids print inertia for i in range(len(data)): if int(lable_pred[i])==0: plt.scatter(data[i][0],data[i][1],color="red") if int(lable_pred[i])==1: plt.scatter(data[i][0],data[i][1],color="black") if int(lable_pred[i])==2: plt.scatter(data[i][0],data[i][1],color="blue") plt.show()
可以看到聚類效果還是不錯的,對k-means的聚類效率進行了一個測試,將維度擴寬到50維
數(shù)據(jù)規(guī)模 | 消耗時間 | 數(shù)據(jù)維度 |
---|---|---|
10000條 | 4s | 50維 |
100000條 | 30s | 50維 |
1000000條 | 4"13s | 50維 |
對于百萬級的數(shù)據(jù),擬合時間還是能夠接受的,可見效率還是不錯,對模型的保存與其它的機器學習算法模型保存類似
from sklearn.externals import joblib joblib.dump(km,"model/km_model.m")
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/40784.html
摘要:摘要前文數(shù)據(jù)挖掘與機器學習技術(shù)入門實戰(zhàn)與大家分享了分類算法,在本文中將為大家介紹聚類算法和關(guān)聯(lián)分析問題。比如,聚類算法可以實現(xiàn)公司客戶價值自動劃分,網(wǎng)頁自動歸類等。 摘要:前文數(shù)據(jù)挖掘與機器學習技術(shù)入門實戰(zhàn)與大家分享了分類算法,在本文中將為大家介紹聚類算法和關(guān)聯(lián)分析問題。分類算法與聚類到底有何區(qū)別?聚類方法應在怎樣的場景下使用?如何使用關(guān)聯(lián)分析算法解決個性化推薦問題?本文就為大家揭曉答...
摘要:機器學習算法類型從廣義上講,有種類型的機器學習算法。強化學習的例子馬爾可夫決策過程常用機器學習算法列表以下是常用機器學習算法的列表。我提供了對各種機器學習算法的高級理解以及運行它們的代碼。決策樹是一種監(jiān)督學習算法,主要用于分類問題。 showImg(https://segmentfault.com/img/remote/1460000019086462); 介紹 谷歌的自動駕駛汽車和機...
閱讀 1633·2021-11-17 09:33
閱讀 1330·2021-10-11 10:59
閱讀 2973·2021-09-30 09:48
閱讀 1976·2021-09-30 09:47
閱讀 3097·2019-08-30 15:55
閱讀 2400·2019-08-30 15:54
閱讀 1549·2019-08-29 15:25
閱讀 1711·2019-08-29 10:57