常用的机器学习算法小结

=Start=

缘由:

简单整理一下,方便以后参考。

正文:

参考解答:

一般数据处理的流程如下:

数据处理的一般流程

另外就是我自己从其它地方看到的一个大致的路线(不一定正确):
AI人工智能 -> ML机器学习 -> DL深度学习 -> NLP自然语言处理

ML机器学习
有监督学习

分类

    • kNN
    • 决策树
    • 朴素贝叶斯
    • SVM
    • logistic回归
    • AdaBoost

回归

    • 线性回归
    • 树回归
无监督学习

聚类

    • kMeans
    • EM
    • DBSCAN
    • Apriori
    • FP-growth

密度估计

常用的降维方法

PCA

LDA

DL深度学习
  • CNN-卷积神经网络
  • RNN-递归神经网络
  • LSTM-长期短期记忆网络

==

kNN算法
核心:将样本分到离它距离最近的样本所属的类。

决策树
核心:一组嵌套的判定规则。

贝叶斯分类器
核心:将样本判定为后验概率最大的类。

SVM-支持向量机
核心:最大化分类间隔的线性分类器(不考虑核函数)。

Logistic回归
核心:直接从样本估计出它属于正负样本的概率。

AdaBoost算法
核心:用多个分类器的线性组合来预测,训练时重点关注错分的样本,准确率高的弱分类器权重大。


人工神经网络
核心:一个多层的复合函数。

CNN卷积神经网络
核心:一个共享权重的多层复合函数。
卷积神经网络在本质上也是一个多层复合函数,但和普通神经网络不同的是它的某些权重参数是共享的,另外一个特点是它使用了池化层。训练时依然采用了反向传播算法,求解的问题不是凸优化问题。和全连接神经网络一样,卷积神经网络是一个判别模型,它既可以用于分类问题,也可以用用于回归问题,并且支持多分类问题。

RNN循环神经网络
核心:综合了复合函数和递推数列的一个函数。和普通神经网络最大的不同在于,循环神经网络是一个递推的数列,因此具有了记忆功能。

kMeans算法
核心:把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定。


PCA
核心:向重构误差最小(方差最大)的方向做线性投影。

LDA
核心:向最大化类间差异、最小化类内差异的方向线性投影。

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4543.html

