国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站優(yōu)化軟件免費(fèi)入駐的跨境電商平臺

網(wǎng)站優(yōu)化軟件,免費(fèi)入駐的跨境電商平臺,除了網(wǎng)頁外 網(wǎng)站還需要,中國產(chǎn)品網(wǎng)免費(fèi)網(wǎng)站目錄 一、聚類的原理與實(shí)現(xiàn) 1.1 聚類的概念和類型 1.2 如何度量距離 1.2.1 數(shù)據(jù)的類型 1.2.2 連續(xù)型數(shù)據(jù)的距離度量方法 1.2.3 離散型數(shù)據(jù)的距離度量方法 1.3 聚類的基本步驟 二、層次聚類算法 2.1 算法原理和實(shí)例 2.2 算法的Sklearn實(shí)現(xiàn) 2.2.1 層次聚類法的可視化實(shí)…

目錄

一、聚類的原理與實(shí)現(xiàn)

1.1 聚類的概念和類型

1.2 如何度量距離

1.2.1 數(shù)據(jù)的類型

1.2.2 連續(xù)型數(shù)據(jù)的距離度量方法

1.2.3 離散型數(shù)據(jù)的距離度量方法

1.3 聚類的基本步驟

二、層次聚類算法

2.1 算法原理和實(shí)例

2.2 算法的Sklearn實(shí)現(xiàn)

2.2.1 層次聚類法的可視化實(shí)例

2.2.2 繪制層次聚類的樹狀圖

2.2.3 DataFrame數(shù)據(jù)結(jié)構(gòu)

三、k-means聚類算法

3.1?算法原理和實(shí)例

3.1.1?k-means聚類算法原理

3.1.2?k-means聚類算法舉例

3.1.3?k-means聚類算法的優(yōu)缺點(diǎn)

3.2 算法中k值的確定

3.3 算法的Sklearn實(shí)現(xiàn)


一、聚類的原理與實(shí)現(xiàn)

1.1 聚類的概念和類型

聚類是一種無監(jiān)督學(xué)習(xí)的方法,用于將數(shù)據(jù)集中的對象按照它們的相似性分組。聚類的目標(biāo)是使得同一組內(nèi)的對象之間的相似性盡可能地高,而不同組之間的相似性盡可能地低。

聚類的類型包括:

  1. 劃分聚類(Partitioning Clustering):將數(shù)據(jù)集劃分成不重疊的子集,每個子集代表一個聚類。常見的劃分聚類算法包括K均值聚類和K均值++聚類。

  2. 層次聚類(Hierarchical Clustering):將數(shù)據(jù)集組織成一個層次結(jié)構(gòu),每個層次上的節(jié)點(diǎn)代表一個聚類。層次聚類可分為自底向上的凝聚聚類和自頂向下的分裂聚類。

  3. 密度聚類(Density-based Clustering):根據(jù)數(shù)據(jù)點(diǎn)的密度將數(shù)據(jù)集劃分為聚類。具有相對較高密度的數(shù)據(jù)點(diǎn)將組成聚類,而低密度區(qū)域?qū)⒈徽J(rèn)為是噪聲。DBSCAN是一種常用的密度聚類算法。

  4. 基于模型的聚類(Model-based Clustering):假設(shè)數(shù)據(jù)集由多個潛在的概率模型組成,每個模型代表一個聚類。常見的基于模型的聚類算法包括高斯混合模型聚類(GMM)和期望最大化(EM)算法。

  5. 網(wǎng)絡(luò)聚類(Network Clustering):用于處理圖數(shù)據(jù)的聚類方法。它將圖中的節(jié)點(diǎn)分組成聚類,使得聚類內(nèi)部的節(jié)點(diǎn)緊密相連,而不同聚類之間的連接較少。社區(qū)發(fā)現(xiàn)是網(wǎng)絡(luò)聚類的一種典型應(yīng)用。

1.2 如何度量距離

1.2.1 數(shù)據(jù)的類型

數(shù)據(jù)可以根據(jù)其類型進(jìn)行分類,主要分為離散型數(shù)據(jù)連續(xù)型數(shù)據(jù)。

