欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

主成分分析降維方法和常用聚類(lèi)方法

zhKF_jqr_AI ? 來(lái)源:未知 ? 作者:李倩 ? 2018-07-13 09:22 ? 次閱讀

編者按:機(jī)器學(xué)習(xí)開(kāi)放課程第七課,Snap軟件工程師Sergey Korolev講解了主成分分析降維方法和常用聚類(lèi)方法。

對(duì)CIFAR-10應(yīng)用t-SNE可視化技術(shù)(L2距離)

歡迎來(lái)到開(kāi)放機(jī)器學(xué)習(xí)課程的第七課!

在這節(jié)課中,我們將討論主成分分析(PCA)和聚類(lèi)(clustering)這樣的無(wú)監(jiān)督學(xué)習(xí)方法。你將學(xué)習(xí)為何以及如何降低原始數(shù)據(jù)的維度,還有分組類(lèi)似數(shù)據(jù)點(diǎn)的主要方法。

概覽

介紹

主成分分析

直覺(jué)、理論、應(yīng)用問(wèn)題

用例

聚類(lèi)分析

K均值

近鄰傳播

譜聚類(lèi)

凝聚聚類(lèi)

精確性測(cè)度

作業(yè)七

相關(guān)資源

介紹

和分類(lèi)、回歸方法相比,無(wú)監(jiān)督學(xué)習(xí)算法的主要特性是輸入數(shù)據(jù)是未標(biāo)注過(guò)的(即沒(méi)有給定的標(biāo)簽或分類(lèi)),算法在沒(méi)有任何鋪助的條件下學(xué)習(xí)數(shù)據(jù)的結(jié)構(gòu)。這帶來(lái)了兩點(diǎn)主要不同。首先,它讓我們可以處理大量數(shù)據(jù),因?yàn)閿?shù)據(jù)不需要人工標(biāo)注。其次,評(píng)估無(wú)監(jiān)督算法的質(zhì)量比較難,因?yàn)槿狈ΡO(jiān)督學(xué)習(xí)所用的明確的優(yōu)秀測(cè)度。

無(wú)監(jiān)督學(xué)習(xí)中最常見(jiàn)的任務(wù)之一是降維。一方面,降維可能有助于可視化數(shù)據(jù)(例如,t-SNE方法);另一方面,它可能有助于處理數(shù)據(jù)的多重共線(xiàn)性,為監(jiān)督學(xué)習(xí)方法(例如,決策樹(shù))準(zhǔn)備數(shù)據(jù)。

主成分分析

直覺(jué)、理論、應(yīng)用問(wèn)題

主成分分析是最簡(jiǎn)單、最直觀(guān)、最頻繁使用的降維方法之一,投射數(shù)據(jù)至其正交特征子空間。

更一般地說(shuō),所有觀(guān)測(cè)可以被看成位于初始特征空間的一個(gè)子空間上的橢圓,該子空間的新基底與橢圓軸對(duì)齊。這一假定讓我們移除高度相關(guān)的特征,因?yàn)榛紫蛄渴钦坏?。在一般情況下,所得橢圓的維度和初始空間的維度相當(dāng),但假定數(shù)據(jù)位于一個(gè)維度較小的子空間讓我們可以在新投影(子空間)上移除“過(guò)多的”空間。我們以“貪婪”方式達(dá)成這一點(diǎn),通過(guò)識(shí)別散度最大之處循序選擇每個(gè)橢圓軸。

讓我們看下這一過(guò)程的數(shù)學(xué):

為了將數(shù)據(jù)的維度從n降至k(k <= n),我們以散度降序給軸列表排序,并移除其中最大的k項(xiàng)。

我們從計(jì)算初始特征的散度和協(xié)方差開(kāi)始。這通?;趨f(xié)方差矩陣達(dá)成。根據(jù)協(xié)方差的定義,兩項(xiàng)特征的協(xié)方差據(jù)下式計(jì)算:

其中,μ是第i項(xiàng)特征的期望值。值得注意的是,協(xié)方差是對(duì)稱(chēng)的,一個(gè)向量自身的協(xié)方差等于其散度。

因此,在對(duì)角特征的散度上,協(xié)方差是對(duì)稱(chēng)的。非對(duì)角值為相應(yīng)特征對(duì)的協(xié)方差。若X是觀(guān)測(cè)的矩陣,則協(xié)方差矩陣為:

快速溫習(xí):作為線(xiàn)性操作的矩陣,有本征值和本征向量。它們非常方便,因?yàn)樗鼈兠枋隽宋覀兊目臻g在應(yīng)用線(xiàn)性操作時(shí)不會(huì)翻轉(zhuǎn)只會(huì)拉伸的部分;本征向量保持相同的方向,但是根據(jù)相應(yīng)的本征值拉伸。形式化地說(shuō),矩陣M、本征向量w、本征值λ滿(mǎn)足如下等式:

