1 波士顿房价数据分析
安装好Python的Sklearn库后,在安装包下的路径中就能看到描述波士顿房价的csv文件,具体路径是“python安装路径\Lib\site-packages\sklearn\datasets\data”,在这个目录中还包含了Sklearn库会用到的其他数据文件,本节用到的是包含在boston_house_prices.csv文件中的波士顿房价信息。打开这个文件,可以看到如图所示的数据。
第1行的506表示该文件中包含506条样本数据,即有506条房价数据,而13表示有13个影响房价的特征值,即从A列到M列这13列的特征值数据会影响第N列MEDV(即房价值),在表13.1中列出了部分列的英文标题及其含义。
波士顿房价文件部分中英文标题一览表
标题名 中文含义
CRIM 城镇人均犯罪率
ZN 住宅用地超过某数值的比例
INDUS 城镇非零售商用土地的比例
CHAS 查理斯河相关变量,如边界是河流则为1,否则为0
NOX 一氧化氮浓度
RM 住宅平均房间数
AGE 1940年之前建成的自用房屋比例
DIS 到波士顿五个中心区域的加权距离
RAD 辐射性公路的接近指数
TAX 每 10000 美元的全值财产税率
PTRATIO 城镇师生比例
MEDV 是自住房的平均房价
从表中可以看到,波士顿房价的数值(即MEDV)和诸如“住宅用地超过某数值的比例”等13个特征值有关。而线性回归要解决的问题是,量化地找出这些特征值和目标值(即房价)的线性关系,即找出如下的k1到k13系数的数值和b这个常量值。
MEDV = k1*CRIM + k2*ZN + … + k13*LITAT + b
上述参数有13个,为了简化问题,先计算1个特征值(DIS)与房价(MEDV)的关系,然后在此基础上讲述13个特征值与房价关系的计算方式。
如果只有1个特征值DIS,它与房价的线性关系表达式如下所示。在计算出k1和b的值以后,如果再输入对应DIS值,即可据此计算MEDV的值,以此实现线性回归的预测效果。
MEDV = k1*DIS + b
2 以波士顿房价数据为案例,搭建含一个特征值的线性预测模型
在下面的OneParamLR.py范例程序中,通过调用Sklearn库中的方法,以训练加预测的方式,推算出一个特征值(DIS)与目标值(MEDV,即房价)的线性关系。
1 # !/usr/bin/env python
2 # coding=utf-8
3 import numpy as np
4 import pandas as pd
5 import matplotlib.pyplot as plt
6 from sklearn import datasets
7 from sklearn.linear_model import LinearRegression
在上述代码中导入了必要的库,其中第6行和第7行用于导入sklearn相关库。
8 # 从文件中读数据,并转换成DataFrame格式
9 dataset=datasets.load_boston()
10 data=pd.DataFrame(dataset.data)
11 data.columns=dataset.feature_names # 特征值
12 data['HousePrice']=dataset.target # 房价,即目标值
13 # 这里单纯计算离中心区域的距离和房价的关系
14 dis=data.loc[0:data['DIS'].size-1,'DIS'].as_matrix()
15 housePrice=data.loc[0:data['HousePrice'].size-1,'HousePrice'].as_matrix()
在第9行中,加载了Sklearn库下的波士顿房价数据文件,并赋值给dataset对象。在第10行通过dataset.data读取了文件中的数据。在第11行通过dataset