【sklearn | 6】无监督学习与聚类分析

在前几篇教程中,我们探讨了 sklearn 的基础、高级功能,异常检测与降维,时间序列分析与自然语言处理,模型部署与优化,以及集成学习与模型解释。本篇教程将专注于无监督学习和聚类分析,这在探索性数据分析和数据挖掘中非常重要。

无监督学习

无监督学习是一种无需预先标记数据的学习方法,主要用于发现数据的内在结构和模式。常见的无监督学习任务包括聚类分析、降维和异常检测。

聚类分析

聚类分析是将数据集划分为若干组(簇)的过程,使得同一簇中的数据点彼此相似,而不同簇中的数据点差异较大。常见的聚类算法包括 k 均值(K-Means)、层次聚类(Hierarchical Clustering)和 DBSCAN。

k 均值(K-Means)

k 均值是一种迭代聚类算法,通过最小化簇内数据点到簇中心的距离来划分数据。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 加载数据集
iris = load_iris()
X = iris.data# 训练 k 均值模型
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)# 聚类结果
labels = kmeans.labels_
centers = kmeans.cluster_centers_# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='X', s=200)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('K-Means Clustering')
plt.show()
层次聚类(Hierarchical Clustering)

层次聚类通过构建树状结构(树状图)来进行聚类,常用的方法包括凝聚聚类(Agglomerative Clustering)。

from sklearn.cluster import AgglomerativeClustering
import scipy.cluster.hierarchy as sch# 训练层次聚类模型
hc = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='ward')
labels = hc.fit_predict(X)# 绘制树状图
dendrogram = sch.dendrogram(sch.linkage(X, method='ward'))
plt.title('Dendrogram')
plt.xlabel('Samples')
plt.ylabel('Euclidean distances')
plt.show()# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Hierarchical Clustering')
plt.show()
DBSCAN

DBSCAN 是一种基于密度的聚类算法,适用于发现任意形状的簇。

from sklearn.cluster import DBSCAN# 训练 DBSCAN 模型
dbscan = DBSCAN(eps=0.5, min_samples=5)
labels = dbscan.fit_predict(X)# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('DBSCAN Clustering')
plt.show()

降维

降维是通过减少数据的特征数量来简化数据,同时保留数据的重要结构和模式。常见的降维方法包括主成分分析(PCA)和 t-SNE。

主成分分析(PCA)

PCA 通过线性变换将数据投影到低维空间,同时尽量保留数据的方差。

from sklearn.decomposition import PCA# 训练 PCA 模型
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 可视化降维结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=iris.target, cmap='viridis')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of IRIS dataset')
plt.show()
t-SNE

t-SNE 是一种非线性降维方法,适用于高维数据的可视化。

from sklearn.manifold import TSNE# 训练 t-SNE 模型
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)# 可视化降维结果
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=iris.target, cmap='viridis')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.title('t-SNE of IRIS dataset')
plt.show()

异常检测

异常检测是识别数据集中异常或不正常数据点的过程。常用的异常检测方法包括孤立森林(Isolation Forest)和局部异常因子(Local Outlier Factor, LOF)。

孤立森林(Isolation Forest)

孤立森林通过构建随机树来隔离数据点,计算其异常分数。

from sklearn.ensemble import IsolationForest# 训练孤立森林模型
iso_forest = IsolationForest(contamination=0.1, random_state=42)
labels = iso_forest.fit_predict(X)# 可视化异常检测结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Isolation Forest Anomaly Detection')
plt.show()
局部异常因子(LOF)

LOF 通过计算局部密度偏差来识别异常点。

from sklearn.neighbors import LocalOutlierFactor# 训练 LOF 模型
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
labels = lof.fit_predict(X)# 可视化异常检测结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Local Outlier Factor Anomaly Detection')
plt.show()

综合示例项目:无监督学习与聚类分析

步骤1:数据预处理与聚类分析

from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans, DBSCAN
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt# 生成数据集
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# K-Means 聚类
kmeans = KMeans(n_clusters=4)
kmeans_labels = kmeans.fit_predict(X_scaled)# DBSCAN 聚类
dbscan = DBSCAN(eps=0.3, min_samples=10)
dbscan_labels = dbscan.fit_predict(X_scaled)# PCA 降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)# 可视化 K-Means 聚类结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=kmeans_labels, cmap='viridis')
plt.title('K-Means Clustering')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()# 可视化 DBSCAN 聚类结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=dbscan_labels, cmap='viridis')
plt.title('DBSCAN Clustering')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

