文章目錄
- 一、資料集探索
- 二、資料預處理
- 三、構模組化型擷取結果
- 四、聚類結果可視化
- 五、聚類模型評估
- ① 輪廓系數
- ② 卡林斯基 - 哈拉巴斯指數
- ③ FMI評價法
一、資料集探索
Seeds 資料集存放了不同品種小麥種子的
區域
、
周長
、
壓實度
、
籽粒長度
、
籽粒寬度
、
不對稱系數
、
籽粒腹溝長度
以及類别資料。該資料集總共210條記錄、7個特征、一個标簽,标簽分為3類。
# 1.讀取資料集
data = pd.read_csv("./data/seeds_datas.csv")
x = data.iloc[:,1:8]
target = data.iloc[:,-1]
X:
target:
傳回頂部
二、資料預處理
- 不同特征之間往往具有不同的量綱,由此所造成的數值間的差異可能很大,在涉及空間距離計算或梯度下降法等情況的時候不對其進行處理會影響到資料分析結果的準确性。為了消除特征之間的量綱和取值範圍差異可能會造成的影響,需對資料進行标準化處理,也可以稱為規範化處理。
- 在這裡我們對資料集進行标準差标準化處理。
# 2.對資料集進行離差标準化處理
MMS = MinMaxScaler().fit(x)
x_ = MMS.transform(x)
處理後的資料集:
傳回頂部
三、構模組化型擷取結果
# 3.建構KMeans聚類模型
cluster = KMeans(n_clusters=3,random_state=123).fit(x_)
# 3.1 擷取聚類質心
center = cluster.cluster_centers_
# [[0.75733298 0.79374354 0.69419238 0.73003765 0.76950062 0.36757645, 0.75709318], [0.1233337 0.17513685 0.37817899 0.18671025 0.16252742 0.49856915, 0.27928792], [0.38349003 0.4198407 0.67120387 0.36468534 0.46849918 0.26417688, 0.31838389]]
# 3.2 擷取聚類标簽
pre_target = cluster.labels_
# 3.3 擷取簇内平方和
inertia = cluster.inertia_ # 22.024363075666038
傳回頂部
四、聚類結果可視化
- 這裡我們的資料集是多元(包含七個特征),我們需要對其進行降維處理,降到二維平面使用散點圖來進行展示。
- 這裡的降維采用TSNE。t-SNE(t-distributed stochastic neighbor embedding)是用于降維的一種機器學習算法,是由 Laurens van der Maaten 等在08年提出來。此外,
。t-SNE 是一種非線性降維算法,非常适用于高維資料降維到2維或者3維,進行可視化
# 4.聚類結果可視化
from sklearn.manifold import TSNE
# 4.1 降維處理資料
tsne = TSNE(n_components=2,init='random',random_state=144).fit(x_)
df = pd.DataFrame(tsne.embedding_)
df['labels'] =
- 降維後的資料集
df1 = df[df['labels'] == 0]
df2 = df[df['labels'] == 1]
df3 = df[df['labels'] == 2]
# 繪制畫布
fig = plt.figure(figsize=(9,6))
plt.plot(df1[0],df1[1],'bo',df2[0],df2[1],'r*',df3[0],df3[1],'gD')
plt.show()
傳回頂部
五、聚類模型評估
KMeans聚類模型評估名額參見:【skLearn 聚類算法】KMeans
① 輪廓系數
# 5.1 輪廓系數法
from sklearn.metrics import silhouette_score
silhouetteScore = []
for i in range(2,15):
# 建構聚類模型
kmeans = KMeans(n_clusters=i,random_state=111).fit(x_)
score = silhouette_score(x_,kmeans.labels_)
silhouetteScore.append(score)
plt.figure(figsize=(10,8))
plt.plot(range(2,15),silhouetteScore,linewidth=1.5,linestyle='-')
plt.axvline(x=3, color="red", linestyle="--")
plt.axvline(x=4, color="red", linestyle="--")
plt.show()
- 在這裡我們擷取輪廓系數
,如果要擷取每個樣本的輪廓系數應當使用score是所有樣本的輪廓系數均值
。這裡是silhouette_samples
,是以采用輪廓系數均值進行評估。針對超參數k(n_cluster)
- 聚類數目為2、3和3、4的時候,圖形的畸變程度最大。本身資料集就是關于3類小麥種子的,側面說明了聚類為3的時候效果較好。
傳回頂部
② 卡林斯基 - 哈拉巴斯指數
# 5.2 卡林斯基-哈拉巴斯指數
from sklearn.metrics import calinski_harabasz_score
chs = []
for i in range(2,15):
# 建構聚類模型
kmeans = KMeans(n_clusters=i,random_state=112).fit(x_)
chsScore = calinski_harabasz_score(x_,kmeans.labels_)
chs.append(chsScore)
plt.figure(figsize=(10, 8))
plt.plot(range(2, 15), chs, linewidth=1.5, linestyle='-')
plt.show()
- 由圖可以看出,當
的時候,FMI評分都較高,聚類效果也都相對較好。n_cluster=2、3
傳回頂部
③ FMI評價法
# 5.3 FMI評價法 --- 需要有真實标簽
from sklearn.metrics import fowlkes_mallows_score
fms = []
for i in range(2,15):
# 建構聚類模型
kmeans = KMeans(n_clusters=i,random_state=112).fit(x_)
fmsScore = fowlkes_mallows_score(target,kmeans.labels_)
fms.append(fmsScore)
plt.figure(figsize=(10, 8))
plt.plot(range(2, 15), fms, linewidth=1.5, linestyle='-')
plt.show()
- 由圖可以看出,當
的時候,FMI評分最高,聚類效果較好。n_cluster=3