一文讲解各种机器学习算法选型思路

简介: 这是知乎上一个问题:k近邻、贝叶斯、决策树、svm、逻辑斯蒂回归和最大熵模型、隐马尔科夫、条件随机场、adaboost、em 这些在一般工作中分别用到的频率多大?一般用途是什么?需要注意什么?

引入



时间来到了2021年,神经网络从没人考虑,到现在已经开始独领风骚,各个领域,各个场景,NN都变得不可或缺。


我们把这一些算法分分类,大体可以分为有监督和无监督。大部分回答也是集中在有监督的选型上,无监督确实在实际工作应用中,因为各种问题没有像有监督那样好施展拳脚。


我们抛开他们复杂的外衣,抽丝剥茧,找到他们应用的关键差异吧。没有最牛的算法,只有最合适的场景。


我还是出那道最经典的题目吧。


题目:请使用一个逻辑回归的模型,建模一个身材分类器,身材分偏胖和偏瘦两种,输入的特征有身高和体重。


数据集大概长这样:



我们从逻辑回归开始讲起,顺便引入一个贯穿全文非常关键的概念,非线性。


LR



逻辑回归解决的方法就是我拍两个系数加权,使用 sigmoid(ax+by+c)就搞定了。LR建模的过程,就是学习到a b c 三个参数的过程


LR在早期工业界,有着举足轻重的地位,你可能听说过凤巢上亿特征解决个性化广告的传说。


那大概是LR这辈子的高光时刻吧。他就是搞了上亿个这样的参数,然后算了个加权求和,通过sigmoid转化为概率。看起来这个模型,有多少人力,就有多少智能,非常接近人工智能的本质了,我只要能把特征搞出来,权重算出来,那问题不就迎刃而解了吗?


事实上,我们很难单纯地从身高和体重决策出一个人的身材,你说姚明体重280斤,他真的一定就胖吗??别忘了他身高有226公分的。


这组数据可能超出了你的认知,只看数据不看照片,一下子不好说他是胖还是瘦。(其实挺胖的哈哈)


嗯,这个你看到那组数据,不好一下子说出来的感觉,就是机器学习里面非常关键的概念,“非线性”。


这个问题不是那么好“线性“解决的,线性解决的意思就是我拍两个系数加权在原始特征x和y上,使用 sigmoid(ax+by+c)就搞定了。


解决的方法有两个:


1.升级模型,把线性的逻辑回归加上kernel来增加非线性的能力。我们使用这个模型 sigmoid(ax+by+kx*y^(-2)+c),这个模型通过多项式核方法的升级,解决了低维空间线性模型不太好解决的问题。


2.特征工程,掏出体检报告上的BMI指数,BMI=体重/(身高^2)。这样,通过BMI指数,就能非常显然地帮助我们,刻画一个人身材如何。甚至,你可以抛弃原始的体重和身高数据。


类似的问题还有朴素贝叶斯和SVM。


贝叶斯



大家接触朴素贝叶斯估计都是从文本分类的任务开始的。教科书上非常常讲的垃圾邮件分类例子。


朴素贝叶斯作为经典的统计机器学习方法,根正苗红的贝叶斯原理的应用,是最最直观,最最朴素和最最快的算法。


还是用我上面讲的例子,朴素贝叶斯解决这个问题怎么做的呢?


我只需要算一个这样的贝叶斯公式就好了

p(类别|特征) = p(特征|类别)*p(类别)/p(特征)

特征就是身高、体重,类别就是身材。


最后三项,对应着用身高体重身材的等维度的统计概率,都是可以在数据集中统计出来的,贝叶斯模型训练的过程,就是算这些各种形式概率表达式的过程。这样,我就把预测变成了查表连乘的过程,查表是计算机中最快的操作,意味着他也是推断最快的模型。


朴素贝叶斯假设各特征之间的条件独立性,即

p(身高、体重|身材) = p(身高|身材)*p(体重|身材)

也由于他的过度简化,导致它几乎只在特定场景应用了,比如特别简单的文本分类就比较适合朴素贝叶斯。


SVM


支持向量机也是线性的模型。

