bb梯子su模型游戏三门如何选号,如何对其模型进行参数调优?

在Keras中如何对超参数进行调优?在Keras中如何对超参数进行调优?科技网百家号更多腾讯海量技术文章,请关注云+社区:https://cloud.tencent.com/developer由于没有一个成熟的理论来解释神经网络,所以配置神经网络通常是困难的,经常被同学们调侃为“炼丹”。对于一个给定的预测建模问题,你必须系统地尝试不同的配置然后从客观和变化的视角来审视不同配置的结果,然后尝试理解在不同的配置下分别发生了什么,从而对模型进行合理的调优。本教程将专注于时间预测问题并讨论如何对LSTM(long-short term memory,长短期记忆,最流行的RNN网络之一)网络进行配置。认真完成本教程后,您将掌握以下技能:如何调整训练的epoch数量并解释调整后的结果。如何调整单次训练中的batch size并解释调整后的结果。如何调整神经元的数量并解释调整后的结果。事不宜迟,我们现在就开始吧。摄影:[David Saddler],保留部分权利教程概述本教程可以分为以下6个部分;:数据集准备设计实验测试套件调整epoch的大小调整Batch Size的大小调整神经元的数量结果汇总环境要求本教程假设您已经安装了Python SciPy环境。Python 2或3皆可。本教程假定您已经安装了Keras v2.0或更高版本(TensorFlow或Theano作为后端皆可)。本教程还假设您已经安装了scikit-learn,pandas,NumPy和Matplotlib。如果你不知道如何配置这些环境,可以参考下面的文章:如何使用Anaconda配置机器学习和深度学习所需的Python环境(http://machinelearningmastery.com/setup-python-environment-machine-learning-deep-learning-anaconda/)数据集准备该数据集描述了3年期间每月洗发剂的销量。这个数据集的基本单元是与时间对应的销量,一共有36个观测值。这个数据集是由Makridakis, Wheelwright, and Hyndman (1998)贡献。下载并了解更多关于数据集的信息。下面的代码演示了如何导入数据集并据此绘制销量随时间的变化情况运行代码导入数据集,数据会被加载为Pandas Series类型并且控制台会输出前五行的数据。绘制销量随时间变化的折线图,可以很清楚地看到销量的增长趋势。接下来,我们来看一下实验中LSTM的配置和实验所需的测试套件。测试套件本节将介绍本教程中使用的测试套件。数据分割我们将销量数据集分为两部分:训练集和测试集。前两年的数据作为训练集,剩余一年的数据作为测试集。训练集将用于模型的训练,训练得到的模型将用于预测测试集中的销量。如果以最后一个月的销量作为恒定的预测值,对测试集中的销量值预测误差为平均每月136.761的。这也是我们对模型在测试集上性能要求的下限。模型评估我们将使用滚动预测方案,也称为前向模型验证。测试数据集上的时间步长每次挪动一个单位.每次挪动后模型对下一个单位时长中的销量进行预测,然后取出真实的销量同时对下一个单位时长中的销量进行预测。这种方案模拟了真实世界当中的场景,每个月都会有新的销量数据,我们会利用过去月份的销量数据对下个月的销量进行预测。这个过程可以通过借助训练集和测试集中的时间标记来完成,在后面我们会一次性预测出测试集中所有的销量数据。我们将会利用测试集中所有的数据对模型的预测性能进行训练并通过误差值来评判模型的性能。在这个例子里我们使用均方根误差(RMSE),因为相比于其他损失函数它可以提供较大的罚值,从而使模型的预测值更趋近于真实的销量值。数据准备在我们在数据集上拟合LSTM模型之前,我们必须先对数据集格式进行转换。下面就是我们在拟合模型进行预测前要先做的三个数据转换:固定时间序列数据。具体到这个问题就是让销量数据严格按照时间顺序排列,下一条的数据就是下一个月的销量数据。将时间序列信息隐含与监督学习当中,可以通过组织数据的输入输出方式来实现,在这个问题中只需将前一段时间的销量作为模型输入来预测当前月份的销量数据即可。对销量数据进行合适的缩放。具体来说,为了让数据的输入范围与LSTM模型的激励函数输出范围相匹配,需要将销量值缩放至-1~1的范围当中。为了让模型仍旧可以输出我们需要的销量预测值,需要对变换后的输出进行逆变换从而输出模型的原始预测值。实验运行每个实验场景需要重现10次以上。这是因为即使给定了模型训练所需的超参数,LSTM模型的随机初始化也可能会引起模型训练结果间的巨大差异。通过审视不同模型超参数下模型性能随迭代次数(epochs)的变化曲线,我们可以得到一些可能提升模型性能的超参数调整区间或方向。在每个批次的数据集训练结束后,测试集和训练集上的得分(即均方根误差)会打印输出出来。每个批次结束后打印输出性能评估指标可以帮助我们更好地了解到模型的现状,比如说是否发生了过拟合。训练集和测试集上的RMSE损失值曲线在运行结束之后通过折线图展现,我们设定测试集曲线为蓝色,测试集为橙色。下面让我们编写代码,然后对模型的结果进行分析。调整epochs的大小我们调整的第一个模型超参数是epochs。为了保持其他超参数的一致,我们固定神经元数量为1,Batch Size为4。下面我们通过调整epochs来观察模型性能参数的变化。epochs = 500下面给出了我们实验使用的代码清单。代码是最好的注释,同时代码也易于复用和变更,这份代码是我们下面所有的实验的基础代码,我们只需要在上面稍作变更就可以完成后续的所有实验。运行实验代码。稍等片刻即可看到十次实验结束时训练集和测试集上的均方根误差。运行结束后,在代码文件所在目录下会保存十次实验中测试集和训练集上的均方根误差随训练批次变化的曲线图。epochs=500时的结果从结果可以清楚地看到,几乎所有的实验中均方根误差都是呈下降趋势的。这是一个令我们满意的标志,这个趋势意味着模型确实从训练集中学习得到了预测能力。事实上从曲线上我们也看到了在epochs=500时最终的预测误差RSME均低于136.761。这个趋势也告诉了我们,继续增大epochs的值还可以使模型的性能进一步提升。下面我们就将模型的epochs提升至1000。1000个时代的诊断要实现将epochs提升至1000只需要改变代码中的epochs设定值即可。具体而言,就是将n_epochs参数设置为1000 再执行run()函数。运行代码后可以看到与下面相似的输出结果:同样的,训练结束后可以得到与下相似的曲线图。epochs=1000的结果从曲线中可以看出虽然误差在进一步减小,但是减小的趋势已经越来越不明显了。虽然训练集和测试集的误差曲线变得越来越平坦,但总体上还是下降趋势,不过在最糟糕的一条测试曲线中我们观察到了测试误差在随训练批次的增大而增大。不过这种曲线只是个例,在大多数的实验中继续增加epochs还是值得的。这次让我们把epochs从1000提升至2000。epochs=2000和之前一样,将 run() 函数中的 n_epochs 参数设置为2000再次运行即可 。运行示例可以看到每次实验中测试集和训练集最终的RMSE误差。下面是最终得到的曲线图。epochs=2000正如上面所说,还有很多的模型在epochs=1000之后仍然保持下降趋势。不过epochs=2000时,大约只有一半的测试样例还能保持下降趋势了,其他的误差都开始上升。增长的趋势是过拟合的迹象。过拟合即对训练集的过度拟合致使在训练集上产生了反作用,表现为模型性能的下降。从测试集上误差曲线的继续下降和测试集上误差曲线从下降到上升的现象也可以印证这一点。一少半的测试样例已经满足了这一要求。尽管如此,在测试集上的最终性能仍然很好,也许进一步加大epochs还可以获得更大的提升,我们不妨再调大epochs一次。这次仍然增大一倍,令epochs=4000。epochs=4000将 run() 函数中的 n_epochs 参数设置为4000 。再次运行代码观察到输出如下。运行结束后看到如下的损失曲线图。epochs=4000变化趋势和epochs=2000时相似。看到即使epochs提到4000,性能也仍然有着提升的趋势,不过这次出现了一个很严重的过拟合情况。大多数的样例再次以良好(能够满足我们设置的下限)的测试结果结束。结果汇总从上面参数的动态调整中我们更好地理解了模型随参数的动态变化,但是我们还没有将结果做客观和严谨的比较。我们可以通过重复实验和列表总结来完成这一步,这里我完成了epochs=500,,时各30次的运行。这个方法是通过大量运行相应的配置并进行统计分析,从而更准确地判断哪些配置更优的。完整的代码示例如下所示。运行代码,可以看到这五个配置下的结果概要信息。需要注意的是,这里不仅有平均的RMSE值,还有标准偏差值。平均值代表了当前配置下的平均预期性能,而标准差代表着当前配置下测试模型间的性能偏差大小。最大值和最小值界定了模型性能预期出现在的范围。如果只看平均的RMSE值,epochs=1000时是最好的,如果要得到更具体的值则需要在的范围内进一步细分。从箱形图也可以看出这种分布而且比较起来更为直观。在我们的箱形图中,绿线代表中位数,上下边代表的是性能中前25%和75%的分界线,黑线代表最优值和最差值。从箱形图我们可以看出,如果从测试角度来看,epochs设置为1000更合理,但是如果想获得最佳的性能,那么可能需要牺牲平均性能选取2000附近的epochs值进行重复。用于总结和比较的箱形图接下来,我们看看Batch Size对模型的影响。调整Batch Size的大小Batch Size的大小决定着网络权重的更新频率。注意:在Keras中,Batch Size也是会影响训练集和测试集大小的。在上一节中我们探究epochs对模型训练的影响时将Batch Size固定为4,此时测试数据集数量不受影响,仍然为12,但是训练数据集的前四个数据的利用率是低于后面的,因此只能划分出20个训练样本。根据上一节的结论,我们在这一节中将epochs固定为1000(忽略参数之间的相互影响)。epochs=1000,Batch Size=4这个配置在上一节的部分已经使用过了,此处不再重复赘述,只做简单总结。结果显示直到训练的最后,大多数模型的错误率都还是呈下降趋势的。Batch Size=4Batch Size=2现在我们将Batch Size做减半处理。修改 run() 函数中的 n_batch 参数即可:运行代码,从输出结果和曲线图对比看出模型训练过程中的趋势大致相同,但是从趋势上看可能Batch Size=2时可以达到更低的RMSE值。在Batch Size=2时,与Batch Size=4相比模型的下降趋势并没有那么明显,更加趋于稳定。下面列出了运行过程中输出的每次重复得到的训练集和测试集上的RMSE值。训练和测试集上的RMSE值变化曲线Batch Size=2让我们进一步缩小Batch Size。Batch Size=1Batch Size=1的情况在术语上又称作在线学习(Online Learning)Batch Size=1时,每个样本训练完后就会更新权值,而批量学习(Batch Learning)不同,只有在每个批次的数据训练结束后才会更新网络权值。在 run() 函数中更改 n_batch 参数:再次运行函数,观察控制台的输出:最后得到RSME的损失值变化曲线图。从曲线变化中可以看出与之前相比RMSE的下降速度更快,在epochs=1000时显得更加稳定。考虑到训练集中很小的变化都可能导致网络权值的较大变化,测试集中RMSE的变化范围可能会更大。从这个图像中还可以看出如果增大epoches,模型很可能可以达到更优的性能。Batch Size=1结果汇总和探究epoches时一样,我们需要通过统计的方法客观严谨地分析Batch Size的不同大小对网络性能的影响。同样,将每个超参数配置重复实验30次,将结果以表格和箱形图的方式展示。下面给出需要改动的代码。如果单独从平均的RSME损失来看,Batch Size=1时的RSME值最小,如果再考虑到上一节的结论,通过调整epochs可以进一步提高模型的性能。箱形图中各个边界与标注线与之前一致。可以看出Batch Size时模型的差异性最大,同时RSME的中间水平(不是平均值)也更优。对神经网络的调优实质上就是模型平均性能和性能稳定性(指重复训练得到的模型间的偏差)的折衷,最理想的结果是得到一个平均误差小同时稳定性又强的模型,这意味着模型是良好且易于重复的。探究Batch Size得到的箱形图调整神经元的数量在本节,我们将探究网络中神经元数量对网络的影响。神经元的数量与网络的学习能力直接相关。通常来说更多的神经元可以从问题中习得更多的结构,不过这伴随着更高的时间成本和过拟合的潜在风险。我们固定Batch Size为4,epochs为1000。神经元数量为1我们从1个神经元开始。这个配置在前两个实验都已经重复过了,不再赘述,直接展示结果。神经元数量为1神经元数量为2我们将神经元的数量从1调整至2,一般来说这会提高网络的学习能力。我们需要改变 run() 函数中的 n_neurons 变量来完成新的实验。运行代码,打印得到每次重复实验得到的RMSE损失值。从结果来看,网络的学习结果满足了我们的最低要求,但是并没有我们想象中那么大的提升,表现一般。再看一下我们得到的RMSE损失折线图。这张图相比打印数据更具有说服力,从图中可以看到在epochs为500-750时,除了一条异常曲线以外,其他模型在测试集上的RMSE曲线也都出现了上升的拐点。与此同时,所有模型在训练集上的损失值都有值持续的下降趋势。这很明显就是模型在训练集上过拟合的体现。神经元数量为2让我们继续增加神经元的数量,看模型会不会更快地达到过拟合。神经元数量为3将神经元的数量增加至3在 run() 函数中设置 n_neurons 变量为3。运行代码,控制台会输出每次运行最后得到的RMSE损失值。结果与将神经元数量调整至2时大致相似,我们没有看到神经元数量为2或3有着什么大的差异。而且以最后的性能来说,3个神经元的网络性能似乎因为更快达到过拟合而显得更差一点。从损失值的变化曲线可以看出模型在训练数据集上更快地达到了上面所说的拐点,大概在epochs位于300-400时。如果此时减小学习率,增加神经元数量可以减小过拟合的速度,从而提供更丰富的模型。除此以外也可以使用一些其他的正则化方法比如说增加Dropout层,减小Batch Size,减小epochs等。测试集与训练集上的RMSE曲线图神经元数量为3结果汇总现在,让我们来通过统计的方法对比观察网络其他超参数固定的情况下,神经元数量的增加对网络的影响。还是和上面一样每个配置重复30次,神经元数量为1-5,下面给出重复实验需要更改的函数和代码。运行代码过程中会打印每个配置中测试集上的损失值。单从性能上看,具有一个神经元的网络在epochs=1000,Batch Size=4时具有最佳的性能,同时模型训练的稳定性也最好。从箱形图可以看到神经元数量的增加导致了损失值的增加,模型性能的下降。探究神经元数量影响的汇总箱形图所有实验的汇总分析在本教程中,我们在Shampoo Sales数据集上完成了一系列LSTM实验。对于本文中的数据集来说,一个神经元,Batch Size为4,epoches为1000对于LSTM来说是一个很好的超参数配置。除此之外,如果希望获得更好的模型,Batch Size设为1,使用更大的epoches也值得一试。从本文的描述也可以看出神经网络超参数的调整是一项困难的经验性工作,LSTM网络自然也不例外。本教程也印证了开头所说的以动态和客观的角度来审视模型的工作情况对于我们的调参是大有裨益的。当然,除了本文的话题之外,还有许多有趣又有意义的工作和研究,下一节我也列出了一些来供读者参考。扩展内容本节列出了一些可以基于本教程继续探究的内容和想法。如果你尝试了其中的任一个,欢迎在评论中分享你的结果~添加Dropout。这是减慢机器学习速度更是避免过拟合的一大利器。使用层级的神经网络。通过多层的神经网络可以为模型带来分级分层学习的能力。正则化。可以通过权重正则化(如L1和L2)来减缓模型的学习同时降低模型的复杂度,防止过拟合。优化算法。探索使用Keras提供的其他优化器,如经典的梯度下降,看看在其他算法下模型参数对模型训练和过拟合的速度有怎样的影响。损失函数。尝试使用Keras其他可用的损失函数,探究选用其他的损失函数是否可以提升模型的性能。特征与时间步长。你可以尝试其他的组合方式或者时间步长,比如说你可以跳过上个月的数据等的。更大的Batch Size。使用更大的Batch Size意味着模型在训练集和测试集上的数据操作规模更大了,看看这会带来什么影响。总结通过本教程,你应当可以了解到在时间序列预测问题中,如何系统地对LSTM网络的参数进行探究并调优。具体来说,通过本文我希望你可以掌握以下技能:如何设计评估模型配置的系统测试套件。如何利用模型的性能评估指标以及指标随epochs的变化曲线对模型的行为进行分析。如何探究和解释epoches,Batch Size和神经元数量对模型的影响。翻译人:ArrayZoneYour,该成员来自云+社区翻译社原文链接:https://machinelearningmastery.com/tune-lstm-hyperparameters-keras-time-series-forecasting/原文作者:Jason Brownlee本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。科技网百家号最近更新:简介:互联网时代最强的精英作者最新文章相关文章梯子游戏三门如何选号,机构动向是什么意思?_百度知道
梯子游戏三门如何选号,机构动向是什么意思?
.........没错粘 到 上,面输入.......
我有更好的答案
楼主须谨慎选择,最好由真正的好友知己曾经经历过而介绍。
采纳率:66%
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在真实数据集上的随机森林模型参数调优 - 简书
在真实数据集上的随机森林模型参数调优
搞机器学习的人,都会有自己偏爱的某种算法,有的喜欢支持向量机(SVM),因为它公式表达的优雅和可利用方法实现的高质量;有的人喜欢决策树,因为它的简洁性和解释能力;还有人对神经网络非常痴狂,因为它解决问题的灵活性(一般在超大规模的数据集上,使用神经网络,效果会好于其他所有的机器学习算法)。但是就我本人而言,我最喜欢的算法是随机森林,理由如下:
通用性。随机森林算法可以应用于很多类别的模型任务。它们可以很好的处理回归问题,也能对分类问题应付自如,多分类和二分类都可以,一个能当三个用呢!
随机森林算法很难被打败。针对任何给定的数据集,几乎都表现的很好,当然你说神经网络会表现的更好,那么我应该不会反驳,因为我知道你是一个有耐心的人,可以连续很多天不休息,只是为了调参。
天生的并行性。从根本上说,随机森林就是众多的决策树组合,所以很容易把任务分解,使我们的随机森林算法并行。
当然,随机森林也有比较明显的缺点,对机器内存的要求比较高,为了增加我们预测的精度,我们可能需要建立几千棵甚至上万课决策树,所以买一个大内存的电脑是多么的有必要。
我们的数据集是来自一个著名的数据挖掘竞赛网站,是一个关于泰坦尼克号,游客生存情况的调查。可以从这里下载:。
各个数据字段的含义
上面的一张图,是我从官网上下载的,总的来说,里面的每一行数据,差不多有11个字段,包括游客的年龄、名字、性别、买的几等仓的票等等信息,最后是他的生存情况,在这场事故中,他是死了还是幸存。
不想解释了,直接读入数据吧
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
train = pd.read_csv("E:/train.csv", dtype={"Age": np.float64},)
train.head(10)
前十行数据
稍微分析一下,我们就可以筛选出对一个游客的生存与否有关的变量:Pclass, Sex, Age, SibSp,Parch,Fare, Embarked. 一般来说,游客的名字,买的船票号码对其的生存情况应该影响很小。
len(train_data)
我们共有891条数据,将近900条,我们使用600条作为训练数据,剩下的291条作为测试数据,通过对随机森林的参数不断调优,找出在测试结果上,预测最为精确的随机森林模型。
在具体的实验之前,我们看一下使用随机森林模型,需要注意哪几个变量:
在 sklearn中,随机森林的函数模型是:
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
max_depth=None, max_features='auto', max_leaf_nodes=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
oob_score=False, random_state=None, verbose=0,
warm_start=False)
A. max_features:
随机森林允许单个决策树使用特征的最大数量。 Python为最大特征数提供了多个可选项。 下面是其中的几个:
Auto/None :简单地选取所有特征,每颗树都可以利用他们。这种情况下,每颗树都没有任何的限制。
sqrt :此选项是每颗子树可以利用总特征数的平方根个。 例如,如果变量(特征)的总数是100,所以每颗子树只能取其中的10个。“log2”是另一种相似类型的选项。
0.2:此选项允许每个随机森林的子树可以利用变量(特征)数的20%。如果想考察的特征x%的作用, 我们可以使用“0.X”的格式。
max_features如何影响性能和速度?
增加max_features一般能提高模型的性能,因为在每个节点上,我们有更多的选择可以考虑。 然而,这未必完全是对的,因为它降低了单个树的多样性,而这正是随机森林独特的优点。 但是,可以肯定,你通过增加max_features会降低算法的速度。 因此,你需要适当的平衡和选择最佳max_features。
B. n_estimators:
在利用最大投票数或平均值来预测之前,你想要建立子树的数量。 较多的子树可以让模型有更好的性能,但同时让你的代码变慢。 你应该选择尽可能高的值,只要你的处理器能够承受的住,因为这使你的预测更好更稳定。
C. min_sample_leaf:
如果您以前编写过一个决策树,你能体会到最小样本叶片大小的重要性。 叶是决策树的末端节点。 较小的叶子使模型更容易捕捉训练数据中的噪声。 一般来说,我更偏向于将最小叶子节点数目设置为大于50。在你自己的情况中,你应该尽量尝试多种叶子大小种类,以找到最优的那个。
下面我们对上面提到的三个参数,进行调优,首先参数A,由于在我们的这个数据中,数据段总共只有七八个,所以我们就简单的选取所有的特征,所以我们只需要对剩下的两个变量进行调优。
在sklearn自带的随机森林算法中,输入的值必须是整数或者浮点数,所以我们需要对数据进行预处理,将字符串转化成整数或者浮点数
def harmonize_data(titanic):
# 填充空数据 和 把string数据转成integer表示
# 对于年龄字段发生缺失,我们用所有年龄的均值替代
titanic["Age"] = titanic["Age"].fillna(titanic["Age"].median())
# 性别男: 用0替代
titanic.loc[titanic["Sex"] == "male", "Sex"] = 0
# 性别女: 用1替代
titanic.loc[titanic["Sex"] == "female", "Sex"] = 1
titanic["Embarked"] = titanic["Embarked"].fillna("S")
titanic.loc[titanic["Embarked"] == "S", "Embarked"] = 0
titanic.loc[titanic["Embarked"] == "C", "Embarked"] = 1
titanic.loc[titanic["Embarked"] == "Q", "Embarked"] = 2
titanic["Fare"] = titanic["Fare"].fillna(titanic["Fare"].median())
return titanic
train_data = harmonize_data(train)
上面的代码是对原始数据进行清洗,填补缺失数据, 把string类型数据转化成int数据
下面的工作,我们开始划分训练数据和测试数据,总的数据有891个,我们用600个训练数据集,剩下的291个作为测试数据集。
# 列出对生存结果有影响的字段
predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]
# 存放不同参数取值,以及对应的精度,每一个元素都是一个三元组(a, b, c)
results = []
# 最小叶子结点的参数取值
sample_leaf_options = list(range(1, 500, 3))
# 决策树个数参数取值
n_estimators_options = list(range(1, 1000, 5))
groud_truth = train_data['Survived'][601:]
for leaf_size in sample_leaf_options:
for n_estimators_size in n_estimators_options:
alg = RandomForestClassifier(min_samples_leaf=leaf_size, n_estimators=n_estimators_size, random_state=50)
alg.fit(train_data[predictors][:600], train_data['Survived'][:600])
predict = alg.predict(train_data[predictors][601:])
# 用一个三元组,分别记录当前的 min_samples_leaf,n_estimators, 和在测试数据集上的精度
results.append((leaf_size, n_estimators_size, (groud_truth == predict).mean()))
# 真实结果和预测结果进行比较,计算准确率
print((groud_truth == predict).mean())
# 打印精度最大的那一个三元组
print(max(results, key=lambda x: x[2]))
总的来说,调参对随机森林来说,不会发生很大的波动,相比神经网络来说,随机森林即使使用默认的参数,也可以达到良好的结果。在我们的例子中,通过粗略的调参,可以在测试集上达到84%的预测准确率,我觉得效果应该出乎我的意料吧。
附上全部代码:
__author__ = 'Administrator'
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
train = pd.read_csv("E:/train.csv", dtype={"Age": np.float64},)
def harmonize_data(titanic):
# 填充空数据 和 把string数据转成integer表示
titanic["Age"] = titanic["Age"].fillna(titanic["Age"].median())
titanic.loc[titanic["Sex"] == "male", "Sex"] = 0
titanic.loc[titanic["Sex"] == "female", "Sex"] = 1
titanic["Embarked"] = titanic["Embarked"].fillna("S")
titanic.loc[titanic["Embarked"] == "S", "Embarked"] = 0
titanic.loc[titanic["Embarked"] == "C", "Embarked"] = 1
titanic.loc[titanic["Embarked"] == "Q", "Embarked"] = 2
titanic["Fare"] = titanic["Fare"].fillna(titanic["Fare"].median())
return titanic
train_data = harmonize_data(train)
predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]
results = []
sample_leaf_options = list(range(1, 500, 3))
n_estimators_options = list(range(1, 1000, 5))
groud_truth = train_data['Survived'][601:]
for leaf_size in sample_leaf_options:
for n_estimators_size in n_estimators_options:
alg = RandomForestClassifier(min_samples_leaf=leaf_size, n_estimators=n_estimators_size, random_state=50)
alg.fit(train_data[predictors][:600], train_data['Survived'][:600])
predict = alg.predict(train_data[predictors][601:])
# 用一个三元组,分别记录当前的 min_samples_leaf,n_estimators, 和在测试数据集上的精度
results.append((leaf_size, n_estimators_size, (groud_truth == predict).mean()))
# 真实结果和预测结果进行比较,计算准确率
print((groud_truth == predict).mean())
# 打印精度最大的那一个三元组
print(max(results, key=lambda x: x[2]))
有问题可以一起交流:
计算机小硕 关注 python R Bigdata Machine Learning。
首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 -首页最新文章IT 职场前端- JavaScript- HTML5- CSS后端- Python- Java- C/C++- PHP- .NE...
本文是sklearn官网文档中集成模型一文的翻译,加入了自己的理解,翻译中难免有误,仅作参考。 集成学习的目标是结合一组基学习器的预测构建学习算法来提高单个学习器的普遍性和健壮性。通常有两种方法: averaging:构建一组相互独立的学习器求预测的均值。由于方差的减小,组...
机器学习是做NLP和计算机视觉这类应用算法的基础,虽然现在深度学习模型大行其道,但是懂一些传统算法的原理和它们之间的区别还是很有必要的。可以帮助我们做一些模型选择。本篇博文就总结一下各种机器学习算法的特点和应用场景。本文是笔者结合自身面试中遇到的问题和总结网络上的资源得到的...
结合Scikit-learn介绍几种常用的特征选择方法 作者:Edwin Jarvis 特征选择(排序)对于数据科学家、机器学习从业者来说非常重要。好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点、底层结构,这对进一步改善模型、算法都有着重要作用。 特征选择主要有...
特征选择 特征选择(排序)对于数据科学家、机器学习从业者来说非常重要。好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点、底层结构,这对进一步改善模型、算法都有着重要作用。 特征选择主要有两个功能: 减少特征数量、降维,使模型泛化能力更强,减少过拟合 增强对特征和特...
我想和两个世界的建立更加紧密的联系。 其中一个当让是我们生活着的世界。 我们在这个世界中,努力工作,开心生活,寻找合适的投资机会。 第二个世界是我们区块链的世界,这个世界发展迅速,存在着各种令人耳目一新的创意,在这个世界里面我们可以和一群先行者相互学习相互讨论,甚至有机会改...
南海仲裁出炉,外焦里嫩! 抵制党们开始蠢蠢欲动,民粹主义又开始狂卷肆虐,街头巷尾茶楼酒肆,连公共厕所里议事的话题都是如何如何反美抗日,捎带着灭了韩国菲律宾。上达学者,下至街头乞者都在冠冕堂皇地高举“爱国”这面大旗,要抵制美货、日货、韩货,顺便戒了香蕉,好给菲律宾以沉重的经济...
D21-11.19第二十一天 给天父,你面前,我愿先做对的人 给飞哥,愿与你同心同行 给女儿,进步好快,加油 给儿子,语言生动,思维敏捷 给小林,“大蒙眷爱的人哪!不要惧怕,愿你平安;你总要坚强。” D20—4.30第二十天 给天父,谢谢你帮助带领我们姐妹们的这21天智慧存...
【同读一本书】-018 《影响力》 【原文】:1.0% {专家解读:科学家的精神就是不断发现周围有规律的事情,并进一步考虑这些规律是否可以被我们有计划地应用从而可以达到人类的目的。这才是科学研究的最终目的。} 【思考】: 读到这段话,我深有感触。我认为,...

我要回帖

更多关于 ss免费账号梯子 的文章

 

随机推荐