如何使用 OneHotEncoder 和 Pipeline 进行新的预测?
Posted
技术标签:
【中文标题】如何使用 OneHotEncoder 和 Pipeline 进行新的预测?【英文标题】:How to use OneHotEncoder and Pipeline to make new predictions? 【发布时间】:2020-10-06 14:47:32 【问题描述】:我正在完成一个专注于 OneHotEncoder 的教程。我得到了编码特征背后的想法,但是我在使用带有管道的编码器进行新预测时遇到了一点问题。其中两个特征——“Sex”和“Embarked”——是分类的而不是数字的。当创建一个新的 numpy 数组来进行预测时,你是否使用初始值,比如“male”和“C”,或者说,“1”和“2”来进行新的预测?我收到以下错误:“ValueError:仅熊猫数据帧支持使用字符串指定列”,鉴于我使用的值是数字,这很奇怪。无论如何,我是否必须将管道安装到 X_new 才能做出新的预测?如果是这样,我该怎么做?
X_new = [[3, 1, 0]] OR X_new = [['3','male', 'C']]
pipe.predict(X_new)
完整代码:
import pandas as pd
import numpy as np
df = pd.read_csv("https://raw.githubusercontent.com/---/pandas-videos/master/data/titanic_train.csv")
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(solver='lbfgs')
from sklearn.model_selection import cross_val_score
cross_val_score(logreg, X, y, cv=5, scoring='accuracy').mean()
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse=False)
X = df.drop('Survived', axis='columns')
from sklearn.compose import make_column_transformer
column_trans = make_column_transformer(
(OneHotEncoder(), ['Sex', 'Embarked']),
remainder='passthrough')
column_trans.fit_transform(X)
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(column_trans, logreg)
cross_val_score(pipe, X, y, cv=5, scoring='accuracy').mean()
X_new = [[3, 1, 0]]
pipe.predict(X_new)
【问题讨论】:
【参考方案1】:当您应用 OneHotEncoder 时,您指定的分类列将根据分类列中唯一值的数量转换为多个整数列。
例如,性别列包含“男”和“女”,那么它将原来的列转换为“男”和“女”2列。它与 LabelEncoder 不同。
如果要应用管道、逻辑回归和 OneHotEncoder,可以使用管道来拟合训练数据。
pipe.fit(X,y)
然后您可以应用预测。这是一个示例,当我应用性别、年龄和上船这 3 个特征并将 OHE 应用于 Sex 和上船时。
X_new = [['female', 20, 'C']]
X_new_df = pd.DataFrame (X_new,columns=['Sex','Age','Embarked'])
pipe.predict(X_new_df)
但是,您在代码中使用的特征是除标注分类(“Survived”)之外的所有特征,即 11 个特征。输入的数量必须等于或大于拟合模型,而您只应用可能提示和错误的3列。
【讨论】:
以上是关于如何使用 OneHotEncoder 和 Pipeline 进行新的预测?的主要内容,如果未能解决你的问题,请参考以下文章
scikit-learn:如何使用管道组合 LabelEncoder 和 OneHotEncoder?
如何改进此代码以使用 OneHotEncoder? [复制]
如何在 pandas 系列列表中使用 OneHotEncoder?
如何在普通最小二乘回归图中使用 OneHotEncoder 输出