多元线性回归matlab代码_五种优化算法实现多元线性回归

  • Post author:
  • Post category:其他



实现多元线性回归的要求及假设条件:



'''


线性回归的假设条件:

1、样本独立,即每个预测样本之间没有依赖关系;

2、残差e要服从正态分布,即y_true-y_pred的残差需要服从高斯分布;

3、特征之间独立,即特征之间需要独立,如果不独立(共线性)会造成系数权重之和为单特征权重且权重方差较大,同时会造成模型预测结果震荡,不稳定;

4、样本数需要大于特征数,如果特征数量大于样本数量,通过最小二乘法无法求矩阵的逆,通过其他优化方式得到的最优结果非唯一解,造成模型偏差较大;

5、残差e要求方差齐性,即残差不随观测变量的变化而变化;

6、自变量与因变量之间呈线性关系;

使用最小二乘法、梯度下降、随机梯度下降、PSO粒子群算法及牛顿法实现多元线性回归,数据集使用如下数据集

from sklearn import datasets

data=datasets.load_diabetes()

'''

整体源代码,如有帮助,欢迎star:

https://github.com/suixintech/ML_Coding/edit/master/LinearRegression.py

本代码主要通过五种常见的方法实现多元线性回归,包含常见的最小二乘法、梯度下降、随机梯度下降、pso粒子群优化算法以及牛顿法实现,具体推导这里不做过多讲解,以实现代码为主;


一、所引用的库

from contextlib import contextmanagerfrom time import strftimeimport timeimport numpy as npfrom sklearn import datasetsimport warnings
warnings.filterwarnings('ignore')@contextmanagerdef timeSchedule(message: str):""" Time Schedule
"""print('[INFO {}][{}] Start ...'.format(strftime('%Y-%m-%d %H:%M:%S'), message))
start_time = time.time()yieldprint('[INFO {}][{}] End ...'.format(strftime('%Y-%m-%d %H:%M:%S'), message))print('[INFO {}][{}] Cost {:.2f} s'.format(strftime('%Y-%m-%d %H:%M:%S'), message, time.time() - start_time))