机器学习之线性回归模型标准方程法的python实现

机器学习之线性回归模型标准方程法的python实现

前言: 线性回归模型的训练求解可以用梯度下降法也可以用标准方程法,这两种方法各有优缺点,其中,
梯度下降法的优点是即使模型的特征数量很多也可以很好的执行,缺点是需要确定学习率以及迭代次数还有初始参数的选择,得到的结果也是无线趋近的近似最优解;

标准方程法的优点是不需要学习率,迭代次数,初始参数选择,且求解结果是无偏差的全局最优解,缺点是如果模型的特征数过多会出现不可逆导致不能解出参数值,或者样本数量过大,导致计算量太大而无法完成计算的问题

详细标准方程法理论请至我的【机器学习】类别的博文中学习

机器学习之线性回归模型标准方程法的python实现_第1张图片

一、标准方程法代码实现

import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt

# 导入数据
data = genfromtxt('data.csv', delimiter=',')
x_data = data[:, 0, np.newaxis]
y_data = data[:, 1, np.newaxis]

# 给样本添加偏置项 (就是theta0 对应的x0全为1的项)
X_data = np.concatenate((np.ones((100, 1)), x_data), axis=1)

# 标准方程法求就回归参数
def weights(xArr, yArr):
    xMat = np.mat(xArr)  # 将数组类型转为矩阵类型
    yMat = np.mat(yArr)

    xTx = xMat.T * xMat
    # 判断xTx是否可逆
    if np.linalg.det(xTx) == 0.0:
        print('因矩阵不可逆,因此无法使用标准方程法求解模型参数')
        return
    ws = xTx.I * xMat.T * yMat  # xTx.I为xTx的逆矩阵
    return ws

ws = weights(X_data, y_data)

# 绘图
plt.plot(x_data, y_data, 'b.')
x_line = np.array([[np.min(x_data)], [np.max(x_data)]])
y_line = ws[0, 0] + ws[1, 0] * x_line
plt.plot(x_line, y_line, 'r')
plt.show()

二、模型训练结果
机器学习之线性回归模型标准方程法的python实现_第2张图片
三、数据下载
链接:https://pan.baidu.com/s/1KhPIzejxFZfbkIGZo8J8lg
提取码:slg1

你可能感兴趣的:(Python,机器学习,机器学习,python,标准方程法,线性回归模型)