scikit-learn是一个Python第三方提供的非常强力的机器学习库,它包含了从数据预处理到训练模型的各个方面。在实战使用scikit-learn中可以极大的节省我们编写决策树代码的时间以及减少代码量,使我们有更多的精力去分析数据分布,调整决策树模型和修改超参。但是,需要说明,scikit-learn提供的决策树工具类,只接受数值型的数据,不接受文本数据,所以需要对数据进行预处理,需要对数据转化成虚拟变量(dummy variable)。

data.png

数据预处理

虚拟变量又称虚设变量、名义变量,用以反映质的属性的一个人工变量,是量化了的质变量,通常取值为0或1,一般地,在虚拟变量的设置中:基础类型、肯定类型取值为1;比较类型,否定类型取值为0。这些概念往往让人看不懂,其实说白了就是将数据都变成1或者0,但具体怎么转化?拿上图的age属性来说,age有三个取值{youth,senior,middle_aged}现在将age的取值转化为dummy variable,将youth转化为[1,0,0] ,即1代表youth,后面两个0代表senior和middle_aged,同理,将senior转化为[0,1,0],将middle_aged转化为[0,0,1]。再拿student属性来说,student有两个属性{yes,no},现在将student的取值转化为dummy variable,将yes转化为[1,0],将no转化为[0,1]。按照同样的原理将整个表的数据都转化成dummy variable。

在scikit-learn中有个DictVectorizer类可以直接将数据转化为dummy variable,但DictVectorizer需要接受字典的形式,所以上图数据预处理的步骤有:

第一步:将数据转为字典形式,如表中编号1数据,转化为字典形式为:[{'age':'youth'},{'income':'high'},{'student':'no'},{'credit_rating':'fair'},{'buys'_computer:'no'}],同理其他数据也要转化呈这种形式,最后将这些字典放在一个列表当中。

第二步:将上一步所得的列表传入DictVectorizer中,将数据转化为dummy variable。

建立决策树模型

在python环境中通过from sklearn import tree导入决策树模块,调用tree.DecisionTreefier()建立决策树模型,在参数中criterion是选择决策树中的类型,
entropy代表信息熵。