数据挖掘之3种数据归一化方法及代码实现

学习数据挖掘、机器学习的同学们应该经常碰到数据归一化(也称标准化),数据的不同特征种类(评价指标)的取值范围差别可能很大,如果不做处理会影响数据分析的结果。因此需要把数据进行标准化处理,将数据进行比例缩放,以消除不同特征间量纲和取值范围差异带来的影响。

数据归一化处理对基于距离的数据挖掘算法尤为重要。下面就简要介绍3种常用的数据归一化方法。

1、最大最小归一化

该方法也称离差标准化,其核心思想是把原始数据的数值线性变换到[0,1]之间,公式如下:

其中,max、min分别为样本数据的最大值、最小值。

优点:保留源数据存在的关系,消除取值范围最简单的方法;

缺点:极易受个别离群值影响,如果数据集中某个数值很大,其他各值归一化后会接近0;此外,如果遇到超出[min,max]的值,会出现错误。

2、零-均值归一化

也称标准差归一化,顾名思义,经处理的数据的均值为0,标准差为1,公式如下:

其中,、σ分别为源数据的均值、标准差。

该方法被广泛使用,但均值和标准差也一样易受离群值影响,因此需要进行修正,比如:可用中位数取代均值进行上述计算。

3、小数定标规范化

该方法是通过移动特征数据的小数位数,将其转换到[-1,1]之间,移动的小数位由特征值绝对值的最大值决定,公式如下:

下面来看看3种方法的代码实现:

%读入数据
data='../input/normalizationData.xls';
[data, ~]=xlsread(data);

%方法一:最大最小归一化
data_scatter = mapminmax(data',0,1);  %把数据进行转置
data_scatter = data_scatter';

%方法二:零-均值归一化
data_zscore = zscore(data);

%方法三:小数定标归一化
max_ = max(abs(data));
max_ = power(10, ceil(log10(max_)));
cols = size(max_, 2);
data_dot = data;
for i = 1:cols
     data_dot(:,i) = data(:,i)/max_(1,i);
end


%打印输出结果
disp('源数据如下:');
disp(data);

disp('最大最小归一化结果如下:');
disp(data_scatter);

disp('零-均值归一化结果如下:');
disp(data_zscore);

disp('小数定标归一化结果如下:');
disp(data_dot);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值