求助:解决'Pipeline'对象无'fit_resample'属性的AttributeError问题
问题描述
我参考了一篇关于不平衡分类与管道的文档,尝试在数据集上实现以下代码:
import numpy as np import pandas as pd from collections import Counter from sklearn.preprocessing import LabelEncoder,OneHotEncoder from imblearn.over_sampling import SMOTE from imblearn.under_sampling import RandomUnderSampler from sklearn.pipeline import Pipeline from sklearn.naive_bayes import GaussianNB data =pd.read_csv('aug_train.csv') data.drop('id',axis=1,inplace=True) print(data.info()) print(data.select_dtypes(include='object').columns.tolist()) data[data.select_dtypes(include='object').columns.tolist()]=data[data.select_dtypes(include='object').columns.tolist()].apply(LabelEncoder().fit_transform) print(data.head()) #print(data['Response'].value_counts()) mymodel =GaussianNB() y =data['Response'].values print(Counter(y)) X =data.drop('Response',axis=1).values #X,y =SMOTE().fit_resample(X,y) #mymodel.fit(X,y) #print(mymodel.score(X,y)) #print(Counter(y)) over = SMOTE(sampling_strategy=0.1) under = RandomUnderSampler(sampling_strategy=0.5) steps = [('o', over), ('u', under)] pipeline = Pipeline(steps=steps) # transform the dataset X, y = pipeline.fit_sample(X, y)
执行上述代码中X, y = pipeline.fit_sample(X, y)行时,出现错误:AttributeError: 'Pipeline' object has no attribute 'fit_resample',请问该如何修复此问题?
修复方案
问题根源有两个:
- 导入了错误的Pipeline类:sklearn原生的
Pipeline不支持重采样操作的fit_resample方法,必须使用imblearn库提供的专用Pipeline。 - 方法名拼写错误:imblearn的Pipeline对应的正确方法是
fit_resample,而非代码中的fit_sample。
具体修复步骤:
- 替换Pipeline的导入语句:
# 原导入 # from sklearn.pipeline import Pipeline # 替换为 from imblearn.pipeline import Pipeline - 修正方法调用:
# 原代码 # X, y = pipeline.fit_sample(X, y) # 修正为 X, y = pipeline.fit_resample(X, y)
修复后的完整关键代码片段:
from imblearn.pipeline import Pipeline over = SMOTE(sampling_strategy=0.1) under = RandomUnderSampler(sampling_strategy=0.5) steps = [('o', over), ('u', under)] pipeline = Pipeline(steps=steps) # 转换数据集 X, y = pipeline.fit_resample(X, y)
内容的提问来源于stack exchange,提问作者dato datuashvili
相关产品推荐
相关产品推荐

