簡體   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