003-基于Sklearn的机器学习入门:回归分析(上)

本节及后续章节将介绍机器学习中的几种经典回归算法,所选方法都在Sklearn库中聚类模块有具体实现。本节为上篇,将介绍基础的线性回归方法,包括线性回归、逻辑回归、多项式回归和岭回归等。

2.1 回归分析概述

回归Regression)分析是机器学习领域中最古老、最基础,同时也是最广泛应用的问题之一,应用十分广泛。

简而言之,回归分析旨在建立一个模型,使用这个模型可以用一组特征(自变量)来预测一个连续的结果(因变量)。举一个容易理解的例子,我们可以使用房间的面积、楼层、位置、周边配套等特征来预测该商品房的房价高低,在这个例子中,房价是因变量,且是连续变化的,可以在一定非负区间内取任何实数值,而影响房价的各个因素,成为自变量,自变量可以是各种类型的值,但为了回归分析方便,通常将自变量也转换为数值类型。

2.1.1 回归与分类

回归问题是预测一个连续值的输出(因变量)基于一个或多个输入(自变量或特征)的机器学习任务。换句话说,回归模型尝试找到自变量和因变量之间的内在关系。

回归和分类是两类典型的监督学习问题,两者的主要区别在于输出类型和评价指标不同,如下:

  • 输出类型:回归模型通常用来预测连续值(如价格、温度等),分类模型用来预测离散标签(如0/1)。
  • 评估指标:回归通常使用均方误差(MSE)、R²分数等作为评估指标,而分类则使用准确率、F1分数等。

2.1.2 常见的回归方法

在此主要介绍Sklearn中实现的几类典型的回归方法,

  • 线性回归:线性回归是回归问题中最简单也最常用的一种算法。它的基本思想是通过找到最佳拟合直线来模拟因变量和自变量之间的关系。
  • 多项式回归:与线性回归尝试使用直线拟合数据不同,多项式回归使用多项式方程进行拟合。
  • 支持向量回归:它是支持向量机(SVM)的回归版本,用于解决回归问题。它试图找到一个超平面,以便在给定容忍度内最大程度地减小预测和实际值之间的误差。
  • 决策树回归:它是一种非参数的、基于树结构的回归方法。它通过将特征空间划分为一组简单的区域,并在每个区域内进行预测。

回归算法全解析!一文读懂机器学习中的回归模型-腾讯云开发者社区-腾讯云 (tencent.com)

2.2 线性回归

线性回归,顾名思义,其目标值(对应因变量)可以看作是各个特征值(对应自变量)的线性组合。

线性回归模型的有效性建立在以下关键假设之上:

  • 线性关系:因变量与自变量间存在线性关系。
  • 独立性:观测值之间应相互独立。
  • 无多重共线性:模型中的任何一个自变量都不应该是其他自变量的精确线性组合。
  • 同方差性:对于所有的观测值,误差项的方差应相等。
  • 误差项的正态分布:误差项应呈正态分布。

上述假设确保了线性回归模型能够提供可靠的预测和推断。

下图列出的是与线性回归相关的思维导图。

线性回归知识图​​​

2.2.1 经典线性回归模型

(1)数学模型

经典的线性回归数学模型可用下式描述:

\hat{\mathbf{y}}(\mathbf{w}, \mathbf{x}) = w_0 + w_1 x_1 + ... + w_p x_p

这显然是一条直线方程,其中,\hat{\mathbf{y}}表示预测值,\mathbf{w} = (w_1, ..., w_p)为系数,而w_0为斜率。

这个模型的关键在于找到最适合数据的\mathbf{w}值,使得模型能够准确预测因变量的值。

Sklearn使用LinearRegression函数完成线性模型的拟合。所使用的准则是“最小均方误差”准则,即是使观测数据与预测数据之间的均方误差取得最小值,用数学表达式表示就是:

\min_{\mathbf{w}} ||\mathbf{w} \mathbf{x} - \mathbf{y}||_2^2

(2)数学模型

 在SKlearn中,使用LinearRegression函数实现线性回归问题。

以下是该函数的声明:

看一下LinearRegression函数的声明:

sklearn.linear_model.LinearRegression(*, fit_intercept=True, copy_X=True, n_jobs=None, positive=False)

部分参数说明

  • fit_intercept:是否计算该模型的截距,默认为True。如果使用中心化的数据,可以考虑设置为False,即不计算截距。
  • copy_X:是否对X进行复制,默认为True。如果设为False,在运行过程中新数据会覆盖原数据。
  • n_jobs:处理时设置任务个数,默认值为None。该参数对于目标个数大于1,且足够大规模的问题有加速作用,如果设置为-1,则代表使用所有的CPU。
  • positive:默认为False,如果设为Ture,则将各个系数强制设为正数。

