在现实当中,我们要研究一个问题,譬如说银行贷款和个人收入问题
上面这个问题就是最简单的一元线性模型,首先看几个定义
分类问题 监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等)
回归问题 如果预测的变量是连续的,我们称其为回归
一元线性 回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。
多元线性 如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面
首先定义模型:
其中ei为样本误差
定义损失函数:
这边问什么要用真实值和预测值之间差的平方做累加呢
下面给出最小二乘法由来的推导
上面是损失函数,我们现在目的使得损失函数尽可能的小,就是求如上Q的最小值,函数求极值问题,这里就用到了导数,导数的意义是导数大于0的x处函数递增,导数小于0处x的函数递减,导数为0既为函数的极值点
下面给出过具体的计算过程
根据β0, β1的公式,就可以拿现有的x和y数据求出β0, β1具体的值了
对于多元线性回归模型
其基本的形式为:
转换成向量形式之后写成
它的损失函数为
下面是推导过程,在翻阅资料的时候 从https://www.jianshu.com/p/edaf949bcaeb
这篇文章中受到了很大的启发
用最小二乘的矩阵求导求存在一定的局限性
1.如果的逆矩阵不存在,则无法使用最小二乘法,这边要使用梯度下降法
2.当特征n非常的大时,计算的逆矩阵比较耗时
3.如果拟合函数不是线性,无法使用最小二乘法
下面是最小二乘法的实现
from numpy import *
import numpy as np
from matplotlib import pyplot as plt
data = np.array([[1,2],[3,3],[5,7],[6,8]])
#数据处理
m,n = np.shape(data)
x_data = np.ones((m,n))
y_data = np.ones((m,1))
x_data[:,1] = data[:, 0]
y_data[:,0] = data[:, n-1]
x_t = x_data.T
#求乘积
x_t_plus_x = np.dot(x_t ,x_data)
#得到x_t_plus_x的逆矩阵
XN = np.linalg.inv(np.matrix(x_t_plus_x))
#根据公式得出结果
THETA = XN * x_t * y_data
print(THETA)
plt.plot(x_data[:,-1],y_data,"ob")
plt.plot(x_data[:,-1],x_data * THETA,color="red",linewidth=2)
plt.title("matrix equation")
plt.xlabel("x axis")
plt.ylabel("y axis")
plt.show()
#原始数据
从上图可以看出具体的拟合情况