协调尺度:特征缩放在机器学习中的重要作用

目录

一、介绍

二、背景知识

三、了解功能缩放

四、特征缩放方法

五、特征缩放的重要性

六、实际意义

七、代码

八、结论


一、介绍

        特征缩放是机器学习和数据分析预处理阶段的关键步骤,在优化各种算法的性能和效率方面起着至关重要的作用。本文深入探讨了特征缩放的本质,探讨了其不同的方法,强调了其重要性,并考虑了其在机器学习模型中的应用的实际意义。

在机器学习的世界里,算法学会寻找模式并做出决策,特征缩放是很好的均衡器,确保每个特征,无论其原始规模如何,都有一个在数据合唱中同样响亮的声音。

二、背景知识

        特征缩放是一种用于机器学习和数据挖掘的数据预处理方法,用于对数据的自变量或特征的范围进行归一化。在机器学习的背景下,特征缩放可能至关重要,因为它直接影响使用距离计算的算法的性能,例如 k 最近邻 (KNN) 和 k 均值聚类,并且会显着影响神经网络和支持向量机中使用的梯度下降优化方法的性能。

        有几种常见的特征缩放方法:

1 最小-最大缩放(归一化):

  • 该方法单独缩放和转换每个特征,使其在训练集的给定范围内,例如,介于 0 和 1 之间。要素归一化值的计算公式为:

  • 其中 X 是原始值,minXmin 是要素的最小值,maxXmax 是要素的最大值。

2 标准化(Z 分数归一化):

  • 此方法对要素进行缩放,使其具有 0μ=0 和 1 σ=1 的标准正态分布属性,其中 μ 是平均值(平均值),σ 是与平均值的标准差。样本的标准分数(也称为 z 分数)的计算方法如下:

  • 标准化不会将值绑定到特定范围,这对于某些算法来说可能是一个问题(例如,神经网络通常期望输入值范围为 0 到 1)。

3 最大Abs缩放:

  • 单独缩放和转换每个特征,使训练集中每个特征的最大绝对值为 1.0。它不会移动/居中数据,因此不会破坏任何稀疏性。

4 Robust 缩放的:

  • 此方法删除中位数并根据分位数范围(通常是四分位距,IQR)缩放数据。它对异常值具有鲁棒性,当数据包含许多异常值或我们不想假设特征的正态分布时,会使用它。

        特征缩放应用于数据的自变量或特征,以标准化数据的范围。这在计算数据点之间距离的算法中非常重要,或者当特征具有不同的单位和比例时,因为它可以使训练过程更快,并减少卡在局部最优状态的机会。但是,缩放技术的选择可能取决于算法和数据的具体特征。

三、了解功能缩放

        特征缩放是对数据中自变量或特征范围进行归一化或标准化的过程。该技术的主要目标是确保没有一个特征因其规模而主导模型,从而使算法在训练过程中更快、更有效地收敛。对于依赖于距离计算的模型(例如 k 最近邻 (KNN) 和 k 均值聚类)或使用梯度下降优化方法(包括神经网络和支持向量机 (SVM))的模型,这一点尤为重要。

四、特征缩放方法

        有几种常见的功能缩放方法,每种方法都有其独特的应用和优点:

  1. 最小-最大缩放(归一化):此方法调整数据的缩放比例,使其适合特定范围,通常为 0 到 1。它适用于假定数据处于有限间隔但对异常值敏感的算法。
  2. 标准化(Z 分数归一化):与归一化不同,标准化不会将值绑定到特定范围,这使得它适用于不假设特定数据分布的算法。它将特征转换为均值为零,标准差为一,从而促进对数据规模敏感的算法更快地收敛。
  3. 最大 Abs 缩放:此技术按每个要素的最大绝对值缩放。这对于已经居中的数据或稀疏数据非常有用,其中零是一个有意义的值。
  4. 强大的扩展性:通过删除中位数并根据分位数范围缩放数据,鲁棒缩放可减轻异常值的影响。当数据集包含许多异常值或数据不服从正态分布时,它特别有利。

五、特征缩放的重要性

        特征缩放通过确保特征对结果的贡献相等来增强机器学习算法的性能,从而防止由于数据的固有规模而产生的偏差。例如,在梯度下降算法中,特征缩放可以显著加快收敛速度,因为它确保向最小值迈出的步长在所有维度上都是成比例的。同样,在计算数据点之间距离的聚类算法和模型中,要素缩放可确保距离度量不会因要素比例而偏斜。

六、实际意义

        在实践中,特征缩放方法的选择取决于所使用的算法和数据的具体特征。对于决策树或随机森林等算法,可能不需要特征缩放,因为这些模型对数据规模不敏感。然而,对于支持向量机、神经网络和基于距离的算法,特征缩放对于模型性能和准确性至关重要。

        此外,异常值的存在会显着影响使用哪种缩放方法。例如,最小-最大缩放可能对异常值高度敏感,可能会将大部分数据压缩到一个小范围内。在这种情况下,可靠的扩展或标准化可能更合适。

