解决做好一个机器学习项目的3个问题

机器学习是目前人工智能最令人激动的研究方向之一。我们可能更关注机器学习算法的实现细节,沉浸于机器学习所需要的数学功底,但对于机器学习从业者来说,如何更好更快速的实现一个机器学习项目更值得关注

正如吴恩达在《机器学习》这门课中所说,他将花费更多的时间来教授机器学习、人工智能的最佳实践以及如何让它们工作。好的工具,在会用和不会用的人之间存在着鸿沟。

当我们做一个机器学习项目时,不纠结于各个模型算法的内部细节,从整体的角度看具体问题该如何更可靠更高效得出结论,才不至于浪费更多的时间。从对数学的焦虑中,众多算法的选择中抽身出来, 去思考以下几个问题:

  • 我们如何在项目中选择更为合适的算法?

  • 选择算法之后,如何知道我们的模型是更有用的或更好的?

  • 如何进一步优化模型以达到更理想的效果?

本文将基于上述几个问题展开,在此之前,首先明确几个概念。

机器学习:机器学习是一门涉及多领域,多门学科理论的交叉学科,通过一个程序使其能从已有的经验中学习,从而能提升对某一项任务的解决能力。有监督学习:有监督学习是指需要给出一定量的标签指导计算机去完成任务。就像一个学生需要在老师的教导启发下进行学习。如预测房屋的价格,需要预先知道一些房屋的价格以及房屋的有关属性的数据,对已有数据进行训练后,得到的模型将会产生对不同属性房屋特性的价格预测情况。无监督学习:无监督学习顾名思义是指不需要给定标签,让模型自己训练,得出结论。类似于一个学生通过自己的积累产生对知识的理解。如有一些房屋的有关属性的数据, 模型可以自动识别出哪些特征是属于市中心的房子, 哪些事属于郊区的房子,得到的模型可以产生对不同房屋属性的类别的判断。

01.选择合适的算法

针对具体的问题选择不同的算法。

如一个分类问题可优先选择逻辑回归,支持向量机,神经网络等模型,数据集较大的问题优先选择朴素贝叶斯方法,决策树和逻辑回归具有可解释性。聚类问题我们可能会考虑层次分析,k均值模型。 如果数据集的特征很多,可以考虑采用主成分分析,线性判别分析等进行降维。

 第一步,明确具体问题

有监督学习主要有回归和分类任务:

回归是研究因变量与自变量之间关系的方法。上文所说的房屋价格的预测的例子就是一个回归问题,构建房屋价格与房屋其他属性之间关系的模型, 实现新房屋的价格的预测,我们预测的是一个模型的连续性的值。 分类将数据集按照不同的特点分为不同的类别。如金融市场中一个常见的预测股价涨跌的示例,给定一段时间内股价的涨跌方向作为模型的输出,即我们设定的标签,预测后一段时间股价的涨跌情况,这里的结果只会有涨和跌两种情况,预测的是间断的值。

无监督学习主要有聚类和降维任务:

聚类将数据集分为多个类似的对象组成的多个类。当我们在网站上搜索一条内容的时候,网站会有相似的内容推荐,这是因为网站通过聚类的方式将有相似浏览特征的客户聚集在一起共同分析,以便更了解客户。聚类与分类的差别是,分类是我们知道怎样的特征能够属于一类,并设定了标签,而聚类分的类别则完全是模型自主切分。降维的基本原理是将样本点从输入空间通过线性或非线性变换映射到一个低维空间,从而降低了原数据集的维度,同时又能尽量减少数据信息的丢失。经过降维,一方面可以对数据进行可视化研究,另一方面由于数据量大大减少,将提高机器学习的效率。

第二步,选择算法

确项目的任务,对算法有进一步的了解,可以帮助我们了解模型的使用细节,以便更快速实现模型。

我们将一些算法模型整理成如下思维导图的形式,并对相关算法的基本思想做了简单阐述。

你可以很快速的浏览每个算法的核心及应用,在面对实际问题时做出大致的判断。

我们论述了有关问题的定位以及相关算法模型的选择,但需要注意的是,我们已经针对算法模型有一个初步的定位,在实践过程中仍然需要将实际数据与模型结合考虑。最初尝试时可以使用较少的数据量快速过滤出一些算法,最终选定少数的算法进行后续的优化。同时,对数据的理解程度也将影响模型的选择,对数据越熟悉越能够做出更高效的判断。

02.模型评估

选择合适的算法之后,如何知道我们所设计的模型是有用的或者较好的?

机器学习是利用模型对数据进行拟合,对训练集进行拟合,训练模型,对样本外数据集进行预测。其中模型对训练集数据的误差称为经验误差, 对测试集数据的误差称为泛化误差。模型对样本外数据集的预测能力称为模型的泛化能力。

过拟合与欠拟合

欠拟合和过拟合都是模型泛化能力不高的表现。欠拟合通常表现为模型学习能力不足,没有学习到数据的一般规律。而过拟合则是模型捕捉到数据中太多的特征,以至于将所有特征都认为是数据的一般规律。如下图树叶的示例很形象的表达了欠拟合与过拟合。

我们希望的状态是模型能训练出数据的一般规律,既不过拟合,也不欠拟合。如下图所示,最左侧可能是一种欠拟合状态,拟合的函数和训练集的误差较大,最右侧是过拟合,拟合的函数与训练集几乎完全匹配,这种情况在测试集中结果反而会变差。由此,需要构建评估模型来评估模型的泛化能力,这是检验一个模型是否更为有效的方法。

评估方法

将一个模型的训练集也当作测试集会导致对模型泛化能力的评估不准确,因此我们需要将数据拆分,即使用训练集进行训练, 测试集进行验证评估模型的准确性, 两个数据集不相交,从而验证模型的泛化能力。

常见的模型评估方法有留出法,k折交叉验证法和自助法:

K折交叉验证中k一般会选择5,10,20,其中k越大需要训练的次数越长,其误差估计的效果也越好。在验证中,训练集和测试集的数据分布应尽可能一致,如果不一致,可能会影响测试集的误差。

03.优化模型

评估模型的泛化能力评估,当模型的应用不理想时,我们应该如何优化模型?

假设我们在做一个预测模型时, 预测的结果与实际有很大的误差。我们知道模型不理想主要来源于模型的欠拟合和过拟合,接下来该如何做?

学习曲线

考虑使用学习曲线来判断模型的过拟合问题。

学习曲线是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而判断模型是否方差偏高或偏差过高,以及增大训练集是否可以减小过拟合。

当训练集与测试集的误差收敛但却很高时,为高偏差,左上角偏差较高,训练集和验证集的准确率很低,可能是欠拟合。当训练集与测试集的误差之间有很大的差距时,为高方差,右上角中方差较高,训练集的准确率要高于验证集的准确率,可能是过拟合。理想的状况是偏差和方差都很小,此时既不欠拟合也不过拟合。

 优化模型

基于上文,当模型出现过拟合或欠拟合时,可从以下几个方面考虑:

1. 数据量的多少。较少的数据量更容易过拟合,增大数据量对过拟合是有效的。2. 增加或减少特征量。特征值较少会影响模型对样本数据的认识,导致欠拟合,增加特征值对欠拟合时有效的。3. 增加或减少正则化。正则化的使用对过拟合是有效的。

具体可以参见以下思维导图:

 

一个机器学习项目是实践与理论相结合的过程,通过实践加深对理论的认识,学习理论提高对实际问题的应用能力。在不断熟悉实际问题的数据类型与背景的过程中,通过训练机器学习模型,使用各种方法调整并优化模型以得到满意的结论,这一过程可能比单一熟悉机器学习算法理论耗时要长。 通常情况下,我们会花更多的时间在数据的预处理和参数调优上,需要不断调整数据,优化模型,直到达到较为理想的效果。

 

转载于:https://www.cnblogs.com/yyy-blog/p/10400885.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据挖掘的相关知识例子

一、贝叶斯 贝叶斯定理由英国数学家贝叶斯 ( Thomas Bayes 1702-1761 ) 发展,用来描述两个条件概率之间的关系,比如 P(A|B) 和 P(B|A)。按照乘法法则,可以立刻导出:P(A∩B) P(A)*P(B|A)P(B)*P(A|B)。如上公式也可变形为&#xf…

3.3 1!到n!的和

求1! 2! ... n! 的结果。 输入样例&#xff1a; 3 6 输出样例 9 873 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交时&#xff0c;注释此句int num;while (cin >> num){int…

[币严区块链]以太坊(ETH)Dapp开发入门教程之宠物商店领养游戏

阅读本文前&#xff0c;你应该对以太坊、智能合约有所了解&#xff0c;如果你还不了解&#xff0c;建议你先看以太坊是什么 除此之外&#xff0c;你最好还了解一些HTML及JavaScript知识。 本文通过实例教大家来开发去中心化应用&#xff0c;应用效果如图: 项目背景 Pete有一个…

怎么通俗易懂地解释贝叶斯网络和它的应用?

作者&#xff1a;小杰链接&#xff1a;https://www.zhihu.com/question/28006799/answer/38996563来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。英语原文&#xff1a;http://www.norsys.com/tutorials/netica/secA/tut…

3.4 等比数列

已知q与n&#xff0c;求等比数列之和&#xff1a;1 q q^2 ... q^n 输入样例&#xff1a; 6 0.3 5 1.3 输出样例&#xff1a; 1.428 12.756 #include<iostream> #include<fstream> #include<cmath> using namespace std;int main() {ifstream cin(…

SVM分类算法的基本理论问题

1.引言   随着网络技术的飞速发展和普及&#xff0c;进入了信息大爆炸的时代。信息无处不在&#xff0c;给我们的学习生活带来了诸多便捷&#xff0c;由于堪称海量的信息量&#xff0c;我们从中获取有用的信息变得困难&#xff0c;解决这一难题就是要对这些大量的信息进行分…

3.5 斐波那契数

求第n项的斐波那契数。 1 1 2 3 5 8 ... 输入样例&#xff1a; 6 10 输出样例&#xff1a; 8 55 #include<iostream> #include<fstream> #include<cmath> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交时&#xff…

决策树案例理解

小王是一家著名高尔夫俱乐部的经理。但是他被雇员数量问题搞得心情十分不好。某些天好像所有人都來玩高尔夫&#xff0c;以至于所有员工都忙的团团转还是应付不过来&#xff0c;而有些天不知道什么原因却一个人也不来&#xff0c;俱乐部为雇员数量浪费了不少资金。 小王的目的是…

3.6 最大公约数

输入样例&#xff1a; 6 5 18 22 输出样例&#xff1a; 1 6 #include<iostream> #include<fstream> #include<cmath> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交时&#xff0c;注释此句int m, n;while (cin >&…

剑指offer-反转链表

反转链表 一、题目描述 输入一个链表&#xff0c;反转链表后&#xff0c;输出新链表的表头。 &#xff08;看过答案和测试之后&#xff0c;题目隐藏条件是要求链表是不带头结点的&#xff09; 二、题目思路 就是用三个指针&#xff0c;head、pre、next&#xff0c;head之前都是…

3.7 最小公倍数

先各自除以最大公约数&#xff0c;然后将两个结果和最大公约数相乘&#xff0c;即为最小公倍数。 输入样例&#xff1a; 6 5 18 12 输出样例&#xff1a; 30 36 #include<iostream> #include<fstream> using namespace std;int gcd(int, int);int main() {ifs…

聚类、K-Means、例子、细节

聚类#####今天说聚类&#xff0c;但是必须要先理解聚类和分类的区别&#xff0c;很多业务人员在日常分析时候不是很严谨&#xff0c;混为一谈&#xff0c;其实二者有本质的区别。分类其实是从特定的数据中挖掘模式&#xff0c;作出判断的过程。比如Gmail邮箱里有垃圾邮件分类器…

图的广度优先遍历

#include <iostream> #include <vector> #include <queue> using namespace std;const int MAXV 1000; const int INF 1000000000; //下标代表点,数组元素代表连接的点 //图的邻接表 vector<int> Adj[MAXV]; //顶点数 int n;//DFS 如果顶点i已经被…

3.8 平均数

求若干整数的平均数&#xff0c;结果保留三位小数。 输入样例&#xff1a;第一个数字代表数据个数 3 6 5 18 4 1 2 3 4 输出样例&#xff1a; 9.667 2.500 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.t…

从决策树学习谈到贝叶斯分类算法、EM、HMM

引言 最近在面试中(点击查看&#xff1a;我的个人简历&#xff0c;求职意向&#xff0c;择司标准)&#xff0c;除了基础 & 算法 & 项目之外&#xff0c;经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然&#xff0c;这完全不代表你将来的面试中会遇…

gdb调试的基本使用

GDB调试 启动程序准备调试 GDB yourpram 或者 先输入GDB 然后输入 file yourpram然后使用run或者r命令开始程序的执行,也可以使用 run parameter将参数传递给该程序参数列表  命令 命令缩写 命令说明 list l 显示多行源代码 break b 设置断点,程序运行到断点的位置会停…

3.9 对称三位素数

素数&#xff1a;只能被1和自身整除 判断一个数是否是素数&#xff1a;判断从2到sqrt(n)的整数中是否有其约数 判断一个数是否是三位素数。 输入样例&#xff1a; 11 101 272 输出样例&#xff1a; No Yes No #include<iostream> #include<fstream> #incl…

决策树的过拟合问题

决策树的过拟合问题决策树是一种分类器&#xff0c;通过ID3&#xff0c;C4.5和CART等算法可以通过训练数据构建一个决策树。但是&#xff0c;算法生成的决策树非常详细并且庞大&#xff0c;每个属性都被详细地加以考虑&#xff0c;决策树的树叶节点所覆盖的训练样本都是“纯”的…

计算机网络与协议

计算机网络&#xff1a; TCP/IP中只要是能够设定IP地址的计算机就成为主机 网络按其规模可分为&#xff1a; WAN&#xff08;广域网&#xff09;&#xff1a;覆盖多个远距离区域的远程网络 MAN&#xff08;城域网&#xff09;&#xff1a;比广域网小一级&#xff0c;连接整个城…

3.10 十进制转换为二进制

将十进制整数转换成二进制数 对于每个n&#xff0c;以11位的宽度右对齐输出n值&#xff0c;然后输出"-->"&#xff0c;然后输出二进制数。 输入样例&#xff1a; 2 0 -12 1 输出样例&#xff1a; 2-->10 0-->0 -12-->-1100 1-->1 #include<…