15线性回归-房价与尺寸线性拟合
线性回归
线性回归(Linear Regression)是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
线性回归利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
线性回归:使用形如
的线性模型拟合数据输入和输出之间的映射关系的。
线性回归的实际用途
1、如果目标是预测或者映射,线性回归可以用来对观测数据集的y和X的值拟合出一个预测模型。当完成这样一个模型以后,对于一个新增的X值,在没有给定与它相配对的y的情况下,可以用这个拟合过的模型预测出一个y值。
2、给定一个变量y和一些变量X1…Xp,这些变量有可能与y相关,线性回归分析可以用来量化y与X之间相关性的强度,评估出与y不相关的Xj,并识别出哪些X的子集包含了关于y的冗余信息。
线性回归的应用
背景:与房价密切相关的除了单位的房价,还有房屋的尺寸。我们可以根据已知的房屋成交价格和房屋的尺寸进行线性回归,继而可以对已知房屋尺寸,而对未知房屋成交价格的实例进行成交价格的预测。
目标:对房屋成交信息建立回归方程,并依据回归方程对房屋价格进行预测。
技术路线:sklearn.linear_model.LinearRegression
实例数据:
- 为了方便展示,成交信息只使用了房屋的面积以及对应的成交价格。
- 房屋面积单位为平方英尺(ft^2)
- 屋成交价格单位为万元
可行性分析:
- 简单而直观的方式是通过数据的可视化,直接观察房屋成交价格与房屋尺寸间是否存在线性关系。
- 对于本实验的数据来说,散点图就可以很好的将其在二维平面中进行可视化表示。
实验过程
使用算法:线性回归
实现步骤:
- 1、建立工程并导入sklearn包
- 2、加载训练数据,建立回归方程
- 3、可视化处理
实现步骤
1、建立工程并导入sklean包
- 创建house.py文件
- 导人sklearn相关包
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
2、加载训练数据,建立回归方程
调用sklearn.linear_model.LinearRegression(),所需参数:
-
fit_intercept :布尔型参数,表示是否计算该模型截距。
可选参数。
-
normalize :布尔型参数,若为True,则X在回归前进行归一化。
-
可选参数。默认值为False。
线性回归fit函数用于拟合输人输出数据,调用形式为linear.fit(X,y, sample_weight=None):
- X:为训练向量
- y:为相对于X的目标向量
- sample_weight:分配给各个样本的权重数组,一般不需要使用,可省略。
如果有需要,可以通过两个属性查看回归方程的系数及截距。
3、可视化处理
具体代码
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
# 读取数据集
datasets_X = [] # 房屋面积
datasets_Y = [] # 房屋价格
fr = open('prices.txt', 'r')
lines = fr.readlines()
for line in lines:
items = line.strip().split(',')
datasets_X.append(int(items[0])) # 注意加上类型转换
datasets_Y.append(int(items[1]))
# 将datasets_X转换为二维数组,以符合 linear.fit 函数的参数要求
datasets_X = np.array(datasets_X).reshape([-1, 1])
datasets_Y = np.array(datasets_Y)
# 以数据datasets_X的最大值和最小值为范围,建立等差数列,方便后续画图。
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX, maxX).reshape([-1, 1])
linear = linear_model.LinearRegression()
linear.fit(datasets_X, datasets_Y)
# 图像中显示
plt.scatter(datasets_X, datasets_Y, color='red', label='origin data')
plt.plot(X, linear.predict(X), color='blue', label='linear regression prediction')
plt.legend() # 使label生效
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()
结果展示
通过回归方程拟合的直线与原有数据点的关系如下图所示,依据该回归方程即可通过房屋的尺寸,来预测房屋的成交价格。
上图为数据的散点图,其中横坐标为房屋面积,纵坐标为房屋的成交价格。
可以观察到,靠近坐标左下角部分的点,表示房屋尺寸较小的房子,其对应的房屋成交价格也相对较低;靠近坐标右上部分的点对应于大尺寸高价格的房屋。
从总体来看,房屋的面积和成交价格基本成正比。
最后的思考
这次的实验不难理解,原理也很简单,所以做起来很顺利。
代码也不是很难,运行和输出都没有输错。
需要准备一个数据文件prices.txt,应该百度就能找到。
今天终于穿上了妈妈寄的棉裤,真的太冷了,晚上六点半才下课,来实验室天已经黑了呜呜呜。