我使用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]
等形式发送这些值。
答案 0 :(得分:0)
一种方法是存储训练数据的顺序feature_names
,以便当新数据作为字典输入时,您可以使用该存储的顺序对值进行排序。
如果不想存储额外的对象,另一种方法是在字典键中添加某种“订单标识符”。例如,如果说顺序是d b c a
,则可以将字典键的名称更改为1_d
,2_b
,3_c
,4_a
,因此如果将其转换为列表,则可以在不使用原始功能列表的情况下对其进行排序。