属性值

  • coef_:拟合得到的系数值。如果是单目标问题,返回一个以为数组;如果是多目标问题,返回一个二维数组。
  • rank_:矩阵X的秩,仅X为稠密矩阵时有效。
  • singular_:矩阵X的奇异值,仅X为稠密矩阵时有效。
  • intercept_:截距,线性模型中的独立项,如果fit_intercept设为False,则intercept_值为0。

该函数在使用时,调用了以下函数:

  • fit:用于模型训练
  • get_params:获取估计器的参数值
  • set_params:设置估计器的参数
  • predict:模型预测
  • score:模型评估

(3)实例

本节将介绍如何使用LinearRegression函数实现对线性拟合的一个实例,该实例来自Sklearn官网,详细介绍见代码的注释。

# Code source: Jaques Grobler
# License: BSD 3 clauseimport matplotlib.pyplot as plt
import numpy as npfrom sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score# Load the diabetes dataset
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# Use only one feature
diabetes_X = diabetes_X[:, np.newaxis, 2]# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]# Split the targets into training/testing sets
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]# Create linear regression object
regr = linear_model.LinearRegression()# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)# Make predictions using the testing set
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.scatter(diabetes_X_test, diabetes_y_test, color="black")
plt.plot(diabetes_X_test, diabetes_y_pred, color="blue", linewidth=3)plt.xticks(())
plt.yticks(())plt.show()

输出结果为:

Coefficients: [938.23786125]
Mean squared error: 2548.07
Coefficient of determination: 0.47

下图展示了拟合结果,其中黑色点代表测试数据点,蓝线表示拟合出的直线。

官网给出的实例,有些复杂。下面给出一个简单直观的例子。

sklearn——线性回归与逻辑回归_sklearn线性回归-CSDN博客

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

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

相关文章

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法 0. 引言1. 关于m_track2. 关于m_range_ring3. 关于m_ellipse4. 关于m_windrose5. 结语 0. 引言 本篇介绍下m_map中绘制航迹图函数(m_track)、绘…

python 发布应用程序包

文章目录 发布python包toml配置文件构建发布python包 官方文档参考 将自己的python项目发布成源码包或者wheel二进制包,供其他开发者使用。 方式: 使用py工具; distutils,该工具的使用已过时;setuptools,常用方式;wheel,在setuptools的基础上添加了 bdist_wheel, …

【BUUCTF-PWN】4-ciscn_2019_n_1

参考:BUUCTF-ciscn_2019_n_1 - 纸鸢asahi - 博客园 (cnblogs.com) buuctf 刷题记录_PWN ciscn_2019_n_1 - MuRKuo - 博客园 (cnblogs.com) 从题海中入门(四)ciscn_2019_n_1 - FreeBuf网络安全行业门户 ciscn_2019_n_1 ——两种解法_0x4134800…

Generative Modeling by Estimating Gradients of the Data Distribution

Generative Modeling by Estimating Gradients of the Data Distribution 本文介绍宋飏提出的带噪声扰动的基于得分的生成模型。首先介绍基本的基于得分的生成模型的训练方法(得分匹配)和采样方法(朗之万动力学)。然后基于流形假…

信号量——Linux并发之魂

欢迎来到 破晓的历程的 博客 引言 今天,我们继续学习Linux线程本分,在Linux条件变量中,我们对条件变量的做了详细的说明,今天我们要利用条件变量来引出我们的另一个话题——信号量内容的学习。 1.复习条件变量 在上一期博客中&…

天润融通分析AI技术助力客户服务,实现满意度三倍增长

如今,客户体验越来越成为影响客户决策的核心要素。 对于企业来讲,客户在不同触点的每一次互动体验,都成为塑造品牌声誉的“Aha时刻”。但同时,随着社会的发展的加速,客户的需求也在日新月异,给企业带来挑战…

刷代码随想录有感(125):动态规划——最长公共子序列

题干&#xff1a; 代码&#xff1a; class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>>dp(text1.size() 1, vector<int>(text2.size() 1, 0));for(int i 1; i < text1.size(); i){for(int j …

【SQL】已解决:SQL错误(15048): 数据兼容级别有效值为100、110或120

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决SQL错误(15048): 数据兼容级别有效值为100、110或120 在数据库开发和管理过程中&#xff0c;我们经常会遇到各种各样的错误。本文将详细分析SQL错误(15048)的背景、可能原因、…

langchain框架轻松实现本地RAG

