找回密码
 立即注册
搜索
查看: 156|回复: 0

机器学习入门方法与学习路径:数学基础与工程经验的重要性

[复制链接]

2万

主题

0

回帖

6万

积分

管理员

积分
61448
发表于 2024-12-9 15:07:22 | 显示全部楼层 |阅读模式
机器学习方法有哪些?在互联网领域从事机器学习的人往往有两类背景。他们中的一些人(大部分)是程序员。这些学生的工程经验相对较多,另一类是学生。数理统计专业的学生有比较扎实的理论基础。下面是学啦小编分享的关于如何入门机器以及学习路径的信息。我希望你喜欢它!

机器入门方法及学习路径

数学基础知识

有无数莘莘学子满怀激情,阔步前行,誓要在机器学习领域有所作为。当他们看到公式的那一刻,顿时感觉自己遇到了麻烦。是的,机器学习比其他开发工作门槛更高的根本原因就是数学。每个算法要在保证泛化能力的同时最大化对训练集的拟合,需要不断地分析结果和数据并调整参数。这就需要我们对数据分布以及模型底层的数学原理有一定的了解。幸运的是,如果你只是想理性地应用机器学习,而不是在相关领域做一些复杂的事情,你基本上可以通过一点点数学知识来理解它。至于更高级的部分,嗯,博主很愿意承认自己是一个“数学渣”。

基本上所有常见机器学习算法所需的数学基础都集中在微积分、线性代数、概率和统计学。下面我们先回顾一下知识点,后面我们会介绍一些材料来帮助学习和巩固这些知识。

结石

微分的计算及其几何和物理含义是机器学习中大多数算法求解过程的核心。例如,算法中采用梯度下降法、牛顿法等。如果你充分理解了它的几何意义,你就可以理解为“梯度下降用平面来近似局部区域,牛顿法用曲面来近似局部区域”。您可以更好地理解此类方法的使用。

凸优化和条件优化相关知识在算法中的应用随处可见。如果你能系统地学习,你对算法的理解将会达到一个新的水平。

线性代数

大多数机器学习算法的应用依赖于高效的计算。在这种场景下,程序员习惯的多层for循环通常不起作用,大多数循环操作都可以转换为矩阵之间的乘法。运算,这和线性代数有很大关系

向量的内积运算随处可见。

矩阵乘法和分解在机器学习的主成分分析(PCA)和奇异值分解(SVD)等部分出现满屏。

概率与统计

从广义上讲,机器学习所做的许多事情与统计数据分析和发现隐藏模式非常相似。

最大似然思想和贝叶斯模型是其理论基础,朴素贝叶斯(Naïve Bayes)、语言模型(N-gram)、隐马尔可夫(HMM)、隐变量混合概率模型是其高级形式。

高斯分布等常见分布是高斯混合模型 (GMM) 等的基础。

典型算法

大多数问题可以使用典型的机器学习算法来解决。这些方法的粗略列表如下:

处理分类问题的常用算法包括:逻辑回归(工业界最常用)、支持向量机、随机森林、朴素贝叶斯(NLP 常用)、深度神经网络(用于视频、图片、视频等多媒体数据)和声音)。

处理回归问题常用的算法包括:线性回归、普通最小二乘回归(Least)、逐步回归()、多元自适应样条回归()

处理聚类问题常用的算法包括:K-means、基于密度的聚类、LDA等。

常用的降维算法包括:主成分分析(PCA)、奇异值分解(SVD)等。

推荐系统常用算法:协同过滤算法

模型融合(model)和改进()的算法包括:,GBDT,GBRT

其他非常重要的算法还有:EM算法等。

让我们再添加一件事。机器学习中的“算法”与程序员所说的“数据结构与算法分析”中的“算法”略有不同。前者更关注结果数据的召回率、查准率、准确率等方面,而后者更关注执行过程的时间复杂度和空间复杂度。 。当然,在实际的机器学习问题中,效率和资源利用的考虑是必不可少的。

编程语言、工具和环境

读了无数的理论和知识后,总是归结为实际的实施和解决问题。但如果没有工具为你提供所有的材料、框架、逻辑和想法,就很难继续前进。因此,我们仍然需要合适的编程语言、工具和环境来帮助我们将机器学习算法应用在数据集上或者实现我们自己的想法。对于初学者来说,R语言是很好的入门语言。很容易上手。同时,它拥有积极的社区支持和丰富的工具包来帮助我们完成我们的想法。相对来说,似乎计算机相关的学生使用它更多,而数学和统计学背景的学生更喜欢R。我们对编程语言、工具和环境进行一些介绍:

它拥有全方位的数据科学工具,从数据采集、数据清理到集成各种算法。

网络爬虫:

数据挖掘:

:模拟R进行数据浏览和预处理。

