python KMeans算法学习

这里,使用scikit-learn模块中的聚类算法包KMeans, 仅支持欧几里得距离,默认初始点采用随机选取,也可使用k-means++(聚类中心点之间相距很远)方式选取初始点, 支持并发聚类.
在UCI下载小型数据集 Data_User_Modeling_Dataset_Hamdi Tolga KAHRAMAN,生成聚类模型并测试,绘制聚类结果散点图.聚类结果评估.

import pandas as pd
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt


#----------------绘制聚类后的概率图------------------

def density_plot(data,res):
    plt.figure()
    j=1
    for i in list(data.columns)[:-2]:
        plt.subplot(2,3,j)
        plt.scatter(data[u'聚类类别'],data[i])
        plt.ylabel(u'属性'+i)
        plt.xlabel(u'聚类结果')
        j=j+1
    plt.show()
    ''' 处理离散属性 subdata1=np.array(data.iloc[:,-2]) subdata2=np.array(data.iloc[:,-1]) print data.iloc[:,-2:] subdata1[subdata1=='High']=3 subdata1[subdata1=='Middle']=2 subdata1[subdata1=='Low']=1 subdata1[subdata1=='very_low']=0 sub=pd.concat([pd.Series(subdata1),pd.Series(subdata2)],axis=1) sub=sub.sort_values(by=0)#按指定的一列或多列的值进行排序 plt.plot(list(sub.iloc[:,-2]),list(sub.iloc[:,-1]),'o',label=data.columns[-2]) plt.show()'''


inputfile="../DataSet/Data_User_Modeling_Dataset_Hamdi Tolga KAHRAMAN.xls"  #载入数据文件
k=4 #设置聚类个数
iteration=100 #最大迭代次数
traindata=pd.read_excel(inputfile,sheetname=0)  #读取训练数据
testdata=pd.read_excel(inputfile, sheetname=1)  #读取测试数据


#-------------------------------------KMeans--------------------------------------------
#仅支持欧氏距离,允许并发执行n_jobs(1,-1,-2), 可用PCA降维, init='kmeans++'解决随机选取初始值所导致的局部次优解问题,使得中心点之间远离彼此

model=KMeans(n_clusters=k,max_iter=iteration)
model.fit(traindata.ix[:,:traindata.shape[1]-1]) #特征集训练,不包括目标变量
labels=model.predict(testdata.ix[:,:testdata.shape[1]-1]) #测试训练模型

r1=pd.Series(model.labels_).value_counts()  #统计各个类别的数目
r2=pd.DataFrame(model.cluster_centers_) #找出模型的聚类中心
r=pd.concat([r2,r1],axis=1) #横向链接,axis=0是纵向链接,按列
i=list(traindata.columns)[:-1]
r.columns=i+[u'预测类别数目']
print '聚类结果信息:'
print r

rr=pd.concat([testdata, pd.Series(labels)], axis=1)
print rr.columns  #返回的是object对象
rr.columns=list(rr.columns)[:-1]+[u'聚类类别']
print rr.columns
density_plot(rr, r)










你可能感兴趣的:(python KMeans算法学习)