首页 > 编程语言 >Python 机器学习 线性回归 正规方程优化损失函数

Python 机器学习 线性回归 正规方程优化损失函数

时间:2024-02-09 10:33:04浏览次数:36  
标签:Python test 正规 np train 线性 theta dot

Python 机器学习中,线性回归模型的参数可以通过正规方程(Normal Equation)直接计算得到,无需使用迭代优化算法如梯度下降。正规方程提供了一种找到成本函数最小值的解析解,从而直接计算出模型参数(系数和截距)。正规方程是一种简单有效的方法,可以用于求解线性回归模型的参数。其优点是计算速度快,并且可以得到解析解。

 参考文档:Python 机器学习 线性回归 正规方程优化损失函数-CJavaPy

1、线性回归

线性回归是一种常用的机器学习算法,用于预测一个连续变量的值。其目标是找到一条直线,使预测值与真实值之间的差距最小。

参考文档:Python 机器学习 线性回归算法

2、损失函数

线性回归模型的性能通常通过损失函数(或成本函数)来衡量,它计算了模型预测值与实际目标值之间的差异。对于线性回归,最常用的损失函数是均方误差(Mean Squared Error, MSE)损失。公式如下,

import numpy as np

# 假设 X 是输入特征矩阵,y 是目标值向量
X = np.array([[1, 2], [1, 3], [1, 4], [1, 5]]) # 添加了一列1作为x0,以便处理截距项
y = np.array([5, 7, 9, 11])

# 初始化模型参数,theta0为截距,theta1, theta2为斜率
theta = np.array([0.1, 0.2])

# 线性回归模型的预测函数
def predict(X, theta):
    return X.dot(theta)

# 计算损失函数(MSE)
def compute_loss(X, y, theta):
    m = len(y)
    y_pred = predict(X, theta)
    loss = (1 / (2 * m)) * np.sum(np.square(y_pred - y))
    return loss

# 计算损失值
loss = compute_loss(X, y, theta)
print(f"Loss: {loss}")

参考文档:Python 机器学习 线性回归算法

3、正规方程(Normal Equation)

为了找到最小化损失的模型参数,可以使用多种优化技术,其中一种是正规方程(Normal Equation)。正规方程是一种解析方法,直接计算出最优的模型参数(即权重),而不需要迭代优化过程(如梯度下降)。特别适用于特征数量不是特别大的情况,因为计算矩阵的逆可能在特征数量非常大时变得计算上不可行。对于特征数非常多的情况,使用梯度下降或其他优化算法可能更合适。公式如下,

import numpy as np

# 假设X是特征矩阵,y是目标变量向量
# 为X添加一列1,用于计算偏置项(截距)
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.array([6, 8, 9, 11])
X_b = np.c_[np.ones((4, 1)), X]  # 添加一列1

# 使用正规方程计算最佳参数
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)

print("最佳参数 (截距和斜率):", theta_best)

使用示例:

import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 生成一个回归数据集
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)

# 添加截距项
X_b = np.c_[np.ones((100, 1)), X]  # 添加x0 = 1到每个实例

# 使用正规方程计算最佳参数
beta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)

# 显示计算出的参数(截距和系数)
print("计算出的参数:", beta_best)

# 预测
X_new = np.array([[0], [2]])
X_new_b = np.c_[np.ones((2, 1)), X_new]  # 同样添加x0 = 1
y_predict = X_new_b.dot(beta_best)
print("预测值:", y_predict)

# 使用训练集和测试集来评估模型性能
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
X_train_b = np.c_[np.ones((X_train.shape[0], 1)), X_train]
X_test_b = np.c_[np.ones((X_test.shape[0], 1)), X_test]

beta_best_train = np.linalg.inv(X_train_b.T.dot(X_train_b)).dot(X_train_b.T).dot(y_train)
y_test_predict = X_test_b.dot(beta_best_train)
mse = mean_squared_error(y_test, y_test_predict)
print("测试集上的MSE:", mse)

