柚子快報激活碼778899分享:人工智能 機(jī)器學(xué)習(xí)實(shí)驗(yàn)六:聚類
柚子快報激活碼778899分享:人工智能 機(jī)器學(xué)習(xí)實(shí)驗(yàn)六:聚類
系列文章目錄
機(jī)器學(xué)習(xí)實(shí)驗(yàn)一:線性回歸機(jī)器學(xué)習(xí)實(shí)驗(yàn)二:決策樹模型機(jī)器學(xué)習(xí)實(shí)驗(yàn)三:支持向量機(jī)模型機(jī)器學(xué)習(xí)實(shí)驗(yàn)四:貝葉斯分類器機(jī)器學(xué)習(xí)實(shí)驗(yàn)五:集成學(xué)習(xí)機(jī)器學(xué)習(xí)實(shí)驗(yàn)六:聚類
文章目錄
系列文章目錄一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)原理1.聚類思想2.K 均值聚類算法 K-Means
三、實(shí)驗(yàn)內(nèi)容四、實(shí)驗(yàn)步驟1.訓(xùn)練 K-Means 模型2. 計(jì)算聚類純度、蘭德系數(shù)和 F1 值,評測聚類效果
總結(jié)
一、實(shí)驗(yàn)?zāi)康?/p>
(1)掌握聚類的基本思想; (2)掌握 K-means 算法,編程實(shí)現(xiàn) K-means; (3)掌握使用 K-Means 算法對鳶尾花三分類數(shù)據(jù)集進(jìn)行聚類操作。
二、實(shí)驗(yàn)原理
1.聚類思想
聚類(Clustering)是一種典型的“無監(jiān)督學(xué)習(xí)”,是把物理對象或抽象對 象的集合分組為由彼此類似的對象組成的多個類的分析過程。 聚類試圖將數(shù)據(jù)集中的樣本劃分為若干個通常是不相交的子集,每個子集對 應(yīng)一個簇。與分類的不同在于,聚類所要求的劃分的類別是未知,類別個數(shù)也是 未知的。聚類的目標(biāo)為簇內(nèi)相似度盡可能高,簇間相似度盡可能低。
2.K 均值聚類算法 K-Means
K-means 是一種常用的基于歐式距離的聚類算法,其認(rèn)為兩個目標(biāo)的距離越 近,相似度越大。其算法流程如下:
三、實(shí)驗(yàn)內(nèi)容
使用 Python 讀取鳶尾花三分類數(shù)據(jù)集并訓(xùn)練最佳的 K-Means 模型,隨后使 用生成的模型將數(shù)據(jù)進(jìn)行聚類,并根據(jù)使用聚類純度、蘭德系數(shù)和 F1 值評測聚 類效果。 由于本次為聚類任務(wù),因此使用聚類相關(guān)的混淆矩陣和評價指標(biāo)。 聚類任務(wù)中的混淆矩陣與普通混淆矩陣的意義有一定區(qū)別,如下表所示: 其中,TP 為兩個同類樣本在同一簇的數(shù)量;FP 為兩個非同類樣本在同一簇 的數(shù)量;TN 為兩個非同類樣本分別在兩個簇的數(shù)量;FN 為兩個同類樣本分別在 兩個簇的數(shù)量。 評價指標(biāo)選擇為聚類純度 Purity、蘭德系數(shù) Rand Index(RI)、F1 度量值, 計(jì)算公式如下: 代碼實(shí)現(xiàn)時,可以直接調(diào)用 sklearn 庫中的 pair_confusion_matrix()獲得 混淆矩陣,隨后利用公式進(jìn)行計(jì)算。
四、實(shí)驗(yàn)步驟
1.訓(xùn)練 K-Means 模型
根據(jù)數(shù)據(jù),我們已知鳶尾花分3類,因此我們這里的聚類數(shù)k=3。利用sklearn 的 KMeans()方法訓(xùn)練 K-Means 模型,并將結(jié)果用散點(diǎn)圖表示,實(shí)現(xiàn)代碼如下:
#訓(xùn)練 KMeans 模型
estimator = KMeans(n_clusters=3)
estimator.fit(X) #聚類
#繪制結(jié)果散點(diǎn)圖
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c = "red", marker='o', label='label0')
plt.scatter(x1[:, 0], x1[:, 1], c = "green", marker='*', label='label1')
plt.scatter(x2[:, 0], x2[:, 1], c = "blue", marker='+', label='label2')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(loc=2)
plt.show()
2. 計(jì)算聚類純度、蘭德系數(shù)和 F1 值,評測聚類效果
使用 sklearn.metrics 庫中提供的 pair_confusion_matrix()方法求得當(dāng)前 聚類的混淆矩陣,隨后利用聚類純度、蘭德系數(shù)和 F1 值的計(jì)算公式計(jì)算得到當(dāng) 前聚類效果的相應(yīng)指標(biāo)值。 以下為該部分代碼:
#聚類純度
def accuracy(labels_true, labels_pred):
clusters = np.unique(labels_pred)
labels_true = np.reshape(labels_true, (-1, 1))
labels_pred = np.reshape(labels_pred, (-1, 1))
count = []
for c in clusters:
idx = np.where(labels_pred == c)[0]
labels_tmp = labels_true[idx, :].reshape(-1)
count.append(np.bincount(labels_tmp).max())
return np.sum(count) / labels_true.shape[0]
#蘭德系數(shù)、F1 值
def get_rand_index_and_f_measure(labels_true, labels_pred, beta=1.):
(tn, fp), (fn, tp) = pair_confusion_matrix(labels_true, labels_pred)
ri = (tp + tn) / (tp + tn + fp + fn)
p, r = tp / (tp + fp), tp / (tp + fn)
f_beta = 2*p*r/(p+r)
return ri, f_beta
#輸出結(jié)果
purity = accuracy(y, y_pred)
ri, f_beta = get_rand_index_and_f_measure(y, y_pred, beta=1.)
print(f"聚類純度:{purity}\n 蘭德系數(shù):{ri}\nF1 值:{f_beta}")
總結(jié)
以上就是今天要講的內(nèi)容,機(jī)器學(xué)習(xí)實(shí)驗(yàn)六:聚類
柚子快報激活碼778899分享:人工智能 機(jī)器學(xué)習(xí)實(shí)驗(yàn)六:聚類
相關(guān)鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。