1. 生成不同类型的数据集
导入必要的库:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
代码中导入了NumPy用于数组操作,matplotlib.pyplot用于绘图,KMeans用于聚类算法,
make_blobs用于生成模拟数据集。
plt.figure(figsize=(12, 12))
设置了绘图的图形大小为12x12英寸。
n_samples = 1500
random_state = 170
X, y = make_blobs(n_samples=n_samples, random_state=random_state)
使用make_blobs函数生成一个包含1500个样本的模拟数据集,其中random_state参数用于控制数
据的随机性。X是包含样本特征的数组,y是对应的样本标签。
y_pred = KMeans(n_clusters=2, random_state=random_state).fit_predict(X)
plt.subplot(221)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.title("Incorrect Number of Blobs")
使用KMeans算法将数据集X聚类为2个簇,并将聚类结果可视化在子图中。subplot(221)表示将整
个图形窗口分为2x2个子图,当前操作的是第1个子图。
transformation = [[0.60834549, -0.63667341], [-0.40887718, 0.85253229]]
X_aniso = np.dot(X, transformation)
y_pred = KMeans(n_clusters=3, random_state=random_state).fit_predict(X_aniso)
plt.subplot(222)
plt.scatter(X_aniso[:, 0], X_aniso[:, 1], c=y_pred)
plt.title("Anisotropicly Distributed Blobs")
通过线性变换将原始数据集X变形为X_aniso,然后再使用KMeans算法将变形后的数据集聚类为3
个簇,并将结果可视化在第2个子图中。
X_varied, y_varied = make_blobs(n_samples=n_samples,
cluster_std=[1.0, 2.5, 0.5],
random_state=random_state)
y_pred = KMeans(n_clusters=3, random_state=random_state).fit_predict(X_varied)
plt.subplot(223)
plt.scatter(X_varied[:, 0], X_varied[:, 1], c=y_pred)
plt.title("Unequal Variance")
使用make_blobs函数生成一个方差不同的数据集X_varied,并使用KMeans算法将数据集聚类为3
个簇,并将结果可视化在第3个子图中。