【发布时间】:2021-05-26 06:01:13
【问题描述】:
是否可以在使用 sklearn.datasets.make_classification 生成数据集时控制重叠?
我想在 2 个类之间传递重叠百分比,它会根据给定的百分比重叠类。
具体要求是: 生成一个 n 类分类数据集(高斯方式),我们可以通过添加协方差、重叠百分比以及对角线、直线、水平线等绘图形状来控制它
【问题讨论】:
标签: python machine-learning classification
是否可以在使用 sklearn.datasets.make_classification 生成数据集时控制重叠?
我想在 2 个类之间传递重叠百分比,它会根据给定的百分比重叠类。
具体要求是: 生成一个 n 类分类数据集(高斯方式),我们可以通过添加协方差、重叠百分比以及对角线、直线、水平线等绘图形状来控制它
【问题讨论】:
标签: python machine-learning classification
make_classification 从 n 维超立方体中抽取样本。在特定情况下,您可以通过调整class_sep 参数来实现“根据给定百分比重叠类”之类的东西,但我认为它一般不会起作用。
一种解决方案可能是通过从具有已知均值和方差的高斯分布中采样来创建二进制分类数据集。这是一个简短的演示:
import numpy as np
from numpy.random import default_rng
import matplotlib.pyplot as plt
rng = default_rng()
N_POINTS = 10000
SCALE = 1.3
train_data = np.c_[
np.r_[rng.normal(5, SCALE, (N_POINTS, 2)), rng.normal(10, SCALE, (N_POINTS, 2))],
np.r_[np.zeros((N_POINTS, 1)), np.ones((N_POINTS, 1))],
]
# Plotting
fig1, ax = plt.subplots()
ax.scatter(train_data[:, 0], train_data[:, 1], c=train_data[:, 2])
ax.set_box_aspect(1)
plt.show()
这是一个例子,SCALE = 0.5:
...这是一个例子,SCALE = 1.3:
rng.normal 生成的样本通常应与我们在(5, 5) 和(10, 10) 找到的平均值相差两个标准差。
更改SCALE 参数,知道您的平均值之间的距离约为 7.071,并且知道您的数据应该落在哪里的预期半径——应该让您估计您期望在您的类之间有多少重叠。
完成此操作后,您可以将您的发现转换回sklearn.datasets.make_blobs 的参数
【讨论】:
make_imbalance。