[编程开发] 我该如何入门Python机器学习?

[复制链接]
licheng 发表于 2023-10-4 19:22:20|来自:北京 | 显示全部楼层 |阅读模式
嗯,我是一名大三学生,学过C语言,c++,c#,自学了Python基础,高数学习了线性代数,微积分学,简单的概率,没有学习统计知识,没有学过数据结构与算法以及计算机系统,请问各位大佬,我该如何入门Python机器学习?
全部回复5 显示全部楼层
rainsun66 发表于 2023-10-4 19:22:47|来自:北京 | 显示全部楼层
研究生期间,我从机械专业转为工业大数据+机器学习。导师直接给了我一篇论文和前辈留下的代码,让我复现论文的内容,完成一个机器学习项目。当时的我完全没有学过Python,对机器学习了解甚少,从一脸懵,到后来逐渐入门Python机器学习,积累了一些学习经验。现在简要分享一下~
入门Python机器学习,我认为可以分成两部分:机器学习的基本概念和Python机器学习实战。在掌握了基本概念之后,就要去通过项目和代码去学习,多看代码。并且,在实践和解决实际问题的过程中,我们也会对所学的知识印象更深刻。
机器学习的基本概念

机器学习(Machine Learning)指的是一类让计算机能从数据中学习,找到数据规律,并预测未知的方法。其中,用于给计算机学习规律的数据称为“训练集”,用于检验机器学习效果的数据称为“测试集”。机器学习模型在未知数据或测试数据上的表现称为“泛化能力”
按照机器学习解决问题的类型,可以分成监督学习、无监督学习、半监督学习。
监督学习(Supervised Learning):指训练数据有标注,按照预测的结果类型,可以进一步分成分类(预测类别)和回归(预测数值)

  • 举个例子:给定一个瓜的色泽、敲声等数据,判断这个瓜是好瓜还是坏瓜,这个是分类问题;根据瓜的色泽、敲声,预测瓜的含糖量,这个是回归问题。
无监督学习(Unsupervised Learning):指的训练数据中没有标注。主要用于聚类

  • 比如,给定一群瓜的色泽、敲声、根蒂状态等数据,来给一群瓜聚成不同的类别,这样可以给不同的瓜类定不同的价格。注意,这里数据没有标注,我们不清楚具体的类别是哪些,需要根据聚类后的群详细探查数据,找到数据的共性(例如本地有籽瓜、本地无籽瓜、外地有籽瓜、外地无籽瓜等)。
半监督学习(Semi-supervised Learning):介于监督学习和无监督学习之间,训练数据只有部分有标注,模型需要利用有标注和无标注的数据一起训练。存在半监督学习的原因是,数据人工标注成本高昂。

  • 举个例子,瓜农有100个瓜,由于时间成本原因,他单独抽样了10个瓜,根据色泽、敲声标注为好瓜/坏瓜,将40个无标注的数据并入训练集训练;最后预测剩下50个瓜的类别。
机器学习的基本步骤如下:
数据预处理:对数据进行清洗、异常值处理;同时将不同大小的数据规范化成0-1之间,减少不同范围的的数据对结果的影响。
特征提取/选择:对高维数据进行降维,选择或者构造对结果影响最大的数据特征
前两步在机器学习实践中比较重要,选取好的数据特征,比选取好模型带来的效果常常更显著。
模型选择:根据数据类型和需要解决的问题,选择合适的机器学习模型。常见的机器学习模型有:

  • 监督学习:逻辑回归(Logistic Regression)、支持向量机(Support Vector Machine)、随机森林(Random Forest)、多层感知器(Multi-Layer Perceptron)等
  • 无监督学习:K均值聚类、主成分分析(Principal Component Analysis)、层次聚类(Hierarchical Clustering)等
  • 半监督学习:自训练(Self-Training)、半监督支持向量机(Semi-Supervised SVM)、标签传播(Label Propagation)、生成式半监督学习(Generative Semi-Supervised Learning)等方法
