scikit-learn/sklearn学习|线性回归解读

【1】引言

前序学习进程中,对SVM相关的数学原理进行了探索和推导,相关文章链接包括且不限于:

python学智能算法(二十六)|SVM-拉格朗日函数构造-CSDN博客

python学智能算法(二十八)|SVM-拉格朗日函数求解中-KKT条件_python求解kkt条件-CSDN博客

python学智能算法(三十)|SVM-KKT条件的数学理解_dual svm 的 kkt 条件-CSDN博客

python学智能算法(三十六)|SVM-拉格朗日函数求解(中)-软边界-CSDN博客

在对数学原理进行测试的过程中,必须用到数据集。由于sklearn有成熟的数据集,因此有必要先对sklearn相关的知识点进行学习和掌握,这样才有助于快速理解后面的知识。

【2】线性回归实例解读

官网学习地址:1.1 线性模型-scikit-learn中文社区

线性回归计算的本质非常简单,假设有自变量x=[x1,x2,...,xn] ,因变量$y=[y1,y2}...,yn],线性回归的目的就是找出一组回归系数$w=[w1,w2...,wn]$和偏置量b,使得线性方程成立:

$$y(w,x,b)=\sum_{i=1}^{n}w_{i}\cdot x_{i}+b$$

解读之前,首先给出完整代码:

# 引入绘图模块
import matplotlib.pyplot as plt
# 引入计算模块
import numpy as np
# 引入数据集和线性模块
from sklearn import datasets, linear_model
# 计算均方误差和决定系数
from sklearn.metrics import mean_squared_error, r2_score# Load the diabetes dataset
# 返回二维矩阵diabetes_X,diabetes_X本质是MXN行的矩阵
# 返回一维数组diabetes_y,diabetes_y实际上没有行向量和列向量的区分
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# Use only one feature
# 两个操作,第一个是微数据增加一个新的维度,通过np.newaxis
# 第二个是只提取原本二维矩阵diabetes_X中的第3个特征
# 假如提取原本二维矩阵diabetes_X中的第3个特征是[12,16,18],它们组成了一维数组
# 添加np.newaxis的作用后,获得新的diabetes_X =[[12],[16],[18]]
diabetes_X = diabetes_X[:, np.newaxis, 2]# Split the data into training/testing sets
# 将diabetes_X 除了最后20个数据之外的部分设置为训练数据集的特征,也就是因变量
diabetes_X_train = diabetes_X[:-20]
# 将diabetes_X 最后20个数据设置为测试数据集
diabetes_X_test = diabetes_X[-20:]# Split the targets into training/testing sets
# 将diabetes_y 除了最后20个数据之外的部分设置为训练数据集的特征,也就是因变量
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]# Create linear regression object
# 此处触及线性回归的本质
# regr表面上只是一个变量名
# 但regr存储了linear_model.LinearRegression()可以调用的所有方法和属性
regr = linear_model.LinearRegression()# Train the model using the training sets
# 通过regr可以直接调用linear_model.LinearRegression()类中的fit()方法
# 此处的fit()方法是在diabetes_X_train, diabetes_y_train之间拟合出线性方程
regr.fit(diabetes_X_train, diabetes_y_train)# Make predictions using the testing set
# 将diabetes_X_test代入fit()方法拟合出的线性方程,获得训练出来的因变量
diabetes_y_pred = regr.predict(diabetes_X_test)# The coefficients
# 此处直接输出线性系数,当因变量只有一个,这个数就是直线斜率
print('Coefficients: \n', regr.coef_)
# The mean squared error
# 输出均方误差
print('Mean squared error: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred))
# The coefficient of determination: 1 is perfect prediction
print('Coefficient of determination: %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))# Plot outputs
# 绘制训练值和预测值的对比图
plt.title('test VS predict')
# 训练值,也就是实测值
plt.scatter(diabetes_X_test, diabetes_y_test, color='green',label='test')
# 预测值
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3,label='predict')
plt.legend()
plt.xticks(())
plt.yticks(())plt.show()

【2.1】引入必要模块

# 引入绘图模块
import matplotlib.pyplot as plt
# 引入计算模块
import numpy as np
# 引入数据集和线性模块
from sklearn import datasets, linear_model
# 计算均方误差和决定系数
from sklearn.metrics import mean_squared_error, r2_score

这里引入模块是对sklearn的基本操作,每次使用不同的数据集和执行不同的操作,需要引入不同的sklearn子模块。

【2.2】数据处理

数据处理部分将数据集划分为因变量和自变量,再进一步细化为训练集和测试集。

# Load the diabetes dataset
# 返回二维矩阵diabetes_X,diabetes_X本质是MXN行的矩阵
# 返回一维数组diabetes_y,diabetes_y实际上没有行向量和列向量的区分
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# Use only one feature
# 两个操作,第一个是微数据增加一个新的维度,通过np.newaxis
# 第二个是只提取原本二维矩阵diabetes_X中的第3个特征
# 假如提取原本二维矩阵diabetes_X中的第3个特征是[12,16,18],它们组成了一维数组
# 添加np.newaxis的作用后,获得新的diabetes_X =[[12],[16],[18]]
diabetes_X = diabetes_X[:, np.newaxis, 2]# Split the data into training/testing sets
# 将diabetes_X 除了最后20个数据之外的部分设置为训练数据集的特征,也就是因变量
diabetes_X_train = diabetes_X[:-20]
# 将diabetes_X 最后20个数据设置为测试数据集
diabetes_X_test = diabetes_X[-20:]# Split the targets into training/testing sets
# 将diabetes_y 除了最后20个数据之外的部分设置为训练数据集的特征,也就是因变量
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]

