【361】机器学习常见算法

一、线性回归(Linear Regression)

参考:机器学习实战教程(十一):线性回归基础篇之预测鲍鱼年龄(局部加权线性回归)

参考:线性回归原理小结 - 刘建平

参考:scikit-learn 线性回归算法库小结 - 刘建平

参考:通过一个例子快速上手矩阵求导

步骤:自我理解

1. 回归方程

  $h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}$

  用矩阵形式表示:

  $h_\mathbf{\theta}(\mathbf{X}) = \mathbf{X\theta}$

2. 损失函数

  $J(\theta_0, \theta_1..., \theta_n) = \sum\limits_{i=0}^{m}(h_\theta(x_0, x_1, ...x_n) - y_i)^2$

  用矩阵形式表示:

  $J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})$

3. 求损失函数的最小值

  并将各个系数计算出来,可以通过 Gradient Descent 也可以通过直接求导为零的方法。

4. 线性回归正则化

  为了防止过拟合,需要让系数的值尽量小,因此加入正则项一起求最小值,就可以兼顾损失函数最小的情况下有保证系数的值也尽量小。

  参考机器学习中正则化项L1和L2的直观理解里面方框与圆圈的解释还是不是很理解,2019年1月31日

  解释1:拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。

  参考:正则化方法:L1和L2 regularization、数据集扩增、dropout

  解释2:过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。

  

二、Logistic 回归算法

参考:机器学习实战教程(六):Logistic回归基础篇之梯度上升算法

参考:机器学习实战教程(七):Logistic回归实战篇之预测病马死亡率

参考:逻辑回归原理小结 - 刘建平

步骤:自我理解

1. 用于分类问题

  可以通过线性回归的直线将两类点分开

  

  为了表征直线两侧点的值,将上面的点(>0)定义为1,下面的点(<0)定义为0

2. 通过Sigmoid函数实现转换

  它有一个非常好的性质,即当$z$趋于正无穷时,$g(z)$趋于1,而当$z$趋于负无穷时,$g(z)$趋于0,这非常适合于我们的分类概率模型。

4. 损失函数

  下面不加负号的话就是求其最大值。

  $J(\theta) = -lnL(\theta) = -\sum\limits_{i=1}^{m}(y^{(i)}log(h_{\theta}(x^{(i)}))+ (1-y^{(i)})log(1-h_{\theta}(x^{(i)})))$

  矩阵表示为:

  $J(\theta) = -Y^T\bullet logh_{\theta}(X) - (E-Y)^T\bullet log(E-h_{\theta}(X))$

  其中E为全1向量,$\bullet$为内积。

5. 损失函数优化

  使用梯度下降方法,需要对$\theta$求偏导,直接按照矩阵求导比较复杂,可以按照单个$\theta$求导,然后总结出矩阵的形式。

  注意:直接通过矩阵的形式求导没有实现,主要是左右位置关系没有搞通(2019年1月31日)

K-近邻算法(K Nearest Neighbors)

参考:机器学习实战教程(一):K-近邻算法(史诗级干货长文)

参考:K近邻法(KNN)原理小结 - 刘建平

决策树算法(Decision Tree)

参考:机器学习实战教程(二):决策树基础篇之让我们从相亲说起

参考:机器学习实战教程(三):决策树实战篇之为自己配个隐形眼镜

参考:决策树算法原理(上) - 刘建平

参考:决策树算法原理(下) - 刘建平

朴素贝叶斯算法(Naive Bayes)

参考:机器学习实战教程(四):朴素贝叶斯基础篇之言论过滤器

参考:机器学习实战教程(五):朴素贝叶斯实战篇之新浪新闻分类

参考:朴素贝叶斯算法原理小结 - 刘建平

参考:朴素贝叶斯分类器的应用 —— 阮一峰

参考:算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

参考:《机器学习实战》第4章

支持向量机算法(SVM)

参考: [推荐] 林轩田 - 机器学习技法 - SVM系列(对于公式推导以及来龙去脉讲解较好)

参考:机器学习-白板推导系列-支持向量机SVM(Support Vector Machine)(推导过程比较到位)

参考:机器学习实战教程(八):支持向量机原理篇之手撕线性SVM(前面一部分比较好, 拉格朗日之前部分)

参考:刘建平系列博客

参考:知乎专栏

参考:How Support Vector Machines work / How to open a black box

参考:深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

参考:Constrained optimization introduction

参考:Lagrange multipliers, using tangency to solve constrained optimization

参考:拉格朗日乘数 - Wikipedia

2019年1月29日:还是没有看懂SVM,实在是太复杂啦~

2019年2月3日: 我听了 林轩田 老师的视频基本理解了, 不过鉴于内容很复杂, 基本上课上理解, 课下就忘了~如果想深入学习需要记笔记多运算啊~

