【机器学习】数据预处理之scikit-learn的Scaler与自定义Scaler类进行数据归一化

scikit-learn的Scaler数据归一化

  • 一、摘要
  • 二、训练数据集和测试数据集的归一化处理原则
  • 三、scikit-learn中的Scalar类及示例
  • 四、自定义StandardScaler类进行数据归一化处理
  • 五、小结

一、摘要

本文主要介绍了scikit-learn中Scaler的使用方法,特别强调了数据归一化在机器学习过程中的重要性。讲述了归一化算法在训练模型前对训练数据集的处理,以及预测时对测试数据集的正确归一化方式。强调了保存训练数据集得到的均值和方差的重要性,并介绍了scalar类在数据处理中的封装理念和过程。最后通过实际代码示例,演示了如何使用standard scalar对数据进行归一化处理,并进行了knn分类实验,展示了归一化处理对提高模型预测准确度的重要性。
在这里插入图片描述

二、训练数据集和测试数据集的归一化处理原则

  1. 训练数据集用于训练模型,测试数据集用于评估模型性能。
  2. 归一化处理包括均值和方差的计算,用于将数据转换为标准正态分布。
  3. 测试数据集应使用训练数据集得到的均值和方差进行归一化处理
  4. 不应直接对测试数据集计算均值和方差,应使用训练数据集的均值和方差

三、scikit-learn中的Scalar类及示例

在这里插入图片描述

  1. Scalar类封装了数据的归一化处理,使流程与机器学习算法一致。
  2. fit方法用于计算训练数据集的均值和方差,保存关键信息。
  3. transform方法用于对输入样例进行归一化处理,输出结果。
  4. 使用scalar类可以方便地对后续样本进行归一化,并送入机器学习算法中进行预测处理。
  5. 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类进行数据归一化处理

  1. 创建自定义StandardScaler类,包含fit和transform方法。
  2. fit方法计算训练数据集的均值和方差,保存为类的属性。
  3. transform方法使用训练数据集的均值和方差对输入数据进行归一化处理。
  4. 自定义StandardScaler的使用方式与sklearn中的StandardScaler一致。
  5. 自定义完整代码如下:
    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
    
  6. 在jupyter中执行效果如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

五、小结

本文围绕 scikit - learn 中 Scaler 的使用方法展开介绍,着重强调了数据归一化在机器学习中的重要性。文中阐述了归一化算法在训练模型前对训练数据集的处理操作,以及预测时对测试数据集的正确归一化方式。特别指出保存训练数据集所得均值和方差的重要意义,还介绍了 scalar 类在数据处理中的封装理念与过程。最后借助实际代码示例,演示了运用 standard scalar 对数据进行归一化处理的过程,并开展了 knn 分类实验,以此展示归一化处理对提升模型预测准确度的重要作用。

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

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

相关文章

MySQL视图索引操作

创建学生表; mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-> Ssex char(2) check (Ssex男 or Ssex女) not null,-> Sage int not null,-> Sdept varchar(10) default 计算机 not …

知识库升级新思路:用生成式AI打造智能知识助手

在当今信息爆炸的时代,企业和组织面临着海量数据的处理和管理挑战。知识库管理系统(Knowledge Base Management System, KBMS)作为一种有效的信息管理工具,帮助企业存储、组织和检索知识。然而,传统的知识库系统往往依…

Python 文字识别OCR

一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…

ximalaya(三) playUriList值解密--webpack

本文主要介绍解密音频播放url参数。 本文仅代表个人理解,如有其他建议可在评论区沟通。 声明 仅仅记录一下自己的学习方法,不作为其他参考、更不作为商业用途。如有侵犯请联系本人删除 目标地址:aHR0cHM6Ly93d3cueGltYWxheWEuY29tL3NvdW5k…

Linux之Http协议分析以及cookie和session

Linux之Http协议分析以及cookie和session 一.分析请求行与响应行1.1请求行1.1.1资源的URL路径1.1.2常见的方法1.2响应行 二.cookie和session2.1cookie2.2session 一.分析请求行与响应行 在我们简单了解了请求和响应的格式以及模拟实现了请求和响应后我们已经可以通过网页来访问…

【漫话机器学习系列】085.自助采样法(Bootstrap Sampling)