整个数据处理代码段最核心的目的是实现数据结构划分,适用的最核心代码是return_X_y=True,这一步起到了承上启下的作用,经过这一步数据在结构上分成了自变量组diabetes_X和因变量组diabetes_y,然后取这两组变量的最后20个数据作测试,其余都用于训练。

【2.3】训练和测试

# Create linear regression object
# 此处触及线性回归的本质
# regr表面上只是一个变量名
# 但regr存储了linear_model.LinearRegression()可以调用的所有方法和属性
regr = linear_model.LinearRegression()# Train the model using the training sets
# 通过regr可以直接调用linear_model.LinearRegression()类中的fit()方法
# 此处的fit()方法是在diabetes_X_train, diabetes_y_train之间拟合出线性方程
regr.fit(diabetes_X_train, diabetes_y_train)# Make predictions using the testing set
# 将diabetes_X_test代入fit()方法拟合出的线性方程,获得训练出来的因变量
diabetes_y_pred = regr.predict(diabetes_X_test)# The coefficients
# 此处直接输出线性系数,当因变量只有一个,这个数就是直线斜率
print('Coefficients: \n', regr.coef_)
# The mean squared error
# 输出均方误差
print('Mean squared error: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred))
# The coefficient of determination: 1 is perfect prediction
print('Coefficient of determination: %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))# Plot outputs
# 绘制训练值和预测值的对比图
plt.title('test VS predict')
# 训练值,也就是实测值
plt.scatter(diabetes_X_test, diabetes_y_test, color='green',label='test')
# 预测值
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3,label='predict')
plt.legend()
plt.xticks(())
plt.yticks(())plt.show()

代码运行后的效果为:

【3】总结

通过构造线性回归实例,初步学习了使用scikitlearn/sklearn模块进行数据处理的技巧。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95065.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频学习(五十一):AAC编码器

什么是AAC编码器? 高级音频编码(Advanced Audio Coding,简称AAC) 是一种有损音频压缩技术,旨在作为MP3的下一代标准而开发。它的主要目标是在比MP3更低的比特率下提供更好的音质,同时具备更强的灵活性和功能…

10-netty基础-手写rpc-定义协议头-02

netty系列文章: 01-netty基础-socket02-netty基础-java四种IO模型03-netty基础-多路复用select、poll、epoll04-netty基础-Reactor三种模型05-netty基础-ByteBuf数据结构06-netty基础-编码解码07-netty基础-自定义编解码器08-netty基础-自定义序列化和反序列化09-n…

计算机毕设缺乏创新点?基于大数据的快手平台用户活跃度分析系统给你思路【程序开发+项目定制】

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、项目介绍二…

01.【面试题】在SpringBoot中如何实现多数据源配置

文章目录 1. 什么是多数据源 1.1 基本概念 1.2 传统单数据源 vs 多数据源 单数据源架构 多数据源架构 2. 为什么需要多数据源 2.1 业务场景需求 2.2 技术优势 3. 多数据源的实现方式 3.1 静态多数据源 3.2 动态多数据源 4. 环境准备 4.1 创建SpringBoot项目 pom.xml依赖配置 4.…

redis主从模型与对象模型

redis淘汰策略 首先我们要明确这里说的淘汰策略是淘汰散列表中的key-value,而不是value中的各个数据结构 过期key中 volatile-lru 从设置了过期时间的键中,移除最近最少使用的键(LRU算法)。适合需要优先保留高频访问数据的场景…

快速搭建开源网页编辑器(vue+TinyMCE)

文章目录 Tiny MCE 安装方法 1. 安装node.js 2. 创建vue3项目 3. 安装TinyMCE依赖并使用 (1)在component文件夹创建Editor.vue文件 (2)编辑App.vue文件 (3)运行项目 (4)获取并设置API key (5)设置中文菜单 Tiny MCE 安装方法 1. 安装node.js 下载地址:https://nod…

ADK【4】内置前端调用流程

文章目录说明ADK内置前端ADK内置前端开启流程说明 本文学自赋范社区公开课,仅供学习和交流使用,不用作任何商业用途! ADK内置前端 ADK作为最新一代Agent开发框架,不仅功能特性非常领先,而且还内置了非常多的工具&am…

LLMs之GPT-5:OpenAI 发布更智能、更快速、更有用的 AI 模型—内置思考能力,赋能人人专家级智能—技术突破、性能评估与安全保障全面解读

LLMs之GPT-5:OpenAI 发布更智能、更快速、更有用的 AI 模型—内置思考能力,赋能人人专家级智能—技术突破、性能评估与安全保障全面解读 导读:2025年8月7日,OpenAI 发布了 GPT-5,这是他们目前最智能的 AI 系统。它在编…

Java 中操作 R 的全面指南

Java 中操作 R 的全面指南 引言 Java作为一种广泛使用的编程语言,具有跨平台、高性能、可扩展等特点。随着大数据和机器学习的兴起,Java在处理和分析复杂数据集方面发挥着越来越重要的作用。R语言,作为一种专门用于统计计算和图形展示的语言,同样在数据分析领域有着举足轻…

数据结构——优先级队列(PriorityQueue):一文解决 Top K 问题!

目录 1.优先级队列 2. 堆的概念 3. 堆的存储方式 4. 堆的创建 4.1 向下调整 4.2 堆的创建 4.3 堆的插入 4.4 堆的删除 5.用堆模拟实现优先级队列 6.常用接口的介绍 6.1 PriorityQueue 的特性 6.2 PriorityQueue 的方法 7. Top K问题 1.优先级队列 队列是一种先进先…

C语言自定义类型深度解析:联合体与枚举

在C语言中,自定义类型为数据组织提供了极大的灵活性。除了常用的结构体,联合体(共用体)和枚举也是非常重要的自定义类型。本文将结合实例,详细解析联合体和枚举的特性、用法及实际应用场景。 一、联合体(Un…

Numpy科学计算与数据分析:Numpy数据分析基础之统计函数应用

Numpy统计函数实战:数据的聚合与分析 学习目标 通过本课程的学习,学员将掌握Numpy中用于统计分析的关键函数,如求和(sum)、平均值(mean)、标准差(std)等,能够熟练地在实际数据集中应用这些函数进行数据的聚合与分析。 相关知识…

从引导加载程序到sysfs:Linux设备树的完整解析与驱动绑定机制

摘要本报告旨在为嵌入式Linux开发者详细梳理设备树(Device Tree, DT)在系统启动中的完整解析流程。报告将从引导加载程序(Bootloader)如何准备和传递设备树二进制文件(DTB)开始,逐步深入到内核如…

基于深度学习的污水新冠RNA测序数据分析系统

基于深度学习的污水新冠RNA测序数据分析系统 摘要 本文介绍了一个完整的基于深度学习技术的污水新冠RNA测序数据分析系统,该系统能够从未经处理的污水样本中识别新冠病毒变种、监测病毒动态变化并构建传播网络。我们详细阐述了数据处理流程、深度学习模型架构、训练…

宝塔面板配置Nacos集群

一、环境准备 准备三台及以上的服务器,我这里准备了3台服务器,172.31.5.123~125;分别安装好宝塔面板,软件商店里安装nacos;二、Nacos集群配置 配置数据库连接:​ 进入每台服务器上 Nacos 解压后…

Spring Boot 3.x 全新特性解析

Spring Boot 是企业级 Java 开发中最常用的框架之一。自 Spring Boot 3.x 发布以来,其引入的一系列重大变更与优化,为开发者提供了更现代、更高效的开发体验。本文将重点解析 Spring Boot 3.x 的关键特性及其对项目架构的影响。 一、基于 Jakarta EE 10 …

2025.8.10总结

今天晚上去跑了2公里,跑完还挺爽的,然后花了1.5个小时去公司刷题,没有进行限时练,花了一周的时间才做完这题,共找了20个bug,虽然没有进行限时练,但我仿佛对测试技术掌握得更好了,知道…

qt中实现QListWidget列表

使用最基本的QListWidgetItem来创建列表项,具体使用下面setText、setIcon、addItem这三个方法#include "mainwindow.h" #include "ui_mainwindow.h" #include "QDebug"enum CustomRoles {IdRole Qt::UserRole, // 存储IDPhoneR…

nginx-主配置文件

nginx-主配置文件一、主配置文件nginx.conf内容二、修改配置的文件后的操作三、配置虚拟主机的域名1. 修改nignx.conf配置文件2. 新建域名对应的网页根目录3. 重载nginx配置4. 验证一、主配置文件nginx.conf内容 [rootweb1 conf]# cat nginx.conf#user nobody; # nginx woke…

DBSACN算法的一些应用

以下是 DBSCAN 算法在 Python 中的几个典型应用示例,涵盖了基础使用、参数调优和可视化等方面:import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.datasets import make_moons, make_blobs from skl…