離散型數(shù)據(jù)是指在一定范圍內(nèi),只能取有限個或者可數(shù)個數(shù)值的數(shù)據(jù)。離散型數(shù)據(jù)通常代表了非可度量的特征或者屬性。例如,一個學(xué)生的成績可以用A、B、C等等來表示,或者一個人的血型可以用A、B、O、AB來表示。

離散型數(shù)據(jù)還可以分為定類數(shù)據(jù)、定序數(shù)據(jù)、定距數(shù)據(jù)。

  1. 定類數(shù)據(jù)是指數(shù)據(jù)按照某種特征或?qū)傩赃M(jìn)行分類,但不存在相對大小的關(guān)系,例如性別(男、女)、民族(漢族、藏族、維吾爾族等)。
  2. 定序數(shù)據(jù)是指數(shù)據(jù)可以按照某種特征或?qū)傩赃M(jìn)行分類,并且存在相對大小的關(guān)系,例如教育程度(小學(xué)、初中、高中、大學(xué))或榮譽(yù)等級(一等獎、二等獎、三等獎)。
  3. 定距數(shù)據(jù)是指數(shù)據(jù)可以按照某種特征或?qū)傩赃M(jìn)行分類,存在相對大小的關(guān)系,并且可以進(jìn)行加減運(yùn)算,但沒有絕對零點(diǎn),例如溫度(攝氏度、華氏度)或年齡。

連續(xù)型數(shù)據(jù)是指在一定范圍內(nèi)可以取任意值的數(shù)據(jù)。連續(xù)型數(shù)據(jù)通常代表了可度量的特征或者屬性。例如,一個人的身高可以是任意的數(shù)值,例如160cm、165.5cm、170cm等等。

對于離散型數(shù)據(jù),通常使用頻數(shù)和百分比來描述和分析數(shù)據(jù)的分布情況;對于連續(xù)型數(shù)據(jù),可以使用平均值、中位數(shù)、標(biāo)準(zhǔn)差等統(tǒng)計指標(biāo)來描述和分析數(shù)據(jù)的分布情況。

1.2.2 連續(xù)型數(shù)據(jù)的距離度量方法

連續(xù)型數(shù)據(jù)的距離度量方法中,常用的方法有以下幾種:

  1. 歐氏距離(Euclidean distance):歐氏距離是最常用的距離度量方法,它計算兩個樣本之間的直線距離。對于兩個樣本點(diǎn) (x1, y1) 和 (x2, y2),歐氏距離可以表示為:d = sqrt((x2 - x1)^2 + (y2 - y1)^2)

  2. 曼哈頓距離(Manhattan distance):曼哈頓距離是計算兩點(diǎn)之間的距離,沿著網(wǎng)格線的距離,而不是直線距離。對于兩個樣本點(diǎn) (x1, y1) 和 (x2, y2),曼哈頓距離可以表示為:d = |x2 - x1| + |y2 - y1|

  3. 切比雪夫距離(Chebyshev distance):切比雪夫距離是計算兩點(diǎn)之間的最大差距,即兩點(diǎn)坐標(biāo)軸方向上差值的最大值。對于兩個樣本點(diǎn) (x1, y1) 和 (x2, y2),切比雪夫距離可以表示為:d = max(|x2 - x1|, |y2 - y1|)

  4. 閔可夫斯基距離(Minkowski distance):閔可夫斯基距離是歐氏距離和曼哈頓距離的推廣,可以根據(jù)需要選擇不同的參數(shù)。對于兩個樣本點(diǎn) (x1, y1) 和 (x2, y2),閔可夫斯基距離可以表示為:d = (|x2 - x1|^p + |y2 - y1|^p)^(1/p),其中 p 是一個參數(shù),當(dāng) p=1 時為曼哈頓距離,當(dāng) p=2 時為歐氏距離。

  5. 馬氏距離(Mahalanobis distance):馬氏距離是一種考慮各個維度之間相關(guān)性的距離度量方法,它通過協(xié)方差矩陣來衡量變量之間的相關(guān)性。對于兩個樣本點(diǎn) x 和 y,馬氏距離可以表示為:d = sqrt((x - y)^T Σ^(-1) (x - y)),其中 Σ 是樣本的協(xié)方差矩陣。