机器学习模型的详细原理,可以参考周志华的《机器学习》。
结果验证:在测试集上进行模型效果验证,选择最优的模型。回归问题通常计算测试集实际值与预测值的均方误差;而对于分类问题,常计算模型的精度,查全率,召回率等参数。
在结果验证时,机器学习模型如果泛化性能不佳,会出现两种情况:过拟合、欠拟合。
过拟合:指模型过于复杂,模型过度适应训练数据,在新数据上表现不佳。
欠拟合:指模型过于简单,不能很好的拟合数据的变化,未能捕捉到数据关键特征。
项目实践

实践之前,可以先配置好Python本地环境,还需要了解Python常用的机器学习库:

  • Numpy(用于矩阵向量计算)
  • Pandas(用于数据分析任务)
  • matplotlib(方便的绘图工具库)
  • Scikit-learn(几乎集成了所有常见的机器学习算法)
  • Keras/Tensorflow/Pytorch(主要用于深度学习)
对于初学者来说,多看代码是比较重要的,这里有两种方式接触到机器学习项目的代码。
1.可以去Kaggle(著名的在线数据科学竞赛平台和社区,它提供了真实的数据集和各类问题)的Competitions模块,找一些简单的数据和问题,比如泰坦尼克号存活预测问题,可以看到其它人上传的Code。


2.去Github(全球最大的代码开源社区之一)找一些Machine Learning为关键词的项目,直接看代码。
以上代码,最好能在本地或者线上编译器运行一遍。
刚刚入门时,在看代码的过程中,我常常会遇到一些看不懂的地方,需要去各种地方查阅资料,一研究就是大半天。
而现在,AI大模型可以帮我们解读代码的内容。比如我对上述从Kaggle中找到的数据预处理代码进行提问:


利用AI大模型帮助我们解读代码,阅读代码的效率可以大大提升,理解成本降低。
随着AI大模型时代的到来,越来越多的人会使用AI大模型工具帮助自己提升工作和学习效能。推荐你们「知乎知学堂」联合「AGI课堂」官方发布的:AI大模型免费公开课,
让你在两天内从容应对AI技术革新,成为大模型时代受益者。添加助教微信还可以领取AI 大模型资料包、好用的AI工具名称和网址等资源,帮助你提升学习效率~
可以用一到两周的时间,找一些基础的项目(包括分类、回归等不同的问题类型),只看别人的代码,多多理解学习,然后运行,体验下编译出结果的快乐。
接下来,我们要开始自己实战了。仍然是用之前找的项目,尝试不看其他人的逻辑,自己应用其他机器学习算法跑一遍整个数据预处理、特征选择、模型选择、结果验证的流程;
遇到不会的地方,可以自己查阅Python官方文档,或者向AI大模型工具进行提问。
这样,你就基本入门了几个机器学习项目。
之后,你可以在Kaggle找一些难度更高、数据量更大的项目,用同样的流程学习:
用一两周先看别人的代码,再用一两周自己尝试实现。
当你积累得足够多的时候,之后可以参加一些实时的竞赛,竞赛中是看不到别人的代码的,整个项目完全由自己实现。


