sklearn搭建决策树特征选取问题

今天在学习决策树的时候,用sklearn里面的决策树来搭建模型。关于特征这块想向老师请教: 样本如下图所示:
A9I7_[1GLL@KAXI0RX2OR.png
我最开始在决策树里面添加的样本形式是不加上特征类别的,其形式为: [['青绿', '蜷缩', '浊响', '清晰', '硬滑'], ['乌黑', '蜷缩', '沉闷', '清晰', '硬滑'], ...] Y = 
[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]
(其中1表示好瓜,0表示坏瓜) 然而,在用sklearn.preprocessing的LabelEncoder对X进行fit_transform却报错。接着,我用 [{'敲声': '浊响', '纹理': '清晰', '根蒂': '蜷缩', '触感': '硬滑', '色泽': '青绿'}, {'敲声': '沉闷', '纹理': '清晰', '根蒂': '蜷缩', '触感': '硬滑', '色泽': '乌黑'}, ...]的形式重新生成X。  然后用
sklearn.feature_extraction import DictVectorizer

这个方法transform就可以正常的放入决策树计算了。 我的问题是:           1)是不是放入的训练特征,必须要加入特征的名字?           2)如果用我一开始的特征形式,即[['青绿', '蜷缩', '浊响', '清晰', '硬滑'], ['乌黑', '蜷缩', '沉闷', '清晰', '硬滑'], ...],可不可以训练?需要调用什么方法呢?   感谢老师

Robin_TY - PhD@CSU,研究方向:计算机视觉,模式识别

赞同来自: Tomguluson

1.  不需要。首先要搞清楚的是,在这个数据集中,每一列代表的是统一种特征,每一行代表的是一个样本,所以在用LabelEncoder是要注意传入的是一列特征(即每列),不是一个样本(即行数据) 2. 不可以,需要转换成number。可以使用LabelEncoder将特征转换成0, 1, 2,...代表不同的特征类别,然后使用OneHotEncoder进行编码, 这些在sklearn里都有,可以参考以下 链接:   LabelEncoder: http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html   OneHotEncoder: http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html  

要回复问题请先登录注册