第2篇 机器学习基础 —(3)机器学习库之Scikit-Learn

news2024/11/17 19:49:59

前言: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 np

x=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                               #导入DataFrame

boston = 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

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

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

相关文章

这个学习方式,用的太及时了!

学校思政学习是培养未来社会精英、提升学生政治觉悟的重要环节。在学生的成长过程中,思政学习扮演着至关重要的角色,不仅有助于提高学生的政治素质,还能够培养他们的思维能力、价值观念,使他们更好地为社会和国家的发展贡献力量。…

c语言练习(9周)

输入样例11输出样例7.0980 #include<stdio.h> int main() {int n, i;double s 1,a1;scanf("%d", &n);for (i 2; i < n; i) {a 1 / (1a);s a;}printf("%.4lf", s);return 0; } 题干输入10个整数&#xff0c;分别按输入正序、逆序显示。输…

input 调起键盘 ,键盘距离输入框底部太近

input 调起键盘 &#xff0c;键盘距离输入框底部太近 解决方法 cursorSpacing‘20’ 单位是 ‘px’ <input cursorSpacing20 type"text" v-model"replyMain" />距离底部距离 20px &#xff0c;输入框距离键盘距离是20px

第五章 I/O管理 八、缓冲区管理

目录 一、定义 二、缓冲区的作用 三、单缓冲 1、定义&#xff1a; 2、例子1 3、例子2 四、双缓冲 1、定义&#xff1a; 2、例子1&#xff1a; 3、例子2&#xff1a; 五、单缓冲和双缓冲的区别 六、循环缓冲区 1、定义&#xff1a; 七、缓冲池 1、定义&#xff1a;…

岩土工程监测利器:多通道振弦数据记录仪应用铁路隧道监测

岩土工程监测利器&#xff1a;多通道振弦数据记录仪应用铁路隧道监测 岩土工程监测是工程建设中十分重要的一环&#xff0c;特别是在铁路隧道工程中&#xff0c;岩土工程监测更是不可或缺的一项。其中&#xff0c;振弦数据记录仪是一种非常重要的仪器&#xff0c;可以帮助监测…

思维训练第三课 反意疑问句

系列文章目录 文章目录 系列文章目录前言一、什么是反意疑问句二、反意疑问句的回答&#x1f49a;主系表/主谓宾&#xff08;肯定&#xff09;&#xff0c;否定提问1、一般现在时2、一般过去时3、一般将来时4、现在完成时 &#x1f49b; 主谓宾1、一般现在2、一般过去3、一般将…

2023最新版本 FreeRTOS教程 -2-任务创建-验证(动态创建)

API函数 BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,const configSTACK_DEPTH_TYPE usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreatedTask )API函数参数理解 -1-任务函数就是和函数指针 -2-名称自定义 -3-堆栈大小自…

041-第三代软件开发-QCustcomPlot波形标注

第三代软件开发-QCustcomPlot波形标注 文章目录 第三代软件开发-QCustcomPlot波形标注项目介绍QCustcomPlot波形标注效果初始化绘制 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML…

C++11线程

C11线程 创建线程 创建线程需要包含头文件<thread>&#xff0c;使用线程类std::thread 构造函数 默认构造函数 thread() noexcept; 默认构造函数&#xff0c;构造一个线程对象&#xff0c;但它不会启动任何实际的线程执行。 任务函数构造函数 template< class Fun…

计算机毕业设计选题推荐-短文写作竞赛微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

物联网的音视频基础设施,谁在提供最优解?

声网在作为RTC服务商的同时&#xff0c;也更在成为赛道的核心布道者和推动者&#xff0c;通过一个个场景的逐步落地&#xff0c;进而推动RTC行业产生更大的想象力。 作者|斗斗 出品|产业家 某海外物流企业的控制室内&#xff0c;工作人员正聚精会神地注视着高清视频画面&a…

深入浅出排序算法之快速排序(重要)⭐⭐⭐⭐⭐

目录 1. 算法介绍⭐⭐⭐⭐⭐ 1.1 图示解析 2. 执行流程和代码实现 2.1 挖坑法⭐⭐⭐⭐ 2.2 Hoare法⭐⭐⭐⭐ 2.3 前后指针法&#xff08;了解即可&#xff09; 2.4 非递归实现快速排序&#xff08;了解即可&#xff09; 4. 性能分析 5. 算法改进 5.1 三数选中法 5.2…

ChatGPT正在测试原生文件分析功能,DALL·E 3能P图啦!

10月29日&#xff0c;有部分用户在社交平台上分享&#xff0c;ChatGPT Plus正在测试原生文件上传、分析功能&#xff0c;可以通过文本问答的方式&#xff0c;对上传的PDF等数据文件进行提问、搜索。 例如&#xff0c;上传一份50页的员工手册PDF文件&#xff0c;然后向ChatGPT提…

基于Qt Designer 操作教程

​本章将简介使用 Qt Creator 里自带的 Qt Designer,使用 Qt Designer 比较方便的构造 UI 界面。特点是方便布局,比较形象。 ## 使用 UI 设计器开发程序 在这小节里我们继续学习如何使用 Qt Designer 开发程序,Qt Designer 是属于 Qt Creator 的一个功能而已,大家不要搞混…

一款针对SpringBootEnv页面进行快速漏洞利用

参考GitHub - 0x727/SpringBootExploit: 项目是根据LandGrey/SpringBootVulExploit清单编写&#xff0c;目的hvv期间快速利用漏洞、降低漏洞利用门槛。 &#x1f4dd; TODO 支持Eureka XStream deserialization RCE支持Fastjson 内存马注入支持更多可以使用JNDI内存马注入反序…

英语——歌曲篇——My Heart Will Go On——我心永恒

My Heart Will Go On [Celine Dion我心永恒] Every night in my dreams I see you,I feel you, That is how I know you go on Far across the distance And spaces between us You have come to show you go on Near,far,wherever you are I believe that the heart does g…

huggingface离线模式及默认保存路径

T5Tokenizer.from_pretrained()函数会在线下载huggingface上的模型&#xff0c;并自动保存在C盘的.cache路径下&#xff1a; C:\Users\xxxxx\.cache\huggingface\hub\models--google--t5-v1_1-base # 这里xxxxx代表自己电脑用户名huggingface离线下载 以google/t5-v1_1-base为…

RabbitMQ入门到实战教程,消息队列实战,改造配置MQ

RabbitMQ入门到实战教程&#xff0c;MQ消息中间件&#xff0c;消息队列实战-CSDN博客 3.7.Topic交换机 3.7.1.说明 Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。 只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候…

吊打98%的JAVA同行,这份阿里P8架构师升级手册登上天梯!

前言&#xff1a; 我们都是IT人&#xff0c;所以&#xff0c;我们注定了很像。 前段时间有个朋友去阿里面试&#xff0c;作为一个社招生&#xff0c;太多痛苦了。都知道进大厂最好的时机就是应届生的时候。作为社招生&#xff0c;太难了。 我这位朋友经历了五轮面试最后才上…

【AIFEM案例操作】水泵强度分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…