数据归一化
数据归一化:即特征值的缩放
解决方法:将所有的数据映射到同一尺度
矩阵按照列进行归一化
最值归一化
normalization:将所有的数据映射到0~1之间
适应于数据有明显边界的情况,受outlier影响较大
x_scale = (x - x_min)/(x_max - x_min)
均值方差归一化
standardization:把所有数据归一到均值为0方差为1的分布中
适用于数据没有明显边界,可能存在极端数据值的情况
x_scale = (x - x_mean)/S
scikit-learn中的scaler
对测试数据集要如何进行归一化处理
要用训练数据集得到的均值和方差进行归一化处理
(x_test - mean_train) / std_train
用scaler类计算训练数据集中的均值和方差,并将结果保存在scaler类中,后续数据直接进入scaler进行处理。
In [400]: from sklearn.preprocessing import StandardScaler
In [401]: standardScaler = StandardScaler()
#经过下面这一步后,scaler中就存放了均值方差归一化所需要的信息
In [402]: standardScaler.fit(X_train)
Out[402]: StandardScaler(copy=True, with_mean=True, with_std=True)
#进行归一化处理
In [407]: X_train = standardScaler.transform(X_train)
In [410]: X_test_standard = standardScaler.transform(X_test)
使用归一化后的数据进行knn分类
In [426]: from sklearn.neighbors import KNeighborsClassifier
...: knn_clf = KNeighborsClassifier(n_neighbors=3)
...: knn_clf.fit(X_train,y_train)
Out[426]:
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=1, n_neighbors=3, p=2,
weights='uniform')
In [427]: knn_clf.score(X_test_standard,y_test)
Out[427]: 1.0