scikit-learn中KNN算法数据归一化的分装

现在已经通过大量数据训练出模型,那么在做数据归一化时,要考虑对训练数据和测试数据都要归一化。

但是测试数据在后面是需要当作测试模型性能的工具,它的存在是模拟真实环境。

1,真实环境是很可能无法得到所有测试数据的均值和方差的。

2,而且数据归一化是KNN算法的一部分。

比如,预测一朵花的类型,由一个数据是不能得到方差和均值的。

所以,对于测试数据应该使用训练数据的均值和方差进行数据归一化。

Xscale = (X_test - mean_train)/std_train

经过数据归一化的预测流程如下:

只涉及到了均值方差的方法

import numpy as np

class StandardScaler:
    def __init__(self):
        """初始化"""
        """用符号和下划线表示非用户传入的参数"""
        self.mean_ = None
        self.std_ = None

    def fit(self,X):
        """根据训练数据获得每一列的均值和方差"""
        """只处理2维的数据"""
        assert X.ndim == 2
        self.mean_ = np.array([np.mean(X[:,i]) for i in X.shape[1]])
        self.std_ = np.array([np.std(X[:,i]) for i in X.shape[1]])
        return  self

    def transform(self,X):
        """根据公式和求的均值方差求出数据归一化的矩阵"""
        assert X.ndim  == 2
        assert self.mean_ and self.std_ is not None
        """建立一个和X大小,数据类型一样的矩阵,用来存放归一化后的数据"""
        resx = np.empty(shape = X.shape,dtype= float)
        for col in range(X.shape[1]):
            resx[:,col] = (X[:,col] - self.mean_[col]) /self.std_[col]
        return resx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值