第2篇 机器学习基础 —(3)机器学习库之Scikit-Learn
前言:Hello大家好,我是小哥谈。Scikit-Learn(简称Sklearn)是Python 的第三方模块,它是机器学习领域当中知名的Python 模块之一,它对常用的机器学习算法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)和聚类(Clustering)四大机器学习算法。本节课就简单介绍下Scikit-Learn的基本概念、应用场景、安装方法和应用案例!~🌈
前期回顾:
第2篇 机器学习基础 —(1)机器学习概念和方式
第2篇 机器学习基础 —(2)分类和回归
目录
🚀1.基本概念
🚀2.安装方法
🚀3.应用场景
🚀4.最小二乘法回归
🚀5.支持向量机
🚀1.基本概念
Scikit-Learn是一个Python机器学习库,它提供了各种各样的机器学习算法和工具,包括分类、回归、聚类、降维等等。它是一个非常流行的机器学习库,因为它易于使用、功能强大、文档齐全,并且有一个庞大的社区支持。Scikit-Learn还提供了许多实用工具,如数据预处理、特征提取和模型评估等,这些工具可以帮助你更好地理解和分析数据。
Scikit-Learn的发展始于2007年,由David Cournapeau在Google Summer of Code项目中启动。项目后续得到了许多开发者的贡献,包括INRIA(法国国家信息与自动化研究所),Waikato大学和其他机构。Scikit-Learn的发展历程中,不断地增加新的功能和算法,提高了性能和稳定性,成为了机器学习领域中最受欢迎的库之一。
Scikit-Learn 具有以下特点:
- 简单高效的数据挖掘和数据分析工具。
- 让每个人能够在复杂环境中重复使用。
- Scikit-Learn是Scipy模块的扩展,是建立在NumPy 和Matplotlib模块的基础上。利用这几大模块的优势,可以大大提高机器学习的效率。
- 开源,采用BSD 协议,可用于商业。
Scikit-Learn的版本迭代情况:
- Scikit-Learn 0.1 - 2007年发布的第一个版本。
- Scikit-Learn 0.2 - 2008年发布,增加了更多的分类和聚类算法。
- Scikit-Learn 0.3 - 2009年发布,增加了更多的特征选择和数据预处理工具。
- Scikit-Learn 0.4 - 2010年发布,增加了更多的回归算法和交叉验证工具。
- Scikit-Learn 0.5 - 2011年发布,增加了更多的聚类算法和特征选择工具。
- Scikit-Learn 0.6 - 2012年发布,增加了更多的分类算法和特征选择工具。
- Scikit-Learn 0.7 - 2013年发布,增加了更多的回归算法和特征选择工具。
- Scikit-Learn 0.8 - 2014年发布,增加了更多的聚类算法和特征选择工具。
- Scikit-Learn 0.9 - 2015年发布,增加了更多的分类算法和特征选择工具。
- Scikit-Learn 0.10 - 2016年发布,增加了更多的回归算法和特征选择工具。
- Scikit-Learn 0.11 - 2017年发布,增加了更多的聚类算法和特征选择工具。
- Scikit-Learn 0.12 - 2018年发布,增加了更多的分类算法和特征选择工具。
- Scikit-Learn 0.13 - 2019年发布,增加了更多的回归算法和特征选择工具。
- Scikit-Learn 0.22 - 2019年发布,增加了更多的特征选择和数据预处理工具,以及更好的模型选择和评估工具。
- Scikit-Learn 0.23 - 2020年发布,增加了更多的特征选择和数据预处理工具,以及更好的模型选择和评估工具,还增加了对Python 3.8的支持。
🚀2.安装方法
Scikit-Learn 的安装要求如下:
- Python版本:高于2.7。
- NumPy 版本:高于1.8.2。
- SciPy:高于0.13.3。
如果已经安装了NumPy 和Scipy,那么安装Scikit-Learn 最简单的方法是使用pip 工具安装,命令如下:
pip install -U scikit-learn
或者使用conda,命令如下:
conda install scikit-learn
还可以在PyCharm开发环境中安装。运行PyCharm,选择File → Settings 菜单项,打开“Settings”窗口,选择“Project Interpreter”选项,然后单击添加(+)按钮,打开“Available Packages”窗口,在搜索文本框中输入需要添加的模块名称,例如“scikit-learn”,然后在列表中选择需要安装的模块。
注意:尽量选择安装0.21.2 版本,否则运行程序时可能会出现因为模块版本不适合而导致程序出现错误提示“找不到指定的模块”。
🚀3.应用场景
Scikit-Learn是一个广泛使用的Python机器学习库,它提供了许多用于分类、回归、聚类、数据降维、模型选择和数据预处理等任务的工具和算法。因此,Scikit-Learn的应用场景非常广泛,包括但不限于以下几个方面:
- 金融领域:用于信用评估、欺诈检测、股票预测等。
- 医疗领域:用于疾病诊断、药物研发、基因分析等。
- 自然语言处理:用于文本分类、情感分析、机器翻译等。
- 图像处理:用于图像分类、目标检测、人脸识别等。
- 工业制造:用于质量控制、故障诊断、预测维护等。
- 推荐系统:用于个性化推荐、广告投放等。
等等......🍉 🍓 🍑 🍈 🍌 🍐
根据以上所述,对于Scikit-Learn的应用,主要基于以下六个方面:
(1)分类
解释:标识对象所属的类别
举例:垃圾邮件检测,图像识别等
(2)回归
解释:预测与对象关联的连续值属性
举例:药物反应,股票价格等
(3)聚类
解释:自动将相似对象归为一组
举例:客户细分,分组实验成果等
(4)降维
解释:减少要考虑的随机变量的数量
举例:可视化,提高效率等
(5)模型选择
解释:比较,验证和选择参数和模型。
举例:通过参数调整改进精度
(6)预处理
解释:特征提取和归一化
举例:转换输入数据,例如文本,以供机器学习算法使用等。
🚀4.最小二乘法回归
首先了解一下线性回归分析。线性回归是利用数理统计中的回归分析,来确定两种或两种以上变量间,相互依赖的定量关系的一种统计分析与预测的方法,应用十分广泛。在线性回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果线性回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。在Python中,无需理会烦琐的线性回归求解数学过程,直接使用Scikit-Learn中的linear_model模块就可以实现线性回归分析。linear_model 模块中提供了很多线性模型,包括最小二乘法回归、岭回归、Lasso、贝叶斯回归等。本节课主要介绍最小二乘法回归。
首先导入linear_model 模块,程序代码如下:
from sklearn import linear_model
导入linear_model 模块后,在程序中就可以使用相关函数实现线性回归分析。
线性回归是数据挖掘中的基础算法之一,线性回归的思想其实就是解一组方程,得到回归系数。不过在出现误差项之后,方程的解法就存在了改变,一般使用最小二乘法进行计算,所谓“二乘”就是平方的意思,最小二乘法也称为最小平方和,其目的是通过最小化误差的平方和,使得预测值与真值无限接近。linear_model 模块中的LinearRegression 函数用于实现最小二乘法回归。LinearRegression 函数拟合一个带有回归系数的线性模型,使得真实数据和预测数据(估计值)之间的残差平方和最小,与真实数据无限接近。
LinearRegression 函数的语法如下:
linear_model.LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=None)
参数说明:
fit_intercept:布尔型值,是否需要计算截距,默认值为True。
normalize:布尔型值,是否需要标准化,默认值为False,和参数fit_intercept有关。当fit_intercept参数值为False时,将忽略该参数;当fit_intercept 参数值为True 时,则回归前,对回归量X进行归一化处理,取均值相减,再除以L2 范数(L2 范数是指向量各元素的平方和,然后开方)。
copy_X :布尔型值,选择是否复制X 数据,默认值True,如果为False,则覆盖X 数据。
n_jobs:整型,代表CPU 工作效率的核数,默认值1,-1 表示跟CPU 的核数一致。
主要属性:
coef_:数组或形状,表示线性回归分析的回归系数。
intercept_:数组,表示截距。
主要方法:
fit(X,y,sample_weight=None):拟合线性模型。
predict(X):使用线性模型返回预测数据。
score(X,y,sample_weight=None):返回预测的确定系数R^2。LinearRegression 函数调用fit 方法来拟合数组X、y,并且将线性模型的回归系数存储在其成员变量的coef_ 属性中。
案例:快速预测房价
实现智能预测房价,假设某地的房屋面积和价格关系如下表所示,下面使用LinearRegression 函数预测面积为170 平方米的房屋的单价。
面积 | 价格 |
56 | 7800 |
104 | 9000 |
156 | 9200 |
200 | 10000 |
250 | 11000 |
300 | 12000 |
代码:
from sklearn import linear_model
import numpy as npx=np.array([[1,56],[2,104],[3,156],[4,200],[5,250],[6,300]])
y=np.array([7800,9000,9200,10000,11000,12000])
clf = linear_model.LinearRegression()
clf.fit (x,y) #拟合线性模型
k=clf.coef_ #回归系数
b=clf.intercept_ #截距
x0=np.array([[7,170]])#通过给定的x0预测y0,y0=截距+X值*回归系数
y0=clf.predict(x0) #预测值
print('回归系数:',k)
print('截距:',b)
print('预测值:',y0)
运行程序,输出结果:
回归系数: [1853.37423313 -21.7791411 ]
截距: 7215.950920245397
预测值: [16487.11656442]
🚀5.支持向量机
支持向量机(SVMs)可用于监督学习算法,主要包括分类、回归和异常检测。支持向量分类的方法可以被扩展用作解决回归问题,这个方法被称作支持向量回归。本节介绍支持向量回归函数――LinearSVR函数。LinearSVR 函数是一个支持向量回归的函数,支持向量回归,不仅适用于线性模型,还可以用于对数据和特征之间的非线性关系。避免多重共线性问题,从而提高泛化性能,解决高维问题,语法如下:
sklearn.svm.LinearSVR(epsilon = 0.0,tol = 0.0001,C = 1.0,loss ='epsilon_insensitive',fit_intercept = True,intercept_scaling = 1.0,dual = True,verbose = 0,random_state =None,max_iter = 1000 )
参数说明:
epsilon:float类型值,默认值为0.1。
tol:float类型值,终止迭代的标准值,默认值为0.0001。
C:float类型值,罚项参数,该参数越大,使用的正则化越少,默认值为1.0。
loss :string类型值,损失函数,该参数有两种选项:
epsilon_insensitive:损失函数为L (标准SVR)。
squared_epsilon_insensitive:损失函数为L ,默认值为epsilon_insensitive。
fit_intercept:boolean 类型值,是否计算此模型的截距。如果设置为False,则不会在计算中使用截距(即数据预计已经居中)。默认值为True。
intercept_scaling:float 类型值,当fit_intercept 为True 时,实例向量x 变为[x,self.intercept_scaling]。此时相当于添加了一个特征,该特征将对所有实例都显示为常数值。此时截距变成intercept_scaling特征的权重w 。此时该特征值也参与了罚项的计算。
dual:boolean 类型值,选择算法以解决对偶或原始优化问题。设置为True 时将解决对偶问题,设置为False 时解决原始问题,默认值为True。
verbose:int类型值,是否开启verbose输出,默认值为True。
random_state:int 类型值,随机数生成器的种子,用于在混洗数据时使用。如果是整数,则是随机数生成器使用的种子;如果是RandomState 实例,则是随机数生成器。
max_iter:int类型值,要运行的最大迭代次数。默认值为1000。
coef_:赋予特征的权重,返回array数据类型。
intercept_0:决策函数中的常量,返回array数据类型。
案例:预测“波士顿”的房价
通过Scikit-Learn 自带的数据集“波士顿房价”,实现房价预测,程序代码如下:
代码:
from sklearn.svm import LinearSVR #导入线性回归类
from sklearn.datasets import load_boston #导入加载波士顿的数据集
from pandas import DataFrame #导入DataFrameboston = load_boston() #创建加载波士顿的数据对象#将波士顿的房价数据创建为DataFrame对象
df = DataFrame(boston.data, columns=boston.feature_names)
df.insert(0,'target',boston.target) #将价格添加至DataFrame对象中
data_mean = df.mean() #获取平均值
data_std = df.std() #获取标准偏差
data_train = (df - data_mean) / data_std #数据标准化
x_train = data_train[boston.feature_names].values #特征数据
y_train = data_train['target'].values #目标数据
linearsvr = LinearSVR(C=0.1) #创建LinearSVR对象
linearsvr.fit(x_train, y_train) #训练模型#预测,并还原结果
x = ((df[boston.feature_names] - data_mean[boston.feature_names]) / data_std[boston.feature_names]).values#添加预测房价的信息列
df[u'y_pred'] = linearsvr.predict(x) * data_std['target'] + data_mean['target']
print(df[['target', 'y_pred']].head()) #输出真实价格与预测价格
运行程序,输出结果:
target y_pred
0 24.0 28.412710
1 21.6 23.864795
2 34.7 29.944414
3 33.4 28.322685
4 36.2 28.136243
相关文章:

第2篇 机器学习基础 —(3)机器学习库之Scikit-Learn
前言:Hello大家好,我是小哥谈。Scikit-Learn(简称Sklearn)是Python 的第三方模块,它是机器学习领域当中知名的Python 模块之一,它对常用的机器学习算法进行了封装,包括回归(Regressi…...

正点原子嵌入式linux驱动开发——Linux SPI驱动
到目前为止的学习笔记,已经介绍了Linux下的platform总线框架、I2C总线框架,本篇笔记将介绍Linux下的SPI总线框架。与I2C总线一样,SPI是物理总线,也是一种很常用的串行通信协议。本章就来学习如何在Linux下编写SPI总线接口的设备驱…...

【计算机视觉】相机
文章目录 一、原始的相机:针孔相机(Pinhole Camera)二、针孔相机的数学模型三、真实相机四、透镜的缺陷 我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。 成像原理 一、原始的相机:针孔相机…...

Spring的条件注解,一篇文章盘得清清楚楚明明白白
前言 在Spring中,条件注解可根据特定的条件来决定是否创建或配置Bean,这些条件可以基于类、属性、环境等因素。通过使用条件注解,我们可以在Spring容器中更加灵活地管理和控制组件的创建和注入,帮助我们更加灵活地管理和控制Bean…...

Oracle (7)Online Redo Log Files
目录 一、Oracle Online Redo Log Files及其相关内容介绍 1、Online Redo Log Files简介 2、Online Redo Log Files特点 3、Online Redo Log Files文件组 4、多路复用文件 5、联机重做日志文件工作方式 6、LGWR什么时候写重做 7、LS和LSN 8、删除Redo文件成员 9、删除…...

物联网AI MicroPython传感器学习 之 PAJ7620手势识别传感器
学物联网,来万物简单IoT物联网!! 一、产品简介 手势识别传感器PAJ7620u2是一款集成3D手势识别和运动跟踪为一体的交互式传感器,传感器可以在有效范围内识别手指的顺时针/逆时针转动方向和手指的运动方向等。它可以识别13种手势&a…...

Affinity Photo 2.2.1 高端专业Mac PS修图软件
Affinity Photo Mac中文版是一款面向专业摄影师和其他视觉艺术家的专业图像处理软件,拥有众多专业高端功能,如Raw处理、PSD导入和导出、16位通道的编辑和ICC色彩管理以及兼容大量图片格式。是现在最快、最顺、最精准的专业修图软件。Affinity Photo Mac是…...

微服务-统一网关Gateway
网关的作用 对用户请求做身份认证、权限校验将用户请求路由到微服务,并实现负载均衡对用户请求做限流 搭建网关服务 创建新module,命名为Gateway,引入依赖(1.SpringCloudGateway依赖;2.Eureka客户端依赖或者nacos的服…...

【音视频|wav】wav音频文件格式详解
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

网络工程综合试题(二)
1. SR技术有哪些缺点? SR(Segment Routing)技术是一种新兴的网络编程技术,它具有很多优点,但也存在一些缺点,包括: 部署复杂性:SR技术需要对网络进行改造和升级,包括更新…...

Android JNI/NDK 入门从一到二
1. 前言 最基础的创建JNI接口的操作,可以直接看这篇文章 : 第一个Android JNI工程, 本文会基于掌握创建JNI接口的操作的基础之上,来入门JNI/NDK。 2. 在JNI中打印日志 2.1 添加log模块 记得CMake中有log模块,不然编译不过 ta…...

吃瓜教程3|决策树
ID3算法 假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为 信息增益 C4.5算法 ID3算法存在一个问题,就是偏向于取值数目较多的属性,因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性 CA…...

springboot动态数据源【非伪数据源】
说明:本文章的数据源不是在配置文件中配置两个或多个数据源,在业务方面对这些数据源来回切换,本文章中的数据源是可以动态添加,修改,切换的,废话不多说。 先看工程图: 1.pom.xml文件 <?x…...

如何改善设备综合效率(OEE)并提高工厂的生产力
在现代制造业中,提高设备综合效率(Overall Equipment Efficiency,OEE)是企业追求高效生产和优化生产能力的重要目标之一。OEE是一个关键的绩效指标,可以帮助企业评估设备的利用效率、生产效率和质量水平。本文将从三个…...
一文接入Android阿里Sophix热更新
最近公司项目渐趋成熟,已经不需要经常更新版本,并且更新版本对客户的影响特别大,但是日常维护难免需要更新代码,因此热修复的技术,就比较迫切了。 经过一段时间的对比,我们最终决定使用阿里的Sophix方案&am…...

【高阶数据结构】并查集和图
目录 1.数据结构--并查集 2.数据结构--图 1.图的基础概念 2.图的简单实现 2.1.邻接矩阵的图实现 2.2.邻接表的图实现 2.3.图的DFS和BFS 2.4.最小生成树 2.4.1.Kruskal(克鲁斯卡尔算法) 2.4.2.Prim(普里姆算法) 2.5.最短路径 2.5.1.Dijkstra(…...

Git 提交时提示 GPG 签名错误
本来应该一切都是正常的,但今天提交的时候提示 GPG 签名错误。 错误的信息就是 GPG 签名失败。 gpg: skipped "942395299055675C": No secret key gpg: signing failed: No secret key error: gpg failed to sign the data fatal: failed to write commi…...

vite+vue3实现 tomcat 的本地部署
背景: 很多开发小伙伴在本地开发完前端项目后,碍于服务端环境配置麻烦,想先试试在本地部署,已开发好的前端项目,由于很多文章都是文字性描述,不太直观,为了给大多数新手提供一个教程,…...

docker+playwright
windows10 docker playwright 难点在于windows下docker的安装,以及官方hub被墙的困难。 wsl2 wsl2 ubuntu docker git clone https://gitee.com/lineuman/lcs_playwright.git npm install npx playwright test docker端口怎么映射到主机上面? 设置重…...
php框架路由实现
在PHP中也有很多框架(如Laravel、CodeIgniter)提供了路由功能。下面是一个简单的PHP路由实现原理和示例代码: 路由实现原理: 客户端发起请求,请求的URL会被传递给Web服务器。Web服务器将请求传递给PHP解释器ÿ…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...

【向量库】Weaviate概述与架构解析
文章目录 一、什么是weaviate二、High-Level Architecture1. Core Components2. Storage Layer3. 组件交互流程 三、核心组件1. API Layer2. Schema Management3. Vector Indexing3.1. 查询原理3.2. 左侧:Search Process(搜索流程)3.3. 右侧&…...
后端下载限速(redis记录实时并发,bucket4j动态限速)
✅ 使用 Redis 记录 所有用户的实时并发下载数✅ 使用 Bucket4j 实现 全局下载速率限制(动态)✅ 支持 动态调整限速策略✅ 下载接口安全、稳定、可监控 🧩 整体架构概览 模块功能Redis存储全局并发数和带宽令牌桶状态Bucket4j Redis分布式限…...
Go 并发编程基础:select 多路复用
select 是 Go 并发编程中非常强大的语法结构,它允许程序同时等待多个通道操作的完成,从而实现多路复用机制,是协程调度、超时控制、通道竞争等场景的核心工具。 一、什么是 select select 类似于 switch 语句,但它用于监听多个通…...