机器学习1——手把手教你用Python跑一个线性回归模型

news2024/11/24 3:59:05

目录

一、前期准备

1.Scikit-learn

2.matplotlib 

二、机器学习过程

三、代码框架

四、完整代码

1.导入所需库

2.准备训练数据

3.喂入训练数据

4.结果预测 

5.输出模型中的w与b值 

6.可视化 

7.传入不规则数据


 

一、前期准备

在机器学习中我们使用Python居多,这里就不写Python的安装步骤了。这里主要讲跑机器学习需要用到的库。

1.Scikit-learn

这是一个机器学习库之一,是基于 Python 语言实现的机器学习算法库,它包含了常用的机器学习算法,比如回归、分类、聚类、支持向量机、随机森林等等。同时,它使用 NumPy 库进行高效的科学计算,比如线性代数、矩阵等等。

在Windows搜索栏搜索“cmd”进入命令指示栏窗口,在其中输入如下代码:

pip install scikit-learn

敲击回车就可以看到cmd在自动下载内容。

2.matplotlib 

matplotlib是可视化绘图工具包,与上述一致,在cmd中输入

pip install matplotlib 

并敲击回车,等待下载完成。

二、机器学习过程

“回归模型”其实就是指通过一个给定的数据集来预测值的模型,比较类似于初中时的给几对(x,y)数据求函数表达式,并依据表达式预测出剩余x所对应的y。

例如:这里有(1,3)、(2,5)两个点,要求(3,?)的问号值。这个题给初中生甚至小学生都会做,但我们还是需要捋清楚我们的解题步骤:

第一步,设定函数。在做此题时我们会先设一个函数y=kx+b。这个过程在机器学习中被称为假设函数。

第二步,解出k、b的值。在设好函数后,我们会将已知的两个数据(1,3)、(2,5)代入方程中,通过消元法解出k、b的值。在机器学习中,(1,3)、(2,5)这两个点称为数据集,将处理好的数据集喂给模型,模型就能自动解出k、b。解决线性回归问题的关键就在于求出这些值。

第三步,将(3,?)代入解出的函数中,求出?的值。

没错,实际上机器学习的回归模型就是一个不停解出系数的过程。只不过在实际应用中,我们需要的自变量不只x一个,而是有很多个,所以真正的假设函数长这个样子:

 y=\omega _{1}x_{1}+\omega _{2}x_{2}+......+\omega _{i}x_{i}+b

这里,我们的自变量将不只一个,而是有很多个,自变量前面的字母也不是k,而是\omega,它的含义是权值,权值系数越大,那么这一项属性值对最终结果的影响就越大。

而且,问号的值也不会是确定的,而是需要根据结果不断调整参数,达到预测的目的。

三、代码框架

使用Scikit-learn(以下简称sklearn)实现线性回归算法主要分为三步: 

1.从库中导入线性回归算法:

from sklearn import linear_model

2.使用fit()喂入数据,训练模型:

model = linear_model.LinearRegression()

model.fit(x, y)

3.对训练好的模型进行预测,调用predict()输出预测结果,“x_”为预测数据:

model.predict(x_)

没错,它就像看起来那样简单。

四、完整代码

import  matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model

x = np.linspace(3,6.4)

y = 3 * x + 2

x=[[i] for i in x]
y=[[i] for i in y]
model=linear_model.LinearRegression()
model.fit(x,y)
x_=[[4],[5],[6]]
y_=model.predict(x_)
print(y_)

print("w值为:",model.coef_)
print("b截距值为:",model.intercept_)

plt.scatter(x,y)
plt.plot(x_,y_,color="red",linewidth=3.0,linestyle="-")
plt.legend(["func","Data"],loc=0)
plt.show()

运行结果:

输出:

 详细讲解如下:

1.导入所需库

这个没什么好讲的,就是把库导入进来:

import  matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model

2.准备训练数据

x = np.linspace(3,6.4)

y = 3 * x + 2

这里,linspace()函数是numpy库里的生成等间隔数字序列的函数,函数原型如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 

这个函数最少需要传入两个函数,“start”是序列的起始值,“stop”是序列结束值,如果后面的“endpoint”参数为True,则将结束值包含在序列中,否则不包含。“num”是生成的样本数,默认是50。“endpoint”就是是否包含序列结束值的意思。“retstep”为是否返回样本之间的步长,默认是False。“dtype”是输出数组的数据类型,如果没有就从其他输入参数判断。