一 什么是RAG? RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合了检索和生成模型的方法&#xff0c;主要用于解决序列到序列的任务&#xff0c;如问答、对话系统、文本摘要等。它的核心思想是通过从大量文档中检索相关信息&#xff0c;然后利用这些信息…

vue3-openlayers 图标闪烁、icon闪烁、marker闪烁

本篇介绍一下使用vue3-openlayers 图标闪烁、icon闪烁、marker闪烁 1 需求 图标闪烁、icon闪烁、marker闪烁 2 分析 图标闪烁、icon闪烁、marker闪烁使用ol-animation-fade组件 3 实现 <template><ol-map:loadTilesWhileAnimating"true":loadTilesWh…

读人工智能全传03分治策略

1. 黄金年代 1.1. 图灵在他发表的论文《计算机器与智能》中介绍了图灵测试&#xff0c;为人工智能学科迈出第一步做出了重大贡献 1.2. 美国在第二次世界大战后几十年里计算机技术发展的特色&#xff0c;也是美国在未来60年内确立人工智能领域国际领先地位的核心 1.3. 1955年…

lodash中flush的使用(debounce、throttle)

在项目的配置中&#xff0c;看到了一个请求&#xff0c;类似是这样的 import { throttle } from lodash-es// 请求函数 async function someFetch(){const {data} await xxx.post()return data }// 节流函数 async function throttleFn(someFetch,1000)// 执行拿到数据函数 a…

leetcode--二叉树中的最长交错路径

leetcode地址&#xff1a;二叉树中的最长交错路径 给你一棵以 root 为根的二叉树&#xff0c;二叉树中的交错路径定义如下&#xff1a; 选择二叉树中 任意 节点和一个方向&#xff08;左或者右&#xff09;。 如果前进方向为右&#xff0c;那么移动到当前节点的的右子节点&…

大数据开发中的数据生命周期管理

上班越久&#xff0c;发现有些数据一直放在那里&#xff0c;根本没有流动&#xff0c;完全没有发挥价值&#xff0c;数据是有生命周期的&#xff0c;而且生命周期管理得好&#xff0c;工作就会更轻松。 目录 引言数据创建示例代码 数据存储示例代码 数据使用示例代码 数据维护示…

JavaScript中闭包的理解

闭包&#xff08;Closure&#xff09;概念&#xff1a;一个函数对周围状态的引用捆绑在一起&#xff0c;内层函数中访问到其外层函数的作用域。简单来说;闭包内层函数引用外层函数的变量&#xff0c;如下图&#xff1a; 外层在使用一个函数包裹住闭包是对变量的保护&#xff0c…

每日Attention学习8——Rectangular self-Calibration Attention

模块出处 [ECCV 24] [link] [code] Context-Guided Spatial Feature Reconstruction for Efficient Semantic Segmentation 模块名称 Rectangular self-Calibration Attention (RCA) 模块作用 空间注意力 模块结构 模块代码 import torch import torch.nn as nn import tor…

C++ | Leetcode C++题解之第216题组合总和III

题目&#xff1a; 题解&#xff1a; class Solution { private:vector<vector<int>> res;void backtracking(int k, int n, vector<int> ans){if(k 0 || n < 0){if(k 0 && n 0){res.emplace_back(ans);}return;}int start (ans.size() 0 ?…

字节一年,人间三年

想来字节做研发&#xff0c;可以先看我这三年的体会和建议。 大家好&#xff0c;我是白露啊。 今天和大家分享一个真实的故事&#xff0c;是关于字节网友分享自己三年的工作经历和感受。 由于白露也曾在字节待过两年&#xff0c;可以说&#xff0c;说的都对。 你有没有想过来…

填报高考志愿,怎样正确地选择大学专业?

大学专业的选择&#xff0c;会关系到未来几年甚至一辈子的发展方向。这也是为什么很多人结束高考之后就开始愁眉苦脸&#xff0c;因为他们不知道应该如何选择大学专业&#xff0c;生怕一个错误的决定会影响自己一生。 毋庸置疑&#xff0c;在面对这种选择的时候&#xff0c;我…

mybatis mapper.xml 比较运算符(大于|小于|等于)的写法: 转义和<![CDATA[]]>

文章目录 引言I 使用xml 原生转义的方式进行转义II 使用 <![CDATA[ 内容 ]]>引言 应用场景:查询时间范围 背景:在 *.xml 中使用常规的 < > = <= >= 会与xml的语法存在冲突 <![CDATA[]]> 比 转义符 来的繁琐 <![CDATA[]]> 表示xml解析器忽略…