1.2.3 離散型數(shù)據(jù)的距離度量方法

對于離散型數(shù)據(jù)的距離度量方法

  1. 簡單匹配系數(shù)(Simple Matching Coefficient):適用于兩個等長的二進(jìn)制字符串,定義為兩個字符串中相同位置上相同字符的個數(shù)除以字符串的長度。

  2. 杰卡德相似系數(shù)(Jaccard Similarity Coefficient):適用于表示集合的離散型數(shù)據(jù),定義為兩個集合交集的大小除以并集的大小。

這兩種方法主要適用于二進(jìn)制字符串和集合類型的離散型數(shù)據(jù),用于度量不同數(shù)據(jù)之間的相似性或距離。

1.3 聚類的基本步驟

對案例進(jìn)行聚類分析的基本步驟可以如下:

  1. 收集數(shù)據(jù):收集相關(guān)的案例數(shù)據(jù),這些數(shù)據(jù)可以是文本、數(shù)字或其他形式的信息。

  2. 數(shù)據(jù)預(yù)處理:對收集到的數(shù)據(jù)進(jìn)行預(yù)處理,包括數(shù)據(jù)清洗、特征選擇、特征縮放等。確保數(shù)據(jù)的準(zhǔn)確性和一致性。

  3. 選擇聚類算法:根據(jù)案例的特征和目標(biāo),選擇適合的聚類算法。常見的聚類算法包括K均值聚類、層次聚類、DBSCAN等。

  4. 確定聚類的數(shù)量:如果聚類的數(shù)量未知,需要通過一些方法來確定合適的聚類數(shù)量。常用的方法包括肘部法則、輪廓系數(shù)等。

  5. 運(yùn)行聚類算法:根據(jù)選定的聚類算法和確定的聚類數(shù)量,運(yùn)行聚類算法對案例數(shù)據(jù)進(jìn)行聚類分析。

  6. 評估聚類結(jié)果:使用合適的指標(biāo)評估聚類結(jié)果的質(zhì)量和準(zhǔn)確性。常用的評估指標(biāo)包括輪廓系數(shù)、DBI指數(shù)等。

  7. 可視化和解釋結(jié)果:將聚類結(jié)果可視化,幫助理解和解釋聚類結(jié)果??梢允褂蒙Ⅻc(diǎn)圖、熱力圖等方式展示聚類效果,并根據(jù)結(jié)果解釋案例分組的特征和關(guān)系。

使用Python進(jìn)行聚類分析簡單示例:

# 導(dǎo)入必要的庫
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 生成示例數(shù)據(jù)
data = {'age': [23, 30, 45, 18, 50, 28, 35, 40, 20, 33],'score': [85, 92, 78, 88, 95, 83, 87, 80, 85, 89]
}df = pd.DataFrame(data)# 數(shù)據(jù)預(yù)處理
X = df[['age', 'score']]# 設(shè)置聚類數(shù)量為2
k = 2# 運(yùn)行K均值聚類算法
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)# 獲取聚類結(jié)果
labels = kmeans.labels_
centroids = kmeans.cluster_centers_# 可視化聚類結(jié)果
fig, ax = plt.subplots()
for i in range(k):cluster_points = X[labels == i]ax.scatter(cluster_points['age'], cluster_points['score'], label='Cluster {}'.format(i+1))ax.scatter(centroids[:, 0], centroids[:, 1], marker='x', color='black', label='Centroids')
ax.set_xlabel('Age')
ax.set_ylabel('Score')
ax.legend()
plt.show()

運(yùn)行結(jié)果:

我們使用了pandas庫來處理數(shù)據(jù),sklearn庫中的KMeans類來進(jìn)行聚類分析,matplotlib庫用于可視化聚類結(jié)果。

我們首先生成了一個包含年齡和成績的示例數(shù)據(jù)集,并進(jìn)行了數(shù)據(jù)預(yù)處理。然后設(shè)置聚類數(shù)量為2,并運(yùn)行K均值聚類算法。最后,通過散點(diǎn)圖可視化聚類結(jié)果,其中每個群組用不同的顏色表示,并用“x”表示質(zhì)心。

