标准化/归一化
数据之间的量纲相差很大,需要把特征归一化和标准化。
涉及梯度下降的模型和距离计算的模型需要进行。因为做梯度下降时梯度的更新是沿着坡度来,特征量纲不一致时,较大数值的变量就会对梯度造成很大的影响,相反其他较小的变量,就很难对梯度更新的方向造成影响。再比如计算距离时候,欧式距离计算两个点之间的距离,在特征量纲不一致时,计算距离会变得很大或很小。
不需要标准化的模型如决策树、随即森林,boosting,他们不涉及距离的计算。树模型考虑的每一个变量的变动程度,变量是否做标准化对衡量变量的变动没有影响。
标准化:
(特征-平均数)/标准差 #让数据符合平均数为0,标准差为1的高斯分布。
(数据-min)/(max-min) #将数据压缩到(0,1)固定的范围,如(0,1)之间。
#标准化
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(x_train)
x_train_ss = ss.transform(x_train)
x_test_ss = ss.transform(x_test)
#把数据压缩在固定的范围
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler([0,2])
mms.fit(x_train)
x_train_mms = mms.transform(x_train)
x_test_mms = mms.transform(x_test)
#Normalization针对的是一个样本。应用场景:在计算样本与样本之间的计算需要用到。还有文本分类,计算词语与词语的计算。
from sklearn.proprecessing import Normalizer
norm = Normalizer()
norm.fit(x_train)
x_train_norm = norm.transform(x_train)
x_test_norm = norm.transform(x_test)
分类值
连续型数值离散化
binarization:把连续型变量离散化,好处是用0,1形式表示,当一个矩阵很多单元为零时,可以用稀疏矩阵表示,稀疏矩阵储存空间小,计算速度快。logisiticregresion偏好这种。可以处理missing value,处理为一类。
#划分为两类
import sklearn.preprocessing import Binarizer
bi = Binarizer(546)
bi.fit_transform(df['DC'])
#用cut均匀划分
pd.cut(df['DC'], 5) #可以用百分位数位bins来划分
离散型数据处理
onehotencoder #只接受整数型数据
get_dummies #推荐使用
pd.get_dummies(data = df, columns =['month','day'] #自动替换了需要处理的数据
missing value
sklearn里的任何模型都不接受missing value
missing value 直接删除,改变了数据的分布,损失样本
可以使用填充的方式处理missing value
1、用均值、众数填充
2、用其他特征拟合
3、填充无意义的数据代替,如-999。df.fillna(-999)
from sklearn.preprocessing import Imputer
im = Imputer()
im.fit_transform(df['DC'])