参考:【机器学习经典算法】真正的SVM简明(傻瓜)教程!

加入松弛变量后,需要让松弛变量的总和尽量小。C只是代表一个常数,用来控制松弛变量部分的影响。简单来说就是,这个C值越大,说明松弛变量看得越重,那错误分类的容忍度就越小

$$
min\;\; \frac{1}{2}||w||_2^2 +C\sum\limits_{i=1}^{m}\xi_i
$$

感知机(Perceptron)

参考:感知机原理小结 - 刘建平Pinard

参考:感知机 - 码农场

参考:感知机中的损失函数中的分母为什么可以不考虑

参考:感知机中损失函数1/||w||为什么可以不考虑(或直接忽略)?

我的理解:之所以可以忽略分母,是因为函数距离与几何距离的原因,两者都是距离,在考虑函数距离的时候就可以忽略分母了~参考知乎答案

 

 

 

 


 

支持向量机对于核函数的理解举例:https://zhuanlan.zhihu.com/p/24291579?refer=understand

在这里引入核函数(Kernel Function) K(x^{(i)},x^{(j)})=\phi(x^{(i)})\cdot \phi(x^{(j)}) ,此时 :

y=\sum_{k=1}^m\alpha _iy^{(i)}K(x^{(i)},x)+b\\

好像有点乱,让我们先来捋一捋:

x^{(i)}\cdot x^{(j)}\longrightarrow \phi(x^{(i)})\cdot \phi(x^{(j)}) =K(x^{(i)},x^{(j)})

映射函数 \phi 的作用是将低维空间的数据映射到高维空间中,核函数 K表示的是映射之后高维空间中两个矢量的点积。

通过映射函数,我们能从原始数据中(低维空间)抽象出所需的特征(高维空间),由低维空间向高维空间的转化很多时候非常的麻烦,有意思的是,无论是1维、10维、100维还是更高维的空间,其矢量点积的结果都是一个常数,那么有没有什么捷径,可以跳过维度转换的过程,通过相对简单的计算直接得到矢量积?答案就是核函数,还是举一个例子来说明吧:

x=[x_1, x_2, x_3]^T,y=[y_1, y_2, y_3]^T,我们定义 \phi(x)=[x_1x_1,x_1x_2,x_1x_3,x_2x_1,x_2x_2,x_2x_3,x_3x_1,x_3x_2,x_3x_3] 将原始数据从三维空间映射到九维空间中,让我们来计算\phi(1,2,3) \cdot \phi(4,5,6)

$$

\begin{split} \phi(1,2,3)&=[1,2,3,2,4,6,3,6,9]^T\\ \phi(4,5,6)&=[16,20,24,20,25,30,24,30,36]^T\\ \phi(1,2,3) \cdot \phi(4,5,6) &=1\times16+2\times 20 + 3\times 24 + 2\times 20 + 4 \times 25 + 6 \times 30 + 3 \times 24 + 6 \times 30 + 9\times 36\\ &=16+40+72+40+100+180+72+180+324\\ &=1024 \end{split}

可以看出计算相当繁琐,嗯,我们来尝试找找对应的核函数:

\begin{split} \phi(x)\cdot \phi(y)&=[x_1x_1,x_1x_2,x_1x_3,x_2x_1,x_2x_2,x_2x_3,x_3x_1,x_3x_2,x_3x_3]^T\cdot [y_1y_1,y_1y_2,y_1y_3,y_2y_1,y_2y_2,y_2y_3,y_3y_1,y_3y_2,y_3y_3] \\ &= x_1y_1x_1y_1+x_1y_1x_2y_2+x_1y_1x_3y_3+x_2y_2x_1y_1+x_2y_2x_2y_2+x_2y_2x_3y_3\\&+x_3y_3x_1y_1+x_3y_3x_2y_2+x_3y_3x_3y_3\\ &=(x_1y_1+x_2y_2+x_3y_3)^2\\ &=(x^Ty)^2\\ &=K(x,y) \end{split}

通过上面的推导,我们发现虽然维度转化的过程较为繁琐复杂,但是矢量点积的结果确实相当简洁,这一次我们直接用核函数计算:

\begin{split} K(x,y)=K((1,2,3),(4,5,6))=(1\times 4 + 2\times 5 + 3\times 6)^2=(32)^2=1024 \end{split}

相比于从低维映射到高维空间再进行矢量积运算,核函数大大简化了计算的过程,使得向更高维转化变为了可能,我们不需要知道低维空间的数据是怎样映射到高维空间的,我们只需要知道结果是怎么计算出来的。

 

转载于:https://www.cnblogs.com/alex-bn-lee/p/10323607.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值