微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何生成二进制分类数据集并控制 2 个类之间的重叠?

如何解决如何生成二进制分类数据集并控制 2 个类之间的重叠?

是否可以在使用 sklearn.datasets.make_classification 生成数据集时控制重叠?

我想在两个类之间传递重叠百分比,它会根据给定的百分比重叠类。

详细要求是: 生成一个 n 类分类数据集(高斯方式),我们可以通过添加协方差、重叠百分比和对角线、直线、水平线等绘图形状来控制它

Shape of plot

解决方法

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,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

two gaussian blobs with scale 0.5,they are nowhere close to overlapping

... 这是一个示例,其中 SCALE = 1.3:

two gaussian blobs with scale 1.3,they appear to overlap slightly

rng.normal 生成的样本通常与我们位于 (5,5)(10,10) 的均值相差两个标准差。

更改 SCALE 参数,知道您的均值之间的距离约为 7.071,并且知道您的数据应该落在的预期半径---应该让您估计您希望在您的数据之间有多少重叠类。

完成此操作后,您可以将您的发现重新转换为 sklearn.datasets.make_blobs

的参数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。