ML 好的文章合集

  1. 什么东西,做什么用的
  2. 怎么做到的(流程)
  3. 背后的数学原理

MLE and MAP

https://zhuanlan.zhihu.com/p/32480810

两者的在做的本质都是求模型的参数(也就是求模型)

MLE是找到一个模型能够最好的诠释你的试验结果,MAP是在MLE的基础上增加了先验概率。随着试验数据的增多这两者应该会越来越接近

 

KNN

找到想要的求得点最近的N个点,然后根据这N个点来做判断,取平均值或者majority vote. 判断距离可以用L1, L2, Linf norm,也可以用kernel

K越小模型就越复杂越容易overfit(overfit代表着high variance,在高斯分布中形象的表现就是很宽的gaussian distribution.)

 

Variance是用来描述模型的准确度的,过高过低都不好,会导致test result underfit 或者 overfit

 

RBFs

https://blog.youkuaiyun.com/denghe优快云/article/details/78109253?locationNum=2&fps=1

首先要明白为什么要kernelize,原因是面对线性不可分的,我们可以向高维空间转化,使其变得线性可分。但是需要找到这样的映射关系,核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。所以使用核函数就能用低维的输入直接求出经过某个变换后在高维空间里的向量内积值,省去了寻找映射的过程。

RBFs就是一种核函数,常用的就是高斯核函数

 

Regression Penality

L2, L1, L0, Elastic net: L2+L1

 

Streamwise Regression, Stepwise Regression, Stagewise Regression

streamwise是按照固定的顺序依次加feature,如果能减小error就保留,不行则不要。每个feature只会被添加一遍

stepwise是最开始有一个初始的,然后循环把所有的都添加一次,取error最小的一个。然后再重复过一遍所有的寻找最好的一个,然后再重复。

stagewise方法上是和stepwise是一样的,但是but at each iteration, keep all of the coefficients wj from the old model, and just regress the residual ri = yi - Sum_j wj xij on the new candidate feature k.

 

Decision Tree

https://blog.youkuaiyun.com/csqazwsxedc/article/details/65697652

根据训练数据创建一个树,每个node都是一个特征,然后沿着node一直深入,直到到达底部做出判断。

                                           

重点在于使用哪些特征作为node,这里是根据informatin gain,计算拥有最大IG的特征作为node, IG的计算涉及到entropy。

 

SVM

核心内容是找到一个hypreplane去分开空间中的点,并且满足离这个plane最近的不同类别的点离这个plane的距离之和最小,这些距离很近的点才是我们关注的重点,support vector.

