机器学习常见算法个人总结

文章目录

  • 1·knn算法
  • 2·朴素贝叶斯算法
  • 3·线性回归算法
  • 4·逻辑回归
  • 5·决策树算法
    • 1·ID3算法
    • 2·C4.5算法
    • 3·CART算法
    • 4·决策树的分类与回归
    • 5·解决决策树的过拟合
    • 6·决策树参数
  • 6·svm算法
  • 7·聚类算法
    • k-means算法
  • 8·集成学习
    • bagging
    • 随机森林
    • GBDT
    • Adaboost
    • Xgboost

1·knn算法

为了判断未知实例的类别,以所有已知类别的实例作为参照数据集
计算未知实例与所有已知实例的距离(这里计算的是欧式距离)
选择最近K个已知实例
根据少数服从多数的投票法则(majority-voting),让未知实例归类为K个最邻近样本中最多数的类别

k值
这里所谓的交叉验证就是将样本划分一部分出来为预测样本,比如95%训练,5%预测,然后k分别取1,2,3,4,5之类的,进行预测,计算最后的分类误差,选择误差最小的k

2·朴素贝叶斯算法

朴素贝叶斯法是基于贝叶斯定理特征条件独立假设的分类方法
1·首先由贝叶斯定理可知,
机器学习常见算法个人总结_第1张图片
2·其次
机器学习常见算法个人总结_第2张图片
3·如果
机器学习常见算法个人总结_第3张图片
4.那么由朴素贝叶斯定理可知,
机器学习常见算法个人总结_第4张图片
优缺点
朴素贝叶斯的优点
对小规模的数据表现很好,适合多分类任务,适合增量式训练。
缺点
对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。
属性独立性的条件同时也是朴素贝叶斯分类器的不足之处。数据集属性的独立性在很多情况下是很难满足的,因为数据集的属性之间往往都存在着相互关联,如果在分类过程中出现这种问题,会导致分类的效果大大降低。

3·线性回归算法

首先要明白,回归分析(regression analysis)用来建立方程模拟两个或者多个变量之间如何关联
被预测的变量叫做:因变量 被用来进行预测的变量叫做: 自变量
以上两个变量的关系用一条直线来模拟 就称为一元线性回归
如果包含两个以上的自变量,则称作多元线性回归分析

利用最小二乘法可以得到 线性回归的代价函数
在这里插入图片描述
而求解回归方程的过程也就是求解 最优系数使得代价函数值最小的过程。可利用梯度下降法或者标准方程法。

梯度下降法:以一元线性回归为例
机器学习常见算法个人总结_第5张图片
每次根据学习率向代价函数的值变化大的方向不停迭代

标准方程法
机器学习常见算法个人总结_第6张图片
机器学习常见算法个人总结_第7张图片
由于线性回归很容易出现过拟合的情况,所以为了解决这个问题 ,可以有三个措施
机器学习常见算法个人总结_第8张图片
其中将代价函数正则化:
机器学习常见算法个人总结_第9张图片
而L1正则化的代价函数就是Lasso的代价函数
L2正则化的代价函数是岭回归的代价函数

还有将代价函数加上更高层次的范数叫做弹性网
机器学习常见算法个人总结_第10张图片

4·逻辑回归

逻辑回归虽然有回归两个字,但是主要是用来做分类的,特别是用来做二分类。
逻辑回归的预测函数可以看成是在线性回归的预测函数外面套了一层sigmoid函数
机器学习常见算法个人总结_第11张图片
根据sigmoid函数的性质,当g>=0.5时,z>0恒成立,就可以假设如果h>=0.5时归为一类,<0.5归为另一类。则可得到一个关于x与系数矩阵的限制性条件。接着利用梯度下降法求得系数矩阵,将系数带入到预测函数中,根据h>0.5分类为条件就可得到一条决策边界,如果时多变量,则会得到一条几何边界。
接下来就时如何求解系数矩阵的问题了,这里还是利用代价函数与梯度下降法来求解系数矩阵。

