机器学习 之数据归一化

目标:将所有数据映射到同一尺度

最值归一化:把所有数据映射到0-1之间

x s c a l e = x − x m i n x m a x − x m i n x_{scale}=\frac{x -x_{min}}{x_{max} -x_{min}} xscale=xmaxxminxxmin
适用于分布有明显的边界 ;受outlier影响较大
受某些 outlier数据影响可能使分布不合理

    for m in range(x.shape[1]):
        x[:,m]= (x[:,m] - np.min(x[:,m]))/(np.max(x[:,m]) - np.min(x[:,m]))

在这里插入图片描述
MEANS:0.47375
STD:0.31499173269574343

均值方差归一化 standardization

数据分布没有明显的边界;有可能存在极端数据值
均值方差归一化:把所有数据诡异到均值为0方差为1的分布中
X s c a l e = X − X m e a n S X_{scale} = \frac{X-X_{mean}}{S} Xscale=SXXmean

    for m in range(x.shape[1]):
        x[:,m] = (x[:,m] - np.mean(x[:,m]))/np.std(x[:,m])

在这里插入图片描述
MEANS:-5.773159728050814e-17
STD:1.0

如果在测试数据及上 该怎么归一化

  • 真实环境可能不能得到所有测试的均值和方差

  • 对数据归一化也是算法的一部分

    (X_test- mean_train)/std_train在这里插入图片描述
    对测试数据 使用归一化 通过Scalar 将训练样本的 均值 方差 计算出来 应用在再对 测试集数据使用 训练数据集的参数进行归一化

#导入StandardScaler
from sklearn.preprocessing import StandardScaler
#初始化StandardScaler 
standardScaler = StandardScaler()
#计算 训练集 的标准差 平均值
standardScaler.fit(x_train)
#平均值
standardScaler.mean_
#标准差
standardScaler.with_std
x_test_standard = standardScaler.transform(x_test)

实现代码

import numpy as np

class StandardScaler:
    def __init__(self):
        self.mean_ =None
        self.scale_ =None
    def fit(self,X):
        """根据训练数据集X获得数据的均值和方差"""
        assert X.ndim == 2,"The dimension of must be 2"
        self.mean_= np.array([np.mean(X[:,i]) for i in range(X.shape[1])])
        self.scale_ = np.array([np.std(X[:, i]) for i in range(X.shape[1])])
        return self
    def tranform(self,X):
        """"""
        assert X.ndim == 2, "The dimension of must be 2"
        assert self.mean_ is not None and self.scale_ is not None,\
        "must fit before tranform"
        assert X.shape[1] == len(self.mean_),\
            "the feature number of X must equal to mean_ and std_ "
        resX = np.empty(shape=X.shape,dtype=float)
        for col in range(X.shape[1]):
            resX[:,col] = (X[:,col] - self.mean_[col])/self.scale_[col]
        return resX

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值