买房应该是大多数都会要面临的一个选择,当前经济和政策背景下,未来房价会涨还是跌?这是很多人都关心的一个话题。今天分享的这篇文章,以波士顿的房地产市场为例,根据低收入人群比例、老师学生数量等特征,利用 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)降低对内存的使用,这里很重要,数据量大时很容易撑爆个人电脑的内存存储;

上代码:

# 载入波士顿房屋的数据集
data = pd.read_csv('housing.csv')
prices = data['MEDV']
features = data.drop('MEDV', axis = 1)# 完成print"Boston housing dataset has {} data points with {} variables each.".format(*data.shape)

Step 2 分析数据

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

基础统计运算

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

上代码:

#目标:计算价值的最小值
minimum_price = np.min(prices)# prices.min()#目标:计算价值的最大值
maximum_price = np.max(prices)# prices.max()#目标:计算价值的平均值
mean_price = np.mean(prices)# prices.mean()#目标:计算价值的中值
median_price = np.median(prices)# prices.median()#目标:计算价值的标准差
std_price = np.std(prices)# prices.std()

特征观察

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

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

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

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

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

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

Step 3 数据划分

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

上代码:

# 提示:导入train_test_split
from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=RANDOM_STATE)
print X_train.shape
print X_test.shape
print y_train.shape
print y_test.shape

Step 4 定义评价函数

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

Step 5 模型调优

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

上代码:

from sklearn.model_selection importKFold,GridSearchCV
from sklearn.tree importDecisionTreeRegressor
from sklearn.metrics import make_scorerdef fit_model(X, y):
""" 基于输入数据 [X,y],利于网格搜索找到最优的决策树模型"""cross_validator = KFold()regressor = DecisionTreeRegressor()params = {'max_depth':[1,2,3,4,5,6,7,8,9,10]}scoring_fnc = make_scorer(performance_metric)grid = GridSearchCV(estimator=regressor, param_grid=params, scoring=scoring_fnc, cv=cross_validator)# 基于输入数据 [X,y],进行网格搜索grid = grid.fit(X, y)# 返回网格搜索后的最优模型
return grid.best_estimator_

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

学习曲线

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

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

小结

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


技术交流

欢迎转载、收藏、有所收获点赞支持一下!

目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
  • 方式②、添加微信号:dkl88191,备注:来自CSDN
  • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