SVM应该是学术界非常喜欢的模型,他有着分类器最美好的愿望,在特征空间里画一个平面,把样本点划分开,这个模型算是把可视化角度可解释性拉满了。


往往事与愿违,很多并不是线性可分的,你没办法简单的画一个超平面。你需要画一个很曲折的东西,才能把他们分好。


回到刚才的身材分类器的例子上,如果你没有BMI指数,和有BMI指数,SVM的超平面截然不同。

有BMI指数的话,我在一维度坐标轴上画一个点就能解决。

要是没有BMI指数的话。你也只能像LR那样,通过核方法来解决了。在方式一我们使用了核方法给这些模型升维,方式二使用了特征方法。


要知道天下没有免费的午餐,在你使用核方法升维的时候,实际很难精炼出恰好是x*y^(-2)这样的多项式表达,你肯定是一股脑地把x*y,x^2*y, x*y^2 这些项都扔进去了。


决策树



这么暴力的操作,有两个问题,一是共线性,二是噪声。


第一、共线性的意思是几个项表达的含义是趋同的,保持了很强的线性关系,对于逻辑回归是致命的问题,因为他带来了权重的不稳定,要知道逻辑回归权重可是暗示了特征重要性的。还会破坏朴素贝叶斯的基本假设。这些都是有副作用的。


(要是你对这段话,不好理解的话,仔细学习下逻辑回归模型和共线性的理论,此处不单独展开)


第二、噪声让你的分类器学习到了一些不好的东西,对你的决策没有产生泛化的贡献,反而带跑偏你的模型,学习到了一些不是知识的边边角角。


而有一些模型,他们天然可以解决这些问题。

典型的就像决策树和神经网络。


决策树的优点


1.天然的鲁棒性,能自动从异常点,缺失值学到信息。不需要归一化。直接上手一把梭哈。


2.树可以半自动化地完成一些特征非线性表达的工作,而且基于贪心切分+采样等抗过拟合手段,能比较好的挖掘数据的非线性。


3.树的可解释性很好,能生产特征重要性,帮助你理解数据,改善特征工程。一个经典的套路是思考topN特征背后的逻辑,并围绕他们进行特征工程。


神经网络


NN模型也有一些天然的优点:


1.全自动化的特征工程和登峰造极的非线性表达能力,在数据表征范式统一,语义含义统一的稠密数据上(典型文本图像)上,NN一个打十个。另外,典型的像ID序列这种,人很难做出花来。也就是Bag of words或者借用embedding表达一下,还有一半是NN的功劳。


2.NN模型容量极大,在数据量的加持上,放大了1的优势。


但是看起来树模型的优点在其他模型也有,他们跟SVM和LR这些模型比又有啥区别呢?


1.第一,这些模型获取非线性的方式太粗暴了,有种大炮打蚊子的感觉。依靠kernel强行把VC维提高,带来的噪声特别多,有用信息很少。第二,kernal是有先验的,很容易被人设的参数带跑偏。这在实际业务数据中是非常致命的。


2.理论上LR+完美的特征工程可以很强,但是太难了,又不是人人都是特征工程大师。早期凤巢亿级特征跑LR效果特别好逐渐成为传说。


给你们整个表吧


横向对比



我把之前用过的图再改进一下。

这个图表达意思是,y轴是人的认知可解程度,对应着就是特征工程的难度和可行性。x轴是数据的非线性


经常调侃的人工智能,就是有多少人工,就有多少智能,就是线性模型因人工特征工程发挥的空间。随着数据非线性的提高,特征工程难度的增大,LR线性模型的用武之地就越来越小。反而逐渐决策树,神经网络等非线性模型开始大展身手。


回到问题,这些模型使用的频率,大概也和各自的图中面积差不多一致了。神经网络在工业界,已经占据了半边天,决策树占据了剩下的绝大部分,还有一点点场景,因为特殊性,仍旧用着LR等模型。


相关文章
|
16天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
58 4
|
13天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
30 1
|
21天前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
25天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
69 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
22天前
|
机器学习/深度学习 算法
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
32 0
|
23天前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
31 0
|
2月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
2月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
71 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
2月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
1月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。