Я выполнял некоторые упражнения по машинному обучению, некоторые данные имеют качественные переменные, такие как пол: мужской, женский.
При построении модели мы знаем, что качественные переменные должны быть установлены в числа, например, из мужского в 1и женский до 0.
Но этого недостаточно, потому что модель всегда рассматривает числа как непрерывные числа, однако факторы не являются непрерывными, они дискретны.Как и 1> 0, это не означает «мужской> женский».
Таким образом, мы устанавливаем «мужской» на 01, женский - на 10, используя кодирование «одна горячая».
Например, код изофициальный сайт scikit-learn:
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder(handle_unknown='ignore')
>>> X = [['Male', 1], ['Female', 3], ['Female', 2]]
>>> enc.fit(X)
...
OneHotEncoder(categorical_features=None, categories=None,
dtype=<... 'numpy.float64'>, handle_unknown='ignore',
n_values=None, sparse=True)
>>> enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
>>> enc.transform([['Female', 1], ['Male', 4]]).toarray()
array([[1., 0., 1., 0., 0.],
[0., 1., 0., 0., 0.]])
>>> enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]])
array([['Male', 1],
[None, 2]], dtype=object)
>>> enc.get_feature_names()
array(['x0_Female', 'x0_Male', 'x1_1', 'x1_2', 'x1_3'], dtype=object)
В соответствии с этим кодом, скажем, исходный кадр данных Pandas (tran_data2) может выглядеть так:
Sex ProductID Age Result
0 male 1 25 1
1 female 2 21 0
2 female 3 23 1
Теперь мы знаем, что:
Sex
male:01
female:10
ProductID
1:100
2:010
3:001
Так, например, ['Female', 1] = [1., 0., 1., 0., 0.].Но как использовать эти кодированные коды?Означает ли это, что я должен перевести исходный Dataframe в формат, подобный (tran_data1):
x0_Female x0_Male x1_1 x1_2 x1_3 Age Result
0 0 1 1 0 0 25 1
1 1 0 0 1 0 21 0
2 1 0 0 0 1 23 1
Затем начать строить модель с использованием нового Dataframe?
Например,
from sklearn import tree
features1=['x0_Female', 'x0_Male', 'x1_1', 'x1_2', 'x1_3', 'Age']
features2=['Sex', 'ProductID', 'Age']
y_pred=list()
clf=tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(tran_data1[features1],tran_data1['Result'])
#clf.fit(tran_data2[features2],tran_data2['Result'])
y_pred=clf.predict(test_data[features1])
Означает ли это, что я должен использовать функции1 вместо функций2?