【问题标题】:RandomOverSampler doesn't seem to accept log transform as my y target variableRandomOverSampler 似乎不接受对数变换作为我的 y 目标变量
【发布时间】:2021-08-07 09:49:12
【问题描述】:

我正在尝试对一个小数据集进行随机过采样以进行线性回归。然而,scikit 学习采样 API 似乎不适用于浮点值作为其目标变量。有没有办法解决这个问题?

这是我的 y_train 值的样本,它们是对数转换的。

3.688879 3.828641 3.401197 3.091042 4.624973

from imblearn.over_sampling import RandomOverSampler
X_over, y_over = RandomOverSampler(random_state=42).fit_sample(X_train,y_train)
--------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-53-036424abd2bd> in <module>
      1 from imblearn.over_sampling import RandomOverSampler

~\Anaconda3\lib\site-packages\imblearn\base.py in fit_resample(self, X, y)
     73             The corresponding label of `X_resampled`.
     74         """
---> 75         check_classification_targets(y)
     76         arrays_transformer = ArraysTransformer(X, y)
     77         X, y, binarize_y = self._check_X_y(X, y)

~\Anaconda3\lib\site-packages\sklearn\utils\multiclass.py in check_classification_targets(y)
    170     if y_type not in ['binary', 'multiclass', 'multiclass-multioutput',
    171                       'multilabel-indicator', 'multilabel-sequences']:
--> 172         raise ValueError("Unknown label type: %r" % y_type)
    173 
    174 

ValueError: Unknown label type: 'continuous'

【问题讨论】:

  • 为什么要对连续目标重新采样?看起来您手头有一个回归问题,因为您想要执行线性回归。然而,重采样策略适用于类别分布不平衡的分类问题。这就是为什么RandomOverSampler 不接受float 作为目标类型的原因。毕竟重新采样并不意味着回归问题。
  • 您好,谢谢。如果我有一个用于线性回归问题的小数据集,我应该怎么做?
  • 快速搜索将我带到这个article。 reg_resampler 包在您的方法中可能很有用。将在示例中使用该包留下答案。

标签: python scikit-learn linear-regression logarithm oversampling


【解决方案1】:

重采样策略不适用于回归问题。因此,RandomOverSampler 将不接受 float 类型的目标。不过,有一些方法可以对具有连续目标的数据进行重新采样。一个例子是reg_resample,可以像下面这样使用:

from imblearn.over_sampling import RandomOverSampler
from sklearn.datasets import make_regression
from reg_resampler import resampler
import numpy as np


# Create some dummy data for demonstration
X, y = make_regression(n_features=10)
df = np.append(X, y.reshape(100, 1), axis=1)

# Initialize the resampler object and generate pseudo-classes
rs = resampler()
y_classes = rs.fit(df, target=10)

# Now resample
X_res, y_res = rs.resample(
    sampler_obj=RandomOverSampler(random_state=27),
    trainX=df,
    trainY=y_classes
)

resampler 对象将根据您的目标值生成伪类,然后使用 imblearn 包中的经典重采样对象重新采样您的数据。请注意,您传递给resampler 对象的数据应包含所有数据,包括目标。

【讨论】:

  • 嗨,由于它是一种重采样技术,这是否也会改变原始数据点?
  • 重采样永远不会改变原始数据点。如果您对此有任何疑虑,可以使用一个小数据集进行验证并检查结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 2015-12-09
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多