本系列文章主要介绍机器学习在实践中的应用,介绍Python的生态环境的使用,使用机器学习算法解决工程实践中的问题,而不是介绍算法本身。本系列文章参考《机器学习Python实践》,将通过实例逐步引导你使用机器学习来处理和分类回归模型相关的问题。每个算法模型都介绍了其比较通用和实用的建模过程,力求让基础较差的读者能够无障碍地使用python来使用机器学习算法。1机器学习简介1.1什么是机器学习?机器学习(MachineLeaming,ML)是一门多领域的交叉学科,涉及概率论、统计学、线性代数、算法等学科。它专门研究计算机如何模拟和学习人类行为以获取新知识或技能,并重组现有知识结构以不断提高自身性能。机器学习已被广??泛应用于各种应用,例如:数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医疗诊断、信用卡欺诈检测、证券市场分析、DNA序列测序、语音和手写识别、策略游戏和机器人利用。机器学习算法分为两类:监督学习和非监督学习。监督学习是在机器学习过程中提供真假指示。一般最后的结果(0,1)都包含在数据组中,机器可以通过算法自行减少误差。这种学习主要用于分类和预测(Regression&Classify)。监督学习从给定的训练数据集中学习一个目标函数,当新数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入和输出,也可以说包括特征和目标,训练集中的目标是人为标注的。常见的监督学习算法包括回归分析和统计分类。无监督学习,也称为归纳学习(Clustering),利用K法(KMean)建立中心(Centriole),通过循环和递减运算(alteration&Descent)减少误差,达到分类的目的。机器解决的问题学习:分类、回归、降维、聚类。这些算法有的适用于多种问题,有的只适用于解决一类问题。下面列出了一些常见的机器学习算法。分类算法:逻辑回归、贝叶斯回归算法:线性回归、岭回归、Lasso、弹性网络聚类:Kmeans、DBSCAN、层次聚类、谱聚类分类与回归:KNN、决策树、神经网络、随机森林、梯度提升树、xgboostclassification®ression&clustering:SVMdimensionalityreduction:PCA1.2学习机器学习的误区在学习机器学习之前,有一些理解和误区需要先解释一下,防止大家在学习机器学习的过程中,我也是角质。对于通过Python实现机器学习算法的基础,有几个误区可能比较普遍,应该尽量避免:1.必须非常熟悉Python语法,擅长Python编程。其实大可不必。Python有scikit-learn模块等可以直接建模的调用包。基本上你只需要学习python的各种基础知识和应用,熟悉scikit-learn相关模型的使用,以及numpy和pandas。常用的数据处理和可视化包包括matplotlib模块可以实现各种机器学习算法。2、需要非常深入的学习和理解scikit-learn中使用的机器学习的理论和算法。其实大可不必,除非你是这个方向的硕士甚至博士生。机器学习的不同算法涉及的知识点非常广泛。很难把每个算法的理论知识都学得很深。其实在简单的机器学习应用中,只需要了解不同的算法即可。基础知识已准备就绪。3、学知识就够了,不需要做任何项目。相反,机器学习的应用需要大量的项目经验积累,才能更好的使用机器学习。这些方法对某些人来说可能非常有效,但这会减慢掌握机器学习技能的速度和通过机器学习解决问题的目标。这样也会浪费很多时间单独学习机器学习算法,却不知道如何利用机器学习来解决现实中遇到的问题。其实使用Python实现机器学习算法的门槛并不高。在基础应用过程中,你只需要了解各种机器学习算法的一些基础知识,一些常见的流程和不同的算法,以及数据集的适用要求。1.3MachineLearninginPython本系列文章主要关注监督学习中分类和回归问题处理的预测模型,这是工业界应用非常广泛的分类,也是scikit-leam擅长的领域。与统计学不同,机器学习预测模型用于理解数据和解决问题;重点是如何创建更准确的模型,而不是解释模型是如何建立的。与大多数机器学习领域不同,预测模型使用表格形式的数据作为模型的输入,因此数据收集和整理是非常重要的工作。在接下来的系列文章中,我们致力于让大家学会如何有机地在项目中结合机器学习任务和Python,以实现每个机器学习问题的最佳实践。使用各种示例来理解预测模型的学习知识。尝试完善一套更通用的机器学习建模流程,通过一系列python的方法,尝试通过简单的复制粘贴操作,开始一个新的机器学习项目。我们将用项目来介绍基于Python的生态环境完成机器学习相关工作。一旦你了解了如何使用Python平台完成机器学习任务,你就可以复用这种方法来解决不同项目中的问题。使用机器学习预测模型解决问题有六个基本步骤。定义问题:研究和提炼问题的特征,帮助我们更好地理解项目的目标。数据理解:通过描述性统计和可视化分析现有数据。数据准备:格式化数据以促进建立预测模型。评估算法:通过一定的方法分离出部分数据,对算法模型进行评估,选取部分具有代表性的数据进行分析,对模型进行改进。优化模型:通过参数调整和集成算法提高预测结果的准确性。结果部署:完成模型,执行模型预测结果并展示。1.4学习机器学习原理与技巧学习机器学习是一段旅程。你需要知道你拥有的技能,你目前拥有的知识,以及你想要实现的目标。实现目标需要时间和努力,但在此过程中,有许多工具可以帮助您快速实现目标。1.创建一个半正式的工作产品。以博客文章、技术报告和代码存储库的形式记录学习和发现,以快速为您自己和他人提供一组可证明的技能、知识和思考。2.实时学习。不要只在需要时才学习复杂的主题,例如,实时学习足够的概率和线性代数以帮助您理解正在处理的算法。在开始进入机器学习领域之前,不需要花太多时间学习统计学和数学,而是在平时的使用和参与过程中不断实时学习和积累知识。3.利用现有技能。如果你会编码,通过实现算法来理解它们,而不是通过学习数学理论。使用您熟悉的编程语言,让自己专注于您正在学习的一件事。不要同时学习一门新的语言、工具或类库,这会使学习过程复杂化。精通是理想的。掌握机器学习需要不断学习。也许你永远达不到精通机器学习的目标,只能不断学习,提高已有的知识。以下三个技巧可以有效帮助你快速提高学习机器学习的能力。开始一个可以在一小时内完成的小项目。通过每周完成一个项目并构建您自己的项目工作区来保持学习动力。在微博、微信、博客、Github等社交工具上分享你的成果,或随时随地展示你的兴趣,增长你的技能、知识,并获得反馈。1.5总结本系列文章主要面向对机器学习感兴趣并立志要学习机器学习,但对机器学习只有基础知识甚至一知半解的人群。主要介绍机器学习实践的内容,不涉及机器。学到的理论知识。这里我们只简单介绍一下机器学习的基本原理和算法。这里假设你已经掌握了机器学习的基础知识,或者有能力自学机器学习的基础知识。有些人可能只是对机器学习的理论知识比较了解,其实并不多实际项目,对机器学习的应用实践了解不多;有些人可能对机器学习只有一个大概的了解,并不知道可以使用哪些工具和方法,以及如何使用它们。在本系列文章中,将指导读者如何通过Python实践机器学习算法。2Python机器学习生态系统随着Python生态系统的发展,在机器学习领域,Python已经发展成为机器学习中最重要的语言。为什么Python能成为机器学习的主流语言?这是因为Python不仅可以用于研发研究部门,还可以用于实际生产。本段将主要介绍Python在机器学习方面的生态系统。2.1PythonPython是一种面向对象的动态解释型语言,简单易学,可读性好。Python的语法简洁明了,其特点之一是使用空格作为语句缩进。Python拥有丰富而强大的类库,常被称为“胶水语言”,可以很方便地将其他语言(尤其是C/C++)制作的各种模块连接在一起。一个常见的应用场景是使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后用更合适的语言重写有特殊要求的部分,比如图形渲染模块的性能对于3D游戏如果要求特别高,可以用C/C++重写,然后打包成Python可以调用的扩展类库。目前Python生态中有大量的第三方扩展类库,借助这些类库可以轻松实现项目需求。需要注意的是,使用扩展类库可能需要考虑平台问题,部分扩展类库可能不提供跨平台实现。Python是目前非常流行的语言。在2020年1月最新的TIOBE编程语言排行榜中位列第三,用户使用率位列前三。在PYPL各种编程语言的流行度统计中,最新的2020年1月Python排名遥遥领先。Python是一门动态语言,非常适合大型项目的交互开发和快速原型制作。由于其丰富的类库支持,Python在机器学习和数据科学领域得到广泛应用。从这个角度来说,使用Python可以用统一的语言实现科研项目和生产项目,有效降低了科研项目转化为生产项目的成本。2.2SciPySciPy是一个广泛应用于数学运算、科学和工程领域的Python类库。它包括统计、优化、积分、线性代数模块、傅里叶变换、信号和图像处理、常微分方程求解器等,因此在机器学习项目中应用广泛。SciPy依赖于以下与机器学习相关的库。NumPy:是Python的开源数值计算扩展。它可用于存储和处理大型矩阵,并提供许多高级数值编程工具,例如矩阵数据类型、向量处理和复杂的算术库。Pandas:是为解决数据分析任务而创建的基于NumPy的工具。Pandas包含了大量的库和一些标准的数据模型,提供了高效操作大型数据集所需的工具,也提供了大量的函数和方法让我们能够快速方便地处理数据。Matplotlib:最著名的20个Python绘图库,非常适合交互式绘图;它还可以方便地用作绘图控件并嵌入到GUI应用程序中。熟悉SciPy是改进机器学习实践的有效手段,尤其是在以下领域:NumPy数组可用于为机器学习算法准备数据。通过Pandas导入和展示数据,加强对数据的理解和数据清洗、转换等。Matplotlib可用于创建图表和展示数据。2.3scikit-learnscikit-leam是Python中用于开发和实践机器学习的著名库之一,它依赖于SciPy及其相关库来运行。scikit-leam的基本功能主要分为分类、回归、聚类、数据降维、模型选择和数据预处理六个部分。需要指出的是,由于scikit-leam本身不支持深度学习,也不支持GPU加速,scikit-leam对多层感知器(MLP)神经网络的实现不适合大规模问题。(scikit-leam在0.18版本后加入了对MLP的支持)scikit-leam是一个开源项目,遵守BSD协议,可用于商业开发。目前主要由社区成员自发维护。或许是受维护成本的限制,scikit-leam相对于其他项目更加保守,主要体现在两个方面:scikit-leam从不扩展到机器学习领域之外。scikit-leam从不使用未经广泛验证的算法。例如,神经网络不一定比决策树好,反之亦然。最终的结果是有很多因素在起作用,比如数据集的大小和组成。所以,对于你要解决的问题,最好尝试多种不同的算法。并借用一个测试集来评估不同算法之间的性能,最终选择结果最好的那个。当然,你要选择适合解决你问题的算法去尝试。例如,要打扫房子,您可以使用吸尘器、扫帚、拖把;你肯定不会拿出铲子开始挖吧。面对海量的机器学习算法,萌新最喜欢的问题是:“我应该选择什么算法?”在回答这个问题之前,首先要想清楚:数据的数量、质量、本质。紧迫性你想用这些数据做什么。要知道,就算是老司机也闭不上眼睛说哪种算法能得到最好的结果。仍然必须尝试一下。
