聚类不指定类别进行分类
(划分(分裂)法,层次分析法、密度分析法)、网格法、模型法
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()