日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

聚类分析 - K-means - Python代码实现

發(fā)布時(shí)間:2024/7/5 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聚类分析 - K-means - Python代码实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

算法簡介

K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評價(jià)指標(biāo),即認(rèn)為兩個(gè)對象的距離越近,其相似度就越大。該算法認(rèn)為簇是由距離靠近的對象組成的,因此把得到緊湊且獨(dú)立的簇作為最終目標(biāo)。

算法過程如下:

1)從N個(gè)文檔隨機(jī)選取K個(gè)文檔作為中心點(diǎn);

2)對剩余的每個(gè)文檔測量其到每個(gè)中心點(diǎn)的距離,并把它歸到最近的質(zhì)心的類;

3)重新計(jì)算已經(jīng)得到的各個(gè)類的中心點(diǎn);

4)迭代2~3步直至新的質(zhì)心與原質(zhì)心相等或小于指定閾值,算法結(jié)束。

?

算法優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

  • 對處理大數(shù)據(jù)集,該算法保持可伸縮性和高效性
  • 算法快速、簡單,易于理解;
  • 缺點(diǎn):

  • 在 K-means 算法中 K 是事先給定的,這個(gè) K 值的選定是非常難以估計(jì)的,具體應(yīng)用中只能靠經(jīng)驗(yàn)選取;
  • 對噪聲和孤立點(diǎn)數(shù)據(jù)敏感,導(dǎo)致均值偏離嚴(yán)重;
  • 當(dāng)數(shù)據(jù)量非常大時(shí),算法的時(shí)間開銷是非常大的;
  • 初始聚類中心的選擇對聚類結(jié)果有較大的影響,一旦初始值選擇的不好,可能無法得到有效的聚類結(jié)果。

  • 代碼實(shí)現(xiàn)

    第一步:讀取文件,簡單查看數(shù)據(jù)

    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'#設(shè)置輸出文件的位置 data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件則用read_csv d = DataFrame(data) d.head() ?assistsheighttimeagepoints01234
    0.088820136.02280.5885
    0.139919839.32300.8291
    0.074719838.80260.4974
    0.098319140.71300.5772
    0.127619638.40280.5703

    ?列名:助攻,身高,比賽時(shí)間,年齡,得分,根據(jù)這幾項(xiàng)進(jìn)行聚類。

    ?

    第二步:聚類

    #聚類 mod = KMeans(n_clusters=3, n_jobs = 4, max_iter = 500)#聚成3類數(shù)據(jù),并發(fā)數(shù)為4,最大循環(huán)次數(shù)為500 mod.fit_predict(d)#y_pred表示聚類的結(jié)果#聚成3類數(shù)據(jù),統(tǒng)計(jì)每個(gè)聚類下的數(shù)據(jù)量,并且求出他們的中心 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'類別數(shù)目'] print(r)#給每一條數(shù)據(jù)標(biāo)注上被分為哪一類 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)#如果需要保存到本地,就寫上這一列

    ?

    第三步:可視化,簡單的標(biāo)注上分為哪一類怎么能滿足?當(dāng)然要看看可視化效果,畢竟注意一目了然的判斷聚類的效果

    #可視化過程 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()

    因?yàn)镵-means 算法過于大眾化,而且代碼其實(shí)比較簡單的,所以備注比較少,如果需要備注或者有任何疑問,歡迎留言。

    總結(jié)

    以上是生活随笔為你收集整理的聚类分析 - K-means - Python代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。