樣本X的協(xié)方差矩陣可以寫(xiě)成轉(zhuǎn)置矩陣X和X自身的乘積。據(jù)Rayleigh quotient,樣本的最大差異沿該矩陣的本征向量分布,且和最大本征值相一致。因此,我們打算保留的數(shù)據(jù)主成分不過(guò)是對(duì)應(yīng)矩陣的k個(gè)最大本征值的本征向量。

下面的步驟要容易理解一點(diǎn)。我們將數(shù)據(jù)X矩陣乘以其成分,以得到我們的數(shù)據(jù)在選中的成分的正交基底上的投影。如果成分的數(shù)目小于初始空間維數(shù),記住我們?cè)趹?yīng)用這一轉(zhuǎn)換的過(guò)程中會(huì)丟失一點(diǎn)信息。

用例

讓我們看兩個(gè)例子。

iris數(shù)據(jù)集

首先我們先來(lái)查看下iris樣本:

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns; sns.set(style='white')

%matplotlib inline

%config InlineBackend.figure_format = 'retina'

from sklearn import decomposition

from sklearn import datasets

from mpl_toolkits.mplot3d importAxes3D

# 加載數(shù)據(jù)集

iris = datasets.load_iris()

X = iris.data

y = iris.target

# 創(chuàng)建美觀(guān)的3D圖

fig = plt.figure(1, figsize=(6, 5))

plt.clf()

ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)

plt.cla()

for name, label in [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]:

ax.text3D(X[y == label, 0].mean(),

X[y == label, 1].mean() + 1.5,

X[y == label, 2].mean(), name,

horizontalalignment='center',

bbox=dict(alpha=.5, edgecolor='w', facecolor='w'))

# 變動(dòng)標(biāo)簽的順序

y_clr = np.choose(y, [1, 2, 0]).astype(np.float)

ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y_clr, cmap=plt.cm.spectral)

ax.w_xaxis.set_ticklabels([])

ax.w_yaxis.set_ticklabels([])

ax.w_zaxis.set_ticklabels([]);

下面讓我們看看PCA將如何提高一個(gè)不能很好地?cái)M合所有訓(xùn)練數(shù)據(jù)的簡(jiǎn)單模型的結(jié)果:

from sklearn.tree importDecisionTreeClassifier

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score, roc_auc_score

# 切分訓(xùn)練集、測(cè)試集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3,

stratify=y,

random_state=42)

# 深度為2的決策樹(shù)

clf = DecisionTreeClassifier(max_depth=2, random_state=42)

clf.fit(X_train, y_train)

preds = clf.predict_proba(X_test)

print('Accuracy: {:.5f}'.format(accuracy_score(y_test,

preds.argmax(axis=1))))

Accuracy: 0.88889

讓我們?cè)僭囈淮?,不過(guò)這回我們將把維數(shù)降到2:

# 使用sklearn提供的PCA

pca = decomposition.PCA(n_components=2)

X_centered = X - X.mean(axis=0)

pca.fit(X_centered)

X_pca = pca.transform(X_centered)

# 繪制PCA結(jié)果

plt.plot(X_pca[y == 0, 0], X_pca[y == 0, 1], 'bo', label='Setosa')

plt.plot(X_pca[y == 1, 0], X_pca[y == 1, 1], 'go', label='Versicolour')

plt.plot(X_pca[y == 2, 0], X_pca[y == 2, 1], 'ro', label='Virginica')

plt.legend(loc=0);

# 分割測(cè)試集、訓(xùn)練集,同時(shí)應(yīng)用PCA

X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=.3,

stratify=y,

random_state=42)

clf = DecisionTreeClassifier(max_depth=2, random_state=42)

clf.fit(X_train, y_train)

preds = clf.predict_proba(X_test)

print('Accuracy: {:.5f}'.format(accuracy_score(y_test,

preds.argmax(axis=1))))

Accuracy: 0.91111

在這個(gè)例子中,精確度的增加并不明顯。但對(duì)其他高維數(shù)據(jù)集而言,PCA可以戲劇性地提升決策樹(shù)和其他集成方法的精確度。

現(xiàn)在,讓我們查看下可以通過(guò)每個(gè)選中成分解釋的方差百分比。

for i, component in enumerate(pca.components_):

print("{} component: {}% of initial variance".format(i + 1,

round(100 * pca.explained_variance_ratio_[i], 2)))

print(" + ".join("%.3f x %s" % (value, name)

for value, name in zip(component,

iris.feature_names)))

1 component: 92.46% of initial variance 0.362 x sepal length (cm) + -0.082 x sepal width (cm) + 0.857 x petal length (cm) + 0.359 x petal width (cm)