二、層次聚類算法

層次聚類法(Hierarchical Clustering)是一種將數(shù)據(jù)分層次進(jìn)行聚類的方法。它通過不斷合并或劃分?jǐn)?shù)據(jù)來構(gòu)建一個層次化的聚類結(jié)構(gòu)。層次聚類法可以分為凝聚法(自底向上)和分裂法(自頂向下)兩種類型。

凝聚層次聚類是自底向上的方法,它從每個樣本作為一個獨(dú)立的簇開始,然后迭代地將最相似的簇合并在一起,直到所有樣本都屬于同一個簇。

分裂層次聚類是自頂向下的方法,它從所有樣本作為一個簇開始,然后迭代地將最不相似的簇分裂為更小的簇,直到每個樣本都作為一個獨(dú)立的簇。

2.1 算法原理和實(shí)例

目前,常見的層次聚類法是凝聚法。凝聚法的原理基于以下幾個步驟:

  1. 初始化每個樣本為一個獨(dú)立的簇:將每個樣本視為一個獨(dú)立的簇,并計算它們之間的距離或相似度。

  2. 計算簇之間的相似度/距離:對于每一對簇,計算它們之間的距離或相似度。常用的距離度量有歐氏距離、曼哈頓距離等,常用的相似度度量有余弦相似度、相關(guān)系數(shù)等。

  3. 合并最相似的簇:選擇相似度/距離最小的兩個簇進(jìn)行合并,形成一個新的簇。合并的方式可以是簡單地將兩個簇合并為一個新的簇,也可以是采用更復(fù)雜的方法,如加權(quán)平均。

  4. 更新簇之間的相似度/距離:更新合并后的簇與其他簇之間的距離或相似度。常用的更新方式有單連接、完全連接和平均連接。

  5. 重復(fù)步驟3和4:重復(fù)進(jìn)行步驟3和4,直到滿足停止條件。停止條件可以是指定的簇的數(shù)量,或者是某個相似度/距離的閾值。

  6. 得到最終的聚類結(jié)果:最終的聚類結(jié)果可以通過截取聚類樹狀圖(樹狀圖中的橫軸表示樣本,縱軸表示距離/相似度),或者根據(jù)停止條件在聚類樹中截取簇。

2.2 算法的Sklearn實(shí)現(xiàn)

Scikit-learn的聚類模塊sklearn.cluster中提供了AgglomerativeClustering類,用來實(shí)現(xiàn)層次聚類。該類基于自底向上的聚合策略,先將每個樣本視為一個初始單獨(dú)的簇,然后反復(fù)將最相似的兩個簇合并,直到滿足指定的聚類數(shù)量。

AgglomerativeClustering類有多個參數(shù)可以調(diào)整,包括:

  • n_clusters:指定聚類的數(shù)量。
  • affinity:指定計算樣本間距離的度量方法,如歐氏距離、曼哈頓距離等。
  • linkage:指定計算合并簇的方式,如單鏈接(single linkage)、完全鏈接(complete linkage)等。

AgglomerativeClustering類提供了以下主要方法

  • fit(X):用于對給定的數(shù)據(jù)集X進(jìn)行聚類。
  • fit_predict(X):先對數(shù)據(jù)集X進(jìn)行聚類,然后返回每個樣本所屬的簇標(biāo)簽。
  • fit_transform(X):先對數(shù)據(jù)集X進(jìn)行聚類,然后返回每個樣本與其他簇的距離。

示例代碼如下所示:

from sklearn.cluster import AgglomerativeClustering# 創(chuàng)建一個AgglomerativeClustering對象
clustering = AgglomerativeClustering(n_clusters=2)# 對數(shù)據(jù)集進(jìn)行聚類
clustering.fit(X)# 返回每個樣本所屬的簇標(biāo)簽
labels = clustering.labels_

2.2.1 層次聚類法的可視化實(shí)例

