Scikit-learn聚类方法代码批注及相关练习
一、代码批注
代码来自:https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn import metrics
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler# make_blobs:为聚类产生数据集及其相应的标签;n_samples:样本点个数;centers:类别数;cluster_std:每个类别的方差;random_state:随机种子
# 这里centers里的三个二维坐标,其实代表了聚类的三个中心
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4, random_state=0)# 标准化
X = StandardScaler().fit_transform(X)# 预估器,并得出模型(eps:数据点的邻域半径;min_samples:某个数据点的邻域内最少有的数据点个数)
db = DBSCAN(eps=0.2, min_samples=7).fit(X)# 生成n_samples个False
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
# 预测出的结果(有结果的为True,为噪音的是False)
core_samples_mask[db.core_sample_indices_] = True
# 获得预测结果
labels = db.labels_
# 获得预测的聚类数,忽略掉噪音
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
# 获得噪音数
n_noise_ = list(labels).count(-1)# 预测出的集群数,对应图中5中颜色
print('Estimated number of clusters: %d' % n_clusters_)
# 预测出噪音点的数量,对应图中的黑点
print('Estimated number of noise points: %d' % n_noise_)
# 同质性:簇的纯洁程度—对比分类问题的精度
print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels))
# 完整性:簇的完整性—对比分类问题的召回率
print("Completeness: %0.3f" % metrics.completeness_score(labels_true, labels))
# v测度:用来评估同一个数据集上两个独立赋值的一致性
print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels))
# 调节的兰德系数(ARI):衡量两个数据分布的吻合程度
print("Adjusted Rand Index: %0.3f" % metrics.adjusted_rand_score(labels_true, labels))
# 调整互信息(AMI):衡量两个数据分布的吻合程度
print("Adjusted Mutual Information: %0.3f" % metrics.adjusted_mutual_info_score(labels_true, labels))
# 轮廓系数:将某个对象与自己的簇的相似程度和与其他簇的相似程度进行比较(肘方法)
print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X, labels))import matplotlib.pyplot as pltunique_labels = set(labels)
# 给每个label赋个颜色
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):# 给噪音为黑色if k == -1:col = [0, 0, 0, 1]# 开始绘制,获得该种类的点class_member_mask = (labels == k)# core_samples_mask里false就是黑色噪音点# 取出同一类的点(这样&可以过滤掉黑点。如果没有core_samples_mask(黑点为false)会把黑点也画很大)xy = X[class_member_mask & core_samples_mask]plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=14)# 获得噪音点,注意:db.core_sample_indices_没出现的的不一定就是噪音点(小圆圈)xy = X[class_member_mask & ~core_samples_mask]plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=6)plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()
在实验中一直有个困惑,不知道这个小圆圈是怎么画上去的。它的原因是在“db.core_sample_indices_”和“db.labels”,起初我以为“db.core_sample_indices_”会生成除噪音点以外的其他index,也就是区分开了噪音点与聚类点。但其实并不是,有少部分不在“db.core_sample_indices_”中的点也是聚类点,在下方打印出来的值分别与它俩相对,可以看见前者并没有为32的index,理论上它应该为-1噪音点,但打印出“db.labels”发现index为32的值是1,是一个聚类点。这点也在scikit learn文档最后一段进行了说明,文档解释到图中大的圆为“core sample”,而小的圆为“non-core sample”,它也是聚类的一部分。
二、DBSCAN的使用
通过改变DBSCAN中min_samples参数观察图形的聚类效果。
当min_samples为41时编译器报错。
观察上图可以发现随着min_samples的增大cluster越来越少,噪音点越来越多,直至报错。这是因为DBSCAN算法是基于密度的算法,所以它将密集区域内的点看作核心点(核心样本)。它主要有两个参数:min_samples和eps。
eps表示数据点的邻域半径,如果某个数据点的邻域内至少有min_sample个数据点,则将该数据点看作为核心点。如果某个核心点的邻域内有其他核心点,则将它们看作属于同一个簇。如果min_sampLes设置地太大,那么意味着更少的点会成为核心点,而更多的点将被标记为噪声。
如果将eps设置得非常小,则有可能没有点成为核心点,并且可能导致所有点都被标记为噪声。如下图为eps=0.05,min_samples=5的图。
如果将eps设置为非常大,则将导致所有点都被划分到同一个簇。如下图为esp=0.3,min_samples=5的图。
三、KMeans的使用
由于KMeans并没有“core_sample_indices”这个属性,也就是不会分离出噪音点,需将该条语句注释掉。在画图时,由于并没有噪音点,也要进行相应改写。
KMeans算法是根据给定的n个数据对象的数据集,构建n个划分聚类的方法,每个划分聚类即为一个簇。该方法将数据划分为n个簇,每个簇至少有一个数据对象,每个数据对象必须属于而且只能属于一个簇。同时要满足同一簇中的数据对象相似度高,不同簇中的数据对象相似度较小。聚类相似度是利用各簇中对象的均值来进行计算的。
KMeans 算法的处理流程如下,首先,随机地选择k个数据对象,每个数据对象代表一个簇中心,即选择k个初始中心;对剩余的每个对象,根据其与各簇中心的相似度(距离),将它赋给与其最相似的簇中心对应的簇;然后重新计算每个簇中所有对象的平均值,作为新的簇中心。不断重复以上这个过程,直到准则函数收敛,也就是簇中心不发生明显的变化。通常采用均方差作为准则函数,即最小化每个点到最近簇中心的距离的平方和。新的簇中心计算方法是计算该簇中所有对象的平均值,也就是分别对所有对象的各个维度的值求平均值,从而得到簇的中心点。
四、KMeans与DBSCAN对比
KMeans | DBSCAN |
---|---|
使用簇的基于原型的概念。 | 使用基于密度的概念。 |
只能用于具有明确定义的质心(如均值)的数据。 | 要求密度定义(基于传统的欧几里得密度概念)对于数据是有意义的。 |
需要指定簇的个数作为参数。 | 不需要事先知道要形成的簇类的数量,自动确定簇个数。 |
很难处理非球形的簇和不同形状的簇。 | 可以发现任意形状的簇类,可以处理不同大小和不同形状的簇。 |
可以用于稀疏的高纬数据,如文档数据。 | 不能很好反映高维数据。 |
可以发现不是明显分离的簇,即便簇有重叠也可以发现。 | 会合并有重叠的簇。 |
相关文章:
![](https://img-blog.csdnimg.cn/86aca1ba473d4cd9837ad13f8a9815e0.png)
Scikit-learn聚类方法代码批注及相关练习
一、代码批注 代码来自:https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py import numpy as np from sklearn.cluster import DBSCAN from sklearn import metrics from sklearn.datasets …...
![](https://img-blog.csdnimg.cn/img_convert/879000d95cbc4bc6b8ed25d5b1cada5e.png)
C#程序的启动显示方案(无窗口进程发送消息) - 开源研究系列文章
今天继续研究C#的WinForm的实例显示效果。 我们上次介绍了Winform窗体的唯一实例运行代码(见博文:基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章 )。这就有一个问题,程序已经打开了,这时候再次运行该应用程序,…...
![](https://img-blog.csdnimg.cn/20200418214051828.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkwMjEyNg==,size_16,color_FFFFFF,t_70)
java泛型和通配符的使用
泛型机制 本质是参数化类型(与方法的形式参数比较,方法是参数化对象)。 优势:将类型检查由运行期提前到编译期。减少了很多错误。 泛型是jdk5.0的新特性。 集合中使用泛型 总结: ① 集合接口或集合类在jdk5.0时都修改为带泛型的结构② 在实例化集合类时…...
![](https://img-blog.csdnimg.cn/img_convert/aca74b1a68825e1b727150994851e2d0.png)
【网络】自定义协议 | 序列化和反序列化 | 以tcpServer为例
本文首发于 慕雪的寒舍 以tcpServer的计算器服务为例,实现一个自定义协议 阅读本文之前,请先阅读 tcpServer 本文完整代码详见 Gitee 1.重谈tcp 注意,当下所对tcp的描述都是以简单、方便理解起见,后续会对tcp协议进行深入解读 …...
![](https://img-blog.csdnimg.cn/03f69a0b4cd846669e27bff38384c1b3.png)
06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)
文章目录 1. 主要的窗体类及其用途2. 窗体类重要特性的设置2.1 setAttribute()函数2.2 setWindowFlags()函数2.3 setWindowState()函数2.4 setWindowModality()函数2.5 setWindowOpacity()函数 3. 多窗口应用程序设计3.1 主窗口设计3.2 QFormDoc类的设计3.3 QFormDoc类的使用3.…...
![](https://img-blog.csdnimg.cn/bdbfafa32e744dd1919b9ad0c9ac39b8.png)
(力扣)用两个栈实现队列
这里是栈的源代码:栈和队列的实现 当然,自己也可以写一个栈来用,对题目来说不影响,只要符合栈的特点就行。 题目: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、pe…...
![](https://img-blog.csdnimg.cn/7022f26c803f4238bb33509b7ff9d56e.png)
【自动化测试框架】关于unitttest你需要知道的事
一、UnitTest单元测试框架提供了那些功能 1.提供用例组织和执行 如何定义一条“测试用例”? 如何灵活地控制这些“测试用例”的执行? 2.提供丰定的断言方法 当测试用例的执行结果与预期结果不一致时,判定测试用例失败。在自动化测试中,通过“断言”…...
![](https://img-blog.csdnimg.cn/img_convert/7ecd21965cb9d96ccf3636a35f6958d0.jpeg)
手机便签中可以打勾的圆圈或小方块怎么弄?
在日常的生活和工作中,很多网友除了使用手机便签来记录灵感想法、读书笔记、各种琐事、工作事项外,还会用它来记录一些清单,例如待办事项清单、读书清单、购物清单、旅行必备物品清单等。 在按照记录的清单内容来执行的时候,为了…...
![](https://img-blog.csdnimg.cn/38515ce88e2a4828b0cf91d5993ccc4b.png)
【Linux】gdb 的使用
目录 1. 使用 gdb 的前置工作 2. 如何使用 gdb 进行调试 1、如何看到我的代码 2、如何打断点 3、怎么运行程序 4、如何进行逐过程调试 5、如何进行逐语句调试 6、如何监视变量值 7、如何跳到指定位置 8、运行完一个函数 9、怎么跳到下一个断点 10、如何禁用/开启…...
![](https://img-blog.csdnimg.cn/img_convert/0e95e18e9a451afdca2caf77e94ee36d.png)
C++11之右值引用
C11之右值引用 传统的C语法中就有引用的语法,而C11中新增了的 右值引用(rvalue reference)语法特性,所以从现在开始我们之前学习的引用就叫做左值引用(lvalue reference)。无论左值引用还是右值引用&#…...
![](https://www.ngui.cc/images/no-images.jpg)
【PHP的设计模式】
PHP的设计模式 一、策略模式二、工厂模式三、单例模式四、注册模式五、适配器模式六、观察者模式 一、策略模式 策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。 策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强…...
![](https://img-blog.csdnimg.cn/370211db388947aca5d548e2216bfc54.png)
React 之 Redux - 状态管理
一、前言 1. 纯函数 函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式,所以也有纯函数的概念 确定的输入,一定会产生确定的输出 函数在执行过程中,不能产生副作用 2. 副作用 表示在执行一个函数时&a…...
![](https://www.ngui.cc/images/no-images.jpg)
集合转数组
首先,我们在看到集合转数组的时候可能第一个想到的就是toArray(),但是我们在调用 toArray()的时候,可能会遇到异常 java.lang.ClassCastException;这是因为 toArray()方法返回的类型是 Obejct[],如果我们将其转换成其他类型&#…...
![](https://img-blog.csdnimg.cn/39f54fc3bcdf48f1a8dc353a65f81005.png)
使用Python将Word文档转换为PDF的方法
摘要: 文介绍了如何使用Python编程语言将Word文档转换为PDF格式的方法。我们将使用python-docx和pywin32库来实现这个功能,这些库提供了与Microsoft Word应用程序的交互能力。 正文: 在现实生活和工作中,我们可能会遇到将Word文…...
![](https://www.ngui.cc/images/no-images.jpg)
Java 判断一个字符串在另一个字符串中出现的次数
1.split实现 package com.jiayou.peis.official.account.biz.utils;public class Test {public static void main(String[] args) {String k"0110110100100010101111100101011001101110111111000101101001100010101" "011101100101011010100011111010111001001…...
![](https://www.ngui.cc/images/no-images.jpg)
设计模式十三:代理(Proxy Pattern)
代理模式是一种结构型设计模式,它允许通过在对象和其真实服务之间添加一个代理对象来控制对该对象的访问。代理对象充当了客户端和真实服务对象之间的中介,并提供了额外的功能,如远程访问、延迟加载、访问控制等。 代理模式的使用场景包括&a…...
![](https://img-blog.csdnimg.cn/5b13eedbaf6f411cb1a5e91710690144.png)
Redis基础 (三十八)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 NoSQL 1.2 Redis 二、安装 2.1 安装方式 : 三、目录结构 3.1 rpm -ql redis 3.2 /etc/redis.conf 主配置文件 3.3 /var/lib/redis …...
![](https://www.ngui.cc/images/no-images.jpg)
maven中的scope
1、compile:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。 2、test:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,…...
![](https://img-blog.csdnimg.cn/e1a600d2d03f475f815ae785d1f3c5bc.png)
【网络基础实战之路】实现RIP协议与OSPF协议间路由交流的实战详解
系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS:本要求基于…...
![](https://img-blog.csdnimg.cn/1155249777944b20af420272a301cb1d.png)
CNN(四):ResNet与DenseNet结合--DPN
🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 前面实现了ResNet和DenseNet的算法,了解了它们有各自的特点: ResNet:通过建立前面层与后面层之间的“短路…...
![](https://img-blog.csdnimg.cn/img_convert/7046751de11a706ac05bf59a967f870e.png)
汽车EBSE测试流程分析(四):反思证据及当前问题解决
EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第四”篇章,在之前的“篇章(三)”中已经结合具体研究实践阐述了“步骤二,通过系统调研确定改进方案”等内容。那么,在本篇章(四)中&#…...
![](https://img-blog.csdnimg.cn/2021060109523638.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDc5NzUzOQ==,size_16,color_FFFFFF,t_70)
如何在Spring MVC中使用@ControllerAdvice创建全局异常处理器
文章目录 前言一、认识注解:RestControllerAdvice和ExceptionHandler二、使用步骤1、封装统一返回结果类2、自定义异常类封装3、定义全局异常处理类4、测试 总结 前言 全局异常处理器是一种 🌟✨机制,用于处理应用程序中发生的异常ÿ…...
![](https://img-blog.csdnimg.cn/3b0a5d733f3e4c64b0feb4ce4617dbb7.png)
2023/08/05【网络课程总结】
1. 查看git拉取记录 git reflog --dateiso|grep pull2. TCP/IP和OSI七层参考模型 3. DNS域名解析 4. 预检请求OPTIONS 5. 渲染进程的回流(reflow)和重绘(repaint) 6. V8解析JavaScript 7. CDN负载均衡的简单理解 8. 重学Ajax 重学Ajax满神 9. 对于XML的理解 大白话叙述XML是…...
![](https://www.ngui.cc/images/no-images.jpg)
log_softmax比softmax更好?
多类别分类的一个trick 探讨一下在多类别分类场景,如翻译、生成、目标检测等场景下,使用log_softmax的效果优于softmax的原因。 假设词典大小为10,一个词的ID为9(即词典的最后一个词),使用交叉熵作为损失函…...
![](https://img-blog.csdnimg.cn/156dfb26519a4e9cbf66eb3714f63c2d.png)
[LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)
1.题目 344.反转字符串(Easy) 1.代码 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 双指针left,right 0, len(s)-1while left < right:temp s[left]s[…...
![](https://static.oschina.net/uploads/img/202308/04230002_woG6.png)
【SOP】最佳实践之 TiDB 业务写变慢分析
作者: 李文杰_Jellybean 原文来源: https://tidb.net/blog/d3d4465f 前言 在日常业务使用或运维管理 TiDB 的过程中,每个开发人员或数据库管理员都或多或少遇到过 SQL 变慢的问题。这类问题大部分情况下都具有一定的规律可循,…...
![](https://www.ngui.cc/images/no-images.jpg)
带有参数的 PL/SQL 过程/函数从选择查询返回表
技术标签: 【中文标题】带有参数的 PL/SQL 过程/函数从选择查询返回表【英文标题】:PL/SQL Procedure/function with params to return a table from(of) a select query【发布时间】:2020-12-01 11:17:49【问题描述】: 如何创建带参数的 (…...
![](https://img-blog.csdnimg.cn/c13d113b9c52447abf06a00162d9abd8.png)
文件的权限
1、修改文件的所属者和所属组 2、修改文件某一类人(所属者、所属组、其他人)的权限 一、用户对于普通文件的权限 二、用户对于目录文件的权限 三、访问控制列表ACL 四、特殊权限(了解) wuneng创建了几个文件,xiaoming对…...
![](https://www.ngui.cc/images/no-images.jpg)
vue3集成echarts最佳实践
安装 echarts npm install echarts --save 两种引用方式 非虚拟 dom import * as echarts from echarts;var chartDom document.getElementById(mychart); var myChart echarts.init(chartDom); var option;option {title: {text: Referer of a Website,subtext: Fake Da…...
![](https://img-blog.csdnimg.cn/42c2876637e14b6e8d1202d3b5e78b14.gif)
一位年薪40W的测试被开除,回怼的一番话,令人沉思
一位年薪40W测试工程师被开除回怼道:“反正我有技术,在哪不一样” 一技傍身,万事不愁,当我们掌握了一技之长后,在职场上说话就硬气了许多,不用担心被炒,反过来还可以炒了老板,这一点…...
![](/images/no-images.jpg)
建站行业前景/内容营销是什么意思
转自:简书 冯雅杰 做到这一点,你也可以成为优秀的程序员 作为一个程序员,我经常会问自己一个问题: 优秀的程序员都具备哪些特质? 我总结过很多特质,例如: 有解决问题的能力有独立思考的能力有好…...
![](https://img-blog.csdnimg.cn/img_convert/a49ed05ee05e6b1a811c622e7f3842de.png)
移动互联网技术和智能设备终端的普及/南京seo排名
▌本文来源:中国电子报(已授权) ★ 导读 ★ ★ 2020年10月27日,AMD与Xilinx(赛灵思)宣布达成最终协议,AMD以全股票交易的方式收购赛灵思,交易金额为350亿美元。 业界似乎没有不变的誓言,在英特…...
![](https://img2018.cnblogs.com/blog/137142/201812/137142-20181207151416085-1422780679.png)
网站推广做招商加盟/引流推广广告怎么写
用脚手架create-react-app创建的react项目,已经集成了webpack,只要运行命令:npm run build 项目就会编译成功,生成一个build文件夹,现在问题来了,如何启动这个项目呢。 我们看到命令执行完了,会…...
![](https://www.oschina.net/img/hot3.png)
常州淄博网站优化/网站策划方案
为什么80%的码农都做不了架构师?>>> 检查有关配置:show variables like %sche%; 1、开启配置 set global event_scheduler 1; 2、创建定时任务,每天执行1次(on completion preserve代表永久执行) CREATE EVENT IF NOT EXISTS my_…...
![](/images/no-images.jpg)
做网站的好公司/企业网络营销策划案例
一、Cult3D开发软件Cult3D 开发软件可以让你在建立好的模型上增加互动效果。先看看你是否适合阅读该教程,假如你符合以下条件,该文档非常适合您: 1.正安装Cult3D开发包应用程序; 2.你正建立一个Cult3D动画; 3.你正把一…...
![](https://img2018.cnblogs.com/blog/494924/201904/494924-20190411174203276-1182020642.png)
奉贤网站建设上海站霸/友情链接平台站长资源
我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作: 1.如果是在加载之前进行其它操作,则整个界面出来的很慢,而且若是时间长的话,页面很久才能出来&…...