数学建模——K-means聚类模型Python代码
一、簡(jiǎn)介
K均值聚類算法是先隨機(jī)選取K個(gè)對(duì)象作為初始的聚類中心。然后計(jì)算每個(gè)對(duì)象與各個(gè)種子聚類中心之間的距離,把每個(gè)對(duì)象分配給距離它最近的聚類中心。聚類中心以及分配給它們的對(duì)象就代表一個(gè)聚類。每分配一個(gè)樣本,聚類的聚類中心會(huì)根據(jù)聚類中現(xiàn)有的對(duì)象被重新計(jì)算。這個(gè)過(guò)程將不斷重復(fù)直到滿足某個(gè)終止條件。終止條件可以是沒(méi)有(或最小數(shù)目)對(duì)象被重新分配給不同的聚類,沒(méi)有(或最小數(shù)目)聚類中心再發(fā)生變化,誤差平方和局部最小。
二、
1.便于理解,首先創(chuàng)建一個(gè)明顯分為2類20*2的例子(每一列為一個(gè)變量共2個(gè)變量,每一行為一個(gè)樣本共20個(gè)樣本):
結(jié)果:
[[1.4889993 4.18741329]
[0.73017615 4.07842216]
[1.15522846 4.05744838]
[1.40768457 3.76674812]
[1.376212 3.95063903]
[1.20821055 4.34138767]
[0.73898392 3.55026013]
[0.97116627 3.65432314]
[0.98267302 4.16731561]
[1.06346541 4.44383585]
[4.10945954 4.18741329]
[3.75288064 4.07842216]
[4.29638229 4.05744838]
[3.95221785 3.76674812]
[4.09826192 3.95063903]
[4.04840874 4.34138767]
[4.29594009 3.55026013]
[3.56931245 3.65432314]
[3.57962941 4.16731561]
[3.65208848 4.44383585]]
#只需將X修改即可進(jìn)行其他聚類分析
結(jié)果:
[0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1]
三、實(shí)例分析(對(duì)某網(wǎng)站500家飯店價(jià)格及評(píng)論進(jìn)行聚類)
import numpy as np from sklearn.cluster import KMeans from scipy.spatial.distance import cdist import matplotlib.pyplot as plt import pandas as pddata=pd.read_excel('data.xlsx',header=0).iloc[:501,3:5] per_25=data.describe().iloc[4,1] per_75=data.describe().iloc[6,1] data=data[(data.iloc[:,1]>=per_25)&(data.iloc[:,1]<=per_75)] #選擇位于四分位數(shù)之內(nèi)的數(shù) X=np.array(data)K=range(1,10) meanDispersions=[] for k in K:kemans=KMeans(n_clusters=k)kemans.fit(X)meanDispersions.append(sum(np.min(cdist(X,kemans.cluster_centers_,'euclidean'),axis=1))/X.shape[0])plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei'] plt.plot(K,meanDispersions,'bx-') plt.xlabel('k') plt.ylabel('平均離差') plt.title('用肘部方法選擇K值') plt.show()具體聚類過(guò)程from sklearn.cluster import KMeans import matplotlib.pyplot as pltkemans=KMeans(n_clusters=3) result=kemans.fit_predict(X) print(result) x=[i[0] for i in X] y=[i[1] for i in X] plt.scatter(x,y,c=result,marker='o') plt.xlabel('avgPrice') plt.ylabel('llCommentNum') plt.title('對(duì)500家飯店價(jià)格與評(píng)論數(shù)進(jìn)行聚類')聚類結(jié)果:
[2 0 0 0 0 1 0 0 2 0 0 2 1 2 0 1 2 0 2 2 2 0 0 0 0 1 2 0 1 0 0 2 2 2 2 2 2
2 2 0 1 0 0 0 1 0 2 2 0 2 2 0 0 2 2 2 1 0 1 1 1 0 0 0 0 1 2 1 2 0 2 1 0 0
2 1 1 0 0 1 2 2 0 2 2 1 0 2 1 0 2 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 2 1 2 1
1 0 0 1 0 1 2 1 0 1 1 0 1 1 0 1 0 2 1 1 0 1 0 2 0 2 1 2 1 1 0 0 1 0 1 0 1
0 2 0 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 0 0 2 0 1 1 0 1 0 1 0 0 0 0 1 1 0 1
2 0 1 1 2 0 1 0 0 1 1 1 1 1 0 0 0 1 1 1 2 0 1 1 1 2 2 0 0 2 1 1 2 1 1 1 0
1 1 0 1 2 2 0 2 2 2 0 1 0 1 1 2 1 1 1 0 1 1 1 1 0 0 0 0 1]
總結(jié)
以上是生活随笔為你收集整理的数学建模——K-means聚类模型Python代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数学建模——ARIMA时间序列预测模型P
- 下一篇: 数学建模——TOPSIS综合评价模型Py