决策树
决策树(Decision Tree)是一种基本的分类与回归方法,当决策树用于分类时称为分类树,用于回归时称为回归树。主要介绍分类树。
决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点,其中内部结点表示一个特征或属性,叶结点表示一个类。
决策树学算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。根据信息增益准则的特征选择方法:对于训练数据集(或子集),计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
# 生成dot格式文件
import pydotplus
# 花萼长度、花萼宽度,花瓣长度,花瓣宽度
iris_feature_E = 'sepal length', 'sepal width', 'petal length', 'petal width'
iris_feature = u'花萼长度', u'花萼宽度', u'花瓣长度', u'花瓣宽度'
iris_class = 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica'
if __name__ == "__main__":
# 解决matplotlib不能读取中文的问题
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 加载数据
path = 'iris.data' # 数据文件路径
# header=None文件指定了列名
data = pd.read_csv(path, header=None)
# print(data)
# 特征值
x = data[range(4)]
# 目标值-由于y为字符串,需要转换成类别数据,再转换成编码-0,1,2
y = pd.Categorical(data[4]).codes
# print(y)
# 为了可视化,仅使用前两列特征
x = x.iloc[:, :2]
# 相当于x = x[[0,1]]
# 分割数据集-训练集与测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=1)
print(y_test.shape)
'''训练模型'''
# 决策树参数估计
# DecisionTreeClassifier:决策树分类器
# 损失函数criterion:gini或者entropy,前者是基尼系数,后者是信息熵。
# min_samples_split = 10:如果该结点包含的样本数目大于10,则