以上是机器学习入门的相关介绍。Linus大佬说过:"Talk is cheap, show me your code"。机器学习是一门实践驱动的领域,真正的理解和掌握需要不断地动手实践,加油吧!
<hr/>我是等壹,毕业于上海交大,现于某大厂当码农。是个热爱技术,喜欢看书、旅游、看动漫的妹子;是个“总想看更多的书,去更远的地方”的佛系工作狂~
我会定期分享技术、学习等干货,欢迎关注!
<a data-draft-node="block" data-draft-type="link-card" href="http://www.zhihu.com/people/shi-xing-deng-yi" data-image="http://pic4.zhimg.com/v2-14f903c121f6df9c5dad7ab74d55565f_ipico.jpg" data-image-width="977" data-image-height="977" class="internal">等壹
暖月 发表于 2023-10-4 19:23:08|来自:北京 | 显示全部楼层
自学Python的话,首先先过一遍基本的知识:变量、数据结构、语法等;然后尝试使用这个知识点写一小段代码;入门后配合算法视频教程,进行自己感兴趣领域的研究,几个例子:
Python环境下基于机器学习(多层感知机,决策树,随机森林,高斯过程,AdaBoost,朴素贝叶斯)的往复式压缩机故障识别(出口阀泄漏,止逆阀泄露,轴承损伤,惯性轮损伤,活塞损伤,皮带损伤等) - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/566923531
基于Python小波包能量谱的时序信号异常检测 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/566389130
基于Python概率密度函数分析的信号异常检测 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/566309389
基于python的包络谱信号分析 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/566167954
基于1D-CNN、2D-CNN,LSTM和SVM的一维信号分类 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/566132379
基于小波包和随机森林的uOttawa轴承数据集分类 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/565056591
我的现代信号处理、机器学习、深度学习配置环境 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/563463533
使用1D CNN对智能手表采集的少量心率振动信号进行分类 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/556643969
基于自编码器的语音信号降噪 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/556513015
基于小波包特征提取和随机森林的CWRU轴承数据集故障识别 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/556172942
基于python的Void-Kalman滤波方法 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/555127359
基于小波分解和卷积神经网络的图像识别研究 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/554876956
时间序列信号处理系列-基于Python的同步压缩变换 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/554189692
基于小波分析和机器学习的时间序列分析与识别 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/554097033
基于小波变换和机器学习的地震信号处理和识别 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/553158878
基于小波变换的稳健的单导联心电图 (ECG) 描绘 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/553061958
使用最大离散重叠小波变换MODWT和支持向量回归 SVR的金融时间序列预测 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/552759437
小波降噪基础-python版本 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/552373046
基于麦克风信号与随机森林的机器轴承运行状态识别 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/552366393
基于小波分析的打鼾(阻塞性睡眠呼吸暂停)检测 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/552210480
利用机器学习模型设计正交小波滤波器 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/537254014
同步挤压小波变换-尺度转换为频率 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/532206478
NASA涡轮喷气发动机风扇的剩余寿命RUL预测-基于传统机器学习 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/528098659
NASA涡轮喷气发动机风扇的剩余寿命RUL预测-基于LSTM网络,Lookback=20 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/52
zarong 发表于 2023-10-4 19:24:04|来自:北京 | 显示全部楼层
机器学习是人工智能在近期最重要的发展之一。机器学习的理念是,不将智能看作是给机器传授东西,而是机器会自己学习东西。这样一来,机器就可以直接从经验(或数据)中学习如何处理复杂的任务。
在机器学习系统中,计算机通常是通过在相同任务的大型数据库中进行训练,然后自己编写代码去执行一项任务。其中很大一部分涉及到识别这些任务中的模式,然后根据这些模式做出决策。
Python机器学习路线思维导图



Python机器学习教程

入门的第一步是学习一些经典课程并配套经典书籍,一般来说这个过程在半年之内比较合适。入门阶段给大家分享的课程和书籍都属于难度非常低的,对数学和编程都没什么太大的要求。
入门参考视频:吴恩达Cousera机器学习课程(Machine Learning | Coursera)是很多人的启蒙课程,难度适中且完全免费。Coursera上总共有49285个人给出了评分,平均得分4.9分,满分5分。当然也有提高版的 吴恩达课程:(deeplearning.ai)。有条件的朋友可以通过Coursera学习获得证书。
在学习吴恩达的在线课程时,也可以同时阅读这本机器学习书籍补充理论知识:Python机器学习(作者 Sebastian Raschka)
进阶学习参考:入门阶段有了一定的理论基础,这个时候最重要的就是进行实践。
Kaggle挑战赛/练习
Kaggle(Your Home for Data Science)在数据分析领域早已大名鼎鼎,甚至可以说是数据分析第一社区,Kaggle上有很多很好的数据集和挑战赛,你可以尝试这些挑战取得名次,甚至拿到奖金,对于将来找工作也非常有帮助。
使用Kaggle的目的主要是将技能落在实处。机器学习最大的幻觉就是觉得自己什么都懂了,但等到真的使用时发现并不奏效,而Kaggle是一个低成本的应用机器学习的机会。
自学Python机器学习的误区

