为什么我在数据科学项目中使用蓝图
了解如何在数据科学项目中使用蓝图,以及从中可以获得多少速度和稳定性。
新西兰瓦纳卡的 Roys 山峰徒步旅行。约书亚在土坯股票上的照片
我经常想知道我可以/应该为我的数据科学项目使用什么样的结构。当然,我必须记住一些关键特性,例如:
- 能够可视化地探索数据
- 能够与团队中的其他成员合作,包括数据科学家和数据工程师
- 编写工程代码,代码剖析,单元测试…
- 能够在云中的 Docker 容器中部署我的项目
使用笔记本工作?
我有几个选择,第一个是使用 Jupyter 笔记本。笔记本电脑是高效的,因为它们允许用一个工具包来编码、记录和报告!
笔记本电脑的问题是很难与其他团队成员协同工作。此外,我一直认为笔记本不是执行单元测试的完美框架。最终,交付一台笔记本作为我项目的成果是非常诱人的,但大多数时候,这并不是我的老板/客户所期望的。人家买的是一个 app,笔记本不是 app。
烹饪刀具
我花了一些时间在互联网上寻找一个可以满足我所有需求的解决方案,过了一段时间,我终于找到了一个名为 cookiecutter 的小 python 包。
cookiecutter 所做的只是简单地使用项目的蓝图,并用 JSON 配置文件映射它。您的蓝图将为您的项目设置所有特定的变量。这种工作方式的巨大优势在于,您可以根据需要在多个项目中重复使用您的蓝图。你所要做的就是设置 cookiecutter 需要的变量,让这个蓝图成为你的项目。
您可以通过下面的链接访问 cookiecutter 的完整文档,但是您需要知道的只是如何安装它:)
https://cookiecutter.readthedocs.io/
构建我的数据科学蓝图
也就是说,我决定不再浪费时间,开始实施我的蓝图。我已经发布了,在 GitHub 上有:https://github.com/mysketches/data-science-blueprint
我还为我的蓝图写了完整的文档:https://data-science-blueprint.readthedocs.io/
我尝试开发一个模板,牢记:
- 最终能够构建一个健壮的项目
- 获得一些关于代码可靠性的信心
- 满足在生产环境中部署所需的要求
- 让数据科学家和机器学习工程师围绕一个公共代码库一起工作
- 能够毫不费力地将我的蓝图重新用于其他机器学习项目
经过几次实验,我认为我已经达到了那个目标,这就是我今天想与大家分享的。
蓝图的安装
在安装蓝图之前,你必须知道它大量使用 Docker。因此,您必须在机器上安装 Docker。你也必须有权利运行 Docker 没有管理员。如果不是这样,请看看我写的那段文档:https://data-science-blue print . readthe docs . io/en/latest/installation/requirements . html
为了与蓝图交互,您还需要访问 make 命令,运行在 Makefile 文件中定义的指令。
安装蓝图有两个步骤。首先,您应该安装 cookiecutter 包。要安装 cookiecutter,请先安装 git 和 pip 。然后,您可以运行以下命令:
pip install cookiecutter
安装 cookiecutter 后,您可以安装我的数据科学蓝图:
cookiecutter [https://github.com/mysketches/data-science-blueprint](https://github.com/mysketches/data-science-blueprint)
Cookiecutter 将提示您设置蓝图参数的值。在您的控制台上,在安装蓝图的过程中,应该是这样的:
full_name [John Doe]:
email [john.doe@myemail.org]:
project_name [DS-blueprint]:
package_name [Awesome project]:
package_slug [awesome_project]:
project_short_description [No description]:
version [0.1.0]:
Select python_interpreter:
1 - python3
2 - python
Choose **from** 1, 2 [1]:
application_cli_name [awesome-project-cli]:
Select opensource_licence:
1 - MIT
2 - BSD
3 - ISCL
4 - Apache Software License 2.0
5 - Not open source
Choose **from** 1, 2, 3, 4, 5 [1]:
docker_base_image [jupyter/base-notebook:python-3.7.6]:
docker_image_name [awesome-project-env]:
docker_container_name [awesome-project-env-instance]:
docker_container_port [8888]:
这个过程是迭代的,一个问题接一个问题。就是这样!
构建您的环境
要从 Jupyter 笔记本和 shells 中获益,您首先需要构建您的环境。移动到项目的根目录,即 Makefile 文件所在的位置,并键入以下命令:
make environment-build
在您的环境构建完成后,您可以启动它,这将启动 Docker 容器,让您可以访问您的 Jupyter 笔记本和 shell。
make environment-start
使用一些示例数据
为了这个演示,我写了一堆 python 脚本来加载一些数据,让你玩玩。我猜这将有助于使这个蓝图成为你自己的,并使它更容易根据你的需要进行更新。
我决定研究 2014 年 6 月至 2019 年 6 月抵达新西兰的游客和旅行者的数据样本。在这里阅读数据集的完整描述:https://www . stats . govt . NZ/information-releases/international-travel-June-2019
我已经创建了一个 Jupyter 笔记本来呈现对数据的简要探索,以及一个对数据进行一些简单转换的脚本。
要加载数据,可以使用以下命令:
make environment-data
当然,如果您愿意,我们会邀请您更新/删除这些样本。
使用 Jupyter 笔记本环境
数据科学蓝图允许您加载 Jupiter 笔记本,您可以在其中创建您的探索/机器学习笔记本,并在您的项目中使用其余代码对它们进行版本化。
当您的环境启动后,您可以在浏览器上访问您的笔记本,访问以下 URL:http://localhost:8888(默认端口为 8888)
与蓝图一起交付的笔记本样本
使用 shell 进行编码和测试
由于这个命令,您还可以访问可以插入的 shell:
make environment-shell
当您处于您的环境中时,您会看到提示发生变化。从终端,您现在可以访问一个 Python env,其中您的项目已经被部署为一个包。因此,您可以编写类似这样的脚本,并将您的项目作为一个包导入。
import pandas as pd
import awesome_project as packnz = pd.read_csv(‘../data/nz-population.csv’)reduced = nz.filter(items=[‘NZ_area’, ‘Count’, ‘geo_level’])
print(reduced.head())print(“\n”)reduced = pack.tolower(reduced, ‘NZ_area’)
reduced = pack.toupper(reduced, ‘geo_level’)
print(reduced.head())
将您的蓝图用作应用程序
蓝图还提供了命令行界面。然后,您将能够从终端调用项目的一些模块。不用打开 Python shell,您可以将项目安装为 Python 包,并直接调用您的模块,就像您启动了一个程序一样。
首先,您需要安装依赖项并打包您的项目。
make install
make package
一旦您的项目被部署为一个包,它就可以被部署它的机器上运行的所有 Python 脚本使用。出于本教程的考虑,我开发了一个小的命令行脚本来生成一个 lorem ipsum 文本的子样本列表。这是相当琐碎的,但是这个演示的目的只是向您展示调用它是多么容易。
完整的文档将更详细地介绍如何为您的项目设置端点。
您可以首先调用命令行并获得如何使用它的信息
awesome-project-cli --help
输出很简单
Usage:
awesome-project-cli lorem <iterations> [--text-size=<text_size>]
awesome-project-cli data <data-url> <data-location>
awesome-project-cli (-h | --help)
数据操作让我们调用 lorem 命令并生成一些文本。
awesome-project-cli lorem 10 text-size=50
该程序将输出一个 lorem ipsum 列表…
['Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing', 'Lorem ipsum dolor sit amet, consectetur adipiscing']
运行单元测试和代码覆盖率
我认为给你机会用工具来测试你的代码是很重要的。使用 make 命令可以很容易地做到这一点:
make test
这将给你单元测试的输出
======================= test session starts ========================
platform linux -- Python 3.7.6, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
rootdir: /data
collected 4 itemsawesome_project/tests/operator/test_data.py . [ 25%]
awesome_project/tests/operator/test_dataframe.py .. [ 75%]
awesome_project/tests/operator/test_generator.py . [100%]======================= 4 passed in 0.84s ==========================
你也可以做一些代码覆盖,来检查单元测试是否覆盖了你所有的代码
make coverage
这是您将看到的输出
Name Stmts Miss
--------------------------------------------------------------------
awesome_project/__init__.py 4 0 100%
awesome_project/operator/data.py 6 0 100%
awesome_project/operator/dataframe.py 6 0 100%
awesome_project/operator/generator.py 4 0 100%
awesome_project/tests/operator/test_data.py 6 0 100%
awesome_project/tests/operator/test_dataframe.py 11 0 100%
awesome_project/tests/operator/test_generator.py 3 0 100%
--------------------------------------------------------------------
TOTAL 40 0 100%
测试代码的质量
多亏了 flake8 包,测试项目的编码约定成为可能。这对于确保遵守编码要求非常有用。这是非常有价值的,尤其是在和一个有很多工程师的团队一起工作的时候。
您可以使用以下命令启动代码分析:
make lint
如果您有编码约定错误,它们将自动在控制台中报告,如下所示:
./awesome_project/operator/generator.py:4:31: E203 whitespace before ':'
./awesome_project/operator/data.py:3:1: E302 expected 2 blank lines, found 1
make: *** [lint] Error 1
现在怎么办?
我正在制作的蓝图展示了一些特性,我想这些特性可能会让你感兴趣,尤其是如果你希望创建一个数据科学项目的话:
- 您的项目的一个包结构,随时可以构建
- 一个 dockerized 环境,允许你访问 Jupyter 笔记本,一个私有 shell,单元测试,代码剖析,代码覆盖
- 一套工具来打包您的项目,并将其嵌入到 Docker 映像或 PyPI 中
你能从这个蓝图中期待什么?
- 节省大量时间,并迭代尽可能多的项目
- 帮助数据科学家用笔记本工作,机器学习工程师用 Python 打包代码工作。
- 通过测试和代码分析增加项目的健壮性。
- 简化您的项目在生产基础设施上的部署
想了解更多?
我还花了一些时间为这个项目写了不错的文档,这样你就可以了解如何使用它的所有特性。你可以在这里获得完整的文档:https://data-science-blueprint.readthedocs.io/
但是对我来说最重要的是你可以把这个项目变成你自己的。这对我很重要,你可以派生它,接触源代码,并根据你的需要更新它。
下面是 Github 项目的链接:【https://github.com/mysketches/data-science-blueprint
为什么我用 Fastai,你也应该用。
这是一个多部分系列的第 1 部分:关于我最喜欢的深度学习库 fastai,我最喜欢的事情。
这一集:学习率(LR)
fastai 之前的 LR
找到最佳 LR 的一般共识通常是用不同 LR 的不同优化器完全训练模型,直到达到期望的度量。最佳 LR 和优化器的选择取决于它们在选择阶段的最佳组合。这是一种不错的技术,尽管计算量很大。
注:由于我是在深度学习生涯的早期被介绍给 fastai 的,所以我不太了解在没有 fastai 的情况下/之前事情是如何完成的,所以如果这有一点不准确,请让我知道,也不要完全相信这一部分。
快速方法
通向 LRs 的捷径受到了 Leslie Smith 论文[1]的影响。寻找最佳 LR 主要有 3 个组成部分,寻找用于训练的最佳 LR(在 LR 寻找部分中解释),随着训练的进行,减少 LR(在 LR 退火部分中解释),以及迁移学习的一些注意事项(在判别 LR 中解释)和一个周期训练(LR 退火的一部分)。
LR 和后果。图片由作者提供。
我们的学习率应该是多少? 这是一个要问的重要问题,因为学习率是驱动我们的模型参数达到最优解的因素。太低,学习时间太长。太高的话,模型甚至都学不会。我们需要一个在一定范围内的学习率,它能以合理的速度使参数收敛。
LR 查找
LR find 是 fastai 寻找好的学习率的方法。他们首先选择一个非常低的 LR,在这个 LR 下训练一个小批量,然后计算损耗。以递增的更高 LR 训练下一个小批量,并且这个过程继续,直到我们达到模型明显偏离的 LR。
LR 是相对于损耗绘制的,我们可以看到下图。存在一个损耗最小的特定 LR,在此之后,再增加 LR 将使损耗恶化。
选择损耗最低的 LR 是错误的。我们需要损失减少最快的 LR。这也是图表中最陡的部分。Fastai 实现了一个函数来查找除以 10 的最陡和最小 LR(这也是一个很好的训练 LR)
learn.lr_find() [[docs]](https://docs.fast.ai/callback.schedule#Learner.lr_find)
LR 查找。图片来自 fastiai 的 fastbook ,GPL-3.0 许可证
这种方法在计算上更便宜和更快,因为我们只需要 1 个时期(甚至不需要)来找到最佳 LR,而传统上我们将为 LR 的每个逻辑范围训练 1 个时期(肯定总共多于 1 个时期)。
低温退火
谜题的下一步是 LR 退火。最初,我们的参数是不完善的。它们与最佳参数相差甚远。但是随着我们训练,参数越来越接近最佳值。
当我们的参数非常远离最优(开始)时,我们希望在最优的大致方向上采取更大、更不精确的步骤。但是当我们越来越接近时,我们不希望采取大的步骤而意外地超过 optima,我们希望采取较小的步骤来获得精确的完美参数集。
这类似于高尔夫球。你不要试图一杆进洞,(你可以,但更多的是运气而不是技巧),你只是试着在球洞的大致方向上尽可能远地高球。当你靠近时,你改变球杆以获得更高的精确度和控制力,并寻找更小的步伐,每一步都让你更靠近球洞。
这就是为什么在训练开始时,我们想要大的学习率,这促使我们努力快速地接近最佳参数,但当我们接近最佳参数时,我们想要降低学习率。随着我们的损失减少,我们希望采取更小的步骤,因此使用更小的 LR。
这种在训练期间改变 LR 的过程被称为 LR 衰减/ LR 退火。下图显示了较大的初始步骤与较小的最终步骤的对比。
Lr 退火。作者图片
适合一个周期
当前对基于 GD(梯度下降)的训练的难度的普遍共识是优化器可能陷入鞍点。这与我们过去认为的主要问题(局部最小值)不同。Leslie Smith 在[3]中表明,增加 LR 有助于避开鞍点并到达损失函数的良好区域,此后,我们再次降低 LR,原因在 LR 退火中解释。然而,Sylvain Gugger 在这里解释了拟合一个周期方法的最后一步,即将 LR 减少到最后几次迭代的最小 LR 的百分之一。也被称为湮灭。
鞍点。图片由尼科瓜罗——自己的作品,CC 由 3.0,【https://commons.wikimedia.org/w/index.php?curid=20570051
步骤很简单,选择一个 LR,如本文的 LR 查找部分所述。这是最大可接受的 LR。我们还选择一个最小 LR,正如 Sylvain 所建议的,是最大 LR 的十分之一。现在我们在这个范围之间循环,其中循环长度略小于历元总数。最后,我们将 LR 降至最小 LR 的百分之一。
fit_one_cycle(**learn**:[Learner](https://fastai1.fast.ai/basic_train.html#Learner), **cyc_len**:int, **max_lr**:Union[float, Collection[float], slice]=***slice(None, 0.003, None)***, **moms**:Point=***(0.95, 0.85)***, **div_factor**:float=***25.0***, **pct_start**:float=***0.3***, **final_div**:float=***None***, **wd**:float=***None***, **callbacks**:Optional[Collection[[Callback](https://fastai1.fast.ai/callback.html#Callback)]]=***None***, **tot_epochs**:int=***None***, **start_epoch**:int=***None***) [[docs](https://fastai1.fast.ai/train.html#fit_one_cycle)]
安排 LR 时有两个主要参数可以使用,这就是我们在单周期策略中所做的事情。这些是动量和步长。更多关于 LR 如何安排的信息和进一步阅读,请点击这里。
一个周期左右。图片由 fastai 课程,Apache-2.0 许可。
辨别 LR(迁移学习期间)
迁移学习是使用为一项任务训练的神经网络,在最少的训练后做不同的任务的过程。这是非常有用的,原因我现在将解释。
泽勒和弗格斯发表了一篇令人惊叹的论文,名为《可视化和理解卷积网络》[2],他们在论文中展示了神经网络的不同层学习的内容,并将不同层学习的内容可视化。从下图中,我们可以看到第一层识别基本的线条、颜色和颜色渐变。第二层识别更复杂的形状,如边缘和圆形,然后到了第三层,网络开始识别模式。
现在,假设你有一个可以识别猫的猫检测器。你想做一个熊探测器。比起随机噪声,猫更像熊,猫探测器的大多数层已经学习了非常有用的参数。所以我们只需要微调模型,改变最后几层。
神经网络的不同层次看到了什么。来源:可视化和理解卷积网络。
而 fastai 非常适合做这件事。fastai 迁移学习的方法基本上是两个步骤。
- 我们首先冻结我们的模型,这意味着停止对早期层的梯度计算,只训练最后 2 层。
- 然后我们解冻这个模型,这样渐变就会一直流回来。然而,我们已经知道早期的层不需要大量的学习,因为它们已经学习了重要的参数(像图像的线条这样的公共属性)。因此,我们需要较低的学习率用于早期层,较高的学习率用于后期层。Fastai 内置了这一功能。
用快速人工智能进行迁移学习的 4 行代码是
learn = cnn_learner(dls, resnet34, metrics=error_rate)
#import a model of your choice, pretrained on imagenet (default)learn.fit_one_cycle(3, 3e-3)
#train the last few layers of modellearn.unfreeze()
#unfreeze the model, so we can train all layerslearn.fit_one_cycle(12, lr_max=slice(1e-6,1e-4))
# use a lr_max, which uses lowest value of LR for first layer
# and increments LR for later layers
下图是模型解冻后 LR 对损失的曲线图。正如我们所看到的,损失并没有急剧下降,这与我们的想法是一致的,即初始层已经学到了有用的信息。因此,即使在开始时损失也很低,并逐渐下降。
选择 LR 的方法保持不变,最小值/10 或最陡下降点
微调期间的 LR。图片来自 fastiai 的 fastbook ,GPL-3.0 许可证
参考
[1]. Leslie N. Smith ,神经网络超参数的训练方法:第 1 部分——学习速率、批量大小、动量和权重衰减(2018 ), arXiv:1803.09820
[2].马修·D·泽勒,罗布·弗格斯,可视化和理解卷积网络(2013), arXiv:1311.2901
[3]. Leslie N. Smith ,训练神经网络的循环学习率(2017), arXiv:1506.01186
为什么我在 Jupyter 笔记本上用表情符号编码
你们中的一些人可能认为这是一个亵渎神明的想法。我不打算把我所有的 x,y,z 都换成笑脸。但是,这是一个很好的功能,可以为您的演示文稿增添一点亮点
图片改编自 bruce mars 在 Unsplash 上的照片。
当我第一次意识到我们可以在代码中使用表情符号时,我非常惊讶。目前,表情符号不能用于定义 Python 中的变量或函数。**然而,它们可以用作列表、字典、熊猫数据框、绘图等中的字符串。**像希腊字母这样的其他字符也可以使用,不仅是字符串也可以作为变量!在大多数情况下,在代码中使用表情符号和非拉丁符号可能不是一个好的做法。然而,我认为在一些情况下,它们不仅是可以接受的,而且是可取的。
- 想象你是一名教师正在向年轻的观众介绍代码。
- 或者也许你正在向一个没有强大编程背景的观众展示你的作品。
- 或者也许你想让你的数据图更吸引人。
- 或者,也许你正在实现一篇充满数学表达式和大量希腊字母的论文。
在这种情况下,使用表情符号和非拉丁字符是更好地表达你的代码和吸引观众的好方法。
以清晰、吸引人的方式交流想法对于数据科学家来说是一项非常重要的技能。
我给你看三个例子!
1.教学代码
第一次学习代码可能是一次具有挑战性的经历。用表情符号让代码更加丰富多彩是促进学习的好方法。下图只是一个简单的例子。
- 首先我定义一个水果清单,一个我喜欢的水果清单。
- 接下来的练习是打印“我不喜欢”或“我喜欢”,然后是每种水果的水果图标。
用水果表情教循环和条件的例子。作者创造的形象。
这个例子很适合教循环和条件!我可以用字母表中的字母列表来代替,但是你必须同意这将是一个无聊的例子。动机对学习非常重要,这就是为什么在概念呈现方式上向前迈进一步很重要。
2.增强演示
表情符号是一个好主意的另一种情况是增强你的演示。在下面的例子中,我创建了一个客户满意度柱状图。看看表情符号是如何传达对形象的清晰解读的。没有必要为了理解意思而阅读文本标签。如果你正在与国际观众分享你的作品,对你来说是个好消息——表情符号是一种通用语言!
使用表情符号增强演示的示例。作者创造的形象。
这个图是使用 Plotly 创建的。data
变量是一个熊猫数据帧,它包含在Customer Satisfaction
列中的表情图标和在Nr of Custumers
列中的值。你可以在这个故事的结尾找到完整的 Jupyter 笔记本的链接。
3.数学表达式
科学文章经常有充满希腊字母的数学表达式。在代码中使用相同的字母是一个很好的方法,可以使代码看起来更接近原始表达式,更容易理解。在下图中,我展示了一个在函数中实现简单数学表达式的例子。我保留了函数名和通常的拉丁字符。然而,在函数内部,使用非拉丁字符是为了更好地理解,这对任何人都没有坏处。
使用希腊字母编码数学表达式的例子。图片由作者提供。
请注意,我可以将希腊字母写成 alpha 、 beta 、 pi 和 omega 。然而,对于不熟悉希腊字母的人来说,这将使代码变得更加冗长和难以理解。上面的例子很简单。没什么大区别。但是对于复杂而长的表达式,它可以使代码简洁并且在视觉上更有吸引力。
结束语
以清晰简洁的方式呈现代码是很重要的。表情符号和非拉丁字符的使用有助于让代码成为更广泛受众的交流语言。在我们人类与技术紧密相连的世界里,这是一种分享思想的语言。
以下链接提供了用于制作上述示例的 Jupyter 笔记本:
用于创建以上所有示例的笔记本。
github.com](https://github.com/mnpinto/jupyter_tutorials/blob/master/code_with_emojis.ipynb)
我希望你觉得这个故事很有见地!😊
关于我
[## 我的 3 年历程:从零 Python 到深度学习竞赛高手
自从 2017 年开始学习 Python 以来,我一直遵循的道路是成为一名独自参加 Kaggle 比赛的大师…
towardsdatascience.com](/my-3-year-journey-from-zero-python-to-deep-learning-competition-master-6605c188eec7)
感谢阅读!祝您愉快!
为什么我要重新开始数据科学?
介绍#66DaysOfData
我感觉卡住了。
在我目前的工作和我创建的内容(视频和博客)中,我感觉我已经开始停滞不前了。我的内容的大多数消费者都刚刚开始他们的数据科学之旅。我在这个领域呆得越久,就越感觉不到和他们的联系。
另一方面,在我的日常工作中,我不从事任何尖端的工作。我也没有进一步提高我的数据科学技能。一直夹在乱七八糟的中间,不喜欢。
是改变的时候了。
如果你喜欢视频:https://www.youtube.com/watch?v=uXLnbdHMf8w
我要从头开始
我决定,让自己快速起步的最佳方式是从头开始重新学习数据科学。这也有助于我更好地与我的核心受众建立联系,制作更好的内容。
我开始意识到,我与数据科学相关的习惯开始萎缩。我想找到一种方法来加强这些。
在我对数据科学的追求中,我发现最有价值的两个概念是一致性和责任性。我想发起一场运动来促进这些地区的发展。
我的解决方案:#66DaysOfData
我想与他人分享我的数据科学学习之旅,并鼓励他们参与进来,而不是独自完成这项工作。我将于 9 月 1 日正式启动#66DaysOfData 计划。我选择 66 天是因为这是建立一个新习惯所需要的平均时间(我知道平均时间有很大的问题……但是请原谅我)。
这是一个非常简单的挑战。只有两个要求:
- 连续 66 天每天至少花 5 分钟学习数据科学(一致性)
- 使用#66DaysOfData(问责制)分享您每天将在自己选择的平台上工作的内容
欢迎你和我一起从头再来,也可以学习任何符合你目前兴趣的东西。
不和谐服务器为主动:【https://discord.gg/VXSUJYJ
你也可以在这里追究我的责任:【https://twitter.com/KenJee_DS】T4
为什么你应该加入我
我认为每个人都可以从改进的数据科学习惯中受益。对我来说,习惯使我们不必努力工作。当我们的习惯发生作用时,我们就进入了自动驾驶状态,我们不需要对抗启动的阻力。
对我来说,动力一直是个大问题。我真的很喜欢一个项目或一个想法,并且毫不犹豫地花大量时间在上面。在我把它放下一两天后,我会努力重新捡起来,因为我觉得我必须从头再学一遍。每天工作(即使只有 5 分钟),可以帮助你保持动力,避免停滞不前。
通过制作 YouTube 内容,我知道如果我告诉别人一些事情,我更有可能去做。我对我的目标和项目直言不讳,我认为这帮助我在平台上取得了一些适度的成功。我想与那些对这项倡议感兴趣的人分享问责的力量。这可能非常可怕,但也非常有益。
不仅你会被追究责任,而且这也会鼓励你分享你的工作。如果你读过我的文章或看过我的视频,你就会知道我认为在社交上分享你的作品有多重要。这是一个非常简单和低压力的方式,让你养成与社区分享你的项目和目标的习惯。
我将如何学习
同样,没有必要完全按照我正在做的去做。这项挑战更侧重于培养良好的习惯,并帮助您学习您感兴趣的确切的数据科学知识。
尽管如此,如果人们有兴趣从我开始,我已经在这个视频中分享了我将使用的资源和我将采取的步骤:https://www.youtube.com/watch?v=uXLnbdHMf8w。
最后的想法
我认为这是一个打破常规的好借口。感觉没有动力和停滞不前是很常见的。我们可以用我们正在创造的习惯的力量打破这些感觉。
希望看到我从头开始,也能激励你重新拾起它!我认为这将是一个有趣的实验,我希望你们都和我一起参与进来!
为什么物联网是人工智能革命的第一步
大家都忘记了最关键的环节
有这么多关于人工智能和人工智能的炒作,以及它将如何彻底改变你周围的一切,有一个非常重要的环节人们往往会错过它的发生。这就是物联网,或者简称为物联网。
让我们来理解 ML 的基础,以及它是如何改变任何过程的。以网飞这样的在线流媒体服务为例。根据你的观看历史,它会推荐你接下来应该看的节目和电影。
在这样的推荐引擎出现之前,我们习惯于根据评分来决定。虽然收视率在区分好电影和荒谬电影方面做得很好,但它对你是否喜欢一部电影并没有太大帮助。你可能喜欢 6 星级的电影,但不会喜欢 8 星级的。
由于网飞有数百万用户通过其平台观看内容,他们有海量的数据,用户可以明确地(竖起大拇指和向下)和隐含地(观看完整系列,点击同一部电影或另一部电影的特定海报)告诉他们是否喜欢某部电影,网飞根据这些数据为你个性化推荐(而不是某些评论家)。
网飞还根据你和数百万其他人的观看历史预测每个用户会看什么,然后缓存(提前加载)到离这些用户最近的数据中心。网飞还需要处理大量的媒体处理(不同设备的不同格式和分辨率的视频转换),这是一个昂贵的过程。因此,它通过根据可用服务器负载的历史数据再次预测未来的服务器负载来优化成本,并将这些任务分配给未充分利用的资源。
因此,你会看到机器学习为每个用户引入了个性化(这在以前是不可能的),并且优化了所有流程,以实现更高的效率和对可用资源的更好利用。
那么,是什么让网飞能够个性化体验并优化所有资源呢?
他们在一段时间内积累的客户行为和资源使用的数据。
只有拥有足够大和相关的数据,他们才能实现这一切。
但是网飞和所有其他平台有一个非常独特的优势。由于完整的生态系统是数字化的,他们的所有数据都被持续收集,任何个性化/推荐都可以提供。它的所有资源都是数字化的,并受到实时监控。但你周围的大多数过程却不是这样。
你的生活并不局限于你使用的数字设备。事实上,你的大部分活动都在屏幕之外。
物联网带来了什么?
为了让人工智能和人工智能真正具有革命性,它必须改变你周围的流程。它必须在你生活的各个方面创造价值,而不仅仅是数字生活。
为了进一步理解,让我们考虑一下你生活中最重要的一个方面:交通。
自动驾驶汽车
几十年来,人类一直在独自驾驶汽车,后来有一家公司想要改变这种状况。如果你一直生活在岩石下,那家公司就是特斯拉。他们的愿景是利用人工智能和人工智能创造无人驾驶汽车,无需任何人工干预。
但与网飞不同的是,驾驶不仅仅局限于数字世界。事实上,大多数汽车甚至都没有接近数字生态系统。缺少最重要的成分,即数据。
这就是物联网发挥作用的地方。自动驾驶汽车的第一步是制造一辆收集各种驾驶数据并可以数字化控制的汽车。这种新的数字汽车将使用雷达收集周围数据,人类司机的活动,汽车各部分的运行数据。这些数据将用于开发自动驾驶系统,然后不断改进该系统。
照片由 Unsplash 上的 Bram Van Oost 拍摄
这种汽车数字化是由物联网实现的。放在汽车中的附加硬件(传感器、处理器和数字控制器)弥合数字世界和物理世界之间的差距,是物联网的核心。
就像没有第一个物联网支持汽车就无法实现自动驾驶汽车的梦想一样,没有物联网首先支持行业的流程和产品,就无法实现用人工智能改造大多数行业的梦想。
物联网支持本身提供了大量价值,而不需要人工智能和人工智能,但它确实将事情向前推进了一步。
如果你对此感兴趣,并且想开始一个物联网项目,这将帮助你开始
当我开始开发我的第一个物联网项目时,我希望我有这样的指南
towardsdatascience.com](/a-comprehensive-guide-to-start-building-an-iot-product-ba32dfb91c7a)
为什么中心极限定理对数据科学家很重要?
数据科学,统计学
中心极限定理是每个数据科学家/数据分析师每天所做的统计推断的中心。
自然界一切正常(图片来源:作者图片)
在本文中,我们将探讨中心极限定理,什么是中心极限定理,为什么它很重要,以及大数定律和中心极限定理之间的区别是什么?
中心极限定理**【CLT】是统计和概率的中流砥柱。该定理表示,随着样本规模的扩大,多个样本之间的平均值分布将类似于高斯分布**。
我们可以考虑做一个试验,得到一个结果或者一个观察结果。我们可以再次重复测试,得到另一个独立的观察结果。累积的大量观察值代表一个观察值样本。
万一我们计算出样本的平均值,它将接近总体分布的平均值。在任何情况下,像任何估计一样,它不会是正确的,会包含一些错误。万一我们抽取大量独立样本,并计算它们的平均值,这些平均值的分布将形成高斯分布。
CLT 给出了我们估计的某种分布。我们可以利用这一点来询问我们所作估计的概率。例如,假设我们正试图思考一场选举将会如何结果。
我们进行了一项调查,发现在我们的样本中,30%的人会决定支持候选人 A 而不是候选人 b。显然,我们刚刚看到了总人口的一个小样本,所以我们更希望知道我们的结果是否可以说适用于整个人口,如果不能,我们希望了解误差可能有多大。
尽可能地,CLT 向我们揭示,万一我们一次又一次地进行调查,随后的理论将在真实人口值上呈正态分布。
CLT 从中心开始工作。这意味着在极小的可能性下,你假设接近中心,例如,大约三分之二的未来总数将落在均值的一个标准差内,即使只有很少的样本,你也是安全的。
然而,如果你谈论尾部,例如,假设整体超过均值的五个标准差几乎是不可想象的,你可能会感到尴尬,即使有相当大的样本。
当分布具有无限方差时,CLT 是令人失望的。这些案例很少见,但在某些领域可能意义重大。
CLT 经常被初学者误认为是大数定律(LLN) 。它们是不同的,它们之间的主要区别是 LLN 依赖于单个样本的大小,而 CLT 依赖于样本的数量。
LLN 表示,独立且不可区分分布的观察感知的样本均值尽可能地与某个值相结合。CLT 描绘了样本均值与值之间的差异分布。
CLT 在统计推断中起着重要的作用。它精确地描述了样本量的增加在多大程度上减少了抽样误差,从而告诉我们样本的统计估计值(例如百分比)的精度或误差幅度。
相对大量的独立随机变量的累积导致一个随机变量大致呈正态分布。
统计推断依赖于一种可能性,即可以想象从一个样本到总体的结果的广泛视角。我们如何保证在一个例子中看到的关系不仅仅是因为可能性?
显著性测试旨在提供一个目标衡量标准,为有关广泛观点有效性的决策提供信息。例如,我们可以在样本中找到教育和收入之间的负相关关系。然而,补充的信息对于显示结果不仅仅是因为可能性,而且是有统计学意义的是必不可少的。
CLT 断言高斯分布是一种自然的限制性分布。它使许多与统计学相关的理论合法化,例如,线性回归中误差项的正态性是具有有限方差或不可检测误差的许多随机变量的独立总体,我们通常可以期望它是正态分布的。
确实,当你对某些数据的分布毫无头绪时,你可以利用 CLT 来推测它们的正态性。
CLT 的缺点是,它经常被使用而不检查怀疑,这是相当长一段时间以来金融领域的情况,假设回报是正常的,尽管它们具有厚尾分布**,其特征是比正态分布具有更多的危险。**
当你处理相依随机变量的和,或者非不可分辨分布的随机变量的和,或者违反自治条件和不可分辨分布条件的随机变量的和时,CLT 没有任何重要的意义。
有额外的 CLT,放松了自治或无差别的分布条件。例如,有**林德伯格-费勒定理,**尽管一切,需要随机变量是独立的,但它放松了不可区分的分布条件。
CLT 用于均值推断。CLT 意味着有限方差分布的大样本均值具有估计的正态分布。在我们研究近似值之前,样本的大小已经足够好,这取决于分布,因此如果没有异常值,我们将使用样本平均值作为总体平均测量值来确定误差可能性。
CLT 是一种具有挑战性的直觉。当然,我们可以提供各种各样的故事,我们可以做很多技术演示,但 CLT 是非常神秘的。高斯是极限分布,绝对神奇。这是天性使然。在这方面,它几乎就像重力。CLT 不是人类发明的,但它肯定被人类证明了。
正态分布给出了一个非常基本的单峰对称模型。缩放和移动不变参数只需要重新缩放。它对于识别操作中的变化和缩放也是有用的。通过分析正态模型的方差,可以方便地检查许多均值漂移总体的许多比较(正态模型对偏离正态有弹性,而方差不变性对获得的结果有实质性影响)。
正态分布通常用作任何模型的误差模型,以使用所分析模型的剩余平方量来调查模型的适合度。例如,它也用于回归理论,以解释与假设模型的偏差,而其他模型则用于计数结果。
CLT 可能是所有科学中最常用的定理——从天文学到心理学再到经济学,绝大多数经验科学都以这样或那样的方式求助于定理。每当你在电视上看到调查结果和置信区间时,都会在幕后提到关键极限定理。
实际上,CLT 在每一个样本、调查、临床试验、实验分析、随机干预以及你能想象到的几乎所有其他种类的科学测试中都有应用。
中心极限定理(图片来源:作者提供)
结论
CLT 的优势在于它是强大的,这意味着不管数据是否来自各种分布,如果它们的均值和方差是相等的,该定理现在甚至可以被利用。
CLT 注意到,随着样本量的增加,样本均值收敛于总体均值,它们之间的距离收敛于正态分布,方差等于总体方差。它在统计学的应用和对自然的理解中是重要的。
现在,把你的想法放在TwitterLinkedin,以及Github!!**
同意 还是 不同意 与绍拉夫·辛拉的观点和例子?想告诉我们你的故事吗?
他对建设性的反馈持开放态度——如果你对此分析有后续想法,下面 评论 !!
推文@ SauravSingla _ 08,评论Saurav _ Singla,还有明星SauravSingla马上!
为什么数据分析远远落后于软件工程?
亚当·诺瓦克斯基在 Unsplash 上的照片
这篇文章中没有答案,只有两个为一个问题服务的轶事。
在热门的本地创业公司入职
前几天和一个软件工程师朋友聊天。他一直在观察他的合作伙伴开始从事数据分析师的新工作。
“交接相当可怕!”他绞着双手说。“他们给了她一个带有 SQL 查询的. txt 文件。无可奉告!“过去 30 天”的硬编码日期!这是在!”
我笑了。“这其实很正常”,我说。“她有导师吗?”
“嗯,是的”,我的朋友说。“她被分配了一个,上升的过程相当缓慢.”
“那还不算太坏。”
我向他解释说,数据部门不同于软件工程部门。
“与程序员相比,他们在流程和工具方面落后了。我不完全确定为什么。我给你举个例子:在数据领域,把一切都投入到版本控制中被认为是一个新颖的想法。”
现在轮到他笑了。“你不会是认真的吧!”
“好吧,问问你的搭档 txt 文件在 git 里吗?她是否获得了某个中央存储库的证书?”
事实上她没有。
帕兰提尔和其他人
几天后,我和另一个朋友聊天,这次是关于雪花公司的 IPO。这家数据仓库公司似乎已经吸引了金融和科技媒体中许多人的注意力;这无疑是近年来人们谈论最多的科技股 IPO。(关于宣传的更多信息,请查看这个 Twitter 帖子)。
我的朋友在帕兰提尔待了很多年。他说,有效地说:“所有这些谈论雪花,当我真正想要的是代工。”
“代工是什么?”我问。
“这是帕兰蒂尔的数据。此处。”他说,发给我一个链接。
我浏览了一遍,带着许多问题回来了。他勇敢地回答他们,好像我是一个被困在外面世界的菜鸟。
我的朋友向我解释说 Foundry 做了所有的事情:ETL、转换、血统、元数据中心、数据质量、可视化、存储。你说出它的名字;他们建造了它。
“它使用什么数据存储?”
“多重”我朋友说。
“所以你是在告诉我,Palantir 有一个多功能的工具,里面什么都有,而且你们已经卖了很多年了?”
“嗯……是的。”
为什么数据分析如此落后?
为什么数据分析落后于软件工程?为什么与商业智能相比,软件工程中的过程和工具走得更远?
我提到上面的两个轶事,因为我认为它们强调了一些有趣的想法——例如,如果我是一个局外人,我会认为 Palantir 的产品是商业智能工具的标准。相反,这是一个例外。
事实是我对此没有很好的答案。我们都不知道。当我们在 Holistics 放松下来,对数据进行哲学思考时,我们自己也经常对这种差异感到惊讶。
当我们在办公室的日常工作中在数据分析和产品开发之间跳跃时,数据和软件工程之间的差异就特别明显了——一方面,当处理数据时,我们要努力处理不太成熟、不太被广泛接受的最佳实践。(我们已经清楚地表明了我们对数据建模最佳实践历史的看法——我们认为它们都已经过时了)。然而,当我们在 Holistics 平台上进行产品开发时,我们使用 10 年前的开发方法,并且相信这种方法是可行的。在这两个领域之间工作感觉就像跨越了两个 GDP 差异很大的国家的边界。在过去的二十年里,软件工程已经有了过多的开发方法。敏捷宣言写于 2001 年。Github 创建于 2008 年。今天,我们或多或少知道了什么可行,什么不可行。数据就不一样了。
我的工作理论是这样的:我认为一个领域的发展与投入的资金数量相关。软件工程在 it 上的花费已经超过了数据分析。或者,更准确地说,软件工程是有时被视为利润中心,而数据是几乎总是被视为成本中心。激励推动创新。
当然,这并不能解释一切。数据素养可能是这种差异的另一个原因——大多数组织发现承担软件工程更容易(我们现在在内部构建一些软件!)而不是数据驱动的思维(我们必须让每个人在决策中使用数据)。我怀疑 Palantir 之所以能把他们的工具造得如此之好,是因为他们卖给了情报机构和军事组织现有的数据文化。这些组织非常愿意使用数据来完成他们的工作,并愿意为此支付大笔费用,而在大多数公司中,数据素养和数据使用还不是一件大事。
正如数据科学家兰迪·奥在谈到过去两次被解雇时指出的:
被解雇仅仅意味着组织愿意在一段时间内盲目飞行,而没有详细的分析见解。当某个地方的经理需要达到削减的配额时,做出错误决策的风险(总是可以通过补丁修复)不值得我的工资。
有多少企业愿意打这个电话?我想有不少吧。
当然,我也不完全确定这些理由就是真相。其他整体论者有他们钟爱的理论。你可能有自己的一些理论。
我知道的是:如果有消费意愿,那么就应该有足够多的创新动力。对我们来说,幸运的是,如果雪花的 IPO 有任何迹象,那么未来的数据世界看起来很好。
为什么数据科学无法解决正确的问题?
意见
别慌,一切都没丢。数据科学家和高管都有解决方案。
D ata 科学的存在的理由就是解决问题。然而,主要的声音(如 VentureBeat 、 HBR 或 Gartner )表明,它在这一追求中失败了。作为一名数据科学家,我倾向于同意这个观点。但是,为什么呢?
让我从两个观察开始。
巴斯光年 效果
我们是一个新的行业。闪闪发光。闪烁的灯光。可伸展的翅膀。每个人都想要我们!
但是我们也遇到了所有新生思想流派都熟悉的初期问题。是的,我们正沿着数据价值链快速前进。部署数据驱动的解决方案变得越来越容易。但是我们的许多假设仅仅是:假设。未经测试和证明。
因此,尽管机会很多,乐观情绪很高,但我们必须防止过度销售和夸张。数据不是玩具。
数据科学家正在解决错误的问题
我相信数据科学家更多时候是试图解决错误的问题。
与我对我们的行业热点和成熟度的观察不同,这一点是方法和/或态度的结果。虽然对我们的专业来说,不断推进数据的进化包络很重要,但我们也需要优化和利用现有的解决方案来解决今天的问题。这从准确识别手头的业务问题开始,并从那里系统地工作。
商业问题是我们的试金石。不是数据。
重要的是,我们今天就能实现这一点。我们不必等待发明的翅膀。简单地说,答案在于加深商业和数据世界之间的理解(当然也可以说是共鸣)。
为了解决业务问题,数据科学家需要像企业主一样思考。我们需要对业务挑战感到兴奋,并充满热情来拓展我们的战略和运营技能。同样,我邀请我们的业务同事对这个新的数据世界更加好奇,并抓住与数据科学家交流和合作的机会——作为同行而不是处理者。
在这篇文章中,我提供了我的方法来解决正确的业务问题,同时提升数据的角色和业务影响。这种方法基于我在过去 10 年中参与的 100 多个数据项目。
注: 当然,今天也有数据科学家,他们的项目正在交付商业价值。企业应该积极寻找这些人(不,他们并不总是拥有最好学校的博士学位或简历上的虚假信息)。同样,有抱负的数据科学家也应该观察这些先驱并向他们学习,寻求快速吸收他们的错误和成功。
为什么数据科学家不能解决正确的问题?
如前所述,我认为我们总是无法识别正确的问题,因为我们没有参与更广泛的商业辩论。相反,我们就像一座孤岛,只有一座吊桥通往商业大陆。我们很少外出,除非受到邀请!
通常情况下,信息请求会落在我们的岛屿办公桌上,没有什么背景,但有明确的截止日期。因此,我们“拉起桥”希望加快进程,而不是降低我们的防御来质疑我们的同事,更好地了解需求或真正的业务问题。
这种孤岛现状毫无意义,尤其是考虑到我们对网络、共享基础设施和数字化的依赖和倡导。我们需要在交往中效仿斯德哥尔摩,而不是阿卡特兹。我们必须建立双向桥梁和关系堤道。
除非我们学会问更多的问题,否则我们总是会冒险投入时间、精力和才能去解决错误的问题。我们需要努力成为定义业务问题的讨论的一部分,并在确信我们有重要的事情要说时,准备好与我们的业务对手面对面交流。至关重要的是,我们还需要问一些令人羞愧的问题,这样我们才能快速学习,快速失败,并加速我们的迭代解决方案。
什么是正确的问题?
正确的问题是分析问题;业务问题的准确代理,其解决方案将影响最初的业务问题。
1.商业问题
我用来找到“正确问题”的框架非常简单。它始于一个业务问题,例如:
“我们需要增加每位顾客的平均销售额。”
“我们需要停止客户流失。”
“我们需要降低废品率。”
“我们需要提高数字营销的投资回报率。”
商业人士非常了解这些。数据科学家?没那么严重。
2.分析问题
数据科学家的真正工作是提出探索性的问题,将业务问题转化为明确定义的分析问题。现代科技有助于解决这个问题。学术论文和开源解决方案每个人都可以访问。越来越便宜的云存储和计算,以及 SaaS 现收现付的定价模式使得技术广泛可用。这里没有借口。
3.数据
一旦你定义了分析问题,问:需要什么数据来解决它?
然后确定数据是否可用,质量如何,可访问性如何(或者,是否可以获取或收集),获取数据的速度有多快,费用有多少。
业务问题定义问题;分析和数据提供了潜在的解决方案。
下面的简单模式概述了这个 3 步框架。但是不要被骗了。这是一个非常具有挑战性的过程。背景中的灰色箭头是杀手!虽然思考“哪个业务问题可以用令人兴奋的尖端方法解决”或“如何处理尘封数据库中的数据”很有诱惑力,但解决业务问题的系统方法都不是。你必须遵守纪律,从头开始,从 1 号开始。
业务问题定义了问题,分析和数据提供了潜在的解决方案。| 图文作者
这听起来很简单,为什么这么难呢?
因为我们是人。
在我们深入了解这个框架之前——多次遵循它并从我们的错误中学习——我们容易受到诱惑和捷径的影响。我们必须抵制回避困难对话的冲动,不要假装我们什么都懂,以免挫伤知识分子的自尊心。
让我分享几个有趣的例子,如果这个框架没有从左到右遵循,会出现什么问题。
过快地转向分析解决方案
**数据科学家热爱分析和技术。但是,众所周知,爱情可以是盲目的。意思是,我们经常只看到我们想看到的或听到我们想听到的。对于热恋中的数据科学家来说也是如此。例如,如果他们目前沉迷于强化学习或 GPT-3,他们会倾向于将它视为他们面临的每个问题的第一解决方案。
未能证实理解
*另一个问题是急于假设,而不是花时间去确认共同的理解。作为无畏的数据科学家,我们可能会假设:*“哦,那听起来像一个客户流失模型,明白了!”构建了一个奇妙的模型后,却惊讶地发现它并不适用。别误会,模式是好的。其实很优秀。但是它没有解决实际的业务问题。
没有发挥我们的优势…
很多次,我听到商业领袖告诉我,他们需要(举例来说)一个:'推荐引擎,它考虑销售、客户评论和利润来对产品进行排名’然而,分析问题(推荐引擎)和数据(销售、评论和利润)应该来自业务问题。
作为一名数据科学家和功能专家,我敦促你质疑每一个已经为你解决了分析问题的实例。如果一个业务领导未能让你满意地概述框架的每个步骤,那么建议的分析问题很可能不是业务问题的解决方案,而是浪费时间和资源。
数据也是如此。例如,一位企业领导人可能会在他们最喜欢的高管杂志上读到关于的黑暗数据,并要求他们的数据科学家:“将黑暗数据减少 10%”。或者指导他们:“对用户评论数据做点什么”。通过这样做,他们押注于数据科学家对正确的业务问题进行优先排序的能力,而所有这一切都发生在他们的孤岛上,吊桥顽固地升起。提问;你是专家。简单。
“喜欢”的分析
同行压力是做所有“酷分析”的诱惑。初创企业尤其倾向于宣称“人工智能驱动的”,而大型企业则宣称“拥抱数据机遇”。我通常质疑所有这样的宣言。
如果分析不是通过更好的决策、提高运营效率或创造新的收入流来实际解决业务问题,那就是公关。
“数据”不是一种策略。
相反,数据使战略、创新、效率等得以实现
桥,不是岛
我再怎么强调造桥的类比也不为过。只有将数据、数据团队和数据洞察整合到更广泛的组织中,才能做出更好的决策。请记住,不是组织中的每个人都一定会被数据的价值所驱使。他们可能不了解数据,也可能不了解分析方法及其提供的内容,即使是高层次的了解。每位数据科学家的一个重要职责就是宣传数据的作用和力量。
如前所述,你的桥梁必须承载双向交通。同样重要的是,数据科学家要更好地理解业务问题。因为,如果他们不这样做,他们将无法在交流解决方案和最终价值时解释他们的分析选择和假设。
我坚定地认为,这一挑战直接摆在我们——数据科学家面前。我们需要通过首先了解业务问题来赢得同事和客户的信任。不是他们的业务问题。我们的业务问题。
然后,我们精心设计专业的解决方案,清楚地阐明它们是如何工作的,并关键地解释它们为什么以及何时不工作。
如何制定正确的问题?
现在让我分享一下我理解业务问题的方法,以确保我解决了正确的(分析)问题。
餐厅示例
想象一下,一位餐馆老板对你说,她需要正确处理库存,以避免原料耗尽或浪费过多。
照片由左 eris kallergis 在 Unsplash 上拍摄
令人遗憾的是,餐馆生活并不是一场 Kaggle 竞赛,餐馆老板没有为你准备好数据或评估标准。所以,我们先把这个业务问题变成一个分析问题。
最大限度地了解业务问题
最初,我会问一些问题来理清问题,这样我就可以开始在脑海中构思一个潜在的解决方案。餐馆老板的挑战似乎很直观,但我们不要陷入假设陷阱!相反,比如我会问她:
“你会如何描述你的餐厅?”
“在餐饮业中,库存是如何运作的?”
“你怎么决定今天点什么?”
“做好订单最难的是什么?”
“什么是更大的问题:配料用完还是点太多?”
“订购流程是如何运作的?你多久能订购一次?而且提前多长时间?”
让我们假设我已经学会了以下几点:这是一个沙拉吧,所有的配料都必须是新鲜的。目前,她正在下订单,每周一次,下一周的每个星期五。根据每周的订单,每天都要交付配料。大多数沙拉都有相同的基本成分,如果特定的成分不够/用完了,顾客可以选择替代品。目前,如果她结束了前一周的食材短缺,减少了菜单,她会点更多的菜。相反,如果她有明显的浪费,她会少点一些。她的排序真的没有任何“科学”可言,而且每周都与前一周不同。
开始构思分析问题
从这些信息中,我们可以开始组合一个可能的解决方案,也许是一个需求预测模型,预测每天的顾客数量。该模型需要对未来九天进行准确预测。
代表问题的数据世界
下一步是就使用什么数据制定假设。同样,我会问这样的问题:
“根据你的经验,是什么影响了顾客的数量?”
“哪一天你的顾客最多:天气如何,当地有什么活动吗,还有什么能把食物带到你的餐馆的吗?”
“工作日里餐厅有空的时候吗?”
我可能会了解到:这取决于天气(当天气寒冷或下雨时,顾客较少);星期几;当地社交媒体美食页面上的评论;附近大学的活动;诸如此类。
同样,把你学到的任何东西都当作数据的假设。人们可能会告诉你,这似乎取决于天气,但没有人会说“10 毫米的早晨降水是关键!”即使他们知道,也要验证这个假设。
做一些研究,思考问题
然后做一些案头研究了解其他人如何处理相同或相似的问题是有帮助的。你可能会找到一些有用的资源,例如这篇文章、这篇博客或这篇文章。
到现在为止,你应该对你头脑中的问题有一个坚实的理解。所以,重要的是你要概述和测试可能的解决方案。让思想伙伴挑战你的思维、假设和想法也是有帮助的。
我还会对可用的数据、格式和质量进行初步分析。但是在下一步之前没有什么太费时间的。
明确证实你的理解
现在,测试潜在解决方案是否基于对业务问题的共同理解是至关重要的。在你做任何事情之前,和餐馆老板再谈一次,向她解释你是如何构思这个问题的,你的假设是什么,你在做什么简化,你会考虑哪些关键影响因素。
确认输出的内容和格式也是非常有价值的。另外,她如何利用这些信息,技术上有什么限制等等。
作者提供的图片
解决问题
终于到了数据科学工作的时候了。继续获取数据,进行一些数据工程,训练和测试 ML 模型,部署它,创建 CI/CD 管道,将监控和触发置于适当的位置。
然后衡量业务影响,一次又一次地改进解决方案…
而且,尽管这一步显然是最基本的,但它也被许多受人尊敬的数据科学家广泛记录。站在他们的肩膀上,我想补充一句:数据科学是一门迭代的手艺。不要想多了。从某处开始。每重复一次,你会做得更好。
所以,总结一下,这里是我的建议:
- 不要陷入“巴斯光年”效应。数据不是玩具。它是支持关键决策、优化和潜在收入流的战略工具。
- ****从#1 开始。业务问题定义分析问题;分析和数据提供了潜在的解决方案。首先系统地了解业务问题。
- ****造桥不造岛。您和您的数据团队融入更广泛的组织越多,成功的可能性就越大。慷慨分享你的见解,对商业问题保持好奇。
- 做同行而不是处理器。提问。永远不要接受你没有参与设计的分析问题。
作者提供的图片
在整篇文章中,我使用术语数据科学家作为任何使用数据解决业务或现实世界问题的数据工作者的占位符。当然还有很多数据职业。麦肯锡用一个术语analytics translator来形容将业务问题转化为数据问题的人。大型企业可能会在这方面发挥特殊作用。我相信每个数据科学家都应该磨练这个技能。
由我出色的商业伙伴 切尔西·威尔金森 合著。
为什么数据科学正在失去魅力?
意见
数据科学曾经是最受欢迎的职业选择,但趋势正在改变。
由 Unsplash 上的procylink 访客管理系统拍摄
早些时候,每个计算机科学专业的学生都想在数据科学领域从事职业。这个领域也吸引了来自许多其他教育背景的学生。虽然围绕数据科学的宣传仍然存在,但这份工作简介并不容易为所有人所用。
过去的二十年是数据科学界的一场革命。过去二十年的发展是惊人的,让每个人都大吃一惊。数据科学的应用聚集了所有的行业,并迅速增加了对数据科学家的需求。
但是现在趋势正在改变。需求已经不像以前了。即使有对数据科学家的需求,人们要么缺乏技能,要么缺乏经验。当我看到社区失去魅力时,我试图列出我想到的所有潜在原因。
1.人们不能在这个领域开始他们的职业生涯。
一旦离开大学,人们希望以数据科学家的身份开始他们的职业生涯,但在大多数情况下,这份工作至少需要 2-3 年。人们不能直接从数据科学家开始,而必须以不同的方式开始他们的职业生涯。
公司不准备在新进人才上投入时间,相反,他们想要在该领域拥有优秀技能和经验的人才。虽然几乎所有的科技公司都有自己的数据科学部门,但其他没有数据科学部门的公司需要在这一领域有丰富经验的人来创建一个部门。
我认为只有一种方法可以帮助他们,那就是在他们学习和获得经验的同时进行实习,以满足公司的要求。
2.人们不知道数据分析师、业务分析师和数据科学家之间的区别
另一个主要原因是,如今的数据科学爱好者不知道该领域不同工作概况之间的区别。他们都想要“数据科学家”的头衔,却不知道数据科学家的实际工作是什么。他们错误地认为数据分析师、业务分析师和数据科学家是相似的。
在不知道自己想做什么的情况下,他们申请了自己并不完全适合的职位,最终空手而归。
3.人们发现数据科学太容易了
人们直接开始研究学习算法,调整数据的方法,但他们没有考虑算法背后的数学。凭借一般的编程知识和机器学习算法的知识,他们认为自己已经准备好面对现实世界的问题。
人们通常忽略统计,实际的艰苦工作只是因为他们不觉得有趣。数据科学就是这样一个发展没有停滞的领域。在过去的 2-3 年里,自然语言处理取得了巨大的发展。一个人必须用最先进的模型来更新自己。
人们也发现数据科学很容易,因为他们没有处理过现实生活中的数据。他们花了这么多年来学习,研究结构化数据或一些可供人们学习的预处理数据。
另一方面,现实世界中几乎 99%的数据是非结构化的。数据科学家需要花大部分时间对数据进行预处理,这样才能从数据中提取出有意义的东西。
4.AutoML 让求职之路变得更加艰难。
科技巨头谷歌、微软一推出 AutoML,就震动了有抱负的数据科学家。公司的兴趣和好奇心增长到 AutoML,而数据科学家担心失去工作。
AutoML 正在将机器学习应用于数据集的过程自动化。AutoML 可以对数据进行预处理和转换。它可以涵盖从处理原始数据到部署机器学习算法的完整管道。
自动机器人擅长建立模型,但在预处理方面,它们无法超越人类。数据科学家的主要工作是对数据进行预处理。很明显,到目前为止,AutoMLs 还不能取代人类数据科学家。
尽管汽车降低成本这一事实不容忽视。美国数据科学家的平均年薪约为 12 万美元,而谷歌和微软 AutoMLs 的年成本约为 4-4 万美元。
尽管不能否认数据科学家在预处理数据方面的有效性,因为现实世界中的数据是非结构化的,需要大量的预处理。
要学的东西太多了,没有人愿意做艰苦的工作。对于一个人来说,从基础做起并在这个领域出类拔萃是很难的。这需要很多时间,人们需要耐心。这一领域有很大的发展空间,但缺乏具备所需实际技能的人才正从数据科学领域夺走最有前途工作的头衔,人们正在远离它。
为什么高斯是所有分布之王?
高斯分布的显著性
来源:豆机被称为正态随机变量的第一生成器
高斯分布及其关键特征:
- 高斯分布是一种连续的概率分布,其中心两侧对称。
- 它的均值、中值和众数相等。
- 其形状如下图所示,大部分数据点聚集在均值周围,具有渐近尾部。
释义:
- 约 68%的正态分布值位于 1𝜎境内
- 约 95%的正态分布值位于 2𝜎境内
- 约 99.7%的正态分布值位于 3𝜎境内
我们从哪里找到高斯分布的存在?
不管是不是传销从业者,我们几乎都在某个地方听说过这种最流行的销售形式。环顾四周,大多数过程都遵循近似高斯形式,例如年龄、身高、智商、记忆力等。
从轻松的角度来说,有一个众所周知的高斯分布的例子潜伏在我们周围,即评估期间的“钟形曲线”😊
是的,高斯分布经常与钟形曲线发生共振,其概率密度函数由以下数学公式表示:
高斯分布的概率密度函数
符号:
具有平均𝜇和方差𝜎的随机变量 x 表示为:
服从正态分布的随机变量 X
高斯分布有什么特别之处?为什么我们几乎处处都能找到高斯?
每当我们需要表示分布未知的实值随机变量时,我们就假定它是高斯型的。
这种行为很大程度上归功于中心极限定理(CLT) ,它涉及到对多个随机变量之和的研究。
根据 CLT:多个随机变量的归一化和,不管它们原本属于哪个分布,随着和中项数的增加,收敛到高斯分布。
需要注意的重要一点是,CLT 在 30 个观测值的样本量下是有效的,即,如果我们有 30 个观测值的最小样本量,可以安全地假设采样分布遵循高斯形式。
因此,许多独立过程的总和的任何物理量被假定为遵循高斯分布。例如,“在典型的机器学习框架中,可能存在多种错误来源——数据输入错误、数据测量错误、分类错误等”。所有这些形式的误差的累积效应可能遵循正态分布”
让我们用 python 来检查一下:
步骤:
- 从指数分布中抽取 n 个样本
- 归一化 n 个样本的总和
- 重复上述步骤 N 次
- 继续在 sum_list 中存储规范化的总和
- 最后,绘制归一化 sum_list 的直方图
- 输出严格遵循高斯分布,如下所示:
从服从高斯分布的指数分布中抽取的 30 个样本的归一化总和
类似地,还有其他几种分布,如学生 t 分布、卡方分布、f 分布等,它们对高斯分布有很强的依赖性。例如,与高斯分布相比,t 分布是高斯分布无限混合的结果,导致更长的尾部。
高斯分布的性质:
**1)**仿射变换:
这是一个简单的变换,将随机变量乘以一个标量“a ”,再加上另一个标量“b”。
得到的分布是具有平均值的高斯分布:
如果 X ~ N(𝜇,𝜎),那么对于任意一个 a,b ∈ ℝ,
a.x+b~n(一个𝜇+b,一个.𝜎)
注意,不是所有的变换都导致高斯,例如,高斯的平方不会导致高斯。
2) 标准化:
如果我们有两组观察值,每组都来自具有不同平均值和 sigma 的正态分布,那么我们如何比较这两组观察值来计算它们总体的概率?
因此,我们需要将上面提到的观察值转换成 Z 分数。这一过程被称为标准化,它根据原始观测值的平均值和总体标准差对原始观测值进行调整,并将其纳入一个共同的尺度
z 得分
3)
4)集合的边际分布也是高斯分布
5)高斯分布是自共轭的,即给定高斯似然函数,选择高斯先验将导致高斯后验。
6)两个独立的高斯随机变量的和与差是一个高斯
高斯分布的局限性:
- 简单的高斯分布无法捕捉以下结构:
来自模式识别和机器学习的高斯混合
这种结构最好用两个高斯的线性组合来表征(也称为高斯混合)。然而,估计这种高斯混合模型的参数是很复杂的。
2)高斯分布是单峰的,即它不能提供对多峰分布的良好近似,从而限制了它能充分表示的分布范围。
3)自由度随着维数的增加而平方增长。这导致对如此大的协方差矩阵求逆的高计算复杂度。
希望这篇文章能让你先睹为快高斯分布的世界。
快乐阅读!!!
参考资料:
- https://stack overflow . com/questions/12616406/任何人都可以告诉我为什么我们总是使用机器学习中的高斯分布
- 模式识别和机器学习,第 2.3 节,高斯分布
为什么很难建立人工智能和数据网络效果
用人工智能构建数据网络效果的局限性、陷阱和挑战
图片:马特·麦克莱恩/华盛顿邮报通过盖蒂图片社
在完成了几个 AI 任务后,我意识到大多数公司都在追逐同一件事:数据网络效应。很难想象有哪家企业不迫切需要数字化其运营模式,并通过更好地利用数据来应对新的威胁…
我想写这篇文章来强调达到这种数据水平是多么困难&人工智能成熟度以及一家愿意建立人工智能的公司需要完成什么。
事实上,对大公司来说,实现商业模式现代化和建立专有数据集已经成为当务之急。虽然科技公司正在人工智能工具包上投入大量资金以吸引云计算客户,但数据集正成为区分的战略要素。
数据网络效应是一种产品的属性,由于数据段之间的紧急关系,随着可用数据的增加而改善。
数据网络效应使公司具有防御性,因为一旦你领先,竞争对手很难再为用户增加同样多的价值,而防御性创造价值。此外,当数据网络效应产生效果时,转换成本会变得更高。这往往会造成客户锁定效应。
网络效应和数据网络效应通常是相互联系和相互加强的,因为每一种效应都使产品更有价值,从而吸引更多的客户和数据。
真正相关的数据优势不仅仅来自于收集最大量的数据。最佳数据策略与特定的问题领域密切相关,在该领域中,独特的、新的数据在为客户解决问题时具有复合价值。
我在物联网部门工作了很长时间,我可以向你保证,数据网络效应与长期防御能力尤其相关。的确,我们意识到,硬件往往或多或少是抄袭的。然而,物联网公司有机会从每个客户那里获得洞察力,这将越来越难以复制。最终,真正的价值建立在软件和数据层面。
所有数据战略都必须与更全面的产品、技术或商业故事相联系。
数据壕沟
在讨论数据网络效应之前,有必要引入数据壕沟的概念。
数据壕沟描述了企业因其专有数据集而拥有的竞争优势。
简而言之,它是更传统的“护城河”的延伸,如供应商锁定、品牌、规模效率等。理想情况下,数据护城河可以保护赢得的市场地位免受竞争。我们通常认为强大的数据护城河是这样一个数据集:
-大型
-无法合成或统计复制
-其他公司难以收购。
为什么很难建立数据网络效果?
1.数据文化和期望
在我看来,首先出现的问题往往是缺乏真正的数据文化和不切实际的目标。我认为,如果没有一种以数据为中心的文化来优先考虑数据的有效使用,就不会有相关的数据网络效应。
没有正确的文化,数据是没有用的。
此外,重要的是要知道,人工智能驱动的运营模式通常需要一段时间才能产生类似于更传统的运营模式在规模上产生的价值的经济价值。根据我的经验,数据网络效应在达到临界质量之前几乎没有价值,大多数新应用的算法在获得足够的数据之前都会遭遇“冷启动”。
此外,如果数据对你的产品来说只是边缘性的,那么数据网络的影响就不会很重要。根据 James Currier 在《T2》上发表的文章,当网飞向你推荐一个节目时,这个算法是基于用户的观看数据进行推荐的。但是网飞的发现功能是边际的;它的真正价值来自于电视剧、电影、纪录片的库存。所以网飞只具有边际数据网络效应。
同样,产品使用和收集的有用的新数据之间的关系可能是不对称的。Yelp 有一种数据网络效应,因为更多餐馆的更多评论使产品更有价值。但由于只有一小部分用户产生数据,其网络效应被削弱;大多数人从 Yelp 数据库中读取数据,但不会向其中写入数据。
如果一个产品在增加的使用量和更有用的数据生产之间没有关系,那么就没有网络效应。
2.与数据和闭环系统的关系
**在构建数据网络效应时,企业往往过于依赖自己的专有数据。**实际上,目标应该是使用额外的数据源来改进您的模型。一般来说,您拥有的数据源越广泛,您就可以越准确地为您的环境建模并做出准确的预测。
根据您的领域,一个好的数据策略应该包括与您的产品或服务周围的世界(天气等)相关的数据。),以及用户如何与您的产品交互的数据,尤其是与您可能已经建模为预期行为的相关数据。
这听起来可能很明显,但是当你收集数据并将其应用到你的产品中时,你是在预测用户的期望。从这个意义上说,系统不断地试图预测用户想要什么,并根据需要提出建议或定制。因此,你增加价值的唯一方法就是知道之前的预测是否正确。
**不用说,如果你没有通过这一部分,你将无法从数据网络效应中获益。**我们总是花时间确保我们有定义良好的指标。例如,如果您试图通过数据网络效应(通过修改数据和模型)来改进您的推荐系统,那么能够测量和评估新数据的积极或消极影响是关键。
3.改进与时间
需要记住的另一个有趣的元素是,当数据集达到一定大小时,随着数据集的增长,算法不再有意义地改进。现实情况是,大多数数据网络效应都难以应对这一点。
此外,数据网络效应减弱的临界点因领域而异。随着数据湖的增长和竞争对手缩小差距,可防御的护城河非但没有变得更强,反而被侵蚀了。
当你收集数据时,数据也会变得越来越没有价值。
如果您获得的一些新数据已经与您现有的数据重叠,那么数据将产生较少的价值。新数据的优势下降。
在某个点上,新数据的价值下降,要么直接对用户,要么对产品/模型开发(根据这个研究,有时,更好的效果来自增加模型的复杂性,而不是来自注入更多的数据)。
在我们最新的项目中,早期的新数据应用于我们的整个客户群。然而,几个月后,收集的新数据只适用于与特殊用例相关的小子集。
随着数据集的扩大,任何数据规模效应护城河也会变得越来越没有价值。
此外,随着时间的推移,保持现有数据优势所需的工作量会随着规模的扩大而增加。**成本结构可能会成为一个问题……**此外,合成数据可以帮助公司缩小差距。更广泛的数据可用性和处理数据的工具越来越受欢迎,使得数据收集网络效应不那么有吸引力,因为它需要更少的时间来破坏先发优势。
4.自动化和范围
从运营的角度来看,数据网络效应至少需要一定程度的自动化产品化。你在循环中加入的自动化越多,人工智能的良性循环就变得越有效。
此外,产品的范围越窄,机器学习驱动其价值的程度越大,就越容易将这些优势捆绑在一起,通过数据网络效应创造竞争优势。
5.数据类型
从新用户处收集的数据必须是正确的类型和足够的数量,以实现数据网络效果。这种学习必须得到足够有效的优化,以创造新的产品价值。而这个价值必须足够强大,足够好的产品化,才能吸引更多的客户。这个链条的任何断裂都意味着没有自我强化循环,因此没有学习效果。
实际上,我建议公司建立数据网络效应,并将其与市场营销和客户保持的投资相结合,以围绕其商业模式创建一条护城河。
6。学习曲线
当你的产品的学习曲线足够长、足够陡,使你能够在一个较长的时期内提供递增的产品价值时,数据网络效应往往会更好地发挥作用。
事实上,建立在高度动态数据集上的产品更容易有永久的学习曲线。因此,它们总是可以通过数据得到有意义的改进。这类产品最适合寻求从数据网络效应中获益的公司。
7.数据冗余和偏差
在某些情况下,随着规模的扩大和网络的增长,每个新交互所贡献的新数据与目前已经收集的数据相比变得更加冗余。
此外,当处理物理世界时,您肯定会收集偏见,这些偏见通常会累积并最终开始对您的模型的性能产生真正的影响。
8。数量与质量
即使数据被用于机器学习项目,数据集的大小也只是故事的一部分。数据集的价值,数据护城河的力量,来源于上下文。
事实上,一些业务问题需要模型被训练到很高的精确度,然后才能为客户提供任何价值,或者甚至得到管理层的批准,而其他问题则几乎不需要。此外,一些数据集是真正专有的,而另一些数据集很容易被复制。一些数据的价值会随着时间而衰减,而另一些数据集则不会。应用程序决定了数据的价值和数据网络效应的强度。
事实是,根据您的项目,数据网络效果可能无法实现。鉴于当前的技术水平,一些业务问题过于复杂,无法完全建模;在这种情况下,大量的数据将无济于事。添加数据可能会提高模型的性能,但很快就会遭遇边际收益递减。
另一个有趣的元素是模型稳定性。根据上下文的不同,数据集相关性会随着时间的推移而变化,如果模型不随之变化,模型将会衰退。
模型衰退(也称模型故障)是对已经部署(运行中)的模型的病理的非正式描述,由此模型的性能可能会恶化到模型不再适用的程度。换句话说,模型的预测将不再可靠。
保持模型稳定需要以与环境变化相同的速率处理新的相关训练数据。我们将这种数据采集速率称为稳定性阈值。
易腐数据并不能构成一个很好的数据壕沟。另一方面,容易获得新数据可能是进入的战略障碍。
从战略的角度来看,需要更少数据来达到高精度和保持高性能的业务应用程序**并不具有很强的防御能力。**事实上,新进入者可以轻松积累足够的数据并匹配您的解决方案。
数据策略的重要性
构建可靠的数据策略非常复杂,不仅仅是收集数据。我认为最重要的问题是确定数据将如何对给定的产品做出贡献。在现实中,选择算法或其他产品功能调整的影响远远大于仅仅拥有更多数据。
数据护城河需要两个基本要素
在我看来,一个成功的战略是寻求数据网络效应的创造,以及对理解领域的坚实思考**。**
拥有更多数据并不一定会转化为价值,而且收集更多有用的数据并不总是容易的,即使数据是产品的核心。
数据网络效应可能会与规模带来的数据优势相混淆。你应该问自己的问题是:
-这些数据是否为客户/用户创造了有意义的价值?
-如果是,使用量的增加是否会带来更多有用的数据?
如果你想了解更多关于数据网络效应和数据护城河的知识,我给你推荐几篇文章:
--【https://www.nfx.com/post/network-effects-bible】-https://www.nfx.com/post/network-effects-manual
-https://techcrunch.com/2018/03/27/data-is-not-the-new-oil/
-https://mattturck.com/the-power-of-data-network-effects/-
-https://a16z.com/2019/05/09/data-network-effects-moats/
-https://outlast.me/robot-hiveminds-with-network-effects/
为什么线性代数教的这么差?
线性代数是机器学习的基石之一。这比你想象的更直观
我意识到用非平行线来说明一个关于线性代数的博客是一种讽刺。图像:像素
这是给你的一道简单的数学题。如果你能把这两个矩阵相乘,请举手:
恭喜你,如果你说:
如果你知道为什么,请举手。我说的“为什么”并不是因为:
虽然在数学上是正确的,但这个公式更多地描述了“如何”,而不是“为什么”。就其本身而言,这个公式几乎缺乏直觉。
然而,这就是矩阵乘法几乎总是被教授的方式。记住公式。在考试中使用它。利润?这当然是我的经历,第一次学习线性代数是在 16 岁,然后在一所表面上世界领先的大学攻读数学学士学位。
还有一个问题给你:下面这个矩阵的行列式是什么?
如果你说 2,那恭喜你。但是你也许能猜到我要说什么。我们知道对于一个 2x2 矩阵,行列式由以下公式给出:
但是为什么是?就此而言,什么是行列式?我们被告知它有几个有用的特性(例如,如果你试图用降行来解线性方程组,0 的行列式就是一个危险信号)。但是在我大学选修的两个线性代数必修模块中(我怀疑该机构的声誉依赖于其在研究方面的卓越,而不是教学),矩阵的行列式从未在表面水平之外的任何地方被语境化或解释过。
从“如何”到“为什么”
这种略显功利的线性代数教学态度显然是有问题的。数学是一门依赖于“增量”学习的学科——获取新知识通常需要你建立在你已经知道的基础上。如果你的理论基础是建立在死记硬背和将数字插入公式的基础上,而没有对实际发生的事情进行更深入的欣赏和理解,那么它们往往会在像机器学习这样沉重的东西的重压下倒下。
在这一点上,我要提到这个博客的灵感很大程度上来自格兰特·桑德森制作的一系列视频。对于那些不熟悉他的工作的人来说,桑德森创建了非常好的动画视频,使得复杂的数学主题对于受过教育的门外汉来说是容易理解的(他解释神经网络和加密货币的视频非常值得你花时间)。
在其核心,桑德森的’线性代数的本质’系列试图介绍,激励和概念化线性代数方面的线性变换及其相关的可视化的许多基本思想。事实证明,这是一个非常有用的方法,可以让你了解许多核心的基本原理。
“这里的目标不是试图教你所有的东西,而是你带着强烈的直觉离开…这些直觉让你未来的学习更有成效…”—格兰特·桑德森
矩阵乘法到底是什么?
在回答这个问题之前,我们先退一步,想想什么是线性变换。为了简单起见,让我们将事情保持在二维空间中(尽管以下内容也适用于更高维空间)。
线性变换是改变“空间”(在这种情况下,是 2D 平面)形状的一种方式,通过这种方式:
- 保持平行线平行
- 在原本等距的平行线之间保持相等的距离
- 将原点保留在原点
概括地说,这为我们提供了三种不同类型的线性变换:
- 旋转
- 缩放(减少或增加平行线之间的间距)。注意——这也考虑了 x 轴或 y 轴上的反射,它们只是具有负比例因子。
- 和剪切线(注意这如何保持平行线之间的相等距离)
这三种类型操作的任何组合就其本身而言也是线性变换(稍后将详细介绍这一思想)。
证明向量乘法
虽然上面的这些插图是为了演示线性变换影响整个 2D 空间的事实,但我们可以根据它们对两个“单位向量”的作用来描述它们,这两个“单位向量”分别称为*(I-hat)和 ĵ (j-hat)。*
我们可以深入了解更多细节,但本质上,这是由这样一个事实驱动的,即您可以通过和 ĵ 的线性组合到达 2D 平面上的任何点(例如,向量v【3】,-2】将简单地等同于 3 批加上-2 批**ĵ)。****
假设我们想考虑一个线性变换,将所有东西逆时针旋转四分之一圈。我们的向量, v 会怎么样?事实证明,我们可以描述 v 发生了什么,纯粹是根据和 ĵ.发生了什么**
回想一下 v ,【3,-2】,被给定为 3 手*加-2 手ĵ的。嗯,原来,转化的 v 相当于 3 手转化的加-2 手转化的ĵ*。******
用桑德森的话说,这行字:
transformed_v = 3*[0,1] + (-2)*[-1,0]
是“所有的直觉在哪里”。
具体来说,我们可以将“转换后的和“转换后的 ĵ ”的向量放在一起,形成一个 2x2 矩阵,参考这个更“直观”的视图,看看会发生什么,突然之间,我们就证明了向量乘法是正确的。
证明矩阵乘法
那么,我们之前研究过的两个 2x2 矩阵的乘法呢?
我们刚刚证明了一个 2x2 矩阵必然代表 2D 空间中的某种线性变换。特别地,对于一个给定的矩阵[[a,b],[c,d]],向量[a,c]和[b,d]分别代表’变换的’和’变换的 ĵ '的坐标。**
假设我们想一个接一个地做两个线性变换。为了说明,让我们假设我们执行我们之前看到的逆时针四分之一转,并在 x 轴上进行反射。这两种变换都可以用 2×2 矩阵来表示。我们已经知道了表示旋转的矩阵,那么反射呢?我们可以使用和以前一样的技术——观察和ĵ.会发生什么
当然,⊙不变, ĵ 变为负数。我们之前已经展示过,我们可以将这些“转换的和“转换的 ĵ ”向量放在一起,形成代表整体转换的矩阵。****
那么我们该如何思考两个变换相继进行的情况;先是旋转,然后是反射?我们可以用和以前一样的方法来处理这个问题——看看和ĵ.会发生什么
从前面我们知道,从[1,0]到[0,1],旋转需要T5。如果我们想要将反射应用到这个“转换的T7”,我们只需要将代表这个反射的矩阵乘以代表“转换的*T9”的向量0,1。***
当然,我们现在需要使用相同的推理来观察 ĵ 发生了什么。
现在我们知道了和以及 ĵ 在一个接一个地经历旋转和反射变换后会发生什么,我们可以把这两个向量放在一起,用一个矩阵来描述累积效应。
这看起来非常像矩阵乘法的标准公式。当然,你可以用任何序列的线性变换来尝试这个思想实验。通过跟踪发生在和和 ĵ 身上的事情,你可以有效地。
值得注意的是,通过从顺序线性变换的角度考虑矩阵乘法,证明矩阵乘法的标准规则是非常容易的。对于三个不同的矩阵 A、B 和 C,思考为什么以下属性成立:
- AB ≠ BA
- A*(BC) = (AB)*C
- A*(B+C) = AB + AC
行列式呢?
在博客的开始,我展示了如何机械地计算行列式。然后我问为什么这个公式成立(就此而言,行列式甚至是什么)。我在另一篇博客中提到了这一点,但是,剧透一下,一个 2x2 矩阵的行列式仅仅代表了 2D 空间中给定区域在矩阵变换后增加或减少的比例。
不无道理的是,YouTube 上桑德森关于行列式的视频评论充斥着许多人,他们困惑于为什么在教授时不经常提到这个问题,因为这是一个如此直观的概念。我不能责怪他们。
感谢一路看完博客!我很乐意听到任何关于上述分析的评论,或者这篇文章涉及的任何概念。欢迎在下方随意留言,或者通过LinkedIn联系我。
为什么 Logistic 回归是二项式回归模型的代言人?
广义线性模型
浅谈二项式回归模型及其连接函数
菲尔·博塔在 Unsplash 上的照片
我们日常生活中的许多事件都遵循二项式分布,该分布描述了一系列独立伯努利实验的成功次数。
例如,假设詹姆斯·哈登投篮的概率是恒定的,并且每次投篮都是独立的,那么投篮命中率就遵循二项式分布。
如果我们想找出一个二项分布变量 Y 的成功概率( p )与一系列自变量 xs 之间的关系,二项式回归模型是我们的首选。
链接函数是二项式回归和线性回归模型之间的主要区别。具体来说,线性回归模型直接使用 p 作为响应变量。
线性回归
线性回归的问题是它的响应值没有界限。然而,二项式回归使用 p 的链接函数( l )作为响应变量。
带连接函数的二项式回归
链接函数将 x s 的线性组合映射到一个介于 0 和 1 之间但不会达到 0 或 1 的值。基于这样的标准,主要有三种常见的选择:
二项式回归链接函数
当链接函数是 logit 函数时,二项式回归就变成了众所周知的 logistic 回归。作为数据科学书籍中最早的分类器之一,逻辑回归无疑成为了二项式回归模型的代言人。主要有三个原因。
1\. Applicable to more general cases.2\. Easy interpretation.3\. Works in retrospective studies.
让我们详细检查一下。
极值分布?不完全是。
互补对数-对数模型的一个主要区别是,概率单位和对数函数是对称的,但互补对数-对数函数是非对称的。
**# R code**
eq = function(x){log(x/(1-x))}
curve(eq, xlab="probability", ylab="l(probability)",col="red",lwd=2)
curve(qnorm,add = T,lty="dashed",col="blue",lwd=2)
curve(cloglog,add=T,lty="dotted",col="green",lwd=2)
abline(v=0.5,lty="dashed",col="grey")
legend("topleft",legend=c("logit","probit","cloglog"),lty = c("solid","dashed","dotted"),col = c("red","blue","green"),lwd=2)
链接函数的曲线。对称:logit(红色)和 probit(蓝色);不对称:绿色
具体来说,我们可以看到对称函数(logit 和 probit)在 p =0.5 的位置相交。但是 cloglog 函数在概率上有不同的趋近 0 和 1 的速率。有了这样一个特性,cloglog link 函数总是用在极端事件上,在这种情况下,事件的概率接近 0 或 1。
事实上,我们几乎不可能用有限的数据做出极值分布的假设。因此,在大多数情况下,二项式回归模型不选择 cloglog 链接函数。
换句话说,logit 和 probit 模型可以应用于比 cloglog 模型更普遍的情况。接下来让我们看看 logit 模型相对于 probit 模型的优势。
Z 评分增加β单位??奇怪。
逻辑回归比概率回归应用更广泛,因为它易于解释,这得益于优势的概念。
有趣的是,在我们的日常生活中,赔率有时比概率更频繁地被使用,因为它更好地代表了机会,例如NBA 季后赛的赌注。赔率( o )和概率( p )之间的关系可以用下面的等式来描述。
赔率和概率
逻辑回归可以改写为,
带优势的 logistic 回归模型。
上面的模型解读起来超级简单。例如,在所有其他独立变量固定的情况下,x1 增加一个单位会使成功的对数几率增加β1。
然而,概率单位模型的解释并不简单。概率单位链接函数计算概率的 Z 值。因此,对同一示例的解释应该是,在所有其他自变量固定的情况下,x1 增加一个单位会使 Z 得分增加β1。
如果季后赛投注网站说“湖人赢得半决赛系列赛的 Z 分是 1.65!”,很少有篮球迷会因为他/她的统计学专业而称赞网站跑者。
固定预测因子和观察结果?事实并非如此。
在大多数实际情况下,数据来自回顾性抽样而不是前瞻性抽样。在回顾性研究中,结果是固定的,预测因子是观察和收集的,然而,在前瞻性研究中,预测因子是固定的,结果是观察的。
例如,如果我们对狗癌症和只吃狗粮之间的关系感兴趣,我们首先收集 10 只不同品种的狗,给一半的狗只喂狗粮,另一半喂混合食物。然后我们跟踪五年后这些狗的健康状况。这种类型的研究是前瞻性的研究,非常理想,但速度缓慢。
然而,一个更便宜和更快的方法应该是,我们找到一些患有癌症的狗,我们检查过去五年的喂养记录,并在我们的二项式模型中将它们与一组健康的狗进行比较。这种类型的研究是回顾性研究。
假设 α1 是狗没有患癌症时被纳入回顾性研究的概率,而 α0 是狗患癌症时被纳入的概率。在前瞻性研究中,我们总是可以假设 α1 = α0 ,因为我们还没有看到结果。
但在回顾性研究中,α1 通常远大于α0,情况并非如此。
让我们用贝叶斯定理来描述一只狗得癌症的条件概率( p* )假设它被纳入研究,和这只狗得癌症的无条件概率( p )之间的关系。
假设研究中包括了狗患癌症的条件概率
应用 logit link 函数后,我们有
条件概率的 logit 函数
上面的等式清楚地表明,前瞻性研究和回顾性研究之间的差异是 log( α1/α0 ),它只影响二项式模型的截距项。
logit 链接函数的优势在于,即使在回顾性研究中,我们也不需要担心截距项,因为我们关注的是独立变量对几率的相对影响。
换句话说,即使在回顾性研究中不可能知道 log( α1/α0 )(或对β0 的调整),它也不能阻止我们估计 logistic 模型的系数(其他β)。此功能对于概率单位链接函数无效。
摘要
逻辑回归是二项式回归模型中的一种,它使用 logit 作为其连接函数。它优于其他链接功能,因为它的易于解释并且在回顾性研究中有用。
奖金
其他链接功能都没用吗?不,用下面的代码试试挑战者号的灾难数据,你会发现 cloglog 模型在有链接函数的二项式模型中获得了最小的 AIC。
**# R code** library(faraway)
data(orings)
logit_m = glm(cbind(damage, 6-damage) ~ temp, family=binomial(link = logit), orings)
probit_m = glm(cbind(damage, 6-damage) ~ temp, family=binomial(link=probit), orings)
clog_m = glm(cbind(damage, 6-damage) ~ temp, family=binomial(link=cloglog), orings)summary(logit_m)
summary(probit_m)
summary(clog_m)
我希望你喜欢阅读这篇文章。
参考
遥远,Julian J. 用 R 扩展线性模型:广义线性、混合效应和非参数回归模型。CRC 出版社,2016。
[## 概率回归| Stata 数据分析示例
样本大小:概率和对数模型都比 OLS 回归需要更多的案例,因为它们使用最大似然法…
stats.idre.ucla.edu](https://stats.idre.ucla.edu/stata/dae/probit-regression/) [## Logit 回归| R 数据分析示例
逻辑回归,也称为 logit 模型,用于模拟二分结果变量。在 logit 模型中…
stats.idre.ucla.edu](https://stats.idre.ucla.edu/r/dae/logit-regression/) [## 二元回归的概率单位和互补双对数模型
Logit:误差具有标准的逻辑分布 Probit:误差具有标准的正态分布…
www.datasklr.com](https://www.datasklr.com/logistic-regression/probit-and-complimentary-log-log-models-for-binary-regression)
彼得·罗伊德在 Unsplash 上的照片
为什么数学对你的人工智能职业生涯至关重要?
数学是上帝用来书写宇宙的语言——伽利略·伽利雷
我们在科幻电影里看到的未来就在这里。从虚拟现实到功能性小工具,人工智能已经以前所未有的方式入侵了我们的生活。在迅速发展的技术领域,人工智能工具和聊天机器人已经处于突破的边缘。
AI 不是魔法;只是数学而已。
思维机器背后的想法和模仿人类行为的可能性是在数学概念的帮助下完成的。
人工智能和数学是同一棵树的两个分枝。而如果你想在你的 AI 生涯中茁壮成长,你需要学习数学;仅仅是科幻迷是不够的。
如果你打算建立一个人工智能职业生涯,并在该领域的招聘中占据主导地位,那么和数学做朋友吧,它将震撼你的世界。
作为一名数学家和人工智能的粉丝,我想分享一下 AI 和数学之间的神奇联系。
让我们深入迷人的领域。
人工智能和数学有什么联系?
人工智能问题分为两大类:搜索问题和表示问题。紧随其后的是互连的模型和工具,如规则、框架、逻辑和网络。都是很数学的题目。
人工智能的首要目的是创造一个人类理解的可接受的模型。这些模型可以用不同数学分支的思想和策略来准备。
考虑自动驾驶汽车;他们的目标是识别视频图像中的物体和人。在这些汽车的背后,有着最小化程序和反向传播形式的数学。数学帮助人工智能科学家使用数百年来已知的传统方法和技术解决具有挑战性的深度抽象问题。
人工智能用的是什么数学?
在所有重大进步的背后,都有数学。线性代数、微积分、博弈论、概率、统计、高级逻辑回归和梯度下降的概念都是主要的数据科学基础。
数学有助于理解逻辑推理和对细节的关注。它增强了你在压力下思考的能力,增加了你的精神耐力。数学概念给出假设或虚拟问题的真实解。它是关于结构和发展的原则,即使你对组件做了任何改变,这些原则仍然是正确的。
构成人工智能繁荣事业的三个主要数学分支是线性代数、微积分和概率。
线性代数
线性代数是应用数学领域,是人工智能专家离不开的。不掌握这个领域,你永远不会成为一个好的人工智能专家。正如斯凯勒·斯皮克曼所说,
“线性代数是 21 世纪的数学。”
线性代数有助于产生新的想法,这就是为什么它是人工智能科学家和研究人员必须学习的东西。他们可以用标量、向量、张量、矩阵、集合和序列、拓扑、博弈论、图论、函数、线性变换、特征值和特征向量等概念抽象数据和模型。
矢量
在线性规划中,为了符号的方便,向量被用来处理不等式和方程组。人工智能科学家使用不同的向量技术来解决回归、聚类、语音识别和机器翻译问题。这些概念还用于存储人工智能模型的内部表示,如线性分类器和深度学习网络。
矩阵理论
在科幻电影中,你通常会看到,通过执行一些类似于神经系统的计算结构,通过生成神经元之间的连接来匹配人脑的推理方式,从而产生了神经网络。矩阵的概念用于神经网络的研究。
通过在三层中形成人工神经元,可以在神经网络中实现非线性假设:
1.输入层
2.隐藏层
3.输出层
人工智能科学家根据隐藏层的数量和连接方式对神经网络进行分类。
真实神经元
人工神经元
这些人工神经元可以形成神经网络,这花了大约 20 年时间才发现。
特征值和特征向量
搜索引擎排名的科学是基于数学科学 。页面排名,这是谷歌作为一家公司的基础,是基于数学的角度。页面排名是一种算法,最初由拉里·佩奇和谢尔盖·布林在他们的研究论文**“大规模超文本网络搜索引擎的剖析”中提出。**几百年前就为人所知的主特征值和特征向量的基本概念的应用,被用于这一巨大突破的背后。
机器人爬虫首先检索网页,然后通过分配页面等级值对它们进行索引和分类。每个页面的可信度取决于该页面的链接数量。
给定页面 P 的等级 r §被假设为,
在哪里,
Bp =指向 P 的所有页面
| Q | =的外部链接数。
p 是带有项的矩阵,
为了找到收敛和收敛速度,矩阵 P 被调整。当行谷歌矩阵 P 达到和为 1 时,则称之为行随机矩阵。页面排名迭代表示马尔可夫链的演变,其中网络有向图被表示为转移概率矩阵 p。
它显示了在任何时间点随机浏览三个页面的概率。
首先,创建一个二进制邻接矩阵来表示链接结构,然后通过归一化将它转换成一个概率矩阵。
为了计算页面秩,必须解决线性系统的特征向量问题,
随机矩阵 P 的特征值可以假设为 1> λ1 ≥ λ2 ≥ … ≥ λn,
和 V1,V2,V3,…,Vn 是相应的特征向量。
在收敛过程之后,矩阵 P 的主导特征值应该是λ=1 以满足,
有了,
这是马尔可夫模型的稳态分布。
PageRank 收敛的过程如图所示,
Google 就是这样自动表征每个站点的页面排名值的。
微积分
微分学、多元微积分、积分学、通过梯度下降的误差最小化和最优化、极限、高级逻辑回归都是在数学建模中使用的概念。生物医学科学中使用设计良好的数学模型,以高保真度模拟人类健康和疾病的复杂生物过程。
**In-Silico modeling,**是人工智能方法在生物医学中的应用,是一种完全自动化的模型,不需要人类样本、原始动物测试、临床试验或实验室设备。在该模型中使用微分数学方程来测试新的机制假设和评估新的治疗靶点。这是通过操纵数学模型参数来更精确地研究人体生理学、药物反应和疾病的最廉价和最方便的方法。
针对儿童孤儿疾病的计算机临床试验
概率
人工智能世界里有很多抽象的问题。你可能会经历多种形式的不确定性和随机性。概率论提供了处理不确定性的工具。为了分析事件发生的频率,使用了概率的概念,因为它被定义为事件发生的机会。
让我们考虑一个机器人。机器人只能向前移动一定的秒数,但不能移动一定的距离。为了让机器人前进,科学家在它的程序中使用数学。离散随机变量、连续随机变量、贝叶斯公式和归一化是一些概率概念,它们与线性代数的其他概念一起用于机器人导航和移动。
建议阅读:
机器人研究一直呈指数增长,标志着一场新的工业革命。了解数学是如何…
medium.com](https://medium.com/datadriveninvestor/mathematics-behind-robotics-9d1790b33828)
最终判决
无论你想从事机器学习工程师、数据科学家还是机器人科学家的职业,你都需要在数学方面表现出色。数学可以增强人工智能中至关重要的分析思维技能。人工智能科学家认为,人们对人工智能的看法是,它都是魔法,但它不是魔法,而是数学在所有发明背后创造了魔法。因此,要在当今人工智能驱动的世界中领先,你需要在数学方面有很强的天赋。
为什么模型验证如此重要,它与模型监控有什么不同
建模基础
模型开发过程的支柱
作者图片
一旦模型开发步骤完成,模型验证就开始了。事实上,模型验证是整个模型开发过程的一个重要部分。如果一个开发人员在开发模型上花费了 X 的时间,那么大部分时间他们会花费 X 甚至更多的时间来验证模型并确保它的健壮性和准确性。
在这篇文章中,我将强调模型验证过程的重要性,以及它与模型监控过程有何不同。
模型验证不当的后果
1.看不见的数据的模型性能差
米卡·鲍梅斯特在 Unsplash 上的照片
如果模型没有经过适当的验证,那么它就不能很好地处理看不见的数据,而这正是预测模型的最终目的。有各种各样的模型验证技术,最重要的类别是时间内验证和时间外验证。
开发数据集的一部分被保留在一边,然后对模型进行测试,以查看它如何处理来自相似时间段的看不见的数据,这些数据最初是使用这些数据构建的*(即在时间验证中)。*
数据集来自不同的时间段,模型也在这个看不见的数据块上进行测试,以判断它对看不见的数据的响应*(即超时验证)。*
这些验证确保开发人员对模型的性能有信心。
2.可疑的稳健性
由 KirstenMarie 在 Unsplash 上拍摄的照片
正如上面所解释的,如果一个模型已经被正确验证,开发人员对它的性能有信心。已经完成验证过程的模型被认为适合在未来场景中稳健地运行。在验证过程中纳入了敏感性分析测试,以确保通过在一定程度上改变独立模型变量来解释经济起伏,因变量不会受到可能导致模型不可用的极端程度的影响。
3.无法适应压力情景
在像衰退或当前疫情局势这样的极端情况下,预测模型很难适应和预测仍然足够好的预测,尽管存在波动。但是,如果模型验证过程也包括压力测试措施,那么它有助于将模型的一个版本投入生产,该版本已经过压力场景的良好测试,不会在任何灾难发生时突然失败。
4.不可靠的模型输出
如果模型没有通过基本的超时验证测试,那么模型可能是一个过度拟合的模型,它在开发样本上表现很好,但是在看不见的数据上失败了。为了避免这种情况,一定要验证!
模型验证与模型监控
为了开始理解这种区别,我们将涉及三个要点:目的、指标和时间段。
时间段:
模型验证与模型开发过程同步进行。很多时候,是一个迭代的过程。如果一个模型在验证阶段表现不佳,它将返回到开发阶段。这是紧接在模型开发之后。这是一个一次性的过程。
模型监控在模型进入生产阶段后生效。这是一个持续的过程。为每个模型确定一个特定的监控频率,然后对其进行评估,以确保模型符合标准,其结果可靠。此外,我们检查人口分布与开发时期相比不应有显著的不同,以确保模型仍然相关并且可以使用。
目的:
模型验证的目的是在我们已经有实际数据的过去数据的基础上检查模型的准确性和性能。
一旦部署了模型,模型监控过程就通过判断总体分布来确保模型的相关性,并且一旦开始输入数据就记录模型预测和实际数据之间的回溯误差百分比比较,以确保模型性能在可接受的范围内。
指标:
这是两个阶段最重要的区别。在模型验证阶段,我们主要关注可以为我们解码模型性能和响应的统计指标。而在模型监控阶段,我们既关注统计指标,也关注业务指标,以得出我们对特定模型的相关性和可靠性有信心的结论。
这就把我们带到了这篇文章的结尾。这是一个在面试中经常被问到的问题:你能解释一下模型验证和监控阶段之间的区别吗?我们在这篇文章中提到的内容足以作为答案。
我将继续发布更多的帖子,深入研究在模型验证和模型监控阶段使用的技术指标/技术。
观看此空间,了解更多关于数据科学、机器学习和统计的信息!
快乐学习!快乐成长!😃
NumPy 为什么牛逼?
简短的回答
NumPy 速度很快,简化了你的代码。对于刚接触 Python 的人来说:尽可能多地使用 NumPy。在下面的例子中,NumPy 的魔力使我的 Python 代码快了 50 倍。
冗长的回答
背景
我在接近博士学位时开始使用 Python,当我有问题要解决时,我是学得最好的人,否则代码只是随机的文本。研讨会和讲座不是我的风格,只有在我获得一些经验后,我可能会感兴趣。我更愿意努力解决一个问题,然后求助于我的圣经: StackOverflow 。因此,只有当同事和主管看到我的代码并提出建议时,使用 Python 的高效方法才会生效。当我第一次开始使用 Python 时,我对使用现有的库(如 NumPy)进行数据操作有些抵触,主要是因为我不明白为什么我需要使用它。当同事告诉我它会改进我的代码时,或者当我找不到特定函数的替代品时(例如 np.loadtxt ()),我开始使用它。直到我遇到一个问题,它极大地改进了我的代码,我才明白为什么 NumPy 更好。这篇文章展示了这个真实世界的例子,直接来自科学。
问题是
在我的工作中,我们分析所谓的对分布函数(PDF) 。PDF 是一种原子间距离的直方图,在理解和解释原子结构时非常有效。 PDF 可以从衍射数据中测量,我们可以尝试通过建模来复制。一种特别有效的方法是“大盒子”建模,它包括创建一个包含数十个原子的 3D 盒子,并重新排列这些原子,直到模型 PDF 与测量的 PDF 相匹配。
NumPy 与此有何关系?造型。我试着用一大盒原子计算 PDF,发现 NumPy 让我的代码快了很多。在这个例子中,我将只关注原子间距离直方图的计算,它将被称为总分布函数(TDF)。PDF 的计算需要更多的步骤。如果你有一个大盒子的原子,并想计算 TDF,你会进行以下步骤:
-计算所有原子间距离
-绘制这些距离的直方图
代码
进行计算时,首先想到的方法是遍历盒子中的每个原子,计算到剩余原子的距离,然后绑定这些距离。这方面的代码如下面的代码片段所示。
在这个代码片段中,xyz_Ang 是盒子中原子的 3D 坐标,r_rdf 是直方图仓的中点,n_atoms_tot 是原子的总数,dist_hist 是得到的 TDF。
当我在我的计算机上运行这个包含 1000 个原子的盒子的代码时,计算大约需要 5 秒钟。如果我把数量增加到 1728 个原子:15 秒。在‘大盒子’模型中,这是极小数量的原子和缓慢。
数字密码
NumPy 可用于显著提高计算速度。这是通过矢量化和 NumPy 内置的直方图函数实现的。矢量化意味着我们不需要在数组运算中使用“for 循环”。对于复杂的计算,你可以使用 np .矢量化。但在这种情况下,我们只是计算两点之间的距离,所以我们可以用每个数组写出计算结果。因此,我们可以生成一个距离数组(下面标记为 dist_vals ),而不是逐个计算单个原子之间的距离。从这里开始,我们可以使用 NumPy 直方图函数来对距离进行分类。这个新方法的代码片段如下所示。
在这个片段中,bin_edges 是我们的直方图箱的边缘。
这通过删除一个“for 循环”简化了我们的代码。当我在我的计算机上对一个有 1000 个原子的盒子运行这个程序时,计算大约需要 0.1 秒,比前面的代码快了 50 倍。如果我增加到 1728 个原子,时间是 0.3 秒。这是一个巨大的改进,允许实现更复杂的建模。这对于一个尺寸很重要的领域来说非常重要:你的盒子越大,你的统计就越好!
摘要
如果你有更多的锦囊妙计,你或许可以让代码运行得更快,但这很简单!我不认为我利用 NumPy 会使代码变得更复杂。这就是 NumPy 的强大之处:易于实现并能有效地加速代码。矢量化本身非常棒,因为您可以像输入标量算术一样输入数组算术。NumPy 为什么有能力做到这一点?它是由一群巫师开发的!如果你有机会,尽可能地使用它的功能。
如果你想亲自看看并尝试一下,我已经把上面例子的全部代码上传到 GitHub 了。
为什么物体检测这么乱?
人工智能图解指南
TLDR:神经网络有固定大小的输出
与神经网络一起工作的人知道物体检测技术有多复杂。难怪没有直接的资源来训练他们。您总是需要将数据转换成类似 COCO 的 JSON 或其他不需要的格式。这绝不是即插即用的体验。此外,没有图表能像 U-Net 或 ResNet 那样充分解释 R-CNN 或 YOLO 的速度更快。细节太多了。
虽然这些模型相当混乱,但对它们缺乏简单性的解释却相当直接。它可以用一句话来形容:
神经网络有固定大小的输出
在物体检测中,你无法先验的知道一个场景中有多少物体。可能有一个、两个、十二个,或者一个也没有。下面的图像都有相同的分辨率,但对象的数量不同。
优 X 创投在 Unsplash 上的照片。每个图像都有不同数量的对象。
这个一百万美元的问题是:*我们如何从固定规模的网络中构建可变规模的输出?*另外,我们应该如何训练数量可变的答案和损失项?我们如何惩罚错误的预测?
实现可变大小的预测
为了创建大小不同的输出,两种方法在文献中占主导地位:“一刀切”的方法,一种广泛的输出,足以满足所有应用程序,以及“前瞻”的想法,我们搜索感兴趣的区域,然后我们对它们进行分类。
我只是编造了那些术语😄。在实践中,它们被称为“一阶段”和“两阶段”方法,这是一个不太明显的方法。
一阶段方法
过食、YOLO、SSD、RetinaNet 等。
如果我们不能有可变大小的输出,我们将返回一个很大的输出,它总是比我们需要的要大,然后我们可以修剪多余的部分
整个想法就是走贪婪路线。原始的 YOLO 检测器可以检测 448x448 图像的多达 98 个边界框。这听起来很荒谬——的确如此。自己看:
该死的。这是一个很大的检测。
这太乱了!然而,你可以看到每个方框旁边都有一个百分比。该百分比显示了算法对分类的“置信度”。如果我们将此阈值设为某个值,如 50%,我们会得到以下结果:
以 50%的置信度设定阈值效果很好。
好多了!这很好地总结了一阶段方法:生成大量(但固定的)检测集,并剪除杂波,通常混合阈值和非最大抑制(NMS)。
这种方法因其速度而备受推崇。单个网络可以一次性处理整个图像并输出检测结果。时至今日,只要速度是最重要的考虑因素,单级检测器就备受青睐。
*缺点是内存开销大,检测准确率较低。*每个盒子消耗的内存与类的数量成正比,盒子的数量与图像分辨率成二次方增长。当有许多类和高输入分辨率时,这种渴望的代价会很高。最重要的是,网络必须联合定位和分类对象,这损害了这两项任务的性能。
两级检测器
RCNN,Fast-RCNN,Faster-RCNN,,等。
如果我们不能获得可变大小的输出,那么让我们搜索感兴趣的区域,并单独处理每个区域
换句话说,这种方法将包围盒从检测中分离出来。在第一阶段,该算法提出区域。然后,我们使用专用网络对它们进行分类。早期阶段看起来如下:
两级检测器的区域建议
有了我们感兴趣的区域,我们可以一个接一个地处理它们,产生它们各自的类和用于最终修剪的置信度分数。结果如下:
我们玩具两级探测器的最终结果
现在,我们得到了一些优秀的检测和几乎没有杂波。与单阶段方法相比,该技术使用专用网络进行区域提议和区域分类。这种想法允许两个阶段独立开发,并且已经投入了大量工作来共享从第一阶段到第二阶段的见解,以实现更快的检测。
*这种方法的明显优点是它的准确性。*通过将定位与分类分离,这两项任务都由专门的网络处理。另一方面,缺点是速度,因为您需要中间区域提议步骤,并且您需要为每个提议运行分类器网络。因此,所用时间与检测次数成正比。
培训可变大小的输出
现在我们知道如何处理输出大小问题,最后的问题是,我们如何训练这样的网络。谢天谢地,在这两种情况下,程序大致相同。
训练对象检测算法就像抚养孩子一样。你得告诉孩子什么是对什么是错。然而,如果你表扬或抱怨太多,你会宠坏或伤害孩子。在异议检测方面,我们将只表扬最好的检测,只惩罚最严重的错误,而对其他的则只字不提。
考虑到基础事实对象的集合,我们将使用基础事实框来表扬交集/并集(IoU)大于 0.7 的检测,并惩罚那些小于 0.3 的检测。这将创建一个梯度信号,集中于真正好的检测,淡化真正错误的检测,并留下其余的检测。
您可以添加的一个简单的事情是淡化 IoU 仅在 0.1 和 0.3 之间的检测;因此,惩罚力度会小一点。您还可以平衡您认为阳性和阴性的盒子数量,平衡阳性和阴性样本的贡献。
更进一步是使用某种形式的硬负挖掘。总体思想是使用模型的损失从最差到最好对检测进行排序。这样,我们就有了一个更有原则的方法来选择表扬什么和惩罚什么。这篇论文在这个问题上是一个有用的参考。
检测与分割
到目前为止,我们一直在处理对象检测:在场景中寻找对象的边界框。对于人类来说,这是一项简单的任务:我们可以轻松地检测事物,我们可以快速绘制矩形。更具挑战性的任务是细分。
图像分割就是画出勾勒物体轮廓的蒙版。例如,我们需要完整地描绘出一个人的轮廓,而不是一个矩形。这更难,因为画一个物体比画一个矩形更难,而且物体也可以和它们的背景融合在一起,这使得它更具挑战性。
然而,对于神经网络来说,这更容易。我们必须对每个像素进行分类,从而制作一个蒙版,而不是输出可变大小的图像。因此,每个输入像素需要一个输出像素。下面是一个由人物分割工具处理的上述场景的示例:
人群细分
它并不完全完美,但它是一个可爱的工作。从概念上讲,这是一个更加困难的问题。然而,在网络架构级别,它更易于管理。
如果我们同时利用这两个框架,我们可以很快得到所谓的“实例分割”,这是用不同的对象分割不同的对象的任务,如下所示:
实例分段示例
总的想法是分割每个边界框的结果。这样,边界框就是“实例”,分割就是分割:)。虽然这是简化的,但这是 Mask R-CNN 算法背后的一般思想。
在这篇文章中,我介绍了为什么物体检测算法比其他网络复杂得多,以及作者如何处理可变输出大小的问题。然后,我简要比较了图像分割模型如何看待这个问题,以及如何将这两种方法结合到一个实例分割框架中。
总的来说,我没有特别讨论任何架构。事实上,所有提出的概念都是出于教学目的的简化。每个模型都有一点不同,引入了锚、平滑和新奇损失等概念。如前所述,这可能会变得非常复杂。😔
如果你想继续阅读,这篇论文是 2019 年末关于基于深度学习的对象检测技术的调查。
如果你对这篇文章有任何问题,欢迎评论或联系我。如果你是新手,我强烈推荐订阅。对于数据和 IT 专业人员来说,中型文章是 StackOverflow 的完美组合,对于新手来说更是如此。注册时请考虑使用我的会员链接。
感谢阅读:)
Python 为什么叫 Python?
关于世界上最流行的编程语言之一的一些有趣的事实
我们大多数人每天都在使用 Python 编程语言。如果你还没有用 Python 编程,那么我强烈建议你花些时间学习基础知识,然后用 Python 做你的下一个项目。
Python 是目前最流行的编程语言之一。
在你的 Python 编程生活中有没有想过为什么 Python 叫 Python 而不是 P、P++或者 P#?我有*(双关)。*
有趣的事实是编程语言 Python 是由吉多·范·罗苏姆实现的。
在吉多·范·罗苏姆实现 Python 的同时,他也在阅读蒙蒂·Python 的《飞行马戏团》出版的脚本。
如果你以前没听说过巨蟒剧团的飞行马戏团,我来简单介绍一下,也许我们可以找到 Python 被称为 Python 的原因。让我们一起探索吧!
巨蟒剧团的飞行马戏团是 1969+年的 BBC 喜剧电视连续剧。这是一部高收视率的电视剧,在 IMDB 中的评分为 8.8。
Python 编程语言的评价也很高。根据最近的 Stackoverflow 调查,Python 的受欢迎程度已经超过了 Java。
Python 是一种著名的编程语言,因为它易学易用。另外,现在有大量的库可以在您的项目中使用!一些开发者甚至认为它是一种必须知道的编程语言。
如果你阅读 Python 文档,你会看到许多受 Monty Python 喜剧系列启发的例子:
你会看到提到垃圾邮件,鸡蛋,伐木工人,和骑士等。
https://docs.python.org/3/library/pprint.html
回到《巨蟒剧团》,一些评论家认为《巨蟒剧团》是一部必看的喜剧系列片。为什么?嗯,这个节目充满了惊喜,看起来非常有趣。这是一部实验喜剧。
Python =灵感来自蒙蒂·Python
喜剧系列很有趣,因为它很有创造性,而且……嗯……很随意。它无所不谈。据一位观众说,这可能不是每个人都觉得好笑。
嘿,Python 编程语言可以用来做任何编程任务,从开发到数据科学任务到管理工作,再到跨分布式机器解决复杂的数学计算。对于我们希望快速试验一个概念并希望快速将产品推向市场的项目来说,它是一种非常好的语言。
话虽如此,一些开发人员仅将 Python 视为一种原型编程语言(出于他们自己的正当理由)。还是那句话,不是每个人都一模一样的,对!我真的很喜欢用 Python 编写我的项目。
Python 编程语言受到许多语言的启发。您知道它的控制和数据结构是受 ABC 启发的吗?它的标识符、字符串和% string 格式来自 C,它的正则表达式受到 Perl 的启发。
有趣吧?
Python 的#注释源自 UNIX v7 shell。它的发明者吉多·范·罗苏姆最近也提到“Python 的比较重载方法的名字 eq 、ne 、lt 、le 、gt 、_ge 来自 Fortran 的. eq .等。”
现在,回到巨蟒喜剧系列,它有如此多的曲折,它永远不会无聊。因此,这场演出是高度不可预测的,这使得它辉煌。
一位评论家说,这是电视史上的一个里程碑。
Monty Python 是一个涵盖许多主题的实验性系列。让喜剧充满了意想不到的惊喜。
迈克尔·泽兹奇在 Unsplash 上的照片
吉多·范·罗苏姆想给他的编程语言起一个独特、神秘、简短的名字,还有什么比以巨蟒剧团的飞行马戏团命名为 Python 更好的呢?
为什么正态分布这么正态?
paweczerwi ski 在 Unsplash 上的照片
超越中心极限定理
作为中心极限定理的结果,正态分布(或高斯分布)在统计学中广泛出现。具体来说,中心极限定理说(在大多数情况下除了股票市场)任何时候“一堆东西加起来”,将会产生一个正态分布。
但是为什么呢?为什么是这种分布?为什么特别?为什么不是其他发行版?还有其他统计分布会发生这种情况吗?
问题:答案是肯定的,有其他分布和正态分布一样特殊。正态分布仍然是最特殊的,因为:
- 它需要最少的数学
- 这是现实世界中最常见的情况,股票市场是个明显的例外
如果你感兴趣,请继续阅读!在深入研究常被遗忘的正态分布之前,我将给出一个中心极限定理的直观草图和一个快速证明草图。
中心极限定理
以下是一份简短的官方声明:
- 假设你有 n 个随机变量 X₁,X₂等等。代表来自具有总体均值μ和有限方差σ的某个总体的大小为 n 的样本。人口可以遵循任何分布。
- 我们感兴趣的是它们的均值 X,它本身就是一个随机变量。(这是随机的,因为每次我们抽取大小为 n 的样本,我们都会得到不同的结果)。
- 我们已经知道均值 X 会有均值μ和方差σ /n(独立性假设成立,是随机变量的一般性质)。
- 中心极限定理说,当 n 很大时(通常 40+在现实生活中足够接近),均值 X 遵循正态分布,不管基础人口的分布是什么。
形式上,
中心极限定理的形式陈述
其中φ代表正态分布,平均值和方差如下所示。(你可能习惯看到等价的标准差 σ/√n 代替)。“in distribution”是一个关于聚合如何工作的技术术语。从现在开始我们将忽略这些技术细节。
为什么中心极限定理会出现
中心极限定理出现在现实世界中的各种场合。例如,一个非常合理的假设是,你的身高可以用一系列相关因素的总和来表示,其中包括:
- 你 8 岁时每天喝多少牛奶
- 你有多少条 X 和/或 Y 染色体
- 你有哪一种 GH1 基因变体
- 一大堆其他的基因
- 你小时候是否睡在的普罗克拉斯特床
考虑一大堆因素,每个因素都会对你的最终(成人)身高产生微小的影响,然后,很快,你就会得到一个(大致)人类身高的正态分布!
请注意,我稍微作弊了——这里的变量不是独立同分布的,但独立性假设是一个合理的近似,还有更强版本的中心极限定理放宽了同分布假设。然而,我们确实选择了排除影响身高的极端遗传条件。
总之,任何时候你测量的东西是由一大堆更小部分的贡献相加而成的,你很可能以正态分布结束。
快速证明
这个证明必然是一个草图,因为,如果你想要一个包含所有分析和概率论的完整证明,去读一本教科书吧。我想说明的要点是,欧拉常数 e 出现是有原因的。
首先,我们需要一个高性能的数学工具。对于每一个合理的随机变量 X,都有一个特征函数φ ,它本质上是 X 的概率密度函数(PDF)的傅立叶变换。
随机变量 X 的特征函数
为什么我们把我们非常好的,实值的,随机变量,放入复数,然后让它变得更复杂?因为某些原因,没有人能满意地向我解释,数学中的事物往往有两种看待它们的方式(“二元性”)。物理学也是如此:空间/动量,时间/频率。不管是什么原因,有时候看另一面会简单得多。
特征函数有两个我们需要的很好的性质。假设 A 和 B 是独立的随机变量, c 是标量常数。然后我们想知道和变量 A +B 和乘积 cA 的特征函数。你应该能用纸和笔很快地从定义中推导出这些:
特征函数的便捷性质
φ在 t=0 时的导数也编码有价值的信息。设置 t=0 后,指数部分消失,我们得到一个足够简单的表达式来计算。(我再次向你保证,你可以用铅笔和纸在 2 分钟内自己完成这项工作。就用定义,做看起来对的事情)。
假设均值和方差有限,特征函数在 0 处的导数
现在我们准备好开始了。回忆一下我们的 X₁,X₂,…等等。,iid 个随机变量,每个都有均值μ和有限方差σ。让我们转移他们,所以我们得到
并定义
请说服自己,如果我们证明了和 Y 是均值为 0、方差为σ的正态分布,那么我们已经证明了均值 X 是均值为μ、方差为σ /n 的正态分布,这就是我们想要的。
现在我们只需要计算特征函数
Y 和的特征函数
在这里,我们使用了上述随机变量的和与标量倍数的特征函数性质。Y 是 iid,所以它们都有相同的特征函数:重复乘法变成取幂。
现在我们把φ泰勒展开到二阶
φ的泰勒展开
取极限为 n → ∞。你知道这个!是复利公式( Pert!)利率 r =-σt/2
复利公式
我们得到的结果实际上是均值为 0、方差为σ的正态分布的特征函数。通过李维连续性定理,我们完成了。我们可以看到为什么那个狡猾的欧拉常数 e 出现了!
超越中心极限定理
好吧,这一切的重点是找出为什么正态分布如此正常。我们所做的只是证明了中心极限定理,而没有真正得到为什么结果是正态分布的更深层次的解释。该付钱了。
我们看到中心极限定理如此普遍,因为它告诉我们当我们对一堆东西求和/平均时会发生什么。所以很自然的会问,一堆东西的总和/平均值会是什么分布?让我们把这些分布看作正态(高斯)分布的“表亲”。
无限可分分布
如果一个分布 Y 可以表示为任意多个 iid 分布 X 的和,那么它就是无限可分的。
泊松分布、学生 t 分布和伽马分布是无限可分的,高斯分布和我们将在下面看到的分布也是如此。
稳定分布
然而,在我们认为一个分布是正态分布的“表亲”之前,我们想要求一个更强的条件。假设我们有发行版 x 和它的 iid 副本 X₁和 X₂.我们对这些拷贝进行线性组合,看看我们是否得到了和开始时一样的结果,除了可能被常数 c 缩放和被常数 d 移位,如果我们总是能做到这一点,我们说 X 是稳定的。
在上面无限可分分布的上下文中,这意味着我们可以将 Y 写成本身(适当缩放和/或移位)的 n 个副本的总和。粗略地说,对于像泊松分布这样的不稳定分布,添加越来越多的分布会让你越来越接近稳定分布。所以我们感兴趣的是稳定分布。
Levyα-稳定分布
α稳定分布是唯一稳定的分布。早在 20 世纪 20 年代,法国人保罗·莱维就对它们进行了研究。他们的描述是 20 世纪 50 年代俄罗斯人格涅登科和科尔莫戈罗夫给出的广义中心极限定理的核心。反过来,它们提供了关于正态分布本质的正确观点。
每个 α稳定分布由 4 个参数表征。这是一个很大的参数。
- 位置(本质上是平均值)
- 刻度 c (与标准偏差相关)
- 尾部尺寸,α。介于 0 和 2 之间,包括 2 但不包括 0。
- 左/右尾比,β。介于-1 和 1 之间。
前两个参数非常合理:位置和规模。在正态分布的情况下,位置是平均值μ,标度可以是标准偏差σ。
不同尾巴大小的比较(维基百科)。α=2 是正态分布。
第三个参数α(分布族的名字由此而来)控制尾部的大小。最小的尾部属于正态分布,峰度为 3(峰度为 0)。对于所有其他稳定分布,尾部较厚(“尖峰厚尾”),峰度至少为 9。你可能已经从《黑天鹅》《T21》等书中熟悉了“胖尾巴”这个概念。简而言之,如果你认为事物是正态分布的,但事实上它们的尾部比你想象的要大,你会看到数量惊人的“反常”事件,比如股市崩盘(当然,这很常见)。我们一会儿将回到这个参数。
不同“偏斜度”设置的比较(维基百科)
最后一个参数有点无聊。它控制右尾巴与左尾巴的大小比例(直观地说,歪斜)。从图中可以看出,对于β=1,分布仅支持非负数。
从某种意义上说,我把参数给错了。它们控制一阶(位置)、二阶(标度)、三阶(偏斜度)和四阶(峰度)矩。希望这能给你一个直观的感觉。最后,我们来看看最重要的第四个参数,α。
帕累托分布
为了理解尾部大小,我们应该看看帕累托分布。帕累托分布有一个仅在 x≥1 时非零的 PDF,并带有一个参数α > 0,其作用与莱维分布相同。
帕雷托分布的 PDF,α > 0
19 世纪晚期,意大利经济学家 T4·维尔弗雷多·帕累托·T5 首次研究了 T2 的帕累托分布。它是 80/20 法则的起源(20%的人口拥有 80%的财富;20%的工作完成了 80%的结果)。这显然也是墨索里尼法西斯主义的灵感来源,墨索里尼参加了他的讲座。
需要注意的一些关键点
- 对于α = 0(或更小),分布不会被归一化:总概率不会加到 1(它会加到∞)。因此对α有约束。
- 对于α ≤ 1,分布连有限均值都没有!它的期望值 E(X)是∞。
- 对于α ≤ 2,分布不具有有限方差!它的方差是∞。
- 帕累托分布总是比正态分布有更宽的尾部,用峰度来衡量。在极限α→∞,峰度比正态分布多 6。
随着α变大,尾部变小(但保持比高斯大)。如果尾部太大,分布的均值和方差可能是无穷的!
好吗?如果你理解帕累托分布是典型的“厚尾”分布,有一个参数控制尾部的“大”,那么你就理解了α在 lévyα-稳定分布中的作用。
帕累托分布和莱维分布之间的关系
把所有东西放在一起,你可能已经注意到,我偷偷摸摸地还没有明确地说为什么中心极限定理不适用于α-稳定分布。
事实上,中心极限定理要求我们的分布具有有限的方差σ。但是对于方差无穷大的分布,中心极限定理就不适用了。而是对一堆样本进行平均,会得到一个α < 2 的α稳定分布。我们将在下面给出一些例子。
这也是我讲“位置”和“尺度”参数的原因。你对均值和方差的直觉非常适用,但并不是所有的分布都有明确的均值或方差。
概括/澄清一下,假设我们有一个基础分布 X,我们用大小为 n 的样本取平均值。我们想知道当 n 很大时,样本均值将遵循什么分布。
- 如果分布的尾部看起来像帕累托分布α < 2 after we go far enough, we will get an α-stable distribution with the same α. If the left tail and right tail have different α-parameters, the largest one wins and the smallest one dies: we end up with an α-stable distribution that only has a left or right tail (β = ±1). Otherwise β just sets the ratio between the two tails.
- If the distribution’s tails look like a Pareto distribution with α > 2,或者它们比任何多项式下降得都快(比如说像高斯分布中的指数下降),那么你将得到一个正态分布。
- α = 2 的情况是特殊的。即使基础分布具有无限的方差,结果分布仍然是高斯分布。因此,α=2 的莱威分布是正态(高斯)分布。
α=2 的情况也很特殊,因为正态分布不能有任何偏度(所以β=0),尾部大小是固定的(峰度= 3)。因此,不存在α > 2 的α稳定分布。相反,所有这些假设分布都被中心极限定理“捕获”,并在我们采样和平均时变成高斯分布。
α-稳定分布很重要,因为它们提供了“胖”尾情况下的中心极限定理。正如上面提到的,股票市场回报被认为遵循α-稳定分布,α≠2,这提供了一个现实生活中的例子,假设某个东西是正态分布的,你可能会输掉你的衬衫。
结论
有趣的是,除了少数特殊情况,封闭形式的概率密度函数(PDF)是未知的。一般只能写下特征函数φ。这是相当丑陋的,所以我不打算打扰。然而,可以对 pdf 进行采样和数值计算,并且可以在任何好的统计软件包中找到实现(比如 scipy )。
让我们以一个例子来结束。如果生成标准随机正态变量 A 和 B,并考虑它们的比 A/B,就会得到一个α=1 的柯西分布。作为一个练习,您可以生成 n 大的 n 数,并将正态分布和 Lévy-stable 分布拟合到样本均值的最终分布中。你应该看到正态分布不符合(尾部太肥)而 Lévy 分布符合α接近 1。如果改变 A 和 B 的均值和标准差会怎么样?
参考
除了文中的链接,我主要是通过新加坡国立大学孙荣峰的课堂笔记了解到这个话题的。
[1]有了四个参数,我可以让一头大象适应,有了五个参数,我可以让它扭动鼻子——冯·诺依曼
[2]然而,这些并不是实际的数字
为什么这个图表不好?使用 GoDVE(数据可视化评估语法)进行数据可视化评估的最终指南
“各种流行病的死亡人数占世界人口的比例[OC]”来自 r/dataisbeautiful
你难道没有看过不时疯传的图片并试图分析它们吗?我知道。大多数都是垃圾。但它们为什么是垃圾?是什么让糟糕的视觉效果变得糟糕?
今天,我将向您介绍vis qual——可视化质量工具和用于评估数据可视化的标准。
声明:如果你是来回答标题问题的,请直接跳到章节“数据可视化评估的语法”。
首先,让我们从几个例子开始,因为这是最好的学习方法!这是一个带有 epi--al 调色板的全球疫情案例图。
“CDC 对 COVID 病例的颜色选择不当”来自 r/dataisugly
这个图表有什么问题?嗯,是调色板让你准确无误地理解一切**。也许本质上不是什么都没有,但至少它确实是“误导性的”。“无”,即没有病例和“10,001 或更多”病例之间的差异是巨大的(准确地说至少是 10,001)。但是颜色表示是相同的。是吗?不完全是。我用 GIMP 帮你查过了。**
标尺上所选颜色的十六进制值。
是啊,非常不同。
但是让我们公平地注意到地图已经被改变**。我确实避免使用“纠正”一词,因为问题仍然存在——虽然规模较小,但仍然存在。**
来自 cdc.gov的“修正”地图
如何区分“5001 到 10000”和“1001 到 5000”或者“10001 到 20000”?不要让我开始谈论色盲的话题,这个话题完全被政府的形象化忽视了。
顺便说一句:世界上 12 个男人中有 1 个,200 个女人中有 1 个是色盲
颜色说够了,让我们来谈谈比例和轴
颜色并不是 datavis 中唯一常见的错误。老实说,最常见的错误是关于刻度/轴的恶作剧。回想一下:
标度指的是纯粹的大小(例如条形图中的条),而轴描述数据空间的“范围”,帮助您读取准确的值,并通常定义坐标系。
说到规模,我们来看看这个牲畜 vs 车辆的对比。上次查了 300K < 4M ,但是我是谁?带尺子的自作聪明的家伙?
"告诉我更多关于 Kanye 的 30 万美元牲畜的信息"来自 r/dataisugly
“下一个例子是关于轴。你知道什么比气候变化否认者更好吗?一个否认气候变化的人,他知道 150%的数据可视化。
在推特上看到完整的“论据”。
这是那条推文的第一个条形图。
1000%证明温度稳定和气候变化是一个骗局。
使用开尔文温标的问题是温度很少下降到绝对零度(在地球上),通常在68°C(90°F 或 205° K)和56.7°C(134.1°F 或 329.85° K)之间。所以“绝对零度”在这里可能有点不合适。不得不解释那件事,我感到有点反感。
再举几个例子让你判断
我们可以继续下去,描述更多更可怕的例子…我知道你渴望看到一些仇恨,但为了不把这部分拖得太长,我会留下一些作为你的家庭作业。
猜猜那些有什么问题!如果你不确定,可以查看相关的 Reddit 帖子(以及整个社区,我非常感谢他们!)
“这就是为什么调查不使用(来自 r/任天堂 switch)来自 r/dataisugly
这个对我来说是最棘手的。r/dataisugly中的“关于睡眠要求的一些真正有用的信息”
咆哮部分到此结束。
这是数据科学部分!
现在我们来谈谈真正的数据可视化。我们知道我们的前进方向 VisQual,一个数据可视化评估工具和标准
…但是我们从何而来?
什么是数据可视化**?(不要跳过这一部分)**
正确的第一步是将整个数据可视化域放在某个超级域中。有人会说这是数据科学。我想对此提出异议。虽然,数据可视化的一部分肯定是数据科学的一个子域,但它的另一部分在于…艺术。
罗伯特·基恩在 Unsplash 上的照片
是的,艺术是指美术和应用艺术,两者都有涉及。这是一个模糊的定义,但数据可视化的整个定义也是模糊的。
数据可视化定义:1。将信息表示为图片、图表或图形的行为,或表示…
dictionary.cambridge.org](https://dictionary.cambridge.org/dictionary/english/data-visualization)
“将信息表现为图片、图表或者以这种方式表现信息的图片的行为”,所以简单来说就是任何东西。任何“可视化数据”或“表示信息”的东西都是数据可视化。毕竟这是艺术,任何东西都可以成为艺术。
一幅画越“精致”,就越接近梵高或毕加索的艺术,反之亦然。如果你愿意的话,它越“应用”或“实用”,它就越具有数据科学性。
虽然,我们可能会争论,一个特定的图表是否更漂亮或更有用,我们可以评估它,这是关键的部分!VisQual 的主要假设是,我们可能会判断一个可视化,说它“好”或“坏”。然而,我讨厌纯粹主观地看待它。因此有精确的标准,我们最终会达到。
我们先来谈谈语法。等等,“语法”?是啊!图形的语法,数据合成的起源。
我们将提到两个大的组织者和他们的想法来自于另一个。
图形语法
别担心,我们不会谈论形式语法,图灵机和自动机理论。Leland Wilkinson 在Grammar of Graphics中引入的概念将图形(如图表)分类为上下文无关的语法,该语法由以下元素组成:
- 数据
假设我们有一些人的出生和死亡日期。 - 变量
…是他们的年龄(死亡日期-出生日期) - 代数
…定义如何减去数字(这里是减去日期)。 - 刻度
…定义我们的条形图的单位有多大。 - 统计数据
如果我们想绘制一张平均寿命图,那就去做吧! - 几何图形
…告诉图形是否应该是条形图、散点图等。 - 坐标
可能我们是在笛卡尔坐标下工作,但是见鬼,有时候是极坐标! - 美观
…定义条块之间的距离、轴的放置位置(左、右、上或下)以及其他美观方面。 - 刻面
也许我们想根据人的国籍把我们的图表拆分成很多图表? - 指南
…基本上是可视化包含的所有“文本”(标题、轴标题、图例等。)
威尔金森的想法在形式和工程方法上都很出色,这是一个很好的基础。
图形的分层语法
Hadley Wickham 在他的图形的分层语法中提出了 Wilkinson 的概念,他将形式描述的方法转变为实际应用。在创建 ggplot 的第一个迭代时,他引入了他的概念,将图形分成多个层:
- 数据
- 绘图
- Geom
- 斯达
- 位置
- 规模
- 坐标
- 方面
如果你想知道 GoG 和分层 GoG 之间是否有任何关系,或者,咳咳,映射——有!这就是韦翰的定义。
GoG-分层的 GoG 关系(改编自 Wickham 的《图形的分层语法》)
我们可以谈论 GoG 和分层 GoG 有多棒,但是……
但是我们不是来创造或者分解图形的。威尔金森和韦翰就是这么做的。我们是来评价他们的。图形语法或图形分层语法是为了设计/构建/分解图形而创建的。我们是来评估。所以把你的元素和层放在一边,让我们来谈谈……的类别
数据可视化评估的语法
GoDVE(仍在进行简化)是讨论数据可视化评估的基础。**它由 11 个类别和 118 项标准组成,采用简单的是/否问题形式。要评估一个可视化,你只需回答问题。如果答案是“是”,那么一切都很好,但“否”意味着可视化有问题。**什么样的问题?我举个例子来解释一下——最好的学习方法!
“各种流行病的死亡人数占世界人口的比例[OC]”来自 r/dataisbeautiful
让我们来看看来自 r/dataisbeautiful 的一个非理想的可视化,并提及它可能引发的一些问题。“一些”,因为没人有时间。只在某些方面评价一个 datvis 是可以的。如果你想全部看完,那就继续吧!(查看上一章介绍的工具!)
我会试着解决每一个类别,让你对它们有个好印象。让我们开始吧!
数据
数据来源是否提供? 是的虽然大部分的新潮、病毒式的可视化都懒得去做,这一条居然在右下角提供了来源(“灵感”)。这已经是一个非常非常好的迹象。
美学
信息是按照五个帽架组织的吗? 是
[## 五个帽架
“五个衣架”的概念最初是由理查德·索尔·沃尔曼在他的书《信息焦虑…
infovis-wiki.net](https://infovis-wiki.net/wiki/Five_Hat_Racks)
这些数据按时间顺序组织得很好。
可视化是否服从阅读引力? 不嗯,tbh,时间一般是从左往右过的。在这里,它“走向”观众,有些人(包括我)觉得不太直观。
所有轴的方向和形状都合适吗? 否
时间轴怪异且不必要的变形。从 200 到 300 的距离比从 1900 到 2000 要短得多。一个世纪就是一个世纪。
协调
秤是否完整(未切割)? 是的 我提出这个问题是为了强调这是 datavis 中最常见的错误/操作之一。幸运的是,该轴是“完整的”,即没有年份/十年像下面令人厌恶的那样被“切断”:
“所以荷兰人大约是菲律宾人的 3 倍”出自 r/dataisugly
是否有足够的轴或值引用? 否
没有轴表示因每例疫情死亡的人口百分比。
所有使用的尺寸都是必须的吗?
位置
对准是否正确?
可视化是否恰当地利用了空间? 不
右边有很多空白的地方。
指导
是不是标签不太多? 没有
在太多的地方有太多的引导。此外,一些超级关键的标签(如左上角关于体积百分比的注释)不够突出。
嗯,那是藏在角落里的相当重要的信息。
几何学
这当然是这个可视化中最恶心的恶心。我们开始吧…
形状到数据的转换容易理解吗? 没有
卷对于人类来说不容易解读和比较。我们线性思考。我们比较长度容易,比较面积困难,比较体积……我们不能可靠地比较体积。
形状是否便于数据比较? 不 看上面。
形状的额外尺寸是否显示了额外的信息? 否
体积呈现一条只需要一维的信息。因此,它可以减少,当然没有必要。
这些形状不会妨碍读取数据吗? 不
一件事是有第三维度和整个无法阅读那卷的东西。第二个想法是视角。你认为这些球大小相似吗?我不知道,他们看起来很相似,但是…
这两个球一样大吗,ekhem,体积?它们标有大小不同的圆圈,只是表示。
这些形状是否以适当的比例表示数据? 没有
我们甚至不知道数据是什么?体积代表因疾病致死的人口百分比。我们也被赋予了绝对值。现在,我将不得不检查给定时间内的世界人口,除,并且…可能意识到让我检查它丢失的数据的 datavis 没有实现它的目的。
形状是否精确地代表了数据(没有近似值)? 不
哦好家伙。这里有人能估算出带飞行纤维的毛球的体积吗?(BTW,如果你要引用这篇文章,引用这句话)。
这里有人能估算出带飞行纤维的毛球的体积吗?
统计和方面
这些类别中没有适合可视化/有趣的问题,所以我们跳过它。
主题
它是亲蛋白的吗? 是
它是对德国友好的吗? 是
是 tritanopia 友好型吗? 是
颜色并不代表任何数据,所以…我只是想向所有人大声疾呼,不能用所有颜色来体验这个世界是多么不幸。
根据色盲的可视化色盲版本。(请注意,deuteranopia 和 protanopia 有点不同,例如后面的紫色球对后者来说更强烈一些)
操纵
数据是以公正的方式显示的吗? 是 数据没有被操纵吗? 是的 很难百分之百准确的说出一个人的意图是什么。因此,这一类别通常非常“我认为/也许/可能……”。我认为很难证明作者有任何意图(或潜在利益)以有偏见/被操纵的方式展示数据。
是否不含具有虚幻效果的物品? 再没有
的蛋蛋了。这是一个完美的方法,让人觉得东西(长/高)大 x 倍,而实际上它们(体积)大 x 倍。
主观的
我跳过了这一类,因为你可能已经得到了我对这张图表的印象。但是检查一下你将如何回答这些问题!
- 这个可视化有意思吗?
- 这个可视化效果比你见过的类似的要好吗?
- 你喜欢可视化的主题吗?
- 可视化是否美观?
- 你了解视觉化吗?
- 你喜欢它吗?
- 你从这种可视化中学到了什么吗?
- 展示的信息有用吗?
- 花在体验可视化上的时间值得吗?
- 你想看看类似的视觉效果吗?
最终单词
每当你认为你做了一个糟糕的图表,记住可能有超过 30,000 人(T42 支持)不敢苟同。
上面的可视化对我来说很可怕,但总的来说并不可怕(也不优秀)。这是关于 VisQual 的最重要的线索:它帮助你评估可视化,并精确地指出错误。然而,它没有给出标记或分数。你不会得到 94/100 或 3/10。即使你可以用正面回答的数量占问题总数的简单分数来计算最终分数,并与他人进行比较,你也不能这样做。
VisQual 不是一个理论上的标记工具,它是一个实用的反馈工具。
说到实用工具…
检查完整的 VisQual 并在线评估您的图表!
想潜得更深吗?检查所有类别和问题,并使用 VisQual online 评估您自己的可视化效果!**
感谢 @michbur 的咨询。