本项目使用jupyter完成,annacode包含所有需要的库,相应数据资源已上传.
第一步. 导入数据
在这个项目中,你将利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型,并对模型的性能和预测能力进行测试。通过该数据训练后的好的模型可以被用来对房屋做特定预测—尤其是对房屋的价值。对于房地产经纪等人的日常工作来说,这样的预测模型被证明非常有价值。
波士顿房屋这些数据于1978年开始统计,共506个数据点,涵盖了麻省波士顿不同郊区房屋14种特征的信息。本项目对原始数据集做了以下处理:
- 有16个
'MEDV'
值为50.0的数据点被移除。 这很可能是由于这些数据点包含遗失或看不到的值。 - 有1个数据点的
'RM'
值为8.78. 这是一个异常值,已经被移除。 - 对于本项目,房屋的
'RM'
,'LSTAT'
,'PTRATIO'
以及'MEDV'
特征是必要的,其余不相关特征已经被移除。 'MEDV'
特征的值已经过必要的数学转换,可以反映35年来市场的通货膨胀效应。
运行下面区域的代码以载入波士顿房屋数据集,以及一些此项目所需的 Python 库。如果成功返回数据集的大小,表示数据集已载入成功。
# Import libraries necessary for this project 1.导入必要的包
import numpy as np
import pandas as pd
from sklearn.model_selection import ShuffleSplit
# Import supplementary visualizations code visuals.py导入数据可视化包
import visuals as vs
# Pretty display for notebooks
%matplotlib inline
# Load the Boston housing dataset 2.加载波士顿房屋数据
data = pd.read_csv('housing.csv')#读取的数据叫data,见下图。
prices = data['MEDV']#获取列名为'MEDV'列的数据叫价格 3.分割数据
features = data.drop('MEDV', axis = 1)# 从axis=1轴(列)中删去列名为'MEDV'的列,剩下的三列是特征
# Success
print("Boston housing dataset has {} data points with {} variables each.".format(*data.shape))
Boston housing dataset has 489 data points with 4 variables each.
'RM'
是该地区中每个房屋的平均房间数量;'LSTAT'
是指该地区有多少百分比的业主属于是低收入阶层(有工作但收入微薄);'PTRATIO'
是该地区的中学和小学里,学生和老师的数目比(学生/老师
)。'MEDV'
是该地区房子的平均售价。
第二步. 分析数据
在项目的第一个部分,你会对波士顿房地产数据进行初步的观察并给出你的分析。通过对数据的探索来熟悉数据可以让你更好地理解和解释你的结果。
由于这个项目的最终目标是建立一个预测房屋价值的模型,我们需要将数据集分为特征(features)和目标变量(target variable)。
- 特征
'RM'
,'LSTAT'
,和'PTRATIO'
,给我们提供了每个数据点的数量相关的信息。 - 目标变量:
'MEDV'
,是我们希望预测的变量。
他们分别被存在 features
和 prices
两个变量名中。
编程练习 1:基础统计运算
你的第一个编程练习是计算有关波士顿房价的描述统计数据。我们已为你导入了 NumPy
,你需要使用这个库来执行必要的计算。这些统计数据对于分析模型的预测结果非常重要的。
在下面的代码中,你要做的是:
- 计算
prices
中的'MEDV'
的最小值、最大值、均值、中值和标准差; - 将运算结果储存在相应的变量中。
# TODO: Minimum price of the data
minimum_price = prices.min() #np.min(prices)各地区价格最小值
# TODO: Maximum price of the data
maximum_price = prices.max()#np.max(prices)各地区价格的最大值
# TODO: Mean price of the data
mean_price = prices.mean()#np.average(prices)所有价格的平均值
# TODO: Median price of the data
median_price = prices.median()#np.median(prices)所有价格的中位数
# TODO: Standard deviation of prices of the data
std_price = prices.std()#np.std(prices)所有价格的标准差,就是偏离平均值的程度
# Show the calculated statistics
print("Statistics for Boston housing dataset:\n")
print("Minimum price: ${:.2f}".format(minimum_price))
print("Maximum price: ${:.2f}".format(maximum_price))
print("Mean price: ${:.2f}".format(mean_price))
print("Median price ${:.2f}".format(median_price))
print("Standard deviation of prices: ${:.2f}".format(std_price))
Statistics for Boston housing dataset:
Minimum price: $105000.00
Maximum price: $1024800.00
Mean price: $454342.94
Median price $438900.00
Standard deviation of prices: $165340.28
问题 1 - 特征观察
如前文所述,本项目中我们关注的是其中三个值:'RM'
、'LSTAT'
和'PTRATIO'
,对每一个数据点:
'RM'
是该地区中每个房屋的平均房间数量;'LSTAT'
是指该地区有多少百分比的业主属于是低收入阶层(有工作但收入微薄);'PTRATIO'
是该地区的中学和小学里,学生和老师的数目比(学生/老师
)。
凭直觉,上述三个特征中对每一个来说,你认为增大该特征的数值,'MEDV'
的值会是增大还是减小呢?每一个答案都需要你给出理由。
**提示:**你预期一个'RM'
值是6的房屋跟'RM'
值是7的房屋相比,价值更高还是更低呢?
问题 1 - 回答:
增大RM的值会,MEDV会增大,因为其他量不变的情况下,增加房间数量,一般是增大了房屋面积,则房子价格会更高。增大LSTAT,低收入阶层比例增加,则房屋的价格会更低。增大PTRATIO,学生和老师的数目比增加,则意味着这边学校少,所以房子价格会更低。
第三步. 建立模型
在项目的第三步中,你需要了解必要的工具和技巧来让你的模型进行预测。用这些工具和技巧对每一个模型的表现做精确的衡量可以极大地增强你预测的信心。
编程练习2:定义衡量标准
如果不能对模型的训练和测试的表现进行量化地评估,我们就很难衡量模型的好坏。通常我们会定义一些衡量标准,这些标准可以通过对某些误差或者拟合程度的计算来得到。在这个项目中,你将通过运算决定系数 R 2 R^2 R2 来量化模型的表现。模型的决定系数是回归分析中十分常用的统计信息,经常被当作衡量模型预测能力好坏的标准。
R 2 R^2 R2 的数值范围从0至1,表示目标变量的预测值和实际值之间的相关程度平方的百分比。一个模型的 R 2 R^2 R2 值为0还不如直接用平均值来预测效果好;而一个 R 2 R^2 R</