K-means算法过程及使用实例
一、K-means算法主要过程 (1)从数据中选择k个对象作为初始聚类中心; (2)计算每个聚类对象到聚类中心的距离来划分; (3)再次计算每个聚类中心 (4)聚类中心不再变化或到最大迭代次数,则停止,否则,重复2、3。二、K-means算法手写公式化表示三、K-means算法适用范围适用于凸数据集,且数据集符合混合高斯分布,这也是由算法特性决...
一、K-means算法主要过程
(1)从数据中选择k个对象作为初始聚类中心;
(2)计算每个聚类对象到聚类中心的距离来划分;
(3)再次计算每个聚类中心
(4)聚类中心不再变化或到最大迭代次数,则停止,否则,重复2、3。
二、K-means算法手写公式化表示
三、K-means算法适用范围
适用于凸数据集,且数据集符合混合高斯分布,这也是由算法特性决定的
四、K-means算法实例
1、数据集介绍,数据是个人工作中的一个数据,是有1万+鞋子的种类,然后想通过价格,人气,配色等看哪些比较类似
2、算法大致过程,读取csv文件,然后对其中一个特征用one-hot-enconding编码,然后做聚类,然后将结果输出到表格
3、具体代码
#-*- coding: utf-8 -*-
import pandas as pd
#参数初始化
inputfile = 'k-means.csv' #销量及其他属性数据
outputfile = 'data_type.xls' #保存结果的文件名
k = 8 #聚类的类别
iteration = 500 #聚类最大循环次数
data = pd.read_csv(inputfile, index_col = 'goods_id') #读取数据
data_zs = 1.0*(data - data.mean())/data.std() #数据标准化
from sklearn.cluster import KMeans
model = KMeans(n_clusters = k, n_jobs = 4, max_iter = iteration) #分为k类, 并发数4
model.fit(data_zs) #开始聚类
#简单打印结果
r1 = pd.Series(model.labels_).value_counts() #统计各个类别的数目
r2 = pd.DataFrame(model.cluster_centers_) #找出聚类中心
r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向), 得到聚类中心对应的类别下的数目
r.columns = list(data.columns) + [u'类别数目'] #重命名表头
print(r)
#详细输出原始数据及其类别
r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) #详细
#输出每个样本对应的类别
r.columns = list(data.columns) + [u'聚类类别'] #重命名表头
r.to_excel(outputfile) #保存结果
五、K-means算法优缺点
K-Means的主要优点有:
(1)原理比较简单,实现也是很容易,收敛速度快。
(2)聚类效果较优。
(3)算法的可解释度比较强。
(4)主要需要调参的参数仅仅是簇数k。
K-Means的主要缺点有:
(1)K值的选取依靠经验
(2)对于不是凸的数据集比较难收敛
(3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
(4)采用迭代方法,得到的结果只是局部最优。
(5)对噪音和异常点比较的敏感。
更多推荐
所有评论(0)