[机器学习]--线性回归算法

线性回归算法原理

线性关系在生活中有很多案例:

  • 摄氏度和华氏度的转化: F = C ⋅ 9 5 + 32 F = C \cdot\frac{9}{5}+32 F=C59+32
  • 学科最终成绩的计算: 最终成绩 = 0.3 × \times × 平时成绩 + 0.7 × \times ×期末成绩

线性回归(Linear regression)就是利用回归函数对一个或多个自变量和因变量关系建立类似如上模型的一种分析方式

通用公式:
h ( w ) = w 1 x 1 + w 2 x 2 + . . . + b = w T x + b h(w)=w_1x_1+w_2x_2+...+b=w^Tx+b h(w)=w1x1+w2x2+...+b=wTx+b
其中 w 1 , w 2 , . . . w_1,w_2,... w1,w2,...称为系数
x 1 , x 2 , . . . x_1,x_2,... x1,x2,...是自变量
也可以使用矩阵的形式表示:
h ( w ) = ( b w 1 w 2 . . . ) ⋅ ( 1 x 1 x 2 . . . ) h(w) = \begin{pmatrix}b \\ w_1 \\ w_2 \\...\end{pmatrix} \cdot \begin{pmatrix} 1 \\ x_1 \\ x_2 \\ ...\end{pmatrix} h(w)= bw1w2... 1x1x2...

根据自变量的数量, 可以将线性关系分为单变量线性关系, 多变量线性关系

  • 单变量线性关系

图1

  • 多变量线性关系

图2

当特征值超过两个时, 就无法使用绘图来进行可视化了, 但在数学上任然可以使用矩阵的方式表示

损失函数

损失函数可以告诉我们模型的运行情况, 以便我们更好的改进

如下图, 已知的数据集以红叉显示, 简单建立了一个线性回归模型 f w , b f_{w,b} fw,b
指定其中一点( x ( i ) , y ( i ) x^{(i)}, y^{(i)} x(i),y(i)), 该模型的预测值为 y ^ \hat{y} y^
那么该模型在该点的误差就是 y ^ − y ( i ) \hat{y} - y^{(i)} y^y(i)
假设一个有 m m m个点, 每一个点的误差平方都相加再取平均, 就得到该模型的损失函数
J ( w , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 J(w,b) = \frac{1}{2m}\sum^{m}_{i=1}(\hat{y}^{(i)}-y^{(i)})^2 J(w,b)=2m1i=1m(y^(i)y(i))2
为了后面求导运算的简便, 取平均后再乘以 1 2 \frac{1}{2} 21
图3
通常来说, 损失函数的值越小, 模型的效果是最好的, 那么我们建立线性回归模型, 就需要找到损失函数最小是什么时候, 从而找到对应的 w , b w,b w,b值.

那么如何找损失函数的最小值?
使用梯度下降的方法

梯度下降

梯度下降是最小化任何函数的方法, 不单单只是损失函数

下图是某个模型的损失函数, 假设你站在某一个高点处, 那应该如何找到该函数的最小值?
很简单, 环顾四周, 找到最陡峭的一点, 往那个方向走一小步
到达之后再环顾四周, 找到最陡峭的一点, 往那个方向走一小步
不断重复, 就能抵达某一个局部最低点

再回到你的起始位置, 随机往某个方向偏离一点, 重复上述步骤, 你可能会到达另一个局部最低点
在这里插入图片描述
具体数学步骤也并不困难
w = w − α ∂ ∂ w J ( w , b ) w = w - \alpha\frac{\partial}{\partial w}J(w,b) w=wαwJ(w,b)
b = b − α ∂ ∂ w J ( w , b ) b = b - \alpha\frac{\partial}{\partial w}J(w,b) b=bαwJ(w,b)
这里的 α \alpha α称为学习率, 又称步长
对损失函数 J ( w , b ) J(w,b) J(w,b)求偏导, 找到最陡峭的那一点, 根据学习率更新 w , b w, b w,b, 使得损失函数不断下降, 从而找到局部最小值

下图是梯度下降算法的具体应用, 右上图是 J ( w , b ) J(w,b) J(w,b)的等高线图
起始为蓝色, 根据上面的方法不断更新 w , b w,b w,b, 从而找到损失函数的最小值
图5

注意, 学习率的取值不能太大, 也不能太小
如果取值过大, 就可能一步就超过最小值点, 损失函数反而会找不到最小值
如果取值过小, 找到最小值点的时间会很长, 算法效率很低

那么该如何选择好学习率?

作出迭代次数和损失函数 J ( w ⃗ , b ) J(\vec{w},b) J(w ,b)的图像, 根据梯度下降的方法, 随着迭代次数的增加, 损失函数的值会不断减小最后趋近某一个值, 即达到最低点

因此, 选择不同的学习率 α \alpha α, 作出相关图像, 即可找到合理的学习率
在这里插入图片描述

在更多的情况下, 我们遇到的都是多元线性回归模型
多元和单元的区别, 其实就是因变量数量的不同, 因此需要更多的参数来表示
这就要使用到线性代数的知识了, 使用向量矩阵来表示
J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 J(\vec{w},b) = \frac{1}{2m}\sum^{m}_{i=1}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})^2 J(w ,b)=2m1i=1m(fw ,b(x (i))y(i))2
步骤更单元的一样

