机器学习/数据分析--通俗语言带你入门线性回归(结合案例)

news2024/12/27 13:56:32
  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

前言

  • 机器学习是深度学习和数据分析的基础,接下来将更新常见的机器学习算法
  • 注意:在打数学建模比赛中,机器学习用的也很多,可以一起学习
  • 欢迎收藏 + 点赞 + 关注

文章目录

  • 1、基础概念简介
    • 1、什么是回归?
    • 2、什么是线性
    • 3、什么是线性回归?
    • 4、西瓜书中回归表达式
  • 2、一元线性回归
    • 1、表达式
    • 2、案例求解
      • 1、导入库
      • 2、数据预处理
      • 3、创建简单的线性回归模型
      • 4、预测结果
      • 5、误差分析
      • 6、模型展示
  • 3、多元线性回归
    • 1、表达式
    • 2、案例求解
      • 1、数据预处理
        • 1、导入数据集
        • 2、数据分析
        • 3、划分测试集和训练集
        • 4、数据标准化
      • 2、模型创建和训练
      • 3、模型预测
      • 4、误差计算
      • 5、结果图示

1、基础概念简介

1、什么是回归?

  • 回归的目的是预测,如我们高中学过的最小二乘回归,通过自变量(X)预测因变量(Y)。
  • 回归之所以能预测,是因为它通过大量的自变量(X)去拟合因变量(Y),寻找他们之间的线性关系。

2、什么是线性

  • 线性关系就是可以用一个线性方程来表示(通过一个或者多个变量来表示另外一个变量)
  • 如图一个最简单的一元线性回归:
  • 在这里插入图片描述

3、什么是线性回归?

一句话概括就是:通两个或者多个变量来预测结果

4、西瓜书中回归表达式

给定由d个属性描述的示例 x = ( x 1 ; x 2 ; … ; x d ) \boldsymbol{x}=(x_1;x_2;\ldots;x_d) x=(x1;x2;;xd) ,其中心是x在第i个属性上的取值,线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数,即

在这里插入图片描述

向量表达式为:

f ( x ) = w T x + b , ‾ \underline{f(\boldsymbol{x})=\boldsymbol{w}^\mathrm{T}\boldsymbol{x}+b ,} f(x)=wTx+b,

线性回归的求解就是解 w \boldsymbol{w} w 和 b参数

2、一元线性回归

1、表达式

f ( x ) = w x + b f(x)=wx+b f(x)=wx+b

  • w w w在高中学习中叫做斜率,b叫做截距,但是,在机器学习中 w w w叫做权重,b叫做偏置
  • 回归问题的求解就是求解 w \boldsymbol{w} w 和 b参数

2、案例求解

以一个成绩预测为例,步骤为:

  1. 导入库和数据
  2. 数据预处理
  3. 创建简单线性回归模型
  4. 预测结果
  5. 误差分析
  6. 模型展示

1、导入库

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

data = pd.read_csv("./studentscores.csv")
data
HoursScores
02.521
15.147
23.227
38.575
43.530
51.520
69.288
75.560
88.381
92.725
107.785
115.962
124.541
133.342
141.117
158.995
162.530
171.924
186.167
197.469
202.730
214.854
223.835
236.976
247.886
259.193
269.293
279.593

2、数据预处理

# 获取数据和数据划分
from sklearn.model_selection import train_test_split

x = data.iloc[:, :1].values   # data.iloc[:, 1] 与 data.iloc[:, :1] 的区别,前者返回一维数组,后者返回二维数组
y = data.iloc[:, 1].values 

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=42)

3、创建简单的线性回归模型

from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(x_train, y_train)  # 模型拟合

4、预测结果

y_pred =  model.predict(x_test)
y_pred

结果:

array([29.72354202, 91.35223136, 83.64864519, 49.94545571, 27.79764548,
       47.0566109 , 22.01995585])

5、误差分析

from sklearn.metrics import mean_squared_error 
mse = mean_squared_error(y_test, y_pred)  # 计算均分误差,回归最常用的评价指标
print(mse)

结果:

19.327533697713523    

结合成绩数据,误差还可以,想要更直观,可以先对数据进行标准化

6、模型展示

from matplotlib import rcParams
# 设置字体为SimHei显示中文
rcParams['font.family'] = 'SimHei'

# 创建画布
plt.figure(figsize=(12, 3))
# 创建子图
plt.subplot(1, 2, 1)
plt.scatter(x_train, y_train, color='red')
plt.plot(x_train, model.predict(x_train), label='训练集拟合', color='blue')
plt.title('训练集拟合')
# 创建子图
plt.subplot(1, 2, 2)
plt.scatter(x_test, y_test, color='red')
plt.plot(x_test, model.predict(x_test), label='测试集拟合', color='blue')
plt.title('测试集拟合')

plt.show()

