【机器学习】数据预处理之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 np
    
    class 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 self
    
        def 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 分类实验,以此展示归一化处理对提升模型预测准确度的重要作用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习中过拟合和欠拟合问题处理方法总结

目录 一、背景二、过拟合(Overfitting)2.1 基本概念2.2 过拟合4个最主要的特征2.3 防止过拟合的11个有效方法 三、欠拟合(Underfitting)3.1 基本概念3.2 欠拟合的4个特征3.3 防止欠拟合的11个有效方法 四、总结五、参考资料 一、背景 在机器学习模型训练…

ABP框架9——自定义拦截器的实现与使用

一、AOP编程 AOP定义:面向切片编程,着重强调功能,将功能从业务逻辑分离出来。AOP使用场景:处理通用的、与业务逻辑无关的功能(如日志记录、性能监控、事务管理等)拦截器:拦截方法调用并添加额外的行为,比如…

基于YoloV11和驱动级鼠标模拟实现Ai自瞄

本文将围绕基于 YoloV11 和驱动级鼠标实现 FPS 游戏 AI 自瞄展开阐述。 需要着重强调的是,本文内容仅用于学术研究和技术学习目的。严禁任何个人或组织将文中所提及的技术、方法及思路应用于违法行为,包括但不限于在各类游戏中实施作弊等违规操作。若因违…

示例代码:C# MQTTS双向认证(客户端)(服务器EMQX)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

记录IMX6ULL开发板上移植SQLite3并运行Qt程序

文章目录 概要移植SQLite3Qt程序部署实验现象 概要 基于上一章对使用Qt运行对应的实验实例来完成对用户使用ui界面完成对SQLite数据库的增删改查等操作。本文旨在对上一句节的Qt程序部署到IMX6ULL开发板,并且完成对SQLite数据库在IMX6ULL开发板上的移植。 移植SQ…

达梦数据库(DM)线程管理

目录标题 达梦数据库(DM)线程管理笔记一、DM 线程架构概述二、DM 主要线程类型及功能(一)监听线程(二)工作线程(三)IO 线程(四)调度线程(五&#…

02.10 TCP之文件传输

1.思维导图 2.作业 服务器代码&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> …

Node.js 环境配置

什么是 Node.js Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行时环境&#xff0c;它允许你在服务器端运行 JavaScript。传统上&#xff0c;JavaScript 主要用于浏览器中的前端开发&#xff0c;而 Node.js 使得 JavaScript 也能够在服务器上执行&#xff0c;…

【办公类-53-04】20250209Python模仿制作2024学年第二学期校历

背景需求&#xff1a; 马上开学了&#xff0c;又要制作校历&#xff08;删划节假日&#xff09;。之前我都是用网络的图片&#xff0c;然后在PPT里修改。 存在问题&#xff1a; 网络校历是从周日开始的&#xff0c;但日常我们老师做教案&#xff0c;都是默认从周一到周五&…

KERL文献阅读分享:知识图谱与预训练语言模型赋能会话推荐系统

标题期刊年份Knowledge Graphs and Pre-trained Language Models enhanced Representation Learning for Conversational Recommender SystemsJournal of LaTeX Class Files2021 &#x1f4c8;研究背景 在数字时代&#xff0c;个性化推荐系统已经成为了我们生活的一部分。从电…

强一致性算法:Raft

目录 什么是 Raft 算法&#xff1f; Leader的选举 投票分裂后的选举过程 Raft算法日志复制过程 修复不一样的日志 数据安全性的保证 什么是 Raft 算法&#xff1f; Raft 算法是一种是一种用于管理复制日志的强一致性算法&#xff0c;用于保证分布式系统中节点数据的一致…

[MyabtisPlus]PG的TIMESTAMPTZ不支持转换为LocalDateTime

背景 数据库用的是PG&#xff0c;且created_time字段用的是带时区的timestamptz类型&#xff1a; 用MyabtisPlus(MP)的的代码生成&#xff0c;默认生成的是JDK8的LocalDateTime类型&#xff1a; 结果&#xff0c;在查询时候&#xff0c;无法做到实体类的类型自动转换&#xff0…

cliproxy代理服务使用指南

Cliproxy代理服务使用指南 一、引言 Cliproxy&#xff0c;作为一款高效稳定的代理服务工具&#xff0c;广泛应用于跨境电商、数据分析、网络爬虫、远程办公等领域。本指南旨在帮助用户快速上手Cliproxy&#xff0c;充分利用其代理服务&#xff0c;提升工作效率与数据安全。 二、…

【Java 面试 八股文】Redis篇

Redis 1. 什么是缓存穿透&#xff1f;怎么解决&#xff1f;2. 你能介绍一下布隆过滤器吗&#xff1f;3. 什么是缓存击穿&#xff1f;怎么解决&#xff1f;4. 什么是缓存雪崩&#xff1f;怎么解决&#xff1f;5. redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&…

防火墙术语大全( Firewalld Glossary of Terms)

防火墙术语大全 防火墙作为网络安全中不可或缺的设备&#xff0c;在各种网络架构中扮演着至关重要的角色。无论是企业级防火墙、云防火墙还是家用路由器内置的防火墙&#xff0c;它们的工作原理和配置策略都离不开一系列专业术语的支撑。对于网络工程师来说&#xff0c;掌握这…

【蓝耘元生代智算云平台】一键部署 DeepSeek人工智能模型

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

配置@别名路径,把@/ 解析为 src/

路径解析配置 webpack 安装 craco npm i -D craco/craco 项目根目录下创建文件 craco.config.js &#xff0c;内容如下 const path require(path) module.exports {webpack: {// 配置别名alias: {// 约定&#xff1a; 使用 表示src文件所在路径: path.resolve(__dirname,src)…

力扣hot100刷题第一天

哈希 1. 两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。你可以按任意…

【前端】几种常见的跨域解决方案代理的概念

几种常见的跨域解决方案&代理的概念 一、常见的跨域解决方案1. 服务端配置CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff1a;2. Nginx代理3. Vue CLI配置代理&#xff1a;4 .uni-app在manifest.json中配置代理来解决&#xff1a;5. 使用WebSocket通讯…

以下是基于巨控GRM241Q-4I4D4QHE模块的液位远程控制系统技术方案:

以下是基于巨控GRM241Q-4I4D4QHE模块的液位远程控制系统技术方案&#xff1a; 一、系统概述 本系统采用双巨控GRM241Q模块构建4G无线物联网络&#xff0c;实现山上液位数据实时传输至山下水泵站&#xff0c;通过预设逻辑自动控制水泵启停&#xff0c;同时支持APP远程监控及人工…