【发布时间】: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)
【问题讨论】:
标签: python pandas pipeline one-hot-encoding