Я решаю проблему классификации с использованием случайных лесов. Для этого я решил использовать библиотеку Python scikit-learn. Но я новичок как в алгоритме Random Forest, так и в этом инструменте. Мои данные содержат множество переменных факторов. Я искал это для Google и выяснил, что неправильно приводить числовые значения к переменным факторам, как в линейной регрессии, поскольку он будет рассматривать его как непрерывную переменную и давать неверный результат. Но я не мог найти ничего о том, как справляться с фактор-переменными в scikit-learn. Скажите, пожалуйста, какие варианты использовать или указать мне на какой-нибудь документ, где я могу его получить.Каков способ представления переменных факторов в scikit-learn при использовании Random Forests?
ответ
Вы должны использовать sklearn's OneHotEncoder. Он создает новую переменную для каждого отдельного значения в вашей категорной целочисленной функции.
Так, например, если у вас есть переменная var
со значениями [10, 25, 30]
, это создаст три новых переменных (то есть матрица с 3 колонками), по существу, с переменными var_10
, var_25
и var_30
со значениями [1, 0, 0]
, [0, 1, 0]
и [0, 0, 1]
соответственно.
Спасибо за ответ. Но это не решает мою проблему, поскольку у меня нет целочисленных функций. Функции, о которых я говорю, принимают много разных строк (слов) или иногда массив строк. Btw Я пытаюсь классифицировать текстовые данные, используя случайные леса. Данные, о которых идет речь, - это обзор, сделанный разными пользователями о продукте. –
См. Документацию о [извлечении текста] (http://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction). –
В качестве альтернативы используйте библиотеку Pandas (http://pandas.pydata.org/), которая имеет функцию get_dummies, которая может преобразовывать произвольно типизированные столбцы в фактор-переменные. –
Если вы используете рамку данных pandas, вы можете легко использовать функцию get_dummies для этого. Вот пример:
import pandas as pd
my_data = [['a','b'],['b','a'],['c','b'],['d','a'],['a','c']]
df = pd.DataFrame(my_data, columns = ['var1','var2'])
dummy_ranks = pd.get_dummies(df['var1'], prefix = 'var1_')
print dummy_ranks
var1__a var1__b var1__c var1__d
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 0 1
4 1 0 0 0
[5 rows x 4 columns]
Вы говорите, что «неверно давать числовые значения фактору-переменным, как в линейной регрессии, так как он будет рассматривать его как непрерывную переменную». Вы абсолютно не должны делать этого для линейной регрессии. Случайный лес может реально справиться с этим довольно хорошо, но линейная регрессия определенно будет учитывать ваши факторы как непрерывные переменные и дать очень, очень неправильный результат. Методы OneHotEncoder и get_dummies ниже являются обязательными для линейной/логистической регрессии, но могут быть необязательными для Random Forest. –