发布时间:2022-12-28 09:30
目录
决策树
认识决策树
决策树的生成
信息的单位——比特
信息熵
决策树的划分依据之一——信息增益
例题——银行贷款分析
决策树的其他分类依据
案例——泰坦尼克号乘客生存分类
决策树的结构、本地保存
决策树的优缺点
随机森林——集成学习方法
集成学习方法
随机森林
随机森林建立多个决策树的过程
单个树建立过程
随机森林API
随机森林的超参数
随机森林的优点
决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法——不是这个,就是那个。
32只球队,预测冠军是谁?
32支球队,log32=5比特,以2为底
64支球队,log64=6比特
“谁是世界杯冠军”的信息量应该比5比特少。香农指出,它的准确信息量应该是:
H的专业术语称之为信息熵,单位为比特。
当这32支球队夺冠的几率相同,不知道任何一个球队的信息时,对应的信息熵等于5比特。
但实际情况,可以得到一些信息,猜冠军球队的代价减少,信息熵减少。
信息和消除不确定性是相联系的。
哪个特征更重要?
信息增益:得知一个特征条件之后,减少的信息熵大小。
特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:
注:信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度
信息熵H(D)的计算:
条件熵H(D|A)的计算:
注:Ck 表示属于某个类别的样本数,
有房子6个,没房子9个
各个特征的信息增益:年龄、工作、房子、信贷情况——最终的类别
计算例子如下:
最终结果:
,,
ID3——信息增益 最大的准则
C4.5——信息增益比 最大的准则
CART——回归树: 平方误差 最小
——分类树: 基尼系数 最小的准则 在sklearn中可以选择划分的默认原则
基尼系数划分更加仔细
1、pd读取数据
2、选择有影响的特征,处理缺失值
3、进行特征工程,pd转换字典,特征抽取——x_train.to_dict(orient="records")
4、决策树估计器流程
Titanic - Machine Learning from Disaster | Kaggle
import pandas as pd
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
def decision():
"""
决策树对泰坦尼克号进行预测生死
:return:
"""
# 获取数据
titan = pd.read_csv('./案例/03-titan/train.csv')
# 处理数据,找出目标值和特征值
x = titan[['Pclass','Age','Sex']]
y = titan['Survived']
# 填补缺失值
x['Age'].fillna(x['Age'].mean(),inplace=True)
# 分割数据集到训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
# 字典特征抽取
dict = DictVectorizer(sparse=False)
# one-hot编码
x_train = dict.fit_transform(x_train.to_dict(orient='records'))
print(dict.get_feature_names())
x_test = dict.transform(x_test.to_dict(orient='records'))
# 决策树
dec = DecisionTreeClassifier()
dec.fit(x_train,y_train)
print('预测的准确率:',dec.score(x_test,y_test))
# `# 导出决策树的结构
# export_graphviz(dec, out_file ='案例/03-titan/tree.dot', feature_names=['Age', 'Pclass', 'Sex=female', 'Sex=male'])`
if __name__=='__main__':
decision()
预测的准确率: 0.8026905829596412
1、sklearn.tree.export_graphviz() 该函数能够导出DOT格式
tree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])
2、将dot文件转成png
安装graphviz:ubuntu:sudo apt-get install graphviz Mac:brew install graphviz
运行命令——$ dot -Tpng tree.dot -o tree.png
优点: