我想使用sklearn.pipeline
而不是imblearn.pipeline
来整合`RandomUnderSampler()`。我的原始数据需要缺失值填补和缩放。这里我使用乳腺癌数据作为一个示例。然而,它给我返回了以下错误信息。我很感激您的建议。感谢您的时间!
from numpy.random import seedseed(12)from sklearn.datasets import load_breast_cancerimport timefrom sklearn.metrics import make_scorerfrom imblearn.metrics import geometric_mean_scorefrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import cross_validatefrom sklearn.pipeline import Pipelinefrom sklearn.impute import SimpleImputerfrom sklearn.preprocessing import MaxAbsScalerfrom imblearn.under_sampling import RandomUnderSamplergmean = make_scorer(geometric_mean_score, greater_is_better=True)X, y = load_breast_cancer(return_X_y=True)start_time1 = time.time()scoring = {'G-mean': gmean}LR_pipe = Pipeline([("impute", SimpleImputer(strategy='constant',fill_value= 0)),("scale", MaxAbsScaler()),("rus", RandomUnderSampler()),("LR", LogisticRegression(solver='lbfgs', random_state=0, class_weight='balanced', max_iter=100000))])LRscores = cross_validate(LR_pipe,X, y, cv=5,scoring=scoring)end_time1 = time.time()print ("Computational time in seconds = " +str(end_time1 - start_time1) )sorted(LRscores.keys())LR_Gmean = LRscores['test_G-mean'].mean()print("G-mean: %f" % (LR_Gmean))
错误信息:
TypeError: All intermediate steps should be transformers and implement fit and transform or be the string 'passthrough' 'RandomUnderSampler()' (type <class 'imblearn.under_sampling._prototype_selection._random_under_sampler.RandomUnderSampler'>) doesn't
回答:
我们应该从imblearn.pipeline
而不是sklearn.pipeline
导入make_pipeline
:来自sklearn的make_pipeline
需要转换器实现fit
和transform
方法。来自sklearn.pipeline
的Pipeline
导入与来自imblearn.pipeline
的Pipeline
导入发生了冲突!