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逆转换