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

时间:2018-09-27 10:10:19

标签: python machine-learning categorical-data

我有一个这样的数据集

enter image description here

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

后来我编码了分类变量

enter image description here

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

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

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

我该如何实现?

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

您可以使用scikit-Learn There are pretty good documentation for this.来转换和逆转换分类值。

>>> 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]]))

答案 3 :(得分:3)

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

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

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()来实现所需的功能。

答案 4 :(得分:1)

这一点都不优雅,但是您可以根据输入内容编写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")