[英]test machine learning model with categorical variable in python
机器学习模型只能处理数字数据。 这就是为什么您必须对“状态”进行编码的原因。 有几种方法可以实现您所说的内容: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.