七、代码

        为了使用完整的 Python 代码示例来说明特征缩放,我们将创建一个合成数据集,应用不同的特征缩放技术,并可视化这些技术对数据集的影响。我们还将包含指标来评估缩放对简单机器学习模型的影响。

步骤 1:创建合成数据集

首先,我们将使用 创建一个具有不同比例特征的合成数据集。sklearn.datasets.make_classification

步骤 2:应用特征缩放技术

我们将应用以下功能缩放技术:

  • 最小-最大缩放
  • 标准化(Z 分数归一化)
  • 最大腹肌缩放
  • 强大的扩展能力

步骤 3:可视化要素缩放的效果

在应用每种缩放技术之前和之后,我们将使用绘图来可视化数据集。

步骤 4:评估对机器学习模型的影响

作为一个简单的评估,我们将使用逻辑回归模型来查看特征缩放如何影响其性能。我们将数据集拆分为训练集和测试集,应用缩放,训练模型,然后使用准确性作为指标对其进行评估。

让我们开始对这个过程进行编码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, MinMaxScaler, MaxAbsScaler, RobustScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Step 1: Create a synthetic dataset
X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1, weights=[0.5], random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Function to apply scaling and train a logistic regression model
def apply_scaling_and_evaluate(scaler):
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)
    
    # Train logistic regression model
    model = LogisticRegression(random_state=42)
    model.fit(X_train_scaled, y_train)
    
    # Predict and evaluate
    predictions = model.predict(X_test_scaled)
    accuracy = accuracy_score(y_test, predictions)
    
    # Plotting
    plt.scatter(X_train_scaled[:, 0], X_train_scaled[:, 1], c=y_train, cmap='viridis', alpha=0.5)
    plt.title(f"{scaler.__class__.__name__} - Accuracy: {accuracy:.2f}")
    plt.xlabel('Feature 1')
    plt.ylabel('Feature 2')
    plt.show()

# Original Data Plot
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', alpha=0.5)
plt.title("Original Data")
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

# Apply and visualize different scaling techniques
scalers = [MinMaxScaler(), StandardScaler(), MaxAbsScaler(), RobustScaler()]
for scaler in scalers:
    apply_scaling_and_evaluate(scaler)

解释:

  • 创建合成数据集:我们使用 生成一个具有两个特征的数据集。然后,将数据集拆分为训练集和测试集。make_classification
  • 应用缩放技术:对于每种缩放技术,我们创建一个缩放器对象,将其拟合到训练数据上,并转换训练集和测试集。
  • 训练和评估模型:我们在缩放数据上训练逻辑回归模型,并通过计算测试集的准确性来评估其性能。
  • 可视化:对于每种缩放技术,我们绘制缩放的特征以可视化数据分布的变化。

        此代码全面概述了如何在 Python 中应用特征缩放、可视化其效果以及评估对简单机器学习模型的影响。

八、结论

        特征缩放是机器学习算法预处理数据的基本步骤,可确保特征的缩放不会使模型产生偏差。通过了解并适当应用不同的特征缩放方法,数据科学家可以提高机器学习模型的性能、效率和准确性。因此,特征缩放不仅有助于算法的最佳功能,而且还强调了在机器学习和数据分析的更广泛背景下进行深思熟虑的数据预处理的重要性。

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

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

相关文章

【论文精读】DALL·E

摘要 本文利用从互联网上收集的2.5亿个图像/文本对数据,训练了一个120亿参数的自回归transformer,进而得到一个可以通过自然语言/图像控制生成的高保真图像生成模型。在大多数数据集上的表现超越以往的方法。 框架 本文的目标为通过训练一个自回归trans…

结构体对齐规则及为什么会有结构体对齐

前言: 大家在学习结构体中,在计算结构体大小时想必会很疑惑,为什么结构体的大小不是按照常理像数组一样一个字节一个字节的挨在一起放?今天带大家一起深入探讨一下背后的规则和原因。 结构体对齐规则: 结构体对齐其实…

BUUCTF misc 专题(47)[SWPU2019]神奇的二维码

