参考链接:https://hands1ml.apachecn.org/2/
假设你是被一家地产公司雇佣的数据科学家,现在需要做一些工作。
公司所给的数据集是StatLib 的加州房产价格数据集。这个数据集是基于 1990 年加州普查的数据。数据已经有点老,但它有许多优点,利于学习,所以假设这个数据为最近的数据。为了便于学习理解,稍后学习过程中添加了一个类别属性,并除去了一些。
你的第一个任务是利用加州普查数据,建立一个加州房价模型。这个数据包含每个街区组的人口、收入中位数、房价中位数等指标。
提示:街区组是美国调查局发布样本数据的最小地理单位(一个街区通常有 600 到 3000 人)。我们将其简称为“街区”。
你的模型要利用这个数据进行学习,然后根据其它指标,预测任何街区的的房价中位数。这也就是本次任务的目的。
划定问题
公司的最终目标是什么?大多数情况下可不是建立一个模型,而是收益,从模型建立的过程中能受益。
老板会告诉你,你的模型的输出(预测结果,一个区的房价中位数)将会传给另一个机器学习系统,同时也有其它信号会传入后面的系统。
这一整套系统可以确定某个区进行投资值不值。确定值不值得投资非常重要,它直接影响利润,也就是收益。
下一个问题,现在的解决方案效果如何。老板通常会给一个参考性能,以及如何解决问题。
老板说,现在街区的房价是靠专家手工估计的,专家队伍收集最新的关于一个区的信息(不包括房价中位数),他们使用复杂的规则进行估计。这种方法费钱费时间,而且估计结果不理想,误差率大概有 15%。
OK,有了这些信息,你就可以开始设计系统了。首先,你需要划定问题:监督或非监督,还是强化学习?这是个分类任务、回归任务,还是其它的?要使用批量学习还是线上学习?尝试自己思考一下。
答案如下:
这是一个典型的监督学习任务,因为你要使用的是有标签的训练样本(每个实例都有预定的产出,即街区的房价中位数)。并且,这是一个典型的回归任务,因为你要预测一个值。讲的更细些,这是一个多变量回归问题,因为系统要使用多个变量进行预测(要使用街区的人口,收入中位数等等)。最后,没有连续的数据流进入系统,没有特别需求需要对数据变动作出快速适应。数据量不大可以放到内存中,因此批量学习就够了。
选择性能指标
回归问题的典型指标是均方根误差(RMSE)。
均方根误差测量的是系统预测误差的标准差。
例如,RMSE 等于 50000,意味着,68% 的系统预测值位于实际值的 50000 美元以内,95% 的预测值位于实际值的 100000 美元以内(一个特征通常都符合高斯分布,即满足 “68-95-99.7”规则:大约 68% 的值落在1σ内,95% 的值落在2σ内,99.7% 的值落在3σ内,这里的σ等于 50000)。公式 2-1 展示了计算 RMSE 的方法。
(此处不理解可移步b站学习相关内容)
核实假设
最后,最好列出并核对迄今(你或其他人)作出的假设,这样可以尽早发现严重的问题。例如,你的系统输出的街区房价,会传入到下游的机器学习系统,我们假设这些价格确实会被当做街区房价使用。但是如果下游系统实际上将价格转化成了分类(例如,便宜、中等、昂贵),然后使用这些分类,而不是使用价格。这样的话,获得准确的价格就不那么重要了,你只需要得到合适的分类。问题相应地就变成了一个分类问题,而不是回归任务。你可不想在一个回归系统上工作了数月,最后才发现真相。
幸运的是,在与下游系统主管探讨之后,你很确信他们需要的就是实际的价格,而不是分类。
很好!整装待发,可以开始写代码了,正式去解决问题!
创建工作空间
首先,你需要安装 Python。可能已经安装过了,没有的话,可以从官网下载 https://www.python.org/。
其次也可以选择安装anaconda:https://www.anaconda.com/download/
同时准备好所需的一些基本库:Jupyter、NumPy、Pandas、Matplotlib 和 Scikit-Learn等等
安装好后,通过敲入命令:jupyter notebook
Jupyter 服务器现在运行在终端上,监听 8888 端口。你可以用浏览器打开http://localhost:8888/,以访问这个服务器(服务器启动时,通常就自动打开了)。下图是笔者的代码空间截图。