聚類演算法Kmeans的工作原理和sklearn實現

2021-08-28 18:10:57 字數 2190 閱讀 4152

聚類演算法出現的原因:手裡沒有標籤,也就是沒有y值了,聚類是把相似的東西分為一組。

kmeans演算法輸入的引數:

要得到的簇的個數,也就是分成幾類,也就是需要指定k值

質心(不需要輸入):各個向量維度取平均值

歐幾里得距離。兩個點之間的距離。

優化的目標就是,不同的質心與同乙個點的距離,誰最近,這個店就屬於哪一類。

kmeans演算法的執行流程

1.對於兩類資料點,首先輸入分類的k為2,會隨機找到兩個點作為質心。

2 對每個樣本點計算歐幾里得距離,然後算出屬於哪一類

3 獲取第一次迭代的分類結果

4 對第一次的結果尋找新的質心,重新聚類。

5 獲得第二次的結果

6 依次不停迴圈往復,直到質心不再發生變化為止。

kmeans演算法的優劣性:

優點:簡單快速, 適合常規資料集

缺點:k值難確定,複雜度與樣本呈線性關係,很難發現任意形狀的簇。

python實現對鳶尾花資料集進行聚類

from sklearn import datasets  

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

from sklearn.cluster import kmeans

iris=datasets.load_iris(

)iris_x=iris.data[:,

0:2]

#z只取前兩個維度

iris_x

#繪製資料分布圖

plt.scatter(iris_x[:,

0], iris_x[:,

1], c =

"green"

, marker=

'o', label=

'see'

)

plt.show(

)

結果如下:

接下來進行聚類:

estimator = kmeans(n_clusters=2)

#構造聚類器

estimator.fit(iris_x)

label_pred = estimator.labels_ #獲取聚類標籤

#繪製k-means結果

x0 = iris_x[label_pred ==0]

x1 = iris_x[label_pred ==1]

plt.scatter(x0[:,

0], x0[:,

1], c =

"red"

, marker=

'o', label=

'label0'

) plt.scatter(x1[:,

0], x1[:,

1], c =

"green"

, marker=

'*', label=

'label1'

)

plt.show(

)

聚類後結果如下

聚類的結果評估:

用輪廓係數去評估聚類的結果。

也就是說結果值越接近1,證明樣本聚類合理。

from sklearn import metrics

score=metrics.silhouette_score(iris_x,label_pred)

score

結果值為0.4

K Means聚類演算法原理

k means演算法是無監督的聚類演算法,它實現起來比較簡單,聚類效果也不錯,因此應用很廣泛。k means演算法有大量的變體,本文就從最傳統的k means演算法講起,在其基礎上講述k means的優化變體方法。包括初始化優化k means 距離計算優化elkan k means演算法和大資料情況...

K Means聚類演算法原理

k means演算法是無監督的聚類演算法,它實現起來比較簡單,聚類效果也不錯,因此應用很廣泛。k means演算法有大量的變體,本文就從最傳統的k means演算法講起,在其基礎上講述k means的優化變體方法。包括初始化優化k means 距離計算優化elkan k means演算法和大資料情況...

K Means聚類演算法 K D樹原理

10.14日誌 聚類 事先不知道資料會分為幾類,通過聚類分析將資料聚合成幾個群體。聚類不需要對資料進行訓練和學習。屬於無監督學習。裡的應用情況 k means演算法如何自動確定聚類數目k 這裡師兄寫的那個自迴圈找出k很迷啊 kd樹 k dimensional樹的簡稱 是一種分割k維資料空間的資料結構...