R的機器學習 聚類

2021-08-03 12:33:04 字數 2278 閱讀 3481

現階段,針對iris資料集,我們應用了決策樹、隨機森林、樸素貝葉斯、神經網路和svm這些模型來擬合資料,雖然結果略有差異,但是可以說差異不大,效果也還是很理想,主要原因因為這個資料集的特徵值比較顯著;接下來,我們利用幾類無監督學習的方式進行原始資料集的分類,也就是常說的聚類演算法。

1、kmeans聚類

kmeans聚類是最簡單的一類聚類方式,聚類方法是,先隨機確認中心點,然後找和他距離最近的幾個點,重新分配中心點,然後反覆迭代,直到每個中心點周圍的點離這個中心點是最近的,並且離其他點是最遠的。

基於這個思想,那麼分為幾類就是乙個比較關鍵的假設;一般情況下,我們用肘部法則來區分,簡單來說,就是每個聚類的組內的誤差最小,組間的誤差最大,這樣我們分的越乾淨。

但是在聚類之前需要判定分類的個數,這塊就需要用乙個肘部法則來初步判斷;簡單來說,就是通過對不同聚類組數的誤差和進行碎石圖的繪製,判定下降最快的那個點,也就是在那個點以後,分成n類和n+1類的差異不大,那麼我們初步就可以把這個算成是我們的聚類個數。

下面還是iris資料集進行示例,因為是無監督學習,所以剔除掉最後那個species變數。只利用前四個變數。

iris_kmeans
然後這裡看沒有分類的方差,以及分成n類的組間方差,這裡取分成1~10類:

for (i in 2:10)

plot(1:10,wss,type='b')

然後看下碎石圖:

在這個碎石圖可以看到,在第三類之後,或者第六類之後的變化就比較大,這裡因為iris資料集分成了三類,我們暫且按照三類聚類:

cluster1

iris_kmeans$cluster

iris_kmeans$test

iris_kmeans[,5:6]

iris_kmeans$cluster[iris_kmeans$cluster==3]

iris_kmeans$cluster[iris_kmeans$cluster==2]

iris_kmeans$cluster[iris_kmeans$cluster==1]

table(cluster=iris_kmeans$cluster,test=iris_kmeans$test)

首先**中需要標準化資料,然後聚類的cluster這個索引內是數值型的分類,我們把3類設定為setosa,2類設定為versicolor,1類設定為virginica;

通過這個方式,我們按照無監督學習,進行了分類,看下和原本的分類的差異:

test

cluster setosa versicolor virginica

setosa 50 0 0

versicolor 0 39 14

virginica 0 11 36

感覺差異還是挺大的,除了setosa以外,其他兩類分的不是特別理想;但是準確率大概為83.3%,尚可;

上述用的是kmeans聚類,kmeans是按照均值進行聚類,而k-modoids是根據中位數聚類,對離群點更不敏感;下面是中位數聚類:

library(cluster)

cluster2

iris_kmeans$cluster2

iris_kmeans$cluster2[iris_kmeans$cluster2==1]

iris_kmeans$cluster2[iris_kmeans$cluster2==2]

iris_kmeans$cluster2[iris_kmeans$cluster2==3]

table(cluster=iris_kmeans$cluster2,test=iris_kmeans$test)

結果是:

test

cluster setosa versicolor virginica

setosa 50 0 0

versicolor 0 41 14

virginica 0 9 36

看到準確率為84.7%,相對比kmeans準確一點

機器學習 聚類

聚類的過程是將樣本分類的過程,聚類屬於無監督學習,資料中沒有label,訓練之前並不知道樣本屬於哪乙個類別,需要借鑑經驗值。kmeans聚類 模型假設 資料的分布是k個 sigma 相同的高斯分布的,每個分布裡有 n 1,n 2,n k 個樣本,其均值分別是 mu 1,mu 2,mu k 那麼每個樣...

機器學習聚類

模型調參 from sklearn.cluster import dbscan 構建空列表,用於儲存不同引數組合下的結果 res 迭代不同的eps值 for eps in np.arange 0.001,1 0.05 迭代不同的min samples值 for min samples in rang...

機器學習 聚類 密度聚類演算法

一,介紹 密度聚類演算法有多種,我們這裡主要介紹一種著名的密度聚類演算法 dbscan。首先,我們通過下圖了解幾個概念 1 鄰域,與中心x距離不超過 距離,如上圖紅色虛線圈 2 核心物件,確定聚類的初始點,如上圖的x1 3 密度直達,在聚類核心物件鄰域內的點,如上圖x2由x1密度直達 4 密度可達,...