6.1 使用scikit-learn构建模型

2023-09-20 22:08:54

  scikit-learn(简称sklearn)库整合了多种机器学习算法,可以帮助使用者在数据分析过程中快速建立模型,且模型接口统一,使用起来非常方便。同时,sklearn拥有优秀的官方文档,知识点详尽,内容丰富,是入门学习sklearn的最佳内容。

  开源机器学习库:https://scikit-learn.org/stable/index.html   开源机器学习库
在这里插入图片描述
涵盖分类、回归、聚类、降维、模型选择、数据预处理六大模块
在这里插入图片描述

6.1.1 使用sklearn转换器处理数据

  sklearn提供了model_selection模型选择模块、preprocessing数据预处理模块与decomoisition特征分解模块。通过这三个模块能够实现数据的预处理与模型构建前的数据标准化、二值化、数据集的分割、交叉验证和PCA降维等工作。

datasets模块常用数据集的加载函数与解释如下表所示:
波士顿房价、鸢尾花、红酒数据集
在这里插入图片描述
  使用sklearn进行数据预处理会用到sklearn提供的统一接口——转换器(Transformer)。
  加载后的数据集可以视为一个字典,几乎所有的sklearn数据集均可以使用data,target,feature_names,DESCR分别获取数据集的数据,标签,特征名称和描述信息。

from sklearn.datasets import load_boston  # 波士顿房价数据集
from sklearn.datasets import load_breast_cancer  # 癌症数据集
# cancer = load_breast_cancer()  # 读取数据集
# print("长度: ", len(cancer))
# print("类型: ", type(cancer))
boston = load_boston()  # 读取数据集
print("长度: ", len(boston))
# print(boston)
print('data:\n', boston['data'])  # 数据
print('target:\n', boston['target'])  # 标签
print('feature_names:\n', boston['feature_names'])  # 特征名称
print('DESCR:\n', boston['DESCR'])  # 描述信息

6.1.2 将数据集划分为训练集和测试集

  在数据分析过程中,为了保证模型在实际系统中能够起到预期作用,一般需要将样本分成独立的三部分:

  • 训练集(train set):用于训练模型。
  • 验证集(validation set):用于训练过程中对模型性能评估。
  • 测试集(test set):用于检验最终的模型的性能。
      典型的划分方式是训练集占总样本的50%,而验证集和测试集各占25%。

K折交叉验证法
  当数据总量较少的时候,使用上面的方法将数据划分为三部分就不合适了。
  常用的方法是留少部分做测试集,然后对其余N个样本采用K折交叉验证法,基本步骤如下:

  • 将样本打乱,均匀分成K份。
  • 轮流选择其中K-1份做训练,剩余的一份做验证。
  • 计算预测误差平方和,把K次的预测误差平方和的均值作为选择最优模型结构的依据。

sklearn的model_selection模块提供了train_test_split函数,能够对数据集进行拆分,其使用格式如下。

sklearn.model_selection.train_test_split(*arrays, **options)

在这里插入图片描述
将数据集划分为训练集和测试集

  • train_test_split函数根据传入的数据,分别将传入的数据划分为训练集和测试集。
  • 如果传入的是1组数据,那么生成的就是这一组数据随机划分后训练集和测试集,总共2组。
  • 如果传入的是2组数据,则生成的训练集和测试集分别2组,总共4组。
  • train_test_split是最常用的数据划分方法,在model_selection模块中还提供了其他数据集划分的函数,如PredefinedSplit,ShuffleSplit等。
from sklearn.datasets import load_boston  # 波士顿房价数据集
boston = load_boston()  # 读取数据集
# 划分数据集
from sklearn.model_selection import train_test_split
X, y = boston.data, boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
print("X_train.shape: ", X_train.shape)
print("X_test.shape: ", X_test.shape)
print("y_train.shape: ", y_train.shape)
print("y_test.shape: ", y_test.shape)

在这里插入图片描述

6.1.3 使用sklearn转换器进行数据预处理与降维

  在数据分析过程中,各类特征处理相关的操作都需要对训练集和测试集分开操作,需要将训练集的操作规则,权重系数等应用到测试集中。如果使用pandas,则应用至测试集的过程相对烦琐,使用sklearn转换器可以解决这一困扰。
  sklearn把相关的功能封装为转换器(transformer)。使用sklearn转换器能够实现对传入的NumPy数组进行标准化处理,归一化处理,二值化处理,PCA降维等操作。转换器主要包括三个方法:fit、transform 和 fit-transform。
在这里插入图片描述

1、数据预处理

sklearn部分预处理函数与其作用
在这里插入图片描述

2、PCA降维算法

sklearn还提供了降维算法,特征选择算法,这些算法的使用也是通过转换器的方式。
在这里插入图片描述

代码

from sklearn.datasets import load_boston  # 波士顿房价数据集
boston = load_boston()  # 读取数据集
# print("长度: ", len(boston))
# # print(boston)
# print('data:\n', boston['data'])  # 数据
# print('target:\n', boston['target'])  # 标签
# print('feature_names:\n', boston['feature_names'])  # 特征名称
# print('DESCR:\n', boston['DESCR'])  # 描述信息

