【scikit-learn】sklearn.datasets.make_classification() 函数:合成分类数据集生成工具

sklearn.datasets.make_classification()

make_classification()sklearn.datasets 提供的 合成分类数据集生成工具,用于 创建模拟的分类数据,适用于 机器学习模型测试、特征工程、算法研究


1. make_classification() 作用

  • 生成可控的分类数据集(指定特征数、类别数、冗余度等)。
  • 测试机器学习模型(如 KNNSVM随机森林)。
  • 研究特征选择、数据分布、类别不均衡问题

2. make_classification() 代码示例

(1) 生成二分类数据

from sklearn.datasets import make_classification
import matplotlib.pyplot as plt

# 生成数据(1000 个样本,2 个特征,2 个类别)
X, y = make_classification(n_samples=1000, n_features=2, n_classes=2, n_informative=2, n_redundant=0, random_state=42)

# 可视化数据
plt.scatter(X[:, 0], X[:, 1], c=y, cmap="coolwarm")
plt.title("合成二分类数据")
plt.show()

解释

  • n_samples=1000:生成 1000 个样本。
  • n_features=2:每个样本 2 个特征(便于可视化)。
  • n_classes=2:二分类任务(0/1)。
  • n_informative=22 个有效特征。
  • n_redundant=00 个冗余特征(完全依赖其他特征)。

(2) 生成多分类数据

X, y = make_classification(n_samples=500, n_features=3, n_classes=3, n_clusters_per_class=1, random_state=42)

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(projection="3d")
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap="viridis")
plt.title("合成多分类数据")
plt.show()

解释

  • n_classes=3:三分类任务。
  • n_clusters_per_class=1:每个类别只有 1 个簇(默认是 2)。

3. make_classification() 的参数

make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, n_repeated=0, 
                    n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, random_state=None)
参数说明
n_samples样本数(默认 100
n_features总特征数(默认 20
n_informative有效特征数(影响类别)
n_redundant冗余特征数(由有效特征线性组合生成)
n_repeated重复特征数(从其他特征复制)
n_classes类别数(默认 2,二分类)
n_clusters_per_class每个类别的簇数(默认 2
weights类别比例(如 weights=[0.1, 0.9]
flip_y随机噪声比例(默认 0.01,增加数据噪声)
class_sep类别间隔(值越大,类别越容易分开)
random_state随机种子,保证结果可复现

4. 生成类别不均衡数据

X, y = make_classification(n_samples=1000, n_classes=2, weights=[0.9, 0.1], random_state=42)

print("类别 0 样本数:", sum(y == 0))
print("类别 1 样本数:", sum(y == 1))

输出

类别 0 样本数: 900
类别 1 样本数: 100

解释

  • weights=[0.9, 0.1] 生成 类别不均衡数据90% 样本属于 类别 0

5. make_classification() vs. 其他数据集生成函数

方法适用情况作用
make_classification()分类任务生成 线性可分或复杂分类数据
make_regression()回归任务生成回归数据
make_blobs()聚类任务生成高斯分布的聚类数据
make_moons()非线性分类生成新月形数据
make_circles()非线性分类生成环形数据

示例:

from sklearn.datasets import make_moons

X, y = make_moons(n_samples=500, noise=0.1, random_state=42)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap="coolwarm")
plt.title("新月形数据")
plt.show()

解释

  • make_moons() 生成非线性分类数据,适用于 SVM、神经网络测试。

6. 适用场景

  • 模拟分类任务(测试分类算法)。
  • 研究特征工程(观察冗余特征、有效特征的影响)。
  • 生成类别不均衡数据(验证 SMOTEADASYN 等方法)。

7. 结论

  • make_classification() 用于生成合成分类数据,支持 调整特征数量、类别比例、数据噪声,适用于 机器学习研究和算法测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值