博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习入门-K-means算法
阅读量:7085 次
发布时间:2019-06-28

本文共 1931 字,大约阅读时间需要 6 分钟。

无监督问题,我们手里没有标签

聚类:相似的东西聚在一起

难点:如何进行调参

 

K-means算法 

          需要制定k值,用来获得到底有几个簇,即几种类型

          质心:均值,即向量各维取平均值

          距离的度量: 欧式距离和余弦相似度

         优化目标: min∑∑dist(ci, xi)   即每种类别的数据到该类别质心距离的之和最小

                               1-k x

      

 

根据上述的工作流程:

                     第一步:随机选择两个初始点,类别的质心点(图二)

                     第二步: 根据所选的质心点,根据欧式距离对数据进行分类(图三)

                     第三步:求得分类后的每个类别的质心(图四)

                     第四步: 根据所选的质心点,根据欧式距离对数据进行分类(图五)

                     第五步:求得分类后的每个类别的质心(图五)

                     ....  一直到分类的数据类别不发生变化为止

优势:简单,快速,适用于常规数据集,分布较为规则的数据集

劣势:

          K值难确定

          复杂度与样本数据呈线性关系

         不太适用于不规则的数据

 我们使用sklearn来实现kmeans代码,使用silhouette_score轮廓系数来作为评估

第一步:读入数据

第二步:提取特征列

第三步:建立kmeans模型和训练

第四步:使用.grouby计算每一种类别的聚类中心,即求平均

第五步:使用scatter_matrix 画出两个变量关系的散点图

第六步:使用sihouette_score 轮廓系数来比较不同数目的聚类簇的结果影响

 

import numpy as npimport matplotlib.pyplot as pltimport pandas as pd# 1.读入数据data = pd.read_csv('data.txt', sep=' ')# 2.提取特征X = data[['calories', 'sodium', 'alcohol', 'cost']]# 3.建立Kmeans模型和训练from sklearn.cluster import KMeansmodel = KMeans(n_clusters=3).fit(X)beer = data.copy()beer['cluster3'] = model.labels_# 根据分类结果,从小到大进行排序beer = beer.sort_values(by=['cluster3'])# 4. 使用groupby 计算出每一个聚类中心的质心点, 画散点图centers = beer.groupby(by=['cluster3']).mean()colors = np.array(['red', 'green', 'blue', 'yellow'])plt.scatter(beer['calories'], beer['sodium'], c=colors[beer['cluster3']], s=50, alpha=0.6)# 画出质心的位置plt.scatter(centers.calories, centers.sodium, c='k', marker='+', s=100)plt.show()

# 5. 使用scatter_matrix画出两两变量的关系图from pandas.tools.plotting import scatter_matrixscatter_matrix(beer[['calories', 'sodium', 'alcohol', 'cost']], s=50, alpha=0.6, c=colors[beer['cluster3']], figsize=(10, 10))plt.suptitle('The cluster Three')plt.show()

# 6.silhouette_score引入轮廓系数作为评估的标准import sklearn# k_cluster 从2-19,判断聚类的效果scores = []for i in range(2, 20):    labels = KMeans(n_clusters=i).fit(X).labels_    score = sklearn.metrics.silhouette_score(X, labels)    scores.append(score)    print(score)plt.plot(list(range(2, 20)), scores)plt.xlabel('The cluster k')plt.ylabel('Silhoette_score')plt.show()

转载于:https://www.cnblogs.com/my-love-is-python/p/10291349.html

你可能感兴趣的文章
wget离线下载文档
查看>>
用友软件操作流程(新建年度帐、年度结转步骤
查看>>
程序员
查看>>
杭州某公司技术一面
查看>>
我的友情链接
查看>>
在word里面写完文章在里面添加本机的图标
查看>>
我的友情链接
查看>>
cp: omitting directory `foldera/'
查看>>
linux中磁盘配置
查看>>
自动编译脚本编写指南
查看>>
PLSQL_两表之间的相互操作
查看>>
针对于 welcome-file-list 不生效的解决办法
查看>>
缓存框架:EhCache
查看>>
Java连接池总结复习及推荐
查看>>
关于CSS制作水平/垂直居中对齐问题
查看>>
Java生成SM2证书基于BouncyCastle(cer)
查看>>
Tornado的Mongodb异步操作—Motor
查看>>
VC/MFC子窗体向父窗体传递参数的几种方法
查看>>
Docker Storage Driver 改为 devicemapper
查看>>
libjson c binary的安装步骤
查看>>