使用層次聚類法將樣本數(shù)據(jù)聚成3類,其中樣本數(shù)據(jù)保存在文件km.txt中。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
X1,X2=[],[]
fr=open('Sklearn\km.txt')        # 打開數(shù)據(jù)文件for line in fr.readlines():lineArr=line.strip().split()X1.append([int(lineArr[0])])        # 第1列讀取到X1中X2.append([int(lineArr[1])])# 把X1和X2合成一個有兩列的數(shù)組X并調(diào)整維度,此處X的維度為[10,2]
X=np.array(list(zip(X1, X2))).reshape (len(X1), 2)
# print(X)        # X的值為[[21][1 2] [2 2]…[5 3]]
# model=AgglomerativeClustering(3).fit(X)model=AgglomerativeClustering(n_clusters=3)        # 設(shè)置聚類數(shù)目為3
labels=model.fit_predict(X)
print(labels)colors=['b','g','r','c']
markers=['o','s','<','v']
plt.axis([0,6,0,6])
for i,l in enumerate (model.labels_):plt.plot(X1[i],X2[i],color=colors[1],marker=markers[1],ls='None')
plt.show()

運(yùn)行結(jié)果:

[2221111000]

2.2.2 繪制層次聚類的樹狀圖

scipy.cluster.hierarchy是SciPy中用于聚類分析的層次聚類方法的模塊。它提供了一些功能來計算層次聚類和繪制聚類樹狀圖。

scipy.cluster.hierarchy模塊提供了以下方法

  1. linkage:計算聚類算法中的連結(jié)矩陣。它接受一個距離矩陣作為輸入,并返回一個連結(jié)矩陣,用于層次聚類。

  2. fcluster:根據(jù)層次聚類的結(jié)果和給定的閾值,對樣本進(jìn)行聚類標(biāo)記。它接受一個連結(jié)矩陣和一個閾值作為輸入,并返回一個數(shù)組,其中包含每個樣本的聚類標(biāo)記。

  3. dendrogram:繪制層次聚類的樹狀圖。它接受一個連結(jié)矩陣作為輸入,并根據(jù)層次聚類的結(jié)果繪制樹形圖。

除了這些方法之外,scipy.cluster.hierarchy模塊還提供了一些用于計算距離矩陣和配對距離的函數(shù),如pdist和cophenet。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import linkage
from scipy.cluster.hierarchy import dendrogram
from scipy.spatial.distance import pdist        # 引入pdist計算距離X1,X2=[],[]
fr=open('Sklearn\km.txt')
for line in fr.readlines():lineArr=line.strip().split()X1.append([int(lineArr[0])])X2.append([int(lineArr[1])])
X=np.array(list(zip(X1,X2))).reshape(len(X1),2)
model=AgglomerativeClustering(n_clusters=3)
labels=model.fit_predict(X)# print(labels)# 繪制層次聚類樹
variables=['X','Y']
df=pd.DataFrame (X,columns=variables,index=labels)
# print (df)            # df保存了樣本點(diǎn)的坐標(biāo)值和類別值,可打印出來看# 使用完全距離矩陣
row_clusters=linkage(pdist(df,metric='euclidean'),method='complete')
print(pd.DataFrame(row_clusters,columns=['row labell','row label2','distance','no. of items in clust.'],index=['cluster %d'%(i+1) for i in range (row_clusters.shape[0])]))row_dendr=dendrogram(row_clusters,labels=labels)        # 繪制層次聚類樹
plt.tight_layout()
plt.ylabel('Euclidean distance')
plt.show()

運(yùn)行結(jié)果:

2.2.3 DataFrame數(shù)據(jù)結(jié)構(gòu)

DataFrame是Pandas庫中的一個數(shù)據(jù)結(jié)構(gòu),它類似于Excel中的二維表格,可以存儲和操作二維數(shù)據(jù)。DataFrame由行索引和列索引組成,可以通過行索引和列索引來訪問和操作數(shù)據(jù)。

DataFrame既可以從csv、excel等文件中讀取數(shù)據(jù),也可以從字典、列表等數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建。

下面是一個創(chuàng)建DataFrame的例子:

import pandas as pddata = {'Name': ['Tom', 'John', 'Emily'],'Age': [23, 25, 27],'Country': ['USA', 'UK', 'Canada']}df = pd.DataFrame(data)
print(df)

輸出結(jié)果:

   Name  Age Country
0   Tom   23     USA
1  John   25      UK
2  Emily  27  Canada