numpy:数组运算。

scipy:高效的科学计算。

:非常方便的数据可视化工具。

机器学习:

-learn:著名的机器学习。它可能不是最高效的,但是接口确实封装得很好,并且几乎所有机器学习算法的输入和输出部分都具有相同的格式。而且它的支持文档甚至可以作为教程来学习,非常用心。对于不是很高维、高量级的数据,-learn非常擅长(有兴趣的话可以看一下源码,也很有趣)。

:高效的svm模型实现(有助于理解系数数据输入格式,这种格式在任何地方都很常见)



keras/:对深度学习感兴趣的同学可以轻松搭建自己的神经网络。

自然语言处理:

nltk:自然语言处理的相关功能非常全面,有典型的语料库,非常容易上手。

交互环境:

:可以直接打通从数据到结果的通道,极其方便。强烈推荐。

R最大的优势就是开源社区,聚集了很多可以直接使用的强大包。大多数机器学习算法都有完整的软件包,可以直接在R中使用,文档也非常完整。常见的有:RGtk2、pmml、、ada、amap、、、cba、descr、doBy、e1071等。另外值得一提的是,R的可视化效果非常好,对于机器学习很有帮助。

其他语言

应高级程序员GG的要求,我将添加Java和C++相关的机器学习。

爪哇系列

WEKA相当于java中的-learn

其他工具如(MOA)、MEKA等也非常有名。

更详细的应用请参考这篇文章《25个Java机器学习工具&库》

C++系列

,一个高效且可扩展的机器学习库。

Shark:一个文档丰富的老牌 C++ 机器学习库。

大数据相关

:基本上是行业标准配置。一般用于特征清理和特征处理相关工作。

Spark:提供MLlib等大数据机器学习平台,实现了很多常用算法。但可靠性和稳定性有待提高。

操作系统

Mac和Linux会方便一些,但开发上稍显无力。所谓方便主要是指Mac和Linux在下载安装软件和配置环境方面速度更快。

对于刚刚习惯的同学,建议一步安装全品类的数据科学工具包。

基本工作流程

以上我们基本上已经具备了机器学习的必要条件,剩下的就是如何利用它们来构建一个完整的机器学习项目了。工作流程如下:

抽象为数学问题

定义问题是机器学习的第一步。机器学习的训练过程通常是一件非常耗时的事情,随机尝试的时间成本非常高。

这里抽象成数学问题,是指我们清楚地了解我们可以获得什么样的数据,目标是分类、回归还是聚类问题,如果不是,就归为某类问题。

获取数据

数据决定了机器学习结果的上限,算法只是尽可能接近这个上限。

数据必须具有代表性,否则难免会出现过拟合。

而且,对于分类问题,数据倾斜不应该太严重,不同类别的数据数量不应该相差几个数量级。

还需要评估数据的大小。有多少个样本、有多少个特征来估算训练过程中的内存消耗并确定内存是否可以容纳。如果放不下,就得考虑改进算法或者使用一些降维技术。如果数据量确实太大,那么就应该考虑分布。

特征预处理和特征选择

好的数据必须能够提取好的特征才能真正有效。

特征预处理和数据清洗是关键步骤,往往可以显着提高算法的效果和性能。归一化、离散化、因式分解、缺失值处理、共线性去除等。数据挖掘过程中花费了大量的时间。这些任务简单且可复制,收益稳定且可预测。它们是机器学习的基本且必要的步骤。

筛选出显着特征,丢弃非显着特征,需要机器学习工程师反复理解业务。这对很多结果都有决定性的影响。一旦选择了特征,一个非常简单的算法就可以产生良好且稳定的结果。这就需要利用相关技术进行特征有效性分析,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法。

训练模型和调整

直到这一步才使用我们上面提到的算法进行训练。现在许多算法可以打包到黑匣子中供人类使用。但真正考验熟练程度的是调整这些算法的(超)参数,让结果更好。这就需要我们对算法原理有深入的了解。理解越深入,就越容易发现问题的症结,并拿出好的调优方案。

模型诊断



如何确定模型调优的方向和思路?这需要技术来诊断模型。

过拟合和欠拟合的判断是模型诊断中至关重要的一步。常见的方法如交叉验证、绘制学习曲线等。过拟合的基本调优思想是增加数据量、降低模型复杂度。欠拟合的基本调优思路是增加特征数量和质量,增加模型复杂度。

错误分析也是机器学习的关键步骤。通过观察错误样本,综合分析错误产生的原因:是参数或者算法选择的问题,是特征的问题,还是数据本身的问题……

诊断出的模型需要进行调优,新调优的模型需要重新诊断。这是一个反复迭代、不断逼近的过程,需要不断尝试才能达到最优状态。

模型融合