步骤2:异常检测

from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor# 孤立森林异常检测
iso_forest = IsolationForest(contamination=0.1, random_state=42)
iso_forest_labels = iso_forest.fit_predict(X_scaled)# 局部异常因子异常检测
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
lof_labels = lof.fit_predict(X_scaled)# 可视化孤立森林异常检测结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=iso_forest_labels, cmap='viridis')
plt.title('Isolation Forest Anomaly Detection')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()# 可视化局部异常因子异常检测结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=lof_labels, cmap='viridis')
plt.title('Local Outlier Factor Anomaly Detection')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

总结

通过本篇专题教程,我们学习了 sklearn 中的无监督学习和聚类分析。无监督学习包括聚类分析、降维和异常检测。聚类分析方法包括 k 均值、层次聚类和

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/19768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github有趣项目:自制“我的世界” project make

videocodehttps://www.youtube.com/watch?v4O0_-1NaWnY,https://www.bilibili.com/video/BV1oj411p7qM/?https://github.com/jdah/minecraft-weekend MAKE git clone --recurse-submodules https://github.com/jdah/minecraft-weekend.git 正克隆到 minecraft-weekend... …

x264 参考帧管理源码分析

x264参考帧管理 在x264中,参考帧的管理是一个重要的组成部分,因为它涉及到视频编码过程中的帧间预测。以下是关于x264参考帧管理的一些关键点: 参考帧的分类:在x264中,帧可以分为几类,包括参考帧、当前编码帧和未使用帧等。 参考帧的作用:参考帧用于帧间预测,通过比较当…

【Qt】之【Get√】QByteArray写入txt文件、QByteArray截取数据

