机器学习入门阶段程序员易犯的5个错误

怎样进入机器学习领域没有定式。我们的学习方式都有些许不同,学习的目标也因人而异。

但一个共同的目标就是要能尽快上手。如果这也是你的目标,那么这篇文章为你列举了程序员们在通往机器学习高手道路上常见的五种错误。

1.将机器学习看得高不可攀

机器学习不过是另一堆技术的集合,你可以用它来解决复杂问题。这是一个飞速发展的领域,因此,机器学习的学术交流一般出现在学术期刊及研究生的课本里,让它看起来高不可攀又难于理解。

要想高效掌握机器学习,我们需要转变观念,从技术转到方法,由精确变为“足够好”,这也同样适用于程序员感兴趣的其它复杂技术。

2.编写机器学习程序代码

由编码开始入门机器学习会很困难,因为你需要解决的问题从一个变成两个:了解一项技术以便你实现它以及对于给定问题如何应用该项技术。一次解决一个 问题,并利用机器学习、统计分析环境以及算法库来学习如何将一项技术应用于某一问题,这样就会容易很多。这能让你对于若干算法进行相对快速的抽查和调整, 而无需花上大量时间阅读研究论文中含糊的算法描述再将其编码。

实现一个算法可以作为一个单独的项目晚些再完成,比如作为一个练习或是等到原型系统需要投入运行时。一时只学一事,我建议从有GUI的机器学习框架开始入门,不论你是不是程序员。

3.手动搞定工作

实用机器学习包括问题定义、数据准备、结果表达等步骤,它们与算法的测试和调整都能够并应该实现自动化。

在现代软件开发的编译、测试和部署中,自动化操作占有重要地位。对数据准备、算法测试调试、结果的表达编写自动脚本可以在准确性和改进速度方面获得巨大的优势。在专业软件开发课程中学习的知识要牢记于心并不断应用。

可能很多学习机器学习的程序员看的书、上的课对于这一领域的应用本质关注不多,导致很多人入门阶段没有使用自动化手段。实际上,将自动化技术应用到实用机器学习的方方面面会是程序员的巨大机遇。

4.对常见问题重复求解

你正要实现的算法,或是与你正在求解的问题相似的问题,可能早有千百人解决了,就利用他们的经验吧。

解决机器学习问题的知识非常多,当然它们可能都在书本或学术出版物中,但你可以访问它们。做好你的功课,在谷歌谷歌图书谷歌学术上搜索,还可以去机器学习的网络社区。

如果你正要实现一个算法:

必须实现它吗?可不可以在某个库或工具中找到开源的实现复用呢?

你的实现必须从头做起吗?可不可以对现有的开源实现进行代码审查,从中学习或是移植呢?

你必须对标准算法描述编码吗?在其它书论文或是帖子中没有别的算法描述可供代码审查及借鉴呢?

如果你正要求解某个问题:

你必须测试针对这个问题的所有算法吗?这一问题或是同一大类相似问题有没有研究成果显示一些算法或算法类表现良好可供利用?

你必须自己搜集数据吗?有没有公开的数据集或是API你可以直接使用或是作为你问题的替代,以快速弄清哪种方法可以有良好表现?

你必须优化算法的参数吗?在对算法的研究和论文中有没有可用的启发式方法来配置算法呢?

如果你在编程函数库或是特定某一数据结构方面遇到问题,你会选择什么策略,在机器学习领域就用相同的策略吧。参与网络社区并寻求可供利用的资源,可以加速你的学习和项目开发进程。入门阶段可以考虑论坛和问答网站,之后可以与学者和专家联系。

5.忽视数学

起步阶段你并不需要数学理论,但是数学在机器学习中地位重要。因为它能提供最有效、最清晰的方法描述问题及系统的行为。

忽略算法中的数学方法会导致诸多问题,如对某一方法理解有限或是对算法编码时受到限制。举个例子,很多机器学习算法的核心优化是增量式的演进。如果你能明白优化的本质(凸函数),你就能利用这些知识来使用高效的优化算法。

将算法的数学方法内化于心过程缓慢,但你的功力却也随之提升。特别是如果你要从零开始实现高级算法,包括算法的内部优化,多多花时间从数学角度来理解算法吧。

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-09-19 20:32:33

机器学习入门阶段程序员易犯的5个错误的相关文章

Java程序员常犯的五个错误_java