实战案例分享:我用 Python 预测房价走势相关推荐

  1. 数据挖掘r语言和python知乎_Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频...

    课程名称 R语言爬虫实战案例分享:网易云课堂.知乎live.今日头条.B站视频 网络数据抓取是数据科学中获取数据中的重要途径,但是一直以来受制于高门槛,都是专业程序员的专属技能.直到R语言和Pytho ...

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

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

  3. python流程控制-实战案例手把手教你Python流程控制技巧

    原标题:实战案例手把手教你Python流程控制技巧 作者:PianoOrRock 来源: http://blog.csdn.net/pianoorrock/article/details/711315 ...

  4. QTYX量化系统实战案例分享|箱体形态选股后蓄势介入之202211

    前言 我觉得非常有必要和大家分享一些QTYX在实战中的应用案例(包括失败的案例),这样能够帮助大家更好地去理解QTYX中的功能设计,也能更好地帮助大家搭建出属于自己的量化交易系统. QTYX量化系统实 ...

  5. 西门子200恒压供水梯形图_实战案例分享‖ 西门子200SMART完成恒压供水系统项目...

    原标题:实战案例分享| 西门子200SMART完成恒压供水系统项目 一,实验指南 1. 实验目的 恒压供水系统,密闭在水池地下,三台主泵加一台辅佐泵.用水量少或没有 用水时,只开辅佐泵.当检测到水压变 ...

  6. python智慧城市_智慧城市背景下Python机器学习项目实战案例分享

    首先,何为智慧城市?智慧城市的"智慧"源自何处? 智慧城市的特征在于运用大数据和数字技术提高居民生活质量. 机构获得的数据越全面.越实时,它们就越有能力观测事件发生的详情.分析需求 ...

  7. 智慧城市背景下Python机器学习项目实战案例分享

    首先,何为智慧城市?智慧城市的"智慧"源自何处? 智慧城市的特征在于运用大数据和数字技术提高居民生活质量. 机构获得的数据越全面.越实时,它们就越有能力观测事件发生的详情.分析需求 ...

  8. QTYX量化系统实战案例分享|箱底形态选股后潜伏介入之202209

    前言 我觉得非常有必要和大家分享一些QTYX在实战中的应用案例(包括失败的案例),这样能够帮助大家更好地去理解QTYX中的功能设计,也能更好地帮助大家搭建出属于自己的量化交易系统. 首先要声明几点: ...

  9. 企业大数据运用实战案例分享

    一.企业大数据如何起步:从小数据到大数据 目前国内外关于大数据的谈论很多,大多是谈运营级别的,或者说从服务端.服务方提得较多一些.笔者要跟大家交流的问题是作为各类企业尤其是客户方的企业来说,大数据跟他 ...

  10. QTYX量化系统实战案例分享|短线止盈止损监测202301

    前言 我觉得非常有必要和大家分享一些股票量化分析工具QTYX在实战中的应用案例(包括失败的案例),这样能够帮助大家更好地去理解QTYX中的功能设计,也能更好地帮助大家搭建出属于自己的量化交易系统. 关 ...

最新文章

  1. JAVA IDEA集成geotools gt-mif gdal读取.MIF
  2. mysql8.0.12插件_mysql 8.0.12 安装使用教程
  3. linux下查看目录下某种文件类型累计的代码行数
  4. 2019-03-18-算法-进化(有效的字母异位词)
  5. 认识 UML 类关系——依赖、关联、聚合、组合、泛化
  6. 《统计学习方法》(李航)读书笔记(完结)超级火爆的总结
  7. tornado web mysql_Tornado WEB服务器框架 Epoll-- 【Mysql数据库】
  8. LeetCode(171)——Excel表列序号(JavaScript)
  9. 软件工程——软件结构图设计(变换分析设计、事务分析设计、混合流设计)
  10. 舱机器人尾巴毛茸茸_第一千五百二十四章 毛茸茸【二合一】
  11. python巡检网络设备_pyhton对网络设备的日常巡检
  12. html required 无效,html5的input的required使用中遇到的问题及解决方法
  13. 字符串的几个常用属性
  14. java 工作流 jbpm,J2EE工作流管理系统jBPM详解(一)(4)
  15. 你的孤独,虽败犹荣 很喜欢的句子
  16. Feign-独立使用-实战
  17. Java使用luhn校验算法实现银行卡号合法性校验获取银行卡号所属银行
  18. 敢达java_Java-Junit 的Hello world
  19. 如何添加linux文件系统,技术|如何在Linux上添加或编辑文件系统的卷标
  20. 基于安卓平台的软件加固方案的设计与实现_银河麒麟操作系统 V10 发布:可兼容安卓生态...

热门文章

  1. 从正多面体到斐波拉契网格
  2. Hello Playwright:(8)等待页面加载
  3. android 开发积累
  4. KSO-.NETCore中实现跨域的代码以及几种跨域方式
  5. 从零开始的神棍之路 ----模拟(细节)
  6. 服务器端编程心得(二)—— Reactor模式
  7. linux(debian 11)下安装nginx
  8. matlab乖离率计算,终于有人把“乖离率”说清楚了,看懂少走十年弯路!
  9. 天嵌TQ_E9卡片电脑移植飞思卡尔yocto L4.1.15_1.0.0_ga 第四篇 新版kernel(L4.1.15-r)移植
  10. 一个简单的姓名拼音匹配