python聚类分析成绩反思_机器学习python实践——二分K-means聚类
說這算法之前的話,前期的準備工作,請看我前面的博客。上一篇,我說到了K-means聚類算法,但是有很多的不足,有很多能夠改進的地方,例如,怎樣使得聚類效果達到全局最優(yōu)(可能的最好結(jié)果)呢?
那么接下來的二分K-means算法就來解決這個問題了。
一、二分K-means算法
二分K均值算法的基本思想:首先將所有的點作為一個簇來對待,并對這個簇進行K均值聚類,然后計算劃分開的兩個簇的總誤差平方和SSE(Sum?of?Squared?Error),將SSE較小的那個簇經(jīng)行劃分,以此類推,每次repeat對每個Current簇經(jīng)行SSE比較,每次都是對最小SSE的簇劃分(這樣好貪心啊),最后當簇的個數(shù)達到K值的時候,那么整個循環(huán)就over了,我們的聚類也是完成了,最后就是顯示結(jié)果了。
算法偽代碼如下:
##############################################################################
###########################################################################
將所有的點看成一個簇
當簇的數(shù)目小于K時
對于每一個簇
計算總誤差
在給定的簇上面進行K均值聚類(K=2)
計算將該簇一分為二后的總誤差
選擇使得誤差最小的那個簇進行劃分操作
############################################################################################
二、python實現(xiàn)
數(shù)據(jù)集和需要的包和安裝過程,我前面的博客中都有了詳細的講解,因為二分K-means的基礎還是K聚類,所以我把他們放一起了,這樣的話,統(tǒng)一的接口,統(tǒng)一的數(shù)據(jù)類型,這真是極好的,接下來,我就直接貼代碼了。
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
總結(jié)
以上是生活随笔為你收集整理的python聚类分析成绩反思_机器学习python实践——二分K-means聚类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成熟的微信网名大全140个
- 下一篇: python采用函数编程模式_浅谈Pyt