举两个栗子:如何正确建立个人的机器学习项目集

转自:

举两个栗子:如何正确建立个人的机器学习项目集

机器之心

百家号12-1213:32

选自Towards Data Science

作者:Edouard Harris

机器之心编译

面试机器学习方面的工作时,在简历的个人项目那块,你会写什么?建模?做机器学习项目?项目数据从哪儿来?在 SharpestMinds 创始人 Edouard Harris 介绍的两个成功例子中,人家是从基础的收集数据开始一步步做项目的:目标明确,做到极致。

我是一名物理学家,在 YC startup 工作。我们的任务是帮应届生找到自己的第一份机器学习工作。

要找到第一份机器学习工作,你要做的一件事就是建立自己的机器学习项目集(portfolio)。现在,我来告诉你答案。

你可能会奇怪为什么这很重要,那是因为招聘经理通常会通过你的履历来了解你,如果你没有履历,个人项目就是最接近的替代品。

因为职业原因,我见过数百份个人项目的案例,有做得极好的,也有做得极差的。我将向你展示两个极好的案例。

全力以赴型

接下来要说的是一件真实的故事,只不过隐私起见我改了主人公的名字。

公司 X 使用 AI 提醒杂货店何时该订购新的库存。我们这边有个学生——Ron,很想去 X 公司工作,所以他建立了个人项目,该项目完全是针对去该公司面试用的。

我们通常不建议这样对着一家公司全力以赴做准备。这有点冒险。不过,像 Ron 这样真的非常想去这家公司就另当别论了。

红色边框标出了缺失项。

Ron 刚开始把手机贴到购物车上。然后,他推着购物车在过道来回走动,同时用相机记录。他在不同的杂货店做了 10 到 12 次。回到家后,Ron 开始建立一个机器学习模型。他的模型发现了杂货店货架上的空缺点:货架上缺少玉米片(或其他东西)的位置。Ron 在 GitHub 上实时建立了他的模型,完全公开。每天,他都会改进他的 repo(提高准确率,并在他的 repo 的 README 中记录项目变化。)当 X 公司意识到 Ron 正在这样做时,X 公司很感兴趣,而且不止是感兴趣,事实上,X 公司有点紧张。他们为什么会紧张?因为 Ron 在不知不觉中,在几天内复制了他们专有技术堆栈的一部分。

当然,Ron 所做的远远不够完美:X 公司已经投入了比 Ron 多几个数量级的资源来解决这个问题。但由于太相似,他们很快就叫 Ron 将他的 repo 私有化。

X 公司的技术在同行业中名列前茅。尽管如此,在 4 天内,Ron 的项目得到了 X 公司首席执行官的直接个人关注。

飞行员项目

以下是另一个真实故事:

Alex 是一名历史专业大学生,主修俄语(真的),同时他对机器学习感兴趣。更为不同寻常的是,尽管他从未编写过 Python 代码,但他还是决定学习它。

Alex 选择通过构建实用项目来学习。他决定建立一个分类器,以检测战斗机飞行员是否在飞机上失去意识。Alex 希望通过观察飞行员的视频来发现这一点。他知道一个人很容易通过观察,在一名飞行员失去知觉时告诉他,所以 Alex 认为机器也应该可以做到。

这是 Alex 在几个月中所做的事情:

Alex 的 G-force 诱导失去意识探测器的演示。

Alex 在 YouTube 上下载了从驾驶舱中拍摄的飞行员驾驶飞机的所有视频片段(大约数十个)。接下来他开始标记数据。Alex 构建了一个 UI,让他可以滚动浏览数千个视频帧,按一个按钮表示「有意识」,另一个按钮表示「无意识」,并自动将该帧保存在正确标记的文件夹中。这个标记过程非常非常无聊,花了他很多天时间。Alex 为图像构建了一个数据管道,可以将飞行员从驾驶舱背景中剪裁出来,使他的分类器更容易专注于飞行员。最后,他建立了他的意识丧失分类器。在他做所有这些事情的同时,Alex 也在社交活动中向招聘经理展示他的项目快照。每当他拿出他的项目并在手机上展示时,他们会问他是如何做到的,他如何建造管道,以及如何收集数据。但他们从来没有询问他的模型准确率(低于 50%)。

当然,Alex 也计划提高其准确率,但在动手之前就被录用了。结果证明,公司更看重他项目的视觉效果以及他在数据收集过程中表现出的疯狂与智慧,而不是他的模型的准确率。

他们之间的共同点

Ron 和 Alex 为什么如此成功?因为他们做对了以下四件事:

他们没有在建模上浪费太多精力。我知道这听起来很奇怪,但对于今天的很多用例来说,建模是一个已经解决的问题。在实际工作中,除非你做的是最前沿的研究,否则你的时间 80%~90% 都会花在清洗数据上。你的个人项目又怎能例外?他们自己收集数据。正因为如此,他们得到的最终数据比 Kaggle 或 UCI 数据库中的数据更混乱。但也正是这些混乱的数据提高了他们处理混乱数据的能力。比起从学术服务器上下载数据,这种做法让他们能够更好地理解自己的数据。他们将做出的东西可视化。所谓面试,并不是说由一位无所不知的裁判对你的能力做出客观的评估,而是将你自己推销给另一个人。人是视觉动物。如果你掏出手机向面试官展示你的作品,那么你要确保自己做的东西看起来有趣,这点非常值得。他们的所作所为看起来确实有点疯狂。正常人不会用胶带把自己的手机绑在购物车上。正常人也不会花那么长时间从 YouTube 上裁剪飞行员视频。什么人才会做这种事?那些不顾一切完成目标的人才会这么干。公司最想雇佣的就是这种人。

