基於sklearn的k均值類聚模型

2021-09-21 06:01:52 字數 1891 閱讀 5308

無監督學習是相對於有監督學習的概念,無監督學習的樣本只有資料沒有標籤(label),由模型自主發現樣本之間的關係。可用於資料的類聚(類聚演算法)和降維(主成分分析)等。

當樣本有真實指標(帶label)時,可以使用ari(調整蘭德指數),公式為$$ri = \cfrac^}}$$ $$ari = \cfrac$$

其中: 該值越大,說明結果越好

輪廓係數不需要先驗知識,計算過程如下:

對於每乙個樣本,計算同類樣本中其他樣本到該樣本的評價距離a

分別計算其他類樣本中各類樣本到這個樣本的平均距離,找到平均距離最近的乙個類到該樣本的平均距離

計算輪廓係數$sc=\cfrac$

對所有樣本重複該過程,取平均值為輪廓係數

k均值類聚是一種簡單的無監督學習模型,該模型是基於距離的類聚模型,將把特徵空間中距離相近的點進行類聚。

在訓練k均值類聚模型中,有以下步驟:

隨機在特徵空間中指定k個質心

計算每個樣本到質心的距離,歸入最近的質心一類

對每個質心的樣本分別求平均,得到新的k個質心

第二步與第三步不斷迭代,直到某次類聚結果不變(或改變歸屬的樣本少於某個值),迭代結束

import numpy as np

import pandas as pd

digits_train = pd.read_csv('', header=none)

digits_test = pd.read_csv('', header=none)

print(digits_test[:2])
0   1   2   3   4   5   6   7   8   9  ...  55  56  57  58  59  60  61  62  \

0 0 0 5 13 9 1 0 0 0 0 ... 0 0 0 6 13 10 0 0

1 0 0 0 12 13 5 0 0 0 0 ... 0 0 0 0 11 16 10 0

63 64

0 0 0

1 0 1

[2 rows x 65 columns]

x_train = digits_train[np.arange(64)]

x_test = digits_test[np.arange(64)]

y_train = digits_train[64]

y_test = digits_test[64]

from sklearn.cluster import kmeans

kme = kmeans(n_clusters=10)

model = kme.fit(x_train,y_train)

y_pre = kme.predict(x_test)

from sklearn.metrics import adjusted_rand_score

adjusted_rand_score(y_test,y_pre)

0.66305779493265249
from sklearn.metrics import silhouette_score

silhouette_score(y_test.values.reshape(-1,1),y_pre.reshape(-1,1),metric="euclidean")

y = column_or_1d(y, warn=true)

0.27296875226980805

基於sklearn的特徵篩選

樣本中的有些特徵是所謂的 優秀特徵 使用這些特徵可以顯著的提高泛化能力。而有些特徵在樣本類別區分上並不明顯,在訓練中引入這些特徵會導致算力的浪費 另外有些特徵對樣本的分類有反作用,引入這些特徵反而會導致泛化能力下降 與pca 主成分分析 不同,特徵篩選不修改特徵值,而是尋找對模型效能提公升較大的盡量...

DM裡的K均值演算法

因為一直在做的是聚類演算法的研究,算是總結了一些心得,這裡總結些知識性與思路性的東西,我想在其他地方也是很容易的找到類似的內容的。畢竟,世界就是那麼小。宣告 本文比較不適合沒有dm基礎的人來閱讀。我只是胡亂的塗鴉而已 在dm裡的聚類演算法裡,有基於劃分的演算法,基於層次的演算法,基於密度的演算法,基...

基於sklearn的特徵選擇方法

在資料探勘工作中,通常處理的是乙個包含大量特徵且含義未知的資料集,並基於該資料集挖掘到有用的特徵。那麼這裡面一般是四個步驟 特徵工程 特徵選擇 模型構造 模型融合。特徵工程主要是清洗特徵 刪除無用特徵和構造新特徵,經過特徵工程這個過程我們可能會得到大量的特徵 而特徵選擇的目的就是從這大量的特徵中挑選...