用了大概一个月的时间,终于把《机器学习实战》这本书看了一遍,书中的代码也全部敲了一遍。下来就总结下书中提到的各个算法。
(注意,本博客适用于复习,不适用新手)
一、监督学习
我的理解就是给的数据是有结果的,根据这些已经明确结果的数据去推测那些没有明确结果的数据的结果。
监督学习可简单分为分类和回归:
分类常用于处理标称型数据(数据结果为0,1或者结果为-1,1;即结果是确定的几个值);
回归既可以用于处理标称型数据又可以用于处理连续性数据。
1.分类
常用的分类方法有:k-近邻算法(kNN)、决策树、朴素贝叶斯、Logistic回归、支持向量机(SVM)、AdaBoost元算法。
我们挨个看。
1.1 k-近邻算法(kNN)
kNN算法的主要思想是 将 待分类的点分类至 离待预测的点最近的k个点出现最多的那个分类结果。
优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。
适用数据类型:数值型和标称型
1.2 决策树
根据训练数据创建一棵决策树,判断待分类数据类别时要从根节点开始比较判断,一直到叶子节点,该叶子节点就是待分类数据的类别了。
优点:计算复杂度不高,输出结果容易理解,对中间值的缺失不敏感,可以处理不相关特征数据。
缺点:可能会产生过度匹配问题。
适用数据类型:数值型和标称型
1.3 朴素贝叶斯
通过对训练数据进行分析,再结合贝叶斯公式计算条件概率,判断将待分类数据分到哪个类别下的概率最大,就将其分到那个类别。
优点:在数据较少的情况下仍然有效,可以处理多类别问题。
缺点:对于输入数据的准备方式较为敏感。
适用数据类型:标称型
1.4 Logistic回归
这一章主要是讲了梯度上升法,故而放在分类里。Logistic回归的目的是寻找一个非线性函数Sigmoid(一种阶跃函数)的最佳拟合参数,求解过程可以由最优化算法来完成(在每个特征上都乘以一个回归系数,然后把所有结果相加,将总和代入Sigmoid函数,得到一个0-1的数值,数值>0.5归于类别1,<0.5归于类别0,最优化算法就是在找这样一个最佳的回归系数)。在最优化算法中,最常用的就是梯度上升算法(也有的人在用梯度下降算法,效果类似),而梯度上升算法又可以简化为随机梯度上升算法(随机的意思是梯度上升算法中的每次移动的步长都会更新)。
用一个公式来表示:
Sigmoid函数的输入为

