{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 模型评价与验证:波士顿房价预测"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"欢迎来到机器学习实战系列的波士顿房价预测项目!在此文件中,有些示例代码已经提供给你,但你还需要实现更多的功能来让项目成功运行。除非有明确要求,你无须修改任何已给出的代码。以 **编程练习**开始的标题表示接下来的内容中有需要你实现的功能。需要实现的部分也会在注释中以**TODO**标出。请仔细阅读所有的提示!你可以点击**问题提示**,查看每一部分详细的提示指导,也可以点击**插入答案**,把正确答案插入到下方代码块中。\n",
"\n",
"除了实现代码外,你还需要回答一些与项目和实现有关的问题。每一个需要你回答的问题都会以 **思考问答**为标题。请仔细阅读每个问题,作出答复。当然我们也为你提供**问题提示**和**查看答案**的按钮。\n",
"\n",
"**文档中提供的代码具有顺序性,必须从前往后依次运行代码,不能跳跃执行,否则可能出现意想不到的错误!**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"### 第一步:导入数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"在这个项目中,你将利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型,并对模型的性能和预测能力进行测试。通过该数据训练好的模型可以被用来对房屋做特定预测---尤其是对房屋的价值。对于房地产经纪等人的日常工作来说,这样的预测模型被证明非常有价值。\n",
"\n",
"文件列表中 `visuals.py` 为辅助代码,`housing.csv` 为数据集文件,`result` 文件夹为结果的文件存放地(如果你使用CPU/GPU运行代码创建了job时,job运行完的结果文件也会存放于此)。 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"波士顿房屋这些数据于1978年开始统计,共506个数据点,涵盖了麻省波士顿不同郊区房屋14种特征的信息。本项目对原始数据集做了以下处理:\n",
"- 有16个`'MEDV'` 值为50.0的数据点被移除。 这很可能是由于这些数据点包含**遗失**或**看不到的值**。\n",
"- 有1个数据点的 `'RM'` 值为8.78. 这是一个异常值,已经被移除。\n",
"- 对于本项目,房屋的`'RM'`, `'LSTAT'`,`'PTRATIO'`以及`'MEDV'`特征是必要的,其余不相关特征已经被移除。\n",
"- `'MEDV'`特征的值已经经过必要的数学转换,可以反映35年来市场的通货膨胀效应。\n",
"\n",
"以上特征的含义如下: \n",
"`RM`: 住宅平均房间数量 \n",
"`LSTAT`: 区域中被认为是低收入阶层的比率 \n",
"`PTRATIO`: 镇上学生与教师数量比例 \n",
"`MEDV`: 房屋的中值价格 \n",
"\n",
"运行下面区域的代码以载入波士顿房屋数据集,以及一些此项目所需的 Python 模块库。如果成功返回数据集的大小,表示数据集已载入成功。我们也可以看到输出的数据集结构。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Import libraries necessary for this project\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.model_selection import ShuffleSplit\n",
"\n",
"# Import supplementary visualizations code visuals.py\n",
"import visuals as vs\n",
"\n",
"# Pretty display for notebooks\n",
"%matplotlib inline\n",
"\n",
"# Load the Boston housing dataset\n",
"data = pd.read_csv('housing.csv')\n",
"prices = data['MEDV']\n",
"features = data.drop('MEDV', axis = 1)\n",
"\n",
"# Success\n",
"print(\"Boston housing dataset has {} data points with {} variables each.\".format(*data.shape))\n",
"\n",
"# 显示数据结构\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 第二步:分析数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"在项目的第一个部分,你会对波士顿房地产数据进行初步的观察并给出你的分析。通过对数据的探索来熟悉数据可以让你更好地理解和解释你的结果。由于这个项目的最终目标是建立一个预测房屋价值的模型,我们需要将数据集分为**特征(features)**和**目标变量(target variable)**。\n",
"- **特征** `'RM'`, `'LSTAT'`,和 `'PTRATIO'`,给我们提供了每个数据点的数量相关的信息。\n",
"- **目标变量**:` 'MEDV'`,是我们希望预测的变量。\n",
"\n",
"他们分别被存在 `features` 和 `prices` 两个变量名中。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" **编程练习**\n",
"\n",
"你的第一个编程练习是计算有关波士顿房价的描述统计数据。我们已为你导入了 ` NumPy `,你需要使用这个库来执行必要的计算。这些统计数据对于分析模型的预测结果非常重要的。\n",
"在下面的代码中,你要做的是:\n",
"- 计算 `prices` 中的 `'MEDV'` 的最小值、最大值、均值、中值和标准差;\n",
"- 将运算结果储存在相应的变量中。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# TODO: Minimum price of the data\n",
"minimum_price = None\n",
"\n",
"# TODO: Maximum price of the data\n",
"maximum_price = None\n",
"\n",
"# TODO: Mean price of the data\n",
"mean_price = None\n",
"\n",
"# TODO: Median price of the data\n",
"median_price = None\n",
"\n",
"# TODO: Standard deviation of prices of the data\n",
"std_price = None\n",
"\n",
"# Show the calculated statistics\n",
"print(\"Statistics for Boston housing dataset:\\n\")\n",
"print(\"Minimum price: ${:.2f}\".format(minimum_price))\n",
"print(\"Maximum price: ${:.2f}\".format(maximum_price))\n",
"print(\"Mean price: ${:.2f}\".format(mean_price))\n",
"print(\"Median price ${:.2f}\".format(median_price))\n",
"print(\"Standard deviation of prices: ${:.2f}\".format(std_price))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"问题提示 插入答案"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# TODO: Minimum price of the data\n",
"minimum_price = prices.min()\n",
"\n",
"# TODO: Maximum price of the data\n",
"maximum_price = prices.max()\n",
"\n",
"# TODO: Mean price of the data\n",
"mean_price = prices.mean()\n",
"\n",
"# TODO: Median price of the data\n",
"median_price = prices.median()\n",
"\n",
"# TODO: Standard d