天天看點

機器學習: k-means聚類對資料進行預分類k-means聚類步驟:聚類評估标準總結代碼示例

k-means聚類

非監督學習

把資料劃分為k個類别

-知道類别個數

-不知道類别個數 超參數

k = 3

步驟:

1、随機在資料中抽取3個樣本,當做3個類别的中心點(k1, k2, k3)

2、計算其餘的點分别到這三個中心點的距離,

每一個樣本有3個距離(a, b, c)

從中選出舉例最近的一個點作為自己的标記,行成3個族群

3、分别計算這3個族群的平均值,把3個平均值與之前的3個舊中心點進行比較

4、如果相同結束聚類,如果不同,把這3個平均值當做新的中心點重複第2步

聚類評估标準

輪廓系數

計算公式

機器學習: k-means聚類對資料進行預分類k-means聚類步驟:聚類評估标準總結代碼示例

對于每個點i 為已聚類資料中的樣本,

bi為i 到其他族群的所有樣本的距離最小值

ai為i 到本身族群的距離平均值

最終計算出所有樣本點的輪廓系數平均值

極端:

bi>>ai ,sci=1 完美

ai>>bi ,sci=−1 最差

輪廓系數取值[-1, 1]

總結

采用疊代算法,直覺易懂并且非常實用

缺點:容易收斂到局部最優解(多次聚類)

聚類,用在分類之前

代碼示例

# -*- coding: utf-8 -*-

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt


# 生成資料
X, y = make_blobs(n_samples=200, centers=3, n_features=5, random_state=0)

# k-means聚類
km = KMeans(n_clusters=3)
km.fit(X)
y_predict = km.predict(X)

# 評估聚類效果
print(silhouette_score(X, y_predict))
# 0.72

# 繪制聚類結果圖
color = ["red", "green", "blue"]
colors = [color[i] for i in y_predict]

plt.figure()
plt.scatter(X[:, 1], X[:, 2], color=colors)
plt.savefig("a.png")
      
機器學習: k-means聚類對資料進行預分類k-means聚類步驟:聚類評估标準總結代碼示例

繼續閱讀