《常用的机器学习算法小结》上有4条评论

  1. 关于学习机器学习算法的一些建议(忠告)
    https://zhuanlan.zhihu.com/p/69104881

    * 不要将大把时间浪费在一次性搞懂理论理解上
    * 不要尝试停下来理解所有的知识点
    * 不要浪费时间:请学习快速学习知识点,一天学4-5个
    * 请跑代码,“真的”去跑代码。不要去深入学习理论。去玩转代码,看看它们“吃进什么吐出什么”
    * 选择一个项目,认真做好,做到超棒!
    * **如果卡壳了,不要停下来深挖,继续前行!



    如果你不确定哪个学习效果更好,每个都试试看。

    多数公司浪费大量时间在收集更多数据上。正确做法是,用一小撮数据跑跑看,然后在看问题是否是数据不够。

    如果你认为自己“天生不擅长数学”, 请看看Rachel的TED演讲: There’s no such thing as “not a math person” 8. My own input: only 6 minutes, everyone should watch it!

    可能最重要的是和小伙伴们一起学,这样效果往往更好。组建一个读书会,学习小组,定期聚会,动手做些项目。不需要是什么特别棒的东西,只要是能让世界更美好一点,甚至是让你的2岁大孩子开心的事情。完成一件事情,然后在进一步完善它。

    学习深度学习, 最重要的就是代码,不停写代码,看看你的输入值,输出值,尝试输出一个你的mini-batch。

  2. 面试官如何判断面试者的机器学习水平?
    https://www.zhihu.com/question/62482926

    自己拿过Hulu,阿里,腾讯,美团的算法工程师offer,也作为面试官面试过100+候选人,简单谈一下机器学习工程师的面试,说白了就一句话,
    把你做过的机器学习项目的细节讲清楚,有自己的理解,对经典的以及前沿的机器学习知识有所了解。

    机器学习面试要考察三方面的内容,1、理论基础,2、工程能力,3、业务理解。之前有的答主罗列了几乎所有知识点,面试者能够逐一准备当然是好的,但我不相信有任何人能够对所有问题有深入的理解。也正因为这一点,面试官一般不会大面积的深入考察所有知识点,面试时间也不允许,但资深一点的面试官只要从简历出发问你一个项目,这三方面的能力也就都考察到了。毕竟魔鬼躲在细节里嘛。

    我记得我的一位面试同学介绍自己实习时候用过XGBoost预测股票涨跌,那面试官会由浅入深依次考察:
    * GBDT的原理 (理论基础)
    * 决策树节点分裂时如何选择特征,写出Gini index和Information Gain的公式并举例说明(理论基础)
    * 分类树和回归树的区别是什么?(理论基础)
    * 与Random Forest作比较,并以此介绍什么是模型的Bias和Variance(理论基础)
    * XGBoost的参数调优有哪些经验(工程能力)
    * XGBoost的正则化是如何实现的(工程能力)
    * XGBoost的并行化部分是如何实现的(工程能力)
    * 为什么预测股票涨跌一般都会出现严重的过拟合现象(业务理解)
    * 如果选用一种其他的模型替代XGBoost,你会选用什么?(业务理解和知识面)

    除了上面的问题,我会再检查一下面试者对NN,RNN,个别聚类算法,模型评估等知识的理解程度以及对GAN,LSTM,online learning是否有基本理解,这是考察面试者对经典以及前沿的机器学习知识的了解程度。再稍微检查一下面试者对工具的了解程度,写一段简单的spark或者map reduce的程序,如果无误的话,那么可以说这位面试者的机器学习部分是完全合格的。

    当然,如果你介绍的项目是用CNN实现的,这条考察线路当然是不一样的,大概会是
    LR推导->梯度消失->激活函数->TensorFlow调参经验这条路,大家体会意思就好。除此之外,还有其他工程方向的面试官会着重考察coding和一些算法题目,那是另外一个话题了。

    根据我去年的面试经验,即使清华北大的同学也往往无法回答完整这些提问。一项答不出来的话无伤大雅,但两项答不出来我基本会给fail或maybe。

    所以真的希望大家严肃对待写在简历上的东西,面试官会刨根问题的问到骨子里。但就我个人而言我不会深究面试者简历之外的东西,比如故意问一问GAN的细节让你一定要答出来,我认为这样毫无意义,有故意刁难之嫌。

  3. 这是一篇关于如何成为一名AI算法工程师的长文
    https://mp.weixin.qq.com/s/kreVG3PA1wO2xXwX5MCF5A

    # BAT常见的面试题(不分先后)
    自我介绍/项目介绍
    类别不均衡如何处理
    数据标准化有哪些方法/正则化如何实现/onehot原理
    为什么XGB比GBDT好
    数据清洗的方法有哪些/数据清洗步骤
    缺失值填充方式有哪些
    变量筛选有哪些方法
    信息增益的计算公式
    样本量很少情况下如何建模
    交叉检验的实现
    决策树如何剪枝
    WOE/IV值计算公式
    分箱有哪些方法/分箱原理是什么
    手推SVM:目标函数,计算逻辑,公式都写出来,平面与非平面
    核函数有哪些
    XGB原理介绍/参数介绍/决策树原理介绍/决策树的优点
    Linux/C/Java熟悉程度
    过拟合如何解决
    平时通过什么渠道学习机器学习(好问题值得好好准备)
    决策树先剪枝还是后剪枝好
    损失函数有哪些
    偏向做数据挖掘还是算法研究(好问题)
    bagging与boosting的区别
    模型评估指标有哪些
    解释模型复杂度/模型复杂度与什么有关
    说出一个聚类算法
    ROC计算逻辑
    如何判断一个模型中的变量太多
    决策树与其他模型的损失函数、复杂度的比较
    决策树能否有非数值型变量
    决策树与神经网络的区别与优缺点对比
    数据结构有哪些
    model ensembling的方法有哪些

    # 小结
    问题是散的,知识是有关联的,学习的时候要从大框架学到小细节。

    没事多逛逛招聘网站看看招聘需求,了解市场的需求到底是什么样的。时代变化很快,捕捉信息的能力要锻炼出来。你可以关注的点有:职业名/职业方向/需要会什么编程语言/需要会什么算法/薪资/...

    每个面试的结尾,面试官会问你有没有什么想问的,请注意这个问题也很关键。
    比如:这个小组目前在做什么项目/实现项目主要用什么语言和算法/…
    尽量不要问加不加班,有没有加班费之类的,别问我为什么这么说(摊手)

    # 一碗鸡汤
    一切才刚刚开始,别着急
    找一件可以坚持的事,不要停止去寻找的脚步

  4. 学机器学习有必要懂数学吗?深入浅出机器学习与数学的关系
    https://mp.weixin.qq.com/s/8zPh0tVVvnEbSDzNsxDcTw

    随着AI资源越来越丰富,网上po出了越来越多的机器学习路线,机器学习攻略,这些路线攻略五花八门,却都有一个共同点,最基础的是数学和编程语言。编程语言作为基础,很好理解,机器学习是靠程序来完成的嘛,当然要学会编程语言啦~但是,为什么要学数学呢?还不是一门数学,最起码的也要包括微积分、线性代数、概率论、统计学,更不用说什么凸优化、数值计算、运筹学等等,在高中时期被数学折磨的阴影还留存着,不禁想要大声问一句:在机器学习中,这些数学都是做什么的啊?为什么一定要学这些数学呢?

    首先我们要知道,机器学习理论是一个涵盖统计、概率、计算机科学和算法方面的领域,该理论的初衷是以迭代方式从数据中学习,找到可用于构建智能应用程序的隐藏洞察。尽管机器学习和深度学习有巨大的发展潜力,但要深入掌握算法的内部工作原理并获得良好的结果,就必须透彻地了解许多技术的数学原理。搞清楚这些数学原理,可以帮助我们:选择正确的算法、选择参数设置和验证策略、通过理解偏差-方差权衡,识别欠拟合和过拟合、估算正确的置信区间和不确定性。

    线性代数
    微积分
    概率论
    统计学

    统计学是核心,微积分告诉我们怎样学习和优化模型,线性代数使得算法能在超大型数据集上运行,概率论帮我们预测某个事件发生的可能性。

发表评论

电子邮件地址不会被公开。 必填项已用*标注