自助采样法(Bootstrap Sampling) 1. 引言 在统计学和机器学习领域,数据的充足性直接影响模型的性能。然而,在许多实际场景中,我们可能无法获得足够的数据。为了解决这个问题,自助采样法(Boots…

nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug

nodejs 视频切片上传,本地正常,线上环境导致磁盘爆满bug 原因: 然后在每隔一分钟执行du -sh ls ,发现文件变得越来越大,即文件下的mp4文件越来越大 最后导致磁盘直接爆满 排查原因 1、尝试将m3u8文件夹下的所有视…

公司配置内网穿透方法笔记

一、目的 公司内部有局域网,局域网上有ftp服务器,有windows桌面服务器; 在内网环境下,是可以访问ftp服务器以及用远程桌面登录windows桌面服务器的; 现在想居家办公时,也能访问到公司内网的ftp服务器和win…

ZU47DR 100G光纤 高性能板卡

简介 2347DR是一款最大可提供8路ADC接收和8路DAC发射通道的高性能板卡。板卡选用高性价比的Xilinx的Zynq UltraScale RFSoC系列中XCZU47DR-FFVE1156作为处理芯片(管脚可以兼容XCZU48DR-FFVE1156,主要差别在有无FEC(信道纠错编解码&#xff0…

【自然语言处理】利用Memory Layer替换Transformer中的FFN

论文地址:https://arxiv.org/pdf/2412.09764 相关博客 【自然语言处理】利用Memory Layer替换Transformer中的FFN 【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM 【自然语言处理】BitNet b1.58:1bit LLM时代 【自然语言处理】…

ChunkKV:优化 KV 缓存压缩,让 LLM 长文本推理更高效

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

台湾精锐APEX减速机在半导体制造设备中的应用案例

半导体制造设备对传动系统的精度、可靠性和稳定性要求极高,台湾精锐APEX减速机凭借其低背隙、高精度和高刚性等优势,在半导体制造设备中得到了广泛应用。 案例一:晶圆切割设备 1.应用场景 在晶圆切割过程中,设备需要高精度的运…

如何为win10本地部署的deepseek创建一个快捷方式

简介:在桌面上创建一个快捷方式,双击即可实现打开终端并且输入ollama run的命令。 在win10系统下,本地部署了deepseek之后,每次需要打开powershell,然后再手动输入指令 ollama run deepseek-r1:1.5b 要想实现一个桌面…

解锁Rust:融合多语言特性的编程利器

如果你曾为理解Rust的特性或它们之间的协同工作原理而苦恼,那么这篇文章正是为你准备的。 Rust拥有许多令人惊叹的特性,但这些特性并非Rust所独有。实际上,Rust巧妙地借鉴了众多其他语言的优秀特性,并将它们融合成了一个完美的整体。深入了解Rust这些重要特性的来源以及它是…

【阅读笔记】信息熵自动曝光An Automatic Exposure Algorithm Based on Information Entropy

一、算法背景 信息熵作为衡量图像信息量的重要指标,能够反映图像的细节丰富程度。通过基于信息熵的自动曝光算法,可以自动调整曝光时间,使图像包含更多信息,从而提高图像质量。 灰度直方图在各个灰度值上分布越均匀,…

2025我的第二次社招,写在春招之季

先说一个好消息,C那些事 4w star了! 前面断更了一个月,本篇文章就可以看到原因,哈哈。 大家好,我叫光城,腾讯实习转正做后端开发,后去小公司做数据库内核,经过这几年的成长与积累&am…

运用Deek Seeker协助数据分析

我的数据源有两张表,一个是每日销售表(字段有日期、产品名称、实际销量),一个是每月目标表(字段有年度月份、产品名称、目标销量);我的需求是,按月、按年来统计每个产品的目标完成情况请问用PowerBl进行分析,应该如何建立数据模型…

【设计模式】【行为型模式】策略模式(Strategy)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 &#x1f…

【高级架构师】多线程和高并发编程(三):锁(中)深入ReentrantLock

文章目录 3、深入ReentrantLock3.1 ReentrantLock和synchronized的区别3.2 AQS概述3.3 加锁流程源码剖析3.3.1 加锁流程概述3.3.2 三种加锁源码分析3.3.2.1 lock方法3.3.2.2 tryLock方法3.3.2.3 lockInterruptibly方法 3.4 释放锁流程源码剖析3.4.1 释放锁流程概述3.4.2 释放锁…

WPF 进度条(ProgressBar)示例一

本文讲述&#xff1a;WPF 进度条(ProgressBar)简单的样式修改和使用。 进度显示界面&#xff1a;使用UserControl把ProgressBar和进度值以及要显示的内容全部组装在UserControl界面中&#xff0c;方便其他界面直接进行使用。 <UserControl x:Class"DefProcessBarDemo…