pandas - sklearn 确保按预期排序的特征进行预测
问题描述
我使用 sklearn 训练模型,在 pandas 数据框中的数据上进行训练。请参阅下面的代码片段,该代码片段可以重现我训练的模型。
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
dataset = load_iris()
X = pd.DataFrame(dataset['data'], columns=dataset['feature_names'])
y = pd.DataFrame(dataset['target'], columns=['target_names'])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
logistic_regression = LogisticRegression()
logistic_regression.fit(X_train, y_train)
现在,当我想进行预测时,用户通过字典发送预测,其中每个键是特征名称,每个值是该特征的值。
似乎没有强制执行预测中的特征根据 DataFrame 中的特征命名。我理解这一点,但问题是,当功能由用户命名时,我怎么知道它们是如何排序的?
example = {
'a':1, # randomly named features
'b':2,
'c':3,
'd':4
}
logistic_regression.predict(pd.DataFrame.from_records(example, index=[0])) # works
我如何知道预测是否将这些值发送为[1,2,3,4]
或[2,1,3,4]
等。
解决方案
一种方法是存储feature_names
训练数据的顺序,这样当新数据以字典形式出现时,您可以使用该存储顺序对值进行排序。
如果您不想存储额外的对象,另一种方法是在字典键中添加某种“订单标识符”。例如,如果说顺序是d b c a
,那么您可以将字典键的名称更改为1_d
, 2_b
, 3_c
, 4_a
,这样如果您将其转换为列表,您就可以在不使用原始特征列表的情况下对其进行排序。
推荐阅读
- php - 字符串中仅以空格(或字符串的开头/结尾)为边界的标题大小写单词
- javascript - 删除创建的 div js
- applescript - Applescript - 递归遍历目录
- android - 为什么在打开 android studio 时显示“错误调用主方法”?
- android - 如何以编程方式注册网络连接更改接收器?
- reactjs - 如何将状态重置为 redux 商店中的初始状态?
- python - 如何刷新Mysql连接?
- bash - shell 脚本中的 notify-send 命令问题
- c# - UI层如何访问GetSystemService(AudioService)
- c++ - 删除链表功能不匹配所有测试用例