现在已经通过大量数据训练出模型,那么在做数据归一化时,要考虑对训练数据和测试数据都要归一化。
但是测试数据在后面是需要当作测试模型性能的工具,它的存在是模拟真实环境。
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