一. 概念
决策树是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断可行的决策分析方法,是直观运用概率分析的一种图解法。
分类树(决策树)是一种十分常见的分类方法。它是一种 监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。
二.组成
·决策点:最后选择的最佳方案
·状态节点:代表备选方案的经济效果(期望值)
·结果节点:将每个方案在各种自然状态下取得的损益值标注于结果节点的右端
三.优缺点
优点:①易于理解和实现,在学习过程中不需要使用者了解很多的背景知识,这同时使它的能够直接体现数据的特点,只要通过解释后都有能力去理解决策树所表达的意义;
②数据的准备往往是简单或是不必要的,能够同时处理数据型和常规型属性,在相对短的时间内对大型数据作出可行且效果良好的结果;
③通过静态测试来对模型进行评测,可以测定模型的可信度。
缺点:①对连续性的字段比较难预测;
②对有时间顺序的数据,需要很多预处理的工作;
③当类别太多时,错误可能就会增加的比较快;
④一般的算法分类的时候,只是根据一个字段来分类。
四.相关算法
(1)C4.5:用信息增益率来选择属性
优点:产生的分类规则易于理解,准确率较高
缺点:①在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,导致算法的低效;
②C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。
(2)CART:给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。
优点:①可以生成容易理解的规则;
②计算量相对来说不是很大;
③可以处理连续和种类字段;
④决策树可以清晰的显示哪些字段比较重要。
五.python实现
数据集下载链接:数据集
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 数据集(可在我的主页里上传的资源里下载哦)
raw_data = pd.read_csv('1_raw_data_13-12_22.03.16.txt',sep='\t',header=0) # 读取csv数据,并将第一行视为表头,返回DataFrame类型
data = raw_data.values
times = data[::,0]
# features = data[::, 1:3] # 主成分分析法PCA
features_data = raw_data[['channel1', 'channel5']] # 相关性热力图
# features_data = raw_data[['channel2', 'channel8']] # SVM_RFE递归特征消除法
features = features_data.values
labels = np.array(data[::,-1].astype(int)) # 最后一列为特征值
#选取33%数据作为测试集,剩余为训练集
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
train_features = np.array(train_features)
train_labels = np.array(train_labels)
test_features = np.array(test_features)
test_labels = np.array(test_labels)
# criterion = gini(基尼系数-CART算法),entropy(信息增益-C4.5算法)
# splitter:random
dt = DecisionTreeClassifier(criterion='entropy',splitter='random')
dt.fit(train_features,train_labels)
pred_test = dt.predict(test_features)
accuracy_score = accuracy_score(test_labels,pred_test)
print(accuracy_score)
相关方法分类准确度如下:
决策树各项参数变化 | 主成分分析 | SVM_RFE | 相关性热力图 |
---|---|---|---|
criterion=‘gini’,splitter=‘best’ | 79.47% | 79.61% | 84.13% |
criterion=‘entropy’,splitter=‘best’ | 79.46% | 79.62% | 84.16% |
criterion=‘entropy’,splitter=‘random’ | 79.50% | 79.60% | 84.21% |
criterion=‘gini’,splitter=‘random’ | 79.47% | 79.55% | 84.14% |