1.  不要试图掌握所有的相关数学知识再开始学习

不要试图补足数学知识再开始学习机器学习。一般来说,大部分机器学习课程/书籍都要求:

  • 线性代数:矩阵/张量乘法、求逆,奇异值分解/特征值分解,行列式,范数等
  • 统计与概率:概率分布,独立性与贝叶斯,最大似然(MLE)和最大后验估计(MAP)等
  • 优化:线性优化,非线性优化(凸优化/非凸优化)以及其衍生的求解方法如梯度下降、牛顿法、基因算法和模拟退火等
  • 微积分:偏微分,链式法则,矩阵求导等
  • 信息论、数值理论等
建议在机器学习的过程中哪里不会补哪里,这样更有目的性且耗时更低。
2.  不要把深度学习作为入门第一课

虽然很多人都是冲着深度学习来的,但深度学习作为机器学习的第一课并不是一个聪明的选择。原因如下:

  • 深度学习的黑箱性更加明显,很容易学得囫囵吞枣
  • 深度学习的理论/模型架构/技巧还在一直变化当中,并未尘埃落定
  • 深度学习实验对硬件要求高,不太适合自学或者使用个人电脑进行学习
3.  不要收集过多的资料 & 分辨资料的时效性

机器学习的资料很多,动辄就有几个G的材料可以下载或者观看。而很多朋友都有“收集癖”,一下子购买十几本书的人我也常常能够看到。
机器学习的发展和变化速度很快。在入门期间,建议“小而精”的选择资料,选择近期出版的且口碑良好的书籍
如果你看技术文章有点学不下去,对文中的技术概念还是不好理解,或许是因为之前的基础确实不够扎实,可以移步查看宋宋给大家筛选的Python机器学习视频。
人工智能机器学习及数据分析入门必学数学知识之python数据分析线性代数基础教程
机器学习Sklearn全套教程(程序员必备)
Python数据分析+人工智能全套教程,Python数据分析师必备教程
Kimi 发表于 2023-10-4 19:24:34|来自:北京 | 显示全部楼层
一、机器学习的定义

从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。

  • “训练”与“预测”是机器学习的两个过程,“模型”则是过程的中间输出结果,“训练”产生“模型”,“模型”指导 “预测”。
  • 机器学习方法是计算机利用已有的数据(经验),得出了某种模型(迟到的规律),并利用此模型预测未来(是否迟到)的一种方法。
  • 让我们把机器学习的过程与人类对历史经验归纳的过程做个比对。


二、机器学习的范围

其实,机器学习跟模式识别,统计学习,数据挖掘,计算机视觉,语音识别,自然语言处理等领域有着很深的联系。
从范围上来说,机器学习跟模式识别,统计学习,数据挖掘是类似的,同时,机器学习与其他领域的处理技术的结合,形成了计算机视觉、语音识别、自然语言处理等交叉学科。因此,一般说数据挖掘时,可以等同于说机器学习。同时,我们平常所说的机器学习应用,应该是通用的,不仅仅局限在结构化数据,还有图像,音频等应用。


