TowardsDataScience-博客中文翻译-2019-二-
TowardsDataScience 博客中文翻译 2019(二)
原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
使用 Python Matplotlib 可视化行为的 4 个技巧,以及简单的教程
原文:https://towardsdatascience.com/4-tips-to-visualize-behavior-with-python-matplotlib-follow-by-easy-tutorial-dc11f35b5b10?source=collection_archive---------23-----------------------
处理不同动作事件和多次发生的事件的提示
为什么要可视化客户行为?
我目前在 Unbounce 工作,担任数据分析师。Unbounce 是一个基于订阅的工具,帮助营销人员建立和优化登录页面,以获得高转化率。像任何其他基于订阅的公司一样,我们希望减少客户流失,吸引客户停留更长时间。其中很大一部分是了解哪些行为与更长的客户保持率相关,为什么会这样,以及我们如何培养这些行为。
虽然我们可以使用许多统计方法来检查客户行为趋势,但我发现将一些客户的行为可视化(并与面向客户的团队讨论)以形成稍后可以验证的假设是有帮助的。
数据
在本教程中,我们将使用包含 4 个帐户的事件和订阅信息的示例数据。不包含任何个人信息,并且帐户的唯一标识已被更改以确保安全。
客户行为数据通常包括日期和时间事件,即客户执行特定操作的时刻。在本教程中,我们将研究帐户重新发布(republished_df
)和登录(login_df
)的事件。
我们也有每个客户的订阅信息(subscription_info_df
)。一个客户可以有多个订阅,但每个订阅都是互斥的。客户的新订阅只有在他/她翻炒(意味着停止支付)然后重新订阅时才开始。我们称这个人为活板。
加载和转换
republished_df = pd.read_csv(filepath)
login_df = pd.read_csv(filepath)
subscription_info_df = pd.read_csv(filepath)
在进行可视化之前,我们需要将日期列转换为日期-时间格式。现在,Python 认为它们是一串字符串。因此,日期将不会及时安排。
republished_df['action_date'] = pd.to_datetime(republished_df['action_date'])login_df['action_date'] = pd.to_datetime(login_df['action_date'])subscription_info_df['subscription_starts_at'] = pd.to_datetime(subscription_info_df['subscription_starts_at'])subscription_info_df['subscription_ends_at'] = pd.to_datetime(subscription_info_df['subscription_ends_at'])
让我们为本教程获取一个帐户的样本数据。
sample_subscription = subscription_info_df[subscription_info_df['AccountCode'] == 'a']sample_republished = republished_df[republished_df['AccountCode'] == 'a']sample_login = login_df[login_df['AccountCode'] == 'a']
*# This is a constant for visualization purpose*
sample_subscription['vizline'] = 0.5
sample_republished['vizline'] = 0.5
sample_login['vizline'] = 0.5
提示 1:这个账户是当天活动账户吗?让我们混合一些颜色
当我们需要想象不同的事件只发生一次,但它们可能在同一天发生时,这个技巧很方便。
像任何一家基于订阅的公司一样,Unbounce 希望吸引那些订阅、流失然后在某个时间点回来的用户。有些情况下,客户流失和重新订阅发生在同一天。为了区分同一天的时髦女郎,我们可以使用这种混色技巧。
注意:我们在这里假设每个订阅都是互斥的。
如果我们用不同于subscription end date
的颜色来显示subscription start date
,并使用一些不透明度,我们将为同一天的美眉提供不同的颜色。
比如这里我选择蓝色为subscription start date
,选择红色为subscription end date
,通过alpha = 0.5
( alpha
范围从 0 到 1)改变不透明度。这导致洋红色用于当天的时髦女郎。
你可以通过这篇文章了解更多关于混色的基础知识。
下面是 Matplotlib 中颜色代码的列表。
fig, ax = plt.subplots(figsize=(20, 5))ax.plot(sample_subscription['subscription_starts_at'], sample_subscription['vizline'],
marker='|', linewidth = 0.1,
markersize=50, mew=2, alpha=0.5,
color='royalblue', label='Subscription Starts')no_expire_mask = ~sample_subscription['subscription_ends_at'].isnull()ax.plot(sample_subscription[no_expire_mask]['subscription_ends_at'], sample_subscription[no_expire_mask]['vizline'],
linewidth = 0.1, marker='|',
markersize=50, mew=2, alpha=0.5,
color='crimson', label='Subscription Ends')ax.legend(loc='upper left', ncol=2)
ax.set_title("Customer Behavior")*# Remove y-axis ticks as we don't need it*
ax.get_yaxis().set_visible(**False**)
从上面的图表中,我们知道这个帐户有 4 个订阅。在最后一次订阅中,他/她是当天活动的参与者。第三个订阅结束时,最后一个订阅开始,因此我们在这里看到的是洋红色,而不是蓝色或红色。
除了颜色和 alpha,在axes.plot()
函数中还有更多参数,你可以根据你想要如何设计你的图表来调整,比如标记类型和标记大小(我们将在下一篇技巧文章中对marker
进行更详细的讨论)。
点击阅读关于这些参数的更多信息。
技巧 2:每个动作的频率和强度是多少?让我们使用不同的形状和不透明度
当我们需要想象在同一天可能发生多次的不同事件时,这个小技巧很方便。
因为 Unbounce 是一个帮助营销人员发布和优化其登录页面的工具,所以我们关心重新发布事件。我们想了解:
- 与登录该工具相比,客户重新发布页面的频率如何?
- 客户每次登录重新发布多少/密集?
为了帮助回答这些问题,我们需要在同一个图表上绘制登录和重新发布。这有两个问题:
- 客户可以在同一天登录并重新发布
- 客户可以在同一天多次执行这些操作
而要解决这些问题,我们可以在axes.plot()
函数中使用不同的形状(通过marker
)和不透明度(通过alpha
)。有许多标记类型,但是这里我使用圆圈用于登录,使用三角形用于重新发布。你可以在这里了解其他类型:https://matplotlib . org/3 . 1 . 1/API/markers _ API . html # module-matplotlib . markers。
ax.plot(sample_login['action_date'],
sample_login['vizline'],
marker='o', markersize=11,
alpha=0.3, color='darkseagreen',
linewidth=0.1, label='Login')ax.plot(sample_republished['action_date'],
sample_republished['vizline'],
marker='^', markersize=8,
alpha=0.5, color='teal',
linewidth=0.1, label='Republish')
从上面的图表中,我们可以回答两个行为问题:
- 与登录该工具相比,客户重新发布页面的频率如何? —在第一次订阅期间,该客户几乎每 2 周登录并重新发布一次,但在随后的订阅中,这一频率有所降低。有时他们登录时没有重新发布页面。
- 与登录该工具相比,客户重新发布页面的频率如何? —在所有订阅期间,该帐户在登录时往往会多次重新发布,因此我们会看到深色的三角形。这表明他们可能会在每次修改页面预览时重新发布。
技巧 3:这个账户的行为与另一个相比如何?让我们确定我们看的是同一个尺度
当你想比较一个实体和另一个实体时,这个提示特别方便。
如果我们只调查一个客户,我们不知道这个客户是否是一个高度参与的客户,或者这种行为是否是我们所有客户群的规范。为了弄清楚这一点,我们可以从最简单的技术开始:随机挑选一些客户,手动比较他们的行为。
为了进行更合理的比较,我们希望确保图表使用相同的刻度。有些客户会在年初开始订阅,而有些客户会在年中或年底开始订阅。在这种情况下,我想限制我的图表显示从 1 月 1 日到 12 月 31 日的日期范围。为此我们可以使用axes.set_xlim()
函数。
点击阅读更多关于axes.set_xlim()
的内容。
*# Limit date range*
datemin = pd.to_datetime('2019/01/01').date()
datemax = pd.to_datetime('2019/12/31').date()
ax.set_xlim(datemin, datemax)
*# Format date*
date_form = mdates.DateFormatter("%Y/%m/%d")
ax.xaxis.set_major_formatter(date_form)*# Ensure ticks fall once every other week (interval=2)*
ax.xaxis.set_major_locator(mdates.WeekdayLocator(interval=2))
ax.xaxis.set_tick_params(rotation=40)
技巧 4:让它可重复
我是受大卫·罗宾逊启发的三原则的忠实粉丝。
当你已经写了 3 次相同的代码时,写一个函数
由于我们要在数据集中可视化 4 个客户的行为(显然不止 3 个),我想写一个函数。我喜欢函数,因为我们可以对可视化效果进行系统化的修改,并节省大量时间将这些修改复制粘贴到每个图表上。
我们的第一个功能是获取一个帐户的数据。
我们的第二个功能是可视化帐户的行为。注意,我在第二个函数中使用了第一个函数。
我们来试试吧!
_ = _visualize_customer_behavior('b')
以下是我们刚刚在本教程中浏览过的所有内容的完整代码:
[## hadin 1306/博客帖子
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/hadinh1306/blog-posts/blob/master/tutorials/Visualize_Customer_Behavior.ipynb)
更多关于数据分析和工作生活平衡的文章,可以查看我的 博客 。让我们也 连接 并保持我们的数据(对话)流动!
在 NLP 上你需要知道的 4 个技巧——来自 Twitter 数据科学家
原文:https://towardsdatascience.com/4-tips-you-need-to-know-on-nlp-from-a-twitter-data-scientist-635206c817e9?source=collection_archive---------14-----------------------
独家 TDS 采访
独家关注 Twitter 的 NLP 项目、采访流程和数据科学工具——TDS 采访。
面试官:TowardsDataScience.com 项目负责人 Haebichan Jung 。
受访者: 阿方索·博尼拉,Twitter(健康)的数据科学家,之前是沃尔玛实验室的数据科学家——华盛顿大学计算语言学硕士。
你能描述一下你的专业背景吗?
我叫阿方索·博尼拉。我是一名计算语言学家,目前在 Twitter 担任数据科学家。到底什么是计算语言学家?计算语言学是语言学的一个分支,它使用计算方法来解决语言问题。在过去的几年里,我对语言空间中机器学习模型(特别是深度学习模型)的可解释性越来越感兴趣——尤其是当涉及到面向消费者的产品时。虽然非常有效,但结果和模型本身很难被人类(尤其是用户)解释,并且可能不一定与语言的某些方面相关联——词类、语义或语法结构,等等。我特别感兴趣的是嵌入空格,它与语言概念的关系,以及偏见是如何产生的(我在下面写了一点!)。
[## 人工智能可能是性别歧视者、阶级歧视者和种族主义者。
有一张图片展示了从土耳其语到英语的翻译。土耳其语是中性的…
medium.com](https://medium.com/@fonzbonz/ai-can-be-sexist-classist-and-racist-3c2c83712a4)
你现在在 Twitter 的哪个团队工作,你专注于哪些项目?你能详细告诉我们这些团队是如何划分的吗?
我是一名数据科学家,支持 Twitter 的工作,我们称之为平台的健康,我们努力确保平台上的每个人都感到安全,并与可信的信息互动。
健康只是 Twitter 数据科学的一个领域。Twitter 的数据科学跨越不同的产品层面。产品表面是指用户可以与平台交互的不同地方。其中一些领域包括家庭时间表、搜索和入职培训。
Twitter 的招聘流程是怎样的?这个过程与你申请沃尔玛实验室(你以前的公司)的过程不同吗?
我在 Twitter 招聘过程中的经历非常积极。与一名招聘人员进行了第一次电话交谈。我们谈到了我为什么对 Twitter 感兴趣,并就这个角色进行了一些讨论。后来有了技术屏,有了结对编码。我喜欢这次编码采访的原因是,它并没有给我一个千篇一律的编码问题,而是真正关注于为真实世界的应用程序编码。最后一步是现场面试。现场面试包括 4 次面试和午餐休息。每次采访都简短而甜蜜,集中在关键概念上,而且有趣。尽管压力很大,面试官还是测试了他们的创造力,并真正关注问题的解决。在那之后,提供服务的速度非常快!在整个招聘过程中,每个人都非常细心,风度翩翩。
沃尔玛的招聘流程也非常相似。我要和招聘人员进行电话交谈,然后是配对编码的技术筛选,还有 4 次现场面试和午餐。两次面试都测试技术概念,如统计和编码,以及沟通、解决问题和其他对数据科学至关重要的软技能。
你使用 Twitter 的常用工具有哪些?
在我的日常生活中,我通常使用 Python 和 SQL。我发现自己在使用常用的库和工具,如 Jupyter、Sci-Kit Learns、Numpy 和 Pandas,以及 NLP 专用库,如 NLTK、SpaCy 和 Gensim。此外,Twitter 还开发了一个大数据工具,叫做 burning。burning 是一个 Scala 库,可以轻松指定 Hadoop MapReduce 作业。你可以在下面找到更多关于它的信息。
[## 滚烫的
burning 是一个 Scala 库,可以轻松指定 Hadoop MapReduce 作业。滚烫建立在层叠之上…
twitter.github.io](https://twitter.github.io/scalding/)
你目前是一名 NLP 数据科学家。但你也是受过正规训练的计算语言学家。你能告诉我们这两个学科之间的异同吗?
(提示 1)这两者高度相关,它们之间的界限非常模糊。计算语言学,以及更一般的语言学,致力于理解不同层次和不同语境下的人类语言。另一方面,自然语言处理(NLP)和计算机科学侧重于计算机系统和软件的实现。我认为计算语言学(CL)使用计算方法来理解语言,而自然语言处理(NLP)专注于开发程序和算法来解决基于语言的问题。两者都是高度跨学科的,相互影响,尤其是在技术方面。
它们之间的主要区别是它们的潜在焦点和每个领域旨在解决的问题类型。一个很好的例子是每个字段如何看待解析。
解析到底是什么?解析是根据一组规则(正式语法)将一串符号分析成逻辑句法成分的过程。围绕解析的主要计算语言学问题围绕着形式语法。另一方面,大多数 NLP 问题更关心解析中使用的算法。两者都旨在改进解析,但关注问题的不同但高度相关的部分。
这些相似和不同之处在你的日常工作中是如何体现的?
(提示 2)当谈到我的工作时,主要的区别出现在我要回答的问题中。在我的工作中,很多与实现相关的问题更倾向于 NLP,而与用户相关的问题更倾向于 CL。
与实现相关的问题的一个很好的例子是“我如何按照主题有效地聚集推文?”。主题聚类是一种特定类型的聚类,其中推文或更一般的文档按主题分组在一起。常用的技术有 LDA 、 K-means 、 Doc2Vec 。在分析推文时,对我们来说,系统地、一致地将推文分组是很关键的。对于常用的技术,这可能具有挑战性,因为 Tweets 由用户、文本和网络组成(都是不分类的数据)。鉴于这些问题的挑战,Twitter 已经围绕主题聚类做了新颖的工作,提出了 LDA 的一种变体,称为使用逻辑 LDA 的区分主题建模。这只是我们为更好地服务用户所采取的方法的一个例子。
https://arxiv.org/pdf/1909.01436.pdf
用户相关问题的一个很好的例子是“人们是如何谈论 X 的?”。最终在 Twitter,我们是一个对话的平台。推动这些对话的人是真实的人。了解他们如何使用平台将有助于我们开发更好的平台。Tweet 聚类是我们了解人们如何谈论话题的一个很好的方式。为了纪念《权力的游戏》, Twitter 的数据可视化团队创建了一个互动工具,让我们可以看到用户如何谈论角色,以及他们如何将角色与其他角色联系起来。
https://interactive.twitter.com/game-of-thrones/#?episode=63
对想要进入 NLP 数据科学的 TDS 社区有什么建议吗?
(提示 3 和 4)对于那些对 NLP 感兴趣的人来说,我认为理解如何使用不同的 NLP 工具以及何时以及为什么使用这些工具非常重要。何时使用算法的原因和算法本身一样重要。
就资源而言,我肯定会先看看 Jurafsky & Martin 的语音和语言处理(未完成的第三版可以在这里找到)以及 Dickinson、Brew 和 Meuer 的语言计算机&。有关实现的更多信息,请查看自然语言工具包(NLTK)简介。此外,还可以查阅以下论文:雷斯尼克&林,2010 ,本德(2008) ,霍维&斯普雷特(2016) ,内森等人 2007 ,博卢克巴斯等人 2016 。这绝不是一个详尽的列表,而是一个很好的方式来暴露你自己存在的问题,以及人们使用了什么技术来解决它们!
对于我们的其他 TDS(视频)采访,请点击下面的链接
[## Tds 访谈-走向数据科学
阅读《走向数据科学》中关于 Tds 采访的文章。分享概念、想法和代码。
towardsdatascience.com](https://towardsdatascience.com/tagged/tds-interview)
我要感谢 Twitter 通信团队的 Lindsay McCallum 审阅并批准了这篇文章。
4 数据地图在商业分析中的应用
原文:https://towardsdatascience.com/4-uses-of-data-maps-in-business-analysis-9f9589c3f69a?source=collection_archive---------15-----------------------
在一些新闻报道和商业杂志中,经常看到地图被用来分析和展示商业现象。这种使用地图来反映和分析数据的形式称为数据地图。数据图谱是业务数据分析过程中非常直观形象的表达方式。你可以使用地图显示各个地区的销售和利润,或者显示全国各地仓库的分布,以优化运输网络。再比如,如果我们需要统计商场的人流量和分布,热图可以帮助我们实现有针对性的广告投放。
Made with FineReport
在类似于上面的场景中,地图的显示无疑会比简单的表格直观得多。作为一种专业应用程序,数据地图在以下领域具有广泛的分析用途。
1.数据地图的用途
1.1 人口分布
根据年龄、性别、收入、受教育程度等人口统计数据。,对地图上不同区域或社区的客户进行分析和分类。数据可以帮助我们了解他们的生活方式、兴趣和购物习惯。
1.2 市场容量预测
分析地图上每个网点的资源投入、销售收入、产品销量,预测整个市场的容量,让资源科学配置到市场潜力最大的区域。
1.3 物流路径规划和供应链管理
比如通过下面的数据图,可以了解订单的分布情况,仓储设置是否合理,物流路线如何优化。
Made with FineReport
1.4 连锁店位置
连锁店和餐厅的选址通常要考虑很多空间因素。利用地图可以直观地展示客流量、门店容量等指标,是进行市场规划的好方法。
2.数据映射的类型
实际上,数据地图有多种表现形式。这里我介绍五种常见类型。
2.1 分销类型
为了制作这种类型的地图,我们根据数值的大小给相应的区域添加不同的颜色。颜色深度反映了数值,如下所示。
Made with FineReport
上面的地图显示了单维数据。如果要根据全国范围内的销量分布来分析一个省或城市的销量,可以通过钻取得到数据。
Made with FineReport
2.2 标记类型
数据地图的标记类型用作位置提醒。您可以使用点或图形让读者将他们阅读的内容与其地理位置联系起来。这样的地图本身并不能反映定量信息。它可以反映位置、流量和密集分布,并减少数据分析的抽象。
Made with FineReport
Made with FineReport
2.3 图表类型
图表型地图是在一个区域的全部或部分区域上显示一个简单的图表,如柱形图、饼状图、气泡图等,相当于增加了一个基本维度,使数据结果一目了然。图表用于直接显示区域中的数据趋势,以进行比较或形成关系。下图是区域图和气泡图的组合,气泡阴影表示数据的大小。这种映射不应该复杂。注意尺度,对复杂的图表使用数据钻取。
Made with FineReport
2.4 热图
热图是根据区域数据的大小来填充不同的颜色深浅,从而反映数据的分布。这是一个非常常见的地理可视化。它可以实时描述种群分布、密度和变化趋势。例如,下面是为一个叫车应用程序制作的交通密度图。
Made with FineReport
Made with FineReport
2.5 自定义地图
数据地图还有其他复杂的样式,比如添加动态地图或动态图表,或者与其他表格结合形成仪表板。
购物中心平面图
Made with FineReport
Made with FineReport
仪表盘
Made with FineReport
GIS 地图
Made with FineReport
技巧
文中所有资料图均用 FineReport 制作。FineReport 是一款企业级业务分析工具,具有强大的数据可视化功能。它通常用于各种业务中的数据分析。只需简单的拖拽,你就可以创建各种很酷很有用的数据地图。对初学者很友好。
如果你想自己制作数据图,可以去官网免费下载 FineReport ,里面提供了很多数据图组件。最后我想说,当你开始迈出第一步的时候,你会发现数据分析其实很简单!
原载于 2019 年 7 月 5 日http://www.finereport.com。
自动化改变数据科学的 4 种方式
原文:https://towardsdatascience.com/4-ways-automation-is-altering-data-science-36a0d2755e4f?source=collection_archive---------29-----------------------
自动化已经连根拔起了无数的事物,而且在未来还会有更多的事情发生。数据科学是自动化改变的事情之一。
无论您已经在该领域工作,还是确定为一名有抱负的数据科学家,了解这里提到的与自动化和数据科学相关的变化将有助于您为未来做好准备。
以下是自动化改变数据科学的四种主要方式。
1.它缩短了数据科学项目的时间框架
自动化对数据科学家最有帮助的事情之一是最大限度地减少他们在项目上花费的时间。大多数公司都认识到了数据科学的价值,并计划扩大数据科学团队的规模。也就是说,他们通常难以衡量其数据科学项目的效果,并且没有大量的数据科学模型可以依赖。
信息还表明,公司需要两到三个月的时间来完成一个数据科学项目。如果企业正在考虑实施数据科学,但发现自己处于观望状态,那么这么长的时间可能会引起怀疑。自动化可以减少完成数据科学项目所需的时间。
例如,如果公司使用人工智能(AI)工具来自动化一些数据科学工作,它可以在最少的人工帮助下处理诸如清理数据并将其转换为正确格式之类的事情。
由于该技术使数据科学家有更多时间专注于其他任务,因此人力和先进技术的结合可以使公司在更短的时间内完成以数据为中心的工作。
2.它正在帮助公司解决数据科学技能缺口
单靠自动化无法满足当今社会对数据科学家日益增长的需求。一些估计称,仅在美国就有超过 150,000 个数据科学职位空缺,但一些公司发现,带有自动化组件的数据科学平台让没有受过正式数据科学培训的人更容易利用企业拥有的信息。
一些这样的解决方案使用自动机器学习(AutoML)。它们使公司能够享受数据科学的好处,而不需要大量资源。
由于许多自动化数据科学程序是用户友好的,即使没有这方面背景的人也可以理解公司的信息,并确定如何最好地利用这些发现来支持公司的目标。
然后,即使公司拥有的数据科学家比他们需要的少,短缺可能不会如此严重,因为自动化会照顾到一些必需品。
3.它为公司整合数据科学构建了一个更强大的商业案例
各种自动化对于公司保持竞争力变得越来越重要。它带来的好处包括更好的质量控制和更高的效率。
具体到数据科学,自动化可以为使用它来管理数据湖的公司带来竞争优势。这些是几十年前公司开始接受大数据时出现的巨大存储库。
但是,数据湖很快就会变成数据沼泽,这意味着它非常混乱,几乎没有任何结构。数据沼泽使数据科学家更难处理信息,通常会损害企业竞争力。如果公司不能以实际的方式使用他们的数据,他们会浪费时间和金钱来实现数据科学。更重要的是,他们最终很可能会失败。
数据湖有几个相关的挑战,一些分析师认为自动化可以解决这些挑战。管理数据湖并确保它有效地支持业务需求可能很棘手。
如果自动化做了一些跑腿工作,数据科学家可能会发现他们花在数据湖中争论信息的时间更少了。由此给企业带来的好处可能是,他们能够更好地快速访问数据,并从中提取必要的见解。
无论公司的团队中现在是否有数据科学家,或者是否会很快雇用他们,他们通常都希望确保投资数据科学将会有显著的回报。自动化可以帮助提供这种保证,为数据专业人员提供他们所需的工具,使数据湖更加整洁,防止它们变成数据沼泽。
4.它减少了对大量数学和编码技能的需求
在数据科学领域具有市场竞争力与保持技能更新和了解雇主需要和想要什么能力有很大关系。但一些人指出,自动化和数据科学的融合也意味着一些能力不再是必不可少的。
例如,DataRobot 的副总裁兼总经理西蒙·布伦南(Simon Blunn)说,有一些工具——包括他的公司生产的一些工具——可以消除一些数学和编码需求。
那么,自动化可以为高技能数据科学家创造机会,让他们与能力相似但程度较低的人一起工作,因为他们没有花几年时间通过正规教育获得技能。像这样共享劳动力可以通过减少一些公司利用数据科学时遇到的延迟来提高生产率。
最近有一股力量推动公司将一些员工送到数据科学训练营。这些密集培训期可以帮助人们获得数据科学的基础,但他们不会给个人提供他们通过获得传统文凭获得的知识量。
有时,自动化可能会对刚开始学习数据科学的人有很大帮助。
未来令人兴奋的变化
这份清单上的四个领域突出了为什么自动化和数据科学可以一起改变游戏规则。
这种转变并不意味着公司可以没有数据专业人员,但它可以帮助这些专家简化他们的工作流程,并专注于更高层次的任务,而自动化处理较低层次的需求。
图像经由 Rawpixel
数据科学可以革新几乎每个行业测试阶段的 4 种方式
原文:https://towardsdatascience.com/4-ways-data-science-could-revolutionize-the-testing-phase-in-nearly-every-industry-5f7929e147db?source=collection_archive---------25-----------------------
所有行业中最成功的公司通常都有测试阶段,帮助他们开发新产品、测试新材料、指导营销活动等等。
数据科学和大数据平台可以共同颠覆几乎所有行业的测试阶段,帮助公司节省资金并更好地评估结果。这里有四种可能发生的方式。
1.提高测试人员的效率
数据科学不会将人类测试人员从等式中删除,但如果使用得当,数据分析可以帮助这些人更快地从数据集合中提取有价值的见解。
例如,测试团队的成员从各种来源获得反馈,从社交媒体上的评论到焦点小组中提供的评论。
数据分析平台可以帮助测试人员理解编译的数据,并发现其中的趋势。在数据科学的帮助下,人们可以了解产品开发的下一步模式。
2.评估产品安全性
测试阶段如此重要的原因之一是,它可以帮助产品制造商识别可能导致产品召回的问题。IBM 有一个内容分析平台,可以筛选出与汽车等产品的严重问题相关的指标。
虽然制造商可以并且应该在初始测试阶段之后使用数据分析,但在产品进入市场之前这样做也是明智的。通过采取这种方法,他们可以在伤害公众或参与小型测试的人之前识别出可能的安全缺陷,从而节省时间、金钱和麻烦。
数据分析平台检查大量数据的速度比人类在没有帮助的情况下要快得多。这意味着这些工具可以识别可能表明产品在测试中存在问题的警告信号。使用大数据创建的测试模拟也可以预测当人们以特定方式使用产品时会发生什么。
例如,他们可能会指出,在使用不到 250 次后,适合旅行的咖啡杯的盖子材料变得过于柔软,并且该问题导致密封不充分,用户不会立即发现。然后,当人们喝一小口的时候,如果盖子掉下来,他们可能会被烫伤。在这种情况下,产品工程师会知道是时候重新开始,寻找更合适的材料了。
3.简化监管要求
建筑、航空和其他一些行业必须对其产品进行防火和易燃性测试。它们揭示了产品暴露于明火后会发生什么,或者产品可以耐火多长时间。例如,在一些防火门的情况下,它们应该能够承受至少 90 分钟的火焰暴露。
数据科学可以帮助公司以系统的方式处理任何要求的易燃性测试,确保他们的产品符合或超过法规要求。此外,即使一个企业所在的行业没有强制进行防火测试,进行防火测试也可以为想要避免不必要风险的客户创造一个卖点。
大数据还可以以另一种方式提供帮助,即在消防检查中发现有风险的建筑。
纽约市官员利用这种方法和一个数据分析平台,寻找超过 7500 个风险因素,使检查准确率提高了近 20%。公共建筑必须接受定期检查,这是一个数据驱动测试即使在初始测试发生后仍有价值的例子。
4.缩短上市时间
世界上最具竞争力的公司都知道比其他实体更快地发布市场现成产品是多么重要。成功实现这一壮举将带来长期盈利和在该领域的主导地位。许多公司在测试阶段依靠大数据来让产品更快地准备好发布。
除了帮助企业对产品在测试期间的预期功能充满信心,大数据分析还可以帮助企业评估其行业中最紧迫的未满足需求。
宝洁公司在超过 175 个国家有的业务,这些国家的人们有不同的需求。该公司发现,大数据有助于他们发现真知灼见,并灵活地改变他们的产品或推出新产品,以提高成功。
当公司能够获得可靠的见解时,缩短产品上市时间也会带来回报。尽可能快地发布一个产品,然后意识到没有足够多的人想要或需要它来使新产品发布变得有价值,这是没有用的。
因此,公司可能会首先部署大数据,以确保市场对产品的需求足以证明其创造的合理性,方法是对细分市场进行测试,以了解他们对产品的反应。
接下来,它可以使用大数据来减少冗余或错误,这些冗余或错误可能会使测试过程花费更长的时间。这两件事都有助于产品更快地进入市场。
引起有意义的增强
消费者可能不会花太多心思在他们喜爱的产品或他们喜欢参观的建筑在开发过程中所经历的测试上。但是,他们中的大多数人意识到,测试往往会导致整体的改善。
大数据可以帮助产品开发人员更快地实现目标。
图像由【rawpixel.com】
提高连续目标训练精度的 4 种方法
原文:https://towardsdatascience.com/4-ways-to-improve-train-accuracy-for-continuous-targets-1309276fa54b?source=collection_archive---------11-----------------------
快速、简单、有效。
连续目标…
我们都认识他们,我们都和他们一起工作。连续特征可以表示价格、GDP 以及任何量化的东西。连续目标是累加的目标,或者通常由于另一个特征而在值上增长和收缩的目标。一个很好的例子就是货币。尽管这可能很可笑,但大多数商业分析都围绕着钱,(很疯狂,对吗?)而且大多数(如果不是全部的话)这些货币目标都是连续的。
显然,在进行连续预测时,准确性非常重要,因为资金对企业很重要,国内生产总值对国家很重要,收入和支出需要加以利用,以确保稳定的运营。几乎每个企业都利用某种形式的分析,无论是数据分析师(DA),数据科学家(DS),甚至是数据工程师(DE)。
因此,如果你要解决连续的问题,有一些非常简单易行的方法来提高你的准确性,而且非常有效。
(笔记本)
确认
为了训练一个准确的模型,我们需要知道如何验证它。通常,对于连续特征,我们使用三个家庭指标:
平均绝对误差
平均绝对误差是两个阵列之间的差的总和,理想情况下是 y 和 y hat。这可以通过简单地用点减去两个数组,然后求差的平均值来实现。
对于这个指标,重要的是要记住越低越好。分数越低,我们预测的 y 和我们得到的ŷ.之间的差异就越小为了在 Julia 中做到这一点(如图所示),我们只需使用。-运算符,然后得到它的总和,对于这样的公式:
m = Σ(y - ŷ)
均方误差
均方误差是两个阵列之间的平方差的总和,与我们之前的公式一样简单,在 sigma 之前对 y 和ŷ之间的结果差求平方。
和 MAE 一样,MSE 是连续的,越小越好。这个数字离零越远,我们的模型就越不精确。这里的一个区别是,这个数字(自然)会更大。
回归的相关系数
虽然另一个验证很简单,计算起来也很容易,但 r 却不是。r 分数以百分比表示,计算方法是先计算相关系数(r ),然后求平方。为了计算回归的相关系数,我们必须首先计算相关系数。
我们已经了解了如何计算 MAE 和 MSE,但这是计算 r 的方法,虽然看起来有点令人畏惧,但一旦我们将其分解,就非常简单了。我们需要“插入”到这个方程中的主要部分是 n,σx,σy,σxy,σx,σy .为了计算这些,就像前面一样;我们需要使用点运算符。当然这是特定于 Julia 的,但对于其他统计语言来说没有太大的不同。在 Python 中,使用 Numpy,在 R 中你实际上可以只使用*操作符(它有一个多态属性,可以应用于偶数数组,以及单个整数和浮点数。)所以当然是在 sx2,sx,sy 等里面的 s 上面。是 sigma 或σ的缩写,我们当然可以在大多数高级语言中用 base sum()方法得到它。那么就像把这些值代入公式一样简单,
应该注意的是,机器学习中使用的相关系数通常使用皮尔逊相关方法来计算 r。我还想说明 r 对于非回归问题来说不是一个好的指标。这包括带有加权系数和决策加法的公式(不是典型的基于公式的回归,如岭回归、线性回归和 LLSQ 回归)。)通常,对于加权最小二乘法和普通最小二乘法,您可能应该使用均方误差或平均绝对误差。
现在我们有了 r 的 r 部分,要得到 r,我们只需要求 r 的平方,我想我们会写一个函数来做这件事,尽管手工做起来并不困难。
轻松点。现在我们有了第三个也是最后一个指标,可以理解模型的准确性,并得到某种分数。
基线
基线精度是一个经常被低估的重要性,通常基线的优势在于它可以告诉您是否有必要使用模型来预测您的要素。这不是限制性的,因为这是对其他优势的补充,因为基线通常是一个很好的起点。为了获得基线,我们可以使用 Lathe.models.meanBaseline 构造函数,或者编写我们自己的函数。根据本文到目前为止的进展,您可以推测
我们要做的是后者。
但首先,让我们使用车床,这样你就可以在我们从头开始之前知道我们要做什么。
当然,如果需要,我们可以使用 Julia 的帮助功能(?())给我们模型的信息。
至此,我们得到了一个详细的解释,并举例说明了如何准确地使用该模型,所以让我们快速地补充一些数据:
x = [7,6,7,5,6,7,8,8,4]
y = [3,5,6,4,6,8,9,0,6]
xtest = [6,4,5,8,6,5,5,7,8,3,5,7,8,]
现在,我们将它插入到构造函数中,并使用我们的 predict()函数。注意,我不会“使用”它,我将显式地导入它。这样我们就可以用多态来修改车床函数,以便利用我们自己的函数。
现在我们有了基线预测,我们可以使用之前制定的指标。我们将用平均绝对误差作为基线。
平均绝对误差约为 7,但重要的是要考虑到数据的平均值为 5,因此 7 实际上是一个非常可怕的精度。当然,这是由数据组成的,所以让我们从网上获取一个数据集,在这个例子中使用,这样我们实际上可以提高准确性。在快速浏览了 Kaggle 之后,我想出了这个数据集。这个例子应该很适合我们。所以让我们读给朱莉娅听:
我们必须做的是:
显示(df,allcols = true)
在对我们由此得到的(糟糕的)数据框视图进行了一番研究之后,我得出了这样一个数据框:
现在让我们训练测试拆分数据,但是我们能用什么呢?车床中可能有一个功能,所以让我们检查一下…
我们可以假设测试序列分割在预处理模块中,因为这一次其他的不一定符合要求。
我们将完全按照它说的去做,并且使用?()来访问该模块的信息。这样做可以显示模块树,包括每个函数的单独部分。
当然,我们来这里是为了寻找 lathe . preprocess . train test split,所以我们现在可以使用?()功能在上面:
?(Lathe.preprocess.TrainTestSplit)
这将返回我们完成测试序列分割所需的所有细节,包括超参数和语法:
轻松 ML 是有原因的座右铭!现在,我们可以使用 Julia 符号来区分我们的单一特征和目标:
feature = :no_reviews
target = :Price
xtrain = train[feature]
ytrain = train[target]
xtest = test[feature]
ytest = test[target]
现在让我们像承诺的那样扩展预测函数,以便使用我们以前的可变结构为新的平均基线函数编写我们自己的 Lathe.models.predict()。首先,我们将把我们的三角形插入我们的新模型:
现在让我们写一个函数,本质上我们需要做的就是为数组中的每个元素添加一个替换数(平均值)。我们可以通过使用 Lathe.stats.mean()和一个简单的一行 for 循环快速而简洁地完成这项工作:
现在我们把它作为可变结构的一个属性来扩展:
predict(m::Lathe.models.meanBaseline,x) = meanbaseline(m,x)
现在我们可以用前面的 MAE 函数来验证它:
这是一个相当糟糕的准确度分数!虽然我没有对特性选择进行任何测试,但我们肯定可以通过首先实现一个模型,然后投资一些预处理来进一步开发这个特性。对于我们的模型,我选择了 FourSquare 模型。FourSquare 模型基于四分位数使用不同的回归模型进行预测,类似于回归树——但它不使用相关性,而是使用数据段。这使得它非常适合时间序列数据和分段连续数据。但是现在我们的功能出现了问题:
我们得到了比我们上一个模型更差的准确性,表明这个特征可能不是预测这个连续目标的最佳选择,因为评论的数量可能与目标没有很好的相关性。当然,这是我们的无效假设,即这些特征之间没有相关性。与普遍的看法相反,我们经常可以看到这一点,而从来没有使用统计测试来检查。因此,让我们通过执行统计测试并可视化我们的数据和模型来进一步验证零假设(耶!)我认为这也说明了基线精度为何如此重要,以及 segways 如何真正成为我们的第一个精度助推器:
1.改变特征
丢弃统计上不重要的特征,或者在我们的情况下(单一特征预测)一起改变我们的特征,是我们可以用来提高准确性的最有效的方法之一。在这种情况下,老话真的是正确的:
坏数据输入,坏结果输出。
The original data scatterplot
仅从这个可视化,很容易看到,在大多数情况下,这些功能是扁平线在一起。这意味着这种情况下的特性对我们的目标并没有太大的影响。下面是我用来创建这个图形的代码:
scatter(xtest,ytest,
# title:
title = "Original airBnB Data",
# X label:
xlabel = "Number of Reviews",
# Y label
ylabel = "Price",
# Grid:
grid = false,
# Legend position
legend=:bottomright,
# Color of the marker
color = :lightblue,
# Marker stroke width and opacity
markerstrokewidth = 4,
markerstrokealpha = .75,
# Marker stroke color
markerstrokecolor = :lightblue,
# Adjust out y ticks
yticks = [500,1500,3500],
xticks = [200,400,600],
label = "AirBnB's",
# Our font options
fontfamily = :Courier,xtickfontsize=7,ytickfontsize=9,
ytickfont=:Courier,xtickfont = :Courier,titlefontsize=13,)
现在让我们看看我们的模型做了什么…
Our model — visualized
幸运的是,有意地用这种方式编写代码,很容易回过头来改变特性。我决定将我们的功能更改为今年的可用性,因为较低的数字似乎相当于较低的价格。当然,我们将使用测试和更多的可视化(耶!)用实际支持来巩固这个假设(数据科学的科学部分。)
让我们回到过去,用这个新特性来重建我们的数据帧:
df = DataFrame(:Price => df[:price],:Availability => df[:availability_365])
有了这个新功能,又出现了一个小问题,这是很常见的:Nans。因此,为了去掉 nan,我们将使用 DataFrames 中的 dropmissing()函数。
df = dropmissing!(df)
如果我们想替换这些,我们可以很容易地通过使用缺少的包:
using Missing
xbar = mean(df.feature)
df.feature = Missings.replace(df.feature, xbar)
然后,我们将替换定义功能和目标的符号:
既然已经结束了,为了进行统计测试,我们必须屏蔽我们的数据。布尔掩码允许我们为我们的数据设置一个要遵守的条件(否则—毫不留情地丢弃)。)但首先,让我们把这种形象化处理掉,因为在这种情况下,眼见为实。
从表面上看,这个特性也不是最好的,我们可以通过快速 f 检验来巩固它。让我们来做我之前提到的布尔掩码:
high_df = df[(df[:Availability].>=300),:]
然后我们将把它插入到来自 Lathe.stats 的 f_test()函数中。
所以考虑我们的假设:P 值为 0.05 或更小通常意味着考虑拒绝我们的零假设具有统计学意义,对吗?因此,P 值为 0.032 表明统计学显著性相当不错,肯定高于我们之前的数据。
2.切换模型
让我们面对现实吧,有时你的模型可能不奏效。切换到梯度回归,甚至建立一个神经网络,有时可以是一个非常好的复杂问题的解决方案。虽然您的选择可能类似于 XGBoost,但是对于这个例子,我将切换回线性回归。这并不会提高准确性——在本例中,这只是一个必须考虑的问题。当然,如果车床不是在阿尔法,我们有更多的工具利用,我们可能会全力以赴与模型,使它非常准确,这和努力与回报;我对这个模型没什么意见,我用它作为一个不太精确的例子。
转换我们的特征和我们的模型产生了平均绝对误差
16014.948562702863
鉴于平均值是 141,这是相当关闭…但一如既往,我们有另一个锦囊妙计…
3.特征缩放
众所周知,特征缩放可以提高准确性,让我们面对它:这就是它存在的意义。在这种情况下,我们将使用标准标量,也称为 Z 分数标量。这将根据标准偏差对数据进行标准化。如你所料,我们将编写一个函数来实现这一点。
Z 分数标量的公式为:
xᵢ = (xᵢ-x̄ ) / σ
其中 sigma 是标准偏差,x 条是样本平均值,x 子条是当前迭代。回到编程的思维模式,我们最终会得到:
function StandardScalar(array)
q = Lathe.stats.std(array)
avg = Lathe.stats.mean(array)
v = [i = (i-avg) / q for i in array]
return(v)
end
现在,要使用我们的函数,我们只需插入它,并在定义 xtrain 和 xtest 时对它们进行预处理:
在这个具体的例子中,这使我们的平均绝对误差下降到
15,249
这意味着我们正式低于我们的基线。
4.四分位数归一化
四分位数归一化是另一个有趣的方法,四分位数范围 q 和 q 之外的任何数据都被丢弃,将数据集中在中位数周围(记住,这是中位数,而不是平均值。)
拥有一个准确的模型是很棒的,这些数据科学原则肯定可以帮助你实现这一点。即使你的模型相当准确,其中一些肯定能把它提高到 98%。当像标准标量这样简单的东西对您的准确度分数产生如此大的影响时,这绝对是令人满意的。希望这个快速检查列表有助于阐明一些非常重要的想法和哲学。如果你要从这整个列表中选择一个,我建议你选择好的特性。底线是,无论如何,你的特征是你的算法唯一需要放弃的东西。就这样,机器学习快乐!
增强你的推荐系统的 4 种方法
原文:https://towardsdatascience.com/4-ways-to-supercharge-your-recommendation-system-aeac34678ce9?source=collection_archive---------13-----------------------
在用户面前提高可扩展性和质量的 4 个实用步骤。
Credit: Unsplash/Peter Lewicki
推荐系统帮助用户找到他们喜欢的商品。他们通过为一个给定的用户产生一个预测的可能性分数或一个顶级推荐项目列表来做到这一点。推荐可以基于过多的因素,包括用户人口统计、总体项目流行度和历史用户偏好。在亚马逊、Spotify 和 Tinder 等地方经常会遇到现实生活中的例子。
然而,许多系统的运行规模强调了成功的学术和“小数据”应用的挑战。此外,用户意识和选择的增加导致了偏好混乱意味着用户比以往任何时候都更乐意放弃一个不准确的服务。
考虑到这一点,以下 4 点是可实现的想法,它们针对可伸缩性问题,同时提高您的协同过滤推荐的质量。
Credit: @BlaxZtar
1——抛弃基于用户的协同过滤模式。
在商业环境中,协同过滤算法面临的一个关键挑战是处理数据的稀疏性和可扩展性。现代系统需要处理数千万个潜在数据点的能力,对性能限制的容忍度较低。在这些系统中,用户可能已经与不到 1%的可用项目进行了交互。
基于用户的协同过滤模型中的瓶颈主要出现在对邻居、的搜索中,这些邻居是在大用户群中历史上对给定用户表现出相似偏好的其他用户。能够搜索成千上万的邻居固然很好,但系统必须根据它们所适应的业务进行扩展——能够实时搜索数百万个邻居会为您和您的用户带来真正的价值。
切换到基于项目的协同过滤算法将推荐问题从用户空间转置到项目空间。它探索的是项目之间的关系,而不是用户之间的关系。在大多数现实生活的应用程序中,项目的数量与用户的数量相比相形见绌,并且在许多情况下项目是静态的。也就是说,项目集的变化远不如用户数量的变化频繁。这允许基于项目的协同过滤模型的拟合阶段和预测阶段的分离。
我们来看看实践中的区别。
使用来自 6,040 个用户的 3,704 部电影的 994,168 个评级的训练集(MovieLens 1M 数据集),评估基于用户的算法的相似性矩阵的计算成本是 77.6 秒,但是对于基于项目的算法,仅 28.4 秒,每个使用皮尔逊相似性。
这种转变解决了大规模系统的计算能力问题,这在某些阶段变得比质量上的微小差异更重要。当然,如果您的用户集小于您的项目集,并且预期变化相对不频繁,那么例外是存在的。
2 —黄金标准相似度计算技术。
相似性的概念是协同过滤框架的关键元素。对于基于用户的协同过滤算法,用户相似性矩阵由组成,该矩阵测量任何一对用户偏好之间的距离。同样,项目相似性矩阵测量基于项目的框架中任何一对项目之间的相似性。三种通常讨论的技术是皮尔逊、余弦和均方差(MSD) 但是您应该使用哪种相似性计算技术呢?
输入用户 56。用户 56 评价了 54 部电影,下面给出了来自上述相同训练集的 5 部星级电影。
Figure 1 — User 56’s Top Rated Movies
我选择用户 56 纯粹是出于兴趣,考虑到用户喜欢《美国历史 X》和《宝贝》(可以说是两部关于猪的电影),会有什么样的推荐。产生适当的推荐是数据集中其他用户的功能,但是挑选这些用户的能力取决于对相似性度量的选择。
Figure 2 — Similarity Metric Comparison (model hit rate, computation time, top 8 movie list)
忽略计算速度的差异,所有 3 个顶级列表都报告说命中率为 0,我不知道你的情况,但我在任何推荐列表中都没有认出一部电影。通常情况下,这就是结果。丑。
这更有可能是数据集的产物,而不是相似性度量,因此停止通过离线评估度量搜索黄金标准相似性计算技术,并开始 A/B 测试。真相在于现实生活中的反应。
3 —使用模型尺寸提升您的算法。
在基于项目的协同过滤框架中,模型大小的概念围绕着这样一个思想,即关于用户偏好的足够信息存在于与他们已经高度评价的项目最相似的项目的子集中。从逻辑上讲,与最高评级的已见项目具有高相似性的未见项目对最终推荐列表贡献最大是有意义的。模型大小 是由活动用户评定的任何给定活动项目的最相似项目的邻域。
对于大量的项目,对整个候选集的推荐很快变得过于计算密集。对项目的邻域进行操作大大减少了进行预测所需的时间,但也减少了模型必须排序的信息。关键的权衡就变成了什么级别的信息可以确保推荐既及时又合适?
Figure 3 — Model Size Comparison (top 8 movie list, computation time, hit rate, hit rate by rating)
使用前述的 MovieLens 数据集,可以在具有余弦相似性的基于项目的模型上检查模型大小的影响。对于用户 56,邻域实现立即改变前 8 个列表。从所有 8 部电影都是可识别的这一事实来看,这个模型似乎不再抛出晦涩难懂的推荐了(对我来说)。降低了系统噪音。我这样说并不是因为我现在能认出前 8 名名单中的电影,而是因为在留一交叉验证测试集上命中率的增加(6040 个前 8 名名单)。
使用只有 10 个项目的邻域实际上将系统的命中率从 0%提升到 1.4%,更重要的是在五星预测上的命中率为 2.1%。虽然标题点击率随着邻居增加到 50 个项目而提高,但五星级项目稳定在 2.5%左右,因此整体改善源于 4 星级类别。
仔细想想除了顶级分类之外的其他分类对你的系统是否重要。推荐是如何在屏幕上显示的?顶级列表中有多少项?你的单子消耗率是多少?
模型大小可以减少大量的计算量,同时有时还可以提高推荐的质量。文献表明 30 岁左右是最佳值( Herlocker 等人,1999 ),但文献不知道你的背景。亲自动手,观察它如何影响对您所关心的客户的顶级推荐。花一点时间调整模型大小可以极大地改善客户体验,增加您的服务消费,并减少平均销售周期指标。
4——驱动您的用户、推动您的成功的因素。
你的评分函数应该反映用户的效用。
从最终结果开始,反向工作,基于项目的协同过滤的目标是从给定用户尚未评级的所有项目集合中创建一个顶级推荐列表。为了做到这一点,一个 分数 被分配给还没有被该目标用户评级的每一个项目——即候选生成步骤。然后可以基于分数进行排名,并且可以将最高的项目呈现给活动用户。
我们为每个候选项目建立的 分数 是活动项目的等级以及活动项目和候选项目之间的相似性的函数。文献通常使用相似性加权评分总和(萨瓦尔等人,2001 ),这是一种天真的尝试,可以通过以下几种方式进行改进。
时间加权。第一个主要步骤是评估你的用户对你的物品的敏感程度。长期偏好与学习相一致,即随着一个人的知识基础扩大,对生活的看法改变,习惯改变,偏好随之改变。相比之下,短期偏好往往受到社会病毒式传播、社会压力和影响的欺凌。通过将最近的评级加权为高于旧的评级,系统可以更快速地响应变化的用户偏好。决定你的系统对新数据有多敏感,是理解长期偏好变化和病毒行为之间的细微差别。无论哪种方式,目标都是了解用户对环境和产品的反应,并将其纳入评分过程。
负加权。由于相似性分数是非负的,与评级较低的所见项目不相似的候选项目对顶级推荐几乎没有影响。实际上,模型忽略了这些项目。另一种评分方法可以惩罚对已知不喜欢的项目具有高相似性评分的候选项,并提升对已知不喜欢的项目具有低相似性评分的候选项。实现这一点的一种方式是将评级的尺度和相似性的尺度都线性移动到中心 0。这一概念摆脱了仅仅根据用户喜欢的已知商品进行推荐的局限,大大提高了你的模型推荐的多样性。
当然,这只是两种可能的修改,应该让您考虑一下 score 函数对您的业务的实用性。用户的地理位置和非线性转换也应该在适当的时候进行研究。
结束语
没有一篇文章能为你开出一个完美调整的推荐算法,我在这里也不做尝试。相反,我希望通过上面的四个关键点来提高对某些调优选择的认识,这些选择有可能增加边际额外努力的实际价值。
你优化的价值,无论是歌曲、点击量还是文章,都应该符合商业需求,并根据商业需求进行评估,而不是学术指标。结果不在乎准确性,只在乎呈现在眼前的东西的顺序。拥抱协作过滤的简单性,因为它可以在个性化订购中提供强大的功能&寻求用户的真实反馈。
另外,对于那些想知道“如何做”的人,我个人很喜欢詹姆斯·柯克的文章这里。
Github 代码:https://github.com/93tilinfinity/collab-filter-basic/
给数据科学初学者的 5 条可行建议
原文:https://towardsdatascience.com/5-actionable-advice-for-data-science-beginners-50fd912aa2d6?source=collection_archive---------18-----------------------
这里是给每个进入数据科学的人的 5 个建议
Photo by Frame Harirak on Unsplash
1.向专家请教
“向专家学习;你活不了多久,自己就能想明白这一切。”—布莱恩·特雷西
学习数据科学有无数种方法。你可以阅读文章、观看视频、参加在线课程、参加聚会等等。但是有一件事你无法“学习”,那就是体验。你必须通过多年的实地工作来获得。从数据科学专家那里可以学到很多东西,他们在管理端到端机器学习和深度学习项目方面的经验,他们从零开始构建数据科学团队的哲学,以及他们在管理艰难项目和克服障碍方面的毅力和勇气等。—这些都是任何课程都学不到的。它们只能被获得。
这里有一些数据科学专家可供学习:
院长阿博特,肯尼斯库基尔,约翰埃尔德,伯纳德马尔
2.问正确的问题
“如果我有一个小时来解决一个问题,我会花 55 分钟来确定要问的适当问题,因为一旦我知道了适当的问题,我就可以在不到 5 分钟的时间内解决问题。”——阿尔伯特·爱因斯坦
数据科学家不得不问过多的问题才能有效地生产出企业想要的东西。这不是普通的问题,而是正确的问题。提问的主要目的是定义问题陈述。换句话说,查询是数据科学家解决问题的第一步。一旦你开始问问题,它很快就会成为你的第二天性,你会发现它的价值,在这个过程中,随着你变得更有经验,你会问自己更好的问题。
3.掌握用数据讲故事的艺术
“讲故事,一种原始的艺术,和人类的起源一样古老。人们希望获得故事形式的信息,而不仅仅是事实、观点和分析。”
—李·古特金德
一个伟大的故事有清晰的细节和形象。数据只是一堆杂乱无章的非结构化数据,直到有了数据科学家。从中提取的洞察力必须解释发生了什么,为什么它是重要的,以及如何将这些知识转化为实际的东西。数据可视化意味着使用数据、统计和编程技巧来设想模式、证明理论、得出结论,这可以帮助组织做出好的决策。数据驱动的故事对利益相关者和客户都非常有益。首先,从这个问题开始:“什么数据最重要?”数据中有大量的混乱,突出重要的是关键。接下来是阅读数据,并找出如何使用它来了解你的观众。(更多尽在Forbes.com
4.以正确的方式学习统计学
相关性并不意味着因果关系。
统计学是一门将数字与这些问题联系起来的艺术,这样“答案”才会进化!统计学的核心是建立与定性问题的定量联系。据说“数据科学家是比程序员懂更多统计学,比统计学家懂更多编程的人”。统计学不是一个容易的话题,对初学者来说可能难以接受。因此,学习统计学的正确方法是从《T4 ThinkStats》这本书开始,因为理解统计学从根本上来说是揭示隐藏在数据集中的秘密的“艺术”是非常必要的。有了什么是统计的概念后,继续使用 Python 进行统计的编程部分。
5.学习 Python
现在,我相信 Python 比同时教学生编程和教他们 C 或 C++或 Java 要容易得多,因为语言的所有细节都要困难得多。其他脚本语言在那里也不太好用。—吉多·范·罗苏姆
Python 可以说是蓬勃发展的数据科学世界中最流行的编程语言。为什么?这是因为 Python 是一种简单易学的编程语言,有一个活跃的社区。它还拥有大量的库和资源,这使得它成为初学者深入该领域以及专家高效工作的典型语言。一个惊人的 48%拥有五年或更少经验的数据科学家认为 Python 是他们首选的编程语言。要开始使用 python 进行数据科学研究,正确的方法是,首先学习基础知识,然后使用 Matplotlib、Pandas、statistics 和 Scikit-learn(Python 中最流行的 ML 库)进行数据可视化。
现在开始学习的一个方法是在 Coursera 上参加面向所有人的专业课程Python。这个课程非常适合初学者和查尔斯·拉塞尔遣散,指导老师是一个了不起的老师。如果您认为您已经掌握了 python 的基础知识,请继续学习 Python 专门化的应用数据科学,它将指导您如何通过流行的 Python 工具包(如 pandas、Matplotlib、Scikit-learn、nltk 和 networkx)应用统计、机器学习、信息可视化、文本分析和社交网络分析技术,以深入了解数据。
大多数数据科学项目未被采纳的 5 个原因
原文:https://towardsdatascience.com/5-adoption-challenges-that-every-data-science-project-faces-9b9618a7242f?source=collection_archive---------25-----------------------
采取这些步骤来避免您的项目在生产中失败
更新:你现在可以在 日语 中读到这篇文章!(感谢 Koki Yoshimoto)。
几年前,在 Gramener,我们为全球最大的电信运营商之一建立了一个客户流失建模解决方案。机器学习解决方案预测了他们的哪些客户会离开,在他们停止使用之前一个月。在试点测试中,与之前的流程相比,该解决方案帮助客户流失率降低了 56%以上。
我们惊讶于令人印象深刻的结果和恒星的准确性。但是庆祝有点为时过早,因为这种解决方案从未被使用过。尽管有一个合理的解决方案和成功的试点,我们几个月的艰苦努力付诸东流。
听起来熟悉吗?不幸的是,这在技术转型和数据科学计划中太常见了。是什么导致了这些失败呢?你如何成功地进行必要的变革管理?
以下是您的分析项目将面临的五大挑战,以及如何应对它们。
1.分析项目不能解决业务问题
Photo by Bence Balla-Schottner on Unsplash
Gartner 的一份报告称 80%的数据科学项目将会失败。大多数计划不会带来商业利益,因为它们解决了错误的问题。这些试点项目的问题在于,它们中的大多数过于注重技术,就像科学展项目一样。它们不是由组织面临的挑战驱动的,因此最终对业务没有用处。
永远不要通过谈论数据或分析来启动数据分析计划。
如何称呼:
永远不要通过谈论数据或分析来启动数据分析计划。集思广益,找出你的业务目标的所有障碍。根据三个因素对它们进行优先级排序:业务影响、紧迫性和可行性。从这个列表中选择最重要的业务问题,并使用数据科学制定解决方案。
您的数据科学之旅就像一场 30 小时的马拉松远足。在地图上选错目标,你所有的豪言壮语都白费了。
2.分析项目与用户的工作流程不匹配
Photo by Jeff Frenette on Unsplash
团队经常过于雄心勃勃,为每个人构建一个解决方案。如果你渴望满足每个人的需求,你将满足不了任何人的需求。另一个常见的错误是代表最终用户进行构建,而不与他们交谈。如果你没有理解用户的背景或者他们自然的工作流程,你的解决方案就会显得很突出。
如何称呼:
首先定义谁是用户,谁不是。进行访谈,建立人物角色,了解使用场景。在确定优先顺序时要无情,以减少需求。将解决方案设计到他们的自然工作流程中。确保模型结果是可解释的,并且符合用户的需求。是的,你以前听说过这个,但是在实践中它经常被忽略。
以流行的语法检查工具为例。虽然模型建议是准确的,但它最大的优势在于设计了一个减少用户摩擦的解决方案。拼写检查是在线的,跨应用程序的,它们不断地从用户反馈中学习。现在,想象一下,如果您必须将文本复制并粘贴到一个单独的界面来进行拼写检查。你会用它吗?
3.分析项目在营销方面有所欠缺
Photo by Amanda Lins on Unsplash
如果您的项目解决了已定义用户的迫切需求,那么他们需要知道这一点。即使最好的解决方案也需要销售推动。人们通常认为,如果你建立了它,用户就会来。但是如果没有精心策划的营销努力,项目就会慢慢死去。组织错误地将内部营销工作留给了构建解决方案的团队。
如何称呼:
为每个内部项目定义你的走向市场的方法。由高管策划发布,组织路演,开展内部活动。通过游戏化吸引用户,并分发很酷的赠品来传播信息。接受专业营销人员的帮助。跟踪您的采用指标,庆祝小小的胜利。量化投资回报以显示价值并帮助确保未来预算。
一个很好的例子是,我们的客户,世界上最大的媒体公司之一,推出了电视观众分析解决方案。从高级领导展示开始,组织了一次全国路演,冠军涵盖了每个区域团队。这导致了持续使用的恒星采用。
4.分析项目无法扩展
Photo by Evie S. on Unsplash
组织经常过于关注第一个版本,而没有为扩展做足够的计划。即使是最成功的产品也需要多次迭代和不断调整才能得到正确的解决方案。大多数项目不会规划这条跑道来让他们的解决方案起飞。他们不会留出预算来改善持续的用户反馈。他们没有给用户设定这种期望。
如何称呼:
在构建您的第一个版本时,请规划一个更广阔的愿景和路线图。明确留出预算、资源和快速修改的预期。避免让团队过于拘泥于最初的解决方案,让他们愿意做出重大改变。计划定期升级,以保持用户的高兴趣水平,避免失去动力。
皮克斯工作室的联合创始人艾德·卡姆尔有一句名言:我们最大胆的想法是丑陋的婴儿:“他们真的很丑:笨拙而未成形,脆弱而不完整。他们需要时间和耐心的培养,才能成长。”一开始就有强烈的愿景也有帮助。
5.分析项目缺乏管理层的认同
Photo by Gez Xavier Mansfield on Unsplash
即使以上所有的都考虑到了,如果缺少执行的授权,计划还是会落空。改变并不容易,人类的自然倾向是抵制它。此外,组织通常有相互冲突的优先级。这使得新计划在早期阶段非常脆弱。如果没有精心培育,转型项目成功的机会很小。
你如何称呼它:
创新必须由高层领导才能看到真正的好处。高管们必须展示未来的愿景,并让人们朝着这个愿景努力。你需要坚定地推动放弃旧习惯,有时用不受欢迎的电话来避免旧病复发。确保让下一级的领导者参与进来,他们能够支持该计划并充当变革推动者。
根据德勤的一项调查,高管的支持对组织变革至关重要。首席执行官是领导者的公司比其他公司有 77%的可能大大超过他们的商业目标。
分析项目:经验教训
Photo by Jungwoo-hong on Unsplash
在 Gramener,我们从电信客户流失模型项目中吸取了教训,该项目未能被采用。当下一个机会出现时,这一次是与一家全球企业集团合作,我们以不同的方式启动了数据科学计划。
我们发现,他们最大的业务挑战是在商品采购和销售中做出更好的决策。我们与他们的目标用户一起工作,根据什么是有影响的、紧急的和可行的来区分特性的优先级。我们决定预测商品价格,我们建立了一个最小可行的原型,使用可解释的时间序列模型进行预测。
早期的反馈显示,用户真正想要的是运动的方向,而不是准确的价格预测。我们通过选择不同类别的简单模型来改变解决方案。它被积极地推销给所有的用户群,并不断改进。
我们调动了管理层的力量来为该计划造势并推广使用。在生产中,该解决方案为他们最大的商品之一带来了 2200 万美元的节约潜力。这一次,我们不必看着我们的努力付诸东流,庆祝活动由所有人分享。
如果你觉得这很有趣,你会喜欢我写的这些相关文章:
- 让你在数据科学生涯中不可或缺的 4 种超能力
- 每个数据科学团队需要雇佣的 3 个缺失角色
对数据科学充满热情?随时在LinkedIn上加我,订阅我的 简讯 。
这篇文章最初是在企业家项目上 发表 。增加了插图。
熊猫的 5 个高级功能以及如何使用它们
原文:https://towardsdatascience.com/5-advanced-features-of-pandas-and-how-to-use-them-1f2e2585d83e?source=collection_archive---------16-----------------------
想获得灵感?快来加入我的 超级行情快讯 。😎
Pandas 是所有事物数据的黄金标准库。凭借加载、过滤、操作和探索数据的功能,它成为数据科学家的最爱也就不足为奇了。
我们大多数人自然会坚持熊猫最基本的东西。从 CSV 文件中加载数据,过滤一些列,然后直接进入数据可视化。然而,熊猫实际上有许多鲜为人知但有用的功能,可以使处理数据更加容易和干净。
本教程将指导你完成 5 个更高级的功能——它们的功能和使用方法。数据带来更多乐趣!
(1)配置选项和设置
Pandas 提供了一组用户可配置的选项和设置。他们是巨大的生产力助推器,因为他们让你完全按照你的喜好来定制你的熊猫环境。
例如,我们可以更改 Pandas 的一些显示设置,以更改显示多少行和列,以及显示多少精度的浮点数。
上面的代码确保 Pandas 总是最多显示 10 行和 10 列,浮点值最多显示两位小数。这样,当我们试图打印出一个大的数据帧时,我们的终端或笔记本就不会看起来一团糟!
这只是一个基本的例子。除了简单的显示设置之外,还有更多值得探索的地方。你可以查看官方文档中的所有选项。
(2)组合数据帧
熊猫数据帧的一个相对未知的部分是,实际上有两种不同的方法来组合它们。每种方法都会产生不同的结果,所以根据你想要达到的目标选择合适的方法是非常重要的。此外,它们包含许多进一步定制合并的参数。我们去看看。
连结
串联是组合数据帧的最广为人知的方法,可以直观地认为是“堆叠”。堆叠可以水平或垂直进行。
假设您有一个 CSV 格式的庞大数据集。为了更容易处理,将它分成多个文件是有意义的(这是大型数据集的常见做法,称为分片)。
当您将它加载到 pandas 时,您可以垂直堆叠每个 CSV 的数据帧,为所有数据创建一个大的数据帧。例如,如果我们有 3 个碎片,每个碎片有 500 万行,那么在我们垂直堆叠它们之后,我们最终的数据帧将有 1500 万行。
下面的代码显示了如何垂直连接 Pandas 中的数据帧。
您可以通过根据列而不是行分割数据集来做类似的事情,每个 CSV 文件有几列(包含数据集的所有行)。这就像我们将数据集的要素分成不同的碎片。然后,您可以水平堆叠它们,以组合这些列/特征。
合并
合并更复杂但更强大,以一种类似 SQL 的风格合并 Pandas 数据帧。即数据帧将由一些公共属性连接。
想象一下,你有 2 个数据帧来描述你的 YouTube 频道。其中一个包含用户 id 列表以及每个用户在您的频道上总共花费了多少时间。另一个包含类似的用户 id 列表和每个用户看过多少视频。通过合并,我们可以将两个数据帧合并成一个数据帧,方法是匹配用户 ID,然后将每个用户的 ID、花费的时间和视频计数放在一行中。
在 Pandas 中合并两个数据帧是通过合并功能完成的。您可以在下面的代码中看到它是如何工作的示例。left
和right
参数指的是您希望合并的 2 个数据帧,而on
指定用于匹配的列。
为了进一步模拟 SQL 连接,how
参数允许您选择想要执行的 SQL 风格的连接类型:内部、外部、左侧或右侧。要了解更多关于 SQL 连接的信息,请参阅 W3Schools 教程。
(3)重塑数据帧
有几种方法可以重塑和重组熊猫数据框架。从简单和容易到强大和复杂。让我们来看看 3 个最常见的。对于下面所有的例子,我们将使用这个超级英雄的数据集!
移项
最简单的。转置将数据帧的行与其列交换。如果你有 5000 行 10 列,然后转置你的数据帧,你将得到 10 行 5000 列。
分组依据
Groupby 的主要用途是根据一些键将数据帧分割成多个部分。一旦数据帧被分割成多个部分,您就可以在每个部分上独立地循环和应用一些操作。
例如,我们可以看到在下面的代码中,我们如何创建一个球员的数据框架,并给出相应的年份和分数。然后我们做了一个groupby
来根据玩家将数据帧分成多个部分。因此,每个玩家都有自己的小组,显示该玩家在他们活跃的每一年中获得了多少积分。
堆垛
堆叠将数据帧转换为具有多级索引,即每行具有多个子部分。这些子部分是使用数据帧的列创建的,将它们压缩到多索引中。总的来说,堆叠可以被认为是将列压缩成多索引行。
下面的例子很好地说明了这一点。
(4)使用时间数据
日期时间库是 Python 中的一个主要部分。每当您处理与现实世界的日期和时间信息相关的任何事情时,它都是您的首选库。幸运的是,Pandas 还附带了使用 Datetime 对象的功能。
让我们用一个例子来说明。在下面的代码中,我们首先创建一个包含 4 列的 data frame:Day、month、year 和 data,然后按照 Year 和 Month 对其进行排序。如你所见,相当凌乱;我们使用了 3 列来存储日期,而实际上我们知道日历日期只有 1 个值。
我们可以用日期时间来清理东西。
Pandas 方便地提供了一个名为to_datetime()
的函数,可以将多个 DataFrame 列压缩并转换成一个 Datetime 对象。一旦采用这种格式,您就可以任意使用日期时间库的所有灵活性。
要使用to_datetime()
函数,您需要传递相关列的所有“日期”数据。那是“日”、“月”和“年”栏。一旦我们有了 Datetime 格式的内容,我们就不再需要其他列,可以简单地删除它们。查看下面的代码,看看这一切是如何工作的!
(5)将项目映射到组中
映射是一个帮助组织分类数据的巧妙技巧。例如,假设我们有一个巨大的数据框架,有几千行,其中一列有我们想要分类的项目。这样做可以大大简化机器学习模型的训练和有效地可视化数据。
查看下面的代码,其中有一个小例子,我们有一个要分类的食物列表。
在上面的代码中,我们将列表放入熊猫系列中。我们还创建了一个字典,显示我们想要的映射,将每个食物项目分类为“蛋白质”或“碳水化合物”。这是一个玩具示例,但是如果这个系列是大规模的,比如说有 1,000,000 个项目,那么遍历它根本不实际。
代替基本的 for 循环,我们可以使用 Pandas 内置的.map()
函数编写一个函数,以优化的方式执行映射。查看下面的代码,看看这个函数以及它是如何应用的。
在这个函数中,我们首先遍历我们的字典来创建一个新字典,其中的键表示 pandas 系列中的每一个可能的项目,值表示新映射的项目,“蛋白质”或“碳水化合物”。然后,我们简单地应用 Pandas 内置的 map 函数来映射序列中的所有值
查看下面的输出结果!
['Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein']
结论
所以你有它!你的熊猫的 5 个高级功能以及如何使用它们!
如果你想吃更多,不用担心!关于熊猫和数据科学,还有很多东西要学。作为推荐读物, KDNuggets 网站当然是关于这个主题的最佳资源!
喜欢学习?
在 Twitter 上关注我,在那里我会发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上与我联系!
Python 的 5 个高级特性以及如何使用它们
原文:https://towardsdatascience.com/5-advanced-features-of-python-and-how-to-use-them-73bffa373c84?source=collection_archive---------0-----------------------
想获得灵感?快来加入我的 超级行情快讯 。😎
Python 是一门美丽的语言。简单易用,但表现力很强。但是,您是否使用了它所提供的一切?
任何编程语言的高级特性通常都是通过丰富的经验发现的。你正在编写一个复杂的项目,发现自己在 stackoverflow 上搜索一些东西。然后,您遇到了一个非常优雅的解决方案,它使用了一个您从来不知道存在的 Python 特性!
这是最有趣的学习方式:通过探索和意外发现!
以下是 Python 编程语言的 5 个最有用的高级特性——更重要的是如何使用它们!
(1)λ函数
λ函数是一个小型的匿名函数——匿名是指它实际上没有名字。
Python 函数通常使用def a_function_name()
的风格来定义,但是对于 lambda 函数,我们根本没有给它命名。我们这样做是因为 lambda 函数的目的是执行某种简单的表达式或操作,而不需要完全定义函数。
lambda 函数可以接受任意数量的参数,但必须始终只有一个表达式:
看那有多简单!我们执行了一些基本的数学运算,而不需要定义一个完整的函数。这是 Python 的众多特性之一,使它成为一种干净、简单的编程语言。
(2)地图
Map() 是一个内置的 Python 函数,用于将函数应用于一系列元素,如列表或字典。这是执行这种操作的一种非常干净并且最重要的可读的方式。
看看上面的例子!我们可以将函数应用于单个列表或多个列表。事实上,您可以将地图与您能想到的任何 python 函数一起使用,只要它与您正在操作的序列元素兼容。
(3)过滤
过滤器内置函数与映射函数非常相似,它将函数应用于序列(列表、元组、字典)。关键区别在于 filter() 将只返回应用函数返回为 True 的元素。
请看下面的例子以获得说明:
我们不仅评估了每个列表元素的真或假,而且 filter() 函数还确保只返回匹配为真的元素。非常方便地处理检查表达式和建立返回列表这两个步骤。
(4)迭代工具
Python Itertools 模块是处理迭代器的工具集合。迭代器是一种可以在 for 循环中使用的数据类型,包括列表、元组和字典。
使用 Itertools 模块中的函数将允许您执行许多迭代器操作,这些操作通常需要多行函数和复杂的列表理解。下面的例子展示了 Itertools 的神奇之处!
(5)发电机
生成器函数允许你声明一个行为类似迭代器的函数,即它可以在 for 循环中使用。这大大简化了您的代码,并且比简单的 for 循环更节省内存。
考虑一个例子,我们想把从 1 到 1000 的所有数字加起来。下面代码的第一部分说明了如何使用 for 循环来实现这一点。
如果列表很小,比如长度为 1000,这就很好了。当你想用一个巨大的列表,比如 10 亿个浮点数来做这件事时,问题就出现了。通过一个 for 循环,大量的内存咀嚼列表在内存中创建—不是每个人都有无限的 RAM 来存储这样的东西!Python 中的range()
函数做同样的事情,它在内存中构建列表
代码的第(2)部分演示了使用 Python 生成器对数字列表求和。生成器将创建元素,并仅在需要时将它们存储在内存中,即一次一个。这意味着,如果你必须创建 10 亿个浮点数,你只能在内存中一次存储一个!Python 中的xrange()
函数使用生成器来构建列表。
这个故事的寓意是:如果你想要生成一个大范围的列表,使用生成器或者xrange
函数。如果您有一个真正对内存敏感的系统,如移动或边缘计算,这一点尤其正确。
也就是说,如果你想多次迭代这个列表,并且它足够小,可以放入内存,那么使用 for 循环和range
函数会更好。这是因为生成器和xrange
会在你每次访问它们的时候生成新的列表值,而range
是一个静态列表,整数已经存在于内存中以供快速访问。
喜欢学习?
在推特上关注我,我会在这里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上与我联系!
数据可视化的 5 个惊人技巧
原文:https://towardsdatascience.com/5-amazing-tips-for-data-visualization-990fdb19c396?source=collection_archive---------8-----------------------
快速将数据转化为有洞察力的东西。
Shutterstock by majcot
有没有针对分析师的数据可视化模块?就像一个盯着空白画布的画家或一个写不出第一句话的作家——你可能是一个只盯着 Excel 中的数据墙的分析师。
或者也许你只是觉得自己像一只想要学习新技巧的老狗?
这个列表包含了我最喜欢的 5 种持续产生有效数据可视化的技术。它还有助于防止这种可怕的数据可视化阻塞。再见数据墙…你好洞察!
- 散点图你最感兴趣的两个指标
在审查一个利益相关者的新仪表板时,我们收到了一条让我深思的评论。他们说,“这很好地描述了到底发生了什么,但没有多少采取行动的洞察力。”
在商业智能中,可视化所发生的事情通常比可视化可操作的见解容易得多。
这就是散点图出现的地方。
散点图被广泛用于评估两个指标之间的相关性。经常被忽视的是,它们实际上有另一个用例。这种变化通常被称为象限图。
首先,确定两个重要或有趣的指标。其次,至少要有一个你可以采取行动的维度,比如州、员工或营销活动。那就散开吧!
例如,在市场营销中,我们经常关心两个指标。效率方面的营销绩效(以较低的营销支出获得尽可能多的客户)。质量方面的营销绩效(获得高价值的客户)。
当我们按活动分散这两个指标时,我们可以快速清晰地看到好的和坏的方面。
Made with Tableau
该散点图的作用是将资金从活动 E 和 J 中抽出,投入到活动 D 和 h 中。这种方法非常有效,因为它将你的维度划分为四个易于理解的象限。
数据可视化专家 Ben Jones 最初向我展示了散点图的这种变化。第二个例子是他的象限图。他使用颜色作为第三维度,而不是将颜色分配给象限。
Visualization on Tableau Public
作为一个叫谢尔比的人,我发现自己处于许多尴尬、不幸的境地。这种形象化让我感觉更好,因为谢尔比·米勒不仅仅是一个叫谢尔比的人,他也是最不幸的投手。
有人认为散点图对于非技术观众来说太复杂了。非技术观众只能理解条形图和折线图。我拒绝相信这个。我真的认为这种思路已经过时了。我们生活在互联网和大数据时代,对数据分析的了解要多得多。很肯定大多数人都见过散点图。
在工作中,我从未向非技术人员展示过象限图,这是一个失败。老实说,恰恰相反。
2。使用许多相同的数据可视化促进比较
设计理论家爱德华·塔夫特说:“唯一比饼图更糟糕的是其中的几个。”
尽管我觉得这句话很好笑,但我实际上不同意爱德华·塔夫特的观点。他有第二个更重要的引述,与第一个相矛盾。
"对于数据表示中的各种问题,小倍数是最好的设计解决方案."
小倍数是反复使用相同的数据可视化来促进比较。让我们直接看一个馅饼热起作用的例子。这是由数据可视化专家安·杰克森创造的。
Visualization on Tableau Public
当你可以比较不同的对象时,描述性分析是最好的。如果我们把所有这些馅饼合在一起,说“在美国,椅子占销售额的 25%”会怎么样没有上下文,很难快速理解这是什么意思。
小倍数可以给观众带来闪电般的语境。我们的眼睛和大脑天生就能迅速察觉到一件事与另一件事不一样。可能有助于生存之类的东西。
条形图实际上会带走这一指标的总和为 100%。抱歉,讨厌饼状图的人,这实际上是饼状图更好的选择。但是,我们不要忘乎所以——当有疑问的时候,用条形图表示出来。
只是想指出,小倍数有时也被称为格子图。
3。确保清晰让你创造清晰
如果你坐在电脑前不知道从哪里开始,你可能会错过一些非常重要的东西——清晰项目。
从问自己两个问题开始。
- 我的客户/利益相关者是否清楚地陈述了他们想要回答的问题?
- 我们是否就我将在数据集中使用的指标和计算达成一致?
听起来很简单,对吗?然而,我已经看到并参与了许多忽视目标、业务、目的、问题等的项目。
我们最成功的仪表板通常有两个品质,良好的数据和对我们想要回答的问题的高度关注。
这个技巧是一个简单的两步过程:
- 确保客户/利益相关方的明确性
- 如果你不能从客户/利益相关者那里获得清晰的信息,那就站在他们的角度,创造你自己的问题来询问数据
这就是为什么确保清晰可以让你创造清晰!再见数据墙…你好洞察!
4。时间序列变化控制图
我们的销售额比上周下降了 20%!拉响警报。快速查询一堆乱七八糟的东西,叫“司机”!
呀!这是描述性分析中最常见、最不幸的情况之一。您发现导致销售额比前一周下降 20%的真实因素组合的可能性有多大?几乎没有。
这个提示将帮助你至少开始理解这 20%的下降是否真的值得注意,或者仅仅是基于历史结果的随机变化。
时间序列有分布。您可以用周作为频率来绘制指标的直方图。您可以使用分布和变化来计算标准偏差。这样,您就可以用一个上限和下限来包装您的时间序列图。
Made with Tableau
控制图有助于我们评估这种增减是否真的不寻常,或者只是随机变化。我们可以推后说 20%的下降是绝对正常的,而不是花一整个下午进行消防演习分析。
根据我上面的销售数据,你可以看到 2018 年 5 月 13 日的销售额比前一周下降了 20%。但是,它在控制图范围内,所以我们可以将其评估为数据中的正常变化,而不是关注真正异常的几周。
如果你想控制 tableau 中的图表,这里有一个教程。
需要更多的帮助来防止这些时序消防演习?更好的选择是用 A/B 测试或准测量方法来补充描述性分析,例如差异中的差异。我真的很喜欢谷歌开源的一个叫做因果影响的包,它通过时间序列建模来帮助区分随机变化和真实影响。
5。分配大量时间用于设计和格式化
下次你向观众展示时。以这句话开头,“今天,我希望与你建立零信任,零信誉。”从来没有人用这个打开过。
数据可视化的全部意义在于与受众交流。在数据和分析领域,可信度和信任至关重要,但也很脆弱。
设计和格式是表现专业、可信和赢得观众信任的最简单的方法之一。然而,我一次又一次地看到人们在设计和格式上花费很少的精力。令人遗憾的是,分析和数据非常棒,却从未引起观众的共鸣。
数据可视化不仅仅是处理数字和显示结果。目标是要有洞察力和吸引力。
我喜欢 Ryan Sleeper 在他的书《实践的舞台》中所说的,“……如果不能用高质量的设计来平衡数据质量,你的数据可视化将永远无法发挥其全部潜力。”
是时候在你的时间表中划出至少一部分专门用于设计了。如果你不同意,我会把你送到黑板前。
用 Python 学习机器学习和数据科学的 5 个初学者友好步骤
原文:https://towardsdatascience.com/5-beginner-friendly-steps-to-learn-machine-learning-and-data-science-with-python-bf69e211ade5?source=collection_archive---------2-----------------------
“我想学机器学习和人工智能,从哪里开始?”给你。
Photo by Sam Bourke. Thank you Sam.
两年前,我开始自学在线学习机器学习。我通过 YouTube 和我的博客分享了我的旅程。我不知道我在做什么。我以前从未写过代码,但我决定学习机器学习。
当人们发现我的作品时,他们有时会伸出手来问问题。我没有所有的答案,但是我尽可能的回复了。我得到的最常见的问题是“我从哪里开始?”下一个最常见的问题是“我需要知道多少数学知识?”
今天早上我回答了其中的几个问题。
有人告诉我,他们已经开始学习 Python,并希望进入机器学习领域,但不知道接下来该做什么。
我学了 Python,接下来该怎么做?
我在回复中总结了几个步骤,并把它们复制到这里。你可以把它们看作是从不知道如何编码到成为机器学习实践者的粗略轮廓。
我的学习风格是代码第一。首先让代码运行起来,在需要的时候学习理论、数学、统计和概率,而不是在此之前。
请记住,如果你开始学习机器学习,它可能会令人生畏。有很多。慢慢来。把这篇文章放在书签里,这样你可以边走边参考。
我倾向于使用 Python,因为这是我开始使用并继续使用的。您可以使用其他东西,但这些步骤将用于 Python。
1.学习 Python、数据科学工具和机器学习概念
邮件里说他们已经做了一些 Python。但这一步也是为完全陌生的人准备的。花几个月时间学习 Python 代码,同时学习不同的机器学习概念。你两个都需要。
在学习 Python 代码的同时,练习使用 Jupyter 和 Anaconda 等数据科学工具。花几个小时摆弄它们,它们的用途以及为什么你应该使用它们。
学习资源
- AI要素——主要人工智能和机器学习概念概述。
- 构建机器学习项目的 6 步实地指南——概述了许多实用步骤,你可以开始在各种不同的商业问题上使用机器学习。
- Coursera 上的Python for Everybody—从零开始学习 Python。
- 通过 freeCodeCamp 学习 Python——一个视频中所有主要的 Python 概念。
- 科里·斯查费的《Anaconda 教程》 —在一个视频中学习 Anaconda(你将使用它来设置你的计算机进行数据科学和机器学习)。
- data quest 提供的 Jupyter 笔记本初学者教程 —在一篇文章中开始使用 Jupyter 笔记本。
- 科里·斯查费的 Jupyter 笔记本教程 —通过一个视频了解如何使用 Jupyter 笔记本。
2.使用 Pandas 学习数据分析、操作和可视化
一旦你掌握了一些 Python 技能,你就会想要学习如何处理和操作数据。
为此,你应该熟悉一下熊猫、 NumPy 和 Matplotlib 。
熊猫将帮助你处理数据框架,这些是你在 Excel 文件中看到的信息表。想想行和列。这种数据称为结构化数据。
NumPy 将帮助您对数据执行数值运算。机器学习把你能想到的一切都变成数字,然后在这些数字中找到模式。
Matplotlib 将帮助您制作数据的图表和可视化。理解表格中的一堆数字对人类来说可能很难。我们更喜欢看到有一条线穿过的图形。可视化是交流你的发现的一个重要部分。
学习资源
- 在 Coursera 上使用 Python 应用数据科学 —开始为数据科学定制您的 Python 技能。
- 10 分钟内的熊猫 —熊猫图书馆及其一些最有用功能的快速概述。
- Python 熊猫教程(code basics)—YouTube 系列,介绍熊猫的所有主要能力。
- freeCodeCamp 的 NumPy 教程 —在一个 YouTube 视频中学习 NumPy。
- Sentdex 的 Matplotlib 教程——YouTube 系列,教授 Matplotlib 所有最有用的特性。
3.用 scikit-learn 学习机器学习
现在,您已经掌握了操纵和可视化数据的技能,是时候找出其中的模式了。
scikit-learn 是一个 Python 库,内置了许多有用的机器学习算法供您使用。
它还具有许多其他有用的功能,可以计算出你的学习算法学得有多好。
重点学习有什么样的机器学习问题,比如,分类和回归,什么样的算法最适合那些。先不要从头开始理解每种算法,先学习如何应用它们。
学习资源
- 使用 scikit 的 Python 中的机器学习-由数据学校学习-YouTube 播放列表,它教授 scikit-learn 中的所有主要功能。
- Daniel Bourke 对探索性数据分析的温和介绍——将你在上面两个步骤中学到的东西放在一个项目中。附带代码和视频,帮助您参加首次 Kaggle 比赛。
- Daniel Formosso 的探索性数据分析笔记本,带 scikit-learn —以上资源的更深入版本,附带使用以上内容的端到端项目。
4.学习深度学习神经网络
深度学习和神经网络最适合没有太多结构的数据。
数据帧有结构,图像、视频、音频文件和自然语言文本有结构,但没有那么多。
花絮:在大多数情况下,您会希望对结构化数据使用决策树(随机森林或 XGBoost 之类的算法)的集合,并且会希望对非结构化数据使用深度学习或转移学习(采用预先训练的神经网络并将其用于您的问题)。
你可以用像这样的小花絮开始一个笔记,并在进行中收集它们。
学习资源
- Coursera 上吴恩达的 deep learning . ai——深度学习由商界最优秀的人之一讲授。
- 杰瑞米·霍华德的 fast.ai 深度学习课程 —由行业最佳实践者之一讲授的深度学习实践方法。
5.额外课程和书籍
在这个过程中,如果你用自己的小项目来实践你所学的东西,那将是非常理想的。这些不一定是改变世界的精心制作的东西,但是你可以说“我用 X 做了这个”。然后通过 Github 或博客分享你的作品。Github 用来展示你的代码,博客文章用来展示你如何交流你的工作。您应该致力于为每个项目发布一个。
申请工作的最好方法是已经做了工作要求的事情。分享你的工作是向未来的潜在雇主展示你能力的好方法。
在你熟悉使用机器学习和深度学习的一些不同框架后,你可以尝试通过从头开始构建它们来巩固你的知识。你不需要总是在生产或机器学习中这样做,但是从内部了解事情是如何工作的将会帮助你建立你自己的工作。
学习资源
- 如何开始自己的机器学习项目丹尼尔·伯克(Daniel Bourke)—开始自己的项目可能很难,本文给你一些建议。
- fast.ai《从基础开始深度学习》作者杰瑞米·霍华德——一旦你已经自上而下,本课程将帮助你自下而上地填补空白。
- 探索深度学习作者 Andrew Trask——这本书将教你如何从头开始构建神经网络,以及为什么你应该知道如何去做。
- 这些书将帮助你学习丹尼尔·伯克的机器学习。
每一步需要多长时间?
你可以在每个项目上花 6 个月或更长时间。不要着急。学习新事物需要时间。作为一名数据科学家或机器学习工程师,你正在培养的主要技能是如何提出好的数据问题,然后使用你的工具尝试并找到答案。
有些日子你会觉得你什么也没学到。甚至倒退。忽略它。不要日复一日地比较你的进步。比较你每年的进步。
在哪里可以学到这些技巧?
我在上面列出了一些资源,它们都可以在网上找到,而且大部分都是免费的,但是还有很多。
DataCamp 是做这些事情的好地方。否则,我的机器学习和人工智能资源库包含了很好的免费和付费学习资料存档。
请记住,作为数据科学家或机器学习工程师的一部分是解决问题。把你的第一个任务看作是找到更多关于这里每个步骤的信息,并创建你自己的课程来帮助你学习它们。
如果你想知道机器学习的自学课程是什么样的,请查看我的自创人工智能硕士学位。这就是我过去在 9 个月内从零编码到成为机器学习工程师的经历。它并不完美,但它是我的,这就是它成功的原因。
统计呢?数学呢?概率呢?
你会一路学到这些东西。先从代码开始。让事情运转起来。在运行你的代码之前,试图学习所有的统计数据,所有的数学,所有的概率就像试图煮沸海洋。它会拖你的后腿。
如果你的代码不能运行,那么统计学、数学和概率都没用。让一些东西工作起来,然后用你的研究技能去发现它是否正确。
认证呢?
证书很好,但你并不追求它们。你在追求斯奇尔斯。
不要犯我的错误,认为更多的证书就意味着更多的技能。他们没有。
通过上述课程和资源建立基础知识,然后通过自己的项目建立具体知识(无法教授的知识)。
如果您有问题,请在下面留下评论,以便其他人可以看到。否则,请随意向伸出。在可能的地方使用了附属链接,点击这里阅读更多关于我与的合作伙伴的信息。
你可以在 YouTube 上找到这篇文章的视频版本。
使用求职机器人招聘的 5 大好处
原文:https://towardsdatascience.com/5-benefits-of-using-job-bots-for-recruitment-e0bd7d0fdd23?source=collection_archive---------23-----------------------
原载于
开发智能招聘机器人,让招聘人员和候选人的生活变得更快更简单。
不可否认,印度是 bot 发展的最大市场之一。聊天机器人的发展有了显著的增长。许多公司已经接触到了聊天机器人创意,涉及电子商务、银行、教育、医疗保健、职业咨询等多个行业。
尽管如此,聊天机器人开发服务市场中还有一个领域仍在发展,那就是招聘行业。我们并不是没有用于招聘的聊天机器人。但他们非常少,大多数企业在招聘候选人时仍然更信任人类而不是机器人。
然而,我们不要忘记这样一个事实,公司因为雇佣了糟糕的候选人而遭受巨大的损失。据统计:超过 25%的公司去年遭受了 5 万美元的损失,这不是一个小数目。
现在,如果企业在招聘过程中使用招聘机器人,事情会有所不同。他们本可以通过咨询最好的聊天机器人开发公司来避免这种损失
在招聘过程中使用工作机器人的好处是惊人的,在这篇博客中,我将会谈论它们。那么,让我们开始吧:
Image by author
使用机器人招聘的好处
1.快速招聘
对于招聘人员来说,雇佣候选人的过程是漫长而令人疲惫的。投放广告,在工作平台上跟踪候选人,通过电子邮件或电话联系每个候选人,安排面试,然后选择一个他们认为符合所有工作要求的候选人并不容易。整个过程需要几周,有时甚至几个月。
然而,工作机器人可以将整个招聘过程缩短到一两天。你知道怎么做吗?作者:
- 只选择那些严格符合选择标准的潜在候选人。
- 在保证有回应的平台上接触候选人。
- 快速审查申请和安排面试。
总的来说,招聘机器人可以帮助你更快地招聘到候选人,这也是它们非常受欢迎的原因。
2.繁琐任务的自动化
有几件小而关键的事情会导致招聘过程的延迟。例如,手动准备潜在候选人的列表。这是一个需要花费大量时间和精力的漫长过程。此外,出现错误的可能性也很大。有时,招聘人员非常忙,几乎没有时间去查看每个候选人的个人资料,看看他/她是否符合选择标准。
甚至安排面试的过程也同样忙碌。这涉及到很多麻烦,比如通知候选人面试,反复核对他们来不来,提醒面试官已经安排好了面试等等。在工作机器人的帮助下,你可以自动完成所有这些繁琐的任务,从而减少招聘时间,让招聘变得更轻松。所以建议联系 AI 开发公司,向他们咨询 bot 开发。
3.更好的候选人体验
让我用一个例子来更好地解释这一点,我的一个朋友期待申请一家 IT 服务公司的职位。所以,她花了几个小时完善她的简历,对公司做研究,写一封有吸引力的求职信。最后,在反复核对了一切之后,她申请了这个职位。作为回报,她收到的只是招聘人员冷冰冰的电子邮件回复:谢谢你的申请。我们会尽快与您联系。
她再也没有公司的消息了。她发了后续邮件,但没有回应。现在,我的朋友很生气。她在 LinkedIn 上写了一篇长文,公开羞辱了该公司。成千上万的人阅读了她作为候选人的经历,公司的声誉遭受了重大挫折。但这一切都是可以避免的。
他们所做的就是在我的朋友提出申请后对她进行跟进。然而,问题是招聘人员每天会收到成千上万封电子邮件,不可能对每封邮件都进行跟进。这就是客服聊天机器人形式的招聘机器人发挥作用的地方。他们不仅不时跟踪候选人,还在整个招聘过程中指导他们。这将改善候选人的体验,并让你的品牌处于正面的聚光灯下。
4.降低雇佣成本和时间
由于工作机器人正在使用非常先进的算法来选择特定职位的候选人,因此选择不符合工作要求的候选人的机会是最小的。这意味着你不必浪费时间和资源去面试错误的候选人。相反,你只需要专注于正确的事情。此外,这些招聘机器人可以自动完成一些小任务,如准备面试候选人的记录,通知他们面试日期,跟进,安排面试,收集面试官的反馈等。当您手动执行这些任务时,需要花费数天甚至数周的时间。
此外,由于你已经和你第一次面试的候选人建立了良好的关系,你可以很容易地通过直接向这些人推销来节省成本和时间。总体而言,在求职机器人的帮助下,你可以将面试的时间和成本减少 50 %- 60 %,这可不是一个小数字。
5.增加雇用有才能的候选人的机会
人工选择候选人的过程是有缺陷的。有时候,我们最终会拒绝有才华的候选人,而雇佣那些毫无才华的人。这不仅浪费了公司的时间和资源,还误导应聘者认为公司对人才没有价值。但我们不能因此责怪招聘人员。毕竟他们也是人,也会犯错。此外,他们还会收到成千上万份求职申请,必须一一审核。所以,他们可能会忽略一两个。
然而,像 Textkernel 这样的人工智能工具会密切关注你在潜在候选人中寻找什么,并向你推荐它们。这减少了出错的机会,确保你不会错过任何有才华的人。那么,你应该使用机器人进行招聘吗?我的回答是:是的,为什么不呢?
与其他行业一样,人工智能也可以被证明是招聘领域的游戏规则改变者。使用求职机器人,你可以更快、更低的招聘成本雇佣到有才华的候选人。这是大多数公司已经开始在招聘过程中使用它们的主要原因,他们实际上正在从中受益。
因此,在招聘中不使用人工智能机器人,你肯定会错过很多东西。那么,你还在等什么?赶快联系一家聊天机器人开发公司吧。
进入数据科学的 5 个最佳学位
原文:https://towardsdatascience.com/5-best-degrees-for-getting-into-data-science-c3eb067883b1?source=collection_archive---------5-----------------------
Image Source: Collections of my data science articles.
数据科学是一个广阔的领域,包括几个细分领域,如数据准备和探索;数据表示和转换;数据可视化和显示;预测分析;机器学习等。对于初学者来说,学习数据科学的基础知识可能是一项非常艰巨的任务,特别是如果您没有适当的指导,无法了解所需的必要培训,或者要学习哪些课程,以及学习的顺序。在讨论容易导致数据科学的学位培训项目之前,让我们讨论一下数据科学所需的基本技能。
在之前的一篇文章( 数据科学最低要求:开始做数据科学需要知道的 10 个必备技能 )中,我讨论了从业数据科学家必备的 10 个必备技能。这些技能可以分为两类,即技术技能(数学&统计、编码技能、数据争论&预处理技能、数据可视化技能、机器学习技能和真实世界项目技能)和软技能(沟通技能、终身学习技能、团队合作技能和道德技能)。
虽然数据科学需要多种技能,但由于其多学科的性质,可以被视为数据科学先决条件的 3 种基本技能是数学技能、编程技能和解决问题技能。
分析学科的学位将为你提供数据科学所需的基本技能。每个在分析学科有很强背景的人基本上都可以通过自学来学习数据科学。
如果你有分析学科的背景,并且正在考虑数据科学,这里有一些你可以用来自学的资源:
(一) 数据科学专业证书 (HarvardX,直通 edX)
(二) 分析:基本工具和方法 (Georgia TechX,through edX)
(三) 应用数据科学与 Python 专业化 (密歇根大学,通过 Coursera)
(四)“Python 机器学习”,塞巴斯蒂安·拉什卡著。这本书提供了关于数据科学和机器学习的很棒的介绍,包括代码:“Python 机器学习”,作者 Sebastian Raschka 。作者以一种非常容易理解的方式解释了机器学习的基本概念。此外,代码也包括在内,因此您实际上可以使用提供的代码来练习和构建您自己的模型。我个人认为这本书在我作为数据科学家的旅程中非常有用。我会向任何数据科学爱好者推荐这本书。你所需要的是基本的线性代数和编程技能,以便能够理解这本书。
现在让我们来讨论 5 个可以轻松通向数据科学的最佳学位项目。我会试着给这些程序排序,从最好的开始,一路往下。我的排名可能有偏见,我想是因为我的背景,但请告诉我。
进入数据科学的 5 个最佳学位
1.物理学
我想把物理放在我清单的首位。我可能有偏见,因为我自己就是一个训练有素的物理学家。但是我觉得这个排名很有道理。物理学学位是最通用的学位项目之一。物理学学位为解决问题、分析技能、数学技能和编程技能提供了坚实的基础。这些技能很容易转移。这解释了为什么你可以找到在不同领域工作的物理学学位持有者,如学术界、技术、银行和金融、研发、软件工程、法律、军事、数据分析师等。
如果你目前正在攻读物理学学位,并且正在考虑数据科学,请确保你参加了一些编程课程。一些编程方面的背景知识是你在数据科学方面所需要的。你也可以选一些基础和高级统计和概率的课程。
2.数学
我会把数学放在第二位。就像物理学一样,数学也是一个非常多才多艺的领域,拥有数学背景可以通向几个学科,如银行和金融、工程、卫生部门、研发等。扎实的数学和统计学背景是数据科学最重要的技能。
如果你目前正在攻读数学学位,并且正在考虑数据科学,请确保你参加了一些编程课程。此外,参加一些基础和高级统计和概率的课程也很重要。
3.计算机科学
计算机科学学位在我的清单上排在第三位。就像物理和数学一样,计算机科学培训项目为解决问题、数学和编程技能提供了良好的基础。编程技能在数据科学中至关重要。
如果你目前正在攻读计算机科学学位课程,并正在考虑数据科学,请确保你参加了一些数学课程,如微积分、线性代数、统计和概率以及优化方法。
4.工程
任何工程学位课程,如机械工程、电气工程或工业工程,都将为您提供数据科学所必需的分析技能。
如果你目前正在攻读工程学位,并且正在考虑数据科学,请确保你参加了一些编程课程以及一些统计和概率方面的基础和高级课程。
5。经济学、会计学或商业学位
这些领域的学位也可以作为通向数据科学的途径。与物理和数学等课程相比,这些课程提供的分析技能可能缺乏数学的严谨性,但经济学或会计学学位将为人们提供商业技能,这在数据科学的现实应用中是必不可少的。
如果你目前正在攻读经济学、会计学或商业学位课程,并且正在考虑数据科学,请确保你参加了一些数学课程,如微积分、线性代数、统计和概率,以及编程课程。
总之,我们已经讨论了可以作为通向数据科学之路的 5 个学位项目。任何有正确动机和热情的人都可以学习数据科学的基础。然而,在物理、数学、计算机科学、工程或经济学等分析学科的背景将是一个额外的优势。
5 本关于微服务的最佳书籍
原文:https://towardsdatascience.com/5-best-microservices-book-db981ef9c433?source=collection_archive---------1-----------------------
以正确的方式设计微服务架构的必备书籍
Photo by Gabriel Sollmann on Unsplash
对于复杂的应用程序,微服务架构提供了许多吸引人的优势,正如我在以前的帖子“ 微服务架构:简要概述以及为什么你应该在你的下一个项目 中使用它”中详细讨论的那样。设计微服务是一项极具挑战性的任务。更糟糕的是,如果微服务设计不当,注定会失败。开发人员和架构师应该事先对微服务架构有一个清晰的了解,才能设计微服务架构。如今,开发人员使用堆栈溢出、在线课程或博客帖子来了解某个主题。我建议通过彻底阅读一些书籍来补充在线课程、会议、博客帖子,以避免设计微服务中的陷阱。
在这里,我列出了五本书,它们将有助于更好地理解微服务架构以及如何在现实项目中使用它。
1。 构建微服务
Sam Newman是微服务架构的早期开拓者和微服务大师之一。在这本开创性的书中,他详细描述了微服务架构的原理以及如何设计、部署、测试和观察微服务架构。他还指出了设计微服务的潜在陷阱,以及如何以渐进的方式将 Monolith 应用程序迁移到微服务中。另外,萨姆·纽曼的文字优雅、清晰,他用一种令人惊讶的简单方式解释了如此复杂的话题。这是任何想从事微服务的人必读的一本书
②。微服务模式
克里斯·理查森 是一位享有盛誉的微服务专家,他还运营着一个最受欢迎的 微服务博客 。在本书:微服务模式中,Chris Richardson 描述了微服务架构的优势以及微服务的劣势和挑战。对于每个挑战,他都会提供一个或多个解决问题的模式以及它们的优缺点。这本书还总结了微服务世界中使用的所有模式。
3。 微服务—实用指南
Eberhard Wolff是德国著名的软件架构师,写过几本关于微服务的德语和英语书籍。微服务的主要挑战之一是它为不同的问题提供不同的解决方案,选择正确的解决方案相当困难。《微服务——实用指南》这本书在这方面非常有用,因为它为不同的问题提供了不同的解决方案,包括它们的优缺点。本书还花了大量时间讨论云原生微服务,如 Docker、Kubernetes、服务网格等。
4。实现领域驱动设计
微服务的最大挑战是如何将一个复杂的业务应用程序分割成不同的松散耦合的服务。幸运的是,领域驱动设计可以在这方面有所帮助。领域驱动设计提倡分两步设计软件:战略设计和战术设计。在战略设计中,IT 和业务一起寻找核心领域、支持领域、无处不在的语言和上下文映射。在战术设计中,它将每个域分解成更小的构建块,例如实体、值对象、聚合和聚合根。因此,领域驱动设计有助于找到微服务的边界和构建模块。为了深入了解领域驱动设计,我更喜欢由Vaughn Vernon写的“红皮书,而不是由Eric Evans写的原版蓝皮书,因为这本书可读性更好,并且使用了现代技术栈(例如,事件源,CQRS)。
5。设计数据密集型应用
微服务的另一个困难挑战是将中央数据存储拆分为特定于微服务的数据存储,然后在微服务之间共享数据/消息。此外,微服务架构提倡为微服务使用合适的数据存储,这可能会导致多语言数据库。因此,对现代数据存储、数据转换、数据共享的深刻理解对于设计有效的微服务至关重要。Martin Kleppmann Martin Kleppmann 雄辩地深入讨论了关于数据的一切:SQL、NoSQL 数据库、数据存储格式、数据传输格式、消息队列。这是关于现代数据管理最全面最完整的一本书,也是微服务架构师的必读书籍。
如果你觉得这很有帮助,请分享到你最喜欢的论坛上( Twitter,脸书,LinkedIn )。高度赞赏评论和建设性的批评。感谢阅读!
如果你对微服务架构感兴趣,也可以看看我下面的文章:
* [## 有效的微服务:10 个最佳实践
正确实施微服务架构的 10 个技巧
towardsdatascience.com](/effective-microservices-10-best-practices-c6e4ba0c6ee2) [## 微服务架构:简要概述以及为什么您应该在下一个项目中使用它
微服务架构的背景以及微服务架构相对于整体架构的优势
towardsdatascience.com](/microservice-architecture-a-brief-overview-and-why-you-should-use-it-in-your-next-project-a17b6e19adfd) [## 微服务架构及其 10 个最重要的设计模式
微服务架构、每个微服务的数据库、事件源、CQRS、Saga、BFF、API 网关、扼杀者、电路…
towardsdatascience.com](/microservice-architecture-and-its-10-most-important-design-patterns-824952d7fa41)*
人工智能和数据驱动的呼叫中心的 5 个最佳实践
原文:https://towardsdatascience.com/5-best-practices-for-ai-and-data-driven-call-centers-647406b4234b?source=collection_archive---------12-----------------------
在过去的十年中,呼叫中心发生了革命性的变化。虽然一些静态呼叫脚本和一刀切的策略仍然存在,但技术已经彻底改变了呼叫中心的运作方式。如今,呼叫中心拥有独特的能力,可以利用所有可用的数据来推动每次客户互动。这些数据源包括客户正在查看的数字营销活动、客户在过去一小时内完成的交易、客户的上一份账单或下一份账单,以及客户刚刚在电话中询问的内容。
人工智能中的分层还可以包括终身价值、流失倾向、客户满意度、情绪、购买可能性、信用风险等。这种类型的呼叫中心可以利用成功的在线策略,并使用技术从每个呼叫中产生最大的商业价值,即使每个呼叫中采取的行动可能非常不同。
呼叫中心必须为客户提供无缝、便捷的体验,否则就有可能输给竞争对手。美国运通发现,78% 的消费者因为糟糕的服务体验而放弃交易或没有购买意向。为了确保这种情况不会发生,许多呼叫中心正在转向人工智能和机器学习等技术,为他们提供下一个最佳行动、客户流失率和保留率、产品购买倾向等细节。
这里有五个数据驱动的呼叫中心的最佳实践,可以使用人工智能和大数据改善销售和客户体验。
1.实施智能呼叫路由
呼叫路由优化了人力资源成本,并有助于将正确的客户联系到正确的代表。人工智能不仅考虑到呼叫的原因,还考虑到呼叫的终身价值和复杂性,可以为给定的客户确定最佳的可用服务组。
或者,许多人选择使用基于技能的呼叫路由,这是基于对促销做出响应的可能性。如果一个呼叫中心团队正在处理促销 X 和另一个促销 Y,则可以根据可能的呼叫者行为将呼叫路由到适当的团队。为了最大限度地减少偏差,呼叫的子集应该采用循环路由方法,这有助于在使用人工智能模拟客户和代理行为时确保代表性样本。将人工智能分层到基于技能的呼叫路由,确保客户找到能够帮助他们的正确代理。
2.利用对话的背景
背景在呼叫中心至关重要,因为它使代理能够提供个性化的对话。通过使用数据,代理可以全面了解客户。历史数据显示客户已经如何与公司互动,而实时数据为消费者提供持续的体验(从移动设备到网站再到实体店)。
上下文也让客户的过程更容易,因为他们不需要重新解释他们的问题或疑问。此外,上下文是呼叫路由的一个关键因素,它可以快速将正确的客户联系到正确的代理。预测分析可以确定客户可能有哪些问题或顾虑。
背景对聊天机器人也至关重要。糟糕的静态聊天机器人对公司来说毫无用处,对客户来说也令人沮丧。然而,利用对话环境的聊天机器人可以在极其拥挤的市场中脱颖而出。聊天机器人也比代理便宜,但如果不进行优化,它们就会变得无关紧要。人工智能助手现在利用对话的上下文来更好地响应提示。许多人注意到 Siri、Alexa 和其他助手的能力越来越强,因为机器学习的进步改善了自然语言处理。
3.使用代理或个性分析
虽然大多数呼叫中心只关注客户,但关注代理也很重要。每个代理都有不同的沟通方式,吸引不同的客户群。有些代理人不能处理消极的呼叫者,而有些代理人擅长这种设置。公司应该查看代理的个性档案,并查看经验水平、销售经验、销售数字、电话处理时间等。更好地匹配客户和代理。
人工智能可以在这方面提供帮助。例如,一个代理可能擅长向刚刚下载了公司应用程序的客户销售。公司可以将这些电话转给那个代理人,以增加销售额。虽然大部分数据围绕着客户档案,但企业应该关注代理档案,以创造销售匹配。
4.关注 CRM 集成
客户关系管理系统使代理能够快速访问客户、促销、活动历史等所需的数据。许多客户现在开始期待的个性化服务,只有在强大的 CRM 与基于智能的呼叫路由相结合的情况下才有可能实现。客户关系管理系统可以跟踪客户如何与品牌互动以及他们已经拥有什么产品的信息,这意味着提供问题的答案,并更容易地建议另一次购买。
有了这些信息,代理可以使用定制的提示,推销客户更有可能购买的产品或附加产品。
5.关闭循环
当代理向客户提供服务时,应跟踪所有回应。诸如接受或拒绝报价、未报价、报价、购买等响应。每一个都有原因和代码,这对企业来说是至关重要的信息。综合考虑所有的信息,人工智能可以帮助发现模式。例如,也许代理使用特定的营销提示不断地进行销售。公司应利用这些数据获得信息性见解,并相应地编辑提示和报价。其他指标,如响应时间、处理时间、放弃率等。对于发现在呼叫中心什么行得通,什么行不通也很重要。
所有这些响应数据对于开始利用机器学习和人工智能至关重要。在通话数据中获得良好或不良响应的良好历史记录是一个关键的切入点。通过收集代理的信息、采取的行动和响应,公司可以利用人工智能和机器学习来创建更具洞察力的模型,供呼叫中心使用。
改善客户体验
最终,企业希望为消费者创造个性化的积极体验。美国运通发现,人们平均会告诉 9 个人好的经历,告诉 16 个人不好的经历。这项统计表明,虽然营销呼叫中心可能不会因为提供良好的体验而获得同样多的信任,但糟糕的体验可能会产生持久的影响。公司可以通过利用数据和使用这五种最佳实践来提高销售率,并为客户提供高质量的体验。
如果你的呼叫中心需要一个更加数据驱动的方法, Quickpath 可以帮助你。联系我们开始吧。
提高你快速和慢速思维的 5 本书
原文:https://towardsdatascience.com/5-books-to-improve-your-fast-slow-thinking-96cfb798ecbc?source=collection_archive---------26-----------------------
不要让你的系统 1 来评判这个帖子。
这里有 5 本书可以增强你的决策能力。它们有望让你的两个认知过程系统变得更好,增强你的直觉和深思熟虑。下面你会找到我的理由,告诉你为什么你应该联系每一个人,并附上一句话来鼓励你这样做。我的最佳建议是慢慢阅读,同时将你学到的东西应用到你的日常生活中。
可预测的非理性|丹·艾瑞里
读了它,你会更加意识到我们人类是多么的不理性。这本书充满了实地实验,以展示有趣的事实,如你为什么总是在时装店排队时购买 3x2 的袜子。
“为了眼前的满足而放弃我们的长期目标,我的朋友,是拖延症”
赤裸裸的统计|查尔斯·惠兰
阅读它来学习统计学的基本概念,从概率、推断、相关性和回归到有趣的、有时是挑衅性的、易于理解的现实生活中的例子。我一直用蒙蒂·霍尔的问题来取悦我的朋友。
“统计学就像一把大口径武器:正确使用时很有帮助,但如果用错了,可能会带来灾难。”
理查德·h·泰勒和卡斯·r·桑斯坦
阅读它,只是为了成为一个更好的自己。这本书的概念围绕着改善健康、财富和幸福的决策。我把许多例子应用到我的日常生活中,比如把水果放在一个看得见、拿得着的地方,以此来引导我的行为和吃得更健康的决定。
“你想把人们推进社会所期望的行为,无论如何,不要让他们知道他们目前的行为比社会规范要好”
选择的悖论|巴里·施瓦茨
读读它,更好地理解选择是如何影响你的生活的。研究员兼作家巴里·施瓦茨提出了一个简单的理论,认为太多的选择会限制一个人的自由。读完这篇文章后,我正努力成为一个满足者——一个乐于满足于足够好的选择的人——而不是一个最大化者——一个在做决定前检查每一个可行选择的人。
“不幸的是,我们生活中选择的增多剥夺了我们自己决定任何特定决定有多重要的机会。”
《生存的算法》作者|布莱恩·克里斯蒂安&汤姆·格里菲斯
阅读它,应用计算机科学的概念更好地解决常见和日常的决策情况,例如什么时候你应该停止寻找停车位,或者你是否应该继续去你最喜欢的餐馆或探索新的餐馆。
“尝试和失败至少是学习;不去尝试就会遭受无法估量的损失”
快乐学习!如果你想联系,这是我的 LinkedIn。
你应该听的 5 个数据科学播客
原文:https://towardsdatascience.com/5-data-science-podcasts-you-should-be-listening-to-72d8efd0b9ec?source=collection_archive---------7-----------------------
Image via Pexels
以数据科学、机器学习、人工智能和数据可视化为特色的播客综述。
Image via Clipartkey
我是播客的超级粉丝!因此,随着我深入了解数据科学,我会寻找播客来做这件事,这是有意义的。我想我会分享一些迄今为止我最喜欢的。你呢?你有什么喜欢的东西建议我添加到列表中吗?如果有,请在评论中分享。
香蕉数据播客
Image via Banana Data Podcast
这是一个全新的双周播客,专注于数据科学生态系统的新闻和趋势。到目前为止,他们已经讨论了包括道德人工智能和有偏见的数据在内的话题。他们还提供每周简讯,在那里他们分享自己喜欢的关于数据科学、可视化等的文章。
苹果 | Spotify | 了解更多
数据怀疑论者
Image via Data Skeptic
作为运行时间最长的数据科学播客之一,data 怀疑论者已经触及了所有的事情。每周节目的特色是以概念为中心的小插曲,以及对研究人员和从业者的更长时间的采访。作为一种令人愉快的享受,一些迷你剧集关注他们的宠物鹦鹉 Yoshi,它是他们的官方吉祥物。这是一堂有趣的课,这是肯定的。
苹果 | Spotify | 了解更多
数据框
Image via DataFramed
DataFramed 是一个每周一次的播客,主要内容是对从业者的采访,重点是数据科学试图解决的问题。我发现这个播客对于任何对了解什么是数据科学以及如何应用数据科学感兴趣的人来说都非常容易理解。
苹果 | Spotify | 了解更多
数据故事
Image via Data Stories
虽然 Data Stories 不是专门关于数据科学的,但它确实关注了对任何从事数据工作的人都很重要的东西:可视化。我特别喜欢在最近一集里了解数据可视化协会。
苹果 | Spotify | 了解更多
线性题外话
Image via Linear Digressions
线性离题是一个播客,它使关于机器学习和数据科学的复杂话题变得容易理解。我真的很喜欢他们最近的一集,谈论机器学习工程师和随着时间的推移,数据科学角色可能会是什么样子。随着行业需求的变化,探索该领域将如何随着时间的推移而调整和发展是一件有趣的事情。
苹果 | Spotify | 了解更多
从 Python 2 切换到 Python 3 的 5 个简单技巧
原文:https://towardsdatascience.com/5-easy-tips-for-switching-from-python-2-to-3-6100f717610f?source=collection_archive---------16-----------------------
Source
我为学习者写了一份名为《强大的知识》的时事通讯。每一期都包含链接和最佳内容的关键课程,包括引文、书籍、文章、播客和视频。每一个人都是为了学习如何过上更明智、更快乐、更充实的生活而被挑选出来的。 在这里报名 。
末日即将来临……
不,这不是世界末日…..是 Python 2 的结尾!
Python 2 将正式退役,2020 年 1 月 1 日之后****将不再维护。这个消息对一些人(老一代 Python 2 用户)来说是可怕的,但对另一些人(酷的 Python 3 用户)来说却是巨大的安慰。
那么这对那些用 Python 编码的人来说意味着什么呢?你是被迫切换到 Python 3 的吗?
实际上,答案是肯定的是的。
许多主要的 Python 项目已经签署了一份保证书,承诺完全迁移到 Python 3,放弃 Python 2。我们讨论的是一些非常常见的应用中的真正重量级产品:
- ****数据科学:熊猫、Numpy、Scipy 等
- 机器学习 : TensorFlow、Scikit-Learn、XGBoost 等
- ****网:请求,龙卷风
- 多多多
不用说,随着所有这些主要库全面转向 Python 3,更新您的代码库变得非常必要。
在本文中,我将与您分享从 Python 2 转换到 Python 3 的 5 个简单技巧,这将使转换平稳进行。
⑴进口
Python 2 使用相对导入,而 Python 3 现在使用绝对导入来使事情更加明确。
考虑以下示例文件夹结构:
py_package
├── main_code.py
└── helper_code.py
对于 Python 2 的相对导入,import 语句是相对于当前文件编写的。例如,如果我们想在主代码中导入一些助手代码,我们可以这样做:
from helper_code import help_function
Python 3 不再支持这种风格的导入,因为它不明确您想要“相对”还是“绝对”helper_code
。如果你的计算机上安装了一个名为helper_code
的 Python 包,你可能会得到错误的包!
Python 3 现在要求您使用 explicit imports ,它明确指定了您想要使用的模块的位置,相对于您当前的工作目录。因此,导入您的助手代码如下所示:
from .helper_code import help_function
注意包名旁边的新.
,它指定包驻留在当前文件夹中。你也可以做类似于..helper_code
的事情,它告诉 Pythonhelper_code
包比当前的main_code.py
包高一个目录。要点是 Python 3 要求您指定确切的包位置。
(2)打印报表
可怕的 Python 打印语句!
我们大多数人都曾遇到过与 Python 打印语句相关的错误。这一改变将 100%要求任何使用 Python 2 打印语句的人切换到 Python 3 风格。
# Python 2 style
print "Hello, World!"# Python 3 style
print("Hello, World!")
基本上,你必须在你所有的代码中为所有的打印语句加上括号。幸运的是,一旦你的 print 语句有了括号,它们就可以在 Python 2 和 3 中使用了。
(3)整数除法
在 Python 2 中,您可以使用/
操作符对整数进行除法运算,结果会四舍五入到最接近的整数。如果你希望结果是一个浮点数,你首先要把数字转换成浮点数,然后执行除法。
Python 3 通过使用两种不同的操作符:/
用于浮点除法,//
用于整数除法,从而避免了必须进行显式转换以转换成浮点的需要。
### Python 2
a = 3 // 2 # Result is 1
b = 3 / 2 # Result is 1
c = float(3) / float(2) # Result is 1.5### Python 3
a = 3 // 2 # Result is 1
b = 3 / 2 # Result is 1.5
Python 3 中显式操作符的使用使得代码更加简洁,可读性更好——我们确切地知道//
是整数,/
是浮点数,而不必进行显式类型转换。
新的除法运算符肯定是要小心的。如果您在从 Python 2 到 3 的过程中忘记了从/
转换到//
进行整数除法运算,那么您将在原来拥有整数的地方得到浮点数!
(4)字符串格式
在 Python 3 中,字符串格式的语法更加清晰。在 Python 2 中,您可以像这样使用%
符号:
"%d %s" % (int_number, word)
"%d / %d = %f" % (10, 5, 10 / 5)
关于那些 Python 2 语句,有一些事情需要注意:
- 变量的类型是显式指定的(%d 表示 int,%s 表示 string,%f 表示 float)
- 字符串语句和变量是分开编写的,并排放在一起
- 风格本身和 Python 2 印花很像;没有括号,插入变量的%符号等
Python 3 现在使用所谓的字符串格式化程序,它包含在 Python 字符串类str.format()
中。字符串格式化程序允许您通过位置格式化将字符串中的元素连接在一起。
"{} {}".format(int_number, word)
"{} / {} = {}".format(10, 5, 10 / 5)
有了新的format()
函数,根本不需要指定类型,一切都写在一个干净的语句中。你所要做的就是确保这些变量是有序的,一切都会顺利进行。
(5)返回可迭代对象而不是列表
在 Python 3 中,许多内置函数现在返回一个迭代器而不是一个列表。这种变化的主要原因是迭代器通常比列表更有效地消耗内存。
当你使用迭代器时,元素是在需要的基础上创建并存储在内存中。这意味着,如果你必须使用迭代器创建 10 亿个浮点数,你只能一次一个地将它们存储在内存中。如果你想创建一个有 10 亿浮点数的列表,你必须确保你有足够的内存,因为数据会被一次性存储在内存中。
在许多情况下,使用迭代器和列表的行为是一样的。这方面的一个例子是当循环通过range()
函数的输出时。
# Python 2 range() function returns a list
for i in range(10):
print(i)# Python 3 range() function returns an iterator
for i in range(10):
print(i)
注意语法是完全相同的,即使当我们使用 Python 3 时,我们有一个迭代器。需要注意的一点是,如果你确实特别想要一个列表,你所要做的就是直接转换类型:list(range(10))
。
Python 3 中一些更常用的返回迭代器而不是列表的函数和方法有:
- zip()
- 地图()
- 过滤器()
- Python dict()的方法:
.keys()
、.values(),
、
喜欢学习?
在 twitter 上关注我,我会在这里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn上与我联系!
改善数据治理的 5 个有效维度
原文:https://towardsdatascience.com/5-effective-dimensions-to-improve-data-governance-f8a347b5686?source=collection_archive---------28-----------------------
您的组织所需的数据治理框架
人工智能的采用正在许多企业中迅速蔓延。这项颠覆性技术正在推动各行各业运营效率和决策流程的持续改进,并且有助于更好地了解客户需求、提高服务质量、预测和防范风险,等等。在这一领域,实施适当的数据治理框架成为组织充分释放数据潜力的基础。这篇文章有助于为您的组织定义数据治理框架。
一般来说,数据治理由一组过程组成,这些过程提供对企业中使用的数据的可用性、可用性、完整性和安全性的管理。更具体地说,对于机器学习,数据治理过程确保高质量的数据可用于整个企业的所有利益相关者,确保这种可访问性的目的始终可用。
在机器学习中,正如在计算机科学中一样,“垃圾进,垃圾出”。这意味着,如果输入低质量的数据,即使是最复杂、最花哨的机器学习模型也会表现不佳。那么,在实际使用数据之前,如何评估数据质量呢?通用的数据质量评估流程从定义一系列数据维度开始,这些维度只不过是原始数据的特征,可以根据预定义的基线标准进行测量。
下面列出了最佳数据质量评估需要考虑的前 5 个维度。
精度
它通过将数据集与已知的、可信的参考数据集进行比较来衡量数据集的可靠性。If 是指单个数据字段,通常与数据库故障、传感器故障、错误的数据收集策略等导致的异常值数量有关
时效性。
它被定义为从数据产生和获取到利用的时间延迟。在收集后才使用的数据可能已经过时,或者不再反映它所解释的物理现象
完整性。
它指的是可用数据的百分比,或者相当于缺少的值
一致性。
这通常意味着位于不同存储区域的相同数据应该被认为是等价的,其中等价可以具有从完全匹配到语义相似的多种含义
诚信。
这意味着数据符合由例如数据模型提供的其定义的语法(格式、类型、范围)
有关数据维度的更详细和全面的讨论,请参见“大数据时代数据质量和数据质量评估的挑战”和“数据质量评估的六个主要维度”。不言而喻,通常被监控的维度可以根据业务需求、流程、用户等而变化。
例如,对于社交媒体数据,及时性和准确性可能是最重要的质量特征。然而,由于社交媒体数据通常是非结构化的,一致性和完整性可能不适合评估。相反,对于生物数据,数据存储软件和数据格式是非常异构的。因此,一致性可能不是最合适的质量维度。
一旦选择了要监控的数据和尺寸,定义代表好的和坏的质量数据的值或范围的基线是很重要的,这是数据需要评估的质量规则。此外,每个维度将具有不同的权重,该权重决定了它对整体数据质量的贡献。规则需要有多严格,以及如何为每个数据维度选择上述权重,在很大程度上取决于单个组织对监控阶段的影响。
例如,人们可能很容易同意这样一个事实,即不正确或丢失的电子邮件地址会对营销活动产生重大影响。在这种情况下,人们将对可容忍的缺失记录数量设置非常低的阈值,并对完整性和准确性设置高权重。前面提到的低阈值实际上会最小化丢失电子邮件的数量,而高权重会保证现有记录是可用的和可靠的。同样的情况也适用于不准确的个人信息,这可能会导致错失销售机会或客户投诉增加。
一旦该准备阶段完成,该过程进入数据采集阶段,随后是数据监控阶段。后者主要由数据质量评估 过程和问题解决过程组成。
在数据质量评估过程中,要么定期生成数据质量报告,要么生成数据质量分数的连续记录,然后存储在数据库中。后一种策略将有助于长期跟踪数据质量。
问题解决流程使人或自动软件工具能够标记问题,并系统地调查和解决问题。当然,这样的日志提供的信息越多,解决数据质量问题的效率就越高。正如文章“数据质量问题日志中包含什么内容”中所建议的,不管是什么业务,某些信息都应该包含在所有日志中。首先,每个问题都应该有一个唯一的标识符。
使用序列号作为标识符还有一个额外的好处,那就是可以提供到目前为止已经发现了多少问题的即时图片。诸如问题提出和解决的日期以及每个问题的分类等信息都是重要的因素,因为它们允许计算诸如平均问题解决时间及其与目标解决时间的比较等统计数据。记录提出问题的人也是必要的,以便跟踪向谁报告进展并就补救行动计划达成一致。
负责调查和解决与其拥有的数据相关的问题的数据所有者也包含在此类日志中。
问题在组织内的估计影响也是一个关键因素,因为它允许对调查和解决所需的工作进行优先排序。
只有当数据质量被评估为良好且未检测到重大问题时,数据才能最终被第三方消费,并被考虑用于构建机器学习模型,以解决特定的业务问题。
在,我们将典型的机器学习管道的很大一部分用于评估数据质量。我们的监控策略发生在管道的早期阶段,如数据收集、清理和转换,是数据集成和模型设计等后续阶段的准备。这不仅鼓励数据科学家为他们的模型专门考虑高质量的数据,还加快了整个机器学习管道的开发和调试。事实上,遵循我们策略的数据科学家确切地知道当一个模型没有按预期执行时需要改进什么。
不言而喻,数据的真正价值与它为一个组织的决策过程提供了多少支持有关。对于任何旨在将人工智能用于其流程的企业来说,实施数据治理框架来监控和提高数据质量都是必不可少的。
为您的组织处理数据治理至关重要。因为好的数据总能带来好的决策。
你喜欢这个帖子吗?
跟随播客https://datascienceathome.com/别忘了加入我们新的不和谐频道的对话 。那里见!
参考
大数据时代数据质量和数据质量评估的挑战
数据质量评估的六个主要维度数据质量问题日志
启动机器学习冒险的 5 个基本资源
原文:https://towardsdatascience.com/5-essential-resources-to-jump-start-your-machine-learning-adventures-d5ac8fdaf2a5?source=collection_archive---------26-----------------------
我作为初学者高调携带的 5 个资源。
Photo by Hope House Press - Leather Diary Studio on Unsplash
对学习人工智能感兴趣的学生经常问我一个问题:
“嘿 Ekin,你会推荐什么资源来入门 AI 和 ML?”
这个问题问得好。通常,人们很容易迷失在书架上和互联网上的资源海洋中。
对于所有那些好奇的初学者,他们只是在寻找一个开始的地方,这里有 5 个基本资源,它们在我自己从零到熟练的旅程中发挥了重要作用(还不是英雄,但每天都在努力变得更好)!
1.神经网络和深度学习
迈克尔·尼尔森
描述
就给初学者的书而言,没有比这更好的了。在这本免费的在线书籍中,尼尔森通过面向原则的方法和动手操作的方法,精心制作了一个概念清晰的神经网络插图。
尼尔森以初学者的心态写作,故意排除不必要的行话和低级信息。
虽然这本书传达的思想只是我们称之为机器学习的更广泛领域的子集,但它们无疑是重要的,当被理解时,它们打破了理解 ML 的精神障碍,并打开了理解的大门。
推荐
- 阅读概念性章节时记下笔记。它们不必漂亮或冗长。简单地写下信息可以提高长期记忆。
- 遵循实践教程。花时间不仅复制尼尔森提供的神经网络代码,还要分析每行代码的用途。仅仅是单独执行这项任务就能增强你对神经网络的理解。
环
[## 神经网络和深度学习
神经网络和深度学习是一本免费的在线书籍。这本书将教你:神经网络,一个美丽的…
neuralnetworksanddeeplearning.com](http://neuralnetworksanddeeplearning.com/index.html)
2.Siraj Raval,YouTube 频道
作者 Siraj Raval
Source: YouTube, Siraj Raval Channel
描述
“Watch Me Build an AI Startup” by Siraj Raval, Thumbnail
对于任何对人工智能感兴趣的人来说,Siraj 就是你要找的人。Siraj 的视频充满了相关的幽默和高水平的视觉效果,以一种引人入胜而又说教的方式打破了复杂的人工智能概念。
他的视频几乎涵盖了人工智能的每一个值得关注的话题。他制作了从 5 分钟 TensorFlow 教程到一系列人工智能背后的数学的视频。
推荐
- 订阅获取新内容的通知。学习 AI 时,沉浸在领域中是必不可少的。一种方法是观看 Siraj 的精彩视频!Siraj 每周都会制作视频,以确保所有显著的进步都能与公众分享。
- 当学习一个新概念时,先搜索他的频道。 Siraj 的视频讲解是很好的起点。当研究不熟悉的想法时,把它们作为一个跳板。
环
[## 西拉伊·拉瓦尔
让数据点亮!这个音乐视频的歌词实际上是有教育意义的,它们作为一个介绍性的讲座…
www.youtube.com](https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A)
3.卡格尔
Kaggle Logo. Source: Kaggle
描述
Kaggle 被宣传为“你的数据科学之家”,是作为数据科学家成长的完美资源,因为它允许你实际应用机器学习概念。
Kaggle 本身配备了大量的资源:实践教程、入门竞赛、探索性内核(稍后会详细介绍)等等。
此外, Kaggle 是一个社区,聚集了非常热情的数据科学家,他们 100%愿意提供帮助。
(A Kaggle 内核是浏览器中的免费开发环境。更多关于 Kaggle 内核的信息,请点击:)
[## Kaggle 内核简介
在《人工智能历险记》的这一集里,你会发现什么是 Kaggle 内核,以及如何开始使用它们。虽然没有…
towardsdatascience.com](/introduction-to-kaggle-kernels-2ad754ebf77)
推荐
- 从机器学习教程开始。这是适应新环境最简单的方法。
- 随后,加入一个介绍性竞赛(即 MNIST 数据集)并查看他们提供的启动代码。
- 从简单开始,慢慢来,逐步积累。在 Kaggle 上看了所有很酷的项目后,感觉被抛在后面是很常见的。不要气馁!耐心点。从简单开始。建立起来。
- 看看公开的内核(别人的代码)!通过这样做,您将接触到流行的机器学习库,如 numpy、pandas、scikitlearn、TensorFlow 和 PyTorch,
环
[## 你的数据科学之家
编辑描述
www.kaggle.com](https://www.kaggle.com/)
4.走向数据科学
描述
如果你正在阅读这篇文章,那么很可能你理解了媒体文章的价值。《面向媒体上的数据科学》是由数据科学爱好者热情撰写的简明、启发性文章的广泛纲要。
如果你不理解一个复杂的概念,在 TDS 上搜索这个概念可能会有所帮助。
推荐
- 每天阅读一篇推荐文章。这将有助于加强你对人工智能概念的理解,同时让你接触到该领域的各种主题。
- 每天阅读不同的主题。像任何好的训练集一样,你输入自己的神经网络的数据必须尽可能广泛,这样你才能在面对未知时进行归纳。
- 阅读时记下想法。仅仅记下重要的信息片段就能提高记忆力。
[## 走向数据科学
分享概念、想法和代码。
towardsdatascience.com](https://towardsdatascience.com)
5.深度学习
伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔
描述
虽然(非常)数学密集,这本书巩固了我的基础。它让我有能力理解该领域更严谨的概念。在某种程度上,它让我为学术文献(即研究论文)的严格性做好了准备。
这本书旨在成为一本深度学习教材。因此,正如我们所料,它具有标准教科书的属性:行话和精确的定义。它在可读性方面的不足,在质量方面得到了弥补。
它在正式解释 ML 和 DL 概念方面做得很好,从而填补了更简单的资源留下的空白。
推荐
- 不要让那个叫做“数学”的怪物吓倒你。如果你对学习 ML 感兴趣,数学就像灭霸一样不可避免。所以要泰然处之,打好基础,不要觉得自己被落下了。
- 用其他资源补充。如果你试图孤立地阅读整本书,你可能会发疯。如果你觉得有些概念被激烈的数学推理弄得模糊不清,那么简单的谷歌搜索通常就足够了!使用本文中的其他资源(TDS、Siraj 等。)作为补充。
环
[## 深度学习
深度学习教材是一个资源,旨在帮助学生和从业人员进入机器领域…
www.deeplearningbook.org](http://www.deeplearningbook.org/)
结论
恭喜你!
你刚刚迈出了开始的第一步:弄清楚从哪里开始。
机器学习是一个广泛的领域,上面列出的资源绝不涵盖每个细节。
记得使用这些资源作为发射台来逐步加强你在机器学习和流行子集深度学习方面的基础。
现在你知道从哪里开始,释放你的热情,全力以赴!
你现在可以尝试的数据科学项目的 5 个想法
原文:https://towardsdatascience.com/5-ideas-for-data-science-projects-you-can-try-now-b6745d445d02?source=collection_archive---------27-----------------------
现在就开始构建您的 GitHub 开源项目组合吧。
我非常喜欢建立自己的开源 GitHub 项目组合,作为一名数据科学家成长的一种方式。如果你对实用数据科学感兴趣,这里有一个你可以自己尝试的项目列表。这些肯定会让你被录用!
Build a portfolio of open-source data science projects on GitHub right now!
1.聚类方法
在学习 Python 的基础知识之后,您首先要学习的事情之一是如何对数据进行分类,并根据它们的不同特性将它们分组。你可以根据情感对文本进行分类,也可以根据相似度对图像进行分类。你可以使用 Kaggle 的不同数据集来对体育领域的顶尖选手进行分类,并尝试确定是什么让一名运动员成为明星。
这里的选项是无穷无尽的,你应该尽你所能去玩数据。
至于方法,您肯定会使用 DBSCAN 和/或 KNN 来对数据进行聚类。此外,一些维数约减,如主成分分析或 t-SNE,可能会有所帮助。
2.抓取网站并提取信息
有什么比选择一个你经常访问的网站并尝试抓取它更有趣的呢?你可以去搜索财经新闻、社交媒体趋势或最佳烹饪食谱。你甚至可以尝试刮谷歌和其他搜索引擎——用 Python 来说这并不难。
浏览一个网站很有趣,因为你可以从一个完全不同的角度了解网站是如何建立的,以及它们的信息流。
抓取搜索引擎对于了解不同的信息是如何在互联网上传播的非常有用。
如果你把两者联系起来,你会得到一个惊人的项目:一个特定主题的新闻提要!
从技术上讲,您将使用 Requests library 来清理 html 代码。或者,也可以用硒来刮。
3.数据清理
这是一个标准但有点乏味的任务:清理数据。这是标准的,因为作为一名数据科学家,这恰好是您将遇到的几乎任何现实世界问题的一部分。这很乏味,因为你可能最终会花很长时间思考如何理解你拥有的大量数据。
数据清理可能包括记录股票价格,并试图通过聚类和良好的可视化来理解这些信息。或者,如果你已经有了一个数据集,比如你的旧文档和照片,你可能需要通过删除那些不再需要的东西来整理它们。
数据清理可能像删除不需要的文件一样简单,也可能像尝试使用机器学习来发现数据集中的异常并删除它们一样困难。
这里的一个标准图书馆是熊猫。
4.数据可视化
无论你是否有一个好的数据集,理解数据的最好方法是尝试用许多不同的方式来可视化。这不仅对你有帮助,对你的潜在客户或雇主也有帮助。
通过视觉化,可能更容易发现正在发生的事情。
这里 Plotly 派上了用场,它是一个用于绘制函数和图形的标准 Python 库。如果你想建立一个交互式仪表板,那么你应该尝试在 Python 中使用 Dash。
5.神经网络
是时候进入机器学习了!神经网络没有你想象的那么难。它们最简单的实例实现起来非常快,特别是如果你使用 Keras 框架,它会为你做很多工作。
神经网络的切入点是对手写数字进行分类。如果你用谷歌搜索“MNIST Python ”,你会找到大量关于如何使用简单的神经网络来做这件事的教程。
从那时起,你可以进入更复杂的数据集(如动物的图像)和问题(多类分类,异常检测。
祝你玩得开心,好运!
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
如果你想了解更多,请阅读我关于成为数据科学家的其他文章:
- 成为数据科学家的 5 种方法
- 给数据科学家的最佳建议
- 如何从数据科学开始
- 数据科学家常犯的 3 个错误
- 成为数据科学家的实用指南
关于欧洲最好的足球联赛,你可能不知道的 5 个观点!
原文:https://towardsdatascience.com/5-insights-you-probably-didnt-know-about-the-t-3b28a132eace?source=collection_archive---------19-----------------------
分析了过去 10 个赛季 170 支球队的 18257 场比赛
“法国有农民联盟,除了 PSG 什么都没有。”
"德甲比意大利和西班牙差太多了."
"最伟大的俱乐部都踢英超联赛."
每个足球迷一生中至少听过或提出过一次这样的观点。如果你看看每个国家的俱乐部在冠军联赛中的表现,或者如果你比较一下在过去 10 个赛季中有多少不同的球队赢得了国内联赛冠军,有很多理由相信它们是正确的。然而,关于欧洲五大足球联赛西班牙、意大利、法国、德国和英格兰还有很多要说的。
娱乐并不总是伴随着最好的球队或球员。否则,你为什么会喜欢当地球队的周日联赛?看到许多进球,见证从半场领先变为全半场领先,或者参观拥有庞大球迷基础的传统俱乐部的比赛,都是很有趣的。
出于这个原因,我们利用来自football-data.co.uk自 2009/10 赛季以来的近 10 个赛季的西甲、意甲、法甲、德甲和英超的比赛数据收集了一个数据集。最终数据集中的每一行都代表了在过去 10 年中至少在本国甲级联赛中踢过一个赛季的球队。每支球队都有 13 个属性,包括过去 10 个赛季在主场比赛中的表现。
利用这些属性,我们用 graphext 创建了一个网络来计算相似性和相关团队的聚类(见上图)。现在,图中的每个节点代表原始数据集的一行/一组。有相似表现的团队互相联系。彼此之间有许多联系的团队形成独特颜色的集群。两个团队彼此越接近,他们就越相似。
好吧,但是我现在在哪里可以找到我喜欢的球队呢?
粉色集群拥有通常在国内联赛中获胜的球队。与其他球队相比,他们的表现主要表现在他们的进球数,他们在过去 10 年中在甲级联赛中的表现,以及他们在半场结束时输掉比赛到全场获胜的频率。非常有趣的是,德国俱乐部 RB Leipzig 已经是该集团的一部分,只是最近才晋升到德甲联赛。从那以后,他们一直打得很好,赢得了他们在粉红组的位置。
红色集群中的球队有一个共同点,那就是他们在全职时间里进了很多球,也丢了很多球。如果你作为一个中立的足球迷喜欢娱乐,我们可以推荐你观看其中一支球队的主场比赛。你肯定会看到很多目标!有趣的是,德甲拥有该集群中最多的球队(超过 30%)。
现在,介绍已经足够了,让我们从我们在标题中承诺的见解开始。如果你想寻找你最喜欢的团队,以及与谁联系最紧密,你可以自己在这里访问项目。
第一个洞见:德甲拥有大多数已经在联赛中呆了很多年的俱乐部。
在英格兰,竞争更加激烈,因为乙级联赛的小俱乐部有更多的投资者。这些球队增加了英超球队的压力,并引起了更高的波动。
第二个观点:在大约 60%的比赛中,半场成绩等同于全职成绩。
在下一次现场下注时,请记住这一点;)
第三个观点:德甲联赛进球最多。
在德甲 50%的比赛中,你会看到至少 3 个进球(2.87)。
第四个洞见:在意甲,上半场的结果最有可能在比赛结束时被翻盘。
在 50%的意甲比赛中,主队领先或失败,你会在至少 18%的情况下看到一个完整的结果。
第五个观点:法国拥有最成功的主场球队。
法国和德国之间的差异也相当显著。
我们希望你喜欢阅读我们对欧洲最佳足球队的分析。如果是这样的话,查看我们的网站以及任何关于我们如何工作的其他信息,不要犹豫,通过 max@graphext.com直接联系我。
软件架构的 5 个关键原则
原文:https://towardsdatascience.com/5-key-principles-of-software-architecture-e5379cb10fd5?source=collection_archive---------2-----------------------
有哪些伟大的软件架构师藏在他们的腰带下面
Courtesy: yourspear.com
解决方案架构师是负责系统架构以及特定产品的技术标准(包括技术、平台、基础设施)的指定专家。他们设定愿景,他们的分析是产品成功的关键定义、设计、交付和终身支持。因此,他们不仅需要了解业务需求,还需要了解什么是合理的、可扩展的、经济高效的,并且符合组织的总体技术目标。
架构师的一个重要技能是能够从许多不同的角度来看待架构:其中的每一个可能都不完全相关,但是将它们结合在一起会给出产品的直升机视图。这些观点包括原则、标准、模式和反模式、经验法则和经验实践,它们对于制定特定方向的决策以及评估项目的成功是必不可少的。
在这篇文章中,我们将涵盖那些建筑原则,这些建筑原则归因于你作为一名建筑师的角色是“下沉还是游泳”!
“如果你觉得好的建筑很贵,那就试试坏的建筑吧!”布莱恩·福特约瑟夫·约德
𝕊𝕆𝕃𝕀𝔻 𝕡𝕣𝕚𝕟𝕔𝕚𝕡𝕝𝕖𝕤
让我们从我最喜欢的主题开始:坚实的原则不仅适用于软件开发,也适用于设计系统。我们现在将看到如何…
单一责任原则
每个系统功能(例如服务/模块/api)应该只有一个责任,因此也是一个改变的理由。尽可能缩小责任范围意味着用户知道预期的目的,从而减少错误。
开闭原理
这个原则假设最好是扩展一个系统行为,而不是修改它。虽然试图提前预测需求的变化通常不是一个好主意(因为这可能导致过于复杂的设计),但能够在对现有组件进行最小更改的情况下适应新功能是应用程序长寿的关键。
利斯科夫替代原理
在软件开发中,这意味着派生类必须可以替换它们的基类,但这一原则与 Bertrand Meyer 的契约设计的相似之处在于它如何应用于分布式架构:当两个服务之间有一个共同的“契约”时,它们可以有效地重复通信,该契约定义了输入/输出、它们的结构和它们的约束。因此:给定两个具有相同契约的分布式组件,其中一个应该可以被具有相同契约的另一个组件替换,而不改变系统的正确性。
界面分离原理
接口/契约必须尽可能地细粒度化和客户端特定化,这样调用客户端就不会依赖于它们不使用的功能。这与单一责任原则密切相关:通过分解接口,我们支持通过角色/责任分离的组合,以及通过不耦合不需要的责任的解耦。
从属倒置原则
高级模块不应该依赖于低级模块;它们都应该依赖于抽象。同样,抽象不应该依赖于细节,但是细节应该依赖于抽象。因此,该原理在较高级和较低级软件组件或层之间引入了接口抽象,以消除它们之间的依赖性。
Courtesy: Being a Data Scientist does not make you a Software Engineer!
𝕋𝕙𝕖 ‘𝕃𝕖𝕒𝕤𝕥’ 𝕡𝕣𝕚𝕟𝕔𝕚𝕡𝕝𝕖𝕤
我根据它们的命名惯例将它们组合在一起:
最小惊讶原则
最小惊讶原则(或最小惊讶)表明,一个解决方案或方法在第一次遇到时,不会让一个在该领域知识相当丰富的人感到惊讶(受众可能会有所不同,例如最终用户、程序员、测试人员等)。在更实际的情况下,该原则旨在利用用户的现有知识,以最小化他们在使用模块时的学习曲线,因此任何具有高不可预测性的因素都是重新设计的良好候选。
它适用于架构的每一个方面:从命名服务,到用户界面的可视化,到领域模型的设计。
There are good surprises and then there are bad surprises…
最省力原则
这个原则(也称为齐夫定律)源于一个基本的人类行为:每个人都倾向于遵循尽可能不费力的路径。例如,如果我们的设计遵循特定的模式,下一个开发人员将会一次又一次地遵循相同的模式,除非有更简单的方法来执行任务,在这种情况下,他们将会改变!或者,进一步说,一旦他们找到了任务的可接受结果,就没有立即改进当前解决方案的需要。
最少的努力是最少工作的变体
因此,当务之急是通过建立正确的架构来实现一个强有力的开始:它设定了很高的期望,并确保每个人都明白质量在项目的生命周期中不会受到损害,并且在未来的变化中会得到坚持。
对我来说,这个原则的伟大之处在于它的好处是可以推断的:一旦我们将一个正确的设计放在适当的位置,我们就可以创建一个架构上的框架,这将是我们构建下一个系统的基础。换句话说,我们能够为组织的软件系统建立一个成功的、经得起未来考验的模板。
Path of least resistance
𝕋𝕙𝕖 𝕡𝕣𝕚𝕟𝕔𝕚𝕡𝕝𝕖𝕤 𝕠𝕗 ‘𝔼𝕔𝕠𝕟𝕠𝕞𝕚𝕔𝕤’
这两个原则有一个共同的主题:充分利用机会的成本和延迟决策的成本。
机会成本原则
每次我们做出选择时,我们都会赋予这个选择一定的价值。价值有两部分:收益和成本。选择的机会成本是我们为了得到它而放弃的东西。为了做出一个好的经济决策,我们希望选择对我们来说收益最大但成本最低的选项。
例如,如果我们有两个选择,要么是内部构建的系统,要么是现成的供应商产品,而我们选择了后者,那么我们的机会成本就是我们的开发团队本可以开发但没有开发的全新系统。
这就是架构的全部:权衡各种选择,并试图做出明智的决定,哪一个将为项目增加最大的价值。例如,一个非常常见的二分法是,是创建一个快速上市的战术性解决方案,还是创建一个更具战略性的解决方案,该解决方案现在会更昂贵,以便在未来的项目中利用它,从而使以后的成本最小化。
以下是一些需要考虑的要点:
- 架构分析/评估的可用时间是多少?想出一个解决方案已经够有挑战性了,更别说几个了!
- 未来 1-3 年的产品渠道是什么?还有其他什么项目在排队?你能看到任何协同作用吗?
- 您当前可能解决的技术债务是什么?
- 反过来:如果你追求一个战术性的解决方案,会招致多少新的技术债务?
- 对于您组织中的系统来说,哪些质量属性是最重要的?它们将如何被提议的解决方案所折衷?
- 除了架构团队,还有谁是会影响决策的风险承担者?生意?你的老板?技术设计权威?每个利益相关者的主要目标是什么?你将如何缓解相互冲突的需求?
Courtesy: What is opportunity cost
最后责任时刻原则
这一原则(又名延迟成本)源自精益软件开发,强调尽可能长时间地坚持采取重要行动和关键决策。这样做是为了不到最后一刻不排除重要的选择,也就是说,等到你有更好的消息时再缩小选择范围。
一种策略,即不要过早做出决定,而是推迟承诺,并保持重要且不可逆转的决定开放,直到不做决定的成本大于做决定的成本。
减轻决策过晚风险的一种方法是建立概念验证 (POCs)来原型化备选方案,并向利益相关者展示他们的要求。
Early in a project we should make as few binding decisions as possible!
𝔼𝕡𝕚𝕝𝕠𝕘𝕦𝕖
架构原则帮助我们评估我们在整个项目中做出的决策,并确保我们符合总体目标,不仅仅是项目,还有组织的技术。这是我们阐述的五项原则的融合:
我希望这篇文章是你建筑之旅的灵感和指导来源。如果您想进一步了解我们介绍的一些主题,这里有一些不错的资源:
参考资料:
- Unix 编程的艺术:最小惊奇原则
- IT 架构:削减成本和复杂性
- 延迟成本:一个关键的经济指标
- 软件架构师手册
感谢阅读!
我经常在媒体上写关于技术的&数据——如果你想阅读我未来的帖子,请‘关注’我 !
5 个鲜为人知的熊猫把戏
原文:https://towardsdatascience.com/5-lesser-known-pandas-tricks-e8ab1dd21431?source=collection_archive---------2-----------------------
Pandas provides high-performance, easy-to-use data structures and data analysis tools for the Python
pandas 无需介绍,因为它已经成为 Python 中事实上的数据分析工具。作为一名数据科学家,我每天都使用熊猫,我总是对它的众多功能感到惊讶。在这篇文章中,我将向你展示我最近学到的 5 个熊猫技巧,用它们来帮助我更有效率。
对于熊猫新手— 熊猫为 Python 编程语言提供了高性能、易于使用的数据结构和数据分析工具。这个名字来源于术语“面板数据”,这是一个计量经济学术语,指的是包含同一个人在多个时间段的观察结果的数据集。
要运行示例,请下载这个 Jupyter 笔记本。
这里有几个你可能感兴趣的链接:
- [Complete your Python analyses 10x faster with Mito](https://trymito.io/) [Product]- [Free skill tests for Data Scientists & ML Engineers](https://aigents.co/skills) [Test]- [All New Self-Driving Car Engineer Nanodegree](https://imp.i115008.net/c/2402645/1116216/11298)[Course]
你愿意多看一些这样的文章吗?如果是这样,你可以点击上面的任何链接来支持我。其中一些是附属链接,但你不需要购买任何东西。
1.日期范围
当从外部 API 或数据库获取数据时,我们经常需要指定一个日期范围。熊猫保护了我们。有一个 data_range 函数,返回按天、月或年等递增的日期。
假设我们需要一个按天递增的日期范围。
date_from **=** "2019-01-01"
date_to **=** "2019-01-12"
date_range **=** pd**.**date_range(date_from, date_to, freq**=**"D")
date_range
让我们将生成的 date_range 转换为开始和结束日期,并将其传递给后续函数。
**for** i, (date_from, date_to) **in** enumerate(zip(date_range[:**-**1], date_range[1:]), 1):
date_from **=** date_from**.**date()**.**isoformat()
date_to **=** date_to**.**date()**.**isoformat()
**print**("%d. date_from: %s, date_to: %s" **%** (i, date_from, date_to))1\. date_from: 2019-01-01, date_to: 2019-01-02
2\. date_from: 2019-01-02, date_to: 2019-01-03
3\. date_from: 2019-01-03, date_to: 2019-01-04
4\. date_from: 2019-01-04, date_to: 2019-01-05
5\. date_from: 2019-01-05, date_to: 2019-01-06
6\. date_from: 2019-01-06, date_to: 2019-01-07
7\. date_from: 2019-01-07, date_to: 2019-01-08
8\. date_from: 2019-01-08, date_to: 2019-01-09
9\. date_from: 2019-01-09, date_to: 2019-01-10
10\. date_from: 2019-01-10, date_to: 2019-01-11
11\. date_from: 2019-01-11, date_to: 2019-01-12
2.与指示器合并
合并两个数据集是将两个数据集合并为一个数据集,并根据公共属性或列对齐每个数据集的行的过程。
我错过的合并函数的一个参数是indicator
参数。Indicator argument 向数据帧添加了一个_merge
列,它告诉您“该行来自何处”,左侧、右侧或两个数据帧。当处理更大的数据集来检查合并操作的正确性时,_merge
列非常有用。
left **=** pd**.**DataFrame({"key": ["key1", "key2", "key3", "key4"], "value_l": [1, 2, 3, 4]})
right **=** pd**.**DataFrame({"key": ["key3", "key2", "key1", "key6"], "value_r": [3, 2, 1, 6]})
df_merge **=** left**.**merge(right, on**=**'key', how**=**'left', indicator**=**True)
_merge
列可用于检查是否有预期数量的行具有来自两个数据帧的值。
df_merge**.**_merge**.**value_counts()both 3
left_only 1
right_only 0
Name: _merge, dtype: int64
3.最近合并
当处理股票或加密货币等金融数据时,我们可能需要将报价(价格变化)与实际交易结合起来。假设我们希望将每笔交易与之前几毫秒发生的报价合并。Pandas 有一个 merge_asof 函数,它能够通过最近的键(在我们的例子中是时间戳)合并数据帧。数据集报价和交易取自熊猫的例子
报价数据框包含不同股票的价格变化。通常,报价比交易多得多。
quotes **=** pd**.**DataFrame(
[
["2016-05-25 13:30:00.023", "GOOG", 720.50, 720.93],
["2016-05-25 13:30:00.023", "MSFT", 51.95, 51.96],
["2016-05-25 13:30:00.030", "MSFT", 51.97, 51.98],
["2016-05-25 13:30:00.041", "MSFT", 51.99, 52.00],
["2016-05-25 13:30:00.048", "GOOG", 720.50, 720.93],
["2016-05-25 13:30:00.049", "AAPL", 97.99, 98.01],
["2016-05-25 13:30:00.072", "GOOG", 720.50, 720.88],
["2016-05-25 13:30:00.075", "MSFT", 52.01, 52.03],
],
columns**=**["timestamp", "ticker", "bid", "ask"],
)
quotes['timestamp'] **=** pd**.**to_datetime(quotes['timestamp'])
交易数据框包含不同股票的交易。
trades **=** pd**.**DataFrame(
[
["2016-05-25 13:30:00.023", "MSFT", 51.95, 75],
["2016-05-25 13:30:00.038", "MSFT", 51.95, 155],
["2016-05-25 13:30:00.048", "GOOG", 720.77, 100],
["2016-05-25 13:30:00.048", "GOOG", 720.92, 100],
["2016-05-25 13:30:00.048", "AAPL", 98.00, 100],
],
columns**=**["timestamp", "ticker", "price", "quantity"],
)
trades['timestamp'] **=** pd**.**to_datetime(trades['timestamp'])
我们通过报价器合并交易和报价,最新的报价可能比交易晚 10 毫秒。如果报价落后于交易超过 10 毫秒,或者没有任何报价,该报价的买价和卖价将为空(本例中为 AAPL 股票)。
pd**.**merge_asof(trades, quotes, on**=**"timestamp", by**=**'ticker', tolerance**=**pd**.**Timedelta('10ms'), direction**=**'backward')
4.创建 Excel 报表
Pandas(带有 XlsxWriter 库)使我们能够从数据框架创建 Excel 报表。这大大节省了时间——不再需要将数据帧保存为 CSV 格式,然后在 Excel 中格式化。我们还可以添加各种图表等。
df **=** pd**.**DataFrame(pd**.**np**.**array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns**=**["a", "b", "c"])
下面的代码片段创建了一个 Excel 报表。要将数据帧保存到 Excel 文件,取消对writer.save()
行的注释。
report_name **=** 'example_report.xlsx'
sheet_name **=** 'Sheet1'writer **=** pd**.**ExcelWriter(report_name, engine**=**'xlsxwriter')
df**.**to_excel(writer, sheet_name**=**sheet_name, index**=**False)
*# writer.save()*
如前所述,该库还支持向 Excel 报表添加图表。我们需要定义图表的类型(我们示例中的折线图)和图表的数据系列(数据系列需要在 Excel 电子表格中)。
*# define the workbook* workbook **=** writer**.**book
worksheet **=** writer**.**sheets[sheet_name]*# create a chart line object* chart **=** workbook**.**add_chart({'type': 'line'})*# configure the series of the chart from the spreadsheet
# using a list of values instead of category/value formulas:
# [sheetname, first_row, first_col, last_row, last_col]* chart**.**add_series({
'categories': [sheet_name, 1, 0, 3, 0],
'values': [sheet_name, 1, 1, 3, 1],
})*# configure the chart axes* chart**.**set_x_axis({'name': 'Index', 'position_axis': 'on_tick'})
chart**.**set_y_axis({'name': 'Value', 'major_gridlines': {'visible': False}})*# place the chart on the worksheet* worksheet**.**insert_chart('E2', chart)*# output the excel file* writer**.**save()
5.节省磁盘空间
当处理多个数据科学项目时,您通常会从不同的实验中获得许多预处理数据集。笔记本电脑上的固态硬盘会很快变得凌乱不堪。Pandas 使您能够在保存数据集时对其进行压缩,然后以压缩格式读回。
让我们用随机数创建一个大熊猫数据框架。
df **=** pd**.**DataFrame(pd**.**np**.**random**.**randn(50000,300))
当我们将这个文件保存为 CSV 格式时,它会占用硬盘上将近 300 MB 的空间。
df**.**to_csv('random_data.csv', index**=**False)
使用一个参数compression='gzip'
,我们可以将文件大小减少到 136 MB。
df**.**to_csv('random_data.gz', compression**=**'gzip', index**=**False)
将 gzipped 数据读入 DataFrame 也很容易,所以我们不会丢失任何功能。
df **=** pd**.**read_csv('random_data.gz')
结论
这些技巧帮助我每天与熊猫相处时更有效率。希望这篇博文向你展示了熊猫的新功能,这将有助于你提高工作效率。
在你走之前
在 Twitter 上关注我,我经常在那里发布关于数据科学和机器学习的微博。
5 行代码说服你学习 R
原文:https://towardsdatascience.com/5-lines-of-code-to-convince-you-to-learn-r-81efb2e3c836?source=collection_archive---------12-----------------------
为那些持观望态度的人写的一篇简短论文
支持本文的所有代码都可以从这个 Github repo 中派生出来。
给数据科学家(或任何人)的一些好建议。
如果多次编写相同的代码;创建一个函数。如果你不止一次地给出同样的建议;写一篇博文。
这就是了。这是我一生中第一千次发现自己在说服某人学习 R(一种开源统计编程语言)。当某人是每天使用 Excel 的业务分析师时,这种对话会很容易。如果你在一组复杂的电子表格中挣扎,那么写代码是多么的优越是显而易见的。它是可读的,可复制的,可移植的,可扩展的。然而,大多数反对 R 的声音来自开发者和计算机科学团体。我日复一日地在 Python 和 R 之间穿梭,在项目与项目之间穿梭。这两者的价值对我来说都是显而易见的,为什么不是其他人呢?
对 R 有一些奇怪的偏见,不是源自传统的开发圈(比如 JavaScript 和 Python)。因此,R 的一些语法怪癖不太符合这些社区的期望。但是对怪癖的担心并不是避免使用强大工具的好理由。因此,对于那些对学习 R 犹豫不决的人,不管你是业务分析师还是开发人员,下面是我在接下来的 5 分钟内说服你的最佳尝试。
是的,R 是为数据、数据科学和统计学而设计的,但它也非常灵活和健壮。这里有五行简单的代码(或者更确切地说,是函数),代表了这种语言有多棒。
第一行
*install.packages('any_package_on_CRAN')*
每一个 R session 里面都有一个入口,可以访问成千上万社区成员的工作。这一行代码(从 R 内部)安装来自 CRAN(综合 R 存档网络)的包,这是一个遍布全球的志愿者服务器网络。
Official R logo used by CRAN
CRAN 拥有其他 R 用户编写的完全开源和免费的“包”(库)的集合。最重要的是,你直接连接到一个由工程师、统计学家、数据科学家、科学家和开发人员组成的庞大网络。这些包几乎在所有可能的方面扩展了 R 语言。它们在到达 CRAN 之前都经过了仔细的验证(通过一种混合的自动同行评审过程),所以你知道它们可以跨各种平台工作。如果你想对数据做些什么,可能有一个软件包可以满足你。一些有趣的例子包括:
- 网页抓取: httr , rvest
- 社交媒体: twitteR , Rfacebook , Rlinkedin
- 业务运营:销售专员, gmailr ,官员
- 金融: tidyquant ,实证金融
- 云存储: Dropbox , googledrive , Box
- 地图:地图,传单
- 深度学习: keras , tensorflow
我只是对这份清单略知皮毛。随着 R 的流行,可用软件包的数量呈指数级增长。目前,有近 14k 的软件包可用。如果一种编程语言的有用性可以根据支持库来判断,R 超过了最疯狂的期望。
第二行
*library(tidyverse)*
在 R 可用的所有包中,对数据科学和分析的基本任务最有用的是 tidyverse。
Popular Hex Design for tidyverse R Packages
tidyverse 部分由 Hadley Wickham 编写,它是一个包的集合,使常见的数据科学任务变得简单、优雅、可重复和快速。这些包的美妙之处在于它们都共享一个共同的语法和设计,所以使用它们是直观的,并能创造显著的效率。核心包可以轻松完成大部分数据科学过程。
- 将数据读入 R: readr ,数据库
- 扯皮扯皮数据: dplyr ,tidyr,tible, stringr
- 可视化数据: ggplot2
编程语言的最大问题之一是阅读别人的代码可能相当困难。然而,当使用 tidyverse 和 tidy data 的核心原则时,这个常见的痛点就消失了。常识动词和基本的代码样式使解释他人的工作变得轻而易举。
第 3 行
*my_linear_model <- lm(formula = dist ~ speed, data = cars)*
前两行代码都是关于围绕 R 的巨大生态系统。然而,base R(不需要任何外部包就能得到的东西)本身就很棒。无需导入任何外部库,这一行代码就是一个矢量化(即超快速)的线性回归。您可以在拥有数百万行和数百列的数据集上运行这段代码。只要不耗尽电脑内存,效率就极高。
汇总统计、蒙特卡罗模拟、矩阵运算和广义线性回归模型,只是您从 base R 中获得的现成内容的几个例子。更重要的是,这些模型是严格运行的,并且已经准备好发布,完成了一个可解释的输出。例如:
**summary**(my_linear_model) *# model summary*
*#> Call:*
*#> lm(formula = dist ~ speed, data = cars)*
*#>*
*#> Residuals:*
*#> Min 1Q Median 3Q Max*
*#> -29.069 -9.525 -2.272 9.215 43.201*
*#>*
*#> Coefficients:*
*#> Estimate Std. Error t value Pr(>|t|)*
*#> (Intercept) -17.5791 6.7584 -2.601 0.0123 **
*#> speed 3.9324 0.4155 9.464 1.49e-12 ****
*#> ---*
*#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1*
*#>*
*#> Residual standard error: 15.38 on 48 degrees of freedom*
*#> Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438*
*#> F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12*
结果可用于分析或应用。这里主要的一点是,R 被设计成自下而上地进行数据科学和统计;而其他语言,比如 Python,依赖于外部库(这并没有什么错!).这个用起来真的很出彩。
第 4 行
*knit()*
每个数据科学项目都需要一些文档。在某些时候,您需要将辛苦获得的数据驱动的洞察力呈现给其他人。很少有比使用 RMarkdown 更好的方法了。
RMarkdown uses knitr to create a powerful documentation system
RMarkdowns 基本概念是,它将简单 markdown 语法与 R 代码'块'联系在一起这产生了一个强大的文档系统。这个过程很简单;编织 R 块并把 markdown 转换成你想要的任何格式(html,pdf,word 等等)。).这意味着您的代码可以立即以多种格式呈现:
- 报告/论文
- 幻灯片
- 网站
- 交互式仪表盘
- 书籍
没有任何其他语言能从自己的生态系统中获得这种类型的支持。你可以学习 R,然后真正准备好写作和出书!
第 5 行
*runApp()*
许多数据科学项目并不以静态输出结束(就像我们从 RMarkdown 得到的那样)。相反,您希望交付能够集成到客户运营中的产品。进入 Shiny,web 应用框架为 R.
从分析到分析的飞跃中,没有什么比闪亮更容易接近了。我已经参与了几十个项目,其中最关键的项目涉及到某种类型的自动化。例如,有时业务问题需要持续的解决方案;你可以使用 Shiny 创建一个特定问题的应用程序留给你的客户。更重要的是,你不必从头开始。这里有很多例子。
Example Shiny App
最好的开始方式是用 shinydashboard 构建一个简单漂亮的应用。只需几行 R 代码,只需使用runApp()
命令,您就拥有了一个全功能的 web 应用程序。然后可以在 MatrixDS 或者 ShinyApp.io 这样的地方举办。
包扎
拥有从软件包到 web 应用程序的高质量社区驱动资源,R 是数据科学的必备语言。此外,当你学习 R 时,你就加入了一个超级棒又有趣的社区。这里有一些你可以做的事情:
- 参加会议
- 加入 meetup
- 在推特上关注哈德利·威克姆
- 书签 R 博主
- 加入 R 女装
此外,如果我没有提到 R 最流行的开发环境 RStudio 是开源运动的主要贡献者,那我就失职了。对这些包和语言的支持得到了学术界和工业界的一些重量级支持。因此,R 哪儿也不去。
你可能会问如何开始。这里有一些资源可以让你有个好的开始。
在线课程
- 商业科学大学
- R 数据营简介
- Udemy
在 LinkedIn 上联系我:https://www.linkedin.com/in/isaacfaber/
用 Python 检测假日的 5 分钟指南
原文:https://towardsdatascience.com/5-minute-guide-to-detecting-holidays-in-python-c270f8479387?source=collection_archive---------3-----------------------
如果您决定深入研究数据分析,例如,想要分析购买趋势,您可能想要在数据集中构造一个新属性,该属性只有两种可能的结果-0 或 1-是假日,不是假日。
Photo by Artem Sapegin on Unsplash
花点时间想想为什么这个派生变量可能有用。你可能不会发现假期本身有更大的购买量,但假期前一周的销售情况如何呢?
一整另一种动物,是不是?
无论如何,在今天这个相当简短的帖子中,我想讨论一下我前段时间发现的一个 Python 库——是的,就是这个名字。它允许你获得特定年份和特定国家的主要节日的日期和名称。你可能想知道它现在支持多少个国家,答案肯定会让你大吃一惊——大约 50 个左右(能够为一些国家指定个别地区)。
你可以在这里找到完整的列表:
* [## 假日
一个快速、高效的 Python 库,用于动态生成国家、省和州特定的假日集。它…
pypi.org](https://pypi.org/project/holidays/)
本文的目标是对您最常用的库和展示函数进行一些探索。我们将创建 2019 年全年的日期列表,并从那里声明另一个列,如果那天(或)是假日,则该列的值为 1,否则为 0。
在进入代码之前,您需要安装库,因此启动终端并执行以下命令:
pip install holidays
一切都好吗?我的意思是应该的,看在上帝的份上,这只是一个小小的安装。不过,现在让我们做一些真正的事情。*
进口货
屁股总是,你的笔记本应该从进口开始。这里没什么特别的,只有 Numpy ,熊猫,日期时间,还有耶,新安装的节假日库:
你可能不需要 Numpy 跟着来,但是我总是喜欢进口的。
提取假期
如果你打开 Holidays library 的文档并向下滚动一点,你会看到 50 多个受支持国家的列表。
现在提取假期非常容易,您需要循环查找感兴趣国家的假期,并指定感兴趣的年份:
是啊,就这么简单。然而,获得的日期不是期望的格式。大多数情况下,您只关心日期本身,而不关心它代表什么假日,因为您最喜欢在数据集中有一个二进制属性,如果假日存在,则值为 1,否则为 0。
好消息是,提取日期的字符串表示非常容易:
现在让我们将所有的字符串表示存储在一个单独的列表中——稍后会派上用场:
太好了。现在,我们可以构建一个熊猫 DataFrame 对象,并在这些假期中尽情玩耍。
将一切联系在一起
对于熊猫,构建日期列表相当简单,比如说 2019 年全年:
太好了。现在,我们可以从这些日期构建一个 DataFrame 对象—让我们将它们放入日期列:
现在有一个小问题。日期看起来是以字符串格式存储的,就像我们的 us_holidays 列表一样,但事实并非如此。这是一个时间戳对象。下一个单元格验证了这一说法:
因此,让我们探索如何只提取日期作为字符串,并丢弃时间信息。您需要将时间戳转换成一个字符串,然后分割该字符串,只保留左边的部分(日期信息)。这是一件相当简单的事情:
现在我们可以使用列表理解的能力来构建一个二进制列表,如果日期是假日,则值为 1,否则为 0。我决定将所有内容打包到 print() 中,并指定一个不同的结束参数,这样整个列表就可以显示在屏幕上:
现在,最后,根据同样的原则,您可以将该列表作为一列添加到之前创建的 Pandas 数据帧中:
你差不多完成了。你现在可以继续你的分析了。当然,您拥有的数据集将会有更多的属性,所以这个新的二进制列对于分析可能会很方便。
感谢您的阅读,我希望您能在工作流程中利用这些知识。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
* [## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)*
熊猫绘图 5 分钟指南
原文:https://towardsdatascience.com/5-minute-guide-to-plotting-with-pandas-e8c0f40a1df4?source=collection_archive---------4-----------------------
了解如何使用这个流行的 python 工具快速可视化数据
Pandas 是数据科学领域最流行的 python 库之一。它提供了一系列用于 python 数据处理和分析的工具。Pandas 还有一个可视化功能,它利用了 matplotlib 库及其核心数据结构,即数据框。
虽然观想是相当基本的,并没有产生最美丽的情节。绘图功能,特别是当与其他 pandas 方法(如 groupby 和 pivot tables)结合使用时,允许您轻松地创建可视化以快速分析数据集。我几乎每天都在使用它来快速获得一些关于我正在处理的数据的信息,所以我想创建这个简单的指南来介绍一些我最常用的功能。
数据
在本文中,我将使用波士顿房价数据集,它是 scikit-learn 库的一部分。这也可以从互联网上的各种其他来源下载,包括 Kaggle 。在下面的代码中,我正在导入数据集并创建一个数据框,以便它可以用于熊猫的数据分析。
from sklearn.datasets import load_boston
import pandas as pdboston = load_boston()
boston_df = pd.DataFrame(boston.data, columns=boston.feature_names)
boston_df['TARGET'] = pd.Series(boston.target)
boston_df.head()
我们可以运行boston.DESCR
来查看每个特性的解释。
入门指南
pandas 中的绘图利用了 matplotlib API,因此为了创建可视化,您还需要将这个库与 pandas 一起导入。如果你在 Jupyter 笔记本中工作,那么你还必须添加%matplotlib inline
命令,以便在笔记本中可视化图形。
import matplotlib.pyplot as plt
%matplotlib inline
plot
方法从一个数据帧或数据系列创建一个基本折线图。在下面的代码中,我使用了这个方法来可视化AGE
列。
boston_df['AGE'].plot()
这个数据的一个更有用的表示是直方图。简单地将.hist
添加到这个命令中就会产生这种类型的图形。
boston_df['AGE'].plot.hist()
您可以通过添加title
参数为情节添加标题。
boston_df['AGE'].plot.hist(title='Proportion of owner-occupied units built prior to 1940')
由于 pandas 使用 matplotlib API,您可以使用该库的所有功能来进一步定制可视化。在下面,我定制了colormap
,并在 x 和 y 轴上添加了定制标签。
boston_df['AGE'].plot.hist(title='Proportion of owner-occupied units built prior to 1940', colormap='jet')
plt.xlabel('AGE')
plt.ylabel('FREQUENCY')
有关可用图表类型和可选参数的完整列表,请参见此处的DataFrame.plot()
文档。
相关
熊猫DataFrame.corr
方法可用于非常快速地可视化数据帧中变量之间的相关性。默认情况下,pandas 使用 pearson 方法,并输出包含变量相关系数的数据帧。
在下面的代码中,我使用这个方法来确定每个特性如何与目标变量相关联。输出显示在代码下方。
correlations = boston_df.corr()
correlations = correlations['TARGET']
print(correlations)
我们可以看到特征 RM(房间的平均数量)与目标有很强的相关性。让我们用熊猫来进一步形象化这种关联。
boston_df.plot.scatter(x='RM', y='TARGET')
上面的代码产生了下面的可视化效果。我们可以看到,一般来说,房子的中值价格随着房间数量的增加而增加。
分组依据
当您使用 groupby 函数组合图表时,pandas 可视化可以变得非常强大,可以用几行代码快速分析多个数据点。
让我们使用此功能来查看按 CHAS 变量分组的箱线图中所有特征的分布。此要素包含两个值,如果地产区域与河流接壤,则值为 1,否则值为 0。使用下面的代码,我们可以很快看到房子靠近河流时变量之间的任何差异。
以下代码按该列对数据框进行分组,并为每个要素创建一个方框图。我们现在可以很快想象出两组之间的差异。
boston_df.groupby('CHAS').boxplot(fontsize=20,rot=90,figsize=(20,10),patch_artist=True)
数据透视表
熊猫数据透视表,非常类似于 excel 等电子表格工具中的数据透视表,对于快速汇总数据非常有用。您可以将数据透视表与 pandas 中的可视化功能结合起来,为这些聚合创建图表。
从上面的方框图中我们可以看出,靠近河边的人和不靠近河边的人在房价上存在差异。在下面的代码中,我们创建了一个数据透视表来计算两组的平均房价。
import numpy as nppivot = pd.pivot_table(boston_df, values='TARGET', index=['CHAS'], aggfunc=np.mean)
pivot
这将创建以下输出。
为了将它可视化为一个柱状图,我们可以简单地运行pivot.plot(kind=’bar’)
,产生如下所示的可视化。我们可以很快看到,靠近河边的房子价格普遍较高。
这篇文章旨在快速介绍如何用熊猫绘图。使用可视化以及将它们与数据透视表和 groupby 方法结合起来,有更多的选择。熊猫用户指南包含了更广泛的可能性列表。
感谢阅读!
5 分钟论文综述:进化随机梯度下降
原文:https://towardsdatascience.com/5-minute-paper-review-evolutionary-stochastic-gradient-descent-7aa1e0a46314?source=collection_archive---------15-----------------------
进化算法如何加速深度神经网络的优化
本文提出了一种新的进化版本的深度神经网络随机梯度下降。随机梯度下降(缩写为 SGD)是由 Robins 和 Monro 在他们的论文“随机近似方法”中首次提出的。它本质上是一种迭代优化方法,在迭代 k 期间随机抽取一个样本,并使用它来计算其梯度。然后,在给定步长(或学习速率)的情况下,将得到的随机梯度用于更新深度网络的权重。)在原始 SGD 算法中,这些被更新的权重被视为单个参数向量 θ 。
Photo by timJ on Unsplash
在他们的介绍中,作者认为 SGD 和进化算法(EAs)之间的互补关系值得研究。与 SGD 不同,EAs 通常是无梯度的。作者假设进化算法在处理复杂优化问题时比遗传算法更有优势,因为它们没有梯度。他们将 EAs 和 SGD 结合起来的提议可能有助于在大型分布式网络上实现优化。
作者提出的新方法使用参数向量 θ 的经验风险作为适应度函数,并在给定一组参数 θs 的情况下搜索最小适应度值。在他们的方法和实现部分,作者给出了提出的进化随机梯度下降(ESGD)算法背后的数学的详细描述。主要思想是给定一组随机初始化的参数向量,该算法搜索给出最低经验风险的参数向量。最好的后代是通过m-精英平均适应度选择的,精英平均适应度实质上是按照升序排列的最好的 m 个个体的平均适应度。例如,当 m = 3 时,则 m- 精英平均适应度给出整个群体中最好的 3 个个体的适应度。
Cui, X., Zhang, W., Tüske, Z. and Picheny, M. (2019). Evolutionary Stochastic Gradient Descent for Optimization of Deep Neural Networks. [online] arXiv.org. Available at: https://arxiv.org/abs/1810.06773
在每一代 ESGD 中,初始种群是通过参数的随机向量化产生的。使用预定的优化器(包括常规 SGD 和自适应矩- ADAM 优化器)和一组固定的超参数,更新每个个体,直到其适应度下降。然后对群体的最终适应值进行排序,并选择前 m 个个体加上 -m 个附加个体作为父代。下一代的后代是通过这些表现最好的个体的中间重组和随机零均值高斯噪声的添加而产生的。当群体的经验风险最小时,产生最小适应值的参数集被选为模型的真实参数。
使用 ESGD 在包括 BN-50、SWB300、CIFAR10 和 PTB 在内的众所周知的基准数据集上进行了多个实验。这些数据集涵盖了涉及语音识别(BN-50 和 SWB300)、图像识别(CIFAR10)和语言建模(PTB)的任务。选择用于评估的三个深度学习模型是深度神经网络(DNN)、ResNet-20(残差网络)和 LSTM(长短期记忆网络)。使用两个附加基线模型的适应值作为参考,作者表明由他们提出的算法产生的适应值在上述数据集内总是不增加的。
Cui, X., Zhang, W., Tüske, Z. and Picheny, M. (2019). Evolutionary Stochastic Gradient Descent for Optimization of Deep Neural Networks. [online] arXiv.org. Available at: https://arxiv.org/abs/1810.06773
在他们的讨论中,作者提出了保持 ESGD 种群多样性的重要性。这是因为如果群体在其适应值方面变得同质,则算法将达到过早收敛,并且将不会产生理想的结果。因此,ESGD 中引入了 m- 精英选择策略,作为一种在种群中诱导多样性的措施。除了种群多样性,作者还指出了由 ESGD 产生的互补优化器的重要性。众所周知,Adam 优化器可以比传统的 SGD 更快地达到收敛。然而,在更长的运行中,SGD 往往会赶上并达到比 Adam 更好的最佳点。作者建议,在 ESGD 中,不仅选择最佳参数,而且选择它们的互补优化器,因为它们负责产生更好的适应值。
总之,ESGD 算法提供了一种为深度学习算法选择最佳参数的新方法。该算法的有效性已经在 4 个数据集和 3 个不同的深度学习模型上得到验证。总的来说,SGD 算法可以被看作是一种共同进化,个体一起进化,为下一代产生更健康的后代。
Photo by Suzanne D. Williams on Unsplash
这是一篇写得很好,对我来说特别有趣的研究论文,因为优化是我研究中最重要的方面之一。它实际上在其方法部分之上有一个实现部分。这有助于像我这样的实际头脑更好地理解所提出的数学在实践中是如何实现的。我想这篇论文自从被选为 2018 年 NeuroIPS (NIPS)会议的参赛作品以来,已经经历了严格的审查。因此,这篇文章条理清晰、格式良好,对我来说并不奇怪。然而,对于在 ESGD 群体中用于优化的实际优化器家族,尤其存在模糊性。作者可以通过列出他们算法中使用的所有优化器和超参数来提供更多的清晰度,而不是仅仅列出几个例子,然后继续下一部分。我也很好奇为什么作者选择使用传统的 SGD 和 ADAM 作为优化器的选择,而不是其他优化器,如 RMSProp、Adagrad 和 Adadelta。似乎没有解释为什么特别选择 SGD 和 ADAM 作为群体的优化器。
Cui, X., Zhang, W., Tüske, Z. and Picheny, M. (2019). Evolutionary Stochastic Gradient Descent for Optimization of Deep Neural Networks. [online] arXiv.org. Available at: https://arxiv.org/abs/1810.06773
实验部分很好地总结了在单基线模型、top-15 基线模型和 ESGD 上运行的多个实验所获得的结果。然而,我发现图 1 中的第四张图非常令人困惑。该图包含 PTB 数据集的 LSTM 网络结果。即使作者解释了 ESGD 模型中困惑的增加,他们也没有解决 top-15 模型中适应值的平坦化。
我最喜欢的文章部分可能是讨论部分。作者就他们算法的重要性提供了许多有意义的讨论。我很高兴看到作者们讨论他们算法的计算效率。他们得出结论,鉴于现代 GPU 的并行计算能力,ESGD 算法应该与常规 SGD 算法花费大约相同的时间来计算端到端。然而,作者没有为 ESGD 提供任何未来的步骤或可能的扩展。我希望看到的一个可能的扩展不仅是网络参数和优化器的共同进化,而且是实际网络架构的共同进化。
2021 年最受欢迎的 5 种商业智能(BI)工具
原文:https://towardsdatascience.com/5-most-popular-business-intelligence-bi-tools-in-2019-4e060b98039a?source=collection_archive---------13-----------------------
随着商业智能(BI)工具在企业中发挥越来越重要的作用,这项技术在未来一年将发挥巨大的作用。BI 软件通过数据显示和分析帮助企业发现形势、市场挑战和机会。因此,it 部门和经理通常会寻找最适合他们需求的 BI 工具。
在这篇文章中,我从用户在 BI 软件中最关心的三个方面比较了 2021 年的 5 大 BI 工具,包括整体易用性、BI 功能和价格。最后,经过比较,你会看到哪个软件最适合你和你公司的需求。
在开始之前,让我们澄清一些商业智能工具的定义。
什么是商业智能?
商业智能为企业提供快速的数据分析技术和方法,包括数据收集、管理和分析。它将数据转化为有价值的信息,帮助企业进行数据驱动的决策,减少决策的盲目性。从而使企业的管理和经营更加合理。
From Google
什么是商业智能工具?
商业智能工具是指具有数据可视化和分析技术的软件。此外,它还具有独特的数据连接和处理能力。用户可以通过可视化界面快速生成各种类型的数据报告、图形和图表。因此,企业中的不同角色可以在安全的环境中,在不同的终端(如 PC、移动终端、大屏幕)上查询、分析和浏览数据。
商业智能工具有哪些类型?
根据功能模型的不同,商业智能工具可以分为三类:报表 BI、传统 BI 和自助 BI。
汇报 BI:
汇报 BI 主要面向 IT 部门。适用于各种固定格式的报表设计,通常用于呈现业务指标体系,支持的数据量不高。
报表 BI 主要采用类 Excel 的设计模式。虽然这种类型的 BI 目标是释放它在建立报告系统的艰苦工作,业务人员也可以快速学习在既定的数据范围内产生基本的报告和仪表板。
传统匕:
传统 BI 也面向 IT 人员,但侧重于 OLAP、即席分析和数据可视化分析。IBM 的 Cognos 和 sap 的 BO 是传统 BI 的代表。它的优点是处理大数据时的高性能和稳定性。但它的缺点也很明显——数据分析能力和灵活性差。根据 Forrester 的报告,传统 BI 无法满足企业 83%以上的数据分析需求。这表明许多企业已经建立了几乎无效的 BI 系统。此外,成本高、实施周期长、风险大、对用户的技术要求高也不利于传统 BI 的推广和普及。
自助商务智能:
自助 BI 也称为敏捷 BI。自助式 BI 的出现解决了传统 BI 无法满足业务部门分析需求的问题。
自助式 BI 面向业务人员,追求业务部门与 IT 部门的高效合作。通过直观的数据分析界面,业务人员可以基于对业务的理解高效地进行自助分析,发掘数据的价值,开发数据驱动的业务。
希望你从上面对商业智能工具有更深入的了解。如果是,那就言归正传,开始 bi 工具的回顾吧。
商业智能工具比较标准
我在2020 年商业智能工具十大关键特性中整理了一些商业智能工具的常见特性。基于此,我选择了用户在 BI 软件中最关心的三个方面:
- 整体易用性:用户界面设计的如何?直观吗?工具入门有多难?他们有培训、工具提示或视频来帮助你学习你在做什么吗?
- BI 特点:有哪些利弊需要注意?
- 价格:多少钱?
BI 工具列表
1.画面
类别:自助 BI 工具
From Google
1.1 整体易用性
该工具创建图形的直观方式和用户友好的界面使外行用户能够充分利用基本应用程序的功能。设计仪表板时,您需要创建一个工作表,然后将其拖动到容器中。对于初次使用的用户来说,需要时间来适应。
然而,一般来说,非技术用户无需深入培训就可以享受 stats 解析功能。要想深入了解该解决方案的功能,Tableau 社区是一个很好的去处,因为 Tableau 的粉丝将他们的专业知识和技能投入到社区中,他们愿意帮助解决任何用户问题并分享他们的经验。
1.2 BI 功能:利弊
- Pro:支持多数据源
关系数据库
NoSQL 数据库
多维数据库
大数据平台
文件数据源(Execl、csv、txt、Json、pdf、mdb、Tableau)
- 亲:惊人的数据可视化
无与伦比的可视化信息的能力是 Tableau 软件的最大优势。使用独特的可视化技术,我们可以通过使用颜色、形状和大小来表达分析结果,从而快速分析数据。开发团队正在研究用户喜欢什么类型的图表,以便 Tableau 可以显示数据的最佳图形。这部分唯一的缺点是不能制作仪表、3D 图和热图。
- 弊:BI 能力差
Tableau 缺乏全面的商业智能工具所需的功能,例如大规模报告、构建数据表和静态布局。而且导出和打印的格式有限,不便于结果共享。
- 缺点:定制问题
Tableau 几乎是封闭的,很难定制或嵌入到公司的 it 环境中。
1.3 价格
价格是根据用户数量而定的。考虑到大多数中小型公司的许可成本相当高,Tableau 是大型企业的首选。
2. FineReport
类别:报告 BI 工具
From Google
2.1 整体易用性
FineReport 拥有类似 Excel 的界面和拖放元素,新手很容易上手。任何之前使用过 Excel 的人都可以快速学习 FineReport。官网为用户提供了详细的教学文档和视频。
2.2 商务智能的特点:利弊
- Pro:智能数据输入
数据输入是 FineReport 的一个显著特点。它提供了丰富的控件,可以轻松地通过表单将大量数据直接输入到数据库中,并具有数据验证和临时存储等周到的功能。此外,它还支持在线和批量导入 excel 数据。
- 亲:轻松制作复杂报表
处理复杂报告的能力令人印象深刻。将聚合块自由拼接在一起,免去了 Excel 中频繁合并拆分单元格的麻烦。每个聚集块是独立的;您可以拖放并自由地将它们放在一起,以创建不规则的报告。
- 坏处:不方便多维分析
您可以为一个单元格数据设置多个向下钻取和向上钻取,但是您需要为每个维度创建一个报表。
- 缺点:没有推荐的图表功能
虽然 FineReport 提供了丰富的视觉效果、图表、地图、3D 效果,但并不根据数据推荐图表。你应该自己选择图表。
2.3 价格
FineReport 对个人使用是免费的,没有时间和功能限制。对于企业来说,按照功能模块和并发用户来收费。价格在 Tableau 和 PowerBI 的之间。
3. PowerBI
类别:自助 BI 工具
From Google
3.1 整体易用性
既然是微软开发的 BI 工具,基本上就是把 Excel 的数据透视表和 Excel 的数据可视化工具带到了一个更高的层次。PowerBI 的用户界面类似于 Excel,它允许一个短的学习曲线。它还为进一步学习提供了详细的学习视频和文档。
3.2 商务智能特性:利弊
- Pro: Excel 集成
PowerBI 可以无缝连接到任何 Ms office。此外,使用 PowerBI,您可以将数据放在 Excel 中,这样您就可以轻松地看到可视化背后的原始数据。
- Pro: R 脚本可视化
PowerBI 是前 5 大 BI 工具中唯一支持 R 的工具,它使用 R 丰富的分析和可视化功能来呈现高级数据整形和分析,如预测。
- 反对:权限管理问题
不是企业级控件,不支持多级权限分配,无法控制用户查看的列级权限粒度,集团权限控制也没有相应的完整控制策略。
- 缺点:免费版本的数据处理能力差
免费版本对它能处理的数据量有限制。一旦数据量达到 2GB,你就必须升级到付费版本,以减少处理时间。
3.3 价格
如果您的预算不多,并且正在寻找一个实惠的选择,Power BI 将是您最终选择的产品。Pro 版售价 9.99 美元/用户/月,低于小众同类产品。
4. QlikView
类别:自助 BI 工具
From Google
4.1 整体易用性
QlikView 是一种自助式 BI 工具,使用自己的“关联技术”和内存技术运行。它有一个直观的界面,可以直观地使用,并具有智能搜索功能。它不需要立方体结构,比常规分析更适合于特别分析。
4.2 商务智能的特点:利弊
- Pro:内存技术
由于其内存技术,QlikView 在数据从后端传输到前端时计算数据。因为没有预先聚集或预先计算的数据被预先存储,所以可以节省系统的存储器,并且数据传送的速度很快。
- 亲:直接&间接数据搜索
在 QlikView 中,您可以搜索直接和间接数据。在直接搜索中,您可以输入数据并获取您的信息。而在间接搜索中,您可以输入与您想要的数据相关的内容,并获得所有相关数据。
- 缺点:对于非技术用户来说不够友好。
数据管理应该更加方便用户。现在,它在脚本编辑器中。熟悉关系数据库的人可以很容易地处理这个问题,但是程序员的知识是必须的。最终用户或非技术人员可能不敢开始使用 QlikView,因为他们会发现很难上手。
- 缺点:不支持地图图表
除非购买第三方加载项,否则创建地理制图图表相当复杂。
4.3 价格
QlikView 上每个私人用户 1350 美元,并发用户 15000 美元。一个服务器许可证是 35000 美元。其他服务需要额外付费。
5. Sisense
类别:自助 BI 工具
From Google
5.1 整体易用性
像商业智能工具的其他市场领导者一样,界面非常直观,用户可以通过拖放操作。Sisense 也有一个在线社区。虽然 Sisense 的社区用户活跃度不如 Tableau,但是那个社区的资源对于深度学习的新手来说已经足够了。
5.2 商务智能特性:利弊
- Pro:速度快
借助该软件的片内引擎,您可以提出任何问题并立即获得答案,而无需重新开始新的查询。
- Pro:灵活集成
Sisense
- 缺点:限量图表
图表有限。此外,与市场领导者相比,开箱即用的可视化和报告功能有点太基础了。
- 缺点:不方便团队合作
管理员当前不能编辑彼此的仪表板。只有文件夹和仪表板的所有者可以发布任何更改。
5.3 价格
提供免费试用,完整版价格以报价为基础,需要联系供应商。
哪个 BI 软件最符合我的需求?
所以你已经了解了好处并检查了缺点。当您查看这 5 大 BI 工具时,哪一个是最好的?你可以看到这个商业智能软件有优点也有缺点。如果你仍然不确定哪种软件更适合你和你公司的需求,这可能会给你的决定提供一些建议。
看看画面,如果你:
- 需要能够提供出色数据可视化的软件。
- 有足够的预算。
- 想用一个拖放界面自己做一些商业分析
如果您有以下情况,请查看 FineReport:
- 需要减少批量构建复杂报告的时间
- 对 BI 工具的灵活部署和集成有需求
- 想在电视屏幕或大屏幕上显示您的仪表盘吗
如果您符合以下条件,请查看 PowerBI:
- 正在使用微软办公软件并熟悉 Excel
- 预算不多,你正在寻找一个负担得起的选择
- 重视团队合作和软件的协作特性
如果您符合以下条件,请查看 QlikView:
- 侧重于即席分析。
- 处理大量数据,对数据传输速度有很高的要求
- 掌握一些关系数据库的基础知识和编程知识
如果您符合以下条件,请查看 Sisense:
- 必须处理大而分散的数据集
- 对数据处理速度有很高的要求
- 正在寻找涵盖所有业务分析的软件
您可能也会对…感兴趣
2019 年你不能错过的 9 款数据可视化工具
2019 年 6 大数据分析工具
什么是大屏幕的数据可视化,如何实现?
数据分析师需要掌握的 6 项关键技能
商业仪表盘入门
新手如何设计酷炫的数据可视化?
数据可视化十大地图类型
数据科学的 5 个必备应用
原文:https://towardsdatascience.com/5-must-have-applications-for-data-science-b8479f06e4a2?source=collection_archive---------10-----------------------
随着数据科学成为软件行业越来越多的话题,机器学习成为技术领域的前沿,每天都有新的应用程序开发出来,让工作变得更简单、更快速。随着这种令人兴奋的增长,我们不断有新的创造者、科学家和分析师加入终生学习的行列。
今天我决定分享我个人最喜欢的五个工具,有些很明显,有些不太明显。不管怎样,希望有人发现这些工具的推荐是有用的。
5.WSL
这个列表中的第一个工具是 Windows 用户专用的,也就是说,不是我专用的,但是它是在 Windows 中最大化工作流程的一个好方法。对于那些刚刚接触这个概念的人来说,Windows 没有传统的 bash 终端,因为这个操作系统的编程方式与基于 Unix 的系统完全不同。这对普通开发人员的工作流程是一个严重的损害,对于数据科学家来说也是如此。
然而,WSL 允许您在 Microsoft Windows 中运行一个虚拟的 Linux 终端,通常是 Ubuntu。通常情况下,Windows 上的套件需要不断的应用程序切换,“Git-Bash”,“Anaconda Prompt”等。当然,走这条路没有错,但是 WSL 使整个集成变得更加容易,并允许显著增强的工作流,尤其是在与团队合作时。
4.数据库浏览器
很多人可能没有听说过 DB-Browser。DB-Browser 允许您查看数据库的内部结构,并熟悉其模式,而无需发送任何查询。当我有一些神秘的数据库时,或者想要测试一些查询以确保它在推送代码之前正确地做了我想要的事情时,我会大量使用 DB-Browser。DB-Browser 在 Windows、Linux 和 Mac 上也普遍可用,这使得它成为一个任何人都可以使用的免费工具。
3.r 工作室
如果您是一名杰出的 R 程序员,或者更喜欢 Python、Scala、MATLAB 或 Julia,但是经常使用 R,R studio 绝对是值得研究的 DS 工具。R studio 唯一显著的缺点是它不便宜,当然也不是免费的。无论价格还是使用,R studio 绝对是一个很酷的工作环境,我非常喜欢。
2.码头工人
Docker 是另一个你可能想到过,但没有出现在这个列表中的。由于这是一个更加固执己见的列表,我想我应该提醒你 Docker 并不总是最好的选择。然而,作为一个喜欢开发操作系统和 Linux 的人,Docker 是一个设置虚拟环境来完成工作的好工具。我们不仅拥有像 Python 包索引这样的语言包管理器的优势,我们还拥有 Linux 包管理器的优势。
虽然这些好处肯定是有的,但对大多数人来说,只使用画中画/虚拟环境可能是一个更好的主意。这些工具对于快速设置、跟踪 pip 轮和部署绝对有用。这两种方式各有利弊,但就我而言,我推荐 Docker。
1.朱皮特
在所有人都看到的结论中,我向你呈现:
朱皮特
当然,Jupyter 可能不需要介绍,但它在我的列表中名列前茅,因为没有它没有任何意义。Jupyter 允许你在一个虚拟的执行虚拟内核的单元中使用 Conda 虚拟环境。这对于数据科学来说是必须的,但是当然你可能已经知道了。
还要注意的是,Jupyter 是跨平台的,可以在任何地方使用。Jupyter 还支持允许执行任何语言的扩展,使它成为除 Python 之外还可以与 R、Scala、Julia 和 C 一起使用的工具。我无法告诉你我一天中有多少次跳进 Jupyter 来调试某个东西,或者在尝试使用某个功能之前测试它。快速简单的设置也是一个优势。
结论
有许多工具可以让数据科学家的工作变得非常简单。根据我使用每种软件的频率,这是我最喜欢的五种软件,但我很想知道其他数据科学家喜欢使用什么软件,以及他们也喜欢我使用的软件。请随意在下面分享,因为我绝对想知道。
我非常兴奋地看到以 DS 为中心的软件在未来几年甚至更长时间内的发展前景。随着过去一年的显著增长,我想我们将在未来几年看到一些非常酷的东西!
数据挖掘的 5 个误区
原文:https://towardsdatascience.com/5-myths-of-data-mining-70d49f0abd18?source=collection_archive---------15-----------------------
https://www.freepik.com/free-vector/data-mining-isometric-concept_4015382.htm
什么是数据挖掘?
数据挖掘用于分析数据,检测数据中的模式和关系,并将其转换为有用的信息,以便企业做出更好的决策。数据分析已经出现了几个世纪,但最近由于新的专业技术进入市场而变得普遍。但是,随之而来的是关于什么是数据挖掘、它如何工作以及利用它的好处的许多误解和神话。
Photo by Markus Spiske on Unsplash
误区一:数据挖掘是一个极其复杂且难以理解的过程。
数据挖掘背后的算法可能很复杂,但是使用正确的工具,数据挖掘可以很容易使用,并且可以改变你经营业务的方式。数据挖掘工具使您能够通过简单易懂的图表、查询和可视化来轻松查看和理解您的数据,让您深入了解您的业务是如何运作的。然后,您可以识别问题和潜在问题,并做出基于分析的决策来改善效率低下的情况。
数据挖掘工具并不像人们想象的那样复杂或难以使用。它们被设计成易于理解,以便企业能够解释产生的信息。数据挖掘是非常有利的,不应该让那些考虑使用它的人感到害怕。
Photo by Donald Giannatti on Unsplash
神话 2:数据挖掘是另一个很快就会消失的趋势,它让我们可以回归标准的商业实践。
定量实践已经被企业采用了相当一段时间。数据挖掘只是 20 世纪初出现的一种更成熟的实践。数据无处不在,一些数据库的大小非常大,使得手动发现变得极其困难。凭借易于使用的功能、降低成本和减少时间的优势,以及在快速部署且易于理解的解决方案中对公司绩效进行分析的能力,很难相信如此有利和有益的东西会逐渐消失。如果说有什么不同的话,数据挖掘将是一个永恒的、不断发展的工具,它将在未来的几年里帮助我们。
Photo by Austin Distel on Unsplash
误区三:数据挖掘技术如此先进,可以取代领域知识。
企业及其市场的专业知识和经验不能被数据挖掘技术取代。关于新出现的分析方法的知识是重要的,但是,如果没有业务和市场的知识,这些方法是没有用的。因此,对两者都有所了解是至关重要的。
如果你正在对一家公司的数据进行分析,有一个该领域的专家来理解产生的信息是很重要的,反之亦然。如果有人了解业务及其市场,请数据挖掘专家使用工具和建模进行分析以帮助提高他们的业务知识是很重要的。没有领域知识,数据挖掘基本上就无法存在。
Photo by ev on Unsplash
误区四:只有大数据库才值得挖掘。
虽然数据挖掘更常用于分析大数据集,但它可以用于任何规模的数据集。几乎任何数量的数据都可以产生有价值的信息,可用于企业检测问题和潜在问题。即使是这些样本规模的数据集,也能让企业发现效率低下的地方,并主动或计划加以改进。与整个数据库本身相比,从大型数据仓库中提取某些数据来进行分析可能更有益。你只需要知道你想要分析哪些数据来产生有价值的结果和结论。
Photo by John Schnobrich on Unsplash
误区五:数据挖掘只在某些行业有用。
尽管数据挖掘可能最常用于高度关注数据和创新驱动的行业,但它是一种可用于任何行业的工具。总会有数据挖掘不值得投资回报的情况。但是就像数据库的大小不重要一样,行业也不重要。你分析的任何类型的数据都有价值。
以下是要点:
数据挖掘对你的企业来说既不太贵也不太复杂。最重要的是,人们在那里提供帮助;技能和知识可能已经存在于您的组织中,但是您的团队中有数据英雄吗?随着分析和可视化工具变得越来越用户友好,更多的人现在能够从数据挖掘中获得洞察力。你不再需要成为一名计算机科学博士来从你收集的数据中获取价值。是时候我们扔掉“但这是我们一直以来的做法”并开始挖掘数据来为我们的业务提供真正的价值了。
RYAN M. RAIKER,MBA // Ryan Raiker 是 ABBYY 的高级产品营销经理,ABBYY 是一家业务流程和数字智商解决方案的全球供应商。作为常驻的“流程智商人员”,Ryan 在流程发现、分析、监控和预测/说明性分析、业务战略管理、业务发展方面拥有专业知识,专注于帮助公司了解其业务流程并从中获得价值。他获得了威得恩大学的工商管理硕士学位、商业分析/信息学学士学位和运营管理辅修学位,并继续在该大学担任兼职教授。
提升你的编程生涯的 5 个新年决心
原文:https://towardsdatascience.com/5-new-years-resolutions-to-amp-up-your-programming-career-175c4f9c7068?source=collection_archive---------20-----------------------
如何在 2020 年提升你作为开发者的就业能力
1 月 1 日即将到来,伴随着午夜钟声的承诺。有太多的事情需要开始或停止。但有时我们的新年决心中会忽略我们的职业目标。这是非常不明智的,因为工作是我们生活中如此重要的一部分,为了我们的最大利益,我们应该做得更好。
我们应该仔细考虑十年后我们想要达到的目标,并计划🅝🅞🅦如何达到目标。十年的结束是一个很好的时机来反思什么对我们有用或没用,并思考我们可以做什么不同的事情来实现下一个十年的目标。
所以从编程中休息一下,在你完全沉浸在同样的旧工作中之前,花一些时间来反思和解决。记住这一点,这里有一些解决办法和一些附带的资源,让你走上新的轨道。
**⭐️ Pro Tip:** As you approach this list, do not be vague. Think to yourself: "*What shall I do, by when*". You need to make a plan: [SMART](https://en.wikipedia.org/wiki/SMART_criteria) goals are specific, measurable, achievable, relevant and time bound.
让我们一起来看看这个列表:
— 1:学习软件制作的艺术
让一个程序运行起来并不需要大量的知识和技能。每个人都能做到。让某些东西工作并不是一件困难的事情——让它正确才是!想象一下你第一次上编程课时写的第一个程序。并与现在进行比较。看看你走了多远?
现在,让我向您介绍设计模式、坚实的原则和软件架构范例的神奇世界,看看您如何将自己定位于编写优雅软件的少数精英,这些软件具有持久性、高内聚和松散耦合,最显著的是易于理解、扩展和维护。
“建筑是关于重要的东西。不管那是什么。”—拉尔夫·约翰逊
这里有几本你今年应该努力阅读的经典著作:
- 企业应用架构的模式
- 干净的建筑
- 设计模式:可重用面向对象软件的元素
如果你把心思放在建筑管道上,而不是最新的语言、流行的框架或其他开发时尚上,软件工程会得到更好的服务。我不是说这些不重要;事实上正好相反!但是如果你想提升你的职业生涯,这是我的第一条建议:把你的精力集中在构建软件上,然后以一种维护成本低的方式开发软件。换句话说:了解软件架构;你的雇主会喜欢你的!
— 2:关注用户体验
大多数后端开发人员认为 UX(用户体验)设计等同于 UI(用户界面)设计,所以他们认为 UX 是前端开发人员的责任。没有。我将通过“解释”我在“UX 开发者设计实践”一书中看到的一张图片来解释这种差异。以下是我对此的看法:
UX 设计不仅仅是视觉上的;它关注用户体验的整体感觉,并涉及整个软件开发生命周期。软件多久中断一次,你如何向用户提供反馈,界面有多直观,运行一批需要多长时间,响应时间有多短,解决一个问题的上市时间有多长[是的,这在这里也起作用。
我和我的团队在与非常难以取悦的银行家和风险经理打交道多年后,艰难地学会了 UX 的五条简单规则:
- 设计软件时让用户参与进来
- 性能和功能一样重要
- 错误消息应该针对用户,而不是开发人员
- 自我导向的用户界面中清晰的导航是最好的
- 质量保证是软件开发不可或缺的一部分
特别是在用户界面设计方面,我推荐你查阅几个资源:101 UX 原则书和 99%不可见播客。
— 3:做一个有开发意识的开发者
许多程序员认为他们的主要职责是编码,他们认为 DevOps 是一个松散的概念,实际上并不能帮助他们改善现状。这是不正确的,接受 DevOps 可以极大地帮助你的编程生涯。我的建议是从这些基本的 DevOps 技能开始:
连续交货
连续交付(CD)是从构建到生产环境中构建、测试、配置和部署软件的过程。为了向您的最终用户交付价值,您必须持续、快速、一致且无误地发布。Atlassian 的 Bamboo 是我的首选工具,因为它易于配置,并且开箱即可与吉拉集成。在这里你可以找到更多信息。对于一个开源的等价物,试试詹金斯。
如果你仍然依赖手工过程来部署你的软件,帮你自己一个忙,停止吧!当你熟悉了的好处之后,使用 CD 将是一件轻而易举的事情!
测试自动化
软件测试不再仅仅是与项目相关的质量保证(QA)专家的责任。当您持续交付软件时,不可能依赖特别的和手工的测试。我假设你有 TDD(测试驱动开发)的基础知识,所以我鼓励你熟悉几种测试技术和 BDD(行为驱动开发):
- 软件测试中的经验教训
- BDD 在行动
应用程序监控
反应式软件补救措施并不理想,因为它们会中断客户服务,所以每个组织都提供了一种 APM(应用程序性能监视器)系统来监控 CPU 使用、磁盘空间、SLA 等。但是作为一名开发人员,您还能引入什么来帮助和补充这项工作呢?监控和分析日志对于跟踪应用程序性能、故障排除、执行根本原因分析、审查系统行为和预测未来中断非常重要。
我建议你关注一下 Elastic (ELK) stack ,因为该公司已经为开源和商业用途整合了可以说是最受欢迎的日志管理平台: Elasticsearch 用于深度搜索和数据分析, Logstash 用于集中日志记录、日志丰富和解析, Kibana 用于强大而漂亮的数据可视化。他们的在线视频是一个很好的切入点。
DevOps 对软件开发产生了重大影响。我们在这里只是触及了表面,但是伴随你的旅程的 DevOps“善良”的伟大资源是 DZone 。
— 4:提高你的人际交往能力
认为开发人员是只独自工作的内向极客的想法已经完全过时了。程序员是团队的一部分,他们每天都与同事、经理和业务用户互动。需要提高的首要能力是谦逊。你可能已经读过我对这个问题的看法了:在职业发展方面,技术能力尚可但软技能优秀的程序员比技术大师表现更好!!
这只是成为更好的开发者的一个方面;为了获得更全面的人际交往技巧,我建议你阅读以下两本优秀的书籍:
- Peopleware
- 软技能:软件开发人员的生活手册
— 5:了解业务领域
作为一名年轻的工程师,在我曾经工作的环境中,业务分析师(BA)是业务和开发团队之间的联络人,所以我相信如果 BA 能够向我解释需求,我就会编写代码——这在我职业生涯的早期阶段很好。然而,我艰难地意识到,企业并不关心代码!作为软件工程师,我们的工作不是编写代码,而是为公司增加价值(T21)并产生商业影响。
花时间了解企业如何运作是我们工作的一个主要部分,但经常被忽视。没有简单的、放之四海而皆准的答案,因为我们都可能专注于不同的领域,但一个想法是与企业交谈并寻求建议,参加培训课程,甚至寻求商业认证。你的最终目标应该是证明你可以在与企业的讨论中贡献出许多独特而有价值的见解!例如,尝试指出错误的规范,并提出他们接受的替代建议。
为了解决一个问题,你必须首先理解这个问题
如果你想从一个程序员进步到开发主管、架构师或项目经理,并获得一席之地,这将对你有极大的帮助!
关于下决心
今年你不需要制定太多的计划。你只需要几个对你的编程生涯和心态有积极影响的好例子。我希望这篇文章能激励你以最好的方式开始属于你的一年!
📌 **The Statistics behind New Year’s resolutions** The statistics on how many people actually follow through and accomplish their New Year’s resolutions are rather grim. [Research](https://www.forbes.com/sites/kevinkruse/2016/01/03/making-new-years-resolutions-stick/#6a4c4c456903) suggests that approximately half of all Americans make New Year’s resolutions yet only **8%** actually achieve them. Also [according to 'U.S. News'](https://health.usnews.com/health-news/blogs/eat-run/articles/2015-12-29/why-80-percent-of-new-years-resolutions-fail) approximately **80%** of resolutions fail by the second week of February!Ouch! Don’t be part of these statistics!📌 **Make your career resolutions stick**
How can you join this elite few people that pursue their plans and achieve their goals? [Here](https://hbr.org/2014/12/make-your-work-resolutions-stick) is what the Harvard experts say.
新年快乐——新的十年快乐
🤞祝新年快乐、健康、成功。希望 2020 年,我们所有人都离我们渴望拥有的职业更近一步,成为我们想成为的人。
🙏最后但同样重要的是,让我对今年所有的读者和TDS 团队 说声谢谢。这真的是一次很好的聚会,你们都是一个很棒的社区的一部分。****
感谢阅读!
我定期在媒体上撰写关于领导力、技术&的数据——如果您想阅读我未来的帖子,请‘关注’我 !
我希望我能早点知道的 5 个 Python 特性
原文:https://towardsdatascience.com/5-python-features-i-wish-i-had-known-earlier-bc16e4a13bf4?source=collection_archive---------0-----------------------
Python 初学者
超越 lambda、map 和 filter 的 Python 技巧
Photo by Kirill Sharkovski on Unsplash
Python 可以说是近十年来崛起的编程语言,并且被证明是一种非常强大的语言。我已经用 Python 开发了很多应用,从交互式地图到区块链。Python 的特性那么多,初学者一开始很难掌握所有的东西。
即使你是一个从 C 或 MATLAB 等其他语言转换过来的程序员,用更高抽象层次的 Python 编码绝对是一种不同的体验。我希望我能早点知道 Python 的一些特性,并强调其中最重要的五个。
1.列表理解—紧凑代码
许多人会将 lambda 、 map 和 filter 作为每个初学者都应该学习的 Python“技巧”。虽然我认为它们是我们应该知道的功能,但我发现它们在大多数时候并不特别有用,因为它们缺乏灵活性。
Lambda
是在一行中组合一个函数供一次性使用的方法。如果多次调用这些函数,性能会受到影响。另一方面,map
将一个函数应用于列表中的所有元素,而filter
获取满足用户定义条件的集合中的元素子集。
Photo by Anastase Maragos on Unsplash
列表理解是一种简洁而灵活的方法,通过灵活的表达式和条件从其他列表中创建列表。它由一个方括号构成,带有一个表达式或函数,仅当元素满足特定条件时,该表达式或函数才应用于列表中的每个元素。它还可以嵌套处理嵌套列表,比使用 map 和 filter 灵活得多。
# Syntax of list comprehension **[** expression(x) **for** x **in** aList **if** optional_condition(x) **]**
2.列表操作—循环列表
Python 允许负索引 where aList[-1] == aList[len(aList)-1]
。因此,我们可以通过调用aList[-2]
等等来获得列表中的倒数第二个元素。
我们还可以使用语法aList[start:end:step]
对列表进行切片,其中包含开始元素,但不包含结束元素。因此,调用aList[2:5]
就产生了[2, 3, 4]
。我们也可以简单地通过调用aList[::-1]
来反转一个列表,我发现这种技术非常优雅。
Photo by Martin Shreder on Unsplash
列表也可以解包成单独的元素,或者使用星号混合元素和子列表。
3.压缩和枚举循环
Zip
函数创建了一个迭代器,它聚集了多个列表中的元素。它允许在 for 循环中并行遍历列表和并行排序。可以用星号解压。
Photo by Erol Ahmed on Unsplash
Enumerate
一开始可能看起来有点吓人,但在许多情况下会变得非常方便。它是一个自动计数器,经常在 for 循环中使用,因此不再需要通过counter = 0
和counter += 1
在 for 循环中创建和初始化计数器变量。Enumerate 和 zip 是构造 for 循环时两个最强大的工具。
4.生成器—内存效率
当我们打算计算一大组结果,但希望避免同时分配所有结果所需的内存时,使用生成器。换句话说,它们动态地生成值并且不在内存中存储先前的值,因此我们只能对它们迭代一次。
它们通常在读取大文件或使用关键字yield
生成无限序列时使用。我经常发现它在我的大部分数据科学项目中很有用。
5.虚拟环境—隔离
如果您只能记住本文中的一件事,那么它应该是使用虚拟环境。
Photo by Matthew Kwong on Unsplash
Python 应用程序经常使用来自不同开发者的许多不同的包,具有复杂的依赖性。使用特定的库设置开发不同的应用程序,其中结果不能使用其他库版本再现。这里不存在满足所有应用要求的单一安装。
conda create -n venv pip python=3.7 # select python version
source activate venv
...
source deactivate
因此,为每个应用程序创建独立的自包含虚拟环境venv
至关重要,这可以使用pip
或conda
来完成。
相关文章
感谢您的阅读。你可以注册我的简讯来接收我的新文章的更新。如果您对数据科学感兴趣,以下文章可能会有用:
[## 每个 Python 初学者都应该学习的 4 个 NumPy 技巧
编写可读代码的技巧
towardsdatascience.com](/4-numpy-tricks-every-python-beginner-should-learn-bdb41febc2f2) [## Python 3.8 中针对 Python 新手的 6 项新特性
请做好准备,因为 Python 2 不再受支持
towardsdatascience.com](/6-new-features-in-python-3-8-for-python-newbies-dc2e7b804acc) [## Python 初学者应该避免的 4 个常见错误
我很艰难地学会了,但你不需要
towardsdatascience.com](/4-common-mistakes-python-beginners-should-avoid-89bcebd2c628)
最初发布于edenau . github . io。
数据科学家离不开的 5 个 Python 包
原文:https://towardsdatascience.com/5-python-packages-a-data-scientist-cant-live-without-531566b93c90?source=collection_archive---------21-----------------------
介绍性概述
Python 是一种通用语言,因此,它提供了大量的扩展,从科学编程到数据可视化,从统计工具到机器学习。
了解每个可用的扩展几乎是不可能的,但是如果你的任务包括分析数据并在其上建立机器学习模型,那么有几个扩展是至关重要的。
因此,在这篇文章中,我将详述 5 个主要的包,它们将使您的 Python 变得非常通用,它们是:
所以我们开始吧!
Numpy
Numpy 是一个科学计算包。它允许您执行任何种类的数学和统计操作。特别是(这也是为什么它是机器学习的基础),它允许你非常快速和容易地执行 N 维计算。任何时候你被要求操作向量和矩阵,你知道你必须使用 Numpy 来达到这个目的。
现在让我们看一些例子。
Numpy 的主要对象是同构多维数组,它可能看起来像向量(如果维度是 n,1)或矩阵(如果维度是 n,m)。让我们创建包含 1,2,3 的第一个数组:
import numpy as np
a=np.array([1,2,3])
a
Output: array([1, 2, 3])
我们可以用以下方法检查这个数组的一些属性:
a.shape
Output: (3,)
a.dtype
Output: dtype('int32')
type(a)
Output: numpy.ndarray
我们还可以通过指定组件的数量和形状来初始化数组。也就是说,如果我想创建一个数字从 0 到 11 的 3×4 矩阵,我将写:
b=np.arange(12).reshape(3,4)
b
Output: array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
你也可以把不是数组的对象转换成数组,比如列表。每当你需要计算列表项时,这是非常有用的。假设你想减去这两个列表:
list_1=[1,2,3]
list_2=[4,5,6]
list_2-list_1
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-4c6e19f7626c> in <module>
1 list_1=[1,2,3]
2 list_2=[4,5,6]
----> 3 list_2-list_1
TypeError: unsupported operand type(s) for -: 'list' and 'list'
如你所见,因为你不能减去两个列表,所以出现了一个错误。但是,如果你使用这个技巧:
np.asarray(list_2)-np.asarray(list_1)
Output: array([3, 3, 3])
问题绕过了!
熊猫
Pandas 提供数据结构和数据分析工具,这些工具对于您的数据进行清理和用于机器学习任务是必不可少的。
pandas 中的主要对象是数据帧,它只是结构化的数据集,可以很容易地修改和访问。您可以创建或导入(从 web、csv 文件、文本文件等)您的数据框架。
让我们从头开始创建一个:
import pandas as pd
data = [['alex', 10], ['tom', 15], ['jim', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
df
我们可以访问这个 df 的元素,因为它是一个矩阵:
df[:1] #showing only the first row
df.iloc[:,1] Output:
0 10
1 15
2 14
Name: Age, dtype: int64
熊猫数据框架的所有列都是系列对象:
type(df['Age'])
Output: pandas.core.series.Series
我们还可以向数据集追加新列,并设置索引:
g=['M','M','M']
df['Gender']=g
df.set_index('Name',inplace=True)
df
Pandas 是处理大量数据的基础,因为它还能够总结相关信息(如缺失值、异常值、平均值和频率等)。
df.isnull().sum() #for missing values Output:
Age 0
Gender 0
dtype: int64df.describe()
Matplotlib
Matplotlib 提供了不同的数据可视化工具。它不是 Python 中唯一可用的可视化包,然而它是最直观的,并且能生成非常好的结果。
让我们看看如何绘制不同的图表:
import matplotlib.pyplot as plt
import numpy as np
men_means = [20, 34, 30, 35, 27]
x = np.arange(len(labels))
fig, ax = plt.subplots()
ax.bar(x - width/2, men_means, width, label='Men')
ax.set_title('Men Means')
我们还可以在同一个图表中显示多个条形:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
men_means = [20, 34, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]
x = np.arange(len(labels))
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, men_means, width, label='Men')
rects2 = ax.bar(x + width/2, women_means, width, label='Women')
ax.set_title('Men and Women Means')
现在,让我们用直方图和正态分布图近似来模拟正态随机变量:
import matplotlib.pyplot as plt
mu, sigma = 0, 0.1 # mean and standard deviation
s = np.random.normal(mu, sigma, 1000)
count, bins, ignored = plt.hist(s, 30, normed=True)
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (bins - mu)**2 / (2 * sigma**2) ),linewidth=2, color='r')
plt.show()
现在想象一下,我们要绘制一个调查结果,让人们说出他们最喜欢的意大利面食。调查的结果是:
import matplotlib.pyplot as plt
labels = 'Gnocchi', 'Tortellini', 'Spaghetti', 'Penne'
sizes = [15, 30, 45, 10]
explode=(0,0,0,0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.axis('equal')
plt.show()
您也可以使用“爆炸”选项来强调最受欢迎的答案:
explode=(0,0,0.1,0)
作为一名数据科学家,数据可视化至关重要,因为您总是需要以直观而强大的方式展示您的结果。此外,甚至在开始构建模型之前,相关的图表通常对识别数据中的模式很有用,因此它们可能会建议您应该运行哪种分析。
sci kit-学习
这可能是机器学习最重要的包,因为它提供了所有的算法,从监督到非监督,从分类到回归。此外,它包括 ROC、MSE R 平方等评估指标,这些指标将在每次算法训练后自动计算。
让我们来看一个非常简单的 ML 任务示例,使用波士顿房价数据集,并尝试仅针对一个变量对价格进行建模,以便我们可以将其可视化。由于这是一项回归任务(目标变量“价格”是连续的),我们将使用简单线性回归:
import pandas as pd
from sklearn.datasets import load_boston
dataset = load_boston()
df = pd.DataFrame(dataset.data, columns=dataset.feature_names)
df['target'] = dataset.target
df.head()
由于我们想要建立一个简单的线性回归(只有一个特征),我们需要将维数从 13 减少到 1,并且在不丢失相关信息的情况下,我们需要运行一个主成分分析:
from sklearn.decomposition import PCA
pca = PCA(1)
projected = pca.fit_transform(dataset.data)
print(dataset.data.shape)
print(projected.shape)
Output:
(506, 13)
(506, 1)
很好,现在让我们导入并训练我们的模型:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(projected, dataset.target, random_state=0)
from sklearn.linear_model import LinearRegression
lm = LinearRegression()
lm.fit(X_train,y_train)
y_pred = lm.predict(X_test)
#let's visualize the results
plt.scatter(X_test, y_test, color='black')
plt.plot(X_test, y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.xlabel('First Principal component')
plt.ylabel('price')
plt.show()
我们还可以要求对我们算法的性能进行“反馈”:
from sklearn.metrics import mean_squared_error, r2_score
print("MSE: {:.2f}".format(mean_squared_error(y_test, y_pred)))
print("R2: {:.2f}".format(r2_score(y_test, y_pred)))
Output:
MSE: 73.04
R2: 0.11
如你所见,用几行代码(不到 2 分钟)我们训练了一个 ML 模型,没有任何手工计算。
海生的
和 matplotlib 一样,seaborn 是一个用于数据可视化的 Python 包。然而,它对于统计表示特别有用,并且它返回关于您的数据的更多相关信息。
特别是,它非常方便地显示数据之间可能的相关性:通过 pairplot() 和 heatmap() 您可以初步了解所有特性(和目标)之间的关系:
import seaborn as sns sns.set(style="ticks")
df = sns.load_dataset("iris")
sns.pairplot(df, hue="species")
sns.heatmap(df.corr(),annot=True)
我们还可以可视化数据的联合分布(比如,sepal_length 和 sepal_width 这两个特征):
sns.jointplot(x='sepal_length',y='sepal_width',data=df,size=5)
最后,让我们看看每个物种的萼片长度值的分布:
ax=sns.boxplot(x='species',y='sepal_length',data=df) ax=sns.stripplot(x='species',y='sepal_length',data=df,jitter=True,edgecolor='gray')
Seaborn 显示相关信息的速度非常快,功能非常强大,如果您正在执行探索性分析,它可能会节省您的大量时间,并为您提供关于最佳算法的线索。
不用说,涵盖这些方案的所有潜力几乎是不可能的。然而,了解哪些是您需要的工具以及如何在您的分析过程中部署它们是很重要的。作为一种良好的实践,请记住,无论您的分析需要何种计算,python 都提供了一种最快、最智能的方法:边做边发现是探索这些工具的一种非常好的策略。
如果您有兴趣了解这些软件包的更多信息,这里有官方文档:
- https://numpy.org/
- 【https://pandas.pydata.org/ 号
- 【https://matplotlib.org/
- https://scikit-learn.org/stable/index.html
- https://seaborn.pydata.org/index.html
原载于 2019 年 9 月 4 日http://datasciencechalktalk.com。
构建再入院模型前要问的 5 个问题
原文:https://towardsdatascience.com/5-questions-to-ask-before-building-a-readmissions-model-de90309cc7f6?source=collection_archive---------29-----------------------
Photo by Kat Stokes on Unsplash
所以,你想建立一个再入院模型?你并不孤单。
根据医疗保健研究和质量机构(AHRQ) 的数据,30 天的再入院每年会产生 413 亿美元的医院费用。因此,许多组织正在研究未来再入院的最佳预测指标,并公布他们的研究结果。这些研究论文是很好的参考和比较工具,但是对于真实世界的应用,在开始复制这些研究项目之前,有几个问题需要考虑。
为什么?
这一切都始于构建一个可以在您的组织中实际使用的模型。数据科学家经常重复发表的论文,却发现这些“理想”的机器学习模型无法部署到生产中。学术论文没有考虑现实世界中存在的数据滞后和/或您特定组织的需求。与其花费时间和资源构建一个贵公司无法使用的模型,不如构建一个从第一天开始就可以部署并产生影响的模型,这不是很好吗?
在闭环,我们开发了一个框架,供数据科学家和临床团队在创建任何新的预测模型时遵循。在建立再入院模型之前,问自己以下 5 个问题:
- 什么干预?
- 你今天做什么?
- 什么结局?
- 什么病人?
- 什么数据?
让我们逐一回答这五个问题。为了帮助说明医疗保健组织将如何处理这些问题,我们成立了一个名为 ABC Health 的小组。虽然该组织是虚构的,但情况非常真实,凸显了现实世界医疗保健预测模型的复杂性。
1.什么干预?
在你跳到具体细节之前,先考虑一下全局。头脑风暴一下你将如何使用这些预测。贵组织是否对被视为“高风险”再次入院的患者采取干预措施?当病人在医院时,会有专门的护士吗?在他们出院前会安排随访吗?远程监控技术是否放置在“高风险”患者家中?
对处于危险中的成员的干预可能今天还没有到位,这很好,但是如果你发现自己正在阅读这篇文章,你很可能对预测有一些预期的用途。想想那些是什么。
我们虚构的组织 ABC Health 使用家访作为对被标记为“高风险”再次入院患者的干预措施。
2.你今天做什么?
您组织中适当的干预自然会为您的新模型提供一个要超越的基线。扪心自问,如今这些项目是如何识别患者的?它是否基于患者需要满足的某些参数?您的组织是否使用 LACE 评分或其他类型的基于规则的评分系统?超越现有基线有助于展示投资回报率和您的再入院模型将产生的影响。
如果缺乏干预表明没有正式的基线,想一想什么样的非正式规则可以用来识别有风险的病人。临床医生是否需要手动浏览图表来寻找“高风险”患者?病人出院的时候会凭直觉吗?
在 ABC Health,如果患者在过去六个月内入院三次或三次以上,则被视为高风险患者。这意味着我们的新模型需要比我们现有的基于规则的方法更好地预测。
3.什么结果?
我知道你在想什么,“这个很简单,跳过”?再想想!
大多数再入院研究论文预测某人在另一次住院 30 天内被接纳的可能性,但是什么被认为是再入院呢?如果住院是有计划的或与最初入院无关,是否属于再次入院?如果再入院是出院 31 天,您的组织要花费多少?您是否要考虑任何不良事件(死亡率、健康获得性感染等)。)在那个时间段?回答这个问题时,想想您的具体组织。很有可能,你特别想预测的会与网上的研究论文不同。
根据合同规定,ABC 必确健康部负责另一名住院患者入院后 45 天内的所有再入院,与怀孕或癌症相关的入院除外。ABC Health 需要预测某人在 45 天内再次住院或死亡的可能性,忽略妊娠和癌症相关住院。
4.什么病人?
每个病人都需要预测再入院吗?那些有急性护理机构或临终关怀的出院倾向的病人呢?要回答这个问题,回想一下你实际上想要预测什么。
ABC Health 仅对在家出院的患者实施上门护士访视干预。也就是说,出院回家的病人是唯一会得到再入院风险评分的人。
5.什么数据?
这个问题其实是两题合一,就当是加分吧。首先,你想在什么时候做预测?大多数论文预测出院时的再入院,但有许多不同的选择。回想一下实际的干预。如果干预是在他们出院时安排随访预约,则在出院时进行预测。如果干预是为了在患者住院期间提供额外的护理,那么预测的时间就在入院时。
ABC 健康护士在患者出院后致电高危患者,约定上门预约。如果护士联系不上病人,两天后再打电话。这意味着我们需要从出院开始每天进行再入院预测,直到首次入院后 45 天。
第二个问题是,在做出预测的具体时间,你手头有哪些数据来源?回答这个问题时要彻底,不要害怕向您的数据或 IT 团队寻求帮助。您的组织有 ADT(入院出院转移)馈送吗?预测时有哪些索赔?这些索赔是及时的,还是延迟了 90 天或更长时间?你对这个病人了解多少?你能访问住院病人的电子病历数据吗?
在做出预测时,在出院时,ABC Health 拥有处方索赔、接近实时的 ADT 馈送和 CMS 蓝按钮病历,但他们无法访问住院期间的 EMR 数据。此外,他们的医疗索赔有 3 个月的延迟,这意味着他们对病人的所有医疗索赔都将来自以前的住院——如果有的话。
通过回答这五个问题,我们能够更详细地定义我们的模型,而不仅仅是预测再入院的。让我们看看我们的模型是如何发展的。
最初:“我想预测 ABC Health 的再入院情况”
回答完 5 个问题后:“我想通过预测谁将在出院回家后 45 天内再次入院或出现死亡等不良反应,但忽略与怀孕或癌症相关的入院,来优化居家护士出诊干预。这些预测将从患者出院开始每天进行,直到首次入院后 45 天。机器学习模型将由处方索赔、ADT 馈送、CMS 蓝按钮数据和 3 个月延迟医疗索赔提供支持。”
这个框架对于创建一个提供真正投资回报的人工智能模型来说是非常有效和有价值的,因为你已经在头脑中定义了特定组织的模型。
试试看,让我知道进展如何!
作者: Megha Jain —产品负责人
Megha 是一位经验丰富的产品经理,拥有超过 11 年将软件解决方案推向市场的经验。除了拥有密歇根大学计算机科学工程硕士学位的深厚技术经验外,她还拥有麻省理工学院斯隆管理学院的 MBA 学位,这为她打下了坚实的商业基础。她喜欢从事以用户为中心的产品,并热衷于使用技术来帮助改善生活。
原载于 2019 年 5 月 31 日https://closed loop . ai。
加快您的 Power BI 仪表板速度的 5 种快速方法
原文:https://towardsdatascience.com/5-quick-ways-to-speed-up-your-power-bi-dashboard-41af7b46ea25?source=collection_archive---------5-----------------------
Power BI 是一个流行的(免费的)工具,可以根据您的数据创建仪表板。拖放界面使得从头开始构建一个简单的仪表板变得快速而简单。然而,一旦事情变得更加复杂,并且您不断添加小部件,您的仪表板的速度可能会降低到爬行的速度。
尽管有很多方法可以提高你的仪表板的速度,我在这篇文章中列出了 5 个快速修复方法,你可以立即应用来快速提高性能,而无需任何剧烈的改变。
1.尽可能使用整数
搜索数字行比搜索字符串要快得多。因此,只要有可能,就使用整数。比如用 0 / 1 值代替“是/否”会更好。或者 1/2/3 而不是“低/中/高”。而且要注意,因为一个数字不一定是整数。您可以将 1/2/3 作为值,但它们仍然可以被视为字符串。因此,请始终在查询编辑器中检查数据格式。
2.移除任何不用的东西
Don’t make your tables look like this, if there is no need to. (image source: http://sqlserverbi.blog)
无论是表格、列还是行,如果您没有使用它,它就不应该出现在您的仪表板中。因此,在数据(预处理)过程中,坚持你的仪表板所需要的,其他一切只会降低性能。
3.坚持使用默认的 Power Bi 小部件
The Power BI market place.
Power BI marketplace 是一个很好的资源,可以找到令人惊叹的小部件来展示您的见解。即使有时候你别无选择,只能使用它们,如果你有选择的话,我还是建议你坚持使用默认的小部件。如果那个花哨的第三方小部件看起来稍微好一点,但是降低了你的仪表板的速度,你应该问自己这样一个问题:是否值得实现它。我并不是说所有的 marketplace 插件都很慢,但是我做的一些最大的速度提升是通过切换回默认的切片器。
4.使用标签
使用选项卡不仅会提高性能,还可能会减少仪表板的拥挤。如果你发现自己被仪表盘上的切片器、图表和卡片弄得不知所措,明智的做法是将它们分成主题/副主题等。并将它们放在不同的选项卡中。通过连接不同选项卡上的过滤器,您可以保留切片器,使选项卡 A 成为过滤器选项卡 B,反之亦然。仪表盘会更快更好看。
5.在表格中使用前 N 行
一张大桌子可以让仪表盘爬得最快。每次使用切片器时,表都必须生成并显示数据集中的所有数据。为此,微软增加了方便的“前 n 行”功能。激活后,该表将自己限制为 N 行,而不是显示整个数据集。同样,一个非常简单的干预将产生巨大的改善。
衡量就是了解
Power BI’s new feature: The performance analyzer.
微软在其最新(2019 年 5 月)的 Power BI 更新中增加了一项新功能:性能分析器。这个新工具可以让您分析仪表板的速度,并指出瓶颈。它的工作原理是记录你使用仪表板时的动作,并为每个小工具的加载时间计时。一旦你停止记录,你会得到一个很好的概览(你可以导出),显示每个小部件的加载持续时间。
同样,除了这 5 种提高速度的快速方法,你还可以在这里找到许多其他的选择。但是在你开始实施更激烈的措施之前,我建议你先试试下面 5 个建议中的一个。
关于作者 :我叫 Bruno,是总部位于荷兰的人工智能技术纵向扩展公司dash mote的数据科学家。我们的目标是借助基于人工智能的解决方案,弥合图像和数据之间的鸿沟。
查看我在 上的其他作品 https://www.zhongtron.me 。
2020 年学习新编程语言的 5 个理由
原文:https://towardsdatascience.com/5-reasons-to-learn-a-new-programming-language-in-2020-bfc9a4b9a763?source=collection_archive---------8-----------------------
学习一门新的编程语言,在新的一年里提升你的职业和技能
Photo by Clément H on Unsplash
李小龙曾有一句名言:“我不怕练过一万次踢腿的人,但我怕练过一万次踢腿的人”。在 2020 年,你是需要学习一门新的编程语言,还是需要像李小龙所说的那样,继续学习你已经掌握的语言?像许多其他问题一样,答案是:看情况。
如果你刚刚开始学习你的第一门编程语言,那么我建议你先正确地学习这门语言。但是如果你已经很好地掌握了一门语言,或者你是一个经验丰富的软件开发人员,已经掌握了不止一门编程语言,那么我建议你明年学习一门新的语言。
学习一门新的编程语言是有代价的。它需要你大量的时间、精力和大脑循环。仍然学习一门新的语言可以直接或间接地给你带来显著的好处。
在这里,我列出了如果你学习一门新的编程语言,你可以拥有的五个主要优势:
更大的画面
Source: The Blind Elephant
在现代,编程语言领域是巨大的、多样的和复杂的。通常,一种编程语言只涵盖编程语言领域的一小部分。有一个著名的故事,盲人只触摸大象的一部分,并以他们的方式解释大象,例如,有人触摸大象的尾巴,并解释大象像一根绳子。编程语言也是如此。
以下是主流编程语言范例:
在一个范例中,还有许多子范例。通常,一种编程语言专注于一种范式(例如, C 是过程式的,Haskell 是函数式的)。也有许多语言触及了多范例,尽管不是 100%(例如 Java 是面向对象的,部分是函数式的)。
学习一门新的编程语言会让你对编程语言有更全面的了解。像任何其他领域一样,有一个更大的画面通常是有帮助的,并给你一个额外的优势。
适合的
Photo by Egor Kamelev from Pexels
在过去快乐的日子里(例如上个世纪),开发人员的生活很简单。在那个年代,你可以学一门主流编程语言,然后工作一辈子。
但是在现代,软件开发人员的生活更加充满活力。随着微服务的兴起,多语言编程是一种常态现在反而是例外。
你可能需要在工作或项目中学习一门新的语言。人脑在迁移学习方面表现出色。如果你已经了解 Haskell/Scala,你可以快速学习其他函数式编程语言。如果你学习了现代语言中的一种,例如 Kotlin,那么你可以快速学习其他类似的现代语言(例如 TypeScript)。
如今,甚至前端 web 框架也使用不同的编程范例。因此,如果你已经了解 Scala/Haskell,那么你可以学习前端框架 React 比其他框架更快,因为 React 大量使用函数式编程的概念。
通常,公司希望用新的软件栈来探索新的软件开发。如果你已经知道编程语言,你可以很容易地抓住机会,加入更新,更酷的项目。
更大的工具箱
Photo by Todd Quackenbush on Unsplash
如果你只知道如何操作一种工具,例如锤子,那么你会在每一种不是合适工具的情况下都尝试使用锤子。软件开发人员也是如此。
作为人类,我们都想呆在自己的舒适区内。因此,我们希望坚持我们已经知道的编程语言,并希望在每个地方使用它们。我见过许多只懂一种编程语言(例如 Java 或 JavaScript)的开发人员,他们试图在所有用例中使用它们。
学习一门新的编程语言将增强你的工具集,让你成为一名更好的开发者。
全栈软件开发之路
Source: dev.to
随着微服务架构的兴起,对全栈开发者的需求只会越来越大。我写过一篇关于微服务架构最佳实践的博文:
[## 有效的微服务:10 个最佳实践
正确实施微服务架构的 10 个技巧
towardsdatascience.com](/effective-microservices-10-best-practices-c6e4ba0c6ee2)
在那篇文章中,我提到过微服务架构需要跨职能团队。如果一个团队有两个只能编写前端代码的开发人员和两个只能编写后端代码的开发人员,那么这个团队就不够灵活。由于前端和后端开发人员并行工作,团队的进展将受到阻碍,例如,当前端或后端开发人员都无法工作时。团队将处于一个更好的位置,因为很少有全栈开发人员可以在栈之间切换。
此外,该公司将愿意支付额外的工资给一个完整的堆栈开发人员。
现在,学习另一种编程语言不会使你成为一个全栈开发人员。但它将对您成为全栈开发人员有很大帮助。
职业发展
Photo by Jamie Saw on Unsplash
如果你想爬上职业阶梯,也就是说,如果你想成为一名软件架构师或解决方案架构师,那么你不仅要有更深的专业知识,还要有更广的专业知识。在软件架构师的角色中,您应该对整个堆栈做出设计决策,而不仅仅是后端或前端。
从前,有一些“象牙塔”架构师,他们可以在不知道动手编码的情况下为一个项目设计软件架构。但是公司越来越多地寻找会编码的软件架构师。
如果你是一个软件架构师,可以用多种编程语言编码,可以和开发者交流,那么开发者会对你更加尊重。
同样,通往软件架构师或解决方案架构师的道路需要许多其他技能。但是如果你想成为一名软件架构师/解决方案架构师,学习新的编程会对你有所帮助。
如果你觉得这很有帮助,请分享到你最喜欢的论坛( Twitter,LinkedIn,脸书)。
如果你对编程语言感兴趣,也可以看看我下面的文章:
[## 2020 年最受欢迎的 10 种编程语言
针对求职者和新开发人员的顶级编程语言的深入分析和排名
towardsdatascience.com](/top-10-in-demand-programming-languages-to-learn-in-2020-4462eb7d8d3e) [## 现在要学习的 7 种现代编程语言
Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能
towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec) [## 回归金属:2019 年开发大数据框架的 3 大编程语言
C++,Rust,用 Java 做数据密集型框架
towardsdatascience.com](/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842)
在你的机器学习项目中使用 YAML 文件的 5 个理由
原文:https://towardsdatascience.com/5-reasons-to-use-yaml-files-in-your-machine-learning-projects-d4c7b9650f27?source=collection_archive---------7-----------------------
即使你的项目很小,YAML 文件也能增加它的灵活性和可重用性。
Photo by Max Nelson on Unsplash
在我攻读数据科学硕士期间,没有人告诉我配置文件的必要性,以及有了它们我的生活会变得多么简单。老实说,没有人告诉我作为一名数据科学家的许多非常重要的方面,我严重缺乏关于最佳实践的知识。然而,我已经在上一篇文章的中解决了大部分问题,我不会再重复了。
[## 我的数据科学学位没有教会我什么—第 1 部分
&在开始我的数据科学职业生涯之前,我想知道些什么。
towardsdatascience.com](/what-my-data-science-degree-did-not-teach-me-part-1-3d7ff23875e5)
简而言之,当我毕业的时候,我的项目有点又快又脏。它们起作用了,有时有很好的结果,但是在我的解决方案的开发过程中,灵活性和可重用性显然不是优先考虑的。项目进行的时间越长,我就越渴望找到一种方法来轻松运行项目的不同部分,重用代码或简单地定制我的环境,而不会因为想到我必须复制或重写的大量代码而感到难过。
什么是 YAML?
缩写 YAML 用来代表另一种标记语言。它现在代表 YAML 标记语言,以便更好地代表 YAML 目前拥有的面向数据的目的。
YAML 是一个人类友好的数据序列化标准,它遵循 Python 缩进,是一个 JSON 超集。YAML 不是唯一可用于配置文件的格式;配置文件可以在中创建。JSON 或 INI 格式的 py 文件。我选择 YAML 是因为它的简单,但我稍后会回到它,因为我在这篇文章中的一个(或两个)原因是基于它的简单(剧透警告!).
如果您不知道什么是配置文件:
配置文件用于存储配置参数,即应用程序的初始参数和设置。这里的“应用”一词有其更广泛的定义。如果您的代码对数据做了一些事情,它符合应用程序定义。如果您想要一种简单的方法来理解配置文件的用途之一,请考虑您可能在项目中硬编码的所有内容,例如(但不仅限于!):
- 输入或输出文件位置
- 机器学习模型的参数输入
- 预处理的参数(例如,大小训练与测试集)
- 日志文件的位置
1.即使在小项目中,潦草地修改代码来改变参数也不是一件有趣的事情。
毫无疑问,我通常可以从项目一开始就使用 YAML 文件,但是我经常跳过这一步。我后来总是意识到,不早点用 config.yaml 开始是一个错误。不幸的是,了解最佳实践并不总是意味着我愿意自动应用它们。
任何可以在我的脚本中硬编码的东西,都可以在配置文件中占据它应有的位置。虽然您可能经常只从一个数据源开始,但大多数项目可能会变得更加复杂,从配置文件开始比以后设置要容易得多。
配置文件不仅有助于避免脚本中的硬编码路径。每当我看到自己一次又一次地修改部分代码以查看对输出的影响,或者注释掉代码以避免每次都运行一个步骤时,我(应该)意识到这部分代码或这个参数代表了在我的配置文件中设置的完美候选。我将在本文后面详述这些功能。
2.写你的第一个 YAML 文件是小菜一碟
YAML 文件最好的部分是简单的语法和创建一个容易。这是我在任何(机器学习与否)项目中选择 YAML 文件而不是任何其他类型的配置文件的主要原因。如果我们想给 config.yaml 文件一个输入和输出位置,那么它应该是这样的:
files:
location: 'C/Users/Yourname/Mydocuments/theinputlocation.txt'
output: 'C/Users/Yourname/Mydocuments/theoutputlocation.txt'
很简单,对吧?但是这里有几个特征可以让它变得更简单!
- 我也可以写一个不带引号的字符串(只要它不包含任何可能被视为 YAML 语法的特殊字符)!如果我真的想或者需要使用引号,单引号和双引号都可以。
files:
location: C/Users/Yourname/Mydocuments/theinputlocation.txt
output: C/Users/Yourname/Mydocuments/theoutputlocation.txt
- YAML 使用注释的方式与 Python 等其他语言一样,使用#注释掉其余的行。
files:
#put the locations of your files here
location: 'C/Users/Yourname/Mydocuments/theinputlocation.txt'
output: 'C/Users/Yourname/Mydocuments/theoutputlocation.ext'
- 不需要特别的陈述,你直接从你的 YAML 文件的内容开始。
在这第二个原因上加了子原因,我有点作弊,但是如果我们可以把列表放在列表里,我肯定可以把原因放在原因里。
3.用 Python 阅读 YAML 文件也非常容易
因此如果编写。yaml 文件这么容易,那么读取 yaml 文件并告诉 Python 如何处理其内容呢?
pip install pyyaml
用 Python 读 YAML 文件只需要一个包。
下面的代码允许您正确、安全地加载。yaml 文件,如果您弄乱了您的配置文件,将返回一个清晰的错误消息。
import yaml
try:
with open (path_to_yaml, 'r') as file:
config = yaml.safe_load(file)
except Exception as e:
print('Error reading the config file')
以我们上面使用的输入位置和输出位置为例,下面是我如何访问我的设置:
location_input = config['files']['location']
location_output = config['files']['output']
- 如果您不想每次都写文件,该怎么办?
你的 YAML 档案里应该有什么:
write_file: True #turn to False to prevent from running
python 代码中应该包含什么(假设您的数据位于 pandas 数据框架中):
if config['write_file']:
mydf.to_csv(location_output)
4.当你与人们分享你的应用程序时,他们(不管是不是开发人员)会喜欢你的
如果您需要共享您的程序,而人们有不同的文件存放位置,会发生什么情况?尽管大多数数据科学家&分析师喜欢通读 Python 代码,但他们会非常感激您没有强迫他们滚动每个脚本来找出在哪里更改输入/输出文件路径。
如果整个数据科学项目需要转移到服务器上,该怎么办?如果您只需要从项目中的一个位置导入一个文件(这种情况很少发生在我身上),这可能不是一个问题。如果您需要从几个位置导入几个文件(并且文件有时可能会更改名称),该怎么办?任何运行代码或从您的 g it 存储库中提取代码的人都必须仔细检查代码,找到每一条路径,并用自己的路径替换它。
此外,让人们运行您的代码来更改参数并不总是一个好主意。限制只能访问 YAML 文件也有助于限制对代码的损害,同时保持项目的灵活性。
5.它可以帮助您专注于您的机器学习代码(或项目的任何其他部分)
我目前参与的项目需要大量的代码、大量的文件加载和大量的处理。对我们来说,在每次运行整个项目来测试代码的时候开发它是不可想象的。使用 YAML 文件(或另一个配置文件)允许我们以模块化的方式建立我们的项目。
当我们回想机器学习时,大多数项目都需要昂贵的数据清理。一旦您的数据被清除,您可能不需要重新运行每个步骤。当然,Jupyter Notebook 也允许你分别运行我的代码的不同部分。但是老实说,我不止一次因为愚蠢的无限循环、沉重的模型或者我永远不会知道的非常模糊的原因而使内核崩溃。每个人都崩溃了一个内核,并对整个体验和重新运行整个代码感到不安。
例如,您可以在预处理步骤结束时将清理后的数据帧保存在一个. csv 文件中,这样您就可以仅在必要时运行这些步骤。
steps:
preprocessing: False
machinelearningstep: Truetemp_location: mytempfile.csv
以及它在 Python 中的样子:
if config['preprocessing']:
#do extensive cleaning on my dataframe
else:
#load the temp file that is being saved each time I run
#the preprocessing step in the location indicated in the config
#file
YAML 文件有优点也有局限性,就像任何语言或格式的配置文件一样。我意识到我给出的许多理由也适用于另一种类型的配置文件(我第二喜欢的是. py 文件)。无论我的同事或我选择 YAML 档案或。py 文件并不重要,但是从长远来看,以一种简单、易读、友好的方式构建项目对于团队的生产力和快乐非常重要。如果从长远来看,我们可以避免挫折,为什么不呢?
[## 程序员的正念
编程时 3 个简单的练习
towardsdatascience.com](/mindfulness-for-programmers-da6f92147b8f) [## 向你的祖母解释数据科学
或者如何向你的家人或任何与技术世界脱节的人解释数据科学。
towardsdatascience.com](/explaining-data-science-to-your-grandma-f8345621483d)
开始学习数据科学
原文:https://towardsdatascience.com/5-reasons-why-everybody-can-and-should-learn-data-science-c22e3bc96299?source=collection_archive---------34-----------------------
为什么每个人都可以并且应该学习数据科学的 5 个理由。
数据科学家正式成为 21 世纪最性感的工作。数据科学家收入丰厚,工作生活平衡良好,他们解决的问题足够有趣,足以让任何人坚持下去。如果这还不足以让人们对这个领域感兴趣,那么还有更进一步的原因。
- 数据科学将帮助你完成当前工作中的日常任务。
即使你不是正式的数据科学家,但拥有一些数据科学技能,你在办公室的生活也会变得容易得多。当你的老板给你带来一份去年的销售清单,而不是逐行滚动时,你写几行代码,带来一份 2018 年发生的 100,00 0,00 0 笔销售的摘要。更好的是,在快速午餐和分析你告诉老板的数据后,你实际上可以预测下一年最大的销售额将在什么时候发生。此外,凭借您新获得的数据科学技能,您可以自动化您在办公室中做的大多数日常工作。这样,你将有更多的时间学习最新的机器学习算法及其应用,而不是做无聊的重复工作。
2。数据科学是多学科的,无处不在。
不管你现在在做什么,我可以向你保证,你可以将数据科学应用于其中。目前,人工智能被用于预测股票价格,发现罕见疾病,分析图像,预测评论的情绪或总结在线评论。我们创造自动语音识别系统、自动驾驶汽车和对话代理。当谈到数据科学时,天空是无限的,它可以应用于工作或生活的任何领域。
3。数据科学可能很艰难,但却很有价值。
天空是无限的,但旅程的起点是学习基础数据科学,它没有你想象的那么难。大多数人没有开始这个旅程,因为他们认为他们没有足够的数学背景,他们没有做过统计,或者他们不会写一行代码。尽管这是数据科学家的基本技能,但这些都是可以学习的,基本上不需要任何先验知识。你需要的是学习的意愿和决心。好消息是,一旦你开始了你的旅程,你会马上运用你的技能。只需几行代码,你就能分析数据集,做出令人印象深刻的图表和可视化。一旦你发现你可以用这么少的努力做什么,你就会有动力去学习更复杂的算法,这将帮助你解决更复杂的问题。这会让你保持动力,一旦你开始这个旅程就很难停止。数据科学会让人上瘾,学习永远不会停止。
4。如今的数据科学很容易学习。
此外,如果你看看关于该主题的在线课程、教程和视频的数量,就没有理由不学习数据科学。有了这些信息,你甚至不需要传统的书籍和正规的教育。还有一些训练营可以帮助你在短时间内成为一名数据科学家。他们选择所有材料,并设计您作为初学数据科学家将采取的学习路径。如果你选择其中一个或者以自学的方式进行,你就不会抱怨缺乏资源或帮助。
5。数据科学会让你成为一个更好的全面发展的人。
如果你正在考虑过渡到数据科学,你会注意到,利用你学到的技能,你将从不同的角度看待同样的问题。运用数学、统计和算法的观点将帮助你看到问题的另一面,提出解决方案并测试它。数据科学家解决的问题的复杂性不仅会在专业层面上锻炼你的大脑,改变你的思维,还会让你成为一个更全面的人。
PS:你正在阅读这篇文章,所以你的数据科学之旅已经开始或即将开始。我祝你一切顺利,如果你喜欢这篇文章,不要不好意思留下评论。我的数据科学博客之旅现在就要开始了,我希望我们能一起走这条路……
原载于 aboutdatablog.com: 每个人都可以而且应该学习数据科学的 5 个理由,2019 年 10 月 10 日。
PS:我正在 Medium 和aboutdatablog.com上撰写深入浅出地解释基本数据科学概念的文章。你可以订阅我的 邮件列表 以便在我每次写新文章时得到通知。如果你还不是中等会员,你可以在这里加入。
下面还有一些你可能喜欢的帖子
* [## python 中的 lambda 函数是什么,为什么你现在就应该开始使用它们
初学者在 python 和 pandas 中开始使用 lambda 函数的快速指南。
towardsdatascience.com](/what-are-lambda-functions-in-python-and-why-you-should-start-using-them-right-now-75ab85655dc6) [## Jupyter 笔记本自动完成
数据科学家的最佳生产力工具,如果您还没有使用它,您应该使用它…
towardsdatascience.com](/jupyter-notebook-autocompletion-f291008c66c) [## 当你开始与图书馆合作时,7 个实用的熊猫提示
解释一些乍一看不那么明显的东西…
towardsdatascience.com](/7-practical-pandas-tips-when-you-start-working-with-the-library-e4a9205eb443)*
我如此热爱谷歌联合实验室的 5 个原因
原文:https://towardsdatascience.com/5-reasons-why-i-love-google-colaboratory-so-much-1979974cae98?source=collection_archive---------27-----------------------
Photo by Mitchell Luo on Unsplash
Google Colaboratory 是机器学习教育和研究的研究工具。这是一个 Jupyter 笔记本电脑环境,无需设置即可使用。
以上是用它的创造者的话来说,对 Colab 的定义。相信我,它不仅如此,因为它允许任何人在浏览器中实验人工智能和机器学习超级容易和免费。
你可以在下面找到我的“为什么我喜欢它”列表。
Photo by Elaine Casap on Unsplash
1 —它提供免费的计算能力
是的,合作实验室提供免费计算能力。您的代码在专用于您的帐户的虚拟机中执行。更好的是,只需点击一下鼠标,你就可以在你的项目中使用一个 GPU 加速器。采用特斯拉 K80 GPU,它给你提供了总共 12 GB 的内存,你可以连续使用它长达 12 个小时。
虽然它可以免费使用,但也有一定的限制。协作室用于交互式使用。不支持加密货币挖掘。长时间运行的后台计算也不受欢迎。对于这种情况,建议使用本地运行时选项。
2 —不需要设置
协同实验室带有预加载的库。这意味着您可以立即开始将库导入笔记本。
可用的预安装软件包有:
数据处理包: Pandas、Numpy、Scipy、Statsmodels
机器学习包: TensorFlow、Sklearn
可视化包: matplotlib、plotly、seaborn
虽然它为您涵盖了大多数常用的机器学习库,但是您可以安装任何不在合作实验室 中的库。
3 —轻松共享和协作
如果你需要团队合作来开发你的人工智能项目,这又是一个超级简单的 Colab,因为 Colab 笔记本就像谷歌文档和工作表一样。它们存储在 Google Drive 中,可以共享、编辑和协同评论。
4-它支持 Python 2.7 和 Python 3.6
毫无疑问,Python 被认为是所有人工智能开发平台中的第一名,因为它的简单性和丰富的库使工作变得容易得多。
5 —与 GitHub 集成
谷歌联合实验室与 GitHub 整合。在 Colab 环境中,很容易从 GitHub 保存和加载笔记本。公共 GitHub 笔记本可以直接加载,不需要额外的授权步骤。访问私人 GitHub 笔记本需要一个额外的步骤,以允许 Colab 访问您的文件。
感谢阅读。
学生应该加入黑客马拉松的 5 个理由
原文:https://towardsdatascience.com/5-reasons-why-students-should-join-hackathon-5c24254bc19b?source=collection_archive---------26-----------------------
我在倒数第二年的时候开始加入黑客马拉松。一开始,我不知道什么是黑客马拉松,我就像一张白纸。在参加了大约 20 次黑客马拉松后,我发现自己在各个方面都有了很大的提高,我想利用这篇文章来鼓励更多的学生加入黑客马拉松。
Photo by NESA by Makers on Unsplash
首先,你需要对黑客马拉松的意义有一个简单的了解。黑客马拉松是“黑客”和“马拉松”两个词的混合。结合这两个词的上下文,你可能会有一个粗略的感觉,黑客马拉松是一个密集的编码比赛。这可能是过去一些黑客马拉松(黑客马拉松的类型将在另一篇文章中解释)或黑客马拉松的情况。如今,大多数黑客马拉松(至少在香港)对编码部分的权重较低,但对业务部分的关注度较高。因此,根据我的观察,近年来的黑客马拉松更像是将数据科学家、设计师、商人和工程师等不同领域的人才聚集在一起,在一到三天内完成一个项目。
Photo by cyda
回到这篇文章的主题,为什么学生应该加入黑客马拉松?
1。用现实生活中的问题练习你的技能
在学校,你学到了很多理论和知识,但你没有很多机会来测试你的能力。大多数时候,学校只会给你布置作业和考试来给你的技能打分,评估中使用的材料都是以易于使用的方式准备的。例如,我的专业是统计学,我通常需要在我的作业中处理数据,一般来说,提供的数据集都是以表格形式构造的,数据量非常有限。然而,在黑客马拉松中,你将获得(或者你需要搜集)真实的数据。因此,你可以知道在公司工作时的困难,如如何清洗数据,将非结构化数据转换为结构化格式,以及如何使用云计算来处理大数据。
Photo by Tim Gouw on Unsplash
2。同行之间建立网络并进行知识交流
在不同的学校就读,同一专业的范围因学校或讲师而异。黑客马拉松为参与者提供了一个与不同背景的人交流的好机会。有时,你可能会遇到来自海外学校的学生。通过网络或他们的介绍,你可以知道他们使用了什么技术或软件,这样你就可以了解你在知识和技能方面缺乏什么,换句话说,你可以估计你在就业市场上的竞争力。
Photo by Brooke Cagle on Unsplash
3。会见有经验的导师,获取行业知识
为了帮助参与者改进他们的想法,通常在黑客马拉松中会有导师会议。组织者将邀请他们的高级员工作为导师,他们将在最终演示之前与参与者交谈并评论他们的想法。在会场中安排导师的主要原因是让该行业的新成员能够了解业务关注点,并专注于组织者提供的问题陈述。作为一名学生,你可能对不同的行业没有任何想法,但你可以充分利用导师会议来更好地了解行业的性质和不同公司的文化。
Photo by Kaleidico on Unsplash
4。了解更多新技术
组织者可能会与 AWS、谷歌和微软等不同的科技公司合作,提供如何使用云服务的黑客马拉松前研讨会。对于非技术人员,你可以知道如何使用一些方便的工具来做编程,对于技术人员,你可以知道完成任务的替代方案。
对于主题为非常新的或不常见的技术,如区块链或无人机的黑客马拉松。还可能有由领域专家提供的简报会议,这样参与者可以对主题有一个公平的理解。
Photo by André François McKenzie on Unsplash
5。奖项
黑客马拉松通常有三种主要类型的奖励,即现金奖励、奖品和奖杯以及工作机会。特别是针对学生的黑客马拉松,他们会为选定的参与者提供实习机会(即使他们不是获胜者)。一些公司组织黑客马拉松作为候选人选择过程,通过导师会议,不同的管理团队负责人可以直接与参与者交谈,他们可能知道参与者的优势或劣势,因此他们可以判断参与者是否适合他们的团队。
如果你发现你梦想的公司将举办黑客马拉松,你应该申请参加比赛。这可能是你进入那家公司的捷径,或者至少你有机会直接与经理交谈,看看你是否适合该公司的文化。
奖项也可以是无形的东西,比如你在黑客马拉松中建立的友谊,一些人找到志同道合的人并创办了一家创业公司。
Photo by Marten Bjork on Unsplash
列出的五个原因只是我发现可以适用于大多数人的一些常见的好处。有更多的商品加入黑客马拉松,但你只有在参与其中后才能发现。
希望这篇文章对你有用,如果你想了解更多关于黑客马拉松的信息,请继续关注我的黑客马拉松系列
如果你觉得我的文章有用,请在我的 linkedIn 页面上为我的技能背书,鼓励我写更多的文章。
最初发表于cydalytics.blogspot.com
[## 欢迎来到黑客马拉松的世界
学生应该加入黑客马拉松的 5 个理由
medium.com](https://medium.com/series/welcome-to-the-world-of-hackathon-81d194abbec4)
为什么网络抓取会让你的生意受益的 5 个理由。
原文:https://towardsdatascience.com/5-reasons-why-web-scraping-may-benefit-your-business-5c821c89118a?source=collection_archive---------43-----------------------
你可能已经涉足电子商务,或者你准备卷起袖子为一家有创意的初创公司工作。扩大业务规模的需求岌岌可危。那么,你如何利用网络抓取来发展你的业务呢?在这篇文章中,我将通过真实的例子向您介绍网络抓取(网络抓取、数据提取、屏幕抓取)如何让您的业务受益并提高您的利润。
1。竞争对手监控:
by Wu Yi from Unsplash
在过去的十年里,电子商务市场取得了巨大的飞跃。然而,随着数字设备融入我们的生活并改变购买行为,这种数字零售格局将继续增长。
繁荣的市场很容易进入,但零售商之间的竞争只会变得更加激烈,给新来者留下很小的发展空间。你的零售业务如何生存?你需要研究你的竞争对手。中国古代将军孙子曾经说过“知己知彼,百战不殆。”这也适用于商业。
您可以通过网络搜集获得竞争对手的最新变化:
a. 从竞争对手的网站上搜集产品信息,对新产品发布做出及时反应,发现新的市场策略。
b. 刮产品/服务广告。洞察他们的预算。
d. 预测流行趋势,保持竞争力。
2。定价优化:
Henry & Co.
如果你很难设定一个价格,你会发现网络搜集对这个目的非常有帮助。优化的问题在于,我们无法在增加利润的同时不失去客户。
请记住,客户愿意为更有价值的产品支付更多的钱。至于零售业务,重要的是在你的竞争对手缺少的地方提高你的服务。以下是网络抓取发挥作用的方式:
a. 搜集客户信息,找出如何通过微调你的市场策略来提高他们的满意度。
b. 接下来,制定一个 动态定价策略 。市场不是一成不变的,你的定价要跟上变化,才能实现利润最大化。网络抓取使您能够及时了解市场价格和促销活动的变化。
3。销售线索生成:
Hunters Race
我敢打赌,当你被要求得到更多的线索时,你会感到厌倦。当然,你可以购买尽可能多的名单。警告!他们不是优质销售线索。你可能会选择能够让你搜索公司和电子邮件的潜在客户生成工具。尽管存在准确性问题,但由于报价有限,它们相当昂贵。毕竟,从长远来看,这不是一个可持续的解决方案。诀窍就在这里!您可以在短时间内免费从数百万个网站中在线提取销售线索的联系信息!
a. 设定你的目标人物 :学历、公司、职称等。
b. 在你的小生上找到相关网站 :医疗保健提供者上的医师;来自 Yellowbook.com 的餐馆;来自知名开源医疗网站的关键意见领袖。
查看这篇文章。学习 如何一步步在 15 分钟内获得数千条线索
联系人列表是一些有价值的资产。有了这些名字,你就可以通过批量发送活动和时事通讯来赢得客户。但是,请确保发送相关信息,不要滥发。
4。投资决策:
Markus Spiske
网络抓取对投资界来说并不陌生。事实上,对冲基金不时利用网络搜集技术提取替代数据以避免失败的风险。它有助于发现不可预见的风险和潜在的投资机会。
投资决策是复杂的,因为它通常涉及一系列的过程,然后才能做出一个合理的决策,从建立一个假设的论点,实验,到研究。测试投资论点最有效的方法是通过历史数据分析。它让你能够洞察过去失败或成功的根本原因,你应该避免的陷阱,以及你未来可能获得的投资回报。
作为一种手段,web scraping 更有效地提取历史数据,其中您可以将这些数据输入到一些机器学习数据库中进行模型训练。因此,投资公司利用大数据提高了分析结果的准确性,从而做出更好的决策。
查看此文关于 股市分析使用网刮
5。产品优化:
Photo by Malte Wingen on Unsplash
对我们来说,在购买之前搜索在线评论是一个常识。评论会决定性地影响顾客的购买决定。因此,我们可以分析他们对我们的看法,以便跟上他们的期望。
假设你的产品团队即将推出一款新产品。你这么着急,想知道它能不能有所突破。重要的是收集客户的反馈,以便与您的产品进行交叉检验并做出改进。情感分析技术被广泛用于分析顾客的态度,无论是积极的、中立的还是消极的。然而,这种分析需要来自许多网站的大量文本数据才能发挥作用。网络抓取可以更快地自动化提取过程,为这种平凡的工作节省大量的时间和精力。
以上只是网络抓取所能达到的一小部分。您可以构建一个网络爬虫来提取我们上面描述的数据。或者关于它的应用,你可能比我有更多创新的想法。不要低估网络抓取的力量。对于企业来说,以常规方式获取大量必要信息是最佳解决方案。你应该把所有的精力集中在重要的商业运作上。
原载于 2019 年 12 月 17 日https://www.octoparse.com。
你应该在 2020 年开始数据科学之旅的 5 个理由
原文:https://towardsdatascience.com/5-reasons-why-you-should-begin-your-data-science-journey-in-2020-2b4a0a5e4239?source=collection_archive---------5-----------------------
学习数据科学不应该总是为了成为一名数据科学家
Photo by Ruthson Zimmerman on Unsplash
L 学习数据科学不应该总是为了成为一名数据科学家。任何热衷于处理数据的人都可以把它作为学习数据科学基础的目标。
您有兴趣了解数据的力量吗?
你有兴趣学习如何探索数据,分析数据,并从数据中得出有意义和有见地的发现吗?
您是否有兴趣将数据科学技能添加到您的技能集工具箱中?
你有兴趣了解当今最热门的职业领域之一吗?
如果您对上述大多数问题的回答是肯定的,那么您必须下定决心,尽快开始您的数据科学之旅。没有理由拖延。挑战自我,在 2020 年开始你的旅程。掌握数据科学的基础知识需要时间、精力和努力,但请记住,千里之行始于足下。缓慢但肯定的是,随着您自学数据知识并寻找机会与其他数据科学爱好者或专业人士分享您新获得的知识,您的知识和专业技能将随着时间的推移不断增长。
我们生活在人类历史上最有趣的时代。数字时代迎来了“数据时代”,一个数据成为比石油和黄金更有价值的商品的时代。全球每天产生的数据量是前所未有的,随着世界上越来越多的人接入互联网,预计这一数据量还会继续增加。想想储存在谷歌(你的谷歌搜索)、脸书、推特、YouTube、Instagram、LinkedIn、亚马逊、网飞等平台上的数据量。政府数据、医疗保健数据、客户数据以及保存在全球数千所大学数据库中的学术记录又如何呢?电信数据,例如文本消息、语音呼叫等。这是学习数据科学最激动人心的时刻。
现在有很多免费的资源可以用来学习数据科学。资源可以在 edX、Coursera、Udemy、DataCamp、YouTube 等平台上找到。唯一的因素就是你。球在你的球场上。你愿意奉献你的时间和精力去学习数据吗?学习数据科学的基础知识是一项绝不会让你后悔的伟大投资。现在是采取行动的时候了,而且要迅速行动。让 2020 年成为你最终踏上数据科学之旅的一年。
学习数据科学的 5 个理由
1。学习数据科学为你提供了一个重塑自我的机会。
当我大约两年前开始我的数据科学之旅时,我已经是大学的一名物理学教授了。但和往常一样,我总是想学习一些新的东西,一些可以让我在学术上不断挑战的东西,一些非常令人兴奋的东西。在做了一些研究并与我的一个也在研究数据科学的朋友交谈后,他鼓励我从事数据科学。大约两年前,我开始了我的数据科学之旅。在这段时间里,我在 DataCamp 、 edX 、 Coursera 和 YouTube 等平台上完成了无数的数据科学和机器学习课程。挑战自己,在 2020 年了解数据。如果你有一些数学和基础编程的背景,可以通过自学自学数据科学。
2。我们生活在一个数字世界,一切都是数据驱动的。
商业,会计,教育,科学,工程,医疗,科技,能源部门,政府等等。因此,拥有处理数据的能力是一项基本技能。将您的数据科学知识与您已经拥有的任何技能相结合,将为您的简历和履历增加更多价值。
3。数据科学也是一个非常有前途的领域,有很多高薪的工作机会。
数据科学、机器学习和分析被认为是最热门的职业道路。行业、学术界和政府对熟练数据科学从业者的需求正在快速增长。因此,持续的“数据热潮”吸引了如此多具有不同背景的专业人士,如物理、数学、统计、经济和工程。数据科学家的就业前景非常乐观。IBM 预测到 2020 年对数据科学家的需求将飙升 28%:https://www . Forbes . com/sites/louiscolombus/2017/05/13/IBM-predicts-demand-for-data-scientists-will-soar-28-by-2020/# 7916 f 3057 e3b。
通过学习数据科学的基础,你可以增加在数据科学领域找到工作的几率。你要问自己的问题是:当数据科学领域的机会来敲门时,你准备好了吗?如果你一直在拖延数据科学,现在是时候开始你的旅程了,不要拖延。
4。基本的数据科学技能对于个人使用非常重要。
我发现数据科学在我的学术生活中对分析研究数据非常有帮助。作为一名计算材料科学家,我的研究涉及分析计算建模软件产生的大量数据。分析这些数据有助于我得出有意义的见解,如奇异的材料属性,使材料适合各种应用,如药物设计和输送、太阳能采集、高速电子设备和生物传感应用。我还使用机器学习工具来分析材料属性的大型数据集,以建立某些属性之间的相关性,并进行异常值检测。使用数据可视化技术也帮助我产生了高质量的可视化研究数据。
数据科学方面的知识也帮助我更好地分析学生的考试成绩。我使用我的数据科学知识来构建供个人使用的模型,如购房推荐系统(根据房间数量、面积、房龄、邮政编码等预测因素来预测房价)、抵押贷款计算器等。
5。你可以利用你在数据科学方面的知识来获得额外收入。
对于有数据科学背景的人来说,有很多额外的收入机会,例如自由职业、家教、教学、博客。当我开始写博客时,我在 medium 上发表的数据科学文章每月收入不到 2 美元。今天,我每个月挣 600 多美元,当然还不包括房租,但这是一笔不错的额外收入,尤其是因为它来自我喜欢做的事情。如果您已经掌握了一些基本的数据科学知识,并且对在 medium 上撰写数据科学博客感兴趣,这里有一些资源:
在媒体上写数据科学博客的初学者指南
为您的数据科学文章选择合适的特色图片
可以帮助您开始数据科学之旅的资源
如果你有分析学科的背景,并且正在考虑数据科学,这里有一些你可以用来自学的资源:
(一) 数据科学专业证书 (HarvardX,through edX)
(二) 分析:必备工具和方法 (佐治亚 TechX,through edX)
(三) 应用数据科学与 Python 专业化 (密歇根大学,通过 Coursera)
(四)“Python 机器学习”,塞巴斯蒂安·拉什卡著。这本书提供了关于数据科学和机器学习的很棒的介绍,包括代码:“Python 机器学习”,作者 Sebastian Raschka 。作者以一种非常容易理解的方式解释了机器学习的基本概念。此外,代码也包括在内,因此您实际上可以使用提供的代码来练习和构建您自己的模型。我个人认为这本书在我作为数据科学家的旅程中非常有用。我会向任何数据科学爱好者推荐这本书。你所需要的是基本的线性代数和编程技能,以便能够理解这本书。
(五) 走向媒介上的数据科学出版 。该网站上有大量资源,涵盖了从基础到高级概念的大量数据科学信息。
学习数据科学的最佳方法是什么?
秘诀是从构建数据科学的基础知识开始。有了基础数学( 机器学习必备数学技能 )和编程技能,你就可以开始上一些在线课程,比如上面列出的那些。然后,在建立了足够的基础知识之后,您可以开始阅读一些书籍,以获得更精细和更高级的数据科学概念。
学习和掌握数据科学的基础知识需要时间、精力、耐心和努力。这是开始的正确时间。坚持每天花一个小时学习和实践数据科学。如果你坚持不懈,你会惊讶于一两年内你能获得多少知识和技能。
你的聊天机器人需要自然语言处理的 5 个原因
原文:https://towardsdatascience.com/5-reasons-why-your-chatbot-needs-natural-language-processing-ed20fb0a3655?source=collection_archive---------6-----------------------
随着聊天机器人的出现和崛起,我们开始看到它们利用人工智能——特别是机器学习——来大规模完成实习生或退伍军人团队无法完成的任务。更好的是,企业现在能够通过用冷数学分析对话来获得洞察力。
然而,仍然有相当多的人每次与机器人交谈时都会有一种共同的情绪— “它不明白我在说什么。”
这就是自然语言处理发挥作用的地方。在合适的应用环境中,NLP 可以为更易于使用的功能和服务界面铺平道路。但更重要的是,基于 NLP 的聊天机器人可以让屏幕另一边的终端用户知道他们正在进行对话,而不是通过有限的选项和菜单来达到他们的最终目标。
什么是自然语言处理(NLP)?
自然语言处理基于深度学习,使计算机能够从用户的输入中获取意义。在机器人的情况下,它评估用户输入的意图,然后根据类似于人类的上下文分析做出响应。
假设你有一个聊天机器人用于客户支持,很有可能用户会试图问一些超出机器人范围的问题,然后扔掉它。这可以通过设置默认响应来解决,但是,要预测用户可能会问什么样的问题或者会以什么样的方式提问是不可能的。
当谈到自然语言处理时,开发人员可以训练机器人进行多种交互和对话,并提供它将接触到的内容的多个示例,因为这往往会给它提供一个更广泛的基础,使它可以更有效地进一步评估和解释查询。
因此,虽然训练机器人听起来是一个非常乏味的过程,但结果是非常值得的。苏格兰皇家银行在其聊天机器人中使用 NLP通过文本分析来增强客户体验,以多种形式解读客户反馈的趋势,如调查、呼叫中心讨论、投诉或电子邮件。这有助于他们确定客户不满意的根本原因,并据此帮助他们改进服务。
实现 NLP 的最佳方法是什么?
实现 NLP 的最佳方法是混合机器学习和最大化结果的基本含义。机器学习只是许多 NLP 平台的核心,然而,基本含义和机器学习的融合有助于制造高效的基于 NLP 的聊天机器人。
机器语言用于训练机器人,这导致它不断学习自然语言处理(NLP)和自然语言生成(NLG)。ML 和 FM 都有自己的优点和缺点。这两种方法的最佳特性对于解决现实世界的业务问题都是理想的。
基于自然语言处理的机器人需要做的是:
1。通过准确的解释减少假阳性结果。
2。使用统计建模识别用户输入失败并解决冲突。
3。使用全面的沟通来获得用户响应。
4。更快地学习以解决发展差距。
5。通过较少的训练数据输入实现自然语言能力。
6。能够将输入的培训数据重新用于未来的学习。
7。为误报提供简单的纠正措施。
NLP 引擎能做什么?
NLP 引擎广泛使用机器学习来解析用户输入,以便提取必要的实体并理解用户意图。具有自然语言处理功能的聊天机器人可以分析多种用户意图,从而最大限度地减少失败。
一、意图识别
通过聊天机器人的用户输入被分解,并通过几个词编译成用户意图。例如,“搜索西雅图提供深盘玛格丽塔的比萨饼角落”。
NLP 通过理解单词的含义、位置、变化、复数以及人类语音可能具有的许多其他因素来分析完整的句子。因此,它将完整的句子或段落分解为更简单的句子,如搜索 pizza,然后是语音中的其他搜索因素,以更好地理解用户的意图。
二。处理实体
实体可以是与日期、时间、地点、位置、描述、单词的同义词、人、项目、数字或指定对象的任何东西相关的字段、数据或单词。聊天机器人能够识别用户的单词,匹配可用的实体或收集完成任务所需的额外实体。
三世。名词的大写
NLP 使聊天机器人能够从普通名词中删除大写,并从语音/用户输入中识别专有名词。
四世。扩展&词汇的迁移
NLP 使机器人能够不断添加新的同义词,并使用机器学习来扩展聊天机器人的词汇,同时还可以将词汇从一个机器人转移到下一个机器人。
动词的时态
人工智能聊天机器人通过时态来理解动词的不同时态和变化。
六。收缩
具有 NLP 的机器人可以扩展缩写,并简化删除单词间撇号的任务。
除此之外,支持 NLP 的机器人还拥有许多功能,如文档分析、机器翻译、区分内容等等。
NLP 引擎依赖以下元素来处理查询—
意图 —构建对话式用户界面的核心概念,它被确定为用户想要实现的任务或用户希望解决的问题陈述。
话语 —用户可以作为聊天机器人的输入给出的各种不同的句子实例,就像他们提到一个意图一样。
实体 —它们包括与用户意图相关的所有特征和细节。这可以包括位置、日期、时间等。
上下文 —这有助于在整个用户会话中保存和共享不同的参数。
会话 —这基本上涵盖了用户对话的起点和终点。
市场上有许多 NLP 引擎,从谷歌的对话流(以前称为 API . ai)wit . ai、沃森对话服务、 Lex 等等。有些服务提供一体化解决方案,而有些则专注于解决单一问题。
其核心,自然语言处理的关键在于理解输入,并将其翻译成计算机之间可以理解的语言。从话语中提取意图、参数和主要上下文,并将其转换为结构化数据,同时调用 API 是 NLP 引擎的工作。
为什么你的聊天机器人需要自然语言处理?
有许多不同类型的聊天机器人,用于各种目的,如常见问题解答、客户服务、虚拟帮助等等。没有 NLP 的聊天机器人主要依赖于预先输入的静态信息&自然不太能处理人类语言,这些语言在表达每个特定查询时会有情感、意图和情绪的变化。
让我们来看看你的聊天机器人应该有 NLP 的 5 个理由:
1。跨语言的自然对话
预输入静态内容方法的问题是,语言在表达特定语句时有无限多的变化。用户可以用无数种方式来表达一种情绪。研究人员花了很长时间努力让系统解释人类的语言。
通过 NLP,可以在人类输入的文本和系统生成的响应之间建立联系。这种响应可以是任何事情,从对查询的简单回答、基于客户请求的动作或者将来自客户的任何信息存储到系统数据库。
NLP 可以区分人类生成的不同类型的请求,从而大大增强客户体验。
(a) 基于自然语言处理的聊天机器人能够智能地理解语言语义、文本结构和语音短语。因此,它使您能够分析大量的非结构化数据,并使之有意义。
(b) NLP 能够理解跨语言的语素,这使得机器人更有能力理解不同的细微差别。
NLP 赋予聊天机器人理解和解释俚语的能力,并像人类一样不断学习缩写,同时通过情感分析理解各种情绪。
2。关注关键任务
通常,为了使一个组织发挥作用,需要部署许多不同的角色和资源,但是,这需要在不同的垂直领域重复手动任务,如客户服务、人力资源、目录管理或发票处理。基于 NLP 的聊天机器人大大减少了客户服务或发票处理等操作中的人力,因此这些操作需要的资源更少,员工效率更高。
现在,员工可以以更具创造性的方式专注于任务关键型任务和对业务产生积极影响的任务,而不是每天在单调重复的任务上浪费时间。您可以使用基于 NLP 的聊天机器人进行内部使用,尤其是人力资源和 IT 服务台。
3。降低成本
成本核算是任何企业发展和提高盈利能力的一个重要方面。基于 NLP 的聊天机器人可以极大地帮助降低与重复性任务中的人力和其他资源相关的成本以及客户保留成本,同时提高效率和简化工作流程。
4。更高的客户满意度
今天的千禧一代希望他们的问题能够得到即时响应和即时解决方案。NLP 帮助聊天机器人理解、分析问题,并根据问题的复杂性对其进行优先排序&这使得机器人能够比人类更快地响应客户的查询。更快的响应有助于建立客户信任,进而带来更多业务。
使用聊天机器人后,您将体验到客户保持率的提高。它通过增加现有客户的忠诚度来减少每次获得新客户的努力和成本。聊天机器人给予顾客他们想要的时间和注意力,让他们感到重要和快乐。
5。市场调查与分析
仅仅从社交媒体上,你就可以获得或生成大量多样的、非结构化的内容。NLP 有助于结构化非结构化内容并从中提取意义。您可以轻松理解客户评论、意见、评论或疑问背后的含义或想法。你可以一瞥用户对你的服务或品牌的感受。
结论
基于 NLP 的聊天机器人可以帮助增强您的业务流程,将客户体验提升到新的水平,同时还可以提高整体增长和盈利能力。它提供了保持市场竞争力的技术优势——节省时间、精力和成本,从而进一步提高客户满意度和业务参与度。
尽管自然语言处理,NLU 和 NLG 并不完全等同于人类的语言理解,考虑到它的微妙之处和对上下文的依赖;一个智能聊天机器人可以很好地模仿这种理解和分析水平。在半受限的环境中,当评估用户的目标&时,机器人可以很好地执行,以自助交互的形式完成所需的任务。
虽然 NLP 本身是关键,不能创造奇迹或确保聊天机器人有效地响应每一条消息,但它对聊天机器人的成功用户体验至关重要。
当在人工智能和基于规则的机器人之间做出决定时,有许多因素需要考虑。在马鲁蒂科技实验室,我们为不同行业的不同用例,大规模地开发了这两种聊天机器人。如果你想了解更多或有任何问题,请在 hello@marutitech.com给我们留言——我们很乐意聊天。
您需要更好的数据管理解决方案的 5 个理由
原文:https://towardsdatascience.com/5-reasons-you-need-a-better-data-management-solution-df3ad74a1a2b?source=collection_archive---------22-----------------------
祝贺你。这需要时间,但你是数据驱动型的。你有数据科学家来处理数据,有一个储存充足的数据湖,还有分析师来澄清这一切。但是,即使基础设施到位,从数据中获益也不像按动开关那么容易。如今,企业还没有正确管理他们的数据。
因此,他们问自己一个新问题:
如何将海量数据转化为真知灼见?
成为“数据第一”的公司
2018 年 8 月 29 日,ThinkData WorksCEOBryan Smith在滑铁卢Communitech 做了一场关于“数据优先”公司的演讲。首先投资于数据并正在改变业务格局的组织。众所周知,苹果在 2018 年 8 月 2 日达到了万亿美元的估值,史密斯预测亚马逊也不远了。一万亿英里的竞赛类似于 4 分钟一英里:一旦一个人打破了它,我们将看到许多其他公司开始打破它。
六天后,亚马逊 击中了那个标志 。
但受益于数据优先的不仅仅是大型企业;数据有无数的机会为企业和客户增加价值。
无论您是刚刚开始开发数据能力,还是多年来一直关注数据能力,成为数据第一公司都不仅仅是基础设施。
这是关于制定最好的游戏计划。
在 Communitech,Smith 概括了五种方法,每个组织都可以最大限度地提高其使用的数据的数量、质量和价值。
以下是您需要更好的主数据管理策略的五个原因。
1.共享数据必须既安全又简单。
大多数公司内部共享数据的方式存在许多问题。安全问题是重中之重。用电子邮件发送电子表格是不负责任的,尤其是当它们包含敏感信息时,但这仍然是许多公司共享数据的方式。如果下周电子表格中的数据发生变化,你必须重新做一遍。
在发布信息的多种方式中,无论你是使用拇指驱动器还是 Dropbox,都存在问题。管理权限,保持数据更新,这样的例子不胜枚举。
那么,成功且负责任的数据管理的关键是什么呢?
它正在寻找一种安全共享数据的方法,维护最新版本,并为用户设置特定的访问和控制权限。轻松完成这一切是高效数据团队的关键。
2.外部数据是一个不容错过的好机会。
我们不需要解释外部数据的价值。在组织之外创建的数据有助于提供独特的见解,让您获得竞争优势。问题是,在您的组织之外创建的数据也是在您的组织之外创建的。查找、连接和规范化来自外部来源的数据对您的团队来说是一种压力,随着您连接到每个新的来源,这种压力会呈指数级增长。
数据的价值和可用性意味着每个人都应该连接更多而不是更少的数据。组织和个人应该能够访问一个数据市场,该市场以他们想要的格式提供所有外部数据源。数据 市场 是一个数据管理解决方案,在拥有数据和利用数据之间架起了一座桥梁。
3.你的数据科学家被铐上了。
与顶尖的数据科学家一起工作,却不明白为什么他们没有创造出令人惊叹的东西?不是他们,是你的数据。数据科学家 80%的时间都被他们工作中最琐碎的事情占据了——获取数据并使其可用。他们大约有五分之一的时间花在查找数据上,而 60%的时间花在清理、组织、格式化和整理数据上。
这不是他们进入数据科学的原因。
如果没有数据管理解决方案,他们的时间就会被“脏活累活”所占据,而不是利用数据来帮助您发展业务。
数据科学家只有 20%的时间是数据科学家。
And we have to imagine that screaming into a pillow is at least 1% from the ‘Other’ segment. Data from Forbes.****
4.只有 0.5%的数据被使用。
麻省理工科技评论 发表了这个统计数据,它真的让我们大吃一惊。但事实是,在每天创建的 2.5 数据中,只有很小一部分得到了利用。
将数据转换成有意义的东西很难。尽管有大量的数据和对其洞察力的渴望,有效使用内部和外部数据的障碍使得使用大量数据变得非常困难。
实际上,这意味着对于大多数公司来说,他们连接的唯一数据是:
- 最低挂的水果,或
- 对他们的成功至关重要的东西。
这意味着利用数据进行创新,或者开发模型并进行试验超出了的范围。
为了获得数据的优势,我们不能吝啬。
为什么?
5.1.8 万亿美元。
这就是原因。
据 Forrester 称:“到 2021 年,洞察驱动的业务将从非洞察驱动的竞争对手那里每年窃取 1.8 万亿美元
当心“偷”这个词为了竞争,企业将不得不大幅增加他们使用的数据量。
把你的数据放在湖里真是太好了。现在该拿出来了。
我最近的一些帖子,希望你能看看:
你的数据准备好 AI 了吗?
[开放数据和公开数据有区别吗?](http://Is There a Difference Between Open Data and Public Data?)
原载于https://blog.thinkdataworks.com。**
连接ThinkData 作品 上Namaraapp,或者** 这里联系我们 ******
每个数据科学家(和程序员)都应该使用的 5 种资源
原文:https://towardsdatascience.com/5-resources-every-data-scientist-and-programmer-should-use-6cea8e52aa2c?source=collection_archive---------16-----------------------
或者:我是如何学会停止担忧并热爱我所拥有的资产的
Photo by Max Duzij on Unsplash
如果你曾经听到有人告诉你,他们从来不需要查任何东西,或者他们什么都知道——那么作为一名优秀的数据科学家,你可能应该有点怀疑。从统计学上来说,一个人不可能知道所有的事情,除非是关于一个非常具体的话题。作为数据科学家,我们通常会涉足与数据科学和编程相关的不同专业领域。即使我们只专注于一个专业,现实是技术在不断发展,因为我们拥有的工具最适合我们手头的任务。伴随这种不断的进化而来的是好奇、适应变化和不断学习的需要。
作为优秀的数据科学家,重要的是不要回避利用每一个可以利用的资源。如果你对某件事不确定,你可以使用很多资源来帮助解决问题,回答问题,或者了解更多关于某个特定主题的信息。即使你不打算马上使用它——知道去哪里找也无妨!
在这篇博文中,我将介绍 5 大可用资源(免费!)献给每一位数据科学家,以及每一位希望了解某个主题的更多信息或者只是想增长技能、提高能力的人。
5.证明文件
Photo by Bernd Klutsch on Unsplash
当我学习一个新的库、库中的一个新函数、一门新的编程语言等时,我喜欢浏览的第一批资源之一。是特定库/函数/语言的文档。在许多情况下,文档都经过精心策划,为每个特定组件的功能以及使用它时的预期提供了解释和示例。虽然有些库有非常深入和有条理的文档,但有时这些文档可能有点乏味。
如今,文档通常允许开源协作,所以当人们觉得文档不够完整时,他们可以根据需要添加解释。虽然这些添加通常必须得到项目负责人的批准,但大多数人都乐于接受用户的有益合作。
在某些情况下,文档可能有点太专业,提供的库或语言的范围太广,不够详细,或者——正如我上面提到的——只是有点乏味。在这种情况下,我喜欢求助于…
4.博客帖子
Source
博客文章(比如你现在正在阅读的这篇)允许人们分享他们积累的关于任何话题的知识。有些人知道如何讲故事,从你读到开头几个字的那一刻起,他们就能把你吸引住。他们有一种天赋,可以用你想不到的方式来解释事情——也许还会不时地出现一些例子。不知不觉中,你就明白了几分钟前让你陷入困惑漩涡的话题。
博客帖子最好的一点是,人们通常不会写它们,除非他们对他们正在讨论的话题感到某种程度的舒适。这样,你就可以放心了,你正在从某个人那里获得知识,这个人可能不一定是某个主题的专家,但是他们对他们正在讨论的内容有足够的信心来写下来。
博客的缺点是,当人们倾向于漫谈时,它们有时会变得有点长。其他时候,他们有点跑题,不太切中要害。在很多情况下,他们可能解释了你正在寻找的东西的概况,但并没有真正得到你真正需要的东西。如果你正在寻找一个特定问题的答案,那么我可能会推荐…
3.StackOverflow
Source
StackOverflow 是对技术领域的任何人来说最有用的网站/论坛之一。除了帮助数据科学家回答问题和解决他们可能遇到的问题,它也是程序员遇到困难时使用的东西。StackOverflow 是数据科学/编程社区的真实代表,在这里,人们提出问题,让那些更有经验的人(或者至少是发现了特定问题的答案的人)来回答问题。有时问题就像运行特定方法或函数的正确语法一样简单。其他时候,人们会遇到更多的技术问题,例如实例化和建立神经网络的正确方法。
因为 StackOverflow 本质上是一个供人们提问和回答问题的论坛,所以在很多情况下,你会发现有人和你遇到了同样的问题。虽然数据科学仍然是一个相对较新的领域,但它已经足够成熟,人们已经经历了相同的练习,并遇到了与您相同的问题。语言和库已经存在了足够长的时间,人们可以找到并修复 bug,并解决他们自己的许多问题。如果有人很好奇问了一个问题,那么很可能其他人已经花时间回答了他们的问题。
在某些情况下,人们不喜欢问自己的问题,找不到他们的具体问题或充分解决他们问题的答案,不通过阅读学习,或者他们只是喜欢自己解决问题。如果是这种情况,请考虑一下…
2.油管(国外视频网站)
Photo by Christian Wiediger on Unsplash
在今天这个时代,你可以找到任何东西的视频——无论你是想建立一个机器学习模型,在你的汽车上做一些工作,学习新的烹饪食谱,甚至只是寻找一些娱乐。进入 YouTube。YouTube 是一个允许用户发布几乎任何主题的视频的网站,在许多情况下,这些视频是解释性的,可以帮助你学习新的东西或扩展你对现有主题的知识。
使用 YouTube 进行编程和数据科学也没什么不同。在一个存在在线学校和新兵训练营的世界里,不难找到一个关于数据科学或编程任何方面的极端(有时太多)细节的视频。刚刚接触 Python,您正在尝试学习如何构建函数?有一个视频可以证明这一点。试图学习如何建立一个推荐系统?还有一个的视频给也就是。对神经网络感兴趣?你猜对了。没有短缺的视频为的那个。
最终,YouTube 与 StackOverflow 的相似之处在于,它是人们帮助人们(或为人们创造娱乐内容),只是这次它是视频格式的。也许接受完全陌生的人的建议是你不能面对面交谈的,这不是你喜欢的。也许你对给你建议的人的出身有些犹豫。如果这些是你所关心的,那么你可以使用的最好的资源,经常被忽视的是…
1.你的网络!
Photo by Helena Lopes on Unsplash
我之前在博客中提到过这一点,事实是数据科学和编程是一个非常紧密的社区。我们是一群总是乐于谈论我们知道什么,我们正在做什么,以及我们想学什么的人。在我的网络中,我还没有遇到过一个数据科学家不愿意坐下来边喝咖啡(或一两杯欢乐时光饮料)边聊天,讨论他们的知识以及他们是如何获得这些知识的。
使用你的人际网络是一种经常被忽视的资源,因为大多数人不喜欢“打扰”别人。这里的问题始于把使用你的网络看作是对他人的打扰。大多数人都乐于与他人建立真诚的联系,尤其是当这意味着可以谈论一点自己和自己的知识时。
不是每个人都喜欢交际。好消息是,如果有人不喜欢谈论自己,回答你的问题,或者坐下来聊天,他们很可能会在你真正出去做这些之前让你知道。他们可能不会回复你的信息,他们可能会拒绝你。别担心!第一步是把你自己放在那里,真正地与人互动。即使你认为你现在不是一个善于交际的人,当你找到一些共同点和话题来谈论的时候,谈话往往会自由地进行。不要害怕利用你的网络来帮助你成长为一个人和一名数据科学家!
荣誉奖——谷歌
Maybe the most recognizable logo of them all. Source
在我结束之前的任何资源之前,谷歌通常是我开始的地方(也许除了网络)。通过了解如何有效地使用谷歌,你经常可以找到各种有价值的资源来帮助解决手头的问题。有效的谷歌搜索减少了你花在寻找东西上的时间,让你花更多的时间实际解决你的问题。但是要小心不要迷失在兔子洞里——因为谷歌提供了这么多不同的结果,很容易忽略那些可能最有用的。
虽然这并不意味着是一个包罗万象的资源列表,但它是我在作为一名数据科学家的旅程中(以及在进入该行业之前)发现有用的前五个。互联网是一个充满知识的地方。但是要小心,因为不是所有的都是有用的,当然也不会总是对的!小心行事,永远愿意学习,并过着好奇的生活。一个好的数据科学家总是在问问题,总是在寻求学习!
5 大物体检测挑战和解决方案
原文:https://towardsdatascience.com/5-significant-object-detection-challenges-and-solutions-924cb09de9dd?source=collection_archive---------1-----------------------
回顾对象检测问题提出的独特挑战和研究人员克服这些障碍的努力
Personal photo processed with YOLOv2. Author at Haleakalā National Park.
计算机视觉领域最近经历了实质性的进展,这主要归功于深度学习,特别是卷积神经网络(CNN)的进步。在图像分类中,计算机根据图像的内容对图像进行分类或分配标签,只需利用预先训练的神经网络并微调最后几个吞吐量层,通常就可以看到很好的结果。
分类和然而,就在几年前,在一幅图像中找到未知数量的单个物体还被认为是一个极其困难的问题。这项被称为物体检测的任务现在已经可行,甚至已经被像和 IBM 这样的公司产品化。但是所有这些进步都来之不易!物体检测提出了许多超出图像分类所需的相当大的挑战。在简单介绍了这个主题之后,让我们深入探讨这些问题带来的几个有趣的障碍以及各种新兴的解决方案。
介绍
物体检测的最终目的是定位重要的物品,在其周围绘制矩形包围盒,并确定所发现的每个物品的类别。物体检测的应用出现在 许多不同的领域 包括为自动驾驶汽车检测行人,监控农作物,甚至为体育运动实时跟踪球。多年来,研究人员为此目标投入了大量工作:从 2001 年发表的 Viola 和 Jones 的面部检测算法到 2017 年发布的 RetinaNet 快速、高度精确的单状态检测框架。CNN 的引入标志着物体探测历史上的一个关键时刻,因为几乎所有现代系统都以某种形式使用 CNN。也就是说,这篇文章的剩余部分将专注于对象检测的深度学习解决方案,尽管其他方法也面临类似的挑战。要了解更多关于物体检测的基础知识,请查看我在 Metis 博客上的帖子:“ 物体检测初学者指南 ”
挑战
1.双重优先级:对象分类和定位
对象检测的第一个主要复杂性是它的附加目标:我们不仅要对图像对象进行分类,还要确定对象的位置,通常称为对象定位任务。为了解决这个问题,研究人员通常使用多任务损失函数来惩罚错误分类和定位错误。
基于区域的 CNN 代表了一类流行的对象检测框架。这些方法包括生成物体可能位于的区域建议,然后进行 CNN 处理以分类和进一步细化物体位置。Ross Girshick 等人开发了 快速 R-CNN 以改进他们最初的结果与 R-CNN 。顾名思义,快速 R-CNN 提供了显著的加速,但准确性也提高了,因为分类和定位任务是使用一个统一的多任务损失函数来优化的。将可能包含对象的每个候选区域与图像的真实对象进行比较。然后,候选区域招致错误分类和边界框错位的惩罚。因此,损失函数由两种项组成:
其中分类项对真实对象类别 u 的预测概率施加对数损失,定位项是定义矩形的四个位置分量的平滑 L₁ 损失。注意,当不存在对象时,本地化惩罚不适用于背景类, u=0 。还要注意,可以调整参数 λ 以更强地优先考虑分类或定位。
2.实时检测的速度
目标检测算法不仅需要准确地分类和定位重要的目标,还需要在预测时非常快,以满足视频处理的实时要求。几年来的几项关键改进提高了这些算法的速度,将测试时间从 R-CNN 的每秒 0.02 帧(fps)提高到令人印象深刻的快速 YOLO 的每秒 155 帧。
快速 R-CNN 和 快速 R-CNN 旨在加快原有 R-CNN 的接近速度。R-CNN 使用 选择性搜索 来生成 2000 个感兴趣的候选区域(RoI ),并将每个 RoI 单独通过 CNN 库,这导致了巨大的瓶颈,因为 CNN 处理相当慢。相反,快速 R-CNN 将整个图像通过 CNN base 发送一次,然后将通过选择性搜索创建的 ROI 与 CNN 特征图进行匹配,从而将处理时间减少了 20 倍。虽然快速 R-CNN 比 R-CNN 快得多,但另一个速度障碍仍然存在。快速 R-CNN 在单幅图像上执行对象检测大约需要 2.3 秒,而选择性搜索占用了整整 2 秒的时间!更快的 R-CNN 用一个单独的子神经网络取代了选择性搜索来生成 ROI,从而又提高了 10 倍,因此测试速度约为 7-18 fps。
尽管有这些令人印象深刻的改进,视频通常至少以 24 fps 拍摄,这意味着更快的 R-CNN 可能无法跟上。基于区域的方法包括两个独立的阶段:提出区域和处理区域。这种任务分离被证明有些低效。另一种主要类型的对象检测系统依赖于统一的单状态方法。这些所谓的单次检测器在单次通过图像时完全定位和分类物体,这大大减少了测试时间。一个这样的单次检测器 YOLO 从在图像上布置网格开始,并允许每个网格单元检测固定数量的不同尺寸的物体。对于图像中出现的每个真实对象,与对象中心相关联的网格单元负责预测该对象。然后,一个复杂的多项损失函数确保所有的定位和分类发生在一个过程中。这种方法的一个版本,快速 YOLO,甚至达到了 155 fps 的速率;然而,在这种高速度下,分类和定位精度急剧下降。
最终,今天的对象检测算法试图在速度和准确性之间取得平衡。检测框架之外的几个设计选择会影响这些结果。例如, YOLOv3 允许不同分辨率的图像:高分辨率图像通常具有更好的准确性,但处理时间较慢,低分辨率图像则相反。CNN 基底的选择也影响速度-精度的权衡。像《盗梦空间-雷斯网-V2》中使用的 164 层这样的非常深的网络产生了令人印象深刻的准确性,但在速度方面与 VGG-16 的框架相比就相形见绌了。物体检测设计的选择必须根据速度和精度孰先孰后来决定。
3.多种空间比例和纵横比
对于对象检测的许多应用,感兴趣的项目可能以各种尺寸和纵横比出现。从业者利用几种技术来确保检测算法能够以多种尺度和视角捕捉对象。
锚箱
更快的 R-CNN 的更新区域建议网络不是选择性搜索,而是在图像的卷积特征图上使用一个小的滑动窗口来生成候选 ROI。可以在每个位置预测多个 ROI,并相对于参考锚盒进行描述。这些锚箱的形状和尺寸经过精心选择,以适应不同的比例和长宽比。这允许检测各种类型的对象,希望在定位任务期间边界框坐标不需要调整太多。其他框架,包括单次检测器,也采用锚盒来初始化感兴趣的区域。
Carefully chosen anchor boxes of varying sizes and aspect ratios help create diverse regions of interest.
多重特征地图
单次发射探测器必须特别强调多尺度问题,因为它们只需通过 CNN 框架一次就能探测到物体。如果仅从最终的 CNN 层中检测到对象,则只会发现较大的项目,因为较小的项目可能会在池层中的下采样期间丢失太多信号。为了解决这个问题,单触发探测器通常在多个 CNN 层中寻找物体,包括保持较高分辨率的早期层。尽管使用多特征地图是一种预防措施,但众所周知,单次检测器很难检测到小物体,尤其是那些紧密聚集的物体,如一群鸟。
Feature maps from multiple CNN layers help predict objects at multiple scales. (Figure source, modified.)**
特征金字塔网络
特征金字塔网络(FPN) 将多特征地图的概念更进了一步。图像首先通过典型的 CNN 路径,产生语义丰富的最终层。然后,为了重新获得更好的分辨率,FPN 通过对该特征图进行上采样来创建自上而下的路径。虽然自上而下的路径有助于检测不同大小的对象,但空间位置可能会有偏差。在原始特征图和相应的重建层之间添加横向连接,以改善对象定位。FPN 目前提供了一种探测多尺度物体的领先方法,YOLO 在第三版 的 中增加了这项技术。
The feature pyramid network detects objects of varying sizes by reconstructing high-resolution layers from layers with greater semantic strength. (Figure source, modified.)**
4.有限的数据
目前可用于对象检测的有限数量的注释数据被证明是另一个重大障碍。对象检测数据集通常包含大约十几个到一百个对象类别的基本事实示例,而图像分类数据集可以包括超过 100,000 个类别。此外,众包经常免费产生图像分类标签(例如,通过解析用户提供的照片说明的文本)。然而,收集地面真实标签以及用于物体检测的精确边界框仍然是令人难以置信的乏味工作。
由微软提供的 COCO 数据集目前领先于一些可用的最佳对象检测数据。COCO 包含 300,000 个分段图像,其中 80 个不同类别的对象具有非常精确的位置标签。每幅图像平均包含大约 7 个物体,并且这些物体以非常大的比例出现。尽管这个数据集很有帮助,但是如果只在 COCO 上训练,这 80 个选择类之外的对象类型将不会被识别。****
缓解数据稀缺的一个非常有趣的方法来自 YOLO9000,即 YOLOT3 的第二个版本 。YOLO9000 将许多重要的更新纳入了 YOLO,但它也旨在缩小对象检测和图像分类之间的数据集差距。YOLO9000 同时在 COCO 和 ImageNet 上进行训练,这是一个拥有数万个对象类的图像分类数据集。COCO 信息有助于精确定位物体,而 ImageNet 增加了 YOLO 的分类“词汇”分层单词树允许 YOLO9000 首先检测对象的概念(如“动物/狗”),然后深入到细节(如“西伯利亚哈士奇”)。这种方法似乎对 COCO 已知的概念(如动物)很有效,但对不太流行的概念表现不佳,因为 RoI 建议仅来自 COCO 的训练。
YOLO9000 trains on both COCO and ImageNet to increase classification “vocabulary.” (Figure source, modified.)**
5.阶级不平衡
类别不平衡被证明是大多数分类问题的一个问题,对象检测也不例外。考虑一张典型的照片。更有可能的是,照片包含几个主要对象,图像的其余部分被背景填充。回想一下,R-CNN 中的选择性搜索为每幅图像生成了 2000 个候选感兴趣区域——想象一下,这些区域中有多少不包含物体并被视为阴性!
最近在 RetinaNet 中实现了一种称为焦点损失的方法,有助于减少等级不平衡的影响。在优化损失函数中,当惩罚错误分类时,焦点损失代替了传统的对数损失:
其中 pᵤ 是真实类别的预测类别概率,γ >为 0。附加因子(*)减少了高概率的良好分类示例的损失,总体效果是不强调模型熟知的许多示例的类,如背景类。因此,占据少数类的感兴趣对象会获得更多的重要性,并提高精确度。
结论
目标检测通常被认为比图像分类困难得多,特别是因为这五个挑战:双优先级、速度、多尺度、有限数据和类别不平衡。研究人员致力于克服这些困难,经常产生惊人的结果;然而,重大挑战依然存在。
基本上,所有的对象检测框架都继续与小对象作斗争,尤其是那些聚集在一起的部分遮挡的对象。具有顶级分类和定位精度的实时检测仍然具有挑战性,从业者在做出设计决策时必须经常优先考虑这两者。如果假设帧之间存在某种连续性,而不是单独处理每一帧,视频跟踪在未来可能会有所改进。此外,一个有趣的增强可能会看到更多的探索,将当前的二维边界框扩展到三维边界立方体。尽管许多物体检测障碍已经有了创造性的解决方案,但这些额外的考虑——以及更多——表明物体检测研究肯定还没有完成!
参考
[1] T.-Y. Lin,P. Goyal,R. Girshick,K. He 和 P. Dollar,密集物体探测的焦点损失 (2017),arXiv 预印本 arXiv:1708.02002。
[2] R. Girshick,J. Donahue,T. Darrell 和 J. Malik,用于精确对象检测和语义分割的丰富特征层次 (2014),IEEE 计算机视觉和模式识别会议(CVPR)。
[3] R. Girshick, Fast R-CNN (2015),IEEE 计算机视觉国际会议(ICCV)。
[4] S. Ren、K. He、R. Girshick 和 J. Sun。更快的 r-cnn:用区域提议网络实现实时目标检测。 (2015)神经信息处理系统(NIPS)。
[5] J. Redmon,S. Divvala,R. Girshick,a .法尔哈迪,你只看一次:统一的实时物体检测 (2015),arXiv 预印本 arXiv:1506.02640。
[6] J .雷德蒙和 a .法尔哈迪, Yolo9000:更好、更快、更强 (2017),计算机视觉和模式识别(CVPR)。
[7] J .雷德蒙和 a .法尔哈迪,约洛夫 3:一种增量改进 (2018),arXiv。
[8] W. Liu,D. Anguelov,D. Erhan,C. Szegedy 和 S. E. Reed, SSD:单次多盒探测器 (2015),CoRR
[9] T.-Y. Lin,P. Dollar,R. Girshick,K. He,B. Hariharan 和 S. Belongie,用于对象检测的特征金字塔网络 (2017),IEEE 计算机视觉和模式识别会议论文集。
[10] T.-Y. Lin、M. Maire、S. Belongie、J. Hays、p .佩罗娜、D. Ramanan、P. Dollar 和 C. L. Zitnick,微软 coco:上下文中的通用对象 (2014),欧洲计算机视觉会议。
5 个智能 Python NumPy 函数
原文:https://towardsdatascience.com/5-smart-python-numpy-functions-dfd1072d2cb4?source=collection_archive---------10-----------------------
简洁编程的优雅 NumPy 函数
在机器学习和数据科学项目的日常数据处理中,我们会遇到独特的情况,这些情况需要样板代码来解决问题。随着时间的推移,其中一些被转换成由核心语言或软件包本身根据社区的需要和使用提供的基本特性。在这里,我分享 5 个优雅的 python Numpy 函数,它们可以用于高效简洁的数据操作。
1)在整形中使用-1
Numpy 允许我们重塑一个矩阵,只要新的形状与原来的形状兼容。这个新形状的一个有趣的方面是,我们可以给出一个形状参数作为 -1 。这仅仅意味着它是一个未知的维度,我们希望 Numpy 能够解决它。Numpy 将通过查看‘数组的长度和剩余维度’并确保它满足上述标准来确定这一点。现在让我们看一个例子。
Pictorial representation of different reshape with one dimension as -1
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
a.shape
(2, 4)
假设我们给行 1,给列-1,那么 Numpy 将能够找到列 8。
a.reshape(1,-1)
array([[1, 2, 3, 4, 5, 6, 7, 8]])
假设我们给行-1,给列 1,那么 Numpy 将能够找到行 8。
a.reshape(-1,1)
array([[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8]])
类似地,下面是可能的。
a.reshape(-1,4)
array([[1, 2, 3, 4],
[5, 6, 7, 8]])a.reshape(-1,2)
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])a.reshape(2,-1)
array([[1, 2, 3, 4],
[5, 6, 7, 8]])a.reshape(4,-1)
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
这也适用于任何更高级张量整形,但是只能给出一个维度-1。
a.reshape(2,2,-1)
array([[[1, 2],
[3, 4]],[[5, 6],
[7, 8]]])a.reshape(2,-1,1)
array([[[1],
[2],
[3],
[4]],[[5],
[6],
[7],
[8]]])
如果我们试图重塑一个不兼容的形状或一个以上的未知形状,将会出现一个错误信息。
a.reshape(-1,-1)
**ValueError**: can only specify one unknown dimensiona.reshape(3,-1)
**ValueError**: cannot reshape array of size 8 into shape (3,newaxis)
总而言之,当重塑数组时,新形状必须包含与旧形状相同数量的元素,这意味着两个形状的尺寸的乘积必须等于。当使用-1 时,对应于-1 的维数将是原始数组的维数的乘积除以赋予reshape
的维数的乘积,以保持相同的元素数量。
2) AArgpartition:在数组中找到 N 个最大值
Numpy 有一个名为 argpartition 的函数,它可以高效地找到最大的 N 值索引并依次找到 N 个值。它给出索引,然后你可以排序,如果你需要排序的值。
a = np.array([10, 7, 4, 3, 2, 2, 5, 9, 0, 4, 6, 0])index = **np.argpartition**(a, -5)[-5:]
index
array([ 6, 1, 10, 7, 0], dtype=int64)np.sort(a[index])
array([ 5, 6, 7, 9, 10])
3) Clip:如何将数组中的值保持在一个区间内
在许多数据问题或算法中(如强化学习中的 PPO ),我们需要将所有值保持在一个上限和下限内。Numpy 有一个名为 Clip 的内置函数可以用于此目的。Numpy clip () 函数用于 Clip (限制)数组中的值。给定一个区间,区间外的值被剪切到区间边缘。例如,如果指定了[-1,1]的间隔,则小于-1 的值变为-1,大于 1 的值变为 1。
Clip example with min value 2 and maximum value 6
**#Example-1**
a = np.array([10, 7, 4, 3, 2, 2, 5, 9, 0, 4, 6, 0])
print (**np.clip**(a,2,6))[6 6 4 3 2 2 5 6 2 4 6 2]**#Example-2**
a = np.array([10, -1, 4, -3, 2, 2, 5, 9, 0, 4, 6, 0])
print (**np.clip**(a,2,5))[5 2 4 2 2 2 5 5 2 4 5 2]
4)提取:根据条件从数组中提取特定元素
我们可以使用 Numpy extract() 函数从符合条件的数组中提取特定的元素。
arr **=** np.arange(10)
arrarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])# Define the codition, here we take MOD 3 if zero
condition **=** np.mod(arr, 3)**==**0
conditionarray([ True, False, False, True, False, False, True, False, False,True])**np.extract**(condition, arr)
array([0, 3, 6, 9])
类似地,如果需要,我们可以使用 AND 和 OR 组合的直接条件
**np.extract**((**(arr > 2) & (arr < 8)**), arr)array([3, 4, 5, 6, 7])
5) setdiff1d:如何在一个数组中找到与另一个数组相比较的唯一值
返回一个数组中不存在于另一个数组中的唯一值。这相当于两个数组的差异。
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
b = np.array([3,4,7,6,7,8,11,12,14])
c = **np.setdiff1d**(a,b)
carray([1, 2, 5, 9])
最后注意:
这是 5 个 Numpy 函数,社区并不经常使用,但是它们非常简洁优雅。在我看来,只要有类似的情况,我们就应该使用它们,因为它们不仅提供了更少的代码,而且是实现复杂问题解决方案的一种聪明方式。
感谢阅读。可以联系我@ LinkedIn 。
每月只需 5 美元,就可以无限制地获取最鼓舞人心的内容……点击下面的链接,成为媒体会员,支持我的写作。谢谢大家!
d6tflow 可扩展深度学习管道 5 步指南
原文:https://towardsdatascience.com/5-step-guide-to-scalable-deep-learning-pipelines-with-d6tflow-94d21cb40d22?source=collection_archive---------30-----------------------
如何将典型的 Pytorch 脚本转换为可扩展的 d6tflow DAG 以加快研究&开发
Photo by Sean Lim on Unsplash
引言:何苦呢?
构建深度学习模型通常涉及复杂的数据管道以及大量的反复试验,调整模型架构和需要比较其性能的参数。经常很难跟踪所有的实验,往好里说会导致混乱,往坏里说会导致错误的结论。
在你的 ML 代码不好的 4 个原因中,我们探讨了如何将 ML 代码组织成 DAG 工作流来解决这个问题。在本指南中,我们将通过一个实际的案例研究,利用 d6tflow 将现有的 pytorch 脚本转变为可扩展的深度学习管道。起点是脸书的 pytorch 深度推荐器模型,我们将通过 5 个步骤将代码迁移到可扩展的深度学习管道中。下面的步骤是用部分伪代码编写的,以说明概念,完整的代码也是可用的,请参见文章末尾的说明。
我们开始吧!
第一步:计划你的 DAG
要计划您的工作并帮助他人了解您的管道是如何组合在一起的,您需要从考虑数据流、任务之间的依赖关系和任务参数开始。这有助于您将工作流程组织成逻辑组件。你可能想画一个这样的图
下面是脸书深度学习推荐器模型(DLRM)的 Pytorch 模型训练 DAG。它显示了训练任务TaskModelTrain
及其所有的依赖项,以及这些依赖项是如何相互关联的。如果你写功能代码,很难看出你的工作流程是如何像这样组合在一起的。
第二步:写任务而不是函数
数据科学代码通常组织在函数中,这会导致很多问题,如4ML 代码不好的原因中所述。相反,您希望编写 d6tflow 任务。好处是您可以:
- 将任务链接到 DAG 中,以便自动运行所需的依赖关系
- 从依赖关系轻松加载任务输入数据
- 轻松保存任务输出,如预处理数据和训练模型。这样你就不会意外地重新运行长时间运行的训练任务
- 将任务参数化,以便智能管理它们(参见下一步)
- 将输出保存到 d6tpipe 为了将数据从代码中分离出来并轻松共享数据,请参见数据科学家犯下的 10 大编码错误
下面是将功能代码转换成 d6t 流程任务后,脸书·DLRM 代码的“之前/之后”的样子。
伸缩性不好的典型 Pytorch 功能代码:
使用可伸缩 d6tflow 任务编写的相同逻辑:
步骤 3:参数化任务
为了提高模型性能,您将尝试不同的模型、参数和预处理设置。为了跟踪所有这些,您可以向任务添加参数。这样,您可以:
- 跟踪哪些模型已经用哪些参数进行了训练
- 随着参数的变化,智能地重新运行任务
- 帮助其他人了解工作流中引入参数的位置
下面用参数设置脸书 DLRM 模型训练任务。请注意,您不再需要手动指定保存训练模型和数据的位置。
比较训练模型
现在,您可以使用该参数轻松地比较不同模型的输出。确保在加载任务输出之前使用该参数运行工作流(参见步骤 4)。
继承参数
通常,您需要在工作流程的下游设置一个参数级联。如果你写函数代码,你必须在每个函数中重复这个参数。使用 d6tflow,您可以继承参数,以便终端任务可以根据需要将参数传递给上游任务。
在脸书 DLRM 工作流中,TaskModelTrain
从TaskGetTrainDataset
继承参数。这样你可以运行TaskModelTrain(mini_batch_size=2)
,它会将参数传递给上游任务,即TaskGetTrainDataset
和所有依赖于它的其他任务。在实际代码中,注意self.clone(TaskName)
和@d6tflow.clone_parent
的使用。
步骤 4:运行 DAG 来处理数据和训练模型
要开始数据处理和模型训练,您需要运行 DAG。您只需要运行自动运行所有依赖项的终端任务。在实际运行 DAG 之前,您可以预览将要运行的内容。如果您对代码或数据进行了任何更改,这尤其有用,因为它将只运行已更改的任务,而不是整个工作流。
步骤 5:评估模型性能
现在工作流已经运行并且所有任务都已完成,您可以加载预测和其他模型输出来比较和可视化输出。因为任务知道每个输出保存在哪里,所以您可以直接从任务加载输出,而不必记住文件路径或变量名。这也使得你的代码可读性更好。
比较模型
您可以很容易地比较具有不同参数的不同模型的输出。
继续迭代
当您迭代、更改参数、代码和数据时,您会想要重新运行任务。d6tflow 智能地指出哪些任务需要重新运行,这使得迭代非常高效。如果你改变了参数,你不需要做任何事情,它会知道自动运行什么。如果您更改了代码或数据,您必须使用.invalidate()
将任务标记为未完成,d6tflow 将会解决剩下的问题。
在脸书 DLRM 工作流中,比如说您更改了培训数据或对培训预处理进行了更改。
完整源代码
所有代码都在 https://github.com/d6tdev/dlrm 提供。与https://github.com/facebook/dlrm相同,增加了 d6tflow 文件;
- flow_run.py:运行流= >运行该文件
- flow_task.py:任务代码
- flow_viz.py:显示模型输出
- flow_cfg.py:默认参数
- dlrm _ d6t _ py torch . py:dlrm _ data _ py torch . py 用于 d6tflow
自己试试!
你的下一个项目
在本指南中,我们展示了如何构建可扩展的深度学习工作流。我们使用了现有的代码库,并展示了如何将线性深度学习代码转换为 d6tflow DAGs 以及这样做的好处。
对于新项目,你可以从 https://github.com/d6t/d6tflow-template的可扩展项目模板开始。结构非常相似:
- 运行. py:运行工作流
- task.py:任务代码
- cfg.py:管理参数
5 个步骤。五个月。成为一名 AI 产品经理。
原文:https://towardsdatascience.com/5-steps-5-months-become-an-ai-product-manager-eca3e774ddda?source=collection_archive---------11-----------------------
Photo by Marvin Meyer on Unsplash
越来越多的公司正在雇佣专门打造人工智能产品的产品经理。为什么?
- 人工智能本质上是高度战略性的
- 人工智能的成功需要不同于传统软件产品的技术工具箱
- 几乎在每个行业,人工智能都有巨大的机会!
以下是 5 个步骤,让你在 5 个月内获得第一份人工智能产品经理的工作:
第一步——选择你的人工智能应用领域。
人工智能项目经理预计不仅仅拥有技术和商业印章。他们需要有战略眼光。他们需要了解行业的总体趋势。在我的职业生涯中,我见过应用人工智能可能会扰乱整个公司和整个商业模式的情况!理解 ML 算法是如何工作的很重要(我们稍后会谈到),但是作为第一步,你需要决定你想要颠覆什么行业。是 fintech 吗?电子商务?工业技术?天空是无限的——但是,当然,记住利用你以前的行业经验来获得在招聘过程中推销自己和谈判的最佳杠杆。
第一个月
花第一个月的时间,深入熟悉你所选择的行业领域。
- 在你选择的领域里,列出 10 家最值得工作的公司
- 对这个领域的人进行信息采访
- 阅读与你选择的领域相关的书籍和行业分析(Gartner,Forester 等。)参加会议等。
- 用你最擅长的任何方式学习空间内外!
第二步——成为顾客
一旦你选择了你的人工智能应用领域,你需要为你选择的领域培养“产品意识”。在你所选择的领域中,开发客户想要什么的自然直觉的最好方法就是成为客户。如果你想为职业足球运动员开发软件,了解你的客户的最好方法就是自己踢足球!去参加足球练习,和足球运动员一起玩,和足球运动员交谈,观看足球比赛,分析足球运动员。当您自己成为一名足球运动员时,您将对该应用领域中的客户真正想要和需要的东西有更自然的直觉。
第二个月
花两个月的时间成为顾客!第一个月是了解全局。第 2 个月不是被动学习…第 2 个月是动手体验学习。出去做吧!对于如何做到这一点,没有硬性的指导方针。这完全取决于你选择的领域,但这里有一些例子可以激发你的想象力:
- 例子 1——营销技术:如果你选择了“营销技术”,试着帮助你的朋友和家人进行营销!试着开一家 Shopify 商店,卖一些你在阿里巴巴上买的便宜的东西。尝试自己做营销!
- 例子 2——联网汽车:假设你的目标是联网汽车领域的人工智能工作,也许你想在这些联网汽车创新者之一那里找到一份工作。为了“成为顾客”,我会设定一个目标,试驾每一辆电动汽车和无人驾驶汽车。你知道这是怎么回事吗?想象你正在与邮轮的招聘经理交谈——如果你能告诉招聘经理你已经试驾了市场上的每一辆智能汽车,你就为成功搭建了舞台!
#3 —为客户而设计
一旦你对你的应用领域中的客户真正想要什么有了自然的直觉,你就应该开始为能解决这些问题的产品创建模型和设计。理想情况下,这是你已经在做的日常工作的一部分,但如果不是,你仍然可以把它作为一个副业或“激情项目”
我以前的一个 MBA 学生利用他的激情项目在 Adobe 获得了他的第一份项目经理工作。该学生能够向 Adobe 招聘团队展示他自己创作的与 Adobe 业务和整体战略相关的设计和模型。尽管他以前从未担任过“正式”的产品经理,但他能够通过有形的模型而不是假设的案例面试讨论来展示自己的创意设计技能。
第三个月
- 设定一个目标,测试 5 种新的客户体验(在开始时,重数量轻质量!稍后你可以“收敛”你的最佳想法)
- 使用纸质原型、Balsamiq 和 Adobe XD 等工具来模拟你的新体验。给顾客看。
- 可选:参加谷歌免费的快速原型制作迷你课程,看看它能有多快!
步骤 4 —为客户打造
这一步是数据和算法占据中心舞台的地方。作为一名人工智能项目经理,你将与数据工程师、数据科学家,甚至可能是学术研究人员密切合作。不仅能够说 ML 行话,而且能够对这些算法如何工作有一个功能上的理解将会大有帮助。这会让你更有效地合作。会帮助你感知更多的 AI 商机。它将帮助你了解人工智能有哪些可能,哪些不可能——当然,最好的学习方式是通过动手项目,而不是被动地阅读或观看相关材料。
我需要成为一名程序员吗?不完全是。您甚至可以使用 Microsoft excel (0 编码)创建自己的测试数据集,并组合一些非常基本的模型(如线性或逻辑回归)!假设您正在为足球运动员开发预测足球受伤或预测门票价格的软件,您可以用 excel、R 或 python 中的虚构数据(或真实数据)来构建这个软件。尽管这些项目看起来很简单,但它们会给你一种更自然的直觉,让你知道什么是可能的,什么是不可能的。
*在步骤 3 中测试 UX 设计,在步骤 4 中测试一些概念验证算法模型。
第 4 个月
- 设定一个目标,在月底拥有一个半固体预测模型。
- 你在第四步走多深取决于你先前的技术技能,但是再次强调,最重要的是你用真实的东西弄脏你的手!
- 可能的工具:Excel,Tableau,Matlab,R,Python,
第五步——向你的客户(雇主)展示你的人工智能项目管理技能!
现在你已经做了一些与你的目标公司相关的人工智能产品管理的实际操作项目,你是黄金!!!现在你只需要以一种用户友好的方式展示它。Balsamiq、Adobe XD 和其他原型制作应用程序具有允许您将模型(带有 0 编码)导出到移动设备上的功能。是的,你可以在面对面的面试中把它掏出来,通过展示你原始的激情来真正吸引面试团队!您还可以使用 Adobe portfolio 来展示项目组合或创建自己的网站。这就是我最终获得第一份人工智能项目管理工作的原因。我创建了一个与我的简历相关联的 AI 和 PM 设计项目组合(使用 Adobe portfolio)。由于招聘人员和招聘经理几乎在每次面试中都在谈论它,这是我获得第一份人工智能项目经理工作的一个非常直观和切实的销售特征。
第五个月
- 设定一个目标,拥有一个视觉上有吸引力的项目组合,这样你就可以向雇主展示你在步骤 1-4 中做了什么。
- 如果你想让它变得非常简单,只需制作一些谷歌幻灯片,并在你的简历中嵌入一个“仅供查看”的谷歌幻灯片链接,或者把它放在你的 LinkedIn 个人资料中
- 提示—如果你不想在简历上出现超长的网址,你可以使用 Adobe acrobat 在简历中嵌入超链接。如果你没有 Acrobat,很多图书馆都有免费的 adobe 软件。
全程接触潜在雇主(即使是在第一个月)。不要推迟你的面试,即使你还在第二或第三个月,因为每次面试你都会学到很多东西。有了这 5 个步骤,你将成为一个人工智能项目经理的黄金雇员,一个在你选择的领域寻求创新的公司!
底线
如果你想成为人工智能项目经理,这是我最好的建议。做个 AI PM 就好!不要只是等着招聘人员来给你一个 AI PM 的黄金机会。只要开始把它作为你当前工作的一部分,或者作为一个业余爱好,你会惊奇地发现隐藏的机会之门向你敞开。
感谢您的阅读!随时欢迎反馈和评论!
获取视频内容及最新文章更新,订阅 智能产品*YouTube 频道 。*
5 步和 10 步,来学习机器学习。
原文:https://towardsdatascience.com/5-steps-and-10-steps-to-learn-machine-learning-c4b61f78c712?source=collection_archive---------14-----------------------
有一个 5 步捷径,你可以马上解决机器学习问题,作为一个初学者,如果你想用机器学习做点什么,你可以先走这条路。
然后,你可以通过 10 步走成为一名数据科学家或更高级的机器学习工程师。
请记住这一点,
—改善你的心态和思维方式,这比学习如何使用工具重要得多。
—实现您的目标并成为数据科学家没有固定的轨道,因此您可以自由改变任何步骤或做您认为适合您的事情。
Read The Catalog
途径 1:阅读目录途径(5 步计划)
这条道路就像阅读你刚买的新设备的目录,你将学会如何有效地使用它,它将把你从一个初学者变成一个能够完成工作的初学者!你将能够以有限的准确度解决有限的问题。我建议在某些时候走这条路,以便能够快速解决不太重要的问题。
当我开始解决任何机器学习问题时,我会经常使用这些工具,这给了我一个尝试提高的基线准确性,它帮助我更加熟悉我拥有的数据集,并给了我一些见解。
- 精通 python 或者任何其他语言,比如 R,但是我建议你从 python 开始,网上有很多免费的资源,我建议你通过试错法和一些阅读来学习。
- 学习如何使用 Numpy 和 Scipy 进行数学运算, Pandas 和 Matplotlib 和 seaborn。
Numpy 和 Scipy、 都是数学库。 熊猫 是一个用于数据操作和分析的 python 库。 Matplotlib和Seaborn是帮助你可视化数据的库。 - 阅读文章 机器学习简介:自上而下的方法 ,它会给你一个关于机器学习世界的流畅介绍。
- 阅读关于 Scikit-learn,这一步是实际的目录阅读,Scikit-learn 是您将用来解决问题的工具集,您不必学习库中的所有内容,只需学习实现一两个模型并阅读其他模型。 Scikit-learn 是一个 python 库,它有很多已经实现的模型,这些模型是黑盒,你可以用它们来直接训练和预测,你甚至可以调整模型的参数以适应你的问题并获得更高的准确性。
- 阅读一书中的第 2 章 用 Scikit 动手机器学习-学习& TensorFlow
如果你对数据科学不感兴趣,那么你不应该继续瞄准数据科学,但如果你感兴趣,我建议你走第二条路。
Now, Let’s be Professional
途径 2:建立职业道路(10 步计划)
这条道路实际上会把你从一个初学者变成一个数据科学家,它会给你工具集和知识来解决相对复杂的问题。
决定你作为一名数据科学家有多优秀的最重要的一点是,你应该始终了解该领域的最新发现。
我建议你阅读大量的论文,关注大量的出版物和作家,并与他们接触,有任何问题都可以联系我!我们可以互惠互利,建立一个充满爱心的社区。
另一件真正重要的事情是练习。
- 当然,选择一门编程语言来掌握并在你的旅途中使用。
- 复习你的线性代数知识https://OCW . MIT . edu/courses/mathematics/18-06-Linear-Algebra-spring-2010/
- 从小抄上修改你的统计和概率知识,或者你可以在 https://www.khanacademy.org/math/statistics-probability 的 T21 网站上从头学起
- 复习你的微积分知识或者从这门课程中学习微积分https://www.youtube.com/playlist?list = plzhqobowt qdmsr 9k-rj 53 dwvrmyo 3t 5 yr
- 当然,最受欢迎的免费课程是 Coursera 上的吴恩达课程理论知识 。
- 推荐阅读 aurélien géRon的书** 用 Scikit 动手机器学习-Learn&tensor flow,这是一本信息量很大的好书,是技术知识的 。**
- 在 Kaggle 上大量练习,现在你可以用你目前所理解的机器学习技术来解决问题。
- 本课程数据可视化https://www . EDX . org/course/data-visualization-a-practical-approach-for-absolute-初学者-0
- 了解如何使用数据库(SQL 和非 SQL)
- 学习 Hadoop & Spark,我推荐这个课程https://www.udemy.com/share/1000lU,那里有很多免费的课程和书籍,去看看吧。
- 我相信,如果你已经达到了这一点,你将能够引导自己前进。
要有奉献精神,要有信心你能做到。
祝你玩得开心,让你的机器 充满创意。
数据科学项目生命周期的 5 个步骤
原文:https://towardsdatascience.com/5-steps-of-a-data-science-project-lifecycle-26c50372b492?source=collection_archive---------1-----------------------
通常,当我们谈论数据科学项目时,似乎没有人能够给出整个过程如何进行的可靠解释。从收集数据,一直到分析和展示结果
在这篇文章中,我将分解数据科学框架,带您经历项目生命周期的每个步骤,同时讨论关键技能和需求。
OSEMN 框架
Data Science Process (a.k.a the O.S.E.M.N. framework)
我将使用 OSEMN 框架带您完成这一过程,它从头到尾涵盖了数据科学项目生命周期的每一步。
1.获取数据
数据科学项目的第一步非常简单。我们从可用的数据源中获取我们需要的数据。
在这一步中,您需要查询数据库,使用像 MySQL 这样的技术技能来处理数据。您还可以接收 Microsoft Excel 等文件格式的数据。如果你使用的是 Python 或 R ,他们有特定的包可以从这些数据源直接读取数据到你的数据科学程序中。
您可能会遇到不同类型的数据库,如 PostgreSQL 、 Oracle ,甚至非关系数据库(NoSQL),如 MongoDB 。另一种获取数据的方法是使用网络抓取工具从网站上抓取,例如美汤。
收集数据的另一个流行选项是连接到 Web APIs。脸书和 Twitter 等网站允许用户连接到他们的网络服务器,访问他们的数据。你需要做的就是使用他们的 Web API 来抓取他们的数据。
当然,最传统的获取数据的方式是直接从文件中获取,比如从 Kaggle 下载,或者从以 CSV(逗号分隔值)或 TSV(制表符分隔值)格式存储的现有公司数据中下载。这些文件是平面文本文件。您将需要使用特殊的解析器格式,因为像 Python 这样的常规编程语言本身并不理解它。
所需技能
要完成上述任务,你需要一定的技能。例如,对于数据库管理,你需要知道如何使用 MySQL 、 PostgreSQL 或 MongoDB (如果你使用的是非结构化数据集)。
如果你希望在更大的数据集或大数据上工作,那么你需要学习如何使用分布式存储来访问,如 Apache Hadoop 、 Spark 或 Flink 。
2.擦除数据
获得数据后,接下来要做的事情是清理数据。这个过程是为了我们“清理”和过滤数据。记住“垃圾进,垃圾出”的哲学,如果数据未经过滤,不相关,分析的结果就没有任何意义。
在这个过程中,您需要将数据从一种格式转换成另一种格式,并将所有数据整合成一种标准化的格式。例如,如果您的数据存储在多个 CSV 文件中,那么您将把这些 CSV 数据合并到一个存储库中,以便您可以处理和分析它。
在某些情况下,如果您正在处理锁定的文件,我们还需要过滤这些行。锁定文件是指网页锁定文件,你可以从中了解到用户的人口统计数据,进入你的网站的时间等。
除此之外,清理数据还包括提取和替换值的任务。如果你意识到有缺失的数据集,或者它们可能看起来没有价值,这就是相应替换它们的时候了。
最后,您还需要拆分、合并和提取列。例如,对于产地,您可能同时拥有“城市”和“州”。根据您的需求,您可能需要合并或拆分这些数据。
把这个过程想象成组织和整理数据,删除不再需要的,替换丢失的,以及标准化所有收集数据的格式。
所需技能
您将需要像 Python 或 R 这样的脚本工具来帮助您清理数据。否则,你可以使用像 OpenRefine 这样的开源工具或者购买像 SAS Enterprise Miner 这样的企业软件来帮助你轻松完成这个过程。
为了处理更大的数据集,你需要掌握 Hadoop、 Map Reduce 或 Spark 方面的技能。这些工具可以通过编写脚本来帮助您清理数据。
3.浏览数据
一旦你的数据准备好被使用,就在你跳入人工智能和机器学习之前,你将不得不检查这些数据。
通常,在一个公司或商业环境中,你的老板只会扔给你一组数据,而如何理解这些数据取决于你。因此,将由您来帮助他们解决业务问题,并将其转化为数据科学问题。
为了实现这一点,我们需要探索数据。首先,您需要检查数据及其属性。不同的数据类型,如数字数据、分类数据、序数和名义数据等。需要不同的治疗方法。
然后,下一步是计算描述性统计,以提取特征和测试显著变量。检验重要变量通常是通过相关性来完成的。例如,探索某人患高血压的风险与其身高和体重的关系。请注意,有些变量是相关的,但它们并不总是意味着因果关系。
机器学习或建模中使用的术语“特征,是帮助我们识别代表数据的特征的数据特征。例如,“姓名”、“年龄”、“性别”是成员或员工数据集的典型特征。
最后,我们将利用数据可视化来帮助我们识别数据中的重要模式和趋势。我们可以通过简单的图表,如折线图或条形图,获得更好的图片,以帮助我们理解数据的重要性。
所需技能
如果你正在使用 Python,你将需要知道如何使用 Numpy、Matplotlib、Pandas 或 Scipy 如果您使用 R,您将需要使用 GGplot2 或 data exploration 瑞士刀 Dplyr。除此之外,你还需要掌握推断统计学和数据可视化方面的知识和技能。
就像你不需要硕士或博士来做数据科学一样,这些技术技能对于进行实验设计是至关重要的,因此你能够重现结果。
附加提示:
- 好奇。这可以帮助你发展你的蜘蛛感官来发现奇怪的模式和趋势。
- 关注你的听众,理解他们的背景和行话。以便您能够以对他们有意义的方式呈现数据。
4.模型数据
这是大多数人认为有趣的阶段。正如许多人称之为“神奇发生的地方”。
再一次,在到达这个阶段之前,记住擦洗和探索阶段对于构建有用的模型同样重要。所以,在这些阶段上花点时间,而不是直接跳到这个过程。
在对数据建模时,首先要做的事情之一是减少数据集的维数。并非所有的特征或值对于预测模型都是必不可少的。你需要做的是选择有助于结果预测的相关。
我们可以在建模中执行一些任务。我们还可以训练模型来执行分类,以使用逻辑回归来区分您收到的电子邮件是“收件箱还是“垃圾邮件”。我们也可以使用线性回归来预测数值。我们还可以使用建模对数据进行分组,以了解这些聚类背后的逻辑。例如,我们对电子商务客户进行分组,以了解他们在您网站上的行为。这需要我们使用聚类算法(如 k-means 或层次聚类)来识别数据点组。
简而言之,我们使用回归和预测来预测未来值,使用分类来识别,使用聚类来分组值。
所需技能
在机器学习中,你需要的技能是监督和非监督算法。对于库,如果你正在使用 Python,你将需要知道如何使用Sci-kit Learn;而如果你用的是 R,就需要用脱字符号。
在建模过程之后,您将需要能够计算评估分数,例如分类的精确度、召回率和 F1 分数。对于回归,您需要熟悉用于测量拟合优度的 R,以及使用 MAE(平均误差)或 RMSE(均方根误差)等误差分数来测量预测数据点和观察数据点之间的距离。
5.解释数据
我们正处于数据科学项目的最后也是最关键的一步,解释模型和数据。模型的预测能力在于它的概括能力。我们如何解释一个模型取决于它概括未知未来数据的能力。
解释数据指的是将你的数据呈现给一个非技术门外汉。我们提供结果来回答我们在项目开始时提出的业务问题,以及我们在数据科学过程中发现的可行见解。
可操作的洞察力是我们展示数据科学如何带来预测性分析以及随后的规定性分析的关键成果。在其中,我们学习如何重复一个积极的结果,或防止一个消极的结果。
最重要的是,你需要相应地想象你的发现,让它由你的业务问题驱动。以对组织有用的方式展示你的发现是很重要的,否则对你的利益相关者来说毫无意义。
在这个过程中,仅有技术技能是不够的。你需要的一项基本技能是能够讲述一个清晰可行的故事。如果你的演讲没有引起听众的反应,那就意味着你的交流没有效率。请记住,你将面对一个没有技术背景的观众,所以你传达信息的方式是关键。
所需技能
在这个过程中,要具备的关键技能是技术技能之外的。你需要很强的业务领域知识,以能够回答你要回答的业务问题的方式展示你的发现,并将其转化为可操作的步骤。
除了 Matplotlib,ggplot, Seaborn , Tableau , d3js 等数据可视化所需的工具之外。,你将需要软技能,如演示和沟通技能,再加上报告和写作技能,这肯定会在项目生命周期的这一阶段对你有所帮助。
概述
我在这里展示的是数据科学家在典型的数据科学项目中按时间顺序遵循的步骤。如果是一个全新的项目,我们通常会花费 60-70%的时间来收集和清理数据。因为它是一个框架,你可以用它作为你喜欢的工具的指南。
真正的北方总是我们定义的商业问题,甚至在开始数据科学项目之前。永远记住,扎实的业务问题、干净且分布良好的数据总是胜过花哨的模型。
我希望你今天学到了一些东西。如果您有任何反馈,请随时留言,并与任何可能觉得有用的人分享。
使用 Matplotlib 实现惊人可视化的 5 个步骤
原文:https://towardsdatascience.com/5-steps-to-amazing-visualizations-with-matplotlib-ca61f0ec5fec?source=collection_archive---------18-----------------------
Matplotlib 烂透了。默认情况下。
但是你可以调整它。
Photo by Isaac Smith on Unsplash
我们都经历过。 Matplotlib 被导入,你的数据集准备好了,你准备好做一些惊人的可视化。很快,看起来像土豆一样的默认 Matplotlib 图表的残酷现实就摆在你面前。
该死的。
几周前,我写了一篇文章,通过使用 Flask 和 Bokeh 开发交互式仪表板应用程序,将您的可视化提升到一个新的水平:
[## 下一级数据可视化—带有散景和烧瓶的仪表板应用程序
视觉化很重要。也许对作为数据分析师/科学家的你来说并非如此,但你可能会对表格数据充满信心…
towardsdatascience.com](/https-medium-com-radecicdario-next-level-data-visualization-dashboard-app-with-bokeh-flask-c588c9398f98)
那篇文章比这篇文章要复杂得多,但是如果你需要更灵活的东西,我还是想指出来。
今天,我将向你展示我在【Matplotlib】中使用大多数可视化工具所做的 5 件事,希望你能意识到,直接跳到 Seaborn 或 Bokeh 并没有真正的好处——在大多数情况下 Matplotlib 已经涵盖了。
数据集介绍
对于本指南,我使用了 Kaggle 上的KC _ house _ data数据集。从其他的海洋中选择这个的主要原因是它包含了大量的观察结果,但更重要的是,它包含了两个应该高度相关的属性:
- 居住面积
- 价格
由于潜在的相关性,可以绘制一个很好的散点图。
如果您不想下载数据集并跟随,以下是数据集头部的样子:
Head of kc_house_data.csv
但是在开始可视化之前,这里是导入和基本设置的代码:
Imports and Setup — https://gist.github.com/dradecic/43729ca53567fa44e433130faebeeb6d
我选择从数据集中抽取 100 个点,因为一般来说,当数据点太多时,散点图看起来不太好。
然后,我设置 x 代表居住面积, y 代表房价。
最初的绘图现在非常简单:
Default Matplotlib scatter plot — https://gist.github.com/dradecic/bfa07c255be6d7eafba74f001d6a9eb5
执行该单元格将产生一个不令人满意、乏味且难看的图表:
Default Matplotlib scatter plot
幸运的是,你可以做很多事情。以下是本文将基于的 5 个要点:
- 移除脊椎
- 向标题和轴标签添加自定义字体
- 向轴标签添加单位
- 更改标记、颜色、大小和不透明度
- 添加注释
事不宜迟,让我们直入第一点。
1.移除脊椎
Matplotlib 中的图表显示在一个“盒子”中,至少可以说,这个盒子看起来非常严格。默认情况下,其他可视化库更加开放,这种效果在这里很容易实现。
这里的目标是删除顶部的水平栏和右侧的垂直栏。
这是通过将以下内容添加到您的图表代码单元格中实现的:
Removing Spines — https://gist.github.com/dradecic/a96645c8798e556d1379bad2216bf895
Removing spines
瞧啊。图表现在更加开放,因此更有吸引力。
2.向标题和坐标轴标签添加自定义字体
现在,这个过程将比第一个过程更加繁琐。我选择使用 Raleway 字体,你需要下载压缩的 。ttf 如果你还没有的话。
下载完成后,将 TTF-s 解压到 Matplolib 的文件夹中。如果你像我一样使用Anaconda,Windows 上的路径会如下:
C:\Users\**<YOUR-USER-NAME>**\AppData\Local\Continuum\anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
您现在可以通过 Jupyter 和 Matplotlib 直接访问任何下载的字体。在新的单元格中,粘贴以下代码(我选择了半粗斜体作为标题,浅斜体作为轴标签):
Fonts Setup — https://gist.github.com/dradecic/a8b85ca866e7ac1543a362247feac80d
现在,您可以在调用 之前,将以下代码添加到您的图表单元格中。散点()。
注意在设置标题和/或轴标签时如何使用 LaTeX 。如果图表上的文字应该代表某种单位,例如平方英尺,这样做可以避免图表看起来怪异。
Title and Axis Labels — https://gist.github.com/dradecic/aa873a492a17b46da590370379853f24
这就是你的图表现在的样子:
Title and axis labels with custom font
对于几行代码来说还不错。但是你可以做得更好。
3.向轴标签添加单位
真的没有必要进一步解释这一点是关于什么的。
您希望轴标签更有吸引力。句号。
实现这一点的过程不像其他可视化库中那样简单,但它是可管理的。总之,代码如下:
Axis Units — https://gist.github.com/dradecic/71d0408606239e4ce7d9ddc37e646c79
上面的代码将为两个轴标签添加一个千位分隔符。
此外,在 x 轴上,单位是平方英尺,所以这就是将要添加的内容。
在 y 轴上,单位是美元。分笔成交点被格式化为货币,用逗号作为千位分隔符,用点号作为美分分隔符。
Added units to tick labels
4.更改标记、颜色、大小和不透明度
你不会真的认为我会跳过这个吧——是吗?
可能最明显的是,在大多数情况下,您要做的第一件事是改变标记的大小、形状和颜色。这里我使用了一个倒三角形作为标记,一些深蓝色作为标记颜色。
由于大量数据点集中在几乎相同的位置,不透明度应该降低,这样你可以更清楚地看到这些点。
总之,下面是实现这一点的代码:
Marker, Size, Color, and Opacity — https://gist.github.com/dradecic/14d62e2cddda2e0cc34e6d90e2174977
Changing markers
快好了。但还不是时候。
5.添加注释
最后,如果有意义的话(如果变量相关),在散点图上打印相关系数是个好主意。如果这样做,默认情况下,图例文本的左侧会有一个标记。
这不是我们想要的,我们想要一个简单、清晰、可见的相关系数的纯文本表示。
首先,你需要计算它。使用 Numpy 非常简单,在这种情况下,我会将结果四舍五入到小数点后两位。然后您需要将标签传递给 。scatter() 调用并隐藏存在的每一个图例句柄。
这样做需要一点代码,但并不复杂。
Annotation — https://gist.github.com/dradecic/100f022267b4dbbb50bbf693955d99ce
Adding annotations
这就是你最终图表的样子。对于几分钟的工作来说相当不错!
如果您在这个过程中迷路了,不要担心,下面是完整的代码片段:
Final — https://gist.github.com/dradecic/a578a62eed97653db4e64ba945fdf1ff
结论
这不是 Matplotlib 的权威指南。它是在考虑普通人的情况下编写的——不是完全的初学者,但也不是专家。
我希望你现在可以看到 Python 最流行的可视化库的威力,并且下次你不会立即跳入 Seaborn 或 Bokeh 中。
感谢阅读。
直到下一次…
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
为机器学习模型正确准备数据的 5 个步骤。
原文:https://towardsdatascience.com/5-steps-to-correctly-prep-your-data-for-your-machine-learning-model-c06c24762b73?source=collection_archive---------5-----------------------
如何准备数据集以充分利用它?
Photo by Brett Sayles from Pexels
描述任何机器学习项目的最简单方式是,它是一个程序,当给定它以前从未见过的数据时,它将根据以前的经验处理它们,并且告诉你一些你还不知道的事情。
“数据是新的石油。”—Clive Humb—Starcount 首席数据科学家兼执行董事
数据是几乎所有商业决策的核心。人力资源总监们正在从网上资源中收集数据,以确定招聘的最佳人选,并确认他们的详细信息。营销部门正在利用市场细分数据寻找愿意购买的消费者,尽可能地加快成交过程。企业高管必须审视市场中更大的趋势,比如资源、航运或制造业的价格变化。
你的项目只和你带来的数据一样强大。
步骤 1:收集数据
数据的选择完全取决于你要解决的问题。选择正确的数据肯定是你的目标,幸运的是,你能想到的几乎每个主题都有几个免费的公共数据集。
我最喜欢的 3 个免费搜索数据集的网站是:
- Kaggle 就是这么组织的。你会喜欢他们的数据集有多详细,他们给你关于特征、数据类型、记录数量的信息。你也可以使用他们的内核,而不必下载数据集。
- Reddit 这对于请求您想要的数据集来说非常有用。
- 谷歌数据集搜索这还是测试版,但很神奇。
- UCI 机器学习库,它维护 468 个数据集,作为对机器学习社区的服务。
好的一面是,数据是达到目的的手段,换句话说,数据的数量很重要,但不如数据的质量重要。所以,如果你想成为独立的,创建你自己的数据集,从几百行开始,然后在你前进的过程中建立其余的。那也可以。有一个 python 库叫做美汤。这是一个从 HTML 和 XML 文件中提取数据的库。它与您喜欢的解析器一起工作,提供导航、搜索和修改解析树的惯用方式。它通常为程序员节省数小时或数天的工作。
pexels
步骤 2:处理缺失数据
这是最难的一步,也可能是耗时最长的一步,除非你幸运地拥有一个完整的数据集,但这种情况很少发生。以错误的方式处理丢失的数据会导致灾难。
一般来说,有许多解决方案,例如:
- 空值替换
- 众数/中值/平均值替换
- 删除整个记录
- 基于模型的插补—回归、k 近邻等
- 插值\外推
- 正向填充\反向填充—热甲板
- 多重插补
但你必须聪明。
例如,你在一家旅行社工作,你一直在收集关于旅行者的数据,出于某种原因,你的数据集中大约有 5%的人没有旅行者的国籍。用空值填充那些丢失的值是一个可怕的错误。因为一个人的国籍很大程度上影响着他们旅行时必须办理的旅行证件手续。在这种情况下,国籍是一个敏感的领域。你最好删除整个记录。
另一方面,年龄可以安全地用平均值代替。在这种情况下没那么敏感。
步骤 3:通过特征提取进一步获取数据
特征提取可以成为你的一个转折点。这是数据集的独特之处。通过在特征之间建立联系来获得洞察力是一件杰出的创造性的事情。
例如,你仍然在旅行社漫不经心地工作,他们要求你创建一个模型,使用聚类对你的客户进行优先排序。
数据集中有 3 个要素:
- 票务请求日期:个人请求其票务的日期。
- 出发日期:一个人想要旅行的日期。
- 退货日期:退货日期。
您知道您不能为您的模型提供非数字数据,但是,您仍然希望包含它们。
数据科学家在你可以观察到的一些洞见: 1) 停留时长:出发日与返回日之差。那是他们停留的时间。
2) 请求持续时间:到达日期与请求日期的差值。好的,很好。
使请求持续时间越来越远。3 名旅行者,每年分别申请 3 天、3 周&。显然,3 天的家伙是最紧迫的,所以他们是我们目前的首要任务。
然而,将这一概念(出发日期的接近程度)应用于其他两个可能是错误的。你上次提前一年订机票是什么时候?此人可能是每年随旅行社出差的常客。那也会让他成为优先考虑的对象。也许是时候送他们一些免费公里了。
第四步:决定哪些关键因素是重要的
现在,这个很棘手。本来这应该是模特的工作。你可以简单地转储你拥有的整个数据集,让人工智能变得聪明。人工智能能够决定哪些功能真正影响输出,哪些不会。不利的一面是,你给你的模型的数据越多,你就要花费金钱(计算机能力)和时间。两者并不总是可用的。因此,给你的程序一点帮助并不总是一个坏主意。如果你确定某个特性与输出完全无关,你应该完全忽略它。
步骤 5:将数据分成训练集和测试集
分割数据的著名规则是 80–20%的训练集和测试集。有时,测试集的那 20%应该以一种不仅仅是随机从数据集中删除的方式来设计。例如,你在旅行社工作,他们希望你开发一个程序来检测一个人今年是否会订票。
所以你继续收集旅行社成立以来所有旅行者的数据,处理你的数据。现在是分割数据集的时候了。您会有这样的感觉,您想要以一种跨越所有年份的方式来削减测试集。这真的很聪明吗?如果你想预测一个人是否会在 2019 年旅行,为什么要关心他(或类似的人)是否在 2008 年旅行?自那以后,发生了许多全球性的变化。也许他们来自的国家和你的国家有问题,也许在他的国家不太顺利。在这种情况下,一个聪明的做法是把测试集设计成只在最近几年。
你的训练集可能包含多年来的所有数据,原因越多越开心。但是根据年份给权重是个明智的想法。来自 2008 年的客户记录应该比来自 2018 年的记录具有更轻的权重。
在大多数情况下,设计测试集使其跨越许多年是一个很好的建议。但不是在所有情况下。
交叉验证是一个重要的程序,用于评估模型对新数据的技能。例如:K-fold,将训练集分成 K 个组。对于每个组,您将该组作为小型测试集,在其他组上训练和调整您的模型,并在该小型测试集上评估您的模型,保留评估分数并丢弃模型,然后继续下一组。
底线是,为了最大限度地利用您的数据,您必须从整体上更深入地研究 it &。不仅仅是运用你学到的技巧&策略,而是这些策略是否适合你的情况。
我从谷歌新的 ML-Powered Recorder 应用程序中学到的 5 件事
原文:https://towardsdatascience.com/5-things-i-learned-from-googles-new-ml-powered-recorder-app-6c9616a05b78?source=collection_archive---------13-----------------------
以及未来支持 ML 的应用应该是什么样子
app store 中有大量的录音应用,但是你知道如果谷歌开发出一个全新的应用,事情会有所不同。谷歌最近发布了一款新的“录音机”应用,该应用由最先进的机器学习算法驱动,可以以令人印象深刻的精度实时转录听到的内容。这不是谷歌第一次试图用一些人工智能“超级能力”来保佑其产品。他们之前的一些尝试失败了(我在跟你说话谷歌剪辑!)有些取得了巨大的成功,比如谷歌的 Pixel 手机摄像头应用。由于相机硬件规格略低于行业主流,谷歌的 Pixel 旗舰手机凭借其图像后处理的机器学习算法成功成为市场上最好的智能手机相机之一。“录音机”应用是谷歌利用人工智能增加竞争的又一次尝试,这次是在音频方面。
在深入研究应用程序可以做什么以及人工智能如何在其中发挥核心作用之后,我发现了一些关于谷歌如何处理应用程序、人工智能和用户体验的非常有趣的见解,这些见解可能会为人工智能时代的未来应用程序开发带来一些启示。
谷歌记录仪是什么?
你可以参考下面的 YouTube 视频短片,看看 Recorder 是做什么的。简而言之,你可以用它来做实时转录,通过关键字搜索录制的音频,自动生成标签或将音频分成不同的类别,如音乐,语音等。
我已经用了一个多星期了,发现它很有用,很光滑,用起来很愉快。录制音频并不是一项复杂的任务,但人工智能部分使它变得更加简单。我可以看到这个小应用程序为学生和定期参加会议的人带来了很大的变化。
#1 采用边缘优先的模型设计
Image from WishDesk
我们都听说过“移动优先设计”这个术语。当公司开发他们的应用程序时,他们将首先基于移动体验来设计和优化他们的应用程序,然后再到桌面或 web 等其他平台。我认为同样的想法也可以应用于人工智能驱动的应用程序设计,因此是“边缘优先设计”。
通常,基于机器学习的应用程序运行在云上,这是由于大多数最新 ML 模型的繁重计算需求。对于企业应用程序,这种方法很好,因为硬件几乎不是真正的问题。但如果一家公司想为消费者打造有影响力的基于人工智能的应用,那么基于云的系统通常不会满足它。从云中运行基于人工智能的应用程序不仅速度慢,而且存在严重的隐私问题。对于普通消费者来说,他们也习惯了现代移动应用程序提供的快捷性。如果你的应用无法达到他们习惯的高标准(多年来现代智能手机硬件/软件的发展推动了这种高标准),他们就不会在乎你的应用是否基于某些 SOTA 模式。因此,将人工智能放在“边缘”,例如用户的手机、平板电脑、智能家居设备,将是一种更好的成功方式。
Image from Lann
谷歌记录器应用程序在这方面做得很好。它使用了一种叫做“【RNN-T】的新型号,这种型号足够紧凑,可以放在手机上,同时又足够强大,可以进行实时转录。RNN-T 模型使用的不是传统的“流水线”方法,而是一种单一神经网络,端到端方法,这种方法在解决复杂问题时越来越受欢迎。直到最近,我们已经看到了许多通过使用越来越大的模型来提高预测性能的研究进展,然而相反的方向同样重要:使用尽可能紧凑的模型来实现类似的性能,以便模型可以被置于边缘。我预计,当机器学习在未来几年成熟时,这一领域会有更多的研究。
#2 使用不同的技术堆栈来提高性能
另一个有趣的发展是为 TensorFlow 引入了 Swift。由 Swift 编程语言的创造者克里斯·拉特纳创造。它通过 TensorFlow 使用开源的 Swift 语言,并承诺像 Python 一样的快速开发时间和像 C++一样的高级性能。 Fast.ai 上面有很棒的入门课程。随着 ML 越来越多地从研究实验室转向商业应用,ML 模型的性能将发挥更大的作用,而 Swift for TensorFlow 在这方面有着巨大的潜力。据 fast.ai 创始人杰瑞米·霍华德介绍:
[## 机器学习的新功能- WWDC 2019 -视频-苹果开发者
Core ML 3 已经得到了极大的扩展,可以在您的应用程序中实现更加惊人的设备上机器学习功能…
developer.apple.com](https://developer.apple.com/videos/play/wwdc2019/209/)
“Swift 可以与数字库供应商手动调整的汇编代码的性能相媲美。Swift for TensorFlow 是我所见过的第一次将可区分编程深入到一种广泛使用的语言的核心的认真努力,这种语言完全是为了性能而设计的"
#3 隐私问题
Photo by Matthew Henry on Unsplash
人工智能应用最大的担忧之一是隐私。要让人工智能真正展现价值,它必须了解用户的很多信息,通常是人们不愿意分享的个人生活细节。以音频录制为例,您可能希望录制讨论下一个圣诞节计划的家庭会议,但不希望它被传输到云上,让 10 家圣诞旅行社打电话给你推销他们的产品。这给了“离线”ML 应用一个优势。由于该模型部署在本地边缘,不需要将数据传输到云中,因此用户可以放心,他们的隐私可以得到保护。Recorder 应用程序在设备上运行所有模型,让人们不那么不愿意采用它。
#4 用户体验设计仍是关键
录音机应用程序有一个非常光滑优雅的用户界面。这是一个简单的应用程序,杂波最少。您可以轻松地开始/暂停录制,在“音频”或“文字记录”模式之间切换以检查您录制的内容,并从录制的内容中获取标签建议。所有的工作都没有摩擦。
在录制过程中,该应用程序会自动将音频分类为“语音”、“音乐”、“口哨声”等。并相应地对它们进行颜色编码。
当回放您录制的音频时,您可以看到每个单词在转录模式下被高亮显示,并且您可以使用您想要的关键字搜索转录。非常直观。
我想说的是:用户体验设计将成就或打破一个伟大的 AI 模型。只有当与应用程序的其他部分无缝合作时,人工智能功能才能向最终用户提供其价值。一个能够高性能解决用户痛点的模型只是一个开始,而不是结束。艾应该在幕后默默服务,而不是走上舞台中央。
#5 响应是有代价的
在移动世界中,公司努力提供更快的响应速度。现在的消费者非常不耐烦,他们最不希望的就是等待。爽快的体验意味着用户可以专注于他们想要的内容或手头的任务。但是在移动设备上实现响应并不容易。与桌面或云相比,计算能力、屏幕尺寸、系统资源都非常有限。为了实现最佳响应,需要在应用程序的设计和开发中投入更多的思考和研究。这包括更好地利用 CPU/GPU、内存优化、为实施选择快速编程语言以及减少对后端服务器的依赖。过去几年,机器学习行业在研究方面取得了很大进展,但要对人们的日常生活产生更多影响,还需要在工程方面进行更多投资和工作。从研究转向工程是新技术成熟的标志。
开发 AI 应用的正确方法?
Image from Overwatch
多年来,人们一直幻想可怕的人工智能会接管人类。电影,小说,电视节目都为人类描绘了一个非常戏剧性的人工智能未来。来反击这种大众(有偏见?)对 AI 的印象,需要特别谨慎。采取“人工智能作为帮助人类的工具而存在”的心态,而不是“人工智能对抗人类”的心态,是有益的。人工智能可以做很多事情,但与其开发可以“取代”人类的人工智能应用,不如让人工智能帮助人类更容易、更快地完成任务。比如帮助记笔记的 Recorder 应用程序,帮助医生更好地诊断的图像识别系统,帮助人们更好地在附近导航的增强现实应用程序等。
与科幻电影中的机器人杀人机器相比,一个安静、友好、强大的人工智能在幕后勤奋地工作,帮助人们做他们做得更好的任何事情,这对人们来说都更加舒适和平易近人。
觉得这篇文章有用?在 Medium 上关注我(李立伟)或者你可以在 Twitter @lymenlee 或者我的博客网站【wayofnumbers.com】T4 上找到我。你也可以看看我下面最受欢迎的文章!
[## “这是 CS50”:开始数据科学教育的愉快方式
为什么 CS50 特别适合巩固你的软件工程基础
towardsdatascience.com](/this-is-cs50-a-pleasant-way-to-kick-off-your-data-science-education-d6075a6e761a) [## 一枚硬币的两面:杰瑞米·霍华德的 fast.ai vs 吴恩达的 deeplearning.ai
如何不通过同时参加 fast.ai 和 deeplearning.ai 课程来“过度适应”你的人工智能学习
towardsdatascience.com](/two-sides-of-the-same-coin-fast-ai-vs-deeplearning-ai-b67e9ec32133) [## 你需要了解网飞的“朱庇特黑仔”:冰穴📖
是时候让 Jupyter 笔记本有个有价值的竞争对手了
towardsdatascience.com](/what-you-need-to-know-about-netflixs-jupyter-killer-polynote-dbe7106145f5)
您的数据策略中需要的 5 样东西
原文:https://towardsdatascience.com/5-things-you-need-in-your-data-strategy-99a019e33904?source=collection_archive---------47-----------------------
Photo by Franki Chamaki on Unsplash
如果您希望实现数据化、启动数据驱动的转型计划或利用数据发展您的组织,数据战略是您组织的基本必备要素。在这篇文章中,我将讨论构建成功的数据策略所需的一些核心组件。
人
在推动组织变得支持数据时,我们常常忽略了人。如果您的团队和更广泛的组织中没有合适的人,您将很难实现现有技术和工具的优势。你需要一个数据团队;由工程师、数据仓库开发人员、数据分析师和数据科学家组成的多技能团队。
但是你也需要数据团队之外的人来理解数据;它意味着什么,它如何增加价值并促进数据驱动的决策。我们经常称之为数据素养。任何加入该组织的人都应该具备一定的数据素养。您不应忽视现有员工,并帮助他们培养数据素养。
技术
这个我就不多说了。有大量的工具和技术,每一种都适合不同的组织和他们的需求。你需要投资技术和正确的技术。不要只考虑你目前的需求,想想你在 5 年或 10 年后需要什么。到那时,您的数据堆栈还适用吗?你最不想做的事情就是制作另一份预算提案,因为你的技术无法应对业务需求的变化。
未来
数据战略应该是一个活的文档,它需要根据组织的业务战略而变化。但是,预测或预报你认为你的组织对数据的使用可能会如何变化是有益的。数据策略支持业务策略,但是,它也会影响业务策略。
此外,想想你还需要什么。如果您的数据策略以交付数据仓库和商业智能功能为中心,在某些时候您将需要数据分析师和分析工具。之后,你将需要数据科学家和机器学习技术。这一切都是为了分享您对数据将如何创造价值的愿景。以及你需要什么来促进价值创造。
文化
人们需要以不同的方式思考数据,才能实现数据化。从向系统输入数据的人,到设计系统的软件开发人员,再到将数据作为信息使用的管理者。
我们经常使用数据治理来涵盖这一点,但是,人们更多地关注流程和程序,而不是教育人们为什么数据质量很重要。我们对数据治理的刻板印象是枯燥且由 IT 团队驱动。您可以通过在您的数据文化中包装这一点来增加采用的可能性。
数据科学、人工智能或机器学习
数据科学、人工智能和人工智能都提供了可观的投资回报。对于其他数据领域,这样做可能要困难得多。一旦你有了基本的东西,你就可以证明数据是一个收入来源,而不是一个成本中心。重要的是,你不能直接跳到这一点上,或者忽略你策略的其他组成部分,不管它有多诱人。没有这些,你的数据科学、AI 或者 ML 项目都会失败。
一个数据策略应该是你的组织所独有的——但是我相信这 5 个核心要素是成功的策略和实施的关键。
进入数据科学领域之前你应该知道的 5 件事
原文:https://towardsdatascience.com/5-things-you-should-know-before-getting-into-data-science-f4312f06ea73?source=collection_archive---------6-----------------------
数据科学家日常生活的幕后
数据科学家的工作越来越性感——安德鲁·弗劳尔斯
随着数据的快速发展,越来越多的公司希望深入了解他们的客户或竞争对手。根据 Indeed 一月份的报告,自 2013 年以来,对数据科学家的需求逐年增长 29% ,增长 344% 。
公司一直在寻找能够解决业务问题的数据科学家。这些任务可以是节省运营成本,从数据中挖掘有价值的见解,改善客户使用应用程序或网站时的体验等。
由于数据科学家的工作越来越受欢迎,你是否希望进入数据科学领域?在你考虑转行或进入数据科学领域之前,我希望你能读完这篇文章。因此,你会知道你是否喜欢或适合你。
1.独立
你需要独立。这并不是说你不能向你的同事寻求帮助,但是大多数时候,你需要自己解决。你将整天面对各种各样的问题。
例如,你写了一个程序,它运行了很长时间。但是,程序突然停止运行。或者也许你当前的生产机器学习模型突然表现不佳。你需要找出原因并自己解决。
此外,当你阅读学术论文时,你不理解作者试图告诉你的概念,或者难以用代码实现作者的想法。你仍然可以选择咨询你的同事,但他们可能没有那么多时间向你解释。他们可以提供一些样品供参考,但是你还是要自己解决。
2.享受编码
这一点非常重要。也许你可以写代码,但是你不希望整天对着屏幕写代码。那么,数据科学可能不太适合你。你将花大部分时间盯着代码,要么是修复 bug,要么是编码。
比方说,你目前正在从事一项商业智能。你的日常工作是满足业务需求或要求。您有多种业务和技术需求。这里的技术要求意味着你必须编写代码来完成任务。因此,如果你发现当你对技术任务感到厌烦时,你总是把你的任务切换到商业任务,你应该三思而后行。
如果你想在编码中享受更多,开始一些你觉得非常有趣的项目。确保你需要保持动力来完成这个项目。一个程序无非就是一个工具,不要为了学习而学习,学习它是为了创造价值。
3.挑战性环境
技术是不断变化的。将会有新的机器学习模型频繁发布,或者出现新的编程语言。为了跟上技术的发展,你需要不断学习。
而且数据科学系大家都很有天赋。他们至少有一项非常强的技能,可能是可视化、建模、网络爬行、通信、软件工程、调试等。因此,准备适应紧张而又令人兴奋的环境。
挑战同时也很有趣。你将能够在短时间内学到很多东西。如果你是一个拥抱挑战的人,你会在数据科学系找到很多乐趣。
4.需要更长时间才能看到结果
你不能指望每天都能找到极大的满足感。成为一名数据科学家很像成为一名研究科学家。总是尝试不同的方法,看看哪些方法有效。
你将花一整天的时间浏览和理解你的数据。然后,您将能够获得模型良好运行的重要特征。之后,您可以尝试不同的方法或模型来提高模型的性能。它可能看起来只是由几个步骤组成,但这实际上需要相当长的时间。
耐心并坚持工作将是你工作取得成果的关键。
5.用通俗的语言解释复杂的概念
无论你在从事什么工作,沟通都是一项基本技能。在开始项目之前,您需要与产品团队、运营团队等沟通,就项目细节达成一致。
在关于服务应该是什么样子的来回讨论之后,假设您已经用您的复杂模型实现了结果。现在,你必须用高层次的术语来解释,这样他们才会对你的服务有一些想法或信心。
此外,当数据预测错误时,您将需要以非常高级的方式进行解释。例如,您正在与产品团队合作,训练一个模型,该模型能够将列表的评论分类为良好、中立或糟糕的评论。
一天,一个产品团队成员问为什么要做这样的评论:“你能告诉我这个包的质量好吗?”被归类为正面新闻?这篇评论应该被归类为中立。一个可能的解释是,模型将“好”这个词视为一个积极的特征。
最后的想法
希望你在考虑是否转行到数据科学领域的时候会觉得有用。
尽管根据《哈佛商业评论》的报道,数据科学家是 21 世纪最性感的工作,但在你考虑转行从事数据科学之前,请慎重考虑。
如果你热爱你的工作,如果你喜欢它,你已经是一个成功的人了。杰克·坎菲尔德
感谢您阅读到最后,并在下面评论您有兴趣讨论的话题!下周请继续关注我的帖子!
如果你对获得伟大的代理感兴趣,请随时查看这项服务!
关于作者
低伟鸿是 Shopee 的数据科学家。他的经验更多地涉及抓取网站,创建数据管道,以及实施机器学习模型来解决业务问题。
他提供爬行服务,可以为你提供你需要的准确和干净的数据。你可以访问这个网站查看他的作品集,也可以联系他获取抓取服务。
你可以在 LinkedIn 和 Medium 上和他联系。
2020 年获得第一份数据科学工作的 5 个技巧
原文:https://towardsdatascience.com/5-tips-for-getting-your-first-data-science-job-in-2020-8e1c2484e7df?source=collection_archive---------16-----------------------
Source: Merry Christmas and Happy New Year
或者说,如何获得第一份数据科学工作?
我的许多追随者问我——在数据科学领域找到一份工作有多难?或者说他们应该学什么?或者他们应该走什么道路?
现在,答案并不是每个人都喜欢的——进入数据科学相当困难,你必须努力工作。
我的意思是你要投入时间学习数据科学,了解 算法 ,随着市场的进步提升自己的技能,跟踪旧的常规技能,当然,在此期间还要找工作,准备 面试 。
您还必须了解业务问题,并培养将业务问题作为数据科学问题的敏锐度。记住,没有固定的算法。
这对一些人来说很费力,但对另一些人来说几乎不可能。
告诉你关于我自己,如果我不学习新的东西,我会很快厌倦。我喜欢数据科学,因为它给了我机会。
所以首先我想问你是那样的吗?
如果你是,而且你几乎每天都对解决新问题感兴趣,那么你会喜欢将数据科学作为你职业生涯的一个领域。
这里有一些给你们勇敢者的建议。
1.从小处着手
Small Robo Steps
朝着正确的方向迈出许多小步,总比大步向前却跌跌撞撞地后退要好——中国有句古老的谚语
现在,就开始数据科学的职业生涯而言,上述情况非常符合。如果你来自不同的领域(不要读计算机科学、统计学),或者如果你想横向转换,就更是如此。
我建议不要把目标对准亚马逊、谷歌等大公司。 这不是劝阻你;它更符合实际的想法。我观察了他们的面试过程,我可以向你保证,没有一些经验就能得到这些工作,即使不是不可能,也是非常罕见的。
但是,让我也告诉你,我们并不缺少机会。如果你了解自己的东西,你可以很容易地进入一家新公司。我就是这样开始的。
2.不断学习
我的目标是在 2013 年左右进入数据科学领域。从那以后,我经历了很多失败,付出了很多努力才换了工作。如果你感兴趣,这是我的故事。
在大学里,我花了很多时间玩游戏。从 2013 年起,我利用一切可能的时间学习新技术和数据科学。
除非你去做,否则什么都不会起作用——玛娅·安杰洛
这是我学习数据科学的方式,任何有抱负的人都可以选择成为一名自学成才的数据科学家。
[## 我是怎么学数据科学的?
自学、MOOCs 和努力
towardsdatascience.com](/how-did-i-learn-data-science-d5f7fc477997)
我希望你看到长长的名单后不要失去希望。我已经告诉过你这不容易。
你必须从一两门课程开始。其余的将随着时间的推移。只要记住时间是你能负担得起的奢侈品。
3.创建您的投资组合
A decorated veteran?
掌握理论是极好的,但是如果你不会写代码,你真的不能增加作为数据科学家的价值。
所以要努力创造东西。尝试新的玩具项目。去 kaggle 找灵感。参与论坛。但是不要止步于此。
创造性地思考。建立您的 GitHub 档案。尝试解决不同的问题。
例如,在开始阶段,我使用 d3.js 创建了一个简单的图形可视化来发现 DataScience Subreddit 中有趣的帖子,并使用 Flask 和 Heroku 部署了。除了解决通常的数据科学问题,我还创建了一个 21 点模拟器。我还使用 MCMC 实现了一个代码破解解决方案。
我也参加了各种各样的比赛,虽然我没有什么好成绩,但是我最终学到了很多。
4.博客?
这是源于我个人的偏见。
当你写博客时,你最终创造了高质量的内容供他人学习,记录你的学习,通过解释更好地理解概念,也许会获得一些额外的认可。你还想要什么?
老实说,我喜欢写作,这不是成为数据科学家的纯粹要求,但它有很大帮助。我注意到,当我解释数据科学概念时,我理解得更好了。博客是一个完美的工具。
此外,数据科学非常庞大,我很容易忘记以前学过的东西。博客也解决了这个问题。那是在 2013 年,我开始了我的博客,并试图用我所学到的任何东西更新它。因此,我最终记录了一切。每当我遇到问题时,我仍然会查阅我的博客。
我觉得写博客也有助于我的沟通技巧,因为它迫使我用简单的语言解释困难的概念。
反正如果你不喜欢写博客,做笔记也能达到类似的效果。
如我所说,写博客是个人喜好。如果你感兴趣,想知道我是如何开始在 medium 上写作的,这是我的故事。
[## 到目前为止,我在媒体上的数据科学博客之旅
以及我是如何获得大量浏览量的?
towardsdatascience.com](/my-technical-blogging-journey-on-medium-till-now-38aa9b9804b6)
5.不要太挑剔
The paths will eventually converge
你收到了一家分析公司的邀请,你在想,如果加入这家公司,你是不是就要告别数据科学了。
这是一个相当好的处境。虽然找一份数据科学的工作相对来说比较难,但在分析公司找一份业务分析师或数据分析师的工作可能更容易。
我建议从事任何与分析、报告或数据相关的工作。当数据科学的机会出现时,我以与我开始从事分析工作相同的方式开始并转换了轨道。
靠近数据本身会不可避免地给你带来这样的机会。把你的第一份工作当作敲门砖。
一旦你得到这样一份工作,你将有两种选择:
- 通过建立良好的关系和表现出兴趣,在同一家公司的数据科学团队中进行内部转变,或者
- 业余时间继续学习,不断给面试。
假以时日,你会成功的。我祝你好运。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 媒体 关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。
2020 年企业人工智能发展的 5 大趋势
原文:https://towardsdatascience.com/5-trends-in-corporate-ai-development-for-2020-4a03a0d84ed8?source=collection_archive---------19-----------------------
近年来,人工智能和机器学习的迅速崛起在很大程度上可以归因于这些技术的巨大商业潜力。谷歌、IBM、亚马逊、脸书和其他科技巨头引领创新,而企业则在新工具、分析和研究方面投入巨资。
这种支出对人工智能发展的趋势有着深远的影响,在许多方面塑造和引导着创新的进程。以下是预计将在 2020 年大放异彩的五大趋势。
1.深度学习,小数据
新的商业人工智能和人工智能项目的主要障碍之一是用于训练模型的高质量数据的数量。一定要大,越大越好。问题是,除非你的公司是谷歌、脸书或亚马逊之类的公司,否则在这方面你通常运气不好。这就是为什么获取、生成或解决机器和深度学习所需的大量数据点的问题预计将成为 2020 年企业人工智能发展的前沿。
与此同时,IBM 和其他人工智能领导者正在寻求从根本上彻底改变机器学习的工作方式。最终目标是创建需要较少数据进行训练的可行模型。在商业环境中,这是一个提高生产率和速度的问题,机器学习在更多的用例中变得更加负担得起和可行。Iflexion 的人工智能开发人员与其他行业专家一起预测,在不久的将来,小型数据集将取代大型数据集,推动商业人工智能的发展。
小数据集上的训练模型也将使人工智能更接近与人类认知能力相当的计算机感知水平。一般来说,在最少的接触后,匹配并超越人类对事物和想法进行概念化和分类的能力是机器学习的基石之一,也是人工智能尚未掌握的。
2.机器人,你会推理吗?
当提供足够的数据时,人工智能技术在其当前状态下确实执行任务的感知和分类类型。然而,当涉及到下一个认知前沿——推理——时,这一进展仍有待实现。
推理与解决需要常识的问题紧密相连。推理也意味着即兴创作和适应微小的变化,“凭直觉”快速感知事物,并不断进化。由于人工智能系统目前的训练方式(见上文),直觉推理对它们来说尤其困难。然而,业务对这种能力的需求(尤其是在提供服务和技术支持时)只会不断增长。
解决人工智能推理的问题是一项多方向的任务,包括提供常识知识、情景(基于案例的)优化和规划能力。这是商业人工智能令人垂涎的成就,可以产生巨大的影响:从人工智能客户服务和物流自动化到内部运营和预测。
3.仍然是数据科学家的黄金时代
现在,人工智能和人工智能的商业潜力在于吸引人的工具,能够通过自动化和策略以数学方式重新评估和解决现有的商业问题。这创造了“数据科学家的黄金时代”,商业领域,尤其是营销、销售、金融服务和医疗保健领域,非常需要有技能、有经验的专业人员。随着人工智能的广泛传播,以及由于竞争和客户需求的增加,越来越多的流程被自动化,这种需求预计只会增长。
与此同时,目前缺乏有经验的数据科学家也是大规模人工智能企业集成道路上需要克服的主要问题之一。去年,O'Reilly 将人工智能技能差距称为大规模企业人工智能的头号障碍,并指出这个问题在不久的将来只会变得更加紧迫。
4.盒子里有什么?!
黑盒机器学习的问题在于算法本身的复杂和晦涩。对于深度学习,通常无法解释数据是如何以及为什么被使用和评估的(因此出现了“黑箱”)。这引发了对可解释人工智能的需求,这是新的企业人工智能系统的另一个预期趋势。
人工智能透明度是一种自然趋势,同时也是一种要求,至少在某些地区是如此。数据安全法律的兴起在企业如何看待和操作数据方面发挥了重要作用。GDPR 和其他相对较新的数据隐私、安全和管理法规是政府对企业收集和使用客户数据的大规模增长的回应。
合规性法规和其他立法行为通过加强安全性、道德、可解释性和可解释性来重塑企业 AI 发展的未来。他们需要新的方法来处理(消除)匿名和释放数据。这反过来又使得用于商业目的的“白盒”机器学习的出现成为必要。
5.伦理人工智能、偏见和多样性
关于人工智能在生活各个领域的快速整合,一个主要问题是它可能存在偏见。当谈到人工智能在银行、刑事司法、医疗保健和招聘中用于“人类评估”时,道德问题尤其普遍。
前面提到的无法访问和评估黑盒 ML 模型算法的确切过程使问题进一步复杂化。
人工智能偏差可能有多种原因,例如:
●源数据缺失或不完整
●“继承”自遗留系统的偏见
●历史数据缺乏多样性或先例
由于这个问题是目前的焦点,人工智能开发人员的许多努力和注意力将被导向检测和减轻数据偏差。希望这将导致透明的方式来确保人工智能系统的公平性和多样性。
企业人工智能的现在和未来
一些公司仍然认为人工智能和大数据要么太吓人,要么太花哨,这就是为什么没有多少公司尝试过聊天机器人助手之外的任何东西。然而,这种情况正在改变。
随着运营的进一步自动化,2020 年不可否认的优先事项将是解决经验丰富的人工智能专业人员(作为企业人工智能战略的监督者和推动者)相对缺乏的问题,以及管理数据质量和所有权的问题。在商业中有效地大规模采用人工智能的道路上,算法偏差和不透明的问题也需要得到解决。
5 种偏见&如何在你的机器学习项目中消除它们
原文:https://towardsdatascience.com/5-types-of-bias-how-to-eliminate-them-in-your-machine-learning-project-75959af9d3a0?source=collection_archive---------5-----------------------
现实世界中的数据科学
样本,排除,观察者,偏见,测量偏差。每一个的介绍和例子!
Photo by rawpixel.com from Pexels
以下是发生在现实生活中的关于有偏见的机器学习程序的毁灭性事实。可以肯定地说,以下是种族主义仍然存在的原因的一个例子。我想以此开始,向你展示在你的人工智能程序中修正任何偏见是多么重要。
康巴丝
由一家名为 Equivant(前身为 Northpointe)的私人公司开发。 Compas 是一种预测被告犯罪可能性的机器学习算法,已经证明它对谁更有可能再次犯罪做出了有偏见的预测。来自 ProPublica 的研究发现,该工具错误地将黑人被告称为重新犯罪高风险的可能性是 2 倍,错误地预测白人被告重新犯罪低风险的可能性也是 2 倍。
在这里 找到 ProPublica 的完整分析。
美国超过 12 个州的法官使用 Compas,它被用作许多事情的工具,如确定监狱中的人是否应该在审判前保释,对囚犯的监督类型,以及对人们刑期的影响。
这种算法的后果非常真实。
Photo by rawpixel.com from Pexels
当然,我们不能说这是故意的。建造 Compas 的工程师不太可能在系统中加入偏见,而更有可能的是 Compas 是在一个没有暴露于包括肤色在内的不同面部的数据集上训练的。
假设并应用其创造者或其数据的偏见的编程是有偏见的编程。更危险的是,人们发现很多这种“偏见”是无意识的,因为你不一定知道当你制作算法时,它会产生不正确的结果。许多算法也是一个黑盒,你只是使用现成的,这意味着如果你不直接开发算法,你不知道里面有什么,你肯定无法评估它们是否无偏。
史前古器物
工件是由数据收集过程中的缺陷引起的人为模式。
数据分析尽量区分事实和工件。
5 种常见的偏见
单样本偏差
当收集的数据不能准确代表程序预期运行的环境时发生。
没有一种算法可以在整个数据宇宙上训练,而不是在一个精心选择的子集上训练。
选择这个足够大和足够有代表性的子集来减轻样本偏差是有科学依据的。
示例:安全摄像机如果您的目标是创建一个可以在白天和夜间操作安全摄像机的模型,但只对夜间数据进行训练。你在模型中引入了样本偏差。
样本偏差可以通过 减少或消除
- 在白天和晚上训练你的模型。
- 涵盖了所有你期望你的模型会遇到的情况。这可以通过检查每个特性的域来完成,并确保我们拥有覆盖所有特性的平衡均匀分布的数据。否则,您将面临错误的结果,并且会产生没有意义的输出。
2-排除偏差
通常在清理数据的保护伞下,从我们的数据集中排除一些特征而发生。 我们删除了一些特征,认为它们与我们基于已有信念的标签/输出无关。
举例:泰坦尼克号生存预测 在著名的泰坦尼克号问题中我们预测谁幸存了谁没了。人们可能会忽略旅行者的乘客 id,因为他们可能认为这与他们是否幸存完全无关。他们不知道泰坦尼克号上的乘客是根据他们的身份证被分配房间的。身份证号码越小,他们被分配的房间离救生艇越近,这使得那些人能够比那些在泰坦尼克号中心深处的人更快地到达救生艇。因此,随着 id 的增加,存活率降低。
id 影响标签的假设并不是基于实际的数据集,我只是公式化的举个例子。
排除偏倚可以通过 来减少或消除
- 通过对特征进行充分的分析,在丢弃特征之前进行调查。
- 请一位同事调查你正在考虑放弃的特征,一双全新的眼睛肯定会有所帮助。
- 如果时间/资源不足,需要通过丢弃要素来缩减数据集的大小。在删除任何内容之前,请确保搜索该功能与您的标签之间的关系。最有可能的是,你会找到相似的解决方案,调查它们是否考虑了相似的特性,然后做出决定。
- 比这更好,因为人类容易受到偏见的影响。有工具可以帮助。看看这篇文章(通过一个随机森林的例子解释特征重要性),包含了计算特征重要性的各种方法。包含不需要大量计算资源的方法的方法。
3-观察者偏差(又名实验者偏差)
倾向于看到我们期望看到的,或者我们想看到的。研究者在研究某个群体时,通常是带着对被研究群体的先验知识和主观感受来进行实验的。换句话说,他们带着有意识或无意识的偏见来到谈判桌前。
举例:智力受地位影响吗?——伯特事件 观察者偏见的一个著名例子是心理学家西里尔·伯特的工作,他以研究智商的遗传性而闻名。他认为,与社会经济地位较高的儿童相比,社会经济地位较低的家庭的儿童(即工人阶级的儿童)也更有可能智力较低。他所谓的科学的智力测试方法是革命性的,据说证明了工人阶级的孩子普遍不太聪明。这导致了 20 世纪 60 年代英国双重教育体系的产生,中产阶级和上层阶级的孩子被送到精英学校,而工人阶级的孩子被送到不太理想的学校。当然,伯特的研究后来被揭穿,结论是他伪造了数据。现在人们公认智力是遗传的而不是遗传的。
观察者偏差可以通过 来减少或消除
- 确保观察者(进行实验的人)训练有素。
- 筛选潜在偏见的观察者。
- 有明确的实验规则和程序。
- 确保行为被清楚地定义。
Source: Pixabay
4-偏见
文化影响或刻板印象的结果。当我们在现实中不喜欢的东西,如根据外表判断,社会阶级,地位,性别等等,在我们的机器学习模型中不固定时。当这个模型应用现实生活中由于偏见数据而存在的相同的刻板印象时,它就被灌输了。
举例:检测工作中的人的计算机视觉程序如果你的目标是检测工作中的人。你的模型已经输入了成千上万的训练数据,男人在编码,女人在做饭。算法很可能学习到编码员是男的,女的是厨师。这是错误的,因为女人可以编码,男人可以做饭。
这里的问题是,数据有意无意地反映了刻板印象。
偏见偏见可以通过 来减少或消除
- 忽略了性别和职业之间的统计关系。
- 将算法暴露给更公平的样本分布。
5-测量偏差
当用于观察或测量的设备出现问题时,会发生系统值失真。这种偏差往往会使数据向某一特定方向倾斜。
示例:用增加亮度的相机拍摄图像数据。 这个乱七八糟的测量工具没能复制出模型将要运行的环境,换句话说,它把它的训练数据搞得乱七八糟,以至于它不再代表它启动时将要处理的真实数据。
这种偏差不是简单的通过收集更多的数据就能避免的。
测量偏差可以通过 减少或消除
- 具有多个测量装置。
- 雇佣受过训练的人来比较这些设备的输出。
在产品开发周期中增加偏差测试
1- FairML
预测建模偏差诊断工具箱。它审核它们并确定输入的重要性
查看更多
2-石灰
这里的是一个很棒的介绍
扰乱输入,看看预测如何变化。这在解释能力方面证明是有益的,因为我们可以通过改变对人类有意义的组件(例如,单词或图像的一部分)来干扰输入,即使模型使用更复杂的组件作为特征(例如,单词嵌入)。
寻找黑客马拉松的 5 个有用渠道
原文:https://towardsdatascience.com/5-useful-channels-to-find-hackathons-1a0aa9928e91?source=collection_archive---------42-----------------------
帮助你找到黑客马拉松的快速指南
在我开始分享我的黑客马拉松经历后,我收到了很多来自我的同伴的关于如何找到黑客马拉松的问题。他们想知道我怎么能参加这么多黑客马拉松。在这篇文章中,我将列出一些我搜索黑客马拉松的常见站点。
Photo by cyda
如果你是黑客马拉松的新手,请随意查看我的黑客马拉松系列,先了解更多关于黑客马拉松的信息。
[## 欢迎来到黑客马拉松的世界
学生应该加入黑客马拉松的 5 个理由
medium.com](https://medium.com/series/welcome-to-the-world-of-hackathon-81d194abbec4)
1。eventbrite
许多组织在 eventbrite 上发布他们的活动,因为它有一个开发良好的内置售票系统。你可以在这个网站上找到包括黑客马拉松在内的许多活动。你也可以根据地点和日期进行搜索。这是一个非常方便用户的网站。一旦您创建了您的帐户,系统将存储基本信息,这将有助于您在将来完成注册表的一些空白。如果某项活动的名额有限,此功能可以为您节省一些时间来获得该活动的座位。
【https://www.eventbrite.com/ 号
2。HACKATHON.COM
这个站点,通过查看域名,你可以知道这是一个特定的站点,供你搜索 hackathon。hackathon 类似于 eventbrite,但它不要求组织者在其网站上发布活动信息,相反,后端管理员将从互联网上抓取数据,并在网站上以有组织的方式显示所有黑客马拉松活动信息。同样,这个网站允许你按城市搜索黑客马拉松。在每个显示的黑客马拉松中,该网站都包括一个到官方活动页面的直接链接,供您注册该活动。
https://www.hackathon.com/
3。广场化
这是一个在我的同学中非常受欢迎的搜索商业案例比赛的网站。除了案例竞赛,这个网站上还有一个特殊的类别是“在线黑客马拉松”。agorize 会不时与不同的公司合作举办黑客马拉松。所有的说明和问题陈述都将发布在 agorize 上,感兴趣的参与者需要组队并通过 agorize 提交他们的解决方案。除了合作伙伴的黑客马拉松,一些公司会把 agorize 作为发布黑客马拉松信息的分销渠道。因此,你也可以在网站上看到离线的黑客马拉松。如果你不确定线上和线下黑客马拉松的区别,请随意查看我的另一篇关于主要类型的黑客马拉松的文章。
https://www.agorize.com/en/online-hackathons
4。社交媒体网站:facebook / Twitter / LinkedIn
除了上述网站,黑客马拉松组织者还将通过社交媒体网站推广活动。类似于举办营销活动,组织者不希望他们的活动参与率低,所以他们也会设计许多推广材料发布在社交媒体网站上。如果你不想错过任何黑客马拉松的新闻,你可以关注#黑客马拉松或者加入一些为黑客马拉松爱好者设立的团体。
5。学校邮箱
这个频道只对那些还是学生的人开放。通常,在学校里,有一个单位负责课外活动。他们定期给学生发电子邮件,告知即将到来的内部和外部活动。这些活动通常针对学生参与者。如果你是一名学生,想体验一下什么是黑客马拉松,电子邮件列表上的那些黑客马拉松可能是你的一个很好的起点。由于所有的参赛者都是学生,与公共黑客马拉松相比,所选主题或问题的难度可能更适合学生。
提到的渠道是我搜索黑客马拉松的一些常用方法,我知道可能还有更多。如果你知道一些其他有用的网站来寻找黑客马拉松,请在下面随意评论。
如果你想了解更多关于黑客马拉松的信息,请继续关注我的黑客马拉松系列
如果你觉得我的文章有用,请在我的 linkedIn 页面上为我的技能背书,鼓励我写更多的文章。
最初发表于cydalytics.blogspot.com
科学家需要知道的 5 个有用的统计数据
原文:https://towardsdatascience.com/5-useful-statistics-data-scientists-need-to-know-5b4ac29a7da9?source=collection_archive---------9-----------------------
想获得灵感?快来加入我的 超级行情快讯 。😎
数据科学实际上可以定义为我们从数据中获取额外信息的过程。在做数据科学时,我们真正想做的是解释所有数据在真实世界中的实际意义而不是数字。
为了提取复杂数据集中的信息,数据科学家采用了许多工具和技术,包括数据探索、可视化和建模。在数据探索中经常使用的一类非常重要的数学技术是统计学。
从实际意义上来说,统计学允许我们对数据进行具体的数学概括。我们可以用统计学来描述它的一些属性,而不是试图描述每一个数据点。这通常足以让我们提取一些关于数据结构和组成的信息。
有时候,当人们听到“统计”这个词时,他们会想到一些过于复杂的东西。是的,这可能有点抽象,但是我们并不总是需要求助于复杂的理论来从统计技术中获得某种价值。
统计学中最基本的部分通常在数据科学中最有实际用途。
今天,我们将看看数据科学的 5 个有用的统计数据。这些将不会是疯狂的抽象概念,而是简单的,适用的技术,走了很长的路。
我们开始吧!
(1)集中趋势
数据集或特征变量的中心趋势是集合的中心或典型值。这个想法是,可能有一个单一的值可以最好地描述(在一定程度上)我们的数据集。
例如,假设您有一个以(100,100)的 x-y 位置为中心的正态分布。则点(100,100)是中心趋势,因为在所有可供选择的点中,它是提供数据的最佳汇总的点。
对于数据科学,我们可以使用集中趋势度量来快速简单地了解我们的数据集作为一个整体的样子。我们数据的“中心”可能是一条非常有价值的信息,它告诉我们数据集到底有多偏向,因为数据围绕的任何值本质上都是一种偏向。
有两种常用的方法来数学选择一个中心趋势。
平均
数据集的平均值是平均值,即整个数据围绕其展开的数字。定义平均值时,计算平均值时使用的所有值的权重相等。
例如,让我们计算以下 5 个数字的平均值:
(3 + 64 + 187 + 12 + 52) / 5 = 63.6
平均值对于计算实际的数学平均值非常有用。使用像 Numpy 这样的 Python 库进行计算也非常快
中位数
中位数是数据集的中间值,即如果我们从最小到最大(或从最大到最小)对数据进行排序,然后取集合中间的值:这就是中位数。
让我们再次计算同一组 5 个数字的中值:
[3,12, 52 ,64,187] → 52
中值与平均值 63.6 大相径庭。这两个都没有对错,但是我们可以根据自己的情况和目标选择一个。
计算中位数需要对数据进行排序,如果数据集很大,这是不切实际的。
另一方面,对于异常值,中值将比平均值更加稳健,因为如果存在一些非常高的异常值,平均值将会被拉向某个方向。
平均值和中值可以用简单的 numpy 一行程序计算:
*numpy.mean(array)
numpy.median(array)*
(2)传播
在统计学的保护伞下,数据的分布是数据被压缩到一个单一值或更大范围的程度。
看看下面的高斯概率分布图,假设这些是描述真实数据集的概率分布
蓝色曲线具有最小的扩散值,因为它的大多数数据点都落在一个相当窄的范围内。红色曲线具有最大的扩散值,因为大多数数据点占据了更宽的范围。
图例显示了这些曲线的标准偏差值,将在下一节中解释。
标准偏差
标准差是量化数据分布的最常见方式。计算它包括 5 个步骤:
1.求平均值。
2.对于每个数据点,求其到平均值的距离的平方。
3.对步骤 2 中的值求和。
4.除以数据点的数量。
5.求平方根。
Made with https://www.mathcha.io/editor
较大的值意味着我们的数据更加“分散”于平均值。较小的值意味着我们的数据更集中在平均值附近。
轻松计算 Numpy 中的标准差,如下所示:
*numpy.std(array)*
(3)百分位数
我们可以使用百分位进一步描述整个范围内每个数据点的位置。
百分位描述了数据点在数值范围中的准确位置,即它的位置是高还是低。
更正式地说,第 pth 百分位是数据集中可以分成两部分的值。下部包含数据的百分比,即 pth 百分位数。
例如,考虑下面的 11 个数字:
*1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21*
数字 15 是第 70 个百分位数,因为当我们在数字 15 处将数据集分成两部分时,剩余数据的 70%小于 15。
百分位数结合平均值和标准偏差可以让我们很好地了解特定点在数据分布/范围内的位置。如果它是一个异常值,那么它的百分位将接近末端——小于 5%或大于 95%。另一方面,如果百分位数被计算为接近 50,那么我们知道它接近我们的中心趋势。
数组的第 50 个百分位数可以用 Numpy 来计算,如下所示:
*numpy.percentile(array, 50)*
(4)偏斜度
数据的偏斜度衡量其不对称性。
偏斜度的正值意味着值集中在数据点中心的左侧;负偏度意味着值集中在数据点中心的右侧。
下图提供了一个很好的例子。
我们可以用下面的等式计算偏斜度:
Made with https://www.mathcha.io/editor
偏斜度将让我们了解我们的数据分布有多接近高斯分布。偏斜度越大,我们的数据集离高斯分布越远。
这很重要,因为如果我们对数据的分布有一个粗略的想法,我们就可以为特定的分布定制我们要训练的任何 ML 模型。此外,并不是所有的最大似然建模技术对非高斯数据都有效。
再一次,在我们开始建模之前,stats 给了我们深刻的信息!
下面是我们如何计算 Scipy 代码中的偏斜度:
*scipy.stats.skew(array)*
(5)协方差和相关性
协方差
两个特征变量的协方差衡量它们的“相关”程度。如果两个变量有正的协方差,那么当一个变量增加时,另一个也增加;对于负协方差,特征变量的值将在相反的方向上变化。
相互关系
相关性是简单的标准化(缩放)协方差,其中我们除以被分析的两个变量的标准偏差的乘积。这有效地迫使相关性的范围总是在-1.0 和 1.0 之间。
如果两个特征变量的相关性为 1.0,则变量具有完美的正相关性。这意味着,如果一个变量发生一定的变化,第二个变量也会按比例向相同的方向移动。
Illustration of PCA used for Dimensionality Reduction
小于 1 的正相关系数表示不完全正相关,相关强度随着数字接近 1 而增加。同样的想法适用于负的相关值,只是特征变量的值以相反的方向变化,而不是以相同的方向变化。
了解相关性对于像用于降维的主成分分析 (PCA)这样的技术非常有用。我们从计算相关矩阵开始——如果有两个或更多高度相关的变量,那么它们在解释我们的数据时实际上是多余的,其中一些可以被删除以降低复杂性。
喜欢学习?
在推特上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上和我联系吧!
人工智能和聊天机器人改变教育的 5 种方式
原文:https://towardsdatascience.com/5-ways-artificial-intelligence-and-chatbots-are-changing-education-9e7d9425421d?source=collection_archive---------19-----------------------
人工智能(AI)和聊天机器人正在以我们想象不到的更多方式改变世界。完成多样化的任务,人工智能和聊天机器人已经成为我们日常生活中的一个正常元素。该技术在包括教育和在线辅导在内的各种领域的发展中发挥了重要作用。
通过人工智能,教育工作者和教育机构已经能够为学生提供个性化的学习环境。人工智能驱动的工具不仅改善了学生的互动和协作,还在创新的教育技术世界中扮演了游戏改变者的角色。以下是人工智能和聊天机器人影响和改变教育的 5 种方式。
个性化学习
人工智能有助于根据每个学习者的兴趣优化学习的速度和教学方法。适应个人的学习速度,人工智能不断解决更复杂的任务,以加快学习过程。因此,两种学生/学习者——慢的和快的,都可以按照自己的节奏继续学习。
通过 AI,学生还可以在课堂外获得个性化的在线辅导。在任务开始时,当学生需要加强技能或掌握思想时,AI 会通过为学生提供获得成功所需的额外工具来拯救他们。
自动评分&绩效考核
有了人工智能,老师们在评分方面就有了他们需要的所有帮助。事实上,有了这项技术,分级员的角色就被传递了。目前的人工智能技术能够对多选题进行自动评分。然而,随着人工智能的进一步发展,预计该技术将能够比标准化评估更好地评分。
监考
人工智能变得重要的一个领域是在线监考空间。监考是通过防止考生通过监考人作弊来确保考试真实性的方法。人工智能技术目前正被用来加强这一虚拟领域。
随着远程学习而来的是远程考试。在这种考试中,降低学生作弊的风险变得至关重要。这就是人工智能驱动的保护系统来救援的时候了。
反馈会议
反馈在改善学生和教师的学习过程中起着重要的作用。学生的反馈让教师有机会发现教学工作中的差距并加以改进。另一方面,老师的反馈让学生知道他们需要在哪些方面付出额外的努力。教师可以通过作业、评估和测试轻松地与学生分享反馈。而教育机构使用在线和印刷表格向学生提供反馈。
这种分享反馈的过程变得非常真实,并与人工智能和聊天机器人互动。随着市场上各种人工智能驱动的聊天机器人的出现,学生自由表达自己变得更加容易。根据提出的问题和分享的反馈,机器人汇编了大多数学生提到的重点,并进一步发送给教师。
事实上,有一些人工智能驱动的平台在教室内提供反馈会议,以快速跟踪学习过程和面向学生的课程活动。
对学生和教师的实例援助
在当今时代,学生在技术的帮助下,可以即时获取所有信息。从张贴图片到发送电子邮件,任何任务都只需点击几下鼠标。在这个快节奏的环境中,对于教育者、在线导师和教育机构来说,加强他们的学生沟通过程变得非常重要,尤其是在入学季。
人工智能和聊天机器人为访问大学网站或办公室的学生提供实例帮助,以获得更多关于录取过程和相关细节的信息。这项技术将耗时的亲自回复每个查询的任务转化为自动化的任务,而且是即时的。这不仅节省了学生的时间,也减轻了机构手动答题的负担。
澳大利亚维多利亚州迪肯大学的精灵聊天机器人就是这样一个例子。聊天机器人回答了学生需要了解的关于校园生活的所有问题。迪金斯大学的首席信息官威廉·孔法罗尼埃内是该项目的幕后策划者。
引用孔法罗尼埃内的话说,“使用这项技术最有希望的机会是支持更加个性化的校园服务方式,这种方式仍然吸引着大量的人群。该系统还将有助于减轻压力过大的教师的负担,因为他们不再需要一遍又一遍地向不同的学生解释同样的事情。
人工智能以多种方式为教师提供帮助。除了帮助他们评分,人工智能还可以帮助教师轻松管理日常任务。
数据改变保险业的 5 种方式
原文:https://towardsdatascience.com/5-ways-data-is-transforming-the-insurance-industry-2800eec14ec5?source=collection_archive---------9-----------------------
St. John’s Tobin School of Risk Conference on Transforming Insurance
我最近在纽约市圣约翰风险学院举行的一次关于保险行业中数据使用的会议上发表了讲话,以下是我学到的 5 件关键事情:
- 所有保险公司都渴望使用更多的数据,但很少有公司能够将数据的使用付诸实施
Operationalizing Data Is a Challenge
由于人工智能和机器学习,保险行业对数据的价值有了新的认识。预测模型在保险行业中有无数的应用,包括优化客户获取、提供个性化服务、高效处理索赔、智能承保保单以及更有效地检测欺诈。构建和训练预测模型的常见因素是运营和业务数据。幸运的是,该行业可以从内部和外部来源获得大量数据。会议上坐在我旁边的一个人在一家再保险公司工作,有“数据猎人”的头衔。她唯一的工作就是寻找新的数据源来帮助公司。然而,对于现有的保险公司来说,实施人工智能可能具有挑战性,因为它们的传统 IT 基础架构无法扩展以利用新的数据源,并且它们的内部数据被锁定在彼此不兼容的孤岛中。
行业现有企业面临的最大机遇之一是打破企业数据孤岛。(参见我的博客关于数据仓库的文章。)设想一个数据平台,将客户、保单和索赔数据全部存储在一个地方,以便新保单核保可以考虑以前的索赔,并利用来自核保流程(如保单修改)的数据。
2。先行者正在以非常有趣的方式使用外部数据:
Sensors in Homes Transform P&C Insurance Via Prevention
如果说有一个共同的线索有可能改变保险业的所有细分市场和业务线,那就是外部数据的使用。新的数据源对保险行业来说是变革性的,因为它们可以使客户交互无缝化,从而提高品牌忠诚度,使索赔管理等关键业务流程变得高效,甚至有助于实施预防性做法,从而提高行业的整体盈利能力。让我们探索一些新的数据源。
- 装有传感器(远程信息处理)和移动应用程序的汽车将使索赔管理过程自动化。有了来自传感器的数据,保险公司将不再依赖事故中涉及的各方来确定责任。此外,将人工智能和机器学习(ML)应用于这些数据将使保险公司能够在几天内解决索赔并支付损失,而不是几周或几个月。传感器数据和 ML 还将在识别欺诈索赔和防止索赔方面发挥重要作用,以提高保险公司的盈利能力。我喜欢这个广告,其中怀孕的母亲坚持她的丈夫不要超速去医院,这样她就可以在她的手机应用程序上保留她的安全驾驶评级。不使用移动应用程序加速的财务激励。
- 传感器不仅与汽车保险相关,还与财产和意外伤害(P&C)业务相关。恒温器、烟雾探测器和安全系统等智能设备只是预防不利事件的第一步。一旦我们在家里和办公室安装了传感器,可以在火灾和泄漏等事件发生前检测到它们,并通知相关机构或房主,保险公司每年必须支付的潜在损失将大大减少。
- 根据 eMarketer 的数据,大约 22%的美国人拥有可穿戴设备。这些跟踪身体活动和生命体征的设备使保险公司能够根据投保人的生活方式将这些数据纳入人寿保险政策的定价中。知道如何利用这些数据作为其承保和定价流程的一部分的保险公司,也将在瞄准最健康和最赚钱的人群方面享有先发优势。
寓意
保险公司需要一个具有三个定义属性的数据平台。它不仅必须能够存储来自不同数据源的数据,包括上面提到的数据源。它还必须能够通过简单地添加商用服务器,从 TB 扩展到 Pb,从几个节点扩展到数百个节点。因此,横向扩展能力非常重要。
第二,平台本身必须能够支持任务关键型应用,并促进数据分析。洞察不应该与应用分离,而应该紧密联系在一起。
第三,该平台必须提供使用机器学习来构建、训练和操作预测模型的功能。它应该能够在一个系统中存储内部和外部生成的数据,加速模型训练,跟踪工作流,并将这些模型投入生产。
3。现有企业将需要基于技术的解决方案来应对保险技术和行业颠覆
InsurTech Upstarts Are Hard To Catch
InsurTechs 指的是利用技术颠覆传统保险行业的公司。InsurTechs 往往是较小的创业公司,扎根于数据、人工智能和移动应用程序开发。例如,DataCubes 和 Friss 等公司正在利用数据科学来转变和加速核心保险功能,如商业承保和欺诈检测。其他公司,如 Metromile 和 Root Insurance,正在根据客户的驾驶距离和习惯重新设计核心保险产品,如基于使用的汽车保险。
保险技术不仅通过技术应用颠覆了这个行业,还重塑了消费者的期望和需求。根据麦肯锡的研究,自 2012 年以来,已有超过 100 亿美元投资于保险科技行业。
寓意
为了有效地与 InsurTechs 竞争,现有公司必须重新发明和更新作为其竞争优势来源的应用程序。这些都是 InsurTechs 使用人工智能和机器学习瞄准的相同应用程序。现任者拥有丰富的数据源和受过 SQL 等技术培训的经验丰富的人员。保险公司需要考虑一个能够使用 SQL 有效管理运营和分析数据的统一平台,而不是试图将传统 IT 基础架构的各种组件捆绑在一起并获得难以找到的技能。统一的平台使市场领导者能够在数据库级别构建预测算法。数据库中的机器学习可以大大加快决策速度,并帮助在职者抵御讨厌的保险技术。
4。数据湖仍然困扰着保险公司
Drowning in Data Lakes
为了有效管理大数据并推动实时分析和决策,保险行业在数据湖上投入了大量资金。这些数据湖是使用商业 Hadoop 发行版构建的——灵活数量的独立开源计算引擎加入到一个公共平台中以实现规模。然而,数据湖的读取模式功能导致保险公司绕过定义哪些表包含哪些数据以及它们如何相互连接的过程,导致随意构建存储库。
数据湖项目已经开始失败,因为保险公司和其他行业的公司一样,优先考虑将所有企业数据存储在一个中心位置,目标是让所有开发人员都可以使用这些数据——如果你愿意,这是一个优步数据仓库,而不是考虑数据将如何推动应用程序。因此,Hadoop 集群已经发展成为企业数据管道的网关,用于过滤、处理和转换数据,然后将数据导出到其他数据库和数据集市,以便向下游报告。数据湖中的数据几乎永远不会出现在真正的业务应用程序中。因此,数据湖最终成为一组庞大的不同计算引擎,在不同的工作负载上运行,全部共享同一存储,非常难以管理。(参见我关于数据湖和 Hadoop 的博客。)
寓意
正如我在上面提到的博客文章中所讨论的,保险公司面临着越来越大的压力来证明他们的数据湖的价值。我建议他们首先关注操作应用程序,然后再研究所需的数据。
通过专注于利用数据和智能实现应用的现代化,保险公司将能够开发能够利用数据预测未来可能发生的事情的应用。然后,保险公司可以在没有人工干预的情况下主动做出决策,从而带来卓越的业务成果。
5。监管机构将数据治理和 ML 透明度放在首位
Machine Learning Needs To Be Transparent And Traceable
鉴于巨大的数据量和多样化的数据源,如果应用程序能够在没有人工干预的情况下大规模地做出智能决策,那么人工智能和 ML 的真正价值就能得到最好的实现。然而,这种能力一旦实现,就会产生“黑盒”的感觉,其中大多数业务人员不完全理解预测模型为什么或如何采取某个动作。这种能力不仅很好,而且对于保险公司必须能够记录和维护其决策(如拒绝索赔或保险单)的用例来说非常重要。监管机构将越来越多地向保险公司施压,要求它们解释预测模型的内部运作方式,特别是在模型用于承保和定价以确定保费的情况下,以确保不存在任何歧视性做法。
含义
数据治理提供了一个框架,有助于定义在任何生态系统中如何获取、管理和使用数据。该框架用于增强企业对其数据以及基于分析该数据而采取的行动的信心。在保险行业经历重大转型之际,公司需要一个强大的框架来提供对数据谱系、对数据执行的转换以及如何使用数据的可见性。这个框架还必须涵盖预测和机器学习模型。保险公司必须能够向监管机构展示他们的数据科学家进行的所有实验,以及哪个模型投入生产,以及它是如何随着时间的推移而修改的。因此,数据治理必须成为数据科学家用来构建、培训和操作模型的平台的一个组成部分。
为了实现这一目标,考虑一个为数据科学家提供自由实验能力的平台。构建预测模型是一个迭代过程,需要数据科学家不断调整他们的模型,并评估这些变化对模型准确性的影响。为了跟踪他们的实验,数据科学家需要一个像 MLFlow 这样的平台。MLFlow 拥有一个内置的功能来跟踪和记录每次迭代的变量。通过这种方式,数据科学家可以向内部利益相关者和外部监管者等客观地展示将特定模型投入生产的理由。他们还可以证明不存在任何歧视性做法。
如果您想了解保险行业应用程序现代化的更多信息,Splice Machine(我是该公司的首席执行官和联合创始人)的团队已经创建了一份白皮书,反映了我们与一些世界领先的保险公司所做的工作。
数据科学改变金融交易的 5 种方式
原文:https://towardsdatascience.com/5-ways-data-science-is-changing-financial-trading-b7404d62ed6d?source=collection_archive---------16-----------------------
大数据正在改变一切。从广告和技术到医疗保健和我们的日常生活,信息正在产生影响。
我们终于有了从生活的各个方面收集无限量数据的技术和手段。此外,我们可以将所有这些放在一起,以便于理解和实施。这些信息带来的变化可以让几乎任何事情变得更有效率,包括交易。
金融交易是一项精密的工作,在崩溃之前不能犯太多的错误。这就是为什么人们开始实施数据和人工智能来帮助解决问题。这样,每件事都可以做得更快更好,而不会偷工减料。
以下是数据科学如何给金融交易行业带来巨大变化的几个例子。
1.大数据分析
关于金融交易的数据不仅仅包括价格和波动。它还试图理解成本波动的原因。利率通常是供求关系的反映。社会和政治趋势也会影响销售。然而,供求背后的原因是可以评估的,也可能是可以解决的。
这个数据收集过程为创建预测模型铺平了道路。数据可以开始观察趋势,而机器学习可以发现人类容易忽略的早期模式。对某种东西将会上涨或下跌的预测可以在未来导致安全、明智的决策。
2.股票评估
海量数据让金融交易世界变得更加可预测。因此,股票交易发生了一些重大变化。人工智能现在可以充当个人股票顾问。
该软件可以观察金钱方面的模式、趋势和可能的结果。由于基础股票之间的相关性以及以前的模式如何与当前趋势相结合,人工智能可以做出这些假设。
然而,人工智能对股市的影响并不仅限于预测股市走向。数据可以告诉你一个合理的交易价格,不管你是买还是卖。利用这些信息,你可能会承担更少的风险,获得更高的回报。如果你喜欢安全地玩股票交易,人工智能顾问可能是一个好主意。
3.实时信息
通过将世界各地的每个人联系在一起,技术极大地推动了现代社会的发展。
与 40 年前不同,地球上不同地方的两个人之间的对话可以立即进行。不断的分享带来了快速的进步,包括金融交易领域。
金融交易向来节奏极快,尤其是讨论股市的时候。现在,你也可以立即获得信息。实时数据可以让你做出更好、更快的决策。由于人工智能只提供基本和相关的信息,错误会自动减少。
4.机器学习
我们还没有真正理解机器学习是如何改变金融交易的。
首先要理解的是,这项技术不是人工智能,而是一个子集。机器学习是识别模式并根据积累的数据做出预测的部分。
我们已经在机器学习方面取得了飞跃。然而,现实是,我们仍然处于这项技术全部潜力的尖端。大公司现在正跳上人工智能列车。2019 年末,摩根大通实施了第一个机器人来完成其全球股票算法业务的交易。
5.有些公司从人工智能开始
摩根大通是一家大公司,但它不是金融贸易领域人工智能的先驱。许多公司与人工智能合作,尽可能做出最好的金融交易决策。他们中的一些人继续在尝试新的想法,这是世界其他地方正在慢慢开始采取的开创性步骤。
总部位于芝加哥的 Greenkey Technologies 已经开始使用语音识别和语言处理技术,目的是尽可能地节省在交易大厅的时间。
与此同时,伦敦的 Auquan 拥有一个数据科学平台,任何人都可以展示他们的算法并获得灵感。同样位于伦敦的 AITrading 利用人工智能来增加交易利润并最大限度地利用机会。不用说,金融交易领域已经出现了大量的机器学习。
未来的金融交易
随着我们对人工智能和机器学习的了解越来越多,我们在工作中变得更加高效。
金融交易已经存在了很长时间,而且不会很快消失。如果你想保持可持续发展,优化流程是唯一可能实现的飞跃。
当涉及到贸易领域的这么多钱时,你不能在最后一刻犯错误或发现问题。
利用手头最好的信息——以及能够检测隐藏模式的软件——永远是正确的选择。
图像通过 Rawpixel
数据科学改善高等教育的 5 种方式
原文:https://towardsdatascience.com/5-ways-data-science-is-improving-higher-education-b5bf402d50c4?source=collection_archive---------9-----------------------
数据科学使用精确的方法和平台从海量信息集合中提取洞察力。大学从学生、教师和职员那里收集数据。
以下是数据科学给高等教育带来的五个现实增强的例子。
1.培养未来数据科学家的更多方法
当人们评估大学和学位项目时,他们通常会寻找能给他们带来优势的选项,如工作保障和职业成就感。对于一个人来说,努力工作四年或更长时间以获得文凭,然后发现他们新获得的技能不能很好地应用于就业市场是令人沮丧的。
数据科学的角色需求量很大,获得该领域的学位可以帮助学生最大限度地超越自我。许多大学通过学位课程、研究工作等方式增加了数据科学投资。
如果一个学习机构因其能够为有抱负的数据科学家进入就业市场做好准备而赢得声誉,那么该机构吸引学生可能会变得更容易。因此,数据科学投资通过使高等教育部门与当前和未来需求日益相关来改善高等教育。
2.利用数据发现剽窃
整个校园和个别教授都努力在学生中培养诚信文化。在一些大学,新生签署荣誉守则,保证他们不会在考试中作弊或在写论文时抄袭。
获得剽窃盛行的名声伤害了大学,因为这给人的印象是,他们没有通过清除不诚实的人来执行规则,为所有学生提供公平的竞争环境。今天的故意抄袭者使用先进的技术,远远超过从某处复制一段文字并稍微调整它。
但是数据科学和机器学习算法可以通过一个叫做文本挖掘的过程进行比较。这种方法让教育者能够发现可能的剽窃实例,即使内容片段在表面上看起来很独特。
这样,大学就更容易对作弊者采取果断行动,维持一个不容忍为了更好的成绩而不诚实的校园环境。因此,高等教育部门可以花更多的时间来教那些想学习的人,而不用尝试不为人知的策略。
3.追踪校园流感
流感爆发在任何情况下都是重大问题。由于一个生病的学生在特定的一天里可能接触的人的数量,他们在特定的一个小时里可能接触的表面的数量,等等,它们可以在大学校园里异常迅速地传播。许多人讨论“大学泡沫”现象,即学生很少参与校园外的活动。
这种趋势加速了流感的传播,因为它使患病的学生处于相对封闭的区域,并给了他们足够的机会让其他人生病。
北卡罗莱纳州两所大学的研究人员开发了一个分析模型,在移动应用程序的帮助下跟踪流感数据。他们说,这可以从理论上确定流感如何从一个人传播到另一个人。
在一项试验中,研究人员要求学生报告他们的症状。然后,通过智能手机应用程序分发的数据为每个用户提供了个性化的预测,根据症状表明他们是感冒还是流感,建议他们呆在家里或去上课。这是通过计算学生在某一天感染或传播流感的几率来实现的。
这是数据科学的一个迷人的应用。但是考虑到健康数据的敏感性,像这样的例子使得大学坚持数据安全的最佳实践变得至关重要。这意味着做一些事情,如培训用户和员工如何处理数据,了解大学拥有的数据类型,以便做出保护数据的适当决定。
4.评估学生如何与同伴互动
教育专家知道,如果学生在大学开始感到孤立,缺乏支持系统,这些因素可能会对保留率产生负面影响。
来自爱荷华大学的研究人员发现了一种前瞻性的方法,可以检测学生与他人的合群程度。他们检查了几乎每所有餐厅的大学使用的数据:食堂刷卡。
该团队透露,测量一个人在餐厅刷卡和后面的人使用餐厅特权之间的时间,可以帮助确定人们是与朋友一起吃饭还是独自吃饭。此外,研究人员早在一个人大学第一年的第二学期就获得了有用的数据。
这表明,在早期观察同龄人的互动并将其与未来的毕业可能性联系起来是可能的,而且比以前认为的更有必要。
通过像这样的研究收集的数据也可以帮助大学代表更积极地鼓励一年级学生参与和与朋友团体互动,无论是通过会见住在他们宿舍或其他地方的人。
5.挖掘数据以提高校友参与度
与大学校友沟通以鼓励他们捐款是大多数大学的基本做法。
代表们知道财政支持有助于校园保持对现在和未来学生的吸引力。但是,负责寻求捐赠的人可能会很快偏离轨道,因为他们花太多时间与不太可能捐赠的人交谈。
将数据科学应用于筹款活动,可以通过找出与最慷慨的校友捐赠者相关的因素来帮助大学取得成功。有了这些信息,大学就可以更容易地为校友们策划更有吸引力的活动,也有助于在捐赠申请材料中传达更恰当的信息。
高等教育中数据科学应用的多样性
正如该列表所示,将数据科学应用于高等教育领域的令人兴奋的方法并不缺乏。随着实验的继续进行,人们可以期待更多的用途出现。
图像经由 Rawpixel
成为数据科学家的 5 种方法
原文:https://towardsdatascience.com/5-ways-to-become-a-data-scientist-8590811b0dc3?source=collection_archive---------24-----------------------
如果你有兴趣成为一名数据科学家或对数据科学专业感兴趣,我建议你这样做:
1。找一家需要数据科学家的公司
公司通常会为特定项目雇佣数据科学家。例如,一家金融机构可能有一个公司范围的项目,他们希望在这个项目中构建一个用于分析数据的算法。
如果你对了解雇佣数据科学家的公司类型感兴趣,请登录 AngelList,开始浏览初创公司的数据科学职位。
2.申请数据科学实习计划和培训计划
实习项目和培训项目是了解行业和学习新技能的好地方。
读一本数据科学的书,可以帮助你对行业有更深入的了解。
3.构建自己的开源项目
虽然数据科学在行业中变得越来越重要,但仍有大量数据科学家不属于更大的开源社区。
GitHub 上有大量的免费工具和资源,许多数据科学家渴望分享他们的知识,并为社区做出贡献。
4.加入当地的数据科学小组
一些城市有致力于帮助成员的本地数据科学团体。虽然尝试掌握最新的工具和技术很重要,但在这个社区中,您可以从整体上了解数据科学,以及它如何融入您公司的业务。
每个较大的城市现在都拥有一群活跃的数据科学家。
5.加入数据科学协会
数据科学可能非常令人生畏,开始学习不同的技术可能很困难,但这并不意味着你不能做到。
在开始之前,这里有一些需要考虑的事情。
首先,重要的是参与数据科学讨论和社区推动的讨论,以了解什么是数据科学、它的发展方向以及如何最好地利用它。
总之,参加数据科学会议和数据科学大会是一个很好的开始。这些聚会提供了一个空间,任何人都可以在这里学习数据科学,无论是基础知识还是高级技术,并提供入门所需的工具和培训。如果你心中没有一个特定的项目,你可以查看事件列表,看看谁在主持 meetup,以及是否有一个具体的时间发生。
当你看完 meetups 列表后,我建议你试着和组织者联系。参加他们将要参加的任何会议,并询问他们您是否能参加他们的下一次数据科学会议。你也可以在社交媒体上关注组织者,看看发生了什么。
不管怎样,祝你玩得开心!
成为数据科学家有很多方法。
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
如果你想了解更多,请阅读我关于成为数据科学家的其他文章:
- 成为数据科学家的 5 种方法
- 给数据科学家的最佳建议
- 如何从数据科学开始
- 数据科学家常犯的 3 个错误
- 成为数据科学家的实用指南
每个数据科学家都应该知道的检测异常值/异常的 5 种方法(Python 代码)
原文:https://towardsdatascience.com/5-ways-to-detect-outliers-that-every-data-scientist-should-know-python-code-70a54335a623?source=collection_archive---------0-----------------------
检测异常对任何企业都至关重要,无论是通过识别故障还是采取主动。本文讨论了识别这些异常的 5 种不同方法。
Photo by Will Myers on Unsplash
什么是异常/异常值?
在统计学中,离群值是不属于某个总体的数据点。这是一个远离其他价值观的反常观察。离群值是指与结构良好的数据相背离的观察结果。
例如,你可以清楚地看到这个列表中的异常值:[20,24,22,19,29,18, 4300 ,30,18]
当观察值只是一串数字并且是一维的时,很容易识别它,但是当你有成千上万的观察值或多维观察值时,你将需要更聪明的方法来检测这些值。这就是本文将要讨论的内容。
我们为什么要关心异常现象?
检测异常值是数据挖掘的核心问题之一。数据的新兴扩张和持续增长以及物联网设备的普及,促使我们重新思考处理异常的方式,以及通过观察这些异常可以构建的用例。
我们现在有智能手表和腕带,可以每隔几分钟检测一次我们的心跳。检测心跳数据的异常有助于预测心脏病。交通模式的异常有助于预测事故。它还可用于识别网络基础设施和服务器间流量的瓶颈。因此,基于检测异常的用例及解决方案是无限的。
我们需要检测异常的另一个原因是,在为机器学习模型准备数据集时,检测所有异常值并将其剔除或分析以了解为什么它们会出现在第一位置非常重要。
现在,让我们从最简单的方法开始,探索检测异常的 5 种常见方法。
方法 1 —标准偏差:
在统计学中,如果数据分布近似正态,那么大约 68%的数据值位于平均值的一个标准偏差内,大约 95%位于两个标准偏差内,大约 99.7% 位于三个标准偏差内
因此,如果有任何数据点超过标准偏差的 3 倍,那么这些点很可能是异常点或异常值。
让我们看一些代码。
这段代码的输出是一个大于 80 小于-40 的值的列表。请注意,我传递的数据集是一维数据集。现在,让我们探索多维数据集的更高级的方法。
方法 2 —箱线图
箱线图是数字数据通过其分位数的图形描述。这是一种非常简单但有效的可视化离群值的方法。将下方和上方的胡须视为数据分布的边界。显示在须状物之上或之下的任何数据点都可以被认为是异常值或异常值。以下是绘制箱线图的代码:
上面的代码显示了下图。如你所见,它认为所有高于 75 或低于-35 的都是异常值。结果非常接近上面的方法 1。
箱线图剖析:
I 四分位范围 ( IQR )的概念用于构建箱线图。IQR 是统计学中的一个概念,用于通过将数据集分成四分位数来测量统计离差和数据可变性。
简而言之,任何数据集或任何一组观察值都根据数据的值以及它们与整个数据集的比较情况被划分为四个定义的区间。四分位数将数据分为三个点和四个区间。
四分位距(IQR)很重要,因为它用于定义异常值。它是第三个四分位数和第一个四分位数的差值(IQR = Q3 -Q1)。在这种情况下,异常值被定义为低于(Q1 1.5x IQR)或箱线图下须或高于(Q3 + 1.5x IQR)或箱线图上须的观测值。
Source: Wikipedia
方法 3— DBScan 聚类:
DBScan 是一种聚类算法,用于将数据分组。它还用作基于密度的异常检测方法,使用一维或多维数据。其他聚类算法,如 k-means 和层次聚类,也可以用来检测异常值。在这种情况下,我将向您展示一个使用 DBScan 的示例,但在开始之前,让我们先了解一些重要的概念。DBScan 有三个重要的概念:
- 核心点: 为了理解核心点的概念,我们需要访问一些用来定义 DBScan 作业的超参数。第一个超参数(HP)是 min_samples。这是形成一个聚类所需的核心点的最小数量。第二个重要的 HP 是 eps。eps 是两个样本之间的最大距离,它们被认为是在同一个聚类中。
- 边界点 与核心点在同一个群中,但是远离群的中心。
Source:https://stackoverflow.com/questions/34394641/dbscan-clustering-what-happens-when-border-point-of-one-cluster-is-considered
- 其他的都叫做 噪声点 ,那些是不属于任何聚类的数据点。它们可能是异常的,也可能是非异常的,需要进一步研究。现在,让我们看一些代码。
上面代码的输出是 94。这是噪音点的总数。SKLearn 将噪音点标记为(-1)。这种方法的缺点是维度越高,它变得越不精确。你还需要做一些假设,比如估算 T2 每股收益的正确价值,这可能很有挑战性。
方法 4—隔离林:
隔离森林是一种无监督学习算法,属于集成决策树家族。这种方法不同于所有以前的方法。所有以前的方法都是试图找到数据的正常区域,然后将这个定义区域之外的任何东西识别为异常值或异常值。
这种方法的工作原理不同。它通过给每个数据点分配一个分数来明确隔离异常,而不是描绘和构建正常点和区域。它利用了这样一个事实,即异常是少数数据点,并且它们具有与正常情况下非常不同的属性值。这种算法在处理非常高维的数据集时非常有效,并且被证明是一种非常有效的异常检测方法。因为本文关注的是实现而不是技术,所以我不会进一步讨论算法是如何工作的。然而,在这篇论文中涵盖了它如何工作的全部细节。
现在,让我们来探索代码:
这段代码将输出数组中每个数据点的预测。如果结果为-1,则意味着该特定数据点是异常值。如果结果为 1,则意味着该数据点不是异常值
方法 5—稳健随机采伐森林:
随机切割森林(RCF)算法是亚马逊的无监督算法,用于检测异常。它也通过关联异常分数来工作。低分值表示该数据点被视为“正常”高值表示数据中存在异常。“低”和“高”的定义取决于应用,但是通常的实践表明,超过平均分数的三个标准差的分数被认为是异常的。算法的细节可以在这篇论文中找到。
这个算法的伟大之处在于它可以处理非常高维的数据。它还可以处理实时流数据(内置于 AWS Kinesis Analytics)和离线数据。
我在下面的视频中详细解释了这个概念:
本文展示了与隔离林相比的一些性能基准。这是论文的结果,表明 RCF 比隔离森林更准确、更快速。
完整的示例代码可在此处找到:
[## aw slabs/Amazon-sage maker-示例
展示如何在亚马逊 SageMaker 中应用机器学习和深度学习的示例笔记本…
github.com](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/introduction_to_amazon_algorithms/random_cut_forest)
结论:
我们生活在一个数据每秒都在变大的世界里。如果使用不当,数据的价值会随着时间的推移而降低。无论是在线发现数据流中的异常,还是离线发现数据集中的异常,对于识别业务中的问题或构建主动解决方案以在问题发生前发现问题至关重要,甚至在探索性数据分析(EDA)阶段为 ML 准备数据集也是如此。我希望这篇文章对你有用,请在下面的评论区告诉我你的想法。
获得真实世界数据科学经验的 5 种方法
原文:https://towardsdatascience.com/5-ways-to-gain-real-world-data-science-experience-674f0c80e836?source=collection_archive---------4-----------------------
在没有数据科学工作的情况下获得数据科学经验似乎令人望而生畏。
我从试图进入数据科学的人们那里得到的最大问题之一是“如果我没有数据科学的工作,我如何获得数据科学的经验?”。
为了回答这个问题,我总结了以下 5 种获得有用的真实数据科学经验的方法:
- 构建小项目
- 志愿成为一名数据科学家
- 加入聚会
- 创建教程
- 为开源项目做贡献
我将详细讨论每一个问题,并给出具体的行动。
在你开始申请数据科学工作之前,你当然不需要做清单上的所有事情。
我的建议是集中精力做清单上的一两件事,不要试图一次做完所有的事。
构建小项目
我获得现实世界数据科学经验的第一个方法,也可能是最喜欢的方法是构建小项目。
我说“小”是因为它不是一个完整的端到端项目。
如果你试图一次完成太多事情,你将一事无成。
你最好选择一项特定的技能,做一个小项目,并在你的 GitHub 页面文件夹中展示它。
GitHub Pages
这里有一些你可以做的快速项目的例子。
1.收集和清理杂乱的数据集
收集和清理杂乱的数据集是展示以下现实世界技能的好方法:
- 如何确定项目范围和收集数据的计划
- 使用不同的数据格式(CSV、JSON、XML)
- 不同的数据收集方法(SQL、API、网络搜集)
- 思考不同的数据清理任务
创建数据清理项目的最佳方式是找到一个杂乱的数据集,选择一种工具,并专注于一项技能。
Data Cleaning with R
以下是一些杂乱数据集的来源:
- Data.gov
- UCI 机器学习知识库:电视商业数据集
- Kaggle:处理缺失值
2.浏览数据集
探索数据集,也称为探索性数据分析(EDA ),是展示您执行以下操作的能力的好方法:
- 形成相关问题
- 调查这些问题
- 利用不同类型的地块
- 展示你的发现
以下是执行探索性分析的一些来源:
- IBM 分析社区
- Kaggle 数据集
- UCI 机器学习知识库:个人家庭用电量
3.做预测
我建议在机器学习项目之前创建一个数据清理或探索性项目。
到目前为止,机器学习更受欢迎,但在现实世界的数据科学工作中,你可能会花更多的时间来清理和探索数据。
话虽如此,了解机器学习的基础知识仍然很重要。我建议将逻辑回归或线性回归模型放在一起。
Logistic Regression
这些都是很好的模型,因为它们比随机森林之类的东西更容易解释。在试图把事情变得过于复杂之前,了解基本情况是至关重要的。
这里有几个数据集可以帮你入门:
- 逻辑回归— 贷款违约预测
- 线性回归— 预测房屋销售价格
确保记录下你所有的工作,并且整洁地写下来。
一个很好的工具是 Jupyter 笔记本。这将允许您编写和执行您的代码,同时还能够使用 Markdown 记录您的工作。
Jupyter Notebooks
一旦你写好了你的项目,一定要在你的 github 个人资料和 github 作品集页面上记录你的工作。
这里有一些关于构建数据科学项目的额外资源。
志愿成为一名数据科学家
志愿作为一名数据科学家是获得一些经验的另一个好方法。
另一个好处是你为更好的利益贡献了你的时间。
开始数据科学志愿服务的一个选项是使用 DataKind 。
DataKind
你可以自愿加入一个项目,也可以提交自己的项目。
以下是 DataKind 解决关键人道主义问题的一些领域:
- 教育
- 贫困
- 健康
- 人权
- 环境
- 城市
DataKind 有一大堆很棒的项目要参与。这里有几个例子:
- 创建更安全的街道
- 预测加州需水量
- 机器学习帮助农村家庭用上电
Forecasting Water Demand
另一个很好的选择是驱动数据。
这家公司主办在线竞赛关注社会影响。
它类似于 Kaggle,但不是专注于商业影响,而是为了社会公益。
DrivenData
DrivenData 举办比赛的领域包括:
- 国际发展
- 健康
- 教育
- 研究和保护
- 公共服务
DrivenData 有一些非常有趣的比赛。以下是一些现在和过去的比赛示例:
- 数据挖掘水面表
- 模拟地震破坏
- 预测能源消耗
Predicting Heart Disease
志愿参与数据科学项目对社会有益,也有助于培养你的团队合作技能。
数据科学的很大一部分是能够与其他人交流和合作。作为志愿者加入数据科学团队是发展这些技能和成长的好方法。
加入聚会
聚会是另一种获得数据科学实际经验的好方法。
这些活动都是在你所在的城市亲自举办的。
它们的范围可以从教育演示到基于团队的编码项目。
Meetup
聚会很棒,因为它们也提供了很好的社交机会。
您可以接触到来自不同规模和背景的公司的真实数据科学家。
要找到你当地的聚会,只需在互联网上快速搜索“你的城市”+“数据科学聚会”。
我在纽约做了一个快速搜索,下面是我找到的内容:
- Scala + Python + Spark +数据科学
- 全民数据科学:纽约州
- 数据驱动的纽约市
Data Science groups in New York
这些聚会从教育性的到知识性的都有。
例如,“全民数据科学:纽约” meetup 的目标是“…让与会者做好数据科学的准备,并扩展实践数据科学家的技能。”
他们过去的一些聚会包括:
- 广义线性模型导论
- 数据科学项目之夜
- 详细线性回归
在数据科学项目之夜上,你可以获得项目方面的建议和工作。如果你没有项目,你可以和其他人一起做他们的项目。
Data Science Project Night
像这样的活动是向他人学习的好方法。既有关于编码和机器学习等技术技能,也有关于如何成为更好的沟通者和团队成员。
“Scala+Python+Spark+数据科学” meetup 提供了编程实践的机会。他们最近的聚会包括:
- 基本的 Python 游戏-通过构建简单的控制台游戏来提高您的 Python 技能
- Python 中的自然语言处理简介
- 数据科学应用统计学简介
聚会真的是获得一些实践经验和向他人学习的好方法。
创建教程
教授一项技能并在博客中展示是另一种获得经验的好方法。
你将向他人展示你能够发挥你在简历中宣传的技能。
这也展示了你的沟通技巧。在工作场所,你需要成为一个好的倾听者和好的老师。
以下是针对不同类型的辅导型项目的一些想法:
- 传授一项有用的技能——如何清理杂乱的数据集
- 知识技能——如何解释逻辑回归模型的系数
- 高级技能—从头开始编写算法(反向传播是如何工作的?)
我会从做一个有用技能或知识技能的教程开始。
一个很有用的技巧是类似于“如何用 R 检测缺失值”。
Data Cleaning with R
您可以找到一个混乱的数据集,然后逐步完成检测混乱值的过程。
一定要一路展示你的代码,并解释你正在使用的函数,以及它们到底在做什么。
我关于用 R 清理数据的博文是这类项目的一个很好的例子。
知识技能是另一种很好的项目类型,尤其是当你正在学习的时候。也许类似于“解释逻辑回归模型的系数”。
Interpreting Odds Ratios in Logistic Regression
我最喜欢的快速学习方法是尝试和教授。
你有没有想过你理解了一些事情,然后你试图向某人解释,却发现你不能?
试着选择一个话题,写一篇博文。真正解释细节,但尽量不要用很多技术术语。
能够理解一个主题,并简单详细地解释它,是雇主希望看到的真正有价值的技能。
为开源项目做贡献
获得数据科学经验的最后一种方式是参与开源项目。
这是熟悉流行的数据科学库的好方法。以下是数据科学领域的一些开源项目的示例:
- 熊猫
- Scikit-learn
- 潮汐
Contributing to Pandas
为开源做贡献会让你熟悉版本控制和 git 。
如果你对 git 没有任何经验,没什么大不了的,这里有一些很好的资源可以帮助你入门:
- Git 视频
- Git 教程:免费学习 Git 基础知识| Codecademy
- 针对初学者的 GitHub 速成班
Codecademy Learn Git
为开源项目做贡献可能看起来令人生畏,但是请记住,您不一定需要贡献代码。
开源项目总是在寻找对其文档的贡献。
例如,freeCodeCamp 一直在寻找对他们的编程指南的贡献。
如果你想开始投稿,请查看 freeCodeCamp 的投稿指南。
freeCodeCamp Contribution Guidelines
开源项目通常会有一些贡献指南,所以通读这些指南是有好处的。
下面是我之前提到的开源项目的贡献指南:
- 为熊猫做贡献
- 供稿— scikit-learn
- 促成潮流
如果您仍然感到不知所措,不要担心,查看这些初学者指南,开始使用开源项目:
- 如何为开源做出贡献
- 首次投稿
- 如何开始使用开源软件
为开源做贡献不仅会增加你的编码和软件技能,还会教会你如何与他人合作。
您将不断地与运行项目的人以及开源社区中的其他人交流。
这是一个向他人学习的好方法,同时也有助于你为真正令人惊叹的开源项目做出贡献。
结论
在没有数据科学工作的情况下获得数据科学家的经验可能会令人生畏。
最好的方法是一头扎进去,开始应用数据科学技能。
在本文中,我们回顾了以下 5 种获得有用的真实数据科学经验的方法:
- 构建小项目
- 志愿成为一名数据科学家
- 加入聚会
- 创建教程
- 为开源项目做贡献
从专注于一个开始,确保在你的 LinkedIn 个人资料和 GitHub 作品集页面上记录你的工作。
让您的组织为数据科学做好准备的 5 种方法
原文:https://towardsdatascience.com/5-ways-to-make-your-organisation-data-science-ready-7cfd06403d3a?source=collection_archive---------40-----------------------
数据科学团队如何才能不被困在孤岛上?
Image by Free-Photos from Pixabay
各个行业都在通过雇佣数据科学研究人员和专家来投资机器学习和人工智能。但是你如何确保这些新的团队和他们的工作与组织的其他部分一致呢?数据科学团队如何才能不被孤立?他们如何有效地与同事和客户交流工作?如果您正在开发数据科学产品,以下是一些避免这种障碍的方法:
1.了解你的观众和他们关心的事情
显而易见,数据科学团队最常犯的错误是在没有真正理解他们的情况下,向各种利益相关者传达他们深厚的知识和复杂的工作。数据科学家通常与工程、设计、产品、营销、销售、客户等各种利益相关方合作。这些学科中的每一个都有其独特的特点和他们前进的目标。理解它们对你工作的成功至关重要。
你是怎么做到的?不要担心,你不必去获得那个领域的学位或者在同一个团队工作一个月,你所需要做的就是倾听。这听起来很简单,但是实践起来很难。听观察,听学习,听调整你的信息以引起你的听众的共鸣。
2.不仅要让你的工作,还要让你的沟通与利益相关者的目标保持一致
组织雇佣员工要么填补空白,要么改善现状,要么帮助实现目标。重要的是要明白它在你的组织中对你来说是什么,并且不仅仅是你的工作,还有你的沟通都要与它保持一致。这并不意味着你一直在试图证明什么,这只是意味着你让你的利益相关者看到了你工作的价值。很多时候,我们期望我们的利益相关者信任我们,却没有授权给他们有效的方法来参与和验证。让我们从改变这一点开始。
你是怎么做到的?提问。询问利益相关者的目标,而不是猜测。问问你的工作成功是什么样子的。从一开始就确立这些目标,但要留有时间推进的余地。
3.要明白没有人喜欢感觉自己是哑巴
通常,当组织中引入新的数据科学团队时,会有一种误解,认为他们必须展示其专业知识的复杂性来证明价值。那是一个错误。我参加过一些会议,会上人们要么因为不想显得愚蠢而不敢提问,要么只能问‘那又怎样?’在听了一些高度复杂模型的近乎完美的结果之后。展示你的工作的复杂性可能感觉很好,但是要明白人们不一定关心你所关心的一切。
你是怎么做到的?展示您的受众能够理解、解释和参与的结果。这可能意味着牺牲隐藏几层复杂的工作来专注于你的工作的功效、相关性和价值。
4.花时间教育你的同龄人
虽然坐在电脑前训练下一个最佳模型可能更有吸引力,但在你周围培养一种学习文化会带来巨大的回报。你参与教育的越多,其他人就越能理解你的工作,当你展示你的工作时,涉及的领域就越少。
你是怎么做到的?我并不热衷于通过长篇大论和讲座进行教育,它们通常不太管用,尤其是在快节奏的工作环境中。相反,你可以试着通过一起解决一个问题,获得别人对某件事的建议,或者只是解释你在工作中面临的挑战,让它变得互动起来。
5.建立伙伴关系,而不仅仅是模型
数据科学家拥有真正的超能力:他们可以从成堆的原始数据中发现有价值的见解。利用你的超能力在你的组织中与你的客户建立伙伴关系。而站在场边,为参与者鼓掌是娱乐性的;并肩站在赛场上才是到达终点真正有意义的事情。这是你需要你的利益相关者和你一起感受到的,才能真正一起成功。
你是怎么做到的?尽早并经常参与,根据他人的意见调整您的解决方案,欣赏困难的问题,并公开您工作中的不足之处。
建立一个对未来积极主动的数据驱动的产品或组织是一个旅程。为未来的漫漫长路做好准备、保持耐心和谦逊会有所帮助。
Anam Zahid 是一名数据科学家,后来成为产品经理,热衷于构建产品、数据科学和机器学习、人生哲学和旅行。与我联系: LinkedIn
登月 50 年后,太空探索的前景如何?[信息图]
原文:https://towardsdatascience.com/50-years-after-the-moon-landing-what-is-the-future-of-space-exploration-infographic-ae54c030d5cb?source=collection_archive---------29-----------------------
50 年前的这个月,当尼尔·阿姆斯特朗走下登月舱阶梯,在月球表面留下他标志性的足迹时,最疯狂的科幻幻想变成了现实。
他那句臭名昭著的话,“一个人的一小步,人类的一大步”,回荡在全球,听众超过 5 . 3 亿。
几周后,在持续了半个世纪的空间探索和发展之后,世界将重温这一历史性事件。
为了纪念这一突破性的成就,我们回顾了登月的历史,太空探索的未来以及私营公司在蓬勃发展的太空经济中的作用。
哪些国家登上过月球?
尽管阿波罗 11 号的登月任务最为人所知,但在 1969 年之前还有其他成功的无人登月任务。
苏联的月球 2 号是 1959 年第一艘到达月球表面的宇宙飞船,而月球 9 号是 1966 年第一艘在月球软着陆的宇宙飞船。
四个月后,美国宇航局的勘测者 1 号成功软着陆月球,随后又有四次成功的无人驾驶任务。
在苏联和美国之间充满紧张气氛的太空竞赛进行了 14 年之后,阿波罗 11 号成功地登上月球并返回——为未来几代人开创了一个先例。
在此之后,美国宇航局又向月球发射了六次任务,其中五次成功。2013 年,中国也在 2013 年 12 月成功软着陆月球,比月球 24 晚了 37 年。
总的来说,美国发射了最多的登月任务,其中 38 次成功,紧随其后的是前苏联,56 次。
未来的登月任务
现任美国政府雄心勃勃地计划在 2024 年让人类重返月球,比最初的时间表提前了四年。这个名为 Artemis 的项目包括八次发射和一个到 2024 年在月球轨道上的小型空间站。
与此同时,俄罗斯计划从 2025 年开始向月球发射载人飞船,最终目标是在 2040 年建立一个月球殖民地。
印度希望成为今年第四个成功软着陆月球的国家,计划在本月发射一艘宇宙飞船,并在 9 月着陆。
太空竞赛不会只由世界各国主导。SpaceX 等私营公司也将目光投向了月球,尽管去火星旅行是他们的主要目标之一。埃隆·马斯克(Elon Musk)的 SpaceX 计划在 2023 年派遣一组艺术家进行绕月旅行,而杰夫·贝索斯的蓝色起源(Blue Origin)则希望在 2024 年之前将宇航员送上月球表面。
私有化太空旅行是未来吗?
随着雄心勃勃的太空探索计划(如火星之旅)成本的上升,美国宇航局越来越多地转向私人公司的雄厚资金来资助这些努力。
像埃隆·马斯克、杰夫·贝索斯和保罗·艾伦这样的亿万富翁正在向商业航天领域大举投资。
根据 SpaceFund 的发射数据库显示,目前全球有超过 100 家太空运输公司。正如你在下面看到的,大部分在美国,其次是英国和中国。
许多人认为【NASA 和 SpaceX、蓝色起源和维珍银河等公司之间的公私合作关系是太空旅行的未来。
事实上,进入低地球轨道的商业发射流量在过去十年中急剧上升:
轮到你了
你认为太空旅行的前景如何?从长远来看,增加太空探索会有好处吗?或者它仅仅会转移人们对地球上更紧迫问题的注意力?让我们知道你的想法…
本帖 原版 最早出现在 Visme 的 视觉学习中心 。
我在训练测试中犯的 6 个业余错误
原文:https://towardsdatascience.com/6-amateur-mistakes-ive-made-working-with-train-test-splits-916fabb421bb?source=collection_archive---------2-----------------------
细节决定成败
在过去的几周里,他一起踏上了关于推荐系统的旅程。我们看到了对主题的一个温和的介绍,以及对围绕主题的最重要的相似性度量的一个介绍(请记住,关于推荐系统和其他项目的整个知识库总是可以在我的 GitHub 个人资料中找到)。是的,我知道,围绕这个话题还有很多其他的东西,所以我们会简单地回到这个话题。但本周我决定打破僵局,谈论数据科学中一个非常基础的话题,当我刚开始研究建模和机器学习时,这给我带来了一些头疼的问题:训练测试分割。
没有人生来就知道,所以如果你还不知道什么是火车测试分裂,不要担心。然而,这是该领域中的一个基本概念,因此在本文中,我将尝试简要介绍这个主题,并告诉您我个人在开始处理列车测试分割时所犯的一些错误。希望你能从我费时的业余错误中学到一些东西:)
什么是列车测试分离,我们为什么需要它?
为了了解什么是训练测试分割,我们需要首先理解什么是“测试组”,以及为什么我们在进行 ML 建模时需要一个测试组。
简而言之,当我们试图预测任何类型的输出时,我们将使用数据集来“训练”机器学习模型。这个模型将尝试从数据中学习尽可能多的东西,以便做出准确的预测。同样,也许我们的模型会从中学到太多东西,以至于它只能预测我们给他的一堆数据,而不能预测任何其他数据。
这个潜在的问题或风险是我们通常在机器学习中应用的几个工具和概念的启动点:
- 偏差-方差权衡,简而言之,就是我们的模型应该从我们的训练数据中学习多少。如果它学习得太多,我们会说它有“高方差”,它会“过度拟合”我们的数据。相反,如果它学习得太少,它就会有“高偏差”,并且模型会“不适合”我们的训练数据。
- 当谈到所有这些时,正则化的概念也很方便,因为这是一种允许我们控制我们的模型从我们的数据中学习多少的技术。这个概念并不简单,但是可以很容易地用 Python 来应用。如果你想了解更多,我强烈推荐 Josh Starmer 的 StatQuest 的这个和这个基本视频。
- 除了控制我们的模型从数据中学习多少的任何一种技术之外,一个成熟的实践是分割我们的数据来评估我们的模型,因此我们可以确保它在不同的元素上表现良好。这里是测试分割概念最终出现的地方!我们的想法是将原始数据分成两组:不出意外,训练组将用于训练我们的模型。虽然我们会留下一堆数据,所以一旦我们已经训练了我们的模型,并且我们对它的性能感到满意,我们就可以用一堆全新的数据来评估它,以检查模型是否一致。这将是我们的测试组。如果我们在测试集上获得的分数比在训练组中获得的分数差得多,那么我们很可能过度拟合了训练数据。通常,80-20 或 70-30%的列车测试分割被认为是合理的。
- 最后,我们还可以讨论在评估我们模型的性能时进行交叉验证的概念,但这将不得不等到另一篇文章:)
我们如何用 Python 进行适当的训练测试分割?
像往常一样,Sklearn 让我们的一切变得如此简单,它有一个漂亮的救命库,这对于执行训练测试分割来说非常方便:
from sklearn.model_selection import train_test_split
文档非常清楚,但是无论如何让我们看一个简单的例子:
X_train, X_test, y_train, y_test = train_test_split(your_data, y, test_size=0.2, random_state=123)
现在,下一步将是…哦,等等,就这些!
关于如何实现这个库的内容真的不多。非常简单,现在您将有 4 组不同的数据:
- X_train:这将是你的训练组
- X_test:这将是你的测试组
- Y_train:这将是您的培训组的目标
- Y_test:可以想象,这将是您的测试组的目标
然而,尽管听起来很容易,但是如果您第一次使用该库,即使您已经使用过几次,也可能会面临一些风险或问题。让我们看看它们,这样你就不会像以前发生在我身上的那样掉进兔子洞了。
我在训练测试中犯的 6 个业余错误
- 乱写你的火车测试分割码
是的,虽然听起来很傻,但它有可能成为一个巨大的难题。想象一下,现在是凌晨,你整晚都在处理一个数据集。清理、合并数据、做一些功能工程……很平常的事情。该是你进行火车测试拆分的时候了,这样你可以在睡觉前尝试一个简单的模型。你写你的代码,但不是写:
X_train, X_test, y_train, y_test
例如,您写道:
X_test, X_train, y_test, y_train
听起来很傻?数据科学中最重要的规则之一是,在你对自己的训练/交叉验证分数感到满意之前,不应该透露你的测试分数。但是请记住,您无序地编写了您的训练测试分割代码,因此您得到的分数不是您的训练,而是您的测试分数。你可能会花上几个小时试图理解为什么你的训练数据得到这么低的值。或者更糟糕的是,你可能会因为这样糟糕的表现而放弃你的项目。在任何情况下,这都是一个错误,一旦犯了,就很难发现,这可能会导致花几个小时深入代码,试图解决这个愚蠢的错误。
2。错误输入测试组的大小
您应该指定的参数之一是“train_size”或“test_size”。您应该只使用其中一种,但更重要的是,一定不要混淆它们。否则,您可能只设置了 20–30%的训练集。这可能会导致几个问题。从没有足够的数据来训练适当的模型,到获得太好或太差的结果,这些结果可能会导致您进行一些耗时的进一步分析。
3。除了您的训练数据之外,标准化您的测试组
标准化是将在不同尺度上测量的值调整到一个公共尺度的过程。假设你正试图预测一个人是男是女,给定一组特征,如身高、体重和心率。在这种情况下,所有要素的比例都不同。例如,身高可以用厘米表示,而体重可以用公斤表示。在这种情况下,强烈建议对数据进行归一化处理,以一个通用的比例来表示所有数据。
Sklearn 提供了一个非常友好的库来做这件事,调用:
from sklearn.preprocessing import StandardScaler
归一化过程采用每个要素的平均值和标准偏差,并调整其比例,使其介于-1 和 1 之间,平均值为 0。一旦我们导入了库,我们就可以创建一个对象 StandardScaler,继续进行规范化:
scaler = StandardScaler()
然而,如果我们将数据分成训练组和测试组,我们应该首先使用我们的训练组来适应我们的 StandardScaler 对象,然后使用相同的对象来转换我们的测试组。例如:
scaler.fit(X_train)X_train = scaler.transform(X_train)X_test = scaler.transform(X_test)
为什么我们必须以这种方式规范化数据?请记住,我们将使用我们的数据来训练我们的模型,因此我们希望我们的 StandardScaler 对象注册并继续处理我们的训练集的平均值和标准差,并使用它来转换我们的测试组。否则,我们会做两个不同的变换,取两个不同的平均值和两个不同的标准差。将本应相同的数据视为不同的数据。
4。需要时不打乱数据,反之亦然
我们的 Sklearn train_test_split 的另一个参数是‘shuffle’。让我们保留前面的例子,假设我们的数据集由 1000 个元素组成,其中前 500 个对应于男性,后 500 个对应于女性。此参数的默认值为“True ”,但如果我们由于错误或疏忽将其设置为“False ”,并且我们将数据分成 80-20 份,我们将最终使用包含 500 名男性和 300 名女性的数据集来训练我们的模型,并使用其中仅包含 200 名女性的数据集来测试它。
考虑到缺省值是‘True’,所以如果到了你不想打乱数据的时候,别忘了指定它;)
5。不明智地使用“分层”参数
“分层”参数派上了用场,这样我们的测试组中产生的样本中的值的比例将与提供给参数分层的值的比例相同。这在处理分类问题时特别有用,因为如果我们不为这个参数提供一个类似数组的对象,我们可能会以测试组中目标类的非代表性分布结束。
通常,通过像这样传递目标变量来使用该参数:
X_train, X_test, y_train, y_test = train_test_split(your_data, y, test_size=0.2, ***stratify=y***, random_state=123, shuffle=True)
6。忘记设置“随机状态”参数
最后,这是我们可以在 Sklearn 的几个工具中找到的东西,文档对它的工作原理非常清楚:
如果 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果没有,随机数生成器就是 np.random 使用的 RandomState 实例。
换句话说:如果你没有指定一个 number 或者 RandomState 对象实例,train_test_split 的每次迭代都会给你不同的组,因为用于进行随机分割的种子是不同的。如果出于某种原因我们必须运行我们的代码,并且我们开始获得不同的结果,这可能会导致混乱。
我的朋友们,这是我在使用火车测试分割时犯的 6 个错误,由于业余爱好者的错误,这些错误使我花费了数小时进行解码和调试。如果你不幸遇到了其他人,我很想听听。一如既往,欢迎任何建设性的批评或建议通过评论区😃
此外,不要忘记查看我上一篇关于 5 分钟内网络抓取的文章以及我的作者简介中关于数据科学的更多内容。如果你喜欢这篇文章,不要忘了关注我,如果你想直接在你的邮箱里收到我的最新文章,就订阅我的时事通讯吧:)
感谢阅读!
熊猫基础知识——6 个有用的技巧
原文:https://towardsdatascience.com/6-basic-pandas-techniques-you-need-to-know-2c5725746938?source=collection_archive---------22-----------------------
这里有 6 个你需要知道的用 python 处理数据的基本技巧
Panda (Image by skeeze from Pixabay)
熊猫数据科学 python 库,用于数据操作和数据分析。它是数据科学中最常用的 python 库之一。在这篇文章中,我将指导你使用熊猫图书馆阅读、查看和保存 CSV 文件所需的六个基本技巧。
熊猫装置
如果您还没有安装它,您可以通过在终端中输入以下命令来安装。
pip install pandas
有关熊猫图书馆安装的更多信息,请参考以下链接。
[## 安装- pandas 0.25.1 文档
对于没有经验的用户来说,安装 pandas 以及 NumPy 和 SciPy 堆栈的其余部分可能有点困难。的…
pandas.pydata.org](https://pandas.pydata.org/pandas-docs/stable/install.html)
进口熊猫
在 python 程序中导入熊猫很简单。您可以使用下面的代码行来实现这一点。
import pandas as pd
1.创建数据框架
Pandas DataFrame 是具有行和列的二维数据结构。它类似于 SQL 中的表。
创建空数据帧
df = pd.DataFrame()
print(df)
输出:
从 python 列表创建数据帧
num_list = [1,2,3,4,5]
df = pd.DataFrame(num_list)
print(df)
输出:
将 CSV 作为熊猫数据框架导入
df= pd.read_csv('person.csv')
print(df)
输出:
2.快速查看数据帧
导入数据后,您可能希望在深入研究之前先查看一下。您可以使用 head() 方法先睹为快。默认情况下,此方法显示前五行。
df.head()
通过将 n 的值传递给方法 head() ,可以显示 n 行数据。
df.head(10)
或者,您可以使用方法 tail() 来查看数据帧的最后几行。
df.tail()
3.从数据框架访问列
您可以使用两种方法之一来访问数据帧的列
方法一:data frame _ instance . column _ name。请注意,如果列名中有空格,此方法将不起作用。
df.Name
方法 2:data frame _ instance[' column _ name ']
df['Name']
4.将列添加到数据框架
在要素工程中,您通常最终会向数据中添加一些要素。Pandas 允许您轻松地向数据框架添加新列。
让我们为 person 数据框的所有行添加一个新列 HasBike 和一个 False 。
df['HasBike'] = False
df.head()
5.从数据框架中删除列
有时,您不想处理所有的数据列。在这种情况下,您可以使用 drop() 方法从 DataFrame 中删除任何列。
让我们从 DataFrame 中删除新创建的列。
df.drop('HasBike', inplace=True, axis=1)
df.head()
6.将数据帧保存为 CSV 文件
这是另一件你应该知道如何使用熊猫的重要事情。要么你已经花了几个小时做特征工程或数据清理,你不想失去你所有的努力。相反,您可以将流程数据帧保存为 CSV 文件,然后在以后需要时导入。
您可以使用 to_csv()方法将数据帧保存到 csv 文件中。
df.to_csv('filename.csv')
这些是使用 Pandas python 库应该知道的一些基本技术:创建数据帧、加载 CSV 文件、向数据帧添加列、从数据帧中删除列以及将数据帧保存到 CSV 文件。
你最喜欢的熊猫技术是什么,你想分享一下吗?请在下面留下你的想法。
点击这里 阅读我其他关于 AI/机器学习的帖子。
来源:
[## 熊猫。数据框架-熊猫 0.25.1 文件
二维大小可变、潜在异构的表格数据结构,带有标记轴(行和列)…
pandas.pydata.org](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html) [## Python |熊猫数据框架-极客论坛
Pandas DataFrame 是二维大小可变的、潜在异构的表格数据结构,带有标记轴…
www.geeksforgeeks.org](https://www.geeksforgeeks.org/python-pandas-dataframe/)
给数据科学家的 6 点建议
原文:https://towardsdatascience.com/6-bits-of-advice-for-data-scientists-6e5758c52fb2?source=collection_archive---------6-----------------------
综合征、假设、谬误、谎言、意识和概率
Ask Questions!!!
犯错是人之常情。
用这个标准来衡量,谁比我们这些数据科学家更有人情味。
重要的是正视我们的错误。并从中吸取教训。
一个数据科学家需要有的批判性,并且总是留意别人忽略的东西。
但是有时在我们的日常工作和编码中,我们会迷失在我们的思路中,而不能看到全局。
最终,我们的商业伙伴雇佣我们只是为了创造价值,除非我们发展商业批判性思维,否则我们无法创造价值。
因此,这里有一些建议,人们可以将它们纳入日常的数据科学工作中,以便更加勤奋,同时更有影响力。
1.当心干净数据综合症
有多少次我们开始直接处理我们得到的数据。开始创建模型?或者甚至向我们的业务对手展示自动生成的描述性分析?
但是,你有没有问过— 这个数据有意义吗?
错误地假设数据是干净的会让你走向错误的假设。
通过观察数据中的差异,你实际上可以辨别出许多重要的模式。
例如,如果您注意到某个特定的列丢失了 50%以上的值,您可能会考虑删除该列。
但是如果某些数据采集仪器出现了一些误差怎么办?你本可以帮助企业改进流程。
或者说,在女性化妆品行业,男性和女性的比例是 90:10。
人们可以假设数据是干净的,并如实显示结果,或者他们可以运用常识,询问他们的商业伙伴标签是否被调换了。
2.意识到
我们都知道 fab.com。对于那些不知道的人来说,这是一个销售“策划健康、健身和健康产品”的网站。
但情况并不总是如此。
Fab.com 以 fabulis.com 的名字起家, 一个帮助男同性恋者认识人的网站。
该网站最受欢迎的特色之一是“当日同性恋交易”。
一天,交易是汉堡包——一半的购买者是女性。为什么网站上有女性?
以上事实让数据团队意识到,向女性推销商品是有市场的。因此,Fabulis.com 将其商业模式转变为 fab.com,作为设计师产品的销售点。
留意一些不明显的东西。准备好提问。如果你发现了什么,你可能已经找到了金子。
数据可以帮助企业优化收入,但有时数据也有改变公司方向的力量。
另一个例子, Flickr 开始是一个多人游戏。只有当创始人注意到人们将它用作照片上传服务时,他们才转向照片分享应用。
这样的例子数不胜数。
试着在你公司的业务中树立一个好榜样。
3.开始关注正确的指标
我们要优化什么?
大多数企业都没有回答这个简单的问题。
每一个业务问题都有一点不同,要有不同的优化。
例如,网站所有者可能会要求您为活跃用户进行优化。 但难道是 右度量 ? 只是一个虚荣心的度量,总会增加的。
相反,我会努力优化主动了解我的产品性能的用户的百分比。
再比如,我们都创建了分类模型。很多时候,我们试图提高模型的准确性。但是我们真的想要精确度作为模型性能的衡量标准吗?
如果我们在预测将要撞击地球的小行星数量会怎么样。
一直说零就行了。你会有 99%的准确率。我的模型可能相当准确,但一点价值都没有。一个更好的衡量标准是 F 分数。
设计数据科学项目比建模本身重要得多。
4.统计数据有时会说谎,也许很多次
Source
对引用给你的每一件事都要持批评态度。过去,统计数据已经被用于在广告、工作场所和许多其他营销场合撒谎。人们会不择手段来获得销售或促销。
比如: 你还记得高露洁声称 80%的牙医推荐他们的品牌吗?
这个统计数字初看起来相当不错。所有牙医都使用高露洁产品;我也应该。对吗?
原来,在调查牙医的时候,他们可以选择几个品牌——而不仅仅是一个。所以其他品牌也可能像高露洁一样受欢迎。
市场部只是一个创造神话的机器。我能理解。
市场部只是一个创造神话的机器。
但当你在研究中看到这种情况时,你会感到痛苦。例如,小型武器调查显示,每 100 名美国人拥有 120 支枪。
假设每个美国人都携带热量是合理的。另一项研究显示,只有 47%的家庭拥有枪支。
你困惑了吗?
有些家庭携带大量枪支。因此,说每个美国人都有武器是不合理的。
也不要相信没有标注 Y 轴的图表。
下图是众议员 Jason Chaffetz(R-UT)在国会听证会上向计划生育主席展示的,展示了堕胎率是如何上升的,拯救生命的程序是如何下降的。
标有坐标轴的真实图片,你可以看到被告知的谎言…
此外,美国预防服务工作组改变了建议,每两年进行一次癌症筛查,而不是每年,这一事实甚至可以解释癌症筛查的下降。
看到政客们展示的图表时要客观。
5.概率的长串规则
事情发生在 1913 年夏天,在摩纳哥的一个赌场里。
赌徒们惊讶地看着赌场的轮盘连续 26 次落在黑色上。
由于红色对黑色的概率正好是一半, 他们确信红色是“应该的”。 对于赌场来说,这是一个热闹的日子——一个赌徒谬误的完美例子,也被称为蒙特卡洛谬误。
这在现实生活中也会发生。 人们倾向于避免长串相同的答案 。有时为了得到一个看起来更公平或可能的决策模式而牺牲判断的准确性。
例如, 如果招生官已经连续批准了三份申请,他可能会拒绝下一份申请, 即使该申请本应根据成绩被接受。
不要屈服于这样的谬误。
这个世界以概率为基础。我们是 70 亿人,每秒钟都在做一件事。
罕见的事件必然会发生。但是不要把你的钱押在他们身上。
6.相关性并不意味着因果关系
你能相信吗——自闭症是由有机食品引起的。很好。或者事实正好相反。自闭症会增加有机食品的销量吗?不完全是。或者也许。
仅仅因为两个变量一前一后一起移动并不一定意味着一个导致另一个。
相关性并不意味着因果关系。
这是数据科学家工具箱中的圣杯。
过去也有过类似的搞笑例子。我最喜欢的一些是:
- 查看消防队的数据,你可以推断出派往火灾现场的消防员越多,造成的损失就越大。
- 一位学者在调查 80 年代纽约市的犯罪原因时,发现严重犯罪的数量和街头小贩卖冰淇淋的数量之间有一种 的强烈关联! 显然,有一个不可观测的变量导致了这两者。夏天是犯罪最严重的时候,也是冰淇淋卖得最多的时候。所以卖冰淇淋不会导致犯罪。这两种犯罪都没有增加冰淇淋的销量。
跟我重复:相关并不意味着因果关系。
如果你想了解更多关于数据科学和机器学习的知识,我想调出吴恩达的这个 精品课程 。这是我开始的原因。一定要去看看。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。
在 媒体 关注我或者订阅我的 博客 了解他们。
一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系到我。
Andrew NG 书中的 6 个概念:“机器学习的向往”
原文:https://towardsdatascience.com/6-concepts-of-andrew-ngs-book-machine-learning-yearning-abaf510579d4?source=collection_archive---------4-----------------------
《深度学习时代 AI 工程师的技术策略》
机器学习向往的是关于结构化开发机器学习项目。这本书包含在其他地方很难找到的实用见解,以一种易于与队友和合作者分享的格式。大多数技术人工智能课程会向你解释不同的 ML 算法是如何工作的,但这本书会教你如何实际使用它们。如果你渴望成为人工智能领域的技术领袖,这本书将帮助你。从历史上看,学习如何对人工智能项目做出战略决策的唯一方法是参加研究生课程或在公司工作获得经验。机器学习的渴望有助于你快速获得这项技能,使你能够更好地建立复杂的人工智能系统。
目录
- 关于作者
- 介绍
- 概念 1:迭代,迭代,迭代…
- 概念 2:使用单一评估指标
- 概念 3:错误分析至关重要
- 概念 4:定义最佳错误率
- 概念 5:致力于人类能做好的问题
- 概念 6:如何分割数据集
- 摘要
关于作者
Andrew NG 是一名计算机科学家、高管、投资者、企业家,也是人工智能领域的领先专家之一。他是百度的前副总裁兼首席科学家,斯坦福大学的兼职教授,最受欢迎的机器学习在线课程之一的创始人,Coursera.com 的联合创始人和谷歌大脑的前负责人。在百度,他积极参与将他们的人工智能团队扩大到几千人。
简介
这本书以一个小故事开始。想象一下,你想作为一个公司来建立领先的 cat 探测器系统。您已经构建了一个原型,但不幸的是,您的系统性能并不是很好。您的团队就如何改进系统提出了几个想法,但是您不知道应该遵循哪个方向。你可以建造世界领先的 cat 探测器平台,或者浪费几个月的时间沿着错误的方向前进。
这本书告诉你如何在这种情况下做出决定并分清轻重缓急。根据 Andrew NG 的说法,大多数机器学习问题都会留下关于最有希望的下一步以及你应该避免做什么的线索。他继续解释说,学习“阅读”这些线索是我们领域的一项关键技能。
简单来说,ML 向往就是让你深刻理解设定机器学习项目的技术方向。
因为当你提出新的想法时,你的团队成员可能会持怀疑态度,所以他把章节写得很短(1-2 页),这样你的团队成员就可以在几分钟内阅读,理解概念背后的想法。如果你有兴趣阅读这本书,请注意,它不适合完全的初学者,因为它需要对监督学习和深度学习有基本的熟悉。
在这篇文章中,我将出于我的理解,用我自己的语言分享这本书的六个概念。
概念 1:迭代,迭代,迭代…
NG 在整本书中强调,快速迭代至关重要,因为机器学习是一个迭代过程。与其考虑如何为你的问题构建完美的 ML 系统,不如尽快构建一个简单的原型。如果你不是问题领域的专家,这一点尤其正确,因为很难正确猜测最有希望的方向。
你应该在几天内构建第一个原型,然后会弹出一些线索,向你展示改进原型性能的最有希望的方向。在下一次迭代中,您将基于这些线索中的一个来改进系统,并构建它的下一个版本。你会一次又一次地这样做。
他继续解释说,你迭代得越快,你取得的进步就越大。本书的其他概念都是建立在这个原则之上的。请注意,这是为那些只想建立一个基于人工智能的应用程序,而不是在该领域做研究的人准备的。
概念 2:使用单一评价指标
这个概念建立在前一个概念的基础上,关于为什么你应该选择一个单一数字评估指标的解释非常简单:它使你能够快速评估你的算法,因此你能够更快地迭代。使用多种评估指标只会使比较算法变得更加困难。
假设你有两个算法。第一个的准确率为 94%,召回率为 89%。第二种准确率为 88%,召回率为 95%。
在这里,如果你不选择一个单一的评价指标,没有一个分类器是明显优越的,所以你可能需要花一些时间来弄清楚。问题是,在每次迭代中,你都为这个任务损失了很多时间,而且从长远来看,这种情况会越积越多。你会尝试很多关于架构、参数、特性等的想法。如果您使用单一数字评估指标(如 precision 或 f1 分数),它使您能够根据性能对所有模型进行排序,并快速决定哪一个工作得最好。改进评估过程的另一种方法是将几个度量组合成一个度量,例如,对多个误差度量进行平均。
然而,会有需要满足多个度量的 ML 问题,例如:考虑运行时间。NG 解释说,您应该定义一个“可接受的”运行时间,这使您能够快速挑选出太慢的算法,并根据您的单个数字评估指标将满意的算法相互比较。
简而言之,单一数字评估指标使您能够快速评估算法,从而更快地迭代。
概念 3:错误分析至关重要
错误分析是查看算法输出不正确的例子的过程。例如,假设你的猫探测器把鸟误认为猫,而你已经有了几个解决这个问题的方法。
通过适当的错误分析,您可以估计一个改进的想法实际上会提高系统的性能多少,而不必花费几个月的时间来实现这个想法,也不会意识到它对您的系统并不重要。这使你能够决定哪一个想法是最好的花费你的资源。如果你发现只有 9%的误分类图像是鸟类,那么无论你如何改进你的算法在鸟类图像上的性能都没有关系,因为它不会改进超过 9%的错误。
此外,它使您能够快速判断几个并行改进的想法。您只需要创建一个电子表格,并在检查时填写它,例如,检查 100 个错误分类的 dev 集图像。在电子表格中,你为每一张错误分类的图片创建一行,为每一个你想改进的想法创建几列。然后你仔细检查每一张分类错误的图片,并用哪个想法标记这张图片会被正确分类。
之后,你确切地知道,例如,对于 idea-1,系统将正确分类 40 %的误分类图像,idea-2 为 12%,idea-3 仅为 9%。那么你就知道在想法 1 上工作是你的团队应该努力的最有希望的改进。
此外,一旦你开始浏览这些例子,你可能会发现如何改进你的算法的新想法。
概念 4:定义最佳差错率
最佳错误率有助于指导您的后续步骤。在统计学中,它也经常被称为贝叶斯错误率。
想象一下,你正在建立一个语音到文本的系统,你发现 19%的音频文件,你希望用户提交,有这么大的背景噪音,甚至人类都不能识别在那里说了什么。如果是这样的话,你知道即使是最好的系统也可能有 19%左右的误差。相比之下,如果你处理一个最优错误率接近 0%的问题,你可以希望你的系统也能做得一样好。
它还帮助您检测您的算法是否存在高偏差或方差,这有助于您定义改进算法的后续步骤。
但是我们怎么知道最优的错误率是多少呢?对于人类擅长的任务,您可以将您的系统性能与人类的性能进行比较,这将为您提供最佳错误率的估计值。在其他情况下,通常很难定义一个最佳速率,这就是为什么你应该致力于人类可以做得很好的问题,我们将在下一个概念中讨论。
概念 5:解决人类擅长的问题
在整本书中,他几次解释了为什么建议研究人类自己也能做好的机器学习问题。例子有语音识别、图像分类、物体检测等等。这有几个原因。
首先,更容易获得或创建带标签的数据集,因为如果人们能够自己解决问题,他们可以直接为您的学习算法提供高精度标签。
第二,你可以使用人的表现作为你的算法想要达到的最佳错误率。NG 解释说,定义一个合理且可实现的最佳误差有助于加速团队的进展。它还可以帮助您检测您的算法是否存在高偏差或方差。
第三,它使你能够基于你的人类直觉进行错误分析。例如,如果您正在构建一个语音识别系统,而您的模型对其输入进行了错误分类,您可以尝试理解人类将使用哪些信息来获得正确的转录,并使用这些信息来相应地修改学习算法。尽管算法在越来越多人类自己做不好的任务上超越了人类,但你应该尽量避免这些问题。
总而言之,您应该避免这些任务,因为这使得获取数据标签变得更加困难,您不能再依靠人类的直觉,并且很难知道最佳的错误率是多少。
概念 6:如何分割数据集
NG 还提出了一种分割数据集的方法。他建议如下:
训练集:有了它,你就训练了你的算法,仅此而已。
开发集:该集用于进行超参数调整,选择和创建适当的特征,并进行错误分析。它基本上是为你的算法做决定。
测试集:测试集是用来评估你的系统的性能,而不是用来做决策的。只是为了评价,没别的。
开发集和测试集允许您的团队快速评估您的算法执行得有多好。它们的目的是引导你对你的系统进行最重要的改变。
他建议选择开发和测试集,这样一旦你的系统被部署,它们就能反映你希望在未来做得更好的数据。如果您预期数据将与您现在训练的数据不同,这一点尤其正确。例如,您正在训练正常的相机图像,但随后您的系统将只接收手机拍摄的照片,因为它是移动应用程序的一部分。如果您没有足够的手机照片来训练您的系统,就会出现这种情况。因此,您应该选择反映您希望以后在现实中表现良好的测试集示例,而不是您用于训练的数据。
此外,您应该选择来自同一个发行版的开发和测试集。否则,您的团队可能会构建出在开发环境中表现良好的东西,却发现它在您最关心的测试数据上表现极差。
摘要
在这篇文章中,你已经了解了机器学习渴望的 6 个概念。现在你知道了,为什么快速迭代是重要的,为什么你应该使用一个单一的评估指标,错误分析是什么,为什么它是至关重要的。此外,您还了解了最佳错误率,为什么您应该研究人类可以做得很好的问题,以及您应该如何分割您的数据。此外,您还了解到您应该挑选开发和测试集数据,以便它们反映您希望在未来做得更好的数据,并且开发和测试集应该来自同一个发行版。我希望这篇文章给你介绍了这本书的一些概念,我可以肯定地说,这本书值得一读。
【https://machinelearning-blog.com】这个帖子最初发表在我的博客上(【T10”)。
来源
- 机器学习的向往https://www.mlyearning.org/
- Img: "Andrew NG": T 由 NVIDIA Corporation 根据" CC BY-NC-ND 2.0 "许可证获得。未进行任何更改。链接:https://www.flickr.com/photos/nvidia/16841620756
- img:" Metric ":https://pix abay . com/de/antri EB-auto-verk EHR-stra % C3 % 9Fe-44276/
- Img:“数学错误”:https://pixabay.com/de/fehler-mathematik-1966460/
帮助您编制出色财务报表的 6 种数据分析方法
原文:https://towardsdatascience.com/6-data-analysis-methods-to-help-you-make-great-financial-statements-2bd573a19b17?source=collection_archive---------5-----------------------
这一年就要结束了,如果你们中的任何一个人在公司的财务会计相关部门工作,你们必须忙于准备各种年度财务报表。特别是对于刚进入这一领域的初学者来说,如何设计报表以清晰地显示财务分析和业务运营状况是一个挑战。
在财务报表中,与传统的密集表格相比,图表可以将数据可视化,更直观地显示数据,使数据的比较、趋势和结构一目了然。本文从汇总数据分析、发展趋势分析、数据对比分析、构成分析、进度分析、地图分析等方面分析了财务报表中的类图表。我希望我们所有人都能在年底提交非常好的财务报表。
(注意:本文中的所有图表和仪表盘均采用 BI 报告工具 FineReport 。)
1.汇总数据分析
汇总数据分析通常用于计算关键的核心指标,如公司的年经营收入、年消费成本和年净利润,这些往往是决策者最关心的数据。
如下图所示,我们使用 FineReport 的仪表盘组件来计算三个核心指标:公司的年总收入、年成本和净利润。我们将仪表板的最大范围设置为总收入 2.78 亿英镑,并启用了显示百分比的功能。这样,消费成本比率和利润率这两个指标会自动显示出来。
下面是另一个汇总数据分析示例。
From FineReport
2.发展趋势分析
发展趋势分析通常用于直观地比较企业某一连续区间的财务经营数据或财务比率趋势,了解企业财务状况随时间变化的趋势。一方面可以分析数据增减是否存在异常,发现企业可能存在的问题。另一方面,也可以帮助企业预测未来的财务状况,判断发展前景。
我们一般用折线图来表示公司的发展趋势。横轴表示时间(年、月、日),纵轴表示运营收入、成本和盈利能力等指标。
以下仪表板报告是一个结合了汇总数据分析和发展趋势分析的示例。
From FineReport
3.数据比较分析
数据没有对比就没有价值,企业财务分析也是如此。通过各项指标的比较,揭示公司的财务状况、经营状况和现金流量。一般来说,比较分析的参考标准如下。
- 时间对比:与前期和去年同期的实际数据进行对比。
- 实体对比:与同行业先进公司的数据进行对比。
- 结果比较:与计划或预算数据进行比较。
- 结构比较:在成分分析的基础上,比较两个数据的结构,分析财务指标的变化。
条形图和直方图经常被推荐用于数据比较分析。此外,可以根据具体情况使用其他图表,如折线图展示几家公司的存货对比情况,可以使用雷达图(适合快速对比和定位弱点)进行财务指标分类统计对比。
以下仪表板使用条形图、直方图和雷达图。我们在做财务报表分析的时候也可以参考这样一个仪表盘报表。
From FineReport
这是一个结合了圆环图、柱状图和雷达图的财务仪表板。
From FineReport
4.组成分析
构成分析通常可以用来分析每个项目的构成要素的数据,如每个产品的销售构成分析、流动资产构成分析、各部门的管理费用构成分析等。它代表了数据结构的组成。就图表而言,饼图、圆环图、百分比堆积条形图和百分比堆积直方图对于成分分析是常见的。
另外,当你既需要分析数据的组成结构,又需要分析数据的层次结构时,多级饼图无疑是最佳选择。如下图,多级饼图便于计算各省市的销售占比。
这是一份现金流报告,其中使用了饼状图和柱状图。
From FineReport
5.进度分析
在财务报表中,往往需要显示实现某项指标或某项任务的进展情况,如部门的业绩和报告费用的进展情况。在这种情况下,我们可以使用堆积柱形图、堆积条形图和甘特图来显示数据。
6.地图分析
最后,我将介绍与地图相关的数据分析方法。对于大企业来说,除了总部,还有遍布全国甚至全球的分公司。在这种情况下,使用地图来分析基于地理位置的数据更合适。
From FineReport
- 流程图
流图显示流出区域和流入区域之间的交互数据。通常用连接空间元素几何重心的线来表示。线条的宽度或颜色表示流量值。
流量图多用于区域贸易、交通流量、人口迁移、购物消费行为、通讯信息流、航空航线等。
From FineReport
- 热图
热图用于指示地理区域中每个点的权重。除了地图作为背景层,你也可以使用其他图像。热图中的颜色通常是指密度。
最后
以上是我们在做财务报表时常用的六种数据分析方法及对应的图表,可以作为你做数据分析统计时的参考。另外,本文中的图表是用 BI 报表工具 FineReport 制作的。它的个人版是免费下载使用的,并且提供了很多模板供新手学习。你可以自己试试。
您可能也会对…感兴趣
让你的数据报告脱颖而出的指南
2019 年 6 大数据分析工具
初学者财务报表分析指南
2019 年你不能错过的 9 个数据可视化工具
新手如何打造一个很棒的仪表盘?
6 项数据科学技能,让您的职业生涯更上一层楼
原文:https://towardsdatascience.com/6-data-science-skills-to-take-your-career-to-the-next-level-c100610b4014?source=collection_archive---------12-----------------------
超越机器学习和编程
曾经有一段时间,想要在数据科学领域找到一份工作,你需要的只是基本的 R 或 Python 技能,以及相当于普通 MOOC 内容的机器学习知识。
我听说是这样。我没有足够的运气那么早进入数据科学领域。
我第一次听说数据科学是在 2015 年,在托马斯·h·达文波特(Thomas H. Davenport)和 D.J .帕蒂尔(D.J. Patil)将数据科学家命名为“21 世纪最性感的工作”近三年后,到那时,数据科学职位的竞争已经开始变得激烈。
随着对数据科学的兴趣逐年增长,许多大学现在都在提供数据科学和分析的硕士学位,我认为可以肯定地说,竞争从那时起变得更加激烈。
也可以肯定地说,完成 Coursera 数据科学专业不再足以让你的简历脱颖而出。
因此,如果你已经可以像老板一样编程,并且你已经完成了如此多的机器学习课程,以至于随机森林和神经网络经常出现在你的梦里,那么你接下来应该专注于哪些技能,以便为你的第一份数据科学工作铺平道路,并在到达那里后进一步提升?
我们为什么不问问雇主呢?
数据科学家最重要的技能
为了了解雇主在数据科学家中寻找什么,我检查了 2019 年 4 月 22 日至 2019 年 5 月 5 日期间在 LinkedIn 上发现的四个英语国家(澳大利亚、加拿大、英国和美国)的 100 份数据科学招聘广告。
招聘广告的选择代表了雇主类型、规模、行业和工作级别的广泛代表性,不考虑纯粹的管理角色。
从这些招聘广告中,我手动提取了作为选择标准或角色日常职责列出的技能的详细信息,并根据它们出现在招聘广告中的比例,确定了最受欢迎的 20 项数据科学技能(不包括编程语言和技术)。
他们在这里:
这些技能可以大致分为三类:
- 建模和统计:包括机器学习、统计建模和模型部署;
- 数据工程(和编程):包括数据争论、使用数据库和分布式计算(如果我们在分析中包括了编程语言,我也会把它们放在这里);和
- 沟通和专业知识:包括提供见解、行业知识以及领导和指导初级员工。
在此基础上,您可以确定六项可以培养的技能,从而在这三个类别中培养您的数据科学能力,显著改善您的就业前景:
建模和统计
- 统计建模
- 模型部署
数据工程
- 使用数据库
通信与工程
- 从数据中获得洞察力
- 领导和指导初级团队成员
- 沟通
(如果你想了解为什么这些技能很重要以及你可以做些什么来发展它们,请查看这篇文章:如何成为数据科学的三重威胁)。
应该先重点学习哪些技能?
在我提取的 100 个数据科学招聘广告中,有 15 个是入门级角色(定义为标题中带有“初级”、“研究生”、“实习生”或类似名称的角色);44 人担任中级职务;41 个是高级职位(定义为头衔中有“高级”、“主要”、“领导”或类似的职位)。
下表显示了招聘广告中提及之前确定的六种技能的比例,以及每种技能的排名。
在所有工作级别中,“演示和沟通”一直是数据科学雇主寻求的两大技能之一。此外,随着工作资历的增加,与沟通相关的技能“向非技术受众解释技术概念”和“与客户/利益相关者合作”都变得越来越重要。
因此,显而易见的是,如果你必须选择一项技能来首先专注于学习,那么沟通将是一条出路。
但是为什么只停留在一个呢?
“统计建模/技术”也是所有工作级别的前三大技能之一,是技能发展活动的良好候选,尤其是对处于职业生涯早期阶段的数据科学家而言。
从初级职位到中级职位,提及“统计建模/技术”作为理想技能的招聘广告比例从 53.3%增加到 86.4%。
然而,对于那些希望进入高级职位的人来说,发展领导和指导初级团队成员所需的技能可能是一个更好的选择,特别是对于那些已经发展了统计技能的人来说。
虽然只有 6.7%的入门级数据科学职位需要领导/指导技能,但 58.5%的高级职位需要这些技能(增加了 873%),这使它们成为该级别第五大技能。
结论
掌握上面提到的所有技能可能需要一些时间,但没关系。如果您可以在一个周末内掌握关于数据科学的所有知识,您真的愿意花费数年时间从事数据科学家的工作吗?
然而,通过一次只专注于一两项技能,每周只花几个小时来发展它们,最终你会建立起一套受欢迎的技能,这将帮助你脱颖而出,增加你获得下一个数据科学职位或晋升的机会。
你打算首先关注哪项技能?
Genevieve Hayes 博士是数据科学家、教育家和人工智能及分析专家,拥有Genevieve Hayes Consulting。你可以在LinkedIn或者Twitter上关注她。她还是 价值驱动数据科学 的主持人,这是一个每月两次的播客,面向希望最大化其数据和数据团队价值的企业。
想要发掘企业数据的价值,但不知道从哪里开始?**下载免费的数据科学项目发现指南。
6 种深度学习模型——什么时候应该使用它们?
原文:https://towardsdatascience.com/6-deep-learning-models-10d20afec175?source=collection_archive---------2-----------------------
Photo by Terry Vlisidis on Unsplash
如何以及何时使用不同的深度学习模型。
从人工神经网络到自动编码器
介绍
深度学习是一个不断发展的领域,其应用跨越了许多用例。对于这个领域的任何新手来说,了解和理解深度学习中使用的不同类型的模型是很重要的。在本文中,我将解释以下每个模型:
监督模型
- 经典神经网络(多层感知器)
- 卷积神经网络
- 递归神经网络
无监督模型
- 自组织映射(SOMs)
- 玻尔兹曼机器
- 自动编码器
监督与非监督模型
有许多特征可以区分这两者,但最重要的区别在于这些模型是如何训练的。虽然监督模型是通过特定数据集的示例来训练的,但非监督模型只给定了输入数据,没有可以学习的结果集。所以我们一直试图预测的 y 柱,在无监督的模型中是不存在的。监督模型具有回归和分类等任务,并将生成公式,而非监督模型具有聚类和关联规则学习。
经典神经网络(多层感知器)
经典的神经网络也可以被称为多层感知器。感知器模型是美国心理学家弗兰克·罗森布拉特在 1958 年创造的。它的独特性质允许它通过一系列输入来适应基本的二进制模式,模拟人脑的学习模式。多层感知器是由两层以上组成的经典神经网络模型。
何时使用
- 行和列格式的表格数据集(CSV 文件)
- 给定一组实值作为输入的分类和回归问题。
- 您的模型需要更高的灵活性。人工神经网络可以应用于不同类型的数据。
点击这里学习如何用 Python 从头开始构建 ANN。
卷积神经网络
卷积神经网络(CNN)是经典人工神经网络的一种更强大、更高级的变体,旨在处理大量复杂的预处理和数据计算。
CNN 是为图像数据设计的,可能是图像分类问题中最有效和最灵活的模型。尽管 CNN 并不是专门为处理非图像数据而构建的,但它们也可以用非图像数据获得令人惊叹的结果。
将输入数据导入模型后,构建 CNN 有 4 个部分:
1 .卷积:从我们的输入数据中创建特征图的过程。然后应用一个函数来过滤地图。
2。 Max-Pooling :使我们的 CNN 能够检测到修改后的图像。
3。展平:将数据展平成一个数组,这样 CNN 就可以读取了。
4。全连接:隐藏层,也为我们的模型计算损失函数。
何时使用
- 图像数据集(包括 OCR 文档分析)。
- 输入数据是一个二维字段,但可以在内部转换为一维,以便更快地处理。
- 当模型在计算输出时可能需要很大的复杂性时。
点击这里学习如何用 Python 从头开始构建 CNN。
递归神经网络
递归神经网络(RNNs)是为预测序列而发明的。LSTM(长短期记忆)是一种流行的 RNN 算法,有许多可能的用例:
何时使用:
- 一对一:单个输入映射到单个输出。
例如—图像分类 - 一对多:单个输入映射到一系列输出。
例如——图像字幕(单幅图像中的多个单词) - 多对一:一系列的输入产生单一的输出。
例如——情感分析(多个单词的二进制输出) - 多对多:一个输入序列产生一个输出序列。
例如,视频分类(将视频分割成帧,并分别标记每一帧)
自组织地图
自组织映射或 som 处理无监督的数据,通常有助于降维(减少模型中的随机变量)。对于自组织地图,输出维度始终是二维的。因此,如果我们有两个以上的输入特征,输出减少到二维。每个连接输入和输出节点的突触都有一个权重。然后,每个数据点竞争模型中的表示。最近的节点称为 BMU(最佳匹配单元),SOM 更新其权重以更接近 BMU。随着模型的进展,BMU 的邻居不断减少。节点越靠近 BMU,其权重变化越大。
注:权重是节点本身的一个特性,它代表节点在输入空间中的位置。这里没有激活函数(权重不同于人工神经网络中的权重)。
何时使用:
- 当提供的数据不包含输出或 Y 列时。
- 探索项目,了解数据集背后的框架。
- 创意项目(AI 制作的音乐/文字/视频)。
- 用于特征检测的降维方法。
点击此处查看自组织地图的示例
玻尔兹曼机器
在上面的 4 个模型中,有一个共同点。这些模型在某个方向起作用。即使 som 是无监督的,它们仍然像有监督的模型一样在特定的方向上工作。我说的方向是指:
输入→隐藏层→输出。
玻尔兹曼机器并不遵循某个方向。所有的节点在一个圆形的超空间中相互连接,就像图中一样。
玻尔兹曼机器也可以生成模型的所有参数,而不是用固定的输入参数工作。
这种模型被称为随机模型,不同于上述所有确定性模型。受限玻尔兹曼机更实用。
何时使用:
- 监控系统时(因为 BM 将学会调节)
- 构建二元推荐系统
- 当处理一组非常具体的数据时
自动编码器
自动编码器的工作原理是基于输入值自动编码数据,然后执行激活功能,最后解码数据以输出。对输入要素施加了某种瓶颈,将它们压缩成更少的类别。因此,如果数据中存在某种固有结构,自动编码器模型将识别并利用它来获得输出。
自动编码器的类型/变化:
- 稀疏自动编码器:隐藏层大于输入层,但应用了正则化技术来减少过拟合。对损失函数添加约束,防止自动编码器一次使用其所有节点。
- 去噪自动编码器:另一种正则化技术,其中我们采用我们的输入值的修改版本,其中我们的一些输入值随机变为 0。
- 收缩自动编码器:当隐藏层大于输入层时,为损失函数增加一个惩罚,以防止值的过度拟合和复制。
- 堆叠自动编码器:当你添加另一个隐藏层时,你得到一个堆叠自动编码器。它有两个编码阶段和一个解码阶段。
何时使用:
- 维度缩减/特征检测
- 构建强大的推荐系统(比 BM 更强大)
- 对海量数据集中的要素进行编码
链接
感谢阅读!希望你学到了新的有用的东西。
[## 我如何在一对一、一对多、多对一、多对一和多对多之间选择…
答:这取决于应用。引用 Andrej(来自循环神经的不合理有效性…
www.quora.com](https://www.quora.com/How-can-I-choose-between-one-to-one-one-to-many-many-to-one-many-to-one-and-many-to-many-in-long-short-term-memory-LSTM) [## SOM 教程第 1 部分
Kohonen 的自组织特征图“我无法清楚地表达我对那些认为……
www.ai-junkie.com](http://www.ai-junkie.com/ann/som/som1.html) [## 何时使用 MLP、CNN 和 RNN 神经网络
什么样的神经网络适合你的预测建模问题?对初学者来说……可能很难
machinelearningmastery.com](https://machinelearningmastery.com/when-to-use-mlp-cnn-and-rnn-neural-networks/) [## 自动编码器介绍。
自动编码器是一种无监督的学习技术,其中我们利用神经网络来完成表示的任务…
www.jeremyjordan.me](https://www.jeremyjordan.me/autoencoders/)
关注更多机器学习/AI 相关内容
罗汉·古普塔
补偿数据集中缺失值的 6 种不同方法(数据插补,附示例)
原文:https://towardsdatascience.com/6-different-ways-to-compensate-for-missing-values-data-imputation-with-examples-6022d9ca0779?source=collection_archive---------0-----------------------
Photo by Vilmos Heim on Unsplash
统计估算数据集中缺失值的常用策略。
由于各种原因,许多现实世界的数据集可能包含缺失值。它们通常被编码为名词、空格或任何其他占位符。使用具有大量缺失值的数据集来训练模型会极大地影响机器学习模型的质量。一些算法如 scikit-learn 估计器假设所有的值都是数字的,并且拥有有意义的值。
处理这个问题的一个方法是去掉有缺失数据的观测值。但是,您可能会丢失包含有价值信息的数据点。更好的策略是估算缺失值。换句话说,我们需要从数据的现有部分推断出那些缺失的值。缺失数据主要有三种类型:
- 完全随机失踪(MCAR)
- 随机失踪(三月)
- 不是随意失踪(NMAR)
然而,在这篇文章中,我将重点介绍 6 种流行的横截面数据集的数据插补方法(时间序列数据集是一个不同的故事)。
1-什么都不做:
这很简单。你只是让算法处理丢失的数据。一些算法可以考虑缺失值,并基于训练损失减少(即 XGBoost)。有些人可以选择忽略它们(即。light GBM—use _ missing = false。然而,其他算法会惊慌失措,并抛出一个报错值(即。Scikit learn —线性回归)。在这种情况下,您需要处理丢失的数据,并在将它提供给算法之前对其进行清理。
让我们看看在训练前估算缺失值的其他方法:
注意:下面所有的例子都使用了 Scikit-learn 的 加州住房数据集 。
2-使用(平均值/中值)的插补:
其工作原理是计算一列中非缺失值的平均值/中值,然后独立地替换每列中缺失的值。它只能用于数值数据。
Mean Imputation
优点:
- 简单快捷。
- 适用于小型数值数据集。
缺点:
- 不考虑特征之间的相关性。它只在列级别有效。
- 将对编码的分类特征给出较差的结果(不要对分类特征使用它)。
- 不太准确。
- 没有考虑插补的不确定性。
Mean/Median Imputation
3-使用(最频繁)或(零/常数)值的插补:
最常见的是另一种估算缺失值的统计策略,没错!!它通过用每列中最频繁的值替换缺失数据来处理分类特征(字符串或数字表示)。
优点:
- 适用于分类特征。
缺点:
- 它也没有考虑特征之间的相关性。
- 它会在数据中引入偏差。
Most Frequent Imputation
零或常数插补——顾名思义——用零或您指定的任何常数值替换缺失值
4-使用 k-NN 的插补:
k 最近邻是一种用于简单分类的算法。该算法使用“特征相似度来预测任何新数据点的值。这意味着根据新点与训练集中的点的相似程度为其赋值。这对于预测缺失值非常有用,方法是找到与缺失数据的观测值最接近的 k 的邻域,然后基于邻域中的非缺失值对其进行输入。让我们看一些使用[Impyute](https://impyute.readthedocs.io/en/master/#)
库的示例代码,该库提供了一种使用 KNN 进行插补的简单易行的方法:
KNN Imputation for California Housing Dataset
它是如何工作的?
它创建一个基本的均值估算,然后使用生成的完整列表来构建一个 KDTree。然后,它使用生成的 KDTree 来计算最近邻(NN)。在找到 k-nn 之后,它对它们进行加权平均。
优点:
- 可能比平均值、中间值或最常见的插补方法更准确(取决于数据集)。
缺点:
- 计算开销很大。KNN 的工作原理是将整个训练数据集存储在内存中。
- K-NN 对数据中的异常值非常敏感(不同于 SVM )
5-使用链式方程多元插补的插补(小鼠)
Main steps used in multiple imputations [1]
这种类型的插补通过多次填充缺失数据来实现。多重插补(MIs)比单一插补好得多,因为它以更好的方式衡量缺失值的不确定性。链式方程方法也非常灵活,可以处理不同数据类型的不同变量(即连续或二进制)以及诸如边界或勘测跳跃模式的复杂性。关于算法机制的更多信息,你可以参考 R 研究论文
MICE imputation using impyute
6-使用深度学习的插补(数据偏移):
这种方法非常适用于分类和非数字特征。它是一个库,使用深度神经网络学习机器学习模型,以估算数据帧中的缺失值。它还支持 CPU 和 GPU 进行训练。
Imputation using Datawig
优点:
- 与其他方法相比相当准确。
- 它有一些可以处理分类数据的函数(特征编码器)。
- 它支持 CPU 和 GPU。
缺点:
- 单列插补。
- 对于大型数据集可能会非常慢。
- 您必须指定包含要估算的目标列信息的列。
其他插补方法:
随机回归插补:
它与回归插补法非常相似,回归插补法试图通过从同一数据集中的其他相关变量加上一些随机残差值进行回归来预测缺失值。
外推和内插法:
它试图从一组离散的已知数据点范围内的其他观察值中估计值。
热卡插补:
工作原理是从一组相关和相似的变量中随机选择缺失值。
总之,没有完美的方法来补偿数据集中缺失的值。对于某些数据集和缺失数据类型,每种策略的性能都较好,但对于其他类型的数据集,性能可能会差得多。有一些固定的规则来决定对特定类型的缺失值使用哪种策略,但除此之外,您应该试验并检查哪种模型最适合您的数据集。
参考文献:
- [1] Buuren,S. V .,& Groothuis-oudshorn,K. (2011 年)。Mice:用链式方程进行多变量插补
- https://impyute.readthedocs.io/en/master/index.html
6-在您的组织中成功实施机器学习解决方案的基本实践。
原文:https://towardsdatascience.com/6-essential-practices-to-successfully-implement-machine-learning-in-your-organization-cfba8d7cafbb?source=collection_archive---------19-----------------------
成功成为人工智能驱动企业的高管指南。
Executive’s Guide To Machine Learning
介绍
McKinsey Insights 最近发布了其全球人工智能调查,并讨论了人工智能对多家公司产生的影响的许多方面。真正吸引我眼球的是人工智能高性能公司与其他公司之间的比较。根据所做的比较,拥有清晰的企业级用例路线图、分析&业务部门之间稳固的跨职能协作、供专业人士使用的标准人工智能工具集、了解频繁更新人工智能模型并系统跟踪一套全面的定义良好的人工智能 KPI 的公司比市场上的其他公司表现好 3.78 倍。
这项调查的结果与我们在m trons与多家公司合作的经历极其一致。我很高兴地说,我们合作的大多数公司都在成为人工智能高绩效者的明确轨道上。为了达到 AI 高绩效状态,我们设计了六个基本实践,为我们的客户带来了成功的结果。
01.建立一个与企业级目标一致的强大人工智能战略
“机器学习不是魔法”
我们已经看到许多高管一头扎进从头开始构建机器学习程序。但是很棘手。它需要大量的前期投资、最小化信息不对称、最小化惯性、清晰的路线图和利益一致。
这里的关键是建立一个与你的公司目标一致的战略。公司需要理解,为了建立强大的数据战略并使其与公司级目标保持一致,it 需要将各种利益相关者聚集在一起,并在制定战略时查看经验数据。通过定义明确的目标和了解所需的基础设施,公司可以成功地评估此类计划的成功概率。这就把我们带到了下一点。
02.定义清晰的目标和用例
提前定义你的机器学习目标!句号。没有对自己想要达到的目标的清晰认识,就很难衡量成功。例如,一家公司可能希望实现总收入增加 20%或成本降低 10%。这是公司层面的目标。现在,管理层可以轻松决定直接影响收入或成本的用例,例如,优化营销活动以增加总体收入,或通过准确预测房价来增加房地产投资回报。通过清晰地定义路线图,成功的概率会增加,失败的风险会降低 40%以上。
03.定义数据质量标准
这里有一条黄金法则需要记住:机器学习算法的好坏取决于它得到的数据。因此,为了有效地使用机器学习,你必须拥有你试图解决的问题的正确数据。而不仅仅是几个数据点。机器需要大量的数据来学习——想想成百上千的数据点。
您的数据需要针对算法进行格式化、清理和组织,并且您需要两个数据集:一个用于训练模型,另一个用于评估模型的性能。因此,在挑选出用例之后,筛选出那些有数据可用的用例,以及那些能够快速全面产生价值的用例。争取多个较小的成功,并制定明确的数据战略。
04.利用组织内的数据分析师&商业智能专家
公民数据科学家(Citizen Data Scientist)是 Gartner 创造的一个术语,指的是需要或希望实现机器学习技术的数据分析专业人员或数据专业人员。
这些专业人员通常是数据分析师或 BI 分析师。他们专注于在已经发生的事件的数据中寻找趋势(描述性分析),并在仪表板、静态报告和图表中表达他们的结果。
他们通常在销售、营销、财务或人力资源等业务部门工作,对其部门面临的业务挑战有着深入的了解。
为什么公民数据科学家很重要?
由于全球缺乏训练有素的数据科学家,您需要为您的数据分析专业人员和其他领域信息专家提供成为公民数据科学家所需的工具和支持。
然而,现在有了强大的工具,使他们能够使用比数据分析专业同行更具深度和广度的数据来解决业务问题。
Gartner 估计,到 2020 年,超过 40%的数据科学任务将实现自动化
m trons+公民数据科学家
数据分析专业人员具有深厚的领域专业知识,并认识到其部门的核心业务挑战。他们对可用数据有很好的理解,但不能经常执行一些区分分析师和公民数据科学家的数据科学任务。
Mltrons 的简化和自动化机器学习平台复制了通常由专家数据科学家手动执行的任务和流程,允许用户快速实施机器学习解决方案,而无需编写一行代码。
公民数据科学家只需上传一个数据集,并根据他们希望解决的实际业务问题选择一个目标变量。
Mltrons 的平台自动应用数据准备、预处理、特征工程、模型训练和验证的最佳实践。
然后,该平台会自动选择最适合的算法,并揭示通常未被注意到的见解,同时用所有相关利益方都能理解的简单语言解释结果。
05.围绕数据建立你的文化&人工智能
各部门的分析专业人员有能力确定机器学习的最佳用例,然后他们可以使用 mltrons 平台来构建和实施机器学习模型。
为了在您的组织中充分利用机器学习,您需要拥有正确心态的正确团队。后者需要文化转变,在整个组织中优先考虑和奖励实验、测量和测试。从机器学习中产生价值是一个需要时间和持续监控的过程。通过由充满激情的个人组成的专门团队全面实施人工智能,成功的概率会大大增加。
06。起步快,迭代快!
随着数据量的增加和对更深入洞察的需求,组织需要立即采取行动。有了机器学习,就有可能快速自动地产生模型,这些模型可以分析更大、更复杂的数据,并提供更快、更准确的结果——规模化。通过建立精确的模型,组织有更好的机会识别有利可图的机会。
竞争日益激烈,人才短缺,因此,如果公司希望在今天的数据时代保持相关性,他们需要迅速行动,开始建立自己的人工智能战略。
最终意见
我希望你喜欢这篇文章,并发现它的信息。我们祝你的人工智能之旅一切顺利。遵循一个结构化的框架并衡量你的成功,我们确信你的人工智能计划将会非常成功!
如果您有任何问题或疑问,请随时联系我们。你可以访问这个网站了解更多。
参考
https://www . McKinsey . com/featured-insights/artificial-intelligence/global-ai-survey-ai-provides-its-worth-but-less-scale-impact
[## 优化营销活动以增加收入| mltrons
如果您使用 Excel、Tableau、SQL 等工具,并且对您的业务和数据有很好的理解,那么您已经…
www.mltrons.com](https://www.mltrons.com)
https://www . mltrons . com/increase _ ROI _ with _ accurate _ forecasts
构建机器学习系统的六个重要步骤
原文:https://towardsdatascience.com/6-important-steps-to-build-a-machine-learning-system-d75e3b83686?source=collection_archive---------7-----------------------
Pixabay
思考 ML 项目的现场指南
创建一个伟大的机器学习系统是一门艺术。
在构建一个伟大的机器学习系统时,有很多事情需要考虑。但是经常发生的是,我们作为数据科学家只担心项目的某些部分。
大多数时候,这只是建模,但在现实中,机器学习项目的成败取决于许多其他因素。
机器学习管道不仅仅是创建模型
必须了解在训练模型之前以及在训练模型并将其部署到生产中之后会发生什么。
这篇文章是关于解释端到端数据项目管道中所涉及的内容。这是我职业生涯中很晚才学到的东西。
1.问题定义
这一条很明显——定义了一个问题。
而且,这可能是整个练习中最关键的部分。
那么,如何给机器学习定义一个问题呢?
这取决于很多因素。在我们考虑的所有因素中,第一个应该是理解 它将如何给业务带来好处 。
这是任何数据科学项目的圣杯。如果您的项目对业务没有帮助,它就不会被部署。句号。
一旦你有了想法并确定了业务兼容性,你需要 定义一个成功的衡量标准 。
现在,成功是什么样子的?
是 90%的准确率还是 95%的准确率还是 99%的准确率。
嗯,我可能对 70%的预测准确率感到满意,因为普通人永远不会超过这个准确率,同时,你可以自动化这个过程。
当心, 这不是制定远大目标的时候;现在是时候理性而明智地看待每 1%的精度变化对成功的影响了。
例如:对于点击预测问题/欺诈应用程序,与评论情绪预测准确度提高 1%相比,准确度提高 1%将提高业务底线。
并非所有精度的提高都是同等的
2.数据
在为您的机器学习模型进行数据采集和数据创建时,您需要回答几个问题。
这里要回答的最重要的问题是: 你的模型需要实时工作吗?
如果是这样的话,你就不能使用像 Hive/Hadoop 这样的系统进行数据存储,因为这样的系统可能会引入大量的延迟,并且适合离线批处理。
你的模型需要实时训练吗?
如果您的 ML 模型的性能随着时间的推移而下降,如上图所示,您可能需要考虑实时训练。RT 训练可能对大多数点击预测系统有益,因为互联网趋势变化相当快。
测试和训练数据是否存在不一致?
或者简而言之— 你怀疑生产数据来自与训练数据不同的分布?
例如:在一个点击预测问题的实时训练中,你给用户看广告,他没有点击。是失败的例子吗?也许用户通常在 10 分钟后点击。但是您已经创建了数据,并在此基础上训练了您的模型。
在为模型准备数据时,有许多因素需要考虑。你需要提出问题,从头到尾思考这个过程,这样才能在这个阶段取得成功。
3.估价
我们将如何评估模型的性能?
这里的黄金标准是训练-测试-验证的分割。
我们经常通过抽样来建立一个训练验证测试集,却忘记了一个隐含的假设——数据很少是 IID 分布的(独立同分布)。
简单来说,我们假设每个数据点都是相互独立的,并且来自同一个分布,这种假设即使不是完全错误,也是错误的。
对于一个互联网公司来说,2007 年的一个数据点和 2019 年的一个数据点是非常不同的。它们不是来自同一个发行版,因为有很多因素——网络速度是最重要的。
如果你有一个猫对狗的预测问题,你很擅长随机抽样。但是,在大多数机器学习模型中,任务是预测未来。
您可以考虑使用时间变量分割数据,而不是从数据中随机取样。例如:对于点击预测问题,您可以将截至上个月的所有过去数据作为训练数据,将上个月的数据作为验证数据。
接下来你需要考虑的是基线模型。
假设我们使用 RMSE 作为时间序列模型的评估指标。我们在测试集上评估了该模型,结果 RMSE 为 4.8。
那是好的 RMSE 吗?我们怎么知道?我们需要一个基线 RMSE。这可能来自同一任务的当前采用的模型。或者通过使用一些简单的模型。对于时间序列模型,要克服的基线是最后一天的预测。即预测前一天的数字。
对于 NLP 分类模型,我通常在 Countvectorizer(词袋)上设置基线为 Logistic 回归模型的评估度量(准确率、F1、log loss)。
你还应该考虑如何在多个小组中打破评价,这样你的模型就不会产生不必要的偏见。
去年,亚马逊因一个秘密的人工智能招聘工具出现在新闻中,该工具显示出对女性的偏见。为了从这种不一致中拯救我们的机器学习模型,我们需要在不同的组上评估我们的模型。也许我们的模型对女性没有对男性那么准确,因为在训练数据中女性的数量要少得多。
或者,一个预测某个产品是否会被购买的模型对于某个特定的产品类别非常有效,而对于其他产品类别则无效。
事先将这些事情记在心里,并准确地思考特定评估方法可能会出什么问题,这肯定会帮助我们设计一个好的 ML 系统。
4.特征
好的特征是任何机器学习模型的支柱。而且通常是你花最多时间的部分。我已经看到,这是你可以调整最大模型性能的一部分。
好的特性创建通常需要领域知识、创造力和大量时间。
除此之外,不同型号的特征创建练习可能会有所不同。例如,神经网络和 XGboost 的特征创建非常不同。
理解创建特征的各种方法本身就是一个相当大的话题。我在这里写了一篇关于特性创建的文章。请务必看一看:
[## 《搭车人特征提取指南》
对特征工程技术的详尽研究
towardsdatascience.com](/the-hitchhikers-guide-to-feature-extraction-b4c157e96631)
一旦创建了大量的特征,下一步可能要做的就是移除多余的特征。这里有一些方法做到这一点
[## 每个数据科学家都应该知道的 5 种特征选择算法
额外收获:是什么让一个优秀的足球运动员变得伟大?
towardsdatascience.com](/the-5-feature-selection-algorithms-every-data-scientist-need-to-know-3a6b566efd2)
5.建模
Interpretable ML Book
现在到了我们最关心的部分。为什么不呢?这是我们在项目结束时交付的部分。这是我们花了那么多时间在数据获取和清理、功能创建等方面的部分。
那么我们在创建模型的时候需要思考什么呢?
你可能需要问我们自己的第一个问题是 你的模型是否需要可解释?
有相当多的用例,业务可能需要一个可解释的模型。一个这样的用例是当我们想要做属性建模的时候。这里我们定义了各种广告流(电视、广播、报纸等)的效果。)在收益上。在这种情况下,理解来自每个广告流的响应变得至关重要。
如果我们需要最大化准确性或任何其他指标,我们仍然希望使用像 NeuralNets 或 XGBoost 这样的黑盒模型。
除了型号选择,您还应该考虑其他事情:
- 模型架构:NNs 多少层,或者 GBT 多少树或者你需要如何为线性模型创建特征交互。
- 如何调超参数?: 你应该尝试自动化这个部分。市场上有很多这方面的工具。我倾向于使用远视。
6.实验
现在您已经创建了您的模型。
它比基线/您当前的模型表现得更好。我们应该如何前进?
我们有两个选择-
- 不断改进我们的模型。
- 在生产环境中测试我们的模型,获得更多关于可能出错的信息,然后通过 持续集成继续改进我们的模型。
我支持第二种方法。在 Coursera 深度学习专业的第三门名为《构建机器学习项目》的课程中,吴恩达说
“不要一开始就试图设计和构建完美的系统。相反,快速建立和训练一个基本系统——也许只需要几天。即使基本系统远非你所能构建的“最佳”系统,考察基本系统的运行方式也是有价值的:你会很快找到线索,向你展示最有希望投入时间的方向。
我还要强调的一点是 持续集成 。如果您当前的模型比现有的模型执行得更好,为什么不在生产中部署它,而不是在增量收益后运行?
为了测试您的模型优于现有模型的假设的有效性,您可以设置一个 A/B 测试。一些用户(测试组)看到您的模型,而一些用户(控制组)看到以前模型的预测。
您应该始终致力于最小化您的模型的首次在线实验的时间。这不仅产生了价值,而且通过实时反馈让你了解你的模型的缺点,然后你可以继续工作。
结论
机器学习没有什么是简单的。任何事情都不应该被假设。
在构建 ML 管道时,您应该始终对您所做的任何决定保持批判态度。
一个简单的决策可能决定你的机器学习项目的成败。
所以聪明地想,想得很多。
这篇文章是增加我对机器学习生态系统的理解的一部分,灵感来自脸书工程团队的一组很棒的视频。
如果你想了解更多关于如何构建机器学习项目和最佳实践的信息,我想调出他在 Coursera 深度学习专业化中的第三门名为构建机器学习项目的课程。一定要去看看。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 媒体 关注我,或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系到我。
数据分析师需要掌握的 6 项关键技能
原文:https://towardsdatascience.com/6-key-skills-that-data-analysts-need-to-master-df1d82257b9?source=collection_archive---------4-----------------------
在数据运营理念不断深入的今天,越来越多的公司意识到数据驱动的商业战略的价值,强调全员参与数据运营。发展分析数据的能力也是未来的趋势。那么你知道如何成为一名优秀的数据分析师,如何在就业市场上保持竞争力吗?以下是数据分析师需要掌握的 6 项关键技能。
From Google
1.擅长
Excel 是日常工作中常见的数据分析工具。而且这个工具很容易上手。它不仅可以做简单的二维表格、复杂的嵌套表格,还可以创建折线图、柱形图、条形图、面积图、饼图、雷达图、组合图、散点图等。
此外,Excel 还可以实现更多高级功能,包括数据透视表(类似于 BI 的多维分析模型立方体)和 Vlookup 等复杂函数。它可以轻松处理成千上万条数据。
学习 excel 是一个循序渐进的过程。
- ****基础:简单的表格数据处理、打印、查询、过滤、排序
- ****函数和公式:常用函数、高级数据计算、数组公式、多维引用
- 可视化 :图形显示、高级图表、图表插件
- 数据透视表,VBA 程序开发
做数据分析师,要掌握高级的 Excel 技能。
2.结构化查询语言
数据分析师要熟悉 Oracle、SQL Server、DB2、MySQL、MongoDB 等常用数据库。此外,他们知道如何编写 SQL,包括各种统计函数,如 join、group by、order by、distinct、sum、count、average 等。
除了熟练使用 SQL 语句,数据分析师还应该了解数据库的存储和读取过程。在处理大数据量时,如何找到加快程序速度、减少网络流量、提高数据库安全性的方法是非常重要的。
3。数据可视化
数据分析 的结果最终是呈现给别人的,可视化技能也是衡量数据分析师水平的一个指标。我们希望确保为数据选择正确的 图表类型 ,并快速清晰地显示结果。
像 D3.js、HighCharts、Tableau、PowerBI 这些数据可视化工具都有自己的优势。您必须精通至少一种可视化工具。想知道可以学习哪些工具,可以看看这篇文章2019你不能错过的 9 个数据可视化工具。
以我为例,我在工作中经常使用 FineReport ,这是基于“无代码开发”理念设计的。FineReport 可以直接连接各类数据库,定制各种复杂报表,酷炫 仪表盘 ,方便快捷。
From FineReport
在这一点上,如果你掌握了以上技巧,你就可以算是一名合格的分析师了。这个阶段的数据分析师需要知道如何使用工具处理数据,了解业务场景,分析解决基本问题。之后,如果你想钻研技术,甚至向数据科学家方向发展,就要学习以下技巧。
4.统计数字
首先你必须系统地学习统计学。纯机器学习强调算法的预测能力和实现,但统计学一直强调可解释性。你需要理解数据背后的原理。下面这些统计方法都是你可以学习的。
- ****数据挖掘相关的统计方法:多元逻辑回归分析、非线性回归分析、判别分析等。
- ****定量方法:时间轴分析、概率模型、优化
- ****决策分析:多目标决策分析、决策树、影响图、敏感性分析
- ****竞争优势分析:通过项目和成功案例学习基本的分析概念
- ****数据库原理:数据模型,数据库设计
- ****预测分析:时间轴分析、主成分分析、非参数回归、统计过程控制
- 数据管理 : ETL(提取、转换、加载)、数据治理、管理职责、元数据
- ****优化和启发式:整数规划、非线性规划、局部探索、超灵感(模拟退火、遗传算法)
- ****大数据分析:学习非结构化数据概念、MapReduce 技术、大数据分析方法
- ****数据挖掘:聚类(k-means 法、分割法)、关联规则、因子分析、生存时间分析
- 风险分析和运营分析的计算机模拟
- ****软件级分析:组织级分析主题、IT 和业务用户、变更管理、数据主题、演示和沟通
5.程序设计语言
精通一些编程语言可以让数据分析工作更加灵活。编程语言适用于所有类型的数据。大多数新奇的仪表盘都可以用代码或绘图软件来实现。
1) Python
Python 最大的优势是擅长处理大量数据,性能好,不停机。它特别适合于繁琐的计算和分析。而且,Python 的语法很容易读懂。它更受 It 人员的欢迎,因为它能够用许多模块创建数据图。
Chart made with Python
2) HTML & JavaScript & CSS
很多可视化软件都是基于 web 的,可视化开发离不开编程语言。随着人们越来越依赖浏览器工作,网络浏览器的功能也越来越好。使用 HTML、JavaScript 和 CSS,您可以直接运行可视化显示程序。
****
Interactive calendar
3) R
R 语言是统计学家最喜欢的分析软件。它是开源免费的,图形功能非常强大。
r 是为数据分析设计的。它最初是为统计学家和数据科学家设计的。然而,由于数据分析的日益普及,R 语言的使用并没有受到限制。
R 的使用流程非常清晰。有很多支持 R 的工具包,只要把数据加载到 R 中,写一两行代码就可以创建数据图了。例如,使用 Portfolio toolkit 快速创建下面的层次图。
FlowingData Map
Heat map made with R
6.人工智能和机器学习
人工智能是当今最热门的话题之一,也就是把人的智能赋予机器。有大量应用人工智能的工具,包括搜索和数学优化,以及逻辑推理。基于仿生学和认知心理学的算法,基于概率和经济学的算法也在探索中。
而机器学习是人工智能的一个分支。机器学习算法是从数据中自动分析并获取规则,并利用规则预测未知数据的一类算法。它已被广泛应用于数据挖掘、计算机视觉、自然语言处理、搜索引擎、医疗诊断、证券市场分析等领域。
如果你想成为一名优秀的数据分析师,你必须站在数据科学的前沿,了解行业趋势。你必须了解人工智能和机器学习的概念。在未来,你也许可以将这些技术创新性地引入到你的工作中。
最后,请再问自己一次:你真的喜欢 数据分析 吗?在处理大量数据时,你是觉得枯燥单调还是觉得有趣有挑战性?如果你决定长期从事数据分析师的工作,或者你想知道如何向数据分析职业过渡,你可以从提高上述技能开始。
您可能也会对…感兴趣
KPI 仪表板的前 7 种图表类型
制作销售仪表盘的逐步指南
新手如何设计酷炫的数据可视化?
4 个参数查询功能让您的数据可视化互动
数据可视化十大地图类型
作为新数据科学领导者的 6 个经验教训
原文:https://towardsdatascience.com/6-lessons-learned-as-a-new-data-science-lead-7676a63e968b?source=collection_archive---------9-----------------------
每当我阅读一本书的评论时(特别是如果评论是混杂的),我认为如果我对评论的作者有更多的了解,那些评论会对我更有用。
他们通常喜欢什么样的书?如果是课本,他们对题目已经有什么水平的知识了?他们拿起这本书的目的是什么?这样我可以更有效地判断他们的阅读建议是否适用于我,以及我是否应该根据这些陌生人的意见做出未来的阅读决定。
沿着同样的思路,我也想简单描述一下我的情况和背景,这样作为一个读者,你就有更多的背景来判断我学到的东西在多大程度上适用于你的情况。
Photo credit: https://unsplash.com/photos/sfL_QOnmy00
我是一名计算机语言学家和计算机科学家。在做了几次工程和研发方面的实习后,我在 T2 的 trivago T3 得到了一份全职数据科学家的工作。在接受领导职位之前,我在一个数据科学团队中担任这一角色两年多一点,最初领导一个由两名数据科学家组成的小团队。
这是我第一次担任领导职务。
从那以后,一年多过去了,我仍然在这个领导位置上,看着我的团队成长,收缩,再成长到现在的 6 人团队(5 名数据科学家和 1 名产品经理)。我自己的领导是一个有商业背景的人,他看到了数据驱动决策和数据驱动产品的很多价值。他总共监管 4 个团队(都是技术性很强的团队,是数据科学和工程的混合体),并大力投资营造一个环境,让数据科学家能够解决有趣的问题,同时为企业创造价值。
我从个人贡献者(IC)角色到领导角色的转变是技术领域中一个非常典型的转变。因此,我相信,在数据科学团队不断壮大的许多其他组织中,也可以找到与我非常相似的经历。因此,我希望我对这个主题的思考可以对其他一些数据科学家有用,他们可能对自己的新挑战感到怀疑,并正在寻找其他人的观点,他们曾经坐在同一条船上。
1.不确定没关系。比以前更是如此。
Photo credit: https://unsplash.com/photos/RXWgx93tz8w
如果你已经在数据科学团队中工作过,你可能对不确定性并不陌生。你过去很可能参与过一些绿地项目。也许你甚至领导过其中的一些人。其中一些可能已经成功,而另一些可能没有达到预期的目标。作为一名数据科学家,你自然知道探索性项目的不确定性,如果你在一个非常适合数据科学工作的环境中工作,你和你的领导都会接受这种不确定性。
现在,作为一个团队的领导者,你会感到不确定性比以前更加沉重地压在你的肩膀上。如果我的团队参与的项目失败了怎么办?作为一个领导者我应该做什么?万一有人算计我没有计划(大家内心的冒名顶替说 hi)怎么办?
深呼吸。
从某种程度上来说,不确定性比以前更令人畏惧是件好事。因为你能感受到赋予你的责任。但是,如果你认为你的责任就是为自己和团队彻底摆脱一切不确定性,那就大错特错了。那是不可能的。
第一步是接受在数据科学领域工作仍然是不确定的。自从你成为主角后就没变过。是的,越来越多的人期待你的指导,但他们不会指望你解决他们所有的问题和所有的不确定性。
随着你作为一个领导者的成长,你要接触的人的数量和范围也会自然增长。请记住,这种范围的扩展将导致更多的不确定性。所以学着接受它,因为随着时间的推移,你会学到帮助你减少不确定性的技能。但不要指望这是一夜之间发生的。
2.相信你的直觉(有时也相信你的推理)。
Photo credit: https://unsplash.com/photos/hbkWMj41Y0I
这可能是我最常从组织中的其他领导那里得到的建议。有些人甚至说,我应该在某种意义上变得“更傲慢”,也就是说,厚颜无耻地认为自己比别人(甚至可能是更有经验的同事)更了解它。虽然这句俏皮话显然不能完全当真,但其潜在的信息是明确的。
你知道的比你想象的要多。
虽然我通常是一个挑剔的人,但当涉及到一个我仍然感到陌生的领域时,我倾向于过度依赖似乎更有经验的人。不要误解我。有经验的人的建议是有价值的,你应该总是认真考虑他们。但是不要在任何情况下都把它们放在基座上。
你将会面临没有明确对错的问题,只是不同的做事风格和偏好,或者不同的价值观相互竞争。在这些情况下,你的直觉可能是你(想要)坚持什么的最有价值的线索。
如果你仍然不确定你是否能做出正确的决定或采取正确的行动:试试看!实验!收集现实生活中的数据点。最坏能发生什么?!
3.关于价值贡献的心态变化缓慢。
Photo credit: https://unsplash.com/photos/FgauF0UHTLA
在我作为一名领导者的早期发展过程中,当我弄清楚我在日常工作中必须做的事情时,这一点是我最大的挑战。我习惯于将我的价值贡献视为我所做的分析和开发的模型。这是我大部分工作日都在做的事情。
作为一名主管,我突然有了更多的工作要做,这就减少了我以前动手做的时间。相反,我被邀请参加会议,会上讨论的话题超出了我自己的工作范围,甚至超出了我团队的工作范围。我了解了更大的图景和全公司的计划。我开始思考我的团队如何融入大局。
与此同时,我开始从零开始招聘,这意味着定义工作简介,撰写招聘广告,创建案例研究,并提出面试候选人的流程。在候选人被聘用之前,我为他们创建了入职任务,这些任务与他们被聘用时的职位描述相关。
这些是任务的例子,你至少可以根据花费的时间来确定。你还会在其他事情上花费时间,这几乎是不可能确定的。会有一些日子,你会把会议分散到一整天,你会到处回复一些信息,突然一天过去了,你不确定那天你到底做了什么。你会错过看到你之前的动手工作的稳步进展。你会注意到在有价值和有挑战性的项目中明显缺少你的名字。你会开始质疑自己对团队的有用性,尤其是如果你在成为领导之前是一名优秀的 IC。
最糟糕的是,你可能不是团队中唯一一个想知道自己价值贡献的人。你曾经在项目中合作过的个人贡献者也会注意到你的不参与。当然,他们知道你成了领导。但是在一段时间内,他们只会看到你不再像以前那样做出贡献。他们将看不到您挑选的所有其他任务。如果你的组织有一个 360 度评估系统,你可能以后只能通过这种匿名的方式了解他们的想法。
对此我没有好的解决办法,除了耐心等待,让时间发挥它的魔力。心态和认知会慢慢改变,甚至(或尤其)是你自己的。给自己一些时间去适应你的价值贡献是多方面的这个想法。事实上,你的范围越大,你自己深入一个项目所增加的价值可能就越少。我的经验是,当你的同事看到你如何开始建立和/或发展你的团队时,他们的看法也会及时改变。不要一开始就因为这些骗人的感觉而气馁。
4.将你的自我与你团队的价值贡献联系起来。
Photo credit: https://unsplash.com/photos/4-02wP3zAZ8
作为一个强大的 IC,你可能会从你交付的项目和你用自己的聪明才智和毅力解决的业务问题中获得骄傲。习惯这种自我提升的来源对于你的日常工作和你如何衡量你在组织内的成功将变得越来越不重要的想法。相反,作为一名人事主管,你的重点应该是建立一个强大的团队,让你的团队能够实现最大的商业价值,同时沿着让他们感到兴奋的职业轨迹发展自己。
根据你在自我曲线上的位置,这可能是新线索最困难的任务之一。你必须学会把自己的自我降低一个等级(或几个等级),以便让别人发光。虽然我们中的大多数人在生活中的某个时候已经学会了不要总是把自己放在第一位,以获得足够的社交能力,但这只是拼图中的一块。伟大的领导者不仅仅让他们的团队发光发热,他们为他们团队的成功感到自豪,并且从内心里从看到他们的员工发挥他们的潜力中获得满足感。
我记得我第一次决定不给我们公司的内部技术会议做技术报告。我的自尊心受到了打击,我不得不承认我真的很想成为焦点。但在会议之前,我意识到我所做的大部分技术工作都是辅助性的。如果有人应该谈论这些项目,那应该是贡献最大的团队成员,而不是我。最后,我团队中的所有人都在那一届会议上发表了演讲。我开始意识到,当有经验的领导者看到他们的被保护者被打败时,他们会有什么样的感受。
5.给予反馈。大部分是承认。
Photo credit: https://unsplash.com/photos/82ZEOTntP8g
我第一次给我雇佣的实习生提供一条行为反馈是一个启示。对我们俩来说。
我向他指出,他有打断向他解释事情的人的习惯(不仅是我,还有其他团队成员)。对我来说,这显得非常不耐烦,甚至有点粗鲁。
这显然是一种他没想到会在工作环境中收到的反馈,而且肯定不是来自他的“老板”。对我来说,这是一个实验,因为我不确定结果。他会怎么想?他真的会根据这个反馈采取行动吗?他会因此生气吗?
我发现他真的很感谢反馈,因为他自己没有注意到这种行为模式。他解释说,他这样做可能是因为他真的想表明他是胜任的,或者换句话说,他想通过不要求额外的解释来证明自己的价值。那次谈话之后,他会变得更加介意打断别人,意识到他没有必要以那种方式证明自己的价值。在接下来的 1:1 对话中,我确认了我观察到的行为变化。
作为一个 IC,你可能从来没有努力去做反馈,这是你的习惯。然而,作为一名领导者,你必须对反馈采取更积极的态度。这样想:现在你的价值贡献取决于你的团队的发展,你有强烈的兴趣去做一切事情来帮助他们成长。最有效的方法之一就是提供反馈并跟进。已经有本书写了如何给予反馈,所以我在这里就不赘述了。我的信念是,如果你给出反馈时有一个共同的理解,即你对你的团队成员的成长有所投入,那么反馈会以正确的方式被接受(即使是在极端坦率的情况下)。
给予反馈也意味着在适当的时候给予认可。这并不意味着你必须在每个场合表扬你的团队成员,而是让他们知道你在关注他们。在正确的地方给予认可有时会对朝着正确的方向发展起到很大的激励和积极的促进作用。
6.做动手工作。
Photo credit: https://unsplash.com/photos/82ZEOTntP8g
这是我从正在考虑担任领导职位的有抱负的数据科学家那里听到最多的问题:“我还有多少时间来实践数据科学的东西?”我的回答是:这取决于你、你的团队和你的领导,但要确保它不是零。
事实是,在领导团队的同时,找到足够的时间来做高质量的实践工作需要一些努力,但我的信念是,除非你完全致力于管理道路(并且永远不会回到 IC 道路),否则你必须通过实践来掌握数据科学技能。当然,你的分析技能不会在一夜之间消失,但是像许多技能一样,它们需要保持,以免退化太多。此外,如果你的团队主要由数据科学家组成,保持警觉会让你更好地了解他们的工作和他们面临的挑战。
即使你只考虑你自己的理智,这也是一个好主意。在领导岗位上,你不会经常获得即时的满足感,就像你有时在数据科学(或更一般的技术性工作)中获得的满足感一样。你种下的领导力种子需要很长时间才能生长,而且通常你无法准确确定是不是你的行动带来了改变。
所以,帮你自己一个忙,做一个能让你进入通常的心流状态的项目。
然而,要注意你选择的项目。不要让自己成为一个至关重要的紧急项目的瓶颈。如果你接了一个探索性很强的项目,为了有机会成功,你还必须掌握很多新技能,确保你的时间表能够负担所需的额外学习时间(例如,当你的团队处于稳定阶段,你不必做任何招聘)。
以下是我的经验教训:
1.不确定没关系。比以前更是如此。
2。相信你的直觉(有时也相信你的推理)。
3。关于价值贡献的心态变化缓慢。
4。将你的自我与你团队的价值贡献联系起来。
5。给予反馈。大部分是承认。
6。做动手工作。
不用说,这些都是基于我自己的经验教训,你的里程可能会有所不同。然而,我确实相信一些模式在许多地方出现,我很好奇这些经验教训中哪些对其他数据科学领导者来说是真实的,以及他们可能强烈反对的地方。
6 更多评估指标数据科学家应该熟悉——来自高级卡格勒新书的教训
原文:https://towardsdatascience.com/6-more-evaluation-metrics-data-scientists-should-be-familiar-with-lessons-from-a-high-rank-d7756611efc4?source=collection_archive---------24-----------------------
《赢得 KAGGLE 的数据分析技术》一书
多类分类和推荐的评价指标
Photo by Ales Krivec on Unsplash
这是另一篇文章,介绍了新书“赢得 Kaggle 的数据分析技术”,中介绍的技巧,作者是三位高级 kaggler(不包括我自己,因此这不是个人提升!😃 )
这是第二篇关于 ML 评估指标的帖子。这里是第一个帖子。从第一篇文章开始,指标编号从#12 开始!
关于这本书的完整目录,请看我的另一篇文章。
目录:
多类分类任务
单标签多类分类与多标签多类分类
单标签多类分类的评价指标
#12 —多类精度
#13 —多级分类的平衡精度
#14 —多类日志丢失
多标签多类别分类的评估指标
#15 —平均 F1、宏观 F1、微观 F1
#16 —二次加权κ
推荐任务中的评估指标
#17 —地图@K
结论
多类分类任务
二元分类是一项任务,其中目标变量属于两类中的任何一类——正类或负类。另一方面,多类分类是一项任务,其中目标变量可能属于两个以上的类;更简单的例子是在图像识别,图像显示猫,狗,鸭…等。
单标签多类分类与多标签多类分类
单标签多类分类和多标签多类分类是多类分类的子集。在单标签多类分类中,目标变量只有一个类赋值,而在多标签多类分类中,目标变量可以有多个类赋值。
Single-label multiclass classification vs. multi-label multiclass classification
显然,单标签情况和多标签情况需要单独的建模策略和评估策略。我在这里不讨论建模策略,但是将讨论评估度量。
单标签多类分类的评价指标
#12—多类精度
(用于 Kaggle 比赛】 TensorFlow 语音识别挑战赛)
这是二进制分类任务中精度的扩展版本。
二元类分类的准确度是混淆矩阵中两个对角元素之和占总数据量的比例。多类版本在混淆矩阵中有两个以上的行和列,多类精度在对对角线元素求和并除以总计数的方式上是相似的。
Illustration of multiclass accuracy (4 class-classification version)
- 精确度范围从 0 到 1,越高越好。
- 还是那句话,阶级分布不均衡的时候不合适。
#13 —多级分类的平衡精度
这与二元分类平衡精度的内容没有变化。
Formula for balanced accuracy in multiclass classification
其中, M :类别数, n_m :数据大小属于类别 M, r_m :准确预测属于类别 M 的数据数
这些属性就像我们在二进制类版本中看到的一样:
- 介于 0 和 1 之间的值,越高越好。
- 对较小类别的准确预测赋予较高的权重,因此适用于不平衡数据。
#14—多类对数损失
(用于 Kaggle 比赛中的 两个适马连接:租赁清单查询)
这是我在二进制分类案例中包含的另一个多类版本。
Formula of multiclass logloss
其中 N :数据个数, M :类个数, y_i,m :如果数据 i 属于类 m 则为 1,否则为 0, p_i,m :数据 i 属于类 m 的预测概率。
正如二进制对数损失:
- 这是损失,越高越糟糕。
Photo by Franck V. on Unsplash
多标签多类分类的评价指标
#15 —平均值 F1、宏观 F1、微观 F1
(平均值-F1 用于 Kaggle 比赛】 Instacart 购物篮分析)
(Macro-F1 用于 Kaggle 竞赛】 人类蛋白质图谱图像分类)
在多标签多类分类的情况下,标签应如下所示。
Illustration of multi-label classification with three classes
有三种 F1 分数的变体来评估这种预测:
- 平均值-F1: 计算每个 ID 的 F1 分数,并取所有 ID 的平均值。
- 宏 F1: 计算每个类别的 F1 分数(假设我们看到每个类别和其余类别之间有三个独立的二进制分类),并取所有类别的平均值。
- Micro-F1: 通过处理每个 ID 和每个类作为独立数据点的组合,立即计算总体 F1 分数。
Illustration of Mean-F1, Macro-F1, Micro-F1
- 每个 F1 的范围从 0 到 1,越高越好。
- 在三个 F1 分数中的选择是基于我们的兴趣:平均 F1 平等地对待每个 ID,宏观 F1 平等地对待每个职业,微观 F1 平等地对待每个 ID 和职业的组合。
Photo by Edgar Chaparro on Unsplash
单标签有序多类分类的评价指标
这里又是单标签多类分类,但是中的类也是有序的,比如 A 比 B 好,B 比 C 好,等等。
我们可以在医学研究中更多地看到这一点,例如,模型预测患者“可能”>“未知”>“不太可能”感染某种疾病。
在这种情况下,很多比赛中都可以看到二次加权 Kappa。
#16 —二次加权卡帕值
(用于 Kaggle 竞赛中) 保诚人寿保险评估众筹搜索结果关联”**
其中 i,j :真实类和预测类的指标, w :误预测的权重, O :实际观测计数, E :期望计数。
仅仅看公式可能看起来很复杂,所以这里有一个如何在 Excel 上计算的演练。
How to calculate quadratic weighted Kappa on Excel.
我们也可以说这是 加权的【科恩的】Kappa 的‘二次加权版’,这里的权重通常是类间的绝对距离,而不是它的平方。
这表明权重的定义取决于您,不一定必须是二次的,这为您根据性能调整它们留下了一些空间。
- 二次加权 Kappa 范围在 0 和 1 之间。越高越好,0 表示预测是随机的。
- 灵活设置权重,允许权重矩阵中特定单元格的权重更高/更低。
Photo by Micheile Henderson @micheile010 // Visual Stories [nl] on Unsplash
推荐任务中的评估指标
推荐的特点是:
- 这是多标签多类分类任务。
- 预测的类别具有顺序,即推荐的顺序;第一个预测为客户最有可能购买,第二个预测为下一个,依此类推。有了这个订单,公司可以在一些物理或财务限制内保持他们的推广,例如在网络广告页面的空间内或在有限数量的直接邮件内等。
Order of class in recommendation task
在这种情况下,在很多比赛中都可以看到 MAP@K 。
#17 —地图@K
(用于 Kaggle 比赛】 桑坦德产品推荐*)*
其中 N :数据数量, K: 作为预测提供并纳入评估的推荐数量, m_i :真实类数据数量 i 属于(在购买推荐上下文中,个人实际购买的数量 i ), P_i(k) :由数据I的推荐 1 至 k 精确
这并不像听起来那么复杂。下面举例说明。
How to calculate MAP@K ?
对记录中的每个客户重复这一过程并取平均值。
- MAP@K 的范围是 0 到 1,越高越好。
- 预测的顺序很重要,正如上面讨论的那样,这具有商业意义。
Photo by Christian Wiediger on Unsplash
结论
我们看到有一些度量可以专门处理多类分类(单标签、多标签)和推荐预测。
理解每个度量的属性,并在最佳情况下使用它,对于构建高性能模型非常重要。
学习 SQL 和 Python 的 6 个最佳平台
原文:https://towardsdatascience.com/6-of-the-best-niche-platforms-to-learn-sql-and-python-f6f13808d2f5?source=collection_archive---------5-----------------------
所以你想学习 SQL 和 Python,但是不知道从哪里开始
Photo by Tim Gouw on Unsplash
所以你想学习 SQL 和 Python,但是不知道从哪里开始。或者,您可能已经对这些主题有所了解,并且希望提高自己的技能。有如此多的网上资源声称是学习的最佳场所,以至于很难知道该相信谁。
你可能听说过像 Udemy、CodeAcademy 和 Khan Academy 这样的大型在线学习中心。这些程序对某些主题来说可能很棒,但有时它们太大了,以至于很难知道它们最擅长什么。
本文的重点将放在 6 个更小、更适合学习或磨练 SQL 和 Python 技能的平台上。本文将对每一个进行简单的概述,以及是什么使它们不同和/或更好。
要选择最适合你的平台,最重要的事情是确定你的需求
你的技术水平如何?你需要这些技能做什么?你想学什么概念?通过确定您想要学习的技能和概念,您可以有效地将您的需求与本文中的一个平台相匹配,并选择适合您的平台。所以让我们开始吧。
Photo by Safar Safarov on Unsplash
6 个学习 SQL 和 Python 的小众平台
1.模式分析
如果你没有 SQL 或 python 的经验,但对学习语法感兴趣,那就太好了
Mode Analytics 提供了 SQL 和 Python 的教程,如果你是一个想要学习这些技能的初学者,这可能是一个很好的资源。Mode 为每个主题提供单独的培训课程。
每门课程都根据更基础的知识到更高级的知识来划分。初学者可以在每个领域从头开始,也可以在自己最舒服的领域开始。这些课程简单明了,旨在教你掌握与 SQL 和 Python 分析相关的技能。这些课程的基础是学习每一种语言的语法。
如果你正在寻找一个简单明了的方法来学习这些概念,Mode 是一个很有价值的资源。然而,在为用户提供成长和测试技能的地方方面,它有一定的局限性。
他们的 SQL 课程更加广泛,并在课程结束后提供额外的练习来提高技能。这些练习基于对分析经理的采访,旨在重现他们经常面临的一些问题。然而,Python 教程缺少这些练习,而是为您提供各种外部资源,您可以使用这些资源来测试和提高您的技能。
总的来说,Mode 提供了一个很好的学习和提高技能的基础平台,但缺乏足够的应用程序来测试你的技能。
如果你只是想要一个学习语法和概念的基本资源,那么简单的布局可能会对你很有帮助。然而,如果你正在寻找一些更广泛的、需要更多动手测试和解决问题的东西,你可能想继续阅读这个列表。
2.地层划痕
非常适合测试和提升您的 SQL 和 Python 知识,以推进您的职业发展或准备技术面试
虽然之前的资源非常缺乏测试你技能的方法和应用程序,但 Strata Scratch 却完全相反。他们标榜自己为增长您的 SQL 和 Python 知识提供了“构建模块”。因此,Strata Scratch 最适合那些拥有基础知识并希望不断增长的人。
Strata Scratch 提供了 500 多个 SQL 和 Python 练习题,帮助您提高这些领域的分析技能
这些问题经过了大量研究,并基于真实的行业问题,以及来自各种科技公司的许多面试问题。这是准备面试或推进你职业发展的理想资源。
地层划痕也非常重视解释清楚答案。每个问题都提供了正确的技术解决方案的深入解释,以及清晰的方法和语法。他们关注正确的解决方案和方法,但也确保解决方案是干净的。
还有初学者资源可以教你 SQL 和 Python 的基础知识,以及你在这些行业中需要熟悉的主要程序。
总的来说,如果你的目标是成长和测试你的技能,Strata Scratch 是一个很好的资源
通常你会发现学习某样东西的最好方法是不断地测试它。Strata Scratch 提供了许多方法来测试你在模拟现实生活场景和面试问题的场景中的知识。如果你的目标是增长你的知识和促进你的职业发展,并且你已经有了 SQL 和 Python 的基础知识,那么 Strata Scratch 就是针对你的。
3.数据营
DataCamp 旨在成为一种从包括 SQL 和 Python 在内的许多主题中学习技能的简化方法。DataCamp 以非常简单的方式组织他们的课程,从基础到最高级。根据你的技能水平,你可以从任何地方学到一课,并加深你对各种概念的理解。
DataCamp 提供一口大小的课程
这样做的目的是让你可以在短时间内学会一个新的话题,也许在你忙碌或忙于其他事情的时候也可以这样做。它旨在成为你在业余时间增长技能的一个工具,你想投入多少时间就投入多少时间。
这些课程非常有用,而且数量众多。我们发现,与 Mode 等平台相比,DataCamp 提供了更多的利基和重点主题领域。您还将更容易找到涵盖更多特定用例的主题,或者学习如何为特定问题或工作流编码。
DataCamp 还提供了许多测试和练习技能的方法。每个科目都有许多迷你练习挑战。此外,如果你正在寻找一个更广泛的方法来测试你的技能,有动手数据项目提供。这些是基于真实世界场景的更广泛的问题和项目。然而,我们发现问题和项目的数量仅限于某些主题。
总的来说, DataCamp 是一个精简的、组织良好的平台,旨在教你技能,并通过各种问题和项目测试它们
如果您正在寻找一个有条理、直观的平台,并且将每个主题领域组织成高度集中的小课程,那么这可能是您的平台。
4.w3 学校
w3schools是一个简单实用的学习 web 开发技能的工具,包括 SQL 和 Python
根据你的喜好,你可能会喜欢或讨厌 w3school 的学习方法。w3schools 自称是世界上最大的 web 开发者网站,所以他们的方法显然对很多人都有效。
本质上,这里的教学方法是简单而基本的。本课程从最简单到最高级的概念进行概述,每一页都提供了对概念的描述,包括从语法到重要函数和关键字的所有内容。所以,如果你喜欢用简单的方式学习,简单明了地概括和解释主题,那么你可能真的会喜欢这种学习方法。
此外,w3schools 在整个课程中大量使用示例和互动。一旦一个概念被解释了,它通常会提供一个使用正确语法的直观例子。通常,它甚至包括一个可定制的字段,您可以在其中自己解决一个示例问题。
总的来说,w3schools 之所以如此受欢迎,可能是因为它简单、直接地教授 SQL、Python 和许多其他编程语言。明确标记的主题,结合简单明了的解释,以及一个测试你技能的地方构成了大部分的课程计划。然而,如果你正在寻找一个有更多练习或现实世界问题要解决的资源,你最好去别处看看。
也许对许多人来说最重要的是,整个课程都是免费的,甚至不需要注册!
5.黑客等级
黑客等级 是另一个教授技能和测试知识的宝贵平台,因为它与 SQL 和 Python 有关。
他们服务中的教育部分显然是面向那些至少已经掌握了 SQL 和 Python 基础知识,并且希望磨练自己的技能以适应面试或现实应用的人。
在 Hacker Rank 的“练习”服务中,提供了许多练习题和问题来测试您的技能。您可以从各种语言中进行选择,包括 SQL 和 Python。这些挑战按照容易、中等和困难进行分级,系统会跟踪你的进展,并为排名最高的问题解决者提供一个“排行榜”。您还可以根据主题领域和子领域组织挑战,以缩小特定语法问题或特定问题或工作流的范围。
总的来说,如果你想测试你在这些领域的技能,并为你可能在工作面试或工作中遇到的问题解决做准备,这些都是很有价值的工具
如果你是一个实践型的学习者,并且喜欢看概念是如何被应用的,而不是简单地被解释它们是如何工作的,那么这些是很棒的。
此外,还有论坛供你聊天、分享和帮助他人解决问题,并分享对面试过程的见解。
6。Guru99
Guru99 是一个免费资源,旨在教授各种技能,包括 SQL 和 Python 部分。
Guru99 提供 SQL 和 Python 课程,从基础到更高级的概念进行分类。课程要么是书面的,要么是视频形式的。
与 w3schools 类似,这是一种简单、实用的教学方法,试图列出所有相关的概念,并以简单、直接的方式解释它们。Guru99 的主要优势之一是它涵盖了广泛的概念和函数,有助于构建您在 SQL 和 Python 许多领域的知识。
无论你是初学者还是想学习更高级的概念,主题领域都有明确的标记,这样你就可以选择符合你技能水平的课程。
虽然 Guru99 是一个简单易用的工具来积累你的知识,但它并不能测试你的知识
课程主要是非交互式的,没有你自己写代码或解决示例问题的地方。如果你想测试你的技能,你可能想用另一个服务来补充你在这里学到的概念,比如 Hacker Rank。
总的来说,如果你正在寻找一个组织良好的资源,可以按照自己的进度学习概念,这可能是一个很好的计划。当然,它是免费的,所以你可以尝试一下,看看它是否适合你。
Photo by NESA by Makers on Unsplash
结论
这就是 6 个鲜为人知的学习 SQL 和 Python 技能的资源。正如你所看到的,这些资源在它们的目标以及它们如何教授和测试各种主题方面有很大的不同。这些资源侧重于不同的技能水平,旨在服务于各种目的。无论是准备面试还是增强基本技能,每个在线资源通常都有一个主要的关注点。
与你最相关的一个关键区别是每种在线资源侧重于哪种学习方式。很多,比如 w3schools 和 Guru99,仅仅关注简单明了的学习和对概念的解释。然而,其他人,如黑客等级和地层划痕,旨在提供资源,通过实践和解决现实世界的问题和场景来建立您的理解。
最终,对你来说最好的资源取决于你想学什么以及你的学习风格。评估你对这些主题的了解,以及哪些资源提供的课程最符合你的技能水平。还有,考虑你喜欢怎么学。你更喜欢动手操作还是喜欢用简单的方式向你解释概念?
通过了解您的需求和目标,我们相信您会在上面列出的资源中找到丰富的资源来扩展您的 SQL 和 Python 知识。作为奖励,其中一些是免费的,你可以无风险地试用它们。学习新技能是一种有益的体验,如果你能找到符合你特定偏好的学习资源,那就更令人满意了。
我喜欢用 Python 进行数据探索的 6 个理由
原文:https://towardsdatascience.com/6-reasons-i-love-bokeh-for-data-exploration-with-python-a778a2086a95?source=collection_archive---------11-----------------------
散景已经存在很多年了,但我只是最近才真正发现它,它很快就成为我最喜欢的 Python 可视化库。以下是六个原因。
Bokeh is a Browser Based Visualization Library
什么是散景,是什么让它与众不同?
在进入主题之前,让我们先做一个强制性的介绍,我会向你介绍这个主题。还记得我们只有 Matplotlib 的黑暗时代吗?Bokeh 是另一个可视化库,真正与众不同的因素(至少对我来说)是它专注于 web 浏览器的视觉效果。虽然您仍然可以将数字保存为. png 或。jpeg,Bokeh 的真正强大之处在于,因为它在浏览器中渲染(用 Javascript),所以你可以轻松地添加交互性,模仿像 D3 这样的超级强大的工具,而不必经历学习 D3 的痛苦过程。显然还有很多工作要做,以使散景与熊猫无缝配合,并提供直观的 API。总的来说,散景是一个易于使用的绘图库,适合熊猫,并使事情超级共享。听起来很酷?请继续阅读!
本文的数据和 Jupyter 笔记本
这个 Github Repo 有一个 Jupyter 笔记本和我们将在本文中使用的原始数据。这些数据来自纽约市过去几周的 Craigslist 公寓列表。具体来说,我们将使用散景来观察价格和公寓面积之间的关系。我们将从一个基本的散点图开始,用散景的特征来增强我们的基本图表,并提到其他有用的特征。让我们来看看散景令人敬畏的原因(前两步搭建舞台,然后我们实际上开始绘图)。
1 —散景在 Jupyter 笔记本中非常好用
from bokeh.io import output_notebook
output_notebook()
如果我和妈妈在一起的时间和我在 Jupyter 笔记本上的时间一样多,我就会成为年度最佳儿子。显然,如果你一直在阅读,我已经告诉过你,你可以在 Jupyter 的笔记本里,在我链接的回购协议里,跟着做。如果 Bokeh 和 Jupyter 没有很好地合作,那是一件很愚蠢的事情。幸运的是,与标准的 Matplotlib 图表相比,它在 Jupyter 中工作得非常好,并且确实使您的视觉效果非常突出(在我看来)。当您想要添加一些交互性(放大图表、添加过滤器、添加工具提示/悬停等)时,它特别好,我们将在后面讨论。这也相当简单,只需添加上面的代码,您的绘图就会在 Jupyter 中很好地呈现出来。我喜欢添加的另一件事是当你实例化图形时的缩放模式,因为它将填满整个笔记本窗口,所以你不再需要指定大小。
figure=(sizing_mode='stretch_width')
2 —主题
主题基本上让你告诉 Bokeh“我总是希望我的剧情在标题中使用 14 号字体,隐藏难看的网格线,并且总是让我的轴标签使用 12 号字体和粗体”。如果你像我一样对你的情节懒惰和神经质,那么这是一个天赐之物,因为你不需要在每次制作情节时做太多的造型,它们默认情况下会很漂亮。这里有一个 Jupyter 笔记本主题的例子。
from bokeh.io import curdoc
from bokeh.themes import Themecurdoc().theme = Theme(json={'attrs': {# apply defaults to Figure properties
'Figure': {
'toolbar_location': None,
'outline_line_color': None,
'min_border_right': 10,
'sizing_mode': 'stretch_width'
},'Grid': {
'grid_line_color': None,
},
'Title': {
'text_font_size': '14pt'
},# apply defaults to Axis properties
'Axis': {
'minor_tick_out': None,
'minor_tick_in': None,
'major_label_text_font_size': '11pt',
'axis_label_text_font_size': '13pt',
'axis_label_text_font': 'Work Sans'
},
# apply defaults to Legend properties
'Legend': {
'background_fill_alpha': 0.8,
}}})
你可以查阅散景文档来查看所有不同的选项,但一般来说,它只是与你如何在散景中执行命令保持一致。你只需要给它一个值的字典,当你创建图表时,它会自动应用这些值。例如,在“标题”中,我们将字体大小设置为 14pt。这允许完全定制你的情节,你只需要做一次!一般来说,当我开始使用散景图的笔记本或脚本时,这是我指定的第一件事。主题可以节省您的时间——使用它们!
3-易于与熊猫融合
每天早上我都会煮一杯美味的咖啡,然后输入进口熊猫作为 pd,这是我早上的例行公事。如果你和我一样,和熊猫同生共死,那么 Bokeh 就是你新的最好的朋友。散景使用了一种叫做 列数据源 的东西,虽然它不一定是熊猫数据帧,但它与它配合得非常好。如果你感兴趣,你可以阅读完整的文档,但基本上它把你的熊猫数据帧变成了大规模策划的武器。我遵循的基本步骤是:
- 把我的数据放入一个干净整洁的熊猫数据框
- 用该数据帧创建 ColumnDataSource
- 轻松策划!
这里有一个超级简单的例子让我们开始(可以在 Jupyter 笔记本和 Github Repo 中找到,链接到简介中),看看公寓价格和公寓面积。
Our Basic Scatter Plot
我个人觉得这比 Matplotlib 更容易和直观,而且在 Jupyter 笔记本中也更漂亮。基本上这样做是为了让散景知道你将使用这个熊猫数据帧作为你的绘图源。当你在你的图(散点图)中实际绘制一些东西,并说 x=“面积”和 y=“价格”时,你只是在说你的数据帧中的哪些列应该去查看以获得这些数据。因此,它看到“面积”和“价格”被指定,它将遍历数据框中的每一行,并绘制这些对点。这使得创建熊猫的情节既直观又快捷。
另一个很棒的方面是这让你可以利用熊猫的特性来增强你的剧情。也就是说,可以使用数据框架中的任何列!让我们创建一个“颜色”列,将卧室的数量映射到一种颜色。然后,我们可以使用这个新列作为选项来着色我们的散点图。具体来说,这里检查第 9 行和第 10 行,然后在第 22 行,我们说使用这一列来着色我们的图表。
Our Scatter Plot Colored By Number of Bedrooms
需要记住的一个关键点,也是我经常忘记的一点是,如果您向 Pandas 数据帧添加一列,您需要重新创建 ColumnDataSource。在本例中,我们现在创建了一个新的 color 列,因此之前创建的 ColumnDataSource 没有我们的 color 特性。一旦你这样做了,那么就像把 color='color '传递到散点方法中一样简单,Bokeh know's 去在恰当命名的' color '列中查找颜色。有很多其他方法可以利用这种类型的东西,比如通过出现的次数来确定大小,但是我将把这留给您在附加的练习中来做。关键是如果你能在熊猫身上创造它,那么你就能在散景图中利用它!
4-导出到 HTML 是轻而易举的事情
与同事或在 web 应用程序上共享散景图是一件轻而易举的事情,因为它可以很容易地导出为 HTML 代码可以使用的内容。如果你有兴趣在网站上使用这些图表或者在 HTML 文件中分享它们,那么你一定要仔细阅读这个文档。如果你想看看现实生活中这是如何实现的,请查看我构建的一个小网络应用程序中的权力的游戏数据,或者这个使用民主党原始数据的静态 S3 网站。所有这些图表都是使用下面的方法在散景中制作的。以下是如何做到这一点:
- 导入组件特征。这就是让您将该数字转换成 HTML 中的脚本和 div 的原因。
from bokeh.embed import components
- 像平常一样在散景中创建您的地块
- 最后添加以下代码,其中 p 是您的图形对象
script, div = components(p)
return script, div
第一行提供了一大块 Javascript 代码,其中包含绘图所需的所有内容(包括数据)和一个 div 元素,图表将放入其中。就是这样!同样,这段代码不再依赖于您的数据源!将脚本和 div 放入 HTML 文件中,现在就有了一个完全可导出的图表。如果您熟悉 Django,我经常将脚本和 div 从 views.py 文件传递到 HTML,然后可以在我的模板文件中使用它,但是有很多方法可以利用它。如果你经常在 HTML 中共享数据,那么在我看来 Bokeh 是 Python 所能提供的最好的东西。
5—关于错误的智能建议
如果我是能够为所有 Python 库创建法律的 Python 沙皇,这肯定是我会实现的。使用散景如果你试图编辑你的图,如改变轴标签,你输入了错误的命令,散景会告诉你它认为你的意思的建议。
AttrbuteError’s that actually saving you from Googling!
注意这里我说的是 p.yaxis.axis_title,但实际上是 p.yaxis.axis_label。如果你查看 AttributeError,它会给你最接近它认为你正在尝试做的事情的建议。一般来说,这非常有效,可以节省你问谷歌“在散景中改变轴标题”的大量时间。如果有人能在 Matplotlib 中实现这一点,我将永远欠你的,因为我甚至不想知道我花了多少时间做这件事。但是说真的,这是一个很棒的特性,尤其是如果你经常在不同的可视化库之间切换的话。
6—轻松互动
散景的一个非常好的特点是它很容易给我们的图表添加交互性。默认情况下,你会在图表的右边看到一些工具,可以让你开箱即用。
例如,如果您选择“缩放”按钮,您可以在图表中想要聚焦的任何区域周围画一个框。
注意它是如何更新 x 和 y 轴来聚焦我们指定的区域的,所有这些都不需要额外的代码。但这只是散景交互性的开始。让我们来看看你如何不费力地添加像 Tableau 一样的小工具提示。要创建这些(嗯,有多种方法)你需要使用 HoverTool。
from bokeh.models import HoverTool
现在我喜欢用我的 HoverTools 变得有点花哨,并添加一些自定义的 HTML 来给它一点活力。如果你觉得不够勇敢,那么你可以在散景文档中看到一些更简单的例子,但是如果你能处理一些基本的 HTML,那么继续和我在一起吧,我的朋友们。让我们在上次使用的散点图的基础上添加额外的颜色。
Behold our glorious tooltips when we hover!
我们真的想把重点放在第 24 行及以后,因为几个步骤前我讨论了前面的东西。事情是这样的:
-
Bokeh 允许你以字符串的形式传递 HTML,所以我们创造性地制作了一个叫做 tooltips 的变量
-
div 只是用来保存我们的工具提示数据,我为工具提示中的每一行做了一个 div,但是你不必这样做。
-
每个 div 有两个部分:一个标题和实际数据,每个都在
标签中。所以第一个
是每行中的“Craigslist URL”、“价格($)”或“平方英尺”标题。
-
第二个
是实际的数据,同样,散景使得访问变得非常容易。因为我们使用的是 ColumnDataSource,所以我们只是将数据放入@columnname 中。例如,在第一个 div 中,我使用@url 让它获取数据中该点行的 url。请注意,我们可以获得甚至没有被绘制的数据点,因为它只是从与我们的数据在同一行的列中提取的。我们在价格和面积上也是如此。您甚至可以格式化您的输入数据,我用{0,0}显示,它在价格和平方英尺的千位上添加了逗号分隔符。有许多格式化程序,但常见的是日期、小数和百分比。
-
就是这样!短短几行的精彩互动工具提示!你可以用工具提示做一些非常棒的东西,但是这应该足够激发你的想象力了。这给了你与同事共享的笔记本额外的一点点活力,让他们玩你的数据。
如果你去散景的画廊,有很多方法可以增加互动性,让仪表盘充满活力,所以这只是一个尝试。如果你对创造真正互动的情节感兴趣,散景是我现在市场上最喜欢的选择之一,尤其是如果你想避开 Javascript 黑暗、寒冷和邪恶的世界。
总结
就是这样!如果你是第一次接触散景,希望这能让你体验一下它令人敬畏的力量。我仍然使用 Matplotlib 和 Seaborn 做一些事情(箱线图、分布图),但现在大多数时候我是一个完全的散景倡导者。试一试吧,你可能很快也会成功!快乐学习!
随时在 LinkedIn 上联系我
通过数据分析做出成功营销决策的 6 个步骤
原文:https://towardsdatascience.com/6-steps-to-make-successful-marketing-decisions-with-data-analysis-aef4905665ed?source=collection_archive---------23-----------------------
随着市场条件变得越来越复杂,公司在营销决策方面面临越来越多的挑战。建立科学的营销数据支持系统是保证企业科学决策的重要基础。本文从数据分析的角度对营销决策进行了整体分析,包括六大模块:指标分解、管理驾驶舱、营销 KPI 系统、经销商和门店管理、竞品分析、预测分析,对企业营销决策分析的规划和建设具有很好的指导意义。
1.指示器分解
1.1 指标
有许多方法可以分解营销决策的指标。在这里,我只关注两个核心:业务和运营模块。
业务模块包含销售、订单、合同、发货、退货等整个营销过程中的指标。,以及业务流程前端和终端的指标,如产品价格、库存、客户满意度、市场份额等。
运营模块包含相关分析指标,如营销过程中涉及的人员、渠道、费用、预测等。这些是实现业务流程和实现结果的前提或媒介。
具体指标见下图。
1.2 尺寸
有了指标,就有了进行分析的基础。然后,我们必须选择合适的维度和方法来分析这些指标。维度的梳理不仅有助于我们更快的掌握数据分析工作,更重要的是可以在实施过程中指导 it 人员的数据仓库建模。
在营销决策的分析中,常用的分析维度有:部门(总部、各事业部等。)、地区(南、北等。)、品类(产品类别)、系列(产品细分)、渠道(经销商、直销、代理商等。)、客户(一般按重要性分级)、时间(日、月、季、年等。),以及企业内部的一些自定义维度。
1.3 方法
指标以一定的维度呈现,呈现方式的选择涉及到分析方法。
营销系统中常用的分析方法有:积累、比例、排名、比较、趋势、平均等等。不同的分析方法做出的分析报告所表达的信息是不同的。在需求评估和业务逻辑沟通的前期就要确定分析方法,往往会事半功倍,效果显著。
关键指标确定后,规划以下决策分析模块,包括五个:管理驾驶舱、营销 KPI 体系、经销商和门店管理、竞品分析、预测分析。分析的维度和方法基于不同模块的分析目的。我将在下面详细描述每个模块的内容。
2.管理驾驶舱
管理驾驶舱是为营销领导者设计的。目的是让他们实时掌握整体营销概况和关键指标的异常情况。是典型的多指标多维联动钻取分析。
基于以上业务指标和运营指标,我们可以生成以下。
2.1 营销实时运营仪表板
为了把握营销的实时概况,用热图展示区域维度的数据更直观、更清晰。设定区域的顶级排名,利用压力竞争来增加业务的价值。品种品类的比例是为了了解销售的比例。并且关键指示器可以通过仪表板或数值来显示。详细数据可以以联动或钻取的形式呈现;建议使用钻孔。如果单个页面上的元素太多,用户会感到视觉疲劳。
From FineReport
2.2 生产、销售和库存报告
营销的基础是保持生产、销售和库存的良好平衡。不应出现缺货或供应过剩的情况。在线对比生产数量和产成品数量、销量,监控期初和期末库存,设置库存警戒线,预测缺货风险和积压周期。最好直接定位责任部门或个人,并将异常数据推送给领导,实现 PDCA(计划、做、检查、行动)的良好循环。
From FineReport
2.3 现实与预测的比较
对于营销运营,主要指标是销售额、销售成本、费用、利润。以下案例图显示了分析值。把每月的预算和实际值对比一下,就能看出预测工作的准确性。例如,对 6 月份净利率的预测过低,因为 6 月份的成本增加在 5 月份没有预测到。我们进一步把数据往下钻分析,发现公司可能会增加很多人力。预测不准的原因可能是人事和财务的信息交流出现偏差,以便我们有针对性地解决问题。
From FineReport
2.4 月度关键指标概览报告
驾驶舱的业务概述和操作概述是必需的。以不同方式呈现领导关注的几个关键运营指标,如经销商门店排名、区域销售利润排名、净利润趋势、整体目标完成情况等。
From FineReport
3.营销 KPI 系统
在营销运作中,人的效率和投入产出更重要。因此,有必要建立一个完善的营销 KPI 体系。将一些指标分配到具体个人或某个部门和地区,作为绩效评价指标。这样会产生监督和激励的效果。
3.1 KPI 系统
营销的关键指标有销售额、客户数、退货量、利润率、效率、达成率、增长率等。销售额、客户数、退货量、利润率是衡量营销人员个人业务能力的关键指标,效率(价值/成本)是用来衡量他工作的效率。达成率与计划值对比,衡量抗压能力。增长率是很多公司忽略的指标。仅仅从某个月的数据来评价员工的表现是不合理的。
KPI 系统应该从三个角度构建:比较激励、监管报告和会议评审。
- 比较激励是员工或部门之间横向和纵向比较的过程(最典型的销售排名,目标达成率),通过比较来激励员工。
- 监管报告侧重于数据的准确呈现、历史归档和分层报告流程,以实现自上而下的监控和管理系统。
- 会议回顾是表扬好的方面,总结不足,从其他维度检验营销策略的合理性。
3.2 KPI 报告
KPI 报表应该根据不同的对象分别开发,从个人、区域或部门、总体三个维度考虑。
个人:自我激励
个人的 KPI 应该直观清晰,直接显示个人产生的销售额、销售成本、费用和净利润。也要有和别人的比较;这些比较最好以柱状图的形式进行,这样每个地区或部门的负责人就可以监控自己员工的表现。
From FineReport
地区或部门:团队比赛
不同地区的市场情况不同。不同的部门负责不同的产品或区域。仅仅用销量作为指标是不合理的。利润率在一定情况下可以消除这种不合理性。但可能会出现部分地区销量过低,业务变动较大的情况。因此,用利润和利润率来衡量不同地区或部门的业绩是合理的。
From FineReport
总体:自我评估和报告
有必要从整个营销的角度来衡量 KPI。自评可以作为下一阶段计划的参考,也有一个上报的数据库。自我评估也是销售、利润和其他指标的展示,但目的和重点不同。要从计划完成率来分析,趋势分析要按照时间维度来做,反映部门是持续增收还是持续亏损。最后,要从整体角度计算人均收益,判断资源释放是否合理。
From FineReport
4.经销商和商店管理
对于家电行业来说,正常营销模式下的经销商和门店比较多(竞品分析中我会讲到像电商这样的例外),所以经销商和门店的管理尤为重要。我们要从两个角度来分析。
4.1 大局:企业统一管理
所有经销商和商店的数据定期汇总到公司总部。总部进行统一的数据清洗和转换操作,可以做成驾驶舱式的仪表盘,包括所有经销商或门店的数量、总订单、总销售、总库存等信息。
From FineReport
4.2 单一案例:每个经销商或商店的自我管理
对于各个经销商或者门店提供的数据,做一些针对性的报表,然后严格控制权限。只对他们开放这些报表,方便他们内部管理。报告的显示形式类似于管理驾驶舱的显示形式。也分为业务和运营两部分。但是有些指标不一定给经销商或者门店,比如利润。这种模式前期可以从几家合作较好的经销商入手,便于后期横向推广。
5.竞争产品分析
知己知彼也是营销策略的重点。我会以电商平台的数据为分析对象,在下一篇文章中详细讲述。如果公司有其他数据来源,我们也可以讨论相应的分析方案。
6.预测分析
营销运营很重要的一部分就是预测,包括市场趋势预测、销售预测、成本预测。用于制定营销策略,提前指导区域营销工作,促进计划和目标的达成。然后,将预测值与实际值进行比较,继续修正,为 KPI 提供数据基础。
6.1 预测方法
通过数据做出的预测一般是定量分析。然而,对外部因素的分析,如需求变化、经济变化、横向竞争趋势、政府政策和消费者态度的变化,无法量化。因此,预测工作一般没有既定的公式。需要结合管理者的思维,通过数据填充和录入将预测值存储在数据库中,这样预测工作才能影响下个月的订单计划和生产调度及销售计划。
趋势预测
根据时间维度对历史数据进行加权和平均。可以根据季节或节假日的影响调整加权系数,然后乘以历史平均增长率,得到当前趋势下一期的预测值。接下来,用前一年的值验证结果。
因果预测
使用回归分析方法对相关数据集执行回归计算。然后就可以获得下一个时间节点的预测值,比如油烟机,油烟机集,这些都是高度相关的。
6.2 预测报告
预测值通过报表录入的方式进入数据库,然后通过报表工具显示在前端。可以和实际值进行对比,判断实际销售目标是否达标。也可以作为 KPI 考核的依据。此外,它还有助于判断预测的准确性和规划的合理性。
From FineReport
7.开始营销决策分析
看完这篇文章,相信你对整个营销决策分析系统有了一个大致的了解,那么你需要选择一个简单实用的工具来练习。以上所有例子中的报告都是用专业的 BI 报告工具 FineReport 创建的。通过 FineReport,用户可以通过简单的拖拽,设计各种报表,构建数据决策系统。FineReport 的个人版是完全免费的,你可以去官网下载。
其他常用的工具有 Tableau、Qlikview、PowerBI 等。,在数据分析上各有优势。我已经在文章 中介绍了一些工具类型,如分析工具和代码工具。作为一名数据分析师,我应该学习哪些数据分析工具? 。对于业务分析师和技术分析师来说,需求和他们使用的工具是完全不同的。但不管怎样,你可以选择你熟悉或者你擅长的工具来做营销决策分析,最重要的是现在就行动!
您可能也会对…感兴趣
2019 年 6 大数据分析工具
数据分析工具对比:Excel、R、Python、BI 工具
2019 年你不能错过的 9 款数据可视化工具
什么是大屏幕的数据可视化,如何实现?
新手如何设计酷炫的数据可视化?
制作销售仪表盘的分步指南
帮助我每周学习五天机器学习的 6 种技术
原文:https://towardsdatascience.com/6-techniques-which-help-me-study-machine-learning-five-days-per-week-fb3e889fad80?source=collection_archive---------0-----------------------
我每天学习机器学习 9 个月,然后找到了一份工作。怎么会?像这样…
Man with a mohawk (me) studying and running a business in his bedroom. Picture is a still from one of my YouTube videos.
我退出了苹果。启动了一个 web startup,它失败了。我的心不在这里。
我想学习机器学习。这让我很兴奋。我会全部学会的。我不需要编写所有的规则,机器会为我学习。但是我没有工作。
兴奋不是用来买东西的。
为了支付学费,我开始在周末开优步。
我喜欢结识新朋友,但我讨厌一直开车。交通,停车,启动,燃料我有足够的燃料吗我想我有,空气,空调,换挡,你不应该走那条路你应该走这条路,所有的。
我学的是机器学习。一周五天,一整天。这很难。还是很难。
周末去优步。一周内的机器学习。那是我的例行公事。我必须学习。我必须学会这一点,我不能继续驾驶,我还不知道我的目标是什么,但我知道这不是驾驶。一个周六晚上,我赚了 280 美元,并被罚款 290 美元。-10 美元一晚。
在我自创的人工智能硕士学位、9 个月后,我找到了一份工作。这是我做过的最好的工作。
我每天是怎么学习的?
像这样。
1.缩小搜索空间
机器学习是广义的。有代码,有数学,有概率,有统计,有数据,有算法。
而且不缺学习资源。有太多选择和没有选择是一样的。
如果你真的想学习,那就给自己安排一个课程。与其花几周时间考虑是否应该学习 Python 或 R,不如去 Coursera 或 edX 上一门课程,从数学或代码开始,花一周时间制定一个粗略的计划,然后遵循它。
对我来说,这是在创造我自己的人工智能硕士学位。我决定先学习代码,Python 将成为我的语言。我到处寻找不同的课程和书籍,把我最感兴趣的放在一起。我选择的道路对每个人都是最好的吗?大概不会。但它是我的,这就是它成功的原因。
一旦我有了课程,我就有了一条可以遵循的路,再也不用浪费时间去决定什么是最好的路了。我可以站起来,坐下来,学习我需要(想要)学习的东西。
也不严格。如果出现了我感兴趣的东西,我会跟着它走,并在走的过程中学习我需要的东西。
如果你是在网上学习,而不是通过大学,你应该走自己的路。
2.修复您的环境
你祖父的第一个橘子农场失败了。
土壤很好。种子在那里。所有的设备也是。
发生了什么事?
天气太冷了。橙子需要温暖的温度才能生长。你的祖父有种植橙子的技能,但他们不可能在寒冷的气候下生长。
当他搬到一个温暖的城市,他开始了另一个橘子农场。
12 个月后,你的祖父提供了镇上最好的橙汁。
学习就像种橘子。
你可以有一台笔记本电脑,一个互联网连接,最好的书,但仍然没有学习的动力。
为什么?
因为你的环境是关闭的。
你的房间充满了干扰。
你试着和朋友一起学习,但是他们不像你那样专注。
Whatsapp 每 7 分钟关闭一次。
你能做什么?
我把我的房间变成了学习的天堂。清理过了。把我的手机放在另一个房间的抽屉里,关掉了所有的通知。
我告诉了我的朋友。我的电话要到下午 4 点才会响,到时候再跟你聊。他说好吧。
说到朋友时间,朋友很重要,但是学习时间就是学习时间。一整天都离不开手机吗?试试一个小时。任何你看不到的抽屉都可以。“请勿打扰”应该是默认设置。
修复你的环境,让知识流动起来。
3.建立系统,让你永远赢
问题 13 把我难住了。我卡住了。
我昨天想把它做完,但没能做到。
现在是学习的时间了,但是我知道我昨天有多努力,但是毫无进展。
我正在推迟它。我知道我应该学习。但是我要推迟。
这是一个循环。
啊啊啊。我以前见过这种循环。我知道。但它还在。
那堆书盯着我。问题 13。我设置了一个计时器。25 分钟。我知道我可能解决不了这个问题,但是我可以坐下来试 25 分钟。
四分钟后,就是地狱。燃烧的地狱。我继续前进。已经 24 分钟了,我不想停下来。
计时器响了,我又设置了一个。然后又是一个。经过 3 个疗程,我解决了这个问题。我告诉自己,我是世界上最好的工程师。这是个谎言,但没关系。即使是一个小小的里程碑也是一个里程碑。
你不能总是控制自己是否在学习上取得进步。但是你可以控制在某件事情上花多少时间。
可以控制:每天四个 25 分钟的时段。
无法控制:完成每天开始的每一项任务。
建立系统,让你永远赢。
4.有时什么都不做
我得出了结论。学习是终极技能。如果我能学会如何更好地学习,我就能做得更好。我可以学习机器学习,我可以成为更好的程序员,我可以更好地学习写作。我必须提高我的学习,我想。我立刻开始。
我参加了 Coursera 学习如何学习课程。其中一个主要话题是集中思维和分散思维。
当你在做一个单一的任务时,集中思考就会发生。
分散思维发生在你什么都不想的时候。
最好的学习发生在这两者的交叉点。这就是为什么你在洗澡时会有一些好的想法。因为没有别的事情发生。
当你让分散思维接管时,它会给你的大脑空间把它在集中思维时吸收的所有东西联系在一起。
问题是,要让它正常工作,你需要时间。
如果你已经设置好系统,这样你就可以进行四次 25 分钟的专注工作,之后去散步。小睡一会儿。坐下来想想你学到了什么。
一旦你开始更经常地什么都不做,你会发现很多东西因为空间而变得有价值。一个房间是四面墙围绕的空间,一个轮胎除了空气什么都没有,一艘船因为空间空而漂浮。
你的学习日程可以做更多的事情。
5.拥抱吮吸
学习糟透了。
你学了一件事,第二天就忘了。
然后再来一个,算了。
另一个。
忘记了。
你整个周末都在学习,周一去上班,没人知道。
有人问我如何深刻地记住书上的东西?我说我不知道。如果我幸运的话,我记得我读过的一本书的 1%。当这 1%和另外 1%的东西交叉时,奇迹就发生了。这让我觉得自己像一个专家点连接器。
学了一年之后,你会意识到还有多少东西要学。
什么时候会结束?
并没有。总是第一天。
拥抱吮吸。
6.三年前的原则
前几天我在公园。
有一个小男孩跑来跑去,过着他一生中最快乐的时光。上滑梯,下滑梯,在树上,从树上,在泥土里,从泥土里,上山,下山。
他笑着跳着,然后又笑了。
他妈妈过来接他。
“来吧,查理,我们得走了。”
当她抱着他离开时,他不停地笑,挥舞着他的蓝色塑料铲子。
是什么让他着迷?
他在玩。他玩得很开心。整个世界都是新的。我们的文化严格区分工作和娱乐。学习被视为工作。
你应该学习以获得更多的工作。你应该工作赚钱。这些钱可以让你有闲暇时间。一旦你有了闲暇时间,那么也只有那时,你才能像查理一样,笑着到处跑。
如果你把它记在脑子里,学习就是工作,那将是地狱。因为总有更多东西要学。你知道怎么回事,只工作不玩耍。
但是假设,你认为学习是经历一个话题然后进入下一个话题的过程。
像游戏一样连接不同的东西。
你开始有同样的感觉,就像你是查理滑下滑梯时的感觉一样。
你学了一件事,你用它来学另一件事,你卡住了,你克服了,你学了另一件事。你用它来跳舞。
我了解到,如果你有结构化数据,如表、列或数据框,像 CatBoost、XGBoost 和 LightGBM 这样的集成算法效果最好。对于图像、视频、自然语言和音频等非结构化数据,深度学习和/或迁移学习应该是您的首选模型。
我把这些点联系起来了。我告诉自己,我是一个专家点连接器。从一点跳到下一点。
这样做,你会以比开始时更多的精力完成一次学习。
这是 3 岁的原则。视一切为游戏。
现在够了。
我该睡觉了。
这是额外的奖励。
7.睡眠
睡眠不好意味着学习不好。
你可能没有得到足够的。
我没有。驾驶优步最好的时间是周五和周六晚上。人们出去吃饭,参加聚会,去夜总会,我没有,我在开车。我会一直工作到凌晨 2、3 点,回家睡觉,直到太阳在 7-8 点把我叫醒。两天来,我都像个火车残骸。周一会到来,我会在一个不同的时区。周二情况有所好转,周三我回到了我需要的地方。然后这个循环会在周五重复。
这种打破睡眠时间表是不可接受的。我的目标是学得更好。睡眠清洁大脑,并允许大脑中新的连接发生。我在晚上 10 点、11 点停止开车,回到家,睡了 7-9 个小时。钱少,学问多。
不要用睡眠来换取更多的学习时间。做相反的事。
机器学习是广义的。
要研究好它,要研究好任何东西,你都需要提醒自己。
- 缩小你的搜索空间
- 修复您的环境
- 建立系统,让你永远赢
- 拥抱吮吸
- 有时什么都不做
- 把学习当作游戏
- 通过睡眠获得更好的知识
晚安。
你可以在 YouTube 上观看这篇文章的视频版本。
人工智能可以将您即将到来的移动应用参与度提高 53%的 6 种方式
原文:https://towardsdatascience.com/6-ways-ai-can-increase-your-upcoming-mobile-app-engagement-by-53-ae3cdac7a31?source=collection_archive---------18-----------------------
缺乏用户参与是所有拥有自己应用的企业从一开始就面临的挑战。几乎每一个将移动应用程序开发外包到印度或世界任何其他角落的客户都会引发这种担忧。可悲的是,我们对此几乎无能为力。然而,现在 AI 开发服务已经完全改变了用户参与游戏。根据该报告,人工智能可以将你的应用程序的用户参与度提高 53%。
现在,问题是:怎么做?
这就是我们创建这个博客的原因。在这里,我们将讨论人工智能如何提高你的应用程序的用户参与度,以及为什么你应该咨询人工智能开发服务。
我们开始吧:
人工智能如何提高移动应用的参与度
1.人工智能帮助你了解你的顾客
就像我们在之前关于 Salesforce Einstein 的博客中所说的,如今只有非常了解他们的受众的企业才是成功的。
然而,了解客户对每个企业来说都是一个棘手的问题。
顾客想要什么?
这个问题的答案从来都不清楚。我们只做假设,有时候,这些假设最终会导致重大损失。
而且我们都知道,创建一个 app 是一笔不小的投资。开发一个像样的应用程序需要几千美元。你可能不想让所有辛苦赚来的钱付之东流。
人工智能确保你不会。在先进算法的帮助下,弄清客户的好恶变得非常容易。从应用程序主题、颜色、字体和动画到应用程序功能,您可以根据客户偏好设计一切,并确保他们没有任何理由讨厌它。
这样,人工智能可以帮助你避免所有可能导致用户讨厌你的应用程序的陷阱,并确保他们永远不会离开它。
2.人工智能让用户体验更加个性化
我讨厌缺乏个人体验的 app,你也是,每个手机 app 用户也是。
你知道为什么吗?
因为没有用户体验的应用程序很无聊,你可能会暂时喜欢它们。但是,你很快意识到它们不值得你花费时间和投资,然后你就把它删除了。
难怪有超过 28%的用户会在安装一个月内删除一个 app。
在人工智能咨询解决方案和跟踪用户行为的高级算法的帮助下,人工智能确保你获得个性化的体验,以便你继续沉迷于你的应用程序。
最好的例子是像我的星巴克咖啡师和亚马逊 Go 这样的应用程序,它们跟踪用户的行为并预测用户想要什么。这些应用程序从你的习惯中学习,并利用这些知识提供出色的用户体验。
你也可以使用人工智能的知识来使你的应用程序更智能,让它们从你的观众的习惯中学习,并使用它来提供令人难以置信的体验。
3.人工智能实现自动化
自动化并不意味着 AI 将完全取代你的应用中的人类交互。相反,它只会帮助你用你的应用程序做出更快更好的决定。
例如:
- 像 Ola 和优步这样的应用程序使用自动推理为你找到最近的搭车地点。
- 像 Zomato 和 Swiggy 这样的应用程序使用自动化来管理和显示你所在地附近最好的餐馆列表。
- 谷歌地图使用自动化来显示基于现有数据的最短路线。
在所有这些情况下,你的移动应用中的人工智能可以通过自动化一些任务来节省你的时间和成本。因此,用户会希望更多地使用你的应用。
4.人工智能帮助你以一种更有创意的方式展示你的应用创意
每个移动应用程序都代表一个想法。它向用户展示了你如何有效地解决他们的问题。
以优步和奥拉为例。我们都知道预约出租车有多难。首先,你几乎找不到一辆出租车会让你在你的位置下车。但是如果你碰巧这么做了,在你和司机同意同样的价格之前,你必须和他讨价还价。
优步和奥拉都有效地解决了这个问题。然而,人们只会使用其中的一种。
现在的问题是:
他们更喜欢哪一个?
嗯,他们更喜欢能以最简单的方式解决问题的方案。人们不在乎你用你的应用解决的问题是大是小。虽然,他们很关心你是如何解决的。当他们发现你的应用程序太复杂、太无聊时,他们就会离开。
这就是为什么确保你的应用想法以最好的方式表达出来是很重要的。这是在跟踪用户行为的高级人工智能算法的帮助下实现的。
使用从这些算法中收集的数据,移动应用程序开发机构可以以这样一种方式设计应用程序,即它允许用户没有任何麻烦地完成他们的任务。这种无缝的功能使应用程序更具吸引力,他们使用它的频率也更高。
5.人工智能让你切中要害
你知道哪些手机 app 最讨厌吗?那些拐弯抹角却提供不出任何有用信息的。这样的应用浪费你的时间和精力。有时,这样的应用程序会留在我们的手机上,当被发现时,我们会通过给出一个 1 星评级的严厉评论来删除它们。作为一个移动应用程序用户,你可能也会这样做,其他任何移动应用程序用户也会这样做。
那么,你会投资你宝贵的时间和金钱来创建这样一个虚假的、不相关的、对用户没有任何帮助的应用吗?
你肯定不会。然而,主要的问题是:
我们如何知道什么与用户相关?
这就是人工智能发挥作用的地方。建立在人工智能结构上的应用程序将使用先进的算法来跟踪和了解他们的应用程序是如何使用的。然后,他们可以利用收集到的信息来改善用户体验,只提供他们认为相关的信息,而不是任何信息。
6.人工智能为你的应用提供了改进的空间
一个 app 总有改进的可能。
然而,除非应用程序开发人员不知道应用程序的哪些领域真正需要增强,否则不可能做出任何重大改进。他们可能会根据胡乱猜测更新应用程序,同时可能会不断发布没有实际帮助的应用程序更新。
但通过在移动应用中使用人工智能,公司可以确保每次更新都在改进应用。
这是怎么回事:
正如我们之前讨论的那样,移动应用中使用的人工智能算法可以跟踪用户的行为,并分析他们在哪些领域互动最多,在哪些领域根本没有互动。
然后,移动应用程序开发人员可以使用这些收集的数据来决定他们希望紧急更新的功能以及他们希望在下次更新中增强的功能。
因此,您的应用程序会随着每次更新而得到系统化的改进。此外,看到你的应用一步一步变得更好——用户参与度也提高了。
因此,你看到人工智能如何有效地提高你的应用程序的参与度
这也是为什么越来越多的企业开始青睐使用人工智能的移动应用的主要原因之一。
然而,创建使用人工智能的应用程序并不容易。这个过程需要高水平的专业化和专家开发团队(全栈开发人员、AI 开发人员、UI/UX 设计人员、DevOps 工程师…
最初发布于https://www . signity solutions . com/blog/ai-increase-mobile-app-engagement/
农业行业受益于数据科学家的 6 种方式
原文:https://towardsdatascience.com/6-ways-the-agricultural-industry-is-benefiting-from-data-scientists-b778d83f61db?source=collection_archive---------15-----------------------
Image via Rawpixel
数据科学家是几乎所有主要行业的一部分,农业也不例外。以下是数据科学家为农业部门带来优势的六种方式。
1.接收有用的数据,以帮助应对粮食短缺和增强小农户的能力
由于数据科学家拥有高效处理和分析海量数据的工具,一些项目正在进行中,以确定这些信息如何帮助小规模农民加入解决全球粮食短缺的战斗。
2018 年 9 月,一个联盟启动了一个项目,该项目将持续到 2030 年,并查看来自 50 个国家贫困地区大约 5 亿农民的数据。
该项目的负责人希望这些数据能够显示各国的农业投资是否有回报,并帮助制定农民政策。在更大的范围内,该项目符合联合国的可持续发展目标,将发展中国家的农业生产率和农民收入提高一倍,并帮助他们减少世界饥饿。
2.管理作物病虫害
农业害虫会很快减少农民的利润。但是,滥用杀虫剂会对人、植物和其他生物产生不良影响。幸运的是,一些公司招募数据科学家来帮助他们开发面向用户的平台,分析何时使用农药以及使用多少。
其中之一是一家名为 Agrosmart 的巴西公司。其技术依靠物联网(IoT)传感器和人工智能来确定作物上的昆虫种类和数量。然后,农民会得到一份相关的报告,并可以用它来规划他们的害虫管理方法。目标是帮助农民经济高效地控制害虫,同时将对环境的影响降至最低。
在另一个案例中,以色列初创公司 Saillog 开发了一款名为 Agrio 的智能手机应用程序,可以告知农民目前影响他们作物的疾病或者在周围农场发现的疾病。
3.调查农业生态位
数据科学家知道如何使用工具来识别可能隐藏的模式和关系。因此,他们可以通过检查特定的因素得出推动农业科学发展的结论。例如,研究人员知道微量矿物质积极影响家畜和家禽的代谢功能,而类胡萝卜素在增加蛋黄质量和营养方面发挥作用。
通过筛选数据库和研究得出的结论表明,农业过程中看似微小的因素可以带来实质性的变化。当动物饲料品牌、农民和农业部门的其他人利用数据科学家的这些发现时,他们可以积极地改变他们的经营并获得更好的结果。
4.应对气候变化
气候变化是一个迫在眉睫的问题,已经影响到农业部门。然而,数据科学家正在努力寻找补偿这种转变的方法。
一个项目涉及向台湾稻农提供物联网传感器,以便他们可以收集关于他们作物的重要信息。这些都将进入一个数据库,用于帮助农民优化他们的生产周期,即使气候变化使这项任务格外具有挑战性。由于气候变化,遵循传统的农事日历已经不够了。但是,数据分析可能会永远改变农业的未来。
科学家们还在仔细检查农业土壤数据,以提高他们对土壤如何通过释放温室气体导致气候变化的理解,以及土壤数据如何帮助适应气候变化。收集这种信息很棘手,但科学家们认为这可以填补土壤和气候变化之间关系的知识空白。
5.进行产量预测
收成不好会给农民以及所有依赖农作物的实体带来毁灭性的一季。IBM 有一个提前两到三个月估算玉米产量的平台,减少了农业专家不愉快的意外。
同样,伊利诺伊大学的研究人员依靠季节预报和卫星数据做出比平时更早的季末预测。实验室结果表明,这种新方法甚至比美国农业部的实时数据更准确。
6.提供农作物和土地的图像
农业行业的一些人管理着如此多英亩的土地,如果没有技术的帮助,就不可能获得关于潜在问题的及时更新和警报。加拿大公司 Farmers Edge 每天拍摄农场的卫星图像,并结合其他相关数据,包括来自【4,000 多个联网气象站的信息。
此外,包括爱尔兰和加纳在内的几个国家依靠基于卫星的作物监测来比传统方法更快地检查地区。
数据科学家在促进卫星图像用于这些目的和其他目的方面发挥着重要作用。试点项目和新平台可以帮助这些专家确定最适合解决农业部门当前和未来需求的方法。
对于对农业感兴趣的数据科学家来说,这是一个激动人心的时刻
这些年来,农业变得越来越高科技。现在,与过去相比,农业专业人员可以更深入地研究数据,并利用数据做出高度知情的决策。无论是现在还是在可预见的未来,数据科学家的进步正在使这一现实成为可能。
检验正态分布的 6 种方法——使用哪一种?
原文:https://towardsdatascience.com/6-ways-to-test-for-a-normal-distribution-which-one-to-use-9dcf47d8fa93?source=collection_archive---------0-----------------------
有许多方法可以检验一个变量是否呈正态分布。在这篇文章中,你会发现使用哪一个!
1.柱状图
1.1.介绍
第一个几乎所有人都知道的方法是直方图。直方图是显示变量分布的数据可视化。它给出了数据集中每个值出现的频率,这就是分布的意义所在。
直方图是快速直观显示单个变量分布的好方法。
1.2.解释
在下图中,两个直方图显示了正态分布和非正态分布。
- 在左边,样本分布(灰色)与理论钟形曲线分布(红线)的偏差非常小。
- 在右边,我们看到直方图中完全不同的形状,直接告诉我们这不是正态分布。
Sometimes the deviation from a normal distribution is so obvious that it can be detected visually.
1.3.履行
使用 python 可以轻松创建直方图,如下所示:
Creating a histogram using pandas in python
1.4.结论
直方图是快速直观显示单个变量分布的好方法。
2.箱形图
2.1.介绍
箱线图是另一种可用于检测非正常样品的可视化技术。箱形图绘制了一个变量的 5 个数字汇总:最小值、第一个四分位数、中值、第三个四分位数和最大值。
箱线图是同时可视化多个变量分布的好方法。
2.2 解释
箱线图是一种很好的可视化技术,因为它允许绘制许多相邻的箱线图。对变量的快速概述让我们对分布有了一个概念,作为“额外收获”,我们得到了完整的 5 个数字的摘要,这将有助于我们进一步的分析。
你应该注意两件事:
- 分布是否对称(正态分布也是如此)?
- 宽度(尖度的反义词)对应正态分布的宽度吗?这在箱线图上很难看到。
Normal (left), Uniform (middle) and exponential (right) boxplots vs normal bell curve
2.3.履行
箱线图可以很容易地用 python 实现,如下所示:
Creating a boxplot using pandas in python
2.4.结论
箱线图是同时可视化多个变量分布的好方法,但是使用箱线图很难识别宽度/尖度的偏差。
3.QQ 情节
3.1.介绍
有了 QQ plots,我们开始进入更严肃的内容,因为这比前面描述的方法需要更多的理解。
QQ 图代表分位数与分位数图,这正是它所做的:绘制理论分位数与变量的实际分位数。
QQ 图比柱状图或箱线图更能让我们看到正态分布的偏差。
3.2.解释
如果我们的变量遵循正态分布,我们的变量的分位数必须完全符合“理论”正态分位数:QQ 图上的直线告诉我们我们有一个正态分布。
Normal (left), uniform (middle) and exponential (right) QQ Plots
如图所示,正常 QQ 图上的点遵循一条直线,而其他分布严重偏离。
- 均匀分布在两端有太多的观察值(非常高和非常低的值)。
- 指数分布对较低的值有太多的观察,但对较高的值观察太少。
在实践中,我们经常看到一些不太明显但形状相似的东西。尾部的过多或过少都应该引起对正态性的怀疑,在这种情况下,你应该使用下面描述的假设检验之一。
3.3.履行
可以使用 python 中的 statsmodels api 实现 QQ 图,如下所示:
Creating a QQ Plot using statsmodels
3.4.结论
QQ 图比柱状图或箱线图更能让我们看到正态分布的偏差。
4.科尔莫戈罗夫斯米尔诺夫试验
4.1.介绍
如果 QQ 图和其他可视化技术不能得出结论,那么统计推断(假设检验)可以对我们的变量是否显著偏离正态分布给出更客观的答案。
如果你对如何以及何时使用假设检验有疑问,这里有一篇给 对假设检验 的直观解释的文章。
Kolmogorov Smirnov 检验计算经验分布和理论分布之间的距离,并将检验统计量定义为这些距离集合的上确界。
这样做的好处是,同样的方法可以用来比较任何分布,而不一定只是正态分布。
KS 测试是众所周知的,但它没有太大的权力。它可以用于除正常分布之外的其他分布。
4.2.解释
KS 检验的检验统计量是 Kolmogorov Smirnov 统计量,如果零假设为真,则该统计量遵循 Kolmogorov 分布。
如果观察到的数据完全符合正态分布,KS 统计值将为 0。P 值用于决定差异是否大到足以拒绝零假设:
- 如果 KS 检验的 P 值大于 0.05,我们假设正态分布
- 如果 KS 检验的 P 值小于 0.05,我们不假设正态分布
4.3.履行
使用 Scipy 的 Python 中的 KS 测试可以如下实现。它返回 KS 统计数据及其 P 值。
Applying the KS Test in Python using Scipy
4.4.结论
KS 测试是众所周知的,但它没有太大的权力。这意味着需要大量的观察来拒绝零假设。它对异常值也很敏感。另一方面,它可以用于其他类型的分布。
5.利利佛斯试验
5.1.介绍
Lilliefors 测试在很大程度上基于 KS 测试。不同之处在于,在 Lilliefors 检验中,接受的是总体分布的均值和方差是估计的,而不是用户预先指定的。
因此,Lilliefors 测试使用 Lilliefors 分布,而不是 Kolmogorov 分布。
不幸的是,对于 Lilliefors 来说,它的能力仍然低于夏皮罗维尔克测试。
5.2.解释
- 如果 Lilliefors 检验的 P 值大于 0.05,我们假设正态分布
- 如果 Lilliefors 检验的 P 值小于 0.05,我们不假设正态分布
5.3.履行
statsmodels 中的 Lilliefors 测试实现将返回 Lilliefors 测试统计值和 P 值,如下所示。
注意:在 statsmodels 实现中,低于 0.001 的 P 值被报告为 0.001,高于 0.2 的 P 值被报告为 0.2。
Applying the Lilliefors test using statsmodels
5.4.结论
虽然 Lilliefors 是对 KS 测试的改进,但它的功效仍然低于夏皮罗维尔克测试。
6.夏皮罗维尔克试验
6.1.介绍
夏皮罗维尔克检验是检验正态分布时最有效的检验。它是专门为正态分布开发的,不能用于测试其他分布,例如 KS 测试。
夏皮罗维尔克检验是检验正态分布时最有效的检验。
6.2.解释
- 如果夏皮罗维尔克检验的 P 值大于 0.05,我们假设正态分布
- 如果夏皮罗维尔克检验的 P 值小于 0.05,我们不假设正态分布
6.3.履行
夏皮罗·维尔克测试可以如下实现。它将返回名为 W 的测试统计数据和 P 值。
注意:对于 N > 5000,W 检验统计是准确的,但 p 值可能不准确。
Applying the Shapiro Wilk test using statsmodels in Python
6.4.结论
夏皮罗维尔克检验是检验正态分布时最有效的检验。你一定要用这个测试。
7.结论—使用哪种方法!
对于正态分布的快速和视觉识别,如果你只有一个变量需要查看,使用 QQ 图,如果你有多个变量,使用方框图。如果您需要向非统计公众展示您的结果,请使用直方图。
作为一个统计测试来确认你的假设,使用夏皮罗维尔克测试。这是最有力的考验,应该是决定性的论点。
当测试其他分布时,你不能使用夏皮罗·维尔克,而应该使用安德森-达令测试或 KS 测试。
600 倍 t-SNE 加速与急流
原文:https://towardsdatascience.com/600x-t-sne-speedup-with-rapids-5b4cf1f62059?source=collection_archive---------21-----------------------
GPU 加速通常与深度学习有关。用于计算机视觉的 GPUs power 卷积神经网络和用于自然语言处理的变压器。它们通过并行计算来实现这一点,与 CPU 相比,它们在某些任务上要快得多。
RAPIDS 正在通过将传统的机器学习和数据科学算法(如 t-SNE 或 XGBoost)引入 GPU 来扩大 GPU 的利用率。
本文将比较 RAPIDS-cuml (GPU)和 Sklearn (CPU)之间的 t-SNE 实现:结果分别是 3 秒和 30 分钟。
硬件:本实验由数字风暴 在数据科学 PC 上运行
t-SNE visualization of intermediate CNN features
t-SNE 是一种用于可视化高维数据的算法。上面显示的是将 512 维向量从中间 CNN 激活转换为 2 维向量的示例。CIFAR-10 数据集中的每个图像都通过图像分类器。最终分类层之前的激活被添加到用于可视化的阵列中。这是通过以下代码行完成的:
from tensorflow.keras.models import Modelintermediate_layer_model = Model(inputs = model.input,
outputs = model.get_layer('VisualizationLayer').output)
最终的密集图层被命名为“可视化图层”,以这种方式对其进行索引
t-SNE 可视化对于获得关于决策空间的直觉非常有用。另一种方法可能是使用混淆矩阵。t-SNE 可视化显示了汽车和飞机之间的重叠等错误。虽然混淆矩阵会简单地告诉我们类似“8”的汽车被错误地归类为飞机,但 t-SNE 可视化给出了更多关于这里正在发生什么的信息。我们看到,至少错误分类的汽车位于飞机边界的边缘,我们可能能够通过一些标签平滑/数据增强来解决这个问题。
获得关于我们模型的直觉对于这种 EDA(探索性数据分析)非常有用。这有助于为数据级决策提供信息,如识别类别不平衡的影响、数据扩充或收集更多数据的效用。这也有助于比较损失函数。
在“基于 GAN 的合成医学图像增强以提高 CNN 在肝脏病变分类中的性能”中,Frid-adar 等人使用 t-SNE 可视化来展示添加 GAN 生成的数据如何改善医学图像分类的决策边界(请注意,与 a 相比,图 b 中蓝色类别的解缠结得到改善)。
在 Chen 等人的“通过引导互补熵提高对抗鲁棒性”中,他们展示了他们对交叉熵损失函数的改进如何产生更平滑的决策边界,重叠更少(比较右图和左图)。他们使用这种可视化来说明他们改进的决策边界如何提供对抗性攻击防御。
Another interesting application of t-SNE In the “Do’s and Dont’s of using t-SNE to Understand Vision Models” presented by Laurens van der Maaten at CVPR 2018
新与旧
这个例子展示了在 t-SNE 上使用 RAPIDS vs. Sklearn 的 600 倍加速比>
这个例子是在 50,000 个 CIFAR-10 图像上运行 Barnes-Hut (n log n)版本的 t-SNE,这些图像已经通过图像分类器(训练到 79%的准确度)处理成 512 维向量。t-SNE 算法将这些 512-d 矢量转换成 2-d 以便可视化。
1918 秒(~30 分钟)(Sklearn)
from sklearn.manifold import TSNE
sklearn_embedded = TSNE(n_components=2).fit_transform(embeddings)
3 秒(急流累计)
from cuml.manifold import TSNE as cumlTSNE
tsne = cumlTSNE(n_components=2, method='barnes_hut')
tsne_embedding = tsne.fit_transform(embeddings)
硬件:本实验由数字风暴 在数据科学 PC 上运行
急流的冲击
由 RAPIDS 实现的 t-SNE 加速使得高维数据可视化更加实用。嵌入 50K CIFAR-10 向量在 CPU 实现上花费了 30 分钟,如果 t-SNE 算法具有 O(n)时间复杂度,则尝试嵌入 120 万 ImageNet 数据集将花费至少 12 小时(尽管 barnes-hut 算法的后一个 log n 在这个规模上可以忽略不计)。
在 RAPIDS 的支持下,t-SNE 可视化可以实现整个 ImageNet 数据集的可视化(Chan 等人在 t-SNE-CUDA 中探索的)。
GPU 对这类矢量表示的加速对图像相似性/检索应用也非常有用。从大型图像数据库中找到语义最相似的图像的最佳方法之一是比较图像分类器的中间激活。这导致比较来自分类器的 k 维向量嵌入的大集合。对于 K-Means 这样的聚类算法,RAPIDS 可以大大加快这种操作的速度。
t-SNE 是一种获得关于数据集和由神经网络构建的中间表示的洞察力的伟大技术。RAPIDS 正在通过 GPU 加速帮助 t-SNE 达到新的高度,使更多的数据能够通过这种算法可视化。
感谢阅读!如果你觉得这篇文章很有趣,你可能也会喜欢这个视频,它一步一步地从 NGC docker 容器到设置 RAPIDS 库再到最终的 t-SNE 可视化!
7 个基本质量工具
原文:https://towardsdatascience.com/7-basic-tools-of-quality-using-r-49fef5481e07?source=collection_archive---------20-----------------------
r 代表工业工程师
使用 R 包创建基本的质量工具
Image by CCBOE
质量的 7 个基本工具:介绍
历史上,质量推动公司和组织生产和提供更好的产品和服务。它与产品的品牌有着内在的联系,代表着一种竞争优势和与竞争对手的区别。为了在满足客户需求的同时从中获利,公司和组织开发了各种方法、框架和工具来解决试图影响其产品和服务质量的问题。然而,有一些常用的工具可以应用于任何行业,从产品开发阶段到交付,用于解决关键的质量相关问题。
也被称为 7 QC 工具,质量的七个基本工具最初由东京大学的工程学教授石川馨概念化,受到 W. Edwards Deming 在 20 世纪 50 年代的一系列演讲的影响。石川的质量的七个基本工具对应于一套固定的图形和统计技术,有助于解决关键的质量相关问题。作为整体质量保证工作的一部分,它们被广泛用于微调过程。同样,它们被认为是基础,因为任何受过非常基础的统计培训的人都可以轻松实现它们。
“从我过去的经验来看,一个公司内多达 95%的问题都可以通过这些工具来解决,因为它们可以用来解决绝大多数与质量有关的问题”(Ishikawa,1985 年,摘自他的书《什么是全面质量控制?日本人的方式)。
帕累托图
也称为帕累托分布图,帕累托图是一个垂直条形图,其中从左到右按相对频率的降序绘制数值。在分析问题的第一阶段,它是一个非常有用的工具,因为它有助于通过查看图表中最高的条形来直观显示哪些问题需要首先注意,这些条形代表对给定系统具有最大累积影响的变量。
由意大利工程师维尔弗雷多·帕累托开发的图表提供了帕累托原理的图形表示,该理论认为给定系统中 80%的输出是由 20%的输入(即缺陷、错误、差错)产生的。该图表旨在从(~ 80%)中识别出 至关重要的少数 ( ~20%)。这是一个双轴图表,其中左轴对应于输入频率,而右轴对应于其累积百分比。我们来看看下面的 R 代码,生成一个帕累托图。
Pareto Chart R Code
Pareto Chart example using SixSgima R package
运行图表
运行图也称为运行顺序图,是一种按时间顺序显示观察数据的图表。运行图有助于发现数据中的模式和异常,这些模式和异常表明一个过程随时间的变化或可能影响其可变性的特殊因素。在运行图上,x 轴通常代表时间或运行,而 y 轴代表被观察的属性。我们来看看下面的 R 代码生成运行图。
Run Chart R Code
Run Chart example using SixSigma R package
柱状图
直方图是数据的图形表示。数据由图表上的柱形图表示,柱形图的高度取决于特定数据范围出现的频率。直方图以易于理解的图形方式显示数据;它们揭示了数据的中心、变化和形状;它们说明了数据的基本分布;它们能够预测未来的过程性能;并且它们允许理解过程是否能够满足客户需求。让我们看看下面的 R 代码来生成一个直方图。
Histogram R Code
Histogram example using SixSigma R package
因果图
因果图也被称为石川或鱼骨图,它是一种工具,可以帮助识别影响、问题或不良结果的潜在根本原因,同时将它们分为六大类,通常称为六个 M s:测量、材料、机器、方法、人力和自然。所分析的结果被放置在鱼头上,而原因基于它们相应的类别被放置在鱼刺上。在头脑风暴会议期间,团队成员必须不断地问“为什么会这样?“生成潜在的原因;有多层原因是一种常见的做法,其中各层表明因果关系。我们来看看下面的 R 代码生成一个因果图。
Cause-and-Effect R Code
Cause-and-effect diagram example using SixSgima R package
散点图
散点图是一种数学图表,它在 X-Y 图上绘制成对的数据,以揭示数据集之间的关系。它们需要两组数据:第一组通常称为自变量( x ),第二组通常称为因变量( y )。散点图有助于确定数据集之间是否存在相关性。换句话说,如果变量之间存在某种关系,而这种关系往往会以一种不仅仅基于偶然性的方式一起出现。然而,即使散点图可能暗示数据集之间的相关性,也应该始终考虑到 相关性并不一定意味着因果关系 。我们来看看下面的 R 代码生成散点图。
Scatter Plot R code
Scatter Plot example using SixSgima R package
控制图
控制图是描述产品或过程的样品是否符合其预期规格的图形表示,如果不符合,则描述它们与这些规格的差异程度。它们允许监控过程是否在统计控制之下;帮助可视化变化;发现并纠正出现的问题;预测结果的预期范围;并从特殊原因分析过程变化的模式。
控制图分为两大类:一类用于监控离散数据——根据样本大小进一步划分(如 X-MR 图、I-MR 图、X-条形图、R-图和 s-图)—;另一类用于监控连续数据——根据单位缺陷数再根据样本大小进一步划分(如 c-图、u-图、NP-图和 p-图)。对于下面的例子,我们来看看下面的 R 代码生成 c-chart。
c-chart R code
c-chart example using qcc R package
如果有兴趣了解更多关于何时使用每种类型的控制图,如何解释它们的结果以及构建它们的 R 代码,请参考我以前的文章这里。
板式挡帘
也被称为缺陷集中图,检查表是一种结构化的、准备好的表格,用于在数据生成的位置实时收集和分析数据。它通常是一种空白表格,旨在快速、简便、高效地记录所需的定量或定性信息。其主要特征之一是通过在其上做标记(即检查)来记录数据。使用检查表的一些优点包括:显示数据的有效方式;使用方便;能够识别问题的根本原因;可用于证实或反驳指控;并且代表了构建其他图形工具的第一步。让我们看看下面的 R 代码来生成一个基本的检查表。
Check Sheet R code
Check Sheet example using grid R package
如上面的代码所示,在 R 中编码可能不是开发检查表的最有效的方法。然而,我不想在没有解决和编码它们的情况下结束这篇文章。这是由工程师来决定最好的工具/程序/软件用于他们的开发,但是为了简单起见,我不推荐你使用 R 。
总结想法
本文研究的七个基本质量工具代表了开发根本原因分析、实施精益六西格玛项目和管理质量改进计划的非常有用的工具。
工程师必须熟悉和熟悉这些工具,以便从他们的工程工具箱中拿出合适的工具来处理给定系统中的问题,并帮助保持所生产的产品和服务的一致性。
拥有他们的 R 码的主要优点之一是他们的 再现性 只需要修改他们的初始输入。本文并不打算说服读者在开发这些工具时严格使用 R for,而是介绍如何用几行代码在一个免费的开源软件中开发它们。
— —
如果你觉得这篇文章有用,欢迎在GitHub上下载我的个人代码。你也可以直接在 rsalaza4@binghamton.edu 给我发邮件,在LinkedIn上找到我。有兴趣了解工程领域的数据分析、数据科学和机器学习应用的更多信息吗?通过访问我的介质 简介 来探索我以前的文章。感谢阅读。
-罗伯特
高效人工智能商业项目的 7 个习惯
原文:https://towardsdatascience.com/7-habits-of-highly-effective-ai-business-projects-6ced590e6db8?source=collection_archive---------45-----------------------
好的和伟大的 AI 商业项目有什么区别?大多数关于构建有效人工智能的建议都集中在工作的数据科学和技术方面。
这些当然是至关重要的,但现在有足够的行业经验来开始推测有效的人工智能工作的其他特征。
以下是我认为有助于伟大的人工智能工作取得商业成功的 7 个特征。希望这是你对自己的人工智能商业项目的渴望的食粮。
什么是高效的 AI 商业项目?
大多数从事人工智能工作的人可能会承认,高效的人工智能商业项目仍然不是标准。人工智能工作被认为主要是技术性的,重点是算法、数据科学和数据工程。
企业谈论其人工智能工作的量化商业利益的例子仍然相对较少。但这种情况正在发生变化,可衡量的商业目标开始更经常地出现在商业人工智能工作中。
一个好的人工智能商业项目提供的人工智能输出应该或者能够帮助一个企业。高效人工智能工作由实现和展示业务成果的需求驱动:
一个高效的人工智能商业项目非常注重商业,商业成果决定了项目的其余部分。这些始终是整个团队的首要任务。
这对于人工智能来说还不是典型的,对于许多投资人工智能的企业来说充其量只是一种期望。但这是一个有用的愿望,塑造了一个组织中所有人工智能工作的基调和文化。
即使这在你的项目中仍然难以捉摸,瞄准它也是值得的。你就不太可能误入被技术过度引导的人工智能陷阱。
这里有 7 个“习惯”可以考虑在你的人工智能工作中采用。理想情况下,它们会加速你迈向高效人工智能商业项目的进程。至少,它们将有助于在人工智能工作中保持技术和商业优先事项之间的健康平衡。
习惯 1: 业务团队成员世卫组织了解 AI 基础知识
人工智能在技术上的复杂性是实至名归的。构建良好的人工智能解决方案需要深厚的技能,很多是技术性的。然而,这并不意味着团队中的每个人都必须理解这种复杂性。
相反,让业务团队成员了解人工智能如何发挥其明显魔力的原理会有所帮助。不被基础的数学和统计学所困扰甚至是一种优势。
相反,对于商业用户来说,更常见的是在几乎没有人工智能教育的情况下被招募到人工智能项目中。他们通常“在工作中”获得人工智能知识。当业务参与的角色是定义需求时,通常就是这种情况。在许多情况下,这是一种合理的方法,并且可能是唯一可用的选项。
但是,如果有机会,可以考虑给来自业务的 AI 团队成员配备更多的知识。这将允许他们做比指定业务需求更多的事情。这将产生开销,您的数据科学家和业务分析师可能不会完全满意。但你可能会带来更好的业务成果。
习惯二: 现实的商业期望来自艾
新技术的一个缺点是对它能做什么有不切实际的期望。这是如此普遍,以至于 Gartner 炒作周期的一个阶段被称为“膨胀预期的顶峰”。 AI 目前容易被夸大期望,部分原因是主流媒体报道太多。
人工智能项目的一个挑战是那些期望过高或无法实现的结果的商人。一个变化是对成功的人工智能解决方案的时间尺度的高期望。这与不愿意容忍实验或失误是分不开的。
不切实际的期望的另一个方面是没有意识到不良或不充分数据的重要性。这表现为对为人工智能使用准备数据的努力缺乏耐心。
有许多方法可以验证商业期望,从教育到合作开发目标。你如何处理取决于你的组织。收购的习惯是一个人工智能团队和具有一致期望的受影响的业务。请记住,结盟可能意味着只是在同一个球场。
习惯 3:
询问和回答正确的商务问题
好的人工智能商业解决方案是围绕有意义的商业问题而设计的。有意义包括有足够的适当数据来有效地回答这些问题。
但是从技术角度来看,问题的质量并不重要。AI 的心脏是建立在统计数据和代码上的,与商业意义无关。AI 技术不会“在意”你设计的算法是不是计算一些没有意义的东西。它们会像对商业更有用的东西一样平稳运行。
高效人工智能商业项目的一个标志是一个潜在的商业问题,它以一种可量化的方式将数据科学和技术发展联系在一起。即使是一个不起眼的聊天机器人也可以被可量化的业务改进所驱动。
因此,有必要检查一下你的预期业务成果和人工智能特性之间的联系。如果不清楚或“模糊不清”,您可能希望更深入地了解潜在的业务问题。
习惯 4:
知道 AI 的价值只有在业务实现时才会出现
人工智能解决方案满足需求的程度并不决定它提供的商业价值。人工智能只能通过将其成果融入业务流程和运营来实现商业价值。
商业在人工智能项目中的角色是最低限度的指定需求。它还可能扩展到帮助将这些转化为人工智能功能。在某些情况下,业务用户可能还会从业务的角度帮助发现数据。
不太常见的是提前考虑商业将如何在实践中使用人工智能输出。至少,这涵盖了交付业务改进的高层次目标。但理想情况下,它还应该涵盖操作细节。这些将包括谁将使用人工智能输出,业务流程将如何改变,以及提供什么样的沟通和培训。
典型的情况是,只有在开发接近尾声时才开始详细考虑这一点。相比之下,高效的人工智能业务项目在早期就致力于业务实施规划和影响,以及人工智能解决方案设计。
习惯五:
欣赏有效的人工智能工作包括“错误”和“浪费”的努力
人工智能工作本质上是分阶段实验性的,并使用快速发展的技术。所以有些 AI 工作可能会出错,有些会被浪费也就不足为奇了。但这不同于因为缺乏经验或年轻的技术而出错。作为寻找正确答案的数学过程的一部分,有效的人工智能工作会把事情“弄错”。
人工智能中的一些基础统计和数学技术本质上是基于试错法。它们是可行的,因为今天强大的计算机可以重复计算数百万次,直到找到正确的答案。所以你只有拒绝很多错误的答案,才能找到正确的答案。这适用于人工智能工作的几个方面,从优化算法到挑选正确的数据特征。
“错误”答案是寻找正确答案的一部分的另一个领域是在探索可用数据时。大多数人工智能项目都有一个早期阶段,叫做探索性数据分析或类似的东西。这一切都是为了试验可用的数据,寻找提取相关业务洞察力的方法。
人工智能工作的一个不可避免的风险是在探索性工作上花费了比“必要”更多的时间。但是你只有在找到你想要的正确答案后才能知道最短的时间。如果你过于努力地减少这一点,一个更糟糕的风险就会出现。你冒着为你的业务问题开发一个无效或低效的人工智能解决方案的风险。
高效的人工智能商业项目在负责任和挥霍的实验阶段之间取得了平衡。在寻找这种平衡的过程中,有一个强有力的论点,那就是宁可选择更好的长期业务结果。另一种选择是在较低的短期项目成本和时间范围方面出错。
习惯 6:
知道每个人都会对合理的预算有点不满
人工智能不便宜,但也不一定很贵。如果你理解构建人工智能的过程,就有可能在合理的预算和时间范围内做有意义的工作。如果你不这样做,那么它也有可能招致重大和/或可避免的成本。
对于更传统的 IT,在设定对工作、持续时间和预算的预期时,有基准、经验法则和经验可供使用。还有一个相对成熟的市场,所以如果你需要一件作品的报价,大多数都是可比的。
这对于人工智能来说还不存在,所以估计人工智能预算和项目持续时间是很棘手的。人工智能工作某些阶段的实验性质加剧了这种情况。这意味着让人工智能团队承诺预算和日期可能是一项令人不舒服的工作。有时估计似乎很高,因为这项工作确实很难。但其他时候,这可能是缺乏经验或过于热情的反映。
高效的 AI 项目提供足够的投资和时间,让团队有机会成功。但是他们并没有提供太多健康的压力。正确的平衡可以防止任何忽视结果及其商业价值的倾向。
合适的预算可能超出了赞助商的承受能力,但却低于人工智能团队的理想需求。
这两者之间的差距太大而无法弥合并不罕见。在这种情况下,不匹配可能指向一个或两个期望集的问题。
习惯 7:
证明有效的人工智能工作是一个持续的平衡行为
人工智能仍然相对年轻,具有内在的实验阶段和多变的行业经验。过多的人工智能“蛇油”销售人员于事无补。关于如何最好地完成人工智能工作,还需要一段时间才能有可靠的全行业数据。在那之前,判断支出多少、艾龙应该如何应对以及预期的商业利益有多大仍将是棘手的。
只要这个挑战仍然如此巨大,管理和交付人工智能工作将继续是一系列平衡行为。
仔细的思考和计划是至关重要的,拥有足够的知识不会被误导或更糟。但开发 AI 是一项动手活动,很容易在早期过度思考。你可以在几天的探索性数据分析中获得比几周的策略和计划更多的东西。所以想和做的平衡是一个方面。
商业、技术和数据科学之间也存在固有的紧张关系。一个有效的人工智能项目团队反映并尊重这三者。它建设性地平衡了紧张关系——至少在大多数时候。
最后,人工智能始于实验室,现在仍然是科学家和数学家的领域。但观众、受益者和赞助商都是商人,动机不同。也许这两种心态之间最大的平衡就是在“最好”和“足够好”之间找到正确的平衡点。这在优化模型和算法的实验阶段尤为明显。
高效的人工智能商业项目团队理解平衡“思考”、“管理”和“做”的需要。尽管涉及不同的心态、压力和优先事项,他们在大多数时候都能找到保持这种状态的方法。
高效人工智能商业项目的 7 个习惯:外卖
构建人工智能解决方案是一项足够困难的技术练习。企业是否会有效地使用它们似乎是一个额外的复杂因素。但是高效的人工智能商业团队意识到商业利润为他们的工作买单。
有效的技术工作应该是企业对人工智能团队的最低期望。有效的数据科学工作将期望转移到技术工作所产生的意义上。好的人工智能团队的核心是接受这一点,甚至是热情,而不是宽容或忍耐。
为了将商业中的人工智能工作从优秀提升到卓越,还有从商业意义到商业价值的进一步转变。但这总是超出了人工智能团队的直接控制,需要在更广泛的业务中建立桥梁。
一个高效的人工智能商业项目从一开始就考虑到了更广泛的业务。它相应地调整自己的活动、团队构成和心态。本文中的 7 个习惯是这种团队及其工作的特征,但在大多数组织中是有抱负的。
然而,如果你在领导或参与一个人工智能项目,你会有机会尝试将其中的一些付诸实践。
这是让所有人一直养成习惯的良好开端。
本文最初发表于【www.aiprescience.com】
7 人工智能技术的影响
原文:https://towardsdatascience.com/7-impacts-of-the-artificial-intelligence-technology-5a4663397961?source=collection_archive---------8-----------------------
https://images.pexels.com/photos/1229860/pexels-photo-1229860.jpeg
人工智能是一项比你知道的重要得多的技术。每个企业都需要在他们的网站设计、应用程序开发和营销过程中应用它。换句话说,每个企业都需要与人工智能开发者合作。例如,游戏应用和游戏机的开发者在人工智能方面非常广阔。其实很多都是 AI 开发者。这是因为人工智能让电子游戏变得有趣。无论你玩什么视频游戏,你都会得到系统的响应,而且它会根据你的输入进行定制,无需人工干预。
这篇文章实际上讨论了让 AI 开发者和 AI 技术都变得非常重要的好处。仔细阅读之后,如果你还没有开发这项技术,你就会知道你错过了什么。
1。基于语音的搜索正在兴起
语音命令始于 Alexa,许多人抓住了发布语音命令的便利,而不是必须键入它们。任何系统都需要人工智能才能处理语音命令。
现在,很多人已经开始用语音指令进行在线搜索。你不是也更喜欢发出语音命令而不是敲出来吗?事实上,据报道,到 2020 年底,一半的在线搜索将是基于语音的。肯定是因为方便。所以,雇佣人工智能开发者来优化你的网站进行语音搜索是很有必要的。
2。全天候可用性
网站和移动应用程序全天候可用,但支持人员通常不是全天候可用的。任何一天 24 小时服务的客户服务团队都必须轮班工作。不幸的是,客户现在太不耐烦了,他们想要即时响应。他们不想再等 24 小时了。
人工智能为这个问题提供了解决方案——人工智能聊天机器人。许多网站都配备了聊天机器人,可以随时随地即时回复顾客的查询。你一定注意到现在很多网站上都有实时聊天。大部分都是聊天机器人开的。使用聊天机器人可以节省你雇人 24 小时管理你的网站的费用。所以,AI 节约了成本,提高了你的销售转化率。
3。改善用户体验
如果实施得当,你网站的访问者可以享受到很好的用户体验,这将使他们再次访问你的网站。实现这一点的一个方法是预测他们在寻找什么。当他们键入任何产品的名称时,你的网站应该向他们展示名称与这些字母匹配的产品选项,这样他们就可以选择了。
减少访问者在你的网站上打字的次数有助于极大地改善他们的体验。另一种方法是向他们展示他们最后的订单。根据他们的订购模式,机器人可以向他们展示他们最后的订单,这样他们就不必再次重复这个过程。想象一下,有人同时订购了 10 件以上的商品。如果给她一份准确的订单,她会感到轻松很多,这样她就不用一个接一个地挑选了。
现在来说说 AI 在其他领域的优势。
4。减少误差
AI 机器人工作在代码上,缺乏情感。所以,他们不能被任何事情分心。他们以 99.9%的准确率完成任务,这是人类无法企及的。无论是数据分析还是简单的计算,机器人都会以可靠的精度完成。
这就是为什么一些公司雇佣他们进行数据分析。您知道重要的业务决策是基于数据分析数字,如果数字不准确,可能会造成灾难性的后果。为了准确起见,在你的商业报告和数据分析中使用人工智能。
5。速度增加
这是不言自明的。机器人、机器和计算机以惊人的速度工作。所以速度是开发人工智能技术的原因之一。以微软 Excel 为例。要计算数百个数字的总和,你只需突出显示这些数字,然后点击自动求和按钮,答案就会立即出现。这正是机器人快速工作的方式。因此,如果你欣赏计算的速度,想想人工智能。
6。危险任务
有些任务不能由人类来完成,因为涉及到危险。然而,由于其结果的重要性,需要执行这些任务。这样的任务现在由机器人来完成。例如,一些探险活动是危险的,因为这些活动可能会释放出气体。最好是设计机器人来执行这样的任务。
如今,机器人被设计用来探索太空,拍摄快照并将其发送到地球。一些机器人甚至可以自己驾驶航天飞机。它们是专为这项工作设计的。这一切都是基于人工智能。
7。医疗应用的激增
人工智能催生了众多医疗应用。这些应用程序有助于温和的诊断和处方。他们只需要在应用程序上输入症状和病史。将对疾病进行诊断,并开出药方。
这些应用依赖于大量的医疗数据,以便能够准确地诊断和开出药物。
总而言之,人工智能有助于语音命令、24/7 可用性、改善用户体验、减少错误、提高速度、危险任务、医疗诊断和处方,以及许多其他领域。
作者简介:
Melissa Crooks 是一名内容作家,为 Hyperlink InfoSystem——一家位于纽约、美国和印度的移动应用开发公司——撰写文章,该公司拥有最优秀的技术娴熟的专业应用开发团队。她是一名多才多艺的科技作家,喜欢探索最新的科技趋势、企业家和创业专栏。她还为顶级应用开发公司写文章。
数据科学家的 7 条经验教训
原文:https://towardsdatascience.com/7-lessons-learned-for-data-scientists-461d435d68d5?source=collection_archive---------27-----------------------
Photo by Justin Main on Unsplash
从错误中学习是件好事。不如从别人的错误中吸取教训。”—沃伦·巴菲特
我们即将进入一个新的十年。你们中的许多人正在开始一份新的职业,成为一名数据科学家。你们中的一些人正在考虑采取行动。最好有更多的信息,更多的视角,来做出最好的决定。因此,这篇文章。我并不自称聪明,但这 7 条建议比其他任何东西都更符合智慧。它们是我在 Guidehouse 担任咨询数据科学家的经验的精华。他们学到了迄今为止非常有趣的旅程。我希望我从第一天就认识他们。此外,我希望它们能帮助你在自己的 DS 之旅中更上一层楼。把肉拿走,把骨头吐出来。
课程
- 尽可能多地使用函数式编程 (FP)的基础知识,并且对你的项目环境有意义。我之所以这么说,是因为我不是编程范例方面的专家,也不想把 FP 作为某种灵丹妙药,在 15 分钟之内摧毁你的数据难题。面向对象编程也存在,还有其他的。但是在 FP 有意义的地方,使用下面的技巧来增强你的代码。首先,必要时避免循环。使用映射函数或递归。"扁平胜过嵌套"—python 的禅。第二,方法链接功能强大,可读性强。python Pandas 包有一些像这样的内置函数,包括管道方法,但是我相信 R 中的% > %比 python 中的对等函数更优雅,所以我打算学习它们。最后,函数应该在每次运行时返回相同的输入值。这条规则使你的程序函数符合函数的数学定义。函数应该只对局部范围内的变量进行操作,而不是全局。这减少了可能在代码中导致意想不到的后果的副作用,并且通过使您的代码更具可重用性和“功能性”来增加函数的安全性记住,计算机会完全按照你的要求去做,只是不总是你希望发生的。
- 易于记录的数据清理流程 —使用有向无环图或类似的流程图来可视化您选择的数据清理流程。由于分析高度依赖于您应用于数据的任何过滤器、聚合或转换,因此,如果您需要改变方向或进行更正,您需要一种方法来与利益相关方交流您的清理选择。始终记录。这与版本控制和命名结构密切相关,它们应该被仔细地实现,但是对它们的深入讨论将在另一篇文章中进行。
- 简单的往往比复杂的好。从那里开始,然后迭代。始终获得中间步骤的反馈。不要总是去寻找最炫的新算法,要加倍努力寻找有效的算法。了解没有免费的午餐定理。
- 可解释性——在生产环境中,你可能不需要可解释性,因为模型预测才是最重要的。但在咨询环境中,我发现自己所处的环境,可解释性是至关重要的。如果你不能解释你的分析结果,没有人会相信你,或者更糟,没有人会关心你的工作。可解释性发生在两个方面,一方面是模型的可解释性,另一方面是你解释你的模型/分析做了什么以及从中可以得出什么见解的能力。有些模型比其他模型更难描述,但是你对它们的直觉是可以培养的。两者兼而有之,这样人们就会利用你脑力劳动的成果。
- 可再现性(Reproducibility)——尽可能写容易理解的代码,但不要太简单。其他人会阅读和使用你的代码,所以记住这一点。你可能要把分析结果搁置 6 个月,然后再拿起来。所以,帮你自己和其他人一个忙,写一些可读的注释代码。
- 考虑 你要面对的观众他们关心什么,以及你如何通过讲述一个关于数据和你利用数据的发现的故事来说服他们。这和第 4 点类似。也许这更重要。学习如何讲述一个关于数据的故事,并问问自己,在这个特定的时间点,这个故事是否值得告诉风险承担者,并牢记您特定的项目目标。
- 你需要的工具可能是另一种语言。不要害怕学习,也不要卷入关于什么是最好的争论。“在 medio veritas 中”。每种语言都有它的长处。在记住之前的经验(简单性、可再现性)的同时,关注这些以及将它们结合起来的方法
记住,“大事始于小事。”——大卫,在普罗米修斯里。长期持续的努力可以带来巨大的收益。如果您不能立即开始实施所有这些,或者在您所处的 DS 环境中实施它们没有意义,请将重点放在最有效的 1 或 2 项上(帕累托原则)。实施这些,给这个世界你能提供的最好的东西。
今年让我难忘的 7 堂机器学习课
原文:https://towardsdatascience.com/7-machine-learning-lessons-that-stuck-with-me-this-year-27138a96281b?source=collection_archive---------14-----------------------
不,这不是用什么机器学习库的问题。
在过去的两年里,我一直是机器学习的学生,但在过去的一年里,我终于能够应用我所学到的东西,并巩固我对它的理解。所以我决定分享我在机器学习的“第一年”学到的 7 个教训,并希望让这篇文章成为每年的传统。
1.数据是女王
开始之前考虑一下数据
如今,由于网上存在大量的学习资源,学习机器学习相对容易。不幸的是,他们中的许多人倾向于掩盖数据收集和清理步骤。
在我的第一个严肃的机器学习项目中,我和我的团队遇到了一个大问题:我们从哪里获得数据?我们需要数以千计的动物图像,在放弃搜索网络的想法后,我们遇到了 CIFAR-100 数据集。但是就在我们认为所有的问题都解决了的时候,我们意识到我们需要预处理我们的数据(去除背景,缩小比例,转换成矢量等等。)然后再馈入我们的深度学习模型。这被证明是我们项目中最耗时的部分(除了大约一周的通宵训练和调整我们的模型)。
任何机器学习项目的数据部分都不应该被忽视,“数据来自哪里?”应该是你开始前首先要问的问题之一。
2.领域知识很重要
领域知识有时和技术技能一样重要
人们很容易陷入这样的想法,即使用机器学习解决问题只需要技术技能。现实是,如果你只从数字和算法的角度考虑你面前的问题,你将很难走得很远。就这一次,在一个你不太了解的领域里想出项目点子可能会很困难。但是,即使你设法提出了一个伟大的想法,领域知识在决定你需要收集什么样的数据以及在训练你的机器学习模型时应该使用什么类型的特征时,也会非常有帮助。
你当然不需要成为应用机器学习技术的每个领域的专家,但你应该准备好尽可能多地学习,并与那些拥有领域专业知识的人合作。
3.机器学习不是银弹
机器学习不是一切的答案
过去几年,机器学习发展如此迅速,人工智能初创公司的数量在增加也就不足为奇了。有一种驾驭人工智能浪潮的冲动,越来越多的公司似乎正在投资聘请机器学习工程师和数据科学家,希望在竞争中领先。但现实是,机器学习并不总是答案,基本分析往往是最佳和最具成本效益的解决方案。
即使一家公司可以证明机器学习的使用是合理的,这也不意味着它准备实施它。我在我工作过的几家公司看到了利用机器学习能力的渴望,但他们往往没有足够的相关数据,质量也值得怀疑。
在你开始建立一个机器学习模型之前,你应该总是做你的研究并尝试不同的技术来解决一个问题,这可以节省你大量的时间和金钱。
4.无需从头开始编码
拥抱社区已经创造的工具
学习基础知识是至关重要的,它将确保你在处理问题时做出最好的决定,但从头开始编写机器学习模型不是很实际。
当我在学校开始学习机器学习时,我从头开始编写基本算法,但我很快意识到,我不需要为了将理论付诸实践而重新发明轮子。事实上,通过使用基本的机器学习库和 API 解决问题,我开始在学习中进步得更快,这只是给了我更多的时间来明智地思考失败的方法和思考优化。
下一次你有问题时,你的目标应该是在你从头开始编码之前,找出是否有一个 ML 工具来帮助你解决它。
5.人在回路中
人类和机器一起更强大
不管主流媒体想让我们相信什么,人工智能的当前状态还没有能力取代人类。
YouTube 是一个很好的例子,说明了人在循环中的重要性,即人参与到机器学习过程的每个阶段。例如,考虑一下 YouTube 的算法是如何错误地对成千上万的视频进行版权保护和去货币化的,创作者群体真的很痛苦。机器学习算法还不够“智能”,不足以单独区分合理使用和版权,使用人类判断来检查算法建议并提供反馈极其重要。
机器驱动的系统非常强大,但它们仍然达不到预期的准确率,在人类的帮助下,它们可以实现超出我们想象的伟大成就。
6.这是一门艺术!!
有时这全靠经验和大量的尝试和错误
我记得在讲座结束后,我找到我的教授,问他如何在人工神经网络中选择正确的神经元数量和隐藏层。我希望有一个公式或某种标准方法来得出正确的组合,但我得到的只是轻微的傻笑和“这是一门艺术!”。我的教授解释说,找到正确的组合取决于经验和大量的尝试和错误。听到这一点我有点失望,但我越是与机器学习算法,特别是神经网络打交道,我就越能接受这样一个事实,即在机器学习中没有“一刀切”的做法。
有许多不同的方法可以帮助你优化机器学习算法,你应该尽可能多地熟悉这些方法,但最重要的是,要习惯于跳出框框思考,进行大量的试错。
7.找一个导师或伙伴
愿意寻求帮助
这一课不仅仅适用于机器学习工程师,无论你在哪个领域,你都应该认识到寻求帮助的力量!
独自工作当然没有错,但不可否认的是,有一个伙伴或导师往往能帮助你更快更远地前进。在我的学习过程中,有一位导师是至关重要的,有第二双眼睛来修改我的作品让我受益匪浅。
我们很多人都避免寻求帮助,要么是因为害怕被拒绝,要么只是因为给别人带来不便,但你会惊讶地发现有多少人愿意不怕麻烦地伸出援助之手。练习寻求帮助,并见证它如何让你的生活变得更好。
希望这些教训对你的机器学习生涯有所帮助。如果你有任何问题或者想分享你自己的经验,我很乐意在评论中看到它们!
当你开始与图书馆合作时,7 个实用的熊猫提示
原文:https://towardsdatascience.com/7-practical-pandas-tips-when-you-start-working-with-the-library-e4a9205eb443?source=collection_archive---------10-----------------------
解释一些乍一看不那么明显的东西…
简介
在本文中,我想分享一些我认为对任何开始数据科学之旅的人都有用的技巧。Python pandas 包是数据科学家使用最多的库之一,对于任何想要涉足该领域的人来说,它绝对是必不可少的。
有时候学习之旅并不那么直截了当,所以我想分享一些让学习变得更容易的小技巧。一些提示是熊猫最重要的一些功能的更传统的用法,而其他的是关于如何在包装内做一些事情的实用建议。
请继续阅读!
使用这三个函数来检查你的数据:head()、info()、describe()
这三个函数将帮助您进行初始数据分析,并且已经为您提供了关于数据集的大量信息。加载数据集后运行这三个工具总是一个好的开始。
我们将加载 iris 数据集来演示它们是如何工作的。您可能会在加载 csv 文件后立即这样做。
from sklearn.datasets import load_iris
import pandas as pddata = load_iris()
df = pd.DataFrame(data['data'], columns=data['feature_names'])
df['species'] = data['target']
现在数据已经加载,您可以看到 head 函数是如何工作的:
您可以看到它显示了数据框的前 5 行,其列名在顶部,索引在左侧。这已经是一些有趣的信息了。现在让我们尝试使用 info()函数:
这为我们提供了关于行数、150 个条目和 5 列数的信息。您可以在我们的列中看到哪些数据类型。在这个例子中,除了 species 列是一个整数之外,所有的列都是浮动的。
让我们看看 describe()函数可以在这里添加什么:
这里有更多的信息。我们可以看到每一列的最大值和最小值。我们也可以阅读集中趋势摘要:平均值和标准差,以及四分位范围(25%,50。75%).
这里还有一点没有探讨。在我的数据集中,所有的列都是数值型的,describe()函数对数值型和分类型变量的工作方式不同。为了演示如何使用这两者,我将添加一个名为“is_dangerous”的伪分类列。
import numpy as np
df['is_dangerous'] = np.where(df['sepal length (cm)']>6, 'yes', 'no')
我刚刚使所有萼片长度大于 6 的行变得危险。我们现在打电话描述一下。
请注意,我已经在 describe()中使用了 include 参数,并将其设置为“全部”。这使得函数也包括分类变量的数据描述。您可以看到 is_dangerous 列有两个唯一的值,最常见的是“no ”,它出现了 83 次。
我希望您可以看到,仅仅通过这三个函数:head()、info()和 describe()您就可以了解到许多关于数据的信息。
如何查看数据框中的所有列
如果您的数据框中有许多列,jupyter 笔记本的默认行为是显示一些第一列和最后一列以及中间的三个点(…)。如果您的数据框有许多行,并且您想要查看所有行,情况也是如此。简单的解决方法是使用以下代码检查数据框的尺寸并更改默认显示设置:
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)
在代码中导入后添加此内容,并将数字设置为您的数据框尺寸。
如有必要,重命名列名
如果列名过长,包含空格,或者不是好的列名,最好的方法是重命名它们。在你分析的一开始就这么做,会解决很多问题。让我们看看 iris 数据集中的默认列名。
您可以看到这里的列名并不理想。我认为公制(厘米)是多余的,我建议使用下划线代替空格。这将允许您稍后使用点符号选择数据框中的列。那我们换个名字吧:
df.columns = df.columns.str.replace(' \(cm\)', '').str.replace(' ', '_')
我删除了列名中的'(cm)'并用下划线替换了空格。通常的做法是删除列名中的尾随空格(如果有的话)。此外,如果列名没有遵循可以应用于所有列名的模式,您可以一个一个地更改它们。
使用内置的绘图功能绘制简单的数据图
要做简单的绘图,你可以使用内置的熊猫函数。Pandas 函数在某种程度上是有限的,为了进行进一步的分析,你可能需要学习如何使用 matplotlib 或 seaborn,但是如果你想制作一个快速图表来查看你的数据,你可以使用这些一行程序。让我们用 Iris 数据集再次探索它们。我将绘制数据集中所有例子的萼片长度:
这里的 x 轴代表指数(单个例子), y 轴代表萼片长度。记住在 matplotlib 导入后添加' %matplotlib inline' ,这样您的图形就会显示在笔记本中。
你也可以把这两个变量分散开来。让我们通过将萼片长度与萼片宽度进行分散来展示这一点。
另一个有用的熊猫图是直方图,它可以应用于整个数据框。这样,它将为所有数字列绘制直方图:
为了可视化分类数据,您可以使用 pandas 的 value_counts()函数和条形图:
可以看到用熊猫库绝对可以做一些简单的图形。深入研究文档,了解更多信息,并学习如何使用不同的参数使您的图形更好。
了解 loc 和 iloc 选择的工作原理,并能够自信地使用它
Loc 和 iloc 是从数据框中选择数据的方法。loc 允许您通过名称(列名和索引名)访问数据,而 iloc 也是如此,但是您需要对列和索引都使用整数索引(因此 iloc 表示 int number)。
让我们看看它们在实践中是如何工作的:
df.loc[:, ['sepal_length', 'sepal_width']]
上面的代码为 sepal_length 和 sepal_width 两列选择了所有行(冒号是 all 的快捷方式)。
df.loc[10:50, ['sepal_length', 'sepal_width']]
上面的代码选择了相同的列,但只选择了 10 到 50 之间的行。我们在这里使用整数来选择行,而我们使用 loc,这可能会令人困惑。这是因为我们的索引是整数,因为我们在创建数据框时使用了默认索引。你可以有字符串形式的索引,比如唯一的行标识符。为了展示这一点,让我们将索引改为字符串:
我现在已经将索引改为字符串,并调用 head 函数来查看一些数据条目。
乍一看,数据框看起来是一样的,但我想说明有一个重要的区别。让我们尝试与上一个示例相同的选择:
尝试这段代码时,应该会出现错误。我不打算深究错误的细节,但这是因为 loc 需要使用特定的索引值,这些值现在是字符串,而不是整数。但是,您可以使用 iloc 来执行相同的操作。
您能看到我们必须将列名更改为相应的列号吗?这是因为 iloc 不处理列名,而是处理它们的索引(第一列从 0 开始)。
您可以在“走向数据科学”上找到有关数据框选择的更多详细教程,但我想说的主要观点是,您希望尽快了解如何使用它们,以便能够快速有效地操作您的数据框。
轴:0 代表行,1 代表列
对于不记得的人来说,这是一个相当快速实用的提示。在熊猫中,我们总是首先提到行,然后是列。因此,如果 df.shape 给定为(160,2),则意味着有 160 行和 2 列。当我们使用 loc 和 iloc 时,方括号中的第一项是指行,第二项是指列。当我们使用 pandas 函数时,需要轴参数,比如 apply(),那么轴=0 表示行,轴=1 表示列。
使用自动补全功能
我的最后一个技巧是在 jupyter notebook 中使用自动完成功能。它是内置的,当你开始输入变量来激活它时,你只需要点击 tab 键。这会节省你打字和调试错别字的时间。如果你仍然不知道如何使用它,检查一下我不久前写的 j upyter 自动完成文章。
结论
我已经给了你一些关于如何使用熊猫的实用技巧,现在是时候在一些真实的数据集上尝试它们了。这绝对不是一个排他性的列表,还有很多要学习和涵盖。我认为这可以让你走上正确的道路,并在开始使用一个新的库时消除一些最初的困惑。
祝你好运!
原载于 about datablog . com:2019 年 11 月 11 日开始与图书馆合作时的 7 个实用熊猫小贴士。
PS:我正在 Medium 和aboutdatablog.com上撰写以简单易懂的方式解释基本数据科学概念的文章。你可以订阅我的 邮件列表 在我每次写新文章的时候得到通知。如果你还不是中等会员,你可以在这里加入。
下面还有一些你可能喜欢的帖子
* [## python 中的 lambda 函数是什么,为什么你现在就应该开始使用它们
初学者在 python 和 pandas 中开始使用 lambda 函数的快速指南。
towardsdatascience.com](/what-are-lambda-functions-in-python-and-why-you-should-start-using-them-right-now-75ab85655dc6) [## Pandas 数据操作函数:apply()、map()和 applymap()
以及如何在熊猫身上正确使用它们…
towardsdatascience.com](/pandas-data-manipulation-functions-7b3519fc1370) [## 对熊猫中的数据框进行排序
如何快速有效地排序数据帧
towardsdatascience.com](/sorting-data-frames-in-pandas-a5a3af6f346a)*
确保和维持数据质量的 7 个步骤
原文:https://towardsdatascience.com/7-steps-to-ensure-and-sustain-data-quality-3c0040591366?source=collection_archive---------1-----------------------
Image by Gerd Altmann from Pixabay (CC0)
几年前,我遇到了一个大公司的高级主管。他提到,他工作的公司面临着影响客户满意度的数据质量问题,他花了几个月的时间调查潜在的原因以及如何解决这些问题。“你发现了什么?”我急切地问。“这是一个棘手的问题。我没有找到一个单一的原因,相反,许多事情出了差错,”他回答说。然后,他开始列举一长串导致数据质量问题的原因——几乎公司的每个部门都参与其中,他很难决定下一步从哪里开始。这是处理数据质量的一个典型案例,数据质量直接关系到一个组织如何开展业务以及数据本身的整个生命周期。
在数据科学成为主流之前,对于交付给内部或外部客户的报告,数据质量最常被提及。如今,由于机器学习需要大量的训练数据,组织内部的数据集需求很大。此外,分析人员总是渴望获得数据,并不断搜索可能增加价值的数据资产,这导致人们快速采用以前未探索或使用过的新数据集或数据源。这一趋势使得数据管理和确保良好数据质量的良好实践比以往任何时候都更加重要。
本文的目标是让您清楚地了解如何构建一个数据管道,从一开始就创建并维持良好的数据质量。换句话说,数据质量不是通过发现问题并修复问题就能从根本上改善的。相反,每个组织都应该首先从生产高质量的数据开始。
首先,什么是数据质量?一般来说,当数据满足客户、决策者、下游应用程序和流程的预期用途要求时,它就是高质量的。一个很好的类比是制造商生产的产品质量,对于制造商来说,好的产品质量不是业务成果,而是推动客户满意度并影响产品本身的价值和生命周期。同样,数据质量也是一个重要的属性,它可以推动数据的价值,从而影响业务成果的各个方面,如法规遵从性、客户满意度或决策的准确性。下面列出了用于衡量数据质量的 5 个主要标准:
- 准确性:无论描述什么数据,都需要准确。
- 相关性:数据应满足预期用途的要求。
- 完整性:数据不应有缺失值或缺失数据记录。
- 时效性:数据要最新。
- 一致性:数据应该具有预期的数据格式,并且可以与相同的结果进行交叉引用。
良好数据质量的标准可能因要求和数据本身的性质而异。例如,一家公司的核心客户数据集需要满足上述标准的非常高的标准,而对于第三方数据源,可能存在更高的错误或不完整性容忍度。对于一个交付高质量数据的组织来说,它需要从头到尾管理和控制在管道中创建的每个数据存储。许多组织只是关注最终数据,并在数据交付之前投资于数据质量控制工作。这还不够好,而且通常情况下,当问题最终被发现时,已经太晚了—要么需要很长时间才能找到问题的来源,要么解决问题的成本和时间都太长了。然而,如果一个公司能够在接收或创建每个数据集时管理其数据质量,那么数据质量自然是有保证的。实现这一目标有 7 个基本步骤:
1。严格的数据分析和输入数据控制
大多数情况下,坏数据来自数据接收。在一个组织中,数据通常来自公司或部门控制之外的其他来源。它可能是从另一个组织发送的数据,或者在许多情况下是由第三方软件收集的数据。因此,其数据质量无法得到保证,对输入数据进行严格的数据质量控制可能是所有数据质量控制任务中最重要的方面。一个好的数据分析工具就派上了用场;这种工具应该能够检查数据的以下方面:
- 数据格式和数据模式
- 每个记录的数据一致性
- 数据值分布和异常
- 数据的完整性
此外,还必须实现数据分析和数据质量警报的自动化,以便无论何时收到传入数据,都可以对其质量进行一致的控制和管理——在没有进行分析和检查的情况下,永远不要认为传入数据与预期的一样好。最后,应该使用相同的标准和最佳实践来管理每个传入的数据,并且应该建立一个集中的目录和 KPI 仪表板来准确记录和监控数据的质量。
2。精心设计数据管道,避免重复数据
重复数据是指全部或部分数据是使用相同的逻辑从相同的数据源创建的,但是由不同的人或团队出于不同的下游目的创建的。当创建重复数据时,它很可能不同步,并导致不同的结果,在多个系统或数据库中产生级联效应。最后,当出现数据问题时,跟踪根本原因变得困难或耗时,更不用说修复它了。
为了防止这种情况发生,组织需要在数据资产、数据建模、业务规则和体系结构等领域对数据管道进行清晰的定义和精心的设计。还需要有效的沟通来促进和加强组织内的数据共享,这将提高整体效率,减少数据重复造成的任何潜在的数据质量问题。这涉及到数据管理的核心,其细节超出了本文的范围。概括地说,需要建立 3 个方面来防止创建重复数据:
- 数据治理计划,明确定义数据集的所有权,并有效沟通和促进数据集共享,以避免任何部门孤岛。
- 集中式数据资产管理和数据建模,并定期进行审查和审计。
- 企业级数据管道的清晰逻辑设计,在整个组织内共享。
随着当今技术平台的快速变化,可靠的数据管理和企业级数据治理对于未来成功的平台迁移至关重要。
3。准确收集数据要求
拥有良好的数据质量的一个重要方面是满足需求,并根据数据的用途将数据交付给客户端和用户。这并不像听起来那么简单,因为:
- 恰当地呈现数据并不容易。真正理解客户的需求需要彻底的数据发现、数据分析和清晰的沟通,通常是通过数据示例和可视化。
- 需求应该捕获所有的数据条件和场景——如果没有评审和记录所有的依赖关系或条件,那么它就被认为是不完整的。
- 清晰的需求文档,易于访问和共享,是另一个重要的方面,应该由数据治理委员会强制执行。
业务分析师的角色在需求收集中是必不可少的。他们对客户以及当前系统的了解,让他们能够说双方的语言。在收集了需求之后,业务分析师还执行影响分析,并帮助提出测试计划,以确保生成的数据满足需求。
4。数据完整性的实施
关系数据库的一个重要特性是能够使用外键、检查约束和触发器等技术来加强数据完整性。随着数据量的增长,以及越来越多的数据源和可交付成果,并非所有数据集都可以存在于单个数据库系统中。因此,数据的引用完整性需要由应用程序和流程来实施,它们需要由数据治理的最佳实践来定义,并包含在实现的设计中。在当今的大数据世界中,引用实施变得越来越困难。如果一开始就没有实施完整性的观念,引用的数据可能会过时、不完整或延迟,从而导致严重的数据质量问题。
5。将数据谱系可追溯性集成到数据管道中
对于设计良好的数据管道,解决数据问题的时间不应随着系统的复杂性或数据量的增加而增加。如果没有管道中内置的数据沿袭可追溯性,当数据问题发生时,可能需要几个小时或几天才能找到原因。有时它可能会经过多个团队,需要数据工程师查看代码进行调查。
数据沿袭可追溯性有两个方面:
- 元数据:追踪数据集、数据字段之间的关系以及它们之间的转换逻辑的能力。
- 数据本身:快速跟踪数据问题到上游数据源中的单个记录的能力。
元数据可追溯性是有效数据治理的重要组成部分。这是通过从一开始就对每个数据集(包括其字段和结构)进行清晰的文档记录和建模来实现的。当数据管道由数据治理设计和执行时,应该同时建立元数据可追溯性。如今,元数据沿袭跟踪是市场上任何数据治理工具的必备功能,这使得通过几次点击来存储和跟踪数据集和字段变得更加容易,而不是让数据专家浏览文档、数据库甚至程序。
数据追溯比元数据追溯更难。下面列出了实现这种能力的一些常用技术:
- 通过每个数据集的唯一键进行跟踪:这首先要求每个数据集有一个或一组唯一键,然后通过管道传递到下游数据集。但是,并不是每个数据集都可以通过唯一键进行跟踪。例如,当数据集被聚合时,来自源的键会在聚合数据中丢失。
- 当数据本身没有明显的唯一键时,构建一个唯一的序列号,例如事务标识符或记录标识符。
- 当存在多对多关系,而不是一对一或一对多关系时,构建链接表。
- 为每个数据记录添加时间戳(或版本),以表明它是何时添加或更改的。
- 在日志表中记录数据更改,包括更改前的值和更改发生时的时间戳
数据可追溯性需要时间来设计和实现。然而,对于数据架构师和工程师来说,从一开始就将其构建到管道中具有战略重要性;考虑到当数据质量问题发生时,这将节省大量的时间,这绝对是值得的。此外,数据可追溯性为进一步改进数据质量报告和仪表板奠定了基础,使人们能够在数据交付给客户或内部用户之前尽早发现数据问题。
6。作为变更管理一部分的自动化回归测试
显然,当引入新数据集或修改现有数据集时,数据质量问题经常发生。为了有效的变更管理,测试计划应该建立两个主题:1)确认变更满足需求;2)确保改变不会对管道中不应该改变的数据产生无意的影响。对于任务关键型数据集,当发生变化时,应对每个可交付成果实施常规回归测试,并对数据集的每个字段和每一行进行比较。随着大数据技术的快速进步,系统迁移在几年内不断发生。具有彻底数据比较的自动化回归测试是必须的,以确保始终保持良好的数据质量。
7。有能力的数据质量控制团队
最后,两类团队在确保组织的高数据质量方面发挥着关键作用:
质量保证:这个团队检查软件和程序的质量,无论何时发生变化。该团队执行的严格变更管理对于确保组织中的数据质量至关重要,因为该组织正在经历数据密集型应用程序的快速转变和变化。
生产质量控制:根据组织的不同,这个团队并不一定是一个独立的团队。有时它可能是质量保证或业务分析师团队的一个功能。团队需要很好地理解业务规则和业务需求,并配备工具和仪表板,以检测生产中发生的异常、异常值、中断的趋势和任何其他不寻常的场景。该团队的目标是识别任何数据质量问题,并在用户和客户之前解决这些问题。这个团队还需要与客户服务团队合作,可以从客户那里获得直接反馈,并快速解决他们的问题。随着现代人工智能技术的进步,效率可能会大幅提高。然而,正如本文开头所述,最终的质量控制是必要的,但不足以确保公司创建和维持良好的数据质量。上述 6 个步骤也是必需的。
总结
总之,良好的数据质量需要严格的数据治理、对传入数据的严格管理、准确的需求收集、针对变更管理的全面回归测试以及数据管道的精心设计,此外还需要针对外部和内部交付数据的数据质量控制计划。对于所有质量问题,从一开始就防止数据问题的发生要比依靠防御系统和临时修复来处理数据质量问题容易得多,成本也低得多。最后,通过遵循本文中的 7 个步骤,良好的数据质量不仅可以得到保证,而且可以持续下去。
帮助您发现数据真正潜力的 7 个步骤
原文:https://towardsdatascience.com/7-steps-towards-putting-that-data-to-good-use-37e5c9670ea0?source=collection_archive---------34-----------------------
别再看数据了。看看你的用户。
相信我,我知道我在做什么
我以前是开发商。奥尔德斯库尔。当我们不得不解决一个问题时,我们会一头扎进去。除了代码什么都没有。码码码。我们知道我们在做什么。我们知道人们想要什么。对吗?
今天,这几乎是不可想象的(除了这里和那里,但这里和那里可能没有做好生意)。UX(用户体验)设计改变了我们看待解决(数字)问题的方式。我们让用户参与进来。首先!
我做了 10 年的开发人员(2003-2013)。我只见过两次用户参与。我的第一次经历是在英国纪念运动会上。我们正在为 Xbox 和 PlayStation 开发 MotoGP 09/10。现在,随着游戏的发展,事情变得越来越复杂。而且你需要一个 QA 团队来发现一个未完成的游戏中自然出现的成千上万的 bug(我不是说这不能部分改进)。第二个病例发生在比利时的 iChoosr。我们租了一个 UX 的地方:单向镜玻璃,麦克风和摄像机,屏幕录制,眼球追踪,等等!我们必须弄清楚用户是否真正理解并能使用我们的 web 应用程序。
请注意,这两种情况都发生在大部分开发工作完成之后。焦点是可用性。不是的用处。现在,这比没有用户参与要好,但仍然不够好。
2013 年,我开始在比利时鲁汶大学的人机交互小组攻读博士学位。我的目标?创建仪表板,帮助学生更好地了解他们的活动,帮助他们思考和收集关于他们的过程和进度的见解。那我是怎么做到的呢?
通过先深入代码头…
我为什么要在不知道学生需要什么的情况下创造一些东西?
是时候赶上了
让数据得到好的利用通常是这样的:雇佣一群非常聪明的人,让他们自由使用你的数据。一去不复返了(可能不会,但让我们想象一下),我们报告说忍者制作出你所见过的最疯狂的交互式电子表格,这在 Excel 中是不可能的。不,今天数据科学家将挖掘你的数据并找到模式,或者机器学习专家将创建预测未来的模型。数据可视化和仪表板通常是事后才想到的,导致在支持或业务团队办公室的大显示器上显示过于复杂的仪表板,他们甚至很可能不会看它。(我确实过于简单化了)。
为了创建可用的,但更重要的是有用和有价值的应用程序,你需要让用户参与进来。我们看到越来越多的行业出现这种情况。然而,在设计数据可视化或仪表板时,我们中的一些人似乎仍然落后。
不要让数据说话
我花了六年多的时间从用户的角度研究数据可视化设计。虽然在考虑解决方案之前对自己拥有的数据有一个大致的概念是很重要的,但是你应该问自己的第一个问题是“用户需要什么”。因为,如果用户不需要,又何苦呢?你可以省去很多麻烦。
如果您希望改进您的数据解决方案,或者探索新的途径,请采取小步骤。按正确的顺序拿就行了。以下是让你开始的列表(顺便说一下,这种 UX 方法适用于任何数字解决方案):
- 开始对话:
通过与其他团队(业务、营销等)交流,探索您数据的潜力,组织头脑风暴会议,让对话持续下去! - 让客户参与:
如果你的数据有任何公共/客户价值,在你的网站上建立调查,分析你的客户行为,……问他们他们需要什么。你会对你的发现感到惊讶。 - 草图: 不要开始实施!在白板、纸上探索想法,无论什么最快的方式。
- 获取反馈:
把你的想法反馈给你的潜在用户。征求他们的反馈,根据你的草图进一步探索他们的需求。试着理解你做得好的地方,你可以改进的地方,以及你应该放弃的道路。 - 原型: 为你的想法创造一个视觉表现。不要开发,而是通过创建真实的模型来帮助你的用户“想象”可视化的潜力。如果你还没有得到项目所需的预算,这是将你的结果提交给管理层的绝佳机会。说服他们这是值得追求的(不要忘记包括步骤 1-4 的结果)。
- 迭代:
让你的客户参与设计过程。在设计和评估之间来来回回。逐步完善你的解决方案。如果很难联系到客户,那就求助于你的同事。任何你自己以外的反馈都是有用的。 - 实现: 使之实现。交给开发团队。但是不要止步于此。让你的用户保持亲密。向他们学习(通过跟踪、采访等方式)
整个过程需要时间。但每一步都有有价值的、切实的、可操作的结果。我被一些公司雇佣去研究他们的数据潜力,几天内就有了结果!他们从未考虑过的新解决方案很快变成了新项目。
现在,你 可以雇佣像我 这样的人,他们会和你一起经历这些步骤(对所有在另一个大陆的人:是的,这也是完全可行的远程工作)。我在这个问题上的经验确实加快了这个过程,我非常擅长设计数据可视化原型,并且我总是很乐意帮助公司发现他们的数据拥有的潜力!
但是!如果你想把事情掌握在自己手中,我会建议检查一下 这个我创造的 课程。它会带你走过所有的步骤。如果你已经有了一个项目,它实际上是一个很好的指南,因为它是一个基于项目的课程。
[## 创建可视化模型:图形设计师的数据可视化和 UX 基础
学习 UX 和数据可视化设计的基础知识!在本课程中,您将学习如何创建数据可视化…
skl.sh](https://skl.sh/2ylWvvq)
如果你两周后碰巧在布鲁塞尔附近,我会在做一个演讲讲讲这种方法如何在教育和失业领域产生了几个成功的仪表板。
我很想了解更多以用户为中心的数据可视化成功案例。所以请在评论里分享!
我是一名 自由职业数据可视化 x UX 研究员/顾问/设计师 。想聊天或者雇佣我,来 svencharleer.com打个招呼吧!
快速改进 Python 数据分析的 7 件事
原文:https://towardsdatascience.com/7-things-to-quickly-improve-your-data-analysis-in-python-3d434243da7?source=collection_archive---------5-----------------------
A pretty picture to catch your eye.
让您的数据分析更上一层楼!
再次感谢你
对听起来像破记录的完全明显的风险视而不见我只想对另一个巨人说一声谢谢感谢所有阅读和分享我上两篇文章的人: Python 窍门 101,每个新程序员都应该知道的事情 和 只用一行 Python 代码 探索您的数据。在这里,我认为“Python 技巧 101…”的文章是成功的,然后你继续前进,再次吹走任何期望。
所以,引用我自己的话:
"谢谢,让我们继续吧!"
在这篇文章中,我认为创建一个我学到的东西的列表会很好,这些东西加速或改进了我的日常数据分析。所以,事不宜迟,这里列出了我们将在文章中涉及的内容:
内容概述:
- 熊猫简介
- 使用袖扣绘制熊猫数据& Plotly
- IPython 魔法命令
- Jupyter 中的奇特格式
- Jupyter 快捷键
- Jupyter(或 IPython)中每个单元的多个输出
- 立即在你的 Jupyter 笔记本上制作幻灯片
如果这些听起来像是你可能喜欢学习的东西,继续滚动。
请注意,这将是一个相当长的问题。尽管如此,我还是尽可能做到简明扼要。我希望你喜欢!
#1:熊猫简介
对于那些一直关注我的人来说,这并不奇怪。这个工具的好处是显而易见的。下面的动画是调用简单方法df.profile_report()
的结果,自己看看结果报告:
使用这个工具很简单,只需安装和导入 Pandas Profiling 包。
我不会在这个问题上花太多时间,因为我已经写了一篇关于这个主题的小文章,所以如果你想知道更多关于这个包的宝石,那么请在这里阅读我关于熊猫简介的文章:
[## 仅用一行 Python 代码探索您的数据
在不到 30 秒的时间内完成所有标准数据分析。熊猫侧写的奇迹。
towardsdatascience.com](/exploring-your-data-with-just-1-line-of-python-4b35ce21a82d)
#2:使用袖扣绘制熊猫数据& Plotly
我们当中大多数有着经验的数据科学家或数据分析师,都会对【matplotlib】和 熊猫 之间的集成相当熟悉。也就是说,你可以快速绘制一个简单的 pd 图。数据帧或 pd。系列,只需调用.plot()
方法:
Kind of boring right?
现在,这一切都很好,但如何一个互动的,可平移,可缩放,可缩放的情节呢? 袖扣 来救场了!(承蒙)****
要在您的环境中安装袖扣,只需在您最喜欢的终端上运行! pip install cufflinks --upgrade
,您就可以开始了。看一看以下内容:
Much better!
注意,上面唯一改变的是袖扣的进口和cf.go_offline()
的设置。除此之外,只需将你的.plot()
方法改为.iplot()
即可。
像.scatter_matrix()
这样的其他方法也能给你一些非常好的观想:
Very cool!
我强烈建议任何从事大量数据可视化工作的人看看 袖扣 和plottly的文档,为自己发现更多的方法!****
#3: IPython 魔法命令
IPython 的“魔力”基本上是 IPython 在标准 Python 语法之上的一系列增强。魔术命令有两种风格:线魔术,由单个%
前缀表示并在单行输入上操作,以及单元魔术,由双%%
前缀表示并在多行输入上操作。以下是“魔术”提供的一些有用的功能:
%lsmagic:找到他们。
为什么不从一些古老的自助开始呢?如果你要记住一个魔法命令,它应该是这个。执行%lsmagic
命令将授予您所有可用魔法命令的完整列表:
%debug:交互式调试。
这大概是我用的最多的魔法命令了。
我们大多数人都尝试过:你发现自己正在执行一个不断中断的代码块,而你——在极度绝望中——编写 20 条 print()——语句来输出每个变量的内容。然后,当您最终解决问题时,您必须返回并再次删除所有打印功能。
但现在不是了!遇到问题后,只需执行%debug
命令,并执行您想要的任何代码部分:
那么上面发生了什么?
- 我们有一个函数,它接受一个列表作为输入,对所有偶数求平方。
- 我们运行我们的函数,但是有东西坏了。我们没被告知什么!
- 我们使用
%debug
命令在函数中断时进入函数。 - 我们要求调试器告诉我们
x
和type(x)
的值。 - 失败是明显的。我们将
'6'
作为字符串传递!****
这对于更复杂的函数非常有用,我相信你可以想象得到!
%store:在笔记本之间传递变量。
这个也很酷。为了便于讨论,假设您花了一段时间清理笔记本中的一些数据,现在您想在另一台笔记本中测试一些功能,因此您必须在同一台笔记本中实现这些功能,或者保存您的数据并将其加载到另一台笔记本中,对吗?不是用%store
!只需存储变量并在您想要的任何其他笔记本中检索它:
%store [variable]
存储变量。
%store -r [variable]
读取/检索存储的变量。
%who:列出全局范围的所有变量。
曾经给一个变量赋值却忘记了变量名?也许你不小心删除了单元格为变量赋值的职责?用%who
你会得到一个所有全局赋值变量的列表:
%%time:魔法计时。
通过这个小命令,您可以获得您可能需要的所有时间信息。只需将%%time
命令应用于您想要的任何一段可执行代码,您将得到如下输出:
24 micro-seconds.. Sloppy
%%writefile:将单元格内容写入文件。
而这也将是我在本文中要讲的最后一个。当您在笔记本中编写了一些复杂的函数或类,并希望将其保存在独立于笔记本的文件中时,这种方法特别有用。只需在函数或类的单元格前加上%%writefile
命令,后跟一个文件名来保存它:
如您所见,我们可以简单地将我们创建的函数保存到一个" utils.py "文件中,然后我们就可以随意地导入它。在其他笔记本中也是如此!(只要它们在 utils.py 文件的同一个目录中)
# 4:Jupyter 中的奇特格式
这个超级酷!基本上,Jupyter 允许在 markdown 单元格中设置一些 HTML / CSS 格式。这些是我用过最多的一次:
蓝色时尚的那款:
***<div class="alert alert-block alert-info">
This is <b>fancy</b>!
</div>***
红色的有点吓人的那个:
***<div class="alert alert-block alert-danger">
This is <b>baaaaad</b>!
</div>***
绿色和宁静的那个:
***<div class="alert alert-block alert-success">
This is <b>gooood</b>!
</div>***
在这里看看他们的行动:
当你想用笔记本的形式展示一些发现时,这些是很好的选择!
#5: Jupyter 快捷键
访问和学习键盘快捷键,可以使用命令调板:Ctrl + Shift + P
。这将显示笔记本所有功能的列表。以下是最基本命令的摘录:
Esc
:这将带你进入 命令模式 。这也是您可以使用箭头键浏览笔记本的模式。
而在 命令模式下 :
A
和B
:在当前单元格的上方或下方插入一个新单元格。M
:将当前单元格改为[Mark down。****Y
:将当前单元格改为编码。(y tho?)D,D
:[D]有效[D]删除当前单元格。****
Enter
:返回当前单元格的 编辑模式 。
在 编辑模式下 :
Shift + Tab
:显示您在当前单元格中键入的对象的Docstring(documentation)——按住快捷键在文档模式间循环。****Ctrl + Shift + -
:从光标所在位置拆分当前单元格。Esc + F
:查找并替换除输出之外的代码。Esc + O
:切换单元格输出。
选择多个单元格:
Shift + Down
和Shift + Up
:选择向下或向上的下一次卖出。我认为你可以用推理的力量找出哪个是哪个。Shift + M
:合并选中的单元格。- 作为旁注,请记住,一旦选择了单元格,您就可以批量删除/复制/剪切/粘贴/运行它们。
# 6:Jupyter(或 IPython)中每个单元的多个输出
这个很棒。你有没有想过展示?head()和。tail()但是你中途放弃了,因为创建额外的代码单元来运行。tail()方法?不用担心,现在您可以使用以下代码行显示您想要的所有输出:
***from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"***
瞧,多路输出的力量:
Easy peasy lemon squeezy
#7:即时制作笔记本幻灯片
使用 RISE 功能,只需轻轻一击,你就可以将你的 Jupyter 笔记本变成幻灯片。最棒的是,笔记本还是活动的,可以边演示边进行现场编码!看一看:
Source: https://github.com/damianavila/RISE
要使用这款出色的工具,只需根据您的环境使用 conda 或 pip 安装 RISE 即可:
***conda install -c conda-forge rise
/// OR ///
pip install RISE***
现在,只需单击“新建”按钮,您就可以从笔记本中创建精美的幻灯片:
结束语
感谢阅读。我鼓励任何人自己更详细地探索每一点,找出你想要在自己的工作流程中应用它们的确切内容和方式。
如果你想看和了解更多,一定要关注我的 媒体 🔍碎碎念 🐦****
***** [## 彼得·尼斯特鲁普-中等
阅读彼得·尼斯特拉普在媒介上的作品。数据科学、统计和人工智能...推特:@PeterNistrup,LinkedIn…
medium.com](https://medium.com/@peter.nistrup)*****
关于 ROC AUC 你应该知道的 7 件事
原文:https://towardsdatascience.com/7-things-you-should-know-about-roc-auc-b4389ea2b2e3?source=collection_archive---------7-----------------------
流行的性能指标的几个警告
Image by Gerd Altmann from Pixabay
不同分类问题的模型可以通过尝试最大化或最小化各种性能测量来拟合。针对模型性能的一个方面而非另一个方面的测量非常重要,以便我们能够做出明智的决策,并选择最适合我们设计的性能测量。
ROC AUC 通常在许多领域中被用作评估分类器性能的突出度量,并且研究人员可能由于较高的 AUC 而偏爱一个分类器。
关于 ROC AUC 的复习,可以在这里找到清晰简明的解释。如果你对 ROC AUC 完全不熟悉,你可能会发现这篇文章对这个主题挖掘得有点太深,但我希望你仍然会发现它很有用,或者将它收藏起来以供将来参考。
此处提供的大部分材料基于[ Lobo 等人,2008 ]的一篇论文,其中作者阐述了关于使用 ROC AUC 评估分类模型性能的几个问题。
我们将回顾使用 ROC AUC 时应该注意的几个问题,并查看一些示例以更好地理解它们。
苹果不是橘子
乍一看,似乎使用两个分类器的决策函数计算的单个数字(ROC AUC)确实可以用于比较它们。这个想法是基于隐含的假设,即两个分类器的 AUC 是以独立于分类器决策函数输出(即分数)分布的方式导出的。
然而,在手,2009 作者表明,事实并非如此:
AUC 使用取决于分类器本身的度量来评估分类器。也就是说,AUC 使用不同的度量来评估不同的分类器。
并进一步提供了以下类比:
这就好像一个人用一把以英寸为单位的尺子测量一个人 A 的身高,而另一个人用一把以厘米为单位的尺子测量一个人 B 的身高,然后仅仅通过比较数字来决定谁更高,而忽略了测量单位不同的事实。"
简而言之 AUC 是一个平均的最小损失度量,其中错误分类损失是在一个成本比分布上平均的,该成本比分布取决于所讨论的分类器的分数分布。
换句话说,我们可以计算分类器 A 的 AUC 并得到 0.7,然后计算分类器 B 的 AUC 并得到相同的 AUC 0.7,但这并不一定意味着它们的性能相似。
我们鼓励好奇的读者阅读[ Hand,2009 ],在那里他会找到对该问题非常直观的解释,以及严格的数学分析,然后是建议的解决方案。
概率值被忽略
让我们比较两个假设的二元分类模型,它们适用于来自数据的相同样本:
- 模型 A 预测许多正面例子有 ~0.55 的概率为正面,许多负面例子有 ~0.45 的概率。
- 模型 B 预测许多正面例子有概率 ~0.85 为正面,许多负面例子有概率~ 0.25 。
两个模型可以有非常相似的 AUC,但模型 B 在区分正面和负面例子方面显然做得更好。选择不同的样本并重新调整我们的模型会产生不同的结果,而模型 B 的卓越的分类能力会更加明显。
如果我们仅依靠 AUC 来评估模型表现,我们可能会认为模型 A 和 B 非常相似,而事实上它们并不相似。
“曲线下面积”不等于“感兴趣面积”
评估 ROC 曲线时,有两个区域描述了模型在“极端”阈值下的表现:
- 曲线的左侧有一个小的真阳性率,也有一个小的假阳性率。
- 曲线的右边,我们有很大的真阳性率,也有很大的假阳性率。
我们显然不会仅仅因为一个模型在这些区域有较大的 AUC 而偏爱它,但是 AUC 只是一个单一的数字,它也包括这些区域的 ROC 曲线下的面积。
Image by Author
A 型比 B 型好吗?
两个模型的 AUC 非常相似,但模型 A 在真阳性率与假阳性率(对于所有阈值)方面更一致,而对于模型 B,真阳性率和假阳性率之间的比率高度依赖于阈值选择-阈值越低越好。
哪个更重要?真阳性率还是假阳性率?
在某些情况下,最小化假阳性率比最大化真阳性率更重要,而在某些情况下,可能正好相反。这完全取决于我们的模型将如何被使用。
当计算 AUC 时,假阳性率和真阳性率的权重相等,因此它不能帮助我们选择适合我们特定用例的模型。
Image by Author
A 和 B 哪个型号更好?
这取决于我们的领域和我们打算使用模型的方式。
- 考虑到模型 A 的 ROC 曲线,如果我们决定我们必须有至少 60% 的真阳性率,我们将不得不接受该模型也将有 30% 的假阳性率。
- 考虑到模型 B 的 ROC 曲线,我们可以实现至少 60% 的真阳性率和 20% 的假阳性率。
如果最小化假阳性率是我们案例中最重要的衡量标准,那么模型 B 优于模型 A,即使它们具有非常相似的 AUC。
模型误差在特征范围内的分布
让我们比较两个简单的二元分类模型,它们使用单个特征 x 来预测类别 y 。
假设两个模型达到相同的精度。
- 模型 A 的误分类错误发生在 x 的小值以及 x 的大值。
- 模型 B 的误分类错误多发生在 x 的低值,很少发生在 x 的大值。
两种模型可以具有非常相似的 AUC,但是:
- 对于 x 的大值,模型 B 在预测 y 方面要好得多。
- 型号 A 在 x 范围内具有更一致的性能
AUC 本身无法让我们知道模型之间的性能有如此大的差异,我们也不知道它们的误差分布是否不同。
评估不平衡类的性能
我们经常会遇到类别不平衡的数据。
考虑两个混淆矩阵,这两个混淆矩阵是通过对来自数据的两个不同样本拟合相同的模型而获得的:
注 : AUC 使用模型的单一阈值计算,如[ Sokolova & Lapalme,2009 ]:
AUC = 0.5*(灵敏度+特异性)。
Image by Author
我们的混淆矩阵如下:
- 混淆矩阵 A 是在样本上评估模型的结果,其中正例构成数据的 10% 。
- 混淆矩阵 B 是在样本上评估相同模型的结果,其中正面例子构成数据的 3% 。
我们通过将反面案例的数量增加一倍、正面案例的数量减半来实现这一目标
性能指标包括:
- 混淆矩阵 A —
精度:0.5
召回:1
F1-得分:0.666
AUC: 0.5625 - 混淆矩阵 B —
精度:0.2
召回:1
F1-得分:0.333
AUC: 0.5625
在这两种情况下,我们获得了相同的 AUC,但是其他测量值(例如 F1 分数)的变化表明,我们的模型的性能根据正例的比例而变化,而 AUC 在上述条件下是不变的-将负行和正行乘以不同的标量[ Sokolova & Lapalme,2009 ]。
同样,AUC 本身并不能提供我们评估模型性能所需的所有信息。
小样本精度
在[ Hanczar 等人,2010 ]中,作者进行了模拟研究以及对真实数据的分析,并发现 ROC 相关的估计值(AUC 是其中之一)是实际指标的相当糟糕的估计值。这在小样本(50-200 个示例)中更为突出,当类别不平衡时,情况会变得更糟。
换句话说,当我们使用 AUC 评估分类器的性能时,我们这样做是为了尝试和估计分类器 真实的 AUC,当它将“在野外”用于真实数据时(即,当我们的分类器将在生产中运行时)。然而,我们计算的 AUC(对于小样本)是一个糟糕的估计值——它离真正的 AUC 太远了,我们应该非常小心,不要相信它。
需要明确的是,如果我们基于包含 200 个样本的样本计算 AUC,并且我们获得的 AUC 为 0.9,那么真实的 AUC 可能是 0.75,我们无法知道(至少在不查看置信区间或其他一些工具的情况下,这些工具将使我们能够衡量估计量的方差)。
我们应该如何使用 ROC AUC 来衡量绩效?
而一些性能测量更容易解释(精确度、召回率等)。)ROC AUC 有时被视为一个神奇的数字,它以某种方式量化了我们需要了解的关于模型性能的所有信息。
正如我们所指出的,如果我们选择使用 ROC AUC,我们需要了解它的各种问题。如果在考虑了这些问题之后,我们仍然认为我们希望使用 ROC AUC 来评估分类器的性能,我们可以这样做。我们可以使用任何我们想要的方法,只要我们充分意识到它的局限性和缺点——正如我们使用 Recall 并记住它对于假阳性的数量是不变的一样,我们也可以使用 ROC-AUC,同时记住它的局限性。
重要的是要强调,不应该只使用单一的指标来比较分类模型的性能。在这方面,ROC AUC 与精确度、召回率或任何其他常用指标没有什么不同。为了全面地评估性能,我们最好考虑几个感兴趣的指标,同时了解它们的特征。
摘要
我们讨论了关于 ROC AUC 的几个问题:
- AUC 依赖于分类器的内在属性,这使得基于 AUC 的分类器比较不适合于比较(在许多常见情况下)。
- AUC 不反映分类器预测的潜在概率值。
- AUC 是通过考虑所有可能的评分阈值来计算的,无论我们是否会选择使用这些阈值。
- 假阳性和真阳性是同等重要的,不管它是否适合我们。
- AUC 不提供关于分类器误差分布的信息。
- AUC 相对于数据中阳性样本的比率是不变的。
- AUC 对于小样本是不可靠的。
ROC AUC 与其他指标相似,有其优点和缺点。因为有很多资料都提到了它的优点,所以这篇文章重点介绍了它的一些其他特征。这些是 ROC AUC 测量的特性,不一定是缺点。每个度量在某些条件下是可变的,而在另一些条件下是不变的(正如你可以在[ 索科洛娃&拉帕尔梅,2009 ]中看到的那样),这些属性是有利还是不利由用户决定。
最好使用几个指标来比较分类器,而不仅仅是一个,当使用 ROC AUC 时,人们还可以查看 ROC 曲线,它可以提供有价值的信息[ Fawcett,2004 ]。
好了
感谢您的阅读!我希望这篇文章对你有用。如果您有任何问题或建议,请留下评论。欢迎各种形式的反馈!
进一步阅读
[ Sokolova & Lapalme,2009 ]提供了在机器学习分类任务的完整频谱中使用的 24 个性能测量的分析,并审查了这些测量在混淆矩阵变化下出现的 8 个不变性属性的方差和不变性。
关于如何解读 ROC 图的非常好的论文,你可以参考[ Fawcett,2004 ]。作者自下而上非常透彻地解释了这个主题。
如果你对 ROC 曲线的置信带感兴趣[ Macskassy & Provost,2004 ]提供几个选项。
[ Ferri et al. 2005 ]引入了一种新的概率版 AUC,称为 pAUC,它在评估排名表现的同时也考虑了概率的大小。
参考
- 洛博,J. M .,希门尼斯-瓦尔夫德,a .,&雷亚尔,R. (2008)。 AUC:对预测分布模型表现的误导性衡量。全球生态与生物地理学, 17 (2),145–151。
- Hand,D. J. (2009)。测量分类器性能:ROC 曲线下面积的连贯替代方法。机器学习, 77 (1),103–123。
- m .索科洛娃和 g .拉帕尔梅(2009 年)。对分类任务的性能测量的系统分析。信息处理&管理、 45 (4)、427–437。
- 汉扎尔,b .,华,j .,西玛,c .,温斯坦,j .,,m .,&多尔蒂,E. R. (2010)。ROC 相关估计的小样本精度。生物信息学, 26 (6),822–830。
- 麦克卡西和教务长(2004 年)。ROC 曲线的置信带:方法和实证研究。第一届人工智能 ROC 分析研讨会会议录。2004 年 8 月。
- 茨韦塔纳·福塞特(2004 年)。ROC 图:研究者注意事项和实际考虑。机器学习, 31 (1),1–38。
- Ferri,c .,Flach,p .,Hernández-Orallo,j .,和 Senad,A. (2005 年 8 月)。修改 ROC 曲线,纳入预测概率。在第二届机器学习 ROC 分析研讨会会议录(第 33–40 页)。机器学习国际会议。
优化表格数据显示的 7 条经验法则
原文:https://towardsdatascience.com/7-thumb-rules-to-optimize-your-tabular-data-presentation-97da86bbbf46?source=collection_archive---------25-----------------------
有时当你向观众展示你的研究成果时,你需要用一张表格。表格很难理解,因为它们可以同时显示多个维度,并且通常只使用标题来定义选择数据的方式。
当以表格的方式显示记录时,你的数据有可能不被识别。表格不会引起任何人的注意。你可以尽力解释每个单元格内的值,但你可能会失败。当与表格打交道时,人们首先需要理解表格是关于阅读标题的。然后,他们必须随机选择单元格来理解数据类型,并调整数值以评估他们所读取的数据量。最后,他们需要大量的精力来理解你在说什么。
TL;DR: 我将向您展示一些针对表格数据的数据识别技术。这些技术将帮助您的受众更多地关注您的单元格的影响,而不是表格定义本身——请随意下结论以获得快速的项目符号列表。
何时使用桌子
由于表格风险很大,你必须谨慎选择何时使用它们。它们能很好地展示分析数据和多维信息,但很难一目了然。在讨论你的发现时,只有在你离不开的情况下才选择一张桌子。
「只有离不开才选桌子」是什么意思?嗯,当一个事件的大小需要用数字来描述时,或者当需要一个数字参考来捕捉数据的影响时,你不能没有。当您需要进行分析并显示不同维度和统计样本之间的相关性时,您可能需要一个表格。
表格也是表示数据的最结构化的方式:每次想要显示原始数据或精确数据时,都需要使用表格。
数据库隐喻
我们的大脑就像一个数据库。它需要指数才能表现良好。颜色是它索引表格的方式。
我们的大脑没有能力看一张表,一眼就看到所有的信息。如果你不添加一些色彩,你的观众将需要大量的时间和精力来理解和处理你的数据。值得一提的是,由于理解和处理数据需要集中注意力,他们必须在停止听你说话或阅读表格之间做出选择。
在最好的情况下,当你想让你的读者理解你的研究的总体结果时,他们只会阅读一些随机的单元格。
按照我们的数据库比喻,当显示一个表时,我们需要:
- 运行一个“创建表格”命令。我们需要确定所有的列,并仔细阅读它们,一个接一个。从左到右(当有许多列时,人们使用从中心到最外围的列来阅读:使用此信息将最有用的信息放在中心区域)。这是识别阶段。
- “改变表格”以找到数据类型。因为我们不是真正的数据库,所以我们需要从单元格中选取随机值来理解每个列的数据类型。这个过程很慢,如果在标题上添加度量单位,也会发生这种情况:理解人类的数据类型发生在表定义之后。这就是“理解阶段”。
- 有一个时刻你必须得到你的数据的上下文。你需要给自己定位。这就像一个测试,以确保您理解了模式。我们需要选择随机值,并将这些值与其他值进行比较,以确定“大于”和“小于”的良好定义。注意:如果可以的话,你应该标准化你的数据以使这个阶段更快。这就是我所说的“处理阶段”。
- 应用“选择”语句。这是最重要的部分,因为这是唯一一个给你的表增加商业价值的部分。你需要以某种方式指定一个“往哪里看”或“如何分组”的条件,让人们找到一些证据。标题是达到这一效果的最常见方式。我将向你展示如何用颜色来强调事实观察。这就是“查询阶段”。
你知道,当你运行“选择语句”时,你还需要一些索引来加快搜索速度。如果你不使用索引,你需要扫描整个表。我们来讨论一下这个问题。
为你的餐桌增添色彩
热图对你有帮助。我建议你在任何可能的地方(总是)使用它们。
考虑下表:
这显示了应用程序统计样本在谷歌 Play 商店上的平均评论,分为安装应用程序的设备数量和评论数。以这种方式显示数据很容易理解 3.9 左右的值是我们的预期值。
我在没有上下文的情况下提出了这个表,在阅读它之前,你已经知道有一个模式。在阅读标题之前,你已经意识到数值是以一种统一的方式分布在对角线上的,并且你已经了解了一般事件的大小。
如果你想让你的读者稍后再处理标题(这样他们就可以先关注价值),你应该使用更大更鲜艳的单元格。在我们的例子中,在知道表的内容之前,您就知道值是平均分布的。
如何快速选择数据
继续我们的比喻,我们可以说我们的眼睛把一个表看作一个数据库引擎。如果没有索引,检索数据会花费很多时间。
还有一个问题。数据库在两个不同的时间运行 create-table 命令和 select 命令,我们也是这样做的。问题是在演示过程中,我们必须同时处理这两个命令。
我们可以说表更像是一个“数据库视图”:它们在我们的 RAM 中:我们每次都需要重新创建它们。当访问(查询)数据时,我们几乎每次都必须提取列来获得上下文。
我们需要一种方法来“物化”我们的视图并添加索引。颜色就像聚簇索引:它们帮助你查找数据,将信息存储在彩色(索引)栏中。它们也是以语义有效的方式对数据进行排序的一种很好的实用方法。
考虑这个例子:
这些表格以 3 种不同的方式向我们展示了相同的数据:
- 第一张表是无色的。你需要很多时间来阅读所有的数据,你也不知道它们有什么有趣的地方。低值比高值好吗?这个表也根本不包含“select”语句。
- 第二张表显示了一些绿色和彩色值。我们的大脑会理解我们应该关注(并希望记住)一两行,因为其他行不太相关。绿色还会告诉我们的大脑,这几个值与积极的发现有关。
- 第三个表格的第二列背景颜色为绿红色。由于有更多的颜色,它需要更多的时间来处理比第二个。它向我们表明,积极的项目很多,消极的项目很少。
尽管第二个和第三个表包含相同的原始数据,但它们显示了不同的证据。我们可以说它们与不同的“select”语句绑定在一起。
作为一名数据科学家,你应该问问自己为什么要提出这个表格。如果你想强调你的统计总体缺乏一致性,你应该使用第三表:许多颜色的梯度有助于你的大脑划分数据。如果你想告诉你的观众,在 Play Store 上有更多的“家庭”和“工具”应用程序,你应该使用第二张表。
这是因为颜色代表我们大脑中的集群。它们不仅与情感有关,而且是宁滨事实的有力证明。在处理数据时,将颜色视为分组数据的盒子,将相同颜色的阴影视为盒子内的排序优先级。
结论(TL;博士)
现在,我们有了一种实用的方法来将表定义与索引绑定在一起,并将表与查询命令链接在一起。让我们总结一下我们的发现:
- 如果你需要表格并且你想让你的数据被理解,那么将它们着色。
- 始终建议您的表(定义)和要应用的查询。如果你能展示你的查询结果就更好了:用颜色来达到这个目标。
- 如果你希望你的数据是中性的,就不要使用绿色或红色:颜色具有基于文化的情感价值。
- 大而填充的单元格在标题前被阅读:如果你想让你的读者在知道数据是关于什么之前找到一个模式,现在你知道该怎么做了。
- 颜色就像聚集索引:它们是在“数据库扫描”所有行之前得到一个点的唯一方法。
- 使用“选择…位置”条件绑定表格,使用相同颜色的阴影。阴影既是索引又是过滤器。
- 使用多种颜色在你的“选择”语句中应用“分组依据”。在 faster 中按索引分组。
处理小数据的 7 个技巧
原文:https://towardsdatascience.com/7-tips-for-dealing-with-small-data-7ffbd3d399a3?source=collection_archive---------3-----------------------
因为通常情况下,这就是你要得到的。
我们经常听说 大数据 是构建成功机器学习项目的关键。
这是一个主要问题:许多组织没有你需要的数据。
没有最基本的原材料,我们如何原型化和验证机器学习的想法?在资源稀缺的情况下,如何高效地获取数据并利用数据创造价值?
在我的工作场所,我们为客户制作了很多功能原型。正因为如此,我经常需要让 小数据 大有作为。在这篇文章中,我将分享 7 个小技巧来改善你的小数据集的原型制作结果。
1:意识到你的模型不会概括得那么好。
这应该是首要任务。你正在建立一个模型,它的知识是基于宇宙的一小部分,这应该是唯一一个可以期望它很好工作的地方。
如果你正在基于一系列室内照片构建一个计算机视觉原型,不要指望它在室外也能很好地工作。如果你有一个基于聊天室玩笑的语言模型,不要指望它能为奇幻小说工作。
确保你的经理或客户理解这一点。这样,每个人都可以对你的模型应该交付的结果有一个现实的期望。它还创造了一个机会,可以提出有用的新 KPI 来量化原型范围内外的模型性能。
2:建立良好的数据基础设施。
在许多情况下,客户端没有您需要的数据,公共数据也不是一个选项。如果原型的一部分需要收集和标记新的数据,确保你的基础设施尽可能少地产生摩擦。
你需要确保数据标记非常简单,这样非技术人员也可以使用。我们已经开始使用 神童 ,我认为这是一个很好的工具:既可访问又可扩展。根据项目的规模,您可能还希望设置一个自动数据接收,它可以接收新数据,并自动将其提供给标签系统。
如果把新数据输入你的系统又快又容易,你会得到更多的数据。
3:做一些数据扩充。
您通常可以通过增加现有数据来扩展数据集。它是关于对数据进行微小的改变,而不应该显著地改变模型输出。例如,如果将猫的图像旋转 40 度,它仍然是猫的图像。
在大多数情况下,增强技术允许你产生更多的“半唯一”数据点来训练你的模型。首先,你可以尝试在你的数据中加入少量的高斯噪声。
对于计算机视觉来说,有很多巧妙的方法来增强你的图像。我有过使用 相册 库的正面体验,它可以进行许多有用的图像转换,同时保持你的标签不受伤害。
Photo credit: Albumentations on Github
另一个很多人发现有用的增强技术是。 这种技术直接获取两幅输入图像,将它们混合在一起,并组合它们的标签。
Photo credit: Cecilia Summers & Michael J. Dinneen
当扩充其他输入数据类型时,需要考虑哪些转换会改变标签,哪些不会。
4:生成一些合成数据。
如果您已经用尽了增加真实数据的方法,您可以开始考虑创建一些假数据。生成合成数据也是一种很好的方法,可以覆盖真实数据集没有覆盖的一些边缘情况。
举例来说,许多用于机器人的强化学习系统(如 OpenAI 的Dactyl)在部署到真实机器人之前,在模拟的 3D 环境中进行训练。对于图像识别系统,您可以类似地构建 3D 场景,为您提供成千上万的新数据点。
15 simulated instances of Dactyltraining in parallel.
创建合成数据有多种方法。在 Kanda ,我们正在开发一种基于转盘的解决方案,为物体检测创建数据。如果你有很高的数据需求,你可以考虑使用生成合成数据。要知道,GANs 是出了名的难训练,所以首先要确定这是值得的。**
NVIDIAs GauGANin action!
有时你可以结合各种方法:苹果有一个非常聪明的方法 使用 GAN 来处理 3D 建模面部的图像,以看起来更加逼真 。如果你有时间的话,这是一个扩展数据集的很棒的技术。
5。当心幸运劈叉。
在训练机器学习模型时,按照某种比例将数据集随机拆分成训练集和测试集 是相当常见的。通常,这是好的。但是当处理小数据集时,由于训练样本的数量很少,因此存在很高的噪声风险。
在这种情况下,您可能会意外地得到一个幸运的分割:一个特定的数据集分割,在这个分割中,您的模型将会很好地执行并推广到测试集。然而在现实中,这可能只是因为测试集(巧合)不包含困难的例子。
在这种场景下, k 倍交叉验证 是更好的选择。本质上,您将数据集分成 k “折叠”并为每个 k 训练一个新模型,其中一个折叠用于测试集,其余的用于训练。这控制了你所看到的测试性能不仅仅是由于幸运(或不幸)的分裂。
6。利用迁移学习。
如果你正在处理某种标准化的数据格式,如文本、图像、视频或声音,你可以利用迁移学习来利用其他人在这些领域所做的工作。就像站在巨人的肩膀上。
当你进行迁移学习时,你采用其他人建立的模型(通常,“其他人”是谷歌、脸书或一所主要大学),然后 对它们进行微调,以适应你的特殊需求 。
迁移学习之所以有效,是因为大多数与语言、图像或声音有关的任务都有许多共同的特征。例如,对于计算机视觉来说,它可以检测某些类型的形状、颜色或图案。
最近,我为一个有高精度要求的客户开发了一个对象检测原型。我能够通过微调一个MobileNet*单发探测器 极大地加快开发速度,该探测器已经在谷歌的 开放图像 v4 数据集(~ 900 万标记图像!).经过一天的训练,我能够使用大约 1500 张标记图像生成一个相当健壮的对象检测模型,其测试图为 0.85。*****
7。试试“弱学习者”的合奏。
有时候,你不得不面对这样一个事实:你没有足够的数据来做任何新奇的事情。幸运的是,有许多传统的机器学习算法可供选择,这些算法对数据集的大小不太敏感。
当数据集很小并且数据点的维数很高时,像 支持向量机 这样的算法是很好的选择。
不幸的是,这些算法并不总是像最先进的方法一样准确。这就是为什么它们可以被称为“弱学习者”,至少与高度参数化的神经网络相比是如此。
提高性能的一种方法是组合几个这样的“弱学习器”(这可以是一组支持向量机或决策树),以便它们“一起工作”来产生预测。 这就是集成学习的全部。
7 种新年决心推文
原文:https://towardsdatascience.com/7-types-of-new-years-resolution-tweets-d437c87d5f9c?source=collection_archive---------30-----------------------
对 4 万条推文的分析揭示了我们如何实现 2019 年的目标。
这是新一年的开始!人们正在更换日历,联系所爱的人,并决定他们今年想要尝试和坚持的决心。如果人们正在做某事(真的是任何事),你可以打赌他们中有相当多的人会在推特上谈论这件事。
有一些关于的文章,最受欢迎的决心是什么,实现它们不会让我们快乐,以及我们可能无论如何都不会实现它们。愉快。我决定,没有什么真正着眼于人们如何处理整个决议企业。为此,我上了推特,并利用一些很好的计算社会科学,决定看看人们是如何对待决心的。推特用户在推特上发布的关于决议的话题是什么?那些题目中最常见的词是什么?它有没有说我们如何对待决心的想法?这些就是我们今天要回答的问题。
在深入研究之前,先简单说一下。虽然这个项目使用了计算社会科学的技术,但我并不急于给它贴上“科学”的标签。这是我强调不要说的:“计算机算法显示只有 7 种新年决心推特。这就是大数据带给他们的一切。”相反,这只是一种有趣的方式,可以让你了解 Twitter 上围绕新年决心的一些更广泛的模式。
数据
使用 Twitter 的 API,我搜索了包含#newyearsresolutions2019、#resolutions、#newyearsresolution、#newyearsresolutions(是的,这里有是的区别)的推文,以及任何包含“新年决议”字样的推文,而没有笨拙地将它们塞进一个标签。我在 12 月 31 日中午 12:00 左右开始收集数据,并在 1 月 1 日凌晨 12:00 后做了最后一次拉动。最早的推文可以追溯到 12 月 22 日,多亏了时区的魔力,一直延续到 1 月 1 日早上 5:17。这一过程产生了 41502 条独特的推文。我并不完全有条不紊地决定何时拉车,因为我太忙于享受与 2018 年说再见了。依照之前的引子,对此半信半疑。
在清理数据(删除停用词和标点符号,对文本进行词干处理,删除 htmls 等)后,我使用潜在狄利克雷分配(LDA)对推文中的潜在主题进行建模。LDA 假设语料库中的所有文档都有固定数量的主题——在我们的例子中,是我们搜集的所有 tweets 并允许在单个文档中出现多个主题。然后,该方法会告诉您任何特定单词出现在主题中的概率。因此,“苹果”出现在第一个主题中的概率可能是 0.0002,出现在第二个主题中的概率可能是 0.05(据推测,该数据来自一个苹果爱好者论坛)。你可以选择这些单词中最流行的,调查它们何时出现在一起,并了解它们出现的时间
对 LDA 有一个警告。你必须选择数据中存在多少主题,以便实现它。也是由我们来决定那些话题的意思。虽然有很多方法可以很好地了解正确的主题数量,但是在这些数据中尝试它们会产生超过 25 个不同的主题。这从直觉上讲是有道理的,但是坦率地说,这导致了糟糕的博客文章。我开始看到,在 7 岁以后,模型解释的回报越来越少,所以这是我选择的数字。同样,不科学,但足够的一些乐趣。
没有任何进一步的麻烦。
7 种新年决心
有抱负的读者和作家们:
人们喜欢阅读,也喜欢写作。或者说,最起码,爱到要读,要写。多读多写是很常见的决心,所以这一条并没有让我太惊讶。
“我 2019 年的一个安静的决议是避免在线讨论写作过程,而是花一些时间实际阅读或写作。”— SheerHubris
“思考人生……我想多跑步、少吃饭、多欢笑、少压力、多唱歌、少喊叫、多听、少说、多阅读、少滚动、多写作、少发短信#新年决心#作家#写作目标”——Grumpy _ SENCO
希望爱自己,变得更快乐
自我关心和爱是解决推特的另一个话题。在过去的一年里,人们越来越关注心理健康。看到人们关心照顾自己,我心里很高兴。
“新年决心:——不骂人——交更多的朋友——更快乐——达到更健康的体重——在我的 a 级考试中做好事——发现自我”— PaizuriRS
“新年决心:真诚地爱自己&继续自我成长。今年我确实成长了很多,但我想继续变得更快乐、更健康,成为一个更成熟的人。永远传播积极&永远善待他人。”— 剪影阴影
最后一个触及了我们列表中的下一个主题,很好地展示了这样一个事实,即即使是很小的文本也可以触及多种事物!
爱他人
人们不仅仅希望自己新年快乐,他们也希望其他人也有一个快乐的新年!尽管如此,如果我暗示相当一部分包含这个话题的推文不是来自品牌账户,那我就是在撒谎。
“新年快乐!我们真诚地祝愿大家在 2019 年幸福快乐,万事如意。这是你的一年,你的时间就是现在,去得到它!!!!感谢你今年所有的爱和支持。爱瑞秋和瑞#快乐新年#新年 2019 #新年决心”——对立旅行
“新年快乐!!为你的健康和幸福干杯!!# behappy # behe health # new years resolutions # get fit # dont wait # livenow # bein the moment # happy and healthy # sharing scaring”——aloha rush
病毒性法西斯追捕
我们从你的预期票价中休息一下,给你带来这个分析的第一部分,让我去“嗯。”下一组单词实际上只有一条与之相关的 tweet。事实证明,这只是为数不多的几条关于新年决心的微博中的一条。
有趣的是,这些都不是法西斯的决定性因素——有些是混蛋的决定性因素——但这是推特。髓和 snark 基本上是一个注册的要求。
这带来了一个有趣的问题:转发算不算这类分析?他们中的许多人会做这里发生的事情,构建一个基本上围绕原始推文的“主题”。但是如果这就是人们在推特上真正做的事情,知道这一点也很重要。
值得一提的是,我认为转发通常是一种认可。有些人会用它们来引起对争论的注意,但他们这么做主要是为了说“我也有这种感觉!”所以我觉得这是可以辩护的,但是一条病毒式的推文可以非常明显地搞乱定量内容分析的工作。
淘汰旧的…
在这些话题的基调发生转折之后,我们转向一个与你所期待的更相称的话题。人们想要变得更好——但重点是他们会放弃的东西。与其说是蜕变成一只美丽的蝴蝶,不如说是停止吃那么多垃圾食品,这样我们才能更好地适应这个茧。
所以……已经 2018 年的最后一天了。时间去了哪里?决心并不总是能实现,但目标是增加锻炼,减少加工肉类和精制糖,活在当下,更善良,花时间和你爱的人在一起,这似乎是 2019 年的一个好计划。你呢?— 和 YC2311
新年快乐除了#keepingwildfishfree,我们还致力于在 2019 年减少#一次性塑料和生活#塑料 free,以保持我们美丽的珊瑚礁(和地球)的活力。你 2019 年的#新年决心是什么?你打算采取什么步骤来实现它们?— 萨维内莫
成为一盏明灯
与流行的观点相反,大多数人不仅仅是为了自己。(我的意思是,如果一个社会物种完全由反社会者组成,它将很难生存)。很多人不仅想为自己做好事,也想为别人做好事。
“你知道我喜欢什么,有勇气为小人物辩护的人。你知道,那个感觉被冷落的学生。帮助他们实现他们的全部潜力。让我们把它作为今年的新年决心吧!#提倡#坚持不懈#黄蜂#下一级#勇气#充分发挥潜力”——多样性 54
它总是回到特朗普身上
让我把我的卡放在桌子上:对于那些不知道的人,我是一名政治学博士候选人,专攻政治行为和心理学。这意味着我必须忍受与特朗普有关的事情——很多。当我构思这个项目时,我认为这是一种逃离不断加深的新低点坑的有趣方式,这些新低点坑是由争议的不断轰炸挖掘出来的。另一方面,特朗普总统花在推特上的时间比新闻发布会上的时间还多,所以我可能不应该如此惊讶。尽管我确实感觉到与那些愤怒地进入这个话题的人有一种亲切感。
“我的新年决心是将支持议长@NancyPelosi 和@TheDemocrats 作为我的使命,因为他们反对特朗普政权的法西斯冲动,倡导进步议程,并为 2020 年的巨大胜利做准备。谁在里面?# new years resolutions”-DEM write
“媒体和我们公众做出承诺,停止报道@realDonaldTrump 在 2019 年发布的每一条推文,怎么样?停止给予他他极度渴望的关注。# new years resolutions # notrumtweets "missangeleyes
“你们所有憎恨特朗普的自由主义者应该制定一个新年决议:停止为 2019 年的人类提供嫉妒、愤怒、仇恨、可悲的可怜借口。”— Anthony14133926
现在你知道了!纽约决议推文的 7 种类型!
Note: The reason that the-x axes are unlabeled is because the probabilities vary across topics but the presentation of the bar graph can give the incorrect impression that a word appears with equal/greater frequency than another.
我已经把这个分析的注释代码放在我的 GitHub 上了。(我今年的一个决心是更好地张贴在那里)。请在评论中让我知道你对这个分析的看法。
新年快乐!
彼得·r·利卡利是弗罗里达大学政治学博士生,专攻美国政治、政治行为和政治方法论。所表达的意见是他自己的。也可以在 YouTube 和推特( @prlitics13 )上找到他。剩下的一点点业余时间都花在了长跑,和他耐心的妻子玩电子游戏,遛狗,和他的猫 Asia 进行奇怪的富有成效的单边对话上。
注释和资源:
社会科学计算
通过 R 掌握文本挖掘
用 R 进行文本挖掘:朱莉娅·西尔格和大卫·罗宾逊的整洁方法
Isis 推文的主题建模
7 个有用的熊猫数据管理技巧
原文:https://towardsdatascience.com/7-useful-pandas-tips-for-data-management-8b23a85bf41f?source=collection_archive---------12-----------------------
一个英超金融评论的例子
Image Courtesy of Firmbee.com via Unsplash
金钱球
英超联赛是一项大生意。事实上,英超俱乐部在 2018-19 赛季向足球经纪人支付了超过 2.6 亿英镑——比前 12 个月增加了 4900 万英镑。仅这个统计数据就激起了我的兴趣,并驱使我更深入地研究 2018-19 赛季的英超联赛支出。
为了对刚刚结束的这个赛季的英超联赛进行全面的财务评估,我使用了 Python Pandas 模块。在这样做的时候,我使用了 Pandas 库的许多特性,这使得数据管理变得稍微容易了一些。
这篇教程文章包括了我所从事的数据收集和管理的这些有用的 Pandas 技巧和特性。
提示 1:查找数据
花在经纪人身上的钱和估计的转会支出是我想为每个英超俱乐部确定的两个关键变量。我快速搜索了一下,找到了 BBC 的网页,标题是:英超:俱乐部 2018-19 赛季足球经纪人支出增至 2.6 亿。下面是我要刮的表。使用熊猫很容易做到这一点。
这里的技巧不是使用 pd.read_html 方法(,对于本文来说,它本身就是一个技巧),而是使用索引。我怎么知道索引第 0 个元素呢?答案就在这里,切换到 Chrome 中的开发者工具,使用控制台标签。在这里,我搜索 table 标记,结果是一个长度为 1 的数组。这意味着在这个特定的网页上只有一个表格。如果我索引,第一个(并且只有)元素我将能够刮表。
然而,现在我们遇到了一个小小的障碍,所以是时候给熊猫第二个提示了!。
技巧 2:多索引到单索引
当抓取该表时,将返回一个多索引,如下所示。在大多数情况下,最好有一个单一的索引。这将使数据排序和过滤更容易。现在,最高层的一栏“2018-19 英超联赛支出”需要删除。
为此,我使用了。xs()方法。在这个方法中,我指定的第一个参数是我想要得到其横截面的列的名称。在这里,我指定“2018-19 赛季英超联赛支出”。轴=1** 获取列的横截面,并且 drop_level 参数=True,返回没有多级索引的横截面。**
显然,现在有了单一索引,但是列名之间仍然有很多空格,这使得某些任务,比如过滤变得更加麻烦。理想情况下,这些列都应该是单个字符串元素。
技巧 3:快速简单的列重命名
列名非常能说明它们的内容。因此,我只想稍微改变它们,这样下游的数据操作就更容易了。这里,我使用了 df.columns.str.replace 方法,用下划线替换所有空格、连字符和星号。
需要删除这些字符,因为当我们尝试过滤(稍后)时,它们会导致语法错误。因此,最佳做法是移除/更换它们。
为了演示这个字符串函数有多有用,我加入了等价的代码,注释掉了,这是使用 df.rename 函数获得相同结果所必需的。如图所示,这要简单得多。
简单,当你知道怎么做的时候!
现在,我执行一些简单的字符串操作函数,如下面的 GitHub 要点所示,将字符串条目转换成数字数据类型。
这张表有一些有趣的数据,但我真正想要的是对 2018–19 赛季英超财务的全面看法。所以,说到第四点。
技巧 4: Pdf 转熊猫数据框
导航到英超新闻文章,我获得了关于 2018/19 赛季中央支付给俱乐部的英超价值的信息。该页面包含一个可下载 pdf 的链接(如下所示)。接下来的几个任务包括抓取这个表,并将其与从 BBC 足球网页中提取的支出表合并。
我从 tabula 导入了 read_pdf 方法,并将文件路径传递给了这个方法。我最初给数据帧分配了变量名 df,并检查了它的类型。返回一个熊猫数据帧。随后进行了简单的清理和重命名,但是我包含了这个技巧,因为它真实地展示了将 pdf 表格转换成适合分析的 Pandas 数据框架是多么简单。
技巧 5:多列字符串操作
league_club_revenue 数据帧中的列是字符串数据类型,需要转换为数值数据类型。但是,通过仔细检查,除了“俱乐部名称”和“英国直播”之外,所有的列值都以“”符号为前缀,中间用逗号隔开。
要一起更改这些列,我只需创建一个列列表(熊猫系列)。然后,我在 DataFrame 内的 for 循环中迭代这些列,用空字符串替换“”和“,”,然后使用。a 类型方法。我还除以 100 万,因为最终我想将“支出”和“联赛 _ 俱乐部 _ 收入”数据框架合并在一起,因此我需要这两个数据框架之间的数据保持一致。我需要所有的列都以百万来表示它们的值。
几乎一行代码就清理了整个数据帧!
技巧 6:简单合并
为了合并并成功对齐数据,我在 league_club_revenue 数据帧中生成了一个新列。这是必要的,因为两个表中的团队顺序不同。我创建了一个名为“Team”的新列,其中球队按顺序排列,它们出现在 league_club_revenue 数据框架中。然后,我可以在这两个数据帧之间共享的公共列上进行合并,每个数据帧上的行将对齐。
新的数据框架 Financial_review 现在是合并后的产品。数据格式是一致的,除了“UK_live_broadcast”和“Current_Position”以百万(英镑)表示。
技巧 7:过滤
新合并的数据帧现在可修改用于查询。从一个基本查询开始,我指定了两个条件。我想知道那些花费超过 800 万英镑的经纪人费用的球队,最终排名低于第 10 位(截至 4 月 4 日,BBC 关于经纪人和估计费用的文章撰写时)。
结果可能表明,这些球队的经纪人可以做得更好,因为他们为之物色球员的球队位于排行榜的下半部分!
现在假设,我们想要查询另一个条件。然而,这一次我们不希望返回整个记录(行)。为此,只需编写过滤条件,后跟一个句点,然后是要返回的列。在这里,我只想知道那些估计花了 6000 多万转会费,收到的支付功绩不到 2000 万的球队的名字。
看起来伯恩茅斯、布莱顿和富勒姆花费很大,但在基于成绩的奖金方面没有很好地收回投资。与其他球队相比,这些球队的财政状况目前看来并不乐观!
出于比较的目的,我已经包括了如果我不使用 not 符号后跟列“Team”时返回的结果。这里,返回整个记录或行。
最后,我将通过演示如何使用一个简单的聚合函数来做总结。首先,计算英超联赛中所有球队的经纪人支出的平均值(以百万计)。显示了实现这一结果的两种不同方法,第一种方法是使用方括号,第二种方法是使用点符号(更常用),这也是为什么像空格这样的非法字符需要被删除并替换为下划线的原因。
假设你想分别找出英超联赛上半区和下半区球队的平均英国转播比赛。为了获得更深入的了解,确定排名上半部分的球队与排名下半部分的球队的平均转播比赛之间的差异是很有趣的。
简单用。loc 然后使用[:10 后跟一个逗号,最后是引号中的列后跟一个右方括号,选择前 10 行。对表格的后半部分重复这一过程,[10:,我们可以清楚地看到,上半部分的球队比下半部分的球队平均多 8.49 场英国广播比赛。
我希望这个例子展示了一些有用的 Pandas 特性,使数据处理和管理变得更容易。如果你喜欢英超联赛的例子,我已经写了一篇介绍性的文章,题为“英超联赛中的熊猫”,展示了熊猫如何帮助清理初始数据。
让软件开发人员开心的 7 种方法
原文:https://towardsdatascience.com/7-ways-to-make-software-developers-happy-d4b72c07584e?source=collection_archive---------3-----------------------
如果你适当地关心你的开发者,他们会关心你和你的项目!
什么让软件开发者快乐?没有回答这个百万美元问题的灵丹妙药!在这个快节奏的世界里留住顶尖人才势在必行!当 睡眠舱、乒乓球桌、私人厨师和其他花哨的福利不起作用时,我们真的需要好好想想如何取悦他们,提高他们的参与度和积极性。
在这篇文章中,我将介绍在我 15 年的 it 生涯中最能让我(工作)快乐的驱动因素,以及我所面临的问题的后果和建议,所以如果你是一个团队领导、经理或企业家,它可能会给你一些如何让你的团队满意和忠诚的想法!
❶——使用金钱能买到的最好的装备
这绝对是我清单上的第一项。没有什么比打开项目的代码,编译它,或者在本地运行一个测试,然后不得不等待几秒钟以上的时间来返回结果更令人沮丧的了。开发人员工作匆忙,因此任何无效的工具,即使是最轻微的延迟,都是他们快乐的一大制约。
在拥有高端机器(可能有点过头)和低端机器(这些显然会抹杀性能)之间有一个平衡,但要有足够的内存、 CPU 和磁盘空间/速度( SSD,非常感谢!这是三个最重要的因素,不仅能保持开发人员的理智,还能保持公司的长期成本。多显示器和生产力工具也是提高效率的基础。
这些到处浪费的时间的小增量,可能会增加到每周一个小时(可能更少,但最有可能更多),但是如果你考虑每个开发人员一年所花费的总时间,乘以每小时的费用,大多数这种类型的投资在纯粹的财务基础上是合理的。
那就去做吧…升级他们的机器,给他们一台额外的显示器,给他们提供付费版的生产力工具!你不会期望一个管弦乐队用平庸的乐器演奏,为什么开发人员必须使用过时和缓慢的计算机?
❷ —实现深度聚焦
软件开发如何需要专注是一件趣闻。
深刻的,不可分割的,强烈的关注。
为了产生优雅的代码,进入没有干扰和有限背景噪音的区域是必不可少的。一个小分心,思路就丢了。不幸的是,相对较新的开放式办公室趋势肯定会带来噪音,所有这些在程序员头脑中精心放置的想法都消失了。以我的经验来看,开放式办公室增强沟通的概念是有缺陷的:
- 有些人避免一起在办公桌前讨论,因为他们知道说话会打扰周围的同事
- 有些人不介意打电话或在办公桌前开会,但他们会引起“邻居”的不满。后者经常使用噪音消除耳机,这意味着很难引起他们的注意,即使有些事情可能真的需要他们的投入。
编程是艺术!对于艺术家来说,幸福的圣杯是一种的心流状态 …所以为了让开发人员开心并提高他们的生产力,给他们一个不受干扰的工作场所,或者至少给开放式办公室的礼仪制定一些规则!
📌 **State of Flow:**
Positive psychologist Mihály Csíkszentmihályi, describes a state of flow as "*Being completely involved in an activity for its own sake. Time flies. Every action, movement and thought follows inevitably from the previous one, like playing jazz. Your whole being is involved, and you are using your skills to the utmost*".To find out more, please watch this extraordinary TED talk:
[Flow, the secret to Happiness](https://www.ted.com/talks/mihaly_csikszentmihalyi_on_flow?language=en).
❸——接受灵活的工作时间
灵活的工作安排是必备的。这包括了所有新老的时髦词汇,比如远程工作、弹性工作时间、远程办公、压缩工作周、数字流浪者 ( 太极端了?😃).
标准办公时间并不适合每个人。有些开发人员在早上 7 点工作得最好,有些在晚上 7 点,有些(我们当中的夜猫子)在凌晨 1 点!国际人才可能会在很长一段时间内访问他们的祖国。此外,家庭责任(尤其是照顾孩子)或各种生活方式的选择(完成学位、兼职等)可能会阻止一些开发人员朝九晚五地工作。然而,安全的 VPN 连接、实时协作平台和团队消息应用触手可及,这意味着一切都可以在远处完成。
虽然对个人的好处非常明显,但对公司的影响并不总是那么明显,一些“逆向思维”的观点声称,弹性工作时间会导致不可靠的结果,并因减少实际存在而扼杀团队合作。这里的关键是要勤于任务估算!例如,如果一个信息技术资源可以在两周的冲刺中交付 10 个故事点,只要在规定的时间内完成,这个贡献什么时候完成并不重要。
作为一种妥协,为了加强团队沟通,可以商定每个人都在线的核心时间(例如上午 11 点到下午 3 点),在此之后,每个开发人员都可以管理自己的时间——这显然是合理的!例如,如果有一个支持任务需要在一个特定的班次完成,它应该坚持。
Inspired by R.E.M.’s ‘Shiny Happy People’ — my daughter’s favourite song!
❹——这是烧毁,不是燃尽!
项目有截止日期——冲刺目标会溢出来!这是事实!
尽管交付经理掌握着规划和即将到来的里程碑,但有时团队中的每个人都必须投入大量时间来完成工作并将新功能发布到产品中,这是无法回避的事实。在合理的范围内,这是可以的,所有在商业项目中工作的开发人员都期望这种情况偶尔发生一次。
尽管这种节奏是不可持续的,但一些经理习惯了增加的产量和更快的交付速度,他们认为在未来的冲刺中过度承诺不切实际的目标是理所当然的。更有甚者,团队开始精疲力竭,这不仅对他们的健康有显著影响,还会引起怨恨和工作不满。
“退让一步,他们会退让一步”
作为一名领导者,要保持团队的高昂士气,你需要尊重他们的工作生活平衡。如果你要求你的开发人员熬夜加班以满足一个紧迫的期限,请确保你不是一直这样要求。
📌 **Autonomy - Mastery - Purpose:**
I recently read Daniel Pink's new book: '[Drive: The Surprising Truth About What Motivates Us](https://www.amazon.co.uk/Drive-Surprising-Truth-About-Motivates/dp/1786891700/)'.
It made me realise that motivation is directly affecting our work-happiness. Small wonder then, that the following 'happiness' factors (5, 6, 7) match Pink's motivation trifecta.To find out more, please watch another fabulous TED talk:
[The puzzle of motivation](https://www.ted.com/talks/dan_pink_on_motivation?language=en).
❺——赋权
工作中的自主性对我来说是一个非常重要的方面,我的事业发展得越快,我就越不愿意在完成任务或做出决定的自由度上妥协。像我一样,大多数开发人员喜欢形成自己的观点,并拥有独立的决定权。
因此,表达对你团队决策能力的信心:让他们参与评估过程,请他们提出解决方案,在做出选择时咨询他们。你会惊讶地发现,他们倾向于满足自己设定的时间表,解决方案富有创意(毕竟他们以解决问题的能力而闻名),而且建议也是经过深思熟虑的。不要微观管理他们也很重要——这是精神杀手!
自治和结构之间需要有一个平衡。因此,不要告诉你的团队如何做他们的工作,只需要设定战略,给他们一个框架,让他们可以做出自己的选择。例如,设定目标、期限和基准,然后让他们定义如何实现目标。这让你专注于大图和管理高层次的“东西”,并给开发人员设计他们自己的任务的自主权。
这是双赢的局面!
所需要的只是相信人性本善——以及足够的勇气把你的人当成主人而不是机器。机器做他们的工作;所有者尽一切努力让他们的公司和团队成功。
—拉兹洛·博克
❻——促进持续学习
如果你一直在关注我的文章,你就会知道我对持续学习重要性的看法,开发者也明白这一点!玩着掌握的概念,软件工程师热爱新技术,紧跟现代思想。新的工具、框架和范例在不断建立,但一些管理者不允许他们尝试新事物,害怕现有现状的任何改变。这会导致一种停滞不前的文化,在这种文化中,开发人员失去了他们好奇心的火花。结果,代码库变得很难维护,阅读起来很难看,支持起来也很昂贵。最终,你的顶尖人才将会离开,你将很难找到愿意为过时的棕色地带项目工作的人。
因此,对团队学习的任何投资都是值得的!一定要送他们去参加会议和课程,买书,给他们订阅学习资源,应有尽有!
此外,在任何新项目开始之前,给你的开发团队时间和空间来提高技能是一个好主意。一项新技术的概念验证可以为组织节省大量的时间和金钱,如今软件生态系统的现代化已经成为一个先决条件。另一个让开发人员兴奋的简单方法是鼓励他们使用不同于普通堆栈的语言、数据库或框架来构建 DevOps 工具。
最后,你不应该低估任务转移的重要性。一遍又一遍地重复同样的工作令人厌烦,开发人员觉得他们没有提高自己的技能。如果你让任务在你的团队中轮换,即使在开始时需要更长的时间,也能减轻持续的痛苦。被压在 L3 支架上 ( 那个可怕的 S 字!)是很好的轮换人选。
❼——灌输目标感
当你意识到你的工作有所作为时,没有比这更好的感觉了。无论大小,都没关系!它可以是小的速赢:例如,创建一个自动化回归测试的新工具,或者增加测试覆盖范围,或者提高长期运行过程的性能。也可能是巨大的成就:新发布的特性给企业带来了几百万美元的资本收益。不管怎样,不要忘记庆祝你的成功。也要具体!被表扬的开发者是快乐的开发者!
编程是一项热爱的工作!目的和工艺之间的一个很强的相关性是开发者倾向于完美主义和对最终产品的骄傲。作为他们的经理,你需要尊重这种行为,给他们时间来编写单元和 BDD(行为驱动开发)测试,并分配一些额外的时间来进行重构和代码优化。这种完美主义的特质凸显了开发人员的主人翁意识,认可他们的努力只会让这种意识更加强烈!
参考
一些关于工作快乐的研究资源:
- 工作优先级:StackOverflow 开发者调查— 2019
- 当软件开发人员不开心的时候会发生什么
- 死海效应
- 快乐和动力之间的复杂关系
- 做这个测试,找出如何在工作中变得更快乐
【哈佛商业评论】
闪亮快乐的开发人员
快乐的开发人员可以将项目引向无数的高度!通过关注这 7 个因素,并将它们移植到你领导团队的方式中,你将建立一个“闪亮的”开发人员会蜂拥而至的工作场所。
感谢阅读!Arigato Gozaimasu!
我定期 ******* 在媒体上写关于领导、技术&的数据——如果您想阅读我未来的帖子,请‘关注’我 !
***** If you were wondering why I had gone radio silent for a couple of months, I was moving houses on a longitude rather than a postcode level! 🌏
保护亚马逊雅典娜的 7 种方法
原文:https://towardsdatascience.com/7-ways-to-secure-amazon-athena-db31a7cb6c88?source=collection_archive---------23-----------------------
[专业数据技能](http://towardsdatascience.com/tagged/Professional Data Skills)
Photo by MILKOVÍ on Unsplash
亚马逊雅典娜 是来自亚马逊网络服务的无服务器数据分析工具。它易于使用,不需要设置任何服务器,支持 ANSI SQL 从亚马逊 S3 查询结构化和半结构化数据。许多公司选择 Athena 是因为它的简单性和低成本。
在互联网上甚至在 Medium 这里有很多关于 Athena 能做什么和不能做什么的资源,以及应该遵循的最佳实践。我就不细说了。相反,让我们来谈谈在设计会议上经常出现的棘手但必要的问题:安全性。
当考虑将 Athena 作为一个工具时,首先要问的问题之一是它有多安全?Athena 是一个无服务器工具:您不需要在 VPC 中设置任何 Athena 实例,也没有安全组来过滤掉不需要的流量。就像 S3 一样,雅典娜必须通过互联网访问。
这时,安全和数据架构团队会有些惊讶。为什么你被问到,你应该选择这样一个有风险的工具吗?
嗯,它一点风险都没有,而且像任何其他技术一样——你让它多安全真的取决于你。
以下是您需要了解的关于 Athena security 的信息。
从广义上讲,数据安全性可以从两个方面来考虑:当数据处于静止状态时和当数据正在传输时。
让我们考虑静态数据。
场景#1: 您有一个 S3 存储桶,其中包含您想要从 Athena 查询的数据。您如何确保桶中的数据是安全的?
首先,确保源 bucket 是不可公开访问的——除非您出于一个非常好的理由有意识地希望它公开。句号。这是考虑 Athena 安全性时要做的第一件事(事实上,当您出于任何目的使用 S3 时)。很少有关于公开的 S3 桶导致的数据泄露的恐怖故事。下面是如何从 AWS 控制台更改存储桶的该属性:
Changing the public access policy for individual buckets
其次,确保桶中的数据是加密的。这是静态加密。有两种方法可以做到这一点:您可以加密桶:
Encrypting an S3 bucket from AWS console
或者您可以加密源文件:
Encrypting an S3 object from AWS console
无论哪种方式,您都可以使用 AWS 密钥管理服务 来进行加密。有三种类型的钥匙:
- SSE-S3:这是你让 S3 管理加密密钥的地方
- KMS:给,你有自己的钥匙,让 KMS 用吧
- 上交所-KMS :你使用 KMS 生成的密钥,让 KMS 管理它
除非有必要,否则使用 SSE-KMS 密钥。通过 SSE-KMS,你可以控制谁可以访问密钥。下图显示了 KMS 键的两种访问级别。
IAM users and roles can be made KMS key administrators
IAM users and roles can be made KMS key users
第三,确保您的查询结果被加密。Amazon Athena 将查询结果存储在一个名为 S3 暂存目录的 S3 位置(可以配置)。加密 S3 桶或源文件并不意味着查询结果也被加密。除非您加密暂存目录,否则您并没有真正加密您的静态数据。
考虑一下:您从 Athena 运行一个关于一些敏感数据的查询。结果集作为文件保存在临时位置。现在,如果您的查询正在获取敏感数据,并且您没有对暂存位置进行加密,那么一些敏感信息将保持不加密状态。
加密单个查询结果怎么样?加密临时目录后,每个后续查询结果都将被加密。
这是加密暂存目录的方式:
Encrypting the Athena query result location
您应该使用相同的密钥来加密数据和查询结果吗?我建议使用不同的钥匙。这是一个管理开销,但是如果一个密钥被破坏,你知道至少另一个是安全的。
第四,你可以加密你的胶水数据目录。数据目录包含所有 Athena 表定义(以及其他内容)。一旦加密了目录,Athena 表定义(而不是数据)就被加密了。取决于你想在加密方面走多远,这可能是一个不错的补充。
Encrypting AWS Glue data catalog
场景#2 :你已经加密了数据;如何控制对数据的访问?
您可以使用 存储桶策略 微调对源数据的访问。存储桶策略规定了谁可以访问存储桶以及他们可以对其内容做什么(例如,解密数据)。存储桶策略可以允许来自同一个或另一个 AWS 帐户的 IAM 用户访问存储桶。这意味着,如果策略明确拒绝角色、用户或组的访问,即使某人有权访问桶加密 KMS 密钥,他/她也可能无法访问其内容。
The S3 bucket policy editor allows writing bucket policy
场景#3 :您只希望某些用户从 Athena 运行查询。
Athena 不像传统数据库那样支持用户帐户。控制谁可以访问 Athena 的唯一方法是通过 IAM 策略 。Athena 有两个 AWS 管理的 IAM 策略:
AWS managed policies for Amazon Athena
第一个策略(AmazonAthenaFullAccess)允许用户在 Athena 上执行任何操作。第二个(AWSQuicksightAthenaAccess)应该分配给使用 Amazon Quicksight 访问 Athena 的 IAM 用户。
我建议您为 Athena 用户创建两个自定义 IAM 策略。一个是“超级用户”策略,允许创建、修改或删除 Athena 对象,如数据库、表或视图。另一个是“分析师”政策。它没有管理权限。
创建策略后,创建两个角色并将每个策略分配给一个角色。接下来,将角色分配给 IAM 组。最后,根据访问要求将各个 IAM 用户分配到这些组中。
如果您的 Athena 查询是从 EC2 实例运行的,那么您可以将角色分配给该实例。
如何保护传输中的数据?你如何控制它?
在这里你不需要做什么。Amazon 服务端点是 SSL 加密的。这意味着传输层安全性(TLS)用于加密在 S3 和雅典娜之间传输的对象。
如果您使用符合 JDBC 标准的 SQL 查询工具来运行 Athena 查询,则返回给客户端的数据将被 SSL 加密。
最后一个选项实际上不是为了保护任何东西,而是为了监控。
您可以在您的 AWS 帐户上启用 CloudTrail ,一旦启用,它将记录对该帐户中任何 AWS 服务的每个 API 调用。这些事件的日志文件将以压缩和加密的格式存储在 S3。
由于 CloudTrail 日志保存在 S3,所以可以从 Athena 上搜索到它们。事实上,CloudTrail 控制台提供了为日志创建 Athena 表的工具。
Creating an Athena table from the AWS CloudTrail console
一旦创建了表,就可以搜索日志。
您还可以配置 CloudTrail 为 Athena 源桶捕获 S3 数据事件,如 GetObject (Read)和 PutObject (Write)。您可以使用这些数据事件的日志来查看 AWS Athena 何时访问 S3。
AWS CloudTrail configuration for S3 data events
现在,您已经看到了保护 Amazon Athena 的几个选项。你实现哪一个取决于你自己。
其他先进地区呢?比如自动化雅典娜?或者让它与 BI 分析工具一起工作?要通过动手练习学习这些和更多内容,你可以在 Pluralsight 注册我的在线课程:亚马逊雅典娜高级运营。
注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
除 Console.log()以外的 8 个控制台 API 函数
原文:https://towardsdatascience.com/8-console-api-functions-other-than-console-log-81cc6b7164b?source=collection_archive---------8-----------------------
除 console.log 之外的一些重要控制台 API 函数的深入指南
Console API Functions
控制台 API 最常用的方法无疑是console.log
。然而,它还附带了几个其他有用的方法,可以提高我们的调试效率。
让我们开始吧🏊并了解其他一些方法👇
注意:从 10.0.0 版本开始,NodeJS 和几乎所有主流浏览器都提供了所有方法。
console.table(数据[,属性])👇
在调试时,如果有一个复杂的嵌套对象或一组相同类型的对象,我们在阅读、理解和比较对象时会遇到困难。
console.table()
是来救我们的。它以清晰的表格格式呈现数据。因此提高了可读性。
该方法有两个参数:
data
:任意类型的数据集合,通常是对象数组。properties
:您想要用来显示表格的字段的字符串数组。
让我们用一个例子来了解更多:
const data = [
{
"id": "0001",
"type": "donut",
"name": "Cake",
"ppu": 0.55,
},
{
"id": "0002",
"type": "donut",
"name": "Raised",
"ppu": 0.55,
}
];
我们有一系列的对象data
。让我们来看看数据的表格方法输出。
console.table(data)
console.table(data)
2.console.table(data, ['name'])
console.table(data, ['name'])
对嵌套对象进行同样的尝试,并查看输出😄
注意:您可以通过单击列的标签按列对表格进行排序。
控制台.组(标签)&控制台.组结束(标签)👇
有时,可能会有这样一种情况,我们希望在一个循环中记录值。最好的办法是在每个循环的末尾添加一个分隔符来分隔每次迭代的值,但这仍然不够有效,因为没有标签来描述日志。
使用console.group
,在登录到控制台时,正确组织相关数据并使用确定的组标签表示每个组变得非常简单。
这些方法带有一个可选参数— label
,它是组的名称。
尽管不要求将参数传递给console.group()
,但是我们还是应该这样做,以便弄清楚哪些值被分组在一起。
我们不必将组名传递给console.groupEnd()
,因为它总是会关闭最近创建的组。
如果我们在一个已经创建的组中调用console.group()
,我们也可以创建嵌套组。这里有一个简单的例子,可以帮助我们更好地理解它。
console.group() and console.groupEnd()
注意:由
console.group(label)
创建的组最初是打开的,如果我们调用console.groupCollapsed(label)
,我们可以从一开始就将组显示为折叠的。这里有一个例子:
console.groupCollapsed(label)
console.dir(对象)和 console.dirxml(对象)👇
在过去,console.log
和console.dir
之间的行为非常不同,特别是在记录对象内容时,但是新的 JavaScript 引擎已经扩展了console.log
的功能,所以和console.dir
已经没有太大的区别了。
我发现的唯一区别是在浏览器控制台中访问 DOM 元素时。
console.log
在类似 HTML 的树中打印元素console.dir
在一个类似 JSON 的树中打印元素,从这里我们可以检查元素的 DOM 属性
Difference between console.log() and console.dir()
在 Node.js 的情况下,console.dir(obj[, options])
函数接受一个可选参数,该参数是一个可以有以下键的对象:
showHidden
<布尔> 。如果true
那么对象的不可枚举和符号属性也将被显示。默认:false
。depth
<编号> 。告知在格式化对象时递归的次数。这对于检查大型复杂物体很有用。要使其无限递归,请传递null
。默认:2
。colors
<布尔> 。如果true
,则输出将采用 ANSI 颜色代码。颜色可定制。默认:false
。
注意:如果你知道更多的区别,请随时用例子在下面评论😊
对 HTML 和 XML 元素或对象调用console.dirxml()
等同于调用console.log()
注意:Node.js 内部的
console.dirxml
也调用console.log
作为其参数。
让我们看一个例子
Difference between console.log() and console.dirxml()
console.profile([,label]) & console.profileEnd([,label])👇
console.profile([,label])
开始记录调用它的地方(Browser 或 Node.js)的 CPU 和内存使用情况的性能概要。
探查器的每次运行都保存为一个单独的选项卡,由作为参数传递的标签标识。
记住使用console.profileEnd(label)
结束剖析。
让我们通过一个例子来理解:
这会创建一个名为test1
的 JavaScript 分析器,并开始记录浏览器的性能(假设它运行在浏览器中)。以查看 Chrome 浏览器中记录的性能。
console.profile([, label]) & console.profileEnd([, label])
注意:如果你在开发者工具中没有看到 JavaScript profiler 面板,那么请点击这个——点击三点菜单(在右上角)⋮->更多工具-> JavaScript Profiler。
对于 Node.js,该方法不显示任何内容,除非在检查器中使用。停止当前的 JavaScript CPU 性能分析会话(如果已经启动),并将报告打印到检查器的性能分析面板。
如果在没有标签的情况下调用console.profileEnd()
方法,最近启动的概要文件将被停止。
注意:此功能是非标准的,不在标准轨道上。不要在面向 Web 的生产网站上使用它。
控制台.时间([,标签]) &控制台.时间结束([,标签]) 👇
console.time()
启动可用于计算操作持续时间的计时器。console.timeEnd()
停止计时器并以毫秒为单位打印总运行时间。
定时器由唯一的label
标识,如果没有指定,timeEnd
将采用最近的时间功能并停止它。
当您需要对一段代码进行性能检查时,通常会用到它们。你也可以向time
和timeEnd
传递一个字符串,它将启动另一个同名的定时器。
我们用一个小例子来了解一下
console.time([, label]) & console.timeEnd([, label])
循环完成所用的时间是 0.01784375 毫秒
注:查看这个性能分析开源代码完全是使用上述两个函数制作的。
console.count([,label])&console . count reset([,label] ) 👇
[console.count](https://developer.mozilla.org/en-US/docs/Web/API/Console/count)([,label])
在作为参数传递的标签上放置一个计数器。每次调用它时,计数器的值都会增加。调试控制台中显示一个标签和一个数字,如果label
没有通过,console.count()
将记录当时它被调用的次数,默认标签如下:
[label]: X //when label is passed
default: X //when label is not passed
console.countReset()
将重置 count 的值,如果它与参数label
一起使用,那么它将重置该特定标签的计数值。
这里有一个例子可以更好地理解这些方法。
console.count([, label]) & console.countReset([, label])
在上面的例子中,当我们使用console.countReset()
重置计数器的值,并再次调用console.count()
方法时,我们看到它返回计数器 1,就像它调用一次一样。
此外,请注意带标签和不带标签调用这些方法的区别。🌟
console.assert(表达式,消息)👇
该方法用于运行简单的断言测试。它需要两个必需的参数:
expression
:布尔表达式。message
: 写入控制台的字符串或对象。
注意:如果一个表达式为 false,它会向控制台写入一条消息并抛出异常。如果这是真的,那么它将什么也不做。
console.assert(expression, message)
console.trace([,data])👇
有时,在调试复杂的函数调用时,我们会陷入检测可调用函数及其参数值的困境。这就是console.trace()
出现的地方,它从被调用的点打印可调用函数的堆栈跟踪到控制台。
console.trace([,data])
注意:当 Node.js 中抛出异常时,或者当我们在浏览器中调试函数时,可以使用这种方法的一个实例是跟踪堆栈。
A stack trace example from Node.js
输出太多?
使用**console.clear()**
清除所有内容即可😃
如果您想加入我的电子邮件列表,请考虑在此处输入您的电子邮件地址 和关注我的medium阅读更多关于 javascript 和Github的文章,查看我的疯狂代码。如果有什么不清楚或者你想指出什么,请在下面评论。
你可能也会喜欢我的其他文章
- 20 VS 快速编码的代码快捷键
- VS Web 开发效率的代码扩展
- Nodejs 应用程序结构——构建高度可扩展的架构。
如果你喜欢这篇文章,请随意分享,帮助他人找到它!
谢谢!
8 机器学习实施中的经验教训
原文:https://towardsdatascience.com/8-lessons-learned-in-machine-learning-implementation-86cede701eb1?source=collection_archive---------29-----------------------
机器学习和数据科学发展中该做什么和不该做什么的快速概述
在过去的三年里,我在 DataArt 领导机器学习和数据科学,研究不同业务的痛点,提出技术解决方案并进行实施。
在我与技术打交道的时间里,我已经确定了我使用的八个关键规则。
1.如果工具存在,不要重新发明轮子
Not invented here syndrome. Image: source.
一个在技术社区流行的想法,为每一个新问题建立定制的解决方案。许多工程师真的相信,他们非常定制的方法,为适应确切的业务案例而构建,比从货架上拿出一个解决方案并根据特定案例进行调整更好。
云提供商正在快速开发 ML 服务,走着大数据服务在他们之前走过的路。十年前,大数据是一种价格昂贵、易于扩展和容错的奇异水果。现在是标配了。开源工具也是如此。在 99%的情况下,你不需要发明一个新的图书馆或数据库,因为最有可能的是你会在市场上找到一些有用的东西。
2.始终考虑商业价值和投资回报率
Source: Deloitte.
每个技术任务都应该带来商业价值。如果你做研究,你应该总是能够提供一个你在现实生活中正在处理的案例的例子。通常,如果你不能量化这样一个案例,就没有必要在它上面花费时间。
ROI 计算方法可能需要重新校准。与经典编程相比,机器学习是一种概率方法,永远不会为您提供 100%的准确性,因此您应该始终评估准确性的提高是否会带来价值 2、5、10 或 20 %的投资。
好消息是,数据科学项目非常接近业务,所以你应该有很大的回报感。
假设您有数百人,他们的工作是从文档中提取数据,那么自动化提取结果的准确性增加 5%可能意味着每年数百万美元。但是,如果增加 1%的准确度会花费大量的金钱,这是计算机视觉项目中的一个普遍情况,也许有更有价值的任务,我们仍然可以依靠人类操作员。
3.永远不要在假设形成之前就开始研究
通常,商业人士会以这样的方式提出问题:“我们有大量的数据,我们如何从这些数据中找到意义?你能帮我们找到真知灼见吗?”
没有一个明确的假设,永远不要开始研究这个,否则,这是在大海捞针。把机器学习想象成一个能做好一件事的超级智慧——自动完成由于缺乏计算能力而无法手动处理的事情。如果你不能回答你在寻找什么,很可能你在做一些随机的事情。
总是从这样的问题开始:
- 我想解决什么样的问题?
- 我想回答什么样的问题?
4.必须小心处理与现有系统的集成
整合本身没什么大不了。但是一定要考虑到人类的感知。如果公司有一个基于规则的系统来做决策,并且很清楚它是如何工作的,那么一个使用 ML 技术的新解决方案对利益相关者来说就像一个黑盒。因此,制定明确的迁移计划以应对潜在风险至关重要。
我们与一家商务旅游公司合作,这家公司的工作之一就是为客户购买机票。预订需要 17 个小时,在此期间价格可能会波动。波动可能取决于许多因素:客流量、星期几、一天中的时间、季节、重大体育或文化活动、天气等。目标是证明,在 ML 的帮助下,分析历史数据,价格可以在旧的但经过验证的基于规则的系统产生的现有降价的基础上降低几个百分点。
但是没有人愿意依赖一个营业额十亿美元的黑匣子。详细阐述了一个迁移计划:首先,与生产系统并行设置一个基于 ML 的预测器,然后在生产中处理 10%的采购,然后是 30%,不断测量相对性能。当系统在生产中得到验证时,至少 10%的门票仍需要通过旧的基于规则的算法来购买,以获得销售引擎的最新更新,从而避免过度拟合(ML 系统自认为了解周围世界的一切时的状态)。
向所有利益相关者证明 ML 过程是渐进的,并且在失败的情况下是可逆的,这一点非常重要。
5.进行版本控制
Image: DVC.
你的 ML 模型的每一个新版本都是一个实验。它可能成功也可能失败,这就是为什么你应该总是有一个工作的 CI/CD 管道,以便能够反向到一个旧版本。
但是,您也不应该忘记数据的正确版本、模型参数和实验结果。这里有专门的工具可以帮忙,比如 DVC——ML 的版本控制系统。
6.不要让轮子在研究中旋转:保持目标集中(但不要忽视伟大的意外发现)
当你开始研究一个问题,然后发现另一个问题,然后你发现自己在一个完全不同的地方,对产品来说并不重要,这很容易被研究的常规所困扰。
专注于你的研究,不要分心,记住你为什么开始,主要目标是什么。
然而,如果你看到一个对用户来说可能很有价值的唾手可得的果实——去得到它!当您进行可视化来表示在数据中发现的见解时,这尤其可能发生。从形式上看,这在当时可能并不重要,但是您永远不知道在某个时候什么对业务来说可能是有价值的。
请记住,在您最喜爱的应用程序中接收微小但可爱的更新是多么美好。
7.要有创意!
总有一种复杂而准确的方法来解决大量数据争论、特征工程等问题,这意味着需要数天的手工操作。但是你能简单的用 20%的努力带来 80%的结果吗?
我们已经学会在数据之上运用横向思维。在一个案例中,我们需要在一家大型化学公司中按照业务单元对流程进行分类。我们发现了一种替代手动输入的方法,即使用公开的 NLP 模型,将流程和部门短语转换为向量,并找到最接近的对。
Image: source.
有一次,我们需要对包含万事达标识的 20 年的营销材料进行分类,以找出哪些材料仍然是真实的。成千上万的文件。在某个时候,我们意识到万事达卡的最后一次标志变化发生在 2016 年。两个小时来标记和训练基于云的图像识别服务,瞧,我们只剩下新的文档了。
在数据科学项目中,我们总是缺乏数据或专业知识,因此创造力是构建工作解决方案的重要资产。
8.人的因素——保持敏感并管理期望
像 ML 这样的新技术带来了一系列的挑战,这些挑战是更成熟的技术所没有的。像 ML 这样的新技术的一个主要问题是确保提出的解决方案不会因为不可避免的不确定性而使管理层感到沮丧。
对于周围的大多数人来说,ML 和数据科学是一个黑盒子,这就是为什么期望管理比以往任何时候都更重要。不要忘记教育人们,量化研究结果以与目标进行比较,并从技术和人的角度提前考虑集成。
而且,在适当的情况下,人工智能、启发式方法和人工程序的结合是很好的。当人们开始构建一个基于人工智能的解决方案时,往往会有一种建立完全自动化的东西的意图——一个带有铃铛和哨子的 oracle,可以绝对确定地提出建议。
如果这是可能的,你是幸运的,但不要忘记,即使 ML 不允许你完全解决任务,它也可以在准备决策所需的数据方面提供很大的帮助。将最终决定权从 ML 手中夺走有助于避免行业专家的不信任,他们通常更喜欢由人来做出最终决定。
你有什么见解?请在评论中分享。
为什么我认为 Python 非常适合机器学习和人工智能
原文:https://towardsdatascience.com/8-reasons-why-python-is-good-for-artificial-intelligence-and-machine-learning-4a23f6bed2e6?source=collection_archive---------3-----------------------
这篇关于 为什么 Python 对 ML 和 AI 有好处的文章,原贴于 Django Stars 博客 。
人工智能(AI)和机器学习(ML)是 IT 行业的新黑。虽然关于其开发安全性的讨论不断升级,但开发人员扩大了人工智能的能力和容量。今天,人工智能已经远远超出了科幻小说的概念。这成了一种必然。人工智能被广泛用于处理和分析海量数据,有助于处理无法再由人工完成的工作,因为其数量和强度显著增加。
例如,人工智能被应用于分析,以建立预测,帮助人们制定强有力的战略,寻找更有效的解决方案。FinTech 在投资平台中应用人工智能进行市场研究,并预测将资金投入何处以获得更大利润。旅游业使用人工智能来提供个性化建议或推出聊天机器人,并增强整体用户体验。这些例子表明,人工智能和人工智能被用来处理大量数据,以提供更好的用户体验,更个性化和更准确的体验。
人工智能和人工智能如何形成未来的技术
今天,随着数据量和复杂性的增加,人工智能和 ML 被用于数据的处理和分析。平心而论,人脑是可以分析大量数据的,但这种能力受限于它随时可以吸收的数据量。人工智能不受这个限制。人工智能提供的更准确的预测和见解提高了业务效率,降低了生产成本,提高了生产率。难怪许多行业应用人工智能和人工智能来提高性能和推动产品开发。
根据德勤的研究,人工智能驱动的公司是旨在提高生产力的技术变革的最新趋势。他们的预测也证明了这一点,即在未来 24 个月内,将在产品和流程中使用人工智能以实现更高效率和战略目标的公司数量可能会增加。简而言之,人工智能有助于用更少的努力做更好的工作。
鉴于人工智能使用的优势,越来越多的公司渴望使用它。然而,人工智能是一条双行道——被用于优化分析过程,它不是最容易开发的技术。由于要分析的数据量巨大,人工智能产品必须能够有效地处理高负载的过程,并且不会为此花费太多时间。为了使其正常工作,必须为其开发选择合适的语言。就语法而言,它不会太复杂,能够处理复杂的过程,并且易于支持。
Python 是人工智能和 ML 的最佳编程语言
随着人工智能和人工智能在各种渠道和行业中的应用,大公司在这些领域进行投资,对人工智能和人工智能专家的需求也相应增长。来自 IBM 机器学习部门的 Jean Francois Puget 表达了他的观点,Python 是人工智能和 ML 最受欢迎的语言,并基于 indeed.com 的一个趋势搜索结果。
根据 Francois Puget 的图表,Python 是 AI 和 ML 的主要代码语言。
我们对 Python 的优势进行了一些研究,并发现了为什么在将 AI 和 ML 项目付诸实践时应该选择 Python。
您可能还喜欢:
[## 旅游业中的机器学习和数据分析
克里斯托弗·哥伦布是历史上最著名的旅行家之一,他一生只进行了 4 次旅行。其中一个…
djangostars.com](https://djangostars.com/blog/benefits-of-the-use-of-machine-learning-and-ai-in-the-travel-industry/#utm_source=medium&utm_medium=towardsdatascience.com&utm_campaign=8 reasons why python is good for ml and ai&utm_content=you may also like 1) [## 金融服务中的 6 个人工智能示例
正如许多其他技术进步一样,人工智能从童话故事中走进了我们的生活…
djangostars.com](https://djangostars.com/blog/6-examples-ai-financial-services/#utm_source=medium&utm_medium=towardsdatascience.com&utm_campaign=8 reasons why python is good for ml and ai&utm_content=you may also like 2)
1.一个伟大的图书馆生态系统
丰富的库选择是 Python 成为最流行的人工智能编程语言的主要原因之一。库是一个模块或一组由不同来源发布的模块,如 PyPi ,其中包括一段预先编写的代码,允许用户实现某些功能或执行不同的操作。Python 库提供了基础级别的项目,因此开发人员不必每次都从头开始编码。
ML 需要连续的数据处理,Python 的库让你可以访问、处理和转换数据。这些是你能为 ML 和 AI 使用的一些最广泛的库:
- Scikit-learn 用于处理基本的 ML 算法,如聚类、线性和逻辑回归、回归、分类等。
- 熊猫用于高层数据结构和分析。它允许合并和过滤数据,以及从其他外部来源(例如 Excel)收集数据。
- Keras 进行深度学习。它允许快速计算和原型制作,因为除了计算机的 CPU 之外,它还使用 GPU。
- TensorFlow 用于通过建立、训练和利用具有大规模数据集的人工神经网络来处理深度学习。
- Matplotlib 用于创建 2D 图、直方图、图表和其他可视化形式。
- NLTK 用于处理计算语言学、自然语言识别和处理。
- Scikit-image 用于图像处理。
- PyBrain 用于神经网络、无监督和强化学习。
- Caffe 用于深度学习,允许在 CPU 和 GPU 之间切换,并使用单个 NVIDIA K40 GPU 每天处理 60+ mln 图像。
- 统计模型用于统计算法和数据探索。
在 PyPI 库中,你可以发现和比较更多的 Python 库。
2.低准入门槛
在 ML 和 AI 行业工作,意味着要处理一堆你需要用最便捷有效的方式处理的数据。较低的准入门槛允许更多的数据科学家快速掌握 Python,并开始使用它进行人工智能开发,而无需浪费太多精力来学习这种语言。
Python 编程语言类似于日常英语,这使得学习过程更加容易。其简单的语法允许您轻松地处理复杂的系统,确保系统元素之间的清晰关系。
例如,编写这段代码的目的是为了确定输入的数字是否是质数。
下面是代码的视图:
test_number = 407 # our example is not a prime number# prime numbers are greater than 1if test_number > 1:# check for factorsnumber_list = range(2, test_number)for number in number_list:number_of_parts = test_number // numberprint(f"{test_number} is not a prime number")print(f"{number} times {number_of_parts} is {test_number}")breakelse:print(f"{test_number} is a prime number")else:print(f"{test_number} is not a prime number")
正如你在最后一行看到的,这段代码的结果是测试数不是质数。坦率地说,一个说英语的人可以很容易地理解代码的含义,因为它使用简单的英语单词。
除此之外,还有很多可用的文档,Python 社区也随时提供帮助和建议。
3.灵活性
用于机器学习的 Python 是一个很好的选择,因为这种语言非常灵活:
- 它提供了选择使用 OOPs 或脚本的选项。
- 也不需要重新编译源代码,开发人员可以实现任何更改并很快看到结果。
- 程序员可以结合 Python 和其他语言来达到他们的目标。
此外,灵活性允许开发人员选择他们完全熟悉的编程风格,甚至组合这些风格以最有效的方式解决不同类型的问题。
- 命令式风格由描述计算机如何执行这些命令的命令组成。通过这种方式,你可以定义程序状态改变时的计算顺序。
- 函数式风格也被称为声明式,因为它声明了应该执行什么操作。它不考虑程序状态,与命令式相比,它以数学方程的形式声明语句。
- 面向对象风格基于两个概念:类和对象,相似的对象形成类。Python 并不完全支持这种风格,因为它不能完全执行封装,但是开发人员仍然可以在一定程度上使用这种风格。
- 程序风格在初学者中最常见,因为它以一步一步的方式进行任务。它通常用于排序、迭代、模块化和选择。
灵活性因素降低了出错的可能性,因为程序员有机会控制局面并在舒适的环境中工作。
4.平台独立性
Python 不仅使用起来舒服、容易学习,而且用途广泛。我们的意思是,用于机器学习开发的 Python 可以在任何平台上运行,包括 Windows、MacOS、Linux、Unix 和其他 21 种平台。为了将流程从一个平台转移到另一个平台,开发人员需要实现一些小规模的更改,并修改一些代码行,以创建适用于所选平台的可执行形式的代码。开发者可以使用像 PyInstaller 这样的包来准备他们的代码,以便在不同的平台上运行。
同样,这为各种平台上的测试节省了时间和金钱,并使整个过程更加简单和方便。
5.可读性
Python 非常容易阅读,所以每个 Python 开发者都可以理解他们同行的代码,并修改、复制或分享它们。没有混淆,错误或冲突的范例,这导致了人工智能和人工智能专业人员之间更有效的算法,思想和工具的交流。
也有像 IPython 这样的工具可用,这是一个交互式 shell,提供额外的功能,如测试、调试、制表和其他功能,并简化工作流程。
6.良好的可视化选项
我们已经提到 Python 提供了各种各样的库,其中一些是很好的可视化工具。然而,对于 AI 开发人员来说,重要的是要强调,在人工智能、深度学习和机器学习中,能够以人类可读的格式表示数据至关重要。
像 Matplotlib 这样的库允许数据科学家构建图表、直方图和绘图,以便更好地理解数据、有效地展示和可视化。不同的应用程序编程接口也简化了可视化过程,使创建清晰的报告变得更加容易。
7.社区支持
当围绕编程语言建立了强大的社区支持时,这总是很有帮助的。Python 是一种开源语言,这意味着有很多资源对程序员开放,从初学者到专业人员。
许多 Python 文档可以在网上以及 Python 社区和论坛中获得,程序员和机器学习开发人员在那里讨论错误、解决问题并互相帮助。
Python 编程语言是绝对免费的,各种有用的库和工具也是如此。
8.日益普及
由于上面讨论的优势,Python 在数据科学家中越来越受欢迎。根据 StackOverflow 的消息,Python 的受欢迎程度预计至少会持续到 2020 年。
这意味着寻找开发人员和替换团队成员变得更加容易。此外,他们的工作成本可能没有使用不太流行的编程语言时高。
人工智能和人工智能的 Python 用例
Python 提供了许多对 AI 和 ML 特别有用的特性,这使得它成为实现这些目的的最佳语言。难怪各行各业都用 Python 做预测等机器学习任务。
让我们仔细看看中的一些示例:
- 旅行;
- Fintech
- 运输;
- 医疗保健。
旅行
例如,旅游业巨头 Skyscanner 使用 Python 无监督 ML 算法来预测新飞机航线的行为。他们比较了数千个出发地和目的地,用 30 种不同的标准来评估每一个目的地,以确定乘客的需求。他们的结果显示在仪表盘上,在那里你可以选择任何始发城市来查看从 0 到 9 的目的地组及其特征。
这样一个人工智能在旅游行业中实施的例子对于向用户推荐目的地、协助创建营销预算以及为新路线设定初始价格非常有帮助。
金融科技
金融服务中使用的人工智能有助于解决与风险管理、欺诈防范、个性化银行、自动化和其他工具相关的问题,从而为用户提供高质量的金融服务。据预测,到 2030 年,金融科技中的人工智能可以将运营成本降低 22 %( T7 ),产生令人印象深刻的 1 万亿美元。
基于 Python 构建的网上银行软件的成功例子有 Venmo 、 Affirm 或 Robinhood 。这些服务不仅允许用户进行和控制他们的支付和购买,而且它们还在软件内部创建了一个社交网络,因此人们可以保持联系。
当谈到加密货币时,Python 被用来构建类似于 Anaconda 的解决方案,以有效地分析市场,进行预测和可视化数据。
运输
优步用 Python 开发了一个 ML 平台米开朗基罗 PyML 。他们用它进行在线和离线预测,解决日常任务。米开朗基罗 PyML 是最初米开朗基罗产品的扩展,它是可扩展的,但不够灵活。现在,用户可以用 PyML 验证模型,然后在米开朗基罗中复制它们,以获得充分的效率和可伸缩性。
卫生保健
人工智能正在重塑医疗保健行业,帮助预测和扫描疾病,检测损伤,并帮助人们通过易于使用的移动应用程序在日常生活中保持良好的健康。
业界有很多基于人工智能的伟大项目。例如, Fathom 是一个自然语言处理系统,用于分析电子健康记录,他们的任务是“自动化医疗编码”他们的领导者来自谷歌、亚马逊、脸书等公司,或者斯坦福大学和哈佛大学。
AiCure 是另一家专注于确保患者在正确的时间服用正确药物的初创公司。为此,他们使用面部识别、药丸识别和动作识别等技术。该应用程序还能够分析患者的状态,并了解治疗是否有效。他们使用 IMA,这是一种交互式医疗助手,可以收集临床上有意义的数据,然后通过软件进行分析。
越来越受欢迎导致数据科学社区对 Python 程序员的需求越来越大,选择一种需求量大的语言是明智的选择,因为在未来,它将允许更多的功能。
用于机器学习的 Python:有用的开源项目
Python 的开源特性允许任何人工智能开发公司与社区分享他们的成果。如果你已经下定决心,决定学习 Python,或者想在你的人工智能项目中使用这种语言,这里有一个有用的开源项目列表供你开始使用:
- OpenCog 基金会 OpenCog 致力于创造具有人类能力的人工通用智能(AGI ),以此“共同构建更好的思想”。它成立于 2011 年,现在,它被用于奇点网络项目,以及汉森机器人公司,为索菲亚和其他机器人提供智能。
- 人工智能研究所人工智能研究所是不来梅大学计算机科学学院的一部分。它对人工智能进行研究,举办不同的研讨会和活动,帮助推动人工智能技术向前发展,让更多年轻人参与该领域并对他们进行教育,同时支持现有的人工智能项目和公司。
- 这是“世界上最高效的团队聊天”,每天可以处理数千条实时消息。财富 500 强公司和其他大型开源项目使用 Zulip,它提供了清晰的组织、异步通信和其他对团队有用的巨大优势。
- Magenta
它致力于图像、歌曲、图画的生成,让艺术家探索新的创作方式。 - MailPile
MailPile 是一款创新的电子邮件客户端,专注于安全和私密的通信。这个项目试图回答一个问题:“我如何在网上保护我的隐私?”它速度快,没有广告,有强大的搜索功能,还有隐私和加密功能。
总结一下
人工智能和人工智能是快速发展的通用技术,让科学家解决现实生活中的困境,并提出聪明的解决方案。他们中的许多人认为 Python 是人工智能的完美编程语言的原因是由于以下优点:
Python 中加速数据科学发展的 8 个技巧
原文:https://towardsdatascience.com/8-tricks-in-python-to-accelerate-your-data-science-development-cad3b634e140?source=collection_archive---------8-----------------------
让我们简短,让我们有效。少字多码(多模因图解)。这就是你要找的,对吗?;)
Python 语言技巧
检查一行代码中的条件(断言)
例如,我们将检查训练和测试函数是否具有相同的列(当您预测测试数据集并且没有应用相同的功能工程时,这是一个常见的错误:)
常见 Python:
label = df_train['label_column']
df_train = df_train.drop('label_column',axis=1)
if df_train.column.tolist() != df_test.column.tolist():
print('Train and test column do not match')
print(sys.exit())
Python 技巧:
assert df_train.column.tolist() == df_test.column.tolist(),'Train and test column do not match'
在一行代码中循环(单行代码)
例如,我们将填充一个从 0 到 100 的偶数列表,并为 ood 编号填充 0(即[0,0,2,0,4,0…])
常见 Python:
my_awesome_list = []
for i in range [0,100]:
if i%2 = 0:
my_awesome_list.append(i)
else:
my_awesome_list.append(0)**my_awesome_list = [0,0,2,0,3,4]**
Python 技巧:
my_awesome_list = [i if i%2==0 else 0 for i in range(0,100) ]**my_awesome_list = [0,0,2,0,3,4]**
创建函数而不创建函数(lambda)
计算列表中每个元素的双精度值:
常见 Python:
a = [2,2,2]
for i in range(0,len(a)):
a[i] = a[i]*2**[4, 4, 4]**
Python 技巧:
a = [2,2,2]
double = lambda x : x*2
a = [double(a_) for a_ in a]**[4, 4, 4]**
使用另一个列表转换一个列表,不使用循环(map)
在一个完全否定列表中转换一个数字列表。
常见 Python:
a = [1,1,1,1]
for i in range(0,len(a)):
a[i] = -1 * a[i]**[-1, -1, -1, -1]**
Python 技巧:
a = [1,1,1,1]
a = list(map(lambda x: -1*x, a))**[-1, -1, -1, -1]**
乍一看不要滥用简单语法(try: except 和 global)
我在初级 Python 开发人员的 lof 代码中注意到的一个常见错误是使用太多 try/except 和全局语法来开发代码,例如:
def compare_two_list(list_a,list_b):
global len_of_all_list
try:
for i in range(0,len_of_all_list):
if list_a[i] != list_b[i]:
print('error')
except:
print('error')global len_of_all_listlen_of_all_list = 100
list_a = [1]*len_of_all_list
len_of_all_list = len_of_all_list+1
list_b = [1]*len_of_all_listcompare_two_list(list_a,list_b)**'error'**
调试这样的代码真的很复杂。使用 try:除非您需要通过处理特定的异常来操作代码中的某些内容。例如,这里使用“try: except”语句来处理我们的问题的一种方法是忽略 list_a 的最大索引之后的所有索引:
def compare_two_list(list_a,list_b):
global len_of_all_list
try:
for i in range(0,len_of_all_list):
if list_a[i] != list_b[i]:
print('error')
except IndexError:
print('It seems that the two lists are different sizes. They was similar until index {0}'.format(len_of_all_list-1))
return
global len_of_all_list
len_of_all_list=100
list_a = [1]*len_of_all_list
len_of_all_list = len_of_all_list+1
list_b = [1]*len_of_all_list
compare_two_list(list_a,list_b)**It seems that the two lists are different sizes. They was similar until index 101.**
数据科学图书馆技巧
基于条件(np.where())填充 DataFrame 列
作为示例,我们将基于一个条件来填充一列,如果人数等于 1,则意味着该人是独自一人,否则该人不是独自一人(为了简化,我们假设 0 不存在于“人数”列中):
常见 Python:
df['alone'] = ''
df.loc[df['number_of_persons'] == 1]]['alone'] = 'Yes'
df.loc[['number_of_persons'] != 1]]['alone'] = 'No'
Python 技巧:
df['alone'] = np.where(df['number_of_persons']==1,'Yes','No')
获取所有数字列(pd。DF()。select_dtypes(include=[]))
对于大多数机器学习算法,我们需要给它们数值。Pandas DataFrame 提供了一种选择这些列的简单方法。您还可以使用 select_dtypes 选择任何类型的数据类型作为对象、分类...
常见 Python:
df_train.info()**<class 'pandas.core.frame.DataFrame'>
Index: 819 entries, 0_0 to 2_29
Data columns (total 4 columns):
image_id 812 non-null object
age 816 non-null int64
gender 819 non-null object
number_of_persons 734 non-null float64
dtypes: float64(10), object(3)
memory usage: 89.6+ KB** numerical_column = ['age','number_of_persons']
X_train = df_train[numerical_column]
Python 技巧:
X_train = df_train.select_dtypes(include=['int64','float64'])
获取 DataFrame 选择中条件的倒数(。[~条件])
例如,我们将为成年人和未成年人创建两个列。
常见 Python:
minor_check = df.age.isin(list(range(0,18)))
df['minor'] = df[minor_check]df['adult’] = df[not (minor_check)]**ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().**
Python 大师:
我们知道。isna()和 isin()可以检索 nan 值和 dataframe 列中的列表值。但是 isNOTna() ans isNOTin()不存在,符号来了~(也可以用 np.invert()😃。
minor_check = df.age.isin(list(range(0,18)))
df['minor'] = df[minor_check]
df['adult’] = df[~minor_check]
希望这些技巧会有所帮助,请不要犹豫,分享你的!😃
用于数据集处理的 8 个有用的 Pandas 特性
原文:https://towardsdatascience.com/8-useful-pandas-features-for-data-set-handling-753e9d8ba8ff?source=collection_archive---------11-----------------------
世界杯和熊猫- Joga bonito
Image Courtesy of Fauzan Saari via Unsplash
介绍
本文展示了 8 个简单但有用的 Pandas 操作,展示了 Python 的 Pandas 库如何有效地用于数据集探索。我将在这篇教程中使用的数据集名为“【1872 年至 2019 年的国际足球成绩”,可以在这里找到[,以防出现任何想要测试的代码片段示例。](http://International football results from 1872 to 2019)
1.Pandas read_csv 方法的 parse_dates 参数。
通常,当我第一次导入数据集时,我使用 head()方法读取前 5 行。所示的示例通知我,我有一个日期列。理想情况下,对于基于日期-时间的操作,我希望该列具有日期-时间数据类型。
Before assigning the data-set to a variable name, I quickly view the columns to get a sense of the data-set
为了在我第一次导入数据集时做到这一点,您可以简单地使用 Pandas read_csv 方法的 parse_dates 可选参数。此参数采用一个列表,其中您希望作为日期时间数据类型的列名在列表中作为字符串列出。
- 如果要将多个列解析为 datetime 数据类型,只需将每个列名传递到列表中,用逗号分隔。这可以防止使用 pd.to_datetime 方法重新分配现有列。例如,如果我只是读入数据,不包括 parse_dates 参数,我将不得不使用 pd.to_datetime 方法来获得相同的最终结果。
要确认该列已经成功转换为 datetime 数据类型序列,只需调用 DataFrame 上的 dtypes 属性,我在这里为它指定了变量 football。
(注意:我已经创建了一个名为 match goals 的新列,将在后面的步骤中使用)
The parse_dates parameter can simplify and cut down on the amount of code that needs to be written when parsing columns which require a datetime datatype. The pd.to_datetime is an equivalent way of executing this conversion.
2。熊猫系列的中间方法
既然 date 列有 datetime 数据类型,我可以通过在数据集上使用 between 方法来利用这一点。
由于我关注的是 FIFA 世界杯,所以我过滤了足球数据帧,并创建了一个布尔序列,如果锦标赛列中的列值与“FIFA 世界杯”匹配,则返回真值。然后,我将这个布尔序列分配给一个名为世界杯比赛的变量,并使用这个布尔序列过滤足球数据帧。这给了我一个新的数据框架,为简单起见,我称之为世界杯。
我现在可以在我的 world_cup 数据帧中的日期列上使用 between 方法,找出在两个指定日期之间发生的比赛数量。
between 方法的第一个参数是下限字符串日期,第二个参数是上限字符串日期。between 方法返回一个布尔序列,我将它赋给变量 games_range。然后我用这个布尔序列过滤世界杯数据帧。
为了清楚起见,我选择了 2010 年 1 月 1 日和 2016 年 1 月 1 日之间的日期,因为我知道在这两个日期之间有两届世界杯;一次是 2010 年在南非,另一次是 2014 年在巴西。在现代形式下,每届世界杯都由 64 场比赛组成。我用来过滤世界杯数据帧的游戏范围变量应该返回 128 行。确实如此,如代码片段所示。
注意:对于 between 方法,下限是包含性的,上限是排他性的。
2.b 过滤日期
此外,在处理 datetime 数据类型时,可以使用比较运算符。在这里,我创建了一个布尔序列,如果“日期”大于 2018 年 1 月 1 日,则返回真值。我用这个布尔序列过滤我的 world_cup 数据帧,并使用 shape 属性快速检查它的形状。这告诉我,世界杯数据帧中的 64 行对应于 2018 年 1 月 1 日之后的日期。这在 2018 年俄罗斯世界杯发生在当年夏天的基础上是有道理的!
3.数据透视表方法
数据透视表方法非常适合于将值作为一个整体进行汇总。pivot_tables 方法直接在 DataFrame 上调用,这里是' recent_wc_games '(上一节的,基于两届世界杯,参见下面注释掉的代码)。在所示的示例中,我在“match_goals”列进行汇总,该列对应于每场比赛的比赛进球数。
这些值现在可以根据国家和城市进行分组。这些列作为字符串列表传递给 pivot table 方法的 index 参数,以创建多序列索引。然后,我选择希望对分组数据运行的聚合函数。这里,我将一个列表传递给 aggfunc 参数,它给出了分组数据的计数和平均值。
This data output requires some sorting, but shows how simply the data can be summarised
4.整理
-当存在多索引列时,使用元组通过 sort_values 指定。
现在,数据已经根据国家和城市进行了分组,以获得平均比赛进球数和比赛次数,我可以对数据进行排序,使其更易于理解。此外,我可以使用 Pandas 的一行程序来可视化数据。
我使用 sort_values 方法,但是更重要的是,要按比赛进球得分排序,我需要传入一个 tuple。我将 ascending 参数设置为 False,从最高平均匹配目标到最低平均匹配目标对数据进行排序。在这里,巴西的阿雷格里港似乎举办了 2014 年巴西世界杯最具娱乐性的比赛。
Porto Alegre, the best place to have watched a FIFA World Cup match?
5.测绘
-记得导入 matplotlib。
要通过平均匹配得分来绘制这些排序值,我只需在绘图方法中为 y 参数指定一个元组。元组中的第一个元素是最外面的列索引值,后面是内部列索引,如下所示。为了生成垂直条形图,我将 bar 作为参数传递给 kind 参数。
Certain version of the Jupyter Notebook may require the cell magic %matplotlib inline command, so I have included it in this example.
6.get_group 方法
为了利用 get_group 方法,我首先在最初引入的原始足球数据帧中创建锦标赛列的 groupby 对象。我给这个 groupby 对象分配了一个变量名‘锦标赛’。python len 函数和 nunique series 方法告诉我,在原始足球数据帧中有超过 40,000 行,但只有 109 个独特的比赛。
我现在在变量锦标赛上使用 get_group 方法,该方法指向 groupby 对象以返回一个数据帧,其中只有“FIFA World Cup”被列为锦标赛类型。在原始数据帧的 40839 行中,有 900 行对应于 FIFA 世界杯数据。
我现在可以使用这个新的数据帧(我称之为 fifa ),并在其上执行任何操作。例如,我可以按国家分组来确定比赛进球的平均数,如下面的代码片段所示。
get_group 方法在获取新的数据帧时非常好用。我同样可以编写 tournament . get(' Copa America '),从原始足球数据帧中获取与该锦标赛对应的所有行。
To produce this output I have method chained, and ended with the head method. This explains why only 5 horizontal bar columns are shown.
7.单个列上的多个聚合函数。
通常需要对数据帧中的单个列执行多个聚合函数。在给出的例子中,我想确定每一个举办世界杯比赛的国家的记录数量,平均,最小和最大比赛进球得分。
为了做到这一点,我创建了一个 groupby 对象,并传递了 agg 方法(一个字典),其中键表示列,值表示我希望执行的聚合函数。如果我想对这个输出进行排序,就必须将一个元组传递给 sort_values 方法,其中第一个元素是列,第二个元素是我想要排序的聚合函数。
有趣的是,瑞士的一场世界杯比赛似乎上演了一场 12 球的惊悚片!瑞士也拥有最多的平均比赛进球数,平均每场比赛超过 5 个!对于感兴趣的人,我确实在 1954 年 T2 世界杯上检查了这些结果,因为结果甚至让我吃惊!
The output is sorted by the ‘mean’ aggregation function and the tail is shown, which defaults to the last 5 rows.
8.pd.cut 创建类别
最后,为了包含,可以方便地使用 pd.cut 方法将数据分类到用户定义的箱中。对于这个例子,我已经为那些离群游戏创建了一系列 4 个容器,-1 对 1 目标(第一个数字是唯一的,因此我不能从 0 开始容器),1-3 目标,3-5 目标和 5-13 目标!
然后,我给每个 bin 一个相应的标签名,并创建一个名为“goal_category”的新系列。用于内部验证的随机抽样确认了色谱柱类别的正确分配。我想运行的最后一个检查是检查我的新列中是否有任何丢失的数据,(null 值/NaN)值。我通过在我创建的新系列上直接调用 isna()方法来实现这一点,这确认了没有丢失数据。
Random sampling for internal verification confirms that the column categories are correctly assigned
快速小结
本文展示了各种有用的方法及其参数,可以直观地用来研究数据集。有多种方法可以实现每个步骤,但是我经常坚持使用所示的方法来提高可读性。
使用朴素贝叶斯挖掘“81%的‘嫌疑人’被 Met 的警方面部识别技术标记为无辜”
原文:https://towardsdatascience.com/81-of-suspects-flagged-by-met-s-police-facial-recognition-technology-innocent-independent-5d01be43649d?source=collection_archive---------16-----------------------
天空新闻:伦敦
Photo by Daniel Lincoln on Unsplash
最近我在我的朴素贝叶斯帖子中写道“人群中疾病的发病率是许多人忽视的关键变量”。
今天在浏览新闻时,我偶然看到了天空新闻的文章,并注意到他们已经落入了这个陷阱。
研究人员发现这个有争议的系统 81%是不准确的
嫌疑人在人群中的出现率是一个关键变量,而天空新闻却忽略了这个变量
这是为什么呢?让我们试着改变人群中嫌疑人的发生率,看看为什么它如此重要。
**System 1**: Randomly tosses a coin to assess guilt, accuses 50%
**System 2**: Error rate of 1 in 1,000**Crowd A**: 32,000 suspects; 0 innocent people
**Crowd B:** 0 suspects; 32,000 innocent people
哪个系统比较好?
**System 1** on **Crowd A** - 16000 suspects; 100% accurate!
**System 2** on **Crowd B** - 32 mistakes; 100% inaccurate!
人群中嫌疑人的发生率有很大的不同。天空新闻忽略了人群组成,只测量准确性,因此通过这种方法系统 1 的硬币投掷获胜。
因此,让我们试着将我之前的朴素贝叶斯文章中的理论引入到这个现实世界的例子中。
首先,我们需要从这句话开始:
他们发现,在 42 个匹配中,只有 8 个被证实是正确的——错误率为 81%。42 人中有 4 人因为被人群吸收,一直没有找到,所以无法验证是否匹配。
数学很简单:
但是“42 人中有 4 人是永远找不到的人”所以不知道为什么会被统计。我们不知道这四个是不正确的,正确的还是混合的。在我看来,这些例子需要被丢弃,留给我们 38 个匹配中的 8 个或者 79%不正确,但是我离题了。
我们需要关于系统性能的更多细节。在文章中我们可以找到一个警队误差估计为千分之一:
该部队坚称,他们的技术只会在千分之一的情况下出错——但他们使用了不同的测量方法来得出这一结论。
因为他们引用了一个数字。没有出现假阴性/阳性,所以我们假设两者是一样的。根据贝叶斯理论,这些数字是什么?尽管我不同意,我还是会用他们的 19%或 0.19:
TP = True Positive = 0.999
FP = False Negative = 0.001 P(B ∣ A) P(A)
P(A ∣ B) = ──────────────
P(B)
A = Suspect
B = Positive Neoface matchP(A ∣ B) = Probability a person is a suspect given a match = 0.19
P(B ∣ A) = Probability of a match given a suspect = TP = 0.999
P(A) = Probability of a person in the crowd being a criminal
P(B) = Probability of a Neoface match = FP × (1-P(A)) + TP × P(A)
插入公式和数值,求解 P(A),用铅笔算出来(绝对不用 Wolfram Alpha )你得到:
19/80938
或者说 4000 分之一。这是对随机人群中被通缉嫌疑人数量的合理估计吗?英国的监狱人口是千分之一。这使得警方已知的嫌疑人数量与囚犯数量处于同一数量级,但却少了 4 倍。似乎很合理。
让我们对 32,000 人的人群进行一次健全性检查,我们估计 4000 人中有 1 人是嫌疑人,并且该系统(据称)在检测他们方面有 99.9%的可靠性。所以 8 个嫌疑犯中有 8 个被发现了。它还(声称)在拒绝非嫌疑人方面有 99.9%的可靠性,因此 31,992 个非嫌疑人中的 32 个将被错误地检测到。让我们扩展一下前面的例子:
**System 1**: Randomly tosses a coin to assess guilt, accuses 50%
**System 2**: Error rate of 1 in 1,000**Crowd A**: 32,000 suspects; 0 innocent people
**Crowd B:** 0 suspects; 32,000 innocent people
**Crowd C**: 8 suspects; 31,992 innocent people**System 1** on **Crowd A** - 16000 suspects; 100% accurate!
**System 2** on **Crowd B** - 32 mistakes; 100% inaccurate!
**System 2** on **Crowd C** - 8 suspects, 32 mistakes; 80% inaccurate!
我们兜了一圈,又回到了 80%不准确的头条数字。所以下面的事情可以同时成立:
- 该系统的假阴性和假阳性率为 0.1%
- 在 32000 人的人群中,40%或 80%的人会被错误标记
如果在随机人群中以 4000 分之一的概率出现嫌疑人,以上两件事都可能成立。
人群中嫌疑人的发生率是一个关键变量
在文章的后面,我们发现了以下内容:
Met 更喜欢通过将成功和不成功的匹配与面部识别系统处理的面部总数进行比较来测量准确性。根据这一指标,错误率仅为 0.1%。
这并不奇怪,也很合理。在伦敦,随机人群中嫌疑人的频率可能极低,因此,即使是高性能的面部检测系统对那些没有受过贝叶斯定理教育的人来说也表现不佳。
自然,机器学习研究人员已经发现了衡量表现的这个问题,并通过混合使用精度、Recall 等人的衡量标准解决了这个问题,但 F1 分数为我们提供了一个很好的单一衡量标准:
F1 Score
2TP 2 × 0.999
F1 = ───────────── = ───────────────────────── = 0.999
2TP + FP + FN 2 × 0.999 + 0.001 + 0.001
最大可能的 F1 分数是 1,因此这是一个高性能的系统,但当试图检测大海捞针或随机人群中的嫌疑人时,您仍然会遇到很多误报。这是一项艰巨的任务。
我看了半打新闻来源,但只发现同样的故事重复,没有关键的分析。
天空新闻 卫报 ABC 新闻 布莱巴特 麻省理工科技评论 镜报
9 本数据科学相关书籍向圣诞老人索要圣诞礼物
原文:https://towardsdatascience.com/9-data-science-related-books-to-ask-santa-for-christmas-37a1036478e9?source=collection_archive---------9-----------------------
Background source: fevzizirhlioglu at Pixabay — free stock images
我最喜欢的几本书的汇编。
本周,我打算上传一个关于对分类变量进行适当编码的重要性的故事,但鉴于我们非常非常非常接近圣诞节,我认为删除一些关于我在这一年中发现的书籍的内容是一个好主意,我自己也会喜欢收到这些书籍作为礼物。
这些建议将分为以下几类:
- 非技术书籍
- 技术书籍
- 数据可视化书籍
你会发现每种都有 3 个,希望我会给你一些惊喜。
非技术书籍
裸统计 —评分:5 分中的 4 分
尽管有些章节可能过于基础,但 Charles Wheelan 带领我们浏览了许多我们在日常生活中经常使用和提到的东西,展示了所有这些概念的经典错误和良好实践。如果你正在学习,但还没有在这个领域工作,获取一些技术概念的真实例子也很有趣。
关于它的更多信息:
曾经被认为乏味的统计学领域正在迅速演变成一门学科,谷歌首席经济学家哈尔·瓦里安称之为“性感”。从击球率和政治民意调查到游戏节目和医学研究,统计学在现实世界中的应用继续突飞猛进。怎样才能抓住在标准化考试中作弊的学校?网飞怎么知道你会喜欢哪部电影?是什么导致了自闭症发病率的上升?正如畅销书作家查尔斯·惠兰在《赤裸裸的统计》中向我们展示的那样,正确的数据和一些精心挑选的统计工具可以帮助我们回答这些问题以及更多问题。
来源:http://goodreads.com/
赖以生存的算法 —评分:4.5 分(满分 5 分)
开始时有点慢,有时甚至有点重复,但之后有一些真正令人惊叹的章节,这是一本你可能必须读几遍才能完全理解的书。对我来说,它给了我日常生活和工作的工具,也给了我完成这本书后进一步阅读的问题和灵感。
关于它的更多信息:
我们所有的生活都受到有限的空间和时间的限制,这些限制会产生一系列特殊的问题。在一天或一生中,我们应该做什么,或不做什么?我们应该接受多大程度的混乱?什么样的新活动和熟悉的最爱的平衡是最有成就感的?这些似乎是人类独有的困境,但事实并非如此:计算机也面临同样的限制,因此计算机科学家几十年来一直在努力解决他们版本的此类问题。他们找到的解决方案有很多值得我们学习的地方。
来源:http://goodreads.com
隐形女性:为男性设计的世界中的数据偏差 —评分:5 分
正如我的一个朋友对我说的那样:不要因为它是“关于女人”的就放弃,因为那意味着它也是关于男人的!我还没有完成这本书,但迄今为止,它已经显示出惊人的。Caroline Criado-Pérez 所做的研究确实令人印象深刻,它揭示了一个我们都应该处理的问题的真实事实。
关于它的更多信息:
想象一下这样一个世界,你的手机对你的手来说太大了,你的医生开了一种不适合你身体的药,在车祸中你受重伤的可能性增加了 47%,你每周无数小时的工作没有得到认可或重视。如果这些听起来很熟悉,很可能你是个女人。
《看不见的女人》向我们展示了,在一个主要由男人建造并为男人服务的世界里,我们是如何系统地忽略了一半的人口。它暴露了性别数据差距——这是我们知识中的一个差距,是对妇女的长期、系统歧视的根源,并造成了普遍但无形的偏见,对妇女的生活产生了深远的影响。
来源:http://goodreads.com
额外收获:如果你不想读完整本书,或者你只是想先睹为快,我的另一个朋友向我推荐了《99%隐形播客中的一集,他们在那里采访了作者。
技术书籍
使用 Python 进行深度学习 —评分:4 分(满分 5 分)
爱 Python?想了解更多关于深度学习的知识?Francois Chollet 是最广泛使用的库之一 Keras 的作者。这本书从背后的直觉,到概念的实际应用,展示例子,让读者享受。
关于它的更多信息:
深度学习适用于越来越多的人工智能问题,如图像分类、语音识别、文本分类、问答、文本到语音和光学字符识别。这是脸书和谷歌的照片标签系统、无人驾驶汽车、智能手机上的语音识别系统等等背后的技术。特别是,深度学习擅长解决机器感知问题:理解图像数据、视频数据或声音数据的内容。这里有一个简单的例子:假设您有一个很大的图像集合,并且您想要与每个图像相关联的标签,例如,“狗”、“猫”等。深度学习可以让你创建一个理解如何将这种标签映射到图像的系统,只从例子中学习。该系统可以应用于新的图像,自动完成照片标记的任务。深度学习模型只需要输入任务的示例,就可以开始在新数据上生成有用的结果。
来源:http://goodreads.com
百页机器学习书 —评分 5 分
我开始在网上零零碎碎地阅读这本书,每次我需要更好地理解一个概念,但发现它非常好,清晰和有帮助,最近决定买印刷版本放在家里。它贯穿了机器学习中所有最重要的概念和算法。从技术和非技术的角度解释它们是如何工作的。
关于它的更多信息:
监督和非监督学习、支持向量机、神经网络、集成方法、梯度下降、聚类分析和降维、自动编码器和转移学习、特征工程和超参数调整!数学,直觉,插图,都在短短一百页里!
来源:http://themlbook.com/
额外收获:这本书有自己的网页,你可以找到不同的格式选项,以及不同人的评论和意见。
概率:对于热情的初学者 —评分:4 分(满分 5 分)
对自己的概率知识和技能感到有些生疏?那么这本书是给你的。它以一种非常友好的方式通过所有最重要的主题,充满了例子和解决的问题。重温概念,如组合学,概率规则,贝叶斯定理,期望值,方差,概率密度,共同分布,大数定律,中心极限定理,相关性和回归。关于这本书,你实际上没什么需要知道的。一本在家里就放在身边的方便的书。
数据可视化书籍
我发现数据可视化是数据科学如此重要的一部分,以至于不久前我发表了一篇文章,名为:'改善你绘图的 10 个技巧。因为在现实生活的数据科学中,绘图确实很重要。在那篇文章中,我写了一点为什么我认为数据可视化如此重要,但是如果你有兴趣阅读更多关于它的内容并提高你的理解和技能,那么接下来的书肯定会帮助你实现这一点。
好图表 —评分:4.5 分(满分 5 分)
作为一本百页的机器学习书,我首先在网上找到了这本书,读了一些章节,并决定买下来放在家里。对任何图书馆来说都是一个很好的补充,不仅因为这是一本设计精美的书,还因为这是一本读起来非常愉快的书。
关于它的更多信息:
一个好的视觉化可以比任何其他形式的交流更有力地交流信息和想法的本质和潜在影响。(……)制作好的图表正迅速成为经理们必备的技能。如果你不这样做,其他经理也会这样做,他们会因此受到关注,并因对公司的成功做出贡献而受到表扬。在好的图表中,dataviz maven Scott Berinato 为可视化如何工作以及如何使用这种新语言来打动和说服提供了重要的指导。今天的 Dataviz 相当于 20 世纪 80 年代早期的电子表格和文字处理器,正处于改变我们工作方式的尖端。Berinato 展示了一个系统,用于通过对话、草图和原型制作过程进行视觉思考和构建更好的图表。
来源:http://goodreads.com
量化信息的直观显示 —评分:4 分,共 5 分
不像好的图表那样吸引眼球,但内容极其丰富。这本书于 1983 年首次出版,在一段时间内,它一直是数据可视化的圣经。虽然现在这本书里的一些东西确实过时了,但是它第一次出版了你今天可能正在使用的概念和工具。
关于它的更多信息:
T 他关于统计图形、图表、表格的经典著作。数据图形设计的理论和实践,250 幅最好的(和一些最差的)统计图形的插图,详细分析了如何显示精确、有效、快速分析的数据。高分辨率显示器的设计,小倍数。编辑和改进图形。数据-油墨比率。时间序列,关系图,数据图,多元设计。图形欺骗的检测:设计变化与数据变化。欺骗的来源。美学和数据图形显示。
来源:http://goodreads.com
信息很美 —评分:4.5 分(满分 5 分)
这是我的一个朋友给我的推荐,所以尽管我不能给你我对这本书的看法,我还是把它的完整描述留在下面:
每一天,每一小时,每一分钟,我们都被来自电视,报纸,互联网的信息轰炸,我们沉浸在其中。我们需要一种与之相关的方式。David McCandless 和他令人惊叹的信息图表,以简单、优雅的方式与过于复杂或抽象的信息进行交互,除了视觉以外,无法掌握任何方式。McCandless 创造了视觉上令人惊叹的展示,将事实与它们的联系、上下文和关系融合在一起,使信息变得有意义、有趣和美丽。他的天才不仅在于寻找展示结果的新方法,还在于寻找新方法来令人兴奋地组合数据集。
《知识是美丽的》是可视化数据世界的迷人旋转,所有这些都带有大卫·麦坎德莱斯突破边界的标志性风格。畅销书《视觉杂集》( Visual Miscellaneum)《知识是美丽的》( Knowledge is Beautiful)引人入胜的后续作品,对世界及其历史进行了更深入、更广泛的审视,页面之间有了更多的联系,对原因和后果进行了更深入的探索,以及更具包容性的全球视角。《知识是美丽的》( Knowledge is Beautiful)的一部分内容来自 McCandless 的国际追随者,它从历史和政治、科学事实、文学流等方面对关键问题进行了革命性和民主的审视。
来源:http://goodreads.com
嗯,我想这就够了,至少对圣诞节来说。如果你确实购买并阅读了其中的任何一本书,或者如果你过去已经这样做了,请给我留下你自己的评论。我很想听听你的想法!
如果你喜欢这个故事,可以看看我的其他一些例子,比如我在训练测试中犯的 6 个业余错误或者5 分钟内抓取网页。所有这些都可以在我的档案中找到。
还有如果你想直接在你的邮箱里收到我的最新文章,只需 订阅我的简讯 😃
中号见!
2021 年你不能错过的 9 个数据可视化工具
原文:https://towardsdatascience.com/9-data-visualization-tools-that-you-cannot-miss-in-2019-3ff23222a927?source=collection_archive---------0-----------------------
在数据科学领域,数据可视化无疑是当今的热门词汇。无论你想分析什么数据,做数据可视化似乎都是必经的一步。但是很多人对数据可视化没有一个具体的概念,也不知道如何实现。因此,今天我将带您了解数据可视化的定义、概念、实施流程和工具。
1。 什么是数据可视化?
科学可视化、信息可视化和可视化分析通常被视为可视化的三个主要分支。由这三个分支结合而成的新学科“数据可视化”是可视化研究领域的新起点。
广义数据可视化涉及各种学科,如信息技术、自然科学、统计分析、图形、交互和地理信息。
1.1 科学可视化
科学可视化是科学中一个跨学科的研究和应用领域,主要研究三维现象的可视化,如建筑、气象、医学或生物系统。它的目的是用图形说明科学数据,使科学家能够理解、解释和收集数据中的模式。
1.2 信息可视化
信息可视化是对抽象数据的交互式视觉表示的研究,以增强人类的认知。抽象数据包括数字和非数字数据,如地理信息和文本。直方图、趋势图、流程图、树形图等图形都属于信息可视化,这些图形的设计将抽象的概念转化为可视化的信息。
1.3 视觉分析
视觉分析是随着科学可视化和信息可视化的发展而发展起来的一个新领域,其重点是通过交互式视觉界面进行分析推理。
From FineReport
2。 我们为什么需要数据可视化?
人类通过视觉获得的信息量远远超过其他器官。数据可视化是利用人类的自然技能来提高数据处理和组织效率。
可视化可以帮助我们处理更复杂的信息,增强记忆力。
大多数人对统计数据了解不多,基本的统计方法(均值、中位数、极差等。)都不符合人类的认知本性。最著名的例子之一就是安斯科姆的四重奏。按照统计学方法很难看到规律,但是数据可视化的时候规律就很清晰了。
3。 如何实现数据可视化?
从技术上讲,对数据可视化最简单的理解就是从数据空间到图形空间的映射。
一个经典的可视化实现过程是处理和过滤数据,将其转换为可表达的可视化形式,然后将其呈现在用户可见的视图中。
可视化技术栈
一般来说,专业的数据可视化工程师需要掌握以下技术栈:
基础数学:三角函数、线性代数、几何算法
图形学 : Canvas,SVG,WebGL,计算图形学,图论
工程算法:基础算法、统计算法、常用布局算法
数据分析:数据清理、统计、数据建模
设计美学:设计原则、审美、色彩、交互、认知
视觉基础:视觉编码、视觉分析、图形交互
可视化解决方案:图表的正确使用,常见业务场景的可视化
4。 常用数据可视化工具
一般来说,学术界用的是 R 语言,ggplot2,Python。普通用户最熟悉的工具就是 Excel。商业产品有 Tableau、FineReport、Power BI 等。
1)D3
D3.js 是一个基于数据操作文档的 JavaScript 库。D3 结合了强大的可视化组件和数据驱动的 DOM 操作方法。
评测 : D3 具有强大的 SVG 运算能力。它可以很容易地将数据映射到 SVG 属性,并且它集成了大量的数据处理、布局算法和计算图形的工具和方法。它有一个强大的社区和丰富的演示。但是,它的 API 太低级了。没有太多的可重用性,而学习和使用的成本很高。
2) 精细报告
FineReport 是一个用纯 Java 编写的企业级 web 报表工具,结合了数据可视化和数据录入。它是基于“无代码开发”的概念设计的。通过 FineReport,用户可以制作复杂的报表和酷炫的仪表盘,并通过简单的拖放操作构建决策平台。
评测 : FineReport 可以直接连接各类数据库,定制各种复杂报表,酷炫仪表盘,方便快捷。界面类似于 Excel 的界面。它提供了 19 个类别,超过 50 种风格的自研 HTML5 图表,具有酷炫的 3D 和动态效果。最重要的是它的个人版完全免费。
3) 高图表
HighCharts 是一个用纯 JavaScript 编写的图表库,让用户可以轻松方便地向 web 应用程序添加交互式图表。这是网络上使用最广泛的图表工具,商业使用需要购买商业许可证。
评测:使用门槛很低。HighCharts 具有良好的兼容性,并且已经成熟,应用广泛。但是样式陈旧,很难展开图表。商业使用需要购买版权。
4)Echarts
Echarts 是百度数据可视化团队推出的企业级图表工具。它是一个纯 Javascript 图表库,可以在 PC 和移动设备上流畅运行,并且兼容当前大多数浏览器。
评测 : Echarts 拥有丰富的图表类型,涵盖了常规的统计图。但不如 Vega 等基于图形语法的图表库灵活,用户很难自定义一些复杂的关系图表。
5) 小叶
传单是一个用于移动设备的交互式地图的 JavaScript 库。它拥有大多数开发者需要的所有映射特性。
评测:可以专门针对地图应用,与移动的兼容性好。API 支持插件机制,但功能相对简单。用户需要具备二次开发能力。
6)织女星
Vega 是一组交互式图形语法,它定义了从数据到图形的映射规则、公共交互语法和公共图形元素。用户可以自由组合 Vega 语法来构建各种图表。
评测:Vega 完全基于 JSON 语法,提供了从数据到图形的映射规则,支持通用交互语法。但是语法设计复杂,使用和学习成本高。
7)deck . GL
deck.gl 是基于 WebGL 的可视化类库,用于大数据分析。它是由优步的可视化团队开发的。
评测 : deck.gl 侧重于 3D 地图可视化。内置地理信息可视化常见场景有很多。它支持大规模数据的可视化。但是用户需要有 WebGL 的知识,而且层扩展比较复杂。
8) 力量匕
Power BI 是一套业务分析工具,可以提供组织内部的洞察力。它可以连接数百个数据源,简化数据准备并提供即时分析。组织可以在 web 和移动设备上查看 Power BI 生成的报告。
评测 : Power BI 类似于 Excel 的桌面 BI 工具,而功能比 Excel 更强大。它支持多种数据源。价格不高。但它只能作为一个独立的 BI 工具,没有办法和现有系统集成。
9) 画面
Tableau 是一个可视化分析数据的商业智能工具。用户可以创建和分发交互式和可共享的仪表板,以图形和图表的形式描绘数据的趋势、变化和密度。Tableau 可以连接文件、关系数据源和大数据源来获取和处理数据。
评测 : Tableau 是桌面系统中最简单的商业智能工具。它不会强迫用户编写自定义代码。该软件允许数据混合和实时协作。但价格昂贵,在定制和售后服务方面表现不佳。
结论
数据可视化是一个涉及许多学科的巨大领域。正是由于这种跨学科的性质,可视化领域充满了活力和机遇。
您可能也会对…感兴趣
8 个最佳报告工具&改善您业务的软件
2021 年最受欢迎的 5 款商业智能工具
4 个参数查询功能,让您的数据可视化互动
制作销售仪表板的分步指南
新手如何设计酷炫的数据可视化?
通往成功数据产品的 9 个设计陷阱
原文:https://towardsdatascience.com/9-design-pitfalls-on-the-way-to-a-successful-data-product-6ea5a3e6842?source=collection_archive---------27-----------------------
The user has to do a lot of mental work in order to decode your data product. (Image credit: Evelyn Münster)
数据可视化产品是一个全新的领域,需要扩展的设计策略。
数据产品的用户界面的任务是使用户能够理解复杂性。任何想要构建需要与用户交流数据和复杂模型的数据产品的人都面临着一个特殊的挑战,这个挑战的难度出乎意料地高。
毕竟,数据产品不仅仅是另一种软件产品。85%的大数据和人工智能项目都失败了。原因?以我的经验,他们不是在技术上,而是在设计上。
我在 2010 年的第一个数据产品是一种在线营销的场景。它无情地失败了。从技术上来说,效果非常好。您可以连接任何数据源并配置自己的仪表板。从视觉上看,它看起来也很不错。但是几乎没有人想用它。
那确实使我沮丧。我想找出原因以及如何做得更好。我从事数据产品设计多年后的个人体会:成功的数据产品是可行的,如果你记住几件事。
那么,如何才能将成功的数据产品推向市场呢?答案与一种新的 UX 设计有很大关系。作为 UX 的设计师,我们正在处理几个传统软件产品通常没有的附加层:一个用户可能甚至不理解的非常复杂的系统,数据和数据可视化,可能是人工智能,最后但同样重要的是,一个完全不同类型的用户问题或要做的工作。
在开始设计数据 UX 之前,您应该问自己和您的团队以下 9 个问题。
1.你的产品到底解决了哪个用户问题?
指定类型根据用户需求或业务任务对数据产品进行分类:可操作的见解、绩效反馈循环、根本原因分析、知识创造和信任建立。这种情况下的本地化是有帮助的。上面的一些任务有非线性用户旅程,这需要新的 UX 方法。
您的数据产品的具体任务必须在一会儿就能让用户清楚地看到。
2.这个系统到底是什么样子的?
Don’t rely on the assumption that users already know everything to interpret the data correctly. (Image credit: Evelyn Münster)
好吧,数据背后的系统可能非常复杂。无论是化工厂的优化,手术室的程序标准化,还是一个家庭中异构设备的无缝交互:不仅整个项目团队必须有一个共同的理解,而且你的用户也需要一个足够准确和正确的心智模型。
不要依赖用户已经知道一切的假设来正确解释数据。心智模型的测试和训练是必不可少的。
3.数据质量有多好?
可悲但真实的是:数据不是事实。甚至衡量什么或收集什么数据的决定本身也是人的决定。通常,这仅仅取决于技术或法律上的可行性。通常只使用那些已经存在的数据。有时会有测量误差和失败。有时,统计转换和汇总是错误的、误导的或矛盾的。
另一个方面:在最罕见的情况下,真正需要的信息实际上是经过测量的。
假设你想衡量一所大学的教育质量。遗憾的是,这不可能直接实现。相反,你只能间接测量:最终成绩,或不及格率。然而,这些仅仅是可能表明学习质量的代表,但也可能是误导性的。数据相当模糊!
因此,数据质量必须反映在用户界面上。我们不希望用户盲目信任我们的应用程序,也不希望用户从根本上怀疑所有数据。一个好的数据用户界面会让用户产生一种知情的、至关重要的信任。
4.你的用户的图形能力和计算能力有多高?
数据可视化最终是在图形中编码的数据。读者必须首先对图表进行解码才能访问数据。这就是所谓的图形化。点、线、颜色、位置或长度是什么意思?读者是否理解不太熟悉的图表类型,如直方图或散点图?
一旦数据被解密,它必须被解释。有数字的用户有多好?对于这种数据产品,他们需要克服哪些统计挑战?
通过用户测试,确保您的目标群体能够解码并正确解释数据和可视化。
5.我需要什么样的详细程度?
用户需要知道多少细节才能了解情况,从噪音中检测出信号?平均值和总和足够了吗,分布会更好吗?哪些时间间隔适合做时间线?
你还应该记住汇总的数据通常过于抽象,无法与你自己的心智模型联系起来。不幸的是,“尽可能简单”太简单了。这是因为细节能够解释抽象的数据,而能够建立信任。另一方面,太多的细节会很快让人不知所措。
6.你在处理概率吗?
如果您想要交流的数据是基于预测、分类或样本,您应该警惕。询问数据科学家关于置信区间的问题,给她留下深刻印象。
天气应用的开发者似乎认为每个人都知道“60%的降雨概率”是什么意思。不幸的是,事实并非如此,因为概率很微妙,需要解释。
忽略所有不确定性的常见做法使得用户界面看似简单,但却很危险。这已经导致了许多误解和错误的决定。
7.设计团队里有数据可视化专家吗?
数据可视化的 UX 设计需要一套特殊的技能:数据 UX 设计人员的技能。从数据分析、数据设计工作流程、可视化工具和库到图表类型、调色板和数据故事——不一定是你作为 UX 设计师学到的东西。团队中有一个专家或者至少是一个触手可及的导师是件好事。
8.如何获得用户反馈?
一旦有了第一个原型,就应该通过用户测试来收集有价值的反馈。为此需要一个虚拟点击。但是,lorem ipsum 文本和虚拟数据并不特别适合数据产品。这是因为数据产品在功能和解决用户问题的方式方面通常是未知领域,即使对用户来说也是如此。
用户必须能够想象完成的应用程序将如何解决她的个人问题。只有这样,她才能评估价值主张并给出有用的反馈。
不连贯的随机数对于这个来说太抽象了。因此,所有的内容,尤其是数字和数据,都应该尽可能的真实和连贯。此外,通过点击虚拟物的交互路径应该讲述一个故事,例如一个问题是如何变得可见然后被解决的。因此,用户界面的许多元素将以优雅的方式不言自明。
9.用户界面能促进营销和销售吗?
如果用户界面清楚地传达了它是做什么的,过程是什么样的,它就有资格成为一份利润丰厚的兼职工作:它可以销售产品。有时候几乎无法用几句话来表达产品能做什么。尤其是如果还没有类似的已知产品。如果你是卖鞋的,在店门口放个牌子写着“鞋”就够了。大家都知道鞋子是什么,是做什么用的,怎么用。(这种情况下的重点是在竞争中脱颖而出。)
但是如果你想销售一个化工厂的预测维护系统,甚至客户的专家也不知道你的系统能做什么以及如何使用。但这正是一个做得好的用户界面能在一会儿时间内解释的。
我个人的结论
我们必须承认,数据产品是一个全新的领域。它们不仅仅是另一个软件产品,或者另一个商业智能仪表板。它也不仅仅是关于数据可视化。为了构建一个成功的数据产品,我们需要一个特殊的策略,一个先进的 UX 方法:数据 UX 设计。
想得到更多这样的数据设计内容?看看我的图表博士数据设计学院或者关注我的 LinkedIN 。
短短一个月,我从 Medium 博客中学到的 9 件事
原文:https://towardsdatascience.com/9-things-i-learned-from-blogging-on-medium-for-the-first-month-2bace214b814?source=collection_archive---------8-----------------------
为什么媒体是交流思想的好平台
Photo by Glenn Carstens-Peters on Unsplash
2019 年 9 月 5 日,我正式在 Medium 上写了我的第一个故事,今天差不多是我在 Medium 上的第一个月的尾声。在这一个月里,我发表了 10 个故事,获得了 24K 的浏览量,我的文章被阅读 11K 次,获得了 167 粉丝, 100 关注者。因为我把我所有的故事都放到了媒体合作伙伴计划中,我的故事的会员合约给了我134美元的报酬。我也成为了人工智能和教育的顶级编剧。这不多,但对我来说,这是非常令人鼓舞的。
It ain’t much …
现在数据已经出来了,我想说总体来说我第一个月感觉很积极。当然,这不是我第一次写博客,但这是我的故事第一次有如此大的影响力,为此,我感谢 Medium 和它的团队给我这个机会。我想和你们分享我一路走来学到的一些东西。我希望这能帮助那些也想开始在媒体上写作的人更快更顺利地开始。
质量!质量!质量!
在我开始在 Medium 上写作之前,我已经阅读 Medium 有一段时间了。我一直很欣赏它提供的高质量内容。内容相关性、组织、布局、编辑标准、漂亮的图像和应用程序用户界面,所有这些都意味着质量和,让在媒体上消费内容成为一种享受。现在,我在内容创作方面,这里的高标准也鼓励我尽可能地保持好的质量给我的读者。这包括但不限于:
校对我的文章(我使用语法和人工校对)
仔细挑选那些漂亮的、相关的、没有许可证的照片(不透明的图片是一个很好的来源,内置在 Medium 的编辑界面中)
考虑一个好的标题/副标题,既吸引人又不俗套
尽我所能创建我自己的 GIF 动画,为我的页面注入更多的“能量”。
交叉引用资源并在相关的地方嵌入视频,以提供更丰富的背景知识。(当然也包括我自己的文章😉)
充分利用 Medium 丰富的编辑和布局工具,像 emoji、' @ '、blockquote 等。让故事看起来不那么无聊,更有活力。
思考好的标签是多样化的,也是与增加接触相关的。
这个列表还可以更长,没有一个故事可以涵盖其中的每一项,但是在写作的时候记住这一点是非常有益的。我觉得这和我记下的课文一样重要。我总是努力让故事的质量尽我所能。这最终是尊重我自己的时间和我的读者的时间,我相信这就是媒体作为一个独特的媒体所促进和奖励的。
还有一点要注意的是,不要做得太过。经过一些润色之后,有时你永远不会觉得你的文章可以发表了。不要被分析麻痹了,点击发布按钮,把你的内容推给你的读者。你总是可以在以后改进它们。写作是一个旅程,而不是目的地。
善用媒体编辑
我猜你总是可以用你最喜欢的软件/应用程序来写,然后把它们导入到 Medium 中,但是我发现只在 Medium 的网站编辑器 UI 上写就足够令人愉快和高效了。有了几年的 UI/UX 经验,我可以说媒体编辑器设计得很好,因为它不碍事。这就是我们所说的'隐形设计。它只在你需要帮助的时候出现,当你专注于手头的任务时,它就会消失在背景中。该界面被设计为整洁,但在需要时功能强大。我发现熟悉编辑器所提供的东西真的让我的写作经历变得流畅和愉快。花些时间通读媒体的指南大有帮助。
数字不会说谎
作为一个和数字打交道多年的人,统计总是我最感兴趣的。我自己做了大量的数据可视化和仪表板设计工作,我发现 Medium 的统计页面非常干净,易于阅读。布局设计很漂亮,层次分明,最重要的数字在前面和中间,其他的都在背景中。唯一的抱怨就是在背景中隐藏更多的细节。这样,更懂数据的人可以挖掘得更深,普通的作者可以享受极简主义。也许那是另一个时代的另一篇文章。
我发现自己访问统计页面有点太多了,喜欢看数字一点点上升(请不要评判我)。你不必做同样的事情,但我鼓励你不时地访问统计页面,它让你知道每篇文章做得有多好,当你尝试不同的写作风格、新主题或社交媒体策略时,它提供了一个坚实的基准,所以你可以相应地调整。例如,当我试图大力推广我在脸书的文章时,我确实发现我从脸书来的访问量增加了很多,但仍然没有媒体策划的多。很有见地!这种对什么可行什么不可行的洞察显然是非常有价值的。
此外,对于 Chrome 用户,我建议安装一个名为“ Medium Enhanced Stats 的扩展,在统计页面上提供更好的 UI 和更多信息。
付费墙,还是不付费墙,这是个问题
这个争议比较大。很多人不喜欢付费墙。只要是付费墙,它就是坏的。不过,我对付费墙没什么感觉。只要你提供有价值的内容,作为一名作家获得报酬是非常合理的。这不亚于或更体面的任何其他业务。付费墙可能会降低你的影响力,但也会让你更加关注那些真正重视质量的人。至于 reach,我做了一些实验,发现 Medium 的 3 个免费付费故事实际上在大多数时候已经足够了。我在 Medium 上放了一篇免费文章和一篇付费文章,并在脸书推广。我看不出脸书的观点比两者有多大的不同。此外,Medium only 只负责策划付费墙后面的故事,而策划对扩大你的影响是巨大的。所以我最后把我所有的故事都放在付费墙后面,结果一点也不差。从我的文章中得到的报酬似乎不多,但它至少支付了我的媒体会员资格,这样我就可以自由地阅读所有伟大的内容。
你可以自己测试一下,如果你喜欢你的内容达到最大范围,那就尽一切办法把它设为免费内容。
顶级作家?顶级作家!
在我写了三四篇文章之后,其中的一篇得到了一些关注。当然不是病毒式的,但我的观点开始快速增长。它在一天内达到 2k,两天后,我收到一封来自 Medium 的电子邮件,说我现在是“人工智能”主题的顶级作家之一。我是多么的荣幸和卑微!我刚开始在媒体上写文章一个多星期,不到五篇文章,我已经成为我最关心的主题的顶级作家了!
一旦我从兴奋中稍微平静下来,我开始思考发生了什么以及为什么。当然,这是相当幸运的,我的一个故事得到了一些关注,或者被一些社交媒体推广。但这也表明了 Medium 独特的系统重视高质量、好内容,而不是你的业绩记录或品牌名称。因此,对于我和其他像我一样环保的人来说,流汗创作出伟大的内容实际上是一种优势:你将因为你的高质量工作而得到认可和奖励。虽然这个头衔不是永久的,但我认为如果我停止制作热门内容,它就会消失,但这很好。这是一种很好的压力,促使我写出更好的故事。
出版物事项
嗯,这是我第一次和出版物打交道。在我的第一个高质量的故事之后,数据科学的一个出版物找到我,问我是否想通过他们发表。在网上做了一些研究后,我发现出版对像我这样的新作家来说是有好处的,它可以增加我的影响力,还可以为我的写作提供一些建议等等。所以我欣然同意和他们一起发表我的一些故事。写了一些故事后,我觉得这本书确实帮助我引起了注意。我对其他更大的数据科学出版商做了一些研究,并开始向他们提交我的作品。
与不同的出版商出版实际上是可以的,我所做的是为了更严肃和重量级的文章,我会选择大出版商。对于更有趣和轻松的作品,我会提交给其他出版商,看看他们的反应如何。我仍处于“试错”过程中。我仍在探索与不同出版商的合作,一旦深入,我会分享更多的经验。
回应,而不是评论
我发现 Medium 的一个独特之处是响应系统。在 Medium 中,回复被视为‘第一世界公民’,这意味着它被视为一个故事。它将有自己的统计数据,人们可以在上面拍手,等等。正因为如此,我注意到人们真的在他们留下的回复上投入了更多的努力,导致了非常高质量的回复,这些回复经常启发我,或者指出我错过或错误的事情。我就是喜欢这个响应系统。它真的促进了高质量的交流和思想与观点的碰撞!
会员?算我一个!
媒体的会员费是固定的 $5 。它向你开放了整个媒体的内容,你可以自由地阅读它所提供的任何东西。对我来说,这完全值得。它不仅提高了我在写下我文章的第一个词之前做研究的能力(我说过 Medium 有高质量和相关内容吗?),这也使我能够与其他成员互动,并更深入地融入社区。
如何在媒介上赚钱
嗯,我可能没有资格谈论这个,毕竟我一个月前才加入 Medium。然而,我仍然想分享我对此的一些想法。因为你已经喜欢做的事情而得到回报的感觉真的很棒。我认为,支付系统是建立在“会员参与”的基础上的。越多的会员参与到你的内容中,他们的月会员费就越多。我认为这很公平,对吗?所以这意味着你会因为你感动人的深度和广度而得到回报。否则,人们不会与你接触,他们不会费心鼓掌、回应、强调等。这进一步鼓励作者写出真实的内容,只有当你真正表达你所写的内容时,人们才能感受到你。
结论
总的来说,我认为 Medium 以会员为基础、以质量为中心的在线出版模式确实发挥了一些作用。它充满了聪明勤奋的作者和好奇认真的读者。
它是一种媒介,通过高质量的内容、漂亮的界面和精心设计的系统将我们联系在一起。
欢迎任何反馈或建设性的批评。你可以在推特 @lymenlee 或者我的博客网站【wayofnumbers.com上找到我。
在 Pytorch 中训练快如闪电的神经网络的 9 个技巧
原文:https://towardsdatascience.com/9-tips-for-training-lightning-fast-neural-networks-in-pytorch-8e63a502f565?source=collection_archive---------4-----------------------
Don’t let this be your Neural Network (Image credit: Monsters U)
面对现实吧,你的模型很可能还停留在石器时代。我敢打赌,你仍然在使用 32 位精度或* GASP* 甚至可能只在单个 GPU 上训练。
😱.
我明白了,虽然有 99 个加速指南,但清单不是 1?(是的,那刚刚发生了)。好吧,把这看作是终极,一步一步的指导,确保你挤压所有的(GP-Use)😂你的模型之外。
这份指南从最简单到最大的 PITA 修改,你可以做出最大限度地利用你的网络。我将展示 Pytorch 代码的例子和相关的标志,你可以在 Pytorch-Lightning Trainer 中使用,以防你不想自己编写这些代码!
这本指南是给谁的?任何在 Pytorch 中从事非平凡深度学习模型工作的人,如工业研究人员、博士生、学者等。我们在这里讨论的模型可能需要你花多天时间来训练,甚至几周或几个月。
我们将涵盖(从最简单到最皮塔饼)
- 使用数据加载器。
- 数据加载器中的工作线程数。
- 批量大小。
- 累积的梯度。
- 保留图形。
- 转移到单个 GPU。
- 16 位混合精度训练。
- 移动到多个 GPU(模型复制)。
- 移动到多个 GPU 节点(8 个以上的 GPU)。
- 我的思考模型加速的技巧
py torch-闪电
你可以在 Pytorch 库 Pytorch-Lightning 中找到我在这里讨论的所有优化。Lightning 是 Pytorch 上的一个轻型包装器,它可以自动对研究人员进行培训,同时让他们完全控制关键的模型部件。查看本教程,获取更强大的示例。
Lightning 采用了最新的最佳实践,最大限度地减少了可能出错的地方。
我们将在这里为 MNIST 定义我们的照明模型,并使用训练器进行拟合。
1.数据加载器
这可能是最容易获得一些速度增益的地方。保存 h5py 或 numpy 文件来加速数据加载的日子已经一去不复返了(等等…你们不会这么做吧??).使用 Pytorch dataloader 加载图像数据很简单(对于 NLP 数据,查看 TorchText
在 lightning 中,你不需要指定训练循环,只需要定义数据加载器,训练器会在需要的时候调用它们。
2.数据加载器中的工作人员数量
加速的另一个神奇之处来自于允许批量并行加载。因此,您可以一次加载 nb_workers 批处理,而不是一次加载一个批处理。
3.批量
在开始下一个优化步骤之前,将批处理大小提高到 CPU-RAM 或 GPU-RAM 允许的最大值。
下一节将重点关注如何帮助减少内存占用,以便您可以继续增加批处理大小。
记住,你可能需要再次更新你的学习率。一个很好的经验法则是,如果你的批量加倍,学习速度也会加倍。
4.累积梯度
如果您的计算资源已经达到极限,并且您的批处理大小仍然太低(比如说 8),那么我们需要模拟一个更大的批处理大小用于梯度下降,以提供一个好的估计。
假设我们想要达到 128 的批量。然后,在执行单个优化器步骤之前,我们将执行 16 次向前和向后传递,批处理大小为 8。
在 lightning 中,这一切都是为你而做的。只需设置accumulate _ grad _ batches = 1。
5.保留图形
炸毁 RAM 的一个简单方法是不要释放指向计算图的指针,比如说……为了日志记录的目的存储您的损失
losses = []...
losses.append(loss)print(f'current loss: {torch.mean(losses)'})
上面的问题是损失还有图的副本。在这种情况下,调用。项()来释放它。
# bad
losses.append(loss)# good
losses.append(loss.item())
Lightning 特别注意确保它永远不会保留图形的副本。
6.单 GPU 训练
一旦你完成了前面的步骤,就该进入 GPU 培训了。GPU 上的培训将在许多 GPU 核心上并行化数学计算。您获得的加速取决于您使用的 GPU 类型。我推荐个人用的 2080Ti 和公司用的 V100。
乍一看,这似乎令人不知所措,但你真的只需要做两件事:1)将你的模型移动到 GPU,2)每当你通过它运行数据时,将数据放在 GPU 上。
如果你使用 Lightning,你不需要对你的代码做任何事情。只需设置训练器(GPU = 1)。
在 GPU 上进行训练时,需要注意的主要问题是限制 CPU 和 GPU 之间的传输次数。
# **expensive**
x = x.cuda(0)# **very** expensive
x = x.cpu()
x = x.cuda(0)
例如,如果内存不足,不要将数据移回 CPU 以节省内存。在采取这种方法之前,尝试用其他方法优化您的代码,或者在 GPU 之间进行分配。
另一件要注意的事情是调用强制 GPU 同步的操作。一个例子就是清除内存缓存。
# really bad idea. Stops all the GPUs until they all catch up
torch.cuda.empty_cache()
但是,如果您使用 Lightning,唯一可能出现问题的地方是当您定义 Lightning 模块时。闪电特别注意不要犯这种错误。
7.16 位精度
16 位精度是一个惊人的技巧,可以将内存占用减半。大多数模型都是使用 32 位精度数字进行训练的。然而,最近的研究发现,16 位的模型也能很好地工作。混合精度意味着对某些事情使用 16 位,但对权重等事情保持 32 位。
要在 Pytorch 中使用 16 位精度,请安装英伟达的 apex 库,并对您的模型进行这些更改。
amp 套餐会帮你搞定大部分事情。如果梯度爆炸或变为零,它甚至会缩放损失。
在 lightning 中,启用 16 位很简单,不需要修改模型中的任何内容,也不需要做我上面写的事情。设置训练器(精度=16) 。
8.移动到多个 GPU
现在,事情变得非常有趣了。有 3 个(可能更多?)多 GPU 训练的方法。
分批训练
A) Copy model on each GPU. B) Give each GPU a portion of the batch.
第一种方式应该叫做分批培训。这种策略将模型复制到每个 GPU 上,每个 GPU 获得一部分批次。
在 lightning 中,你可以增加你告诉教练的 GPU 数量,而不必做上述任何事情。
分割模型训练
Put different parts of the model on different GPUs. Batch moves sequentially
有时你的模型可能太大而不适合内存。例如,带有编码器和解码器的序列到序列模型在生成输出时可能会占用 20 GB 的 RAM。在这种情况下,我们希望将编码器和解码器放在不同的 GPU 上。
对于这种类型的训练,不要给闪电训练师任何 GPU。相反,把你自己的模块放到正确的 GPU 上的 LightningModule 中
混合两者
在上述情况下,编码器和解码器仍然可以从并行化每个 操作 中受益。我们现在可以变得更有创造力。
使用多个 GPU 时需要考虑的注意事项
- model.cuda()不会做任何事情,如果它已经在那个设备上的话。
- 始终将输入放在设备列表中的第一个设备上。
- 跨设备传输数据非常昂贵,请将此作为最后手段。
- 优化器和渐变将存储在 GPU 0 上。因此,GPU 0 上使用的内存可能会比其他内存大得多。
9.多节点 GPU 培训
Every GPU on every machine gets a copy of the model. Each machine gets a portion of the data and trains only on that portion. Each machine syncs gradients with the other.
如果你已经做到了这一步,你现在已经进入了训练 Imagenet 的领域!这没有您想象的那么难,但是可能需要更多关于您的计算集群的知识。这些说明假设您正在集群上使用 SLURM。
Pytorch 通过跨每个节点复制每个 GPU 上的模型并同步梯度,允许多节点训练。因此,每个模型在每个 GPU 上独立初始化,本质上在数据分区上独立训练,只是它们都从所有模型接收梯度更新。
在高层次上:
- 在每个 GPU 上初始化一个模型的副本(确保设置种子,使每个模型初始化为相同的权重,否则会失败)。****
- 将数据集切割成子集(使用分布式采样器)。每个 GPU 只在自己的小子集上训练。****
- 开着。backward()所有副本接收所有模型的渐变副本。这是模型之间唯一的一次交流。
Pytorch 有一个很好的抽象,叫做 DistributedDataParallel,可以帮你做到这一点。要使用 DDP,您需要做以下事情:
Pytorch 团队有一个不错的教程来看这个的全部细节。
然而,在 Lightning 中,这是为您提供的。只需设置节点数标志,剩下的事情就交给你了。
Lightning 还附带了一个 SlurmCluster 管理器,可以轻松地帮助您提交 SLURM 作业的正确细节(示例)。
10.奖金!在单个节点上进行更快的多 GPU 训练
事实证明,分布式数据并行比数据并行快得多,因为它执行的唯一通信是梯度同步。因此,一个好的方法是用它代替 DataParallel,即使是在单台机器上训练时
在 Lightning 中,这很容易通过将 distributed_backend 设置为 ddp 并设置 GPU 的数量来实现。
通过模型加速进行思考
虽然这个指南会给你一个提高网络速度的技巧列表,但是我会解释我是如何通过寻找瓶颈来思考的。
我将模型分成几个部分:
首先,我确保我的数据加载没有瓶颈。为此,我使用我描述的现有数据加载解决方案,但是如果没有一个适合您的需要,那么考虑离线处理并缓存到高性能数据存储中,比如 h5py。
接下来看看你在训练步骤中做了什么。确保你的向前传递是快速的,避免过多的计算,并尽量减少 CPU 和 GPU 之间的数据传输。最后,避免做降低 GPU 速度的事情(在本指南中讨论)
接下来,我尝试最大化我的批处理大小,这通常会受到 GPU 内存量的限制。这是一个关于跨 GPU 分布的游戏,同时最大限度地减少延迟,以有效地使用大批量(例如,在 Imagenet 上,我可能会尝试跨许多 GPU 获得 8,000+的有效批量。)
但是,您需要小心大批量。针对您的具体问题查阅文献,看看人们是如何解决的!
致谢
感谢 Jeff Johnson 带来的令人惊叹的 CUDA 洞察,感谢 Pytorch 团队帮助 DDP 工作(更不用说他们令人惊叹的框架和文档)。感谢我实验室成员的测试帮助(特别是辛乔恩·雷斯尼克)。
反向传播的 10 行证明
原文:https://towardsdatascience.com/a-10-line-proof-of-back-propagation-5a2cad1032c4?source=collection_archive---------18-----------------------
没有求和也没有索引的矢量证明。
Photo by Tim Marshall on Unsplash
TLDR
反向传播是深度学习的脊梁。虽然有大量关于这一主题的文献,但很少有人彻底解释反向传播所需的梯度公式(∂ 损耗 / ∂ W )从何而来。即使他们解释了,数学往往会变得很长,到处都是指数,因为问题的维度很高:你有一个样本数量的指数,一个层数的指数和一个每层神经元数量的指数。
所以每次我想更新我过去学到的机器学习概念时,我总是很难在不看教科书的情况下写出反向传播背后的数学。虽然我明白它是如何工作的,但我发现这些公式非常不直观,有时甚至令人困惑…
所以这篇文章的想法是用一种优雅的方式演示反向传播公式,只使用的矢量化演算:所以没有索引 i,j,k,… 并且根本没有求和∑! (我们将使用的唯一索引是表示层。)
介绍
假设我们有以下神经网络(NN)架构
NN with 2 hidden layers and an output of 3 classes
我们的神经网络有两个隐藏层和一个三类输出层。我们将对所有层使用 softmax 激活。
训练这个模型意味着最小化我们的损失函数,即交叉熵(对数损失)。由于我们有 3 个班,所以日志损失为:𝜉( Y 、 X 、 W₁ 、 W₂ 、 W₃ ) = 总和 [ Y ○ 日志(x₃)】
,其中:总和为所有"○"也被称为哈达玛产品。
X₀ 是一个 n×3 矩阵,n 是最小批量的大小。
w₀是一个 3×5 的矩阵。它具有从层 0 到层 1 的过渡的权重。 X₁ 是一个 n×5 矩阵。它表示第一层的数据转换。 W₁ 是一个 5×4 矩阵。它具有从第 1 层到第 2 层的过渡的权重。 X₂ 是一个 n×4 矩阵。它表示第二层的数据转换。 W₂ 是一个 4×3 矩阵。它具有从第 2 层到第 3 层过渡的权重。 X₃ 是一个 n×3 矩阵。它表示第三层的数据转换。 Y 是一个 n×3 矩阵,3 是类的个数。
基本上,本文的目标是演示下面的差分表达式:(★)
带着𝜹₂=y-x₃ 和 𝜹₁ = ( 𝜹₂。w₂ᐪ)○x₂○(1-x₂)
和 𝜹₀ = ( 𝜹₁。w₁ᐪ)○x₁○(1-x₁)。
和○为哈达玛产品。
和 : 为 Frobenius 产品********
这种差异特别有趣,因为它揭示了反向传播期间权重更新所需的所有梯度
因此,在每一步中,Wᵢ 更新如下:【wᵢ=wᵢ+𝛼xᵢᐪ𝜹ᵢ𝛼为学习率。***
如果你对如何找到(★)感兴趣,那么这篇文章就是为你准备的!
关键结果需要证明
1.与多项式回归的联系
实际上,如果你取我们网络的最后两层,它基本上是一个多项逻辑回归,X₂作为输入数据,X₃作为输出预测。
以 𝜎为 softmax 函数,我们可以写出 X₃ =𝜎( X₂W₂ 。
用 Z₂=X₂W₂,我们可以写成 X₃ =𝜎( Z₂ 。
这样损失可以写成: 𝜉 = 总和 [ Y ○ 日志(𝜎(z₂)]
所以如果我们同意这确实是一个多项逻辑回归问题,那么我们就有以下结果:
为了使这篇文章简短,我们不会深入研究如何计算这些梯度的细节。但是如果你对这个证明感兴趣,那么让我知道,我会试着写一篇关于它的文章。
另一个要注意的有趣的事情是,由于我们对所有层使用 softmax 激活,那么我们可以推断:
for i in 1,2,3
2.矩阵的微分函数
这一部分相当重要,因为它将为我们提供一种优雅的方式来揭示最终的表达(★)。
f:矩阵- >标量
我们假设 f 是一个函数,它取一个矩阵,输出一个标量。如果 f 是可微的,那么:
with X and D having the same shape
因此,f 的微分写为:
以“:”为 Frobenius 产品[a:b=trace(aᐪb)]。**
f:标量- >标量,按元素应用于矩阵
让我们假设 f 是一个简单的函数,它接受一个标量并输出一个标量。现在让我们用 F 来表示这个函数,它将 F 独立地应用于矩阵中的每个元素。如果 f 是可微的,那么:
with dF, dX and D having the same shape.
因此,f 的微分写为:
“○”是我们之前看到的 hadamard 产品。
3.Hadamard 和 Frobenius 产品的性质
设 A、B 和 C 是三个形状相同的矩阵。
- 哈达玛产品的特性:
除了矩阵之外,它与简单的标量乘法具有基本相同的性质。
可交换的A○B = B○A**
联想的A○(B○C)=(A○B)○C = A【A********
- Frobenius 产品的特性:
分配式超额加法A:(B+C)= A:B+A:C****
下一个性质特别有趣,可以通过用 trace 公式替换“:”运算符来简单证明。
两个产品的联合性能:
运算顺序:
“○”比“:”优先级高,两者都比矩阵乘法优先级低。”即:** .”>"○">":
由此,A:B○C . D = A:(B○(C . D))**
这两个运算符之间最重要的属性如下:
并且可以简单地通过用 trace 公式替换“:”操作符来演示。
反向传播公式的证明
1.区分损失
如果我们合并 1.a 和 2.a,我们有
由于 Z ₂ 是一个矩阵乘法,其区别如下:
因此
First 4 lines of the proof
我们现在有𝜉对 W₂和 X₂的 4 行证明。
2.区分隐藏层
现在让我们通过最后一个隐藏层反向传播。如果我们把 1.b 和 2.b 结合起来,我们得到:
这样𝜹₂w₂ᐪ:dx₂就变成了
Last 6 lines of the proof
现在我们有了𝜹₂w₂ᐪ:dx₂,共 6 行证明的微分。
把这个放回 d𝜉给了我们
原来其实就是这样。剩下的就是对剩下的层重复这个步骤。
通过对𝜹₁w₁ᐪ:dx₁所做的与我们对𝜹₂w₂ᐪ:dx₂所做的相同,我们得到:
3.把所有的放在一起
最后,把所有东西都放回 d𝜉,我们得到了最终的等式(★)
带着𝜹₂=y—x₃** 和 𝜹₁ = ( 𝜹₂。w₂ᐪ)○g₁=(𝜹₂。w₂ᐪ)○x₂○(1-x₂)
和 𝜹₀ = ( 𝜹₁。w₁ᐪ)○g₀=(𝜹₁。w₁ᐪ)○x₁○(1-x₁)******************
Tada!🎉
结论
就我个人而言,我发现这种证明更优雅,更容易从记忆中重现,而不需要看教科书。我希望你也是这样,我希望你喜欢这篇文章。
参考
**** [## 多项式逻辑回归
在统计学中,多项逻辑回归是一种分类方法,将逻辑回归推广到…
en.wikipedia.org](https://en.wikipedia.org/wiki/Multinomial_logistic_regression) [## Softmax 函数
在数学中,softmax 函数,也称为 softargmax 或归一化指数函数,[2] :198 是一个…
en.wikipedia.org](https://en.wikipedia.org/wiki/Softmax_function) [## 哈达玛乘积(矩阵)
在数学中,哈达玛积(也称为舒尔积或熵积)是一种二元运算…
en.wikipedia.org](https://en.wikipedia.org/wiki/Hadamard_product_(matrices)) [## Frobenius 内积
在数学中,Frobenius 内积是一种二元运算,它取两个矩阵并返回一个数。这是…
en.wikipedia.org](https://en.wikipedia.org/wiki/Frobenius_inner_product)****
将差分隐私融入深度学习模型的 5 步指南
原文:https://towardsdatascience.com/a-5-step-guide-on-incorporating-differential-privacy-into-your-deep-learning-models-7861c6c822c4?source=collection_archive---------19-----------------------
使用 PyTorch 和差分隐私对 MNIST 数字进行分类
Photo by Farzad Nazifi on Unsplash
介绍
到目前为止,我们都知道差分隐私的好处,它如何在保护个人隐私的同时仍然提供对大型数据集的准确查询结果。这篇文章将阐述如何将差分隐私应用于 MNIST 数字分类问题,并使用一种称为教师群体私人聚合(PATE)的技术对其进行分析。
方法学
首先,我们将私有数据分成 N 个集合(在本例中为 100 个),并在 N 个数据集的每一个上训练一个分类器。这些被称为师的量词。然后,我们将使用教师分类器来预测公共数据的标签。对于公共数据集中的每个图像,N 个分类器预测最多的标签将被认为是该图像的真实标签。
现在,使用老师分类器的预测作为我们公共数据的真实标签,我们将训练一个学生分类器,然后可以用来分类新的看不见的图像。
Figure 2: Overview of the approach: (1) an ensemble of teachers is trained on disjoint subsets of the sensitive data, (2) a student model is trained on public data labeled using the ensemble.
MNIST 训练数据将被视为私有数据,我们将在此基础上训练我们的教师模型。然后,通过组合教师模型的预测而获得的学生模型将在 MNIST 测试数据上被训练(90%的测试数据将用于训练模型,而剩余的 10%将用于测试其准确性)
好吧,但是隐私部分在哪里起作用?
深度学习模型有过度拟合训练数据的趋势。神经网络可以学习个人的特征,而不是学习一般特征,然后对手可以利用这些特征来获取个人的私人信息。
通过不直接在私人数据上训练学生模型,我们防止它直接从数据集中学习单个人的关键个人特征。取而代之的是,由教师模型学习的概括特征和趋势被用于训练学生。
然而,有一个小警告。如果图像的标签可以通过移除单个教师的预测来改变,对手可以将搜索范围缩小到该模型。
为了避免这种情况,我们在选择预测最多的标签作为公共数据的真实标签之前,向教师模型的预测添加随机的 拉普拉斯噪声 。通过这种方式,我们增加了一点随机性,并扭曲了最终结果,这样真正的标签就不会因为去掉一个老师而轻易改变。
使用 PyTorch 实现差分隐私
第一步:加载数据
从 torchvision 和导入 MNIST 数据,定义一个函数生成数据加载器。
**import** **torch**
**from** **torchvision** **import** datasets, transforms
**from** **torch.utils.data** **import** Subset
*# Transform the image to a tensor and normalize it*
transform = transforms.Compose([transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))])
*# Load the train and test data by using the transform*
train_data = datasets.MNIST(root='data', train=**True**, download=**True**, transform=transform)
test_data = datasets.MNIST(root='data', train=**False**, download=**True**, transform=transform)num_teachers = 100 *# Define the num of teachers*
batch_size = 32 *# Teacher batch size*
**def** get_data_loaders(train_data, num_teachers):
*""" Function to create data loaders for the Teacher classifier """*
teacher_loaders = []
data_size = len(train_data) // num_teachers
**for** i **in** range(data_size):
indices = list(range(i*data_size, (i+1)*data_size))
subset_data = Subset(train_data, indices)
loader = torch.utils.data.DataLoader(subset_data, batch_size=batch_size)
teacher_loaders.append(loader)
**return** teacher_loaders
teacher_loaders = get_data_loaders(train_data, num_teachers)
现在,通过如上所述分割 MNIST 测试集来生成学生训练和测试数据。
*# Create the public dataset by using 90% of the Test data as train #data and remaining 10% as test data.*student_train_data = Subset(test_data, list(range(9000)))
student_test_data = Subset(test_data, list(range(9000, 10000)))
student_train_loader = torch.utils.data.DataLoader(student_train_data, batch_size=batch_size)
student_test_loader = torch.utils.data.DataLoader(student_test_data, batch_size=batch_size)
步骤 2:定义和培训教师模型
定义一个简单的 CNN 来分类 MNIST 数字。
**import** **torch.nn** **as** **nn**
**import** **torch.nn.functional** **as** **F**
**import** **torch.optim** **as** **optim**
**class** **Classifier**(nn.Module):
*""" A Simple Feed Forward Neural Network.*
*A CNN can also be used for this problem*
*"""*
**def** __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
self.conv2_drop = nn.Dropout2d()
self.fc1 = nn.Linear(320, 50)
self.fc2 = nn.Linear(50, 10)
**def** forward(self, x):
x = F.relu(F.max_pool2d(self.conv1(x), 2))
x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
x = x.view(-1, 320)
x = F.relu(self.fc1(x))
x = F.dropout(x, training=self.training)
x = self.fc2(x)
**return** F.log_softmax(x)
现在定义训练和预测函数
**def** train(model, trainloader, criterion, optimizer, epochs=10):
*""" This function trains a single Classifier model """*
running_loss = 0
**for** e **in** range(epochs):
model.train()
**for** images, labels **in** trainloader:
optimizer.zero_grad()
output = model.forward(images)
loss = criterion(output, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()**def** predict(model, dataloader):
*""" This function predicts labels for a dataset*
*given the model and dataloader as inputs.*
*"""*
outputs = torch.zeros(0, dtype=torch.long)
model.eval()
**for** images, labels **in** dataloader:
output = model.forward(images)
ps = torch.argmax(torch.exp(output), dim=1)
outputs = torch.cat((outputs, ps))
**return** outputs**def** train_models(num_teachers):
*""" Trains *num_teacher* models (num_teachers being the number of teacher classifiers) """*
models = []
**for** i **in** range(num_teachers):
model = Classifier()
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
train(model, teacher_loaders[i], criterion, optimizer)
models.append(model)
**return** modelsmodels = train_models(num_teachers)
步骤 3:通过组合教师模型的预测来生成聚合的教师和学生标签。
现在,我们需要选择ε值,我们首先定义差分隐私的正式定义
这个定义并没有创造差异隐私,相反,它是一个查询 M 提供多少隐私的度量。具体来说,它是在数据库(x)和并行数据库(y)上运行查询 M 之间的比较。正如您所记得的,并行数据库被定义为与一个完整的数据库(x)相同,只是删除了一个条目/人。
因此,该定义指出,对于所有并行数据库,数据库(x)上的查询和数据库(y)上的相同查询之间的最大距离将是 e^epsilon,但有时该约束不适用于概率增量。因此,这个定理被称为“ε-δ”差分隐私。
我们应该增加多少噪音?
添加到查询输出中的噪声量是以下四个因素的函数:
- 噪声的类型(高斯/拉普拉斯)
- 查询/函数的敏感性
- 期望的ε
- 所需的增量(δ)
因此,对于我们添加的每种噪声,我们有不同的方法来计算添加多少,作为灵敏度、ε和δ的函数。我们将重点讨论拉普拉斯噪声。
拉普拉斯噪声根据“比例”参数 b 增加/减少。我们基于以下公式选择“b”。
b =敏感度(查询)/ε
换句话说,如果我们将 b 设置为这个值,那么我们知道我们将有一个隐私泄露的<= epsilon. Furthermore, the nice thing about Laplace is that it guarantees this with delta == 0. There are some tunings where we can have very low epsilon where delta is non-zero, but we’ll ignore them for now.
**import** **numpy** **as** **np**
epsilon = 0.2**def** aggregated_teacher(models, dataloader, epsilon):
*""" Take predictions from individual teacher model and*
*creates the true labels for the student after adding*
*laplacian noise to them*
*"""*
preds = torch.torch.zeros((len(models), 9000), dtype=torch.long)
**for** i, model **in** enumerate(models):
results = predict(model, dataloader)
preds[i] = results
labels = np.array([]).astype(int)
**for** image_preds **in** np.transpose(preds):
label_counts = np.bincount(image_preds, minlength=10)
beta = 1 / epsilon
**for** i **in** range(len(label_counts)):
label_counts[i] += np.random.laplace(0, beta, 1)
new_label = np.argmax(label_counts)
labels = np.append(labels, new_label)
**return** preds.numpy(), labelsteacher_models = models
preds, student_labels = aggregated_teacher(teacher_models, student_train_loader, epsilon)
Step 4: Create the Student model and train it using the labels generated in step 3.
**def** student_loader(student_train_loader, labels):
**for** i, (data, _) **in** enumerate(iter(student_train_loader)):
**yield** data, torch.from_numpy(labels[i*len(data): (i+1)*len(data)])student_model = Classifier()
criterion = nn.NLLLoss()
optimizer = optim.Adam(student_model.parameters(), lr=0.003)
epochs = 10
steps = 0
running_loss = 0
**for** e **in** range(epochs):
student_model.train()
train_loader = student_loader(student_train_loader, student_labels)
**for** images, labels **in** train_loader:
steps += 1
optimizer.zero_grad()
output = student_model.forward(images)
loss = criterion(output, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
**if** steps % 50 == 0:
test_loss = 0
accuracy = 0
student_model.eval()
**with** torch.no_grad():
**for** images, labels **in** student_test_loader:
log_ps = student_model(images)
test_loss += criterion(log_ps, labels).item()
*# Accuracy*
ps = torch.exp(log_ps)
top_p, top_class = ps.topk(1, dim=1)
equals = top_class == labels.view(*top_class.shape)
accuracy += torch.mean(equals.type(torch.FloatTensor))
student_model.train()
print("Epoch: **{}**/**{}**.. ".format(e+1, epochs),
"Training Loss: **{:.3f}**.. ".format(running_loss/len(student_train_loader)),
"Test Loss: **{:.3f}**.. ".format(test_loss/len(student_test_loader)),
"Test Accuracy: **{:.3f}**".format(accuracy/len(student_test_loader)))
running_loss = 0
Here’s a snippet of the 训练损失和精度实现。
Epoch: 9/10.. Training Loss: 0.035.. Test Loss: 0.206.. Test Accuracy: 0.941
Epoch: 9/10.. Training Loss: 0.034.. Test Loss: 0.196.. Test Accuracy: 0.949
Epoch: 10/10.. Training Loss: 0.048.. Test Loss: 0.204.. Test Accuracy: 0.943
Epoch: 10/10.. Training Loss: 0.046.. Test Loss: 0.203.. Test Accuracy: 0.943
Epoch: 10/10.. Training Loss: 0.045.. Test Loss: 0.203.. Test Accuracy: 0.945
Epoch: 10/10.. Training Loss: 0.049.. Test Loss: 0.207.. Test Accuracy: 0.946
Epoch: 10/10.. Training Loss: 0.032.. Test Loss: 0.228.. Test Accuracy: 0.941
Epoch: 10/10.. Training Loss: 0.030.. Test Loss: 0.252.. Test Accuracy: 0.939
步骤 5:让我们对聚合教师生成的学生标签执行 PATE 分析
**from** **syft.frameworks.torch.differential_privacy** **import** pate
data_dep_eps, data_ind_eps = pate.perform_analysis(teacher_preds=preds, indices=student_labels, noise_eps=epsilon, delta=1e-5)
print("Data Independent Epsilon:", data_ind_eps)
print("Data Dependent Epsilon:", data_dep_eps)
输出:
Data Independent Epsilon: 1451.5129254649705
Data Dependent Epsilon: 4.34002697554237
pate.perform_analysis 方法返回两个值——一个与数据无关的ε和一个与数据相关的ε。数据相关的 epsilon 是通过查看教师之间的一致程度而获得的 epsilon 值。在某种程度上,PATE 分析奖励用户构建彼此一致的教师模型,因为泄漏信息和跟踪个人信息变得更加困难。
结论
使用 PATE 分析方法指导的学生-教师架构是一种将差分隐私引入深度学习模型的好方法。然而,差分隐私仍处于早期阶段,随着该领域研究的深入,将会开发出更复杂的方法来减少隐私-准确性之间的权衡,以及差分隐私仅在大型数据集上表现良好的缺点。
参考
[1] Dwork,c .和 Roth,A. 《差分隐私的算法基础》 (2014),理论计算机科学的基础和趋势,9(3–4),第 211–407 页。
[2] Abadi,Martin 等,具有差分隐私的深度学习 (2016),2016 年 ACM SIGSAC 计算机与通信安全会议论文集。ACM,2016。
[3]图 1,由法尔扎德·纳兹菲在 Unsplash 上拍摄的照片
[4]图 2,Nicolas Papernot 等人,PATE(2018)的可扩展私人学习,在 2018 年 ICLR 会议上作为会议论文发表
构建机器学习项目的 6 步现场指南
原文:https://towardsdatascience.com/a-6-step-field-guide-for-building-machine-learning-projects-6e4554f6e3a1?source=collection_archive---------2-----------------------
有数据,想知道如何用它来使用机器学习?读读这个。
I listened to Korn’s new album on repeat for 6-hours the other day and wrote out a list of things I think about when it comes to the modelling phase of machine learning projects. The whiteboard sums it up. Thank you Sam Bourke for the photo.
机器学习是广义的。媒体让它听起来像魔术。阅读这篇文章将改变这一点。它将向你概述机器学习可以用来解决的最常见的问题类型。同时给你一个框架来处理你未来的机器学习概念验证项目。
首先,我们将澄清一些定义。
机器学习、人工智能和数据科学有什么不同?
这三个主题可能很难理解,因为没有正式的定义。即使做了一年多的机器学习工程师,这个问题我也没有很好的答案。我会怀疑任何声称他们知道的人。
为了避免混淆,我们将保持简单。对于本文,您可以将机器学习视为在数据中寻找模式的过程,以了解更多信息或预测某种未来事件。
下面的步骤偏向于构建一些东西并观察它是如何工作的。边做边学。
下一个机器学习项目的 6 个步骤
机器学习管道可以分为三个主要步骤。数据收集、数据建模和部署。所有这些都相互影响。
你可以通过收集数据开始一个项目,建模,意识到你收集的数据很差,回去收集数据,再次建模,找到一个好的模型,部署它,发现它不起作用,制作另一个模型,部署它,发现它不起作用,再次回到数据收集。这是一个循环。
等等,模型是什么意思?部署是什么意思?我如何收集数据?
很棒的问题。
你如何收集数据将取决于你的问题。我们一会儿会看一些例子。但是一种方法可以是你的客户在电子表格中的购买。
建模是指使用机器学习算法在你收集的数据中寻找见解。
正常算法和机器学习算法有什么区别?
就像你最喜欢的鸡肉菜肴的烹饪食谱一样,一个普通的算法是一组如何将一组配料变成蜂蜜芥末酱的指令。
让机器学习算法与众不同的是,你不是有一套指令,而是从配料和准备好的最后一道菜开始。然后,机器学习算法会查看配料和最终的菜肴,并制定出一套指令。
有许多不同类型的机器学习算法,有些算法在不同的问题上表现得比其他算法更好。但前提仍然是,他们都有在数据中寻找模式或指令集的目标。
部署就是获取您的指令集并在应用程序中使用它。这个应用程序可以是任何东西,从向在线商店的客户推荐产品到医院试图更好地预测疾病的存在。
这些步骤的细节对于每个项目都是不同的。但是每一个的原理都是相似的。
本文主要关注数据建模。它假设你已经收集了数据,并希望用它来建立一个机器学习的概念证明。让我们来分析一下你可能会怎么做。
Machine learning projects can be broken into three steps, data collection, data modelling and deployment. This article focuses on steps within the data modelling phase and assumes you already have data. Full version on Whimsical.
- 问题定义 —我们试图解决什么业务问题?怎么把它表述成机器学习问题?
- 数据 —如果机器学习正在从数据中获得洞察力,我们有什么数据?如何匹配问题定义?我们的数据是结构化的还是非结构化的?静态还是流?
- 评价——什么定义了成功?一个 95%准确率的机器学习模型就足够好了吗?
- 特性 —我们的数据的哪些部分将用于我们的模型?我们已经知道的东西怎么会影响这个呢?
- 造型 —你该选择哪一款?怎么才能改善呢?怎么和其他车型比?
- 实验——我们还能尝试什么?我们部署的模型是否如我们预期的那样?根据我们的发现,其他步骤有什么变化?
让我们更深入地研究一下。
1.问题定义——将您的业务问题重新表述为机器学习问题
为了帮助决定您的企业是否可以使用机器学习,第一步是匹配您试图解决机器学习问题的业务问题。
机器学习的四种主要类型是监督学习、非监督学习、迁移学习和强化学习(也有半监督的,但为了简洁起见,我省略了它)。商业应用中最常用的三种是监督学习、非监督学习和迁移学习。
监督学习
监督学习之所以被称为监督学习,是因为你有数据和标签。机器学习算法试图学习数据中的什么模式导致了标签。受监督的部分发生在训练期间。如果算法猜错了标签,它会尝试自我纠正。
例如,如果你试图预测一个新病人的心脏病。你可能有 100 名病人的匿名医疗记录作为数据,他们是否有心脏病作为标签。
机器学习算法可以查看医疗记录(输入)和患者是否患有心脏病(输出),然后计算出医疗记录中的哪些模式会导致心脏病。
一旦你有了一个训练有素的算法,你就可以通过它传递一个新病人的医疗记录(输入),并预测他们是否患有心脏病(输出)。重要的是要记住这个预测是不确定的。它以概率的形式返回。
算法说,“根据我之前看到的,看起来这个新病人的医疗记录有 70%与心脏病患者一致。”
无监督学习
无监督学习就是你有数据但没有标签。这些数据可能是你的在线视频游戏商店顾客的购买历史。使用这些数据,您可能希望将相似的客户分组在一起,以便为他们提供专业的交易。你可以使用机器学习算法根据购买历史对你的客户进行分组。
检查完组后,您提供标签。可能有一群人对电脑游戏感兴趣,另一群人喜欢主机游戏,还有一群人只买打折的老游戏。这就是所谓的聚类。
这里需要记住的重要一点是,算法并没有提供这些标签。它发现了相似客户之间的模式,并利用你的领域知识,你提供了标签。
迁移学习
迁移学习是指获取现有机器学习模型学习到的信息,并根据自己的问题进行调整。
从头开始训练机器学习模型可能既昂贵又耗时。好消息是,你不必总是这样。当机器学习算法在一种数据中找到模式时,这些模式可以用于另一种类型的数据。
假设您是一家汽车保险公司,想要构建一个文本分类模型来分类提交车祸保险索赔的人是有过错(造成事故)还是没有过错(没有造成事故)。
你可以从一个现有的文本模型开始,这个模型已经阅读了整个维基百科,并且记住了不同单词之间的所有模式,例如,哪个单词更有可能一个接一个地出现。然后使用您的汽车保险索赔(数据)及其结果(标签),您可以调整现有的文本模型来解决您自己的问题。
如果机器学习可以用于你的业务,它很可能属于这三种学习类型之一。
但是让我们把它们进一步分解为分类、回归和推荐。
- 分类 —你想预测某样东西是一个东西还是另一个东西?比如一个客户会不会流失?或者病人有没有心脏病?注意,可以有两个以上的东西。两类称为二元分类,两类以上称为多类分类。多标签是指一个项目可以属于多个类别。
- 回归 —你想预测某个事物的具体数字吗?比如房子会卖多少钱?或者下个月会有多少客户访问你的网站?
- 推荐 —你想给某人推荐点什么吗?比如基于他们之前的购买来购买产品?或者基于他们的阅读历史来阅读的文章?
现在你知道了这些事情,你的下一步就是用机器学习的术语来定义你的业务问题。
让我们以之前的汽车保险为例。你每天会收到数千份索赔,你的员工会阅读这些索赔,并决定提交索赔的人是否有错。
但是现在,索赔的数量开始超过您的员工的处理速度。你有数以千计的过去索赔的例子,这些索赔被贴上有错或没有错的标签。
机器学习能有帮助吗?
你已经知道答案了。但是让我们看看。这个问题符合以上三个中的任何一个吗?分类回归还是推荐?
让我们换个说法。
我们是一家汽车保险公司,希望将收到的汽车保险索赔分为有过失或无过失。
看到关键词了吗?分类。
事实证明,这可能是一个机器学习分类问题。我说有可能是因为有可能行不通。
当把你的业务问题定义为机器学习问题时,从简单开始,多一句话就太多了。需要时增加复杂性。
2.数据——如果机器学习是从数据中获得洞察力,你有什么数据?
您拥有或需要收集的数据将取决于您想要解决的问题。
如果你已经有了数据,它很可能是两种形式之一。结构化或非结构化。在其中的每一个中,都有静态或流数据。
- 结构化数据 —想象一个由行和列组成的表格,一个客户交易的 Excel 电子表格,一个病人记录的数据库。列可以是数字的,如平均心率,分类的,如性别,或序数的,如胸痛强度。
- 非结构化数据 —任何不能立即转换为行列格式的数据,如图像、音频文件、自然语言文本等。
- 静态数据 —已有的历史数据,不太可能发生变化。你公司的客户购买历史就是一个很好的例子。
- 流数据 —不断更新的数据,旧记录可能会更改,新记录会不断添加。
有重叠的地方。
您的静态结构化信息表可能有包含自然语言文本和照片的列,并且会不断更新。
对于预测心脏病,一列可能是性别,另一列是平均心率,另一列是平均血压,另一列是胸痛强度。
对于保险索赔示例,一列可能是客户为索赔发送的文本,另一列可能是他们随文本一起发送的图像,最后一列是索赔的结果。该表每天都会更新新的索赔或旧索赔的变更结果。
Two examples of structured data with different kinds of data within it. Table 1.0 has numerical and categorical data. Table 2.0 has unstructured data with images and natural language text but is presented in a structured manner.
原则依然存在。你想利用你所拥有的数据来获得洞察力或预测某事。
对于监督学习,这包括使用特征变量来预测目标变量。用于预测心脏病的特征变量可以是性别,目标变量是患者是否患有心脏病。
Table 1.0 broken into ID column (yellow, not used for building machine learning model), feature variables (orange) and target variables (green). A machine learning model finds the patterns in the feature variables and predicts the target variables.
对于无监督学习,你不会有标签。但是你还是想找到模式。也就是说,将相似的样本组合在一起,并找出异常的样本。
对于迁移学习,你的问题仍然是一个监督学习问题,除非你利用机器学习算法从你自己的数据源以外的其他数据源学习的模式。
请记住,如果你使用客户数据来改善你的业务或为他们提供更好的服务,让他们知道是很重要的。这就是为什么你到处都能看到“这个网站使用 cookies”的弹出窗口。该网站利用你浏览网站的方式,很可能伴随着某种机器学习来改进他们的产品。
3.评估——成功的定义是什么?一个 95%准确率的机器学习模型就足够好了吗?
你已经用机器学习的术语定义了你的业务问题,并且你有数据。现在定义什么是成功。
分类、回归和推荐问题有不同的评价指标。你选择哪一个取决于你的目标。
为了使这个项目成功,无论某人是否有错,这个模型都需要达到 95%以上的准确率。
一个 95%准确的模型对于预测保险索赔中谁是错的听起来可能相当不错。但是对于预测心脏病,你可能想要更好的结果。
对于分类问题,你应该考虑的其他事情。
- 假阴性 —模型预测为阴性,实际为阳性。在某些情况下,比如垃圾邮件预测,漏报并不太令人担心。但如果自动驾驶汽车的计算机视觉系统预测有行人时没有行人,这就不好了。
- 假阳性 —模型预测为阳性,实际为阴性。预测某人有心脏病,而他们没有,这看起来似乎没问题。最好是安全的,对吗?如果这会对患者的生活方式产生负面影响,或者让他们接受他们并不需要的治疗计划,那就不会。
- 真阴性 —模型预测阴性,实际阴性。这很好。
- 真阳性 —模型预测阳性,实际阳性。这很好。
- 精度 —有多少比例的正面预测实际上是正确的?不产生假阳性的模型的精度为 1.0。
- 回忆 —实际阳性预测正确的比例是多少?不产生假阴性的模型的召回率为 1.0。
- F1 评分——精准与召回的结合。越接近 1.0 越好。
- 受试者工作特征(ROC)曲线&曲线下面积(AUC)—ROC 曲线是比较真阳性率和假阳性率的曲线图。AUC 指标是 ROC 曲线下的面积。预测 100%错误的模型的 AUC 为 0.0,预测 100%正确的模型的 AUC 为 1.0。
对于回归问题(你想要预测一个数字),你会想要最小化你的模型预测值和实际值之间的差异。如果你试图预测房子的售价,你会希望你的模型尽可能接近实际价格。为此,请使用梅或 RMSE。
- 平均绝对误差(MAE) —模型预测值与实际值之间的平均差值。
- 【均方根误差(RMSE)-模型预测值与实际值之间的平均平方差的平方根。
如果希望较大的误差更显著,请使用 RMSE。例如,预测一栋房子将以 300,000 美元而不是 200,000 美元出售,而价格下降 100,000 美元,这比价格下降 50,000 美元要糟糕两倍以上。或者说,如果损失 10 万美元比损失 5 万美元要糟糕两倍。
推荐问题更难在实验中检验。一种方法是把你的一部分数据藏起来。当您的模型建立后,使用它来预测隐藏数据的建议,并查看它是如何排列的。
假设你正试图在网上商店向顾客推荐产品。您有 2010 年至 2019 年的历史购买数据。你可以根据 2010 年至 2018 年的数据建立一个模型,然后用它来预测 2019 年的购买量。然后,这就变成了一个分类问题,因为你试图对某人是否有可能购买一件商品进行分类。
然而,传统的分类标准并不适合推荐问题。精准和召回没有排序的概念。
如果你的机器学习模型返回一个 10 条建议的列表,在你的网站上显示给客户,你会希望最好的被首先显示,对吗?
- Precision @ k(Precision up to k)—与常规精度相同,但是,您选择截止值 k。例如,精度为 5,意味着我们只关心前 5 个推荐。你可能有 10,000 个产品。但是你不能把它们都推荐给你的客户。
首先,你可能没有每一项的确切数字。但是知道你应该关注什么指标会让你知道如何评估你的机器学习项目。
4.要素-您的数据具有哪些要素,您可以使用哪些要素来构建模型?
并非所有的数据都是一样的。当你听到有人提到特性时,他们指的是数据中不同种类的数据。
三种主要类型的特征是分类的、连续的(或数字的)和衍生的。
- 分类特征 —非此即彼。例如,在我们的心脏病问题中,病人的性别。或者对于在线商店来说,不管是否有人已经购买。
- 连续(或数值)特征 —平均心率或登录次数等数值。
- 衍生特征 —从数据中创建的特征。通常被称为特征工程。特征工程是主题专家如何将他们的知识编码到数据中。您可以将登录的次数与时间戳结合起来,形成一个称为“自上次登录以来的时间”的特性。或者把日期从数字变成“是工作日(是)”和“是工作日(否)”。
文本、图像和几乎任何你能想象到的东西也可以成为一个特征。无论如何,在机器学习算法可以对它们建模之前,它们都被转换成数字。
谈到特性时,需要记住一些重要的事情。
- 在实验(训练)和生产(测试)期间保持相同 —机器学习模型应该在尽可能接近其在真实系统中的用途的特征上进行训练。
- 与主题专家合作 —你对这个问题已经了解多少,这对你使用什么功能有什么影响?让你的机器学习工程师和数据科学家知道这一点。
- 他们值得吗? —如果只有 10%的样本具有某个特性,是否值得将它整合到模型中?偏好覆盖面最广的功能。很多样本都有数据。
- 完美等于破碎 —如果你的模型实现了完美的性能,你很可能在某个地方有功能泄漏。这意味着你的模型训练的数据正被用来测试它。没有一种模式是完美的。
您可以使用特性来创建简单的基线度量。客户流失方面的主题专家可能知道某人有 80%的可能在 3 周不登录后取消他们的会员资格。
或者,知道房屋销售价格的房地产经纪人可能知道超过 5 间卧室和 4 间浴室的房屋售价超过 50 万美元。
这些都是简化的,不一定要精确。但这是你要用来看机器学习是否可以改进的。
5.建模——您应该选择哪种模型?怎么才能改善呢?怎么和其他车型比?
一旦你定义了你的问题,准备好你的数据,评估标准和特征,是时候建模了。
建模分为三个部分,选择一个模型,改进一个模型,和其他模型比较。
选择模型
选择模型时,您需要考虑可解释性和易于调试性、数据量、训练和预测限制。
- 可解释性和易于调试 —为什么一个模型要做出它所做的决定?如何修复这些错误?
- 数据量 —你有多少数据?这种情况会改变吗?
- 训练和预测的局限性——这个和上面有关系,你有多少时间和资源用于训练和预测?
要解决这些问题,从简单开始。最先进的模型很容易让人去接触。但是,如果它需要 10 倍的计算资源来训练,并且预测时间比评估指标提高 2%要长 5 倍,那么它可能不是最佳选择。
逻辑回归等线性模型通常比神经网络等更深入的模型更容易解释,训练速度非常快,预测速度也更快。
但很可能你的数据来自真实世界。来自真实世界的数据并不总是线性的。
然后呢?
决策树和梯度增强算法(花哨的词语,现在不重要的定义)的组合通常最适合结构化数据,如 Excel 表格和数据框架。查看随机森林、 XGBoost 和 CatBoost 。
神经网络等深度模型通常最适用于图像、音频文件和自然语言文本等非结构化数据。然而,代价是它们通常需要更长的训练时间,更难调试,预测时间也更长。但这并不意味着你不应该使用它们。
迁移学习是一种利用深度模型和线性模型的方法。它包括采用一个预先训练好的深度模型,并使用它学习到的模式作为你的线性模型的输入。这大大节省了训练时间,让你更快地进行实验。
我在哪里可以找到预先训练好的模特?
在 PyTorch hub 、 TensorFlow hub 、 model zoo 和 fast.ai 框架内都有预训练的模型。这是构建任何类型的概念证明的首选位置。
其他种类的模型呢?
为了建立概念证明,你不太可能必须建立自己的机器学习模型。人们已经为这些写了代码。
你要关注的是准备好你的输入和输出,使它们可以用于现有的模型。这意味着严格定义你的数据和标签,并理解你试图解决什么问题。
To begin with, your main job will be making sure your inputs (data) lines up with how an existing machine learning algorithm expects them. Your next goal will be making sure the outputs are aligned with your problem definition and if they meet your evaluation metric.
调整和改进模型
一个模型的第一个结果并不是最后一个。就像调整汽车一样,机器学习模型可以被调整以提高性能。
调整模型涉及改变超参数,如学习率或优化器。或者特定于模型的架构因素,例如随机森林的树的数量以及神经网络的层数和类型。
这些曾经是从业者必须手动调整的东西,但是现在越来越自动化了。并且应该尽可能地。
通过迁移学习使用一个预先训练好的模型通常会有额外的好处。
调整和改进模型的首要任务应该是再现性和效率。有人应该能够重现你为提高绩效所采取的步骤。因为你的主要瓶颈将是模型训练时间,而不是改进的新想法,你的努力应该致力于效率。
比较模型
把苹果比作苹果。
- 模型 1,根据数据 X 训练,根据数据 y 评估。
- 模型 2,根据数据 X 训练,根据数据 y 评估。
其中模型 1 和 2 可以改变,但数据 X 或数据 y 不能改变
6.实验——我们还能尝试什么?根据我们的发现,其他步骤有什么变化?我们部署的模型是否如我们预期的那样?
这一步涉及所有其他步骤。因为机器学习是一个高度迭代的过程,你需要确保你的实验是可行的。
你最大的目标应该是最小化离线实验和在线实验之间的时间。
离线实验是你的项目还没有面向客户时采取的步骤。在线实验发生在你的机器学习模型投入生产的时候。
所有的实验都应该在数据的不同部分进行。
- 训练数据集 —使用该数据集进行模型训练,你的数据的 70–80%是标准的。
- 验证/开发数据集 —使用该数据集进行模型调整,10–15%的数据是标准数据。
- 测试数据集 —使用该数据集进行模型测试和比较,10–15%的数据是标准数据。
这些数量可能会略有波动,这取决于您的问题和您拥有的数据。
训练数据表现不佳意味着模型没有正确学习。尝试不同的模型,改进现有的模型,收集更多的数据,收集更好的数据。
测试数据表现不佳意味着你的模型不能很好地概括。您的模型可能会过度拟合训练数据。使用更简单的模型或收集更多数据。
部署(在现实世界中)后的糟糕性能意味着您训练和测试模型的内容与实际发生的情况存在差异。重温步骤 1 和 2。确保您的数据与您试图解决的问题相匹配。
当你实施一个大的实验性改变时,记录下是什么和为什么。记住,就像模型调整一样,有人,包括你未来的自己,应该能够复制你所做的。
这意味着定期保存更新的模型和更新的数据集。
将它放在一起进行概念验证
许多企业听说过机器学习,但不确定从哪里开始。最好的起点之一是使用上面的六个步骤来构建概念证明。
概念验证不应该被视为从根本上改变你的业务运营方式的事情,而是探索机器学习是否能为你带来商业价值。
毕竟,你不是在追求花哨的解决方案来跟上炒作。您追求的是增值的解决方案。
在概念证明上放一个时间表,2、6 和 12 周是很好的量。有了好的数据,一个好的机器学习和数据科学从业者可以在相对较短的时间内获得 80–90%的最终建模结果。
让你的主题专家、机器学习工程师和数据科学家一起工作。没有什么比机器学习工程师建立一个伟大的模型来模拟错误的东西更糟糕的了。
如果网页设计师可以改善在线商店的布局,以帮助机器学习实验,他们应该知道。
请记住,由于概念证明的性质,机器学习可能不是您的企业可以利用的东西(不太可能)。作为项目经理,确保你意识到这一点。如果你是一名机器学习工程师或数据科学家,愿意接受你的结论。
但是并没有失去一切。
失败的价值在于你现在知道什么是失败的,并且可以把你的努力引向其他地方。这就是为什么为实验设定时间表是有帮助的。时间永远不够,但是最后期限创造了奇迹。
如果机器学习的概念证明结果很好,再走一步,如果不好,就后退一步。边做边学是一个比思考更快的过程。
本文遗漏的内容
这些步骤中的每一步都值得单独写一篇文章。我会努力的。
同时,有一些事情需要注意。
数据永远是最重要的。没有好的数据开始,任何机器学习模型都不会帮助你。如果你想在你的业务中使用机器学习,它从良好的数据收集开始。
部署改变一切。线下的好模式不一定代表线上的好模式。本文主要关注数据建模。一旦你部署了一个模型,就会有基础设施管理、数据验证、模型再训练、分析等等。任何云提供商都有这方面的服务,但把它们放在一起仍然是一种黑暗的艺术。给你的数据工程师高薪吧。如果你是数据工程师,分享你所知道的。
数据收集和模型部署是机器学习管道中最长的部分。本文只关注建模。即便如此,它也忽略了如何让你的数据做好建模准备的细节。
交易的工具各不相同。机器学习是由许多其他工具组成的大工具。从代码库和框架到不同的部署架构。做同一件事通常有几种不同的方法。最佳实践在不断变化。这篇文章关注的是不相关的东西。
这篇文章是基于脸书的机器学习领域指南,混合了我自己的一些经验。
Reddit 上有效调查招聘的 7 步指南
原文:https://towardsdatascience.com/a-7-step-guide-for-effective-survey-recruitment-on-reddit-77837380cbe?source=collection_archive---------16-----------------------
关于如何开展在线调查的实用指南
Image: Unsplash
做调查可能看似简单。
像 Google Forms 、 Surveymonkey 和 Qualtrics 这样的大学购买服务让调查变得便宜、快捷和容易。
然而,在网上做研究有其潜在的方法论问题。在特定的平台上做研究会带来特定的问题。
Shatz ( 2016 )在 Reddit 上提供了有效招聘的 7 步指南。
Image: Unsplash
1.为你的研究找到一个合适的子主题
正如你在写报告时必须找到合适的来源一样,你也需要寻找一个合适的地方来发布你的调查。找到一个适合的地方,在那里用户更有可能对它感兴趣。尽管你应该敏锐地意识到回答者潜在的自我选择偏见。还要考虑通过选择一个拥有大量用户的子区域来达到。
2.必要时张贴在其他子栏上
有时,在一个子编辑区发帖是不够的。当这种情况发生时,考虑发布多个帖子。尽管这样做时,在汇总数据之前,单独分析结果以查看答案之间是否有任何显著差异是很重要的。
3.突出你的调查的性质,并使用相关的语言
在邀请参与者时,尽可能明确您的调查主题,并使用易于理解且与您发布的子主题相关的语言。简洁,但也要注意 Reddit 允许相当长的文章标题。另外,你可以查看以前的帖子,看看他们过去使用过什么类型的语言。
4.通过在特定的时间和日期发布来优化
您可以通过根据子编辑在特定时间和日期发帖来优化回复率。Reddit 的用户群主要是美国人,所以东部标准时间上午 9 点是个不错的选择。对于非美国人或多面手,你可以使用第三方网站,如 Reddit 的Delay或 Reddit 的Late来找出帖子最受欢迎的时间,作为用户活动的代理。
5.请注意,人口统计数据可能会在一天中发生变化
与上述考虑相关的是,子街道的人口统计数据可能会在一天中发生变化。例如,北美和欧洲用户的比例将根据时间的不同而不同。然而,24 小时开放的帖子可能会缓解这个问题。
6.保持简洁明了
调查时间越长,流失率越高。长时间调查的黄金法则是 10-20 分钟。较短的调查通常需要 10 分钟或更短时间。另外,如果调查很短,请注明。尽管不要为了降低流失率而夸大完成时间。因为这可能会引起社区的强烈反对,而且在伦理上是不正确的。
7.不要在你的岗位上保持沉默
发布调查链接后,继续与社区互动。尝试在评论区回答任何问题,并开放讨论。这将增加你作为研究者的可信度,并可能提高参与率。此外,如果你做任何后续研究,它可能会增加保留率。
完整引用
Shatz,I. (2016)“快速、免费和有针对性:Reddit 作为在线招募参与者的来源”,社会科学计算机评论,35(4),第 537-549 页。T4:10.1177/0894439316650163。
A*:向 Dijkstra 添加启发式
原文:https://towardsdatascience.com/a-adding-heuristics-to-dijkstra-9e4ddbeada35?source=collection_archive---------21-----------------------
A*通过利用启发式算法来加速著名的 Dijkstra 算法。
介绍
假设我们有一个图 G 有两个以上的节点,从这个图中选择两个节点 a 和 b 。在连接这两个节点的所有路径中, a 和 b 之间的最短路径(SP)具有最小的总边权重。这种路径在许多情况下非常有用,例如在道路网络中查找最快的路径,其中边权重表示穿过道路所需的时间,或者在转运网络中查找将货物从其来源转运到其目的地所需的最小成本。
Dijkstra 算法
Dijkstra 的算法可以说是最受欢迎的 SP 算法,它可以在任何具有非负边的图中工作。这是一种贪婪算法,寻找到达所有节点的最短路径,直到它到达目标。它盲目地从源顶点开始,从发现的最近的节点开始探索图形,直到该迭代。
为了在每次迭代中找到最近的节点,Dijkstra 首先假设所有节点都无限远离源。然后,它更新源节点邻居的距离信息(标签),因为它发现了一条比无穷大更短的路径。它挑选最近的邻居作为新的探测节点,并根据从源到该节点的路径长度更新其邻居的标签。如果一个节点已经有了一个标签,那么它的标签只有在新标签更小时才会更新。注意,在每一次迭代中,我们保证从源到探索节点的 SP 被发现,因为所有的边都是非负的,因此我们将不能在将来发现更短的路径。由于这一事实,标签更新会继续,直到目标成为新的浏览节点,当它停止时,会找到 SP。
举例来说,假设司机想在最短时间内从安塔利亚开车到里泽。如果我们从土耳其的城市构建一个图,其中边权重表示道路的估计交叉时间,使用 Dijkstra 和 Antalya 作为源,Rize 作为目标,我们可以找到所需的路径。
下图显示了 Dijkstra 对上述图表的迭代。在第一次迭代中,我们用边权重标记安塔利亚的邻居,发现伊兹密尔是最近的城市。我们用绿色标记伊兹密尔,并继续探索图形。然后我们标记安卡拉、阿达纳和伊斯坦布尔,找到通往里泽的道路。请注意,即使我们在第三次迭代中找到了一条到 Rize 的路径,我们也不会停止,因为我们还没有标记 Rize。在第四次迭代中,我们找到一条更短的路径,在第五次迭代中,我们标记 Rize。在最后一个例子中,我们展示了具有粗边的 SP。
Iterations of Dijkstra on the Turkish cities graph.
尽管 Dijkstra 设法发现了 SP,但直觉不同意 Dijkstra 的迭代。如果一个人被要求完成同样的任务,他/她可能不会搜索通过伊兹密尔和伊斯坦布尔的路径,因为它们是西部城市,而里泽在土耳其的东部。然而,Dijkstra 盲目地检查边权重并忽略图结构,即使它是可用的。
尽管算法与人类直觉相反不会造成问题,但是增加迭代次数会造成问题!通过考虑伊兹密尔和伊斯坦布尔,Dijkstra 浪费了一些迭代,因为这些城市不包括在 SP 中。为了减少浪费的迭代次数,我们将使用 A*算法。
A*算法
Dijkstra 的问题源于它缺乏人的直觉。在 A中,我们将使用启发式方法来克服这个问题。启发式算法是一种通知算法实现更有针对性的搜索的功能。在 A中,使用试探法来决定每一步要考虑哪个节点。与 Dijkstra 仅通过到源节点的总距离来选择节点不同,A*将相同的标准与启发式函数相结合。
为了得到上图的启发,考虑在上图中寻找 SP 的人。我们说他/她将省略伊兹密尔和伊斯坦布尔,因为它们是西方城市。通过启发式,我们也可以驱动算法这样做!为了反映人类的直觉,让我们将每个节点的启发式算法定义为欧几里德距离来 Rize 。
使用这种启发式算法,A*将考虑两个标准:到 Antalya 的路径距离和到 Rize 的欧几里得距离。在每一步中,它将选择这两者总和最小的节点。为了最小化第一个标准,它会选择一个靠近安塔利亚的节点,就像在 Dijkstra 一样。另一方面,为了最小化第二个标准,它将选择一个靠近 Rize 的节点。请注意,这在 Dijkstra 中根本没有考虑到。
在下图中,我们看到每个城市都与其启发式的欧几里德距离相关联。我们看到 A*在更少的迭代中找到 SP。不考虑安卡拉、伊兹密尔、伊斯坦布尔,直接通过阿达纳到达里泽。
Iterations of A* on the Turkish cities graph.
让我们考虑另一种情况。假设我们有一个机器人在一个房间的中间,它想要到达角落里的一个目标。我们可以将房间建模为网格结构中的图形,并找到 SP 以最小化机器人的行进时间。
如果我们使用 Dijkstra 来寻找 SP,它将循环考虑每个单元,而带有欧几里得启发式的 A*将直接使用对角线。下图显示了这种情况。请注意迭代次数之间的巨大差异!你也可以参考更多网格场景的链接视频。
Dijkstra vs A* in a grid [1].
结论
A算法是 Dijkstra 的一种有价值的替代方法,尤其是在可以定义合理的启发式算法时,应该考虑这种方法。从某种意义上来说,A是一种灵活的算法,也可以在节点选择期间增加启发式函数的权重,以更加注重启发式,反之亦然。然而,大多数时候定义一个合理的启发是非常困难的。
参考
[1]https://www.youtube.com/watch?v=cSxnOm5aceA
A/B 测试设计和执行
原文:https://towardsdatascience.com/a-b-testing-design-execution-6cf9e27c6559?source=collection_archive---------4-----------------------
使用 Python 实现数据驱动的增长
如何以编程方式进行 A/B 测试
这一系列文章旨在解释如何以一种简单的方式使用 Python,通过将预测方法应用于您的所有行动来推动您公司的发展。它将是编程、数据分析和机器学习的结合。
我将在以下九篇文章中讨论所有主题:
1- 了解你的衡量标准
2- 客户细分
3- 客户终身价值预测
4- 流失预测
5-预测下一个购买日
6-预测销售额
7-市场反应模型
8-隆起建模
9- A/B 测试设计和执行
文章有自己的代码片段,使您可以轻松地应用它们。如果你是编程的超级新手,你可以在这里很好地介绍一下 Python 和 Pandas (一个我们将在任何事情上使用的著名库)。但是仍然没有编码介绍,您可以学习概念,如何使用您的数据并开始从中产生价值:
有时候你必须先跑,然后才能走——托尼·斯塔克
作为先决条件,确保你的电脑上安装了 J upyter Notebook 和 P ython 。代码片段只能在 Jupyter 笔记本上运行。
好吧,我们开始吧。
第 9 部分:A/B 测试设计和执行
作为一名(数据驱动的)增长黑客,主要职责之一是试验新的想法和维持持续的学习。实验是测试你的机器学习模型、新动作和改进现有动作的好方法。我们举个例子:
你有一个准确率高达 95%的客户流失模型。通过给可能流失的客户打电话,给他们一个有吸引力的报价,你假设他们中的 10%会留下来,每个人每月带来 20 美元。
假设太多了。分解一下:
- 该模型的准确率为 95%。真的吗?您已经根据上个月的数据训练了您的模型。接下来的一个月,会有新用户,新产品功能,营销&品牌活动,季节性等等。在这种情况下,历史准确性和实际准确性很难匹配。不经过测试是无法得出结论的。
- 通过查看之前活动的结果,您假设有 10%的转化率。并不能保证你的新动作会因为上述因素而有 10%的转化。此外,由于这是一个新的群体,他们的反应在一定程度上是不可预测的。
- 最后,如果这些客户今天每月带来 20 美元,这并不意味着他们会在你采取新行动后带来同样的收入。
为了了解将会发生什么,我们需要进行 A/B 测试。在本文中,我们将关注如何以编程方式执行测试,并报告测试背后的统计数据。在开始编码之前,有两个要点需要你在设计和 A/B 测试时考虑。
1-你的假设是什么?
继续上面的例子,我们的假设是,测试组将有更多的保留:
A 组→报价→更高留存
B 组→无报价→低留成
这也有助于我们测试模型的准确性。如果 B 组的留存率是 50%,显然说明我们的模式不行了。这同样适用于衡量来自这些用户的收入。
2-你的成功标准是什么?
在这种情况下,我们将检查两组的保留率。
程序性 A/B 测试
对于这个编码示例,我们将使用 numpy 库创建我们自己的数据集,并评估 A/B 测试的结果。
让我们从导入必要的库开始:
现在,我们将创建自己的数据集。数据集将包含以下各列:
- 客户标识:****客户的唯一标识
- ****细分市场:客户的细分市场;高价值还是低价值
- ****组:表示客户是在测试组还是对照组
- purchase_count :客户完成购买的数量
前三个很简单:
df_hv = pd.DataFrame()
df_hv['customer_id'] = np.array([count for count in range(20000)])
df_hv['segment'] = np.array(['high-value' for _ in range(20000)])
df_hv['group'] = 'control'
df_hv.loc[df_hv.index<10000,'group'] = 'test'
理想情况下,采购数量应该是泊松分布。将会有没有购买的客户,而购买次数高的客户将会减少。让我们使用 numpy.random.poisson() 来完成这项工作,并为测试组和对照组分配不同的分布:
df_hv.loc[df_hv.group == 'test', 'purchase_count'] = np.random.poisson(0.6, 10000)
df_hv.loc[df_hv.group == 'control', 'purchase_count'] = np.random.poisson(0.5, 10000)
让我们来看看我们的数据集:
****
太棒了。我们有一切来评估我们的 A/B 测试。假设我们向 50%的高价值用户提供服务,并观察他们在给定时间内的购买行为。检查密度的最佳可视化方法是:
输出:
结果看起来很不错。测试组的购买密度从 1 开始比较好。但是我们怎么能肯定地说这个实验是成功的并且这种差异不是由于其他因素而发生的呢?
要回答这个问题,我们需要检查测试组的上升是否具有统计学意义。 scipy 库允许我们以编程方式检查这一点:
from scipy import stats
test_result = stats.ttest_ind(test_results, control_results)
print(test_result)
输出:
ttest_ind() 方法返回两个输出:
- ****t-统计:代表测试组和对照组的平均值之间的差异,单位为标准误差。更高的 t 统计值意味着更大的差异,支持我们的假设。
- ****p 值:测量零假设为真的概率。
Ops,什么是零假设?****
如果零假设为真,这意味着测试组和对照组之间没有显著差异。所以 p 值越低意味着越好。作为行业标准,我们接受 p 值< 5% 使得结果具有统计显著性(但这取决于你的商业逻辑,也有人们用 10%甚至 1%的情况)。
为了了解我们的测试是否具有统计显著性,让我们构建一个函数并应用于我们的数据集:
def eval_test(test_results,control_results):
test_result = stats.ttest_ind(test_results, control_results)
if test_result[1] < 0.05:
print('result is significant')
else:
print('result is not significant')
如果我们将此应用于数据集:
看起来很棒,但不幸的是,事情没那么简单。如果您选择一个有偏见的测试组,默认情况下,您的结果将具有统计学意义。举个例子,如果我们把更多的高价值顾客分配到测试组,把更多的低价值顾客分配到控制组,那么我们的实验从一开始就是失败的。这就是为什么选择小组是健康 A/B 测试的关键。
选择试验&对照组
选择测试和控制组最常见的方法是随机抽样。让我们看看如何通过编程来实现它。我们将首先从创建数据集开始。在这个版本中,它将拥有 2 万个高价值客户和 8 万个低价值客户:
#create hv segment
df_hv = pd.DataFrame()
df_hv['customer_id'] = np.array([count for count in range(20000)])
df_hv['segment'] = np.array(['high-value' for _ in range(20000)])
df_hv['prev_purchase_count'] = np.random.poisson(0.9, 20000)df_lv = pd.DataFrame()
df_lv['customer_id'] = np.array([count for count in range(20000,100000)])
df_lv['segment'] = np.array(['low-value' for _ in range(80000)])
df_lv['prev_purchase_count'] = np.random.poisson(0.3, 80000)df_customers = pd.concat([df_hv,df_lv],axis=0)
****
通过使用 pandas 的 sample() 函数,我们可以选择我们的测试组。假设我们有 90%的测试组和 10%的对照组:
df_test = df_customers.sample(frac=0.9)
df_control = df_customers[~df_customers.customer_id.isin(df_test.customer_id)]
在这个例子中,我们提取了整个组的 90%,并将其标记为测试。但是有一个小问题会毁了我们的实验。如果数据集中有明显不同的多个组(在本例中,高值&低值),最好分别进行随机采样。否则,我们不能保证试验组和对照组的高值和低值的比率是相同的。
为了确保正确创建测试和控制组,我们需要应用以下代码:
df_test_hv = df_customers[df_customers.segment == 'high-value'].sample(frac=0.9)
df_test_lv = df_customers[df_customers.segment == 'low-value'].sample(frac=0.9)df_test = pd.concat([df_test_hv,df_test_lv],axis=0)
df_control = df_customers[~df_customers.customer_id.isin(df_test.customer_id)]
这使得分配对两者都是正确的:
****
我们已经探讨了如何进行 t 检验以及选择测试组和对照组。但是如果我们像上面一样在多组上做 A/B/C 测试或者 A/B 测试呢?是时候引入方差分析测试了。
单因素方差分析
让我们假设我们在相同的组中测试 2 个以上的变体(例如,对低价值高价值客户的 2 个不同的报价和无报价)。然后我们需要应用单因素方差分析来评估我们的实验。让我们从创建数据集开始:
输出:
为了评估结果,我们将应用以下函数:
def one_anova_test(a_stats,b_stats,c_stats):
test_result = stats.f_oneway(a_stats, b_stats, c_stats)
if test_result[1] < 0.05:
print('result is significant')
else:
print('result is not significant')
逻辑类似于 t_test。如果 p 值低于 5%,我们的测试变得有意义:
让我们看看如果两组之间没有差异,谁会是这个样子:
df_hv.loc[df_hv.group == 'A', 'purchase_count'] = np.random.poisson(0.5, 10000)
df_hv.loc[df_hv.group == 'B', 'purchase_count'] = np.random.poisson(0.5, 10000)
df_hv.loc[df_hv.group == 'C', 'purchase_count'] = np.random.poisson(0.5, 10000)a_stats = df_hv[df_hv.group=='A'].purchase_count
b_stats = df_hv[df_hv.group=='B'].purchase_count
c_stats = df_hv[df_hv.group=='C'].purchase_counthist_data = [a_stats, b_stats, c_stats]group_labels = ['A', 'B','C']# Create distplot with curve_type set to 'normal'
fig = ff.create_distplot(hist_data, group_labels, bin_size=.5,
curve_type='normal',show_rug=False)fig.layout = go.Layout(
title='Test vs Control Stats',
plot_bgcolor = 'rgb(243,243,243)',
paper_bgcolor = 'rgb(243,243,243)',
)# Plot!
pyoff.iplot(fig)
输出和测试结果:
****
如果我们想知道 A 和 B 或者 C 之间是否有区别,我们可以应用我上面解释的 t_test。
双向方差分析
假设我们正在对高价值和低价值客户进行相同的测试。在这种情况下,我们需要应用双向方差分析。我们将再次创建数据集,并构建我们的评估方法:
双向方差分析需要建立如下模型:
import statsmodels.formula.api as smf
from statsmodels.stats.anova import anova_lm
model = smf.ols(formula='purchase_count ~ segment + group ', data=df_customers).fit()
aov_table = anova_lm(model, typ=2)
通过使用段** & 组,模型试图达到购买 _ 计数。上面的 aov_table 帮助我们了解我们的实验是否成功:**
最后一列代表结果,向我们展示了显著的差异。如果不是,它将如下所示:
由此可见,段(高价值或低价值)显著影响采购数量,但组不影响,因为它几乎是 66%,远高于 5%。
现在我们知道如何选择我们的小组并评估结果。但是还有一个缺失的部分。为了达到统计显著性,我们的样本量应该足够了。让我们看看如何计算它。
样本量计算
为了计算所需的样本量,首先我们需要理解两个概念:
- ****效应大小:代表试验组和对照组平均值之间的差异大小。它是测试组和对照组之间平均值的方差除以对照组的标准偏差。
- ****功效:这是指在你的测试中找到一个统计意义的概率。为了计算样本大小,0.8 是常用的值。
让我们构建数据集,并在一个示例中查看样本大小的计算:
from statsmodels.stats import power
ss_analysis = power.TTestIndPower()#create hv segment
df_hv = pd.DataFrame()
df_hv['customer_id'] = np.array([count for count in range(20000)])
df_hv['segment'] = np.array(['high-value' for _ in range(20000)])
df_hv['prev_purchase_count'] = np.random.poisson(0.7, 20000)purchase_mean = df_hv.prev_purchase_count.mean()
purchase_std = df_hv.prev_purchase_count.std()
在本例中,购买的平均值(purchase_mean)为 0.7,标准差(purchase_std)为 0.84。
假设我们想在这个实验中将 purchase_mean 增加到 0.75。我们可以如下计算效果大小:
effect_size = (0.75 - purchase_mean)/purchase_std
之后,样本量的计算就相当简单了:
alpha = 0.05
power = 0.8
ratio = 1ss_result = ss_analysis.solve_power(effect_size=effect_size, power=power,alpha=alpha, ratio=ratio , nobs1=None)
print(ss_result)
α是统计显著性的阈值(5%),我们的测试和控制样本大小的比率是 1(相等)。因此,我们需要的样本大小是(ss_result 的输出) 4868。
让我们构建一个函数,在任何我们想要的地方使用它:
def calculate_sample_size(c_data, column_name, target,ratio):
value_mean = c_data[column_name].mean()
value_std = c_data[column_name].std()
value_target = value_mean * target
effect_size = (value_target - value_mean)/value_std
power = 0.8
alpha = 0.05
ss_result = ss_analysis.solve_power(effect_size=effect_size, power=power,alpha=alpha, ratio=ratio , nobs1=None)
print(int(ss_result))
对于这个函数,我们需要提供我们的数据集、表示值的 column_name(在我们的例子中是 purchase_count)、我们的目标平均值(在前面的例子中 0.75 是我们的目标)和比率。
在上面的数据集中,假设我们希望将购买计数平均值提高 5%,并且我们将保持两组的规模相同:
calculate_sample_size(df_hv, 'prev_purchase_count', 1.05,1)
那么结果就变成了 8961。
你可以在这里找到这篇文章的 Jupyter 笔记本。
这是数据驱动增长系列的结束。希望你喜欢这些文章,并开始应用这里的实践。这些将被转换成电子书,并由一个全面的视频系列支持。敬请期待!
黑客快乐!
需要帮助来发展你的公司吗?点击这里与我一起预订免费课程。
A/B 测试是分析的三轮车
原文:https://towardsdatascience.com/a-b-testing-is-the-tricycle-of-analytics-497ec4563184?source=collection_archive---------23-----------------------
像 A/B 测试这样的基本方法是现代分析程序的起点,而不是终点
当一个蹒跚学步的孩子第一次踩上踏板开始移动时,他们脸上的喜悦足以成为他们喜欢三轮车的理由,但事实证明三轮车也有很多发展方面的好处。学习骑三轮车不仅有明显的好处,发展肌肉,平衡和深度知觉需要准备一个孩子骑自行车和驾驶。这也有助于他们建立自信,在某些情况下,这是他们第一次体验独立自主的感觉。所以我带着对三轮车极大的亲和力和敬意说:如果你的分析程序的支柱是 A/B 测试,你是在骑三轮车。
在仇恨邮件蜂拥而至之前,让我解释一下。在许多情况下,如临床试验,或其他情况下,测试组和控制组可以清晰地分阶段进行,并随着时间的推移进行跟踪,AB 测试在如何简单地向非技术利益相关者解释结果方面非常重要。然而,A/B 测试正越来越多地被吹捧,并在严重不足的领域使用。当涉及到促销、活动表现或定价决策时,A/B 测试方法过于简单,无法解释现代营销计划的复杂性,因为现代营销计划在任何给定时间都可能有数以千计的不同信息通过许多渠道传播。简单的结果可能很容易在高层领导会议上交流,但结果比更复杂的多元方法更有可能是错误的。
多元检验& A/B 检验有什么区别?
多元变量实际上只是同时考虑许多变量的一种花哨说法。有许多方法属于这一类,包括大多数机器学习方法。多变量方法不仅考虑不同的测试组,还考虑组内不同的元素以及可能影响结果的潜在外部因素。根据使用的方法,您还可以确定因果关系和概率关系,并开发预测来预测未来的结果。
A/B 测试考虑了两个不同组做了两件不同事情的结果——有点简单。(即:餐厅 A 组出售 1 美元的墨西哥玉米卷,而 B 组运行标准菜单)。选择两组以确保它们具有可比性,并确保测试结果在统计上是有效的,这可能很复杂,但目标很简单——A 或 B 表现得更好吗?无论你如何合理化它——A/B 测试根本不能告诉你任何关于为什么 A 或 B 占上风的事情。它有助于清晰简单地交流结果,但清晰简单并不一定意味着它是最准确的(见我关于 XAI 的文章)
只是为了把水搅浑,或者更有可能是为了卖软件,我看到过博客帖子说“多元 A/B 测试”。这真的是个东西吗?算是吧。多变量分析可以应用于任何大型数据集,因此在分析的前端,您可以采取措施为测试中的每个元素创建计划/结构化 A/B,在后端,您可以应用多变量分析。事实上,将结构化测试协议的计划变化引入多元测试计划是一个明智的做法。这实际上并没有使它成为一个 A/B 测试,但是你可以在你现有的软件中使用分割测试功能来帮助实现和跟踪你想要测试的变化。
多元测试是人工智能驱动营销自动化的门户
在现实世界中,我们处理的数据集越来越大,越来越复杂,但并不总是丰富的。我们有大量关于人、地点、时间、内容和频道的信息,这些信息经常淹没在数据湖 Baykal 的底部,但只有很少一部分被转化为有意义的信息。让多元测试发挥作用需要更高水平的致力于丰富数据,这是大多数公司不擅长的。例如,如果你正在为一个数字营销平台构建一个多元测试引擎,你需要独立地识别每个爆炸的每个属性。例如,品牌折扣活动可能会通过多种渠道进行,为不同的客户群提供不同的艺术、产品功能、折扣、口号和个性化信息。它们也可能在一天中的不同时间以不同的天气事件影响不同的地理区域。所有这些都需要作为每次爆炸的独立属性进行跟踪。所有这些数据已经存在于参与这些营销活动的大多数组织中,但是大多数组织没有正确地组织这些数据,并且许多软件平台没有被设计来标记和混合这些数据。虽然开始管理这些数据可能听起来令人生畏,但实际上这比管理持续 A/B 测试的持续后勤工作要容易得多,后者需要根据市场条件不断进行重新校准。顺便说一句,如果你或你的投资者想象你公司的未来是由人工智能驱动的营销——这恰好也是第一步。丰富、干净、定义明确的数据是自学习算法的原始汤。
如果您刚刚开始数据分析,并且测试规程对您的组织来说是新的,那么,无论如何,在您积累数据和分析敏锐度作为计划演进的一部分时,让团队舒适地骑着 AB 测试三轮车。另一方面,如果你像许多公司一样试图在大数据领域导航,并且发现自己数据丰富而见解贫乏,那么你可能已经准备好了一辆大型儿童自行车,甚至是一辆带马达的自行车,你应该小心那些试图向你出售更快、更炫三轮车的人。
时间序列分析基础指南
原文:https://towardsdatascience.com/a-basic-guide-into-time-series-analysis-2ad1979c7438?source=collection_archive---------7-----------------------
利用时间序列分析 2014 年至 2017 年英国的日常事故
介绍
线性回归是数据科学家非常常用的模型。一个结果或目标变量由一组特征来解释。有一种情况是,随着时间的推移收集相同的变量,我们使用了一系列定期测量该变量的方法。欢迎来到时间系列。与标准线性回归的一个区别是数据不一定是独立的,也不一定是同分布的。处理时间序列可能会令人沮丧,因为这意味着您必须找到任何先前值预测的滞后或误差与其本身之间的相关性。此外,顺序很重要,改变顺序会改变数据的含义。由于时间序列的复杂性,数据科学家在进行时间序列分析时有时会迷失方向。在这篇博客中,我将分享一个完整的时间序列分析,由一个著名的数据科学方法指导:OSEMIN。
使用的上下文和数据
上面的图片展示了我在研究中从收集数据到得出结论的方法。
本次分析使用的数据包含了从 2014 年 1 月 1 日到 2017 年 12 月 31 日,英国每天发生的 1461 起事故的日期和数量。我在这个练习中使用了来自 Kaggle 的数据集。我下载了一个 CSV 文件,并使用一个流行的 python 代码‘PD . read _ CSV’将其存储到一个数据帧中。在这个分析中没有考虑其他独立变量,因为我关注的是时间序列。
本研究的主要目的是解释完整数据科学项目的不同步骤。其他目标是找出一天中的事故数量是否取决于任何给定一天中的事故数量。
这项研究试图回答的 3 个问题是:
- 当天和前一天的事故数量之间有什么关系?
- 有没有什么模式可以帮助预测(或预防)英国某一天的事故数量?
- 一年中的哪一个月或一周中的哪一天与当月的事故数量有关吗?
处理数据
数据相对干净,随时可以使用。然而,出于分析目的,我必须做一些转换。
首先,我将包含日期的列更改为数据框的索引。在 Python 中处理时间序列数据时,务必确保日期被用作索引值,并被 Python 理解为真正的“日期”对象。
第二,检查任何丢失的数据是很重要的,因为它会极大地改变数据集。数据中未发现缺失值。
最后,为了执行相关的 EDA,我向我的数据中添加了三(3)列:一列分别用于月、日和工作日名称。这应该有助于我理解基于一年中的月份、一周中的日期的趋势。此外,我可以根据这些新功能对数据进行分组,以便更好地了解我的数据。
下面是我的数据经过处理和添加 3 列后的样子。
A sample of my data generated using: data_cleaned_df.sample(5, random_state=0)
探索我的数据
数据科学项目中最重要的步骤之一是 EDA。探索性数据分析( EDA )是一种分析数据集以总结其主要特征的方法,通常采用可视化方法。可以使用或不使用统计模型,但主要是为了查看数据在正式建模或假设检验任务之外能告诉我们什么。EDA 让我很好地理解了我的数据。
快速展示我的数据:
每天的事故数量从 2014 年的 400 起/天减少到 2017 年的 356 起。2017 年,每日事故达到 322 起的低点。与日均相比,标准偏差约为每天 17 起事故。(不到平均值的 5%)。
Descriptive statistics of the series provided by “df.describe”
将数据绘制成直线可以显示任何现有趋势,而散点图是发现任何异常值的好方法。我们可以观察到,任何一天发生超过 475 起事故或者少于 200 起事故都是相当不正常的。然而,对于我的分析,我没有删除任何这些数字。此外,当数据在区间内有异常值时,箱线图是另一个很好的图形。
另外一些有趣的评论:如下图所示,事故数量在 12 月份一直在下降。当开始 EDA 时,我预计这个数字会因年终聚会而上升。然而,这可能是由于人们旅行或呆在家里花更多的时间与家人和朋友在一起。周日人数减少符合第二个假设。
Daily accidents per year.
Daily accident per day of the week — don’t focus on the order of the days 😉
最后,用数据集构建直方图让我了解了数据的分布情况。很明显,事故的数量接近一个略微倾斜的正态分布。
模型
在任何建模之前,我需要检查时间序列是否是平稳的。如果一个时间序列的统计特性(如均值、方差)在一段时间内保持不变,则称该时间序列是平稳的。由于大多数时间序列模型都假设时间序列是稳定的,验证该假设非常重要。对于一般的时间序列数据集,如果它在一段时间内表现出特定的行为,那么它在未来很有可能会遵循类似的行为。因此,很难找到正确的模型或进行任何预测。我将用任何趋势情况下的滚动平均值和滚动标准差来绘制数据。另外,我会进行迪基·富勒测试。
迪基富勒测试是一个测试平稳性的统计测试。检验的零假设是时间序列不是平稳的。因此,如果检验统计量小于临界值,我们拒绝零假设,并说序列是平稳的。
在进行了 Dickey Fuller 测试后,在 95%的置信水平下,我们拒绝了零假设。如下图所示,该系列是稳定的。
The data looks stationary. Also the Dickey Fuller test returns a p-value <0.05
在确认了序列的平稳性之后,我可以继续研究这个模型。我确保将我的数据分成训练集和测试集。测试集不用于建模过程,而是用于评估所选模型对未知数据的性能。
为了选择相关的时间序列模型,我构建了 ACF 和 PACF 来分别确定 ARIMA 的 q 值和 p 值。
经过不同的迭代,我选择了一个 ARMA (2,3)来表示数据。对于每一步,每当我得到没有意义的系数时,我不得不转移到另一个模型。
Based on this result, the number of accident would be explained by the number during two days prior and a moving average part (lag 3)
虽然这个模型的残差接近正态分布,但是 ARMA 发现在预测未知数据时失败了。记得我把我的数据分开并保留了一个测试集。通过将测试传递给模型,预测是可怕的。减少测试数据中的观察数量并没有提高预测的质量。我的结论是 ARMA 并不是代表数据的最佳方法。逻辑对吗?其他因素也会影响一天中的事故数量,如车辆类型、地区、司机年龄等。
结论和考虑
尽管我们没有得到一个“完美的模型”——无论如何对数据科学家来说都不是理想的——但一些问题通过 EDA 得到了回答。我们看到了一周中的日子与事故数量之间的关系,以及一年中的月份如何影响这些数字。这就是为什么在一个数据科学项目中,这一步不能被忽略。
在对我们的数据建模时,我们发现一天的事故值与前一天的事故数之间存在相关性。当然,如果你整合一些外生变量,我们的模型会表现得更好。那些应该使用领域知识和彻底的文献回顾来发现。ARIMAX 或 SARIMAX 更适合我们的活动。在这个过程中不断后退一两步可能会令人沮丧,但我确实相信这是数据科学的魅力之一,因为每一步都会带来更多的答案和更多的数字叙述。
任何想法,请给我留言,我们可以讨论。
我的代码、模型和使用的数据都在我的 GitHub 上。请使用下面的链接:
[## FabriceMesidor/time series _ accident _ UK
一个简单的时间序列回归,以了解不同的步骤建模线性回归是一个非常常见的模型…
github.com](https://github.com/FabriceMesidor/TimeSeries_accident_UK)
一种贝叶斯方法,用于估计内容和工作日对脸书页面上发布的帖子的影响
原文:https://towardsdatascience.com/a-bayesian-approach-to-estimate-the-effect-of-a-content-and-a-weekday-on-the-post-published-on-a-7d31873d3c08?source=collection_archive---------27-----------------------
- 我假设读者有贝叶斯统计的知识
- 这里的样本代码是这里的
如今,社交媒体已经成为一个互动平台,客户可以在这里交流想法并留下对产品的评论。根据市场统计数据,18-34 岁的成年人最有可能使用社交媒体关注他们最喜爱的品牌(95%) 。因此,这些成年人成为潜在客户和行业巨头的良好目标。几乎每个受欢迎的品牌都“理所当然”地使用这个工具,因为它:
对该品牌关于产品的新帖子印象深刻,该页面的追随者往往会通过“喜欢”来与该帖子“互动”,留下评论并与他们的联系人分享该帖子。交互的总数可以作为后影响的良好指标。可能会有巨大的影响,也可能完全没有影响。此外,影响的程度可能取决于其他因素,如帖子发布的工作日、其内容等。我们的目标是帮助企业主对脸书广告做出更明智的决策,方法是确定某个内容或某个工作日对该帖子的总互动次数是否有影响。为此,我们开发了分层条件自回归(CAR)模型,该模型考虑了时间相关性
我们使用的数据集与某知名化妆品品牌 2014 年在脸书的页面上发布的帖子相关。
在分析中,我们选择“总互动”作为主要响应变量,定义如下:
(1) Total interactions = (# of likes + # of comments + # of shares)
为了模拟后期影响,我们选择了分类变量“类型”和“后期工作日”。在这里,“类型”将文章分为链接、照片、状态和视频。所有这些指标在发布之前都是已知的。“Post weekday”表示帖子是在一周的哪一天发布的。
首先,描述性分析显示,平均而言,脸书用户与视频帖子互动最多,而链接被点击最少。如直方图所示,“总相互作用”的分布高度向右倾斜。
由于模型期望正态分布的数据,我们对响应变量进行了对数转换(通过添加一个小常数)以获得正态分布的数据。
对于对数转换的“总相互作用”的未来参考,使用以下:
(2) y = log(Total Interactions)
帖子的影响力可以通过帖子发布当天的总互动次数、内容和星期几来衡量。因为变量“工作日”是邻域相关的,所以假设它对 y 具有空间随机影响。假设另一个分类变量“类型”对 y 有固定的影响。因此,我们在最终模型中加入汽车模型和线性趋势项。对于所有“类型”和“工作日”的组合,我们将计算一个给定组合的边际均值是否高于其他组合的后验概率:
对于 j = {1,2,…,n}/{i},其中 n =“类型”和“工作日”组合的数量。此外,固定和随机效应参数的后验分布将帮助我们回答问题陈述问题。
模型
对于感兴趣的模型,让 y_ i 为第 i 个帖子的值。设 i ,范围从 1 到 500,是某一天发表的具有特定内容的帖子。我们假设 y_ i 是独立分布的。然后,对于给定的帖子, i = {1,2,3,…}:
其中平均值定义为:
其中天数的影响定义为:
此外,您可以看到我们如何在模型之前定义:
我们来分析一下。首先,作为标准差的扩散先验, 𝜎 ,我们选择了半柯西先验与正支持。第二,我们在所有固定效果参数𝛽=【𝛽1,𝛽2,𝛽3,𝛽4].】上选择了一致的先验 𝛽 的统一先验充分覆盖了线性趋势项的可能值,包括负趋势和正趋势。最后,假设汽车模型的参数 𝜌 具有均匀分布,受以下特征值的约束
我们使用 Stan 和 R package“rstan”从参数的后验分布中生成样本。采用了 4 链 MCMC,总共进行了 10000 次迭代和 5000 次老化迭代(我们将在下一篇文章中讨论 MCMC)。我们最终为 𝜌 、 𝛽 、 𝛿 和 𝜎 参数生成了 20000 个 MCMC 样本。下面给出了分裂链上潜在规模缩减系数。请注意,所有参数的 Rhat = 1,意味着 MCMC 正常收敛。
结果
在上表中,您还可以看到每个参数的后验中位数和 95%可信区间。此外,下面你可以找到 𝛽 、 𝛿 、 𝜌 、 𝜎 参数的后验分布。
利用 𝛽 和 𝛿 参数的所得后验概率,以及 𝜇_𝑖 的方程,我们计算了 𝜇_𝑖 的后验概率。之后,我们确定了每个 𝜇_𝑖 的边缘后中值和 95%可信区间。
我们的目标是确定帖子的内容或发布日期对帖子收集的总交互次数是否有影响。为了回答提出的问题,我们找到了后验概率,即对于给定的type + weekday
,其边际均值是否高于其他均值(见上表)。video + thursday
组合的后边缘均值最高,为 0.9529。这意味着如果一个帖子是周四发布的视频,那么它的影响力会更大。𝛿_𝑇ℎ𝑢的后验值比其他日子的值大,而 𝛿_𝑆𝑢𝑛 的后验值小。𝛿的可信区间很紧,在零附近,周四之后略微向左移动。
下图显示,平均而言,视频的总互动次数更高。状态和照片帖子收集几乎相似的互动。正如所料,链接帖子的总交互次数最少。
这种分析可以通过在模型中包括“类型”和“工作日”交互来进一步扩展。
最初发布于kgulzina . github . io。
寻找上帝的贝叶斯探索
原文:https://towardsdatascience.com/a-bayesian-quest-to-find-god-b30934972473?source=collection_archive---------5-----------------------
贝叶斯定理和所有问题中最基本问题的概率答案:“上帝存在吗?”
The Creation of Adam (Creazione di Adamo) —Michelangelo. Source: Wikipedia
本文关注的不是公式和数字,而是一个有趣的故事,在这个故事中,贝叶斯定理在哲学、认识论和宗教中最具争议的讨论中确立了自己的地位。
我们数据科学家和统计学家喜欢贝叶斯定理。
一个看似简单的想法:我们通过用新获得的信息更新我们的初始信念来获得更新和改进的信念,贝叶斯定理被吹捧为产生知识的最有力的方法之一。
Sheldon explaining how he is estimating his life expectancy, using Bayes’s theorem. Source: Scientific America
艾伦·图灵用贝叶斯破解了英格玛——德国海军的秘密代码。我们使用贝叶斯程序将垃圾邮件扔进垃圾箱(“朴素贝叶斯,有人知道吗?”),评估我们的医疗记录,发现基因是如何控制和调节的,协助海岸警卫队和国土安全等。[1]它太受欢迎了,甚至在大爆炸定理上客串了一把。
有了如此丰富的实际应用,毫不奇怪,哲学家和神学家发现贝叶斯定理是一个新的框架,为一个古老而又不断引发争议的问题建立了新的理论基础:
我们能根据我们周围世界的证据对上帝做出理性的结论吗?
1。贝叶斯定理——概述:
贝叶斯定理非常简单。它与条件概率有关,也就是说,某个理论或假设对某个已经发生的事件为真的概率。
这个想法体现在一个著名的等式中:
我不想浪费你的时间在这些方程式上。事实上,我已经写了大量关于贝叶斯定理以及如何用贝叶斯方法进行推理的文章。您可以在以下网址查看:
- 贝叶斯统计如何说服我去健身房
我接下来想做的是给出一个激励人心的例子来展示这个优雅公式的巨大预测洞察力。
亚当(可能)是第一个使用贝叶斯定理的人
想象一下,有人来到我们美丽的世界(亚当或者他来自柏拉图的洞穴),第一次看到太阳升起。起初,他会认为这种现象是一种反常现象。然而,每一天他幸存下来并观察美丽的日出,他的信心增加,这是大自然的永久特征。这种推理的心理过程——通常被称为归纳——是如何发生的?
有两个令人感兴趣的事件:
- 太阳每天升起(X)
- 今天太阳升起了
亚当关心的是太阳每天升起的条件概率,给定今天太阳升起的观测值 P(X|Y)。现在,让我们指定一些数字来说明计算:
How Adam arrived at the conditional probability after the first sunrise
比方说,在第一次看到日出之前,亚当不相信,他认为太阳每天都升起【X】的概率只有 1%。当他看到日出时,他没有被说服,所以他分配了一个合理的机会,即今天的日出纯粹是巧合(即, P(Y|NX) = 1/7 ,因为一周有 7 天,但它实际上可能是 1/30、1/365 或 1/10 ⁰).如果亚当知道并使用贝叶斯定理来计算这些数字,他分配给初始假设的概率会从 1%增加到 6.6%。
贝叶斯定理的巧妙之处在于,随着更多证据的出现,我们可以多次更新我们的概率估计。当亚当每天醒来,惊叹于壮丽的日出时,他不断更新他的先验知识,重新运行贝叶斯公式,并得到他的假设的条件概率的更新估计:
How Adam arrived at the conditional probability after the second sunrise
在观察第二次日出时,亚当变得更加确信他的假设,将他的条件概率从 6.6%增加到 33.1%。这一过程一次又一次地重复,尽管从数学上讲永远不会达到 100%,但后来从字面上讲,太阳只是偶然升起也是不可能的。
Left: the posterior conditional probability of the statement “The sun rises everyday” as Adam updates his belief daily. Right: Comparison between two different initial priors (1% vs 0.01%)
用一些简单的 R 代码,我重复了上面的计算,并说明了亚当如何更新他的信念。你可以在这里找到源代码。他只需要短短 4 天就能在每天出现的日出中确信超过 99%。即使亚当更加怀疑(因为他应该反对蛇或撒旦 T.T ),并指定最初的信念只有 0.01%,仍然只需要 7 天就可以说服他。
2.贝叶斯定理和奇迹之神;
在这一节中,我将简化讨论(也就是彻头彻尾的欺骗):我们将专注于一个狭窄但同样有趣的话题,而不是检查上帝存在的概率性论点: 我们能相信奇迹吗?
我决定这样做有三个原因:
- 奇迹的合理性,通常被定义为“违反自然法则”,一直是哲学争论的热门话题。
- 从神学和哲学上来说,已经有很多关于奇迹的存在和神本身之间的直接联系的争论,所以我们离那不远了。
- 一旦你明白了这个原理,就相对容易地重复同样的关于上帝存在的论点。
根据人们的证词,我们能相信奇迹的存在吗?
对于著名的苏格兰哲学家大卫·休谟来说,答案是响亮的“不”:
没有证词足以建立一个奇迹,除非证词是这样一种,它的谎言会比事实更神奇,它努力建立[2]
这很令人困惑。我们可以尝试用许多方法来解读它,但最有趣(也是最流行)的解释之一是贝叶斯理论。
让我们建立一些事件的定义:一个特殊的奇迹发生(M)和这样的奇迹见证记录(T)。我们可以使用相同的贝叶斯框架来构建给定一些证据的情况下,奇迹 真的 发生的条件概率。
为了阅读休谟,我们需要作出简化的近似,即 P(T|M)≈ P(∼M) ,因为两项都接近 1。这将允许我们简单地表述为:
稍加代数学,我们很容易看出 P(M|T) > 0.5 当且仅当P(M)>P(T | ~ M)。这正是休谟所说的“虚假[【P(T | ~ M)]比它试图建立的事实[【P(M)]更不可思议[小于]。”
这是基于休谟回应耶稣复活的证词的论点:
当任何人告诉我,他看到一个死人恢复了生命,我立即考虑自己,是否更有可能,这个人应该欺骗或被欺骗,或者他所涉及的事实,应该真的发生了。我权衡一个奇迹和另一个;根据我发现的优势,我宣布我的决定,总是拒绝更大的奇迹。[2]
他持怀疑态度的依据是复活的概率P(M =复活) 明显小于假见证的概率 P(见证|不复活) ,这就使得 P(复活|见证)< 0.5 。更一般地说,几乎不可能找到【P(M)>【P(T | ~ M)】的案例,所以我们永远无法可靠地将一个见证与一个原因——一个实际的奇迹——联系起来。
Left: David Hume. Right: Thomas Bayes — although many argues that it is not his portrait. Source: Wikipedia
我希望你能看到休谟论点的令人不安的本质。休谟认为,仅仅基于传统信仰、共存或证词,我们永远无法确定任何事情。在几篇震惊 1700 年欧洲知识界的文章中,休谟将这一观点发展得更远,他抨击了关于上帝存在的最古老的论点之一,即目的论论点。也就是说,一个智慧的创造者被自然界中被感知的故意设计所证明,上帝是万物的第一因。通过证明我们的归纳很少是可靠的,并彻底批判因果概念,休谟破坏了基督教信仰的核心原则。
3.休谟遗漏了什么:
这种解释的问题是,它没有认识到当我们听到奇迹的见证时,人类考虑的许多其他因素:
- 有多少独立的证词?根据约翰福音,至少有三个关于空坟墓的见证(抹大拉的马利亚、西门彼得和“耶稣所爱的另一个门徒”)
- 更大的问题是:我们需要多少不同的奇迹,才能确立上帝存在的条件概率?
让我们考虑多个独立证词的情况。考虑这个问题的一个好方法是对每个新来的人使用贝叶斯更新并作证。因此,我们得出了一个与上一部分中的日出示例非常相似的结果——其中条件概率收敛到 1。
在这里,让我们以稍微不同的方式处理这个问题,并尝试利用独立性假设来简化数学。假设对于一个特定的奇迹 M,一个人 i 将给出一个证词TI,我们为这个奇迹给出了 n 个证词建立了条件概率:
现在,假设这些证词是独立的(这是一个巨大的假设,我们知道在约翰的故事中这不是真的),并且有可能是真实的 p 或 P(T|M) = p 以及有可能是假的 q 或 P(T|~M) = q ,我们可以将这些术语简化如下:
这允许我们将条件概率简化为:
通常,我们会假设 q < p (即,当人们看到奇迹时,他们更有可能作证,而不是当他们没有看到奇迹时假装作证),这意味着当 n — > 0,(q/p)^n — > 0 时,条件概率接近 1。
另一个很酷的事实是,即使【P(M)可以很小,你总能找到 n 使得条件概率 > 0.5
关键是,无论你使用贝叶斯更新还是利用独立性假设,休谟的(已经有问题的)论点,即没有一个单独的证词是可靠的,并不排除合并证词是如此。
到目前为止,我所介绍的是用于对神学问题进行概率论证的基本结构。事实上,理查·斯温伯恩确实输入了一个数字,得出了一个令人欢呼的 97%的复活概率。我们可以很容易地把这个框架扩展到包括上帝的存在。例如,其中“ G ”代表“上帝存在”(其中“上帝”被经典地认为是创造了宇宙的最大力量、知识和善良的永恒存在),我们可以假设p(m|g)≫p(m |∞g)和p(m |∞g)= 0或p(m |∞g)
这种概率论证的问题是,即使数学完全说服了你,根据假设和设置,你也可以得出完全相反的结论。
然而,这篇文章旨在欣赏贝叶斯系统是如何错综复杂的美丽。怀疑论者大卫·休谟认为,从过去的经验中得出任何因果推论都是徒劳的,因为我们需要将过去外推至未来,而这是我们无法确定的。另一方面,贝叶斯——他认为理性在本质上是概率性的——会告诉休谟,如果一个人太温顺而不能理解自然,就不要责备自然;如果你走出怀疑的外壳,大胆地对它的行为做一些预测,也许你会离真相更近一点。
你可以在这里找到示例的源代码。
[1]麦克格雷因,莎伦·伯奇。不会消亡的理论:贝氏法则如何破解英格玛密码,追捕俄罗斯潜艇,并从两个世纪的争议中脱颖而出。耶鲁大学出版社,2011 年
[2]休谟,一个关于人类理解的询问 X,I,86
[3]史文朋,理查德,上帝化身的复活,牛津大学出版社,2003
Apache Spark 初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-apache-spark-ff301cb4cd92?source=collection_archive---------4-----------------------
Apache Spark 与 Hadoop MapReduce——优势、劣势以及何时使用
什么是阿帕奇火花?
由 Spark 的创造者创建的公司 Databricks 在他们的Apache Spark 电子书 ( 强烈推荐阅读本文末尾提供的 PDF 下载链接)中最好地总结了它的功能:
“Apache Spark 是一个统一的计算引擎和一组用于在计算机集群上进行并行数据处理的库。截至本文撰写之时,Spark 是针对该任务开发的最活跃的开源引擎;让它成为任何对大数据感兴趣的开发人员或数据科学家的事实上的工具。Spark 支持多种广泛使用的编程语言(Python、Java、Scala 和 R),包括用于各种任务的库,从 SQL 到流和机器学习,并且可以在任何地方运行,从笔记本电脑到数千个服务器的集群。这使得该系统易于启动,并可扩展至难以置信的大规模大数据处理。”
什么是大数据?
让我们看看 Gartner 广泛使用的大数据定义,这样我们就可以理解 Spark 如何选择解决与大规模实时处理大数据相关的诸多挑战:
“大数据是高容量、高速度和/或高多样性的信息资产,需要经济高效、创新的信息处理形式来增强洞察力、决策制定和流程自动化。”
The Complex World of Big Data
注意:这里的关键要点是,大数据中的“大”不仅仅是指容量。你不仅会得到大量数据,而且这些数据还会以复杂的格式从各种来源实时、快速地向你袭来。因此,大数据有三个 v-容量、速度和多样性。
为什么大多数大数据分析公司在听说 spark 的所有有用功能时都会“眼前一亮”?
根据我的初步研究,似乎有三个主要因素使 Apache Spark 成为大规模高效处理大数据的领导者,这促使许多处理大量非结构化数据的大公司在其堆栈中采用 Apache Spark。
- Spark 是处理大数据的统一一站式商店—“Spark 旨在支持广泛的数据分析任务,从简单的数据加载和 SQL 查询到机器学习和流计算,通过相同的计算引擎和一致的 API 集。这一目标背后的主要观点是,现实世界的数据分析任务——无论是 Jupyter 笔记本等工具中的交互式分析,还是生产应用程序的传统软件开发——往往会结合许多不同的处理类型和库。Spark 的统一性质使得这些任务编写起来更加容易和高效”( Databricks 电子书)。例如,如果您使用 SQL 查询加载数据,然后使用 Spark 的 ML 库对机器学习模型进行评估,引擎可以将这些步骤合并为对数据的一次扫描。此外,数据科学家 在建模时可以从一组统一的库(例如 Python 或 R)中受益,而 Web 开发人员可以从 Node.js 或 Django 等统一框架中受益。
- Spark 优化了其核心引擎的计算效率——“我们的意思是 Spark 只处理从存储系统加载数据并在其上执行计算,而不是永久存储本身。Spark 可以用于各种各样的持久存储系统,包括云存储系统,如 Azure Storage 和亚马逊 S3,分布式文件系统,如 Apache Hadoop,键值存储,如 Apache Cassandra,以及消息总线,如 Apache Kafka。然而,Spark 本身既不长期存储数据,也不支持其中任何一种。这里的主要动机是大多数数据已经驻留在混合存储系统中。移动数据的成本很高,因此 Spark 专注于对数据进行计算,无论数据位于何处”( Databricks 电子书)。Spark 对计算的专注使其不同于早期的大数据软件平台,如 Apache Hadoop。Hadoop 包括一个存储系统(Hadoop 文件系统,设计用于 Spark 4 商用服务器集群上的低成本存储)和一个计算系统(MapReduce),它们紧密集成在一起。然而,这种选择使得很难在没有其他系统的情况下运行一个系统,或者更重要的是,很难编写访问存储在其他地方的数据的应用程序。虽然 Spark 在 Hadoop 存储上运行良好,但它现在也广泛用于 Hadoop 架构没有意义的环境,如公共云(存储可以与计算分开购买)或流媒体应用。
- Spark 的库为它提供了非常广泛的功能 —如今,Spark 的标准库是开源项目的主体。自首次发布以来,Spark core 引擎本身几乎没有什么变化,但这些库已经发展到提供越来越多类型的功能,将其转变为多功能数据分析工具。Spark 包括 SQL 和结构化数据(Spark SQL)、机器学习(MLlib)、流处理(Spark 流和较新的结构化流)和图形分析(GraphX)的库。除了这些库,还有数百个开源外部库,从各种存储系统的连接器到机器学习算法。
Apache Spark vs . Hadoop MapReduce…应该用哪个?
简短的回答是——这取决于您的业务的特定需求,但根据我的研究,似乎 10 次中有 7 次答案是——火花。 对庞大数据集的线性处理 是 Hadoop MapReduce 的优势,而 Spark 则提供了 快速性能 、 迭代处理、 实时分析、图形处理、机器学习等更多 。
好消息是,Spark 与 Hadoop 生态系统完全兼容,并且可以与 Hadoop 分布式文件系统(HDFS) 、Apache Hive 等顺利协作。因此,当数据太大,Spark 无法在内存中处理时,Hadoop 可以通过其 HDFS 功能帮助克服这一障碍。下面是 Spark 和 Hadoop 如何协同工作的可视化示例:
https://www.quora.com/What-is-the-difference-between-Hadoop-and-Spark
上图演示了 Spark 如何通过 HDFS 读取和存储数据、 MapReduce 进行可选处理、 YARN 进行资源分配,从而利用 Hadoop 的最佳部分。
接下来,我将通过在两个之间进行一个简短的面对面的比较,来尝试突出 Spark 相对于 Hadoop MapReduce 的诸多优势。
Source: https://data-flair.training/blogs/spark-vs-hadoop-mapreduce/
速度
- Apache Spark — 它是一个快如闪电的集群计算工具。与 Hadoop 相比,Spark 通过减少对磁盘的读写周期数并在内存中存储中间数据,在内存和磁盘上运行应用的速度分别提高了 100 倍和 10 倍。
- Hadoop MapReduce—MapReduce从磁盘读写,减缓了 的处理速度和整体效率。
易用性
- Apache Spark—Spark 的许多库通过 (弹性分布式数据集) 方便了许多主要高级操作符的执行。
- Hadoop —在 MapReduce 中,开发人员需要手工编码每一个操作,这使得它更难以用于大规模的复杂项目。
处理大量数据
- Apache Spark—由于 Spark 通过将大部分数据存储在内存中而不是磁盘上来优化速度和计算效率,当数据变得如此之大以至于 RAM 不足成为一个问题时,它的性能可能不如 Hadoop MapReduce 。
- Hadoop—Hadoop MapReduce 允许并行处理海量数据。它将一个大数据块分成几个小数据块,在不同的数据节点上分别处理。如果结果数据集大于可用 RAM,Hadoop MapReduce 可能会优于 Spark。如果处理速度不重要 并且任务可以通宵运行以便在第二天早上生成结果,这是一个很好的解决方案。
功能
阿帕奇 Spark 是这一类无可争议的赢家。以下是 Spark 优于 Hadoop 的许多大数据分析任务列表:
- 迭代处理。如果任务是反复处理数据——Spark 打败 Hadoop MapReduce。Spark 的弹性分布式数据集(rdd)支持内存中的多个地图操作,而 Hadoop MapReduce 必须将临时结果写入磁盘。
- 接近实时处理。如果企业需要即时洞察,那么他们应该选择 Spark 及其内存处理。
- 图形处理。 Spark 的计算模型适用于图形处理中常见的迭代计算。Apache Spark 有 GraphX——一个用于图形计算的 API。
- 机器学习。Spark 有 ml lib——内置的机器学习库,而 Hadoop 需要第三方提供。MLlib 有现成的算法,也可以在内存中运行。
- 连接数据集。由于其速度,Spark 可以更快地创建所有组合,尽管如果需要加入需要大量洗牌和排序的非常大的数据集,Hadoop 可能会更好。
Spark 的众多功能及其与其他大数据引擎和编程语言的兼容性的直观总结如下:
source: https://www.quora.com/Is-Spark-a-component-of-the-Hadoop-ecosystem
- Spark Core — Spark Core 是大规模并行和分布式数据处理的基础引擎。此外,构建在核心之上的附加库允许流、SQL 和机器学习的不同工作负载。它负责内存管理和故障恢复,调度、分发和监控与存储系统交互的集群上的作业。
- 集群管理 —集群管理器用于获取执行作业的集群资源。Spark core 运行在不同的集群管理器上,包括 Hadoop YARN、Apache Mesos、Amazon EC2 和 Spark 的内置集群管理器。集群管理器处理 Spark 应用程序之间的资源共享。另一方面,Spark 可以访问 HDFS、Cassandra、HBase、Hive、Alluxio 和任何 Hadoop 数据源中的数据
- Spark Streaming—Spark Streaming 是 Spark 的组件,用于处理实时流数据。
- Spark SQL : Spark SQL 是 Spark 中的一个新模块,它将关系处理与 Spark 的函数式编程 API 集成在一起。它支持通过 SQL 或 Hive 查询语言查询数据。Spark SQL 的数据帧和数据集 API 为结构化数据提供了更高层次的抽象。
- GraphX 是用于图形和图形并行计算的 Spark API。因此,它用弹性分布式属性图扩展了火花 RDD。
- MLlib (机器学习):MLlib 代表机器学习库。Spark MLlib 用于在 Apache Spark 中执行机器学习。
结论
随着大数据的大规模爆炸和计算能力的指数级增长,Apache Spark 和其他大数据分析引擎等工具将很快成为数据科学家不可或缺的工具,并将迅速成为实时执行大数据分析和解决大规模复杂业务问题的行业标准。对于那些有兴趣深入研究所有这些功能背后的技术的人,请点击下面的链接并下载 Databricks 的电子书—“Apache Spark 的一个温和介绍”、“Apache Spark 的一个温和介绍”或“Apache Spark 的大数据分析”,下面是“T21”。
[## Apache Spark 简介
编辑描述
pages.databricks.com](https://pages.databricks.com/gentle-intro-spark.html?utm_source=databricks&utm_medium=homev2tiletest&_ga=2.185801641.1051240058.1550856188-1502813917.1547430685) [## Apache Spark 上的大数据分析
Apache Spark 凭借其先进的内存编程模型成为大数据分析的事实框架…
link.springer.com](https://link.springer.com/article/10.1007/s41060-016-0027-9)
初学者指南,建立自己的面部识别系统,让你的朋友溜出来
原文:https://towardsdatascience.com/a-beginners-guide-to-building-your-own-face-recognition-system-to-creep-out-your-friends-df3f4c471d55?source=collection_archive---------5-----------------------
人脸识别系统正稳步进入我们的日常生活。基于人工智能,它们可以(以不同程度的准确性)从人群中挑出你,并将你识别为导致各种后果的个体。根据你生活在世界的哪个地方,他们可以解锁你的手机屏幕,支付你的鸡肉,让你被捕,让你远离泰勒斯威夫特和找到你的梦中情人。
A toilet paper dispenser at a public toilet in Beijing deploys facial recognition to stop toilet paper thieves (Image source: AFP)
Poster for Metropolitan Police Facial Recognition trial in Central London (Image Source: Metropolitan Police)
Dating app Badoo showing profile matches for Jake Gyllenhall and Kendall Jenner (Image Source: Badoo)
但是这些系统实际上是如何工作的,它们有多精确,谁有权限部署它们?为了找到答案,让我们用免费的开源软件和朋友的照片自己做一个。
设置它——下载程序运行所需的一切
- 下载文本编辑器 Sublime Text ,完成后,打开它并遵循安装说明。我们将在这里编写代码,这些代码将成为程序。
- 查看您的计算机上是否已经安装了 Python 3。这是我们将要编写的编程语言。要为 MAC 打开终端(在应用程序的“实用工具”文件夹中)或 Windows 打开命令提示符(按 Windows + X 并选择命令提示符)执行此操作。然后键入以下内容并按 enter 键:
python3 -- version
如果它说 Python 3.7.3,忽略步骤 3。否则继续。
3.下载 Python 3 。对于 Windows,下载完成后,打开 python.exe 文件,在“修改”菜单下,确保勾选“pip”和“将 Python 添加到环境变量”,然后按“安装”。
4.再次进入终端或命令提示符,键入以下命令,在每一行后按 enter 键,安装我们需要的软件包。第四行“dlib”可能需要一段时间。
pip3 install cmake
pip3 install face_recognition
pip3 install numpy
pip3 install dlib
pip3 install opencv-python
如果最后一个命令要求您安装 Xcode(适用于 MAC),请前往 App Store 并安装。这可能需要一段时间,因为它非常大。然后重新输入最后一行(pip3 install opencv-python)并回车。
制作和运行程序
1.将这段开源代码复制并粘贴到 Sublime 文本中。点击图片底部的“查看原始数据”可能更容易做到这一点。
2.将此文件以 recognise _ face.py 的名称保存在计算机的桌面文件夹中,并创建一个名为 known_people 的文件夹(确保该文件夹也在桌面文件夹中)。
3.现在,我们可以通过在 known_people 文件夹中保存他们的面部图像来添加我们希望识别的人的照片。确保这个人面向前方,并且是照片中的唯一一个人(如果需要的话,修剪)。我们将每个文件命名为这个人的名字,因为我们希望它出现在屏幕上。在这种情况下,只有。将使用 jpg 文件。
4.现在,我们可以通过返回到终端(Mac)或命令提示符(Windows)来运行程序,编写以下内容并按 enter 键
cd Desktop
python3 recognise_face.py
如果出现错误消息,请尝试:
python recognise_face.py
在选择终端窗口的情况下按 Ctrl + c 将退出程序。
这里发生了什么事?
这篇由 Adam Geitgey 撰写的博客文章详细解释了这个系统是如何工作的(而且非常好)。
总而言之,人脸识别过程可以分为四个步骤。
- 检测帧中出现的任何人脸。
A Visualisation of a History of Gradients (HOG) algorithm for detecting faces
2.定位面部的特定点,例如鼻尖和每只眼睛的角落,以创建遮罩。然后移动蒙版,使其面向正前方,只使用保持原始形状的变换,如旋转和缩放。
Face goes through transforms to become aligned
3.编码。这一阶段是关于识别面部的关键部分(通过计算机的眼睛),对于同一个人的任何照片,这些关键部分都是相似的,而对于其他任何人的图像,这些关键部分都是不同的。对于人类来说,这可能是眼睛的颜色、发型、鼻子的形状等,但对于计算机视觉来说,有一个非常有效的 128 个测量值的集合,称为嵌入。这些测量是使用机器学习通过比较成千上万张标记人脸的图像发现的。然后,我们可以访问由该过程生成的预训练网络,以找到我们需要的测量值。
128 measurements to identify my face
4.将步骤 1 中检测到的人脸的 128 个测量值与 known_people 文件夹中图像的所有测量值进行比较。如果在这个文件夹中找到足够相似的一组测量值,那就是匹配!
这有多准确?
对于一组大约 30 张要识别的人脸,这种方法仍然有效。但是如果你刮下你所有脸书朋友的照片呢?由于普通用户有 338 个,这是一个更大的比较集,肯定会导致歧义?在下一篇博文中,我们将对此进行测试,考虑制作和利用这种应用程序的合法性,并进一步研究人脸识别技术的当前应用。
商业仪表板初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-business-dashboards-981a8192a967?source=collection_archive---------5-----------------------
说到仪表板,你可能会想到飞机或汽车的仪表板,驾驶员通过仪表组对主要功能进行监控。在商业智能领域,业务仪表板也有类似的作用。他们使用数据可视化随时显示关键业务运营的指标和执行情况,帮助管理者做出科学决策。
1.什么是业务仪表板?
业务仪表板是各种指标的图形显示,实时反映企业的运营状态,并将收集的数据可视化。
From FineReport
简而言之,业务经理可以在业务仪表板上看到他们做出决策所需的所有重要数据。就像飞机的仪表盘一样,通过各种常见的图表(速度计、量柱、预警雷达、雷达球等)显示公司运营的关键绩效指标。),让管理者可以直观的监控企业经营情况,对异常指标进行预警和数据挖掘分析。
From FineReport
2.业务仪表板的功能
因此,可以看出业务仪表板应该具有以下特征:
- 富指示器系统
- 直观显示系统
- 数据的及时性和真实性
- 完整的系统架构
3.业务仪表板的类型
那么,我们如何规划业务仪表板呢?
通常,仪表板的显示有特定的主题或分类。从战略的角度来看,从上到下有三种类型的业务仪表板:战略仪表板、分析仪表板和运营仪表板。
3.1 战略仪表板
战略仪表板的作用是让用户快速掌握公司的运营情况,并在此基础上做出决策,总结过去或制定未来的战略目标。这里的操作主要是过去发生过的操作。因此,战略仪表板不需要实时数据显示,而是对关键任务信息进行简单的可视化显示。这些简单直观的信息有助于管理者快速做出决策,定位和诊断不良运营中的问题。
战略仪表板可以帮助管理者随时报告结果,以便部门和公司能够朝着正确的方向努力实现目标。它类似于汽车和飞机的驾驶舱工具,使管理者随时清楚地知道他们在所驾驶的企业中采取了什么步骤。
From FineReport
3.2 分析仪表板
通过分析仪表板,管理者不仅可以看到表面信息,还可以调查表面现象的原因。通过数据钻取、联动、过滤等。,可以从现象入手,沿着数据脉络寻找原因。比如为什么销售业绩在下降,付款时间长的原因是什么?分析仪表板更多的是服务于中层管理者,他们实施战略到战术执行。因此,仪表板的设计需要直接反映问题,并按顺序对其进行分类,并将要采取的行动关联起来。
分析仪表板可以是战略性的,也可以是操作性的。主要区别在于信息化程度。它包含多个因素和变量之间基于时间的详细信息的比较。
From FineReport
3.3 操作仪表板
操作仪表板强调连续、实时的信息报告,因此其上数据的时效性相对较高。它用于监控每天的进度和产出,以确保预期计划与实现的实际绩效相匹配,即确保战略目标被分解为每天的任务。这样的仪表板允许我们在问题变成棘手的大风险之前及时解决问题,并帮助逐步提高性能。
运营仪表板的设计需要从业务需求出发,实现业务运营的提醒、监控和预警功能。
- KPI 监控:对关键绩效指标的监控可以确保我们对整体运营的控制。运营仪表板通过图形、表格等在显示器前显示业务、风险和绩效领域的核心指标。
- 阈值预警:伴随 KPI 监控的另一个因素必然是预警因素。可以通过用醒目的颜色(如红色、绿色、蓝色)突出背景、转速表等发出警报。
- 实时数据监控:部分行业的仪表盘要求对关键指标进行实时监控,如交易量监控、航班监控、地铁线路运营监控等。
From FineReport
4.业务仪表板模板
不同的行业和角色有不同的业务仪表板模板。不同层级的管理者关注的关键信息是不一样的。销售主管关注销售管理仪表板,财务主管关注资本运营仪表板。从行业来看,制造业、零售业、运输业、政府机构、电信、餐饮业的仪表盘设计也各不相同。
FineReport Demo 提供了多种常用的分析思路和模板。可以根据不同行业、不同角色、不同场景即时访问企业数据。您可以学习业界最佳的数据分析实践,并快速构建业务仪表盘。
教育行业模板
From FineReport
IOT 产业模板
From FineReport
金融主题模板
From FineReport
From FineReport
终于
如果你想学习制作业务仪表板,这里有一个数据可视化仪表板设计指南。而且你最好使用像 FineReport 这样的易用工具。它的个人版本是完全免费的。你也可以去它的官网查看更多的业务仪表盘模板!
您可能也会对…感兴趣
新手如何设计酷炫的数据可视化?
4 数据地图在商业分析中的应用
原载于 2019 年 7 月 10 日http://www.finereport.com。
卷积神经网络初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-convolutional-neural-networks-cnns-14649dbddce8?source=collection_archive---------3-----------------------
什么是卷积?
卷积是滤波器修改输入的方式。在卷积网络中,采用多个滤波器来分割图像,并逐个映射它们,学习输入图像的不同部分。想象一下,一个小滤镜从左到右从上到下滑过图像,移动的滤镜正在寻找,比如说,一个黑色的边缘。每次找到一个匹配,它就被映射到输出图像上。
https://www.cs.columbia.edu/education/courses/course/COMSW4995-7/26050/
例如,有一张 Eileen Collins 的照片,红色箭头上方的矩阵用作卷积来检测暗边缘。因此,我们看到的图像只强调了暗边。
请注意,图像的宽度和高度是二维的。如果图像是彩色的,它被认为具有 RGB 颜色的多一个维度。因此,2D 卷积通常用于黑白图像,而 3D 卷积用于彩色图像。
2D 卷积
让我们从没有填充的(4 x 4)输入图像开始,我们使用(3 x 3)卷积滤波器来获得输出图像。
第一步是用滤镜将输入图像中的黄色区域相乘。每个元素都与相应位置的一个元素相乘。然后你把所有的结果相加,就是一个输出值。
数学上是(2 * 1)+(0 * 0)+(1 * 1)+(0 * 0)+(0 * 0)+(0 * 0)+(0 * 0)+(0 * 1)+(1 * 0)= 3
然后,重复相同的步骤,将过滤器移动一列。你得到第二个输出。
请注意,您只移动了一列过滤器。滤光器滑过图像的步长称为步幅。这里,步幅是 1。重复相同的操作以获得第三个输出。步幅大于 1 将总是缩小图像。如果大小为 1,图像的大小将保持不变。
最后,您将得到最终的输出。
我们看到输出图像的尺寸小于输入图像的尺寸。事实上,大多数情况下都是如此。
3D 卷积
3D 卷积就像 2D,除了你要做 3 次 2d 工作,因为有 3 个颜色通道。
https://twitter.com/martin_gorner
通常,输出的宽度会变小,就像 2D 案例中输出的大小一样。
https://twitter.com/martin_gorner
如果您想要保持输出图像的宽度和高度不变,而不减小滤镜大小,您可以使用零向原始图像添加填充,并对图像进行卷积切片。
https://twitter.com/martin_gorner
我们可以应用更多的填充!
https://twitter.com/martin_gorner
完成后,结果如下所示:
https://twitter.com/martin_gorner
当您添加更多滤镜时,它会增加输出图像的深度。如果输出图像的深度为 4,则使用 4 个滤镜。每一层对应于一个滤波器,并学习一组权重。当它在图像上滑动时,它不会在各步之间改变。
https://twitter.com/martin_gorner
卷积的输出通道被称为特征图。它对其检测到的特征的存在与否和存在程度进行编码。注意,与之前的 2D 滤波器不同,每个滤波器连接到每个输入通道的。(问题?与 2D 不同,每个滤波器连接到每个输入通道是什么意思?)这意味着它们可以计算复杂的特征。最初,通过查看 R、G、B 通道,但是之后,通过查看诸如各种边缘、形状、纹理和语义特征的学习特征的组合。
平移不变量
另一个有趣的事实是,CNN 在某种程度上抵抗平移,例如图像移动一点,这将具有与移动前相似的激活图。这是因为卷积是一个特征检测器,如果它检测的是暗边缘,并且图像被移动到底部,那么暗边缘将不会被检测到,直到卷积被向下移动。
特例——1D 卷积
1D 卷积包括在这里,因为它通常解释不足,但它有值得注意的好处。
https://github.com/GoogleCloudPlatform/tensorflow-without-a-phd
它们用于减少深度(通道数)。在这种情况下,宽度和高度保持不变。如果要减少水平维度,可以使用池,增加卷积的步幅,或者不添加填充。1D 卷积计算输入通道或特征的加权和,这允许选择某些对下游有用的特征组合。1D 卷积压缩,因为只有一个它有相同的效果
联营
请注意,池化是与卷积分开的一个步骤。池用于减少图像的宽度和高度。请注意,深度由通道的数量决定。顾名思义,它所做的就是在一定大小的窗口中选择最大值。尽管它通常在空间上用于减少图像的 x,y 维度。
最大池
最大池用于通过取窗口中元素的最大值,将给定窗口的大小映射到单个结果来减小图像大小。
http://cs231n.github.io/convolutional-networks/
平均池
它与 max-pooling 相同,只是它对窗口进行平均,而不是选择最大值。
http://cs231n.github.io/convolutional-networks/
普通设置
为了实现 CNN,大多数成功的架构使用一个或多个具有 relu 激活的卷积+池层堆栈,然后是平坦层,然后是一个或两个密集层。
随着我们在网络中移动,要素地图在空间上变得更小,在深度上变得更深。要素变得越来越抽象,失去了空间信息。例如,网络知道图像包含一只眼睛,但不确定它在哪里。
这是一个典型的美国有线电视新闻网在喀拉斯的例子。
这是你做 model.summary()时的结果
让我们将这些层分解开来,看看我们如何获得这些参数值。
Conv2d_1
过滤器尺寸(3 x 3) *输入深度(1) *过滤器数量(32) +偏差 1/过滤器(32) = 320。这里,输入深度是 1,因为它是针对 MNIST 黑白数据的。请注意,在 tensorflow 中,默认情况下,每个卷积层都添加了偏差。
最大池 2d 1
池图层没有参数
Conv2d_2
过滤器尺寸(3 x 3) *输入深度(32) *过滤器数量(64) +偏差,每个过滤器 1(64)= 18496
扁平化 _1
它将上面的卷拆分成一个数组。
https://github.com/GoogleCloudPlatform/tensorflow-without-a-phd
密集 _1
输入维度(128) *输出维度(10) +每个输出神经元一个偏置(10) = 1290
摘要
卷积神经网络(CNN)是一种深度神经网络(DNN ),广泛用于计算机视觉或 NLP。在训练过程中,为了使网络达到最佳性能并尽可能准确地对图像和对象进行分类,网络的构建模块被反复改变。
来源
本教程基于约书亚·戈登在哥伦比亚大学的应用深度学习课程的讲座。令人惊叹的 3d 图像来自马丁·戈纳。
使用 GeoPandas 和 Matplotlib 在 Python 中创建 Choropleth 地图的初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-create-a-cloropleth-map-in-python-using-geopandas-and-matplotlib-9cc4175ab630?source=collection_archive---------2-----------------------
在搜索和展示重要见解时,数据可视化是一项重要的技能。有许多视觉效果可以用来展示你的数据。最有趣的数据图像之一是 choropleth 地图。
什么是 choropleth 地图?
choropleth map (源自希腊语χῶρος“区域/地区”和πλῆθος“大众”)是一种专题地图,其中区域根据地图上显示的统计变量(如人口密度或人均收入)的测量值成比例地进行阴影化或图案化。【https://en.wikipedia.org/wiki/Choropleth_map】来源:T4
Google Image search — choropleth
为什么这是如此有趣的视觉效果?a)它很漂亮,b)它告诉我们我们感兴趣的数据的确切位置,以及 c)它很漂亮!
介绍完毕后,让我们开始编写代码(以及代码的准备工作)。
第一步:安装所需的 Python 库
让我们安装几个在这个练习中需要的包。GeoPandas 是一个令人惊叹的包,它允许解析地理空间数据,从而将pandas
的数据框架提升到了一个新的水平。它将使用笛卡尔坐标生成 Matplotlib 图。
pip install descartes
pip install geopandas
pip install matplotlib
pip install numpy
pip install pandas
第二步:获取数据
在这个练习中,我们需要两种数据:
- 数据将被映射到位置/区域/地区等。我们可以免费使用大量的开放数据,其中一个来自维基百科(数据的准确性和有效性没有保证,但对于这个学习练习来说,没问题!).在这个练习中,我们将使用印度尼西亚每个省的城市和地区的数量。如果你愿意,你可以在这里检查它,但是我建议你只从我的 Github repo 下载它,因为需要一些手工操作(改变列名,数据格式等)。)这个我们就懒得在这里讨论了。
- 第二个数据是我们想要制作的地图的 shapefile。它基本上是一个几何位置列表(点、线或多边形)。由于我们想要绘制印度尼西亚的省份地图,我们将在这里下载印度尼西亚的行政区域,或者再次在我的 Github repo 中下载。
第三步:开始编码
现在,让我们直接进入代码
- 加载必要的库
import pandas as pd
import numpy as np
import geopandas as gpd
import matplotlib.pyplot as plt
2.加载并查看 shapefile 数据
fp = "IDN_adm/IDN_adm1.shp"
map_df = gpd.read_file(fp)
# check the GeoDataframe
map_df.head()
好的,如你所见,我们在下载的 shapefile 中有几个数据字段。我们感兴趣的是列NAME_1
(省名)和geometry
(省的形状)。您也可以看到,shapefile 以多边形的形式存储位置信息。让我们画出来,好吗
map_df.plot()
所以我们有印度尼西亚的地图,但是它看起来太小了,让我们调整它的大小
plt.rcParams['figure.figsize'] = [50, 70] #height, width
map_df.plot()
好多了,
3.加载省数据
province = pd.read_csv("data_province.csv", sep=";")
province.head()
如你所见,我们有各省、2015 年人口、城市数量和其他几个有趣的数字。我们现在要做的就是将数据与 shapefile 合并,然后我们就可以开始可视化这些数字了
4.合并并显示地图
# join the geodataframe with the csv dataframe
merged = map_df.merge(province, how='left', left_on="NAME_1", right_on="province")
merged = merged[['province', 'geometry', 'population_2015', 'area_km2', 'population_density_per_km2', \
'cities_regencies', 'cities', 'regencies']]merged.head()
酷,我们有了最清晰的数据格式,让我们来绘图
# set the value column that will be visualised
variable = 'cities_regencies'# set the range for the choropleth values
vmin, vmax = 0, 50# create figure and axes for Matplotlib
fig, ax = plt.subplots(1, figsize=(30, 10))# remove the axis
ax.axis('off')# add a title and annotation
ax.set_title('# of Cities per each Region', fontdict={'fontsize': '25', 'fontweight' : '3'})
ax.annotate('Source: Wikipedia - [https://en.wikipedia.org/wiki/Provinces_of_Indonesia', xy=(0.6,](https://en.wikipedia.org/wiki/Provinces_of_Indonesia',xy=(0.6,) .05), xycoords='figure fraction', fontsize=12, color='#555555')# Create colorbar legend
sm = plt.cm.ScalarMappable(cmap='Blues', norm=plt.Normalize(vmin=vmin, vmax=vmax))# empty array for the data range
sm.set_array([]) # or alternatively sm._A = []. Not sure why this step is necessary, but many recommends it# add the colorbar to the figure
fig.colorbar(sm)# create map
merged.plot(column=variable, cmap='Blues', linewidth=0.8, ax=ax, edgecolor='0.8')
很好,对吧?但还可以更好。例如,我们知道哪些位置的每个区域的城市数量多,哪些位置的每个区域的城市数量少。为了让情节更清晰,我们给它加上省份标签。在上述代码的底部添加以下代码。
# Add Labels
merged['coords'] = merged['geometry'].apply(lambda x: x.representative_point().coords[:])
merged['coords'] = [coords[0] for coords in merged['coords']]for idx, row in merged.iterrows():
plt.annotate(s=row['province'], xy=row['coords'],horizontalalignment='center')
好吧,这样更好。如果我们仔细看看,我们可以看到,根据维基百科,与其他省份相比,贾瓦人腾格里省每个地区的城市数量非常多。
我们可以做的另一个调整是将彩色地图图例的方向改为水平,以防您希望上面的空间集中在地图上。
只要修改这个代码
fig.colorbar(sm)
对此
fig.colorbar(sm, orientation="horizontal", fraction=0.036, pad=0.1, aspect = 30)
Final tweak
5.省省吧!
既然我们已经制作了 choropleth 地图,我们需要做的最后一件事就是以友好的流行格式保存它,比如。png
fig.savefig(‘map.png’, dpi=300)
就这些了,希望这个帖子有用。
你自己试试
你可以在我的 Github repo 这里下载这个练习的笔记本文件以及清理过的省份数据和印度尼西亚 shapefiles。
信用
这篇文章的灵感来自本杰明·库利的文章。
[## 让我们做一张地图吧!利用 Geopandas、pandas 和 Matplotlib 制作 Choropleth 地图
所以你想用 Python 做地图。我们开始吧!
towardsdatascience.com](/lets-make-a-map-using-geopandas-pandas-and-matplotlib-to-make-a-chloropleth-map-dddc31c1983d)
我对进一步学习和做一些事情很感兴趣,并且喜欢这些结果,因此我在这里分享它。😃
项目组合管理过程中的数据科学初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-data-science-in-the-portfolio-management-process-56d559a3d39?source=collection_archive---------20-----------------------
随着对工作中的统计计算的深入理解,投资组合优化变得简单。
Photo by Markus Spiske on Unsplash
一位潜在客户打电话来,要求投资 10,000,000 美元。投资组合经理/顾问如何决定股票、债券、现金、黄金、比特币或其他资产的适当组合?这位经理如何确保她所做的事情比猴子向镖靶投掷飞镖所取得的结果更好,或者更重要的是,更适合她的客户?
这些都是数据科学可以帮助回答的问题!
在投资组合管理过程的开始,投资组合经理需要理解他们客户的目标和约束,以便构建适当的资产分配。审查客户的目标和限制包括了解她的风险/回报偏好、流动性需求、投资时间范围、税收情况(资产位置可能是一个强有力的工具!)、特殊情况以及任何当前的法律问题。有了对这些目标和约束的坚实理解,项目组合的构建就可以开始了。
分析诸如流动性需求(无、当前、未来等)等分类输入。)、时间跨度(短期、长期等。),或者税收(纳税或者不纳税)在决策过程中融合在一起不在本博客讨论范围之内。相反,我写这篇博客的目的是探索关键的静态计算,如均值、协方差、相关性和标准差,它们与适当的投资组合构建/优化密切相关。
一个双资产投资组合的例子
考虑两只股票:A 和 B。管理投资组合 Z 是通过购买价值 60,000 美元的 A 和价值 40,000 美元的 B 构建的。我们如何使用我们对 A 和 B 的了解来预测 Z 的未来表现?暂且忽略风险,这很简单。
让我们将 A 和 B 的预期收益(分别表示为 E(A)和 E(B ))定义为 A 和 B 的总体均值。换句话说,E(A)等于自 A 首次公开发行以来 A 的平均回报率。
我们如何利用这些信息来预测我们管理的投资组合的预期回报,我们知道我们投资组合的权重是 60% A 和 40% B?公式是:
E(Z)= WA * E(A)+WB * E(B);其中 WX 是资产 X 在投资组合中的权重百分比。
为了便于说明,我们假设 E(A) = 15%,E(B) = 17.5%,这样我们管理的投资组合的预期回报率为 16%。
现在让我们关注风险。我们将使用标准差作为投资组合风险的代表。要理解标准差,我们首先需要理解什么是相关系数。相关系数是对两个数据集(在我们的示例 A 和 B 的性能中)之间线性关系强度的度量,其范围从-1 到 1。相关系数为 1 意味着存在完全正的线性关系(随着 A 的增加,B 也会增加),相关系数为-1 意味着存在完全负的线性关系(随着 A 的增加,B 会减少)。中间某处的相关值表示与指示方向的符号的线性关系的强度(或缺乏强度)。
那么,相关系数是怎么计算的呢?如果我们将相关系数表示为 p,则 p 计算如下:
p(x,y) = cov(x,y) / (std_x * std_y)
值得一提的是,cov(x,y)是随机变量 x 和 y 之间的协方差的缩写。根据符号,协方差显示 x 和 y 之间的线性关系的趋势(即变量显示相似的行为)。通过除以(std_x*std_y),我们对协方差进行标准化,以使其具有可比性(即,我们更关心线性关系的强度,而不是关系的趋势)。
一旦我们有了 p,求解我们投资组合的标准差(通过求方差的平方根)就很简单了。我们将投资组合的标准差表示为 rZ,因此投资组合的方差为:
r Z = Wx * r x+Wy * r y+2(Wx * rx)(Wy * ry)p(x,y)
为了便于说明,我们假设 A 的标准偏差为 20%,B 的标准偏差为 10%,A 和 B 的相关性为 0.85。使用我们上面的 rZ 公式,我们计算出我们管理的投资组合的预期标准差为 15.5%。
如果你有两项以上的资产呢?
买电脑。手工很难做到。也就是说,我们应该理解一个计算机程序在幕后做什么。
下面是在有效边界生成投资组合背后的方法,Investopedia 将其定义为:
…一组风险资产的最优投资组合,它们在规定的风险水平下提供最高的预期回报,或者在给定的预期回报水平下提供最低的风险。
让我们首先定义我们的输入参数:
- stock _ price _ data= m×n(读作“m 乘 n”)m 只股票的 m 个收盘价的矩阵
Matrix by Varun Divakar
- avg_stock_price =每只股票平均价格的 1 X n 矩阵。
Matrix by Varun Divakar
3.股票 _ 贬低 =单个股票价格的 m×n 矩阵减去该股票的平均价格。这给了我们一个衡量每个数据点离均值有多远的标准。
Matrix by Varun Divakar
4.协方差 _ 矩阵= m×n 矩阵,即股票 _ 降级矩阵乘以其转置的乘积。我们只关心结果矩阵的对角线(从左上到右下)。
Matrix by Varun Divakar
注:协方差矩阵从左上到右下的对角线代表个股的方差,如下图所示。
Matrix by Varun Divakar
- asset_weights =每个风险资产的分配权重的 n×1 矩阵
Matrix by Varun Divakar
计算投资组合的预期收益和预期风险
使用我们上面定义的输入,我们可以使用以下公式(z =投资组合)通过一些矩阵乘法计算预期投资组合回报和预期投资组合方差:
E(z) = MW*
r z = Wt (协方差矩阵) W;其中 Wt =的转置
rz = sqrt(r z)
现在,我们已经计算了投资组合的预期收益和预期标准差,我们可以通过改变矩阵 W 中的各个权重来生成数万个投资组合,并将这些投资组合绘制在散点图上,如下图所示:
Graph by Varun Divakar
使用上面的散点图,投资组合经理可以很容易地获得最符合其客户风险/回报目标的投资组合权重。最后,需要注意的是,寻求最佳风险调整回报的积极型经理应该关注上面用红星标出的投资组合(夏普比率最高的投资组合)。
一锤定音
投资组合的构建/优化起初看起来令人望而生畏。然而,通过对数学的扎实理解,人们可以轻松地理解什么是适当的分配。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
使用 Matplotlib 进行数据可视化的初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-data-visualization-using-matplotlib-22b15a0b090?source=collection_archive---------20-----------------------
如何创建和解释基本的数据可视化
介绍
本文的目的是简要介绍如何使用 Matplotlib,这是 Python 中最常用的绘图库之一。在本演练结束时,您将知道如何制作几种不同的可视化效果,以及如何处理一些情节的美感。本教程中使用的数据可以在这里找到。这个特定的数据集来自世界卫生组织收集的数据,它包含用于计算特定国家幸福得分的信息,如一个国家的 GDP、预期寿命和人民对该国政府腐败程度的看法。
在创建图表之前,让我们导入必要的库并检查数据集:
import pandas as pd
import matplotlib.pyplot as pltdf = pd.read_csv('WorldHappiness2018_Data.csv')
df.head()
由此,我们看到数据集是根据该国在幸福指数方面的总体排名排序的。“得分”之后的其余几栏,包括“残差”在内(此处未显示),相加得出一个国家的幸福总分。那么,期望每一栏中的值越高,通常表明一个国家的总体幸福指数越高,这是有道理的。
曲线图
线图可能是使用 Matplotlib 创建的最简单的图形。让我们创建一个图表来看看一个国家的排名和他们的幸福得分之间的关系。我们预计,排名最高的国家(排名最接近 1)幸福指数最高,排名最低的国家幸福指数最低。我们可以用四行简单的代码创建这个可视化。
rank = df['Rank']
score = df['Score']
这两行代码是数据帧的子集。第一个创建了一个只包含每个国家总体排名的序列。第二个创建了一个只包含每个国家幸福指数的序列。因为这些信息是从数据帧中提取的,所以您可以假设所有数据都将保存在它们的原始索引中,然后这些数据将正确地排列起来。
plt.plot(rank, score)
plt.show()
接下来的两行代码创建了实际的绘图。plt.plot()
命令创建一个折线图,传入的参数告诉函数使用什么数据。第一个,排名,将绘制在 x 轴上,第二个,得分,将绘制在 y 轴上。需要调用plt.show()
才能将图形实际打印到屏幕上。运行时,输出如下:
创建这个图表非常简单,它向我们展示了我们期望看到的东西。然而,这个图表有几个问题。如果你不是创建它的人,或者如果你在创建它一段时间后回头看它,你将不知道这个图表实际上显示的是什么。幸运的是,添加标题和轴标签非常简单。
plt.plot(rank, score)
plt.title('Happiness Score vs World Rank')
plt.xlabel('Country Rank')
plt.ylabel('Country Score')
plt.show()
这些命令非常简单明了,结果比第一个图表更容易理解。
向原始线图添加标签和标题非常简单,并且极大地改善了它的外观。有一个带标签的图表不仅更专业,而且更容易理解图表向我们展示了什么,几乎不需要额外的上下文或额外的解释。现在,如果我们想在同一张图表上考察多个变量与一个国家排名的关系,会发生什么呢?您所要做的就是用您想要作为 x 值的参数传递的两个不同的系列调用plt.plot()
两次,如下所示:
gdp = df['GDP_Per_Capita']
lifeExp = df['Healthy_Life_Expectancy']plt.plot(rank, gdp)
plt.plot(rank, lifeExp)
plt.show()
此代码输出以下视觉效果:
就像我们制作的第一张图表一样,我们并不知道这张图表告诉了我们什么。此外,我们不知道哪一行代表我们传入的哪个 x 参数。有两种可能的方法来处理这个问题。第一个将添加一个图例来告诉我们什么颜色的线代表哪个变量。
# Option 1
plt.plot(rank, gdp)
plt.plot(rank, lifeExp)
plt.title('World Rank vs GDP and Life Expectancy')
plt.xlabel('Country Rank')
plt.legend()
plt.show()# Option 2 plt.plot(rank, gdp, color = 'green')
plt.plot(rank, lifeExp, color = 'blue')
plt.title('World Rank vs GDP and Life Expectancy')
plt.xlabel('Country Rank')
plt.legend()
plt.show()
注意:为了获得两个输出,这些选项应该彼此分开运行。
现在我们知道哪条颜色线代表哪个变量。无论您是否选择为每个变量设置颜色,在可视化中包含一个图例几乎总是一个好主意,以便您可以快速识别哪条线代表哪个变量。从这个图表中,我们还可以直观地识别一个趋势。当我们进入较低的国家行列时,人均国内生产总值和预期寿命的值都较低,这对一个国家的整体幸福得分有所贡献。此外,我们可以看到,很多时候,当一个国家的人均国内生产总值达到峰值时,这个国家的预期寿命也会达到峰值。人均 GDP 和预期寿命的下降也是如此。
散点图
散点图是可视化两个变量之间关系的一种很好的方式,而没有我们可能从线形图中得到的疯狂趋势线的可能性。就像折线图一样,在 Matplotlib 中创建散点图只需要几行代码,如下所示。
plt.scatter(gdp, score)
plt.title('GDP vs Happiness Score')
plt.xlabel('GDP per Capita')
plt.ylabel('Happiness Score')
plt.show()
如果不添加标题和轴标签,只需两行代码就可以创建一个散点图。此代码创建以下散点图:
正如我们所料,人均 GDP 得分越高,某个国家的幸福指数越高。然而,这个图表有一个小问题。按照惯例,图表轴应该总是从 0 开始,只有少数例外。正如我们在这里看到的,这个图的最低 y 刻度为 3,这是误导。幸运的是,这很容易解决。我们所要做的就是在调用 plt.show()
之前添加一行 plt.ylim(0, 8)
,这个问题就解决了,如下所示:
这个图表给我们的理解与我们构建的第一个散点图略有不同。我们可以在人均 GDP 为 0 的情况下拥有幸福指数 3。如果你不注意第一张图中的 y 轴,你可能会认为人均 GDP 接近 0 意味着幸福指数接近 0,但事实并非如此。这告诉我们,影响一个国家幸福得分的还有其他因素,也是应该考察的。
散点图有助于识别数据中存在的线性关系。然而,在 Matplotlib 中,在散点图上添加回归线并不容易。我的下一篇文章将告诉您如何使用 Seaborn 轻松做到这一点。
直方图
直方图显示了数据的特定特征的分布。更简单地说,它向我们展示了有多少个观察值取某个值。就像线形图和散点图一样,基本的直方图很容易创建。
plt.hist(score)
plt.title('Happiness Score Distribution')
plt.xlabel('Happiness Score')
plt.ylabel('Frequency')
plt.show()
这个直方图是用五行简单的代码创建的。它告诉我们有多少个国家有各自的幸福指数。因为幸福指数是一个连续的数值范围,所以我们不能只看它就得到精确的数据,但是我们可以得到一个大概的概念。例如,大约有 15 个国家的幸福指数在 3 到 4 之间,幸福指数在 4.5 左右的国家数量最多(大约 25 个)。换个方式说,最常见的幸福分值是 4.5 左右的数值。
条形图
在 Matplotlib 中构建条形图比您想象的要稍微困难一些。这可以用几行代码来完成,但是理解这段代码在做什么很重要。
roundedHappinessScore = score.apply(int)
count = roundedHappinessScore.value_counts()
hapScore = count.indexplt.bar(hapScore, count)
plt.title('Happiness Scores')
plt.xlabel('Score')
plt.ylabel('Count')
plt.show()
最后五行代码非常简单,但是前三行发生了什么呢?第一行将所有的幸福分数转换成一个整数,这样幸福分数只能取几个离散值。第二行得到每个分数出现的次数。该计数将用作我们的条形图的高度。然后,第三行得到与每个计数相关的分数,它需要作为我们图表的 x 轴。运行时,此代码会生成以下条形图:
这个图表给出了一个与我们上面创建的柱状图略有不同的故事。解释起来要容易得多,我们在这里可以看到,有最多的观察结果的幸福指数为 5。因为我们使用 int() 函数进行了“四舍五入”,这意味着分数 5 可以是范围 5 ≤ x < 6 中的任何值。
结论
正如您所看到的,Matplotlib 是一种非常快速地创建简单可视化的好方法。大多数图形只需要几行代码就可以创建,并且可以通过美学上的修改使它们变得更好。有关 Matplotlib 的更多信息,请点击这里查看 API。本文使用的所有代码都可以在我的 Github 中找到。本文是关于创建数据可视化的简短系列文章的第一篇,请继续关注关于使用 Seaborn 和 Plotly 创建可视化的教程。
入门级数据科学面试初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-entry-level-data-science-interview-17eb3b431c81?source=collection_archive---------17-----------------------
利用数据洞察的机会从未像现在这样多。然而,在这一点上,我们没有足够的熟练员工来帮助我们理解这一切。因此,如果你想成为一名数据科学家,在未来的 10-15 年里与数据打交道,那么这就是你的机会。去赢得那些工作吧!
本博客将简要介绍你在参加数据科学入门级面试之前必须了解的概念。在整个博客中,我将涵盖一系列有助于入门级数据科学面试的主题、你需要掌握的领域知识以及额外收获:围绕我的面试主题的问题!!!
传统上,数据科学侧重于编程、数学、计算机科学和机器学习领域的知识,而我们恰恰会接受这些知识!
对于一个数据科学家来说,有无数的机会,这是我给一个新手数据科学家的指南。
1.编程语言
到目前为止,Python 和 R 是我在数据科学领域看到的最流行的。然而,一个好的 C/C++和 Java 的工作知识从来没有伤害!
计算机编程语言
大多数数据科学家对 Python 有一种隐藏的喜爱,因为 Python 有一些令人惊叹的库,如 NumPy、SciPy、Pandas、StatsModel、Matplotlib、Seaborn、Plotly,使工作变得更容易。Scikit-learn、TensorFlow、PyTorch 等机器学习模块是一些值得了解的好资源。
稀有
对于 R,把 ggplot 当做你的英雄!对于这里的所有数据分析师来说,R 很容易实现数据可视化,R 是您想要了解的可视化内容。如果你的数据可视化首选语言是 R,那么像 ggplot、Latttice、Highcharter、Plotly、heat、dygraphs 这样的软件包在面试中,或者当你解释如何用 R 可视化热图时,肯定会很方便。
问题:
- 告诉我一些 Python 中可以用于逻辑回归的库?
- 如果你有两个变量 x 和 y,你怎么知道它们的相关性?
- 你怎么知道一个变量是否独立?
- 用 Python 写一个代码来查看一个数据集的前 10 条记录
2.数学
现在,数学可能不是每个人的强项,但作为一名数据科学家,你需要在统计、线性代数、概率和微积分方面表现出色。就是这样!
统计数字
统计学是一个数学领域,您通常会使用它来分析和可视化数据,以便从数据中发现、推断和提出有用的见解。箱线图、散点图、密度图、条形图、直方图帮助。然而,R 使任务更容易可视化和导出关系,而不是在移动计算器上计算 120 个记录的平均值:/
线性代数
线性代数主要用于机器学习和深度学习,用于理解算法在后端如何工作。基本上,它都是关于向量和矩阵运算,通过矩阵和向量空间的数据表示。我不太喜欢有人在面试中问数学问题,但你必须回答你必须回答的问题。
结石
机器学习中的微积分(以及深度学习)主要用于制定用于训练数据模型和算法的函数,以完成目标、计算损失/成本/目标函数并导出标量/向量关系。
可能性
贝叶斯定理。作为一名数据科学家,即使在睡梦中你也会知道这个问题的答案。然后,一些随机变量和概率分布
我被要求在一张纸上写下贝叶斯定理!
3.数据库管理
对于那些整天与数据打交道的数据科学家来说,数据库知识是必备的。数据科学家通常会选择两条不同的道路:数学或数据库管理。双重嵌套的 SQL 查询可能是你在一次噩梦般的面试中被要求写的东西。
也就是说,了解一些查询优化、关系数据库模式、数据库管理、评估成本、索引是很重要的。SQL 和 noSQL 系统的工作知识有助于面试。
出于一些奇怪的原因,在我的三次面试中,我被问到一个类似的关于数据库索引的问题。
问题:
- 假设,你有一个包含 56000 个公民记录的数据集,你必须找到年龄为 80 岁的公民。你会怎么做?
- 你知道数据库管理系统中的 ACID 属性吗?
- 什么是关联查询?
4.机器学习
对于初学数据的科学家来说,理解机器学习是数据科学的一部分是一个起点。它从统计学和算法中提取一些方面来处理从多种资源中生成和提取的数据。当你访问任何一个网站时,你都会生成数据,接下来会发生的是,大量的数据被生成,然后被处理。这就是机器学习开始发挥作用的时候。
机器学习是系统在没有人类偏见的情况下自主学习和处理数据集的能力。这是通过构建复杂的算法和技术来实现的,如回归、监督学习、聚类、朴素贝叶斯等。
首先要考虑的主题:
- 分类
- 回归
- 强化学习
- 深度学习
- 使聚集
- 分割
- 推荐系统(也许)
- 维度建模
对上述主题的初步了解将有助于开始。你总能想到使用机器学习算法的例子/应用。比如,网飞推荐系统或垃圾邮件过滤、欺诈和风险检测、高级图像识别等等..
5.基本定义
有时,像普通概念这样的基本概念可能会引发详细的对话。所以,在我与百事公司的面试中,有人问我是否可以在上说通过数据讲故事。我从直观结果的可视化数据的角度来看待它,接下来的 15 分钟是讨论数据可视化、基础知识、数据清理和数据感知。
我建议了解以下数据术语的确切含义,这样当出现一个与此相关的问题时,您就可以开始提问了!
a.数据分析
数据分析是一个学习、探索、检查、转换和建模数据的过程,目的是发现有用的信息并得出有洞察力的结果。数据分析对企业来说是最重要的,因为它可以根据事实智能、快速地做出决策,以支持公司地位的可视化表示。
b.数据争论
数据争论是将数据从原始数据形式转换和映射为更好的格式的过程,目的是使其更容易理解、更合适,并为各种下游目的(如分析)的进一步处理做好准备。
c.数据清理
顾名思义,数据清理就是
- 删除不寻常的数据出现(在一年的经验字段中不寻常的大量)
- 检测数据类型中的错误(比如性别输入字段中写的 127)
- 从记录集或数据库中更正损坏或不准确的记录($#@%而不是 34325)
- 填写不完整、不正确、不准确或不相关的数据部分(性别字段中缺少数据)
- 替换、修改或删除有噪声或粗糙的数据
d.探索性数据分析
EDA 是一种将数据简化为更小的汇总变量集的方法,并使用这些结果来:
- 最大化数据集的洞察力
- 揭示变量之间的潜在关系
- 提取对可视化重要的变量
- 检测异常值和异常值(非常重要!)
- 测试潜在的假设
- 确定最佳模型结构
除了所有这些知识之外,您还必须了解您所使用的 ide 和工具。
集成驱动电子设备
- 皮查姆
- 朱皮特
- Google CoLab
- Spyder
- r 工作室
工具
- (舞台上由人扮的)静态画面
- PowerBI
- 斯堪的纳维亚航空公司
- 阿帕奇火花
- 矩阵实验室
- 张量流
- 自动警报系统
- 蔚蓝的
你可能不一定知道所有的事情,但是要确保你知道的是那个袋子里的最后一粒。入门级数据科学面试要求你具备所有必需的知识。我的建议是建立正确的基础,关注基础。
为了练习,让自己在网上可见。写博客,创建回复,参与数据挑战和黑客马拉松,为开源做贡献。根据你想要的工作和你的热情,加上你刚刚阅读的面试指南,我相信你会得到最好的工作!
感谢您的阅读!如果你喜欢这篇文章,点击鼓掌按钮,让我知道我被问到的问题的答案!数据帐篷快乐!
了解你的作者
Rashi 是一名研究生,也是一名数据分析师、用户体验分析师和顾问、技术演讲者和博客作者!她渴望建立一个组织,将商界女性与资源海洋联系起来,让她们对工作和世界充满热情,无所畏惧。请随意给她留言这里!
卡格尔泰坦尼克号问题初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-kaggle-s-titanic-problem-3193cb56f6ca?source=collection_archive---------1-----------------------
Image source: Flickr
因为这是我的第一篇文章,这里简单介绍一下我一直在做的事情:
我是一名软件开发人员,后来变成了数据爱好者。我最近开始了解数据科学的本质。当我开始通过 Udemy、Coursera 等网站上的视频和课程学习时,最突出的挑战之一就是。这让我变得被动,我听得更多,做得更少。我没有实践经验,尽管我能理解大部分理论。
就在那时,我遇到了 Kaggle,这是一个由多家大型科技公司(如谷歌)主办的网站,提供一系列数据科学问题和竞赛。在世界范围内,Kaggle 以其有趣、具有挑战性和非常非常令人上瘾的问题而闻名。其中一个问题是泰坦尼克号数据集。
总而言之,泰坦尼克号问题是基于 1912 年初“不沉之船”泰坦尼克号的沉没。它给你提供关于多人的信息,比如他们的年龄、性别、兄弟姐妹数量、登机点以及他们是否在灾难中幸存。基于这些特征,你必须预测泰坦尼克号上的任意一名乘客是否能在沉没中幸存。
听起来很简单,对吧?
没有。
问题陈述仅仅是的冰山一角。
使用的库
- 熊猫
- 海生的
- Sklearn
- WordCloud
铺设土地
初始阶段处理完整数据集的特征。在这里,我没有试图塑造或收集这些特征,只是观察它们的品质。
1.聚合
我最初聚集了来自训练和测试数据集的数据。得到的数据集有 1309 行和 12 列。每一行代表了 RMS 泰坦尼克号上的一个独特的乘客,每一列描述了每个乘客不同的有价值的属性。
*trd = pd.read_csv('train.csv')
tsd = pd.read_csv('test.csv')td = pd.concat([trd, tsd], ignore_index=True, sort = False)*
2.缺少值
数据集有几列缺少值。“Cabin”属性缺少 1014 个值。描述通勤者登机点的列“已登机”总共有 2 个缺失值。属性“Age”有 263 个缺失值,列“Fare”有一个缺失值。
*td.isnull().sum()sns.heatmap(td.isnull(), cbar = False).set_title("Missing values heatmap")*
3.种类
此外,为了理解分类和非分类特性,我查看了每一列中唯一值的数量。属性“性别”和“幸存”有两个可能的值,属性“上船”和“Pclass”有三个可能的值。
*td.nunique()PassengerId 1309
Survived 2
Pclass 3
Name 1307
Sex 2
Age 98
SibSp 7
Parch 8
Ticket 929
Fare 281
Cabin 186
Embarked 3
dtype: int64*
特征
在对数据集的不同方面有了更好的理解后,我开始探索这些特征以及它们在旅行者的生存或死亡中所起的作用。
1.幸存
第一个特写报道了一个旅行者的生死。一项比较显示超过 60%的乘客已经死亡。
2.Pclass
此功能呈现乘客分区。游客可以选择三个不同的区域,即一级、二级和三级。第三类的通勤人数最多,其次是第二类和第一类。三等舱的游客人数比一等舱和二等舱的乘客人数加起来还多。一级旅行者的生存机会高于二级和三级旅行者。
3.性
大约 65%的游客是男性,其余 35%是女性。然而,女性幸存者的比例高于男性幸存者。超过 80%的男性通勤者死亡,相比之下,约 70%的女性通勤者死亡。
4.年龄
船上最小的旅行者大约两个月大,最大的旅行者 80 岁。船上游客的平均年龄不到 30 岁。显然,10 岁以下儿童存活的比例比死亡的比例大。或其他年龄组,伤亡人数高于幸存者人数。20 至 30 岁年龄组中有超过 140 人死亡,而同年龄组中只有大约 80 人幸存。
5.SibSp
SibSp 是船上一个人的兄弟姐妹或配偶的数量。最多有 8 名兄弟姐妹和配偶与其中一名旅行者同行。超过 90%的人独自或与他们的兄弟姐妹或配偶之一一起旅行。如果一个人和两个以上的兄弟姐妹或配偶一起旅行,生存机会会急剧下降。
6.烤
与 SibSp 类似,该功能包含每位乘客同行的父母或孩子的数量。最多有 9 名父母/子女与其中一名旅行者同行。
我添加了“Parch”和“SibSp”值的数量,以存储在名为“Family”的新列中
*td['Family'] = td.Parch + td.SibSp*
此外,当一个旅行者独自旅行时,生存的机会会直线上升。创建了另一列,Is_Alone,如果“Family”列中的值为 0,则赋值为 True。
*td['Is_Alone'] = td.Family == 0*
7.票价
通过把车费分成四类,很明显,费用和生存之间有很强的联系。游客支付的费用越高,生存的机会就越大。
我将分离的费用存储到一个新的列 Fare_Category 中
*td['Fare_Category'] = pd.cut(td['Fare'], bins=[0,7.90,14.45,31.28,120], labels=['Low','Mid', 'High_Mid','High'])*
8.从事
apollowed 暗示旅行者从哪里出发。Embark 有三个可能的值— 南安普敦、瑟堡和皇后镇。超过 70%的人是从南安普敦上船的。不到 20%的乘客从瑟堡登机,其余的从皇后镇登机。从瑟堡登船的人比从南安普敦或皇后镇登船的人有更高的生还机会。
值得注意的是,我们没有使用“Ticket”列。
数据插补
数据插补是用一些替代值替换缺失数据的做法。可以使用多种替代方法。我用它们中的一些来弥补缺失的值。
1.从事
由于“登船”只有两个缺失值,并且从南安普敦登船的通勤者人数最多,因此从南安普敦登船的概率更高。所以,我们用南安普敦来填充缺失的值。然而,我们不是手动输入 Southampton,而是找到 apollowed 列的模式并用它替换丢失的值。众数是一个序列中出现频率最高的元素。
*td.Embarked.fillna(td.Embarked.mode()[0], inplace = True)*
2.小木屋
因为“小屋”一栏有很多缺失的数据。我决定将所有缺失的数据归为不同的类别。我把它命名为 NA。我用这个值给所有缺失的值赋值。
*td.Cabin = td.Cabin.fillna('NA')*
3.年龄
年龄是最难填写的一栏。年龄有 263 个缺失值。我最初是根据人们的称呼来给他们分类的。一个基本的 Python 字符串分割足以从每个名字中提取标题。有 18 个不同的标题。
*td['Salutation'] = td.Name.apply(lambda name: name.split(',')[1].split('.')[0].strip())*
然后,我将这些标题按照性别和类别进行了分类。
*grp = td.groupby(['Sex', 'Pclass'])*
然后在缺失的行中替换该组的中间值。
*grp.Age.apply(lambda x: x.fillna(x.median()))
td.Age.fillna(td.Age.median, inplace = True)*
编码
由于字符串数据不适合机器学习算法,我需要将非数字数据转换成数字数据。我用 LabelEncoder 对“性别”一栏进行了编码。标签编码器会用某个数字代替“男性”值,用某个不同的数字代替“女性”值。
*td['Sex'] = LabelEncoder().fit_transform(td['Sex'])*
对于其他分类数据,我使用熊猫的假人。它添加对应于所有可能值的列。因此,如果有三个装载值——Q、C、S,get_dummies 方法将创建三个不同的列,并根据装载点分配值 0 或 1。
*pd.get_dummies(td.Embarked, prefix="Emb", drop_first = True)*
删除列
此外,我删除了预测中不需要的列以及通过创建虚拟列而编码的列。
*td.drop(['Pclass', 'Fare','Cabin', 'Fare_Category','Name','Salutation', 'Deck', 'Ticket','Embarked', 'Age_Range', 'SibSp', 'Parch', 'Age'], axis=1, inplace=True)*
预言;预测;预告
这是一个分类问题的例子,我试着用两种算法预测—
- 随机森林
- 高斯朴素贝叶斯
我对结果感到惊讶。高斯朴素算法表现不佳,而另一方面,随机森林的预测准确率始终在 80%以上。
*# Data to be predicted
X_to_be_predicted = td[td.Survived.isnull()]
X_to_be_predicted = X_to_be_predicted.drop(['Survived'], axis = 1)
# X_to_be_predicted[X_to_be_predicted.Age.isnull()]
# X_to_be_predicted.dropna(inplace = True) # 417 x 27#Training data
train_data = td
train_data = train_data.dropna()
feature_train = train_data['Survived']
label_train = train_data.drop(['Survived'], axis = 1)##Gaussian
clf = GaussianNB()
x_train, x_test, y_train, y_test = train_test_split(label_train, feature_train, test_size=0.2)
clf.fit(x_train, np.ravel(y_train))
print("NB Accuracy: "+repr(round(clf.score(x_test, y_test) * 100, 2)) + "%")
result_rf=cross_val_score(clf,x_train,y_train,cv=10,scoring='accuracy')
print('The cross validated score for Random forest is:',round(result_rf.mean()*100,2))
y_pred = cross_val_predict(clf,x_train,y_train,cv=10)
sns.heatmap(confusion_matrix(y_train,y_pred),annot=True,fmt='3.0f',cmap="summer")
plt.title('Confusion_matrix for NB', y=1.05, size=15)*
*##Random forest
clf = RandomForestClassifier(criterion='entropy',
n_estimators=700,
min_samples_split=10,
min_samples_leaf=1,
max_features='auto',
oob_score=True,
random_state=1,
n_jobs=-1)
x_train, x_test, y_train, y_test = train_test_split(label_train, feature_train, test_size=0.2)
clf.fit(x_train, np.ravel(y_train))
print("RF Accuracy: "+repr(round(clf.score(x_test, y_test) * 100, 2)) + "%")result_rf=cross_val_score(clf,x_train,y_train,cv=10,scoring='accuracy')
print('The cross validated score for Random forest is:',round(result_rf.mean()*100,2))
y_pred = cross_val_predict(clf,x_train,y_train,cv=10)
sns.heatmap(confusion_matrix(y_train,y_pred),annot=True,fmt='3.0f',cmap="summer")
plt.title('Confusion_matrix for RF', y=1.05, size=15)*
*RF Accuracy: 78.77%
The cross validated score for Random forest is: 84.56*
最后,我创建了一个提交文件来存储预测的结果。
*result = clf.predict(X_to_be_predicted)
submission = pd.DataFrame({'PassengerId':X_to_be_predicted.PassengerId,'Survived':result})
submission.Survived = submission.Survived.astype(int)
print(submission.shape)
filename = 'Titanic Predictions.csv'
submission.to_csv(filename,index=False)
print('Saved file: ' + filename)*
下面的代码行特别重要,因为如果幸存值不是 int 数据类型,Kaggle 会认为预测是错误的
*submission.Survived = submission.Survived.astype(int)*
Submission result
完整的实现 Jupyter 笔记本可以在我的 GitHub 或者 Kaggle 上找到。提交的作品让我进入了前 8%的参赛者。这并不容易,我尝试了 20 多次才到达那里。我会说关键是要善于分析,玩转分析,凭直觉去尝试一切,不管这听起来有多荒谬。
神经网络初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-neural-networks-d5cf7e369a13?source=collection_archive---------9-----------------------
用每个非技术人员都能理解的术语进行分解
Photo by Fré Sonneveld on Unsplash
“神经网络是一种技术,它不是一种算法,而是一个有权重的网络,你可以调整权重,以便它学习。你通过试验来教授它。”—霍华德·莱茵戈德
Ai 来了,AI 来了。
这就是这些天我们所听到的,以及它将如何严重影响每个人的生活。工作将会失去,人类将会被各行各业的机器所取代,还有许多其他在杂志和博客上写的末日预言。
有多少人知道世界上有哪些人工智能?
这篇文章将涵盖其中的一个方面,神经网络初学者指南。我们将看看什么是神经网络,它们如何运作,有哪些不同的类型,以及它们如何能够并将如何影响我们的生活。
让我们先来看看这些网络是什么。
什么是神经网络
人工神经网络 (ANN)是受构成动物大脑的生物神经网络启发但又不完全相同的计算系统。这种系统通过考虑例子来“学习”执行任务,通常没有用特定于任务的规则来编程。
他们通过观察一个物体的例子来学习,比如一只猫或一幅画,并识别某些特征,这样他们就可以在其他图像中确定这个物体。这些网络不需要知道它们正在分析的对象的任何信息。他们足够聪明,可以查看一些例子,并快速对事物进行分类,做出预测等。
现在你知道什么是神经网络,让我们看看它们是如何工作的。
它们是如何工作的?
神经网络由神经元驱动,神经元是排列在一系列相互连接的层中的微小单元。其中一层被称为输入单元,它被设计用来从外界接收不同形式的信息,然后进行识别、解释和分类。另一个单元是输出,位于网络的另一端,等待处理的结果。在输入和输出之间是隐藏的单元,它们执行大部分工作,决定如何处理输入的信息。
一个单位和另一个单位之间的联系称为权重,可以是正的,也可以是负的。每个单元从其左侧的单元接收输入,这些输入乘以它们所经过的连接的权重。每个单元将它接收到的所有输入相加,如果总和超过某个阈值,该单元就会“触发”并触发它所连接的单元。
神经网络通过接收反馈并告诉它是对还是错来学习。根据反馈,网络将进行调整以纠正错误。想想棒球中的一名击球手面对一名投手,他挥棒三振出局。他将回到休息区,思考他做错了什么。下次他站起来面对投手时,他会记得自己做错了什么,并做出相应的调整。
神经网络具有极强的适应性,学习能力强,并且有多种多样的类型,我们接下来会讲到。
神经网络的类型
根据原理、参数和数学运算,神经网络有许多不同的类型。他们每个人都有自己的长处和短处,学习的东西也不一样。我们探索当今最常用的类型以及它们的用途。
1.前馈神经网络–这可能是最简单的网络,也最容易理解。数据从输入端只向一个方向前进,直到到达输出端。在此过程中,计算输入和权重的乘积之和。最终结果被传递到输出端进行处理。
这些主要用于面部识别和计算机视觉,并被配备来处理包含大量噪声的数据。
2.递归神经网络(RNN)长短期记忆——这个网络保存特定层的输出,并将其反馈到输入中。第一层以与前馈神经网络相同的方式形成,计算输入和权重的总和。然而,在之后的层中,循环过程开始了。
在每一步中,节点将记住它在前一步中拥有的一些信息。它在计算和执行操作时充当存储单元。神经网络开始时与前馈网络一样,但记住信息以备后用。
这种类型的神经网络在语音到文本转换技术中非常有效。
3.径向基函数神经网络–该网络考虑了任意点相对于中心的距离。它们有两层,内层和外层。内层具有结合径向基函数的特征。径向基函数是实值函数,其值取决于输入和某个固定点(原点或中心)之间的距离。接下来,在下一时间步计算相同的输出时,考虑这些特征的输出。
径向基函数神经网络主要用于电力恢复系统。多年来,电力系统变得越来越大,越来越复杂,使得这个网络更加复杂。
可以看到,径向基函数神经网络和递归神经网络以相同的方式处理项目。
4.卷积神经网络(CNN)——这些网络的主要目的是从输入图像中提取特征。卷积通过使用输入数据的小正方形来学习图像特征,从而保留像素之间的空间关系。它由一个或多个卷积层和使用绑定权重和池层的完全连接层组成。
这些网络用于计算机视觉应用、物体识别应用,如机器视觉和自动驾驶车辆。
5.感知器–是一种二进制分类器的监督学习算法,使神经元能够一次一个地学习和处理训练集中的元素。换句话说,它执行计算来检测特征,并决定输入是否属于某个特定的类别。感知器主要有两种:单层感知器和多层感知器。它们都被归类为前馈神经网络,因为它们只向一个方向移动。
a. 单层感知器–不具有任何输入的先验知识,因此初始权重是随机分配的。感知器将所有加权输入相加,如果总和高于阈值,则认为感知器被激活。将输入值呈现给感知器,如果预测输出与期望输出相同,则认为性能令人满意,并且不对权重进行改变。但是,如果输出与所需输出不匹配,则需要更改权重以减少误差。
b. 多层感知器——结构与单层相同,但增加了一个或多个隐藏层。该算法由两个阶段组成:前向阶段,其中激活从输入层传播到输出层;后向阶段,其中输出层中观察到的实际值和请求的标称值之间的误差向后传播,以便修改权重和偏差值。
这些神经网络是如何使用的?
我们上面讨论的所有神经网络都是为发现数据中的模式而设计的。整理这些模式的具体任务是聚类、分类和预测。所有这些任务都解决了可用于许多领域的特定问题,例如财务、销售、营销和安全。
从预测股市每天的表现到使用面部识别软件抓住罪犯,一切都是通过神经网络来完成的。
这些网络可以利用聊天机器人、目标营销和市场细分等工具用于营销目的。我在前面的文章中提供了一些真实世界的例子,以及在哪里实现它。
在接下来的几年里,神经网络将在生物医学系统中实现,用于追踪疾病或预测一个人有多大比例可能倾向于某种遗传特征或异常。
结论
就像保罗·里维尔(Paul Revere)著名的骑马警告人们英国人来了一样,人工智能不仅在路上,而且就在这里。但是不像红色外套的到来,没有人会担心他们的生命。
这是对这些不断发展的技术的介绍,它告诉你什么是神经网络,它们是如何工作的,不同的类型以及它们今天是如何被使用的。我们都应该从这些网络所提供的东西中受益,而不要害怕一些我们不熟悉的技术的影响。
使用 NLP 预处理文本数据的初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-preprocessing-text-data-using-nlp-tools-5cb52a8d3cd?source=collection_archive---------17-----------------------
用于预处理从 Twitter 获得的推文的代码
Source: https://www.blumeglobal.com/learning/natural-language-processing/
下面我概述了我用来预处理自然语言处理项目的代码。这个代码主要用于分类者从 Twitter 上获得的 tweets。我希望本指南能够帮助有抱负的数据科学家和机器学习工程师,让他们熟悉一些非常有用的自然语言处理工具和步骤。
要导入的包
from nltk.stem import LancasterStemmer, SnowballStemmer, RegexpStemmer, WordNetLemmatizer
#this was part of the NLP notebookimport nltk
nltk.download('punkt')#import sentence tokenizer
from nltk import sent_tokenize#import word tokenizer
from nltk import word_tokenize#list of stopwords
from nltk.corpus import stopwordsimport string
处理表情符号
import emoji#checking if a character is an emoji
def char_is_emoji(character):
return character in emoji.UNICODE_EMOJI#does the text contain an emoji?
def text_has_emoji(text):
for character in text:
if character in emoji.UNICODE_EMOJI:
return True
return False#remove the emoji
def deEmojify(inputString):
return inputString.encode('ascii', 'ignore').decode('ascii')
删除标点符号
punct =[]
punct += list(string.punctuation)
punct += '’'
punct.remove("'")def remove_punctuations(text):
for punctuation in punct:
text = text.replace(punctuation, ' ')
return text
下面的函数被用来为我工作的分类器项目对 tweets 进行大量的预处理。这应该同样适用于您可能正在从事的其他 NLP 项目。上面的功能会在下面辅助。
函数完成了大部分预处理工作,为了便于理解,已经将其注释掉了
def nlp(df):
# lowercase everything
# get rid of '\n' from whitespace
# regex remove hyperlinks
# removing '>'
# check for emojis
# remove emojis
# remove punctuation
# remove ' s ' from removing punctuation # lowercase everything
df['token'] = df['tweet'].apply(lambda x: x.lower())
# get rid of '\n' from whitespace
df['token'] = df['token'].apply(lambda x: x.replace('\n', ' '))
# regex remove hyperlinks
df['token'] = df['token'].str.replace('http\S+|[www.\S+'](http://www.\S+'), '', case=False)
# removing '>'
df['token'] = df['token'].apply(lambda x: x.replace('>', ''))
# Checking if emoji in tokens column, use for EDA purposes otherwise not necessary to keep this column
df['emoji'] = df['token'].apply(lambda x: text_has_emoji(x))
# Removing Emojis from tokens
df['token'] = df['token'].apply(lambda x: deEmojify(x))
# remove punctuations
df['token'] = df['token'].apply(remove_punctuations)
# remove ' s ' that was created after removing punctuations
df['token'] = df['token'].apply(lambda x: str(x).replace(" s ", " ")) return df
使用空间的词汇化
import spacy
from spacy.lemmatizer import Lemmatizer
from spacy.lookups import Lookupssp = spacy.load('en')
lookups = Lookups()
lemm = Lemmatizer(lookups)
创建和执行一个引理函数
def lemma_function(text):
dummy = []
#this is just a test to see if it works
for word in sp(text):
dummy.append(word.lemma_) return ' '.join(dummy)df['lemmatized'] = df['token'].apply(lambda x: lemma_function(x))
在对推文进行词汇化后,我发现“-PRON-”出现在我的文本中,这是在你使用 spacy 对代词进行词汇化后出现的“短语”。这对于通知我一条推文的内容并不重要,所以我也删除了这个“-PRON-”短语。
df['lemmatized'] = df['lemmatized'].apply(lambda x: x.replace('-PRON-', ' '))
标记我的数据
df['final_text'] = df['lemmatized'].apply(word_tokenize)
从我的令牌中删除停用字词
from nltk.corpus import stopwords
my_stopwords = set(stopwords.words('english'))df['final_text'] = df['final_text'].apply(lambda text_list: [x for x in text_list if x not in stopwords.words('english')])
从我的标记化文本数据中移除数字
df['final_text'] = df['final_text'].apply(lambda list_data: [x for x in list_data if x.isalpha()])
既然你的 tweet 数据已经被预处理了,你的数据现在应该更干净了。除了上述内容之外,您还有更广泛的考虑事项。在我的分类器项目中,我还使用了 TextBlob 来自动更正我的语料库中的任何拼写错误。但是请注意,TextBlob 的计算开销很大。此外,一旦您对数据进行了充分的预处理,并准备好创建单词包(计数矢量器)或 TF-IDF 矢量器,您就可以调整参数,以满足您对机器学习问题的要求。
我希望这篇指南能加速你的下一个 NLP 项目的文本数据的预处理。请随意留下任何想法和见解。
Q-Learning 初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-q-learning-c3e2a30a653c?source=collection_archive---------0-----------------------
决定性的反思
无模型强化学习
一旦你的狗犯了错误,你是否曾经责备或惩罚它?或者你有没有训练过一只宠物,你要求的每一个正确的命令都会奖励它?如果你是宠物主人,可能你的答案会是“是”。你可能已经注意到,一旦你从它年轻的时候就经常这样做,它的错误行为就会一天天地减少。同样,它会从错误中学习,训练自己。
作为人类,我们也经历了同样的事情。你还记得吗,在我们上小学的时候,一旦我们把功课做好了,老师就会奖励我们星星。😄
这正是在强化学习(RL) 中发生的事情。
强化学习是人工智能中最美的分支之一
RL 的目标是 通过响应动态环境 采取一系列行动来最大化代理人的报酬。
There are 4 basic components in Reinforcement Learning; agent, environment, reward and action.
强化学习是利用经验做出最佳决策的科学。分解一下,强化学习的过程包括以下简单的步骤:
- 观察环境
- 使用某种策略决定如何行动
- 相应地行动
- 接受奖励或惩罚
- 吸取经验教训,完善我们的战略
- 迭代直到找到最优策略
Source: [link](http://H. Nguyen and H. La, "Review of Deep Reinforcement Learning for Robot Manipulation," in 2019 Third IEEE International Conference on Robotic Computing (IRC), Naples, Italy, 2019, pp. 590–595)
有两种主要类型的 RL 算法。分别是和 无模型 。
无模型 算法是一种不使用或估计环境的动态性(转移和奖励函数)而估计最优策略的算法。然而,基于 模型的 算法是使用转移函数(和回报函数)来估计最优策略的算法。
进入 Q-Learning
**Q-学习**是一种 无模型 强化学习算法。
Q-learning 是一种基于 值的 学习算法。基于值的算法基于等式(尤其是贝尔曼等式)更新值函数。而另一种类型, 基于策略的 利用从上次策略改进中获得的贪婪策略来估计值函数。
Q-learning 是一个 非策略学习者 。意味着它独立于代理的行为学习最优策略的值。另一方面, 基于策略的学习器 学习代理正在执行的策略的值,包括探索步骤,并且考虑到策略中固有的探索,它将找到最优的策略。
这个‘Q’是什么?
Q-learning 中的“Q”代表质量。质量在这里代表了一个给定的行为在获得未来回报中的有用程度。
Q-学习定义
- Q(s,a) 是在状态 s 下做 a,然后遵循最优策略的期望值(累计贴现报酬)。*
- Q-learning 使用时间差异(TD) 来估计 Q(s,a)的值。时间差异是一个主体在事先没有环境知识的情况下通过片段从环境中学习。*
- 代理维护一个 Q[S,A] 表,其中 S 是状态的集合, A 是动作的集合。
- Q[s,a]表示其对 Q(s,a)的当前估计。*
q-学习简单示例
在本节中,Q-learning 已经通过演示进行了解释。
假设一个智能体必须沿着一条有障碍的路径从起点移动到终点。智能体需要以最短的路径到达目标,而不碰到障碍物,并且他需要沿着障碍物覆盖的边界前进。为了方便起见,我在一个定制的网格环境中做了如下介绍。
Agent and its Environment
介绍 Q 表
Q-Table 是用于计算每个状态下行动的最大预期未来回报的数据结构。基本上,这张表将指导我们在每个状态下的最佳行动。为了学习 Q 表的每个值,使用 Q 学习算法。
Q 功能
Q 函数使用贝尔曼方程并接受两个输入:状态(s)和动作(a)。
Bellman Equation. Source: link
q-学习算法过程
Q-learning Algorithm
步骤 1:初始化 Q 工作台
首先要建立 Q 表。有 n 列,其中 n=动作的数量。有 m 行,其中 m=状态数。
在我们的例子中,n =向左、向右、向上和向下,m=开始、空闲、正确路径、错误路径和结束。首先,让我们将值初始化为 0。
Initial Q-table
第二步:选择一个动作
步骤 3:执行一个动作
步骤 2 和 3 的组合执行不确定的时间量。这些步骤会一直运行,直到训练停止,或者训练循环按照代码中的定义停止。
首先,基于 Q 表选择状态中的动作(a)。注意,如前所述,当剧集开始时,每个 Q 值都应该是 0。
然后,使用上面陈述的贝尔曼方程更新在起点和向右移动的 Q 值。
ε贪婪策略 的概念在这里发挥了出来。开始时,ε比率会更高。代理将探索环境并随机选择行动。这在逻辑上是这样发生的,因为代理对环境一无所知。当代理探索环境时,ε速率降低,代理开始利用环境。
在探索的过程中,代理在估计 Q 值时逐渐变得更有信心。
在我们的代理示例中,当代理的训练开始时,代理完全不知道环境。因此,让我们说,它采取了一个随机行动,其'正确'的方向。
Action : Agent follows ‘right’
现在,我们可以使用贝尔曼方程更新位于起点并向右移动的 Q 值。
Updated Q-table
第四步:衡量奖励
现在我们已经采取了一项行动,并观察到了一个结果和奖励。
第五步:评估
我们需要更新函数 Q(s,a)。
这个过程反复重复,直到学习停止。这样,Q 表被更新,并且值函数 Q 被最大化。这里 Q(state,action)返回该状态下该行为的预期未来回报。
Bellman Equation Explanation for the episodes
在示例中,我输入了如下奖励方案。
当离目标更近一步时奖励= +1
击中障碍物时的奖励=-1
空闲时奖励=0
Figure (a) Positive Reward, (b) & (c) Negative Rewards
最初,我们探索代理的环境并更新 Q 表。当 Q 表准备好时,代理开始利用环境并开始采取更好的行动。最终 Q 表可能如下所示(例如)。
Example final Q-table
以下是培训后代理实现目标的最短路径的结果。
Agent’s navigation towards the goal
**
Plotting the results for the number of steps (a) Episode via steps, (b) Episode via cost
履行
请投邮件掌握 python 实现代码的概念解释。
参考
[1] H. Nguyen 和 H. La,“机器人操纵的深度强化学习综述”,载于 2019 年第三届 IEEE 机器人计算国际会议(IRC) ,意大利那不勒斯,2019 年,第 590–595 页。
[2]https://www . freecodecamp . org/news/an-introduction-to-q-learning-reinforcement-learning-14 ac0 b 4493 cc/
[3]https://courses . cs . ut . ee/mtat . 03.292/2014 _ spring/uploads/Main/Q-learning . pdf
[4]https://towards data science . com/introduction-to-variable-reinforcement-learning-algorithms-I-q-learning-sarsa-dqn-ddpg-72 a5 E0 CB 6287
[5]https://blog.dominodatalab.com/deep-reinforcement-learning/
希望你通过这篇博文对 Q-learning 有一个清晰的认识。如果你对这篇博文有任何问题或评论,请在下面留下你的评论。
干杯,学习愉快!
Rasa NLU 意图分类和命名实体识别初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-rasa-nlu-for-intent-classification-and-named-entity-recognition-a4f0f76b2a96?source=collection_archive---------1-----------------------
Image taken from https://givemechallenge.com/wp-content/uploads/2017/01/rasa-NLU.png
本文的目的是探索使用 Rasa NLU 进行意图分类和命名实体识别的新方法。从版本 1.0.0 开始,Rasa NLU 和 Rasa 核心已经合并到一个框架中。因此,培训流程和可用功能有一些小的变化。首先也是最重要的是, Rasa 是一个开源的机器学习框架,用于自动化基于文本和语音的对话。换句话说,你可以使用 Rasa 来建立类似于智能聊天机器人的上下文和分层对话。在本教程中,我们将专注于框架的自然语言理解部分,以捕捉用户的意图。
截至 2020 年 10 月,Rasa 已正式发布 2.0 版本(Rasa 开源)。与版本 1 相比,数据训练格式发生了显著变化。查看我关于聊天机器人和 Rasa 2.0 新功能的最新文章,了解更多信息。
本教程有 5 个部分:
- 设置和安装
- 数据准备和格式
- 培训和测试
- 运行 NLU 服务器
- 结论
[第 1 节]设置和安装
我使用的是安装在 Windows 操作系统虚拟环境中的 Python 3.6.7。建议将其安装在干净的虚拟环境中,因为有相当多的 python 模块需要安装。
Python 模块
为了简单起见,我们将只安装一个可用于所有语言的标准管道。在官方文档中,团队建议使用 spaCy 管道,但我们将使用基于 Tensorflow 的监督嵌入管道。激活虚拟环境并运行以下命令:
pip install rasa
模块安装和升级可能需要一段时间。完成后,指向您选择的目录并运行以下命令:
rasa init --no-prompt
您将能够看到使用默认数据的 nlu 和 core 的培训过程。将创建以下文件:
- init。py :一个空文件,帮助 python 找到你的动作。
- actions.py :定制动作的代码
- config.yml :您的 NLU 和核心机型的配置
- credentials.yml :连接其他服务的详细信息
- data/nlu.md :你的 nlu 训练数据
- data/stories.md :你的故事
- domain.yml :您助手的域
- endpoints.yml :连接端点通道详情
- 型号/ <时间戳> .tar.gz :你的初始型号。时间戳的格式为 YYYYMMDD-hhmmss。仅限 NLU 的型号前面会有 nlu 前缀。
其实你已经训练出了一个完整的模型,可以用于意图分类。让我们继续下一部分,了解更多有关培训数据格式的信息。
[第二节]数据准备和格式
如果您想使用自己的定制数据来训练它,您可以准备 markdown 或 json 格式的数据。我将在本教程中使用 markdown,因为它是最简单的。请参考下面的链接,了解所有可用培训数据格式的更多信息。打开数据/nlu.md 数据,根据自己的用例开始修改内容。
目的
您可以使用## intent:name_of_intent 指定意图,后跟一个意图问题列表(每个意图之间有空格):
## intent:goodbye
- bye
- goodbye
- see you around
- see you later
- talk to you later## intent:ask_identity
- who are you
- what is your name
- how should i address you
- may i know your name
- are you a bot
实体
您可以指定每个问题中的实体,如下所示值:
## intent:ask_shop_open
- does the shop open on [monday](weekday)
- does the shop open on [wednesday](weekday)
- does the shop open on [friday](weekday)
在这种情况下,weekday 是实体的名称,而 monday 是值。为了抓住实体,你需要提供大量的例子。请注意上盒和下盒影响精度。星期一和星期一不一样。因此,建议在评估过程中,将所有数据训练为小写,并将输入数据解析为小写。
查找表
如果单个实体有一个很长的值列表,建议包括一个查找表,而不是作为例句填写所有的值。有两种方法可以做到。第一种是将它们包含在内:
## lookup:weekday
- monday
- tuesday
- wednesday
- thursday
- friday
第二种方法是在一个文本文件中列出它,并内嵌路径。让我们用一个名为“国家”的新实体来试试:
## lookup:countries
path/to/countries.txt
在 countries.txt 中,你可以在新的一行中指定每个元素如下:
singapore
malaysia
vietnam
indonesia
thailand
就像 weekday 实体一样,你必须提供几个例子让它进行概括。
## intent:inform_country_of_origin
- i am from [malaysia](countries)
- i am from [vietnam](countries)
- i came from [thailand](countries)
同义词
Rasa 还提供了一种识别同义词并将其映射回单个值的方法。第一种方法是像synonym1一样内联添加它:
## intent:ask_eaten
- what did you have for [breakfast](meal)
- what did you have for [break fast](meal:breakfast)
- what did you have for [breakfat](meal:breakfast)
第二种方法如下:
## synonym:breakfast
- brekfast
- brokefast
synonym 与查找表的不同之处在于,synonym 将实体的值映射到单个值(本例中为早餐)。换句话说,同义词是捕捉拼写错误和首字母缩略词的好方法,而查找表是概括例子的好方法。
正则表达式
还有一个支持正则表达式的特性叫做 regex。
## intent:inform_zipcode
- my zipcode is [12345](zipcode)
- my zipcode is [33456](zipcode)
- my zipcode is [94056](zipcode)## regex:zipcode
- [0-9]{5}
我附上了一个示例文本文件供您参考:
转换数据格式
Markdown 可以说是初学者创建数据的最安全的选择。然而,可能存在训练数据是自动的或来自其他来源的情况,例如 LUIS 数据格式、WIT 数据格式、Dialogflow 数据格式和 json。Rasa 还为您提供了一种转换数据格式的方法。查看以下链接了解更多。确保虚拟环境已激活,并运行以下命令(它将 md 转换为 json):
rasa data convert nlu --data data/nlu.md --out data/nlu.json -f json
- -数据是包含拉莎·NLU
数据的文件或目录的路径。 - - out 是以 Rasa 格式保存训练数据的文件名。
- -f 是训练数据应该转换成的输出格式
。接受 json 或 md。
一旦你有了所有需要的数据,将它移动到数据文件夹并删除任何现有的。让我们继续下一部分。
[第 3 节]培训和测试
培训模式
要训练 nlu 模型,您只需运行以下命令:
rasa train nlu
如官方文件所述,它将在数据文件夹中查找 NLU 训练数据文件,并将一个训练好的模型保存在模型文件夹中。记住从数据文件夹中移除任何不必要的数据文件。模型的名称将以 nlu-为前缀,以表明这是一个仅 nlu 的模型。话虽如此,您可以使用- data 参数指定路径。完整的参数列表可在处找到。
测试模型
您可以通过以下命令运行交互式 shell 模式来测试模型:
rasa shell nlu
如果您有多个 nlu 模型,并且想要测试一个特定的模型,请使用下面的命令。
rasa shell -m models/nlu-20190515-144445.tar.gz
检查以下链接,了解更多关于附加参数的信息。你可以输入你的文本并按回车键。shell 将返回一个 json 来表明意图和可信度。
[第 4 节]运行 NLU 服务器
运行服务器
Rasa 还为您提供了一种启动 nlu 服务器的方法,您可以通过 HTTP API 调用该服务器。运行以下命令(相应地修改模型的名称):
rasa run --enable-api -m models/nlu-20190515-144445.tar.gz
您应该会看到以下输出:
Starting Rasa Core server on http://localhost:5005
您可以通过在命令中一起指定参数来修改一些设置。查看以下链接了解更多信息。对于 cors 参数,它接受 URL 列表。它允许跨源资源共享,即告诉浏览器让在一个源(域)上运行的 web 应用程序有权访问来自不同源的服务器的选定资源。您可以使用“*”将所有域列入白名单。
rasa run --enable-api -m models/nlu-20190515-144445.tar.gz --cors "*"
在撰写本文时,似乎没有办法停止或中断服务器。我确实试过 Ctrl+C,但它只是偶尔有效。如果你遇到这样的问题,唯一的办法就是终止进程。只需点击关闭命令提示符,并重新运行它。一旦服务器开始运行,您就可以使用 curl 测试结果。打开一个新的命令提示符并运行以下行:
curl localhost:5005/model/parse -d '{"text":"hello"}'
您应该能够获得一个 json 结果,表明如下所示的意图和置信度:
{"intent":{"name":"greet","confidence":0.9770460725},"entities":[],"intent_ranking":[{"name":"greet","confidence":0.9770460725},{"name":"mood_unhappy","confidence":0.0257926807},{"name":"ask_identity","confidence":0.0009481288},{"name":"mood_great","confidence":0.0},{"name":"inform_identity","confidence":0.0},{"name":"goodbye","confidence":0.0}],"text":"hello"}
HTTP API
Rasa 还附带了自己的 HTTP API,如果您打算通过 AJAX 调用它,这个 API 会很有用。请参考完整的名单这里。在本教程中,我们将只关注一个 API 调用,它用于预测发送到端点的消息的意图和实体。您只需将 POST 呼叫发送到以下 URL:
[http://localhost:5005/model/parse](http://localhost:5005/model/parse)
下面是一个通过 AJAX POST 调用的例子:
最新的框架取消了在单个服务器中调用多个模型的能力。在前面的框架中,我们可以指定自己的模型作为参数,以指示哪个模型用于分类。现在,它正式成为每台服务器一个型号。
[第五节]结论
就这样,伙计们!让我们回顾一下,我们已经学习了如何使用 Rasa NLU 来训练我们自己的意图分类和实体提取模型。下一步是微调和进行进一步的培训,以优化当前的模型。如果您打算拥有一个基于故事进行回复的羽翼丰满的聊天机器人框架,您也可以选择查看 Rasa Core。另一方面,如果你已经为你的聊天机器人使用了其他框架,那么只使用 NLU 可以为你提供更大的灵活性。如果你有兴趣在信息平台中建立聊天机器人,请点击下面的链接。感谢您的阅读,祝您愉快!
参考
- http://rasa.com/docs/rasa/user-guide/installation/
- http://rasa.com/docs/rasa/user-guide/rasa-tutorial/
- http://rasa.com/docs/rasa/api/http-api/
- http://rasa.com/docs/rasa/user-guide/command-line-interface
- 【http://rasa.com/docs/rasa/nlu/training-data-format/
- http://rasa.com/docs/rasa/nlu/using-nlu-only/
- http://rasa . com/docs/rasa/user-guide/messaging-and-voice-channels/
使用石头剪刀布和 Tensorflow.js 进行强化学习的初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-reinforcement-learning-using-rock-paper-scissors-and-tensorflow-js-37d42b6197b5?source=collection_archive---------17-----------------------
Tensorflow.js 刚刚发布,我刚刚参加了一个关于它在浏览器中的用例的讲座。我有在 Python 中广泛使用 Tensorflow 的经验,但我很好奇在浏览器中构建一个小型强化学习示例有多困难,在这个示例中,您可以看到一个代理随着时间的推移而学习。
我选择了石头剪子布,出于简洁和懒惰的原因,从现在开始它将被称为 RPS,因为它的游戏规则很简单,并且因为我知道学习只需要很少的例子。
本教程面向谁:任何对强化学习(RL)和神经网络的直观非数学教程感兴趣的人。他们应该有 JavaScript 和 html 的基本知识来理解代码,但这不是理解概念部分所必需的。
目标是:构建一个能够使用强化学习和神经网络来学习 RPS 规则的代理。这意味着如果用户选择剪刀,我们希望代理能够选择石头。
强化学习直观上可以描述如下:
循环:基于信念做某事→获得积极或消极的奖励→基于奖励更新信念
因此,当构建强化学习问题时,你必须记住上面的循环。所以我们可以用同样的方式分解 RPS 游戏。
- 当用户选择一步棋时,代理有一些关于它应该选择哪一步棋的信念。即,当用户选择纸张时,代理认为它应该选择石头。
- 用户对代理选择的移动给予积极或消极的奖励。
- 当用户选择纸张时,代理更新它关于是否应该选择石头的信念。
记住这一点,本教程分为两个部分:
- script.js,它将包含执行强化学习周期的代码。
- index.html 将允许用户与学习代理交互,并实时可视化学习。
我们将从 script.js 开始。
Choose Move
学习周期的开始是“根据代理的信念做一些事情”。在这个上下文中,这意味着根据用户的移动选择一个移动。
第 6–12 行:在评估阶段,我们想看看代理学得有多好。因此,选择的移动是具有最高值的移动。即代理最有信心的移动。这是借助神经网络完成的。
旁白:神经网络
神经网络是一种可以调整的功能。它接受一些输入,对输入做一些事情,然后输出一些结果。
Function
在 RL 和 RPS 的上下文中,使用神经网络来表示代理的信念。网络的输入是用户的移动,输出是代理在选择石头、布、剪刀时的信心。
Neural Network for Agent’s Beliefs
从上面可以看出,用户的举动是摇滚。代理人 0.7 自信应该选剪刀,0.1 自信选石头,0.2 自信选纸。如果我们处于评估阶段,代理将选择价值最高/最有信心的行动。即剪刀。
第 8–12 行:将移动转换为神经网络可以理解的格式,向网络请求其输出,然后选择具有最高值的移动。
第 14–16 行:在训练阶段,不是基于信念选择移动,而是随机选择移动。这使得代理可以探索所有的移动,而不是总是选择相同的移动。
Update beliefs
强化循环的下一阶段是从用户那里获得奖励,奖励将在 index.html 处理。收到奖励后,代理可以更新它的信念。
第 5–7 行:处理获取代理对用户移动应该选择的移动的信心
第 10-12 行:用奖励更新代理的信念。这是使用神经网络完成的。
旁白:更新神经网络
Updating a Neural Network
在这个场景中,用户选择了石头,代理选择了剪刀。用户给出了-100 的奖励,因为这一步棋是错误的。然后将-100 加到 0.7 上,并送回网络。这将告诉网络 0.7 的值太高,应该降低一些。这个过程叫做反向传播。这是更新代理人信念的行为。在这种情况下,代理应该对选择剪刀不太有信心,而对选择石头或布更有信心。
第 13 行:一旦网络被更新,新的信念就被绘制出来。
Plot the beliefs of the Agent
这种方法遍历用户可以选择的所有移动,并为用户的每个移动绘制代理的信念。
第 10 行:应用一个函数使神经网络的输出总和为 1。这使得用户能够更容易地理解神经网络的输出。
第 25 行:使用 Plotly.js 绘制 index.html 每个 div 中的数据集
Example output of the Network
现在我们已经完成了强化循环和可视化部分的所有部分。接下来我们将描述 index.html。这需要做几件事:
- 允许用户选择移动。
- 用户应该能够说出代理的移动是好是坏。
- 在学习代理随机选择移动和选择它最有信心的移动之间切换的能力。
- 可视化代理的信念,这意味着当用户选择一个移动时,显示代理在选择一个特定移动时有多自信
以下节选自 index.html,反映了上述观点。
User interface
第 1–3 行:有三个按钮是用户移动的,单击它们将调用 chooseMove 函数并向它传递按钮的值。这将使代理选择并返回一个移动。
第 5–6 行:当用户决定代理选择的移动是好是坏时,这些按钮将调用训练功能。这将告诉代理积极或消极地更新它的信念。
第 8–11 行:切换代理是正在学习还是正在评估其所学内容
第 13-17 行:包含 div,这些 div 将用于描绘代理对每个动作的信念。
至此,本教程到此结束。要查看所有代码,请访问这个库。你可以随意克隆它并使用代码。克隆完成后,在浏览器中打开 index.html。您将看到下图所示的设置。
最上面的按钮是用户的移动。一旦您选择了移动,代理将随机选择一个移动。然后,用户可以点击正面奖励或负面奖励按钮,信念将实时更新。单击新的移动并重复该过程。一旦你对学习到的行为感到满意,将开关从训练切换到评估,然后代理选择的移动将是每个直方图中最高值的移动。
我希望本教程对您有所帮助,并让您直观地了解如何构建强化学习问题,以及如何使用神经网络来帮助解决这个问题。
请继续关注神经网络和强化学习基础的进一步教程。
感谢阅读。
用 Gensim Word2Vec 模型嵌入单词的初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-word-embedding-with-gensim-word2vec-model-5970fa56cc92?source=collection_archive---------1-----------------------
单词嵌入是自然语言处理(NLP)中最重要的技术之一,其中单词被映射到实数的向量。单词嵌入能够捕获文档中单词的含义、语义和句法相似性以及与其他单词的关系。它还被广泛用于推荐系统和文本分类。本教程将简要介绍 genism word2vec 模型,并给出一个为 vehicle make 模型生成单词嵌入的例子。
目录
- 1。Word2vec 简介
- 2。Gensim Python 库介绍
- 3。用 Gensim Word2Vec 模型实现单词嵌入
- 3.1 数据预处理:
- 3.2。Genism word2vec 模型训练
- 4。计算相似度
- 5。T-SNE 可视化技术
1.Word2vec 简介
Word2vec 是使用两层神经网络学习单词嵌入的最流行的技术之一。它的输入是一个文本语料库,输出是一组向量。通过 word2vec 嵌入单词可以使自然语言变得计算机可读,然后对单词进一步执行数学运算可以用来检测它们的相似性。一组训练有素的单词向量会将相似的单词彼此靠近地放置在那个空间中。例如,单词“女人”、“男人”和“人类”可能聚集在一个角落,而“黄色”、“红色”和“蓝色”则聚集在另一个角落。
word2vec 有两种主要的训练算法,一种是连续单词包(CBOW),另一种叫做 skip-gram。这两种方法的主要区别在于 CBOW 使用上下文来预测目标单词,而 skip-gram 使用单词来预测目标上下文。通常,与 CBOW 方法相比,skip-gram 方法可以具有更好的性能,因为它可以捕获单个单词的两种语义。例如,它将有两个代表苹果的向量,一个代表公司,另一个代表水果。关于 word2vec 算法的更多细节,请查看这里。
2.Gensim Python 库简介
Gensim 是一个用于自然语言处理的开源 python 库,由捷克自然语言处理研究员拉迪姆·řehůřek开发和维护。Gensim 库将使我们能够通过在自定义语料库上训练我们自己的 word2vec 模型来开发单词嵌入,或者使用跳格算法的 CBOW。
首先,我们需要安装 genism 包。Gensim 可以在 Linux、Windows 和 Mac OS X 上运行,并且应该可以在任何其他支持 Python 2.7+和 NumPy 的平台上运行。Gensim 依赖于以下软件:
- Python > = 2.7(用 2.7、3.5、3.6 版本测试)
- >= 1 . 11 . 3
- >= 0 . 18 . 1****
- 六 > = 1.5.0
- smart _ open>= 1 . 2 . 1
有两种安装方式。我们可以在终端上运行下面的代码来安装 genism 包。
**pip install --upgrade gensim**
或者,对于 Conda 环境:
**conda install -c conda-forge gensim**
3.用 Gensim Word2Vec 模型实现单词嵌入
在本教程中,我将通过一个具体的例子展示如何使用 genism 生成单词嵌入。我在本教程中使用的数据集来自 Kaggle 数据集。
该车辆数据集包括汽车的品牌、型号、年份、发动机和其他属性等特征。我们将使用这些特征来为每个制造模型生成单词嵌入,然后比较不同制造模型之间的相似性。完整的 python 教程可以在这里找到。
**>>> df = pd.read_csv('data.csv')
>>> df.head()**
3.1 数据预处理:
由于本教程的目的是学习如何使用 genism 库生成单词嵌入,为了简单起见,我们将不为 word2vec 模型进行 EDA 和特性选择。
Genism word2vec 要求用于训练的“列表列表”格式,其中每个文档都包含在一个列表中,并且每个列表都包含该文档的标记列表。首先,我们需要生成一个“列表列表”的格式来训练 make 模型单词嵌入。更具体地说,每个制造模型都包含在一个列表中,每个列表都包含该制造模型的特征列表。
为了实现这一点,我们需要做以下事情:
a.为制作模型创建新列
**>>> df['Maker_Model']= df['Make']+ " " + df['Model']**
b.为每个品牌车型生成一个具有以下特征的“列表列表”格式:发动机燃料类型、变速器类型、从动轮、市场类别、车辆尺寸、车型。
**# Select features from original dataset to form a new dataframe
>>> df1 = df[['Engine Fuel Type','Transmission Type','Driven_Wheels','Market Category','Vehicle Size', 'Vehicle Style', 'Maker_Model']]# For each row, combine all the columns into one column
>>> df2 = df1.apply(lambda x: ','.join(x.astype(str)), axis=1)# Store them in a pandas dataframe
>>> df_clean = pd.DataFrame({'clean': df2})# Create the list of list format of the custom corpus for gensim modeling
>>> sent = [row.split(',') for row in df_clean['clean']]# show the example of list of list format of the custom corpus for gensim modeling
>>> sent[:2]
[['premium unleaded (required)',
'MANUAL',
'rear wheel drive',
'Factory Tuner',
'Luxury',
'High-Performance',
'Compact',
'Coupe',
'BMW 1 Series M'],
['premium unleaded (required)',
'MANUAL',
'rear wheel drive',
'Luxury',
'Performance',
'Compact',
'Convertible',
'BMW 1 Series']]**
3.2.Genism word2vec 模型培训
我们可以使用自己的自定义语料库训练 genism word2vec 模型,如下所示:
**>>> model = Word2Vec(sent, min_count=1,size= 50,workers=3, window =3, sg = 1)**
让我们试着去理解这个模型的超参数。
size :嵌入的维数,默认为 100。
窗口:目标单词与其周围单词的最大距离。默认窗口是 5。
min_count :训练模型时要考虑的最小字数;出现次数少于此计数的单词将被忽略。min_count 的默认值为 5。
工人:培训时分区数量,默认工人为 3。
sg :训练算法,CBOW(0)或 skip gram(1)。默认的训练算法是 CBOW。
在训练 word2vec 模型之后,我们可以直接从训练模型中获得单词嵌入,如下所示。
**>>> model['Toyota Camry']array([-0.11884457, 0.03035539, -0.0248678 , -0.06297892, -0.01703234,
-0.03832747, -0.0825972 , -0.00268112, -0.09192555, -0.08458661,
-0.07199778, 0.05235871, 0.21303181, 0.15767808, -0.1883737 ,
0.01938575, -0.24431638, 0.04261152, 0.11865819, 0.09881561,
-0.04580643, -0.08342388, -0.01355413, -0.07892415, -0.08467747,
-0.0040625 , 0.16796461, 0.14578669, 0.04187112, -0.01436194,
-0.25554284, 0.25494182, 0.05522631, 0.19295982, 0.14461821,
0.14022525, -0.2065216 , -0.05020927, -0.08133671, 0.18031682,
0.35042757, 0.0245426 , 0.15938364, -0.05617865, 0.00297452,
0.15442047, -0.01286271, 0.13923576, 0.085941 , 0.18811756],
dtype=float32)**
4.计算相似度
现在,我们甚至可以通过调用 model.similarity()并传入相关单词,使用 Word2vec 来计算词汇表中两个 Make 模型之间的相似性。例如,model . similarity(' Porsche 718 Cayman ',' Nissan Van ')这将为我们提供 Porsche 718 Cayman 和 Nissan Van 之间的欧几里得相似性。
**>>> model.similarity('Porsche 718 Cayman', 'Nissan Van')
0.822824584626184>>> model.similarity('Porsche 718 Cayman', 'Mercedes-Benz SLK-Class')
0.961089779453727**
从上面的例子中,我们可以看出保时捷 718 Cayman 比日产 Van 更像奔驰 SLK 级。我们还可以使用内置函数 model.most_similar()来获得一组基于欧氏距离的最相似的 make 模型。
**>>> model1.most_similar('Mercedes-Benz SLK-Class')[:5][('BMW M4', 0.9959905743598938),
('Maserati Coupe', 0.9949707984924316),
('Porsche Cayman', 0.9945154190063477),
('Mercedes-Benz SLS AMG GT', 0.9944609999656677),
('Maserati Spyder', 0.9942780137062073)]**
然而,欧几里德相似性不能很好地用于高维单词向量。这是因为欧几里德相似性会随着维数的增加而增加,即使嵌入这个词代表不同的意思。或者,我们可以使用余弦相似性来度量两个向量之间的相似性。在数学上,它测量的是在多维空间中投影的两个向量之间的角度余弦。余弦相似度捕捉单词向量的角度,而不是幅度。在余弦相似度下,没有相似度被表示为 90 度角,而总相似度 1 处于 0 度角。
以下函数显示了如何基于余弦相似度生成最相似的 make 模型。
**def cosine_distance (model, word,target_list , num) :
cosine_dict ={}
word_list = []
a = model[word]
for item in target_list :
if item != word :
b = model [item]
cos_sim = dot(a, b)/(norm(a)*norm(b))
cosine_dict[item] = cos_sim
dist_sort=sorted(cosine_dict.items(), key=lambda dist: dist[1],reverse = True) ## in Descedning order
for item in dist_sort:
word_list.append((item[0], item[1]))
return word_list[0:num]# only get the unique Maker_Model
>>> Maker_Model = list(df.Maker_Model.unique()) # Show the most similar Mercedes-Benz SLK-Class by cosine distance
>>> cosine_distance (model,'Mercedes-Benz SLK-Class',Maker_Model,5)[('Mercedes-Benz CLK-Class', 0.99737006),
('Aston Martin DB9', 0.99593246),
('Maserati Spyder', 0.99571854),
('Ferrari 458 Italia', 0.9952333),
('Maserati GranTurismo Convertible', 0.994994)]**
5.T-SNE 可视化
很难直接将嵌入这个词形象化,因为它们通常有 3 个以上的维度。T-SNE 是一种有用的工具,通过降维来可视化高维数据,同时保持点之间的相对成对距离。可以说,T-SNE 正在寻找一种新的数据表示方法,在这种方法中,邻域关系被保留下来。下面的代码显示了如何用 T-SNE 图绘制单词 embedding。
**def display_closestwords_tsnescatterplot(model, word, size):
arr = np.empty((0,size), dtype='f')
word_labels = [word]close_words = model.similar_by_word(word)arr = np.append(arr, np.array([model[word]]), axis=0)
for wrd_score in close_words:
wrd_vector = model[wrd_score[0]]
word_labels.append(wrd_score[0])
arr = np.append(arr, np.array([wrd_vector]), axis=0)
tsne = TSNE(n_components=2, random_state=0)
np.set_printoptions(suppress=True)
Y = tsne.fit_transform(arr)x_coords = Y[:, 0]
y_coords = Y[:, 1]
plt.scatter(x_coords, y_coords)for label, x, y in zip(word_labels, x_coords, y_coords):
plt.annotate(label, xy=(x, y), xytext=(0, 0), textcoords='offset points')
plt.xlim(x_coords.min()+0.00005, x_coords.max()+0.00005)
plt.ylim(y_coords.min()+0.00005, y_coords.max()+0.00005)
plt.show()>>> display_closestwords_tsnescatterplot(model, 'Porsche 718 Cayman', 50)**
该 T-SNE 图以二维空间展示了与保时捷 718 Cayman 相似的前 10 款车型。
关于我
我是旧金山大学数据科学专业的硕士生。我热衷于使用机器学习来解决商业挑战。也可以通过 Linkedin 找到我。
XGBoost 初学者指南
原文:https://towardsdatascience.com/a-beginners-guide-to-xgboost-87f5d4c30ed7?source=collection_archive---------0-----------------------
这篇文章会有树…很多树
Trees… lots of them
想获得灵感?快来加入我的 超级行情快讯 。😎
XGBoost 是一个开源库,提供了梯度提升决策树的高性能实现。底层的 C++代码库与顶层的 Python 接口相结合,构成了一个极其强大而又易于实现的包。
XGBoost 的性能不是开玩笑的——它已经成为赢得许多 Kaggle 比赛的首选库。它的梯度增强实现是首屈一指的,随着该库继续获得好评,只会有更多的实现。
在这篇文章中,我们将介绍 XGBoost 库的基础知识。我们将从梯度增强如何实际工作的实际解释开始,然后通过一个 Python 例子来说明 XGBoost 如何使它变得如此快速和简单。
助推树木
对于常规的机器学习模型,如决策树,我们只需在数据集上训练一个模型,并使用它进行预测。我们可能会对参数稍加改动或增加数据,但最终我们仍然使用单一模型。即使我们建立了一个集合,所有的模型都被单独训练和应用于我们的数据。
助推,另一方面,采取一种更加迭代的方法。从技术上来说,这仍然是一种合奏技术,因为许多模型被组合在一起以完成最终的一个,但采用了一种更聪明的方法。
boosting 不是孤立地训练所有模型,而是连续训练模型,每个新模型都被训练来纠正前一个模型所犯的错误。模型按顺序添加,直到不能再进一步改进。
这种迭代方法的优点是,添加的新模型专注于纠正由其他模型引起的错误。在标准的集成方法中,模型是独立训练的,所有的模型最终可能会犯同样的错误!
梯度推进特别是一种训练新模型来预测先前模型的残差(即误差)的方法。我在下面的图表中概述了这种方法。
XGBoost 入门
让我们开始使用这个强大的库— XGBoost。
我们要做的第一件事是安装库,这是通过 pip 最容易做到的。在 Python 虚拟环境中这样做也可能更安全。
pip install xgboost
用 XGBoost 设置数据
在余下的教程中,我们将使用鸢尾花数据集。我们可以使用 Scikit Learn 将它加载到 Python 中。同时,我们还将导入新安装的 XGBoost 库。
*from* sklearn *import* datasets
*import* xgboost *as* xgb
iris = datasets.load_iris()
X = iris.data
y = iris.target
让我们把所有的数据都准备好。我们将从创建一个训练测试分割开始,这样我们就可以看到 XGBoost 执行得有多好。这次我们要 80%-20%的分成。
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2)
为了让 XGBoost 能够使用我们的数据,我们需要将它转换成 XGBoost 能够处理的特定格式。这种格式被称为数据矩阵。将 numpy 数组的数据转换为 DMatrix 格式非常简单:
D_train = xgb.DMatrix(X_train, label=Y_train)
D_test = xgb.DMatrix(X_test, label=Y_test)
定义 XGBoost 模型
现在我们的数据都加载了,我们可以定义我们的梯度推进系综的参数。我们在下面设置了一些最重要的,让我们开始。对于更复杂的任务和模型,可能的参数的完整列表可以在官方 XGBoost 网站上获得。
param = {
'eta': 0.3,
'max_depth': 3,
'objective': 'multi:softprob',
'num_class': 3}
steps = 20 # The number of training iterations
最简单的参数是 max_depth (被训练的决策树的最大深度) objective (正在使用的损失函数),以及 num_class (数据集中的类的数量)。 eta 算法需要特别注意。
从我们的理论来看,梯度推进包括顺序地创建决策树并将其添加到集成模型中。创建新的树来校正来自现有集合的预测中的残留误差。
由于集合的性质,即,将几个模型放在一起形成本质上非常大的复杂模型,使得该技术易于过度拟合。 eta 参数为我们提供了一个防止过度拟合的机会
eta 可以更直观地认为是一个学习率。不是简单地将新树的预测添加到具有全权重的集合中,而是将 eta 乘以所添加的残差以减少它们的权重。这有效地降低了整个模型的复杂性。
通常具有 0.1 至 0.3 范围内的小值。这些残差的较小权重仍将帮助我们训练一个强大的模型,但不会让该模型陷入更可能发生过度拟合的深度复杂性。
培训和测试
我们最终可以像使用 Scikit Learn 那样训练我们的模型:
model = xgb.train(param, D_train, steps)
现在让我们进行评估。同样,该过程与 Scikit Learn 中的培训模型非常相似:
*import* numpy *as* np
*from* sklearn.metrics *import* precision_score, recall_score, accuracy_score
preds = model.predict(D_test)
best_preds = np.asarray([np.argmax(line) *for* line *in* preds])
print("Precision = {}".format(precision_score(Y_test, best_preds, average='macro')))
print("Recall = {}".format(recall_score(Y_test, best_preds, average='macro')))
print("Accuracy = {}".format(accuracy_score(Y_test, best_preds)))
厉害!
如果到目前为止你已经遵循了所有的步骤,你应该得到至少 90%的准确率!
XGBoost 的进一步探索
这就概括了 XGBoost 的基本知识。但是,还有一些更酷的功能可以帮助您充分利用您的模型。
- gamma 参数也有助于控制过度拟合。它指定了在树的叶节点上进行进一步划分所需的损失的最小减少量。也就是说,如果创建一个新节点不能减少一定数量的损失,那么我们根本不会创建它。
- 助推器参数允许你设置你将在构建合奏时使用的模型类型。默认的是 gbtree ,它构建了一个决策树集合。如果你的数据不太复杂,你可以使用更快更简单的 gblinear 选项,它构建了一个线性模型集合。
- 设置任何 ML 模型的最佳超参数都是一项挑战。那么为什么不让 Scikit Learn 帮你做呢?我们可以很容易地将 Scikit Learn 的网格搜索与 XGBoost 分类器结合起来:
*from* sklearn.model_selection *import* GridSearchCV
clf = xgb.XGBClassifier()
parameters = {
"eta" : [0.05, 0.10, 0.15, 0.20, 0.25, 0.30 ] ,
"max_depth" : [ 3, 4, 5, 6, 8, 10, 12, 15],
"min_child_weight" : [ 1, 3, 5, 7 ],
"gamma" : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],
"colsample_bytree" : [ 0.3, 0.4, 0.5 , 0.7 ]
}
grid = GridSearchCV(clf,
parameters, n_jobs=4,
scoring="neg_log_loss",
cv=3)
grid.fit(X_train, Y_train)
如果你有时间的话,只在大数据集上这样做——进行网格搜索本质上是多次训练决策树的集合!
- 一旦您的 XGBoost 模型经过训练,您就可以将它的可读描述转储到一个文本文件中:
model.dump_model('dump.raw.txt')
这是一个总结!
喜欢学习?
在 twitter 上关注我,我会在这里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上与我联系!
MapReduce 初学者入门
原文:https://towardsdatascience.com/a-beginners-introduction-into-mapreduce-2c912bb5e6ac?source=collection_archive---------2-----------------------
很多时候,作为数据科学家,我们必须处理海量数据。在这种情况下,许多方法都不起作用或不可行。大量的数据是好的,非常好,我们希望尽可能地利用这些数据。
这里我想介绍 MapReduce 技术,这是一种用于处理大量数据的广泛技术。MapReduce 的实现有很多,包括著名的 Apache Hadoop。这里,我就不说实现了。我将尝试以最直观的方式介绍这个概念,并给出玩具和现实生活中的例子。
让我们从一些简单的任务开始。给你一个字符串列表,你需要返回最长的字符串。在 python 中这很容易做到:
def find_longest_string(list_of_strings):
longest_string = None
longest_string_len = 0 for s in list_of_strings:
if len(s) > longest_string_len:
longest_string_len = len(s)
longest_string = s return longest_string
我们一个接一个地检查字符串,计算长度并保留最长的字符串,直到我们完成。
对于小列表,它的工作速度相当快:
list_of_strings = ['abc', 'python', 'dima']%time max_length = print(find_longest_string(list_of_strings))OUTPUT:
python
CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: **75.8 µs**
即使对于包含 3 个以上元素的列表,它也能很好地工作,这里我们尝试使用 3000 个元素:
large_list_of_strings = list_of_strings***1000**%time print(find_longest_string(large_list_of_strings))OUTPUT:
python
CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: **307 µs**
但是如果我们尝试 3 亿个元素呢?
large_list_of_strings = list_of_strings***100000000**
%time max_length = max(large_list_of_strings, key=len)OUTPUT:
python
CPU times: user 21.8 s, sys: 0 ns, total: 21.8 s
Wall time: **21.8 s**
这是一个问题,在大多数应用中,20 秒的响应时间是不可接受的。改善计算时间的一个方法是购买更好更快的 CPU。通过引入更好更快的硬件来扩展您的系统被称为“垂直扩展”。这当然不会永远有效。不仅找到一个工作速度快 10 倍的 CPU 不是一件小事,而且,我们的数据可能会变得更大,我们不想每次代码变慢时都升级我们的 CPU。我们的解决方案不可扩展。相反,我们可以进行“水平扩展”,我们将设计我们的代码,以便它可以并行运行,当我们添加更多处理器和/或 CPU 时,它将变得更快。
为此,我们需要将代码分解成更小的组件,看看如何并行执行计算。直觉如下:1)将我们的数据分成许多块,2)对每个块并行执行find_longest_string
函数,3)在所有块的输出中找到最长的字符串。
我们的代码非常具体,很难破坏和修改,所以我们不使用find_longest_string
函数,而是开发一个更通用的框架,帮助我们在大数据上并行执行不同的计算。
我们在代码中做的两件主要事情是计算字符串的len
,并将其与迄今为止最长的字符串进行比较。我们将把代码分成两步:1)计算所有字符串的len
,2)选择max
值。
%%time# step 1:
list_of_string_lens = [len(s) for s in list_of_strings]
list_of_string_lens = zip(list_of_strings, list_of_string_lens)#step 2:
max_len = max(list_of_string_lens, key=lambda t: t[1])
print(max_len)OUTPUT:
('python', 6)
CPU times: user 51.6 s, sys: 804 ms, total: 52.4 s
Wall time: 52.4 s
(我正在计算字符串的长度,然后zip
将它们放在一起,因为这比在一行中计算并复制字符串列表要快得多)
在这种状态下,代码实际上比以前运行得更慢,因为我们不是对所有的字符串执行一次,而是执行两次,首先计算len
,然后找到max
的值。为什么这对我们有好处?因为现在我们的“步骤 2”得到的输入不是原始的字符串列表,而是一些预处理过的数据。这允许我们使用另一个“步骤二”的输出来执行步骤二!我们稍后会更好地理解这一点,但首先,让我们给这些步骤起个名字。我们称“第一步”为“映射器”,因为它将一些值映射到另一些值,我们称“第二步”为缩减器,因为它得到一个值列表并产生一个值(在大多数情况下)。以下是映射器和缩减器的两个辅助函数:
mapper = lendef reducer(p, c):
if p[1] > c[1]:
return p
return c
映射器就是len
函数。它获取一个字符串并返回它的长度。缩减器获取两个元组作为输入,并返回长度最大的一个。
让我们使用map
和reduce
重写我们的代码,在 python 中甚至有内置函数(在 python 3 中,我们必须从functools
导入它)。
%%time#step 1
mapped = map(mapper, list_of_strings)
mapped = zip(list_of_strings, mapped)#step 2:
reduced = reduce(reducer, mapped)print(reduced)OUTPUT:
('python', 6)
CPU times: user 57.9 s, sys: 0 ns, total: 57.9 s
Wall time: 57.9 s
代码做完全相同的事情,它看起来有点花哨,但它更通用,将帮助我们并行化。让我们更仔细地看看它:
步骤 1 使用 mapper 函数将我们的字符串列表映射到元组列表中(这里我再次使用zip
以避免重复字符串)。
步骤 2 使用 reducer 函数,检查来自步骤 1 的元组并逐个应用它。结果是一个具有最大长度的元组。
现在,让我们将输入分成块,并在进行任何并行化之前理解它是如何工作的(我们将使用chunkify
将一个大列表分成大小相等的块):
data_chunks = chunkify(list_of_strings, number_of_chunks=30)#step 1:
reduced_all = []
for chunk in data_chunks:
mapped_chunk = map(mapper, chunk)
mapped_chunk = zip(chunk, mapped_chunk)
reduced_chunk = reduce(reducer, mapped_chunk)
reduced_all.append(reduced_chunk)
#step 2:
reduced = reduce(reducer, reduced_all)print(reduced)OUTPUT:
('python', 6)
在第一步中,我们检查我们的块,并使用 map 和 reduce 找到该块中最长的字符串。在第二步中,我们获取第一步的输出,这是一个缩减值的列表,并执行最终的缩减以获得最长的字符串。我们使用number_of_chunks=36
是因为这是我机器上的 CPU 数量。
我们几乎可以并行运行我们的代码了。我们唯一可以做得更好的是将第一个reduce
步骤添加到单个映射器中。我们这样做是因为我们想把我们的代码分成两个简单的步骤,因为第一个reduce
在单个块上工作,我们也想把它并行化。它看起来是这样的:
def chunks_mapper(chunk):
mapped_chunk = map(mapper, chunk)
mapped_chunk = zip(chunk, mapped_chunk)
return reduce(reducer, mapped_chunk)%%timedata_chunks = chunkify(list_of_strings, number_of_chunks=30)#step 1:
mapped = map(chunks_mapper, data_chunks)#step 2:
reduced = reduce(reducer, mapped)print(reduced)OUTPUT:
('python', 6)
CPU times: user 58.5 s, sys: 968 ms, total: 59.5 s
Wall time: 59.5 s
现在我们有了一个好看的两步代码。如果我们按原样执行它,我们将获得相同的计算时间,但是,现在我们可以通过使用pool.map
函数而不是常规的map
函数,使用multiprocessing
模块来并行化步骤 1:
from multiprocessing import Poolpool = Pool(8)data_chunks = chunkify(large_list_of_strings, number_of_chunks=8)#step 1:
mapped = pool.map(mapper, data_chunks)#step 2:
reduced = reduce(reducer, mapped)print(reduced)OUTPUT:
('python', 6)
CPU times: user 7.74 s, sys: 1.46 s, total: 9.2 s
Wall time: 10.8 s
我们可以看到它运行速度快了两倍!这不是一个巨大的改进,但好消息是我们可以通过增加进程的数量来改进它!我们甚至可以在多台机器上进行,如果我们的数据非常大,我们可以使用几十台甚至几千台机器,使我们的计算时间尽可能短(几乎)。
我们的架构是使用两个函数构建的:map
和reduce
。每个计算单元映射输入数据并执行初始归约。最后,某个集中式单元执行最终的归约并返回输出。看起来是这样的:
这种架构有两个重要优势:
- 它是可扩展的:如果我们有更多的数据,我们唯一需要做的就是添加更多的处理单元。不需要更改代码!
- 它是通用的:这种架构支持各种各样的任务,我们可以用几乎任何东西代替我们的
map
和reduce
函数,这样就可以以可扩展的方式计算许多不同的东西。
需要注意的是,在大多数情况下,我们的数据会非常大并且是静态的。这意味着每次分割成块是低效的,实际上是多余的。因此,在现实生活中的大多数应用程序中,我们从一开始就将数据存储在块(或碎片)中。然后,我们将能够使用 MapReduce 技术进行不同的计算。
现在来看一个更有趣的例子:字数!
假设我们有一个非常大的新闻文章集,我们想找到不包括停用词的前 10 个常用词,我们该如何做呢?首先,让我们得到数据:
from sklearn.datasets import fetch_20newsgroups
data = news.data*10
在这篇文章中,我把数据放大了 10 倍,这样我们就可以看到不同之处。
对于数据集中的每个文本,我们希望对其进行标记化、清理、删除停用词,并最终计算单词数:
def clean_word(word):
return re.sub(r'[^\w\s]','',word).lower()def word_not_in_stopwords(word):
return word not in ENGLISH_STOP_WORDS and word and word.isalpha()
def find_top_words(data):
cnt = Counter()
for text in data:
tokens_in_text = text.split()
tokens_in_text = map(clean_word, tokens_in_text)
tokens_in_text = filter(word_not_in_stopwords, tokens_in_text)
cnt.update(tokens_in_text)
return cnt.most_common(10)
让我们看看不使用 MapReduce 需要多长时间:
%time find_top_words(data)OUTPUT:[('subject', 122520),
('lines', 118240),
('organization', 111850),
('writes', 78360),
('article', 67540),
('people', 58320),
('dont', 58130),
('like', 57570),
('just', 55790),
('university', 55440)]CPU times: user 51.7 s, sys: 0 ns, total: 51.7 s
Wall time: 51.7 s
现在,让我们写出我们的mapper
、reducer
和chunk_mapper
:
def mapper(text):
tokens_in_text = text.split()
tokens_in_text = map(clean_word, tokens_in_text)
tokens_in_text = filter(word_not_in_stopwords, tokens_in_text)
return Counter(tokens_in_text)def reducer(cnt1, cnt2):
cnt1.update(cnt2)
return cnt1def chunk_mapper(chunk):
mapped = map(mapper, chunk)
reduced = reduce(reducer, mapped)
return reduced
mapper
获取一个文本,将它分割成记号,清理它们,过滤无用的单词和非单词,最后,它计算这个文本文档中的单词数。reducer
函数获取 2 个计数器并将它们合并。chunk_mapper
得到一个块,并对其进行 MapReduce 操作。现在,让我们使用我们构建的框架来运行它,看看:
%%timedata_chunks = chunkify(data, number_of_chunks=36)#step 1:
mapped = pool.map(chunk_mapper, data_chunks)#step 2:
reduced = reduce(reducer, mapped)print(reduced.most_common(10))OUTPUT:
[('subject', 122520),
('lines', 118240),
('organization', 111850),
('writes', 78360),
('article', 67540),
('people', 58320),
('dont', 58130),
('like', 57570),
('just', 55790),
('university', 55440)]CPU times: user 1.52 s, sys: 256 ms, total: 1.77 s
Wall time: **4.67 s**
这快了 10 倍!在这里,我们能够真正利用我们的计算能力,因为任务要复杂得多,需要更多。
综上所述,MapReduce 是一种令人兴奋的、对于大型数据处理来说必不可少的技术。它可以处理大量的任务,包括计数、搜索、监督和非监督学习等等。今天有很多实现和工具可以让我们的生活更加舒适,但我认为理解基础知识非常重要。
使用 PyTorch 构建人工智能图像分类器的初学者教程
原文:https://towardsdatascience.com/a-beginners-tutorial-on-building-an-ai-image-classifier-using-pytorch-6f85cb69cba7?source=collection_archive---------4-----------------------
这是一个逐步建立图像分类器的指南。人工智能模型将能够学习标记图像。我用 Python 和 Pytorch。
步骤 1:导入库
当我们写一个程序时,手动编码我们执行的每个小动作是一个巨大的麻烦。有时候,我们想要使用别人已经写好的代码包。这些打包的例程被称为库,可以通过导入它们并在代码中引用该库来添加到我们的程序中。
我们通常在程序开始时导入所有的库。
当我们引用这个库时,不用输入它的长名字,我们可以用“as”把它缩写成我们选择的名字。
# Import Libraries
import torch
import torchvision.transforms as transforms
import torchvision.datasets as datasets
import torchvision.models as models
import torch.nn as nn
import torch.optim as optim
import numpy as np
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
步骤 2:定义转换
接下来,我们要导入我们的 AI 模型将从中学习的图片数据。
但是在此之前,我们需要指定我们想要在这些图片上执行的更改——因为导入它们的同一个命令也会转换数据。
这些转换是使用 torchvision.transforms 库完成的。理解转换的最佳方式是阅读文档这里的。但是我将简要介绍每个命令的作用。
- 变换花样。Compose 让我们将多个转换组合在一起,这样我们就可以使用多个转换。
- 变换花样。Resize((255)) 调整图像大小,使最短边的长度为 255 像素。另一侧被缩放以保持图像的纵横比。
- 变换。中心裁剪(224) 裁剪图像的中心,使其成为 224×224 像素的正方形图像。
我们做这两个步骤,所以所有进入我们的人工智能模型的图像都有相同的大小(人工智能模型不能处理不同大小的输入)
- 变身。ToTensor() 将我们的图像转换成数字。它是怎么做到的?
- 它将我们图片的每个像素所包含的三种颜色分开:红色、绿色和蓝色。这实质上是将一幅图像变成三幅图像(一幅红色,一幅绿色,一幅蓝色)。
- 然后,它将每个着色图像的像素转换为其颜色的亮度,从 0 到 255。这些值除以 255,因此它们可以在 0 到 1 的范围内。我们的图像现在是一个 Torch 张量(一个存储大量数字的数据结构)。
- 变换。Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]) 从每个值中减去平均值,然后除以标准差。
- 我们将使用一个预先训练好的模型,所以我们需要使用 Pytorch 指定的均值和标准差。在平均值和标准偏差中有三个值来匹配每个 RGB 图片。
# Specify transforms using torchvision.transforms as transforms
# librarytransformations = transforms.Compose([
transforms.Resize(255),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
步骤 3:导入我们的数据并将其放入数据加载器
最后,我们可以将我们的图片导入程序。我们使用 torchvision.datasets 库。
看这里。
我们指定了两个不同的数据集,一个用于 AI 学习的图像(训练集),另一个用于我们用来测试 AI 模型的数据集(验证集)。
数据集。ImageFolder() 命令期望我们的数据按照以下方式组织:root/label/picture.png .换句话说,图片要按照文件夹排序。例如,所有蜜蜂的图片应该放在一个文件夹里,所有蚂蚁的图片应该放在另一个文件夹里,等等。
我们下命令
- 所有文件夹和的路径
- 我们在上一步中指定的转换。
# Load in each dataset and apply transformations using
# the torchvision.datasets as datasets librarytrain_set = datasets.ImageFolder("root/label/train", transform = transformations)val_set = datasets.ImageFolder("root/label/valid", transform = transformations)
然后,我们希望将导入的图像放入数据加载器。
Dataloader 能够吐出我们数据的随机样本,因此我们的模型不必每次都处理整个数据集。这使得训练更有效率。
我们指定一次需要多少张图片作为我们的 batch_size(所以 32 意味着我们一次需要 32 张图片)。我们还想打乱我们的图像,这样它就可以随机输入到我们的人工智能模型中。
点击此处了解数据加载器。
# Put into a Dataloader using torch librarytrain_loader = torch.utils.data.DataLoader(train_set, batch_size=32, shuffle=True)val_loader = torch.utils.data.DataLoader(val_set, batch_size =32, shuffle=True)
步骤 4:创建我们的模型
人工智能模型需要在大量数据上训练才能有效。由于我们没有那么多数据,我们希望采用一个预训练的模型(之前已经在许多图像上训练过的模型),但对其进行定制以识别我们的特定图像。这个过程叫做迁移学习。
图像识别模型有两个部分:
- 卷积部分和
- 分类器部分
我们希望保留预训练的卷积部分,但放入我们自己的分类器。原因如下:
我们模型的卷积/池部分用于识别图像内部的特征。它首先识别边缘,然后利用边缘识别形状,再利用形状识别物体。
但是,训练这一部分需要大量数据,可能比我们拥有的还要多,因此,我们可以使用默认的预训练卷积层。这些预先训练的卷积层被训练成能够很好地识别这些特征,不管你有什么样的图像。
卷积层之间也有池层,将图像提取到更小的尺寸,这样就可以很容易地输入到我们的分类器中。
模型的最后一部分是分类器。分类器在卷积部分提取从照片中提取的所有信息,并使用它来识别图像。这是我们希望替换的预训练模型的一部分,并根据我们自己的图像进行训练。这使得模型能够识别我们给它的图像。
我们使用 torchvision.models 库来下载预训练的模型。我们可以下载许多不同的型号,更多信息可以在这里找到。我选择了一个名为 densenet161 的模型,并指定我们希望通过设置 pretrained=True 对它进行预训练。
然后,我们要确保我们不要训练这个模型,因为它已经被训练过了,我们只想训练我们接下来要放入的分类器。我们告诉模型不要计算任何参数的梯度,因为这只是为了训练。
# Get pretrained model using torchvision.models as models librarymodel = models.densenet161(pretrained=True)# Turn off training for their parametersfor param in model.parameters():
param.requires_grad = False
现在我们想用我们自己的分类器替换模型的默认分类器。分类器是全连接的神经网络,要做到这一点,首先要建立自己的神经网络。
神经网络只是一种在输入和输出的数字之间寻找复杂模式和联系的方法。在这种情况下,需要通过卷积部分突出显示的图像特征来确定图像是某个标签的可能性。
我们要做的第一件事是确定输入到我们神经网络的数字数量。这必须与之前部分(卷积部分)输出的数字数量相匹配。由于我们根本没有改变卷积部分,在我们的分类器中输入的数字量应该与模型的默认分类器相同。
接下来,我们要确定输出的数量。这个数字应该与您拥有的图像类型相匹配。该模型会给你一个百分比列表,每个百分比对应于图片对该标签的确定程度。所以如果你有蜜蜂、蚂蚁和苍蝇的图像,有三个标签。输出层中应该有 3 个数字,每个数字对应于输入是蜜蜂、蚂蚁或苍蝇的概率。
一旦我们有了这些细节,我们就使用 torch.nn 库来创建分类器。信息可以在这里找到。
- nn。顺序可以帮助我们将多个模块组合在一起。
- nn。Linear 指定两层之间的交互。我们给它 2 个数字,指定两层中的节点数。
- 比如在第一个 nn 里。线性,第一层是输入层,我们可以在第二层选择想要多少个数字(我用的是 1024)。
- nn。ReLU 是隐藏层的激活功能。激活函数帮助模型学习输入和输出之间的复杂关系。我们在除了输出之外的所有层上使用 ReLU。
我们对任意多个隐藏层重复此操作,每个层中有任意多个节点。
- nn。LogSoftmax 是输出的激活功能。softmax 函数将输出的数字转换为每个标签的百分比,并应用 log 函数来加快计算速度。我们必须指定输出层是一个列,因此我们将 dimension 设置为 1。
创建我们自己的分类器后,我们替换模型的默认分类器。
# Create new classifier for model using torch.nn as nn libraryclassifier_input = model.classifier.in_features
num_labels = #PUT IN THE NUMBER OF LABELS IN YOUR DATAclassifier = nn.Sequential(nn.Linear(classifier_input, 1024),
nn.ReLU(),
nn.Linear(1024, 512),
nn.ReLU(),
nn.Linear(512, num_labels),
nn.LogSoftmax(dim=1))# Replace default classifier with new classifiermodel.classifier = classifier
现在模型已经创建好了!接下来,我们只需要训练它。
步骤 5:训练和评估我们的模型
在 GPU 上训练模型比 CPU 快很多。因此,为了确定哪个设备对您可用,我们使用 Torch 来检查。如果有兼容的 GPU,我们将变量设置为 GPU,如果没有,则坚持使用 CPU。然后我们把模型移到这个设备上。
# Find the device available to use using torch librarydevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")# Move model to the device specified abovemodel.to(device)
在训练时,我们需要确定我们的模型有多“偏离”。为了评估我们模型的误差量,我们使用神经网络。NLLLoss 。这个函数接收我们模型的输出,为此我们使用了神经网络。LogSoftmax 函数。
为了训练我们的模型,我们采用我们的误差,看看我们如何调整我们的数字乘以权重,以获得最小的误差。计算我们如何调整我们的体重并将其应用于我们的体重的方法被称为亚当。我们使用 torch.optim 库来使用这个方法,并给它我们的参数。
# Set the error function using torch.nn as nn librarycriterion = nn.NLLLoss()# Set the optimizer function using torch.optim as optim libraryoptimizer = optim.Adam(model.classifier.parameters())
现在我们训练。我们希望我们的模型多次遍历整个数据集,所以我们使用 for 循环。每一次它检查了整组图像,就被称为一个时期。在一个时期内,我们希望模型通过训练集和验证集。
我们从训练集开始。
我们首先将模型设置为训练模式,并使用 for 循环遍历每幅图像。
在将图像和标签移动到适当的设备之后,我们需要通过声明 optimizer.zero_grad() 来清除权重的调整。
然后,在给定图像的情况下,我们可以计算模型的输出,以及在给定输出和正确答案的情况下,我们的模型有多“偏离”。
然后,我们可以通过调用 loss.backward() 找到我们需要进行的调整以减少这个错误,并通过调用 optimizer.step() 使用我们的优化器来调整权重。
当我们训练时,我们想知道事情进展如何,所以我们记录我们计算的总误差并打印出训练的进度。
我们转到验证集。
我们将模型设置为评估模式,并使用 for 循环遍历集合中的所有图像。
我们重复对训练集采取的步骤,以获得我们的模型的输出以及我们的模型与真实标签“偏离”了多少。
为了提高计算速度,我们的模型使用了 LogSoftmax 函数,但是现在我们想要的是真实的百分比,而不是对数百分比。所以我们用 torch.exp 来反转 log 函数。然后我们想看看模型为我们的图像猜测了哪个类。。topk 给出了我们猜测的顶级类,以及它猜测的百分比——我们只关心这个类,所以我们可以忽略这个百分比。
为了确定它猜对了多少图像,我们检查哪些猜测的类等于真实的类。然后,我们可以对整批进行平均,以确定我们的模型的准确性(猜对的图像数除以图像总数)。
在检查完训练集和验证集之后,我们希望打印两者的错误以及验证集的准确性。
epochs = 10
for epoch in range(epochs):
train_loss = 0
val_loss = 0
accuracy = 0
# Training the model
model.train()
counter = 0
for inputs, labels in train_loader:
# Move to device
inputs, labels = inputs.to(device), labels.to(device) # Clear optimizers
optimizer.zero_grad() # Forward pass
output = model.forward(inputs) # Loss
loss = criterion(output, labels) # Calculate gradients (backpropogation)
loss.backward() # Adjust parameters based on gradients
optimizer.step() # Add the loss to the training set's rnning loss
train_loss += loss.item()*inputs.size(0)
# Print the progress of our training
counter += 1
print(counter, "/", len(train_loader))
# Evaluating the model
model.eval()
counter = 0
# Tell torch not to calculate gradients
with torch.no_grad():
for inputs, labels in val_loader:
# Move to device
inputs, labels = inputs.to(device), labels.to(device) # Forward pass
output = model.forward(inputs) # Calculate Loss
valloss = criterion(output, labels) # Add loss to the validation set's running loss
val_loss += valloss.item()*inputs.size(0)
# Since our model outputs a LogSoftmax, find the real
# percentages by reversing the log function
output = torch.exp(output) # Get the top class of the output
top_p, top_class = output.topk(1, dim=1) # See how many of the classes were correct?
equals = top_class == labels.view(*top_class.shape) # Calculate the mean (get the accuracy for this batch)
# and add it to the running accuracy for this epoch
accuracy += torch.mean(equals.type(torch.FloatTensor)).item()
# Print the progress of our evaluation
counter += 1
print(counter, "/", len(val_loader))
# Get the average loss for the entire epoch
train_loss = train_loss/len(train_loader.dataset)
valid_loss = val_loss/len(val_loader.dataset) # Print out the information
print('Accuracy: ', accuracy/len(val_loader))
print('Epoch: {} \tTraining Loss: {:.6f} \tValidation Loss: {:.6f}'.format(epoch, train_loss, valid_loss))
步骤 5:实际使用我们的模型
太棒了!你刚刚建立了一个人工智能图像分类器。但是,现在我们想实际使用它——我们想给它一个随机图像,看看它认为这是哪个标签。
首先,我们为评估模式设置模型。
model.eval()
然后我们创建一个可以处理图像的函数,这样它就可以输入到我们的模型中。
我们打开图像,通过保持纵横比但使最短边仅为 255 px 来调整其大小,并通过 224px 裁剪中心 224px。然后,我们将图片转换成一个数组,并通过转置数组来确保颜色通道的数量是第一维,而不是最后一维。接下来,我们通过除以 255 来转换 0 和 1 之间的每个值。然后,我们通过减去平均值并除以标准偏差来标准化这些值。最后,我们将数组转换为 Torch 张量,并将值转换为 float。
这些步骤与我们在步骤 2 中指定的步骤相同,但是这一次我们必须手动编码命令,而不是依赖于转换库。
# Process our image
def process_image(image_path):
# Load Image
img = Image.open(image_path)
# Get the dimensions of the image
width, height = img.size
# Resize by keeping the aspect ratio, but changing the dimension
# so the shortest size is 255px
img = img.resize((255, int(255*(height/width))) if width < height else (int(255*(width/height)), 255))
# Get the dimensions of the new image size
width, height = img.size
# Set the coordinates to do a center crop of 224 x 224
left = (width - 224)/2
top = (height - 224)/2
right = (width + 224)/2
bottom = (height + 224)/2
img = img.crop((left, top, right, bottom))
# Turn image into numpy array
img = np.array(img)
# Make the color channel dimension first instead of last
img = img.transpose((2, 0, 1))
# Make all values between 0 and 1
img = img/255
# Normalize based on the preset mean and standard deviation
img[0] = (img[0] - 0.485)/0.229
img[1] = (img[1] - 0.456)/0.224
img[2] = (img[2] - 0.406)/0.225
# Add a fourth dimension to the beginning to indicate batch size
img = img[np.newaxis,:]
# Turn into a torch tensor
image = torch.from_numpy(img)
image = image.float()
return image
处理完图像后,我们可以构建一个函数来使用我们的模型预测标签。我们将图像输入到我们的模型中,并获得输出。然后,我们反转在输出层应用的 LogSoftmax 函数中的日志,并返回模型预测的顶级类及其猜测的确定程度。
# Using our model to predict the label
def predict(image, model):
# Pass the image through our model
output = model.forward(image)
# Reverse the log function in our output
output = torch.exp(output)
# Get the top predicted class, and the output percentage for
# that class
probs, classes = output.topk(1, dim=1)
return probs.item(), classes.item()
最后,我们想要显示图像。我们将图像转换回一个数组,并通过乘以标准偏差并加回平均值来取消标准化。然后我们使用 matplotlib.pyplot 库来绘制图片。
# Show Image
def show_image(image):
# Convert image to numpy
image = image.numpy()
# Un-normalize the image
image[0] = image[0] * 0.226 + 0.445
# Print the image
fig = plt.figure(figsize=(25, 4))
plt.imshow(np.transpose(image[0], (1, 2, 0)))
现在,我们可以使用所有这些函数来打印我们的模型的猜测和它有多确定!
# Process Image
image = process_image("root/image1234.jpg")# Give image to model to predict output
top_prob, top_class = predict(image, model)# Show the image
show_image(image)# Print the results
print("The model is ", top_prob*100, "% certain that the image has a predicted class of ", top_class )
就是这样!
Jupyter 笔记本初学者教程
原文:https://towardsdatascience.com/a-beginners-tutorial-to-jupyter-notebooks-1b2f8705888a?source=collection_archive---------3-----------------------
使用 Jupyter 笔记本进行交互式数据科学项目
想获得灵感?快来加入我的 超级行情快讯 。😎
Jupyter 笔记本是交互式开发和展示数据科学项目的强大工具。Jupyter 笔记本将您的代码及其输出集成到一个单独的文档中。该文档将包含文本、数学方程以及代码直接在同一页面上生成的可视化效果。
这种循序渐进的工作流程促进了快速、迭代的开发,因为代码的每个输出都会立即显示出来。这就是为什么笔记本电脑在过去几年越来越受欢迎,尤其是在数据科学领域。 Kaggle 内核如今几乎都是用 Jupyter 笔记本做的。
本文的目标读者是希望开始使用 Jupyter 笔记本的初学者。我们将从头到尾地讲解:安装、基本使用以及如何创建一个交互式数据科学项目!
设置 Jupyter 笔记本
要开始使用 Jupyter 笔记本,您需要从 Python 安装 Jupyter 库。最简单的方法是通过 pip:
pip3 install jupyter
这些天我一直推荐使用pip3
而不是pip2
,因为从 2020 年 1 月 1 日开始 Python 2 将不再被支持。
现在你已经安装了 Jupyter,让我们来学习如何使用它!首先,使用您的终端进入您想要使用cd
命令工作的文件夹(Linux 或 Mac)。然后使用以下命令启动 Jupyter:
jupyter notebook
这将启动一个 Jupyter 服务器,并且您的浏览器将打开一个指向以下 URL 的新标签:http://localhost:8888/tree。它看起来有点像这样:
太好了!我们已经启动并运行了 Jupyter 服务器。现在我们可以开始构建我们的笔记本,并用代码填充它!
Jupyter 笔记本的基本知识
要创建笔记本,点击右上角的“新建”菜单,选择“Python 3”。此时,您的网页将如下所示:
你会注意到在你页面的顶部,在 Jupyter 图标旁边有一个单词Untitled——这是你笔记本的标题。让我们把它改成更具描述性的。只需将鼠标移到无标题的单词上,然后点击文本。您现在应该会看到一个浏览器内对话框,您可以在其中重命名笔记本。我把我的叫做乔治的笔记本。**
让我们开始写一些代码吧!
注意你笔记本的第一行旁边是如何标有In []
的。该关键字指定您将要键入的内容是一个输入。让我们试着写一个简单的打印语句。回想一下,您的 print 语句必须具有 Python 3 语法,因为这是一个 Python 3 笔记本。一旦您在单元格中写下您的打印声明,按下运行按钮。
厉害!看看输出是如何直接打印在笔记本上的。这就是我们如何通过看到过程中每一步的输出来做一个交互式项目。
还要注意,当您运行单元格时,旁边有一个In []
的第一行现在已经变成了In [1]
。方括号内的数字表示单元运行的顺序;第一个单元有一个1
,因为这是我们运行的第一个单元。我们可以随时单独运行每个单元,这些数字会发生变化。
我们举个例子。我们将设置两个单元格,每个单元格都有不同的打印语句。我们将首先运行第二个 print 语句,然后运行第一个 print 语句。看看方括号内的数字是如何变化的。
当您的笔记本中有多个单元格并且按顺序运行这些单元格时,您可以跨单元格共享变量和导入。这使得将代码分成相关的部分变得容易,而不需要在每个单元格中重新创建变量。只是要确保你以正确的顺序运行你的单元格,这样所有的变量在使用前就被创建了。
向笔记本添加描述性文本
Jupyter 笔记本附带了一套很棒的工具,用于向您的笔记本添加描述性文本。你不仅可以写评论,还可以添加标题、列表、粗体和斜体。所有这些都是以超级简单的降价形式完成的。
首先要做的是改变单元格类型——单击上面写着“Code”的下拉菜单,将其更改为“Markdown”。这改变了我们正在研究的细胞类型。
让我们尝试几个选项。我们可以使用#
符号来创建标题。一个单独的#
将会成为最大的标题,增加更多的#
将会产生越来越小的标题。
我们可以在文本的两边使用单星形来倾斜文本,或者使用双星形来加粗文本。用一个简单的破折号-
和每个列表项旁边的空格创建一个列表很容易。
交互式数据科学
让我们快速演示一下如何创建一个交互式数据科学项目。这个笔记本和代码来自我做的一个实际项目。
我从一个 Markdown 单元格开始,通过使用一个#
用最大的标题显示一个标题。然后,我创建了一个列表,并描述了我将要导入的所有重要库。
接下来是导入所有相关库的第一个代码单元。这将是标准的 Python 数据科学代码,除了一个额外的项目:为了在笔记本中直接查看您的 Matplotlib 可视化,您需要添加以下行:%matplotlib inline
。
接下来,我将从 CSV 文件导入数据集,并打印出前 10 项。请注意下面的截图,Jupyter 如何自动将.head()
函数的输出显示为表格——Jupyter 与 Pandas 库配合得非常好!
现在,我们将创建一个图形,并将其直接绘制在笔记本上。由于我们已经在上面添加了行%matplotlib inline
,任何时候我们运行plt.show()
我们的数字将直接显示在我们的笔记本上!
还要注意,只要我们按下前面单元格上的“运行”按钮,前面单元格中的所有变量,尤其是我们从 CSV 中读取的数据帧,是如何传递到未来单元格的。
瞧啊。这是创建交互式数据科学项目的简单方法!
菜单
Jupyter 服务器有几个菜单,您可以使用它们来充分利用您的项目。这些菜单使您能够与笔记本进行交互,访问流行 Python 库的文档,并将项目导出为外部演示格式。
文件菜单允许你创建、复制、重命名和保存你的笔记本到文件。文件菜单中最引人注目的项目是下载为下拉菜单,它允许您下载各种格式的笔记本,包括 pdf、html 和幻灯片——非常适合创建演示文稿!
编辑菜单让你可以剪切、复制和粘贴代码。您还可以在这里重新排列单元格,如果您正在为交互式演示创建一个笔记本,并希望以某种顺序向您的观众展示内容。
视图菜单可以让你随意操作,比如显示行号和修改工具栏。该菜单中最好的功能无疑是单元格工具栏,在这里您可以为每个单元格添加标签、注释和附件。如果您将笔记本变成幻灯片放映,您甚至可以为该单元格选择想要的格式!
插入菜单仅用于在当前选中单元格的上方或下方插入单元格。单元格菜单是您按特定顺序运行单元格或更改单元格类型的地方。
最后,你有帮助菜单,这是我个人的最爱之一!“帮助”菜单让您可以直接访问重要的文档。您将能够了解所有 Jupyter 笔记本快捷方式,以加快您的工作流程。您还可以方便地链接到一些最重要的 Python 库的文档,包括 Numpy、Scipy、Matplotlib 和 Pandas!
喜欢学习?
在推特上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上和我联系吧!
使用 PyViz、Jupyter 和 NetworkX 实现 GREVerbal 的更好方法
原文:https://towardsdatascience.com/a-better-approach-to-the-greverbal-using-pyviz-jupyter-networkx-a9720b940fc8?source=collection_archive---------44-----------------------
The GreVisualizer!
你 10 天后要参加 GRE 普通考试。这次考试的分数将在决定你被哪个研究生院录取的过程中起到至关重要的作用。你很紧张。你在死记硬背那些高频词,但你的大脑现在已经饱和了。大约一个月前,当我准备 GRE 考试时,我就处于这种情况。
我心想,肯定有更好的方法来做这件事。可以应用一种更具交互性和可视化的方法。人类保留视觉和声音的时间比简单的纯文本要长得多。我有一个 Excel 表格,是我在准备过程中填充的。这有两种说法。一组包含同义词,而另一组包含经常混淆的单词。率真而巧妙。Excel 表格是一个天真的方法,我需要一个巧妙的方法。
This is mundane, bleh.
This is fun!
我决定将这些单词组建模为图中的网络。在同义词的情况下,中心节点将是单词的含义,所有具有该含义的单词都将被附加到它上面。在常见的混淆词的情况下,它们都是相连的,如果你悬停在节点上,你会得到它们的意思。我使用 pyViz 和 NetworkX 从我的原始 Excel 文件中模拟这些图表。
在这之前一切都很好,我非常兴奋地分享这个可视化工具。不过,我有一个大问题。我如何向公众公布?我在 Jupyter 笔记本中用 python 代码生成的输出是一个交互式 HTML 文件。我找不到在网上免费分享的好方法。我反复考虑这个问题,陷入了僵局,直到…
PyData NYC, 2019!
我坐在纽约微软会议中心的五楼,参加 2019 年 PyData NYC 的教程。该教程名为快速将 Jupyter 笔记本变成漂亮的网络应用。这是一次信息丰富、引人入胜的会议。我对我的可视化工具部署问题提出了多种可能的解决方案。
我一回到印度,就开始着手这项工作。我希望用户体验是无缝的,并主要关注于探索图形,而不是强调底层代码。为此,我使用了 Jupyter 的 RISE 首先将我的笔记本转换为幻灯片(是的!).这使得对于那些对代码不感兴趣,只是为了文字而来的人来说更加友好!我还希望最终用户的设置时间和工作量为零。为了实现这一点,我使用 Binder 来部署我的笔记本。在那之后,我简单地把活页夹的标志放在我的 Github 库上,做了一个演示 GIF 并分享给我的网络!
https://github . com/array layer/the revigualizer/raw/master/demo/demo . gif
这个项目还有很多工作要做。一些功能包括用户添加新链接的能力,搜索单词,并从单词数据库中提出问题。这就是我开源代码的原因,我鼓励任何感兴趣的人都来帮忙。你可以试试这个可视化工具,如果你愿意的话,甚至可以为它做点贡献,这里。
一个更好的带有熊猫轮廓的 EDA
原文:https://towardsdatascience.com/a-better-eda-with-pandas-profiling-e842a00e1136?source=collection_archive---------1-----------------------
探索性数据分析已死,熊猫万岁——剖析!事半功倍,完美概述您的数据。
Unsplash
一个充满坏数据的世界
大多数情况下,在数据科学中,我们收集的数据不像互联网上可用的数据集那样干净和完整,它们是为机器学习模型的应用而设计和准备的。大多数情况下,数据来自外部来源,没有良好的结构或者只是不完整,而您的工作就是让这些数据受欢迎和可用!
虽然数据科学家意识到了数据质量的重要性,但对于企业领导者来说却不一定如此。他们更关注尽早采用技术以保持竞争优势,但通常对实际方面了解甚少。这意味着人们使用他们数据集中的所有东西,并希望得到最好的结果,借口是数量可以补偿质量。
由于这种思维方式的差异,一个数据科学家在建模之前要花 80%的时间准备数据集。
为什么他 80%的时间?有缺失值、不平衡数据、没有任何意义的列名、重复数据、过期数据等原因。人们最近才意识到数据的重要性。因此,即使趋势逆转,数据也很难容易获取且结构良好。
[## 处理缺失数据
几乎所有真实世界的数据集都有缺失值,这不仅仅是一个小麻烦,而是一个严重的问题…
medium.com](https://medium.com/@danberdov/dealing-with-missing-data-8b71cd819501)
一个坏的数据集的后果是简单而合乎逻辑的:用这些数据集制作的预测模型将具有低准确性和低效率。用不正确的数据训练一个模型会产生偏差,你的结果会与现实相差甚远。一个坏的模型是一个不能被部署的模型,所以对于开发这个模型的公司来说,这是一个金钱的损失。用生锈的零件制造的汽车将无法正常行驶,甚至根本无法行驶……而且没有人愿意使用或购买生锈的汽车!
Stock.io
所以,你的数据集是你项目的关键。它在技术和经济上的成功取决于你所选择的数据的质量。在一个机器学习项目中,跳过这个数据评估步骤可能会导致相当大的时间浪费,并且您将不得不从头开始重新开始您的项目。现在看来,数据科学家花了这么多时间调查和准备数据集!
[## 坏数据正在破坏机器学习,下面是如何修复它
becominghuman.ai](https://becominghuman.ai/bad-data-is-ruining-machine-learning-heres-how-to-fix-it-31ae9f4cef3f)
低质量的数据只会导致低质量的结果。
上帝创造了 EDA,探索性数据分析
概念方法
为了确保我们的数据集是有用的,一个好的做法是 EDA,探索性数据分析。
EDA 是一种让你熟悉数据集的方式。通过这种反射工作,这是使用有趣的、连贯的和干净的数据的保证。这一步非常直观,基于汇总统计数据和图形表示。
通过一个 EDA ,数据科学家可以发现哪些特性是重要的或者它们之间的相关性。另一方面,EDA 允许您发现错误或缺失的值,检测异常或拒绝假设。特征变量的选择将在以后用于机器学习。
一般来说,探索性数据分析之后是特征工程/数据扩充步骤,在该步骤中,您对初始数据进行处理,为其带来附加值
[## 什么是探索性数据分析?
当我在考虑我应该开始写博客的第一个话题是什么的时候,EDA 突然出现了…
towardsdatascience.com](/exploratory-data-analysis-8fc1cb20fd15)
EDA 的一个基本示例:
对于这个例子,我取了一个非常适合 EDA 的数据集, FIFA 19 完整球员数据集。数据包含多种数据类型、缺失值和许多指标都适用。关于该数据集的几个完整分析可在此处获得。我使用 JupyterLab 作为 IDE,因为它的灵活性和用户友好的界面。
让我们从使用 Pandas 库从 CSV 文件导入数据开始:
装载速度很快。现在概述一下data.sample(5)
,一种随机选择 5 行的方法。如果你不知道你的数据是如何排序的,那么使用.sample()
比.head()
更好。
用.describe()
来做一些描述性统计吧。这种方法“总结了数据集分布的集中趋势、分散和形状,不包括NaN
值”。
现在我们有了描述性统计数据,我们将检查缺失值。我们将只打印缺失值超过 10%的 10 个有序要素:
如您所见,对于数据科学家来说,在笔记本电脑上进行 EDA 既方便又高效。尽管如此,视觉仍然是总结,并按指标打印。现在,让我们看看如何用 Pandas-profiling 动态地打印这些信息,并且花费更少的精力。
我们通过观察来学习
熊猫侧写,我们的救星
这个概念
Github 描述:“从熊猫数据框架中生成个人资料报告”
Pandas-profiling 将所有砖块集合到一个完整的 EDA 中:最频繁值、缺失值、相关性、分位数和描述性统计数据、数据长度等等。得益于这些指标,您将很快看到数据的分布和差异。这些信息对于了解数据是否对未来有用至关重要。
[## 熊猫简介/熊猫简介
从 pandas DataFrame 对象创建 HTML 分析报告—pandas-profiling/pandas-profiling
github.com](https://github.com/pandas-profiling/pandas-profiling)
指标呈现在交互式 HTML 报告中。
Pandas-profiling 通过 HTML 报告以结构化的方式呈现不同的指标。由于它的交互作用,很容易从一个特性切换到另一个特性并访问它的指标。
让我们看看如何使用它:
pip install pandas-profiling
使用我们之前的 FIFA 数据集:
import pandas as pd
import pandas_profilingdata_fifa = pd.read_csv('fifa.csv')
profile = data_fifa.profile_report(title='Pandas Profiling Report')
profile.to_file(output_file="fifa_pandas_profiling.html")
在上面的代码中,我们只导入 pandas 和 pandas-profiling 依赖项,读取我们的 CSV 文件并调用profile_report()
方法,因为pandas_profiling
用data_fifa.profile_report()
扩展了 pandas 数据帧。然后,我们用.to_file()
将我们的ProfileReport
对象导出为一个 HTML 文件。
瞧!这里,我们的 HTML 文件位于文件夹的根目录:
上图显示了报告的“概述”部分。这一部分简要介绍变量类型、缺失值或数据集大小的信息。
Pandas-profiling 使用 matplotlib 图形库和 jinja2 作为其界面的模板引擎。
作为一名自由职业者,当我不得不为客户处理一个新的数据集时,我总是首先制作一个熊猫简介,这有助于我吸收数据集。这个实践允许我量化数据集的处理时间。有多少特征看起来是正确的?有多少包含缺失值?每个功能占多大比例?哪个变量依赖于另一个变量?
此外,该报告还可以作为一个界面,为客户提供数据健康的全局信息。这份报告不是在你的 Jupyter 笔记本上展示你的分析,而是一个接一个的图表,并在之间用代码隔开,而是按照特性集中指标,并有一个更加的用户友好界面。我的客户希望对我为他们执行的任务有一个完整的跟踪,并希望定期了解我的进展。我经常使用这个报告来给出数据的健康状态。这一步之后是更深入的数据分析和可视化的第二步。
结论
大数据的潜力一直在增长。充分利用意味着公司必须将分析和预测系统纳入其战略愿景,并利用它做出更好、更快的决策。通常,我们检索的数据包含错误或缺失的数据。为了真正有效,这些数据必须经过分析和处理。这就是数据科学家的角色。有了 pandas-profiling ,数据科学家能够以更少的努力产生快速的探索性数据分析报告。该报告清晰、易于使用,任何具有基本统计技能的人都可以阅读。
有了对眼前情况的全面了解,你就有了进一步分析的思路,开始处理数据或寻找外部数据源来提高数据质量。预处理数据并提高其质量至关重要,因为我们的预测机器学习模型的质量与我们输入模型的数据质量直接相关。
我希望你喜欢这个熊猫简介——简介!这是我在 medium 上写的第一篇文章,我对任何评论和改进都感兴趣!
圣甲虫的消息
[## 用我的推荐链接加入媒体-圣甲虫的新闻
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@ScarabNews/membership) [## 每当圣甲虫的新闻出版的时候得到一封电子邮件。
每当圣甲虫的新闻出版的时候得到一封电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…
medium.com](https://medium.com/subscribe/@ScarabNews)
用 Python 实现更好的 Excel 目标搜索
原文:https://towardsdatascience.com/a-better-excel-goal-seek-using-python-fb6aff56e9f2?source=collection_archive---------7-----------------------
Solving has been artifically slowed down for visualization.
微软 Excel 有一个很棒的功能,在数据/假设… 菜单下的“Goal Seek”。给定一个公式,它将计算输入需要什么,以便该公式等于一个特定的结果。这是一个非常强大但简单的工具。
标准的“目标搜索”功能虽然在许多情况下很有用,但却有一定的局限性。它只能求解单个输入像元,并且无法控制所使用的算法。
还有更复杂的“规划求解”插件,它也是 Excel 的一部分。这就像是打了兴奋剂的“寻根问底”!它可以处理多元函数、约束,并有多种优化算法可供选择。
如果这还不够呢?对于更复杂的问题,如全局优化或大规模优化,“规划求解”加载项中的默认算法可能不够。
Python 和 scipy.optimize
Python 是许多数据科学家的首选工具,理由很充分!对于超越 Excel 中简单的“目标求解”或“规划求解”解决方案的优化问题,Python 包 scipy.optimize 提供了一系列更全面的算法。
如果您的模型可以很容易地用 Python 重写,那么使用 scipy.optimize 是一个很好的解决方案。但是,如果您的模型已经在 Excel 中,或者您更喜欢留在 Excel 中,仍然可以在 Excel 中利用 scipy.optimize 函数。
如果你是 Python 的新手并且想学习,你可以在这里下载免费的电子书《VBA 开发者的 Python 终极指南》:
https://www . pyxll . com/ultimate-python-guide-for-VBA-developers . html
Python Excel 与 PyXLL 的集成
如果你是一个 Excel 用户,你想使用 Python 作为工作簿的后端,或者如果你是一个 Python 用户,你想使用 Excel 作为 Python 代码的前端,你可以使用 PyXLL,Python Excel 插件。
没有必要在 Excel 的交互性和 Python 的强大功能和生产力之间做出选择,因为您可以将 Python 集成到 Excel 中,甚至使用 Python 作为 VBA 的完全替代。
PyXLL 允许你编写工作表函数(UDF),Excel 宏,菜单函数,功能区工具栏,RTD 函数等等,全部使用 Python——不需要 VBA。
从 Excel 调用 scipy.optimize
随着 Python 在 Excel 中运行,我们现在可以直接在 Excel 中使用 scipy.optimize。
要在 Python 中执行与 Excel 的 Goal Seek 等效的操作,我们应该执行如下操作:
**from** scipy.optimize **import** minimizeminimize(objective_func, X)
其中 X 是目标函数输入的初始值。目标函数是我们试图最小化的东西,在我们的例子中是一个 Excel 公式。
我们的目标函数需要在 Excel 中包装我们的模型。与我们使用 Goal Seek 时一样,我们的模型只是一组输入单元和一个输出单元。我们的目标函数将设置输入单元格的值,计算工作表,然后读回输出单元格的值。
一个简单的例子是,输入在 C2 和 C3,输出在 C4。PyXLL 使访问 Excel 应用程序对象和访问单元格值变得简单,就像在 VBA 中一样:
**from** pyxll **import** xl_app **def** objective_func(arg): xl **=** xl_app() # Copy argument values to input range xl.Range('C2').Value **=** float(arg[0]) xl.Range('C3').Value **=** float(arg[1]) # Calculate after changing the inputs xl.Calculate() # Return the value of the output cell result **=** xl.Range("C4").Value **return** result
现在我们有了一个目标函数,我们需要一些调用优化器的方法。我们可以通过 PyXLL 的@xl_macro decorator 使用 Python 编写的 Excel 宏来实现这一点。
**from** pyxll **import** xl_macro, xl_app@xl_macro(shortcut**=**'Ctrl+Alt+P')**def** optimize():
# Get the initial values of the input cells xl **=** xl_app() x **=** xl.Range("C2").Value y **=** xl.Range("C3").Value X **=** np.array([x, y]) # run the minimization routine minimize(obj_func, X, method**=**'nelder-mead')
该宏可以分配给按钮,也可以通过指定的快捷键调用。
进一步阅读
在这篇博客文章中,有更多关于使用 Python 的 scipy . optimize from Excel with PyXLL 的技术细节和深入解释:
https://www.pyxll.com/blog/a-better-goal-seek/
有关 PyXLL 的更多详细信息,请参见
【https://www.pyxll.com】T4。
如果您是 Python 的新手,并且想学习 Python,请在此下载免费电子书“VBA 开发者 Python 终极指南”:
https://www . pyxll . com/ultimate-python-guide-for-VBA-developers . html
请在这里查看 scipy.optimize 文档
https://docs.scipy.org/doc/scipy/reference/optimize.html
提高技能的更好方法
原文:https://towardsdatascience.com/a-better-way-to-skill-up-b2e5ee87dd0a?source=collection_archive---------25-----------------------
头脑风暴如何提高教育即服务行业的客户投资回报率
如今,教育作为一种服务行业正在蓬勃发展。MOOCS(大规模开放在线课程)、在线硕士课程、训练营,甚至 YouTube 视频都为今天好奇的学习者提供了大量高质量的选择。
所以提高技能和找到一份好工作应该很容易,对吗?不对!堆积完成证书和在线学位可能感觉很棒,但它通常不会让你更接近你的梦想工作——尤其是如果那份工作是在另一个行业。
在今天的帖子中,我们将探讨为什么尽管高质量的教育内容真的激增,但没有传统学位(在他们渴望工作的领域)的学习者仍然面临着一场艰苦的战斗。我们还将讨论如何绕过这一障碍,以便为新毕业生和转行者提供更多的入门机会。
关系很重要…非常重要!
因为这个世界上所有重要的事情都可以放入一个 2×2 的矩阵中(开玩笑,只有管理顾问才会这么想),这里有一个将员工分成四类的方法:
- 有关系但缺乏经验——你缺乏经验,但在你渴望为之工作的公司里认识很多人。因为你善于交际,善于交际,雇主喜欢你,认为你潜力巨大,值得一赌。
- 人脉广、知识丰富——这里不用担心工作,只要继续把这些股份投给谷歌(或者脸书、Airbnb 或 Lyft)就行了。
- 隐士和没有经验的人——你在寒冷贫瘠的苔原上被无情地拒绝(一份无推荐的工作申请)。当你最终获得面试机会时,招聘经理会瞄准你缺乏相关经验的情况,迅速粉碎你获得高薪工作的梦想。
- 作为个人贡献者(IC),你多年来来之不易的经验为你赢得了合理而稳定的薪水。
The drivers of gainful employment
因此,如果你被困在没有经验的隐士盒子里,你有两种主要的方法可以摆脱:
- 结识相关人士,与他们一拍即合,有希望去他们的公司工作。
- 获得教育和知识来增加你获得有报酬工作的机会。请注意,虽然经验胜于知识,但有一个“先有鸡还是先有蛋”的问题,我需要一份工作来获得找工作所需的经验。
如今教育即服务的问题是
如今的教育即服务产品主要关注技能提升。他们试图教你当下最受欢迎的技能,让你朝着下面的黄金箭头方向前进——从失业、缺乏经验的隐士变成有知识、有工作能力的同事。
Education as a service tries to move you in this direction
朝这个方向前进的问题是,真的很难。仅仅学习这些是不够的,你还必须:
- 获得一份向雇主表明你知识渊博的证书——而且必须是一份他们听说过并尊重的证书。
- 展示将你的知识实际应用于解决商业问题的能力(最好是通过签约或实习等实际付费经历)。如果你的证书不是顶级的,这就变得特别重要。
你看出问题了吗?一切都是为了赢得信誉,目前只有两种主要的方式来赢得信誉——大学和公司。因为我经常写关于数据科学的文章,所以让我们以它为例。试图进入该领域的有抱负的数据科学家可以通过以下两种方式之一获得一些街头信誉:
- 上一所受人尊敬的大学,获得数据科学学位(最好是更高的学位)。
- 说服一家受人尊敬的公司给你报酬,让你从事与数据相关的工作。
另一方面,MOOCs、训练营和其他替代项目无法为你赢得必要的信誉。他们可能会教你必要的技能(根据我的经验,他们在这方面做得相当不错)。但这有点像古老的哲学陈词滥调:
如果一棵树倒在森林里,周围没有人听到,它会发出声音吗
即使我通过阅读书籍、博客、一两个 MOOC 和训练营,对机器学习和统计学有了深刻的理解,我仍然有可能被我想要的工作拒绝。雇主只是不太相信结业证书。
从雇主的角度来看,这是一场赌博:鉴于你没有数据科学工作经历,也没有人能保证你真正了解自己的东西,他们只能相信你的话。不幸的是,并不是每个雇主都愿意这么做——人们,包括招聘经理,通常都不愿意承担风险,愿意为安全、“可靠”的候选人支付额外费用(从生产率和财务角度来看,雇佣错误的人都是痛苦的)。
是的,我知道。如果你充满动力和主动性,你可以参加 Kaggle 比赛,在会议和聚会上结识业内人士,自己建立一个令人敬畏的数据科学项目组合,并为早期创业公司无偿工作(所有这些都在面试时进行)。但这并不适合所有人。Bootcamps 和他们的教育即服务竞争对手,虽然比传统的大学学位便宜,但在时间和金钱方面仍然花费相当多(15,000 到 20,000 美元的学费和至少几个月的时间)。他们还在营销中强调你毕业后的就业能力。但是,如果没有人脉或者足够有声望的认证(即使是最好的训练营也缺乏这种认证),你完成这个项目就像是一棵树倒在一片荒芜的森林里,周围没有雇主看到或者关心它。
我们如何解决这个问题?
我同意雇主应该更加开明。应该给转行者和来自非传统背景的候选人更多证明自己的机会,应该更加平等地看待自我获得的知识(和经验)和声望学位。但遗憾的是,尽管我们希望如此,雇主们可能不会改变他们的招聘方式(即使他们会改变,也是非常缓慢的)。
因此,这取决于教育即服务行业,它仍然相当年轻,以找出如何提供最大的影响。回到我们的 2 乘 2 矩阵,我要建议的应该是很明显的(我们可以移动的方式只有这么多):
Focus on moving up and modestly right
请注意箭头现在是如何向上并适度向右移动的。是的,知识构建部分仍然很重要,但我们(从现在开始我将使用皇家“我们”这个词,因为一遍又一遍地将教育作为服务行业是很累的)需要找到一种方法,为非传统学习者提供更多更好的渠道给雇主。
潜在的解决方案必须符合以下标准:
- 减少雇佣非传统学习者的耻辱和风险(从雇主的角度)。
- 增加从事信誉和知识建设项目的机会。这些项目必须是一般招聘经理实际上认为合法的项目。
- 增加指导和网络建设的机会。此外,应该鼓励导师和业内人士帮助毕业生。依靠他人的善意只能让我们走到这一步。
现在有几个有趣的模型。我发现最有趣的两个是洞察奖学金项目和最敏锐的头脑。
Insight 是一个声望很高、选择性很强的 7 周训练营(基本上是数据科学训练营的斯坦福),与雇主有很好的联系。你可以从它的时间表中看出它的联系有多紧密,因为 Insight fellows 花了整个第 5-7 周(将近一半的时间)访问并向潜在雇主展示他们的数据项目(他们在第 5 周之前开发的)。此外,在整个训练营中,他们有机会与导师和校友互动。所以 Insight 符合我们的所有标准。问题是,它只接受博士(数据科学奖学金),所以它的典型候选人是一个非常传统的学习者,可能很少甚至不需要工作帮助。事实上,我认为 Insight 就像一个热门市场中的房地产经纪人——只是坐在买家(雇主)和卖家(有抱负的数据科学家)之间,从每笔交易中抽取佣金,而没有增加多少实际价值。
最敏锐的思维可能是两者中更好的长期解决方案。该公司运营一个平台,将导师与有抱负的数据科学家联系起来。导师指导学生完成一个数据项目,提供面试准备,并向学生开放他或她自己的网络。导师提供帮助的动机来自收入共享协议——如果导师帮助学生找到相关工作,导师将获得学生第一年工资的一小部分。
We need a marketplace for connecting learners with legit projects (Photo by Krisztina Papp from Pexels)
还缺什么?
但我认为我们还可以做得更好。洞察力太有选择性,主要为那些不需要帮助的人提供帮助。与此同时,“最敏锐的头脑”过于依赖导师和他们的个人能力来为学生开拓机会。在我看来,还有一种相对未开发的资源——公司本身。
我的提议是一个平台,将有抱负的数据科学家与来自实际公司的为期 3 个月的付费数据科学项目相匹配。以下是我心中想法的大致轮廓(我对此的想法非常初步):
- 想要成为平台一部分的学习者(有抱负的数据科学家)必须提交他们在业余时间完成的数据科学项目的代码和书面报告。它不一定是一个完美的项目,但它必须表现出一些主动性,创造性和激情。
- 学习者的教育背景和以前的工作经历被掩盖(匹配后才暴露)。公司必须完全根据学员申请的项目,或者(如果适用的话)该平台上以前的项目来选择学员。这使得学习者的选择更加择优。
- 一个项目最多可以有 7 个人参与。他们可以作为一个团队或独立工作,这取决于公司的愿望。你说为什么独立?一家公司可能希望看到多种独立的方法来解决一个特别棘手的问题,并选择它最喜欢的一种(较少人这样想)。项目完成后支付定义的里程碑和机密。
- 公司有动力提供项目,因为他们可以获得数据科学和分析自由职业者的工作,比雇佣经验丰富的承包商(他们收取很高的时薪以弥补福利的缺乏)、更昂贵的顾问或全职员工要便宜得多。这使得他们可以将低成本、饥渴的人才投入到高选择率的问题中。如果学习者解决了问题,那就太棒了,如果没有,那也很好,因为成本太低了。因此,对公司来说,这是一个低风险、高回报的机会。
- 随着项目的进展,公司和学习者有机会互相评价,保持双方的诚实。如果任何人的评级低于最低阈值,他或她将被禁止进入该平台(包括公司)。
- 提供高评级项目或定期从学员库中招聘人员的公司可以在项目费率上获得折扣,并获得他们选择的学员。
- 同样,在新项目和面试机会(平台上的公司)方面,评级高的学习者有优先权。
- 需要考虑一下公司支付给学习者的费用的算法。它应该是公司评级和学习者评级(基于他们的应用项目和平台上的其他项目)的函数,但也必须做好供需平衡的合理工作。然而,考虑到价值至少在最初是向学习者倾斜的,在早期阶段,学习者很可能比项目多得多(比率应该反映这一点,但不能太低以至于阻碍学习者的参与)。
通过这种方式,学习者可以提高技能并建立自己的投资组合,从而在平台内外赢得真正的信誉(和金钱)。与真实的公司互动和展示也应该提供有价值的网络机会。
另一方面,公司有机会在一个真正的项目(或多个项目)期间评估潜在候选人,并获得稳定的充满激情的人才渠道。
最后,公司无法看到学习者的背景,这保证了选拔将基于优点(匹配前名字可能也需要隐藏,否则公司可以在 LinkedIn 上查找学习者)。
这个随机启动的想法肯定仍然是一个正在进行的工作,我希望在不久的将来继续完善我的想法。感谢您的阅读,也请与我分享您的观点。干杯!
更多数据科学、职业、教育相关岗位由我:
数据科学家是做什么的?
数据科学家面临自动化的风险吗
拿到了数据科学的工作?
数据科学家挣多少钱?
数据科学家赚多少钱第二部
我的 Metis 数据科学训练营经历
每秒十亿行
原文:https://towardsdatascience.com/a-billion-rows-a-second-36b7a2066175?source=collection_archive---------11-----------------------
与大人物合作!Python 中的数据。
你是否曾经开始一个新项目,得到原始数据集,并意识到数据比你的机器所能处理的要大得多?你有没有用 Python 写过一个运行到要花无限多天的脚本?
这两个问题都有解决方案,但对于那些不关注大数据的人来说,没有一个是容易实施的。直到现在。
我最近偶然发现了一个名为 Vaex 的新库,简而言之——它非常有用。Vaex 作者 Maarten Breddels 在他的介绍文章中完美地描述了这一点:
如果你可以立即加载一个 1tb 的数据文件,只读取你需要的部分,用一个聪明的内核程序员花了几十年优化的策略,那不是很好吗?
在提出疯狂请求的同时,我们为什么不请求一个感觉有点像熊猫的、我们都在使用的 API 呢?哦,对了,请不要在我的 2013 MacBook Air 上占用太多内存。因为现在是 2018 年,我们都在 Jupyter 笔记本上工作,所以也让它工作,好吗?请确保我所有打开的笔记本也共享该数据集的内存。
驯服野兽
对于我们这些没有在 Hadoop 生态系统中工作十年经验的人(或者我们这些已经……咳咳……让软件工程师“帮助”解决困难部分的人)来说,处理海量数据集是极其痛苦的。如果你习惯于和熊猫一起工作,Vaex 并不完全是现成的,所以我想在这里降低准入门槛。
数据类型
首先,我们需要谈谈数据类型。在引擎盖下,Vaex 包装了一组 numpy 数组。大多数数据集以 CSV 文件的形式出现,这是许多数据科学家习惯使用的格式。但是,您是否尝试过将 20gb 的文件读入内存?对于大多数计算机来说,这是不可能的。
因此,我们希望将我们的文件转换成 Vaex 喜欢的格式(HDF5 ),而不是让 Vaex 通过 Pandas 进行转换。大型 CSV 文件的典型情况是将它们分解成部分文件,所以我想编写一个 bash 脚本来处理这两种情况。
对于我们的示例文件,我们将使用一个关于空气质量的 Kaggle 数据集 (~2.5GB 解压缩),并且我们将删除大部分字符串列。这给我们留下了大约 1GB 的文件。就数据而言很小,但对这个演示来说很好。
- 首先,你需要下载一个名为 Topcat 的方便的文件转换工具。如果你没有使用的经验。jar 文件,你可以在这里阅读它们。
- 将 jar 复制到 CSV 文件的目录中(您也可以只有一个 jar 文件的中心目录,但我将把它留给读者)。
- 现在,我们使用一个定制的 bash 脚本将 CSV 高效地转换为 HDF5
我们已经准备好测试 Vaex。由于 Vaex 实际上并不将数据集加载到内存中,所以它几乎是即时的。
让我们进行一个相对简单的计算和比较。我们的数据集包含每个数据点的经度和纬度(总共有大约 900 万行。假设我们想要找到包含在纽约市内的所有点。
一个粗略的方框可能给出以下内容:
- nyc_lat = [40.348424,40.913145]
- nyc_long = [-74.432885,-73.696834]
这是 Vaex 和熊猫的对比。
对于这个简单的操作,Vaex 几乎快了 25 倍。请记住,数据集越大,需要进行的数学计算就越多,Vaex 带来的好处就越多。
此外,使用一个名为 Numba 的漂亮的 Python 库,可以显著提高复杂的数学运算(在后面的文章中会详细介绍)。
利用数据科学工具
我总是发现大数据会带来一系列独特的挑战。数以万亿计的数据集、数以万亿计的数学运算以及这两者带来的复杂性让生活变得更加复杂。
像 Vaex 这样的库可以让数据科学家在没有大数据工程师所拥有的深度计算专业知识的情况下,仍然能够以非常高效的方式处理难以置信的大数据集。
如果你有兴趣了解更多关于以小方式(即自己)处理大数据的知识,那么请关注我的媒体,或者通过 https://jessemoore.ca 联系我,讨论一个潜在的项目。
直到下一次…
耶西
最初发表于Jesse Moore . ca。
鸟瞰:机器学习如何帮助你为电动滑板车充电
原文:https://towardsdatascience.com/a-birds-eye-view-leveraging-machine-learning-to-generate-nests-30dd2136a839?source=collection_archive---------20-----------------------
Bird scooters in Columbus, Ohio
自从我开始在西雅图使用自行车共享出行以来,我就对地理位置数据和交通共享经济着迷了。当我看到这个项目利用了来自洛杉矶交通部的移动数据 RESTful API 时,我迫不及待地投入其中,尝试利用一家公司的移动数据 API 构建一个数据产品。
不幸的是,主要的自行车和踏板车提供商(Bird,JUMP,Lime)没有公开的 API。然而,有些人似乎已经能够对用于在他们的 Android 和 iOS 应用程序中填充地图的 Bird API 进行逆向工程。
该数据的一个有趣特征是nest_id,它指示鸟踏板车是否在“巢”中——一个集中的落鸟点,用于将带电的鸟释放回流通中。
我开始提出以下问题:
- 能否进行实时预测以确定踏板车当前是否在巢穴中?
- 对于非巢穴小型摩托车,可以从地理空间聚类中生成新的巢穴位置建议吗?
为了回答这些问题,我构建了一个全栈机器学习 web 应用程序 NestGenerator,它为新的嵌套位置提供了一个自动推荐引擎。该应用程序可以帮助 Bird 在 Android 和 iOS 应用程序中运行的内部鸟巢位置生成功能。NestGenerator 还为鸟类充电者提供实时战略洞察力,这些充电者被引诱根据其所在区域的滑板车和鸟巢位置的邻近程度来优化其滑板车收集和放下路线。
鸟
随着波导最近的10 亿美元估值和 2018 年夏天的3 亿美元 C 轮融资,电动滑板车市场出现了大幅增长。伯德提供的电动滑板车最高时速为 15 英里,解锁费用为 1 美元,每分钟使用费用为 15 美分。鸟类滑板车遍布全球 100 多个城市,他们在 2018 年底宣布,自 2017 年推出以来,他们已经超过了 1000 万辆滑板车。
Bird scooters in Tel Aviv, Israel
随着所有这些滑板车在城市的普及,人们迫切需要给它们充电。因为它们是电动的,所以需要有人给它们充电!充电器可以在他们的家里为滑板车充电,并在巢穴地点将它们放回流通中,从而获得额外的收入。每只鸟的基本价格是 5 美元。当鸟类更难捕捉时,它从那里上升。
数据收集和机器学习管道
The full data pipeline for building “NestGenerator”
数据
从这里的细节开始,我能够编写一个 Python 脚本,返回指定区域内的鸟类滑板车列表、它们的地理位置、唯一 ID、电池电量和鸟巢 ID。
在四周的时间里,我收集了四个城市(亚特兰大、奥斯汀、圣莫尼卡和华盛顿特区)不同时段的摩托车数据。从不同城市收集数据对于训练一个可以在不同城市间推广的机器学习模型的目标至关重要。
一旦配备了踏板车的纬度和经度坐标,我就能够利用附加的 API 和市政数据源来获取精确的地理位置数据,从而创建原始的踏板车属性和城市要素数据集。
数据来源:
- 步行分数 API :返回任意地点的步行分数、公交分数和自行车分数。
- Google Elevation API :返回地球表面所有位置的高程数据。
- Google Places API :返回关于地点的信息。在本 API 中,地点被定义为机构、地理位置或显著的兴趣点。
- Google 反向地理编码 API :反向地理编码是将地理坐标转换成人类可读地址的过程。
- 天气公司数据:返回地理位置的当前天气情况。
- LocationIQ :附近兴趣点(PoI) API 返回给定坐标周围指定的 PoI 或地点。
- OSMnx : Python 包,允许您从 OpenStreetMap 的 API 下载空间几何图形和模型、投影、可视化和分析街道网络。
特征工程
经过广泛的 API 争论,其中包括为期四周的数据收集阶段,我终于能够整合一个多样化的功能集来训练机器学习模型。我设计了 38 个特征来区分一辆摩托车是否在巢穴中。
Full Feature Set
这些特征可以归结为四类:
- 基于舒适度:给定半径内的公园、给定半径内的加油站、步行得分、自行车得分
- 城市网络结构:交叉口数量、平均迂回度、平均街道长度、每个节点的平均街道数、海拔高度
- 基于距离:与最近的高速公路、主要道路、次要道路、住宅道路的接近度
- 特定于踏板车的属性:电池电量、与最近踏板车的接近度、给定半径内的高电池电量(> 90%)踏板车、给定半径内的踏板车总数
对数标度变换
对于每个特性,我绘制了分布图,以探索特性工程机会的数据。对于具有右偏分布的特征,其中平均值通常大于中值,我应用这些对数变换来归一化分布并减少异常值观察的可变性。这种方法用于生成邻近最近的踏板车、最近的高速公路、主要道路、次要道路和住宅道路的日志要素。
An example of a log transformation
统计分析:系统方法
接下来,我想确保我包含在模型中的特征在按嵌套分类分解时显示出显著的差异。我的想法是,当通过巢分类分层时,任何没有显著差异的特征都不会对踏板车是否在巢中产生有意义的预测影响。
按嵌套分类分层的要素分布可以进行统计显著性差异测试。我使用显著性水平为 0.01%的不成对样本 t 检验来计算 p 值和置信区间,以确定通过嵌套分类分层的特征的均值是否存在统计学显著差异。如果 p 值小于 0.01%的阈值,并且 99.9%的置信区间不跨越零,我拒绝零假设。通过拒绝零假设而支持替代假设,通过嵌套分类,认为特征的平均值存在显著差异。
Battery Level Distribution Stratified by Nest Classification to run a t-test
Log of Closest Scooter Distribution Stratified by Nest Classification to run a t-test
扔掉特征
使用上面的方法,我删除了 10 个没有显示统计显著结果的特征。
Statistically Insignificant Features Removed Before Model Development
模型开发
我训练了两个模型,一个随机森林分类器和一个极端梯度提升分类器,因为基于树的模型可以处理倾斜的数据,捕捉重要的特征交互,并提供特征重要性计算。我根据为所有四个城市收集的 70%的数据训练模型,并将剩余的 30%用于测试。
在针对交叉验证数据的性能对模型进行超参数调整之后,是时候对初始数据收集之外的 30%测试数据运行模型了。
我还从没有参与训练模型的其他城市(哥伦布、劳德代尔堡、圣地亚哥)收集了额外的测试数据。我采取这一步骤是为了确保选择的机器学习模型能够很好地适用于各个城市。每个模型在附加测试数据上的性能决定了哪个模型将被集成到应用程序开发中。
在其他城市测试数据上的表现
The Random Forest Classifier displayed superior performance across the board
我选择使用随机森林模型,因为它在 AUC 得分和额外城市测试数据的准确性指标方面表现优异。AUC 是 ROC 曲线下的面积,它提供了跨所有可能的分类阈值的模型性能的总度量。
AUC Score on Test Data for each Model
特征重要性
电池电量是最重要的特征。其他重要的模型特征是与高级电池踏板车的接近度、与最近踏板车的接近度以及与高级电池踏板车的平均距离。
Feature Importance for the Random Forest Classifier
权衡空间
一旦我有了一个用于嵌套分类的工作机器学习模型,我就开始使用 Python 编写的 Flask web 框架构建应用程序。在花了几天时间为应用程序编写代码并合并了经过训练的随机森林模型后,我有足够的时间来测试基本功能。我终于可以在本地运行应用程序来调用 Bird API,并实时地将 scooter 分类成巢了!然而,有一个大问题。生成预测并填充到应用程序中花了七分多钟。那是不可能的。
问题依然存在:这个模型会在生产级环境中实现实时分类的目标吗?这是生产级机器学习应用中的一个关键权衡,在一端,我们针对模型性能进行优化,在另一端,我们针对低延迟应用性能进行优化。
随着我继续测试应用程序的性能,我仍然面临着依赖如此多的 API 进行实时特性生成的挑战。由于跨如此多的外部 API 的速率限制约束和每日请求限制,当前的机器学习分类器不可行合并到最终应用中。
运行时兼容应用模型
回到绘图板后,我训练了一个随机森林模型,它主要依赖于直接从 Bird API 生成的特定于滑板车的特性。
通过称为矢量化的过程,我能够利用 NumPy 数组来转换地理位置距离计算,该数组支持对数据进行批处理操作,而无需编写任何“for”循环。距离计算同时应用于整个地理位置阵列,而不是遍历每个单独的元素。矢量化实现优化了距离相关计算的实时要素工程,将应用程序响应时间提高了 10 倍。
Feature Importance for the Run-time Compliant Random Forest Classifier
这个随机森林模型在测试数据上概括得很好,AUC 得分为 0.95,准确率为 91%。与以前的功能丰富的模型相比,该模型保留了其预测准确性,但应用程序性能提高了 60 倍。对于构建具有实时预测能力的功能应用程序来说,这是一个必要的权衡。
地理空间聚类
现在我终于有了一个在生产级环境中对巢穴进行分类的工作机器学习模型,我可以为非巢穴踏板车生成新的巢穴位置。目标是基于给定位置的非嵌套滑板车的数量生成地理空间聚类。
k-means 算法可能是最常见的聚类算法。但是,k-means 对于广泛的地理定位数据来说并不是最佳解决方案,因为它最小化的是方差,而不是大地距离。这可能会由于远离赤道的纬度上的距离计算失真而产生次优聚类。考虑到这一点,我最初开始使用 DBSCAN 算法,该算法基于两个参数对空间数据进行聚类:最小聚类大小和到每个点的物理距离。有几个问题阻止了我继续使用 DBSCAN 算法。
- DBSCAN 算法不允许指定簇的数量,这是有问题的,因为目标是生成作为非嵌套指示器的函数的多个簇。
- 我无法找到一个最佳的物理距离参数,它会根据鸟的 API 数据动态变化。由于在聚类中使用物理距离点的方式发生了扭曲,这导致了次优的嵌套位置。例如,圣莫尼卡有大约 15,000 辆小型摩托车,在一个给定的区域内,小型摩托车的密度较高,而马萨诸塞州的布鲁克林区的小型摩托车数量较少。
An example of how sparse scooter locations vs. highly concentrated scooter locations for a given Bird API call can create cluster distortion based on a static physical distance parameter in the DBSCAN algorithm. Left: Bird scooters in Brookline, MA. Right: Bird scooters in Santa Monica, CA.
考虑到我正在处理的地理定位指示器数据的粒度,地理空间失真不是问题,k-means 算法可以很好地生成聚类。此外,k-means 算法参数允许基于给定位置的非嵌套踏板车的数量来动态定制集群的数量。
一旦用 k-means 算法形成了聚类,我就从一个给定的聚类内的所有观察值中导出了一个质心。在这种情况下,质心是给定集群中指示器的平均纬度和平均经度。然后,质心坐标被投影为新的嵌套建议。
NestGenerator showcasing non-nest scooters and new nest recommendations utilizing the K-Means algorithm
NestGenerator 应用
在包装完机器学习组件之后,我转移到构建应用程序的剩余功能。应用的最终迭代部署到 Heroku 的云平台上。
在 NestGenerator 应用程序中,用户指定他们选择的位置。然后,这将为给定位置内的小型摩托车调用 Bird API,并使用训练好的随机森林模型生成用于预测鸟巢分类的所有模型特征。这形成了基于嵌套分类的地图过滤的基础。在该应用程序中,用户可以根据鸟巢分类过滤地图。
Drop-Down Map View filtering based on Nest Classification
最近生成的巢
为了查看生成的嵌套建议,用户选择“当前非嵌套滑板车和预测嵌套位置”过滤器,该过滤器将使用这些嵌套位置填充应用程序。基于用户指定的搜索位置,提供具有五个最近的鸟巢的接近度和鸟巢位置的地址的表格,以帮助通知鸟类饲养员他们的决策。
NestGenerator web-layout with nest addresses and proximity to nearest generated nests
结论
通过准确预测巢分类和聚类非巢踏板车,NestGenerator 为新的巢位置提供了自动推荐引擎。对于 Bird 来说,这个应用程序可以帮助他们在 Android 和 iOS 应用程序中运行鸟巢位置生成。NestGenerator 还为鸟类饲养员提供实时战略洞察力,这些饲养员被引诱根据他们所在地区的滑板车和鸟巢位置来优化他们的滑板车收集和投放路线。
代号
这个项目的代码可以在我的 GitHub 上找到
评论或提问?请发电子邮件至:perryrjohnson7@gmail.com 或联系LinkedIn
2019 年 5 月 24 日更新:Bird 似乎已经关闭了我访问他们 API 的能力!在另行通知之前,web-app 处于离线状态!