make_blobs函数
make_blobs
是 scikit-learn
库中用于生成聚类(或分类)数据集的函数。它通常用于生成多个高斯分布的簇状数据,以便进行分类或聚类算法的测试和验证。make_blobs
非常灵活,可以控制簇的数量、样本数量、每个簇的标准差、中心点等参数。
函数原型
sklearn.datasets.make_blobs(n_samples=100, n_features=2, centers=None, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None)
参数说明
-
n_samples:生成的样本数量(默认 100)。可以是整数(总样本数),也可以是列表(每个簇的样本数)。
- 例如:
n_samples=300
表示生成 300 个样本,或者n_samples=[100, 200, 50]
分别为每个簇生成的样本数量。
- 例如:
-
n_features:每个样本的特征数(默认 2)。表示每个生成的样本有多少个特征(即维度)。
- 例如:
n_features=2
生成二维数据,可以在平面上画出;n_features=3
生成三维数据。
- 例如:
-
centers:簇的数量,或者簇的中心坐标。可以是整数,表示生成多少个簇,或者是一个数组,指定每个簇的中心点。
- 例如:
centers=3
会随机生成 3 个簇;centers=[[0,0], [1,1], [2,2]]
会在指定坐标上生成簇。
- 例如:
-
cluster_std:每个簇的标准差(默认 1.0),可以是单个浮点数(表示所有簇的标准差相同),也可以是列表,表示每个簇的标准差。
- 例如:
cluster_std=1.0
为所有簇生成的样本点离中心的标准差为 1.0;cluster_std=[1.0, 2.0, 0.5]
表示每个簇的离散程度不同。
- 例如:
-
center_box:中心点生成的范围(默认 (-10.0, 10.0))。用于生成随机簇中心的坐标范围。可以通过调整此参数来控制簇中心的范围。
-
shuffle:是否打乱生成的数据(默认
True
)。在生成数据后,是否对数据进行随机排序。 -
random_state:随机数种子,用于确保每次生成的簇相同。可以是整数(指定种子),
None
(不设置种子,每次生成不同),或np.random.RandomState
对象。
返回值
- X:生成的样本数据(特征矩阵),形状为
(n_samples, n_features)
。 - y:生成的样本标签(簇标签),形状为
(n_samples,)
。
示例
1. 生成简单的 2D 数据集
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成数据集
X, y = make_blobs(n_samples=300, centers=3, n_features=2, random_state=42)# 绘制生成的数据
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
plt.show()
在这个示例中,make_blobs
生成了 300 个二维样本,分为 3 个簇。然后我们使用 Matplotlib 绘制数据集,不同簇以不同颜色显示。
2. 指定簇的中心和标准差
X, y = make_blobs(n_samples=300, centers=[[1, 1], [5, 5], [9, 9]], cluster_std=[0.5, 1.0, 2.0], random_state=42)plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
plt.show()
在这个例子中,我们手动指定了 3 个簇的中心,分别为 [1, 1]
、[5, 5]
和 [9, 9]
,同时指定了每个簇的标准差为 0.5、1.0 和 2.0。
3. 生成高维数据
X, y = make_blobs(n_samples=500, centers=4, n_features=3, random_state=42)print(X.shape) # (500, 3)
在这个例子中,生成了 500 个样本,每个样本有 3 个特征(即三维数据)。生成的数据可以用于三维可视化或其他高维数据处理。
4. 用于分类和聚类
make_blobs
常常用于生成聚类或分类问题的数据集,尤其适合在初学者的实验和测试中使用。例如,可以用来测试 K-Means 算法、支持向量机(SVM)分类器等。
总结
make_blobs
是一个非常方便的工具,用于生成模拟的簇状数据。- 它允许我们控制簇的数量、中心、样本数量、标准差等,灵活生成各种聚类数据。
- 在机器学习实验中,它常常用于测试聚类或分类算法。