k-means步骤

  1. 随机设置K个特征空间内的点作为初始的聚类中心
  2. 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
  3. 接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
  4. 如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程

k-means API

sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)

  • k-means聚类
  • n_clusters:开始的聚类中心数量
  • init:初始化方法,默认为'k-means ++’
  • labels_:默认标记的类型,可以和真实值比较(不是值比较)

k-means对Instacart Market用户聚类

  1. 降维之后的数据
  2. k-means聚类
  3. 聚类结果显示
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score# 读取四张表的数据
prior = pd.read_csv("./data/instacart/order_products__prior.csv")
products = pd.read_csv("./data/instacart/products.csv")
orders = pd.read_csv("./data/instacart/orders.csv")
aisles = pd.read_csv("./data/instacart/aisles.csv")# 合并四张表到一张表  (用户-物品类别)
_mg = pd.merge(prior, products, on=['product_id', 'product_id'])
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])print(mt.head(10))# 交叉表(特殊的分组工具)
cross = pd.crosstab(mt['user_id'], mt['aisle'])
print(cross.head(10))# 进行主成分分析
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross)# 把样本数量减少
x = data[:500]
print(x.shape)# 假设用户一共分为四个类别
km = KMeans(n_clusters=4)
km.fit(x)predict = km.predict(x)
print(predict)# 显示聚类的结果
plt.figure(figsize=(10,10))# 建立四个颜色的列表
colored = ['orange', 'green', 'blue', 'purple']
colr = [colored[i] for i in predict]
plt.scatter(x[:, 1], x[:, 20], color=colr)plt.xlabel("1")
plt.ylabel("20")plt.show()# 评判聚类效果,轮廓系数
print(silhouette_score(x, predict))

Kmeans性能评估指标

轮廓系数:

注:对于每个点i 为已聚类数据中的样本 ,b_i 为i 到其它族群的所有样本的平均距离,a_i 为i 到本身簇的距离平均值

最终计算出所有的样本点的轮廓系数平均值

如果sc_i 小于0,说明a_i 的平均距离大于最近的其他簇。聚类效果不好

如果sc_i 越大,说明a_i 的平均距离小于最近的其他簇。聚类效果好

轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优

对于每一个样本 这里以蓝1为例

  1. 计算蓝1到自身类别的点距离的平均值a_i

  2. 计算蓝1分别到红色类别,绿色类别所有的点的距离,求出平均值b1, b2,取其中最小的值当做b_i

  3. 用公式计算蓝1的轮廓系数[-1, 1]

极端情况:

b_i>>a_i: 1 完美

a_i>> b_i: -1 最差

Kmeans性能评估指标API

sklearn.metrics.silhouette_score(X, labels)

  • 计算所有样本的平均轮廓系数
  • X:特征值
  • labels:被聚类标记的目标值

特点分析:采用迭代式算法,直观易懂并且非常实用

缺点:容易收敛到局部最优解(多次聚类)
需要预先设定簇的数量(k-means++解决)

参考地址:https://www.jianshu.com/p/8b802d24eb39