要注意的是
优点:计算代价不高,易于理解和实现。
缺点:容易欠拟合,分类精度可能不高
适用数据类型:数值型和标称型
1.5 支持向量机(SVM)
SVM算法就是找到一个可以将两个类别分开的超平面,且此超平面满足在所有可以将两个类别分开的超平面中,它里最近的那些点的距离之和是最大的。
优点:泛化错误率低,计算开销不大,结果易解释。
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。
适用数据类型:数值型和标称型
1.6 AdaBoost元算法
将不同的分类方法结合起来叫元算法(或集成方法)。AdaBoost算法的流程:训练数据中的每个样本,并赋予其一个权重,这些权重构成了一个向量D。一开始,这些权重值都初始化成相等值。首先在训练数据上训练出一个弱分类器并计算该分类起的错误率,然后在同一数据集上再次训练若弱分类器。在二次训练中,第一次分对的样本的权重会减少,第一次分错的样本的权重会提高。为每个分类器分配一个权重值(基于每个弱分类器的错误率),不断迭代,直到错误率为0,或弱分类器的数目达到用户指定的值为止。
优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整。
缺点:对离群点敏感。
适用数据类型:数值型和标称型
2.回归
与分类一样,回归也是预测目标值的过程。回归与分类的不同点在于,前者预测连续型变量,而后者预测离散型变量。
2.1 线性回归
线性回归分为标准线性回归与局部加权, 标准线性回归自不必多说,简单说一下局部加权线性回归。用高斯分布(类似正态分布)给预测点附近的点赋予更高的权值来计算回归系数
优点:结果易于理解,计算上不复杂
缺点:对非线性的数据拟合不好
适用数据类型:数值型和标称型数据
2.2 岭回归
当数据的样本数比特征数还少的时候,矩阵x.T*x的逆不能直接计算。即便当样本数比特征数多时,它仍有可能无法直接计算,这个时候就可以用岭回归。简单来说,岭回归就是在线性回归的矩阵x.T*x上加一个λ*I从而使得矩阵非奇异(I是一个m*m的单位矩阵)。
岭回归也属于线性回归。它相当于对回归系数的大小进行了限制,这是一种缩减法。
2.3 树回归
树回归在我看来有点类似与分段函数,构建树的过程就是将数据根据特征切分成叶子节点,预测过程就是根据节点特征寻找叶子节点的过程。值得注意的是,由于构建树的过程可能会导致倾向数据过拟合,所以有两种常用的剪枝算法:预剪枝和后剪枝。
优点:可以对复杂和非线性的数据建模
缺点:结果不易理解
适用数据类型:数值型和标称型
二、无监督学习
1.K均值(K-means)聚类
K均值聚类和K近邻分类有点类似,但也有不同。K近邻是已知结果有几种分类。而K均值则结果未知。K均值聚类的过程是这样的,先选取K个随机初始点作为质心,然后将所有数据根据这些质心分类,计算分类后的类别的质心,根据这个新的质心再调整分类结果,这个过程不断循环,知道质心的位置不再变化。值得注意的是还有一个二分K-均值算法,它的流程是,先将整个数据作为一个簇,计算总误差,再将这个簇一分为二,计算总误差,选取总误差较大(或者较小)的簇再一份为二,选取现在所有簇中总误差较大(或者较小)的簇再进行划分,直到得到用户想要的K个分类。
优点:容易实现。
缺点:可能收敛到局部最小值,在大规模数据集上收敛缓慢。
适用数据类型:数值型数据
2.关联规则(Apriori算法)
关联规则算法可以参考经典的啤酒尿布的故事,主要思想是寻找频繁项集。Apriori算法的原理是说如果一个元素项是不频繁的,那么那些包含该元素的超集也是不频繁的。Apriori算法从单元素项开始,通过组合满足最小支持度要求的项集来形成更大的集合。
优点:易编码实现。
缺点:在大数据集上可能较慢。
适用数据类型:数值型和标称型
3.关联规则(FP-growth算法)
FP-growth算法相比较与Apriori算法可以大大提高运算速度。FP-growth算法主要是构建了一棵FP树,然后从FP树中挖掘频繁项集。FP树的结构如下图所示:(图片来自网络,侵删)

值得注意的是,FP树的节点数值是可以重复的;与FP树一同构建的还有一个头指针表。
优点:一般要快于Apriori。
缺点:实现比较困难,在某些数据集上性能会下降。
适用数据类型:标称型
三、其他
1.PCA简化数据
主成分分析(PCA)可以对数据进行降维处理。它是通过沿着数据最大方差的方向旋转坐标轴来实现的。选择方差最大的方向作为第一条坐标轴,后续坐标轴则与前面的坐标轴正交。切方差矩阵上的特征值分析可以用一系列的正交坐标轴来获取。
优点:降低数据的复杂性,识别最重要的多个特征。
缺点:不一定需要,且可能损失有用信息。
适用数据类型:数值型
2.SVD简化数据
奇异值分解(SVD)可以让我们用小得多的数据集来表示原始数据集。SVD的示意图如下:(图片取自网络,侵删)

优点:简化数据,去除噪声,提高算法的结果。
缺点:数据的转换可能难以理解。
适用数据类型:数值型
3.MapReduce
当数据量很大时,一台计算机已经不能满足运算了,这个时候就可以用MapReduce来将单个作业分配给多个计算机执行。它的框架可参考如下图:(图片取自网络,侵删)

将输入数据分配给多台计算机上做运算(map过程),将它们的输出通过某种方式组合(一般还会排序)。将结果再分成多个小份分给多台计算机进行工作(reduce过程),最后得到最终结果。reduce过程可以重复多次。
优点:可在短时间内完成大量工作。
缺点:算法必须进过重写,需要对系统工程有一定的理解。
适用数据类型:数值型和标称型