2 component: 5.3% of initial variance 0.657 x sepal length (cm) + 0.730 x sepal width (cm) + -0.176 x petal length (cm) + -0.075 x petal width (cm)

手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集

讓我們看下之前在第3課中用過(guò)的手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集。

digits = datasets.load_digits()

X = digits.data

y = digits.target

讓我們從可視化數(shù)據(jù)開(kāi)始。獲取前10個(gè)數(shù)字。我們使用由每個(gè)像素的亮度值構(gòu)成的8x8矩陣表示數(shù)字。每個(gè)矩陣壓扁至由64個(gè)數(shù)字構(gòu)成的向量,這樣我們就得到了數(shù)據(jù)的特征版本。

# f, axes = plt.subplots(5, 2, sharey=True, figsize=(16,6))

plt.figure(figsize=(16, 6))

for i in range(10):

plt.subplot(2, 5, i + 1)

plt.imshow(X[i,:].reshape([8,8]), cmap='gray');

我們的數(shù)據(jù)有64個(gè)維度,不過(guò)我們將降維至2維。我們將看到,即使僅有2個(gè)維度,我們也可以清楚地看到數(shù)字分離為聚類(lèi)。

pca = decomposition.PCA(n_components=2)

X_reduced = pca.fit_transform(X)

plt.figure(figsize=(12,10))

plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y,

edgecolor='none', alpha=0.7, s=40,

cmap=plt.cm.get_cmap('nipy_spectral', 10))

plt.colorbar()

plt.title('MNIST. PCA projection');

事實(shí)上,t-SNE的效果要更好,因?yàn)镻CA有線(xiàn)性限制,而t-SNE沒(méi)有。然而,即使在這樣一個(gè)小數(shù)據(jù)集上,t-SNE算法的計(jì)算時(shí)間也明顯高于PCA。

from sklearn.manifold import TSNE

tsne = TSNE(random_state=17)

X_tsne = tsne.fit_transform(X)

plt.figure(figsize=(12,10))

plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y,

edgecolor='none', alpha=0.7, s=40,

cmap=plt.cm.get_cmap('nipy_spectral', 10))

plt.colorbar()

plt.title('MNIST. t-SNE projection');

在實(shí)踐中,我們選擇的主成分?jǐn)?shù)目會(huì)滿(mǎn)足我們可以解釋90%的初始數(shù)據(jù)散度(通過(guò)explained_variance_ratio)。在這里,這意味著我們將保留21個(gè)主成分;因此,我們將維度從64降至21.

pca = decomposition.PCA().fit(X)

plt.figure(figsize=(10,7))

plt.plot(np.cumsum(pca.explained_variance_ratio_), color='k', lw=2)

plt.xlabel('Number of components')

plt.ylabel('Total explained variance')

plt.xlim(0, 63)

plt.yticks(np.arange(0, 1.1, 0.1))

plt.axvline(21, c='b')

plt.axhline(0.9, c='r')

plt.show();

聚類(lèi)

聚類(lèi)背后的主要思路相當(dāng)直截了當(dāng)。基本上,我們這樣對(duì)自己說(shuō):“我這里有這些數(shù)據(jù)點(diǎn),并且我們可以看到它們的分組。如果能更具體地描述這些就好了,同時(shí),當(dāng)出現(xiàn)新數(shù)據(jù)點(diǎn)時(shí),將它分配給正確的分組?!边@個(gè)通用的想法鼓勵(lì)探索多種多樣的聚類(lèi)算法。

scikit-learn中的不同聚類(lèi)算法的結(jié)果

下面列出的算法沒(méi)有覆蓋所有聚類(lèi)方法,但它們是最常用的聚類(lèi)方法。

K均值

在所有聚類(lèi)算法中,K均值是最流行的,也是最簡(jiǎn)單的。它的基本步驟為:

選定你認(rèn)為最優(yōu)的聚類(lèi)數(shù)k。

在數(shù)據(jù)空間中隨機(jī)初始化k點(diǎn)作為“中心點(diǎn)”。

將每個(gè)觀(guān)測(cè)分配至最近的中心點(diǎn)。

將中心點(diǎn)更新為所有分配至同一中心點(diǎn)的觀(guān)測(cè)的中心。

重復(fù)第3、4步,重復(fù)固定次數(shù),或直到所有中心點(diǎn)穩(wěn)定下來(lái)(即在第4步中沒(méi)有變化)。

這一算法很容易描述和可視化。

# 讓我們從分配3個(gè)聚類(lèi)的點(diǎn)開(kāi)始。

X = np.zeros((150, 2))

np.random.seed(seed=42)

X[:50, 0] = np.random.normal(loc=0.0, scale=.3, size=50)

X[:50, 1] = np.random.normal(loc=0.0, scale=.3, size=50)

