如何投资 Airbnb 房产
利用数据做出明智的决策
A irbnb 与 2019 年 8 月相比增长了 21%,总收入4,308,726,681 美元。更令人印象深刻的是,它已经发展到1.5 亿用户,目前在 191 个国家有 6,370,563 个房源。到目前为止,这对 Airbnb 来说非常成功。
在东南亚,马来西亚连续第二年成为 Airbnb 增长最快的国家。仅在 2018 年一年,马来西亚共有 53,000 家上市公司带来了约亿RM3 的直接经济影响。得知 Airbnb 在马来西亚的业务增长迅速,我一直有一个疑问。
在马来西亚首都吉隆坡,开办 Airbnb 业务的最佳地区是哪里?
在思考上述问题之前,我的脑海里马上会蹦出另一个问题。我在想什么?我还没有房子,为什么我会考虑这个问题?然而,我仍然决定谷歌是否有其他方法,这里是我发现的。
有两种方法可以让你开始经营 Airbnb。一种是出租自己的一处房产,另一种方式是出租别人的房产来开展 Airbnb 业务。换句话说,我不需要拥有一个物业开始!
如果你要我选择开始的方式,我会先选择第二个选项。因为它更灵活,与购买房产相比,我可以在相对较短的时间内租赁房产。另一个原因是,我可以体验一下在 Airbnb 做主持人的感觉,然后再为了开办 Airbnb 业务而购买房产。
在本文中,我将讨论如何设法获取数据以供以后分析。事不宜迟,我们开始吧!
数据收集之旅
在我开始爬 Airbnb 网站之前,我偶然发现了这个网站,它似乎改变了我做其他话题的想法。总之,Airbnb 网站实际上并不热衷于分享他们拥有的数据。阿姆斯特丹政府试图刮网站周刊似乎已经放弃刮这个网站。
尽管知道我将面临很多问题,我仍然决定尝试抓取网站。现在,我将分享一些我在浏览网站时遇到的问题。
我面临的第一个问题是动态改变 Xpath 或 CSS 路径。这意味着你不能只使用 Xpath 的一个例子,并且假设在所有列表的网页上使用这个 Xpath 会给你你想要的相同的信息。
此外,爬行器的稳定性也是另一个问题。如果你在清理 Airbnb,以下是我建议的一些方法。我发现的最有效的方法是将旋转 IP 和减慢爬虫速度结合起来。
在花了几个小时检查网络选项卡之后,我发现了一条路径,在这条路径上,您将能够访问包含更整洁数据的 JSON 。所以,我的第一个问题已经解决了!为了增加我的爬虫的稳定性,我旋转 IPs 并且减慢我的爬虫。最后,我能够以稳定得多的速度抓取数据。
数据清理之旅
收集完数据之后,我们来做一些数据清理。
首先,我获得了至少有一个评论的列表的最高价格。让我们称这个价格为价格 A。此外,我删除了所有高于价格 A 的列表——异常列表。换句话说,异常列表是价格高得离谱,但没有人发表评论的列表。
基于**局部邻域,**删除了重复的列表,只留下大约 5590 个列表。此外,前 10 大房源区域的房产估计价格来自 edgeprop 、 brickz 和 propsocial 。
数据探索
显示吉隆坡价格分布的一个好方法是绘制一个 choropleth 图。这张地图由吉隆坡的 11 个联邦选区分割而成。根据图,你可以看到马来西亚东北部的平均价格最高,而吉隆坡中部的价格相当有竞争力。
如果你是来吉隆坡度假的经济型旅行者,我猜你现在知道该住在哪个地方了!
现在,让我们来鸟瞰一下整个吉隆坡的房源分布。可以看到,Airbnb 的房源大部分都是积累在吉隆坡的市中心区域。这就是为什么城市地区的房源价格较低,因为供应量要高得多。
请随意浏览交互式图表,深入了解吉隆坡的特定区域。
数据分析
上图显示了前 20 个最贵的社区。三角形代表物品的数量,而横条代表物品的平均价格。
从这张图中你能得到什么启示?
Taman Bukit Maluri、Taman Golden 和 Segambut 的价格相对较高,上市量较低。原因之一可能是该地区没有足够的供应,因此价格较高。如果你正在考虑开办 Airbnb 业务,你可以在这个领域做一些研究,看看这个地方是否有需求,租房或买房的成本是否可以承受。
现在,是时候知道答案了。
吉隆坡最适合投资的地区是哪里?
让我们只考虑拥有最多房源的前 10 个街区。在我开始解释计算之前,让我解释一下我将要使用的一些术语。
如何计算住房市场的投资回报率(ROI)?
ROI (%) = (monthly rental * 12) / property value
因此,在我们的 Airbnb 案例中,我使用occupancy rate * fee per night * 30
来计算月租金。此外,根据 AirDNA 的报告,2018-2019 年吉隆坡的平均入住率为 66%。假设每月平均有 30 天。
因此,最终的公式看起来像这样。
ROI (%) = (fee per night * 0.66 * 30 * 12)/ property value
我寻找的另一个变量是需求。然而,如果我需要获得实际的预订数量,我需要构建一个更大规模的网络爬虫。因此,对于我的例子,我使用评论数量作为需求的代理。
最佳投资区域是甘榜巴鲁和周杰,它们位于右上方的象限。换句话说,这些街区有很高的投资回报率(%)和需求。这张图是给一个想投资房地产来开办 Airbnb 业务的投资者看的。
另一方面,对于一个买不起房子,但打算开办 Airbnb 业务的人来说,他或她需要考虑一个略有不同的衡量标准。他/她应该关注airbnb expected monthly income/ monthly rental fee
,而不是关注 ROI (%),T3 相当于(fee per night * 0.66 * 30)/monthly rental fee
。在这里,我将其定义为收入成本比。
如果你不想拥有自己的房子来开始 Airbnb 业务,周杰和甘榜巴鲁将是你可以考虑的地方。
我收集的所有估计的租房费用和房价都是来自一些免费网站。因此,如果你想要一个更准确的数字,你需要订阅一个付费服务,例如, brickz 。此外,上述所有数据都忽略了季节性影响,因为我只收集了 2019 年 11 月 29 日至 2019 年 12 月 2 日的数据。
最后的想法
非常感谢你一直读到最后。真的很感谢!
我想说的是,这个迷你项目真的消耗了我相当多的时间,所以如果你喜欢或喜欢这种内容,请在下面的评论中告诉我。
此外,收集 Airbnb 数据也非常耗时。不过,为了感谢大家今年的支持,我想免费送出去!
我收集的数据集包含了吉隆坡总共 71 个街区。如果您有兴趣获得数据集,以便您能够使用它,请随时查看此链接!
这篇文章被刊登在《亚洲科技》上,欢迎点击这里查看!
下期帖子再见!
参考
- https://www . alltherooms . com/analytics/Airbnb-IPO-going-public-incomes-business-model-statistics/
- https://www . the star . com . my/business/business-news/2019/07/02/Airbnb-generates-rm3bil-in-direct-economic-impact-in-Malaysia-last-year
关于作者
Low 魏宏是 Shopee 的数据科学家。他的经验更多地涉及抓取网站,创建数据管道,以及实施机器学习模型来解决业务问题。
他提供爬行服务,可以为你提供你需要的准确和干净的数据。你可以访问这个网站查看他的作品集,也可以联系他获取抓取服务。
在媒体上阅读低纬鸿的作品。数据科学家|网络抓取服务:https://www.thedataknight.com/.每…
medium.com](https://medium.com/@lowweihong)
如何在找数据科学工作时保持你的技能
这是我写的系列文章的第二篇,内容是关于我公司内部的对话。你可以在这里看第一部。
如果你现在加入我们,我们运行一个私有的 Slack 组,一半是有经验的数据科学家,一半是有抱负的数据科学家。有抱负的那一半往往会提出很棒的问题,有经验的那一半往往会给出很棒的答案。
我们今天要讨论的问题是:当你积极找工作时,你应该如何分配你在找工作本身——申请、面试、建立关系网——和保持你的专业技能之间的时间?
这个问题经常出现*。两者兼顾非常难!幸运的是,在今天的对话中,你会发现有很好的策略可以让这变得更容易。*
Jiri Stodulka 问道:
我已经花了大约两个月的时间在找工作上——结果,在这段时间里我没有做很多编码工作。
昨天我在做一些 EDA,我震惊地发现我不得不谷歌一切来完成它——我已经忘记了很多语法。
你如何处理这个问题?假设你在积极地找工作,你现在编码多少?
杰瑞米·哈里斯的回答:
我通常建议把你的一周分成两天的技能维护和五天的应用和项目,当他们积极寻找的时候。但因人而异。
一种常见的划分方式是周末做项目工作,工作日做工作申请和面试。
是的,解决方案是明确地安排编码时间。每个人的正确时间表会有所不同。
如果工作日/周末分开对你不起作用,一个很好的方法是每天做最小量的编码——比如 15 分钟——并安排在特定的时间。这是一种个人习惯触发器,叫做 实现意图 。
Karthik Subramanian 的回答:
事实上,在我被雇佣之前,我在这个州呆了很长时间。我忙于应付全职课程、个人项目和找工作。
除了半定期的练习,很有帮助的是文档*。你练习的任何东西,你都需要记录。***
光练习编码是不够的。你应该很好地记录你的工作,这样当你回头看的时候,你可以马上说,“是的,我有一个关于如何做这件事的想法。”例如,我记得在 LeetCode 上做了大量的问题——当我想为即将到来的面试修改它时,很多工作都浪费了,因为我没有费心记录我的解决方案。
记录资料也给你一个简单的方法来查找资料,而不需要依赖谷歌搜索,因为你已经做了艰苦的跑腿工作。我喜欢添加一两个帮助我快速找到解决方案的最佳链接,这样下次会更快。
引来了乐和 :
我以为只有我一个人受这种苦!我总是牢记“遗忘曲线”——所以我花在编码上的时间比申请工作的时间还多:
除了这些很棒的回答,下面是我自己的策略:为自己建立一个奖励系统。
在你必须完成的所有任务中——工作申请、编码项目等等。—其中一些任务给你能量,一些消耗你的能量*。你可以把给予能量的任务作为完成消耗能量任务的奖励。这就像在吃甜点之前先吃蔬菜一样:小而持续的奖励可以创造并保持良好的习惯。***
例如,比起发送求职申请,你可能更喜欢编写软件和分析数据。
然后,你可以给自己设定一个求职申请的最低目标*(例如每天一个)和一天中处理求职申请的具体时间段(例如下午 6-6:30)。在你发送了当天的工作申请后,你就可以继续你的编码项目了。***
我可能会在未来发布更多这样的对话——如果有你特别感兴趣的话题,在 Twitter 上 ping 我!
如何免费在手机上标记数据
厌倦了电子表格?在您的手机上更轻松地添加标签
Label data on your phone!
我们将通过使用 Airtable 在您的手机上随时随地标记数据的步骤。自从我开始在手机上做标记,我的标记速度至少提高了 3 倍,而且更加愉快了。注:以上为个人观点,与 Airtable 无关。
在博客的最后,这是它如何标记图像的:
Labeling images with Airtable
第一步:创建账户
在这里创建您的账户。
第二步:下载他们的手机应用程序
点击下载 Airtable 的手机应用。
步骤 3:上传数据集
- 收集您未标记的示例,并将其保存为带标题的 CSV 格式。
- 打开电脑应用程序,点击“添加底座”。
- 选择“导入电子表格”并上传您的 CSV 文件。
Adding a base
- 如果你想给图片加标签,这里有一个批量上传图片的步骤。
步骤 4:选择列类型
既然您已经上传了 CSV,我们需要自定义字段类型。对于文本栏,我们将使用“长文本”,对于图像,我们使用“附件”。
Customizing column types.
步骤 5:添加标签复选框
现在我们已经上传了数据集,我们将设置用于标注的列。根据我的经验,最简单的标记方法是为每个类创建一个复选框字段列。下面是我们如何设置复选框字段:
Adding a checkbox for “Positive” class.
第六步:开始贴标签!
第 7 步:将标签数据导出为 CSV 格式
Download CSV
希望你试试 Airtable out!如果你有任何问题,请让我知道。
额外的糖果
与团队合作:
- 邀请其他贴标机到你的飞行台基地。
- 创建一个名为“Labeler”的列,类型为“Collaborator ”,并分配谁来标记哪些例子。
- 为每个标签创建一个视图,并在每个视图中创建一个过滤器,以便每个标签只能看到它们被分配到的示例。这里就不多赘述了。
标记时记笔记:
有时在标记示例时做笔记很有用,为此我们添加了一个名为“笔记”的“长文本”栏。
Taking notes as you label
使用 Zapier 进一步自动化流程:
你想在贴标机工作时得到通知吗?或者,当你不确定一个例子的标签时,你想自动松弛你的一个队友吗?那么扎皮尔就是你的答案。我也不会详细介绍,但是如果你感兴趣,请在下面评论,我会写另一篇关于如何将 Zapier 与 Airtable 集成的博客。
如何标记文本以进行情感分析——良好实践
你是否曾经开始一个情感分析或其他文本分类任务,却发现你没有得到好的结果?要研究的可能问题的列表很长,但是有两个方面你可能会按这个顺序忽略。
第一个方面是训练数据集标签的质量,第二个方面是模型本身。我们倾向于花很多时间调整模型,因为——嗯,我们学会了这样做。当你开始你的第一个项目时,你通常会得到一个已经整理好的数据集。在预处理方面没有什么或很少要做。
当我说预处理时,忘记删除重音符号——标记化——删除停用词 bla,bla,关注所有事情的第一步:数据的质量。
使用来自互联网知识库的数据来研究机器学习(ML)是很棒的,但这也是有代价的:大量的…
medium.com](https://medium.com/@wilamelima/dealing-with-data-preprocessing-problems-b9c971b6fb40) [## 为什么删除停用词并不总是一个好主意
删除停用词是一个困难的选择。您不应该每次都删除它们。但是这一步什么时候才是真正的…
medium.com](https://medium.com/@wilamelima/why-is-removing-stop-words-not-always-a-good-idea-c8d35bd77214)
即使对人类来说,贴标签也很难
你有没有试过给东西贴标签,却发现自己做得很差?如果你还没有,这是一个发现这项任务有多难的好机会。我敢肯定,如果你从一个情感分析问题开始你的机器学习之旅,你多半会下载一个数据集,其中有许多关于酒店/电影/歌曲的预先标记的评论。我的问题是:你有没有停下来读一些呢?
如果你这样做了,你会发现有些标签并不完全是你一开始给的。你可能不同意一些评论是积极的还是消极的。这是因为负/正标签是非常主观的。
如果你不能分辨什么是积极的,什么是消极的,你的电脑肯定会和你一样糟糕。这就是为什么我会坚持认为:给数据贴标签是一门艺术,应该由对你试图从人类的角度解决的问题有着深刻了解的人来完成。但是你可以训练自己变得更好。
定义清晰的规则
给文本加标签的一个好方法是定义什么应该接受什么标签的明确规则。一旦你列出了规则,就要保持一致。如果你将亵渎归类为负面,不要将数据集的另一半标记为正面,如果它们包含亵渎。
但是这并不总是有效的。根据问题的不同,即使是讽刺也可能是一个问题和消极的标志。因此,标注文本的第二条经验法则是首先标注最简单的例子。显而易见的正面/反面例子应该尽快标记出来,最难的应该留到最后,当你对问题有更好的理解时。
另一种可能性是预先标记最简单的例子,并用它们建立第一个模型。然后,您可以将剩余的示例提交给该模型,并检查该模型对最难的示例的“意见”。
测试随机性
如果你做了以上所有的事情,你仍然不确定你的分类或者你的模型的质量,你可以试着测试随机性。执行以下操作:获取用于创建模型的示例,并为其分配随机标签。你可以用阿鲁纳来做。
当您随机标记您的示例时,您可以检查这些标签对预测的重要性。换句话说,你检查文本是否有好的标签。如果您不确定标签的正确性(假设您认为示例首先收到了错误的标签),您可以分配随机标签并观察模型的表现。
还有一种可能是模型本身坏了。为了测试模型是否总是给出相同的预测,不管它接收的是什么样的例子,我们可以给模型输入随机的文本。在这种情况下,除了只更改标签,您还可以创建没有任何意义的文本块,并查看模型的执行情况。
做实验
我用上面的两个理论来测试我正在工作的一个模型。我不确定是我的模型坏了,还是我正在处理的例子没有贴好标签。
下面是我如何进行体验的:使用相同的例子,我用相同的配置训练了一个模型三次(但是总会存在一点随机性)。第一次运行时,我用随机标签测试了模型。第二次运行时,我使用了文本 blobs,第三次运行时,我使用了正确的示例。很重要的一点是,我研究的是一个平衡的数据集。
我把数据加载到一个熊猫数据集中,有两列:“文本”和“情绪”。情感栏保存文本分类。
首轮放映
from aruana import Aruana aruana = Aruana('pt-br') sentiment = [aruana.random_classification](https://aruana.nheeng.com/docs/aruana-class#random_classification)(data['text'], classes=[0,1], balanced=True) data['sentiment'] = sentiment
结果是:
正如你所看到的,一般的准确率是 50%,这意味着这个模型并不比随机猜测好多少。
二轮放映
from aruana import Aruana aruana = Aruana('pt-br') texts = [aruana.replace_with_blob](https://aruana.nheeng.com/docs/aruana-class#replace_with_blob)(data['text']) data['text'] = texts
结果是:
将文本更改为随机斑点也会降低模型的性能。
第三轮
第三次运行时,我用好的文本/标签填充模型,结果如下:
看看它是如何改进的!因此,文本和标签在这里并不重要。
结论
如果你正在处理情感分析问题,小心文本标签。如果你一生中从未给文本加过标签,这是一个很好的练习。如果你仅仅依靠干净/处理过的文本来学习,你可能会面临一个问题,这个问题不是你的模型,而是你用来训练它的信息。
如何获得机器学习领域的实习机会
作为一名本科生,获得机器学习的实习机会是很艰难的。真的很难……大部分知名公司都在找在知名期刊发表论文的博士生。如果不能满足以上几点,如何增加获得 ML 实习的机会?
Photo by Hunters Race on Unsplash
去年,我已经花了几个小时发送申请,申请机器学习/人工智能实习。作为一名电子工程专业的学生,我发现甚至连面试都特别困难,尽管我在机器学习方面有一些相关经验。在我寻找实习机会的过程中,我注意到了一些公司都在寻找的共同点。基于这些事实,我决定改变发送简历的策略,这最终导致我获得了一份机器学习研究实习生的工作。如果你正计划申请机器学习实习,或者你正在努力获得一份实习,我希望这篇文章能帮助你找到你梦想的工作!
我还写了另一篇帮助你准备面试的文章。 链接就在这里。
大公司=激烈的竞争
Photo by Paweł Czerwiński on Unsplash
我犯的第一个错误是申请知名的大公司。谷歌(Google)、亚马逊(Amazon)或苹果(Apple)等公司每天都会收到数百份申请,甚至很难通过实习的第一个招聘阶段。如果你觉得你在机器学习方面有很好的技能,在这个领域有丰富的经验,那就去做吧。否则,最好把目标放在规模较小、知名度较低的公司,以最大化你被聘用的机会。例如,看看亚马逊机器学习实习生所需的基本资格:
Internship requirements for Machine Learning Internship at Amazon, found on Linkedin
哇哦。你看,这就是我所说的严格要求的意思。最好,你应该是一个在机器学习方面有几个出版物的哲学博士。如果你是本科,和我一样,在这里明显处于劣势。
看看你周围有没有涉及机器学习的公司。给他们发邮件,或者在 LinkedIn 上联系他们,询问他们是否提供 ML 的实习机会。他们有可能会这样做,这让你处于一个非常有利的位置,因为不会有那么多申请人,工作要求也不会那么高。
你可以做的另一件事是询问你大学里专注于 ML 研究的教授。他们可能会在研究项目中寻求帮助,或者认识业内的相关人士。这也是我去年在网络物理系统研究小组实习的原因。
证明你是好的
Photo by Lee Campbell on Unsplash
在 ML 中投入大量时间在你的自我教育上。您可能知道,这是一个非常广泛的主题,需要对统计学、算法和编程有很好的理解。你需要证明你对 ML 的各个方面都有很好的理解,并且你也是一名优秀的程序员。
个人项目是一条路要走!为 Kaggle 写一个内核,在 Github 上发布你的代码或者贡献给开源项目。招聘人员希望有证据证明你作为实习生会给公司带来积极的贡献。
通过参加 Kaggle 比赛,在其他机器学习爱好者中测试自己。起初它们可能很难,但这是一个加深你对算法理解的绝佳机会,它也推动你学习新的 ML 概念。
在你的大学创建一个人工智能社团或学习小组。这就是我去年所做的,它对我的自我发展的贡献令人惊讶。出于对社会的责任感,我必须为每周的研讨会制作大量各种各样的材料,并提高我的领导技能。它也能让你在你的大学里处于一个 ML 专家的位置!如果你玩得好,你还可以通过邀请当地公司做演讲或为学生准备研讨会来参与其中。
提高你在行业中的地位
Photo by Miguel Henriques on Unsplash
在线状态确实有助于与其他人建立联系,并获得认可。你可以成为机器学习的专家,但谁会在乎没人听说过你呢?定期在 ML 媒体上发表文章以吸引眼球,或者创建自己的博客。
也可以加入 AI 会议或活动。走出你的舒适区,和尽可能多的人交谈。这是结识来自不同公司的专业人士的最佳场所,也是与能帮你获得 ML 实习机会的人建立良好联系的潜在场所。
希望这篇文章对你获得 ML 实习有所帮助。你有什么其他的想法吗?你能做些什么来增加你得到那份工作的机会?请在评论中告诉我!
如何在 Kaggle 上安装 LB 探针
在 Kaggle 的 LANL 地震预测竞赛中,我们的团队使用 LB 探测策略,与 4500 个参赛团队一起获得了公共排行榜第一名。这是描述该策略的概述。
我们从简短介绍比赛环境开始。然后,我们继续我们对测试数据的发现,最后描述我们采用的主要方法——混合整数规划,通过分数逐渐提高来迭代可行的解决方案。
Top of the public leader-board
比赛训练数据由 6.29 亿次连续测量组成,这些测量跨越了 163 秒的实验室实验,包括 16 个地震周期。列车数据中的地震间隔时间从 7 秒到 16 秒不等。基于该训练信号,要求竞争者在 2624 个测试段上预测下一次故障的剩余时间,每个测试段包含 150k 连续测量值或大约 0.038 秒的测试数据。目标是最小化预测的平均绝对误差。
大约在比赛结束前一个月,论坛上有报道称数据可能来自一个特定的实验室实验,而一篇描述该实验的学术文章中有一张与比赛列车组完全匹配的列车组图片。
train vs test data from the article
该图片还包含可疑的测试集,并且可以安全地假设,测试数据段是从列车集之后的 108 秒长的连续间隔中截取的。
组织者进一步将测试数据细分为公共和私有数据集,已知公共数据包含 13%的数据。然而,没有公开在公共部分中确切有多少段,也没有公开哪一个是私有的,哪一个是公共的。
每个团队每天有两次提交,参与者被要求对所有 2624 个测试段做出预测。系统使用公共集 MAE 分数进行回答,该分数仅在公共部分子集上进行内部计算,每个团队的最佳分数显示在公共排行榜上。
一份全部 10 分的提交给我的分数是 5.982,全部 20 分是 15.982,这意味着在公共领导板上没有高于 10 的值。
然后,我们通过将所有值设置为 10,但另外将 60 个随机段值更改为 10000,进行了另一次提交。分数是 293.051,由此很容易得出结论,公共集合中唯一可能的整数段数是 348,并且我们碰巧在所选的 60 个段中找到了 10 个公共段。
接下来,我们为以下值列表的所有预测提交了相同的值:[0,2,3,3.25,3.5,3.75,4,4.25,4.5,5,9,9.72,10]。基于得到的分数,并假设片段的密度对于每个区间是恒定的,可以计算每个区间上片段的密度。事实上,这个问题甚至是过度约束的,需要一些优化技术或启发式方法来解决它。
注意,上次地震设定的列车被截断,停在 9.76。因此,测试集最早从 9.72 开始(减去一个片段持续时间 0.038)。这就是上面列表中值 9.72 的来源,只是猜测这个值可能是相关的。
fig. 1: density of public segments targets
不赘述,我们将问题公式化为二次规划凸优化问题,用 cvxopt 包求解。这导致图像上描绘的片段密度(见图 1)。
fig. 2: density of public segments targets only with scores 0, 4.5, 9.72 and 10
所获得的结果是有噪声的,因为对于每个区间段的密度恒定的假设并不精确,毕竟我们只有大约 348 个离散值,它既不是均匀的也不是连续的。但人们仍然可以清楚地看到,我们有两种制度。通过在模型中只保留 4.5 和 9.72 的值,我们得到了更清晰的结果,见图 2。计算出的密度为 0.141、0.070 和 0.001。如果您有兴趣自己进行计算并验证该结果,分数如下:
4.017 for all 0
2.379 for all 4.5
5.702 for all 9.72
5.982 for all 10
上面的计算决定性地向我们证明,公共集由两个连续的区间组成:9.72 到零,这显然是上次火车地震的延续,另一个区间从 4.5 到零。我敢打赌,这最后的 4.5 秒是取自最后一次测试数据地震,使私人测试数据连续。
通过了解文章中的总测试持续时间,我们还估计在连续的测试段之间平均有 7500 个样本的差距。考虑到这一差距,可以计算出 0 到 9.72 和 0 到 4.5 这两个区间正好符合 348 个区间,进一步证实了结论。
接下来,我们提交了 88 份材料,以发现哪些部分是公开的,哪些是私人的(是的,花了 44 天!).
the expected reaction
在每个这样的提交中,我们将所有值设置为 10,除了 30 个段,我们为其选择值
val[i] = 10 + 0.348*2^i
以二进制表示的结果提交分数减去 5.982(全部 10 个的分数)给出了这 30 个分段的公共/私有掩码。
现在,当我们知道公共段索引时,发现公共段值的一种方法是提交所有值 10,并且一次将一个公共段更改为零。这个过程需要 348 个提交来覆盖整个集合,这是不可行的。
我们采用的方法是基于混合整数规划(MIP)的,这种神奇的方法让我们能够以更快的速度提高我们的公共 LB 分数。问题公式是我们需要将 348 个段匹配到 348 个值,其中这些值从 0 到 9.72 和从 0 到 4.5 等间距分布,如上所述。我们所做的每一次提交都是对这个公式的约束。下面给出了完整的 MIP 问题公式,我们使用了 pulp python 包和 cplex 作为求解器(学术许可)。代码中的语法是纸浆的语法。
# decision variables
# matrix of indicators if a segment selects a value
pp=LpVariable.dicts("mix",(range(D),range(D)),0,1,LpInteger)
# absolute value of errors for submission-segment pairs
tt=LpVariable.dicts("err",(range(S),range(D)),0,20,cat='Continuous')
# margins for submission scores
dd=LpVariable.dicts("div",(range(S)),0,100,cat='Continuous')# D is number of segments = 348
# S is number of submissions available
# den is a probability density of a segment to have a value
# sub is predictions for public segments in each submission
# times is a list of all 348 public segments values
# sc is the submissions scores# objective
prob += lpSum(lpSum(pp[d][i] * den[d,i] for i in range(D)) for d in range(D)) + 1000*lpSum(dd[s] for s in range(S))
# constraints
for d in range(D):
# one selected for each segment
prob += lpSum(pp[d][i] for i in range(D)) == 1
for i in range(D):
# one selected for each value
prob += lpSum(pp[d][i] for d in range(D)) == 1
for s in range(S):
for d in range(D):
# error of each submission-segment
prob += tt[s][d] == lpSum(pp[d][i] * abs(sub[s,d] - times[i]) for i in range(D))
for s in range(S):
# sum of errors is +-0.0005 rounding error plus margin
prob += lpSum(tt[s][d] for d in range(D))<=D*(sc[s]+0.0005+dd[s])
prob += lpSum(tt[s][d] for d in range(D))>=D*(sc[s]-0.0005-dd[s])
我们最小化的目标函数由两部分组成。首先,我们希望找到可行的解决方案,因此我们希望将利润率设为零(决策变量 dd)。其次,在所有可行的解决方案中,我们希望选择可能性最大的一个。为此,我们使用了一个单独的 LGBM 分类模型的输出,该模型定期在训练集上进行训练。
MIP 迭代的过程如下。对于给定的一组可用提交,我们运行模型,获得可行的最大似然解,这是我们提交给 Kaggle 的结果。可行解决方案的集合仍然很大,我们通常每次都将分数提高 0.000–0.080。然后,我们将新的提交添加到集合中,并使用新的约束重复这个过程。
注意这个 MIP 问题还是挺大的,最后达到 245k 变量和 124k 约束。我们每次迭代都要运行几个小时的模型,即使这样也达不到精确可行的解决方案。所有提交的平均利润率在最后是 0.003(实际上非常好)。
最后,我们有 353 份以分数为约束条件的提交,其中包括所有我们自己的相关提交+ 261 份我们从公共内核下载的提交。
作为总结,我们开发了一个 MIP 模型公式,它在 348 个公共段和我们知道的构成公共测试集的值之间寻找可行的匹配。在每一次迭代中,模型都会生成一个满足所有约束条件的可行解决方案,即带有我们已有分数的提交。从某种意义上说,这是一个可行的解决方案,如果提交了这个解决方案,模型认为 0 分是可能的。在实际提交生成的值后,我们得到了一个真实的分数,而不是 0,并再次运行模型,这样它就可以根据新的信息进行自我修正。
该模型的特性是它生成满足所有提交的匹配。也就是说,如果您计算生成的解决方案和任何提交公共条目之间的 MAE 度量,您将获得实际的提交分数(如上所述,平均误差为 0.003)。
令人着迷的是,我们添加了如此多的公共内核提交,以至于我们完全覆盖了那个特定的子空间。当我们观察到我们的模型解决方案预测了 95%的分数,最大误差为 0.02,而没有专门学习它们时,我们停止了获取更多的公共内核提交!另一方面,该模型生成的提交物的预测值为零,与所有其他提交物正交,并提供了大量新信息。
在最后一个比赛日期间,MIP 解决方案生成的在“常规”提交的子空间上预测分数非常好,以至于我们使用它来估计所有最终提交候选人的公共 LB 分数(参与者被要求选择两个提交作为最终提交)。
不幸的是,我们在比赛中很晚才准备好运行 MIP 模型,只有时间提交 17 份这样的提交材料。他们的分数如下所示。
1.641 MIP 1th
1.511 MIP 2th
1.681 MIP 3th - Me giving only 20% to make any significant progress
1.304 MIP 4th - Better score than our best model
1.409 MIP 5th
1.326 MIP 6th
1.357 MIP 7th
1.306 MIP 8th
1.412 MIP 9th
1.231 MIP 10th - First place reached
1.226 MIP 11th
1.225 MIP 12th
1.145 MIP 13th
1.110 MIP 14th
1.101 MIP 15th
1.080 MIP 16th
1.104 MIP 17th
衷心感谢我的 Kaggle 队友 Ido Greenberg 在这个过程中给予的帮助和支持,即使我估计它只有 20%的机会产生任何有价值的东西。这是一个冒险的策略,但实际上奏效了。
thanks for reading!
如何免费学习数据科学
Photo by Josh Appel on Unsplash
一个完整的学习路径,包括不花你一分钱的资源
在传统的实体院校获得硕士学位的平均费用会让你花费在 3 万到 12 万美元之间。即使是在线数据科学学位课程也不便宜,最低费用为9000 美元。那么如果你想学数据科学但是又付不起这个费用怎么办?
我接受了数据科学家的职业培训,但没有接受过这方面的任何正规教育。在本文中,如果你不能或不想支付数千美元进行更正式的学习,我将与你分享我自己学习数据科学的个人课程。
该课程将包括 3 个主要部分,技术技能,理论和实践经验。我将包括学习路径的每个元素的免费资源的链接,也将包括一些额外的“低成本”选项的链接。因此,如果你想花一点钱来加快你的学习,你可以将这些资源添加到课程中。我将包括每个项目的估计成本。
技术
课程的第一部分将侧重于技能。我建议先学习这些,这样你就可以先采取实用的方法,而不是说先学习数学理论。到目前为止,Python 是用于数据科学的最广泛使用的编程语言。在 2018 年进行的 Kaggle 机器学习和数据科学调查中,83%的受访者表示他们每天都在使用 Python。因此,我建议把重点放在这种语言上,但也花一点时间在其他语言上,比如 r。
Python 基础
在开始将 Python 用于数据科学之前,您需要基本掌握这门语言背后的基础知识。所以你会想参加 Python 入门课程。有很多免费的,但我最喜欢 Codeacademy 的,因为它们包含了在浏览器中动手编码。
我建议参加入门课程学习 Python 。这包括基本语法、功能、控制流、循环、模块和类。
使用 python 进行数据分析
接下来,您将希望很好地理解使用 Python 进行数据分析。这方面有许多好的参考资料。
首先,我建议至少参加 dataquest.io 上的免费数据分析师学习课程。Dataquest 为数据分析师、数据科学家和数据工程师提供完整的学习路径。相当多的内容,尤其是关于数据分析师路径的内容是免费的。如果你确实有一些钱用于学习,那么我强烈建议你把它用于支付几个月的高级订阅费。我参加了这门课程,它为数据科学的基础知识打下了良好的基础。我花了 6 个月的时间完成了数据科学家之路。价格从每月 24.50 美元到 49 美元不等,取决于你是否按年付费。如果你负担得起的话,购买年度订阅更划算。
用于机器学习的 Python
如果你选择在 Dataquest 上付费学习完整的数据科学课程,那么你将会很好地掌握 Python 机器学习的基础知识。如果没有,那么有大量的其他免费资源。我将重点从 scikit-learn 开始,这是迄今为止最常用的用于机器学习的 Python 库。
在我学习的时候,我有幸参加了由 scikit-learn 的核心开发者之一 Andreas Mueller 举办的为期两天的研讨会。然而,他已经在这个 Github repo 上发表了本课程的所有材料和其他材料。这些包括幻灯片、课程笔记和笔记本,您可以浏览。我肯定会推荐你阅读这些材料。
然后我会建议参加 scikit-learn 文档中的一些教程。在那之后,我会建议构建一些实用的机器学习应用程序,并学习模型如何工作背后的理论——我稍后会谈到这一点。
SQL
如果你想成为一名数据科学家,SQL 是一项至关重要的技能,因为数据建模的基本过程之一是首先提取数据。这通常会涉及到对数据库运行 SQL 查询。同样,如果你没有选择参加完整的 Dataquest 课程,那么这里有一些免费的资源来学习这项技能。
Codeacamdemy 有免费介绍 SQL 课程。同样,这对于浏览器内编码非常实用。如果你也想了解基于云的数据库查询,那么 Google Cloud BigQuery 是非常方便的。有一个免费层,所以你可以免费尝试查询,大量的公共数据集可以尝试,非常好的文档。
稀有
要想成为一名全面的数据科学家,从 Python 开始尝试多样化是一个好主意。因此,我建议在 R. Codeacademy 上一门入门课,介绍他们的免费计划。这里可能值得注意的是,与 Dataquest Codeacademy 类似,它也提供完整的数据科学学习计划作为其 pro 帐户的一部分(每月费用从 31.99 美元到 15.99 美元不等,取决于您预先支付的月数)。我个人认为 Dataquest 课程更全面,但如果你想在单一平台上学习,这可能会便宜一点。
软件工程
掌握软件工程技能和最佳实践是一个好主意。这将有助于您的代码对自己和他人来说更具可读性和可扩展性。此外,当您开始将模型投入生产时,您将需要能够编写高质量且经过充分测试的代码,并使用版本控制等工具。
这里有两个很棒的免费资源。 Python 如你所愿涵盖了 PEP8 风格指南、文档等内容,也很好地涵盖了面向对象编程。
scikit-learn 贡献指南,虽然是为了方便对库的贡献而写的,但实际上很好地涵盖了最佳实践。这涵盖了 Github、单元测试和调试等主题,并且都是在数据科学应用程序的上下文中编写的。
深度学习
对于深度学习的全面介绍,我不认为你能得到比完全免费和完全无广告的 fast.ai 更好的了。本课程包括机器学习介绍、实用深度学习、计算线性代数和自然语言处理的代码优先介绍。他们所有的课程都有实用的第一方法,我强烈推荐他们。
理论
当你在学习课程的技术元素时,你会遇到你正在实现的代码背后的一些理论。我建议你在学习实践的同时学习理论知识。我这样做的方式是,我学习代码,以便能够实现一种技术,让我们以 KMeans 为例,一旦我有了工作,我就会更深入地研究惯性等概念。同样,scikit-learn 文档包含算法背后的所有数学概念。
在这一部分,我将介绍你应该学习的理论的关键基础元素以及更实用的元素。
可汗学院几乎涵盖了我下面免费列出的所有概念。当你注册时,你可以定制你想学习的科目,然后你就有了一个很好的定制课程来学习这一部分。勾选下面所有的框会让你对我下面列出的大部分元素有一个大致的了解。
数学
演算
微积分被维基百科定义为“对连续变化的数学研究。”换句话说,微积分可以找到函数之间的模式,例如,在导数的情况下,它可以帮助你理解函数如何随时间变化。
许多机器学习算法利用微积分来优化模型的性能。如果你学过一点机器学习,你可能会听说过梯度下降。这通过迭代调整模型的参数值来找到最佳值,以最小化成本函数来实现。梯度下降是微积分如何用于机器学习的一个很好的例子。
您需要了解的内容:
衍生
- 几何定义
- 计算函数的导数
- 非线性函数
链式法则
- 复合函数
- 复合函数导数
- 多重功能
渐变
- 偏导数
- 方向导数
- 积分
线性代数
许多流行的机器学习方法,包括 XGBOOST,都使用矩阵来存储输入和处理数据。矩阵与向量空间和线性方程一起形成了被称为线性代数的数学分支。为了理解有多少机器学习方法起作用,很好地理解这个领域是至关重要的。
您需要学习的内容:
向量和空格
- 向量
- 线性组合
- 线性依赖和独立
- 向量点积和叉积
矩阵变换
- 函数和线性变换
- 矩阵乘法
- 反函数
- 矩阵的转置
统计数字
以下是您需要了解的一些关键概念:
- 如何总结数据样本
- 不同类型的分布
- 偏斜度、峰度、集中趋势(如均值、中值、众数)
- 相关性的度量,以及变量之间的关系,如相关性和协方差
实验设计
- 假设检验
- 抽样
- 显著性测试
- 随机性
- 可能性
- 置信区间和双样本推断
机器学习
- 关于斜率的推断
- 线性和非线性回归
- 分类
实践经验
课程的第三部分是实践。为了真正掌握上面的概念,你需要在一些项目中使用技巧,这些项目非常类似于真实世界的应用程序。通过这样做,你将会遇到一些需要解决的问题,比如缺失的和错误的数据,并且在这个主题上有更深层次的专业知识。在最后一部分,我将列出一些你可以免费获得这种实践经验的好地方。
“然而,经过深思熟虑的练习,你的目标不仅仅是发挥你的潜力,而是开发它,让以前不可能的事情成为可能。这需要挑战体内平衡——走出你的舒适区——并迫使你的大脑或身体适应。”,安德斯爱立信, 巅峰:来自新科学的秘密
Kaggle 等人
机器学习竞赛是练习构建机器学习模型的好地方。他们可以访问广泛的数据集,每个数据集都有一个特定的问题要解决,并且有一个排行榜。排行榜是一个很好的方式来衡量你在开发一个好模型方面的知识水平,以及你可能需要进一步提高的地方。
除了 Kaggle 之外,还有包括 Analytics Vidhya 和 DrivenData 在内的其他机器学习竞赛平台。
UCI 机器学习知识库
UCI 机器学习库是一个公共可用数据集的大型来源。您可以使用这些数据集来整合您自己的数据项目,这可能包括数据分析和机器学习模型,您甚至可以尝试构建一个具有 web 前端的部署模型。将你的项目存放在公开的地方是一个好主意,比如 Github,因为这可以创建一个展示你的技能的作品集,用于未来的工作申请。
对开源的贡献
另一个可以考虑的选择是为开源项目做贡献。有许多 Python 库依靠社区来维护,并且经常在聚会和会议上举行黑客马拉松,甚至初学者也可以参加。参加这些活动之一肯定会给你一些实践经验和一个环境,在那里你可以向别人学习,同时回报一些东西。 Numfocus 是这类项目的一个很好的例子。
在这篇文章中,我描述了一个学习路径和免费的在线课程和教程,可以让你免费学习数据科学。以作品集的形式展示你所能做的是未来工作申请的一个很好的工具,代替了正式的资格和证书。我真的相信教育应该对每个人开放,当然,至少对数据科学来说,互联网提供了这样的机会。除了这里列出的资源之外,我之前还在这里发布了一份学习数据科学的推荐书目。这些都可以在网上免费获得,是补充上面提到的更实用的资源的好方法。
感谢阅读!
我每月都会发一份简讯,如果你想加入,请点击此链接注册。期待成为您学习旅程的一部分!
如何学习数据科学-我的道路
我使用的工具和资源
上周,我在 TDS 上发表了我的第三篇文章。在下一个帖子之前,我想发布这个快速的帖子。希望这篇帖子对想进入数据科学或者刚开始学习数据科学的人有所帮助。在这篇文章中,我将分享我使用的资源和工具。这基本上是我日常活动中使用的所有应用程序和链接。以下所有我用过或将来会用到的。如果你想让我添加任何其他信息,请张贴在评论区,我会包括它。
我的数据科学课程
我制作的这张图表。这应该给出了在 DS 和 ML 中需要什么工具和技能的基本概念。
[## Roadmapedia -让我们分享知识
编辑描述
www.roadmapedia.com](https://www.roadmapedia.com/roadmap/5d595ab0b3e31200174ad787)
感谢陈楚翔提出了路线图。请检查上面的链接。
另一个我在网上找到的
编程语言:
我从 R 编程开始。然后我转向 python,几乎一直使用 python 和 Jupyter Notebook。所以对我来说,python 和 SQL 是必须的。
1。Python 或者 R
[## 从“R 与 Python”到“R 与 Python”
根据你的需要而不是受欢迎程度来选择编程语言。
towardsdatascience.com](/from-r-vs-python-to-r-and-python-aa25db33ce17)
2。SQL
Python:
使用的重要库:
- NumPy
- 熊猫
- Matplotlib
- SciPy
- Scikit-Learn
- 张量流
- Keras
- Seaborn
- NLTK
- Gensim
一些有用的资源开始
1.基本 python 技巧
如果页面笔记本无法在 GitHub 上加载,请在这里查看:注意,这些是用 Python 3 (3.6)编写的,这些文件…
github.com](https://github.com/gpetepg/python_tips)
2.一些例子
[## donne Martin/数据科学 ipython 笔记本
演示深度学习功能的 IPython 笔记本电脑。其他 TensorFlow 教程:IPython 笔记本电脑…
github.com](https://github.com/donnemartin/data-science-ipython-notebooks)
3.Youtube 频道
[## Python YouTube 频道的终极列表-真正的 Python
我们在网上找不到一个好的、最新的 Python 开发者或 Python 编程 YouTube 频道列表。学习…
realpython.com](https://realpython.com/python-youtube-channels/)
SQL
传统 SQL /trəˈdɪʃəˌnəl ˈɛs kjuː ˈɛl/众所周知的 SQL-92 子集。仅限于关系模型。经常…
modern-sql.com](https://modern-sql.com/) [## SQLBolt -学习 SQL-SQL 介绍
欢迎使用 SQLBolt,这是一系列交互式课程和练习,旨在帮助您在工作中快速学习 SQL
sqlbolt.com](https://sqlbolt.com/) [## SQLZOO
使用 SQL Server、Oracle、MySQL、DB2 和 PostgreSQL 学习 SQL。如何从数据库中读取数据?2 创建和…
sqlzoo.net](https://sqlzoo.net/) [## 数据分析的 SQL 教程
本教程是为想用数据回答问题的人设计的。对许多人来说,SQL 是“肉和土豆”…
mode.com](https://mode.com/sql-tutorial/introduction-to-sql/)
2。数据可视化:
- 马特里布
- Seaborn
- 牛郎星
- 阴谋地
- 画面
- D3.js
- 散景
让别人理解你的观点的最好但也是更具挑战性的方法之一是将它们可视化:这样,你可以更多地…
www.datacamp.com](https://www.datacamp.com/community/tutorials/seaborn-python-tutorial) [## clair 513/Seaborn-教程
数据可视化是追求职业生涯所需要的一项关键但被削弱的技能。这个知识库是一个尝试…
github.com](https://github.com/clair513/Seaborn-Tutorial) [## 牛郎星-viz/牛郎星-教程
在 PyCon 2018 上发布的 Altair 教程的笔记本,请查看笔记本/Index.ipynb 上的内容介绍幻灯片…
github.com](https://github.com/altair-viz/altair-tutorial) [## rougier/matplotlib-教程
来源可从 github 获得,所有代码和材料都是在知识共享署名-共享的情况下获得许可的…
github.com](https://github.com/rougier/matplotlib-tutorial) [## d3/d3
用 SVG、Canvas 和 HTML 赋予数据生命。:bar _ chart::chart _ with _ upward _ trend:🎉-D3/D3
github.com](https://github.com/d3/d3/wiki/tutorials) [## 什么是 Tableau?-分析师指南和教程
在我的职业生涯中,我有机会使用许多工具。很少有产品像 Tableau 一样给我留下如此深刻的印象。在…
www.projectbi.net](https://www.projectbi.net/what-tableau-guide-tutorial-analysts/)
3。网页抓取:
- 美汤
- 刺儿头
- Urllib
- 硒
- 类似 Twitter API 的 API
4。流程
数据分析有 5 个核心活动:
1。陈述和提炼问题
2。探索数据
3。建立正式的统计模型
4。解读结果
5。传达结果
这本书描述了分析数据的过程。作者有丰富的经验,既管理数据分析师…
leanpub.com](https://leanpub.com/artofdatascience)
5。DS/ML 中的数学
资源:
[## 19 门面向数据科学和机器学习的数学和统计学 MOOCs
在创造之前,上帝只做纯数学。然后他认为这将是一个愉快的变化,做一些应用-约翰…
www.analyticsvidhya.com](https://www.analyticsvidhya.com/blog/2017/01/19-mooc-mathematics-statistics-datascience-machine-learning/) [## 15 门面向数据科学的数学 MOOCs
作者马修·梅奥。数据科学所需的大部分数学属于统计学和代数领域…
www.kdnuggets.com](https://www.kdnuggets.com/2015/09/15-math-mooc-data-science.html) [## 可汗学院
免费学习数学、艺术、计算机编程、经济学、物理学、化学、生物学、医学、金融…
www.khanacademy.org](https://www.khanacademy.org/math/linear-algebra) [## 数据科学基础数学和统计教程| Edureka
正如乔希·威尔斯曾经说过的,数据科学的数学和统计学是必不可少的,因为这些学科构成了基础…
www.edureka.co](https://www.edureka.co/blog/math-and-statistics-for-data-science/)
http://www.cis.upenn.edu/~jean/gbooks/linalg.html
6。机器学习:
资源:
7。大数据
来自 365 数据科学的不错的一个
4v 的
资源:
1.数据工程指南。
我经常被问到如何成为一名数据工程师。这就是为什么我决定以所有的话题开始这本食谱…
github.com](https://github.com/andkret/Cookbook)
2.学习数据工程
[## 教程和练习|数据工程|学习数据工程
编辑描述
www.learndata.engineering](https://www.learndata.engineering/tutorials-exercises)
8。我的 IDE
Jupyter 笔记本
皮查姆
r 工作室
智能理念
Jupyter 笔记本是什么?
towardsdatascience.com](/jypyter-notebook-shortcuts-bf0101a98330)
以下应用程序非常有用,我也在使用
**** Quora***
*中等
*盲
**** Reddit***
*领英
**** Udemy***
**** Coursera***
**** Youtube***
**** Meetup***
*数据营
1.Reddit:
我已经订阅了以下的 Reddit,它非常有帮助
- 数据工程
- 数据美丽
- 数据集
- 学习数据科学
- 学习编程
- Learnpython
- 机器学习
- 学习机器学习
- Python
- Rstats
- 计算机视觉
- 学习编程
- 商业智能
- 编程
- 语言
- Scala
- AWS
- bigdata
- SQL
通过订阅上述子编辑创建个性化订阅源。在应用程序中,你可以按日、周、月、年、全天等热门程度对帖子进行排序。
2.盲人:
这是一个有用的社区。你可以了解到其他公司的 DS、ML 和软件工程正在发生什么。
3.商务 Udemy:
我认为大多数公司都与 Udemy 有业务往来,我通过我的雇主与 Udemy 有业务往来。这个非常好,超级有帮助。大约有 3000 道菜。比如我在尝试安装 spark,Hadoop,scala。网上没有太多的信息,很难把它安装到我的电脑上。我刚刚去了 Udemy,参加了一个教授 apache spark 的课程,几乎在不到一个小时的时间里就安装好了。这对我真的很有帮助。此外,价格非常合理,如 9.99 美元。有好的课程可供选择。
4.Linkedin 学习:
同样,我可以访问所有 LinkedIn 学习课程。它是由我的雇主提供的,也是当地县图书馆会员免费提供的。我在 Linkedin Learning 上发现了一些很棒的 python 和 R 课程。
此外,查看 Linkedin 群组
- 数据挖掘、统计、大数据、数据可视化和数据科学
- 人工智能、深度学习、机器学习
- 大数据、分析、商业智能&可视化专家社区
- kdnugges 机器学习、数据科学、数据挖掘、大数据、AI
- 云计算,SaaS &虚拟化
- 数据仓库—大数据— Hadoop —云—数据科学— ETL
- 人工智能、深度学习和物联网
- SQL Server 商业智能(BI)
- 物联网
- 银行和金融科技——金融科技银行系统金融高管
- 云计算
- Python 社区
- Python 数据科学与机器学习
5.中等:
这是学习和发表文章的最佳平台。
我关注的一些出版物有
- 走向数据科学
- 启动
- HackerNoon.com
- freeCodeCamp.org
我发表于
走向数据科学
TDS 是 DS 中增长最快的出版物。
- 218,052 名用户
- 每天增长 436.8 个关注者
6.Youtube:
显然,DS、ML 和 AI 都有很多可用的渠道。我跟着几个
- 数据学校
- 谷歌云平台
- 学 R
- 数据营
- Simplilearn
- 爱德华卡
- 海洋统计讲座
- send ex
- Siraj Rawal 频道
7.Udacity:
我没有在 Udacity 上任何付费课程。有一些免费的课程,你可以去看看。
8.其他有用的网站
- Kdnuggets.com
- Datacamp.com
- **【Khanacademy.org **
- geeksforgeeks.org
9.卡格尔:
我想每个人都知道 Kaggle,不需要介绍
此外,看看他们有帮助的迷你课程
**[## 学习| Kaggle
编辑描述
www.kaggle.com](https://www.kaggle.com/learn/overview)**
10.Github:
显然,你可以建立你的投资组合。我有几个项目,如网络抓取,twitter 分析,使用 python 的数据可视化等。我计划今后增加更多。它也是一个搜索类似项目的好地方,你可以从 Github 发布的其他项目中获得很多帮助和想法。
11.会议:
我参加了一些圣何塞和旧金山当地的聚会。可惜我没有时间经常做。这对学习和人脉很有帮助。我在 Linkedin 大楼里见过一个 python 聚会,有几百名开发者参加。所以很明显,这是一个认识人和向人学习的黄金机会。甚至有一些聚会在工作日期间一次或隔天进行实践工作。整个周末都有一些研讨会。几乎所有的工作坊都是免费的,或者有些收取很少的费用。
12.Quora:
我订阅了以下订阅源
- 算法
- 竞争性编程
- 数据科学
- 机器学习
- 深度学习
- 大数据
- 数据分析
- 数据可视化
- Python
- Hakon Hapnes 链
- 麦克西
- 威廉·陈
- 姜黎黎
13.播客
- 数据怀疑论者(Spotify)
- 机器学习和人工智能周(Spotify )
- Superdatascience.com
- 【https://talkpython.fm/T42
另外,请检查以下内容
Paysa.com&关卡.参考消息
**[## 你拿到市场工资了吗?
Paysa 是为企业员工提供薪酬补偿和职位匹配的个性化职业服务。
www.paysa.com](https://www.paysa.com/)** ** [## Levels.fyi -比较不同公司的职业水平
Levels.fyi 便于比较和对比不同公司的不同职业水平。找出您的新…
www.levels.fyi](https://www.levels.fyi/)
14.Stackoverflow
我认为没有 StackOverflow 你就不能编码:-)
15。解题地点:
- 哈克兰克(http://hackerrank.com/)
- 厨师长(http://codechef.com/)
- 黑客地球(【http://hackerearth.com/】T2
- leet code(【http://leetcode.com/】T4)
- top coder(http://topcoder.com/)
- 卡格尔(http://kaggle.com/)
- 挑战者邮报(http://challengepost.com/
- code forces(http://codeforces.com/)
- 辉煌(http://brilliant.org/)
- SPOJ(http://www.spoj.com/)
- 欧拉项目(https://projecteuler.net/)
- 编码蝙蝠(http://codingbat.com/
- codewars(http://www.codewars.com/)
- codi ity(https://codility.com/)
- 柯丁加姆(https://www.codingame.com/)
- 科德比特(https://coderbyte.com/)
- 代码评估(https://www.codeeval.com/)
- UVA 在线评委(https://uva.onlinejudge.org/)
- 格斗大赛(https://codefights.com/)
- http://www.checkio.org/
- 塔兰特巴迪(http://talentbuddy.co/)
- python 挑战(http://pythonchallenge.com/)
- lint code(【http://www.lintcode.com/en/】T42)
- 罗莎琳德(http://rosalind.info/problems/locations/)
- CrowdANALYTIX(【https://www.crowdanalytix.com/】T2
- SQL-EX。茹(【http://sql-ex.ru/】)
- 卡特斯(http://www.kattis.com/)
- 代码卡塔(http://codekata.com/)
- CodeAbbey(http://codeabbey.com/)
- 战斗代码(http://fightcodegame.com/)
- 节拍码(http://www.beatmycode.com/)
- http://tunedit.org/
- http://mlcomp.org/
- HPC 大学(http://hpcuniversity.org/students/weeklyChallenge/
- https://practiceit.cs.washington.edu/
16。免费课程:
芬兰赫尔辛基大学推出了一门关于人工智能的课程,完全免费向全世界所有人开放。与卡耐基梅隆大学新的人工智能本科学位不同,赫尔辛基大学提供的课程对那些想了解更多的人来说更像是初学者课程。
2018 年春天,Reaktor 和赫尔辛基大学携手合作,旨在帮助人们获得力量…
www.elementsofai.com](https://www.elementsofai.com/)
机器学习
[## 免费在线课程:来自 edX | Class Central 的机器学习
第一周:最大似然估计,线性回归,最小二乘法第二周:岭回归,偏差-方差,贝叶斯…
www.classcentral.com](https://www.classcentral.com/course/edx-machine-learning-7231?utm_source=qz&utm_medium=web&utm_campaign=ivy_league_courses_2019)
人工智能
[## 免费在线课程:edX | Class Central 的人工智能(AI)
上过这门课吗?与其他学生分享你的经验。写评论什么做自动驾驶汽车,人脸识别…
www.classcentral.com](https://www.classcentral.com/course/edx-artificial-intelligence-ai-7230?utm_source=qz&utm_medium=web&utm_campaign=ivy_league_courses_2019)
面向数据科学和分析的机器学习
[## 免费在线课程:edX | Class Central 的数据科学和分析机器学习
从不错过一门课程。没有垃圾邮件。随时退订。班级中心是一个免费的搜索引擎和评论网站…
www.classcentral.com](https://www.classcentral.com/course/edx-machine-learning-for-data-science-and-analytics-4912?utm_source=qz&utm_medium=web&utm_campaign=ivy_league_courses_2019)
机器学习
[## 免费在线课程:来自 Udacity | Class Central 的机器学习
这门课在佐治亚理工学院作为 CS7641 提供,是在线硕士学位(OMS)的一部分。拿着这个…
www.classcentral.com](https://www.classcentral.com/course/udacity-machine-learning-1020?utm_source=qz&utm_medium=web&utm_campaign=ivy_league_courses_2019)
机器学习无监督学习
[## 免费在线课程:机器学习:来自 Udacity 的无监督学习
有没有想过网飞如何预测你会喜欢什么电影?或者亚马逊如何在你买之前知道你想买什么…
www.classcentral.com](https://www.classcentral.com/course/udacity-machine-learning-unsupervised-learning-1848?utm_source=qz&utm_medium=web&utm_campaign=ivy_league_courses_2019)
数据科学 21 门课程
[## 2019 年,你可以在线学习 400 门免费的常春藤大学课程
八所常春藤盟校是世界上最负盛名的大学之一。他们包括布朗大学,哈佛大学…
qz.com](https://qz.com/1514408/400-free-ivy-league-university-courses-you-can-take-online-in-2019/)
大数据、Ai、ML 方面的证书
关于学位,请参见在线学位页面|美国/加拿大|欧洲。此页面用于获取证书的选项和…
www.kdnuggets.com](https://www.kdnuggets.com/education/analytics-data-mining-certificates.html)
免费的谷歌机器学习课程
用谷歌 AI 学习。无论你是刚刚学习编码,还是经验丰富的机器学习实践者,你都会…
ai.google](https://ai.google/education/)
17。书籍
[## 免费的编程书籍;HTML5,CSS3,JavaScript,PHP,Python…
最新消息,书籍每周更新:2019 年 8 月:部分书籍小幅更新 2019 年 7 月:部分书籍小幅更正…
goalkicker.com](https://goalkicker.com/) [## mravendi/数据科学机器学习人工智能资源
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/mravendi/data-science-machine-learning-ai-resources/tree/master/books) [## sayantanmitra 87/数据-科学-书籍-1
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/SayantanMitra87/Data-Science-Books-1)
一些我经常参考的重要书签
1.所有 DS 备忘单放在一处
[## FavioVazquez/ds-cheatsheets
统治世界的数据科学清单— FavioVazquez/ds-cheatsheets
github.com](https://github.com/FavioVazquez/ds-cheatsheets)
2.DS 资源在一个地方
[## 数据-科学-资源
一个精心策划的资源链接宝库(软件、平台、语言、技术等)。)对于数据科学,all in…
数据-科学-资源. readthedocs.io](https://data-science-resources.readthedocs.io/en/latest/#data-science-curated-resources)
3.DS 笔记
[## 克里斯·阿尔邦
我是一名数据科学家,有十年应用统计学习、人工智能和软件的经验…
chrisalbon.com](https://chrisalbon.com/)
4.DS 教程
使用口袋妖怪-韦德尔洞穴的数据
www.kaggle.com](https://www.kaggle.com/kanncaa1/data-sciencetutorial-for-beginners)
5.ML 教程
使用来自骨科患者的生物力学特征的数据
www.kaggle.com](https://www.kaggle.com/kanncaa1/machine-learning-tutorial-for-beginners)
6.DS 词汇表
使用来自[数据集不再可用]的数据
www.kaggle.com](https://www.kaggle.com/shivamb/data-science-glossary-on-kaggle)
7.DS 工具箱
[## 数据科学家工具箱教程— 1
使用房价数据:高级回归技术
www.kaggle.com](https://www.kaggle.com/mjbahmani/the-data-scientist-s-toolbox-tutorial-1)
8.Plotly 教程
使用来自世界大学排名的数据
www.kaggle.com](https://www.kaggle.com/kanncaa1/plotly-tutorial-for-beginners)
9.DS Github 存储库
[## donne Martin/数据科学 ipython 笔记本
演示深度学习功能的 IPython 笔记本电脑。其他 TensorFlow 教程:IPython 笔记本电脑…
github.com](https://github.com/donnemartin/data-science-ipython-notebooks)
10.开源代码库
[## Andrey Lukyanenko 的数据科学作品集
这个文件夹是我为数据分析或探索机器学习而创建的笔记本的汇编…
erlemar.github.io](https://erlemar.github.io/)
11.工业机器学习
此外,你可以加入链接信,而不是“观看”,它已经发送给了大约 90 人,你是…
github.com](https://github.com/firmai/industry-machine-learning)
12.数据工程指南。
我经常被问到如何成为一名数据工程师。这就是为什么我决定以所有的话题开始这本食谱…
github.com](https://github.com/andkret/Cookbook)
13.学习数据工程
[## 教程和练习|数据工程|学习数据工程
编辑描述
www.learndata.engineering](https://www.learndata.engineering/tutorials-exercises)
14.谷歌数据集搜索
谷歌推出了一种新型搜索引擎,专门帮助人们查找数据。简单的叫…
www.searchenginejournal.com](https://www.searchenginejournal.com/google-introduces-new-search-engine-for-finding-datasets/268337/)
15.数据工程研究指南;
[## 数据工程学习指南—大纲(复制一份:),然后从那里开始
数据工程学习指南联系我们的问题,完成日期,笔记,个人困难 1-5 介绍这是一个…
docs.google.com](https://docs.google.com/spreadsheets/d/1GOO4s1NcxCR8a44F0XnsErz5rYDxNbHAHznu4pJMRkw/edit#gid=0)
16。正则表达式
https://regex101.com/
17。Google OpenRefine
OpenRefine(前身为 Google Refine)是处理杂乱数据的强大工具:清理它;将它从一种格式转换成另一种格式;并用 web 服务和外部数据来扩展它。
OpenRefine(前身为 Google Refine)是处理杂乱数据的强大工具:清理它;将 it 从…
openrefine.org](http://openrefine.org/)
18。更多 ML Youtube 频道:
[## 深度学习和计算机视觉的 Youtube 频道终极列表——编码女人
我想收集 Youtube 频道上关于深度学习和计算机视觉相关主题的视频…
www.codingwoman.com](http://www.codingwoman.com/youtube-channels-for-deep-learning-and-computer-vision/)
19。自制机器学习
对于这个库的 Octave/MatLab 版本,请检查机器学习 Octave 项目。此存储库包含…
github.com](https://github.com/trekhleb/homemade-machine-learning)
20。机器学习术语:
准确性是衡量分类模型好坏的标准。它由正确分类的数量给出…
塞曼迪](https://semanti.ca/blog/?glossary-of-machine-learning-terms)
21。令人敬畏的数据科学
这部分是为数据科学新手准备的。这是开始学习数据科学的捷径。只是…
github.com](https://github.com/academic/awesome-datascience)
22。数据科学博客
[## rushter/数据科学博客
数据科学博客的精选列表一个人类工程师——http://www.erogol.com/(RSS)的博客
github.com](https://github.com/rushter/data-science-blogs)
23。数据科学专业课程
这些是约翰霍普金斯大学数据科学专业的课程材料
github.com](https://github.com/DataScienceSpecialization/courses)
24.100 页机器学习书籍:
关于机器学习,你只需要知道一百页。监督和非监督学习,支持向量…
themlbook.com](http://themlbook.com/)
25。数据营信息表
希望这篇帖子对大家有帮助。如果你想添加任何东西,请在评论区发表。感谢您阅读我的帖子:-)
通过张量流考试:
我刚刚通过了 TensorFlow 开发者证书考试,并想分享对我有帮助的源代码。
自我图如何帮助你了解人工智能、下棋、吃得更健康、买狗和寻找爱情。
medium.com](https://medium.com/applied-data-science/the-google-vs-trick-618c8fd5359f)
绝对有意思,值得准备。我认为对于有经验的 TensorFlow 开发者来说,这可能是简单和容易的。
我使用的来源:
主要的是 Coursera 的 TensorFlow in Practice 或者 Udacity 的 tensor flow Intro。其他来源帮助我在更广泛的理解。从认证的角度来说,在 Coursera 的实践中,无论是 Udacity 还是 TensorFlow 都足够了。
仅用于认证:Coursera 或 Udacity
- Coursera 的 tensor flow in Practice
- tensor flow—uda city 简介
[## 获得 TensorFlow 开发者证书- TensorFlow
通过 TensorFlow 开发者证书脱颖而出展示您使用 TensorFlow 的熟练程度…
www.tensorflow.org](https://www.tensorflow.org/certificate)
每月 49 美元。Coursera。
探索软件开发人员用来构建可扩展的人工智能算法的工具…
www.coursera.org](https://www.coursera.org/specializations/tensorflow-in-practice?utm_source=gg&utm_medium=sem&utm_content=01-CatalogDSA-ML1-US&campaignid=9918777773&adgroupid=100491712477&device=c&keyword=&matchtype=b&network=g&devicemodel=&adpostion=&creativeid=432357975999&hide_mobile_promo&gclid=Cj0KCQjw0Mb3BRCaARIsAPSNGpWPXfJhc2jxl9lDZBKDZNXg9ryaHv0rGmoikUZUHgGZd3JRTWS3-y8aAp8_EALw_wcB)
Udacity 免费课程——类似 Coursera one。
免费课程由本课程是一个实用的方法,以深度学习的软件开发人员开始免费课程约…
www.udacity.com](https://www.udacity.com/course/intro-to-tensorflow-for-deep-learning–ud187)
Udacity — Github
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/tensorflow/examples/tree/master/courses/udacity_intro_to_tensorflow_for_deep_learning)
本书:
[## 使用 Scikit-Learn、Keras 和 TensorFlow 进行机器实践学习,第二版
通过最近的一系列突破,深度学习推动了整个机器学习领域。现在,甚至…
www.oreilly.com](https://www.oreilly.com/library/view/hands-on-machine-learning/9781492032632/)
其他来源:
Youtube 频道
欢迎来到官方 TensorFlow YouTube 频道。了解最新的 TensorFlow 新闻、教程和最佳…
www.youtube.com](https://www.youtube.com/channel/UC0rqucBdTuFTjJiefW5t-IQ)
皮查姆
谷歌可乐布
张量流基础
TensorFlow 2.0 备忘单
梯度下降一步一步解释:我最喜欢的一个
用谷歌 AI 学习。无论你是刚刚学习编码,还是经验丰富的机器学习实践者,你都会…
ai.google](https://ai.google/education/) [## 机器学习速成班|谷歌开发者
学习和应用基本的机器学习概念的速成课程,获得现实世界的经验与…
developers.google.com](https://developers.google.com/machine-learning/crash-course) [## 我如何通过 TensorFlow 开发人员认证考试
你也可以
towardsdatascience.com](/how-i-passed-the-tensorflow-developer-certification-exam-f5672a1eb641) [## Tensorflow 开发者证书考试的一些小技巧
如你所知,Tensorflow 团队开放了 Tensorflow 开发者证书,从我们的口袋里掏出 100 美元…
medium.com](https://medium.com/@yrc602/some-tips-for-tensorflow-developer-certificate-exam-9d7a7b4495ae) [## 查看 Google 的“Tensorflow 开发者认证”
关于认证你需要知道的一切
medium.com](https://medium.com/analytics-vidhya/reviewing-the-tensorflow-developer-certification-by-google-45e913152def)
AWS 机器学习专业
欢迎来到机器学习大学频道!我们的使命是让任何人都可以使用机器学习…
www.youtube.com](https://www.youtube.com/channel/UC12LqyqTQYbXatYS9AA7Nuw) [## AWS 认证机器学习专业 2020 -动手!
夏羽是一名解决方案架构师、顾问和软件开发人员,他对所有事物都有特殊的兴趣…
www.udemy.com](https://www.udemy.com/course/aws-machine-learning/) [## AWS 机器学习认证考试|2020 完整指南
机器和深度学习是目前最热门的技术领域!机器/深度学习技术被广泛…
www.udemy.com](https://www.udemy.com/course/amazon-web-services-machine-learning/) [## 云计算介绍免费课程| Udacity 免费课程
机器学习有望改变我们今天所知的几乎所有行业和客户体验。然而…
www.udacity.com](https://www.udacity.com/course/aws-machine-learning-foundations–ud090) [## AWS-样本/AWS-机器学习-大学-加速-标签
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/aws-samples/aws-machine-learning-university-accelerated-tab/tree/master/notebooks)
如有任何问题,请发电子邮件至 esenthil@hotmail.com 给我
一切顺利,同样,目标是学习 TensorFlow,而不是认证。
如果你喜欢这个帖子,就按一下鼓掌按钮,不要按一次😝
希望这篇帖子对你们有帮助。如果你想添加任何东西,请在评论区发表。感谢您阅读我的帖子:-)**
如何自学数据科学:实用指南
credit: https://1technation.com/lone-wolf-tactics-md-expo-success/
如果你曾经在家工作过,你就会知道这并不是大多数人想象的那种神奇、自由的体验。保持你的注意力和士气,让同事参与进来,并不像大多数人想象的那么容易。但幸运的是,在家工作的问题已经得到了很多关注:你可以找到大量专门针对这个问题的博客帖子和播客,其中有各种各样伟大的、可行的建议。
但是有一个密切相关的问题却没有得到那么多的关注,那就是在家学习的挑战。在家学习与在家工作非常不同,因为它是自我指导(你没有老板告诉你你必须学习什么),而且——特别是在数据科学领域——它是开放式的(你可以学习多少没有限制,所以很难知道什么时候停止)。
随着越来越多的 MOOCs、在线训练营和免费学习资源出现,这正成为一个越来越重要的问题,我将在这篇文章中讨论这个问题。
一些背景:我的公司开展了一个数据科学导师项目,该项目本着远程优先的理念设计,我们的大部分努力都是为了确保我们的学员不会感受到远程学习带来的痛苦。我希望我们学到的教训可能对其他人有所帮助,所以我在这里整理了它们。
常见问题及解决方法
问题:我正在失去注意力,我发现很难不分心。
解决方案:这是一个常见的问题,但实际上你可以做很多事情来避免分心,专注于任务。
→每次使用后注销社交媒体。这不会让你的使用量降到零,但是强迫自己每次使用 Twitter 或 Instagram 时都登录,会让你更加意识到自己是如何使用时间的。
→不要在家工作。相反,你可以尝试去咖啡店、公共图书馆或共同工作空间。明确区分你的“工作”空间和“家庭”空间可以帮助你追踪你实际花在项目和 MOOCs 上的时间,并在你这样做时进入一个更专注的心态。
→找个人一起工作。如果是另一个有抱负的数据科学家或开发人员,会有加分,但几乎任何人都可以。同意追踪彼此的目标以保持彼此诚实。注意:你的学习伙伴甚至不必亲自到场——开放式视频聊天也可以。
→阅读一些生产力黑客文献。像《原子习惯》这样的书和像《T2》这样的帖子都是很好的起点。
问题:我没有取得足够的进步,而且我也没有动力。
解决方案:你追求的时间表总是有可能不切实际,这是你应该考虑的第一种可能性(完成向数据科学的职业转型可能需要几个月甚至几年)。除此之外,保持正轨的关键是问责制。
→设定明确的学习目标。瞄准短期目标(“这是我今天想做的”),这可以更现实地确定范围。
→公开承诺你的目标。让你的 Twitter 关注者或 LinkedIn 联系人了解你的最新进展(如果你没有 Twitter 或 LinkedIn,请注册)。如果可以的话,联系一位行业专家,问问他们你是否可以通过每周简讯让他们了解你的最新工作。这是一个非常简单的方法,可以给自己一些额外的动力,确保你在每周的工作中有所表现,同时也是扩大你职业关系网的一个好方法。
→尝试设置您的项目,使其产生对您来说意义重大的成果。旨在将它部署为一个 Flask 应用程序,供您的朋友玩。计划把它写成一篇博文。为当地的聚会准备一个关于它的演讲。专注于产生具体的、有形的产出会是一个很大的动力。
问题:不知道什么时候继续前进。
解决方案:这在数据科学中是一个特别大的问题,因为项目通常是开放式的。对你的模型来说有多好才算足够好?您如何知道何时完成了数据探索步骤?你应该尝试另一种编码策略吗?
→最好的项目被设计成产品,有特定的目标受众和特定的使用案例。提前决定你在为谁构建你的项目,并把你的注意力放在构建对他们有用的东西上。带着这个目的去做你的数据探索:从探索你的数据中你能得到什么样的洞察力,这将导致一个更好的产品?
→提前确定你的成功标准(你想学什么,你的模型应该有多好,等等)。大多数行业项目都有明确的范围,您的项目也应该有。
→为您的项目设定时间框。在你开始工作之前,给自己设定一个明确的完成期限。这有一个额外的好处,那就是模拟您作为专业数据科学家将面临的时间限制和分类决策。
问题:不知道从何说起。
如果你刚刚起步,你需要做的第一件事就是找出你的兴趣所在。
→拿一个免费的 MOOC(这里可以找到一堆)。如果你刚刚开始,关注那些能让你建立 Python 技能的东西,那些能向你介绍 Jupyter 笔记本、scikit-learn 和 pandas 的东西。
→一旦你做到了这一点,问问自己:我想成为什么样的数据科学家?当然,你会想知道你有哪些选择,这就是为什么我写了这篇文章。
→对前方的道路有所了解。与经历过类似职业转变的人交谈,询问他们为实现这一转变做了些什么。我还建议查看这篇关于我见过的最常见的数据科学职业转变的帖子,因为你的情况很有可能在其中。
我已经看到这些事情中的每一件都为 SharpestMinds 学员带来了进步和生产力的显著提高。也就是说,要记住的一件重要事情是对自己要有耐心。
第一次尝试实施这个或那个策略时,您可能会失败,您可能仍然会落后于计划,并且您可能无法及时完成项目。没关系:关键是把你的旅程当成一次实验,并记录下哪些有效,哪些无效。就像任何好的机器学习模型一样,只要你不断迭代,你迟早会找到你的最优解。
如果你想联系,你可以在 Twitter 上找到我,地址是 @ jeremiecharris!
如何使用 Python 从 S3 的 pickle 文件加载数据
我不知道你怎么想,但我喜欢尽可能高效地钻研我的数据。从 S3 提取不同的文件格式是我每次都要查找的事情,所以这里我展示了如何将数据从存储在 S3 的 pickle 文件加载到我本地的 Jupyter 笔记本上。
This has got to be the ugliest picture I’ve ever used for one of my blogs. Thx Google Search and Print Screen!
一些注意事项:
- 永远不要硬编码您的凭证!如果你这样做了,一定不要把代码上传到仓库,尤其是 Github。有网络爬虫寻找意外上传的密钥,你的 AWS 帐户将被危及。相反,使用
boto3.Session().get_credentials()
- 在 python 的老版本中(Python 3 之前),你将使用一个名为
cPickle
的包而不是pickle
,正如这个 StackOverflow 所验证的。
维奥拉。而从那里看,data
应该是一个熊猫的数据帧。
我发现消除数据帧中字段和列名的空白很有帮助。我不确定这是一个 pickle 文件,还是针对我的数据。如果这个问题影响到你,下面是我使用的:
要消除列名中的空白:
col_list = []
for col in list(data.columns):
col_list.append(col.strip())data.columns = col_list
要消除数据中的空白:
data = data.applymap(lambda x: x.strip() if type(x)==str else x)
资源:
[## 凭证- Boto 3 文档 1.9.123 文档
boto3 中有两种类型的配置数据:凭证和非凭证。凭据包括以下项目……
boto3.amazonaws.com](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html)
如何加载 Matlab?Python 中的 mat 文件
Matlab 是学术界非常流行的科学计算平台。我在攻读工程学位的过程中一直在使用它,有可能你会遇到。大学发布的数据集的 mat 文件。
这是一个简短的帖子,解释了如何使用 python 加载这些文件,python 是当今最流行的机器学习语言。
数据
我想建立一个分类器来检测不同型号和品牌的汽车,所以斯坦福汽车数据集似乎是一个很好的起点。来自学术界,数据集的注释在。mat 格式。你可以在这里获得这篇文章中使用的文件。
正在加载。mat 文件
Scipy 是一个非常流行的用于科学计算的 python 库,很自然地,他们有一个方法可以让你读入。mat 文件。阅读它们绝对是最简单的部分。您可以用一行代码完成它:
from scipy.io import loadmat
annots = loadmat('cars_train_annos.mat')
嗯,真的就这么简单。但是让我们继续,实际上试着从这本字典中得到我们需要的数据。
格式化数据
loadmat 方法返回一个更熟悉的数据结构,一个 python 字典。如果我们看一下这些键,我们会发现与处理. mat 文件相比,我们现在感觉就像在家里一样:
annots.keys()
> dict_keys(['__header__', '__version__', '__globals__', 'annotations'])
查看这个数据集的文档,我们将了解它的真正构成。README.txt 为我们提供了以下信息:
This file gives documentation for the cars 196 dataset.
([http://ai.stanford.edu/~jkrause/cars/car_dataset.html](http://ai.stanford.edu/~jkrause/cars/car_dataset.html)) — — — — — — — — — — — — — — — — — — — —
Metadata/Annotations
— — — — — — — — — — — — — — — — — — — —
Descriptions of the files are as follows:-cars_meta.mat:
Contains a cell array of class names, one for each class.-cars_train_annos.mat:
Contains the variable ‘annotations’, which is a struct array of length
num_images and where each element has the fields:
bbox_x1: Min x-value of the bounding box, in pixels
bbox_x2: Max x-value of the bounding box, in pixels
bbox_y1: Min y-value of the bounding box, in pixels
bbox_y2: Max y-value of the bounding box, in pixels
class: Integral id of the class the image belongs to.
fname: Filename of the image within the folder of images.-cars_test_annos.mat:
Same format as ‘cars_train_annos.mat’, except the class is not provided. — — — — — — — — — — — — — — — — — — — —
Submission file format
— — — — — — — — — — — — — — — — — — — —
Files for submission should be .txt files with the class prediction for
image M on line M. Note that image M corresponds to the Mth annotation in
the provided annotation file. An example of a file in this format is
train_perfect_preds.txtIncluded in the devkit are a script for evaluating training accuracy,
eval_train.m. Usage is:(in MATLAB)
>> [accuracy, confusion_matrix] = eval_train(‘train_perfect_preds.txt’)If your training predictions work with this function then your testing
predictions should be good to go for the evaluation server, assuming
that they’re in the same format as your training predictions.
我们感兴趣的是’注解’变量,因为它包含了我们的类标签和边界框。它是一种结构,一种人们非常熟悉的数据类型,来自 C 或 java 风格的强类型语言。
稍微挖掘一下这个对象,我们就会发现一些有趣的东西:
type(annots[‘annotations’]),annots[‘annotations’].shape
>(numpy.ndarray, (1, 8144))type(annots['annotations'][0][0]),annots['annotations'][0][0].shape
>(numpy.void, ())
注释以 numpy.ndarray 格式存储,但是这个数组中项目的数据类型是 numpy.void ,numpy 似乎并不知道它们的形状。
loadmat 方法的文档页面告诉我们它如何将 matlab 结构加载到 numpy 结构化数组中。您可以使用键来访问结构的成员:
annots[‘annotations’][0][0][‘bbox_x1’], annots[‘annotations’][0][0][‘fname’]> (array([[39]], dtype=uint8), array(['00001.jpg'], dtype='<U9'))
现在我们知道了如何访问结构的成员,我们可以遍历所有的成员并将它们存储在一个列表中:
[item.flat[0] for item in annots[‘annotations’][0][0]]> [39, 116, 569, 375, 14, '00001.jpg']
这里,我们可以使用 flat 方法从数组中挤出值。
你好熊猫
现在我们知道了如何用 python 处理 matlab 文件,让我们把它转换成 pandas 数据框。我们可以使用列表列表轻松做到这一点:
data = [[row.flat[0] for row in line] for line in annots[‘annotations’][0]]columns = [‘bbox_x1’, ‘bbox_y1’, ‘bbox_x2’, ‘bbox_y2’, ‘class’, ‘fname’]
df_train = pd.DataFrame(data, columns=columns)
终于,熟悉的领地!
这个帖子的代码可以在这里找到。
如何用深度学习做披萨
当只给一张美味饭菜的图片时,深度神经网络能学会如何烹饪吗?麻省理工学院新的深度学习研究表明了这一点!
他们最近发布的题为 如何制作披萨:
学习基于成分层的 GAN 模型 的研究探索了 GAN 模型如何被训练以识别制作披萨所涉及的步骤。他们的 PizzaGAN 分为两部分:
(1)给定比萨饼的输入图像,PizzaGAN 被训练来预测比萨饼上有什么浇头
(2)给定比萨饼的输入图像,PizzaGAN 可以将一组有序的模型应用于该图像,其中每个模型从比萨饼中添加或移除浇头
比萨饼是由什么组成的?
在尝试训练深度神经网络制作披萨之前,我们首先需要弄清楚如何自己制作披萨。
像任何伟大的食谱一样,制作比萨饼的过程是由一系列有序的步骤组成的。你总是从面团、酱和奶酪开始,然后继续添加其他更冒险的配料。这种连续的过程反映在比萨饼在每一步的外观上——它的视觉外观随着每一种添加的浇头而变化。
How PizzaGAN defines a pizza — as a set of ordered steps.
一旦我们的目标过程被很好地定义,我们就可以开始训练一个实际的模型来近似这些步骤。
例如,我们从一个美味的意大利辣香肠披萨开始。然后我们的朋友走过来对我们说:“嘿,我们来加橄榄吧!”我们可以将从原始披萨到新披萨的过程建模为一系列步骤:
(1)认清我们的现状——意大利香肠比萨饼
(2)应用一个让我们达到目标状态的改变——加入橄榄
加入橄榄后,另一个朋友可能会说:“我不喜欢意大利香肠,我们用火腿吧!”这次我们有 3 个步骤:
(1)认清我们目前的状态——意大利香肠和橄榄披萨
(2)应用让我们更接近目标状态的第一个改变——去掉意大利香肠
(3)应用使我们达到目标状态的第二个变化——添加火腿
为了了解如何制作比萨饼,PizzaGAN 神经网络试图对所有这些步骤进行建模。
甘人是如何做披萨的
资料组
用于训练 PizzaGAN 的披萨数据集由 9213 幅图像组成,每幅图像显示一个披萨。每张图片都有一组相应的标签,描述比萨饼上的配料,不包括面团、调味汁和基础奶酪。例如,如果比萨饼图像上有火腿和蘑菇,则该图像的标签为:
["ham", "mushrooms"]
当执行训练时,输出分类是一次性编码的。因此,对于火腿和蘑菇比萨饼,输出向量的火腿和蘑菇元素被设置为 1.0,而其余元素被设置为 0.0。
生成器网络-添加和删除浇头
回想一下,我们希望能够将比萨饼的制作建模为一组连续的步骤。因此,无论训练什么样的网络,都必须能够一次执行一个步骤——添加一个浇头、移除一个浇头、烹饪比萨饼等等。
为此,训练一个生成器网络来模拟每个浇头的添加或去除。给定比萨饼的输入图像,生成器预测比萨饼的输出图像,就好像我们添加或删除了一种浇头。
由于一次为一个浇头训练发生器,并且仅用于添加或移除,所以训练多个发生器网络,每对不同的浇头组训练两个(每对中一个用于添加,一个用于移除)。下面显示了一对 PizzaGAN 发生器的示例,一个用于添加意大利香肠,一个用于移除意大利香肠。
An example of a pair of PizzaGAN generators — one to add pepperoni and one to remove it
奶酪披萨的整个分类向量为 0,而意大利辣香肠披萨的分类向量除了意大利辣香肠指数为 1.0 之外都是 0。由于 PizzaGAN 生成器的输入和输出图像之间的差总是只有一个顶点,因此输入和输出标签向量的分类向量元素之和的差也是 1。
鉴别器—识别比萨饼
PizzaGAN 生成器涵盖了所有添加和删除比萨浇头的操作。鉴别器将负责识别当前比萨饼上实际上的浇头。
给定比萨饼的输入图像,鉴别器网络预测一组多标签分类。输出向量的每个元素对应于一个特定的浇头。
例如,在下图中,PizzaGAN 鉴别器预测比萨饼的图像有意大利辣香肠、蘑菇和橄榄。对应于那些浇头的输出向量的元素被推断为 1.0(或者高于用户设置阈值的某个值)。
An example of how the discriminator of PizzaGAN works, predicting both the classification and the topping ordering of the pizza
GAN 模型通常通过一起执行生成器和鉴别器的训练来训练。鉴别器模型用发生器模型的一些输出来训练,鉴别器模型从其预测中的损失用于发生器模型的训练。
PizzaGAN 也遵循这一培训计划。除了预测比萨饼图像的标签,鉴别器还预测图像是真实的还是来自生成器。这有助于生成器创建看起来仍然像真正的比萨饼图像的图像,并具有所有正确的浇头。
最终比萨饼
通过鉴别器预测比萨饼上的浇头,并且生成器能够添加和删除浇头,PizzaGAN 能够以相当高的精度构建和分解比萨饼的图像。
PizzaGAN adding and removing toppings
PizzaGAN cooking and uncooking toppings
如果你想阅读更多关于 PizzaGAN 如何工作的细节,我建议查看发表在 CVPR 2019 的原始论文!
除此之外,我给你们留下这篇论文中的精彩引文:
披萨是 Instagram 上被拍照次数最多的食物,有超过 3800 万个帖子使用#披萨这个标签。
喜欢学习?
在推特上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上与我联系!
推荐阅读
想了解更多关于深度学习的知识?用 Python 进行 深度学习本书将教你如何用有史以来最简单的 Python 库进行真正的深度学习: Keras !
提醒一句,我支持这个博客,因为分享好书对每个人都有帮助。作为一名亚马逊员工,我从合格购买中获得收入。
如何让您的数据科学团队取得成功?
数据科学响彻每一个行业,已经到达主流媒体。只要我称之为人工智能,我就不再需要解释我以什么为生——我们是数据科学炒作的巅峰!
因此,越来越多的公司对数据科学寄予厚望,准备投资组建自己的团队。不幸的是,企业中数据科学的现实远非一个成功的故事。NewVantage 在 2019 年 1 月发布了一项调查,发现 77%的企业报告了业务适应方面的挑战。这就意味着所有的数据项目都积灰了,而不是提供投资回报。Gartner 一直对数据科学的成功持批评态度,最近他们并没有变得更加乐观:根据 Gartner 2019 年 1 月的报告,即使是分析见解也不会在 2022 年前带来业务成果,那么数据科学还有什么希望呢?很明显,由于某些原因让数据科学取得成功真的很难!
Me scaring Execs about their data science investments at the Data Leadership Summit, London 2019.
无论你是管理现有的数据科学团队,还是即将在大数据或人工智能领域开始一个新的绿地项目,承认不可避免的事情很重要:T2 炒作周期 T3。
Luc Galoppin, https://www.flickr.com/photos/lucgaloppin/
数据科学和人工智能的能见度越来越高,随之而来的是过高的期望。结合这些项目和团队目前的成功率,我们正朝着悬崖边缘和幻灭的低谷前进。
Christopher Conroy 在最近接受《信息时代》采访时完美地总结了这一点:围绕人工智能的新一轮炒作只是给人一种虚假的印象,即企业在大数据和数据科学方面取得了多年前的进步。我们是不是发现了一个更高的悬崖边缘?
谢天谢地,这不全是坏消息。一些团队、项目和企业确实是成功的(根据调查,大约 30%)。我们只需要对成功的要求有一个新的关注点。
The five pillars of data science success
第一个重要事实是,在数据科学领域,成功的公司并不只有一个优先事项或一件事情。
成功没有灵丹妙药或捷径!
数据科学的成功通常有五个更广泛的主题。一些主题得到了很好的理解和广泛的讨论,如文化的重要性。其他主题突出了一些误解,例如,这些误解导致低估了技术在留住数据科学团队中的重要性。技术的重要性是数据科学领域大多数成功公司都是科技公司的关键因素。这不仅仅是因为只有科技公司有办法解决技术需求,而是因为他们更好地理解了挑战及其合适的解决方案。但是不要绝望!幸运的是,随着云解决方案和 PaaS 的日益成熟,这可以在任何行业实现。
动机
数据科学在商业上取得成功的第一个优势是企业在第一时间组建团队的动机。动机决定了努力是成为一个虚荣的项目,还是与商业战略保持一致。
从我的经验来看,数据科学需要一个由愿景而不是短期目标驱动的企业。这是基于数据科学和数据创新的复杂性和时间表。数据科学仍然是创新的同义词,很难在短期目标优先级快速变化的情况下实现创新。关注数据科学以实现其愿景的公司也表现出对数据科学实际上是什么以及它如何增加价值的更好理解。
动机也将是任何文化或业务变革努力的好坏,这些努力伴随着业务向数据驱动的转变。
检验动机的一个很好的试金石是高层领导的认同。
准备工作和要求
然而,许多大数据和数据科学项目无论有多么好的意图都无法通过初步阶段,因为需求和基础根本不存在。
基础设施
围绕数据基础设施有明显的需求:任何数据团队都需要访问高质量的数据和合适的基础设施来处理这些数据。但是一个好的基础设施是什么样的呢?这取决于您的数据量和波动性,数据解决方案市场发展如此之快,以至于在我发表本文时,任何建议都已经过时了。但是有一个不变的事实
数据基础设施的试金石应该是多租户和生产试验能力。
A data lake without good multi-tenancy is a failed investment. (Pixabay)
随着数据量和易失性的增加,为数据维护单独的环境(如生产和开发环境)变得不可行或成本过高。你将不得不接受在生产中进行实验的数据科学要求。如果仅仅为了保证数据科学家的性能,就必须让他们尽可能远离生产数据存储和管道,那么你就没有好的多租户。多租户不同于可伸缩性,可伸缩性本身不是解决方案。无论您的数据基础架构有多大的容量或弹性,您的数据科学家最终都会全部使用它,并与您的任务关键型数据流程发生直接冲突。良好的多租户原生技术是经济高效且安全地共享数据和资源的唯一解决方案,具有 1)数据放置控制、2)工作放置控制、3)访问控制和 4)管理、审计和报告。
此外,您的基础架构需要一定程度的敏捷性。正如您将看到的,大多数数据科学项目(希望不是团队)都非常短暂,并且失败率很高。你根本不知道数据会把你带到哪里,也不知道在每个想法的结尾是否有一个可行的模型。为了保持生产力,您的基础设施需要敏捷性来支持失败率高的短期项目。
Fail early, fail fast, fail often to succeed.
团队和组织结构
The nature of the tree determines the nature of its fruit. (Manu Cornet)
团队和组织结构是重要的考虑因素。组织和组建团队有很多方法,但简单地改变人们的位置并不能解决很多问题。这种趋势指向由共同的目标或任务声明激励的跨职能项目团队。数据科学没有区别。特别是在拥有许多产品团队或业务部门的大公司中,集中的团队将难以与业务优先级保持一致,最终会被孤立。
但是将数据科学家放在跨职能团队中很容易将他们与同行隔离开来。这是一个问题,当它对文化产生影响,从而留住数据科学家。此外,将数据科学家与他们的同行隔离开来将会限制他们以创新方式解决问题以及克服挑战或障碍的能力。能够解决任何业务问题,同时又是多面手和完美专家的数据科学家仍然拥有独角兽地位。不太可能为每个班或业务单位找到一个。集中化的数据科学团队受益于更广泛的技能交叉,也更容易留住人才。
有一些有趣的新方法,例如运行公民数据科学计划,该计划依靠技术来克服分析和数据科学自助服务/授权战略中的技能差距。埃森哲发表了一篇关于分析和数据科学组织结构的广泛评论。
无论哪种结构适合您的业务,数据科学家都需要来自工程、数据架构、开发运维及产品等其他职能部门的支持。最后,这种支持是存在于跨职能团队内部,还是可以通过团队和部门之间的良好协作和强大的优先级划分来获得,对于数据科学的成功并不重要。
数据科学是一项团队运动!
雇用
不要被市场上越来越多的数据科学家误导了。数据科学仍然是一个创新主题,有经验的数据科学“独角兽”和以前一样少。为了吸引有经验的数据科学家,企业需要考虑的不仅仅是有竞争力的薪酬水平。组成成功的数据科学团队的人是由好奇心驱动的,他们喜欢玩新技术,并且受到企业可以为他们提供的机会和挑战的激励。
建立一个新团队伴随着一些明显的挑战:你从哪里寻找好的候选人,什么是合适的面试过程?还有一个“先有鸡还是先有蛋”的难题,即谁应该组建团队?理想情况下,一名经验丰富的高级数据科学经理,拥有一些实际操作经验,能够驾驭流行词汇并发现人才。
做好第一份工作很重要,合适的候选人会比其他人更愿意面试你。
你的试金石是在高层领导认同、激励、基础设施、业务变革流程、交付渠道和文化方面受到候选人的挑战。
在当前人才短缺的市场中,公司拥有良好的招聘流程至关重要。当人才短缺时,企业需要每时每刻都以闪电般的速度向中介和候选人提供反馈。候选人为王。如果候选人有不好的经历,这将对企业的声誉产生不利影响,最好的候选人会去别处。
如果你想在招聘过程中加入某种形式的测试或演示,那么就要准备好用同等的时间投资来回报应聘者的努力,仔细检查他们的申请并提供详细的反馈。最重要的是,让它与业务相关!远离在白板上用伪代码设置的考试。没有一个数据科学家必须在日常工作中像这样工作,也没有人期望他这样工作。
Technical interviews like this are still way too popular with hiring managers.
交付
One does not simply deploy data science models! More details in my article about Machine Learning Logistics.
交付是误解最多的话题:商业数据科学需要克服的科学问题比技术挑战要少得多。不幸的是,尽管模型的生产部署是商业数据科学中最艰难的挑战,但人们对数据准备挑战的关注是不必要的。数据科学团队要想在商业上取得成功,需要满足以下要求的交付渠道:
- 平行评估大量现有车型和挑战者车型
- 管理模型生命周期
- 处理日益增长的数据科学工具包的异构性
- 允许在不影响用户体验的情况下进行生产实验,并将业务目标与数据科学目标分离
- 将 SLA 和 GDPR 等企业需求从数据科学模型中分离出来
- 将其扩展到每分钟 50+k 页面负载的峰值,而无需雇佣大批 DevOps 工程师
如何构建一个前沿的数据科学平台来解决数据科学中的真正挑战:生产化。
towardsdatascience.com](/rendezvous-architecture-for-data-science-in-production-79c4d48f12b)
所有这些都是技术挑战,而不是科学问题。在我关于机器学习物流的文章中阅读一个叫做 Rendezvous Architecture 的解决方案。一个关键的优先事项是生产中模型生命周期管理的自动化或数据操作。依靠数据科学家来进行数据操作是错误的:这不是一个强大或可扩展的解决方案,它会让数据科学家感到沮丧,并很快导致他们离开。
成功的数据科学交付受益于强大的业务变革流程。业务的数据转换成为数据驱动将会引起重大变化。数据科学、创新和总体业务变革不应成为利益之争,而应成为定义明确、客观的变革管理流程。
John Kotter’s 8-Step Process for Leading Change, https://strategyumwelt.com/frameworks/kotters-8-step-process-for-leading-change
用户界面、UX 和设计
数据科学等同于生产中的实验即使是最好的模型,其好坏也取决于用户对其集成和执行的体验。模型永远不会是 100%正确的,UI 和 UX 必须考虑到这一点。举例来说,你的推荐引擎的不完美不应该导致用户不得不浏览它们的同样沮丧。当你对倾向评分采取行动时,例如针对追加销售,考虑到不确定性,干预的介入程度应该如何?根据我的经验,许多数据科学项目失败不是因为数学错误,而是因为 UX 不好。
保留
文化是最重要的保持工具,同时也具有超越保持的重要性。不仅仅是为了数据科学!
https://www.flickr.com/photos/doesliverpool/ (CC BY-SA 2.0)
数据科学文化不仅仅是公司津贴和福利待遇。任何人才都会被他们产生影响的工作所激励,但数据科学的业务适应可能会很慢,并导致挫折。与此同时,数据科学有一个强大的组织聚会、会议和黑客马拉松的社区。企业应该将此作为其文化投资的一部分。为什么不举办一次见面会或午餐学习会,为您的数据科学家提供一个展示他们工作的平台,并提高他们在企业中的知名度呢?为什么不组织一次黑客马拉松呢?重要的是要记住,文化不是一夜之间创造出来的,也不是一次性的考虑。如果你没有策略来跟进你的黑客马拉松,然后把有希望的想法放到待办事项中,那将会适得其反。你不希望你的黑客马拉松进一步凸显业务适应的无能。
Living breathing data science: me and my team at meet-ups, conferences and hackathons
如果我们有时间研究一些自己的想法并展示……的创新潜力,那不是很好吗
towardsdatascience.com](/organising-the-zoopla-hack-days-6d7f25e4e763)
对于数据科学来说,更独特的是,技术在留住人才方面发挥着重要作用。
可扩展的交付渠道和快乐的数据科学家之间有着重要的联系。
数据科学家的动机是开发新模型来解决相关的业务问题,而不是模型在生产中的日常运营责任。这意味着,数据基础设施、数据科学平台、自动化和数据运营不仅对于业务成果的交付,而且对于团队的长期保留都是至关重要的问题。在一个超过 75%的团队未能做到这一点的市场中,任何将模型端到端交付到生产中的数据科学家都变得非常有价值。对生产中的模型进行日常维护和监控并不是留住人才的好方法。很快,您会发现自己的产品中有一个无人维护的模型,这个模型正在漂移,没有人知道这个模型最初是如何工作的。
交付、技术和保留都与数据科学的长期成功紧密相关。
最后但同样重要的是:你需要为你的数据科学家制定一个职业发展战略!目前,太多的数据科学家为了获得职业发展或寻找新的令人兴奋的挑战而跳槽。一方面,这包括支持和认可作为职业框架一部分的不断变化的领域中的学习和发展需求。另一方面,数据科学仍然是一个新兴的业务领域,目前还不太符合业务。你的职业框架需要灵活性来适应这一点。
你能否留住人才的试金石是数据科学家的工作时间是否超过通常的 12-18 个月。
Jan 是公司数据转型方面的成功思想领袖和顾问,拥有将数据科学大规模应用于商业生产的记录。他最近被 dataIQ 评为英国 100 位最具影响力的数据和分析从业者之一。
在 LinkedIn 上连接:https://www.linkedin.com/in/janteichmann/
阅读其他文章:https://medium.com/@jan.teichmann
如何让车辆自动驾驶
自动驾驶汽车的关键方面
Source: Machine Design
当想到自动驾驶汽车时,我们会想到一种无需人工干预就能把我们从起点带到终点的汽车。
SAE 国际(汽车工程师学会)已经定义了各种级别的自治。从 0 级(日常使用的多功能车)到 5 级(不需要人工干预的车辆)。目前,我们距离第 5 级自动化还很远,因为有许多情况下自动驾驶汽车不擅长处理。但是,如果工业界和学术界保持良好的工作,我们可能会早于晚。一旦我们到达那里,我们的车辆将没有方向盘。
本文将阐述使车辆实现自主驾驶的使能技术,以及如何将这些技术集成在一起,使汽车/卡车/SUV 能够自主地在街道上行驶。
首先,让我们想象我们有一辆汽车,我们希望让我们的汽车自动驾驶。这辆车成为自动驾驶需要三个主要元素,即高清地图(HDMap);状态和地理位置估计器;和一个动作经理。在我们开始解决自动驾驶汽车的这些关键问题之前,我们需要解决一些背景概念,例如自动驾驶汽车中使用的传感器。
自动驾驶汽车使用的传感器:
以下是自动驾驶汽车中使用的一些传感器:
LIDAR :代表光探测和测距,是一种遥感方法,使用脉冲激光形式的光来测量到地球的距离(可变距离)。这项技术用于扫描道路和建筑物。通过激光雷达扫描,我们可以生成一个云点(字面意思是一个点的数据集),它可以被加载并用于表示现实世界。
Lidar Sensor Velodyne HDL-64E — Source: news.voyage.auto
LIDAR EXAMPLE — Source: news.voyagae.auto
*雷达:*是一种利用无线电波来确定物体的距离、角度或速度的探测系统(详见此处)。雷达是我们在自动驾驶汽车中可以拥有的最简单的传感器之一,它们到达的距离很短,但与激光雷达相比,它们相对便宜。目前,许多车辆已经使用雷达技术来防止停车时的碰撞。
GPS: 简单来说我们都知道 GPS 是什么意思。当你使用智能手机时,你可能需要在地球上定位自己;你激活你的全球定位系统,突然你可以谷歌地图或任何其他地理定位相关的功能。如果你需要一个官方定义,这里是这样的:全球定位系统 ( GPS ),是一个基于卫星的无线电导航系统,由美国政府所有,由美国空军运营。它是一个全球导航卫星系统(GNSS ),向地球上或附近任何地方的 GPS 接收器提供地理位置和时间信息,在那里可以畅通无阻地看到四个或更多 GPS 卫星(点击了解更多信息)。
*摄像头:*摄像头是自动驾驶汽车中的重要传感器。这使他们能够识别现实世界中的物体和人。这都要归功于近年来计算机视觉的进步。得益于机器学习技术的最新发展,特别是卷积神经网络,自动驾驶汽车可以使用摄像头进行物体检测和物体识别。
Driverless Car computer stock footage — Source: electrek.co
第一个关键点:高清地图
汽车需要的第一件事是能够检测它在世界上的位置。为了做到这一点,自动车辆需要有一个高清地图(高清地图),其中包括大量关于道路和周围环境的数据。构建高清地图需要大量的工作。有些公司的唯一目的是创建和更新高清地图。
激光雷达扫描路面,计算机视觉分析提取道路信号和创建车道对象。创建高密度贴图时需要这些和更多的步骤。自动车辆必须始终知道它们位于哪个车道,并且路线必须包括所有必要的车道变换。一个重要的库被广泛用于此:LANENET。定义 lanenets 的研究论文可以在这里找到。
Sample of HDMap. Source: TechCrunch
第二个关键点:状态估计器
其次,汽车需要一个状态估计器。状态估计器将协调来自自主车辆中所有传感器的输入,并在 HDMap 内创建保持车辆最新的地理位置。它将接收来自车辆各种不同部分的输入。
不同的情况可能需要不同的传感器。例如,如果车辆在建筑物内,GPS 信号可能不可靠,并且状态估计器可能不得不依赖于其他传感器,例如激光雷达、雷达和轮胎的运动来更新车辆的地理位置。与此同时,在高速公路(英国的高速公路)上,一辆卡车可能位于车辆前方,阻碍了激光雷达传感器感知车辆前方的整个世界。在这种情况下,我们的自动驾驶汽车将会失明。但有了可靠的高清地图和 GPS 信号,我们的车辆可以很好地了解前方的情况(下一个路口或出口是什么时候)。
最终,状态估计器将接收并组合来自自主车辆内多个传感器的数据。并非所有传感器都以相同的速率发送数据。激光雷达系统可以每毫秒提供许多脉动,而 GPS 需要更长时间来更新。状态估计器应该协调这些信息。
第三关键环节:运动规划
运动规划器是自主车中负责运动的部分。如果我们打算将自动驾驶汽车从 A 点移动到 B 点,第一个选项可能是前进(或倒车,或转弯)。运动规划者负责确定车辆到达目的地所需的动作。从状态估计器中,车辆可以知道何时有障碍物阻挡了车辆的路线,然后运动规划器应该要求紧急停止。当车辆需要换道时,运动规划器将调用换道操作。运动规划器是一个大型算法数据集,它基于车辆的路线进行操作。
结论
在自主车辆的开发中,有更多的类和算法需要考虑,希望这篇文章为您指明了正确的方向。
如果你希望开始从事这一领域的工作,你需要掌握一些工具或特定的知识,例如编程技能(Matlab/Python/C++)、深度学习(计算机视觉)、地理信息系统(GIS,这将有助于构建高清地图)、建模和模拟的概念等等。无论你的背景是什么,我希望这篇文章对你有所帮助。
制作自动编码器
使用 Keras 和 MNIST 培训
了解自动编码器:
Image of Autoencoder Architecture created by Arvin Singh Kushwaha
自动编码器是一类无监督网络,由两个主要网络组成:编码器和解码器。
无监督网络是在没有任何训练标签的情况下从数据中学习模式的网络。网络在没有被告知模式应该是什么的情况下在数据中找到它的模式。
相反,有监督网络,其中当给定特定输入时,网络被训练以返回特定输出。
编码器通常使用一系列密集和/或卷积层将图像编码成以紧凑形式表示图像的固定长度向量,而解码器使用密集和/或卷积层将潜在表示向量转换回相同的图像或另一个修改的图像。
上图显示了一个简单的自动编码器的例子。在这个自动编码器中,您可以看到大小为 X 的输入被压缩成大小为 Z 的潜在向量,然后被解压缩成大小为 X 的相同图像。
为了生成图像,给解码器网络一个随机输入向量。解码器网络将把输入向量转换成完整的图像。
创建自动编码器:
我推荐使用 Google Colab 来运行和训练 Autoencoder 模型。
安装 Tensorflow 2.0
#If you have a GPU that supports CUDA
$ pip3 install tensorflow-gpu==2.0.0b1#Otherwise
$ pip3 install tensorflow==2.0.0b1
Tensorflow 2.0 内置了 Keras 作为其高级 API。Keras 可通过此导入进行访问:
import tensorflow.keras as keras
导入必要的模块/包
from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Dense, Input, Flatten,\
Reshape, LeakyReLU as LR,\
Activation, Dropout
from tensorflow.keras.models import Model, Sequential
from matplotlib import pyplot as plt
from IPython import display # If using IPython, Colab or Jupyter
import numpy as np
正在加载 MNIST 数据
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train/255.0
x_test = x_test/255.0
MNIST 数据集由 70000 个 28 像素乘 28 像素的手写数字图像和 70000 个包含每个数字是哪个数字的信息的向量组成。
图像训练数据从[0,255]缩放到[0,1],以允许使用 sigmoid 激活函数。
Data from x_train[0]
为了检查我们的数据,我们将绘制训练数据集中的第一幅图像。
# Plot image data from x_train
plt.imshow(x_train[0], cmap = "gray")
plt.show()
决定潜在规模
潜在大小是潜在空间的大小:压缩后保存信息的向量。该值是一个至关重要的超参数。如果该值太小,将没有足够的数据用于重建,如果该值太大,可能会发生过度拟合。
我发现一个好的、成功的潜在大小是 32 个值长。
LATENT_SIZE = 32
创建编码器
encoder = Sequential([
Flatten(input_shape = (28, 28)),
Dense(512),
LR(),
Dropout(0.5),
Dense(256),
LR(),
Dropout(0.5),
Dense(128),
LR(),
Dropout(0.5),
Dense(64),
LR(),
Dropout(0.5),
Dense(LATENT_SIZE),
LR()
])
编码器由一系列致密层和间隙漏失层和泄漏层组成。密集层允许将 28×28 的输入张量压缩到大小为 32 的潜在向量。下降层有助于防止过拟合和泄漏。作为激活层,下降层会在混合中引入非线性。Dense(LATENT_SIZE)
创建大小为 32 的最终矢量。
创建解码器
decoder = Sequential([
Dense(64, input_shape = (LATENT_SIZE,)),
LR(),
Dropout(0.5),
Dense(128),
LR(),
Dropout(0.5),
Dense(256),
LR(),
Dropout(0.5),
Dense(512),
LR(),
Dropout(0.5),
Dense(784),
Activation("sigmoid"),
Reshape((28, 28))
])
解码器本质上与编码器相同,但方向相反。然而,最终的激活层是 s 形的。sigmoid 激活函数输出范围为[0,1]的值,这与我们的缩放图像数据完全吻合。
Sigmoid Function
创建完整的模型
要创建完整的模型,必须使用 Keras 功能 API。函数式 API 允许我们将多个模型串在一起。
img = Input(shape = (28, 28))
这将创建一个占位张量,我们可以将它输入到每个网络中,以获得整个模型的输出。
latent_vector = encoder(img)
output = decoder(latent_vector)
Keras Functional API 最好的部分是它的可读性。Keras Functional API 允许您将模型直接调用到张量上,并从该张量获得输出。通过将encoder
模型调用到img
张量上,我得到了latent_vector
。同样的事情也可以在latent_vector
上用decoder
模型来完成,这给了我们输出。
model = Model(inputs = img, outputs = output)
model.compile("nadam", loss = "binary_crossentropy")
要创建模型本身,可以使用 model 类并定义模型的输入和输出。
要训练一个模型,你必须编译它。为了编译一个模型,你必须选择一个优化器和一个损失函数。对于优化器,我选择了 Nadam,这是应用于自适应矩估计的内斯特罗夫加速梯度。这是一个改进的 Adam 优化器。对于损失,我选择了二元交叉熵。二进制交叉熵通常用于自动编码器。然而,通常二元交叉熵与二元分类器一起使用。此外,二进制交叉熵只能在[0,1]范围内的输出值之间使用。
训练模型
EPOCHS = 60
值EPOCHS
是一个设置为 60 的超参数。一般来说,时期越多越好,至少在模型稳定下来之前是这样。
#Only do plotting if you have IPython, Jupyter, or using Colab
只有在使用 IPython、Jupyter 或 Colab 时,才建议重复绘图,以便 matplotlib 绘图是内联的,而不是重复创建单个绘图。
for epoch in range(EPOCHS):
fig, axs = plt.subplots(4, 4)
rand = x_test[np.random.randint(0, 10000, 16)].reshape((4, 4, 1, 28, 28))
display.clear_output() # If you imported display from IPython
for i in range(4):
for j in range(4):
axs[i, j].imshow(model.predict(rand[i, j])[0], cmap = "gray")
axs[i, j].axis("off")
plt.subplots_adjust(wspace = 0, hspace = 0)
plt.show()
print("-----------", "EPOCH", epoch, "-----------")
model.fit(x_train, x_train)
首先,我们创建具有 4 行 4 列子曲线的曲线,并选择 16 个随机测试数据图像来检查网络的性能。
接下来,我们清空屏幕(仅适用于 IPython、Jupyter 和 Colab ),并在随机测试图像上绘制模型预测。
最后,我们训练模型。为了训练模型,我们简单地在训练图像数据上调用model.fit
。还记得 autoencoder 的目标是如何获取输入数据,压缩它,解压缩它,然后输出输入数据的副本吗?这意味着输入和目标输出都是训练图像数据。
如你所见,这些生成的图像非常好。然而,这些图像最大的问题是模糊不清。这些问题中的许多可以用其他类型的生成网络或者甚至其他类型的自动编码器来修复。
完整代码
from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Dense, Input, Flatten,\
Reshape, LeakyReLU as LR,\
Activation, Dropout
from tensorflow.keras.models import Model, Sequential
from matplotlib import pyplot as plt
from IPython import display # If using IPython, Colab or Jupyter
import numpy as np(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train/255.0
x_test = x_test/255.0# Plot image data from x_train
plt.imshow(x_train[0], cmap = "gray")
plt.show()LATENT_SIZE = 32encoder = Sequential([
Flatten(input_shape = (28, 28)),
Dense(512),
LR(),
Dropout(0.5),
Dense(256),
LR(),
Dropout(0.5),
Dense(128),
LR(),
Dropout(0.5),
Dense(64),
LR(),
Dropout(0.5),
Dense(LATENT_SIZE),
LR()
])decoder = Sequential([
Dense(64, input_shape = (LATENT_SIZE,)),
LR(),
Dropout(0.5),
Dense(128),
LR(),
Dropout(0.5),
Dense(256),
LR(),
Dropout(0.5),
Dense(512),
LR(),
Dropout(0.5),
Dense(784),
Activation("sigmoid"),
Reshape((28, 28))
])img = Input(shape = (28, 28))
latent_vector = encoder(img)
output = decoder(latent_vector)model = Model(inputs = img, outputs = output)
model.compile("nadam", loss = "binary_crossentropy")EPOCHS = 60#Only do plotting if you have IPython, Jupyter, or using Colabfor epoch in range(EPOCHS):
fig, axs = plt.subplots(4, 4)
rand = x_test[np.random.randint(0, 10000, 16)].reshape((4, 4, 1, 28, 28))
display.clear_output() # If you imported display from IPython
for i in range(4):
for j in range(4):
axs[i, j].imshow(model.predict(rand[i, j])[0], cmap = "gray")
axs[i, j].axis("off")
plt.subplots_adjust(wspace = 0, hspace = 0)
plt.show()
print("-----------", "EPOCH", epoch, "-----------")
model.fit(x_train, x_train)
这段代码的 Google Colab 可以在这里找到。
经过 60 个纪元的训练,我得到了这个图像:
Generated Image after 60 epochs
如你所见,结果相当不错。自动编码器成功地编码和解码了潜在的空间矢量,质量相当好。这种自动编码器是“普通的”类型,但是其他类型的自动编码器,如变型自动编码器,有更好的图像质量。此外,通过增加历元的数量,可以进一步改善结果。
自动编码器的用途
简单地说,自动编码器学习如何在没有监督的情况下有效地压缩和解压缩数据。这意味着自动编码器可以用于降维。自动编码器的解码器部分也可以用于从噪声矢量生成图像。
自动编码器网络的实际应用包括:
- 去噪
- 图像重建
- 图象生成
- 数据压缩和解压缩