线性回归模型的简单应用

1.数据说明

diabetes 是一个关于糖尿病的数据集, 该数据集包括442个病人的生理数据及一年以后的病情发展情况。

age:年龄
sex:性别
bmi(body mass index):身体质量指数,是衡量是否肥胖和标准体重的重要指标,理想BMI(18.5~23.9) = 体重(单位Kg) ÷ 身高的平方 (单位m)
bp(blood pressure):血压(平均血压)
s1,s2,s3,s4,s4,s6:六种血清的化验数据,是血液中各种疾病级数指针的6的属性值。
s1——tc,T细胞(一种白细胞)
s2——ldl,低密度脂蛋白
s3——hdl,高密度脂蛋白
s4——tch,促甲状腺激素
s5——ltg,拉莫三嗪
s6——glu,血糖水平

2.数据预处理

导入相关库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_diabetes
diabetes=load_diabetes()
data = diabetes['data']
target = diabetes['target']
feature_names = diabetes['feature_names']
df = pd.DataFrame(data,columns= feature_names)
df

在这里插入图片描述

3.模型训练

1.训练集和测试集的划分
2.实例化线性回归对象
3.传入数据训练模型
4.查看模型的系数(coef_)和截距(intercept_)

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data,target, test_size=0.2, random_state=22)
estimator = LinearRegression()
estimator.fit(x_train,y_train)estimator.intercept_
estimator.coef_

在这里插入图片描述

4.模型评估

1.查看模型准确率:

y_pred = estimator.predict(x_test)
estimator.score(x_test,y_test)

在这里插入图片描述

2.均方误差mean_absolute_error
计算公式: n n n是样本总数, y ^ i \hat{y}_i y^i是预测值, y i y_i yi是实际值
M S E = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 MSE = \frac{1}{n}\sum^{n}_{i=1}(\hat{y}_i-y_i)^2 MSE=n1i=1n(y^iyi)2

# metrics  评估
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_pred)

在这里插入图片描述

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

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

相关文章

Qt中英文支持

目的 就是想让QT编的软件支持中英文。 情况 1、首先配置项目的pro文件: 这样就会生成相应的翻译配置文件,当前是: translate1_cn.ts:中文的配置文件,因为一般默认就是中文,所以一般中文的翻译文件是不需…

小程序商城被盗刷,使用SCDN安全加速有用吗?

在电子商务蓬勃发展的今天,小程序商城因其便捷性和灵活性成为商家和消费者的新宠。然而,随着其普及,小程序商城的安全问题也日益凸显,尤其是盗刷现象频发,给商家和用户带来了巨大损失。面对这一挑战,是否可…

虚拟机安装centos7-桥接模式

1、打开虚拟机,点击文件,选择新建虚拟机 2、选择典型,点击下一步 3、选择稍后安装操作系统,点击下一步 4、选择系统类型及版本,点击下一步,因centos7是Linux操作系统,且是64位的,所以…

主存编址例题

知识点 存储单元个数最大地址-最小地址1 存储单元个数BFFFFH-80000H13FFFFH140000H 这是个十六进制,转换为十进制4*16^44*2^4^44*2^164*2^6*2^10字节 1kb1024字节2^10字节 因此可以转换为4*2^6kb256kb 1byte8bit,1个字节8比特 16k*4bit16*1024*0.5…

高性能web服务器

