Es gibt mehrere Beiträge zum Codieren kategorialer Daten in Sklearn-Entscheidungsbäume, aber aus der Sklearn-Dokumentation haben wir diese erhalten
Einige Vorteile von Entscheidungsbäumen sind:
(...)
Kann sowohl numerische als auch kategoriale Daten verarbeiten. Andere Techniken sind normalerweise auf die Analyse von Datensätzen spezialisiert, die nur einen Variablentyp aufweisen. Weitere Informationen finden Sie in den Algorithmen.
Führen Sie jedoch das folgende Skript aus
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'])
gibt den folgenden Fehler aus:
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
Ich weiß, dass es in R möglich ist, kategoriale Daten mit Sklearn zu übergeben. Ist das möglich?
DecisionTreeClassifier()
als numerisch behandelt werden . Wenn Ihre kategorialen Daten nicht ordinal sind, ist dies nicht gut - Sie erhalten Splits, die keinen Sinn ergeben. Die Verwendung von aOneHotEncoder
ist der einzig gültige Weg, ist jedoch rechenintensiv.