一、特征工程
1.1 特征处理
1.1.1 特征清洗
- 删除异常数据
1.1.2 去量纲
-
Max-Min
X n o r m = X − X m i n X m a x − X m i n X_{norm} = \frac{X-X_{min}}{X_{max}-X_{min}} Xnorm=Xmax−XminX−Xmin -
z-score
z = x − μ σ z = \frac{x-\mu}{\sigma} z=σx−μ -
归一化
x ′ = x ∑ j = 1 n ( x j ) 2 x^{'} = \frac{x}{\sqrt{\sum_{j=1}^{n}(x_j)^2}} x′=∑j=1n(xj)2x
1.1.3 离散化
-
序列编码
序列转换成数字,保留优先级,如高中低 ==> 3、2、1 -
one-hot
序列转换成数字,不保留优先级,如血型A、B、O、AB分别对应(1,0,0,0)、(0,1,0,0)、(0,0,1,0)、(0,0,0,1)
维度太高的时候可以使用hash来降维,或者改成稀疏向量的形式 -
二进制编码
如血型A、B、O、AB分别对应(0,0,1)、(0,1,0)、(0,1,1)、(1,0,0) -
word2vec
1.1.4 缺失值处理
- 平均值填充
- 0填充
- 删除
1.1.5 特征变换
- 生成多项式特征
- 图像随机旋转、平移、缩放、裁剪、填充、翻转
- 图像像素增加噪声扰动
- 图像颜色变换
- 图像改变亮度、清晰度、对比度、锐度
1.2 特征选择
特征选择的两个标准
- 特征是否发散
如果特征不发散,方差接近于0,样本在这个特征上基本上没有差异,所以特征并没有什么用 - 特征与目标的相关性
与目标相关性高的特征,应当优选选择
1.2.1 过滤法(filter)
按照发散性或者相关性对各个特征进行评分,选择特征
- 方差选择,方差越大越好
- 相关系数,和label的相关系数越高越好
- 卡方检验
- 信息增益,信息增益越大越好
1.2.2 包装法(wrapper)
通过目标函数(AUC/MSE)来决定是否要新加入一个变量
1.2.3 集成法(embedded)
先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣
1.3 特征降维
- PCA(主成分分析,Principal Components Analysis)
寻找合适的超平面,能有最大化的投影方差,让映射后的样本具有最大的发散性,无监督的方法 - LDA(线性判别分析,Linear Discriminant Analysis)
找到一个合适的投影超平面,让映射后的样本有最好的分类性能,有监督的方法
二、模型评估
2.1 分类模型评估
交叉验证矩阵
预测-假 | 预测-真 | |
---|---|---|
真实-假 | True Negatives | False Positives |
真实-真 | False Negatives | True Positives |
所有的,都是在描述模型输出结果
- T : True 表示判断正确 ;F : False 表示判断错误
- P : PostIve 表示判断该样本为正样本; N : Negative 表示判断该样本为负样本
- TP : (T)该判断正确,§判断该样本为正样本(事实上样本为正)
- FP : (F)该判断错误,§判断该样本为正样本(事实上样本为负)
- TN : (T)该判断正确,(N)判断该样本为负样本(事实上样本为负)
- FN : (F)该判断错误,(N)判断该样本为负样本(事实上样本为正)
- 准确率 precision:预测是1的数据里面有多少是真1
- 召回率 recall: 真1里面有多少被发现找到了
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision = \frac{TP}{TP+FP}
Precision=TP+FPTP
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall = \frac{TP}{TP+FN}
Recall=TP+FNTP
F
1
=
2
1
P
+
1
R
=
2
P
R
P
+
R
F1 = \frac{2}{\frac{1}{P}+\frac{1}{R}}=\frac{2PR}{P+R}
F1=P1+R12=P+R2PR
A
c
c
u
r
a
t
e
=
T
P
+
T
N
T
N
+
F
N
+
F
P
+
T
P
Accurate = \frac{TP+TN}{TN+FN+FP+TP}
Accurate=TN+FN+FP+TPTP+TN
-
P-R曲线
横坐标:召回率
纵坐标:准确率
P-R曲线是通过将阈值从高到低移动而生成的 -
ROC曲线
横坐标:FPR 假阳性率(False Positive Rate)
纵坐标:TPR 真阳性率(True Positive Rate)召回率
ROC曲线是通过将阈值从高到低移动而生成的
随机分类算法的ROC曲线是一条直线
当正负样本的比例发生变化时,ROC曲线相比于P-R曲线会更为稳定 -
AUC
是ROC曲线的面积,表示任意取两个样本,正样本的score大于负样本的score的概率
A perfect classifier will have a ROC AUC equal to 1
A purely random classifier will have a ROC AUC equal to 0.5
2.1.1 准确率 VS 召回率
increasing precision reduces recall, and vice versa
- 用阈值来判断分类结果,阈值越大结果越准(准确率越高),选出来的正例越少(召回率越低)
- 画出阈值 -(准确率、召回率、F1)曲线
- 画出recall-precision曲线
- 阈值取多少,取决于你的系统要求
寻找犯罪,要求高recall,宁可错抓一把,不能发过一个;
推荐系统,更在乎准确率
2.1.2 PR曲线 VS ROC曲线
- PR曲线选阈值
- ROC曲线选模型
2.2 回归模型评估
- SSE 和方差
S S E = ∑ i = 1 n ( y ( i ) − p ( i ) ) 2 SSE = \sum_{i=1}^{n}(y^{(i)}-p^{(i)})^2 SSE=i=1∑n(y(i)−p(i))2 - MSE 均方方差
M S E = 1 n ∑ i = 1 n ( y ( i ) − p ( i ) ) 2 MSE = \frac{1}{n}\sum_{i=1}^{n}(y^{(i)}-p^{(i)})^2 MSE=n1i=1∑n(y(i)−p(i))2 - RMSE 均方根
R M S E = 1 n ∑ i = 1 n ( y ( i ) − p ( i ) ) 2 RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y^{(i)}-p^{(i)})^2} RMSE=n1i=1∑n(y(i)−p(i))2 - MAPE 平均绝对百分比误差(mean absolute percent error)
M A P E = 100 n × ∑ i = 1 n ∣ y ( i ) − p ( i ) y ( i ) ∣ MAPE = \frac{100}{n} \times \sum_{i=1}^{n}| \frac{y^{(i)}-p^{(i)}}{y^{(i)}} | MAPE=n100×i=1∑n∣y(i)y(i)−p(i)∣
2.3 聚类算法评估
-
评估聚类随机程度 —— 霍普金斯统计量H
从所有样本中随机寻找n个点,P,再寻找离每个点最近的点x,计算px的距离x;
从所有样本中寻找n个点,q,再寻找最近点y,计算qy的距离y
H = ∑ i = 1 n y i ∑ i = 1 n x i + ∑ i = 1 n y i H = \frac{\sum_{i=1}^{n}y_i}{\sum_{i=1}^{n}x_i + \sum_{i=1}^{n}y_i} H=∑i=1nxi+∑i=1nyi∑i=1nyi
随机分布H=0.5,H值越大聚类效果越好 -
评估聚类质量 —— 轮廊系数
a( p )表示p与同簇其他点之间的平均距离
b( p )表示离p最近的一个族中所有点到p的平均距离
轮廊系数可以衡量族与簇的距离、族自己的紧凑程度
s ( p ) = b ( p ) − a ( p ) m a x { b ( p ) , a ( p ) } s(p) = \frac{b(p)-a(p)}{max{\{ b(p),a(p) \}}} s(p)=max{b(p),a(p)}b(p)−a(p) -
均方根标准偏差
-
R方
三、模型优化
3.1 主要解决的挑战
3.1.1 bad data
- Insufficient Quantity of Training Data 数据不够
- Nonrepresentative Training Data 数据不具有代表性
- Poor-Quality Data 很多脏数据
- Irrelevant Features 一些毫无相关性的属性
3.1.2 bad algorithm
3.1.2.1 过拟合 (Overftting the Training Data) 降低复杂度
Overfitting happens when the model is too complex relative to the amount and noisiness of the training data.
- 获得更多的数据
- 降低模型复杂度
- 增加正则项
- 集成学习方法
3.1.2.2 欠拟合 (Underftting the Training Data) 增加复杂度
- 增加新特征
- 增加模型复杂度
- 减小正则项
3.2 损失函数
-
0-1损失函数
预测值和目标值不相等为1,否则为0
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( x ) 0 , Y = f ( x ) L(Y, f(X)) = \left\{\begin{matrix} 1, & Y \neq f(x)\\ 0, & Y = f(x) \end{matrix}\right. L(Y,f(X))={1,0,Y=f(x)Y=f(x) -
绝对值损失函数
L ( Y , f ( X ) ) = ∣ Y − f ( x ) ∣ L(Y, f(X)) = | Y - f(x) | L(Y,f(X))=∣Y−f(x)∣ -
log对数损失函数
L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y, P(Y|X)) = -logP(Y|X) L(Y,P(Y∣X))=−logP(Y∣X) -
平方损失函数
L ( Y ∣ f ( x ) ) = ∑ ( Y − f ( X ) ) 2 L(Y | f(x)) = \sum(Y-f(X))^2 L(Y∣f(x))=∑(Y−f(X))2 -
指数损失函数
L ( Y ∣ f ( x ) ) = e x p [ − y f ( X ) ] L(Y | f(x)) = exp[-yf(X)] L(Y∣f(x))=exp[−yf(X)] -
Hinge损失函数
L ( y ) = m a x ( 0 , 1 − t y ) L(y) = max(0, 1-ty) L(y)=max(0,1−ty)
3.3 正则项与Early Stopping
-
Ridge Regression 岭回归 L2
a 1 2 ∑ i = 1 n θ i 2 a\frac{1}{2} \sum_{i=1}^{n}\theta_i^2 a21i=1∑nθi2 -
Lasso Regression 套索回归 L1
completely eliminate the weights of the least important features (i.e., set them to zero), 对重要性不高的特征打压比较重
a ∑ i = 1 n ∣ θ i ∣ a\sum_{i=1}^{n}|\theta_i| ai=1∑n∣θi∣ -
Elastic Net 弹性网络
a middle ground between Ridge Regression and Lasso Regression
r a ∑ i = 1 n ∣ θ i ∣ + ( 1 − r ) a 1 2 ∑ i = 1 n θ i 2 ra\sum_{i=1}^{n}|\theta_i| + (1-r)a\frac{1}{2} \sum_{i=1}^{n}\theta_i^2 rai=1∑n∣θi∣+(1−r)a21i=1∑nθi2 -
如何选择惩罚方式
- Ridge is a good default
- 假设你怀疑有一些特征不重要的时候,you should prefer Lasso or Elastic Net,通常Elastic Net is preferred over Lasso
-
Early Stopping
stop training as soon as the validation error reaches a minimum suspect,欠拟合和过拟合之间的拐点也就是验证集误差最小的点,毕竟训练误差会一直在下降
使用BGD时,遇到最低点就可以停止;使用SGD、MBGD就需要多观察一会儿看看会不会有更小值
四、经典机器学习
4.1 liner regression
-
假设函数:
h θ ( x ) = θ T X = ∑ i = 0 n θ i x i = θ 0 + θ 1 x 1 + ⋯ + θ n x n h_\theta(x) = \theta^TX = \sum_{i=0}^{n}\theta_ix_i = \theta_0 + \theta_1x_1 + \cdots + \theta_nx_n hθ(x)=θTX=i=0∑nθixi=θ0+θ1x1+⋯+θnxn -
损失函数:
J ( θ ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1∑m(h(x(i))−y(i))2 -
正规方程求解:
X = ( x 0 ( 1 ) x 1 ( 1 ) ⋯ x n ( 1 ) x 0 ( 2 ) x 1 ( 2 ) ⋯ x n ( 2 ) ⋯ ⋯ ⋯ ⋯ x 0 ( m ) x 1 ( m ) ⋯ x n ( m ) ) X = \begin{pmatrix} x_0^{(1)} & x_1^{(1)} & \cdots & x_n^{(1)} \\ x_0^{(2)} & x_1^{(2)} & \cdots & x_n^{(2)} \\ \cdots & \cdots & \cdots & \cdots \\ x_0^{(m)} & x_1^{(m)} & \cdots & x_n^{(m)} \\ \end{pmatrix} X=⎝⎜⎜⎜⎛x0(1)x0(2)⋯x0(m)x1(1)x1(2)⋯x1(m)⋯⋯⋯⋯xn(1)xn(2)⋯xn(m)⎠⎟⎟⎟⎞
θ = ( X T X ) − 1 X T Y \theta = (X^TX)^{-1}X^TY θ=(XTX)−1XTY -
梯度下降求解:
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 , . . . ) ( s i m u l a t e − f o r j = 0 , 1 , 2 , . . . ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\theta_0, \theta_1, ...) \qquad (simulate - for \quad j=0,1,2,...) θj:=θj−α∂θj∂J(θ0,θ1,...)(simulate−forj=0,1,2,...)
开始梯度下降之前:
- 梯度下降对特征的值敏感,不同的特征取值差别太大会影响收敛效率,所以需要对特征进行归一化
- 初始点不同可能导致的求解的结果不一样
- 学习率太小,则学习时间太长;学习率太大,可能会错过最低点,最终在最低点来回摆动而无法到达最优
梯度下降中:
- 求解的最低点导数为0,越接近最低点倒数绝对值越小,所以theta的变化也就越小
- 每次迭代一个theta都需要用全量的数据,消耗资源多
梯度下降后:
- 绘制梯度下降曲线,横坐标是迭代次数,纵坐标是损失函数的值。正常情况下曲线应该是单调递减,最后趋近稳定
几种梯度下降方法:
- Batch Gradient Descent
- 每一次迭代都需要使用全量的训练数据X
- 超参数
学习率eta, 可以用grid search去找一个
总迭代次数n_iterations, 用两次迭代之间的cost变化值,来衡量最大迭代次数选择的好坏
- Stochastic Gradient Descent
随机的选择一个实例进行梯度下降- 优点
much faster
makes it possible to train on huge training sets
has a better chance of finding the global minimum than Batch Gradient Descent does 因为随机,所以更有可能找到全局最优解,而不是局部最优 - 缺点
much less regular than Batch Gradient Descent
最后只会在最小值附近徘徊,并不会停在最优解上 - One Solution
simulated annealing
一开始的时候大学习率, 更好的跳出局部最优
接着就逐渐的降低学习率, 更好的收敛到最优解 - learning schedule 控制学习率
learning rate is reduced too quickly, you may get stuck in a local minimum, or even end up frozen halfway to the minimum
learning rate is reduced too slowly, you may jump around the minimum for a long time and end up with a suboptimal solution if you halt training too early
- 优点
- Mini-batch Gradient Descent
不同于批量梯度下降(每次处理全部实例的梯度),也不同于随机梯度下降(每次只处理一个实例的梯度),每次处理一小批实例的梯度(computes the gradients on small random sets of instances)- 优势
对比SGD,更加稳定规则,结果更接近最优解 - 劣势
对比SGD,跳出局部最优稍微难一些
- 优势
4.2 logistic regression
- 假设函数:
h θ ( x ) = g ( θ T X ) = 1 1 + e − θ T X ( S i g m o i d 函 数 ) h_\theta(x) = g(\theta^TX)=\frac{1}{1+e^{-\theta^TX}} \qquad \qquad \qquad (Sigmoid函数) hθ(x)=g(θTX)=1+e−θTX1(Sigmoid函数)
{ θ T X 小 于 0 = ⇒ h θ ( x ) < 0.5 = ⇒ y = 0 θ T X > 0 = ⇒ h θ ( x ) > 0.5 = ⇒ y = 1 θ T X = 0 = ⇒ h θ ( x ) = 0.5 = ⇒ 决 策 边 界 \begin{cases} & \theta^TX小于0 =\Rightarrow h_\theta(x) < 0.5 =\Rightarrow y=0 \\ & \theta^TX>0 =\Rightarrow h_\theta(x) > 0.5 =\Rightarrow y=1\\ & \theta^TX=0 =\Rightarrow h_\theta(x) = 0.5 =\Rightarrow 决策边界 \end{cases} ⎩⎪⎨⎪⎧θTX小于0=⇒hθ(x)<0.5=⇒y=0θTX>0=⇒hθ(x)>0.5=⇒y=1θTX=0=⇒hθ(x)=0.5=⇒决策边界
- 损失函数
线性回归的代价函数是平方损失函数,将逻辑回归的假设函数代入公式后的损失函数是一个非凸函数,有很多个局部最优解,没有办法快速的获得全局最优解,于是我们就用上了最大似然估计:
J
(
θ
)
=
{
if y=1 then
−
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
if y=0 then
−
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
J(\theta)=\begin{cases} & \text{if y=1 then } -y^{(i)}log(h_\theta(x^{(i)}) \\ & \text{if y=0 then } -(1-y^{(i)})log(1-h_\theta(x^{(i)})) \end{cases}
J(θ)={if y=1 then −y(i)log(hθ(x(i))if y=0 then −(1−y(i))log(1−hθ(x(i)))
J ( θ ) = 1 m ∑ i = 1 m ( − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) J(\theta)=\frac{1}{m}\sum_{i=1}^{m}(-y^{(i)}log(h_\theta(x^{(i)})) - (1-y^{(i)})log(1-h_\theta(x^{(i)}))) J(θ)=m1i=1∑m(−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i))))
4.3 决策树
-
决策树损失函数
J ( k , t k ) = m l e f t m G l e f t + m r i g h t m G r i g h t ( G m e a s u r e s t h e i m p u r i t y o f t h e s u b s e t ) J(k, t_k)=\frac{m_{left}}{m}G_{left} + \frac{m_{right}}{m}G_{right} \;\; (G \; measures \; the \; impurity \; of \; the \; subset) J(k,tk)=mmleftGleft+mmrightGright(Gmeasurestheimpurityofthesubset) -
基尼指数
G i n i i = 1 − ∑ k = 1 n p i , k 2 Gini_i=1-\sum_{k=1}^{n}p_{i,k}^2 Ginii=1−k=1∑npi,k2 -
香农指数
H i = − ∑ k = 1 , p i , k ≠ 0 n p i , k l o g ( p i , k ) H_i=-\sum_{k=1,p_{i,k}\neq 0}^{n}p_{i,k}log(p_{i,k}) Hi=−k=1,pi,k=0∑npi,klog(pi,k)
4.4 Kmeans
-
损失函数:
J ( c , μ ) = ∑ i = 1 M ∣ ∣ x i − μ c i ∣ ∣ 2 J(c, \mu) = \sum_{i=1}^{M}||x_i-{\mu}_{c_i}||^2 J(c,μ)=i=1∑M∣∣xi−μci∣∣2 -
调优策略:
数据归一化、去除离群点噪声、合理的选择K值(手肘法)、采用核函数 -
缺点:
需要手动设置K值、受初始值影响比较大、受噪声影响大、样本只能被分到一个类别 -
优化算法:kmeans++
初始化第n+1个聚类中心的时候,尽可能的选择里0-n个点比较远的点
五、集成学习
5.1 Voting Classifers
- aggregate the predictions of each classifier and predict the class that gets the most votes
- this voting classifier often achieves a higher accuracy than the best classifier in the ensemble
- Ensemble methods work best when the predictors are as independent from one another as possible,One way is to use very different training algorithms
voting_clf = VotingClassifier(
estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],
# 有两种投票方式
# voting='hard', 选出被投票次数最多的分类
# voting='soft', 选所有分类中预测概率最大的分类
voting='hard'
)
voting_clf.fit(X_train, y_train)
5.2 Bagging and Pasting
- 用同一个算法不断的抽样训练
有放回的抽样 —— Bagging (bootstrap aggregating)
无放回的抽样 —— Pasting - Bagging VS Pasting
bagging slightly higher bias than pasting
pasting slightly higher variance than bagging - 训练可以并行
- Out-of-Bag Evaluation
从统计学上来说,有放回的抽样可以触达大概63%的样本,剩下的37%样本可以作为验证集来使用,out-of-bag 简称oob
5.3 Boosting
将弱模型组合起来成为更强大的模型
5.3.1 AdaBoost
- 先训练一个模型,然后预测训练数据,找出预测错误的样本,加大权重,继续训练一个新的模型,再预测,再训练
- The algorithm stops when the desired number of predictors is reached, or when a perfect predictor is found
- Adaboost不支持并行,下一个模型的生成必须依赖于上一个模型预测完的结果
第j个模型的错误率,instance weight w(i) is initially set to 1/m
r
j
=
∑
i
=
1
,
y
(
i
)
^
≠
y
(
i
)
m
w
(
i
)
∑
i
=
1
m
w
(
i
)
r_j= \frac{\sum_{i=1,\hat{y^{(i)}} \neq y^{(i)}}^{m}w^{(i)}}{\sum_{i=1}^{m}w^{(i)}}
rj=∑i=1mw(i)∑i=1,y(i)^=y(i)mw(i)
第j个模型的权重,准确率越高,权重值越大,随机模型权重为0
α
j
=
η
l
o
g
r
j
1
−
r
j
\alpha_j=\eta log \frac{r_j}{1-r_j}
αj=ηlog1−rjrj
更新每一个样本的权重值
f
o
r
i
=
1
,
2
⋯
m
w
(
i
)
←
{
w
(
i
)
i
f
y
(
i
)
^
=
y
(
i
)
w
(
i
)
e
x
p
(
α
j
)
i
f
y
(
i
)
^
≠
y
(
i
)
\begin{aligned} &for \; i= 1, 2 \cdots m \\ &w^{(i)} \leftarrow \begin{cases} w^{(i)} \quad &if \; \hat{y^{(i)}}=y^{(i)} \\ w^{(i)}exp(\alpha_j) \quad &if \; \hat{y^{(i)}} \neq y^{(i)} \end{cases} \end{aligned}
fori=1,2⋯mw(i)←{w(i)w(i)exp(αj)ify(i)^=y(i)ify(i)^=y(i)
归一化,然后训练下一个模型…
预测结果是由所有的N个模型投票,选出sum权重最高的分类
y
^
(
x
)
=
a
r
g
m
a
x
k
∑
y
j
^
(
x
)
=
k
j
=
1
N
α
j
\hat{y}(x) = \underset{k}{argmax}\sum_{\overset{j=1}{\hat{y_j}(x)=k}}^{N}\alpha_j
y^(x)=kargmaxyj^(x)=kj=1∑Nαj
5.3.2 Gradient Boosting
- 先训练一个模型,然后预测,将y-y_pre赋值给新y,再训练一个模型,and so on
- 最后预测的结果等于SUM所有的模型预测结果
5.4. Stacking
- short for stacked generalization 组合泛化
- blender
多训练一个预测结果处理模型-blender,将多个模型的预测结果作为输入,输出一个最终的结果,替换之前的vote模式 - 实现过程
首先将训练分成两组,一组用来训练第一层的模型;然后将第一层模型的预测结果作为第二层blender模型的输入;或者将训练数据分成三组,训练两层组合模型+一个blender
学必求其心得,业必贵其专精