python-3.x - Pipeline OrdinalEncoder ValueError 发现未知类别
问题描述
请放轻松。我正在将职业转向数据科学,并且没有 CS 或编程背景——所以我可能会做一些非常愚蠢的事情。我研究了几个小时没有成功。
目标:让 Pipeline 与 OrdinalEncoder 一起运行。
问题:代码无法通过 OrdinalEncoder 调用运行。它确实在没有 OrdinalEncoder 的情况下运行。据我所知,我可以传递两个参数,即categories和dtype。都没有帮助。
我正在将公共糖尿病数据集传递给模型。这是问题吗?IOW,将高基数特征传递给 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)
解决方案
您的问题是模型在测试数据中遇到了一个在训练数据中没有看到的值。这可以。您只需将“handle_unknown”参数添加到您的编码器。
您应该fit
对训练数据(但不是测试数据)进行编码器和缩放器,然后将它们用于transform
训练和测试数据。因此,您必须计划测试数据中出现意外值的可能性。
推荐阅读
- node.js - 在 Node.JS 中使用 AWS.config.update 设置凭证
- python - Django:注释过滤的反向关系
- java - Jpype导入在jar中找不到模块
- python - 基于布尔 np.array 有效地对 np.matrix 进行子集,但仅在某些阈值之前
- python - 本地颁发者证书错误在 docker 中唯一地使用 python
- javascript - res.json 不是函数(我将 reactjs 连接到 API)
- wordpress - 如何在 wordpress 媒体库中显示自动生成的 PDF 缩略图?
- sqlite - 如何使用 ESP32 SQLite3 执行 SQL 计数?
- python - python或powershell的问题
- javascript - 当我更改路线时,Laravel ajax 搜索不起作用