三、Python机器学习的6大库
Python 用于 AI 和 ML 的 6 大库和框架
Python 编程语言最棒的地方是有大量的机器学习开发的库。以下是 6 大 Python 库,它们通过可读性和强大的算法使人工智能无缝衔接。
1、NumPy
如果没有 NumPy,数据科学将是不完整的。它是一个可以进行科学计算的 Python 软件包。NumPy 是一个神奇的多维数组对象库。它们协同工作,降低了程序的计算复杂性。
2、SciPy
SciPy 是 Python 人工智能项目的另一个热门库,也是涉及数学和工程领域中, Python 程序员科学和重度计算的首选。它提供了数值优化和集成的例程,对于初学者来说非常友好。
3、Scikit-Learn
这个库建立在 NumPy 和 SciPy 之上,主要用于监督和无监督学习。它是一个用于数据挖掘和数据分析的完美工具。
4、Pandas
Pandas 是开源的 Python 软件包,使程序员能够对数据进行操作和分析。它具有高效的数据探索和可视化功能,并提供高级数据结构和多种工具,可用于密切处理多个数据集。
5、Keras
Keras 是一个运行在 TensorFlow 上的 API。Keras的重点是让开发者快速实验人工智能。这个库的用户体验比 TensorFlow 好得多——因为它是用 Python 开发的,所以比其他工具更容易理解。
6、Matplotlib
所有库中最强大的是 Matplotlib。它提供了数据可视化和探索的功能,以及图表、直方图和散点图等,以定制 Python AI 项目。Matplotlib 有助于在更短的时间内快速操作数据进行可视化展示。
这些是 Python和机器学习的6大库。除此以外,还有TensorFlow、NLTK、PyBrain、Caffe等库,这些库会导致AI应用的适当性能。
四、Python机器学习重点

(1)线性代数与微积分

线性代数
线性代数中的概念是理解机器学习理论所必需的基础知识,尤其是对那些处理深度学习算法的人而言。在刚接触机器学习时,你可以不需要掌握线性代数。
但到了一定程度后,当你希望更好地理解不同机器学习算法运作原理时,线性代数就很有用了,它可以帮助你在开发机器学习系统时更好地做决策。
微积分
微分的计算及其几何、物理含义,是机器学习中大多数算法的求解过程的核心。比如算法中运用到梯度下降法、牛顿法等。
如果对其几何意义有充分的理解,就能理解“梯度下降是用平面来逼近局部,牛顿法是用曲面逼近局部”,能够更好地理解运用这样的方法。
(2)典型算法

绝大多数问题用典型机器学习的算法都能解决,粗略地列举一下这些方法如下:

  • 处理分类问题的常用算法包括:逻辑回归(工业界最常用),支持向量机,随机森林,朴素贝叶斯(NLP中常用),深度神经网络(视频、图片、语音等多媒体数据中使用)。
  • 处理回归问题的常用算法包括:线性回归,普通最小二乘回归(Ordinary Least Squares Regression),逐步回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)
  • 处理聚类问题的常用算法包括:K均值(K-means),基于密度聚类,LDA等等。
  • 降维的常用算法包括:主成分分析(PCA),奇异值分解(SVD) 等。
  • 推荐系统的常用算法:协同过滤算法
  • 模型融合(model ensemble)和提升(boosting)的算法包括:bagging,adaboost,GBDT,GBRT
  • 其他很重要的算法包括:EM算法等等。
(3)机器学习的通用工作流程


  • 定义问题,收集数据集
  • 选择衡量成功的指标
  • 确定评估方法
  • 准备数据
  • 开发比基准更好的模型
  • 扩大模型规模:开发过拟合的模型
  • 模型正则化与调节超参数
五、机器学习教程

