1. 程式人生 > >python資料分析與挖掘之聚類kmeans演算法

python資料分析與挖掘之聚類kmeans演算法

聚類不指定類別進行分類

(劃分(分裂)法,層次分析法、密度分析法)、網格法、模型法

    Kmeans演算法屬於分裂法

  1. 隨機選擇k各點作為聚類中心
  2. 計算各個點到這K個點的距離  
  3. 將對應的點聚到與它最近的這個聚類中心
  4. 重新計算聚類中心
  5. 比較當前聚類中心與前一次聚類中心,如果是同一個點,得到聚類結果,若不同的點,則重複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()