Ci sono diversi post su come codificare i dati categorici agli alberi Sklearn decission, ma dalla documentazione Sklearn, abbiamo ottenuto questiPassando dati categorici per Sklearn Albero decisionale
Some advantages of decision trees are:
(...)
Able to handle both numerical and categorical data. Other techniques are usually specialised in analysing datasets that have only one type of variable. See algorithms for more information.
Ma eseguendo lo script seguente
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'])
emette il seguente errore:
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
So che in R è possibile passare dati categoriali, con Sklearn, è possibile?
-1 questo è fuorviante. Allo stato attuale, gli alberi decisionali sklearn non gestiscono dati categoriali - [vedi n. 5442] (https://github.com/scikit-learn/scikit-learn/issues/5442). Questo approccio all'utilizzo di Label Encoding converte in numeri interi che 'DecisionClassifier()' ** considererà come numerico **. Se i tuoi dati categoriali non sono ordinali, questo non va bene - finirai con divisioni che non hanno senso. L'uso di un 'OneHotEncoder' è l'unico modo valido corrente, ma è dispendioso dal punto di vista computazionale. – kungfujam
@Abhinav, è possibile applicare 'LabelEncoder' su più di una colonna di un dataframe in una volta?Ad esempio, nel dataframe della domanda, possiamo fare qualcosa come "le.fit_transform (data [['A', 'B', 'C']])' per ottenere etichette per tutte le colonne categoriali in una sola volta? O dovrebbe essere specificare le colonne categoriali in modo esplicito per convertire solo le colonne categoriali. – Minu
@kungfujam, Inoltre, mi piacerebbe 'One-Hot Encode' le colonne categoriali una volta che' LabelEncode' loro - per affrontare il problema che @kungfujam ha sottolineato. Come posso farlo una volta ottenuta la codifica dell'etichetta? – Minu