尊重原创:https://blog.csdn.net/shengchaohua163/article/details/78784984#comments
数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果。为了消除指标(特征)之间的量纲影响,数据集需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。以下是两种常用的归一化方法:
一、 Min-Max标准化
Min-Max标准化称也为离差标准化,是对原始数据的线性变换,使结果值映射到[min, max]之间。转换函数为:
x ∗ =(x−min)/(max−min)
,其中max为原始样本数据的最大值,min为原始样本数据的最小值。这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。
二、Z-score标准化
这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1。转化函数为:
x ∗ =(x−μ)/σ
,其中μ 为原始样本数据的均值,σ 为原始样本数据的标准差。
三、Matlab实现
在Matlab中,Min-Max标准化和Z-score标准化的函数分别是mapminmax和zscore,help查看一下文档吧。
% Min-Max标准化(Min=0,Max=1)
normalized_data = mapminmax(source_data', 0, 1)';
% 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