聚類算法-KMeans

一、聚類算法的概述:

1、聚類算法:一種典型的無監(jiān)督學(xué)習(xí)算法,主要用于將相似的樣本自動歸到一個類別中。
在聚類算法中根據(jù)樣本之間的相似性,將樣本劃分到不同的類別中,對于不同的相似度計算方法,會得到不同的聚類結(jié)果,常用的相似度計算方法有歐式距離法。

2、聚類算法與分類算法最大的區(qū)別:
聚類算法是無監(jiān)督學(xué)習(xí)算法,而分類算法屬于監(jiān)督的學(xué)習(xí)算法。

3、API:sklearn.cluster.KMeans(n_cluster=8)

  • 參數(shù): n_cluster:開始的聚類中心數(shù)量
  • 方法:KMeans(n_clusters=2, random_state=9).fit_predict(X),計算聚類中心并預(yù)測每個樣本屬于哪個類別,相當(dāng)于先調(diào)用fit(X),然后再調(diào)用predict(X)。

二、創(chuàng)建數(shù)據(jù)集:

1、代碼:

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

# 1、創(chuàng)建數(shù)據(jù)集
# 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],  # 表示每對數(shù)據(jù)之間的間隔
                  random_state=9)

# 數(shù)據(jù)集可視化
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

2、創(chuàng)建的數(shù)據(jù)集效果:


數(shù)據(jù)集效果.png

三、聚類操作:

1、分兩類代碼:n_clusters=2

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

# 1、創(chuàng)建數(shù)據(jù)集
# 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],  # 表示每對數(shù)據(jù)之間的間隔
                  random_state=9)

# 數(shù)據(jù)集可視化
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

# 2.1、聚類為 2 的時候 :使用k-means進行分類,并使用CH方法評估
y_pre = KMeans(n_clusters=2, random_state=9).fit_predict(X)
# 分別嘗試n_cluster=2\3\4,然后查看聚類效果
plt.scatter(X[:, 0], X[:, 1], c=y_pre)
plt.show()

# 用Calinski-Harabasz Index品谷的聚類分?jǐn)?shù)
print("n_clusters=2時候預(yù)測結(jié)果:\n", calinski_harabasz_score(X, y_pre))

1.1、分兩類效果:n_clusters=2,分成了兩堆不同的顏色數(shù)據(jù)集。

分兩類效果.png

1.2、分兩類的預(yù)測值:

分兩類的預(yù)測值.png

2、分3類代碼:n_clusters=3

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

# 1、創(chuàng)建數(shù)據(jù)集
# 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],  # 表示每對數(shù)據(jù)之間的間隔
                  random_state=9)

# 數(shù)據(jù)集可視化
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

# 2.1、聚類為 2 的時候 :使用k-means進行分類,并使用CH方法評估
y_pre = KMeans(n_clusters=2, random_state=9).fit_predict(X)
# 分別嘗試n_cluster=2\3\4,然后查看聚類效果
plt.scatter(X[:, 0], X[:, 1], c=y_pre)
plt.show()

# 用Calinski-Harabasz Index品谷的聚類分?jǐn)?shù)
print("n_clusters=2時候預(yù)測結(jié)果:\n", calinski_harabasz_score(X, y_pre))

# 2.2、聚類為 3 的時候 :使用k-means進行分類,并使用CH方法評估
y_pre = KMeans(n_clusters=3, random_state=9).fit_predict(X)
# 分別嘗試n_cluster=2\3\4,然后查看聚類效果
plt.scatter(X[:, 0], X[:, 1], c=y_pre)
plt.show()

# 用Calinski-Harabasz Index品谷的聚類分?jǐn)?shù)
print("n_clusters=3時候預(yù)測結(jié)果:\n", calinski_harabasz_score(X, y_pre))

2.1、分3類效果:n_clusters=3,分成了3堆不同的顏色數(shù)據(jù)集。

分3類效果.png

2.2、分3類的預(yù)測值:

分3類的預(yù)測值.png

3、分兩類代碼:n_clusters=4

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

# 1、創(chuàng)建數(shù)據(jù)集
# 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],  # 表示每對數(shù)據(jù)之間的間隔
                  random_state=9)

# 數(shù)據(jù)集可視化
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

# 2.1、聚類為 2 的時候 :使用k-means進行分類,并使用CH方法評估
y_pre = KMeans(n_clusters=2, random_state=9).fit_predict(X)
# 分別嘗試n_cluster=2\3\4,然后查看聚類效果
plt.scatter(X[:, 0], X[:, 1], c=y_pre)
plt.show()

# 用Calinski-Harabasz Index品谷的聚類分?jǐn)?shù)
print("n_clusters=2時候預(yù)測結(jié)果:\n", calinski_harabasz_score(X, y_pre))

# 2.2、聚類為 3 的時候 :使用k-means進行分類,并使用CH方法評估
y_pre = KMeans(n_clusters=3, random_state=9).fit_predict(X)
# 分別嘗試n_cluster=2\3\4,然后查看聚類效果
plt.scatter(X[:, 0], X[:, 1], c=y_pre)
plt.show()

# 用Calinski-Harabasz Index品谷的聚類分?jǐn)?shù)
print("n_clusters=3時候預(yù)測結(jié)果:\n", calinski_harabasz_score(X, y_pre))

# 2.3、聚類為 4 的時候 :使用k-means進行分類,并使用CH方法評估
y_pre = KMeans(n_clusters=4, random_state=9).fit_predict(X)
# 分別嘗試n_cluster=2\3\4,然后查看聚類效果
plt.scatter(X[:, 0], X[:, 1], c=y_pre)
plt.show()

# 用Calinski-Harabasz Index品谷的聚類分?jǐn)?shù)
print("n_clusters=4時候預(yù)測結(jié)果:\n", calinski_harabasz_score(X, y_pre))

3.1、分4類效果:n_clusters=4,分成了4堆不同的顏色數(shù)據(jù)集

分4類效果.png

3.2、分4類的預(yù)測值:

分4類的預(yù)測值.png

四、總結(jié):

通過以上這個例子可以看出,這堆數(shù)據(jù)分成 4 類的時候評估效果最佳:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容