《机器学习实战》总结相关推荐

  1. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  2. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法1

    最近在看侯捷的<STL源码剖析>,虽然感觉自己c++看得比较深一点,还是感觉还多东西不是那么明白,这里将一些细小的东西或者概念记录一下. 有些东西是根据<C++编程思想>理解的 ...

  3. 《STL源码剖析》学习--6章--_rotate算法分析

     最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. <STL源码剖析>学习--6章--random access ite ...

  4. 《STL源码剖析》学习--6章--power算法分析

    最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. 6章--power算法分析 书本中的算法如下所示: template <clas ...

  5. STL源码剖析——P142关于list::sort函数

    在list容器中,由于容器自身组织数据的特殊性,所以list提供了自己的排序函数list::sort, 并且实现得相当巧妙,不过<STL源码剖析>的原文中,我有些许疑问,对于该排序算法,侯 ...

  6. STL源码剖析---红黑树原理详解下

    转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7760584       算法导论书上给出的红黑树的性质如下,跟STL源码 ...

  7. STL源码剖析面试问题

    当vector的内存用完了,它是如何动态扩展内存的?它是怎么释放内存的?用clear可以释放掉内存吗?是不是线程安全的? vector内存用完了,会以当前size大小重新申请2* size的内存,然后 ...

  8. STL源码剖析学习二:空间配置器(allocator)

    STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...

  9. STL源码剖析 数值算法 copy 算法

    copy复制操作,其操作通过使用assignment operator .针对使用trivial assignment operator的元素型别可以直接使用内存直接复制行为(使用C函数 memove ...

  10. STL源码剖析 算法开篇

    STL源码剖析 算法章节 算法总览_CHYabc123456hh的博客-CSDN博客 质变算法 质变算法 - 会改变操作对象的数值,比如互换.替换.填写.删除.排列组合.分隔.随机重排.排序等 #in ...

最新文章

  1. 得到java异常printStackTrace的详细信息
  2. 记录一下matlab三维柱状图调色详细步骤
  3. Wi-Fi 6 与 5G 相比哪个更快?
  4. 地图投影系列介绍(四)----投影坐标系
  5. Egret中使用P2物理引擎
  6. c语言char有什么作用,C语言中char*和char[]用法区别分析
  7. Java 反射(初步)
  8. bootstrap课程5 bootstrap中的组件使用的注意事项是什么
  9. STM32学习记录0003——STM32芯片解读
  10. 深入浅出程序设计竞赛笔记(草稿
  11. 什么是软件工程?它有哪些本质特征?怎么样用软件工程消除危机?
  12. Gym100015 I Identity Checker 栈容器使用,数学
  13. Kubernetes 之 集群二进制部署
  14. 猿创征文|【算法入门必刷】数据结构-栈(二)
  15. 入职阿里,一位女测试工程师的心声
  16. beecloud轻松实现支付
  17. 车速与档位匹配关系_车速与档位不匹配后果,车速与档位的合理匹配关系介绍...
  18. 述职答辩提问环节一般可以问些什么_述职答辩前
  19. Linux下交叉编译libiconv库
  20. 在eclipse中启动Tomcat但是不能打开网页

热门文章

  1. geoserver加载mysql_GeoServer+MySQL的配置过程
  2. 【在线记事本】一个程序员的随笔(与技术无关)
  3. jmeter生成优美的压力测试报告,jmeter生成html压测报告,jmeter压力测试
  4. 《编译原理》实验报告——递归下降语法分析器的构建
  5. Edraw Max——亿图图示设计软件基本使用教程
  6. BugKuCTF 杂项 白哥的鸽子
  7. CG CTF WEB 综合题2
  8. android返回键方法,Android按返回键(后退键)Back键事件捕获的两种方法
  9. 基于matlab的霍夫变换,基于matlab的霍夫变换
  10. mybatis复杂查询环境 多对一的处理 按照结果嵌套处理和按照查询嵌套处理