日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python聚类分析成绩反思_机器学习python实践——二分K-means聚类

發布時間:2023/12/3 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python聚类分析成绩反思_机器学习python实践——二分K-means聚类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說這算法之前的話,前期的準備工作,請看我前面的博客。上一篇,我說到了K-means聚類算法,但是有很多的不足,有很多能夠改進的地方,例如,怎樣使得聚類效果達到全局最優(可能的最好結果)呢?

那么接下來的二分K-means算法就來解決這個問題了。

一、二分K-means算法

二分K均值算法的基本思想:首先將所有的點作為一個簇來對待,并對這個簇進行K均值聚類,然后計算劃分開的兩個簇的總誤差平方和SSE(Sum?of?Squared?Error),將SSE較小的那個簇經行劃分,以此類推,每次repeat對每個Current簇經行SSE比較,每次都是對最小SSE的簇劃分(這樣好貪心啊),最后當簇的個數達到K值的時候,那么整個循環就over了,我們的聚類也是完成了,最后就是顯示結果了。

算法偽代碼如下:

##############################################################################

###########################################################################

將所有的點看成一個簇

當簇的數目小于K時

對于每一個簇

計算總誤差

在給定的簇上面進行K均值聚類(K=2)

計算將該簇一分為二后的總誤差

選擇使得誤差最小的那個簇進行劃分操作

############################################################################################

二、python實現

數據集和需要的包和安裝過程,我前面的博客中都有了詳細的講解,因為二分K-means的基礎還是K聚類,所以我把他們放一起了,這樣的話,統一的接口,統一的數據類型,這真是極好的,接下來,我就直接貼代碼了。

k-means.py

###########################################################################

def euclDistance1(point1,point2):

b=sum(np.power(point1-point2,2))

return

np.sqrt(b[0,0]+b[0,1])

#init points with random using list

def initPoints1(tt,k):

num,dim=tt.shape

points=np.zeros((k,dim))

r_list=range(0,80)

b_list=random.sample (r_list,k)

for

i in range(k):

index1=int(random.uniform (0,num))

points[i,:]=tt[index1,:]

return

points

#kmeans cluster using list

def

kmeans1(tt,k):

clusterState=True

clusterAssment=np.zeros([len(tt),2])

points=initPoints1(tt,k)

while

clusterState:

clusterState=False

for i in range(len(tt)):

minDist=euclDistance1(points[0,:], tt[i,:])

#print(minDist)

#minDist=100000.0

minIndex=0

for j in range(k):

distance = euclDistance1(points[j,:],tt[i,:])

if distance < minDist:

minDist=distance

minIndex=j

#calculate the count of each cluster

#update cluster

if clusterAssment[i, 0] != minIndex:

clusterState = True

clusterAssment[i, :] = minIndex, minDist**2

for j in range(k):

sumX=0

總結

以上是生活随笔為你收集整理的python聚类分析成绩反思_机器学习python实践——二分K-means聚类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。