聚类算法

1.聚类任务

  聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个”簇“,通过这样的划分,每个簇可能对应于一些潜在的概念,这些概念对聚类算法来说是事先未知,聚类过程仅能自动形成簇结构,簇所对应的概念语义需要由使用者来把握命名。


2.性能度量

聚类性能度量分为两大类,一类是将聚类结果与某个”参考模型“进行比较,称为”外部指标“;另一类是直接考察聚类结果而不利用任何参考模型,称为”内部指标“。

1)外部指标



2)内部指标



3)距离计算


4)K-均值算法


算法过程:

a) 从N个样本数据中随机选取K个对象作为初始的聚类中心

b) 分别计算各个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中

c) 所有对象分配完成后,重新计算K个聚类的中心

d) 与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转过程b),否则转过程f)

f) 当质心不发生变化时停止并输出聚类结果

5)算法实现

#-*- coding: utf-8 -*-
import pandas as pd

filename = 'consumption_data.xls'
output_file = 'result_kmeans'

data = pd.read_excel(filename, index_col='Id')
#数据标准化
data = 1.0*(data- data.mean())/data.std()

#设定最大循环次数和聚类数目
k_iterations = 500
k = 3

from sklearn.cluster import KMeans
model = KMeans(n_clusters = k, n_jobs = 4, max_iter= k_iterations)
model.fit(data)

#获得每个聚类的数目
r1 = pd.Series(model.labels_).value_counts()
#获取每个聚类的中心
r2 = pd.DataFrame(model.cluster_centers_)
#横向连接
r = pd.concat([r1, r2], axis = 1)
#设置属性
r.columns = ['number of each characters'] + list(data.columns)

r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1)
r.columns = list(data.columns) + ['class']
print r

def density_plot(data, title):
    import matplotlib.pyplot as plt
    #plt.title('The Density Distribution of the cluster %s' % title)
    p  = data.plot(kind = 'kde', linewidth = 2, subplots = True, sharex = False)
    [p[i].set_ylabel('density') for i in range(3)]
    plt.legend()
    plt.show()

for i in range(k):
    density_plot(data[r['class']==i], i)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值