机器学习——决策树算法之数学+代码实例解析
1、文章简介
写该文章,主要借阅的资料有:
①《python机器学习基础教程》
②《机器学习基础:从入门到求职》
③以及学习一些网上的资料案例整理
需要安装的环境:
①安装绘图工具 Graphviz:https://www.cnblogs.com/shuodehaoa/p/8667045.html
②安装机器学习本篇必需的库:matplotlib,scikit-learn。(本篇外一般还会安装numpy,scipy,pandas等)
2、决策树简单概述
决策树(Decision Tree)是一种树状结构模型,可以进行基本的分类与回归。
决策树常听到的名词有:ID3决策树、C4.5决策树、CART决策树。其中采用的核心思想如下:
①ID3决策树采用信息增益来进行计算;
②C4.5决策树采用信息增益比(率)进行计算;
③CART决策树采用基尼系数进行计算。
本文涉及到的决策树是CART决策树,由于文章篇幅问题,将不对ID3决策树、C4.5决策树进行讲解,网上也有很多资料,由于CART决策树已经是上面两种决策树的升级版,所以推荐数学实例学习资料(先学学公式):
①ID3决策树:https://www.cnblogs.com/gfgwxw/p/9439482.html;
②C4.5决策树:https://blog.youkuaiyun.com/qq_28697571/article/details/84679852;
3、决策树代码实例讲解
(1)实例
针对14位路人的年龄特征(age)、收入情况(income)、是否英俊(handsome)、性格特点(character),以及是否拥有爱情构造一颗CART决策树。(注意:本例由于数据是自己造的,且样本较少,没有分为训练集和测试集,也就没有对数据的精度进行验证,14条数据全部作为训练集进行模型训练,最终直接将训练后的模型对新数据进行预测。)
(2)模型结果
由上图可知:gini=0.459代表基尼系数为0.459,sample=14说明有14个样本,value=[5,9]说明样本有两类,一类有5个样本为nolove,另一类为9个样本为islove。class=islove说明islove的样本数较多。
(3)准备数据
这里将数据写入到csv(逗号分隔)文件love.csv,具体数据如下:
其中,第一行为字段名称,第1列为序号,其他为数据内容。
(4)代码实现
import graphviz
import matplotlib
from sklearn import datasets, tree
# 导入可视化包
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.feature_extraction import DictVectorizer
from sklearn import preprocessing
from sklearn.tree import DecisionTreeClassifier
if __name__ == '__main__':
getLove() # 是否拥有爱情
# 是否拥有爱情
def getLove():
loveData = open('D:\Python\Project\love.csv', 'r')
reader = csv.reader(loveData)
header = next(reader)
featureList = [] # 存放每一行数据,每一行数据为一个字典,如一行数据:{'age': 'youth', 'income': 'high', 'handsome': 'no', 'character': 'extroversion'}
labelList = [] # 存放历史数据的结果,即数据的最后一列
for row in reader:
labelList.append(row[len(row) - 1]) # 最后一列,存放样本的结果列
rowDict = {
} # 存放字典,如{"age" : "youth"}
for i in range(1, len(row)