Scikit learn Sklearn';s SimpleImputer没有';你不能在管道里工作吗?
我有一个pandas数据框,在特定列中有一些NaN值:Scikit learn Sklearn';s SimpleImputer没有';你不能在管道里工作吗?,scikit-learn,pipeline,sklearn-pandas,Scikit Learn,Pipeline,Sklearn Pandas,我有一个pandas数据框,在特定列中有一些NaN值: 1291 NaN 1841 NaN 2049 NaN Name: some column, dtype: float64 为了解决这个问题,我制定了以下计划: from sklearn.preprocessing import StandardScaler from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline scaler
1291 NaN
1841 NaN
2049 NaN
Name: some column, dtype: float64
为了解决这个问题,我制定了以下计划:
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.pipeline import Pipeline
scaler = StandardScaler(with_mean = True)
imputer = SimpleImputer(strategy = 'median')
logistic = LogisticRegression()
pipe = Pipeline([('imputer', imputer),
('scaler', scaler),
('logistic', logistic)])
现在,当我将此管道传递给一个随机搜索CV
时,我得到以下错误:
ValueError:输入包含NaN、无穷大或对数据类型('float64')太大的值。
它实际上比这要长一点——如果必要的话,我可以在编辑中发布整个错误。无论如何,我很确定这个专栏是唯一一个包含NAN的专栏。此外,如果我在管道中从
SimpleImputer
切换到(现在已弃用的)Imputer
,管道在我的RandomizedSearchCV
中运行良好。我查看了文档,但似乎SimpleImputer
的行为(几乎)与Imputer
完全相同。行为上的区别是什么?如何在我的管道中使用插补器而不使用弃用的插补器?我也有同样的问题,但这解决了它:
imputer = SimpleImputer(strategy = 'median', fill_value = 0)
make_管道中的SimpleImputer
preprocess_pipeline = make_pipeline(
FeatureUnion(transformer_list=[
('Handle numeric columns', make_pipeline(
ColumnSelector(columns=['Amount']),
SimpleImputer(strategy='constant', fill_value=0),
StandardScaler()
)),
('Handle categorical data', make_pipeline(
ColumnSelector(columns=['Type', 'Name', 'Changes']),
SimpleImputer(strategy='constant', missing_values=' ', fill_value='missing_value'),
OneHotEncoder(sparse=False)
))
])
)
simplemputer在管道中
('features', FeatureUnion ([
('Cat Columns', Pipeline([
('Category Extractor', TypeSelector(np.number)),
('Impute Zero', SimpleImputer(strategy="constant", fill_value=0))
])),
('Numerics', Pipeline([
('Numeric Extractor', TypeSelector("category")),
('Impute Missing', SimpleImputer(strategy="constant", fill_value='missing'))
]))
]))
如果独立运行SimpleImputer
(不是从管道中运行),是否会出现相同的错误?当我传递-SimpleImputer(strategy='constant',fill_value=0)时,是否会发现相同的错误
Comment by@FrédérandOuweric:您是否检查了目标变量不包含NaN值?插补器只处理输入特征中缺少的值。我也有同样的问题。事实证明,我必须明确指定缺少的_值=无。实际上,我认为这是默认行为。