精华内容
下载资源
问答
  • 多元线性最小二乘法求解
    千次阅读
    2019-10-09 10:12:57

    最小二乘法

    如何求解多元线性回归残差平方和RSS最小化的参数向量?这种通过最小化真实值和预测值之间的RSS来求解参数的方法叫做最小二乘法。
    求解极值的第一步往往是求解一阶导数并让一阶导数等于0,最小二乘法也不能免俗。因此,首先在残差平方和RSS上对参数向量求导。这里的过程涉及少数矩阵求导的内容,需要查表来确定,感兴趣可以去维基百科去查看矩阵求导的详细公式的表格:
    https://en.wikipedia.org/wiki/Matrix_calculus
    接下来,对 ω \boldsymbol{\omega} ω求导:
    ∂ R S S ∂ ω = ∂ ∣ ∣ y − X ω ∣ ∣ 2   2 ∂ ω = ∂ ( y − X ω ) T ( y − X ω ) ∂ ω \large\boldsymbol{\frac{\partial{RSS}}{\partial{\omega}}=\frac{\partial{||y-X\omega||_2\,^2}}{\partial{\omega}}=\frac{\partial{(y-X\omega)^T(y-X\omega)}}{\partial{\omega}}} ωRSS=ωyXω22=ω(yXω)T(yXω)
    ∵ ( A − B ) T = A T − B T 并 且 ( A B ) T = B T ∗ A T ∴ = ∂ ( y T − ω T X T ) ( y − X ω ) ∂ ω = ∂ ( y T y − ω T X T y − y T X ω + ω T X T X ω ) ∂ ω \because(A-B)^T=A^T-B^T并且(AB)^T=B^T*A^T\\\therefore=\large\boldsymbol{\frac{\partial{(y^T-\omega^TX^T)(y-X\omega)}}{\partial{\omega}}=\frac{\partial{(y^Ty-\omega^TX^Ty-y^TX\omega+\omega^TX^TX\omega)}}{\partial{\omega}}} (AB)T=ATBT(AB)T=BTAT=ω(yTωTXT)(yXω)=ω(yTyωTXTyyTXω+ωTXTXω)
    ∵ \because 矩阵求导中,α为常数,有如下规则:
    ∂ α ∂ A = 0 , ∂ A T B T C ∂ A = B T C , ∂ C T B A ∂ A = B T C , ∂ A T B A ∂ A = ( B + B T ) A \large\boldsymbol{\frac{\partial\alpha}{\partial{A}}=0,\frac{\partial{A^TB^TC}}{\partial{A}}=B^TC,\frac{\partial{C^TBA}}{\partial{A}}=B^TC,\frac{\partial{A^TBA}}{\partial{A}}=(B+B^T)A} Aα=0,AATBTC=BTC,ACTBA=BTC,AATBA=(B+BT)A
    = 0 − X T y − X T y + 2 X T X ω = X T X ω − X T y \large\boldsymbol{=0-X^Ty-X^Ty+2X^TX\omega}\\\large\boldsymbol{=X^TX\omega-X^Ty} =0XTyXTy+2XTXω=XTXωXTy
    我们让求导后的一阶导数为0:
    X T X ω − X T y = 0 \large\boldsymbol{X^TX\omega-X^Ty}=0 XTXωXTy=0
    X T X ω = X T y \large\boldsymbol{X^TX\omega=X^Ty} XTXω=XTy
    左乘一个 ( X T X ) − 1 \large\boldsymbol{(X^TX)^{-1}} (XTX)1则有:
    ω = ( X T X ) − 1 X T y \large\boldsymbol{\omega=(X^TX)^{-1}X^Ty} ω=(XTX)1XTy
    到了这里,希望能够将 ω \boldsymbol{\omega} ω留在等式的左边,其他与特征矩阵有关的部分都放到等式的右边,如此就可以求出 ω \boldsymbol{\omega} ω的最优解了。这个功能非常容易实现,只需要我们左乘 X T X \boldsymbol{X^TX} XTX的逆矩阵就可以。在这里,逆矩阵存在的充分必要条件是特征矩阵不存在多重共线性
    假设矩阵的逆是存在的,此时 ω \boldsymbol{\omega} ω就是我们参数的最优解。求出这个参数向量,就解出了 X ω \boldsymbol{X\omega} Xω,也就能够计算出预测值 y ^ \boldsymbol{\hat{y}} y^了。对于多元线性回归的理解,到这里就足够了,如果还希望继续深入,可以给一个方向:矩阵 X T X \boldsymbol{X^TX} XTX其实是使用奇异值分解来进行求解的,可以仔细去研究一下。以算法工程师和数据挖掘工程师为目标的人,能够手动推导上面的求解过程是基本要求。
    除了多元线性回归的推导之外,这里还需要提到一些在上面的推导过程中不曾被体现出来的问题。在统计学中,使用最小二乘法来求解线性回归的方法是一种“无偏估计”的方法,这种无偏估计要求因变量,也就是标签的分布必须服从正态分布。这是说,y必须经由正太化处理(比如说取对数,或者使用QuantileTransformer或者PowerTransformer这些功能)。在机器学习中,会先考虑模型的效果,如果模型效果不好,那可能考虑改变因变量的分布。

    更多相关内容
  • 1. 最小二乘法损失函数求解推导; 2. sklearn中linear_model.LinearRegression参数介绍+案例 最小二乘法损失函数求解推导 最小二乘法的思路:对损失函数求导,令其为0,求得损失函数最小值时的参数,但前提条件:...

    前言:本文主要内容:
    1. 最小二乘法损失函数求解推导;
    2. sklearn中linear_model.LinearRegression参数介绍+案例

    最小二乘法损失函数求解推导

    最小二乘法的思路:对损失函数求导,令其为0,求得损失函数最小值时的参数,但前提条件:导数为凸函数。


    多元线性回归参数求解是一个矩阵求导的过程,所以需要知道一些矩阵运算、求导运算的公式:

    (A-B)^T=A^T-B^T;(AB)^T=B^T*A^T

    \frac{\partial{a}}{\partial{A}}=0;\frac{\partial{A^TB^TC}}{\partial{A}}=B^TC;\frac{\partial{C^TBA}}{\partial{A}}=B^TC;\frac{\partial{A^TBA}}{\partial{A}}=(B+B^T)A


     然后对多元线性回归的损失函数进行求导,公式如下:(其中w、y、X都是矩阵) 

    \begin{aligned} \frac{\partial{RSS}}{\partial{w}}&=\frac{\partial{||y-Xw||_2^2}}{\partial{w}}\\ &=\frac{\partial{(y-Xw)^T(y-Xw)}}{\partial{w}}\\ &=\frac{\partial{(y^T-w^TX^T)(y-Xw)}}{\partial{w}}\\ &=\frac{\partial{(y^Ty-w^TX^Ty-y^TXw+w^TX^TXw)}}{\partial{w}}\\ &=0-X^Ty-X^Ty+2X^TXw\\ &=X^TXw-X^Ty \end{aligned}

    令其为0: 

    \bg_white \begin{aligned} X^TXw-X^Ty&=0\\ X^TXw&=X^Ty\\ w&=(X^TX)^{-1}X^Ty \end{aligned}

    其中倒数最后一步需要左乘(X^TX)^-1。


     补充点:

    1. 逆矩阵存在的充分必要条件:特征矩阵不能存在多重共线性。

    2. 因为X^TX随着特征、数据量的增加,计算量很大,不能直接使用numpy计算,需要使用奇异值分解来计算。

    奇异值分解在PCA中也涉及使用。

    在PCA中,为了找到新的特征空间,需要使用奇异值分解来计算。 在sklearn.decomposition.PCA中,使用参数svd_solver来控制奇异值计算方法,可以使用full(精准)/arpack(截断)/randomized(随机)/auto。

    3. 最小二乘法求解线性回归属于“无偏估计”,即要求标签必须是正态分布,所以需要对y进行正态处理,可以使用quantileTransformer或者PowerTransformer。不过因为机器学习为“后验方式”,如果不对y进行处理的效果好,那么也不必正态处理。


    sklearn中linear_model.LinearRegression参数介绍+案例:加利福尼亚房价数据集

    • fit_intercept:是否有截距项,默认True;
    • normalize:对X进行标准化,默认True;
    • copy_X:是否复制一份,以保证不在原始数据上操作,默认True;
    • n_jobs:设定运算性能,填整数,默认None;
    • model.coef_ :查看系数,即w
    • model.intercept_ :查看截距项
    from sklearn.datasets import fetch_california_housing as fch
    
    housevalue=fch()
    
    X=pd.DataFrame(housevalue.data,columns=housevalue.feature_names)
    X.head()
    y=housevalue.target
    
    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=9)
    
    from sklearn.linear_model import LinearRegression
    model=LinearRegression().fit(X_train,y_train)
    y_hat=model.predict(X_test)
    y_hat
    
    model.coef_ # 返回模型的参数
    [*zip(X_train.columns,model.coef_)]
    
    model.intercept_ # 返回模型的截距项

    展开全文
  • 最小二乘法线性回归方程.cpp
  • 基于jupyter notebook的python编程—–利用梯度下降算法求解多元线性回归方程,并与最小二乘法求解进行精度对比目录一、梯度下降算法的基本原理1、梯度下降算法的基本原理二、题目、表格数据、以及python环境搭建1、...
  • 线性回归的原理 多元回归的一般式 y^(θ,x)=θ0+θ1x1+…+θpxp\hat{y}(\theta, x)=\theta_{0}+\theta_{1} x_{1}+\ldots+\theta_{p} x_{p}y^​(θ,x)=θ0​+θ1​x1​+…+θp​xp​ 其中: y^\hat{y}y^​:预测值 ...

    线性回归的原理

    • 多元回归的一般式

    y ^ ( θ , x ) = θ 0 + θ 1 x 1 + … + θ p x p \hat{y}(\theta, x)=\theta_{0}+\theta_{1} x_{1}+\ldots+\theta_{p} x_{p} y^(θ,x)=θ0+θ1x1++θpxp

    其中:
    y ^ \hat{y} y^:预测值

    θ 0 , θ 1 , … θ p \theta_{0}, \theta_{1}, \ldots \theta_{p} θ0,θ1,θp:参数

    x 0 , x 1 , … x p x_{0}, x_{1}, \ldots x_{p} x0,x1,xp:自变量

    • 方程的拟合思路
    线性回归方程如何得到
    所有预测值与真实值平方和最小所取得的系数
    怎么计算所有误差平方和最小时取得的参数
    最小二乘法or梯度下降法

    最小二乘法

    • 通过求导求极值解法

    下面通过一元线性回归模型做推导:

    样本回归模型:

    y ^ i = β ^ 0 + β ^ 1 x i \hat{y}_{i}=\hat{\beta}_{0}+\hat{\beta}_{1} x_{i} y^i=β^0+β^1xi

    残差平方和(损失函数):

    Q = ∑ i = 1 n e i 2 = ∑ i = 1 n ( y i − y ^ i ) 2 = ∑ i = 1 n ( y i − β ^ 0 − β ^ 1 x i ) 2 Q=\sum_{i=1}^{n} e_{i}^{2}=\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}=\sum_{i=1}^{n}\left(y_{i}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{i}\right)^{2} Q=i=1nei2=i=1n(yiy^i)2=i=1n(yiβ^0β^1xi)2

    通过使得Q最小时的参数确定直线,即把它们看作是Q的函数,就变成了一个求极值的问题,可以通过求导数得到。求Q对两个待估参数的偏导数

    { ∂ Q ∂ β ^ 0 = 2 ∑ i = 1 n ( y i − β ^ 0 − β ^ 1 x i ) ( − 1 ) = 0 ∂ Q ∂ β ^ 1 = 2 ∑ i = 1 n ( y i − β ^ 0 − β ^ 1 x i ) ( − x i ) = 0 \left\{\begin{aligned} \frac{\partial Q}{\partial \hat{\beta}_{0}} &=2 \sum_{i=1}^{n}\left(y_{i}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{i}\right)(-1)=0 \\ \frac{\partial Q}{\partial \hat{\beta}_{1}} &=2 \sum_{i=1}^{n}\left(y_{i}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{i}\right)\left(-x_{i}\right)=0 \end{aligned}\right. β^0Qβ^1Q=2i=1n(yiβ^0β^1xi)(1)=0=2i=1n(yiβ^0β^1xi)(xi)=0

    解得:

    β ^ 1 = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 \hat{\beta}_{1}=\frac{n \sum x_{i} y_{i}-\sum x_{i} \sum y_{i}}{n \sum x_{i}^{2}-\left(\sum x_{i}\right)^{2}} β^1=nxi2(xi)2nxiyixiyi

    β ^ 0 = ∑ x i 2 ∑ y i − ∑ x i ∑ x i y i n ∑ x i 2 − ( ∑ x i ) 2 \hat{\beta}_{0}=\frac{\sum x_{i}^{2} \sum y_{i}-\sum x_{i} \sum x_{i} y_{i}}{n \sum x_{i}^{2}-\left(\sum x_{i}\right)^{2}} β^0=nxi2(xi)2xi2yixixiyi

    其中:

    β ^ 0 = y ˉ − β ^ 1 x ˉ \hat{\beta}_{0}=\bar{y}-\hat{\beta}_1 \bar{x} β^0=yˉβ^1xˉ

    β ^ 1 = ∑ i = 1 n x i y i − n x y ‾ ∑ i = 1 n x i 2 − n x ˉ 2 \hat{\beta}_{1}=\frac{\sum_{i=1}^{n} x_{i} y_{i}-n \overline{x y}}{\sum_{i=1}^{n} x_{i}^2-n \bar{x}^{2}} β^1=i=1nxi2nxˉ2i=1nxiyinxy

    • 通过矩阵求解

    定义:
    h θ ( x 1 , x 2 , … x n − 1 ) = θ 0 + θ 1 x 1 + … + θ n x n − 1 h_{\theta}\left(x_{1}, x_{2}, \ldots x_{n-1}\right)=\theta_{0}+\theta_{1} x_{1}+\ldots+\theta_{n} x_{n-1} hθ(x1,x2,xn1)=θ0+θ1x1++θnxn1
    现在有m个样本,每个样本有n−1维特征将所有样本点代入模型中得:

    h 1 = θ 0 + θ 1 x 1 , 1 + θ 2 x 1 , 2 + … + θ n − 1 x 1 , n − 1 h 2 = θ 0 + θ 1 x 2 , 1 + θ 2 x 2 , 2 + … + θ n − 1 x 2 , n − 1 ⋮ h m = θ 0 + θ 1 x m , 1 + θ 2 x m , 2 + … + θ n − 1 x m , n − 1 \begin{array}{l} h_{1}=\theta_{0}+\theta_{1} x_{1,1}+\theta_{2} x_{1,2}+\ldots+\theta_{n-1} x_{1, n-1} \\ h_{2}=\theta_{0}+\theta_{1} x_{2,1}+\theta_{2} x_{2,2}+\ldots+\theta_{n-1} x_{2, n-1} \\ \vdots \\ h_{m}=\theta_{0}+\theta_{1} x_{m, 1}+\theta_{2} x_{m, 2}+\ldots+\theta_{n-1} x_{m, n-1} \end{array} h1=θ0+θ1x1,1+θ2x1,2++θn1x1,n1h2=θ0+θ1x2,1+θ2x2,2++θn1x2,n1hm=θ0+θ1xm,1+θ2xm,2++θn1xm,n1

    为方便用矩阵表示令 x 0 = 1 x_0 = 1 x0=1于是上述方程可以用矩阵表示为:

    h = X θ \mathbf{h}=\mathbf{X} \theta h=Xθ
    其中,h为m x 1的向量, 代表模型的理论值,θ 为n x 1的向量,X为 m x n维的矩阵,m代表样本的个数,n代表样本的特征数,于是目标损失函数用矩阵表示为:

    J ( θ ) = ∥ h − Y ∥ 2 = ∥ X θ − Y ∥ 2 = ( X θ − Y ) T ( X θ − Y ) J(\theta)=\|\mathbf{h}-\mathbf{Y}\|^{2}=\|\mathbf{X} \theta-\mathbf{Y}\|^{2}=(\mathbf{X} \theta-\mathbf{Y})^{T}(\mathbf{X} \theta-\mathbf{Y}) J(θ)=hY2=XθY2=(XθY)T(XθY)

    关于矩阵的求导补充以下知识点:

    ∂ x T a ∂ x = ∂ a T x ∂ x = a ∂ x T A x ∂ x = A x + A T x \begin{aligned} \frac{\partial x^{T} a}{\partial x} &=\frac{\partial a^{T} x}{\partial x}=a \\ \frac{\partial x^{T} A x}{\partial x} &=A x+A^{T} x \end{aligned} xxTaxxTAx=xaTx=a=Ax+ATx
    又由于如果矩阵A是对称的:

    A x + A T x = 2 A x A x+A^{T} x=2 A x Ax+ATx=2Ax
    对目标函数化简:

    J ( θ ) = θ T X T X θ − θ T X T Y − Y T X θ + Y T Y J(\theta)=\theta^{T} X^{T} X \theta-\theta^{T} X^{T} Y-Y^{T} X \theta+Y^{T} Y J(θ)=θTXTXθθTXTYYTXθ+YTY
    则θ最小值:

    θ ^ = argmin ⁡ θ L ( θ ) ⟶ ∂ ∂ θ L ( θ ) = 0 ⟶ 2 X T X θ ^ − 2 X T Y = 0 ⟶ θ ^ = ( X T X ) − 1 X T Y = X + Y \begin{aligned} \hat{\theta}=\underset{\theta}{\operatorname{argmin}} L(\theta) & \longrightarrow \frac{\partial}{\partial \theta} L(\theta)=0 \\ & \longrightarrow 2 X^{T} X \hat{\theta}-2 X^{T} Y=0 \\ & \longrightarrow \hat{\theta}=\left(X^{T} X\right)^{-1} X^{T} Y=X^{+} Y \end{aligned} θ^=θargminL(θ)θL(θ)=02XTXθ^2XTY=0θ^=(XTX)1XTY=X+Y
    这个式子中 ( X T X ) − 1 X T \left(X^{T} X\right)^{-1} X^{T} (XTX)1XT又被称为伪逆写作 X + X^{+} X+,对于行满秩或者列满秩的X ,可以直接求解。

    • 几何意义法求解

    求解 b 在A的列向量空间中的投影。

    在几何上,最小二乘法相当于模型(这里就是直线)和试验值的距离的平方求和,假设我们的试验样本张成一个 维空间(满秩的情况)模型写成 f ( w ) = X β f(w)=X \beta f(w)=Xβ而最小二乘法就是说希望 Y 和这个模型距离越小越好,于是它们的差应该与这个张成的空间垂直:

    X T ⋅ ( Y − X β ) = 0 ⟶ β = ( X T X ) − 1 X T Y X^{T} \cdot(Y-X \beta)=0 \longrightarrow \beta=\left(X^{T} X\right)^{-1} X^{T} Y XT(YXβ)=0β=(XTX)1XTY

    python实现最小二乘法(通过矩阵求解)

    class LinearRegression:
        '''使用Python实现的线性回归.(最小二乘法)'''
        def fit(self,X,y):
            '''根据提提供的训练数据X,对模型进行训练。
            
            Parameters
            ------
            X :类数组类型。形状:[样本数量,特征数量]
            特征矩阵,用来对模型进行训练
            
            y = 类数组类型,形状:[样本数量]
            
            '''
            # 如果X是数组对象的一部分,而不是完整的对象数据(eg:切片)则无法完成矩阵的转换
            X = np.asmatrix(X.copy())  #这里创建X的拷贝对象,避免转换成矩阵时候失败
            # y 为一维结构(行向量或列向量)没有限制,可以不用拷贝
            # 注意:现在要进行矩阵的运算,需要是二维结构,通过reshape方法进行转换
            y = np.asmatrix(y).reshape(-1,1)    #    (-1,1)意思:把数组转换为一列,依据数据自定义行的矩阵
            # 通过最小二乘公式,求解出最佳的权重值
            self.w_ = (X.T * X ).I * X.T * y
        def predict(self,X):
            '''根据参数传递的样本X,delattr样本数据进行预测。
        
             Parameters
             ------
             X:类数组类型。形状[样本数量,特征数量]
             待预测的样本特征(属性)
           
             Returns
             ------
             result:数组类型
                    预测的结果
            '''
            # 将X转换为矩阵 注意:需要对X进行拷贝
            X = np.asmatrix(X.copy())
            result = X * self.w_
            # 将矩阵转换为ndarray数组 ,进行扁平化处理 ,然后返回结果
            return np.array(result).ravel()
    
    展开全文
  • 3.2 最小二乘法求解1:“法向量”方程组法 (不推荐) 3.3 最小二乘法求解2:梯度下降法 最小二乘(二范数)的优点: 一阶和二阶导数的存在,使得该残差函数,很容易通过“梯度下降法”获得其...

    作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

    本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119977443


    目录

    第1章 什么是函数逼近?

    1.1 抛出问题1:函数插值

    1.2  抛出问题2:函数拟合

    1.3  什么是回归

    第2章 函数拟合

    2.1 插值有时候插值并不是最好的选择

    2.2 什么函数拟合

     2.2 函数拟合的基本步骤

    第3章 最小二乘法的线性方程组解法

    3.1 什么是最小二乘法

     3.2 线性拟合函数的最小二乘法的几何意义

    3.3 最小二乘算法实现

    3.4 最小二乘法求解1:“法向量”方程组法

    3.5 最小二乘法求解1:二元线性方程组示例

     第4章 最小二乘法求解2:多元线性方程组解法

    4.0 前置条件:

    4.1 步骤1:构建样本数据集

    4.2 步骤2:构建拟合函数

    4.3 步骤3:构建最小二乘的残差函数,并计算最佳参数(最关键步骤)

    4.4 步骤4:利用拟合函数进行数据预测

    4.5 步骤5:图形展示



    第1章 什么是函数逼近?

    1.1 抛出问题1:函数插值

    利用有限的样本数据,发现其内在的规律,并用这个规律预测未来新的数据。

    (1)单个数据点

    • 0次函数通过样本点:唯一确定一个点 y = f(x) = a0
    • 1次直线函数通过样本点:可以有无数 y = f(x) = a1x + a0
    • 2次抛物线函数通过样本点:可以有无数 y = f(x) = a1x^2 + a1x + a0

    (2)2个数据点

    • 0次函数通过样本点:无
    • 1次直线函数通过样本点:唯一直线 y = f(x) = a1x + a0
    • 2次抛物线函数通过样本点:可以有无数 y = f(x) = a1x^2 + a1x + a0

    (3)3个数据点

    • 0次函数通过样本点:无
    • 1次直线函数通过样本点:无
    • 2次抛物线函数通过样本点:唯一抛物线y = f(x) = a1x^2 + a1x + a0

    问题:

    如果有(xn+1,yn+1), (xn,yn)........(x1,y1), (x0,y0)样本点,那么如何选择一个最低次的多项式函数,可以穿过上述样本点?

    推测:

    对应n+1个点,可以唯一的确定一个一元n次的多项式函数,该多项式函数可以穿越所有n+1个点。

    1.2  抛出问题2:函数拟合

    如果有n个点,不要求选出的函数穿越所有的点,而是根据这些点构建的轮廓,选择一个更低维度(次数)的函数尽可能的靠近这些样本点呢?

     当函数的次数远远小于样本点的次数是,该如何选择低次的函数?

    1.3  什么是回归

    回归与拟合是基本相同的概念。线性拟合通常称为线性回归。

    第2章 函数拟合

    2.1 插值有时候插值并不是最好的选择

    (1)简单直线拟合好于多项式拟合

    在上图图有,有几十个样本点,如果用多项式插值来进行函数逼近,虽然插值函数在样本点的误差为0,但很显然,需要高次多项式来进行逼近。

    如果样本点有几百个,那么多项式的次数高达几百次。

    从图中可以大致看出,要逼近上述样本点,只需要一个简单的线性函数即可:y=ax+b,这种函数逼近称为拟合。

    (2)抛物线逼近

    同理,对上述样本点的逼近,也不需要几十次的多项式进行插值,值需要一个简单的抛物线就可以进行逼近:y =ax^2 + bx + c,,这种函数逼近称为拟合。

    (3)三角函数拟合

    2.2 什么函数拟合

     

     2.2 函数拟合的基本步骤

    步骤1:构建样本

    (1)读取已有样本数据,并图形展示样本数据。或者

    (2)构建自行测试样本数据

    (3)图形化展示样布数据(散点图)

    步骤2:选择函数模型

    根据散点图,选择函数类,函数类可以从初等函数中进行选取,如线性函数、二次或多次多项式函数、三角函数等。

    步骤3: 构建最小二乘的残差函数,并计算最佳参数(最关键步骤)

    (1)选择最佳拟合的范数(这里选择最小二乘法)

    选取了函数类型后,每个函数都有自己的待定参数,不同的参数,其拟合效果是不同的,如何选择函数的参数,使得拟合效果最好呢?常有的有最小二乘法。

    最小二乘法是函数拟合最重要的环节之一。

    (2)计算最佳参数(这是最关键、最核心的步骤)

    最小二乘法得到的loss残差函数是一个多元二次多项式函数:

    • 残差函数的“元”的个数,就是拟合函数的参数
    • 残差函数的“元”的次数:2次
    • 拟合最好的依据:多元函数的最小值点处的各个变量值,就是拟合函数最好的参数。

    求解多元二次多项式函数的方法有多种:

    • 法向量解线性方程组法
    • 梯度下降法

    无论哪种方法,都是通过求残差函数的最小值,基于指定样本数据,获得了最佳参数的拟合函数。

    步骤4:利用拟合函数进行数据预测

    生成一组输入数据,利用第4步获得的拟合函数的参数以及对应的拟合函数,对数据进行函数运算(预测),得到新的输出数据。

    步骤5:图形展示

    把预测数据与采样数据、理论曲线一起进行图形展示。

    第3章 最小二乘法的线性方程组解法

    3.1 什么是最小二乘法

     

     3.2 线性拟合函数的最小二乘法的几何意义

    注意: 

    最小二乘选择一个适当的直线参数,使得所有样本点处的yi - f(xi) = yi -(axi+b)的平方和的平均值最小,而不是所有样本点到拟合直线的距离的和的平均值最小。

    这样选择,主要处于如下原因:

    (1)计算简单:求点到拟合曲线的距离要比直接计算样本点处的Y值的差复杂很多。

    (2)符合拟合函数原本的物理意义:拟合函数要在所有的样本点xi处,其f(xi)也尽可能的相等,或者说误差尽可能的小。

    3.3 最小二乘算法实现

    (1)最小二乘法求解1:一元参数的解析法求解

    (2)最小二乘法求解2:“法向量”线性方程组求解法

    (3)最小二乘法求解3:梯度下降法

    最小二乘(二范数)的优点:

     一阶和二阶导数的存在,使得该残差函数,很容易通过“梯度下降法”获得其最小值和对应的各个参数的值。

    3.4 最小二乘法求解1:“法向量”方程组法

     

     

     

     

     

    3.5 最小二乘法求解1:二元线性方程组示例

     

     第4章 最小二乘法求解2:多元线性方程组解法

    4.0 前置条件:

    #导入库
    from math import *
    import time
    import numpy as np
    import matplotlib.pyplot as plt #画图工具
    from pylab import mpl           #中文字体
    from scipy import optimize      #最小二乘算法的算法库

    4.1 步骤1:构建样本数据集

    #步骤1:构建样本
    
    #(1) 采用np, 直接手工生成样本的输入:一组等距离的分布在[-1,1]之间的100个点
    sample_numbers = 50
    
    x_data = np.linspace(0, 1, sample_numbers)
    
    #(2) 为这些数据手工打上理论输出值(标签值):y = 2x + 1
    y_data_pure =  2 * x_data + 1.0
    
    #(3)为了模拟现实情况,通过随机数来模拟数据噪声
    noise_range = 0.4
    np.random.seed(10) #设置随机种子, 确保不同时候,执行结果是相同的
    #randn(n)生成的0为均值,1为标准差的正态分布的n个随机数。
    y_noise = np.random.randn(*x_data.shape) * noise_range  # *x_data.shape:输入样本的维度或个数
    
    #(4)人工生成样本的输出:理论值 + 噪声
    y_data_noise = y_data_pure + y_noise
    
    #(5) 显示样本数据
    # 样本的散点图
    plt.scatter(x_data, y_data_noise, label="sample", color="black")
    
    # 内在的、理论的曲线图
    plt.plot(x_data, y_data_pure, label="f_pure(x)", color="blue", linewidth = 4)
    
    #设置属性
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    plt.title("线性拟合")
    plt.legend(loc="upper left")
    plt.show()

    4.2 步骤2:构建拟合函数

    #步骤2:构建拟合函数:二元一次拟合函数
    def f_line_wb(x, w, b):
        return (w*x + b)

    4.3 步骤3:构建最小二乘的残差函数,并计算最佳参数(最关键步骤)

    #步骤3-1:利用python库提供的最小二乘算法来计算拟合函数的参数
    print("使用无噪声数据:")
    popt, pcov = optimize.curve_fit(f_line_wb, x_data, y_data_pure)
    print(popt)
    print(pcov)
    w_scipy =  popt[0]
    b_scipy =  popt[1]
    print("参数w=", w_scipy)
    print("参数b=", b_scipy)
    
    print("\n使用有噪声数据:")
    popt, pcov = optimize.curve_fit(f_line_wb, x_data, y_data_noise)
    print(popt)
    print(pcov)
    w_scipy =  popt[0]
    b_scipy =  popt[1]
    print("参数w=", w_scipy)
    print("参数b=", b_scipy)
    使用无噪声数据:
    [2. 1.]
    [[ 0. -0.]
     [-0.  0.]]
    参数w= 2.0
    参数b= 1.0
    
    使用有噪声数据:
    [1.91826746 1.08186076]
    [[ 0.0310567  -0.01552835]
     [-0.01552835  0.01045787]]
    参数w= 1.9182674578022025
    参数b= 1.0818607577986927

    备注说明:

    这里利用python库提供的最小二乘算法来计算拟合函数的参数。

    因此没有展现用数值的方法求最小二乘最佳参数的过程。

    如下函数就展现通过求解多元线性方程组的方法,获得拟合函数的参数a和b。

    #步骤3-2: 自定义最小二乘求解拟合函数参数:偏导+线性方程组(求偏导后一次函数)
    def usr_curve_fit(input_f, input_x_data, input_y_data_noise):
        #获取采样数据的个数
        n = len(input_x_data)
        
        #计算线性方程组矩阵的数据
        sum_xi = np.sum(input_x_data)
        sum_yi = np.sum(input_y_data_noise)
        sum_xiyi = np.sum(input_x_data * input_y_data_noise)
        sum_xixi = np.sum(input_x_data**2)
        
        #构建线性方程组矩阵
        A=[[0,0],[0,0]]
        b=[0,0]
        A[0][0] = n
        A[0][1] = sum_xi
        A[1][0] = sum_xi
        A[1][1] = sum_xixi
        b[0] = sum_yi
        b[1] = sum_xiyi
        
        #解方程组
        rst = np.linalg.solve(A,b)
        
        #返回拟合函数参数
        return ([rst[1],rst[0]])
    
    
    print("使用无噪声数据:")
    popt = usr_curve_fit(f_line_wb, x_data, y_data_pure)
    print(popt)
    print(pcov)
    w_usr =  popt[0]
    b_usr =  popt[1]
    print("参数w=", popt[0])
    print("参数b=", popt[1])
    
    print("\n使用有噪声数据:")
    popt = usr_curve_fit(f_line_wb, x_data, y_data_noise)
    w_usr =  popt[0]
    b_usr =  popt[1]
    print("参数w=", w_usr)
    print("参数b=", b_usr)
    使用无噪声数据:
    [2.0, 0.9999999999999997]
    [[ 0.0310567  -0.01552835]
     [-0.01552835  0.01045787]]
    参数w= 2.0
    参数b= 0.9999999999999997
    
    使用有噪声数据:
    参数w= 1.9182674564112352
    参数b= 1.081860759861322

    可以看出,通过自定义的线性方程组求解获取的拟合参数的参数与通过scipy获得的参数值是一致的。

    scipy库:参数a= 1.9182674578022025    参数b= 1.0409944876382622

    自定义 :参数a= 1.9182674564112352    参数b= 1.0818607577986927

    4.4 步骤4:利用拟合函数进行数据预测

    # 步骤4:利用获得的拟合函数进行数据预测
    print("scipy:", w_scipy,b_scipy)
    print("user :", w_usr, b_usr)
    
    # scipy算法的拟合数据
    y_data_scipy = f_line_wb(x_data, w_scipy, b_scipy)
    
    # 线性方程组求解的拟合数据
    y_data_usr  = f_line_wb(x_data, w_usr, b_usr)
    
    scipy: 1.9182674578022025 1.0818607577986927
    user : 1.9182674564112352 1.081860759861322
    

    4.5 步骤5:图形展示

    #步骤5: 图形化展示
    #(1) 显示样本数据曲线
    plt.scatter(x_data, y_data_noise, label="sample", color="black")
    
    #(2) 显示理论数据曲线
    plt.plot(x_data, y_data_pure, label="intrinsic", color="blue", linewidth = 2)
    
    #(3-1) 显示预测数据曲线 -  scipy库实现
    plt.plot(x_data, y_data_scipy,  label="predict",  color="red",  linewidth = 2)
    
    #(3-2) 显示预测数据曲线 -  自定义实现
    plt.plot(x_data, y_data_usr,  label="predict",  color="green",  linewidth = 2)
    
    #(3-3) 显示预测数据曲线 -  自定义梯度下降法
    #plt.plot(x_data, y_data_grad,  label="predict",  color="green",  linewidth = 2)
    
    #设置属性
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    plt.title("线性拟合")
    plt.legend(loc="upper left")
    plt.show()

     从上图可以看出:线性方程组求解获得拟合函数与scipy库获得的拟合函数,基本重合。


    作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

    本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119977443

    展开全文
  • 最小二乘法多元线性回归

    万次阅读 2017-05-14 14:46:48
    线性模型的最小二乘可以有很多方法来实现,比如直接使用矩阵运算求解析解,sklearn包(参考:用scikit-learn和pandas学习线性回归、用scikit-learn求解多元线性回归问题),或scipy里的leastsq function(参考:How ...
  • 前面分析了 线性最小二乘 的解法YcoFlegs:[数值计算] 数据拟合——线性最小二乘法​zhuanlan.zhihu.com现在来看另一个问题:非线性最小二乘法1. 定义首先是如何定义这里这个“非线性”。为什么前面用多项式拟合就是...
  • Python: 最小二乘法(多元线性回归)

    千次阅读 2021-08-05 17:35:22
    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split ...
  • 使用最小二乘法计算多元线性回归的公式推导

    万次阅读 多人点赞 2019-08-28 16:04:00
    机器学习-线性回归线性回归背景最小二乘法计算线性回归数据的准备把数据转换成数学损失函数根据损失函数计算最终结果总结 最近老师让我学习线性回归编程模型,此篇介绍使用最小二乘法实现单机器线性回归。 线性回归...
  • 线性最小二乘求解方法总结

    千次阅读 2021-03-02 10:56:51
    最小二乘法     最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际...
  • 最小二乘法多元线性回归(岭回归实现)多元线性回归岭回归实现一、理论分析二、实现代码第一部分(LinRegression类)第二部分(main,调用类并做对比)三、代码解读及结果分析1.代码解读2.结果分析 采用岭回归的方式...
  • 用matlab中最小二乘法编程求解

    千次阅读 2021-04-20 13:24:07
    《用matlab中最小二乘法编程求解》由会员分享,可在线阅读,更多相关《用matlab中最小二乘法编程求解(2页珍藏版)》请在人人文库网上搜索。1、有一组关于M、H的实验数据(附件1.data),已知其符合: 分布,请利用最小...
  • 1、最小二乘原理Matlab直接实现最小二乘法的示例:closex = 1:1:100;a = -1.5;b = -10;y = a*log(x)+b;yrand = y + 0.5*rand(1,size(y,2));%%最小二乘拟合xf=log(x);yf=yrand;xfa = [ones(1,size(xf,2));xf]w = inv...
  • 线性模型的最小二乘可以有很多方法来实现,比如直接使用矩阵运算求解析解,sklearn包(参考:用scikit-learn和pandas学习线性回归、用scikit-learn求解多元线性回归问题),或scipy里的leastsq function(参考:How ...
  • 普通最小二乘线性回归 一般情况下,线性回归模型假设函数为: hw,b(x)=∑i=1nwixi+b=wTx+b h_{w, b}(x)=\sum_{i=1}^{n} w_{i} x_{i}+b=w^{\mathrm{T}} x+b hw,b​(x)=i=1∑n​wi​xi​+b=wTx+b 其中,w∈Rnw\in \...
  • 本文通过使用最小二乘法求解一元线性回归方程来解释一下为啥线性回归可以直接求解
  • 基于LM算法的非线性最小二乘法拟合

    热门讨论 2012-10-18 13:39:20
    The Levenberg-Marquardt method for nonlinear least squarescurve-fitting problems
  • MATLAB 超定方程组 最小二乘法

    千次阅读 2021-04-19 09:11:01
    (3)矩阵求逆行数和列数相等的矩阵称为...在MATLAB中不是使用逆阵x=inv(A)*B来求线性方程组Ax=B的解,而是使用矩阵除法运算x=A\B来求解。因为MATLAB设计求逆函数inv时,采用的是高斯消去法,而设计除法解线性方程组时...
  • 线性回归-最小二乘法

    千次阅读 2022-02-16 10:18:49
    在常规预测分析过程中如果预测的变量是连续的,最为常用的预测方式为回归分析,具体包括线性、非线性2类,其核心是采用最小二乘法(直线到各点的距离之和最小)对已知的样本数据进行最优拟合,然后通过拟合出的线性...
  • 最小二乘法的目标函数可以简单理解成下面这个表达式,其中是理论值,是观测值。 为了简化问题,我们将视为一个一次函数,其表达式为。 已知 求最佳的和,使得上述目标函数取最小值 2. 数学推导 将.
  • 线性回归:自变量和因变量之间是线性关系,例如:h= a0+a1x1+a2x2+…+anxn。线性回归预测的一般步骤:假设特征变量Xi...线性回归的根本就是求解最小损失函数,常用的方法有:最小二乘法,梯度下降法和正则化。 ...
  • PAGE / NUMPAGES 有一组关于MH的实验数据附件1.data已知其符合 分布请利用最小二乘法编写程序求三个参数abc的值要求利用MATLAB编程20分 解拟合两组数据MH已知 只需确定多项式系数abc根据最小二乘原则使 所求问题成为...
  • 文章目录多元线性回归1、基本概念1.1、连续值1.2、离散值1.3、简单线性回归1.4、最优解1.5、多元线性回归2、线性回归算法推导2.1、深入理解回归2.2、误差分析2.3、最大似然估计2.4、高斯分布-概率密度函数2.5、误差...
  • python实现线性回归之最小二乘法最小二乘法详解

    万次阅读 多人点赞 2019-06-02 14:42:54
    线性回归是确定两种及两种以上变量的相互依赖关系。在数据分析中,线性回归是最简单且最有效的分析方法。举个简单的例子,某商品的利润在售价为2元、5元、10元时分别为4元、10元、20元,我们很容易得出商品的利润与...
  • 线性回归模型可以说是最重要的数学模型之一,很多模型都是建立在它的基础之上,可以被称为是“模型之母”。 kNN算法属于分类(Classification),即label为离散的类别型(categorical variable),如:颜色类别、手机...
  • 线性回归(又名普通最小二乘法线性回归,或者普通最小二乘法,是回归问题最简单也是最经典的线性方法。线性回归寻找参数w和b,使得对训练集的预测值与真实的回归目标值y之间的均方误差最小。均方误差是预测值与...
  • 多元线性回归 最小二乘法实现   线性回归包括一元线性回归和多元线性回归,一元的是只有一个x和一个y。多元的是指有多个x和一个y。     对于平面中的这n个点,可以使用无数条曲线来拟合。要求样本...
  • 最小二乘法线性拟合介绍以及matlab实现

    千次阅读 多人点赞 2022-01-30 22:53:34
    问题背景 拟合曲线最常用的方法是最小二乘法,直线拟合是最常见的,如果已知两个变量x和y的一系列数据,如: 问题探究 我们利用matlab进行绘制...那么怎么利用最小二乘法进行拟合呢? 你可能会拿出高中的公式: ...
  • 最小二乘法的主要思想是通过确定未知参数θ\thetaθ(通常是一个参数矩阵),来使得真实值和预测值的误差(也称残差)平方和最小,其计算公式为E=∑i=0nei2=∑i=1n(yi−yi^)E=\sum_{i=0}^ne_i^2=\sum_{i=1}^n(y_i-\...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,384
精华内容 1,753
关键字:

多元线性最小二乘法求解