一般来说,模型融合后效果可以得到一定程度的提升。而且效果很好。

在工程上,提高算法精度的主要途径是在模型的前端(特征清洗和预处理、不同采样模式)和后端(模型融合)上下工夫。因为它们比较规范、可复制,所以效果也比较稳定。直接调整参数不会有太多的工作。毕竟,大数据量的训练速度太慢,而且效果也难以保证。

上网并运行

这部分内容主要涉及工程实现。工程是结果导向的,模型上线运行的效果直接决定模型的成败。不仅包括它的准确度、误差等,还包括它的运行速度(时间复杂度)、资源消耗(空间复杂度)、稳定性是否可以接受。

这些工作流程主要是根据工程实践中总结出来的一些经验。并非每个项目都包含完整的流程。这里的部分只是一个指导性的解释。只有多实践,积累多项目经验,才能有更深的理解。

关于积累项目经验

机器学习的初学者可能有一个误区,那就是一开始就会陷入对各种高级算法的追求中。我可以使用深度学习来解决这个问题吗?我应该使用算法进行一些模型融合吗?我一直认为“脱离业务和数据的算法讨论是没有意义的”。

事实上,根据我们的学习经验,从一个数据源开始,即使我们使用已经使用多年的最传统的机器学习算法,我们也必须首先完成整个机器学习的工作流程,并不断尝试各种算法来深入挖掘到数据中。价值,最快最靠谱的学习路径就是在应用过程中深入理解数据、特性和算法,真正积累项目经验。

那么如何获取数据和项目呢?一条捷径是积极参加国内外各种数据挖掘竞赛。直接下载数据,根据比赛要求不断优化,积累经验。国内外的比赛,还有阿里巴巴天池的比赛,都是非常好的平台,可以获取真实的数据,与数据科学家一起学习、较量。尝试运用所学的所有知识来完成这次比赛本身也是一项任务。非常有趣的事情。与其他数据科学家的讨论可以拓宽您的视野并更深入地了解机器学习算法。

有趣的是,一些平台,比如阿里巴巴天池大赛,甚至提供了从数据处理到模型训练到模型评估的指导。

从估算和可视化到模型融合和增强,你所要做的就是参加比赛,获取数据,然后使用这些组件来实现你自己的想法。具体内容请参考阿里云机器学习文档。

独立学习能力

简单说一下,这部分内容与机器学习本身无关,但是我们觉得这方面的能力对于学习任何新的知识和技能来说都是至关重要的。自主学习能力的提高意味着你可以根据自己的情况找到最适合的学习材料和最快的学习成长路径。

信息检索、过滤和集成能力

对于初学者来说,大部分所需的知识都可以在网上找到。

搜索引擎技能——搜索关键词的组合和替换、现场搜索、学术文献搜索、PDF搜索等——都是必须的。

更好的习惯是寻找信息的原始来源,比如个人网站、公众号、博客、专业网站、书籍等。这能让你找到系统的、不失真的、高质量的信息。

百度上找到的技术资料不够好,所以建议仅作为补充搜索。可以交叉使用各种搜索引擎以获得更好的结果。

学会搜索事物常见的优质信息源:(程序相关)、quora(高质量答案)、(系统知识,比某百科全书强多了)、知乎(中文,有资料)、网盘搜索(很多免费资源)等。

将收集到的网页放入分类良好的云端收藏夹中,并经常整理。这样,无论在工作还是在家里,无论是在电脑前还是在手机上,您都可以找到自己喜欢的内容。

收集到的文档、代码、电子书等也放在云网盘中并定期整理。

提炼和总结技巧

经常做笔记并总结所学知识是成长的唯一途径。其实主要困难是懒惰,而是坚持

后来你总能找到知识的共性,就能记住更少的东西,掌握更多的东西。

建议将笔记放在云笔记中。印象笔记和微知笔记都不错。这样,你在乘坐地铁、排队等的时候,就可以看到自己的笔记,继续思考。

能够提出问题并寻求帮助

与机器学习相关的QQ群、论坛、社区有很多。总有人知道你问题的答案。

但大多数同学都很忙,无法像导师一样一步步告诉你该怎么做。

为了让受访者尽快理解你的问题,最好学会正确的提问方式:清楚地陈述你的业务场景和业务需求是什么,有哪些已知条件,以及在哪个具体节点遇到的问题困难。以及做了哪些努力。

有一篇经典文章告诉你如何通过提问来获得帮助:《提问的智慧》,强烈推荐。话有点尖锐,但是里面的实用内容还是很不错的。

有人帮助您的可能性与您提出的问题的特殊性和重要性呈指数关系。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【智道时空】 ( 京ICP备20013102号-16 )

GMT+8, 2025-5-8 18:12 , Processed in 0.071883 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表