X[50:100, 0] = np.random.normal(loc=2.0, scale=.5, size=50)

X[50:100, 1] = np.random.normal(loc=-1.0, scale=.2, size=50)

X[100:150, 0] = np.random.normal(loc=-1.0, scale=.2, size=50)

X[100:150, 1] = np.random.normal(loc=2.0, scale=.5, size=50)

plt.figure(figsize=(5, 5))

plt.plot(X[:, 0], X[:, 1], 'bo');

# Scipy有一個(gè)函數(shù),接受2個(gè)元組,返回兩者之間的距離

from scipy.spatial.distance import cdist

# 隨機(jī)分配3個(gè)中心點(diǎn)

np.random.seed(seed=42)

centroids = np.random.normal(loc=0.0, scale=1., size=6)

centroids = centroids.reshape((3, 2))

cent_history = []

cent_history.append(centroids)

for i in range(3):

# 計(jì)算數(shù)據(jù)點(diǎn)至中心點(diǎn)的距離

distances = cdist(X, centroids)

# 檢查哪個(gè)是最近的中心點(diǎn)

labels = distances.argmin(axis=1)

# 根據(jù)點(diǎn)的距離標(biāo)記數(shù)據(jù)點(diǎn)

centroids = centroids.copy()

centroids[0, :] = np.mean(X[labels == 0, :], axis=0)

centroids[1, :] = np.mean(X[labels == 1, :], axis=0)

centroids[2, :] = np.mean(X[labels == 2, :], axis=0)

cent_history.append(centroids)

# 讓我們繪制K均值步驟

plt.figure(figsize=(8, 8))

for i in range(4):

distances = cdist(X, cent_history[i])

labels = distances.argmin(axis=1)

plt.subplot(2, 2, i + 1)

plt.plot(X[labels == 0, 0], X[labels == 0, 1], 'bo', label='cluster #1')

plt.plot(X[labels == 1, 0], X[labels == 1, 1], 'co', label='cluster #2')

plt.plot(X[labels == 2, 0], X[labels == 2, 1], 'mo', label='cluster #3')

plt.plot(cent_history[i][:, 0], cent_history[i][:, 1], 'rX')

plt.legend(loc=0)

plt.title('Step {:}'.format(i + 1));

這里,我們使用了歐幾里得距離,不過(guò)算法可以通過(guò)任何其他測(cè)度收斂。你不僅可以改動(dòng)步驟的數(shù)目,或者收斂標(biāo)準(zhǔn),還可以改動(dòng)數(shù)據(jù)點(diǎn)和聚類(lèi)中心點(diǎn)之間的距離衡量方法。

這一算法的另一項(xiàng)“特性”是,它對(duì)聚類(lèi)中心點(diǎn)的初始位置敏感。你可以多次運(yùn)行該算法,接著平均所有中心點(diǎn)結(jié)果。

選擇K均值的聚類(lèi)數(shù)

和分類(lèi)、回歸之類(lèi)的監(jiān)督學(xué)習(xí)任務(wù)不同,聚類(lèi)需要花更多心思在選擇優(yōu)化標(biāo)準(zhǔn)上。使用K均值時(shí),我們通常優(yōu)化觀(guān)測(cè)及其中心點(diǎn)的平方距離之和。

其中C為冪為K的聚類(lèi)集合,μ為聚類(lèi)中心點(diǎn)。

這個(gè)定義看起來(lái)很合理——我們想要觀(guān)測(cè)盡可能地接近其中心點(diǎn)。但是,這里有一個(gè)問(wèn)題——當(dāng)中心點(diǎn)的數(shù)量等于觀(guān)測(cè)的數(shù)量時(shí),將達(dá)到最優(yōu)值,所以最終你得到的每個(gè)觀(guān)測(cè)自成一個(gè)聚類(lèi)。

為了避免這一情形,我們應(yīng)該選擇聚類(lèi)數(shù),使這一數(shù)字之后的函數(shù)J(C)下降得不那么快。形式化一點(diǎn)來(lái)說(shuō):

讓我們來(lái)看一個(gè)例子。

from sklearn.cluster importKMeans

inertia = []

for k in range(1, 8):

kmeans = KMeans(n_clusters=k, random_state=1).fit(X)

inertia.append(np.sqrt(kmeans.inertia_))

plt.plot(range(1, 8), inertia, marker='s');

plt.xlabel('$k$')

plt.ylabel('$J(C_k)$');

我們可以看到,J(C)在3之前下降得很快,在此之后變化不大。這意味著,聚類(lèi)的最佳數(shù)字是3.

問(wèn)題

