人工智能_5_决策树_随机森林

# 决策树,随机森林
# 决策树结构:if-then
# 信息熵:
#   例:第一届世界杯32支球队 每个队伍冠军概率1/32
#               可得 log32(程序员认为的log一般都默认是以2为底) = -(1/32*log(1/32)+1/32*log(1/32).....)
#           2018 第21届世界杯根据历史数据获胜概率不同   log32  > -(1/4*log(1/4)+1/4*log(1/4).....)
#           几个log的和即为信息熵,   当概率变化时  log的和是小于log(n)的
# 信息熵与不确定性是相联系的
#   H(X)= -(P(X1)log(P(X1))+P(X2)log(P(X2))......)   概率相同时为log(n)
#       信息熵越大表示 几率均等,不确定性大
# 决策树的划分依据:信息增益 (最大值对应的特征即为重要特征)
#   当得知一个特征条件之后,减少的信息熵的大小 (构建决策树时,放在前边)
#   得知x特征的信息,是的类y的信息的不确定性减少的程度
#   Ck表示某个类的样本数,即某类目标值的数量
#       g(D,A) 特征A对数据集D的信息增益g(D,A)
#       H(D) 数据集的信息熵 (根据目标值求) H(D) = -((|C1|/|D|)/log(|C1|/|D|)+(|C2|/|D|)/log(|C2|/|D|)+......)
#       H(D,A) 给定条件下D的信息熵 H(D,A) = -( (|Di|/|D|)*H(Di) )
#           例:特征A为年龄,有青年,中年,老年  H(D,A) 表示为 -( 青年占所有的比例*H(青年)+ 中年,老年 )
#                       H(青年) = 值看青年的数据集    根据目标值  = - ( (目标值1/所有青年数)log(目标值1/所有青年数)+....)
#    即可根据此 生成决策树
# 常用算法 (有的使用基尼系数(不在分析实现方法),有的使用信息增益)
#   ID3 使用信息增益最大的原则
#   C45 信使用息增益比最大的准则
#   CART
#       回归树:平方误差最小
#       分类树 基尼系数(划分更加仔细,可以指定数的深度等等) 最小的准则 在skleran中选择划分的默认原则
# API
#   sklearn.tree.DecisionTreeClassifier(Criterion=‘gini‘,max_depth=None,random_state=None)
#   决策树分类器
#   criterion:默认是gini系数,也可选择信息增益的熵entroy
#   max_depth:树的深度大小
#   random_state:随机数种子
#   method:
#   decision_path:返回决策树的路径
# API sklearn.tree.export_graphviz() 导出DOT格式
#   tree.export_grahviz(estimator,out_file="",features_names=[])
#   将dot转换为图片格式
#   sudo apt-get install graphviz
#   dot -Tpng tree.dot -o tree.png
# ==================================
# 案例:泰坦尼克号------>根据游客的信息,判断游客是否存活
# 数据:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
#       age 项有空缺
#   "row.names","pclass","survived","name","age","embarked","home.dest","room","ticket","boat","sex"
#   "1","1st",1,"Allen, Miss Elisabeth Walton",29.0000,"Southampton","St Louis, MO","B-5","24160 L221","2","female"
def decision():
    import pandas as pd
    """
    决策树
    :return:
    """
    # 1,获取数据
    taitan =pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
    # 2,处理数据,获取特征值与目标值
    x = taitan[[‘pclass‘,‘age‘,‘sex‘]]
    y = taitan[‘survived‘]
    # 3,处理缺失值
    x[‘age‘].fillna(x[‘age‘].mean(),inplace=True) # inplace 表示填补
    # 4,分割数据
    from sklearn.model_selection import train_test_split
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)

    # 5,特征处理 (对于类别的)使用one-hot编码(将数据转换为数字的形式:例如性别,使用0,1代替)
    from sklearn.feature_extraction import DictVectorizer
    dict = DictVectorizer(sparse=False)
    # to_dict() 把原来的 数据转换为 [{‘sex‘:"male"},{}]格式
    x_train = dict.fit_transform(x_train.to_dict(orient="records"))

    x_test = dict.transform(x_test.to_dict(orient="records"))
    # 6,决策树处理
    from sklearn.tree import DecisionTreeClassifier
    dec = DecisionTreeClassifier()
    # dec = DecisionTreeClassifier(max_depth=5)
    dec.fit(x_train,y_train)
    print("准确率:",dec.score(x_test,y_test))
    # 导出决策树结构
    from sklearn.tree import export_graphviz
    export_graphviz(dec,out_file="./tree.dot",feature_names=["age","pclass=1st","pclass=2nd","pclass=3rd","女性","男性"])
