机器学习-06-无监督算法-02-层次聚类和密度聚类DBSCAN算法

2024-03-22 13:04

本文主要是介绍机器学习-06-无监督算法-02-层次聚类和密度聚类DBSCAN算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

总结

本系列是机器学习课程的系列课程,主要介绍机器学习中无监督算法,包括层次和密度聚类等。

参考

DBSACN在线动态演示

本门课程的目标

完成一个特定行业的算法应用全过程:

懂业务+会选择合适的算法+数据处理+算法训练+算法调优+算法融合
+算法评估+持续调优+工程化接口实现

机器学习定义

关于机器学习的定义,Tom Michael Mitchell的这段话被广泛引用:
对于某类任务T性能度量P,如果一个计算机程序在T上其性能P随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习
在这里插入图片描述

无监督算法

层次聚类

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from scipy.cluster.hierarchy import dendrogram, ward, single
from sklearn.datasets import load_iris
import matplotlib.pyplot as pltX = load_iris().data[:150]linkage_matrix = ward(X)dendrogram(linkage_matrix)plt.show()

输出如下:
在这里插入图片描述

这段代码是Python脚本,用于通过Scipy和Scikit-learn库绘制层次聚类的谱系图(dendrogram)。下面是逐行解释:

  1. from scipy.cluster.hierarchy import dendrogram, ward, single
    这一行导入了Scipy库中层次聚类相关的三个函数:dendrogram用于绘制谱系图,ward用于计算ward聚类算法所需的距离矩阵,single是连接准则的一种,用于确定聚类时的距离。
  2. from sklearn.datasets import load_iris
    这一行从Scikit-learn的datasets模块中导入load_iris函数,用于加载著名的Iris数据集。
  3. import matplotlib.pyplot as plt
    这一行导入matplotlib的pyplot模块,并给它一个别名plt。pyplot是matplotlib库中用于绘图的一个模块。
  4. X = load_iris().data[:150]
    这一行首先调用load_iris()函数加载Iris数据集,然后获取该数据集的特征数据(data),并选择前150个样本。
  5. linkage_matrix = ward(X)
    这一行使用ward聚类算法对特征数据X进行聚类,并将生成的连接矩阵(linkage matrix)赋值给变量linkage_matrix
  6. dendrogram(linkage_matrix)
    这一行使用linkage_matrix作为参数调用dendrogram函数,绘制基于这个连接矩阵的谱系图。
  7. plt.show()
    这一行调用plt.show()函数显示上述绘制的谱系图。
    执行这段代码,会展示出Iris数据集前150个样本的层次聚类谱系图。

DBSCAN

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# DBSCAN clustering algorithmprint(__doc__)import numpy as npfrom sklearn.cluster import DBSCAN
from sklearn import metrics
# from sklearn.datasets.samples_generator import make_blobs
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler# Generate sample data
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)# Compute DBSCAN
db = DBSCAN(eps=0.1, min_samples=10).fit(X)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_# Number of clusters in labels, ignoring noise if present.
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)print('Estimated number of clusters: %d' % n_clusters_)
print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels))
print("Completeness: %0.3f" % metrics.completeness_score(labels_true, labels))
print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels))
print("Adjusted Rand Index: %0.3f"% metrics.adjusted_rand_score(labels_true, labels))
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 plt# Black removed and is used for noise instead.
unique_labels = set(labels)
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:# Black used for noise.col = [0, 0, 0, 1]class_member_mask = (labels == k)xy = X[class_member_mask & core_samples_mask]plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),markeredgecolor='k', markersize=14)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()

输出为:
Automatically created module for IPython interactive environment
Estimated number of clusters: 12
Homogeneity: 0.313
Completeness: 0.249
V-measure: 0.277
Adjusted Rand Index: 0.024
Adjusted Mutual Information: 0.267
Silhouette Coefficient: -0.366
在这里插入图片描述

这段文字似乎是描述在使用IPython交互式环境(一种广泛使用的Python交互式shell)中自动生成的模块进行聚类分析的结果。以下是每个指标的简要解释:

  1. Automatically created module for IPython interactive environment: 这意味着在IPython环境中自动生成并使用的某个模块(可能是用于数据分析和可视化的自定义脚本或包)。
  2. Estimated number of clusters: 12: 这是通过某种聚类算法(如K-means, DBSCAN等)估计的最佳聚类数量,即数据应该被分成12个不同的簇。
  3. Homogeneity: 0.313: 同质性指标是衡量聚类效果的一个标准,它描述了实际的簇分配与预测的簇分配的匹配程度。Homogeneity的值介于0和1之间,0.313表明聚类效果不是很好,因为不是所有数据点都被分配到它们所属的簇中。
  4. Completeness: 0.249: 完整性指标衡量的是所有的数据点是否都被分配到了某个簇中。Completness的值同样介于0和1之间,0.249也显示了聚类效果并不理想,因为还有很多数据点没有被分配到相应的簇中。
  5. V-measure: 0.277: V-measure是同质性和完整性的调和平均数,用来综合评估聚类的质量。0.277的值说明聚类结果的整体质量不高。
  6. Adjusted Rand Index: 0.024: 调整后的兰德指数(ARI)是一个校正后的指标,用来衡量两个聚类结果的一致性,其值介于-1和1之间,0.024是一个非常低的值,表明聚类结果与真实的簇分配相比,一致性非常差。
  7. Adjusted Mutual Information: 0.267: 调整后的互信息(AMI)是衡量两个聚类结果之间互信息的一个指标,通过考虑簇的大小进行校正。0.267表明聚类结果在一定程度上反映了数据的自然结构,但是这个值也不是很高,表明聚类效果仍有提升空间。
  8. Silhouette Coefficient: -0.366: 轮廓系数是衡量聚类质量的另一个指标,它基于样本与其自身簇内的其他样本的相似度与其他簇的不相似度之间的比值。Silhouette Coefficient的值介于-1和1之间,-0.366表明聚类效果不佳,因为值越接近1表示样本更清晰地分配在一个簇中。
    综上所述,这些指标表明当前的聚类分析结果并不理想,可能需要调整聚类算法、参数或者尝试其他方法来改进聚类效果。

确定方向过程

针对完全没有基础的同学们
1.确定机器学习的应用领域有哪些
2.查找机器学习的算法应用有哪些
3.确定想要研究的领域极其对应的算法
4.通过招聘网站和论文等确定具体的技术
5.了解业务流程,查找数据
6.复现经典算法
7.持续优化,并尝试与对应企业人员沟通心得
8.企业给出反馈

这篇关于机器学习-06-无监督算法-02-层次聚类和密度聚类DBSCAN算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835340

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.