该阶段是机器学习的入门课程,主要介绍一些经典的传统机器学习算法,如分类算法:KNN算法,朴素贝叶斯算法,逻辑回归,决策树算法以及随机森林;回归算法:线性回归,岭回归;聚类算法:KMeans算法,结合Python语言实现的经典机器学习库Sikit-Learn库,实现一些小型预测案例。
黑马程序员 3 天快速入门 Python 机器学习<hr/>【内容参考】:
[1] 从机器学习谈起 - 计算机的潜意识 - 博客园
[2] Why Python Is Best for Machine Learning - DZone AI
[3] 机器学习系列(7)_机器学习路线图(附资料)_寒小阳-CSDN博客
王之一站 发表于 2023-10-4 19:25:30|来自:北京 | 显示全部楼层
先附上Scikit-learn中文文档:
scikit-learn中文社区
机器学习既是艺术又是科学。但当您查看机器学习算法时,没有一种解决方案或一种适合所有情况的算法。有几个因素会影响您选择哪种机器学习。
有些问题非常具体,需要采取独特的方法。例如,如果您使用推荐系统,这是一种非常常见的机器学习算法,解决的是非常具体的问题。而其他问题非常开放,则需要试错的方法去解决。监督学习、分类和回归都是非常开放的。它们可以用于异常检测,或者用来打造更通用的预测模型。。
我们在选择机器学习算法时所做的一些决定,更多地取决于商业决策,而不是优化或者算法的技术面。在下文中,我们将讨论有助于缩小机器学习算法选择范围的一些因素。
数据科学过程

在开始审视不同的机器学习算法之前,你必须对你的数据、面临的问题和局限有一个清晰的认识。
了解你的数据

在决定使用哪种算法时,必须考虑数据的类型和种类。一些算法只需要少量样本,另一些则需要大量样本。某些算法只能处理特定类型的数据。例如,朴素贝叶斯算法与分类数据相得益彰,但对缺失数据完全不敏感。
因此,您需要:
了解数据

  • 查看汇总统计信息和可视化


  • 百分位数可以帮助确定大部分数据的范围
  • 平均值和中位数可以描述集中趋势
  • 相关性可以指明紧密的关系

  • 可视化数据


  • 箱形图可以识别异常值
  • 密度图和直方图显示数据的分布
  • 散点图可以描述双变量关系
清理数据

  • 处理缺失值。缺失数据对某些模型的影响超过了对其他模型的影响。即便是对能够处理缺失数据的模型来说,它们也可能受到影响(某些变量的缺失数据会导致糟糕的预测)。
  • 选择如何处理异常值


  • 异常值在多维数据中非常常见。
  • 一些模型对异常值的敏感性低于其他模型。通常,树模型对异常值的存在不太敏感。但是,回归模型或任何尝试使用等式的模型肯定会受到异常值的影响。
  • 异常值可能是数据收集不正确的结果,也可能是真实的极端值。
3.数据是否需要汇总
增强数据

  • 特征工程是从原始数据到建模可用数据的过程。这有几个目的:


  • 使模型更易于解释(比如分箱)
  • 抓取更复杂的关系(比如神经网络)
  • 减少数据冗余和维度(比如主成分分析)
  • 重新缩放变量(比如标准化或正则化)
2.不同的模型可能对特征工程有不同的要求。一些要求已经内置到特征工程中。
问题归类

下一步是对问题进行归类。这分两步。

  • 按输入数据分类:


  • 如果是标签数据,那就是监督学习问题。
  • 如果是无标签数据,想找到结构,那就是非监督学习问题。
  • 如果想通过与环境互动来优化一个目标函数,那就是强化学习问题。
2.按输出数据分类。

  • 如果模型的输出数据是一个数字,那就是回归问题。
  • 如果模型的输出数据是一个类,那就是分类问题。
  • 如果模型的输出数据是一组输入数据,那就是聚类问题。
  • 是不是想检测一个异常?那就是异常检测。
了解你的限制


  • 数据存储能力如何?根据系统的存储能力,你可能无法存储大量的分类/回归模型或者待聚类的大量数据。例如,嵌入式系统就是这样。
  • 是否必须迅速作出预测?在实时应用中,尽可能快地作出预测显然非常重要。例如,在自动驾驶时,必须尽可能快地对道路标志进行分类,以免发生事故。
  • 是否必须迅速学习?在某些情况下,快速训练模型是必需的。有时,你需要在匆忙之中用不同的数据集迅速更新你的模型。
