# coding=utf-8from sklearn.preprocessing import MinMaxScalerfrom sklearn.preprocessing import StandardScalerfrom sklearn.preprocessing import Imputerimport numpy as np'''特征预处理:通过特定的统计方法,将数据转换成算法要求的数据 。包括数据缺失,数据填充等数值型数据: 标准缩放: 1、归一化:通过对原始数据进行变换把数据映射到(默认为0,1)之间; 计算公式:x' = (x-min)/(max-min) x'' = x'*(mx-mi)+mi 目的:使得某一个特征对最终结果不会造成更大的影响 弊端:异常点对归一化的最大值最小值影响很大。 适用场景:鲁棒性差,只适合小数据的场景(无异常数据) api:MinMaxScaler(feature_range=(2,4)) MinMaxScaler.fit_transform() 2、标准化:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内 公式:x' = (x-mean)/a 其中mean为平均值;a为标准差 方差:var = ((x1-mean)^2 +(x2-mean)^2+ ....)/n ,其中var为方差,n为每个特征样本数 ;方差可以考量数据的稳定性 标准差:对方差开平方,即var^(1/2) 优点:对异常点没有影响,适合嘈杂数据场景 api:StandardScaler() StandardScaler.fit_transform() StandardScaler.mean_ StandardScaler.with_std 3、缺失值:主要使用pandas处理(np.nan为float类型) 删除:(不建议) dropna() 填充:填充使用列的均值、中位数、众数 fillna() 替换:replace("?",np.nan) Api:Imputer(missing_values='NaN',strategy="mean") Imputer.fit_transform() 类别型数据: one-hot编码时间类型: 时间的切分特征预处理Api: sklearn.preprocessing 归一化Api:'''def mm(): """ 归一化处理 错误1:setting an array element with a sequence. 表示列没有对齐 :return: """ m = MinMaxScaler(feature_range=(2,4)) data = m.fit_transform([[9,2,3],[40,50,4],[34,23,45]]) print(data) return Nonedef stand(): """ 标准化缩放 :return: """ std = StandardScaler() data = std.fit_transform([[9,2,3],[40,50,4],[34,23,45]]) print(data) return Nonedef im(): """ 缺失值处理 :return: """ i = Imputer(missing_values='NaN',strategy='mean',axis=0) result =i.fit_transform([[9,np.nan,3],[np.nan,50,4],[34,23,45]]) print(result) return Noneif __name__ == '__main__': mm() stand() im()