赞
踩
在无监督学习领域,我们面对的是未标记的数据集,目标是揭示其中隐藏的结构和模式。本文将重点探讨两种关键的无监督学习技术:聚类分析和降维方法。我们将深入理解K-means聚类算法及其实现,介绍DBSCAN等密度聚类方法,并通过PCA与t-SNE的实际应用,展示如何进行有效的数据降维与可视化。更多Python在人工智能中的使用方法,欢迎关注《Python人工智能实战》栏目!
K-means算法是一种基于距离的迭代聚类方法,其核心思想是将数据集划分为K个簇,使得每个数据点归属于与其最近均值(质心)对应的簇。算法流程如下:
下面是一个使用sklearn与numpy
库实现K-means聚类的示例代码:
- 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()
此代码将生成一个散点图,其中不同颜色的点代表不同的簇,红色的点代表每个簇的中心。通过图可以直观地看到数据被划分成了两个簇。
关于Numpy的使用方法,可以看往期文章:
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它不需要预先指定簇的数量,而是通过发现数据中的高密度区域来识别簇。DBSCAN有两个关键参数:
算法步骤如下:
使用sklearn
库实现DBSCAN:
- 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
表示噪声点。PCA是一种线性降维方法,通过最大化方差保留来找到数据的主要方向(主成分),将原始高维数据投影到这些主成分构成的低维空间中。
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的聚类结果,可以帮助观察聚类结构是否在低维空间中得以保留和清晰展现。
t-SNE是一种非线性降维方法,特别擅长于揭示高维数据的局部结构和流形,常用于数据可视化。其核心思想是将高维空间中的相似性概率转化为低维空间中的相似性概率,通过优化KL散度来调整低维表示。
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往往能揭示出更复杂的数据结构和簇间分离,有助于直观理解数据的内在模式。
总结而言,K-means、DBSCAN等聚类算法为无监督学习提供了划分数据结构的方法,而PCA和t-SNE等降维技术则助力我们以更低维度可视化和理解高维数据的聚类特性。通过结合这些技术,我们可以有效地探索无标签数据集中的隐藏信息,为后续的数据分析、模式识别乃至决策制定提供有力支持。更多Python在人工智能中的使用方法,欢迎关注《Python人工智能实战》栏目!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。