一、线性回归(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(前面一部分比较好, 拉格朗日之前部分)
参考:刘建平系列博客
- 支持向量机原理(一) 线性支持向量机
-
支持向量机原理(二) 线性支持向量机的软间隔最大化模型
-
支持向量机原理(三)线性不可分支持向量机与核函数
-
支持向量机原理(四)SMO算法原理
-
支持向量机原理(五)线性支持回归
参考:知乎专栏
- 我所理解的 SVM(支持向量机)- 1
-
我所理解的 SVM 2——核函数的应用(核函数举例比较形象)
参考: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) ,此时 :
好像有点乱,让我们先来捋一捋:
映射函数 的作用是将低维空间的数据映射到高维空间中,核函数 表示的是映射之后高维空间中两个矢量的点积。
通过映射函数,我们能从原始数据中(低维空间)抽象出所需的特征(高维空间),由低维空间向高维空间的转化很多时候非常的麻烦,有意思的是,无论是1维、10维、100维还是更高维的空间,其矢量点积的结果都是一个常数,那么有没有什么捷径,可以跳过维度转换的过程,通过相对简单的计算直接得到矢量积?答案就是核函数,还是举一个例子来说明吧:
令 ,我们定义 将原始数据从三维空间映射到九维空间中,让我们来计算:
$$
可以看出计算相当繁琐,嗯,我们来尝试找找对应的核函数:
通过上面的推导,我们发现虽然维度转化的过程较为繁琐复杂,但是矢量点积的结果确实相当简洁,这一次我们直接用核函数计算:
相比于从低维映射到高维空间再进行矢量积运算,核函数大大简化了计算的过程,使得向更高维转化变为了可能,我们不需要知道低维空间的数据是怎样映射到高维空间的,我们只需要知道结果是怎么计算出来的。