K均值內(nèi)在地是NP-hard的。對(duì)d維、k聚類(lèi)、n觀(guān)測(cè)而言,算法復(fù)雜度為O(n(dk+1))。有一些啟發(fā)式的算法可以緩解這一問(wèn)題;例如MiniBatch K均值,分批次處理數(shù)據(jù),而不是一下子擬合整個(gè)數(shù)據(jù)集,接著通過(guò)對(duì)之前的步驟取平均數(shù)移動(dòng)中心點(diǎn)。

scikit-learn的實(shí)現(xiàn)有一些優(yōu)勢(shì),例如可以使用n_init函數(shù)參數(shù)聲明初始化數(shù),讓我們識(shí)別更有魯棒性的中心點(diǎn)。此外,算法可以并行運(yùn)行,以減少計(jì)算時(shí)間。

近鄰傳播

近鄰傳播是聚類(lèi)算法的另一個(gè)例子。和K均值不同,這一方法不需要我們事先設(shè)定聚類(lèi)的數(shù)目。這一算法的主要思路是我們將根據(jù)觀(guān)測(cè)的相似性(或者說(shuō),它們“符合”彼此的程度)聚類(lèi)數(shù)據(jù)。

讓我們定義一種相似性測(cè)度,對(duì)觀(guān)測(cè)x、y、z而言,若x更接近y,而非z,那么s(x, y) > s(x, z)。s的一個(gè)簡(jiǎn)單例子是負(fù)平方距離s(x, y) = - ||x-y||2。

現(xiàn)在讓我們通過(guò)兩個(gè)矩陣來(lái)描述“相符程度”。其中一個(gè)矩陣ri,k將決定,相比七塔寺所有可能的“角色模型”,第k個(gè)觀(guān)測(cè)是第i個(gè)觀(guān)測(cè)的“角色模型”的合適程度。另一個(gè)矩陣ai,k將決定,第i個(gè)觀(guān)測(cè)選擇第k個(gè)觀(guān)測(cè)作為“角色模型”的合適程度。這可能聽(tīng)起來(lái)有點(diǎn)困惑,但如果你自己想一個(gè)例子實(shí)際操作一下,就要好理解得多。

矩陣根據(jù)如下規(guī)則依次更新:

譜聚類(lèi)

譜聚類(lèi)組合了上面描述過(guò)的一些方法,創(chuàng)建了一種更強(qiáng)勁的聚類(lèi)方法。

首先,該算法需要我們定義觀(guān)測(cè)的相似性矩陣——鄰接矩陣。這一步可以使用和近鄰傳播類(lèi)似的方法做到,所以矩陣A將儲(chǔ)存相應(yīng)數(shù)據(jù)點(diǎn)之間的負(fù)平方距離。該矩陣描繪了一整張圖,其中觀(guān)測(cè)為頂點(diǎn),每對(duì)觀(guān)測(cè)之間的估計(jì)相似值為這對(duì)頂點(diǎn)間的邊。就上面定義的測(cè)度和二維觀(guān)測(cè)而言,這是相當(dāng)直觀(guān)的——如果兩個(gè)觀(guān)測(cè)之間的邊最短,那么這兩個(gè)觀(guān)測(cè)相似。我們將把圖分割為兩張子圖,滿(mǎn)足以下條件:每張子圖中的每個(gè)觀(guān)測(cè)和這張子圖中的另一個(gè)觀(guān)測(cè)相似。形式化地說(shuō),這是一個(gè)Normalized cuts問(wèn)題;建議閱讀以下論文了解具體細(xì)節(jié):

http://people.eecs.berkeley.edu/%7Emalik/papers/SM-ncut.pdf

凝聚聚類(lèi)

在不使用固定聚類(lèi)數(shù)目的聚類(lèi)算法中,該算法是最簡(jiǎn)單、最容易理解的。

這一算法相當(dāng)簡(jiǎn)單:

剛開(kāi)始,每個(gè)觀(guān)測(cè)自成其聚類(lèi)

根據(jù)聚類(lèi)中心兩兩距離降序排列

合并最近的兩個(gè)相鄰聚類(lèi),然后重新計(jì)算中心

重復(fù)第2、3步直到所有數(shù)據(jù)合并為一個(gè)聚類(lèi)

搜索最近聚類(lèi)有多種方法:

單鏈(Single linkage)

全鏈(Complete linkage)

平均鏈(Average linkage)

中心鏈(Centroid linkage)

其中,第三個(gè)方法是最有效率的做法,因?yàn)樗恍枰诿看尉垲?lèi)合并后重新計(jì)算距離。

凝聚聚類(lèi)的結(jié)果可以可視化為美觀(guān)的聚類(lèi)樹(shù)(樹(shù)枝形結(jié)構(gòu)聯(lián)系圖),幫助識(shí)別算法應(yīng)該停止的時(shí)刻,以得到最有結(jié)果。有很多Python工具可以構(gòu)建這樣的樹(shù)枝形結(jié)構(gòu)聯(lián)系圖。