查找可用的算法

你已经对自己的处境有了一个清晰的认识,接下来是识别适用的、利用手中工具可以实际执行的算法。影响模型选择的因素包括:

  • 模型是否符合商业目标
  • 模型需要多大程度的预处理
  • 模型的准确性
  • 模型的可解释性
  • 模型的速度:建立模型需要多久,模型作出预测需要多久
  • 模型的扩展性
影响算法选择的一个重要标准是模型的复杂性。一般来说,更复杂的模型:

  • 需要更多的特征来学习和预测(比如使用两个特征VS使用10个特征来预测一个目标)
  • 需要更复杂的特征工程(比如使用多项式项、交互关系或主成分)
  • 需要更大的计算开销(比如1颗决策树VS由100颗决策树组成的随机森林)
此外,同一种机器学习算法会因为参数的数量或者对某些超参数的选择而变得更加复杂。例如:

  • 一个回归模型可能拥有更多的特征或者多项式项和交互项。
  • 一颗决策树可能拥有更大或更小的深度。
使同一算法更复杂,这会增加过拟合的几率。


常用的机器学习算法

线性回归
这可能是最简单的机器学习算法。当你想计算某个连续值的时候,可以使用回归算法,而分类算法的输出数据是类。所以,每当你要预测一个正在进行当中的过程的某个未来值时,你可以使用回归算法。但线性回归在特征冗余(也就是存在多重共线性)的情况下会不稳定。
线性回归的几个用例:

  • 是时候从一个地方到另一个地方
  • 预测特定产品在下个月的销量
  • 血液酒精含量对身体协调性的影响
  • 预测每月礼品卡销量和改善每年收入预期
逻辑回归
逻辑回归进行二元分类,所以输出数据是二元的。这种算法把非线性函数(sigmoid)应用于特征的线性组合,所以它是一个非常小的神经网络实例。
逻辑回归提供了模型正则化的很多方法,不必担心特征是否相关,就像使用朴素贝叶斯算法的时候一样。与决策树和支持向量机相比,逻辑回归提供了出色的概率解释,能轻易地用新数据来更新模型。如果想建立一个概率框架,或者希望以后将更多的训练数据迅速整合到模型中,可以使用逻辑回归。这种算法还能帮助你了解预测背后的贡献因素,不是一种黑箱方法。
逻辑回归的几个用例:

  • 预测客户流失
  • 信用评分和欺诈检测
  • 衡量营销活动的效果
决策树
人们很少使用单一的决策树,但与其他很多决策树结合起来,就能变成非常有效的算法,比如随机森林和梯度提升树。
决策树可以轻松地处理特征的交互关系,并且是非参数化的,所以不必担心离群值或者数据是否线性可分。缺点是不支持在线学习,所以在新样本到来时,必须重建决策树。另一个缺点是容易过拟合,但随机森林和提升树等集成方法可以克服这一缺点。决策树还会占用很多内存(特征越多,决策树就可能越深、越大)。
决策树是帮助你在几个行动方案之间作出选择的出色工具。

  • 投资决策
  • 客户流失
  • 银行贷款违约人
  • 自建VS购买决策
  • 销售线索资质