在这里插入图片描述

3、多元线性回归

1、表达式

在这里插入图片描述

  • 多元线性回归:影响Y的因素不唯一,有多个
  • 一元线性回归:影响Y的因素唯一,只有一个

2、案例求解

鸢尾花数据集,预测花瓣长度

  • 因变量Y:花瓣宽度
  • 自变量X:花萼长度,花萼宽度,花瓣长度

1、数据预处理

1、导入数据集
import numpy as np 
import pandas as pd 

# 网络下载 鸢尾花 数据集合
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
name = ['花萼-length', '花萼-widget', '花瓣-length', '花瓣-widget', 'class']

data = pd.read_csv(url, names=name)
data
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
花萼-length花萼-widget花瓣-length花瓣-widgetclass
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
..................
1456.73.05.22.3Iris-virginica
1466.32.55.01.9Iris-virginica
1476.53.05.22.0Iris-virginica
1486.23.45.42.3Iris-virginica
1495.93.05.11.8Iris-virginica

150 rows × 5 columns

2、数据分析
# 展示 不同 变量 对花瓣宽度的影响长度
import matplotlib.pyplot as plt 

plt.plot(data['花萼-length'], data['花瓣-widget'], 'x', label="marker='x'")
plt.plot(data['花萼-widget'], data['花瓣-widget'], 'o', label="marker='o'")
plt.plot(data['花瓣-length'], data['花瓣-widget'], 'v', label="marker='v'")

plt.legend()
plt.show()


在这里插入图片描述

通过观察发现:没有聚类特征,各变量之间没有什么关系,没有什么规律可言

3、划分测试集和训练集
from sklearn.model_selection import train_test_split

X = data.iloc[:, :2].values
y = data.iloc[:, 3].values

# 训练集:0.8,测试集:0.2
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 
4、数据标准化
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
X_train_scaler = scaler.fit_transform(X_train)
X_test_sacler = scaler.transform(X_test)

2、模型创建和训练

from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X_train_scaler, y_train)

3、模型预测

y_pred = model.predict(X_test_sacler)

4、误差计算

# 采用均方根误差计算
from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_pred, y_test)
print("mse", mse)
mse 0.12290992506217009

5、结果图示

# 展示预测值和真实值分布
plt.scatter(y_test,y_pred, color='red')

plt.xlabel("Prediction")
plt.ylabel("True");

plt.show()


在这里插入图片描述

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

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

相关文章

探索GitLab:从搭建到高效使用的实用指南

企业里为什么喜欢使用GitLab 一、GitLab简介二、搭建GitLab三、GitLab的权限管理3.1、用户注册3.2、创建用户组3.3、为用户组添加用户3.4、为工程添加访问权限 四、GitLab的code review五、团队知识管理六、总结 一、GitLab简介 GitLab是利用 Ruby on Rails 一个开源的版本管理…

Adobe Media Encoder ME 2023-23.6.6.2 解锁版下载安装教程 (专业的视频和音频编码渲染工具)

前言 Adobe Media Encoder(简称Me)是一款专业的音视频格式转码软件,文件格式转换软件。主要用来对音频和视频文件进行编码转换,支持格式非常多,使用系统预设设置,能更好的导出与相关设备兼容的文件。 一、…

网站怎么做敏感词过滤,敏感词过滤的思路和实践

敏感词过滤是一种在网站、应用程序或平台中实现内容审查的技术,用于阻止用户发布包含不适当、非法或不符合政策的内容。我们在实际的网站运营过程中,往往需要担心某些用户发布的内容中包含敏感词汇,这些词汇往往会导致我们的网站被用户举报&a…

JVM的组成

JVM 运行在操作系统之上 java二进制字节码文件的运行环境 JVM的组成部分 java代码在编写完成后编译成字节码文件通过类加载器 来到运行数据区,主要作用是加载字节码到内存 包含 方法区/元空间 堆 程序计数器,虚拟机栈,本地方法栈等等 随后来到执行引擎,主要作用是翻译字…

系统工程与信息系统(上)

系统工程 概念 【系统工程】是一种组织管理技术。 【系统工程】是为了最好的实现系统的目的,对系统的组成要素、组织结构、信息流、控制机构进行分析研究的科学方法。 【系统工程】从整体出发、从系统观念出发,以求【整体最优】 【系统工程】利用计算机…

信息搜集--敏感文件Banner

免责声明:本文仅做分享参考... git安装: Windows10下安装Git_win10安装git好慢-CSDN博客 git目录结构: Git 仓库目录 .git 详解-CSDN博客 敏感目录泄露 1-git泄露 Git是一个开源的分布式版本控制系统,我们简单的理解为Git 是一个*内容寻址文件系统*,也就是说Gi…

二十四、解释器模式

