тестировать модель машинного обучения с категориальной переменной в python

1

У меня есть набор данных, подобный этому

Изображение 174551

Как вы видите, есть одна категориальная переменная, которая является государственной

позже я кодирую категориальную переменную

Изображение 174551

Если я хочу проверить свою модель с конкретными данными, я делаю что-то вроде этого

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

Что хорошо работает. Но то, что я хочу сделать, во время тестирования я прямо хочу ввести название города, например, New York или Florida

Как я могу это достичь?

Теги:
machine-learning
categorical-data

5 ответов

3

Модель машинного обучения может работать только с числовыми данными. Именно по этой причине вам пришлось кодировать ваши "состояния". Существует несколько способов добиться того, что вы говорите: a) Используйте функцию, чтобы вернуть закодированное значение "состояния", в то время как вы можете ввести что-то вроде

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

b) Использовать неявное кодирование, которое неявно создает столько столбцов для каждой категориальной переменной.

2

Как уже упоминалось ранее, любая модель принимает только числа в качестве входных данных. По этой причине, как правило, мы создаем функцию предварительной обработки, которая может быть применена одновременно к набору поездов и тестов.

В этом случае вам необходимо определить функцию, которая преобразует входной вектор в числовой вектор, который может быть дополнительно добавлен в модель машинного обучения:

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() чтобы достичь того, чего хотите.

2

Вы можете использовать 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]]))
  • 1
    LabelEncoder используется специально только для этикеток. Не рекомендуется использовать его для этой цели. Я бы посоветовал использовать вместо этого sklearn.preprocessing.OneHotEncoder .
  • 0
    @VedangWaradpande Я полностью согласен
2

так как модель ML вводит только числа, вам нужно сделать кодирование даже для тестового набора данных, а затем передать его модели.

1

Это совсем не изящно, но вы можете просто написать, if... elif инструкция 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")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню