买房应该是大多数都会要面临的一个选择,当前经济和政策背景下,未来房价会涨还是跌?这是很多人都关心的一个话题。今天分享的这篇文章,以波士顿的房地产市场为例,根据低收入人群比例、老师学生数量等特征,利用 Python 进行了预测,给大家做一个参考。

该分享源于Udacity机器学习进阶中的一个mini作业项目,用于入门非常合适,刨除了繁琐的部分,保留了最关键、基本的步骤,能够对机器学习基本流程有一个最清晰的认识。

项目描述

利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型,并对模型的性能和预测能力进行测试;

项目分析

数据集字段解释:

  1. RM: 住宅平均房间数量;

  2. LSTAT: 区域中被认为是低收入阶层的比率;

  3. PTRATIO: 镇上学生与教师数量比例;

  4. MEDV: 房屋的中值价格(目标特征,即我们要预测的值);

其实现在回过头来看,前三个特征应该都是挖掘后的组合特征,比如RM,通常在原始数据中会分为多个特征:一楼房间、二楼房间、厨房、卧室个数、地下室房间等等,这里应该是为了教学简单化了;

MEDV为我们要预测的值,属于回归问题,另外数据集不大(不到500个数据点),小数据集上的回归问题,现在的我初步考虑会用SVM,稍后让我们看看当时的选择;

Show Time

Step 1 导入数据

注意点:

  1. 如果数据在多个csv中(比如很多销售项目中,销售数据和店铺数据是分开两个csv的,类似数据库的两张表),这里一般要连接起来;

  2. 训练数据和测试数据连接起来,这是为了后续的数据处理的一致,否则训练模型时会有问题(比如用训练数据训练的模型,预测测试数据时报错维度不一致);

  3. 观察下数据量,数据量对于后续选择算法、可视化方法等有比较大的影响,所以一般会看一下;

  4. pandas内存优化,这一点项目中目前没有,但是我最近的项目有用到,简单说一下,通过对特征字段的数据类型向下转换(比如int64转为int8)降低对内存的使用,这里很重要,数据量大时很容易撑爆个人电脑的内存存储;

上代码:

  1. # 载入波士顿房屋的数据集

  2. data = pd.read_csv('housing.csv')

  3. prices = data['MEDV']

  4. features = data.drop('MEDV', axis = 1)

  5. # 完成

  6. print"Boston housing dataset has {} data points with {} variables each.".format(*data.shape)

</pre>

Step 2 分析数据

加载数据后,不要直接就急匆匆的上各种处理手段,加各种模型,先慢一点,对数据进行一个初步的了解,了解其各个特征的统计值、分布情况、与目标特征的关系,最好进行可视化,这样会看到很多意料之外的东西;

基础统计运算

统计运算用于了解某个特征的整体取值情况,它的最大最小值,平均值中位数,百分位数等等,这些都是最简单的对一个字段进行了解的手段;

上代码:

  1. #目标:计算价值的最小值

  2. minimum_price = np.min(prices)# prices.min()

  3. #目标:计算价值的最大值

  4. maximum_price = np.max(prices)# prices.max()

  5. #目标:计算价值的平均值

  6. mean_price = np.mean(prices)# prices.mean()

  7. #目标:计算价值的中值

  8. median_price = np.median(prices)# prices.median()

  9. #目标:计算价值的标准差

  10. std_price = np.std(prices)# prices.std()

</pre>

特征观察

这里主要考虑各个特征与目标之间的关系,比如是正相关还是负相关,通常都是通过对业务的了解而来的,这里就延伸出一个点,机器学习项目通常来说,对业务越了解,越容易得到好的效果,因为所谓的特征工程其实就是理解业务、深挖业务的过程;

比如这个问题中的三个特征:

  • RM:房间个数明显应该是与房价正相关的;

  • LSTAT:低收入比例一定程度上表示着这个社区的级别,因此应该是负相关;

  • PTRATIO:学生/教师比例越高,说明教育资源越紧缺,也应该是负相关;

上述这三个点,同样可以通过可视化的方式来验证,事实上也应该去验证而不是只靠主观猜想,有些情况下,主观感觉与客观事实是完全相反的,这里要注意;

Step 3 数据划分

为了验证模型的好坏,通常的做法是进行cv,即交叉验证,基本思路是将数据平均划分N块,取其中N-1块训练,并对另外1块做预测,并比对预测结果与实际结果,这个过程反复N次直到每一块都作为验证数据使用过;

上代码:

  1. # 提示:导入train_test_split

  2. from sklearn.model_selection import train_test_split

  3. X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=RANDOM_STATE)

  4. print X_train.shape

  5. print X_test.shape

  6. print y_train.shape

  7. print y_test.shape

</pre>

Step 4 定义评价函数

这里主要是根据问题来定义,比如分类问题用的最多的是准确率(精确率、召回率也有使用,具体看业务场景中更重视什么),回归问题用RMSE(均方误差)等等,实际项目中根据业务特点经常会有需要去自定义评价函数的时候,这里就比较灵活;

Step 5 模型调优

通过GridSearch对模型参数进行网格组合搜索最优,注意这里要考虑数据量以及组合后的可能个数,避免运行时间过长哈。

上代码:

  1. from sklearn.model_selection importKFold,GridSearchCV

  2. from sklearn.tree importDecisionTreeRegressor

  3. from sklearn.metrics import make_scorer

  4. def fit_model(X, y):

  5. """ 基于输入数据 [X,y],利于网格搜索找到最优的决策树模型"""

  6. cross_validator = KFold()

  7. regressor = DecisionTreeRegressor()

  8. params = {'max_depth':[1,2,3,4,5,6,7,8,9,10]}

  9. scoring_fnc = make_scorer(performance_metric)

  10. grid = GridSearchCV(estimator=regressor, param_grid=params, scoring=scoring_fnc, cv=cross_validator)

  11. # 基于输入数据 [X,y],进行网格搜索

  12. grid = grid.fit(X, y)

  13. # 返回网格搜索后的最优模型

  14. return grid.best_estimator_

</pre>

可以看到当时项目中选择的是决策树模型,现在看,树模型在这种小数据集上其实是比较容易过拟合的,因此可以考虑用SVM代替,你也可以试试哈,我估计是SVM效果最好;

学习曲线

通过绘制分析学习曲线,可以对模型当前状态有一个基本了解,如下图:

image

可以看到,超参数max_depth为1和3时,明显训练分数过低,这说明此时模型有欠拟合的情况,而当max_depth为6和10时,明显训练分数和验证分析差距过大,说明出现了过拟合,因此我们初步可以猜测,最佳参数在3和6之间,即4,5中的一个,其他参数一样可以通过学习曲线来进行可视化分析,判断是欠拟合还是过拟合,再分别进行针对处理;

小结

通过以上的几步,可以非常简单、清晰的看到一个机器学习项目的全流程,其实再复杂的流程也是这些简单步骤的一些扩展,而更难的往往是对业务的理解,没有足够的理解很难得到好的结果,体现出来就是特征工程部分做的好坏,这里就需要各位小伙伴们奋发图强了,路漫漫啊。

项目链接

  • 通篇浏览可以通过nbviewer来看;

  • 项目源文件、数据集文件可以通过GitHub波士顿项目获取,欢迎Follow、Fork、Star;

最后

大家可以到我的Github上看看有没有其他需要的东西,目前主要是自己做的机器学习项目、Python各种脚本工具、数据分析挖掘项目以及Follow的大佬

作者:Ho Loong,私信获取次项目的源码

为了能早点买房,我用 Python 预测了房价走势!相关推荐

  1. python预测房价走势_如何用 Python 预测房价走势?

    原标题:如何用 Python 预测房价走势? 买房应该是大多数都会要面临的一个选择,当前经济和政策背景下,未来房价会涨还是跌?这是很多人都关心的一个话题.今天分享的这篇文章,以波士顿的房地产市场为例, ...

  2. 赠书 | Python 预测股票价格,竟然这么简单

    作为一种技术手段,预测在金融.证券领域的应用非常广泛,尤其是对股票价格的预测.我们介绍一下获得股票数据的方法,并基于此对数据进行预处理,接着使用数据分析方法,建立基础特征,进一步构建预测模型,且基于新 ...

  3. python 预测足球_利用 Python 预测英雄联盟胜负,分析了 5 万多场比赛才得出的数据!...

    今天教大家用Python预测英雄联盟比赛胜负. Show me data,用数据说话 今天我们聊一聊 Python预测LOL胜负 目前,英雄联盟S10全球总决赛正在火热进行中,最终决赛于10月31日在 ...

  4. python同花顺交易接口是什么_我用 Python 预测了股票价格

    大家好,我是朱小五 最近大家都很关注股票/基金嘛,本来我也打算写写相关的文章,结果发现我对它们的了解不比等待进场的大妈们强多少... 吭哧吭哧爬了一堆数据,结果却不知道如何处理,正好看到一本书里对股票 ...

  5. python3 llvmlite源码_将Paddle-Lite在树莓派上源码编译及编译python预测库

    新手使用Paddle-Lite 第一篇博客,第一次接触树莓派,把我的经历说一说. 一.为什么选Paddle-Lite? 因为我第一次接触人工智能,PaddlePaddle官网https://www.p ...

  6. python 比赛成绩预测_利用 Python 预测英雄联盟胜负,分析了 5 万多场比赛才得出的数据!值得,涨知识了!...

    Mika 来源 | 头图 |CSDN自东方IC今天教大家用Python预测英雄联盟比赛胜负. Show me data,用数据说话 今天我们聊一聊 Python预测LOL胜负 目前,英雄联盟S10全球 ...

  7. 利用 Python 预测英雄联盟胜负,分析了 5 万多场比赛才得出的数据!

    作者 | 真达.Mika 来源 | CDA数据分析师(ID:cdacdacda) 头图 |  CSDN 下载自东方IC 今天教大家用Python预测英雄联盟比赛胜负. Show me data,用数据 ...

  8. 《Python预测之美》送书活动,中奖名单公示

    首先,感谢参加新书<Python预测之美>送书活动的朋友.本次活动从7月9日开始,历时5天,于今天早上8点5分准时开奖.共有5名幸运嘉宾中奖.名单如下: 解释权归 " 活动抽奖 ...

  9. 《Python预测之美》送书活动,拿走不谢~

    这是一本什么样的书? - 以Python语言为基础,配合原理.方法.案例进行讲解 - 专注预测专题,体系化介绍预测技术工程实施的必备技能 - 深度剖析预测原理,细致解读数据分析算法 这本书长啥样? P ...

最新文章

  1. 《FPGA入门教程》看书随笔——数字电路设计入门
  2. phoenix 使用详细介绍 创建二级索引
  3. 将win server 2003 AD域升级到win server 2012 R2
  4. 关于Scalability的一些思考与疑问
  5. 幸福的源泉:Life is about choices 幸福可以选择
  6. JavaScript:数据类型判断的方法
  7. jmeter 一个可能引起性能严重下降的断言设置
  8. 高德经纬度转普通GPS经纬度
  9. MATLAB 图像滤波器
  10. javascript清理IE内存
  11. 【Paper】Neural Machine Translation by Jointly Learning to Align and Translate
  12. iTechTag:声望创造价值
  13. 什么是互联网大厂_请问22届应届毕业生应该如何准备互联网秋招?
  14. 基于RGB-D图像的视觉里程计连续尺度空间直接图像对齐 (ICRA 2021)
  15. 计算机课的答案,计算机专业答案-专业课B
  16. 模块化封装和组件化封装
  17. 文科生与理科生_戏谈
  18. CultureInfo中重要的InvariantCulture
  19. ITON - 3 论queue()
  20. 【博弈论】找出游戏的必胜策略

热门文章

  1. 一键为VPS开启BBR拥塞控制算法加速你的VPS网络速度
  2. 计算机ct检查,何谓CT检查
  3. 向上来回无缝滚动html,移动手机端H5无缝间歇平滑向上滚动js代码
  4. [安卓框架]15 个 Android 通用流行框架大全
  5. APP性能测试的6项关键指标及测试获取手段
  6. 计算机二级ppt操作题内容,计算机二级考试ms office考试题库ppt 操作题附答案
  7. 如何用1角、2角和5角的硬币凑出10元以下的金额
  8. T-SQL之查询操作
  9. 2022SDUT知到/智慧树----C语言第二章测试题解
  10. 英语口语256之每日十句口语