Ron 和 Alex 的所作所为可能看起来太夸张,但实际上,这和你在真正的工作中要做的事差不多。这就是要点:当你没有做某事的工作经验时,招聘经理会看你做过的和某事相类似的经历。

幸运的是,这种程度的项目你只要做一两次就好——Ron 和 Alex 就在所有的面试中重复使用之前准备的项目。

因此,如果用一句话来概括伟大 ML 项目的秘密的话,那就是:用一个有趣的数据集来构建一个项目,这个数据集需要很大的努力来收集,并且尽可能地在视觉上有影响力。

原文链接:https://towardsdatascience.com/the-cold-start-problem-how-to-build-your-machine-learning-portfolio-6718b4ae83e9

原文地址:https://www.cnblogs.com/wdmx/p/10108542.html

时间: 2024-07-29 15:11:32

举两个栗子:如何正确建立个人的机器学习项目集的相关文章

Eclipse中Android公共库的正确建立及调用方法(转)

转自http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享出来. 建立公共库 首先建立公共库的Android项目,名为MyCoreLib: 完成后在左侧包浏览器里右键点选我们新建的这个项目,选择Properties项: 左侧选择Android分类,右侧勾选Is Library选项: 完成后在

以正确的方式开源 Python 项目(转)

大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清晰和无痛.我不是简单的指——“创建一个GitHub库,提交,在Reddit上发布,每天调用它”.在本文的结尾,你可以把现有的代码转换成一个能够鼓励他人使用和贡献的开源项目. 然而每一个项目都是不同的,但其中将现有代码开源的流程对所有的Python项目都是类似的.在另一个受欢迎的文章系列里我写了“以正确方式开始一个Django项目”,我将概述在开源Pyth

(原创)一个完整的机器学习项目是怎么建立起来的

在这篇文章中,将介绍机器学习项目的流程 明确问题 首先,我们需要预览这个项目.项目的目的是什么,以房价预测为例,数据为StatLib的加州房产数据,那么目的就是预测街区的房产价格中位数. 划定问题及分析 要知道商业目的是什么,毕竟建立模型不是最终目的.比如说,目的是输出一个价格传给另一套系统来判断是否值得投资以及利润是多少. 要知道现在的解决方案效果怎么样,比如会给出一个现解决方案的误差率是alpha. 现在我们可以进一步研究问题,明确这个问题是监督/非监督,还是强化模型?是分类/回归,还是聚类

【读书札记】建立第一个Web项目

安装配置好jdk,tomcat,我用的版本是7.0.54,我放在C:\server\apache-tomcat-7.0.54下, CATALINA_BASE:C:\server\apache-tomcat-7.0.54 CATALINA_HOME:C:\server\apache-tomcat-7.0.54 也可以在Path下面添加配置  ;C:\server\apache-tomcat-7.0.54\bin ,这样就可以在cmd下直接输入startup启动服务器了. 背景:运用web容器tom

如何编写NopCommerce插件(一)建立一个MVC的项目

一.建立一个MVC的项目: 二.添加Description.txt文件 其中,Group表示插件是属于哪一组. FriendlyName:插件的名称 SystemName:插件的唯一标示 FileName:插件所在的dll 三.添加RouteProvider.cs文件 public partial class RouteProvider : IRouteProvider { public void RegisterRoutes(RouteCollection routes) { routes.M

Is It A Tree?------HDOJ杭电1325(两种方法,可以用也可以不用并查集!!!!!!详解)

Problem Description A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more nodes connected by directed edges between nodes satisfying the following properties. There is exactly one node, called the

如何正确建立MYSQL数据库索引

索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  );   我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录

列 举 两 种 数 组 去 重 的 方 法 :

第一种: var arr=[1,2,3,4,5,3,4,5,6,2,'hah','hah','a','b','a']; function fn(){ var na = []; for(var i = 0; i < arr.length; i++){ if (na.indexOf(arr[i]) == -1){na.push(arr[i]);} } return na; } console.log(fn());//输出=>1,2,3,4,5,6,'hah',a,b 第二种:var abc=['a

debug、 release两个版本中正确运行的一些经验

在Qt编程中,默认的是debug版本,在编译器中可以正常的使用,但是单独运行.exe可执行文件时却发现系统提示缺少文件.其实就是缺少必要的.dll动态库文件.根据提示添加需要的.dll动态库文件即可.另外,这些动态库文件就在Qt的安装目录中,找到复制进去就行了. 并且,debug需要添加的动态库文件名字一般就是XXXd.dll文件,比如Qt5Cored.dll文件.但是在release版本中,需要添加的文件根debug版本中的是一样的,但是名字有一点区别.比如在debug版本中添加的是Qt5Co