大家好,今天小编关注到一个比较有意思的话题,就是关于从零开始学习python的问题,于是小编就整理了1个相关介绍从零开始学习python的解答,让我们一起看看吧。

  1. 如何在Python中从零开始实现随机森林?

如何在Python中从零开始实现随机森林?

随机森林(Random Forest)属于集成学习(Ensemble Learning)的一种。集成学习,顾名思义,就是众模型之大。类比一下日常生活中的日子,比如给试卷评分,客观题很简单,直接按照标准答案就是了(实际上现在考试客观题基本都通过机器阅卷了),但是主观题就没那么简单了。普通的小测验,一个老师打个分就是了,但重大考试,为了慎重,往往会找多个老师同时打分,然后通过某种算法得出一个最终分,一般而言是平均,但对分差过大的情况会作特殊处理。某种意义上,其实是让多个老师投票投出一个最终得分。再比如,判例法系统中的陪审团,也可以看成是集成学习。(但是各种选秀节目的评委打分就不一定是集成学习了,因为有很多黑箱操作 ;-) 集成学习,也是让多个模型学习同一个问题,然后通过某种投票(voting)机制,得出较优的结果。

从零开始学习python-零基础学python从入门到精通
(图片来源网络,侵删)

(图片来源:KDnuggets)

随机森林,顾名思义,就是找一批决策树来进行决策。用Python代码来表示,就是构建一个决策树的列表,然后让这些决策树“投票”:

从零开始学习python-零基础学python从入门到精通
(图片来源网络,侵删)

trees = [create_tree() for i in range(n)]

predictions = [bagging(trees, sample) for sample in test_data]

从零开始学习python-零基础学python从入门到精通
(图片来源网络,侵删)

其中,create_tree函数用于构建决策树,限于篇幅,具体定义这里省略(可以参考各决策树教程)。

bagging在原数据集的基础上创建多个子数据集,然后分给多棵决策树,让这些决策树分别学习,最后通过某种投票机制(比如平均数、中位数、众数)集成多棵决策树的成果。

比如,通过众数:

predictions = [predict(trees, sample) for sample in test_data]

bagging_prediction = max(set(predictions), key=predictions.count)

好了,随机森林的关键思路就是这些了。详细的代码示例这里就不贴了,可以自行在GitHub等地搜索。

另外,绝大多数情况下,并不需要从零开始实现随机森林,可以直接利用现成的库,比如sklearn.ensemble就提供了RandomForestClassifier。

当然,从零开始实现,对于理解随机森林还是很有帮助的。

***加载中...

你好,楼主,这是我之前通过自学python语言编码实现的,不过被我拿来表白头条了哈哈哈。

言归正传,

教程

本教程分为2个步骤。

  1. 计算分割。
  2. 声纳数据集案例研究。

这些步骤为您需要将随机森林算法应用于自己的预测建模问题奠定了基础。

1.计算分割

在决策树中,通过利用最低成本找到指定属性和该属性的值方法来确定分割点。

对于分类问题,这个成本函数通常是基尼指数,它计算分割点创建的数据组的纯度。基尼指数为0是完美纯度,其中在两类分类问题的情况下,将类别值完全分成两组。

在决策树中找到最佳分割点涉及到为每个输入的变量评估训练数据集中每个值的成本。

对于装袋和随机森林,这个程序是在测试数据集的样本上执行的,并且是可替换的。更换取样意味着同一行(数据)会不止一次的被选择并将其添加到取样中。

我们可以优化随机森林的这个程序。我们可以创建一个输入属性样本来考虑,而不是在搜索中枚举输入属性的所有值。

这个输入属性的样本可以随机选择而不需要替换,这意味着每个输入属性在查找具有最低成本的分割点的过程中只被考虑一次。

下面是实现此过程的函数名称get_split()。它将数据集和固定数量的输入要素作为输入参数进行评估,此数据集可能是实际测试数据集的一个样本。

helper函数test_split()用于通过候选分割点拆分数据集,gini_index()用于根据创建的行组来计算给定拆分的花费。

我们可以看到,通过随机选择特征索引并将其添加到列表(称为特征)来创建特征列表,然后枚举该特征列表并且将测试数据集中的特定值评估作为分割点。

2.声纳数据集案例研究

在本节中,我们将把随机森林算法应用到声纳数据集。

该示例***定数据集的CSV副本位于当前工作目录中,文件名为sonar.all-data.csv。

首先加载数据集,将字符串值转换为数字,并将输出列从字符串转换为0和1的整数值。这可以通过使用帮助器函数load_csv(),str_column_to_float()和str_column_to_int()来加载和预备数据集。

我们将使用k-fold交叉验证来估计未知数据的学习模型的性能。这意味着我们将构建和评估k个模型,并将性能估计为平均模型误差。分类准确性将用于评估每个模型。这些工具或是算法在cross_validation_split(),accuracy_metric()和evaluate_algorithm()***函数中提供。

我们也将使用适合套袋包括***功能分类和回归树(CART)算法的实现)test_split(拆分数据集分成组,gini_index()来评估分割点,我们修改get_split()函数中讨论在前一步中,to_terminal(),split()和build_tree()用于创建单个决策树,预测()使用决策树进行预测,subsample()创建训练数据集的子***样,以及bagging_predict()用决策树列表进行预测。

开发了一个新的函数名称random_forest(),首先根据训练数据集的子样本创建一个决策树列表,然后使用它们进行预测。

正如我们上面所说的,随机森林和袋装决策树之间的关键区别是对树的创建方式中的一个小的改变,这里是在get_split()函数中。

完整的例子如下所示。

这个有点多哈,谢谢阅读!

我是会敲代码的球鞋迷,您也可以关注我,我们一起学习python,我会定期分享一些python代码及学习心得,欢迎交流!

到此,以上就是小编对于从零开始学习python的问题就介绍到这了,希望介绍关于从零开始学习python的1点解答对大家有用。