Є кілька публікацій про те, як кодувати категоричні дані в дерева рішень Sklearn, але з документації Sklearn ми отримали
Деякі переваги дерев рішень:
(...)
Здатний обробляти як числові, так і категоріальні дані. Інші методи, як правило, спеціалізуються на аналізі наборів даних, які мають лише один тип змінних. Докладніше див. У алгоритмах.
Але запущений наступний скрипт
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
data = pd.DataFrame()
data['A'] = ['a','a','b','a']
data['B'] = ['b','b','a','b']
data['C'] = [0, 0, 1, 0]
data['Class'] = ['n','n','y','n']
tree = DecisionTreeClassifier()
tree.fit(data[['A','B','C']], data['Class'])
виводить таку помилку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/sklearn/tree/tree.py", line 154, in fit
X = check_array(X, dtype=DTYPE, accept_sparse="csc")
File "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 377, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: could not convert string to float: b
Я знаю, що в R можна передавати категоричні дані за допомогою Sklearn, чи можливо це?
DecisionTreeClassifier()
будуть розглядатися як числові . Якщо ваші категоричні дані не є порядковими, це погано - ви отримаєте розколи, які не мають сенсу. Використання aOneHotEncoder
- єдиний дійсний на сьогоднішній день спосіб, але обчислювально дорогий.