Introduction
ICA, FastICA, 鸡尾酒会问题
线性回归
梯度下降
- weights的各项要同时update
- 一维的情况下,梯度就是导数,函数变小最快的方向就是梯度的反方向
- 特征归一化 , 可以加快收敛速度,也能避免由于精度问题导致梯度消失
- xi/max(x), 结果范围在 (-1, 1)
- (xi−means)/max(x),结果范围在 (-0.5, 0.5)
- (xi−means)/(max−min)
- (xi−means)/variance
- learning rate取值范围
设 y=x2, 则∇y=2x,
x=x−α∇y=x−2αx=x(1−2α)
由于要收敛,所以
−1<1−2α<1
0<α<1
Normal Equation
Y=XW
XTY=XTXW
W=(XTX)−1XTY
若XTX不可逆,则求它的伪逆
Logistic
在特征特别多的时候,例如一张图片,要拟合非线性情况,需要将多个特征组合,将产生百万级的参数,计算成本太高。
其他优化
牛顿法
hessian矩阵的计算: https://zhuanlan.zhihu.com/p/63305895
- Conjugate Gradient, 共轭梯度法
- BFGS
- L-BFGS
过拟合
- 特征过多,训练集太小,就有可能产生过拟合
- 过拟合的时候高方差? (这里的方差指的是用不同训练集训练出来的结果的方差) https://www.zhihu.com/question/27068705/answer/1689740820
- 正则化也可以应用在normal equation中,改成
W=(XTX+λA)−1XTY
其中A=000...001000010............0001
神经网络
神经网络的损失函数一般都是非凸的,如何证明?
反向传播推导
loss function:
J(θ)=m1i=1∑mk=1∑K[−yk(i)log(ak(i))−(1−yk(i)log(1−ak(i)]
where
a=sigmoid(z)=g(z)=1+e−z1
we know that
g′(z)=g(z)(1−g(z))
where
z(l+1)=(θ(l))Ta(l)=(θ(l))Tg(z(l))
So, for the last layer, let
δ(l+1)=∂z(l+1)∂J=∂a(l+1)∂J⋅∂z(l+1)∂a(l+1)=(−a(l+1)y(l+1)+1−a(l+1)1−y(l+1))⋅(a(l+1)(1−a(l+1)))=a(l+1)−y(l+1)
then,
∂θ(l)∂J=∂z(l+1)∂J⋅∂a(l)∂z(l+1)=(a(l+1)−y(l+1))a(l)
for previous layer,
δ(l)=∂z(l)∂J=∂z(l+1)∂J⋅∂z(l)∂z(l+1)=δ(l+1)(θ(l))Tg′(z(l))
then,
∂θ(l−1)∂J=∂z(l)∂J⋅∂a(l−1)∂z(l)=δ(l)a(l−1)
梯度检测
gradient≈2ϵJ(θ+ϵ)−J(θ−ϵ)
随机初始化
- 若初始值设置为0,则w01=w02永远成立,因为后面的更新时,梯度一样,学习率也一样
- 可以初始化为−ϵ<w<ϵ
模型评估
将60%数据用于training set, 20%用于cross validation set, 20%用于test set
训练n个模型,用在validation set上,选择错误率最低的那个
最后,将选择的模型用于test set上看一下准确率
高偏差: 数据集增大,错误率变化不大,校验错误率和训练错误率比较接近
高方差: 数据集增大,训练错误率慢慢增大,校验错误率真慢慢减小,但是两者相距较远
porter steammer, Porter stemmer 并不是要把单词变为规范的那种原来的样子,它只是把很多基于这个单词的变种变为某一种形式
schewed classes: 在训练集中,99%的数据是正例,只有1%的数据是负例
精确度Precision和召回率Recall
| Predicted \ Actual |
1 |
0 |
| 1 |
True positive |
False positive |
| 0 |
False negative |
True negative |
- 精确度: 在我预测为猫的结果中,有多少比例真的是猫
precision=True positive+False positiveTrue positive
召开率: 在所有真的是猫的样例中,有多少我预测对了
recall=True positive+False negativeTrue positive
higher precision lower recall和higher recall lower precision之间要做一个tradeoff
F1 score
P为precision, R为recall
F1=P1+R12=P+R2PR
其实是调和平均数
specificity(不冤枉一个正常人)
specificity=True negative rate=True negative+False positiveTrue negative
sensitivity(不放过一个病人)
sensitivity=True positive rate=True positive+False negativeTrue positive
sensitivity = recall
balanced accuracy=2sensitivity+specificity
支持向量机
Mercer 定理:任何半正定的函数都可以作为核函数
对于任意不为0的向量x,有xTAx>=0, 则A是半正定矩阵。
- 如果特征比训练集多,建议使用logistic或者linear kernel的SVM
- 如果特征少,训练集中等,建议使用高斯核的SVM
- 如果特征少,训练集非常大,建议使用logistic或者linear kernel的SVM
- 欧氏空间: 定义了距离,范数的线性空间
- 希伯尔特空间: 欧氏空间之上定义了内积, https://zhuanlan.zhihu.com/p/113197869
Kmeans
- 随机初始化。可以随机初始化100次,然后挑损失最小的那个
- 选择k值, Elbow method: 尝试不同的k值,选择第一个损失大幅减小的k
PCA
- 协方差矩阵一定是正定的
- PCA做的事情就是从一个n维空间找到一个k维超平面,所有的点都投影到这个超平面上,这些投影组成的新空间,用于训练
- 要先均值归0,因为协方差矩阵的计算,就是
Cov(X,Y)=E((X−E(X))(Y−E(Y))=n−11i=1∑n(xi−x)(yi−y)
所以均值归0后,可以通过Σ=XXT直接计算出协方差矩阵。
奇异值分解的过程:
A=UΣVT
- 求AAT的特征向量,单位化后,构成U
- 求ATA的特征向量,单位化后,构成V
- 求AAT或ATA的特征值,开根号后,构成Σ
变换
Z=XU
Reconstruction
从k维转回n维
Z=XU
Xapprox=ZUT=XUUT
异常检测
- 直接假设数据服从高斯分布,通过样本估计出均值和方差, 这样,任给一个样例,就可以估计出来它的概率,当概率小于某个阈值时,认为是异常点
- 当正例太少,负例很多时,一般 使用异常检测方法
- 当数据不服从高斯分布时,可以通过x=log(x), x=x0.1之类的方法转换
- 当特征之间几乎不相关时,用一元高斯分布的乘积来检测
- 当特征之间相关时,用多元高斯分布
推荐系统
- 低秩矩阵分解(有待研究...)
- X为电影的参数,Θ为用户的参数,将2个随机初始化,一起做为要训练的参数,放到线性回归里面,分别求梯度,用梯度下降法求最优化损失函数,将预测的用户对电影的评分跟用户的已存在评分求损失
在线学习
- 实时流处理,每来一条数据,直接用来训练,更新参数,类似随机梯度下降
机器学习pipeline
- OCR步骤: 文本检测 --> 文字分割 --> 文本识别
- 滑动窗口: 用于目标检测,用一个窗口从图片左上角不断滑动,标注出来检测 到的地方
- 文字分割: 通过滑动窗口,截取一块一块,每一块送给一个分类器,判断能否从中间分割开
- 人脸识别里面检测人脸,眼睛也是通过滑动窗口