机器学习 -- 多元线性回归(Ⅰ多元线性回归和正规方程解)

1.多元线性回归

如下图,有X1,X2,...,Xn多个变量。

机器学习 -- 多元线性回归(Ⅰ多元线性回归和正规方程解)_第1张图片

(1)多元线性回归的目标

机器学习 -- 多元线性回归(Ⅰ多元线性回归和正规方程解)_第2张图片

(2)转换成矩阵相乘

机器学习 -- 多元线性回归(Ⅰ多元线性回归和正规方程解)_第3张图片

 

机器学习 -- 多元线性回归(Ⅰ多元线性回归和正规方程解)_第4张图片

 

机器学习 -- 多元线性回归(Ⅰ多元线性回归和正规方程解)_第5张图片

(3)推导结果

以上式子被称为多元线性回归的正规方程解(Normal Equation)。多元线性回归可以直接通过数学表达式计算出模型的参数值。

(4)参数意义

机器学习 -- 多元线性回归(Ⅰ多元线性回归和正规方程解)_第6张图片

 

2.正规方程解

(1)公式

(2)优点和缺点

缺点:时间复杂度高:O(n^3)(优化后也是O(n^2.4))。

优点:不需要对数据做归一化处理(没有量纲的问题)。

(3)代码实现

import numpy as np
from sklearn.metrics import r2_score


class LinearRegression:

    # 初始化LinearRegression模型
    def __init__(self):
        self.coef_ = None
        self.interception_ = None
        # theta为私有变量
        self._theta = None

    # 使用正规化方程0
    def fit_normal(self, X_train, y_train):
        assert X_train.shape[0] == y_train.shape[0], \
            "X_train和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):
        assert self.interception_ is not None and self.coef_ is not None, \
            "必须先拟合才能进行预测!"
        assert X_predict.shape[1] == len(self.coef_), \
            "预测值的特征数必须和训练集个数一致!"
        X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])
        return X_b.dot(self._theta)

    # 根据测试数据集X_test和y_test确定当前模型的准确度
    def score(self, X_test, y_test):
        y_predict = self.predict(X_test)
        return r2_score(y_test, y_predict)

 

 

 

你可能感兴趣的:(机器学习)