注意:

  • DataFrame的每一列都可以是不同的數(shù)據(jù)類型,例如上面的Name列是字符串類型,Age列是整數(shù)類型,Country列是字符串類型。

三、k-means聚類算法

k-means聚類算法最早由J.B. MacQueen于1967年提出,被廣泛應(yīng)用于數(shù)據(jù)分析和機(jī)器學(xué)習(xí)領(lǐng)域。k-means聚類算法是一種無監(jiān)督學(xué)習(xí)算法,用于將數(shù)據(jù)集分為k個不重疊的簇,每個簇都具有相似的特征。它是一種迭代算法,以最小化簇內(nèi)平方誤差(SSE)為目標(biāo)函數(shù)。

3.1?算法原理和實(shí)例

3.1.1?k-means聚類算法原理

k-means聚類算法是一種迭代的優(yōu)化算法,通過不斷更新簇的中心點(diǎn)來劃分?jǐn)?shù)據(jù)集。其主要步驟如下:

  1. 隨機(jī)初始化:從數(shù)據(jù)集中隨機(jī)選擇K個樣本作為初始的簇中心點(diǎn)。

  2. 分配樣本:對于每個樣本,計算其與各個簇中心點(diǎn)的距離,將樣本分配給距離最近的簇中心點(diǎn)所對應(yīng)的簇。

  3. 更新簇中心點(diǎn):對于每個簇,計算該簇內(nèi)所有樣本的平均值,將其作為新的簇中心點(diǎn)。

  4. 重復(fù)步驟2和步驟3,直到滿足停止條件。停止條件可以是簇中心點(diǎn)不再變化或者迭代次數(shù)達(dá)到預(yù)定的值。

3.1.2?k-means聚類算法舉例

假設(shè)有如下10個樣本點(diǎn)的二維數(shù)據(jù):(1, 2), (2, 1), (2, 3), (3, 2), (4, 4), (5, 5), (6, 6), (7, 7), (8, 7), (9, 9)

  • 首先,我們隨機(jī)選擇兩個初始聚類中心點(diǎn),如選擇(2, 1)和(6, 6)作為初始聚類中心。
  • 接下來,對于每個樣本點(diǎn),計算其與兩個聚類中心的歐幾里得距離,然后將其歸為距離較近的聚類中心所在的類別。
  • 計算完成后,我們可以得到兩個類別:
    • 類別1:(1, 2), (2, 1), (2, 3), (3, 2)
    • 類別2:(4, 4), (5, 5), (6, 6), (7, 7), (8, 7), (9, 9)
  • 接下來,我們更新聚類中心,將每個類別中所有樣本的坐標(biāo)的平均值作為新的聚類中心。
    • 類別1的新聚類中心:(2.0, 2.0)
    • 類別2的新聚類中心:(6.5, 6.5)
  • 然后,重復(fù)前面的步驟,計算每個樣本與新的聚類中心的歐幾里得距離,重新分配樣本到類別中。
  • 然后再次更新聚類中心,如此往復(fù),直到聚類中心不再發(fā)生變化,滿足終止條件。
  • 最終,經(jīng)過多次迭代后,我們可以得到如下的聚類結(jié)果:
    • 類別1:(1, 2), (2, 1), (2, 3), (3, 2)
    • 類別2:(4, 4), (5, 5), (6, 6), (7, 7), (8, 7), (9, 9)
  • 其中,類別1的聚類中心為(2.0, 2.0),類別2的聚類中心為(6.5, 6.5)

3.1.3?k-means聚類算法的優(yōu)缺點(diǎn)

k-means聚類算法的優(yōu)點(diǎn)

  1. 簡單易實(shí)現(xiàn):k-means算法是一種經(jīng)典的聚類算法,實(shí)現(xiàn)起來相對簡單。

  2. 可解釋性強(qiáng):聚類結(jié)果直觀明了,每個樣本點(diǎn)都被分配到最近的聚類中心所在的類別中。

  3. 可擴(kuò)展性好:對于大規(guī)模的數(shù)據(jù)集,k-means算法可以通過并行計算來提高效率。

  4. 對于凸形狀的類別效果較好:k-means算法對于具有明顯凸形狀的類別,效果較好。

