当前位置: 首页 > news >正文

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.dtcms.com/a/325063.html

相关文章:

  • 虚拟机安装ubuntu系统
  • C++多线程服务器
  • MySQL基础知识总结
  • MySQL 序列使用详细说明
  • RAG (Retrieval-Augmented Generation) 原理详解与实例
  • 专题二_滑动窗口_最小覆盖子串
  • 【lucene】BlockDocsEnum 跟BlockImpactsDocsEnum 的区别
  • C++入门学习5
  • Boost.Asio io_service 与 线程 的分析
  • playwright-mcp 项目全解析:从理论到实践
  • 消息队列系统测试报告
  • Effective C++ 条款33:避免遮掩继承而来的名称
  • 企业临时文件分享方案:基于本地加密的轻量级实现
  • Unity3D游戏中如何制作空气墙
  • 动态群签名-DGS:实现抗女巫攻击
  • eBay功能升级:卖家提升流量与转化的新契机
  • 深入解析NumPy广播机制:让不同形状的数组无缝运算
  • 【MySQL——第三章 :MySQL库表操作】
  • Redis 数据类型和单线程模型补充
  • HyDE 在 RAG 知识问答助手中的应用解析
  • CentOS7安装和使用Workbench
  • AtomicStampedReference解决方案
  • 基于python/django框架的车型识别系统
  • 复现论文《基于Retinex理论和深度学习的低照度图像增强算法研究》
  • 问津集 #4:The Five-Minute Rule for the Cloud: Caching in Analytics Systems
  • windows运维
  • SF-CPI-SAP问题收集24:集成地址信息的村里字段无法页面显示问题
  • ECharts 的理解和简单应用笔记
  • 【无标题】消息队列(Message Queue)是一种**进程间通信(IPC)机制
  • 深度学习-卷积神经网络-AlexNet