1.归一化
在sklearn当中,我们使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数,feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]。
#导入库和数据
from sklearn.preprocessing import MinMaxScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]
import pandas as pd
pd.DataFrame(data)
#进行归一化处理
scaler = MinMaxScaler()#实例化
scaler = scaler.fit(data)#fit.在这里是生成min(x)和max(x)
result = scaler.transform(data)#通过接口 导出结果
result
#训练和导出结果
result_x =scaler.transform(data)#训练和导出结果一步达成
result_x
scaler.inverse_transform(result)#将归一化后的结果逆转
#使用numpy处理数据归一化
import numpy as np
X= np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])
#归一化
X_nor= (X - X.min(axis=0)) /(X.max(axis=0) - X.min(axis=0))
X_nor
#逆转归一化
X_returned= X_nor *(X.max(axis=0) - X.min(axis=0)) + X.min(axis=0)
X_returned
2.标准化
当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),而这个过程,就叫做数据标准化(Standardization,又称Z-score normalization)
导
from sklearn.preprocessing import StandardScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]
scaler = StandardScaler()#实例化
scaler.fit(data) #fit,本质是生成均值和方差
scaler.mean_#查看均值的属性
scaler.var_#查看方差的属性
x_std = scaler.transform(data)#通过接口导出结果
x_std
x_std.mean()#导出的结果是一个数组,用mean()查看均值
x_std.std()#查看方差
scaler = StandardScaler()#实例化
scaler.fit_transform(data)#一步达成结果
标准化与归一化比较
大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中StandardScaler往往是最好的选择。
MinMaxScaler在不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时,都会使用MinMaxScaler将数据压缩于[0,1]区间之中。
建议先试试看StandardScaler,效果不好换MinMaxScaler。
import pandas as pd
data = pd.read_csv("D:\ly\desk\数据\实验数据\missing_data.csv",index_col=0)
#将第0列作为索引index_col=0
data.head()#查看数据前五行
#查看数据情况
data.info()
发现B、C列有4个缺失值
B = data.loc[:,"B"].values.reshape(-1,1)#sklearn种特征矩阵必须是二维
B.shape#查看维度
B[:20]#查看前二十行
#使用均值、中位数、0对数据进行填充
from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer()#实例化。默认均值填补
imp_median = SimpleImputer(strategy="median")#用中位数填补
imp_0 = SimpleImputer(strategy="constant",fill_value=0)#用0填补
imp_mean =imp_mean.fit_transform(B)#使用ift_trankform一步完成调取结果
imp_median = imp_median.fit_transform(B)
imp_0 = imp_0.fit_transform(B)
imp_mean[1:20,:]#查看用均值填充的前二十行
imp_0[1:20,:]#查看用0填充的前二十行
imp_median[1:20,:]#查看用中位数填充的前二十行
3、合规性
import re
pattern = r'(13[4-9]\d{8})|(15[01289]\d{8})$'
demo = (input('请输入您的手机号码'))
number = str(demo)
match = re.match(pattern,number)
if match == None:
print('您的手机号码不是中国移动手机号码')
else:
print('您的手机号码是中国移动手机号码')