11 K-Means 原理及案例

11 K-Means 原理及案例

非监督学习

  1. unsupervised learning (非监督学习) ,只有特征值,没有目标值
  2. 聚类: 主要方法 - k-means (K - 需要分成的类别数)

K-Means步骤

  1. 随机设置K个特征空间内的点作为初始的聚类中心 (红,绿,蓝) k=3 (给定)
  2. 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类
    中心点作为标记类别,形成3个族群
  3. 分别计算这3个族群的平均值,把三个平均值与之前的三个旧中心进行比较。如果相同则结束聚类,如果不相同,把这三个平均点当做新的中心点,重复第二步。

Kmeans性能评估指标

注:对于每个点?? 为已聚类数据中的样本 ,??_?? 为?? 到其它族群的所有样本的平均距离,??_?? 为?? 到本身簇的距离平均值,最终计算出所有的样本点的轮廓系数平均值。

sc_i 取值

  • 当b_i >>a_i 时, 外部距离远大于内部距离,为1, 完美情况。
  • 当b_i <<a_i 时,内部距离远大于外部距离,为-1, 最差情况。
  • 因此 取值范围为[-1,1] ,实际情况中超过0,或者0.1就已经算是不错的情况。

K-Means API

  1. sklearn.cluster.KMeans

    • n_cluster=8 (开始的聚类中心数量)
    • labels: 默认的标记类型(不是值),可以和真实值比较。
  2. sklearn.metrics.silhouette_score
    • sklearn.metrics.silhouette_score(X, labels)
    • 计算所有样本的平均轮廓系数
    • X:特征值
    • labels:被聚类标记的目标值

算法案例

instacart 把用户分成几个类别
Instacart Market Basket Analysis
探究: 用户对物品类别的喜好细分降维
products.csv 商品信息
order_products_prior.csv 订单与商品信息
orders.csv 用户订单信息
aisles.csv 商品所属的具体物品类别

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'])

# 交叉表(特殊的分组工具)
cross = pd.crosstab(mt['user_id'], mt['aisle'])

# 进行主成分分析
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross)

# 把样本数量减少,减少运算量
x = data[:500]
print(x.shape)    #样本维数过多,后面随机抽取2个特征仅用于画图

# 假设用户一共分为四个类别
km = KMeans(n_clusters=4)
km.fit(x)
predict = km.predict(x)
print(predict)

# 显示聚类的结果
plt.figure(figsize=(10,10))

# 建立四个颜色的列表
colored = ['orange', 'green', 'blue', 'purple']
clr = [colored[i] for i in predict]
plt.scatter(x[:, 1], x[:, 20], color=clr) # 随机抽取2个特征仅用于画图展示
plt.xlabel("1")
plt.ylabel("20")

plt.show()

# 评判聚类效果,轮廓系数
print('K-Means轮廓系数为:'silhouette_score(x, predict)) # 一般都不超过0.7

原文地址:https://www.cnblogs.com/hp-lake/p/11980438.html

时间: 2024-10-29 08:05:30

11 K-Means 原理及案例的相关文章

【MySQL】排序原理与案例分析

前言 排序是数据库中的一个基本功能,MySQL也不例外.用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐含使用排序.本文首先会简单介绍SQL如何利用索引避免排序代价,然后会介绍MySQL实现排序的内部原理,并介绍与排序相关的参数,最后会给出几个"奇怪"排序例子,来谈谈排序一致性问题,并说明产生现象的本质原因. 排序优化与索引使用 为了优化SQL语句的排序性能,最好的情况是避免排序,合理利用索

JAVA读书推荐----《深入分析Java Web技术内幕》--《java多线程编程核心技术》--《大型网站技术架构 核心原理与案例分析》-《Effective Java中文版》

(1)  首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life. 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客.这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1.随便开篇点明该设计模式的定义 2.图文并茂讲解该设计模式中的结构 3.以详细的代码形式写一下该种设计模式的实现 4.补充内容 5.讲解该设计模式的优缺点 对于一个设计模式我们关

《大型网站技术架构:核心原理与案例分析》【PDF】下载

<大型网站技术架构:核心原理与案例分析>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型.架构设计.性能优化.Web安全.系统发布.运维监控等在内的大型网站开发全景视图. 本书不仅适用于指导网站工程师.架构师进行网站技术架构设计,也可用于指导产品经理.项目经

《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化

最近刚刚读完李智慧的<大型网站技术架构-核心原理与案例分析>,对每章重点内容作了一些笔记,以便加深印象及日后查阅. 一.大型网站软件系统的特点 高并发,大流量:需要面对高并发用户,大流量访问. 高可用:系统7X24小时不间断服务. 海量数据:需要存储.管理海量数据,需要使用大量服务器. 用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别. 安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击. 需求快

作业04之《大型网站技术架构:核心原理与案例分析》阅读笔记

在这一节课上,我们学习了系统质量属性其中的可用性和易用性.那么质量属性是什么呢,质量属性是高于对系统功能(即对系统能力.服务和行为)的基本的要求的.系统质量属性讲重点放在了可用性.可修改性.性能.安全性.可测试性和易用性.从设计师方面,系统质量属性一般存在三个问题:(1)为属性提供的定义并不是可操作的.(2)重点通常是一个特定的方面属于哪个质量属性.(3)每个属性团队都开发了其自己的词汇. 今天我们就根据<大型网站技术架构:核心原理与案例分析>将重点放在可用性和易用性的学习讨论上以及将其方法和

阅读《大型网站技术架构:核心原理与案例分析》第五、六、七章

题目:阅读<大型网站技术架构:核心原理与案例分析>第五.六.七章,结合<XXX需求征集系统>,分析如何增加相应的功能,提高系统的可用性和易用性,撰写一篇1500字左右的博客阐述你的观点 在这一节课上,我们学习了系统质量属性其中的可用性和易用性.那么质量属性是什么呢,质量属性是高于对系统功能(即对系统能力.服务和行为)的基本的要求的.系统质量属性讲重点放在了可用性.可修改性.性能.安全性.可测试性和易用性.从设计师方面,系统质量属性一般存在三个问题:(1)为属性提供的定义并不是可操作

读后小结:《大型网站技术架构:核心原理与案例分析》

浏览<大型网站技术架构:核心原理与案例分析>,然后作了一个小结(下图),作为知识结构梳理,分享大家,并以备参考. PS:需要在新窗口/标签打开,或下载,才可查看原图. 於霄云中心 2015年4月22日 18:12

[源码]Condition的原理,简单案例(ArrayBlockingQueue),复杂案例(LinkedBlockingQueue).

源代码解析 Re'entrantLock lock = new ReentrantLock(fair); Condition   notEmpty = lock.newCondition(); //返回内部类 AbstractQueuedSyncronizer.ConditionObject 各自维护了两个队列.一个是阻塞同步队列 syncQueue 双向队列,一个是条件等待队列. Condition.await两个作用.1.放入同步队列 park 2.realse锁,3等待别人获取锁acqui

《大型网站技术架构:核心原理与案例分析》笔记03

<大型网站技术架构:核心原理与案例分析>笔记01 1.大型网站核心架构要素. 架构:"最高层次的规划,难以改变的决定."从这个角度而言,人生规划也是一种架构.选什么学校.学什么专业.进什么公司.找什么对象,过什么样的生活,都是自己人生的架构. 软件架构:"有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计." 五大要素:性能.可用性.伸缩性.扩展性和安全性. 2.性能测试指标: 响应时间:指应用执行一个操作需要的时间,包括从发出请求开始