【机器学习】数据预处理之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,一经查实,立即删除!

相关文章

DeepSeek介绍,以及本地部署和API使用

认识大模型 决策式ai 通过数据作分析和预测 生成式ai 基于历史数据进行创造,生成全新的内容 推理模型创新 GPT的o1慢思考 成本极高,功能强大 模型参数量大,推理速度相对更慢,处理复杂问题时需要较长的时间 DeepSeek的r1深度思…

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…

15vue3实战-----props和emit传值

15vue3实战-----props和emit传值 1.emit的使用2.配合props实现完整父子通信 vue3中props和emit的使用有点不一样,但万变不离其宗。 1.emit的使用 子组件: <script setup lang"ts"> // 定义触发的事件及其数据类型 const emit defineEmits([update, delete]…

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

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

金融资产配置

不要放在一个篮子里也不要放在太多篮子里&#xff1a; 尽量放在不相关的行业实现风险对冲 金融资产从风险类别上主要可以分为三类&#xff1a; 进攻型资产、稳定型资产和防守型资产 进攻型资产包括原油、股票、一级市场股权投资等 稳定型资产包括信托、理财、国债等 防守…

JavaScript 在 VSCode 中的优势与应用

JavaScript 在 VSCode 中的优势与应用 引言 随着前端技术的发展,JavaScript 已经成为了网页开发中最流行的编程语言之一。Visual Studio Code(简称 VSCode)作为一款轻量级、可扩展的代码编辑器,因其强大的功能和良好的用户体验,深受广大开发者的喜爱。本文将探讨 JavaSc…

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

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

qml前后端数据交互

在QML&#xff08;Qt Markup Language&#xff09;中进行前后端数据交互&#xff0c;通常涉及到使用Qt的C后端与QML界面进行通信。QML本身是一个声明式语言&#xff0c;负责界面和交互逻辑的部分&#xff0c;而C后端负责数据处理、逻辑控制以及与系统或网络的交互。以下是一些常…

ZU47DR 100G光纤 高性能板卡

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

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

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

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

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

k8s中部署nginx的pod

在当今数字化的浪潮中&#xff0c;容器编排技术成为了构建和管理应用程序的核心力量。Kubernetes&#xff08;简称 k8s&#xff09;作为容器编排领域的佼佼者&#xff0c;凭借其强大的自动化部署、扩展和管理能力&#xff0c;深受开发者和运维人员的青睐。而 Nginx 作为一款高性…

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

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

UV - Python 包管理

文章目录 创建 uv 项目已有项目已有uv项目 创建 uv 项目 # 创建项目 uv init m3 # 创建环境 cd m3 uv venv --python 3.11 # 激活环境 source .venv/bin/activate # 添加库 uv add flask 如果创建项目后&#xff0c;给库取别的名字&#xff0c;add 的时候&#xff0c;会…

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

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