6 聚類(K means) 降維(Pca)

2021-10-13 13:15:32 字數 4340 閱讀 2035

一種典型的無監督學習演算法,主要用於將相似的樣本自動歸到乙個類別中。

在聚類演算法中根據樣本之間的相似性,將樣本劃分到不同的類別中,對於不同的相似度計算方法,會得到不同的聚類結果,常用的相似度計算方法有歐式距離法。

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維的向量空間。對於一幅人臉而言,是否所有維的資料都是有用的呢?在矩陣論當中我們知道,矩陣可以近似的表示為乙個特徵值與特徵向量的乘積。根據這個原理,如果我...