Kaggle 自行车租赁预测比赛项目实现
作者:大树
更新时间:01.20
email:59888745@qq.com
数据处理,机器学习
回主目录:2017 年学习记录和总结
Kaggle上有很多有意思的项目,大家得空可以试着做一做,其中有个关于香港赛马预测的项目,若大家做的效果好, 预测的结果准确度高的话,可以轻松的 get money 了,记得香港报纸有报道说有个大学教授通过统计学建模 进行赛马赢了5000万港币,相信通过机器学习,深度学习,一定可以提高投注的准确度,恭喜大家发财阿,加油学吧~~Kaggle自行车租赁预测比赛,这是一个连续值预测的问题, 也就是我们说的机器学习中的回归问题,咱们一起来看看这个问题。这是一个城市自行车租赁系统,提供的数据为2年内华盛顿按小时记录的自行车租赁数据,其中训练集由每个月 的前19天组成,测试集由20号之后的时间组成(需要我们自己去预测)。Kaggle自行车租赁预测比赛:https://www.kaggle.com/c/bike-sharing-demand1.加载数据 2.数据分析 3.特征数据提取 4.准备训练集数据,测试集数据 5.模型选择,先用自己合适算法跑一个baseline的model出来,再进行后续的分析步骤,一步步提高。 6.参数调优,用Grid Search找最好的参数 7.用模型预测打分
#load data, review the fild and data type import pandas as pddf_train = pd.read_csv('kaggle_bike_competition_train.csv',header=0) df_train.head(5) df_train.dtypes
datetime object season int64 holiday int64 workingday int64 weather int64 temp float64 atemp float64 humidity int64 windspeed float64 casual int64 registered int64 count int64 dtype: object
#look the data rows,columns df_train.shape
(10886, 12)
#看看有没有缺省的字段, 没有发现缺省值 df_train.count()
datetime 10886 season 10886 holiday 10886 workingday 10886 weather 10886 temp 10886 atemp 10886 humidity 10886 windspeed 10886 casual 10886 registered 10886 count 10886 dtype: int64
#来处理时间,因为它包含的信息总是非常多的,毕竟变化都是随着时间发生的嘛 df_train.head() df_train['hour']=pd.DatetimeIndex(df_train.datetime).hour df_train['day']=pd.DatetimeIndex(df_train.datetime).dayofweek df_train['month']=pd.DatetimeIndex(df_train.datetime).month#other method # df_train['dt']=pd.to_datetime(df_train['datetime']) # df_train['day_of_week']=df_train['dt'].apply(lambda x:x.dayofweek) # df_train['day_of_month']=df_train['dt'].apply(lambda x:x.day)df_train.head()
datetime | season | holiday | workingday | weather | temp | atemp | humidity | windspeed | casual | registered | count | hour | day | month | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2011-01-01 00:00:00 | 1 | 0 | 0 | 1 | 9.84 | 14.395 | 81 | 0.0 | 3 | 13 | 16 | 0 | 5 | 1 |
1 | 2011-01-01 01:00:00 | 1 | 0 | 0 | 1 | 9.02 | 13.635 | 80 | 0.0 | 8 | 32 | 40 | 1 | 5 | 1 |
2 | 2011-01-01 02:00:00 | 1 | 0 | 0 | 1 | 9.02 | 13.635 | 80 | 0.0 | 5 | 27 | 32 | 2 | 5 | 1 |
3 | 2011-01-01 03:00:00 | 1 | 0 | 0 | 1 | 9.84 | 14.395 | 75 | 0.0 | 3 | 10 | 13 | 3 | 5 | 1 |
4 | 2011-01-01 04:00:00 | 1 | 0 | 0 | 1 | 9.84 | 14.395 | 75 | 0.0 | 0 | 1 | 1 | 4 | 5 | 1 |
#提取 相关特征字段 # df = df_train.drop(['datetime','casual','registered'],axis=1,inplace=True) df_train = df_train[['season','holiday','workingday','weather','temp','atemp','humidity','windspeed','count','month','day','hour']] #df=df_train['datetime'] df_train.head(5)
season | holiday | workingday | weather | temp | atemp | humidity | windspeed | count | month | day | hour | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 0 | 1 | 9.84 | 14.395 | 81 | 0.0 | 16 | 1 | 5 | 0 |
1 | 1 | 0 | 0 | 1 | 9.02 | 13.635 | 80 | 0.0 | 40 | 1 | 5 | 1 |
2 | 1 | 0 | 0 | 1 | 9.02 | 13.635 | 80 | 0.0 | 32 | 1 | 5 | 2 |
3 | 1 | 0 | 0 | 1 | 9.84 | 14.395 | 75 | 0.0 | 13 | 1 | 5 | 3 |
4 | 1 | 0 | 0 | 1 | 9.84 | 14.395 | 75 | 0.0 | 1 | 1 | 5 | 4 |
df_train.shape
(10886, 12)
准备训练集数据,测试集数据: 1. df_train_target:目标,也就是count字段。 2. df_train_data:用于产出特征的数据
df_train_target = df_train['count'].values print(df_train_target.shape) df_train_data = df_train.drop(['count'],axis =1).values print(df_train_data.shape)
(10886,) (10886, 11)
算法 咱们依旧会使用交叉验证的方式(交叉验证集约占全部数据的20%)来看看模型的效果, 我们会试 支持向量回归/Suport Vector Regression, 岭回归/Ridge Regression 和 随机森林回归/Random Forest Regressor。每个模型会跑3趟看平均的结果。
from sklearn import linear_model from sklearn import cross_validation from sklearn import svm from sklearn.ensemble import RandomForestRegressor from sklearn.learning_curve import learning_curve from sklearn.grid_search import GridSearchCV from sklearn.metrics import explained_variance_score# 切分一下数据(训练集和测试集) cv = cross_validation.ShuffleSplit(len(df_train_data), n_iter=3, test_size=0.2,random_state=0)# 各种模型来一圈print("岭回归") for train, test in cv: svc = linear_model.Ridge().fit(df_train_data[train], df_train_target[train])print("train score: {0:.3f}, test score: {1:.3f}\n".format(svc.score(df_train_data[train], df_train_target[train]), svc.score(df_train_data[test], df_train_target[test])))print("支持向量回归/SVR(kernel='rbf',C=10,gamma=.001)") for train, test in cv:svc = svm.SVR(kernel ='rbf', C = 10, gamma = .001).fit(df_train_data[train], df_train_target[train])print("train score: {0:.3f}, test score: {1:.3f}\n".format(svc.score(df_train_data[train], df_train_target[train]), svc.score(df_train_data[test], df_train_target[test])))print("随机森林回归/Random Forest(n_estimators = 100)") for train, test in cv: svc = RandomForestRegressor(n_estimators = 100).fit(df_train_data[train], df_train_target[train])print("train score: {0:.3f}, test score: {1:.3f}\n".format(svc.score(df_train_data[train], df_train_target[train]), svc.score(df_train_data[test], df_train_target[test])))
岭回归 train score: 0.339, test score: 0.332train score: 0.330, test score: 0.370train score: 0.342, test score: 0.320支持向量回归/SVR(kernel='rbf',C=10,gamma=.001) train score: 0.417, test score: 0.408train score: 0.406, test score: 0.452train score: 0.419, test score: 0.390随机森林回归/Random Forest(n_estimators = 100) train score: 0.981, test score: 0.867train score: 0.981, test score: 0.880train score: 0.981, test score: 0.869
随机森林回归获得了最佳结果 不过,参数设置得是不是最好的,这个我们可以用GridSearch来帮助测试,找最好的参数
X = df_train_data y = df_train_targetX_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2, random_state=0)tuned_parameters = [{'n_estimators':[10,100,500,550]}] scores = ['r2']for score in scores:print(score)clf = GridSearchCV(RandomForestRegressor(), tuned_parameters, cv=5, scoring=score)clf.fit(X_train, y_train)print("最佳参数找到了:")print("")#best_estimator_ returns the best estimator chosen by the searchprint(clf.best_estimator_)print("")print("得分分别是:")print("")#grid_scores_的返回值:# * a dict of parameter settings# * the mean score over the cross-validation folds # * the list of scores for each foldfor params, mean_score, scores in clf.grid_scores_:print("%0.3f (+/-%0.03f) for %r"% (mean_score, scores.std() / 2, params))print("")
r2 最佳参数找到了:RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,max_features='auto', max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None,min_samples_leaf=1, min_samples_split=2,min_weight_fraction_leaf=0.0, n_estimators=550, n_jobs=1,oob_score=False, random_state=None, verbose=0, warm_start=False)得分分别是:0.846 (+/-0.006) for {'n_estimators': 10} 0.862 (+/-0.005) for {'n_estimators': 100} 0.863 (+/-0.005) for {'n_estimators': 500} 0.864 (+/-0.005) for {'n_estimators': 550}
Grid Search帮挑参数还是蛮方便的, 而且要看看模型状态是不是,过拟合or欠拟合 我们发现n_estimators=500,550时,拟合得最好。
转载于:https://www.cnblogs.com/csj007523/p/8330255.html
Kaggle 自行车租赁预测比赛项目实现相关推荐
- [实践]自行车租赁预测
认识数据 这是一个城市自行车租赁系统,提供的数据为2年内华盛顿按小时记录的自行车租赁数据,其中训练集由每个月的前19天组成,测试集由20号之后的时间组成(需要我们自己去预测).数据来源:Kaggle自 ...
- 实战 | Kaggle竞赛:华盛顿特区首都自行车租赁预测
大家好,我是木木~ 今天为大家带来一篇关于Kaggle竞赛的实战!话不多说,直接上代码 01 准备数据 使用数据集: 华盛顿特区首都自行车租赁数据集 背景描述: 自行车共享系统是租用自行车的一种方式, ...
- kaggle(03)-自行车租赁预测问题(基础版)
文章目录 问题描述: 问题解决 分析问题: 解决问题 第一步:读取原始数据 第二步:观察原始数据 第三步:原始数据的可视化 第四步:数据的预处理 时间属性的分解 第五步:数据的特征提取 特征生成 特征 ...
- 优达学城《DeepLearning》项目1:预测每日自行车租赁客流量
在这个项目中,你将建立你的第一个神经网络,并用它来预测每日自行车租赁客流量.我们已经提供了一些代码,但是将神经网络的实现留给了您(大部分).在您提交了这个项目之后,您可以更自由地探索数据和模型. %m ...
- python客户端开发自行车租赁系统_python可视化--共享单车项目
共享单车项目项目说明 自行车共享系统是一种租赁自行车的方法,注册会员.租车.还车都将通过城市中的站点网络自动完成, 通过这个系统人们可以根据需要从一个地方租赁一辆自行车然后骑到自己的目的地归还. 在这 ...
- java自行车租凭系统项目包_基于jsp的自行车租赁-JavaEE实现自行车租赁 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的自行车租赁, 该项目可用各类java课程设计大作业中, 自行车租赁的系统架构分为前后台两部分, 最终实现在线上进行 ...
- 计算机实战项目[含论文+源码等]基于java+ssh+mysql实现的共享自行车租赁|出租管理系统
<基于java+ssh+mysql实现的共享自行车租赁管理系统>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 使用技术: 前端使用技术:JSP,HTML5,CSS ...
- 自行车租赁数据分析与可视化_自行车事故分析
自行车租赁数据分析与可视化 简介: Business Problem (Introduction: Business Problem) This report will try to analyze ...
- Kaggle债务违约预测冠军经验分享
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 引言 SWOT分析法 优势Strengths利用我们已有的优势 弱势weaknesses我们需要提升的领域 机会opportun ...
最新文章
- 腾讯会议用户突破1亿,发布企业版最高支持2000人同时参会
- phpstrom配置svn/git提交
- 下载安装tomcat6.0
- 娓娓道来Promise
- WebSoket 的广泛应用
- timer.schedule定时器用法
- 关于面试宝典中的各个问题(一)
- cmd测试cuda安装_安装:anaconda+cuda+pytorch+pycharm
- phpcms模型缓存更新原理分析(转)
- OpenShift 4之实现一个基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline
- Cake Frosting:更具可维护性的C#DevOps
- 转载 用Python实现设计模式——工厂模式
- Java中对象的直接赋值、浅拷贝及深拷贝的理解和应用场景及其实现方式
- BZOJ2754 [SCOI2012]喵星球上的点名
- 按键精灵手机助手界面三级联动
- mongo数据库之修改器的简单使用
- python 获取 淘宝 app 数据_python-爬取app上数据
- C#编程,获取电脑硬件、硬盘、系统信息
- unicloud云开发---uniapp云开发(四)---本机手机号一键登录以及第三方登陆
- red hat 系统下载