参考文档:Python 机器学习 线性回归 正规方程优化损失函数-CJavaPy

标签:Python,test,正规,np,train,线性,theta,dot
From: https://www.cnblogs.com/tinyblog/p/18012365

相关文章

  • python django4.1 pycharm,报错,Conflicting 'xxx' models in application 'xxx': <
    遇到了一个报错,不知道咋么解决,pythondjango3pycharm,报错。不晓得怎么解决;Conflicting'xxx'modelsinapplication'xxx':<class'xxx'>and<class'xxx'>.这个是 报错误 信息,如下:RuntimeError:Conflicting'faculty'modelsin......
  • Python获取 CPU 温度、CPU 占用、内存总空间、内存占用空间、系统磁盘总空间、系统磁
    先下载依赖pip3installpsutil代码importpsutil#获取CPU温度defget_cpu_temperature():try:temperatures=psutil.sensors_temperatures()if'coretemp'intemperatures:forentryintemperatures['coretemp']:......
  • Python 语法——初步认识语法元素的基本含义
    Python语法——初步认识语法元素的基本含义部分内容对照c语言(实际不影响阅读)以下为3.x内容的Python一、缩进c语言常常用{}来划分包含与层次关系;而Python使用缩进——Tab键或者空格实现(一般为4个空格)二、注释c语言常常用//或者是/**/来进行单行、多行注释;而Python使......
  • Python实现软件设计模式10:装饰器模式 Decorator Pattern
    概念是一种对象结构型模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为是一种用于替代继承的技术,他通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增......
  • Python调用USB摄像头
    1.硬件连接方式USB摄像头通过USB接口连接到PC。2.使用说明使用的是python3.11.5,程序可以在PyCharm中直接运行。运行后,即可打开一个实时预览窗口,显示摄像头画面。在预览窗口中,按键盘上的‘q’(quit)退出预览,按‘p’(takephoto)拍照。拍照的图片,保存在工程根目录下,名字形如“cv2......
  • python turtle 递归绘制树
    运行效果代码importturtleastimportrandomasrc=["pink","green","lightgreen","orange","red","purple"]defdrawStar(l):t.begin_fill()foriinrange(5):t.forward(l)......
  • 【Python】基于动态残差学习的堆叠式LSTM模型和传统BP在股票预测中的应用
    1.前言本论文探讨了长短时记忆网络(LSTM)和反向传播神经网络(BP)在股票价格预测中的应用。首先,我们介绍了LSTM和BP在时间序列预测中的基本原理和应用背景。通过对比分析两者的优缺点,我们选择了LSTM作为基础模型,因其能够有效处理时间序列数据中的长期依赖关系,在基础LSTM模型的基础上,......
  • Python与anaconda的 pip 冲突
    Python与anaconda的pip冲突1.默认pipinstall会安装到Anaconda下假如我们想要安装到python目录下D:\Python\Python36\Lib\site-packages找到Anaconda安装目录:D:\Anaconda3\python.exe2.验证原生python3python3–mpip–-versionpython3–mpiplist#......
  • python版本管理工具pyenv常见用法
    安装Mac使用brew进行安装:brewupdatebrewinstallpyenv配置环境变量(以zsh为例):echo'exportPYENV_ROOT="$HOME/.pyenv"'>>~/.zshrcecho'[[-d$PYENV_ROOT/bin]]&&exportPATH="$PYENV_ROOT/bin:$PATH"'>&g......
  • Python进行AI声音克隆的端到端指南
    人工智能语音克隆是一种捕捉声音的独特特征,然后准确性复制它的技术。这种技术不仅可以让我们复制现有的声音,还可以创造全新的声音。它是一种彻底改变内容创作的工具,从个性化歌曲到自定义画外音,开辟了一个超越语言和文化障碍的创意世界。本文的将提供利用AI语音克隆技术-通过训练......