十七、聚类

作者:Chris Albon

译者:飞龙

协议:CC BY-NC-SA 4.0

凝聚聚类

# 加载库
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import AgglomerativeClustering# 加载数据
iris = datasets.load_iris()
X = iris.data# 标准化特征
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

在 scikit-learn 中,AgglomerativeClustering使用linkage参数来确定合并策略,来最小化(1)合并簇的方差(ward),(2)来自簇对的观测点的距离均值(average) ,或(3)来自簇对的观测之间的最大距离(complete)。

其他两个参数很有用。 首先,affinity参数确定用于linkage的距离度量(minkowskieuclidean等)。 其次,n_clusters设置聚类算法将尝试查找的聚类数。 也就是说,簇被连续合并,直到只剩下n_clusters

# 创建聚类对象
clt = AgglomerativeClustering(linkage='complete', affinity='euclidean', n_clusters=3)# 训练模型
model = clt.fit(X_std)# 展示簇的成员
model.labels_'''
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,1, 1, 1, 1, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 2, 2,2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 2, 2, 0,2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
'''

DBSCAN 聚类

# 加载库
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import DBSCAN# 加载数据
iris = datasets.load_iris()
X = iris.data# 标准化特征
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

DBSCAN有三个要设置的主要参数:

  • eps: 观测到被认为是邻居的另一个观测的最大距离
  • min_samples: 小于上面的eps距离的最小观测数量
  • metric: eps使用的距离度量。 例如,minkowskieuclidean等(请注意,如果使用 Minkowski 距离,参数p可用于设置 Minkowski 度量的指数)

如果我们在训练数据中查看簇,我们可以看到已经识别出两个簇,“0”和“1”,而异常观测被标记为“-1”。

# 创建 DBSCAN 对象
clt = DBSCAN(n_jobs=-1)# 训练模型
model = clt.fit(X_std)

评估聚类

import numpy as np
from sklearn.metrics import silhouette_score
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs# 生成特征矩阵
X, _ = make_blobs(n_samples = 1000,n_features = 10,centers = 2,cluster_std = 0.5,shuffle = True,random_state = 1)# 使用 k-means 来对数据聚类
model = KMeans(n_clusters=2, random_state=1).fit(X)# 获取预测的类别
y_hat = model.labels_

正式地,第 iii 个观测的轮廓系数是:

si=bi−aimax(ai,bi)s_{i} = \frac{b_{i} - a_{i}}{\text{max}(a_{i}, b_{i})}si​=max(ai​,bi​)bi​−ai​​

其中 sis_{i}si​ 是观测 iii 的轮廓系数,aia_{i}ai​ 是 iii 和同类的所有观测值之间的平均距离,而 bib_{i}bi​ 是 iii 和不同类的所有观测的平均距离的最小值。silhouette_score返回的值是所有观测值的平均轮廓系数。 轮廓系数介于 -1 和 1 之间,其中 1 表示密集,分离良好的聚类。

# 评估模型
silhouette_score(X, y_hat)# 0.89162655640721422

均值移动聚类

# 加载库
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import MeanShift# 加载数据
iris = datasets.load_iris()
X = iris.data# 标准化特征
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

MeanShift有两个我们应该注意的重要参数。 首先,bandwidth设置区域(即观测核)半径,用于确定移动方向。 在我们的比喻中,带宽是一个人可以在雾中看到的距离。 我们可以手动设置此参数,但默认情况下会自动估算合理的带宽(计算成本会显着增加)。 其次,有时在均值移动中,观测核中没有其他观测结果。 也就是说,我们足球上的一个人看不到任何其它人。 默认情况下,MeanShift将所有这些“孤例”观测值分配给最近观测核。 但是,如果我们想要留出这些孤例,我们可以设置cluster_all = False,其中孤例观测标签为 -1。

# 创建 MeanShift 对象
clt = MeanShift(n_jobs=-1)# 训练模型
model = clt.fit(X_std)

小批量 KMeans 聚类

小批量 k-means 的工作方式与上一个方案中讨论的 k-means 算法类似。 没有太多细节,不同之处在于,在小批量 k-means中,计算成本最高的步骤仅在随机的观测样本上进行,而不是所有观测。 这种方法可以显着减少算法发现收敛(即适合数据)所需的时间,而质量成本很低。

# 加载库
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import MiniBatchKMeans# 加载数据
iris = datasets.load_iris()
X = iris.data# 标准化特征
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

MiniBatchKMeansKMeans的工作方式类似,有一个显着性差异:batch_size参数。 batch_size控制每批中随机选择的观测数。 批量越大,训练过程的计算成本就越高。

# 创建 KMeans 对象
clustering = MiniBatchKMeans(n_clusters=3, random_state=0, batch_size=100)# 训练模型
model = clustering.fit(X_std)

KMeans 聚类

