两个常用的数据标准化方法及Matlab和Python实现

2023-11-12

参考:数据归一化和两种常用的归一化方法,博主对原文进行了润色并添加了Matlab和Python实现。

数据标准化处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果。为了消除指标(特征)之间的量纲影响,数据集需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

为什么原文题目是归一化而本文题目采用标准化呢?虽然原文的题目为归一化,但是提及两种方法时用的是标准化。另外,需要指出的是,归一化和标准化是不同的概念,因为意思相近,而且大家讨论的概念内涵不统一,导致"标准化"和"归一化"这两个词长期被混用并被传播

这里我理解的也比较有限,也说不太清楚,感兴趣的参考一下:

  1. 标准化和归一化什么区别? - 龚焱的回答 - 知乎
  2. Feature scaling - Wikipedia
  3. Normalization (statistics) - Wikipedia
  4. 机器学习数据预处理——标准化/归一化方法

一、两种常用的标准化方法

1. Min-Max标准化

Min-Max标准化称也为离差标准化,是对原始数据的线性变换,使结果值映射到 [ 0 , 1 ] [0, 1] [0,1]之间。转换函数为: x ∗ = x − m i n m a x − m i n x^* = \frac {x - min}{max-min} x=maxminxmin,其中 m a x max max为原始样本数据的最大值, m i n min min为原始样本数据的最小值。这种方法有个缺陷就是当有新数据加入时,可能导致 m a x max max m i n min min的变化,需要重新定义。

2. Z-score标准化

这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1。转化函数为: x ∗ = x − μ σ x^* = \frac {x-\mu}{\sigma} x=σxμ,其中 μ \mu μ为原始样本数据的均值, σ \sigma σ为原始样本数据的标准差。

二、Matlab实现

在Matlab中,Min-Max标准化和Z-score标准化的函数分别是mapminmaxzscore,help查看一下文档吧。

% Min-Max标准化(Min=0,Max=1)
normalized_data = mapminmax(source_data', 0, 1)';
normalized_data = normalized_data';
% Z-score标准化
normalized_data = zscore(source_data);

自己实现:

function [normalized_data] = normalize(source_data, kind)
% 数据的标准化(归一化)处理
% 参数 source_data 可用格式的源数据
% 参数 kind 代表何种归一化, 默认为1. 1代表Min-Max标准化,2代表Z-score标准化.
% 返回归一化后的数据

if nargin < 2 % 如果参数少于2个,默认进行Min-Max标准化
    kind = 1; 
end;

[m, n]  = size(source_data);
normalized_data = zeros(m, n);

%% Min-Max标准化(Min=0,Max=1)
if kind == 1
    for i = 1:n
        ma = max( source_data(:, i) ); % Matlab中变量名不宜和函数名相同,所以不用max、min、mean等变量名
        mi = min( source_data(:, i) );
        normalized_data(:, i) = ( source_data(:, i)-mi ) / ( ma-mi );
    end
end
%% Z-score标准化
if kind == 2
    for i = 1:n
        mea = mean( source_data(:, i) );
        st = std( source_data(:, i) );
        normalized_data(:, i) = ( source_data(:, i)-mea ) / st;
    end
end

三、Python实现

在Python中,Min-Max标准化和Z-score标准化的函数一般借助sklearn中的preprocessing模块。

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.dataset import load_iris
import numpy as np

iris = load_iris()
data = iris.data
# 写法一
# Min-Max 标准化
minMaxScaler = MinMaxScaler().fit(data) 
data_transformed = minMaxScaler.transform(data)
# Z-score标准化
standardScaler = StandardScaler().fit(data)
data_transformed = standardScaler.transform(data)

# 写法二
data_transformed = MinMaxScaler().fit_transform(data)
data_transformed = standardScaler().fit_transform(data)

写法一更为灵活,可以使用返回的scaler对象对相同数据集中的数据进行预处理。比如数据集被分成训练集和测试集时,对训练集进行标准化后得到scaler对象,之后借助其对测试集进行相同的处理。如下

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.dataset import load_iris
from sklearn import svm
import numpy as np

iris = load_iris()
data = iris.data
target = iris.target

X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2)
scaler = MinMaxScaler().fit(X_train)
X_train_transformed = scaler.transform(X_train) # 对训练集进行标准化处理
# 训练
clf = svm.SVC()
clf.fit(X_train_transformed, y_train)
# 测试
X_test_transformed = scaler.transform(X_test) # 对测试集进行标准化处理
y_test_pred = clf.predict(X_test_transformed)

参考资料:

  1. 数据归一化汇总
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个常用的数据标准化方法及Matlab和Python实现 的相关文章

随机推荐

  • Binding几种绑定方式

    绑定到DataContext
  • 离散变量可不可以做方差分析_单因素方差分析

    1 背景 假如你们现在针对用户提出了三种提高客单价的策略A B C D 现在想看一下这三种策略哪种效果好 那我们怎么才能知道这三种策略效果哪个好呢 我们不可能让所有用户体验不同策略 最简单的方法就是做一个实验 我们可以随机挑选一部分用户 然
  • MFC 树形控件CTreeCtrl显示文件路径及文件

    在上篇文章中简单讲述了 MFC单文档分割窗口显示图片 但是我想实现的是左边显示图片的路径 右边显示图片的情况 所以这里需要讲述如何使用控件List Control和Tree Control CListCtrl 列表控件 可以用大图标 小图标
  • C#- FTP递归下载文件

    c ftp递归下载文件 找来找去这个最好 打断点 一小处foreach要改成for
  • Linux系统cif2cell v1.2.10的安装与测试

    本文在最新的Ubuntu版本20 04 LTS系统上安装cif2cell程序的1 2 10版本 cif2cell现已支持多种电子结构计算程序所需的格式输出 常用的CASTEP VASP Quantum Espresso和ABINIT等程序包
  • 6-3 删除字符 (20 分)void delchar( char *str, char c ){ int i,j; i=j=0; while(str[j]){

    这里提供一种全新的思路 因为考虑到数组变换内部一个数值其实需要o n 的时间维度 因此要尽可能的少的进行整个数组的变动 有一种解决方法是另建立一个暂时的数组进行暂存 筛选结束后进行复制 但这样在空间维度上需要o n 这里采用一种虚拟的另设数
  • 游戏开发unity杂项知识系列:抗锯齿处理

    游戏中需要进行抗锯齿处理的地方非常多 这里先写两点 一个是通过使用unity自带的抗锯齿设置 QualitySettings 可以参考下面的连接 QualitySettings也可以通过代码去设置 unity图片抗锯齿设置 LCHUIHUI
  • 【Java】阿里巴巴Java开发手册

    文章目录 前言 一 编程规约 一 命名风格 二 常量定义 三 代码格式 四 OOP 规约 五 集合处理 六 并发处理 八 注释规约 九 其它 二 异常日志 一 异常处理 二 日志规约 三 单元测试 四 安全规约 五 MySQL 数据库 一
  • 服务器无限矿场,深度揭秘人人矿场是如何实现分布式全网算力超600PiB?

    原标题 深度揭秘人人矿场是如何实现分布式全网算力超600PiB Filecoin的封装 指的是将原始数据 订单数据或垃圾数据 经过特定的算法进行反复计算 加密 生成符合Filecoin格式的有效扇区 并将有效扇区最终写入存储进行保存 需要注
  • 神经网络参数的计算

    在神经网络中参数量如何计算呢 卷积层 参数量 核高 times 核宽 times 核通道数
  • wms软件和ERP系统有何不同?

    wms仓库管理系统和ERP仓库管理系统有哪些区别 打个比喻 wms软件好比仓库主管 必须重视对过程中的人 机 料 法 环进行全面管理 而ERP系统就像是仓库经理 会重点关注进销存 wms软件和ERP系统有何不同 wms软件和ERP系统有何不
  • android okgo的使用及简单封装,同时配合Gson传参和返回数据解析

    闲来无事 把网络框架okgo简单的封装了一下 其实这种方法比较简单 步骤如下 1 导入依赖 一般网络请求基本会用到okgo和gosn compile com lzy net okgo 2 0 0 compile com google cod
  • LaTex 点乘,叉乘,点除,分数等常用算法

    点乘 a cdot b 叉乘 a times b 点除 a div b 分数 frac a b 待续
  • AI崛起,剑指终极对决!第二届广州·琶洲算法大赛复赛结果出炉

    广州市人民政府主办 海珠区人民政府 广州市科学技术局 广州市工业和信息化局 广州市政务服务数据管理局 琶洲实验室与北京百度网讯科技有限公司共同承办的 第二届广州 琶洲算法大赛 于2023年4月25日正式启动 共吸引了来自21个国家的国内外3
  • kibana集成内部账号_nginx和kibana/es集成

    利用elk搞了一个日志平台 随着日志越来越多 使用的人反应kibana上查询比较慢 kibana虽然有日志 但记录的信息不全 无法分析到底是什么样的查询比较慢 因此考虑在kibana和elk之间加一个nginx 主要作用有两个 1 记录ki
  • 树的广度遍历

    在二叉树的遍历当中 有一种遍历方法是不常见的 那就是广度遍历 和其他三种遍历方法不同 二叉树的广度遍历需要额外的数据结构来帮助一下 什么数据结构呢 那就是队列 因为队列具有先进先出的特点 这个特点要求我们在遍历新的一层数据之前 必须对上一次
  • java Integer类型比较

    在比较两个new的Integer对象时 不能直接使用 这里比较的是对象的地址 应该调用 equals 方法 Integer i new Integer 888 Integer j new Integer 888 System out pri
  • uniapp 中使用jssdk正确姿势

    这是基于企业项目实战分享 npm方式使用下方进行安装 npm install jweixin module save 安装在项目中的效果如图 接下自己定义个js 引入我们用npm引入的模块 jwx 代码 let jweixin requir
  • html总结

  • 两个常用的数据标准化方法及Matlab和Python实现

    参考 数据归一化和两种常用的归一化方法 博主对原文进行了润色并添加了Matlab和Python实现 数据标准化处理是数据挖掘的一项基础工作 不同评价指标往往具有不同的量纲和量纲单位 这样的情况会影响到数据分析的结果 为了消除指标 特征 之间