sklearn之kmean(无监督聚类)相关推荐

  1. 无监督聚类 -- Kmeans

    无监督聚类 – K-means Kmeans将数据划分为几个等方差的类,并且使类内方差最小(minimizing a criterion known as the inertia or within- ...

  2. NAACL 2021 | AWS AI 提出基于对比学习的端到端无监督聚类方法

    ©PaperWeekly 原创 · 作者 | 李婧蕾 学校 | 北京邮电大学硕士生 研究方向 | 自然语言处理 Abstract 无监督聚类的目的是根据在表示空间中的距离发现数据的语义类别.然而,在学 ...

  3. 聚类算法 距离矩阵_快速且不需要超参的无监督聚类方法

    论文: Efficient Parameter-free Clustering Using First Neighbor Relations Efficient Parameter-free Clust ...

  4. 无监督聚类算法该如何评价

    学过机器学习的小伙伴应该都很清楚:几乎所有的机器学习理论与实战教材里面都有非常详细的理论化的有监督分类学习算法的评价指标.例如:正确率.召回率.精准率.ROC曲线.AUC曲线.但是几乎没有任何教材上有 ...

  5. 手把手教你在多种无监督聚类算法实现Python(附代码)

    来源: 机器之心 本文约2704字,建议阅读6分钟. 本文简要介绍了多种无监督学习算法的 Python 实现,包括 K 均值聚类.层次聚类.t-SNE 聚类.DBSCAN 聚类. 无监督学习是一类用于 ...

  6. 什么是无监督学习(监督学习,半监督学习,无监督聚类)?

    作者:王丰 链接:https://www.zhihu.com/question/23194489/answer/25028661 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  7. dbscan和谱聚类_R 无监督聚类算法(1)K-means和层次聚类

    首先我们要解决几个问题 聚类算法主要包括哪些算法? 主要包括:K-means.DBSCAN.Density Peaks聚类(局部密度聚类).层次聚类.谱聚类. 什么是无监督学习? • 无监督学习也是相 ...

  8. 真·无监督!延世大学提出图像到图像无监督模型,实验结果超SOTA

    图像翻译目的是用模型将源域图像转换到目标域图像,通常涉及标签图到场景图的转换.图像风格.人脸的属性变换.标签图到场景图的转换. 图像翻译任务自生成对抗网络提出就得到了快速发展,例如经典的pix2pix ...

  9. 无监督和有监督的区别_无监督元学习(Unsupervised Meta-Learning)

    自从ICML2017的Model-Agnostic Meta-Learning (MAML)以及NIPS17的Prototypical Networks (ProtoNet)等paper出现之后,一系 ...

最新文章

  1. leaflet大量marker卡顿_leaflet如何加载10万数据
  2. 软件使用手册模板_我的印象笔记使用手册(精简说明)
  3. Android应用开发(10)---资源类型
  4. LiveLayout
  5. Python——字典生成式
  6. 听说你还不会写观察者模式?
  7. 使用这个插件,fiddler抓包直接生成httprunner脚本
  8. openSUSE Tumbleweed 支持 Linux Kernel 4.20
  9. libgdx游戏引擎开发笔记(八)SuperJumper游戏例子的讲解(篇二)---- 游戏界面跳转...
  10. unity有用资源的导出未package便于在其他工程用的问题解决
  11. java 快速删除文件夹_java File删除文件夹完整版
  12. 光伏龙头们掀起垂直一体化狂潮
  13. mysql对单引号的模糊查询_SQL语句中的单引号处理以及模糊查询
  14. 云原生系列三:K8s应用安全加固技术
  15. 字符串转成可计算的数学表达式
  16. android弹出自定义layout菜单,Android:PopWindow — 对Android的底部弹窗、顶部弹窗菜单及自定义界面的使用封装...
  17. 中科大少年班 | 实干兴“班”,这不是后浪,而是巨浪!
  18. ipip.net IP位置信誉信息爬取
  19. 信息系统项目管理师,第四版应该如何应对
  20. 多级树形目录mysql的使用_实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)...

热门文章

  1. 怎样写 OpenStack Neutron 的 Extension (三)
  2. User Word Automation Services and Open XML SDK to generate word files in SharePoint2010
  3. 《那些年啊,那些事——一个程序员的奋斗史》——30
  4. Apusic Operamasks的资源注入
  5. fastica和pca区别_PCA与ICA
  6. android 支付宝月账单 统计图_支付宝年度账单也太敷衍了!
  7. adroid 中公里除时间_全长210.72公里!这条高速有望年底通车…(视频图文)
  8. python从某个字符串开始截取_Python字符串的截取
  9. netty4 收不到服务器响应的数据_Netty模拟redis服务器
  10. 中国风古典传统中式花纹边框图案PSD素材