本文用线性回归解决什么问题?
一个朋友最近找到我,说想去上海生活,要把武汉的房子卖掉,但是他不清楚行情,不知道自己的房子值多少钱,我是个热心肠,遇到这种事肯定不会袖手旁观,于是我想了个办法,决定帮他一把。
解决问题的关键有两个。
一是我必须拿到足够的当地房价销售数据,这个我可以找我的哥们铁子搞定,铁子在中国最大的房屋中介做区域经理,找他要一点数据应该不会太难。
二是需要基于这些销售数据,给出一个线性函数(当然是线性,因为我在讲线性回归),该函数有一个自变量x,x表示房屋的面积,函数值y代表房屋的成交价格,如以下公式。
y=f(x)
这样,我就可以把朋友房子的面积x代入以上函数进行计算,得到一个房价,这个价格是基于模型计算出的预估成交价格,之后把这个价格告诉朋友,让他挂出去的时候作为参考。
当然市场行为有非常多的偶然因素,比如朋友如果急着卖房,他最终的成交价肯定会低于我的预估价格,我们在学习线性回归时,不考虑这些非学术因素。
我觉得到目前为止,这个思路很棒,接下来,就开始行动了!
建立数据集
我马上给铁子拨了个电话。
”哥们,帮个忙,武汉地区的成交价格数据可以给点吗,我做个预测模型。”
铁子知道我是个技术控,平时吃饭聊天经常有一些稀奇古怪的想法,我一开口他就大概知道我又要鼓捣一些东西了。
”行,不过我们公司最近好像也在研究预测模型,你研究的好,可以给我提供点思路,稍候发你。”
铁子不愧是铁子,就是痛快。
于是,我拿到了以下数据。每行都代表一条销售记录,第一列代表房屋面积,第二列代表房屋成交价格。我用工具,画了一个平面图,这样数据看起来更加直观。

代码
import matplotlib.pyplot as pltimport numpy as npif __name__ == '__main__':# 从数据集文件读取1、2列data = np.genfromtxt('train_hw.csv',delimiter=',',dtype='float',usecols=[0,1])x = data[::,1]y = data[::,0]fig, ax = plt.subplots(1, 1, figsize=(7,7))# 绘制散点图ax.scatter(x,y, s=20, c=x)ax.set_xlabel('Square size')ax.set_ylabel('Deal price')plt.show()
数据集
105,170
109,180
103,145
118,233
112,200
115,190
121,250
127,255
128,265
134,285
132,265
130,255
141,315
146,305
147,312
152,355
154,375
155,385
161,435
162,425
165,435
假设函数
销售数据已经搞定了,接下来要基于这些数据生成一个函数了,在机器学习中,这个函数又叫做假设函数,名字很形象,因为我们目前还不知道这个函数长什么样,所以需要先假设一个函数(有点类似列方程组时对未知变量以x,y代替),虽然我们不知道假设函数具体长什么样,但是我们知道它是一根直线,这里我们先写出方程。
f(x)=ax+b
代价函数
将模型中的θ0和θ1作为自变量,得到以下函数
J(θ0,θ1)=2m1i=1∑M(hθ(x(i))−y(i))2
线性回归 Linear regression model
a=b
梯度下降 Gradient descent algorithm
(j=0,j=1)θj=θj−αδθjδJ(θ0,θ1)
求出偏导数θ0
j=0: δθ0δJ(θ0,θ1)=δθ0δ2m1i=1∑M(hθ(x(i))−y(i))2
=δθ0δJ(θ0,θ1)=δθ0δ2m1i=1∑M(θ0+θ1x(i)−y(i))2
=m1i=1∑M(hθ(x(i))−y(i))
求出偏导数θ1
j=1:δθ1δJ(θ0,θ1)=δθ1δ2m1i=1∑M(hθ(x(i))−y(i))2
=δθ1δJ(θ0,θ1)=δθ1δ2m1i=1∑M(θ0+θ1x(i)−y(i))2
=m1i=1∑M(hθ(x(i))−y(i))⋅x(i)
将偏导数公式代入梯度下降公式
j=0: θ0=θ0−m1i=1∑M(hθ(x(i))−y(i))
j=1: θ1=θ1−m1i=1∑M(hθ(x(i))−y(i))⋅x(i)




