数据处理技巧

1 正则化

通过对损失函数引入正则项,避免模型的过拟合的情况。

正则化的分析:随着$\delta$取值的增大,系数$\theta$趋近于0

#正则化

2 核技巧

将原始样本通过函数进行高维映射,并作为特征进行模型输入,提高模型对于信息的提取能力

比如最常见的高斯核/RBF核(RBF:Radial basis function/径向基函数)

$$k(x,\mu_i,\lambda)=exp{(-\frac{1}{\lambda}||x-\mu_i||^2)}$$

转换过程: $$\phi(x)=[k(x,\mu_1,\lambda),k(x,\mu_2,\lambda),...,k(x,\mu_d,\lambda)]$$

#核技巧

3 归一化处理

正态标准化 $$X_{new} = \frac{X-mean(X)}{std(X)}$$

最大值-最小值标准化 $$X_{new} = \frac{X_{max}-X}{X_{max}-X_{min}}$$

作用

  • 避免不同量级的数据的波动误差

#归一化 #标准化

4 数据平衡

数据偏斜

5 哑变量处理

将一个类别为k的特征编码为一组k-1个衍生哑变量

  • 少一个衍生哑变量是为了避免引起多重共线性
  • 常见的one-hot向量化其实就是哑变量处理的向量化版本

对于一般类别型数据,可以直接使用<code>pd.get_dummies</code>进行哑变量处理:

import pandas as pd

s1 = ['a', 'b', np.nan]
pd.get_dummies(s1, dummy_na=True) # 缺失也单独成类

df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c']})
pd.get_dummies(df, prefix=['col1', 'col2']) # 为结果的列名指定前缀

s2 = ['Action|Adventure|Romance', 'Comedy|Romance', 'Adventure|Children']
s2.str.get_dummies("|") # 特殊用法,直接根据给定间隔符对元素内容进行哑变量处理

在sklearn中也内置了<code>OneHotEncoder</code>类用于数据的哑变量处理:

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X) # 构建OneHot转换器
enc.transform([['Female', 1], ['Male', 4]]).toarray()  # 对新的数据进行OneHot转换
enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]]) # OneHot逆转换

往年同期文章