目录 一、简介 (一)nginx-高性能的web服务端 (二)用户访问体验 二、I/O模型 (一)概念 (二)网络I/O模型 (三)阻塞型 I/O 模型 (四&#xf…

数据库MySQL之事务、索引

目录 1.概述 2.事务 3.索引 3.1索引结构 3.2操作语法 1.概述 场景:假如我们需要解散教学部,那么该部门下的所有员工都需要删除。如果教学部成功删除了,但员工出于某些原因(比如SQL语句写错了等)并没有删除,此时就会出现数据…

Unity Dots学习 (一)

先学习怎么使用,再研究底层代码。Dots大家都有所耳闻。一直没时间研究,最近研究一下 看上图可知,哪怕是CPU的第三级缓存也比内存要快2-5倍。 资料: 《DOTS之路》第零节——前导课(1)——DOTS的5W1H问题_哔哩哔哩_bilibili 《DOT…

保姆级-C#与Halcon的窗体界面展示阈值分割图像教程(机器视觉保姆级教程)

经历上一篇《零基础小白实现C#调用halcon dll的过程,并测试程序证明C#halcon联合开发成功》的发布已经过去三天啦, 零基础小白实现C#调用halcon dll的过程,并测试程序证明C#halcon联合开发成功-CSDN博客 在友友的催更下,我将用我…

人脸识别设计

总体思路 人脸识别使用的算法思路为:首先,定位一张图像中所有的人脸位置;其次,对于同一张脸,当光线改变或者朝向方位改变时,算法还能判断是同一张脸;然后找到每一张脸不同于其他脸的独特之处&a…

【秋招笔试】8.18大疆秋招(第一套)-后端岗

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

Linux安装redis和使用redisDesktop连接

目录 Linux安装redis及启动 第一步:下载redis压缩包 第二步:下载gcc-c 第三步:解压redis文件 第四步:进入redis-4.0.0.0目录执行make命令 第五步:安装redis到redis目录 第五步:复制redis.conf配置文件…

std::wcout,std::cout控制台输出中文乱码,std::cerr字符串的字符无效

系列文章目录 文章目录 系列文章目录前言一、中文乱码原因二、解决方法1.如果是windos11下,使用英文语言,需要加以下代码2.如果是中文语言只需要一行关键代码3.如果在异常处理中显示宽字符中文4.完整代码如下:实现文件测试代码输出打印 前言 …

Java异常捕获与处理:深入理解与实践

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

SAM 2——视频和图像实时实例分割的全新开源模型

引言 源码地址:https://github.com/facebookresearch/segment-anything-2 过去几年,人工智能领域在文本处理的基础人工智能方面取得了显著进步,这些进步改变了从客户服务到法律分析等各个行业。然而,在图像处理方面,我…

高考志愿智能推荐系统-计算机毕设Java|springboot实战项目

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

数据采集监控平台内置SPC系统 提供统计控制功能

数据采集监控平台为了能多方位的为工作人员提供可视化界面,而不仅仅是采集显示这种单一功能,内置多种配置,而SPC系统就是提供统计控制功能的一个重要系统。 数据采集监控平台内置的统计过程控制(Statistical Process Control, SPC…

Python3 运算符,数据类型,基本方法,学习

注意:部分代码直接复制菜鸟教程,在本地编辑器里运行 运算符 算术运算符 #!/usr/bin/python3a 21 b 10 c 0c a b print ("1 - c 的值为:", c)c a - b print ("2 - c 的值为:", c)c a * b print (&quo…

【电子数据取证】AES解密侵犯隐私案件数据

关键词:电子数据取证、手机取证、计算机取证 一、前言 在大数据时代,数据安全和隐私保护的重要性愈发显著。近期,我们遇到一起侵犯公民隐私的案件,其复杂性与敏感性要求我们采取更为精细和专业的技术手段。在还原涉案数据库至本地…

【JAVA入门】Day24 - 排序算法

【JAVA入门】Day24 - 排序算法 文章目录 【JAVA入门】Day24 - 排序算法一、冒泡排序二、选择排序三、插入排序四、快速排序4.1 递归4.2 快速排序 排序,是把混乱的数据排成从小到大或从大到小。 排序一共有十种左右,它们是:冒泡排序、…

Ciallo~(∠・ω・ )⌒☆第二十二篇 入门request请求库使用

请求库是用于发送HTTP请求的工具。常见的请求库有requests,它是一个功能强大且易于使用的HTTP库。 使用requests库发送GET请求: import requests url "https://httpbin.org/get"# 携带get请求参数 params {"pn": 10,"size&q…