無監督學習是相對於有監督學習的概念,無監督學習的樣本只有資料沒有標籤(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的特徵選擇方法
在資料探勘工作中,通常處理的是乙個包含大量特徵且含義未知的資料集,並基於該資料集挖掘到有用的特徵。那麼這裡面一般是四個步驟 特徵工程 特徵選擇 模型構造 模型融合。特徵工程主要是清洗特徵 刪除無用特徵和構造新特徵,經過特徵工程這個過程我們可能會得到大量的特徵 而特徵選擇的目的就是從這大量的特徵中挑選...