我有一个这样的数据集
如您所见,有一个类别变量是state
后来我编码了分类变量
如果要使用特定数据测试模型,请执行以下操作
print(regressor.predict([[1,0,1000,2000,3000]]))
哪个工作正常。但是我想做的是,在测试时,我直接想输入城市名称,例如New York
或Florida
我该如何实现?
答案 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")