数据归一化
1、最值归一化
样本值 - 最小值 / (最大值 - 最小值)
将所有数据映射到 0 - 1 之间 如果存在极值比如收入大部分人收入在1W 有些人收入在1000W
2、均值方差(标准差)归一化
样本值 - 均值 / 方差
把所有数据归一到均值为0方差为1的分布中
s²=((x1-x)²+(x2-x)²+···+(xn-x)²)/n
np.var(x)
作用:衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。
标准层差:s = sqrt(s²)
np.std(x)
注意:数据归一化的目的是为了降低数据的离散程度,以便更好的拟合数据。
训练数据集的归一化:x_train = (x_train - x_train.mean()) / x_train.std()
测试数据集的归一化:x_test = (x_test - x_train.mean()) / x_train.std()
所以是需要保存训练数据集得到的均值和方差
# !/usr/bin/env python3
import matplotlib
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
'''最大值归一化'''
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import numpy as np
'''
数据归一化
1、最值归一化
样本值 - 最小值 / (最大值 - 最小值)
将所有数据映射到 0 - 1 之间 如果存在极值比如收入大部分人收入在1W 有些人收入在1000W
2、均值方差(标准差)归一化
样本值 - 均值 / 方差
把所有数据归一到均值为0方差为1的分布中
s²=((x1-x)²+(x2-x)²+···+(xn-x)²)/n
np.var(x)
作用:衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。
标准层差:s = sqrt(s²)
np.std(x)
注意:数据归一化的目的是为了降低数据的离散程度,以便更好的拟合数据。
训练数据集的归一化:x_train = (x_train - x_train.mean()) / x_train.std()
测试数据集的归一化:x_test = (x_test - x_train.mean()) / x_train.std()
所以是需要保存训练数据集得到的均值和方差
'''
iris = datasets.load_iris()
x = iris.data
y = iris.target
h = y.reshape(-1,1)
'''将特征值'''
data = np.concatenate((x,h),axis=1)
'''随机打乱数据'''
np.random.shuffle(data)
'''获取训练集和测试集'''
train_data = data[:int(len(data)*0.8)]
test_data = data[int(len(data)*0.8):]
'''训练集'''
X_train = train_data[:,0:4]
Y_train = train_data[:,4]
'''测试集'''
X_test = test_data[:,0:4]
Y_test = test_data[:,4]
standardScaler = StandardScaler()
standardScaler.fit(X_train)
'''均值'''
print(standardScaler.mean_)
'''数据分布范围(包含标准差等)'''
print(standardScaler.scale_)
X_train_standard = standardScaler.transform(X_train)
'''测试数据集也必须归一化处理'''
X_test_standard = standardScaler.transform(X_test)
print(X_test_standard)
KNeighborsClassifier_model = KNeighborsClassifier(n_neighbors=3)
KNeighborsClassifier_model.fit(X_train_standard,Y_train)
Y_predict = KNeighborsClassifier_model.predict(X_test_standard)
print(accuracy_score(Y_test,Y_predict))