一、聚類算法的概述:
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