python机器学习基础决策树与随机森林概率论

编辑: admin 分类: python 发布时间: 2021-12-03 来源:互联网
目录
  • 一、决策树原理概述
    • 1.决策树原理
    • 2.信息论
      • ①信息熵
      • ②决策树的分类依据
      • ③其他决策树使用的算法
      • ④决策树API
  • 二、决策树算法案例
    • 1.案例概述
      • 2.数据处理
        • 3.特征工程
          • 4.使用决策树进行预测
            • 5.决策树优缺点及改进
            • 三、随机森林
              • 1.集成学习方法
                • 2.单个树建立过程
                  • 3.随机森林API
                    • 4.随机森林使用案例
                      • 5.随机森林的优点

                      一、决策树原理概述

                      1.决策树原理

                      决策树的分类原理,相当于程序中的if-then结构,通过条件判断,来决定结果。

                      2.信息论

                      ①信息熵

                      假设有32支球队,在不知道任何信息的情况下,以二分法去猜冠军,最多猜log(2)32 = 5次。此时:每个球队的夺冠概率为1/32,那么:

                      5 = -(1/32log1/32 + 1/32log1/32 + ......)共32项相加。

                      若事先可以得知一点点信息,则使用二分法猜冠军的时候,次数一定比5次小,那么它的准确信息量应该是:

                      H = -(p1logp1 + p2logp2 + ... + p32logp32)

                      则H称为信息熵,单位为比特bit。

                      根据以上内容,可知,信息是和消除不确定性相联系的。当毫无信息的时候,信息熵最大,只要有了一定的信息,那么信息熵就会减小,不确定性也会减小。

                      ②决策树的分类依据

                      信息增益:当得知一个特征条件之后,减少的信息熵的大小。计算公式如下:

                      每一个特征所对应的信息增益都可以通过上式计算出来,通过比较,信息增益最大的作为首要的分类标准。也就是说,每一个特征都可能对减小信息熵有作用,并且作用大小不一样。作用越大,减少的信息熵越大,则该特征越重要,便可首先拿这个最重要的作为分类标准。

                      ③其他决策树使用的算法

                      其中,基尼系数对样本的划分更加仔细,甚至能对训练集分类达到100%,但通常这种情况下,会导致模型在测试集中的表现不好,因为它为了达到更高的拟合度,会过于针对训练集样本,由此降低了普遍性。

                      ④决策树API

                      二、决策树算法案例

                      1.案例概述

                      本案例中,使用泰坦尼克号上的乘客数据作为样本,是否存活作为目标值。样本特征包含年龄、性别、目的地、船舱类型等等。我们在模型训练中,只使用了船舱类型(Pclass),性别(Sex),年龄(Age)这三个作为训练集样本特征。

                      2.数据处理

                      假设已经获取到了数据集,并赋值给titan

                      找出特征值和目标值: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)

                      3.特征工程

                      由于船舱类型和性别的数据都不是数字,因此需要用one-hot编码来代替特征数据。通过字典数据处理,即可生成。因此,需要将训练集转换为字典,通过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'))

                      4.使用决策树进行预测

                      预测后可以使用graphviz查看图像化的决策树。需要先安装,将导出的dot文件直接放在graphviz目录下,在命令行,通过 dot -Tpng tree.dot -o tree.png命令即可导出png图像。

                      dec = DecisionTreeClassifier()

                      训练算法:dec.fit(x_train,y_train)

                      打印准确率:print(dec.score(x_test, y_test))

                      导出树的结构:tree.export_graphviz(dec, out_file='D:/Graphviz/tree.dot', feature_names= [","])

                      注意,最后一个feature_names,直接在特征工程中,调用dict.get_feature_names,即可输出所需内容。

                      5.决策树优缺点及改进

                      优点:

                      原理及解释较为简单,并且可以将树木可视化

                      需要很少的数据准备,其他技术通常需要数据归一化

                      缺点:

                      决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合。

                      决策树可能不稳定,因为数据的小变化可能会导致完全不同的树被生成

                      改进:

                      减枝cart算法、随机森林

                      三、随机森林

                      1.集成学习方法

                      集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

                      随机森林就是一种继承学习方法,定义:在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。

                      2.单个树建立过程

                      ①随机在N个样本中,有放回地选择一个样本,重复N次,样本可能重复

                      ②随机在M个特征中选出m个特征,m取值小于总特征M

                      假如建立了10棵决策树,他们的样本以及特征大多都是不一样的。使用随机有返回的抽样(bootstrap抽样)。

                      3.随机森林API

                      随机森林超参数:

                      n_estimator:决策树数量

                      max_depth:每棵树深度限制

                      4.随机森林使用案例

                      还是用上面决策树的案例,假设已经准备好了训练集x_train, y_train,测试集x_test, y_test

                      rf = RandomForestClassifier()

                      由于随机森林有超参数n_estimator,max_depth,因此可以使用网格搜索交叉验证,对不同的参数组合进行一一验证,寻找最好的参数组合模型。

                      设置超参数取值:param = {'n_estimator':[100,200,300,400,500], 'max_depth':[5,10,15,20]}

                      实例化算法:gc = GridSearchCV(rf, param_grid=param, cv=2) (假设使用二折验证)

                      训练算法:gc.fit(x_train, y_train)

                      输出准确率:gc.score(x_test, y_test)

                      查看所选择的参数模型:gc.best_params_

                      5.随机森林的优点

                      ①在当前所有算法中,具有极好的准确率

                      ②能够有效地运行在大数据集上(样本数、特征数)

                      ③能够处理具有高维特征的输入样本,而且不需要降维

                      ④能够评估各个特征在分类问题上的重要性

                      以上就是python机器学习基础决策树与随机森林概率论的详细内容,更多关于python决策树与随机森林概率论的资料请关注hwidc其它相关文章!

                      【本文由:http://www.1234xp.com/cdn.html 提供,感谢支持】