# 加载库
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans# 加载数据
iris = datasets.load_iris()
X = iris.data# 标准化特征
scaler = StandardScaler()
X_std = scaler.fit_transform(X)# 创建 KMeans 对象
clt = KMeans(n_clusters=3, random_state=0, n_jobs=-1)# 训练模型
model = clt.fit(X_std)# 查看预测类别
model.labels_'''
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2,2, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2,0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0,2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 2], dtype=int32)
'''# 创建新的观测
new_observation = [[0.8, 0.8, 0.8, 0.8]]# 预测观测的类别
model.predict(new_observation)# array([0], dtype=int32) # 查看簇中心
model.cluster_centers_'''
array([[ 1.13597027,  0.09659843,  0.996271  ,  1.01717187],[-1.01457897,  0.84230679, -1.30487835, -1.25512862],[-0.05021989, -0.88029181,  0.34753171,  0.28206327]])
'''

数据科学和人工智能技术笔记 十七、聚类相关推荐

  1. 数据科学和人工智能技术笔记 七、特征工程

    七.特征工程 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 稀疏特征矩阵上的降维 # 加载库 from sklearn.preprocessing import St ...

  2. 数据科学和人工智能技术笔记 十三、树和森林

    十三.树和森林 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 Adaboost 分类器 # 加载库 from sklearn.ensemble import AdaB ...

  3. 数据科学和人工智能技术笔记 十二、逻辑回归

    十二.逻辑回归 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 C 超参数快速调优 有时,学习算法的特征使我们能够比蛮力或随机模型搜索方法更快地搜索最佳超参数. sci ...

  4. 数据科学和人工智能技术笔记 二十一、统计学

    二十一.统计学 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 贝塞尔校正 贝塞尔的校正是我们在样本方差和样本标准差的计算中使用 n−1n-1n−1 而不是 nnn 的 ...

  5. 数据科学和人工智能技术笔记 十六、朴素贝叶斯

    十六.朴素贝叶斯 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 伯努利朴素贝叶斯 伯努利朴素贝叶斯分类器假设我们的所有特征都是二元的,它们仅有两个值(例如,已经是独热 ...

  6. 数据科学和人工智能技术笔记 十五、支持向量机

    十五.支持向量机 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 校准 SVC 中的预测概率 SVC 使用超平面来创建决策区域,不会自然输出观察是某一类成员的概率估计. ...

  7. 数据科学和人工智能技术笔记 十一、线性回归

    十一.线性回归 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 添加交互项 # 加载库 from sklearn.linear_model import LinearR ...

  8. 数据科学和人工智能技术笔记 十、模型选择

    十.模型选择 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 在模型选择期间寻找最佳预处理步骤 在进行模型选择时,我们必须小心正确处理预处理. 首先,GridSearc ...

  9. 数据科学和人工智能技术笔记 九、模型验证

    九.模型验证 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 准确率 # 加载库 from sklearn.model_selection import cross_v ...

最新文章

  1. 数据库防护技术对比分析
  2. 初步理解Java的三大特性——封装、继承和多态
  3. 一个很有意思的问题: 揭示了计算机程序问题的一般处理思路
  4. 示例在同一台机器上使用RMAN克隆数据库
  5. css实现圆形钟表,js+css3圆形指针时钟代码
  6. nyoj-976-Youth的最大化(贪心+二分)
  7. 云计算中的Big Iron重新成为时尚
  8. 学习 | 雷军 1994 年写的代码,不服不行
  9. pycharm关联mysql存储中文
  10. Spring 配置文件加载原理
  11. 软件项目管理 2.1.项目立项
  12. 在进行ISO14001认证审核之前,需要注意什么?
  13. python svm参数_python SVM 案例,sklearn.svm.SVC 参数说明
  14. Building Trustworthy Semantic Webs
  15. php邮箱发送,PHP的邮箱发送
  16. UML动态模型图简单介绍
  17. lgv20刷twrp_LG V30+ 日版 L-01K 刷机解锁BL 刷入TWR 回复日版基带
  18. 书评第003篇:《0day安全:软件漏洞分析技术(第2版)》
  19. 火爆全网,495页《看漫画学Python》全彩PDF免费分享,入门编程培养兴趣首选
  20. Bluetooth模块用于管理蓝牙设备,搜索附近蓝牙设备、实现简单数据传输

热门文章

  1. (73)Verilog HDL系统函数和任务:$monitor
  2. (4)verilog语言编写计数器
  3. 14003.xilinx系统移植
  4. python仿真搭建_mock搭建——python——搭建一个简单的mock服务——简单版本
  5. S3C2440上LCD驱动(FrameBuffer)实例开发讲解
  6. SVD 与 PCA 的直观解释(4): PCA 主成分分析
  7. 计算机中记录的意思,电脑日志看不懂,怎么才能知道日志记录的是什么意思啊?...
  8. webpack3.0 压缩css 但是不在html中引用,webpack怎样压缩css?
  9. SpringCloud面试题及答案
  10. ShellCode初体验