You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sklearn.datasets.make_classification生成指定范围的分类合成数据

解决make_classification生成数据落在指定[80,155]区间的问题

嘿,我懂你的困扰——make_classification的scale参数很容易让人误解,它并不是直接控制特征的数值范围,而是用来调整每个特征的标准差,所以不管怎么搭配这个参数和class_sep,都没法直接让数据落到你想要的[80,155]区间里。不过别担心,我们可以用后处理缩放的方式解决这个问题,既能保留数据的分类特性,又能把数值精准映射到目标区间。

核心思路:最小-最大缩放(MinMaxScaler)

先让make_classification生成符合你分类需求的数据,再用sklearn.preprocessing.MinMaxScaler把所有特征线性缩放到[80,155]区间。这种方式不会破坏数据原本的聚类结构和可分性,只是单纯调整数值范围。

完整代码示例

import pandas as pd
from sklearn.datasets import make_classification
from sklearn.preprocessing import MinMaxScaler

# 你的类别权重参数
weight = [0.2, 0.37, 0.21, 0.04, 0.11, 0.05, 0.02]

# 先生成原始分类数据(这里保留你原来的核心参数,scale用默认值1即可)
X, y = make_classification(
    n_samples=100, 
    n_features=3, 
    n_informative=3, 
    n_redundant=0, 
    n_repeated=0, 
    n_classes=7, 
    n_clusters_per_class=1, 
    weights=weight, 
    class_sep=1,
    shuffle=True, 
    random_state=41
)

# 初始化缩放器,设置目标区间为[80,155]
scaler = MinMaxScaler(feature_range=(80, 155))
# 拟合并转换数据
X_scaled = scaler.fit_transform(X)

# 查看缩放后的统计结果
df_scaled = pd.DataFrame(X_scaled)
print(df_scaled.describe())

为什么这个方法可靠?

  • MinMaxScaler会把每个特征的最小值映射到80,最大值映射到155,中间数值按线性比例缩放,完美匹配你的区间要求。
  • 缩放操作是对每个特征独立进行的,不会改变不同特征间的相对关系,也不会破坏make_classification生成的聚类结构,完全不影响后续分类任务的性能。

运行代码后,你会看到df_scaled.describe()的输出里,所有特征的最小值接近80,最大值接近155,完全符合预期。

内容的提问来源于stack exchange,提问作者Rohit Swami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:23:31