聚類不指定類別進行分類
(劃分(分裂)法,層次分析法、密度分析法)、網格法、模型法
Kmeans算法屬於分裂法
- 隨機選擇k各點作爲聚類中心
- 計算各個點到這K個點的距離
- 將對應的點聚到與它最近的這個聚類中心
- 重新計算聚類中心
- 比較當前聚類中心與前一次聚類中心,如果是同一個點,得到聚類結果,若不同的點,則重複2-5
Kmeans算法實現代碼:
#kmeans算法
'''
#通過程序聚類實現實現錄取學生的聚類
import pandas as pda
import numpy as npy
import matplotlib.pylab as pyl
fname='E:\\programCode\\huigui.csv'
dataf=pda.read_csv(fname)
x=dataf.iloc[:,1:4].as_matrix()
from sklearn.cluster import Birch
from sklearn.cluster import KMeans
kms=KMeans(n_clusters=4,n_jobs=2,max_iter=500)#聚爲4類,線程數爲2,最大循環次數500
y=kms.fit_predict(x)#進行聚類
#可視化
#x代表學生序號,y代表學生類別
s=npy.arange(0,len(y))
pyl.plot(s,y,'o')
pyl.show()
'''
#通過程序實現商品的聚類
import pandas as pda
import numpy as npy
import matplotlib.pylab as pyl
import pymysql
conn=pymysql.connect(host='localhost',user='root',passwd='123456',db='dd')
sql="select price,comment from jd limit 300"
dataf=pda.read_sql(sql,conn)
x=dataf.iloc[:,:].as_matrix()
from sklearn.cluster import KMeans
kms=KMeans(n_clusters=3)
y=kms.fit_predict(x)
for i in range(0,len(y)):
if(y[i]==0):
pyl.plot(dataf.iloc[i:i+1,0:1].as_matrix(),dataf.iloc[i:i+1,1:2].as_matrix(),'*r')
elif(y[i]==1):
pyl.plot(dataf.iloc[i:i+1,0:1].as_matrix(),dataf.iloc[i:i+1,1:2].as_matrix(),'sy')
else:
pyl.plot(dataf.iloc[i:i+1,0:1].as_matrix(),dataf.iloc[i:i+1,1:2].as_matrix(),'*k')
pyl.show()