聚类分析 - K-means - Python代码实现
生活随笔
收集整理的這篇文章主要介紹了
聚类分析 - K-means - Python代码实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法簡介
K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評價指標,即認為兩個對象的距離越近,其相似度就越大。該算法認為簇是由距離靠近的對象組成的,因此把得到緊湊且獨立的簇作為最終目標。
算法過程如下:
1)從N個文檔隨機選取K個文檔作為中心點;
2)對剩余的每個文檔測量其到每個中心點的距離,并把它歸到最近的質心的類;
3)重新計算已經得到的各個類的中心點;
4)迭代2~3步直至新的質心與原質心相等或小于指定閾值,算法結束。
?
算法優缺點:
優點:
缺點:
代碼實現
第一步:讀取文件,簡單查看數據
import pandas as pd import numpy as np from pandas import DataFrame,Series from sklearn.cluster import KMeans from sklearn.cluster import Birch#讀取文件 datafile = u'E:\\pythondata\\julei.xlsx'#文件所在位置,u為防止路徑中有中文名稱,此處沒有,可以省略 outfile = u'E:\\pythondata\\julei_out.xlsx'#設置輸出文件的位置 data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件則用read_csv d = DataFrame(data) d.head()| 0.0888 | 201 | 36.02 | 28 | 0.5885 |
| 0.1399 | 198 | 39.32 | 30 | 0.8291 |
| 0.0747 | 198 | 38.80 | 26 | 0.4974 |
| 0.0983 | 191 | 40.71 | 30 | 0.5772 |
| 0.1276 | 196 | 38.40 | 28 | 0.5703 |
?列名:助攻,身高,比賽時間,年齡,得分,根據這幾項進行聚類。
?
第二步:聚類
#聚類 mod = KMeans(n_clusters=3, n_jobs = 4, max_iter = 500)#聚成3類數據,并發數為4,最大循環次數為500 mod.fit_predict(d)#y_pred表示聚類的結果#聚成3類數據,統計每個聚類下的數據量,并且求出他們的中心 r1 = pd.Series(mod.labels_).value_counts() r2 = pd.DataFrame(mod.cluster_centers_) r = pd.concat([r2, r1], axis = 1) r.columns = list(d.columns) + [u'類別數目'] print(r)#給每一條數據標注上被分為哪一類 r = pd.concat([d, pd.Series(mod.labels_, index = d.index)], axis = 1) r.columns = list(d.columns) + [u'聚類類別'] print(r.head()) r.to_excel(outfile)#如果需要保存到本地,就寫上這一列?
第三步:可視化,簡單的標注上分為哪一類怎么能滿足?當然要看看可視化效果,畢竟注意一目了然的判斷聚類的效果
#可視化過程 from sklearn.manifold import TSNEts = TSNE() ts.fit_transform(r) ts = pd.DataFrame(ts.embedding_, index = r.index)import matplotlib.pyplot as plta = ts[r[u'聚類類別'] == 0] plt.plot(a[0], a[1], 'r.') a = ts[r[u'聚類類別'] == 1] plt.plot(a[0], a[1], 'go') a = ts[r[u'聚類類別'] == 2] plt.plot(a[0], a[1], 'b*') plt.show()因為K-means 算法過于大眾化,而且代碼其實比較簡單的,所以備注比較少,如果需要備注或者有任何疑問,歡迎留言。
總結
以上是生活随笔為你收集整理的聚类分析 - K-means - Python代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特征计算 - Jaccard 相似系数与
- 下一篇: python 保存文件 吃内存_孤荷凌寒