ML Algorithm

朴素贝叶斯

参考[1]

事件A和B同时发生的概率为在A发生的情况下发生B或者在B发生的情况下发生A

P(A∩B)=P(A)∗P(B|A)=P(B)∗P(A|B)

所以有:

P(A|B)=P(B|A)∗P(A)P(B)

对于给出的待分类项,求解在此项出现的条件下各个目标类别出现的概率,哪个最大,就认为此待分类项属于哪个类别

工作原理

1、假设现在有样本x=(a1,a2,a3,…an)这个待分类项(并认为x里面的特征独立)
2、再假设现在有分类目标Y={y1,y2,y3,y4..yn}
3、那么max(P(y1|x),P(y2|x),P(y3|x)..P(yn|x))就是最终的分类类别
4、而P(yi|x)=p(x|yi)∗P(yi)P(x)
5、因为x对于每个分类目标来说都一样,所以就是求max(P(x|yi)∗p(yi))
6、P(x|yi)∗p(yi)=p(yi)∗∏i(P(ai|yi))
7、而具体的p(ai|yi)和p(yi)都是能从训练样本中统计出来
p(ai|yi)表示该类别下该特征出现的概率
p(yi)表示全部类别中这个这个类别出现的概率
8、好的,就是这么工作的^_^

工作流程

1、准备阶段

确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本。

2、训练阶段

计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计

3、应用阶段

使用分类器进行分类,输入是分类器和待分类样本,输出是样本属于的分类类别

属性特征

1、特征为离散值时直接统计即可(表示统计概率)
2、特征为连续值的时候假定特征符合高斯分布:g(x,n,u)
那么p(ak|yi)=g(xk,ni,ui)

Laplace校准(拉普拉斯校验)

当某个类别下某个特征划分没有出现时,会有P(a|y)=0,就是导致分类器质量降低,所以此时引入Laplace校验,就是对没类别下所有划分的计数加1。

遇到特征之间不独立问题

参考改进的贝叶斯网络,使用DAG来进行概率图的描述

优缺点

朴素贝叶斯的优点:

对小规模的数据表现很好,适合多分类任务,适合增量式训练。

缺点:

对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。

逻辑回归和线性回归

LR回归是一个线性的二分类模型,主要是计算在某个样本特征下事件发生的概率,比如根据用户的浏览购买情况作为特征来计算它是否会购买这个商品,抑或是它是否会点击这个商品。然后LR的最终值是根据一个线性和函数再通过一个sigmod函数来求得,这个线性和函数权重与特征值的累加以及加上偏置求出来的,所以在训练LR时也就是在训练线性和函数的各个权重值w。

hw(x)=11+e−(wTx+b)

关于这个权重值w一般使用最大似然法来估计,假设现在有样本{xi,yi},其中xi表示样本的特征,yi∈{0,1}表示样本的分类真实值,yi=1的概率是pi,则yi=0的概率是1−pi,那么观测概率为:
p(yi)=pyii∗(1−pi)1−yi

则最大似然函数为:
∏(hw(xi)yi∗(1−hw(xi))1−yi)

对这个似然函数取对数之后就会得到的表达式
L(w)=∑i(yi∗loghw(xi)−(1−yi)∗log(1−hw(xi)))=∑i(yi∗(wTxi)−log(1+ewTxi))

估计这个L(w)的极大值就可以得到w的估计值。

实际操作中一般会加个负号 改为求最小

所以求解问题就变成了这个最大似然函数的最优化问题,这里通常会采样随机梯度下降法和拟牛顿迭代法来进行优化

梯度下降法

LR的损失函数为:
J(w)=−1NN∑i=1(yi∗log(hw(xi))+(1−yi)∗log(1−hw(xi)))

这样就变成了求min(J(w))

其更新w的过程为
w:=w−α∗▽J(w)w:=w−α∗1N∗N∑i=1(hw(xi)−yi)∗xi)

其中α为步长,直到J(w)不能再小时停止

梯度下降法的最大问题就是会陷入局部最优,并且每次在对当前样本计算cost的时候都需要去遍历全部样本才能得到cost值,这样计算速度就会慢很多(虽然在计算的时候可以转为矩阵乘法去更新整个w值)

所以现在好多框架(mahout)中一般使用随机梯度下降法,它在计算cost的时候只计算当前的代价,最终cost是在全部样本迭代一遍之求和得出,还有他在更新当前的参数w的时候并不是依次遍历样本,而是从所有的样本中随机选择一条进行计算,它方法收敛速度快(一般是使用最大迭代次数),并且还可以避免局部最优,并且还很容易并行(使用参数服务器的方式进行并行)
w:=w−α∗(hw(xj)−yj)∗xi);j∈1 Nandrandomly

这里SGD可以改进的地方就是使用动态的步长
α=0.04∗(1.0+n+i)+r

其他优化方法

拟牛顿法(记得是需要使用Hessian矩阵和cholesky分解)
BFGS
L-BFGS

优缺点:无需选择学习率α,更快,但是更复杂

关于LR的过拟合问题:

如果我们有很多的特性,在训练集上拟合得很好,但是在预测集上却达不到这种效果

1、减少feature个数(人工定义留多少个feature、算法选取这些feature)
2、正则化(为了方便求解,L2使用较多)
添加正则化之后的损失函数为: J(w)=−1N∑Ni=1(yi∗log(hw(xi))+(1−yi)∗log(1−hw(xi)))+λ||w||2
同时w的更新变为w:=w−α∗(hw(xj)−yj)∗xi)−2α∗wj
注意:这里的w0不受正则化影响

关于LR的多分类:softmax

假设离散型随机变量Y的取值集合是{1,2,..,k},则多分类的LR为
P(Y=a|x)=exp(wa∗x)(∑ki=1(wi∗x));1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# Machine learning algorithms A collection of minimal and clean implementations of machine learning algorithms. ### Why? This project is targeting people who want to learn internals of ml algorithms or implement them from scratch. The code is much easier to follow than the optimized libraries and easier to play with. All algorithms are implemented in Python, using numpy, scipy and autograd. ### Implemented: * [Deep learning (MLP, CNN, RNN, LSTM)](mla/neuralnet) * [Linear regression, logistic regression](mla/linear_models.py) * [Random Forests](mla/ensemble/random_forest.py) * [Support vector machine (SVM) with kernels (Linear, Poly, RBF)](mla/svm) * [K-Means](mla/kmeans.py) * [Gaussian Mixture Model](mla/gaussian_mixture.py) * [K-nearest neighbors](mla/knn.py) * [Naive bayes](mla/naive_bayes.py) * [Principal component analysis (PCA)](mla/pca.py) * [Factorization machines](mla/fm.py) * [Restricted Boltzmann machine (RBM)](mla/rbm.py) * [t-Distributed Stochastic Neighbor Embedding (t-SNE)](mla/tsne.py) * [Gradient Boosting trees (also known as GBDT, GBRT, GBM, XGBoost)](mla/ensemble/gbm.py) * [Reinforcement learning (Deep Q learning)](mla/rl) ### Installation cd MLAlgorithms pip install scipy numpy pip install . ### How to run examples without installation cd MLAlgorithms python -m examples.linear_models ### How to run examples within Docker cd MLAlgorithms docker build -t mlalgorithms . docker run --rm -it mlalgorithms bash python -m examples.linear_models ### Contributing Your contributions are always welcome! Feel free to improve existing code, documentation or implement new algorithm. Please open an issue to propose your changes if they big are enough.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值