线性回归的基本概念以及正规方程(二)

简介: 本文属于 线性回归算法【AIoT阶段三】(尚未更新),这里截取自其中一段内容,方便读者理解和根据需求快速阅读。

2.2.5 带截距的线性方程

2.2.5.1 增加截距 12

🚩上述八元一次方程的解其实就是:

image.png

y = y + 12
display(y)
model = LinearRegression(fit_intercept = True)
# fit:健身,训练;特质算法、模型训练,拟合
# 数据 X 和 y 之间存在规律,拟合出来,找到规律
model.fit(X, y)
b_ = model.intercept_
print('截距是:', b_)
w_ = model.coef_
print('斜率是:', w_)
print('方程的解为:', X.dot(w_) + b_)

2.png

我们可以看出,求出来的截距虽然不是我们加上的 12,斜率也不是我们之前求过的解,但是这两个结合起来确确实实是方程的解。

image.png

求出的不是我们期望的结果,但是是符合题意的结果,这是因为,一旦我们规定了 fit_intercept = True,那么在计算机进行解方程的时候,就不会使用正规方程去进行运算

2.2.5.2 修改数据 X

🚩我们根据 1.5 多元线性回归 所讲过的对X进行修改:即给X所代表的矩阵中在最后一列的位置增加一个-1:

X = np.concatenate([X, np.full(shape = (8, 1), fill_value = 1)], axis = 1)
display(X, y)

3.png

那么这个数据,相比较与最开始的八元一次方程,我们让 X 增加了一列,y 增加了 12 ,那么接下来进行正规方程的计算:

model = LinearRegression(fit_intercept = False)
model.fit(X, y)
display(model.coef_, model.intercept_)

image.png

image.png

W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
W

image.png

可以看出即使是使用我们推导出的正规方程也和我们期待的相差甚远,我们来查看一下此时的X

X.shape

image.png

这意味着,我们有八个方程,但是我们有九个未知数,显然,对于这样的一个方程组,我们并非只有一组解,而是有无穷多组解,这也是我们产生偏差的原因。


你或许有疑问,既然有无穷多组解,那么每次运行的结果应该是不同的,为什么对于正规方程每次运行的结果确实相同的:这是因为算法会默认给我们算出一个 最优解,所以我们要有唯一解,就需要我们人为的添加一个方程:

# w就是标准的解
w = np.array([ 1.,  5., 15.,  3.,  8.,  4., 17., 12.])
# 造一个方程出来
X9 = np.random.randint(-15, 15, size = 8)
display(X9)

image.png

接下来对于这个方程我们按照增加 12 截距和修改数据的方法来改变这个方程:

# 上面的8个方程,都有截距12,第九个方程也是如此
X9.dot(w) + 12
y = np.concatenate([y, [X9.dot(w) + 12]])
y
X9 = np.concatenate([X9, [1]])
X9
X = np.concatenate([X, [X9]])
X

4.png

以上操作后我们就处理好了 X  和 y ,那么接下来,就是见证奇迹的时刻:

# 计算正规方程
np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)

image.png

使用线性回归:

model = LinearRegression(fit_intercept = False)
model.fit(X, y)
display(model.coef_)

image.png

那么这还是有些区别,因为我们想要的是截距以及斜率,但是此时我们只有斜率,故我们可以把 fit_intercept 设置为 True

model = LinearRegression(fit_intercept = True)
model.fit(X, y)
display(model.coef_, model.intercept_)

image.png

截距是不是离我们的真实值特别靠近啦,此时我们只需要进行四舍五入即可,对于值为 0  的解,即我们自定义出来的 X 9 ,0  代表其没有权重,故我们可以舍去它

model = LinearRegression(fit_intercept = True)
model.fit(X[:,:-1], y)
display(model.coef_, model.intercept_.round())

image.png

芜湖!大功告成!!!


2.3 矩阵转置公式与求导公式

转置公式如下:

image.png

求导公式如下:

image.png

2.4 推导正规方程 θ 的解

  1. 矩阵乘法公式展开

image.png

  1. 进行求导(注意X、y是已知量,θ \thetaθ 是未知数):

image.png

  1. 根据上面求导公式进行运算:

image.png


  1. 令导数J ′ ( θ ) = 0 :

image.png

  1. 矩阵没有除法,使用逆矩阵进行转化:

image.png

到此为止,公式推导出来了~

image.gif

2.5 凸函数判定

🚩判定损失函数是凸函数的好处在于我们可能很肯定的知道我们求得的极值即最优解,一定是全局最优解。

image.png

如果是非凸函数,那就不一定可以获取全局最优解,如下图:

image.png

来一个更加立体的效果图:

image.jpeg

判定凸函数的方式: 判定凸函数的方式非常多,其中一个方法是看 黑塞矩阵 是否是 半正定 的。

image.png

目录
相关文章
|
6月前
|
机器学习/深度学习 数据采集 自然语言处理
岭回归与LASSO回归:解析两大经典线性回归方法
岭回归与LASSO回归:解析两大经典线性回归方法
岭回归与LASSO回归:解析两大经典线性回归方法
|
机器学习/深度学习 数据采集 数据处理
岭回归与LASSO回归:解析两大经典线性回归方法(上)
岭回归与LASSO回归:解析两大经典线性回归方法
|
1月前
|
机器学习/深度学习 API
机器学习入门(七):线性回归原理,损失函数和正规方程
机器学习入门(七):线性回归原理,损失函数和正规方程
|
5月前
|
机器学习/深度学习 API Python
线性回归原理(一)
线性回归用于预测,如房价、销售额和贷款额度。它通过回归方程连接自变量与因变量,例如房价可能依赖于距离和污染水平。在Python的`sklearn`库中,`LinearRegression`用于建模,`coef_`给出回归系数。损失函数衡量预测误差,用于模型优化。
|
5月前
|
算法
线性回归原理(二)
**线性回归与梯度下降简介:** 梯度下降是一种优化算法,常用于线性回归,模拟下山过程寻找函数最小值。在单变量线性回归中,以函数f(x)=x²为例,从初始点开始,每次迭代沿着负梯度(函数增快的方向相反)移动,通过学习率α控制步长。重复此过程,逐步逼近最小值x=0。在多变量情况下,梯度是一个向量,指向函数增长最快的方向。评估线性回归模型性能的指标有平均绝对误差(MAE)、均方误差(MSE)和均方根误差(RMSE),它们衡量预测值与实际值的差距,越小表示模型越准确。
|
6月前
使用R语言进行多项式回归、非线性回归模型曲线拟合
使用R语言进行多项式回归、非线性回归模型曲线拟合
|
6月前
|
机器学习/深度学习 存储 算法
【视频】Lasso回归、岭回归等正则化回归数学原理及R语言实例(二)
【视频】Lasso回归、岭回归等正则化回归数学原理及R语言实例二)
|
6月前
|
机器学习/深度学习 并行计算 算法
【视频】Lasso回归、岭回归等正则化回归数学原理及R语言实例(一)
【视频】Lasso回归、岭回归等正则化回归数学原理及R语言实例(一)
|
机器学习/深度学习 算法 Python
实战:用线性函数、梯度下降解决线性回归问题
实战:用线性函数、梯度下降解决线性回归问题
|
机器学习/深度学习 人工智能 vr&ar
【机器学习】线性回归——最小二乘法(理论+图解+公式推导)
【机器学习】线性回归——最小二乘法(理论+图解+公式推导)
832 0
【机器学习】线性回归——最小二乘法(理论+图解+公式推导)