繁体   English   中英

不平衡学习的FunctionSampler引发ValueError

[英]Imbalanced-Learn's FunctionSampler throws ValueError

我想使用来自imblearn FunctionSampler类来创建自己的自定义类,以对数据集进行重采样。

我有一个一维要素系列,其中包含每个主题的路径,以及一个标签系列,其中包含每个主题的标签。 两者都来自pd.DataFrame 我知道我必须首先重塑特征数组,因为它是一维的。

当我使用RandomUnderSamplerRandomUnderSampler一切正常,但是,如果我先将功能和标签都传递给FunctionSamplerfit_resample方法,然后再创建RandomUnderSampler的实例,然后在此类上调用fit_resample收到以下错误:

ValueError:无法将字符串转换为float:'path_1'

这是产生错误的最小示例:

import pandas as pd
from imblearn.under_sampling import RandomUnderSampler
from imblearn import FunctionSampler

# create one dimensional feature and label arrays X and y
# X has to be converted to numpy array and then reshaped. 
X = pd.Series(['path_1','path_2','path_3'])
X = X.values.reshape(-1,1)
y = pd.Series([1,0,0])

第一种方法(有效)

rus = RandomUnderSampler()
X_res, y_res = rus.fit_resample(X,y)

第二种方法(无效)

def resample(X, y):
    return RandomUnderSampler().fit_resample(X, y)

sampler = FunctionSampler(func=resample)
X_res, y_res = sampler.fit_resample(X, y)

有谁知道这里出了什么问题? 这似乎为fit_resample的方法FunctionSampler不等于fit_resample的方法RandomUnderSampler ...

您对FunctionSampler实现是正确的。 问题出在您的数据集上。

RandomUnderSampler似乎也适用于文本数据。 没有使用check_X_y检查。

但是FunctionSampler()具有此检查,请参见此处

from sklearn.utils import check_X_y

X = pd.Series(['path_1','path_2','path_2'])
X = X.values.reshape(-1,1)
y = pd.Series([1,0,0])

check_X_y(X, y)

这将引发错误

ValueError:无法将字符串转换为float:'path_1'

以下示例将起作用!

X = pd.Series(['1','2','2'])
X = X.values.reshape(-1,1)
y = pd.Series([1,0,0])

def resample(X, y):
    return RandomUnderSampler().fit_resample(X, y)

sampler = FunctionSampler(func=resample)
X_res, y_res = sampler.fit_resample(X, y)

X_res, y_res 
# (array([[2.],
#        [1.]]), array([0, 1], dtype=int64))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM