机器学习中训练集和测试集归一化(matlab版)

本文详细介绍了归一化处理在机器学习中的应用,包括不同场景下的归一化方法选择及其实现过程。强调了应针对属性而非单条数据进行归一化,并给出了MATLAB中的实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自   https://blog.youkuaiyun.com/lkj345/article/details/50352385

背景介绍

  1. 归一化后加快了梯度下降求最优解的速度,归一化有可能提高精度。
  2. 训练集和测试集归一化方法相同。
  3. 数据集不小,81*132337,81行表示包含81维属性,132337列表示包含132337条训练数据。
  4. 数据中包含NaN数据。
  5. 使用matlab中的mapminmax函数,归一化到默认的范围[-1 +1]。

  为了方便演示,我们以一个简单的矩阵来说明归一化。

                                          
 这是3*4的矩阵,表示有4条训练数据,每条数据有3个属性。数据归一化应该针对属性,而不是针对每条数据,针对每条数据是完全没有意义的,因为只是等比例缩放,对之后的分类没有任何作用。

 

 针对属性进行归一化的代码

inst = [1 2 3 4; 2 3 4 5; 3 4 5 6];
inst_norm = mapminmax(inst);

 得到的归一化矩阵如下

 

                         


 针对数据进行归一化的代码

inst = [1 2 3 4; 2 3 4 5; 3 4 5 6];
inst_norm = mapminmax(inst')';

 得到的归一化矩阵如下

                                            
 我们应该采用第一种归一化方法,即对属性进行归一化。
 训练集和测试集归一化的方法应该相同。
 网上有一些说法,觉得训练集和测试集应该放到一起进行归一化,我觉得这种做法有所不妥,这样会让测试集受到训练集的影响,导致训练集和测试集不相互独立。
 正确的做法是记录下训练集的归一化方法,用该方法对测试集单独进行归一化,matlab中的mapminmax函数提供了相应的机制。

 

 对于一条新的数据,应该先按照训练集的归一化方法进行归一化,再进行分类,比如对于如下一条新数据,

                                       
 通过如下代码

inst = [1 2 3 4; 2 3 4 5; 3 4 5 6];
[inst_norm, settings] = mapminmax(inst);
test = [1 3 5]';
test_norm = mapminmax('apply', test, settings);

其中settings记录了训练集的归一化方法,得到以下归一化结果,可以参考矩阵(2)

                                    

mapminmax会跳过NaN数据,最好的方法是归一化之后,将NaN赋值成0。

inst_norm(find(isnan(inst_norm))) = 0;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值