当前位置: 首页 > news >正文

第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的版本迭代情况:

  1. Scikit-Learn 0.1 - 2007年发布的第一个版本。
  2. Scikit-Learn 0.2 - 2008年发布,增加了更多的分类和聚类算法。
  3. Scikit-Learn 0.3 - 2009年发布,增加了更多的特征选择和数据预处理工具。
  4. Scikit-Learn 0.4 - 2010年发布,增加了更多的回归算法和交叉验证工具。
  5. Scikit-Learn 0.5 - 2011年发布,增加了更多的聚类算法和特征选择工具。
  6. Scikit-Learn 0.6 - 2012年发布,增加了更多的分类算法和特征选择工具。
  7. Scikit-Learn 0.7 - 2013年发布,增加了更多的回归算法和特征选择工具。
  8. Scikit-Learn 0.8 - 2014年发布,增加了更多的聚类算法和特征选择工具。
  9. Scikit-Learn 0.9 - 2015年发布,增加了更多的分类算法和特征选择工具。
  10. Scikit-Learn 0.10 - 2016年发布,增加了更多的回归算法和特征选择工具。
  11. Scikit-Learn 0.11 - 2017年发布,增加了更多的聚类算法和特征选择工具。
  12. Scikit-Learn 0.12 - 2018年发布,增加了更多的分类算法和特征选择工具。
  13. Scikit-Learn 0.13 - 2019年发布,增加了更多的回归算法和特征选择工具。
  14. Scikit-Learn 0.22 - 2019年发布,增加了更多的特征选择和数据预处理工具,以及更好的模型选择和评估工具。
  15. 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的应用场景非常广泛,包括但不限于以下几个方面:

  1. 金融领域:用于信用评估、欺诈检测、股票预测等。
  2. 医疗领域:用于疾病诊断、药物研发、基因分析等。
  3. 自然语言处理:用于文本分类、情感分析、机器翻译等。
  4. 图像处理:用于图像分类、目标检测、人脸识别等。
  5. 工业制造:用于质量控制、故障诊断、预测维护等。
  6. 推荐系统:用于个性化推荐、广告投放等。

等等......🍉 🍓 🍑 🍈 🍌 🍐

根据以上所述,对于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 平方米的房屋的单价。

面积价格
567800
1049000
1569200
20010000
25011000
30012000

代码:

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动态数据源【非伪数据源】

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

如何改善设备综合效率(OEE)并提高工厂的生产力

在现代制造业中&#xff0c;提高设备综合效率&#xff08;Overall Equipment Efficiency&#xff0c;OEE&#xff09;是企业追求高效生产和优化生产能力的重要目标之一。OEE是一个关键的绩效指标&#xff0c;可以帮助企业评估设备的利用效率、生产效率和质量水平。本文将从三个…...

一文接入Android阿里Sophix热更新

最近公司项目渐趋成熟&#xff0c;已经不需要经常更新版本&#xff0c;并且更新版本对客户的影响特别大&#xff0c;但是日常维护难免需要更新代码&#xff0c;因此热修复的技术&#xff0c;就比较迫切了。 经过一段时间的对比&#xff0c;我们最终决定使用阿里的Sophix方案&am…...

【高阶数据结构】并查集和图

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

Git 提交时提示 GPG 签名错误

本来应该一切都是正常的&#xff0c;但今天提交的时候提示 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 的本地部署

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

docker+playwright

windows10 docker playwright 难点在于windows下docker的安装&#xff0c;以及官方hub被墙的困难。 wsl2 wsl2 ubuntu docker git clone https://gitee.com/lineuman/lcs_playwright.git npm install npx playwright test docker端口怎么映射到主机上面&#xff1f; 设置重…...

php框架路由实现

在PHP中也有很多框架&#xff08;如Laravel、CodeIgniter&#xff09;提供了路由功能。下面是一个简单的PHP路由实现原理和示例代码&#xff1a; 路由实现原理&#xff1a; 客户端发起请求&#xff0c;请求的URL会被传递给Web服务器。Web服务器将请求传递给PHP解释器&#xff…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...