gpt4 book ai didi

python - 如何使用 scikit learn 保存一个热编码模型并预测新的编码数据?

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:13 24 4
gpt4 key购买 nike

我的数据集包含 3 个分类特征,我使用一种热编码将其更改为二进制格式,一切正常。但是当我想保存经过训练的模型并预测新的原始数据时,输入的编码没有按我预期的那样进行编码并导致错误。

combined_df_raw2= pd.concat([train_x_raw,unknown_test_df])
combined_df2 = pd.get_dummies(combined_df_raw2, columns=nominal_cols,
drop_first=True)

encoded_unknown_df = combined_df2[len(train_x_raw):]

classifier = DecisionTreeClassifier(random_state=17)
classifier.fit(train_x_raw, train_Y)

pred_y = classifier.predict(encoded_unknown_df)

#here I use joblib to save my model and load it again
joblib.dump(classifier, 'savedmodel')
imported_model = joblib.load('savedmodel')

#here I input unencoded raw data for predict and got error that cannot
convert 'tcp' to float, means that it is not encoded

imported_model.predict([0,'tcp','vmnet','REJ',0,0,0,23])

ValueError:无法将字符串转换为 float :'tcp'

最佳答案

模型是在对分类变量进行编码之后进行训练的,因此,必须在对各个变量应用“onehot 编码”之后给出输入。示例:其中一列标题为“国家/地区”,并且您在整个数据集中具有三个不同的值。 ['India', Israel', 'France'],现在你已经在国家列上应用了 OneHotEncoding(可能在 LabelEncoder 之后),然后你训练你的模型,保存它做你想做的任何其他事情!

现在的问题是,当您直接提供输入而不将其更改为训练模型所用的格式时,会出现输入错误。因此,我们总是希望在将输入提供给模型之前对其进行预处理。据我所知,最常见的方法是使用 Pipeline。

steps = [('scaler', StandardScaler()), ('ohe', OneHotEncoder()),('SVM', 
DecisionTreeClassifier())]
from sklearn.pipeline import Pipeline
pipeline = Pipeline(steps) # You need to save this pipeline via joblib
pipe.fit(X_train, y_train)

如果您不想使用流水线,您可以在特定列上使用 OneHotEncode,然后使用预测!

关于python - 如何使用 scikit learn 保存一个热编码模型并预测新的编码数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56251731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com