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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【sklearn练习】KMeans ---- Seeds(小麦种子)数据集聚类评估

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【sklearn练习】KMeans ---- Seeds(小麦种子)数据集聚类评估 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、數據集探索
  • 二、數據預處理
  • 三、構建模型獲取結果
  • 四、聚類結果可視化
  • 五、聚類模型評估
    • ① 輪廓系數
    • ② 卡林斯基 - 哈拉巴斯指數
    • ③ FMI評價法


一、數據集探索

Seeds 數據集存放了不同品種小麥種子的區域、周長、壓實度、籽粒長度、籽粒寬度、不對稱系數、籽粒腹溝長度以及類別數據。該數據集總共210條記錄、7個特征、一個標簽,標簽分為3類。

# 1.讀取數據集 data = pd.read_csv("./data/seeds_datas.csv") x = data.iloc[:,1:8] target = data.iloc[:,-1]

X:

target:

返回頂部


二、數據預處理

  • 不同特征之間往往具有不同的量綱,由此所造成的數值間的差異可能很大,在涉及空間距離計算或梯度下降法等情況的時候不對其進行處理會影響到數據分析結果的準確性。為了消除特征之間的量綱和取值范圍差異可能會造成的影響,需對數據進行標準化處理,也可以稱為規范化處理。
  • 在這里我們對數據集進行標準差標準化處理。
# 2.對數據集進行離差標準化處理 MMS = MinMaxScaler().fit(x) x_ = MMS.transform(x)

處理后的數據集:

返回頂部


三、構建模型獲取結果

# 3.構建KMeans聚類模型 cluster = KMeans(n_clusters=3,random_state=123).fit(x_) # 3.1 獲取聚類質心 center = cluster.cluster_centers_ # [[0.75733298 0.79374354 0.69419238 0.73003765 0.76950062 0.36757645, 0.75709318], [0.1233337 0.17513685 0.37817899 0.18671025 0.16252742 0.49856915, 0.27928792], [0.38349003 0.4198407 0.67120387 0.36468534 0.46849918 0.26417688, 0.31838389]] # 3.2 獲取聚類標簽 pre_target = cluster.labels_ # 3.3 獲取簇內平方和 inertia = cluster.inertia_ # 22.024363075666038

返回頂部


四、聚類結果可視化

  • 這里我們的數據集是多維(包含七個特征),我們需要對其進行降維處理,降到二維平面使用散點圖來進行展示。
  • 這里的降維采用TSNE。t-SNE(t-distributed stochastic neighbor embedding)是用于降維的一種機器學習算法,是由 Laurens van der Maaten 等在08年提出來。此外,t-SNE 是一種非線性降維算法,非常適用于高維數據降維到2維或者3維,進行可視化。
# 4.聚類結果可視化 from sklearn.manifold import TSNE # 4.1 降維處理數據 tsne = TSNE(n_components=2,init='random',random_state=144).fit(x_) df = pd.DataFrame(tsne.embedding_) df['labels'] = pre_target
  • 降維后的數據集
df1 = df[df['labels'] == 0] df2 = df[df['labels'] == 1] df3 = df[df['labels'] == 2] # 繪制畫布 fig = plt.figure(figsize=(9,6)) plt.plot(df1[0],df1[1],'bo',df2[0],df2[1],'r*',df3[0],df3[1],'gD') plt.show()

返回頂部


五、聚類模型評估

KMeans聚類模型評估指標參見:【skLearn 聚類算法】KMeans

① 輪廓系數

# 5.1 輪廓系數法 from sklearn.metrics import silhouette_score silhouetteScore = [] for i in range(2,15):# 構建聚類模型kmeans = KMeans(n_clusters=i,random_state=111).fit(x_)score = silhouette_score(x_,kmeans.labels_)silhouetteScore.append(score) plt.figure(figsize=(10,8)) plt.plot(range(2,15),silhouetteScore,linewidth=1.5,linestyle='-') plt.axvline(x=3, color="red", linestyle="--") plt.axvline(x=4, color="red", linestyle="--") plt.show()
  • 在這里我們獲取輪廓系數score是所有樣本的輪廓系數均值,如果要獲取每個樣本的輪廓系數應當使用silhouette_samples。這里是針對超參數k(n_cluster),所以采用輪廓系數均值進行評估。
  • 聚類數目為2、3和3、4的時候,圖形的畸變程度最大。本身數據集就是關于3類小麥種子的,側面說明了聚類為3的時候效果較好。

返回頂部


② 卡林斯基 - 哈拉巴斯指數

# 5.2 卡林斯基-哈拉巴斯指數 from sklearn.metrics import calinski_harabasz_score chs = [] for i in range(2,15):# 構建聚類模型kmeans = KMeans(n_clusters=i,random_state=112).fit(x_)chsScore = calinski_harabasz_score(x_,kmeans.labels_)chs.append(chsScore) plt.figure(figsize=(10, 8)) plt.plot(range(2, 15), chs, linewidth=1.5, linestyle='-') plt.show()
  • 由圖可以看出,當n_cluster=2、3的時候,FMI評分都較高,聚類效果也都相對較好。

返回頂部


③ FMI評價法

# 5.3 FMI評價法 --- 需要有真實標簽 from sklearn.metrics import fowlkes_mallows_score fms = [] for i in range(2,15):# 構建聚類模型kmeans = KMeans(n_clusters=i,random_state=112).fit(x_)fmsScore = fowlkes_mallows_score(target,kmeans.labels_)fms.append(fmsScore) plt.figure(figsize=(10, 8)) plt.plot(range(2, 15), fms, linewidth=1.5, linestyle='-') plt.show()
  • 由圖可以看出,當n_cluster=3的時候,FMI評分最高,聚類效果較好。

返回頂部


原碼及數據集獲取:https://download.csdn.net/download/qq_45797116/73374470

總結

以上是生活随笔為你收集整理的【sklearn练习】KMeans ---- Seeds(小麦种子)数据集聚类评估的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。