文章目录 1 基本介绍2 案例2.1 Instruction 接口2.2 StartInstruction 类2.3 PrimitiveInstruction 类2.4 RepeatInstruction 类2.5 InstructionList 类2.6 Context 类2.7 Client 类2.8 Client 类的运行结果2.9 总结 3 各角色之间的关系3.1 角色3.1.1 AbstractExpression ( 抽象…

Nexpose漏扫

免责声明:本文仅做分享参考... nexpose官网: Nexpose On-Premise Vulnerability Scanner - Rapid7 Rapid7的Nexpose是一款非常专业的漏洞扫描软件。有community版本和enterprise版本。 其中community版是免费的,但是功能简单;enterprise版本功能强大.…

适用于 Windows 10 的最佳免费数据恢复软件是什么?

有没有适用于 Windows 10 的真正免费的数据恢复软件? 丢失重要数据,无论是由于硬件问题、软件问题、意外删除、格式化还是病毒和恶意软件,确实很麻烦。当你面临数据丢失时,你可能真心希望找到一款免费的数据恢复软件,…

【C++指南】深入剖析:C++中的引用

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言: 一、引用的基本概念 1. 定义与特性 2. 语法与声明 二、引用的进阶用法 1. 函…

Python高手参考手册:迭代器协议详解

在Python中,迭代器协议提供了一种灵活的方式来遍历容器中的元素。本文将详细介绍迭代器协议的基础知识、其实现机制以及一些实用的应用案例。 迭代器协议概述 1.1 迭代器与迭代协议 迭代器协议定义了如何遍历容器中的元素。在Python中,任何实现了迭代…

Android:使用Gson常见问题(包含解决将Long型转化为科学计数法的问题)

一、解决将Long型转化为科学计数法的问题 1.1 场景 将一个对象转为Map类型时,调用Gson.fromJson发现,原来对象中的long类型的personId字段,被解析成了科学计数法,导致请求接口失败,报参数错误。 解决结果图 1.2、Exa…

轻松掌握域名系统(DNS):基础小白的入门指南

文章目录 域名系统概述DNS 的发展和结构DNS 的服务和功能互联网的域名结构域名服务器的类型和功能域名解析的过程DNS资源记录小结 域名系统概述 域名系统(Domain Name System,DNS) 是一种核心服务,它使得网络应用能够在应用层使用…

腾讯地图SDK Android版开发 6 显示覆盖物

腾讯地图SDK Android版开发 6 显示覆盖物 前言地图类中覆盖物的接口覆盖物类Marker示例Polyline示例Polygon示例Arc示例Circle示例移除示例效果图 Marker的更多属性常用属性交互碰撞动画其它属性 折线的更多属性常用属性交互其它属性 多边形的更多属性常用属性交互其它属性 Arc…

【手抖拜拜!特发性震颤患者的专属锻炼秘籍,轻松改善生活品质】

Hey小伙伴们~👋 今天咱们来聊聊一个可能不那么常被提及,但却实实在在影响着很多人生活质量的话题——特发性震颤。如果你或你身边的人正为此困扰,别怕,这篇笔记就是你们的“稳手宝典”📚! 🌈 了…

【论文复现】 | 改善抑郁估计从面部对齐,训练优化和调度

文章目录 1、Introduction2、Related work3、 Proposed methodology3.1. Preprocessing and face alignment3.2 Architecture3.3 Data Augmentation3.4 Training 4、Experimental analysis and results4.1 Datasets4.2 Experimental setup4.3 Protocol and Performance metrice…

JS面试题3

1、使用递归完成1~100的累加 // 1~100累加function addRes(x,y){if(x y){return x}else{return y addRes(x,y-1) // 第一次:3 addRes(1,2) > 往后依次递减,到达目标值位置后依次计算累加值}}console.log(addRes(1,3))// 斐波那契数列(兔子数列) &…

【HTML5+JavaScript+CSS3】3D空间环绕旋转特效(效果+源码+可理解的注释)

失去一个人,只是生命中的一段过程,天空不会永远都下雨,我们总会在最深的绝望里,看见最美的风景。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人…

案例研究|JumpServer堡垒机为金山办公信息安全保驾护航

金山办公(KINGSOFT OFFICE)是中国办公软件的领航者,其产品体系以旗舰产品WPS Office为核心,辅以金山文档、金山协作及金山词霸等产品,形成了全方位、高效能的办公生态系统,在中国乃至全球范围内拥有庞大的用…

项目问题 | CentOS 7停止维护导致yum失效的解决办法

目录 centos停止维护意味着yum相关源伴随失效。 报错: 解决方案:将图中四个文件替换掉/etc/yum.repos.d/目录下同名文件 资源提交在博客头部,博客结尾也提供文件源码内容 CentOS-Base.repo CentOS-SCLo-scl.repo CentOS-SCLo-scl-rh.rep…