精华内容
下载资源
问答
  • 正规方程
    2022-01-12 20:39:40

    正规方程


    正规方程提供了一种求 θ \theta θ的解析解法,不再需要运行迭代算法,而是可以直接一次性的求解 θ \theta θ的最优解。

    image-20220112194653177

    利用高等数学知识,我们知道可以利用求导的方法来求解 J ( θ ) J(\theta) J(θ)的最小值,若 θ \theta θ表示的是n+1维向量,则对 θ j \theta_j θj逐个求偏导

    举个栗子:

    image-20220112195637839

    最下面这个方程的结果就是使得代价函数最小化的 θ \theta θ。使用正规方程法求解 J ( θ ) J(\theta) J(θ)的最小值时,不需要进行特征缩放。

    如何选择梯度下降法还是正规方程法?

    梯度下降的缺点: 需要选择学习速率 α \alpha α,这通常表示要运行很多次来尝试不同的 α \alpha α;需要多次的迭代,就算可能会很慢。

    梯度下降的优点: 在特征变量很多的情况下也能运行地相当好。

    正规方程的缺点: 计算 ( X T X ) − 1 (X^TX)^{-1} (XTX)1这一项时,不仅要求 X T X X^TX XTX得到的矩阵满秩,而且计算逆矩阵的代价大概是以矩阵维度的三次方增长,时间复杂度大概是 O ( n 3 ) O(n^3) O(n3)。所以当矩阵维数n过大(通常是上万)时,计算会变得非常缓慢,此时选择梯度下降法效率会更高。

    如果 X T X X^TX XTX不可逆怎么办?

    不可逆的原因:

    (1)矩阵中的两个特征之间存在线性变换关系(线性相关),矩阵不满秩;

    (2)n>m(未知数个数>方程个数),方程组有无穷多个解。

    Octave里面求逆的函数有两个:pinv和inv,前者是伪逆,后者是逆。数学上可以证明,只要使用pinv就能计算出想要的 θ \theta θ值,即使是在 X T X X^TX XTX不可逆的情况下。

    X T X X^TX XTX是奇异矩阵时,首先看特征里是否有一些多余的特征可以删除,然后调整特征个数,可以选择删除一些影响不大的特征,防止n>m的情况发生。

    更多相关内容
  • 正规方程回归算法Python实现 原始数据 假设关系为 y=3+x+2z ==== y=a+bx+cz 。。。 canshu=(bianliang.T*bianliang).I*bianliang.T*y #.T转置,.I逆矩阵,*矩阵相乘
  • 使用正规方程组的方法实现最小二乘: 1、 方程组Ax=b,其中A为m行n列的系数矩阵,其转置矩阵为n行m列的矩阵,使A的转置矩阵和A自身相乘可得到一个n行n列的系数矩阵,同时等号右侧也让A的转置矩阵和n维的向量b相乘...
  • 线性回归的基本概念以及正规方程

    千次阅读 多人点赞 2022-01-26 18:48:50
    本文属于线性回归算法【AIoT阶段三】(尚未更新),这里截取自其中一段内容,线性回归是机器学习中有监督机器学习下的一种算法。 回归问题主要关注的是因变量(需要预测的值,可以是一个也可以是多个)和一个...正规方程

    前言

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

    线性回归是机器学习中有监督机器学习下的一种算法。 回归问题主要关注的是因变量(需要预测的值,可以是一个也可以是多个)和一个或多个数值型的自变量(预测变量)之间的关系。

    需要预测的值:即目标变量,target,y,连续值预测变量。

    影响目标变量的因素: X 1 X_1 X1 X n X_n Xn,可以是连续值也可以是离散值。

    因变量和自变量之间的关系:即模型,model,是我们要求解的。

    1.基本概念

    1.1 连续值

    🚩连续值就是连续的一连串数字,是可以无限细分下去的一段,比如我们的身高,你可以说你身高在 175 175 175 185 185 185,继续细分下去也是可以的,你甚至可以说你的身高在 175.003 175.003 175.003 182.231 182.231 182.231 甚至继续下分下去也没可以的,这就被称为是连续值。
    在这里插入图片描述

    1.2 离散值

    🚩离散值就是单个孤立的点,比如我国共计34个省级行政区,我们绝不可以说成我国共计34.3个省级行政区,或者是33.6个省级行政区,必须是 34 整个,这就是离散值。
    在这里插入图片描述

    1.3 简单线性回归

    🚩什么是算法?研究算法说白了还是在研究公式,简单线性回归属于一个算法,它所对应的公式: y = w x + b y = wx + b y=wx+b,这个公式中, y y y 是目标变量即未来要预测的值, x x x 是影响 y y y 的因素, w , b w,b w,b 是公式上的参数即要求的模型。其实 b b b 就是咱们的截距, w w w 就是斜率嘛! 所以很明显如果模型求出来了,未来影响 y y y 值的未知数就是一个 x x x 值,也可以说影响 y y y 值 的因素只有一个,所以这是就叫简单线性回归的原因,如下图所表示的直线,就是一个简单线性回归的意思:

    在这里插入图片描述

    1.4 基本名词的定义

    A c t u a l v a l u e Actual value Actualvalue:真实值,一般使用 y y y 表示。

    P r e d i c t e d v a l u e Predicted value Predictedvalue:预测值,是把已知的 x x x 带入到公式里面和出来的参数 w , b w,b w,b 计算得到的,一般使用 y ^ \hat{y} y^ 表示。

    E r r o r Error Error:误差,预测值和真实值的差距,一般使用 ε \varepsilon ε 表示

    最优解:尽可能的找到一个模型使得整体的误差最小,整体的误差通常叫做损失 L o s s Loss Loss

    L o s s Loss Loss:整体的误差, L o s s Loss Loss 通过损失函数 L o s s Loss Loss f u n c t i o n function function 计算得到。

    1.5 多元线性回归

    🚩多元线性回归无非就是比简单线性回归变得: 多元,所谓多元,就是在某些情况下,影响结果 y y y 的因素不止有一个,比如我们在预测股票的时候,国家的政策起到影响作用,国民的经济也是影响因素,甚至他国的经济政策也会影响到我们,等等等等有诸多原因,为此,仅仅一个变量 x x x 就显得不够用了,这时,我们的 x x x 就从 1 1 1 个变成了 n n n 个: X 1 X_1 X1 X n X_n Xn, 同时简单线性回归的公式也就不在适用了。多元线性回归公式如下:
    y ^ = w 1 X 1 + w 2 X 2 + … … + w n X n + b \hat{y} = w_1X_1 + w_2X_2 + …… + w_nX_n + b y^=w1X1+w2X2++wnXn+b

    b是截距,也可以使用 w 0 w_0 w0来表示

    y ^ = w 1 X 1 + w 2 X 2 + … … + w n X n + w 0 \hat{y} = w_1X_1 + w_2X_2 + …… + w_nX_n + w_0 y^=w1X1+w2X2++wnXn+w0

    y ^ = w 1 X 1 + w 2 X 2 + … … + w n X n + w 0 ∗ 1 \hat{y} = w_1X_1 + w_2X_2 + …… + w_nX_n + w_0 * 1 y^=w1X1+w2X2++wnXn+w01

    使用向量来表示, X X X表示所有的变量,是一维向量; w w w 表示所有的系数(包含 w 0 w_0 w0),是一维向量,根据向量乘法规律,可以这么写: y ^ = W T X \hat{y} = W^TX y^=WTX

    y ^ = ∣ w 1 w 2 . . . w n w 0 ∣ ∗ ∣ X 1 X 2 . . . X n 1 ∣ \hat{y} =\left|\begin{matrix}w_1 \\ w_2 \\ ... \\ w_n \\ w_0 \end{matrix}\right| *\left|\begin{matrix}X_1 & X_2 & ... & X_n & 1 \end{matrix}\right| y^=w1w2...wnw0X1X2...Xn1

    2.正规方程

    2.1 最小二乘法的矩阵表示

    🚩最小二乘法可以将误差方程转化为有确定解的代数方程组(其方程式数目正好等于未知数的个数),从而可求解出这些未知参数。这个有确定解的代数方程组称为最小二乘法估计的正规方程。公式如下:
    θ = ( X T X ) − 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)1XTy 或者 W = ( X T X ) − 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)1XTy ,其中的 W 、 θ W、\theta Wθ 即使方程的解!
    在这里插入图片描述
    公式是如何推导的在 2.4 推导正规方程 θ \theta θ 的解 中进行详细讲解。

    最小二乘法公式如下:
    J ( θ ) = 1 2 ∑ i = 0 n ( h θ ( x i ) − y i ) 2 J(\theta) = \frac{1}{2}\sum\limits_{i = 0}^n(h_{\theta}(x_i) - y_i)^2 J(θ)=21i=0n(hθ(xi)yi)2

    使用矩阵表示:

    J ( θ ) = 1 2 ∑ i = 0 n ( h θ ( x i ) − y ) ( h θ ( x i ) − y ) J(\theta) = \frac{1}{2}\sum\limits_{i = 0}^n(h_{\theta}(x_i) - y)(h_{\theta}(x_i) - y) J(θ)=21i=0n(hθ(xi)y)(hθ(xi)y)

    J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2}(X\theta - y)^T(X\theta - y) J(θ)=21(Xθy)T(Xθy)

    之所以要使用转置 T T T,是因为,矩阵运算规律是:矩阵 A A A 的一行乘以矩阵 B B B 的一列!

    在这里插入图片描述

    2.2 多元一次方程举例

    2.2.1 二元一次方程

    { x + y = 14 2 x − y = 10 \begin{cases} x + y=14\\ 2x - y = 10\\ \end{cases} {x+y=142xy=10

    import numpy as np
    import matplotlib.pyplot as plt
    
    X = np.array([[1, 1],
                  [2, -1]])
    y = np.array([14, 10])
    
    # linalg 线性代数,solve计算线性回归问题
    np.linalg.solve(X, y)
    

    在这里插入图片描述

    我们来根据上述中的正规方程来计算一下: W = ( X T X ) − 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)1XTy

    A = X.T.dot(X)
    B = np.linalg.inv(A)   ## 求逆矩阵
    C = B.dot(X.T)
    C.dot(Y)
    

    在这里插入图片描述
    可以发现,我们使用正规方程可以同样有效的进行计算,我们再来举几个例子

    2.2.2 三元一次方程

    { x − y + z = 100 2 x + y − z = 80 3 x − 2 y + 6 z = 256 \begin{cases} x - y + z = 100\\ 2x + y -z = 80\\ 3x - 2y + 6z = 256\\ \end{cases} xy+z=1002x+yz=803x2y+6z=256

    import numpy as np
    import matplotlib.pyplot as plt
    
    X = np.array([[1, -1, 1],
                  [2, 1, -1],
                  [3, -2, 6]])
    y = np.array([100, 80, 256])
    
    # 根据正规方程进行计算:
    W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
    W
    

    在这里插入图片描述

    2.2.3 八元一次方程

    { 14 x 2 + 8 x 3 + 5 x 5 + − 2 x 6 + 9 x 7 + − 3 x 8 = 339 − 4 x 1 + 10 x 2 + 6 x 3 + 4 x 4 + − 14 x 5 + − 2 x 6 + − 14 x 7 + 8 x 8 = − 114 − 1 x 1 + − 6 x 2 + 5 x 3 + − 12 x 4 + 3 x 5 + − 3 x 6 + 2 x 7 + − 2 x 8 = 30 5 x 1 + − 2 x 2 + 3 x 3 + 10 x 4 + 5 x 5 + 11 x 6 + 4 x 7 + − 8 x 8 = 126 − 15 x 1 + − 15 x 2 + − 8 x 3 + − 15 x 4 + 7 x 5 + − 4 x 6 + − 12 x 7 + 2 x 8 = − 395 11 x 1 + − 10 x 2 + − 2 x 3 + 4 x 4 + 3 x 5 + − 9 x 6 + − 6 x 7 + 7 x 8 = − 87 − 14 x 1 + 4 x 3 + − 3 x 4 + 5 x 5 + 10 x 6 + 13 x 7 + 7 x 8 = 422 − 3 x 1 + − 7 x 2 + − 2 x 3 + − 8 x 4 + − 6 x 6 + − 5 x 7 + − 9 x 8 = − 309 \begin{cases}&14x_2 + 8x_3 + 5x_5 + -2x_6 + 9x_7 + -3x_8 = 339\\&-4x_1 + 10x_2 + 6x_3 + 4x_4 + -14x_5 + -2x_6 + -14x_7 + 8x_8 = -114\\&-1x_1 + -6x_2 + 5x_3 + -12x_4 + 3x_5 + -3x_6 + 2x_7 + -2x_8 = 30\\&5x_1 + -2x_2 + 3x_3 + 10x_4 + 5x_5 + 11x_6 + 4x_7 + -8x_8 = 126\\&-15x_1 + -15x_2 + -8x_3 + -15x_4 + 7x_5 + -4x_6 + -12x_7 + 2x_8 = -395\\&11x_1 + -10x_2 + -2x_3 + 4x_4 + 3x_5 + -9x_6 + -6x_7 + 7x_8 = -87\\&-14x_1 + 4x_3 + -3x_4 + 5x_5 + 10x_6 + 13x_7 + 7x_8 = 422\\&-3x_1 + -7x_2 + -2x_3 + -8x_4 + -6x_6 + -5x_7 + -9x_8 = -309\end{cases} 14x2+8x3+5x5+2x6+9x7+3x8=3394x1+10x2+6x3+4x4+14x5+2x6+14x7+8x8=1141x1+6x2+5x3+12x4+3x5+3x6+2x7+2x8=305x1+2x2+3x3+10x4+5x5+11x6+4x7+8x8=12615x1+15x2+8x3+15x4+7x5+4x6+12x7+2x8=39511x1+10x2+2x3+4x4+3x5+9x6+6x7+7x8=8714x1+4x3+3x4+5x5+10x6+13x7+7x8=4223x1+7x2+2x3+8x4+6x6+5x7+9x8=309

    import numpy as np
    import matplotlib.pyplot as plt
    
    X = np.array([[0, 14, 8, 0, 5, -2, 9, -3],
                  [-4, 10, 6, 4, -14, -2, -14, 8],
                  [-1, -6, 5, -12, 3, -3, 2, -2],
                  [5, -2, 3, 10, 5, 11, 4, -8],
                  [-15, -15, -8, -15, 7, -4, -12, 2],
                  [11, -10, -2, 4, 3, -9, -6, 7],
                  [-14, 0, 4, -3, 5, 10, 13, 7],
                  [-3, -7, -2, -8, 0, -6, -5, -9]])
    y = np.array([339, -114, 30, 126, -395, -87, 422, -309])
    
    # 根据正规方程进行计算:
    W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
    W
    

    在这里插入图片描述

    2.2.4 s k l e a r n sklearn sklearn 算法使用

    🚩没有安装这个包的同学在命令行中输入:pip install sklearn 即可,如果你看过博文:最详细的Anaconda Installers 的安装【numpy,jupyter】(图+文) 或者 数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解),那么这一步可省略:在安装 j u p y t e r jupyter jupyter 的时候已经安装完成,如果你没有设置以 清华源 为地址进行下载会很慢,配置默认下载从 清华源 下载可见博文:matplotlib的安装教程以及简单调用

    下面还是来计算我们上述的八元一次方程组:

    # linear:线性  model:模型、算法
    # LinearRegression: 线性回归
    from sklearn.linear_model import LinearRegression
    import numpy as np
    import matplotlib.pyplot as plt
    
    model = LinearRegression()
    
    X = np.array([[0, 14, 8, 0, 5, -2, 9, -3],
                  [-4, 10, 6, 4, -14, -2, -14, 8],
                  [-1, -6, 5, -12, 3, -3, 2, -2],
                  [5, -2, 3, 10, 5, 11, 4, -8],
                  [-15, -15, -8, -15, 7, -4, -12, 2],
                  [11, -10, -2, 4, 3, -9, -6, 7],
                  [-14, 0, 4, -3, 5, 10, 13, 7],
                  [-3, -7, -2, -8, 0, -6, -5, -9]])
    y = np.array([339, -114, 30, 126, -395, -87, 422, -309])
    
    # X:数据  y:目标值
    model.fit(X, y)
    # coef_ : 结果、返回值
    # 就是指方程的解、W、系数、斜率
    model.coef_
    

    在这里插入图片描述

    我们发现,运行结果和我们用正规方程计算出来的不一样,这是因为在代码:

    model = LinearRegression()
    

    有一个参数叫做:intercept_,意为截距,即我们调用 s k l e a r n sklearn sklearn 自动计算了截距:

    # 默认计算截距
    model.intercept_
    

    在这里插入图片描述
    但其实我们的八元一次方程是没有截距的,故我们在代码改为如下即可:

    model = LinearRegression(fit_intercept = False)
    

    完整代码:

    # linear:线性  model:模型、算法
    # LinearRegression: 线性回归
    from sklearn.linear_model import LinearRegression
    import numpy as np
    import matplotlib.pyplot as plt
    
    model = LinearRegression(fit_intercept = False)
    
    X = np.array([[0, 14, 8, 0, 5, -2, 9, -3],
                  [-4, 10, 6, 4, -14, -2, -14, 8],
                  [-1, -6, 5, -12, 3, -3, 2, -2],
                  [5, -2, 3, 10, 5, 11, 4, -8],
                  [-15, -15, -8, -15, 7, -4, -12, 2],
                  [11, -10, -2, 4, 3, -9, -6, 7],
                  [-14, 0, 4, -3, 5, 10, 13, 7],
                  [-3, -7, -2, -8, 0, -6, -5, -9]])
    y = np.array([339, -114, 30, 126, -395, -87, 422, -309])
    
    # X:数据  y:目标值
    model.fit(X, y)
    # coef_ : 结果、返回值
    # 就是指方程的解、W、系数、斜率
    model.coef_
    

    在这里插入图片描述

    此时我们再来计算一下截距:

    model.intercept_
    

    在这里插入图片描述

    2.2.5 带截距的线性方程

    2.2.5.1 增加截距 12 12 12

    🚩上述八元一次方程的解其实就是:
    f ( x ) = x 1 + 5 x 2 + 15 x 3 + 3 x 4 + 8 x 5 + 4 x 6 + 17 x 7 + 12 x 8 {f(x)=x_1+5x_2+15x_3+3x_4+8x_5+4x_6+17x_7+12x_8} f(x)=x1+5x2+15x3+3x4+8x5+4x6+17x7+12x8

    现在我们不妨让上式加上一个任意常数,比如 12 12 12
    那么方程的解就变成了: f ( x ) = x 1 + 5 x 2 + 15 x 3 + 3 x 4 + 8 x 5 + 4 x 6 + 17 x 7 + 12 x 8 + 12 {f(x)=x_1+5x_2+15x_3+3x_4+8x_5+4x_6+17x_7+12x_8+12} f(x)=x1+5x2+15x3+3x4+8x5+4x6+17x7+12x8+12

    那么显然我们的 y y y 要发生改变,即对于 y y y 中的每一个元素都要加上 12 12 12:这时,因为有了截距,我们就需要让 intercept 置为 True

    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_)
    

    在这里插入图片描述

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

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

    2.2.5.2 修改数据 X X X

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

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

    在这里插入图片描述

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

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

    在这里插入图片描述

    我们发现和我们的预期还是相差甚远,我们期望的是计算截距为 12 12 12,斜率为: a r r a y ( [ 1. , 5. , 15. , 3. , 8. , 4. , 17. , 12. ] ) array([ 1., 5., 15., 3., 8., 4., 17., 12.]) array([1.,5.,15.,3.,8.,4.,17.,12.]),但是为什么出现了这么大的误差呢?我们再来用 W = ( X T X ) − 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)1XTy 计算一下正规方程:

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

    在这里插入图片描述

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

    X.shape
    

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

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

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

    在这里插入图片描述

    接下来对于这个方程我们按照增加 12 12 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
    

    在这里插入图片描述

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

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

    在这里插入图片描述
    使用线性回归:

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

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

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

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

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

    在这里插入图片描述

    芜湖!大功告成!!!

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

    转置公式如下:

    • ( m A ) T = m A T (mA)^T = mA^T (mA)T=mAT,其中m是常数

    • ( A + B ) T = A T + B T (A + B)^T = A^T + B^T (A+B)T=AT+BT

    • ( A B ) T = B T A T (AB)^T = B^TA^T (AB)T=BTAT

    • ( A T ) T = A (A^T)^T = A (AT)T=A

    求导公式如下:

    • ∂ X T ∂ X = I \frac{\partial X^T}{\partial X} = I XXT=I 求解出来是单位矩阵
    • ∂ X T A ∂ X = A \frac{\partial X^TA}{\partial X} = A XXTA=A
    • ∂ A X T ∂ X = A \frac{\partial AX^T}{\partial X} = A XAXT=A
    • ∂ A X ∂ X = A T \frac{\partial AX}{\partial X} = A^T XAX=AT
    • ∂ X A ∂ X = A T \frac{\partial XA}{\partial X} = A^T XXA=AT
    • ∂ X T A X ∂ X = ( A + A T ) X ; \frac{\partial X^TAX}{\partial X} = (A + A^T)X; XXTAX=(A+AT)X; A不是对称矩阵
    • ∂ X T A X ∂ X = 2 A X ; \frac{\partial X^TAX}{\partial X} = 2AX; XXTAX=2AX; A是对称矩阵

    2.4 推导正规方程 θ \theta θ 的解

    1. 矩阵乘法公式展开
    • J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2}(X\theta - y)^T(X\theta - y) J(θ)=21(Xθy)T(Xθy)

    • J ( θ ) = 1 2 ( θ T X T − y T ) ( X θ − y ) J(\theta) = \frac{1}{2}(\theta^TX^T - y^T)(X\theta - y) J(θ)=21(θTXTyT)(Xθy)

    • J ( θ ) = 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) J(\theta) = \frac{1}{2}(\theta^TX^TX\theta - \theta^TX^Ty -y^TX\theta + y^Ty) J(θ)=21(θTXTXθθTXTyyTXθ+yTy)

    1. 进行求导(注意X、y是已知量, θ \theta θ 是未知数):
    • J ′ ( θ ) = 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) ′ J'(\theta) = \frac{1}{2}(\theta^TX^TX\theta - \theta^TX^Ty -y^TX\theta + y^Ty)' J(θ)=21(θTXTXθθTXTyyTXθ+yTy)
    1. 根据上面求导公式进行运算:
    • J ′ ( θ ) = 1 2 ( X T X θ + ( θ T X T X ) T − X T y − ( y T X ) T ) J'(\theta) = \frac{1}{2}(X^TX\theta + (\theta^TX^TX)^T-X^Ty - (y^TX)^T) J(θ)=21(XTXθ+(θTXTX)TXTy(yTX)T)
    • J ′ ( θ ) = 1 2 ( X T X θ + X T X θ − X T y − X T y ) J'(\theta) = \frac{1}{2}(X^TX\theta + X^TX\theta -X^Ty - X^Ty) J(θ)=21(XTXθ+XTXθXTyXTy)
    • J ′ ( θ ) = 1 2 ( 2 X T X θ − 2 X T y ) J'(\theta) = \frac{1}{2}(2X^TX\theta -2X^Ty) J(θ)=21(2XTXθ2XTy)
    • J ′ ( θ ) = X T X θ − X T y J'(\theta) =X^TX\theta -X^Ty J(θ)=XTXθXTy
    • J ′ ( θ ) = X T ( X θ − y ) J'(\theta) =X^T(X\theta -y) J(θ)=XT(Xθy) 矩阵运算分配律
    1. 令导数 J ′ ( θ ) = 0 : J'(\theta) = 0: J(θ)=0
    • 0 = X T X θ − X T y 0 =X^TX\theta -X^Ty 0=XTXθXTy

    • X T X θ = X T y X^TX\theta = X^Ty XTXθ=XTy

    1. 矩阵没有除法,使用逆矩阵进行转化:
    • ( X T X ) − 1 X T X θ = ( X T X ) − 1 X T y (X^TX)^{-1}X^TX\theta = (X^TX)^{-1}X^Ty (XTX)1XTXθ=(XTX)1XTy
    • I θ = ( X T X ) − 1 X T y I\theta = (X^TX)^{-1}X^Ty Iθ=(XTX)1XTy
    • θ = ( X T X ) − 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)1XTy

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

    在这里插入图片描述

    2.5 凸函数判定

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

    在这里插入图片描述
    如果是非凸函数,那就不一定可以获取全局最优解,如下图:
    在这里插入图片描述
    来一个更加立体的效果图:
    在这里插入图片描述

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

    黑塞矩阵 ( h e s s i a n (hessian (hessian m a t r i x ) matrix) matrix)是由目标函数在点 X X X 处的二阶偏导数组成的对称矩阵。

    对于我们的式子来说就是在导函数的基础上再次对 θ \theta θ 来求偏导,结果就是 X T X X^TX XTX。所谓正定就是 X T X X^TX XTX 的特征值全为正数,半正定就是 X T X X^TX XTX 的特征值大于等于 0 0 0, 就是半正定。

    J ′ ( θ ) = X T X θ − X T y J'(\theta) =X^TX\theta -X^Ty J(θ)=XTXθXTy
    J ′ ′ ( θ ) = X T X J''(\theta) =X^TX J(θ)=XTX

    这里我们对 J ( θ ) J(\theta) J(θ) 损失函数求二阶导数的黑塞矩阵是 X T X X^TX XTX ,得到的一定是半正定的,自己和自己做点乘嘛!

    这里不用数学推导证明这一点。在机器学习中往往损失函数都是凸函数,到深度学习中损失函数往往是非凸函数,即找到的解未必是全局最优,只要模型堪用就好!机器学习特点是:不强调模型 100 % 100\% 100% 正确,只要是有价值的,堪用的,就 O k a y ! Okay! Okay

    展开全文
  • 【机器学习】浅谈正规方程法&梯度下降

    多人点赞 热门讨论 2022-06-09 12:48:18
    【机器学习】浅谈正规方程法&梯度下降 数据模型为线性回归模型,方程代价函数。 代价函数就是实际数据与数学模型(这里是一元一次方程)所预测的差值,如: 蓝线的长度就是代价函数,可以看到代价函数越大拟合效果...

    👋👋欢迎来到👋👋
    🎩魔术之家!!🎩

    该文章收录专栏
    ✨— 机器学习 —✨

    专栏内容
    ✨— 【机器学习】浅谈正规方程法&梯度下降 —✨
    ✨— 机器学习】梯度下降之数据标准化 —✨
    ✨— 第十届“泰迪杯“感谢学习总结—✨

    正规方程法(最小二乘)与梯度下降法都是为了求解线性回归的最优参数,但是不同的是正规方程法只需要一步就可以得到代价函数最优点,而梯度下降则是迭代下降,看起来似乎正规方程法要好得多,但实际梯度下降使用场景更多,下面我们介绍这两种算法以及优缺点

    一、梯度下降

    1.1 一个参数

    • 我们从最简单的线性方程解释,后面推广到的多个参数的方程

    典型的房价预测问题
    在这里插入图片描述

    我们假设其数据模型为线性回归模型,方程如下

    h θ ( x ) h_\theta(x) hθ(x) = θ 1 ∗ x \theta_1*x θ1x
    我们希望能求出 θ 1 \theta_1 θ1参数,让方程 h θ ( x ) h_\theta(x) hθ(x) 更加拟合数据,梯度下降的方法就是通过求代价函数最小得到最优参数或者局部最优参数的,

    代价函数
    代价函数就是实际数据与数学模型(这里是一元一次方程)所预测的差值的平方之和的平均值,(其中 y y y 为真实预测值)

    • J θ ( x ) J_\theta(x) Jθ(x) = ∑ x = 1 n ( h θ ( x ) − y ) 2 n \sum_{x=1}^n \frac{(h_\theta(x) - y)^2}{ n } x=1nnhθ(x)y2 (代价函数方程 J θ ( x ) J_\theta(x) Jθ(x)

    如:

    在这里插入图片描述

    蓝线的长度就是代价函数,可以看到代价函数越大拟合效果越差,代价函数越小,拟合效果越好。

    其中关于 所求方程 h θ ( x ) h_\theta(x) hθ(x)(左图)和 θ 1 \theta_1 θ1 的的代价函数 ( θ 1 ) (\theta_1) (θ1)(右图)如下图:

    在这里插入图片描述

    可以看到当方程越拟合数据,代价函数越小,当代价函数 J ( θ 1 ) J(\theta_1) J(θ1)值为0时,回归方程 h θ ( x ) h_\theta(x) hθ(x)完全拟合数据,此时我们要做的就是让代价函数变小。
    (后面所讲的正规方程解法就是直接令代价函数为0,求解 θ \theta θ参数的)

    1.2梯度下降核心方程

    迭代求解方程
    θ 1 \theta_1 θ1 = θ 1 \theta_1 θ1 - α ∗ δ J ( θ 1 ) δ θ 1 \alpha*\frac{δJ(\theta_1)}{δ\theta_1} αδθ1δJ(θ1)

    其中 α \alpha α学习率 δ J ( θ 0 ) δ θ 0 \frac{δJ(\theta_0)}{δ\theta_0} δθ0δJ(θ0) 是对代价函数 J ( θ 1 ) J(\theta_1) J(θ1)求关于 θ 1 \theta_1 θ1 的偏导数,由于只有一个参数(一阶),所以这里的方程 δ J ( θ 1 ) δ θ 1 \frac{δJ(\theta_1)}{δ\theta_1} δθ1δJ(θ1) 也可以表示为 d J ( θ 1 ) d θ 1 \frac{dJ(\theta_1)}{d\theta_1} dθ1dJ(θ1) (即求导数)。
    原理讲解

    • θ 1 \theta_1 θ1 所在的代价函数区间是单调递增的,如下图(红线标记),
      此时 d J ( θ 1 ) d θ 1 \frac{dJ(\theta_1)}{d\theta_1} dθ1dJ(θ1) (即 h θ ( x ) h_\theta(x) hθ(x)的斜率)大于0,则 θ 1 \theta_1 θ1 = θ 1 \theta_1 θ1 - α ∗ δ J ( θ 1 ) δ θ 1 \alpha*\frac{δJ(\theta_1)}{δ\theta_1} αδθ1δJ(θ1) θ 1 \theta_1 θ1 减去一个正数, θ 1 \theta_1 θ1往左边退(向代价函数最小值靠近),
    • θ 1 \theta_1 θ1 所在的代价函数区间是单调递减时的如图(蓝线标记),此时 θ 1 \theta_1 θ1 = θ 1 \theta_1 θ1 - α ∗ δ J ( θ 1 ) δ θ 1 \alpha*\frac{δJ(\theta_1)}{δ\theta_1} αδθ1δJ(θ1) θ 1 \theta_1 θ1 减去一个负数, θ 1 \theta_1 θ1往右边退(向代价函数最小值靠近)

    在这里插入图片描述
    在这里插入图片描述

    1.3学习率 α \alpha α

    有时我们的迭代方程下降时,可能很缓慢,
    需要走很多步(化很久时间)才能到达局部最优或者全局最优 如下图:

    在这里插入图片描述

    此时学习率 α \alpha α的作用就是调整步子长度,让其更快的下降到局部最优或者全局最优
    注意

    α \alpha α需要根据数据调节,

    • 设置大了,走一步太大了跳到对面那一头了,与想要的结果违背,如图

    在这里插入图片描述

    • 设置小了,步子又太小,所以设置 α \alpha α也是一个细活

    1.4两个参数

    两个参数 θ 1 \theta_1 θ1, θ 0 \theta_0 θ0,方程为

    h θ ( x ) h_\theta(x) hθ(x) = θ 0 + \theta_0 + θ0+ θ 1 ∗ x \theta_1*x θ1x

    迭代求解方程 (注意:参数是同步更新的,你的腿只能走一步)

    • θ 0 \theta_0 θ0 = θ 0 \theta_0 θ0 - α ∗ δ J ( θ 0 ) δ θ 0 \alpha*\frac{δJ(\theta_0)}{δ\theta_0} αδθ0δJ(θ0)
    • θ 1 \theta_1 θ1 = θ 1 \theta_1 θ1 - α ∗ δ J ( θ 1 ) δ θ 1 \alpha*\frac{δJ(\theta_1)}{δ\theta_1} αδθ1δJ(θ1)

    此时的代价函数为 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1),如下图(是一个碗状,与一个参数的图像一样都是凹函数)

    在这里插入图片描述

    为了更好理解,我们可以绘制出其的等高线

    在这里插入图片描述

    则目标所求的既是 等高线中心 或 碗底,即让代价函数最小

    1.5多个参数

    在问题案例中,往往有个参数 θ i ( i = 1 , 2 , 3... ) \theta_i(i=1,2,3...) θi(i=1,2,3...)

    此时的代价方程则时关于多个 θ i \theta_i θi参数,如图

    在这里插入图片描述

    迭代求解方程 (注意:参数是同步更新的,你的腿只能走一步)

    θ 0 \theta_0 θ0 = θ 0 \theta_0 θ0 - α ∗ δ J ( θ 0 ) δ θ 0 \alpha*\frac{δJ(\theta_0)}{δ\theta_0} αδθ0δJ(θ0)
    θ 1 \theta_1 θ1 = θ 1 \theta_1 θ1 - α ∗ δ J ( θ 1 ) δ θ 1 \alpha*\frac{δJ(\theta_1)}{δ\theta_1} αδθ1δJ(θ1)
    θ 2 \theta_2 θ2 = θ 2 \theta_2 θ2 - α ∗ δ J ( θ 2 ) δ θ 2 \alpha*\frac{δJ(\theta_2)}{δ\theta_2} αδθ2δJ(θ2)

    θ n \theta_n θn = θ n \theta_n θn - α ∗ δ J ( θ n ) δ θ n \alpha*\frac{δJ(\theta_n)}{δ\theta_n} αδθnδJ(θn)

    从中也可以看到在梯度下降迭代中,有两个最优结果(其他案例可能有许多),

    整个迭代过程可以形象的理解为 你现在在山顶,要找一条最快的路下山,山底就是你的目标地点,也就是代价函数最小

    1.6数据标准化

    梯度下降在量化纲位不同,如果数
    据范围分别是是【0~1000,0 ~5】或者【-0.00004 ~ 0.00002,10 ~ 30】, 那么在使用梯度下降算法时,他们的等高线是一个又窄又高的等高线,如下图:

    在这里插入图片描述

    在梯度下降算法中,参数更新就会如上图左右震荡,收敛缓慢,我们就需要对特征进行特征缩放—数据标准化
    详解见文章
    【机器学习】梯度下降之数据标准化

    二、正规解法

    对正规解法来说,一般例子是对代价函数 J ( θ ) J(θ) J(θ)求偏导数,令其为 0 便可以直接算出 最优参数 θ θ θ,但大多数情况下 θ θ θ是一个多维向量(即有多个参数 θ i ( i = 1 , 2 , 3... ) \theta_i(i=1,2,3...) θi(i=1,2,3...)),此时代价函数 f ( θ ) f(θ) f(θ)是关于 θ θ θ多维向量的函数,那么要求从 θ 0 θ_0 θ0 θ n θ_n θn的值,就分别对对应的 θ i θ_i θi(i = 1,2,3,4…)求偏导数,并令其为0求其最优参数.

    假设有M个数据,每个数据N个特征
    方程如下:

    θ = ( x T ∗ x ) − 1 ∗ x T ∗ y θ = (x^T * x )^{-1} * x^T * y θ=(xTx)1xTy

    这里的 x x x为矩阵,该矩阵每一行为 x i ( i = 1 , 2 , 3... ) x_i(i=1,2,3...) xi(i=1,2,3...) x i x_i xi为列向量,维度为特征N)的向量转置组成,即任意一行的每一列为 x i x_i xi其特征
    x x x矩阵同下图A矩阵:

    在这里插入图片描述

    这里的 a 11 a_{11} a11代表第一个数据 x 1 x_1 x1的第一个特征值,依次往下,化简即为
    在这里插入图片描述

    第一行即为 x 1 x_1 x1N维向量的的转置

    方程原理讲解视频:

    在这里插入图片描述

    【线性回归】正规方程(最小二乘法)】

    由于正规方程是直接求解,所以不需要迭代熟练,不需要“下山",所以不需要对其进行特征缩放(如梯度下降需要数据标准化)

    2,1 使用场景和优缺点

    假设我们有M个数据集,N个特征

    • 梯度下降缺点: 首先需要先提前设定好学习率,并调试,这无疑是额外的工作 需要尝试不同的学习率 ,
      梯度下降缺点:需要多次迭代下降,计算可能会更慢
      x

    • 正规解法缺点:在对于大量的数据来说,梯度学习也可以很好的运行结果,而正规方程求解中 ( x T ∗ x ) − 1 (x^T * x )^{-1} (xTx)1 这一步中,其维度即为x的特征维度,由于计算机在计算矩阵的逆 的时间复杂度时 O ( n 3 ) O(n^3) On3 ,在特征维度非常大时,运行时间很久,

    综上所述:
    可以看到他们二者适用场景 不同于数据的大小, 那我们怎么定义数据"大"还是"小"呢, 吴恩达老师给出了一个比较好的区间:

    N > 10000 => 梯度下降
    N < 10000 => 正规解法
    但是不是绝对的判断,还需要根据情况而定

    2.2 正规方程(不可逆性)* 选读

    1. 方阵中的两个维度之间存在线性变换关系,导致方阵不满秩
    2. n(特征数量)相较于m(样本数量)过大,导致其产生的齐次方程组Ax=0不只有零解

    这些不可逆的矩阵我们称为奇异矩阵,逆矩阵在不存在时,我们所求的逆矩阵为伪逆

    实际上我们案例对应的情况有

    1. 如,房价预测多了一些特征值,而这个特征值和所有特征值有线性相关,即出现上述第一种情况
    2. 在特征n >= 数据集数量m的情况下,例如 10 个数据 ,每个数据有 100 个特征,那么我们所要求的θ就是一个101维向量,10个样本太少了,求得的结果偏离真实值,对应上述情况二,这个时候我们可以减去一些特征,或者使用正则化方法()

    其实这种不可逆的情况非常少见,所以在平时案例不用特别担心
    在这里插入图片描述

    展开全文
  • Python代码包含了Advertising.csv数据包 ###线性回归#### # 读取数据 data = pd.read_csv('Advertising.csv', index_col=0) #前五条数据 data.head() #后五条数据 data.tail() # 画散点图 import seaborn as sns ...
  • 线性模型 – 普通最小二乘法 广义线性模型 目标值 y 是输入变量 x 的线性组合 如果 y^\hat{y}y^​ 是预测值,那么有: y^(w,x)=w0+w1x1+…+wpxp\hat{y}(w, x) = w_0 + w_1 x_1 + … + w_p x_py^​(w,x)=w0​+w1​x1...
  • 正规方程

    万次阅读 多人点赞 2016-12-10 15:36:23
    一,什么是正规方程 在前面我们学习了使用梯度下降法来计算参数最优解,其过程是对代价函数相对于每个参数求偏导数,通过迭代算法一步一步进行同步更新,直到收敛到全局最小值,从而得到最优参数值。而正规方程则是...

    一,什么是正规方程

    在前面我们学习了使用梯度下降法来计算参数最优解,其过程是对代价函数相对于每个参数求偏导数,通过迭代算法一步一步进行同步更新,直到收敛到全局最小值,从而得到最优参数值。而正规方程则是通过数学方法一次性求得最优解。

    其主要思想是利用微积分的知识,我们知道对于一个简单的函数,我们可以对于其参数求导,并将其值置为0,这样就可以直接得到参数的值。就像就像下面这样:
    这里写图片描述

    但是现在的问题是现实的例子都是很多参数的,我们需要做的就是对于这些参数都求偏导数,从而就得到各个参数的最优解,也就是全局最优解,但是困难在于,如果按照上面这么做将会非常费时间,所以有更好的办法。

    二,正规方程的使用

    举如下这个例子:
    这里写图片描述
    这里有四个训练样本,以及四个特征变量x1,x2,x3,x4,观测结果是y,还是像以前一样,我们在列代价函数的时候,需要加上一个末尾参数x0,如下:
    这里写图片描述

    再将特征参数保存在X矩阵中,对观测结果做同样的操作并保存在向量y中,如图:
    这里写图片描述

    这样我们就可以通过下面这个公式得出参数θ最优解。
    这里写图片描述
    关于这个式子的推导过程,可以参照下面这个知乎专栏:
    正规方程的推导

    这仅仅是举了个简单的例子,对于一般情况是这样的:
    这里写图片描述
    对于一个训练样本的所有特征参数可以用x(i)向量来表示(注意x0(i)要添加上),而设计矩阵就可以表示为X,是所有样本向量的转置,y还是观测结果的向量,这样表示之后就可以用上面那个公式直接计算出θ的最优解。

    三,不可逆情况

    我们注意到正规方程有一个这里写图片描述求逆矩阵的过程,当得到的该矩阵不可逆该怎么办呢?

    遇到这种情况时,一般有两种原因:

    这里写图片描述

    • 多余特征(线性相关)
    • 太多特征(例如:m<=n)
      - 删除一些特征,或者正则化

    其实,本质原因还是线代知识:
    首先,这是两个必要条件,
    根据性质:r(A.TA) = r(A),A.TA可逆性可转化为A的可逆性。

    第一种,实际上是有线性相关的列向量组,矩阵的秩<矩阵的维度,不可逆;

    第二种,也是线性代数的知识

    • m < n时,也就是维度小于向量个数,在这里也就是样本数小于特征数,线性相关
    • m=n时,当|A|=0时不可逆,|A|!=0时可逆

    四,正规方程与梯度下降法的比较

    这里写图片描述

    梯度下降法:
    缺点:

    • 需要选择学习速率α,而之前的学习也知道α的选择其实十分的困难,非常消耗我们的时间来调试并且选择它。
    • 需要多次迭代,这也是非常消耗时间的。

    优点:

    • 当特征参数相当大的时候,梯度下降法也能够很好的工作。

    正规方程:
    优点:

    • 不需要选择学习速率α
    • 不需要多次迭代

    缺点:

    • 需要计算这里写图片描述,而这个计算对于计算机的计算量大致是矩阵维度的三次方,复杂度相当高。
    • 由上面一点就可以看出,当特征参数相当大的时候,正规方程的计算会非常缓慢。

    所以,我们该什么时候选择什么方式进行计算呢?

    总结:

    取决于特征向量的多少,可以将万作为一个界限,当数量小于10000时,直接选择正规方程,当大于10000时,就可以考虑是否换用梯度下降法或者后面的一些其他算法了。


    这是我在学习ng的机器学习课程的基础上,经过自己的一些思考,写下学习笔记,重点是对于一些细节的思考和逻辑的理清。

    以上很多都是个人的理解,如果有不对的地方,还请大家指教。

    展开全文
  • 机器学习第2天,正规方程的应用的学习!
  • 正规方程 公式

    千次阅读 2019-06-15 22:20:34
    对于某些线性回归问题,正规方程能给我们更好的方法来求得参数θ的最优值。 1.前面讲解中一直在使用的线性回归算法是梯度下降法(迭代算法),目的是为了最小化代价函数J(θ)。使用这种梯度下降法(迭代算法)需要...
  • 梯度下降法是机器学习算法更新模型参数的常用的方法之一。 相关概念 梯度 : 表示某一函数在一点处变化率最快的方向向量(可理解为这点的导数/偏导数) 样本 : 实际观测到的数据集,包括输入和输出(本文的样本数量用 m ...
  • 正规方程组通过计算成本函数对每个θj的偏导数,求出偏导为零的点来成本函数的最小值。为了不必写大量的代数式和矩阵导数,让我们约定一些矩阵计算的符号
  • 正规方程法是通过求解某个方程来找出使得代价函数最小的参数的方法,本文对比了梯度下降和正规方程两种方法。
  • 如何理解正规方程

    千次阅读 2019-02-09 18:34:32
    在理解线性回归时,我们提到了使用梯度下降来求解最小二乘问题,但在线性回归中,还有一种不需要迭代的方法来求解最小二乘问题,这就是正规方程。这是基于矩阵求导来及计算的 还是上次的数据 x = [[1, 1, 1, 1, 1]...
  • 正规方程是线性回归问题中区别于梯度下降的一种求解代价函数J(θ)最小值的方法。 首先将代价函数转换为矩阵形式: 欲求J(θ)最小值,只需令: ▽θJ(θ)=0 ▽_\theta J(\theta) = 0 ▽θ​J(θ)=0 推导过程: 第三...
  • W表示所有的系数(包含0w0),是一维向量,根据向量乘法规律,可以这么写:   ̂=y^=WTX 1 2、正规方程 1.1 2.1、最小二乘法矩阵表示   最小二乘法可以将误差方程转化为有确定解的代数方程组(其方程式数目...
  • 对于某些线性回归问题,正规方程会给我们一个更好的方法,来求得参数θ\thetaθ的最优值 到目前为止,我们都在使用梯度下降算法,我们使用这种迭代算法,经过很多步,也就是梯度下降的多次迭代,来收敛到全局最小。 ...
  • 本文介绍了多元线性回归以及两个相关的算法,分别是多元梯度下降法以及正规方程法,除此之外还讨论了特征以及多项式回归的问题。 多元线性回归是一种新的线性回归版本,适用于多个变量或者多特征量的情况。 多元梯度...
  • 正规方程 正规方程的介绍 梯度下降算法通过不断迭代调整θ值,使得损失函数J(θ)最终收敛,最终得到最佳匹配数据的函数。而正规方程法则是直接求出θ值。 1.直接法: 比较直接的是通过求偏导得到θ值。如下图: ...
  • 正规方程法 问题:矩阵XTXX^TXXTX不可逆(奇异矩阵)的2种常见原因: 1、特征之间存在线性关系。如:x2=x1∗3.14x_2 = x_1 * 3.14x2​=x1​∗3.14,解决办法:删除一个 2、样本数量m小于等于特征数量n。解决办法:...
  • 线性回归的正规方程

    千次阅读 2018-10-27 11:33:16
    线性回归的正规方程 本文阐述线性回归的正规方程推导过程,为满足广义性,采用多变量的线性回归代价函数进行推导。 多变量线性回归的梯度下降算法是用来求其代价函数最小值的算法,但是对于某些线性回归问题,可以...
  • 使用正规方程来求解线性回归问题 1、接续前面两小节(1-线性回归之单变量线性回归基本原理的python实现_骑着蜗牛环游深度学习世界的博客-CSDN博客和2-线性回归之多变量线性回归基本原理的python实现_骑着蜗牛环游...
  • 线性代数基础: 假设向量 A=[abcd]A = \begin{bmatrix} a & b & c & d \end{bmatrix}A=[a​b​c​d​],则 AT=[abcd]A^T = \begin{bmatrix} a\\ b\\ c\\ d \end{b...(X^TX)^{-1}X^Ty θ=(XTX)−1XTy 由此推导出正规方程
  • W = ( X’ X)-1 X’ y 这便是正规方程 import numpy as np import pandas as pd import os def regularization(X,y): temp1 = np.dot( X.transpose() , X ) temp2 = np.linalg.pinv(temp1) temp3 = np.dot...
  • 在机器学习中,相对于梯度下降算法,正规方程更适合解决线性回归问题。 通常机器学习教程是这么介绍正规方程的: 从求导直接得到向量解,那么正规方程的推导过程是怎样的呢? 下面为大家介绍详细的推导步骤: ...
  • 线性回归的正规方程

    千次阅读 2019-07-28 19:44:05
    正规方程 正规方程是通过求解下面的方程来找出使得代价函数最小的参数的: ∂∂θjJ(θi)=0\frac{\partial}{\partial \theta_j} J(\theta_i) = 0∂θj​∂​J(θi​)=0 假设我们的训练集特征矩阵为 XXX(包含了
  • y.inverse_transform(lr.predict(x_test)) # # print("正规方程测试集里面每个房子的预测价格:", y_lr_predict) # # print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_...
  • 可以对函数进行特征缩放: 正规方程(如果使用正规方程法就不需要进行特征缩放): 如图所示,图中m为样本数量,n+1为特征数量,x0是额外添加的,所以为n+1。 如下解释如何计算参数: 计算过程如下图。例子就是上图...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,248
精华内容 4,099
关键字:

正规方程