国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)學建模--K-means聚類的Python實現(xiàn)

這篇具有很好參考價值的文章主要介紹了數(shù)學建模--K-means聚類的Python實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.算法流程簡介

2.1.K-mean算法核心代碼

2.2.K-mean算法效果展示

3.1.肘部法算法核心代碼?

3.2.肘部法算法效果展示?


1.算法流程簡介

#k-means聚類方法
"""
k-means聚類算法流程:
1.K-mean均值聚類的方法就是先隨機選擇k個對象作為初始聚類中心.
2.這個時候你去計算剩余的對象于哪一個聚類中心的距離是最小的,優(yōu)先分配給最近的聚類中心.
3.分配后,原先的聚類中心和分配給它們的對象就又會被看作一個新聚類.
4.每次進行分配之后,聚類中心又會被重新計算一次
5.直到滿足某些終止條件為止:1.沒有聚類中心被分配 2.達到了局部的聚類均方誤差最小
"""

2.1.K-mean算法核心代碼

#%%
#1.當k已知且k=4時,我們執(zhí)行k-means算法
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei'] #散點圖標簽可以顯示中文
#人為大致創(chuàng)建一個比較明顯的聚類樣本
c1x=np.random.uniform(0.5,1.5,(1,200))
c1y=np.random.uniform(0.5,1.5,(1,200))
c2x=np.random.uniform(3.5,4.5,(1,200))
c2y=np.random.uniform(3.5,4.5,(1,200))
c3x=np.random.uniform(2.5,3.5,(1,200))
c3y=np.random.uniform(2.5,3.5,(1,200))
c4x=np.random.uniform(1.5,2.5,(1,200))
c4y=np.random.uniform(1.5,2.5,(1,200))
x=np.hstack((c1x,c2x,c3x,c4x))
y=np.hstack((c2y,c2y,c3y,c4y))
X=np.vstack((x,y)).T
#n_cluster設置成4(可以修改)
kemans=KMeans(n_clusters=4)
result=kemans.fit_predict(X) #訓練及預測
for i in range(len(result)):
    print("第{}個點:({})的分類結果為:{}".format(i+1,X[i],result[i]))
x=[i[0] for i in X]
y=[i[1] for i in X]
plt.scatter(x,y,c=result,marker='*',cmap='rainbow',s=9)
plt.xlabel('x')
plt.ylabel('y')
plt.title("K-means聚類效果圖",color='black')
plt.savefig('C:\\Users\\Zeng Zhong Yan\\Desktop\\K-means聚類效果圖.png', dpi=500, bbox_inches='tight')
plt.show()

2.2.K-mean算法效果展示

數(shù)學建模--K-means聚類的Python實現(xiàn),數(shù)學建模,kmeans,算法,數(shù)學建模,python

3.1.肘部法算法核心代碼?

#%%
#2.如果k未知的情況下,利用肘部法來求出最優(yōu)的k
"""
肘部法也非常簡答,就是假設k=1-9,分別求出k=1-9之間的平均離差.
繪圖觀察最陡峭/斜率變化最大的點就是最為合適的k值
"""

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei'] #使折線圖顯示中文

K=range(1,10)
meanDispersions=[]
for k in K:
    #假設n_clusters=k,進行聚類后
    kemans=KMeans(n_clusters=k)
    kemans.fit(X)
    #計算平均離差
    m_Disp=sum(np.min(cdist(X,kemans.cluster_centers_,'euclidean'),axis=1))/X.shape[0]
    meanDispersions.append(m_Disp)
result=[]
for i in range(len(meanDispersions)-1):
    print("從第{}個點到第{}個點的斜率絕對值為:{}".format(i+1,i+2,abs(meanDispersions[i+1]-meanDispersions[i])))
    result.append(abs(meanDispersions[i+1]-meanDispersions[i]))
#求解斜率最大值
result_max=max(result)
print("最大的斜率的絕對值為{}".format(result_max))
print("綜上所述最為合適的k值為{}".format(result.index(result_max)+2))

plt.plot(K,meanDispersions,'bx-',label='meanDispersions',color='red')
plt.xlabel('k')
plt.ylabel('平均離差')
plt.title('肘部法選擇K值示意圖')
plt.legend()
plt.savefig('C:\\Users\\Zeng Zhong Yan\\Desktop\\肘部法求K值.png', dpi=500, bbox_inches='tight')
plt.show()

3.2.肘部法算法效果展示?

數(shù)學建模--K-means聚類的Python實現(xiàn),數(shù)學建模,kmeans,算法,數(shù)學建模,python

數(shù)學建模--K-means聚類的Python實現(xiàn),數(shù)學建模,kmeans,算法,數(shù)學建模,python?文章來源地址http://www.zghlxwxcb.cn/news/detail-697346.html

到了這里,關于數(shù)學建模--K-means聚類的Python實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包