K-means
有时,你不知道任何标签,你的目标是根据对象的特征赋予标签。这被称为聚类任务。聚类算法的一个用例是根据某些共同属性,将一大群用户分组。
如果在你的问题陈述中,存在“这是如何组织的”等疑问,或者要求将某物分组或聚焦于特定的组,那么你应该采用聚类算法。
K-Means的最大缺点,在于必须事先知道你的数据中将有多少个簇。因此,这可能需要进行很多的尝试,来“猜测”簇的最佳K值。
主成分分析(PCA)
PCA能降维。有时,数据的特征很广泛,可能彼此高度相关,在数据量大的情况下,模型容易过拟合。这时可以使用PCA。
PCA大受欢迎的一个关键,在于除了样本的低维表示以外,它还提供了变量的同步低维表示。同步的样本和变量表示提供了以可视方式寻找一组样本的特征变量。
支持向量机(SVM)
SVM是一种监督学习方法,被广泛用于模式识别和分类问题(前提是数据只有两类)。
SVM的优点是精度高,对避免过拟合有很好的理论保障,而且只要有了适当的核函数,哪怕数据在基本特征空间中不是线性可分的,SVM也能运行良好。在解决高维空间是常态的文本分类问题时,SVM特别受欢迎。SVM的缺点是消耗大量内存、难以解释和不易调参。
SVM在现实中的几个应用:

  • 探测常见疾病(比如糖尿病)患者
  • 手写文字识别
  • 文本分类——按话题划分的新闻报道
  • 股价预测
朴素贝叶斯
这是一种基于贝叶斯定理的分类方法,很容易构建,对大数据集特别有用。除了具有简单的优点以外,朴素贝叶斯甚至好于某些高度复杂的分类方法。在CPU和内存资源是限制因素的情况下,朴素贝叶斯也是很好的选择。
朴素贝叶斯超级简单,只需要做些算术即可。如果朴素贝叶斯关于条件独立的假设确实成立,那么朴素贝叶斯分类器将比逻辑回归等判别模型更快地收敛,因此你需要的训练数据更少。即使假设不成立,朴素贝叶斯分类器在实践中仍然常常表现不俗。如果你需要的是快速简单且表现出色,朴素贝叶斯将是不错的选择。其主要缺点是学习不了特征间的交互关系。
朴素贝叶斯在现实中的几个应用:

  • 情感分析和文本分类
  • 推荐系统,比如Netflix和亚马逊
  • 把电子邮件标记为垃圾邮件或者非垃圾邮件
  • 面部识别
随机森林
随机森林包含多颗决策树。它能解决拥有大数据集的回归和分类问题,还有助于从众多的输入变量中识别最重要的变量。随机森林可扩展到任意维数,其表现通常是可接受的。遗传算法可扩展到任何维度以及对数据本身知之甚少的任何数据,微生物遗传算法实现起来代价最低、最简单。但随机森林的学习速度可能很慢(取决于参数化),而且不可能迭代地改进生成模型。
随机森林在现实中的几个应用:

  • 预测高风险患者
  • 预测制造业的零件故障
  • 预测贷款违约人
神经网络
神经网络包含神经元之间的连接权重。权重是平衡的,在学习数据点后继续学习数据点。所有权重被训练后,神经网络可以用来预测类或者量,如果发生了一个新的输入数据点的回归。用神经网络可以训练极其复杂的模型,它们能作为黑箱,不必在训练模型之前进行不可预测的、复杂的特征工程。再加上“深度方法”,即便是更加不可预测的模型也能被用来实现新的可能性。例如,利用深度神经网络,对象识别近期取得巨大进步。应用于非监督学习任务,比如特征提取,深度学习还能从原始图像或语音中提取特征,不需要太多的人类干预。
另一方面,神经网络非常难以解释说明,参数化极其令人头疼,而且非常耗费资源和内存。
Scikit速查表
scikit-learn提供了一张非常深入、清晰易懂的流程图,帮助你选择适当的算法,用起来非常方便。


总结
通常来说,你可以参考以上内容,缩小算法选择的范围,但一开始很难知道哪个算法最适合你。最好是迭代筛选。把你的数据输入你认为可能是佳选择的机器学习算法,并行或依次运行这些算法,最后评估算法的表现,选出最好的那个。
最后,为现实问题设计恰当的解决方案不仅仅是一个应用数学问题,还需要考虑商业需求、规章制度、利益相关者的关切和相当多的专业知识。在解决一个机器问题时,结合和平衡这几个方面至关重要。能做到这一点的人才能创造最大的价值。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则