# 划分数据集
from sklearn.model_selection import train_test_split
X, y = boston.data, boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# print("X_train.shape: ", X_train.shape)
# print("X_test.shape: ", X_test.shape)
# print("y_train.shape: ", y_train.shape)
# print("y_test.shape: ", y_test.shape)
# 离差标准化
import numpy as np
from sklearn.preprocessing import MinMaxScaler
Scaler = MinMaxScaler().fit(X_train)  # 生成规则
# 将规则用于训练集
data_train = Scaler.transform(X_train)
# 将规则用于训练集
data_test = Scaler.transform(X_test)
print("训练集离差标准化前: ", np.min(X_train))
print("训练集离差标准化后: ", np.min(data_train))
print("测试集离差标准化前: ", np.max(X_test))
print("测试集离差标准化后: ", np.max(data_test))

# PCA降维
from sklearn.decomposition import PCA
pca = PCA(n_components=10).fit(data_train)  # 生成规则
# 将规则用于训练集
pca_test = pca.transform(data_test)
print("前: ", data_test.shape)
print("后: ", pca_test.shape)

在这里插入图片描述

更多推荐

故障注入实验:了解如何使用Chaos Engineering的方法,在服务网格中进行故障注入实验

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

4.docker容器编排(docker compose 与 docker swarm)

本文目录1.容器编排2.DockerCompose1.DockerCompose安装2.DockerCompose示例1.使用docker-compose启动nginx2.dockercompose常用命令3.校验docker-compose.yml是否有错误4.创建服务,启动容器5.弹性伸缩<扩缩容>3.Docker

Go 语言进阶 - 工程进阶

前言:\textcolor{Green}{前言:}前言:💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营💞从这个专栏里面可以迅速获得Go的知识今天的内容包括以下两个内容。关于实践的内容我会在后续发布出来。01.语言进阶:从并发编程的视角了解Go高性能的本质。02.依赖管理:了解GO语言依赖管理的演进路线课程

软件测试案例 | 气象探测库存管理系统的集成测试计划

将经过单元测试的模块按照设计要求连接起来,组成规定的软件系统的过程被称为“集成”。集成测试也被称为组装测试、联合测试、子系统测试或部件测试等,其主要用于检查各个软件单元之间的接口是否正确。集成测试同时也是单元测试的逻辑扩展,即在单元测试基础之上将所有模块按照概要设计的要求组装成为子系统或系统,然后进行测试。但是,不同的

【云原生持续交付和自动化测试】5.2 自动化测试和集成测试

往期回顾:第一章:【云原生概念和技术】第二章:【容器化应用程序设计和开发】第三章:【基于容器的部署、管理和扩展】第四章:【微服务架构设计和实现】第五章:【5.1自动化构建和打包容器镜像】5.2自动化测试和集成测试第五章:云原生持续交付和自动化测试5.2自动化测试和集成测试5.2.1什么是自动化测试和集成测试?5.2.2

什么是集成测试?集成测试方法有哪些?

1、基本概念:将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件高层设计进行测试,一般来说是以模块和子系统为单位进行测试。2、集成测试包含的层次:1.模块内的集成,主要是测试模块内各个接口间的交互集成关系;2.子系统内的集成,测试子系统内各个模块间的交互关系;3.系统集成,测

Nginx面试题

1.什么是Nginx?Nginx是一个轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发。2.为什么要用Nginx?跨平台、配置简单、反向代理、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发,内存消耗小:开启10个nginx才占15

suricata源码解析

SCInstanceInit初始化suricata实例:程序名设置为程序文件名,其他变量复位。InitGlobalintInitGlobal(void){//调用rust代码初始化contextrs_init(&suricata_context);//初始化引擎状态:SC_ATOMIC_INIT(engine_stag

Python异步编程|ASGI 与 Django(附源码)

异步服务网关接口(AsynchronousServerGatewayInterface,ASGI)秉承WSGI统一网关接口原则,在异步服务、框架和应用之间提供一个标准接口,同时兼容WSGI。01、ASGIASGI是根据统一接口的思想重新设计的新标准,你可能会有疑问,为什么不直接升级WSGI而去创造新的标准呢?WSGI是

以小见大,彻底理解 cookie,session,token 之间的关系,通俗易懂

发展史1、很久很久以前,Web基本上就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议,就是请求加响应,尤其是我不用记住是谁刚刚发了HTTP请求,每个请求对我来说都是全新的。这段时间很嗨皮2、但是随着交互式Web应用的兴起,像在线购物网站,需要登录的

Java关于AbstractProcessor的使用

文章目录Step1项目准备Step2开发一个自定义的AbstractProcessorStep3DebugAbstractProcessor替换源码内容运行SpringBoot应用测试源码内容是否成功替换背景:我们都知道,在正常情况下,我们无法去变更二方,三方包中源码的Java文件的内容,但是在某些场景下,我们又希望可

热文推荐