инвертировать бинаризованный кадр данных к исходным категориальным значениям после расщепления - PullRequest
0 голосов
/ 22 октября 2018

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

Шаги, использованные при обучении модели: -

  1. Преобразование кадра данных в бинаризованные значения с использованием pandas.get_dummies.

  2. Обученная модель классификатора Randomforest (scikit)

  3. Маринованная модель

Тестирование модели: -

  1. Не выбрал модель

  2. Передал данные испытаний и получил результат из классификатора Радомского леса

  3. Вывод в двоичном формате

Цель: -

хотел бы инвертировать эти данные в исходное строковое значение.

Пожалуйста, предложите, если есть решение.

Примечание: - Большинство тем в Интернете принимают меня только до получения результата от классификатора.Или делать обучение и тестировать его в одной программе.

1 Ответ

0 голосов
/ 22 октября 2018

Помимо вашей проблемы, используйте joblib вместо pickle, потому что гораздо эффективнее хранить модели, такие как Random Forest , и теперь для вашей проблемы есть несколько вещей, которые следует учитывать:

Мариновать или нет, результат вашего лечения такой же.Pickling - это способ сохранить вашу модель, и после того, как ваш случайный лес будет выделен, он будет иметь те же свойства и характеристики, что и раньше.Это может быть случай, когда вы неверно определите свой формат ввода или вы не знаете, как применить метод прогнозирования.Давайте рассмотрим пример: DataFrame с 3 категориальными переменными и определенным классом, зависящим от 3 функций.

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv(data='example.csv', columns=['val1', 'val2', 'val3', 'class'])

Теперь применяем горячее кодирование и подгоняем случайный лес к столбцу «class»:

#Turning it into dummies
dummies = pd.get_dummies(df[['col1', 'col2', 'col3']])

#Random forest
clf = RandomForestClassifier()
model = clf.fit(dummies, df.class)

Сброс и загрузка модели с помощью joblib:

from sklearn.externals import joblib
#Dumping
joblib.dump(clf, 'filename.pkl') 

#Loading
clf = joblib.load('filename.pkl')

Или с маринадом, если вы придерживаетесь его:

import cPickle

#Dumping
with open('path/to/file', 'wb') as f:
    cPickle.dump(clf, f)

#Loading
with open('path/to/file', 'rb') as f:
    clf = cPickle.load(clf)

Теперь, когда вы перезагрузили свою модель, правильнаяспособ получить результат - использовать метод прогнозирования , чтобы получить класс из другого значения.Представьте, что у вас есть второй DataFrame, который имеет аналогичный формат, за исключением того, что столбец класса отсутствует.Вы бы сделали это следующим образом:

df_test = pd.read_csv("test.csv", columns=['col1', 'col2', 'col3'])

#Creating dummies
dummie_test = pd.get_dummies(df_test)

#Getting the prediction
df_test['predicted'] = clf.predict(dummies_test)
...