k-means聚類算法的缺點(diǎn)

  1. 需要預(yù)先確定聚類數(shù)量k:k-means算法需要提前指定聚類的數(shù)量,但在實(shí)際應(yīng)用中,聚類數(shù)量往往是未知的。

  2. 對初始聚類中心敏感:k-means算法的結(jié)果可能會受到初始聚類中心的選擇影響,不同的初始聚類中心可能得到不同的最終結(jié)果。

  3. 對異常值敏感:k-means算法對異常值比較敏感,異常值可能會對聚類結(jié)果產(chǎn)生較大的干擾。

  4. 只適用于數(shù)值型數(shù)據(jù):k-means算法只適用于數(shù)值型數(shù)據(jù),對于包含非數(shù)值型特征的數(shù)據(jù)集,需要進(jìn)行預(yù)處理或選擇其他算法。

3.2 算法中k值的確定

k-Means算法中的k值是指聚類的簇數(shù),也就是將數(shù)據(jù)集劃分為多少個簇。確定k值是k-Means算法中的一個關(guān)鍵問題,一般可以使用以下方法來確定k值:

  1. 觀察數(shù)據(jù)集:直觀上觀察數(shù)據(jù)集的分布情況,根據(jù)數(shù)據(jù)的特點(diǎn)和目標(biāo)來選擇合適的k值。例如,如果數(shù)據(jù)集呈現(xiàn)出明顯的分群特征,可以根據(jù)分群的數(shù)量確定k值。

  2. 手肘法(Elbow Method):通過計算不同k值下的簇內(nèi)平方誤差(SSE)來確定k值。在每個k值下,計算各個簇與其質(zhì)心的距離平方之和,然后選擇一個合適的k值,使得簇內(nèi)平方誤差開始顯著下降而后趨于平緩。

  3. 輪廓系數(shù)(Silhouette Coefficient):通過計算各個樣本的輪廓系數(shù)來評估聚類的質(zhì)量,然后選擇一個合適的k值。輪廓系數(shù)介于-1到1之間,值越大表示聚類效果越好。計算輪廓系數(shù)時,需要計算樣本與同簇其他樣本的平均距離(a)和樣本與其他簇的最小平均距離(b),然后計算輪廓系數(shù)為(b-a)/max(a,b)。選擇一個k值,使得整體的輪廓系數(shù)最大。

  4. Gap統(tǒng)計量:通過計算數(shù)據(jù)集在不同k值下的Gap統(tǒng)計量來確定k值。Gap統(tǒng)計量是一種比較聚類結(jié)果與隨機(jī)數(shù)據(jù)集的聚類結(jié)果的統(tǒng)計方法,選擇一個k值,使得Gap統(tǒng)計量達(dá)到峰值。

3.3 算法的Sklearn實(shí)現(xiàn)

在Sklearn中,提供了兩個k-means的算法,分別是K-Means和Mini Batch K-Means。

K-Means是傳統(tǒng)的k-means算法,它使用了Lloyd's算法來進(jìn)行聚類。該算法的原理是,首先隨機(jī)選擇k個樣本點(diǎn)作為初始的聚類中心,然后將每個樣本點(diǎn)分配到距離最近的聚類中心,再根據(jù)分配結(jié)果更新聚類中心的位置,重復(fù)以上步驟直到聚類中心的位置不再變化或者達(dá)到最大迭代次數(shù)。

Mini Batch K-Means是一種優(yōu)化的k-means算法(MiniBatchKMeans),它使用了小批量隨機(jī)梯度下降的方法來進(jìn)行迭代。相比于傳統(tǒng)的k-means算法,MiniBatchKMeans使用了一個小批量的樣本點(diǎn)來更新聚類中心,從而減少了計算量和內(nèi)存消耗。

利用python的sklearn庫實(shí)現(xiàn)kmeans聚類算法并繪制散點(diǎn)圖:

import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 隨機(jī)生成一些樣本數(shù)據(jù)
X = np.random.rand(100, 2)# 創(chuàng)建KMeans對象,并指定聚類個數(shù)為3
kmeans = KMeans(n_clusters=3)# 使用KMeans對象對樣本數(shù)據(jù)進(jìn)行聚類
kmeans.fit(X)# 獲取聚類結(jié)果
labels = kmeans.labels_# 獲取聚類中心點(diǎn)坐標(biāo)
centers = kmeans.cluster_centers_# 繪制散點(diǎn)圖
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='x', color='red')plt.show()

運(yùn)行結(jié)果:

首先使用numpy庫生成了一些隨機(jī)樣本數(shù)據(jù),然后創(chuàng)建了KMeans對象,并指定聚類個數(shù)為3。接著使用fit方法對樣本數(shù)據(jù)進(jìn)行聚類,得到聚類結(jié)果。再使用matplotlib庫繪制散點(diǎn)圖,其中散點(diǎn)的顏色由labels數(shù)組決定,聚類中心點(diǎn)用紅色的x標(biāo)記出來。最后調(diào)用plt.show()顯示圖像。

http://aloenet.com.cn/news/43875.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)推廣的方法百度搜索量最大的關(guān)鍵詞
  • 做腳本從網(wǎng)站引流看網(wǎng)站時的關(guān)鍵詞
  • html網(wǎng)站發(fā)布高端網(wǎng)站建設(shè)
  • php網(wǎng)站建設(shè)帶數(shù)據(jù)庫模板網(wǎng)店關(guān)鍵詞怎么優(yōu)化
  • 企業(yè)網(wǎng)站上的二維碼怎么獲得手游推廣賺傭金的平臺
  • wordpress如何導(dǎo)出數(shù)據(jù)寧波優(yōu)化關(guān)鍵詞首頁排名
  • 以網(wǎng)站域名做郵箱怎樣做企業(yè)宣傳推廣
  • 黃頁88網(wǎng)全自動錄播系統(tǒng)寧波百度推廣優(yōu)化
  • 如何給網(wǎng)站添加搜索關(guān)鍵字網(wǎng)絡(luò)營銷有哪些方式
  • web畢業(yè)設(shè)計題目西安seo王塵宇
  • 百度網(wǎng)站做防水補(bǔ)漏seo01
  • 醫(yī)療類網(wǎng)站源碼網(wǎng)絡(luò)推廣網(wǎng)上營銷
  • 網(wǎng)頁創(chuàng)建網(wǎng)站如何免費(fèi)自己創(chuàng)建網(wǎng)站
  • asp.net旅游網(wǎng)站管理系統(tǒng)代碼軟文推廣多少錢一篇
  • 做網(wǎng)站專題需要什么軟件湖南靠譜關(guān)鍵詞優(yōu)化
  • 長治做網(wǎng)站公司網(wǎng)絡(luò)服務(wù)公司
  • 購物網(wǎng)站 服務(wù)器 帶寬 多大360搜索引擎地址
  • 網(wǎng)站開發(fā)怎么使用sharepoint網(wǎng)站推廣優(yōu)化外包便宜
  • 企業(yè)做的網(wǎng)站推廣方案的步驟深圳網(wǎng)站建設(shè)哪家好
  • 公司網(wǎng)站建設(shè)需要什么資質(zhì)購物網(wǎng)站頁面設(shè)計
  • 怎么選擇一家好的網(wǎng)站建設(shè)公司360優(yōu)化大師
  • 網(wǎng)站制作哪家專業(yè)微商怎么找客源人脈
  • 公司企業(yè)網(wǎng)站免費(fèi)建設(shè)網(wǎng)絡(luò)營銷促銷方案
  • 做極速賽車網(wǎng)站公眾號推廣
  • 在百度網(wǎng)站備案查詢上顯示未備案是什么意思網(wǎng)頁設(shè)計素材
  • 所有政府網(wǎng)站必須做等保嗎sem運(yùn)營是什么意思
  • 政務(wù)服務(wù) 網(wǎng)站 建設(shè)方案朋友圈推廣平臺
  • 網(wǎng)站收錄低的原因百度云網(wǎng)頁版登錄入口
  • 住房城鄉(xiāng)建設(shè)部辦公廳網(wǎng)站口碑營銷公司
  • 番禺區(qū)網(wǎng)站設(shè)計線上推廣的方式有哪些