陕西咸阳做网站的公司有哪些,商业类网站的设计与制作,国外科技感强的网站,绍兴网站建设设计本文比较长#xff0c;八千字#xff0c;建议收藏起来慢慢看#xff01;此外#xff0c;这其实是合并公众号最开始写的两篇文章#xff0c;整合在一起了。机器学习入门系列(1)--机器学习概览(上)机器学习入门系列(2)--机器学习概览(下)主要参考《hands-on-ml-with-sklearn… 本文比较长八千字建议收藏起来慢慢看此外这其实是合并公众号最开始写的两篇文章整合在一起了。机器学习入门系列(1)--机器学习概览(上)机器学习入门系列(2)--机器学习概览(下)主要参考《hands-on-ml-with-sklearn-and-tf》Andrew Ng 在 Coursea 上的机器学习课程什么是机器学习简单的定义机器学习是通过编程让计算机从数据中进行学习的科学和艺术。但还有另外两种定义一个更广义的定义机器学习是让计算机具有学习的能力无需进行明确编程。 —— 亚瑟·萨缪尔1959和一个工程性的定义计算机程序利用经验 E 学习任务 T性能是 P如果针对任务 T 的性能 P 随着经验 E 不断增长则称为机器学习。 —— 汤姆·米切尔1997一个简单的例子也是经常提及的例子垃圾邮件过滤器。它可以根据垃圾邮件比如用户标记的垃圾邮件和普通邮件非垃圾邮件也称作 ham学习标记垃圾邮件。用来进行学习的样例称作训练集。每个训练样例称作训练实例或样本。在这个例子中任务 T 就是标记新邮件是否是垃圾邮件经验E是训练数据性能 P 需要定义例如可以使用正确分类的比例。这个性能指标称为准确率通常用在分类任务中。为什么要用机器学习为什么要用机器学习方法呢原因如下需要进行大量手工调整或需要拥有长串规则才能解决的问题机器学习算法通常可以简化代码、提高性能。问题复杂传统方法难以解决最好的机器学习方法可以找到解决方案。环境有波动机器学习算法可以适应新数据。洞察复杂问题和大量数据一些机器学习的应用例子数据挖掘一些无法通过手动编程来编写的应用如自然语言处理计算机视觉一些自助式的程序如推荐系统理解人类是如何学习的机器学习系统的类型机器学习有多种类型可以根据如下规则进行分类是否在人类监督下进行训练监督非监督半监督和强化学习是否可以动态渐进学习在线学习 vs批量学习它们是否只是通过简单地比较新的数据点和已知的数据点或者在训练数据中进行模式识别以建立一个预测模型就像科学家所做的那样基于实例学习 vs基于模型学习监督/非监督学习第一种分类机器学习的方法是可以根据训练时监督的量和类型进行分类。主要有四类监督学习、非监督学习、半监督学习和强化学习。监督学习监督学习顾名思义就是带有监督的学习而监督就是体现在训练数据都是有标签的所有在训练模型的时候可以根据数据的真实标签不断调整模型从而得到一个性能更好的模型。监督学习主要有两个常见的典型的任务--分类和回归。分类分类问题主要就是预测新数据的类别问题。例如上文提到的垃圾邮件过滤器就是一个二分类问题将邮件分为垃圾邮件还是正常的邮件如下图所示。回归回归问题主要是预测目标数值。比如给定预测房价的问题给定一些特征如房子大小、房间数量、地理位置等等然后预测房子的价格。如下图所示注意一些回归算法也可以用来进行分类反之亦然。例如逻辑回归通常用来进行分类它可以生成一属于每个类别的概率值然后选择最大概率的类别作为预测的类别。常用的监督学习算法有K近邻算法线性回归逻辑回归支持向量机SVM决策树和随机森林神经网络非监督学习和监督学习相反非监督学习就是采用没有标签的数据集。非监督主要有四个典型的任务分别是聚类、降维、异常检测和关联规则学习。1. 聚类聚类就是将数据根据一定的规则分成多个类通常是采用相似性。比如对于博客访客的聚类通过聚类算法检测相似性访客的分组如下图所示。不需要告诉算法访客是哪个类别它会自动根据访客的属性找到相互间的关系比如它可能找出访客的职业关系将访客分为有 40% 的是上班族有 50% 的是学生或者对于技术博客可能就是根据开发方向划分为前端、后台、移动开发、人工智能等等。甚至如果采用层次聚类分析算法还可以继续对上述的分类进行更加详细的划分。这种做法可以帮助博主知道自己博客的主要群体是谁更好规划自己博客发表的文章应该以什么方向为主。可视化算法也是极佳的非监督学习案例给算法大量复杂的且不加标签的数据算法输出数据的2D或3D图像。如下图所示算法会试图保留数据的结构即尝试保留输入的独立聚类避免在图像中重叠这样就可以明白数据是如何组织起来的也许还能发现隐藏的规律。2. 降维降维的目的是简化数据、但是不能失去大部分信息。做法之一是合并若干相关的特征。例如汽车的里程数与车龄高度相关降维算法就会将它们合并成一个表示汽车的磨损。这叫做特征提取。此外在采用机器学习算法训练的时候可以对训练集进行降维这样有助于提高训练速度降低占用的硬盘和内存空间有时候也能提高算法的性能但必须选择合适的降维算法否则性能实际上是很有可能会下降的。3. 异常检测另一个重要的非监督任务是异常检测anomaly detection。例如检测异常的信用卡转账以防欺诈检测制造缺陷或者在训练之前自动从训练数据集去除异常值。异常检测的系统使用正常值训练的当它碰到一个新实例它可以判断这个新实例是像正常值还是异常值。4. 关联规则学习最后另一个常见的非监督任务是关联规则学习它的目标是挖掘大量数据以发现属性间有趣的关系。例如假设你拥有一个超市。在销售日志上运行关联规则可能发现买了烧烤酱和薯片的人也会买牛排。因此你可以将这些商品放在一起。下面是一些最重要的非监督学习算法聚类K 均值层次聚类分析Hierarchical Cluster Analysis, HCA期望最大值可视化和降维主成分分析Principal Component Analysis, PCA核主成分分析局部线性嵌入Locally-Linear Embedding, LLEt-分布邻域嵌入算法t-distributed Stochastic Neighbor Embedding, t-SNE关联性规则学习Apriori 算法Eclat算法半监督学习一些算法可以处理部分带标签的训练数据通常是大量不带标签数据加上小部分带标签数据。这称作半监督学习。如下图所示图中灰色圆点表示没有标签的数据仅有几个三角形和正方形点表示带标签的数据。多数半监督学习算法是非监督和监督算法的结合。例如深度信念网络deep belief networks是基于被称为互相叠加的受限玻尔兹曼机restricted Boltzmann machinesRBM的非监督组件。RBM 是先用非监督方法进行训练再用监督学习方法进行整个系统微调。半监督学习的示例如一些图片存储服务比如 Google Photos是半监督学习的好例子。一旦你上传了所有家庭相片它就能自动识别相同的人 A 出现了相片1、5、11 中另一个人 B 出现在了相片 2、5、7 中。这是算法的非监督部分聚类。现在系统需要的就是你告诉这两个人是谁。只要给每个人一个标签算法就可以命名每张照片中的每个人特别适合搜索照片。强化学习强化学习和上述三种学习问题是非常不同的。学习系统在这里被称为智能体 agent可以对环境进行观察选择和执行动作获得奖励负奖励是惩罚见下图。然后它必须自己学习哪个是最佳方法称为策略policy以得到长久的最大奖励。策略决定了智能体在给定情况下应该采取的行动 。目前强化学习的应用还不算非常广特别是结合了深度学习的强化学习主要是应用在机器人方面当然最著名的一个应用就是 DeepMind 的 AlphaGo 了它是通过分析数百万盘棋局学习制胜策略然后自己和自己下棋。要注意在比赛中机器学习是关闭的AlphaGo 只是使用它学会的策略。批量和在线学习第二种分类机器学习的准则是它是否能从导入的数据流进行持续学习。也就是如果导入的是持续的数据流机器学习算法能否在不断采用新数据来训练已经训练好的模型并且新的模型对新旧数据都还有很好的性能。批量学习在批量学习中系统不能进行持续学习必须用所有可用数据进行训练。这通常会占用大量时间和计算资源所以一般是线下做的。首先是进行训练然后部署在生产环境且停止学习它只是使用已经学到的策略。这称为离线学习。对于批量学习算法来说当获取到新数据的时候就需要重新重头训练整个数据集然后更新模型如果是应用该算法系统那就相当于需要更新系统需要停掉旧版本的系统重新上线新版本的系统。当然一般训练、评估、部署一套机器学习的系统的整个过程可以自动进行所以即便是批量学习也可以适应改变。只要有需要就可以方便地更新数据、训练一个新版本。并且对于更新周期可以选择每 24 小时或者每周更新一次。但是批量学习还是存在下面的缺点实时性差即对于需要快速适应变化的系统比如预测股票变化、电商推荐系统等就不适合采用批量学习算法耗费大量计算资源用全部数据训练需要大量计算资源CPU、内存空间、磁盘空间、磁盘 I/O、网络 I/O 等等特别是训练集特别大的情况更加凸显这个问题的严峻性无法应用在资源有限的设备上比如需要自动学习的系统但是如果采用智能手机每次采用大量训练数据重新训练几个小时是非常不实际的。在线学习批量学习的缺陷和问题可以通过采用在线学习算法来解决。在在线学习中是用数据实例持续地进行训练可以一次一个或一次几个实例称为小批量。每个学习步骤都很快且廉价所以系统可以动态地学习到达的新数据。在线学习虽然名字带着在线两个字但是实际上它的训练过程也是离线的因此应该说是持续学习或者增量学习。在线学习有下面几个优点实时性好。在线学习算法非常适合接收连续流的数据然后自动更新模型实时性比批量学习更好可以节省大量计算资源。在线学习算法在学习新数据后可以扔掉训练数据从而节省大量存储空间此外训练得过程不需要加载所有训练数据对于内存、CPU 等资源的要求也大大减少实现核外学习(out-of-core learning)。当内存不足以加载训练集的时候可以采用在线学习算法多次训练每次加载一部分训练集即将一部分训练集当做新数据不断加载直到训练完所有数据。在线学习也存在两个挑战学习速率问题。学习速率是在线学习的一个重要参数它反映了在线学习算法有多快地适应数据的改变必须选择一个合适的学习速率因为学习速率过大系统可以很快适应新数据但是也容易遗忘旧数据比如图像分类问题训练了一个 50 类分类器后增加新的 10 类数据一旦学习速率过快系统只会记住新的 10 个类别忘记了前面的 50 个类别的数据。相反的如果你设定的学习速率低系统的惰性就会强即它学的更慢但对新数据中的噪声或没有代表性的数据点结果不那么敏感。坏数据的影响。如果采用坏数据训练会破坏系统的性能。要减小这种风险你需要密集监测如果检测到性能下降要快速关闭或是滚回到一个之前的状态。你可能还要监测输入数据对反常数据做出反应比如使用异常检测算法。基于实例 vs 基于模型学习第三种分类机器学习的方法是判断它们是如何进行归纳推广的。大多机器学习任务是关于预测的。这意味着给定一定数量的训练样本系统需要能推广到之前没见到过的样本。对训练数据集有很好的性能还不够真正的目标是对新实例预测的性能。有两种主要的归纳方法基于实例学习和基于模型学习。基于实例学习基于实例学习是系统先用记忆学习案例然后使用相似度测量推广到新的例子如下图所示这种学习算法可以说是机器学习中最简单的算法了它实际上就是采用存储的数据集进行分类或者回归典型的算法就是 KNN 算法即 K 近邻算法它就是将新的输入数据和已经保存的训练数据采用相似性度量一般采用欧式距离得到最近的 K 个训练样本并采用 K 个训练样本中类别出现次数最多的类别作为预测的结果。所以这种算法的缺点就比较明显了一是对存储空间的需求很大需要占用的空间直接取决于实例数量的大小二是运行时间比较慢因为需要需要与已知的实例进行比对。基于模型学习和基于实例学习相反的就是基于模型学习建立这些样本的模型然后使用这个模型进行预测。如下图所示基于模型学习算法的流程一般如下所示研究数据。先对数据进行分析这可能包含清洗数据、特征筛选、特征组合等等选择模型。选择合适的模型从简单的线性回归、逻辑回归到慢慢复杂的随机森林、集成学习甚至深度学习的卷积神经网络模型等等用训练数据进行训练。也就是寻找最适合算法模型的参数使得代价函数取得最小值。使用模型对新案例进行预测这称作推断。预测结果非常好就能上线系统如果不好就需要进行错误分析问题出现在哪里是数据问题还是模型问题找到问题然后继续重复这个流程。机器学习的主要挑战在介绍基于模型学习算法的流程的时候对于预测结果不好的问题分析主要说了是数据问题还是模型问题这同时也就是机器学习的效果不好的两个主要原因即错误的数据和错误的算法。训练数据量不足第一个问题就是训练数据的数量问题这是非常重要的问题。因为即使是简单的问题一般也需要数千的样本这还是因为简单的问题一般采用简单的算法就可以解决对于复杂的图像或语音问题通常需要数百万的样本特别是如果采用现在非常热门的深度学习算法比如卷积神经网络模型这些复杂的模型如果没有足够的数据量支持非常容易陷入过拟合的情况。实际上更多数量的训练集也是为了获得更有代表性的数据能够学习到这类数据的所有特征。但是应该注意到小型和中型的数据集仍然是非常常见的获得额外的训练数据并不总是轻易和廉价的所以不要抛弃算法。没有代表性的训练数据无论采用基于实例还是基于模型的学习让训练数据对新数据具有代表性是非常重要的。如果训练集没有代表性那么训练得到的模型就是不可能得到准确性的模型比如人脸识别中模型没有学习到某个人最明显的代表性的特征比如高鼻梁或者没有眉毛等突出特征那么模型对这个人的识别率就不会很高。使用具有代表性的训练集对于推广到新案例是非常重要的。但是做起来比说起来要难如果样本太小就会有样本噪声即会有一定概率包含没有代表性的数据但是即使是非常大的样本也可能没有代表性如果取样方法错误的话。这叫做样本偏差。低质量的数据低质量的数据指的是数据有错误、带有过多噪声或者是出现异常值等的数据这种数据会影响系统整体的性能因此数据清洗对于构建一个机器学习系统或者一个机器学习项目来说都是必不可少的步骤。对于这些低质量的数据通常可以按照如下做法处理如果一些实例是明显的异常值最好删掉它们或尝试手工修改错误如果一些实例缺少特征比如你的 5% 的顾客没有说明年龄你必须决定是否忽略这个属性、忽略这些实例、填入缺失值比如年龄中位数或者训练一个含有这个特征的模型和一个不含有这个特征的模型等等。不相关的特征不相关的特征对于整个机器学习系统是有着反作用的效果训练数据必须包含足够多的相关特征且非相关特征不多的情况下才能训练出一个性能不错的模型。机器学习项目成功的关键之一是用好的特征进行训练。这个过程称作特征工程包括特征选择在所有存在的特征中选取最有用的特征进行训练。特征提取组合存在的特征生成一个更有用的特征如前面看到的可以使用降维算法。收集新数据创建新特征。过拟合上述四种情况都是坏数据的情况接下来是两种算法问题也是机器学习最常见的两种算法方面的问题过拟合和欠拟合。过拟合就是指算法模型在训练集上的性能非常好但是泛化能力很差即在测试集上的效果却很糟糕的情况。比如下图采用一个高阶多项式回归模型来预测生活满意度和人均 GDP 的关系很明显看出来这个模型过拟合了训练数据其预测效果并不会达到在训练数据上这么好的效果。通常对于比较复杂的模型比如深度神经网络它能够检测和识别到数据中比较细微的规律和特征但是如果训练集包含噪声或者训练集数量太少数量太少会引入样本噪声这种情况下模型同样会学习这种噪声从而导致模型的泛化能力的下降。一般解决过拟合的方法有简化模型这包括了采用简单点的模型、减少特征数量以及限制模型即采用正则化增加训练数据减小训练数据的噪声即数据清洗比如修正数据错误和去除异常值等其中正则化方法是比较常用的方法它的作用就是限制模型不让模型过于复杂从而降低过拟合的风险或者是缓和过拟合的程度。常用的正则化方法是 L2 和 L1 正则化。正则化方法通常会采用一个超参数来控制其限制模型的强度。超参数是一个学习算法的参数而不是模型的。这样它是不会被学习算法本身影响的它优于训练在训练中是保持不变的。如何调节超参数也是构建一个机器学习算法模型非常重要的一个步骤也是让性能能够进一步提升的做法。欠拟合欠拟合和过拟合刚好相反它就是模型的性能非常差在训练数据和测试数据上的性能都不好。通常也是因为模型过于简单没有能够很好学习到数据的有效的相关的特征解决方法有选择一个更强大的模型带有更多参数用更好的特征训练学习算法特征工程减小对模型的限制比如减小正则化超参数测试和评估当训练好一个机器学习模型后接下来就需要对模型进行预测和评估判断得到的模型是否可用是否还能进行提升并进行错误分析等操作。一般在训练模型前我们会将数据集分成两个集合分别是训练集和测试集通常 8:2 的比例也就是 80% 的数据作为训练集剩余是测试集。然后采用训练集训练模型在测试集上用按照学习的问题采用对应评估指标评估模型的性能比如分类问题一般就是采用分类的准确率或者错误率作为评估的标准。但这种划分数据集的方法存在一个问题就是如果需要调节超参数比如对于正则化的超参数、学习率等继续采用测试集来进行评估不同超参数对模型性能的影响这会导致最后在测试集上测试得到性能最好的模型实际上是过拟合了测试集那么模型的泛化能力也不会太好。所以为了解决这个问题我们还需要为调节超参数划分一个专门的数据集测试集应该是用于测试最终得到的模型的性能。因此我们再划分一个叫做验证集的数据集。一种做法是可以将所有数据按照一定比例划分为训练集、验证集和测试集比如按照 6:2:2 的比例划分当然更通常的做法是采用交叉验证训练集分成互补的子集每个模型用不同的子集训练再用剩下的子集验证。一旦确定模型类型和超参数最终的模型使用这些超参数和全部的训练集进行训练用测试集得到推广误差率。总结最后我们总结下机器学习就是让机器通过学习数据得到更好解决某些问题的能力而不需要确定的代码规则机器学习按照不同的划分标准可以分为不同的学习类型包括监督和非监督学习、批量和在线学习基于实例和基于模型学习最常见的监督学习任务是分类和回归常见的非监督学习任务是聚类、降维、异常值检测和关联规则学习机器学习的四个主要挑战是数据量太少数据问题包括没有代表性数据和质量差不相关特征模型过拟合或者欠拟合6.采用交叉验证方法进行超参数条件和模型的选择欢迎关注我的微信公众号--机器学习与计算机视觉或者扫描下方的二维码大家一起交流学习和进步如果觉得好看欢迎点赞