机器学习——决策树+随机森林

发布时间:2022-10-15 21:30

目录

决策树

认识决策树

决策树的生成

信息的单位——比特

信息熵

决策树的划分依据之一——信息增益

例题——银行贷款分析

决策树的其他分类依据

案例——泰坦尼克号乘客生存分类

决策树的结构、本地保存

决策树的优缺点

随机森林——集成学习方法

集成学习方法

随机森林

随机森林建立多个决策树的过程

单个树建立过程

随机森林API

随机森林的超参数

随机森林的优点


机器学习——决策树+随机森林_第1张图片

决策树

认识决策树

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法——不是这个,就是那个。

决策树的生成

信息的单位——比特

32只球队,预测冠军是谁?

32支球队,log32=5比特,以2为底

64支球队,log64=6比特

信息熵

“谁是世界杯冠军”的信息量应该5比特少。香农指出,它的准确信息量应该是:

H=-(p_1logp_1+p_2logp_2+...+p_32logp_32)

H的专业术语称之为信息熵,单位为比特。

H(X)=\Sigma _{x\in X}P(x)logP(x)

当这32支球队夺冠的几率相同,不知道任何一个球队的信息时,对应的信息熵等于5比特。

但实际情况,可以得到一些信息,猜冠军球队的代价减少,信息熵减少。

信息和消除不确定性是相联系的。

决策树的划分依据之一——信息增益

哪个特征更重要?

信息增益:得知一个特征条件之后,减少的信息熵大小

特征A对训练数据集D的信息增益g(D,A),定义为集合D信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:

g(D,A)=H(D)-H(D|A)

注:信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度

信息熵H(D)的计算:

H(D)=-\sum_{k=1}^{K}\frac{\left | C_k \right |}{\left | D \right |}log\frac{\left | C_k \right |}{\left | D \right |}

条件熵H(D|A)的计算:

H(D|A)=\sum_{i=1}^{n}\frac{\left | D_i \right |}{\left | D \right |}H(D_i)=-\sum_{i=1}^{n}\frac{\left | D_i \right |}{\left | D \right |}\sum_{k=1}^{K}\frac{\left | D_{ik} \right |}{\left | D_i \right |}log\frac{\left | D_{ik} \right |}{\left | D_i \right |}

注:Ck 表示属于某个类别的样本数,

例题——银行贷款分析

机器学习——决策树+随机森林_第2张图片

有房子6个,没房子9个

 H(D)=-((9/15)log(9/15)+(6/15)log(6/15))=0.971

各个特征的信息增益:年龄、工作、房子、信贷情况——最终的类别

计算例子如下:

g(D/nianling)=0.971-(1/3H(qing)+1/3H(zhong)+1/3H(lao))

H(qing)=-((2/5)log(2/5)+(3/5)log(3/5))

最终结果:

g(D,fangzi)=0.420, g(D,xindai)=0.363

决策树的其他分类依据

ID3——信息增益 最大的准则

C4.5——信息增益比 最大的准则

CART——回归树: 平方误差 最小

          ——分类树: 基尼系数  最小的准则 在sklearn中可以选择划分的默认原则

基尼系数划分更加仔细

案例——泰坦尼克号乘客生存分类

1pd读取数据

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

决策树的结构、本地保存

1sklearn.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

决策树的优缺点

优点:

  • 简单的理解和解释,树木可视化。
  • 需要很少的数据准备,其他技术通常需要数据归一化。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号