下面针对每一个错误用文字说明结合代码详解的方式展示给大家,具体内容如下: 1. Null 的过度使用 避免过度使用 null 值是一个最佳实践.例如,更好的做法是让方法返回空的 array 或者 collection 而不是 null 值,因为这样可以防止程序抛出 NullPointerException.下面代码片段会从另一个方法获得一个集合: List<String> accountIds = person.getAccountIds(); for (String accountId :

C++程序员容易犯的十个C#错误

c++|程序|程序员|错误 我们知道, C#的语法与C++非常相似,实现从C++向C#的转变,其困难不在于语言本身,而在于熟悉.NET的可管理环境和对.NET框架的理解. 尽管C#与C++在语法上的变化是很小的,几乎不会对我们有什么影响,但有些变化却足以使一些粗心的C++编程人员时刻铭记在心.在本篇文章中我们将讨论C++编程人员最容易犯的十个错误. 错误1: 析构函数上的差异 几乎可以完全肯定地说,对于大多数C++编程人员而言,C#与C++最大的不同之处就在于垃圾收集.这也意味着编程人员再也无需

PHP程序员常犯的11个错误

1.使用myisam而不是innodb mysql教程有很多数据库教程引擎,但是你最可能碰到的就是myisam和innodb. mysql默认使用的是myisam.但是,很多情况下这都是一个很糟糕的选择,除非你在创建一个非常简单抑或实验性的数据库.外键约束或者事务处理对于数据完整性是非常重要的,但myisam都不支持这些.另外,当有一条记录在插入或者更新时,整个数据表都被锁定了,当使用量增加的时候这会产生非常差的运行效率. 结论很简单:使用innodb.   2.使用php教程的mysql函数

看似简单!解读C#程序员最易犯的7大错误

编程时犯错是必然的,即使是一个很小的错误也可能会导致昂贵的代价,聪明的人善于从错误中汲取教训,尽量不再重复犯错,在这篇文章中,我将重点介绍C#开发人员最容易犯的7个错误. 格式化字符串 在C#编程中,字符串类型是最容易处理出错的地方,其代价往往也很昂贵,在.NET Framework中,字符串是一个不可变的类型,当一个字符串被修改后,总是创建一个新的副本,不会改变源字符串,大多数开发人员总是喜欢使用下面这样的方法格式化字符串: string updateQueryText = "UPDATE E

一起谈.NET技术,看似简单!解读C#程序员最易犯的7大错误

编程时犯错是必然的,即使是一个很小的错误也可能会导致昂贵的代价,聪明的人善于从错误中汲取教训,尽量不再重复犯错,在这篇文章中,我将重点介绍C#开发人员最容易犯的7个错误. 格式化字符串 在C#编程中,字符串类型是最容易处理出错的地方,其代价往往也很昂贵,在.NET Framework中,字符串是一个不可变的类型,当一个字符串被修改后,总是创建一个新的副本,不会改变源字符串,大多数开发人员总是喜欢使用下面这样的方法格式化字符串: string updateQueryText = "UPDATE E

全世界所有程序员都会犯的错误

程序|程序员|错误 当年,国际巨星成龙的「龙种」曝光,众人指责他对不起娇妻林凤娇,逼得他出面召开记 者会,向世人自白他犯了「全世界所有男人都会犯的错误」.从来没犯过这种错误的我, 也因此常常认为自己不是个男人. 虽然没犯过「全世界所有男人都会犯的错误」,但是我倒是曾经犯了「全世界所有程序员 都会犯的错误」.不管使用何种语言,全世界所有程序员都一定犯过这种错误,那就是: 太依赖编译器,却不知道编译器做了哪些事. 一般来说,越高阶的程序语言,会提供越多语法上的便利,以方便程序撰写,这就俗称为 syn

5种易犯的PHP数据库错误

 5种易犯的PHP数据库错误---包括数据库模式设计.数据库访问和使用数据库的业务逻辑代码---以及它们的解决方案. 如果只有一种 方式使用数据库是正确的--  您可以用很多的方式创建数据库设计.数据库访问和基于数据库的 PHP 业务逻辑代码,但最终一般以错误告终.本文说明了数据库设计和访问数据库的 PHP 代码中出现的五个常见问题,以及在遇到这些问题时如何修复它们. 问题 1:直接使用 MySQL 一个常见问题是较老的 PHP 代码直接使用 mysql_ 函数来访问数据库.清单 1 展示了如何

将数据中心迁移到云时易犯的10个错误

从前不久的数据来看,虽然25%的企业还在评估云服务是否可以在日常生产环境中为他们工作,以及他们的公司数据在云中是否安全. 但是,对于云服务提供商存储和保护关键业务信息的态度已经发生了变化. 根据IDG企业调查显示,一些企业预计到2017年年底会将其59%的IT环境迁移到云.对于企业机构而言,这是一个令人印象深刻的数字,但也不是那么简单的,因为会出现更多的挑战, 有许多预防措施是一定要考虑的,它是一个彻底的,多步骤的过程.一步做不好就有可能导致事情的失败.将企业的数据中心资产移到云计算平台需要大量

安全应急响应工作中易犯的5大错误

本文讲的是 安全应急响应工作中易犯的5大错误,转行或开启一份新工作的最大挑战之一,不是了解该做什么,而是学会不能做什么. 人非圣贤,孰能无过?但在安全行业,小过失往往造成大损失.下面是安全响应中一些常见的错误,以及安全专家给出的真知灼见. 无准备 对没准备的公司,发现自己被攻击的事实可能会带来恐慌.无效响应和难以承受的账单.你知道攻击事件中得弄清哪些问题,不妨设置好整体计划以应对这些问题,有备无患. 比如说:哪些数据被盗了?攻击者是怎么进到公司网络的?他们在公司网络中畅游多久了?都有哪些系统被他