# 优点
#   简单的理解和解释 树木可视化
#   不需要归一化
# 缺点(太过于详细,有些异常点)
#   创建的树不能很好的适用于测试集:过拟合
# 改进
#   减枝cart算法 (指定叶子属性:例如若到达该叶子的样本数少于5,就不要了)
#   随机森林
# ==========================================================
# 集成学习方法----随机森林
#   集成学习方法:多个分类器或模型组合
#   什么是随机森林:包含多个分类器,最后的结果取众数
#   随机森林的过程,优势(n个样本,m个特征
#       单个树的建立过程:
#           1,随机在n个中抽取一个样本,重复n次 样本可能重复
#           2,随机在m个特征中选出M个特征 M<m
#       建立10个树,样本,特征大多不同   随机又放回的抽样 bootstrap抽样
# API sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion="gini" 使用基尼系数
# ,max_depth=None,bootstrap=True,random_state=None)
#   n_estimators:数量个数默认是10 一般是120,200,300,500,800,1200
#   max_features="auto" 决策树最大的特征数量,(选取的特征太多,容易过拟合)
#   auto:特征数开方,sprt=auto,log2,None
def random_forest():
    import pandas as pd
    """
   随机森林
    :return:
    """
    taitan =pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
    x = taitan[[‘pclass‘,‘age‘,‘sex‘]]
    y = taitan[‘survived‘]
    x[‘age‘].fillna(x[‘age‘].mean(),inplace=True)
    from sklearn.model_selection import train_test_split,GridSearchCV
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
    from sklearn.feature_extraction import DictVectorizer
    dict = DictVectorizer(sparse=False)
    x_train = dict.fit_transform(x_train.to_dict(orient="records"))
    x_test = dict.transform(x_test.to_dict(orient="records"))
    from sklearn.ensemble import RandomForestClassifier
    rf = RandomForestClassifier()
    # 网格搜索与交叉验证
    gc =GridSearchCV(rf,param_grid={"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,8,15,25,30]},cv=2)
    gc.fit(x_train,y_train)
    print("随机森林准确率",gc.score(x_test,y_test))
    print("随机森林选择的参数模型",gc.best_params_)
# 极好的准确率,有效使用在大数据,不需要降维
if __name__ =="__main__":
    #decision()
    random_forest()

原文地址:https://www.cnblogs.com/Dean0731/p/11630972.html

时间: 2024-10-07 12:15:04

人工智能_5_决策树_随机森林的相关文章

R语言︱决策树族——随机森林算法

笔者寄语:有一篇<有监督学习选择深度学习还是随机森林或支持向量机?>(作者Bio:SebastianRaschka)中提到,在日常机器学习工作或学习中,当我们遇到有监督学习相关问题时,不妨考虑下先用简单的假设空间(简单模型集合),例如线性模型逻辑回归.若效果不好,也即并没达到你的预期或评判效果基准时,再进行下换其他更复杂模型来实验. ---------------------------------------------- 一.随机森林理论介绍 1.1 优缺点 优点. (1)不必担心过度拟合

机器学习与人工智障(5):决策树与随机森林

一.从LR到决策树 1.总体流程与核心问题 (1)决策树是基于树的结构进行决策: 每个"内部节点"对应于某个属性上的"测试" 每个分支对应于该测试的一种可能结果(即该属性上的每个取值) 每个叶节点对应于一个预测结果 (2)学习过程:通过对训练样本的分析来确定"划分属性"(即内部节点所对应的属性) (3)预测过程:将测试实例从根节点开始,沿着划分属性所构成的"判定测试序列"下行,直到叶节点 2.决策树的总体流程: (1):&qu

web安全之机器学习入门——3.2 决策树与随机森林算法

目录 简介 决策树简单用法 决策树检测P0P3爆破 决策树检测FTP爆破 随机森林检测FTP爆破 简介 决策树和随机森林算法是最常见的分类算法: 决策树,判断的逻辑很多时候和人的思维非常接近. 随机森林算法,利用多棵决策树对样本进行训练并预测的一种分类器,并且其输出的类别是由个别决策树输出的类别的众数决定. 决策树简单用法 使用sklearn自带的iris数据集 # -*- coding: utf-8 -*- from sklearn.datasets import load_iris from

四、决策树、随机森林、GBDT、XGBoost

(本节课各种数学式子比较多.....^_^) 决策树 Decision Tree? 介绍? 熵 Entropy? 信息增益 Information Gain? 常见算法? 过度拟合 Overfitting? 剪枝 Prune? 增益率 GainRatio? 更多的DT应?场景类别:? 连续函数,多分类,回归? 决策树的究极进化 Ensemble? Bagging? Random Forest? Boosting? GBDT? XGBoost 决策树 分治思想 根据不同的条件作出相应的决定 熵 区

决策树与随机森林分类算法(Python实现)

一.原理: 决策树:能够利用一些决策结点,使数据根据决策属性进行路径选择,达到分类的目的. 一般决策树常用于DFS配合剪枝,被用于处理一些单一算法问题,但也能进行分类 . 也就是通过每一个结点的决策进行分类,那么关于如何设置这些结点的决策方式: 熵:描述一个集合内元素混乱程度的因素. 熵的衡量公式: ? 公式中的熵值 Entropy 会随着集合中类别数量增加而快速增加,也就是说一个集合中类别越少,那么它的熵就小,整体就越稳定. 对于一个标记数据集,要合理的建立一棵决策树,就需要合理的决定决策结点

决策树与随机森林算法

决策树 决策树模型是一种树形结构,基于特征对实例进行分类或回归的过程.即根据某个特征把数据分划分到若干个子区域(子树),再对子区域递归划分,直到满足某个条件则停止划分并作为叶子节点,不满足条件则继续递归划分. 一个简单的决策树分类模型:红色框出的是特征. 决策树模型学习过程通常包3个步骤:特征选择.决策树的生成.决策树的修剪. 1.特征选择 选择特征顺序的不同将会产生不同决策树,选择好的特征能使得各个子集下标签更纯净.度量特征对产生子集的好坏有若干方法,如误差率,信息增益.信息增益比和基尼指数等

决策树与随机森林

文章部分图片来源于龙心尘老师课件. 首先,在了解树模型之前,自然想到树模型和线性模型有什么区别呢?其中最重要的是,树形模型是一个一个特征进行处理,之前线性模型是所有特征给予权重相加得到一个新的值.而树形模型更加接近人的思维方式.树模型拟合出来的函数其实是分区间的阶梯函数. 其次,需要了解几个重要的基本概念:根节点(最重要的特征):父节点与子节点是一对,先有父节点,才会有子节点:叶节点(最终标签). 一.决策树 决策树生成的数学表达式: 决策树的生成必须要解决两个问题: (1)  如何分裂训练数据

从决策树到随机森林

这里仅介绍分类决策树. 决策树:特征作为决策的判定标准,整个模型形如树形结构,因此,称之为决策树 对于分类决策树,他们可以认为是一组if-then规则的集合.决策树的每一个内部节点有特征组成,叶子节点代表了分类的结果.父节点和子节点之间是由有向边连接,表示了决策的结果. 在这里,有必要解释一下,为什么决策树的学习过程变成了三个步骤:特征选择.决策树生成和剪枝.而不是像LR或者SVM那样,具有显式的目标函数.首先,我们来看决策树:一个树形结构.如果要根据全局最优的策略,那么需要遍历数据集在所有的特

决策树和随机森林

决策树是一种非参数监督学习预测模型. 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别. 1.举例: 举个校园相亲的例子,今天校园的小猫(女)和小狗(男)准备配对,小猫如何才能在众多的优质??的心仪的狗呢?于是呢?有一只特乖巧的小猫找到了你,你正在学习机器学习,刚好学习了决策树,准备给这只猫猫挑选优质狗,当然,你不仅仅是直接告诉猫哪些狗是合适你的?你更应该详细的给猫讲解决策树是如何根据它提出的标准选出的符合要求的狗呢?猫给出如下信息:年