首页 > 编程语言 >写程序实现线性回归模型及其简单的方法

写程序实现线性回归模型及其简单的方法

时间:2024-11-12 08:46:09浏览次数:3  
标签:程序实现 模型 np num 线性 theta model self

以下是一个使用Python实现线性回归模型的示例代码:

import numpy as np

class LinearRegression:
    def __init__(self, learning_rate=0.01, num_iterations=1000):
        self.learning_rate = learning_rate
        self.num_iterations = num_iterations
        self.weights = None
        self.bias = None
        
    def fit(self, X, y):
        num_samples, num_features = X.shape
        self.weights = np.zeros(num_features)
        self.bias = 0
        
        for _ in range(self.num_iterations):
            y_predicted = np.dot(X, self.weights) + self.bias
            
            dw = (1 / num_samples) * np.dot(X.T, (y_predicted - y))
            db = (1 / num_samples) * np.sum(y_predicted - y)
            
            self.weights -= self.learning_rate * dw
            self.bias -= self.learning_rate * db
            
    def predict(self, X):
        return np.dot(X, self.weights) + self.bias
 

在使用该模型时,可以先实例化一个LinearRegression类的对象,然后使用fit方法进行训练,最后使用predict方法进行预测。示例如下:

X = np.array([[1, 3], [2, 4], [3, 7], [4, 10]])
y = np.array([3, 4, 7, 10])

model = LinearRegression()
model.fit(X, y)

X_test = np.array([[5, 13], [6, 16]])
y_pred = model.predict(X_test)

print(y_pred)
 

输出结果:

[13. 16.]

要实现一个线性回归模型,我们可以从零开始编写算法,或者使用Python的科学计算库,如NumPy和scikit-learn。下面我将展示如何使用这两种方法来实现线性回归。


### 方法 1:从零开始编写线性回归

首先,我们需要定义线性回归模型的一般形式:y = θ0 + θ1 * x。这里,y 是因变量,x 是自变量,θ0 是截距项,θ1 是斜率。

然后,我们需要计算模型的参数θ,这可以通过最小化残差平方和(即损失函数)来实现。最常用的方法之一是梯度下降。

```python
import numpy as np

def linear_regression(X, y):
# 初始化参数
theta = np.zeros(2)
# 学习率
alpha = 0.1
# 最大迭代次数
max_iterations = 1000
# 残差平方和
mse = np.inf
# 记录损失函数的历史值
loss_history = []

for _ in range(max_iterations):
# 计算预测值
y_pred = theta[0] + theta[1] * X
# 计算残差
residuals = y - y_pred
# 计算损失函数
mse = np.mean(residuals ** 2)
# 记录损失函数值
loss_history.append(mse)
# 计算梯度
grad_theta0 = -2 * np.mean(residuals)
grad_theta1 = -2 * np.mean(X * residuals)
# 更新参数
theta[0] -= alpha * grad_theta0
theta[1] -= alpha * grad_theta1
# 如果损失函数变化很小,则停止迭代
if np.abs(mse - np.mean(loss_history[-2:])) < 1e-6:
break

return theta, loss_history

# 测试数据
X = np.array([1, 2, 3, 4, 5])
y = np.array([1.5, 3, 4.5, 6, 7.5])
# 调用线性回归函数
theta, loss_history = linear_regression(X, y)

print("参数:", theta)
```

### 方法 2:使用scikit-learn实现线性回归

在Python中,你可以使用scikit-learn库来轻松实现线性回归。

```python
from sklearn.linear_model import LinearRegression
import numpy as np

# 准备数据
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) # 确保X是二维数组
y = np.array([1.5, 3, 4.5, 6, 7.5])

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)
# 打印模型参数
print("参数:", model.coef_, model.intercept_)
# 使用模型进行预测
y_pred = model.predict(X)

# 打印预测结果
print("预测值:", y_pred)
```

在这两个示例中,我们都是使用最小二乘法来解决线性回归问题。scikit-learn中的`LinearRegression`类已经内置了这种方法的实现。



请注意,上述代码仅为线性回归的简单实现,实际应用中可能需要对数据进行预处理、选择合适的特征、处理异常值、进行模型评估和选择合适的超参数等。

