无监督学习之聚类代码实战
上一节我们讲了无监督学习的分类,本章用sklearn库进行代码实战一下,实现聚类。
导入模块
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons# 样本生成器
from sklearn import metrics, cluster #评价方法,聚类库
准备数据
sklearn中的数据集主要分为四类:
- Toy datasets 玩具数据集。这种数据集一般采用sklearn.datasets.load_加载数据集
- Real world datasets(真实世界数据集)。这些数据集通常需要通过sklearn.datasets.fetch_函数从网络上下载,它们是近年来真实收集的数据,适用于更复杂的机器学习任务。例如,新闻组(20 Newsgroups)数据集,这是一个用于文本分类的大型数据集。
- Generated datasets(生成数据集)。sklearn.datasets 还提供了一系列函数来生成人工数据集,如make_classification、make_regression等。这些函数可以根据用户指定的参数生成用于分类、回归等任务的数据集。
- 其他。还提供了一些从OpenML下载数据的方法、从外部加载数据集等等
本次选用了make_moons生成数据集,该接口参数说明如下:
n_samples:
如果为int,则生成的总点数。 如果是两个元素的元组,则两个月亮中每个月亮的点数。
shuffle bool, optional (default=True)
是否shuffle样本。
noise double or None (default=None)
加到数据中的高斯噪声的标准偏差。
random_state int, RandomState instance, default=None
确定用于数据集改组和噪声的随机数生成。 为多个函数调用传递可重复输出的int值。
实现:
X, y_true = make_moons(200, noise=.05, random_state=0)
其中返回值X是样本数据,y_true是每个样本的类成员的整数标签(0或1)
使用kmeans聚类
在skearn中kmeans等算法来实现聚类已经是很简单的了,一个函数即可
# gmm = GaussianMixture(n_components=2)
# gmm = cluster.MeanShift()
gmm = cluster.KMeans(4)
# gmm = cluster.AgglomerativeClustering(2)
# gmm = cluster.AffinityPropagation()
# gmm = cluster.SpectralClustering(2,affinity="nearest_neighbors")
# gmm = cluster.DBSCAN()
模型训练&并获取结果
labels = gmm.fit_predict(X)
评估
使用轮廓系数等评估聚类模型的效果
print(metrics.silhouette_score(X, labels))
print(metrics.calinski_harabasz_score(X, labels))
print(metrics.davies_bouldin_score(X, labels))
可视化
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis');
plt.show()