如何用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
相关产品推荐
相关产品推荐

