【问题标题】:sklearn ensure features ordered as expected for predictsklearn 确保按预期排序的特征进行预测
【发布时间】:2019-08-31 22:32:18
【问题描述】:

我使用 sklearn 训练了一个模型,该模型在 pandas 数据框中的数据上进行了训练。请参阅下面的代码 sn-p 可以重现我训练的模型。

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] 等。

【问题讨论】:

  • 如果我正确理解您的问题,您需要某种映射(用户特征到模型特征)或强制用户以正确的顺序发送特征。否则就没有办法(至少不依赖于黑客/任务的方法)。

标签: pandas scikit-learn sklearn-pandas


【解决方案1】:

一种方法是存储训练数据的顺序feature_names,这样当新数据以字典形式出现时,您可以使用存储的顺序对值进行排序。

如果您不想存储额外的对象,另一种方法是在您的字典键中添加某种“订单标识符”。例如,如果说订单是d b c a,那么您可以将字典键的名称更改为1_d2_b3_c4_a,这样如果将其转换为列表,您就有一种不使用原始特征列表的排序方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 2018-12-27
    • 2020-12-09
    • 2018-07-29
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多