一種典型的無監督學習演算法,主要用於將相似的樣本自動歸到乙個類別中。
在聚類演算法中根據樣本之間的相似性,將樣本劃分到不同的類別中,對於不同的相似度計算方法,會得到不同的聚類結果,常用的相似度計算方法有歐式距離法。
k-means
k : 初始中心點個數(計畫聚類數)
means:求中心點到其他資料點距離的平均值
步驟:1、隨機設定k個特徵空間內的點作為初始的聚類中心
2、對於其他每個點計算到k個中心的距離,未知的點選擇最近的乙個聚類中心點作為標記類別
3、接著對著標記的聚類中心之後,重新計算出每個聚類的新中心點(平均值)
4、如果計算得出的新中心點與原中心點一樣(質心不再移動),那麼結束,否則重新進行第二步過程
k-means api
sklearn.cluster.kmeans(n_clusters=8)
引數:n_clusters:開始的聚類中心數量
整型,預設值=8,生成的聚類數,即產生的質心(centroids)數。
方法:estimator.fit(x)
estimator.predict(x)
estimator.fit_predict(x)
計算聚類中心並**每個樣本屬於哪個類別,相當於先呼叫fit(x),然後再呼叫predict(x)
示例:
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import kmeans
from sklearn.metrics import calinski_harabasz_score
# 建立資料集
# x為樣本特徵,y為樣本簇類別, 共1000個樣本,每個樣本4個特徵,共4個簇,
# 簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分別為[0.4, 0.2, 0.2, 0.2]
x, y = make_blobs(n_samples=
1000
, n_features=
2, centers=[[
-1,-
1],[
0,0]
,[1,
1],[
2,2]
],cluster_std=
[0.4
,0.2
,0.2
,0.2],
random_state=9)
# 資料集視覺化
plt.figure(1)
plt.scatter(x[:,
0], x[:,
1], marker=
'o')
# 使用kmeans進行聚類,並使用ch方法評估
y_pred = kmeans(n_clusters=
5, random_state=9)
.fit_predict(x)
plt.figure(2)
plt.scatter(x[:,
0], x[:,
1], c=y_pred)
plt.show(
)# 用calinski-harabasz index評估的聚類分數
print
(calinski_harabasz_score(x, y_pred)
)
k-means演算法小結優點:原理簡單,容易實現;聚類效果中上(依賴k值的選擇)
缺點:對離群點,雜訊敏感;很難發現大小差別很大的簇;結果不一定全域性最優,只能保證區域性最優。
降維是指在某些限定條件下,降低隨機變數(特徵)個數,得到一組「不相關」主變數的過程。
1.特徵選擇
資料中包含冗餘或無關變數(或稱特徵、屬性、指標等),旨在從原有特徵中找出主要特徵。
方法:filter(過濾式):主要**特徵本身特點、特徵與特徵和目標值之間關聯
方差選擇法:低方差特徵過濾
相關係數
embedded (嵌入式):演算法自動選擇特徵(特徵與目標值之間的關聯)
決策樹:資訊熵、資訊增益
正則化:l1、l2
深度學習:卷積等
1)低方差特徵過濾:刪除低方差的一些特徵
特徵方差小:某個特徵大多樣本的值比較相近
特徵方差大:某個特徵很多樣本的值都有差別
api:
sklearn.feature_selection.variancethreshold(threshold = 0.0)
刪除所有低方差特徵
variance.fit_transform(x)
x:numpy array格式的資料[n_samples,n_features]
返回值:訓練集差異低於threshold的特徵將被刪除。預設值是保留所有非零方差特徵,即刪除所有樣本中具有相同值的特徵。
2)相關係數:
① 皮爾遜相關係數:
反映變數之間相關關係密切程度的統計指標
相關係數的值介於–1與+1之間,即–1≤ r ≤+1。其性質如下:
當r>0時,表示兩變數正相關,r<0時,兩變數為負相關
當|r|=1時,表示兩變數為完全相關,當r=0時,表示兩變數間無相關關係
當0一般可按**劃分:|r|<0.4為低度相關;0.4≤|r|<0.7為顯著性相關;0.7≤|r|<1為高度線性相關
api:
from scipy.stats import pearsonr
x : (n,) array_like
y : (n,) array_like
returns: (pearson』s correlation coefficient, p-value)
② 斯皮爾曼相關係數
反映變數之間相關關係密切程度的統計指標
斯皮爾曼相關係數表明 x (自變數) 和 y (因變數)的相關方向。 如果當x增加時, y 趨向於增加, 斯皮爾曼相關係數則為正
與之前的皮爾遜相關係數大小性質一樣,取值 [-1, 1]之間
api:
from scipy.stats import spearmanr
2.主成分分析
定義:高維資料轉化為低維資料的過程,在此過程中可能會捨棄原有資料、創造新的變數
作用:是資料維數壓縮,盡可能降低原資料的維數(複雜度),損失少量資訊。
應用:回歸分析或者聚類分析當中
api:
sklearn.decomposition.pca(n_components=none)
將資料分解為較低維數空間
n_components:
小數:表示保留百分之多少的資訊
整數:減少到多少特徵
pca.fit_transform(x) x:numpy array格式的資料[n_samples,n_features]
返回值:轉換後指定維度的array
示例:
from sklearn.decomposition import pca
defpca_demo()
:"""
對資料進行pca降維
:return: none
"""data =[[
2,8,
4,5]
,[6,
3,0,
8],[
5,4,
9,1]
]print
(data)
# 例項化pca,保留90%資訊
transfer1 = pca(n_components=
0.9)
data1 = transfer1.fit_transform(data)
print
("保留90%的資訊,降維結果為:\n"
, data1)
# 例項化pca,指定降維數
transfer2 = pca(n_components=3)
# 呼叫fit_transform
data2 = transfer2.fit_transform(data)
print
("降維到3維的結果:\n"
, data2)
if __name__ ==
'__main__'
: pca_demo(
)
聚類和降維
聚類是用於尋找資料內在的分布結構。既可以作為乙個單獨的過程,如異常檢測等 也可作為分類等其他學習任務的前驅過程。聚類是標準的無監督學習。在一些推薦系統中需要確定新使用者的型別,但 使用者型別 這個概念可能無法精確定義,此時往往會先對原有的使用者資料進行聚類。然後根據聚類的結果將每個簇定義為乙個類。然...
PCA降維演算法
文章由兩部分構成,第一部分主要講解pca演算法的步驟,第二部分講解pca演算法的原理。那麼首先進入第一部分 pca演算法的步驟 樣本矩陣x的構成 假設待觀察變數有m個,其實相當於乙個資料在m維各維度上的座標,我們的目標是在保證比較資料之間相似性不失真的前提下,將描述資料的維度盡量減小至l維 l樣本矩...
PCA降維原理
在之前的介紹中,一幅影象只能表示乙個物件。那麼對於w x h的灰度影象,只能表示為w x h位的向量,那麼乙個有100 100的影象就需要10000維的向量空間。對於一幅人臉而言,是否所有維的資料都是有用的呢?在矩陣論當中我們知道,矩陣可以近似的表示為乙個特徵值與特徵向量的乘積。根據這個原理,如果我...