从矩阵转换为决策树的数字数据?

时间:2018-11-03 22:58:57

标签: python scikit-learn

我有一些数据以numpy数组的形式显示,如下所示:

array([['vhigh', '2', '2', 'small', 'low', 'unacc'],
       ['vhigh', '2', '2', 'small', 'med', 'unacc'],
       ['vhigh', '2', '2', 'small', 'high', 'good']], dtype=object)
从以下位置的汽车数据集中提取的

https://archive.ics.uci.edu/ml/datasets/Car+Evaluation

我想通过scikit使用此数据来应用分类决策树,并且我设法通过以下方式将第一列或类别转换为一组数字:

y=data[:,0]
y=le.fit_transform(y)
print y

因为我收到一个错误消息:

could not convert string to float

我遇到的问题是当我要将数组转换为一种热编码时。我已完成以下操作:

X=data[:,1:]
enc=preprocessing.LabelEncoder()
enc.fit(X)
Xn=enc.transform(X)
Xn=Xn.reshape(-1,1)
ohe=preprocessing.OneHotEncoder(sparse=False)

我得到的错误是:

bad input shape (1728L, 6L)

我在做什么错?还是有另一种方法可以从分类数组转换为数字数组?

谢谢

1 个答案:

答案 0 :(得分:1)

对于最新的sklearn版本(> 20.0),您可以只使用OneHotEncoder

df = pd.read_csv(
    'https://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data', header=None)
X, y = df.iloc[:,1:] , df.iloc[:,0]
encoded_y = preprocessing.LabelEncoder().fit_transform(y)

sklearn >= 20.0

ohe = preprocessing.OneHotEncoder(sparse=False)
encoded_x = ohe.fit_transform(X)

>>> pd.DataFrame(encoded_x, columns=ohe.get_feature_names())
      x0_high  x0_low  x0_med  x0_vhigh  x1_high  x1_low ...
0         0.0     0.0     0.0       1.0      0.0     0.0 ...
1         0.0     0.0     0.0       1.0      0.0     0.0 ...
2         0.0     0.0     0.0       1.0      0.0     0.0 ...
3         0.0     0.0     0.0       1.0      0.0     0.0 ...
4         0.0     0.0     0.0       1.0      0.0     0.0 ...
5         0.0     0.0     0.0       1.0      0.0     0.0 ...
...

sklearn < 20.0

from sklearn.feature_extraction import DictVectorizer
dv = DictVectorizer(sparse=False) 
encoded_x = dv.fit_transform(X.to_dict(orient='records'))
pd.DataFrame(encoded_x, columns=dv.get_feature_names())

拟合分类器:

from sklearn.tree import DecisionTreeClassifier
DecisionTreeClassifier().fit(encoded_x, encoded_y)