无监督学习之旅:聚类与降维技术

1.引言

在无监督学习领域,我们面对的是未标记的数据集,目标是揭示其中隐藏的结构和模式。本文将重点探讨两种关键的无监督学习技术:聚类分析和降维方法。我们将深入理解K-means聚类算法及其实现,介绍DBSCAN等密度聚类方法,并通过PCA与t-SNE的实际应用,展示如何进行有效的数据降维与可视化。更多Python在人工智能中的使用方法,欢迎关注《Python人工智能实战》栏目!

2.K-means聚类算法与实现

2.1. 算法原理

K-means算法是一种基于距离的迭代聚类方法,其核心思想是将数据集划分为K个簇,使得每个数据点归属于与其最近均值(质心)对应的簇。算法流程如下:

  • 初始化:随机选取K个数据点作为初始质心。
  • 迭代分配:对于每个数据点,计算其到各个质心的距离,将其分配到最近质心所在的簇。
  • 更新质心:根据每个簇内所有数据点重新计算簇质心,即取簇内所有点的均值作为新的质心。
  • 终止条件:当簇分配不再发生变化或达到预设的最大迭代次数时,停止迭代。

2.2. Python实现与输出

下面是一个使用sklearn与numpy库实现K-means聚类的示例代码:

python 复制代码
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt

# 假设我们有一些二维数据
data = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])

# 初始化KMeans,设定簇的数量为2
kmeans = KMeans(n_clusters=2, random_state=0)

# 对数据进行拟合和预测
kmeans.fit(data)
labels = kmeans.predict(data)
centroids = kmeans.cluster_centers_

# 可视化结果
plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=300, alpha=0.5)
plt.title('K-means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

此代码将生成一个散点图,其中不同颜色的点代表不同的簇,红色的点代表每个簇的中心。通过图可以直观地看到数据被划分成了两个簇。
sklearn库实现K-means聚类

关于Numpy的使用方法,可以看往期文章:

科学计算利器:Numpy与Pandas快速上手-CSDN博客文章浏览阅读370次,点赞11次,收藏7次。这只是一个简单的示例,实际数据分析过程中可能还需要进行更深入的数据清洗、特征选择、模型调优等步骤。Pandas是Python数据分析的主力库,以其灵活的数据框(DataFrame)对象和丰富的数据处理函数,极大简化了数据清洗、转换和分析工作。Numpy是Python科学计算库中的基石,以其高效的多维数组对象(ndarray)和丰富的数学函数库,为数值计算提供了强大支持。列中的数据类型转换为整数,前提是该列中不再包含缺失值或其他非整数类型的数据。函数将删除包含任何缺失值的行,所以ID为5和7的行将被移除。https://blog.csdn.net/meijinbo/article/details/136960216

3.DBSCAN等密度聚类方法介绍

3.1. 算法原理

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它不需要预先指定簇的数量,而是通过发现数据中的高密度区域来识别簇。DBSCAN有两个关键参数:

  • ε(epsilon):定义邻域半径,即距离小于ε的点被认为是"邻近"的。
  • MinPts:一个点成为核心点所需的邻近点最小数量。

算法步骤如下:

  • 寻找核心点:遍历数据点,若某点邻域内点数大于等于MinPts,则标记为核心点。
  • 扩展簇:从一个核心点出发,将所有可达的核心点及其邻域点归入同一簇。
  • 识别噪声点:未被分配到任何簇的点被视为噪声点。

3.2. Python实现

使用sklearn库实现DBSCAN:

python 复制代码
from sklearn.cluster import DBSCAN
import numpy as np

# 生成一些示例数据
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])

# 定义 DBSCAN 模型参数
eps = 0.5  # 邻域半径
min_samples = 5  # 最小样本数

# 创建 DBSCAN 模型
db = DBSCAN(eps=eps, min_samples=min_samples)

# 拟合数据
db.fit(X)

# 标记每个样本的簇标签
labels = db.labels_

# 打印簇标签
print("Cluster labels:", labels)
# 输出 Cluster labels: [-1 -1 -1 -1 -1 -1]

在上述示例中,首先生成了一些示例数据X。然后,定义了 DBSCAN 模型的参数eps(邻域半径)和min_samples(最小样本数)。接下来,创建了 DBSCAN 模型并使用数据进行拟合。最后,可以通过labels_属性获取每个样本的簇标签。

