python - 不平衡学习的 FunctionSampler 抛出 ValueError
问题描述
我想使用该类FunctionSampler
来imblearn
创建我自己的自定义类来重新采样我的数据集。
我有一个包含每个主题的路径的一维特征系列和一个包含每个主题的标签的标签系列。两者都来自一个pd.DataFrame
. 我知道我必须先重塑特征数组,因为它是一维的。
当我使用该类时RandomUnderSampler
,一切正常,但是,如果我首先将功能和标签都传递给该fit_resample
方法 FunctionSampler
,然后创建一个实例,RandomUnderSampler
然后调用fit_resample
该类,则会收到以下错误:
ValueError:无法将字符串转换为浮点数:'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:无法将字符串转换为浮点数:'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))
推荐阅读
- python - django-filter 和 ForeignKeys
- javascript - 可重复使用的角度组件具有与前一个相同的数据 - 输入数据列表
- svg - 宽度和高度在 SVG 中不起作用
- python - 海龟半曲线循环
- javascript - Discord js通过broadcastEval发送消息
- html - CSS - 使用绝对位置设置子宽度大于父宽度
- javascript - Flot Chart API - 图表外的图例
- react-native - 找不到模块:无法解析 'node_modules\react-native\Libraries\Animated\src\components\AnimatedImage.js' 中的 '../../../Image/Image'
- python - 导入类和使用库
- sql - Postgres SQL - 从 in 子句中选择至少一行