请不要过于苛刻,我正在转行进入数据科学领域,没有计算机科学或编程背景 - 所以我可能在做某些极其愚蠢的事情。我已经研究了几个小时,但没有成功。
目标:使用OrdinalEncoder运行Pipeline。
问题:使用OrdinalEncoder调用时代码无法运行,而不使用OrdinalEncoder可以运行。就我所知,我可以传递两个参数,即categories和dtype。 两者都没有帮助。
我正在向模型传递公共糖尿病数据集。这是问题吗?换句话说,在构建模型后,将高基数特征传递给OrdinalEncoder是否会导致训练/测试数据之间出现问题,例如测试分裂具有训练集没有的值?
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OrdinalEncoder
from sklearn.ensemble import RandomForestClassifier
pipe = Pipeline([
('imputer', SimpleImputer()),
('ordinal_encoder', OrdinalEncoder()),
('classifier', RandomForestClassifier(criterion='gini', n_estimators=100))])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Construct model
model = pipe.fit(X_train, y_train)
# Show results
print("Hold-out AUC score: %.3f" %roc_auc_score(model.predict_proba(X_test),y_test))
这里是我遇到的错误信息:
ValueError: Found unknown categories [17.0] in column 0 during transform
我做错了什么?
设置:
The scikit-learn version is 0.20.2.
3.7.2 (v3.7.2:9a3ffc0492, Dec 24 2018, 02:44:43)
[Clang 6.0 (clang-600.0.57)]
sys.version_info(major=3, minor=7, micro=2, releaselevel='final', serial=0)
unknown_values
中使用-1
而不是np.nan
。 - Ryan