写入文件 QFile file(path);if (file.open(QIODevice::WriteOnly)) {// 将 QImage 保存到文件file.write(jsonData.toByteArray());// 关闭文件file.close();SCDebug << "saved to" << path;} else {SCDebug << "Failed to open file for wri…

直播分享|深入解析ts-morph:通过注释生成类型文档

♪ ♫ 你看小狗在叫 树叶会笑 风声在呢喃♫ ♪ 乘风追梦&#xff0c;童心未泯 OpenTiny 预祝所有大朋友、小朋友儿童节快乐~ 与此同时&#xff0c;OpenTiny 贡献者直播也即将开启啦~ 直播主题&#xff1a;【深入解析ts-morph&#xff1a;通过注释生成类型文档】 6月1日&am…

碳课堂|入门必看!碳足迹(CFP)主要国际标准一览

一、碳足迹概念 碳足迹&#xff08;Carbon FootPrint&#xff0c;CFP&#xff09;是用来衡量个体、组织、产品或国家在一定时间内直接或间接导致的二氧化碳排放量的指标。产品碳足迹属于碳排放核算的一种&#xff0c;一般指产品从原材料加工、运输、生产到出厂销售等流程所产生…

NeuralForecast 推理 - 从csv文件里读取数据进行推理

NeuralForecast 推理 - 从csv文件里读取数据进行推理 flyfish from ray import tunefrom neuralforecast.core import NeuralForecast from neuralforecast.auto import AutoMLP from neuralforecast.models import NBEATS, NHITS import torch import torch.nn as nn import…

【Java】刚刚!突然!紧急通知!垃圾回收!

【Java】刚刚&#xff01;突然&#xff01;紧急通知&#xff01;垃圾回收&#xff01; 文章目录 【Java】刚刚&#xff01;突然&#xff01;紧急通知&#xff01;垃圾回收&#xff01;从C语言的内存管理引入&#xff1a;手动回收Java的垃圾回收机制引用计数器循环引用问题 可达…

SpringBoot六种API请求参数读取方式

SpringBoot六种API请求参数读取方式 同步请求和异步请求 同步: 指单线程依次做几件事异步: 指多线程同时做几件事 同步请求: 指客户端浏览器只有一个主线程, 此线程负责页面的渲染和发出请求等操作, 如果此主线程发出请求的话则停止渲染而且会清空页面显示的内容 直到服务器响…

优化基础(二):线性组合、仿射组合、锥组合、凸组合、线性集合、仿射集合、锥集合、凸集合的理解

文章目录 前言组合线性组合 (linear combination)仿射组合 (affine combination)锥组合 (conic combination)凸组合 (convex combination) 集合仿射集合凸集合 练习&#xff1a;哪个图形是凸的&#xff0c;哪个是仿射的&#xff1f;参考资料 前言 组合侧重于描述由一些基点生成…

越洗越黑”的Pandas数据清洗

引言 先来一个脑筋急转弯活跃一下枯燥工作日常&#xff0c;问&#xff1a;“什么东西越洗越黑&#xff1f;” 有没有猜到的&#xff1f;猜不到我告诉你吧&#xff01; 答案是“煤球”。那么这个脑机急转弯跟我们要讨论的话题有没有关系呢&#xff1f; 嗯是的&#xff0c;还是沾…

三相智能电表通过Modbus转Profinet网关与PLC通讯案例

Modbus转Profinet网关&#xff08;XD-MDPN100/300&#xff09;的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议&#xff0c;支持Modbus RTU主站/从站&#xff0c;并可以与RS485接口的设备&#xff0c;它自带网…

「前端+鸿蒙」核心技术HTML5+CSS3

1、CS架构与BS架构 CS架构(Client-Server):客户端/服务器架构。用户通过客户端软件与服务器进行交互,客户端需要安装特定的软件才能访问服务器上的资源。BS架构(Browser-Server):浏览器/服务器架构。用户通过浏览器访问服务器上的网页,无需安装额外的软件,所有的交互都…

接口请求参数为文件时如何测试

方法 工具&#xff1a;Postman 步骤&#xff1a;①点击body②点击form-data③选择key类型为fie ④输入参数名⑤选择参数上传⑥发送请求

对称二叉树(oj题)

一、题目链接https://leetcode-cn.com/problems/symmetric-tree/ 二、题目思路 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称的思路: 1.将该树的左子树和右子树&#xff0c;当做两棵树&#xff0c;调用 判断两棵树是否对称相等的函数 2.判断两颗树是否对称相…

告别低效提问:掌握BARD技巧,让AI成为你的智能助手!

今天只聊一个主题&#xff1a;提示词 Prompt。 说到提示词&#xff0c;大家可能都看过GPT的高级示例&#xff0c;那些几百字的提示词&#xff0c;写起来确实不容易。 那么&#xff0c;如何写出同样效果的提示词呢&#xff1f; 有没有什么公式或者系统学习的方法&#xff1f;…

在Linux/Ubuntu/Debian中使用lshw查看系统信息

在Linux/Ubuntu/Debian中使用lshw查看系统信息 lshw 是一个用于显示硬件配置的命令&#xff0c;可以提供系统硬件的详细信息&#xff0c;包括 CPU、内存、硬盘、主板等。该命令需要超级用户权限来获取详细信息。 常见用法&#xff1a; 显示所有硬件信息&#xff1a; sudo l…

木叶飞舞之【机器人ROS2】篇章_第三节、给turtlebot3安装realsense深度相机

我们做视觉slam时会用到深度相机&#xff0c;但是gazebo的turtlebot3中只有rgb相机&#xff0c;没有深度&#xff0c;因此本节会修改代码&#xff0c;来给我们的小乌龟增加一个rgbd相机。 效果展示 发布topic如下图 图片大小都是640*480 1. 修改model.sdf文件 1.1 路径位置…

射频功率限幅器简略

在功率输入保护方面&#xff0c;限幅器是最好用的器件之一&#xff0c;可以保护后级电路不受超限功率的损害&#xff0c;限幅器其实像TVS功能一样&#xff0c;让超过阈值的功率释放到接地上&#xff0c;来达到限制幅度的目的&#xff0c;目前限幅器的限幅幅度大多都大于15dBm,很…

启智CV机器人,ROS, ubuntu 18.04

资料&#xff1a; https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 http://wiki.ros.org/melodic/Installation/Ubuntu https://github.com/6-robot/wpb_cv 一、安装ros环境 装VM。 装ubuntu18.04 desktop.…

100道面试必会算法-27-美团2024面试第一题-前缀和矩阵

100道面试必会算法-27-美团2024面试第一题-前缀和矩阵 问题解读 给定一个 n x n 的二进制矩阵&#xff0c;每个元素是 0 或 1。我们的任务是计算矩阵中所有边长为 k 的子矩阵中&#xff0c;包含特定数量 1 的情况。例如&#xff0c;我们希望找到所有边长为 k 的子矩阵中包含 k…