下载附件,得到一张二维码图片,并用工具扫描(因为图片违规了,所以就不放了哈。工具的话,一般的二维码扫描都可以) swpuctf{flag_is_not_here},(刚开始出了点小差错对不住各位师傅&am…

进程间通信——管道

文章目录 进程间通信的介绍进程间通信的目的进程间通信的本质 匿名管道创建管道匿名管道的特征 命名管道小结 进程间通信的介绍 进程间通信简称IPC(Interprocess communication),进程间通信就是在不同进程之间传播或交换信息。 进程间通信的…

分布式文件系统 SpringBoot+FastDFS+Vue.js【三】

分布式文件系统 SpringBootFastDFSVue.js【三】 七、创建后台--分角色管理7.1.创建后台数据库表7.2.创建实体类7.2.1.Admin7.2.2.Menu7.2.3.MenuBean7.2.4.Role7.2.5.RoleMenu 7.3.编辑配置文件application.yml7.4.编写工具类7.4.1.AuthContextHolder7.4.2.HttpUtils7.4.3.Stri…

成员方法传参机制

一、成员方法传参机制 1、值传递:形参改变不影响实参 2、地址传递:形参改变影响实参

函数式编程的技巧

14.1.2 科里化 给出科里化的理论定义之前,让我们先来看一个例子。应用程序通常都会有国际化的需求将一套单位转换到另一套单位是经常碰到的问题。 单位转换通常都会涉及转换因子以及基线调整因子的问题。比如,将摄氏度转换到华氏度的公式是CtoF(x)x*9/…

【高级C语言】从汇编代码看volatile关键字的作用

本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客内容主要围绕: 5G/6G协议讲解 算力网络讲解(云计算,边缘计…

apk反编译修改教程系列---简单去除apk登陆 修改vip与一些反编译基础常识【十二】

往期教程: 安卓玩机-----反编译apk 修改apk 去广告 去弹窗等操作中的一些常识apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 apk反编译修改教程系列-----修改apk中…

政安晨:【示例演绎】【Python】【Numpy数据处理】快速入门(二)

环境准备 大家如果第一次看到,可以先从我这个演绎系列的第一篇文章开始,包括准备环境等等。 第一篇文章如下: 政安晨:【示例演绎】【Python】【Numpy数据处理】快速入门(一)https://blog.csdn.net/snowd…

怎么搭建自己的网站?

怎么搭建自己的网站 一.领取一个免费域名和SSL证书,和CDN 特点:支持Cloudflare CDN Cloudflare是全球知名的CDN提供商,如果你不想暴露你的源站,又想使用我们的二级域名,不需要前往Cloudflare添加域名,修…

【Linux取经路】文件系统之被打开的文件——文件描述符的引入

文章目录 一、明确基本共识二、C语言文件接口回顾2.1 文件的打开操作2.2 文件的读取写入操作2.3 三个标准输入输出流 三、文件有关的系统调用3.1 open3.1.1 比特位级别的标志位传递方式 3.2 write3.2.1 模拟实现 w 选项3.2.2 模拟实现 a 选项 3.3 read 四、访问文件的本质4.1 再…

STM32,嵌入式系统中的I2C协议

I2C协议——读写EEPROM 关注我,共同交流,一起成长 前言一、协议简介二、I2C特性及架构三、通信过程 前言 这是一种主要用于集成电路和集成电路(IC)通信,计算机中复杂的问题大多数就是用分层来进行解决,这个…

k8s-项目部署案例

一、容器交付流程 在k8s平台部署项目流程 在K8s部署Java网站项目 DockerFile 如果是http访问,需要在镜像仓库配置可信任IP 三、使用工作负载控制器部署镜像 建议至少配置两个标签 一个是声明项目类型的 一个是项目名称的 继续配置属性 资源配额 健康检查 五、使…

积分(二)——复化Simpson(C++)

前言 前言 simpson积分 simpson积分公式 ∫ a b f ( x ) d x ≈ b − a 6 [ f ( a ) f ( b ) 4 f ( a b 2 ) ] \int_{a}^{b}f(x)dx \approx \frac{b-a}{6}[f(a)f(b)4f(\frac{ab}{2})] ∫ab​f(x)dx≈6b−a​[f(a)f(b)4f(2ab​)] 与梯形积分类似,当区间[a,b]较…

Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(下)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

卷积神经网络的基本结构

卷积神经网络的基本结构 与传统的全连接神经网络一样,卷积神经网络依然是一个层级网络,只不过层的功能和形式发生了变化。 典型的CNN结构包括: 数据输入层(Input Layer)卷积层(Convolutional Layer&#x…

社区商铺开什么店最好?从商业计划书到实际运营

在社区商铺开店,选择适合的业态是成功的关键。作为一名开店 5 年的资深创业者,我想分享一些关于社区店的干货和见解。 这篇文章,我用我的项目给大家举例子! 鲜奶吧作为一种新兴的业态,以提供新鲜、健康的乳制品为主&…

vue3 之 倒计时函数封装

理解需求 编写一个函数useCountDown可以把秒数格式化为倒计时的显示xx分钟xx秒 1️⃣formatTime为显示的倒计时时间 2️⃣start是倒计时启动函数,调用时可以设置初始值并且开始倒计时 实现思路分析 安装插件 dayjs npm i dayjs倒计时逻辑函数封装 // 封装倒计时…

C++类和对象-多态->多态的基本语法、多态的原理剖析、纯虚函数和抽象类、虚析构和纯虚析构

#include<iostream> using namespace std; //多态 //动物类 class Animal { public: //Speak函数就是虚函数 //函数前面加上virtual关键字&#xff0c;变成虚函数&#xff0c;那么编译器在编译的时候就不能确定函数调用了。 virtual void speak() { …