make_classification
是 sklearn.datasets
模块中的一个函数,用于生成一个用于分类任务的虚拟数据集。它允许你生成具有指定特征、类别和噪声等属性的人工数据集,通常用于测试和演示机器学习算法。
语法
python
from sklearn.datasets import make_classification
make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2,
n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01,
class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True,
random_state=None)
参数说明
- n_samples : 样本数量,默认值是
100
。决定数据集中的样本数。 - n_features : 特征数量,默认值是
20
。生成的特征的总数。 - n_informative : 有信息的特征数量,默认值是
2
。这些特征对目标变量有实际影响。 - n_redundant : 冗余特征的数量,默认值是
2
。这些特征是从现有的有信息特征中线性组合而来,不提供额外的有用信息。 - n_classes : 类别数,默认值是
2
。目标变量的类别数量。 - n_clusters_per_class : 每个类别中的簇数,默认值是
2
。用于定义类别的分布。 - weights : 每个类的样本权重,默认值是
None
。可以用来设置每个类别的样本比例。 - flip_y : 标签的随机噪声比例,默认值是
0.01
。可以用来模拟标签中的噪声。 - class_sep : 类别之间的分隔度,默认值是
1.0
。较大的值意味着类别之间更容易分开,较小的值会导致类别重叠。 - hypercube : 是否生成超立方体形状的特征空间,默认值是
True
。 - shift : 对生成的特征进行平移,默认值是
0.0
。 - scale : 对生成的特征进行缩放,默认值是
1.0
。 - shuffle : 是否打乱样本顺序,默认值是
True
。 - random_state: 随机数生成器的种子,用于控制结果的可重复性。
返回值
返回一个元组 (X, y)
,其中:
- X 是生成的特征矩阵,形状为
(n_samples, n_features)
。 - y 是目标变量的标签数组,形状为
(n_samples,)
。
示例
1. 基本示例
生成一个包含 100 个样本、2 个特征、2 个类别的简单分类数据集:
python
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=2, n_classes=2, random_state=42)
print(X.shape) # 输出 (100, 2)
print(y.shape) # 输出 (100,)
2. 更多控制
生成 1000 个样本,20 个特征,其中 5 个是有信息的,3 个是冗余的,类别之间有噪声:
python
X, y = make_classification(n_samples=1000, n_features=20, n_informative=5,
n_redundant=3, n_classes=3, flip_y=0.05, random_state=42)
print(X.shape) # 输出 (1000, 20)
print(y.shape) # 输出 (1000,)
3. 自定义类别分布
自定义类别的样本分布(例如,使类别 0 和类别 1 更为不平衡):
python
X, y = make_classification(n_samples=1000, n_features=10, n_classes=2,
weights=[0.9, 0.1], random_state=42)
print(y[:20]) # 输出样本标签,类别不平衡
应用场景
- 测试和验证模型:生成用于分类任务的模拟数据,帮助评估不同分类算法的效果。
- 教学和演示:用于机器学习教程和课堂教学,展示如何处理不同的分类问题。
- 算法调试 :当你需要一个已知的、有控制特征的数据集来调试或调整机器学习模型时,
make_classification
是一个很好的工具。
通过 make_classification
,可以快速生成多样的人工数据集,以适应不同的机器学习实验。