讓我們考慮之前的K均值聚類(lèi)一節(jié)中所用的例子:

from scipy.cluster import hierarchy

from scipy.spatial.distance import pdist

X = np.zeros((150, 2))

np.random.seed(seed=42)

X[:50, 0] = np.random.normal(loc=0.0, scale=.3, size=50)

X[:50, 1] = np.random.normal(loc=0.0, scale=.3, size=50)

X[50:100, 0] = np.random.normal(loc=2.0, scale=.5, size=50)

X[50:100, 1] = np.random.normal(loc=-1.0, scale=.2, size=50)

X[100:150, 0] = np.random.normal(loc=-1.0, scale=.2, size=50)

X[100:150, 1] = np.random.normal(loc=2.0, scale=.5, size=50)

distance_mat = pdist(X) # pdist計(jì)算上三角距離矩陣

Z = hierarchy.linkage(distance_mat, 'single') # linkage為凝聚聚類(lèi)算法

plt.figure(figsize=(10, 5))

dn = hierarchy.dendrogram(Z, color_threshold=0.5)

精確性測(cè)度

和分類(lèi)相反,很難評(píng)估聚類(lèi)所得結(jié)果的質(zhì)量。這里,測(cè)度無(wú)法依賴(lài)于標(biāo)簽,只能取決于分割的質(zhì)量。其次,當(dāng)我們進(jìn)行聚類(lèi)時(shí),我們通常不具備觀(guān)測(cè)的真實(shí)標(biāo)簽。

質(zhì)量測(cè)度分為內(nèi)、外部。外部測(cè)度使用關(guān)于已知真實(shí)分割的信息,而內(nèi)部測(cè)度不使用任何外部信息,僅基于初始數(shù)據(jù)評(píng)估聚類(lèi)的質(zhì)量。聚類(lèi)的最優(yōu)數(shù)目通常根據(jù)某些內(nèi)部測(cè)度決定。

所有下面的測(cè)度都包含在sklearn.metrics中。

調(diào)整蘭德指數(shù)(ARI)

這里,我們假定目標(biāo)的真實(shí)標(biāo)簽是已知的。令N為樣本中的觀(guān)測(cè)數(shù),a為標(biāo)簽相同、位于同一聚類(lèi)中的觀(guān)測(cè)對(duì)數(shù),b為標(biāo)簽不同、位于不同聚類(lèi)中的觀(guān)測(cè)數(shù)。蘭德指數(shù)可由下式得出:

換句話(huà)說(shuō),蘭德指數(shù)評(píng)估分割后的聚類(lèi)結(jié)果和初始標(biāo)簽一致的比例。為了讓任意觀(guān)測(cè)數(shù)、聚類(lèi)數(shù)的蘭德指數(shù)接近零,我們有必要縮放其大小,由此得到了調(diào)整蘭德指數(shù):

這一測(cè)度是對(duì)稱(chēng)的,不受標(biāo)簽排列的影響。因此,該指數(shù)是不同樣本分割距離的衡量。ARI的取值范圍是[-1, 1],負(fù)值意味著分割更獨(dú)立,正值意味著分割更一致(ARI = 1意味著分割完全一致)。

調(diào)整互信息(AMI)

這一測(cè)度和ARI相似。它也是對(duì)稱(chēng)的,不受標(biāo)簽的具體值及排列的影響。它由熵函數(shù)定義,將樣本分割視作離散分布。MI指數(shù)定義為兩個(gè)分布的互信息,這兩個(gè)分布對(duì)應(yīng)于樣本分割聚類(lèi)。直觀(guān)地說(shuō),互信息衡量?jī)蓚€(gè)聚類(lèi)分割共享的信息量,即,關(guān)于其中之一的信息在多大程度上可以降低另一個(gè)的不確定性。

AMI的定義方式和ARI類(lèi)似。這讓我們可以避免因聚類(lèi)數(shù)增長(zhǎng)而導(dǎo)致的MI指數(shù)增長(zhǎng)。AMI的取值范圍為[0, 1]。接近零意味著分割更獨(dú)立,接近1意味著分割更相似(AMI = 1意味著完全一致)。

同質(zhì)性、完整性、V-measure

形式化地說(shuō),這些測(cè)度同樣基于熵函數(shù)和條件熵函數(shù)定義,將樣本分割視作離散分布:

其中K為聚類(lèi)結(jié)果,C為初始分割。因此,h評(píng)估是否每個(gè)聚類(lèi)由相同分類(lèi)目標(biāo)組成,而c評(píng)估相同分類(lèi)買(mǎi)的物品分屬聚類(lèi)的匹配程度。這些測(cè)度不是對(duì)稱(chēng)的。兩者的取值范圍均為[0, 1],接近1的值暗示更精確的聚類(lèi)結(jié)果。這些測(cè)度的值不像ARI或AMI一樣縮放過(guò),因此取決于聚類(lèi)數(shù)。當(dāng)一個(gè)隨機(jī)聚類(lèi)結(jié)果的聚類(lèi)數(shù)足夠大,而目標(biāo)數(shù)足夠小時(shí),這一測(cè)度的值不會(huì)接近零。在這樣的情形下,使用ARI要更合理。然而,當(dāng)觀(guān)測(cè)數(shù)大于100而聚類(lèi)數(shù)小于10時(shí),這一問(wèn)題并不致命,可以忽略。

V-measure結(jié)合了h和c,為h和c的調(diào)和平均數(shù):v = (2hc)/(h + c)。它是對(duì)稱(chēng)的,衡量?jī)蓚€(gè)聚類(lèi)結(jié)果的一致性。

輪廓

和之前描述的測(cè)度都不一樣,輪廓系數(shù)(silhouette coefficient)無(wú)需目標(biāo)真實(shí)標(biāo)簽的知識(shí)。它讓我們僅僅根據(jù)未標(biāo)注的初始樣本和聚類(lèi)結(jié)果估計(jì)聚類(lèi)的質(zhì)量。首先,為每項(xiàng)觀(guān)測(cè)計(jì)算輪廓系數(shù)。令a為某目標(biāo)到同一聚類(lèi)中的其他目標(biāo)的平均距離,又令b為該目標(biāo)到最近聚類(lèi)(不同于該目標(biāo)所屬聚類(lèi))中的目標(biāo)的平均距離,則該目標(biāo)的輪廓系數(shù)為:

樣本的輪廓系數(shù)為樣本中所有數(shù)據(jù)點(diǎn)的輪廓系數(shù)的均值。該系數(shù)的取值范圍為[-1, 1],輪廓系數(shù)越高,意味著聚類(lèi)的結(jié)果越好。

輪廓系數(shù)有助于確定聚類(lèi)數(shù)k的最佳值:選取最大化輪廓系數(shù)的聚類(lèi)數(shù)。

作為總結(jié),讓我們看看這些測(cè)度在MNIST手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集上的效果如何:

from sklearn import metrics

from sklearn import datasets

import pandas as pd

from sklearn.cluster importKMeans, AgglomerativeClustering, AffinityPropagation, SpectralClustering

data = datasets.load_digits()

X, y = data.data, data.target

algorithms = []

algorithms.append(KMeans(n_clusters=10, random_state=1))

algorithms.append(AffinityPropagation())

algorithms.append(SpectralClustering(n_clusters=10, random_state=1,

affinity='nearest_neighbors'))

algorithms.append(AgglomerativeClustering(n_clusters=10))

data = []

for algo in algorithms:

algo.fit(X)

data.append(({

'ARI': metrics.adjusted_rand_score(y, algo.labels_),

'AMI': metrics.adjusted_mutual_info_score(y, algo.labels_),

'Homogenity': metrics.homogeneity_score(y, algo.labels_),

'Completeness': metrics.completeness_score(y, algo.labels_),

'V-measure': metrics.v_measure_score(y, algo.labels_),

'Silhouette': metrics.silhouette_score(X, algo.labels_)}))

results = pd.DataFrame(data=data, columns=['ARI', 'AMI', 'Homogenity',

'Completeness', 'V-measure',

'Silhouette'],

index=['K-means', 'Affinity',

'Spectral', 'Agglomerative'])

results

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 聚類(lèi)
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    14243
  • 降維
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7670
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8446

    瀏覽量

    133123