之后,我们使用了一个一次函数来计算y列表的值。这样,我们的x和y都有了。

3.喂入训练数据

x=[[i] for i in x]
y=[[i] for i in y]
model=linear_model.LinearRegression()
model.fit(x,y)

 由于fit需要传入二维矩阵数据,因此需要处理x,y的数据格式,将每个样本信息单独作为矩阵的一行。前两行代码相当于把[1,2,3]的数据转化为:[[1],[2],[3]]。之后我们调用线性回归模型,使用fit()函数喂入训练数据。fit函数原型长这样:

model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))

其中,“x_train”代表训练数据的输入特征,“y_train”代表输入数据的目标值,与前一个“x_train”对应。“batch_size”代表每次训练所使用的样本量。“epochs”代表训练的轮数,每一轮表示模型在整个训练数据集上进行一次完整的遍历。“validation_data”代表在训练过程中提供验证数据,模型在每个 epoch 结束后会在验证数据上进行评估,以监控模型的性能。

这里,我们只传入了训练数据,其他全部默认。

4.结果预测 

x_=[[4],[5],[6]]
y_=model.predict(x_)
print(y_)

这里,我们又定义了一个“x_”的待预测数据,让“y_”等于经过模型预测的目标值,并将其打印。

5.输出模型中的w与b值 

要判断机器做对题没有,需要将它计算出的w与b值打印才能判断:

print("w值为:",model.coef_)
print("b截距值为:",model.intercept_)

6.可视化 

plt.scatter(x,y)
plt.plot(x_,y_,color="red",linewidth=3.0,linestyle="-")
plt.legend(["func","Data"],loc=0)
plt.show()

这里,我们使用matplotlib包,将训练数据与预测出的函数都显示出来。

这样,我们就完成了一次机器学习,并且预测结果和我们想象中的接近。

但需要注意的是,很多时候传入的训练数据并不会像这样规矩,所以接下来我们需要让训练数据稍微变动一下。

7.传入不规则数据

只需要在准备训练数据时多加一行,让x的值有一个上下浮动的范围即可: 

x = np.linspace(3,6.4)

y = 3 * x + 2 

x = x + np.random.rand(50)

 

 

可以看到,我们的模型依然很好的完成了任务。 

那么,具体模型是怎么做到的,我们下回分解(其实我也不会)。

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

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

相关文章

基于OMS构建OceanBase容灾双活架构的实践

在实际生产环境中,对于关键业务,往往会有容灾双活的需求。除了OceanBase提供的主备库能力,通过官方工具OMS也可以实现容灾双活架构。目前,通过OMS实现的双活架构仅支持OceanBase数据库之间的数据同步。 要通过OMS实现双活架构&am…

使用Node-API进行线程安全开发

一、Node-API线程安全机制概述 Node-API线程安全开发主要用于异步多线程之间共享和调用场景中使用,以避免出现竞争条件或死锁。 1、适用场景 异步计算:如果需要进行耗时的计算或IO操作,可以创建一个线程安全函数,将计算或IO操作放…

C#程序 Debugger,Release都没问题,但是,打包安装后:System.FormatException: 输入字符串的格式不正确

前言: 这是个问题解决,我们先谈问题: 这个问题不会再本地的调试机器上出现,但是,出现在你部署,或者说安装到其他的机器(通过VS构建安装项目来做) C#程序 Debugger,Relea…

javascript的模块化

1. 无模块化 script标签引入js文件&#xff0c;相互罗列&#xff0c;但是被依赖的放在前面&#xff0c;否则使用就会报错。如下&#xff1a; <script src"jquery.js"></script><script src"jquery_scroller.js"></script><scr…

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本&#xff0c;有图有真相&#xff1a; 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动&#xff1a;zram&#xff0c;我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑&#xff0c;完整梳理完这个逻辑将对Linux块设备驱…

.NET 一款用于解密web.config配置的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前&#xff0c;不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础&#xff0c;因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示&#xff0c;很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间…

蓝桥杯嵌入式国三备赛经验分享

1 学习STM32入门视频 向大家推荐一套宝藏级别的视频&#xff1a;【STM32入门教程-2023版 细致讲解 中文字幕】 如果已经比过蓝桥杯单片机或学习过单片机相关课程的同学&#xff0c;你们可以尝试不需要STM32套件进行学习。如果没有学过单片机相关课程的同学&#xff0c;可以买…

直击智博会,supOS加快发展新质生产力,赋能全球工厂数字化转型

