繁体   English   中英

在python中使用分类变量测试机器学习模型

[英]test machine learning model with categorical variable in python

我有这样的数据集

在此处输入图片说明

如您所见,有一个类别变量是state

后来我编码分类变量

在此处输入图片说明

如果我想用特定数据测试模型,请执行以下操作

print(regressor.predict([[1,0,1000,2000,3000]]))

哪个工作正常。 但是我想做的是,在测试时,我直接想输入城市名称,例如New YorkFlorida

我该如何实现?

机器学习模型只能处理数字数据。 这就是为什么您必须对“状态”进行编码的原因。 有几种方法可以实现您所说的内容:a)使用函数返回“状态”的编码值,同时您可以输入以下内容

print(regressor.predict([[1,0,1000,func("New York"),3000]]))

b)使用隐式编码,它为每个分类变量隐式创建尽可能多的列。

由于ML模型仅输入数字,因此即使对测试数据集也必须进行编码,然后将其传递给模型。

您可以使用scikit-Learn LabelEncoder进行分类值的转换和逆转换。

>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit(["New York", "Florida", "US", "Florida", "New York"])
LabelEncoder()
>>> le.transform(["New York", "Florida", "US", "Florida", "New York"]) 
array([0, 0, 1, 2]...)
>>> le.inverse_transform([0])
"New York"

您可以像下面这样调用函数。

print(regressor.predict([[1,0,1000,le.transform(["New York"])[0],3000]]))

正如其他人之前提到的,任何模型都只将数字作为输入。 因此,通常我们创建一个预处理功能,该功能可以立即应用于训练和测试集。

在这种情况下,您需要定义一个函数,将输入向量转换为数值向量,然后可以进一步将其输入到您的机器学习模型中:

Inputs -> Preprocessing -> Model

这种预处理必须与您用于训练的内容一样,以便获得所需的结果。

因此,通常在创建模型时,完整的“模型”实际上可以是您所使用的实际模型的包装。 例如:

class MyModel():

    def __init__(self,):
        # Inputs and other variables like hyperparameters
        self.model = Model() # Initialise a model of your choice

    def preprocess(self, list_to_preprocess):
        # Preprocess this list

    def train(self, train_set):
        X_train, y_train = preprocess(X_train)
        self.model.fit(X_train, y_train)

    def predict(self, test_set):
        # If X_test is a vector, reshape and then preprocess

        X_test, y_test = preprocess(test_set)
        pred = self.model.predict(X_test)

        # Evaluate using pred and y_test

因此,最终可以使用函数MyModel.predict()而不是Model.predict()来预测要实现的目标。

这一点都不优雅,但是您可以根据输入内容编写if... elif语句,例如:

a = input("Please enter the state: ") 
if a = "New York":
    print(regressor.predict([[1,0,1000,2000,3000]]))
elif a = "Florida":
    print(regressor.predict([[0,1,1000,2000,3000]]))
else:
    print("Invalid state selected")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM