1. 深度学习 python怎么入门 知乎
自学深度学习是一个漫长而艰巨的过程。您需要有很强的线性代数和微积分背景,良好的Python编程技能,并扎实掌握数据科学、机器学习和数据工程。即便如此,在你开始将深度学习应用于现实世界的问题,并有可能找到一份深度学习工程师的工作之前,你可能需要一年多的学习和实践。然而,知道从哪里开始,对软化学习曲线有很大帮助。如果我必须重新学习Python的深度学习,我会从Andrew Trask写的Grokking deep learning开始。大多数关于深度学习的书籍都要求具备机器学习概念和算法的基本知识。除了基本的数学和编程技能之外,Trask的书不需要任何先决条件就能教你深度学习的基础知识。这本书不会让你成为一个深度学习的向导(它也没有做这样的声明),但它会让你走上一条道路,让你更容易从更高级的书和课程中学习。用Python构建人工神经元
大多数深度学习书籍都是基于一些流行的Python库,如TensorFlow、PyTorch或Keras。相比之下,《运用深度学习》(Grokking Deep Learning)通过从零开始、一行一行地构建内容来教你进行深度学习。
《运用深度学习》
你首先要开发一个人工神经元,这是深度学习的最基本元素。查斯克将带领您了解线性变换的基本知识,这是由人工神经元完成的主要计算。然后用普通的Python代码实现人工神经元,无需使用任何特殊的库。
这不是进行深度学习的最有效方式,因为Python有许多库,它们利用计算机的图形卡和CPU的并行处理能力来加速计算。但是用普通的Python编写一切对于学习深度学习的来龙去是非常好的。
在Grokking深度学习中,你的第一个人工神经元只接受一个输入,将其乘以一个随机权重,然后做出预测。然后测量预测误差,并应用梯度下降法在正确的方向上调整神经元的权重。有了单个神经元、单个输入和单个输出,理解和实现这个概念变得非常容易。您将逐渐增加模型的复杂性,使用多个输入维度、预测多个输出、应用批处理学习、调整学习速率等等。
您将通过逐步添加和修改前面章节中编写的Python代码来实现每个新概念,逐步创建用于进行预测、计算错误、应用纠正等的函数列表。当您从标量计算转移到向量计算时,您将从普通的Python操作转移到Numpy,这是一个特别擅长并行计算的库,在机器学习和深度学习社区中非常流行。
Python的深度神经网络
有了这些人造神经元的基本构造块,你就可以开始创建深层神经网络,这基本上就是你将几层人造神经元叠放在一起时得到的结果。
当您创建深度神经网络时,您将了解激活函数,并应用它们打破堆叠层的线性并创建分类输出。同样,您将在Numpy函数的帮助下自己实现所有功能。您还将学习计算梯度和传播错误通过层传播校正跨不同的神经元。
随着您越来越熟悉深度学习的基础知识,您将学习并实现更高级的概念。这本书的特点是一些流行的正规化技术,如早期停止和退出。您还将获得自己版本的卷积神经网络(CNN)和循环神经网络(RNN)。
在本书结束时,您将把所有内容打包到一个完整的Python深度学习库中,创建自己的层次结构类、激活函数和神经网络体系结构(在这一部分,您将需要面向对象的编程技能)。如果您已经使用过Keras和PyTorch等其他Python库,那么您会发现最终的体系结构非常熟悉。如果您没有,您将在将来更容易地适应这些库。
在整本书中,查斯克提醒你熟能生巧;他鼓励你用心编写自己的神经网络,而不是复制粘贴任何东西。
代码库有点麻烦
并不是所有关于Grokking深度学习的东西都是完美的。在之前的一篇文章中,我说过定义一本好书的主要内容之一就是代码库。在这方面,查斯克本可以做得更好。
在GitHub的Grokking深度学习库中,每一章都有丰富的jupiter Notebook文件。jupiter Notebook是一个学习Python机器学习和深度学习的优秀工具。然而,jupiter的优势在于将代码分解为几个可以独立执行和测试的小单元。Grokking深度学习的一些笔记本是由非常大的单元格组成的,其中包含大量未注释的代码。
这在后面的章节中会变得尤其困难,因为代码会变得更长更复杂,在笔记本中寻找自己的方法会变得非常乏味。作为一个原则问题,教育材料的代码应该被分解成小单元格,并在关键区域包含注释。
此外,Trask在Python 2.7中编写了这些代码。虽然他已经确保了代码在Python 3中也能顺畅地工作,但它包含了已经被Python开发人员弃用的旧编码技术(例如使用“for i in range(len(array))”范式在数组上迭代)。
更广阔的人工智能图景
Trask已经完成了一项伟大的工作,它汇集了一本书,既可以为初学者,也可以为有经验的Python深度学习开发人员填补他们的知识空白。
但正如泰温·兰尼斯特(Tywin Lannister)所说(每个工程师都会同意),“每个任务都有一个工具,每个工具都有一个任务。”深度学习并不是一根可以解决所有人工智能问题的魔杖。事实上,对于许多问题,更简单的机器学习算法,如线性回归和决策树,将表现得和深度学习一样好,而对于其他问题,基于规则的技术,如正则表达式和几个if-else子句,将优于两者。
关键是,你需要一整套工具和技术来解决AI问题。希望Grokking深度学习能够帮助你开始获取这些工具。
你要去哪里?我当然建议选择一本关于Python深度学习的深度书籍,比如PyTorch的深度学习或Python的深度学习。你还应该加深你对其他机器学习算法和技术的了解。我最喜欢的两本书是《动手机器学习》和《Python机器学习》。
你也可以通过浏览机器学习和深度学习论坛,如r/MachineLearning和r/deeplearning subreddits,人工智能和深度学习Facebook组,或通过在Twitter上关注人工智能研究人员来获取大量知识。
AI的世界是巨大的,并且在快速扩张,还有很多东西需要学习。如果这是你关于深度学习的第一本书,那么这是一个神奇旅程的开始。
2. 算法难学么
真正的算法学习起来,存在一定的难度的,坚持很重要,毕竟里面的东西的学习,需要耐心去看不能只是三分钟的热度基本学不会,毕竟算法的学习需要注意力高度集中,不停的烧脑学习。不适合学习一段时间就轻易放弃的人,所以没点毅力根本就学不好算法,更加谈不上学习编程了。
以上资料仅供参考。
3. 数据挖掘十大算法-
整理里一晚上的数据挖掘算法,其中主要引自wiki和一些论坛。发布到上作为知识共享,但是发现Latex的公式转码到网页的时候出现了丢失,暂时没找到解决方法,有空再回来填坑了。
——编者按
一、 C4.5
C4.5算法是由Ross Quinlan开发的用于产生决策树的算法[1],该算法是对Ross Quinlan之前开发的ID3算法的一个扩展。C4.5算法主要应用于统计分类中,主要是通过分析数据的信息熵建立和修剪决策树。
1.1 决策树的建立规则
在树的每个节点处,C4.5选择最有效地方式对样本集进行分裂,分裂规则是分析所有属性的归一化的信息增益率,选择其中增益率最高的属性作为分裂依据,然后在各个分裂出的子集上进行递归操作。
依据属性A对数据集D进行分类的信息熵可以定义如下:
划分前后的信息增益可以表示为:
那么,归一化的信息增益率可以表示为:
1.2 决策树的修剪方法
C4.5采用的剪枝方法是悲观剪枝法(Pessimistic Error Pruning,PEP),根据样本集计算子树与叶子的经验错误率,在满足替换标准时,使用叶子节点替换子树。
不妨用K表示训练数据集D中分类到某一个叶子节点的样本数,其中其中错误分类的个数为J,由于用估计该节点的样本错误率存在一定的样本误差,因此用表示修正后的样本错误率。那么,对于决策树的一个子树S而言,设其叶子数目为L(S),则子树S的错误分类数为:
设数据集的样本总数为Num,则标准错误可以表示为:
那么,用表示新叶子的错误分类数,则选择使用新叶子节点替换子树S的判据可以表示为:
二、KNN
最近邻域算法(k-nearest neighbor classification, KNN)[2]是一种用于分类和回归的非参数统计方法。KNN算法采用向量空间模型来分类,主要思路是相同类别的案例彼此之间的相似度高,从而可以借由计算未知样本与已知类别案例之间的相似度,来实现分类目标。KNN是一种基于局部近似和的实例的学习方法,是目前最简单的机器学习算法之一。
在分类问题中,KNN的输出是一个分类族群,它的对象的分类是由其邻居的“多数表决”确定的,k个最近邻居(k为正整数,通常较小)中最常见的分类决定了赋予该对象的类别。若k = 1,则该对象的类别直接由最近的一个节点赋予。在回归问题中,KNN的输出是其周围k个邻居的平均值。无论是分类还是回归,衡量邻居的权重都非常重要,目标是要使较近邻居的权重比较远邻居的权重大,例如,一种常见的加权方案是给每个邻居权重赋值为1/d,其中d是到邻居的距离。这也就自然地导致了KNN算法对于数据的局部结构过于敏感。
三、Naive Bayes
在机器学习的众多分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBC)[3]。朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。
在假设各个属性相互独立的条件下,NBC模型的分类公式可以简单地表示为:
但是实际上问题模型的属性之间往往是非独立的,这给NBC模型的分类准确度带来了一定影响。在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型;而在属性相关性较小时,NBC模型的性能最为良好。
四、CART
CART算法(Classification And Regression Tree)[4]是一种二分递归的决策树,把当前样本划分为两个子样本,使得生成的每个非叶子结点都有两个分支,因此CART算法生成的决策树是结构简洁的二叉树。由于CART算法构成的是一个二叉树,它在每一步的决策时只能是“是”或者“否”,即使一个feature有多个取值,也是把数据分为两部分。在CART算法中主要分为两个步骤:将样本递归划分进行建树过程;用验证数据进行剪枝。
五、K-means
k-平均算法(k-means clustering)[5]是源于信号处理中的一种向量量化方法,现在则更多地作为一种聚类分析方法流行于数据挖掘领域。k-means的聚类目标是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类。
5.1 k-means的初始化方法
通常使用的初始化方法有Forgy和随机划分(Random Partition)方法。Forgy方法随机地从数据集中选择k个观测作为初始的均值点;而随机划分方法则随机地为每一观测指定聚类,然后执行“更新”步骤,即计算随机分配的各聚类的图心,作为初始的均值点。Forgy方法易于使得初始均值点散开,随机划分方法则把均值点都放到靠近数据集中心的地方;随机划分方法一般更适用于k-调和均值和模糊k-均值算法。对于期望-最大化(EM)算法和标准k-means算法,Forgy方法作为初始化方法的表现会更好一些。
5.2 k-means的标准算法
k-means的标准算法主要包括分配(Assignment)和更新(Update),在初始化得出k个均值点后,算法将会在这两个步骤中交替执行。
分配(Assignment):将每个观测分配到聚类中,使得组内平方和达到最小。
更新(Update):对于上一步得到的每一个聚类,以聚类中观测值的图心,作为新的均值点。
六、Apriori
Apriori算法[6]是一种最有影响的挖掘布尔关联规则频繁项集的算法,其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。Apriori采用自底向上的处理方法,每次只扩展一个对象加入候选集,并且使用数据集对候选集进行检验,当不再产生匹配条件的扩展对象时,算法终止。
Apriori的缺点在于生成候选集的过程中,算法总是尝试扫描整个数据集并尽可能多地添加扩展对象,导致计算效率较低;其本质上采用的是宽度优先的遍历方式,理论上需要遍历次才可以确定任意的最大子集S。
七、SVM
支持向量机(Support Vector Machine, SVM)[7]是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。
除了进行线性分类之外,SVM还可以使用所谓的核技巧有效地进行非线性分类,将其输入隐式映射到高维特征空间中,即支持向量机在高维或无限维空间中构造超平面或超平面集合,用于分类、回归或其他任务。直观来说,分类边界距离最近的训练数据点越远越好,因为这样可以缩小分类器的泛化误差。
八、EM
最大期望算法(Expectation–Maximization Algorithm, EM)[7]是从概率模型中寻找参数最大似然估计的一种算法。其中概率模型依赖于无法观测的隐性变量。最大期望算法经常用在机器学习和计算机视觉的数据聚类(Data Clustering)领域。最大期望算法经过两个步骤交替进行计算,第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。
九、PageRank
PageRank算法设计初衷是根据网站的外部链接和内部链接的数量和质量对网站的价值进行衡量。PageRank将每个到网页的链接作为对该页面的一次投票,被链接的越多,就意味着被其他网站投票越多。
算法假设上网者将会不断点网页上的链接,当遇到了一个没有任何链接出页面的网页,这时候上网者会随机转到另外的网页开始浏览。设置在任意时刻,用户到达某页面后并继续向后浏览的概率,该数值是根据上网者使用浏览器书签的平均频率估算而得。PageRank值可以表示为:
其中,是被研究的页面集合,N表示页面总数,是链接入页面的集合,是从页面链接处的集合。
PageRank算法的主要缺点是的主要缺点是旧的页面等级会比新页面高。因为即使是非常好的新页面也不会有很多外链,除非它是某个站点的子站点。
十、AdaBoost
AdaBoost方法[10]是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分的样本上。在具体实现上,最初令每个样本的权重都相等,对于第k次迭代操作,我们就根据这些权重来选取样本点,进而训练分类器Ck。然后就根据这个分类器,来提高被它分错的的样本的权重,并降低被正确分类的样本权重。然后,权重更新过的样本集被用于训练下一个分类器Ck[,并且如此迭代地进行下去。
AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法对于噪声数据和异常数据很敏感。但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负系数,同样也能提升分类效果。
引用
[1] Quinlan, J. R. C4.5: Programs for Machine Learning. Morgan Kaufmann Publishers, 1993.
[2] Altman, N. S. An introction to kernel and nearest-neighbor nonparametric regression. The American Statistician. 1992, 46 (3): 175–185. doi:10.1080/00031305.1992.10475879
[3] Webb, G. I.; Boughton, J.; Wang, Z. Not So Naive Bayes: Aggregating One-Dependence Estimators. Machine Learning (Springer). 2005, 58 (1): 5–24. doi:10.1007/s10994-005-4258-6
[4] decisiontrees.net Interactive Tutorial
[5] Hamerly, G. and Elkan, C. Alternatives to the k-means algorithm that find better clusterings (PDF). Proceedings of the eleventh international conference on Information and knowledge management (CIKM). 2002
[6] Rakesh Agrawal and Ramakrishnan Srikant. Fast algorithms for mining association rules in large databases. Proceedings of the 20th International Conference on Very Large Data Bases, VLDB, pages 487-499, Santiago, Chile, September 1994.
[7] Cortes, C.; Vapnik, V. Support-vector networks. Machine Learning. 1995, 20 (3): 273–297. doi:10.1007/BF00994018
[8] Arthur Dempster, Nan Laird, and Donald Rubin. "Maximum likelihood from incomplete data via the EM algorithm". Journal of the Royal Statistical Society, Series B, 39 (1):1–38, 1977
[9] Susan Moskwa. PageRank Distribution Removed From WMT. [October 16, 2009]
[10] Freund, Yoav; Schapire, Robert E. A Decision-Theoretic Generalization of on-Line Learning and an Application to Boosting. 1995. CiteSeerX: 10.1.1.56.9855
4. 方法不对,看再多书你都学不会算法
在计算机科学中,算法通常是指一个解决问题的小程序。算法是程序的基本组成部分,如果你想让你的程序能够解决一切问题,你必须懂算法,这就是为什么算法在计算机编程中如此重要的原因。
如果你是一名初学者,你就必须从基础开始,从理解算法背后的基本概念开始,然后自己一个个地实现它们,在本文中,将和大家分享几种最适合初学的算法学习方法,不要再只会死读算法书啦,这样你永远都学不好算法
1、阅读书籍
毋庸置疑,书籍是学习一切知识的最好资源,它不仅能让你详细和准确地了解算法,还能帮助你按照自己的节奏学习,拿一本关于算法的好书,试着理解算法背后的理论概念。之后再去程序中实现算法。如果你失败了,别担心,书就在那里,再看一遍算法,再试着重新理解它,然后在程序里重新实现它。
关于算法的书籍,之前也推荐过很多了,其实算法相关的书籍有很多,经典的就那几本,把它们都啃透了,技术自然更上一层楼,诸如:
2、在线课程
网上有很多很好的课程,比如你可以学习Coursera提供的算法课程。你也可以上Udemy的课程。他们提供了许多来自着名导师的算法课程
此外麻省理工学院(MIT)、哈佛大学(Harvard)和斯坦福大学(Stanford University)的课程也可以看看,他们的许多课程都是提供自学的。
3、视频教程
视频教程是理解和实现特定算法的很好的资源。你可以在一些视频网站上(如Youtube)搜索视频教程,几乎每种算法都有大量的教程。你可以先看一段视频来理解这个算法,然后再实现它。
4、解决问题
用算法解决问题是理解和学习算法的最好方法。如果你用算法来解决实际问题,你会对算法有一个深刻的理解,当你用不同的算法解决不同问题时,你就可以很好的掌握它们,你可以在网上找到许多算法问题。首先,浏览一遍问题描述,并尝试找出解决问题所需的算法。尝试使用不同的算法来解决相同的问题。例如,你可以同时使用BFS和DFS遍历一个图。
你还可以去UVA、A2oJ、SPOJ和Timus这样的在线测评网站刷题
5、编程竞赛
深入了解算法的另一个好方法是参加各种在线竞赛。它要求你在有限的时间内理解问题并实现算法,这意味着你必须在短时间内设计出一个算法解决方案,这将极大地帮助您在实际问题中使用算法。
codeforce、Hackerrank和Topcoder它们是最流行的竞赛编程平台,你可以在上面参加各种竞赛。
6、可视化算法
如果你是那种喜欢用可视化学习的人,那么你可以通过可视化来学习算法。有许多在线算法可视化工具可以帮助你从基础上理解算法。
比如你可以通过Algorithm-Visualizer或VisuAlgo这样的可视化工具。
7、博客站点
可以在internet上阅读关于各种算法的博客文章。有很多关于算法的个人博客,多阅读你可能会发现它们也很有用。
8、在线论坛上提问
如果你在实现算法方面遇到了任何问题,你应该在各种在线论坛上具体询问这个问题,通常会有很多大神愿意帮助你解决这个问题。这样的在线论坛诸如topcode -forum、Quora等。
9、制定学习计划
熟能生巧,要掌握算法的艺术,你必须制定一个学习计划,例如,你可以在一天或一周内解决一个或几个算法。简而言之,无论你做什么,你都必须要有计划,尽量有规律。
10、实践!实践!实践!
实践是检验真理的唯一标准,你实践的越多,就越能理解和学到一些东西,没经过实践的方法去学习算法你是学不会了,就算失败了也没关系,坚持再试一次,没准就成功了
5. 有哪些学习算法的网站推荐
算法这个词听起来就各种高大上,对于想学习和了解算法的同学来说,可能不太容易入手,这一次就为大家推荐一些可以学习算法的网站。
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
马克威算法交易平台也十分值得推荐,专为从事算法相关者学习的网站,现在免费即可在线学习,下载,体验等,平台还包含全球知名开源算法、分析工具、行业模型等。
其实这一类型的网站,还是很多的,大家还是要看自己想要学习算法的哪一方面,哪种难度,哪种学习方式,再从中选择适合自己的。
6. 干货 | 基础机器学习算法
本篇内容主要是面向机器学习初学者,介绍常见的机器学习算法,当然,欢迎同行交流。
哲学要回答的基本问题是从哪里来、我是谁、到哪里去,寻找答案的过程或许可以借鉴机器学习的套路:组织数据->挖掘知识->预测未来。组织数据即为设计特征,生成满足特定格式要求的样本,挖掘知识即建模,而预测未来就是对模型的应用。
特征设计依赖于对业务场景的理解,可分为连续特征、离散特征和组合高阶特征。本篇重点是机器学习算法的介绍,可以分为监督学习和无监督学习两大类。
无监督学习算法很多,最近几年业界比较关注主题模型,LSA->PLSA->LDA 为主题模型三个发展阶段的典型算法,它们主要是建模假设条件上存在差异。LSA假设文档只有一个主题,PLSA 假设各个主题的概率分布不变(theta 都是固定的),LDA 假设每个文档和词的主题概率是可变的。
LDA 算法本质可以借助上帝掷骰子帮助理解,详细内容可参加 Rickjin 写的《 LDA 数据八卦》文章,浅显易懂,顺便也科普了很多数学知识,非常推荐。
监督学习可分为分类和回归,感知器是最简单的线性分类器,现在实际应用比较少,但它是神经网络、深度学习的基本单元。
线性函数拟合数据并基于阈值分类时,很容易受噪声样本的干扰,影响分类的准确性。逻辑回归(Logistic Regression)利用 sigmoid 函数将模型输出约束在 0 到 1 之间,能够有效弱化噪声数据的负面影响,被广泛应用于互联网广告点击率预估。
逻辑回归模型参数可以通过最大似然求解,首先定义目标函数 L ( theta ),然后 log 处理将目标函数的乘法逻辑转化为求和逻辑(最大化似然概率 -> 最小化损失函数),最后采用梯度下降求解。
相比于线性分类去,决策树等非线性分类器具有更强的分类能力,ID3 和 C4.5 是典型的决策树算法,建模流程基本相似,两者主要在增益函数(目标函数)的定义不同。
线性回归和线性分类在表达形式上是类似的,本质区别是分类的目标函数是离散值,而回归的目标函数是连续值。目标函数的不同导致回归通常基于最小二乘定义目标函数,当然,在观测误差满足高斯分布的假设情况下,最小二乘和最大似然可以等价。
当梯度下降求解模型参数时,可以采用 Batch 模式或者 Stochastic 模式,通常而言,Batch 模式准确性更高,Stochastic 模式复杂度更低。
上文已经提到,感知器虽然是最简单的线性分类器,但是可以视为深度学习的基本单元,模型参数可以由自动编码( Auto Encoder )等方法求解。
深度学习的优势之一可以理解为特征抽象,从底层特征学习获得高阶特征,描述更为复杂的信息结构。例如,从像素层特征学习抽象出描述纹理结构的边缘轮廓特征,更进一步学习获得表征物体局部的更高阶特征。
俗话说三个臭皮匠赛过诸葛亮,无论是线性分类还是深度学习,都是单个模型算法单打独斗,有没有一种集百家之长的方法,将模型处理数据的精度更进一步提升呢?当然,Model Ensembe l就是解决这个问题。Bagging 为方法之一,对于给定数据处理任务,采用不同模型/参数/特征训练多组模型参数,最后采用投票或者加权平均的方式输出最终结果。
Boosting为Model Ensemble 的另外一种方法,其思想为模型每次迭代时通过调整错误样本的损失权重提升对数据样本整体的处理精度,典型算法包括 AdaBoost 、GBDT 等。
不同的数据任务场景,可以选择不同的 Model Ensemble 方法,对于深度学习,可以对隐层节点采用 DropOut 的方法实现类似的效果。
介绍了这么多机器学习基础算法,说一说评价模型优劣的基本准则。欠拟合和过拟合是经常出现的两种情况,简单的判定方法是比较训练误差和测试误差的关系,当欠拟合时,可以设计更多特征来提升模型训练精度,当过拟合时,可以优化特征量降低模型复杂度来提升模型测试精度。
特征量是模型复杂度的直观反映,模型训练之前设定输入的特征量是一种方法,另外一种比较常用的方法是在模型训练过程中,将特征参数的正则约束项引入目标函数/损失函数,基于训练过程筛选优质特征。
模型调优是一个细致活,最终还是需要能够对实际场景给出可靠的预测结果,解决实际问题。期待学以致用! 作者 晓惑 本文转自阿里技术,转载需授权
7. 在哪里可以学习算法求推荐呀
算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。去慕课网吧