kaggle房价预测(kaggle房价预测论文)
今天给各位分享kaggle房价预测的知识,其中也会对kaggle房价预测论文进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、实用随机森林 - 针对时间序列的 kaggle 技巧
- 2、kaggle怎么写作业
- 3、Kaggle 快速模型之 Random Forrest 随机森林
- 4、python gradientboostingregressor可以做预测吗
- 5、Kaggle简介
实用随机森林 - 针对时间序列的 kaggle 技巧
这节课我们主要讲讲:
1。OOB 和 validation 的数值计算上区别
2。时间序列模型建立时,如何处理 validation 和 test 与模型精度控制的小技巧
3。去掉时间相关的元素 —— 消除训练集里面过拟合的特征
---
这两个数值有 2 点不一样:
a。使用的数据不一样
为了更好的得到模型验证的结果,所以我们往往使用一种比较特别的 train/validation split 方式,我们不是直接随机分类得到,而是根据时间顺序,取时间更为久远的作为 train set,取时间较为近的作为 validation set。因此,OOB计算的数据其实来自于 train set,是整个train set 里面随机收取的数据,其结果更适用于解释模型是否过拟合。而 validation set 则完全是时间纬度上更新的数据,因此其结果更适合用于说明模型的泛化情况。
b。数据量不一样
在 OOB 中,你的数据是 out of bag 数据,因此每个数据被用于计算的情况,是它没有被 train 选中的情况,这里的数据被选中的概率就低于 100%。而在 validation set 里面,每一次每个数据被会被计算,因此,计算概率是 100%。因此两者的数据计算均衡性有差别,通常我们认为,OOB 会比实际情况更低一点,因为他的滚哗虚 randomness 更低。
在时间序列模型构建时,我们的系统误差往往来自于通过过去去预测未来的外推误差。那在 Kaggle 或者工程上实现时,我们可以考虑这个小技巧:
- 在预测时,使用时间分区的方式把数据集分成 train 和 validation 集,通过预测的方式来估算那种模型的精度比较高,并保留这个模型并将 train 和 validation 融合在一起进一步训练模型,进而用于实际生产或者 kaggle 的 leaderboard。
- 在确定哪种模型比较好的时候,我们可以以时间间隔作为区分来测试:
- 随机抽样(全体)
- 上半个月的数据(1日 - 15日)
- 过去2周(8月1日至15日)
- 下半个月的数据(15日至30日)
因为 Kaggle 里面追求的是小数点后几位的优势,因此一点点提高都是十分必要的。那么我们继续来优化模型。
从逻辑上来讲,时间序列元素中与时间相关的部分可能随着时间的变化而变化,因此他对于未来的精度预测可能带有副作用,尽管在 train set 和 validation set 上表现较好,但是未必会在真实的表现上比较好。因此我们这里要作的反而是去掉时间序列元素的干扰,去尽量提取跟时间无关的、更为本质的关系,用于对未来的预测。
这个理论听上去很有道理,那么实践的时候是否真的如此呢?我们来试一试。
在这里我们构建一个 'is_valid' 特征作为预测的 target,随后在 train set 里面把 这个 'is_valid' 特征标记为 True,在 validation set 里面把这个特征标记为 False。那么我们这样训练出来的 model 就告诉我们是否所有的参数都可以被完美预测。
ok,这里 score 为 0.999。表明所有的样本都可以被完美预测。随后,我们继续输出 feature importance,通过这个来看看完美预测的这些特征里面,哪些的重要性过高,这些可能就是造成现阶段芦源过拟合的元凶。
同时我们进一步比较头三个元素,在 trian set 和 validation set 里面的 describe 会发现,两者完全不一样。这些参数可能对于线性模型很重要,但是对于随机森林就可能是拖后腿的特征了。那么让我们 drop 掉这 3 个,来再作一次随机森林训练。
OK,这次也 score 挺高的,表示解释度特别高。我们再来看看影响比较高的 feature 是哪些。
把两次排名前 3 的分别拿出来,进行影响分析,就是去掉之后,计算对最大燃终 score 的影响。
从数据上来看,我们可以去掉其中的 3 个影响不大的,来提升其他特征的有效性。因为在树叶数量相等的情况下,在对最终结果不有效的特征上浪费时间,会造成很大的浪费。
OK,分数达到 0.9 拉!我很满意。那么,最终模型我们就加大树的棵树(比如,n_estimators=160),来作一个最终模型吧。
记得把有效的 features 保存下来。
笔记:我们往往进行小范围的测试之后,再对整体数据进行学习和训练。因此,往往是白天测试优化模型,晚上训练模型。
kaggle怎么写作业
通过代码进行。
首先导入需要的模块与读路径找到需要的数据训练集与测试升唯集。
代码中显示一下前五个数据,大致浏览了吵宴培解一下具体影响房价的因素,可以看到有多少个祥激因素影响房价,ID+Priceisincluded,实际上79个,然后在操作前了解一下数据的size。
[img]Kaggle 快速模型之 Random Forrest 随机森林
随机森林 RF 在 Kaggle 大名远播,称霸很久。
那么,我们这里就先聊聊 原因 。以下分析来自 University of San Francisco, CS 硕士课程。
随机森林(文中记为 RF)有以下 5 个优点:
1。用法 :RF 支持针对连续对象的回归算法,也支持针对离散对象的分类算法。
2。过拟合 :RF 不太容易过拟合,因为 RF 本质上是模型集成(model ensemble),从 Leo Breiman 的理论来看 RF 也不会因为 树 数量的增加,而导致过拟合,因为这些数都是集合在一起的单稿升独模型,效果不好的树会被 downvote。但是使用 out of bagging 的方法是推荐来帮助 RF 减少过拟合的方法,就是保留一个 validation 数据集在多个模型中选取评价指标更好的模型。
3。范化能力 :RF 的范化能力也比较好,比较能够处理异常值,不太容易出现波动。
4。数据分布要求 :不像线性模型,RF 也不要求数据分布符合正态分布,来得到统计结果上的近似。因此任意的数据分布都可以使用 RF。
5。特征工程 :对于一些简单的线性模型,为了增加特征,我们往往需要增加 这样的特征来作为模型的输入,帮助模型构建更多的特征。但是在 RF 中,这些基础的特征工程是不必要的。但是,需要记得,额高阶特征工程可以帮助增加 RF 的精度(类似日期上的处理,提取出月份,周数等)。
6。数据预处理 :类似神经网络需要对数据作预处理来得到 0 ~ 1 之间的数据分布,在 RF 这里往往都不太需要,因此 RF 对于数据的要求也不高。
讲完了 RF 的特性之后,我们似乎发现 RF 是键缺老万能,但是他真的这么万能麻?我们再来看看 机器学习届广为流传的两个理论,在 RF 上是不是也会存在。
a。高维诅咒 :这个理论是说随着数据纬度的增加,即数据特征的增加,所有的数据都会十分的扮段分散,使得计算数据点之间的距离变得没有意义,也就是说模型的预测变得不可能实现。当然理论上的确是可以如此证明,这个理论在数学上完全没有问题。但是到了实际的世界上,我们的所有数据其实互相之间是存在依赖的,因此你会发现,这个高维距离始终有意义,并且真实地提供模型预测。
b。无免费的午餐理论 :这个理论名字就很明显,没有一个模型可以适用于各种数据。当然,从数学理论上可以验证这个结论。但是在实际的工作中,RF 是相对比较全面的一个模型,我们总是可以用他先作出一个 benchmark ,再来优化。尤其是 Kaggle 等赛事上,对模型的精度要求十分明确,我们无需在数据的其他层面上(如收集、确认等)作任何的工作。RF 是很适合开始的模型。
那下节内容,我们就可以说说理论以外的操作了。
python gradientboostingregressor可以做预测吗
可以
最近项目中涉及基于Gradient Boosting Regression 算法拟合时间序列曲线的内容,袜册利用python机器学习包 scikit-learn 中的GradientBoostingRegressor完成
因此就学习了下Gradient Boosting算法,在这里分享下我的理解
Boosting 算法简介
Boosting算法,我理解的就是两个思想:
1)“三个臭皮匠顶个诸葛亮”,一堆弱分类器的组合就可以成为一个强分类器;
2)“知错能改,善莫大焉”,不断地在错误中学习,迭代来降低犯错概率
当然,要理解好Boosting的思想,首先还是从弱学习算法和强学习算法来引入:
1)强学习算法:存在一个多项式时间的学习算法以识别一组概念,且识别的正确率很高;
2)弱学习算法:识别一组概念的正确率仅比随机猜测略好;
Kearns Valiant证明了弱学习算法与强学习算法的等价问题,如果两者等价,只需找到一个比随机猜测略好的学习算法,就可以将其提升为强学习算法。
那么是怎么实现“知错就改”的呢?
Boosting算法,通过一系列的迭代来优化分类结果,每迭代一次引入一个弱分类器,来克服现在已经存在的弱分类器组合的shortcomings
在Adaboost算法中,这个shortcomings的表征就是权值高的样本点
而在Gradient Boosting算法中,这个shortcomings的表征就是梯度
无论是Adaboost还是Gradient Boosting,都是通过这个shortcomings来告诉学习器怎么去提升模型,也就是“Boosting”这个名字的由来吧
Adaboost算法
Adaboost是由Freund 和 Schapire在1997年提出的,在整个训练集上维护一个分布权值向量W,用赋予权重的训练集通过弱分类算法产生分类假设(基学习器)y(x),然后计算错误率,用得到的错误率去更新分布权值向量w,对错误分类的样本分配更大的权值,正确分类的样本赋予更小的权值。每次更新后用相同的弱分类算法产生新的分类假设,这些分类假设的序列构成多分类器。对这些多分类器用加权的方法进行联合,最后得到决策结果。
其结构如下图所示:
前一个学习器改变权重w,然后再经过下一个学习器,最终所有的学习器共同组成最后的学习器。
如果一个样本在前一个学习器中被误分,那么它所对应的权重会被加重,相应地,答此被正确分类的样本的权重会降低。
这里主要涉及到两个权重的计算问题:
1)样本的权值
1 没有先验知识的情况下,初始的分布应为等概分布,样本数目为n,权值为1/n
2 每一次的迭代更新权值,提高分错样本的权重
2)弱学习器的权值
1 最后的强学习器是通过多个基学习器通过权值组合得到的。
2 通过权值体现不同基学习器的影响,正确率高的基学习器权重高。实际上是分类误差的一个函数
Gradient Boosting
和Adaboost不同,Gradient Boosting 在迭代的时候选择梯度下降的方向来保证最后的结果最好。
损失函数用来描述模型的“靠谱”程度,假设模型没有过拟合,损失函数越大,模型的错误率越高
如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度方向上下降。
下面清好迅这个流程图是Gradient Boosting的经典图了,数学推导并不复杂,只要理解了Boosting的思想,不难看懂
这里是直接对模型的函数进行更新,利用了参数可加性推广到函数空间。
训练F0-Fm一共m个基学习器,沿着梯度下降的方向不断更新ρm和am
GradientBoostingRegressor实现
python中的scikit-learn包提供了很方便的GradientBoostingRegressor和GBDT的函数接口,可以很方便的调用函数就可以完成模型的训练和预测
GradientBoostingRegressor函数的参数如下:
class sklearn.ensemble.GradientBoostingRegressor(loss='ls', learning_rate=0.1, n_estimators=100, subsample=1.0, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort='auto')[source]¶
loss: 选择损失函数,默认值为ls(least squres)
learning_rate: 学习率,模型是0.1
n_estimators: 弱学习器的数目,默认值100
max_depth: 每一个学习器的最大深度,限制回归树的节点数目,默认为3
min_samples_split: 可以划分为内部节点的最小样本数,默认为2
min_samples_leaf: 叶节点所需的最小样本数,默认为1
……
可以参考
官方文档里带了一个很好的例子,以500个弱学习器,最小平方误差的梯度提升模型,做波士顿房价预测,代码和结果如下:
1 import numpy as np 2 import matplotlib.pyplot as plt 3 4 from sklearn import ensemble 5 from sklearn import datasets 6 from sklearn.utils import shuffle 7 from sklearn.metrics import mean_squared_error 8 9 ###############################################################################10 # Load data11 boston = datasets.load_boston()12 X, y = shuffle(boston.data, boston.target, random_state=13)13 X = X.astype(np.float32)14 offset = int(X.shape[0] * 0.9)15 X_train, y_train = X[:offset], y[:offset]16 X_test, y_test = X[offset:], y[offset:]17 18 ###############################################################################19 # Fit regression model20 params = {'n_estimators': 500, 'max_depth': 4, 'min_samples_split': 1,21 'learning_rate': 0.01, 'loss': 'ls'}22 clf = ensemble.GradientBoostingRegressor(**params)23 24 clf.fit(X_train, y_train)25 mse = mean_squared_error(y_test, clf.predict(X_test))26 print("MSE: %.4f" % mse)27 28 ###############################################################################29 # Plot training deviance30 31 # compute test set deviance32 test_score = np.zeros((params['n_estimators'],), dtype=np.float64)33 34 for i, y_pred in enumerate(clf.staged_predict(X_test)):35 test_score[i] = clf.loss_(y_test, y_pred)36 37 plt.figure(figsize=(12, 6))38 plt.subplot(1, 2, 1)39 plt.title('Deviance')40 plt.plot(np.arange(params['n_estimators']) + 1, clf.train_score_, 'b-',41 label='Training Set Deviance')42 plt.plot(np.arange(params['n_estimators']) + 1, test_score, 'r-',43 label='Test Set Deviance')44 plt.legend(loc='upper right')45 plt.xlabel('Boosting Iterations')46 plt.ylabel('Deviance')47 48 ###############################################################################49 # Plot feature importance50 feature_importance = clf.feature_importances_51 # make importances relative to max importance52 feature_importance = 100.0 * (feature_importance / feature_importance.max())53 sorted_idx = np.argsort(feature_importance)54 pos = np.arange(sorted_idx.shape[0]) + .555 plt.subplot(1, 2, 2)56 plt.barh(pos, feature_importance[sorted_idx], align='center')57 plt.yticks(pos, boston.feature_names[sorted_idx])58 plt.xlabel('Relative Importance')59 plt.title('Variable Importance')60 plt.show()
可以发现,如果要用Gradient Boosting 算法的话,在sklearn包里调用还是非常方便的,几行代码即可完成,大部分的工作应该是在特征提取上。
感觉目前做数据挖掘的工作,特征设计是最重要的,据说现在kaggle竞赛基本是GBDT的天下,优劣其实还是特征上,感觉做项目也是,不断的在研究数据中培养对数据的敏感度。
Kaggle简介
Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)2010年在墨尔本创立的,主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。该平台已经吸引了80万名数据科学家的关注,这些用户资源或许正是吸引谷歌的主要因素。
2019年1月Kaggle人类蛋白质图像深度学习分类大赛,昂钛客[angtk.ai]获扰游前1银磨宏2铜。
扩展资料:
Kaggle这一平台已经吸引了许多科学家和开发者的关注,他们也纷纷入驻这一平台。这些科学家和开发者资源正是谷歌看中他们的地方。
这项技术可以直接从图片预测地标,以帮助人们更好地理解和整理他们的照片集。这项竞赛要求参赛者建立能够在挑战性测试图像数据集中识别正确地标(如果有)的模型。
参考资料缓清来源:
百度百科-Kaggle
kaggle房价预测的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于kaggle房价预测论文、kaggle房价预测的信息别忘了在本站进行查找喔。
本文 zblog模板 原创,转载保留链接!网址:https://19mj.com/post/1350.html
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。