输出结果:

  • labels 包含每个样本的聚类标签。正值表示簇编号,-1表示噪声点。

4.PCA与t-SNE降维可视化实战

4.1. PCA降维实现

PCA是一种线性降维方法,通过最大化方差保留来找到数据的主要方向(主成分),将原始高维数据投影到这些主成分构成的低维空间中。

Python实现与可视化:

python 复制代码
from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt 
# 假设我们有一个高维数据集
high_dim_data = np.random.rand(100, 10)  # 100个样本,每个样本10个特征

# 初始化PCA,设定要降到的维度数
pca = PCA(n_components=2)

# 对数据进行降维
low_dim_data = pca.fit_transform(high_dim_data)

# 可视化降维后的数据
plt.scatter(low_dim_data[:, 0], low_dim_data[:, 1])
plt.title('PCA Dimensionality Reduction')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

输出结果: 图形展示经过PCA降维后的数据点分布,颜色对应K-means或DBSCAN的聚类结果,可以帮助观察聚类结构是否在低维空间中得以保留和清晰展现。
PCA降维

4.2. t-SNE降维实现

t-SNE是一种非线性降维方法,特别擅长于揭示高维数据的局部结构和流形,常用于数据可视化。其核心思想是将高维空间中的相似性概率转化为低维空间中的相似性概率,通过优化KL散度来调整低维表示。

Python实现与可视化:

python 复制代码
from sklearn.manifold import TSNE  
  
# 使用之前的高维数据集  
  
# 初始化t-SNE  
tsne = TSNE(n_components=2, random_state=0)  
  
# 对数据进行降维  
tsne_data = tsne.fit_transform(high_dim_data)  
  
# 可视化降维后的数据  
plt.scatter(tsne_data[:, 0], tsne_data[:, 1])  
plt.title('t-SNE Dimensionality Reduction')  
plt.xlabel('t-SNE Feature 1')  
plt.ylabel('t-SNE Feature 2')  
plt.show()

输出结果: 图形展示经过t-SNE降维后的数据点分布,颜色同样对应聚类结果。t-SNE往往能揭示出更复杂的数据结构和簇间分离,有助于直观理解数据的内在模式。
t-SNE降维

5.总结

总结而言,K-means、DBSCAN等聚类算法为无监督学习提供了划分数据结构的方法,而PCA和t-SNE等降维技术则助力我们以更低维度可视化和理解高维数据的聚类特性。通过结合这些技术,我们可以有效地探索无标签数据集中的隐藏信息,为后续的数据分析、模式识别乃至决策制定提供有力支持。更多Python在人工智能中的使用方法,欢迎关注《Python人工智能实战》栏目!

相关推荐
这张生成的图像能检测吗2 分钟前
(论文速读)LINN:液体神经网络与脉冲神经元融合的可解释旋转机械故障诊断
人工智能·深度学习·神经网络·故障诊断
计算机毕业设计杰瑞5 分钟前
【最新原创大数据】基于大数据的酒店数据分析与可视化,附源码_高质量项目_可视化_数据分析_毕设选题推荐_SPark_Hadoop_毕设指导
大数据·信息可视化·数据挖掘·课程设计
东方佑8 分钟前
v24 (Hybrid2Fast) 架构与实验报告
人工智能·深度学习·语言模型·自然语言处理·架构
阿部多瑞 ABU9 分钟前
重复的辩证法:从哲学僵尸到历史唯物主义——论意识、重复与人类解放
人工智能·ai写作
枫叶丹414 分钟前
从一次推理请求出发:模型、显存、网络与服务系统如何共同决定性能
网络·人工智能·chatgpt·开源·agent·codex
zyj88909116 分钟前
工厂标识系统设计规范?工厂标识牌有哪些类型?
python·设计规范
YangYang9YangYan18 分钟前
2027 秋招|应用统计学专业投递快消市场部,岗位 JD 拆解与统计能力落地
人工智能·数据分析
lie..20 分钟前
30天从零开始学AI应用开发(Day 17):ChromaDB 上手:给本地文档建一个“外挂大脑”
数据库·人工智能·oracle
weixin_4407305021 分钟前
迭代器Iterator(列表生成器、可迭代的如何生成迭代器)
开发语言·python
deepdata_cn22 分钟前
Seedance 2.5如何敲开工厂车间的门
人工智能