我正在研究一个专注于OneHotEncoder的教程。我有编码功能背后的想法,但在将编码器与管道结合使用以进行新的预测时遇到了一个小问题。 “性别”和“禁止”这两个特征是分类而非数字。在创建新的numpy数组进行预测时,您使用初始值(例如“ male”和“ C”)还是“ 1”和“ 2”来进行新的预测?我收到以下错误:“ ValueError:仅对pandas DataFrames支持使用字符串指定列”,这很奇怪,因为我使用的是数字值。无论如何,我是否必须适应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)
答案 0 :(得分:0)
应用OneHotEncoder时,您指定的分类列将根据分类列中唯一值的数量转换为多个整数列。
例如,性别列包含“男性”和“女性”,则它将原始列转换为“男性”和“女性”两列。与LabelEncoder有所不同。
如果要应用管道,逻辑回归和OneHotEncoder,则可以使用管道来拟合训练数据。
pipe.fit(X,y)
,然后您可以应用预测。这是一个示例,其中我应用了“性别”,“年龄”和“登船”这3个特征,并对“登船”和“登船”应用了OHE。
X_new = [['female', 20, 'C']]
X_new_df = pd.DataFrame (X_new,columns=['Sex','Age','Embarked'])
pipe.predict(X_new_df)
但是,您在代码中使用的功能是除标签类(“生存”)之外的所有功能,标签类是11个功能。输入的数量必须等于或大于拟合的模型,而您仅应用可能提示和错误的3列。