对于多元线性回归理解和推导过程

多元线性回归

一、多元线性回归理解

通过一元线性回归的实现和推理,我清楚了一元线性回归的用法

然后来到多元线性回归

线性,图像上任意一点的坐标,y值都是x值的a倍.我们把这种横纵坐标始终呈固定倍数的关系叫做"线性".线性函数的图像是一条直线.所以我们知道了多元线性回归函数的图像一定也是一条直线,多元,顾名思义,就是表达式中存在多个自变量(属性),
多元线性回归就是:用多个x(变量或属性)与结果y的关系式 来描述一些散列点之间的共同特性.这些x和一个y关系的图像并不完全满足任意两点之间的关系(两点一线),但这条直线是综合所有的点,最适合描述他们共同特性的,因为他到所有点的距离之和最小也就是总体误差最小.

在这里插入图片描述

所以多元线性回归的表达式可以写成:(θ0是截距)

在这里插入图片描述

二、多元线性回归推导过程

向量化

我们可以通过对于前面表达式y进行向量化,即y表示为两个向量相乘的形式,所以,可以有以下表述:

在这里插入图片描述

变成两个向量的相乘,然后,我们可以得到多元的情况下的整个训练数据集就是一整个矩阵的计算:

在这里插入图片描述

对于矩阵乘法,我们根据之前衡量线性回归算法准确度的R方 法可以得到

在这里插入图片描述

只需要求得∑(y_true(i) - y_train(i))^2的最小值即可,然后我们可以推导出相应的θ值。
我们可以通过最小二乘法进行求解,首先因为会遇到矩阵求导,这里提供部分矩阵求导公式,推导如下:

在这里插入图片描述

字丑,别介意 >_<!

在这里插入图片描述

最终求的解析解为:

在这里插入图片描述

获得参数以后,这个多元线性方程就有解了,就可以进行预测了。

三、代码实现

import numpy as np

from metrics import R_Squared


class LinearRegression:

    def __init__(self):
        """初始化Linear Regression模型"""
        self.coef_ = None
        self.interception_ = None
        self._theta = None

    def fit_normal(self,X_train,y_train):
        """根据训练数据集X_train,y_train训练Linear Regression模型"""
        assert X_train.shape[0] == y_train.shape[0], \
            "the size of X_trian must be equal to the size of y_train"

        X_b = np.hstack([np.ones((len(X_train), 1)), X_train])
        self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)

        self.interception_ = self._theta[0]
        self.coef_ = self._theta[1:]

        return self

    def predict(self,X_predict):
        """给定待预测数据集X_predict.返回表示X_predict的结果向量"""
        assert self.interception_ is not None and self.coef_ is not None, \
            "must fit before predict"
        assert X_predict.shape[1] == len(self.coef_), \
            "the feature number of X_predict must be equal to X_train"

        X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])
        return X_b.dot(self._theta)
    
    def score(self,X_test,y_test):
        """根据测试数据集 X_test 和 y_test 确定当前模型的准确度"""
        
        y_predict = self.predict(X_test)
        return R_Squared(y_test,y_predict)

    def __repr__(self,):
        return "LinearRegression()"

谢谢观看!!!

  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值