由于代价函数的目的是为了求所有样本 真实值—预测值 的平方和最小,但在逻辑回归中的由于sigmoid函数的存在,使得正常的代价函数无法用梯度下降法求解最优解,所以根据sigmoid函数,对代价函数进行调整,得到如下方程

机器学习常见算法个人总结_第12张图片
最终化简就得到了如下方程,利用梯度下降法就可求解出系数矩阵,带入原来的不等式就可求解出决策边界
在这里插入图片描述

5·决策树算法

首先要明白决策树是一颗依托决策而建立起来的树。
主要有三种算法,分别时ID3算法,C4.5算法,CART算法

1·ID3算法

首先是针对当前的集合,计算每个特征的信息增益
然后选择信息增益最大的特征作为当前节点的决策决策特征
根据特征不同的类别划分到不同的子节点(比如年龄特征有青年,中年,老年,则划分到3颗子树)
然后继续对子节点进行递归,直到所有特征都被划分

2·C4.5算法

它是ID3的一个改进算法,使用信息增益率来进行属性的选择

3·CART算法

首先是根据当前特征计算他们的基尼增益
选择基尼增益最小的特征作为划分特征
从该特征中查找基尼指数最小的分类类别作为最优划分点
将当前样本划分成两类,一类是划分特征的类别等于最优划分点,另一类就是不等于
针对这两类递归进行上述的划分工作,直达所有叶子指向同一样本目标或者叶子个数小于一定的阈值

4·决策树的分类与回归

分类树
输出叶子节点中所属类别最多的那一类
回归树
输出叶子节点中各个样本值的平均值

5·解决决策树的过拟合

剪枝
前置剪枝:在分裂节点的时候设计比较苛刻的条件,如不满足则直接停止分裂(这样干决策树无法到最优,也无法得到比较好的效果)
后置剪枝:在树建立完之后,用单个节点代替子树,节点的分类采用子树中主要的分类(这种方法比较浪费前面的建立过程)
交叉验证
随机森林

6·决策树参数

1.criterion gini or entropy

2.splitter best or random 前者是在所有特征中找最好的切分点 后者是在部分特征中(数据量大的时候)

3.max_features None(所有),log2,sqrt,N 特征小于50的时候一般使用所有的

4.max_depth 数据少或者特征少的时候可以不管这个值,如果模型样本量多,特征也多的情况下,可以尝试限制下

5.min_samples_split 如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

6.min_samples_leaf 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝,如果样本量不大,不需要管这个值,大些如10W可是尝试下5

7.min_weight_fraction_leaf 这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

8.max_leaf_nodes 通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。 如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制具体的值可以通过交叉验证得到。

9.class_weight 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。

10.min_impurity_split 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值则该节点不再生成子节点。即为叶子节点 。

6·svm算法

svm的基本想法就是找到一个能正确划分训练样本并且其几何间隔最大化的超平面。
SVM 计算的过程就是帮我们找到超平面的过程,它有个核心的概念叫:分类间隔。SVM 的目标就是找出所有分类间隔中最大的那个值对应的超平面。在数学上,这是一个凸优化问题。同样我们根据数据是否线性可分,把 SVM 分成硬间隔 SVM、软间隔 SVM 和非线性 SVM。
机器学习常见算法个人总结_第13张图片
我们要求的也就是当d最大时的w和b的值,而通过计算推导可得以下结论
机器学习常见算法个人总结_第14张图片

由于实际问题中,模型数据并不一定是完全线性可分的,所以根据训练数据是否线性可分,可将svm分为3个模型
1·线性可分支持向量机(硬间隔支持向量机)
2·线性支持向量机(软间隔支持向量机)
3·非线性支持向量机(主要利用核技巧和软间隔最大化)
前两种一般的解决办法就是在原来的损失函数上加入一个正则化项,从而消除异常值对模型的影响

详细可参考:支持向量机svm

7·聚类算法

首先聚类算法是一个无监督模型,数据集是不带标签的。一般可以应用到一些 寻找优质客户,监控异常点(如信用卡欺诈等)
一般的聚类算法有k-means算法,密度聚类(DBSCAN),层次聚类(AGNES),混合聚类

k-means算法

算法思想:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果