原文標(biāo)題:機(jī)器學(xué)習(xí)開(kāi)放課程(七):無(wú)監(jiān)督學(xué)習(xí):PCA和聚類(lèi)

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    分享成分分析源碼

    一個(gè)成分分析源碼
    發(fā)表于 05-13 11:00

    深入認(rèn)識(shí)成分分析

    再談協(xié)方差矩陣之主成分分析
    發(fā)表于 09-26 08:26

    基于雙向二成分分析的掌紋識(shí)別

    掌紋識(shí)別是一門(mén)新興的生物特征識(shí)別技術(shù)。使用成分分析對(duì)圖像向量進(jìn)行處理,向量數(shù)一般都很高。二成分分
    發(fā)表于 12-16 12:43 ?10次下載

    基于Contourlet變換和成分分析的高光譜數(shù)據(jù)噪聲消除

    該文提出了一種適合于高光譜超數(shù)據(jù)處理的基于Contourlet 變換和成分分析的噪聲消除方法。該方法首先利用Contourlet 變換實(shí)
    發(fā)表于 02-10 11:00 ?18次下載

    薄膜材料成分分析方法

    薄膜材料成分分析方法
    發(fā)表于 01-10 16:38 ?89次下載
    薄膜材料<b class='flag-5'>成分分析</b><b class='flag-5'>方法</b>

    成分分析的圖像壓縮與重構(gòu)

    針對(duì)圖像占用空間大,特征表示時(shí)數(shù)較高等的缺點(diǎn),系統(tǒng)介紹了成分分析(PCA)的基本原理。提出了利用PCA進(jìn)行圖像數(shù)據(jù)壓縮與重建的基本模型。實(shí)驗(yàn)結(jié)果表明,利用PCA能有效的減
    發(fā)表于 04-05 15:44 ?34次下載

    SVD的效果到底如何呢?

    機(jī)器學(xué)習(xí)中常用方法成分分析(PCA),而
    發(fā)表于 02-11 17:19 ?1809次閱讀

    改進(jìn)成分分析貝葉斯判別方法

    PCA-BDA方法評(píng)估出各條記錄的安全等級(jí);然后,利用成分分析(PCA)過(guò)程中的特征向量矩陣,貝葉斯判別(BDA)過(guò)程中的判別函數(shù)矩陣,以及各安全等級(jí)的權(quán)重計(jì)算得出屬性重要度;最后,通過(guò)參考屬性重要度來(lái)調(diào)控屬性。安全評(píng)價(jià)準(zhǔn)確率
    發(fā)表于 12-01 16:45 ?1次下載
    改進(jìn)<b class='flag-5'>主</b><b class='flag-5'>成分分析</b>貝葉斯判別<b class='flag-5'>方法</b>

    關(guān)于機(jī)器學(xué)習(xí)PCA算法的成分分析

    人工智能機(jī)器學(xué)習(xí)有關(guān)算法內(nèi)容,人工智能之機(jī)器學(xué)習(xí)主要有三大類(lèi):1)分類(lèi);2)回歸;3)類(lèi)。今天我們重點(diǎn)探討一下PCA算法。 PCA(成分分析
    發(fā)表于 06-27 17:23 ?3212次閱讀

    可提取非線(xiàn)性結(jié)構(gòu)的子空間類(lèi)方法

    聚類(lèi)分析是機(jī)器學(xué)習(xí)與數(shù)據(jù)挖掘中的重要工具,而子空間類(lèi)是髙數(shù)據(jù)分析常用
    發(fā)表于 05-18 14:01 ?2次下載

    基于稀疏雙向二成分分析的人臉識(shí)別方法

    雙向二成分分析((2D)2PCA)易受異常值影響,魯棒性差,且所提取的特征向量是非稀疏的。針對(duì)上述不足,提出基于L1范數(shù)的稀疏雙向二
    發(fā)表于 05-24 14:30 ?4次下載

    基于成分分析和支持向量機(jī)的滾動(dòng)軸承故障診斷

    )模型的滾動(dòng)軸承故障診斷方法。通過(guò)比較不冋方法計(jì)算的標(biāo)準(zhǔn)差和拉依達(dá)準(zhǔn)則對(duì)教據(jù)進(jìn)行誤差分析,利用 MATLAB軟件中的PCA函數(shù)對(duì)數(shù)據(jù)進(jìn)行成分分析
    發(fā)表于 05-31 10:42 ?4次下載

    基于信息增益和成分分析的網(wǎng)絡(luò)入侵檢測(cè)

    為提高入侵檢測(cè)效率,需要對(duì)數(shù)據(jù)進(jìn)行特征提取以降低數(shù)據(jù)維度。結(jié)合信息增益(IG)和成分分析(PCA),提出一種網(wǎng)絡(luò)入侵檢測(cè)方法。通過(guò)G提取分類(lèi)能力強(qiáng)的屬性特征,利用PCA對(duì)其
    發(fā)表于 06-27 17:00 ?24次下載

    什么是成分分析

    解析成分分析技術(shù)成分分析技術(shù)涵蓋了多種科學(xué)方法,用于精確地鑒定和測(cè)量產(chǎn)品或樣本中的組成成分,包括它們的定性與定量分析。金鑒實(shí)驗(yàn)室擁有先進(jìn)的
    的頭像 發(fā)表于 11-08 12:29 ?646次閱讀
    什么是<b class='flag-5'>成分分析</b>?

    數(shù)據(jù)類(lèi)工具介紹——SpatialPCA

    現(xiàn)有常用的空間轉(zhuǎn)錄組類(lèi)方法,如
    的頭像 發(fā)表于 02-07 11:19 ?90次閱讀
    數(shù)據(jù)<b class='flag-5'>降</b><b class='flag-5'>維</b><b class='flag-5'>聚</b><b class='flag-5'>類(lèi)</b>工具介紹——SpatialPCA