9月6日&#xff0c;第十四届智慧城市与智能经济博览会&#xff08;以下简称智博会&#xff09;开幕主题活动在宁波举办。本届智博会着重围绕“数字赋能新型工业化”主题&#xff0c;设置开幕活动、展览展示和前瞻研讨、产数合作、赛事赋能、开放活动等4大板块活动&#xff0c;旨…

全球AI产品Top100排行榜

Web Top50的榜单里&#xff0c;AIGC类型的应用占比52%&#xff0c;遥遥领先。AIGC类型包括图像、视频、音乐、语音等的内容生成和编辑。音乐生成应用Suno在过去六个月中的排名跃升最为显著&#xff0c;从第36位上升至第5位。排名第二大类是通用对话/AI聊天/角色扮演类型的应用&…

银河麒麟系统开机自动进入指定账户(如:root)桌面

目录 1. 需求的提出 2. 机器环境说明 3. 解决方法 4. 附加说明 1. 需求的提出 编写好的软件在客户的装有银河麒麟操作系统的机器上运行&#xff0c;但有些操作必须用root权限才能操作&#xff0c;如&#xff1a;打开串口。Linux下的普通账户打开串口时提示权限不足。在普通…

【HarmonyOS NEXT】实现截图功能

【HarmonyOS NEXT】实现截图功能 【需求】 实现&#xff1a;实现点击截图按钮&#xff0c;实现对页面/组件的截图 【步骤】 编写页面UI Entry Component struct Screenshot {BuildergetSnapContent() {Column() {Image().width(100%).objectFit(ImageFit.Auto).borderRadi…

C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目

文章目录 1. 清华镜像源下载2. 安装3. 开始菜单上的 QT 工具4. 打开 Qt Creator5. 简单的 GUI C 项目5.1 打开 Qt Creator 并创建新项目5.2 设计界面5.3 添加按钮的点击事件5.4 编译并运行项目 6. 信号和槽&#xff08;Signals and Slots&#xff09; 这里用到了C类与对象的很多…

网络协议详解

目录 1.认识网络协议 2网络协议的设计 2.1网络通信的问题 2.2网络协议的分层设计 软件分层与网络分层 3.OSI七层网络模型 各层次的介绍如下 4.TCP/IP 五层协议 各层次说明 各层次所解决的问题 5.网络和操作系统之间的关系 单主机下 多主机下 6.重新理解网络协议 …

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数 一、环境说明二、页面之间相互传参 一、环境说明 DevEco Studio 版本&#xff1a; API版本&#xff1a;以12为主 二、页面之间相互传参 说明&#xff1a; 页面间的导航可以通过页面路由router模块来实现。页面路由模块根据页…

kubernetes微服务基础及类型

目录 1 什么是微服务 2 微服务的类型 3 ipvs模式 ipvs模式配置方式 4 微服务类型详解 4.1 ClusterIP 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 metalLB配合loadbalance实现发布IP 1 什么是微服务 用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&…

JavaWeb——JavaScript(3/4)-JS对象:BOM、DOM(Window、Location,概念、标准模型、获取元素对象)

目录 BOM 介绍 Window 案例(1) Location DOM 概念 标准模型 获取元素对象 案例(2) 原始代码 完整代码 JS对象 BOM 介绍 概念&#xff1a;Browser Object Model 浏览器对象模型&#xff0c;允许JavaScript与浏览器对话&#xff0c;JavaScript 将浏览器的各个组成部…

git 提交自动带上storyid

公司里的运维团队的产品经理&#xff0c;那老六提出说要在每个提交带上的jira storyid或者bugid&#xff0c;不用他自己弄不顾他人麻烦&#xff0c;真想问候他的xx。不过既然已经成为定局&#xff0c;还是想想有没有其他办法。经一番调研&#xff0c;网上有比较零碎的信息&…

攻防世界--->地穴

前言&#xff1a;学习笔记。 下载 解压 查壳。 64位ida打开。 进入主函数。 很容易得知&#xff0c;这是一个RC4加密。 【 &#xff08;题外话&#xff09; 在reverse中&#xff0c;RC4考点&#xff0c;不会很难。 reverse中RC4关键点就是&#xff0c;抓住异或。 一般解这种…

Open a folder or workspace... (File -> Open Folder)

问题&#xff1a;vscode Open with Live Server 时 显示Open a folder or workspace... (File -> Open Folder)报错 解决&#xff1a;不可以单独打开文件1.html ; 需要在文件夹里打开 像这样