svm linear regression 学的还是w,这个w就是regression 的 weight.(https://www.mathworks.com/help/stats/understanding-support-vector-machine-regression.html)

如果是非线性的,学的就是一个f(x)

svm用的是hinge loss(实质是增加了slack variable,为了能应对不可分的情况,允许有点在margin里面或者在对面),实质是正确分类时loss为0,错误分类,loss线性增加. hinge loss还能帮助过滤掉离hyperplane很远的点.

对svm问题转换成dual problem的原因之一是能直接引入kenel function,让其变成非线性

 

Perceptrons

online learning: 本质是一种训练模型的办法,根据线上的反馈及时的调节模型从而提高模型的准确率。

batch learning can be very expensive when data is very big.

perceptron就像是online svm

voted perceptron: take the majority vote

average perceptron: 最后的model就是之间所有model的平均

passive-aggressive perceptron = MIRA:在修改w的时候,使用的是hinge loss,当预测正确时,w不变,预测错误时,让wi+1尽可能的接近wi的同时使hinge loss等于0.

                                                      

 

 

 

 

Naive Bayes

本质上是求一个联合概率,但是可以使用贝叶斯定律把联合概率变成prior和mle相乘,当feature很多的时候,mle的计算会很复杂,这时候假设事情都是相互独立的,这样能很大程度上简化模型,这个也叫做naive bayes.

Boosting

这是一种ensemble的算法(因为他是ensemble的算法所以能够不那么容易overfit),adaboost(adaptive boosting)主要的方法是通过在训练中调整数据的权重,把多个weak classifier 按权重加起来的算法

https://blog.youkuaiyun.com/v_july_v/article/details/40718799

https://blog.youkuaiyun.com/guyuealian/article/details/70995333

gradiant boosting:(两者区别 https://www.quora.com/What-is-the-difference-between-gradient-boosting-and-adaboost )

和adaboost的别在于如何创造weak learner的,adaboost是通过调整权重,而gradiant boosting 是trains on the remaining errors (so-called pseudo-residuals) of the strong learner

对于gradient tree boosting regression使用的是stagewise去找到weak learner的wights

 

 

ICA

https://blog.youkuaiyun.com/lizhe_dashuju/article/details/50263339

用相互独立的向量把非相互独立的向量表示出来

计算独立程度的办法有多种,eg: maximum KL-divergence或者low mutual information

一般来说会先whiten the data(就是make unit covariance) 

 

Autoencoder

https://blog.youkuaiyun.com/roguesir/article/details/77469665

https://www.quora.com/What-are-some-common-applications-of-denoising-stacked-autoencoders

The essential useage of AE is to learn compact representation of data.

autoencoder就像Nonlinear pca

做高维的数据的分类,比如图像,可能在低维的manifold上是相似的data是靠的很近的

 

SVD

作用是将一个比较复杂的矩阵用更小更简单的3个矩阵相乘来表示,这3个小矩阵描述了大矩阵的重要的特性

https://www.cnblogs.com/lzllovesyl/p/5243370.html

所表达的含义就是矩阵M的作用是把一个向量从正交基向量空间V变换到正交基向量U中去,并按照 \sum 在每个方向上进行缩放,缩放程度就是奇异值。

svd还有个作用就是降维,把\sum取前k项从而降到k维空间上去,这点会用到PCA上去 

SVD还能用来算sudo-inverse,对于不是n×n的矩阵也能求逆了.  具体方法:

 

PCA

PCA在干什么: PCA can be viewed as trying to find the directions that capture the maximum variance in the X space. This is done by finding the eigenvectors of X'X

如何找到合适的dimension去表达data?

https://stats.stackexchange.com/questions/134282/relationship-between-svd-and-pca-how-to-use-svd-to-perform-pca

(这个回答讲解了pca和svd的关系)

 

CCA

Canonical Covariance Analysis,找到project direction,能够让x,y拥有最大covariance,而pca只是找到让x和他自己拥有最大covariance的方向

 

LDA 

文档是由多个topic以不同的概率组成,而每个topic下又是有多个词,每个词也有不同的概率。

 

Active Learning

how to find the best data to train the model,through query the users. 让用户来提出想要label的x,能够更有效(最小的label x的花费)的训练模型。

1. Heuristic methods:

选择most uncertain data point (比如svm中越靠近hyporplane的点),但是要注意这个uncertain不能是因为data很noisy而导致的,不确定图片是什么和图片很模糊是不同的uncertainty. (当data很noisy的时候这个办法不好使)

需要去measure uncertainty: eg:

entropy, least confident predicted label, euclidian distance(svm中离margin最近的点)

 

2. Query by committee

query an example based on the degree of disagreement between committee of classifiers(看把这个unknown的点label成不同的class会让多少classifiers产生不同的结果)

 

3. Information-based Loss Function

找到点能够最大化增加点之后的后验概率和加点之前的后验概率之间的KL divergence.  

 

Optimal Experimental Design

找到理论上最好的data,限制是model 必须是linear的,如果不是只能用linear去近似.

eg: linear regression

goal: 最小化w的variance

 

 

K-means

over generate clusters and then cluster the clusters(map reduce)

 

EM

https://www.jianshu.com/p/1121509ac1dc(举例子说明)

https://pan.baidu.com/s/1i4NfvP7(上文中的例子来源)

https://blog.youkuaiyun.com/jinping_shi/article/details/59613054(过程推导讲解)

Soft assign of cluster(giving a probability of any point belonging to any centroid)( k-means doing it in a hard way)

 

Bayes Net:

贝叶斯网络是一个通过统计的方式对未知的信息进行推断的方式,换句话说就是贝叶斯网络是一种很好的建模方法,一般来说它可以对任何事情建模(只要有观测数据)

eg:(当我知道我的parent的时候,我就只和我的后代相关,和其它的比如我父亲的上一代,同一代,和我的同一代都独立了)

  

建模方法是:

这个公式里面X_i可以只是一个X,比如说X_a,这样就是判断X_a和X_i是不是独立的,如果不是则加个link,从X_a指向X_i,代表X_a是X_i的parent

 

 

 

HMM:

https://www.cnblogs.com/pinard/p/6945257.html

当两种情况发生的时候要考虑这是一个隐马尔科夫问题:1. 问题是基于序列的,时间序列或者状态序列。2. 我们问题有两类数据,一个是可以观察到的,一个是不能观察到的。

然后HMM模型有两个很重要的假设:1. 任意时刻的隐藏状态只依赖于它前一个隐藏状态。(通过这个可以得出状态转移矩阵)2. 任何时刻的观测状态仅仅依赖于当前时刻的隐藏状态。(这个可以得到观测状态生成的概率矩阵)。一个HMM模型可以又隐藏状态的初始分布,状态转移概率矩阵和观测状态概率矩阵决定

 

RNN(Recurrent  Neural Network)

http://zake7749.github.io/2017/09/28/Sequence-to-Sequence-tutorial/(文章讲的还挺有趣)

因为普通CNN没有记忆,就是不能使用之前的信息,但是RNN可以,具体原理下图,主要就是每个时刻node值计算的时候都会用到之前的信息。可以注意到W,V,U是训练的参数,通过BP来更新。

                

Gated RNN:

普通的RNN还是会忘掉之前的信息,所以有gated RNN这种不容易忘记过去的网络(也许只是因为增加了更多的nonliearality)

LSTM: 一种使用更fancy gate function 的gated RNN.

seq2seq(sequence to sequence) 

Sequence to Sequence 的精華所在便是串接了兩個 RNN ,第一個 RNN 負責將長度為 M 的序列給壓成 1 個向量,第二個 RNN 則根據這 1 個向量產生出 N 個輸出,這 M -> 1 與 1 -> N 相輔相成下就構建出了 M to N 的模型,能夠處理任何不定長的輸入與輸出序列                                                              

普通RNN的输出超过不了输入

 

Reinforcement Learning

核心观念就是找到一个function或者policy,能够最大化在环境中长远的奖励

State(当前状态), Action(当前状态下可能的行动), Policy(决定在当前的状态下,采取什么行动)Reward(奖励).

 

Exploration policy vs. Exploitation policy

exploration 是去寻找什么发生了和当前的状态好不好,简单说就是尝试新的东西, exploitation是用当前学到的去做很好

 

Markov Decision Process(generalize HMMs)

使用下图的概念reinforcement learning的核心就是找到一个在当前state下的最好的action,能最大化Gt(是到结束之前的所有reward乘以discount factor之和)

 

这个value就是在当前state,under这个policy情况下的return(也就是Gt).

Q value计算的是在state s的时候我不去按照optimal policy去行动,而是采取另外一个action a,然后我这么做之后的value值是多少. 相当于我去做了exploration.

MC and TD 

https://blog.youkuaiyun.com/coffee_cream/article/details/70194456

https://blog.youkuaiyun.com/yangshaokangrushi/article/details/79774031 (讲解on-policy和off-policy)

区别就是on-policy是用的current的策略,off-policy用的是寻找最优策略的过程更新的策略有别于生成数据的策略

DP for MDP

https://www.cnblogs.com/jinxulin/p/3526542.html

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值