一周搞懂一个机器学习算法之线性回归Linear Regression
Linear Regression
线性回归是最简单的机器学习方法,就用它来作为这个系列的第一篇了
- 原理简介
- 我的理解
- 代码实现
线性回归原理简介
在统计学中,线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
我的理解
举个最普遍的例子,房价。什么是一元线性回归呢?说白了就是,一个自变量,一个函数,对应到房价里,可以把房子的平米数作为这个自变量,然后房价是函数值。什么是多元线性回归呢?其实就是自变量有多个,再对应到房价中,除了房子的平米数,所在城市、开发商、地段、朝向、楼层、物业质量等等都会影响到房子的价格,他们都是自变量。放到数学表达里,一元就是一个值,多元就变成一个向量啦。下面以一元为例展开介绍。
所谓线性回归问题,就是已知很多点的对应关系(可以想象一个二维坐标图上有很多个点,每个点的坐标都是确定的),然后根据这些已经确定的点,拟合出一条直线,来判断未知点的函数值问题。为了使这条直线拟合的好,需要一个评价标准,我们将这个标准定义为:所有点预测值与真实值差的平方再求和,其实就是让每个点离直线的距离尽可能的小,这应该在中学就有学过,用公式写出来就是,其中,表示点的真实值,表示直线的函数值,显然,要想让直线拟合得好,上面这个式子的值就要尽可能小(我们称之为损失函数loss),所以问题转化为求函数最小值情况下自变量的取值问题。
记上式为,即,我们知道求函数最小值时的方法就是求导数然后令其等于0,这里是关于a和b的二元函数,分别对其求偏导再等于0就好了。求导后移项,得到下面的两个公式:
这样一条回归直线就求出来了,在进行回归预测时,只需要输入对应的自变量,便可以求得估计的函数值。
代码实现
import matplotlib.pyplot as plt
#自己定义一些点
points_x = [1,1.8,3,4,2,2.9,4,5]
points_y = [1.8,3,4,5,2.5,2,4,4]
sumx = 0
sumx2 = 0
sumy = 0
sumxy = 0
for i in range(len(points_x)):
sumx = points_x[i] + sumx
sumx2 = points_x[i] * points_x[i] + sumx2
sumy = points_y[i] + sumy
sumxy = points_x[i] * points_y[i] + sumxy
#按照“我的理解”中的公式计算斜率a和截距b
x_bar = sumx / len(points_x)
x2_bar = sumx2 / len(points_x)
y_bar = sumy / len(points_x)
xy_bar = sumxy / len(points_x)
a = (x_bar * y_bar - xy_bar) / (pow(x_bar,2) - x2_bar)
b = y_bar - a * x_bar
#根据已知的点,拟合出一条直线
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(points_x,points_y,'bo')
x = range(1,6)
y = [i*a+b for i in x]
ax.plot(x,y)
上一篇: Sqlserver 查找数据库中含有某字段的所有表
下一篇: 遗传编程——java语言实现