实战分类模型之数据归一化

归一化分为两部分:1、对数据进行归一化 2、批归一化

在本博文中记录对数据进行归一化,批归一化在后面博文中介绍

#数据归一化:x = (x-u)/std, 减均值,除方差,数据服从均值是0,方差是1的正态分布。
# x = (x - u) / std
#实现归一化
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
# x_train: [None, 28, 28] -> [None, 784]
"""训练集之前的类型是np.int,因为要做除法,所以先转成float32"""
"""fit_transform的输入必须是二维矩阵[n_examples, features],
    fit_transform会在每个feature上单独计算均值和方差然后做归一化,
    我们在这里需要的是全局的均值和方差,所以最后一维是1."""
x_train_scaled = scaler.fit_transform(
    x_train.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
#验证集和测试集的归一化也需要用训练集的均值与标准差。
x_valid_scaled = scaler.transform(
    x_valid.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
x_test_scaled = scaler.transform(
x_test.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)

使用的数据集是10分类的28*28的图片数据集,下面在具体介绍一下fit_transform的用法示例:

>>> from sklearn.preprocessing import StandardScaler
>>> data = [[0, 0], [0, 0], [1, 1], [1, 1]]
>>> scaler = StandardScaler()
>>> print(scaler.fit(data))
StandardScaler()
>>> print(scaler.mean_)
[0.5 0.5]
>>> print(scaler.transform(data))
[[-1. -1.]
 [-1. -1.]
 [ 1.  1.]
 [ 1.  1.]]
>>> print(scaler.transform([[2, 2]]))
[[3. 3.]

输入为4x2的矩阵,得到的均值有两个,4是样本数目,2是feature数目,所以这个操作是为每个特征求一个均值和方差,去做归一化。再看看我们的需求,我们的需求是给给定所有的图片,每张图片有28*28个像素点,然后我们需要计算所有图片的所有像素点上的均值和方差,注意,只要一个均值和方差。所以我们把最后以为设成1。同理,如果你想给图片的每个位置分别计算均值和方差,那么输入就应该是[None, 28 * 28]。

note:

问题一:
StandardScaler类中transform和fit_transform方法有什么区别?

答:fit_transform方法是fit和transform的结合,fit_transform(X_train) 意思是找出X_train的均值和方差,并应用在X_train上。
这时对于X_test和X_valid,我们就可以直接使用transform方法。因为此时StandardScaler已经保存了X_train的均值和方差。
问题二:
为什么可以用训练集的均值和方差 来transform 测试集的数据X_test?

机器学习中有很多假设,这里假设了训练集的样本采样足够充分。
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
处理MNIST数据集时,对数据进行归一化是很重要的。归一化是将数据缩放到一个特定的范围内,通常是将数据映射到0到1之间。这可以帮助我们更好地训练模型并提高模型的性能。 对于MNIST数据集,一种常用的归一化方法是将像素值除以255,这样可以将像素值转化为0到1之间的浮点数。这个方法可以确保所有的像素值都处于相同的范围内,使得模型更容易学习到有效的特征。 在使用PyTorch框架下载和读取MNIST数据集时,可以通过使用torchvision.transforms模块中的ToTensor()方法来进行归一化操作。ToTensor()方法将图像转换为张量,并将像素值除以255,从而实现了归一化。 因此,对于mnist数据归一化的方法是将像素值除以255,可以使用PyTorch框架中的ToTensor()方法来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [图像识别-MNIST分类问题](https://blog.csdn.net/weixin_45753078/article/details/121480857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【PyTorch】KNN实战之MNIST数据分类归一化处理](https://blog.csdn.net/qq_44833724/article/details/123526142)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值