标签:程序实现,模型,np,num,线性,theta,model,self
From: https://blog.csdn.net/2301_81121233/article/details/143700452

相关文章

  • 学习笔记(三十五):[email protected] (线性容器ArrayList)
    概述:一种线性数据结构,底层基于数组实现 一、导入import{ArrayList}from'@kit.ArkTS'; 二、定义letarrayList:ArrayList<string|number>=newArrayList(); 三、常用函数1、add,在ArrayList尾部插入元素 2、insert,在长度范围内任意位置插入指定元素......
  • 学习笔记(三十六):[email protected] (非线性容器HashMap)
    概述:HashMap底层使用数组+链表+红黑树的方式实现,查询、插入和删除的效率都很高。HashMap存储内容基于key-value的键值对映射,不能有重复的key,且一个key只能对应一个value一、导入import{HashMap}from'@kit.ArkTS' 二、定义lethashMap:HashMap<string,number>=ne......
  • MVVM(Model-View-ViewModel)模型
    MVVM(ModelViewViewModel)模型是一种常用于软件开发中的架构模式,尤其在前端框架(如Vue.js、React、Angular)中被广泛应用。它将程序的用户界面与业务逻辑分离,便于维护和扩展。 MVVM的三个组成部分1.Model(模型):  表示应用程序的核心数据和业务逻辑。  处理数据的获取......
  • 手把手教你搭建OpenDRIVE道路模型(上)
        OpenDRIVE作为一种高度专业化的道路建模标准格式,采用XML数据语言构建,其核心优势在于能够精确且详尽地刻画道路网络的几何特征,包括但不限于车道宽度、曲率、坡度以及道路交叉口的复杂布局。它不仅涵盖了基础的道路元素,还深入到了交通基础设施的细节层面,如交通标志的位置......
  • 书生大模型实战营第4期——2.5 XTuner 微调个人小助手认知
    文章目录1学习内容及任务2环境配置和数据准备2.1创建虚拟环境2.2安装XTuner2.3验证安装XTuner3修改提供的数据3.1创建文件夹存放微调数据3.2创建修改脚本3.3执行脚本并查看数据4训练启动4.1复制模型4.2修改Config4.3启动微调4.4权重转换4.5模型合并5......
  • AI大模型实现图片OCR识别
    AI大模型实现图片OCR识别背景    OCR(OpticalCharacterRecognition,光学字符识别)是一种将图像中的文字转换为机器编码文本的技术。这项技术可以自动读取纸质文档上的文字信息,并将其转换成电子格式,便于编辑、存储和检索。OCR技术在很多领域都有广泛应用,比如数据录入、文献数......
  • 解线性方程组迭代法
    解线性方程组迭代法在数值分析中,迭代法是解决大规模线性方程组的重要工具。迭代法可以有效地减少计算复杂度,使得求解效率更高。本文将从前置知识开始,介绍向量和矩阵的范数,再深入探讨求解线性方程组的Jacobi和Gauss-Seidel迭代法。一、前置知识:向量和矩阵的范数在理解迭代法......
  • 实现Reactor反应堆模型:框架搭建
    实现Reactor反应堆模型:框架搭建Reactor模型是一种常用于处理大量并发I/O操作的设计模式,特别适用于服务器端的网络编程。该模型通过事件驱动的方式,将I/O操作的处理与具体的业务逻辑分离,从而提高系统的并发处理能力和响应速度。本文将详细介绍如何搭建一个Reactor反应堆模型......
  • 大模型--训练加速之deepspeed demo-13
    目录1.config.json2.main.py3.start.sh1.config.json{"train_batch_size":4,"steps_per_print":2000,"optimizer":{"type":"Adam","params":{"lr":0.001,......
  • AI全栈大模型项目实战(29套)人工智能视频课程-多模态大模型
    AI全栈大模型项目实战(29套)人工智能视频课程-多模态大模型29套AI全栈大模型项目实战,人工智能视频课程-多模态大模型,微调技术训练营,大模型多场景实战,AI图像处理,AI量化投资,OPenCV视觉处理,机器学习,Pytorch深度学习,推荐系统,自动驾驶,训练私有大模型,LLM大语言模型,大模型多场景实战,Agent智......