数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】

本文主要是介绍数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、数据规范化的原理

数据规范化处理是数据挖掘的一项基础工作。不同的属性变量往往具有不同的取值范围,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间由于取值范围带来的差异,需要进行标准化处理。将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。

1.1.最小-最大规范化

clear;clc;
A = [78 521 602 2863144 -600 -521 224595 -457 468 -128369 596 695 1054190 527 691 2051101 403 470 2487146 413 435 2571];new = input("请输入需要映射到的新区间。输入格式示例:[0,1]\n");
new_mi = new(1);
new_mx = new(2);
% 计算每列的最小值和最大值
min_vals = min(A);
max_vals = max(A);% 对每个元素进行最小-最大规范化
normalized_A = (A - min_vals) ./ (max_vals - min_vals)* (new_mx - new_mi) + new_mi;;disp(normalized_A);

MATLAB支持广播机制的,在进行矩阵运算时,可以自动扩展维度较小的矩阵,使其与维度较大的矩阵相匹配,从而实现逐元素的运算。

在MATLAB中,要实现广播机制,需要满足以下条件:

  • 运算的两个矩阵相应维度的大小要么相同,要么其中一个为1。
  • 运算符必须是逐元素的运算符,如.*、./、.\、.^等,不能是矩阵乘法*或矩阵除法/。
  • 如果运算的两个矩阵都是列向量或者行向量,那么它们可以直接进行逐元素运算,无需扩展维度。

disp函数是MATLAB中用于在命令行窗口中显示输出的函数。它可以显示各种类型的数据,包括数字、字符串、矩阵等。 

A = [78 521 602 2863144 -600 -521 224595 -457 468 -128369 596 695 1054190 527 691 2051101 403 470 2487146 413 435 2571];
new = input("请输入需要映射到的新区间。输入格式示例:[0,1]\n");
new_mi = new(1);
new_mx = new(2);
B = mapminmax(A',new_mi ,new_mx)';
fprintf("\n经过最小最大规范化后:\n"); 
disp(B)

Matlab有一个现成的函数可以实现最小-最大规范化,它就是 mapminmax() 函数

[Y,PS] = mapminmax(X,YMIN,YMAX)

其中X是要规范化的矩阵或向量,YMIN和YMAX是指定的区间端点(默认为-1和1),Y是规范化后的矩阵或向量,PS是一个结构体,包含了规范化所用的参数,如最小值、最大值、缩放因子等。如果要对另一个矩阵或向量应用相同的规范化参数,可以使用 mapminmax(‘apply’,X,PS) 函数。

代码运行结果

输入的新区间范围为[0,1]:

原数据:
A =78         521         602        2863144        -600        -521        224595        -457         468       -128369         596         695        1054190         527         691        2051101         403         470        2487146         413         435        2571请输入需要映射到的新区间。输入格式示例:[0,1]
[0,1]经过最小最大规范化后:
B =0.0744    0.9373    0.9235    1.00000.6198         0         0    0.85090.2149    0.1196    0.8133         00    1.0000    1.0000    0.56371.0000    0.9423    0.9967    0.80410.2645    0.8386    0.8150    0.90930.6364    0.8470    0.7862    0.9296

 1.2零-均值规范化

clear;clc;%% 数据存入A
A=[78 521 602 2863	
144 -600 -521 2245	
95 -457 468 -1283
69 596 695 1054
190 527 691 2051
101 403 470 2487
146 413 435 2571];A_mean=mean(A); % mean求的是每列的均值
A_std=std(A); % std求的是每列的标准差
[n,m]=size(A);
B=(A-A_mean)./A_std;fprintf("原数据:"); 
disp(A);
fprintf("经过零均值规范化后:"); 
disp(B);
代码运行结果
原数据:
A =78         521         602        2863144        -600        -521        224595        -457         468       -128369         596         695        1054190         527         691        2051101         403         470        2487146         413         435        2571经过零均值规范化后:
B =-0.9054    0.6359    0.4645    0.79810.6047   -1.5877   -2.1932    0.3694-0.5164   -1.3040    0.1474   -2.0783-1.1113    0.7846    0.6846   -0.45691.6571    0.6478    0.6752    0.2348-0.3791    0.4018    0.1521    0.53730.6504    0.4216    0.0693    0.5956
clear;clc;%% 数据存入A
A=[78 521 602 2863	
144 -600 -521 2245	
95 -457 468 -1283
69 596 695 1054
190 527 691 2051
101 403 470 2487
146 413 435 2571];B = zscore (A); % 沿每列计算标准差fprintf("原数据:"); 
disp(A);
fprintf("经过零均值规范化后:"); 
disp(B);

Matlab有一个现成的函数可以实现零-均值规范化,它就是 zscore() 函数1。这个函数可以计算一个数组或向量中元素的标准差,并返回每个元素的 z 分数,即对数据进行中心化和缩放处理,使其均值为 0,标准差为 1。

Z = zscore (X) % 计算X沿第一个非单一维度的标准差
Z = zscore (X,flag) % 指定标准差的类型
Z = zscore (X,flag,'all') % 使用X中所有值的均值和标准差
Z = zscore (X,flag,dim) % 指定沿哪个维度计算
Z = zscore (X,flag,vecdim) % 指定沿多个维度计算
[Z,mu,sigma] = zscore ( ___) % 还返回均值和标准差

 1.3小数定标规范化

clear;clc;%% 数据存入A
A = [78 521 602 2863144 -600 -521 224595 -457 468 -128369 596 695 1054190 527 691 2051101 403 470 2487146 413 435 2571];mx = max(abs(A)); % 求每列绝对值最大的数mx
len = floor(log10(mx))+1; % 求mx的位数len
B = A ./ (10.^len); % 将A中每个元素除以10^lenfprintf("原数据:\n"); 
disp(A);
fprintf("经过小数定标规范化:\n"); 
disp(B);
代码运行结果
原数据:
A =78         521         602        2863144        -600        -521        224595        -457         468       -128369         596         695        1054190         527         691        2051101         403         470        2487146         413         435        2571经过小数定标规范化后:
B =0.0780    0.5210    0.6020    0.28630.1440   -0.6000   -0.5210    0.22450.0950   -0.4570    0.4680   -0.12830.0690    0.5960    0.6950    0.10540.1900    0.5270    0.6910    0.20510.1010    0.4030    0.4700    0.24870.1460    0.4130    0.4350    0.2571

这篇关于数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989

相关文章

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指