步骤:
1.先从没有标签的元素集合A中随机取k个元素,作为k个子集各自的重心。
2.分别计算剩下的元素到k个子集重心的距离(这里的距离也可以使用欧氏距离),根据距离将这些元素分别划归到最近的子集。
3.根据聚类结果,重新计算重心(重心的计算方法是计算子集中所有元素各个维度的算数平均数)。
4.重复第2-3步,直到聚类结果不再发生变化。

k-menas存在的问题:
1,对k个初始质心的选择比较敏感,容易使代价函数的值陷入局部最小值
2,k值的选择是用户指定的,不同的k会得到挺大的不用。
3,存在局限性,对于双螺旋形状的分布没办法准确处理
4,数据较大时,收敛会比较慢

k-means优化:
1,使用多次随机初始化,计算每一次建模得到的代价函数的值,选取代价函数最小时候的结果作为聚类结果
2,使用肘部法则来选择k值

k-means代价函数:
就是计算 每个样本点质心距离平方和 再除以 总样本数
在这里插入图片描述

8·集成学习

bagging

对初始数据集 有放回抽样获取m个训练集,分别进行建模训练,然后对测试集进行预测,以少数服从多数的原则来通过投票确定最后的结果。(对于回归问题,则使用简单平均法确定系数)

随机森林

RF = 决策树 + Bagging + 随机属性选择
1,.样本的随机:从样本集中用有放回抽样的方式,随机选
择n个样本
2,特征的随机:从所有属性d中随机选择k个属性(k 然后从k个属性中选择最佳分割属性作为节点建立
CART决策树。
最佳分割属性:分别计算k个属性的Gini系数增益,取Gini系数增益值最大的属性作为决策树的根节点属性。
3,重复以上两个步骤m次,建立m棵CART决策树
4,这m棵CART决策树形成随机森林,通过投票表决结果,决定数据属于哪一类

GBDT

GBDT 也叫做梯度提升树,它的base model 是决策树
GBDT同AdaBoost类似,都是不断迭代前一个model的预测的结果,而AdaBoost每次都通过误差率来重新计算样本权值,而GBDT是以残差来作为下一次model的样本集。
优点:
预测的精度高
适合低维数据
能处理非线性数据
缺点:
并行麻烦(因为上下两棵树有联系)
如果数据维度较高时会加大算法的计算复杂度

Adaboost

AdaBoost是一种根据样本误差率来不断迭代的算法.
具体的操作过程就是:
1,对训练集N初始化训练数据设置相同的权值为1/N,
2,使用基分类器g1来进行分类,然后计算样本的误差率,来得到g1的权重系数a1,进而计算出训练样本的权值分布。
3,利用新权值的样本集进行二次拟合,得到g2分类器,再次计算误差率,从来计算出每个样本的权值分布。
4,这样一直迭代n次,然后对这n个弱分类器与权重系数的乘积 求和得到的f(x)即为最终分类器。

Xgboost

Xgboost是对GBDT的一个优化提升,它的base model也是决策树,也是以残差来做下一次model的样本。
xgboost在效率和精度上有很大提升
1,损失函数是用泰勒展开式展开的,同时用到了一阶导和二阶导,可以加快优化速度。
2,对数结构进行了正则化约束,防止model过拟合
3,在寻找最佳分割点时,考虑到传统的贪心算法效率较低,实现了一种近似贪心算法,用来加速和减小内存消耗,除此之外还考虑了稀疏数据集和缺失值的处理,对于特征的值有缺失的样本,XGBoost依然能自动找到其要分裂的方向。
4,引进了特征子采样,像RandomForest那样,这种方法既能降低过拟合,还能减少计算
5,XGBoost支持并行处理,XGBoost的并行不是在模型上的并行,而是在特征上的并行,将特征列排序后以block的形式存储在内存中,在后面的迭代中重复使用这个结构。这个block也使得并行化成为了可能,其次在进行节点分裂时,计算每个特征的增益,最终选择增益最大的那个特征去做分割,那么各个特征的增益计算就可以开多线程进行。

你可能感兴趣的:(机器学习常见算法个人总结)