最小平方误差判别(MSE)

最小平方误差判别(MSE)

前导知识:【d维感知器】,【一种更简单的求最小平方均值函数(MSE)的方法 – 梯度下降法。】
本文讨论线性不可分样本集的分类方法。在线性不可分的情况下,不等式组:
α T y i > 0 , i = 1 , 2 , . . . , N (1) \alpha^Ty_i>0,i=1,2,...,N \tag 1 αTyi>0,i=1,2,...,N(1)
不可能同时满足。一种直观的想法就是,希望求解一个 α ∗ \alpha^{*} α使错分的样本尽可能少,即不满足不等式 ( 1 ) (1) (1)的样本尽可能少。这种方法是通过解线性不等式组来最小化错分样本数目,通常采用搜索算法求解。

为了避免此问题,可以引进一系列待定的常数,把不等式组 ( 1 ) (1) (1)转变为下列方程组:
α T y i = b i > 0 , i = 1 , 2 , . . . , N (2) \alpha^Ty_i=b_i >0,i=1,2,...,N \tag 2 αTyi=bi>0,i=1,2,...,N(2)
或写成矩阵形式:
Y α = b (3) Y\alpha=b \tag 3 Yα=b(3)
方程组的误差为: e = Y α − b e=Y\alpha-b e=Yαb,可以求解方程组的最小平方误差解,即:
α ∗ : min ⁡ α J s ( α ) (4) \alpha^{*}:\min_{\alpha} J_s(\alpha) \tag 4 ααminJs(α)(4)
其中 J s ( α ) J_s(\alpha) Js(α)是最小误差平方误差(MSE)准则函数:
J s ( α ) = ∣ ∣ Y α − b ∣ ∣ 2 = ∑ i = 1 N ( α T y i − b i ) 2 (5) J_s(\alpha)=||Y\alpha-b||^2=\sum_{i=1}^{N}(\alpha^Ty_i-b_i)^2 \tag 5 Js(α)=Yαb2=i=1N(αTyibi)2(5)

1. 伪逆法求解

J s ( α ) J_s(\alpha) Js(α)在极值处对 α \alpha α的梯度应该为零,依此可以得到:
∇ J s ( α ) = 2 Y T ( Y α − b ) = 0 (6) \nabla J_s(\alpha)=2Y^T(Y\alpha-b)=0 \tag 6 Js(α)=2YT(Yαb)=0(6)
可得到:
α ∗ = ( Y T Y ) − 1 Y T b = Y + b (7) \alpha^{*}=(Y^TY)^{-1}Y^Tb=Y^{+}b \tag 7 α=(YTY)1YTb=Y+b(7)
其中 Y + = ( Y T Y ) − 1 Y T Y^{+}=(Y^TY)^{-1}Y^T Y+=(YTY)1YT是长方矩阵 Y Y Y的伪逆。

numpy中可以用np.linalg.pinv来求解

2. 梯度下降法

  1. 任意选择初始向量的权向量 α ( 0 ) \alpha(0) α(0),置 t = 0 t=0 t=0
  2. 按照梯度下降的方向迭代更新权向量
    α ( t + 1 ) = α ( t ) − ρ t Y T ( Y α − b ) (8) \alpha(t+1)=\alpha(t)-\rho_tY^T(Y\alpha-b) \tag 8 α(t+1)=α(t)ρtYT(Yαb)(8)
    直到满足 ∇ J s ( α ) ≤ ε \nabla J_s(\alpha) \leq \varepsilon Js(α)ε或者 ∣ ∣ α ( t + 1 ) − α ( t ) ∣ ∣ ≤ ε ||\alpha(t+1)-\alpha(t)|| \leq \varepsilon α(t+1)α(t)ε时为止,其中 ε \varepsilon ε是事先确定的误差灵敏度。
# 导包
import  numpy as np
import matplotlib.pyplot as plt# 构造数据,模拟100行1的数据
X = 2* np.random.rand(100,1)
y = 4+3*X +np.random.randn(100,1)# 将X于1列100行连接
X_b = np.c_[np.ones((100,1)),X]# print(X_b)# 学习率阿尔法的设定
rate = 0.01# 设置迭代次数
n_interations = 10000
m = 100#第一步:初始化
theta = np.random.randn(2,1)
count = 0# 第二步:代入公式
for interation in range(n_interations):count += 1index = np.random.randint(m)# 切片Xi = X_b[index:index+1]yi = y[index:index+1]gradients = Xi.T.dot(Xi.dot(theta)-yi)theta = theta - rate*gradients
# print(count)
print(theta) # 梯度下降法求得的参数值
print(np.linalg.pinv(X_b).dot(y)) # 伪逆法求得的参数值# 绘图准备
X_new = np.array([[0],[2]])
X_new_b = np.c_[(np.ones((2,1))),X_new]
# print(X_new_b)
y_predict = X_new_b.dot(theta)
# print(y_predict)# 绘图模块
plt.plot(X_new,y_predict,'r-')
plt.plot(X,y,'b.')
plt.title('MSE');
plt.xlabel('X');
plt.ylabel('Y');
plt.axis([0,2,0,15])
plt.show()

图示
在这里插入图片描述

伪逆法求解:np.linalg.pinv(X_b).dot(y)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部