【机器学习】数据预处理之scikit-learn的Scaler与自定义Scaler类进行数据归一化
scikit-learn的Scaler数据归一化
- 一、摘要
- 二、训练数据集和测试数据集的归一化处理原则
- 三、scikit-learn中的Scalar类及示例
- 四、自定义StandardScaler类进行数据归一化处理
- 五、小结
一、摘要
本文主要介绍了scikit-learn中Scaler的使用方法,特别强调了数据归一化在机器学习过程中的重要性。讲述了归一化算法在训练模型前对训练数据集的处理,以及预测时对测试数据集的正确归一化方式。强调了保存训练数据集得到的均值和方差的重要性,并介绍了scalar类在数据处理中的封装理念和过程。最后通过实际代码示例,演示了如何使用standard scalar对数据进行归一化处理,并进行了knn分类实验,展示了归一化处理对提高模型预测准确度的重要性。

二、训练数据集和测试数据集的归一化处理原则
- 训练数据集用于训练模型,测试数据集用于评估模型性能。
- 归一化处理包括均值和方差的计算,用于将数据转换为标准正态分布。
- 测试数据集应使用训练数据集得到的均值和方差进行归一化处理。
- 不应直接对测试数据集计算均值和方差,应使用训练数据集的均值和方差。
三、scikit-learn中的Scalar类及示例

- Scalar类封装了数据的归一化处理,使流程与机器学习算法一致。
- fit方法用于计算训练数据集的均值和方差,保存关键信息。
- transform方法用于对输入样例进行归一化处理,输出结果。
- 使用scalar类可以方便地对后续样本进行归一化,并送入机器学习算法中进行预测处理。
- StandardScaler的使用示例,具体实现步骤如下:
-
1.加载鸢尾花数据集,分为训练数据集和测试数据集。
import numpy as np from sklearn import datasets# 引入鸢尾花数据集 iris = datasets.load_iris()# 特征矩阵和标签向量 X = iris.data y = iris.target# 将特征矩阵划分成训练集和测试集及其对应的特征向量 from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=666) -
2.使用StandardScaler对训练数据集进行归一化处理。
# 使用StandardScaler对训练数据集进行归一化处理. from sklearn.preprocessing import StandardScaler # 初始化对象 standardScaler = StandardScaler() # 训练数据集进行归一化 standardScaler.fit(X_train) X_train_standard = standardScaler.transform(X_train) X_train_standard执行效果:

-
3.使用相同的StandardScaler对测试数据集进行归一化处理。
# 使用StandardScaler对测试数据集进行归一化处理. standardScaler.fit(X_test) X_test_standard = standardScaler.transform(X_test) X_test_standard执行效果:

-
4.使用归一化后的数据训练k-近邻分类器,并评估分类准确度。
# 使用归一化后的数据训练k-近邻分类器,并评估分类准确度。 from sklearn.neighbors import KNeighborsClassifier# 初始化分类器 knn_clf = KNeighborsClassifier(n_neighbors=3,n_jobs=-1)# 调用fit函数 knn_clf.fit(X_train_standard,y_train)# 调用score函数 knn_clf.score(X_test_standard,y_test)执行效果:

-
5.对比未归一化处理的测试数据集会导致分类准确度降低。
# 传入未归一化的测试集 knn_clf.score(X_test,y_test)执行效果:

传入未归一化的测试集后,kNN分类器的准确度就下降了很多。
-
四、自定义StandardScaler类进行数据归一化处理
- 创建自定义StandardScaler类,包含fit和transform方法。
- fit方法计算训练数据集的均值和方差,保存为类的属性。
- transform方法使用训练数据集的均值和方差对输入数据进行归一化处理。
- 自定义StandardScaler的使用方式与sklearn中的StandardScaler一致。
- 自定义完整代码如下:
import numpy as npclass MyStandardScaler:def __init__(self):self.mean_ = None # 均值self.scale_ = None # 方差def fit(self, X):"""根据训练集X(二维的)获得数据的均值和方差"""assert X.ndim == 2, \"The dimenstion of X must be 2."self.mean_ = np.array([(np.mean(X[:, col])) for col in range(X.shape[1])])self.scale_ = np.array([(np.std(X[:, col])) for col in range(X.shape[1])])return selfdef transform(self, X):"""将X进行均值方差归一化处理"""assert X.ndim == 2, \"The dimenstion of X must be 2."assert self.mean_ is not None and self.scale_ is not None, \"must fit before transform."assert X.shape[1] == len(self.mean_), \"The number of X`s features must be equal to the number of self.mean_. "# 定义一个与X大小一致的空的矩阵retX = np.empty(shape=X.shape, dtype=float)# 均值方差归一化算法for col in range(X.shape[1]):retX[:, col] = (X[:, col] - self.mean_[col]) / self.scale_[col]return retX - 在jupyter中执行效果如下:



五、小结
本文围绕 scikit - learn 中 Scaler 的使用方法展开介绍,着重强调了数据归一化在机器学习中的重要性。文中阐述了归一化算法在训练模型前对训练数据集的处理操作,以及预测时对测试数据集的正确归一化方式。特别指出保存训练数据集所得均值和方差的重要意义,还介绍了 scalar 类在数据处理中的封装理念与过程。最后借助实际代码示例,演示了运用 standard scalar 对数据进行归一化处理的过程,并开展了 knn 分类实验,以此展示归一化处理对提升模型预测准确度的重要作用。
相关文章:
【机器学习】数据预处理之scikit-learn的Scaler与自定义Scaler类进行数据归一化
scikit-learn的Scaler数据归一化 一、摘要二、训练数据集和测试数据集的归一化处理原则三、scikit-learn中的Scalar类及示例四、自定义StandardScaler类进行数据归一化处理五、小结 一、摘要 本文主要介绍了scikit-learn中Scaler的使用方法,特别强调了数据归一化在…...
android的第一个app项目(java版)
一.学习java重要概念 java的基本类型的语言方法和C语言很像,这都是我们要学的东西和学过的东西。那些基础东西,就不和大家讨论了,一起看一下java的一些知识架构。 1.封装 封装是面向对象编程中的一个核心概念,它涉及到将数据和操…...
上位机知识篇---SSHSCP密钥与密钥对
文章目录 前言第一部分:SCP(Secure Copy Protocol)功能使用方法1.从本地复制到远程主机2.从远程主机复制到本地3.复制整个目录4.指定端口5.压缩传输 第二部分:SSH(Secure Shell)功能使用方法1.远程登录2.指…...
智慧物流新引擎:ARM架构工控机在自动化生产线中的应用
工业自动化程度的不断提升,对高性能、低功耗和高可靠性的计算设备需求日益增长。ARM架构工控机因其独特的优势,在多个工业领域得到了广泛应用。本文将深入探讨ARM架构工控机的特点及其在具体工业场景中的应用。 ARM架构工控机的主要优势 高效能与低功耗…...
[MySQL]2-MySQL索引
目录 1.索引🌟 1.1索引结构 B树 B树 聚簇索引(一级索引)与非聚簇索引(二级索引) 回表操作 1.2索引碎片 清理索引碎片的方法 1.3索引匹配方式🌟 在数据列上使用函数或者计算会导致索引失效的原因 …...
DeepSeek冲击下,奥特曼刚刚给出对AGI的「三个观察」,包括成本速降
来源 | 机器之心 今天凌晨,OpenAI CEO 再次发布长文,重申自己对于 AGI 的三个观察。 核心观点如下: 1. 人工智能模型的智能大致等于用于训练和运行该模型的资源的对数。 2. 使用一定水平的人工智能的成本每 12 个月就会下降约 10 倍&#x…...
新数据结构(8)——包装类
基本数据类型(轻点) Java基本数据类型在内存中占用固定的大小,并且直接存储值,而不是对象的引用 整数类型 byte:8位,存储范围从-128到127 short:16位,存储范围从-32,768到32,767 …...
P5:使用pytorch实现运动鞋识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:python 3.7.12 编译器:pycharm 深度学习环境:tensorflow 2.7.0 数据:本地数据集-运动鞋 一…...
讲解下SpringBoot中MySql和MongoDB的配合使用
在Spring Boot中,MySQL和MongoDB可以配合使用,以充分发挥关系型数据库和非关系型数据库的优势。MySQL适合处理结构化数据,而MongoDB适合处理非结构化或半结构化数据。以下是如何在Spring Boot中同时使用MySQL和MongoDB的详细讲解。 1. 添加依…...
《手札·行业篇》开源Odoo MES系统与SKF Observer Phoenix API在化工行业的双向对接方案
一、项目背景 化工行业生产过程复杂,设备运行条件恶劣,对设备状态监测、生产数据采集和质量控制的要求极高。通过开源Odoo MES系统与SKF Observer Phoenix API的双向对接,可以实现设备状态的实时监测、生产数据的自动化采集以及质量数据的同步…...
数据结构与算法之数组: LeetCode 905. 按奇偶排序数组 (Ts版)
按奇偶排序数组 https://leetcode.cn/problems/sort-array-by-parity/description/ 描述 给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 示例 1 输入:n…...
【STM32】HAL库Host MSC读写外部U盘及FatFS文件系统的USB Disk模式
【STM32】HAL库Host MSC读写外部U盘及FatFS文件系统的USB Disk模式 在先前 分别介绍了FatFS文件系统和USB虚拟U盘MSC配置 前者通过MCU读写Flash建立文件系统 后者通过MSC连接电脑使其能够被操作 这两者可以合起来 就能够实现同时在MCU、USB中操作Flash的文件系统 【STM32】通过…...
docker nginx 配置文件详解
在平常的开发工作中,我们经常需要访问静态资源(图片、HTML页面等)、访问文件目录、部署项目时进行负载均衡等。那么我们就会使用到Nginx,nginx.conf 的配置至关重要。那么今天主要结合访问静态资源、负载均衡等总结下 nginx.conf …...
如何实现华为云+deepseek?
在华为云上实现跨账号迁移数据或部署DeepSeek模型,可以通过以下步骤完成: 跨账号数据迁移 创建委托:在源账号中创建一个委托(Agency),授予目标账号访问数据的权限。 复制镜像:在源账号中&…...
【学习笔记】计算机网络(三)
第3章 数据链路层 文章目录 第3章 数据链路层3.1数据链路层的几个共同问题3.1.1 数据链路和帧3.1.2 三个基本功能3.1.3 其他功能 - 滑动窗口机制 3.2 点对点协议PPP(Point-to-Point Protocol)3.2.1 PPP 协议的特点3.2.2 PPP协议的帧格式3.2.3 PPP 协议的工作状态 3.3 使用广播信…...
稀土抑烟剂——为汽车火灾安全增添防线
一、稀土抑烟剂的基本概念 稀土抑烟剂是一类基于稀土元素(如稀土氧化物和稀土金属化合物)开发的高效阻燃材料。它可以显著提高汽车内饰材料的阻燃性能,减少火灾发生时有毒气体和烟雾的产生。稀土抑烟剂不仅能提升火灾时的安全性,…...
Qt Pro、Pri、Prf
一、概述 1、在Qt中,通常使用.pro(project)、pri(private include)、prf(project file)三种文件扩展名来组织项目。对于模块化编程,Qt提供了Pro和Pri,Pro管理项目,Pri管理模块。 2、pro文件是Qt项目的核心文件,包含了…...
基于AIOHTTP、Websocket和Vue3一步步实现web部署平台,无延迟控制台输出,接近原生SSH连接
背景:笔者是一名Javaer,但是最近因为某些原因迷上了Python和它的Asyncio,至于什么原因?请往下看。在着迷”犯浑“的过程中,也接触到了一些高并发高性能的组件,通过简单的学习和了解,aiohttp这个…...
如何在MacOS上查看edge/chrome的扩展源码
步骤 进入管理扩展页面点击详细信息复制对应id在命令行键入 open ~/Library/Application Support/Microsoft Edge/Default/Extensions/${你刚刚复制的id} 即可打开访达中对应的更目录 注意 由于原生命令行无法直接处理空格 ,所以需要加转义符\,即:open ~/Librar…...
【xdoj-离散线上练习H】T234(C++)
解题心得: 写递归函数的时候,首先写终止条件,这有助于对整个递归函数的把握。 题目:输入集合A和B,输出A到B上的所有函数。 问题描述 给定非空数字集合A和B,求出集合A到集合B上的所有函数。 输入格式 第一行…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
