欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一周搞懂一个机器学习算法之线性回归Linear Regression

程序员文章站 2022-05-21 22:33:13
...

Linear Regression

线性回归是最简单的机器学习方法,就用它来作为这个系列的第一篇了

  • 原理简介
  • 我的理解
  • 代码实现

线性回归原理简介

在统计学中,线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。

我的理解

举个最普遍的例子,房价。什么是一元线性回归呢?说白了就是,一个自变量,一个函数,对应到房价里,可以把房子的平米数作为这个自变量,然后房价是函数值。什么是多元线性回归呢?其实就是自变量有多个,再对应到房价中,除了房子的平米数,所在城市、开发商、地段、朝向、楼层、物业质量等等都会影响到房子的价格,他们都是自变量。放到数学表达里,一元就是一个值,多元就变成一个向量啦。下面以一元为例展开介绍。

所谓线性回归问题,就是已知很多点的对应关系(可以想象一个二维坐标图上有很多个点,每个点的坐标都是确定的),然后根据这些已经确定的点,拟合出一条直线,来判断未知点的函数值问题。为了使这条直线拟合的好,需要一个评价标准,我们将这个标准定义为:所有点预测值与真实值差的平方再求和,其实就是让每个点离直线的距离尽可能的小,这应该在中学就有学过,用公式写出来就是i=1n(Yi(aXi+b))2,其中,Yi表示点的真实值,aXi+b表示直线的函数值,显然,要想让直线拟合得好,上面这个式子的值就要尽可能小(我们称之为损失函数loss),所以问题转化为求函数最小值情况下自变量的取值问题。

记上式为W(a,b),即W(a,b)=i=1n(Yi(aXi+b))2,我们知道求函数最小值时的方法就是求导数然后令其等于0,这里是关于a和b的二元函数,分别对其求偏导再等于0就好了。求导后移项,得到下面的两个公式:

a=X¯Y¯XY¯(X¯)2X2¯
b=Y¯aX¯

这样一条回归直线就求出来了,在进行回归预测时,只需要输入对应的自变量,便可以求得估计的函数值。

代码实现

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)

一周搞懂一个机器学习算法之线性回归Linear Regression

相关标签: machine learning