TowardsDataScience-博客中文翻译-2020-一百一十二-
TowardsDataScience 博客中文翻译 2020(一百一十二)
深度神经网络推理时间的正确度量方法
网络延迟是将深层网络部署到生产环境中的一个更重要的方面。大多数现实世界的应用程序需要惊人的快速推理时间,从几毫秒到一秒不等。但是,正确而有意义地测量神经网络的推理时间或延迟的任务需要深刻的理解。即使是经验丰富的程序员也经常会犯一些常见的错误,导致不准确的延迟测量。这些错误的影响有可能引发糟糕的决策和不必要的支出。
在本帖中,我们回顾了正确测量延迟时间应该解决的一些主要问题。我们回顾了使 GPU 执行独一无二的主要过程,包括异步执行和 GPU 预热。然后,我们共享代码样本,以便在 GPU 上正确测量时间。最后,我们回顾了在 GPU 上量化推理时间时人们会犯的一些常见错误。
异步执行
我们从讨论 GPU 执行机制开始。在多线程或多设备编程中,两个独立的代码块可以并行执行;这意味着第二个块可以在第一个块完成之前执行。这个过程被称为异步执行。在深度学习环境中,我们经常使用这种执行方式,因为 GPU 操作在默认情况下是异步的。更具体地说,当使用 GPU 调用函数时,操作被排队到特定设备,但不一定到其他设备。这允许我们在 CPU 或另一个 GPU 上并行执行计算。
图一。异步执行。左:同步流程,流程 A 等待流程 B 的响应后才能继续工作。右图:异步进程 A 继续工作,不等待进程 B 结束。
异步执行为深度学习提供了巨大的优势,例如能够大幅减少运行时间。例如,在推断多个批次时,第二批次可以在 CPU 上进行预处理,而第一批次通过网络在 GPU 上进行前馈。显然,在推理时尽可能使用异步是有益的。
异步执行的效果对用户来说是不可见的;但是,当谈到时间测量时,它可能是许多令人头痛的原因。当您使用 Python 中的“时间”库计算时间时,测量是在 CPU 设备上执行的。由于 GPU 的异步特性,停止计时的代码行将在 GPU 进程完成之前执行。因此,计时将会不准确或与实际推断时间无关。请记住,我们希望使用异步,在这篇文章的后面,我们将解释如何在异步过程中正确地测量时间。
GPU 预热
现代 GPU 设备可以存在于几种不同的电源状态之一。当 GPU 未被用于任何目的并且持续模式(即,保持 GPU 开启)未被启用时,GPU 将自动将其功率状态降低到非常低的水平,有时甚至完全关闭。在低功耗状态下,GPU 会关闭不同的硬件,包括内存子系统、内部子系统,甚至计算核心和高速缓存。
任何试图与 GPU 交互的程序的调用将导致驱动程序加载和/或初始化 GPU。这种驱动程序负载行为值得注意。由于纠错码的清理行为,触发 GPU 初始化的应用程序可能会导致长达 3 秒的延迟。例如,如果我们测量一个网络的时间需要 10 毫秒,运行超过 1000 个例子可能会导致我们的大部分运行时间浪费在初始化 GPU 上。自然,我们不想衡量这样的副作用,因为时机不准确。它也不反映生产环境,通常 GPU 已经初始化或以持久模式工作。
由于我们希望尽可能启用 GPU 节能模式,因此让我们看看如何在测量时间的同时克服 GPU 的初始化问题。
测量推理时间的正确方法
下面的 PyTorch 代码片段展示了如何正确测量时间。这里我们使用 Efficient-net-b0,但是您可以使用任何其他网络。在代码中,我们处理上面描述的两个警告。在我们进行任何时间测量之前,我们通过网络运行一些虚拟示例来进行“GPU 预热”这将自动初始化 GPU,并防止它在我们测量时间时进入省电模式。接下来,我们使用 tr.cuda.event 在 GPU 上测量时间。这里使用 torch.cuda.synchronize()很关键。这行代码执行主机和设备(即 GPU 和 CPU)之间的同步,因此时间记录仅在 GPU 上运行的进程完成后进行。这克服了不同步执行的问题。
model = EfficientNet.from_pretrained(‘efficientnet-b0’)
device = torch.device(“cuda”)
model.to(device)
dummy_input = torch.randn(1, 3,224,224,dtype=torch.float).to(device)
starter, ender = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True)
repetitions = 300
timings=np.zeros((repetitions,1))
#GPU-WARM-UP
for _ in range(10):
_ = model(dummy_input)
# MEASURE PERFORMANCE
with torch.no_grad():
for rep in range(repetitions):
starter.record()
_ = model(dummy_input)
ender.record()
# WAIT FOR GPU SYNC
torch.cuda.synchronize()
curr_time = starter.elapsed_time(ender)
timings[rep] = curr_timemean_syn = np.sum(timings) / repetitions
std_syn = np.std(timings)
print(mean_syn)
测量时间时的常见错误
当我们测量网络的延迟时,我们的目标是只测量网络的前馈,不多也不少。通常,即使是专家,也会在测量中犯一些常见的错误。以下是其中的一些,以及它们的后果:
1.在主机和设备之间传输数据。这个帖子的观点只是衡量一个神经网络的推理时间。在这种观点下,最常见的错误之一是在进行时间测量时,CPU 和 GPU 之间的数据传输。这通常是在 CPU 上创建张量,然后在 GPU 上执行推理时无意中完成的。这种内存分配需要相当长的时间,从而增加了推断的时间。这种误差对测量值的均值和方差的影响如下所示:
图 2 :测量时间时 CPU 和 GPU 之间传输的影响。左:平均值和标准差的正确测量值(bar)。右:每次调用网络时,输入张量在 CPU 和 GPU 之间传递时的均值和标准差。X 轴是计时方法,Y 轴是以毫秒为单位的时间。
2.不使用 GPU 预热。如上所述,GPU 上的第一次运行会提示其初始化。GPU 初始化可能需要 3 秒钟,当时间以毫秒为单位时,这将产生巨大的差异。
3.使用标准 CPU 计时。最常见的错误是在不同步的情况下测量时间。众所周知,即使是经验丰富的程序员也会使用下面这段代码。
s = time.time()
_ = model(dummy_input)
curr_time = (time.time()-s )*1000
这当然完全忽略了前面提到的异步执行,因此输出不正确的时间。该错误对测量值的平均值和方差的影响如下所示:
图 3: 测量时间对 CPU 的影响。左侧:平均值和标准偏差的正确测量值(bar)。右:进程不同步时的均值和标准差。X 轴是计时方法,Y 轴是以毫秒为单位的时间。
4.取一个样本。像计算机科学中的许多过程一样,神经网络的前馈具有(小的)随机成分。运行时间的差异可能很大,尤其是在测量低延迟网络时。为此,有必要对几个示例运行网络,然后对结果进行平均(300 个示例可能是个好数字)。一个常见的错误是使用一个样本,并将其称为运行时。当然,这并不代表真正的运行时间。
测量吞吐量
神经网络的吞吐量被定义为网络在单位时间(例如,一秒)内可以处理的输入实例的最大数量。与延迟不同,延迟涉及单个实例的处理,为了实现最大吞吐量,我们希望并行处理尽可能多的实例。有效的并行性显然依赖于数据、模型和设备。因此,为了正确测量吞吐量,我们执行以下两个步骤:(1)我们估计允许最大并行度的最佳批量大小;(2)给定这个最佳批量,我们测量网络在一秒钟内可以处理的实例数量。
为了找到最佳的批处理大小,一个好的经验法则是对于给定的数据类型达到我们的 GPU 的内存限制。这个大小当然取决于硬件类型和网络的大小。找到最大批量的最快方法是进行二分搜索法。当时间不成问题时,简单的顺序搜索就足够了。为此,我们使用 for 循环将批处理大小增加 1,直到实现运行时错误,这确定了 GPU 可以处理的最大批处理大小,用于我们的神经网络模型及其处理的输入数据。
找到最佳批量后,我们计算实际吞吐量。为此,我们希望处理多个批次(100 个批次就足够了),然后使用以下公式:
(批次数量 X 批次大小)/(以秒为单位的总时间)。
这个公式给出了我们的网络在一秒钟内可以处理的例子的数量。下面的代码提供了执行上述计算的简单方法(给定最佳批量):
model = EfficientNet.from_pretrained(‘efficientnet-b0’)
device = torch.device(“cuda”)
model.to(device)
dummy_input = torch.randn(optimal_batch_size, 3,224,224, dtype=torch.float).to(device)repetitions=100
total_time = 0
with torch.no_grad():
for rep in range(repetitions):
starter, ender = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True)
starter.record()
_ = model(dummy_input)
ender.record()
torch.cuda.synchronize()
curr_time = starter.elapsed_time(ender)/1000
total_time += curr_time
Throughput = (repetitions*optimal_batch_size)/total_time
print(‘Final Throughput:’,Throughput)
结论
精确测量神经网络的推理时间并不像听起来那么简单。我们详细介绍了深度学习实践者应该注意的几个问题,比如异步执行和 GPU 省电模式。这里展示的 PyTorch 代码演示了如何正确地测量神经网络中的时序,尽管有前面提到的警告。最后,我们提到了一些导致人们错误测量时间的常见错误。在未来的帖子中,我们将更深入地探讨这个主题,并解释现有的深度学习分析器,这些分析器使我们能够实现更准确的网络时间测量。如果您对如何在不影响准确性的情况下减少网络延迟感兴趣,我们邀请您阅读 Deci 白皮书中有关该主题的更多信息。
最初发布于https://deci . ai/the-correct-way-to-measure-inference-time-of-deep-neural-networks/
职业拳击运动员臂长与腿长关系的分析
R 中的数据分析演练
我最近发表了一篇关于综合格斗(MMA)拳手的臂长和格斗成功的论文。我发现臂长更长的拳手在战斗中的优势非常小,也就是说,他们赢的更多。我遇到的一个问题是,我不能排除腿长是影响因素的假设,因为综合格斗运动员的腿长数据不是常规收集的。我们认为手臂更长的拳手也有更长的腿,这大概也是一个优势。我找不到任何关于拳手手臂和腿长之间相互关系的数据,所以我就把它留在那里。
我最近发现了一个叫做的 MMA 联盟,职业拳手联盟。它有大约 78 名战士的臂展和腿长数据。我想看看 MMA 拳手手臂和腿长之间的相关性可能会很有趣。这不是一个大样本,所以做任何比相关性更奇特的事情都不太可能提供信息(我的论文有大约 1600 架战斗机!).我们预计手臂和腿的长度之间有很大的相关性,所以 78 架战斗机很可能足够好了。例如,一个使用自由软件的简单功效分析 Gpower 告诉我们,要有 99%的机会检测到|0.6|或更大的相关性(如果存在的话)只需要 35 个数据点,如果你像我们一样有一个单尾假设,则需要 30 个数据点。78 架战斗机进行 1-尾测试,我们有 99%的能力检测到低至|0.41|的相关性。
我手动浏览了所有战斗机页面,并将臂展和腿长数据写入 Excel。数据可以在我的臂展文章的开放科学基金会页面上找到。我做了一个简单的分析,心想见鬼,为什么不把它做成一个 R 教程给感兴趣的人呢!
首先,我们从我的 OSF 目录下载数据,并读入 R:
download.file(‘[https://osf.io/4d2pv/download','arm_leg_PFL.csv'](https://osf.io/4d2pv/download','arm_leg_PFL.csv'))
data= read.csv(‘arm_leg_PFL.csv’)
首先让我们制作二维直方图,看看它们是如何分布的,它们是如何变化的(记住你需要先安装这些软件包!).我们使用 GGplot2 包,因为它给出了漂亮的图形,使用 gridExtra 包,因为它允许我们同时呈现多个图形。
library(ggplot2)
library(gridExtra)plot1 = ggplot(data, aes(x = armspan))+
geom_histogram(binwidth = 1, fill = ‘darkolivegreen’)+
ggtitle(‘Histogram of fighter armspans (inches)’)plot2 = ggplot(data, aes(x = leg_length)) +
geom_histogram(binwidth = 1, fill = ’navy’)+
ggtitle(‘Histogram of fighter leg lengths (inches)’)grid.arrange(plot1, plot2, nrow=1)
作者提供的图片
变量有点偏斜,不像我们希望的那样呈正态分布,或者在一般人群样本中预期的那样(身体比例趋于正态分布)。当数据呈正态分布时,许多统计方法效果最佳。也就是说,这两个变量似乎都没有任何可能给分析带来问题的极值,尽管有些野兽有 47 英寸的腿!
这两种测量方法的尺度差异很大,可能是因为臂展包括双臂的长度和胸宽(双臂张开时中指指尖之间的距离),而腿长可能是一条腿从髋骨到脚的距离。inseam 测量的评级似乎有点高,因为大多数人的测量值为 36+,这对于 6 英尺(1.83 米)的人来说是一个体面的腿长,而这些战斗机中的许多都比这短得多。但是谁知道呢。
现在我们让他们互相争斗。Geom_point 添加数据点,geom_smooth 添加趋势线。Method = 'lm '表示我们想要一条直线,但是还有其他选择。
ggplot(data, aes(x = leg_length, y = armspan))+
geom_point(colour = ‘slateblue’)+
geom_smooth(method=’lm’)+
ggtitle(‘Scatter plot of fighter leg length vs armspan’)+
theme(plot.title = element_text(hjust = 0.5))+
xlab(‘Leg length (inches)’)+
ylab(‘Armspan (inches)’)
代码中的“主题”部分只是以标题为中心(审美偏好)
作者提供的图片
他们看起来有很好的相关性。但是科学不仅仅是图表!让我们更正式地测试它。我们同时使用皮尔逊相关性和斯皮尔曼相关性,因为前者更有效,后者对异常值更稳健。如果它们相差很大,这可能表明异常值正在干扰我们的分析(尽管从图表来看,这不太可能)。
cor.test(data$armspan, data$leg_length, method = ’pearson’, alternative = 'greater')
cor.test(data$armspan, data$leg_length, method = ’spearman’, alternative = 'greater')
注意,如果你省略了“方法”参数,R 将只做一个皮尔逊参数。“替代=更大”意味着我们有一个 1 尾假设,即它们是正相关的。
相关性差别不大,所以离群值不会真的把事情弄糟。皮尔逊相关系数为+0.47,斯皮尔曼相关系数为+0.48。两者 P 值均< 0.001,高度显著。鉴于我们的样本量肯定大到足以检测这些相关性,极低的 p 值并不令人惊讶。
有趣的是 r = +0.47 比我预测的要低一点!对于上下文,臂展和身高之间的相关性大约为 r = 0.8。这可能有一些原因,例如测量误差,特别是如果战士或他们的团队进行了测量并向联盟报告。这将引入噪声,降低任何相关的幅度。臂展也包括胸宽,而腿部尺寸似乎反映了单腿的尺寸。如果我们有手臂的长度,那可能会显示出与腿的长度有更大的相关性。但遗憾的是,在现实世界中,你很少有完美的数据,尤其是当你从互联网上搜集数据时。
所以,臂展之间的相关性比预期的要小,但仍然相当大。在更大的数据集中测试这一点会很棒,所以我们可以看看腿的长度对获胜机会的影响,如果有人知道这种数据,请告诉我!
机器学习基础设施中“计算债务”的成本
如何最大化您的 ML 服务器的利用率和可伸缩性
机器学习和深度学习很贵,这不是新闻。虽然将人工智能融入组织的商业价值非常高,但它通常无法抵消将这些模型应用到业务中所需的计算成本。机器学习和深度学习是非常计算密集型的,有人认为,除非云或内部计算成本降低,否则人工智能创新将得不偿失,尽管它具有前所未有的商业价值。
在《连线》杂志的一篇文章中,麻省理工学院的研究科学家和《深度学习的计算极限》的作者 Neil Thompson 提到,从谷歌到脸书的许多组织已经建立了影响力大、节省成本的模型,但由于计算成本使模型无利可图,这些模型未被使用。汤普森表示,在最近的一些会谈和论文中,从事特别大型和尖端人工智能项目的研究人员开始抱怨,他们无法测试多个算法设计,或者重新进行一项实验,因为成本太高。
组织需要计算效率更高的方法来推进创新,并提高人工智能工作的投资回报率。然而,高计算成本和对更高效计算的关注并不应该受到所有的指责。事实上,GPU 加速的基础设施和其他云提供商的重大进步,以前所未有的速度大幅提高了训练最复杂的人工智能网络的能力。2020 年 5 月, DeepCube 发布了其基于软件的推理加速器,可以大幅提高任何现有硬件上的深度学习性能。换句话说,正在开发计算解决方案,以满足机器学习和深度学习不断增长的需求。人工智能创新的无声杀手是现有计算的未充分利用,以及“计算债务”不断增加的成本。
什么是“计算债务”?
人工智能领导者可能会惊讶地发现,阻碍机器学习投资回报率的主要因素之一是 GPU、CPU 和内存资源的利用不足。公司在计算上投资了数百万美元,这些计算有可能大幅加速人工智能工作负载并提高性能,但最终只利用了其中的一小部分,有时低至这些强大资源的 20%。计算分配和实际利用率之间的差距令人震惊,可能会让公司付出比他们意识到的更多的代价。计算、分配和利用率之间的差距我们称之为“计算债务”。指的是分配和容量之间的“浪费”。
在下图中,您可以看到绿色表示平均利用率,黄色表示某一时间的分配情况。当一个工作负载运行时,它通常只利用 GPU 的一部分,而另一部分则被其他潜在工作负载阻止。灰色区域是容量,即现有的可用计算能力,无论是 GPU、CPU 还是内存。灰色区域是所有闲置和未充分利用的计算。
资料来源:cnvrg.io
什么导致了“计算债务”?
机器学习和深度学习是计算密集型的,管理起来很复杂,这使得这种计算债务很难减少。人工智能基础设施团队面临的最大挑战之一是理解如何提高利用率,并以最大化消耗的方式管理资源,以及提高机器学习项目的投资回报率。“计算债务”的一些主要原因是:
- 基础设施团队缺乏人工智能项目可见性
人工智能项目的基础设施成本每年增长 2 倍,然而 IT 团队缺乏工具来管理、优化和预算人工智能资源,无论是在本地还是在云中。大多数 IT/DevOps 主管缺乏对特定时间 GPU/CPU 和内存的利用率、分配和容量的了解。这使得控制消费和减少低效率成为不可能。 - 不断增长的“计算债务” 随着 AI 计算需求变得更加复杂,计算分配和实际利用率之间的差距越来越大。平均而言,组织可能只消耗其总资源的 30%左右。这使得近 70%的计算处于闲置状态,浪费了公司数千甚至数百万美元。
- 无法识别效率低下的工作 基础架构团队无法轻松识别一直未充分利用 GPU/CPU 的工作负载。如果没有收集到的历史工作负载数据,就无法分析和识别运行效率低下的工作负载。由于缺乏可见性,很难提高利用率,也很难控制工作负载的优先级。
- 生产力中断
未充分利用的 GPU 被阻止用于其他工作,增加了数据科学家完成项目的等待时间。这导致更多的时间浪费在等待 GPU 的可用性上,此外还浪费了资源。同时,还有其他闲置的资源可以用于其他工作。 - 缺乏标准化和统一性
通常,团队无法将一项工作与其利用率相关联。没有标准的可视化工具允许您查看某个时间点的作业分配、利用率和容量。这使得识别低效作业和优先处理浪费的工作负载变得困难。机器学习已经达到成熟阶段,人工智能基础设施战略是必要的,以便增长。 - 无法控制优化策略 虽然一些团队可能能够识别效率低下的问题,并为优化的基础架构策略制定计划,但几乎没有工具来执行这些策略。IT/DevOps 团队需要控制人工智能工作负载,以优化资源管理。如果无法确定作业优先级、配置计算模板以及监控工作负载分配和利用率,就无法实现实质性的改进。
减少“计算债务”的策略
这个问题没有明确的解决方案,但是有一些方法可以提高资源管理的效率。以下是一些可以提高计算资源利用率的策略。
- 投资最先进的 GPU 加速人工智能基础设施 GPU 加速技术已经取得了长足的进步。硬件和软件深度学习加速解决方案已经出现,可以提供前所未有的性能。研究 GPU 加速的最新可用解决方案,以采用真正现代的人工智能基础设施。
- 采用混合云基础架构 结合公共云、私有云和内部资源,在运行人工智能工作负载方面提供敏捷性和灵活性。由于人工智能工作负载之间的工作负载类型差异很大,因此构建混合云基础架构的组织能够更灵活地分配资源和定制规模。您可以通过公共云降低资本支出,并提供高计算需求时期所需的可扩展性。在具有严格安全要求的组织中,添加私有云是必要的,并且随着时间的推移可以降低运营支出。混合云可帮助您获得改善资源预算所需的控制力和灵活性。
- 利用 估算 GPU/CPU 内存消耗的工具根据微软研究中心对微软 4960 个失败的 DL 作业的研究,8.8%的作业失败是由 GPU 内存耗尽引起的,这在所有深度学习特定故障中占最大类别。已经开发了许多评估工具来帮助规划 GPU 内存消耗,以减少这些故障。此外,如果您能够收集利用率数据,您可以使用这些历史数据来更好地预测每个季度的 GPU/CPU 和内存需求。
- Scale MLOps 介绍一种简化您的 ML 工作流程并使科学和工程角色之间的转换标准化的方法。由于 IT 和 DevOps 负责部署和管理工作负载,因此在运行不同的作业时拥有清晰的沟通渠道非常重要。适当的调度工具和策略化资源模板也可以改善人工智能工作负载的资源管理。
- 最大限度地提高利用率,减少“计算债务” 为了提高利用率,有必要将计算债务作为基础架构团队和数据科学团队的 KPI。设法减少计算负担并提高利用率的组织将在人工智能竞赛中茁壮成长。
结论
很少有解决方案能够最大限度地提高基础架构团队对 GPU/CPU 和内存消耗的可见性,从而提高利用率。虽然业界正在快速构建更高效的硬件和软件来解决计算债务的威胁,但我们还有很长的路要走。事实是,大多数组织都坐拥数百万美元的未充分利用的计算。通过使用您所拥有的,并改善资源管理,组织将实现其人工智能基础设施的大规模可扩展性。通过在你的现代人工智能基础设施中采用这些策略,你会发现计算的充分利用是可以实现的。专注于基础设施优化的公司将看到其人工智能工作的投资回报率增加,并在竞争中获得竞争优势。
数据质量差的代价
坏数据让数据科学家更努力,而不是更聪明!
令人惊讶的是,如今我们大多数人都明白,当谈论成为市场领导者时,人工智能是必由之路,不管你进入的是哪个垂直领域。但是为了成功地开发和采用人工智能解决方案,有一条路要走,而且这条路并不容易!数据是决定人工智能项目是否成功的最重要的关键因素之一(除了所有围绕 ML 解决方案的技术深度之外),但是我们是否考虑到我们需要高质量的数据?
话虽如此,我有两个问题:
什么时候可以说“我有足够的数据”?
到底什么是优质数据?
让我们深入这些问题吧!🚀
够了够了!
这是我猜想每个人,包括数据科学家都想知道的问题!但是虽然听起来很简单,其实不然。“越多越好”并不完全理想,毕竟,您可以拥有几十年的数据,但如果您一直在没有真正目的的情况下收集这些数据,那么这些数据很可能无法回答您的企业所面临的所有问题!
实际上,有许多方面会影响所需的数据量,从要探索的用例到问题的复杂性,甚至是所选择的算法。
所以没有神奇的数字,但是假设有足够甚至大量的数据总是很危险的!
💎数据的“精华”
完美的数据是不存在的说到从现实生活系统中收集的记录!不要假设这一点,也不要指望数据科学团队同意你的假设,你可能会错🌝—但我们可以在将它输入模型之前,尽可能地接近它。
但在此之前,我们先来定义一下什么是高质量的数据。数据质量可以定义为基于准确性、完整性、一致性、可靠性等因素的数据度量,尤其是是否是最新的。
那么这是否意味着相同的数据对于不同的用例将具有相同的质量呢?
不,尽管如此,定义一个独立于用例的基础质量指标是可能的,并且会给我们一个关于数据需要多少工作的很好的想法。
而数据质量和机器学习有什么联系?
由于其本质,机器学习模型对数据的质量非常敏感,嗯,你可能已经听说过这个说法“垃圾进垃圾出”。由于需要大量的数据,即使训练数据中最小的误差也会导致输出中的大规模误差。我完全推荐你看一下这篇关于“高质量数据集对于开发机器学习模型至关重要”的文章。
对于那些希望开始投资基于人工智能的解决方案的人来说,数据质量是必不可少的。您是否已经有了解决数据质量问题的策略,或者您仍然认为这些问题不存在?
💰你愿意花多少钱?
首先,从生产率的角度来看,形势似乎很黯淡。您是否知道您的数据科学家花费 80%的时间寻找、清理和尝试组织数据,只留下 20%的时间用于开发和分析 ML 解决方案?专业人员在可以部分自动化的工作上浪费了大量昂贵的时间。让我在这里列出一个价格标签,在美国,一名数据科学家的平均工资大约是 12 万美元,而你只需要一个人就可以做很少的事情,甚至什么也做不了。)。不要忘记,数据科学工作是高度合格的,除了乏味之外,执行数据预处理可能会导致沮丧和数据团队中的大量人员流失。
另一方面,使用数据质量差的数据也会带来很多直接的财务负面影响。
- 首先,存储和保存坏数据既耗时又昂贵。
- 第二,据 Gartner 称,“数据质量差对组织的平均财务影响估计为每年 970 万美元。”最近 IBM 还发现仅在美国,由于数据质量差,企业每年损失 3.1 万亿美元。不良数据和使用这些数据的不良结果会导致最终用户和客户失去信心。也就是说,与不良数据相关的客户流失是一个现实。
- 最后,但不是最不重要的,这可能令人震惊— 数据不准确和质量差正在抑制人工智能项目。很多时候,人工智能项目开始时并不知道是否有足够的数据,或者现有的数据是否适合用例。有很多假设甚至没有研究数据,这导致了对一个从一开始就注定失败的项目的大量投资。另一个事实是,大多数公司未能整合外部信息,要么是因为它不可访问(由于隐私),要么只是因为它非常耗时,而这种第三方数据可以告诉你比你想象的更多的关于你自己的业务的信息。
结论
数据质量是 AI 的先决条件,而不是相反!也就是说,如果你的数据质量很差,那么分析和人工智能计划就毫无价值可言。
数据质量差会导致分析和人工智能项目花费的时间比预期的长(大约长 40%),这意味着它们将花费更多的成本,甚至最终无法实现预期的结果(70%的人工智能项目)。随着超过 70%的组织依赖数据来推动其未来的业务决策,数据问题不仅会耗尽资源(财务和人力),还会耗尽提取新的有价值的业务洞察力的能力。因此,如果你想投资人工智能,首先要开发、定义和实施合适的工具,以实现卓越的数据质量策略。
改善了人工智能的数据
YData 为数据科学家提供了一个以数据为中心的开发平台,帮助他们开发高质量的合成数据。
机器学习中公平的反直觉性
审查实现公平的统计框架
过去发生的事情可以作为未来的良好预测,这一想法是机器学习(ML)取得巨大成功背后的核心原则。然而,这种“过去作为前奏”的预测行为的方法正在受到越来越多的审查,因为它在偏见、歧视和公平方面被认为是失败的。例如,苹果信用卡算法给女性的信用额度比男性少;指控一个广泛使用的评估再犯风险的软件是歧视黑人被告。这些报道不仅占据了新闻头条,还激怒了我们与生俱来的公平感。
在刑事司法中,关于现有的反歧视法律是否足以监督预测算法,存在持续的争论。此外,有一个新兴的研究团体正在研究我们如何在这些法律下维护预测算法的公平性(例如 Barocas & Selbst , Huq )。正如最近针对系统性歧视的骚乱和抗议所表明的那样,做错的后果是严重的。随着我们越来越多的生活变得自动化,我们迫切需要加快努力,让这项技术为整个社会所接受。
在这篇文章中,我将回顾一个关于如何给 ML 带来公平的想法。乍一看,这个想法似乎有悖常理,但正如几篇文章所阐明的,它有坚实的统计和法律基础。
这篇文章的目标读者是对 ML 有基本了解,并且对我们如何在 ML 中实现公平性感兴趣的人。
什么是公平?
公平是一种社会理想。正如一位学者所说,
只要人们同意,公平就是人们所说的一切。
在一个自由的社会里,这种理想既有争议又不断发展。因此,在马丁·路德·金的文献中,我们对公平有如此多的定义也就不足为奇了(例如&维尔马【鲁宾】,纳拉扬)。
尽管缺乏关于公平的明确协议,但美国有完善的法律保护个人的基本权利,尽管他们之间存在差异。最值得注意的是,种族、性别和宗教等差异代表了一组“受保护的群体”,使个人能够得到“公平”的对待,特别是在就业领域(1964 年《民权法案》第七章)和刑事司法领域(第十四修正案的平等保护条款)。
实现公平的当前方法
由于这些法律和过去歧视的历史,使 ML 和一般预测算法公平的主流方法是消除使用来自受保护群体的数据。杨和 Dobbie 编制了一份刑事司法系统中最常用的八种商业工具的清单,并发现所有这些工具都没有将种族(一个受保护的群体)作为输入。
然而,消除作为输入的保护基团是不够的。正如许多学者指出的,我们仍然只剩下相关变量,这相当于使用受保护变量。例如,邮政编码可以代表种族。然而,对于这些是否也应排除在外,却没有一致意见。在同一个商业可用工具列表中,Yang 和 Dobbie 发现只有八分之三的工具不使用相关变量。换句话说,大部分最常用的预测算法,5/8 (62.5%)可以被认为违反了保护具有受保护属性的个人的既定法律。这些都是潜在的诉讼等待发生!
当前的方法可以总结如下。
基准(包括所有变量):
常见(不包括受保护组):
限制性(排除保护组和相关变量):
算法制定者的困惑是,根据变量与受保护群体的相关性进一步消除变量,最终将使算法变得几乎无用。例如,在 Yang 和 Dobbie 的研究中,他们发现他们的所有输入变量都与受保护变量相关。因此,遵循主流的消除受保护属性的方法的精神将会剥夺 ML 算法的任何输入!
我们的问题是:
我们如何将公平引入 ML,同时保持其效用?
实现公平的统计框架
Pope 和 Sydnor 引入了一个简单的统计框架来消除受保护变量及其替代变量的影响。杨和多比在审前预测中使用并进一步检验了这一框架。
它是这样工作的:假设我们正在做一个预测。例如,被告在受审前再次犯罪的可能性。根据这一预测,我们可以决定是否应该在审判前释放被告。
在这个框架中,我们用三种变量来表示被告的特征:
- Protected (Xp):代表受保护组的变量。例如种族、性别、民族血统、宗教。
- 相关(Xc):与受保护变量相关的变量。例如邮政编码或教育水平,这可以代表种族。
- 不相关(Xu):代表与受保护群体及其代理人不相关的数据的变量。
为简单起见,作者假设使用线性回归(普通最小二乘法)的预测模型:
换句话说,预测等于常数(β-0)加上无保护变量、相关变量、受保护变量及其权重系数(β-1、β-2、β-3)之和,再加上误差项(E)。作者还讨论了如何在提出的框架下将该模型扩展到更复杂的非线性模型。
在此框架下进行预测的方法包括 2 个步骤:
步骤 1:训练预测模型并获得系数估计值。即上式中的β-0、β-1、β-2 和β-3。
第二步:使用第一步的系数估计值和受保护变量的平均值进行预测。
这就是全部了!这种方法不仅看似简单,而且是反直觉的,因为我们使用受保护的变量及其代理作为算法的一部分来确保公平性!
为什么会这样?
让我们从第二步开始,因为这一步包含了主要的变化,实际上非常直观。
除了使用估计系数之外,这一步与第一步的唯一区别是,我们使用数据的平均值,而不是使用具有受保护特性的数据。
更准确地说,我们使用的是受保护群体的平均向量。这意味着仅在受保护特征方面不同的两个个体将不会收到不同的预测。例如,如果种族是一个受保护的变量,那么模型将不会知道个人的种族概况。据说它对受保护变量的影响“视而不见”。这正是我们想要从一个公平的 ML 算法中得到的。
但是相关项呢?也就是说,
这难道不包括受保护变量的代理效应吗?答案是否定的,因为第一步。波普和西德诺是这样解释的:
首先,让我们看看对普遍接受的方法的估计:
㈠
即一个常数与不相关和相关变量及其相关系数之和;因为包含了相关变量,我们知道它包含了代理效应。
现在将其与基准方程的估计值进行比较:
㈡
假设β-3 大于零,我们看到γ-2 不可能等于β-2。
这是因为在(ii)中,我们用受保护变量进行估计,而在(I)中,我们不使用受保护变量进行估计。我们的直觉告诉我们,系数γ-2 携带着代理的估计能力。换句话说,γ-2 携带了一个术语,允许 Xc 与 Xp 相关联。
让我们进一步打开包装。由于 Xc 与 Xp 相关,我们可以假设:
㈢
使用经济学文献中的标准省略变量偏差公式,我们可以用(iii)代替基准方程:
将这与普遍接受的方法(I)相比较,
忽略常数和误差项,我们现在看到γ-2 估计值接近β-2 加上β-3 乘以α-C,其中β-2 是不相关的权重系数(作者称之为正交系数),α-C 是加权相关系数。也就是说,
通过在步骤 1 中包含受保护的变量 Xp,我们实际上使 Xc 的系数独立于 Xp。杨和杜比是这样说的:
“估计该基准模型允许我们获得未被代理效应污染的相关特征的预测权重,这正是因为我们显式地包括了 X_protected。因此,这第一步估计确保我们从包含 X_correlated 中消除所有代理效应”(第 34 页)
因此,我们可以确信β-2 没有被相关物质“污染”。换句话说,它不包含受保护变量的代理效应。
这有多准确?
Pope 和 Sydnor 使用误差平方和作为度量,分析了统计框架的不同公式的预测准确性。结果表明,他们提出的框架是第三准确的,仅次于基准模型和通用模型,但比限制性模型更准确:
- 基准模型
- 通用模型
- 建议模型
- 限制性模型
正如预期的那样,基准模型和通用模型比提议的模型更准确,因为它们包括了受保护变量及其代理的使用。然而,由于这种做法的法律地位脆弱,算法制定者可能需要使用一个更具限制性的模型(前提是他们能够找到可以被认为与其他变量不相关的变量)。提议的模式提供了一种避免诉诸限制性方法的方式。
杨和多比将这些模型应用于纽约市 2008 年至 2013 年间的大型审前案件数据集。他们还煞费苦心地对照审前案件,看被告是否真的出庭。结果是大约 20 万名被告的数据语料库。
他们的发现证实了 Pope 和 Sydnor 的准确性发现。此外,虽然我们确实为了公平而牺牲了准确性,但 Yang 和 Sydnor 表明,不同算法之间的准确性差异非常小。例如,在 50%的释放率下,未出庭率为:
- 基准:8.35
- 普通:8.38
- 建议:8.40
在所检查的数据集下,所提出的模型只会导致 8 个额外的故障出现。
在法律上是否合理?
既然这个框架使用来自受保护群体的数据,它是否有可能违反法律?例如,第十四修正案的平等保护条款在种族方面强加了两项基本保护(见 Huq ⁴):
- 种族分类
- 种族化的意图
那么如果在这个框架下使用种族,是否违反了歧视法?杨和杜比认为没有。尽管该框架使用了保护组,但它这样做是为了实现“种族中立的预测”。
法院对基于“受保护特征”的分类进行“严格审查”(即上述第 1 条)。然而,杨和多比认为,宪法“禁止所有种族分类,除非是作为对特定不法行为的补救措施”。他们认为这个框架
“不应受到严格的审查,因为种族的使用/考虑并不意味着根据某一特定种族群体的成员资格来区别或区别对待个人,而是恰恰相反。”。(第 37 页)
即使它被标记出来,他们认为它也经得起任何法律审查,因为该程序的目的是“为了补救和纠正代理效应和历史偏见而定制的,这些效应和偏见可以‘嵌入’到算法中……”(即上文#2,见第 37 页)
然而,杨和多比承认,“对算法中直接效应和代理效应的潜在统计特性缺乏了解,可能会导致一个天真的观察者得出结论,认为这两个建议都是非法的,因为它们违反了广泛接受的禁止使用或考虑受保护特征的规定。”(第 36 页)我们----反洗钱联盟和相关团体----有责任以法院和广大公众容易理解的方式教育和宣传这一框架。
结论
人们常说人工智能,尤其是 ML,将会深刻地改变世界。然而,我们与这一新生技术建立了什么类型的关系,我们的生活将如何改变,仍有待确定。最近对预测算法的抵制,例如荷兰禁止使用福利欺诈预测工具、美国禁止人脸识别软件以及英国取消 A-levels 成绩预测,显示了我们作为一个自由社会为打造一个所有人都能接受的共生关系所做的努力。
我们不能在不了解我们的过去的情况下跌跌撞撞地走向未来,我们也不应该扼杀那些给我们带来前所未有的机会、让社会变得更好的技术。为了让 ML 走向成熟,我们需要学习、教育,并对这种技术应该具有什么样的理想特征做出明智的决定。
“人只有在你让他看清自己是什么样的时候,才会变得更好。”安东·契诃夫
在这篇文章中,我强调了一个统计框架,旨在为 ML 带来公平性,同时保留算法的有用性。尽管乍一看有些违反直觉,但波普和西德诺尔的框架已经被证明在理论上和法律上都是合理的。与法律上有争议的模型相比,使用该框架创建的模型确实损失了一定程度的准确性;然而,它这样做是为了消除来自受保护变量及其代理的输入的影响。
这项工作也提出了一个重要的问题,即“准确性”在 ML 中意味着什么。例如,准确性是一个简单的算法做出正确预测的数量的问题吗?正如波普和西德诺尔所说,问题变成了:
“是正确预测结果(“平均正确”)更重要,还是正确权衡不同的特征(“在边缘正确”)更重要?”
这样看的话,前面提到的很多算法公平性的激烈争论,本质上可以认为是侧重点的不同。这样的争论在哲学和伦理学中有很长的历史。毫无疑问,只要我们对我们赞同的理想有分歧,这些辩论就可能继续下去。因此,这里强调的工作值得更多关注。它提供了一个实用的解决方案,理论上满足法律的要求,而不会严重损害算法的预测能力。
参考
[1]许明,塞德里克·阿宁,史蒂文·r·石英.权利与善:公平与效率的分配正义和神经编码【https://science.sciencemag.org/content/320/5879/1092(2008 年)
[2] Crystal Yang & Will Dobbie,算法下的平等保护:一个新的统计和法律框架,可得 3462379 (2019)
[3] Devin G. Pope 和 Justin R. Sydnor,在统计特征模型中执行反歧视政策,3 AEJ:政策 206 (2011 年)
[4] Huq,Z,阿齐兹。算法刑事司法中的种族公平,《杜克法律杂志》,第 68 卷, (2019)
感谢马克·大卫、瑞安·理查兹和罗恩·埃斯佩思对早期草稿的评论。
郡:R 中简单的街道地图
R 中的街道地图
来源:作者,见下文。
我把这篇文章命名为“郡”在西弗吉尼亚州的家乡,人们经常根据他们的管辖权或他们获得权力的地方来称呼政府实体。我们把警察称为“法律”,把公共卫生或税收等各种职能称为“国家”。今天,我在画西弗吉尼亚州费耶特维尔县的地图。甚至当你进城交税的时候,你也会说“去看看县城”这对于家乡的人们来说是正确的,可能对于其他农村地区也是如此。
从我年轻的时候起,我就对地图、地球仪(尤其是有贸易路线的旧地球仪)和一般的地图学着迷。所以,我很高兴最近在 Twitter 上看到了几个融合了数据可视化的地图制作的例子。
我的灵感来自于对斯普林菲尔德、密苏里州康纳·罗斯柴尔德和北卡罗来纳州阿什维尔的美妙演绎。查看他们的更多信息。谢谢你们!!
收集工具
除非您正常使用映射数据和函数,否则下面的库并不常见。这是我的第一张地图,所以我需要安装这些。使用remotes
包需要更少的依赖,因此在安装其他包时通常比devtools
更快。
osmdata
包含用于绘制道路、桥梁和水路的开放街道地图数据;费耶特维尔展示了数据中的一些漏洞——更多内容见下文ggspatial
为我们地图上的北向罗盘提供功能showtext
支持在 ggplot2 图形中使用谷歌字体
#library(remotes)
#remotes::install_github("ropensci/osmdata") #remotes::install_github("paleolimbot/ggspatial") #remotes::install_github("yixuan/showtext")
r 用户对下面常见的疑点都很熟悉,尤其是tidyverse
。特别是,我使用ggmap
包来绘制空间数据所需的形状文件(Kahle 和 Wickham 2013)。
library(tidyverse)
library(osmdata)
library(showtext)
library(ggmap)
library(ggExtra)
library(ggspatial)
library(showtext)
一旦加载了osmdata
包,你可以查看下面给定标签的可用特性。桥标签上的注释:它将返回“是”。这是令人困惑的,直到我看了数据,因为似乎没有桥梁类型的区别-在这种情况下没有害处。
位置,位置,位置
为了绘制费耶特维尔的街道地图,我需要知道它的地理位置。下面的代码将返回定义费耶特维尔地区的两个纬度和两个经度。这些坐标构成了下图的基础。
fa_wv <- getbb("Fayetteville West Virginia")
fa_wv
摄取 OSM 数据
接下来,我从定义大、中、小街的开放街道地图包中提取实际的街道数据(取自上面的帖子)。除了街道,费耶特维尔还有两个举世闻名的特色——新河及其世界级的白水和新河峡谷桥(西半球最长的拱桥,以前是世界上最长的)。你可以在我上面的“关于”页面从不同的角度看到它。我也从 OSM 的数据中获取了这些数据。这段代码摘自 Connor 和 Josh 的优秀示例。
下面的代码提供了数据视图。滚动查看地图上值得高亮显示的其他街道或特征也很有用。
View(big_streets[["osm_lines"]])
View(med_streets[["osm_lines"]])
View(small_streets[["osm_lines"]])
View(bridge[["osm_lines"]])
View(river[["osm_lines"]])
定义要在ggplot2
中绘制的特征集很有用。下面的代码提取了用于绘制给定位置的各个街道的数据。记住,我们从上面的费耶特维尔拉街道。
us_19 <- big_streets[["osm_lines"]] %>%
filter(ref == "US 19")
wv_16 <- med_streets[["osm_lines"]] %>%
filter(ref == "WV 16")
fayette_station <- small_streets[["osm_lines"]] %>%
filter(name =="Fayette Station Road")
west_maple_ave <- small_streets[["osm_lines"]] %>%
filter(name == "West Maple Avenue")
maple_ave_west <- small_streets[["osm_lines"]] %>%
filter(name == "Maple Avenue West") maple_lane <- small_streets[["osm_lines"]] %>%
filter(name == "Maple Lane")
north_court_st <- med_streets[["osm_lines"]] %>%
filter(name == "North Court Street") nr_gorge_bridge <- bridge[["osm_lines"]] %>%
filter(name == "New River Gorge Bridge")
new_river <- river[["osm_lines"]] %>%
filter(name == "New River")
字体
我对任何与字体和写作有关的东西都是绝对的极客。showtext
包提供了在ggplot2
图形中使用谷歌字体等功能。我喜欢添加一个字体就像告诉它是哪一个,然后用你的代码命名它一样简单。下面的showtext_auto
函数告诉ggplot2
使用这些字体自动渲染文本。
## Loading Google fonts (https://fonts.google.com/) font_add_google("Libre Baskerville", "baskerville") font_add_google("Playfair Display", "playfair")
showtext_auto()
在地图上标出一些名胜很好。下面的代码为此提供了数据。我从谷歌地图上获得了下面的经度和纬度数据。上面引用的例子使用了rvest
来抓取位置,但是嘿,费耶特维尔并没有那么大!!
凉爽的地方
essential <- tribble( ~place, ~lon, ~lat,
"Bridge Brew Works", 81.11368, 38.01651,
"Court House", -81.103755, 38.053422,
"Pies & Pints", -81.105514, 38.050783,
"Wood Iron Eatery", -81.102757, 38.053110 )
就这些说几句。虽然下面没有标出,但桥酿酒厂很容易酿造出本州最好的啤酒。特别是贮藏啤酒,令人印象深刻(由于发酵和贮藏对温度的严格要求,贮藏啤酒通常比麦芽啤酒更难酿造,但我离题了)。法耶特法院是一座历史建筑,拥有所有的盛况和魅力,是真正的县城——所有重要的业务都在那里进行。
T4 有最好的披萨和啤酒。它供应前面提到的 Bridge Brew Works 啤酒,以及来自 Hawk Knob 苹果酒& Mead 的优质苹果酒。我强烈推荐鸡翅。最后,Sheri 和我爱吃早午餐,县城最好的地方是木铁饮食店。我在北美的咖啡圣地——西雅图获得了博士学位。Wood Iron 的咖啡与西雅图的咖啡店不相上下,高度赞扬我是一个咖啡势利者(茶势利者也是,但那是另一个帖子)。你会发现他们在那里出售世界闻名的 J.Q. Dickinson 盐,有普通版本和烟熏版本。非常适合牛排、烧烤或配餐。大教堂咖啡馆有很好的食物,但咖啡还有待改进。如果你在费耶特维尔漂流、爬山或骑自行车,那么你需要去看看这些地方——它们彼此都在步行距离内。我希望当我们都从新冠肺炎瘟疫中走出来的时候,这些地方仍然存在。
剧情,终于!
在我压抑自己被困在俄克拉荷马州的新冠肺炎诱导的隔离状态之前,继续剧情。大多数情况下,下面的图是典型的ggplot2
设置,除了我使用的非典型 geom,geom_sf
从一个形状文件绘制数据,这是映射的必要条件。
我对ggspatial
包进行了一次调用,以在地图的简化版上获得想要的北向罗盘。我试图改变“北”箭头的样式和颜色,但无济于事。不知道这是一个错误,还是我,但这就是为什么这个符号只出现在左边的地图上。
solar_light <- ggplot() +
geom_sf(data = big_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .8, alpha = .8) +
geom_sf(data = med_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .6, alpha = .6) +
geom_sf(data = small_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .4, alpha = .3) +
geom_sf(data = fayette_station, inherit.aes = FALSE,
color = "#d75f00", size = .6, alpha = .6) +
geom_sf(data = west_maple_ave, inherit.aes = FALSE,
color = "#d70000", size = .4, alpha = .5) +
geom_sf(data = maple_ave_west, inherit.aes = FALSE,
color = "#d70000", size = .4, alpha = .5) +
geom_sf(data = north_court_st, inherit.aes = FALSE,
color = "#0087ff", size = .6, alpha = .6) +
geom_sf(data = nr_gorge_bridge, inherit.aes = FALSE,
color = "#5f8700", size = .8, alpha = 1) +
geom_sf(data = new_river, inherit.aes = FALSE,
color = "#00afaf", size = 1, alpha = 1) +
ggspatial::annotation_north_arrow(location = "tl",
which_north = "true", height = unit(5, "mm")) +
coord_sf(xlim = c(-81.150, -81.060),
ylim = c(38.010, 38.080), expand = FALSE) + theme_void() +
geom_point(data=essential, aes(x=lon, y=lat), size = 1.5,
alpha=.8, fill="#d75f00", color="#d75f00", pch=19,
inherit.aes = F) +
theme(panel.background = element_rect(fill = "#ffffd7"))
注意,我喜欢的地方的位置是在theme_void
之后用我从谷歌地图复制的经度和纬度编码的。与 Connor 和 Josh 的主要例子不同的是,我使用 Ethan Schoonover 开发的曝光调色板来曝光地图的调色板。我是你的超级粉丝。马克·艾维的日晒备忘单对了解调色板的工作方式大有帮助。下面是日晒黑暗版本的情节代码。除了背景颜色没有什么不同。
solar_dark <- ggplot() +
geom_sf(data = big_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .8, alpha = .8) +
geom_sf(data = med_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .6, alpha = .6) +
geom_sf(data = small_streets$osm_lines, inherit.aes = FALSE,
color = "#585858", size = .4, alpha = .3) +
geom_sf(data = fayette_station, inherit.aes = FALSE,
color = "#d75f00", size = .6, alpha = .6) +
geom_sf(data = west_maple_ave, inherit.aes = FALSE,
color = "#d70000", size = .4, alpha = .5) +
geom_sf(data = maple_ave_west, inherit.aes = FALSE,
color = "#d70000", size = .5, alpha = 1) +
geom_sf(data = north_court_st, inherit.aes = FALSE,
color = "#0087ff", size = .6, alpha = 1) +
geom_sf(data = nr_gorge_bridge, inherit.aes = FALSE,
color = "#5f8700", size = .8, alpha = 1) +
geom_sf(data = new_river, inherit.aes = FALSE,
color = "#00afaf", size = 1, alpha = 1) +
coord_sf(xlim = c(-81.150, -81.060),
ylim = c(38.010, 38.080), expand = FALSE) +
theme_void() +
geom_point(data=essential, aes(x=lon, y=lat), size = 1.5,
alpha=.8, fill="#d75f00", color="#d75f00", pch=19,
inherit.aes = F) +
theme(panel.background = element_rect(fill = "#1c1c1c"))
最后,我想把这些图放在一起。这是我第一次使用patchwork
包,但它真的很好。语法比旧的grid.arrange
函数简单得多,它本身就相当简单。
library(patchwork)
solar_fa <- solar_light + solar_dark solar_fa + plot_annotation(
title = “Fayetteville, WV”,
subtitle = “38.053°N / 81.104°W”) &
theme(plot.title = element_text(size = 50,
family = “baskerville”,
face=”bold”,
hjust=.5),
plot.subtitle = element_text(family = “playfair”,
size = 30,
hjust=.5,
margin=margin(2, 0, 5, 0))) ggsave(file=”fayetteville_str_map.jpg”,
units=”in”,
width = 6,
height=4.5)
patchwork
软件包也使得注释完成的情节变得容易,无论是整体还是小部分。我也终于谈到了字体。我喜欢老式的,甚至是中世纪的字体。谷歌字体提供了“Libre Baskerville”和“Playfair Display ”,分别取自 18 世纪和 19 世纪的本地字体。使用 Playfair 字体,我也可以得到我喜欢的老式数字,尤其是像所有权地图这样的东西。
瓦拉!!
关于 OSM 的数据,我只想说一句。在地图的右上角,你会看到一条直线。那是新河峡大桥。然而,连接它和费耶特维尔的高速公路 US 19 却不在现场。US 19 穿过费耶特维尔向西延伸,出现在图表的最底部,以绿色显示,就像大桥一样。这是一个重大的疏忽,因为 US 19 是从布拉克斯顿公司到贝克利南部的主要公路,连接州际公路 I79 到 I64 和 I77 。它是州际公路系统的一部分,也是美国东部的紧急疏散路线之一。即使数据总体良好,也要小心。
原载于 2020 年 3 月 27 日https://www.samuelworkman.org。
参考
卡尔、大卫和哈德利·韦翰。2013." Ggmap:用 Ggplot2 实现空间可视化."R 轴颈5(1):144–61。https://journal . r-project . org/archive/2013-1/kahle-Wickham . pdf。
新冠肺炎概念漂移,使用悉尼渡轮活动数据
CV-19 创造了消费者行为的突然转变,影响了营销数据和 ML 模型。学习如何识别和解决这些问题。
全球冠状病毒疫情已经并仍在影响着全球大多数行业,以及我们许多人。因此,我们的行为——消费者行为——已经发生了变化,与之相关的营销数据也发生了变化。当生活恢复正常时,希望越快越好🤞,我们会看到消费者行为的重新调整还是一种新型行为的引入?
许多预测模型的一个共同的重要假设是,用于训练模型的数据与生产中输入的数据相似。概念漂移是当我们试图预测的事物的数据发生变化时使用的术语。发生这种情况的原因有很多。例如:
- 欺诈者可能会更改电子邮件的内容以通过垃圾邮件过滤器。
- 一个产品现在在不同的市场有售,新用户有不同的使用习惯。
- 随着时间的推移,由于正常的磨损,测量传感器可能会变得嘈杂或不准确。
- 新促销或广告的新奇效果会逐渐消失。
- CV-19 疫情改变了消费者的行为。
提出问题,CV-19 污染了你的数据吗?或者——考虑到疫情的长度——它带来了一组新的数据来分析吗?无论哪种方式,重要的是认识到将会有概念漂移,引入新的数据挑战并降低预测 ML 模型的准确性。
因此,现在让我们采取一些措施来解决与我们的数据有关的任何问题,以及未来的证据。
首先,这篇文章的作者打个招呼。
嗨,我是维克。我在新加坡工作,是谷歌的一名数据科学家,在那里我致力于提高我们的关键客户和合作伙伴的数据成熟度和能力。此前,我是美国的一名工程师。
嗨,我是德鲁。我是谷歌的客户解决方案工程师,帮助我们的广告客户充分利用他们的网站、应用和数据。
悉尼渡轮之旅
4 月 3 日,谷歌发布了 CV-19 社区移动报告,这是一组汇总的匿名见解,显示了不同地理位置的移动趋势。看看澳大利亚的数据,与标准基线相比,公共交通的流动性趋势下降了-63%。
显然(对我们大多数受这个疫情影响的人来说)!但这很好地说明了行为的转变。请注意与标准基线进行比较的重要性,我们稍后将解释原因。
图片由作者拍摄——悉尼渡口
为了这篇文章,我们来看看德鲁的日常通勤——可以说是世界上最好的交通方式——悉尼轮渡服务。相比之下,维克多坐了 4 次地铁🤷。
opendata.transport.nsw.gov.au 服务提供澳洲新南威尔士州渡轮分接数据(代表个人进入&离开渡轮码头)。假设我们正在构建一个预测活动的模型。
作者制作的图像—随时间变化的渡轮数据图
数据从 2016 年 7 月到 2020 年 3 月,显示出明显的季节性趋势,每年 1 月的活动高峰与悉尼夏季和新年前夕的活动高峰相对应。然后在三月初,世界卫生组织宣布了一个疫情,这反映在二月和三月之间服务下降了 57%(哇,这与谷歌社区移动性报告非常吻合!).
让我们以此为基础建立一个可行的 3 步方法,我们可以遵循它来纠正我们的 ML 模型如何解释数据— 1。识别,2。解决,3。自动化。
第一步。(做好准备)识别正在发生的漂移
我们怎么可能首先知道有问题呢?通常情况下,这是当数据不再符合过去的趋势。这可能会随着时间的推移而缓慢发生,或者就这些运输服务而言,可能会突然发生。
为了准备控制基线,我们可以绘制所有历史(或训练)数据,并根据过去的趋势预测未来的活动。我们在这里使用 ARIMA(自回归综合移动平均)方法完成了这项工作(更多信息,请查看这篇由 Lak Lakshmanan 撰写的关于使用 BigQuery 分析新冠肺炎的有用文章)。
图片由作者制作— ARIMA 轮渡数据预报
绿色虚线代表我们的基线。即 2020 年 1 月之前的实际历史数据,以及 2020 年 1 月之后的预测数据。我们使用的 ARIMA 方法返回预测的置信上限和下限,当实际结果(蓝线)超出这些界限时,很明显可能有问题。尤其是从 2 月到 3 月。
数据随时间漂移有几种方式。是突然的还是渐进的?是永久的还是暂时的?
作者制作的图像——概念漂移模式
- 再次出现。行为变化随后恢复正常,类似于季节性,例如,公路建设在夏季分流交通。
- 循序渐进。缓慢但持久的变化,例如采用拼车和减少对轮渡服务的需求。
- 峰值和衰减。衰减较慢的突然变化;常见于病毒式、短暂的新闻或媒体内容,例如《权力的游戏》大结局。
- 突然转变。行为跳跃,例如完全的旅行限制。
在我们的摆渡例子中(我确信大多数 CV-19 受影响的数据),我们看到了一个突然的变化,并且有希望衰减。然而,鉴于疫情持续的时间长度,加上后疫情时代消费者行为可能出现的新的渐进变化,我们可能会继续看到与基线不同的结果,这需要加以解决。
热衷于多花时间多学习?
用于检测时间序列数据中的结构变化的方法是变化点检测,变化点是数据趋势开始变化的时间段。这可以每周自动进行,为检测未来的问题做好准备。
随着时间的推移,ML 模型的准确性也可能会降低(希望您正在监控这一点)。像可解释人工智能这样的工具为理解正在发生的事情提供了一个很好的视角,即特定(不正确)预测背后的解释是否仍然可信,或者是否存在以前没有的潜在问题?这些参考了 Shapley 值来理解特征的重要性。
第二步。解决数据漂移
我们可以采用许多方法来解决概念漂移,有些方法比其他方法更先进。另外,根据漂移的类型,不同的方法会更相关。
这篇文章的目标是给你留下一个可实现的短期胜利,来应对我们已经看到的 CV-19 的突然变化。有鉴于此,我们将通过数据称重和/或数据开窗来解决漂移问题。
称重数据
称重数据的优势在于,我们可以继续使用我们之前使用的历史训练集,只是现在允许模型识别与最近事件不太相关的旧项目。此外,CV-19 有可能会再次出现(我们希望不会!)在这种情况下,保存和使用历史数据可以确保我们为长期成功做好准备。
为了了解这一点如何应用于轮渡数据,我们可以考虑在引入新航线(F8 凤头鹦鹉岛航线)时纠正总计数活动的突然增加。
作者制作的图像-一段时间内的渡轮数据图
通过对较新的数据给予更大的权重,并随着数据变老而降低权重,根据它们与当前事实的偏离程度来衡量分数。允许模型理解更多的相关事件。实现这一点的最简单的方法是给最近的后漂移事件加权 1,给较早的前漂移事件加权 0。
数据开窗
也就是说,通过在一组固定的窗口上聚合,将数据窗口化到实例中,这有助于消除突然的漂移。此外,如果您热衷于保留历史数据,权重仍然可以应用于实例。你可以阅读更多关于这个项目通量电容器的博文。
在图中有一个固定窗口以设定的间隔移动,以减少新旧行为之间的漂移。
作者制作的图像—说明一个固定的窗口
要了解这如何应用于渡轮数据,让我们使用 6 个月的固定窗口,对每个窗口中的总活动进行平均。如果我们试图使用所有历史数据预测未来的活动,我们的预测将因 2018 年 1 月之前的低活动而有所偏差。使用 6 个月的窗口可以让我们的估计对总活动/流量的跳跃做出更快的反应,并且总体上更准确。
作者制作的图像-一段时间内的渡轮数据图
热衷于多花时间,多学习?
计算权重时,还可以考虑使用指数衰减方法,较小的权重对模型的贡献较小。
为了更进一步,可以使用大量模型的集合,使用旧的和新的数据集进行训练。然后可以应用加权多数算法从一组预测中得出结果。如果我们希望数据“恢复正常”,这可能是有用的。
第三步。自动化再培训
这是不可避免的,我们需要保留我们的模型,因为用户的行为有所不同。当然,我们可以选择手动重新训练我们的模型,但这是一个为成功而设置的好机会,并让它自动发生?
根据我们想要应用的策略,有几个不同的选项。
连续自适应
换句话说,每个新数据点通过固定的滑动窗口或加权方案来更新模型,如步骤 2 中所讨论的。对于固定的滑动窗口,最旧的数据点将被忽略。
在悉尼轮渡的数据中,我们可能只看到最近的一组季节性数据。这是一种更简单的方法,尽管我们仍然需要实验来找到合适的窗口大小或加权方案。
触发适应
当检测到概念漂移时,可以触发模型进行重新训练。例如,这可能是使用一直到最后一个变化点的数据重新构建预测,或者增量调整数据窗口的大小(如果漂移更剧烈,则缩小;如果没有检测到漂移,则扩大)。
在图中注意到窗口在增长,而相关数据仍在累积。然而,在 T = 2 之后,已经积累了足够的不同数据,并且从检测到概念漂移时开始创建新的窗口。
作者制作的图像—说明自适应窗口
热衷于多花时间,多学习?
当检测概念漂移时,考虑一下你所检测的变化的触发阈值应该是多少,以及模型应该如何适应。
当谈到自动化流程时,Google Cloud 中的 Cloud Composer 工具(它部署了 Apache Airflow)是一种基于一组处理数据和重新训练模型的触发器来建立持续集成工作流的强大方法。谷歌云解决方案页面的 CI/CD 下也有一些有用的快速入门和 codelabs。
总结
如你所见,有很多方法可以解决概念漂移。在这篇文章中,我们主要关注 CV-19 疫情引起的突然漂移的解决方案。希望你能从中获得一些快速的成功,以及一些更先进的想法,供你在未来阅读。
感谢阅读。请在评论中反馈并让我们知道你的进展。
Cox 比例风险模型
什洛莫·沙莱夫在 Unsplash 上拍摄的照片
生存数据的回归模型
我之前写过如何计算生存数据的卡普兰-迈耶曲线。作为一个非参数估计量,它在快速查看数据集的生存曲线方面做得很好。然而,它不能让你做的是模拟协变量对存活率的影响。在本文中,我们将重点关注 Cox 比例风险模型,这是生存数据最常用的模型之一。
我们将深入讨论如何计算估计值。这是有价值的,因为我们将会看到,估计值只取决于故障的排序,而不是它们的实际时间。我们还将简要讨论一些特殊于生存分析的因果推断的棘手问题。
生存函数和风险率
我们通常根据如下的存活曲线来考虑存活数据。
随机生成数据的生存曲线
在 x 轴上,我们以天为单位表示时间。在 y 轴上,我们有(一个估计值)人群中“存活”到那个时间的受试者的百分比(技术上,比例)。Survive 可以是比喻的,也可以是字面的。可能是人是否能活到某个年龄,机器是否能在一定时间内不出故障,也可能是某人在失业后是否会失业一段时间。
至关重要的是,生存分析的复杂性在于一些受试者没有观察到他们的“死亡”。在收集数据时,他们可能还活着,机器可能还在运行,或者有人可能还在失业。这种观察被称为“右删截”,处理删截意味着生存分析需要不同的统计工具。
我们用 S 表示幸存函数,它是时间的函数。其输出是在时间 t 存活的受试者的百分比。(再次强调,从技术上讲,它是介于 0 和 1 之间的一个比例,但我会交替使用这两个词)。为了简单起见,我们将做一个技术性的假设,如果我们等待足够长的时间,所有的受试者都会“死亡”
我们将用类似于 i 或 j 的下标来索引主题。整个群体的故障时间将在时间变量 t 上用类似的下标表示。
另一个需要考虑的微妙之处是,我们是将时间视为离散的(比如一周接一周)还是连续的。从哲学上讲,我们只能以离散的增量来度量时间(比如说,精确到秒)。通常情况下,我们的数据只会告诉我们某一年是否有人死亡,或者某一天某台机器是否出现故障。为了使阐述尽可能清晰,我将在离散的和连续的案例之间来回切换。
当我们试图对协变量(如年龄、性别、种族、机器制造商)的影响进行建模时,我们通常会对理解协变量对风险率的影响感兴趣。危险率是在给定时间 t 的故障/死亡/状态转换的瞬时概率,条件是已经存活了那么长时间。我们将把它记为λ(t)。将时间视为离散的:
离散时间的生存函数
其中 f 是在时间 t 失效的总概率密度。我们可以通过在概率密度“函数”中允许 delta 函数来统一离散和连续的情况。因此,对于连续情况,结果λ = f/S 是相同的。
我们来固定一个例子。让我们考虑一个临床试验的背景,在这个临床试验中,一种药物最初导致疾病进入缓解期。当受试者的疾病开始发展时,我们会说药物对受试者“失效”。最后,假设每周测量受试者的疾病状态。那么,如果λ(3) = 0.1,这意味着对于给定的受试者,如果他们在第 3 周之前仍处于缓解状态,则有 10%的可能性,他们的疾病将在第 3 周开始发展。其余的 90%将保持缓解状态。
接下来,总概率密度函数 f 就是 S 对时间的导数。(还是那句话,如果时间是离散的, f 只是一些δ函数的和)。这意味着
风险函数是 S 的对数的导数
这意味着,如果我们知道风险函数,我们可以求解 S 的微分方程:
根据风险函数的生存函数
如果时间是离散的,delta 函数的和的积分就变成了每个离散时间的危险的和。
好了,这总结了我们需要的符号和基本概念。让我们继续讨论模型。
非参数、半参数和全参数模型
正如我前面说过的,我们通常对风险率λ的建模感兴趣。
在非参数模型中,我们对λ的函数形式不做任何假设。卡普兰-迈耶曲线是这种情况下的最大似然估计。不利的一面是,这使得很难模拟协变量的任何影响。这有点像用散点图来理解协变量的影响。不一定像线性回归这样的完全参数模型那样有用。
在完全参数模型中,我们假设λ的精确函数形式。关于全参数模型的讨论本身就是一篇完整的文章,但是值得简单讨论一下。下表显示了三种最常见的全参数模型。每一个都被下一个概括,从 1 到 2 到 3 个参数。危险函数的函数形式显示在中间一栏。风险函数的对数也显示在最后一列。所有参数(ɣ,α,μ)都假定为正,除了在广义威布尔分布中μ可以是 0(复制威布尔分布)。
查看对数可以看出,指数模型假设风险函数是常数。威布尔模型假设,如果α >为 1,则增加;如果α=1,则保持不变;如果α <为 1,则减少。广义威布尔模型以与威布尔模型相同的方式开始(开始时 ln S = 0)。在那之后,一个额外的项μ出现了。
这些模型的问题在于它们对数据做了强有力的假设。在某些情况下,可能有理由相信这些模型非常适合。但是有了这些和其他几个选项,由于模型的错误设定,得出错误结论的风险很大。
这就是为什么 Cox 比例风险,一个半参数模型如此受欢迎。没有对风险函数的形状进行函数假设;相反,函数形式的假设是关于协变量单独的影响。
Cox 比例风险模型
Cox 比例风险模型通常以时间 t、协变量向量 x 和系数向量β的形式给出
Cox 比例风险模型
其中λₒ是时间的任意函数,基线危害。与标准线性回归一样,指数中包含 X 和β的点积。无论协变量的值如何,所有受试者都有相同的基线风险λₒ.此后,根据协变量进行调整。
结果的解释
假设我们已经将 Cox 比例风险模型与我们的数据进行了拟合,其中包括
- 为每个主题指定时间的列
- 指定受试者是否被“观察”(失败,或者,在我们的优选示例中,疾病进展)的栏。值 1 表示受试者的疾病进展。值为 0 意味着在最后一次观察时,疾病没有发展。这项观察被删改了。
- 协变量 x 的列。
拟合之后,我们将得到β的值。例如,为简单起见,假设只有一个协变量。β=0.1 的值意味着协变量增加 1 会导致在任何给定时间疾病进展的概率约为 10%。确切的值实际上是
β=0.1 时危险增加的精确值
对于小的β值,β值本身是危险增加的精确近似值。对于更大的β值,必须计算精确的量。
β=0.1 的另一种表达方式是,随着 x 的增加,x 每增加 1,危险以 10%的率增加。较大的 10.52%来自于(连续)复利,就像复利一样。
此外,β=0 意味着没有影响,β为负意味着随着协变量的增加,风险降低。注意,与标准回归不同,这里没有截距项。取而代之的是截距被吸收到基线危险λₒ中,这也是可以估计的(见下文)。
最后,假设我们已经估计了基线风险函数,我们可以构造幸存者函数。
基线函数被提升到来自协变量的 exp(xʹβ因子的幂。在解释基线生存函数时应该小心,它大致相当于常规线性回归中的截距项。如果协变量已经居中(平均值为 0),那么它代表“平均”受试者的存活函数。
估计 Cox 比例风险模型
20 世纪 70 年代,英国数学家 David Cox 提出了一种无需估计基线风险λₒ.就能估计β的方法同样,基线危害可以在事后估算。如前所述,我们将会看到,重要的是观察到的故障的排序,而不是时间本身。
在开始评估之前,有必要讨论一下领带。因为我们通常只观察离散增量的数据,所以两个故障可能同时发生。例如,两台机器可能在同一周发生故障,而记录只在每周进行一次。这些联系使得对形势的分析变得相当复杂,却没有增加多少洞察力。因此,我将在没有联系的情况下得到估计。
回想一下,我们的数据是由在离散时间观察到的一些故障组成的。让 R(t)表示在时间 t 时“处于危险中”的人群。如果我们研究中的受试者在时间 t 前失败(例如,疾病发展),他们就不“处于危险中”此外,如果我们研究中的受试者在时间 t 之前的某个时间对他们的观察进行了审查,他们也没有“处于危险中”
按照通常的方式,我们希望构建一个似然函数(给定协变量和系数,我们观察到的数据的概率是多少),然后优化它以获得最大似然估计量。
对于我们观察到受试者 j 出现故障的每个离散时间,假设故障出现,则出现故障的概率如下。在 j 时刻,对所有处于危险中的受试者进行求和。
(等式 1)对象 j 而不是另一个对象在时间 j 失败的概率
请注意,基线危险λₒ已经退出!非常方便。为此,我们构建的可能性只是一个部分可能性。也请注意,时间根本没有出现。受试者 j 的术语仅取决于哪些受试者在 j 时刻仍然活着,而这又仅取决于受试者被审查或观察失败的顺序。
当然,部分可能性只是这些项的乘积,我们观察到的每一个失败都有一个(没有截尾观察的项)。
然后,对数部分似然是
(等式 2)部分对数似然函数
使用标准的数值方法进行拟合,例如在 python 包[statsmodels](https://www.statsmodels.org/stable/duration.html)
中,估计的方差-协方差矩阵由 Fisher 信息矩阵的(逆)给出。这里没什么令人兴奋的。
估计基线幸存者函数
既然我们已经估计了系数,我们可以估计生存函数。这与估算卡普兰-迈耶曲线非常相似。
我们假设用 i 索引的项α。在时间 i 处,基线存活者曲线应减少一个分数α,表示在时间I处失败的处于危险中的受试者的比例。换句话说
为了计算α的最大似然估计量,我们考虑来自在时间 i 失败的受试者 i 的似然贡献,以及来自在时间 i. 被审查的受试者的贡献
对于在时间 i,失败的受试者,概率由他们在时间 i 存活的概率减去他们在下一时间 i+1 存活的概率给出。(我们暂时假设时代是有序的)。
(等式 3)来自观察到的故障的可能性贡献
相反,如果他们在时间 i、被审查,贡献就是他们在 i、之后还活着的概率,即他们还没有死。这只是
(等式 4)来自截尾观察的似然贡献
有一个额外的术语来自被观察的受试者(即被观察到失败而不是被审查)。对数似然变成
(等式 5)基线幸存者函数的对数似然
我在跟踪端点(I 对 i+1)方面有点草率,但一切都会好的。
我们观察到失败的科目只有α项。对α-j 求微分,并假设没有联系,我们从左边的总和中只得到 j 时刻活着的受试者的贡献,从右边的项中得到一个贡献。
(等式 6)似然函数关于 j 项的偏导数
将此值设为 0 意味着我们可以使用β的估计值作为几个方程的解来获得α的最大似然估计值,每个方程对应一个观察失败的受试者:
(等式 7)求解α估计的简单等式
扩展和警告
关于 Cox 比例风险模型还有很多要说的,但我会尽量简短,只提几件事。
例如,人们可能想考虑时变回归量,这是可能的。
要记住的另一个关键点是省略变量偏差。在标准线性回归中,与回归变量不相关的省略变量不是大问题。这在生存分析中是不成立的。假设我们的数据中有两个相同大小和取样的亚人群,每个亚人群都有一个恒定的风险率,一个是 0.1,另一个是 0.5。最初,我们会看到一个很高的风险率(平均值只有 0.3)。随着时间的推移,具有高危险率的人群将离开该人群,我们将观察到危险率向 0.1 下降。如果我们忽略了代表这两个群体的变量,我们的基线风险率将会被打乱。
我的目标是写(相对)易懂的数据科学概念的解释,而不回避有时涉及的复杂数学。如果你喜欢这个,你我还有类似风格的解释**困惑度中心极限定理 ,或者 期望最大化 。**
如果你不喜欢这个,多考虑一下 回归 ,奇异值分解,或者* 傅立叶变换 。***
参考
更详细的讨论见卡梅隆和特里文迪
发展型 BERTology 的奇特案例
稀疏性、迁移学习、概括和大脑
这篇文章是为机器学习研究人员和神经科学家写的(将使用这两个领域的一些术语)。虽然这不是一个全面的文献综述,我们将通过一系列主题的经典作品和新成果的选择,试图发展以下论点:
就像表征学习和感知/认知神经生理学之间富有成效的相互作用一样,迁移/持续学习、高效深度学习和发展神经生物学之间也存在类似的协同作用。
希望它能以一种或两种方式激励读者,或者至少在全球疫情期间消除一些无聊。
我们将通过大型语言模型的镜头触及以下主题:
- 过度参数化的深度神经网络如何泛化?
- 迁移学习如何帮助概括?
- 我们如何让深度学习在实践中计算高效?
- 在解决这些问题的过程中,深度学习研究会如何使和受益于对发育和老化大脑的科学研究?
哲学序言
在我们开始之前,谨慎的做法是说几句关于大脑隐喻的话,以澄清作者在这个问题上的立场,因为它经常在辩论中出现。
深度学习和神经科学的融合可以说早在人工神经网络的概念出现时就已经发生了,因为人工神经元抽象了生物神经元的特征行为。然而,截然不同的学习机制和智能功能种类的差异在这两个屹立了几十年的人之间竖起了一道难以逾越的障碍。近年来现代深度学习的成功重新点燃了另一股融合的潮流,结出了新的果实。除了设计受大脑启发的 AI 系统(例如[ 2 ]),深度神经网络最近也被提议作为一个有用的模型系统来理解大脑如何工作(例如[ 3 ])。好处是相互的。学习机制的协调正在取得进展,但在不止一个重要方面,智力差距仍然顽固存在。
现在,对于一个深度学习研究人员或从业者来说,看看今天这个复杂的景观,大脑类比是有益的还是误导的?基于信仰给出答案当然简单,双方都有大量信徒。但是现在,让我们不要凭信念选择立场。相反,让我们完全通过其实际分支来评估其独特上下文中的每个类比:**,它只有在做出实验上可验证/可证伪的预测时才是有用的,而* 对于工程 来说,它只有在生成可以经受坚实基准测试的候选特征时才是有用的。因此,对于我们将在本文其余部分提出的所有大脑类比,无论它们看起来多么合适或牵强,我们都将超越任何先前的原则,努力阐明可以在实践中指导未来科学和工程工作的假设,无论是在这些页面的限制之内还是之外。*
工作类比
当把深度神经网络比作大脑时,我们通常会想到什么?
对大多数人来说,网络结构映射到大脑区域的大体解剖结构(如感觉通路)和它们的相互连接,即连接体,单元映射到神经元或细胞组件,连接权重映射到突触强度。因此,神经生理学执行模型推理的计算。
深度神经网络的学习通常以在训练数据集上优化目标函数的形式,在给定预定义的网络架构的情况下进行。(一个主要的困难在于人工学习算法的生物学合理性,这是我们在本文中没有触及的主题——在这里,尽管机制不同,我们只是接受功能的相似性。)因此,通过优化的数据驱动学习类似于基于经验的神经发展,即培育,而网络架构以及很大程度上的初始化和一些超参数是作为进化的结果而被遗传编程的,即本性。
备注 :需要注意的是,现代的深度网络架构,无论是手工隐式设计的,还是通过神经架构搜索(NAS)显式优化的[7],都是数据驱动优化的结果,产生了归纳偏差——免费的午餐由所有未能在自然选择中幸存的不适合者买单。**
由于数据和计算能力的快速增长,2010 年的十年见证了深度神经网络物种的寒武纪大爆发,在机器学习领域迅速传播。
伯特学
随着现代深度学习的进化在过去两年里产生了一群新物种,情况变得更加复杂。他们在自然语言理解的大陆(NLU),在承载着巨大计算能力的大河肥沃的三角洲上茁壮成长,比如谷歌和微软。这些非凡的生物有一些关键的共性:它们都有一个被称为变压器* [ 8 ]的典型皮质微电路,拥有快速增加的脑容量,创造了历史记录(例如[ 9 , 10 , 11 ),并且经常以其中一个布偶的科学名称命名。但是这些物种对其进化成功至关重要的最突出的共同特征是转移学习的能力。*
这是什么意思?嗯,这些生物有两个阶段的神经发展:一个漫长的,自我监督的幼虫阶段,称为预训练,随后是一个快速的,受监督的成熟阶段,称为微调。在自我监督的预训练过程中,大量未标记文本的语料库被呈现给受试者,受试者通过优化某些目标来自娱自乐,这些目标非常类似于解决给人类孩子的语言测验,例如完成句子,填写缺失的单词,说出句子的逻辑顺序,以及找出语法错误。然后,在微调过程中,经过良好预训练的受试者可以通过监督训练快速学会执行特定的语言理解任务。
transformers (BERT) [ 12 ]的双向编码器表示的出现标志着迁移学习对 NLU 土地的彻底征服。BERT 和它的变体已经在相当大的范围内推进了最先进的技术。他们非凡的成功激起了人们对这些模型内部运作的极大兴趣,创造了对“机器人学”的研究。与神经生物学家不同,BERTologists 将电极插入模型大脑,以记录解释神经代码的活动(即激活和注意模式),对大脑区域(即编码层和注意头)进行有针对性的损伤,以了解它们的功能,并研究早期发展的经验(即训练前的目标)如何有助于成熟的行为(即在 NLU 任务中的良好表现)。
网络压缩
与此同时,在深度学习的世界中,多阶段发展(如迁移学习)发生在不止一个动物王国。特别是,在生产中,人们经常需要将一个训练好的庞大神经网络压缩成一个紧凑的网络,以便有效地部署。
网络压缩的实践源自深度神经网络的一个非常令人困惑的特性:过度参数化不仅有助于泛化,还有助于优化。也就是说,训练一个小网络往往不仅不如训练一个大网络(如果一个人当然有能力这样做的话)[ 14 ],而且不如将一个训练好的大网络压缩到同样小的规模。在实践中,压缩可以通过稀疏化(剪枝)、蒸馏等来实现。
备注: 值得注意的是,对密集网络进行优化再压缩所产生的最佳稀疏网络的现象(见例如【 15 , 16 )很像正在发育的大脑,其中过度产生的连接被逐渐修剪掉【 17
然而,模型压缩中的多阶段开发类型与迁移学习非常不同。迁移学习的两个阶段看到相同的模型针对不同的目标进行优化,而在模型压缩中,原始模型变形为不同的模型,以保持相同目标的最优性。如果说前者类似于获得新技能的成熟,那么后者更像是优雅的衰老,而不会失去已经学到的技能。
学习权重与学习结构:二元性?
当一个网络被压缩时,它的结构经常会发生变化。这可能意味着网络架构(例如在提取的情况下)或者参数稀疏性(例如在修剪的情况下)。这些结构上的改变通常是由启发法或正则化方法强加的,这些方法限制了原本已经有效的优化。
但是结构能超越仅仅是一个效率限制,成为一个有效的学习手段吗?越来越多的新兴研究似乎表明了这一点。
一个有趣的例子是权重不可知网络。这些类似水母的生物在一生中不需要学习,但仍然非常适应它们的生态位,因为进化为它们选择了有效的大脑结构。
即使是自然选择的固定架构,学习稀疏结构仍然可以和学习突触权重一样有效。最近,Ramanujan 等人[ 19 ]设法找到了初始化卷积网络的稀疏化版本,如果足够宽和足够深,其泛化能力不会比经历权重训练的密集网络差。理论研究还表明,如果模型被充分过度参数化,随机权重的稀疏化与优化参数一样有效[ 20 , 21 ]。
因此,在现代深度学习严重过度参数化的制度中,我们有一把双刃剑:权重的优化和结构的优化。这让人想起作为生物学习和记忆基础机制的突触和结构可塑性(例如,参见[ 22 、 23 )。**
备注 :描述参数稀疏性的一种正式方式是通过参数掩码的公式化(图 1)。学习可以通过优化固定结构中的连续权重来实现,也可以通过优化给定一组固定权重的离散结构来实现(图 2)。
图一。模型参数结构稀疏性的参数掩模公式。
图二。学习权重与学习结构。
通过稀疏化进行微调
既然结构就像权重一样可以优化学习,那么这个机制是否可以用来让迁移学习变得更好?
是的,确实可以。最近,Radiya-Dixit & Wang[24]让 BERT 捡起这个新基因,进化出新的东西。他们表明,可以通过稀疏化预训练的权重来有效地微调 BERT,而不改变它们的值,正如通用语言理解评估(GLUE)任务所系统展示的那样[ 25 ]。
图 3。通过稀疏化对 BERT 进行微调 [ 24 ]。
备注 :注意,类似的稀疏化微调已经成功应用于计算机视觉,例如【 26 】。还要注意预训练期间稀疏化 BERT 的现有工作[27]。
通过稀疏化进行的微调具有有利的实际意义。一方面,预训练的参数值在学习多个任务时保持不变,将特定于任务的参数存储减少到只有一个二进制掩码;另一方面,稀疏化压缩了模型,通过适当的硬件加速,潜在地避免了许多“乘零累加”操作。一石二鸟。
然而,除了实际的好处,通过稀疏化进行微调的可能性带来了一些新的机会,有助于更深入地理解语言预训练及其与生物大脑的潜在联系。让我们在接下来的部分中看看它们。
不同彩票的中奖彩票
首先我们从最优化的角度研究语言预训练的本质。
似乎语言预训练元学习是学习下游 NLU 任务的良好初始化。正如 Hao 等人[ 28 ]最近所表明的,预训练的 BERT 权重具有良好的特定于任务的最优值,在损失情况下更接近且更平坦。这意味着预训练使微调更容易,微调后的解决方案更通用。
类似地,预训练也使得发现微调的稀疏子网络更容易[ 24 ]。因此,有趣的是,预先训练的语言模型具有弗兰克尔和卡宾[ 29 ]制定的“中奖彩票”的所有关键属性,但鉴于优化权重与结构的二重性,它们恰恰是互补类型(图 3、4):
- Frankle-Carbin 中奖票**是一种特定的稀疏结构,使得便于权重优化。对重量初始化 [ 29 敏感。这是跨视觉任务 30 的潜在转移。**
- 一个预训练的语言模型就是一组特定的权重使得便于结构优化。对结构初始化 [ 24 敏感。它是跨 NLU 任务转移 24 。**
图 4。弗兰克尔-卡宾赢票 [ 29 ,比照通过稀疏化进行微调(图 3)。
备注 :注意预训练 BERT 的“中奖票”属性与[19]中的宽深政权不同。基于 transformer 的大型语言模型,如果做得足够宽和足够深(如果它们已经很大,那么一定会非常大),是否可以在没有预训练的情况下,从随机初始化中有效地进行微调,这仍然是一个悬而未决的问题。
虽然学习中奖彩票的权重和在预训练的权重内搜索子网会导致相同的结果——一个紧凑、稀疏的网络,可以很好地推广,但这两种方法的生物学合理性截然不同:找到一张弗兰克尔-卡宾彩票需要重复的时间倒带和重新训练,如果早期的状态可以被遗传编码,然后在下一代中复制以实现倒带,这一过程只有在多个生物代中才有可能。但是在结构稀疏化之后的重量预训练类似于发育和老化,都发生在一代人的时间内。因此,密集预训练和稀疏微调可能是神经发育的有用模型。
健壮性:不同结构的相同功能
伯特和大脑的另一个不可思议的相似之处是其结构的坚固性。
在各种稀疏水平下,似乎有大量良好的预训练 BERT 子网络[ 24 ]:一个典型的胶合任务可以通过消除预训练权重的百分之几到一半以上来学习,良好的稀疏解决方案存在于其间的任何地方(图 5,左)。这让人想起了在成熟和衰老的大脑中发挥作用的结构可塑性——其获得的功能保持不变,而底层结构随着时间的推移不断发生变化。这与易碎的点方案乘的传统工程截然不同。
图五。通过稀疏化进行微调的语言模型的结构鲁棒性。(左)存在许多预训练 BERT 的良好子网络,这些子网络跨越大范围的稀疏性(从百分之几到一半以上)[ 24 ]。(右)持续稀疏化过程中损失景观的漫画视图。密集训练(实心洋红色和橙色箭头)找到位于连续流形上的低损耗解决方案(类似于[ 31 ]的图 1 的黄色虚线框)。只要通过重量消除的任何结构扰动(紫色虚线箭头和圆圈)没有偏离低损失歧管太远,快速的结构微调(洋红色虚线箭头和圆圈)可以连续地恢复最佳性。蓝色网格表示稀疏参数的离散集合。
这种现象主要源于深度神经网络的过度参数化。在总体过度参数化的现代体制中,损失景观中的最优值通常是高维连续非凸流形[ 31 , 32 ]。这与生物学有着奇怪的相似之处,在生物学中,完全相同的网络行为可以从非常不同的底层参数配置中产生,在参数空间中形成非凸集,例如参见[ 33 ]。
现在有趣的部分来了。就像生物学中的终身体内平衡调整一样,类似的机制可能支持过度参数化的深度网络中的持续学习(如图 5 所示):密集连接的早期学习发现了一个好的解流形,沿着它存在大量好的稀疏解;随着网络的老化,网络的持续和逐渐稀疏化可以通过结构可塑性快速微调(就像保持终身可塑性的大脑)。
从神经生物学的角度来看,如果接受优化假说* [ 3 ],那么终生可塑性必然在整个生命周期中不断进行某种功能优化。按照这个逻辑,这个过程出现偏差而导致的神经发育障碍,本质上应该是 优化疾病 ,具有初始化不良、优化器动态不稳定等病因学特征。*
上述假设是否对深层神经网络普遍适用,是否足以作为神经发育和病理生理学的良好模型,这是未来研究的开放问题。
伯特学到了多少?
最后,让我们将一些神经科学的思维应用于 BERTology。
我们问这样一个问题:在预先训练的* BERT 参数中存储了多少与解决 NLU 任务相关的信息?这不是一个容易回答的问题,因为在预训练和微调期间参数值的连续变化会相互混淆。*
在通过稀疏化进行微调的 BERT 的情况下,这种限制不再存在,其中预训练仅学习权重值,微调仅学习结构。对生物学家来说,如果两个发展阶段涉及完全不同的生理过程,这总是好消息,在这种情况下,其中一个可以用来研究另一个。
现在让我们这样做。让我们扰动预先训练的权重值,并研究下游结果。在这个实验中,我们不进行生理扰动(例如破坏注意力头),而是进行药理学扰动:全身应用一种影响整个大脑中每一个突触的物质。这种药物是量子化的。表 1 总结了一些初步的剂量反应:尽管 BERT 和相关物种已经发展出了巨大的大脑,但似乎在语言预训练期间学到的知识可能只用每个突触的几个比特来描述。
在实践中,这意味着,由于预训练的权重在通过稀疏化进行微调的过程中不会改变值,因此可能只需要存储所有 BERT 参数的低精度整数版本,而不会产生任何不利后果——显著的压缩。结果:你所需要的是所有任务共享的预训练参数的量化整数版本,以及为每个任务微调的二进制掩码。
备注 :注意现有的关于 BERT 权重的量化的工作是量化微调的权重(例如 Q-BERT[34])而不是预训练的权重。**
表 1。MRPC 微调 BERT 和相关模型的 F1 分数。多亏了抱紧脸的变形金刚,像这样的实验轻而易举。
收场白
深度神经网络和大脑有明显的区别:在最底层,在学习算法上,在最高层,在一般智力上。然而,中级水平的深刻相似性已被证明有利于深度学习和神经科学的进步。
例如,感知和认知神经生理学已经启发了有效的深度网络架构,这反过来又为理解大脑提供了一个有用的模型。在这篇文章中,我们提出了另一个交叉点:生物神经发育可能会激发高效和稳健的优化程序,这反过来又会成为大脑成熟和老化的有用模型。
备注 :需要注意的是,传统联结主义语境下的神经发展是在 20 世纪 90 年代提出的(例如参见[35)。
具体来说,我们回顾了最近关于权重学习和结构学习作为优化的补充手段的一些结果,以及它们如何结合起来,在大型语言模型中实现有效的迁移学习。
随着结构学习在深度学习中变得越来越重要,我们将看到相应的硬件加速器出现(例如,Nvidia 的 Ampère 架构支持稀疏权重[ 36 ])。这可能会带来专用硬件架构多样化的新浪潮——加速结构学习需要适应特定计算的智能数据移动,这是一个新的探索前沿。
参考
[1] W. S .麦卡洛克和 w .皮茨,“神经活动中固有观念的逻辑演算”,1943 年。
[2] D .哈萨比斯等,“神经科学启发的人工智能”,2017。
[3] B. A. Richards 等人,“神经科学的深度学习框架”,2019。
[4] T. P. Lillicrap 等人,“反向传播与大脑”,2020。
【5】g . Marcus,《深度学习:一个批判性的鉴定,2018。
[6] G. Marcus,“人工智能的下一个十年:迈向强大人工智能的四个步骤”,2020 年。
[7] M. Wistuba 等著《关于神经架构搜索的调查》,2019。
[8] A. Vaswani 等人,“注意力是你所需要的全部”,2017。
[9] M. Shoeybi 等,“威震天-LM:利用模型并行性训练数十亿参数语言模型”,2019。
【10】micro sift Research,“图灵-NLG:微软的 170 亿参数语言模型”,2020 年。
【11】t . b . Brown 等.语言模型是很少出手的学习者,2020。
【12】j . Devlin 等人,“ BERT:用于语言理解的深度双向变形器的预训练”,2018。
【13】A . Rogers 等著《伯特学入门:我们所知道的伯特如何工作》,2020 年。
[14] M. Belkin 等人,“调和现代机器学习实践与古典-方差权衡”,2019。
【15】m . Zhu,S. Gupta,“修剪,还是不修剪:探索模型压缩中修剪的功效”,2017。
【16】t . Gale 等,“深度神经网络中的稀疏状态”,2019。
【17】s . Navlakha 等人,“网络设计与大脑”,2018。
【18】a . Gaier 和 D. Ha,“权重不可知神经网络”,2019。
【19】v . Ramanujan 等人《随机加权的神经网络中隐藏着什么?》,2019。
【20】e .马拉奇等著《证明彩票假说:修剪是你所需要的全部》,2020。
【21】m .叶等,“良好子网络可证明存在:通过贪婪正向选择进行剪枝”,2020。
【22】f . h . Gage,“成人大脑的结构可塑性”,2004。
【23】h . Johansen-Berg,“结构可塑性:重新连接大脑”,2007。
【24】e . Radiya-Dixit 和 X. Wang,“微调能有多细?学习高效的语言模型”,2020。
【25】A .王等,“ GLUE:自然语言理解的多任务基准与分析平台”,2019。
【26】a . Mallya 等人,“捎带:通过学习任务权重使单个网络适应多项任务”,2018。
【27】m . a . Gordon 等,“压缩 BERT:研究权重剪枝对迁移学习的影响”,2020。
【28】y .郝等《可视化与理解 BERT 的有效性》,2020。
【29】j . Frankle 和 M. Carbin,“彩票假说:寻找小的、可训练的神经网络”,2018 年。
[30] A. S. Morcos 等人,“一票全赢:跨数据集和优化器的一般化彩票初始化”,2019。
[31] F. Draxler 等人,“神经网络能源格局中本质上没有壁垒”,2018。
[32] S. Fort 和 S. Jastrzebski,“神经网络损失景观的大尺度结构”,2019。
【33】e . Marder,“神经元和电路中的可变性、补偿和调制”,2011 年。
[34] S .沈等,“ Q-BERT:基于 Hessian 的超低精度量化的 BERT ”,2019。
[35] J. Elman 等.反思天赋:发展的联结主义观点,1996 年(ISBN 978–0–262–55030–7)。
【36】英伟达博客,“什么是 AI 推理中的稀疏性?”,2020。
MySQL、PostgreSQL 和 Hive 的奇特案例
MySQL、PostgreSQL 和 Hive 在相同的 SQL 语法下如何表现不同
在大数据时代,数据的数量、大小和速度都在快速增长,对于数据分析师和数据科学家来说,了解 SQL 仍然是必不可少的。SQL 帮助我们管理传统关系数据库(RDBMS)、分布式集群甚至云环境中的数据。
如果我们在传统的 RDBMS 中处理数据,我们通常会使用像 MySQL 或 PostgreSQL 这样的数据库引擎。然而,随着数据的数量和大小迅速增长,我们不能只使用 RDBMS 来存储所有的数据。这就是我们需要分布式集群来存储和处理大量数据的地方,Hadoop 为我们提供了便利。
如果您正在使用 Hadoop 生态系统,那么您很可能会使用 Apache Hive 来管理和查询驻留在 Hadoop 分布式文件系统或 HDFS 中的结构化数据。
MySQL、PostgreSQL 和 Hive 都有相似的 SQL 语法,有时我们假设它们会根据给定的 SQL 查询表现相似。然而,事实并非如此。让我们深入一些场景,在相同的 SQL 语法下,PostgreSQL、MySQL 和 Apache Hive 中至少有一个表现不同。
整数的除法运算
除法是 SQL 引擎需要解释的一种复杂的算术运算,不像加法、减法和乘法等其他运算。如果你将两个整数相加、相减或相乘,你将总是得到一个整数,而除法不是这样。您可以将两个整数相除,得到一个小数或一个舍入整数作为结果,这取决于您使用的 SQL 引擎。
在 Hive 和 MySQL 中,如果用/
运算符对两个整数进行除法运算,总会得到一个小数结果。
**SELECT 32/5**>> result: 6.400000
与此同时,在 PostgreSQL 中,如果您使用/
运算符对两个整数进行除法运算,您将始终得到一个整数结果。
**SELECT 32/5**>> result: 6
因此,如果您使用 PostgreSQL,记住您期望的输出类型是很重要的。如果您想要一个整数结果,您可以像上面一样编写您的 SQL 查询。但是,如果您想要像 Hive 和 MySQL 中那样精确的十进制结果,您需要显式地将其中一个操作数转换为十进制数。
**SELECT 32.0/5**>> result: 6.4
如果你使用 MySQL 或 Hive,并且你想在执行两个整数的除法后得到一个整数结果,你需要使用DIV
运算符来代替。
**SELECT 32 DIV 5**>> result: 6
区分大小写:字符串比较
比较两个字符串也可能在不同的 SQL 引擎上产生不同的结果。Apache Hive 和 PostgreSQL 在进行字符串比较时是区分大小写的,这意味着大写字母和小写字母很重要。让我们看看下面的例子。
**SELECT** 'One' = 'one'>> result: False
尽管两个字符串有相同的字母,查询将返回 FALSE ,因为 Hive 和 PostgreSQL 都区分大小写。
同时,如果你使用 MySQL,同样的查询将返回 1 或 TRUE ,因为 MySQL 在字符串比较时不区分大小写。这意味着只要两个字符串具有相同的字母,MySQL 就会将它们解释为相同的,不管它们是大写还是小写。
**SELECT** 'One' = 'one'>> result: 1
区分大小写:表引用
这取决于您使用的 SQL 引擎,当您引用数据库中的表时,需要注意区分大小写。如果使用 PostgreSQL 和 Hive,那么在引用表时就不需要担心大小写,因为它们总是将字母转换成小写。
为了更清楚地说明这一点,让我们看看下面的例子。
数据库中有一个名为“客户的表。但是,我们在查询中将其称为客户。Hive 和 PostgreSQL 总是将字母转换成小写,因此它们理解我们想要引用表‘CusTomers’而不是‘CusTomers’
然而,MySQL 却不是这样。在 MySQL 中,当表被写入数据库时,您需要引用它。如果您将该表引用为‘CusTomers’,而它应该是‘CusTomers’,那么 MySQL 将抛出一个错误。
现在,如果我们完全按照数据库中写的那样引用该表,MySQL 将返回我们完全想要的信息。
在 SELECT 和 GROUP BY 语句中使用别名
创建别名是创建更高效、更简洁的 SQL 查询的一种非常有用的方法。此外,它为长查询提供了一个快捷方式,提高了查询的可读性,特别是如果我们要在 GROUP BY 子句中使用别名。让我们看一个例子来理解 alias 是如何工作的。
假设我们有一个名为‘inventory’的表,包含以下列和内容。
现在,假设我们希望纯粹基于数量状态对上表进行分组和聚合,即qty
是大于还是小于 5。为此,我们将编写一个类似这样的 SQL 查询:
**SELECT CASE WHEN** qty > 5 **THEN** 'more than 5'
**ELSE** 'less than 5'
**END**,
COUNT(*)
**FROM** inventory
**GROUP BY** **CASE WHEN** qty > 5 **THEN** 'more than 5'
**ELSE** 'less than 5'
**END**
上面的 SQL 查询可以工作,但是不够简洁,可读性显然还可以提高。这就是别名派上用场的地方。我们可以将 SELECT 语句中的 CASE 转换成别名,并通过子句在组中引用该别名,如下所示:
**SELECT CASE WHEN** qty > 5 **THEN** 'more than 5'
**ELSE** 'less than 5'
**END AS** inventory_status,
COUNT(*)
**FROM** inventory
**GROUP BY** inventory_status
上面的 SQL 查询更短、更简洁,尤其是当我们有一个很长的 CASE 语句时。
如果使用 MySQL 和 PostgreSQL,可以在 SELECT 语句中编写一个带有别名的 SQL 查询,并通过子句引用 GROUP 中的别名。下面是通过子句引用组中的别名的查询结果。
同时,如果你使用 Hive,你不能通过子句引用组中的别名,因为它会抛出一个错误。这是因为在处理 SELECT 语句之前,Hive 将首先通过子句处理组。
因此,如果您正在使用 Hive,唯一的方法就是删除别名,并重写 GROUP BY 子句中的 CASE 语句,就像没有别名的原始查询一样。
非数字字符串到数字类型的转换
使用 SQL,我们可以用 CAST 命令转换表中一列的数据类型。如果我们想把一个字符串列转换成一个整数,我们可以这样做。
**SELECT CAST**(column_name **AS INT**) **FROM** table_name
但是,如果您尝试将值不代表数字的字符串列的数据类型转换为数字列,查询将返回意外的结果,这取决于您使用的 SQL 引擎。为了解释这一现象,让我们用与前面相同的例子来说明'库存'表。
在 Hive 中,如果您尝试将' game '列转换为整数,查询将导致缺少值或 NULL 值。回想一下,'游戏'列的数据类型是字符串,并且所有的值都是非数字的(大富翁、线索、糖果乐园)。当您将该列转换为数字列时,例如 integer 或 float,那么查询将返回空值,因为没有办法将这些字符串转换为数字表示。
现在我们来看看我们是否使用 MySQL。在 MySQL 中,如果用相同的 SQL 语法对同一列进行数据类型转换,会得到列中的值,但都是零。这不同于我们在 Hive 中得到的缺失值( NULL )。
同时,如果您在 PostgreSQL 中使用相同的语法对相同的列尝试相同的数据类型转换,您将会得到一个错误。
不同的 SQL 引擎有不同的方法来处理像这样的数据类型转换问题。因此,当您尝试将字符串列的数据类型转换为数字列,并且一个或多个字符串值不代表数字时,提前了解您使用的 SQL 引擎以及您期望得到的结果是很重要的。
没有连接条件的连接语法
JOIN 语法是 SQL 中最重要的语法之一,尤其是在处理关系数据库时。SQL 中的连接有不同的类型:内连接、左连接、右连接、外连接、交叉连接。
因为本文的重点不是解释不同的连接语法是如何工作的,所以我不打算详细讨论这个问题。但是,如果你想知道关于不同的 JOIN 语法彼此有何不同的详细信息,我推荐这篇文章和这篇文章。
为了补充连接语法,通常我们还应该在子句上使用或者在子句上使用来提供连接条件。为了更清楚地说明这一点,我们假设有两个不同的表,一个名为' toys ',另一个名为' makers '。下面是这两个表的列和内容的图示。
“玩具”表的列和内容
“制造商”表的列和内容
现在的目标是根据'玩具'表中的制造商 ID,将'玩具'表和'制造商'表组合起来。为此,我们可以使用下面的 SQL 查询。
**SELECT** *
**FROM** toys **JOIN** makers
**ON** toys.maker_id = makers.id
上述查询产生以下结果。
注意,我们没有详细指定我们希望在查询中使用哪个 JOIN 语法。然而,因为我们提供了连接条件,即子句上的,所以 SQL 引擎将连接语法解释为左连接。
现在,如果由于某些原因我们忘记提供连接条件,会发生什么呢?
如果你使用 PostgreSQL,你会很幸运,因为它会直接抛出一个错误,告诉你你的语法无效。
同时,如果您正在使用 MySQL 或 Hive,并且忘记添加连接条件,查询仍然会运行。但是,它会将您的连接语法解释为交叉连接。查询的结果如下。
为了更好地理解一个交叉连接实际上是做什么的,让我们用下面的图表来举例说明。
使用 Cross JOIN ,来自左表和右表的行的每一种可能的组合都将包含在最终结果中。用作示例的两个表只包含 3 行,现在想象一下,如果您的数据库包含许多行,而您忘记了添加连接条件。结果将是一个包含大量行的新表,您可能会被这个结果误导。
为了避免这种情况,最好明确告诉 SQL 引擎应该在查询中执行哪种连接语法。另外,在 join 语法之后提供 JOIN 条件也是必须的。
仅此而已。这些是相同的 SQL 语法在 MySQL、PostgreSQL 和 Apache Hive 中表现不同的情况,至少据我所知是这样。如果你知道其他他们表现不同的案例,如果你能和我分享,我会很高兴。
海拔和温度之间因果联系的奇特案例
加勒特·帕克在 Unsplash 上的照片
一个简单但不那么简单的例子来说明为什么因果关系很重要
这个例子在因果关系文献中被反复使用。我写这篇文章是为了让我自己明白,因为这并不是直截了当的。所以,让我们直接开始吧。
假设我们想学习高度和温度的联合分布。我们的数据集来自瑞士。在我们的数据集中,我们将高度与它们各自的温度配对。如何分解共同分布?嗯,有两种可能的方法:
或者:
是的,就是这么简单。但是现在黄金问题来了。哪个提法实际上是正确的,因为每一个都暗示着不同的东西。第一个暗示我们能够从温度预测海拔。也就是说,我们的模型学习连接 T->A。第二个模型采用相反的关系,A->T。因此,如果你已经上过一些基本的物理课,你显然会马上发现,第二个公式更有意义。没有物理定律表明,如果你改变温度,那么物体的高度就会改变(模体积随着温度而改变,压力根据密度而改变)。
只是为了满足我的好奇心(也许也是你的),你们中有多少人确信 p(H | T)模型将是绝对的垃圾?
现在,假设您学习了从温度到高度的预测模型,并希望将其应用到其他地方,例如德国。理由是你的模型不能概括,因为德国的身高分布与瑞士有很大不同。即 p(A)不同,不是温度分布不同造成的。
你现在可能会想,但是等等…这并不意味着我的模型不能概括,这个论点有点可疑,不充分。我同意。关键是测试数据的分布偏移。统计学习理论中一个众所周知的事实是,我们从学习算法中获得的伟大理论结果是基于示例的 iid 假设(同分布独立分布)。在这种情况下,我们的真实风险(整个数据集的实际误差)可以根据我们用于拟合模型的数据点数量变得任意小。但是,如果违反了 iid 假设,那么当我们天真地将我们的模型与数据拟合时,它不会一般化,即,它会有很大的测试误差。
这个分布转移的概念非常重要,这也是机器学习对因果关系感兴趣的原因。通过学习实际的因果机制,我们可以使我们的模型对分布变化更加稳健。这也被称为分布失调泛化。
照片由埃米尔·吉耶莫在 Unsplash 上拍摄
确定因果方向的一种方法是拿一座山,改变它的海拔高度并观察温度。如果我们看到温度变化,那么显然高度影响温度。反过来,我们可以影响山顶的温度,让它变得更热或更冷,并观察海拔高度。海拔显然不会改变。这将被称为干预,我也不是在统计学意义上谈论它。这将是你在现实世界中的一座山,并把它变得更大。但显然我们不能这么做!我们没有神力。但是,如果我们不能做到这一点,我们怎么能确定因果方向呢?
事实是,这很难。实际上,两个变量的情况非常困难。只有当模型和噪声符合一定的标准时,我们才能确定因果方向,否则,你可以忘记它。
这种推理向我解释了因果推理的要点,而不是用简单的统计模型来拟合数据。
如果你想看更多我的 rants,也可以在 Twitter 关注我。;)
统计推断和因果推断之间更一般的比较可以在本文中找到。
维度的诅咒…减去行话的诅咒
简而言之,这都是因为孤独
维度的诅咒!那究竟是什么?除了作为一个在机器学习行话中令人震惊和敬畏的名字的主要例子(这些行话听起来往往比它们更花哨),它还指的是添加更多特征对数据集的影响。简而言之,维度的诅咒是关于孤独的。
一言以蔽之,维度的诅咒都是关于孤独的。
在我解释自己之前,让我们先弄清楚一些基本的术语。什么是特色?这是机器学习的词,其他学科可能称之为预测器/(独立)变量/属性/信号:换句话说,关于每个数据点的信息。这里有一个行话介绍如果这些词都不熟悉的话。
如果你喜欢在看漂亮的图片之前听解释,这里有一个2 分钟的视频。
当一个机器学习算法对维数灾难敏感时,这意味着当你的数据点在空间中被它们的朋友包围时,该算法工作得最好。他们在太空中的朋友越少,情况就越糟糕。让我们来看看。
数据社交距离很容易:只需添加一个维度。但是对于某些算法,你可能会发现这是一个诅咒…
一维
想象你坐在一个大教室里,周围都是你的伙伴。
很自然,你是一个数据点。让我们把你放在一个维度中,让房间变暗,然后从房间的后面用一束强光照射你。你的影子投射到前面墙上的一条线上。在那条线上,一点都不孤独。你和你的船员都是罐头里的沙丁鱼,聚在一起。一维很惬意!也许有点太舒适了。
二维
为了给你喘息的空间,让我们增加一个维度。我们在 2D,飞机就在房间的地板上。在这个空间里,你和你的朋友更加分散。个人空间又是一个东西。
注意: 如果你喜欢在一个假想的电子表格中跟随,把添加/删除一个维度想象成插入/删除一列数字。
三维
让我们添加一个第三维度,随机把你们每个人送到你们所在的 5 层大楼的一个楼层。
突然间,你不再有那么多朋友围绕着你。在你身边很孤独。如果你喜欢几乎每个座位上都有学生的感觉,那么你现在可能正悲伤地盯着几把空椅子。你开始泪眼模糊,但至少你的一个朋友可能还在你身边…
四维空间
不会太久的!让我们再增加一个维度。时间。
学生们在不同的时间分散在 60 分钟的课堂上(在不同的楼层)——让我们把自己限制在 9 节课,因为讲师需要睡眠和,嗯,生活。所以,如果你足够幸运,以前仍然有一个情感支持的伴侣,我相当有信心你现在在社交上疏远了。如果你孤独的时候不能有效,轰!我们有我们的问题。维度诅咒来袭!
MOAR 维度
当我们增加维度时,你会很快变得孤独。如果我们想确保每个学生都像在 2D 那样被朋友包围,我们就需要学生。很多人。
这里最重要的想法是,我们必须以指数方式招募更多的朋友,而不是以线性方式,让你远离忧郁。
如果我们增加两个维度,我们不能简单地用多两个学生来补偿…或者甚至是多两个教室的学生。如果我们最初在教室里有 50 名学生,我们增加了 5 层楼和 9 个班级,我们需要 5x9=45 倍多的学生来保持 50 人可以做到的那样。所以,我们需要 45x50 = 2,250 个学生来避免孤独。这比每个维度多一个学生要多得多!数据需求快速增长。
当您添加维度时,最低数据要求可能会快速增长。
每当我们上升一个维度,我们就需要招募更多的学生(数据点)。如果数据对你来说很贵,这个诅咒真的不是闹着玩的!
次元天后
并非所有的机器学习算法在面对一点私人时间时都会如此情绪化。像 k-NN 这样的方法当然是完全的天后。对于一个名字缩写代表 k-最近邻的方法来说,这并不奇怪——它是关于相邻数据点的计算,所以数据点是相邻的是相当重要的。
当涉及到尺寸时,其他方法要健壮得多。例如,如果你上过线性回归的课,你会知道一旦你有了相当数量的数据点,增加或减少一个维度不会让任何东西灾难性地崩溃。还是有价格的——只是更实惠而已。*
这并不意味着它能抵御所有的虐待!如果您从来不知道包含单个异常值或添加一个近似重复的要素会给最小二乘法带来的混乱(犯罪的拿破仑,多重共线性,再次来袭!)那就当自己被警告了。没有一种方法是适合所有情况的。是的,这包括神经网络。
你该怎么办?
关于实践中的维数灾,你打算怎么做?如果你是一个机器学习研究者,你最好知道你的算法是否有这个问题…但我肯定你已经知道了。你可能没看这篇文章,所以我们就在背后议论你,好吗?但是,是的,你可能会想,是否有可能把你发明的算法设计成对维度不那么敏感。您的许多客户喜欢将他们的矩阵放在全图案面**,尤其是当事情变得有文字时。
** 按照惯例,我们将数据排列成一个矩阵,这样行就是例子,列就是特征。在这种情况下,一个又高又瘦的矩阵有许多分布在几个维度上的例子。
如果你是一个应用数据科学爱好者,你会做你一直在做的事情——在尝试使用厨房水槽之前,只使用一个或几个有前途的功能获得算法性能的基准。(我将在另一篇文章中解释为什么你需要那个习惯,如果你同时想要线索,请查找术语。)
有些方法只对高瘦的数据集有效,所以如果你感觉被诅咒了,你可能需要节食。
如果你的方法在有限的几个功能上工作得还不错,然后当你增加维度时对你嗤之以鼻,那就是提示你要么坚持你精心挑选的几个功能(或者甚至逐步选择如果你变得狡猾的话)或者首先通过运行一些可爱的功能工程技术从你原来的厨房水槽中制造几个超级功能(你可以尝试任何东西,从像主成分分析(PCA)这样的老派东西——今天仍然相关,特征向量永远不会过时——到像自动编码器这样的更现代的东西你真的不需要知道术语维数灾难来完成你的工作,因为你的过程——从小处开始,逐步增加复杂性——应该会替你处理好,但是如果它困扰着你……现在你可以摆脱这种担忧了。**
****总结一下:随着你添加越来越多的特性(列),你需要数量呈指数增长的例子(行)来克服你的数据点在空间上是如何分散的。一些方法只在细长数据集上有效,所以如果你感觉被诅咒了,你可能需要节食。
注:如果你把“空间上的接近”解释为与规模有关,让我纠正一下。这不是用英里和厘米来衡量的效果,所以我们不会试图将我们的灾难归咎于膨胀的宇宙——你不能通过简单的乘法来逃避诅咒。相反,也许这张图片会帮助你在 3D 中直观地理解它;这不是这个球形奶牛有多大的问题,呃,我的意思是,喵星人有多大……而是它身上包着多少包装花生的问题。图片:来源。
感谢阅读!喜欢作者?
如果你渴望阅读更多我的作品,这篇文章中的大部分链接会带你去我的其他思考。不能选择?试试这个:
从有用的模式中分离出不必要信息的快速解决方案
towardsdatascience.com](/the-most-powerful-idea-in-data-science-78b9cd451e72)
与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。
人工智能课程怎么样?
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
在这里欣赏整个课程播放列表:bit.ly/machinefriend**
人工智能中偏见的危险
这张令人惊叹的照片归功于韦恩·达什伯格。如果 AI 的每个回合都潜伏着危险,那会怎样?
为什么承认我们架构中的偏差是关键
关于人工智能中偏见的危险,这是第一篇文章,我们想把重点放在一个特定的模型上。最近,基于“PULSE:通过生成模型的潜在空间探索进行自我监督的照片上采样”的模型 Face-Depixelizer 已经发布。这种模型可以从它的像素化版本输出原始图片。更严格地说,它将输出最接近的已知去像素化图像。
图一。(x32)输入(顶部)被上采样到 SR 图像(中间),该图像被下缩放(底部)到原始图像。来自原创论文。
根据 github repo 上的描述,给定一个低分辨率的输入图像,Face Depixelizer 搜索生成模型(此处为 StyleGAN )的输出,以获得感知上真实并正确缩小的高分辨率图像。
更准确地说,正如在论文中所解释的那样:“【the】方法使用一个(预训练的)生成模型来生成图像,该模型近似于所考虑的自然图像的分布。对于给定的输入 LR 图像,我们遍历由生成模型的潜在空间参数化的流形,以找到正确缩小的区域。通过这样做,我们找到了适当缩小的真实图像的例子,如 1 所示
这个 AI 模型有什么问题?
如果你输入一张黑人的像素化图片,比如巴拉克·奥巴马或蒂埃里·亨利,不管这个黑人有多出名,它仍然会输出一张白人脸。下面的图 2 显示了这些例子的 PULSE 输出。这当然意味着该模型偏向于白人面孔。这可以推广到多种场景,我们的下一篇文章将更深入地讨论它们。现在,假设你的公司正在使用一个自动雇用候选人的模型。如果这个模型偏向于白人,那么这个模型最终会建议一个黑人作为新雇员是非常不可能的,甚至在某些情况下是不可能的。
图二。几个例子,脉冲得到一个非常遥远的图片作为像素化输出的重建。
这让我们想到了 Yann Lecun 的解释。
我们如何解决偏见?
如下所述,大多数时候,我们的模型只是根据本身有偏差的数据进行训练。只在狗和猫身上训练一个计算机视觉模型来对它们进行分类,它将不会知道如何对任何其他动物进行分类,例如鲸鱼。
Lecun 提出“当数据有偏差时,ML 系统也有偏差。这个面部上采样系统让每个人看起来都是白人,因为该网络是在 FlickFaceHQ 上预训练的,其中主要包含白人照片。在塞内加尔的数据集上训练完全相同的系统,每个人都会看起来像非洲人。”
这再清楚不过了。当然,首先要考虑的是数据本身。这就是为什么预处理和数据探索是机器学习中的关键步骤的主要原因。在不了解数据性质的情况下训练模型是没有意义的。如果我们希望在要分类的输入集中实现多样性,那么我们的数据集中就需要多样性。
让我们通过观察面部去像素化数据集的多样性来快速验证 Yann Lecun 的说法。但是,在此之前,让我们从一个更普遍的角度来看这个问题。
我们能评估数据集中的多样性吗?
在许多情况下,评估数据集是否足够多样化并不是一件轻而易举事情。然而,有一个问题要时刻牢记在心,那就是:“我的数据实际上代表了我感兴趣的人群吗?”。如果我对猫和狗的分类感兴趣,我有足够的多样性来展示所有可能的猫品种吗?对于新员工来说也是如此:如果公司捍卫多样性和包容性,那么在年龄、教育、性别、性偏好等方面,感兴趣的人群是否足够多样化?
现在,在许多不同的现实世界场景中,这变得更加困难。假设你拥有一个客户评论网站。人们可以在这些评论的基础上建立满意度评分。但这个满意度得分实际上反映了底层人群的真实满意度吗?仅根据文本审查来评估这一点是一项非常困难的任务。然而,这些评论中的许多可能是由对你的服务非常愤怒的人群中的一部分人写得非常好的。
我们能评估人脸去像素化数据集的多样性吗?
面部去污剂正在使用罩下的 StyleGAN 。StyleGAN 本身可以使用许多数据集进行训练:
- StyleGAN 用 Flickr-Faces-HQ 数据集在 1024×1024 进行训练。
- StyleGAN 用 1024×1024 的 CelebA-HQ 数据集训练。
- StyleGAN 使用 256×256 的 LSUN Bedroom 数据集进行训练。
- StyleGAN 用 512×384 的 LSUN Car 数据集训练。
- StyleGAN 用 256×256 的 LSUN Cat 数据集训练。
根据作者的说法,FlickrFaces-HQ (FFHQ)是一个新的人脸数据集,由 7 万张分辨率为 10242 的高质量图像组成(论文的图 7)。“该数据集在年龄、种族和图像背景方面比 CELEBA-HQ 包含了更多的变化,并且还包含了更好的配饰,如眼镜、太阳镜、帽子等。这些图片是从 Flickr 抓取的(因此继承了该网站的所有偏见),并自动对齐和裁剪。
作者没有清楚地解释多样化数据的过程。因此,很难清楚地说明多样性的程度。然而,他们提出了一个具有高级统计数据的视图,如图 3 所示。
图 3。关于 FFHQ 数据集的高级统计信息。来自 github 回购。
使用元数据可以是评估多样性程度的第一种方法。对于多样化的人脸数据集,代表的国家越多越好。不幸的是,如上面图 3 中的高级统计所示,85%的图像没有指定国家,因此被指定给未知的。
另一种方法是建立一个模型,以不同的方式对数据进行采样。因此,给定一张图片,这种模型应该能够识别一些关键特征,例如年龄、种族和性别。基于这些特征,它可以从底层分布中进行采样。这种模型的一个简化版本如下图 4 所示,其中我们对美国政治舞台上的著名面孔进行了分类。
图 4。用 opencv 检测性别和年龄。来自 github 的模型。
下面,我们使用了一个基本上做两件事的架构:I .检测所代表的个体的性别和 ii .检测所代表的个人的年龄段。这种架构可以集成到采样模型中。如图 4 所示,这个模型正确地预测了性别,但是错误地预测了米歇尔和梅兰妮·特朗普的年龄。这是很重要的一点,因为这样的模型应该尽可能没有偏见。换句话说,如果想要在采样过程中集成这种模型,他们应该确保精度足够高,不会在管道中集成偏差。
事实上,人们可以将采样模型视为 ML 管道中的一个重要模型。这种模型通过从源数据中正确取样,可以更好地代表潜在人口。在下面的图 5 中,我们展示了如何将这样的模型集成到 ML 管道中。
图 5。简单化(上图)与智能采样模型(下图)。上述流程的第一步是从源数据中随机抽样,并获得典型的 80%训练数据和 20%测试数据。底层管道的第一步是关注关键特性,以帮助确保数据的多样性。例如,基于图 2 所示的模型,性别可能是一个关键特征。一旦我们确保了性别的合理分布,我们就可以从这个过滤的数据集中取样,并得到一个训练和测试数据集。
严格地说,当一个人构建一个训练集和一个测试集时,他们也从底层分布中进行采样。但是这种过程不会给采样增加任何约束,因此高度依赖于数据集的偏差程度。如果您怀疑数据集有偏差,那么在采样时遵循简单的均匀分布是不合适的!我最近写了一篇关于过采样的文章来解决类不平衡问题,这篇文章更详细地解释了采样时的均匀分布问题,并深入探讨了这个问题。处理不平衡的数据集自然可以看作是处理有偏差的数据集。例如,假设您事先知道您感兴趣的人群应该是 50%男性和 50%女性。因此,如果训练集并不紧密代表这种分布,并且包含例如 70%男性和 30%女性,那么对于下游任务来说,过采样通常是必要的,正如在这篇必读论文中所解释的。
“智能抽样模型”(ISM)可被视为一种函数,它采用性别和年龄等关键特征以及这些特征在基础人群中的预期分布。然后,在此基础上,ISM 可以从源数据中进行采样,并确保采样数据中很好地代表了预期分布。可以讨论其他更精确的方法,但不在本文的讨论范围之内。下面的图 6 显示了 ISM 背后的一般思想。
图 6。ISM 背后的一般思想。ISM 允许您根据性别等关键特征,按照一些预定义的要求从源数据中取样。在本例中,用户设置了一个性别先验,ISM 确保这种分布在其输出中得到密切体现。我们从 70%男性,30%女性的分布到 52%男性和 48%女性的分布。
结论:
正如 Soumith Chintala 在推特上正确指出的:
“今天,ML 研究人员无意中为许多非人工智能公司的产品提供了动力,这些公司无知地从互联网上的预训练伯特/雷斯内特/YOLO 开始。可能忽略了许可证、自述文件、发布条款(…)”。
理解数据可能有偏差并透明地解决这一问题需要成为该领域日益关注的问题。
这篇文章很快介绍了一个体系结构,它很难推广到在训练数据中显示偏差的人群子集。正如 FFHQ 的作者含蓄地指出的,有时偏见很难消除,因此 FFHQ 数据集的图片依赖于 Flickr 固有的偏见。
在所有情况下,在 ML 管道中引入智能采样模型( ISM )是关键,正如 Yann Lecun 所建议的,正确的数据采样是减少数据偏差的核心优先事项,因此在后续 ML 架构中也是如此。总之,承认我们架构中的偏见是关键,并且需要在未来受到越来越多的关注!****
对抗性学习的危险
甘的优点如何变成我们社会的问题
正如故事所说,逆境塑造性格。
另一个故事是,一天晚上,Ian Goodfellow 正在和他的朋友喝酒,这时他想到了一个将对机器学习的前景产生重大影响的想法。这在理论上听起来不错,在朋友们边喝啤酒边进行投机性讨论的领域听起来也不错,但许多事情在理论上听起来不错,并不一定意味着它们在实践中也是合理的。
所以伊恩·古德费勒回家后实施了他的想法。这是一个相对简单的想法,所以他只用了几个小时就实现了。看:成功了!于是生成性对抗网络(GANs)诞生了。
gan 是生成模型(我在关于让计算机做梦的文章中写了关于生成模型的更详细的介绍)。这意味着它们允许您根据您训练模型的数据的概率分布生成全新的数据。GANs 不是构建生成模型的唯一架构(例如,变化的自动编码器是另一个非常流行的例子),但自从它们发明以来,一直是最流行的模型之一。
他们被训练的数据可以采取许多形状和形式。例如,它可以是图像数据。它也可以是声音、视频、神经成像数据(例如,为了更好地理解精神疾病)等。
生成模型是机器学习的统计、无监督方法的一部分,其质量不同于过去十年中非常流行的经典深度前馈架构。
虽然前馈网络只能分类和学习数据中的相关性,但生成模型的想象能力更接近于我们大脑的技能组合:在机器学习首次尝试训练生成模型的过程中,亥姆霍兹机器是用唤醒-睡眠算法训练的。他们可以有效地虚构新数据:通过像自由能原理、卡尔·弗里斯顿的主动推理、贝叶斯大脑假说和预测编码这样的想法,他们还提供了一个关于我们自己的大脑可能正在运作的原则的重要视角。
但这些与神经科学的有趣相似之处并不是本文的重点,而是这些生成模型在不久的将来可能对我们的社会产生的非常真实和潜在的影响。
看看这两张图片:一张是真实的人,另一张是我刚刚用 GAN 制作的。你能看出区别吗?
一个真人和一个假人,用甘生成。你能看出区别吗?
我敢打赌,你必须非常仔细地看,直到你弄清楚谁是真正的人,谁不是。但很可能你没想明白,因为没有真人。这两张照片都是假的,但是我想你作为一个人是不会有太多信心去分辨的。
这说明了生成模型的优点和问题:它们正在迅速演变,在某些领域,它们变得如此令人信服,以至于它们模糊了真实和虚假之间的界限,超出了任何人的辨别能力。
GANs 依赖于对抗学习。
这意味着它们由两个网络组成:一个发生器网络和一个鉴别器网络。这两者不断相互竞争:生成器网络试图生成看起来真实的假数据,而鉴别器网络试图区分真假(假设你使用人脸照片来训练鉴别器,其中一部分数据是输入网络的人脸实际照片,另一部分是生成器吐出的人脸)。
如果假货对鉴别者来说太好了,那么发电机网络就赢了。但是只要鉴别器仍然能够辨别真假,那么发电机网络就需要继续改进,并且鉴别器的能力可以继续用于改进发电机网络的能力。
“平心而论,你得有极高的智商才能理解瑞克和莫蒂。这种幽默极其微妙。如果没有扎实的理论物理知识,大多数笑话一般观众都理解不了。
--肯尼迪总统-
生成模型的生成能力带来了在我们的智能设备和计算机上生成假媒体的可能性。
现代人一天中的大部分时间都生活在虚拟世界中,与树木、鸟类和海洋的现实世界脱节。有时候,我们的大脑更关心筛选虚拟数据,而不是真实数据。但是,虽然森林中有一棵树的事实通常很难反驳,但我们对互联网上真假事物的直觉还没有适应我们面临的新现实。
虽然对于受过历史教育的人来说,肯尼迪总统事实上并没有称赞里克和莫蒂的微妙幽默,但这个视频被一个普通用户“用三个小时毫不费力地组装起来,看起来很糟糕”,仍然表明了我们前进的方向。
GANs 可以有有趣和娱乐性的应用,例如通过模仿著名的绘画风格(如在这些 GANGogh 画中,或这个项目画下一个伦勃朗,允许我们通过像 FaceApp 或 PortraitAI 这样的应用,想象我们是年轻的和年老的,男性和女性,或作为一幅 17 世纪的油画。
因为这些应用程序变得如此受欢迎,而且显然非常有趣,所以不可能阻止生成模型领域的快速发展。妮娜·席克预计,十年后,普通用户将能接触到好莱坞现阶段只能梦想的特效,彻底改变电影的制作方式。
但我们不应该忘记这些发展的黑暗面:“深度伪造”是一个虚拟数据的名称,它被潜在的敌对代理人在真实的伪装下使用。深度虚假媒体有可能进一步扩大社交媒体的过滤泡沫和回音室之间的鸿沟,这将进一步使它们与现实中的任何接地需求脱钩。这将有助于建立由替代事实组成的替代现实:如果我们可以让对立的政客或其他竞争对手听起来像我们所希望的那样,那么所有事情的大门都是敞开的,从虚构中辨别真相将变得更加困难。
正如上面两张图片所显示的,在某些领域,人类变得越来越困难,他们的辨别能力完全被我们盘子里的生殖模型所压倒。
为了抗衡,全球各地的公司都开始建造深度假探测器,这些探测器建立的人工智能即使在我们的人类能力走到尽头后,仍然可以分辨出什么是真的,什么是假的。修建这道防御墙至关重要。
但 GANs 和对抗性学习的讽刺之处恰恰在于,构建越来越好的识别器将反过来允许我们训练越来越好的生成模型,从而导致一场看不到尽头的致命军备竞赛。
我们将如何走出这个难题很难讲,但这是人工智能社区需要注意和了解的事情,例如通过尼娜·席克的新书“深度假货——即将到来的 Infocaplypse”更详细地讨论了所有这些。生成模型是杰出的发明,证明了我们的想象力,甚至可以想象算法可以自己开始想象。但我们需要注意,我们不能让它们变成潘多拉的盒子,一旦打开,就永远不可能关上。
精确的阴暗面
入门、理解大数据
在这篇文章中,我将展示为什么在生产中评估你的模型精度如此困难,以及如何正确地做这件事。
开始
我想这里任何一个生产 ML 分类器的人都会知道我在说什么。我有一个在测试集上表现出色的算法。我部署了一下,算法的真实性能比预期差很多,尤其是精度。
因此,我深入研究了一下,找到了对这一现象的数学解释,我还找到了更好的度量标准,使用基本的先验知识来评估算法的实际性能(别担心,我会在文章中展示)。
定义和设置
您可以将数据分为 3 个层次集合:
作者图片
有标签和无标签的数据,在有标签的数据中,有一组没有在算法选择或训练中使用的数据——测试集。验证集不是测试的一部分(因为它被用来选择最佳模型)。
数学定义
- Preal——未标记数据的分布概率。
- Ptest——测试集上的分布概率
- x—一个数据样本
- y——x 的真实标签
- Ypred——分类器对 X 的预测
重要的是要记住 —所有被标注的数据(包括测试)的标签,当然是我们知道的。客户关心的只是未标记数据的标签。所以,如果测试集上的表现不错,先别庆祝。可能真实的性能(在未标注的情况下)要差得多(这很可能发生)。
所以,我们所关心的评估是 Preal 但不幸的是,我们只能计算 Ptest 。将测试结果推广到真实性能是非常诱人的(如果测试的召回率是 70%,算法的真实召回率是 70%)。在下一节中,我将分析在哪些假设下这种概括是正确的。我们将会看到概括精确度所需的假设和概括回忆所需的假设有很大的不同。
一般化的数学定义(适用于本文)— 在某个度量的计算中切换 Preal 中的 Ptest ,并减少在测试集中的条件:
也许这不是编写评估指标的最常规的方法,但是我将向您展示用这种方法编写指标是多么容易。
本文分为两部分:
- 深入回忆和精确概括。
- 使用先验知识更好地评估精确度。
如果你喜欢这篇文章,我将发布第三部分——使用领域专家采样概括精度的最佳方法。
在每一部分的最后,我将给出一个真实的例子,代码可以在这个 git 存储库中找到:
举例说明在生产中评估精度有多难,以及如何解决这个问题。GitHub…
github.com](https://github.com/avivhadar33/precision-dark-side)
结果毫无疑问地支持了这个理论!
深入回忆和精确
回忆
先说测试集上的召回定义(上式中):
这是对真实表现的概括:
注意,为了一般化,以下数学假设必须成立:这个特定类的分布只需要在测试集和未标记数据之间相同(因为条件y =类,所以没有对其他类的假设)。
因此,通过对特定类的良好标记,我们可以用测试中的召回率来评估算法的真实召回率。当然,不代表未标记数据的标记将导致测试集上的召回,这不会代表算法的真实召回,但这是微不足道的。有时,即使对于一个类,找到代表未标记数据的好的测试集也是一个困难的问题。我认为这是一个度量标准良好推广的最低要求。
精度
让我们继续测试集的精度定义(在上面的公式中):
这是对真实表现的概括:
看起来与召回几乎相同,但有一个很小且非常显著的差异,现在的条件是 Ypred=class ,而不是将问题缩小到召回中的特定类别的条件 y=class 。这个条件取决于算法的结果——算法识别为类的样本,这个组通常包含数据中所有类的样本。在算法没有任何先验假设的情况下,我们得到概化精度的数学假设是:整个测试的分布将与整个未标记数据的分布相同。
这种假设在大多数情况下是不现实的,因为它需要所有类的真实世界的良好表示,包括测试集中正确的比例(权重)。例如:
- 为了对猫图像的分类器进行良好的精度评估,您需要标记世界上所有的动物,甚至所有的物体(取决于数据集)。不仅如此,你还需要对它们进行加权,就像它们在真实分布中的位置一样。
- 更具体的例子:假设我们的猫分类算法把猫和一些特定类型的狗混淆了。因此,为了从测试集中概括精度,我们需要所有这些种类的狗的标签,我们需要像它们在真实分布中的部分一样对它们进行精确加权(很可能我没有这些信息)。对它们进行错误的加权,我们将得到不能很好地代表真实精度的精度值。
- 一般来说,大多数实践应用 ML 的人的经验证明,标签数据几乎从不代表真实数据。
结论
- 在测试集上计算的一般化度量要求不小的假设。
- 对测试的召回度量的概括比对精确度的概括更可靠。
真实数据上的例子
为了演示这一现象,我采用了一个由英文字母组成的数据集(26 个类,每个类对应一个字母),并将其拆分为 3 个(如上图所示):https://www . csie . NTU . edu . tw/~ CJ Lin/libsvmtools/datasets/multi class . html
未标记:
- 整整 20 节课
- 抽取 50%的剩余类别(总共 6 个)进行标注
那些例子并不是真正“未标记的”(我们有它们的标签),但是它们被用来模拟真实的未标记数据,这些数据的分布与标记数据不同。
标注:其余 6 个类的 50%,测试集是每个类的 20%。
可以用这个文氏图来描述:
作者图片|我在文章中用来演示理论的数据分割的维恩图。
通过这种方式,未标记的数据还包含来自算法从未见过的类的数据(就像现实生活中的许多情况一样)。所以召回假设成立,精度假设不成立。下面你可以看到一个算法在标记数据(没有测试)上训练的性能,在测试集上训练的性能和真实性能(在未标记数据上)。算法是 LightGBM,带有默认参数(除了类的平衡权重)。仅为算法训练的类显示的性能:
图片作者|图 1:算法在测试集和未标记集(如上定义)上的召回率和精度。precision_test 是对测试集计算的精度,precision _ unlabeled 是该示例中算法的真实精度。仅为算法训练的类显示性能
因此,正如我上面所说的,在这种情况下,召回从测试中得到了很好的推广(这些类在测试和未标记中分布相同——召回假设)。并且精度没有被很好地概括(尽管在测试中表现良好,但是在未标记上的精度差)。
值得一提的是尽管如此,我认为测试集上的指标非常重要。我认为它们是真正算法性能的上限。这并不总是正确的,但在大多数情况下,它确实证明了自己。
在我的项目中,我遇到了这个问题——我只有客户感兴趣的类的标签,而没有其他类的标签(还有更多)。所有顾客感兴趣的是模型的精确度。正如我前面所展示的,测试性能与真实世界的精度没有任何关系。
值得一提的是 2 领域专家对预测的手动审查可以给你对真实精度的最佳评估,但在大多数情况下,这是一个极其缓慢和昂贵的过程。绝对不是每次实验都能得到的东西。
因此,好消息是有更好的指标可以使用!在下一节中,我将向您展示如何:
- 使用基本先验知识更好地评估算法的真实精度。
- 为您的算法找到最佳决策边界。
- 即使没有先验知识,如何使用新的度量来改进模型性能的比较。
利用先验知识进行精度评估
在我的项目中,我有所有未标记的数据和每个班级真实数量的示例的良好评价(从现在开始将被称为班级规模)。我将向你展示我如何利用这些信息来更好地评估我的算法的真实精度。
召回@K 未标注
为了更好地评估实际精度,我将同时使用测试集和未标记集。我通过算法计算测试集和未标记集中每个样本的类得分,然后相应地对未标记集进行排序。通过对每个类的这种排序,我将 k 个未标记的例子的召回率度量定义为——对于[1,size(Unlabeled)]中的所有 k 个,该度量等于使用 k 个排序的未标记例子的分数作为决策边界的测试集中的召回率。例如,如果第 130 个未标记排序示例的分数是 0.75,那么当决策边界是 0.75 时,在测试上的召回@130 个未标记=召回。
重要符号— 未标记的召回@k 可以通过与召回相同的假设来概括(以相同的方式证明)
让我们看看如何使用上述度量帮助我们基于召回假设来概括精度(提醒—这个特定类的分布只需要在测试集和未标记数据之间相同)。
k 个未标记的精度——更好地评估特定 k 个未标记示例的实际精度
现在,你正在寻找——在回忆假设下计算精度。
我称这种度量精度为@k unlabeled,它由以下等式定义:
解释为什么是对真实精度的评估:
- 分子——在回忆假设下,它等于前 k 个排序的例子中正面例子的数量。Example —如果在一个特定的 k 个未标注的例子中真实召回率(等于假设下的测试召回率)为 70%,类别规模为 200,那么前 k 个未标注的例子中有 0.7*200=140 个正例。
- 分母——当然是前 k 个未标注的例子中的例子数(就 k 个)。
现在,当我们将它们分开时,我们得到了前 k 个未标记样本中的部分正例,也就是 precision !
当然,这个评估也不是完美的,分子只是对正面例子数量的估计(如果回忆假设成立,这是准确的)。但是在大多数情况下,它比测试集上的精度更好。我也使用这个度量作为真实精度的上限(在大多数情况下,它比测试精度更严格)。
重要的符号— 如果你对类的大小有上限或下限,这个度量可以给出真实精度的上限或下限。
重要符号 2— 度量可以得到大于 1 的值。我将在本文的后面解决这个问题。
真实数据示例
我使用未标记集(没有它们的标签)和测试集,根据上面提供的数据计算了这个指标(根据得分 0.5 阈值的相关 k):
图片由作者提供|图 2:通过测试精度和 precision@k 未标记度量进行的真实精度评估。precision_unlabeled 是该示例中算法的真实精度,precision_test 是在测试集上计算的精度,precision_by_recall_at_k 是通过上述 precision@k unlabeled(在分数 0.5 阈值的相关 k 上)的精度评估
你可以很清楚地看到,这种方法能更好地评估这种情况下的真实精度。
回忆@K 无标签对 K 曲线
除了 precision@k unlabeled 之外,通过查看 recall@k unlabeled 对 k 曲线,recall@k unlabeled 可以提供更多关于算法的信息。
一些 recall@k 未标记与 k 曲线的示例(红线标记班级大小):
图片由作者提供|图 Recall @ k 未标记与 k 曲线的示例。红线表示我们试图通过算法预测的班级规模。
我期望的理想曲线是什么样的?对于完美的分类器(没有偏见),我希望线性上升,直到 100%,这将是准确的类大小(蓝色曲线)。换句话说,所有的阳性将出现在类大小线的左侧,如果模型是无偏的,测试阳性和未标记阳性的顺序将是随机的,这将创建一条直线(花一点时间理解这句话)。
现在,我将讨论这一指标中可能出现的两个重要场景。
过拟合
有时,recall@k unlabeled vs. k 曲线显示的结果比理想情况“更好”,这通常是由于标记数据中的偏差而发生的。让我们看看橙色曲线,注意在 k = 3,000 时,召回率是 100%。尽管我们知道班级规模是 5000 人,但这意味着@ 3000 可能的最大召回率是:3000/5000 = 0.6。这也可以通过大于 1 的 precision@k 无标签度量来实现。
对这一现象的合理解释是,标记的数据并不代表整个类,只是它的一部分。在这种情况下,算法仅学习识别类的一部分,并且计算的 recall@k 未标记值将大于其真实值,因为评估是在类的子集上进行的,该子集是比整个类更小的组。这是一个您无法概括您的回忆的情况的示例,因为标记的类与真实的类分布不同,所以概括所需的数学假设不成立(实际上测试中的指标并不代表真实的指标)。
例如 —一个猫分类器,他的所有标记数据不包括黑猫,可能不会将黑猫分类为猫,这将减少未标记数据中被分类为猫的例子的数量。这可能导致在真实的班级规模之前 100%的召回。
欠配合
即使测试中的性能是完美的,召回@k 未标记对 k 曲线显示更差的性能也是合理的。例如,请注意 k=class size 中的绿色曲线,召回率为 50%,这表明精度为 50%(通过 precision@k 未标记的度量)。即使测试评估显示满分,这种情况也可能发生。这也可以通过 precision@k 未标记度量中的低性能来实现。
当测试集分布与未标记的分布非常不同时,就会出现这种情况。
字母数据集中的示例:
图片由作者提供|图 4:回想一下示例中的@k 未标记对 k 曲线(对于类 22 ),尽管测试性能良好,但它仍显示出欠拟合。
正如您所看到的,尽管测试中表现良好(图 1 ),但该类的模型实际表现要差得多。
这个度量是了解您的性能对于生产来说不够好,您需要改进算法的好方法。
现实
真实数据中的召回@k 无标签与 k 曲线如何?大概是这样的:
图片由作者提供|图 5: 2 回忆示例中的@k 条未标记曲线与 k 条曲线。
这只是为了让你对那些曲线在现实生活中的样子有一个好的感觉。关于这些曲线的更多分析可以在 git 资源库中找到。
在没有先验知识的情况下比较模型
这是本节中要记住的最重要的事情。即使没有确切的先验知识(班级规模),也很容易从下面的曲线中认识到,对于每一个小于 500 人的班级规模,哪种模型更好(模型 2)。因为 precision@k unlabeled 的上述公式(如上所示)在 recall@k unlabeled 中是线性的,所以可以看出改进有多显著。这些模型在测试集上有相似的结果,但是您可以通过这个度量标准看到一个明显比另一个好。
图片作者|图 6:同一类不同模型(模型 1、模型 2)的两条 recall@k 无标签对 k 曲线。
我们还可以使用 recall@k unlabeled 与 k 曲线上的“曲线下面积”等指标来优化超参数。当然,这些度量可以在召回假设下进行推广,并且在大多数情况下,它们比测试集上的等价度量要好。这种度量的主要问题是,它“偏好”过度适合标记数据的模型,而不是完美的分类器。
寻找最佳决策边界
recall@k unlabeled vs. k 曲线给你的另一个东西,是对最佳决策边界的更好评估。有许多方法可以选择最佳决策边界,我将展示如何近似最大化 F1 分数的决策边界(这种方法可以推广到其他指标)。我们使用我们对真实精度的更好评估来获得对真实 F1 分数的更好评估:
因此,为了选择最佳决策边界,您需要计算每个 k 的上述度量,并选择使该度量最大化的 k 处的分数。测试集的最佳决策边界和真实的最佳决策边界之间的差异可能是巨大的,这种评估证明了它本身是真实的最佳决策边界的更好的评估。
为了演示这一原理,我使用了之前的数据集,并比较了通过这三个阈值获得的 f1 分数:
- 我们通过算法 0.5 阈值的决策边界得到的 f1-score—f1-score _ unlabeled。
- 到我们通过上面的方法计算的阈值得到的 f1 分数— f1-score_f1。
- 对未标记数据可能获得的最佳阈值(根据 f1 得分度量)— optimal_f1。
作者图片|图 7:用不同阈值(阈值如上所示)的相同预测获得的 f1 分数。
你可以清楚地看到,默认阈值比用这种方法得到的阈值差得多。该阈值性能也接近最佳性能。
结论
- 如上所述的 precision@k 无标签度量可以给你一个算法的真实精度的更好的评估,比在测试集上概括性能更好。
- 我们讨论了 recall@k 无标签与 k 曲线(过拟合和欠拟合)的一些有趣情况,并实现了对其原因的解释。
- 甚至在没有先验知识的情况下,召回@k 条未标记的 vs. k 条曲线可以帮助在不同模型之间获得更好的比较。
数据困境
意见
从一开始就从伦理上思考
作为一名目前沉浸在数据科学训练营中的有抱负的数据科学家,“我如何从一开始就合乎道德地工作?”当我观看《社交困境》时,当我听到特里斯坦·哈里斯(Tristan Harris)和凯茜·奥尼尔(Cathy O'Neil)以及其他许多人讨论大数据和这些无人驾驶的黑盒算法的危险时,这个问题弥漫在我的脑海中,这些算法渗透到我们的潜意识中,为我们做出我们不再理解的决定。这些告密者被归入一个不存在的团体,非正式地称为“硅谷的良心”,他们的故事令人不安。但他们并没有错,他们是在用事后诸葛亮的权威说话。整部纪录片中采访的许多数据科学家和程序员都提到,他们对这些算法可能会变成什么缺乏远见,或者当出现道德困境时,财务底线是致命的一击。换句话说,已经太晚了。所以我的问题是:
“我(我们)如何进入数据科学领域,了解我们现在所知道的,并受益于前人的经验教训?”
我个人的困境
明确一点,这不是影评。我真的很欣赏这部电影,并从中学到了很多东西,唯一比这篇文章的标题更令人畏缩的是穿插在一些最有趣的采访中的一些我能想到的最有趣的技术人员。但这篇文章更多的是个人对数据科学行业日益增长的力量的危险的思考,也是我自己(也许还有其他人)在寻求对给我的工具负责时要记住的路线图。我需要什么样的工具和指导原则才能继续走这条路?听着关于大数据在每次点击和滚动背后做什么的令人痛心的讨论令人生畏,但我被人性化技术的理念以及技术如何能够并且应该被用于比牟取暴利更伟大的目的而振奋。
我个人没有夸大其词的错觉,也不认为下一款会很快显著改变社会运行方式的车型会投入生产,甚至永远不会。但我讨厌有一天发现自己处于这样一种境地,希望自己早点问自己和别人这些问题。在我看来,权力有这种独特的能力来改变我们,而且往往是以我们不总是喜欢的方式,除非我们立足于现实,一路上有制衡。在这里,我没有太多的哲学思想,我已经冒昧地研究了一些关于数据伦理的其他观点,并编制了一些最重要的考虑因素的清单。如果你对了解可怕的黑匣子和科技公司破坏社会结构的方式更感兴趣,我绝对推荐给社会困境一个手表,或者阅读凯茜·奥尼尔的书数学毁灭的武器。它们会让你看到你可能已经意识到的力量,并帮助你理解它们是如何运作的。
我的数据来自哪里?
这是一个关于我们的数据的来源和质量的多方面的问题,并且有一大堆的问题源于这种最初的数据收集的想法。我的同学 Sidney Kung 让我见识了很多关于数据收集和数据隐私的道德规范。根据她的发现,世界上其他地方的私人或个人数据收集者都有更高的标准,而在美国,公司正在存储大量数据,除了“有一天可能会用到”之外,他们自己没有任何意图或计划。事实是,我们制作的模型的好坏取决于我们提供给它们的信息,以及我们判断模型的标准。“垃圾进,垃圾出”这句话在这里再合适不过了。如果一个模型是在一个已经损坏的系统上训练的,该模型将继续以类似的方式预测或分类,并且将潜在地加剧那些偏差,因为它们变得越来越机械一致。
我的模型使用情况如何,如果出错会有什么后果?
我们可以问自己的一个最好的问题是,犯错的代价是什么?这方面最常见的例子是在司法系统和医疗领域提出第一类和第二类错误。在这两种情况下,犯 1 型或 2 型错误的代价更高吗?在司法系统中,应该在“无罪推定”的假设下运作,理论上犯下“假阴性”的第二类错误比指控一个无辜的人犯下他们没有犯下的罪行要好。另一方面,在医学领域,犯 2 型错误的后果要昂贵得多,在这种情况下,检测到实际上并不存在的疾病比错过真正存在的疾病要好。但是每个问题,不管是商业问题还是其他问题,都有它自己的细微差别和成本/收益分析。风险因素和你的研究或建模的含义应该从一开始就进行评估。这类问题的答案不可避免地会影响我们的过程,并帮助我们获得最终想要的结果。
我的模型哪里出现了偏差,我能从中学到什么?
我在熨斗学校的几位老师从第一天起就向我重复了一个概念,那就是“缺少数据本身就是数据。”我们能够从数据集中的空值或缺失值中得出什么结论或推断出什么(同样,也许这又回到了我们的数据来自哪里)。不要嘲笑我的锡帽子,问这样的问题:这个数据集是完整的吗?是否被篡改甚至审查过?谁会从这些数据的分析中获益?可能有助于理解数据集,应被视为任何探索性数据分析步骤的一部分。艾瑞克·希格尔写了一篇非常有用的文章,介绍了在预测性警务中对算法的使用,他在文章中直面一种被称为 COMPAS 的算法的观察到的偏差,指出:
"为此,让我们就观察到的不公平现象对执法决策者进行教育和指导."
同样,Cathy O'Neil(根据我在博客中提到她的次数,我认为她是我的新英雄),在她着手审计算法的方式上是开创性的。她在奥尼尔风险咨询和算法审计公司(ORCAA)的工作为的法律制定者设定界限铺平了道路,在给定某些偏见的情况下,算法可以做什么,不可以做什么。
是否有不止一种方法来解释我的结果?
答案可能是肯定的,正因为如此,这意味着什么呢?反馈在任何领域都很重要,用你的眼睛和头脑以外的东西来看待问题是至关重要的。鉴于在一个以客观为荣的领域中存在大量的主观性,合作将总是有助于我们从多个角度看待问题,并且理解我的解释不是唯一可能的结果是提问和深入的重要一步。
我越深入这个领域,就越能看到模型构建过程的每一个环节都包含着主观性、偶然性和人类决策,统计学家乔治·博克斯(George Box)的名言对我越来越有意义:“所有的模型都是错误的,但有些是有用的。“我希望将这些想法和问题写下来有助于将它们固化在我的脑海中,帮助我建立有用的模型,并给你比你带来的更多的问题。
那些努力监管这些强大工具的人的一些链接:
人道技术中心
数据经济、您的组织和您
马库斯·斯皮斯克在 Unsplash 上的照片
您的组织在数据经济中取得成功所需的 4 种能力和解决方案
新的数据经济已经到来,机会正在到来。有些人可能会说,我们正处于历史上最具破坏性的时代——工业 4.0、数字革命——无论你想怎么称呼它;数据是新的石油。每一位企业领导都想知道如何利用数据的力量做出明智的业务决策,并获得竞争优势。
对数字化转型的影响
CIO 的角色已经发生了变化,它不再是您组织的技术资产的保管人。从这些资产中耗尽的数据将成为转型计划中可利用的新资源,并且是加速变革、改进业务和改善客户体验的关键。首席信息官正在成为数字业务和技术引领创新的所有者。
难道不是时候建立一条通向未来的更好的道路了吗——数字化的未来?
每一次数字化转型的核心都是数据!这些数据为市场竞争创造了一个全新的基础。游戏已经改变了。拥有正确的数据解决方案和技能的组织将是在数字时代生存和发展的最佳选择。数据将为企业创造更多价值,并将为投资组织带来积极的经济影响。
您的企业需要 4 项核心能力:
大数据洞察和智能
借助高级分析、人工智能和机器学习,轻松可视化、分析和理解数据,以获得更好的结果。
最终,你会发现你如何管理和理解你的数据的问题。你不能只是投入更多的人,很快,你将需要找到新的工具和解决方案来解决你的业务问题。
拉斯姆斯·俱吠罗在 Unsplash 上拍摄的照片
云解决方案
化繁为简-减少部署时间,提高组织的有效性和效率,而无需维护和监控系统和部署。利用提供定期产品更新的解决方案,以及来自行业领导者的想法和最佳实践的改进,确保您始终拥有最新、最强大的特性和功能。
Denys Nevozhai 在 Unsplash 上拍摄的照片
数据基础设施
您需要通过集中化自动化和简化运营来降低成本、最小化风险并推动转型。然而,您的软件正在发生变化,它需要不同类型的架构。人工智能、机器学习和边缘计算的新的高风险需求正在迅速改变传统企业系统的工作方式。为了充分利用这一机会,数据基础架构需要从通用解决方案转向专用架构,在这种架构中,存储和计算能力可以针对数据的特定需求进行充分优化。
数据治理
寻找能够轻松获取、理解、管理、操作、统一和共享数据和见解的解决方案。Gartner 分析师安德魯·怀特在 2019 年 12 月写道,虽然数据治理是整体数据管理战略的核心组成部分,但组织应该专注于治理计划的预期业务成果,而不是数据本身。
数据治理的一个关键目标是打破组织中的数据孤岛。当各个业务单位部署独立的事务处理系统而没有集中协调和关注时,通常会出现这些孤岛。数据治理旨在通过协作过程协调这些系统中的数据,来自不同业务部门的利益相关者参与其中。
为了应对这些挑战,必须部署新的技术和策略。众所周知,拥有最佳数据策略的组织将会胜出!问题是,很少有公司真正利用他们的数据,特别是那些继续生活在由组织问题分裂的孤岛中的公司。你的组织是如何准备的?你认为你准备好了吗?
数据科学方法—帮助您入门的策略和技巧
弗兰基·查马基在 Unsplash 上拍摄的照片
作为技术专业人员,我们不断努力拓展创新的边界,将我们的技能应用于改进我们各自组织的产品或服务。数据科学是近年来发展最快的领域之一,它使用科学方法、流程、算法和系统从数据中提取洞察力。作为一名来自科罗拉多大学博尔德分校的数据分析学生,我参与了机器学习项目,这些项目让我能够管理分析生命周期。完成硕士学位后,我发现了 4 个关键步骤,它们可能对数据专业人员从他们的模型中获得增强的预测有用。如果你对分析领域感兴趣,并想了解如何在学术或工作环境中塑造你的数据科学项目,我强烈建议你阅读这篇文章,以便开始你的分析之旅。
- 识别核心业务问题
在开始分析任何数据集之前,理解我们的最终目标是什么是至关重要的。我们试图用数据解决的问题是什么?我们是在试图预测我们的客户,还是在为我们的业务引入新的产品线?更多的时候,我们在没有真正理解核心业务问题的情况下,陷入了试图为我们的分析找到最佳模型的困境。一旦我们确定了我们打算通过数据分析解决的问题,我们就可以更清楚地知道我们需要采取哪些步骤来确保我们走在正确的道路上。
2。选择合适的数据
首先,为了使用数据分析解决任何业务问题,我们需要确保我们拥有的数据是正确的数据。这从分析数据中存在的特征或列开始。特征是您试图分析的对象的可测量属性。在数据集中,它们通常也被称为“变量”或“属性”。例如,包含客户信息的数据集将具有姓名、年龄和性别等特征。数据集中要素的质量对使用该数据进行机器学习时获得的洞察力的质量有着重要影响。您可以通过诸如要素选择和要素工程等方法来提高要素的质量,但重要的是从可以分析的一组初始相关要素开始。
3。预处理您的数据
如果一个原始数据集被立即投入到机器学习模型中,那么预测可能会非常不准确。机器学习模型建立在从数据模式中学习的算法基础上,这需要预处理的数据集。数据越准确,模型就越精确。在建模阶段之前,应该考虑以下 3 个重要的预处理子步骤:
- 数据清理:缺失值处理,去除有噪声/无意义的数据
- 数据转换:数值变量的归一化,从已有特征中构造新属性,概念层次生成。
- 数据缩减:通过编码技术缩减数据大小。两种最有效的降维方法是主成分分析和小波变换。
4。可视化您的数据
数据可视化是理解我们的特征中的任何现有关系或模式的好方法。散点图、直方图、条形图和相关图是我提供特征描述性分析的最爱。根据下面的 Tableau 仪表板,我们可以指出亚特兰大的延误时间最长,并且夏季月份往往最繁忙。从数据可视化中获得的洞察力有助于我们更深入地研究我们的业务问题,标记具有更大影响的数据点和特性。
总的来说,这些方法是启动机器学习项目时需要考虑的优点。作为一名数据分析学生,当我在建模阶段之前实施这些方法时,我在我的学术项目中取得了成功。它们绝不是绝对必要的,但是,如果遵循这些初步的指导方针,您可能会期望在将来从您的模型中看到更好的结果。
数据科学潮流
这将是一段颠簸的旅程
Max Ostrozhinskiy 在 Unsplash 上拍摄的照片
现在是 2020 年,没有会飞的汽车(只有看起来很丑的汽车,很可能是由一个 5 岁的小孩或名字与甜瓜象牙押韵的人用油漆设计的),机器人还没有接管我们的星球,气候变化还没有结束它的进程(还没有)。然而,这种机器人入侵的第一个迹象就在这里:可以跟你顶嘴的机器,可以在象棋比赛中击败最有天赋的人类的机器,可以预测价格和数量以及你下一部最喜欢的电影的机器,可以处理文本、音频和视频的机器。
这就是数据科学/机器学习/人工智能或任何你称之为它的东西出现的地方。数据科学是科学的一个分支,它将现在带到未来,将 10 年前的未来想法带到日常生活中,它刚刚开始,并将继续发展(除非我们人类事先摧毁了地球)。这是要走的之路,不仅因为它非常令人兴奋,还因为这些职位提供的薪水。这让我们看到了我们正面临的现象:每个人都想加入。
数据如雨下
我们生活在一个辉煌的时代,这个时代涉及到一个以数据这个词开始的职业。它无处不在,而且数量越来越多。这是应该去的地方,应该找的工作,应该得到的关注。数据科学专业被评为21 世纪最性感的工作,那是在 2012 年,8 年前就结束了,随着时间的推移,它只会获得更多的关注。
这一切的坏处很简单也很明显:每个人都想加入。每个人都想成为学校里的酷孩子,每个人都喜欢玩闪亮的新玩具。当然,桌子上有很多位置(目前来说),但想要加入的人似乎一样长,如果不是更长的话。但这不是问题所在。
当然,几乎每个公司现在都意识到管理他们的内部或外部数据有很多令人惊讶的好处,即使像可视化这样简单的事情也可以推动业务决策。这意味着越来越多的人需要知道如何做这些事情。但这也不是问题所在。
在过去的几个月里,随着时间的推移,我注意到社交媒体上有越来越多的广告,宣传数据科学学位、课程或他们在那里出售的任何东西。
来自我的 instagram feed 的宣传截图
我就不赘述我在 LinkedIn 上找工作之后这些是怎么开始出现的了。嗨 Z uckerberg ,你好吗?
真的这么简单吗?
“大数据在看着你”,米兰,2019 年 7 月
作为一个在高级计算机架构和机器学习课程之间度过了过去 5 年的人,我开始问自己:真的这么简单吗?在短短一年、六个月甚至一个月的时间里,把多年来介绍给我的资料全部吸收就这么简单吗?我和我所有的同学,我们之前的人和之后的人,弥补了所有的困难吗?最后,我们能做同样的工作,为我们工作的公司创造同样的价值吗?
我甚至查看了这些硕士学位和各种课程的计划,他们提供了什么,以下是我的发现:
课程的情况
- 不需要任何先验知识。一点都没有。
- DS 的世界介绍:当然,进去之前需要一些背景。你还需要介绍它包含的许多不同的分支,因为是的,这个术语本身并不是不言自明的。推荐系统、自然语言处理、图像分析、机器人技术;仅举几个例子。但通常情况下,这种区分是不存在的,至少在课程教授的知识中是不存在的,这些分支中的每一个都没有被详细教授。
- 统计和概率介绍:很高兴知道我们至少已经达到了将概率和统计的基础知识视为关键组成部分的地步。但是我们确定仅仅浏览几个定义就足以理解所有的公式和定理代表了什么吗?
- Python 介绍:假人编程。变量,列表,数组和库,我们准备好了,对吗? print("等一下,老虎!")。还有一点,计算时间只是其中之一。但是话说回来,当我们处理大数据集时,我们真的需要知道这些吗?
- 高级统计方法介绍:一切都只是线性回归,对吧?知道你已经准备好了。
- 最后但同样重要的是,深度学习:
硕士学位的情况
说到硕士学位,通常为期 1 年,我们当然是在谈论别的东西。在这种情况下,这个学位最常见的结构是在实习的同时学习各种课程。介绍的各种概念其实还挺多的:我们有统计学的 元素 、编程(R 和 Python)、并行编程、机器学习算法、数据库、人工智能、网络安全等等。考虑到通常为期 6 个月的实习期,我们在 1 年的时间内引入了所有这些不同论点的要素。我不禁想到,几乎所有这些概念都是如何在一门理科硕士课程中教授一整个学期的,然后是一场考试,通常还有一个项目。
稍加研究就会发现,这些学位的很大一部分实际上是以经济、商业和金融为导向的。具有经济学及其所有分支背景的人通常是针对。虽然直接针对 DS 算法的最终和最常见的应用是有意义的,但这也像是一种捷径,主要是因为我们排除了可以实现的全部潜力,以某种方式从等式中移除了科学的概念以及该领域的主要特征方面:如果设计得当,几乎可以应用于任何类型问题的解决方案。
引起我注意的另一个方面是,经常提到需要专家的知识来分析这种解决方案的结果,甚至通过可视化来分析数据的潜在描述性分析。这让我想知道:到目前为止,DS 的作用不就是提供一个解决问题的方法,这个方法在统计学上是有意义的,并得到问题专家的验证吗?自从我开始研究这个领域以来,有一条经验法则一直萦绕在我的脑海中,那就是你总是需要与专家合作来解决手头的问题。如果已经有一个业务专家,为什么不能有一个 DS 专家,让他们两个在中间相遇?
跳上那辆车
这条通往数据科学的道路并不仅仅是计算机科学工程师的专利,但它需要大量T2的努力,大量的的奉献和好奇心,它要求你始终跟上最新的趋势,最新版本的库,市场提供的最新工具,以及提高你的编程技能。从这些在线课程或硕士学位开始,肯定会让你熟悉这个迷人的世界,但它不会让你成为专家,也不会让你成为非常有能力在公司内部应用这些方法并找到可靠解决方案的人。并不是安装一个 Python 库那么简单,把 model.fit(X_train,y_train) 和 model.predict(X_test) 应用到你的数据上。与那些学过工程学并在该领域获得硕士学位的人不同,多年的学习不仅让他们获得了更多的概念知识,还让他们获得了解决问题的思维方式,这是将算法应用于解决日常问题的关键。这就是它本身,这一切的全部目的。
数据科学面试蓝图
在我准备离开舒适的咨询工作几个月后,Deliveroo 取消了我的数据科学经理职位,我没有太多的安全网可以依靠,也不会失业太久。我将分享帮助我在 FaceBook 上获得两个数据科学家职位的一切,希望它可以帮助你们中的一个人,他们也发现自己处于几个月前我所处的不幸境地。
资料来源:Unsplash.com
1.组织是关键
我在谷歌(和 DeepMind)、优步、脸书、亚马逊面试过“数据科学家”的职位,这是我观察到的典型面试构建主题:
- 软件工程
- 应用统计
- 机器学习
- 数据争论、操作和可视化
现在没有人指望你在所有这些方面都有超级研究生水平的能力,但是你需要知道足够多的知识来说服你的面试官,如果他们给你这份工作,你有能力胜任。你需要知道多少取决于工作规范,但是在这个竞争越来越激烈的市场中,没有知识会丢失。
我建议使用概念来组织你的工作准备。它非常通用,使您能够利用间隔重复和主动回忆原则来确定学习和部署在数据科学家访谈中反复出现的关键主题。Ali Abdaal 有一个关于记笔记的很棒的教程,目的是在面试过程中最大化你的学习潜力。
我过去常常一遍又一遍地浏览我的想法笔记,尤其是在我面试之前。这确保了关键主题和定义被加载到我的工作记忆中,当遇到一些问题时,我不会浪费宝贵的时间“嗯嗯嗯”的。
2.软件工程
不是所有的数据科学家角色都会问你算法的时间复杂度,但所有这些角色都会要求你写代码。数据科学不是一项工作,而是一系列工作,吸引了各行各业的人才,包括软件工程领域。因此,你是在与那些知道如何编写高效代码的人竞争,我建议你在面试前每天至少花 1-2 个小时练习以下概念:
- 数组
- 哈希表
- 链接列表
- 基于两点的算法
- 字符串算法(面试官喜欢这些)
- 二进位检索
- 分治算法
- 排序算法
- 动态规划
- 递归
不要把算法背下来。这种方法是没用的,因为面试官可以就算法的任何变体向你提问,你会迷失方向。取而代之的是学习每种算法背后的 策略 。了解什么是计算和空间复杂性,并了解为什么它们对构建高效代码如此重要。
LeetCode 是我在面试准备期间最好的朋友,在我看来每月 35 美元是物有所值的。你的面试官只能从这么多算法问题中抽取样本,而这个网站涵盖了大量的算法概念,包括可能或已知在过去问过这些问题的公司。还有一个很棒的社区,他们会详细讨论每个问题,并在我遇到无数“困难”的时候帮助我。如果 35 美元的价格太贵,LeetCode 有一个“精简”版本,有一个更小的题库,就像其他伟大的资源 HackerRank 和 geeksforgeeks 一样。
你应该做的是尝试每一个问题,即使这是一个需要花费很长时间的暴力方法。然后看模型解,试着算出最优策略是什么。然后仔细阅读什么是最优策略,试着理解 为什么 这是最优策略。问自己一些问题,比如“为什么快速排序的平均时间复杂度是 O(n)?”,为什么两个指针和一个 for 循环比三个 for 循环更有意义?
3.应用统计
数据科学隐含着对应用统计学的依赖,这种依赖程度取决于你申请的职位。我们在哪里使用应用统计学?它出现在我们需要组织、解释和从数据中获得洞察力的任何地方。
在我的采访中,我深入研究了以下话题,你可以确信我被问到了每个话题:
- 描述性统计(我的数据遵循什么分布,分布的模式是什么,期望,方差)
- 概率论(假设我的数据遵循二项式分布,在 10 次点击事件中观察到 5 个付费客户的概率是多少)
- 假设检验(构成 A/B 检验、T 检验、方差分析、卡方检验等任何问题的基础)。
- 回归(我的变量之间的关系是线性的吗,偏差的潜在来源是什么,普通最小二乘解背后的假设是什么)
- 贝叶斯推理(与频率主义方法相比有什么优点/缺点)
如果你认为这是大量的材料,你并不孤单,我被这类面试中预期的知识量和互联网上大量可以帮助我的信息淹没了。当我为面试复习的时候,我想到了两个无价的资源。
- 概率统计简介,这是一门开放的课程,涵盖了上面列出的所有内容,包括帮助你测试知识的问题和考试。
- 机器学习:贝叶斯和优化视角作者塞尔吉奥·泽奥多里德斯。这更像是一部机器学习教材,而不是应用统计学的专门入门,但这里概述的线性代数方法确实有助于理解回归的关键统计概念。
你要记住这些东西的方法不是通过记忆,你需要解决尽可能多的问题。Glassdoor 是面试中常见的应用统计问题的一个很好的解决方案。到目前为止,我参加的最具挑战性的面试是 G-Research,但我真的很喜欢为考试而学习,他们的样本试卷是测试我在应用统计学修订中取得进展的绝佳资源。
4.机器学习
现在,我们来到了野兽,这是我们千禧年时代的流行语,也是一个如此广泛的话题,以至于人们很容易在复习中迷失,以至于想要放弃。
本学习指南的应用统计学部分将为您开始学习机器学习奠定非常非常坚实的基础(基本上只是用花哨的线性代数编写的应用统计学),但在我的采访中,有一些关键概念反复出现。以下是按主题组织的一组(绝非详尽的)概念:
度量—分类
度量—回归
偏差-方差权衡,过拟合/欠拟合
型号选择
抽样
假设检验
这确实属于应用统计学,但是我怎么强调学习统计能力的重要性都不为过。这在 A/B 测试中非常重要。
回归模型
普通线性回归,它的假设,估计量的推导和局限性在应用统计学部分引用的资料中有相当详细的介绍。您应该熟悉的其他回归模型有:
聚类算法
分类模型
内容很多,但是如果你的应用统计学基础足够扎实的话,很多内容都是微不足道的。我建议了解至少三种不同的分类/回归/聚类方法的来龙去脉,因为面试官总是(以前也曾经)问“我们还可以使用哪些其他方法,有哪些优点/缺点”?这是世界上机器学习知识的一个小子集,但如果你知道这些重要的例子,面试会流 很多 更顺利。
5.数据处理和可视化
“在应用机器学习算法之前,数据角力和数据清洗的一些步骤是什么”?
我们得到了一个新的数据集,你需要证明的第一件事是你可以执行探索性数据分析(EDA)。在你学习任何东西之前,要意识到在数据争论中有一条成功之路:熊猫。如果使用得当,Pandas IDE 是数据科学家工具箱中最强大的工具。学习如何使用 Pandas 进行数据操作的最佳方式是下载许多许多数据集,并学习如何自信地完成以下一系列任务,就像你早上泡咖啡一样。
我的一次采访包括下载一个数据集,清理它,可视化它,执行特征选择,建立和评估一个模型,所有这些都在 一个小时 内完成。这是一项非常艰巨的任务,我有时会感到不知所措,但我确保在实际尝试面试之前,我已经练习了几周的管道模型制作,所以我知道如果我迷路了,我可以找到我的路。
建议:精通这一切的唯一方法是实践,而 Kaggle 社区拥有关于掌握 EDA 和模型管道构建的惊人的知识财富。我会查看一些顶级笔记本上的一些项目。下载一些示例数据集并构建您自己的笔记本,熟悉 Pandas 语法。
数据组织
生命中有三件确定的事情:死亡、纳税和被要求合并数据集,并对所述合并数据集执行分组和应用任务。熊猫在这方面非常多才多艺,所以请练习练习。
数据剖析
这包括感受数据集的“元”特征,例如数据中数字、分类和日期时间特征的形状和描述。您应该始终寻求解决一系列问题,如“我有多少观察值”、“每个特征的分布是什么样的”、“这些特征意味着什么”。这种早期的概要分析可以帮助您从一开始就拒绝不相关的特性,例如具有数千个级别(名称、唯一标识符)的分类特性,这意味着您和您的机器以后的工作会更少(聪明地工作,而不是努力地工作,或者类似的事情)。
数据可视化
在这里,你问自己“我的特征分布是什么样的?”。给你一个建议,如果你没有在学习指南的应用统计学部分学习过箱线图,那么这里我强调你要学习它们,因为你需要学习如何直观地识别异常值,我们可以稍后讨论如何处理它们。 直方图和核密度估计图 在查看每个特征的分布特性时是非常有用的工具。
然后我们可以问“我的特征之间的关系看起来像什么”,在这种情况下,Python 有一个名为 seaborn 的包,其中包含非常漂亮的工具,如 pairplot 和视觉上令人满意的关联图的热图。
处理空值、语法错误和重复的行/列
缺失值在任何数据集中都是必然的事情,并且是由多种不同的因素引起的,每种因素都以其独特的方式导致偏差。关于如何最好地处理缺失值,有一个完整的研究领域(有一次我参加了一个面试,希望我能非常详细地了解缺失值插补的各种方法)。查看这本关于处理空值的初级读本。
当数据集包含手动输入的信息(如通过表单)时,通常会出现语法错误。这可能导致我们错误地得出结论,分类特征具有比实际存在的更多的级别,因为“hOt”、“Hot”、“hot/n”都被认为是唯一的级别。查看这本关于处理脏文本数据的初级读本。
最后,重复的列对任何人都没有用,重复的行会导致过度表示偏差,所以尽早处理它们是值得的。
标准化或规范化
根据您正在处理的数据集和您决定使用的机器学习方法,对您的数据进行标准化或规范化可能会很有用,这样不同变量的不同尺度就不会对您的模型的性能产生负面影响。
这里有很多东西要经历,但老实说,帮助我的不是“记住一切”的心态,而是尽可能多地学习灌输给我的信心。在公式“点击”之前,我肯定失败了很多次面试,我意识到所有这些东西都不是只有精英才能掌握的深奥概念,它们只是你用来建立令人难以置信的模型并从数据中获得洞察力的工具。
祝你们求职好运,如果你们需要任何帮助,请让我知道,我会尽可能回答邮件/问题。
数据科学面试清单
赢得下一次面试现在很容易了
I 数据科学职位的面试可能会很棘手。意识到经常测试的题目的长度和广度对你的成功是至关重要的。
在过去 18 个月的大部分时间里,我都在面试实习和全职工作,如果我说这没有压力,那是在撒谎。在整个过程中,我意识到,只有你知道自己在找什么,才有很多资源可以利用。那么,如何了解需要什么呢?从哪里开始,离你说“我准备好了”还有多远?
这些问题的答案就在接下来的节目中。
我相信有一个清单是追踪进展的最简单和最容易的方法之一。它不仅对“学习阶段”有用,因为它使你能够相应地计划,而且在“面试前一天晚上”它有助于确保你不会错过修改重要主题。
下面是我长期策划的数据科学面试所需的 5 大技能的综合清单。
1。SQL
- 使用 WHERE、HAVING、GROUP BY、ORDER BY 根据条件筛选和聚合数据
- 基于连接组合表:左连接、右连接、内连接和外连接
- 编写子查询和实现自连接
- CASE 语句,NVL,NVL2,ISNULL,COALESCE
- 窗口函数,如等级、密集等级、行数、滞后超前、整体
- 常用表表达式
- 使用空值和日期时间对象非常重要
- 理解主键、外键、代理键等概念,以及为什么数据完整性很重要
2。Python
- 用 Python 写 basic 程序。解决 Leetcode 的简单问题的能力
- 使用 NumPy 、 Pandas 进行数据操作。这包括了解这些库中可用的内置特性,这些特性使得数据操作更加容易
- 使用 Matplotlib 、 Seaborn 进行数据可视化。这包括理解你所拥有的数据,以及使用散点图、折线图、条形图、直方图、箱线图等常见图表来展示数据的最佳方式
3。统计数据
- 理解平均值,中位数,众数,范围,标准差,偏斜度,峰度
- 概率-基本和条件概率,贝叶斯定理
- 分布-二项式、泊松、正态、均匀、指数
- 置信区间的概念,t 检验,假设检验(1 和 2 尾检验),A/B 检验的概念
- p 值的概念
4。机器学习/预测建模
- 线性回归
- 逻辑回归
- KNN
- 基于树的模型——决策树、随机森林、袋装/助推树
- SVM
- 聚类(基本的,如 K-means,层次)
- 主成分分析
对于上述每个算法,您应该:
- 能够用简单的术语和科学的方法解释它
- 了解其背后的数学原理
- 能够用 Python 实现它
- 了解评估模型的指标
5。产品感觉/直觉
产品感是什么意思?
关键在于你对产品的了解程度:它是如何工作的,它的目标是什么,以及它如何影响客户。彻底理解产品有助于在解释数据和提出正确问题时采取正确的方向。
如何培养产品感:
- 想想你将要面试的公司生产的产品。它如何支持公司的使命?产品增加了什么价值?谁是客户,他们如何受益?
- 产品会与哪种数据相关联?从两方面考虑:卖家和消费者
- 该产品面临的主要挑战是什么?你如何解决它们?
我希望这个清单对你有用。我打算很快分享更多关于数据科学面试的信息。在评论区让我知道你有兴趣了解什么,让我负责!在那之前,记住隧道的尽头有光,你会到达那里的!
👩🏻💻在 LinkedIn 和 Instagram 上了解更多我的职业历程。
数据科学之旅
如何规划蒸蒸日上的职业生涯
阿尔瓦罗·雷耶斯在 Unsplash 上拍摄的照片
介绍
在我的职业生涯中,我决不是在我想要的地方,但是我享受我旅程的每一点。之前,我说过 最重要的数据科学项目 包括不断增加自己的价值。
每个数据科学家都必须做的项目
towardsdatascience.com](/the-most-important-data-science-project-458d016ef8a6)
虽然我有偏见,但写关于数据科学的博客是不断为自己增加价值的好方法,因为当你写博客时,你巩固了你的学习,改善了交流并提升了你的品牌。像 Medium 这样的平台使得写博客比以前更容易了。
注意:关于如何开始写博客的更多细节超出了这篇文章的范围,但是如果你想了解更多,我建议你观看 Ayodeji Awosika 的 Youtube 频道。
每个旅程都有终点。
当我第一次学习驾驶时,我花了一些时间来适应汽车(主要是离合器控制),但一旦我足够舒适,我就参加了考试并通过了。现在,我只在需要去某个地方的时候才开车…
同样,当你对数据科学的各个方面有了感觉,并变得有些适应(即数据清理、特征工程、数据可视化和建模)时,我们会进行一次测试,这可能意味着被雇用或赢得一场比赛等。当我们通过,想法是现在使用你的技能带你到不同的目的地。
在这篇文章中,我将分享我是如何规划我的数据科学之旅的。
注意:这里假设你对数据科学有所了解
结束是第一位的
成功是相对的,因此你应该定义成功对你来说意味着什么,看起来像什么,否则别人会的!
成功是内心的平静,这是自我满足的直接结果,因为你知道你尽了最大努力去成为你有能力成为的最好的人。
在开始我的数据科学博客之前,我阅读了许多围绕这些主题的文章,例如人们如何通过写博客每月赚 2000 美元以上,或者他们如何在 4 个月内迅速传播,以及如何在 x 天/周/月内获得 5000+粉丝,我不再阅读这些帖子了!
我并不是说这些东西不是一种逗自己开心的可爱方式,但随着我成为一名作家,我意识到这些只是真正成功的副产品,尽管如此,我还是把这些东西作为衡量成功的标准。
当你把别人的成功作为衡量成功的标准时,你就让自己变得痛苦。
虽然最初的意图是保留我一直在学习的东西,但当我看到其他人能够在 Medium 上做什么时,我立即想尝试一下。我想在 4 个月内获得 10,000 名粉丝,然后我把目标改为每月赚 2000 美元,然后我想获得更多的工作机会。但是为什么呢?我没有理由做这些事情。
如果不是因为我之前的公司在新冠肺炎让世界暂停的时候让我休假,我可能会完全停止写博客。
我使用了博客的例子,因为现在博客与我作为一名数据科学家想要去的地方是一致的。为了提升你的数据科学职业生涯,你必须首先确定你想把你的职业生涯带到哪里。
对你来说,成功的数据科学家是什么样的?
您是首席数据科学家吗?
你在建立团队吗?
你在指导别人吗?
你更喜欢计算机视觉任务吗?
你创办了一家初创公司吗?
逆向工程
有了一个明确定义的结尾可以参考,从未来的自己到现在的自己进行交叉参考会更容易确定我们是否在正轨上,但如果我们能找到已经在我们岗位上的人就更好了。
我们的工作是弥合从我们现在所处的位置到我们未来想要去的位置之间的差距。
你想成为一名围棋大师吗?是的— 找一个大师级的人,然后模仿他们成为大师会有所帮助。
如果你告诉自己,你想成为一名首席数据科学家,你的工作就是寻找成为一名首席数据科学家需要什么,这意味着你必须学习不同的途径、必要的步骤、态度、心态等,这些都是你成长为这个角色所应该具备的……
如果你能找到一位首席数据科学家并向他们提问,你可能会加速你的成长。
我可以走哪条路线到达我想去的地方?
谁处在我想要的位置上,我可以模仿他?
像艺术家一样偷窃——奥斯汀·克莱恩
你明白我的意思了。
迫切的耐心
我知道这听起来可能有些矛盾,所以让我们来定义一下“紧急耐心”
紧迫的耐心每天都带着紧迫感行动,但对时间要有现实的看法。
一般来说,成为互联网上最受认可的数据科学家之一,不是我们在周五下午喝酒之前就能迅速做到的。因此,我们应该认识到可能需要 5 年(也许更短,也许更长)才能达到我们设定的目标。
时间是我们最大的美德!
如果我们能够意识到我们现在的位置和我们想要的位置之间的时间间隔,并且每天都致力于寻找机会朝着这些目标前进,那么我们就在练习紧急练习。
如果你喜欢这篇文章,你可能也会喜欢:
当承担与人工智能相关的角色时,必须做的事情没有被充分提及
towardsdatascience.com](/how-to-secure-a-data-science-role-you-actually-want-169afc52019b) [## 用 4 个步骤开始您的数据科学之旅
开始数据科学职业生涯的自以为是的路径指南
towardsdatascience.com](/start-your-data-science-journey-in-4-steps-f5b5a6e7e80b) [## 有效撰写技术博客的技巧
我从 8 个月的持续写作中学到了什么
medium.com](https://medium.com/towards-artificial-intelligence/tips-for-effective-technical-blogging-b3d955d452d)
让我们继续 LinkedIn 上的对话…
[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn
在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有一个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/kurtispykes/?originalSubdomain=uk)
数据科学方法
入门不一定要绕圈子。
图片由皮克斯拜的 Gerd Altmann 提供
介绍
这是关于数据科学方法的一个简短系列文章的开始。它们是专门为补充跳板的数据科学职业跟踪课程而设计的。撰写关于方法的文章是一项艰巨的任务,因为没有像和数据科学方法这样的单一事物。我的意思是,没有一个你可以自动遵循的过程能保证产生理想的结果。然而,有一些指导原则会指引你走向正确的方向。如果你愿意,可以把它们想象成一颗北极星,让你跟随。
CRISP-DM
一个有价值的行业标准流程是用于数据挖掘的跨行业流程( CRISP-DM )。描述这个过程的文章很多,这里就不赘述了。概括地说,CRISP-DM 识别了六个阶段:
- 商业理解
- 数据理解
- 数据准备
- 系统模型化
- 估价
- 部署
商业理解
是的,我们想清楚地了解业务环境。否则,我们如何知道我们真正在解决什么问题,以及一个可行的解决方案是什么样的?
数据理解
是的,我们想了解数据。它对解决业务问题有用吗?我们信任它吗(或者至少我们可以把我们的担忧圈起来)?
数据准备
我们将不可避免地需要准备数据,因为数据很少是为了任何分析的目的或为了数据科学家的方便而收集的。
系统模型化
做完这些之后,我们终于可以进入更有趣的建模阶段了。这并不一定意味着机器学习!充分理解数据中的某些关系可能就足够了;这可能是项目“建模”的最终目标。是的,它通常会涉及机器学习,但任何机器学习工作的一个重要前提是通过探索性数据分析来洞察数据中的模式。
估价
然后我们要评估我们的理解,或者说我们的模型有多好。它是否足以满足业务需求?我们有足够的信心提出一些明确的结论吗?与之前的解决方案相比,模型是否有优势?
部署
如果我们的数据产品足够好,那么我们会想要“部署”它。在某些情况下,部署产品可能意味着传递获得的知识。这需要以适当的可理解的格式到达适当的接收者。在其他情况下,部署可能意味着将机器学习模型传递到生产流程中,在生产流程中,它将生成驱动自主业务流程的预测。
跳板的数据科学方法
但是,如果已经有了数据科学的行业标准流程,为什么还要定义一个新的流程呢?首先,CRISP-DM 并不是数据科学项目管理的唯一游戏。正如这篇智能视觉文章所强调的,CRISP-DM
是一系列理想化的事件。在实践中,许多任务可以以不同的顺序执行,并且经常需要回溯到先前的任务并重复某些动作。该模型并不试图通过数据挖掘过程捕获所有可能的路线。
这可能会给数据科学领域的新人带来巨大挑战,更不用说教师了。你总是从同一点开始吗?你什么时候走回头路?你回溯了多远?你重复多少次,直到你宣布整个努力“完成”?
考虑到这一点,我们可以将过程简化到一个更线性的路径,在很大程度上避开了反复往复的工作流程的细微差别,但仍然保持对科学方法的信心。我们将在这里指出,您应该不断地重新评估您的假设,并且永远不要害怕根据所学到的经验重新审视早期的步骤。
因此,我们在这里概述了一个序列,它不可避免地做出一些假设和简化,但是一个序列,你有了经验,将能够建立并满足你的需要。
希望你能看到上述六个 CRISP-DM 步骤的广泛共识。正如我们已经讨论过的,真正的过程不可避免地包含迭代周期。这些步骤与 CRISP-DM 的许多不同之处在于您在流程中应用切割的位置以及如何标记它们。
问题标识
你要充分识别要解决的真正问题,否则你从一开始就走错了方向!这与 CRISP-DM 步骤直接对应。
数据争论
数据争论是一个宽泛的术语,很容易涵盖数据的获取和任何最初的数据改造,以及持续的数据转换。要理解这些数据,你首先需要获得它们,很可能是从一些原始来源获得的。这一步跨越了 CRISP-DM 的数据理解和数据准备的界限。事实上,数据争论可以说是贯穿整个过程的活动。
探索性数据分析
这与 CRISP-DM 的数据理解步骤密切相关。我们把它放在这里是因为你通常不得不争论数据来真正探索它,从而理解它。
预处理和训练数据
预处理和训练数据开发也可视为数据准备的一部分,但也构成建模的一个方面。因为预处理与建模有着千丝万缕的联系,所以 CRISP-DM 建模步骤不可避免地会有相当多的交叉。
系统模型化
CRISP-DM 将评估作为一个独特的步骤,但它可以说是任何模型开发工作的隐含部分。
证明文件
最后,CRISP-DM 将部署作为最终步骤。在这里,我们把文档作为一个部署工件来关注。整个课程可以致力于将机器学习模型投入生产…
学习的数据科学
苹果 | 谷歌 | SPOTIFY | 其他
猫周上 TDS 播客
背景图片由韦斯·希克斯
编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:
如果你对提升你的编码游戏感兴趣,或者对你的数据科学游戏感兴趣,那么花一些时间去理解学习过程本身是值得的。
如果有一家公司对学习过程的研究比其他任何公司都多,那就是 Codecademy。Codecademy 拥有超过 6500 万用户,对于如何让人们学习如何编码有着深刻的理解,这就是为什么我想在本期播客中与他们的数据科学负责人 Cat Zhou 交谈。
以下是我最喜欢的一些外卖食品:
- 培养具有不同教育背景的团队有很多价值。计算机科学专业的学生、经济学家、商人和顽固的贝叶斯主义者都注意到了数据中不同类型的机会,学习如何让这些团队合作是管理数据科学工作的关键。
- 根据 Codecademy 的数据,那些沉迷于内容,并在短时间内编写一大堆代码的人从长远来看不会保持他们的编码习惯。因此,突发的编码活动可能不是最好的方式,因为它们和临时抱佛脚应付考试的效果一样。关键是找到可持续参与的“最佳点”,以确保编码成为一种长期的习惯。
- 随着数据科学越来越受到重视,数据团队与产品团队的结合越来越紧密,产品团队开始依赖数据团队来帮助指导新功能的开发。因此,数据科学家需要培养良好的产品直觉,以便能够与产品经理、设计师和开发人员沟通,这些人依靠他们来全面了解用户行为。
你也可以在这里的 Twitter 上关注猫,以跟上她的工作,我在这里。
数据科学、国际象棋和建模
国际象棋如何提高你的数据科学技能
乔治·霍丹的照片,公共领域
象棋和数据科学有很多共同点。一些看似表面的相似之处包括冒名顶替综合症和面对压倒性的复杂性和优柔寡断时的无能为力感,所有这些都是在时间紧缩的基础上发生的。
但是,如果我们更仔细地观察,这些直接的相似性掩盖了领域之间真正更深层次的相似性。这些类型的体验通常不来自轻松的爱好:沮丧、复杂、绝望、狂喜、困惑、骄傲和理解是一种追求的标志,这种追求在活动期间及以后全心全意地消耗练习者,而专门研究象棋或数据科学的一生和书籍展示了属于这两者的体验强度。
当然,我们所谓的“数据科学”在历史上一直是简单的旧统计数据,尽管不可否认没有机器学习或深度学习、的狂热,但经验丰富的数据科学家都非常清楚,通常 A/B 测试或双样本假设测试可以提供比神经网络更多的价值和可理解的洞察力。
这是一个进入国际象棋和数据科学之间的主要基本相似之处的好切入点,即在任一类别中,经验、模式识别和直觉都是成功的驱动因素。众所周知,国际象棋大师尤其成功,因为他们通过漫长而密集的经历获得了深刻的模式识别。虽然模式识别的确切解释方面还不清楚(因为只有几十年经验的年轻大师可以战胜有一生经验的老大师),但很明显,国际象棋比它最初看起来更具贝叶斯性,特别是在围绕国际象棋技能的错误算法态度的背景下。
象棋背后的主要技巧
关于国际象棋大师思维的精彩讨论可以在这里找到。虽然模式识别是一个总的主题,但讨论的主要焦点是关于特级大师本身的思维过程。促使一名巅峰状态的特级大师在比赛期间每天燃烧高达 6000 卡路里的典型想法和观察结果是什么?
斯坦福大学研究灵长类动物压力的罗伯特·萨波尔斯基(Robert Sapolsky)表示,一名国际象棋选手在比赛中每天可以燃烧高达 6000 卡路里的热量,是普通人一天消耗量的三倍。根据重大比赛之前、之中和之后的呼吸频率(在比赛期间增加两倍)、血压(升高)和肌肉收缩,萨波尔斯基认为,大师对国际象棋的压力反应与精英运动员的经历相当。- 艾西瓦娅·库马尔
答案是没有深入的算法思维。有一种神话认为,国际象棋大师是人类计算机,不知何故能够多线程处理,并以远高于其他人类的规模处理超人的精神排列。
即使是超级计算机也没有解决象棋问题,因为可能的象棋游戏数量的下限是由 10 个⁰描述的,这是象棋的博弈树复杂性,也称为香农数。就排列处理而言,即使是展望未来的 6 或 7 步棋,对国际象棋大师来说也和新手一样困难。
更确切地说,大家一致认为,大师们在发现威胁、总结立场并将其保存在长期记忆中,以及识别来自这些状态的必然路线方面要快得多。
虽然这似乎意味着大师们看到了“更多的未来”,但一旦棋盘上的棋子减少到两个国王和棋子接近皇后晋级,新手同样可以在 4 或 5 步内看到将死。不同之处在于,大师们可以处理更多的复杂性,理解噪音中最重要的信息,并识别他们面前相对较少(通常是被迫的)的选项,有效地将可能的排列减少到一个小得惊人的决策树。重要的一点是,他们并不是更好的排列处理器:他们只是更有能力将复杂的状态简化为不太复杂的状态,然后根据之前对游戏状态和模式识别的经验以及对状态的最高心理表征来做出决定。
据推测,加里·卡斯帕罗夫可以记住“他在过去 6 个月中下的所有棋”,而芒努斯·卡尔森则可以记住 10,000 盘棋,比尔·沃尔的一篇文章似乎证实了长期记忆在国际象棋中的解释意义。
这些与数据科学有什么关系?
因为在数据科学中,这个过程的大部分被称为建模!STEM 的词汇通常是有限的,因为它是有用的,虽然建模与统计模型有特定的内涵,但建模的过程几乎是相同的。
虽然我们经常想到 Python 中的线性回归或随机森林模型,使用 sklearn 和 fit 在一组 numpy 数组上构建,但基于上下文的特征工程、对数转换、清理和输入空值以及可视化数据以更深入地理解数据的实际过程都利用了相同的技能,出于相同的目的,就像一位大师盯着棋盘一个小时燃烧卡路里一样:以改进预测并在直观的层面上获得对数据的更大范围的理解。这种更大范围的知识通常被称为“领域知识”或“业务理解”,或科学背景下的理论理解,并符合数据挖掘的跨行业标准流程,或 CRISP-DM:
Kenneth Jensen 的 CRISP-DM,知识共享
除此之外,在国际象棋中,我们可能会将这第一步描述为“游戏状态理解”,对颜色的深入而直观的理解——分别接近将死,或优势,,这可以通过平均厘泊损失或计算机确定的游戏强度来粗略衡量。CRISP-DM 中的“部署”步骤类似于实际的国际象棋移动。
虽然统计建模忽略了国际象棋大师思维过程的内涵,但步骤的意图和流程惊人地相似,特别是建模的“适应”和“预测”步骤如何等同于大师们广为人知的“向前看 20 步”类型的算法处理,而事实上,大部分真正的技能来自长期记忆、模式识别、对问题的上下文理解以及思维建模的最高敏捷性和精确度。
我相信对于一个有抱负的数据科学家来说,国际象棋可以是一个有价值的时间应用,因为它不仅对个人有益,而且丰富了数据科学家的技能。
而且,很好玩。感谢阅读!
数据科学流程—成功项目的 8 个步骤
当谈到数据科学项目时,对于完成数据科学项目的必要步骤有一种不清楚的感觉。在本文中,我将讨论每个数据科学家需要经历的 8 个主要步骤。我第一次从事数据科学项目时,对完成一个完整的分析需要什么没有清晰的认识。我希望这篇文章能让那些刚接触数据科学并希望有一个循序渐进的项目计划的人生活得更轻松。对于那些更有经验的人来说,我很想在评论区听到你对数据科学项目的最佳方法的想法。你会做些不同的事情吗?
8 个主要步骤
作者图片
拿起你最喜欢的热饮,让我们开始吧。我将指导你完成每一步,让你尽可能简单地从头到尾理解项目生命周期的每一部分。
1。看大图
许多人认为第一步是马上获得数据。然而,在我们到达那个阶段之前,我们首先需要对我们真正想要解决的问题有一个清晰的认识。你应该经常问你自己和你老板的第一个问题是我们实际上想要解决什么问题,这个项目的目标到底是什么。我们需要问自己,这个项目的最终接受者将如何使用和利用我们的项目。在你继续下一步之前,这是一个非常关键的问题。问自己这个问题的重要性不可低估。询问我们项目的原因和目的将引导您回答以下问题:
- 我该如何解决这个问题。
- 我要选择什么算法。
- 为了评估我的模型,我需要什么样的绩效评估?
- 我应该付出多少努力来修改和调整我的模型,使其性能更好。
假设我们正在做一个项目,其主要目标是创建一个模型来估计某个特定城市的房价。让我们以加州圣何塞为例,因为那里的价格高得离谱。一旦你收集了所有的信息,并且清楚地理解了你的任务,就到了设计你的系统的时候了。
问问你自己,我将如何设计我正在处理的问题。是有监督的,无监督的,还是强化学习?问题有没有可能是分类问题,回归任务或者别的什么?我应该使用什么技巧。我不打算解释上述每种学习技巧的含义,但是你应该知道它们,我强烈建议你查看这个链接,这样你就能更好地理解它们的区别。
一篇关于什么是机器学习的短文:监督、非监督、半监督和强化学习
towardsdatascience.com](/what-is-machine-learning-a-short-note-on-supervised-unsupervised-semi-supervised-and-aed1573ae9bb)
在我们的例子中,我们正在处理一个典型的回归任务,因为我们试图预测一个值。我们可以使用多种功能吗?如果是这样的话,我们的任务将是一个多元回归问题,如果你有更多关于圣何塞住房市场的信息,你可以确定它是否受到监管。
接下来,我们需要选择一个性能指标。回归问题的典型性能度量是均方根误差(RMSE)。当您将实际值与预测值进行比较时,RMSE 会让您了解模型的误差有多大。之后,与你的团队和老板一起检查假设是一个好的实践和习惯,以确保每个人都在同一页上,以避免未来的沟通失误。
2.获取数据
米卡·鲍梅斯特在 Unsplash 上的照片
现在是时候找到解决问题所需的数据集了。你如何为你的问题收集数据?当然,这取决于项目。
- 日志、数据库:如果你幸运的话,一些公司已经在一些数据库中收集数据。如今,您可能面临的不同类型的数据库通常是 PostgreSQL、Oracle 或 MongoDB。所以一定要了解你的 MySQL,PostgreSQL 或者 MongoDB。
- 网络报废:你的公司可能没有数据库。我建议你做的下一件事是从网上搜索和收集你的数据。我推荐使用的一个网络抓取工具是 BeautifulSoup。如果您还没有听说过这个工具,我强烈推荐这篇文章来更好地了解它。
用 Python 在五分钟内学会网络抓取
medium.com](https://medium.com/technofunnel/web-scraping-with-python-using-beautifulsoup-76b710e3e92f)
- 数据 Api:接下来,如果您没有上述任何一项,您会发现自己处于这样一种情况,企业拥有您正在寻找的数据。为了获得这些数据,你需要注册,很可能还要付费。一旦你找到了那个业务,你将被要求进行一个 API 调用。
- 公共数据集:最后但并非最不重要的是,总是有使用公共数据集的传统方式,如 Kaggle,UCI 机器学习等。
一旦你花了几个小时和几天来完成你的数据集,是时候进入下一步了。
3.探索性分析
是时候挖掘你的数据,并使之有意义了。在这个阶段,你应该了解你的日期设置。发现一些有趣的见解或观察,并将你的发现可视化。对于这一步,我强烈建议你熟悉熊猫。在我看来,Pandas 是操纵和探索您的数据的最佳工具。如果我们回头看看我们的房价例子,我会注意我认为相关的数据集的不同特征。首先使用 pandas,确保将您的数据转换为 Pandas 数据框。您可以使用 describe()方法,该方法给出每个数字属性的摘要。此外,我会使用 Matplotlib 来可视化你的情节。在 python 中如何使用它非常简单。对于我们的例子,我将为每个数值绘制直方图,以便更好地理解分布。寻找不同变量的相关性,以更好地了解哪些变量与你的目标值更相关。这些只是我给你的一些想法,让你更好地理解这一步是怎么回事。在一天结束时,您希望在继续工作并开始处理数据之前对数据有一个很好的了解。
4.数据清理
我们首先着眼于大局,定义我们的问题,找到我们的数据集,探索我们的数据,并希望找到一些有趣的观察结果。现在是时候把手弄脏,为一个机器学习算法清理数据了。根据福布斯杂志,数据科学家花 60%的时间清理和准备他们的数据。这绝对是数据科学项目生命周期中最耗时的部分。
[## 调查显示,清理大数据:最耗时、最不愉快的数据科学任务
数据科学家的一项新调查发现,他们把大部分时间花在按摩上,而不是挖掘数据或为数据建模…
www.forbes.com](https://www.forbes.com/sites/gilpress/2016/03/23/data-preparation-most-time-consuming-least-enjoyable-data-science-task-survey-says/#30ace12e6f63)
那么这一步需要什么呢?这些步骤是为了让我们“清理”和过滤数据,以最适合我们的方式将数据传递给机器学习算法。一位早期的 IBM 程序员兼讲师 George Fuechsel 曾经说过:
“垃圾进,垃圾出”(GIGO)
上面的引用完全有道理。如果数据不重要并且没有经过过滤,那么你的项目结果将变得毫无意义。准备数据的最好方法是编写函数,而不是手动编写。这有几个原因:
- 使您将来可以更容易地在新的数据集上重现转换。
- 随着您从事更多的项目,您将逐渐构建一个数据清理函数库,这对您将来会非常方便。
- 您也可以在实时系统中使用这些功能。在将数据输入算法之前,你要对其进行转换。
- 拥有不同的转换函数可以让你更加灵活。您可以尝试不同的转换,看看哪些组合最适合您的项目。
在现实世界中,你将会处理超级混乱的数据集。你会有缺失的价值观,你必须找到一个解决方案来处理这种情况。对于缺失值,您有三种选择:
- 去掉整列。
- 摆脱那一排。
- 将这些值设置为某个值(零、中值、平均值等)。)
此外,您可能需要拆分、合并和提取列。你甚至可能不得不分割你的数据。回到我们的多元线性回归示例,我们尝试预测圣何塞的房价,我会考虑将我的数据分成测试集和训练集。您可能还需要转换数据。例如,特征缩放是最重要的变换之一。如果数据的数字属性具有不同的比例,模型将无法很好地运行。这些只是你在这一步会遇到的一些例子。不一定是最享受的部分,但却是非常重要的一步。永远记住。“垃圾进,垃圾出”。
在我进入下一步之前。步骤 3 (ExploratoryAnalysis)和步骤 4(数据清理)有时会同时进行。您可以首先开始清理数据,然后进行分析以找到一些见解。您可以找到一些东西,理解它,如果有必要,您可能会决定清理它并继续探索数据。说到第 3 步和第 4 步,没有固定的顺序。
5.选择一个模型并训练它
作者图片
这是真正的乐趣开始和奇迹发生的阶段。到目前为止,我们已经完成了所有实质性的工作。您已经定义了问题,收集了数据,分析并清理了问题。现在,您可以选择并训练一个机器学习模型了。
现在回到我们的圣何塞房价模型的例子。在第一步中,我们定义了我们的问题,并得出结论,我们将处理一个回归模型,因为我们将预测一个数值。我们还说过,回归问题的典型性能度量是均方根误差(RMSE)。您应该使用 Python 或 R 来选择模型。如果你使用 python,你一定要学习如何使用 Scikit-Learn,这是一个免费的 Python 机器学习库。如果你有兴趣了解这个库的更多信息,我强烈推荐你查看下面的链接。
[## Scikit Learn 初学者指南—在逻辑回归中实施 Scikit Learn
Scikit Learn 上的这篇博客将通过一个用例向您概述这个 Python 机器学习库。
medium.com](https://medium.com/edureka/scikit-learn-machine-learning-7a2d92e4dd07)
对于那些使用 R 的人,你可以使用名为 Caret 的库。
[## 插入符号包
软件包(分类和回归训练的缩写)是一组功能,试图简化分类和回归训练
topepo.github.io](https://topepo.github.io/caret/)
当您开始选择模型时,首先使用训练集训练您的特定模型,并使用您的性能指标评估它的表现。假设你的模型表现不好,你对分数不满意。你认为你下一步应该做什么?你可以继续尝试使用交叉验证来训练你的模型。在交叉验证中,您只需将训练集分成一个较小的训练集和一个验证集。之后,在较小的训练集上训练您的模型,并根据验证集对它们进行评估。有道理?实现起来并不困难,而且可以很快完成。在 Scikit Learn 中,您必须使用 train_test_split 函数。接下来,如果你使用了交叉验证,仍然对你的评估分数不满意,我会继续尝试另一个模型。您已经尝试了回归模型(使用和不使用交叉验证),现在您可以继续尝试决策树模型或随机 forrest 回归模型。不管你用什么模型,你都要遵循同样的步骤。你训练你的模型并评估它。
6 微调你的模型
在使用训练集训练您的不同模型并对它们进行评估之后,您现在有了一个您认为可能是您最终选择的模型的简短列表。假设您有线性回归模型、决策树模型和随机森林模型作为候选模型。你现在需要对它们进行微调,并对它们中的每一个给予额外的关注。微调我们模型的一种方法是手动调整超参数,直到找到最佳组合。检查每个可能的组合可能会非常耗时。谢天谢地,有图书馆为你做这项工作。这种类型的微调技术被称为网格搜索,Scikit Learn 具有网格搜索功能,可以为您完成这项工作。您可以在 RandomForestRegressor 模型上应用此函数,它将返回最佳组合。另一种微调技术叫做随机搜索。在这种微调技术中,这种技术不是尝试每一种可能的组合,而是通过在每次迭代中为每个超参数选择一个随机值来评估给定数量的随机组合。还有许多其他的微调技术,每种技术都有其优缺点,所以您应该研究一下,看看哪种技术更适合您的系统。在对你的模型进行一段时间的调整后,你应该有一个表现良好的模型,你应该在测试集上对它进行评估。
7 展示结果
凯文·Ku 在 Unsplash 上的照片
你已经完成了所有的艰苦工作,你终于到了最重要的阶段。对于数据科学家来说,能够以一种有效且简单的方式向技术或非技术受众展示他们的结果并解释他们的数据是至关重要的。还记得您定义问题的项目生命周期的第一步吗?在这个阶段,你要回答这个商业问题。在展示您的解决方案时,您应该关注以下几点:
- 你学到了什么?
- 哪些有效,哪些无效?
- 做了哪些假设?
- 你的系统的局限性是什么?
- 你的最终建议是什么?
你应该以一种专业的方式记录每一件事,并有清晰的视觉效果,这样观众就容易理解。
8 启动监视器并维护您的系统
我们正处于项目的最后阶段。你粉碎了演示,你得到了批准推出!在这个阶段,您需要编写测试来确保您的系统运行良好。您还需要添加监控代码来检查您的系统如何实时运行。最后但并非最不重要的是,您要确保使用新数据定期训练您的模型。与其手动训练,我建议你尽可能自动化这个过程。如果你不经常训练它,随着时间的推移,你的模型可能表现不好。
结论
我希望这篇文章能让您对数据科学项目的生命周期有一个很好的了解。如上所述,步骤 3(探索性分析)和步骤 4(数据清理)有时会同时进行,并且没有固定的顺序。我在下面再次写下这些步骤,这样你就可以通读它们,让它们真正深入人心,这样下次你就有一个好主意,知道从哪里开始,目标是什么。
- 看大局。
- 获取数据。
- 探索性分析。
- 数据清理。
- 选择一个模型并训练它。
- 微调你的模型。
- 呈现结果。
- 启动监视器并维护您的系统。
请在下面的评论区告诉我你的想法。你会做一些不同的事情,尝试不同的方法吗?您能先关注探索性分析部分(步骤 3),然后进入数据清理(步骤 4)部分吗?对于那些希望看到我按照这些步骤进行的项目的人,请查看我的最后一个项目,并一直向下滚动到第 4 部分。
[## 使用时间序列分析(ARIMA 模型)预测 Covid19 死亡人数
执行摘要:
我希望你喜欢这篇文章,并学到一些新的东西。如果你喜欢它,如果你能在推特或脸书上分享它,我会非常感激。谢谢,下次再见!😃
我是 Navid Mashinchi,是加利福尼亚州萨克拉门托的一名数据科学家。我一直在分析领域工作…
www.navidma.com](https://www.navidma.com/)
数据科学过程
数据科学生命周期。(由 Chanin Nantasenamat 与 Ken Jee 合作绘制)
数据科学
数据科学中标准程序的可视化指南
L 假设你有一个要解决的数据问题,你希望从给你的数据中产生独特的见解。所以问题是,你到底要怎么做才能把一个数据问题转化成完整的问题,并产生数据驱动的洞察力?最重要的是,你从哪里开始?
让我们在这里打个比方,在建造房子或建筑物时,所使用的指导性信息就是蓝图。那么这些蓝图中包含了什么样的信息呢?与建筑基础设施、每个房间的布局和确切尺寸、水管和电线的位置等相关的信息。
从我们之前停止的地方继续,那么当出现数据问题时,我们从哪里开始呢?这就是数据科学流程的用武之地。正如将在本文后面的章节中讨论的,数据科学过程提供了一种处理数据问题的系统方法。通过遵循这些推荐的指南,您将能够在处理数据科学项目时利用可靠的工作流。所以事不宜迟,我们开始吧!
数据科学生命周期
数据科学生命周期主要由数据收集、数据清理、探索性数据分析、模型构建和模型部署组成。有关更多信息,请查看 Ken Jee 关于 不同数据科学角色的精彩视频(由数据科学家讲解) 。此生命周期的摘要信息图如下所示:
数据科学生命周期。(由 Chanin Nantasenamat 与 Ken Jee 合作绘制)
CRISP-DM 和 OSEMN 很好地描述了从数据中提取洞察力的流程或工作流。应该注意的是,两者都包含了基本相同的核心概念,而每个框架都是在不同的时间发布的。特别是,CRISP-DM 是在数据挖掘开始流行的时候(1996 年)发布的,当时缺少一个以健壮的方式执行数据挖掘任务的标准协议。14 年后(2010 年),OSEMN 框架出台,它总结了数据科学家的主要任务。
就我个人而言,我在 2004 年开始了自己的数据世界之旅,当时这个领域被称为数据挖掘。当时的重点是将数据转化为知识,另一个常用术语也指数据挖掘,即数据中的知识发现。
多年来,该领域已经成熟并发展到包含其他技能组合,这最终导致了术语数据科学的诞生,它不仅仅是构建模型,还包含其他技术和软技能组合。之前,我绘制了一个信息图,总结了数据科学的 8 项基本技能,如下所示。此外,请查看随附的 YouTube 视频 如何成为数据科学家(所需的学习路径和技能) 。
数据科学的 8 项技能。(由 Chanin Nantasenamat 绘制)
CRISP-DM
缩写 CRISP-DM 代表用于数据挖掘的跨行业标准过程,并且 CRISP-DM 在 1996 年被引入,以努力标准化数据挖掘(也称为数据中的知识发现)的过程,使得它可以作为可以在各种行业中采用和应用的标准和可靠的工作流。这种标准流程可以作为一种【最佳实践】来使用,它有很多好处。
除了提供在执行数据挖掘项目时可以遵循的可靠和一致的过程之外,它还会给希望在他们的组织中采用数据挖掘的客户和利益相关者注入信心。
应该指出的是,早在 1996 年,数据挖掘刚刚开始获得主流关注,处于早期阶段,制定标准流程将有助于为早期采用者奠定坚实的基础。Wirth 和 Hipp (2000 年)的文章提供了 CRISP-DM 更深入的历史研究。
根据 CRISP-DM 框架执行数据挖掘的标准流程。(由 Chanin Nantasenamat 绘制)
CRISP-DM 框架由 6 个主要步骤组成:
- 业务理解——这需要从业务的角度理解项目的目标和需求。这种业务观点被用于通过使用数据挖掘来找出要解决的业务问题。
- 数据理解 —这个阶段让我们熟悉数据,这包括执行探索性的数据分析。这种初始数据探索可以允许我们找出哪些数据子集用于进一步建模,以及帮助生成要探索的假设。
- 数据准备 —这可以被认为是数据挖掘过程中最耗时的阶段,因为它涉及到严格的数据清理和预处理以及丢失数据的处理。
- 建模 —预处理后的数据用于建模,其中学习算法用于执行多元分析。
- 如果认为合适,可能需要再次执行一些步骤。冲洗并重复。一旦认为结果和流程令人满意,我们就可以开始部署了。此外,在这个评估阶段,一些发现可能会激发新的项目想法来探索。
OSEMN
在 2010 年数据学家博客上的一篇文章中,希拉里·梅森和克里斯·维金斯介绍了 OSEMN 框架,该框架基本上构成了数据科学家通常执行的一般工作流程的分类,如下图所示。2012 年后不久,达文波特和帕蒂尔在《哈佛商业评论》上发表了他们的标志性文章 【数据科学家:21 世纪最性感的工作】 ,这引起了人们对新兴数据科学领域的更多关注。
Mason 和 Higgins (2000)在 5 个步骤中描述的数据科学流程称为 OSEMN 框架。(由 Chanin Nantasenamat 绘制)
OSEMN 框架由 5 个主要步骤组成,可总结如下:
- 获取数据 —数据构成了数据科学过程的必要条件,数据可以来自预先存在的数据或新获取的数据(来自调查)、新查询的数据(来自数据库或 API)、从互联网下载的数据(例如从 GitHub 等云上可用的存储库)或提取的数据
- 清理数据 —清理数据本质上是数据清理,这一阶段被认为是最耗时的,因为它涉及处理丢失的数据,并对其进行预处理以尽可能无错误和一致。
- 这需要使用描述性统计和数据可视化。
- 模型数据 —在这里,我们利用机器学习算法来努力理解数据并获得对数据驱动的决策至关重要的有用见解。
- 解释结果 —这可能是最重要的阶段之一,但也是最没有技术含量的阶段,因为它涉及到通过弄清楚如何简化和总结所有模型构建的结果来实际理解数据。这需要得出有意义的结论,并使可行的见解合理化,这将从本质上允许我们找出下一步的行动路线。例如,影响分类标签的最重要的特征是什么( Y 变量)。
结论
总之,我们通过向您展示高度简化的数据科学生命周期以及广受欢迎的 CRISP-DM 和 OSEMN 框架,介绍了数据科学流程。这些框架提供了从端到端处理数据科学项目的高级指导,其中所有内容都包含数据汇编、预处理、探索、建模、评估、解释和部署的相同核心概念。应当注意,这些过程中的流程不是线性的,并且在实践中,流程可以是非线性的,并且可以重复,直到满足令人满意的条件。
订阅我的邮件列表,获取我在数据科学方面的最佳更新(偶尔还有免费赠品)!
关于我
我是泰国一所研究型大学的生物信息学副教授和数据挖掘和生物医学信息学负责人。在我下班后的时间里,我是一名 YouTuber(又名数据教授)制作关于数据科学的在线视频。在我制作的所有教程视频中,我也在 GitHub 上分享 Jupyter 笔记本(数据教授 GitHub 页面)。
数据科学、机器学习、生物信息学、研究和教学是我的激情所在。数据教授 YouTube…
www.youtube.com](https://www.youtube.com/dataprofessor?sub_confirmation=1)
在社交网络上与我联系
✅YouTube:http://youtube.com/dataprofessor/
♇网站:http://dataprofessor.org/(在建)
♇LinkedIn:https://www.linkedin.com/company/dataprofessor/
♇Twitter:https://twitter.com/thedataprof
♇Facebook:http://facebook.com/dataprofessor/
♇github:https://github.com/dataprofessor/
♇insta gram:***
数据科学家与数据分析师
让我们在这里谈论房间里的大象。
数据分析师通常将数据科学家视为疯子,他们花时间研究永远不会用于生产的东西。数据科学家将数据分析师视为稍微增强的秘书(无意冒犯秘书)。
好吧,我夸张了。还是我?
当我探索这两个角色最极端的一面时,请和我一起玩,试图揭示他们的根本区别。但首先,我们必须了解是什么将它们联系在一起。
商业环境
让我们把基本情况弄清楚。私人公司的存在是为了赚钱。它的存在不是为了提高幸福感、公平性、多样性和包容性。这些都是很好的附带福利,没有什么反对它们,但它们都不是公司的目标。
分析数据、创建漂亮的图表或建立机器学习模型也不是该公司的目标。这些也很好,但是它们是侧面输入。手段达到目的:赚更多的钱。
这就是数据分析师和数据科学家的职责所在。他们工作的不同之处在于他们如何做。这是因为有许多赚钱的方法,但在一个非常抽象的层面上,这一切都归结为探索与剥削。
探险者 vs 剥削者
我知道,“剥削者”不是一个词,听起来像是一种侮辱,但这就是数据分析师每天都在做的事情:他们利用手头的数据。数据分析师将巡视已知的边界,寻找改进机会和要修复的弱点。他们会把东西分类放进桶里,清点每个桶里有什么,如果有什么不对劲,就会发出警报。因此,数据分析师通常非常了解他们的领域。任何不寻常的事情都会被注意到,管理层将依靠他们保持警惕和彻底。
大多数数据分析师都是结构化和有组织的人。出于几个原因,他们能很好地处理重复性的任务。首先,他们明白这些小细节在日常业务运作中的重要性,因此在别人看来可能很无聊的东西对他们来说很重要。其次,他们善于找到许多微妙的方式来丰富他们的日常生活,无论是通过加深他们的业务理解,培养他们的社交网络,还是在会议上简单地讲笑话。最后,比起混乱的世界,他们通常更喜欢可预测的世界。
也就是说,数据分析师无论如何都不是被动的。如果有敌人从树林里出来攻击城堡,他们会第一个发现他们。相反,如果我们想攻击隐藏在树林中的敌人,他们会告诉我们进入森林的哪一边看起来最安全。数据分析师都是关于战术以及如何在已知世界中最好地导航。
虽然数据分析师很少离开围墙,但数据科学家永远不会出现在城堡里。数据科学家是独自在丛林中探索,以了解更多关于夜间听到的噪音的人。虽然您可以在整点期待数据分析师的报告,但是您不知道数据科学家什么时候会回来,他们会带回来什么,或者他们是否会回来。大多数时候,他们不会。这没关系。因为如果他们真的回来了,那是因为他们有了一个改变游戏规则的发现。数据科学家焦躁不安,不关心已知的东西:他们想要探索和预测未知。
这里有一个关于商业战略背景下的开发与探索的例子:
我夸张到了极点,但基本的差异是真实的,它们应该与您相关,无论您是想知道自己的职业道路还是准备招聘数据角色。
回到现实
你会经常听到数据分析师嘲笑那些一事无成的数据科学家和他们的项目。尽管我们应该总是努力构建有用的业务组件,不管是什么角色,数据科学家更频繁地错过目标是正常的:他或她是在瞎猜。但当他们真的发现了什么,这将是不同的,足以证明投资的合理性。
另一方面,如果你依赖数据科学家来指导你的日常操作,你就完了。你需要注重细节的人,像他们的口袋一样了解你业务的来龙去脉。那些通常不那么古怪的分析师是让这条船漂浮的人。
离别赠言
我想知道我是否对某个群体不公平。可能有一点:数据分析师可以富有创造力,敢于冒险,数据科学家也不全是不可靠的空想家。两个群体中最优秀的是那些了解另一个群体的特点,并掌握足够的技能来发光的人。
我遇到的最好的数据分析师是那些在业余时间学习 python 以及统计学和机器学习基础知识的人。
我见过的最好的数据科学家是那些花时间了解他们所涉及的行业、业务和产品的人。
数据科学家的学徒
从软件工程过渡到数据科学的早期想法
在我转向数据科学之前,我在许多小型创业公司担任软件工程师。我通过不断制作网络应用程序和执行一些简单的数据工程赚到了钱——但在这六年中,我工作的大部分变得越来越商品化。过去需要花费数周时间来构建和测试的 Web 组件现在已经预先打包在现成的库中,只需一个命令就可以导入。
约翰·施诺布里奇在 Unsplash 上的照片
这是意料之中的:问题从刚刚被发现到拥有竞争性的开源解决方案。也就是说,随着 Squarespace 和 Wix 等网站让编写自己的网站成为一种拖放式的体验,web 开发正越来越多地进入 UX 设计师和 SEO 专家的视野。虽然总会有新的问题需要解决,企业软件也需要满足,但这种倾向于预建解决方案的趋势让我认真思考我职业选择的寿命。这种自我反省让我去年决定从工程转向数据科学。接下来是对我为什么要换角色的探索,以及我在这个过程中学到的早期经验。
首先,知道你个人觉得满意的是什么是很重要的。虽然两种职业道路都可以令人满意,但这两个领域的侧重点有很大不同。两者都关心解决问题,但方式不同。例如,工程师会关心如何实现一个特定的特性,比如 web 应用程序上的无限滚动。数据科学家将研究如何阐明或解决一个商业问题,例如解释销售额的突然下降。这两种类型的问题需要完全不同的心态——问问自己想解决哪种问题很重要。
作为一名工程师,我不断问自己的问题是“这个过程如何自动化?”或者“我怎样才能在 sprint 结束时交付这个期望的特性?”我在 duckduckgo 上查询答案,查看代码样本或库以引入必要的特性。在一天结束时,我的工作成果要么是一段代码,要么是运行这段代码的基础设施。代码并不是唯一的输出:为了使我的代码更具弹性和可用性,我贡献了无数的测试和文档条目。尽管如此,所有这些都会被定义为传统软件工程中的工件——它们很容易被看到和解释。
作为一名数据科学家,我承担的首要任务之一就是生成一份关于我们数据平台不一致性的报告。我们从我们的数据中汲取见解,因此它必须达到一个已知的标准。我取得的每一点进步或突破,我都会在 symphony(slack for finance type)上向我的经理报告我的进展。起初他很有耐心,但很快让我知道,增量结果对他来说实际上并不有用或有趣。他解释说,部分构建的功能显示了进展,但是部分完成的分析根本不能证明任何事情。数据科学家的真正产出不是一个工件(像 jupyter 笔记本或数据可视化),而是从这些工件中获得的洞察力。这种洞察力有助于为您的团队,甚至更广泛的组织定义下一步。正是这种知识生成推动了当前市场对数据科学的需求。
这是另一种思考方式:工程师编写的代码最终会成为一个更大系统的一部分,或者解决一个特定的问题。数据科学家编写代码来测试一个假设。与工程师的代码(他们的工作成果)不同,数据科学家的代码可能只被少数人看到,即使这样也只是为了产生所需的洞察力。对于数据科学家来说,代码是一种手段,而不是目的。
早些时候,我的导师为我概述了这种思维方式的转变:第一步是在我的工作中采用科学方法。而不是问“我如何做 x ?”我应该问“我的假设是什么?”起初,这似乎是一个简单的变化,但它一直是根本性的。当试图完成一项任务时,人们不要总是问为什么任务存在,它只是完成了。这种思维模式从工程开始就伴随着我,并导致我在早期浪费了大量时间,试图解决小的技术问题,而不是对我正在回答的问题建立更好的理解。
现在,当处理一个问题时,我会形成一个工作假设,立即将我的研究集中在一个单一的概念或问题上。如果我正在做的事情无助于证明或否定我的假设,那么我知道放弃这个任务——它不值得做。
这就引出了我的第二步:研究。当探索数据科学的主题时,我进行研究的方式与我作为工程师时非常不同。在这两个领域中,有一个共同的资源核心,如堆栈溢出、Github、库文档和中帖。然而,在数据科学中,人们更重视原创研究。除了我已经提到的资源,我现在花相当多的时间在 arxiv.org 或其他网站上阅读论文。自从一年前加入我的团队以来,我阅读的学术论文比我在大学时还多——最初,在日常工作之外完成这么多阅读是一个挑战。不过这个问题很快就被某个牛逼的文本转语音软件攻克了。考虑数据科学时,要做好准备:阅读研究论文是工作的一部分。
另一件需要注意的事情?你的数学背景很重要。如果你熟悉积分、点积、偏导数、正交性和梯度下降等术语,你很可能知道足够多的知识来搜索你没有记住的任何主题。如果你不知道这些术语的意思——花点时间复习你的大学数学课。有了足够的时间和投入,你将能够处理数据科学中更具数学知识的主题。也就是说,如果你不想思考或意识到高等数学的话题,你可能会想远离数据科学。
如果你正在考虑职业转型到数据科学,问问你自己:你想建立什么?当他们需要一个工具来优化他们的工作流程时,公司会求助于软件工程师。然而,数据科学是关于分析的。当组织希望了解其员工和客户生成的大量数据时,他们会求助于数据科学家。重要的是要知道你更愿意创造什么:工具还是洞察力?
从业者逻辑回归理论
数据科学家的关键应用直觉
图片由 geralt / Pixabay 提供
这些是我为数据科学从业者量身定制的关于逻辑回归理论的综合笔记。我解释何时以及为何使用逻辑回归、关键数学理论,以及如何为利益相关者解释模型输出和系数估计。
目录
- 1)什么是逻辑回归?
- 2)什么时候应该使用逻辑回归?
- 3)我们为什么要使用逻辑回归?
- 4)关键的数学直觉
- 5)作为 GLM 的逻辑回归
- 6)模型假设
1.什么是逻辑回归?
逻辑回归是线性回归模型的一种转换,它允许我们对二元变量进行概率建模。它也称为使用 logit-link 的广义线性模型。
2.什么时候应该使用逻辑回归?
当您想要对二进制数据建模时:逻辑回归是这个用例的首选模型。它模拟了观察值取这两个值之一的概率。(注:模型只预测一个概率,不预测类别。您对决策阈值的选择取决于用例。)
当你需要类别概率预测时:而不是像支持向量机那样只需要类别预测。这使您可以衡量模型预测的可信度,并可以调整分类决策阈值。
当您需要一个可解释的模型时:当您需要能够解释每个预测因子的影响时,逻辑回归是一个理想的候选模型。预测器的系数通过比值比量化每个要素对模型预测的影响。
当决策边界是平滑的线性时:逻辑回归在两个类之间画出平滑的线性决策边界。因此,如果您的类是线性可分离的(您可以使用 n - 1 维来分离 n 维空间中的点),逻辑回归将执行得非常好。您还可以使用线性支持向量机测试线性可分性。
何时不使用逻辑回归
- 当你的数据不是线性可分的:如果你认为是这种情况,可以考虑使用复杂核的支持向量机或者基于树的方法进行分类。
- 当你的目标主要是绩效时:逻辑回归是一个相对简单的模型,与更复杂的模型相比,通常表现不佳。如果您的目标主要是预测准确性而不是模型解释,增强树或神经网络可能是更好的选择。
3.为什么我们要使用逻辑回归?
我们使用逻辑回归,因为线性回归不适合模拟二元结果。这里有两个原因:
- 线性模型做出无限的连续预测。在二元分类中,我们感兴趣的是一个结果发生的概率,所以我们希望预测的范围在 0 和 1 之间。
- 用线性模型预测二元结果违反了正态残差的假设,扭曲了对回归系数的推断。
这就是逻辑回归被开发的原因。
4.关键数学直觉
标准逻辑函数(或 sigmoid 函数)
设 z 为定义域为(-∞,∞)的任意连续值。如果你把 z 代入 sigmoid 函数,比如
输出的一个很好的特性是它总是在 0 和 1 之间。
sigmoid 函数图
下面是 θ ( z )的一些性质:
- 当 z = 0, θ = .5 时
2.当 z 很大时, θ 约为 1
3.当 z 非常小/负时, θ 约为 0
我们可以使用 sigmoid 函数将一个连续的、无界的输出 z 转换成一个十进制数 θ ∈ (0,1),这样有利于表示概率。
使用 sigmoid 函数将线性回归输出转换为逻辑回归输出
从线性回归到逻辑回归,你可以替换 OLS 输出
对于 z 像这样:
该函数将 OLS 输出重新解释为概率。上面的公式表示逻辑回归模型的输出。
逻辑回归的数学性质
我们将通过分离出 y 项来研究上面的等式。我们从一些基本的代数开始
到
我们可以对上面的 y 项的定义进行替换,给出如下:
通过对这个等式的两边求幂,我们还得到下面的等式
需要了解的术语:
比值比指定的比值比被定义为成功的概率与失败的概率之比。这是表示概率的另一种方式,也是解释逻辑回归系数的关键。
比值比为 1 意味着成功的概率等于失败的概率。优势比为 2 意味着成功的概率是失败概率的两倍。0.5 的优势比意味着失败的概率是成功的概率的两倍。
logit 也被称为几率对数。它将概率从(0,1)映射到连续值(-∞,∞)。通过这样做,它在自变量和伯努利分布之间建立了联系。
对这些术语的两个重要观察
- 在逻辑回归中,logit 必须与自变量的 线性相关 。这由等式 A 得出,其中左侧是 x 的线性组合。这类似于 OLS 的假设,即 y 与x 线性相关
- 如果你把一个自变量 x_i 增加 1,你的胜算增长一倍 exp(β_i) 。这是根据等式 b 得出的。
点(2) 从下面的代数中得出:
假设我们要将 x_i 增加 1:
那么成功的几率增加倍 exp(β_i) 。
重申一下,在逻辑回归中, x_i 的一个单位变化导致赔率的 exp( β_i) 变化。类似地, x_i 的一个单位变化导致线性回归中y 的 β_i 变化。
5.作为 GLM 的逻辑回归
GLM 的三个部件是:
- 随机成分:结果变量的概率分布 Y
- 系统组件:指定参数 η 为自变量的线性组合xβ:η=xβ****
- 链接函数:一个函数 g 连接(链接)随机的和系统的组件——具体来说,它链接E(Y)=μ到 η 如下: g(μ) = η**
在广义线性模型中,逻辑回归中的 Y 遵循二项式分布。在逻辑回归中,链接函数是一个 logit 函数,所以
和
这里, μ 表示一次试验的二项随机变量的平均值,这是一个伯努利分布。因此 μ 就是成功的概率。
逻辑回归的随机成分是伯努利随机变量。我强烈推荐你去看看这篇关于 GLM 概念的报道。
6.逻辑回归的假设
- 因变量是二元的:如果这不是真的,那么逻辑回归输出不适用。
- 【logit 和自变量之间的线性:这是从等式 A 得出的——如果不满足这个条件,逻辑回归是无效的。
- 无多重共线性:多重共线性会扭曲回归系数的统计显著性检验。
- 大样本量:这更多的是一个经验法则。
这里的一个好处是你的数据有一个平衡的类的数量。
不适用于逻辑回归的 OLS 假设
- 因变量和自变量之间的线性
- 正常残差
- 同质性
感谢阅读。有想法或反馈?下面评论!
数据科学家可重复研究指南
你的假设还是假设!
可生产性研究是科学方法的一个非常重要的元素,但却经常被忽视。无论在给定的时间里,再现性看起来多么微小,它实际上是影响你在任何应用科学领域的研究的最重要的因素之一。这种影响只能通过数据科学来进一步说明,因为一般化的数据经常会导致误导性的结论和错误的理论,弊大于利。
不管你的发现有多突破性;你可能会发现穿聚酯纤维与患绝症直接相关,甚至发现癌症的治疗方法,或者
新冠肺炎疫苗。
事实是,如果你设计了一个本质上不可重复的实验,那么你就破坏了从这个实验中获得的观察结果的可靠性。幸运的是,有了科学家(更有甚者是数据科学家)手中掌握的先进技术,让你的研究变得可重复和为人所知比以往任何时候都要容易。
笔记本礼仪
Jupyter-Notebook 很可能是最伟大的软件之一,因为它易于计算和复制。对于那些还没有使用 Jupyter-Notebook 的人来说,该软件允许你访问一个运行虚拟内核的服务器,从你的网络浏览器执行单元级代码。这不仅对那些可能在项目上互换工作的大量科学同行来说非常方便,而且在受控的代码爆发中向模仿思想和想法迈出了勇敢的一步,以供其他科学家审查。
我们不要忘记,科学过程中另一个极其重要的步骤是同行评议。人类天生就有偏见。不幸的是,在有数据的地方,也有可能扭曲所述数据,以表现科学家可能有的潜在偏见,不管科学家是否意识到这种情况的发生。老实说,我们都进行了一项测试,我们非常兴奋,不得不做一个大转变…
接受空值。
我当然能理解为什么接受空值会令人沮丧。虽然接受零意味着你的科学想法没有通过测试,这是肯定的,但接受零仍然推动科学向前发展,因为现在我们知道,至少在一个场合,它在统计上是不准确的。因此,尽管很难不歪曲研究,但不管你的研究方向如何,这肯定是值得骄傲的事情。
虽然 Jupyter-notebook 是一个非常方便的工具,它肯定会使科学计算尽可能辉煌,但你仍然可以在可重复性上自掘坟墓。因为没有正确地列出你的笔记本。这可以从简单有效地注释你的代码到在 markdown 中写出完整的段落来解释你的想法和科学过程。这显然非常重要,但它可能并不像你认为的那样重要。
无论经验、时间或实践如何,所有人都容易出错。有了同行评议和互联网的力量,你可能忽略的任何错误、数学失误或简单的事情都可以很快被你的同行评估,并有可能完全改变你的研究范围。最重要的是,你的研究可以反过来激励你的科学家同事参与类似的研究,进一步发展你的假设和其他类似的假设。
虽然我当然不喜欢谈论你在某些情况下绝对必须做的事情,但我认为在笔记本之类的东西上工作时,解释你的思路是非常重要的。我个人也喜欢用大标题、段落、结论和推论来分割我的观察。如果你想更进一步,你甚至可以为你的笔记本创建一个目录。如果您有一个包含多个部分的很长的笔记本,这尤其有用。
数据
当然,可重复研究的绝对催化剂是数据。
- 你的数据来自哪里?
- 它的来源可靠吗?
- 你的数据是开源的吗?
- 您的同行可以在哪里访问您的数据?
- 你的数据是如何获得的,这种方法可重复吗?
所有这些问题都很容易影响到你的分析性观察是否会被你的同行群体所考虑。数据源很重要,在大多数情况下,理想情况下这些数据源是主要的;意思是与观察直接相关。
虽然让每个人都有一个开放数据政策并分享他们的发现是不可行的,但至少这些发现应该是可重复的和准确的。很难找到不是自己收集的准确数据源,这就是为什么我总是建议从政府那里收集公共资源数据,政府有法律责任将他们的大部分数据发布到公共领域,或者你总是可以从像大学这样的可信来源获得数据。
适合这项工作的工具
你工作中的一个巨大的绊脚石可能是在错误的工作中使用了错误的工具。这可能会导致你的研究中潜在的不准确性,这也是为什么研究通常要接受同行评审的原因。这些错误并不一定很难犯,考虑到这一点,我认为避免在工作中使用错误的工具是一个更好的主意。例如,我不想用 t 分布来执行二进制符号测试。这将使测试无用,并产生非常误导性的结果。相反,对于二进制数字,我会使用更适合这种情况的分布,比如二项式分布。
结论
虽然许多科学家可能会对可重复研究的概念耸耸肩,但这是一个非常必要的概念。如果研究不容易被复制,那么研究通常会失败。随着现代计算和互联网的力量,可以轻松重复的研究的力量变得更加明显。此外,研究比以往任何时候都更主流,这意味着你的研究往往需要更可信,因为它的范围。幸运的是,在很多情况下,在笔记本和数据组织上做一点额外的工作,可以让你的发现比其他情况下更有结论性和扩展性。
订阅业务数据科学家指南
订阅业务指标、数据科学应用等
在 Unsplash 上由 Carlos Muza 拍摄的照片
你提出的任何数据科学项目都会影响业务,除非你恰好从事数据科学研究。数据科学家应该了解业务,以便开发有效的解决方案。她还必须能够将自己的工作有效地传达给利益相关者。
数据科学家的粗略估计(来源:作者)
数据科学可以通过多种方式影响业务。首先,使用数据科学的技术可以使产品更加数据驱动。一个例子是产品中的推荐系统,用于向产品用户提供及时的相关内容。
其次,统计模型可以直接优化当前的内部流程,从而提高业务和工程流程的效率,降低运营成本。例如,统计模型可以通过预测仓库的库存水平来帮助物流。
第三,数据科学可以帮助营销和产品发现工作,本质上是将消息传递给尚未了解企业产品的细分市场。我们想到了细分客户群、预测客户行为的模型,以及为行动号召(CTA)对话框生成文案的模型。像根据用户在平台上的行为向用户展示产品特性这样的小事有助于观察所述特性。
当然,这些例子只是数据科学应用的非穷尽列表。然而,所有这些计划最终都会影响企业的关键指标。业务指标有许多定义,有些是专门针对单个业务本身的。幸运的是,许多关键业务指标很容易理解,不需要 MBA 学位。
有许多商业模式,但在本文中,我们将重点关注一种主导模式:基于订阅的业务,特别强调数据科学如何帮助优化这些业务。
什么是基于订阅的业务?
简单来说,基于订阅的商业模式是一种定期向客户收取产品或服务费用的业务,通常是每月或每年一次。基于订阅的模式在软件企业中非常流行,特别是由于云的兴起,导致了许多软件即服务(SaaS)企业。
请注意,SaaS 业务不一定是基于订阅的业务,因为现收现付模式(如雪花)确实存在。在后一种情况下,客户只需为使用量付费。然而,通常采用基于订阅的商业模式。
订阅业务的例子包括网飞的流媒体服务,报纸和杂志订阅,如纽约时报,以及 Hello Fresh ,向订阅者提供预定的饭菜。
一些老牌科技企业也在采用这种模式。例如,Adobe 也一直在通过其 Creative Cloud 将 Photoshop 和 Lightroom 等一些知名产品转移到云上。微软的办公套件产品也已经过渡到基于订阅的模式,而不是过去的授权模式。
有些订阅业务拥有大量免费用户,而订阅(高级)用户所占比例很小。我们的目标是建立一个用户网络,这些用户提供的数据可以用来增强付费产品的用户体验。免费用户也可以通过广告赚钱,这也带来了一些用户摩擦,并可以促使他们为付费产品付费,而付费产品通常不含广告。
一个突出的例子是 Spotify 的免费和 Spotify Premium 产品,这两种产品都有。
这种业务的成功取决于随着用户群的增长,该业务如何有效地将其用户群货币化。如果大约 5%的用户群是高级服务的订户,则一个企业被认为是好的,尽管这一比例可以随着更昂贵的订阅费率而降低。
到度量标准上!
关键财务指标
基于订阅的商业模式的成功通常由两个重要指标决定:年度经常性收入(ARR) 和其订阅服务的流失率。
ARR 被定义为每个单个订阅的所有年值的总和。由于可能存在不同等级的订阅计划,因此通常更好的做法是将收入标准化到订户基数。每用户平均收入****【ARPU】是对每用户收入贡献的简单平均衡量。
当订户终止了她与企业的关系时,订户发生骚动。流失率就是在固定时间段内取消订阅的用户平均数量与活跃用户数量之比。通常,周期范围设置为 7、14 和 30 天。较长的范围有助于消除由于用户不活动(例如,由于节假日等季节性影响)而导致的不规则性。然而,这是一个滞后指标,因为它只能追溯计算。
保留曲线将流失率可视化。这是在队列中测量的,并在订阅开始后的几个月内进行跟踪。理想情况下,我们希望在订阅一年多后,保持较高的保留率,并保持一条平坦或更好的微笑曲线。后者意味着顾客会在几个月后再次光顾。这可以在我画的下图中看到。
保留曲线(来源:作者)
至于一个真实世界的例子,这篇文章有蓝色围裙、Hello Fresh、美元剃须俱乐部和网飞的保持曲线。网飞的保留度最好,而 Hello Fresh 最差。
最后一个相关指标是净收入留存,这是 SaaS 企业经常使用的指标,也是造成流失的财务原因。给定一个群组,该群组的每月经常性收入(MRR)除以一年前的 MRR。这一指标不仅反映了收入流失的影响,还反映了升级和交叉销售等其他举措带来的好处。
衡量用户群
在大多数 SaaS 企业中,都有免费用户和订户。用户群对业务非常重要,因为用户网络围绕其他竞争对手构建了一条护城河。重要的不是注册的用户数量。取而代之的是产品或服务的活跃用户数量。
活动用户是参与产品的用户,例如登录和使用产品的功能。活跃用户的定义是特定于企业的。日活跃用户(DAU) 或月活跃用户(MAU) 将是关键指标,取决于产品/服务是日常使用的(如网飞)还是每月使用的。
同样,每日新用户(DNU) 或每月新用户(MNU) 追踪新用户。将新用户与活跃用户分开可以让我们跟踪新用户加入业务的速度。它也可以衡量营销工作的有效性。
有观点认为 DAU 和毛是虚荣心的衡量标准,因为除了吹嘘的资本之外,他们没有提供真正的价值。这些指标不能衡量用户对产品/服务的满意度,也不能衡量用户发现产品/服务的价值。另一方面,这是一个足够简单的跟踪指标(假设“活跃”的定义是可靠的),并让利益相关者了解业务增长了多少。
营销指标
一个相关的概念是订阅的生命周期价值(LTV) 。LTV 是订阅价格和流失率的函数。它还包括一个贴现率,用于贴现从认购中获得的现金的未来价值。用户并不是平等的:一小部分人比大多数人拥有更高的 LTV,而这些用户是一个企业想要保持快乐的。
为简单起见,我们假设用户的(经济)生命周期永远存在。那么,公式是
其中留存率是 1 减去流失率,总贡献是每个客户一年的总收入。例如,有更复杂的公式来解释每月不同的保留率。
获客成本(CAC) 是每个新获用户的销售和营销成本。这是对营销支出效率的一种衡量。很明显,如果我们花费太多去获得一个新客户,那是一件坏事。
我们可以计算每个营销渠道的 CAC,以便量化渠道的效率。
一个相关的措施是采取 LTV 和 CAC 之间的比率。这衡量营销支出在为企业带来高价值订户方面的表现。根据经验法则,LTV-CAC 的比率应该在 3:1 左右。1:1 的营销支出太多,5:1 的营销支出太少。这同样取决于企业的目标。
数据科学适合哪里?
数据科学本身在直接预测和优化这些指标方面发挥着作用,它改善了市场营销,并有助于将客户转化为订阅产品。这里有一些有用的应用。
直接度量预测
ARR 和 ARPU 的预测用于了解企业是否表现良好。
时间序列分析模型用于预测 ARR 和 ARPU。由于收入受季节变化的影响, SARIMA (季节性 ARIMA)模型及其变体将用于进行预测。幸运的是,如今许多复杂的金融预测都由强大的库来处理,比如脸书的预言家。
流失预测
到目前为止,最重要的领域是流失预测。人们普遍认为,保持订阅产品中的客户比获得新客户更好。原因很简单:让客户满意的成本远低于吸引新客户的营销费用(广告、搜索引擎优化、增长工具)。
概括地说,我们可以认为数据科学应用程序在宏观层次和微观层次上进行搅动。
在宏观层面上,我们预测预定义的用户群的流失,就像上面显示的保留曲线图一样。这些是例如在诸如北美的地理区域上的用户的聚合组。其目的是随着产品推出的继续,跟踪企业的流失率,以了解产品是否随着时间的推移为用户提供了更多的价值。
通常使用某种形式的建模来计算不同的计划,以获得准确的指标。在高层次上,有基于模型的和非参数化的技术。后者包括标准的生存分析技术,如卡普兰-迈耶估计量。
值得注意的是,“订阅”这个词本身就是一个负载词。它通常掩盖了订阅的复杂性。订阅本身可以简单到每月支付固定金额。它也可以像具有多种类型的“状态”一样复杂:订阅保持、基于支付方法使用的各种折扣以激励注册,以及不同类型的计划(例如,Spotify 中的单身与家庭计划)。由于本地化工作的原因,不同的地理区域可能会有不同的订阅计划和定价。
订阅通常有不同的状态,因此适合基于模型的技术。例如,半马尔可夫模型可以模拟不同的订阅状态,以及状态转换之间的订阅下降。使用半马尔可夫模型而不是马尔可夫模型,因为状态转换之间的持续时间可能遵循马尔可夫模型不能捕捉的任意持续时间分布(马尔可夫模型假设状态转换之间的时间呈几何分布)。
根据我的实践经验,使用简单的模型来建模和预测流失率。其中的一个主要原因是的可解释性:一个数据科学家经常需要解释如何做出流失预测。
推子-哈迪模型是一个简单但非常有用的客户流失预测模型。它产生的预测被用来得出对各种细分市场的用户 LTV 的估计,以给出高价值用户的样子。此外,由于从模型拟合阶段得出的贝塔分布给出了流失率的分布,因此它简单得足以解释。
微观层面是事情变得有趣的地方。在这里,机器学习模型被开发来检测处于搅动边缘的订户。这些模型考虑了关于订户的各种特征,以预测订户变动。
使用的特征主要来自两个来源:人口统计和行为信息。顾名思义,人口统计信息是用户固有的信息,例如他们来自哪里,在哪里工作,他们是什么年龄组和性别。行为信息是用户使用产品时收集的数据,比如登录次数和功能使用事件。
人口统计信息通常是静态的,不像行为信息会随着产品的变化而变化。通常,预测模型从行为信息中获得更多信息,因为用户可能会以非预期的方式使用产品。此外,产品/服务经常变化,尤其是 SaaS 企业,其变化就像一个新软件发布一样频繁,而边际分销成本几乎为零。
流失预测的真正目的是在用户可能流失时进行干预。
根据用户的流失倾向对他们进行排名,然后对那些对产品“持观望态度”的用户进行干预。所使用的干预方法在很大程度上取决于具体的业务。一些典型的方法包括电子邮件、应用内通知和折扣优惠。
传统上,干预过程与流失预测组件是分开的。现在出现了一类新兴的提升模型,这也说明了干预方法在客户流失中的作用。例如,很有可能一个用户在被干预的时候被搅动,但是在没有被干预的时候保留(称为不干扰)。另一方面,有些订户会从及时的干预中受益,因为干预方法可能会有效地证明产品的价值(称为说服)。接下来的目标是从一组用户中找到可说服的人。下图显示了这些类别。
隆起建模的四个理论课(来源:作者)
隆起建模本身是一个广泛的主题,在调查报告中有所概述。
线索评分
销售线索评分的目标是找到当前有可能订阅的免费用户。像流失预测一样,免费用户的人口统计和行为信息都用于训练机器学习模型,以输出倾向得分。
销售线索评分用于寻找产品的潜在转化者
用户,即 潜在客户然后从最有可能转化到最低的顺序排列。只有最高比例的用户被推动转换为订阅。如果潜在客户是大型企业和企业的潜在客户,这个潜在客户的排序列表将被传递给销售团队。
同样,这里可以使用提升模型,以便将销售和营销支出的成本考虑在内,从而推动用户进行订阅。
最后的话
我们只是触及了这个非常复杂的话题的表面。还有许多其他业务指标,其中一些取决于行业。数据科学有可能通过直接瞄准这些业务指标来提高业务效率,从而优化收入。
我将引用古德哈特定律来结束我的警告:
当一个度量成为目标时,它就不再是一个好的度量。
度量是有用的,因为它们提供了关于业务表现如何的指导。但是重要的是不要沉迷于度量标准。任何指标都无法捕捉用户体验、对产品的满意度和道德观。
参考
[1] Eric Benjamin Seufert,“增值经济学:利用分析和用户细分来推动收入”,摩根考夫曼,2014 年。
[2]芙罗莉丝·德夫里恩特、耶鲁安·贝瑞沃茨、沃特·韦贝克,“为什么你应该停止预测客户流失并开始使用提升模型”,《信息科学》,2019 年 12 月。
我见过的数据科学家
给各类数据人的职业建议。
数据科学家有五种类型,你是哪一种?
作为 PyDataMCR 的组织者,我遇到了很多数据类型。我不断遇到同样的数据科学家,我不断给出同样的建议。在过去的一年半时间里,我开始听到一些相互呼应的故事。该行业对他们业务中的机器学习抱有不切实际的期望。数据科学家也有不切实际的期望。数据科学 90%专注于数据准备和软件工程。作为数据科学家,您将承担业务转型的角色。
照片由来自 Pexels 的 Jonathan Borba 拍摄
到目前为止,我已经遇到了同样的 5 位数据科学家,按对企业的价值排序如下:
- 野心家
- 分析师
- 研究员
- 内部顾问
- 梦想
野心家
对机器学习有爱好或轻度学术兴趣的个人。没有增加企业价值的行业经验。
这些人将完成机器学习的自我指导课程。将很少关注软件工程和项目管理。大学课程或硕士学位也好不到哪里去。这个理论有它的位置,但可以在工作中学习。我还没见过哪个雇主对机器学习硕士印象深刻。
有志者可以参加机器学习挑战。这些项目给你银盘上的数据。数据科学的很大一部分是发现背景和准备数据。
上进者下一步该怎么做?
志向和抱负在数据科学中至关重要。我们正在制造昔日不可能的产品。保持这种能量,如果你停止学习新工具,你就会落后。自学在软件工程中是必不可少的,这同样适用于数据角色。
我给你的建议是尽你所能找到任何行业经验,去体验数据科学的真实世界。找一份数据科学的工作会很难,所以尝试一些与数据科学相关的工作。网站分析师是一个合适的切入点。即使有这个头衔,你也可能是公司最高级的数据科学家。
分析师
这个人是一家大公司的数据分析师。您是业务数据源和上下文方面的专家。最好的数据科学家仍然需要重新学习你所知道的东西。您的洞察力对于贵公司的大多数端到端数据产品至关重要。你生成了一份周报,人们不再关注。你担心人们忽视这些报告。
我看到大多数分析师都有增长的愿望。你可能知道一种查询语言和一种编程语言。你可能会觉得是时候学习一门编程语言了。你想从你的角色中得到更多。如果你能找到数据科学和机器学习的契合点,它们会让你和你的公司感到兴奋。
关于分析师的一个注记
数据分析和数据可视化是数据科学的基础。行业期待良好的数据可视化。机器学习的行业梦想。
我给你的建议是,开始称自己为数据科学家,总有一天你会相信。我最近遇到一位老板,他告诉一位下属,不允许他自称为数据科学家。我遇到了一个分析师团队,他们一夜之间所有人的头衔都变成了“数据科学家”,尽管技能没有变化。我在这里的观点是,公司对这个术语不太理解,所以也请不要介意。想出自己的定义和辩解,并坚持下去!
分析师下一步该怎么做?
学一门编程语言(我推荐 Python)和 SQL。如果你做到了这一点,那么下一步就是一些小规模的项目。你可能是贵公司目前最接近数据科学家的人,所以让我们利用这一点。
一些示例项目:
- 报告自动化——如果你每周都生成一些东西,那会消耗你的时间。使用 PyDoc 之类的库(或替代库)将时间夺回来。
- 预测——像 FBProphet 这样的库使高级预测超越了基础。将季节性等概念引入你的公司。确定一个展示日期,做一些酷的事情。
- 情感分析——像 NLTK 这样的库可以让你从文本中获得积极的分数。分析你对社交媒体的看法或呼叫中心的反馈。你能描绘出公众对一段时间的看法吗?这和你赚的钱有关系吗?
研究员
你有博士学位,你的团队有博士学位,你更愿意雇佣有博士学位的人。你的核心产品是基于数据的,或者来自机器学习的潜力很大。你的学术能力在长期项目中大放异彩。项目最终会发布一份白皮书。它们可能是有价值的,但在短期内无法付诸行动,任何兴趣都会变成冷漠。
你缺乏将你的想法整合到产品中的工具。这些团队经常将工作“越过围墙”交给一个独立的软件工程师团队,他们构建一个产品。
一个科研人员接下来该怎么做?
你是一名学者,学习新事物是你最擅长的技能。学习软件工程,掌控你的产品。如果你热衷于学习,其他团队也会热衷于教授。这种方法将您从一名研究人员转变为一名数据科学家。您现在拥有了自己的端到端产品。
内部顾问
竞赛有一个数据科学团队。你的公司决定不落后。你的公司试图雇佣一个精通数据科学各个方面的摇滚明星。你的公司很可能失败了。机器学习是你面试中测试的主要技能。如果你是第一个被雇佣的数据科学家,你现在的主要工作就是数字化转型。公司从未打算让你自我管理,但这是你最好的资产。你的成功取决于你的代理。你会受到很多阻碍。在不景气的日子里,你必须有很多副业。
你知道好的软件工程的价值。它使用的过程和工具看起来很诱人,如果你幸运的话,你也会使用它们。尽管相似,但它会剥夺你的资源和业务优先权。
你将凭借自己识别数据科学的 UX 问题的能力茁壮成长。如果你的工作没有可操作性和可访问性,企业就会忘记。关注唾手可得的果实将向企业展示数据科学的能力。你可能有机会交付一个价值巨大的大型项目。这种工作为你接下来的咨询做好了准备。
内部顾问接下来该怎么做?
问问你是否提供了价值,如果是,证明它。
梦想
我称之为“梦想”,因为双方都有不切实际的期望。有抱负的候选人几乎和公司一样热爱机器学习。但是你们都不明白数据科学的旅程将会有多艰难。
以下技能对数据科学团队(我说的是团队,而不是个人)至关重要。我不期望任何一个数据科学家都具备所有这些技能,但是如果你做得很好!
梦数据科学家是:
- 数据分析师——你分析和可视化数据。你把它传达给更大的企业。你对统计数据处理得很好,所以你对你的结果有信心。
- 数据工程师——你需要高质量的数据。一旦给定了上下文,您就可以从无人维护的来源创建良好的数据。您发现数据源和字典并记录它们。您构建数据管道并生成长期要素存储。您授权企业访问数据。
- 项目经理——企业希望你管理自己的项目。你收集需求并带头。思想的重担压在你身上。你必须发现你自己的利益相关者并管理他们的期望。你通过交付产品来管理你的工作流程。
- 软件工程师——你是软件开发许多方面的专家。你的代码质量很高。你的工作是企业的支柱,因此必须接受检验。企业希望您创建数据仪表板。您管理自己的部署管道。您发布和记录用于商业消费和其他用途的 API。光是这一点,对一个人的期望就很高了。
- 机器学习工程师——企业希望你理解现代机器学习。这是你在面试中最重要的技能。一旦开始工作,你就不会经常用到它。
我们当前的目标是成长为“梦想中的”数据科学家。我认为这是当前行业预期的一个不可持续的症状。我以前在“网站管理员”的角色中见过这个问题,最近在“全栈开发者”中也见过。试图同时雇佣所有这些角色,而且是在一个人身上,会让我们走向失败。作为一个人,他专门研究上述几个方面,而不是全部。如果你正在雇佣一名数据科学家,雇佣一个他们之间共享上述技能的组合,并且一起很好地工作。
数据科学家的故事
我们都经历过,对吧?
醒醒
现在是早上 7 点,闹钟响了。再睡 5 分钟,好的,10 分钟。我早上 8 点重新睁开眼睛,该死!太晚了,我没有时间吃早餐。为什么我这么累?昨晚我开始试验一种新的聚类算法,并且…熬夜到凌晨 2 点…我明白了!编码就像毒品:你说你可以随时停止,但你最终却在键盘上睡着了。
Marcel Friedrich 在 Unsplash 上拍摄的照片
在工作
我打破了所有的物理定律,设法在 9:20 前赶到了办公室。我迟到了 20 分钟,但是,即使在大公司,这仍然是一个数据科学部门,所以他们不应该关心。当我走进办公室时,经理直直地看着我:他知道我迟到了,但他什么也不说,因为我们需要推广弹性工作时间。他知道我意识到了这一点,但我也知道如果我逼得太紧,他会暂停整个办公室的弹性时间表,把我当成替罪羊,他也知道这一点。我无视这种墨西哥僵局,去坐在我的办公桌前。
我继续和我的团队进行常规的站立会议。“我们迟到了”、“交货是今天”、“数据很乱”、“模型预测只有零”……我已经听过很多次了,在这一点上,如果没有它,开始新的一天会很奇怪。我的团队中超级焦虑的成员盯着我,好像我有所有这些问题的解决方案,而我唯一知道的是,站着开会应该是非法的。
我喝了足够杀死一头小象的咖啡,因为我在吉拉积压的工作中想起了我今天要做的事情:
- 模型微调
- 与 IT 部门一起定义部署参数
- 完成 PowerPoint 演示
- 在高层会议上分发项目成果
然后我看了看我昨天创建的真正的任务列表:
我承认,像往常一样,我的日常活动包括
- 实际数据科学的 20%
- 60%无聊的项目管理工作
- 一个泊松实验,它可以随机地把别人的问题分配给我,这些问题需要被分类,以便我能够继续前进。
来源: Giphy
数据科学的东西
出于明显的原因,我首先处理建模问题。这是一个简单的分类模型,昨天我离开时它还工作得很好,但现在评估指标都乱了,那么一夜之间到底有什么可以改变呢?
好吧,让我们言归正传:戴上耳机,大声放音乐,把自己与世界隔绝开来,只有我和一个需要解决的问题……我进入状态了。
来源: Giphy
看代码,发现一个 bug,修复它。那这个呢?擦掉重写更好。继续,这里有一个我从未见过的问题,不需要与其他人类互动, Stackoverflow 是我唯一需要的朋友。我刚刚学到了一些新东西。是的,这就是我做我所做的事情的原因,我热爱我的工作:当你面对一个从未见过的问题并学习如何解决它时的自豪感和力量,就像我可以解决任何问题一样,只是把它带来。
我完成了,只是做了很多工作,但现在一切都应该工作顺利-
来源:吉菲
愚蠢的代码,你这个没用的 !#@$% & ,你敢小觑我。显然,为此我必须去超级赛亚人。第二轮:
资料来源: Giphy
明白了,问题不在模型,而在数据。是的,是数据!…天哪,是数据!来自一个完全不同的公司单位的数字,我对此完全没有控制权。没问题,我所要做的就是把情况报告给我的经理,他会和那个部门的人一起解决这个问题。
我:“……原来如此。你知道该跟谁谈这件事了吗?”
经理:
我:“要不要我帮你想出合适的联系对象?”
经理:
我:“我得自己做,不是吗?”
电梯推销术
当我在考虑是打电话给那个部门的人还是亲自去那里时,我电脑上的 Skype 响了:就是它。一看我真正的待办事项清单,我突然知道该做什么了…我要亲自和那个部门谈谈,因此我现在不能回答 Skype。
当我试图描绘出这家公司我从未见过的一面会是什么样子时,我发现自己和一个不知道是哪个部门的人一起坐在电梯里,希望我们不要谈这个话题。我太天真了…
同事 X:“哇,你是大数据科学家之一?”
我:“是啊,你好。实际上,它只是数据科学家”
同事 X:“我明白了,所以你像个天才?”
我:“我真的不是”
同事 X:“你会做网站吗?”
我:“那其实不是我的……”
同事 X:“我有一个从未告诉过任何人的应用程序的想法:基本上是预测人们会有多喜欢一个尚未发明的产品的东西。你能做到吗?
我:“你有数据吗?”
同事 X:“没有”
我:“那不行,我做不到”
同事 X:“得了吧,别谦虚了,你们做的那些终结者的东西,太酷了。但是你需要小心,否则机器人很快就会取代我们的工作”
我回想起上周我的神经网络无法区分猫和狗:“好的,我们试试”
非数据科学的东西
在另一个部门走来走去感觉就像魔多的佛罗多:为什么每个人都在看着我?总之,在像迷失的灵魂一样四处游荡了一会儿后,我找到了我一直在寻找的办公室:“客户服务部”。一位女士过来迎接我,并带我去吃了一份甜点自助餐,桌子上有一条横幅,上面写着:“退休快乐,伯尼”。显然她以为我是去参加派对的,所以我嘴里塞满了巧克力蛋糕,解释说我是来处理数据的。我被指向一个正在快乐地庆祝派对的家伙,我像个情绪杀手一样打断他,向他解释我的问题。
我:“你了解情况吗?您从客户那里收集的数据有问题”
他:“是啊,你可能是对的”
我:“嗯,你要修吗?”
他:“没有”
我:“为什么不呢?”
他:“因为我是伯尼!”
我:“哦…”
Berny:“如果你愿意,我今天可以开一个问题,这样下周我们的外部顾问会处理好门票,几个测试,你会在 10 天左右在网上看到它”
我:“但是我今天需要它”
伯尼指着他的桌子:“那随你便”
是的,我不是网页开发专家,我只掌握了 HTML 的基础,但是…为什么不呢?在我脑子里重复了三个小时“这到底是什么?”我开始了解全局。
来源:吉菲
找到了错误,并且…修复了!再见,伯尼,见到你真是太高兴了,我要带走一些你的巧克力蛋糕。
当我回到办公室时,我注意到有一个模糊的存在在我的办公桌前等着我:就是它。他们在这里告诉我,为了将我们的机器学习模型部署到生产集群中,我需要用 Java 全部重写。
我:“伙计们,伙计们,伙计们…要不要来杯咖啡和一些巧克力蛋糕?”
我花了一个小时向它解释 Python 和现代机器学习的奇妙之处,直到它们允许我有所怀疑。子弹躲开了!在离开之前,其中一个人说了一些奇怪的话,比如“祝你以后会见大老板好运”。他是什么意思?让我快速看一下我真正的待办事项清单…哦!
以音速打开 Power Point,回想起小时候想当画家。
来源: Giphy
会议开始 30 分钟后,我正在向我的经理展示我的艺术作品,我认为这是检查我是否可以避免它的正确时间,因为迄今为止还没有人明确说过我必须做演讲。
我:“你已经知道谁会在会上发言了吗?”
经理:
我:“是我吧?”
介绍会;展示会
经理和我在大会议室前面,当我把衬衫塞进牛仔裤时,他穿得很时髦。这是我所能接受的最正式的说法,因为我相信,即使你穿着西装说,废话仍然是废话,但可能这个世界并不是这样工作的。
我们和一些人坐在这张桌子旁,他们在生活中显然有着和我不同的问题,最重要的是,他们都在等着我说话。
来源: Giphy
我已经就项目、数据、模型、问题谈了 10 分钟,他们看起来比我在 SQL 讲座中还要无聊。强硬的人群。在会议结束前几秒钟,我的经理宣布,该项目一旦部署,肯定会使$ $。观众喜欢这一点,并满意地离开房间。
我想说的是,$ $实际上只是对最好情况的估计,不是更可能的基本情况,也不是更保守的最坏情况。我想说的是,这极大地提高了利益相关者的期望,这是永远无法实现的。我想说的是,我知道如果我们不承诺高数字,他们就不会分配预算来部署机器学习项目,但这就是为什么数据科学陷入了炒作和失望的循环中,我们作为数据科学家应该改变这种情况。我还没来得及说一句话,我的经理就像往常一样让我闭嘴,我知道我们将不得不更加努力地工作,以某种方式达到预期。
我疲惫地望着这座巨大建筑的窗外,看着夕阳西下。多好的一天啊:我修复了我的模型,解决了别人的问题,改变了关于编程语言的公司政策,精心制作了一个像样的演示文稿,和“贵宾”们呆了几分钟。我是英雄!
我真的很累。
摘自《黑暗骑士崛起》,2012 年(鸣谢:华纳兄弟影业)
下班后
我回家正好赶上吃晚饭,但今晚将会有所不同:我可以放松,做些好吃的,看网飞,看我父母去年圣诞节送给我的小说,最重要的是,我可以及时入睡,明天一早醒来,开始新的一天。
我关掉厨房的灯,刷牙,关掉我的笔记本电脑。习惯性地,我开始关闭今天的浏览器标签…哦,等等,昨晚的笔记本仍然是打开的,也许现在我会用一行 for-loop 来修改这段代码:太好了!如果我改变这些参数,会发生什么?错误!什么?我需要了解为什么…调试模式被激活。
凌晨 2 点:
Marcel Friedrich 在 Unsplash 上拍摄的照片
我希望你喜欢它!如有问题和反馈,或者只是分享您感兴趣的项目和故事,请随时联系我。
👉我们来连线👈
数据科学简介
约翰·霍普斯金 DS 专业化系列
数据科学、大数据、数据和数据科学过程。
由 Unsplash 上 Greg Rakozy 拍摄的照片
[Full series](https://towardsdatascience.com/tagged/ds-toolbox)[**Part 1**](/the-data-scientists-toolbox-part-1-c214adcc859f?source=---------4----------------------------) - What is Data Science, Big data and the Data Science process[**Part 2**](/how-to-learn-r-for-data-science-3a7c8326f969) - The origin of R, why use R, R vs Python and resources to learn[**Part 3**](/a-crash-course-on-version-control-and-git-github-5d04e7933070) - Version Control, Git & GitHub and best practices for sharing code.[**Part 4**](/the-six-types-of-data-analysis-75517ba7ea61) - The 6 types of Data Analysis[**Part 5**](/designing-experiments-in-data-science-23360d2ddf84) - The ability to design experiments to answer your Ds questions[**Part 6**](/what-is-a-p-value-2cd0b1898e6f) - P-value & P-hacking[**Part 7**](/big-data-its-benefits-challenges-and-future-6fddd69ab927) - Big Data, it's benefits, challenges, and future
本系列基于约翰·霍普斯金大学在 Coursera 上提供的 数据科学专业 。本系列中的文章是基于课程的笔记,以及出于我自己学习目的的额外研究和主题。第一门课, 数据科学家工具箱 ,笔记会分成 7 个部分。关于这个系列的注释还可以在这里找到。
介绍
科学家有能力在海量数据中发现模式和洞见,就像天文学家用望远镜向外太空望去,在数十亿颗恒星和其他星系中发现新的行星、星系和黑洞。数据科学从根本上来说就像科学一样,通过结合不同的领域,即数学、计算机科学、哲学等,来回答关于世界的问题。,以及独特的方法和新技术,以扩大和提高我们的能力,以回答他们。
无论您是数据科学的新手,还是在职数据科学家,回到数据科学的核心主题总是有好处的。我们很容易被新工具或单调的工作分心,忘记数据科学的主要概念和它创造的惊人可能性。因此,本文可以作为数据科学的介绍,也可以作为数据科学的复习。尽管如此,我希望你能从中学到一些东西,并享受阅读的乐趣。
什么是数据科学?
从广义上讲,数据科学是关于利用 数据回答问题。为了回答这些问题,数据科学家综合运用了多种技能,包括统计学、数学、计算机科学、数据辩论、清理、可视化、分析等。
基于《经济学人》特刊的报道:
数据科学家被广泛定义为结合软件程序员、统计学家和讲故事者/艺术家的技能来挖掘隐藏在海量数据下的金块的人。
正是对所有这些技能的掌握,让数据科学家在这个大数据时代变得有价值。更重要的是,数据科学之所以至关重要,是因为它能够从数字和图形中形成联系,并将它们转化为见解,从而帮助做出基于事实的更快决策,这在这个快节奏的世界中至关重要。就像一台把简单的碳变成珍贵钻石的机器一样,公司和企业现在能够以多种方式利用数据,而数据本身是没有用的。
除了以盈利和扩张为目的装备数据科学家的商业之外,数据科学(预测和推理)也有无数的用途,通过预测和推理为社会做出贡献,并通过美丽的数据可视化讲述故事——例如预测疾病、自然灾害或犯罪,以及可视化新冠肺炎数据的最新更新,由于气候变化的影响而导致的全球气温缓慢上升,或者全球范围内贫困或饥饿的逐渐减少。
数据科学文氏图
演职员表:德鲁·康威
根据著名的 Drew Conway 的数据科学维恩图,数据科学可以等同于:
黑客技能+数学和统计知识+实质性专业知识
实质性专业知识 =提出正确的问题并很好地阐述问题
黑客技能 =提取和挖掘数据,清洗和格式化数据,可视化和分析数据,编写简洁的机器学习和深度学习代码,利用工具和包。
数学和统计 =用于执行分析和使用统计学习技术将信息转化为有用信息(预测和推断)并做出决策的基础知识
为什么现在数据科学是一个东西?
数据科学实际上有很长的历史,可以追溯到 60 年代。但是它现在如此受欢迎的原因是(1)首先,根据摩尔定律,由于数据(大数据)的指数增长(T19),以及(2)由于创新和技术进步,廉价计算的兴起。
这两个原因都是创建丰富数据的典型环境以及用于分析数据的工具的完美成分,同时升级计算机基础设施(内存、处理器、软件等)。我们今天所能做的,有了基础设施和超级计算机,在当时是虚构的,我们每天都在取得突破和突破障碍
数据科学与大数据密切相关,因为数据越多,分析得出的结论就越准确。
什么是大数据?
如果不引入大数据的概念,对数据科学的解释是不完整的。
根据牛津语言,大数据被定义为:
非常大的数据集,可以通过进行计算分析,揭示模式、趋势和关联*,尤其是与人类行为和互动相关的。*
换句话说,大数据被简单地定义为大量的数据集合。
大数据的 3 个 Vs
大数据有 3 个特征,也称为大数据的 3v,可以帮助您更好地理解这个术语。
1。体积
- 生成和存储的数据量。它的大小决定了价值和潜在洞察力,并将数据集归类为大数据。
2。品种
- 结构化或非结构化形式的数据的类型和性质;定性或定量,即图像、文本、音频、视频等。
3。速度
- 数据生成和处理的速度。大数据通常是实时生成的,例如全球每天观看的 YouTube 视频或全球新冠肺炎病例的数量。
现在,您对什么是数据科学和大数据有了一个简单的概念,让我们回到基础上来,分析一下数据(所有魔法的核心成分)到底是什么。
什么是数据?
数据是数据科学流程的组成部分,通过了解什么是数据,可以帮助您提高效率并理解数据科学的意义。
1.根据剑桥英语词典:
信息,尤指事实或数字,被收集起来以供检查、考虑并用于帮助决策。
2.根据维基百科
一组定性或定量变量的值。
根据维基百科的定义,数据可以分解为术语集合、变量、定性和定量。
设置
- 从中提取数据的总体
变数
- 输入变量(X,预测值,独立变量)
- 输出变量(Y,响应,因变量)
定量
- 关于数量的信息(可以计数和测量)
- 年龄、身高、体重、病例数等。
定性
- 描述性变量(可观察但不可测量)
- 肤色、血型、是否感染、地址等。
例子
以新冠肺炎疫情为例,假设我们想用一个简单的散点图来显示美国确诊病例的数量,
- 设定——美国的确诊病例。
- 独立 变量,X - 时间(天)
- 因变量,Y - 确认的数量
- X 和 Y 都是定量变量
绘图的结果也可以用来描述 X 和 Y 之间的关系,可以是正相关,也可以是负相关。随着统计学习技术的使用,诸如线性回归之类的算法可以用于建立用于预测和推断目的的模型。
数据杂乱且不完美
随着您在数据科学领域的进步,您将认识到数据是杂乱的和非结构化的,需要技能、耐心和时间来清理数据和构建数据,以便随时可以使用。以图像数据为例,如果您要建立一个面部识别模型来检测面部,输入图像可能会很暗、有纹理或模糊等。这些杂乱的图像数据可能很难处理。另一个方面是缺失数据,从现实世界中挖掘或收集的数据经常会受到缺失信息的攻击,可以采用几种技术来处理它们。
数据来源
数据来自许多地方,尤其是在智能手机使用量因社交媒体以及网飞和 Spotify 等流媒体服务的兴起而大幅增加的这个时期。数据可以分为内部数据和外部数据,其中内部数据是企业内部生成的信息,如财务数据,外部数据是来自客户、使用分析等的信息。好的数据通常也很难找到,在大多数情况下,你必须从互联网上挖掘数据来进行分析,并且需要大量的清理才能使其有用。
数据是次要的
数据科学家应该遵守的最重要的规则是在寻找数据之前总是先问问题。正如科学方法始于假设一样,数据科学始于对解决手头问题至关重要的问题。
正如爱因斯坦所说:
“如果我有一个小时的时间来解决一个问题,而我的生命取决于这个问题的解决方案,我会在前 55 分钟确定要问的合适的问题…因为一旦我知道了合适的问题,我就可以在不到 5 分钟的时间内解决这个问题。”
数据科学过程
与科学方法类似,数据科学有一个将数据转化为见解的过程。
该过程可简要总结如下。
数据科学从(1) 产生问题开始,这有助于你很好地理解问题,在问题得到很好的阐述之后,是时候(2) 使用数据科学技术从相关来源收集数据。收集完数据后,就该(3) 清理数据,对数据进行格式化,为下一步做准备,也就是(4) 分析和探索,用统计方法发现隐藏的模式和关系。在这之后是(5) 建模,其中机器学习模型被构建用于预测和推断。最后,结果(5) 被传达以通知其他人并用于决策。
总结一下:
- 提出问题
- 数据收集
- 数据清理
- 数据分析和探索
- 数据建模
- 交流结果
数据科学家是做什么的?
数据科学家在众多领域都有深远的应用。但是,为了让人们了解数据科学如何为社会做出贡献,让我们来看看Nate Silver,FiveThirtyEight的创始人兼主编,他使用统计分析来传达引人注目的故事和主题,主要涉及选举、政治、体育、科学、经济等。
他最著名的工作之一是关于 2016 年选举,基于统计技术产生了准确的预测。你也可以查看该网站对 2020 年美国大选的预测。
预测选举当然不是一项简单的任务,引用西尔弗的话来说,他使用的主要模型很复杂,
它涉及大量的路径依赖和大量的非线性,候选人的表现可以以相当复杂的方式相互影响。在我们看来,我们在这件事上没有多少选择。我们的初选模型必然是复杂的,因为初选本身就是一个复杂的过程。
换句话说,有无数的相关因素不一定是线性的(X 和 Y 之间没有直接关系),它们以不同的方式相互作用。如果你想了解更多关于他的模型是如何工作的,点击这里。
从这个例子中得到的一个重要教训是,数据科学工具和方法确实只是提高了效率和速度,但要真正利用它,需要知识和能力来选择正确的因素,同时消除错误的因素,以得出正确的结论。要做到这一点,首先需要问正确的问题。如果你决定进入这个领域,这是你必须了解的事情。
摘要
他的数据科学方法论——使用数据来回答问题——就像我们根据已有的知识做出决策一样直观。我们都试图根据我们掌握的信息来回答生活中的问题,无论是大问题还是小问题,当我们犯了错误时,那是因为当时缺乏信息。我们能够问的问题也仅限于我们所掌握的信息。
但是现在,每天从一个来源到另一个来源产生的数据的大小和数量是天文数字,随着数据科学和利用数据的新技术的出现,我们现在有能力发现以前没有答案的问题的答案,甚至产生当时不可思议的新问题。
随着数据科学变得更加容易获取和民主化,错误信息和错误结论的危险也随之而来。因此,最重要的是从提问开始,并学会问正确问题的技巧。
通过提出正确的问题和获得相关数据,以及数据科学工具和机器学习算法的力量,我们能够揭开世界的隐藏模式,解码曾经深不可测的奥秘。
在第 2 部分中,我将写为什么在数据科学中使用 R
感谢阅读,我希望这篇文章是教育和有用的!
如果您对学习数据科学感兴趣,请查看“超学习”数据科学系列!
这是一个简短的指南,基于《超学习》一书,应用于数据科学
medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b)
查看其他文章,了解更多关于数据科学的知识。
[## 互联网上 20 大免费数据科学、ML 和 AI MOOCs
以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表
towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12) [## 机器学习和数据科学的 20 大网站
这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。
medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 开始数据科学之旅的最佳书籍
这是你从头开始学习数据科学应该读的书。
towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 数据科学 20 大播客
面向数据爱好者的最佳数据科学播客列表。
towardsdatascience.com](/top-20-podcasts-for-data-science-83dc9e07448e) [## 2020 年你应该订阅的 25 大数据科学 YouTube 频道
以下是你应该关注的学习编程、机器学习和人工智能、数学和数据的最佳 YouTubers
towardsdatascience.com](/top-20-youtube-channels-for-data-science-in-2020-2ef4fb0d3d5)
联系人
如果你想了解我的最新文章,请通过媒体关注我。
也关注我的其他社交资料!
请关注我的下一篇文章,记得保持安全!*
数据科学家的终极播放列表
让你为 EDA 加油或摆脱数据科学焦虑的歌曲
Medium 上有很多关于个人数据科学项目的文章——但有人谈论过他们如何激励自己真正完成这些项目,或者当他们陷入困境时如何摆脱愤怒和沮丧吗?
Patrik Michalicka 在 Unsplash 上的照片
这就是你不知道你需要的文章:工作时听的数据主题歌曲列表,按情绪分类。大多数歌曲都属于另类风格,因为那是我最喜欢的。)
为探索性数据分析大肆宣传
让我们开始这个项目吧!
来自 Spotify.com(嵌入使用条款)
《咬紧牙关》,马丁·卢克·布朗著
有时候,你只需要咬紧牙关,连续几个小时清理一些数据。
来自 Spotify.com(嵌入使用条款)
乔恩·贝里昂的《醒来吧》
当你早起去做一个项目的时候!急躁!
来自 Spotify.com(嵌入使用条款)
无论如何,想象龙
有时你必须做一些无论如何都要让项目进行下去的事情。
为了更沉思/深入的工作氛围
深沉的工作音乐>>深沉的家庭音乐
来自 Spotify.com(嵌入使用条款)
双星海,由死亡出租给小可爱
仔细想想,一切不都只是 1 和 0 吗?
来自 Spotify.com(嵌入使用条款)
元数据,作者亚当·梅尔乔
我第一次听到这首歌就爱上了它——听听吧。
来自 Spotify.com(嵌入使用条款)
本杰明·弗朗西斯·莱夫维奇《我们制造的混乱》
当你处于最佳状态,但你没有使用任何注释或降价来解释你的代码…
来自 Spotify.com(嵌入使用条款)
重复,由年轻的巨人
复制,粘贴,重复。我最喜欢的乐队之一。
当实际上什么都不工作的时候
释放焦虑的歌曲
来自 Spotify.com(嵌入使用条款
被大数据解开
当你因为正在处理的大量数据而感到困惑时,这首歌简直是完美的。此外,它有一个伟大的另类摇滚声音。
来自 Spotify.com(嵌入使用条款)
准备放手,把大象关在笼子里
当你准备退出卡格尔比赛的时候。
来自 Spotify.com(嵌入使用条款)
我觉得我快淹死了,只差两英尺
有时候,尤其是像我这样的新手,你会迷失在酱汁里。
嘿 Siri,排队“关门时间。”
好了,您已到达此播放列表/文章的结尾。如果这部作品有很大的反响,我会印象深刻,但老实说,我写它的时候很开心。
查看我的其他不那么严肃的数据科学文章:
注意:这篇文章应该是娱乐性的——请不要实际遵循这些步骤。
towardsdatascience.com](/how-to-become-a-data-scientist-in-10-steps-ae8698099508) [## 你是哪个机器学习模型?
对一些经典模型如何工作的轻松、诙谐、非科学的描述
towardsdatascience.com](/which-machine-learning-model-are-you-7ac635101d3b)
感谢阅读!如果你想继续听,这里有一个包含本文所有歌曲的播放列表的链接(如果你点击右上角的 Spotify 标志,它将在 Spotify 中打开) 😃
来自Spotify.com(由梅根·迪布尔制作)**
数据共享——加入我们的纷争
一个由来自世界各地的数千名数据科学家组成的社区,随时准备交流想法并为您提供帮助!
作为“走向数据科学”( TDS)的一员已经有几年了,看着我们的社区发展到今天拥有成千上万的读者,我想是时候为每个人提供一个地方了!
我们启动了这个项目,希望对 TDS 感兴趣的人可以通过这个简单的方式找到与他们有共同兴趣的人,并就他们希望提交给出版物的文章寻找反馈或想法。
现在,它已经远远超出了这个范围,成为了一个开放的领域,任何数据科学领域的人都可以来这里讨论他们正在从事的工作、他们面临的任何问题或提高他们的理解。
我们很乐意加入我们的 Discord ,寻求建议、资源并与行业内志同道合的人交流。我们涵盖了该领域的所有核心要素,包括机器学习、自然语言处理和数据工程。
只是我们来自全球会员的一些介绍&一些问题将在我们的#机器学习频道中得到解答!
此外,还有讨论你的职业生涯的区域,添加你正在从事的项目(或认为值得更多认可的项目)和值得一读的文章!
当你第一次到达时,花一分钟让我们在#介绍中知道你是谁,并查看我们的#指南。将会有一个由社区领导的编码挑战,所以你可能想在#the-project 停下来看看接下来会发生什么并参与进来!
我们有很多非常友好、知识渊博的会员,所以如果你想要一个具体问题的答案,或者只是想和这个领域的其他人搭讪,我们的不和就是问题所在。
您不需要的数据:移除多余的样本
在 ML 中有这样一句话:垃圾进,垃圾出。但是数据好坏到底意味着什么呢?在本帖中,我们将探讨时尚 MNIST 训练集中的数据冗余,以及它如何影响测试集的准确性。
什么是数据冗余?
我们将在下一篇文章中给出更详细的解释,但是让我们给你一个冗余数据的例子。想象你正在构建一个分类器,试图区分猫和狗的图像。您已经有一个 100 只猫的数据集,并且正在寻找一个狗图片的数据集。你的两个朋友,罗伯特和汤姆,提供了他们的数据集。
- 罗伯特上周给他的狗贝拉拍了 100 张照片。
- 汤姆给你看了他去年收集的 100 只不同的狗的照片。
你会选择哪一组狗?
当然,这取决于分类器的确切目标以及它将在生产中运行的环境。但我希望在大多数情况下,你会同意,汤姆和 100 只不同的狗的数据集更有意义。
为什么?
让我们假设每个图像都有一定数量的信息可以贡献给我们的数据集。具有相同内容(相同的狗)的图像比具有新内容(不同的狗)的图像添加更少的附加信息。人们可以说相似的图像有语义冗余。
有一些论文,如《你不需要的 10%》,更详细地探讨了这个问题。
删除冗余数据
像你不需要的 10%这样的文件遵循一个两步程序来发现和删除信息较少的样本。首先,他们训练一个嵌入。然后,他们应用聚类方法,使用凝聚聚类来移除最近的邻居。对于聚类,他们使用常见的余弦距离作为度量。您也可以将要素归一化为单位范数,并使用 L2 距离来代替。
我们需要解决两个问题:
- 我们如何得到好的嵌入?
- 凝聚聚类具有 O(n)的时间复杂度和 O(n)的空间复杂度
作者通过使用提供的标签训练嵌入来解决第一个问题。考虑训练一个分类器,然后去掉最后一层,得到好的特征。
第二个问题需要更多的创造力。让我们假设我们有很好的分离各个类的嵌入。我们现在可以独立处理各个类。对于具有 50k 个样本和 10 个类的数据集,我们将对每个 5k 个样本运行 10 次聚类。由于时间和空间复杂度都是 O(n)和 O(n ),这是一个显著的加速。
WhatToLabel 的启动方式
在 WhatToLabel,我们希望通过关注最重要的数据来更有效地利用机器学习。我们帮助 ML 工程师过滤和分析他们的训练数据。
我们使用同样的两步方法。
我们数据选择算法的高级概述
首先,我们想得到一个好的嵌入。我们的很多努力都集中在这一部分。我们有预先训练好的模型,我们可以使用这些模型作为基础,通过自我监督对特定数据集进行微调。这使我们能够处理未标记的数据。我们将在另一篇博文中解释自我监督部分。预训练模型具有类似 ResNet50 的架构。然而,嵌入的输出维度只有 64 个维度。高维引入了各种问题,如更高的计算和存储时间,以及由于维度的诅咒而导致的更少有意义的距离。
我们训练嵌入的方式仍然可以获得很高的精确度:
ImageNet 2012 val 集上不同嵌入方式的比较
其次,我们希望使用一种基于嵌入的快速数据选择算法。凝聚聚类太慢。我们通过构建一个图来探索局部邻域,然后在其上迭代地运行算法。我们使用两种算法。破坏性的,我们从完整的数据集开始,然后移除样本。另一方面,构造性算法通过一个接一个地添加相关样本来从头开始构建新的数据集。
当我们结合这两个步骤时,我们得到了一个快速过滤解决方案,即使没有标签也能工作。
我们开发了一种产品,你可以在whattolabel.com查看,或者你可以按照这个两步过滤程序建立自己的管道。
对于下面的实验,我们使用 WhatToLabel 数据过滤解决方案。
过滤时尚-MNIST 去除冗余
GitHub 资源库中提供了重现实验的完整代码:https://github.com/WhatToLabel/examples
现在,我们知道什么是冗余,它们会对训练数据产生负面影响。让我们来看看一个简单的数据集,如时尚-MNIST。
时尚-MNIST 在训练/测试集中包含 50k/ 10k。对于下面的实验,我们只过滤训练数据。我们的目标是去除 10%。一次使用随机选择的样本,一次使用更复杂的数据过滤方法。然后,我们针对整个数据集评估各种子采样方法。为了评估,我们简单地训练一个分类器。
实验设置
我们使用 PyTorch 作为框架。为了进行评估,我们使用以下参数训练带有 SGD 的 resnet34:
- 批量:128 个
- 纪元:100 年
为了确保再现性,我们为随机数生成器设置了种子:
为再现性设置随机种子
我们使用 ImageNet 统计数据对输入数据进行标准化,对于训练数据,我们使用随机水平翻转作为数据扩充。此外,我们将黑白图像转换为 RGB。
训练集和测试集的数据转换
为了用不同%的训练数据进行多次实验,我们使用了一个简单的技巧。在数据加载器中,我们使用随机子集采样器,它只从索引列表中采样。对于 WhatToLabel 过滤的数据集,我们提供了存储库中的索引列表。对于随机子采样,我们使用 NumPy 创建自己的列表。
获取实验索引和创建数据加载器的代码
在训练我们的分类器之前,我们希望根据每个类别的样本数量重新平衡交叉熵损失的权重。
基于每个类的样本数重新平衡损失的 Python 代码
现在一切就绪,我们可以开始训练模型了。在 Nvidia V100 GPU 上,每个时期大约需要 15 秒。完成整个笔记本大约需要 75 分钟。
结果
在完成训练和评估过程后,我们应该看到三个不同的情节。在左边的第一行,我们有使用随机二次抽样的两个实验的训练损失。在右边,我们有所有三个实验的测试精度(两个二次采样实验和一个全数据集实验)。在底部,我们仔细查看了 50–100 个训练时段的准确性结果。
显示三个实验的训练损失和测试准确度的图
在时间点 60 和 80 有两次准确性和损失的跳跃。那两次跳跃来自于学习率的更新。如果你仔细观察精确度,你会注意到使用 WhatToLabel 子采样(红色)的实验精确度与使用完整数据集(蓝色)的实验精确度非常相似。使用随机子采样(绿色)的实验精度较低。培训过程的结果支持这些发现。三个实验的最高精度如下:
- 使用 WhatToLabel 子采样的最佳测试精度(90%): 92.93%
- 使用完整训练数据集的最佳测试准确度(100%): 92.79%
- 使用随机二次抽样的最佳测试精度(90%): 92.43%
用更少的训练数据获得更高的精度!?
起初,这可能没有意义。但是让我们回到文章的开头,在那里我们讨论了冗余数据。让我们假设在时尚 MNIST 数据集中有这样的冗余。如果我们删除它们,数据集会更小,但模型通过训练获得的信息不会减少相同的数量。这种冗余最简单的例子是一个看起来相似的图像。但是我们寻找的不仅仅是相似的图像,我们寻找相似的特征激活或语义冗余。
用不同的种子重复实验?
进行多次实验并报告平均值和标准偏差非常重要。也许我们之前的结果只是一个异常值?
我们在 WhatToLabel 有一个内部基准测试套件,可以在各种数据集上评估我们的过滤软件,具有多种训练集大小和多种种子。
whattolabel 与随机二次抽样的时尚-MNIST 检验准确性
我希望你喜欢这篇文章。在我们的下一篇文章中,我们将更详细地讨论数据冗余。
伊戈尔,whattolabel.com
联合创始人
现代分析的黎明——2020 年商业智能工具的一些最新趋势
基于调查的方法来确定每个数据科学家都应该知道的 BI 工具
斯蒂芬·道森在 Unsplash 上拍摄的照片
商业智能(BI)是一个概念,通常涉及组织中适当且有价值的商业信息的交付和集成。公司使用 BI 来检测重大事件,如深入了解客户行为、监控关键绩效指标以及获取市场和销售情报,以快速适应不断变化的动态业务。
BI 构成了所有报告项目的支柱,尤其是在行业决定从孤立的工作方式转变为为所有业务部门创建单一的真实来源之后。70%的工作围绕着数据操作和报告,这就是为什么数据科学家、业务分析师、数据分析师,甚至利益相关者都应该熟悉至少一种自助式 BI 工具。
作者注 —本文见解来源于在线 数据分析调查 。来自数据分析行业不同垂直行业的专业人士的 100 份回答样本用于记录趋势。
背景
Bob 目前是 Cooper Company 的一名数据分析师,Cooper Company 是一家组织德克萨斯州文学博览会的小型组织。Bob 目前使用 MS Excel 跟踪所有活动,包括门票销售、宾客名单、安排、活动时间等等。他们的首席执行官安迪希望将这一活动扩展到其他三个州,鲍勃有权创建一个在线跟踪器,帮助创始人跟踪实时事件。看起来鲍勃是工作中的冠军。但是 Bob 以前从未使用过 BI 工具。鲍勃现在手头有一项艰巨的任务。他需要选择一个具有实时数据操作功能和自助服务分析能力的平台。可怜的鲍勃。在决定平台之前,让我们找出他做的所有研究。
鲍勃的谷歌搜索
一个晴朗的星期五,当公司的每个人都在计划团队出游时,Bob 决定花时间了解 BI 工具的市场和趋势。他对 BI 工具的功能、优势和关注领域做了一些初步研究,以了解他应该使用哪种工具。
商业智能(BI)工具的变化比我们大多数人所能理解的要快得多
BI 工具用于实现以下目标:
- 将数据转化为可操作的见解 —利用现有数据和分析能力推动业务决策
- 随着时间的推移跟踪关键绩效指标 —关键绩效指标包括销售额、收入、流量、访问量、新客户等。
- 在报告的数字中实现粒度 —使用动态过滤器和其他交互式功能允许用户对报告的指标进行自上而下的分析
- 允许同时使用仪表板 —多个利益相关者可以同时使用同一个报告。防止不同业务单位报告的数字不一致
所有商业智能工具的四个重点领域
大多数 BI 工具将继续投入资源,使其平台具有可伸缩性和健壮性。然而,代表数据素养、集中化、分析和性能的 D-CAP 框架仍将是主要关注领域。在深入探讨这些趋势之前,让我们先来看看它们代表了什么。
数据素养—“Gartner 将数据素养定义为在上下文中读取、写入和交流数据的能力,包括对数据源和结构、应用的分析方法和技术的理解,以及描述用例应用和最终价值的能力。”
集中化—BI 中的集中化是主要出于治理和安全原因,在一个中央位置或部门存储、管理和维护所有商业智能或数据的系统。该模型确保了数据的准确性、可访问性和规模质量。
分析—BI 中的分析就是使用软件和统计数据从原始历史数据中总结关键信息,并提供见解以促进数据驱动的决策。
绩效— 商务智能的绩效包括三个关键方面:
- 后端数据的处理速度
- 数据加载后仪表板(前端)启动的速度
- 仪表板能够处理并发用户吗?
2020 年商务智能工具的发展趋势
鲍勃仍然很困惑
Bob 现在非常清楚商业智能代表什么,但是他仍然需要一个工具来使用!他意识到,虽然有些文章倾向于 Tableau 或 QlikSense,但也有一些文章建议使用 IBM Cognos & Power BI。为了避免任何困惑,他决定调查数据科学家和其他分析专业人士,以了解当今的需求
什么行业用?
调查问题—您最常用的可视化工具是什么?(您可以选择多个)。
共有 97 名专业人士参与了此次调查,并记录了 163 份回复,即平均每个人最终都会使用至少两种商务智能工具。
数据分析—调查结果
调查结果:
- Excel 仍然是最受欢迎的可视化工具,广泛应用于不同的垂直行业
- 与市场上的任何其他 BI 工具相比,Tableau、QlikSense 和 Power BI 更受分析师青睐
- 像 R Shiny、Python (dash 和 plotly)这样需要编码的可视化工具并不是用户的最爱。这说明了为什么自助 BI 工具在今天如此受欢迎
Bob 需要更多数据点
Bob 现在已经将他的工具选择范围缩小到 Tableau、Power BI 和 QlikSense。但是他想比较这三个平台,看看哪一个更符合他的要求。
比较框架
BI 工具的比较
作者说明
该行业正慢慢转向自助式 BI 工具。在与航空公司、医疗保健和保险行业合作时,我注意到 Tableau 和 Qlik Sense 是市场上使用最广泛的两种 BI 工具。Qlik Sense 正在加快步伐,特别是因为它的数据转换功能,减少了对 ETL 工具的依赖。然而,Qlik Sense 的最大挑战是使用扩展来实现更好的可视化。扩展通常是第三方脚本,拥有数据隐私协议的大型组织可能不习惯使用它们。如果你对脚本感兴趣,那么你可以专注于 Tableau 或 Qlik Sense 中的一个,否则拥有 Tableau & Qlik Sense 的工作知识是很好的。
关于作者:高级分析专家和管理顾问,帮助公司通过对组织数据的商业、技术和数学的组合找到各种问题的解决方案。一个数据科学爱好者,在这里分享、学习、贡献;你可以和我在 上联系 和 上推特;
辩论喝酒游戏,用数据科学
利用文本挖掘技术分析特朗普、拜登的演讲
新冠肺炎可能取消了我们的现场辩论观看派对,但这并没有阻止我们用它来做一个饮酒游戏!在我最新的 Youtube 视频中,我使用文本挖掘技术为即将到来的总统辩论开发了终极数据驱动的饮酒游戏规则。这篇文章将带你了解我是如何做到的。
首先,我从竞选集会、演讲和过去几周发生的任何其他活动中搜集了一些抄本,这些活动中拜登或特朗普(或两者都有!)说话了。我搜集的完整事件列表可以在这个项目的 Github repo 中看到(见“辩论. csv”文件)。
我从 rev.com 那里刮来了成绩单(在他们的允许下!)因为它似乎有最详尽的 2020 年选举事件列表,还因为文字记录遵循标准化格式,这使得收集过程更容易。下面是我用来刮抄本的函数:
def scrapeTranscriptFormat1(url, sep):
html = requests.get(url)
html = html.text
bs = BeautifulSoup(html, "lxml")
paragraphs = bs.findAll("p")
for paragraph in paragraphs:
try:
paragraph.find('u').decompose()
except:
continue
speaker = []
speech = []
pattern = r'\[.*?\]' for paragraph in paragraphs:
try:
speechText = paragraph.text.replace(u'\xa0', u'')
speechText = re.sub(pattern, '', speechText)
if sep == "parenthesis":
speech.append(re.search("[0-9]{2}\)[\r\n]+(.*)", speechText).group(1).strip(" "))
else:
speech.append(re.search(":[\r\n]+(.*)", speechText).group(1).strip(" ")) # search for speaker's speech, append to list
speaker.append(re.search("^(.*?):", speechText).group(1)) # search for speaker name, append to list
except:
continue
return pd.DataFrame({'name': speaker, 'speech': speech})
上面的函数接受两个参数——rev.com 上的脚本的 URL 和“分隔符”“分隔符”是指用来表示每行发言人的字符;对于大多数抄本,分隔符是“括号”(例如,遵循下面的格式)。
克里斯·华莱士:( 01:20 )
晚上好,来自……的健康教育校园
如果分隔符不是括号,我假设我写的正则表达式假设它是一个冒号(例如,遵循下面的格式)。根据抄本的格式,您可能需要修改正则表达式。
克里斯·华莱士:
晚上好,来自……的健康教育校园
scraping 函数应该返回一个类似于下面的数据帧。
抄本的数据框架。图片作者。
一旦你收集了所有的抄本并连接了数据框架,我们就可以开始文本分析了!
在开始语篇分析之前,我们必须准备好数据框架。尽管我是从同一个网站上搜集来的文字记录,但命名惯例并不一致——例如,拜登有时被称为“乔·拜登”,有时被称为“副总统乔·拜登”
我只是在 dataframe 的“name”列上调用了 pd.unique(),这样我就可以看到每个候选人的所有名字变化。然后,我创建了一个字典,并使用 pd.replace()替换所有这些变体。
name_variations = {"name":
{
'Chris Wallace':"moderator", 'Vice President Joe Biden':"Joe Biden",
'President Donald J. Trump':"Donald Trump", 'Moderator':"moderator", 'Ilia Calderón':"moderator",
'Joe Biden':"Joe Biden", 'Bernie Sanders':"bernie", 'Dr. Sanjay Gupta':"moderator",
'Amy Langenfeld':"moderator", 'John':"moderator", 'Donald Trump':"Donald Trump", 'President Trump':"Donald Trump",
'Hannah Cannon':"moderator", 'President Donald Trump':"Donald Trump", 'Justin Gaethje':"moderator"
}
}
df.replace(name_variations, inplace=**True**)
然后可以使用下面的“getSpeech”函数和代码来构造语料库。
def getSpeech(name):
candidate = df[df['name']==name].reset_index()
candidateSpeech = ""
for row in range(0,len(candidate)):
candidateSpeech = candidateSpeech + " " + candidate['speech'][row]
return candidateSpeech
candidateSpeech = candidateSpeech.translate(str.maketrans('', '', string.punctuation))
candidateSpeech = candidateSpeech.strip(" ")
stop_words = set(stopwords.words('english'))
word_tokens = word_tokenize(candidateSpeech)
filtered_sentence = [w for w in word_tokens if not w in stop_words]
filtered_sentence = []
for w in word_tokens:
if w not in stop_words:
filtered_sentence.append(w)
return ' '.join(word.lower() for word in filtered_sentence)biden = getSpeech("Joe Biden")
trump = getSpeech("Donald Trump")
moderator = getSpeech("moderator") corpus = {'Moderator': moderator, 'Biden':biden, 'Trump':trump}
然后我使用 sklearn 库来计算“tf-idf”统计数据。Tf-Idf 代表术语频率-逆文档频率,是计算单词重要性的好方法。它不仅考虑了短语的频率,还贬低了两位候选人可能会说的一般短语(如“谢谢你的问题……”),这确保了最后的短语将是特朗普或拜登独有的。
在计算了语料库中每个对象的 tf-idf 分数并转换了列之后,您将得到如下所示的数据帧:
左:特朗普的得分短语。右图:拜登的得分短语。作者图片。
有几点需要注意:首先,这个脚本只识别三到四个单词短语(不包括停用词)。因此,像“a”、“to”和“the”这样的词被删除了,这使得一些短语变得难以理解。例如,“don know don”的完整短语是“我不知道,我不知道。”“竞选自豪的民主党人”的完整短语是“作为一个自豪的民主党人竞选。”
第二,输出数据帧中的这些短语只有三或四个单词长,这一事实会带来许多问题。这意味着关键的词可能会被省略——“提高税收”的完整短语实际上是“而不是提高税收。”这也意味着较长的短语可能会被分成较小的块,并且在表中出现过多。拜登更常用的一句话是“上帝保佑你们所有人,愿上帝保护军队”,这句话被分成数据框中的第 7、9、10 和 11 行。
最后,tf-idf 分数并不表示频率——它是一个短语的频率和唯一性的组合。这就是为什么“谢谢,谢谢,谢谢”这个词在两位候选人身上都出现了——它不是唯一的,但被说了很多次,以至于出现在了前 10 名中。尽管它是最常见的,但它并不在列表的首位。(值得注意的是,拜登和川普都没有说过这句话。它指的是当主持人说“谢谢你,总统先生。谢谢主席。谢谢您…。”当候选人随时间推移)。
为了计算每个短语被说了多少次,你必须手动浏览你的辩论记录 CSV。或者至少,我是这么做的。
在清理替换停用词和按频率重新排序短语后,我们终于有了周四总统辩论的饮酒游戏规则!
左:拜登的饮酒游戏规则。右图:为川普制定饮酒游戏规则。作者图片。
对其中一些短语感到困惑?我在我的视频中解释了这些短语背后的背景,看看吧!
喝酒开心!请记得喝酒(还有投票!)负责任。
数据科学的十年
从沃森到白宫,看看过去 10 年中最有价值的成就。
对于数据科学来说,这是地狱般的十年——沃森主导了《危险边缘》(Jeopardy)(2011),白宫宣布了第一位首席数据科学家( 2015 ),Deepfakes 提供了所有我们想要的尼古拉斯·凯奇电影( 2017 )。甚至我们学科的名字,数据科学,也是最近 10 年来的。随着 2019 年即将结束,不可避免地会有类似上述日期特定事件的文章和列表。然而,在过去 10 年里,也出现了一些缓慢发展的重要趋势。当我想到现在的数据科学与 2010 年的数据科学相比时,有三个项目引起了我的注意。
1.我们自己的语言
数据科学家通常来自各种背景,数学、天文学或医学。这一切都有助于我们的工作,但拥有许多背景的早期缺点之一是,它导致了编程语言的巴别塔。2010 年初,一场语言战争开始了。STATA、SPSS、SAS、Matlab 和 Mathematica 等付费解决方案与 R、C++、Python、Julia、Octave 和 Gretl 等开源工具竞争。
起初,R 似乎有可能获胜。微软甚至通过收购 Revolution Analytics(一家提供 R 增强版的公司)进行了尝试。尽管处于领先地位,但 2015 年标志着向 Python 的转变。它令人印象深刻的软件包库、简单易学的语法和稳定的性能都对它有利。
来源:谷歌趋势
快进到今天。战争已经结束,新的边界已经划定,Python 是首选语言。这并不是说所有其他语言都死了。r 仍然在统计学中大量使用,根据您的行业,您可能会使用 SAS 或 Matlab。然而,答案十有八九是 Python。这种共享语言的好处不能被夸大。这使得阅读他人的作品更容易,代码也更容易共享。
2.Jupyter 笔记本和 GitHub
搜索任何数据科学主题的教程,你找到的任何文章几乎肯定会包含 GitHub 上托管的 Jupyter 笔记本的链接。这种做法非常普遍,基本上是一种潜规则。理所当然:这是一个强大的组合。Jupyter 笔记本将你的文档和代码合并成一个文件,使得理解是什么和为什么更加容易。将这与 GitHub 结合起来,你不仅有了一种解释你的作品的方法,也有了一种分享它的方式。GitHub 甚至采取措施支持 Jupyter 笔记本,允许它们直接在浏览器中呈现。
一台托管在 Github 上的笔记本电脑,来自 Sentdex 的量子计算
Python 给了我们一种共同的语言,Jupyter 和 GitHub 给了我们一种共同的语法和分享的礼仪。
3.数据集的激增
10 年前,数据要难得多。即使你找到了你想要的主题的数据集,也很可能是很小的。那里有数据,但是没有组织,格式不一致,人们不太可能分享他们收集的数据。在我有 MNIST 或泰坦尼克号数据集之前,我有来自 STATA 的“汽车”数据集。这是一个 1978 年的车辆收集,包括头部空间和燃油效率等功能,并附有高达 74 项观察。
相比之下,现在,你可以让公司把他们的数据公布给全世界。在某种程度上,Kaggle 已经成为企业数据的火种。各公司不再犹豫不决,而是热情地分享数据,希望能从一个热切的年轻定量分析师那里获得一把。地方政府也加大了行动力度。像芝加哥和纽约这样的城市已经使任何人都有可能获得从路况到啮齿动物观察等主题的数据。搜索数据集的资源也有所改进,比如使用了r/datasetssubredit 和 Google Dataset Search 等工具。如果数据是新的石油,那么今天的每个数据科学家可能都有点像中的丹尼尔·戴·刘易斯。
数据科学家查看可供他们使用的广阔信息领域
共同的线索:开放科学
在上述主题中有一条贯穿的线,它们每一个都代表了向开放科学的发展,或者工具、方法和数据应该公开的哲学。我认为,采纳这种理念是我们社区在过去十年中最有利可图的投资之一,有助于我们的成长、扩展我们的能力并提高我们的工作质量。
就增长而言,数据科学的大门现在向所有人开放,而不到十年前,进入数据科学需要付出高昂的代价。在 Python 之前,SAS 是最接近标准语言的东西,在 Jupyter 笔记本之前还有 Wolfram 笔记本。但是这些解决方案不是开放和免费的。根据服务的不同,你可能已经支付了 800-8000 美元,只是为了用“行业标准”工具进行回归。甚至他们的网站也不方便新手使用。访问其中的任何一个网站,你都会看到几十个不同的版本和链接,询问你是否想“获得报价”,这让你的体验不像是一头扎进一个动态学科,而更像是购买一辆二手车。
在过去的十年里,用于数据科学的商业软件已经衰落。我不会声称知道确切的原因,但我会给出我的观点:没有什么比价格标签更能消除好奇心。当我接近本科毕业时,我记得我在想“我喜欢做数值分析,但是我负担不起 STATA。我估计我还是学这个 R 的东西吧。”我不是一个人,有大量的业余爱好者涌入,他们好奇并渴望测试数据科学的水域。
除了容易进入,开放科学还扩展了每个人能力的深度和广度。一个数据科学家不一定是一种资源。有一个巨大的代码库,来自世界各地的贡献者。这可能采取 Python 包、中等教程或堆栈溢出答案的形式。这个代码库使项目更像是混合和匹配乐高积木,而不是从零开始构建。
堆栈溢出是数据科学的难题吗?
这种开放性也有助于保持我们工作的诚实。伴随着数据科学,这十年也给我们带来了短语“复制危机”虽然欺诈性工作没有万灵药,但透明度是一种强有力的预防措施。十年来我最喜欢的文章之一,科学论文过时了,引用了 Wolfram 在谈论笔记本时的一句名言:“这里没有废话。它就是它,它做它该做的。你不能篡改数据。”
向前看,向后看
在某些方面,这不仅仅是数据科学的好十年,而是数据科学的十年。我们进入了 2010 年代的时代精神。我们被授予最性感职业的称号,我们得到了布拉德·皮特和乔纳·希尔的电影,数百万人看到 AlphaGO 成为世界冠军。在某些方面,我觉得这十年是我们走向成熟的十年。虽然下一个十年将带来许多改进的工具和方法,但 2010 年将是我带着喜爱和怀旧的感觉回顾的时候。
深度学习的进化
探索深度学习在过去几十年的成长!
Frank Rosenblatt 的感知来自 Reddit (左)&ann 来自神经网络和深度学习(右)
我们大多数人都知道深度学习是 21 世纪的发明,但信不信由你,它自 20 世纪 40 年代就已经存在了。
我们大多数人不知道 20 世纪深度学习进步/研究的原因是因为当时使用的方法由于其各种缺点而相对不受欢迎,并且事实上从那时起它已经有过几次重新命名。
任何领域的新的原创研究都需要了解导致该领域普及的历史、演变和重大突破。深度学习也不例外。
纵观深度学习的历史,可以发现三大进步浪潮:
控制论——1940-1960 年
连接主义——在 1980-1990 年间
深度学习—自 2006 年以来
在前两次浪潮中所做的研究由于其缺点受到批评而不受欢迎,然而,毫无疑问,它帮助该领域发展到今天的位置,并且在那些时间中开发的一些算法直到今天仍广泛用于各种机器学习和深度学习模型。
让我们更详细地探讨一下这三种波,以获得一些视角。
控制论
是现代深度学习最早的前身,基于 生物学习——人脑如何学习的思想。以控制论的名义取得的进步是基于在更简单的计算模型中复制人类/动物大脑工作的目标,这将有助于建立像真正的大脑一样开始学习的系统,并在给定一些输入的情况下提供结论。这种思维模式下的进一步研究在计算神经科学下继续进行,直到现在。
控制论的发展拉开了 麦卡洛克-皮茨神经元 的序幕。这是一种模仿生物神经元的尝试。这是基于一个线性模型,将采取各种投入[X1,X2 …Xn],对于每个输入,模型有一些权重[W1,W2 … Wn]和输出 f(x,w) = X1W1 + X2W2 + …。+ XnWn。该模型只能根据输入和权重输出真/假。
麦卡洛克-皮茨模型从走向数据科学
权重需要正确设置,并由人工输入。
后来在 20 世纪 50 年代, 感知器 由美国心理学家 Frank Rosenblatt 开发,可以自动学习权重。感知器最初被设计成一个电机,而不是一个程序/软件。Frank 为图像识别建立了感知器,它包含连接到多个神经元的光电池(接收器),这些神经元将对光电池捕获的输入进行分类。
感知器来自维基百科
虽然感知器在当时是一台非凡的机器,但它做出了当时无法实现的大胆主张。
ADALINE—由Bernard wid row开发,被称为自适应线性元件,它大约与感知器同时开发,也可以在学习阶段适应基于输入加权和的权重。
ADALINE 来自 mlxtend
ADALINE 的学习函数类似于目前线性回归中使用的 s 到随机梯度下降。
这些线性模型有各种各样的局限性,看到这些局限性的批评家们导致了它们的受欢迎程度大幅下降,并使研究停滞了一段时间。一个主要的限制是这些线性模型不能训练异或函数。
因为这些模型受到神经科学研究的启发,它们受欢迎程度的下降也激发了对神经科学基础之外的模型的探索。
连接主义
或者说 并行分布式处理 在上世纪 80 年代开始流行。这种方法受到了认知科学的启发。与 20 世纪 80 年代被称为古典主义者的科学家们正在探索的各种符号推理方法相比,联结主义显示出了希望。
即使我们从更抽象的角度来看大脑,符号推理方法也很适合,但很难用经典的编程模型来明确实现。因此,实用连接主义者认为他们的工作是利用神经网络来实现与符号推理相似的效果。
但是激进的联结主义者简单地抛弃了符号推理的想法,声称它无论如何也不能解释我们大脑的各种复杂特征,并且是对人类大脑的不正确的认知。
人工神经网络 (ANNs)的概念就是在这一波浪潮中引入的。人工神经网络背后的主要思想是开发一个由个体单元组成的网络,这些个体单元可以被编程以实现智能行为。这是第一次引入隐藏层的概念。
相互连接的人工神经元网络允许沿着网络的不同分支分布的并行信号处理。“神经元”单位的连接包含了控制一个神经元对另一个神经元的影响强度的权重。
****安来自维基百科
这种方法被认为与我们神经系统内部发生的事情非常相似,这在研究人员中引起了一些关于这些模型有效性的 hipe。
在这一波连接主义期间,各种模型,如 LSTM 、分布式表示和处理、反向传播被开发出来,并继续成为深度学习的各种高级应用的关键组件。
但在 20 世纪 90 年代中期,基于人工智能的初创公司开始提出不切实际的主张,并且由于缺乏计算资源,永远无法从这些模型中提供那种复杂程度。投资者撤出,这导致了第二波深度学习的下降。
第二波从未消失,但被削弱了。各种实验室都在进行研究,但直到 2000 年代初,应用非常少。
深度学习
经过两次下跌后,第三波在 2006 年出现突破。杰弗里·辛顿使用贪婪的逐层训练来训练深度信念网络。
在最简单的形式中,DBN 是多个隐藏层的组合,每一层包含各种潜在变量。连接存在于 b/w 层中,但不存在于每层内部的变量之间。DBN 的一个非常简单的实现也可以叫做受限玻尔兹曼机器。
****受限玻尔兹曼机来自维基百科
杰弗里·辛顿的进步被其他研究人员用来训练不同类型的深度网络。这使得世界各地的研究人员能够训练越来越深的神经网络,并导致了术语 深度学习的普及。
虽然 Geoffrey Hinton 似乎导致了深度学习的出现,但你不能忽视计算能力和大型数据集可用性的增加。当在越来越大的数据集上训练时,在连接主义期间开发的相同算法开始给出更好的结果。
当时和现在的区别在于,随着越来越多的人使用在线服务,我们有了更多的数据和更多的计算资源来处理这些数据,从而提高了各种模型的准确性。
深度学习更有趣、更复杂的应用正在浮出水面,但仍处于实际应用的早期阶段。例如,深度学习已被用于开发大脑的 3D 地图(连接体),以帮助神经科学家和认知科学家研究大脑。制药公司开始使用深度学习来预测不同分子将如何反应,并帮助加速药物开发。
结论
今天,深度学习在性能上超过了各种机器学习方法,并被广泛用于各种不同的任务。与其他方法相比,深度学习提高了语言翻译和图像识别等任务的准确性。但这不是/不可能在几年内发生,而是需要几十年!
尽管深度学习自 20 世纪 40 年代的第一个前身以来已经发展了很多,但记住它从何而来以及它是如何随着时间的推移而发展的非常重要,因为它仍然有很长的路要走。研究早期的构建模块有助于开发深度学习未来的新应用(站在巨人的肩膀上)。
如果有任何话题能引起你的兴趣,我会试着添加一些书籍和文章。如果你想要我的建议,一定要试试马文·明斯基的【T2 感知机】。它深入研究了弗兰克·罗森布拉特的感知机。
资料来源和进一步阅读
书
文章
** [## 麦卡洛克-皮茨神经元——人类第一个生物神经元的数学模型
众所周知,深度神经网络的最基本单元被称为人工神经元/感知器…
towardsdatascience.com](/mcculloch-pitts-model-5fdf65ac5dd1) [## 深度信念网络
深度信念网是一种概率生成模型,由多层随机的、潜在的…
www.scholarpedia.org](http://www.scholarpedia.org/article/Deep_belief_networks) [## 人工神经网络中的反向传播是如何工作的?
自从机器学习的世界被引入到递归工作的非线性函数(即人工…
towardsdatascience.com](/how-does-back-propagation-in-artificial-neural-networks-work-c7cad873ea7) [## 用单一感知器求解异或
提倡多项式变换作为增加人工神经元代表能力的一种方法。
medium.com](https://medium.com/@lucaspereira0612/solving-xor-with-a-single-perceptron-34539f395182)**
如何制作德国“绿酱”的 ML 方法
一个关于如何准备传统食物的 fast.ai 教程
法兰克福附近奥芬巴赫的一家非常独特的黑森餐厅——照片由 Pia Scharf 拍摄
你有没有想过神奇的关键词深度学习会如何影响你的生活——除了自动驾驶汽车、辅助服务和图像识别之外,1984 年令人恐惧的科幻场景突然不知何故变成了现实?这里有一个想法:使用深度学习来准备一道传统菜肴。让我提前说一句:我不认为当传统转化为对未知未来的恐惧时,或者当传统转化为对漫长(可能并不那么辉煌)过去的模糊记忆时,它就达到了最佳潜力。当传统有助于享受日常生活时,例如当它变成美味的食物时,它最能发挥潜力!在我看来,传统往往不是必需品,而是奢侈品。但这是另一个值得写的话题。
然而,由于深度学习技术非常强大,并且有许多潜在的用例,我试图包括我从杰瑞米·霍华德和雷切尔·托马斯的 fast.ai 课程中学到的一些东西。我问自己:机器学习如何帮助我更好地理解身边的日常事物?我能通过让传统可见来揭开它们吗——至少对我来说?在我看来,传统的关键在于我们每天周围的许多事情。在这个例子中,我想使用图像分类算法来分享过去的知识。
典型的黑森州:来自黑森州酒罐的苹果酒叫做“BEM bel”——照片由 Pia Scharf 拍摄
差不多十年前我搬到了法兰克福。起初,我对法兰克福 Hessestub 提供的食物和饮料非常陌生。在这些古老的餐馆里,有大量装在原装黑森州瓶里的苹果酒,即所谓的“bembel”。人们经常一起坐在木制长椅上的大桌子旁,餐馆里很拥挤,通常很吵。所以你坚持喝苹果酒,点非常原始和厚重的菜,这些菜可能是由一个非常快速但不那么友好的主人提供的(有时我认为他们讨厌友好——这让游客的整个体验更加有趣)。如果你要一份“原始黑森地区餐”,主人只是摇摇头,因为他们提供的一切都是地区性的,他或她不知道你的要求是什么意思。
如果你碰巧去了法兰克福或黑森州,我想给你一些建议:试试绿酱。黑森州人偶尔会把它和肉(如炸肉排)一起端上来,但通常只有土豆一起端上来。人人都爱。如果你带着它去野餐,这就是绿酱的样子:
黑森绿酱——照片由 Pia Scharf 拍摄
法兰克福绿色酱包含七种香草:欧芹、细香葱、山萝卜、琉璃苣、酸模、水芹和沙拉地榆
除非你有超能力,可以说服厨师(和德国老奶奶)改变传统食谱:忘记添加或改变这些草药中的一种。这是传统。香草是问题的核心:所以要做绿色酱汁,我们需要能够识别和收集这七种香草!我们制作绿色调味酱所需的所有香草都可以在法兰克福附近找到,它们生长在城市附近的田野和森林中。我已经告诉过你关于德国祖父母的事情:直到今天,一些年长的公民仍然确切地知道在哪里可以找到做绿色调味汁的草药。如果你想知道它们生长在哪里,你可以参加地区性的课程,尤其是在夏天。专家将向你展示只有到过那里的人才能发现的秘密景点。但我不想等待:我的目标是为我和我的朋友建立一个小助手,以确定制作我们自己的绿色酱所需的草药。我们开始吧!
深度学习是我选择的解决方案,它是我的人工祖父母,指引我找到荒野中的宝藏。
德国绿酱中使用的七种香草——照片由 Pia Scharf 拍摄
O ur 问题是一个分类问题。所以我们想知道我们找到的草药是否与制作绿色酱汁有关。我们打算将它们归类为欧芹、细香葱、山萝卜、琉璃苣、酢浆草、水芹和沙拉用地榆。作为我们的小算法助手的输入,我们选择图片。一旦我们到了地里,我们就可以拍下我们想要识别的植物或叶子的照片,并“展示”给我们的程序。简而言之,我们希望建立一个模型(一种数学抽象),通过对输入图像进行分类,告诉我们该图像对应于哪一类。
我们将要工作的环境是一个 jupyter 笔记本。Fastai 是一个位于 Pytorch 之上的库(library =工具/代码部分的集合),py torch 是一个非常强大的机器学习库,使用 Python 代码。如果你从未听说过这些东西:Python 是我们编写代码的语言,Pytorch 和 fastai 是我们正在使用的工具,jupyter notebook 帮助我们组织代码。有关设置的更多信息,请访问 fastai 网站。
我们打开 jupyter 笔记本,输入:
from fastai import *
from fastai.vision import *
这样我们就拥有了 fastai 库的所有图像识别功能。接下来,我们要确保我们可以训练我们的网络。通过向神经网络提供数据,我们希望建立一个数学表示(模型),然后我们可以用它对发现的植物/叶子的新照片进行分类。
我们的模型不知道欧芹是什么,它从未见过绿色酱汁或任何类似的东西。为了训练一个模型,我们向它展示一系列带有正确标签的照片。这就是为什么我们首先要创建七个文件夹,分别贴上七种不同的标签:欧芹、细香葱、山萝卜、琉璃苣、酸模、水芹和沙拉地榆。
第一步:获取数据集
因此,我们打开 chrome 浏览器,进入谷歌图片搜索,输入:比如“欧芹”。然后我们得到大量欧芹的图片并向下滚动。然后我们按 Shift+Control+j 打开浏览器的 Javascript 控制台。我们输入:
urls = Array.from(document.querySelectorAll('.rg_di .rg_meta')).map(el=>JSON.parse(el.textContent).ou);
window.open('data:text/csv;charset=utf-8,' + escape(urls.join('\n')));
当我们点击 enter 时,我们下载了一个包含欧芹谷歌图片的所有 URL 的文件。我们将它保存在“欧芹. txt”下,并继续使用其他六种草药。太好了!准备好输出数据集链接。我们将所有文本文件放在一个名为“seven _ herbs”的文件夹中,并确保它位于我们主目录的 data 文件夹中(否则 fastai 不会找到它)。
第二步:下载图像文件
接下来,我们将数据直接下载到我们正在处理的服务器上。Fastai 需要知道我们的数据集所在的路径。在某些环境下,这一步可能会有所不同——例如,如果您正在 kaggle 的内核中工作。如果你纠结,可以在 kaggle 上访问我的入门内核。
path = Path('data/seven_herbs')
后来,我们将草药的名称分类。
classes = ['borage', 'chervil', 'chives', 'garden_cress', 'parsley', 'salad_burnet', 'sorrel']
接下来的步骤看起来有点复杂,实际上非常简单。它只获取文本文件并做两件事:为每个类(又名 herb)创建并命名一个文件夹,然后用同名文本文件中定义的图片填充这个文件夹。(在 kaggle starterset 中,您不需要执行这些步骤,因为我已经将数据集附加到了内核。)
for x in range(0,7):
dest = path/(classes[x])
dest.mkdir(parents=True, exist_ok=True)
download_images(path/(classes[x]+str('.txt')), dest, max_pics=200)
然后,我们检查我们的文件,以确保它们没有损坏或链接没有错误。以下代码将清除那些无法正确打开或下载的文件。
for c in classes:
print(c)
verify_images(path/c, delete=True, max_workers=8)
第三步:创建一个 ImageDataBunch
现在越来越严重了。我们通过创建一个 ImageDataBunch 对象开始处理数据。通过这种方式,我们可以处理数据,并在以后训练我们的模型。np.random.seed(13)定义了从我们的训练数据中随机选择哪些图像。(如果我们想以同样的方式再次训练模型,我们只需要这一行代码。)我们的 ImageDataBunch 是通过传递包含照片数据的文件夹的路径创建的。我们定义了一个代表 20%数据的验证集,并定义了图像的大小。
np.random.seed(13)
data = (ImageList.from_folder(path)
.split_by_rand_pct(0.2)
.label_from_folder()
.transform(tfms, size=128)
.databunch())
接下来,我们还需要将我们的类分配给 ImageDataBunch。
data.classes
如果我们输入下面的代码,ImageDataBunch 就会出现,我们可以查看我们的数据。
data.show_batch(rows=3, figsize=(7,8))
步骤 4:训练模型
开始训练吧!首先,我们加载 vision.learner,一个保存 cnn_learner 的模块:想象这是一个预训练的神经网络,它在一个大型图像数据集上进行训练。接下来,我们将“迁移学习”作为一种技术——我们向 cnn_learner 展示我们的数据集,以便它学习七种草药的具体细节。
from fastai.vision.learner import create_cnn,models
from fastai.vision import error_rate
最后:让我们创建我们的模型——我们的标签和图片之间相关性的数学表示。
learn = create_cnn(data, models.resnet34, metrics=error_rate)
所以我们从 Fastai 库下载了预训练的模型。接下来,我们要根据数据调整模型。为了确保我们可以在以后保存我们的结果,我们在四个训练周期后直接保存模型。
learn.fit_one_cycle(4)
learn.save('green-sauce-stage-1')
在这个过程之后,我们得到了一个结果,显示错误率为 0.33,这意味着在 33%的情况下,模型仍然会出错。我们想进一步了解这意味着什么:
learn.unfreeze()
learn.lr_find()
learn.recorder.plot()
这个图向我们展示了学习率和我们训练好的模型的损失。如需进一步解释,请查看,例如这里的。简而言之,损失函数向我们展示了我们的模型做得有多好。对于每个预测,图表向我们显示了我们的模型做出的预测和照片持有的实际标签之间的绝对差异。(记住:我们所有的训练数据都是有标签的)。根据经验,我们总是想在情节中寻找一条下坡路。如果我们看从 1e-5 到 1e-3 的部分,似乎那里的模型仍然在变得更好。在 1e-3 之后不久,梯度再次非常快速地上升,这意味着错误率也再次增加。我们可以通过进一步训练来改进我们的模型。
learn.fit_one_cycle(2, max_lr=slice(1e-5,1e-3))
learn.save('green-sauce-stage-2')
第四步:解读结果
在所有这些训练之后,我们想知道我们做得有多好。我们解释我们的结果。
interp= ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()
混淆矩阵向我们展示了基于模型做出的预测和图像的实际标签之间的关系。正如我们所看到的,在大多数情况下,模型做出了正确的决定:特别是,韭菜图像在 33 个案例中被正确识别。失败者是山黧豆和酢浆草:山黧豆,一种比长而光滑的细香葱更不容易被人眼识别的草本植物,不那么令人惊讶,而酢浆草,至少让我惊讶的是,已经被神经网络几次误认为是花园水芹。最混乱的列表也指出了这一点:
interp.most_confused()
由此可见,训练中出了问题。总的来说,我们的模型还不错,尽管我们当然还可以做很多事情来改进我们的结果,例如:
- 通过删除图像搜索中出现的图像来改进我们的数据集,但这些图像并不完全符合我们的预期结果(例如 fastai 库的 FileDeleter 小部件)。).
- 通过训练更多/用更多数据/用其他数据,使我们的模型更加适合
- 设计更好的验证集。在这里阅读更多
现在,我们就这样宣布:我们准备好了!我们已经建立了自己的神经网络。你可能会想:‘好吧,太好了,但是我如何拍摄一种药草,并展示给我训练有素的网络?’
测试:我想把这张照片展示给我的网络——照片由 Pia Scharf 拍摄
第五步:建立网站
请记住,我们的目标是有一个网站,我们可以上传图片。现在需要一个界面设计。(在本教程中,我们不会在设计本身上花时间,但在接下来的几个教程中可能会花时间。)为了简单起见,我们希望创建一个只能接收一个图像的图形用户界面。我们希望我们的服务可以随时通过互联网访问,所以我们制作了一个简单的主页,只有一个交互选项,即分析照片。为了让我们的小应用程序可用,我们使用了渲染。这是一个云提供商,你可以用它来提供应用和网站。
首先,我们需要导出我们的模型。这就是 kaggle 内核的样子:
learn.load('green-sauce-stage-2')
learn.export(file = Path("/kaggle/working/export.pkl"))
这将在我们的数据结构中添加文件“export.pkl”。我们把文件下载到硬盘上。接下来,我们将它推到一个 google drive,并确保它对任何人都是免费的(否则下面的命令将不起作用)。我们使用这个直接链接生成器,所以下载我们的文件自动从点击链接开始。
为了使用 Render,我们需要将我们想要‘渲染’的项目上传到 github 。如果你不知道 github:它基本上是一个人们共享代码的地方。github 的伟大之处在于,你会发现很多不错的项目,你可以把它们作为你自己项目的起点。
在这种情况下,我们使用 anurag 的库作为基础,并利用它创建自己的。如果你在 anurags 仓库点击“fork ”,你会在你的 github 账户中找到他的仓库。然后您可以修改它(重命名,输入您的代码)并“提交”更改(不要担心——这只会更改您的“分支”——换句话说:您的存储库版本)。如果你想详细了解 github 的工作原理,我强烈推荐你阅读 github 指南。
因此,在分叉一个 anurags 存储库之后,您可以将其重命名为“green-sauce ”,我们需要做两件重要的事情来使代码工作:
- 我们需要编辑文件“server . py”(green-sauce/app/server . py),这样我们的应用程序就可以找到模型的直接下载链接。我们还修改了 classes-section 并输入了我们七种草药的名称(又名 class)。然后,我们点击“提交更改”。
export_file_url = 'https://YOUR-DIRECT-DOWNLOAD-LINK'export_file_name = 'export.pkl' classes = ['borage', 'chervil', 'chives', 'garden_cress', 'parsley', 'salat_burnet', 'sorrel']
- 我们修改 index.html(green-sauce/app/view/index . html)。我们可以通过改变括号之间的文本来改变网页的标题(例如this text),并且我们可以在括号< p >之间写一些描述文本。我们还“提交”变更
如果我们想改变颜色、字体或其他视觉元素,我们可以修改 css 文件。我们一完成,就继续渲染。
在 render 的仪表板上,我们单击“新建 web 服务”图标。在那里,我们输入我们的存储库 github-address。你可以在 https://github.com/piaoyapia/Seven-Herbs 的找到我的 github 知识库。如果你想渲染你自己的应用程序,把环境下拉菜单留在“Docker”上。就是这样。Render 会搞定剩下的!
第六步:测试网站
最后,我们完成了,我们可以测试我们的网站!如果您一直跟着做,那么现在您可能已经有了自己的版本。不然就测测我吧。
于是上传了一张我拿着香菜的照片。然后我点击了“分析”。从视觉上看,结果并不那么壮观,但至少它是正确的:网络将药草识别为欧芹。耶!🎉
你可以在 https://seven-herbs-green-sauce.onrender.com访问我的应用版本
任务完成——我们有了寻找草药的模型。理论上,我们可以去法兰克福的田野里,分辨生长在那里的七种不同的草药。你可能已经注意到了,我们没有一个类叫做当这些草药都不出现在我们的镜头前的时候。这意味着,即使我们拍摄了一只可爱的小猫,我们的神经网络也会看到图片中七种草药中的一种。总之,我不建议——我也不对任何损害负责——在现实生活中使用这个网站。相反,这个项目旨在激励人们寻找使用机器学习概念的方法,这些概念可以告诉我们一些关于我们生活的世界的事情,而这些事情是我们在日常生活中没有想到的。寻找绿色调味酱的草药当然不是一个世界难题,但它背后有文化。如果你读到这里,你可能不仅学到了一些关于机器学习的知识,还学到了一个古老的德国食谱。让我们在未来的项目中结合旧知识和机器学习——在比饮食文化更重要的领域!
深度学习专业化
Coursera 与吴恩达深度学习专业化述评
Andrew ' s NgCoursera 上的深度学习专业化 是网上最著名的机器学习课程之一。许多数据科学家或机器学习工程师在其 Linkedin 的课程部分列出了这一专业。在这篇文章中,我们将探索它的内容,看看它是什么,不是什么,并澄清所有围绕它的炒作。我们开始吧!
我最近完成了这个专业,想分享我的经验,拨开迷雾,澄清它是什么,它不是什么,并帮助其他人做出是否接受它的决定。
注 :我对任何报名参加任何深度学习课程的人都没有任何好处。这篇文章的唯一目标是总结这种专业化,并提供关于它的诚实而深入的评论。
这是什么?
来自 Flaticon 的机器学习图标
吴恩达的 深度学习专门化 可能是互联网上最著名的机器学习课程。它可以在 Coursera 上获得,它涵盖了成为神经网络专家所需了解的一切内容:从它们的基本形式,到如何构建深度学习项目和图像识别和自然语言处理的最先进网络:卷积和递归神经网络。
它分为 5 个不同的课程,每个课程大约 3-4 周。然而,这个持续时间是相对的,因为它取决于你每天/每周花在课程上的时间。对我来说,我通常可以在大约半周的时间内完成一周的课程,所以我可以在不到两周的时间内完成一门课程。
这类课程的一个主要优势是它们提供的灵活性,所以我建议你花点时间去做,试着深入学习并对内容进行自我测试。
是给谁的?
来自平面图标的学生图标
这个专业面向拥有数据科学和机器学习知识的人,因为它探索了机器学习的一个特定分支:深度学习和人工神经网络。如果你想了解一般的机器学习,并向这个世界迈出第一步,吴恩达还有一门非常著名的课程:机器学习专门化,你应该考虑提前选修。
参加机器学习专业化然后深度学习是一个非常流畅的过程,会让你成为一个准备非常充分的机器学习从业者。
先决条件
从平面图标中列出图标
用吴恩达在莱克斯·弗里德曼采访中的话说(这是一个精彩的演讲,关于人工智能、教育和努力工作,我将在这一段中留下),为了轻松完成这一专业化,你需要知道基本的编程(用 Python),并对数学有非常基本的理解(甚至高中数学就足够了)。
安德鲁对莱克斯·弗里德曼的采访
然而,正如我之前提到的,从我的角度来看,如果你已经熟悉了机器学习及其主要概念,你将充分利用这种专业化。
内容
来自平面图标的内容图标
该专业由 5 门课程组成,每门课程分为不同的周。这些课程如下:
- 课程一:神经网络与深度学习 。解释如何从一个简单的神经元逻辑回归到一个完整的网络,包括不同的激活功能,向前和向后传播。关于人工神经网络如何工作的最基本的信息将在本课程中解释。
- 课程二:改进深度神经网络 : 超参数调优、正则化和优化。尽管不是一门精确的科学,但这门课程提到了如何调整学习速率、层数以及每层中神经元的数量。然后介绍了剔除和批量归一化等正则化技术,最后是讨论随机梯度下降、动量、RMS Prop 和 Adam 优化算法的优化部分。
- 课程三:结构化机器学习项目 。对我来说,这门课程对数据科学家/工程师来说是最有帮助的。这都是关于如何建立你的项目,快速获得结果,并迭代改进这些结果。它为如何诊断我们的模型的结果提供了令人愉快的见解,以便我们可以看到性能问题来自哪里(如果有的话):小的训练集、训练和测试集的不同分布、过度拟合和其他问题,以及它们的解决方案。
- 课程四:卷积神经网络。本课程是关于图像识别网络的最新发展。它涵盖了 CNN 如何工作,CNN 的不同风格,还详细介绍了它们的起源。然后,它解释了不同的用例,如对象识别,人脸验证,人脸识别,或神经类型转移。
- 课程五:序列车型 。所有关于递归神经网络:它们如何工作,为什么它们在一些特定的任务中优于传统网络,以及不同类型的优缺点。RNNs,LSTMs,gru 的解释,以及他们如何用于像语音识别,自然语言处理和时间序列分析和预测的任务。
课程结构
来自平面图标的结构图标
正如前面几次提到的,课程分为不同的周:从最短的 3 周到最长的 5 周。每周包含几个短视频(时长大约从 3 分钟到 15 分钟不等)一个小测验和一个编程练习。
视频以快速介绍开始,然后是一系列涵盖技术内容的幻灯片,最后是对已解释内容的精彩总结,有时还有后续视频的简短通知。它们很有教育意义,而且因为时间长,一点也不难看。其中一些可以在视频速度超过正常速度的情况下被完全理解。
测验有一个类似考试的结构,有关于那一周内容的单项选择和多项选择问题。它们并不是非常难,但是你确实需要很好地理解所解释的内容,并仔细注意这些问题。为了能够在课程中取得进步,你需要在这些测试中获得至少 80/100 的分数,但是你可以想做多少次就做多少次,所以不要担心不及格。
最后,我们有编程练习。他们被呈现一个笔记本结构,在那里一周所涉及的材料被划分和解释,有代码块让我们不需要编辑就能运行,而其他的我们必须为某个任务编程。它们是复习概念理论和学习如何在实践中实现它们的绝佳材料。它们的难度相差很大:在前两门课程中,笔记本相当容易,大多数时候代码几乎完全给你了。课程 IV 和 V 有更难的笔记本,上面有挑战你的 Tensorflow 网络实现。同样,这些笔记本是有分数的,你需要一个最低分数才能通过。
在最初的课程中,每周都以一次名为 “深度学习的英雄 ”的采访结束,吴恩达在采访中采访了该领域的某个顶级人物。这是一个很好的补充,绝对值得观看这些视频。
最后,在每门课程结束时,会给你一张证书,证明你已经成功完成了课程。
概述和意见
来自平面图标的意见图标
我认为格式很棒,有短视频、快速判断题和笔记本。较长的视频会让人感觉乏味且永无止境,通过这种方式,你可以真正感觉到自己在进步。这也有助于清楚地区分不同的内容,如果学生愿意,他们可以更深入地学习任何内容。
此外,在课程中,涵盖了许多实际案例,讲座通常以真实世界的例子来支持理论,在我看来,这很有帮助,对巩固所获得的知识非常有用。从这个意义上说,第三个课程特别好,有真实的用例作为练习。
我还喜欢的是,尽管有相当坚实的数学基础,但讲座更多地坚持每个优化/结构/方法解决的不同方面,而不是这些数学。它还在培训和应用之间做出了明确的区分,这是为了成为令人敬畏的机器学习实践者而在我们的思维方式中创建的基本分离。
总的来说,我认为专业化是学习深度学习和人工神经网络的一个好资源。它包含大量的材料,测验和笔记本真正测试你对内容的理解。
我唯一怀念的是一种期末项目,可能在每门课程结束时,或者在专业结束时,你必须自己从头开始编写整个项目的代码,然后由审校修改。我知道由于学生人数众多,这样做是不可能的,但也许可以提出一些其他建议。
对我来说,这绝对是值得的时间和金钱,我希望我可以把我所学到的审判很快!如果你也有兴趣做,可以在 Coursera 上找。好好享受吧!
就这些,我希望你喜欢这篇文章。随时 在 Twitter 上关注我 在@ jaimezorno*。还有,你可以看看我在数据科学、统计学、机器学习上的帖子*这里 。好好读!
阅读詹姆·佐诺扎在媒介上的作品。数据科学、机器学习与生活。每天,詹姆·佐诺扎和…
medium.com](https://medium.com/@jaimezornoza)*
人工智能监控的权威指南
从我们的工作中学习跨深度学习和机器学习用例为团队创建生产可见性
图片来自 Shutterstock (标准许可下)
本文与 Itai 吧 Sinai 合著。
各垂直行业的人工智能团队强烈同意,他们的数据和模型必须在生产中受到监控。然而,许多团队很难准确定义要监控的内容。具体来说,在“推断时间”收集什么数据,跟踪什么指标以及如何分析这些指标。
人工智能系统的多样性和复杂性决定了“一刀切”的监控方法是行不通的。然而,我们在这里提供一些清晰度,并讨论普遍适用的方法。
在与多个垂直行业的团队(以及深度学习和机器学习)合作后,我们听到了一些一致的动机,包括:
- 希望更快地解决问题
- 强烈需要从“被动”转变为“主动”,即在业务 KPI 受到负面影响或客户抱怨之前检测数据和模型问题
那么,你应该如何跟踪和分析你的 AI 呢?
1.定义模型性能指标
为生产人工智能获得成功的客观测量需要你的推断数据的标签或“基础事实”。可能出现这种情况的几个例子包括:
- 人在回路的机制,注释者、客户或第三方至少标记一个推理数据样本。例如,欺诈检测系统接收实际欺诈交易的列表(事后)。
- 商业 KPI 可以提供一种“标签”。例如,对于一个搜索或推荐模型,您可以跟踪点击或转换(与每个推断联系在一起)。
顺便说一句,后者可能导致监控的圣杯——能够精确地评估模型对业务结果的影响(积极的或消极的)。
标签的可用性使得能够计算和分析常见的模型验证指标,例如假阳性/假阴性率、误差/损失函数、AUC/ROC、精确度/召回率等。
需要注意的是,上面提到的标签通常在推断时不可用。可能在模型运行(例如,用户点击推荐的广告)几秒后,但也可能在模型运行(例如,商家向欺诈系统通知真实的欺诈交易)几周后,“基本事实”反馈才可用。因此,人工智能监控系统应该能够异步更新标签(和其他类型的数据)。
关于监控注释器的说明
不用说,被标记的数据的好坏取决于标记过程和标记它的注释者。具有前瞻性思维的人工智能团队利用监控能力来评估他们的注释过程和注释者。你会怎么做?一个例子是跟踪模型和注释器之间的平均差值。如果这个度量超过了某个阈值——我们可以假设要么是模型表现不佳,要么是注释器出错了。
“…监控的圣杯——能够精确评估模型对业务成果的影响(积极或消极)。”
2.建立模型输出的粒度行为指标
跟踪模型输出是必须的。
从一个角度来看,输出行为可以指示通过查看其他地方几乎检测不到的问题(即,模型的高灵敏度可能意味着输入中几乎检测不到的变化可能真的“脱离模型”)。从另一个角度来看,输入要素可能会发生重大变化,但不会对输出行为产生太大影响。因此,基于产出的指标是监控范围内的首要任务。
以下是从模型输出中创建的一些指标示例:
- 原始分数的基本统计分析,例如欺诈概率分数的周平均值和标准差
- 置信度得分/区间,例如,
- 距决策边界的距离(例如,距 SVM 模型中的超平面,或使用简单阈值时)
- 多类别分类模型中所选类别和第二位置之间的差值
- 在分类模型中,所选类别的分布
- 未分类的比率(即,当您的班级没有一个分数超过您的阈值时)
总的来说,基于输出创建的度量中的异常告诉团队有事情正在发生。为了理解原因,以及是否和如何解决正在发生的事情,团队应该将功能和元数据包括在监控范围内。以下是更多相关信息。
3.单独或作为一个集合跟踪要素行为
跟踪特征行为有两个目的:
- 解释在输出行为中检测到的变化
- 检测上游阶段的问题(例如,数据接收和准备)
当在输出行为中检测到问题时,可能会调用特性来解释原因。在这种情况下,解释问题的过程可能需要进行特征重要性分析,利用一系列流行的方法,如 SHAP 和莱姆。
另外,跟踪功能行为的变化是另一种不看输出就能发现问题的独立方法。那么,哪些上游事件可能表现为异常特征行为?太多了,数不过来。一些例子包括:
- 新客户涌入等业务变化
- 外部数据源的变化(例如,新浏览器、新设备)
- 先前管道中引入的更改,例如,数据摄取代码新版本中的错误
由于上述原因,收集和分析生产中的特征行为是监控范围的关键部分。
4.收集元数据以正确划分指标行为
到目前为止,我们已经讨论了为了创建行为度量而收集的数据类别。这些指标可以在全球范围内进行跟踪和分析。然而,为了真正实现监控的价值,必须考虑模型运行的子部分的行为度量。
例如(有点琐碎),广告服务模型可能整体表现一致,但为退休人员提供的推荐逐渐变差(通过点击率下降来衡量),这通过为年轻专业人员提供的逐渐更好的推荐来平衡(通过点击率增加来代表)。人工智能团队希望了解每个子群体的行为,并在必要时采取纠正措施。
基于片段的行为分析的关键使能因素是全面收集关于模型运行的上下文元数据。这些上下文元数据通常存在于人工智能系统中,但对模型的特性没有贡献。
以下是元数据驱动细分价值的几个额外示例:
- 合规性评估:一家银行希望确保其承销模式不偏向(或反对)特定性别或种族。性别和种族不是模型特征,但却是评估模型指标并确保其符合贷款法规的重要维度。
- 根本原因分析:一个营销团队发现有一个消费者子群体,推荐模型对他们不太有效。通过元数据驱动的细分,他们能够将这些消费者与特定的设备和浏览器相关联。经过进一步分析,意识到该特定设备和浏览器的数据接收过程存在缺陷。
关于模型版本的注释
有助于跟踪的元数据的另一个突出例子是模型版本(以及 AI 系统中其他组件的版本)。这使得恶化的行为与对系统的实际改变相关联。
“基于细分的行为分析的关键使能因素是全面收集关于模型运行的上下文元数据。”
5.在训练、测试和推理期间跟踪数据
在推理时进行全面的监控可以产生巨大的好处。然而,为了更深入地了解人工智能系统,前瞻性思维团队将监控范围扩大到包括训练和测试数据。当模型在推理时表现不佳时,能够将该数据段的特征分布与模型被训练时的对应分布进行比较,可以提供对行为变化的根本原因的最佳洞察。
如果可能,我们强烈建议跟踪上面讨论的相同元数据字段,在记录训练运行时也是如此。通过这样做,团队可以真正地比较相应的数据段,并更快、更准确地找到问题的根源。
摘要
评估复杂人工智能系统在生产中的性能和行为具有挑战性。一项全面的监测战略可以真正发挥作用。
根据我们的经验,此类监控策略包括使用推断阶段甚至更晚阶段可用的数据定义模型性能指标(例如,精度、AUC/ROC 等),建立模型输出的粒度行为指标,单独或作为一个集合跟踪特征行为,以及收集有助于分割指标行为的元数据。
建议将监控范围扩展到培训和测试阶段,以全面了解系统状态,并更快地隔离问题的根本原因。
表现最好的人工智能团队已经在实施类似的监控策略,作为他们人工智能生命周期不可或缺的一部分。这些团队对潜在生产问题的焦虑更少,而且更好的是,能够将他们的研究扩展到生产中,并随着时间的推移显著改进他们的模型。
设计产品指标的权威指南
讨论精确度和召回指标、指标设计访谈和指标生命周期
作者扎卡里·托马斯(zthomas.nc@gmail.com,推特,领英)
斯蒂芬·道森在 Unsplash 上拍摄的照片
(这篇文章最初是作为一个妙语文档写成的)
背景
如果你有一个技术产品,你也会想要它的度量标准。这是 Reddit 的联合创始人在这段视频中给出的建议:在开始一个产品时,你会想要跟踪一些东西及其趋势,以避免数据债务。科技公司的产品和工程团队现在认为这是传统智慧。产品的成功和质量取决于验证它的指标。不去衡量就无法提高。
看新闻,看电影,比如《社会困境》,科技行业和社会似乎有一个广泛的愿望,那就是超越仅仅使用参与度作为成功的衡量标准。也就是说,令人惊讶的是,我遇到的讨论如何设计一个好的指标的平易近人的在线资源很少。这非常令人惊讶,因为这是数据科学团队的核心职责之一!该指南旨在填补这一空白。
两桶指标:精确度和召回率
在我们设计新的指标之前,我们应该了解现有的指标已经测量了什么。就个人而言,我发现将度量标准分成两大类很有帮助:精度和召回。
分析师可以将现有的指标分为这两个类别,并为新的指标找到要解决的度量差距。或者,这个框架可以帮助将提议的新指标放在现有指标中。第一个召回指标可能比第十个精度指标更有影响力,反之亦然。
精确度指标🎯
精度度量测量产品当前迭代的使用和反馈。这些指标通常来自产品日志。团队使用它们来衡量增长和优化特性。事实上,我可以说绝大多数分析师使用和设计的度量标准本质上都是精确的。
例子包括:
- DAU、MAU 和其他使用指标:了解产品及其功能的总使用量和参与度是产品分析团队的核心任务
- 阅读更多:参见 Y Combinator 的关键指标指南的“广告”部分的非收入指标
- CSAT 和其他以产品为中心的调查指标:类似 CSAT 的指标(用 1 到 5 的等级对功能或产品进行评级,通过自由形式的回答询问原因)侧重于收集关于产品当前状态的反馈
- 阅读更多:这篇 GetFeedback 文章概述了计算 CSAT 和不同行业基准的两种方法
- 延迟指标:延迟指标衡量产品加载时间和基础设施性能
- 阅读更多:产品分析师团队通常不会处理延迟指标,但是非常成熟的产品可能希望了解延迟与产品增长和满意度之间的关系。特雷诺·斯洛斯、努卡拉和劳写的这篇关于谷歌如何看待基础设施指标的文章可能会在这方面提供一些思路
召回指标📚
召回指标根据基本事实跟踪产品性能。如果精度指标衡量增长和优化现有功能,召回指标有助于衡量产品质量和推动新功能开发。与精度指标不同,召回指标可能不仅仅需要产品日志来衡量。由团队进行的用户调查或数据标记可以作为召回指标的数据输入。有时,用户体验研究团队将拥有基于调查的召回指标,而不是数据科学团队,后者往往更关注基于日志的指标。
例子包括:
- 净推介值(NPS) :可以说,最著名的召回指标是 NPS,因为客户对产品的忠诚度是可能的替代品的函数
- 阅读更多信息:此指标概述除了指标的计算之外,还包括 NPS 跟进问题的提示
- 推荐系统或搜索系统的召回:召回指标衡量推荐或搜索系统的结果是否真正满足了最终用户的意图
- 阅读更多:正如的第 21 张幻灯片所示,你可以使用实际的用户喜欢/点击作为回忆分级的基础
- 注意:这种方法可能会夸大召回分数,因为它排除了潜在的喜欢,这些喜欢甚至不是产品的选项。例如,如果用户搜索一个产品,但根本没有看到它被列出来,召回指标应该理想地惩罚一个电子商务产品的推荐🤯。如果人们基于用户意图对推荐系统输出的样本进行人工评分,团队可以产生高覆盖率的召回指标。分析师的输入或指导有助于减少这些人工贴标过程中的偏差
- 竞争分析指标:对于有强大竞争对手的产品,分析师可以设计产品偏好、质量或任务完成指标来比较不同时期的产品
- 阅读更多:这篇博文描述了 Loup Ventures 如何向 Siri、Google Assistant 和 Alexa 询问同样的 800 个查询,并根据响应正确性和查询理解程度对每个查询进行评分。三个月后,他们重复了这个实验,看看每种产品在同一组查询中提高了多少
指标生命周期
既然我们已经建立了存在哪种度量,那么让我们深入到创建、报告和可能终止度量的过程中。
新的指标来自哪里?👶
总体而言,产品方向和市场、产品或客户成熟度的变化会推动对新指标的需求。更具体地说,新的指标可以来自:
- 建立用户漏斗或发展现有漏斗:新产品将从其用户获取和参与漏斗中获得其初始指标集
- 阅读更多内容:我见过的设计用户参与度漏斗及其相关指标的最佳教程是来自 Udacity 的 A/B 测试课程的第 3 课
- 当前指标对功能发布没有反应:新功能可能不再显示产品漏斗指标的统计和实际改进。这可能发生在一个产品饱和的市场,或者当产品变得足够复杂的时候。在这种情况下,分析师团队可能需要设计新的、更具可操作性的指标
- 阅读更多信息:在设计和评估指标的因果接近度部分,Sean Taylor 描述了产品和工程团队应该如何通过特性发布来影响指标的驱动因素。缺少该属性的度量是不可操作的
- 用户投诉或显著损失:反复的负面用户或客户反馈以及媒体和市场分析师的评论可能会推动注重质量的指标的创建
- 阅读更多内容:如中所述,这项新的美国案例研究(见脚注 82-89 周围的文字)从 2016 年左右开始,Youtube 开始通过用户调查来衡量视频满意度,以更好地优化 Youtube 关于用户幸福和满意度的建议,而不是观看时间
- 领导的指示+年度计划:更实际的情况是,分析师团队经常在年度计划期间投资新的指标,以使指标与下一年的产品或公司战略保持一致
提出一种新的度量标准:访谈框架和古德哈特定律📝
一旦分析师团队确定了对新指标的需求,分析师就开始指标设计工作。数据科学团队希望这些分析师通过在实验和性能跟踪中使用提议的指标的潜在二阶效应进行推理
数据科学家访谈通常会围绕这一推理过程提出案例研究问题。根据我的经验,面试官要么会要求应聘者设计一个衡量标准,要么会提出一个衡量标准,并要求应聘者对其进行评估。以下是解决这些问题的框架:
- 🤔提出澄清性问题,以理解数据输入:确保你和面试官在哪些用户行为或其他数据输入会影响指标上保持一致。例如,在社交媒体产品上滚动、点赞、链接共享、状态发布、发送消息等。所有这些都可以作为专注于参与度的成功衡量标准吗
- 提示:由于数据输入是特定于产品的,我建议研究一下你的面试官会问到的产品,并创建一个关于你可以想象公司团队使用的指标的备忘单
- 例如,注释“对于像 Lyft 或优步这样的公司来说,最重要的拼车指标是什么?”及其相关问题可以帮助您熟悉拼车指标及其输入
- 实际试用一个产品并理解它的机制和特性也是有帮助的——令人惊讶的是很多候选人没有这样做!
- 🤝就该指标应衡量的行为或属性达成一致:向面试官重复问题,并询问边缘案例。例如,如果一个电子商务平台的访问者要求定义一个对成功客户帐户进行分类的指标,那么可能值得询问团队是否期望该指标将一个具有高交易量但低 NPS 且不断下降的帐户分类为成功的
- 🧑🎓提出指标:我的建议是尽量简单,让后续问题帮助你决定是否需要让你的指标更复杂
- 提示:如果是顶线指标,面试官可能会跟进你的指标应该是什么时间粒度。例如,每天、每周或每月的活跃用户?
- ⬇️讨论该指标会阻止哪些行为:如果用户最终只是做了该指标衡量的事情,并停止了产品上的其他行为,会发生什么?回答这个假设性的问题会引出一个指标的二阶效应
- 举例:你提议将滚动作为基于订阅源的社交媒体产品的成功衡量标准。如果用户最终只在产品上滚动,这将使减少滚动的行为(如发帖、评论和点击链接)的使用为零。团队对激励这一结果满意吗?
- 🚧讨论产品团队如何人为增加(“黑掉”)指标:古德哈特定律指出,当人们知道他们的绩效是基于某个指标的时,他们会调整自己的行为以优化该指标。在技术产品的背景下,产品经理、设计师和工程师可能会开始改变产品,以增加成功指标,尽管存在负面的权衡
- 举例:你提议将滚动作为基于订阅源的社交媒体产品的成功衡量标准。这个指标激励设计者把内容块做得很长,或者把默认文本做得很大,以迫使用户滚动更多。该指标还激励产品经理和工程师创建有助于启动内容农场和传播其内容的功能和算法,以便用户有更多的项目可以滚动浏览。这些变化一起降低了产品的质量,但也增加了用户的滚动
- 🏆🙅♂️讨论了哪些相关属性没有用度量标准来衡量:不幸的是,简单明了的度量标准不会立刻衡量所有相关属性或用户行为。你应该向面试官概述你的衡量标准没有衡量的相关属性。你应该仍然能够论证你提出的度量标准与那些相关的属性相关,或者你是否需要为它们设计一个新的度量标准
- 举例:如果面试官让你为支付平台选择一个单一的成功指标,你可以说完成的交易效果最好,并且与其他重要指标相关,如 CSAT 和处理的总支付,即使完成的交易并不直接衡量这些属性
这个框架包含了我在公制设计面试中的经验。在接下来的部分中,我将讨论更多关于在分析师团队中经验地验证一个提议的度量标准,以及获得涉众的认同。
通过实验和分析验证新的度量标准📈
提出指标后,下一步是完成数据和实验分析,证明指标的行为符合预期且可行。验证指标需要几个步骤:
- (如果相关)显示不同阈值的指标分布:如果指标基于阈值,则显示不同的阈值可能值如何影响指标的分布
- 举例:如果我们将流失阈值设置为 7 天、14 天、21 天或 28 天,流失指标会将百分之多少的用户归类为流失用户?实际显示每个值的分布,作为选择特定值的解释的一部分
- 与相关现有指标的相关性分析:展示相关性对于注重质量的新指标或现有指标的改进特别有用
- 举例:在拼车应用程序上,我预计随着乘车过程中增加的停车次数增加,用户满意度会下降或持平。相反,如果新的满意度随着停靠次数的增加而增加,那么这可能意味着日志问题,或者需要进行单独的调查来了解这种用户行为,因为这是违反直觉的
- 精确/召回基本事实:如果分析师使用调查或用户研究作为验证这些标签的基本事实,他们可以使描述某些行为为“好”、“坏”或“质量”的指标更有意义
- 示例:基于日志的数据分析,业务应用程序的产品分析师可能会建议将“良好的工作流完成”定义为点击次数不超过 3 次。为了令人信服地证明 3 次或更少的点击是“好的”,分析师还可以收集用户对不同工作流长度的满意度调查响应,并测量所提议的指标相对于调查响应的精确度和召回率
- 通过实验进行的敏感性分析:如果产品团队认为将持续推动度量标准的新特性没有改变度量标准,那么该度量标准可能不像设计的那样可操作。设计和评估指标的指标生命周期部分的“验证”和“实验”要点描述了分析师如何使用保存的历史实验数据来显示一个新指标是否具有实验可以测量的实际的和统计上显著的效果
获得利益相关方对新指标的认可🤹
在验证流程的某个阶段,数据科学团队需要向工程和产品团队展示新指标及其行为,以获得认同和反馈,从而用作产品成功指标。
指标验证是数据分析的一种形式,所以我会记住 Roger Peng 关于这个主题的建议:如果数据分析的受众接受结果,那么数据分析就是成功的。确保产品和工程团队的直觉检查通过了这个提议的指标和与之相关的分析。
监控和报告度量🗓️📊
在涉众批准之后,您的度量应该准备好进行记录了!用数据交流、可视化和讲述故事是一个可以写满一整本书的主题。也就是说,这里有一些可能有用的提示:
公制格式和通信
- 使用 7 天滚动平均值来说明影响大多数产品的日常指标的工作日/周末变化
- 团队通常建议基于调查或 95%置信区间的采样日志来报告指标
- 就如何沟通基于百分比的指标的变化与您的团队保持一致——它总是很快变得令人困惑
仪表盘
- 工程师和分析师都可以轻松地启动仪表板,因此风险承担者可能很难知道哪些仪表板最适合回答他们的问题。在大型技术公司,数据科学团队将在特定网站/应用程序上创建他们自己的“可信”仪表板集,产品领导层将这些仪表板视为真理
- 这是一个简单的建议,但是我喜欢 Eric Mayefsky 在这篇博文中所说的话——实际看看你创建的仪表板!使用它们来激发更深入的数据调查。“泡在数据里。不要把你创建的仪表盘和报告当成是别人的产品——定期花时间,最好是每天都花时间,只是随便逛逛"
季度/预定指标评审
- 除了实验报告之外,与工程和产品领导一起进行预定的指标审查和趋势分析,可以在更大的组织中推动指标影响
- 需要回答的常见问题包括指标变化归因于新功能/客户或外部影响、指标值与预测的比较、深入探究指标下降或未达到目标的原因、群组分析等。
日落度量🌅
根据我的经验,分析师很少反对指标。相反,数据工程团队和代码管理推动了度量标准的贬值。
数据团队试图优化计算核心指标所需的时间,通常是每天一次。他们的日常工作需要计算的指标越多,这些工作运行的时间就越长,工作失败的可能性就越大。这些工程团队有动机停止计算分析师和产品团队既不监控也不会发现有用的指标。
不重要的或未采用的度量在他们离开团队后可能缺少所有者,并且在很长一段时间没有更新后没有人要求记录。数据工程团队有反对这些无主度量的余地。
总结一下:公制设计清单📋
所以你有它!我们已经讨论过…
- 🎯📚两桶指标:精确度和召回率
- 👶新指标的来源和原因
- 📝如何思考指标的二阶效应(以及这个问题如何出现在面试中)
- 📈通过相关性和敏感性分析验证指标
- 🗓️📊指标监控和报告技巧
- 🌅公制日落发生的原因和方式
一如既往,我认为这是一个活的文档,我欢迎反馈——如果你有任何想法,请随时给我发邮件到 zthomas.nc @ gmail 或 LinkedIn上!谢了。
Data Vault 的权威介绍
数据工程
以及它与其他传统的数据仓库建模技术(如维度建模)相比如何
本文最后一次更新是在 2022 年 6 月 18 日。
W 随着数据数量的指数级增长和数据种类的大幅增加,企业面临着设计和维护数据仓库和数据集市的问题,这些数据仓库和数据集市必须能够跟上敏捷团队进行软件开发的步伐。过去十年中发生的大数据爆炸迫使我们重新思考我们如何存储、检索和分析数据。
导致我们从关系模型转向维度模型的原因也是导致我们转向 Data Vault 的原因,但有一点不同——Data Vault 不一定是 OLAP 维度模型的替代或升级。对于一些用例来说,这是一个更好的方法,而对于其他用例来说则不是。这同样适用于维度建模。
维度建模的替代方案
由于软件应用的不断变化的性质和数据团队的需要,出现了对新的建模技术的需求。在传统的数据仓库建模技术中,非常频繁地进行更改代价很高。另一方面,Data Vault 就是为解决这类问题而设计的。
敏捷软件团队需要敏捷数据团队来补充。
传统的数据仓库建模技术,如星型模式,仍然非常相关和有用。Data Vault 刚刚尝试从这两者中吸取思想,使用星型模式的维度建模和第三范式(3NF)的关系建模。
和...一样重要。支持快节奏应用程序开发的是无缝的可伸缩性。云计算使得数据仓库的部署和扩展变得容易,但是由于低效的模型和过度的维护,云数据仓库也会遭受很多损失。如果模型不好,那么无论您向仓库分配多少资源,查询的性能都会很差。
什么构成了数据仓库
DataVault 的创建者 Dan Linsteadt 对他的建模方法做了如下描述
数据仓库是一个面向细节的、历史跟踪的和唯一链接的标准化表集,支持一个或多个业务功能领域。
记住这些原则,让我们来理解 Data Vault 域中存在的两种不同类型的保险库—原始保险库和业务保险库。Raw Vault 是将来自不同来源的数据加载到 Data Vault 的第一层。该数据未经过滤。另一方面,Business Vault 只不过是 raw vault 的扩展(有时是可选的)。business vault 具有应用于表的所有业务逻辑,例如 case-when 语句、多列计算、断开和连接多列等。business vault 的目的是让业务用户更容易访问和理解数据。
业务用户可以是营销人员、数据分析师、报告工程师、数据工程师、软件开发人员等等。
在这里,我们为您的企业集成需求提供同类最佳的混合数据建模解决方案。加入成长…
danlinstedt.com](http://danlinstedt.com/solutions-2/data-vault-basics/)
在 Data Vault 模型中有 5 种不同类型的表。最初的 Data Vault 规范只有 3 个,Data Vault 2.0 引入了另外 2 个
- 集线器 —仅包含企业使用的业务密钥(自然密钥)。业务键不应该是替代品(像在一些维度模型中),它们应该对业务有意义。
- Link —包含各种业务键之间的唯一关系。它本质上是一个映射表,除了不同 hub 之间的映射(使用业务键)之外,没有任何实际数据。
- 卫星 —包含所有非关键的描述性数据——当前的和历史的。理想情况下,集线器和链路表都应该有几个卫星表。
- PIT —这是卫星表的升级,尤其是当查询中使用的中心有多个卫星表要加入时。
- 网桥 —就像 PIT 表用于扩展卫星一样,网桥表用于扩展链路,以帮助连接具有多个中枢&链路的连接。
总而言之,数据仓库模型是数据仓库建模中更传统方法的替代方案,原因如下
- 跟上来自源系统的数据的种类和数量,即可伸缩性
- 跟上敏捷软件开发实践所要求的频繁变化
- 为业务用户提供数据的上下文视图,使他们能够轻松地浏览和分析从各种来源生成的数据
进一步探索
复杂数据环境中的数据仓库建模
德勤数据科学家访谈
德勤数据科学面试问题
图片来自 Pixabay
介绍
德勤会计师事务所总部位于纽约,是一家私营跨国公司,提供审计和鉴证、咨询、风险和税务评估以及财务顾问方面的专业服务。自 1845 年成立以来,该公司已发展成为世界上最大的会计和审计公司之一,在全球 150 多个国家开展业务,拥有超过 25 万名员工。
德勤拥有“四大”会计师事务所中最大的客户群,通过其服务产生大量数据,努力利用和分析信息进行业务设计和组织领导。德勤利用“市场领先的端到端分析、信息管理和解决方案组合”,为其客户的业务提供可操作的数据和见解。
德勤的数据科学角色
图片来自 Unsplash
在德勤,数据科学家主要为其他团队提供咨询服务,为决策提供依据和信息。这些角色是专业化的,从完善模型和算法到通过高级分析概念释放洞察力,从而显著提高盈利能力。
通过这种方式,数据科学家可以致力于应用基本的业务分析或统计概念,或者开发和设计预测模型、挖掘数据和优化信息。使用高级分析和建模(AAM)概念,数据科学家使用机器学习/深度学习模型和高度技术化的统计技术,以便从内部和外部数据提供端到端的解决方案。
来温习一下你的机器学习, 回顾一下关于面试查询的“亚马逊机器学习面试问题与解决方案”文章!
所需技能
鉴于德勤高度专业化的数据科学家角色,该职位的候选人必须在数据相关领域拥有至少 3 年(高级职位为 5 年以上)的咨询或行业经验。
其他相关资格包括:
- 计算机科学、工程、数学、统计学、管理信息、经济学、会计学或其他数据相关领域的学士、硕士或博士。
- 有编程语言经验,如 Python,R,VBA,SQL
- 具有建模和模拟分析经验,如逻辑和线性回归、文本分析、预测分析、自然语言处理、优化、决策树、神经网络或聚类技术。
- 具有结构化、半结构化和非结构化数据的定量分析经验。
- 具有使用 Spark、Kafka、Flink、Hadoop 和 NoSQL 数据存储等大数据技术的经验。
- 使用 Apache Hadoop、MapReduce、Pig & Hive 构建可扩展的高性能数据管道的经验。
- 精通数据提取、转换和加载,以支持高级分析。
- 有 AWS、Azure 或 Google 等基于云的平台的经验。
德勤的数据科学团队
德勤的数据科学和分析团队与其他团队合作,通过从客户数据中生成的应用数据决策来释放商业机会。鉴于数据科学家所扮演角色的跨职能方面,工作职责和责任可以从业务或机器学习分析到预测建模。
分析和认知:专注于利用数据分析、数学技术和预测建模的力量,从海量数据中发现隐藏的关系。与客户合作实施大规模数据生态系统,包括数据管理、治理以及结构化和非结构化数据的集成,从而深入了解如何利用基于云的平台。
政府和公共服务(GPS): 利用德勤客户关系管理(CRM)系统(Salesforce)的销售和渠道分析来支持和改善 GPS 销售。应用自然语言处理(NLP)和机器学习模型来促进研究和收集/设计流程,以挖掘各种业务发展,从而确定提高增长率的方法。
DevOps: 与数据工程师合作,构建和维护前沿的人工智能解决方案,为客户提供实时的客户洞察。与数据科学团队合作提供生产级管道,包括构建 ETL 作业以将数据接收到数据库中,管理和编目关于 ETL 数据集的元数据,以及实施数据模型解决方案。
财务和管理:提供专业知识、支持和资源,帮助企业更高效地完成工作。跨职能部门与团队合作,发现高质量的解决方案和创新,以解决当前和未来的挑战。
工程(德勤数字):建立和维护最先进的营销平台,为客户提供跨所有渠道(店内、在线、呼叫中心)的客户品牌互动的单一视图。设计、构建和维护先进的数据解决方案,为德勤的客户提供实时的客户洞察,以实现价值。
德勤面试流程
图片来自 Unsplash
德勤数据科学家面试遵循大多数科技公司标准的数据科学家面试模式。首先是招聘人员打来电话,详细讨论过去的项目或相关经历,以及它们如何融入你面试的数据科学家团队的计划。
想了解更多关于科技公司数据科学面试的信息吗? 阅读“谷歌数据科学家访谈”上的访谈查询!
通过仅概述与团队目标一致的相关经历 ,给面试留下好印象是很重要的。初次面试后,招聘人员将安排与数据科学家同事、招聘经理和团队经理进行现场面试。
初始屏幕
这是对招聘人员的电话或视频面试,通常持续 30 到 60 分钟。这只是一个标准的“普通”面试,问题围绕着你的背景经历、过去的项目以及可能与工作相关的工作经历。主要的重点将是更多地了解你的背景,同时,你将更多地了解德勤的文化和工作角色。
注意:这次面试可能会包含一些技术元素,所以你要准备一些 SQL 和机器方面的问题。
样题:
- 告诉我你不得不与难相处的人一起工作的时候。
- 为什么是咨询,为什么是德勤?
现场面试
标准的德勤现场面试流程包括不同的面试轮次,由行为、技术和基于案例的面试组成。
有四到五轮面试(一轮文化契合、两轮行为和两轮技术),每轮持续 45 分钟,由一组面试官组成:团队成员、其他数据科学家、高级经理、招聘经理和合作伙伴/主管。面试问题是基于案例研究的,有时是开放式的。技术问题是标准化的,涵盖了广泛的数据科学概念。
典型的德勤数据科学家访谈包括:
- 行为访谈:这是与合作伙伴/客户的访谈。
- 文化契合面试:这是一次与高级经理的面试,围绕过去的项目以及它们与工作角色的关系。
- 招聘经理的技术面试:潜在的问题包括 Python、SQL、R、基础统计和概率。
- 与经理的另一次技术面试:这是一次评估你的核心机器学习算法知识的面试。它还评估你的数学解决能力和商业领域知识。
注意事项和提示
图片来自 Unsplash
请记住,德勤数据科学家面试流程旨在评估候选人利用数据科学概念提供基于科学和数据驱动的见解的能力。德勤聘请具有丰富行业经验的专家,他们可以利用数据分析来解决问题,发现新的见解,并帮助德勤的客户提高决策质量。
- 德勤的数据科学家面试问题是标准化的,可以跨越广泛的数据科学概念。记得复习你的统计学、逻辑回归、时间序列、SQL、机器学习和预测建模知识。在白板上练习编码和在interviewquery.com上练习中级数据科学家问题可以帮助你为技术现场面试做好心理准备。
有关不同数据科学采访的更多信息,请在采访查询中查看“Lyft 数据科学家采访”。
德勤数据科学家面试问题
- 你将如何为想与最好的出租车公司竞争的客户解决问题?
- 你最喜欢的 ML 算法是什么?
- 随机森林和额外树分类器有什么区别?
- 给亚马逊这样的电商网站设计一个数据库?
感谢阅读
- 希望在数据科学面试中胜出?查看 面试查询 !
- 前往我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
- 在面试查询博客上找到更多数据科学面试指南,如 Lyft 数据科学家面试 和 谷歌数据科学家面试 。
原载于 2020 年 7 月 6 日 https://www.interviewquery.com**的 。
每个数据科学家都应该使用需求销售预测技术来减少错误
使用 Python 在分步教程中创建破纪录的需求销售预测
为了更好地了解市场,组织有责任超越他们自己的四面墙去寻找数据源
Douglas Laney(Gartner Research 副总裁)
图片来自 Shutterstock
介绍
世界上成千上万的公司,从小创业公司到全球公司,都发现能够准确预测销售的巨大价值,这几乎总是他们的数据科学/分析团队的优先事项之一。
然而,他们似乎都试图通过主要关注两件事来提高精度(减少误差):
-
功能工程(充分利用您的功能)
-
模型/参数优化(选择最佳模型&最佳参数)
以上两者确实非常必要,但是还有第三件事,即以一种互补的方式增加价值,并且它不仅在这个用例中,而且在大多数数据科学项目中都被广泛地低估了:
- 结合外部信息。
在本文中,我们将做一个简单的销售预测模型,然后混合外部变量(正确完成)。
我们要做什么
- 第一步:定义并理解目标
- 第二步:制作一个简单预测模型
- 第三步:添加财务指标和新闻
- 第四步:测试型号
- 步骤 5:测量结果
第一步。定义和理解目标
流行的 沃尔玛销售预测 竞赛已经有好几个实施来预测他们的销售额。
来自 Kaggle 比赛的截图
在本文中,我们将使用数据,并通过结合外部信息来改进模型。
沃尔玛发布了包含每个实体店 99 个部门(服装、电子产品、食品……)的周销售额以及一些其他附加功能的数据。
沃尔玛数据集截图
为此,我们将创建一个 ML 模型,以“ Weekly_Sales”为目标,使用前 70%的观察值进行训练,并在后 30%进行测试。
目标是最小化未来周销售额的预测误差。
我们将添加影响销售或与销售有关系的外部变量,如美元指数、石油价格和关于沃尔玛的新闻。
我们不会使用模型/参数优化或特征工程,因此我们可以区分收益 和添加外部特征。
第二步。制作一个简单的预测模型
首先,您需要安装 Python 3 和以下库:
$ pip install pandas OpenBlender scikit-learn
然后,打开一个 Python 脚本(最好是 Jupyter notebook),让我们导入所需的库。
from sklearn.ensemble import RandomForestRegressor
import pandas as pd
import OpenBlender
import json
现在,让我们定义用于所有实验的方法和模型。
首先是,数据的日期范围是从 2010 年 1 月到 2012 年 12 月。让我们定义用于训练的数据的第一个 70% 和用于测试的后一个 30% (因为我们不希望我们的预测出现数据泄漏)。
接下来,让我们定义一个标准模型和一个随机森林回归量,有 50 个估计量,这是一个相当好的选择。
最后,为了使事情尽可能简单,让我们将误差定义为误差的绝对和。
现在,让我们把它放到一个 Python 类中。
class **StandardModel**:
model = RandomForestRegressor(n_estimators=50, criterion='mse')
def **train**(self, df, target):
# Drop non numerics
df = df.dropna(axis=1).select_dtypes(['number'])
# Create train/test sets
X = df.loc[:, df.columns != target].values
y = df.loc[:,[target]].values
# We take the first bit of the data as test and the
# last as train because the data is ordered desc.
div = int(round(len(X) * 0.29))
X_train = X[div:]
y_train = y[div:]
print('Train Shape:')
print(X_train.shape)
print(y_train.shape)
#Random forest model specification
self.model = RandomForestRegressor(n_estimators=50)
# Train on data
self.model.fit(X_train, y_train.ravel()) def **getMetrics**(self, df, target):
# Function to get the error sum from the trained model # Drop non numerics
df = df.dropna(axis=1).select_dtypes(['number'])
# Create train/test sets
X = df.loc[:, df.columns != target].values
y = df.loc[:,[target]].values
div = int(round(len(X) * 0.29))
X_test = X[:div]
y_test = y[:div]
print('Test Shape:')
print(X_test.shape)
print(y_test.shape)# Predict on test
y_pred_random = self.model.predict(X_test)
# Gather absolute error
error_sum = sum(abs(y_test.ravel() - y_pred_random))
return error_sum
上面我们有一个包含 3 个元素的对象:
- 模型 (RandomForestRegressor)
- 训练:用数据帧和目标训练模型功能
- getMetrics: 用测试数据对训练好的模型进行测试并检索错误的函数
我们将在所有实验中使用这种配置,尽管您可以根据需要修改它来测试不同的模型、参数、配置或其他任何东西。附加值将保持不变,并有可能提高。
现在,让我们得到沃尔玛的数据。你可以在这里得到那个 CSV。
df_walmart = pd.read_csv('walmartData.csv')
print(df_walmart.shape)
df_walmart.head()
有 421,570 个观察值。如前所述,观察值是每个部门每个商店的每周销售额的记录。
让我们将数据插入到模型中,而不要篡改它。
our_model = StandardModel()
our_model.train(df_walmart, 'Weekly_Sales')
total_error_sum = our_model.getMetrics(df_walmart, 'Weekly_Sales')
print("Error sum: " + str(total_error_sum))*> Error sum: 967705992.5034052*
整个模型的所有误差总和为 $ 967,705,992.5 美元。
这个本身没有太大的意义,唯一的参考就是那个时期所有销售额的总和 $ 6,737,218,987.11 美元。
由于有大量的数据,在本教程中,我们将仅关注商店#1 ,但该方法绝对可用于所有商店。
再来看看商店 1 单独产生的错误。
# Select store 1
df_walmart_st1 = df_walmart[df_walmart['Store'] == 1]# Error of store 1
error_sum_st1 = our_model.getMetrics(df_walmart_st1, 'Weekly_Sales')
print("Error sum: " + str(error_sum_st1))**# > Error sum: 24009404.060399983**
因此,商店 1 应对24,009,404.06 美元误差负责,而这个 将是我们进行比较的阈值。
现在,让我们按部门分解错误,以便稍后有更多的可见性。
error_summary = []
for i in range(1,100):
try:
df_dept = df_walmart_st1[df_walmart_st1['Dept'] == i]
error_sum = our_model.getMetrics(df_dept, 'Weekly_Sales')
print("Error dept : " + str(i) + ' is: ' + str(error_sum))
error_summary.append({'dept' : i, 'error_sum_normal_model' : error_sum})
except:
error_sum = 0
print('No obs for Dept: ' + str(i))
error_summary_df = pd.DataFrame(error_summary)
error_summary_df.head()
现在,我们有了一个数据框架,其中包含了与阈值模型中商店 1 的每个部门相对应的错误。
让我们提高这些数字。
第三步。添加财务指标和新闻
让我们选择部门 1 作为一个简单的例子。
df_st1dept1 = df_walmart_st1[df_walmart_st1['Dept'] == 1]
现在,让我们搜索相交的数据集。
# First we need to add the **UNIX timestamp** which is the number
# of seconds since 1970 on UTC, it is a very convenient
# format because it is the same in every time zone in the world!df_st1dept1['timestamp'] = OpenBlender.dateToUnix(df_st1dept1['Date'],
date_format = '%Y-%m-%d',
timezone = 'GMT')df_st1dept1 = df_st1dept1.sort_values('timestamp').reset_index(drop = True)
现在,让我们在 OpenBlender 中搜索关于“商业”或“沃尔玛”的时间交叉(重叠)数据集。
注意:要获得您需要的令牌必须在 openblender.io (免费)上创建一个帐户,您可以在个人资料图标的“帐户”选项卡中找到它。
token = '**YOUR_TOKEN_HERE**'print('From : ' + OpenBlender.unixToDate(min(df_st1dept1.timestamp)))
print('Until: ' + OpenBlender.unixToDate(max(df_st1dept1.timestamp)))# Now, let's search on OpenBlender
search_keyword = 'business walmart'# We need to pass our timestamp column and
# search keywords as parameters.
OpenBlender.searchTimeBlends(token,
df_st1dept1.timestamp,
search_keyword)
搜索找到了几个数据集。我们可以看到名称、描述、url、特征,最重要的是,我们的时间交互,因此我们可以将它们混合到我们的数据集。
让我们从混合这个沃尔玛推文数据集开始,寻找宣传片。
- 注意:我选择这个是因为它有意义,但是你可以搜索成百上千个其他的。
我们可以通过搜索按时间聚合的文本或新闻,将新的列混合到我们的数据集中。例如,我们可以创建一个“ promo ”功能,其提及次数将与我们自制的 ngrams 相匹配:
**text_filter** = {'name' : 'promo',
'match_ngrams': ['promo', 'dicount', 'cut', 'markdown','deduction']}# **blend_source** needs the id_dataset and the name of the feature.blend_source = {
'id_dataset':'**5e1deeda9516290a00c5f8f6**',
'feature' : '**text**',
'filter_text' : **text_filter**
}df_blend = OpenBlender.timeBlend( token = token,
anchor_ts = df_st1dept1.timestamp,
blend_source = blend_source,
blend_type = 'agg_in_intervals',
interval_size = 60 * 60 * 24 * 7,
direction = 'time_prior',
interval_output = 'list')df_anchor = pd.concat([df_st1dept1, df_blend.loc[:, df_blend.columns != 'timestamp']], axis = 1)
timeBlend 功能的参数(您可以在此处找到文档):
- anchor_ts :我们只需要发送我们的时间戳列,这样它就可以作为一个锚来混合外部数据。
- blend_source :关于我们想要的特性的信息。
- blend _ type:‘agg _ in _ intervals’因为我们希望对我们的每个观察进行 1 周时间间隔的聚合。
- inverval_size :间隔的大小,以秒为单位(本例中为 24 * 7 小时)。
- 方向:‘time _ prior’因为我们希望间隔收集前 7 天的观察值,而不是转发以避免数据泄漏。
我们现在有了我们的原始数据集,但是增加了两个新列,我们的“推广”功能的“计数”和一个实际文本的列表,以防有人想要遍历每个文本。
df_anchor.tail()
现在我们有了一个数字特征,关于我们的 ngrams 被提及的次数。如果我们知道哪个商店或部门对应于“1”,我们可能会做得更好。
让我们应用标准模型,并将误差与原始值进行比较。
our_model.train(df_anchor, 'Weekly_Sales')
error_sum = our_model.getMetrics(df_anchor, 'Weekly_Sales')
error_sum#> 253875.30
目前的模型有 253,975 美元的误差,而以前的模型有 290,037 美元的误差。这是一个 12% 的改进。
但是这个证明不了什么,可能是随机森林运气好。毕竟,原始模型是用超过 299K 的观测值训练的。目前的一架只训练了 102 架!!
我们也可以混合数字特征。让我们尝试混合美元指数、油价和月度消费者情绪
**# OIL PRICE**blend_source = {
'id_dataset':'5e91045a9516297827b8f5b1',
'feature' : 'price'
}df_blend = OpenBlender.timeBlend( token = token,
anchor_ts = df_anchor.timestamp,
blend_source = blend_source,
blend_type = 'agg_in_intervals',
interval_size = 60 * 60 * 24 * 7,
direction = 'time_prior',
interval_output = 'avg')df_anchor = pd.concat([df_anchor, df_blend.loc[:, df_blend.columns != 'timestamp']], axis = 1)**# DOLLAR INDEX**blend_source = {
'id_dataset':'5e91029d9516297827b8f08c',
'feature' : 'price'
}df_blend = OpenBlender.timeBlend( token = token,
anchor_ts = df_anchor.timestamp,
blend_source = blend_source,
blend_type = 'agg_in_intervals',
interval_size = 60 * 60 * 24 * 7,
direction = 'time_prior',
interval_output = 'avg')df_anchor = pd.concat([df_anchor, df_blend.loc[:, df_blend.columns != 'timestamp']], axis = 1)**# CONSUMER SENTIMENT**blend_source = {
'id_dataset':'5e979cf195162963e9c9853f',
'feature' : 'umcsent'
}df_blend = OpenBlender.timeBlend( token = token,
anchor_ts = df_anchor.timestamp,
blend_source = blend_source,
blend_type = 'agg_in_intervals',
interval_size = 60 * 60 * 24 * 7,
direction = 'time_prior',
interval_output = 'avg')df_anchor = pd.concat([df_anchor, df_blend.loc[:, df_blend.columns != 'timestamp']], axis = 1)df_anchor
现在我们又有了 6 个特征,石油指数、美元指数和消费者情绪在 7 天时间间隔内的平均值,以及每个特征的计数(这在本例中是不相关的)。
让我们再运行一次那个模型。
our_model.train(df_anchor, 'Weekly_Sales')
error_sum = our_model.getMetrics(df_anchor, 'Weekly_Sales')
error_sum>223831.9414
现在,我们减少到 223,831 美元的错误。相对于最初的 290,037 美元,提高了24.1%!!
现在,让我们分别对每个部门进行尝试,以衡量收益的一致性。
第四步。在所有部门进行测试
为了一目了然,我们将首先对前 10 个部门进行实验,并比较添加每个额外资源的优势。
**# Function to filter features from other sources**def excludeColsWithPrefix(df, prefixes):
cols = df.columns
for prefix in prefixes:
cols = [col for col in cols if prefix not in col]
return df[cols]error_sum_enhanced = []**# Loop through the first 10 Departments and test them.**for dept in range(1, 10):
print('---')
print('Starting department ' + str(dept))
# Get it into a dataframe
df_dept = df_walmart_st1[df_walmart_st1['Dept'] == dept]
# Unix Timestamp
df_dept['timestamp'] = OpenBlender.dateToUnix(df_dept['Date'],
date_format = '%Y-%m-%d',
timezone = 'GMT')df_dept = df_dept.sort_values('timestamp').reset_index(drop = True)
**# "PROMO" FEATURE OF MENTIONS ON WALMART**
text_filter = {'name' : 'promo',
'match_ngrams': ['promo', 'dicount', 'cut', 'markdown','deduction']}
blend_source = {
'id_dataset':'5e1deeda9516290a00c5f8f6',
'feature' : 'text',
'filter_text' : text_filter
}df_blend = OpenBlender.timeBlend( token = token,
anchor_ts = df_st1dept1.timestamp,
blend_source = blend_source,
blend_type = 'agg_in_intervals',
interval_size = 60 * 60 * 24 * 7,
direction = 'time_prior',
interval_output = 'list')df_anchor = pd.concat([df_st1dept1, df_blend.loc[:, df_blend.columns != 'timestamp']], axis = 1)
**# OIL PRICE** blend_source = {
'id_dataset':'5e91045a9516297827b8f5b1',
'feature' : 'price'
}df_blend = OpenBlender.timeBlend( token = token,
anchor_ts = df_anchor.timestamp,
blend_source = blend_source,
blend_type = 'agg_in_intervals',
interval_size = 60 * 60 * 24 * 7,
direction = 'time_prior',
interval_output = 'avg',
missing_values = 'impute')df_anchor = pd.concat([df_anchor, df_blend.loc[:, df_blend.columns != 'timestamp']], axis = 1)**# DOLLAR INDEX**blend_source = {
'id_dataset':'5e91029d9516297827b8f08c',
'feature' : 'price'
}df_blend = OpenBlender.timeBlend( token = token,
anchor_ts = df_anchor.timestamp,
blend_source = blend_source,
blend_type = 'agg_in_intervals',
interval_size = 60 * 60 * 24 * 7,
direction = 'time_prior',
interval_output = 'avg',
missing_values = 'impute')df_anchor = pd.concat([df_anchor, df_blend.loc[:, df_blend.columns != 'timestamp']], axis = 1)**# CONSUMER SENTIMENT**blend_source = {
'id_dataset':'5e979cf195162963e9c9853f',
'feature' : 'umcsent'
}df_blend = OpenBlender.timeBlend( token = token,
anchor_ts = df_anchor.timestamp,
blend_source = blend_source,
blend_type = 'agg_in_intervals',
interval_size = 60 * 60 * 24 * 7,
direction = 'time_prior',
interval_output = 'avg',
missing_values = 'impute')df_anchor = pd.concat([df_anchor, df_blend.loc[:, df_blend.columns != 'timestamp']], axis = 1)
try:
error_sum = {}
# Gather errors from every source by itself# Dollar Index
df_selection = excludeColsWithPrefix(df_anchor, ['WALMART_TW', 'US_MONTHLY_CONSUMER', 'OIL_INDEX'])
our_model.train(df_selection, 'weekly_sales') error_sum['1_features'] = our_model.getMetrics(df_selection, 'weekly_sales')
# Walmart News
df_selection = excludeColsWithPrefix(df_anchor, [ 'US_MONTHLY_CONSUMER', 'OIL_INDEX'])
our_model.train(df_selection, 'weekly_sales') error_sum['2_feature'] = our_model.getMetrics(df_selection, 'weekly_sales')
# Oil Index
df_selection = excludeColsWithPrefix(df_anchor,['US_MONTHLY_CONSUMER'])
our_model.train(df_selection, 'weekly_sales') error_sum['3_features'] = our_model.getMetrics(df_selection, 'weekly_sales')
# Consumer Sentiment (All features)
df_selection = df
our_model.train(df_selection, 'weekly_sales') error_sum['4_features'] = our_model.getMetrics(df_selection, 'weekly_sales')
except:
import traceback
print(traceback.format_exc())
print("No observations found for department: " + str(dept))
error_sum = 0
error_sum_enhanced.append(error_sum)
让我们把结果放到一个数据框架中,然后可视化。
separated_results = pd.DataFrame(error_sum_enhanced)
separated_results['original_error'] = error_summary_df[0:10]['error_sum_normal_model']separated_results = separated_results[['original_error', '1_feature', '2_features', '3_features', '4_features']] separated_results.transpose().plot(kind='line')
部门 4 和 6 的级别比其他部门高,让我们将它们移除,以便更仔细地了解其他部门。
separated_results.drop([6, 4]).transpose().plot(kind=’line’)
我们可以看到,随着我们增加新功能,几乎所有部门的错误都降低了。我们还可以看到,石油指数(第三个特征)对某些部门不仅没有帮助,甚至是有害的。
我排除了石油指数,并在所有部门上运行具有 3 个特征的算法(这可以通过迭代所有 error_summary_df 而不仅仅是前 10 个来完成)。
让我们看看结果。
第五步。测量结果
这些是所有部门的“3 个特征”混合和改进百分比的结果:
添加的功能不仅改善了超过 88%的部门的错误,而且一些改进是显著的。
这是改善百分比的直方图。
原始误差(在文章开头计算)为24,009,404.06 美元,最终误差为9,596,215.21 美元,表示减少了 60%以上
而这只是一家店。
感谢您的阅读。
SIEM 的消亡助长了安全数据湖的兴起
激动人心的景点就在前方;阅读下面的“电影评论”。(图片来源:http://www.redkid.net/generator/sign.php)
十年前,日志管理通常用于为法规遵从性和安全性用例捕获和保留事件。随着对手及其 TTP 变得越来越复杂,简单的日志记录演变为安全信息和事件管理(SIEM ),规则驱动的关联功能使得将原始事件数据转化为潜在的有价值情报成为可能。尽管实现并使一切正常工作具有挑战性,但找到所谓的“大海捞针”并识别正在进行的攻击的能力是一个巨大的进步。
今天,SIEM 仍然存在,市场主要由 Splunk 和 IBM Q-Radar 主导。许多客户最终转向了云原生部署,并且正在利用机器学习和复杂的行为分析。然而,新的企业部署更少,成本更高,最重要的是,CISO 和 SOC 中辛勤工作的团队的整体需求发生了变化。这些需求已经发生了变化,因为安全团队几乎普遍认识到他们正在输给坏人。减少对 SIEM 的依赖以及许多其他变化正在顺利进行。SIEM 不会消失,但它的角色正在迅速变化,它在 SOC 中有了一个新的合作伙伴。
为什么暹罗的作用正在迅速减弱?
- 这是过于狭隘的关注:仅仅收集安全事件已经不够了,因为这个数据集上的窗口太窄了。虽然在您的事件中可能有大量的事件数据要捕获和处理,但您却错过了大量的附加信息,如 OSINT(开源情报信息)、可消费的外部威胁源,以及恶意软件和 IP 信誉数据库等有价值的信息,甚至是来自黑暗网络活动的报告。情报来源无穷无尽,对于 SIEM 的架构来说太多了。
- 成本(数据爆炸+硬件+许可证成本=糟糕的结果) : 有了如此多的物理和虚拟基础架构,被捕获的信息量已经爆炸式增长。机器生成的数据增长了 50 倍,而平均安全预算年增长率为 14%。存储所有这些信息的成本使得 SIEM 成本过高。SIEM 的平均成本已经飙升到接近每年 100 万美元,这还只是许可证和硬件成本。经济因素迫使 SOC 中的团队捕获和/或保留更少的信息,以试图控制成本。这导致 SIEM 的有效性进一步降低。我最近与一个 SOC 团队进行了交谈,该团队希望查询大型数据集以寻找欺诈的证据,但在 Splunk 中这样做成本高昂,而且过程缓慢而艰难,因此需要努力探索新的方法。
结果是可怕的—pone mon Institute 最近的一项调查调查了近 600 名 IT 安全负责人,发现尽管每年平均花费 1840 万美元,平均使用 47 种产品,高达 53%的 IT 安全负责人“甚至不知道他们的产品是否工作”。显然,改变是理所应当的!
进入安全数据湖
安全驱动的数据可能是多维的、动态的和异构的,因此,数据仓库解决方案在提供用户需要的敏捷性和性能方面效率较低。数据湖被认为是数据仓库的一个子集,然而,就灵活性而言,它是一个重大的进步。数据湖更加灵活,支持原生格式的非结构化和半结构化数据,可以包括日志文件、提要、表格、文本文件、系统日志等。您可以流式传输您的所有安全数据,没有一个被拒绝,一切都将被保留。安全团队可以以较低的成本轻松实现这一点。例如,如果在 S3 桶中,则为每月每 GB 0.03 美分。这种能力使数据湖成为 SIEM 的倒数第二次进化。
(图片来源:http://www.redkid.net/generator/sign.php)
如果您正在构建一个安全数据湖,您将能够专注于更具战略性的活动:
- 威胁追踪:老练的对手知道如何隐藏和躲避现成安全解决方案的检测。高度熟练的安全团队将跟踪触发器(可能是可疑的 IP 或事件),并继续攻击,在损害发生之前找到并补救攻击者。威胁搜寻团队的经验是成功的最关键因素,但是,他们高度依赖于大量的威胁情报,因此他们可以交叉引用他们在内部观察到的情况,并使用最新的威胁情报来关联和检测真实的攻击。
- 数据驱动调查:每当检测到可疑活动,分析师就会开始调查。为了有效,这必须是一个迅速的过程。在典型组织中,行业平均使用 47 种安全产品,这使得访问所有相关数据变得非常困难。但是,有了安全数据湖,您可以将所有的侦察信息流入数据湖,并消除收集日志的耗时工作。该过程的价值在于将新观察到的行为与历史趋势进行比较,有时与跨越 10 年的数据集进行比较。在传统的 SIEM 中,这将是成本过高的。
数据湖在加载数据时自动处理数据(称为解析),使安全团队更容易专注于他们工作中最关键的元素,防止或阻止攻击。
大量的历史数据,通常追溯到十年前,以确定特定的模式是典型的还是异常的。
有趣的公司为您的安全数据湖提供动力:
如果你正计划部署一个安全数据湖或者已经有了,这里有三家尖端公司你应该知道。我不是这些公司中任何一家的员工,但我对它们非常熟悉,并且相信每家公司都会以一种非常有意义的方式改变我们的行业,并且可以转变您自己的安全数据湖计划。
- 团队 Cymru 是你还没听说过的最强大的安全公司。他们组装了一个全球性的传感器网络,当互联网上基于 IP 的流量通过 ISP 时,它会“监听”这些流量,并且可以“看到”,因此比典型 SOC 中的任何人都知道得多。他们通过将这些数据出售给大型公共安全公司来建立公司,如 Crowdstrike、 FireEye 、微软,以及现在的 Palo Alto Networks,上周他们以 8 亿美元收购了expense。此外,JPMC 和沃尔玛的尖端足球团队正在接受我在这篇文章中支持的东西,并利用 Cymru 的遥测数据馈送。现在,您可以访问相同的数据,您将希望他们的 50 多种数据类型和 10 多年的数据湖中的情报帮助您的团队根据某些特征(如 IP 或其他签名)更好地识别对手和不良行为者。
- Varada.io : 安全数据湖的全部价值在于轻松、快速、自由地访问大量信息。它消除了移动和复制数据的需要,并提供了用户所需的敏捷性和灵活性。随着数据湖的增长,查询变得越来越慢,需要大量的数据操作来满足业务需求。云存储可能很便宜,但计算很快变得非常昂贵,因为查询引擎通常基于完全扫描。Varada 通过索引和虚拟化任何维度的所有关键数据解决了这个问题。数据以粒度形式保存在更接近 SOC 的 SSD 卷上,因此数据消费者可以在需要时随时利用最大的灵活性来运行任何查询。好处是通过避免耗时的全扫描,查询响应速度提高了 100 倍,而且成本更低。这支持诸如搜索攻击指标、事件后调查、完整性监控和威胁搜寻等工作负载。Varada 是如此的创新,以至于数据供应商 Starburst 最近刚刚收购了他们。
- Panther:snow flake 是一个广受欢迎的数据平台,主要面向中端市场和企业部门使用。它不是 SIEM,没有安全功能。来自 AWS 和 Airbnb 的工程师创建了 Panther,这是一个威胁检测和调查平台。该公司最近将 Panther 与 Snowflake 连接起来,能够将两个平台之间的数据连接起来,使 Snowflake 成为“下一代 SIEM ”,或者更好的定位是将 Snowflake 发展成为一个高性能、经济高效的安全数据湖。它仍然是一个较新的解决方案,但它是一个很酷的想法,有很大的前景,并且已经在 Dropbox 等公司以令人印象深刻的速度取代了 Splunk 的实施。如果你想知道未来会是什么样子,你甚至可以在这里免费试用。
总的来说,安全组织平均每年花费 1800 万美元,但在防止违规、知识产权盗窃和数据丢失方面却收效甚微。零敲碎打的方法没有奏效。安全数据湖虽然不是一种简单的“现成”方法,但它将您所有的关键威胁和事件数据集中在一个大型的中央存储库中,而且访问简单。它仍然可以利用现有的 SIEM,该 SIEM 可能会利用相关性、机器学习算法甚至人工智能来通过评估模式来检测欺诈,然后触发警报。无论如何配置,安全数据湖都是您应该考虑的令人兴奋的一步,还有我在本文中提到的三家创新公司。
我很想听听您对安全数据湖如何帮助您和您的团队的看法,以及它对您现有的 SIEM 投资意味着什么。你可以直接联系 dan@hightide-advisors.com 或 https://www.linkedin.com/in/schoenbaum。
如果你想阅读更多我的文章——专注于网络安全,并为投资者和高管提供如何改善公司走向市场的建议,可以在这里找到:https://schoenbaum.medium.com/
民主党的推特战争
每位候选人如何在网上争夺提名
卡尔·冯·克劳塞维茨将军有一句名言:“战争是政治的另一种方式”。似乎反过来也是一样的。过去,政治斗争发生在幕后办公室、筹款晚宴和社论版。2020 年这些战役都是线上的。推文、点赞、链接都是战争武器。公众、媒体和政治阶层无休止地发射这些弹药。幸运的是,这些武器留下了分析起来很有趣的大数据痕迹。
随着我们进入民主党初选,我认为这将是一个很好的时间来看看自从我上次对民主党推特的分析以来,事情发生了怎样的变化。正如下面的数据所显示的,战斗仍然很激烈,战场仍然是敞开的。让我们来看看剩下的每一位候选人,看看他们在这个在线舞台上的表现如何。
乔·拜登
直到 2019 年夏天,乔·拜登的竞选策略似乎是尽可能少说话。他在网上也是如此,直到 5 月份他才真正开始发微博。下图显示了拜登今年每周发送的推文数量。
乔·拜登在 201 周内每周发送的推文数量
随着活动的增加,拜登赶上了其他顶级候选人的水平,使他在网上有了重要的存在。
请注意,这些推文的内容变化不大。拜登的热门词汇揭示了一些关键主题。
乔·拜登推特的文字云
在几乎所有的信件中,拜登都表示,我们“必须”击败“特朗普”,拜登竞选是实现这一目标的唯一途径。他最受欢迎的推文都是对现任总统的攻击。
伯尼·桑德斯
谈到网上受欢迎程度,没有民主党人能胜过伯尼·桑德斯。对候选推特粉丝的比较清楚地表明了这一点。
当然,拥有如此众多的追随者也有一些缺点。桑德斯因其支持者在社交媒体上的行为受到了持续的批评。然而,桑德斯的在线和离线支持都在飙升。下面是伯尼·桑德斯每周收到的推特点赞数的图表。这与他的民意测验非常接近。
一些人指责记者戴维·西罗塔秘密控制伯尼的账户,包括其偶尔的负面言论。不管是真是假,3 月份聘用西罗塔与桑德斯崛起紧密相关。
如果我们看看桑德最受欢迎的推文,我们会发现它们都是 2019 年末的简短声明。唯一的例外是桑德斯发布的解释他心脏病发作的消息。
桑德的推特和他的演讲一样,焦点总是在“人”上。
伊丽莎白·沃伦
伊丽莎白·沃伦是最后的领跑者,在在线支持方面仅次于伯尼·桑德斯。对 2019 年推特总赞数的比较显示了这一点。
数据显示,在下半年,沃伦的候选人资格一直在动摇。例如,她的账户每周获得的赞数急剧下降。
不仅如此,她的粉丝也没有增长多少。下图显示了沃伦的个人账户和参议院账户每月新增的 Twitter 粉丝数量。
回顾沃伦 2020 年的热门推文,可以看到这种下降的进一步证据。所有这些都是在 2019 年 10 月她的民调达到峰值之前写的。
沃伦的衰落有多种理论。就我个人而言,我将此归咎于奥巴马时代政客们的影响,他们全力支持她,包括竞选联合主席 Ayanna Pressley。
皮特·布蒂吉格
在所有顶级候选人中,皮特·布蒂吉格发微博最少。统计 2019 年每位候选人的推文总数就清楚地说明了这一点。
然而,当 Buttigieg 发微博时,他得到了关注。通过候选人的推特粉丝来衡量推特点赞数,我们发现 Buttigieg 名列榜首。因此,在极少数情况下,Buttigieg 确实写了一些东西,它可能会受到好评。
但如果他以其他方式吸引注意力,那么他缺乏持续的沟通就不是问题。不幸的是,他不再有 Twitter 追随者,这表明他的竞选意识正在下降。
当 Buttigieg 发微博时,它往往是出于一种道德优越感。他最受欢迎的信息听起来都像是告诫,符合他作为中间派改革者的风格。
Buttigieg 推文的词云显示,他喜欢的术语是经典政治言论的一部分。
杨安泽
杨安泽在许多方面都与众不同。杨是该领域唯一剩下的少数族裔候选人,也是唯一一个不是职业政治家的人。除此之外,杨是最在线的。他在 2019 年发了最多的推文,也是迄今为止社交媒体上最活跃的。
此外,对候选人推文的情感分析显示,杨是最积极的候选人。也就是说,他在 Twitter 上使用的词语和句子比他的对手有更少的负面感觉。
使用情感库的候选人情感
他的推文词云显示,“谢谢”是他目前最喜欢的词。
图尔西·加巴德
Tulsi Gabbard 不太可能赢得提名,但她确实让竞选变得有趣。在所有候选人中,加巴德是唯一一个公开反对党内精英的人,这让她在网上赢得了钦佩和愤怒。
这方面最好的例子是她在十月份与希拉里·克林顿的口水战。那次口角为她赢得了大量的赞和关注者。
Tulsi Twitter 每周点赞数
这场争论证明了攻击政治对手有明显的好处。Twitter 就像一场皇家战争,战斗人员在冲突中茁壮成长。那些最能驾驭这些竞赛的人能够获得显著的关注。
最后的想法
今年 2 月,2020 年民主党提名战进入了最后阶段。随着我们进入爱荷华州党团会议,我们将看到哪位候选人在传播他们的信息方面做得最好。虽然没有什么能打败地面上的靴子和基层的支持,但我认为 2020 年在线宣传是必不可少的。当初选结果出来后,我想我们会看到那些在网上表现最出色的候选人将会在投票中获得奖励。
大数据及其应用的发展与趋势
探索大数据和人工智能
关于大数据的发展和趋势及其在电信行业和其他领域的应用
大数据是近年来计算机科学的一个重要分支。大数据领域的研究和创新从未停止。大数据发展迅速,正在越来越深刻地影响着我们的生活。是时候回顾一下大数据的发展历史,预测一下趋势了。本文有两个主要部分,第一部分是大数据的发展历史和趋势,第二部分是大数据的应用。
大数据的发展
首先,我们来看看大数据的发展。一个叫做 Hadoop 的项目诞生于 2005 年。Hadoop 是大数据领域非常重要的技术。它使用 MapReduce 编程模型为大数据的分布式存储和处理提供了一个软件框架。世界上许多国家和一些研究机构已经在 Hadoop 上进行了一些试点项目,并取得了一系列成果。
2011 年,EMC 举办了云与大数据的全球峰会,同年 5 月,麦肯锡发布了相关研究报告。他们预计,在未来十年内,所谓的数字宇宙将包含 35 吉字节的信息。EMC 推出了所谓的“EMC 大数据堆栈”,定义了他们对如何存储、管理和处理下游大数据的看法。
同年 12 月,中国工业和信息化部发布了物联网“十二五”发展规划。未来中国将加大对智能工业、智能农业、智能物流、智能交通、智能电网、智能环保、智能安防、智能医疗、智能家居的金融支持。它代表了大数据的初步应用。
2012 年至 2015 年间,包括联合国在内的全球多个政府和企业发布了一系列相关理念或行动纲要,以推动大数据的发展。之后,大数据进入高速发展阶段,2017 年大数据产业十三五发展规划在中国诞生,这意味着大数据开始在全球范围内被广泛应用和高速发展。
大数据的发展趋势
那么我们来看看大数据的发展趋势。大数据将如何一步步发展?
- 一开始,我们主要做的是将大数据开源技术商业化,并进一步深化相关技术。还有,根据不同行业定制相关技术。
- 在第二阶段,我们开始根据不同的行业开发不同的大数据应用,并将每个行业的端到端应用打包,以开拓新的行业市场。
- 第三阶段,进一步细分行业市场,进一步提升规模。
- 第四阶段,大数据会促进相关公司的并购,进而进一步增加更大公司的规模和数量。当这些工作完成后,就需要大数据才能真正得到一些有价值的分析结果。
- 在第五阶段,一种革命性的大数据分析方法将开始出现,它带来了一种新的分析理念和分析方法,可以在未来更长的时间内获得一些数据或结果的更准确的预测。
- 在第六阶段,我们将整合大数据和云计算,进一步改善大数据的性能,提高其计算效率。大数据的普遍性和泛化,让更多人接触到大数据技术。
- 然后一体机大数据机会陆续发布,也就是说大数据的硬件和软件会融合在一起,可以以一体机的形式快速被客户使用。根据客户的不同需求,我们可以进行一些软硬件定制开发,以适应各行业的不同特点。
大数据行业应用
先说大数据行业的应用。这部分主要看大数据在电信行业的相关应用和在非电信行业的相关应用。
大数据在电信行业的应用
我们来看看大数据在电信行业应用的主要方面。嗯,在电信行业,我们积累了很多数据:网络数据,运营数据,还有我们其他的一些数据。我们对这些数据进行单独分析和交叉融合分析。我们可以在网络、客户关系、业务运营管理和数据商业化方面孵化许多不同种类的应用。下面就让我们逐一看看。
网络操作
首先,我们看一下大数据在网络运营上的应用。大数据在电信网络上有许多应用。例如,网络基础设施的优化和性能管理是非常典型的相关应用。我们收集整个设备网络的性能信息,并进行相关的汇总和分析。然后我们看看基础设施哪里还有薄弱点需要加强,或者如果有故障,我们需要及时修复。
由于中国的高铁现在发展非常快,中国的电信公司也做了相关铁路的专项绩效管理建设。他们对这些主要铁路线进行了专题性能分析。当他们发现某个地方有信号衰减或者信号波动的时候,可以很快检查出这个地方为什么会出现这种问题。这是不是跟基站不足有关,是他们需要新建基站,还是相关设备需要调试,或者已经出现故障需要维修?都可以利用收集的大数据进行优化。
还有一些对网络运行的其他分析。可以总结出业务的端到端情况和整个网络的资源利用情况。从网络资源的供应到实际使用,再到对使用情况的监控,都可以得到优化和改进。
客户服务
然后我们来看看在客户关系中的应用。客户服务部的日常接线员需要处理来自客户的各种询问。我们可以利用大数据技术,在后端为他们建立一个庞大的知识库,帮助他们快速准确的找到答案,对每天收到的问题进行分析总结。可以找出主要集中在哪些问题,然后解决相关问题。
企业管理
大数据在企业的运营管理中也发挥着非常重要的作用。企业的运营管理会有很多运营监控指标。可以利用大数据技术收集相关指标进行计算。一方面,当指标表现出现波动时,我们可以及时给出预警,同时也可以分析这些指标为什么会出现波动,原因是什么,然后找到相关的解决方案。
精准营销
最后,电信行业的数据也能带来一些商业收入。比如广告,我们可以先进行一个简单的数据探索性分析:应该在哪个区域投放广告才能获得更大的响应率?一些重要事件怎么样?哪一组目标反应好?然后我们就可以根据这些数据来训练相关的模型,我们就可以知道我能精准投放广告的区域和地方,哪些是响应率最高的,比如一个城市的火车站,或者一个机场。
在我们投放这个广告后,我们必须跟踪投放广告的营销结果,我们有进一步的营销洞察力。我们收集广告投放后的一系列指标数据,我们会分析这个广告在这个地方投放的实际效果如何。通过这样一个不断迭代的过程,大数据也可以不断丰富相关指标,不断完善相关模型,进而为我们的商业决策提供越来越准确,越来越详细的决策依据。
环境保护
我们再来看看大数据在非电信领域的应用。那么大数据在非电信领域也有非常广泛的应用,比如和我们大家息息相关的环境问题。大数据广泛应用于环境保护,包括污染监测、灾害预警。在森林中安装了大量传感器,为监测和灾害预报提供环境数据。
公共安全
在我们熟知的公共安全领域,大数据被用来分析相关的公共安全数据,相关的预测,比如一些不寻常的人群,一些重点区域的人群监控,像在一个体育场,都需要用到。它不仅分析一些视频数据,图片数据,还从相关视频图像中提取内容,然后进行相关性分析,为大家营造一个安全的公共环境。
斯蒂芬·莱纳在 Unsplash 上拍摄的照片
金融
此外,我们在金融领域有很多大数据应用,如电子支付,以及一些相对较新的概念,如比特币和金融科技。
医疗保健
大数据现在也被用于医疗保健领域。已经有成功的案例是通过对大数据的分析,预测某种疾病的爆发。
建筑、运输等其他传统行业。也采用了大数据技术来构建自己的应用程序。
摘要
最后我们总结一下这篇文章的主要内容,从 2005 年到现在大数据的主要发展,然后我们谈到了大数据的发展趋势,从一开始它只是一个开源的 Hadoop 软件,到后来进行了定制和商业化,再到后来革命性算法的出现,最后是大数据一体机的出现,大数据已经逐渐成熟。
在第二部分中,我们讨论了大数据在电信行业中的一些应用,如网络性能管理和网络优化,这些应用可以为网络质量的提高带来巨大的价值。及时反馈网络存在的问题,也可以为网络优化提供一些决策依据。
然后我们谈到了在客户关系中的应用。比如在一个客服中心,我们可以利用大数据技术建立一个庞大的知识库,快速检索客服需要的答案,然后我们可以对问题进行总结,我们可以来分析我们还有哪些问题。
然后简单讲了一下大数据在企业运营中的应用。我们主要分析了一些指标,找到了这些指标变化背后的原因。
除了这些应用之外,我们还研究了电信行业中网络数据的使用,以生成一些具有商业价值的应用。比如广告投放,我们可以从广告投放的精准预测入手,然后跟踪广告投放的表现。通过持续这样的迭代,我们可以越来越准确地进行广告投放。这种商业实践为决策提供了更准确和更全面的基础。
最后,我们简单讲了一下在非电信行业的一些应用,我们可以看到大数据在环保、金融、交通、医疗、公共安全等等方面有非常广阔的应用场景。
如果你想对大数据和人工智能有一个大概的了解,也可以看看下面的文章:
大数据和人工智能发展迅速,正在深刻影响我们的生活,并大大提高我们的生活质量
towardsdatascience.com](/what-is-big-data-and-what-artificial-intelligence-can-do-d3f1d14b84ce) [## 人工智能的基本概念及其应用
机器学习,深度学习,强弱人工智能,神经网络简介:BP 和…
medium.com](https://medium.com/towards-artificial-intelligence/basic-concepts-of-artificial-intelligence-and-its-applications-294fb84bfc5e) [## 人工智能的三大领域及其工业应用
人工智能是一门研究和发展理论、方法、技术和方法的新技术学科
towardsdatascience.com](/three-major-fields-of-artificial-intelligence-and-their-industrial-applications-8f67bf0c2b46)
“细节决定成败”。机器学习也不例外。
人类是唯一两次被同一块石头绊倒的动物。你确定你不是其中之一吗?
我应该选择哪种算法?哪些假设是合理的?当我们构建一个新的机器学习解决方案或产品时,有不同的选项来实现它们,并且它们都假设不同的事情。
一开始不要觉得自己很傻。很明显,我们都会犯错误。
但是,对于刚接触机器学习的你来说,你可能想知道一些最常犯的错误。如果一切顺利,它将帮助您创建更强大的解决方案,并产生真正的价值。
如果你想了解更多,请访问oscargarciaramos.com
我们将从最常见的开始…
让我用我最喜欢的算法来解决所有问题!
可以想象,同一块不会适合所有的拼图。有多少人完成了他们的第一个教程,并开始为他/她能想到的任何用例使用相同的算法?错误。
让数据为你选择型号。要习惯这样一个事实,数据一旦处理完毕,就需要馈入不同的模型,比较它们的结果,才能知道哪些效果最好,哪些应该丢弃。
我们继续…
离群值不重要!
打扰一下。!你了解你的用例的上下文吗?离群值可能很重要,也可能被完全忽略,但您必须看上下文。还是确定公司销售的一个峰值不重要?你失去的不仅是金钱,还有信任。
从一个更技术性的角度来看,异常值可能具有不同的敏感度,这取决于我们正在使用的案例和模型。一个例子是比较 AdaBoost 模型(自适应增强)的灵敏度,其中异常值被视为“困难”情况并被赋予相当大的权重,以及比较 决策树 的灵敏度,其中异常值可能被识别为错误分类。
第三…均方误差总是很大的!
好吧,我们都知道这是一个很好的默认值,但是当我们推断和谈论现实世界时,这个误差函数对于我们试图解决的用例来说通常不是最佳的。
一个明显的例子是欺诈检测。想象一下,由于欺诈造成的金钱损失,我们想要惩罚假阴性。我们可以使用均方误差,它会给我们一笔钱,但肯定远远不是真实的。记住,我们谈论的是钱!
当我们谈论金钱时,错误是不被接受的。
几天、几小时、几个月……我该如何处理这些周期性特征?
当我们谈论第 23 小时时,我们必须确保 0 小时就在它旁边。通常犯的一个错误是没有将这些特征转换成可以将信息保存为其原始值的表示,这种情况发生在循环特征中。
解决方案?记住计算正弦和余弦分量,以便将它们表示为圆的坐标(x,y)。这样,如果我们要表示时间,23 永远和时间 0 并驾齐驱,理所应当。
回归呢?…
了解系数
线性回归通常会返回每个系数的 p 值。最常见的错误是什么?“系数越高—重要性越大” →错误。
记住,变量的比例完全改变了系数的值。如果变量或特征是共线的,系数可以从一个变化到另一个。因此,我们的特征集越大,它们共线的可能性就越大,因此,孤立的解释就越不可靠。
提醒一下:如果一个变量 X1 是另一个 X2 的线性组合(共线),意味着两者通过表达式 X1 = b1 + b2X2 相关,其中 b1 和 b2 为常数,因此两个变量之间的相关系数将为 1。
我们应该知道特征的重要性或权重,但是系数不能告诉你全部事实,只能告诉你一部分。
最后…
规范而不规范,不行!
如你所知,学习包括寻找最小化成本函数的系数。正则化包括向成本函数添加惩罚。然而,有时我们会忘记在规范化之前先规范化的重要性。想象一下,如果我们开发一个模型,其中包含以美元表示的变量和以美分表示的变量,我们会损失多少钱。押金。
那么,下一步是什么?
如你所见,“细节决定成败”。即使是最稳健、最有效和最稳定的模型也会有偏差和误差。
努力工作,检查两遍,不要过于自信。
一切都可以改进,一切都可以进化。
欢迎留言、鼓掌或分享这篇帖子。以后的帖子关注 me 。
如果你想了解更多,你可以在 oscargarciaramos.com 的找到我
数据科学和统计学的区别
意见
你是哪个角色,该不该转行?
由Unsplash【1】上的 krakenimages 拍摄的照片。
目录
- 介绍
- 数据科学家
- 统计员
- 类似
- 差异
- 摘要
- 参考
介绍
最有可能的是,在 21 世纪初,数据科学家的头衔在任何行业都不会出现,但它很快成为近年来职业趋势中爆发的热门词汇。这真的是我们第一次看到这样的工作吗?答案是不,在数据科学出现之前,我们已经看到过非常相似的职业。我们现在也看到了这个职业——统计学家的角色。
他们有什么不同?有哪些相似之处?这些是我将在以下部分回答的问题。继续阅读,找出哪个角色是哪个。
数据科学家
照片由 Arseny Togulev 在Unsplash【2】上拍摄。
这个角色最近变得非常受欢迎,这是有原因的。当你的业务中有一名数据科学家时,你是在为一个人招聘几个角色。成为一名数据科学家所需的技能令人望而生畏,需要勾选许多选项。这个角色可以被认为是跨职能的——需要了解业务的技术技能和软技能。仅仅知道编码技术是不够的,还要知道如何与非技术利益相关者和公司领导一起解决重要的业务问题。数据科学家需要了解一些简单明了的技能,但随着时间的推移,在这些情况下,您需要通过实践获得一些不一致的技能。这些技能是技术性较低的技能,通常包括但不限于:形成一个问题,形成一个问题陈述,创建一个回答该问题的过程,向利益相关者展示发现和解释结果。
数据科学所需的一些关键技能包括:
machine-learning librariesPython or R programmingSQL
统计员
统计学家的角色比数据科学家的角色存在的时间要长得多。需要这个岗位的行业数不胜数。如果你想在医疗保健、安全、学术、营销、经济和许多其他领域工作,你肯定会成为那里的统计学家。统计员的主要职责包括但不限于:实验设计、进行研究、创建估计和开展调查。你需要在数学和实验设计方面有很强的背景知识。这个职位也需要软技能。其中包括向利益相关者报告您的发现,以及这些统计发现需要他们各自做出的改变。
以下是统计的一些关键技能:
SAS ProgrammingExperimental designMathematics
类似
正如您可能已经看到的,这两个角色需要的一些技能是相似的,如果不是完全相同的话。那么,数据科学家和统计学家之间的主要相似之处是什么?以下是这两种角色之间的一些相似之处:
- 对数学的理解
- 调查问题
- 探索性数据分析
- 分析趋势
- 创建预测
- 可视化
- 向非技术用户报告调查结果
当然,这些角色之间有更多的相似之处,但这些是我从角色以及各自的工作描述中遇到的一些相似之处。随着时间的推移,知道统计学是否变得更像数据科学或者相反,或者它们是否彼此背离,将是一件有趣的事情。
差异
现在,让我们讨论一下这些角色之间的区别。
首先,统计学家比数据科学家存在的时间更长,这意味着差异可能在于新技术。
这是它们之间的主要区别,主要由那些新技术组成。
统计数字
- 一次性报道
- 使用 SAS 编程
- 关注诊断图
- 关注显著性检验
- 侧重于 t 检验、方差分析、方差分析等。
- 更多手动数据收集(有时来自调查)
- 通常,你会发现医疗保健和经济领域的统计学家
- 或更多学术设置
数据科学
- 自动化
- 使用 SQL 查询收集数据
- 像 sklearn 和 TensorFlow 这样的机器学习库
- 使用 Python 和 R 编程语言
- 部署自动化模型(到应用程序中)
- 关注软件工程实践
上述差异也可以在工作描述和个人经历中看到。根据公司的不同,你可能会发现其中一些技能是重叠的,但我相信这是这两种角色之间最大的区别。
摘要
照片由克里斯蒂娜@ wocintechchat.com在Unsplash【4】上拍摄。
所以,总结一下,统计学家和数据科学家或者数据科学和统计学研究之间的区别是什么?这可以用一句话来概括— 来自新技术的自动化。一个角色比另一个角色更重要吗?否。他们都是重要的角色。如果你想专注于显著性、测试、实验设计、正态分布和诊断绘图,那么成为一名统计学家。如果你想实践更多的软件工程,比如编码和机器学习模型的自动化,那么就成为一名数据科学家。你会发现,这两种角色的许多工作描述都有重叠,但很少找到统计员角色所需的机器学习库。
如果你正在考虑开始一份新的职业或转行,我希望这篇关于统计学家和数据科学家之间的相似性和差异的概述是有趣的,并对你有所帮助。当然,有更多的相同点和不同点,所以请在下面随意评论你在这些角色中有哪些经历。感谢您的阅读!
请记住,本文来自个人经验,这些研究和角色可能因大学和公司而异。
参考
[1]照片由 krakenimages 在Unsplash(2020)拍摄
[2]2019 年 Unsplash 上 Arseny Togulev 拍摄的照片
[4]照片由克里斯蒂娜@ wocintechchat.com在Unsplash(2019)上拍摄
特征转换、工程和选择之间的区别
作为数据科学家,它们是日常任务。但是你知道每一个是什么意思吗?
简介
当您开始学习数据科学概念时,您意识到有许多事情需要考虑。修饰过的名字无助于解释我们应该做什么,对吗?今天,我们将一劳永逸地了解它们的含义。
数据集
图片由雷南·洛里科拍摄——中号
我将使用我为另一篇文章创建的数据集。这组人工数据模拟了一些关于心脏病可能性的数据,这就是我们的目标。为了找到答案,我们有一些虚假的医疗信息,如血压、年龄和钠含量。
特征转换
图片由吉菲提供
我们将遵循一个顺序,从第一步到最后一步,这样我们可以更好地理解一切是如何工作的。首先,我们有特征转换,它修改数据,让机器更容易理解。这是数据清理和数据争论的结合。
图片由雷南·洛里科拍摄——中号
这里,我们填充空值,对分类资源进行编码,调整数值列的大小,并应用标准化和规范化;注意我们没有从当前的创建新的列;这就是转换不同于特征工程的地方。
特征工程
图片由 Giphy 提供
特征工程使用已经修改的特征来创建新的特征,这将使任何机器学习算法更容易理解和学习任何模式。
让我们看一个例子:
图片由雷南·洛里科拍摄——中号
例如,我们可以创建两个新列来检查患者是否患有低钠血症(钠浓度小于 135)或高钠血症(钠浓度大于 145)。输出将是下图。
图片由雷南·洛里科拍摄——中号
“心脏病”功能是一个条件列,也是我们的目标;如果心脏收缩指数大于 140 或心脏舒张指数大于 90,则为真。年龄也会影响结果。虚构的表示!
纪念
每个新创建的资源都需要以某种方式提高产量;否则会适得其反,恶化最终结果。当这种情况发生时,我们需要应用特征选择。
特征选择
图片由 Giphy 提供
比方说,你的数据包含一个巨大的特征集,它可以改善或恶化你的预测,而你只是不知道哪些是需要的;这就是你使用特征选择的地方。
特征选择学习每个特征对你的模型的影响并带来结果。这样,您就可以用正确的资源创建训练集、验证集和测试集。
特征选择。图片由雷南·洛里科拍摄——中号
但是等等!正如你在上面的图片中看到的,他们总是会出错,看起来“名称”功能有很大的影响,但我们知道它不会对我们的模型产生积极的影响。
最终提示
- 和特征选择一样,还有降维,降维要完整复杂得多。
- 几乎每个项目都可以用特性工程来改进,尽可能地使用它。
- 特征选择的使用直接取决于数据集中可用的特征数量;不到 20?考虑使用特征选择;否则,降维可能是必要的。
- 您不需要在所有项目中使用特性选择。
想了解更多?
有一篇文章列出了特性转换中的每一个必要步骤;真是过瘾!让我们来看看?
数据插补,宁滨,编码,等等!熟练掌握所有步骤!
towardsdatascience.com](/feature-transformation-for-data-scientists-3a9eed562752)
我在哪里可以找到这些材料?
如果您对我如何创建所有这些图形和代码感兴趣,您可以:
就这样,伙计们!
我希望你喜欢这个内容,并能熟练运用你的新知识!如果你想每天学习有趣的东西,我很乐意与你分享精彩的内容!
另外,你可以在 Github 上查看我的个人资料。我从事一些数据科学项目已经有一段时间了。所有的关键概念都可以学习和重用!
在 GitHub 上注册你自己的个人资料,这是托管代码、管理项目和构建软件的最佳地方…
github.com](https://github.com/renfelo)
为什么难以销售人工智能驱动的解决方案
以及如何关注客户真正关心的问题
在 Unsplash 上拍摄的 ThisisEngineering RAEng
O 机遇敲门
对于我们中的一些人来说,这是当你发现自己处于一种商业环境中时,你会感觉到浪费时间,看到无处不在的低效,并开始思考“一定有更好的做事方法”。
你会看到大量的数据被生成,并对其中潜在的丰富性感到惊讶。你知道有一些价值,因为环顾四周,人们整天都在编写脚本只是使数据可用。
有一天,有人拉出了一个看起来很锋利的仪表盘,可以减少噪音,经理们都很兴奋…可能是因为他们现在可以更好地向上管理了。
一个声音低语道:“我们已经收集了这么多数据,我们是否应该开始寻找趋势…和模式?”。
但是谁有时间呢?还有能量?
几年后,一家公司带着为你的数据集量身定制的 AI/ML 解决方案来敲门。
他们承诺在所有数据中找到有价值的模式。可以导致更好决策的模式,减少浪费的时间,从而降低成本。
但是它的代价会让你的老板停下来问…“它真的值得吗?”
你的人工智能驱动的解决方案能提供多少价值?
“谁说数据是新的石油,谁是对的,现在石油一文不值。”——Philo Daniel,2020 年 4 月 27 日
试图销售人工智能解决方案的最难的一课是发现你提供解决的大多数问题都不够重要。并且已经以某种方式或形式解决了吗?
也许没有效率,也许没有效果,也许甚至很差…但足以维持现状。
乔希·温特斯在他那篇极其诚实的文章 中涵盖了所有这些,这是给人工智能 来之不易的建议,我们真希望自己在几年前第一次上市时就读过这本书。
没有人会失败
如果有一个信息一直被分析师重复,那就是数据科学/人工智能/ML/分析项目的失败率非常高。
原因有很多——缺乏目标、缺少专业知识、非数据驱动的文化以及解决一个可能不存在的问题。
总之,商业案例根本不起作用。
但正是在这种环境中,每一个失败的理由都围绕着我们,在这种环境中,我们必须以某种方式展示价值……对参与我们解决方案的每个层次的客户都切实可见的价值。
我们需要知道客户……企业……并不真正关心我们的技术或机器型号。
没有借口
假设您已经入门并开始试验,那么您最好找到一种方法来快速转换数据(不管有多糟糕),获得一个工作模型并产生接近可用的输出。
这些是赌桌。
如果数据是垃圾,想办法填补空白。考虑到客户可能也不知道,说“我们不能给你输出,除非你告诉我们输入数据是什么意思”是冒提前结束的风险!
借口并不重要,因为对于那些说“但我们认为你的人工智能可以找出丢失的东西并进行补偿”的人,通常没有礼貌的回答方式。
商业价值
最终(希望!),我们可能会到达一个感知价值的点,即您的 AI/ML 输出最终为客户提供了一个结果。
然后,这需要转化为一个商业案例,可以卖给那些可能不在房间里的人。
供应商— “看看这些见解…你们现在可以在硬件出现故障前一个月更换硬件了”
客户— “等等,我们为此信息向您支付了 100,000 美元,但计划外硬件故障的影响大约是 5,000 美元”。
供应商— “正是。此信息向您显示了 30 件硬件的计划—150,000 美元…因此您节省了 50,000 美元”
客户— “嗯,你的人工智能有多准确?你不是说 70%吗?你跟我说的精确是什么?
最根本的问题总是最终成为,人工智能驱动的解决方案是否能产生足够大的差异,从而值得购买?
从这一刻起,只是客户关心的商业案例。
脱离技术
当你不在的时候,你试图说服一个可能需要说服别人的人。因此,任何商业案例都必须独立存在。
然而,惰性无处不在,大多数客户都在努力构建自己的故事。
那么,我们如何提供帮助呢?
#1:使用 Tableau 或 Power BI 等数据可视化工具
无论 AI/ML 系统的输出是原始的,通过正式的 UI,还是使用 Python 库后期构建的,data viz 工具都可以帮助它与您的客户相关联。
对我们来说,这让我们的销售主管有机会随时改变视觉效果(甚至在会议期间),直到她找到最能引起客户团队不同成员共鸣的组合。
所有这些都不依赖于坐在千里之外的数据科学家。
这些不是复杂或花哨的仪表板。它们是简单的“决策支持”视觉效果,将销售过程推向正确的方向。
#2:微软 Excel
我们很少有项目没有使用 Excel 为客户构建商业案例的基础。
几乎总是,来自客户的某个人会向你要“数字”(他们可能不会告诉你具体是什么),然后用他们自己的内部预测来更新它。
通常,来自机器模型的数据需要被剥离,然后用财务、工时和各种其他指标进行补充,人们只有在很久以后才知道这些指标是重要的。
我们的大部分工作包括确保电子表格足够简单,便于客户使用,数字足够可靠,便于他们滥用!
#3:微软 Powerpoint
在顾客旅程的某个时刻,你的故事变得更清晰、更干净、更简洁,更有针对性地满足当下的需求。
这几乎总是需要反映在一两页的幻灯片中,用客户的话总结主要优势。
同样,这是一个客户问你的情况,你构建它并发送它,他们改变并将其提交给他们的利益相关者…没有你在房间里。
因此,确保消息传递的质量及其简单性是第一位的。数据科学上的不超载技术废话排第二!
或者,如果感到极度自信,你可以冒险让他们制作自己的幻灯片…
亲爱的读者,你觉得无趣吗?
老实说,如果你几年前问我们,我们会承认我们从来没有想到微软桌面工具会出现在数据科学文章中。
我们希望我们可以吹嘘我们如何巧妙地使用了 Bokeh 或 TensorFlow,或者我们最新的 ML 模型如何适合我们的用途。
但事实是,我们也在可视化、电子表格和幻灯片上花费了大量的时间。这一切都是为了让约定继续下去,并且沟通、沟通、沟通…
“我们不是做咖啡生意的。这是我们作为产品销售的东西,但我们从事的是人的业务——每周雇佣数百名员工,每周服务六千万顾客,这都是人与人之间的联系”——Howard Schulz,星巴克
我们问自己,我们是如何走到这一步的,我们得出的唯一结论是,数据科学工具和概念在很大程度上对我们的客户来说是相对陌生的。他们的输出太原始了…而且无情。
即使技术人员能够理解,工程师自己也很难与开支票的人沟通。
简单中有魔力
我们提到的工具既熟悉又安全…就像婴儿的安全毯。
对这些工具的熟悉有助于客户在他们能够理解和参与的平台上与我们的信息联系起来。
这些工具传达了客户将获得的结果。
引人深思的事
这也有助于我们理解客户的困境,并更好地表达同情。
对我们来说,这是关系建立的基础。
当然,这仅仅是我们的观点。也许我们正在吸着什么。
所以请不要误解我们。这需要时间…和努力…以及更多的时间。商业案例必须有效。他们还是要喜欢你,喜欢你说的话。也不总是以胜利告终。
但是下一次你看到数据科学敲打微软 Office 的时候,有一种更直截了当的回应方式。
(2020 年 2 月)上午 10 点左右,法国阿尔卑斯山雷伯蒂的云层翻滚
数字电视
人工智能将对数字鸿沟产生影响
作为一个以看动画片为生的孩子,当我想到社会的未来时,我想到了飞行汽车和传送到我朋友家(感谢杰特森夫妇)。但是我不知道技术进步会带来不平等、失业和彻底的气候变化等等。15 年后,当我发现自己转向科技行业时,一个令人震惊的现实震撼了我的内心。
经由吉菲的捷成航空公司
虽然技术进步的缺点是众所周知的现象,但我要说的是,只是在过去十年里,公司和政府才开始积极地解决这些问题,特别是有关数字鸿沟的问题。
数字鸿沟:由于不同社会、文化和经济群体之间的不平等而导致的获取技术的不平等;往往由地理位置引起- 社会学词典
然而,焦点主要集中在让互联网更容易访问,或者提高科技公司的多样性和包容性。但是一个更紧迫的因素会加速数字鸿沟,那就是人工智能、 人工智能(通过算法模仿人类智能的系统)的革命,我称之为“数字鸿沟人工智能的概念。
人工智能导致的不平等或歧视
根据埃森哲对 12 个发达国家进行的一项研究,人工智能有能力在 2035 年前将发达国家的年经济增长率翻一番,这让我想知道发展中国家(仍未建立良好的数字基础设施)是否有能力竞争?此外,该领域缺乏技能,这意味着科技巨头在扩张时会渴求人才,这可能导致发展中国家的人才无法与提供的薪酬竞争。据 Github 报道,这一浪潮可能会波及拥有发展最快的开发者群体的非洲。另一方面,这种增长可能为非洲提供一个扩大其数字足迹的机会,我们已经在肯尼亚、尼日利亚和摩洛哥等国家看到了这一点。
Via 石英非洲
医疗保健领域也是一个值得关注的领域,因为目前,顶级人工智能面部识别系统在对少数民族进行分类时仍然有最高的错误,这可能对少数民族患者的疾病早期检测和诊断产生负面影响。 但正如 罗马不是一天建成的,我们也不应该指望算法能做到这一点,然而,只有当科技公司致力于并负责实现数据集多样化时,它们才能得到改善。 因此,如果任何来自谷歌、微软和其他公司的人正在阅读这篇文章,那么请让你的人工智能团队参考 棕色皮肤问题 ,在那里他们可以获得各种肤色的状况图像。
至于教育领域,我相信人工智能将创造奇迹,尤其是在个性化学习领域。但是,随着教育经费变得更加紧张,甚至在一些国家几乎没有教育经费,如果政府不加强并优先考虑教育投资,下一代可能会经历比上一代更严重的教育不平等。
还有许多其他的例子但我试图推动的关键点是,我们需要让科技公司负起责任,并确保政府制定正确的政策,以确保人工智能的好处能够更广泛地惠及大多数人,因为我相信 技术的未来应该是改善人类,而不是少数人。
浓缩咖啡的收益递减
一个更好地了解你的压力的小实验
这个实验始于脸书在一个咖啡小组中关于捣实和敲击的讨论。想法是夯实压缩地面在顶部和底部比中间,这就是为什么应该使用重型夯。所以我设计了一个实验来更好地理解捣固。
小故事:就压缩而言,夯实对顶层的影响大于底层。随着压紧压力的增加,压轮压缩的非线性回报减少。
之前的工作表明,在 5 磅至 20 磅的夯实压力下,提取不会出现变化。我自己的经验是大大降低夯压,但我不知道如何压缩圆盘。我也没能在网上找到很多信息。
所以,我用一根直的透明管子和一个天平来做这个实验,看看地面是如何压缩的。我用 Kompresso 做管子,因为它有一个清晰、直而长的活塞。我把它放在一个可以升到 5 公斤的秤上,我按下去的时候录了一段视频。
我收集了两次,因为第一轮在标记上有些麻烦,但第二轮就好多了。
这两个问题需要解决:
- 夯击如何影响冰球的顶部、中部和底部?
- 什么时候更大的夯击能提供递减的回报?
数据收集
我在试管中每 3 克咖啡后放一张小纸,但我的目标是让纸小一些。我不想让这张纸影响咖啡的压缩。从上面可以看出,将最初的粉末放入管中并没有引起压缩。
我在所需的压力下拍摄样本图像,然后将它们与起始图像对齐。然后我用红线表示起始位置,绿线表示结束位置。
我在 Matlab 中编写了一个简单的脚本来查找图像中红色和绿色线条的位置。
校准和标签
我还想消除相机的偏差,所以我用一把尺子来制作校准图像。然后我用红线标记出来,并用同样的脚本找到红线的位置。然后,我在这些标记上画了一条线,并将每张图片的线位置转换成物理距离。
对于每幅图像,我能够清楚地得到顶部、中部和底部切片的四条线。上面和下面都有咖啡,但我看不到上面,我对使用底部感到怀疑。我最终在分析中使用了三个切片和四条线(用于导出切片)。
柱塞也小于 58 毫米(准确地说是 58.5 毫米)的过滤篮。为了适应,我将每平方英寸的磅数从 Kompresso 管的 0.93 平方英寸缩放到 58 毫米篮子的 4.16 平方英寸。
夯实压力分析
我在这里画出切片高度,然后是标记的高度。我用对数标绘了标记的高度,以显示它们的对数趋势。这意味着,要获得相同的高度变化或压缩,所需的力呈指数增长。
数据中有一些噪音,但趋势非常明显。当看一个线形图时,我们可以看到趋势是底部不像顶部和中部那样压缩。我们可以看看相对于 59 磅达到的最大压缩的压缩百分比。
最上面的压缩大部分在前 6 磅,中间的压缩最慢。这是有道理的,因为当你压缩地面时,底部地面上会有一个大小相等方向相反的反作用力。从绝对值来看,底部被压缩得更少。这可能是由于在放入研磨料时纸标记移动了。如果一组地面是有色的,另一组不是,这个实验会进行得更好。我在这里的目的是得到一个快速的实验,看看它能告诉我什么关于捣固。
比较切片
我们可以使用切片压缩百分比来比较不同的切片。我做了如下所示的压缩比。顶/底比最初是最高的,这似乎有点明显。
仔细观察,顶部/中部和顶部/底部似乎持平,而中部/底部保持在 1 以下,这意味着底部比中部压缩得更多。
专注于线条标记
如果我们观察线条标记移动的量占其总移动量或压缩量的百分比,我们可以在中间看到更多一点。中顶和中底趋势相同。当比较一层和下一层时,它们的比例接近 1:1。然而,当观察不同的线与底线时,所有层都比底部压缩得快,直到 15 磅。那么它们都相当接近(在 20%以内)它们的最大压缩位置。
收益递减
如果我们看一下冰球的总高度,收益递减的概念就很清楚了。80%的压缩发生在 3 磅的压力下。达到 90%的压缩率需要 20 磅,然后达到 100%的压缩率需要 50 多磅。50%的压缩发生在最初的 1 磅压力中。
我无法让它压缩超过这一点,我无法用这种秤测量超过 13 磅的压力,或者相当于一个 58 毫米的篮子超过 60 磅的夯锤。然而,我怀疑做一个 60 磅的夯锤能有多大的不同。之前关于夯压的实验显示,当比较 10 磅夯压和 40 磅夯压时,提取没有差异。虽然他们没有低于 10 磅,所以还不清楚。
在我自己的实验中,我已经把我的夯压降低到 1 磅或更少。
作为这个实验的结果,可以设计一个更好的实验:
- 使用两种不同颜色的咖啡渣
- 以 2g 为增量分层
- 看压缩的程度。
我很满意现在对我们的两个问题有了更好的理解:
1.夯击如何影响冰球的顶部、中部和底部?
即使在非常高的压力下也不均匀。
2.什么时候更大的夯击能提供递减的回报?
在 2 磅到 3 磅的压力下,压力增加了 20%,相比之下,在 3 磅到 20 磅或者 20 磅到 59 磅之间,压力增加了 10%。这意味着大多数重于 3 磅的夯锤应该是相似的,一个巨大的夯锤可能不值得它对击球的任何影响。
如果你愿意,可以在 Twitter 和 YouTube 上关注我,我会在那里发布不同机器上的浓缩咖啡视频和浓缩咖啡相关的东西。你也可以在 LinkedIn 上找到我。
我的进一步阅读:
被盗浓缩咖啡机的故事
人工智能对可持续增长的直接和间接影响
人工智能(AI)的传播正在对社会产生重大影响,改变着我们工作、生活和交流的方式。今天的人工智能允许世界诊断疾病和开发临床路径。它还被用来将个人技能与工作机会相匹配,并创造智能交通,从而减少污染。在地球和组织的可持续发展中,有许多应用人工智能技术的例子。
是时候用人工智能等新兴技术解决一些世界上最大的问题了。
人工智能应该为地球工作,而不是反对它。
据联合国称,有 17 个可持续发展目标(SDG)来改变我们的世界:
来源:关于可持续发展目标
17 个目标中有许多直接适用于环境和人类对环境的影响。
我们是影响可持续发展的人或组织的一部分吗?简单的回答是肯定的。
我坚信,对可持续增长存在几种类型的影响:直接影响和间接影响。影响的类型可以应用于一个组织及其产品/解决方案,也可以应用于一系列组织。
让我们看看第一个例子——Waze
成千上万的人使用 Waze 寻找最佳路线。也许你甚至没有想到这一点,但当你使用 Waze 时,你正在成为可持续发展的一部分。Waze 不仅仅是为了提高安全性、减少拥堵和优化交通流量,还为了减少污染。当我开始思考 Waze 和它们的影响时,我想到,好吧,如果我开的是柴油车,那么 Waze 会引导我去拥堵较少的道路。因此,我不会产生太多的污染,因为我会避免交通堵塞。
但是如果我开的是电动车呢?我不是可持续发展的一部分吗?答案是——不,我是它的一部分!同样,如果 Waze 可以帮助我避免交通堵塞,我将在车辆较少的道路上行驶,因此我的车辆不会造成更严重的交通堵塞。这是我对可持续增长的间接影响。我能做到这一点多亏了 Waze 和 AI 技术。
另一个例子——太阳能电池板
随着物联网传感器连接到太阳能工厂,公司有机会收集用于机器学习监控和预测的数据。应用人工智能技术的一些好处是远程站点检查、预测性维护和能源预测。因此,为使用太阳能电池板的公司开发机器学习模型的 XYZ 公司对可持续发展产生了直接影响。
如果我们深入了解一下,我们可以假设 XYZ 公司正在使用企业软件,例如 SAP。因此,SAP 通过向 XYZ 公司提供 ERP 解决方案,对整体可持续增长产生了间接影响,因为它允许 XYZ 公司处理所有业务流程,例如会计、销售、人力资源、项目等。
即使你是一名会计师,或是为其他制造电动汽车的组织生产半成品的组织的人力资源主管,你也在对可持续增长产生间接影响。
直接和间接人工智能影响
基于上面的例子,我们可以将人工智能解决方案分为两类——那些产生直接影响的和那些产生间接影响的。
人工智能公司对气候变化的直接影响的好例子可能是微软、Agder Energi 和 Powel AS 。他们创造了一个更有效、更灵活、更自主的电网,这将使节能和更舒适的可再生能源融入电网组合。
有间接影响的 AI 公司。很难衡量人工智能公司对可持续增长的间接影响。但是我们可以大胆地说,例如,RPA 解决方案正在使任何行业的流程自动化。通过这项技术,组织可以降低运营成本并提高效率,这当然会影响可持续的增长链。
此外,在人工智能领域有很多公司,使用自然语言处理和机器学习模型来建立虚拟员工助理。到 2021 年, Gartner 预测,25%的数字工作者将每天使用虚拟员工助理(VEA)。这意味着人工智能技术及其间接影响将在提高人们的生产力方面发挥巨大作用。因此,人们将有更多的时间进行创新和可持续发展。
如果我们了解我们对可持续增长和人工智能技术能力的影响,我们就可以专注于重要的事情,并取得更好的结果。
建议
对于公司
组织在定义其技术战略时,应考虑人工智能对可持续发展成果和增长的影响。这两种类型的人工智能解决方案都会对组织的效率产生重大影响。具有直接影响的人工智能解决方案可以提供短期效益,而具有间接影响的人工智能解决方案将提供长期效益。
针对科技公司
科技公司意识到了自己在可持续增长中的作用,在创造核心产品和服务的同时,它们也在努力加速可持续增长。例如,AWS 推出了“小时代码计划,数百万学生可以迈出编码的第一步,创造新的解决方案,获得更好的工作。
另一个例子是微软启动了“ AI for Earth ”计划。该计划是微软加速可持续发展愿景的一部分,通过该计划,您可以获得新知识、资助、云计算、人工智能服务等更多内容。
每个大公司都有责任开始在可持续增长方面有所作为。
面向投资者
所有类型的投资者都应该扩大他们对解决可持续性挑战的公司的投资组合,包括直接影响和间接影响。这种投资可以加快可持续增长技术投资的转型影响和商业机会。
问候,
安德里·鲁楚克
冠状病毒的多米诺效应
新冠肺炎如何对我们的经济产生负面影响以及可能的解决方案
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
瑞安·昆塔尔在 Unsplash 拍摄的照片
在全球传播的新疫情病毒感染人数将很快达到 50 万。到目前为止,它已经导致近 20,000 人死亡,并使世界经济陷入前所未有的停滞。
世界各地的企业都在努力削减成本,希望在这场疫情中幸存下来。股票市场暴跌,从而影响了投资、养老基金和个人储蓄。一些最著名的股票几十年来都没有出现过类似的跌幅。当然,这对于谨慎投资的投资者有着巨大的影响。对市场失去信任,阻碍经济增长。
世界各国政府都在竞相颁布新的旨在保护就业的法令和立法。他们试图避免的情况之一是失业率上升,因为它会自动影响国家的生产力,增加社会支出。银行也需要发挥自己的作用,事实上,几家央行正在干预降息,从而降低借贷成本,鼓励消费,并向经济中注入一些现金。
在所有行业中,旅游业受到的影响最大。在一次史无前例的行动中,世界各国政府引入了旅行限制来试图控制病毒。这一措施导致定期航班中断,随后取消了商务或度假旅行。这种情况的影响是毁灭性的,因为旅馆、旅游经营者和那些直接参与旅游业的人不得不被迫停止工作。还有许多支持部门(食品工业、清洁服务和其他部门)都直接受此影响。
这些限制最终会造成流动性问题。人们没有钱花,宁愿把他们仅有的一点钱存起来买必需品。由于社交距离,他们不得不呆在家里,这一事实也让企业措手不及。他们中的许多人没有合适的电子商务网站,并且发现很难为他们的客户服务。对他们来说幸运的是,社交媒体网站促进了在线销售;然而,他们不是适当的电子商务网站的对手。
这种情况应该让许多人大开眼界。许多公司向网上转移的阻力很大。现在他们别无选择,唯一的救命稻草就是网络世界。拒绝送货的大餐馆现在正匆忙组织起来。即使是小文具店也在竭尽全力继续为客户服务。因此,这场全球危机创造了一种新的需求,如果企业想要生存,就必须走出自己的舒适区。
工厂也在经历减速。由于物流限制和成本快速增加,原材料的采购变得越来越困难。考虑到各国估计未来几个月大约 70%的人口会生病,这可能会损害这些工厂的生产,我们将经历自然的放缓。最后,由于人们购买量减少,对某些商品的需求也在下降。
尽管这是一场前所未有的危机,其规模仍难以确定,但快速回顾一下过去的事件将会揭示具体的趋势。最明显的是,最有可能的是,世界正走向全球性衰退。
在 Unsplash 上由 Charlota Blunarova 拍摄的照片
然而,并非一切都是悲观的。这一次有些不同。大多数人可以舒适地生活在网络世界。娱乐、教育和许多服务可以轻松地迁移到网上。这种技术是可以获得的,而且在大多数情况下,使用起来是免费的或者非常便宜。如果零售商和餐馆没有网站,他们可以通过社交媒体继续销售。因此,经济的一部分仍能继续运转。许多其他行业无法迁移到网上,但现在是考虑他们的部分业务是否可以自动化的时候了。今天,人工智能可以创造奇迹。我们有由机器人操作的整个工厂,由无人机或自动驾驶汽车执行的交付,这样的例子不胜枚举。此外,随着虚拟或增强现实耳机等技术的兴起,我们可以让操作员在家中舒适地运行这些机器。可能性是无限的。
如果让我打个赌,我会说今天的疫情只是未来的许多之一。比尔·盖茨早在 2015 年就已经做出了这个预测。无可争议的是,我们还没有准备好处理这种情况。所以,让我们利用这段时间来计划下一次。建立电子商务网站,安装帮助我们的人工智能系统,让远程工作成为一种标准做法,而不是一种例外,当下一个疫情到来时,在可能的情况下,一切将照常进行。
这篇文章最初发表于 https://www.businesstoday.com.mt请在下面留下你的想法,如果你喜欢这篇文章,请随时关注我🐦推特,🔗 LinkedIn 或者😊脸书
Alexei DingliProf 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他出版了几本同行评审的出版物,并且是马耳他的成员。由马耳他政府成立的人工智能工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。****
归纳法的该做与不该做
来源:乔纳斯·雅各布松
处理缺失数据的好方法
缺少数据是一个问题,在用于教程的数据集中通常不存在,但在现实生活中几乎总是存在。在现实生活中,数据被认为是杂乱的,有错误,并呈现缺失的信息。这可能是因为字段不适用于该记录,例如用户没有备用电话号码,或者是因为数据收集过程中的问题。通常的情况是,特别是在调查中,人们没有完成所有的字段,导致数据不一致。
何必呢?
缺失会导致问题,不仅因为数据不能代表实际人口的信息,还因为许多算法不能处理缺失数据。例如, Sklearn 中的大多数算法仍然无法处理包含空值的数据。
怎么办?
改进数据收集过程
很多时候这是不可能的,但是如果可以的话,确保你有一个可靠的数据收集过程。例如,当处理表单时,这意味着发送带有必填字段而不是普通字段的谷歌表单,以及下拉项目而不是自由文本框。
使用“自由文本”框获取用户答案的表单示例。在这种情况下,由于不需要答案,用户可以在此过程中创建空值。
与上述选项相同,但标记为“必需”。这样做(几乎)消除了空值的可能性。此外,通过“自由文本”选项,用户获得了更高程度的灵活性,但可以输入任何可能的值。聚集诸如“黑色”、“黑色”和相同答案的拼写错误版本的值变得困难。
使用“多项选择”输入用户输入的“必需”表单示例。在这种情况下,用户需要输入一个值,并且只限于几个选项,一旦收集到调查结果,这些选项很容易分析。
使用插补
插补是用特定值填充特征缺失条目的过程。例如,这可以是使用机器学习算法的列的平均值、其中值、零或更复杂的方法。
插补对数据影响的一个简单例子。
在深入研究插补的最佳实践之前,让我们先关注一下不要做什么。
不要做什么?
有些被吹捧为良好做法的做法并不完全如此。
平均插补
例如,一种方法是使用均值插补或任何其他插补方法,即用固定值填充数据。这是一个快速简单的解决方案,在“让模型运行”方面很有效。然而,通过这样做,我们极大地修改了数据集的方差,改变了数据的底层分布。让我们看一个例子:
应用于特征 2 的均值插补改变了数据的基本分布,从而改变了数据集的可变性(标准差从 234 到 206)。
此外,均值插补不考虑特征之间的相关性。事实上,该算法在要素级别工作,只考虑属于该列的信息,而不是整个数据集。
零插补
零插补是另一种解决方案,通常用于简单地允许模型运行,但实际上是一种要避免的解决方案。这种技术有许多缺点。首先,它会使总体向 0 倾斜,从而改变底层数据集的分布。此外,它还突出了均值插补的问题,包括缺乏对特征相关性的深入了解。
用零输入特征 2 使特征的平均值更接近于零(平均值从 513 到 403)。
最后,对于某些变量来说,缺失和零意味着截然不同的两件事。例如,当考虑以米为单位的特征“高度”时,输入缺失值可能会产生误导,因为高度值等于零可能意味着缺失和条目高度小于一米。
删除缺少值的行
另一个通常非常容易执行的解决方案是删除所有受缺失值影响的行。这包括删除至少有一个单元格包含空值的每一行。尽管在使算法工作方面是有效的,但是这种解决方案倾向于大大减少观察的数量。
删除特性 2 中的空值条目会导致很大一部分行被删除。
在大多数情况下,具有缺失值的观察值的数量非常大,以至于将它们全部移除会导致观察值的数量相对较少。此外,这种方法会引起偏见方面的问题。由于固有的数据特征,移除至少具有缺失值的所有观测值会引入偏差。例如,删除电话号码特征为空的所有条目可能导致删除由买不起电话的人组成的所有条目。
归罪
回归插补
这种类型的插补旨在使用其余数据填补特定列的缺失值。特别是,它使用回归模型来使用除要估算的特征之外的所有数据来推断该特定列的缺失值。使用在目标列中具有值的特征来执行模型的训练。然后,通过每个特征重复该方法,直到数据被完全估算。
KNN 插补
KNN 插补是一种使用 K-最近邻算法在记录间寻找相似性的技术。它的工作原理是在一个 n 维空间上绘制代表每个记录的向量,其中 n 是特征的数量。使用预定义的距离度量,两个向量越接近,样本就越相似。KNN 插补使用关于 K 个相邻样本的信息来填充我们正在考虑的样本的缺失信息。
这项技术对于大多数现实生活中的应用程序来说都是一个很好的解决方案,并且是一种相对可靠的方法。
链式方程多元插补(小鼠)
MICE 的工作方式是迭代回归每个特征,使用其余特征推断缺失值,并多次重复这一过程。特别是,MICE 算法的工作原理如下:
- 对所有特征执行简单类型的插补,例如均值插补
- 要素的值被重新设置为缺失。
- 使用插补模型中的其他变量对步骤 2 中目标变量的观察值进行回归。
- 此栏中缺失的值将由回归模型中的预测值(插补值)替换。
- 对每个丢失数据的变量重复步骤 2 到 4。
- 重复步骤 2 到 4 若干个周期,在每个周期更新估算值。
摘要
总的来说,我们讨论了丢失数据的注意事项。
尽量避免:
- 平均插补
- 零插补
- 删除丢失的值
试使用:
- 回归插补
- KNN 插补
- 老鼠归罪
如果您可以访问数据收集流程,也要确保开发足够健壮的流程,以阻止用户生成缺失值。
想看更多这样的文章,关注我的Twitter,LinkedIn或者我的 网站 。
免费部署 Dash 应用程序的最简单方法
您是否开发了一个在本地运行的 Dash 应用程序,现在想与全世界分享它?让我们看看如何在服务器上免费部署 Python web 应用程序,这样任何人都可以通过链接访问它。
由作者编辑的 Clément H 在 Unsplash 上的照片。
在这篇文章中,我们将看看如何发布一个 Dash 应用程序:首先,我们将简要介绍 Dash(解释 Dash 应用程序的开发不在这篇文章的范围之内)。其次,我们将看到如何使用 pythonanywhere 建立一个 web 应用程序。最后,我们将介绍如何让您的 Dash 应用程序全天候运行,并通过一个链接使其可用。
Dash 是什么
Dash 是用于构建 web 应用程序的 Python 框架,使您能够使用纯 Python 构建仪表板。Dash 是开源的,它的应用运行在网络浏览器上。
Dash 项目通常具有以下结构:
- app . py:Python 主 app。
- assets 文件夹:包含字体、图像和 CSS 的资源。
- 数据文件夹:包含应用程序使用的数据文件。
如何发布您的 Dash 应用
一旦你建立了你的 Dash 应用程序,让我们开始如何与世界分享它吧!🌍
设置 web 应用程序🔧
通过创建一个初级账户来注册pythonanywhere.com。
在顶栏上,转到 Web > 添加新的 Web 应用程序:
- 点击下一个的。
- 选择 Flask 作为 Python Web 框架。
- 选择你用开发 app 的 Python 版本。
您可以通过在 Python 中运行以下代码来检查计算机上的 Python 版本:
import sys
print(sys.version)
4.保留默认路径,点击下一步。
现在,您的 web 应用程序已设置完毕,可以通过 web 仪表盘中的链接进行访问:
当您进入时,您将看到默认应用程序,我们现在将使用 Dash 应用程序替换它。
👉重要事项:这是任何人都可以访问您的 web 应用程序的链接。
上传您的文件📤
在顶栏上,转到文件,在目录侧栏中,点击mysite/
。在里面,您会发现一个名为flask_app.py
的文件。此文件包含当前作为您的 web 应用程序运行的默认代码。你可以直接删除这个文件。
现在你可以开始上传你自己项目的文件了。通过创建新文件夹并上传文件,您应该能够重新创建与本地计算机中相同的文件结构。
创建新文件夹。
一旦你上传了所有的文件,你应该在mysite/
文件夹中有这样的东西。确保app.py
(主 dash 应用文件)不在任何其他文件夹中。
👉注意:如果你的应用程序需要访问其他文件夹中的数据,一旦你上传了必要的文件,记得更改app.py
中的路径。你只需点击文件打开它来替换路径。例如,如果我想访问data/
文件夹中的一个文件,新路径将是/home/user_name/mysite/data/file.csv
。
安装依赖项🎒
在顶栏上,转到控制台。在这里,您将找到 Bash 控制台、,这是您在计算机中常见的终端,以及 Python 控制台。
进入 Bash 控制台,安装应用程序正常运行所需的任何 Python 依赖项。
👉快速提示:尝试在您的计算机上安装相同的库版本,以确保不会出现任何意外错误。
最后一档🏁
在顶栏上,转到 Web 并在代码部分打开 WSGI 配置文件。
你会看到一行写着:
from flask_app import app as application
你要把它替换成:
from app import app
application = app.server
单击保存,然后在 Web 选项卡中单击重新加载以使用新文件更新应用程序。
恭喜你。🥳现在任何人都可以访问链接[your-username].pythonanywhere.com
使用你的应用🎉🎉🎉
如果您看到任何错误,您可以随时检查错误日志文件。您可以在 Web 选项卡的日志文件部分中找到它。
如果你正在读这篇文章,感谢你的时间,我真的希望你能从这篇文章中得到一些价值😊
下一集再见!🚀
(附:如果有什么不清楚的地方,我很乐意帮忙🤓)
使用 Python 下载 YouTube 视频的最简单方法
来源: Unsplash
以及如何使用自定义类将帧提取为图像
在我的第一篇关于 Medium 的文章中,我展示了如何训练一个卷积神经网络来分类来自旧 GameBoy 游戏——Mario 和 Wario 的图像。一年多后,我想重温这个过程的一个方面——从 YouTube 视频下载视频(可能还有音频),并提取帧作为图像。我们可以将这样的图像用于各种机器学习项目。
设置
在我之前的文章中,我使用了一个名为pytube
的库来下载视频。然而,在 YouTube 引入一些变化后,它不再真正可用——任何下载视频的尝试都会导致KeyError: ‘url_encoded_fmt_stream_map’
。此外,图书馆不再得到积极维护。
这就是为什么在这篇文章中我建议使用pytube3
,它是原始pytube
库的一个分支,并且已经修复了错误(它只适用于 Python 3)。原始库的所有功能都被保留,我们实际上仍然使用import pytube
来导入库(即使我们使用pip install pytube3
来安装它)。
下面我给出了本文所需的所有导入的列表:
from pytube import YouTube# misc
import os
import shutil
import math
import datetime# plots
import matplotlib.pyplot as plt
%matplotlib inline# image operation
import cv2
下载视频
在这一部分,我将介绍如何使用 Python 下载 YouTube 视频。我将使用 GameBoy 的一款经典视频游戏—Mega Man:Wily 博士的复仇。第一步是使用我们想要下载的视频的链接创建一个YouTube
类的实例。
video = YouTube('https://www.youtube.com/watch?v=NqC_1GuY3dw')
使用这个对象,我们可以下载视频/音频,并检查视频本身的一些属性。我们可以使用的一些有趣的方法有:
length
—以秒为单位的视频长度rating
—视频的分级views
—视图的数量
下一步是使用streams
方法检查可用的流。我们可以用all
方法来链接它,以查看所有可用的流。
video.streams.all()
运行该行代码将返回以下媒体格式列表:
关于媒体格式和流处理选项的更深入的描述,我在这里参考pytube
的可用文档。
让我们使用过滤方法将所有可用的流缩小到 mp4 文件:
video.streams.filter(*file_extension* = "mp4").all()
运行该代码会导致以下选择:
在这种情况下,我们将使用第一个可用的选项,即 360p(分辨率)的选项。为了下载视频,我们首先通过使用itag
来指示我们想要下载的视频,然后使用download
方法来下载文件。下载视频的完整代码如下:
video.streams.get_by_itag(18).download()
在download
方法中,我们还可以指定视频的目的路径。默认值是当前目录。
从视频中提取帧
我创建了一个名为FrameExtractor
的特殊类——顾名思义——从视频中提取单个帧并保存为图像。该类定义如下:
在实例化FrameExtractor
类的对象时,我们需要提供我们想要处理的视频的路径。在__init__
方法中,我们还提取了视频的一些特征,如总帧数和每秒帧数(FPS)。一般来说,该类提供了从视频中提取每第 x 帧的功能,因为任何两个相邻帧之间的差异将是最小的。我们还提供了一些方便的方法。所有方法描述如下:
get_video_duration
—打印视频的持续时间get_n_images
—打印每隔 x 帧提取的图像数量(由every_x_frame
表示)extract_frames
—这是该类的主要方法,用于提取图像。最起码要提供every_x_frame
的值和图像的名称(表示序列的数字会自动添加到名称的末尾)。默认情况下,图像将保存在当前目录中。我们还可以提供一个到所需目录的路径(dest_path
),如果它不存在,就会为我们创建一个。我们还可以指定图像文件的格式,默认是 JPG。
现在是实际使用该类的时候了。我们从实例化FrameExtractor
类的对象开始:
fe = FrameExtractor('Game Boy Longplay [009] Mega Man Dr Wilys Revenge.mp4')
接下来,我们调查视频的长度:
fe.get_video_duration()
# Duration: 0:39:48.333333
举个例子,假设我们想每隔 1000 帧提取一次。为了计算使用此设置提取的图像数量,我们运行:
fe.get_n_images(every_x_frame=1000)
# Extracting every 1000 (nd/rd/th) frame would result in 71 images.
最后一步,我们提取图像:
fe.extract_frames(every_x_frame=1000,
img_name='megaman',
dest_path='megaman_images')# Created the following directory: megaman_images
在使用extract_frames
方法之前,指定的目录并不存在,所以它是自动创建的,我们看到了一个打印的声明来确认这一点。
最后,我们定义了一个查看下载图像的简短函数:
def show_image(path):
image = cv2.imread(path)
plt.imshow(image)
plt.show()show_image('megaman_images/megaman_61.jpg')
运行该代码会导致显示下图:
图片来自接近比赛结束的时候:)
结论
在本文中,我描述了如何使用pytube3
库从 YouTube 下载视频,并编写了一个自定义类,用于从下载的视频中提取帧作为图像。对该类的一个潜在修改是考虑到跳过视频的第一个 n 秒,因为开头通常包含标题屏幕、公司徽标等。在视频的结尾也可以这样做。然而,就目前而言,我们也可以通过手动删除对我们没有用处的图像来解决这个问题。
你可以在我的 GitHub 上找到本文使用的代码。一如既往,我们欢迎任何建设性的反馈。你可以在推特上或者评论里联系我。
喜欢这篇文章吗?成为一个媒介成员,通过无限制的阅读继续学习。如果你使用这个链接成为会员,你将支持我,不需要你额外付费。提前感谢,再见!
我最近出版了一本关于使用 Python 解决金融领域实际任务的书。如果你有兴趣,我在贴了一篇文章介绍这本书的内容。你可以在亚马逊或者 Packt 的网站上买到这本书。
解释聚类结果的最简单方法
用函数调用描述集群
你以前使用过聚类方法吗?对你来说最困难的部分是什么?通常,我通过以下步骤进行聚类:缩放输入要素、降维,并选择一种可以对数据执行良好的聚类算法。这些步骤很标准,对吧?但是,问题摆在面前:理解聚类结果。
理解或解释聚类结果通常需要时间。我们做一些统计分析和可视化来比较集群。如果我们改变降维或聚类方法,聚类将会改变,我们需要重新进行分析。解释聚类结果成为阻碍我们快速迭代整个过程的瓶颈。
我对聚类结果的初步解读就像调用一个函数 **cluster_report(features, clustering_result)**
一样简单。在接下来的部分,我将给出一个集群的例子和cluster_report
的结果。如果你想跳过这个例子,你可以滚动到这篇文章的底部来获得代码和 Google Collab 笔记本。
示例:葡萄酒聚类
让我们以 Scikit 的葡萄酒数据集为例。这个数据集有 13 个数字特征和一个指示葡萄酒类型的标签。以下是数据样本。
首先,我们需要将数据标准化,以防止由更大规模的特征主导的聚类。在这种情况下,我们使用零均值和单位方差标准化。之后,我们使用 PCA(主成分分析)将维数从 13 个特征减少到 2 个特征/主成分。
我们在这个例子中使用 KMeans 集群,因为我们大多数人都知道它。为了确定 k 均值聚类的聚类数,我们使用了肘方法,并得到 k=3 为最佳值。
在两个主成分上使用 k=3 的 k 均值,我们得到下面的聚类结果。左侧散点图显示的是原始标签。右边的散点图显示了聚类结果。
获得聚类结果后,我们需要解释聚类。描述集群最简单的方法是使用一组规则。我们可以使用原始特征和聚类结果作为标签,通过训练决策树模型来自动生成规则。我写了一个cluster_report
函数,包装决策树训练和从树中提取规则。你可以简单地调用 **cluster_report**
来描述集群。很简单,对吧?
有两个参数我们可以调整:min_samples_leaf
和pruning_level
。这些参数控制着决策树的复杂性。为了得到更一般的规则,我们可以增加min_samples_leaf
或pruning_level
的值。否则,如果我们想得到更详细的规则,我们可以减小min_samples_leaf
或pruning_level
的值。
括号中的数字表示满足规则的class_name
的比例。例如,**[0.880]** (proline > 755.0)
意味着对于满足(proline > 775.0)
规则的所有实例,它们中的 88%在聚类 1 中。
代码
您可以查看并运行我用来生成示例的代码:
网上搜集文章的简单方法
文章刮刀截图由安德鲁贝里
在我的朋友 newspaper3k 插件的一点帮助下,我们可以将来自不同新闻媒体的文章语料库放入熊猫数据框架。
前几天,我在做一个项目,需要我在网上搜集一堆新闻文章。我了解自己,我想找出最简单快捷的方法来完成这个任务。
有一些著名的 python 插件可以帮我完成这项工作,其中一个是 BeautifulSoup 。这是一个很棒的插件,但是我不想深入了解每个在线新闻平台独特的 html 结构。
通过大量的谷歌搜索,我确实找到了解决问题的简单方法。我找到了报社 3k !
在本教程中,我将向你展示如何快速地将来自不同新闻媒体的大量新闻文章整合到一个简单的 python 脚本中。
如何使用 Newspaper3k 抓取网上文章
首先,我们需要将 python 插件安装到您的环境中。
专业提示:创建另一个虚拟 python 环境,这被认为是最佳实践。
$ pip install newspaper3k
基础知识
高级:从一个新闻网站下载多篇文章
当我抓取一堆新闻文章时,我想从一个新闻网站抓取一堆文章,然后把所有的东西放在一个熊猫数据框架中,这样我就可以把数据导出到一个中。csv 文件。在这个插件的帮助下做起来其实挺简单的。
….这就对了。你就是这样轻松刮出一堆文章的。
使用上面的代码,您可以实现一个 for 循环,来循环访问一堆报纸源。创建一个巨大的最终数据框架,你可以导出它,然后用它来玩。
发烧友:多线程网页抓取
然而,我上面提出的解决方案对某些人来说可能有点慢,因为它一篇接一篇地下载每篇文章。如果你有很多新闻来源,这可能会有点费时。然而,有一种方法可以加速这一切。我们可以在多线程技术的帮助下做到这一点。
注意:在下面的代码中,我实现了每个源的下载限制。在运行这个脚本时,您可能想去掉它。限制 was 的实现是为了让用户在运行时测试他们的代码。
我喜欢边做边学,所以我建议任何阅读本书的人去玩上面的代码。从这里开始,你现在可以使用 newspaper3k 来抓取文章。快乐的网页抓取!
注意事项:
注意:从每个在线新闻渠道抓取大量文章的成功因渠道而异。
注意:Newspaper3k 的多线程特性有时会出错。取决于新闻渠道。网络抓取文章每个新闻出口使用。构建功能是最可靠的。
然而,在大多数情况下,它工作得很好!
一定要看看我的其他网页抓取媒体帖子。
[## 如何从《纽约时报》的任何一篇文章中收集对熊猫数据框架的评论
《纽约时报》( NYT)最精彩的部分是他们对文章积极且高度节制的评论部分。
towardsdatascience.com](/how-to-collect-comments-from-any-new-york-times-article-to-a-pandas-dataframe-a595ec6a1ddf)
参考
[1] Newspaper3k:文章搜集与整理文档,https://newspaper.readthedocs.io/en/latest/
皇家战役游戏的潮起潮落:通过漂亮的图表吸取更少的指南
Hugo Jehanne 在 Unsplash 上拍摄的照片
隔离时代的策略、生存和安置模式
没有什么比流行病更能让我们粘在屏幕上了。在冠状病毒引发的隔离期间,游戏开发商 Infinity Ward 为《使命召唤:现代战争》(Call of Duty:Modern war)发布了一款名为 Warzone 的皇家战役(Battle Royale)游戏模式,这是一款拥有5000 万玩家数量的游戏。在封锁期间,我一直在和一些朋友一起玩,我想知道我们可以在 s̶t̶o̶p̶̶b̶e̶i̶n̶g̶̶b̶l̶i̶n̶d̶s̶i̶d̶e̶d̶̶a̶n̶d̶̶c̶o̶n̶s̶i̶s̶t̶e̶n̶t̶l̶y̶̶m̶o̶w̶e̶d̶̶d̶o̶w̶n̶̶i̶n̶̶o̶u̶r̶̶r̶u̶s̶h̶̶t̶o̶̶g̶e̶t̶̶t̶o̶̶t̶h̶e̶̶s̶a̶f̶e̶̶z̶o̶n̶e̶̶t̶o̶w̶a̶r̶d̶s̶̶t̶h̶e̶̶e̶n̶d̶̶o̶f̶̶e̶a̶c̶h̶̶m̶a̶t̶c̶h̶的游戏中做些什么样的改变来提高整体水平。
我没有找到任何关于 Warzone 的数据,但我找到了 PUBG 的大量数据,这是一款与 Warzone 共享大部分机制的 BR 游戏,事实上,可以被视为后者的前身。
我随后使用 Seaborn 进行的分析确实为我提供了游戏技巧,但它基本上变成了一种数据驱动的视角,审视玩家在游戏中的一般行为,以及这种行为如何与他们的生存和获胜机会相关联。
如果你想了解获胜的玩家在做什么,或者为什么你的另一半会花几个小时玩这些游戏,并通过赞美它们的复杂性和对策略的需求来证明这一点,请继续阅读。
BR 游戏的简短入门:
50-100 名玩家,不管是单独游戏还是团队游戏,都被空投到一个大地图上,没有任何武器或装备。游戏的目的是从地图上收集这些物品,并成为最后一个杀死对手的人/队。
“安全区”的机制确保比赛继续进行。安全区是圆形的,随着时间的推移逐渐缩小。如果玩家被抓到这个安全区域之外,他们很快就会死亡。通过这种方式,幸存的玩家最终会在游戏结束时被赶到一个很小的安全区域,在那里他们别无选择,只能互相残杀。
本页上的第五张图片对安全区技工来说是一个很好的视觉指南。
安全区的每个增量 a)是随机决定的,但 b)是前一个增量的子集,因此有一个可控的不可预测性的元素,使游戏和策略有点独特。
数据和代码
我感谢用户 KP 搜集原始数据并在 Kaggle 上提供。我会让他们介绍数据集:
“这个数据集提供了两个 zip:聚合和死亡。
- 在“死亡”中,文件记录了在 72 万场比赛中发生的每一起死亡事件。也就是说,每一行记录了一个玩家在比赛中死亡的事件。
- 在“aggregate”中,每场比赛的元信息和球员统计数据被汇总(由 pubg 提供)。它包括各种综合统计数据,如玩家死亡、伤害、步行距离等,以及比赛本身的元数据,如队列大小、fpp/tpp、日期等。"
因为有如此多的数据,我在一些地方使用了微小的(1%)随机样本,以便更清晰地可视化。我把我的发现分成三类:1)生存和位置,2)地点,3)武器和杀戮。最后,所有的功能工程、争论和可视化代码都可以在我的 Github 的 Jupyter 笔记本上找到。
生存和安置
永恒的争论:露营还是不露营?
BR 游戏中的游戏风格可以不完全分为两类:I)露营,玩家/团队隐藏在有利的位置,等待对方玩家杀死对方,只有当敌人接近他们时才参与;ii)侵略,玩家不会在一个位置停留很长时间,可能会主动寻找敌人。
Giorgio Trovato 在 Unsplash 上拍摄的照片
因为这是描述性分析,不是实验,所以不能推断因果关系。这篇文章中的每一个分析和图表都是如此;都是我自己的解读。这可能是一个虚假的变量负责的关系或因果关系的方向是相反的。
不管怎样,不躲避敌人的攻击肯定会带来更好的游戏效果:
我是 FiveThirtyEight 的无耻粉丝
这个图表显示了平均存活时间和平均位置,每一个数值都代表了玩家个人的杀戮次数。
换句话说,每一个在比赛中杀死两个敌人的玩家都活了下来,无论是独自一人还是在团队中,平均时间超过 1000 秒。此外,他们的平均排名在 10 位左右。这项措施表明,更好的球员不会简单地等待对方球员杀死对方,然后与剩下的人交战。
但是野营的玩家有没有可能在他们有利的位置上被保护起来的时候简单的干掉敌人呢?
我们可以从另一个角度来回答这个问题,这个角度也许更准确地抓住了露营的本质:运动
更拥挤的数据用不同的颜色表示
有一个弱到中等的线性关系,其中数据被涂上水手蓝。
有趣的是,有很多这样的例子,球队/球员移动不多,但始终排名在 15 到 30 之间。然而,随着位置的进一步提高,移动的距离不可否认地增加了。
停留在一个地方可能:I)招致一波又一波的敌人,因为他们可能已经发现了你的确切位置;或者 ii)在游戏中,安全区域会像这样变化,这对游戏没有好处。
因此,不完美的答案是,虽然露营可以让你走得很远,但如果你不像一个沙发土豆那样玩耍,你更有可能走完全程。
这又引出了另一个问题。
什么是你能成为的最和平主义者,并且仍然有很大的胜算?
露营并不完全等同于和平主义,但我想知道一个人能杀死几个敌人,并且仍然有相当大的机会成为最后一个站着的人。
让我们看看所有赢得比赛的玩家,以及他们杀死了多少玩家:
这个小提琴图的宽度显示了获胜玩家获得不同杀死数量的分布
50%的赢家杀死 4 到 8 个玩家,而任何超过 14 个的玩家都被认为是非常极端的。
这似乎是这两种打法的理想组合。
位置
Erangel 有哪些最致命的口袋?
Erangel 是提供数据的两个地图之一,据公共公报称,面积为 8 公里×8 公里。以下是 Erangel 上大多数玩家集体死亡的热点:
鸣谢:卡特勒的 PUBG 地图
和原始图像进行比较:
鸣谢:卡特勒的 PUBG 地图
据统计,波钦基是埃兰格尔岛上最糟糕的地方之一。它的东南方有一个更不利于生存的地理邻居,应该避开。
我对 PUBG 不像对 Warzone 那样熟悉,但我猜 Pochinki 和它的表亲必须:I)提供一些好的武器,这样玩家就会被它们吸引,或者 ii)成为安全区最终增量的公共场所。
同样,Severny 的东南部应该是禁区。
这三个地区是 Erangel 最致命的地方,我们可以说 Primorsk、Mylta 和军事基地东北角以北的地区也是如此。
玩家什么时候最有可能被杀?
我想找到这个问题的答案,不依赖于时间变量,而是依赖于游戏中的事件,因为一场比赛持续的时间可能会有很大的不同,所以没有固定的基准。
“名次”是一名运动员在一场比赛中的排名。如果一个玩家是第一个被淘汰的,他们的名次等于游戏中的玩家人数;如果 n = 100,玩家的落点是 100(即最差)。
第二个被淘汰的玩家将有 n-1 的位置,在这种情况下是 99。
获胜者总是有 1 个位置,因为他们是最后一个站着的人/队。换句话说,你的位置越低,你打得越好。
有趣的是,玩家最常死于他们刚刚完成对对手的领先后不久。通过比较凶手和受害者的位置,我们可以得出这个结论:
大多数数据的位置差异在-5 到 10 之间。
仅限于正差异,这意味着一个刚刚杀死另一个人的玩家通常会比他们的受害者好不到 10 个位置。
此外,杀手几乎立即(0
这可能是由于“抢劫”的机制;当你在 BR 游戏中杀死一个玩家时,你可以拾取或掠夺他们的装备。其他玩家知道这一点,并经常瞄准新鲜的尸体来挑选潜在的秃鹫。另一方面,可能现在你的位置被其他玩家知道了,因为你参与了交火。
反过来,我们如何解释负的位置差异的存在?
答案是玩家可能会作为一个团队来玩。如果一个玩家杀死了另一个玩家,但第一个玩家的整个团队在第二个玩家的整个团队之前被淘汰,那么对于该观察,位置差异将为负。
武器和杀戮
你应该使用什么武器?
有竞争力的玩家几乎会做任何事情来找到超越他人的优势,所以武器被使用的程度是其有效性的一个很好的代理。
这里有一个意想不到的发现:在两张地图上,没有一把狙击步枪是造成最多杀戮的武器,考虑到它们的尺寸,这很奇怪。另一方面,顶级捕食者无疑是突击步枪:
我真的试着把“蓝色区域”涂成蓝色,但是谁想看到 3 个白色的条纹?
M416 拥有最多的杀伤,在战区也被认为是一种非常“元”的武器。一把 UMP9 形式的冲锋枪溜了进来,这也是有道理的,因为 SMG 只在近距离表现出色。
在这种性质的战斗中,伴随它的是猎枪,其中 3 支能命中目标。
最后,狙击步枪的一个可能的替代品,神枪手步枪,也让它的存在为人所知。
我要给狙击枪另一次机会,通过增加对它有利的机会。为了做到这一点,我需要看到艾朗格尔的具体杀戮范围。
大多数决定性的交火发生在埃兰格尔的什么距离?
数据中的轴的范围是 0,800000,正如我前面提到的,Erangel 是一个 64 公里的正方形地图。
这意味着,在我的“杀伤范围”变量中,100 步等于地面上 1 米的距离。我保留了这个约定,而不是将距离单位转换成米。
一半的杀人事件涉及到黑仔和受害者相距 5 到 75 米,所有异常值都在 200 米左右的北方。
如果我们期望狙击步枪在长距离方面表现出色,那么我们可以在> 80 米处寻找最致命的武器,因为这大约是上述分布的第三个四分位数,可以作为一个有用的基准。
但是 PUBG 玩家真的不喜欢这个级别的武器:
“蓝色区域”是非安全区域的公共名称
要么是狙击步枪的技能下限太高,没有足够多的玩家可以有效地使用它们,要么是玩家认为神射手步枪是更好的替代品,所以使用它们。
另一个观察是,太多的玩家在远离安全区的地方被抓到。
这就是蓝带杀戮所表明的;这个小样本中的 5000+玩家,死时距离安全区都在 80 米以上,真是地域意识太差了。
不会比这更糟了,对吧?错误:
完全巧合的是,“蓝色地带”这次被染成了蓝色
- 太多的玩家因为蓝区而死的时候都在方向盘上睡着了
- 散弹枪(S686,S12K,S1897)只有在你离玩家角色足够近,可以闻到玩家游戏控制器上汗味的时候才有效
- 这些异常值中的大部分可能是反常的事故,因为长距离的子弹投掷是 PUBG 中重复的机制,很少有人能有效地使用它
结果(相当明显)是减少吮吸的描述性清单
由于这是一个描述性的分析,下面的列表告诉我们成功的球员是怎么做的。但这并不一定意味着复制它们就能让你成功;你必须实施这些策略,自己去发现!
- 不要做一个纯粹的露营者
- 不要做一个纯粹的露营者
- 但是也不要喷和祈祷;移动并选择你的镜头
- 杀死一个玩家后保持警惕;忽略立即掠夺他们尸体的诱惑,离开交火区域,因为你的位置现在可能被其他玩家知道了
- 无论你玩什么 BR 游戏,都可以使用 M4A1
- 在你和从有利位置向你射击的人之间保持一定距离是在遭遇中生存的有效方法
- 在 PUBG 的 Erangel 上避免 Pochinki 和 Mylta
家庭烘焙咖啡的经济学
成本分析
6 年前,我开始用爆米花机在家烘焙。我最好奇的是我是否会喜欢在家烘焙,因为买一个烘焙器似乎几年后就能得到回报。所以我买了一个杂物箱开始工作。事实证明,如果烘焙得当,我可以省下很多钱,但缺点是我会喝更多的咖啡,因为咖啡更便宜也更好。因此,它的成本可能是一样的,但我可以通过家庭烘焙来更好地控制质量。
我第一次尝试烧烤。所有图片由作者提供。
一开始,我试了爆米花机,但它非常慢。我也试过烤箱,但是里面烟太多了。当我的房子充满烟雾时,所有的烟雾报警器都响了,我感到非常恐慌。
当我搬到加州时,一位同事刚刚升级到一台更大的烘焙机,并免费把他的旧烘焙机给了我。这是一辆时髦的汽车,比最新款的旧了一个型号。显示器出现了一些问题,两年后终于坏了。然而,在使用的第一年里,我已经形成了自己的烘焙风格。因为我每次都使用相同的配置文件,所以我仍然可以导航到正确的位置。
夜烤!
豆类经济
在过去的两年里,我一直在更详细地跟踪我的烘焙,但有了电子邮件,我可以回头看看我在过去几年里购买的所有生咖啡,以汇总每磅的成本。
这是我烤肉用的桌子的样品。我已经记录了在甜甜玛丽亚的网站上找到的拔罐指数,我在那里买了大部分的青豆。
我的烘焙数据表的一个例子,我也根据每颗咖啡豆的 Q 值追踪烘焙的平均 Q 值
我调整了每磅的成本,基于运输和估计 12%的烘烤重量损失。一般来说,中度烘焙会因水分蒸发而损失 12-20%的重量。平均来说,我在运输和烘烤后支付了 8.42 美元/磅。我没有包括电费,因为是 1000 瓦 20 分钟,每千瓦时 0.1 美元。我绘制了我买的所有豆子的直方图,有时我会挥霍,但大多数时候我在 7 美元到 8 美元之间。这个直方图是每磅的最终成本。
通常,咖啡以 12 盎司袋出售,当你把成本调整到 16 盎司袋时,我得到的相同质量的咖啡豆的价格在 20 美元到 30 美元之间。
当看质量时,成本大致与 Q 分数一致,这很好,因为成本应该与豆子的质量相关,而不仅仅是某人希望豆子是什么样的。
我进一步查看了我的混合物的平均 Q 值以及它们的成本。这个 Q 值是进入混合物的咖啡豆的平均 Q 值,基于它们对混合物的重量贡献。对于我的混合物来说,成本和 Q 值之间似乎有相当的相关性。
焙烧设备的经济性
烘焙咖啡豆的成本如此之低,购买烘焙机的回报会很快产生。基于这一成本和 20 美元/磅的差额,我研究了各种机器,以确定何时达到盈亏平衡点。
我利用这些信息,根据你每天喝多少杯浓缩咖啡(假设 14 克或一杯标准双份浓缩咖啡)制作了下表。这是以月为基础的,因为家庭烘焙者购买的大多数设备将在一两年内收回成本。我把更贵的烤面包机包括进来做比较。
家庭烘焙并不适合每一个人,因为它需要更多的关注细节和欣赏,尝试一点点才能成功。然而,家庭烘焙给了我更多的控制力和一致性,这是我没有的,也让我对来自世界各地的咖啡有了更好的欣赏。在我尝试的东西和我制作的混合物中,我变得更具实验性。
我最喜欢的快乐错误是不小心烤到第二个裂缝。我通常在第一次破裂后 1 分钟到 1:30 分钟。这个的问题是它是混合的一半。我决定留着它,试着用中火烤一下。这是非常有趣的混合,并创造了一些漂亮的图像时,分层。
如果你愿意,可以在 Twitter 和 YouTube 上关注我,我会在那里发布不同机器上的浓缩咖啡视频和浓缩咖啡相关的东西。你也可以在 LinkedIn 上找到我。
我的进一步阅读:
EDA 理论指南
探索性数据分析完全指南
Kaprekar 常数,或 6174 ,是一个常数,当我们取一个 4 位数的整数,从它的位数中形成最大和最小的数,然后减去这两个数。继续这个形成和减去的过程,我们总会得到数字 6174 。(照片由摩根豪斯在 Unsplash 上拍摄)
M ost 数据分析问题从理解数据开始。这是最关键也是最复杂的一步。这一步还会影响我们在预测建模问题中做出的进一步决策,其中之一就是我们要为一个问题选择什么算法。
在这篇文章中,我们将看到一个完整的关于这类问题的指南。
内容
- 读取数据
- 变量识别
- 单变量分析
- 双变量分析
- 缺失值-类型和分析
- 异常值处理
- 变量变换
读取数据和变量标识
阅读数据可以推断出下列问题的答案
- 我的数据是什么样的?
- 我的数据包含多少个要素?
- 它看起来像什么?
- 变量的类型有哪些?
指南 1:变量类型
单变量分析
UA 是什么?
当我们从给定的特性列表中一次探索一个变量时,它被称为 UA。我们总结变量,帮助我们更好地理解数据。
我们在 UA 中看到以下内容
- 变量的集中趋势(均值、中值、众数)和离差
- 变量对称、右偏或左偏的分布
- 缺失值和异常值
- 计数和计数百分比:观察分类变量中每个类别的频率有助于我们理解和处理该变量。
为什么是 UA?
我们研究这个变量,检查异常值,以及我们将在后面部分看到的缺失值。
普遍获得的方法
对于连续变量:
- 表格法:用于描述集中趋势、分散和缺失值。
- 图解法:用于分布和检查异常值。我们可以使用直方图来理解分布,使用箱线图来检测异常值。
直方图和箱形图的组合被称为小提琴图
指南 2:连续变量的单变量分析方法
对于分类变量:
- 表格法:“。value_counts()”运算给出了频率的表格形式。
- 图形方法:在分类变量的情况下,最好的图形是柱状图。
指南 3:分类变量的单变量分析方法
双变量分析
巴是什么?
当我们研究两个相互关联的变量的经验关系时,我们称之为 BA。
为什么是巴?
它有助于发现异常,理解两个变量之间的相互依赖关系,以及每个变量对目标变量的影响。
BA 的方法
- 对于连续-连续类型:有两种方法研究两个连续变量之间的关系,即散点图和相关分析。
指南 4:连续-连续型变量的二元分析
2.对于分类-连续类型:在此标题下,我们可以使用条形图和 T 检验进行分析。
T 检验是一种推断统计,用于确定两个或更多组/类别的平均值之间是否存在显著差异。计算 t 检验需要每个类别的平均值和标准偏差之间的差值。
指南 5:分类连续型变量的二元分析
3.对于分类-分类类型:双向表和卡方检验用于分析两个分类变量之间的关系。
缺少值
缺失值的原因?
数据中可能有各种缺失值,其中一些可能是
- 可能没有记录任何响应。
- 记录数据时可能会有一些错误
- 读取数据时可能会有一些错误,等等。
缺失值的类型?
- 完全随机缺失(MCAR): 这些缺失值与任何其他变量或它们所在的变量没有任何关系。
- 随机缺失(MAR): 存在于变量内部没有任何关系,但在其他变量中可能有可观测趋势的缺失值。例如。年龄超过 60 岁的人的收入数据可能会丢失,因为这个年龄的人通常都退休了。
- 非随机缺失(MNAR): 缺失值与它们存在的变量有关系。例如。价格超过卢比的房子。2000 万在数据库中可能会丢失,因为这个价格不可能有经常购买者。
处理缺失值的方法
有两种处理缺失值的基本方法
- 删除:在训练模型之前,我们从数据集中删除所有缺失的值行。
- 插补:有多种方法可以填补缺失值。
指南 6:处理缺失值
极端值
异常值的类型及其识别
有两种异常值:
- 单变量异常值:可以使用箱线图来识别。
- 双变量异常值:可以使用两个变量之间的散点图来识别。
异常值的标准
**Criteria for X to be outlier:**Q1: median for first 25% observation when sorted in ascending order
Q2: median for last 25% observation when sorted in ascending order
Q3: median of all observation
**IQR**: Inter quartile range = Q3-Q1
if **X** is outlier then X must satisfy:
**X > (Q3 + 1.5*IQR)** OR **X < (Q1-1.5*IQR)**
异常值的处理
- 我们可以删除那个观察。
- 我们可以通过输入缺失值中讨论的方法来输入异常值。
- 我们可以应用变换(将在下面讨论)
变量变换
我们都知道归一化增加了模型的准确性。但是到底什么是正常化呢?它是变量变换的技术之一。
在变量变换中,我们用变量的一个函数来代替变量。例如,将变量 x 替换为它的对数值。
我们可以尝试解决我们在之前的 EDA 流程中观察到的以下问题:
- 我们可以改变变量的标度(重新定义变量的极限)
- 非线性关系到线性关系的转换
- 据观察,算法在对称分布的变量上比偏斜分布的变量表现得更好,因此我们可以将偏斜分布转换成对称分布。
变量变换方法
- 非线性变换:我们可以用变量的对数值、平方根或立方根来代替变量。这些是非线性转换,因此有助于我们处理上述所有问题。
- 宁滨:我们可以将连续值分成不同的区间,从而将连续变量转换成分类变量。这可能有助于我们将离群值归类到我们的模型可以处理的一些类别中。
总结
这是探索性数据分析的广泛指南。这不仅包括如何检测异常,还包括如何处理和消除异常。这是一个非常幼稚的 EDA 方法,因此大部分章节都已经涵盖了。
前馈神经网络在趋势交易中的有效性(1)
展示了在基于趋势的技术分析中使用简单的前馈神经网络的惊人的有效性和局限性
这是由 【丹尼尔】 和 孙敏·李 合作研究的初步展示。你可以在文章底部找到我们的联系方式。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
随着对人工智能的兴趣不断增加,许多人试图将机器学习技术应用于预测市场,特别是在使用股票价格时间序列数据的高频交易领域。
仅在 Medium 上,就有数十篇关于使用 RNN、LSTM、GRU、前馈神经网络等进行股价预测的帖子。然而,预测市场并不是一项简单的任务:似乎大多数揭示的尝试都没有显示出基于模型预测的策略成功所需的性能。在大多数帖子中,这种情况要么是完美的预测(表明作者肯定做错了什么),要么是令人沮丧的结果,阻碍了任何进一步的研究。
然而,Aldridge 和 Avellaneda (2019) 表明使用神经网络预测收益是有希望的。虽然该论文明确证明了简单神经网络的局限性,但它也表明,通过仔细选择训练期和输入数据,基于神经网络预测的简单策略可以优于买入并持有策略。
我们的研究希望重现 Aldridge 和 Avellaneda (2019) 的结果,同时也花更多时间探索金融理论背景。最后,我们将使用研究的验证结果来引入更稳健的预测模型和策略。
在这篇具体的文章中,我们将讨论我们早期的失败。更具体地说,我们将训练一个具有固定窗口时间序列输入的前馈神经网络,解释为什么这种训练应该有效背后的假设,然后探索为什么该假设失败。
基于股价趋势分析背后的基本原理
由于有上百万个中型帖子解释神经网络的有效性和局限性,我们将切入正题,讨论为什么基于股价趋势的分析可能有效。也就是说,过去的股票价格数据+一些其他数据点可能包含足够的信息来提供有意义的预测。
Pedersen (2015) 对趋势的生命周期描述如下:
- 趋势的开始:对信息反应不足
- 趋势延续:延迟过度反应
- 趋势结束(回到基本价值)
Pedersen (2015) 提到趋势跟踪投资是管理期货的一种策略,但也许一些想法可以应用于我们这里的案例。
尽管有效市场假说的极端形式表明,市场即时纳入了所有信息,包括公开和未公开的信息,但像 Ho,Danny et al. (2019) 这样的研究表明,人们甚至对公开可用的数据反应不足。同样,由于“羊群效应”和市场危机期间追缴保证金等事件导致的过度反应可能会导致市场价格偏离资产的基本价值。
诚然,市场的许多低效率已经被利用,从而加强了市场效率。这就是使用神经网络的原因。正如 Aldridge 和 Avellaneda (2019) 和 QRAFT (2020) ,所强调的,检测数据中非线性模式的能力对于检测以前未检测到的金融模式至关重要。例如, Aldridge 和 Avellaneda (2019) 谨慎地将对间谍和目标资产的股价数据进行操作的神经网络预测的卓越性能归因于神经网络检测非线性模式的能力,克服了著名的 CAPM 对线性的依赖的局限性。
理论假定
我们在研究开始时的假设是,用大量股票价格数据训练的神经网络将能够检测相关股票与其基本面价值的偏差。尽管股票价格数据包含大量噪声和偏差,但我们假设大量的训练数据将允许神经网络正确训练。
目标和对困难的承认
这项研究的目标是击败买入并持有策略。由于我们专注于揭示神经网络做出准确的未来价格预测的能力/能力,我们只模拟了一个给定资产的交易策略。事后看来,这是一个令人难以置信的雄心勃勃的项目,因为如果扩展到多样化的投资组合,仅使用最少的财务数据就能击败对某一特定资产的买入并持有策略,将会带来惊人的回报。然而, Aldridge 和 Avellaneda (2019) 已经表明,仅使用来自两种资产(目标资产和间谍)的股票数据就足以击败具有相对简单的前馈神经网络的买入并持有策略。因此,虽然这种方法可能不适用于任何给定的资产,但它可能适用于某些资产。
要避免的陷阱
所以在我们继续之前…
在太多关于股票价格预测的时间序列数据分析的中型文章中,可以观察到一些常见的陷阱。
- 标准化/规范化整个数据集
- 训练整个数据集并在已训练的数据集中进行测试
- 不正确地选择输入/输出,因此产生看似完美的预测输出,实际上只是具有时滞的输入(在大多数情况下,训练模型来预测股票价格,而不是回报)
虽然我们的研究并不完美,但你可以放心,上面提到的陷阱是可以避免的。
测试交易策略
如上所述,我们的测试交易策略不创建投资组合;我们使用一种资产的回报预测来做出全力买入/卖出的决定。
- 如果对下一个交易周期的回报预测是积极的,使用当前的现金银行尽可能多地购买该资产。
- 如果下一个交易周期的回报预测是负面的,清算一切。
理论上,一个训练有素的神经网络将能够通过这种策略击败买入并持有的头寸。这种策略能够带来丰厚回报的关键因素是:
- 在牛市中跟上股票价格的上涨。
- 避免市场崩盘,在市场再次回暖时乘风破浪。
选择这样一个简单的交易策略的原因是,首先,因为这使得策略的性能可以更直接地归因于预测模型,其次,因为我们缺乏更复杂的金融知识,第三,因为作为一个月收入 400 美元的士兵和一个大学生,我们无法负担复杂的投资组合管理回溯测试所需的计算能力。
还要注意,我们将假设无风险利率为零,并且我们在回溯测试中没有考虑交易成本。
训练固定窗口预测模型
那些熟悉这个主题的人在阅读这里讨论的预测模型的规范时可能会嗤之以鼻,因为很明显这样的模型不应该工作。然而,这个模型的失败确实提供了关键的见解,并有助于消除错误的假设,因此它应该值得探索。
假设
- 根据固定的 10~20 年资产回报数据训练一个前馈神经网络,应该能让模型发现显著的趋势。
- 检测到的趋势可以用于预测未来的资产回报。
数据预处理
我用 yfinance 收集了雅虎财经的历史数据。为了便于理解,我将介绍我在这个过程中使用的三个术语。
- 培训期间:收集培训数据的时间跨度
- 训练大小:神经网络的输入数据(train_x)被组装的时间段的大小
- 预测期:我们希望展望的时间段
对于这里的例子,我们将使用 18 年的训练周期(使用 1993 年 6 月 30 日至 2010 年 6 月 30 日之间的交易日),100 天的训练规模和 21 天的预测周期(=进行月度回报预测)。选择的资产将是间谍 ETF。我们只会把月收益当作训练数据。
使用 pandas DataFrame 使得预处理过程变得非常简单。
(注意,下面的描述将输入和输出解释为 numpy 数组,而不是张量形式)
- 将收盘价移动(-1) * prediction_period。
- 使用移动后的收盘价计算每个交易日的远期回报。
- 消除具有空值的交易日,然后提取远期回报列表的列表,每个内部列表的大小为 training_size。这是我们的 x 次列车。
- 对于每个回报列表(train_x 内的每个列表),目标回报应该是与列表中包含的最晚日期相距一个预测期的交易日的月度远期回报。
- 然后使用来自 sklearn 的 MinMaxScaler 来 scaler.fit_transform 输入数据。
您可能会注意到,可以修改第 3 步和第 4 步,以便使用历史回报率[(close _ t/close _(t-prediction _ period))-1]来代替远期回报率,从而达到相同的效果。
你也可能想知道为什么我们选择使用每日收盘价,而不是调整后的收盘价。考虑到可能的前瞻偏差,我们假设收盘价比调整后的收盘价更“安全”。还有其他观点认为,在对回报进行回溯测试时,使用调整后的收盘价更合适(不是价格!);这是我们正在继续研究的问题。通过特征工程,我们希望在不久的将来将生存偏差和前瞻偏差一起最小化。
那么测试集呢?我们遵循上面详述的相同过程,只是数据是从大约 10 年(使用 2010 年 7 月 1 日至 2020 年 7 月 1 日之间的交易日)收集的,并且在缩放测试输入时,我们使用scaler . trans inform来避免数据泄漏。
型号选择
从本文的标题可以明显看出,我们用前馈神经网络进行了实验。
为了优化神经网络并获得洞察力,我们尝试了许多超参数、激活函数、层数等,但有一个共同点。
在所有模型中,我们为最终输出层使用 tanh 激活函数。
由于 tanh 返回一个介于-1 和 1 之间的值,所以它是比 sigmoid 更好的选择,因为我们在策略中不考虑杠杆作用,所以不应该出现实际返回超出 tanh 函数范围的情况。
回溯测试
一个隐藏层,均方误差损失函数
Aldridge 和 Avellaneda (2019) 表明,非常令人惊讶的是,具有单个隐藏层的简单神经网络具有足够的计算能力来模拟交叉移动平均策略。然而,不太清楚 Aldridge 和 Avellaneda (2019) 是否在整篇论文中保持了相同的模型结构,只有在论文的结尾,我们才看到一个击败买入并持有策略的预测模型的成功实例。
因此,我们首先用一个具有一个隐藏层的神经网络来测试性能。非常令人惊讶的是,我们用这个模型结构进行的第一次回溯测试显示了出色的结果。
图一。蓝色:间谍,红色:模拟策略(x 轴:月,y 轴:美元)
SPY ETF 买入并持有头寸的 0.903 夏普比率(零无风险利率)与 0.750 夏普比率(零无风险利率)形成惊人对比。印象深刻吧。会有什么问题呢?
可悲的是,问题很多。
第一个问题是,尽管上图看起来很好,但这样的结果不容易重现。多次运行相同的代码表明上图是纯粹运气的结果。大多数代码迭代显示出较差的 Sharpe、returns 等,并且在这一点上,修补模型以获得与上面类似的结果有效地将测试集变成了验证集,使任何结果的可信度受到质疑。
第二个问题,也是最主要的问题是,上述模型的表现主要来自于对正回报的预测和对间谍买入并持有头寸的榨取。用数字表示,为上图训练的模型在 78%的情况下预测正回报,在预测负回报的情况下,它在 62%的情况下是错误的。
换句话说,这个模型很幸运,在 38%的时间里,它对负回报的预测是正确的,它锁定了资产价格波动较大的关键位置,然后求助于拥抱资产。
最后一个问题是,培训损失在一个相当高的点停止下降。这也许应该是第一个指标,一个隐藏层是不会做的魔术;神经网络缺乏适当训练的计算能力,否则训练损失将不断减少。
多个隐藏层,均方误差损失函数
这里真的没什么好说的了。模型预测很糟糕。
具有多个隐藏层的模型比具有一个隐藏层的模型更有前途,因为预测的回报不会偏向正或负领域。这反过来又转化为模型在做出有用的预测方面表现不佳。呀。
图二。蓝色:间谍,红色:模拟策略(x 轴:月,y 轴:美元)
其他人
- 不同的训练时期
- 自定义损失函数
- 不同的资产
- 来自同一培训期的不同资产的数据集合
- 平均用相同超参数和数据训练的几个模型的预测,以获得一致的结果
上述所有努力都证明了利用前馈神经网络的固定窗口预测模型不能击败买入并持有的头寸。
等等,那么阿尔德里奇和阿韦利亚内达(2019) 是在传播假消息吗?
没有。我们上述回溯测试的糟糕表现首先是由于我们的策略偏离了阿尔德里奇和阿韦利亚内达(2019)提到的策略。一个这样的主要偏差是固定窗口预测模型本身的使用。根据我们对论文的解释, Aldridge 和 Avellaneda (2019) 似乎使用了移动窗口预测模型。
事实上,深入研究理论背景可以发现,固定窗口预测模型注定无法做出有用的预测。
固定窗口预测模型失败的原因
缺乏数据
在上面的例子中,我们有超过 4000 个数据点作为前馈神经网络的输入。在传统的机器学习研究中,这似乎是一个理想的数据量。然而,我们的项目并非如此。
考虑我们希望我们的神经网络训练学习什么模式是很重要的。还记得我们在文章开头提到的,在基于股票价格趋势分析背后的基本原理下,如果神经网络能够检测到市场的过度反应和反应不足,它应该是成功的。
我们在这里得出的结论没有任何证据支持,但似乎市场与资产基本面价值的偏差太多,神经网络不可能检测到我们正在寻找的特定趋势模式。也就是说,市场并不像我们想象的那样有效,导致数据中有太多噪音。
如果某些模式主要存在于训练期间(1993 年 6 月 30 日至 2010 年 6 月 30 日),它们可能会导致过度拟合,这会损害预测。此外,请注意,我们希望寻找的模式可以被描述为一种普遍模式——它应该存在于任何时间框架内,因为迄今为止,人们确实对市场信息反应过度和反应不足。
Khandani 和 Lo (2007) 所展示的反向策略的有效性向我们表明,即使是最近,市场中也存在着持续了十多年的大规模无效率现象(夏普指数超过 50 曾经可以通过相对简单的策略实现!).考虑到这一点,神经网络的适当训练可能需要一个世纪(如果不是多个世纪的话)的原始数据才能消除持续的噪声。
结论可以如下:如果我们想要可行的前馈神经网络预测,我们要么需要更多的数据,要么需要更多的抛光和工程数据(不像我们在这里使用的原始数据)。
另一种选择是转换我们正在寻找的趋势模式;我们不再寻找一个普遍的模式,而是去寻找我们能发现的最近的模式。这就是移动窗口预测背后的思想。
数据不平衡
我们选择时间周期的另一个问题是,看涨比看跌略多。通过预测每个未来回报为正,神经网络可以实现接近 56%的方向预测精度。
如果在机械上有可能实现比 56%更高的预测精度,这将不是问题。但是,如果在不坚持特定方向预测的情况下,我们通过这种方法可以实现的最佳预测精度低于 56%,会怎么样呢?然后,神经网络预测每个下一个回报在 0 和 1 之间是有意义的,因为这可能是实现最低损失的直接方法。
上面的对话实际上与研究过程中进行的大多数过程无关,因为在大多数情况下,神经网络过度拟合,这意味着它超过了方向预测的 56%的准确性。但它已被证明是我们早期努力的障碍,所以我们为那些可能试图复制我们工作的人提及它。
任务的艰巨性
当我们停下来再次思考任务的目标和我们用来实现目标的少量信息时,我们就越能意识到任务的雄心。
到目前为止,上述实验的结果确实告诉我们,需要更复杂的方法。
那么接下来呢?
上述结果一点也不令人沮丧。从某种意义上说,我们在文章中描述的资产回报预测方法注定会失败;我们的实际实现只是证实了这一信念。
正如我们上面所讨论的,有其他方法可以解决缺少数据的问题。目前,我们正在实施具有不同工程特征和不同机器学习模型的移动窗口预测模型,并开始看到改进。
如果您在执行过程中发现逻辑谬误或错误,请反馈给我们!也欢迎论文、帖子、课程等方面的推荐。
作者
- https://www.linkedin.com/in/seouk-jun-kim-a74921184 金俊
T3 - 李
孙敏https://www.linkedin.com/in/sun-min-lee-3116aa123/
来源
- 奥尔德里奇,艾琳 e .和马尔科阿韦拉内达。"金融中的神经网络:设计与性能."(2019).
- 拉塞·赫杰·彼得森。"有效率无效率:聪明的钱如何投资和市场价格是如何决定的."(2015)
- Ho,Danny and Huang,Yuxuan and Capretz,Luiz F .“基于基本面分析的股票选择神经网络模型”(2019)。
- QRAFT。《AI 资产管理报告》。人工智能如何创新资产管理?” Qraft 技术公司。中等。, (2020)
- 2007 年 8 月,宽客发生了什么?(2007 年 11 月 4 日)
- https://pypi.org/project/yfinance/
烘焙对咖啡豆硬度的影响
检查绿色和棕色硬度
在做一些阅读的时候,我偶然发现了其他一些关于检查生咖啡豆硬度和密度的研究。至少在他的取样中,他没有看到豆类品种之间密度的差异,但是豆类硬度有差异。我对咖啡豆的硬度很好奇,因为我也在家烘焙,所以我开始收集烘焙前后咖啡豆的硬度。
生咖啡豆和烘焙咖啡豆之间的硬度变化很大,但我发现有趣的是,烘焙后咖啡豆的硬度与烘焙造成的重量损失量之间存在相关性。烘烤过程中的失重以失水为主。
实验装置
在烘烤前后,我用硬度计收集了 30 个豆子硬度样本。所以前后的抽样属于不同的豆类,但样本数量足够大时,分布是可靠的。为了更有效地收集数据,我为每一轮测量制作了一个视频,然后回放视频以手动记录数字。通常,录制视频需要 3 到 5 分钟,记录大约需要 5 分钟。
肖氏硬度计有一个弹簧,你把一根针插进一个物体。当硬度计不能再推时,读数就是硬度。为了测量豆的硬度,你需要一个 D 型硬度计,它有一个 30 度角的针和 44 牛顿的弹力。
测量咖啡豆硬度的挑战之一是烘焙过的咖啡豆很容易破碎。我测量了超过 30 个样本来解释每一个豆子的破裂。我还注意到,对于青豆来说,测量硬度的行为给豆子留下了印象。
烤
我分别烘焙每一颗咖啡豆,然后将两颗混合在一起。我用的是热烘烤器,我的烘烤曲线比较慢,可以让它们升温。我在第一年致力于优化烘焙简介,但是一旦我选定了最好的,我只在结束烘焙时修改。还要注意的是,我立即添加豆子,所以我没有装料温度。
对于这些烘烤,我的目标是在第一次裂纹后的 1:30 结束烘烤。在 HI Mokka 中,时间变得更长,因为我很难听到第一次破裂。
硬度数据
这些咖啡豆是我从 Burman 咖啡贸易商那里得到的。我通常从甜甜玛丽亚买咖啡,但我想尝试烘焙一些夏威夷豆。在这个表中,我有生坯硬度,烘烤硬度,两者之间的比率,以及烘烤重量与生坯重量的百分比。
仅从平均硬度来看,所有咖啡豆的硬度都有所下降。
我取了所有的样本,把它们分类为青豆和烘焙豆,这种转变是明显的,但是仅仅因为一种变型比另一种变型更硬并不意味着它们由于烘焙而具有相等的硬度转变。
当绘制生豆和烘焙豆的各种分布时,它们具有相似的属性。这也假设最不硬的绿豆将是最不硬的烘焙豆。这项研究的困难之一是我使用了两个不同的样本集。一个更好的实验设计是使用一个小型样品烘焙器,在烘焙前测量所有的咖啡豆,在烘焙后测量所有的咖啡豆。
我还绘制了生豆和烤豆的比例与生豆硬度的关系图。从这里开始,唯一的趋势是一个相等的移动,但同样,采样不是一对一的。
从整体数据来看,我们可以看到烘烤后保留了多少重量。通常情况下,烘焙会损失 10%到 20%的咖啡豆重量。在这种情况下,出现了一种趋势。我观察了烘豆硬度的趋势,以及生豆与烘豆硬度的比率。烘豆硬度的趋势最强。
数据集只有 10 个烘焙咖啡豆的平均硬度样本,我通过处理对其进行了分解,以便查看。更多的数据将有助于更好地理解这种关系。
我没有绿豆的水分测量值,我很好奇豆子水分和硬度之间是否有关联。烘焙咖啡豆的质量损失似乎与硬度有关,质量损失主要是由于水分损失。
我还没有完全投入到烘焙的实验中,但我当然足够好奇。对于硬度,我收集了一些数据,希望我能对这个变量有更好的理解。另一个有趣的实验是将豆子脱水,然后逐个比较豆子的硬度和含水量。
如果你愿意,可以在 Twitter 和 YouTube 上关注我,我会在那里发布不同机器上的浓缩咖啡视频和浓缩咖啡相关的东西。你也可以在 LinkedIn 上找到我。
我的进一步阅读:
用 OpenCV Canny 算法轻松处理图像
边缘检测示例
在软件工程中,简单很重要,在虚拟机中部署最先进的模型通常是不可能的,因为旧的库不支持您的环境。幸运的是,您可以使用 OpenCV 以简单的图像处理方式来完成这项任务,而不是使用基于神经网络的具有数百万参数的模型。
T 处理图像的简单方法是利用一种巧妙的边缘检测算法,而不是最先进的人工智能方法。Canny 算法是成熟的,它是一种无监督的算法,不需要大量的数据来训练算法,而且算法的结果总是可证明的和严格的。从图像编辑到游戏制作,每天都要用到图像处理。在图像处理中,有一个像轮廓和边缘检测这样的问题。通常,这适用于从背景中剪切出对象的情况。为了在没有人工干预的情况下解决这个问题,使用了 canny 边缘检测算法。它的工作原理是寻找图像的强度梯度,然后用 Sobel 核对平滑后的图像进行滤波。这是一种流行的边缘检测算法。它是由约翰·f·坎尼[1]开发的。Canny 算法是可以使用的,它是成熟的,也有复杂的人工智能模型,这些模型有大约 2500 万[2]个参数,很难训练这样大的模型。在这种情况下,当训练这么大的一个有这么多参数的模型来证明模型收敛性变得越来越困难时,这就是为什么基于内核的解决方案或无监督模型在生产环境中工作得更严格。无监督机器学习因其对未标记数据进行分类并发现其中大量未知模式的能力而如此突出[3]。为了证明非基于规则的算法,总是存在算法失败的风险[4]。使这样的系统失败是非常容易的,单像素攻击只需要改变图像中的一个像素。通过向输入向量添加相对较小的变化,可以容易地改变深度神经网络。在极其有限的情况下,只能修改一个像素的攻击。这种攻击探索了在极其有限的场景中对对抗性机器学习的不同看法,表明当前的深度神经网络也容易受到这种低维攻击[5]
图像处理是图像编辑、虚拟现实和可视化中需要解决的一个非常重要的任务,它在医学和农业等许多领域都有应用。对于一个机器学习问题,首先要做的就是从数据分析入手。这是了解领域业务知识的最佳方式。例如,为了对图像进行分类,有像 inception v3 [5]这样的机器学习模型。然而,这种模型存在问题,这些模型是受监督的,这意味着需要大量的数据来训练,而且用如此多的数据来训练模型需要大量的计算能力。这就是无监督模型被发明的原因。干净、完美标记的数据集不容易获得。所以有时候,研究人员会问一些不知道答案的算法问题。这就是无监督学习的用武之地。在无监督学习中,深度学习模型被交给一个数据集,而没有关于如何处理它的显式指令。训练数据集是没有特定期望结果或正确答案的示例的集合。然后,神经网络试图通过提取有用的特征并分析其结构来自动找到数据中的结构。[6]有可能监督模型缓慢收敛,并且为了训练以获得好的结果,需要有大量的计算来解决问题。训练这样的模型,重要的是测量模型特征,如推理时间,该特征表示算法从开始到结束将计算多少时间。谈到人工智能训练,应该区分训练和执行时间两件事。训练时间通常很长,推理执行时间应该很快。模型只需要训练一次,然后在执行时多次使用。软件工程中的简单性问题算法应该按照用例需求来实现,根据奥卡姆剃刀原理,最简单的解决方案往往更好。
Canny 边缘检测算法众所周知,它是在 1986 年创建的。还有 14891 条引文证明了该算法的可行性和正确性。需要编辑或操作图像的开发人员使用这种方法的例子有很多。第二个例子是基于基于内核的计算机视觉算法的思想。这种方法之所以可行,是因为其背后的数学原理。我们希望移除可能不属于边缘的多余像素。然后发生具有滞后的阈值处理,如果强度梯度值超过上阈值,则接受像素作为边缘,如果强度梯度值低于下阈值,则拒绝像素作为边缘。如果一个像素在两个阈值之间,只有当它与高于上限阈值的像素相邻时,才接受它[8]。数学是简单明了的,而且提炼出了本质,在一个 canny 算法上做了如此多的研究,我们可以说这个方法是成熟的。此外,我们可以用 CMM 模型定义软件算法成熟度。CMM 是由卡内基梅隆大学的软件工程研究所(SEI)于 1987 年开发的。5 成熟度等级是初始的、可重复的、定义的、管理的和优化的。每一个阶段,都有成熟的要求。例如,在初始阶段,流程不成熟,没有很好地定义。在可重复阶段,项目计划、需求管理和质量保证都已就绪。定义阶段 it 是一套完整的特定于项目的软件工程和管理过程。在管理阶段,为软件产品和软件过程的组织设置量化的质量目标。最后一个阶段的优化是 CMM 中过程成熟度的最高层次,它关注于组织中使用定量反馈的持续过程改进[9]。Canny 边缘检测算法是在 OpenCV 框架中实现的,OpenCV 框架是开源的,有很好的文档记录并不断优化,这意味着 OpenCV 算法处于成熟的第五阶段。
Canny 边缘检测是一种无监督的方法,这意味着不需要大量的数据。监督算法从其训练数据中学习,并试图收敛到最佳解决方案。该算法需要大量的时间和资源,这意味着将需要使用大量的计算能力。如果数据集非常大,推断可能会很慢,因为算法只是开始记忆所有可能发生的情况。当我们用大量参数训练模型时,会出现收敛缓慢的情况,在这种情况下,谁的计算能力更强,谁就能得到更好的模型。这就是为什么当 BP 神经网络采用梯度法时,神经网络有一个缺点,即学习收敛速度慢和容易收敛到局部最小值等问题无法避免。此外,学习因子和惯性因子的选择会影响 BP 神经网络的收敛性,通常由经验决定。因此,BP 神经网络的有效应用受到了限制。提出了一种在 BP 算法中通过逐步增加训练数据和隐单元来避免陷入局部极小值的新方法。此外,论文提出了一种新的可控前馈神经网络模型[10]。在大型模型中,由于推理速度变慢,不可能采用任何移动或嵌入式策略,因此有一些策略可以削减和降低模型的复杂性,但这会降低模型的准确性。在部署之前测试这个过程是非常重要的,否则,它可能会影响业务用例,推断时间可能需要 5 到 10 秒,但要求最多 1 秒。为了获得更好的结果,部署模型时应该考虑到 GPU 或 TPU 优化。
Canny 边缘检测结果是严格的和可证明的,可以用于图像的预测来检测物体的边缘。这用于从图像中剪切出对象的背景。严格地说,这意味着当开发者定制算法过滤器内核时,决定了算法将如何完成任务。这与人工智能边缘检测算法不同,通常,人工智能检测算法使用大量数据,并试图学习对象边缘的特征,并学习这些模式。在这两种情况下,做这项工作都有优点和缺点。例如,当使用 canny 边缘检测时,没有语义理解,这意味着所有边缘都被相同地对待,但是像语义分割这样的神经网络算法工作不同,如果有区域,它应该有边界边缘。但是一些边界是透明的,因为边缘检测算法使用阈值技术来滤除可识别的边缘。如果问题背景很简单,那么使用 canny 算法会更好,因为它很简单。有一个类似奥卡姆剃刀的简单原则。奥卡姆剃刀原则可以追溯到 17 世纪奥卡姆的威廉——这是一个最简单和最直接的解决方案应该是首选的想法,或者对于不同的假设,最简单的或假设最少的将是最好的应用[11]。这意味着证明 OpenCV 算法比人工智能模型更容易,而且当在生产环境中部署模型时,它应该是在云计算服务器中执行的高效和廉价的方法。要在这样的环境中部署,算法的复杂性应该用推理时间来衡量。最先进的深度神经网络(DNNs)有数亿个连接,并且计算和内存都很密集,这使得它们很难部署在硬件资源和功率预算有限的嵌入式系统上[12]。
对于简单的图像上下文任务,canny 边缘检测等简单的 OpenCV 方法可以以最小的努力获得很好的结果。这个库在许多应用程序中使用,这意味着它在生产环境中被广泛试用和使用。该算法是古老的,并从许多角度得到认可,可用于各种各样的问题。由于这种算法是无监督的,所以不需要像神经监督的人工智能模型那样有那么多数据。考虑奥卡姆剃刀原理,最简单的解决方案往往是最好的选择。如果 OpenCV 算法足以解决问题,则无需尝试具有数百万参数的复杂监督人工智能模型。软件成熟度可以通过能力成熟度模型(CMM)来评估。应该对半监督方法进行更多的研究,这种方法不需要大量的数据来获得最先进的结果。考虑到资源有限,不可能部署有数百万个连接的复杂神经网络。总的来说,最重要的事情是研究满足需求的用例,这应该是选择在商业中使用人工智能模型的最佳方法的主要关注点,因为许多模型是最先进的,在生产环境中,它不会满足某些标准。
图像源
文献学
[1]
《精明》,[在线]。可用:https://docs . opencv . org/master/da/d22/tutorial _ py _ canny . html
[2]
“https://www . McKinsey . com/business-functions/McKinsey-analytics/our-insights/conflicting-the-risks-of-the-artificial-intelligence,”[在线]。可用:https://www . McKinsey . com/business-functions/McKinsey-analytics/our-insights/conflicting-the-risks-of-artificial-intelligence。
[3]
“有监督的与无监督的学习有什么不同,”(在线)。可用:https://autome . me/supervised-vs-unsupervised-learning-what-is-the-difference/。
[4]
“直面人工智能的风险”,[在线]。可用:https://www . McKinsey . com/business-functions/McKinsey-analytics/our-insights/conflicting-the-risks-of-artificial-intelligence #。
[5]
“https://arxiv . org/ABS/1710.08864”,【在线】。
[6]
“InceptionV3”,【在线】。可用:https://www . tensor flow . org/API _ docs/python/TF/keras/applications/InceptionV3。
[7]
“https://blogs . NVIDIA . com/blog/2018/08/02/监督-非监督-学习”,【在线】。可用:https://blogs . NVIDIA . com/blog/2018/08/02/supervised-unsupervised-learning。
[8]
“https://automatic Addison . com/how-the-canny-edge-detector-works,”[在线]。
[9]
“https://searchsoftwarequality . techtarget . com/definition/Capability-Maturity-Model,”[在线]。
[10]
" https://IEEE explore . IEEE . org/abstract/document/893417,"[在线]。
[11]
“https://www . techopedia . com/how-does-occams-razor-apply-to-machine-learning/7/33087,”[在线]。
[12]
“https://dl . ACM . org/doi/ABS/10.1145/3007787.3001163,”【在线】。
数据通才的出现
韦氏词典将多面手定义为技能、兴趣或习惯多样化或非专业化的人。对于求职者来说,拥有多样化和非专业化的技能似乎是一种不受欢迎的特质。招聘人员需要根据明确的职位描述找到具备特定技能的候选人。与此同时,求职者应该根据具体的工作量身定制简历,而不是每次申请都提交一份普通的简历。有了这些相互竞争的优先权,多面手就不再是一个理想的特质了。我相信未来会为多面手和专家创造机会。
原因
由于云的采用,这一现实将会出现,预计今年全球市场将超过 3300 亿美元。云是创新加速器。它降低了构建软件的成本,并通过外包大量基础设施工作加快了开发速度。随着软件开发变得越来越容易,利基产品将被开发来解决你能想象到的每一个商业问题。如果解决一个商业问题可以赚钱,那么就会有一个软件被创造出来。这种竞争将压低软件产品的价格,提高工作的自动化程度,并降低企业的成本。这与 2019 年的一项调查一致,其中 87%的组织声称通过使用云服务体验到了业务加速。
云加速的两个最重要的副产品是更多的 API 和更好的用户认证服务。具有 API 的软件工具(例如 Stripe、Twilio、DataRobot)允许软件工程师仅用几行代码就将功能连接到不同的应用程序。同时,针对云托管应用的更好的用户认证服务将允许非技术组织轻松地与第三方供应商合作完成不同的任务。一旦外包第三方工作变得更加容易,非技术组织将面临一个艰难的决定。他们会外包更多的信息技术和数据分析专业知识吗?理论上,当外包比内部生产同样的能力更便宜时,组织应该外包。
效果
我相信这些因素都会导致招聘行为的重大变化。跨组织集成能力的容易性将鼓励许多人专攻某些技能。但是,专业化的成长会留下知识的鸿沟。这种差距将存在于专业化的边缘。谁将负责组织内跨多个专业的决策?一个明显的例子就是非技术组织和他们的第三方供应商之间需要联络或翻译。需要有一个对技术概念有高度理解的员工,再加上其组织核心竞争力领域的丰富知识。让我们称这些人为数据通才。
我设想人们成为数据通才的两种常见途径。
来源: Unsplash
路径 1:先技术,后领域
第一条路是那些在信息技术或数据分析方面拥有广泛知识的人。他们对几个技术领域的理解处于中等水平,如网络安全、数字转换、数据工程或数据科学。他们喜欢学习新的东西,而不是优化一项特定的技能。通常,这些人会加入一个非技术组织,专攻某个领域或行业。他们将通过工作经验、额外的教育或个人爱好获得这些额外的专业知识。
路径 2:先有领域,后有技术
第二种途径是那些在非技术领域(如会计、金融、化学、历史)学习过某个科目的个人。他们被认为是特定领域或行业的主题专家。无论是通过个人爱好还是工作项目,这个人都会发现对数据分析或信息技术的兴趣。假以时日,他们将获得足够的技术概念能力,成为相当于项目经理的人。
最后的想法
- 就我个人而言,我知道有些人遵循了上述两条道路。事实上,我认为自己是一个数据通才,可能会走上第一条道路。在你的职业生涯中,选择是专业化还是拓宽你的技能组合是一个持续的斗争。我敢打赌,数据通才的出现会比你想象的更快。
- 数据通才
专业人工智能风险经理的出现
监管将导致专业人工智能风险经理的诞生,就像金融领域发生的情况一样
当 20 世纪 70 年代和 80 年代受到银行危机的影响时,世界各地的监管者联合起来,就如何管理金融风险制定国际标准。这些标准,现在被称为巴塞尔标准,定义了如何衡量和管理风险的通用框架和分类。这导致了专业金融风险经理的兴起,这是我的第一份工作。最大的专业风险协会,GARP 和 PRMIA,现在总共有超过 250,000 名认证会员,还有许多专业风险经理没有通过这些特定的认证。
我们现在受到数据泄露和数据隐私丑闻的困扰,世界各地的监管机构已经用数据法规做出了回应。 GDPR 是目前的榜样,但我预计一个全球性的监管机构团体将扩大规则,以更广泛地涵盖人工智能,并为如何管理人工智能设定标准。英国 ICO 刚刚发布了一份关于审计人工智能的草案但很详细的指南。欧盟也正在开发一款。有趣的是,他们的方法与巴塞尔标准非常相似:特定的人工智能风险应该得到明确的管理。这将导致专业 AI 风险经理的出现。
下面我将充实一个正式的人工智能风险管理角色的含义。但在此之前,有一些概念需要澄清:
- 世界各地的大多数数据法规都关注数据隐私
- 数据隐私是数据保护的一个子集。GDPR 不仅仅是隐私
- 数据保护是人工智能法规的一个子集。后者也包括算法/模型开发。
全球人工智能监管标准的兴起
巴塞尔框架是国际清算银行(BIS)为促进金融市场稳定而制定的一套国际银行监管标准。国际清算银行本身没有监管权,但其“央行中的央行”的地位使巴塞尔监管成为世界标准。起草标准的巴塞尔银行监管委员会(BCBS)成立于全球金融危机时期。它于 1974 年由 10 位央行行长组成,现在由来自 28 个管辖区的 45 位成员组成。
鉴于最近的隐私侵犯和丑闻,我们可以将 GDPR 视为数据世界的巴塞尔标准等价物。我们可以将欧洲数据保护监管机构(EDPS)视为数据隐私的 BCBS。(EDPS 是 GDPR 的主管。)我预计,随着更多国家颁布数据保护法,一个更加全球化的组织将会出现。
目前还没有领先的算法规定。GDPR 只覆盖了它的一部分。一个原因是很难对算法本身进行监管,另一个原因是对算法的监管被嵌入到行业监管中。例如,巴塞尔规定了算法应该如何在银行中构建和部署。医疗保健领域也有类似的规定。潜在的冲突或重叠规则使得编写更广泛的算法规则变得困难。尽管如此,欧盟、英国和新加坡的监管者正在带头提供关于如何治理和审计人工智能系统的详细指导。
共同框架和方法
《巴塞尔协议一》是在 30 多年前的 1988 年写成的。2004 年的新巴塞尔协议。2010 年巴塞尔协议 III。这些法规为如何建立风险模型、支持这些模型的流程以及风险将如何影响银行业务设定了标准。它为讨论、衡量和评估银行面临的风险提供了一个通用框架。这就是欧盟/英国/SG 发布的详细指南所发生的情况。所有人都在采取基于风险的方法,并帮助定义人工智能的具体风险和必要的治理结构。
新职业和 C 级职位
一个通用的框架允许专业人员快速共享概念、遵守指导原则和标准化实践。巴塞尔协议导致了金融风险经理和专业风险协会的出现。还设立了一个新的 C 级职位,首席风险官(CRO)。银行首席风险官独立于其他高管,通常直接向首席执行官或董事会报告。
GDPR 推动了这项数据隐私的发展。它要求拥有超过 250 名员工的组织有一名数据保护官(DPOs)。这引起了国际隐私专家协会的兴趣。首席隐私和数据官(CPO 和 CDO)也在增加。随着更广泛的人工智能法规的到来,将会出现一波专业人工智能风险经理和围绕它形成的全球专业社区。dpo 是第一次迭代。
一个专业的人工智能风险经理需要或需要做什么?
这项工作将结合金融风险经理和数据保护官员的一些职责和技能。金融风险经理需要技术技能来建立、评估和解释模型。他们的主要任务之一是在开发和部署银行贷款模型时对其进行审计。dpo 必须监控内部合规性,进行数据保护影响评估(DPIAs ),并充当高层管理人员和监管机构的联系人。人工智能风险经理必须在技术上娴熟,同时对法规有很好的理解。
这对创新意味着什么?
AI 发展会慢很多。监管是银行没有站在人工智能创新前沿的主要原因。贷款模型多年不更新,以避免来自内部和外部的额外审计工作。
但是人工智能的发展也会更安全。人工智能风险经理将要求明确定义模型的目的,并且只复制所需的数据用于训练。数据科学家的笔记本电脑中不再有敏感数据。
这对创业公司意味着什么?
专业人工智能风险经理的出现将有利于数据隐私和人工智能审计领域的初创公司。
数据隐私。根据个人数据开发模型将自动需要 DPIA。想象一下,数据科学家在开始一个项目之前必须请求批准。(提示:不太好)为了解决这个问题,数据科学家需要工具来大规模匿名化数据或生成合成数据,这样他们就可以避开 DPIAs。因此,初创公司的机会是双重的:将会有遵守法规的软件需求,也会有为这些法规提供变通办法的软件需求,例如复杂的合成数据解决方案。
【艾审计】。模型准确性是一个与人工智能相关的风险,我们已经有了通用的评估技术。但对于其他与人工智能相关的风险,则没有。审计的公平性和透明度没有标准。让人工智能模型对对抗性攻击具有鲁棒性仍然是一个活跃的研究领域。因此,这对初创公司来说是一个开放的空间,尤其是那些在可解释的人工智能领域的初创公司,他们可以帮助定义标准,并成为首选供应商。
观点是我自己的。同样在 kenn.io
真空的能量
量子真空涨落和卡西米尔效应
在这篇文章中,我将描述真空的量子能量的一些重要结果。后者存在于整个宇宙的背景中。更具体地说,我将在量子场论 (QFT)中解释所谓的卡西米尔效应。卡西米尔效应是由于电磁场的量子真空波动而在两个紧密平行的不带电导电板之间作用的小吸引力。更具体地说,不断出现和消失的波动的虚拟粒子(根据海森堡的不确定性原理,在短时间内违反了系统的能量守恒)对两个平行板施加了一种辐射压力。
图 1:平行板之间卡西米尔力的图示(来源)。
卡西米尔效应是由于理想导电板的存在而引起的电磁场真空期望值ε的变化δε的结果。变化产生了板之间的卡西米尔力(因为真空预期本身是不可观测的)。
图 2:根据海森堡测不准原理(来源来源),波动的虚粒子进出存在并因此在短时间内违反能量守恒。
量子标量场
为了简单起见,我将遵循 Zee 并计算真实无质量标量场 φ 而不是电磁场的卡西米尔力。原因是标量场是最简单的可能量子场。它由标量函数 φ ( x , t )描述,其中自变量 x 和 t 分别为,,空间和时间坐标。该场符合克莱因-戈登方程(KG):
方程 1:大质量标量场φ( x ,t)的 Klein-Gordon 方程。
如果场 φ 无质量,则该等式变为:
等式 2:无质量场φ( x ,t)的 Klein-Gordon 等式。
在这种情况下,经典的哈密顿量是:
方程 3:经典实无质量标量场的自由哈密顿量。
规范量子化
在这一节,我将遵循一个过程来量子化一个经典场论称为规范量子化。对于那些熟悉普通(非相对论)量子力学中的量子化的人来说,这个过程是类似的。如果 QFT 我们处理变量,即场和它的共轭动量
方程 4:场φ及其共轭动量π。
作为算符并强加规范的换向关系:
等式 5:遵循标准量子化过程的算符上的正则对易关系。
量子标量粒子的一个例子是希格斯玻色子。
图 3:希格斯玻色子探测。在这种情况下,一个质量为 126 GeV 的粒子产生了,然后,它衰变为两个 Z 玻色子,正如预期的那样,如果观察到的粒子是希格斯玻色子(来源)。
真空的能量是通过对真空状态取期望值获得的:
方程式 6:真空的能量。
用创造和湮灭来表达这个场,经过一些简单的代数运算,我们得到:
等式 7:总真空能量,由对谐振子的零点能量的所有动量和整个空间的积分给出。
这是谐振子的零点能,对所有动量和所有空间积分。注意积分发散。在实践中,为了获得具有有限能量的哈密顿量,我们通常从 H 中减去该期望值,因为该期望值是不可观测的。
等式 8:从哈密顿量中减去它的无限期望值。后者发散。
卡西米尔效应
虽然真空能量是不可观测的,但它的变化是可以测量的。只要我们适当地调整场的边界条件,就可以得到这些变化。这是我们将在本节定量讨论的卡西米尔效应的基础。卡西米尔效应以荷兰物理学家亨德里克·卡西米尔的名字命名。
图 4:荷兰物理学家亨德里克·卡西米尔(来源)。右边是他的原创论文(来源)。
为了计算这种能量变化,考虑下图所示的实验设置。有两个金属位置 I 和 II 被距离 L 分开,在它们之间有额外的板 III。如图所示,板 I 和板 III 之间的距离为 x 。
图 5:由 L 隔开的两个金属位置 I 和 II,中间有一个额外的金属板 III(基于来源)。
让我们考虑一下,板之间的场就是电磁场(在我们的计算中,为了简单起见,我们将回到标量场)。导电板的存在对场的波矢施加了条件。动量模式被量化为:
方程式 9:磁场的动量因金属板的存在而量子化。
让我们也忽略 y 和 z 尺寸,以避免不必要的混乱。总零点能读数
等式 10:总零点能量,动量因金属板的存在而量子化。
因为我们知道相应的模式是
等式 11:贡献系统能量的模式。
现在,高频模式泄漏出来。这可以通过在模式中引入指数衰减因子来解决。换句话说,高频波不能保持在板块内部(它们看不到它们)。然后,我们通过选择以下正则化来移除具有λ << a 的模式(其中 a 是未知参数):
等式 12:使用指数来截止高能量模式。
让我们用等式来评估 f ( x )。12:
等式 13:和 f(x)的计算。
获得等式中的能量。10、我们类比计算 f ( L -x】。为了找到板之间的卡西米尔力,我们将 E 相对于 x 进行微分:
等式 14:图 5 中板 I 和板 III 之间的卡西米尔引力的近似表达式。
应该注意,正则化参数从力的最终表达式中消失了。这(幸运地)允许实验者测量 F.
一些快速观察:
- 两块板之间的卡西米尔力是吸引的(等式中有一个负号。14)
- 我们使用的指数正则化有一个物理解释。根据 Zee 的说法,如果波以足够高的频率振荡,电子“跟不上”,板就不再“完全”导电。
我的 Github 和个人网站 www.marcotavora.me 有一些其他有趣的材料,既有关于物理的,也有关于数学、数据科学和金融等其他主题的。看看他们!
回归分析中的调整 R 平方之谜
在数据科学家中,调整后的 R 平方比 R 平方的可信度背后的真正煽动
马库斯·斯皮斯克在 Unsplash 上的照片
“真理不在于细节的精确;而是传达一个正确的印象。”
亨利·阿福德
介绍
回归分析是最基本但最重要的机器学习技术之一,它仍然占主导地位,并为行业中的许多高级研究开辟了道路。虽然有一些先进的回归技术已经用于预测连续变量,如 bagging、boosting、support vectors 等,但如果数据在多维空间中表现为直线形式,线性回归原理仍然是大多数研究人员的首选。线性回归模型最广泛使用的评估指标之一是 R 的平方又名决定系数。r 的平方被认为是一个拟合优度度量,在大多数情况下范围在 0 到 1 之间。R 平方值越高,模型的一致性和预测能力越高。
但与机器学习中的大多数其他评估指标一样,R 平方也有一些限制,这使得它有时通过用极高的值表示一个贫乏的模型来给出不精确的指示。在本文中,我们将讨论 R 平方的计算过程、其局限性,以及如何使用一种称为调整后 R 平方的高级评估指标来克服这些局限性。
目录
- 回归分析中 R 平方的直观性
- R 平方的极限
- 调整后的 R 平方的重要性
回归分析中 R 平方的直观性
我们将从一个示例用例开始。假设我们有一个机器学习问题,使用一个人的体重、父亲的身高和母亲的身高作为自变量来预测他/她的身高。
我们有以下研究数据-
回归分析的输入数据(在 MS Excel 上显示)
这里,我们的目标变量是身高,预测变量是-
- 父亲的身高(厘米)
- 母亲的身高(厘米)
- 人的重量(千克)
从数据中可以清楚地看出,预测变量和目标变量之间存在线性关系。因此,使用多元线性回归算法来构建模型以服务于我们的预测目的是一种典型的想法。
让我们假设我们有一个 0.7 的训练比,我们认为前 7 个记录是训练数据,其余的 3 个记录是测试数据。
培训数据(在 MS Excel 上显示)
测试数据(在 MS Excel 上显示)
我们完成了线性回归模型,现在,我们需要评估我们的模型,以了解我们的预测与现实的接近程度。
接下来是 R 平方,这是衡量预测强度和接近程度的最流行的性能评估指标之一。
R 的平方= 1- (SSR/SST)
在哪里,
SSR =残差平方和
SST =总和的平方和
考虑我们对测试数据的预测如下-
带有预测结果的测试数据(在 MS Excel 上显示)
让我们使用 sklearn 库计算我们模型的 R 平方(之后我们将讨论其数学推导的深入直觉)
#Import necessary packages and libraries
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression#Create input data as a dictionary
input_dict =
{
"PersonId": [1,2,3,4,5,6,7,8,9,10],
"Father's height" [136.5,149.8,174.07,168.05,185.8,170.45,180.75,148.15,154.46,158.11],
"Mother's height" : [126.5,143.8,167.07,165.05,182.8,160.45,170.75,140.25,148.46,147.11],
"Weight" : [50,60,79,85,60,65,75,55,62,67] ,
"Person's Height": [116.5,139.8,184.07,198.05,145.8,160.45,180.75,128.15,144.46,156.11]}#Convert dictionary into a pandas dataframe
data = pd.DataFrame(input_dict)
用于回归分析的熊猫数据框格式的输入数据(在 Jupyter 笔记本上显示)
#Split the data into train data and test data
X_train = data.head(7)
X_test = data.tail(3)#Remove UniqueId and target variable
del X_train["PersonId"]
del X_train["Person's Height"]#Remove UniqueId and target variable
del X_test["PersonId"]
del X_test["Person's Height"]y_train = data.head(7)
y_test = data.tail(3)#Remove UniqueId and predictor variables
del y_train["PersonId"]
del y_train["Father's height"]
del y_train["Mother's height"]
del y_train["Weight"]#Remove UniqueId and predictor variables
del y_test["PersonId"]
del y_test["Father's height"]
del y_test["Mother's height"]
del y_test["Weight"]#Perform linear regression using sklearn library
regressor = LinearRegression()
regressor.fit(X_train,y_train)
predictions = regressor.predict(X_test)#sklearn's inbuilt method for computing the RSquared of the model
rsquared = regressor.score(X_test, y_test)#Predictions of testdata
print(predictions)
测试数据的预测值(在 Jupyter 笔记本上显示)
#R Sqaured of the model
print(rsquared)
模型的 r 平方值(在 Jupyter 笔记本上显示)
这里,R 的平方= 0.963。根据这一指标的特征,这看起来是一个非常好的值。
但是,这是否足以证实关于该模型预测能力的信心呢?
号码
让我们检查一下这个模型调整后的 R 的平方
#Adjusted RSquared of the model
n=len(data) #number of records
p=len(data.columns)-2 #number of features .i.e. columns excluding uniqueId and target variable
adjr= 1-(1-score)*(n-1)/(n-p-1)
print(adjr)
模型的调整 R 平方(在 Jupyter 笔记本上有插图)
哎呀!!!它小于 R 的平方。此外,从 R 的平方(0.963)到调整后的 R 的平方(0.945),置信度下降了大约 2%。
- 为什么调整后的 R 平方会下降?
- 这种差异所传达的真实直观意义是什么?
- 它将如何反映在实时用例中?
- R 的平方是否总是属于 0 到 1 之间的某个值或者有什么我们经常遗漏的例外情况?
让我们知道答案…
R 平方的极限
R 的平方= 1- (SSR/SST)
这里,SST 代表总和的平方和,它只表示“预测点与目标变量的平均值相差多少”。均值在这里不过是一条回归线。
SST = Sum(平方(每个数据点——目标变量的平均值))
数学上,
在 MS Word 上显示
在哪里,
n =观察次数
y =目标变量的观察值
y̅ =目标变量的平均值
举个例子,
如果我们想建立一个回归模型,以体重作为独立变量来预测一个人的身高,那么一个不需要太多努力的可能预测就是计算属于我们样本的所有人的平均身高,并将其视为预测值。下图中的红线显示了属于我们样本的所有人的平均身高。
在 MS Paint 上显示
现在来看 SSR,
SSR 代表残差平方和。这个残差是从我们用数学方法(线性回归、贝叶斯回归、多项式回归或任何其他方法)构建的模型中计算出来的。如果我们使用复杂的方法,而不是简单的方法,比如均值,那么我们的准确度就会提高。
SSR = Sum(平方(每个数据点—回归线中每个对应的数据点))
数学上,
在 MS Word 上显示
在哪里,
n =观察次数
y =目标变量的观察值
ŷ =目标变量的预测值
在 MS Paint 上显示
在上图中,让我们假设蓝线表示通过高级数学分析的复杂模型的预测。我们可以看到它比红线有更高的精度。
现在来看公式,
R 的平方= 1- (SSR/SST)
这里,
- SST 会是一个很大的数字,因为它是一个很差的型号(红线)。
- SSR 将是一个小数字,因为它是我们经过大量数学分析后开发的最佳模型(蓝线)。
- 所以,SSR/SST 会是一个很小的数(每当 SSR 降低的时候就会变得很小)。
- 所以,1- (SSR/SST)会是一个很大的数字。
- 所以我们可以推断,每当 R 的平方变高,就说明模型太好了。
这是一种一般情况,但在存在多个独立变量的许多情况下,这是不适用的。在这个例子中,我们只有一个自变量和一个目标变量,但在实际情况下,我们将有 100 个自变量作为一个因变量。实际问题是,在 100 个独立变量中
- 有些变量会与目标变量有很高的相关性。
- 有些变量与目标变量的相关性很小。
- 此外,一些独立变量根本不相关。
如果没有相关性,那么发生的是——“我们的模型将自动尝试建立因变量和自变量之间的关系,并继续进行数学计算,假设研究人员已经消除了不想要的自变量。”
举个例子,
为了预测一个人的身高,我们将有以下自变量
- 权重(高相关性)
- 电话号码(无关联)
- 位置(低相关性)
- 年龄(高相关性)
- 性别(低相关性)
在这里,只有体重和年龄足以建立一个精确的模型,但该模型将假设电话号码也会影响身高,并在多维空间中表示它。当通过这 5 个独立变量构建回归平面时,的梯度、截距、成本和残差将自动调整以提高精确度。当精度得到人为提高时,显然 R 的平方也会增加。
在这种情况下,回归平面将接触多维空间中原始数据点的所有边缘。这将使 SSR 成为一个非常小的数字,最终将使 R 的平方成为一个非常大的数字,但是当引入测试数据时,这样的模型将悲惨地失败。
这就是为什么高 R 平方值不能保证精确模型的原因。
调整后的 R 平方的重要性
为了克服上面提到的挑战,我们有一个额外的指标叫做调整的 R 平方。
调整后的 R 平方= 1—[(1—R 平方) (n-1) ) / (n-p-1) ]*
在哪里,
- p =自变量的数量。
- n =数据集中的记录数。
对于一个简单的表示,我们可以这样重写上面的公式
调整后的 R 平方= 1 — (A * B)
在哪里,
- A = 1 — R 的平方
- B = (n-1) / (n-p-1)
从上面的公式,我们可以冲动地考虑以下推论——
- 当预测变量的数量增加时,会降低 b 的整体值。
- 当 R 的平方值增加时,它将减少 a 的整个值。
- 因此,从技术上讲,如果 R 的平方很高或者预测变量的数量很高,那么 A 和 B 的值都会受到惩罚。
- 如果我们把 A 和 B 相乘,那么它将是一个小得多的数。
- 如果我们从 1 中减去 A 和 B 的乘积,那么它肯定小于 1,除非 p = 1。
- 不仅 R 平方和经调整的 R 平方之间的差异,而且经调整的 R 平方本身的值都可以被认为是代替 R 平方的限制的拟合优度度量,用于评估模型的设想一致性。
总的来说,当自变量的数量增加时,它会惩罚公式,所以总价值会下降。受自变量增加的影响最小。因此,调整后的 R 平方将比 R 平方更准确地指示模型的性能。
R 的平方可以是负数吗?
是的。在一些罕见的情况下,它也可以是负值。
因为,R 的平方= 1 — ( SSR / SST)
它是基于这样的假设计算的,即目标的平均线是 y 轴的垂直线,是模型在最大风险情况下可能具有的最差拟合。SST 是这条平均线和原始数据点之间的平方差。类似地,SSR 是预测数据点(通过模型平面)和原始数据点之间的平方差。
SSR/SST 给出了一个比率,该比率表明,“相对于 SST,SSR 如何最差?”。如果你的模型能在某种程度上建造出一架相对较好的飞机,那么在 99%的情况下,SSR < SST。如果你把它代入方程,它最终会使 R 的平方为正。
但是如果 SSR >SST 呢?这意味着你的回归平面比均值线(SST)差。在这种情况下,R 的平方将是负的。但这种情况只发生在 1%或更少的病例中。
结论
尽管 R 平方是一种众所周知的、被广泛接受的性能评估方法,但在一些不属于它的范围的情况下,它的推理传递能力有所下降。然而,要接受的是,没有一根魔棒可以 100%完全代表回归模型的固有倾向。调整后的 R 平方是这样一个指标,它可以在很大程度上适应 R 平方的局限性,并且仍然是全球数据科学家青睐的主要原因。
尽管这不在本文的讨论范围内,但请看看我们在回归和预测中通常使用的其他一些性能评估指标 这里 像 MAE、MSE、RMSE、MAPE 等。除了我们到目前为止在这里讨论的内容之外,它将给你一个处理连续变量的模型评估的更先天的视角。
我希望现在你对 R 平方和调整后 R 平方的原理和推导,以及如何在正确的位置和正确的时间实现它们有了直观的理解。
您可以通过以下平台与我联系-
参考
- Sougata Deb,一种新的稳健 R 平方测度及其在线性回归中的应用(2016)
- Kazhurio Ohtani 和 Hisashi Tanizaki,R2 和调整后的 R2 在线性回归模型中的精确分布,带有多元误差项(2004 年)
- Carrodus,M.L .和 Giles,D.E.A ., 回归扰动自相关时 R2 的精确分布 ,《经济学快报》,38,375–380(1992)
感谢阅读!!!
第三世界国家的数据科学家角色之谜
数据科学家的社会概念如何根据其环境的需要而变化
佩里·格罗内在 Unsplash 上的照片
成为一名数据科学家很酷。
或者这是我在大学的看法,我有一个模糊的想法,一个数据科学家不仅实现了模型,而且还创造了这个惊人的算法,基本上可以使数据变成可以解决每个人问题的仙尘但是男孩我错了。作为一名数据科学家,对一家公司的不同领域来说可能意味着不同的事情,但这也取决于一家公司的结构方式。我可以向你保证,在谷歌做数据科学家和在创业公司做数据科学家没有任何关系,他们的职能变了,职责的数量和性质变了。基本上,数据科学家的职位可以根据你作为客户的需求或他们作为公司的要求而变化和调整。
我是一个 22 岁的女人,住在一个叫做危地马拉的第三世界国家,就在分隔北美(墨西哥、美国和加拿大)和南美(巴西、哥伦比亚、秘鲁等)的小桥上。)我们是中美洲的一部分,虽然世界上大多数人无法区分我们的国旗和大多数其他中美洲国家的国旗,但我们的经济确实很不一样,因为我真的不想谈论细节,所以我只想说,我们很不一样。
身处第三世界国家意味着你不得不每天正视贫穷和暴力,但这也意味着你有更大的框架来用创造性的想法来解决你的世界问题,这些机会可以通过稍微改变你在更先进国家的想法来填补,这从未停止让我感到惊讶。在美国,他们有优步,嗯,我们有 20 多个这样的应用程序,你有优步吃,我们有哥伦比亚版本,再加上 15 个。作为这些实施的一部分,工作人员中会产生新的职位,例如我现在担任的数据科学家职位。
数据科学家可以变形
是的,但只有真正的数据科学家才能通过不同类型的工作实现巨大的变化,无论你是在医疗领域,还是在技术领域,还是与 finch 合作,或者从事任何你正在从事的工作。在这里,你可以看到一个已经学习、测试、应用并获得如何实现模型的知识的人与另一个只是碰巧在公司获得数据科学家职位的普通开发人员之间的差异。
数据科学家的角色是 分析 、 解构 、 构建 和 创建 新的数据处理方式,以便获得他们期望的答案,假设是的,他们知道他们的目标变量是什么。但在第三世界国家,真正的交易和模仿可能会混淆不清。这是一个混合种族,有人大喊数据,有人盲目假设每个模型都一样,或者模型所说的是宇宙中最终的真理,这是第三世界国家需要的错误类型的数据科学家。一个持怀疑态度但不极端的数据科学家,一个谨慎但知道自己所冒风险的数据科学家,一个在模型的不同变化中强化自己知识的数据科学家,或者一个知道什么时候“模型在说谎】的数据科学家,是第三世界国家需要的那种数据科学家。一个知道计算机是一台旨在授权而不是奴役人类分析的机器的数据科学家,一个在随机丢弃变量之前了解业务的数据科学家,一个知道在美国经济中奏效的数据科学家不会有与中美洲国家相同的行为,这是第三世界国家应该拥有的数据科学家。
这就是第三世界国家的数据科学家的角色之谜。
史诗般的数据获取任务
一个人去很危险!拿着这个。
(摄影:兰迪·欧)
特别感谢在 twitter 上发信息给我这个问题的人,他让我把这个问题作为一篇文章的出发点。探索真实的场景真的很有趣,我总是可以在匿名化细节方面有一点创造性的自由。
这是他们(转述的)问题陈述。
我最近成为了一家公司的数据分析师。看起来我需要先做大量的组织数据库创建工作。很多数据都在不同系统的 Excel 文件里。我想收集一切,组织起来,让用户可以查询和可视化。你对数据库,工具,设计方法有什么建议吗?
所以这个问题有两个部分:1)显性问题:如果我要开始这样一个史诗般的追求来增加我成功的机会,要做些什么;2)隐性问题:现在做的最好的事情是什么?
这类问题的一般形式类似于一个大型 RPG 游戏,你被丢进了一个全新的世界,一切都闪闪发光,看起来很重要,并且缺乏任何由神强加给你的更强的故事情节任务,你被派去从世界各地获取物品以换取未指定的奖励。我就是这样花了 100 个小时做支线任务和关卡打磨的,这作为休闲活动可能不错,但对你的职业生涯可能不理想。
我认为有一些项目管理经验的人很可能会在他们的脑海中响起一些警钟“警告!无界范围!”
所以让我们先从最重要的问题开始深入研究:
这可能是这项努力的关键问题。不着手一项没有真正目标的巨大任务,也有办法变得有效和有影响力。
将所有东西放入“一个集中的地方,每个人都可以共享,而且功能更强大”是一个看似自然的目标。“现在一切都很困难,因为它分散在各地。甚至开始做分析工作都需要工作,这就是为什么一切都很糟糕!”
以我个人的经验,这样的项目也是项目走向死亡的地方。我坚信,一旦你把“数据仓库”这个词和一个项目联系起来,你失败的几率就会大大增加。我这么说是作为一个在我的职业生涯中设计和建造了三个该死的东西的人。我希望没有第四个。
DW 项目困难的原因与技术难度关系不大。都符合知名模式。技术部分相对容易。
- 数据被路由到为分析而设计的中央系统。
- 集中式系统只是一个大型的类似数据库的服务。
- 需要编写大量烦人的数据摄取 ETL 工作。
- 有接口可以提取数据并进行分析。
- 最后,还有大量的维护和保养。
- 很难在一长串旧的数据存储/分析系统和类似于现代数据仓库的东西之间划清界限,但是到了 20 世纪 90 年代,所有的部分和规模都准备好了。那是至少 30 年的技术改进。现代系统只是采用了核心思想,并以比以前更好的规模、成本和易用性来完成它。
人类制造了问题,也需要人类来解决它
这些项目困难的主要原因是因为这些假设忽略了事情为什么会变得像最初一样“混乱”的最人的部分。对盛大的渴望“让我们扫除所有的丑陋,让每个人都在同一页上!”愿景部分源于不理解不同的系统是由不同的人创建的,以满足特定的需求。这些系统随后不断发展,直到它们在有限的范围内工作得相当好。但是,由于它们在开始时从未协调过,现在让它们一起工作需要付出巨大的人力成本。
每个输入数据集都包含以下内容:
- 拥有独特需求和不同合作意愿的所有者
- 需要理解和协调的新的或稍有不同的术语定义和度量
- 需要克服的不同访问权限
- 围绕数据的不同人工流程(收集、输入、使用)
与所有这些人一起工作并获得想要的结果需要很多技巧、耐心和资源。这些技能中有许多与软件开发或数据分析无关。因此,当您考虑将所有东西都收集到一个系统中时,这就是您要注册的。
你将与工程部门的 Alice 一起工作,接触生产系统的分析方面,并在使用系统时调试所有数据问题。然后,您将与客户支持部门的 Bob 交谈,了解带有定制内部工具的第三方支持票证系统,以及维护该系统的工程师已于上个月离职。然后,财务部的 Eve 完全忙于 B 轮融资的准备工作,没有时间解释本季度的任何财务数据。
一旦你克服了障碍,理解并合并所有这些数据源到一个地方。然后你就陷入了维护系统的困境,因为你是唯一一个知道这个东西如何工作的人,没有人投资来保持它的更新。
好心没好报。
没人说数据仓库一定会从你的额头上冒出来,准备好向世界提供智慧。正如我在上面提到的,这样做通常是致命的。你可以称之为,头脑分裂。相反,通过调用由来已久的项目管理咒语“限制范围”,有办法生存下来。
确定一些核心业务问题,首先瞄准这些问题
虽然任何组织内部都有许多功能和流程,这是一个无尽的分析可能性的海洋,但应该只有少数核心功能支持其他所有功能。无论是小工具的生产还是订阅的销售,有些东西天生就比其他东西更重要。如果它变坏时严重威胁到企业的生存,那么它可能值得关注。
识别这些系统,并想出一些好的分析来帮助人们更好地理解它们。我们的目标是首先构建出支持那些核心业务问题的东西。可能是了解成本、销售、重复销售、获得新客户、保持现有客户等。最有可能的不是办公室每个月用多少咖啡过滤器(我肯定你能在办公室经理的数据里找到这方面的一些数据。)
通常,围绕这些核心业务问题的数据仅位于少数系统中。它们甚至可能在单个系统上,因为这是业务的核心,一切都围绕着核心发展。你真的只想在最好的情况下一次处理一个系统,最坏的情况下一次处理两个系统。
在你开始编码之前做一些分析
既然你的范围被限制在针对少数几个问题的少数几个问题上,接下来你需要做的是做一些基本的分析。
挑一个问题,任何让你感到兴奋的。下一步你将需要这种动力。您将进行一次性分析来检验这个问题。也许是关于客户保持,或者销售时间,或者获取客户的成本。经历获取数据的实际机制,理解它是如何工作的,最重要的是,使用数据创建一个别人觉得有用的工件。
这是你的原型。
通过这样做,你会学到很多关于这些系统如何工作的知识,这将使剩下的过程变得更容易。你很可能需要与人们交谈,询问他们各种数据的含义,哪里不可靠,哪里可以改进数据收集。你会在数据中发现奇怪的错误,这会破坏你的分析管道。即使是做最粗糙、最简单、最随意的分析,所花的时间也比你想象的要长得多。在此过程中,你可能要花数周时间来修复 bug。
但是不要绝望,这些都是你在开始构建数据仓库时必须做的工作,但是现在你做这些是为了一个具体的目的,而不是未来一个模糊的抽象系统。有一个单一的可交付成果,终点在望。
最后,一旦您创建了您的分析结果,您就可以向人们展示了。希望他们对你创造的东西感到兴奋,因为它帮助他们更好地理解某些东西,或者提供洞察力。他们甚至可能有后续问题,你必须进一步分析。但是猜猜你刚刚做了什么?你已经为你的项目制造了刺激。您已经向他们展示了您可以如何帮助他们,如果您需要他们为您的数据仓库改变他们的数据流程,他们将来会更愿意帮助您。
自动化您的分析
既然您实际上已经完成了端到端的分析,那么您应该对系统足够熟悉,对如何自动化它有一个很好的想法。所以去做吧。
当你这样做的时候,你会发现新的问题和问题。最重要的一个问题是“等等,我如何在什么系统上自动化这些东西?”如果你是第一个人,可能没有任何基础设施。是时候戴上数据工程师的帽子,解决问题了(同时与运营人员一起工作)。
这时,您可以开始评估您的技术需求。你使用简单的关系数据库吗?(答案:99%的情况下是)。你想用什么语言?谁负责维护系统?
这里有大量的细节和潜在的选择。我唯一能强调的是,咨询你的工程伙伴!你想避免成为异类。
如果你是唯一知道 R 的人,而其他人都在用 Java,请不要在没有超级重要迫切的理由下使用 R。这样做意味着要么自愿永远做唯一维护这个系统的人,要么你得教别人一门他们不懂的语言。这也适用于您的其他基础设施。如果你是一个 SQL Server 商店,没有一个好的理由不要启动 PostgreSQL 实例。
幸运的是,数据仓库解决方案非常丰富。每个云 服务 提供商都提供完整的解决方案,你想花多少钱就花多少钱。您可以使用开源技术构建自己的数据库,包括一个简单的 PostgreSQL 数据库。选择适合您的环境和预算的产品。
一旦你完成了所有这些工作,并且最终完成了自动化,恭喜你,你已经创建了一个数据管道!你甚至有等待消费输出的用户。
重复,直到你厌倦了这一切
现在您已经有了一个处理分析的系统,您可以考虑扩展了。找到一个新的分析,一个你想要的新结果,测试它,构建它,自动化它,并将其集成到你的系统中。也许这将涉及到将新的数据源集成到您的系统中,或者您可能只是对现有数据进行新的分析。
一遍又一遍地重复这个动作。这有点累人,但还是那句话,由于范围有限,总会有尽头。第二次,你也将不得不做更少的数据工程。
那些像 AWS Redshift、GCP BigQuery 这样的大数据仓库分析数据库呢?
如果它们符合你的需要,你可以用它们。它们是为大量数据而设计的。它们通常很好,因为您可以将 CSV 文件放入这些系统,它们会接收这些文件,但会为您提供一个非常灵活的 SQL 界面。由于 CSV 是数据的通用语言,它可以使您的许多 ETL 工作变得更容易。我曾经不得不编写原始的 MapReduce 作业来做红移和 BQ 在 SQL 中做的事情。从这个背景来看,这些新工具是惊人的。
同时,您将为这些惊人的特性付费,包括日志存储和运行查询的成本。那些 的账单可不简单。它们被宣传为数据仓库解决方案的基础技术,但是如果您的数据源主要是 Excel,它们就完全是多余的。( Excel 每张工作表仅支持约 100 万行,这很容易放入笔记本电脑的内存中。)
我的建议是从便宜得多的小型本地关系数据库开始,您可以迁移和扩展,稍后会有一些不适。
提前计划
您可以在编程和系统架构方面提前做一点计划。您可以避免编写太多一次性代码,因为您知道您的数据管道和系统将被其他系统重用。
从一开始就设计一定的灵活性。这里或那里的一些额外的抽象层将在将来为您节省一些重构。平衡抽象层次是一种艺术形式,你当然可以走得太远,但是只需要几分钟就可以把事情分成函数和方法,而不是一大堆意大利面条。避免让现在的自己给未来的自己带来痛苦。
我使用的一个很好的经验法则是在关注点分离中相当 UNIX-y,着眼于在未来开发代表不同数据系统的功能模块。然后,可以根据需要交换/迭代这些模块。
与人合作
人们会创造或破坏这个过程。如果你建立的东西不符合他们的世界,他们不会使用它。你将依赖他们给你数据,所以没有他们的投入就不要打乱他们的流程。当您的管道完成时,您将依赖它们来警告您是否有变化。
如果人们投资于你的新系统,是因为他们直接从中获得价值,那么他们会有兴趣帮助你保持所有移动部件平稳运行。管理这种关系至关重要。如果人们不再关心,事情就会开始变糟。
这需要时间
这不是一个一周的项目。确保参与的每个人都有现实的期望。确保他们知道事情会因为错误和问题而脱轨。
然后就是继续下去的问题了。祝你好运!
最初发表在兰迪的免费每周时事通讯上, 【计数玩意儿】 ,内容涵盖了数据和技术中较为平凡、重要的部分。
EPL 还有一周就要开始了,我们的算法 2.0 已经准备好了
我们的金钱球方法到幻想的 EPL(队 _id: 2122122)
如果这是你第一次登陆我的幻想 EPL 博客,你可能会想看看我的媒体档案中的一些我在上一季开始时写的 EPL 博客(GW1-GW9),以熟悉我们的整体方法和我们随着时间的推移所做的改进。在这个项目中,我最初的犯罪搭档是 Andrew Sproul,他和我一样对数据科学、人工智能和梦幻运动充满热情。今年,一名新的 EPL 爱好者——普尔基特·查布拉——加入了这个团队,并为算法添加了许多新鲜的想法和优化建议。谢谢你到目前为止所做的努力,Pulkit,我期待着和你一起努力,从长远来看,尽可能地改进这个模型!
什么是新的?
在过去的两个赛季中,我们的算法已经发展了多次,因为我们一直在寻找方法为我们的决策过程添加更多的数据,并提高我们预测的准确性。也就是说,我们很兴奋地分享我们在过去几个月中所做的一些新变化。下面是我们今年增加的一些新指标的列表:
裁判统计: 【每场比赛的牌数】和【每场比赛奖励的点球数】过去 3 个赛季的统计数据——我们的想法是 在裁判更有可能给予 1 个或更多点球的比赛中,让我们队中的球员成为点球手。此外,我们需要小心从裁判可能会给很多黄牌或红牌的比赛中增加球员。
团队处罚统计:【total _ penalties _ award】和【Penalty _ conversion _ ratio】—想法是将该统计与裁判统计【每场比赛奖励的处罚】相结合,从历史上获得更多处罚 和比赛裁判具有 高“pen _ award coefficient”的团队中挑选球员甚至队长
赌注系数:目前,我们正在整合来自 8-10 家主要赌注公司的平均系数,分别为【W/L/D】以及 低于 2.5/超过 2.5 统计数据——这里的想法是让更多来自团队 的进攻型玩家 ,以及更多防守型 此外,我们试图从 胜率高 的队伍中吸收更多玩家。
预测模型:现在我们使用两个 ML 模型的预测,基于历史数据和每个球员的组合概率统计,例如( 上场 60 分钟以上的机会得分机会助攻机会不失球机会加分机会等。 ) —这里的想法是 不同 ML 模型的平均组合预测值往往比一个微调模型本身的预测值更准确 。我们的 ML 模型预测未来 n 周 的 预计点数,以及 每个玩家的预计 ROI(每 1M 成本的点数)。**
预测不确定性:我们采用每个玩家的每个模型的预测 之间的 平方差,并使用该数字来分配预测 的不确定性级别,以便在选择最终阵容时使用——这里的想法是,如果两个模型为给定玩家输出非常相似的值,那么我们更愿意相信那些预测点数。******
改进的优化器:我们调整了优化算法,使其能够 接受大量新的额外输入,并且在逻辑上更加智能和灵活 。在过去,该算法通常会输出每个游戏周 15 名球员的最佳阵容,旨在优化整个阵容的 ROI。经过最近的变化,我们现在可以优化: 团队形成,每个位置的廉价填充人数,预计投资回报率,预计总点数,预计奖金点数,固定转让次数等。— 可能性是无穷无尽的,如果我们能够获得数据,那么我们就可以向它优化!
有用的统计数据
由于我们今年在算法中加入了很多新的统计数据,随着时间的推移,这个博客将会有更多的统计数据和图表,更少的文本 。这第一个帖子可能会有更多的文字,因为我们选择介绍新的变化,并为赛季的剩余部分定下基调。请看下面的一些有用的统计数据,我们在为 GW1 挑选队员时考虑到了这些数据:
博彩赔率
正如你所看到的,我们将尝试积累来自 队的玩家,他们有超过 50 %的机会赢得 如 LIV、ARS、CHE、TOT 和雷 。
拥有 的队伍以更高的概率抽到了 ,特别是当比赛是 结合高赔率为 2.5 以下的 时,可能会有 适合选择防守球员 因为如果比赛以 0:0 结束,那将会产生大量的加分。结合 下方的 下/上图,我们可以识别出以下 概率较高的至少一场不失球的比赛——舒 vs、 、 和 哭 vs .苏。
反过来,我们可能希望有更多的高赔率超过 2.5** 的游戏中的攻击玩家,比如 丽芙 vs 李,FUL vs. ARS,vs 车。****
裁判统计
正如我们提到的,我们可能希望在比赛中有 甚至队长这样的主罚者 ,其中 裁判更有可能判罚至少一个点球 。这个属性与下面每个团队的 【判罚】 和 【判罚转换率】 属性结合起来会变得更加强大:
看到两位裁判“宠儿”——曼联和曼城在那个榜单** 附近,我一点都不惊讶,但是看到 莱斯特和 水晶宫在那里,我绝对感到惊讶。事实上,这里有一个 体面的球队名称列表 在平均值 19.42 以上的 ,所以为了缩小我们对球员的选择,让我们也看看下面每个球队的惩罚转换率:****
上面的图表让事情变得有点有趣,当谈到(两者都接近 70%的成功率)时,曼城 和曼联 现在下降到图表底部附近。因此,这引起了一些关于因错失点球 而被罚 负分的担忧,并使成功率接近 100%的 球队的点球手,如、BUR、LIV、CHE、TOT 和 CRY ,从长远来看更具吸引力。**
即将到来的比赛的裁判分配还没有上线,但是我们会在他们可用的时候加入他们。下面的最后一个统计,我们可能会考虑,是每个裁判的——这里的想法是,如果我们 预计两个强硬对手 之间会有一场激烈的比赛,加上一个喜欢给他们看牌的裁判,我们可能要小心地从这些比赛中选择球员。当心裁判 马德利、胡珀、蒂尔尼、斯科特、梅森和朋友 ,他们过去 3 个赛季场均 7 张或更多牌。**
团队统计
就像去年一样,我们将着眼于调整后的 对手难度分数(FDR),考虑到每支球队在未来 3 场比赛中即将到来的赛程, ,我们的目标是 最大限度地减少来自拥有 FDR 分数的球队的玩家数量>第 75 百分位 和 最大限度地增加来自赛程更轻松的球队的玩家数量 。正如你所看到的,我们将放弃从、WBA、或 BUR 中获取玩家,我们将尝试从 SHU、MUN、TOT、CHE 等中获取更多。
预测模型(球员统计)
现在是今年改进算法的皇冠上的宝石——预测球员统计数据的时候了。当我们为接下来的 n 个游戏周调整我们的团队优化器时,有三个主要指标—预测总点数、期望值(ROI)和每场游戏奖励点数*** 。下面是每个指标的统计数据,也是按职位细分的。*****
预计总积分—前 25 名玩家
预计预期价值(ROI) —前 25 名参与者
每场比赛奖金(上赛季)—前 25 名球员
预测积分——顶级门将
投射点数—顶级防守者
预测得分——顶级中场
预测分数——顶级前锋
正如你所看到的,我们可以为每个位置选择大量选项,因此我们将把上面的许多统计数据插入 Python 中的 优化函数,该函数将 输出具有最高预期总积分 的团队,给定我们的预算约束和其他进入我们决策过程的指标。在团队选择器代码生效之前应用的一些初步过滤器包括:
- 排除受伤或停赛球员
- 将球员排除在 FDR 高的队伍之外
- 排除 GW1 中没有固定比赛的队伍中的球员
- 同一团队不能有超过 3 名玩家
- 总共必须有 15 名球员(GK=2,DF=5,MD=5,ST=3)
下面是模型文本输出的两个例子——一个用于一个全队优化*** ,一个用于一个单人转会。***
例 1:利用填充接头优化 3–5–2 地层的预算
正如你在下面看到的,模型首先查看参数,告诉它是否应该向 15 名球员的全队优化,或者向有 11 名关键球员和 4 名廉价替补 的特定阵型优化。对于填充符,它首先查看 首选地层 ,并使用那个 来决定每个位置 需要多少个填充符。然后,模型从我们的初始预算中减去花费在 4 个填充者上的总金额,并将剩余的预算花费在关键的 11 个玩家上, 给出优化函数和模型约束 。**
例 2:用 650 万的预算优化一名前锋的转会
为游戏周 1 选出的最终队伍
和去年一样,并不是我们所有的决策过程都可以完全自动化,这就是这个游戏如此有趣和令人兴奋的原因。也就是说,我们经常会查看优化器算法的多个输出 以及一些不同的约束和优化函数 ,并将它们与本文前面描述的所有其他有用的统计数据组合在一起— 裁判统计数据、博彩赔率、FDR 分数、处罚统计数据、奖励积分统计数据 等。—向我们最终的团队选择 流程添加一个 人的因素。请看下面几个从这个过程中产生的不同的团队版本,这将有望给你一些想法,让你能够 明智地花费你最初的 FPL 预算 并以一个体面的 ROI /总积分期望 开始这个赛季。
最优 Team1 (MD-heavy): 从 4–4–2 阵型开始,投入 布鲁诺费尔南德斯 并切换到3–5–2 在 GW2 。
最佳团队 2(平衡):全面平衡团队,允许 阵型灵活,每个位置有更多球员选择 。
最优团队 3 (ST-heavy): 围绕几个 昂贵的前锋和中场 与 高点期望 ,从 FDR 分数 低 和 高超过 2.5 的团队中脱颖而出,赢得赔率。
结论
如果你还在读这篇长篇大论的博客,感谢你一直忍耐到最后!希望这意味着你发现分享的信息是有趣和有用的,这是对我们这些热爱为 FPL 社区做贡献的开发者和作者来说最重要的事情。如果你喜欢阅读我们上面的优化方法,请在每个 FPL 游戏周的转会截止日期之前回来查看我们的每周状态更新和团队建议。此外,如果您认为我们可以在决策过程中增加新的数据源或优化技术,请随时提出建议。我们的一个想法是,从关注 FPL 推荐和更新的流行推特账户中获取推特数据,并将这些数据添加到球员选择逻辑中。如果您关注任何特别想推荐的客户,请与我们分享。提前感谢,并祝你在本赛季的 FPL 好运!!!
获奖照片背后的结构——深度学习方法
通过可视化 CNN 架构的各层,我们深入了解机器如何处理图像。
来源https://unsplash.com/photos/hJKkyoG8_ng由哈迪·雅兹迪·阿兹纳韦—昂斯普拉什奖 2019 年入选《时事要闻》
卷积神经网络(CNN)允许计算机对图像进行分类。除了对物体进行分类,它们还能让我们了解是什么构成了一幅图片。一幅画的本质是什么?通过可视化 CNN 架构的各层,我们深入了解机器如何处理图像。这也提供了人类如何“看见”图片的见解。
这篇文章将在一边展示什么元素构建了一幅图片,并提供了用 Keras 实现 Python 的代码。
目录
放弃
我与本文中使用的任何服务都没有关联。
我不认为自己是专家。如果你觉得我错过了重要的步骤或者忽略了什么,可以考虑在评论区指出来或者联系我。
我总是乐于听取建设性的意见以及如何改进。
这篇文章写于 2020 年 10 月 25 日。我无法监控我的所有文章。当你阅读这篇文章时,提示很可能已经过时,过程已经改变。
如果你需要更多关于某些部分的信息,请在评论中指出来。
基本图像
来源https://unsplash.com/photos/hJKkyoG8_ng由哈迪·雅兹迪·阿兹纳韦—昂斯普拉什奖 2019 入选《时事热点》
我喜欢这张图片,因为它有一个故事,它激发了情感,但也在摄影的层面上提供了一个丰富的结构。
为了解释我为什么选择这张图片,我直接引用 Vice 的设计总监 Joel Tellier 的话(摘自 Unsplash Awards 页面):
这张照片的构图令人难以置信。每个元素都有故事和历史层次。这个主题的随意性表明,她在一个她和她的性别在历史上从未受到欢迎的地方完全自在。她受伤,因此很难参加那一天,增加了她爱国庆祝活动的轻松性质,暗示了一个更复杂的故事。座位上的数字有助于暗示历史,让我想知道在一个(第一个)女人被允许之前,有多少男人坐在她坐的地方。
这使得用 CNN 提取信息成为一个非常有趣的图像。
使用 VGG 网络
我假设理解卷积神经网络(CNN)。这种架构对于计算机视觉和深度学习中的许多事情都非常关键。网上有很多可用的资源。作为复习,我建议这篇文章。
为了理解随后的可视化,有必要说明 CNN 的不同层代表什么。
- CNN 的较浅层倾向于检测较低级别的特征,例如边缘和简单纹理。
- 更深的层倾向于检测更高级的特征,例如更复杂的纹理以及对象类别。
来自研究论文的 VGG19 架构使用深度卷积神经网络和 SVM 分类器和知识共享许可进行乳房自动肿块检测
可以可视化过滤器和特征图。过滤器也是描绘特定特征的图像。应用这些过滤器导致特征图。实际上,图层越浅,要素地图看起来就越像原始输入。在这篇文章中,我想把重点放在特征地图和它们的可视化上,因为它们给 CNN“看到”和学到的东西留下了很好的印象。
卷积图层要素地图
VGG19 模型具有以下结构和层:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, None, None, 3) 0
_________________________________________________________________
block1_conv1 (Conv2D) (3, 800, 1199, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (3, 800, 1199, 64) 36928
_________________________________________________________________
block1_pool (MaxPooling2D) (3, 400, 599, 64) 0
_________________________________________________________________
block2_conv1 (Conv2D) (3, 400, 599, 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D) (3, 400, 599, 128) 147584
_________________________________________________________________
block2_pool (MaxPooling2D) (3, 200, 299, 128) 0
_________________________________________________________________
block3_conv1 (Conv2D) (3, 200, 299, 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D) (3, 200, 299, 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D) (3, 200, 299, 256) 590080
_________________________________________________________________
block3_conv4 (Conv2D) (3, 200, 299, 256) 590080
_________________________________________________________________
block3_pool (MaxPooling2D) (3, 100, 149, 256) 0
_________________________________________________________________
block4_conv1 (Conv2D) (3, 100, 149, 512) 1180160
_________________________________________________________________
block4_conv2 (Conv2D) (3, 100, 149, 512) 2359808
_________________________________________________________________
block4_conv3 (Conv2D) (3, 100, 149, 512) 2359808
_________________________________________________________________
block4_conv4 (Conv2D) (3, 100, 149, 512) 2359808
_________________________________________________________________
block4_pool (MaxPooling2D) (3, 50, 74, 512) 0
_________________________________________________________________
block5_conv1 (Conv2D) (3, 50, 74, 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D) (3, 50, 74, 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D) (3, 50, 74, 512) 2359808
_________________________________________________________________
block5_conv4 (Conv2D) (3, 50, 74, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (3, 25, 37, 512) 0
=================================================================
Total params: 20,024,384
Trainable params: 20,024,384
Non-trainable params: 0
_________________________________________________________________
所以这是原图:
通过 CNN 的不同层,我们可以观察到不同过滤器应用于原始图像的结果。我将用“热”色图显示它。只是因为我觉得它比其他色彩映射表更能突出特色。
请注意,过滤器的尺寸和数量随着块的数量而变化。为了简单起见,我将只绘制 8*8 的网格。
我们先来看一下每个块的第一个卷积层:
每个块的第个卷积层
我们来看看每个块的最后卷积层:
每个块的最后一个卷积层
我们能观察到什么?
两件事:
- 我们可以清楚地看到在更深的层中物体被探测到。例如,孤立的女人,但也有一个座位,国旗,甚至有色座椅脱颖而出。
- 这幅图像吸引人的很大一部分是它的结构本身。我们可以看到图片中的女人是如何在非常结构化的环境中带来柔和感的。它看起来很吸引人,因为它的结构是圆形的。圆形的元素使观察者能够将注意力集中在这个独特的物体上,而不是类似的座位上。
本质上,我们可以看到一个图像的相当有趣的组成。我们通过竞技场中的座位提供了许多纹理和结构,但这种结构在人类的形式中是一种扭曲。这将观察者的眼睛直接引导至图像的主角,即女性。它完全符合故事情节。我想说这是区分好照片和优秀照片的地方。通过可视化来支持故事情节。
它就像一个视频,完美地将音乐切割成了它的视觉表达。明白我对这个视频的意思了吗:
为什么音乐在视频中如此重要
至少这些是我的观察。你认为是什么让这张照片吸引人?请在评论中告诉我。
用代码可视化
网格中的特征
在我对 CNN 图层的特征地图进行可视化的研究中,我经常会找到一些教程和实现,这些教程和实现提供了关于如何实现可视化的见解,但并没有真正看到和理解图像所显示的内容。
在我的“灵感”部分,你可以找到形象化的各种实现。通常提取图像的方法是很好的。我只是总觉得它们太小了,不足以表达自己的观点。
如果您遵循现有的解决方案,您可以这样做:
import numpy as np
from keras.preprocessing.image import save_img, load_img, img_to_array
from PIL import Image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
from keras.applications import vgg19
import matplotlib.pyplot as plt size = 224image = load_img(image_path).resize((size, size))
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
image = preprocess_input(image)model = vgg19.VGG19()layer_dict = dict([(layer.name, layer) for layer in model.layers])layer_name = 'block1_conv1'model = Model(inputs=model.inputs, outputs=layer_dict[layer_name].output)feature_maps = model.predict(image)tiles = 8
index = 1
fig, ax = plt.subplots(figsize=(size, size))
for _ in range(tiles):
for _ in range(tiles):
ax = plt.subplot(tiles, tiles, index)
ax.set_xticks([])
ax.set_yticks([]) plt.imshow(feature_maps[0, :, :, index-1], aspect='auto', cmap='hot')
index += 1plt.tight_layout()
plt.show()
如果您想要在不同的图层上显示多个可视化效果,这将非常有用。喜欢
for layer in layer_names:
print(f'{"-"*100}\nLayer {layer}')
model = Model(inputs=model.inputs, outputs=layer_dict[layer].output) feature_maps = model.predict(image)
print(feature_maps.shape)tiles = 8
index = 1
fig, ax = plt.subplots(figsize=(size, size))
for _ in range(tiles):
for _ in range(tiles): ax = plt.subplot(tiles, tiles, index)
ax.set_xticks([])
ax.set_yticks([]) plt.imshow(feature_maps[0, :, :, index-1], aspect='auto', cmap='hot')
index += 1 plt.tight_layout()
plt.show()
这导致每层 8*8 的网格:
图像更大,可以快速发现您想要更详细检测的类型。尤其是在笔记本里。提醒一句:如果你在网格中渲染了太多细节太多的图像,在某个时候,你的笔记本会崩溃。
笔记本电脑显示屏的特性
假设您想要以全尺寸显示每张图片。那么以下内容会有所帮助:
for index in range(feature_maps.shape[-1]):
display(Image.fromarray(np.uint8(feature_maps[0, :, :, index])).convert(
'RGB').resize(display_size))
这将显示灰度图像。如果你想要一个特定的颜色图,你需要做如下的事情:
from keras.preprocessing.image import img_to_array
from IPython.display import display
from PIL import Image
from matplotlib import cmcmap = cm.get_cmap('hot')
display_size = 1000, 1000for index in range(feature_maps.shape[-1]):
im = Image.fromarray(np.uint8(feature_maps[0, :, :, index])).convert('L').resize(display_size)
im = np.array(im)
im = cmap(im)
im = np.uint8(im * 255)
im = Image.fromarray(im).resize(display_size)
display(im)
滚动浏览它们看起来像这样(作为. gif 文件):
使用调整大小功能,可以以合适的尺寸检查所有图像。
奖金——一种神经传递方法
在我之前的文章神经类型转移——一种高级方法中,我提供了神经类型转移的概述。使用以下风格图像的想法。
来源https://unsplash.com/photos/Cj8h7-b47ko作者约书亚·科尔曼**
会产生这样一幅图像:
神经类型转移
灵感
CNN 图层可视化阅读清单(排名不分先后):
- https://towards data science . com/visualizing-filters-and-feature-maps-for-deep-learning-d 814 e 13 BD 671 #:~:text = The % 20 feature % 20 maps % 20 of % 20a,what % 20 features % 20 our % 20 CNN % 20 detects。
- https://towards data science . com/extract-features-visualize-filters-and-feature-maps-in-vgg 16-and-vgg 19-CNN-models-d2da 6333 edd 0
- https://debugger cafe . com/visualizing-filters-and-feature-maps-in-convolutionary-neural-networks-using-py torch/
- https://towards data science . com/how-to-visualize-convolatile-features-in-40-line of-code-70b7d 87 b 0030了解神经网络如何识别某种模式
- https://arxiv.org/pdf/1804.11191.pdf卷积网络如何看待世界
- **【https://www.deeplearningbook.org/contents/convnets.html **
- https://www . analyticsvidhya . com/blog/2019/05/understanding-visualizing-neural-networks/
- https://towards data science . com/convolutionary-neural-network-feature-map-and-filter-visualization-f 75012 a5 a49c
关于
丹尼尔是一名企业家、软件开发人员和商业法毕业生。他曾在各种 IT 公司、税务咨询、管理咨询和奥地利法院工作。
他的知识和兴趣目前围绕着编程机器学习应用程序及其所有相关方面。从本质上说,他认为自己是复杂环境的问题解决者,这在他的各种项目中都有所体现。
如果您有想法、项目或问题,请不要犹豫与我们联系。
你可以在https://www.buymeacoffee.com/createdd上支持我
连接到:
- 领英
- Github
- 中等
- 推特
- createdd.com
主成分分析的本质
深入探究 PCA 背后的直觉,完全涵盖数学和代码
西尔维·沙伦在 Unsplash 上拍摄的照片
概述:
PCA 是最简单的基于真特征向量的多元分析。它最常用作一种降维技术,降低大型数据集的维数,同时仍能解释数据中的大部分差异。看起来很可爱,不是吗?
通过这篇文章,我努力使 PCA 的思想变得直观。要理解这篇文章,你应该知道-初等线性代数和高中统计。那么,我们开始吧。
维度的诅咒:
维数灾难指的是处理多维研究的不利后果。让我们举一个简单的例子——考虑采样 N 个数据点,其中每个数据点是一个 d 维向量。现在,对于相同的 N,数据变得稀疏,因为我们增加了维度。想想看,在一条直线上随机分布 N 个点与在一个平面上随机分布 N 个点,两者中哪一个的密度更高?答案挺直观的,线(参考这些图)。
好吧,当我们向数据中添加维度时,我们使它变得稀疏,但是为什么这是一个问题呢?如果我们的数据缺乏足够的密度,我们永远无法确定我们的预测。对于我们来说,训练一个模型来预测相当准确的结果,数据必须得到很好的表示,否则我们就有过度拟合的风险。虽然我们生活在大数据领域,但密度的妥协只能通过数据(N)的指数级增长来解决,而这可能是不可用的。高维数据的另一个问题是,我们无法轻松地可视化 3 维以上的数据。距离在更高维度中失去意义。
因此,如果我们能够找到一种方法来减少数据的维数,同时保留大部分信息,我们将能够更有效地处理我们的数据。
特征向量:
这是线性代数中最吸引人的想法之一。通过将一个矩阵乘以一个向量,我们可以对该向量进行线性变换。如果你觉得你对基础线性代数的掌握有点松,我强烈建议你看 3b1b 关于线性代数的系列。
一个非平凡向量的跨度在乘以一个矩阵后不变,这就是该矩阵的特征向量。现在,让我在这里澄清两件事,首先,跨度粗略地表示向量的方向,其次,虽然方向不变,但大小可以。本征向量被拉伸或压扁的程度,即相乘时幅度变化的因子,称为该本征向量的特征值。特征向量使线性变换易于理解。它们是线性变换作用的轴。现在,我们怎样才能为矩阵找到这样的向量呢?
考虑矩阵 m。设λ是矩阵 m 的特征值,v̅是矩阵 m 的特征向量
因此,M v̅ = λ v̅
mv̅=(λI)v̅,其中 I 是单位矩阵
det(m—λI)v̅= 0
由于 v̅是非平凡矩阵
det(M—λI)= 0
对于满足此方程的所有特征值(λ),求相应的特征向量(v̅)
现在,我来告诉你一个离奇的事实——如果你把矩阵 M 乘以任意向量若干次,结果几乎是沿着特征值最大的特征向量的跨度!当我第一次遇到这个事实时,我大吃一惊,因为不管矢量是什么,答案的跨度都保持不变。
(M x M x M…x M) a̅ ≈ α v̅,其中α为常数,a̅为随机向量,v̅为最大| λ| (特征值)的特征向量。
(Mᵏ) a̅ ≈ α v̅,k 为大值
这里要注意的一件重要事情是,M^k 也是一个矩阵。因此,如果我们将一个矩阵乘以足够多的次数,我们最终会得到一个将每个向量变换到相同跨度的矩阵。
让我们来演示一下-
我建议您尝试自己编写这段代码,并观察改变 k 的值(保持它> 20)如何改变矩阵 M_k,但属性保留。
现在,让我们来看看这个看似荒谬的财产背后的原因。原因与下面的等式有关-
mᵏ= s x(λᵏ)x 逆(S) 即特征向量可以很容易地表示矩阵 m 的任意次幂。
λ是具有所有特征值的对角矩阵
S 是(M — λI)的零空间,对于所有λ,即矩阵 S,是所有特征向量的矩阵。
这个等式成立是因为-
m x S = S xλ;(根据特征值向量定义)
M x S x 逆= S xλx 逆
M = S xλx 逆(S);(S x 逆(S) = I)
M x M = S xλx 逆 x S xλx 逆
M = S x(λ)x 逆(S);(S x 逆(S) = I)
因此,这可以一次又一次地重复,以获得-
mᵏ= s x(λᵏ)x 逆(s)
然而,这个等式似乎并不能解释其中的神奇之处!是的……但是它藏在众目睽睽之下。
考虑一个向量 a̅ ∈ ℝ(n),矩阵 m∈ℝ(n×n)。更新 a 的算法是-
a̅ = M x a̅
原来 a̅ = c1( v̅1 ) + c2 ( v̅2 ) + … cn ( v̅n),其中 v̅i 为第 I 个最大特征值的特征向量,ci 为对应常数。特征向量跨越ℝ(n).
现在,在第 k 次迭代之后-
a̅=(mᵏ)x(C1(v̅1)+C2(v̅2)+…cn(v̅n))
=(s x(λᵏ)x 逆(S)) x (c1( v̅1 ) + c2 ( v̅2 ) + … cn ( v̅n))
= C1(λ₁ᵏ)( v̅1)+C2(λ₂ᵏ)( v̅2)+…cn(λₙᵏ)( v̅n)
将 RHS 除以λ₁ᵏ
对于 k→∞:span(a̅)= v̅1;(|λ1| > |λ2| > … > |λn|)
因此证明。
现在,我提出这个属性的目的(除了让你吃惊之外)是为了强调特征值-向量对的重要性。这么想吧,每个特征向量对于解释矩阵中信息的重要性直接关系到它的特征值有多大。
执行 PCA:
假设你对特征向量部分的最后一个语句没有意见,这里的大部分工作就完成了!剩下的就是几个基本公式了。
以下是执行 PCA 的步骤
- 标准化您的数据。
- 计算特征(维度)的协方差矩阵。
- 计算特征值向量对,并按特征值降序排列。
- 选择总数 n 的前 r 个特征值。
方差计算=(第一个 r |λ|的和)/(所有|λ|的和)
5.将数据投影到所选的特征向量上。
标准化数据集
计算协方差矩阵
找到特征值向量对并投影数据
关于特征向量,它们并不总是相互正交的。然而,如果矩阵是对称的,即矩阵的转置等于其自身,则这种矩阵的特征向量是正交的。注意协方差矩阵。对,是对称的!这意味着我们的特征向量相互正交。为什么这是一件好事?我把这个问题留给你去研究。请在评论区告诉我你的想法。
因此,使用主成分分析,我们将 4 维数据集转换为 3 维(正交的),同时保留超过 99%的方差。
解读结果:
让我们来看看我们之前选择的 3 个特征向量-
现在,这些四维向量意味着什么?回想一下,我们之前有 4 个维度——性(a̅)、age(b̅、educ(c̅和 hours(d̅).所以,
v̅1=-0.00497184a̅+0.95424153b̅+0.01435652c̅+0.29865074d̅
因此,最终向量不沿着任何原始维度。它们是所有这些的线性组合。当我们投射数据时,这些向量成为我们的新维度(轴)。
让我们把我们的标准化数据矩阵(X)投影到一个单位矩阵(I_4)上,得到一个矩阵(A),让这个想法更直观一些。
注意矩阵 A 和 X 是相同的。这是因为通过将 X 乘以一个单位矩阵,我们没有改变任何维度!
谢谢你能走到这一步。我希望这篇文章值得您花费时间,并且您现在已经直观地理解了 PCA。请在评论区告诉我你的建议和问题。
干杯!
基本的 dplyr
很多 R 班等着教这个包。幸运的是,你有互联网。
这个神秘命名的包是 R 中清理、组织和查看数据的救命稻草。许多教授等着教 dplyr,以支持教授基本的 R 方法作为基础,但这并不意味着您必须等着学习它。在本文中,我们将研究一些最省时的 dplyr 函数,并学习如何使用它们来操作数据集。
什么是 dplyr?
Dplyr 是由 Hadley Wickham 和 Romain Francois 编写的一个包,用于帮助您将原始表格数据处理成一个整洁的数据集,以便进行分析。在他 2014 年关于该包的前身 plyr 的论文中,Wickham 写道:
人们常说,80%的数据分析花费在清理和准备数据的过程中。
准备数据仍然需要时间,但是由于 dplyr 和其他 tidyverse 软件包,我们可以比我们的前辈花费更少。在本文中,我将使用墨西哥城的空气质量数据集作为展示以下关键 dplyr 函数的基础:
- tible():产生一个tible.)而不是你的标准数据帧。
- mutate() :使用其他函数创建新的计算字段。
- filter() :通过指定要保留的行来过滤您的行。
- select() :选择您希望保持其显示顺序的列。
- % > %操作符允许管道。
- group_by() 根据各个字段的值对数据进行分组。
- summary()根据您建立的组汇总您的数据。
- inner_join() 将返回第一个表中与第二个表中的值相匹配的所有行,以及两个表中的所有列。如果有多个匹配,将返回所有组合。这是 dplyr 包中包含的许多连接选项之一。
- 按特定字段对表格进行排序。它会自动按升序排序,除非使用了 desc() 。
展示墨西哥城的空气质量数据
我们将通过对墨西哥城的空气质量数据集执行一些初步的数据操作来查看 dplyr 包中的函数。下面的代码将从墨西哥城的空气质量监测网站下载 2016 年 1 月至 2020 年 4 月的颗粒物 (PM)浓度的数据。for 循环允许您通过编辑 z 向量来指定数据中包含的年份。
##getting the data
data<- data.frame()
z<-c(2016,2017,2018,2019,2020)
for(i in z) {
url <- paste("[http://www.aire.cdmx.gob.mx/opendata/promedios_diarios/promedios_](http://www.aire.cdmx.gob.mx/opendata/promedios_diarios/promedios_)",i,"_ps.csv", sep = "")
data <- rbind(data, read.csv(url,header = T, skip = 8))
}
罕见晴朗天气下的墨西哥城,作者拍摄
让我们从问题开始。我想知道 2020 年 4 月的空气质量是否会因为冠状病毒的封锁而比往年好。这是一个相当复杂的问题,但为了快速了解这是否值得深入研究,我将 2020 年的月均值与前几年的月均值进行比较。
让我们通过将数据更改为 tibble 来查看数据的当前状态:
pm <- tibble(data)
pm
tibble 看起来比常规的数据框要好:输入它的名称,R 会给出维度、10 行数据预览以及每一列的类。关于数据集中的实际数据,我们可以看到,它包含了 PM10 和 PM2.5 的每日测量值,单位为微克/立方米,分布在墨西哥城的多个站点。
为了回答我们的问题,我们需要做一些处理。
变异、过滤、选择、重命名和%>%
下面,我使用了 mutate 命令来创建一个日期时间(POSIXlt)格式的新日期字段,并为月份和年份创建单独的字段。我通过 filter 命令过滤数据,去掉所有 NAs,然后使用 select 重新排序字段。我使用 rename 将我的 datetime 字段 datex 重命名为“date”。
pmclean <- pm %>%
mutate(datex = strptime(date,"%d/%m/%Y"),
month = month(datex), year = year(datex)) %>%
filter(!is.na(value)) %>%
select(datex, id_station:value, month, year) %>%
rename(date = datex)
您可能已经注意到的另一点是 % > % 操作符。这个操作符是用 dplyr 包加载的,大致翻译为“then”。它允许我们将下一行的代码应用于 pm 数据集,而不是必须在每个函数中重写数据集名称,并将我们的更改分配给中间变量。这个过程被称为管道。
如果没有它,代码将如下所示:
##clean
pm2<- mutate(pm, datex = strptime(date,"%d/%m/%Y"),
month = month(datex), year = year(datex))
pm3 <- filter(pm2, !is.na(value))
pm4 <- select(pm3, datex, id_station:value, month, year)
pmclean <- rename(pm4, date = datex)
结果是一样的,但是使用 % > % 操作符让我们用更少的击键次数就到达了那里,并且需要创建更少的中间变量,保持了我们工作空间的整洁。
分组依据和汇总
现在,我的数据集更整洁了,我想看看值字段的一些摘要信息。
这个总结没有告诉我太多,因为它包括 PM 10 和 PM 2.5 值。PM 10 和 PM 2.5 的行为、健康影响和监管阈值不同,放在一起分析没有太大意义。
幸运的是,dplyr 有一个简单的解决方案。要将我的数据分组,我可以使用 group_by 函数,按 id_parameter 字段分组。我还知道,我想将 2020 年每个月的平均值与过去几年相同月份的平均值进行比较,所以我也将按月份和年份分组。这对我的 pmclean 数据集不会有任何明显的影响,但是如果我使用summary创建一个新表,列出的函数将基于这些组进行计算。
这里我用平均值、中值、最小值、最大值汇总value 字段,并赋值给 pmsummary 数据表。请注意,该指定放置在管道的顶部。
pmsummary <- pmclean %>%
group_by(id_parameter, year, month) %>%
summarize("mean" = mean(value), "median" = median(value),
"min" = min(value), "max" = max(value))
结果是下面的表格。您可以看到,平均值、中值、最小值和最大值是针对月、年和参数的每个唯一组合计算的。
安排
Arrange 本质上与 Excel 中的 sort 一样。让我们用它来比较 2020 年前四个月的平均污染物浓度和前几年的相同月份。为此,我们将使用过滤器获得我们想要的参数和月份,然后我们将按月份和平均值排列结果。我在这里不这样做,但是你可以使用排列中的 desc 函数来按降序排列你的数据。
##PM10
arrange(filter(pmsummary,id_parameter == "PM10" &
month %in% 1:4),month, mean)
##PM2.5
arrange(filter(pmsummary,id_parameter == "PM2.5" &
month %in% 1:4),month, mean)
这里我们可以看到,2020 年 4 月确实有更低的 PM 10 和 PM 2.5 平均浓度,但在墨西哥城进入冠状病毒封锁之前,2020 年 1 月和 2 月也是如此。让我们从视觉上来看这些信息。
过去五年每月 PM 2.5(空心三角形)和 PM 10(实心圆圈)的平均浓度。2020 年是用珊瑚色绘制的,所以很醒目。
##Graph the summary data
plot(pmsummary$month,pmsummary$mean,
col = ifelse(pmsummary$year == "2020", "coral1", "grey"),
pch = ifelse(pmsummary$id_parameter == 'PM10', 19,2),
xlab = "Month",
ylab = "PM Mean Concentration (ug/m3)",
cex = 2,
type ="p" )
legend("bottomright", c("PM10", "PM2.5", "2020"),
col = c("grey","grey", "coral1"),
pch = c(20, 2, 1))
这使得逐月观察趋势变得更加容易。有趣的是,与其他年份相比,2020 年 3 月的 PM 10 平均浓度相当平均,然后在 4 月急剧下降。对于 PM 2.5,我们看到从 2020 年 3 月到 2020 年 4 月略有增加。虽然远非确定,但我认为这个问题值得进一步分析。
与 dplyr 连接
dplyr 附带了许多 join 函数。它们包括标准的 inner、right 和 left 联接,以及允许您基于其他表过滤表的函数,如 anti_join()、semi_join(),甚至 nest_join,它允许您将一个表中的数据嵌套在另一个表的行中。
我们清洁的颗粒物质
比方说,我想查看我的车站级别的空气质量数据。我目前的数据是按电台分类的,但我不太了解这些电台标签的含义。幸运的是,墨西哥城也出版了他们的电台目录:
url <- "[http://www.aire.cdmx.gob.mx/opendata/catalogos/cat_estacion.csv](http://www.aire.cdmx.gob.mx/opendata/catalogos/cat_estacion.csv)"
datastations <- tibble(read.csv(url,header = T, skip = 1))
他们的台站数据为我们提供了每个台站的纬度、经度和海拔高度。让我们使用 join dplyr 函数之一将该信息添加到我们的主数据集。
pmclean 数据集中的每个值都应该有一个与之关联的站(测量该值的站),并且数据集中的每个站都应该在墨西哥城站目录中。这意味着我们可以做一个内部连接。我们希望加入站缩写,即 pmclean 数据集中的 id_station 和 stations 数据集中的 cve_estac。让我们解决这个问题,然后进行连接。
stations <- datastations %>%
select(cve_estac:obs_estac)%>%
rename(id_station = cve_estac)pmstations <- inner_join(pmclean,stations)
您可以看到,因为我在 stations 数据集中重命名了我的连接字段以匹配 pmclean 数据集中的字段,所以连接操作不需要我指定要连接的字段;它会自动选择匹配的字段。
多做数据科学
清理和操作数据并不是数据分析中最有趣的部分,但它是一个不一定很痛苦的关键过程。使用我们今天看到的数据集或使用 dplyr 附带的数据集之一来熟悉这些函数。一旦你的工具包里有了它们,你就可以花更少的时间和眼泪去弄清楚如何操作你的数据,而有更多的时间去做数据科学。
本文中使用的所有代码都可以在这里找到。
创造人工智能产品的基本指南
在研究一种新的人工智能产品?如果你不知道从哪里开始,我希望这篇文章能帮助你在深入研究之前找到问题的答案,理清思路。
在我们开始之前,让我们设定这篇文章的范围并确定读者,以确保你在正确的地方。我从过去十年构建人工智能解决方案的经验中总结了一些知识,并以某种方式展示出来,希望在你开始构建人工智能产品并将其快速送到用户手中的旅程时,能引起你的共鸣。我试图在一个组织中为人工智能产品所有者的利益构建它,该组织的任务是确定要构建的产品,组建团队,构建它,并为有痛点的真实用户推出它。对于团队成员——产品经理、项目经理、工程师、数据科学家、ML 工程师、ML Ops 和实习生——来说,概述开发人工智能产品的精益方法同样有用。如果你正在运行一个研究项目,你也不会完全不知所措,因为这里描述的方法只能提高你的“启动”时间,即使是一篇论文或出版物。但是,需要一些 AI 方面的背景。但是有了像这种这样的好课程和其他在线内容,以更好的方式解释了什么是人工智能,我假设你已经读了足够多的书来了解基础知识。但是这个系列也不是对 ML 或深度学习的技术深入研究(这是时代精神,是我很大程度上假设你会使用的),所以你不会看到任何神经网络架构或代码。
让我们从理解为什么我们需要一个单独的指南来构建人工智能产品,而不是像对待常规软件开发方法一样对待它开始?就像你对任何其他项目一样,你要确保你理解技术可以实际实现什么,定义人工智能增强的用户体验(UX),规划你的团队构建产品功能的努力,并在用户痛点真实存在的情况下推出你的产品。但当你的项目涉及人工智能时,挑战在于做到所有这些,但面临快速发展的技术的额外限制,构建它所需的稀缺和昂贵的专业知识,以及能够及时推出这些功能。你还想避免代价高昂的人工智能项目陷阱,这些陷阱可能最终导致几个月的延迟,甚至更糟——整个项目失败。错误的 ML 问题框架,没有好的数据来训练你的模型,迭代太慢,这些陷阱都太常见了。
在本文的其余部分,我将讨论如何着手确定要构建的产品、组建团队、构建产品时要记住的事情,以及克服过程中的挑战和避免陷阱的一些技巧。但是为了有效地做到这一点,我需要将本指南分成几个小部分,由于缺乏更好的结构,我们称之为“步骤”(剧透:最后有一个迭代步骤,这基本上是一个循环)。
步骤 1:定义价值主张和用户利益
开始构建一个人工智能产品的第一步,就像其他任何产品一样,是澄清我们正在构建的是什么。
哈尔·盖特伍德在 Unsplash 上拍摄的照片
定义价值主张和人工智能增强的用户优势
像任何产品或功能一样,我们从用户痛点出发,定义您的解决方案将为用户提供的价值主张(价值主张)。然而,你的价值主张与你是否使用人工智能没有根本联系。非常重要的是,你要认识到,人工智能只是通过提供以下一个或多个好处来增强价值主张——降低用户的成本,更快地提供解决方案,或扩展到你拥有的不同用户(即自动化、协助或个性化),而不是你针对用户的痛点销售的主要“药丸”。坦白说,用户并不在乎你用不用 AI。他们关心他们的痛点,以及与其他解决方案相比,您的产品是否能带来更多好处。
举个例子,Gmail 一直在用人工智能为他们的邮件提供尽可能好的 UX,甚至从他们早期的“永久测试”开始。我在 21 世纪初改用 Gmail 的最大原因之一是他们的垃圾邮件过滤功能——这在当时是世界上最好的。该产品一直专注于用人工智能改善 UX,而不是出售人工智能本身。他们对重要邮件与促销邮件、社交邮件等的自动分类。以及他们最近推出的在写电子邮件时使用智能撰写,都是在人工智能的帮助下提高用户生产力的绝佳例子。(我将在本系列的其他地方使用这最后一个例子进行说明)
定义你产品的价值主张,不要和人工智能捆绑在一起。相反,确保你的解决方案相对于其他竞争对手提供给用户的好处,为人工智能提供一个令人信服的案例。
为早期验证构建最小可行产品(MVP)
就我个人而言,我是过去十年“精益创业”运动的忠实追随者,该运动已经形成了一种在产品与市场匹配存在巨大不确定性的情况下创造成功产品的哲学。通过将 MVP 快速放在用户面前并快速迭代,您可以更快地确定您的解决方案是否确实是用户所需要的,并愿意为此付费。那么,我们如何构建一个带有“人工智能引擎”的 MVP 来提供相同的用户利益,而不实际实现人工智能呢?好吧,我们可以通过使用一些方法预先花费一些人力来“模拟”人工智能引擎:
答:人在回路解决方案:有什么比真实智能更好的模仿人工智能的呢?通过从用户那里抽象出一个真正的人作为“智能”引擎,为用户提供同样的好处(通过让某人在你的测试期间准备好“在线”)。也被称为“绿野仙踪”UX 测试,这种方法已被广泛用于语音助手界面的原型开发——用户认为他们正在与一个全功能的语音助手交谈,但实际上是一个人在完成用户请求。它有助于确定用户要求的正确用例以及用户可能说出的命令的措辞类型,然后产品团队可以为开发人工智能解决方案确定优先级。
b .基于启发式的解决方案:在大多数情况下,您可以将您的领域知识或经验法则编码到您的软件中,并让您的用户进行测试。想到的使用启发式方法的一个例子是地理空间搜索查询的处理。例如,如果你在手机上向你最喜欢的搜索引擎请求“咖啡店”,作为人类,我们理解搜索请求的常识性额外要求——咖啡店应该在用户位置周围(例如使用 GPS)并且在一定距离内(例如可步行),并且应该在当前时间营业。与其等待 ML 团队构建一个可以做出这些常识性猜测的模型,为什么不将这些编码为模型输出的编程扩展呢?这有助于您快速启动或验证。一旦启发式开始变得太复杂,或者当你有足够的数据来学习个性化时,你可以替换它。
也许这两种解决方案并不适用于所有用户或边缘情况。但是,如果在某些情况下它确实有效,用户对你的解决方案的需求得到了验证,你就可以放心地把时间、金钱和资源花在构建实际的人工智能上。如果解决方案无效,那么您可能会认为市场不正确,并通过转移到另一个棘手问题来解决,从而为公司节省相同的时间、金钱和资源。
通过使用人在回路中或基于启发式的‘绿野仙踪’MVP,获得你的价值主张和人工智能增强的利益的早期验证或无效。
确定产品的关键性能指标
在为你的产品的用户确定价值主张的同时,你也将更好地理解你的组织如何从向客户推出产品中获益。是时候以你的产品所针对的指标的形式清楚地捕捉这些好处了。例如,让我们说你的人工智能增强的 UX 让你的用户更快地键入电子邮件。因此,他们现在可以发送更多的电子邮件。当然,这导致了更多的产品粘性,结果是,你的(a)每日活跃使用量增加了,( b)基于订阅的产品的流失率降低了,增加了你每月的经常性收入。当你设计 ML 问题时,这些可以作为参考,这样你的模型的目标与产品的目标一致,而这些目标反过来又与你的业务目标一致。
确定你的产品的业务 KPI 和 UX 指标,以及使产品成功的目标。当你定义你的 ML 模型的度量时,比如准确性、推理时间等,你可以使用这些。
步骤 2:正确构建 ML 问题
一旦我们对产品的价值主张进行了一些早期验证,我们将通过确定要使用的 ML 技术、确定输入、输出和中间步骤,以及将 UX 和业务指标与 ML 解决方案的指标联系起来,来构建 ML 问题。以我的经验来看,你构建 ML 问题的方式导致解决方案性能的最大收益,并且是促成项目成功的最大因素。
斯蒂芬·道森在 Unsplash 上拍摄的照片
识别“模型”输入和输出
任何人工智能解决方案的核心都是一个“模型”,它通过使用关于用户上下文/需求的已知信息来预测与用户利益相关的一些关键特征,从而实现自动化、辅助或个性化。例如,Gmail 中的智能撰写功能可以帮助您根据目前已键入的内容完成即将键入的句子,从而节省您键入可预测句子的时间。在这种情况下,模型输入是部分键入的文本,输出是基于上下文的完整文本句子(例如,电子邮件收件人的姓名等)。).
您希望尽可能清晰地定义模型输入和输出,没有任何歧义。也就是说,给定输入和上下文,应该只有一个“最佳”输出。如果有多种可能的输出,UX 需要确保它知道如何向用户提供解决方案(例如,在 Gmail 中,键入“希望你”只会显示最佳猜测—“…做得很好”。其他可能的输出,如“…感觉更好了”将不会显示,直到用户键入更多的字符。)
定义输入和输出的另一个重要测试是确认确定输出所需的所有信息是否在输入中可见。这一点非常重要,因为如果您决定使用监督学习方法,那么您的注释器也不会有这些信息,并且您的训练数据不足以供模型学习。举个例子,如果我给你看一张放大后高度像素化的照片,如果一个人不能识别照片中的物体,那么它只会被注释器错误地标记,模型也不能从中学习。
清楚地确定你的 ML 模型的输入和你期望模型预测的输出——输入应该在推理时可用,并且人类应该可以在没有除输入之外的任何上下文的情况下注释输出。
选择 ML 技术
用于训练和建立模型的算法属于三种机器学习技术之一——监督学习(即从例子中学习)、非监督学习(即学习识别常见模式)或强化学习(即基于“游戏化”的自我学习)。在 ML 专家的帮助下(参见下一步“人员”部分),您可以识别 ML 技术,同时识别您需要的数据和平台:
a)监督学习:人类知道输入和输出之间的关系,我们可以得到对输入进行注释的输出,而不需要输入中存在的任何上下文信息。从该数据中学习的模型近似于人类的判断,并在给定输入的情况下生成输出,假设该输入与它被训练的示例相似。
b)无监督学习:输出随数据变化。例如,您可能希望将您的输入分组到不同的组中,但是不知道应该是什么样的分组,例如在查找客户细分时,最重要的功能是什么,等等。随着数据的变化,这些组或聚类也会发生变化。
c)强化学习:你学习一个基于你的状态来预测行动的策略,但不是教模型如何做出决定,而是知道你可能会奖励或惩罚模型预测,你可以通过模拟一个类似游戏的学习引擎来训练模型——使模型更加健壮。
选择最适合为您的人工智能解决方案构建模型的 ML 技术(在监督学习、非监督学习或强化学习之间)。这也有助于定义您的标记数据或 ML 平台需求。
如果需要,分解问题
有时,使用单一模型的步骤并不能解决问题。在这种情况下,最好将问题分解成一系列模型,这些模型可以在管道中组合在一起。例如,像 Alexa 或 Siri 这样的个人助理不能使用一个单一的模型来接收语音输入并产生语音输出。还有一些中间步骤,如将语音转换为文本、理解请求的上下文、执行请求、记住来自以前请求的用户信息、生成结果以及将结果转换回语音。这高度依赖于可用的 ML 解决方案的状态,以及 ML 专家将问题分解成现实步骤的技能。不过要预先警告,就像糟糕的编程一样,也可能会出现问题的糟糕分解。
分解 ML 问题的另一个原因可能是结合试探法和模型来强制模型以某种方式运行。例如,你可能没有足够的训练数据,处理边缘案例,甚至执行一些基于规则的逻辑(这些不需要学习)。
一个模型很少能完全解决业务问题,可能需要分解成更小的可解决的问题,或者采用启发式方法,或者处理异常。
将 ML 模型指标与 UX 联系起来
在我们开始构建模型之前,我们首先应该建立成功标准。您的解决方案的 UX 直接受模型精度和预测时间的影响,如下所示:
a)准确性:模型准确性告诉您您的模型将成功满足多少用户请求。比如一个语音助手(像 Siri,Alexa 等。)80%的准确率(假设评估数据中用例的分布与真实世界相似)将导致 1/5 的用户请求得不到满足,这些请求要么需要人工服务,要么可能会对 UX 产生负面影响。现在,如果手动解决或允许这 20%的错误失败会导致成本过高或更糟——导致用户停止使用您的产品,那么您的准确性目标需要更高。如果用例要求在 I 型或 II 型错误之间进行权衡,那么应该使用其他度量标准,如 F-beta 分数。
b)预测时间:如果预测的时间比人类习惯的时间长,UX 可能会变得无法使用。例如,如果语音助手需要 1 分钟来确认它是否理解你所说的话,这可能会非常烦人,以至于你在未来不会使用它。因此,模型预测应该满足时间限制(例如,对于语音助手,少于一秒)。这还将帮助科学家确定要使用的 ML 算法/模型的类型,以及是在设备上还是在云上部署解决方案。
有时,区分用例的优先级有助于减轻一些准确性或时间的限制。例如,对于语音助手的例子,请求天气和音乐可能是最常用的功能,因此需要具有更高的准确性和更快的响应时间,而控制智能家居物联网设备可能具有较低的重要性,因为用例可能有较少的用户。
通过根据用户利益的 UX 目标设定准确性和预测时间目标,定义人工智能解决方案的成功标准。对用例或 I 型和 II 型错误进行优先级排序有助于关注于提供对用户更重要的用户利益,以及选择正确的 ML 算法、模型架构等。
步骤 3:让人员、数据和平台就位
好吧。你已经确定了你的人工智能增强的价值主张,并框定了 ML 问题。下一步是召集一个团队,为成功构建模型做好准备。
安妮·斯普拉特在 Unsplash 上的照片
人
建立一个数据科学团队很难,因为专业知识稀缺,因此,就业市场的招聘成本很高。在外部寻找人才时,很难找到已经将模型投入生产的人。但从好的方面来看,由于薪水丰厚,我们也看到大量工程师转向数据科学,这很好。如果你是一个已经有内部数据科学职能的大型组织的一部分,你的挑战可能是他们的可用性,因为项目需要他们的技能。无论哪种方式,你都需要为你在团队中寻找人才所需的技能做一个强有力的证明。那么什么样的数据科学/ML 能力适合你的项目呢?
a) ML 工程师:我认为对于一个产品团队来说,最有影响力的数据科学角色是 ML 工程师。如果 ML 问题可以被构建到一个已知的算法和架构中,ML 工程师可以使用流行的框架来训练模型,并将模型打包以供部署。他们还有一套工程辅助技能,这对于移动数据来训练模型以及将模型投入生产非常重要。
b)数据科学家:如果你的产品需要以一种没有已知算法和架构的新颖方式使用 ML,你的团队应该有一个计算机视觉、自然语言处理、强化学习等方面的专家。谁将帮助你创造技术。请注意,这个角色是研究型的(想想博士),并且通常有一个长达数月的模型创建生命周期。我认为,只有当你在人工智能领域创造你的竞争对手不应该获得的知识产权时,数据科学家才是成功的关键。但在这一点上,你应该调查你的产品时间表——也许你正处于研究阶段,技术还没有准备好黄金时间。
让我用例子来对比这两个角色,以便更好地进行比较——假设您正在为咖啡店和餐馆创建一个人流量计数器,试图对进门的人进行计数——有大量的对象检测算法可供选择,您可能需要一名 ML 工程师来使用这些模型并构建您的人流量计数器。但是,假设您还想为同一产品构建行业首创的自动人口统计跟踪功能,这里没有足够的高精度算法,您需要创建新的模型,因此,您可能需要一名数据科学家。数据科学家需要专注于让模型工作,而 ML 工程师需要专注于将已知的工作模型投入生产。
ML Ops —一个最近出现的角色,ML Ops 负责在生产中部署和维护模型。将 ML Ops 视为 DevOps 功能中专门部署您的模型的角色。这个角色的范围很大程度上由您选择的平台定义(见下文,我们在这里讨论云平台),但是当您发布产品时,责任是最重要的——保持 ML 模型预测服务的健康和性能。
d)其他工程师 —最后,与上面的数据科学角色一样重要的是,您的团队还将拥有前端工程师(创建 UI /应用程序)、后端工程师(移动数据所需的业务逻辑和服务)和开发运维工程师(在生产中部署和维护模型和后端服务器)。
虽然建立一个数据科学团队很难,但需要数据科学家、ML 工程师、ML Ops 和其他工程师的适当平衡,以确保您拥有实现您的解决方案的正确技能和专业知识。
数据
您将使用哪些数据源来训练您的模型?在“ML 问题的框架”之后,你的数据来源对你的模型性能有最大的影响。因此,确保您拥有模型输入和输出的正确数据非常重要。
a)模型的输入:除此之外别无他法——让你的训练数据尽可能接近生产数据。例如,对于计算机视觉用例,用于捕捉图像的摄像机、其位置、移动、照明条件等。需要与生产环境完全匹配。使用公开可用的数据作为用例来启动模型训练可能很有吸引力,但是基于网络上的一般数据(例如,来自 Google 搜索的图像)或为其他目的构建的数据集训练的模型在生产中使用时几乎肯定会失败。迁移学习或生成合成数据看起来可能是一个有趣的选择,但这些方法可能还不够成熟,无法为您的模型生成现实案例。
b)模型的输出:如果您使用监督学习技术,您将需要模型输出的注释数据,以便训练模型。标注数据成本高昂,尽管有多家公司提供标注服务(大多数众包来自劳动力廉价的发展中国家),但你需要选择一家质量检查到位的公司。您还需要了解数据隐私、安全性以及其他关于人们滥用您的数据的问题。标记数据通常比模型本身更有价值,主要是因为任何获得您的标记数据的竞争对手都能够构建类似的产品,但没有您的数据的竞争对手无法提供相同的用户优势。我在这个行业的不同团队工作中获得的一个见解是,成功开发人工智能解决方案的产品团队,有一个内部数据实习生或经理,他们在培训数据管理、清理、确保质量检查以及管理注释工具或平台方面发挥着至关重要的作用。
数据是您的模型学习的燃料,对于在与生产环境完全相同的条件下捕获的训练数据,没有什么好的替代方法。在模型输出方面,获得明确的高质量数据比花费时间改进模型本身更重要。
平台
除了训练模型所需的人员和数据,您还需要确保为您的需求选择正确的平台。
a)内部:像 Scikit、Tensorflow 和 Pytorch 这样的框架仍然是内部开发模型最流行的,但是你需要花费额外的基础设施来训练和服务生产中的模型。虽然可以选择购买 GPU 工作站,使用 IaaS 提供商,如 AWS、GCP、Azure 等。如果您需要大规模按需训练您的模型,或者利用或 TPU 等提供的硬件优化,通常会更好。对此,一个可能的解决方案是在使用带有 GPU 的本地机器来开发用于训练和服务的代码,但使用 IaaS 提供者来大规模训练和服务之间找到平衡。在这两种情况下,需要注意的一个挑战是移动数据所花费的时间,特别是在数据集大小可能以 TB 为单位的图像中。
b)云中: 2019 年见证了一系列 ML 即服务平台(即云中的 ML)的推出和增长,这些平台允许更快地培训和部署您的 ML 模型。您可以使用图形用户界面(ide、Jupyter 笔记本等),而不是使用 Tensorflow 或 Pytorch 之类的框架。)来构建和部署模型。灵活程度通常因平台而异。有些试图提供“无代码”解决方案,您可以将数据拖放到您的模型中,并使用 ide 来训练和部署您的模型,而有些提供“托管框架”作为服务,您可以使用自己的代码作为软件的一部分来训练和部署模型。这些服务通常看起来比你的内部平台更贵,但通常会承担很大的责任。例如,如果您有一个内部平台,ML Ops 的职责是为培训和服务模型提供服务和维护基础架构,而在托管云平台中,基础架构由软件提供服务和维护,从而减少了雇用单独的 ML Ops 成员的需要。也就是说,仍然需要一些运营专业知识来供应云软件、维护对数据的访问等。
确保以上三件事情一致的最后一件重要的事情是,您已经清楚地确定了您的模型将要部署的环境。回想一下,对于数据,您的输入是从相同的环境中收集的。用于部署模型预测服务-如果它位于本地或云中的服务器上,您的模型将有更多的资源进行计算,因此您的团队可以使用更复杂的架构。但是,如果是在智能手机、浏览器或边缘设备上,您的团队需要选择适用于这些计算受限环境的架构,同时还要考虑电池消耗等问题。
无论你选择内部还是云框架,都会影响你构建人工智能解决方案的灵活性,你需要提供一个成功的 UX,与此形成对比的是,你可以启动模型或团队/资源的速度,你需要自己启动它。
步骤 4:构建和集成人工智能微服务
你如何构建人工智能服务将在很大程度上取决于你选择的模型训练和服务架构,你遵循的最佳实践,以及你拥有的集成和优化。
体系结构
a)减少培训的等待时间:当我与数据科学家交谈,问他们在我可以优化的培训中花费最多时间的是什么时,他们主要谈到了两件事— (i)将数据从云中的数据源移动到桌面进行开发需要很长时间,以及(ii)他们必须等待模型进行培训,然后才能尝试不同的超参数或捕获代码中的错误。密切关注这些痛点,你会意识到科学家在这些活动中被阻止应用他们的专业知识来实际解决问题。
在过去的几年里,ML 基础设施即服务已经走过了漫长的道路。云中的数据存储很便宜,可以直接插入运行在云上训练模型的机器中。最近,这些云提供商也开始在与您的数据相同的环境中提供 ide(例如 Jupyter 笔记本),允许您将代码从桌面移动到离数据存储更近的地方。除了邻近优势,在云中训练您的模型还提供了高性能计算(专门为深度学习设计的 GPU 或 ASICs)可用性的额外优势,这可以随着您的数据而扩展(得益于分布式学习技术的最新进展)。我强烈建议尝试这些方法,并围绕这些方法构建您的架构和工作流,以减少在上述工作中浪费的时间。
b)分离用于推理的微服务和您的业务逻辑:根据我过去几年在生产中部署多个模型的经验,构建用于部署的模型的最佳方式是在后端将推理从业务逻辑中分离出来。也就是说,我们需要一个微服务来接收模型的输入并预测输出,而逻辑用于从数据库转移数据,任何业务需求,如访问控制,将模型的输入和输出包装到用户体验中,等等。应该放在一个单独的微服务里面。当您可以访问专用于推理的硬件优化计算资源(例如,像 TPU 这样的 ASICs 等)时,这还允许仅推理微服务的可扩展性。).
构建模型推理微服务的一种方式是使用容器化(例如,创建自己的 Docker 容器,或者使用 TF-Serving、Seldon 等。)来为模型服务。然后,容器编排层可以负责根据计算或传入请求的数量自动扩展模型。如果在构建 ML 问题时,您已经决定将模型分解成几个部分,那么您可能想要创建多个推理微服务。确保您考虑了要在模型之间传输的数据量(例如图像),否则您的模型预测会受到网络限制。当然,如果您使用基于云的 MLaaS 服务,服务架构由该服务负责。
对于培训来说,将您的数据和培训代码迁移到云中是一个显而易见的选择,这样可以减少您的团队每天花费数小时在笔记本电脑和培训服务器之间移动数据的等待时间。为了部署推理模型,您应该将模型推理和业务逻辑分离到单独的微服务中,这样您就可以根据需要扩展推理。
构建模型的最佳实践
我还想分享一些构建模型的后续最佳实践。如果这变得有点技术性,我很抱歉,但是最好在我们讨论构建模型服务、它们的架构和集成的这一节中指出。
a)同行评审和行业协会:随着最近对深度学习的浓厚兴趣推动了对 ML 研究的强劲增长,最先进的最佳方法、算法和架构每年都会更新两次。如果您的解决方案没有考虑到快速变化的技术,那么它可能是次优的。在将代码提交到主分支之前,工程团队已经有了一个“拉式请求”审查过程。ML 团队应该采用类似的实践,将他们的代码检查到主要分支中,或者将冠军模型部署到产品中。
在工作场所发展强大团队的最近趋势是引入“行业协会”,其中在组织内具有核心能力(例如深度学习等)的团队中的从业者。).如果你有一个职能部门,可以把他们想象成某个职能部门内某个特定主题的“专家”(例如“医疗保健中的计算机视觉”等)。),在这里你可以从人们的兴趣、以前的工作经验和现在的技能中吸取经验。定期对 ML 解决方案进行同行评审是确保您拥有合适的运营支持的关键。请记住,好的想法应该获胜,而不是排名顺序。
b)模型架构、超参数和数据版本化:数据科学家经常根据他们的假设尝试不同的模型架构来为数据构建模型。他们还改变模型训练的超参数。数据科学家在构建模型时遇到的最大挫折之一是,当他们做出更改时,他们无法回到以前性能更好的超参数或模型架构。随着时间增长的训练数据也是如此。这里的一个好的实践是至少维护一个“冠军模型”,并使用一个类似“Github”的代码版本控制系统跟踪该模型的架构和超参数。最近的一些服务如 Weights&bias,MissingLink 等。我试图通过追踪以前版本的模型和数据来帮助科学家解决这个问题。
c)自动化管道:工程团队最近通过创建持续集成和持续交付(CI/CD)管道优化了构建和部署流程,确保快速可靠地将代码部署到生产环境中。ML 模型训练和部署需要类似的过程改进。至少,ML 模型部署过程需要编写脚本,这样,如果一个新的“竞争者”模型在测试数据的优化和满意指标上击败了“冠军”模型,那么该模型可以自动部署。例如,部署可能包括构建服务容器、将容器推送到容器存储库,以及将容器部署到托管实例。在训练方面,CI/CD 过程可以包括获取新数据、对其进行标记、使用自动化超参数选择来训练模型,然后将最佳性能模型存储在共享卷中以用于部署。
当您的团队构建模型并迭代时,这些最佳实践将确保您的模型更频繁、更可靠地部署到生产中。
由行业专家组成的“行会”进行同行评审,有助于确保你的方法是合理的、优化的,并跟上快速变化的技术。模型、超参数和数据版本化帮助您系统地提高模型性能。建立模型和数据 CI/CD 可确保您的模型更频繁、更可靠地部署到生产中。
综合
我还想简单介绍一些集成和优化。虽然这些项目的实施时间表可能会从短期到长期有所不同,但最好事先了解这些项目,以便知道您未来可能希望在哪些方面开展工程工作。
a)服务集成:像任何其他软件系统一样,您的前端通常会与您的后端(具有业务逻辑、数据库、身份验证等)进行对话。)然后你的后端会和你的模型对话。如果用户交互正在等待模型预测(例如我们的电子邮件文本预测),您的前端和后端之间的交互将是同步的(例如 HTTP/S)。然后,您的模型服务本身可以同步/异步地与后端集成。如果您的模型由 HTTP 端点提供服务(即同步),请确保您的后端服务器正在使用非阻塞 IO(因为预测时间可能会很长)。如果您希望您的前端直接访问模型(以防没有重要的业务逻辑),我建议使用像 Ambassador 这样的网关,它可以帮助您进行身份验证。最后,如果您的预测是离线的(即,没有等待预测的 UI),您可能想要考虑使用基于消息的架构(例如,消息队列、Kafka 等)来集成您的模型。).我将在下面的优化部分详细讨论这一点。
b)工作流集成:在上面的自动化管道部分,我们谈到了当新数据可用时,如何使用 CI/CD 来训练您的模型,以及当新的“冠军”可用时,如何自动部署您的模型。一个可能很重要的部分是整合您的数据注释步骤、数据清理、质量检查、A/B UX 测试等。然而,这些需要更复杂的设置,并且可能只有在启动生产后几个月才能实现(当然,除非您使用托管 ML 作为服务)。
c) HITL 备份——最近,我参观了旧金山市中心的亚马逊 Go 商店,对结账过程的便捷感到惊讶。也许我第一次去商店时,我的体验有点笨拙,因为我学会了“互动”,但我可以很容易地想象出结账是一个超级简单的过程,只要你去过商店几次,就可以带走午餐卷饼。需要注意的重要一点是,Amazon Go 似乎没有等待整个 ML 变得完美。事实上,他们成功地使用了一个人在回路的解决方案来纠正一个系统——无法决定我拿走了什么,把它发送给一个人类贴标机。
d)性能优化:对于真正高级的情况,一个有趣的架构优化是进行小批量预测,这是针对 GPU 进行优化的。因此,当您的前端与后端同步对话时,后端将预测请求放在一个消息队列中。模型服务成批地从队列中拉出,等待时间少至几十毫秒,批量大小为它一次可以处理的模型(例如,8 到 16 个图像等)。).它异步写回预测输出,然后后端可以为等待请求的前端服务。这种架构之所以有效,是因为 ML 推理代码针对批量进行了优化——使用 8 个图像的小批量进行预测比 8 个单独预测请求要快。另一个最后的优化可以是硬件优化(例如,使用 TPU、ASICs 或将浮点运算转换为固定整数运算等)。)
使用同步和异步消息传递平台的组合将您的模型与后端和前端服务集成,构建端到端的模型培训工作流,进行人在回路中的故障预防,以及性能优化,这些都是将您的模型与支持它的服务成功集成的技术。
步骤 5:快速迭代
最后,我不能重复这一点,你需要快速迭代。如果你经常和你的客户交谈,这应该是显而易见的。
这降低了您的项目风险,也有助于说服涉众对您的进展和您的解决方案的商业价值感到满意。理想情况下,在验证了一个“绿野仙踪”MVP 之后,你应该首先设定一个每月发布的节奏,然后遵循流行的 scrum 标准——每个 sprint 一次。超过这个时间,你就有可能让你的模型探索变得太“研究性”了。每次迭代,你都可以通过改进你的人工智能增强的 UX,扩展所提供的功能,提高模型性能,以及用更好的数据训练模型来取得进展。
更好的 UX
作为精益循环的一部分,您从客户那里获得的反馈对于确定您提供的价值主张和用户利益是否是用户所需要的非常有价值。任何验证或无效,对 UX 的任何更改,都会推动模型、数据等的下游更改。否则,您可能会花费大量的时间、金钱和资源来解决一个不再相关的问题。
更好的模型
模型训练本身就是一个迭代的过程。无监督、有监督和强化学习的每种技术都有多种算法,您的解决方案可能会从中受益。您的数据科学家或 ML 工程师应该优化培训管道,以便减少您的实验时间,并尽可能根据数据做出决策。模型版本化,在测试数据集上有一个基准度量,以便将新模型投入生产,为模型的代码建立一个 CI/CD,以及业务逻辑,这些都是重要的操作优化,使您可以轻松地在生产中逐步改进您的模型。有时,您可能希望重新审视您的 ML 问题框架—模型性能的一些最大改进可以通过改变您构建 ML 问题的方式来实现,或者如果在最先进的模型中有重大改进。
更好的数据
一旦你发布了你的产品,你可能会很快意识到客户使用你产品的方式与你最初的计划不同。用例的优先级可能会改变,输入数据本身可能会非常不同(数据漂移),或者您可能希望以不同于您最初计划的方式处理用例(例如,季节性、市场趋势等)。),或者输入和输出之间的关系可能改变(概念转变)。所有这些都需要您对模型的输入和输出进行定期检查——您可能希望使用生产中的使用数据来增量地训练您的模型。在对模型进行注释之后,您可能需要收集更多的数据,甚至对数据进行不同的标记。所有这些都要求您的数据管道不是为一次性的导出和导入而设置的,而是作为模型的连续“批处理”增量,这一点我们在上一步中已经简单地提到过。
通过快速迭代你的产品,快速验证/否定你的价值主张和特性,你可以确保不断地为你的用户提供利益,为你的利益相关者提供价值。
我希望这篇文章能引起你的共鸣,并让你在构建人工智能产品的正确方向上起步。如果您有任何问题或有任何反馈,请随时在评论中联系我们。
祝你的人工智能产品成功上市🍾 🥂 🎉 🥳
(更新:删除了对 2020 年的提及,因为该文章仍然相关)
这个系列是 Rahul Parundekar 为 AI Hero 写的。
Rahul 是一名人工智能专家,在设计和构建人工智能产品、工程、研究和领导方面拥有 11 年以上的经验,热衷于通过人工智能改善人类体验。
AI Hero 是一个无代码平台,可以帮助你的产品团队管理你的完整 AI 工作流——从构建 ML 问题,到培训、部署和优化你的模型——而不需要雇用数据科学团队。
数据科学家调试和错误解决基本指南
更快地解决错误,有更多时间进行创造性工作
调试是一个听起来很滑稽的词。这个词起源于最初的计算机时代,一个实际存在于计算机中的错误,它阻碍了计算机的功能。从那以后,它有了新的含义。现在,它意味着找到代码中问题的根源并解决它。
当您第一次开始编码时,调试代码或解决错误可能是最困难的事情之一。毕竟,教授如何编码的课程并没有为你提供找到问题根源并解决问题所需的工具。因此,当有抱负的数据科学家在代码中遇到问题时,他们会感到失落和困惑。
实际上一点也不复杂。您只需要确保遵循一些简单的程序来确定问题的根源。让我们看看它们是什么。
阅读错误
:我知道这听起来很明显,但是对于一个刚开始编程的人来说,把错误信息当成胡言乱语是很常见的。这导致他们没有利用这个错误消息的全部潜力,最终在试图找出问题时漫无目的地在代码中摸索。这就是为什么你应该做的第一件事,阅读,真正地阅读错误信息。很有可能,它会告诉你到底哪里出了问题。
让我们看一些例子:
在这种情况下,代码告诉我们,它找不到文件,因为它不存在。所以,我知道你的第一反应会是说,“不,文件在那里,我正在看”。不要慌张,重要的是理解这个信息意味着什么。不要担心,随着时间的推移,你会更好地认识到某些错误背后的含义,因为你会经常看到它们。
您的代码并没有说您是骗子,它只是说在您所说的位置找不到名为 iris-dataset.csv 的文件。这可能意味着:
- 您在文件名中输入了错误,或者
- 您的文件与笔记本不在同一个文件夹中。
因此,您可能需要:
- 确保名称书写正确(在本例中是 iris_dataset.csv,带有下划线而不是破折号),或者
- 添加该数据所在文件夹的名称。
另一个例子:
看起来很吓人,但是它告诉你的是在你的数据中没有这样一个名为“sepal_widt”的列。这可能意味着:
- 您忘记在数据框中包含所有需要的列,或者
- 你打错了。
我会在本文后面告诉你如何理解哪一种是这种情况。我选择了上面的两个例子,因为它们在数据科学工作中相当常见。但是阅读错误消息还有另一个技巧:跟踪错误。例如,在下面的例子中,我们得到一个 TypeError。
因此,TypeError 听起来非常抽象,但是我们可以通过回溯特性来跟踪错误,从而了解错误的原因。上面的箭头指向代码中导致这个错误的那一行。但是它并没有就此结束,因为它指向的错误发生在另一个函数内部。这段代码调用的函数。它用下面的箭头显示了函数内部出错的时间。这样,你就知道去哪里解决你的问题。
这里有一个小说明;此错误可能不是由回溯箭头指向的确切代码行引起的,而是由您在此代码的不同部分设置的值引起的。在本文中,我们将看到如何跟踪这一点。
谷歌一下这个错误,不管它看起来有多不寻常
当你第一次得到一个错误时,你可能会觉得你是地球上第一个得到这个错误的人。但是 99.999%的时候,除非你正在使用一个很少有人使用的框架或库,否则 Google 会给你一个答案。
你所要做的就是复制并粘贴你所看到的错误。例如,在前面的图像中,不要复制和粘贴整个消息,而只复制和粘贴“TypeError: 'list '对象不能被解释为整数”的部分。
这是我在谷歌上搜索这个错误时发现的。是的,这正是这段代码的问题所在。
谷歌错误有助于理解错误信息,有时也有助于找到解决方案。但是除了解决错误之外,通过阅读别人对这些错误的看法,你会学到很多东西。你编码得越多,得到的错误越多,修复得越多,你就越能理解他们通过阅读错误信息所表达的意思,最终你就越不需要咨询谷歌。
在 Jupyter 笔记本上,向后工作
在笔记本环境中工作意味着很容易运行部分代码并看到结果。我们不仅仅把我们的代码分成笔记本的不同单元,因为这很有趣。这是一种观察数据流并检查一切是否按预期顺利运行的方法。
因此,当您遇到错误时(或者一段代码没有输出您期望的结果),您的下一步应该是追溯问题。
我所做的是打印我在某个单元格中使用的变量/数据帧,并将它们与我期望看到的进行比较。这包括用 df.head()检查值或用 df.dtypes 检查列的类型。
让我们看一个例子。假设我有一个包含花的萼片长度和萼片宽度的数据框。我创建了一个新的列,取这两个值的平均值。但是当我绘制它们时,我看到平均列的值意外地不在 sepal_length 和 sepal_width 值之间。很明显,出问题了。
蓝色条:萼片长度,橙色条:萼片宽度,绿色条:萼片值的平均值。
蓝色条:萼片长度,橙色条:萼片宽度,绿色条:萼片值的平均值。
然后我要做的是打印出我在这个图中使用的数据框,看看数据是什么样子的。查看数据,我发现萼片平均值并不反映萼片长度和萼片宽度的平均值。很可能这个新列的计算有问题。
是的,检查新的 average 列的计算,我看到我将总和除以 3,而不是 2。
当然,问题并不总是这么明显。同样的问题可能是由于我在设置 sepal_average 列的值后意外地更改了它的值而引起的。但是通过从问题中回溯并检查我在哪里修改了有问题的列的值,总是可以帮助我找到问题的根源。
为更复杂的代码编写打印件
有时你的代码可能有函数、循环和其他复杂的结构,让你很难手动追踪错误。在这种情况下,一种解决方法是使用 print 命令。让我们看一个例子:
比方说,当您运行这段代码时,accumulated_list 值看起来并不像您预期的那样,或者这段代码中的某个部分给了您一个错误,而您不理解它。在这种情况下,您可以将打印命令放在发生某种值转换的特定位置,以查看哪里出错了。
有了新增加的内容,您可以打印代码正在处理的值。您将能够观察到该值随着时间的推移发生了什么变化,以及中间列表(new_list)是什么样子的。它将帮助您确定事情开始变得出乎意料的确切原因,或者在触发错误之前变量的值是正确的。因此,给你更多关于如何解决问题的见解。
就是这样,仅仅通过使用这四种简单的方法来检查你的错误,你就可以更有效地调试你的代码。正如我在另一篇文章中所说,如果你需要一些时间来解决问题,或者在你习惯处理错误之前需要一些时间,不要担心。通过动手实践,你在训练你的大脑,每次都能越来越快地发现模式和解决问题。就我个人而言,我发现在网上调试和寻找答案是我目前知识的主要来源。所以不要让错误和问题让你气馁,坚持下去!
🐼想更多地了解熊猫吗? 获取我的免费熊猫小抄。
基本机器学习项目清单
引导你一步一步地从原始数据到工作的 ML 模型。
TL;博士?点击此处获取我的清单副本,以便在你的下一个 ML 项目中使用。这个 Github 回购也包含一个。清单的 ipynb 模板和数据清理实验室,如果您想练习或了解如何使用模板,可提供解决方案。
为什么这很重要?
你是否曾经尝试过真正的 Kaggle 竞赛(或其他 ML 副业),并因为你仍在学习 ML、习惯 Python 库或对数据集的复杂性感到不知所措而感到失落?
我当然有——很多很多次。
当我从事数据分析或 ML 项目时,最糟糕的感觉之一是陷入前 3-5 个小时的无方向编码,感觉自己进展缓慢,担心自己做出错误的决定。
这就是为什么我创建了这个清单!它应该放在你的办公桌附近或几下鼠标之外作为参考,以帮助你看到全局。
当您处理数据集时,可能会遇到很多挑战和障碍,如果您不习惯,很容易感到不知所措。如果你开始感到迷失,用这个清单作为你的北极星。
这是终极目标吗? 绝对不是。
你能以不同的顺序做事吗? 是的,当然是。
这张清单对你有帮助吗?是的,如果你喜欢把结构和秩序带入你的问题中。
这篇博文是写给谁的?
这是为任何人写的,要么是刚刚开始使用 Python 进行机器学习的人,要么是需要复习 ML 工作流的人。
在这篇博文中,我将解释在清单的每个阶段你应该做什么。
在这个 Github Repo 中,我创建了一个练习。ipynb 和 a 解决方案。ipynb 基于一个简单的 Airbnb 机器学习项目。我将给出几个来自解决方案文件的代码示例。如果您想继续学习,请下载。
让我们开始吧。
先决条件:业务和数据理解
我能听到你的眼睛在我身上转动。
来吧,伙计。让我们进入编码部分。
如果你坚持跳过这一步,那就继续吧,但是正确地做这件事会节省你几个小时和头疼、 我保证 !
第一:业务部分。
假设你的经理阿曼达给了你一个 Airbnb 数据集。它有 106 个功能,她告诉你,我们想更好地了解租赁清单。
OK 。首先,她想让我把它们分类吗?她想让我做一个仪表板吗?她想让我回答什么问题?目标是什么?
弄清楚你的目标是什么,并试着计划实现目标的不同方法。
第二:数据部分。
有没有可以打印或保存的数据字典或模式?利用这一点。
花 1-2 个小时了解这 106 个特性中的每一个。写下你打算删除的功能,名字没有直观意义的功能,以及看起来需要大量清理的功能。
这是事件级的吗?一个列表可以有多行,每一行都有一个时间戳和一个事件。或者这是单元级的,每行唯一地标识一个可出租的单元?
在你开始编码之前,先熟悉你正在做的事情。
理解并回答这样的问题会帮助你开始朝着正确的方向前进。就像踏入迷宫前先看地图一样。
I .导入数据和库
将所有的导入放在分析的顶部是一个很好的做法。每当你需要一个还没有导入的库或函数时,回到顶部,在那里导入它。
现在导入数据集,如果您必须连接它们,请尝试等到完成探索性数据分析(EDA)后再进行连接。
二。探索性数据分析
由于篇幅较长,本节分为 5 小节。
你知道人们怎么说数据科学家花费高达 80%-90%的时间清理数据吗?对,那主要是因为这部分。
一定要慢慢来。这里要彻底。一旦你完成了这一部分,你就已经完成了 ML 算法的一半。
A.检查重复项
请花点时间删除完全重复的行或调查数据集中的冲突 id。这很容易忘记,但这是你应该永远走的一步。
B.分离您的数据类型
清点您的数据类型。通常,您可能会遇到 6 种数据类型,按频率降序排列。
- 数字(可以是离散的或连续的)
- 分类(序数、名词性和二进制)
- 日期/时间
- 文本
- 图像
- 声音
首先将数据分成数字数据类型和其他类型。这可以通过以下方式实现:
先浏览一下你的数字数据。最常见的情况是,这里唯一的问题是缺少值(我们将在后面处理)。
现在,看看你的分类数据。可能会有很多问题需要你去解决。其中一些是…
- 数字数据、二进制数据和日期/时间数据被输入为字符串
- 多个值被打包到一个要素中
- 功能的命名可能不正确
- 你认为听起来有用的功能似乎毫无意义
不要一看到问题就开始清理。我们不要操之过急。
把你现在能看到的问题列一个待办清单。你可能不会发现所有的问题,所以如果以后又有新的清洁问题出现,就把它加到这个列表中。
在我的练习笔记本里(如下图),在我开始打扫之前,我花了一些时间写下这些。
Jupyter 笔记本截图。
C.初始数据清理
注意: 如果你把“填补缺失值”加到了你的清理待办事项中,现在就把它去掉吧。先别做。我将在后面的步骤中解释原因。
一旦你有了一个全面的清洁待办事项清单,一次完成一个。下面是一个例子,说明我是如何解包一个具有多个值的特性的。
打包功能。
一旦你完成了清洁待办事项清单,是时候想象一下了。
D.想象和理解
请注意,你在这一节中找到的事情能够并且将会发现你想要添加到清洁待办事项列表中的事情。
如果您确定了想要应用于数据的任何异常值或转换,您现在可以应用它,但是最好在您将数据分成训练和测试之后再做。
如果需要,可以用直方图、分布图或条形图检查数据的分布情况。也许探索特征之间的关系。
使用这一部分,看看您能否回答最初向您提出的业务问题。你还不能执行任何机器学习,但并不是所有的问题首先都需要机器学习。
利用像 Matplotlib 或 Seaborn 这样的数据库。也许可以使用散景或 Plotly 探索交互式可视化。世界是你的。
这里有一个例子,说明我是如何试图理解评论的新近性和 Airbnb 房源的定价之间是否存在某种关系的。
E.评估缺失值
在我们离开 EDA 之前,我们必须解决另一个问题:缺少值。除非你使用像 XGboost 这样的高级算法,否则你必须处理丢失的值,这样你的数据才是 ML 友好的。
简单地说,你有两个选择:删除或估算(又名填充)。
在这一部分中,如果你认为合适的话,删除缺失的值,然后制定策略来填充它们,但不要估算它们。
一般来说,将缺失值的插补视为您想要调整的另一个超参数是一种很好的做法。因此,在对数据进行训练/测试分割后,您需要运行插补策略。如果您愿意,也可以用同样的方式处理缺失值的删除(即,在训练/测试分割后删除缺失值)。
这样,当您在验证集上测试整个机器学习工作流时,您还可以看到更改插补或移除策略如何影响工作流的性能。
让我们回顾一下我们的选择:
1.移除它们
- 特定特征中是否有许多缺失值?选择一个阈值(比如说 70%),如果你觉得这些特性没有价值,就去掉它们。
- 特定行中是否有许多缺失值?首先,调查它们可能丢失的原因,以防您能想到行丢失值的合理解释。如果你觉得它们没有价值,扔掉它们。
- 哪些行缺少您要预测的目标要素?监督学习方法需要一个标签,所以删除不包含目标变量的行。
红色的特征可能应该被移除。
2。估算它们(现在制定策略,以后估算)
- 根据你的知识从其他特征推断它们的值
- 数值?用平均值或中值填充很简单。
- 绝对的?填写最频繁的。
- 想要挑战吗?研究使用机器学习来预测你丢失的价值观。Scikit-learn 的迭代输入器很有意思。
对于您使用的每个策略,记下您希望每个策略应用于哪些功能。这使得分割数据后的插补更加容易。
太棒了,现在我们完成了项目的 EDA 部分。
三。训练/测试分割
通常将 80%-90%的数据用于训练/验证,而将剩余的数据用于测试(取决于你有多少数据)。
如果您想要使用交叉验证或 K-Fold 交叉验证,请在以后选择模型或调整模型时将验证数据与训练数据分开。
从现在开始,你所做的一切都可以被评估和调整。调整并不仅限于模型超参数。
四。准备 ML
既然您已经将数据分成了训练和测试,我们需要将数据转换成 ML 友好的格式。这一部分分为 4 个部分,在它结束时,你已经为机器学习做好了准备。
A.处理缺失数据
现在,我们执行插补策略,确保您的训练和测试数据中不再有缺失值。
提示:使用 scikit-learn 的 SimpleImputer()或其他估计器来填充您缺少的值。使用这些估算器/变形器可以让您将它们适合您的训练 数据 然后 使用它们将 变换 您的 训练和测试数据 。
这里有一个用零填充一组特征的例子…
请注意,在实践中,我们可以一次估算整组特征。在练习 .ipynb 中,为了简单起见,一次只针对一个特性。
B.特征工程
一旦您处理好了所有丢失的值,就可以利用这一部分来设计更多您认为对您的 ML 模型有用的特性。
同样,把它当作一个您可能决定要调整的超参数。
与广泛的模型超参数调整相比,特征工程有时更能改善模型。
这里有一个简单的例子:
请注意,每当您设计自己的特征时(特别是,如果您执行除法或对数运算),您就有可能创建无效的无穷大值或 NA 值。
C.转换数据
一旦您对所拥有的特性感到满意,现在您必须调整/缩放/转换您的数字变量,或者将您的所有分类或文本特性转换为数字。
让我们一次看一个:
数值数据
如果您有非常倾斜的数据,对数变换或平方变换可能是一个好主意,使您的数据看起来更正态分布。
清理费的对数变换。
如果您怀疑离群值对模型的性能有负面影响,现在就删除离群值。
并非所有的 ML 算法都要求特征在相同的尺度上,但有些算法要求(线性回归、神经网络、K-Means 聚类等)。).如果你是这种情况,你必须缩放你的功能。一些选项包括标准化、规范化和最小-最大缩放。
分类数据
通常有三种类型的分类数据,下面是您如何处理每一种数据:
- 名义上的(如红色、绿色、蓝色):类别没有固有的顺序。我们可以使用 sklearn 的 MultiLabelBinarizer(如果值被压缩到一个特性中)或 OneHotEncoder(如果特定特性的每一行只有一个类别)这样的转换器对这些特性进行热编码。
- 序数(例如,低、中、高):通过将这些特征编码为序数(例如,1、2、3),尝试保持数据中的自然顺序。你可以自己创建一个自定义转换器来将这些值映射到一个期望的数字,或者使用 sklearn 的 OrdinalEncoder。
- 二进制:如果你还没有处理过你的二进制特征,使用 sklearn 转换器,比如 LabelBinarizer 或者 MultiLabelBinarizer,将它们编码为 0 或者 1。
文本数据
无需深入自然语言处理领域,在处理文本数据时,通常可以采取以下基本步骤:
- 使用 nltk 的 word_tokenize 或 sentence_tokenize 对文本进行标记。将文本数据标记化就是将单词、表情符号等分解成它们自己的单独的字符串/对象,而不是一个大字符串。
- 使用 nltk 的停用词语料库移除停用词。
- 词干或词汇化你的词汇。词干是指去掉对单词没有太大意义的字母(例如,“-ing”、“ed”等)。).词汇化完成了词干提取,但是计算量更大。
- 将令牌转换为包含令牌计数或令牌的 TF-IDF 值的矩阵。
D.特征选择
最后,现在是我们执行一些降维的时候了。
这不仅可以提高模型的预测性能,还可以减少计算时间。
以下是一些想法:
- 方差阈值:忽略方差低的特征,因为方差高的特征通常包含模型的大部分信息。
- 移除高度相关的特征:识别具有高度相关的成对特征,并移除其中之一。
- 类别特征无关性?使用卡方测试删除与目标特性不相关/无关的特性。
- 数字特征无关性?使用ANOVA F-statistics来确定可能与目标特征无关的特征。
- 递归消除特征
以下是移除高相关性要素的示例:
一旦你完成了特征选择,我们就正式准备好机器学习了!
接下来的部分很简短,因为它们只描述了数据准备充分后要采取的基本步骤。
动词 (verb 的缩写)挑选你的模特
根据您的问题,选择您认为有效的适当模型。
图信用:此处
不及物动词型号选择
一旦你选择了一些候选模型,使用 K-Fold 交叉验证等方法来确定 2-3 个最有希望的模型!
七。模型调整
使用标准技术,如网格搜索或随机搜索,以确定性能最佳的超参数。
如果你准备好了,探索像 hyperopt 这样的库,它们利用贝叶斯统计来调整你的模型。这基本上是一种“智能”随机搜索,也就是一种“更快”的网格搜索。
八。挑选最好的模型
展开,就大功告成了!
总结想法
注意这篇博文是如何 90%的数据清洗、探索和预处理,但只有 10%的机器学习。
当你开始一个机器学习项目时,可能会觉得需要永远才能达到一个简单的工作模型。尝试不同的模型、了解高级超参数调整等非常有趣。但是在你到达那个点之前,在数据集里磨来磨去会感觉灵魂枯竭。
清洁和预处理并没有被浪漫化为十年来最性感的技能。然而,我希望这已经向你展示了当你不得不这样做的时候,保持有条理和从容不迫是多么的重要和复杂。
如果你已经写了这么多博文,感谢你的阅读!我希望你喜欢这个并从中有所收获。
请记得查看此处的清单或 GitHub repo 中的练习实验室、解决方案文件和清单附件。ipynb 模板。
大多数数据科学课程不会教给你的基本技能
…以及如何学习它们
在 Unsplash 上由 Lacie Slezak 拍摄的照片
如果你曾经在数据科学领域寻找工作,你可能会注意到,几乎所有的工作都需要有数据科学家工作经验的人。
因此,新人很难进入这个领域,也很难找到第一份工作。
大多数公司想要一名有经验的数据科学家而不是一名新合格的候选人的原因是,在商业环境中提供数据科学解决方案需要许多极其重要的技能,而大多数数据科学课程、训练营和学位课程都不会教你这些技能。
在本文中,我将介绍通过数据科学实现商业价值所需的三项重要技能,以及如何获得这些技能。
1.软件工程
几年前,当查看数据科学家的招聘广告时,技能通常主要集中在拥有数学和/或统计学背景上。博士学位或至少硕士学位通常被列为一项要求。
如今,所需技能更多地转向编程和软件工程技能,如 Python、Github 和 SQL 知识。现在很少看到数据科学招聘广告中把博士学位列为基本要求。
这背后的原因主要有两个:
- 企业已经意识到,不管模型的质量如何,也不管开发过程的复杂程度如何。如果您不能将模型部署到业务的运营部分,如网站,那么该模型实际上是无用的。
- 与此同时,机器学习包、平台和工具变得越来越容易获得,实施这些工具的门槛已经大大降低。这一点,加上 autoML 工具越来越多的可用性,意味着您不再需要深入的机器学习技术理论知识来开发模型。现在的挑战实际上是将这些模型引入生产环境,并将它们连接到前端系统。
数据科学家现在通常被期望能够编写生产质量的代码,或者这样他们可以独立于其他团队部署模型,或者至少这样部署模型的软件工程师可以很好地阅读、使用和解释代码。
那么,你如何获得这些软件工程技能:
- 参加一些软件工程课程/阅读数据科学书籍。上周,我发表了 5 本我最喜欢的 Python 编程书籍,它们很好地涵盖了一般编程的最佳实践。
- 构建一个实用的附带项目,涵盖整个模型开发过程——从数据编排到模型开发,再到模型部署。请确保您的代码结构良好,包括测试,并遵循一般的软件工程最佳实践。
- 为开源项目做贡献(或者阅读贡献指南并在自己的项目中实现)。开源软件包必须遵循严格的软件工程实践,这样许多人才能安全地维护和添加到同一个项目中。参与这些项目(通常有黑客马拉松为新手提供支持)可以帮助你获得软件开发的实际经验。或者阅读一些库的文档,Scikit-learn 的非常好,可以帮助你理解这些技术在实践中是如何使用的。
2.沟通
最近我看到越来越多的人使用一个短语,即“数据科学不是产品”。这意味着,数据科学家构建的机器学习模型并不是最终产品。机器学习模型的价值在于它在解决业务问题的现有业务系统或产品中的部署。
数据科学不是产品
从数据收集一直到在产品中使用模型的过程不能由数据科学家独立完成。数据科学家需要处理:
- 项目干系人如产品经理和总监,将他们的业务问题转化为数据问题,随后,以非技术人员能够理解的方式将数据解决方案传达给他们。
- 数据工程师他们将确保数据科学家构建模型所需的数据被准确收集、转换并在正确的位置可用。
- 软件工程师将现有系统或产品与机器学习模型连接起来的人。数据科学家需要确保他们清楚地传达了哪些数据需要输入到模型中,以及任何需要到位的限制和安全网。
因此,数据科学家需要成为优秀的沟通者,因为如果没有在正确的时间以正确的方式传达或解释正确的信息,项目将面临巨大的风险。
要发展沟通技巧,全靠练习。如果您正在学习数据科学,有很多机会可以练习这些技能,同时增强您的学习过程。因为向某人解释你所学到的新概念是被称为 费曼技巧 的最受认可的学习技巧之一。
“想学好一件事,就去解释!”,理查德·费曼
有很多方法可以通过学习磨练你的沟通技巧:
- 主动为比你处于学习阶段更早的人提供辅导。
- 找机会谈谈你学到的东西。尽管目前大多数国家对大型聚会有限制,但仍有许多在线会议和聚会在进行。
- 写教程、博客帖子、书评或项目综述。你可以把这些放在你自己的网站上或者写在这里。
3.商业头脑
你会经常看到领域知识被列为数据科学家需要的技能。现实情况是,数据科学可以应用于如此多的不同领域,以至于在开始某个特定领域的工作之前很难获得知识。
然而,一项可以磨练的技能是商业头脑。
在过去的几年里,数据科学领域见证了公民数据科学家的崛起。在特定业务领域工作的非数据科学家,他们使用新的、更易访问的数据科学工具来应用数据科学解决其领域中的问题。
公民数据科学家兴起的原因是,在特定领域工作的人,例如营销部门,将最了解存在的问题,这些问题已经成熟,可以通过应用机器学习来解决。
“世界是一个大数据问题。”安德鲁·迈克菲
因此,数据科学家必须很好地理解业务流程和业务运营的基本原理,因为这将确保他们能够利用数据交付价值和解决业务问题。
那么,你如何获得这些商业知识:
- 通过文章或短期课程,至少学习一点商业领域的知识,尤其是在数字领域。例如,了解一些现代数字营销(PPC、电子邮件、展示和 SEO)以及存在的问题和潜在的优化是一个好主意。
- 如果你目前在一家企业工作,试着花时间在其他领域,并不时与其他团队坐在一起,了解他们的具体领域。如果你不在企业工作,那就自己创造机会,实际了解业务流程。例如,我经营一份定期的电子邮件简讯,这帮助我了解了一些电子邮件营销中存在的挑战。
可以通过在线课程、训练营和学位课程学习数据科学的理论和实践元素。然而,与开发数据科学项目来解决实际业务问题相比,在教育环境中开发项目和模型有着本质的区别。本文中列出的其他技能将帮助您理解这些挑战,并获得成为真正有用的数据科学家所需的技能。
感谢阅读!
我每月都会发一份简讯,如果你想加入,请点击此链接注册。期待成为您学习旅程的一部分!
正则表达式的要点
它们是什么,你应该知道的特殊角色和帮助你建立它们的资源
它看起来有点像 Gobbly-glook,不是吗?来源:https://regex101.com/
不可避免地,一个人可以进入软件工程的各种方式导致我们许多人学习(在这种情况下不是学习)各种不同的概念。也许软件工程师能够理解和利用的最有用的概念之一是正则表达式。你可能之前遇到过它们,已经被你面前看到的字符完全迷惑了,或者你已经使用过它们,想要获得更全面的了解。本文旨在定义什么是正则表达式,正则表达式的基础以及如何使用它们,并为测试正则表达式和进一步学习提供有用的资源。
定义正则表达式
正则表达式(或简称为 regex)允许我们定义和设置规则来检查一个文本字符串中是否存在某个字符模式。正则表达式帮助我们匹配、定位和管理文本,提供了一种快速且相对简单的方法来操作数据,尤其是在大型复杂程序中。
正则表达式:用于检查文本字符串中模式存在与否的字符序列或模式
让我们以电子邮件地址为例。当你注册 Medium.com 时,你需要提供一个电子邮件和密码。在幕后,Medium.com 应该(你永远不知道)使用正则表达式来验证电子邮件地址的格式是有效的,或者密码是有效的。通常情况下,它会显示一条烦人的小消息,上面写着:“您的密码不包含下列特殊字符之一:?,!,.、"、'等。".举个简单的例子,我们可以使用下面的正则表达式来过滤以“@gmail.com”结尾的文本字符串中的电子邮件:
(@gmail。*.com$)
实际上,这可能不是正则表达式的实际用途,但它展示了正则表达式测试字符串匹配特定字符的能力,在本例中,文本字符串以“@gmail.com”结尾。
正则表达式基础
正则表达式是由字母和字符组合而成的。简单来说,如果你想测试单词“苹果”或“梨”,你只需输入:
r" appler" pear
第一个测试中包含单词“apple”的字符串或第二个测试中包含单词“pear”的字符串都可以通过。从这个意义上说,大多数字母和字符都是匹配的,但是有些字符和特殊字符在正则表达式中有特定的含义,下面列出了这些字符,并将进一步详细讨论:
- 元字符
- 特殊序列
- 转义序列
- 字符类别
- 事件指示器
- 定位锚
我们还将讨论正则表达式中贪婪与非贪婪匹配的概念。这看起来确实涵盖了很多内容,但是不要担心,因为在本文的底部有一个摘要,其中包括关键的定义,以及各种帮助您创建和记住正则表达式的资源。
元字符
元字符是正则表达式中具有特殊含义的字符。下表显示了一些常见的正则表达式元字符以及每个元字符的定义:
**Metacharacter** | **Description**. Finds any single character
^ Start of string
$ End of string
* Matches zero or more times
+ Matches one or more times
? Matches either 0 or 1times
{} Matches all inside a set amount of times
[] Specifies a set of characters to match
\ Escapes metacharacters to match them in patterns
| Specifies either a or b (a|b)
() Captures all enclosed
为了帮助您进一步理解每个元字符本身,下面是每个元字符的实例
.**Regular Expression**
r” .**Test String**
word
在本例中,元字符“.”将匹配测试字符串中的任何字符。因此,测试字符串“word”在所有情况下都会通过。
^**Regular Expression**
r” ^word**Test String**
word
元字符“^”匹配字符串的开头,不消耗任何字符。这意味着正则表达式在测试字符串的开头测试“word”。如果我们将测试字符串改为“aword”而不是“word ”,那么测试字符串将不匹配正则表达式,因为“word”不在字符串的开头。
$**Regular Expression**
r” word$**Test String**
word
在本例中,元字符测试测试字符串末尾的“word”。与上面相反,如果我们将测试字符串更改为“aword ”,那么测试字符串将会通过,因为“word”在字符串的末尾。
+**Regular Expression**
r” a+**Test String**
aa
当元字符“+”测试一个或多个连续字符时,测试字符串“aa”将通过,因为正则表达式已经识别了两个“a”字符。
?**Regular Expression**
r” ba?**Test String**
ba b a
元字符“?”将测试一个字符一次或多次。在这个上下文中,正则表达式测试字符“ba”或更多次,而不是字符“a”本身。在文本字符串“ba”中,当它与“ba?但是“b”也会通过,因为正则表达式测试的是后面没有特殊字符的字符“b”。
[]**Regular Expression**
r” [abc]**Test String**
aa bb ccc
方括号元字符也称为字符类,用于测试括号中的一组字符。因此,测试字符串将完全通过,因为“a”、“b”和“c”都被指定为方括号内的字符。
\**Regular Expression**
r” \Ahello**Test String**
hello
反斜杠元字符将在后面更详细地讨论,但它本质上表示一个特殊的序列。在本例中,“\A”指定了一行的开始,因此“hello”将通过测试。
|**Regular Expression**
r” a|b**Test String**
a hello b
“|”正则表达式表示或,该正则表达式指定字符“a”或“b”。因此,测试字符串将匹配测试字符串中的“a”和“b ”,但不匹配单词“hello”或空格字符。
{}**Regular Expression**
r” a{3}**Test String**
aaa
花括号元字符指定一个字符出现的次数。在这个例子中,正则表达式寻找测试字符串提供的 3 个连续“a”字符的模式。
(…)**Regular Expression**
r” (abc)**Test String**
a b abc
这与括号中的正则表达式相匹配,从字面上表示一个组的开始和结束。本例中的测试字符串不会匹配字符“a”或字符“b ”,但会匹配字符“abc”。
特殊序列
一个特殊的序列是反斜杠 '' ,后跟下面列表中的一个字符,每个字符在正则表达式中都有特殊的含义:
**Special Sequences** | **Description**\A Matches character at beginning of string\b Matches character at beginning or end\B Matches character NOT at start or end\w Matches any word character\W Matches any non-word character\d Matches any digit, ie. 0-9\D Matches any non-digit character\s Matches any whitespace character\S Matches any non-whitespace character\0 Matches any NULL character \n Matches any new line character\f Matches any form-feed character\t Matches any tab character\v Matches newlines and vertical tabs\Z Matches specified character at end of a string
转义序列
转义序列用于匹配正则表达式中的特殊字符。这意味着我们可以使用带有前缀“\”的特殊字符。比如说;
**Escape Sequence** | **Description**\. Matches “.”
\+ Matches “+”
\( Matches “(“
字符类别
字符类在正则表达式中指定要在方括号之间匹配的字符。它们允许我们在一个文本字符串中找到一系列字符。以下是一些常见的括号以及允许我们在正则表达式中指定的内容的描述:
**Brackets** | **Description**[abc] Finds any character within the brackets[^abc] Finds any character NOT within the brackets[a-z] Matches any characters between a and z[^a-z] Matches any character excpet those in range a-z[a-\A-Z] Matches any character in range a-z or A-Z[0-9] Finds a digit within the brackets[^0-9] Finds a digit NOT within the brackets[(] Matches the literal '('
例如,如果您想要匹配“a”或“e”,请使用[ae]。如果我们将世界指定为“hello ”,那么“hello”或“hello”将匹配。字符类是正则表达式的一种非常常见的用法,在本文开头使用的电子邮件示例中,我们可以测试用户意外输入“@gmeil.com”而不是“@gmail.com”的情况。
出现指示符(或重复运算符)
上面提到的一些元字符也属于出现指示符的范畴。这些本质上是元字符,它们匹配字符串中一个字符、字符组或字符类的多个实例。一个正则表达式中允许有多个出现指示符。这些指标列举如下:
**Occurrence Indicators** | **Description**+ Matches one or more times? Matches zero or one time* Matches zero or more times{n} Matches exactly *n* number of times{n,} Matches at least *n* number of times{n,m} Matches from *n* to *m* times{,n} Matches up to *n* times
定位锚
锚点不匹配任何字符,而是匹配一个位置,通常在字符之前、之后或之间。
**Anchors** | **Description**^ Start of string$ End of string\A Start of string\Z End of string\b Matches between start/end of a word \B Inverse (non-start or non-end of a word)
贪婪 vs 非贪婪匹配
默认情况下,重复是贪婪操作符,意味着首先匹配尽可能多的字符。这意味着如果您测试了以下正则表达式:
**Regular Expression** {START}.*{END}
**Test String** {START} Hello world 2{END} and {START} hello world 2{END}
正则表达式将返回一个完全匹配:
**Full Match**: {START} Hello world 2{END} and {START} hello world 2{END}
然而,我们可以通过添加一个额外的“?”来解决这个问题经过重新分配,经营者限制其贪婪。现在,当我们用相同的测试字符串测试下面的正则表达式时,我们实际上返回了两个匹配。
**Regular Expression** {START}.*?{END}
**Test String** {START} Hello world 1{END} and {START} hello world 2{END}**Match 1**: {START} Hello world 1{END}
**Match 2**: {START} Hello world 2{END}
既然我们已经完成了正则表达式和所使用的不同元字符的 whistlestop 之旅,接下来要做的事情就是练习。下面是一些资源,希望能帮助你创建和测试你的正则表达式。
资源
正则表达式测试器
有各种各样的资源可以用来测试正则表达式,我在下面列出了其中的一些。它们对于快速编写和验证正则表达式非常有用,但是您应该通过将正则表达式合并到正在构建的解决方案的测试中来对表达式本身做进一步的测试。
- regex 101—https://regex101.com/r/22QfRq/2
RegEx101
也许是我最喜欢的正则表达式编辑器,RegEx 提供了一个干净易用的用户界面。在左侧,您可以指定表达式将使用的语言,在中间,您可以构建和测试表达式,在右侧,您可以参考快速参考手册。
regexr.com
regexr 对于 JavaScript 和 PCRE 正则表达式非常有用,它提供了一个简单的用户界面,左边是一个参考指南,右边允许您测试表达式。这个编辑器有些局限性,因为它只能测试 JavaScript 和 PCRE。
regextester.com
另一个有用的编辑器 regextester 允许你编写和保存正则表达式,也可以点击有用的超链接来显示普通正则表达式的例子。
归根结底,选择正则表达式编辑器很可能取决于个人偏好。我最喜欢的是 regex101,这绝不是一个详尽的编辑器列表,所以值得一看。
正则表达式文档
同样,对于正则表达式测试器,也有各种参考指南可以帮助您构造正则表达式。
- 微软—https://docs . Microsoft . com/en-us/dot net/standard/base-types/regular-expression-language-quick-reference
- w3Schools(Python)——https://www.w3schools.com/python/python_regex.asp
- w3Schools(JavaScript)——https://www.w3schools.com/jsref/jsref_obj_regexp.asp
- Python 正则表达式备忘单—https://www.debuggex.com/cheatsheet/regex/python
- JavaScript Regex cheat sheet—https://www.debuggex.com/cheatsheet/regex/javascript
- Regex 备忘单—https://www.debuggex.com/cheatsheet/regex/PCRE
摘要
概观
- 正则表达式是描述正则表达式引擎试图匹配的字符模式的文本字符串
- 正则表达式允许我们检测、提取、替换和匹配字符串,以便从文本中提取关键信息
- 有各种各样的正则表达式参考指南和在线编辑器可供使用,它们允许您在将正则表达式合并到您的解决方案之前对其进行测试
特殊字符:
- 元字符:具有特殊含义的字符
- 特殊序列:反斜杠“\”后跟一个特定字符
- 转义序列:用于匹配正则表达式中的特殊字符
- 字符类:在方括号内指定要匹配的字符
- 出现指示符:匹配一个字符的多个实例的元字符
- 定位符:匹配一个位置,通常在字符之前、之后或之间。
如果你已经花时间阅读这篇文章,那么感谢你这样做。希望这对您有所帮助,参考资料部分可以指导您进一步的学习。
爱沙尼亚危机引发全球黑客马拉松
爱沙尼亚拉开了即将举行的全球黑客马拉松的序幕,这场对抗电晕危机的马拉松有超过 100 万人参加
图片来源:pexels.com
黑客、生活黑客、数据科学家、产品开发人员、应用工程师等将在即将到来的最大的在线全球黑客马拉松中联合起来。
世界陷入了前所未有的疫情危机。近一半的人类被封锁——身体活动受阻,边境关闭,学校封锁,整个行业基本关闭,一个又一个国家的医疗保健系统已经不堪重负,处于危急状态的病人数量呈指数级增长。但是我们在线无国界。那么,在这种情况下你会怎么做呢?当然,爱沙尼亚的方式是建立一个超过 1 00 万人的全球黑客马拉松。
全球黑客大会将于 4 月 9 日至 12 日举行,黑客马拉松的目标是改变我们所知道的世界,越多的人参与其中,整个全球社区的利益就越大。
由于疫情,周围发生了很多事情,我不会用另一个悲伤的统计数据摘要来加重你的负担,你可以从许多不同的来源获得更新。我想概述的是爱沙尼亚电晕危机前奏的某些线索——这是一个关于爱沙尼亚如何从一个 20 年前人们甚至不知道“初创企业”这个词是什么意思的国家变成欧洲人均初创企业最多的国家的故事,现在引发了一系列事件,仅在过去几周内,就导致了 40 多个国家的本地黑客马拉松,已经有超过 10 万人参与,并旨在在 4 月份超过 100 万人的全球黑客活动中达到高潮。
历史的开端
20 年前,从字面上看,爱沙尼亚很少有人知道“创业”这个词的存在。想想这个:爱沙尼亚的总人口是 130 万。无法确定准确的跟踪记录,但据估计,2006 年爱沙尼亚总共只有 5 笔创业投资,这些交易筹集的资本总额估计约为 570 万欧元。到 2019 年,同样的数字已经增长到每年约 3 亿欧元和 74 笔交易。
整个数字历史看起来是这样的:
来源:“资助,失败&爱沙尼亚科技创业公司的退出 2006–2019 # EstonianMafia”,由马丁·维利格(Bolt)和爱沙尼亚创业领袖俱乐部提供和策划的数据集
引发公众对创业公司认识的最引人注目的事件是 Skype 的出现,该公司由瑞典人、丹麦人和爱沙尼亚人共同创立,其工程团队位于爱沙尼亚塔林。特别有趣的是,当爱沙尼亚还没有任何显著的创业文化时,我们突然…繁荣!…我家后院有只独角兽。
对于那些不记得的人来说,Skype 最初的品牌是“Kazaa 作者开发的 P2P VoIP 客户端”。P2P 文件共享平台 Kazaa 本身就是一个很酷的故事。如果你感兴趣,你可以从维基百科的文章中阅读一些关于它的历史记录,例如,如果你感兴趣的话,但这里足以说明 Kazaa 设法产生了相当多的模糊信息,所以当它的作者开始使用 Skype 时,它立即成为一个曲棍球棒式的增长,因为早期采用者当时的公众看法是,如果它是由 Kazaa 的创造者完成的,它一定是好的。
从多个方面来看,Skype 似乎是一个疯狂的意外。在一个没有任何创业文化的国家,它不仅仅是一只突然冒出来的独角兽,而且它的独角兽退出速度极快 Skype 从 2003 年成立到 2005 年 9 月以 41 亿美元退出易贝只用了两年时间。又过了 6 年被微软以 85 亿美元收购。从 2005 年 1 月到 2007 年 11 月,在易贝收购 Skype 期间,我个人在 Skype 工作,最初是一名后端开发人员,建立了一个机器学习管道来对抗信用卡欺诈,后来在我离开去追逐其他挑战之前,建立了一个从 0 到大约 40 人的 Skype for Mobile 工程团队。
这种对创业公司一无所知的经历对年轻的科技社区产生了巨大的影响。在硅谷,每隔一周就有大宗交易发生,但爱沙尼亚仍对极权共产主义苏联政权的历史记忆犹新(当时刚刚在 15 年前重获独立),薪资水平仍很低,远低于任何合理的西方标准。收购易贝 Skype 的那一刻,对 Skype 早期员工来说,股票期权像钱一样按季度分配,突然开始下雨了。Skype 和这些事件的整个故事在爱沙尼亚公共媒体上被广泛关注,对创业公司作为一个概念的认识总体上得到了强烈的推动。
前进的基础
Skype 退出后,紧接着发生了几件事,推动了这个即将成为初创国家的车轮。首先,爱沙尼亚的 Skype 联合创始人成立了一个名为环境声音投资(ASI)的投资工具,开始在爱沙尼亚及其周边地区进行天使投资。我个人碰巧为他们的投资渠道的技术尽职调查过程提供建议,还领导了一个在他们的孵化器类型的实验中构思的创业项目。由于这些参与,我看到了另一个重要的关键事件的发生。也就是说,ASI 的人们为其投资组合的公司建立了一个每周的早间咖啡活动,面对面地聚在一起,交流经验,培训推销,获得反馈等。在某种程度上,这种俱乐部式的聚会扩展到了 ASI 投资组合公司之外,于是成立了爱沙尼亚创业领袖俱乐部。
在那之后没多久,一些来自创业领袖俱乐部的最活跃的人成立了另一个运动,叫做garages 48,这是一个独立的 48 小时黑客马拉松系列。这发生在 2010 年初第一次举办黑客马拉松的时候。我个人不仅参与了活动的组织,还作为一个参赛团队的一员(在最初的 20 个小时里已经设法创造了实际收入)。后来,越来越多的事件被创造出来,这个系列已经成为一个巨大的成功,其形式被出口到许多不同的国家,甚至远至非洲。你可以在这里看到从举办的所有赛事的历史。
最初,当我们开始这个系列时,我们的期望很低,因为我们不一定期望真正的创业公司会从这些黑客马拉松中出现。整个想法更像是把人们聚集在一起,创造完成事情的经验和态度,让志同道合的人找到彼此,也许在事件和经验之后共同发现一些真实的东西。然而,时不时会有真正的创业公司作为额外的奖励出现,其中也有一些非常酷的故事。例如,一个名为 MSQRD 的项目是 2015 年明斯克(白俄罗斯首都)活动的获胜者,仅 3 个月后就被脸书收购,交易规模估计为 4000 万美元。
#EstonianMaffia
从早期开始,这个国家就一直在输送优秀的团队。以 2011 年 9 月 SeedCamp 介绍日为例,20 支决赛队伍中有 4 支爱沙尼亚强队。当时来自 500 Startups Accelerator 的戴夫·麦克卢尔(Dave McClure)创造了现在仍然存在的 Twitter 标签#EstonianMaffia,该推文的标题是。
甚至当时的爱沙尼亚总统(2006 年至 2016 年)托马斯·亨德里克·伊尔韦斯也在推特上吹嘘#爱沙尼亚黑手党。他是一个非常酷的总统,他非常精通技术,了解各种东西,他是初创公司的忠实粉丝,并定期访问公司。当他参观我们月饼公司办公室时,我了解到他甚至在大学学习期间编写过汇编程序。我们让他坐在一台工程师的电脑前,写了几行代码。那就是向我们在 TUNE.com 西雅图的客户传递一个惊喜的信息,并附上一句私人问候“来自塔尔图的西雅图问候”。我曾经住在那里,在 Enumclaw 美国林务局办公室担任森林消防队员。
爱沙尼亚总统托马斯·亨德里克·伊尔韦斯在访问爱沙尼亚塔尔图的月饼办公室时,用密码文件给 Tune.com 留下了一个惊喜的信息。图片来源:Mooncascade.com。
当前的创业场景
目前,爱沙尼亚投资最多的公司列表如下:
来源:“爱沙尼亚科技初创公司 2006–2019 # EstonianMafia 的融资、失败&退出”,由 Martin Villig (Bolt)和爱沙尼亚初创公司领导者俱乐部提供和策划的数据集
被收购或首次公开募股的爱沙尼亚初创公司的例子有 Skype、PlayTech、ZeroTurnaround、GrabCAD、PlanetOS、Teleport、VitalFields、Ecofleet 等。爱沙尼亚初创企业可以获得资金的当地来源的例子有 EstBAN(商业天使网络)、Startup Wise Quys(加速器)、Karma.vc(风险投资基金)、SuperAngel Fund、Contriber Ventures、crowd funding (Funderbeam,Fundwise)等。爱沙尼亚的启动相关事件的例子是纬度 59、启动日、Garage48、移动星期一等。
战胜危机
冠状病毒一传播到欧洲和爱沙尼亚,Garage48、accelerate 爱沙尼亚和整个爱沙尼亚创业社区的人立即做出反应,通过在线方式创建了该系列的第一个黑客马拉松,并有多个目标。首先,我们的目标是找到应对不断升级的危机的方法,但也是为了相互证明并树立一个榜样,即这样的活动只能通过在线方式组织,并且规模更大。该活动于 3 月 13 日至 15 日举行,就在两周前。
现在,同样形式的活动已经在世界各地出现,以帮助他们的社区解决问题。这里的地图可以看到。其高潮将是全球黑客,目的是对抗我们目前正在全球经历的前所未有的全球危机。
来自不同团队的许多人已经为准备这次活动付出了巨大的努力。我真的很钦佩让这一切发生的人们的坚持和艰辛。我很高兴我们来自月饼店的团队为全球黑客捐赠了网站建设。《脸书邮报》的列出了一份更长的(尽管可能还不全面)促成此事的人的名单。
艾的伦理学
苹果 | 谷歌 | SPOTIFY | 其他
安妮特·齐默曼在 TDS 播客上
要选择章节,请访问我们的 Youtube 视频这里
编者按:这一集是我们关于数据科学和机器学习新兴问题的播客系列的一部分,由 Jeremie Harris 主持。除了主持播客,Jeremie 还帮助运营一家名为sharpes minds的数据科学导师初创公司。你可以听下面的播客:
随着人工智能系统变得越来越强大,它们被用来解决越来越多的问题。
以计算机视觉为例。不到十年前,计算机视觉算法最先进的应用之一是对邮件上的手写数字进行分类。然而今天,计算机视觉正被应用于从无人驾驶汽车到面部识别和癌症诊断的方方面面。
实际上有用的人工智能系统现在已经坚定地从“如果会怎样?”领土到“现在怎么办?”领土。随着越来越多的我们的生活由算法管理,越来越多来自计算机科学和工程以外领域的研究人员开始注意到这一点。其中最引人注目的是哲学家,他们中的许多人担心将我们的决策外包给机器所带来的伦理影响,我们常常无法理解甚至解释这些机器的推理。
人工智能伦理学领域最重要的声音之一来自 Annette Zimmermann 博士,她是哈佛大学卡尔人权政策中心的技术和人权研究员,也是约克大学 T2 分校的哲学讲师。Annette 的很多工作都专注于探索算法、社会和治理之间的重叠,我有机会与她坐下来讨论她对机器学习偏见、算法公平和人工智能伦理大局的看法。
以下是我们谈话中我最喜欢的一些带回家的东西:
- 机器学习问题经常被框定为工程问题,而不是哲学问题。因此,如果它们出错了,我们倾向于考虑技术解决方案(“我们应该增加数据集还是尝试不同的算法?”)而不是更基本的问题(“也许这不是自动化系统开始的合适用例?”).出于这个原因,不部署有争议系统的选择往往没有得到应有的重视。
- 工程师和数据科学家没有意识到,他们设计、选择并输入到模型中的功能成为了这些模型观察世界的镜头。一个应用于一组不同工程特征的模型确实会以不同的方式看待这个世界——以及这种新视角所带来的所有偏见。因此,与普遍持有的观点相反,机器学习中的偏见不仅仅来自数据集:我们选择标记为“相关”或“有用”的特征直接反映了我们的信念和价值观。
- 人工智能系统经常创造出近乎临床客观的假象。毕竟,我们倾向于认为,如果一个决策是自动化的,这难道不会从过程中消除人类的主观性——从而消除偏见——吗?当然,在现实中,机器学习模型的输出只是反映了训练该算法的程序员的决定,仅仅因为这些程序员没有直接参与生成模型的每个输出,并不意味着他们的世界观和假设没有隐含在模型本身中。
- 随着人工智能变得越来越强大,有一种自然的诱惑将它们应用于预测各种形式的人类行为,从工作表现到学术能力。但是这些应用经常挑战人类的能动性,消除我们对抗过去表现趋势的能力。如果一个超级精确的机器学习模型预测你会通不过下一次驾驶考试,你还会去学习吗?人工智能系统正在越来越多地破坏我们的自由意志,质疑这是否是一件好事,或者是否有某些事情我们可能不想预测自己或他人,即使我们的模型非常准确,这似乎很重要。\
章节:
- 0:00 介绍
- 2:36 什么是 AI 伦理?
- 6:08 核心问题
- 10:31 我们希望如何失败?
- 12:00 有前途的策略
- 16:17 优化是实践,而不是目标
- 数据和利用
- 20:55 人类决策
- 24:32 权力和责任
- 26:34 民主决策
- 29: 33 民主化人工智能和算法正义
- 31:06 具有时域灵活性的系统
- 34:12 人工智能中的不可信
- 37:33 长期问题
- 40:33 结构效度
- 45:11 英国学校考试(COVID)
- 50:25 围绕自由意志的道德哲学
- 53:32 自动化偏差
- 55:44 总结
下面是第二季第三集的脚本:
杰瑞米·哈里斯(00:00):
嗨,大家好。我是杰里米。如你所知,我是播客的主持人,也是 SharpestMinds 数据科学导师项目团队的成员。我对今天的播客感到非常兴奋,因为这是我们第一次真正深入探讨人工智能伦理问题的机会。人工智能伦理显然是今天空气中弥漫的东西。很多人都在谈论这件事,当然比以前多了很多。随着机器开始越来越多地接管我们作为一个物种的集体认知,这变得越来越重要。我们将越来越多的思维外包给机器。当我们这样做的时候,开始反思我们如何做,以及我们是否应该在某些领域这样做,变得越来越重要。
Jeremie Harris (00:38):
人工智能伦理领域就是围绕这样的问题出现的。这一领域的主要声音之一是安妮特·齐默曼博士,我很兴奋地说,她是我们今天播客的嘉宾。现在从技术上来说,安妮特称自己为政治哲学家,但我实际上认为这个头衔隐藏了她思想的一些复杂性。实际上,她一部分是伦理学家,一部分是哲学家,一部分是技术专家。我的意思是,她实际上必须知道很多关于工程、数据科学和人工智能方面的知识,比如系统是如何部署的,以及它们是如何构建的,以便能够提供她的观点和她对整个领域的见解。
Jeremie Harris (01:16):
人工智能伦理学实际上是不同专业的结合,她真的把它们都锁定了。你会在对话中看到这一点。我还应该提到,安妮特在谈论和思考人工智能伦理及相关问题方面有着丰富的经验。她目前是哈佛大学卡尔人权中心的技术和人权研究员。除此之外,她还是约克大学的讲师。她确实看到了学术前沿的东西。她还做了应用研究,并在许多不同的流行出版物上写了许多关于这个主题的文章。你绝对可以去看看。我们将在视频描述以及播客附带的博客文章中链接这些内容。
Jeremie Harris (01:53):
我希望你喜欢听这一集,就像我喜欢录制它一样。这绝对是我未来想做更多的剧集之一。我们肯定会有更多的人来讨论像人工智能偏见和人工智能伦理这样的问题。与此同时,享受表演吧。
杰里米·哈里斯(02:06):
你好,安妮特。非常感谢你加入我们的播客。
安妮特·齐默曼博士(02:10):
你好,杰里米。非常感谢你邀请我。
杰瑞米·哈里斯(02:12):
你能来我真的很兴奋。我认为公平地说,你是我最兴奋与之交谈的客人之一,因为你的兴趣如此广泛,而且你对人工智能伦理的想法如此专注。我觉得 AI 伦理显然越来越重要了。我认为这已经非常重要了,但我也不认为很多人,包括我自己,对人工智能伦理到底是什么有完整的理解。所以也许这是个好的开始。什么是 AI 伦理?
安妮特·齐默曼博士(02:36):
我认为你对目前围绕这个话题的混乱状态和公众辩论的诊断是完全正确的。我认为很多人不同意人工智能伦理到底是什么,以及它在任何方面是否有用。从我的立场来看,这是一个受过训练的哲学家的观点,我认为伦理学是一种试图确定社会应该如何运作的学科。那么应该如何分配权力呢?我们应该如何安排我们的社会和政治制度?当我们与其他人交往时,我们应该如何行动?就道德而言,我们欠别人什么?
Annette Zimmermann 博士(03:18):
当然,这是一种非常特殊的构建伦理的方式。还有许多其他人研究人工智能伦理,但他们基本上将伦理视为一种法律合规框架,或者一种企业愿望,一种企业价值观的表达。因此,许多大型科技公司目前正在发布人工智能伦理原则,而且通常它们也采取声明的形式,说,你应该做 X,Y,z。例如,a 不伤害。这与一位哲学家可能会说的话非常相似,但它通常不太关注一种非商业动机。显然,大型科技公司有阐明这些原则的商业动机。
Annette Zimmermann 博士(04:09):
我确实认为这些原则经常是善意的,但我认为我们需要批判性地思考它们,因为它们经常是非约束性的原则。因此,很容易就能发表一种自愿声明,说明我们理想中想要做的事情。但是,如果没有适当的问责机制,如果你是一个可以设置议程的人,因为你背后有大量的计算能力和大量的资源,那么问题是,人工智能伦理到底意味着什么?我认为这真的解释了为什么很多人对人工智能伦理持怀疑态度,因为它看起来真的没有效力,有点唯意志论。
杰里米·哈里斯(04:46):
哦,对不起。
Annette Zimmermann 博士(04:48):
补充一下,我认为怀疑是正确的,但我不认为我们应该因此得出结论,我们应该把人工智能伦理学扔出窗外。我确实认为,人工智能伦理可以成为一个很好的工具,来思考我们不仅作为大型科技公司的成员,而且作为整个社会的成员应该做什么。因此,作为一名普通公民,我应该如何看待我们在许多不同领域的高风险决策中使用人工智能和人工智能的方式,例如,人工智能现在正在取代我们公共机构中的许多人类决策者。所以从道德和政治上思考这些问题,这是人工智能伦理学有益的,也是应该做的,我认为这真的很有价值。所以我们不应该放弃努力。
杰里米·哈里斯(05:39):
我觉得这很有趣,部分原因是它揭示了我的前科。当我想到人工智能伦理时,我想我可能和大多数人一样。我确实想到了这些,就像你说的,谷歌和脸书发布的这些大的道德声明等等。我想在某种程度上,这也反映了知识和资源的不对称,这些公司甚至不得不试验这些技术。我的意思是,感觉上好像有一种感觉,政府经常在玩追赶游戏-
安妮特·齐默曼博士(06:07):
当然。
Jeremie Harris (06:08):
…所有的尖端技术都是由大型科技公司内部开发的,因此可以宣称不仅处于技术的边缘,也处于伦理的边缘。你的研究重点是什么,或者你有没有思考过这样一个问题,即我们如何在更广的层面上,也许是更高的抽象层面上做出社会决策,而不仅仅局限于公司和企业?如果资源是一个限制,知识也是一个限制,我们如何把它融入到游戏中呢?
安妮特·齐默曼博士(06:39):
是的。我认为你对我们目前面临的核心问题的诊断是完全正确的。目前,对于真正有才华的 ML 程序员来说,没有太多的激励去公共部门工作或留在研究部门。显然,有很多激励因素有利于进入企业领域,因此,目前确实有很多人才在私营行业。问题是,这是否意味着大型科技公司可以在设定技术议程的基础上设定伦理议程?
Annette Zimmermann 博士(07:13):
议程设置当然是一个关键的民主问题,对吗?所以民主决策不仅仅是做出实际的选择。这也是关于共同决定我们首先应该考虑什么。那么,我们在做决策时会考虑哪种解决方案呢?这就是我认为人工智能的决策应该并且可能渗透到正常的民主讨论中的地方。
Annette Zimmermann 博士(07:42):
当然,政府中的许多人不太了解新兴技术,我认为这解释了为什么人们普遍不愿意将这些与人工智能相关的问题列入民主党的议程。但是到最后,如果你考虑使用这些工具的道德和政治空间,最终它们不是纯粹的技术,你可以用不依赖于应用数学或应用统计学学位的方式向普通公民解释它们。
Annette Zimmermann 博士(08:16):
例如,如果我们考虑一个像 COMPAS 这样的系统,一个刑事累犯风险评分工具,它显然吸引了很多争议,因为 ProPublica 的调查记者发现它有巨大的种族差异,这对黑人被告来说更糟。这似乎是一个明显的道德和政治问题。如果你向人们解释,你可能会说,“嗯,我们在这个领域的一个政策目标就是改进这个算法。所以我们可以尝试优化它,以消除这种种族差异。”因此,希望这将使该系统更加公平。
Annette Zimmermann 博士(08:53):
这是你可以向普通公民解释的事情,当然,他们可能会接着说,“嗯,计算机科学家实际上已经向我们展示了完美地优化这种算法是非常非常困难/不可能的。”许多计算机科学家已经阐明了不可能性定理,这些定理与优化许多不同种类的公平有关,而这些公平在同一时间都是各自看似合理的。所以我们在缓解和优化算法系统的时候不可能做到完美。
耶雷米·哈里斯(09:27):
对。我一直认为这是机器学习的一个特征,它开始迫使我们真正面对我们的哲学空白,我的意思是我们缺乏哲学的领域。从某种意义上说,机器学习真的迫使我们用方程式来编纂,用真正具体的术语来说,我们的道德哲学在我们确实不知道的情况下是什么。你刚刚提到了这些不可行定理,不可能定理。你不能在拥有一定水平的表现或其他什么的同时拥有隐私,这些事情是相互冲突的。我的意思是,似乎有类似的问题,甚至仅仅是在概念上,比如说,民主,我们不仅仅有像群众暴政之类的东西,还有其他更基本的约束,比如阿罗不可能定理。
Jeremie Harris (10:13):
关于如何将知识从个人归纳到集体中,有一些不可行的定理。你认为这些是同一个连续统一体吗?这真的是一个大问题吗,或者有没有一种感觉,我们实际上可以有意义地划分问题的机器学习部分和问题的社会部分?
Annette Zimmermann 博士(10:31):
我认为这些问题中的许多都是结构相似问题的一部分。所以我认为,当人们想到人工智能时,他们真的非常专注于识别人工智能的真正独特的功能,因为显然人们目前对人工智能和人工智能非常兴奋。但是正如你刚才提到的,很多集体决策场景实际上是以相似的方式构建的,很难完全优化。因此,作为民主公民,我们的问题是,如果我们知道我们会在某种程度上失败,我们希望如何失败?
Annette Zimmermann 博士(11:08):
我们是否希望这种失败给已经处于不利地位的人带来更大的负担,或者我们能否找到一种不同的方式来处理不完美、伤害和不确定性?我认为最糟糕的情况是,事实上,不完美、伤害和不公正对那些已经受到这些不公正和伤害的人来说是雪上加霜,不幸的是,这种情况最近在许多领域已经发生了。这似乎与民主价值观根本对立。因此,如果我们真的关心所有人的平等自由,那么这是我们绝对应该避免的情况。
Annette Zimmermann 博士(11:49):
正如你所说,我们发现在民主决策的许多其他领域,实际上与人工智能没有任何关系。一旦我们开始处理社会复杂性,我们就会发现自己处于那种问题空间。
Jeremie Harris (12:00):
我想在某种程度上,这几乎掩盖了人类本身在某种意义上是机器学习代理的事实。我的意思是我们有一个神经网络。我们有某种强化学习电路。是啊。我不想说更具体的方面,但是在处理这些问题的时候,你认为最有希望的策略是什么?我们开始在算法中巩固现有的规范,不管它们是什么?
Annette Zimmermann 博士(12:27):
有一个非常具体但非常有争议的策略,就是不在目标区域部署。最近很多人都特别关注面部识别技术的非部署,这也是因为该技术的种族差异影响。事实上,许多大型科技公司现在都说,“好吧。我们将在这里暂停。我们不会在固定的时间内部署这些工具。”因此,IBM、亚马逊以及许多其他公司已经对 Joy Buolamwini 等人的压力做出了回应。所以很明显,有一种公众意识,实际上有限的和有针对性的不部署可能是处理这类问题的最佳方式,直到我们有更好的技术解决方案来解决这些问题。
Annette Zimmermann 博士(13:21):
现在,是否总会有可行的技术解决方案,我认为这取决于部署的领域,也取决于我们的目标。回想一下我之前提到的另一个例子,COMPAS 的例子。如果你看到这个案例,你可能会想,“那么,为什么我们首先要预测人们的再犯风险率呢?这真的是确保我们的刑事司法系统最佳运作的最佳方式吗?这意味着什么?”我想我们可以在我们的议程或民主决策议程上提出的另一个选择是,“那么,我们不能改造监狱吗?难道我们不能进行制度、社会、结构和法律的变革,改变量刑指南,改变强制性最低量刑标准吗?”
Annette Zimmermann 博士(14:06):
所有这些都是可能的解决方案。不是所有的都是算法。其中一些可能是,但我认为我们需要对整个解决方案空间有一个非常非常清晰的认识,然后将人工智能方法融入其中。我认为这将帮助我们确定我们应该在哪里推迟部署某些东西,也许直到我们测试了技术并使其更加可靠,或者也许一旦我们部署了其他社会和体制机制,那么在那个领域部署可能会更安全。但我认为我们真的需要适应社会世界和技术世界之间的相互作用,因为它们必然会相互作用。因此,这应该指导我们在诸如不部署等问题上的决策。
耶雷米·哈里斯(14:55):
是的。当您遇到问题时,您真的会看到默认部署的诱惑,特别是当问题变得具体时,对吗?作为一名工程师,你可以看着这个问题,说,“哦,我可以定义一个损失函数。为什么我不把这当成一场比赛来训练,然后继续部署呢?”然而,这种认为你实际上是在处理一个非常复杂的系统的想法。不同的部分相互作用。你不可能在不引发其他问题的情况下真正解决一个子问题。是的,这真的很有趣,在这种情况下,不部署是它自己的选择。
Annette Zimmermann 博士(15:26):
对。我觉得不陷入优化陷阱真的很重要。哲学家在这个问题上与技术从业者交流常常很有趣,因为在哲学中有一个众所周知的口号,叫做应该意味着可以。所以这基本上意味着,如果你不可能履行道德义务,我就不能把道德义务强加给你。这要求过高,因此不符合道德。但是在技术从业者的空间里,许多人把它颠倒过来。所以他们可以说,“can 意味着应该。”所以如果我能做点什么,我就应该创新。我应该把它放在外面。
Annette Zimmermann 博士(16:05):
正如你所说,有一种倾向于把东西放在那里,看看它们是否有效,而不是思考,我们想要这个吗?首先,我们使用这个工具的目的是什么?
Jeremie Harris (16:17):
你也谈到过优化的想法,它本质上不是一个需要的,不是目标,而是实践。你能对此多说一点吗?你对此有什么想法?
安妮特·齐默曼博士(16:31):
对。我认为我们经常把优化看作是增量改进,这是一个非常合理的观点,对吗?所以,如果你想知道我如何改善我的日常习惯,那么,我会做五分钟,也许我会建立一个日常锻炼的习惯。随着时间的推移,我会逐步改进。总的来说,我认为这是一个很好的原则。问题是,在机器学习领域,当我们在没有询问我们是否应该首先在那个方向上优化的情况下进行增量改进时,它实际上可能会使我们离公正更远。
Annette Zimmermann 博士(17:13):
为了给你一个非常具体的例子,回想一下我们刚刚讨论的面部识别案例。在公司发布这些非部署禁令之前,他们实际上有一种不同的方法。他们说,“嗯,我们只是要改进这项技术。”你是怎么做到的?你需要更多的数据。特别是,为了解决这些技术带来的种族不公正问题,这些公司的人说,“我们需要更多关于黑人和棕色人种的数据。”不幸的是,获取更多数据的过程往往非常具有剥削性。
安妮特·齐默曼博士(17:51):
例如,谷歌的一个分包商走到洛杉矶的街道上,对无家可归的人说,“你知道,让我们玩个游戏。我们有自拍游戏。我们会记录下你的脸,你会得到一张 5 美元的代金券。”他们没有告诉这些人,他们的脸被用作面部识别工具的生物数据。因此,这个已经相当脆弱的群体,一旦这个工具得到扩大,很可能会成为进一步不公正的受害者,这正是被用来优化的群体。
Annette Zimmermann 博士(18:26):
我认为这是一个很好的指标,表明我们的优化努力使我们走上了一条并非真正面向更大公正的道路。因为如果那些必须为优化付费的人,或者必须为优化提供某种服务的人,如果他们没有真正拥有这个过程,如果他们没有被告知发生了什么,那么我认为我们真的走错了路。这是一种渐进的改进最终会给人们带来更大负担的方式。
杰里米·哈里斯(18:59):
我认为这是整个对话中最吸引人的一个方面,是这场辩论与渐进主义和某种几乎是基本原则的辩论,是对我们采取的社会结构等整个方法的反思。在某种程度上,我是说,在我这个政治哲学家身上,这让我想到了两位著名的美国政治哲学家之间的区别。埃德蒙·伯克和托马斯·潘恩。伯克是一个典型的保守主义者,他说,“渐进主义是真正的解决方案。我们有体面的结构,随着时间的推移,通过进化和经济学的结合而进化。我们现在处于一个很好的位置,我们应该尊重这一点,不要冒险。”
耶雷米·哈里斯(19:37):
托马斯·潘恩说,“嗯,我们……”我想他的话是,“我们有能力重新开始这个世界,”或者类似的话,从基本原则开始重新思考整个结构。也许伯克的想法更像一个优化引擎。托马斯·潘恩的思维更像一个物理学家,从零开始想出这个方程。让我们重做这个,做一个漂亮的系统。有没有可能采取伯克的立场,进一步采取渐进主义的立场,说,看,如果他们去帮助无家可归的人,他们这样做,显然是一个巨大的错误。
耶雷米·哈理斯(20:08):
如果他们得到这些信息,重复,再试一次呢?有没有可能是我们尝试的时间还不够长?这是对这个观点的一种合理的反驳吗?
Annette Zimmermann 博士(20:19):
我认为这也取决于领域。我是迭代决策和评论方法的忠实粉丝。我认为这通常是非常非常有用和必要的,主要是因为许多技术问题实际上只是随着时间的推移才浮出水面。因此,在许多不同的领域,我可以从一个实际上没有偏见的机器学习系统开始,这在偏见方面完全没有异议,但随着时间的推移,微小的增量变化会复合,最终仍然会给我们带来巨大的差异。
Annette Zimmermann 博士(20:55):
实际上,我们从人类决策中了解到类似的现象。思考信仰极化的社会学现象。你可以给两个人完全相同数量的数据,相同数量的证据,根据他们的前科,他们最终会有非常不同的观点。这有点类似于机器学习系统。社会世界中的偶发事件,仅仅是随机的偶发事件,可能会影响一个系统中的路径依赖,这个系统是不完全可预见的,我们必须依次减轻。这就是为什么顺序干预可以成为一个非常非常有用的工具,以一种动态的方式改善系统。这将再次支持反对纯粹的第一原理方法的观点。
Annette Zimmermann 博士(21:45):
话虽如此,我认为我们确实需要对我们的总体目标进行一些思考。这可能是一种灵活的表达方式,但我认为如果我们只是说,“我们将一直是渐进主义者”,那么我们可能会忘记为什么我们一开始就试图优化一些东西。
杰里米·哈里斯(22:08):
对。
Annette Zimmermann 博士(22:09):
我认为这种路径依赖是我们应该担心的。需要有一种方法来协调这两个极端,我认为这样做的方法是首先进行基于原则的对话,讨论目标定义应该是什么,然后依次迭代,如果事实证明有必要,随时准备改变我们的目标。
杰里米·哈里斯(22:34):
说得好。这是一个在这一点上甚至没有真正发生的对话,或者至少我想它不会特别发生在 OpenAI 和 GovAI policy 等非常狭窄的领域之外,这些政策智库正在思考这些优化流程是什么。当人们退后一步问自己,我们应该建造什么时,在那个生态系统中有哪些大的讨论点?这是你看过的东西吗?
安妮特·齐默曼博士(23:00):
是的。我的意思是,我认为许多技术从业者对个人责任问题非常感兴趣。我最近关注的一个问题是这位脸书员工发布了一份 6000 字的备忘录。我不知道你是否关注了这个故事,但实际上,脸书雇佣的一个人越来越担心她有巨大的职业责任。据她说,她会看到地缘政治对她在脸书工作期间所做的微小决定的反应。这让她非常不安,她试图在公司内部提出这个问题,但遭到了强烈反对。
安妮特·齐默曼博士(23:47):
她似乎面临的问题是,她无法调整自己的行为以防止这些不良后果,所以她作为一个个体无法防止伤害,对,只是因为权力过剩。即使她拒绝了这种权力,她仍然是一个非常非常糟糕的过程的一部分,这就是为什么她当时批评公司,并最终因此被解雇。这是一个在从业者中发生的不太令人鼓舞的伦理审议的例子,但是我发现看到有人明确表达这种非常具体的担心,一个人可能有太多的权力,这很有趣,对吗?
耶雷米·哈里斯(24:32):
是的。
安妮特·齐默曼博士(24:32):
因为我们经常认为责任的增加是一种荣誉,或者是做一些真正有益的事情的机会,但是我认为这个人在辩论中提出的真正必要和真正有用的观点是,嗯,有没有一种足够程度的责任是一个人不应该超越的?同样,我认为这可能最终是一个民主的关注,对不对?
Annette Zimmermann 博士(24:58):
显然,如果我们选举某人担任一个拥有巨大权力的职位,那么这个人必须向我们汇报,至少在技术上,如果事情进展顺利,以及他们为什么要做某些事情。所以他们必须让自己经历向我们证明、解释、合理化和争论的过程,这是脸书工程师绝不会对整个社会做的事情。我的意思是,即使他们试图让这个过程在公司内部进行,也不会以同样的民主规模进行。所以我直觉地认为,这让那些想把工作做好的人感到担忧。
耶雷米·哈里斯(25:34):
对,是的。我的意思是,在某种程度上,这又回到了我们之前的对话,关于民主制度以及它们与一些科技的互动。我想在某种程度上,问题之一是民主进程实在是太慢了。随着技术发展速度的加快,实际上可能没有足够的时间让有意义的反馈,民主地说,反馈给决策者。会越积越多,离我们越来越远。
Annette Zimmermann 博士(26:03):
对,是的。我确实认为这是人工智能政策的一个巨大障碍,特别是民主制度有充分的理由被设计得强大,这减慢了它们的速度。所以这里有一个明显的交易。一方面,我们希望有牢固的制衡,但另一方面,我们希望我们的民主机构有反应能力。在我们面临快速变化的决策环境的领域中,这些可能会完全分开。
Annette Zimmermann 博士(26:34):
我想在这里补充一点,民主决策并不总是意味着涉及整个民主党选区的选举政治。我认为这可能是民主决策最明显的形式,但可能不是最重要的形式。例如,很多人关注人工智能领域的专家。我认为选择什么构成这个领域的专业知识可能真的是有争议的。
耶雷米哈里斯(27:04):
是啊,是啊。
Annette Zimmermann 博士(27:05):
很多时候,当我们想到医学创新时,我们可能会问医生,但我们也可以问慢性病患者,对吗?
耶雷米·哈里斯(27:13):
是的。
Annette Zimmermann 博士(27:14):
这些选择中哪一个可能更好,或者组合是否会产生更有见地的结果,这并不一定是显而易见的。同样,当我们谈论在刑事司法和警务环境或移民执法环境中部署的人工智能时,我们只有在警察部队中服务的人,我认为我们将错过一个非常重要的视角。我认为我们需要重新考虑谁可以成为这些讨论中的专家,以及当我们试图做出真正快速的决策时,我们应该重视谁的意见。它不必是全面的,但它必须是一种理性和平等的思维,帮助我们选择这些人。
Jeremie Harris (27:59):
只是为了在民主方面唱反调,所以至少有一件事已经浮现在脑海中,特别是当我们开始看到越来越复杂的语言模型、GPT-3 等方面的一些发展时,当你看到目前在人工智能伦理、人工智能联盟特别是广泛的人工智能安全、人工智能政策生态系统中的人时,我总是在我的谈话中被这些人近乎荒谬的素质水平以及他们的正直和思想深度所震惊。在这种情况下,从某种程度上说,这是真的,它激发了我的想法,可能不是立即可取的,实际上把它开放给完整的阵列,让我们说,说得好听点,我们在 Twitter 这样的东西上看到的人类行为和病理,人们在那里进入它。
耶雷米·哈里斯(28:53):
我的意思是,我无法想象如果这些争论与一个决定一个人是否获得银行贷款或其他东西的算法的性能有关,会是什么样子。我是说,一想到这个我就有点害怕。我不知道。这是你一直在思考的事情吗,高度信任和高度专业化的封闭系统可能会在多大程度上与民主开放系统有所取舍?
安妮特·齐默曼博士(29:16):
是的,当然。这是政治哲学中非常非常核心的问题,也是道德哲学中的问题。我认为你在这里得到的问题是,正义和民主可能是相互正交的,对吗?
耶雷米·哈理斯(29:33):
对。
安妮特·齐默曼博士(29:33):
我可能会有一个非常反平等主义或非常分裂、非常敌对或彼此不再真诚合作的民主党选区。所以这可能会玷污民主决策,以一种实际上根本不关心公正和平等的方式,也可能根本不关心决策的质量。它可能会以不再基于任何事实的非常糟糕的决策而告终,因此对许多人来说,这可能是非常不公平和非常有害的。
Annette Zimmermann 博士(30:11):
我不认为我们应该得出这样的结论,即民主化的人工智能一定会消除算法不公正等问题。我当然不认为那是真的。我认为,要建立人工智能和机器学习的公正形式,或者人工智能和机器学习的道德辩护形式,还需要更多的东西。
耶雷米·哈里斯(30:32):
多么易变……哦,对不起。
安妮特·齐默曼博士(30:34):
哦,没关系。
Jeremie Harris (30:35):
对不起,我只是想问你对这些道德框架可变性的看法。在某种意义上,我们设计算法,通过设计它们,当然也通过部署它们,我们确实开始了,正如你所说的,将一些社会规范奉为神圣,无论我们是意识到这是正在发生的事情,还是只是含蓄地这样做。但是随着时间的推移,很明显,我们希望我们的道德观改变。我的意思是 50 年前跨种族婚姻是有争议的。当然,我们对待同性恋等等的方式已经彻底改变了。
Jeremie Harris (31:06):
那种认为我们今天已经建立了一套令人满意的道德规范,而这种道德规范将永远保持不变的观点可能是站不住脚的。对于我们如何设计具有这种时域灵活性的系统,有什么想法吗?
安妮特·齐默曼博士(31:21):
是的。我的意思是,我认为这样做的第一步是承认我们所做的任何选择都在某种程度上受到道德和政治的影响。很多时候,我认为我们希望自己做一个完全道德中立的决定,一个纯粹的技术决定。举个例子,当我们设计一个系统时,当我们决定选择和衡量哪些特性时,表面上看起来是非常中立和客观的,因为我们只是试图代表事实,我们试图从这些事实中抽象出来,以得出一个通用的决策规则。
Annette Zimmermann 博士(31:57):
在一天结束的时候,我可以做出许多不同的选择来决定到底看什么。所以根据我想让我的模型讲述什么样的故事,我会从中获得一种强化效果。如果我决定测量逮捕率之类的东西,但实际上我感兴趣的是提出一个模型,告诉我一个关于犯罪的故事,我将有一个真正不完美的故事。我越不承认我实际上是在用一个不完美的近似数据工作,这个故事可能会越来越脱离现实。
Annette Zimmermann 博士(32:32):
我认为解决这个问题的办法是始终意识到我们在设计过程中所面临的不确定性程度以及对选择的依赖程度。我认为我们不应该说,“这是我们的静态原理。让我们尽可能地接近它。有一次我们要测量某样东西一次,然后我们只是要看看会发生什么。”不,我们必须回到这一点,我们必须问,等等,我们真的测量了正确的东西吗?我们真的想出了正确的决策规则吗?为什么我们一开始就采用这种价值观?
Annette Zimmermann 博士(33:06):
在我们试图通过做出这些表面上客观的设计决策来达到的价值观中建立一个购物清单并不好。我认为我们必须始终保持灵活性,这种灵活性包括质疑我们之前的假设和选择。尽管它们在当时看起来是可以辩护的,但如果事实证明它们大错特错,我们需要准备好彻底改变它们。
耶雷米·哈里斯(33:32):
是的。至少对我来说,看了你的一些作品,你的写作和你的 YouTube 视频后,有一件事变得很清楚,那就是我还没有完全意识到特征选择和特征工程在多大程度上真的等于选择了你的算法用来看世界的镜头。我们知道让某人在一年中阅读《纽约时报》与让某人在一年中只阅读福克斯新闻频道的影响。你最终会得到两个非常不同的世界模型,因为降维,本质上是特征选择,他们在这个世界上所做的,给你呈现名义上相同的事件,但从不同的角度来看,通常只是,我的意思是,完全改变了你解释事物的方式。
Jeremie Harris (34:12):
将这些映射到这些算法上很有意思,如果你真的选择给这个算法提供类似 MSNBC 对 CNN 的信息,你会得到不同的算法和不同的结论。
安妮特·齐默曼博士(34:24):
是的。我认为这是绝对正确的,我认为这是人工智能中不可信的一个真正被低估的方面。我认为当你问某人,什么会让人工智能值得信任,他们的本能反应会是这样的,“嗯,我们想确保人工智能不会犯任何严重的错误,”所以我们已经讨论过的错误。所以没有严重的伤害,没有严重的不公正。但是想想这种反事实。想想一个实际上还没有真正失败的人工智能系统。它还没有真正背叛我们的信任。
Annette Zimmermann 博士(35:04):
我们喜欢委托给这个系统,因为我们不确定它是否会表现良好,或者因为我们有一些关于它的信息,让我们有理由相信这个系统不会以某种方式失败。但是我们仍然没有排除这种可能性,那就是这个系统的本体可能并不是我们想要表现的世界的忠实表现,对吗?这个系统可能会理想化,我们会觉得疏远、怪异,而且不太合适。这可能是不可信人工智能的一个完全不同的方面,它实际上不依赖于结果。这是我们对人工智能更基于过程的关注。
Annette Zimmermann 博士(35:48):
我之所以说它是基于过程的,是因为我认为我们不仅仅关心做正确的事情。我们也关心为了正确的理由做正确的事情。这也是我们对人类的评价。如果你有一个朋友,他通常只是做好事,并没有给你任何理由怀疑他们对你的忠诚,但假设你在某个时候发现他们只是买了一个非常非常奇怪的推理结构。他们作为朋友对你这么好的全部原因是因为他们同情你。他们认为你真的需要帮助,而且你自己也应付不了,但是他们对你没有友谊。如果你发现了这一点,你会说,“哦,上帝,你为我做这些好事的所有理由都是糟糕的理由,它们不符合友谊的精神。”所以你真的错过了这里发生的一切。
安妮特·齐默曼博士(36:39):
我认为,当人工智能建立在一个怪异和疏远的本体上,而这个本体没有以正确的方式连接正确的点时,人工智能也会出现类似的问题。在我看来,这将使人工智能变得不可信,因为你无法保证它会继续做正确的事情,因为它不会出于正确的原因去做这些事情。
杰里米·哈里斯(37:03):
因为我想有一种相反的哲学观点认为,系统的目的是它做什么,所以如果一个系统对你做了好事,那么它就是一个好系统,与它的耳朵之间发生的事情无关。我想你在这里真正得到的是,最终可能会出现短期内不明显的行为,但你会突然意识到,“哦,该死,这东西只是想看起来很好,以获得我的信任,这样它就可以做一些绝对毁灭性的事情。”这种评价公平吗?
安妮特·齐默曼博士(37:33):
是的。没错,我现在的主要担忧是一种长期担忧。我不认为我们必须假设一个真正二年级形式的人工智能是恶意的,所以我认为将人工智能拟人化是非常危险的。我甚至没有在这里想象一种恶意的 AGI 案件。我认为这种长期问题甚至可能出现在狭窄的人工智能应用中,这些应用本身具有怪异的本体,但显然不会追求自己的议程,因为它们不是有意识的代理。
杰里米·哈里斯(38:11):
好的,是的。很有意思。好吧。让我尽我所能,为人工智能问题的某种客观主义框架做出最好的钢铁侠论证。假设我想摆脱特征选择问题,因为我知道选择特征和设计我自己的特征是有偏见的。它将反映我认为重要的东西,而不是真实的东西。
杰瑞米·哈理斯(38:33):
我能把这推到真实的极限吗?我能不能开发一个系统,它知道最小的行星地球或太阳系或其他什么的每个原子的位置和动量,那会更令人满意吗?这至少能让我越过特性选择和特性工程的障碍吗?或者,即使做了这样的事情,我还是会错过一些东西吗?
Annette Zimmermann 博士(38:59):
这可能会让你避开特征选择的问题,但我认为你会处理一个不同的问题,哲学家会称之为仁慈的独裁者问题。再一次,这是一种政治哲学的思想实验,你可以想象如果你有一个经常做令人惊讶的事情的独裁者,就像一个统治良好的独裁者。他确保每个人都被平等对待,只是比他们不平等。所以问题是,如果事情以那种方式对每个人都很好,你有什么可抱怨的?
安妮特·齐默曼博士(39:35):
我们没有理由相信独裁者会改变他们方式。我们不需要担心它们会变坏。但是直觉上,我们仍然非常担心我们完全失去控制。我经常想,作为人类,我们确实需要能够说,“嗯,我在这种互动中有代理。”所以我认为,如果我们有这个非常非常非常非常复杂的细粒度人工智能,我们可能会有更多的结构有效性。所以我们可以更好地近似忠实抽象的问题。我们在这方面做得更好,但我们也在处理仁慈的独裁者问题。那么这可能会削弱我们的机构。
哈利斯(40:24):
对。我想回到道德易变性的观点,我们希望能够改变我们的道德思维,这在某种意义上锁定了我们。
安妮特·齐默曼博士(40:33):
正是如此。所以事实上在这两种不同的元目标之间有一个权衡,我认为这是我们在人工智能伦理中应该追求的。一方面,我们想要高的结构效度,但这可能再次与大量的代理和顺序缓解不可调和,所以这是一个主要问题。
Jeremie Harris (40:54):
实际上,你能详细阐述一下结构效度概念吗?因为这对我来说是新的,所以…
安妮特·齐默曼博士(41:00):
好的。结构效度更多的是计算机科学术语。哲学家可能会说忠实的抽象或忠实的表现。这个想法就是,当我们制作模型,当我们阐明基本定律和理论时,我们总是要以某种方式从社会世界中抽象出来。所以很多人对此感到担心,因为我直觉地认为,我们都知道,一旦你建立了一个普遍的理论,你将会失去它对现实生活中个别实例的适用性。但这可能没问题,因为我们希望理论和模型是通用的。统计学家对此有一个简洁的口号。大多数统计学家认为所有的模型都是错的,这没什么。它们仍然有用。
Annette Zimmermann 博士(41:51):
我的问题是,当一个模型不再有用时,我们如何进行分类?我们与社会现实差异如此之大,以至于模型实际上失去解释力的界限在哪里?我还想在这里补充一点,当人们考虑像结构有效性这样的事情时,就像获得真实世界的一个非常精细的图片一样,人们经常会忘记观察真实世界也可能重现不公正。这是另一个重要的权衡。
安妮特·齐默曼博士(42:25):
计算机科学家已经就此谈了很多。如果我有一个真正校准良好的算法系统,它只会准确地反刍我们已经有的社会阶层。这也是为什么我们的介入如此重要,因为我们可以选择我们想要表现的现实,对吗?我们想要抽象和理想化哪些结构,从而复制它们?我意识到,关于一个人、一个团体或一个社会,我可以讲述很多故事,并选择合适的故事来讲述,我认为这非常重要。
安妮特·齐默曼博士(43:07):
柏拉图有一个标准的哲学例子。柏拉图思考了很多关于理想化和理想化是否符合现实的问题。他举了一个希腊雕像的例子。在古希腊,雕像被建造得有点头重脚轻,所以有更大的头和更大的肩膀等等,因为你从下面看它们。所以你作为一个观众的普通视角要求我们实际上扭曲雕像,以便它给我们一个现实的图像。这是一种理想化,但不是我们能想到的唯一的理想化,因为,当然,我们可以完全按照人类的比例复制雕像。但那会让观众觉得疏远和扭曲。我认为这是一个很好的例子,可以思考不同的方式来表现现实,以及做出这些决定的意义。
Jeremie Harris (44:07):
这真的很有趣,我想这也引发了一些关于自由意志和决定论的想法。你之前提到过,你说,“我们可以选择决定我们的抽象是什么,决定世界对我们的模型来说是什么样子。”如果这些模型变得非常好,在某一点上它们将能够,事实上,在许多情况下它们确实比我们更好地预测我们的行为。我知道我有过 Duolingo 每隔一段时间就会给我打电话,告诉我,“该上课了。”我说,“是啊,你知道吗?该是上一课的时候了。”在某种程度上,我想这是一场游戏…当你的行为被预测得比你所能预测的更好时,肯定会很不舒服。
杰瑞米·哈里斯(44:47):
有没有一种方法可以将现实拼接在一起,决定在哪里说“好吧,让我们把这个系统视为确定性的,但让我们明确地为自由意志腾出空间”是有意义的?也许你也想谈谈,有一个你从最近在英国举行的一次考试中引用的例子。也许我会把想法放在那里,让你从那里开始。
Annette Zimmermann 博士(45:11):
对。你提到的英国案例非常非常有趣。由于新冠肺炎事件,一些英国政府决定取消高中生的期末考试。相反,他们要做的只是预测高中生最终会得到多少分数。在英国,这真的决定了你的一生,包括你去哪所大学。他们的系统是你在高中毕业前申请,然后你从老师那里得到一个关于你成绩的初步预测。如果你在期末考试中符合这些预测,那么你实际上就能在大学里占有一席之地。
安妮特·齐默曼博士(45:52):
不幸的是,在这种情况下,英国决定使用一种非常粗糙的统计模型,这种模型可以很好地预测上私立学校的人的成绩,这些私立学校有着非常好的历史记录和很高的教育成就。我们有关于这些私立学校的可靠的长期数据,所以这个模型在那里运行得很好。但是对于那些成绩差距很大的中等学生来说,这种方法真的不太管用。对于那些曾经成绩很差,但在最近几年迅速改善的学校里的人来说,这种方法也非常有效。所以事实上,这个模式最终不利于工人阶级的学生,有色人种的学生。
安妮特·齐默曼博士(46:43):
所以会有这些非常不公平的结果,因为模型的不同特质,一些本可以得到 B 的人突然没有通过 A 级考试。该模型没有真正考虑到不确定性,因此做出了生硬的预测,考虑到灵活性会更合适,也更好地反映了教育程度。在这种情况下,使用这种预测似乎真的被误导了。
Annette Zimmermann 博士(47:13):
即使这个模型实际上非常准确,但它并不准确,但假设我们可以有一个非常好的模型。你可能会想,“嗯,也许你想有机会让自己经历期末考试的过程。”是的,这将是非常紧张的,但是许多学生表达了这种感觉,你知道,我真的为此而努力,这是我向人们证明我能做到的机会。我投入了所有的时间和精力,最重要的是克服压力,尽我最大的努力。我的意思是,在新冠肺炎疫情爆发期间,你的孩子在街上举着标语说,“让我们抛弃这种算法。我想实际做这个考试。”
Annette Zimmermann 博士(47:59):
我认为这确实告诉我们,通常仅仅是预测并不是我们想要得到的。我们想要体验。每当我们需要经验和艰苦的人的过程时,我认为这就是我们不能真正取代这种过程的地方。问题是,我认为很难预测它将应用于生活的哪些领域。我也认为人们会对此有很大的分歧。所以我不认为这个问题有一个很好的原则性解决方案。
安妮特·齐默曼博士(48:31):
我认为我们需要一个持续的政治辩论过程,因为否则我们最终会将一项政策强加给人们,基本上就是说,在你生活的这个领域,你可以拥有代理权。在你生活的这个领域,我们并不关心你的自由意志。我们会给你一个预测,猜猜看,它非常准确。那将是不令人满意的。
耶雷米·哈里斯(48:57):
是的。你肯定也能理解这种怨恨,即使,就像你说的,即使算法基本上是 100%准确的,或者有一个很好的 F1 分数或其他值,如果有人告诉你,“嘿,你知道吗?我们算了一下数字。基于所有这些数据,其中大部分与你个人通常会联想到的特征无关。它是关于你所在社区的特写,关于你的家庭生活、你的成长经历以及诸如此类的特写。”
哈利斯(49:25):
然后我们告诉你,“好的。有 99%的把握,我们可以告诉你,你会在这里得到 B 到 B+之间的分数。”这是一颗难以下咽的药丸,在某些方面,系统越精确,情况就越糟糕。我的意思是,你可以看到人们变得更加愤恨,因为他们被告知他们对社会的价值在某种意义上是由这些系统决定的。
安妮特·齐默曼博士(49:45):
是的。有时候量化的过程本身在某些方面是令人不快的,对吗?有时候,我们对成为一个人意味着什么的评估越来越细,这实际上并不是我们想要的。有时候我觉得我们应该退一步,不要在意某些细微的细节。我的意思是人与人之间可以有微小的差异。同样,显然哲学家对此有一个概念,因为我想我们会给每个微小的想法贴上标签。在这种情况下,我想到的概念是不透明尊重的概念。
Annette Zimmermann 博士(50:25):
不透明的尊重基本上意味着,在某些问题上,我们不想过于关注人与人之间的差异,因为我们只是认为这些差异可能与我们对这种人的贡献或我们应该如何在社会上分配某些利益和负担的决定无关。有时候,我们实际上并不需要了解某人的一切才能尊重他们。因此,如果我们问太多问题,可能会损害尊重。你到底有多擅长这个,或者你真的考虑过这个问题吗?这类问题,尤其是当涉及到给人们分配责任和权利的时候,往往是有害的。
耶雷米·哈里斯(51:08):
是的。这真的让我想到,显然,有一整套道德哲学围绕着自由意志和这个问题,如果你有一个绝对的精神病患者,他们四处杀人,你觉得有权对他们非常愤怒。但是后来你发现他们有脑瘤,脑瘤完全解释了他们所做的一切。突然间,他们的态度发生了 180 度的转变,从一个绝对的怪物变成了一个真正值得同情的人,你只会为这个人感到难过。
Jeremie Harris (51:39):
有时候发现越来越多……我想发现癌症或类似的东西,肿瘤,是我们想知道的事情,但是然后有一个连续体,你开始进一步深入,你开始说,“哦,好吧。嗯,Jeremie 刚刚说了那件非常讨厌的事情,因为第 25 号神经元以这种方式连接到第 47 号神经元,所以它真的是完全确定的。这不是他的错。他的大脑就是这样。”但是在某一点上,这些事情开始变得非常不舒服。
安妮特·齐默曼博士(52:10):
没错。我想那是对的。我的意思是一个问题是在这个领域的侵扰,侵扰可能是不尊重。但我也认为,寻找更多关于某人的信息往往是无益的,因为我们往往只对该不该受到指责和责任感兴趣。我们可以回答关于责任和责备的问题,而不需要非常详细地解释为什么这个人会说这种非常讨厌的话。
安妮特·齐默曼博士(52:45):
所以在许多领域,我们只想说,“看,你做了这件事。我们不在乎为什么,但你能道歉吗?造成了一些伤害,我们要让你为此负责。”我认为这是我们对人的一种普遍看法,我认为我们在人工智能环境中也会有这种看法。这样的信息并不能告诉我们太多。更重要的是我们在处理什么类型的信息,以及我们用这些信息做什么。
Jeremie Harris (53:16):
正如你过去指出的那样,我想用算法来做这件事也会导致我们有时对这些系统的输出过于自信。我们开始想,“哦,如果算法说这个人在道德上有责任,那么毫无疑问。我们不需要陪审团审判,对吗?
安妮特·齐默曼博士(53:32):
是的。我的意思是,有一种被充分研究过的心理现象叫做自动化偏见,这绝对是我们必须努力解决的问题。作为人类,我们有这样的偏见,当我们处理一个量化的故事时,我们更有可能相信这个量化的故事,因为我们认为,嗯,一旦某个东西是可测量的,它就会变得更有形,更客观,甚至可能是公正的。因为我们会想,“好吧,如果只是数字,那它背后不可能有什么议程。背后不能有偏见。”
安妮特·齐默曼博士(54:07):
这种想法很危险。我的意思是,很明显,我们应该接受这样的观点,一些量化的方式确实是不偏不倚的,但是不用说所有形式的量化都是不偏不倚的。这是我们必须时刻牢记的事情,我认为这对于技术从业者来说尤其重要,因为他们必须每天判断应该对一个系统给予多大的信任。
耶雷米·哈里斯(54:33):
是的。是啊。这几乎就像机器学习工程师开始…正如你提到的,他们通过选择架构,通过选择工程特性中的抽象级别来做出这些元决策。他们做出这些选择。然后他们就离开了,这就造成了一种从未做出选择的错觉,因为这个系统只是在某种程度上自行运转。然而,如果你让人类来做,就好像不,每个人都在重新设计特征,重新部署他们的判断。是啊,我们要去的是一个有趣的世界。
安妮特·齐默曼博士(55:03):
是的。我认为主要的事情是没有一个简单的解决方案适用于所有形式的技术和所有领域,所以我认为我们应该对全面的技术乐观主义持极度怀疑的态度。但我们同样应该对全面的技术悲观主义或技术敌意持怀疑态度,因为我不认为任何道德和政治观点会适用于所有不同的应用。
杰瑞米·哈里斯(55:35):
不幸的是,作为一个不能同时有一个以上想法的人,我必须找出其中一个,但是我真的很感激-
安妮特·齐默曼博士(55:43):
很抱歉。
耶雷米·哈里斯(55:44):
就是这样,就像现在所有的事情一样。非常感谢你的时间,安妮特。这是一次很棒的谈话。我确实想确定,如果人们想在各种社交媒体上关注你,关注你的最佳方式是什么?
Annette Zimmermann 博士(55:56):
最好的方式可能是在 Twitter 上,所以是@DrZimmermann,末尾有两个 N。是啊。我一直在推特上。
杰瑞米·哈里斯(56:06):
完美,耶。很不幸,我也是。改天的话题。太好了。我们会确保链接到那个。我们要写一篇博客文章来配合播客。人们也可以阅读,我们会提供一些你作品的链接,这也很有趣。非常感谢你抽出时间。真的很感激。
安妮特·齐默曼博士(56:21):
非常感谢。谢谢你邀请我。这是一次令人着迷的谈话。
哈利斯(56:26):
牛逼。
数据收集的伦理
您的数据来源是否符合道德规范?
所以你已经准备好收集一些数据并开始建模,但是你如何确定你的数据来源是合乎道德的呢?
CW:我将在下面的一节中谈论心理健康和自杀预防。
当前的数据保护形势
1996 年通过了《健康保险可携带性和责任法案》,简称 HIPAA,以保护医疗后的敏感和识别个人健康数据。目标是一个严格的“需要知道”的医疗数据共享,除非患者签署了特定用途的同意书。为了“共同利益”也有一些例外,包括枪伤和刀伤、与犯罪有关的伤害、可能的虐待案件和传染病。
后来的补充,2013 年的综合最终规则,更新了 HIPAA,包括对违反法律的组织进行更严厉的经济处罚,患者访问电子信息的权利,并将遗传数据纳入 HIPAA 保护区。正如Weisse博士指出的,虽然完全控制个人医疗记录的访问是“隐私权倡导者的圣杯”,但我们当前的医疗管理和保险系统使之不可能。
虽然这些法律是必要的,并且在理论上是可行的,但在实践中,它们在医患双方都造成了巨大的混乱。此外,像许多管理新兴技术的立法一样(见面部识别,Siri 总是在听,…),它对于有效覆盖尚未建立或想象的技术来说是可悲的不足。
最近的欧盟立法《一般数据保护条例》(GDPR)在保护个人数据方面走得更远。关于该法律的效力有很多讨论,但毫无疑问,它是世界上最严格的数据保护法之一。与 HIPAA 或其他美国数据保护法不同,GDPR 要求组织在默认情况下使用最高的隐私设置,并将数据使用限制在六个级别,包括同意、重要利益和法律要求。
此外,在为此目的给予明确同意之前,不得收集任何数据,并且该同意可以随时收回。这意味着一个服务协议条款不能让一家公司无限期地自由支配用户的数据。违反 GDPR 的组织将被处以高额罚款,最高可达 2000 万欧元或上一年总收入的 4%。例如,英国航空公司被罚款 1.83 亿英镑,因为糟糕的安全性导致了针对其 50 万用户的略读攻击。
在这些措施不足的地方
脸书的自杀算法
2017 年,在一系列直播自杀事件后,脸书在未经同意的情况下开始抓取用户的社交媒体内容,以建立一个自杀预防工具。在非自愿收集之外,人们会认为对精神健康、抑郁和自杀意念的评估会被归类为敏感的健康信息,对吗?根据 HIPAA 的说法,因为脸书不是医疗保健组织,所以他们不受该领域法规的约束。
这是一个明显的、但在当时可以理解的失误。当 HIPAA 被编写时,只有医疗保健组织可以访问这些个人健康标识符(PHIs)似乎是合理的。随着复杂的人工智能和资源无穷的科技巨头的出现,私人、非医疗保健组织正在试图在没有直接监督的情况下在医疗领域进行创新。
让这种影响具体化的是脸书在他们的系统将用户标记为自杀后联系执法部门的 3500 个案例。有一次,执法部门甚至将用户的个人信息发送给了《纽约时报》,这显然侵犯了隐私。
欧盟 GDPR 实际上禁止了脸书的收集方法,因为收集精神健康信息需要用户的明确许可。虽然脸书的项目确实有做好事的潜力,但其道德、有效利用的下一步还不明朗。
23andMe 的基因数据
监管不力的另一个例子是流行的基因和血统测试公司 23andMe——同样不受 HIPAA 约束——以及他们向制药公司出售用户的基因信息。保险公司使用用户的基因数据在任何症状出现之前识别预先存在的状况存在潜在的风险。这种做法在某些情况下是不合法的,特别是对于健康保险,但对于人寿保险或伤残保险则不是。
这种做法已经暴露出一些伦理上的模糊之处。一个例子是亨廷顿氏病,一种由单个缺陷基因控制的迟发性大脑疾病。美国亨廷顿氏病协会有一份关于选择是否进行基因检测的完整指南,因为尽管从技术上来说保险公司利用这一信息是非法的,但这一信息总有被滥用的潜在风险。
未来和你
随着技术的不断进步,我们将不可避免地听到更多监管失误的故事。至关重要的是,政府要及时了解新兴创新的影响,以及如何在一个越来越缺乏数据隐私的世界中保护公民的数据隐私。
作为一名数据科学家,您必须了解您的数据是如何收集和利用的。这里有一大堆问题要问你自己和你的模特。
以下是候选名单:
- ****同意:用户必须明确同意对其个人数据的每一次新的使用。在某些司法管辖区,这是一种法律依赖,但在所有情况下都是一种良好的做法。
- 透明度:特别是在有具体影响的情况下,你能解释一下你的模型和数据处理是如何得出一个决定的吗?
- ****责任:评估模型的潜在危害,并努力限制所述危害。模型被误解的可能性有多大,善意的还是恶意的?
- ****匿名:在数据科学过程的各个阶段,如何保护用户的身份信息?在任何时候,谁有权访问这些数据?识别数据甚至需要在数据集中吗?如果没有,请删除它。
- ****偏差:采取了哪些步骤来理解数据集中的潜在偏差?甚至缺失值也能代表偏见吗?参见标记。
来源
[1] T. Truyen,W. Luo,D. Phung,S. Gupta,S. Rana 等人,从医院医疗数据中提取特征并应用于风险预测的框架 (2014),BMC 生物信息学 15:425–434。
[2] D. Wade,收集和使用医疗保健数据的伦理:主要责任在于相关组织,而不是伦理审查委员会 (2007),BMJ 334:1330–1331。
[3] S. Mann、J. Savulescu 和 B. Sahakian,《促进健康数据的道德使用以造福社会:电子健康记录、同意和简易救援的责任》 (2016 年),《皇家学会哲学汇刊》374:1–17。
[4] A. Weisse, HIPAA:一项有缺陷的立法 (2014),贝勒大学医学中心学报 27(2):163–165。
无人驾驶汽车的伦理
汽车应该决定你的生死吗?
Bram Van Oost 在 Unsplash 上拍摄的照片
前言
自动驾驶汽车已经存在,人类与它们分享我们的道路和高速公路。它们是迄今为止人类创造的技术最先进的创新之一。像任何新技术一样,会有新的伦理问题围绕着它。
生产自动驾驶汽车,其选择会影响司机和周围环境的生计,这是否道德?
我将讨论为什么生产自动驾驶汽车是道德的证据,以及反对生产自动驾驶汽车的证据。在采取结果论的方法分析双方后,我将对上述问题给出最符合伦理的答案。
利益相关者的期望和价值观
自动驾驶汽车爱好者:
他们的期望是能够利用自动驾驶汽车将他们从 A 点到 b 点。他们重视自动驾驶汽车的创新、效率、可靠性、安全性和可达性。
制造自动驾驶汽车的公司(即特斯拉和谷歌):
他们的期望是能够提供自动驾驶汽车爱好者所要求的服务。他们重视社会对自动驾驶汽车的开放、创新的自由以及自动驾驶汽车爱好者的持续支持。
旁观者:
他们的期望是在旅行时不会受到自动驾驶汽车的伤害。他们认为,确保所有旁观者的安全和福祉是公司和政府的社会和企业责任。他们重视自动驾驶汽车公司和车主将对他们的汽车造成的任何伤害负责。
决策者和政府:
他们的期望是通过为新的创新创造规章制度、最小化风险和保护公民来改善社会。他们重视安全、效率和生产力。
自动驾驶汽车是道德的
这些算法非常聪明,是由最伟大、最聪明的人创造的:
- 在无人驾驶汽车做出道德选择中,尼尔森解释了谷歌和类似公司为创造无人驾驶汽车而构建的复杂算法。构建软件的过程并不简单,需要全世界最聪明的人。毕竟谷歌的招聘率在 0.2%左右(Eadicicco)。众所周知,这些公司不仅雇佣最有声望、具备适当技能的申请人,还雇佣最有道德、最世故的人。建造自动驾驶汽车需要跨职能团队多年的研究、开发和合作,因为每个细节都经过了细致的研究和测试。算法在不断学习,不断进行改进,以提高自动驾驶汽车技术。
- 尼尔森解释了谷歌自动驾驶算法的工作原理。当自动驾驶汽车看到一名骑自行车的人时,它会在其车道上稍微移动一下,给骑自行车的人更多空间。谷歌的算法通过风险大小来计算概率,将其与要获得的信息的价值进行比较,并使用它来做出决策。被卡车擦撞的风险大小为 5000,与另一辆车迎头相撞的风险大小为 20000,撞到行人的风险大小为 100000(Nelson)。这个评分系统计算不同场景、人、动物、物体的价值,并快速做出最佳行动方案的决策。
- 驾驶总是会涉及各方的风险,谷歌通过在各方之间分配风险分享了其关于道德决策过程的观点。谷歌认为,如果工程师对自动驾驶汽车进行编程,让它们学习和计算现实生活中的价值,自动驾驶汽车可以做出道德决定。谷歌和类似公司开发的算法包含了世界顶级思想家多年的思考和研究。因此,许多人可能会认为这证明了自动驾驶汽车的合理性。
证据显示,自动驾驶汽车比人工控制的汽车更安全
- 在麦肯锡公司(McKinsey and Company)2015 年的一份报告中,有证据表明,自动驾驶汽车将大幅减少高达 90%的车祸,每年防止高达 1900 亿美元的损害和健康成本,并拯救成千上万的生命(拉姆齐)。自动驾驶汽车被编程为遵守所有交通法规。自动驾驶汽车在行驶过程中从不被手机分心,也不会酒后驾车或睡着。自动驾驶汽车在检测和避免障碍方面表现出色,在糟糕的道路上具有比人眼更强的视觉敏锐度。自动驾驶汽车对周围环境有 360 度的视角,可以处理比任何人都多得多的信息。2017 年,美国估计有 4 万起交通死亡事故,其中 90%以上是由人为错误造成的(Isidore)。自动驾驶汽车有可能防止 90%的碰撞,仅在美国每年就能挽救约 3 万条生命(斯科特)。研究表明,自动驾驶汽车事故比人为事故要罕见得多;负面的看法主要是由于媒体夸大了情况(博恩)。
- 而且,由于人类情感的虚弱,人们对自动驾驶汽车的接受度不高。当人类卷入一场车祸时,原谅是很容易的,因为我们认识到人们在情绪激动时会保护自己。然而,当谈到自动驾驶汽车时,人们并没有相同的思维模式,因为机器不会做出反应;它们被有意编程来执行特定的动作(Trappl)。尽管有明确的证据表明,通过消除驾驶等式中的人为错误,自动驾驶汽车比人类驾驶的汽车安全得多,但许多人不能忽视这种好处,因为他们被已经发生的几起自动驾驶汽车事故弄得措手不及。
自动驾驶汽车将让世界变得更美好
- 自动驾驶汽车可以改善每个人的生活方式。美国国家科学基金会(National Science Foundation)发现,有了自动驾驶汽车,交通流量的改善得到了推动:“路上有一辆自动驾驶汽车可以通过影响周围至少 20 辆人类控制的汽车的交通流量来减少拥堵”(布朗)。自动驾驶汽车有助于确保以恒定的速度移动,而不是造成交通堵塞,交通堵塞通常是由人类强行刹车和减速造成的。由于交通是世界各地城市的一个主要问题,这是证明无人驾驶汽车合理性的众多原因之一。
- 此外,自动驾驶汽车的油耗也降至最低。美国国家科学基金会发现,自动驾驶汽车可以在交通堵塞期间减少 40%的总油耗(Brown,2018)。能源信息管理局预测,到 2050 年,自动驾驶汽车可以减少车辆 44%的燃料消耗,减少卡车 18%的燃料消耗(麦克马洪)。美国运输协会预测,自动驾驶汽车可能会导致石油消耗和相关温室气体排放减少 2-4%(Pyper)。这些统计数据显然为自动驾驶汽车建立了一个坚实的案例,因为与普通汽车相比,自动驾驶汽车对环境的影响较小。
- 最后,自动驾驶汽车可以减少无效和紧张的驾驶时间。如果一个人不容易晕车,花在开车往返目的地的时间可以用于其他任务。根据美国人口普查局的数据,美国人的平均通勤时间为 25.4 分钟;然而,像纽约、洛杉矶和旧金山这样的大城市可以看到单程 30 分钟以上(西迪基)。此外,从家到工作单位单程花费超过一个小时的极端通勤者比以前增长得更快。有了自动驾驶汽车,生产力水平将会提高,因为人们可以在汽车行驶时工作、睡觉、吃饭或完成其他任务。
自动驾驶汽车不道德
随机决策优于预先确定的决策
- 一些人可能会认为,随机的人类事故比已经预先确定了某人在车祸中死亡的算法更合理。此外,许多人问谁将为自驾车造成的事故负责。这是司机的责任吗?汽车制造商?开发软件的工程师?有些人认为情况太复杂,人们应该让事故自然发生。其他人认为,人们对另一个人的生活做出决定,并支持随机事故,这是不道德的。
- 来自博洛尼亚大学的 Guiseppe Contissa 探索了如果自动驾驶汽车的控制权和责任交还给司机(Beall)会发生什么。该团队设计了一个转盘,允许司机将汽车设置为三种驾驶选项之一:完全利他、完全利己或公正。这个特征允许驾驶员给出他或她相对于其他人的价值。汽车将获取驾驶员提供的知识,并执行预先确定的动作。然而,寻找自动驾驶汽车解决方案的预期目的引发了更大的伦理问题。如果每个人都把旋钮转到完全利己主义模式会怎么样?如果人们把旋钮转到不偏不倚:那么谁来负责?孔蒂萨试图解决的问题让人们再次对他们的自动驾驶汽车有了一些控制,但只是在一定程度上,主要的伦理问题仍然没有解决。由于没有明确的解决方案,许多人会认为随机和无计划的事故比自动驾驶汽车的预定算法更道德。
我们不应该让公司、政府和决策者控制我们的命运
- 人们也可能会争辩说,在车祸中让别人而不是自己来控制自己的命运是不道德的。在自动驾驶汽车的例子中,工程师基于他们的道德规范开发了这项技术。他们认为正确和错误的东西控制着自动驾驶汽车,他们的决定影响着司机、乘客和旁观者的生活。政策制定者和政府还试图制定无人驾驶汽车的规则和法规,增加对司机、乘客和旁观者的额外影响。因为这赋予了人们控制他人生活的权力,许多人感到不安,并认为无人驾驶汽车是不道德的。人们认为这是不道德的,因为他们认为一个人不应该被别人控制。
- 德国试图用实际的指导方针来解决自动驾驶汽车的伦理问题。国家提出:“自动驾驶汽车应该总是试图将人类死亡降至最低,不应该基于年龄、性别或任何因素对个人进行歧视。人的生命也应该永远优先于动物或财产”(诺瓦克)。德国认为,自动驾驶汽车应该根据政府制定的先例规则,就拯救或伤害谁做出道德决定。根据科学杂志发表的一项研究,超过 75%的参与者支持这种功利主义的方法。然而,另外 25%的人对政府干预他们的生活没有强烈的感觉。他们不相信政府有权给生命定价。无人驾驶汽车的反对者有充分的理由反对它,因为人们对道德有不同的看法。
数据存储和黑客对社会构成威胁
- 为了让自动驾驶汽车高效运行,必须通过汽车的传感器收集大量数据。在驾驶过程中,自动驾驶汽车会不断存储周围环境的数据,让它们能够学习并变得更加智能。这引发了许多安全问题,因为自动驾驶汽车持有大量数据,包括司机和乘客去过哪里,手机连接时的司机通信,以及司机和乘客在车内的对话。反对自动驾驶汽车的人认为,自动驾驶汽车收集这种个人敏感信息是不道德的。滥用数据可能会对一个人的身份、财务和生计造成损害。
- 还有一个很大的恐惧就是不法分子远程黑指挥一辆车。在播客中,自动驾驶汽车的法律影响,Ballard Saphr 隐私&数据安全集团的合伙人 Phil Yannella 表示,自动驾驶汽车的不断发展也将导致黑客攻击的风险增加(路透社)。Yannella 解释说,自动驾驶汽车有多个连接点,包括计算机局域网、制动器、传动系统、汽车和制造商之间的连接、汽车和其他自动驾驶汽车之间的连接以及任何有线公共基础设施。这些连接可能会被黑客攻击,如果放在错误的人手里,可能会导致严重的损害。由于自动驾驶汽车的风险增加,许多人认为它们对社会不道德。
结论
自动驾驶汽车的功利主义受到了有力的辩护和攻击。当人类坐上汽车的驾驶座时,实在法规定他们对自己的行为负全部责任。当涉及到自动驾驶汽车时,有一个明显的灰色地带:司机是否应对自动驾驶汽车伤害无辜的旁观者负责?还是自动驾驶汽车对无辜旁观者的伤害负责?陷入事故的人类司机和自动驾驶汽车必须在保护自己还是保护他人的问题上做出瞬间的道德选择。因为灰色地带,关于自动驾驶汽车是否道德的争论一直很多。
无人驾驶汽车的反对者有充分的理由。一些人认为车祸应该自然发生,而不是由算法提前几个月或几年决定的预定结果。一些人也认为让别人决定自己的命运是不道德的。通过将驾驶体验交给自动驾驶汽车,司机失去了对自己命运的控制。收集和存储的数据量增加了一些人的担忧。人们担心黑客不仅会窃取他们的私人数据,还会对社会造成重大危害。他们认为保护无辜的旁观者免受伤害是公司、政府和决策者的社会和企业责任。
对我来说,自动驾驶汽车的好处大于坏处。首先,自动驾驶汽车是由当今社会一些最具创新性和受教育程度最高的人创造的。发明者的目的是为司机和地球创造一个更好的社会。此外,事实证明,自动驾驶汽车比真正的司机安全得多;许多研究和从他们那里收集的数据表明了这一点。从长远来看,自动驾驶汽车将提高全世界人民的效率和生产力。为了让更多人对自动驾驶汽车感到放心,公司和自动驾驶汽车的车主应该明白他们对所有利益相关者的安全负责。风险管理技术可用于以透明和灵活的方式量化概率风险。为了创建道德工具,开发人员应该继续从过去的风险管理和道德挑战情况中学习经验。
允许自动驾驶汽车将满足自动驾驶汽车爱好者、司机和生产这些汽车的公司的期望和价值观。随着科技的进步,不可避免的会有更多的发明被开发出来。就无人驾驶汽车而言,这既创造了机会,也带来了危害。人类将需要创造工具,如规则和条例,来保护自己。随着更多关于自动驾驶汽车的法律法规的制定,这些法律法规将致力于平衡自动驾驶汽车的道德和经济。
资源
Beall,a .(2017 年 10 月 18 日)。你可以编程的汽车在车祸中牺牲你。新科学家。从 Nexis Uni 检索。
博恩博士(2016 年 10 月 20 日)。埃隆·马斯克:媒体对自动驾驶汽车的负面报道可能会“害死人”。检索自https://www . the verge . com/2016/10/19/13341306/elon-musk-negative-media-autonomous-vehicles-killing-people
布朗博士(2018 年 7 月 04 日)。自动驾驶汽车或自适应巡航控制如何缓解交通堵塞。检索自https://www . USA today . com/story/money/2018/07/03/自驾-减少-堵车-学习-说/741985002/
你所在地区的通勤时间。(未注明)。从 https://project.wnyc.org/commute-times-us/embed.html取回
Eadicicco,L. (2014 年 10 月 23 日)。以下是你可能不会被谷歌聘用的原因。检索自https://www . business insider . com/Google-hiring-process-Committee-2014-10
c .伊西多尔(2018 年 3 月 21 日)。自动驾驶汽车已经非常安全了。检索自https://money . CNN . com/2018/03/21/technology/自驾-汽车-安全/
南基奥(2016 年 9 月 20 日)。“自动驾驶”汽车炒作的危险。华尔街日报。从http://ezproxy.redlands.edu/docview/1820989399?取回 accountid=14729
j .麦克马洪(2017 年 4 月 19 日)。自动驾驶汽车节省大量燃料。检索自https://www . Forbes . com/sites/jeffmcmahon/2017/04/17/big-fuel-savings-from-autonomous-vehicles/# 7e 85 C3 f 34390
尼尔森 g .(2015 年 7 月 13 日)。自动驾驶汽车做出道德选择。汽车新闻印刷版。从 Nexis Uni 检索。
诺瓦克,P. (2018 年 2 月 02 日)。无人驾驶汽车的伦理困境。检索自https://www . the globe and mail . com/globe-drive/culture/technology/the-ethical-dilemmas-of-self-driving cars/article 37803470/
隐私问题和自动驾驶汽车:我们准备好迎接自动驾驶汽车了吗?(2018 年 2 月 15 日)。检索自https://blogs . Thomson Reuters . com/answer son/privacy-concerns-self-driving-cars-ready-autonomous-vehicles/
j . pyper(2014 年 9 月 15 日)。无人驾驶汽车可以减少温室气体污染。检索自https://www . scientific American . com/article/无人驾驶汽车可减排温室气体污染/
拉姆齐,M. (2015 年 3 月 05 日)。研究表明,自动驾驶汽车可以减少事故。检索自https://www . wsj . com/articles/self-driving-cars-can-cut-down-on-accidents-study-says-1425567905
西迪基,F. (2018 年 9 月 17 日)。调查数据显示,美国人的通勤时间越来越长。检索自https://www . Washington post . com/transportation/2018/09/17/American-commutes-keep-get-longer-again-during-survey-data-show/?utm_term=.eebde421d861
特拉普尔河(未注明日期)。自动驾驶汽车的伦理系统:导论。应用人工智能, 30 (8),745–747。https://doi.org/10.1080/08839514.2016.1229737
AlphaGo 向 MuZero 的进化
DeepMind 的 MuZero 算法在 57 款不同的 Atari 游戏中达到了超人的能力。这篇文章将解释导致它的背景!
DeepMind 最近发布了他们的 MuZero 算法,在 57 款不同的 Atari 游戏中以超人的能力为标题。
可以玩雅达利游戏的强化学习代理很有趣,因为除了视觉上复杂的状态空间,玩雅达利游戏的代理没有一个完美的模拟器,它们可以像在国际象棋、日本象棋和围棋中那样用于规划。
这种“完美模拟器的想法是限制 AlphaGo 及其后续改进(如 AlphaGo Zero 和 AlphaZero)的关键之一,仅限于国际象棋、Shogi 和 Go,而对某些现实世界应用(如机器人控制)毫无用处。
强化学习问题包含在下面描述的马尔可夫决策过程(MDP)中:
国际象棋、围棋和松木带有一个知道如何操作的模拟器
AlphaGo、AlphaGo Zero、AlphaZero 和 MuZero 的算法家族通过使用规划扩展了这一框架,如下图所示:
整合规划扩展了强化学习问题的框架
DeepMind 的 AlphaGo、AlphaGo Zero 和 AlphaZero 利用了(动作、状态)→下一个状态的完美模型,以蒙特卡罗树搜索(MCTS) 的形式进行前瞻规划。MCTS 是使用深度神经网络进行策略映射和价值估计的完美补充,因为它平均了这些函数近似的误差。MCTS 为 AlphaZero 在国际象棋、围棋和围棋方面提供了巨大的推动力,在那里你可以做完美的规划,因为你有一个完美的环境模型。
穆泽罗通过学习下面描述的动力学模型,提供了一种挽救 MCTS 计划的方法:
穆泽罗的蒙特卡洛树搜索
MuZero 的基于模型的强化学习方法,具有从(s,a)→(s’,r)的参数模型图,在于它没有精确地重建 s’处的像素空间。与 Ha 和 Schmidhuber 的“世界模型”中的图片形成对比:
基于模型的 RL 在模型中重建像素空间的例子。图片来自:https://worldmodels.github.io/
MuZero 的这种规划算法在 Atari 领域非常成功,在强化学习问题上有巨大的应用潜力。本文将解释 AlphaGo、AlphaGoZero、AlphaZero 和 MuZero 的发展,以便更好地理解 MuZero 的工作方式。如果你感兴趣,我还制作了一个视频来解释这一点:
AlphaGo
AlphaGo 是该系列的第一篇论文,表明深度神经网络可以通过预测策略(从状态到行动的映射)和价值估计(从给定状态获胜的概率)来玩围棋。这些策略和值网络用于通过选择从给定状态采取哪些动作以及哪些状态值得进一步探索来增强基于树的前瞻搜索。
AlphaGo 使用 4 个深度卷积神经网络,3 个策略网络和一个价值网络。策略网络中的 2 个使用专家移动的监督学习进行训练。
监督学习描述了由某种 L(y ',y)组成的损失函数。在这种情况下,y’是策略网络从给定状态预测的动作,而 y 是专家玩家在该状态下已经采取的动作。
首次展示策略是一个较小的神经网络,它也接受较小的输入状态表示。因此,与高容量网络相比,首次展示策略具有明显较低的专家移动建模准确度。然而,首次展示策略网络的推理时间(对给定状态的动作进行预测的时间)是 2 微秒,相比之下,大型网络的推理时间是 3 毫秒,这使得它对于蒙特卡罗树搜索模拟非常有用。
S1 策略网络用于初始化第三策略网络,该第三策略网络通过自播放和策略梯度来训练。与学习价值函数然后使策略相对于价值函数贪婪的其他 RL 算法相比,策略梯度描述了直接相对于结果奖励优化策略的思想。策略梯度训练的策略网络与其自身参数的先前迭代进行对抗,优化其参数以选择导致胜利的移动。自玩数据集随后用于训练价值网络,以从给定状态预测游戏的赢家。
AlphaGo 最后的主力是 MCTS 政策和价值网络的结合,如下图所示:
MCTS 的想法是执行前瞻搜索,以更好地估计要立即采取的行动。这是通过从一个根节点(棋盘的当前状态)开始,通过选择一个动作来扩展该节点,并对状态“动作转换”产生的后续状态重复这一操作来完成的。MCTS 基于这个 Q + u(P) 项来选择沿着树的哪个边,这个项是价值网络对状态的估计、策略网络给予该状态的原始概率密度、以及该节点被访问过多少次的负加权的加权组合,因为这被一次又一次地重复。AlphaGo 的独特之处在于使用首次展示策略模拟来平均价值网络的贡献。首次展示策略将一直模拟,直到导致成功或失败的情节与带有额外参数 lambda 的该状态的价值函数估计相混合。
AlphaGo Zero
AlphaGo Zero 通过使 AlphaGo 算法更加通用,并从“零”人类知识出发,显著改进了 AlphaGo 算法。AlphaGo Zero 避免了专家走法初始化的监督学习,并将值和策略网络结合到单个神经网络中。与 AlphaGo 中更简单的卷积网络相比,这个神经网络也是按比例放大的,以利用一个 ResNet 。执行值和策略映射的 ResNet 的贡献在下图中是显而易见的,该图比较了双重任务 ResNet 和独立任务 CNN:
AlphaGo Zero 最有趣的特征之一是它使用 MCTS 发现的动作分布来训练其策略网络的方式,如下所示:
MCTS 通过将其用作监督来训练策略网络,以更新策略网络。这是一个聪明的想法,因为与政策网络从状态到行动的即时映射相比,MCTS 通过前瞻搜索产生了更好的行动分布。
阿尔法零
AlphaZero 是将 AlphaGo 家族推广到围棋之外的第一步,着眼于下棋和下日本象棋所需的变化。这需要公式化残差神经网络的输入状态和输出动作表示。
在 AlphaGo 中,状态表示使用一些手工制作的特征平面,如下所示:
AlphaGo Zero 使用一种更通用的表示法,简单地传入两个玩家的前 8 个棋子位置和一个二元特征平面,告诉代理它正在控制哪个玩家,如下所示:
AlphaZero 使用类似的思想对 Chess 和 Shogi 的输入状态表示进行编码,如下所示:
AlphaZero 还对算法进行了一些更微妙的改变,例如自玩冠军的加冕方式,以及取消围棋棋盘游戏中的数据增强,如反射和旋转。
穆泽罗
这就把我们带到了这个系列目前最先进的,MuZero。MuZero 对算法提出了一个非常强大的概括,允许它在没有完美模拟器的情况下学习。国际象棋、象棋和围棋都是带有完美模拟器的游戏,如果你将你的棋子向前移动 2 个位置,你就能确切地知道棋盘的最终状态。在 OpenAI 的魔方手这种复杂灵巧的操控任务中,对给定关节施加 30 N 的力就不能说是一回事了。
下图说明了 MuZero 的主要观点:
图 A 示出了使用表示函数 h 将原始观察值映射到用于基于树的规划的隐藏状态 s0 的流水线。在 MuZero 中,组合的价值/政策网络在这个隐藏状态空间中推理,因此不是将原始观察映射到行动或价值估计,而是将这些隐藏状态作为输入。动态函数 g 学习从隐藏状态和动作映射到未来的隐藏状态。
图表 B 示出了如何通过模仿由 MCTS 产生的动作分布来类似地训练策略网络,该动作分布首先在 AlphaGo Zero 中引入。
图表 C 显示了这个系统是如何被训练的。三个神经网络中的每一个都在价值网络和实际回报之间的差异、动态模型经历和预测的中间回报之间的差异以及 MCTS 行动分布和政策映射之间的差异的联合优化中被训练。
如何在这个优化循环中训练表示函数 h?
表示函数 h 通过随时间的反向传播在该联合优化方程中发挥作用。比方说,您正在计算 MCTS 行动分布 pi(s1)和策略分布 p(s1)之间的差值。p(s1)的输出是 p(g(s0,a1))的一个结果,p(g(h(raw_input),a1))的一个结果。这也是时间反向传播将更新信号一路发送回隐藏表示函数的方式。
alpha go→alpha go Zero→alpha Zero→MuZero
我希望这篇文章有助于澄清 MuZero 如何在以前的算法 AlphaGo、AlphaGo Zero 和 AlphaZero 的上下文中工作!感谢阅读!
纸质链接
alpha go:https://www.nature.com/articles/natur...
AlphaGo 零分:https://www.nature.com/articles/natur...
阿尔法零:https://arxiv.org/abs/1712.01815
穆泽罗:https://arxiv.org/abs/1911.08265
基于树的分类模型的演变
充分利用决策树
基于树的分类模型是一种监督的*机器学习算法,它使用一系列条件语句将训练数据划分为子集。每一次连续的分裂都会增加模型的复杂性,这可以用来进行预测。最终结果模型可以被视为描述数据集的逻辑测试路线图。决策树对于中小型数据集很流行,因为它们易于实现,甚至更易于解释。然而,它们并非没有挑战。在本文中,我们将强调基于树的分类模型的优点和缺点,以及克服它们的进展。*
照片由 chrilejarazu 在上拍摄
决策树的构造
以下示例描述了一个只有两个要素和两个类的样本数据集(左)。决策树算法从根节点中的所有 15 个数据点开始。该节点被称为不纯的,因为它包含异构数据的混合。在每个决策节点,该算法在杂质减少最多的目标特征上分割数据集,最终产生具有同质数据的叶节点 / 终端节点(右图)。有几个比较流行的衡量杂质的指标——基尼杂质 和 熵 。虽然不同的决策树实现在计算中使用的杂质度量会有所不同,但总的概念是相同的,并且结果在实践中很少发生实质性变化。划分过程继续进行,直到不能再进行进一步的分离,例如,模型希望达到每个叶节点尽可能快地变成纯的状态。在进行预测时,新的数据点会遍历一系列决策节点以得出决定。
简单决策树的可视化
强项
- 它们是直观的和容易理解的的,甚至对于非分析背景的人来说也是如此。
- 决策树是一种非参数方法,不要求数据集遵循正态分布。
- 它们能够容忍数据质量问题和异常值,例如,它们需要较少的数据准备,如实施前的缩放和标准化。此外,它适用于分类变量和连续变量。
- 它们可以在数据探索阶段用于快速识别重要变量。
挑战
- 决策树容易出现过拟合,当函数过于接近训练数据时就会出现这种情况(参见 偏差-方差权衡 )。当决策树模型学习到训练数据中的粒度细节和噪声,以至于削弱了它对新数据进行预测的能力时,就会出现这种情况。创建一个过于复杂的模型有可能对以前没有见过的数据做出糟糕的预测。
- 决策树遭受高方差。如果数据集很小,根据训练和测试样本的拆分方式,结果可能会有很大不同。
进化
最近,为了进一步挖掘基于树的模型的潜力,已经进行了大量的改进和验证。以下流程记录了进度:
基于树的模型的演变
提前停止(预修剪)
有几种方法可以减少过度拟合,防止模型学习过于具体和复杂的模式。
- 节点分割的最小样本
- 树的最大深度
- 分割时要考虑的最大特征数
因为很难提前知道什么时候停止种树。可能需要一些迭代来微调这些超参数。建议在训练时可视化树,从较低的 max_depth 开始,迭代增加。
使用 CV 对包含 20 个特征的样本数据集进行测试
修剪(修剪后)
修剪通过删除对模型的预测能力没有好处的叶节点来进行。这是简化模型和防止过度拟合的另一种方法。在现实中,一个完全成长的决策树可能有太多的分支,最终成为冗余的。剪枝通常是在模型建立后,通过检查模型在验证或测试数据集上的性能来完成的。通过删除对性能产生最小负面影响的节点,这一过程被称为成本复杂性修剪, it 降低了复杂性,并允许模型更好地概括。
引导聚集
Bagging 是一种集成技术,用于通过考虑来自多个决策树模型的结果来减少预测的方差,这些决策树模型是在同一数据集的不同子样本上训练的。当数据大小有限制时,这尤其有用。根据问题,使用平均值、中值或众数组合所有模型的预测。
使用 CV 对包含 20 个特征的样本数据集进行测试
随机森林
随机森林是一种集成学习方法,使用不同的特征子集构建多个树模型,有或没有采样(即引导)。它可以有效地处理具有许多变量的高维数据集,因为只有一个子集用于构建单独的树。限制每个树模型的特征数量的直觉是去除它们之间的相关性,这发生在强预测器被决策节点一致使用时。高度相关模型的协作并不能有效减少结果的差异。随机森林很受欢迎,因为它是通用的,并且可以以高精度快速训练。
值得注意的是,这种方法通常用于理解数据集和确定变量的重要性,因为它与解决问题有关——排除有价值的特征会导致错误增加。
助推
Boosting 是另一种类型的集成学习,组合弱学习器以实现改进的模型性能。弱学习者是预测相对较差的简单模型。boosting 的概念是按顺序训练模型,每次都试图比以前更好地拟合。一种被称为自适应增强 (AdaBoost)的方法基于先前的结果修改数据点的权重。对于模型构建的每个后续实例,正确分类的数据点被给予较低的权重,而错误分类的数据点被给予较高的权重。较高的权重指导模型学习这些数据点的细节。最终,所有的模型都有助于做出预测。
装袋与增压
梯度增强(和 XGBoost)
梯度增压方法更加复杂。梯度增强不是在每次模型构建迭代中调整权重,而是将后续模型与前一个模型的残差相匹配。这种方法有助于树木在表现不好的地方逐渐得到改善。换句话说,它迭代地提高了单棵树的精度,从而提高了整体模型的性能。梯度提升受众多调谐参数的影响,必须仔细考虑这些参数。当数据集中的关系高度复杂和非线性时有效。
extremeGradientBoosting,或简称为 XGBoost,是标准梯度增强方法的一种实现,只是增加了一些内容。首先,它使 正则化 成为可能,这进一步有助于减少过度拟合。XGBoost 的开发目标是优化计算性能。由于梯度推进按顺序训练模型,因此实施起来可能会很慢。XGBoost 的一些显著特性包括并行化、分布式计算、核外计算和缓存优化。
摘要
在本文中,我们回顾了一些宽泛的术语和技术,以改进基于树的模型。基于树的模型因其直观性而广受欢迎。理解这些机制将有助于创建基线模型。也就是说,没有免费的午餐——即使使用这些技术,调整模型仍然是一个迭代过程,以便充分优化模型性能。
时间序列中的爆炸梯度和消失梯度问题
实践教程
在这篇文章中,我们处理时间序列中的爆炸和消失梯度,特别是在递归神经网络(RNN)中,通过时间和梯度裁剪截断反向传播。
介绍
在这篇文章中,我们将重点关注顺序数据技术的深度学习。我们都熟悉这类数据。例如,文本是单词序列,视频是图像序列。更具挑战性的例子是来自时间序列数据的分支,具有诸如心率、血压等医学信息。、或金融,提供股票价格信息。深度学习时间序列任务最常见的 AI 方法是递归神经网络(RNNs)。使用 RNN 的动机在于解决方案对时间的概括。由于序列具有不同的长度(大多数情况下),经典的深度学习架构(如多层感知器(MLP))不加修改就无法应用。而且,MLP 的砝码数量绝对庞大!因此,通常使用 RNN,在整个架构中共享权重。下面显示了一个简单的 RNN 架构,其中 V、W 和 U 是权重矩阵,b 是偏置向量。
作者图片
如果你不熟悉 RNN、反向传播或 MLP,请随意阅读本文末尾的参考文献[1]-[3]来填补空白。
穿越时间的反向传播(BPTT)
通过定义损失函数( L )来训练 RNN,该损失函数测量真实标签和输出之间的误差,并通过使用向前传递和向后传递来最小化该误差。下面简单的 RNN 架构总结了整个通过时间反向传播的想法。
对于单个时间步长,执行以下程序:首先,输入到达,然后通过隐藏层/状态进行处理,并计算估计的标签。在这个阶段,计算损失函数以评估真实标签和估计标签之间的差异。计算总损失函数 L ,并由此完成正向传递。第二部分是向后传递,在这里计算各种导数。
作者图片
RNN 的训练并不简单,因为我们通过层和时间反向传播梯度。因此,在每个时间步中,我们必须将所有之前的贡献相加,直到当前贡献,如下式所示:
作者图片
在该等式中,计算时间步长 k 处的状态对时间步长 T = TT5 处的整个损失函数 L、的梯度的贡献。训练期间的挑战在于隐藏状态的比率:
消失和爆炸梯度问题
时间序列数据反向传播过程中出现的两个常见问题是梯度的消失和爆炸。上面的等式有两个问题:
作者图片
在第一种情况下,这一项以指数形式快速趋向于零,这使得学习一些长周期相关性变得困难。这个问题叫做消失渐变。在第二种情况下,这一项以指数方式快速趋近于无穷大,由于过程不稳定,它们的值变成了 NaN。这个问题叫做爆炸梯度。在接下来的两节中,我们将回顾处理这些问题的两种方法。
随时间截断反向传播(截断 BPTT)。
下面的“技巧”试图通过在训练过程中考虑移动窗口来克服消失梯度问题。众所周知,在反向传播训练方案中,通过整个序列有一个正向传递和一个反向传递来计算损失和梯度。通过采用一个窗口,我们还从训练持续时间方面提高了训练性能——我们简化了它。
这个窗口被称为“块”。在反向传播过程中,我们向前和向后运行这个特定大小的块,而不是整个序列。
作者图片
截断的 BPTT 比简单的 BPTT 要快得多,也不太复杂,因为我们不需要从远处的步骤做梯度的贡献。这种方法的缺点是,在训练过程中不会教授大于组块长度的依赖性。另一个缺点是消失梯度的检测。通过观察学习曲线,人们可以假设梯度消失,但是,也许任务本身是困难的。
对于消失梯度问题,已经提出了许多其他方法,仅举几个例子:
- 使用 ReLU 激活功能。
- 长短期记忆(LSTM)架构,其中遗忘门可能有所帮助。
3.用正交矩阵初始化权重矩阵, W ,,并在整个训练中使用它(正交矩阵的乘法不会爆炸或消失)。
渐变剪辑
将 g 视为损失函数相对于所有网络参数的梯度。现在,定义一些阈值,并在训练过程的后台运行以下剪辑条件。这是一个非常简单且非常有效的条件。
通过应用渐变裁剪,我们不会改变渐变的方向,而只是改变它的大小。由于隐藏状态( h) 导数是引起爆炸渐变的部分,它足以剪辑下面的实体:
阈值 是设计者需要手动定义的关键参数。我们的目标是通过查看梯度范数的曲线来选择解决爆炸梯度问题的最高阈值:
作者图片
摘要
在这篇文章中,我们探讨了简单的 RNN 建筑中渐变的消失和爆炸问题。这两个问题属于机器学习中的开放问题,这方面的研究非常活跃。讨论了截断 BPTT 和梯度裁剪方法,并给出了一些实现技巧。
关于作者
Barak 获得了以色列理工学院的航空工程学士学位(2016 年)、硕士学位(2018 年)以及经济和管理学士学位(2016 年,成绩优异)。他曾在高通工作(2019-2020),在那里他主要研究机器学习和信号处理算法。巴拉克目前正在海法大学攻读博士学位。他的研究兴趣包括传感器融合、导航、深度学习和估计理论。
https://www.linkedin.com/in/barakor/
参考资料和进一步阅读
[1] 对多层感知器的理解(MLP) 。尼廷·库马尔·凯恩,中等。2018.
[2] 了解神经网络。从神经元到 RNN、CNN 和深度学习。维博·尼甘,中等。2018.
反向传播非常简单。谁让它变得复杂了? 普拉卡什杰伊,中等。2017.
[4]张,京兆,等.“为什么梯度裁剪加速训练:适应性的理论辩护” arXiv 预印本 arXiv:1905.11881 (2019)。
[5]陈,向毅,志伟,洪."理解私人 SGD 中的渐变剪辑:几何透视."arXiv 预印本 arXiv:2006.15429 (2020)。
[6]帕斯卡努,拉兹万,托马斯·米科洛夫,约舒阿·本吉奥。"关于训练递归神经网络的难度."机器学习国际会议。2013.
[7] Ribeiro,António H .等人,“超越爆炸和消失梯度:使用吸引子和平滑度分析 RNN 训练”人工智能与统计国际会议。2020.
勘探-开发权衡
强化学习导论
探索和开发的思想是设计一个便利的强化学习系统的核心。“权宜”一词是一个从学习自动机理论改编的术语,指的是一个系统,其中代理(或自动机)学习随机环境的动力学。换句话说,代理人学习了一个在随机环境中制定行动的策略,这个策略比纯粹的机会要好。
在训练代理人在随机环境中学习时,探索和开发的挑战会立即出现。当代理在反馈框架中与环境交互时,它接收奖励。为了最大化其回报,代理人通常会重复过去尝试过的产生“有利”回报的行为。但是,为了找到这些导致奖励的行为,代理必须从一组行为中进行抽样,并尝试以前没有选择的不同行为。请注意这个想法是如何从行为心理学的“效果法则”中很好地发展而来的,在行为心理学中,一个代理人加强了对产生回报的行为的心理联系。这样做时,代理还必须尝试以前未选择的动作;否则,它将无法发现更好的行动。
强化学习反馈框架。一个智能体反复地与环境交互,并学习一个从环境中获取最大长期回报的策略。
探索是指代理人为了获得更好的回报,不得不从一组行为中抽取行为样本。另一方面,剥削是指一个代理人利用他已经知道的东西重复行动,从而获得“有利的”长期回报。设计强化学习系统的关键挑战是平衡探索和利用之间的平衡。在一个随机的环境中,行为必须被足够好地采样以获得一个期望的回报估计。一个专门从事勘探或开发的代理人注定不会是权宜之计。它变得比纯粹的偶然性(即随机化的代理)更糟糕。
多武装匪徒
在多武装匪徒问题(MAB)(或 n 武装匪徒)中,代理从一组动作中做出选择。这种选择导致基于所选动作的来自环境的数字奖励。在这种特定情况下,环境的性质是一种平稳的概率分布。所谓稳定,我们是指概率分布在环境的所有状态下都是恒定的(或独立的)。换句话说,概率分布不会随着环境状态的改变而改变。在 MAB 问题中,代理人的目标是在特定时期内从环境中获得最大的回报。
MAB 问题是“独臂强盗”问题的延伸,它被表示为赌场中的老丨虎丨机。在 MAB 的设置中,我们有多杆的,而不是单杆的老丨虎丨机。每个杠杆对应于代理可以执行的一个动作。代理的目标是从机器中进行最大化其赢得物(即奖励)的游戏。代理人必须找出最佳杠杆(探索),然后专注于能使其回报(即回报总和)最大化的杠杆(开发)。
左:独臂强盗。吃角子老丨虎丨机有一个控制杆,玩的时候会返回一个数字奖励。
右:多臂土匪。吃角子老丨虎丨机有多个(n)分支,每个分支在玩时返回一个数字奖励。在 MAB 问题中,强化代理人必须平衡勘探和开采,以使回报最大化。
机器上的每一个动作(即杠杆),都有一个预期的回报。如果代理人知道这个期望报酬,那么问题就变成了一个无关紧要的问题,它仅仅涉及到选择具有最高期望报酬的行动。但是,由于杠杆的预期回报是未知的,我们必须核对估计,以了解每个行动的可取性。为此,代理将不得不探索以获得每个动作的平均奖励。之后,它可以利用它的知识,选择一个预期回报最高的行动(这也称为选择贪婪行动)。正如我们所看到的,代理人必须平衡探索和开发行为,以最大化整体长期回报。
文献学
- 纳伦德拉,K. S .,& Thathachar,硕士(2012)。学习自动机:导论。快递公司。
- 萨顿和巴尔托(1998 年)。强化学习:导论。麻省理工出版社。
最初发表于https://ekababisong.org。
特斯拉在荷兰的迅速普及
利用 BigQuery、云存储和 Data Studio 探索 RDW 车牌数据集
去年,在荷兰的高速公路上,我注意到路上的特斯拉数量一直在迅速增加。
这有几个很好的理由。荷兰政府通过税收优惠积极支持全电动(租赁)汽车的采用。此外,最新的 Model 3 是第一款价格相对友好的特斯拉,约为 6 万欧元,而不是 10 万欧元以上。
为了验证我的观察,我将通过 RDW 探索一个开放的数据集。RDW(荷兰车辆管理局)负责车辆的许可,他们提供荷兰所有许可车辆的每日更新数据集。
照片由 Bram Van Oost 在 Unsplash 上拍摄
正在准备数据…
首先,让我们下载数据集(更新日期:2020 年 1 月 10 日)。
所有荷兰车辆在一个大的 CSV,好吃!
CSV(约 7.7GB)太大,无法导入电子表格,因此我们将使用谷歌的 Pb 级数据工具 BigQuery 来处理这些数据。
因为 BigQuery 将手动 CSV 上传限制为 10MB,所以我们需要首先将我们的文件上传到云存储中的存储桶:
云存储桶
接下来,我们通过选择云存储中的文件在 BigQuery 中创建新表,设置表名kentekens_2020
、模式设置auto-detect
、字段分隔符comma
和要跳过的标题行1
。
在 BigQuery 中创建我们的表
几秒钟后,表就创建好了,我们的数据集就可以开始研究了。当我们查看详细信息时,有 1440 万行等待查询。根据该模式,有 64 列。这意味着我们的表包含了近十亿个字段。).每行代表一辆注册了牌照的汽车。
我们来查询一下!
因为我们只对乘用车数据感兴趣,所以我们通过对Voertuigsoort
(车辆类别)应用过滤器来排除所有其他类别。让我们把所有的车按品牌分组,然后数数。
SELECT
merk AS brand,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
GROUP BY
brand
ORDER BY
cars DESC
获胜者是…大众!要查看 Tesla 的排名,我们可以向下滚动,但我们也可以在 Data Studio 中显示我们的结果。
水平条形图 FTW!
我们到了。我们发现泰斯拉排名 29。如果你仔细看,你还会发现“特斯拉汽车公司”。这意味着我们无法在品牌过滤器中进行精确匹配。我们希望所有品牌包含(小写或大写)tesla
。
现在我们统计特斯拉汽车占所有乘用车的百分比。
SELECT
all_cars,
tesla_cars,
ROUND(tesla_cars/all_cars*100,2) AS percentage_tesla_cars
FROM (
SELECT
COUNT(*) AS all_cars,
(
SELECT
COUNT(*)
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
LOWER(merk) LIKE '%tesla%') AS tesla_cars,
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto')
2020 年初,将近 50000 辆特斯拉正在荷兰的街道上漫游。这大约是荷兰所有乘用车的 0.5%。这些数字还没有打动我。
为了回答我们最初的问题(荷兰道路上的特斯拉数量是否呈指数增长?)我们需要在一个时间框架内绘制这些数字。因此,我们使用列Datum_eerste_afgifte_Nederland
,它给出了特定汽车在荷兰首次注册的日期。
从我们的数据中排除许多老前辈(第一辆汽车甚至在大战前就获得了许可,数据质量警报!)我们只看 2008 年及以后的数据。根据维基百科的说法,第一辆特斯拉是在那一年交付给埃隆·马斯克个人的。
SELECT
Datum_eerste_afgifte_Nederland AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND Datum_eerste_afgifte_Nederland >= 20080101
GROUP BY
date,
brand
ORDER BY
date
如果我们在 Data Studio 中研究这个查询的结果,我们会得到一个折线图,其中显示了排名前 20 位的品牌。
有人看到我的特斯拉吗?
由于特斯拉在前 20 名中无处可寻,我们不得不对品牌TESLA
设置一个包含过滤器,以便看到我们期望看到的趋势。
嘣!
那里!我观察到荷兰道路上的特斯拉数量迅速增加,这似乎得到了数据的证实。
深入挖掘
下一步是调查荷兰在全球特斯拉生产供应中的份额。我在维基百科上找到了一些数字,做了一些数据清理,产生了这个小 CSV,我直接把它作为表格上传到 BigQuery:
现在我们可以把这些数字和我们自己的数据联系起来。
WITH
p AS (
SELECT
CAST(year AS string) AS year,
production
FROM
`<project>.RDW_kentekens.production` ),
k AS (
SELECT
CASE
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2014%' THEN '2014'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2015%' THEN '2015'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2016%' THEN '2016'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2017%' THEN '2017'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2018%' THEN '2018'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2019%' THEN '2019'
ELSE
NULL
END
AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND Datum_eerste_afgifte_Nederland BETWEEN 20140101
AND 20191231
GROUP BY
date,
brand
HAVING
brand = 'TESLA')
SELECT
date,
brand,
cars,
production,
ROUND(cars/production*100,1) AS percentage_dutch_teslas
FROM
k
LEFT JOIN
p
ON
k.date = p.year
ORDER BY
date DESC
注意粉红线。这是荷兰特斯拉占全球年产量的百分比。2019 年生产的所有特斯拉汽车中,有 8.5%是同年在荷兰获得许可的。对于这样一个小国来说,这是相当大的份额!
好的。接下来让我们关注最畅销的型号,并在 Data Studio 中显示前 10 名。
SELECT
Datum_eerste_afgifte_Nederland AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
Handelsbenaming AS model,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND Datum_eerste_afgifte_Nederland >= 20080101
GROUP BY
date,
brand,
model
ORDER BY
date
你好模型 3!
似乎 Model 3 是荷兰最畅销的产品。其他特斯拉车型呢?有没有 2008 年的特斯拉跑车?
有了 24 排,我们有一些清洁工作要做,因为特斯拉没有 24 种不同的型号。我们还可以按日期查询车型,以便搜索我们的 2008 款跑车。
SELECT
Datum_eerste_afgifte_Nederland AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
CASE
WHEN Handelsbenaming LIKE '%MODEL 3%' THEN 'MODEL 3'
WHEN Handelsbenaming LIKE '%MODEL S%' THEN 'MODEL S'
WHEN Handelsbenaming LIKE '%MODEL X%' THEN 'MODEL X'
WHEN Handelsbenaming LIKE '%R__DSTER%' THEN 'ROADSTER'
ELSE
NULL
END
AS model,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND merk LIKE 'TESLA%'
AND Datum_eerste_afgifte_Nederland >= 20080101
GROUP BY
date,
brand,
model
HAVING
model IS NOT NULL
ORDER BY
cars DESC
特斯拉玩具十年
首批跑车于 2009 年第四季度抵达荷兰。这些司机是一些真正的早期采用者。让我们看看该季度的前四位车主是否仍然驾驶同一辆车!
SELECT
Datum_eerste_afgifte_Nederland AS date,
Datum_tenaamstelling AS ownership_date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
CASE
WHEN Handelsbenaming LIKE '%MODEL 3%' THEN 'MODEL 3'
WHEN Handelsbenaming LIKE '%MODEL S%' THEN 'MODEL S'
WHEN Handelsbenaming LIKE '%MODEL X%' THEN 'MODEL X'
WHEN Handelsbenaming LIKE '%R__DSTER%' THEN 'ROADSTER'
ELSE
NULL
END
AS model,
kenteken AS license_plate,
CASE
WHEN Datum_eerste_afgifte_Nederland = Datum_tenaamstelling THEN 'TRUE'
ELSE
'FALSE'
END
AS first_owner
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND merk LIKE 'TESLA%'
AND Datum_eerste_afgifte_Nederland > 20080101
GROUP BY
date,
ownership_date,
brand,
model,
license_plate
HAVING
model IS NOT NULL
AND model = 'ROADSTER'
AND date < 20100101
ORDER BY
date
我们有赢家了!这个坏男孩(或女孩)仍然像 2009 年一样开车。
另一辆特斯拉呢?他们还被第一个主人许可吗?我们会找到答案的。
SELECT
brand,
model,
ROUND(COUNT(CASE
WHEN first_owner = 'TRUE' THEN 1
ELSE
NULL
END
)/ COUNT(first_owner)*100,1) AS percentage_first_owners
FROM (
SELECT
Datum_eerste_afgifte_Nederland AS date,
Datum_tenaamstelling AS ownership_date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
CASE
WHEN Handelsbenaming LIKE '%MODEL 3%' THEN 'MODEL 3'
WHEN Handelsbenaming LIKE '%MODEL S%' THEN 'MODEL S'
WHEN Handelsbenaming LIKE '%MODEL X%' THEN 'MODEL X'
WHEN Handelsbenaming LIKE '%R__DSTER%' THEN 'ROADSTER'
ELSE
NULL
END
AS model,
kenteken AS license_plate,
CASE
WHEN Datum_eerste_afgifte_Nederland = Datum_tenaamstelling THEN 'TRUE'
ELSE
'FALSE'
END
AS first_owner
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND merk LIKE 'TESLA%'
AND Datum_eerste_afgifte_Nederland > 20080101
GROUP BY
date,
ownership_date,
brand,
model,
license_plate
HAVING
model IS NOT NULL
ORDER BY
date)
GROUP BY
brand,
model
ORDER BY
percentage_first_owners DESC
原来特斯拉车主都挺喜欢自己的车的。
好了,现在结束。仍然有很多数据可以利用,但我会把荷兰特斯拉目录价格的发展留给你(根据 RDW)。
SELECT
Datum_eerste_afgifte_Nederland AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
CASE
WHEN Handelsbenaming LIKE '%MODEL 3%' THEN 'MODEL 3'
WHEN Handelsbenaming LIKE '%MODEL S%' THEN 'MODEL S'
WHEN Handelsbenaming LIKE '%MODEL X%' THEN 'MODEL X'
WHEN Handelsbenaming LIKE '%R__DSTER%' THEN 'ROADSTER'
ELSE
NULL
END
AS model,
ROUND(AVG(catalogusprijs)) AS price
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND merk LIKE 'TESLA%'
AND Datum_eerste_afgifte_Nederland > 20080101
GROUP BY
date,
brand,
model
HAVING
model IS NOT NULL
ORDER BY
date DESC
荷兰每年每辆特斯拉车型的平均价格(欧元)
注:我每天都在学习,欢迎在评论区添加您的意见和建议,或者通过 LinkedIn 联系我。
风暴之眼
我们正处于新冠肺炎风暴的中心,让我们用手头的数据来绘制我们希望在未来航行的航线。
从焦虑到行动
我坐在法国阿尔卑斯山的书桌后面,透过窗户看着正在生长的绿草、明黄色的连翘和发芽的樱桃树,它们标志着春天的第一个前提。尽管我们大多数亲密的朋友和同事都或多或少地感染了新冠肺炎病毒,但我发现我的情绪每天都被社交媒体上铺天盖地的坏消息所挫伤。
如果我们真的在风暴的中心,让我们利用手头的数据,绘制出我们希望在天气变得更加晴朗时航行的路线。
鉴于互联网对无支持意见、自私贡献和集体焦虑的不断放大,关注数据驱动决策的需求从未如此迫切。
我们客户的数据科学项目处于待命状态,我们的营销漏斗正在冒烟,我不得不思考,阳光照射在窗台上是否预示着更黑暗的时代即将到来。数据在说什么,我们如何从展现在我们眼前的数据中框定我们能学到什么,不能学到什么?
2020 年 1 月 22 日,新加坡樟宜国际机场,卫生官员用热扫描仪对来自中国的旅客进行筛查。图片来源:罗斯兰·拉赫曼/盖蒂图片社。
Covid19 催生了有趣的数据科学项目
对文献的快速回顾揭示了组织如何利用数据科学来解决当前危机的几个故事:
- 短短三个月前,蓝点人工智能平台在中国武汉发现了一群“不寻常的肺炎”病例。
如果不是最严重的,新型冠状病毒(新冠肺炎)是袭击我们绿色…
bdtechtalks.com](https://bdtechtalks.com/2020/03/09/artificial-intelligence-covid-19-coronavirus/)
人工智能如何加速药物研究
- 百度开发了一种基于人工智能的检测系统,该系统结合了计算机视觉和红外传感器,每分钟可筛查多达 200 人的潜在感染病例。
百度的人工智能辅助红外传感器每分钟筛查多达 200 人的潜在感染病例。图片来源:南华早报。
不可预测和快速传播,新冠肺炎冠状病毒已经从早期在中国的集中传播到…
www.technologyreview.com](https://www.technologyreview.com/s/615342/how-baidu-is-bringing-ai-to-the-fight-against-coronavirus/)
- 阿里巴巴推出了一个人工智能系统,它可以识别胸部 CT 扫描中的病毒,速度比人眼快 45 倍
[## 阿里巴巴的新人工智能系统可以在几秒钟内检测到冠状病毒,准确率达到 96%
中国科技巨头阿里巴巴最近开发了一种用于诊断新冠肺炎(冠状病毒)的人工智能系统。阿里巴巴的…
thenextweb.com](https://thenextweb.com/neural/2020/03/02/alibabas-new-ai-system-can-detect-coronavirus-in-seconds-with-96-accuracy/)
- 谷歌的 DeepMind 人工智能研究实验室正在利用深度学习来寻找与新冠肺炎相关的蛋白质折叠的新信息。
科学界已经为应对最近的新冠肺炎疫情而振奋起来,建立在几十年的基本…
deepmind.com](https://deepmind.com/research/open-source/computational-predictions-of-protein-structures-associated-with-COVID-19)
- Kaggle 与几个领先的人工智能机构合作,发布了新冠肺炎开放研究数据集挑战,以解决由NASEM/世卫组织针对当前危机开发的十个基线问题
预测世界各地每日新冠肺炎传播
www.kaggle.com](https://www.kaggle.com/c/covid19-global-forecasting-week-1)
解释 Covid19 数据缺少什么
尽管这些例子很有希望,但分析方法的四个基本步骤可以帮助我们更好地理解数据在说什么,以及这些数字除了沉默之外提供了什么。
- 背景如何帮助我们理解问题的根源?
- 我们怎样才能保证手头数据的质量?
- 解决问题的合适方法是什么?
- 我们如何将数据转化为集体行动?
数据科学不是处理数字,而是理解感知、预测和评估如何用于从数据中创造可操作的见解。
#1 挖掘当前背景,揭示我们试图解决的问题的根源
这种新型冠状病毒爆发造成的问题基本上是医疗、经济还是社会福祉问题?
在我们的数据管道之外,这些问题是相互关联的,每一个都导致了其他问题的严重性。我们需要探索为什么某些人群比其他人面临更大的风险,为什么缺乏检测和医疗设施,为什么我们的经济和社会系统难以适应这一挑战。
一旦我们确定了所研究问题的性质,我们就可以寻找数据集来规划个人或集体行动的过程。我们可以选择遵守或忽略公共政策和建议,或者我们使用这些数据来试图推动我们的家庭和社区为共同利益而行动。在这两种情况下,决策环境都是随机的,而不是确定的,在我们处理的标记数据中找不到“答案”。我们能做的最好的事情就是利用数据科学来提供概率框架,从而降低决策过程中的风险、模糊性和不确定性。
#2 限定,而不是量化手头的数据
世卫组织、各国政府和地方当局提供的关于新冠肺炎全球传播的大量统计数据有多大相关性?关于感染、住院和发病率的数据是否是使用允许我们从一个国家到另一个国家得出有意义的结论的标准收集的?鉴于各大洲在遏制、检测和治疗策略上的差异,我们在态度、行为和对危机的认知方面缺少哪些需要考虑的数据?
正如 Kenneth Fields 和 Amanda Makulec 所指出的,数据呈现的形式也是一个基本问题。通过交流变量、数据集和图表,我们影响了公众对问题的看法。
就制图学而言,我们生活在一个惊人的时代。技术允许并积极支持快速…
www.esri.com](https://www.esri.com/arcgis-blog/products/product/mapping/mapping-coronavirus-responsibly/) [## 在你创建另一个关于新冠肺炎的图表之前,要考虑十点
总结一下——# viz responsible;这可能意味着根本不在公共领域发布你的可视化。
medium.com](https://medium.com/nightingale/ten-considerations-before-you-create-another-chart-about-covid-19-27d3bd691be8)
这些问题切中了数据可视化的核心:数据的每种表示都受到其上下文、表示技术、元数据的使用和隐式叙述的制约。因为数据集从来都不是客观的,我们需要了解这些数字在多大程度上阐明了我们试图解决的问题,这些数据如何反映问题的演变,以及我们是否有足够的信息来预测或影响我们的行动/不行动的结果。
如果人口的地理分布差异很大,那么按地区绘制病例数最多会产生误导。图片来源:肯尼斯·菲尔兹
如果人口的地理分布差异很大,那么按地区绘制病例数最多会产生误导。图片来源:肯尼斯·菲尔兹
#3 选择适当解决问题的方法
在这里,数据驱动决策的优势不可低估,尽管一些世界领导人倾向于希望这场危机消失。在数据科学中,我们了解到选择适当的方法取决于决策环境的性质、手头数据的类型、可用参数的数量、资源限制以及所需的准确度、精确度和召回率。然而,在解决新冠肺炎疫情问题时,贸易知识的核算至关重要,因为我们不能忽视对症状、病理、反应时间和协议的诊断和治疗关注。
这种对实践智慧的需求表明了数据科学的局限性,人类智慧的广度不能被简化为简单的算法,就像人类决策者不能被描述为冷血的计算机器一样。应对危机需要对社会可接受的行动方案进行伦理选择:谁最终负责选择适当的行动方案:个人、医疗行业还是政府?安装一个监控国家可以在多大程度上牺牲个人自由?在拯救国家经济的过程中,我们应该牺牲大多数人来保护少数特权者吗?无论是在国家还是社区层面,孤立是否比全球应对疫情更好?应对危机的适当方法必须权衡对金融价值的暂时考虑和对人类价值的长期需求。
我们不能忽视对症状、病理、反应时间和方案的诊断和治疗关注。图片来源:《柳叶刀》
#4 将数据转化为集体行动
如果数据和行动之间没有直接的联系,我们必须探索启发法如何形成感知、预测和评估,从而引导决策者或根据数据采取行动。在个人层面上,为什么人们对每天发布的大量数据反应如此不同?如果互联网有助于信息的即时和全球流通,为什么我们各国对危机严重性的看法会有如此多的差异?为什么新加坡和中国采取了系统检测的行动,而英国和法国只愿意承认那些明显患病的人?
当荷兰选择反其道而行之,而美国正在考虑让人们重返工作岗位时,怎么会有这么多国家选择实施国家隔离?为什么政客们要为他们“处于战争状态”的决定辩护,恳求社会团结起来对抗“人类共同的敌人”?我们如何利用认知偏见和行为科学来鼓励组织和个人采取社会可接受的行为?今天比以往任何时候,我们贡献的价值不在于分析屏幕上的数据,而在于提供能够引发变化的有意义的故事。
许多人以前写过关于决定性时刻的本质——复杂的社会和经济系统可以明显向更好或更坏的方向演变的短暂时刻。我们正生活在这样一个时刻,我们的医疗、经济和社会体系确实有可能发生变化。正如尤瓦尔·诺亚·哈拉里评论的那样,我们无法避免在暴风雨中航行,但我们可以选择如何度过难关,以及一旦天气变得更加晴朗,我们将选择哪条航线航行。
人类现在正面临一场全球性危机。也许是我们这一代人最大的危机。决策人和…
www.ft.com](https://www.ft.com/content/19d90308-6858-11ea-a3c9-1fe6fedcca75)
坐在风暴中心的一个优势是我们对自由时间的错觉——如果用来看数据,可以帮助我们更明智地导航到未来。
Lee Schlenker 是 BAI 的负责人,也是商业分析和社区管理的教授。
了解冠状病毒的最新情况(新冠肺炎)
关注中型冠状病毒博客或注册时事通讯阅读来自中型和跨网络的专家支持的冠状病毒故事,例如:
没有人知道有多少人有新冠肺炎。
从斯蒂芬·库里对安东尼·福奇博士的采访中获得了 4 点有用的信息。
脸书数据分析师访谈
脸书的数据分析师在许多不同的团队中工作,并且是高度跨职能的
图片来自脸书
目录
介绍
脸书是总部位于门洛帕克的最大的社交媒体公司之一,每月活跃用户约为 25 亿[1]。这意味着每天要处理超过 25 亿条内容和超过 500 的数据[2]。考虑到如此庞大的数字,它目前拥有由数千名工程师、数据科学家和数据分析师组成的大约 45,000 名员工是有道理的[3]。
在这篇文章中,我们将深入了解脸书的数据分析师,包括所需的技能和资格、薪酬、面试流程、技巧和面试问题示例。
数据分析师角色
脸书利用其数据来改善和优化你能想到的一切,从产品到营销策略到内部运营等等。因此,脸书的数据分析师在许多不同的团队中工作,并且是高度跨职能的。然而,一般来说,脸书的数据分析师利用某种数据来完成各种项目,如构建可视化和仪表板,提供分析支持,和/或进行探索性分析。
所需技能和资格
同样,所需的技能和资格取决于团队,但它们通常遵循相似的模式:
- 2-5 年以上的定量分析经验,具有在分布式计算平台(如 Hive/Hadoop/Redshift 或类似平台)的大型数据集上使用 SQL 的开发经验
- 2-5 年以上使用 Tableau、Domo 或类似工具开发数据可视化和可操作报告仪表板的经验
- 有处理和分析数据集的经验,能够解释它们以做出商业决策
- 与产品和领导团队交流分析结果以影响产品整体战略的经验
脸书的数据分析团队
在脸书,你可以为数百个团队工作(毫不夸张),但以下是一些目前正在招聘数据分析师的团队示例:
- 数字版权运营
- 人员分析
- 消费者需求及意见调查
- 商业伙伴关系
- 可持续发展团队
- 合法的
脸书的数据分析师 vs 数据科学家
通常,数据分析师的工作和数据科学家的工作之间存在混淆。数据分析师分析数据以发现趋势,并经常创建数据的可视化表示,以与公司分享他们的见解。他们通常需要知道如何使用某种工具(如 Tableau)查询数据和可视化数据。
脸书的数据科学家也做数据分析师做的事情,但做得更多。数据科学家需要更多的技能和知识,包括计算机科学、数学和统计学,通常会承担更复杂的项目,包括机器学习建模、数据争论等。
此外,在脸书还有两个以数据为中心的分析角色。增长市场分析师和产品分析师的角色类似于脸书的数据分析师角色,但分别在增长和产品指标上更具团队针对性。
当面试数据分析师角色时,如果你的技能更适合这些角色,招聘人员可能会将你调到产品分析师、数据科学家或增长市场分析师团队的另一个招聘人员,这是很常见的。许多候选人会意识到数据科学的角色比他们想要的更面向业务。一个候选人也可以在脸书同时面试多个职位。
面试过程
数据分析师访谈流程通常需要 2-3 周,但有时会持续一个多月。该过程通常有两个主要部分:
1.初始电话屏幕
通常有两个初始电话屏幕,每个屏幕需要大约 30-45 分钟。
A .与招聘人员的电话筛选
第一次电话面试通常由招聘人员主持,目的是让受访者更好地了解角色和团队,面试官也能更好地了解受访者。通常招聘人员会问你过去的经历,为什么是脸书,他们可能很少问一些技术问题(SQL 问题)。招聘人员只是希望看到你对公司有真正的兴趣,你是一个很好的沟通者,并且没有明显的危险信号。
B .与招聘经理的电话筛选
第二次电话面试由招聘经理进行,也会询问你的经历,并给你一些基于情景的问题。
例题:
- 告诉我一次你带着某种期望开始分析,然后得到意想不到的结果的经历
- 告诉我们一个你管理过的项目,并从头到尾描述一下。
2。现场面试
电话筛选之后是现场面试,通常包括四轮 30 分钟的面试:
A .技术回合:SQL
技术回合的 SQL 部分通常是成对的编码练习——你应该期待面试官给你一些数据表和问题来解决。
想用脸书的解决方案练习现实生活中的 SQL 问题吗?查找更多关于 面试查询 。
例题:
- 给定一个帐户状态表,编写一个查询来获取今天关闭但昨天打开的帐户的数量。
B .技术回合:分析研究
第二轮也是技术面试,是分析研究。这是一个开放式的与数据相关的案例,面试官会带你看一遍。你需要分析案例,做出假设,并验证它。这个案例可能涉及到很多东西,比如数据建模、业务度量和仪表板报告。
C-D“适合”测试
在最后两轮面试中,你会被问一轮行为和情景面试问题,以检查你的工作风格、个性和态度。他们想确保你能很好地融入相关的 given 和公司的整体文化。
成功的秘诀
- 确保你提出了澄清性问题,尤其是在分析性案例研究中。面试官通常不会提供你成功所需的所有信息。他们希望看到你的思维合乎逻辑,并提出正确的问题。
- 如果提供的信息有遗漏,面试官没有给出更多,确保你陈述了你的假设。
- 说出你的想法——解释你的思考过程,这样你就可以展示你的思考方式。就像你需要在高中数学中展示你的作品一样,展示你的思维过程与获得正确答案同样重要。
- 了解脸书文化 五大核心价值观 。在整个面试过程中,他们会看到你在过去的经历中展示了这些价值观。
面试问题示例
- 如果没有重复项,您会使用 UNION 还是 UNION ALL?
- 创建视图需要在数据库中存储吗?
- 给我一个例子,当你处理一个大型数据库,并能够从中获得深刻见解?
- 如何能察觉 Instagram 故事中用户的下降?
- 你如何衡量脸书活动的成功?你能提出一个从中获利的计划吗?
想用脸书的解决方案来练习现实生活中的 SQL 问题吗?查找更多关于 面试查询 。
参考
[1] 脸书 2019 年第四季度财报
[3] 脸书向其 45000 名员工发放 10000 美元,CNN
原载于 2020 年 4 月 8 日https://www.interviewquery.com。
脸书数据工程师面试
图片来自 Unsplash
介绍
脸书可以说是世界上最受欢迎的社交媒体网络,全球活跃用户超过 20 亿。因此,脸书积累并存储了大量用户数据,使其成为任何希望在数据科学领域发展的人的宝库,这已经不是什么新闻了。无论是数据科学家、数据分析师还是数据工程师,无论你的数据科学职业道路如何,脸书都将为你提供只有少数公司才能匹敌的规模。
作为脸书的一名数据工程师,你不仅能接触到任何数据工程师都梦想不到的最先进的工具和平台,还能看到你的工作、公司发展和用户满意度之间的直接联系。
需要一份完整的数据工程面试问题清单?查看我们的数据工程面试终极指南。
脸书的数据工程师角色
图片来自 Pixabay
在任何企业数据分析团队中,数据工程师的角色范围从管理、优化和监督数据检索系统到构建复杂和健壮的数据管道和算法。用更专业的术语来说,他们的工作包括发现数据集中的趋势,开发增强数据收集的算法,编译数据库系统,以及编写复杂的查询来提炼数据集。
“脸书的数据工程师是支持脸书每个产品团队的核心技术功能紧密集成团队的一部分。它们与软件工程、设计、产品管理、数据科学、研究等一起帮助产品决策”。
在脸书,数据工程师通过构建和管理可扩展的数据管道和框架,设计供内部业务使用的数据仓库,以及利用大数据技术将原始和复杂的数据转化为可操作的见解,从而为更好的业务决策奠定基础。
所需技能
脸书的数据工程师职位需要久经考验的技能和丰富的行业经验。因此,脸书选择只雇佣在数据仓库领域有至少 4 年行业经验的高素质申请人。
其他最低资格包括:
- 计算机科学、数学、物理或其他技术领域的学士学位。
- 在编写复杂 SQL、数据框架 API、开发定制 ETL、实施和维护方面有 4 年以上的经验。
- 丰富的 MapReduce 或 MPP 系统行业经验。
- 对数据架构、机器学习方法、模式设计和维度数据建模有深刻的理解。
- 具有面向对象编程语言(Java、Python、C++、Scala、Perl 等)的实践经验。)
- 在分析大型数据集以确定交付成果、差距和不一致方面的经验。
脸书数据工程师团队的类型
脸书是一家非常大的以产品为基础的公司,有许多部门、团队和分支机构。作为一家数据驱动型公司,脸书非常依赖数据来做出明智的商业决策。
数据工程师负责数据收集和数据完整性,他们与内部团队跨职能合作帮助促进从数据到合理决策过程的飞跃。因此,脸书的数据工程师在团队中工作,他们的具体角色可能会因团队角色而有所不同。
根据团队的不同,脸书的数据工程师可能包括:
脸书应用货币化(FAM)团队:职责包括设计和构建强大的数据基础、基础设施和架构,帮助分析、产品、工程和 FAM 领导层做出更好的决策。他们还与数据基础设施团队密切合作,对现有数据和 ETL 管道提出改进和修改建议,并向多功能小组和领导层传达策略和流程。
数据仓库团队:ream 中的角色包括在生产中设计/构建/启动新的 ETL 流程和数据模型,管理数据仓库计划,与工程师、产品经理和产品分析师合作以了解数据需求,以及与数据基础设施团队合作以筛选基础设施问题并推动解决方案。
诺维区块链数据工程团队:该团队的数据工程师设计并实现可扩展的数据仓库,整合定性和定量的研究数据,在生产中构建并启动新的 ETL 流程,识别、收集用户交互数据和服务器事件数据,并将其转换为可扩展的 schema 模型。他们还与产品经理、数据科学家、软件工程师、经济研究人员、合规和风险管理人员密切合作,构建独特、直观的产品来解决挑战性问题。
脸书视频分发:角色包括为新数据和 ETL 管道开发最佳数据处理架构和系统,并对现有数据和 ETL 管道提出改进和修改建议。与脸书内部团队合作,了解他们的需求,并在数据工程解决方案的框架内将这些需求联系起来。
合作伙伴关系中央系统、数据和工具团队:职责包括构建和维护高效可靠的数据管道,以移动和转换数据,构建提供直观分析的模型,以及跨职能协作以构建问题、收集数据并提供业务影响建议。
家庭生态系统:一般角色包括,与数据基础设施、产品软件工程和产品管理团队合作,开发和验证架构驱动的端到端分析开发产品、工具和基础设施堆栈。其他角色包括为新数据和 ETL 管道/应用程序构建最佳数据处理框架,为数据和度量洞察构建可视化,以及在团队内部和不同领导级别之间有效地传达战略。
面试过程
图片来自 Unsplash
脸书数据工程师的面试和其他脸书技术职位一样,遵循标准的面试流程。面试流程从最初的招聘人员电话面试开始,会对角色和面试流程进行解释。在这之后,是一个一小时长的技术电话屏幕,涉及 SQL 和 Python/Java 编码。通过技术筛选后,将安排由 3 到 4 轮连续面试组成的现场面试。
初始屏幕
这是一个 30 分钟长的与招聘人员或人力资源的电话面试。在这个电话交谈中,招聘人员可以解释更多关于工作角色的信息,以及随后在面试过程中的期望。
技术屏幕
脸书德技术面试是一个 1 小时的电话面试,涉及 SQL 和 Python/Java(取决于你的编程语言偏好)编码使用“Coderpad”。问题数量通常在 8 到 10 个左右,在 SQL 和 Python 之间平均分配(5 个 SQL/5 个 Python ),还有一个针对 SQL 和 Python 的算法问题。
注意:您将始终受到时间的限制(最多 1 小时。).这有助于在解决问题时,尤其是在编码部分,与面试官清楚地交流你的思维过程。
现场面试
脸书数据工程师面试流程的最后一个阶段是现场面试,包括 3 个完整的面试(2 个 ETL 回合,1 个数据建模回合),1 个行为回合,以及中间的午餐休息。
除了行为面试之外,每隔一轮面试都会有一个产品感元素,测试候选人在关键运营指标上的产品感知识。您可能会遇到这样的问题:“对于 x 场景,捕捉哪些指标是好的?”,“描述一个你不同意利益相关者的情况,你是如何处理的?”。关于 ETL 和建模的问题是基于案例的,可能需要一些编码。
现场面试流程的细分如下:
- ETL 回合:这一回合包括编写类似标准脸书 ETL 代码的 SQL 和 python/java 代码。
- 建模回合:这一回合混合了 SQL 和 Python,问题涉及基于业务场景的数据模型问题
- 行为:这次面试评估候选人的沟通技巧,以及他们传达自己想法和观点的能力。努力准备你自己的故事,例如,一个关于你如何在一个项目中取得成功的故事,或者关于你处理一次重大失败的故事,或者关于你如何克服一个项目中的特殊挑战的故事。
注意:在疫情时代之前,这种采访是在脸书大楼现场进行的,但由于疫情,每次采访都是在网上进行的。
注意事项和提示
图片来自 Unsplash
脸书数据工程师面试流程旨在评估候选人利用大数据为增长提供可操作的业务见解的能力。脸书使用标准化的问题来测试候选人对所有脸书产品的数据架构和框架以及关键运营指标的深入了解。
另外,请记住,脸书在他们所有的面试过程中都使用标准化的问题,尤其是编码面试。试着一边回答问题一边解释自己的思维过程;向面试官清楚地表达你是如何以及为什么使用你所用的方法。
脸书数据工程师面试涵盖了数据科学领域的长度和宽度,包括建模、可视化、系统设计和从数据工程角度的端到端解决方案。问题可以跨越:
- 数据结构和算法
- 编写 SQL 查询来解决现实世界的问题
- 数据库性能调优
- 数据管道设计
- 业务案例的度量和可视化解决方案设计
- 统计和建模
- 以前的项目经验
- Spark、EMR 等大数据解决方案
- Tableau、Excel 等报告工具
- 为假设的或现有的脸书产品构建数据平台或架构。
练习大量 SQL、Python/Java、建模和算法问题,包括列表、数组(字符串和子字符串)、点积、连接、子查询、聚合函数和分组依据。尝试在白板上编码,熟悉现场面试体验。
想了解更多关于数据工程师的信息吗?查看我们的 数据工程师面试问题指南 。
脸书数据工程师面试问题
- 给定一个整数数组,我们想确定这个数组是否是单调的(非减/非增)。
示例:
1 2 5 5 8->正确
9 4 4 2 2->正确
1 4 6 3->假
1 1 1 1 1 1->真
- 设计一个仪表板来突出用户行为的某个方面
- 数据库视图是否占用磁盘空间。
- 什么是永无止境的循环?
- SQL 中用于选择非重复项的术语是什么?
- 从数组中给定的一组元素中找出最大数(不使用 max 函数)
- 求数组元素集合的最小绝对差。
- 在提供的 ERD 中为几个表创建 DDL(表和外键)。ERD 至少包含一个多对多关系。
- 递归解析一个字符串,其长度可以是 1 或 2 个字符。
- 仅使用 SQL 执行合并排序。
- 如果被授予“使其工作”的全部权限,将带有副本的大型数据集导入到仓库中,同时满足商业智能设计者对查询速度的要求。
- 查询多对多关系,同时不违反事实表的粒度。
- 给定一个数字和一个数组,找出列表中任意两个数字之和等于给定的数字。
- 设计一个实验来测试一个特性是否能激发对话。
- 描述你的项目。
- 给定一个原始数据表,您将如何编写 SQL 来执行 ETL 以将数据转换成所需的格式?
- 如何评价在线视频的受欢迎程度?
- 给定一个 IP 地址作为输入字符串,验证它并返回 True/False
- 计算图中每个节点的邻居。输入图是一个多维列表
- 给定电影观看时间的元组列表,找出观众观看了电影的多少分钟,例如[(0,15),(10,25)]。观众看了 25 分钟的电影。
- 如何删除列表中的重复项?
- 给定一个多步骤产品特性,编写 SQL 来看看这个特性做得有多好(加载时间,步骤完成%)。然后使用 Python 随着新值的流入不断更新平均步骤时间,因为要在内存中存储的值太多了
- 如何连接两个表,而左边的表中的所有信息都保持不变?
- 如果你想把一个表和两个表连接起来,左边一个和右边一个匹配,你会用什么运算符?
- SQL 中的 ORDER BY 命令如果没有设置的话会自动设置成什么格式?上升还是下降?
- 当你想在数据库中删除或添加一列时,你会使用什么命令?
- 你有一个二维的朋友数组,比如[[A,B],[A,C],[B,D],[B,C],[R,M],[S],[P],[A]]
- 写一个函数,创建一个字典,记录每个人有多少朋友。人可以有 0 到很多朋友。然而,不会有类似[A,B]和[B,A]的重复关系,也不会有超过两个人处于一段关系中
感谢阅读
- 如果你有兴趣提高你的数据科学技能,请查看 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
原载于 2020 年 8 月 31 日 https://www.interviewquery.com。
陌生回归算法家族
介绍一些隐藏的回归方法
简单的线性回归和逻辑回归通常是人们在机器学习旅程中学习的第一个算法。由于它们的流行,许多初学者甚至认为它们是唯一的回归形式。然而,有无数的回归算法可以用来建立 ML 模型。
在本文中,我们将讨论一些常用的回归算法,即多项式回归,逐步回归,套索回归,岭回归和弹性网回归。
多项式回归算法
如果自变量的幂大于 1,则回归方程是多项式回归方程。当线性回归线不能恰当地拟合数据时,即模型欠拟合或过拟合数据时,使用多项式回归。
图片来自 Adafruit 博客
为了避免这种情况,我们需要增加模型的复杂性。为了生成高阶方程,我们可以添加原始特征的幂作为新特征。多项式回归算法的形式为:
在这种回归技术中,最佳拟合线不是直线。而是一条符合数据点的曲线。这条曲线是二次曲线,比直线更适合数据。
逐步回归算法
逐步回归是一种拟合回归模型的方法,其中预测变量的选择是通过自动程序进行的。在每一步中,基于一些预先指定的标准,考虑将一个变量添加到解释变量集或从解释变量集中减去,并查看哪一个具有最低的 p 值。
图片来自科学指导
这里,p 值或概率值是在假设零假设正确的情况下,获得至少与测试期间实际观察到的结果一样极端的测试结果的概率。
这种建模技术的目的是用最少数量的预测变量最大化预测能力。
Lasso 回归算法
Lasso(最小绝对收缩和选择运算符)是一种回归分析方法,它执行变量选择和正则化,以提高其生成的统计模型的预测精度和可解释性。
图片由 Saptashwa Bhattacharyya 从走向数据科学
与岭回归不同,套索回归将系数缩小为零(正好为零),这无疑有助于特征选择。该算法在数学上表示为:
这也是一种正则化方法,使用 l1 正则化。套索回归的假设与最小二乘回归相同,只是不假设正态性。
岭回归算法
数据分析师在建立回归模型时面临的最大问题之一是数据存在多重共线性。多重共线性是独立变量高度相关时出现的情况。当我们对数据应用岭回归时,就是这种情况。
岭回归算法背后的主要思想是找到一条也不符合训练数据的新直线。换句话说,我们引入了一个小偏差,使新的线与数据相适应。这是一种缩小系数值并使用 l2 正则化的正则化方法。
其中,β是系数,λ是收缩参数。岭回归通过收缩参数λ解决了多重共线性问题。该算法的等式如下所示:
ElasticNet 回归算法
ElasticNe 回归是一种正则化的回归方法,它线性地结合了套索法和岭法的 L1 和 L2 罚函数。当有多个相关的特征时,弹性网是有用的。
图片来自I2 教程
在变量高度相关的情况下,ElasticNet 回归鼓励群体效应。除了设置和选择λ值,弹性网还允许我们调整 alpha 参数,其中𝞪 = 0 对应于山脊,𝞪 = 1 对应于套索。这些回归技术的应用应该考虑到数据的条件。
就这样,我们来到了本文的结尾。我希望这能帮助你对不同的回归算法有一个直觉。我们将在后面的文章中研究这些算法。如果你有任何问题,或者如果你认为我有任何错误,请联系我!您可以通过邮箱或 LinkedIn 与我联系。
神经网络优化的迷人的无梯度方法
由作者创建。
忘记亚当,阿达格勒,SGD
梯度下降是机器学习中最重要的思想之一:给定一些要最小化的成本函数,算法迭代地采取最大向下斜率的步骤,理论上在足够次数的迭代后到达最小值。梯度下降法由柯西在 1847 年首次发现,但在 1944 年 Haskell Curry 对非线性优化问题进行了扩展,它已被用于各种算法,从线性回归到深度神经网络。
虽然梯度下降及其以反向传播形式的再利用是机器学习中最大的突破之一,但神经网络的优化仍然是一个未解决的问题。互联网上的许多人甚至愿意宣称“梯度下降很糟糕”,虽然这可能有点远,但梯度下降确实有很多问题。
- 优化者会陷入足够深的局部极小值。不可否认,有时有聪明的解决方案可以避开这些问题,比如动量,它可以把优化者带到大山丘上;随机梯度下降;或者批量标准化,平滑误差空间。然而,局部最小值仍然是神经网络中许多分支问题的根源。
由作者创建
- 因为优化器如此受局部极小值的诱惑,即使它设法摆脱它,也需要非常非常长的时间。梯度下降法通常是一种冗长的方法,因为它的收敛速度很慢,即使是对大数据集进行调整,如批量梯度下降法。
- 梯度下降对优化器的初始化特别敏感。例如,如果优化器在第二个局部最小值附近而不是第一个局部最小值附近初始化,性能可能会好得多,但这都是随机确定的。
- 学习率决定了优化器的信心和风险;设置太高的学习率可能会导致它忽略全局最小值,而太低的学习率会导致运行时崩溃。为了解决这个问题,学习率随着衰减而发展,但是在决定学习率的许多其他变量中,选择衰减率是困难的。
- 梯度下降需要梯度,这意味着除了不能处理不可微函数之外,它还容易出现基于梯度的问题,如消失或爆炸梯度问题。
当然,梯度下降已经得到了广泛的研究,并且有许多提议的解决方案——一些是 GD 变体,另一些是基于网络架构的——在某些情况下有效。仅仅因为梯度下降被高估了,并不意味着它不是目前最好的解决方案。使用批处理规范化来平滑错误空间或选择 Adam 或 Adagrad 这样复杂的优化器等常见知识不是本文的重点,即使它们通常性能更好。
相反,本文的目的是揭示一些更模糊和确定有趣的优化方法,这些方法不符合基于梯度的标准,就像任何其他用于提高神经网络性能的技术一样,在某些情况下工作得非常好,而在其他情况下则不太好。然而,不管它们在特定任务中表现如何,它们都是迷人的、有创造力的,并且是机器学习未来的一个有前途的研究领域。
粒子群优化是一种基于群体的方法,定义了一组探索搜索空间的“粒子”,试图找到一个最小值。粒子群优化算法迭代地改进了某一质量指标的候选解。它通过拥有一群潜在的解决方案(“粒子”)并根据简单的数学规则(如粒子的位置和速度)移动它们来解决问题。每个粒子的运动受其认为最佳的局部位置的影响,但也会被搜索位置中的最佳已知位置(由其他粒子发现)所吸引。从理论上讲,群体会经过几次迭代来寻找最佳解决方案。
来源:维基媒体。图片免费分享。
粒子群算法是一个迷人的想法——它对初始化的敏感度远低于神经网络,粒子之间在某些发现上的交流可能被证明是一种非常有效的搜索稀疏和大面积区域的方法。
因为粒子群优化不是基于梯度的(喘气!),它不要求优化问题是可微的;因此,使用 PSO 来优化神经网络或任何其他算法将允许在选择激活函数或其他算法中的等效角色时具有更大的自由度和更小的敏感性。此外,它对要优化的问题几乎不做任何假设,并且可以搜索非常大的空间。
可以想象,基于群体的方法在计算上比基于梯度的优化器要昂贵得多,但不一定如此。因为这种算法是如此的开放和非刚性——就像基于进化的算法一样,人们可以控制粒子的数量、它们移动的速度、全球共享的信息量等等;就像在神经网络中调整学习速率一样。
代理优化是一种优化方法,试图用另一个成熟的函数来模拟损失函数,以找到最小值。该技术从损失函数中采样“数据点”,这意味着它尝试不同的参数值( x )并存储损失函数的值( y )。在收集了足够数量的数据点之后,对收集的数据拟合一个替代函数(在这种情况下是一个 7 次多项式)。
由作者创建。
因为寻找多项式的最小值是一个非常好研究的课题,并且存在大量非常有效的使用导数来寻找多项式的全局最小值的方法,所以我们可以假设替代函数的全局最小值对于损失函数是相同的。
代理优化在技术上是非迭代方法,尽管代理函数的训练通常是迭代的;此外,从技术上讲,它是一种无梯度方法,尽管寻找模型函数全局最小值的有效数学方法通常是基于导数的。然而,因为迭代和基于梯度的属性都是代理优化的“次要”属性,所以它可以处理大数据和不可微的优化问题。
使用代理函数进行优化在几个方面非常聪明:
- 它本质上是平滑真实损失函数的表面,这减少了导致神经网络中如此多的额外训练时间的锯齿状局部最小值。
- 它将一个困难的问题投射到一个容易得多的问题上:无论是多项式、RBF、GP、MARS 还是另一个代理模型,寻找全局最小值的任务都得到了数学知识的支持。
- 过度拟合代理模型并不是一个真正的问题,因为即使有相当多的过度拟合,代理函数仍然比真正的损失函数更平滑,锯齿更少。随着许多其他标准的考虑,在建立数学上更倾向于简化的模型时,训练代理模型因此更容易。
- 代理优化不受当前位置视图的限制,因为它看到了“整个函数”,与梯度下降相反,梯度下降必须不断做出冒险的选择,即它是否认为在下一个山坡上会有更深的最小值。
代理优化几乎总是比梯度下降法更快,但往往是以精度为代价的。使用代理优化可能只能精确定位全局最小值的粗略位置,但这仍然非常有益。
另一种选择是混合模式;使用代理优化将神经网络参数带到粗略位置,从该位置可以使用梯度下降来找到精确的全局最小值。另一种方法是使用代理模型来指导优化器的决策,因为代理函数可以 a)“预见未来”, b)对损失函数的特定起伏不太敏感。
模拟退火是一个基于冶金学中退火的概念,可以将材料加热到再结晶温度以上,以降低其硬度,改变其他物理和偶尔的化学性质,然后让材料逐渐冷却并再次变得坚硬。
使用缓慢冷却的概念,模拟退火随着解空间的探索而缓慢降低接受更差解的概率。因为接受更差的解决方案允许对全局最小值进行更广泛的搜索(想一想——越过小山到达更深的山谷),所以模拟退火假设在第一次迭代中正确地表示和探索了各种可能性。随着时间的推移,算法从探索走向开发。
以下是模拟退火算法如何工作的粗略概述:
- 温度设定在某个初始正值,并逐渐接近零。
- 在每个时间步,算法随机选择一个接近当前解的解,测量其质量,并根据当前温度(接受更好或更差解的概率)移动到当前解。
- 理想情况下,当温度达到零度时,算法已经收敛到全局最小解。
可以用动力学方程或随机取样方法进行模拟。模拟退火被用于解决旅行推销员问题,该问题试图找到由数据点表示的数百个位置之间的最短距离。显然,组合是无穷无尽的,但是模拟退火——带着强化学习的回忆——表现得非常好。
旅行商问题的模拟退火解法。来源:维基媒体。图片免费分享。
模拟退火在短时间内需要近似解的情况下表现特别好,优于缓慢的梯度下降。像代理优化一样,它可以用于混合梯度下降,以获得两者的好处:模拟退火的速度和梯度下降的精度。
这是无梯度方法的一个小样本;还有许多其他算法,如模式搜索和多目标优化有待探索。像粒子群优化这样的基于遗传和种群的算法对于创造真正“智能”的智能体来说是非常有前途的,因为我们人类就是它成功的证据。
最优化的非梯度方法是迷人的,因为它们中的许多利用了创造性,而不受梯度的数学链的限制。没有人指望无梯度方法会成为主流,因为即使考虑到它的许多问题,基于梯度的优化也表现得如此之好。然而,利用混合优化器来利用无梯度和基于梯度的方法的能力展示了极高的潜力,尤其是在我们即将达到计算极限的时代。
[## 有人称之为天才,有人称之为愚蠢:有史以来最有争议的神经网络
极限学习机
towardsdatascience.com](/some-call-it-genius-others-call-it-stupid-the-most-controversial-neural-network-ever-created-2224ed22795a) [## 你没有正确测量新冠肺炎
度量问题
towardsdatascience.com](/youre-not-measuring-covid-19-correctly-80398c251a1)
人工智能和神经科学之间的迷人关系
他们如何相互激励、共同进步、相互受益
有了这么多的利害关系,神经科学和人工智能领域走到一起的需求现在比以往任何时候都更加迫切。— DeepMind
在本文中,我们将从两个方面探讨这个话题。神经科学如何启发 AI,AI 如何推进神经科学。
神经科学如何启发人工智能
神经科学在人工智能的历史中发挥了关键作用。它一直是构建类人人工智能的灵感来源。神经科学启发我们设计人工智能系统有两种方式。一是模仿人类智能,二是建立模仿大脑结构的神经网络。
模拟人类智能的人工智能系统。
最近的人工智能进步通过表演令人印象深刻的壮举席卷了媒体,例如:
这些机器可以比我们更好地执行任务和解决问题,实现媲美甚至超过人类能力的性能。无论这些看起来多么令人印象深刻,它们只是被设计来超越它们的预期功能。我们距离建立人工智能还有几十年的时间。
尽管这些人工智能系统具有生物学灵感和性能成就,但它们在关键方面不同于人类智能。对于像人一样学习或思考的机器来说,它需要能够:
- 解释和理解问题
- 为获取知识而学习
- 概括新任务和新情况的知识
在 KAIST 的研究中,研究人员为人类元强化学习开发了一种计算和神经机制。作为人类,当我们做决定时,我们可以适应复杂性和不确定性。
研究人员的目标是建立能够像我们一样做决定的模型,并以与人类相同的方式解决问题。他们的发现揭示了一种可能性,即技术进步可能会导致制造更像人类的机器。
建造具有真正像人类一样的学习能力和认知能力的机器是一个持续的追求,这些机器可以像我们一样学习和思考。例如,即使我们蒙住眼睛,我们仍然可能弹得很好。但是对于一个人工智能系统来说,在一个新的环境中弹吉他(即“眼睛”被遮住),它可能做得不好。
构建模仿大脑结构的神经网络。
我们借鉴了人类大脑结构的灵感来设计我们今天所知道的神经网络。神经网络中神经元的想法与大脑中的生物神经元具有相似的特征。
人类大脑包含大约 860 亿个神经元,每个神经元都与其他神经元相互连接。生物神经元是细胞:当一个细胞被激活时,它会产生一个尖峰信号,并向其他神经元发送信号。
与人脑一样,机器学习神经网络也由相互连接的神经元组成。当一个神经元接收到输入时,它被激活并向其他神经元发送信息。
人工神经元是一种数学函数,被认为是生物神经元的模型
我们大脑的可塑性允许我们学习和提高技能。每次我们学习新的东西,我们都在创造和加强神经元之间的联系。这就是为什么当我们练习一项任务时,我们会做得更好。
类似地,当我们向神经网络输入大量数据时,它就会学习。神经网络上的每个连接都与一个权重相关联,该权重决定了神经元之间的重要性。在训练过程中,相应地调整权重,以加强或削弱神经元之间的连接。
例如,当我们看到一只猫的图片时,我们知道它是一只猫,因为我们在生活中已经看到了足够多的猫。同样,如果我们为我们的神经网络提供足够多的猫图像,它将开始识别猫。
娜塔莉·朱莉在 Unsplash 上的照片
在了解了神经科学如何启发 AI 模仿人类智能并构建模仿大脑结构的神经网络之后;我们将探索人工智能如何反过来推进神经科学。
人工智能如何推进神经科学
人工智能正迅速成为神经科学中一个无价的工具。它有助于我们理解人脑是如何工作的,并加速神经科学的发展。
人工智能帮助我们理解我们的大脑是如何工作的。
神经科学家正在研究人类大脑如何处理思想,以及它如何移动我们的身体。通过更多地了解大脑,我们能够更好地诊断精神疾病和使残疾人提高运动能力。
人工智能系统的进步可以帮助推动神经科学向前发展,并解开大脑的秘密。它允许神经科学家和研究人员建立更好的模型来模拟人脑。
神经网络就像“虚拟大脑”一样,捕捉我们大脑的表现。这些虚拟大脑可以产生类似于大脑记录模式的神经活动模式。这些模式允许神经科学家在投入更多资源对动物和人类进行实际测试之前,测试假设并观察模拟结果。
然而,人工智能系统的工作方式与我们的大脑有很大不同。神经网络只是大脑工作方式的粗略模拟,它将神经元建模为高维矩阵中的数字。但事实上,我们的大脑是一个复杂的生物机器,使用化学和电活动。这使我们不同于机器。
米兰·波波维奇在 Unsplash 上的照片
人工智能加速神经科学的发展和发现。
机器学习的主要优势在于能够识别复杂数据中的模式。在分析人类思维时,复杂性尤其如此。大脑发出的信号非常复杂。随着机器学习的进步,神经科学家正在破解数十亿大脑神经元如何协同工作的秘密。
功能磁共振成像通过检测血流的变化来测量我们大脑的活动。它每秒钟都会生成大脑活动的高维快照。使用机器学习来分析数据有助于揭示大脑活动的模式,从而加快研究工作。
机器学习还帮助我们开发以前认为不可能的应用程序。高丽大学设计了一个控制下肢外骨骼的实验环境。用户可以通过盯着闪烁的灯光来集中注意力,从而控制外骨骼。
由Farsai chaikungamdee在 Unsplash 上拍摄的照片
神经科学和人工智能
人脑是构建类人人工智能的最重要灵感。人工智能研究人员使用神经科学的想法来建立新的算法。
另一方面,人工智能加速了神经科学的研究。神经科学家从人工智能体的行为中学习来解释我们的大脑。
自然地,这两个学科结合在一起,并将继续基于彼此的见解。
我对神经科学和人工智能之间的这种合作关系的未来持乐观态度。
我们敦促神经科学和人工智能领域的研究人员找到一种共同语言,允许知识自由流动,从而在这两个领域取得持续进展。— DeepMind
推动该领域发展的现状和挑战
towardsdatascience.com](/deep-learning-in-brain-computer-interface-f650d00268d0) [## 用机器学习和神经科学解码大脑信号
成为 X 教授,解开我们心灵的秘密
towardsdatascience.com](/decoding-brain-signals-with-machine-learning-and-neuroscience-bee288c1d585)
决策委员会的迷人科学和艺术
增强业务情景意识的关键
宇航员艾伦·b·谢泼德在他的控制台上监控航天飞机的发射
内容
1.序言
这篇文章包含了我从为几家美国财富 50 强公司设计决策板(又名仪表板)的经历中提炼出来的见解。有效的决策委员会是建立对手头业务的控制和加强决策过程的基础。这件作品融合了心灵和实践智慧,旨在让你着迷于仪表板的世界,如果你碰巧在工作中设计了它,它会给你带来成功。
2.从一开始:决策委员会的哲学和目的
企业的存在是为了盈利。他们通过销售产品、服务或经验来实现。决策板通过直观地显示最重要的指标来评估企业或其某个方面的健康状况,从而帮助监控企业的绩效。并帮助所有者更快地做出明智的决定。
可以把决策板想象成现实的缩影,KPI 量化了业务的某个方面或目标。这些 KPI 被排列成一个简洁的压缩视图,以便企业所有者可以快速浏览它,并了解企业的运营情况。
它在商界是如何发展的
企业民间传说,2001 年安然(Enron)丑闻使仪表板成为首席执行官安抚股东的一种方式,也是将责任分配给层级的一种方式。自 1960 年以来,决策委员会在商业中一直占有一席之地。随着技术的民主化,下一个颠覆性的想法总是潜伏在角落里,保持竞争力和相关性的需求已经达到顶峰。今天的业务和产品所有者必须拥有设计良好且强大的测量系统,以了解他们的实际情况并观察历史业务决策的效果。
这个术语是从物理世界改编而来的。汽车中的“仪表板”是显示重要车辆信息的仪表和仪器,这使得驾驶汽车更加方便( Image source )
复杂的光谱
决策委员会中度量标准的复杂性取决于组织的分析成熟度。让我们以迪士尼主题公园的业务为例,来理解度量复杂性的变化。
1980 年的迪士尼世界地图(来源)
一个设计良好的决策板最大限度地简化了监控过程,并且清晰地显示出描述性指标(“发生了什么”)。例如,对于迪士尼主题公园,这可能是上个月产生的总利润。
在分析成熟的环境中,它们还提供附加价值,这也需要更高的资源和时间投入:
- 诊断指标(“为什么会发生某些事情”):这可以通过影响超指标的子指标的可用性来实现,有时也可以通过决策板上直观的指标排列来实现,这样可以方便地进行导航和根本原因分析。例如,如果上个月收入急剧下降,应该有一个直观的流程来调查收入下降的原因。也许可以通过一层指标来显示不同细分市场产生的收入,如门票、食品和饮料以及商品支出。
- 预测指标(“未来可能发生的事情”):管理层喜欢预测和预报,因为它们允许对人员配备和预算等资源进行早期规划。例如,主题公园在接下来的两个月中预计会产生多少收入。
- 规范性指标(“应该采取什么业务行动?”):这是最复杂的。它建议采取最佳行动,以最大化战略相关指标(如利润或运营效率)或最小化风险(财务)。它包括构建一个优化层,这个优化层有一些用户控制的杠杆,可以根据需求调整推荐。这就是我们看到人工智能产生巨大影响的地方。例如,如何优化商场各个部门的人员配置,以最大限度地提高利润或减少等待时间?
3.工艺:设计和开发过程
在创建决策板时,有两个重要的考虑因素会影响度量标准的选择和布局:为其设计决策板的目标人物角色,以及在决策板内建立度量标准的流程。
3A。通过反复测试和学习的心态,探索对目标受众有意义的解决方案
每个决策板最终都是针对目标受众的。因此,将这些目标人物角色和他们的商业目标放在设计过程的中心是很重要的。重要的是要弄清楚:
- 现有报告框架 目标用户现在是否已经有了一些指标和报告
- 决策委员会的业务准备情况 如果需要,目标用户是否参与并愿意改变他们的流程?
- 仪表板体验 要求的主要愿景,与领导层如何设置和衡量职能层级保持一致。仪表板应该反映他们决策过程的心智模型
- 观众的审美感受力,以及组织设计基准 你希望你的最终产品是使用它的人的自然延伸
- 组织数据系统及其如何建模和捕获业务实体和交易 例如,他们可能将 SAP 用于 ERP,将其他软件用于 HR,将另一个软件包用于制造运营等。你的专业知识和建议应该与现有的技术相融合
虽然与目标受众保持一致将允许更快的迭代,但是我们也需要一些构造来形式化和循环迭代。 设计思维 是一种流行的使能方法。它所基于的原则源于工程、架构和软件设计中的最佳实践。我们可以借鉴设计思维原则,建立决策板创作的执行框架。 设计-开发-评审 的阶段可以持续几周或几个月(取决于所创建的仪表板套件),以获得成功的结果。
设计思维讲解| ~4 分钟|https://www.youtube.com/watch?v=_r0VX-aU_T8
执行框架
3B。在决策委员会内建立一个度量流程
这种指标的金字塔分类可以直接转化为决策板的模型或 UI 设计
4.培育:保持长期相关性
竞争优势不再在于分析的创造,而在于分析的消费——迪拉杰·拉贾拉姆(穆·适马创始人)
一个持久的设计永远不会完美。任何持久的解决方案都需要有人足够关心它,让它与时俱进。以下是一些有帮助的想法:
保持最终决策委员会的相关性是几个因素的平衡
4A。营销发布井
- 这有助于在发布期间制造轰动效应。最好是在月度全体会议上宣布,或者以高级领导的电子邮件形式宣布。
- 决策板的价值应该清晰地表达出来,以及它与以前的解决方案相比有多好。
4B。决策板是否易于理解和使用?
- 开发团队应制作用户手册、培训视频或演示决策板——强调其功能、使用方法、如何适应现有的决策板产品组合,以及从中获得的见解如何转化为业务行动。
- 为了发挥作用,决策板还需要透明地集成到用户的日常流程和操作中。如果一个人必须去找到它或采取额外的步骤/行动来访问它,它将被视为额外的工作,很可能不会被使用。检查决策板在智能手机和平板电脑等设备上是否也能正常显示。
- 让业务用户将决策板作为日常决策的一部分可能需要额外的努力。最初,他们可能需要在综合决策委员会的见解后得到现成的建议,以使他们看到其价值和影响。
4C。衡量使用情况
- 在创作结束后,了解决策层的消费模式也同样重要。开发团队应该跟踪每周/每月的决策板总浏览量、独立用户的数量以及访问决策板的新用户的数量。
- 如果消费下降,人们可能需要更深入地了解为什么它没有找到牵引力——通常是通过与企业用户交谈或做一个简单的在线调查。
4D。捕捉反馈
- 业务战略会随着时间的推移而变化,决策层需要适应以保持相关性。应该有某种机制让业务用户分享他们希望在决策板上看到的改进、新特性或变化。如果可能的话,在决策板上放一个大的“分享反馈”按钮。
- 建议的特性目录通常被标记为产品或变更待定项,并根据优先级和紧急程度定期进行评估以纳入决策层。
4E。建立投资组合时保持一致性
- 对于商业受众来说,视觉一致性是关键。他们实际上使用决策板的组合来运行他们的业务和视觉布局的相似性
- 为单个仪表板设置一套设计模板也将使跨决策层的认知移动变得容易。例如,顶部窗格显示战略绩效指标,随后是显示该指标或子指标随时间变化的趋势视图,最后是底部的表格级详细信息)
5.结语:大规模生产决策板的流水线
为了保持简洁,因为读者已经习惯了媒体,这将在后续文章中解决。目的是提供一个结构和设计元素的概述和例子,可以帮助你设计大规模的决策板。并在期望(运营与战略目标受众)、敏捷团队中的并行设计和开发,以及设置保持一致性的指导方针方面取得成功。再见
通往科技世界的最快职业道路
以下是你应该知道的
亚历山大·米洛在 Unsplash 上拍摄的照片
进入科技世界最快的职业道路是什么?
我选择编码,因为我知道我可以构建真实世界的项目,把它发布给人们使用,并解决他们的问题。
为了实现这一点,我需要最快的职业道路来打入技术世界。我看了 Youtube 视频,读了关于我可以选择的职业道路的文章。“成为数据分析师”随处可见。
这些视频和文章大多建议数据分析师的职业道路。当你走这条路的时候,你很容易进入科技世界;你可以在几个月内学会 SQL、Excel 和 Python——Pandas、NumPy、matplotlib。
确实如此。几个月内学会了 SQL,Excel,Python 库,但是有一个问题。
现实是——通往科技世界的最快职业道路不是一条或两条。这取决于你在哪里,你的技能或技能类型,以及…..运气。
你的技能
技术世界是一个开放的地方。它不歧视也不限制你对人们生活的影响。你只需要掌握必要的技能,就可以把世界画成你想要的任何颜色。
你不应该被最快的职业道路冲昏头脑。专注于你的技能并擅长它。当你有解决问题的技能时,你就准备好了。
在未来的许多年里,将会有技术职位空缺。截至去年,美国有 70 万IT 岗位空缺。你知道为什么吗?在那里很难找到熟练的工人。
你的环境
你住在哪里,在很大程度上决定了你在科技领域找到工作的速度。发达国家有双重优势。你可以决定为别人工作——有空缺——或者为自己工作。那些是捷径。
如果你不是生活在一个科技还不发达的环境里呢?
然后,你必须对你获得的技术技能进行选择——如果你真的想快速进入技术领域。以此为生是你的首要任务。抛开激情不谈。当然,激情就是一切。
科技创业公司和组织正在发展中国家兴起。所以技术工作很少。你应该注意你所获得的技能。获得一项能让你成为帝国之主的技能。科技技能可以让你自己创造出对人们有用的酷东西。
以数据分析师技能为例。数据可能就是一切。对于一个生活在数据分析师需求不高的地方的人来说,很难快速找到工作或成为老板并生存下来。数据分析师并不总是独自工作。他们需要支持和平台来让他们的工作产生影响。
经过数小时、数天、数月的搜索,我注意到公司招聘栏上的大多数数据分析师职位都是高级数据分析师。我很难得到我想要的数据分析师的职位。
你想让我给你成功的公式吗?很简单,真的。加倍你的失败率…你认为失败是成功的敌人。但事实并非如此……你可以因失败而气馁,也可以从中吸取教训。所以继续犯错吧。尽你所能。因为,记住,那是你找到成功的地方。失败的另一面。— 老托马斯·J·沃森
就在这个时候,我重新考虑改变我的技术堆栈。我找了一个站长实习生的角色;我欣然申请,并挑选。在这一点上,我看到了严酷的现实——你住在哪里很重要。我仍然很幸运,得到了那个实习生的角色。
运气
你对运气的定义是什么?
我目前写的都是事情的真实情况。运气可以改变这一切。你可以去任何地方,获得任何技术技能,快速找到工作。它发生了。但是准备好让幸运之母向你微笑吧。你的准备就是你的技能。
我名下已经有了一些项目;这为我被选为实习生铺平了道路。这是一个机会遇到准备的例子。
结论
在科技世界里,没有一条最快的职业道路。这取决于你在哪里,你的技能,或者你拥有的技能类型。
做好你的工作。
在你所在的地方获得一项技能。
运气是一切的颠覆者。
感谢您的阅读。
fastML 指南
作为一名数据科学家、人工智能或 ML 工程师,速度是从事一个项目的基本要素。fastML 为您提供了速度和灵活性,让您可以针对多种算法测试您的模型。
FastML 标志由 Divine Kofi Alorvor
数据科学家、人工智能和机器学习工程师的工作很大程度上围绕着许多不同算法的使用,这些算法使我们的工作变得更容易和相对更快。然而,我们经常发现,为特定的用例选择特定的算法是相当困难的,因为有许多算法可以同等地执行我们需要执行的任务。
fastML 是一个 python 包,它允许您使用自己喜欢的测试大小来测试和训练已处理的数据,并使用很少几行代码对准备好的数据运行多种分类算法。这使您可以观察您决定运行的所有算法的行为,以确定哪些算法最适合您的数据,以便使用您选择的算法进行进一步开发。这也为您节省了在不使用 fastML 的情况下手动编写近 300 行代码的压力。
入门指南
fastML 发布到pypi,这使得使用 python 包安装程序 pip 在本地安装变得容易。要安装 FastML 进行本地开发,请确保您已经安装了 python 和 pip 并将其添加到 path 中。如果你需要帮助,你可以在这里查看 Python 文档。****
要安装 fastML,请打开您的终端(Linux/mac)或命令提示符(windows)并输入命令:
**pip install fastML**
使用 fastML
在本指南中,我将通过一个流行的 Iris 数据集的例子来教你如何在你的项目中使用 fastML 包。在处理任何项目时,要做的第一件事就是导入项目所需的库和包。
**##importing needed libraries and packages including fastMLfrom fastML import fastML
from sklearn import datasets**
现在要做的下一件事是将 Iris 数据集加载到我们的项目中以供使用。
**##loading the Iris datasetdf = datasets.load_iris()**
由于虹膜数据集已经进行了预处理,因此没有必要再次处理我们的数据。但是,对于您将在自己的项目中使用的数据,您必须确保数据经过良好的处理,以避免在项目中遇到错误和不希望的输出。
现在要做的下一件事是准备用于训练和测试的数据,并将所需的数据列指定为特性和目标列。
**##assigning the desired columns to X and Y in preparation for running fastMLX = df.data[:, :4]
Y = df.target**
根据您拥有的数据类型,您的目标数据可能最需要编码。对你的目标数据进行编码是很好的,因为它选取了可以解释目标数据的值,并帮助机器学习算法理解目标数据到底是什么。使用 fastML python 包对目标数据进行编码也非常容易。
**##importing the encoding function from the fastML package and running the EncodeCategorical function from fastML to handle the process of categorial encodingfrom fastML import EncodeCategorical
Y = EncodeCategorical(Y)**
接下来,我们将所需的 test_size 值赋给变量“size”。
**size = 0.3**
最后要做的事情是了解我们想要用来测试数据的所有算法,并将它们全部导入到我们的项目中。fastML 附带了一个用 keras 构建的准备好的神经网络分类器,用于深度学习分类。您可以将包括神经网络分类器在内的所有算法导入到您的项目中。例如:
**##importing the desired algorithms into our projectfrom sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC##importing the neural net classifier from fastMLfrom nnclassifier import neuralnet**
最后,我们运行主要的 fastML 函数。该功能具有灵活性,允许您自由调整任何单个算法的超参数。
**## running the fastML function from fastML to run multiple classification algorithms on the given datafastML(X, Y, size, SVC(), RandomForestClassifier(), DecisionTreeClassifier(), KNeighborsClassifier(), LogisticRegression(max_iter = 7000), special_classifier_epochs=200,special_classifier_nature ='fixed', include_special_classifier = True)**
下面是运行主 fastML 函数后的类似输出:
**Using TensorFlow backend.
__ _ __ __ _
/ _| | | | \/ | |
| |_ __ _ ___| |_| \ / | |
| _/ _` / __| __| |\/| | |
| || (_| \__ \ |_| | | | |____
|_| \__,_|___/\__|_| |_|______|
____________________________________________________
____________________________________________________
Accuracy Score for SVC is
0.9811320754716981
Confusion Matrix for SVC is
[[16 0 0]
[ 0 20 1]
[ 0 0 16]]
Classification Report for SVC is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 1.00 0.95 0.98 21
2 0.94 1.00 0.97 16
accuracy 0.98 53
macro avg 0.98 0.98 0.98 53
weighted avg 0.98 0.98 0.98 53
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Accuracy Score for RandomForestClassifier is
0.9622641509433962
Confusion Matrix for RandomForestClassifier is
[[16 0 0]
[ 0 20 1]
[ 0 1 15]]
Classification Report for RandomForestClassifier is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 0.95 0.95 0.95 21
2 0.94 0.94 0.94 16
accuracy 0.96 53
macro avg 0.96 0.96 0.96 53
weighted avg 0.96 0.96 0.96 53
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Accuracy Score for DecisionTreeClassifier is
0.9622641509433962
Confusion Matrix for DecisionTreeClassifier is
[[16 0 0]
[ 0 20 1]
[ 0 1 15]]
Classification Report for DecisionTreeClassifier is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 0.95 0.95 0.95 21
2 0.94 0.94 0.94 16
accuracy 0.96 53
macro avg 0.96 0.96 0.96 53
weighted avg 0.96 0.96 0.96 53
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Accuracy Score for KNeighborsClassifier is
0.9811320754716981
Confusion Matrix for KNeighborsClassifier is
[[16 0 0]
[ 0 20 1]
[ 0 0 16]]
Classification Report for KNeighborsClassifier is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 1.00 0.95 0.98 21
2 0.94 1.00 0.97 16
accuracy 0.98 53
macro avg 0.98 0.98 0.98 53
weighted avg 0.98 0.98 0.98 53
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Accuracy Score for LogisticRegression is
0.9811320754716981
Confusion Matrix for LogisticRegression is
[[16 0 0]
[ 0 20 1]
[ 0 0 16]]
Classification Report for LogisticRegression is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 1.00 0.95 0.98 21
2 0.94 1.00 0.97 16
accuracy 0.98 53
macro avg 0.98 0.98 0.98 53
weighted avg 0.98 0.98 0.98 53
____________________________________________________
____________________________________________________
Included special classifier with fixed nature
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 4) 20
_________________________________________________________________
dense_2 (Dense) (None, 16) 80
_________________________________________________________________
dense_3 (Dense) (None, 3) 51
=================================================================
Total params: 151
Trainable params: 151
Non-trainable params: 0
_________________________________________________________________
Train on 97 samples, validate on 53 samples
Epoch 1/200
97/97 [==============================] - 0s 1ms/step - loss: 1.0995 - accuracy: 0.1443 - val_loss: 1.1011 - val_accuracy: 0.3019
97/97 [==============================] - 0s 63us/step - loss: 0.5166 - accuracy: 0.7010 - val_loss: 0.5706 - val_accuracy: 0.6038
Epoch 100/200
97/97 [==============================] - 0s 88us/step - loss: 0.5128 - accuracy: 0.7010 - val_loss: 0.5675 - val_accuracy: 0.6038
Epoch 200/200
97/97 [==============================] - 0s 79us/step - loss: 0.3375 - accuracy: 0.8969 - val_loss: 0.3619 - val_accuracy: 0.9057
97/97 [==============================] - 0s 36us/step
____________________________________________________
____________________________________________________
Accuracy Score for neuralnet is
0.8969072103500366
Confusion Matrix for neuralnet is
[[16 0 0]
[ 0 16 5]
[ 0 0 16]]
Classification Report for neuralnet is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 1.00 0.76 0.86 21
2 0.76 1.00 0.86 16
accuracy 0.91 53
macro avg 0.92 0.92 0.91 53
weighted avg 0.93 0.91 0.91 53
____________________________________________________
____________________________________________________
Model Accuracy
0 SVC 0.9811320754716981
1 RandomForestClassifier 0.9622641509433962
2 DecisionTreeClassifier 0.9622641509433962
3 KNeighborsClassifier 0.9811320754716981
4 LogisticRegression 0.9811320754716981
5 neuralnet 0.8969072103500366**
有了这个输出,我们可以确定什么算法最适合我们的用例,并选择该算法进行进一步的开发和部署。
fastML 是免费开源的,你可以在 Github 上找到源代码和测试文件。当你在使用 fastML 的过程中遇到问题或错误时,我们的贡献者团队可以随时提供帮助。此外,您可以提交您希望我们实施的 bug 或功能更新问题,我们会完成它。检查项目,如果你喜欢这个项目,别忘了留下一颗星。
作为数据科学家,我工作中最喜欢的部分
作为一名数据科学家,我最喜欢的工作是
TLDR:这篇文章的目的不是提供技术知识或见解。下面我讲一个关于选择分层样本、计算样本权重以及在研讨会上与同事分享这些信息的故事。这是一个关于数据科学家如何利用他们的非技术知识帮助他们的公司建立强大的数据文化的故事。
介绍
我对数据科学家报告花费 80%的时间来寻找、清理和组织数据的统计数据毫无理由地着迷,这些数据是由哈佛商业评论分析的一个公认的适度样本得出的。这是一件好事,我不介意寻找,清理和组织数据。对我来说,寻找、清理和组织数据是刺激的一部分。
但是,作为一名数据科学家,我最喜欢的部分比作为一名数据科学家的许多方面更能让我充实。我工作中最喜欢的部分是帮助他人以新的方式联系。我有幸担任一个角色,这个角色往往会得到许多担任其他角色的人的关注。
面对现实吧,作为一名数据科学家会得到别人的关注。我最喜欢的日子是我能够利用这种关注来帮助那些在不同岗位上工作的人们建立联系的日子。这篇文章讲述了其中一天的故事。
有一天
一位同事问我是否愿意和她的团队分享选择和分析样本的步骤。我说当然,然后我们计划了一个自带午餐计划。事实证明,有机会分享和解释我的工作也是我喜欢的角色的一部分。
图片鸣谢:作者插画。当我计划一个与选择样品相关的棕色袋子展示时,我想到了会发生什么。
这也是一件好事,因为分享和解释你作为数据科学家的工作应该是一种常规体验。科学家称分享和解释他们的工作为传播。
因为选择和分析样本是一项相对平凡的任务,所以我对这个特定主题的棕色袋子的要求感到惊讶。参加展示的人会有披萨,所以我们用报名表来确保我们点了足够的披萨。当登记表上写满了整个公司所有运营部门的人员时,我越来越惊讶。技术和非技术同事都对这个话题感兴趣。
这是一个意想不到的机会,可以把除了在全公司会议上通常不会互动的业务领域的同事带来。通过促成这种联系,我既高兴又谦卑。
在这种情况下,选择样本(即加权样本)的步骤并不复杂。从我在数据科学中犯下的一个最糟糕、但相对无害的错误中吸取了教训,我同意讨论这个话题,尽管我认为这个话题别人可能不感兴趣。不管是好是坏,每个人都将听到从人群中选择和分析样本的相关步骤。
设置
当时,我为一个生产广泛使用的软件解决方案的组织工作。它的用户群只有几百万。从许多软件标准来看,这是适度的。
尽管用户基数不大,但从这些用户中选择一个样本进行分析是很重要的。为了选择这个样本,我将我们的用户群划分为与重要的人口统计特征相关联的子群。然后,为了确保我们可以从人口稀少的细分市场中得出关于用户的结论,我对一些细分市场进行了过采样,而对其他细分市场进行了欠采样。后来在分析过程中,我对结果进行了加权,这样我们就可以将这些发现推广到我们的整个用户群。整个公司的员工和同事都要求详细了解这些方法和分析技术。
的日子
技术人员和非技术人员都将出席。有些人已经进入职场好几年了,有些人还在上大学。
重要的是,要向具有广泛背景和不同观点的受众提供有趣且有意义的内容。
作为一名数据科学家,我最喜欢扮演的角色之一就是在这些正式和非正式的场合将观众聚集在一起。尽管我对这个机会充满热情,尽管其他人也对这个机会表现出热情,但我还是有一些挥之不去的疑虑。我很担心。
图片鸣谢:作者插画。我想(或担心)会发生的事情是,我计划了一个与实际发生的事情相比,与选择样本相关的棕色袋子演示。
我想象这个演示会和看米色油漆变干一样有趣。那天会议室里只有站着的地方。
一个轶事,当其他人联系
在演示过程中,我演示了一个计算样品重量的代码块。该代码块类似于:
可用于使用 Python 和 Pandas 数据框计算样本权重的代码示例。
这段代码完成了工作。此外,这段代码已经过优化,便于人们阅读。我需要房间里的每个人都明白,至少在概念层面上,这段代码完成了什么。此外,事实证明,这段代码与我进行分析时使用的代码没有太大的不同。
那天会议室里只有站着的地方。
因为我将代码优化为人类可读,所以我牺牲了它完成类似任务的能力,而无需对其他项目进行大量修改,这些修改可能也涉及到选择样本。这种牺牲是适当的,因为我希望在结果发布很久以后,我自己或者其他人能够很容易地解释我的代码。选择以易于阅读的方式编写代码支持了验证或复制工作的能力。
我在演讲中大声说,我不打算接受“边缘案例”。我没有计划“边缘情况”的原因是因为我为单个用户编写了这段代码。我解释说我不关心边缘案例,因为我就是边缘案例。这个评论引起了一些笑声。我不是想开玩笑。但它引发了多重幽默。
一位与会者问,“什么是边缘案例?”我看了房间。我有一种感觉,房间里还有其他人,他们知道什么是边缘情况,谁想说出来。所以我闭上嘴,让最后三分之一的棕色袋子成为与会者之间的对话。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
adamrossnelson.medium.com](https://adamrossnelson.medium.com/membership)
结论
享受作为数据科学家的工作有很多原因。如果你是一名数据科学家,你必须喜欢寻找、准备和清理数据。你还必须享受 T2 筛选各种方法的快感。花时间比较结果和解释输出也是作为数据科学家工作的一个令人满意的方面。
但对我来说,作为一名数据科学家,我最喜欢的角色是帮助他人建立新的联系。我喜欢帮助他人与其他专业人士建立新的联系。我也将我的工作视为一个机会,帮助其他人联系到他们过去和现在的工作,但以新的和令人兴奋的方式。我利用数据科学的普及,无论数据科学是否值得普及,作为帮助他人建立这些新联系的一种手段。
这是一个关于我如何使用与选择分层样本和计算样本权重相关的方法和技术的故事,作为一个共同的兴趣点,以新的、意想不到的和令人惊讶的方式将我的一些同事聚集在一起。
本文的目的不是提供一个技术概述。如果你对我用来选择样本、计算样本权重、然后进行分析的代码样本的概述感兴趣,请给我发一封关于 Twitter.com/adamrossnelson的邮件。也许会有合作的机会!
感谢阅读
感谢阅读。把你的想法和主意发给我。你可以写信只是为了说声嗨。如果你真的需要告诉我是怎么错的,我期待着尽快和你聊天。推特:@ adamrossnelsonLinkedIn:亚当罗斯尼尔森。
最后的倒计时:部署我的深度学习项目
在过去的两周里,我将我的深度学习项目转移到生产中,使用 Google can 平台和 Django 建立了一个网站,你现在可以自己看到
布鲁斯·马斯在 Unsplash 上拍摄的照片。
你怎么称呼一个从未与世界分享的令人敬畏的项目?—你不知道。除非这个项目是你的,否则你永远不会知道它的存在。研究不仅仅是有想法和写科学文章。研究是关于分享这些想法,是关于解决日常问题,并致力于建设一个更美好的世界和一个鼓舞人心的未来。
在过去的两周里,我接受了将深度学习项目投入生产并与世界分享的使命。该项目是一个利用卫星图像绘制每日受野火影响地区地图的模型。投产能有多难?嗯,有一些注意事项要记住。
目录
- 项目的一些背景
- 下载数据
- 预处理数据并生成模型输出
- 用 Django 创建和部署网站
项目的一些背景
正如我上面提到的,这个项目包括一个使用卫星图像作为输入来生成被野火烧毁的区域的每日地图的模型。这项研究导致了一篇 科学论文的发表 我在下面的两个故事中描述了这篇论文,如果你有兴趣找到关于这个主题的更多细节。
森林火灾是一种自然灾害,通常会对生态系统和人类产生巨大影响。绘制火灾图…
medium.com](https://medium.com/@mnpinto/mapping-burned-areas-from-space-with-artificial-intelligence-3657bdb97a9d) [## 绘制 2019-20 澳大利亚森林火灾
一个案例研究显示了如何使用深度学习从卫星图像中监控火灾的日常进展…
towardsdatascience.com](/mapping-2019-20-australian-bushfires-4e6d9a0eed63)
下载数据
任何模型都需要一些输入数据来生成输出。在我的例子中,输入数据——每日卫星图像——需要从网络服务器下载。这包括使用 API 发出请求,等待请求被处理,最后下载图像。当一切顺利时,这很容易,但经常会有意想不到的问题。
- 对服务器的请求可能需要一些时间来处理,并且每个请求有一个文件限制;
- 连接可能会失败,结果导致下载中断,从而导致文件损坏;
- 由于某些不可预知的原因,数据可能会延迟或丢失。
为了让请求/下载过程健壮地工作,我必须编写一个 Python 包 来管理下载过程,其特性包括:
- 在文件数量对于单个请求来说太大的情况下,将请求拆分到 API
- 记下哪些文件已经被下载;
- 检查下载文件的哈希以确保它们没有损坏;
- 能够在连接丢失的情况下重新启动进程,而不必发出新的请求。
测试和调试所有这些代码非常耗时,但在进入生产阶段时却是必要的。流程需要尽可能可靠,并且需要最少的人工干预。
预处理数据并生成模型输出
幸运的是,这一步更简单,因为可以使用研究过程中使用的预处理函数来准备数据。但是,经常需要一些修改:
- 代码应该是快速的和内存高效的,以减少计算成本和处理时间;
- 代码应该对诸如丢失数据之类的问题具有鲁棒性;
- 代码应该能够在 CPU 或 GPU 上运行,这取决于机器的规格——幸运的是, Pytorch 使这变得非常容易。
对数据进行预处理后,就该加载模型、生成预测并保存结果了。然而,结果需要以对网站友好的格式保存。在我的案例中,这导致了一些额外的步骤:
- 将图像数据转换成矢量格式并分离各个烧伤区域。
- 还保存与每个单独事件相对应的 GeoTiff 图像。
然后可以将数据添加到数据库中。我选择使用能够处理地理数据类型的 PostGIS ,比如多边形和栅格。
实际上,我在 Google 云平台虚拟机上运行下载和预处理步骤。为了降低成本,该实例每天只打开一次来计算输出,并将它们发送到网站所在的服务器。
用 Django 创建和部署网站
Django 是一个使用 Python 快速开发的 web 框架。问题是,两周前我还不知道怎么用它。我以前读过,但我从未找到合适的机会使用它。我觉得这可能是一个有益的挑战。毕竟,学习是有趣的!或者至少在你最终明白事情是如何运作的之后,这是很有趣的。学习过程是这样的:
- 前两天是从看 YouTube 上的一些教程开始的;
- 当我学会了基础知识,我开始创建我的网站项目;
- 接下来的几天,随着我开始理解这个框架是如何工作的,我逐渐添加了更多的特性。
这个过程的特点是大量的谷歌搜索,浏览器中不合理数量的打开标签,以及大量的耐心。
好的一面是,我学得越多,就越意识到姜戈带来的潜力。随着时间的推移,进度开始加快— 攀登学习曲线!
有了一个工作示例后,我决定是时候部署它了。我发现这个过程比预期的更具挑战性。通常,YouTube 上的教程只涉及开发部分,缺乏对部署过程的解释。我花了大约三天时间才完成这一步。我必须弄清楚什么是 Nginx 和 Gunicorn,以及如何让一切工作起来。但是,就像任何事情一样,当任务更具挑战性时,我们学到的东西也最多。
说够了!我给你看一下网页(【meteo-ai.com】T21)并描述一下主要功能。
图一。显示 2017 年影响葡萄牙的极端火灾的网站的打印屏幕。
图二。显示过去一年概况的网站的打印屏幕。
该网站的特色:
- 燃烧区域数据和活跃火灾数据存储在一个与 GeoDjango 配合良好的 PostGIS 数据库中;
- 用户可以选择将导致数据库查询的可视化的时间范围;
- 网站上的结果显示在传单地图上,利用了 nice 标记集群扩展,允许以一种干净有效的方式聚集相近的标记(参见图 2 中的地图)。
- 通过将每个像素渲染为多边形,使用燃烧日期或模型的置信水平对区域进行着色,来显示燃烧区域地图。这允许我有一个跨越用户选择范围的颜色图(参见图 1 中的图);
- 所选时间段或火灾事件的统计数据显示为使用 Plotly.js 制作的动态图(参见图 1 和图 2 中的柱状图)。
能够以可视和动态的形式聚集所有这些信息对于监控和研究火灾非常有用。
有网页显示类似类型的信息,然而,这种深度学习模型产生的烧伤区域是这种类型产品的最先进水平。通过使用 3D 卷积和 LSTM 层分析输入图像序列中的时空相关性,经过训练的模型非常擅长识别燃烧区域并确定像素燃烧的日期 —特别强调后者。
结局?
一点也不。网站目前的状态有很多方面需要改进。此外,在燃烧区领域还有更多研究路径需要进一步探索。一个热门话题是使用公开的卫星图像绘制更高分辨率(3000 万像素或更小)的火烧区地图。高空间分辨率与频率较低的图像相权衡。这是我正在解决的问题。处理如此大量的数据本身就是一个挑战!我会确保在将来写下结果。****
也许这只是一个开始。
关于我
[## 我的 3 年历程:从零 Python 到深度学习竞赛高手
自从 2017 年开始学习 Python 以来,我一直遵循的道路是成为一名独自参加 Kaggle 比赛的大师…
towardsdatascience.com](/my-3-year-journey-from-zero-python-to-deep-learning-competition-master-6605c188eec7)
感谢阅读!祝您愉快!
最后的前沿:大脑数据
心灵感应即将到来——脑机接口将极大地改变我们交流和感知现实的方式。
图片来自 pixabay
在日益技术化和数据驱动的社会的帮助下,人类和机器之间的交流艺术已经达到了优化的顶峰。虽然我们曾经通过身体互动和口语进行交流,但未来的交流可能取决于一种更具心灵感应的形式:大脑与机器的交流。
一个脑机接口是一个将神经元信息转换成外部计算机或机器可以用来执行我们的行动和决定的形式的装置。
尽管这种设备可能允许人类直接与机器交流思想和行动,但该技术需要大量数据来提供一致、准确和理想的结果。这一核心要求揭示了一项技术的许多伦理含义,这项技术与我们人类数据的最终前沿:大脑数据密切相关。
尽管这项技术确实有巨大的潜力,但为了将风险和伤害降至最低,也必须解决令人生畏的道德后果。
隐私
图像通过 pixabay
随着与大脑交流的新方式的出现,并考虑到脑机接口收集的数据的显著私密性,有可能出现新的侵犯人类隐私的行为。
虽然许多脑机接口应用程序可能是出于提高人类生活质量的善意目的而创建的,但允许访问人脑数据可能会严重损害用户的隐私。
由第三方实体收集的私人信息,如大脑数据,可能被用来以恶意方式针对脑机接口用户。拥有这些私人数据的实体可以以许多有害的方式操纵脑机接口用户,包括:
- 发送不必要的刺激对身体造成物理伤害
- 向用户发送视觉或听觉刺激,并分析无意识大脑的反应,以收集或窃取私人信息(银行信息、密码、位置、秘密)
- 从检查大规模原始大脑数据库中得出群体推断,目的是产生目标用户的记忆、情感倾向、偏好和其他属性的简档。
鉴于这些数据的高度敏感性,毫无疑问,它具有很高的潜在价值。人们可以推断,控制数据的人不会阻止提取这些数据或将这些数据出售给第三方供应商——公司会有动力获取和处理这些私人数据,因为这使他们能够更有效地运营、进行内部研究和商业化。
例如,苹果心电图手表影响了保险公司根据手表收集的敏感数据(我们身体的电脉冲)的结果修改价格;基础营销和战略告诉我们,在销售产品之前了解用户和消费者的概况是一个重要的竞争优势。虽然 APPLE ECG 收集电脉冲,但无法想象大脑数据的收集和使用会给我们的日常生活带来什么样的改变。
最终,这些动机的结合对脑机接口用户的隐私构成了直接威胁,我们必须努力起草法规,以减轻这项技术激发的权力和金钱动机。例子是修改 GDPR 以确保国际适用性或严格控制大脑数据的销售和转移。
自治
图片通过 pixabay
随着技术优化我们的偏好和决定,脑机接口有可能损害我们人类的自主意识;随着这项技术的兴起,我们不受外界影响的自我决定和独立决策的能力正面临风险。
对于伦理学家来说,自主指的是个人自我决定的能力。根据大多数脑机接口研究人员的说法,脑机接口旨在提高重度残疾人的身体自主性和生活质量。这项技术中的自主概念在伦理学家和脑机接口研究人员之间是不同的;脑机接口研究人员将自主性的讨论限制在残疾患者身上,他们在未来的脑机接口开发中很可能是少数用户。
脑机接口算法不断适应和学习用户的想法和倾向,并可以建议或预测用户想要采取的未来行动。因此,用户可能会建立对脑机接口建议的依赖,并失去确保有意决策得到控制和实现的能力。
由于现在能够依靠脑机接口来执行思想和知识,用户可能会失去独立思考和个人发展的意识。一个经典的例子是将你的一系列动作和想法限制在你知道设备会准确可靠地执行的范围内(少探索,多利用)。如果当前的脑机接口研究像前面提到的那样定义自主性,那么用户的人类自主感可能会受到威胁。
为了避免这种情况,脑机接口研究人员必须引入多个领域的专家来有效地定义人类自主的伦理含义,并相应地修改他们的技术和实践。
安全
图片通过 pixabay
安全性是工程师在计算机技术中努力确保的一项常见任务。最敏感的人体数据的收集、存储和传输将需要新的保护和预防措施,并结合检测和事件响应,以避免和防范安全事故。
与所有利用人类数据的新技术一样,黑客和希望造成伤害的恶意人员是一个共同的威胁。如果黑客可以访问你的大脑数据或脑机接口,他们可能会以不可想象的方式造成伤害,如上文隐私部分所述。
安全性不应该是一个特别的标准:脑机接口的用户在使用过程中根本不必担心安全性。最轻微的安全漏洞都可能对用户产生巨大影响,可能导致永久性脑损伤或死亡。
责任
图片通过 pixabay
脑机接口的潜在广泛使用带来了一个与道德和法律责任相关的重要问题:脑机接口的使用是否让用户对机器的所有决定负责?
这种技术的一个麻烦后果是由道德崩溃区的概念来例证的,它描述了将有缺陷的算法和数据化系统的错误归咎于人类主体的趋势。许多人经历过思考一些事情,但是放弃了交流或执行这个想法。如果脑机接口看到用户的想法并意外地执行了一个有害的动作,那么应该归咎于谁,这已经引起了广泛的讨论。虽然用户可能不会自己以某种方式行动,但他们会受到脑机接口决策的影响,并最终影响他们的想法。当前的研究和对道德和法律责任的理解不足以决定脑机接口的使用。因此,我们必须仔细指定我们将故障归咎于脑机接口的场景,并批判性地审查我们对脑机接口内责任的理解,辅以目前用于解决其他技术中这种伦理问题的方法。
为什么这很重要,我们能做些什么?
毫无疑问,计算技术在我们社会的日常生活中变得越来越有价值。随着大数据在人类和机器中的广泛使用,我们发现自己正处于一个必须仔细思考技术的设计、影响和伦理的时代。尽管脑机接口可以让我们显著改善日常生活,但我们必须优先考虑人类的安全和福祉。我们必须首先召集许多领域的专家——伦理学家、法律专家、神经科学家和工程师——他们支持旨在解决这些问题的公开讨论。对于普通大众,我们可以挑战传统的监管框架,批评当前的研究实践,并检查技术的人文背景和伦理。最终,我们必须鼓励讨论,并通过挑战侵犯我们基本人权的技术来增强我们自己的能力。
如果你还没有读过我的下一篇关于脑机接口令人兴奋的潜力的文章, 在这里读一下 。
贝叶斯时间序列的第一步——线性回归
基于 PyMC3 的贝叶斯时间序列分析中的状态空间模型
介绍
今天,时间序列预测无处不在,公司的决策过程在很大程度上取决于他们预测未来的能力。通过一系列简短的文章,我将向您介绍一种解决这类问题的可能方法,将状态空间模型与贝叶斯统计结合起来。
在最初的文章中,我将从 Jacques J.F. Commandeur 和 Siem Jan Koopman [1]的《状态空间时间序列分析简介》一书中选取一些例子。它包括对应用于时间序列领域的状态空间建模的主题的众所周知的介绍。
我的贡献将是:
- 一个非常谦卑的尝试,以缩小这两个领域在介绍性和中间材料方面的差距。
- 概念的呈现:一方面,一个简洁的(并非不存在的)数学基础来支持我们的理论理解,另一方面,一个从零开始的算法实现(尽可能避免“黑盒”库)。在我看来,这是确保我们能够抓住一个想法的最好方法。
- 使用 PyMC3 正确实现所提出的模型,并对其进行解释和讨论
1.线性回归
在经典回归分析中,假设因变量 y 和预测变量 x 之间存在线性关系。y 的 n 个观测值(对于 i = 1,…,n 用 y_i 表示)和 x (对于 i = 1,…,n 用 x_i 表示)的标准回归模型可以写成
其中,ϵ_i NID(0,σ _ϵ)假设残差(或误差)ϵ正态独立分布,均值等于零,方差等于σ_ϵ.
1.1 数据
该数据集包括 1969 年 1 月至 1984 年 12 月期间英国每月死亡或严重受伤的司机人数(KSI),您可以在此处找到。
我们将使用死亡人数的记录。对数变换可用于将高度倾斜的分布转换为不太倾斜的分布。这对于使数据中的模式更容易解释和帮助满足推断统计的假设都是有价值的。我们稍后会看到这意味着什么。
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import pymc3 as pm
import arviz as azy = np.log(ukdrivers)
t = np.arange(1,len(y)+1)
在我们目前的情况下,独立变量只是时间。
1.2 经典方法
回归模型有两个未知参数,可以用最小二乘法估计。它返回α和β的值,这些值在观察到的 y 和预测的 ŷ.之间产生最低的平均二次误差
目标是找到使误差最小的α (hat)和β (hat)值。为此,我们对每个参数取偏导数,并使其等于零,如下所示,
计算完上面的等式后,我们得到以下结果
print('Least Squares\n')
β_hat = np.sum((t - t.mean())*((y - y.mean()))) / np.sum((t - t.mean())**2)
α_hat = y.mean() - β_hat*t.mean()
print("\u0302α: " + str(α_hat))
print("\u0302β: " + str(β_hat))Least Squareŝα: 7.545842731731763
̂β: -0.0014480324206279402
我们可以用它们来绘制我们的最佳拟合线。
plt.plot(t, y, 'C0.')plt.plot(t, α_hat + β_hat *t, c='k',
label=f'y = {α_hat:.4f} + {β_hat:.4f}*x')plt.ylabel('log UK drivers KSI')
plt.xlabel('Time (in months)', rotation=0)plt.legend();
英国驾驶员 KSI 数量和时间的对数的最小二乘法回归线。
使用最小二乘估计的误差方差可以通过下式计算
np.sum((y - α_hat - β_hat * t)**2/(len(y)-2))0.022998056021100423
2.贝叶斯方法
没有上下文的贝叶斯定理就像捕鼠器一样。尽管这个等式相对简单且广为人知,但它背后有很多直觉。我曾经读到过,它可以被看作是一个感知世界的镜头。我要说,它展示了一个不同的视角。有一些有用的资源可以获得这种直觉;所以,我就不太关注了。我们的工作范围是在它的实际方面,使它为我们所用。首先,我们简单定义一下它的组成部分。
我们从基础开始:之前的是在我们包括数据的概率之前某事发生的概率(可能性),之后的是包含数据之后的概率。**
贝叶斯定理【2】写成
上式中, P(B) 为证据, P(A) 为先验, P(B | A) 为似然, P(A | B) 为后验。 P(A | B) 是 A 发生的概率如果* B 已经发生。我们可以将概率和概率分布代入方程(这对我们目前的工作更重要)。*
2.1 模型定义
现在,是时候将我们的简单线性回归定义为概率模型了。我们假设数据遵循高斯分布,平均值为α + β x ,标准差为ϵ,如下所示
我们本质上是在选择我们的可能性,也就是说,我们给我们观察到的变量(数据)分配了一个分布函数。下一步,我们需要定义我们的前科。对于每个参数(我们的未观察变量),我们需要定义一个先验分布。把它想成一个先验信念,或者,如果你有参数的先验估计,这些先验估计就成为先验。因为我们不太了解参数,所以让我们定义一些通用分布
因为这是我们的第一款车型,所以我们会对我们的选择含糊其辞。用贝叶斯术语来说,这意味着我们将使用平坦先验。根据我们对模型的基本理解,我们知道ϵ不可能是负数,我们的斜率相对较小。稍后我们将改进我们选择先验的方式。当应用这些思想时,我们将只使用高斯和半高斯分布
让我们绘制这些分布图,以便更好地理解我们所说的平坦分布。
*_, ax = plt.subplots(1,1)x = np.linspace(-15,15,1000)
ax.plot(x,stats.norm.pdf(x,0,10), label='α')
ax.plot(x,stats.norm.pdf(x,0,1), label='β');
ax.plot(x,stats.halfnorm.pdf(x,0,5), label='ϵ')
ax.legend();*
我们模型中每个参数的先验分布
我们可以从上面看到,我们没有告知我们的贝叶斯模型我们的参数值可能是什么。这意味着数据将对我们的后验分布产生重大影响。我们将在未来学习如何在看不到数据的情况下,在我们的可观察变量中反映我们先前的选择。我们称这个建模步骤为先验预测检查,,它有助于诊断糟糕的建模选择。
2.2 模型检查
我们总是喜欢从生成我们自己的数据开始,并确保模型被很好地指定。它为更复杂的模型带来了显著的价值,但是我们将在所有的例子中使用这种方法作为一个好的实践。
*n = 200
true_α = 3
true_β = 0.2
true_ϵ = 0.2
ϵ = np.random.normal(0, 0.2, n)x = np.random.normal(10, 1, n)
true_Y = true_α + true_β * x
Y = true_Y + ϵ_, ax = plt.subplots(1,2,figsize=(8,4))
ax[0].plot(x, Y, 'o')
ax[0].set_xlabel('x')
ax[0].set_ylabel('y', rotation=0)
ax[0].plot(x, true_Y, 'k')
az.plot_kde(y, ax=ax[1])
ax[1].set_xlabel('y')
plt.tight_layout()*
综合生成模拟数据的图,以进行模型检验。
我们可以在上面看到我们生成的数据和我们期望从中恢复的拟合线,也就是说,我们希望从数据中恢复我们的真实参数。
PyMC3 让我们以一种非常简洁的方式来翻译我们上面定义的模型。首先,我们定义参数的先验分布,然后是可能性。我们准备好取样了!
*with pm.Model() as model_l:
# priors
α = pm.Normal('α', mu=0, sigma=10)
β = pm.Normal('β', mu=0, sigma=1)
ϵ = pm.HalfNormal('ϵ', 5)
# likelihood
y_pred = pm.Normal('y_pred', mu=α + β*x, sd=ϵ, observed=Y)
trace_l = pm.sample(
2000,
tune=3000
)
idata = az.from_pymc3(trace_l)az.plot_trace(
idata,
var_names=['α', 'β', 'ϵ'],
lines=[
("α",{}, true_α),
("β",{}, true_β),
("ϵ",{}, true_ϵ),
],
);*
左边是每个参数的后验分布及其真实值(黑线),右边是采样期间每个时间步长的单个采样值。
我们稍后会更详细地理解这些情节,但我只想告诉你,我们正在很好地恢复我们的真实价值。现在,关注参数的分布(左边的图)。这些是我们正在估计的参数的后验分布,垂直线代表真实值。我们可以看到,我们非常接近这些真实值。请记住,我们使用了平坦先验,并且我们生成了相对较小的数据集(200 个点)。
2.3 模型实施
现在,是时候将经过验证的模型应用到我们的数据中了。
*with pm.Model() as model_l:
# priors
α = pm.Normal('α', mu=0, sigma=10)
β = pm.Normal('β', mu=0, sigma=1)
ϵ = pm.HalfNormal('ϵ', 5)
# likelihood
y_pred = pm.Normal('y_pred', mu=α + β*t, sd=ϵ, observed=y)
trace_l = pm.sample(
2000,
tune=3000
)
idata = az.from_pymc3(trace_l)*
2.4 模型可视化
另一种可视化我们的模型并确保我们已经正确地完成了数学表述的转换的方法是使用 Kruschke 图。
*pm.model_to_graphviz(model_l)*
我们实施的模型的 Kruschke 图,显示了每个参数和各自的概率分布,以及具有相应可能性的观察变量
有了上图,我们更容易把握对模型的理解。在每个节点内,我们都可以找到变量和分布,例如,检查包含ϵ的圆,你可以找到前面定义的半正态分布。观察到的变量由阴影节点表示。圆角框表示重复,即我们的数据集中有 192 个数据点,我们将计算所有这些数据点的可能性。箭头显示依赖关系;在我们的例子中,我们的可能性取决于参数α、β和ϵ.
既然我们确信已经正确地设置了模型,那么是时候分析我们的结果了。为此,让我们用与前面经典方法相似的方式绘制结果。
*plt.plot(t, y, 'C0.')alpha_m = trace_l['α'].mean()
beta_m = trace_l['β'].mean()draws = range(0, len(trace_l['α']), 10)
plt.plot(t, trace_l['α'][draws] + trace_l['β'][draws] * t[:, np.newaxis], c='gray', alpha=0.5)plt.plot(t, alpha_m + beta_m *t, c='k',
label=f'y = {alpha_m:.4f} + {beta_m:.4f}*x')plt.ylabel('log UK drivers KSI')
plt.xlabel('Time (in months)', rotation=0)plt.legend();*
英国驾驶员 KSI 数量和时间的对数的贝叶斯模型的回归线(黑线)和不确定性估计(灰线)。
首先要注意的是,这条黑线与我们从经典线性回归中得到的非常相似。正如我们已经提到的,我们得到的不仅仅是点估计,而是一个分布——我们的后验分布。灰线代表我们对估计的不确定性。我添加它们是为了让它更有趣,并让您初步了解我们将在下一篇文章中分析的内容。
2.5 贝叶斯方法与经典方法
现在,让我们比较两个模型的点估计。
*print("Bayesian model\n")
alpha_m = trace_l['α'].mean()
print("\u0302α: " + str(alpha_m))
beta_m = trace_l['β'].mean()
print("\u0302β: " + str(beta_m))
print('\n---\n')
print('Least Squares\n')
b_hat = np.sum((t - t.mean())*y) / np.sum((t - t.mean())**2)
a_hat = y.mean() - b_hat*t.mean()
print("\u0302α: " + str(a_hat))
print("\u0302β: " + str(b_hat))Bayesian model̂α: 7.545267492352623
̂β: -0.0014456381236993064---Least Squareŝα: 7.545842731731764
̂β: -0.0014480324206279495*
让我们也检查一下残差的标准差。
*σ_error = trace_l['ϵ'].mean()
σ_error**20.023403824629370424*
我们真的很亲密!它们产生类似结果的原因是,通过最小二乘法获得的点估计实际上与来自使用平坦先验的贝叶斯线性回归的最大后验概率(MAP)* (后验模型)是一回事(正如我们在这里所做的)。稍后,我们将深入探讨这一切。*
3.讨论
我们的方法的一个问题是,我们违反了经典回归分析的一个基本假设。假设观测值 y 相互独立。我们的例子不是这样,因为它们在时间上是相互关联的。为了说明这种情况,让我们考虑:
- 为 t 和 y,绘制相同的图形,这次用一条线连接所有点;
- 绘制残差图。
*plt.plot(t, y)
plt.ylabel('log UK drivers KSI')
plt.xlabel('Time (in months)', rotation=0);*
英国司机数量的日志 KSI 绘制成时间序列。
*residuals = y - (a_hat + b_hat*t)
plt.plot(t, residuals)
plt.plot(t, np.zeros(len(y)), '--', c='k', alpha=0.4)
plt.ylabel('Residuals')
plt.xlabel('Time (in months)', rotation=0);*
经典线性回归模型的残差。
一方面,我们可以在我们的数据上看到一个清晰的模式,并且我们的残差远远不是随机分布的。
让我们看看其他方便的工具来诊断一组观察值的随机性。我说的是相关图,它包含了一个观察到的序列和同一个序列移动 k 时间点到未来的相关性。对于最小二乘法,请记住,它的计算公式为
注意,我们使用 t 来简化我们的理解,即自变量只不过是时间。
通过绘制残差与具有滞后(时间差)的残差,我们绘制了同一个变量与其自身的关系——因此,名为自相关。我们需要很好地理解这个观点,所以在这个问题上多花一点时间是有意义的。
3.1.相互关系
首先,我们要引入协方差的概念。它描述了两个变量一起变化的程度。我们可以说,方差是一个群体之间如何变化的度量,而协方差是两个变量彼此变化多少的度量。
X 和 Y 之间的协方差的公式为
我用 X 和 Y 来简化下标,但是你知道对于我们来说, X 是 Y_t 而 Y 是 Y_{t-1} 。批注𝔼[ Y 无非是 Y 的期望值。假设每个数据点的可能性相等,则每个数据点的概率为 1/n,给出
对于离散情况,我们将考虑。当然,你已经发现这只是我们的时间序列的平均值(也用ȳ).表示
现在我们了解了协方差,我们可以将这个想法扩展到相关性(也称为皮尔逊相关系数),它只是由我们随机变量的方差的平方根归一化的协方差。
3.2 自相关
对于我们的问题(至少目前),我们对两个随机变量的相关性并不特别感兴趣,而是对一个随机变量本身感兴趣。让我们创建我们的系列,以便能够更好地将其可视化。我们必须确保它在时间上不是独立的(创建我们想要检查的相关性)。
*y = [0]for i in range(1000):
y.append(np.random.randn() + y[-1]*0.5)
y = np.asarray(y)
plt.plot(np.cumsum(y))plt.ylabel('$y_t$')
plt.xlabel('t', rotation=0);*
从有一个滞后的自回归过程产生的合成数据。
我们可以看到,我们使我们的 Y 明确依赖于它以前的值。我们使用一个系数来定义当前值与前一个值的相关程度——可以随意使用其他值进行测试。我们以后会更好地理解这些系数的用处。让我们画出 Y_t 对 Y_{t-1} 的图,看看我们会得到什么。
*plt.plot(y[:-1], y[1:], 'o');
plt.xlabel('$y_{t-1}$')
plt.ylabel('$y_t$', rotation=0);*
散点图显示时间序列的前一点和当前点之间的相关模式。
从上面的图中,我们可以立即看到两个变量正相关。关于我们的模型,这告诉了我们什么?让我们找出答案。
3.3 自相关函数
现在我们要推广自相关函数或 ACF(更多见此处【3】)。平稳随机过程滞后 k 时的 ACF 定义为
对于任意的 i 除以随机过程的方差。
使用上面的等式,我们可以说,对于 k ≥ 0,滞后 k 处的自相关函数定义为
让我们建立自己的 ACF。
*def correlation(x, y):
return np.mean((x - x.mean()) * (y - y.mean())) / (x.std() * y.std())def acf_calc(y, lag=40):
return np.array([1] + [correlation(y[:-i], y[i:]) for i in range(1, lag)])def acf_plot(y, alpha=0.05, lag=40):
acf_val = acf_calc(y, lag)
plt.vlines(np.arange(lag), 0, acf_val)
plt.scatter(np.arange(lag), acf_val, marker='o')
plt.xlabel('lag')
plt.ylabel('autocorrelation')acf_plot(y);*
合成生成数据的相关图。
我们可以看到自相关,对于某些滞后,它们似乎很高,但是有多高呢?我们需要一个下界和一个上界来回答这个问题。如果我们假设时间序列是高斯的,并且如果自相关分别高于或低于这些上限或下限,则零假设被拒绝。它指出,在α的显著性水平上,在给定的滞后处和之后没有自相关(这里我们进行假设检验,并抛出可接受的但有些随机的显著性值——不像贝叶斯那样)。我们的上限和下限可以用以下公式计算
这里我们将使用α = 5%。SE 是标准误差, r_k 是滞后 k 时的估计自相关。SE 可以使用 Barlett 公式计算
*def standard_error(acf_values, n):
se = np.zeros(len(acf_values) - 1)
se[0] = 1 / np.sqrt(n)
se[1:] = np.sqrt((1 + 2 * np.cumsum(acf_values[1:-1]**2)) / n )
return sedef acf_plot(y, alpha=0.05, lag=40):
acf_values = acf_calc(y, lag)
plt.vlines(np.arange(lag), 0, acf_values)
plt.scatter(np.arange(lag), acf_values, marker='o')
ci = stats.norm.ppf(1 - alpha / 2.) * standard_error(acf_values, len(y))
plt.fill_between(np.arange(1, ci.shape[0] + 1), -ci, ci, color='blue', alpha=0.2)
plt.xlabel('lag')
plt.ylabel('autocorrelation')acf_plot(y, lag=25);*
**具有置信区间的合成生成数据的相关图。
现在我们知道了如何计算 ACF 和上下界,我们可以使用一个库来完成它。
*from statsmodels.graphics.tsaplots import acf, plot_acf
acf_stats = acf(y)
plot_acf(y);*
**合成生成数据的相关图,使用 statsmodels 库创建置信区间。
3.4 残差相关图
我们终于准备好为英国车手数据的残差做相关图,最重要的是,分析它。
主要思想是,如果残差是随机分布的(我们希望它们是这样),那么它们是相互独立的。它显示在相关图中所有未超过我们置信界限的小节中。我们将运用到目前为止所学的知识。
*plot_acf(residuals);*
**相关图适用于英国驾驶员 KSI 数量记录的经典线性回归模型的残差。
看起来没那么好看;有相当多的酒吧超出了蓝色阴影区。我们可以看到, k =1, k =2, k =11, k =12, k =13 超出了这些限制( k =0 始终为 1,正如我们在上面手动计算 ACF 时所示,因为它是每个点与其自身的相关性)。我们说这些点与零显著不同,这表明当我们使用经典的线性回归时,我们违反了误差是随机分布的假设。
4.结论
我们建立了两个不同的模型,从根本上做同样的事情:他们使用时间作为解释变量,并线性建模其与英国司机 KSI 的对数的关系。第一种方法是使用标准最小二乘法拟合的经典线性回归模型。第二个是我们的第一个贝叶斯模型,将点估计的思想扩展到后验(和先验)分布。然而,结果并不令人满意。我们的残差远远不是随机分布的,这是我们的观察结果彼此不独立的结果。我们需要新的工具来解决这个问题。从本质上讲,有一个潜在的动态演变是无法观察到的,我们也无法对其建模。这就是状态空间模型的用武之地。状态精确描述了一段时间内无法观察到的动态过程。在下一篇文章中,我们将建立我们的第一个状态空间模型!
保持联系: LinkedIn
参考
[1] J. Commandeur,S. Koopman,《状态空间时间序列分析导论》(2007),牛津大学出版社
[2]https://en.wikipedia.org/wiki/Bayes'_theorem
[3]https://www . real-statistics . com/time-series-analysis/random-processes/自相关函数/
所有数据科学家都应该掌握的五项技能
和练习来让你坚持每一项
乔纳森·博尔巴在 Unsplash 上的照片
W 当大多数人想到数据科学时,他们会想到超复杂的模型、万亿字节大小的数据库和复杂的多显示器仪表板。实际上,数据科学的任务比大多数数据科学家愿意承认的要“平凡”得多。“数据”比“科学”更重要。这意味着收集、清理、可视化、关联以及最终预测数据。在本文中,我列出了所有数据科学家都应该熟悉的五项技能。
在很大程度上,这些更多的是与 python 和脚本有关,而不是训练和推理。对于每项技能,我都列出了几个你应该能够解决/回答的“问题”。大多数都很短,不需要很长时间就能完成。有些需要一个下午,可能需要一些咖啡。尽管如此,除了我的建议之外,还是要花时间去发展它们。
虽然本文主要面向初学者,但有些任务甚至对有经验的用户来说也可能很有趣。此外,这可以作为一个检查表来衡量你在数据科学方面的进展。
大纲:
- 图像挖掘
- 文本挖掘
- 数据集预处理
- 使用预先训练的模型
- 可视化数据
排名第一的图像挖掘
大多数数据科学问题都始于寻找与任务相关的数据集。然而,大多数时候,并不存在针对您的问题的数据集。我们必须建立自己的。对于那些计划使用计算机视觉的人来说,熟悉图像抓取是一项必要的技能。此外,当你制作第一个数据集时,你会意识到这比你想象的要难。
练习 1: 构建一个 python 脚本,使用 google images 自动获取与 Q 个查询匹配的 N 个图像。每次查询都将它们保存在一个子文件夹中。使用 N = 150 和以下十个查询:猫、狗、蜥蜴、鱼、鸟、鲨鱼、青蛙、牛、恐龙和怪物。如果你有创意,你也可以使用 instaloader 包从 Instagram 下载图片。代替动物,你可以做一个你最喜欢的影响者的数据集。
练习 2: 手动检查每个文件夹,删除所有与查询不完全匹配的图像,如 memes 和 drawings。统计每次查询删除了多少张照片以及删除的原因。有什么查询是重叠的吗,比如狗文件夹里的猫图片?
练习 3: 修改练习 1 中的脚本,为每个查询下载更多的图像,以补偿您在练习 2 中删除的图像。执行这个脚本得到 N = 1000。
练习 4: 对于练习 2,手动检查每个文件夹,删除重叠和不需要的图像。这一次,假图像出现的频率是更高还是更低?构建每个类一万幅图像的数据集需要多长时间?
#2 文本挖掘
对于图像挖掘,我们经常需要收集大量的文本。虽然存在通用数据集,但我们经常处理特定的词汇表或不太常见的语言。除此之外,很多时候我们还要自己做文字清理,这是一个非常容易出错的工作。
为了磨练我们的文本挖掘技能,我们将看看从维基百科抓取文本。文字嘈杂;几篇文章可能包含一千多个独特的单词。有些可能拼错了。一些将被连字符连接。清洁图像是自然的;清理文本没有那么多。
练习 1: 创建一个脚本,可以从维基百科获取 N 篇文章,并提取其标题和文本。有很多方法可以做到这一点,REST APIs、pip 包、美汤等等。要获得随机页面,您可以使用“随机页面”链接。试着下载一百篇文章。
练习 2: 创建一个脚本,将所有文章组合成一个字符串,统计每个唯一单词的频率,按频率排序,并打印所有内容。数据集中最少/最常用的一百个单词是什么?有多少单词出现一百次以上?
练习 3: 使用绘图库,创建词频线图。得到的曲线是什么形状?使用对数标度重复绘图。曲线现在看起来怎么样?
练习 4: 手动计算每个文档每个单词的 TF-IDF 。这是自然语言处理中最广泛使用的度量之一,用于确定哪些单词与每个文档相关。按顺序,按 TF-IDF 值对单词进行排序,并打印前 10 个单词。将它们与文章的标题进行比较。它们是相关的词吗?
练习 5: 要清理文本语料库,您必须将所有内容转换为小写,删除停用词,删除数字,修复错别字,取消缩写,并使每个单词正常化(词干化和词条化)。此过程有效地删除了所有冠词、介词、性别标记、复数标记,并将所有动词转换为不定式。最后,通常会删除 10%或 20%最不常用的单词。这整个过程是做好自然语言处理最关键的任务之一。寻找如何执行此操作的教程。 NLTK 是一个优秀的工具大量教程。
练习 6: 如果你在清理文集时幸存下来,重复练习 4。每个文档最相关的单词有变化吗?
练习 7: 有些词放在一起有不同的意思。“The”、“United”和“States”在单独使用时有各自的含义,在一起使用时表示“美国”。找到这样的二元模型和三元模型。在高层次上,这可以通过将两个词随机一起出现的概率与它们在数据集中一起出现的实际频率进行比较来实现。
#3 数据集预处理
有时我们会找到一个可以使用的数据集。然而,除了主流的,到达“X_train,y_train,X_test,y_test”可能没有你想的那么简单。在实践中,数据科学家必须每天驯服数据野兽。这里有一些数据集,你必须做一些手工工作才能让它们为深度学习做好准备。
练习 1: 处理原始的 CIFAR-10 和 CIFAR-100 数据集。这包括下载它,用 pickle 打开文件,对加载的数组进行整形,以及将图像规范化为[0,1]范围内的浮点数。
练习 2: 处理原始 Flower-17 数据集。执行与练习 1 中相同的任务。这一次,下载中没有标签信息;你必须想办法得到它。
练习 3: 处理原始的 Flower-102 数据集。这次有一个 Matlab 文件,你可以用它来弄清楚如何打开和提取相关数据。另一个选项是使用这个页面来获得每个类的实例计数。
练习 4: 之前我们手动下载了一些维基百科的文章来做一些 NLP 的任务。这次,你的任务是下载整个英文维基百科。换句话说,所有文章的所有文本。幸运的是,维基百科本身提供了许多下载其全部目录的方法。不要试图一条一条地做这件事。您的工作是找到一个转储,下载、读取并解析它。这意味着要完成整个清洁程序。
练习 5: 有时,我们必须增强数据集。CIFAR-100 有一百个类别,但它只有图像数据。你的任务是使用你的维基百科搜集技能为每个 CIFAR-100 类找到 50 个相关单词。衡量这 50 个词在类别和子类别中有多少重叠。
#4 使用预先训练的模型
对于大多数概念验证,预先训练的模型就足够了。 TensorFlow Hub 是一个很好的地方,可以感受到外面有什么可以使用。存在许多用于图像分类、对象检测、情感分析、文本处理等的模型。知道如何应用、微调和重新训练一些最著名的模型是快速执行数据任务的必要技能。
这些练习旨在让您使用一些最常用的模型来完成一些最常见的任务。
练习 1: 为 ImageNet 数据集获取预训练版本的 ResNet50。它的输出是一个 1000 元素的向量,其类别置信度为 ImageNet 挑战中使用的 1000 个类别。您的工作是创建一个脚本,该脚本使用 ResNet 模型获取图像并打印其类。您还可以让它编写五个最可能的类,取五个最高的输出值。
练习 2: 针对 MobileNetV3 模型重复练习 1。下载 1000 张图片,测量每个模型处理这些图片需要多长时间。精度是否受到显著影响?哪款比较好?
练习 3: 启动并运行 YOLO 和更快的 R-CNN 模型。您可以使用 COCO 2017 验证图像、一些 Youtube 视频或您的网络摄像头作为检测的数据流。找出它们支持的对象类型。哪个更快更准确,准确多少?
练习 4: 对于文本,大多数模型会给每个单词分配数值来表示它们的含义。这就是所谓的单词嵌入。使用 BERT 模型对 IMDb 评论数据集进行情感分析。为此,您需要微调 BERT。情况如何?
#5 可视化
数据可视化的重要性怎么强调都不为过。没有它,我们就看不到我们的数据所能提供的所有机会。我们可以用它来完成模型解释、错误分析和数据理解等任务。在我在本文中介绍的所有技能中,可视化是最需要独创性和想象力的一种。俗话说,一图胜千言。在下文中,我提出了一些问题,你必须找出一个或多个回答这些问题的视觉化图像。
练习 1: 考虑一下 IMDb 评论数据集。你能想出一个好方法来形象化哪些单词代表积极和消极的类别吗?修剪最频繁的单词是否提高了你的视觉化?如果你训练 BERT 来解决这个问题,试着把它出错的评论可视化。这些评论有什么特别之处吗?
练习 2: 下载 CelebA 数据集。画出每个属性的频率。哪些是最频繁/最不频繁的?你如何快速总结每堂课对非英语人士的意义?有些标签非常主观,是不是所有“有吸引力”类别下的面孔都对你有吸引力?其他一些不属于这一类的图片有吸引力吗?
练习 3: 微调 ResNet50 和 MobileNetV3,以求解 CIFAR-100 数据集,并保存它们对所有测试图像的预测。两个模型在预测中同意/不同意的频率是多少?哪些是他们比较认同/不认同的阶层?他们都搞错的图片有哪些?
练习 4: 下载 Flower-102 数据集。每种的原色是什么?有多色的花吗?花可以按颜色分组,也可以按名称有意义地分组吗?
练习 5: 下载针对 ImageNet 问题训练过的 VGG 网络,应用到某个图像上。检查其第一个卷积,每个滤波器可以识别哪些模式?第二层和第三层可以这样回答吗?
这些是有抱负的数据科学家需要掌握的五项最基本的技能。如果您完成了这些练习,您将熟悉如何获取文本和图像数据、利用现有数据集、使用预先训练的模型以及使用可视化技术来深入了解您的数据、模型和错误。经验丰富的开发人员应该已经熟悉这些任务,并对大多数问题的结果有一个有根据的猜测。
我希望这些能让你感兴趣,并能帮助你锻炼数据科学的肌肉:)
对于研究型的乡亲们,我也写了一篇文章,对 2020 年 AI 论文阅读的十点建议。看看这个。
阅读建议让你了解人工智能和数据科学的最新经典突破
towardsdatascience.com](/ai-papers-to-read-in-2020-ac0e4e91d915)
如果您对本文有任何问题,请随时发表评论或与我联系。如果你是中新,我强烈推荐订阅。对于数据和 IT 专业人员来说,中型文章是 StackOverflow 的完美搭档,对于新手来说更是如此。注册时请考虑使用我的会员链接。
感谢阅读:)
成功的数据科学需要考虑的五件事
真正成功的数据科学项目有五个共同点…
一个成功的项目被实施并产生真正的商业价值。然而不幸的是,这样的数据科学项目仍然很少。项目失败的原因大多相同,将这些失败的原因转化为数据科学成功的五个要素。
伊恩·斯托弗在 Unsplash 上拍摄的照片
让我把你介绍给他们…
1.数据和工具
您的数据和工具需要为数据科学做好准备。公司仍在努力获取数据(政治上和技术上)。许多公司都有遗留系统,这让数据科学家的生活很艰难。不了解用于数据科学的工具的要求或不同可能性,或者没有资金为团队提供高效工作所需的资源。我不止一次听到有人因为公司基础设施不够而把他们的模型带回家。
你的团队有必要的数据和工具来完成这项工作吗?
2.技能
你可能会想到建立深度学习模型的技巧,数据和软件工程,建立管道。但这还不够。理解业务环境中使用的数据的技能以及理解不同数据字段之间的联系的能力同样重要。让我们不要忘记项目管理或产品管理技能,要看到全局和与业务沟通的能力。
你的团队真的拥有完成工作所需的所有技能吗?
3.沟通
这个我在其他帖子里都提到过:沟通,沟通,沟通。数据科学家和业务人员之间的对话通常发生在两个层面上,他们相互交谈,并在错误的印象下认为他们理解相同的事情,分析翻译是解决方案。团队倾向于在没有正确澄清业务中不同利益相关者的期望的情况下就采取行动。我们不要忘记对最终用户的变更管理,尤其是当他们害怕失去工作的时候。
你的团队是否与不同的利益相关者进行了足够的沟通?
4.商业案例
商业案例,一个当你谈论一般项目时的经典案例。但在数据科学项目中不太经典。数据科学项目往往在没有商业案例的情况下启动,而是通过“如果……不是很酷吗?”(填写你喜欢的神经网络和随机应用)问题。避免不明确的项目范围或检查在生产中运行一个模型并围绕它构建一个产品的成本可以为您节省大量资金。
您的数据科学项目的业务案例是否清晰?
5.管理
如果你有数据、工具、技能、沟通和商业案例。政府仍然可以把你扔回去。数据科学团队需要嵌入到组织中正确的位置,并与不同的支持职能部门建立正确的联系。接受项目的过程、团队工作的方式以及遵守规章制度是关键。最后但同样重要的是,你需要高层管理人员的认可。如果治理设置不正确,你注定会失败。
你的治理为你的成功做好准备了吗?
摘要
如果您可以问自己关于您的数据和工具、您团队中的技能、您如何与业务的其余部分沟通、业务案例和治理设置的问题,您可以很快澄清您是否为您的数据科学项目的成功做好了准备。
关于我:我是一名分析顾问,也是当地一所商学院“人工智能管理”研究的主任。我的使命是让数据科学家(再次)开心,并帮助组织利用人工智能创造商业价值。 在这里报名我的快讯。
评估组织对数据科学理解的五个 W
蒂姆·高在 Unsplash 上拍摄的照片
如何面试一个有潜力的组织
一个在数据科学领域不断被提起的话题:想要雇佣数据科学家的公司不知道为什么。组织意识到与优秀的 DS 团队相关的 R.O.I .改进和成本降低,但是许多组织并不知道从他们的业务角度来看成功是什么样的。他们只是拿出几十万美元的薪水,给数据科学家提供几个职位空缺,并给出通用的工作描述。
这就是你在大学二年级被迫上的写作课的回报。在接受一个可能有风险的 DS 职位之前,确保你在面试中问了正确的问题……五个 W 会有帮助(谁、什么、何时、何地、为什么)。我跳过“如何”,因为在大多数情况下,如何的问题可以用 5 w 来涵盖。
照片由 Masaaki Komori 在 Unsplash 上拍摄
谁
“谁”问题将揭示组织的利益相关者。一些需要考虑的大问题:
Who are the final users?
Who is going to approve these solutions?
Who do we report to?
什么
“什么”问题将回答整个 DS 流程的许多方面:
What is/are the problems and/or pain points?
What resources are available to us?
What known data issues exist?
What other departments can we consult?
What does success look like?
What are the ways results are verified?
What is it worth to solve the problem?
照片由伊莎贝拉·克里斯蒂娜在 Unsplash 拍摄
当
“何时”问题将回答时间表和截止日期问题:
When is/are the project(s) due?
When will the data be sufficient (if insufficient)?
When are progress reports taken place?
When can results be verified?
埃利奥·桑多斯在 Unsplash 上拍摄的照片
哪里
“在哪里”问题将找到资源位置的答案:
Where can we retrieve _______ data?
Where can we store ________ data?
Where is the process currently?
为什么
“为什么”问题可以揭示商业实践的背景:
Why is this process currently set up this way?
Why is this information important/proprietary/sensitive?
Why was this equipment/software/cloud service mentioned?
招聘人员或典型的人力资源经理可能无法回答这些问题。保留一份一般性问题的清单,并在你进入面试“链条”时把它们划掉。招聘经理会知道很多答案,也许公司会让你接触那些能回答这些问题的人。
问正确的问题会让你在潜在雇主的眼中看起来像一个专业人士,会发出危险信号或缓解你的担忧,也许还会透露出该组织是否了解他们自己的数据以及了解到什么程度。它允许您将自己作为一项业务资产,而不仅仅是一名数据科学家。
古德哈特定律的四种味道
作者图片
古德哈特定律是以英国经济学家查尔斯·古德哈特命名的一句名言,通常是这样说的:“当一项措施成为目标时,它就不再是一个好的措施。”
商人、经理和数据分析师都对这个想法感兴趣,这是有充分理由的:公司通常使用指标来运营,没有什么比善意的指标变坏更糟糕的了。
一个著名的例子就是现在所谓的“T2 眼镜蛇效应”。故事是这样的:在英国统治下的印度,殖民政府担心德里有毒眼镜蛇的数量。政府认为招募当地民众来努力减少蛇的数量是一个好主意,并开始为每一条送到政府门口的死眼镜蛇提供奖金。
最初,这是一个成功的策略:人们带着大量被宰杀的蛇进来。但是随着时间的推移,有事业心的人开始饲养眼镜蛇,打算以后杀死它们,以获得额外的收入。
当英国政府发现这一点时,他们取消了奖金,眼镜蛇饲养者将眼镜蛇放归野外,德里经历了带头巾蛇的繁荣。
因此,Raj 的眼镜蛇问题并不比它开始时更好。
古德哈特定律的四种形式
今天,我们知道古德哈特定律有四种类型。大卫·曼海姆和斯科特·加拉布兰特在他们的论文 中列出了这些味道,对古德哈特定律的变体进行了分类;曼海姆后来写了另一篇名为 构建更少缺陷的指标 的论文,他通过慕尼黑个人 RePEc 档案馆分发了这篇论文。(我应该指出,这些论文都没有经过同行评议,但我不认为这有损它们的价值。)
在他们的论文中,Manheim 和 Garrabrant 以一种极其一般化的方式展示了他们对这四个类别的看法——一旦你想到古德哈特定律的应用,这是有意义的。例如,Manheim 和 Garrabrant 对这一想法对人工智能研究的影响很感兴趣(想象一下,如果你告诉一个超级智能人工智能优化回形针的制造,它决定液化人类以便生产更多的回形针……),但对古德哈特定律的更好理解广泛适用于公共政策、公司管理和激励系统设计。
本帖是外行人对四味的总结;这并不意味着本文中所有子案例的详尽叙述。但我认为,对这四个阶段的广泛理解应该对普通商人有用。让我们开始吧。
回归古德哈特
古德哈特定律的第一种味道是唯一无法避免的。
让我们想象一下,你必须为一份工作雇用候选人。你真正想衡量的是他们未来的工作表现——但你不能在面试中直接衡量。然后,你了解到智商和工作表现的相关系数约为 0.6。你决定进行智商测试。什么会出错?
起初,测试是成功的——你的公司成功地雇佣了比通过旧流程雇佣的人更优秀的人。受此鼓舞,你慢慢开始优化你的招聘,只考虑智商:例如,你宣传你的公司非常有选择性,非常适合工作,充满了聪明人,等等。但是过了一段时间,你会意识到智商最高的人往往比一些高于平均水平的候选人表现更差。这些高智商人群中的一些人很难共事!恭喜你:你刚刚经历了倒退的古德哈特。
回归古德哈特的出现是因为你用来代表你的目标的衡量标准与那个目标不完全相关。在我们上面的例子中,智商与工作表现的相关性为 0.6,按照社会科学的标准,这是一个很好的相关性,但这也意味着还有其他个因素对工作表现有影响。仅仅通过优化智商,你可能会得到次优的结果,因为你忽略了其他因素。
为了理解为什么这可能是真的,让我们假设认真的心理特质也是未来工作表现的预测因素(是,以防你想知道)。如果你已经为超高智商的人做了优化,你实际上是从一小群人中挑选,因为在任何人群中,超高智商的人都很少。你从那个小圈子里挑选出一个和都有高度责任心的人的几率真的很低;因此,我们应该看到这样一个结果:工作表现最好的人智商高于平均水平,但智商最高的人并没有最好的工作表现(因为他们不太可能也有高度的责任心,而责任心有助于工作表现)。这种效应有时被称为“尾巴分开”。
在实践中,回归古德哈特是不可能避免的,因为几乎每一个你能想到的测量都是你想要测量的真实事物的不完美反映。如果这个标准变成了一个目标,那么你很可能会偏离你真正的目标。
你会怎么做?一个解决方案可能是将对立的指标配对,就像传奇的英特尔 CEO 安迪·格罗夫曾经建议的那样。但是另一种方法,曼海姆建议的方法,是寻找对你真正目标的更精确的测量——说起来容易,做起来难!
埃斯特拉尔·古德哈特
在正常情况下,当你选择一个与你的目标相关的度量时,就会出现极端的古德哈特。但是采用这种方法会让你优化这种方法,在这种方法的极端情况下,与你目标的关系会破裂。
Garrabrant 举了一个我们与糖的关系的例子:人类进化到喜欢糖,因为在我们祖先的环境中,糖与卡路里相关。这在我们猎狮的时候非常有效;然而,今天,同样的优化导致我们喝可乐,吃多力多滋,滑向肥胖。
在机器学习中,这有时是由于“欠适应”而发生的。例如,两个变量之间的关系被假设为低次多项式,因为高阶多项式项在观察空间中很小。然后,基于这种度量的选择会向高阶项更重要的区域移动,因此使用机器学习系统会产生古德哈特效应。
因果古德哈特
你是一所高中的校长。你了解到高中成绩好的学生在大学考试中表现更好。你得出结论,帮助你的孩子在高中考试中取得好成绩会带来好事情,所以你推出了一个项目来教他们考试技巧。你也给你的班主任施加压力,引导学生学习更简单的科目,因为这样可以提高他们的平均考试成绩。
它不起作用。你刚刚经历了因果古德哈特。
另一个更琐碎的例子:你是一个孩子。你读到篮球运动员更有可能长得高。你想变高。所以你打篮球。
古德哈特定律的这种特殊风格很容易理解。这个想法是,当两者实际上是相关的(并且可能是由第三个因素引起的)时,你认为一个度量产生一个结果。自然地,如果你优化了其中一个,你通常不会影响你想要的结果。在我们上面的考试例子中,很明显,高中考试预测大学考试只是因为它们反映了学生的智力、知识和努力程度(以及其他因素)。试图通过榨取高中应试能力来取得更好的大学成绩,充其量用处有限。
当人们说“相关性并不意味着因果关系”时,这就是他们的意思
对抗性古德哈特
对抗性古德哈特是英国统治下的眼镜蛇的故事。
维基百科关于眼镜蛇效应的文章有很多其他有趣的例子,包括这个:
1902 年,河内的法国殖民政府创立了一项赏金计划,每杀死一只老鼠就奖励一笔钱。为了获得奖金,人们需要提供一只老鼠的断尾。
然而,殖民地官员开始注意到河内没有尾巴的老鼠。越南捕鼠人会捕捉老鼠,切断它们的尾巴,然后将它们放回下水道,这样它们就可以繁殖并产生更多的老鼠,从而增加捕鼠人的收入。
对抗性古德哈特的一个相关例子是坎贝尔定律:
社会决策中使用的量化社会指标越多,它就越容易受到腐败压力的影响,也就越容易扭曲和腐蚀它所要监控的社会进程
你可以想象这样一种情况,一个政府说它的所有政策必须基于“证据”,因此这导致了巨大的压力(和大量的激励!)让系统中的各种参与者操纵、润色和篡改“证据”,以证明政府政策的合理性。
这里的一般思想是,代理可能以破坏指标目标的方式优化指标(眼镜蛇效应),或者代理可能选择以降低指标预测效应的方式优化指标。
解决办法?曼海姆建议进行“预验尸”,比如,“好吧,我们将要选择的政策在未来出了问题,发生了什么?”他指出,在一个群体中,不需要有那么多人,就会有人想出一个似乎很可怕的场景。
现在你知道了:古德哈特定律的四种口味。如果这篇文章没有让你想起什么,那么请记住这一点:如果你想让你的后院少一些蛇,就不要花钱买死蛇。
原载于 2020 年 10 月 14 日 我们的博客 。
四个 F
如何为您的数据科学项目定义高质量的研究问题?
艾米丽·莫特在 Unsplash 上的照片
我教授数据科学方面的大学三年级课程。这不是典型的讲座、实习和辅导课程。讲座很少,而且更多的是关于数据科学的实践,而不是书本知识。在为期一周的数据科学训练营,中,我们一起从头到尾完成一个样本项目,学生们通过自己创作的数据科学项目获得支持。这对系统来说可能是一个冲击,因为他们更习惯于预定义的项目,并遵循精确的规范,所以从头定义自己的项目的想法既令人生畏又令人兴奋。
根据我的经验,他们面临的最大挑战不是编码,而是他们希望追求的研究问题的定义。做对了有助于塑造整个项目,通常会带来好的结果,但做错了会让学生陷入永无止境的清晰和目的的斗争中,这很少会导致一个突出的项目。
在这篇文章中,我试图捕捉我早期给学生的一些建议:在一个研究课题中寻找什么;以及如何思考他们的研究目标;以及如何将其转化为一个适当的研究问题,在他们的项目中很好地为他们服务。虽然在我写这篇文章时,我想到了我的第三年,但我不认为这些建议仅限于他们。当然,我经常就类似的问题为我的研究生和其他研究人员提供咨询,因为他们在确立研究目标时面临许多相同的挑战。因此,我认为任何从事数据驱动项目或任务的人都会对这篇文章感兴趣。
四个 F
从一份容易记起的清单开始总是好的。在营销方面,他们有四个 P(产品、价格、促销、地点)。我能想到的最好的是四个 F——迷人的、专注的、可证伪的、可行的——好吧,这并不是脱口而出,但它很好地抓住了在定义你的研究和提出研究问题时需要考虑的重要问题。
迷人的
试着找一个让你着迷的话题。如果你不在乎你选择的主题,那么没有人会在乎。此外,你不会发现工作令人满意,你不会喜欢做它,你产生的结果充其量也就是平庸。它不必是一个如此重要和引人注目的主题,以至于每个人都同意它需要得到回答。说实话,这样的问题很少,而且追求显而易见的候选人冒着你的工作被认为是衍生产品的风险!
我永远鼓励我的学生追求他们自己的兴趣爱好。毕竟,这些是让他们兴奋的话题,如果他们兴奋,那么其他人也可能会兴奋。追求自己的兴趣也带来了额外的优势,即你对某个主题有一些专业知识,这可以给你一个宝贵的开端。这通常也会让你更容易凭直觉发现一个有趣的研究问题,你的直觉可能足以在过程的早期阶段评估你的发现是否合理。这可以给你时间来调整你的研究或重新计划。
无论你选择什么主题,在开始的时候花时间思考一下为什么你会对它感兴趣,以及谁会对它感兴趣。这将有助于你更好地理解自己的动机,并使你能够更好地为他人激励你的工作。请放心,即使你选择了一个非常小众的主题,你也会发现会有其他人对它感兴趣,这是我们这个互联世界的本质。你对它的热情会闪闪发光,这可以成为吸引他人注意力的催化剂。
举个例子,几年前我对跑步越来越感兴趣,并开始探索网上收集的马拉松数据。这是我自己感兴趣的事情,但我很快发现我正在探索的问题也是其他人感兴趣的,开始时是我核心研究之外的个人项目,后来成为我当前工作的主要研究主题之一,导致了大量的博客文章、科学文章,甚至一些媒体邀请。我从事这项工作是因为我对它感兴趣,我想知道我所提问题的答案。但是当我谈论这项工作,当我写下它时,其他人也变得感兴趣,揭示了新的机会和更多的研究问题。
聚焦的
一个好的研究问题应该集中在一个定义明确的问题上,这个问题足够具体,可以用一种彻底而严谨的方式来回答。但是,虽然一个研究问题应该集中,它不需要以那种方式开始。事实上,以问一个大而大胆的问题开始可能是一个有用的练习——也许这个问题会有广泛的吸引力——但时间会将你的注意力集中在这个初始问题的更精确和更实际的版本上。
几年前,我对这个问题很感兴趣:好莱坞会毁掉好书吗?这是朋友间辩论的常见来源,这使它变得有趣和有吸引力——每个人都了解书籍和电影,每个人都对这个话题有看法——但这个问题到底是什么意思?我把它翻译成一个更窄的版本:电影的收视率通常比改编自的书的收视率好还是差?现在,我们越来越专注于促进数据科学的发展。我们在谈论数字(收视率)和比较书籍和电影的(平均)收视率,但我们仍然可以抓住我们开始时提出的大而大胆的问题的本质。
另一个例子是,在我的马拉松工作中,我最感兴趣的话题之一是我应该如何调整自己的比赛节奏,以最大限度地提高我的成绩。因此,一个大胆的大问题变成了:马拉松比赛中的最佳配速策略是什么?但是这个问题太宽泛太模糊了,没有用,我需要一个更集中的关于速度的问题。我意识到一个常见的马拉松建议,“不要开始太快”,这导致了对数据提出更实际的问题:在马拉松中开始太快会影响你的表现吗?这要好得多,因为它通过比较跑步者在比赛开始时的速度和他们的总完成时间,提出了一种实用的前进方式。**
这又一次将我们带回到数字、平均值和比较——数据科学的东西,具体而可行——这意味着我们可以在脑海中有一个具体的目的地,如果没有一套精确的方向,至少我们有一张地图和一个指南针!
可证伪的
可证伪性 或可反驳性是科学哲学中的一个关键概念,由卡尔·波普尔在其著作Logik der Forschung(1934)中首次提出。简单地说,如果一个陈述可以被证据(或数据)反驳,那么它就是可证伪的。经典的例子是,“所有的天鹅都是白色的,”这是可证伪的,因为我们可以观察到黑天鹅的存在。可证伪性通过提供一种将观察和数据转化为可靠的科学结论的原则性方法,支撑了 科学方法 。
“那(你的假设)不仅不对;它甚至没有错。”—沃尔夫冈·泡利(1945 年诺贝尔物理学奖)
在实践中,这意味着你应该将你的研究问题框定为一个可证伪的假设,通过提出一个可能是真或假的陈述,并以一种可以导致能够反驳它的实验或分析的方式。
这有助于我们避免模糊的研究问题,例如“马拉松的最佳配速策略是什么?”并迫使我们制定更有意义的计划,比如“出发太快会影响你的马拉松成绩吗?”或者,更好的是,作为一个可证伪的陈述,“与起跑不太快的跑步者相比,起跑太快的跑步者完成时间较慢。”现在我们可以通过使用关于开始速度和结束时间的数据来反驳这种说法;如果快速启动者的平均完成时间与慢速启动者的平均完成时间没有区别,那么,在其他条件相同的情况下,这种说法将是错误的。
如果你认为这更多的是为了迎合科学哲学,而不是数据科学的实用性,那么你就错了。将你的研究问题框定为一个可证伪的假设,为你的工作提供了一个更坚实的基础,这带来了许多重要的实际好处。特别是,现代统计技术基于这种类型的 假设检验 ,当从你的工作中得出结论的时候,你会发现它更适合你需要用来验证你的发现不是偶然的统计检验类型;这是解释你的实验结果的重要一步。
可能的
最后,你必须确定你的研究问题是否可行?简而言之,用你现有的数据,在可利用的时间内,用你学到的技能,能回答这个问题吗?通常,如果你有合适的数据集,那么你就能够设计出一个符合你的时间框架和技能的研究问题。
然而,我经常看到学生在他们的项目中脱轨,因为他们意识到他们的数据集缺少一些回答他们的研究问题所需的重要信息时已经太晚了。通常这是因为问题没有被正确定义,杜平让他们认为他们的数据集足以满足他们的需求,直到测试的时候。
当我在研究好莱坞是否有毁掉好书的倾向时,我知道我需要电影评级和书籍评级。 IMDB 提供了大规模的 数据转储 电影数据,包括收视率, Goodreads 提供了一个方便的 API 来获取图书数据和收视率。然而,几百万的电影和书籍收视率本身是不够的。我需要能够识别改编自书籍的电影,并且我需要将这些电影与相应的书籍对应起来,以便可以在同类的基础上比较评级。这是该项目的最具挑战性的方面。我需要验证 IMDB 数据中是否包含了某部电影改编自某本书的信息;它通过写作学分以各种方式做到了。我还需要测试我是否能可靠地匹配电影和书籍;我可以用 Goodreads 搜索 API 搜索电影名称、年份和作者信息。
请记住,您不能从无到有,因此,如果您需要特定的数据来回答您的研究问题,那么您需要确保它在您的数据集中可用,或者它可以从可用数据中导出。有时,即使数据没有丢失,精度也是一个问题。在我的快速启动马拉松工作中,我需要测量马拉松运动员的起跑速度,但我的数据集只包括 5 公里分段时间,这意味着我只能计算每 5 公里的速度。这就足够了吗?将第一个 5 公里视为比赛的起点有意义吗?在进行了几次早期测试后,我能够得出结论,5 公里的距离足够了,这是一个重要的信心提升,让我可以继续下去;顺便说一句,你可以在这里找到这场马拉松比赛的结果。
我告诉我的学生,这一可行性步骤是他们早期工作中最重要的方面之一,因为我亲眼目睹过,而且经常看到,他们如何欺骗自己相信他们的数据是充分的,但后来却发现缺少了一些重要的信息。事实上,在我自己的工作中,这是一个很难学到的教训,但在现阶段我才刚刚学会。
结论
我确定一个合适的研究问题是任何数据科学项目中最重要的任务之一。做错了会导致严重的问题,而做对了不仅有助于保证项目成功,还能从一开始就指导你的工作。当开始一个新的研究项目时,我给学生的建议可以总结如下:
- 选择一个让你着迷的话题,即使它是一个小众话题,有时,尤其是如果它是一个小众话题,因为“新奇!”
- 专注 你的研究目标要一次一个问题。
- 把你最初的研究问题转化成一个具体的 可证伪的 假设。
- 根据你现有的数据,核实你的研究问题是否可行。
我相信,遵循这些步骤将更有可能产生一个成功的数据科学项目,并且会更加令人满意和愉快。
机器学习中的四种“纯”学习风格
构建机器学习概念
映射监督、自我监督、非监督和强化学习
在专栏“构建机器学习概念”中,我试图从机器学习(ML)空间中提取概念,并将它们投射到新的、可能不寻常的框架中,以提供新的视角。该内容面向数据科学社区的人们,以及对 ML 领域感兴趣的精通技术的个人。
由作者创建。包括由 Vectra AI 和 taviphoto 通过 iStock 制作的图形。
介绍
Back 2015 年,当我开始在斯坦福大学学习 ML 的时候,围绕它的概念和定义是相当结构化的,并且很容易描绘出来。随着近年来深度学习的快速发展,所使用的术语和概念的种类也大大增加了。这可能会让希望更多了解该领域的新手感到沮丧和困惑。
撰写这一期“构建机器学习概念”的导火索是最近自然语言处理、 (NLP)和计算机视觉的突破带来的概念混乱。人们开始意识到,一些以前被认为是无监督学习的技术应该被更恰当地命名为自监督学习。让我们详述一下。
监督、自我监督、非监督和强化学习
当人们谈论机器学习的不同形式时,他们通常将监督学习 (SL)、非监督学习 (UnSL)和强化学习 (RL)称为三种学习风格。有时,我们会添加半监督学习 (SemiSL)到组合中,结合 SL 和 UnSL 的元素。2018 年,一种新的 NLP 算法开始流行,导致著名研究员 Yann LeCun 在 2019 年提出了自我监督学习(SelfSL)的概念。
轻量级定义——最初的四种学习风格
- SL: 我们使用数据集,在给定其他特征(例如,表格)或原始输入(例如,图像)的情况下,我们希望预测特定目标。这可以采取分类的形式,(预测一个分类值——“这是一只猫还是一只狗?”)或者回归(预测一个数值——“这个图像有多像猫?”)
- UnSL: 现在假设我们只有原始输入(例如,表格中只有一些没有目标的用户数据,或者大量没有相关信息的图像)。我们的目标是寻找以前未被发现的模式,例如,聚类或结构,它们提供了新的见解,可以指导我们的决策。
- RL: 通常从群体中脱颖而出,因为它不是在预先收集的数据集上工作,而是试图通过采取行动和观察回报来掌握环境中的任务。除非我们明确地声明一个奖励函数来激励代理人做出相应的行为,否则它不知道在给定的环境中该做什么。视频游戏是一个完美的例子:玩家(代理人)试图通过与视频游戏(环境)互动来最大化她的分数(奖励)。
- SemiSL: 通常作为第四种学习风格加入,它适用于一个有特定目标的数据集和另一个通常更大的没有目标的数据集。目标是在来自已标记数据点的知识的帮助下推断未标记数据点的标记,从而建立最佳可能模型以将输入映射到目标。假设您可以访问一台制造机器的数据点,这些数据点可以分为两个集群。从带标签的数据集中,您知道所有与故障相关的未知数据点都属于“A”类,所有正常状态都属于“B”类;因此,假设“A”上的所有点都是关键点,而“B”上的点不是关键点。
为 SelfSL 放弃半 SL
关于这四种学习风格,有两点值得一提:
正如已经暗示的,最近在计算机视觉和 NLP 中完成的大多数 UnSL 被更好地描述为 SelfSL。这种新的学习方式不是使用给定的基本事实,而是使用包含在训练数据本身中的信息来监督的。然而,UnSL 算法的“旧家族”仍然有一部分是真正无监督的,它们使用数据点之间的一些接近度或接近度来决定什么是良好的拟合(并指导我们的损失函数)。
此外,如果你仔细想想,SemiSL 不应该是这些“纯”学习风格的一部分。第一,它是两种“纯”学习方式的混合;第二,它的基本设置包括两个不同的数据集,一个有标签,一个无标签。因此,我们为结构化机器学习概念系列的第二部分保存了 SemiSL,在那里我们将更详细地讨论处理未标记数据。
轻量级定义—一种新的划分
- SelfSL: 我们只有原始输入(例如,图像或大量文本),我们希望捕捉其中包含的隐含信息。我们通过使用(部分)原始输入作为目标来做到这一点。在自动编码器中,我们使用“重建损失”,即将解码图像与原始输入进行比较。在大规模语言模型中,我们“隐藏”句子的一部分,然后仅使用周围的词(例如,嫁给 ____ 她的丈夫→[爱])将它用作预测目标。
- UnSL(重新访问):与 SelfSL 相反,我们不是基于一些“隐藏的”地面事实来测量我们的模型的“适合度”,而是基于“转换的输入”的隐含接近度,即特征空间中数据点的距离。我们可以影响如何定义这种适合度,例如,如果我们希望群集是密集的或连续链接的,但邻近目标保持不变。例如,通过特定平台上的行为对用户进行聚类,并使用分配的聚类来指导您的营销策略。
2x2 矩阵
用于 SL、RL、SelfSL 和 UnSL 的 2x2 矩阵。由作者创建。
我提出一个简单的 2x2 矩阵,将 SL、UnSL、SelfSL、& RL 映射到两个轴上,回答以下问题:
地面真相存在吗?
是的 对于 SL 和 SelfSL,我们使用一个基本事实来构建我们的损失函数和指标。无论是 SL 的图像上的“猫”标签,驱动“分类的交叉熵损失”和“准确性”,还是 SelfSL 的句子中的“隐藏的”单词(嫁[爱]她的丈夫),其中我们使用“负的对数似然”作为损失和度量困惑。
没有
对于 UnSL 和 RL 来说,没有这样的地面真相。我们有描述“适合度”或“期望行为”的标准,但没有类似于“准确性”的标准。例如,在 UnSL 的“ k 均值聚类”中,我们可以测量“到聚类均值的平均距离”,在 RL 中,我们试图最大化我们从环境中获得的“累积回报”。
目标是明确给出的还是隐含给出的?
外显 在 SL 和 RL 中,我们有一个明确的选择,我们想从数据或我们的代理中得到什么。对于 SL 来说,我们的选择是通过重新分配标签,将“猫狗品种分类”问题转化为简单的“猫狗分类”问题。当使用 RL 来掌握多人电脑游戏时,我们可以选择通过奖励为集体利益而采取的行动来激励我们的代理充当团队成员,或者通过单独奖励个人行动来激励我们的代理充当利己主义者。
然而,我们不能外在地支配一个自我形象或语言的本质。我们当然可以改变一些细节,但“重建损失”总是会比较两个图像,对于语言模型,我们总是会通过查看句子本身来完成学习任务。使用经典的 UnSL,我们隐含地陷入寻找彼此接近的数据点,例如,两个用户在社交媒体平台上留下相似的行为数据。
关闭
在这篇文章中,我们将 UnSL 和 SelfSL 分开,将 SemiSL 排除在外,重新定义了 ML 中的“纯”学习风格。这就给我们带来了 SL、UnSL、SelfSL、RL 这四个概念,我们可以把它们安排在一个简单的框架里(充分披露:我确实做过一段时间的咨询工作)。2x2 矩阵根据是否存在基本事实以及目标是明确还是隐含给出来构建它们。
如果你有任何其他非传统的映射,对此事的想法,或者对我们在 Luminovo 的工作感兴趣,我很乐意收到你的来信。可以留言或者在 Linkedin 联系我。
构建机器学习概念的第二部分是关于在机器学习中处理未标记的数据。请随意查看。
法国人工智能国家战略
法国巴黎凯旋门图片由 @willianwest 提供
最有意义的策略
法国的国家战略叫做:“一个有意义的人工智能:走向法国和欧洲的战略”写于 2017 年 9 月 8 日至 2018 年 3 月 8 日。法国提出的人工智能策略可能是我最喜欢的策略之一。它把焦点放在正确的事情上:解决气候危机。
“……人工智能领域的经济发展需要将生态作为其首要任务。如上所述,这对该行业至关重要:人工智能的创新可以用来优化能源消耗和回收,并更好地理解人类活动对环境的影响。”
我以前写过一篇关于法国人工智能战略的文章,研究了它如何解决气候危机,认为它是以相对较好的方式处理这个主题的战略之一。
法国人工智能战略如何应对气候危机?
medium.com](https://medium.com/dataseries/the-french-ai-strategy-and-the-climate-crisis-4890b22067a5)
该战略提出,人工智能不应被用来加剧不平等等问题,而是应该帮助解决这些问题。
此外,该战略明确指出,有意义的人工智能必须是可解释的:
“一个有意义的人工智能最终意味着人工智能应该是可解释的:向公众解释这项技术,以揭开它的神秘面纱——从这个角度来看,媒体的作用至关重要——但也通过将研究扩展到可解释性本身来解释人工智能。人工智能专家自己经常坚持认为,在这个问题上可以取得重大进展。
该战略侧重于六个部分:
- 基于数据的经济政策
- 走向敏捷和可行的研究
- 预测和控制对工作和就业的影响
- 利用人工智能帮助创造更加生态化的经济
- AI 有哪些伦理?
- 包容多样的人工智能
我将从每个类别中提出几个要点。
1.基于数据的经济政策
- 公共当局必须通过使数据成为一种公共产品来引入生产、共享和管理数据的新方法。
- 他们的工作小组建议避免分散精力,而是集中在法国的四个关键部门:医疗保健、环境、交通运输和国防安全。他们希望根据不同的主要部门挑战来构建生态系统。
- 建立共享的部门平台,可以访问对人工智能发展有用的数据,以及软件资源和广泛的计算基础设施。
- 创新沙盒,涉及三个关键特征:暂时放松某些监管限制,以便让创新自由发展,支持参与者履行其义务,以及最后用于实地测试的资源。
- 需要审查公共采购:国家、公共当局和地方机构每年的预算估计接近 700 亿欧元,而且没有充分面向创新。
2.促进敏捷和支持研究
- 该国受到美国重量级人才外流的打击,人工智能和数据科学的培训能力远远达不到要求。
- 在一定数量的公共高等教育机构内建立一个独立但协调的跨学科人工智能研究所网络。
- 创造一个有吸引力的工作环境,以有效应对来自“大技术”的竞争。因此,它们应该被建立为人工智能“自由区”,全面大幅减少行政手续,大幅增加工资,并支持提高生活质量。
- 人工智能研究机构需要拥有所需的计算资源,以与私人主导行为者几乎无限的资源竞争。为了做到这一点,我们的任务组因此建议设置一台专门为人工智能使用而设计的超级计算机,并在研究人员和他们的经济合作伙伴共享计划期间专门用于他们。
- 在职业生涯的早期阶段(人工智能研究人员)将工资翻倍至少是一个重要的起点,否则对高等教育和学术研究感兴趣的年轻毕业生将肯定会枯竭。
3.评估人工智能对未来工作和劳动力市场的影响,并试验适当的政策反应
- 探究人类和人工智能之间的互补性。劳资关系的转变,以充分整合数字挑战并开发“积极互补指数”。
- 正规教育和终身学习应该彻底改革,以促进实验教学方法,帮助毕业生和员工发展日益重要的创新技能。
- 至关重要的是,要创造一个空间,使未来的能力、宏观经济预测和对用途变化的分析能够与针对某些类别工人的行动所体现的具体实验能力联系起来。
- 因此,可以创建一个永久性的结构,在劳动和职业培训公共政策中引领这些主题,发挥双重作用:预测和实验。
- 一种不同的方法,这种方法在一定程度上背离了当前的策略,即员工独自对自己的职业发展负责。
- 他们建议与工业伙伴就如何在整个价值链中分享附加值展开对话。
- 培养每个学位层次的人工智能人才。
4.人工智能致力于更生态的经济
- 为人工智能创造一个有意义的角色也意味着解决其可持续性问题,特别是从生态的角度。
- 设计自然生态的人工智能,并用它来解决人类活动对环境的影响。这是一个紧迫的问题,因为与数字技术和人工智能发展内在相关的世界数据存储需求,可能会超过 2040 年全球可用的硅产量。
- 首要任务是考虑人工智能对实现联合国可持续发展目标的影响,它如何对某些目标施加压力,以及它如何加速其他目标。
- 消费者也必须在让这些技术更加环保的过程中发挥作用。因此,我们的工作小组建议创建一个平台,专门评估智能数字解决方案的环境影响。这个平台应该包括智能计算器。
- 神经形态技术可以节省大量能源,法国已经是这一领域的先驱。
- 公共当局也必须采取行动,使价值链更加绿色,并支持欧洲云产业促进其生态转型。还可以设立一个认证程序来奖励最杰出的解决方案。
- 最后,让人工智能价值链更加绿色显然需要开放硬件和开放软件。
5.人工智能的伦理思考
- 解释机器学习算法已经成为一件非常紧迫的事情,现在实际上是一个独立的研究领域,必须得到公共当局的支持。
- 三个领域尤其需要额外的关注:显然是更易解释的模型的产生,而且是更易理解的用户界面的产生,以及对用于产生令人满意的解释的认知机制的理解。
- 促进人工智能系统的审计是至关重要的。这可能涉及建立一个注册公共专家小组,他们可以对算法和数据库进行审计,并使用任何所需的方法进行测试。
- 让研究人员、工程师和企业主从培训一开始就意识到数字技术发展中涉及的道德问题是很重要的。这方面是当今工程学院和大学信息技术课程所缺乏的,然而这些未来的毕业生将面临的道德问题的广度和复杂性在继续增长。
- 可以引入歧视影响评估,类似于《一般数据保护条例》已经强制要求对某些数据处理进行的隐私影响评估。
- 我们还必须考虑自动化在人类决策中的作用:在某些领域,人类的判断尽管容易出错,但一定不能被机器取代。
- 他们的战略建议创建一个对社会开放的数字技术和人工智能伦理委员会。
6.包容多样的人工智能
- 人工智能绝不能成为排斥部分人口的新方式。
- 尽管科学和技术部门缓慢但稳定地女性化,但数字技术仍然是一个例外,性别平衡仍然非常遥远。
- 缺乏多样性可能导致算法在程序设计、数据分析和结果解释中重现经常是无意识的认知偏差。
- 一项激励政策旨在到 2020 年实现大学、商学院及其预科班数字学科领域 40%的女生比例。
- 他们建议采用自动化系统来帮助管理行政手续,旨在提高公众对行政法规的认识,以及这些法规如何适用于每个人的个人情况。
- 至关重要的是,公共当局支持在社会领域发展基于人工智能的倡议。人工智能主导的创新能力仍然非常集中在少数公司中。撇开医疗保健不谈,社会领域只获得私人投资的一小部分。
这是#500daysofAI,您正在阅读第 225 条。500 天来,我每天都在写一篇关于或与人工智能相关的新文章。我目前 100 天 200-300 的重点是人工智能的国家和国际战略。
本文所有插图均来自 Undraw 。
强化学习的基础
马尔可夫决策过程、策略、价值函数、贝尔曼方程和动态规划实现
列宁·艾斯特拉达在 Unsplash 上的照片
强化学习可能是最相关的科学方法之一,类似于人类学习事物的方式。每天,我们,学习者,通过与我们的环境互动来学习,以知道在某些情况下该做什么,知道我们的行为的后果,等等。
当我们还是婴儿的时候,我们不知道摸热水壶会伤手。然而,当我们知道环境是如何对我们的行为做出反应的时候,也就是说,触摸热水壶会伤到我们的手,于是我们学会了不要触摸热水壶。这说明了强化学习的基本理论。
强化学习是学习做什么来最大化数字奖励。这意味着学习者应该通过尝试来发现哪些行为从长远来看能产生最高的回报。
在这篇文章中,我想讨论强化学习背后的基础知识,包括:马尔可夫决策过程,政策,价值函数,贝尔曼方程,当然,还有动态规划。
马尔可夫决策过程
马尔可夫决策过程是我们在强化学习中试图解决的基本问题。但是,马尔可夫决策过程的定义是什么?
马尔可夫决策过程或 MDP 是主体和 e 环境之间顺序交互的公式化。
在这里,学习者和决策者被称为代理,它与之交互的东西被称为环境。在 MDP,代理人做出某些决定或行动,然后环境通过给代理人一个新的情况或状态以及立即的奖励来做出响应。
马尔可夫决策过程中主体与环境的相互作用
在强化学习中,主体的主要目标是做出一个决策或行动,使其从环境中获得的长期回报总量最大化。
比方说,我们想训练一个机器人下棋。每当机器人赢得比赛,奖励将是+1,如果它输了比赛,奖励将是-1。在另一个例子中,如果我们想训练机器人从迷宫中逃脱,那么在逃脱之前,随着时间的流逝,奖励会减少-1。
强化学习的回报是你如何向代理传达你希望它实现什么,而不是你希望它如何实现。
现在的问题是,我们如何计算代理人在一系列行动后所获得的累计奖励金额?累积奖励的数学公式定义如下。
上图中, R 是代理人在每个动作序列中的报酬, G 是的累计报酬或的预期收益。代理人在强化学习中的目标是最大化这个期望收益 G 。
贴现预期收益
然而,上面的等式只适用于当我们有一个插曲 MDP 问题,这意味着代理人-环境相互作用的序列是插曲或有限的。如果我们有一个情况,代理-环境之间的相互作用是连续的和无限的?
假设我们有一个问题,代理像空调一样工作,它的任务是在给定的情况或状态下调节温度。在这个问题中:
- 状态:当前温度,房间中的人数,一天中的时间。
- 动作:提高或降低室温。
- 奖励: -如果房间里有一个人需要手动调节温度为 1,否则为 0。
为了避免负回报,代理人需要不断地学习并与环境互动,这意味着 MDP 序列没有尽头。为了解决这个来自代理人的连续任务,我们可以使用贴现的预期收益。
在上式中,γ是贴现率,其值应在 0 ≤ γ ≤1 的范围内。
这个折扣率背后的直觉是,代理人在较早的序列中得到的回报将比它在几个序列后得到的回报更有价值。这个假设在现实生活中也有道理。由于通货膨胀,今天生活中的 1 欧元在几年后会比 1 欧元更值钱。
如果γ= 0,这意味着代理人是短视的,意味着它在下一个序列中对一个动作的即时奖励采取了更多的权重。
如果γ更接近于 1,这意味着代理人是有远见的,意味着它对未来的回报投入越来越多的权重。
有了贴现回报,只要报酬非零且γ < 1, the output of expected return would no longer be infinite.
Policy, Value Function, and Bellman Equation
Now we know that the goal of an agent in reinforcement learning is to maximize the cumulative reward. In order to maximize the reward, the agent needs to choose which action it needs to take in a given state such that it gets a high cumulative reward. The probability of an agent choosing a certain action in a given state is called 政策。
策略是代理在给定状态 s 下选择动作 A 的概率。
在强化学习中,一个策略通常用 π 来表示。这意味着 π(A|S) 是代理人选择动作 A 的概率,假设它处于状态 S 。
现在,如果一个代理处于状态 S 并且它遵循策略 π ,那么它的期望收益将被称为策略 π 的状态值函数。因此,状态值函数通常表示为 Vπ 。
类似于状态值函数,如果一个代理处于状态 S 并且它基于策略π确定它的下一个动作,那么它的期望收益将被称为策略π 的动作值函数。因此,动作值函数通常表示为 qπ 。
在某种意义上,价值函数和报酬有一些相似之处。然而,奖励指的是眼前的好处,而价值函数指的是长远的好处。因此,一个州可能具有较低的即时奖励,但具有较高的价值函数,因为它经常被具有较高奖励的其他州跟随。
为了计算价值函数,通常应用贝尔曼方程。
在强化学习中,贝尔曼方程通过将当前状态的值函数与未来状态的值相关联来工作。
数学上,贝尔曼方程可以写成如下形式。
从上面的数学方程可以看出,贝尔曼方程表达的是,它对所有可能的状态和任何给定状态下的未来回报进行平均,这取决于动态环境 p.
为了让我们更容易直观地理解贝尔曼方程实际上是如何工作的,让我们把它与我们的日常生活联系起来。
假设两个月前,你第一次学会了骑自行车。有一天当你骑自行车时,当你在满是沙子的路面上拉刹车时,自行车失去了平衡,使你滑倒并受伤。这意味着你从这次经历中得到了负回报。
一周后,你又骑上了自行车。当你在满是沙子的路面上骑它时,你会减慢速度。这是因为你知道当自行车失去平衡时,不好的事情会发生,即使这次你没有真正经历过。
最优策略和最优价值函数
每当我们试图解决强化学习任务时,我们都希望代理选择一个使累积回报最大化的行动。为了实现这一点,这意味着代理应该遵循一个策略,使我们刚刚讨论的价值函数最大化。在所有状态下使价值函数最大化的策略称为最优策略,通常定义为π*。
为了更好地理解最优策略,让我们看一下下图。
最佳策略定义
如上图所示,我们可以说,与π相比,π是最优策略,因为遵循策略π
的任何给定状态下的价值函数与策略π一样好,甚至更好。
如果我们有一个最优策略,那么我们实际上可以把贝尔曼方程改写成如下:
上面的最后一个方程叫做贝尔曼最优方程。注意,在上述等式的最终形式中,没有关于特定策略π的特定参考。贝尔曼最优方程基本上告诉我们,在最优政策下,一个状态的价值函数应该等于该状态下最佳行动的预期回报。
根据上面的等式,一旦我们知道了最优策略,就很容易找到最优状态值函数。然而,在现实生活中,我们往往不知道最优策略是什么。
为了找到最佳策略,通常应用动态规划算法。利用动态规划,每个状态的状态值函数将被迭代地评估,直到我们找到最优策略。
动态规划寻找最优策略
现在让我们深入研究动态规划背后的理论,寻找最优策略。在其核心,动态规划算法使用贝尔曼方程迭代做两件事:
- 政策评价
- 政策改进
政策评估是评估给定政策有多好的一个步骤。在该步骤中,计算任意策略 π 的状态值函数 Vπ 。我们已经看到,贝尔曼方程实际上帮助我们用如下的线性方程系统计算状态值函数:
利用动态规划,将基于贝尔曼方程迭代地逼近状态-值函数,直到值函数收敛于每个状态。价值函数的收敛近似可以称为给定策略的价值函数 Vπ 。
迭代策略评估
在我们找到给定策略的价值函数 Vπ 之后,我们需要改进策略。回想一下,我们可以定义一个最优策略,当且仅当在任何给定的状态下,一个策略的价值函数等于或大于其他策略。随着策略的改进,在任何给定的状态下都可以产生新的、严格更好的策略。
注意,在上面的等式中,我们使用在策略评估步骤中计算的 Vπ 来改进策略。如果我们应用上面的等式后策略没有改善,这意味着我们找到了最优策略。
总的来说,这两个步骤,策略评估和策略改进是使用动态编程迭代完成的。首先,在任何给定的策略下,计算相应的价值函数。然后,完善政策。利用改进的策略,计算下一个值函数,等等。如果一个策略与之前的迭代相比没有任何改进,这意味着我们已经为我们的问题找到了最优策略。
动态规划中的迭代策略评估和策略改进
实现动态规划以寻找最优策略
现在我们已经知道了所有关于动态编程和最优策略的理论,让我们用一个简单用例的代码来实现它。
假设我们想控制城市停车空间使用的增长需求。要做到这一点,我们需要做的是根据城市的偏好来控制停车系统的价格。总的来说,市议会有一个观点,即使用的停车位越多,社会福利越高。然而,市议会也倾向于至少留出一个位置供紧急情况下使用。
我们可以将上面的用例定义为马尔可夫决策过程(MDP ),其中:
- 状态:车位占用数量。
- 动作:停车费。
- 奖励:城市对形势的偏爱。
对于这个例子,让我们假设有十个停车位和四个不同的价格范围。这意味着我们有十一个状态(10 加 1,因为可以有没有停车位被占用的情况)和四个动作。
为了找到给定用例的最优策略,我们可以使用带有贝尔曼最优方程的动态规划。首先,我们评估政策,然后我们改进政策。我们反复执行这两个步骤,直到结果收敛。
首先,让我们定义一个函数来计算贝尔曼最优方程,如下所示。
上面的贝尔曼最优性方程评估任何给定状态下的价值函数。
接下来,让我们定义一个函数来改进策略。我们可以通过修改政策来改进政策。这意味着我们转换策略,使得该策略选择在给定状态下最大化价值函数的行为的概率为 1。
最后,我们可以将策略评估和策略改进打包到一个功能中。
现在,如果我们运行上面的函数,我们将得到以下结果:
从上面的结果中,我们可以看到价值函数随着被占用的停车位数量的增加而增加,除非所有的停车位都被占用。这是完全可以预料的,正如我们在用例中从市议会的偏好中可以看到的。
市议会的观点是,停车位用得越多,社会福利越高,他们更希望至少有一个停车位闲置。因此,停车位被占用得越多,价值函数与最后状态的距离就越高。
还要注意,当停车占用率高时(状态 9 和 10),动作从 0(最低价格值)变为 4(最高价格值)以避免完全占用率。
参考
本文中的材料受到了理查德·萨顿和安德鲁·巴尔托的《强化学习:入门书》以及阿尔伯塔大学 Coursera 上的《强化学习基础》课程的启发。
请务必阅读这本书或参加课程,深入了解强化学习的细节。
如果你想试试上面例子中的代码,你可以在我的 GitHub 页面找到它。
大 O 符号的基础
如何利用 Big-O 符号来衡量算法的性能和可伸缩性
纳丁·沙巴纳在 Unsplash 上拍摄的照片
在这个数据变得越来越大的时代,创建一个“有效”的算法来解决问题已经不够了。无论您的职业是什么,无论是软件开发人员、数据科学家还是机器学习工程师,创建高效且可扩展的算法的能力都是非常需要的技能。
为了创建一个高效的算法,大多数时候我们需要跳出框框思考,想出一个如何优化代码性能的主意。当我们试图优化代码时,有时我们不知道如何衡量我们算法的效率——不管它是否得到了改进。
在这篇文章中,我们将讨论如何利用 Big-O 符号来测量算法性能。
衡量算法性能的正确方法
首先,让我们思考一下:我们如何知道我们的算法是好的或高效的?我们如何衡量算法的性能?或许,测量算法性能的最简单方法是测量它计算解决方案所需的持续时间。
但是,测量持续时间并不是评估算法性能的好方法,因为:
- 我们使用的计算机将对算法的运行速度产生巨大影响。如果你使用的是旧的硬件,你会期望代码运行得比使用新的硬件慢。
- 如果您在运行该算法的同时,您的计算机中还打开了其他活动程序,则与您的计算机仅投入其所有资源来运行该算法相比,您的算法求解解决方案所需的时间将会更慢。
- 我们在算法中使用的编译器和库也会影响它的运行时间。
因此,应该有更好的方法来衡量算法的性能。
我们需要更多地关注算法的可伸缩性或运行时复杂性,而不是关注运行算法的持续时间:当输入变大时,算法的性能如何变化?
要测量我们算法的运行时复杂性,请输入 Big-O 符号背后的概念。
大 O 符号
Big-O 符号是计算机科学中谈论算法效率时经常听到的术语。但是,大 O 符号是什么意思呢?
简而言之,Big-O 符号描述了随着输入数据变大,算法的性能有多好。
使用 Big-O 符号,我们能够测量我们算法的可伸缩性:当输入变大时,我们的算法还会表现得很好吗?
在这篇文章中,我们将讨论四种最常见的大 O 符号: O(1) 、 O(n) 、 O(n ) 和 O(log n) 。
这些 Os 代表 的 顺序,所以 O(n) 表示 n 的 顺序,其中 n 是输入数据的大小。让我们一个一个地检查这些符号。
O(1) —恒定的运行时复杂性
O(1) 符号意味着你的算法具有恒定的运行时复杂度,因为不管输入数据的大小,它都需要相同数量的运算。
为了更直观,我们来看看下面的代码片段。
上面的代码片段是一个简单的算法示例,符号为 O(1) 。该函数接受一个数组,并显示该数组的第一个元素。不管数组中有多少个元素,这个函数总是在一个常量运行时运行,因为它的工作只是显示数组的第一个元素。
让我们看看另一个算法,它有 O(1) 的时间复杂度。
在上面的代码片段中,该函数接受一个数组,它的工作是将数组的第三个元素赋给一个名为third_index
的变量。同样,不管输入数组的大小有多大,该函数将总是在恒定的运行时运行,因为它唯一的工作是将数组的第三个元素值赋给一个变量。
现在,如果我们用输入数据的大小用 O(1) 符号来绘制算法的时间复杂度,我们得到下面的图。
如您所见,随着输入数据变得越来越大,算法运行时复杂性保持不变。
O(n) —线性运行时间复杂度
O(n) 符号意味着算法的运行时复杂度与输入数据的大小成线性关系。如果输入数据的大小增加 2,那么算法的运行时复杂度也会增加 2。
让我们看看下面的代码片段,让它更直观。
让一个循环遍历一个数组的元素并打印每个元素的值是一个算法的完美例子,这个算法有 O(n) 符号。
在上面的代码片段中,我们算法的开销随着输入数组的大小而变化。如果输入数组只有 2 个元素,我们的算法只需要 2 次运算就可以运行。如果数组有 100 个元素,算法也需要运行 100 次运算。换句话说,我们算法的成本随着输入数组的大小线性增加。
现在,如果我们用输入数据的大小来绘制运行时复杂性,我们会得到下面的图。
如您所见,我们在运行时复杂性和输入数据大小之间有一个线性关系。输入数组中的元素越多,算法运行所需的操作就越多。
O(n ) —二次运行时间复杂度
O(n ) 符号意味着算法的运行时复杂度与输入大小的平方成正比。假设你数组的输入大小是 3,那么你算法的运行时复杂度会增加 9。
让我们看看下面的代码片段,作为具有 O(n ) 复杂度的算法的例子。
嵌套循环是使用 O(n ) 符号的算法的完美例子。这是因为循环对数组的每个元素迭代了两次。内循环有 O(n) 的复杂度,外循环也有 O(n) 的复杂度。现在如果把内循环和外循环之间的复杂度结合起来,就得到了 O(n ) 的复杂度。
假设我们的输入数组的大小是 3。对于外部循环,总共需要 3 次运算来迭代数组的每个元素。对于这 3 个操作中的每一个,也需要 3 个操作来进行内部循环以迭代每个元素。这总共带来了 9 个操作。
如果我们绘制这个图,你会得到下面这个算法的可视化结果,复杂度为 O(n ) 。
正如我们所看到的,随着输入数据量的增加,我们算法的成本会越来越高。
O(log n) —对数运行时间复杂度
我们应该知道的下一个运行时复杂度是 O(log n) 。这种表示法意味着,当输入数据的大小加倍时,算法的运行时复杂度将增加一倍。
让我们看看下面的代码片段作为例子。
上面的代码片段是二分搜索法的算法,其运行时复杂度为 O(log n) 。二分搜索法不会使用 for 循环遍历数组的每个元素,而是总是递归地将输入数据的大小分成两半,以找到所需的值。
如上面的代码所示,我们有一个输入大小为 9 的数组。假设数据是完美排序的,我们的目标是找出这个数组中是否存在值 7。二分搜索法首先将输入数组一分为二,并检查数组中间的值。
因为数组中间的值是 5,所以这个值将与我们正在寻找的值进行核对,在本例中是 7。由于 5 小于 7,因此算法将使用数组右侧的值,即 6 到 9。
现在我们数组的输入大小是 4 而不是 10。然后,新数组将再次被一分为二,留给我们的是一个值为 6 和 7 的数组以及一个值为 8 和 9 的数组。
由于值 7 在由 6 和 7 组成的数组中,因此算法将使用数组的这一部分,并忽略值为 8 和 9 的数组。
直到最后我们找到我们想要的值,也就是 7。
如果我们用运行时复杂度 O(log n) 画出算法的图,我们得到如下可视化。
如您所见,随着输入大小变得越来越大,具有 O(log n) 符号的算法比 O(n) 和 O(n ) 更具可伸缩性。
在我们上面的例子中,如果我们使用 for 循环,它有一个线性的 O(n) 符号,我们的算法在得出一个解之前将需要 7 次运算(因为我们正在寻找值 7)。与此同时,使用具有 O(log n) 符号的二分搜索法算法,只需要 4 次运算就可以解决问题。
不同 Big-O 符号之间的复杂度比较
让我们回顾一下目前为止我们学到的不同的 Big-O 符号的可伸缩性。下面是这些 Big-O 符号的情节。
如您所见,随着输入大小变得越来越大,采用 O(1) 符号的算法具有最好的可伸缩性,而采用 O(n ) 符号的算法具有最差的可伸缩性。
综上所述,下面是从最好到最差开始的 Big-O 符号的可伸缩性顺序:
**O(1) < O(log n) < O(n) < O(n^2)**
确定代码的 Big-O 符号
现在我们知道了不同种类的 Big-O 符号,让我们试着找出代码的运行时复杂性。当我们试图分析代码的运行时复杂性时,我们总是不得不面对两种不同的场景:最好的场景和最坏的场景。
最好的情况和最坏的情况
为了让我们更容易理解最佳情况和最差情况之间的区别,让我们看一下下面的代码片段:
在上面的代码片段中,我们有一个算法用于线性搜索(用迭代每个数组的元素用于循环)和一个算法用于二分搜索法(递归分割数组)。假设我们有一个完美排序的数组,有 9 个元素,如上图所示。
- 线性搜索的最佳情况是我们要搜索值 1,这是数组的第一个元素。在这种情况下,我们有 O(1) 复杂度。
- 线性搜索的最坏情况是,如果我们想要搜索数组的最后一个元素 9 的值,或者如果我们想要搜索数组中不包含的值。这是因为算法需要遍历数组的每个元素。在这种情况下,我们有 O(n) 复杂度。
- 对于二分搜索法来说,最好的情况是我们要搜索值 5,这是数组中间元素的值。在这种情况下,我们有 O(1) 复杂度。
- 对于二分搜索法来说,最糟糕的情况是,如果我们想要搜索 1 或 10 的值,它们是数组的第一个和最后一个元素,或者是不包含在数组中的值。这是因为使用二分搜索法时,算法需要递归地将数据分成两半,直到到达第一个和最后一个元素。在这种情况下,我们有 O(log n) 的复杂度。
估计代码的 Big-O 符号
当涉及到确定代码的 Big-O 符号时,我们需要总是着眼于最坏的情况。现在记住这个概念,让我们试着估计一个代码的 Big-O 符号。
让我们看看下面的代码片段,并检查它的复杂性。
当评估一个代码的 Big-O 符号时,我们总是需要首先从最里面的循环中的操作开始。下面是我们应该如何调查上述代码的 Big-O 复杂性的分步说明:
- 从最内层循环的操作开始,即
value += array[i] + array[j] + array[k]
。该操作具有恒定的 O(1) 复杂度。 - 接下来,我们看最里面的循环,也就是
for k in range (len(array)/2)
。这个循环将总是迭代我们数组的一半大小,因此它有 O(n/2) 的复杂度。 - 接下来,我们向上移动一级,这就是循环
for j in range (len(array)-10)
。虽然这是一个 for 循环,但它有一个恒定的运行时复杂度。这是因为不管输入数组有多大,这个循环总是只迭代最后 10 个元素。因此,它具有恒定的复杂度。 - 接下来,我们向上移动到外循环,即
for i in range (len(array))
。这个 for 循环将总是迭代输入数组的大小。因此,这个循环具有 O(n) 复杂度。 - 最后,我们转到循环外的操作,它们是
value = 0
和return value
。这两个操作将总是在一个恒定的运行时间中运行,因此它们都具有 O(1) 的复杂度。
既然我们已经分析了每个循环和操作的 Big-O 符号,接下来让我们分析整个代码的 Big-O 符号。要做到这一点,我们也总是需要从最内部的循环开始。
- 最内部的循环具有 O(n/2) 复杂度,并且该循环中的操作具有 O(1) 复杂度。这意味着这个最里面的循环有
(n/2)*(1) = **O(n/2)**
的复杂度。 - 接下来,第二个内部循环具有 O(10) 复杂度。这个循环的内循环,正如我们在 1 号点计算的,有 O(n/2) 。这意味着第二个内部循环具有
10*(n/2) = **O(5n)**
复杂性。 - 最后,外环具有 O(n) 复杂度。正如我们在第二点中所计算的,这个外循环的内循环总共有 O(5n) 复杂度。因此,它们总共有
n*5n = **O(5n^2)**
复杂度。 - 如果我们把循环的复杂性和循环外的两个操作结合起来,我们得到
1+1+5n^2 = **O(2+5n^2)**
。可以看到,上面的代码总共有 O(2+5n ) 的复杂度。
当我们估算一个代码的 Big-O 符号时,我们可以通过去掉所有的常数来简化它。因此,代替 O(2+5n ) ,我们可以去掉所有的常数,剩下 O(n ) 。因此,上面的代码具有 O(n ) 的复杂性。
暂时就这样吧!
希望现在你知道如何通过查看算法的 Big-O 符号来测量和评估算法的性能。随着输入数据每天变得越来越大,设计可伸缩的算法对于优化代码非常有益。
《老友记》中最搞笑的朋友[已解决]
用 AI 确定最搞笑的朋友,一劳永逸。
是的,这些朋友。(来源)
我们生活在不确定的时代。
我们不知道什么时候回学校或办公室。我们不知道什么时候能坐在餐厅里。我们甚至不知道什么时候我们还能在科恩的演唱会上尽情狂欢。但在过去的几周里,我发现有一种不确定性比其他所有的都更难以忍受:
我们不知道 90 年代热播的情景喜剧《老友记》中最搞笑的朋友是谁。
一旦你意识到你的生活中你的知识基础有如此大的漏洞,你就再也回不去了。
这就是为什么我决定把驾驭人工智能的尖端力量作为我的使命,并找出菲比古怪的非推理是否比罗斯的恐龙笑话更有趣。
警告:准备好大吃一惊吧!
如果你想知道人工智能如何可能找出谁说了一些有趣的话,这里是我对该项目的技术方面的解释。
如果你希望保持清醒,这里有一个快速演示视频,展示了它的样子:
对于这种方法,我在文章的最后解释了两个注意事项。
在我们吃主菜之前,先来几道开胃菜:
持续时间最长的笑声
这个奖属于乔伊。在《乔伊说法语的那个》(第十季第十三集)中,乔伊和菲比一起演练他的假简历技巧时,让观众笑了整整 30 秒。他在简历中写道,他可以在 10 秒钟内喝完一加仑牛奶。菲比叫他出来。他立即走向冰箱,拿起一加仑牛奶,连续 30 秒钟“咕嘟咕嘟”(即溢出他的衬衫前襟)。乔伊巅峰时刻。
最搞笑的一集
最搞笑剧集奖颁给了《脱衣舞娘哭泣的那集》(第十季第十一集)。当我发现这一点时,我立即重新观看了这一集,它绝对不辜负炒作。这一集充满了高中和大学的倒叙,主演是“胖莫妮卡”,瑞秋的“真实”鼻子,以及到处都是可笑的发型。更别说我们发现罗斯在大学里吻了莫妮卡!与此同时,乔伊上了一个游戏节目,做了一场只有乔伊才能做的表演。但是让这一集火上浇油的是丹尼·德维托在菲比的单身派对上令人发指的客串脱衣舞女。
最严重的一集
相比之下,笑声最少的那集竟然是“有邀请的那一集”(S4E21)。这是一个更沉重的插曲,从罗斯和瑞秋的整个关系的高潮和低谷中闪现出来。罗斯即将在英国与艾米丽结婚,瑞秋不得不考虑是否要参加婚礼(我们都记得结果)。
最有趣的季节
就最有趣的一季而言,结果相当有趣(有些人甚至会说有罪)。正如你在下面的图表中看到的,随着剧集的进展,每一季的笑声都在增加。第九和第十季真的比第一和第二季有趣吗?我会让你自己决定。但这可能表明随着节目的进行,制片人在笑声剪辑方面变得更加自由。让我们看着半满的玻璃杯,说随着节目的进行,写作和化学反应变得越来越好!
现在,你们一直在等待的是:
《老友记》中最搞笑的朋友
很自然的事情就是看看哪一个角色在 10 季中最引人发笑,然后宣布他们是最有趣的。但我认为这不公平。有些角色(嗯,瑞秋和罗斯)说的台词比其他角色(可怜的菲比)多得多。
为了公平竞争,我们将看看每个角色每行产生的平均笑声。
我们开始吧:
第六名:莫妮卡
有人对此感到惊讶吗?莫妮卡倾向于做一个“负责任”的人,让事情走上正轨。她通常忙着纠正那些更倒霉的朋友的小毛病,并防止她漂亮的瓷器摔碎。值得称赞的是,每个人都意识到了这一点,罗斯和瑞秋甚至承认,只有莫妮卡出现在照片中,他们才会让钱德和莫妮卡抚养他们的孩子(第六季第十三集)。每个朋友圈都需要一个莫妮卡。
第五名:瑞秋
这个让我大吃一惊。在剧集的早期,瑞秋似乎隐藏了太多的笑点。她作为一个离家出走的“爸爸的女儿”被介绍给我们,看着她处理像煮咖啡和得到“那些工作中的一件事”这样的现实是非常有趣的。但我想随着罗斯的事情变得越来越严重,她也变得越来越严重。
第四名:罗斯
原来台词最多的两个角色(罗斯和瑞秋)没那么搞笑!当然,罗斯大多数时候确实倾向于从字面上理解事物,毕竟他是一名古生物学教授。他肯定有傻傻的一面,也喜欢他那些无聊的笑话,但是在这部剧的过程中,他和瑞秋参与了很多严肃的故事情节。所以他们不总是开玩笑是有道理的。
第三名:菲比
菲比差一点点获得第二名!实际上菲比和罗斯之间有很大的差距,所以我正式宣布菲比是一个非常有趣的角色。不幸的是,她没有像其他角色那样有很多台词,但她确实经常住在离剧组很远的地方。也就是说,她的另类疗法和“街头聪明”的教养是喜剧性缓解的持续来源。
第二名:钱德勒
钱德勒给我的印象是有时有点愤世嫉俗,所以我不知道他会在哪里跌倒。但是回过头来看,钱德勒似乎总是在等待在谈话中发现喜剧。虽然他的幽默经常是自嘲的,有时也是悲观的,但他似乎有能力将轻松带到节目中最严肃的时刻。也许这就是他和莫妮卡如此般配的原因!
第一名:乔伊
好的,举手表决——谁从一开始就猜到了?乔伊是最有趣的角色,最棒的一点是,他大多数时候甚至都不想变得有趣。他的很多幽默其实并不是有意的。是的,我们都知道也许乔伊比其他人“慢”一点。但是他天真无邪,这使得他的评论既好笑又真诚。事实上很难记住不好笑的乔伊台词。
无论你如何分割数据,这些排名基本上是成立的。
值得注意的一点是,在整场演出中,罗斯比菲比更能引起笑声。但他在整部剧中的台词也多得多,所以说他比菲比更有趣似乎不太对。从每一行来看,菲比更有趣。
同样有趣的是,钱德勒比乔伊有更多被笑声跟随的台词。只是当乔伊说一些有趣的事情时,观众笑的时间比钱德勒的台词还长(平均长 6%!).
所以你有它。继续从你的清单上再检查一个不确定性。进步!现在对于科恩的演唱会…
奖金图表
看看随着时间的推移谁变得更有趣。乔伊在第五季之前都不是最搞笑的角色!自从她在第一季中非常严肃的表演后,莫妮卡一直非常兴奋!
附录
警告#1
幽默是相对的。我觉得好笑的事你可能不觉得好笑,反之亦然。幽默也很难衡量。幸运的是,《老友记》的大部分场景都是在 300 名现场观众面前拍摄的。很自然,当很多人笑的时候,我会认为有些事情很有趣。当然,笑声是可以编辑的。但是为了这篇文章,我们要假设当观众笑的时候有些事情是有趣的。
警告#2
我在这个分析中只捕捉到了口语台词。这意味着角色们并不总是因为他们的非语言幽默而得到好评。幸运的是,节目中只有不到 3%的笑声是纯非语言的。
深度学习和组合学的融合
我们如何在深度神经网络中无缝整合组合求解器。我们的 ICLR 2020 聚焦论文摘要。
机器学习研究的当前景观表明,基于深度学习的现代方法与良好的老式人工智能方法不一致。深度学习在计算机视觉、强化学习、最优控制、自然语言处理等领域被证明是一种非常强大的特征提取工具。不幸的是,深度学习有一个致命弱点,即它无法处理需要组合概括的问题。一个例子是基于作为图像的地图输入,学习在谷歌地图中预测最快的路线,这是最短路径问题的一个实例。这类问题太多了,比如(最小,最大)割、最小成本完美匹配、旅行推销员、图匹配等等。
但是,如果要孤立地解决这样的组合问题,我们有一个惊人的求解器工具箱可用,从算法的高效 C 实现到更通用的 MIP(混合整数编程)求解器,如 Gurobi 。求解器面临的问题是输入空间的表示,因为求解器需要明确定义的结构化输入。
尽管组合问题一直是机器学习研究社区中的一个主题,但是对解决这种问题的关注一直是缺乏的。这并不意味着组合归纳的问题没有被认为是通往智能系统道路上的一个关键挑战。理想情况下,人们将能够以端到端的方式将通过强大的函数逼近器(如神经网络)可用的丰富特征提取与高效的组合求解器相结合,而不会有任何妥协。这正是我们在最近的论文 [1]中能够实现的,我们已经获得了最高的评论分数,并将在 2020 年 ICLR 大会上做重点演讲。
对于以下部分,值得记住的是,我们并不试图改进解算器本身,而是使现有解算器能够与函数逼近协同使用。
我们将黑盒解算器想象为深度学习的架构模块,我们可以简单地插入其中。
黑盒解算器的梯度
我们思考组合解算器的方式是从连续输入(例如图边的权重)到离散输出(例如最短路径、选定的图边)的映射,定义如下
求解器最小化某种成本函数 c (ω,y),例如路径的长度。更具体地,解算器解决以下优化问题:
现在,假设ω是神经网络的输出,即我们学习的某种表示。直观来看,这个ω是什么意思?ω用于定义组合问题的实例。例如,ω可以是定义图的边权重的某个向量。在这种情况下,求解程序可以解决最短路径问题或旅行推销员问题,或者我们希望针对指定的边成本解决的任何问题。我们希望通过ω获得正确的问题规范。
自然地,我们想要优化我们的表示,使得它最小化损耗,损耗是求解器 L(y)的输出的函数。我们现在面临的问题是,损失函数是分段常数,这意味着这个函数相对于ω表示的梯度几乎处处都是 0,并且在损失函数的跳跃上是未定义的。更直白地说,梯度对于最小化损失函数是无用的。
到目前为止,已经有依赖于求解器松弛的方法,其中必须对其最优性做出牺牲。相比之下,我们已经开发了一种不影响求解器最优性的方法。我们通过定义原始目标函数的分段仿射插值来实现这一点,其中插值本身由超参数λ控制,如下图所示:
我们可以看到, f (黑色)是分段常数。我们的插值(橙色)以合理的方式连接了平台。例如,注意最小值没有改变。
f 的定义域当然是多维的。这样,我们可以观察到输入集 ω ,其中 f 获得与多面体相同的值。自然,在 f 的定义域中有很多这样的多面体。超参数 λ 有效地做的是通过解算器输入的扰动来移动多面体, ω 。定义分段仿射目标的 g 插值器将多面体的移动边界连接到原始边界。下图描述了这种情况,其中获得值 f(y2) 的多面体的边界被移动以获得值 f(y1) 。这也直观地解释了为什么更高的值 λ 是优选的。位移必须足够大,以获得插值器 g ,它将为我们提供信息梯度。证明可以在[1]中找到。
首先,让我们定义扰动优化问题的解决方案,其中扰动由超参数 λ 控制:
如果我们假设成本函数 c (ω,y)是 y 和ω之间的点积,我们可以如下定义插值目标:
注意,成本函数的线性并不像乍看上去那样严格。所有涉及边选择的问题,其代价是边权重的和,都属于这一类。最短路径问题(SPP)和旅行推销员问题(TSP)就是属于这类问题的例子。
(2)在这个动画中,我们可以看到插值如何随着λ的增加而演变。
该算法
通过我们的方法,我们能够通过简单修改反向传递来计算梯度,从而消除经典组合求解器和深度学习之间的裂痕。
向前传递时,我们只需为嵌入式解算器提供ω,并将解向前传播。此外,我们保存正向传递中计算的ω和解 y_ 值。
对于反向传递,我们只需用λ缩放的反向传播梯度扰动ω,并取前一个解和扰动的问题解之间的差。
计算插值梯度的计算开销取决于求解器,额外的开销是在前向过程中调用求解器一次,在后向过程中调用一次。
实验
我们开发了包含一定程度的组合复杂性的合成任务来验证该方法。在接下来的任务中,我们已经证明了我们的方法对于组合推广是必不可少的,因为朴素的监督学习方法无法推广到看不见的
数据。同样,目标是学习组合问题的正确规范。
对于魔兽最短路径问题,训练集由魔兽争霸 II 地图和地图上对应的最短路径作为目标组成。测试集由看不见的魔兽争霸 2 地图组成。地图本身编码一个kT5×k 网格。这些地图是卷积神经网络的输入,卷积神经网络输出地图的顶点成本,这些成本将反馈给求解器。最后,求解器(实际上是 Dijkstra 的最短路径算法)以指示器矩阵的形式在地图上输出最短路径。
自然地,在训练开始时,网络不知道如何将正确的成本分配给地图的分块,但是使用我们的方法,我们能够学习正确的分块成本,从而学习正确的最短路径。直方图显示了我们的方法如何能够比 ResNet 的传统监督训练更好地概括。
在 MNIST 最小成本完美匹配问题中,目标是输出 MNIST 数字网格的最小成本完美匹配。具体地说,在最小成本完美匹配问题中,我们应该选择这样的边,使得所有顶点都恰好包含在选择中一次,并且边成本的总和最小。网格中的每个单元包含一个 MNIST 数字,该数字是图中具有垂直和水平邻居的节点。通过垂直向下或水平向右读取两位数来确定边缘成本。
对于这个问题,卷积神经网络(CNN)接收 MNIST 网格的图像作为输入,并输出转换为边成本的顶点成本网格。然后将边缘公式交给 Blossom V 完美匹配解算器。
解算器输出在匹配中选择的边的指示向量。右边匹配的代价是 348(横向 46 + 12,纵向 27 + 45 + 40 + 67 + 78 + 33)。
同样,在性能图中,我们注意到在神经网络中嵌入实际完美匹配求解器的明显优势。
我们还研究了旅行推销员问题的公式,其中网络应该输出国家首都的最优旅行推销员旅行。对于这个问题,重要的是在潜在表征中学习正确的资本位置。我们的数据集由各国国旗(即原始表示)和各自首都的最佳旅游组成。一个训练例子由 k 个国家组成。在这种情况下,卷积神经网络显示为国家标志的串联,并应输出最佳路线。
(5)
在下面的动画中,我们可以看到在训练期间学习到的各国首都在地球上的位置。在开始时,位置是随机分散的,但是在训练之后,神经网络不仅学习输出正确的 TSP 参观,而且学习输出正确的表示,即各个首都的正确的 3D 坐标。值得注意的是,这是仅使用汉明距离损耗进行监督和在 Gurobi 中对网络输出使用混合整数程序的结果。
结论
我们已经表明,事实上,在对解算器的成本函数的某些假设下,我们可以通过黑盒组合解算器传播梯度。这使我们能够实现标准神经网络结构基于传统监督所不能实现的组合概括。
我们正在展示这种方法在处理需要组合推理的现实世界问题中有广泛的应用。我们已经演示了一个这样的应用程序来处理基于等级的度量优化[2]。然而,问题是我们离求解器成本的线性假设还有多远(理论上和实际上)。未来工作的另一个问题是,作为一个例子,我们是否可以了解 MIP 公式中组合问题的潜在约束。这种方法的应用范围很广,我们欢迎任何愿意合作的人来充分发挥这项工作的潜力。
相关推文
参考
[1] Vlastelica,Paulus 等.黑盒组合求解器的微分arXiv 预印本 arXiv:1912.02175 (2019)。(http://bit.ly/35IowfE)
[2]Rolínek 等人,“使用黑盒区分优化基于等级的度量。” arXiv 预印本 arXiv:1912.03500 (2019)。(http://bit.ly/35EXIMN)
确认
这是来自马普智能系统研究所自主学习小组和意大利费伦泽大学的联合工作。
三维点云的未来:一个新的视角
被称为点云的离散空间数据集通常为决策应用奠定基础。但它们能成为下一个大事件吗?
点云的不同渲染。从左到右,原始点云、着色、着色、体素化、语义化
我是一个大点云爱好者。10 年前,我第一次发现了它们的存在,从那以后,我一直在通过现实捕捉的演变来调整我的实践,以总是获得更清晰的数据集。但我仍然记得我第一次用陆地激光扫描仪进行勘测,并很快获得了这些令人惊叹(现在仍然令人惊叹)的 3D 点云。
在 3D 扫描过程中,一个废弃的洗毛设备。照片罗布罗克
但是…梦想面对现实。如何有效地考虑这些实体?当时,处理过程——理解为手动超负荷的重复数字化——由几个大量手动步骤组成,如过滤、配准、清理、分割、分类、网格化、数字化……它针对某些部分(主要是配准、过滤和网格化)进行了改进,但我当时遇到的主要瓶颈仍未解决:我们为什么要费心改变每个应用程序的数据性质(如点云到矢量)?
在 Flyvast 在线点云软件中创建 dwg 文件的手动数字化过程。
没有更高效的工作流程吗?
编队学习先进的点云处理和三维自动化。开发新的 python 地理数据技能和开源…
learngeodata.eu](https://learngeodata.eu/point-cloud-processor-formation/)
让我带你踏上研究之旅,将想法具体化为解决方案。
基因
早在 2015 年,在做了两年 3D 激光扫描工程师后,我决定投身于教学和研究,试图解决这个问题。我跳进学术界,开始调查发展的现状,寻找最终需要一些砂浆的砖块。嗯,在那个时候,我很快意识到,没有工作的尝试解决问题的根源。我的努力需要更多的时间。
观察
“当我们睁开眼睛看到一个熟悉的场景时,我们会立即对可识别的物体形成印象,这些物体被连贯地组织在一个空间框架中”。
1980 年,特雷斯曼用简单的术语定义了人类视觉背后的复杂机制。对于没有受损的人来说,它通常是我们的认知决策系统可以用来采取行动的主要信息来源。这是可以扩展的,我们的大脑可以快速适应新的环境,并且只使用通过我们的眼睛捕捉到的最重要的材料。事实上,大脑每秒钟只接收到三个“图像”,这些图像被分类并与先前的知识相结合,以创建我们所体验的现实。
这个图像有意义吗?我相信你会发现这些的意义。
这种机制非常快速和有效,允许我们在看到红灯时刹车,或者只是阅读这篇文章并理解单词的空间组织。更令人印象深刻的是,我们的视觉可以适应“定向注意力”——大脑没有对周围环境形成完全理解的节能模式——或“发现注意力”——当大脑从我们的记忆中收集数据以获得对场景的完全理解时,这种模式运行较慢。
凭借当今的计算能力和高度的非物质化,虚拟复制这样一个过程不仅非常有吸引力,而且似乎是可行的。虽然这种操作真的很难模仿,但研究我们如何与环境互动可以更好地掌握边界和可用的机制。
比较
它首先转化为可以捕捉计算机可用的关键输入的传感器的使用。
这幅图像中的每个向量都由传感器(人工或自然的)引导,这些传感器为它们的使用收集关键的洞察力。
然后,我们的目标是一个基于收集的数据和可访问的信息库的程序,以产生一个“语义表示”:一个场景的描述,整合概念及其意义。在这种情况下,空间传感器扮演我们眼睛的角色,以获得数字空间资产,并使用可用的知识进一步细化为语义表示。
传感器扮演着我们眼睛的角色,空间框架变成了语义表达,场景被加上了熟悉的标签
这种可用性通常是第一个复杂因素。我们的在线认知使用我们的记忆,并在很短的时间内获取所需的证据。使用计算机模拟这一阶段极其复杂,尽可能找到通用的解决方案是一项重大挑战。
尝试虚拟化认知决策系统的第二个瓶颈是语义表示的创建,如下图所示。收集领域知识并将其附加到基础空间数据上,与数据类型、源或表示的巨大集成和挖掘复杂性相关联。
三维点云表示与三维语义表示
数据
三维点云
主要挑战围绕传感器收集的数据的特异性。当深度线索不是必要的时候,单个光栅图像或视频流是很好的,但是模拟我们的 3D 视觉认知需要更丰富的数据基础。现实捕捉设备允许获得主要作为点云的这种详尽的 3D 空间信息:{X,Y,Z} (+属性)空间集合,其数字地表示相对于传感器强度和限制的记录环境。这些仪器和采集方法已经足够成熟,可以实现从实物到国家范围的真实世界的数字复制,如下图所示。
捕捉和组合不同数据集的实时多尺度点云
点云大数据
获取这些所谓的点云变得更容易、更快,甚至可以从非常低成本的解决方案中获得。不幸的是,所有这些硬件的发展都没有跟随着软件的发展,软件受到了大数据问题的严重影响,如下图所示。
点云背景下大数据的五个 v。
连接众多传感器/方法创建异构点云数据集(多样性)并参与大规模数据存储库(容量)的构建。反过来,它降低了处理效率(速度),并产生了将大量点数据转化为值得信赖的(准确性)和可操作的信息(价值)的新需求。
交付物
点云采集和处理工作流程通常依赖于应用程序,遵循从数据收集到可交付成果创建的经典流程。虽然收集步骤可能特定于手边的传感器,但点云作为一种可交付的方式激增,成为许多行业事实上的选择。这种面向任务的场景主要将这些视为空间参考——由专家用来创建其他可交付成果——因此是项目与现实最紧密的联系。它带来了准确的真实世界信息,可以根据数字现实做出决策,而不是解释或最新的信息。
今天,“大脑”是一个坐在桌子后面的专家,将处理点云以提取可交付成果。我们想要的是将这种知识直接集成到数据中,给空间实体赋予语义意义
此外,将点云转换为特定于应用的可交付成果的过程在时间/人工干预方面非常昂贵。对于人类专家来说,充分处理大量复杂的信息变得越来越复杂,这些信息通常在一个项目的不同参与者/支持者之间相互矛盾地传播。因此,对于一个可持续发展的系统来说,关键是将大点云数据转化为更高效的流程,从而开启有助于决策和信息提取的新一代服务。
我们需要找到大规模自动化和结构化的方法,以避免特定任务的手动处理和不可持续的协作。
合作
作为人类,我们在大规模合作中茁壮成长。我们最大的成就是建立在高效的信息、服务等交流之上的。点云通常非常大,这取决于收集了多少数据—通常是千兆字节,如果不是太字节的话—并且通常注定要作为可重用的支持进行归档,以创建新类型的数据和产品。这可能会导致存储需求指数级增长、输出之间不兼容、信息丢失和复杂协作的死胡同。
这些实践还表明,试图概括一个框架的努力是有限的,这个框架反过来可以作为进一步互操作性和概括的共同基础。这种缺乏是适得其反的,可能会导致参与者之间混乱的数据重新分配,并恶化对多个外包服务的依赖,每个外包服务都独立地针对一个应用程序。这强调了研究可互操作场景的强烈需求,在这些场景中,来自不同领域的许多用户可以使用一个点云,每个用户都有不同的需求。
这反过来将在获取级别引入新的约束,以定义用于推理引擎的 3D 表示的所需穷尽性。当然,这为互连流程和确保与不同源、卷和其他数据驱动参数的兼容性带来了更多挑战。
自动化
在这个连续体中,从以人为中心的过程到自主的工作流的反思导向了开发自动化和人工智能以加速推理过程的研究。这对于 3D 捕捉工作流中的点云开发至关重要,在 3D 捕捉工作流中需要识别对象。
机器人研究在提供自主 3D 记录系统方面取得了飞跃,我们在没有人为干预的情况下获得了环境的 3D 点云。当然,遵循这一理念发展自主测量意味着要求数据可用于决策。没有上下文的收集的点云不允许采取有效的决策,并且需要专家的知识来提取必要的信息并为决策创建可行的数据支持。对于完全自主的认知决策系统来说,自动化这一过程是非常诱人的,但也带来了许多挑战,主要涉及知识提取、知识集成和来自点云的知识表示。因此,点云结构化必须被特别设计,以允许计算机使用它作为信息提取的基础,使用推理和基于代理的系统。
我的人工智能自动物体在无人监督的情况下识别的结果。每种颜色代表自动识别不同类别
身份证明
这就是我想说的:我们需要虚拟数据集中的智能!这,为了避免脑力劳动和手工流程,也是为了互操作性。有许多应用程序会以不同的方式使用点云,但为每个应用程序提取可交付成果似乎不是最高效的(就存储空间而言也不是生态友好的)。但是,如果专家知识被形式化并集成在点云中,您只能猜测基础架构变得有多集中和高效!
结果
所以是的,点云是巨大的;是的,我们需要特定的“技巧”来存储和处理它们,但几十年前的视频也是如此!这在你的具体行业中意味着什么?你很快就能使用 3D 捕捉环境的“大脑表示”进行工作,并根据你的想法进行查询。但是当然,3D 传感器的广阔前景使得识别过程成为一个广阔的研究探索领域!激动人心!
拿走 5 分
- 3D 点云接近来自传感器的未精炼石油
- 语义注入应该旨在提供一个大的领域连接
- 底层的数据结构和算法就是为此而定制的
- 互操作性、模块化和效率是协作的关键
- 高效的自动对象检测应该建立在这些目标上
更进一步
这些想法基于获奖论文“智能点云”[1],其中包含了关于这些问题的工作解决方案的更多技术细节。但是,当然,就像长期研究工作中经常出现的情况一样,你会带着更多你在开始时就有的问题离开。
我们正在经历一个多么激动人心的十年。我们正处于一个迷人的时代,机器学习的使用为解决 10 年前被认为是科幻小说的挑战提供了巨大的可能性。
编队学习先进的点云处理和三维自动化。开发新的 python 地理数据技能和开源…
learngeodata.eu](https://learngeodata.eu/point-cloud-processor-formation/)
论文参考(开放存取)
- 女性,2019 年。智能点云:构建三维智能点数据。列日,委员会:比伦、雷蒙迪诺、范·奥斯特罗姆、科尔内、哈洛特、格鲁森迈耶。https://orbi.uliege.be/handle/2268/235520
关于作者
十多年来,Florent Poux 一直处于现实捕捉自动化的前沿。他拥有一个屡获殊荣的科学博士学位,并通过 ISPRS Jack Dangermond 2019 BP award 被评为杰出的研究人员。他作为 3D 地理数据( 列日大学 )的兼职教授、数据科学&机器学习(open classrooms)的导师以及 3D 顾问,为高级研究&知识传播搭建桥梁。
在他年轻的学术和科学生涯中,他发表了数十次技术演讲,在多个国际会议的科学&项目委员会任职,并作为主要国际 GIS 和自动化期刊的编辑&评审员提供协助。
他的活动旨在通过各种形式的交流和开发,传播知识和解决自动化问题。Florent Poux 依靠他的专业知识和一群技术娴熟的合作者,他们共同拥有一个全球合作的愿景,为建设一个更美好的社会而推动科技进步。
人工智能的未来是人工感知
你对此有何感想?
今天围绕人工智能未来的许多讨论都集中在实现人工通用智能的可能性上。本质上,一个能够处理一系列随机任务并像人类一样自己解决新任务的人工智能是最终目标。但是在游戏的这个阶段,围绕这种智能的讨论似乎更少关于如果而更多关于何时。随着神经网络和深度学习的出现,天空是实际的极限,至少一旦其他技术领域克服了剩余的障碍,这将是真的。
对于深度学习来说,要成功支持一般智能,它需要比目前任何单个系统访问和存储更多信息的能力。它还需要比当前技术允许的更快地处理这些信息。如果这些东西能够赶上神经网络和深度学习的进步,我们最终可能会拥有能够解决一些重大世界问题的智能。当然,我们仍然需要对它进行填鸭式的教育,因为在大多数情况下,它只能接触数字世界。
如果我们想要一个可以消费自己信息的 AGI,还有一些只有时间才能带来的技术进步。除了增加的信息量和处理速度,在任何人工智能作为自动机被广泛使用之前,它将需要拥有良好的运动技能。一个能控制自己能力的 AGI 可以在世界各地移动,通过各种传感器获取信息。然而,这是另一种只是等待的情况。这也是另一种形式的当不是如果这些技术将赶上其他技术。谷歌已经成功试验了精细运动技能技术。波士顿动力公司拥有具有稳定运动技能的犬类机器人,这种技能只会在未来几年内得到改善。谁说我们的 AGI 机器人需要直立?
成功分析团队的五个必要角色
towardsdatascience.com](/getting-your-analytics-team-right-b539206dac3d)
简而言之,对 AGI 来说,这两个缺失的因素更像是一场等待游戏,而不是一个是否可能的问题。随着这些技术领域的改善,人工智能和后续的人工智能机器人版本将慢慢变得可用和更加普遍。在许多方面,人类会接受这些介绍作为事情的正常进展。即使这些 AGI 真的出现在我们的主流日常生活中,它们也可能是人类的咕哝声——有所行动,但似乎没有生命,没有个性。
然而,人工智能的一个方面越来越少受到关注,也许是下一个大的事情,是人工感知。感觉可以分为两类。第一类是意识。这一条会让那些高尚的人工智能天才忙于通过图灵测试。如果机器有自我意识,并以类似于人的方式意识到他人,我们将有新的伦理规则需要考虑。
第二类是情感,或者说是感觉。记住,我们谈论的是人工的感觉。所以,在这种情况下,我们指的是人造情绪。我并不主张一种实际的情感体验,而是一种表现出恰当的情感来与人类交流的能力。因此,当与刚刚失业的人交谈时,机器可能会表现出悲伤。当听到对方被无故解雇时,它可能会在谈话中表现出愤怒。当得知这个人刚刚得到了她梦寐以求的工作时,它会正确地表现出喜悦。“听起来你的失业是因祸得福,”它可能会说。
据我所知,这第二类感知——可信的情感——是人工智能的未来,而不是一般的智能。
在本文的其余部分,当我使用感觉这个术语时,我将用它来指代第二类感觉——人工情感或感觉。我相信这种感觉是人工智能的未来,原因有二。首先,人们将信任、联系、更舒适地互动,甚至喜爱通过情感而不仅仅是智力与他们相关的人工智能。第二,人工智能口头或书面描绘现实情感可以在短暂的交谈中像人类一样传递。
你有没有读过一本书,和主角产生情感上的联系?你知道这个人是假的,对吗?他或她是一部虚构的作品。但是一旦你和他们建立了情感联系,你就会像关心你现实生活中的朋友一样关心他们。虚构的故事激起了你的情绪。这个故事可能是虚构的,但你从中感受到的情感是真实的。如果作者在讲故事方面做得非常出色,你的真实情感让你关心书中的人物。是的,情绪就是这样。
过渡到一个场景,你正在与一个人工智能互动。你和它之间的情感联系会增长,因为它的情感看起来是真实的。将来有一天,你会去商店面试一个新的机器人助手。也许精细运动控制甚至还不可用。你只是在和黑盒里的软件说话。你采访的第一个黑匣子完全有能力处理你需要它做的所有任务,但它在与你交谈时不会使用任何形式的情感。你采访另一个黑盒;这件衣服侧面有一条鲜红色细条纹,以显示它的风格。它做了第一个盒子能做的一切——此外,当它和你说话时,它似乎真的很关心你。
“你今天早上好吗,黑匣子?”
“我很好,吉姆。你好吗我看到了你昨天发布在网上的小苏珊的照片。她太可爱了!一天比一天更像她的母亲。”
你刚买了细条纹盒子。
在电影 Her 中可以找到一个人类和有感知能力的软件之间的这种情感依恋。在电影中,它既迷人又令人不安。但是你明白了。情感联系对人类很重要。我们似乎并不关心情感依恋是对一个真实的人还是一本书里的虚构人物。证据支持这个结论。人们会选择有情感能力的人工智能,而不是没有情感的人工智能。
数据科学和业务环境正在融合
towardsdatascience.com](/the-future-of-data-science-5825bde65637)
但比你可爱的新细条纹助手更令人印象深刻,也可能更可怕的是,一个能够伪装成人类的人工感知机器。首先,我要明确一点。我并不是说这个有意识的人工智能站在你的客厅里,而你认为它是人类。那仍然是科幻的东西。为了解释我的观点,让我来设置场景。
你需要理发。你从口袋或钱包里拿出智能手机,给美容院打电话。一位年轻女士回答道:“早上好!感谢致电最佳发型沙龙。我帮你多少?”
"是的,我需要理发和染发。"
“是的,妈妈。有没有比较喜欢的造型师?”年轻的女士问。
“是的。我总是用尼克。他是最棒的!”
“哦,尼克很棒。大家都爱他。”暂停。“你想什么时候进来?”
“哇。这个星期真的很忙。周四下午早些时候,你有什么事吗?”你分享。
“嗯。让我看看。”暂停。“嗯,尼克已经预订了星期四下午的票。但是他在那天早晨十点钟确实有空。有没有可能行得通?”又一次停顿。"或者我们可以试试另一个造型师."年轻的女士说。
“好吧,你知道吗?我会让它工作的。我会在十点钟到那里。”
“精彩!我帮你记下了周四上午 10 点和尼克的会面。还有别的吗?”
你以“不”结束。就是这样。到时候见。”然后你挂了电话。
想象一下,如果沙龙里的年轻女士是一个有知觉的人工智能。如果你给发廊打电话,而今天的自动系统接了电话,你会发现一个新的发廊。每个人都讨厌被塞进自动化系统。
"请按一个或说出你的发型师的名字."
“我不这么认为。”
“你说,阿方索?”
“不,我说的是……”点击。
能够进行现实情感对话的人工智能是商业和社会的游戏规则改变者。这种技术已经在开发中。在 2018 年 5 月的 I/O 大会上,谷歌演示了机器和人之间的对话。相关人员并不知道她在对软件说话。人工智能助手谷歌双工(Google Duplex)作为一名人类呼叫者没有任何问题。在这个场景中,人工智能正在呼叫一个沙龙来为个人安排理发。但是这个对话和两个人的对话没有区别。
一个有感知能力的人工智能在有限的互动中像人类一样传递的能力也通过书面语言得到了展示。人工智能技术正在写文章和书籍,读起来和人类写的一样。在某些情况下,人工智能的文章可能比人类写的更好——只要看看我的一些东西就知道了。
将人工智能从目前的特定任务能力发展到通用智能技术的所有努力都很重要。随着人工智能继续成长为成年人,它们将带来巨大的价值。但是情感类的感知,比完全发展的 AGI 更接近,并且,在我看来,对人工智能的成功采用和在我们非常情感化的人类世界中的有用性更重要。
杆蓖麻 帮助企业获得分析权!他帮助国际组织和小型企业改善他们的数据分析、数据科学、技术战略和技术领导力。除了咨询,Rod 还喜欢公开演讲、教学和写作。你可以在 rodcastor.com**和通过他的 邮件列表 了解更多关于 Rod 和他的工作。
Airbnb 的财务数据分析
旅行已经停止,随之而来的还有 Airbnb 的预订。68%的 Airbnb 直到 8 月份都没有预订,平均每个主人已经失去了€14K——我们所知道的 Airbnb 还能生存吗?
阿姆斯特丹与 Airbnb 有着麻烦的历史。这座城市多年来一直缺乏经济适用房,一般来说,也只有 T2 的住房。荷兰的首都很小,被水所限制,并且在艰难的建筑法规中挣扎。这推高了私人市场的租金,平均达到阿姆斯特丹人月收入的三分之二。Airbnb 的到来抢走了当地市场的租赁房源,但也为许多难以履行租金义务的阿姆斯特丹人提供了一线生机。12 年后,Airbnb 不可否认地成为了阿姆斯特丹生活的一部分,数百万游客涌入运河街道,寻找只有 Airbnb 才能提供的真实当地体验。
由于当前的疫情中断了短期旅行,Airbnb 主机体验以及阿姆斯特丹已经完全改变了。我将分析阿姆斯特丹 Airbnb 房源的数据集,估计预订和收入的相对变化,估计 Airbnb 主机出租第二套住房的租金/抵押贷款成本,并回答 Airbnb 能否在阿姆斯特丹生存的问题。
通过 pixabay 、 Canva (Pixabay 许可证)免费拍照
数据
Airbnb 内部的项目多年来一直在从该平台收集房源数据,清理和结构化数据集,并将其公之于众。对于这个项目,我正在分析在以下日期收集的数据集:
- 2019 年 2 月 4 日对 2020 年 2 月 14 日
- 2019 年 3 月 7 日对 2020 年 3 月 13 日
- 2019 年 4 月 8 日对 2020 年 4 月 16 日
- 2019 年 5 月 6 日对 2020 年 5 月 8 日
由于阿姆斯特丹的旅游根据月份和季节而波动,我将比较 2020 年 2 月和 2019 年 5 月之间每个月的年度变化。
每夜、每周和每月的价格列不是数值型的,所以我们需要清除它们中的字符串并将它们转换成数值型列:
预订量下降了多少?
根据 Airbnb 内部的数据,截至 2020 年 5 月 8 日,阿姆斯特丹目前有 19,278 个房源。然而,在同年 2 月,有 19,700 个列表,这意味着在 2 月至 5 月的这一天,有 422 个列表被删除,可能是由于新冠肺炎的限制。然而,如果我们只看这个统计数据,我们将会低估问题大约 1 万台主机。
许多主机已经决定在可预见的未来不提供他们的列表,而不是直接删除它们,这是有道理的,因为他们的列表充满了良好的评论,增加了他们主机的可信度,从而增加了预订。我们可以这样查询数据:
我们得到 14,129 个列表在接下来的 30 天内完全不可用,13,037 个在接下来的 90 天内不可用。这意味着 68%的 Airbnbs 至少在未来三个月的预订率为零。
我们将计算每台主机预订量的百分比变化(或者换句话说,空缺的相对变化)。这意味着我们将比较 2019 年每个主机的空置率和 2020 年的空置率。这是数据的一大特点,因为我们不需要进行任何归纳,而是可以真正考虑到每个主机的体验,将他们今年应该拥有的预订率与他们实际拥有的预订率进行比较。
首先,我们需要将 2019 年的零可用天数标准化为一天,因为我们将计算百分比变化,即除以 2019 年的数字。我们还需要将 2020 年的零空房日转变为 100%空房日(如我们之前所讨论的),因为由于旅行和托管限制,主机故意使他们的 Airbnbs 不可用。这是代码:
下图让我们很好地了解了仅疫情一项就让主办方失去了多少预订:
互动图表+数据:https://chart-studio.plotly.com/~brunnatorino/9.embed
蓝色条显示,与 2019 年的数字相比,未来 30 天(从 5 月 8 日到 6 月 8 日)的空置天数平均增加了超过 2000% 。在接下来的 90 天里(5 月 8 日至 8 月 8 日),空置天数平均增加了近 6000%。通常情况下,阿姆斯特丹的机场不会长期开放,尤其是在 3 月至 6 月的郁金香季节,数百万游客来到荷兰观赏世界闻名的郁金香,这使得这些数字更加令人不安。
主机收入损失了多少?
回答这个问题有两种方法:
- 计算 2020 年与 2019 年预订量的差异
- 考虑到 2019 年至 2020 年 Airbnb 预订的增长估计。
Airbnb 在很大程度上依赖于旅行者对主人的信任,这可能是游客决定是住在酒店还是 Airbnb 的决定性因素。因此,如果一个主持人已经在平台上呆了一年多,我们可以有把握地假设,随着他们评论和评级的增长,他们的预订可能会逐年增加。
此外,如果我们不考虑增长,我们可能会低估 Airbnb 主机正在经历的财务困难,因为他们在决定对 Airbnb 进行资本支出(如装修、新家具、雇佣员工)以及今年计划的个人支出时,可能也会假设一定的增长率。
根据这两篇文章,Airbnb 的同比增长似乎平均在 25%至 30%之间: Skift 和 Reuters 。这里,我将把相对空缺调整 25%(意味着今年,主机的预订量应该比去年多 25%)。
如果疫情没有发生,这是针对主机在 2020 年的潜在收入增长而调整的代码:
我们将平均结果乘以我们数据集中在 Airbnb 超过一年的主机数量(13,964),我们可以用图形显示从收集数据开始算起的未来 30、60 和 90 天内每月的收入损失(在本文开始时指定):
互动图表+数据:https://chart-studio.plotly.com/~brunnatorino/5.embed
这张图表显示了新冠肺炎对阿姆斯特丹造成的非常悲惨的影响。尽管我们都知道旅游业正在遭受损失,但要确切发现疫情对它们的影响有多大总是很困难的。
该图显示了已实现和未实现的损失。让我们来具体分析一下 Airbnb 主机已经损失了多少,以及在未来 3 个月内他们很可能会损失多少。
已实现的损失
为了计算已实现的损失(Airbnb 已经发生的收入损失),我们可以看看 2 月、3 月、4 月和 5 月未来 30 天的预订量。根据数据集和我们的计算,我们得到了以下结果:
从 2 月到 5 月,阿姆斯特丹 Airbnb 的房东已经损失了超过 1.97 亿欧元。这相当于阿姆斯特丹每台主机平均€14,517 欧元。
互动图表+数据:【https://chart-studio.plotly.com/~brunnatorino/13.embed
未实现损失
计算 5 月份的收入损失与 5 月、6 月和 7 月的预测收入损失之间的差异,我们得到主机在 6 月和 7 月仍然会损失大约€9400 万欧元,结果是每台主机平均损失 6,896.14€。
外推结果
如果我们将在 Airbnb 上停留超过一年的主机视为阿姆斯特丹 Airbnb 所有主机的样本,我们可以推断出我们得出的估计值,并获得阿姆斯特丹主机因疫情而损失多少收入的更现实的数字。
我们一开始计算出,阿姆斯特丹 Airbnb 上大约有 19278 个活跃房源。如果我们将样本中平均每台主机的收入损失乘以阿姆斯特丹的主机总数,我们得到的数字是:
在接下来的两个月中,预计€将出现 2.8 亿欧元的已实现亏损,€将出现 1.33 亿欧元的未实现亏损。
这对阿姆斯特丹的东道主意味着什么?
当我们在数据集上查询一个主机在 Airbnb 上有多少个列表时,我们发现大多数主机(大约 13,394 个主机)只有一个列表,其中只有 1,952 个主机列出了私人房间。这意味着大多数只有一个列表的主机(11,442 主机)列出了整个公寓,这些公寓可能是作为投资购买的,也可能是作为主机主住宅的附加租赁。
为什么这很重要?
当东道主投资房地产时,考虑到在 Airbnb 上提供该州的高利润率,他们可能会预算他们的抵押贷款或租金付款高于他们在 Airbnb 突然不再是一个选择的情况下所能负担的。这不仅包括每月费用,还包括装修、高标准电器、家具和装修费用。
如果出租的不是主人的主要住所,这一点尤其令人担忧,因为装修你公寓里的一个房间,并尽可能将其出租作为一个非必要的收入来源,其初始费用和风险要比申请 30 年期抵押贷款或签署一整栋二手房的一年期租约,并以类似酒店的标准装修和装饰它低得多。
估算航空公司的租金价格
生活中有两件事是确定的:税收和房租。尽管 Airbnb 的空房比去年增加了 6000%,但在冠状病毒危机期间,荷兰并没有对租房者实行任何形式的租金冻结。事实上,通常在 7 月 1 日进行的年度租金上涨将会持续下去。然而,政府已同意在家庭失去主要收入的情况下冻结驱逐。
然而,在大多数情况下,Airbnb 的利润在荷兰并不被视为主要收入,所涉 Airbnb 房屋甚至不是所有者的主要住所,因此很难避免最终被驱逐。
在我的另一篇文章机器学习和真实状态 ,中,我训练了一个随机森林模型,它预测阿姆斯特丹公寓的租金价格,平均准确率为 94%。为什么不在这个项目中也使用它来估计这些主机可能为他们的第二 Airbnb 房屋支付多少钱?我们假设他们是出租这些房子,而不是拥有它们,然而阿姆斯特丹的抵押贷款通常非常接近租赁价格,甚至更低。因此,我们的估计介于现实和悲观之间,考虑到一些房主可能拥有多套房子而无需支付租金或抵押贷款。这是使用模型进行预测的代码:
预言
在只查询了在 Airbnb 上提供整栋房屋/公寓的主机的数据集后,该模型计算了超过 1 万个房源的租金预测。使用以下代码计算利润率:
我们得到阿姆斯特丹的平均利润率约为 182% ,这意味着房东通过使用 Airbnb 支付的租金几乎是他们的两倍。我们可以从两个方面来解释这一点:房东支付的租金是他们的两倍,或者如果他们拥有一所房子,Airbnb 的收入是房东在当地市场出租公寓的两倍。
然而,如果 Airbnb 不再是这些主机的一个选项(至少在短期内),他们每个月的按揭付款或租金义务是多少?如果我们合计 7,343 个样本中 Airbnb 的租金估计值,我们得到在过去 4 个月(2 月至 5 月)中 Airbnb 托管受到严重限制的租金负债约为 7,000 万€欧元。这相当于每台主机平均约 7,592.73€。
如果我们再对在 Airbnb提供整套公寓或房子的 15352 个主机进行推断,总负债增加到€1.45 亿欧元。现在真正的问题是,阿姆斯特丹 Airbnb 房东的银行账户中是否有至少 7592.73€的闲钱,可以在这场危机中充当缓冲。如果我们假设旅游危机将至少持续到 7 月底(由我们未来 90 天的空房数据支持),这一负债将增加到每台主机约 11,389****。否则,房东可能会因为拖欠抵押贷款或支付租金而陷入严重的麻烦,并因此失去他们的投资、努力和与 Airbnb 的合作。
根据 2017 年 Captain Finance 的一篇文章,荷兰家庭平均拥有约 2 万€的储蓄。假设 Airbnb 的房东也有同样的比率,此外,他们还没有花掉那些积蓄来拥有或翻新他们的 Airbnb,那么我们可以得出结论,大多数阿姆斯特丹 Airbnb 的房东可以生存到 7 月底。
如果€20,000 是主机的平均限额,我们估计大多数 Airbnb 主机在 2020 年 11 月中旬之前都有节余。在此之后,房东不太可能在银行有足够的现金来继续支付他们的 Airbnb 投资公寓和房屋的抵押贷款和租金。
Airbnb 基金
Airbnb 还宣布了一项基金来帮助 Airbnb 主机,这些主机在 5 月至 6 月期间遭受了大量取消,向主机平均退款约为他们本应收到的 12.5%。这可能会为主办方提供一条生命线,延长他们在没有预订的情况下生存的时间。
5 月和 6 月的平均收入损失为阿姆斯特丹每台主机 10,541€。如果 Airbnb 退还其中的 12.5%,那么每台主机将获得 1317.62€。Airbnb 对€出租全部房产的房东的平均月租金估计为 1898 英镑,相比之下,这给了他们大约 2/3 的额外月收入,这让我们的估计延伸到了 12 月初。
然而,有报道称 Airbnb 基金并不十分有用,房东收到的退款远远少于这里计算的金额,而且不清楚基金款项是如何计算的。
那么答案是什么呢?Airbnb 会成功吗?
根据这篇文章的估计,在没有任何预订的情况下,Airbnb 的普通房东至少可以生存到 11 月中旬。如果疫情阻碍旅行的时间超过这个时间,Airbnb 很可能会不可挽回地失去大部分房东,因为公寓被取消赎回权,房东失去转租权。****
由于 Airbnb 的负面前景,房东也很有可能再次转向当地市场短期出租他们的公寓,直到疫情结束——在疫情之前,他们可以在 Airbnb 上比出租给阿姆斯特丹人多赚两倍的钱。然而,考虑到许多人已经失业,更多的人害怕失去工作,这种策略是否可行是值得怀疑的,而且不可延期的、没有固定结束日期的临时租赁可能不是他们目前最感兴趣的。
在世界努力摆脱这场危机的同时,如果 Airbnb 的主机转向当地市场,并在更长时间内租用他们的公寓,这在短期内可能对 Airbnb 有利,但由于荷兰非常严格的租户法律,这些主机很难在安全的情况下回到平台,这对 Airbnb 来说可能与因为其他原因无法挽回地失去这些主机一样糟糕。
另一方面,如果房东决定在疫情结束前一直空置,他们将不得不承受存款的巨大损失,如果人们在年底前觉得去大都市旅行不安全,他们还可能面临失去公寓的风险。
结论
如果主人保持忠诚,并且疫情在年底前结束,Airbnb 可以在阿姆斯特丹生存下去。随着疫苗试验和欧洲国家放松封锁的消息,肯定有理由对该平台感到乐观。然而,即使放宽了限制,要准确知道人们何时会愿意再次去大城市旅游或做生意可能会更加困难。无论如何,我们的估计显示,Airbnb 的主人实际上可以坚持几个月,但可能不足以看到旅游业的再次崛起。其他解决方案,如在当地市场租赁公寓,将不得不由房东权衡,这样他们就可以延长他们的生命线,足以看到预订量再次上升。
在这个不确定的时期,祝你们所有人好运,我真诚地希望我们都能更好、更强、更明智地度过难关。感谢您的阅读。
人工智能的未来——神经形态计算
深度学习行业需要一种新型的硬件——神经形态硬件——才能真正高效。
E 人工智能领域的每个人都知道什么是神经网络。大多数从业者都知道训练任何值得注意的神经网络都需要巨大的处理能力和能量消耗。也就是说,为了该领域的进一步发展,需要一种新型的硬件。
一些专家认为量子计算机就是硬件。尽管量子计算有着巨大的前景,但它是一项需要几十年才能发展起来的技术。物理理论还不够成熟,不足以开发出有用且经济的设备。
另一方面,神经形态计算将花费更少的时间和资源来开发,并且在设备开发成本和处理能力的能源成本方面都非常有用和经济高效。
由于大多数读者不知道什么是神经形态计算,我将在本文中描述这项新技术,以及它将使我们在“更接近量子”的未来做什么。这一切都始于神经形态芯片中使用的核心电子组件忆阻器。
忆阻器——缺失的电路元件
忆阻器已经被证明以类似于大脑突触的方式工作,因为它们具有所谓的可塑性。这种可塑性可以用来创建受大脑启发的人工结构,以处理和记忆数据。
众所周知,有三种基本的无源电子元件:
- 电容器——具有储存电能(在电场中)并在需要时将电能释放到电路中的功能;
- 电阻器——是一种对电子流动产生阻力的无源器件;
- 电感器也称为线圈、扼流圈或电抗器,是一种无源双端电子设备,当电流流过磁场时,它在磁场中存储能量。
多年来,这是仅有的三种基本无源电子元件,直到忆阻器出现。
那么它们是什么呢?
忆阻器矩阵
忆阻器是第四类电路,加入了上述组件,主要在纳米尺度上展示其独特的属性。理论上,忆阻器(由存储器和电阻串联而成)是一种无源电路元件,它维持两端元件上的电流和电压的时间积分之间的关系。因此,忆阻器的电阻根据设备的忆阻功能而变化,允许通过微小的读取电荷来访问设备的“历史”(或存储器)。
所有这些用简单的语言拼写意味着这是一个无源电子元件,能够“记住”其过去的状态(电阻值),即使没有能量通过它。忆阻器也可以用作存储器和处理单元,这是一个重要的壮举,我将在稍后描述。
忆阻器是由 Leon Chua 在 1971 年首次发现的,只是在理论上。如果你想了解更多,你可以在的原始论文中找到。
直到 2008 年,惠普实验室的一个研究小组才首次基于氧化钛薄膜制造出忆阻器。根据惠普实验室团队的说法,忆阻器的行为方式如下:
“忆阻器的电阻不是恒定的,而是取决于之前流过该设备的电流的历史,即它现在的电阻取决于过去有多少电荷以什么方向流过它;这种设备能够记住它的历史,也就是所谓的非易失性。当电源关闭时,忆阻器会记住其最近的电阻,直到再次打开为止。”
从那以后,各种其他材料被各种公司实验,用于制造忆阻器,我就不一一列举了。
但是让我们跳过这些无聊的东西,直接进入忆阻器有趣的科幻应用吧!
神经形态计算——或者说如何创造大脑
神经形态计算并不是什么太新的东西,因为它在 1980 年首次被创造出来,它指的是模拟电路,模拟人脑的神经生物结构。
如果你至少有点了解深度学习的宣传,你就会知道它围绕着基于软件的算法和架构,这些算法和架构抽象地模仿大脑的神经回路。深度学习越来越多地传播到所有类型的行业,训练算法的成本是巨大的。
深度学习未能模仿的一点是大脑的能效。神经形态硬件可以解决这个问题。
还有,你可以告别著名的冯诺依曼瓶颈了。如果你不知道那是什么,它指的是数据从一个设备的内存到达处理单元所需的时间。这实际上使处理单元等待(浪费时间)获得它需要处理的数据。
神经形态芯片没有瓶颈,因为所有的计算都发生在内存中。忆阻器是神经形态芯片的基础,可以用作记忆单元和计算单元,类似于大脑的工作方式。它们是第一批无机神经元。
为什么神经形态硬件更适合神经网络
神经网络主要使用实数(例如 2.0231、0.242341 等)来表示神经网络架构内部的权重和其他值。然而,在目前的计算机体系结构中,这些值需要转换成二进制。这增加了在训练和部署中计算神经网络所需的操作数量。
神经形态硬件不使用二进制,但它可以使用真实值,如电流和电压等电气值的形式。这里,数字 0.242341 被表示为例如 0.242341 伏。这直接发生在电路内部,不存在二进制值。所有的计算都以电路的速度进行。
基于神经形态硬件,极大地提高神经网络的响应速度和训练速度的另一个因素是计算的高度并行性。关于我们的大脑,已知的一件确定的事情是,它是高度并行的,在我们生命的每一秒钟里,数百万次计算同时发生。这就是神经形态芯片所能实现的。
所有这些优势都有一个好处:训练和部署神经网络算法的能耗低得多。
边缘计算——由神经形态驱动
你可能知道,自动驾驶汽车主要基于神经网络和 4/5 G 技术。为了让汽车自动驾驶,它必须连接到一个数据中心,该数据中心分析它从汽车接收的数据(通常它会将数据传递给一个或多个卷积神经网络),然后使用 4/5 G 技术将数据返回给汽车。这会产生延迟,这可能会导致死亡。
神经形态计算的优势来自于之前提到的该技术的优点;所有处理都可以在汽车的“大脑”(神经形态芯片)内部本地完成。这将减少延迟,降低能源成本,增加汽车的自主性,同时也改善了汽车的一个敏感部分(因为大多数数据都是在本地处理的)——网络安全。
它还将为另一个不断增长的行业——物联网——带来许多新功能。众所周知,这些设备对能耗非常敏感,因为它们的电池寿命有限。小而高效的神经形态芯片可以用来以低成本为每个设备提供更多的功能。
结论
深度学习行业需要一种新型的硬件,神经形态的硬件,才能真正高效。神经形态芯片显示出最适合它的巨大前景,一些公司正在努力开发这项技术和硬件人工智能的未来。希望这一领域的工业研究将会增加,我们将很快拥有专用于神经网络的硬件。这将真正使人工智能开发者能够改变世界。
加盟中使用我的推荐链接:
https://stefanpircalabu.medium.com/membership
人工智能先驱 Senseye 的计算机视觉的未来
用 10 行代码将模型训练速度提高 120 倍
简介: Senseye 处于神经科学和计算机视觉的前沿。他们的技术将高清、高帧率视频镜头转化为可操作的内部认知和行为过程情报,可供企业、学术界和政府机构使用。
如何创造一个更安全的世界:利用对精神疲劳、药物和酒精损伤、认知负荷和先进生物识别技术的见解,组织可以提高工作场所的安全性、员工的健康、提高培训计划的效率、为个人定制产品等等。Senseye 的客户利用这些见解来提升和发展他们的业务,并与他们的合作伙伴、员工和消费者进行深度互动。
图片来源:拉斐尔·波尔 via Unsplash
计算机视觉数据的真正挑战
Senseye 利用机器用来训练机器学习模型的高清视频片段的数量,将机器推向了极限。使用定制技术处理大量视频数据所需的计算能力是从用于驱动 Senseye 数据产品的原始帧中提取信息的一个限制因素。最终的产品有效性和成功直接依赖于大规模快速构建和测试新想法。
Senseye 使用来自眼睛的详细信息来提取神经生理洞察,并使其可用于软件应用。图片来源:Senseye 公司
当速度决定一切
最近,Senseye 与土星云合作,在他们的机器学习工作中取得了突破性的性能提升。土星云是一个数据科学和机器学习平台,它提供了市场上最快的计算工具。
没听说过土星?你只需要知道这些:GPU 上的随机森林:比 Apache Spark 快 2000 倍
为了测试土星云的能力,Senseye 选择了他们计算最密集的处理管道之一。它由 900 个超高清视频组成,每个视频时长 10 分钟,以 120 赫兹的频率录制,总计约 7.5TB 的磁盘容量。
图片来源:Arteum.ro via Unsplash
视频文件被转换为大块的三维阵列,并通过几个定制的 PyTorch 模型,使用更传统的分析计算机视觉技术来计算特征,最终用于下游的机器学习算法。
PyTorch 是一个开源的机器学习库。图片来源:Pytorch.org
“以我们工作的规模,可能需要 60 天来提取机器学习的特征。这样的滞后影响了我们迭代解决方案、改进软件和提高性能的能力。我们被迫仔细选择我们想要在不完整信息的情况下大规模测试的解决方案,或者在较小的数据子样本上运行更多的候选解决方案,这会对我们算法的鲁棒性和性能产生负面影响”——ML&AI 主管 Andrew Sommerlot 说
Senseye 之前使用的这一过程相当于每 GPU(泰坦 RTX)每视频大约 90 分钟的处理时间。使用传统的本地 GPU 机器,总处理时间为 60 天。
NVIDIA Titan RTX GPU 的内部使用成本为 2500 美元。图片来源:Nvidia.com
"在创建人工智能驱动的产品时,如果该产品在现实应用中部署时需要高性能和信心,那么全面的快速迭代是理想的选择
我们来谈谈“高度可扩展的 Python 分析”
土星云允许团队扩展到无限数量的 GPU。这是什么意思?这意味着 Senseye 的内部计算的限制因素被完全消除,开辟了一条通往闪电般快速的机器学习的道路。
Senseye 利用 Saturn 在云中扩展到 160 个 T4 GPU,摆脱了以前使用的本地机器的限制。这个改进只需要增加 10 行代码——对于性能改进来说,这是一个微不足道的变化。
现在,每个视频只需要 40 秒的时间来处理,使 Senseye 每天都可以迭代,而不是每两个月一次。
图片来源:Chuttersnap via Unsplash
“天啊!新的工作流程速度提高了 120 倍……”
这将 60 天的总运行时间减少到总共只有 11 个小时。这意味着什么?首先,Senseye 可以提高预测的准确性,并最终提高其底线价值:最终用户的工作场所事故减少意味着工作环境更安全,业主的保险索赔也更少。
“将运行时间从 60 天缩短到 11 个小时是一个令人难以置信的进步。我们能够在我们的模型上进行更多的迭代。这对我们产品 的有效性有着 重大的积极影响,这需要多次迭代才能达到我们客户所需的标准。”— Seth Weisberg,首席机器学习科学家(Senseye)
让我们把这些数字并排放在一起。
图 1:每小时处理的视频总数
本地 GPU 机器在 1 小时内处理了第一个视频的 70%。相比之下,土星一小时内处理了 90 个视频。那就是比快 120 倍。
表:系统运行时间
注意时间的数量级…
图片来源:棒长 via Unsplash
像这样的性能改进在未来并不遥远:Saturn 通过其交钥匙数据科学和机器学习平台让这些功能触手可及。
要了解更多关于土星云的信息,请访问这里的网站: saturncloud.io
随着 Senseye 继续开拓计算机视觉的应用,我们鼓励你关注他们的网站:senseye.co。
如果你喜欢这篇文章,请分享并告诉你的朋友和同事,计算能力将使他们和他们的客户的生活变得更好。
数据科学的未来
克里斯·劳顿在 Unsplash 上的照片
数据科学和业务环境正在融合
我花了很多时间向各种各样的公司咨询他们的数据科学战略。我还定期教授数据科学主题的课程。我目睹了公司对数据科学的角色及其在公司结构中的地位的思考方式发生了变化。我认为,这些变化在过去几年里一直在缓慢发生,但新冠肺炎的爆发和今年俄沙石油价格战加速了这种转变。
有什么变化?
在数据科学领域取得成功需要许多角色,但这一变化主要针对数据科学家这一角色本身。
数据科学工作分为两个不同的阵营。一组专注于数据科学的更学术的方面,如模型和算法。另一组人更专注于帮助做出商业决策的务实工作。后一个学科通常被称为应用数据科学。
数据科学内部的这种分工已经存在了一段时间。虽然这两个焦点之间的区别在现实世界中变得越来越明显,但我想重点关注的是第二个群体——应用数据科学。因此,在本文的剩余部分,我将使用术语数据科学和数据科学家来指代应用数据科学学科,除非另有说明。
在我遇到的大多数公司中,数据科学家的角色开始转移。以前,数据科学是一个独立的小组,通常在商业智能部门内,或者可能位于数据团队内。来自两个阵营的数据科学家都在同一个小组中,并根据需要在他们的两个重点领域之间分配工作。
然而,数据科学家的角色正在从这个集中的小组转移到整个组织的特定主题部门。一个完美的例子是我最近合作的一家制造公司。他们的制造流程中有一位学习数据科学的专家。这个人没有兴趣换工作,只专注于数据科学工作。他感兴趣的是它对改善公司生产流程的影响。数据科学正被推出 BI / IT 领域,更接近全国各地组织的战术工作。
推动这种变化的动力是什么?
这种转变背后的原因取决于你是从公司的角度还是从员工的角度来看。对该公司来说,两个简单的词正在推动这种变化:预算和专业知识。从个人角度来看,有两种不同的力量在起作用:工作保障和潜在的加薪。
组织驱动因素#1 —预算
在公司和家里,预算控制着我们的大部分决策。当您想到集中式数据科学团队时,您最终会想到成本中心,而不是利润中心。成本中心很难获得公司资金,而且几乎不可能说服其他部门为最终向成本中心报告的人付费。
将数据科学家的角色分散到整个组织的各个部门,每个部门负责支付其数据科学人员的工资。更关心利用数据进行决策的部门可以自由雇用更多的数据科学家,那些不重视这种做法的部门可以相应地采取行动。
这样每个部门自己铺床,可以躺在里面。一个部门雇佣的任何资源都是他们自己的资源,而不是与十几个其他部门共享。如果钻井部门发现数据科学有很高的价值,他们可以对其进行大量投资,而不会因为其他部门请求集中数据科学团队而推迟项目。
组织驱动因素#2 —专业知识
像任何从事集中服务的专业人员一样,数据科学家成为了万金油,试图了解让他们参与工作的每个部门的独特方面。他们不仅要成为数据科学方面的专家,还要成为金融、营销、工程和人力资源方面的专家。
虽然这种期望对员工来说是不现实的,令人疲惫不堪,但其他部门也会受到影响。如果某个拥有专业知识的人在执行他们的数据科学工作,石油公司的钻井部门可能会获得更多有用的见解。实现数据科学和特定部门专业知识结合的最简单方法是将数据科学家安置在部门内部。
这可以通过两种方式实现。一种方法是雇佣一名愿意了解钻井部门所有信息的数据科学家。因为他们只为钻井部门工作,所以他们会专门钻井。对一个人来说,在两个独立的学科上达到专家的理解水平比三十个学科更现实。第二种方法是在钻井部门内选择现有的主题专家,并将他们培训成数据科学家。
尽管这两种方法都能让你达到目标,但我发现大多数公司都选择培训现有的数据科学领域的专家。
个人驱动因素# 1——工作保障
在当今混乱的就业市场中,每个人都在寻找保证保住现有职位的方法,或者增加获得下一份工作的机会。如果你和另一个申请人在人力资源方面有同等的资格,但你能展示出在数据科学方面的工作组合,你就更有可能得到这份工作。同样,如果培训部门决定裁员,而你和另一个人的唯一区别是你发布到 Github 的数据科学项目组合,你将避免这一轮裁员。
不难看出这种附加值对公司招聘和解雇决策的影响。在当今世界,数据科学能力是非常有利的技能组合。当你衡量营销人员从在线课程或当地夜校学习的数据科学培训与仍然困扰许多营销部门的数据科学完全缺失的对比时,你被录用了!
但请记住,对于市场营销、钻井或金融,你所拥有的数据科学能力是与众不同的因素,而不是有特色的因素。预算紧缩,就像在紧缩的市场中一样,销售部门不打算在数据科学家身上花钱。他们正在招聘一名专业销售人员。但是,你在数据科学上投入的时间使你成为更好的候选人。
个人驱动因素# 2——加薪
失业和预算减少的另一个难题是加薪的希望。但是,和其他事情一样,如果你能证明自己的价值有显著提升,加薪是可能的。也许你今年利用你的数据科学技能为你的部门节省了 100 万美元。你可能会在你的薪水里找到一个小小的感激的象征。
与加薪相似的是晋升的机会。经常使用数据科学来帮助你的公司可能会在你的部门内获得晋升。顺便说一句,大多数晋升都会加薪。再说一遍,增加你对公司的个人价值将有利于你的工作保障和加薪的可能性。
为什么公司选择对现有员工进行数据科学培训,而不是聘请数据科学家?
我发现大多数公司都选择培训现有的数据科学领域的专家。
很实用的回答。我们以市场部为例。市场部的预算比去年少。他们需要懂营销的人。但他们也相信利用数据科学可以极大地帮助他们。以下是营销可用的选项。
- 聘请一名数据科学家。雇佣一名数据科学家可能超出了他们的预算。即使他们雇得起,他们仍然需要教他们营销。
- 雇佣一名已经掌握数据科学技能的营销专家。如果招聘人员能找到符合描述的人,这是一个很好的选择。当然,这是目前大多数参加数据科学课程的失业营销专业人士正在赌博会发生的事情。而一旦这些人在市场上有了,他们就会在仅仅是营销专业人士的人之前被雇佣。但是现在这仍然是市场部支付的另一笔工资。
- 让营销部门的一名现有员工成为数据科学家。该选项为现有员工提供了提升个人价值和加薪的机会。这也降低了对营销预算的影响。另外,营销正在沿着数据科学的道路前进,即使这些能力在开始时非常有限。
结论
在未来几年,数据科学将继续渗透到企业和其他组织的方方面面。与所有行业一样,它们越成熟,就越分散和专业化。数据科学也是如此。
随着数据科学在公司中的应用越来越广泛,它将需要更接近行业的每个应用。这些转型的早期阶段将最终创建营销数据科学、金融数据科学和销售数据科学等学科。但是不管未来的头衔是什么,有一件事是肯定的。数据科学的实践越来越接近它所分析的每一个主题。这种转变要求技能对等。未来的数据科学工作既需要数据科学专业知识,也需要特定部门的主题专业知识。
数据科学网络的未来&您如何从中受益
新冠肺炎时代的数据科学
2019 年多伦多机器学习峰会上的小组辩论
我是一个由 7500 名机器学习专业人士组成的团体的社区组织者。我全职工作组织会议、研讨会、讲习班和社会活动。2016 年,我们开始聚集在一个联合工作空间的大厅里,一个 30 人的小组。meetups 发展迅速,2019 年,我们为 500 至 2,000 名数据科学家、机器学习工程师、数据架构师、研究人员和企业家举办了活动。
毫不奇怪,新冠肺炎震撼了我们的世界。
COVID 不仅完全停止了这种面对面的聚会,而且也没有重新开始的迹象。当我们再次见面时,不会是在同样的情况下。这将是谨慎的,足够的座位空间,减少房间容量,严格的程序指南。不可避免地会看到赛事保险成本的上升和赞助的减少。
简而言之,举办大型集会将变得非常昂贵。
从社区组织者的角度来看,这是一个重大的挫折,但事实上,在 COVID 之前,我们已经看到了表明变革即将到来的趋势。COVID 只是加速了数据从业者和公司接近人工智能的市场转变。
此外,它迫使我们重新评估我们聚会的有效性,并为我们的社区采用新的聚会和网络方式。好消息是,这些变化为那些寻求培养技能和与同事有效沟通的人提供了新的机会。只需要一些创造力和开放的心态。
新冠肺炎数据从业者和 AI 团队的市场状况
2019 招聘会
每年,数以千计的新人工智能嵌入式产品进入市场,公司对将模型投入生产的挑战和复杂性有了更现实的理解。尽管如此,公司仍会低估创造人工智能产品所需的时间要求、财务成本和微妙的团队角色。大多数概念验证(POC)都没有成功。
缺乏共同分享的原则、方法和最佳实践意味着,尤其是在新冠肺炎会议期间,设定利益相关方的期望水平是一个持续的过程,充满了微观管理和加强问责制。理解生产中机器学习的复杂性仍处于早期阶段。对许多人来说,感觉好像我们还在蛮荒的西部。
在我们的机构群体讨论和委员会会议中,有两个主题一直主导着议程,并且在新冠肺炎会议期间变得越来越重要。对于技术团队来说,强调构建端到端的 ML 管道和模型治理占据了中心位置。对于非技术团队来说,理解“变更管理”的范围是最大的障碍。
这反映在整个招聘市场上。2019 年 11 月,我们为 70 家公司举办了人工智能招聘会。初创企业、大型企业和大型企业都在招聘各种职位,大多数都被贴上了数据科学家的标签,尽管预期各不相同。
尽管有头衔,几乎所有的职位都强调软件开发和工程技能,希望候选人有将预测模型投入生产环境的经验。
这对数据从业者意味着什么?
如果我们看到对数据科学“通才”的需求下降,那么由于新冠肺炎,2020 年的需求会更低。
无论您是数据从业者、科学家、工程师、分析师等。理解你的工作如何融入更大的图景和有凝聚力的团队结构变得更加重要。
通常,职位描述不能反映招聘公司的真实期望和要求。对可再现性、透明性、模型可解释性、清晰代码文档的既定方法、对减少管道债务的重视、理解计算成本以及无数其他潜在的项目杀手的需求很少被列出,更不用说制定和计划了。
像谷歌、亚马逊、网飞这样的“人工智能优先”公司有机会参与团队组建,并尝试能够解决这些挑战的流程。传统公司继续挣扎。
你的技能提升和人际关系网?
休息时的大脑约会会议
为了帮助进一步的人工智能项目,公司花费数千美元派遣世界各地的从业者参加会议,高级活动的费用从 600 美元到 1299 美元不等
COVID 加快了向虚拟聚会的转变,消除了许多进入的障碍。虚拟活动由世界各地主办,反映了新的和不同的市场,以及多样化的人工智能生态系统。这打开了各种专业主题聚会的大门。对云架构感兴趣?参加在新加坡举行的云架构师会议。想了解强化学习?加入奥斯陆的强化学习阅读小组。在生产中处理 ML;参加 ML Ops、生产和工程会议。
在这些活动中,面对面的交流是价值主张的重要组成部分。在虚拟环境中,会议厅对话被数字会议平台所取代,这些平台提供有针对性的虚拟配对和开放的与会者名单,以直接传递私人信息。
很多问题可以通过 Reddit、谷歌或 Youtube 内容来解决,但在家庭隔离期间,与处理过类似项目、了解你的特定用例的细微差别的人交谈仍然是可能的。当你与同龄人发展在线关系并拥抱虚拟平台时,只需要耐心和开放的心态。
虚拟活动提供了许多传统活动无法提供的优势:
- 增加参与问答会议的机会
- 社交平台允许更大规模的网络互动
- 会议“时间”以前是 1-2 天,现在在活动开始前几周提供
- 参与或主持虚拟小组和主题网络会议的机会
很多这样的工具已经存在,但是我们看到它们被前所未有的接受。
熟悉这些工具,并将其用于您的优势是一项值得的投资。在社交距离时代取得成功的方法将继续以物理/虚拟混合活动的形式被数据科学社区采纳和接受。
如果你对在这些新的虚拟平台上连接的想法持开放态度,那就先下手为强,试一试吧。有很多收获!
我们祝你好运。
我们过去的机器学习活动的讲座已经在数据科学的官方 YouTube 页面上举办。 您也可以在这里参加我们即将举办的活动
数据科学团队有前途吗?
阿曼达·达尔比约恩在 Unsplash 上拍摄的照片
是的,但前提是他们愿意接受结构性变革。
在过去的几年里,许多组织组建了数据科学团队。对于这些团队中的许多人来说,蜜月期早已结束。炒作推高的工资满足了积压的用例,这些用例要么停留在探索阶段,要么作为概念的证明。数据科学团队越专业化,影响越大。
缺乏软件工程和部署方面的技能——有时不愿意开发这些技能——是这种僵局的部分原因。然而,这些团队的组织结构也有责任。在许多情况下,数据科学家在公司中的职位会阻碍高效的工作流程。
我认为数据科学团队的困难类似于开发团队的问题。这种相似性意味着我们可以分析软件团队的设置来学习如何前进。让我们看看软件环境中团队的原型结构,看看这种类比能让我们走多远。
下面描述的蓝图改编自马修·斯凯尔顿和曼努埃尔·派斯的“团队拓扑”。如果你想深入这个话题,我强烈推荐!
有哪些蓝图可以选择?
1.流程一致的团队
Steam-aligned 团队是跨职能团队,尽可能快速独立地增加价值。他们有明确的责任。他们与组织其他部分的相互作用被清楚地定义。为了履行他们的义务,他们依赖于用户的直接反馈,并可以相应地实现新的功能。这些团队是软件开发公司或分支机构的核心。
很明显,纯粹意义上的数据科学团队远远不是与流程一致的团队。它看起来和行为完全相反。对其他团队有很大的依赖性,几乎没有来自用户的任何直接反馈,而且他们基本上不能自己实现一个特性。
2.扶持团队
使能团队是下一个蓝图。他们的主要工作是积累专业知识,这些专业知识可以被与流程一致的团队用来提高他们的技能或能力。授权团队支持其他团队;它们本身不实现任何功能。
一些数据科学团队就是这样做的。有时候。
3.复杂子系统团队
最终的蓝图是复杂的子系统团队。如果在一个系统中有一个高度专业化的领域,那么就需要一组专家来开发和维护它。
这就是数据科学团队。但在很多情况下,这并不是一个可行的团队结构。数据科学团队中的用例种类通常非常多。一些团队成员支持营销活动,其他人试图检测在线商店中的欺诈行为,其他人则讨论在集群上从 Python 2 升级到 Python 3 是否是个好主意。
数据科学团队是什么样子的?
假设许多数据科学团队都类似于一个支持团队和一个复杂子系统团队,但两者都不是。这种不明确的状态产生了一堆问题。这里有两个关键的问题:
- 数据科学团队试图猜测组织及其用户需要什么。他们可能试图通过与每个愿意倾听的人过度沟通来弥补这一点。然而,这是偶然的优先顺序,而不是附加价值。
- 数据科学团队在数据收集和将模型部署到生产方面都与相关的基础设施分离。在最糟糕的情况下,数据科学家会将他们的笔记本(以及没有投入生产的责任)扔给一些开发人员或基础架构团队。在最好的情况下,结果是生产就绪,但是负责部署的团队在他们的待办事项中有足够多的其他项目。
这种情况存在结构性缺陷,只能通过结构性变革来改善。让我们回到最初的问题。
数据科学团队有前途吗?
如果您自己是一名数据科学家,那么从现在开始有三种方法:
- 正式重组:告别您的数据科学团队,成为与流程一致的团队的一员。在这些团队中建立一个专家社区,以便在需要时对模型和统计数据进行深入讨论。
- 非正式重组:尽可能成为你的利益相关者团队的卧底成员。创造身体上的亲近,这样他们就会像对待自己人一样对待你。在用例运行期间交流和讨论您的结果,以确保快速反馈。
- 换工作:寻找一个有着不同设置的组织,或者你的组织中有着更好结构的另一个团队。
作为一个正在康复的社会学家,我对这个问题有强烈的感受。也就是说,对这些结论要有所保留。尽管如此,围绕数据科学团队的讨论不会结束,因为一些相关方不想参与其中。最好勇敢面对,不断进步。
请在评论中或在 Twitter 上告诉我你的经历和看法。我也很乐意在 LinkedIn 上联系。感谢阅读!
数据科学家的未来
数据科学家职位的分歧。
来源: Unsplash
2012 年秋天,我记得我母亲告诉我一篇文章,说数据科学家是一个新的、性感的职业。那个时刻一直伴随着我,因为没有人愿意听到他们的父母说出“性感”这个词。当时我并不知道,《哈佛商业评论》的这篇文章被认为是学生大举进入数据科学领域的催化剂。这股“数据热”将对我自己的职业轨迹产生重大影响。
在接下来的八年里,用于描述数据相关主题的术语发生了巨大变化。2012 年,最常见的三个搜索词分别是“统计”、“人工智能/人工智能”和“大数据”。截至 2020 年 7 月,前 3 个最常见的搜索词变成了“机器学习”、“数据科学”和“人工智能/人工智能”。排除最近的 COVID 激增(例如“COVID 统计”),术语“统计”在此期间的使用量急剧下降。如果你在 2012 年知道对数据的热情将在未来十年爆发,你不可能预测到谷歌对“统计”的搜索会下降。
发表于 Tableau Public
看到这些趋势后,你可能会认为数据科学对统计学和统计学家是一种威胁。在谷歌上快速搜索数据科学家的职位空缺,在美国确实得到了 8076 个结果,而只有 1526 个统计员的职位空缺。随着对数据相关技能需求的预期增长,我认为更有可能的结果是雇主不再寻找独角兽数据科学家。对于这个领域之外的人来说,独角兽数据科学家是可以做所有事情的人;集程序员、统计学家和机器学习工程师于一身。将需要跨领域的专业化,让统计学家也能找到自己的位置。招聘、工作职责和头衔方面的这种变化将会出现,原因如下:
- 机器学习正在被添加到计算机科学本科课程中
- API 将使机器学习自动化并将其集成到现有的应用程序中变得更加容易
- 与数据相关的技术在广度上不断扩展,使得数据科学家不可能了解所有的东西
- 自动化将为更有创造力的思考者腾出时间
我相信这些趋势将导致数据科学家分成两条道路,软件工程师,专注于机器学习,和决策科学家。让我们来看看不同之处。
由于他们的强项不同,他们将负责不同类型的问题。软件工程师将被分配有明确定义的范围和访问大型、高质量数据集的项目。他们将构建与机器学习 API 集成的应用程序。这些 API 将自动化数据摄取、学习、训练和预测的标准过程。示例可能包括合并销售预测的商业智能应用程序,或者设计利用自然语言处理的知识发现系统。与此同时,决策科学家将被分配给范围不确定的项目。他们将负责设计合适的问题来回答。这些问题通常会有不完整的信息,迫使决策科学家更适应不确定性。他们需要在分析数据之外得出安全的结论。这需要对领域有具体的理解。
由于他们工作的性质,我认为与软件工程师相比,决策科学家将有更广泛的背景。软件工程师通常会遵循标准的计算机科学路线,参加编码训练营,或者以前是数据工程师。与此同时,决策科学家可能是前统计学家,或者具有社会或物理科学分析背景的人。拥有跨多个领域的能力,这个人可以被视为多面手。也许是一个“数据通才”。
- 随着技术日新月异,数据专业人员需要了解长期趋势。在他们的 2020 年新兴工作报告中,LinkedIn 将数据科学家列为第三大工作,年增长率为 37%。对数据技能的过度需求将推动进一步细化数据科学中的具体职位的需求。观察这一领域在未来十年如何发展将会很有趣。
- 数据通才
注意:这篇文章的后续于 2021 年 9 月在这里发表。
深度学习的未来可以分为这三种学习范式
来源: Unsplash
混合、复合和简化学习
深度学习是一个广阔的领域,以一种算法为中心,这种算法的形状由数百万甚至数十亿个变量决定,并在不断变化——神经网络。似乎每隔一天就有大量的新方法和技术被提出来。
然而,总的来说,现代的深度学习可以分为三种基本的学习范式。每个人都有一种学习的方法和信念,为增加深度学习的当前能力和范围提供了巨大的潜力和兴趣。
- 混合学习——现代深度学习方法如何跨越监督和非监督学习之间的界限,以适应大量未使用的未标记数据?
- 复合学习——如何以创造性的方法将不同的模型或组件连接起来,以产生一个大于其各部分总和的复合模型?
- 减少学习 —为了性能和部署目的,如何减少模型的大小和信息流,同时保持相同或更强的预测能力?
深度学习的未来在于这三种学习范式,每一种范式都是紧密相连的。
混合学习
这种范式试图跨越监督学习和非监督学习之间的界限。由于标记数据的缺乏和高成本,它经常在商业环境中使用。本质上,混合学习是这个问题的答案,
我如何使用有监督的方法解决/结合无监督的问题?
首先,半监督学习正在机器学习社区中获得一席之地,因为它能够在只有少量标记数据的监督问题上表现得非常好。例如,一个设计良好的半监督 GAN(生成对抗网络)在看到只有 25 个训练样本后,在 MNIST 数据集上取得了超过 90%的准确率。
半监督学习是为有大量无监督数据但有少量监督数据的数据集设计的。传统上,监督学习模型将在数据的一部分上训练,而非监督模型在另一部分上训练,而半监督模型可以将标记数据与从未标记数据中提取的洞察相结合。
作者创建的图像。
半监督 GAN(缩写为 SGAN)是对标准生成对抗网络模型的改编。鉴别器既输出 0/1 来指示是否生成图像,也输出项目的类别(多输出学习)。
这是基于这样的想法,即通过鉴别器学习区分真实和生成的图像,它能够在没有具体标签的情况下学习它们的结构。通过少量标记数据的额外强化,半监督模型可以用最少量的监督数据实现最佳性能。
你可以在这里阅读更多关于 SGANs 和半监督学习的内容。
甘还参与了混合学习的另一个领域——自我监督学习,在这种学习中,无监督的问题被明确地框定为有监督的问题。GANs 通过引入一个生成器来人工创建监督数据;创建标签是为了识别真实/生成的图像。从一个无监督的前提,一个监督的任务被创建。
或者,考虑使用编码器-解码器模型进行压缩。在它们最简单的形式中,它们是神经网络,在中间有少量的节点来代表某种瓶颈,压缩形式。两边的两部分分别是编码器和解码器。
作者创建的图像。
网络被训练以产生与向量输入相同的输出(从非监督数据中人工创建的监督任务)。因为中间有一个故意放置的瓶颈,网络不能被动地传递信息;相反,它必须找到将输入内容保存到一个小单元中的最佳方法,以便解码器能够再次对其进行合理解码。
经过训练后,编码器和解码器被拆开,可用于压缩或编码数据的接收端,以极小的形式传输信息,几乎没有丢失数据。它们也可以用来减少数据的维数。
作为另一个例子,考虑大量的文本集合(可能是来自数字平台的评论)。通过一些聚类或流形学习方法,我们可以为文本集合生成聚类标签,然后将这些作为标签对待(假设聚类做得很好)。
在每个聚类被解释之后(例如,聚类 A 表示对产品的抱怨,聚类 B 表示正面反馈,等等)。)然后,像 BERT 这样的深度 NLP 架构可以用于将新文本分类到这些簇中,所有这些都使用完全未标记的数据和最少的人工参与。
这又是一个将无人监管的任务转化为有人监管的任务的有趣应用。在一个绝大多数数据都是无监督数据的时代,通过混合学习建立创造性的桥梁来跨越有监督和无监督学习之间的界限具有巨大的价值和潜力。
复合学习
复合学习寻求利用不是一个模型而是几个模型的知识。这是一种信念,即通过独特的信息组合或注入——静态和动态——深度学习可以持续深入理解和表现,而不是单一的模型。
迁移学习是复合学习的一个明显例子,其前提是模型的权重可以从类似任务的预训练模型中借用,然后在特定任务上进行微调。像盗梦空间或 VGG-16 这样的预训练模型,其架构和权重是为区分几种不同类别的图像而设计的。
如果我要训练一个神经网络来识别动物(猫、狗等。),我不会从零开始训练一个卷积神经网络,因为要达到好的效果需要太长的时间。相反,我会采用像 Inception 这样的预训练模型,它已经存储了图像识别的基础知识,并在数据集上训练几个额外的时期。
类似地,NLP 神经网络中的单词嵌入,其根据单词与嵌入空间中的其他单词的关系,将单词在物理上更靠近地映射(例如,“apple”和“orange”比“apple”和“truck”具有更小的距离)。像 GloVe 这样的预训练嵌入可以放入神经网络中,从已经是单词到数字的、有意义的实体的有效映射开始。
不太明显的是,竞争也能刺激知识增长。首先,生成性对抗网络借鉴了复合学习范式,从根本上让两个神经网络相互对抗。生成器的目标是欺骗鉴别器,鉴别器的目标是不被欺骗。
模型之间的竞争将被称为“对抗性学习”,不要与另一种类型的对抗性学习混淆,后者指的是恶意输入的设计和模型中弱决策边界的利用。
对抗性学习可以刺激模型,通常是不同类型的模型,其中一个模型的表现可以用其他模型的表现来表示。在对抗学习领域仍有许多研究要做,生成对抗网络是该子领域唯一突出的创造。
另一方面,竞争学习类似于对抗学习,但是是在逐个节点的规模上执行的:节点竞争对输入数据的子集做出响应的权利。竞争学习是在一个“竞争层”中实现的,在这个竞争层中,一组神经元都是相同的,除了一些随机分布的权重。
将每个神经元的权重向量与输入向量进行比较,并激活具有最高相似性的神经元,即“赢家通吃”神经元(输出= 1)。其他被“停用”(输出= 0)。这种无监督技术是自组织地图和特征发现的核心组成部分。
复合学习的另一个有趣的例子是在神经架构搜索中。简而言之,强化学习环境中的神经网络(通常是递归的)学会为数据集生成最佳神经网络——算法为你找到最佳架构!你可以在这里阅读更多关于理论的内容,在这里阅读 Python 中的实现。
集成方法也是复合学习中的主要方法。深度集成方法已经被证明是非常有效的,端到端的模型堆叠,比如编码器和解码器,越来越受欢迎。
许多复合学习都是找出在不同模型之间建立联系的独特方式。它的前提是,
一个单一的模型,甚至是一个非常大的模型,比几个小的模型/组件表现得更差,每个小的模型/组件都被委派专门负责任务的一部分。
例如,考虑为一家餐馆构建聊天机器人的任务。
作者创建的图像。
我们可以将它分成三个独立的部分:客套话/闲聊、信息检索和一个动作,并设计一个模型来专门处理每一个部分。或者,我们可以委托一个单一的模型来执行所有这三个任务。
作者创建的图像。
毫不奇怪,组合模型可以在占用更少空间的情况下执行得更好。此外,这些种类的非线性拓扑可以很容易地用像 Keras 的功能 API 这样的工具构建。
为了处理日益多样化的数据类型,如视频和三维数据,研究人员必须建立创造性的组合模型
点击阅读更多关于写作学习和未来的内容。
简化学习
模型的规模越来越大,特别是在自然语言处理领域——深度学习研究中令人兴奋的中心——越来越多。最新的 GPT-3 模型有 175 亿个参数。把它比作伯特就像把木星比作一只蚊子(嗯,不是字面意思)。深度学习的未来更大吗?
来源: TDS 。图片免费分享。
很有争议,不。GPT-3 非常强大,无可否认,但它在过去一再表明,“成功的科学”是对人类产生最大影响的科学。每当学术界偏离现实太远,它通常会变得默默无闻。这是神经网络在 20 世纪后期被遗忘的一个短暂时期的情况,因为可用数据太少,无论这个想法多么巧妙,都是无用的。
GPT-3 是另一种语言模型,它可以编写令人信服的文本。它的应用在哪里?是的,例如,它可以生成查询的答案。然而,有更有效的方法来做到这一点(例如,遍历知识图,并使用像 BERT 这样的较小模型来输出答案)。
在计算能力逐渐枯竭的情况下,GPT-3 的巨大体积,更不用说一个更大的模型,似乎是不可行或不必要的。
*"摩尔定律有点失去动力了。"
相反,我们正在走向一个嵌入人工智能的世界,智能冰箱可以自动订购食品杂货,无人机可以自行导航整个城市。强大的机器学习方法应该能够下载到个人电脑、手机和小芯片上。
这需要轻量级人工智能:在保持性能的同时,让神经网络变得更小。
事实证明,深度学习研究中的几乎所有事情都直接或间接地与减少必要的参数数量有关,这与提高泛化能力以及性能密切相关。例如,卷积层的引入大大减少了神经网络处理图像所需的参数数量。递归层结合了时间的概念,同时使用相同的权重,允许神经网络以更少的参数更好地处理序列。
嵌入层显式地将实体映射到具有物理意义的数值,从而不会给额外的参数带来负担。在一种解释中, Dropout 层显式地阻止参数对输入的某些部分进行操作。 L1/L2 规则化确保网络利用其所有参数,确保它们都不会变得过大,并且每个参数都能最大化其信息价值。
随着专业层的创建,网络需要越来越少的参数来处理更复杂和更大的数据。其他更新的方法明确地寻求压缩网络。
神经网络修剪旨在移除对网络输出没有价值的突触和神经元。通过修剪,网络可以在删除几乎所有自身的同时保持其性能。
来源:奥莱利。图片免费分享。
其他的方法,比如病人知识蒸馏找到了将大型语言模型压缩成可下载形式的方法,比如,下载到用户的手机上。这是谷歌神经机器翻译(GNMT)系统的必要考虑,该系统支持谷歌翻译,需要创建一个可以离线访问的高性能翻译服务。
本质上,简化的学习围绕着以部署为中心的设计。这就是为什么大多数减少学习的研究来自公司的研究部门。以部署为中心的设计的一个方面是不要盲目地遵循数据集的性能指标,而是要关注模型部署时的潜在问题。
例如,前面提到的敌对输入是设计用来欺骗网络的恶意输入。标志上的喷漆或贴纸可以欺骗自动驾驶汽车加速超过限速。负责任的简化学习的一部分不仅是使模型足够轻便以供使用,而且要确保它能够适应数据集中没有表示的极限情况。
简化学习可能是深度学习研究中最不受关注的,因为“我们设法用可行的架构规模实现了良好的性能”远不如“我们用由数十亿个参数组成的架构实现了最先进的性能”性感。
不可避免的是,当对更高百分比分数的大肆追求逐渐消失时,正如创新的历史所显示的那样,简化学习——实际上只是实践学习——将得到更多应有的关注。
摘要
- 混合学习寻求跨越监督和非监督学习的界限。像半监督和自我监督学习这样的方法能够从未标记的数据中提取有价值的见解,随着无监督数据的数量呈指数增长,这是非常有价值的。
- 随着任务变得越来越复杂,复合学习将一个任务分解成几个更简单的部分。当这些组件协同工作(或相互对抗)时,结果是一个更强大的模型。
- 随着深度学习度过炒作阶段,简化学习还没有受到太多关注,但很快就会出现足够的实用性和以部署为中心的设计。
感谢阅读!
好数据的未来—您现在应该知道的!
“利用指数技术来解决大目标,并使用快速迭代和快速反馈来加快实现这些目标的进度,这是关于以极快的速度创新。但如果创业者不能升级自己的心理来跟上这项技术,那么他们赢得这场赛跑的机会就很小。”
― 彼得·h·迪亚曼迪斯, 大胆:如何做大,创造财富,冲击世界
在 Unsplash 上由 Franki Chamaki 拍摄的照片。
介绍
现在还是数据的第一天。世界各地的公司、政府、非营利组织已经从数据中提取了大量的价值。但是真的,比起即将到来的事情,今天真的只是 天 1 。 数据呈指数级增长 ,我们从中提取知识的能力也是如此。如果你把我们可用的数据量想象成一个苹果,那么到 2030 年,这个苹果已经变成了一个足球。到 2050 年,它将有整个足球场那么大!
但是这对你我来说到底意味着什么呢?究竟是什么促成了这种数据增长?这是否意味着我们可以从数据中提取的价值将随着数据量的增加而线性增长?由于我对其中的含义仍然有点困惑,我决定对未来的数据世界进行一次简短的参观。这篇文章提供了我个人认为数据的未来会带来什么,基于不断增长的数据量,我们从中提取价值的能力,以及研究告诉我们的关于它的信息。
我真的相信数据的未来将塑造任何行业。如果我选取任何一个样本行业,看看波特五(或六)种工作力量,并问自己数据将对他们产生什么影响,那么我很清楚,在 10 年或 20 年后,每个行业都会因数据的影响而变得非常不同。所以对你来说,问题不是要不要抓住这个“机会”,而是你要做什么,因为如果不抓住,你就会被它打乱。
为什么这一点现在如此重要?
好的,数据正在快速增长。有什么大不了的…技术将会适应,我们的公司将会简单地跟随领导。
只是,一切都太晚了。太晚了。
根据目前的预测,数据不仅在快速增长,而且可能呈指数级增长!除此之外,我们从数据中提取信息的能力、计算能力也在呈指数增长!
这就是指数增长技术的问题所在,当你发现时已经太晚了。
“今天,我们生活在一个全球化和指数化的世界。问题在于,我们的大脑——以及我们的感知能力——从未被设计成以这种规模或这种速度进行处理。我们的线性思维实际上无法搜索指数级数。”
― 彼得·h·迪亚曼迪斯, 大胆:如何做大,创造财富,冲击世界
让我更清楚地说明这一点:在 6 年内,一家公司将面临现在可用数据的四倍。它将能够以比现在快 8 倍的速度/更低的成本获得对现有数据的预测。如果该公司在 6 年内分析今天的数据,它将花费今天一半的时间。大多数新数据将是实时的,它将是事件/行为类型的数据,而不是“状态”数据。大量数据将以图像形式存在,大量数据将存在于边缘设备上,大量计算也将在那里完成。最重要的是,大量免费可用的技术来应对所有这些变化,将会充斥开源市场。
你觉得你正走向一个能够解决这个世界的方向吗?如果你得到了你的答案,我想它也回答了这个问题“为什么这个现在如此重要?”
图片由 Sven Balnojan 提供。
数据&计算呈指数级增长
问题是,目前的数据预测只涵盖了未来的一部分。但是,如果您对数据进行推断,您会注意到数据量大约每 3 年翻一番,并且预计在未来 5 年内也会如此。我确实相信,许多潜在的力量将继续推动这一趋势。我看到的力量主要是:
- 边缘设备的发展预计到 2025 年将达到 416 亿台联网设备。
- 智能手机的普及率将接近 100%,目前为 44% 。
- 互联网采用率将接近 100%,目前为 59% ,谷歌&脸书的大型项目旨在为全世界提供互联网。
- 许多底层技术的指数级增长,如数据存储、产生数据的计算、边缘设备的成本等..所有这些本质上都与摩尔定律有关。
我能找到的最好的预测来自希捷,你可以在这里找到。 IDC 希捷数据时代白皮书。如果你对数据进行指数拟合,这就是数据的样子。
这只是 IDC &希捷的简单预测。图片由 Sven Balnojan 提供。
接下来,让我们看看指数持续到 2030 年。
指数拟合预测。图片由 Sven Balnojan 提供。
最后,真正有趣的问题是,2050 年的事情可能会是什么样子?
我们在数据石器时代!图片由 Sven Balnojan 提供。
请注意,这描述的是数据,而不是存储的数据。但是,真正从数据中提取价值实际上,存储数据并不重要,更重要的是提取信息,做出决策,采取行动,然后丢弃数据。所以我发现这个预测是即将到来的浪潮的一个很好的来源。对我来说,预测的重要启示是:
- 到 2030 年,我们将拥有大约 572 的数据,大约是现在的 10 倍。
- 到 2050 年,我们将拥有 50,000–500,000 Zettabytes,这是之前的 1,000–10,000 倍(通过指数延拓进行预测)。
- 到 2025 年,超过 50%的数据将处于边缘
- 到 2025 年,超过 50%的数据将是实时的,这一趋势将持续到 2050 年,可能接近 90%
- 到 2025 年,80–90%的数据将是行为/交易数据,或者我称之为“事件数据”,这一趋势可能会保持在 90–100%。
另一方面,我们有能力从这些海量数据中提取信息。据我所知,摩尔定律仍然很强大,尽管有些人认为它已经碰到了前进道路上的最后一个路障。尽管如此,给定芯片上的微处理器密度大约每 18 个月翻一番,为我们提供了廉价的边缘设备、智能手机和令人惊叹的计算机。
同一方向的另一个趋势是 GPU 的发展,从 1996 年到 2020 年,GPU 实际上也遵循指数增长曲线)。GPU 不仅仅用于制作图形,因为图形通常意味着我们需要做大量的矩阵乘法和加法,GPU 正是为此而优化的。事实证明,这正是今天的数据分析所需要的,大量的矩阵数学。特别是,所有的深度学习、人工智能和机器学习从根本上讲都是关于加法和乘法矩阵,这就是为什么我们目前从数据中提取信息的能力与 GPU 计算能力的指数增长有很大关系。
但这还不是全部,TPU 的出现,专门为机器学习设计的芯片将继续推动这些趋势越来越快。TPU 本质上与 GPU 做同样的事情,但更节能,因此压低了价格。
最后,还有量子计算机的指数增长,这可以通过“罗斯定律”来衡量,这已经持续了 17 年。罗斯定律表明,量子位的数量,即量子芯片上的比特数,大约每年都会翻一番。虽然量子机器学习在很大程度上仍然是理论性的,但我毫不怀疑量子数据分析将在未来十年成为普通人的工具。
事件数据是一座金矿
在“经典”营销和营销自动化中,存在以下区别
- 社会人口统计数据,如年龄、居住地、收入等。
- 行为数据,比如你今年是否购买了某些物品,你是否打开了电子邮件或点击了某个链接。
但是我真的认为区分“状态和事件”数据要好得多。让我们将“状态”定义为
“任何系统在任何时间点的状况。”(这是状态的热力学定义)
事件的合理定义可以是
“系统从条件 A →条件 B 的转变”
因此,如果我是系统,那么我在Amazon.com上购买一件物品,对于一个名叫斯文的人来说是这样的:
- 今天上午 12 点;还没买;状态:“非买方”;事件:无。
- 今天下午 1 点;刚刚点击了 Amazon.com 状态上的结账按钮:“非买家”;事件:“斯文购买新物品”
- 今天 1:01 下午;状态:“买方”
有趣的是,状态数据和事件数据实际上是等价的。两种看待世界的方式,因为如果我给你这个系列:
- “这是今天下午 1 点的活动:斯文购买新物品”,然后你可以告诉我斯文在该活动之前和之后的确切状态。
- “这是状态:在上午 12 点斯文不是买家,在 1:01 下午他是买家”,然后你也可以告诉我,斯文在下午 1 点买东西。
那么如果这两种数据是等价的,为什么有关系呢?因为它们只在理论上是等价的!在现实中,你要么:
- 没有任何给定时间点的“状态”数据= >因此无法了解事件(因为您不知道 Sven 在 12 am 不是买家)
- 没有所有的事件,但只是其中的一小部分= >不能够告诉国家,但只是今天真正发生了什么。
为什么这对我们很重要?因为许多公司已经围绕国家数据建立了大数据分析能力,然而在 10 年内,99%的数据将是事件数据!
唯一的好处是?Martens Provost 的一项伟大研究给出了一些提示,使用事件数据实际上是一件非常有利可图的事情。
计算&边缘数据
到 2025 年,超过 50%的数据将收集在边缘。在 416 亿台物联网设备上,仅包括约 60 亿部智能手机。更多的将来自传感器、照相机等等。当然,你的智能手表也会在这个名单上。最重要的是,没有互联网连接的边缘设备将会出现。今天,所有这些东西都可以对数据做两件事:
- 收集它,并将其发送到某个中央集线器进行存储/评估。因为他们有网络连接。比如你的智能手机,它分析你在本地拍摄的照片,把它们发送到一个中心,然后得到一个“照片集”,或者给它们加注释,等等。
- 在设备上本地计算这些数据。这总是一个小挑战,因为这些设备的计算能力比我们通常的云计算机小得多。
这意味着什么呢?对我来说,这意味着,这两件事都会对未来的公司产生影响。首先,作为一家公司,您将面临大量边缘收集的数据,这些数据希望在一个中心位置进行评估,这些数据来自供应商、您的客户和其他将向您提供此类数据的第三方。
其次,作为一家公司,您可以控制自己的边缘设备来收集数据。想想包装和运输跟踪芯片、可穿戴芯片、芯片、相机等。将会有很多接触点让你比以前更多地控制边缘设备。
第三,不管有没有互联网连接,边缘设备都需要自己进行计算来评估数据。这需要转变视角,因为目前,大多数数据分析人员或机器学习者大多专注于大型计算设备上的数据的集中评估。但机器学习已经可以在任何边缘设备中实现。最受欢迎的机器学习框架之一 tensor flow 已经在 javascript 中提供,基本上允许机器学习模型在智能手机或任何其他设备的浏览器中进行训练和评估&。
除了数据分析必须朝着这三个不同的方向发展之外,所涉及的数据类型也将为许多公司带来范式转变。
实时数据将以 50%的速度递增
大量的当前数据分析基于历史数据,以及如上所述的“状态”数据。实时数据通常根本不会进入算法。如果是这样的话,它会出现在一系列数据的末尾,可能会有一些“权重”来使当前数据比历史数据更重要。
与此形成鲜明对比的是未来的数据领域,其中真正且唯一重要的东西是实时数据,因为将会有如此多的实时数据!许多公司求助于历史和状态数据的原因是,在过去,我们几乎没有事件类型的数据。我们所知道的关于某人在某处点餐的唯一信息是他的社会人口统计数据,我们可能不得不在某处购买这些数据。
但在未来,这种动态将会改变。就像图像识别一样。在过去,我们需要 100 多张图像才能让计算机告诉我们图像上的人是谁。今天,在这项任务中,计算机实际上比人类专家更好,仅仅基于一张图像。
未来也是如此,我们将能够从一天的活动数据中准确地告诉一个人,他喜欢什么,他以后可能会买什么,等等。我们不需要他的收入、性别等任何数据。这一切都将发生在事件中,发生在一天的实时互动中。
这将再次给全世界的分析人员带来巨大的范式转变。未来,真正的价值将不再是随着时间的推移收集大量特定数据,而是收集大量数据。
图像数据将非常庞大
一个简单的事实是,大多数公司都不认为图像数据对他们的业务会很重要,因为没有好的“核心产品匹配”。一个电子采购系统可能会认为他们的完整交互是通过一个网站或一些数字系统,图像数据的使用在该领域是有限的。最好让那些收集笔记本电脑摄像头图像、监控录像等的人去做。
我喜欢从两个不同的角度来解释这种情况。
第一,一个公司不存在于真空中,我喜欢通过观察搬运工的五种(或六种)力量来了解行业动态:
波特的六种力量。图片由 Sven Balnojan 提供。
现在的问题是,图像数据有可能被整合到塑造你的行业的六种力量中的任何一种的核心中。如果你是一个电子采购系统,你的力量是:
- 竞争/新进入者:有一些传统的电子采购系统可能会遵循你的想法。那些只占有你的一小部分市场的竞争对手呢?服务于更专业的部分,并认为 VR/AR 是展示作品的一种智能方式?
- 顾客/替代者/补充者:如果你的顾客突然可以在他们的智能手机上使用一个应用程序(由别人提供)来立即识别他们正在寻找的东西,并在其他市场找到报价,那该怎么办?
- 供应商:如果你的供应商突然开始使用图像技术与他们的最终用户建立更深层次的联系,绕过你,因为他们通过人工智能提供卓越的客户服务,那会怎么样?如果供应商可以使用 edge 数据快速检测出最终用户何时需要重新订购复印纸或矛部件等相同的物品,会怎么样?
所有这些东西的核心都是由图像数据驱动的,所有这些都可能会扰乱这个行业,我认为这离获得适合图像数据的核心产品还很远。
其次,大量可用的图像数据不仅会带来数据,还会带来大规模使用这些数据的技术。任何人都可以在图像上进行大量的计算,既便宜又容易,再次改变了动力学。它可能会把 OCR 带到一个没有纸质文件到处乱飞的水平。至少这是你的客户和供应商所期望的。它将把图像上物体的识别带到一个非常接近完美的水平(远远超过人类水平)。还有很多现在想不起来的事情。
我不确定图像数据本身会改变任何行业,但同样的原则适用于实时数据、事件数据以及我们到目前为止讨论的所有东西。我确实相信,这些话题中没有一个应该马上被抛弃,因为它们合在一起会扰乱每一个行业。
剩下要问的就是:你准备好了吗?
资源
这里是我在整篇文章中分享的所有相关资源。
- IDC 物联网设备预测。
- 全球智能手机普及率数据。
- Statista提供的互联网采用数据。
- 主要的信息来源是关于数据世界的 IDC & SeaGate 白皮书预测全球范围内的数据增长。
- InfoQ 的一篇关于摩尔定律的文章提到了已经触及的潜在底部。
- 谷歌关于其张量处理单元的文章 (TPUs)。
- 稍微提一下量子计算机中量子位增长率的罗斯定律,回到 Steve Jurvetson 的评论。
- 维基百科页面描绘了一幅关于机器学习&量子计算结合的美好画面。
- 2011 年的 Martens & Provost 文章讲述了在大规模目标定位工作中使用交易数据和社会人口数据。
- Google 开发的 Tensorflow Javascript 库。
- 2015 年福布斯关于超人类水平图像识别性能的文章。
机器学习的未来
苹果 | 谷歌 | SPOTIFY | 其他
Max Welling 在 TDS 播客
编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:
在过去十年中,机器学习的进步来自两件事:计算能力的提高和更好的算法。这两个领域在大多数人的思维中已经变得有些孤立:我们倾向于想象有人构建硬件,有人制作算法,这两者之间没有太多的重叠。
但是这张图是错的。硬件限制可以并确实影响算法设计,而算法可以用来优化硬件。计算和建模越来越多地被这两个领域的专家一起优化。
我今天的嘉宾是世界领先的机器学习应用软硬件集成专家之一。Max Welling 是一名前物理学家,目前在世界领先的芯片制造商高通公司担任技术副总裁,此外,他还是加州大学欧文分校、CIFAR 和阿姆斯特丹大学的机器学习研究员。关于机器学习的研究现状以及该领域的未来方向,Max 有许多见解可以分享,以下是我最喜欢的一些对话:
- 计算耗费能量,并且很快耗尽手机电池,因此机器学习工程师和芯片制造商需要想出聪明的方法来降低运行深度学习算法的计算成本。实现这一点的一种方法是压缩神经网络,或识别可以在对性能影响最小的情况下删除的神经元,另一种方法是减少用于表示每个网络参数的位数(有时甚至减少到一位!).这些策略往往会一起使用,而且它们在某些方面有着相当深刻的联系。
- 目前,机器学习模型是针对非常具体的问题进行训练的(比如将图像分类到几百个类别,或者从一种语言翻译到另一种语言),如果它们被应用于甚至稍微超出它们被训练的领域,它们就会立即失败。例如,一个经过训练的计算机视觉模型在一个以深色皮肤为特征的数据集上识别面部表情,当在一个以浅色皮肤为特征的不同数据集上进行测试时,表现将会不佳。生活经验告诉人类,肤色不应该影响对面部特征的解释,但这种微小的差异足以推翻当今甚至最先进的算法。
- 因此,真正的挑战是可推广性——人类在这方面仍然比机器做得好得多。但是我们怎么训练机器学习算法去泛化呢?马克斯认为,答案与人类的学习方式有关:与机器不同,我们的大脑似乎专注于学习物理原理,比如“当我拿一个东西扔向另一个东西时,那些东西会相互反弹。”这个推理在某种程度上独立于这两件事。相比之下,机器倾向于从另一个方向学习,不是根据普遍的模式或规律进行推理,而是根据适用于非常特殊的问题类别的模式进行推理。
- 出于这个原因,Max 认为机器学习最有前途的未来发展领域将集中在学习逻辑和物理规律上,而不是这些规律或原则的具体应用上。
你可以在这里的 Twitter 上关注 Max,在这里的 Twitter 上关注我。
地图的未来是可以学习的
探索鲁棒可视化地图构建的新方法
根据视频数据对 3d 世界进行推理是许多系统的一个重要方面;室内/室外导航、自主感知、持续增强现实(AR)等等。在这篇文章中,我们将探索使用传统和现代的方法将视频提取为对机器和人类都有用的信息。
作为一个激励人心的例子,考虑一下在黑鹰历史博物馆捕捉这头雄伟的美洲野牛的 3d 本质的任务:
美国野牛展(黑鹰博物馆,圣拉蒙)
利用现代的运动结构(SfM)管道,捕捉完全三维的纹理模型是可能的。在这种方法中,相机的姿态(其连续的位置和方向)和稀疏的、有区别的场景特征被联合估计。通过解决这个问题(相机在哪里,它在看什么),我们可以捕捉主体的简洁、准确的表现:
从上面的视频中估计的摄像机位置,以及稀疏的有区别的场景点
尽管该场景模型对于定位相机(在初始捕获期间以及任何后续的重新访问期间)是有用的,但是对于想要与场景本身进行交互的任何人来说,它的用途是有限的。为此,我们需要一个密集的网格。
为了构建更引人注目的东西,我们需要捕捉更精细的细节。多视图立体(MVS)是一个广泛的算法家族的总称(见此处的概述),一旦摄像机轨迹已知,该算法恢复一个明显更密集的场景表示(增加了计算负担)。下面的视频显示了使用估计的相机位置从上面的场景恢复的深度图(每像素范围,以米为单位):
场景的密集深度估计;原始图像(左),稀疏采样的深度图(右)
大多数 MVS 方法利用光度一致性测量;给定一幅图像中的一小块图像,这与另一幅图像中的候选匹配有什么关系?通过关联补丁和三角测量结果,我们可以恢复一个更密集的近似。然而,因为基础面片是场景几何图形、照明和纹理的函数,所以经常有大面积区域缺乏精确的深度估计(这将在后面变得明显)。鉴于这种密集的点云,我们可以从各种表面重建方法中选择来构建最终的模型,下面的动画展示了一个例子:
相机位置和稀疏场景特征与估计的密集纹理模型的叠加
这种纹理网格表示非常容易处理,对于以对象为中心的贴图任务,这种方法表现很好。下面是一些其他的例子:
普通物体的纹理网格;组合沙发(左)、雕像(中)、跑鞋(右)
但是这种方法如何推广呢?考虑一个不同的用例,即典型办公环境中的大规模室内制图。下面的视频显示了以下对比:a)原始视频采集,b)投影到图像中的恢复的稀疏场景结构,以及 c)相应的恢复的深度图:
从大量丢失的深度帧中可以明显看出,无纹理区域现在是有问题的。虽然相机位置和方向的估计是准确的,但生成一个非常密集的场景是一项具有挑战性的任务。(这里,系统参数在以对象为中心和通用映射模式中保持不变;我们可以花时间调整它们以产生更好的上下文深度估计,但这不是本文的重点)。
给定规则的棱镜场景结构,更有效的方法是学习从外观到深度的映射。这样,我们可以针对无纹理区域建立鲁棒性。深度卷积神经网络的进步与“地面真实”室内数据集(例如[ 1 、[ 2 、[ 3 )的爆炸结合在一起,使得高性能深度估计架构的开发成为可能。对于这个问题,有多种不同的方法来恢复场景结构:
- 学习直接从单目图像到深度的映射,不考虑空间一致性(例如[ 1 ],[ 2 ],[ 3 ])
- 通过使用多个图像及其估计的姿态(来自 SfM 步骤)来结合空间一致性,以学习更好的立体深度估计器(例如[ 1 ]、[ 2 、[ 3 ])
- 直接回归输出目标点云,而不是深度帧(例如[ 1 ])
下图显示了从单目密集深度实现和习得 MVS 估计器获得的深度图的比较:
单目深度估计(中)和多视图立体深度(右)与输入影像(左)的比较
(注意,以上视频仅供定性评价;不同的训练集和 SfM 输出的质量极大地影响所得的深度图)。
来自单目估计器的输出通常更一致,尽管给定模型的单次拍摄性质,聚合帧缺乏学习 MVS 方法的全局度量准确性。然而,依赖于运动来推断深度的方法在经历退化运动(仅旋转或小平移)时会受到影响。我们可以并排比较这些系统的指标输出:
使用上面显示的数据集对 DenseDepth(左)与 MVDepthNet(右)进行定性比较。
虽然令人信服,我们仍然需要将这些单独的估计融合成一个令人信服的整体,这提出了单独的挑战。如何将这种方法更进一步,在同一模型中联合估计相机运动和密集输出?通过这种方式,我们不需要在离散的步骤中估计相机运动和密集场景输出。
几种方法已经考虑估计密集摄像机深度和运动(例如[1][2][3]);这里我们考虑架构 DeepV2D 架构。DeepV2D 使用“块”坐标下降来估计场景和相机几何;固定的相机姿态用于构建密集的场景表示,该场景表示随后用于改进相机估计。相机姿势示例(红色)和生成的场景如下所示:
DeepV2D 相机和场景几何
根据相似的室内数据训练的模型的适用性从上面显示的输出中显而易见。虽然应用于不同领域(例如室外区域)时性能会下降,但在合理的时间范围内(推断时间与数据集采集时间成比例)从测试相关环境中推断相机运动和密集场景几何的能力令人印象深刻。
随着不断提高在设备上的性能,未来的方向是明确的;学习如何推理深度和运动来构建地图是一种构建大比例的鲁棒、精确地图的强大方法。
文本识别的未来是人工智能
Google 的 Tesseract-OCR 引擎简介
库尔特·卡吉尔的照片
21 世纪是数字化连接的时代。我们不再发送手写信件,也很少使用印刷文本,原因很简单,我们变得过于依赖电脑来处理数据,让生活变得更轻松。这些原因使我们需要找到一种方法来数字化纸质文件,使其能够被电子编辑、操作、搜索、管理、存储,特别是由机器来解释。
光学字符识别使得将打印、手写或印刷文本图像中捕获的文本转换成数字化和可用的机器编码文本成为可能。
光学字符识别是人工智能和计算机视觉的研究领域,包括从图像中提取文本。
今天,由于使用了人工智能工具,OCR 正在经历一场前所未有的革命。OCR 不仅成为传统的图像到文本的转换过程,而且成为人为错误的检查器。
OCR 工具可以将图像中捕获的文本转换成计算机可用的文本。
我们将在本文中讨论的工具是宇宙魔方。
宇宙魔方的标志
宇宙魔方:改变我们认知光学字符识别方式的研究项目
Tesseract 是一个用 C 和 C++编写的开源 OCR 引擎,最初是在 1984 年到 1994 年间由 HP 开发的。Tesseract 最初是布里斯托尔惠普实验室的一个博士研究项目,是惠普扫描仪的一个可能的软件/硬件附件。当时的商业 OCR 引擎很弱,无法达到令人满意的准确度。1995 年,就字符准确性而言,Tesseract 是 OCR 引擎的前三名。该引擎随后被送往 UNLV 进行 1995 年的 OCR 准确性年度测试,在测试中,它证明了自己与当时的商用引擎相比的价值。2005 年末,惠普发布了开源的宇宙魔方。现在在 http://code.google.com/p/tesseract-ocr 的可以买到。
2006 年,Google 开始赞助和维护这个工具,并发布了具有不同架构和 100 多种语言支持的 Tesseract 更新版本。
宇宙魔方的 4.0 版本使用了基于 LSTMs 的神经网络系统,然后惊人地提高了它的准确性。它接受了 123 种语言的训练,这使得宇宙魔方成为一个伟大的工具,也是人工智能如何从事文本识别研究的一个很好的例子。
现在让我们进行一些练习,学习如何使用 Python 中的 Tesseract 系统来执行光学字符识别!
为了通过 Python 编程语言访问 Tesseract,我们使用 Python-tesseract 包。Python-tesseract 是 Google 的 Tesseract-OCR 引擎的包装器,并提供了 tesseract 系统二进制文件的接口。
让我们从导入 Python-tesseract 包开始。
import pytesseract
我们导入 Python 图像库 ( PIL )来处理我们想要应用 OCR 的图像。
图像模块是必需的,以便我们可以加载我们的 PIL 格式的图像。Pytesseract 需要这种格式。
import PIL
from PIL import Image
我们使用 PIL 加载我们的图像。Image.open 函数
image=Image.open(‘tesseract.JPG’)
让我们展示我们的形象
display(image)
谷歌搜索宇宙魔方的截图
现在我们可以使用 pytesseract.image _ to _ string 函数对我们的图像应用 OCR。该函数将图像上运行的 Tesseract OCR 的结果返回到 string。
text=pytesseract.image_to_string(image)
让我们打印文本变量以查看 OCR 的结果
print(text)
使用 Tesseract 从图像中提取文本的结果
我们可以看到我们获得了完美的结果。pytesseract.image_to_string 函数准确提取图像中捕获的文本。
我们应用 OCR 的图像很清晰,但不幸的是,现实生活中的情况远非完美,图像通常有噪声,这使得前景文本与背景的清晰分离成为一个真正的挑战。
让我们试着在嘈杂的图像上运行宇宙魔方。
我们将提取此图像中捕获的文本作为示例:
我们以同样的方式处理。我们加载我们的图像作为一个 PIL。Image 对象并将其传递给 pytesseract.image_to_string 函数以从中提取文本。
您可以看到该函数返回了一个空字符串,因为它没有成功地从图像中提取文本。
然后我们需要预处理我们的图像!
在这里,我将建议 3 种方法,你可以用来改善有噪声的图像的镶嵌性能。这些技巧并不简单,它们高度依赖于图像中的内容。
第一种方法:将图像转换为灰度
在灰度图像中,每个像素的值是仅代表光量的单个样本。灰度图像可以是测量每个像素的光强度的结果。
灰度图像中的像素可以是 0 到 255 之间的任何值。然后图像由 256 个灰度组成。
要将 PIL 图像转换为灰度图像,我们使用:
gray= image.convert(‘L’)
PIL。Image.convert 方法返回图像的转换副本。
让我们保存这个副本:
gray.save(‘gray.jpg’)
现在让我们加载并显示它,看看灰度图像是什么样的:
grayscale_image=Image.open(‘gray.jpg’)
display(grayscale_image)
灰度图像看起来像黑白图像,但它们是不同的。一位双色调黑白图像是只有两种颜色的图像:黑色和白色。灰度图像之间有许多灰色阴影。
现在让我们在图像的灰度版本上运行 Tesseract。
text=pytesseract.image_to_string(grayscale_image)
print(text)
我们得到的结果是:
我们可以看到,对图像进行灰度化可以提高镶嵌的性能。
第二种方法:图像二值化
在这种方法中,我们将通过二值化从图像中提取文本。
图像二值化是拍摄图像并将其转换为黑白图像的过程,然后将图像的灰度版本中包含的信息从 256 种灰度减少到 2 种:黑白,即 二值 图像。
我们可以使用以下方法将图像二值化:
binary= image2.convert(‘1’)
这将制作图像的二进制副本,并将其存储在二进制 PIL 中。图像对象。
我们保存副本,加载并显示它:
binary.save('binary.jpg')
binary_image=Image.open(‘binary.jpg’)
display(binary_image)
输出图像
现在,让我们运行它的宇宙魔方:
哼,结果看起来不像我们预期的那样。为什么以及如何改进我们的二值化?
二值化过程通过选择一个 阈值 来进行。在图像的灰度版本中,小于所选阈值的像素被设置为 0(黑色),大于阈值的像素被设置为 255(白色)。
我们获得的结果可能是由于阈值的错误值,因为我们使用了默认的二值化函数。让我们构建我们自己的函数,一个传递图像和阈值的函数,它使用选择的阈值返回二值化的结果。
def binarize(image,threshold):
binary_image=image.convert(“L”)
for x in range(binary_image.width):
for y in range(binary_image.height):
if obinary_image.getpixel((x,y))< threshold:
binary_image.putpixel( (x,y), 0 )
else:
binary_image.putpixel( (x,y), 255 )
return output_image
该功能:
1.将图像转换为灰度
2.遍历图像的像素,
3.将像素值与阈值进行比较:如果像素值小于阈值,则将其值更改为 0(黑色),否则更改为 255(白色)。
现在,让我们用不同的阈值运行我们的函数,看看它如何影响 Tesseract 的性能:
Threshold= 0: 我们获得了白色图像,因为灰度图像中的所有像素都包含在 0 到 255 之间。宇宙魔方然后无法检测任何文本。
Threshold= 64: 我们获得了一个只有文字可见的清晰图像。我们的函数从图像中移除了噪声背景,这使得 Tesseract 更容易从图像中提取文本。
Threshold= 192: 我们的函数覆盖了文本的一部分,对图像运行的 OCR 返回了一个空字符串。
Threshold= 256: 我们获得了黑色图像,因为灰度图像中的所有像素都包含在 0 到 255 之间。宇宙魔方然后无法检测任何文本。
第三种方法:调整图像大小
有时,一个糟糕的宇宙魔方的性能可能是由于图像的大小。检测大图像或小图像中的文本有时会很困难。PIL 有一个特殊的功能,可以通过多种选项和滤镜来帮助您调整图像的大小:
PIL.Image.resize
这个函数返回这个图像的一个调整过大小的副本。
它需要两个参数:
- size :以像素为单位的请求大小,作为一个二元组:(宽度,高度)。
- 重采样:一个可选的重采样过滤器。这可以是
**PIL.Image.NEAREST**
(使用最近邻)、**PIL.Image.BILINEAR**
(线性插值)、**PIL.Image.BICUBIC**
(三次样条插值)或**PIL.Image.LANCZOS**
(高质量下采样过滤器)之一。如果省略,或者如果图像具有模式“1”或“P”,则设置**PIL.Image.NEAREST**
。
总结
在本文中,您了解了 Google 的 Tesseract-OCR 引擎,它是如何开始的,以及它如何使文本识别比以往更加准确。您还学习了如何使用 Python-tesseract 包通过 Python 访问 Tesseract。您还了解了如何对图像应用 OCR,以及如何提高 Tesseract 在有噪声的图像上的性能。既然你已经掌握了所有的基本技能,为什么不构建一个扫描仪移动应用程序,它将图像作为输入,对其运行 OCR,并将结果写入文本文件。这将是你学习宇宙魔方的最大一步!
查看我为教程 做的 Github 库这里 !
视觉推荐系统的未来:四种实用的最新技术
现代 RecSys
visual RecSys 的未来令人振奋。让我们探索一些最前沿的技术和想法,我们可以纳入我们的推荐。
style 2 vec(2017)——结合多个卷积神经网络
Lee,h .,Seol,j .,,Lee,S. (2017 年)。Style2Vec:从风格集中学习时尚物品的表征。从https://arxiv.org/abs/1708.04014开放访问
作者“提出了时尚物品的向量表示模型 Style2Vec。基于单词嵌入中使用的分布语义的直觉,Style2Vec 使用匹配服装中的其他项目作为上下文来学习时尚项目的表示。训练两个不同的卷积神经网络,以最大化项目共现的概率”(Lee et al .,2017)。
论文很短,但想法很吸引人。使用两个 CNN 模型,其中一个为目标图像生成嵌入,而另一个为相似上下文项目生成嵌入,这是从 Word2Vec 派生的技术对图像的新颖应用。如果我们看看上面的图片,例如(a)我们有粉色裙子** — 黑色裙子+ 黑色夹克 = 粉色夹克。值得注意的是,我们添加/减去了通常不表示为产品属性的特征,例如示例(c)中的漏洞。因此,Style2Vec 允许我们以不同的方式组合/选择样式。**
David Nepož itek 实施了 Style2Vec 论文中提出的想法,并在 Github 上开源了代码。从他的报告中得到的结果令人印象深刻,正如你从上图中看到的,他成功地将颜色、图案和形状相似的物品分组。我们可以利用这样的结果,根据用户的喜好生成整套服装和系列。
带 GAN 的生成式图像模型(2017)
康维成,方志成,王志忠,麦考利(2017)。视觉感知的时尚推荐和生成图像模型设计。从https://arxiv.org/abs/1711.02231|代码打开访问
作者使用了生成对抗网络(GAN) ,“一种无监督的学习框架,其中两个组件‘竞争’以生成看起来真实的输出...一个组件(生成器)被训练来生成图像,而另一个组件(鉴别器)被训练来区分真实图像和生成的图像。因此,生成的图像经过训练,在某种意义上看起来“逼真”,与数据集中的图像无法区分”(Kang et al .,2017)。
GAN 允许我们为我们的用户生成理想的产品,即使它不存在于产品目录中。上面的图像是输出。左边是真实的图像,右边是生成的图像,我们可以看到右边的图像通常有更高的偏好得分。有两种生成理想产品的用例。
首先,甘帮助我们建立了对用户喜好的认知并用图像具体地表现了这种认知。我们可以利用类似 CNN +最近邻居的技术来选择视觉上最接近理想状态的物品。
此外,甘协助产品采购和设计。如果我们知道带有紫色条纹的绿色衬衫是理想产品中的一种增长趋势,我们可以在客户向我们提出之前引入/创造这样的产品来满足市场需求。即使绿色带紫色条纹的衬衫并不完全是客户现在想要的,但甘让我们能够对市场需求和变化采取主动,而不是被动。
带评论生成的可解释服装推荐(2019)
林,杨,任,陈,任,马,李,等(2019)。具有联合服装匹配和评论生成的可解释服装推荐。从https://arxiv.org/abs/1806.08977v3|代码打开访问
作者“提出了一种新的神经网络框架,神经装备推荐(NOR),它同时提供装备推荐和生成抽象评论。NOR 由两部分组成:服装搭配和评论生成。对于服装匹配,我们提出了一种具有相互注意机制的卷积神经网络来提取视觉特征……对于抽象评论生成,我们提出了一种具有跨通道注意机制的门控递归神经网络,来将视觉特征转换为简洁的句子”。
基于 CNN 的 RecSys 功能强大,但是很难解释输出。已经有单独的尝试,由乌特库·奥兹布拉克可视化 CNN 渐变, 生成多纳休、j .等人的图像评论。然而,将这两种技术结合起来并将其应用到 RecSys 的环境中并不容易。如果我们看看上面的合成图,我们会发现这是理解这些建议的第一步,其中“很棒的牛仔装”、“喜欢红白相间”是解释为什么推荐这些服装的好例子。但在最后一排的反面案例中,我们可以看到评论生成本身并不完美;有时它描述的东西在图像中找不到,或者完全脱离了上下文。请注意,作者使用社区驱动的社交商务网站Polyvore 的数据构建了评论生成模型。
尽管如此,可解释的人工智能(XAI)是理解、评估和在生产中部署深度学习解决方案的关键部分。为了获得更多关于 XAI 的信息,菲菲收集了令人印象深刻的 XAI 资料。
私人个性化 RecSys (2020)
越来越多的 RecSys 被部署在隐私敏感领域,如医疗、教育和金融。我们想要个性化医疗保健/教育/金融计划的好处,但同时,对放弃我们的数据,然后将它们丢失给黑客的恐惧是真实的。这似乎有些矛盾— 我们如何在维护用户隐私的同时构建个性化的 RecSys?
早在 2009 年,微软研究院的 McSherry & Mironov 在他们的论文中用一个简单的想法探索了这个问题。本质上,我们可以按照ε-差分隐私 (这背后的实际数学是非平凡的)给条目评分和条目-条目协方差矩阵添加噪声。换句话说:
- 我们屏蔽掉任何特定用户的识别特征(用户 A 在每个月的第一个星期一购买粉色衬衫)。
- 获取大趋势(用户的 X 部分喜欢购买粉色衬衫)
- 隐私损失在数学上被证明受因子ε的限制。
- 虽然在设计 RecSys 时,差分隐私是一种用于衡量内部风险的有用指标,但向用户解释起来并不直观,也不能保证数据是安全的。
Ribero 等人(2020 年)的一篇新论文扩展了这个想法,使用不同的私有原型联合推荐。联合学习是分布式机器学习的一种现代方法。
- 我们不是在中央服务器上训练大规模的模型,而是将小的(兆字节大小的)模型发送到用户的设备上。
- 在设备空闲期间,模型通过其数据在用户设备上进行训练。
- 我们只把 的训练结果发回到一个集中的服务器。
你可以看到谷歌漫画对这一过程的图解。通过结合差分隐私和联合学习,Ribero 等人提出了一种新的方法来解决私有、个性化 RecSys 的问题。
“大多数联合学习方法需要实体和中央服务器之间的多轮通信,这给不同的隐私要求带来了问题。具体来说,我们可以将从实体到服务器的每一轮通信视为发送到各个实体的查询,这有可能会泄漏信息……(因此)我们将通信限制为来回两轮(Ribero 等人,2020)。
当然,这是一个具有挑战性的问题。为了将轮次减少到只有两轮,该团队需要想出一种新颖的方法来压缩数据,然后以可访问的形式保存。他们将这些数据结构命名为“原型”:
这些原型被设计成:a)包含与 Xh 相似的信息,从而允许构建精确的项目表示;b)相对于 Xh 是低维度的,因此最小化通信负载;以及 c)相对于单个用户保持不同的隐私。
这份文件是一个具有挑战性的阅读一个迅速发展和重要的主题。如果你有兴趣了解更多关于联邦学习和差异策略的知识, lee-man 正在他们的 Github 帖子上收集一系列阅读材料、工具和代码。
进一步阅读
Visual RecSys 是一个令人兴奋的领域,希望您喜欢我们今天讨论的各种技术。有关 RecSys 的更多前沿内容,您可以探索
- ACM RecSys 上的收藏和他们的 YouTube 频道是 RecSys 世界里最大的事件。
- Spotify 的工程博客令人印象深刻。查看他们最近关于个性化的帖子。
- 网飞的科技博客当然是另一个很好的读物,它涵盖了许多现实世界的部署和可伸缩性挑战。
- Zalando 是一家拥有强大研究团队的电子商务公司。他们的出版物值得一读。
- Recombee 提供推荐即服务,有一个很好的媒体博客,报道他们公司使用的技术。
银河岛假说
新的研究为费米悖论提供了一个定量的解决方案
模拟的定居轨迹,展示了文明如何在银河系中传播
与银河系的年龄相比,我们 20 万岁的人类物种只存在了一眨眼的时间。银河系至少有 100 亿年的历史,可能包含超过 2000 亿颗恒星。2013 年,开普勒太空望远镜(Kepler space telescope)的数据显示,大约五分之一的类太阳恒星包含一颗可居住的行星,既不太热也不太冷,不适合生命存在。如果 10%的恒星是类太阳的,这意味着在我们的银河系中可能有大约40 亿颗类地行星。如果生命起源于地球,那么它肯定也起源于那 40 亿个世界中的一些:
“你就没想过大家都去哪儿了吗?”
这是恩利克·费密在 1950 年与科学家们共进午餐时提出的著名问题。费米悖论意识到我们的星系应该充满生命,然而迄今为止我们遇到的唯一文明是我们自己。
费米悖论的解决方案
自从它首次提出以来,人们已经提出了许多解决这一悖论的方法。
这是一个技术上的争论:也许,这个争论是这样的,文明只是不知道如何进行星际旅行。以比邻星为例,它是我们最近的恒星邻居,目前距离我们 4.24 光年。即使以旅行者 1 号的速度,我们迄今为止最快的太空飞船,我们仍然需要大约 80,000 年才能到达那里。如果由于物理或经济的原因,文明不能发展出比这更快的技术,星际旅行可能根本不可行。
其他人认为外星文明存在,但只是对星际探索不感兴趣,或者他们已经发现了我们,但决定离开我们,这样不会破坏我们的生态系统。然后是“大过滤器”的想法:在一个文明从单细胞生物进化到多星球物种的过程中,也许有一个进化步骤极其难以实现,因此起到了过滤器的作用。例如,过滤器可能会自毁。所有的文明都有可能在达到星际旅行的技术水平之前最终自毁。郁闷。
请注意,这两个都不是量化的陈述,这使得很难得出任何结论。如果我们想对费米悖论做一个量化的陈述,也许计算机模拟是一个更好的方法。
银河岛假说
智能文明将如何在银河系中传播?为了回答这个问题,首先我们需要考虑恒星运动。我们银河系中的恒星由于引力而不断运动。这种运动非常复杂,看起来几乎是随机的。这是欧空局对此效果的模拟:
星系中恒星运动的模拟(欧空局)
由于恒星的运动,我们的恒星邻居不断变化。如前所述,我们最近的恒星邻居是比邻星,距离我们超过 4 光年。然而,一万年后它将离我们只有 3.5 光年。再过 3 万年,我们将有一个新的最近的邻居:罗斯 248,一颗红矮星,距离我们只有 3 光年。在不同的时期,不同的文明可能会建立不同的星系。
这就是研究者 Jonathan Carroll-Nellenback 及其合作者基于代理的模拟的用武之地。他们从有人居住的行星的初始“种子”分布开始,然后模拟了随后 1000 万年间“定居前沿”的轨迹:如果包含可居住行星的邻近恒星系统在现有文明的 10 光年范围内,那么该文明将向新的恒星系统发送探测器,并对其进行殖民。上面显示的封面图像是模拟结果的可视化,其中点代表可居住的恒星系统,线代表定居轨迹。
研究人员从模拟中学到了什么?嗯,这取决于参数。在一个极端,通过减少可居住行星的数量,将文明的寿命缩短到 10 万年以下,很容易产生一个“空”星系。在另一个极端,有可能调整参数,使整个星系充满了定居点。即使使用他们认为最慢的星际探测器,移动速度大约是旅行者 1 号的两倍,这样的“完全”殖民也将在不到 10 亿年的时间内实现。
但更有趣的问题是,这个星系究竟会被“填满”到什么程度。这让我们想到了“银河岛”的假设:银河系中会不会有一些孤独的岛屿,只是因为太过孤立而无法遇到任何访客?
是的,绝对的。例如,如果文明持续了 100 万年,并且如果 3%的恒星系统包含可居住的行星,那么数据显示,至少在过去的 100 万年中,像地球这样的单一行星有大约 10%的概率没有看到任何其他文明的证据。所以,最终,费米悖论可能并不是一个悖论。星系内完全有可能存在孤立的世界,而其他的则被频繁造访。或者,正如研究人员 Caleb Scharf 所说,
“换句话说,我们很有可能会发现自己处于等式的孤独一边。”
这个故事的灵感来自《科学美国人》的一篇文章,作者是 Caleb Scharf。如果你喜欢阅读,你可能也会喜欢这些:
用有限数据预测未来的贝叶斯指南
towardsdatascience.com](/how-to-be-less-wrong-5d6632a08f) [## 智能行为的起源
为什么真正的人工智能需要的不仅仅是模式识别
towardsdatascience.com](/the-origin-of-intelligent-behavior-3d3f2f659dc2)
生命的游戏,约翰·康威的遗产
人生的游戏是什么?人生的游戏有什么意义?已故约翰·康威的遗产。
最近我得知约翰·康威因为新冠肺炎去世了。这是一个非常不幸的情况,让我感到难过的是,我没有机会与一个对数学和从最基本的规则进化而来的复杂性思想做出如此大贡献的人交谈。约翰·康威主要是一名数学家(普林斯顿大学的数学教授),但计算机科学家和人工智能爱好者将永远记住他的生命游戏,即细胞自动机。
为什么《生命的游戏》作为一部细胞自动机如此相关?从一个更哲学的角度来看,生命的游戏向我们展示了复杂性是如何从简单中产生的。我们人类经常会对自己的存在提出疑问。有人可能会说,像我们这样复杂的有机体是某种神圣计划的产物。事实上,一个主宰宇宙的神圣实体的基本论点之一是,一个支持生命并因此支持我们的存在的行星被创造出来是完全不可能的(特别是当考虑智能时)。
因此,我们的存在不能用宇宙中简单的随机过程来解释。如果我们可以证明非常复杂甚至智能的系统可以从基本过程中产生,这就给关于神的计划的整个想法打上了一个问号,不是吗?的确,生活的游戏引发了我们对这些事情的思考。
[1]
事不宜迟,让我们跳进生活的游戏的定义。这很简单。在细胞自动机中,每个细胞最多有 8 个相邻细胞(对角线、垂直和水平)。自动机(像任何其他的一样)从填充的“活”细胞的初始状态开始。因此,自动机的状态由网格上的“活”和“死”单元组成。在每次迭代中,我们选择哪些单元保持“存活”,或者换句话说,填充,以及哪些单元基于某些规则“死亡”。此外,在下一次迭代中,可以产生(“出生”)其他单元。管理此行为的简单规则如下:
- 每一个有 2 或 3 个相邻单元的“活”单元存活到下一次迭代。
- 每个有 4 个邻居的“死”细胞变成“活”细胞,或者换句话说复活(在某种意义上)。
- 其余的都死了。
这些规则与现实生活有着有趣的相似之处。以规则 1 为例。一个细胞能够存活的唯一方式是它有同伴细胞(2 或 3)。少是不够的,这或许与人类的想法非常相似。科学研究表明,社交被认为是幸福生活和长寿的原因。但是,过多的社交可能会杀了你(就像细胞自动机一样)。你可以把它看作是对资源的过度使用。这就是为什么有 3 个以上相邻的“活”细胞太多的原因。不幸的是,我还没有想到一个好的寓言。规则,死细胞复活给定 4 个邻居。
生命的游戏是图灵完全的。意思是任何可以用算法计算的东西(用图灵机计算)都可以用它来计算。你能想象到的任何可能的程序都可以用它来编写。
现在有趣的部分来了,这些简单的规则导致了一些古怪的行为,比如下面的棍子旋转(一个非常简单的例子):
如果我们让模拟变得更复杂一点,在初始状态下增加一些活细胞,那么我们会得到更多的回报:
令人难以置信的是,这三个简单的规则决定了这些有趣形状的形成。通过改变初始化网格的随机种子,可以获得大量不同的行为。
当然,进一步扩展,相互作用变得更加复杂。这让你想知道他们能走多远,有多“复杂”。这些细胞自动机在某种程度上是智能的吗,还是有一些神奇的初始化会让它们按照我们对时间的定义变得“智能”?智力的定义到底是什么?人类级智能的来源是什么,仅仅是智能初始化和应用简单的规则吗?假设细胞自动机是图灵完备的,那么可能性是无限的。
我们需要再次感谢约翰·康威杰出的一生工作和遗产。他可能影响了不同领域的几代科学家(不仅仅是计算机科学和数学)。就在过去的一年里,我有过无数次关于人生游戏的讨论。不是因为我在这个领域进行深入研究,而是因为它在科学界无处不在。它一次又一次地找到了我,将来还会继续找到我。
最后,这里有一些我编写的实现的例子,请欣赏。
参考文献
[1]照片取自 Pixabay
[2] Python 实现:【https://github.com/jimimvp/game-of-life】T4
艾赢的比赛
以及它们所代表的进步
AI 做的一些任务,其实并不令人印象深刻。想象一下你的相机对照片中的人脸进行识别和自动对焦。这项技术从 2001 年就已经存在了,它并没有让人们感到兴奋。为什么不呢?因为你也可以这么做,所以你可以很容易地把目光集中在某人的脸上。事实上,它太简单了,你甚至不知道你是怎么做到的。如果人工智能也能做到,那么谁会在乎它是如何工作的呢?虽然我们可能无法明确理解这个人工智能是如何工作的,但它的底层机制不会做任何我们不能做的事情。至少,这是我认为大多数人的想法。
游戏正好相反。与其说游戏是我们与生俱来的能力(比如聚焦你的视觉),不如说你理解如何以及为什么在游戏中做出决定。因此,当人工智能决定如何玩游戏时,它们会更有趣,因为你可能处于与人工智能相同的情况下,做出完全相同的决定。人工智能被普遍认为是取代人类工作的东西。当人工智能玩游戏时,它感觉最接近我们在世界中的位置,因为游戏是我们必须有意识地思考的事情。人工智能玩的游戏因此引起了新闻的兴趣,这里是它赢得的最重要的胜利。
1996-1997 年卡斯帕罗夫诉深蓝
1996 年 2 月 10 日,IBM 的“深蓝”与加里·卡斯帕罗夫(Gary Kasparov)对决,成为第一个在正常情况下(即有时钟的情况下)击败当前国际象棋世界冠军的计算机程序。不幸的是,在剩下的五场比赛中,深蓝输了三局,平了两局。
第二场比赛定于明年举行,深蓝的团队对他们的软件进行了升级。5 月 3 日,深蓝以亏损开盘。在第二场比赛中,深蓝很难计算该做什么,为了防止自己浪费太多时间,它采取了随机移动。这一举动很糟糕,但这让卡斯帕罗夫感到困惑,他认为深蓝能比他更好地预见游戏的未来。为了不让自己在数百万人面前输掉比赛,他放弃了第二局(这在国际象棋中很常见)。事实上,如果卡斯帕罗夫打完第二场比赛,他本可以赢得第二场比赛,这对他来说是一个小小的尴尬,这导致他在接下来的比赛中更加肆无忌惮,最终深蓝赢了 2 局,卡斯帕罗夫赢了 1 局,平了 3 局。
正如 ESPN 记者 Jeremy Schaap 所说,“全世界的人都在关注这件事,有些人对国际象棋不感兴趣,有些人只对人机大战感兴趣。”卡斯帕罗夫在第二场比赛结束时声称 IBM 作弊,这引发了人们对这场比赛的兴趣,他的依据是深蓝在第一场和第二场比赛中的比赛质量差异。自 6 世纪发明以来,国际象棋一直是智力的晴雨表。认为人类会被计算机打败会令人沮丧,因为计算机在许多方面不如人类。当然,IBM 没有作弊,深蓝的质量变化归因于它的随机行动。
IBM 的公共关系团队为这一事件推波助澜,该公司的股票大幅上涨。胜券在握之际,IBM 拒绝了复赛,随后解散了深蓝,并把它的最后安息地定在了山景城的计算机历史博物馆。
卡斯帕罗夫不再相信“深蓝”在作弊,并且认识到不仅“深蓝”打败了他,甚至“深蓝”本身也能被运行在较小计算机上的新程序打败。这个游戏是人工智能对人类智能的叙述中的一大步,它将游戏确立为一种比较的方法。
2011 年 IBM 沃森赢得了危险!
在一起吃午餐时,两位 IBM 高管开始在的《危险边缘》节目中评论肯·詹宁斯的成功!谁仍然保持着连续最多比赛获胜的记录。也许是因为渴望在深蓝获胜后获得成功,他们创造了沃森,一个旨在击败肯·詹宁斯的问答系统。
沃森以 IBM 创始人托马斯·J·沃森的名字命名,创建于 2005 年,但直到 2011 年才开始其著名的亮相。沃森和肯·詹宁斯一起对抗布拉德·鲁特,他们被认为是两个最好的【T4 危险边缘】!当时的玩家。肯是一个上过一些人工智能课的程序员,他接受了挑战,部分原因是他认为人工智能系统不可能打败他。
肯·詹宁斯、沃森和布拉德·鲁特
沃森赢得了与布拉德和肯的两场比赛,分别赢得了 77,147 美元和 24,000 美元和 21,600 美元。沃森接着击败了两名国会议员,小拉什·d·霍尔德(前危险边缘!(参赛者)和比尔卡西迪,又一次两党的失败。
与深蓝不同,沃森被 IBM 分拆成许多商业产品,包括沃森文本到语音、沃森语音到文本、沃森自然语言分类器、沃森自然语言理解、沃森助手和沃森健康等。
2013 年 DeepMind 击败雅达利
虽然沃森是为特定目的而设计的,但 DeepMind Technologies 希望创建一个不需要在狭窄领域进行训练的人工智能系统,让我们更接近通用人工智能的定义。他们开始追求的目标是用一个没有为任何特定游戏重新设计的模型击败许多雅达利游戏。
DeepMind 学习突围的最佳策略
仅使用屏幕上的输入内容,并被告知最大化分数,DeepMind 能够击败每一场游戏,并获得甚至比最优秀的人类玩家更好的分数。在 2013 年的论文中,用深度强化学习玩雅达利导致谷歌在 2014 年收购了他们。
2016 AlphaGo v. Lee Sedol
深蓝的优势在于它有能力一次处理大量的移动,并有一个聪明的方法来评估哪一个是最好的。对于亚洲围棋来说,这是不可能的。游戏的规则很简单,但是游戏在任何时候都有大约 2 * 10 个⁷⁰和 T3 个状态。作为参考,这个数字大于宇宙中的原子数量。因此,围棋博弈中的策略很难定义,因为对于每个状态,都有许多决策需要评估,每个决策都会导致更多的状态需要评估。由于没有蛮力方法起作用,DeepMind 的 AlphaGo 学会了给未来几个时期赋予价值,然后学会了基于该价值做出决策。
在击败欧洲围棋冠军范辉后,AlphaGo 的任务是与有史以来排名最高的棋手之一 Lee Sedol 对弈。击败李促使他退休,说即使我成为第一,也有一个实体不能被打败
2017 AlphaZero 大师赛国际象棋、围棋和松木
AlphaZero 是 AlphaGo 的一般化版本,旨在赢得国际象棋、围棋和 Shogi(日本版国际象棋)。AlphaZero 不仅打败了 AlphaGo,而且是通过与自己进行模拟游戏来完成的,没有专家游戏的例子可以看。在这些模拟开始时,它什么都不知道。经过 9 个小时的训练,它掌握了国际象棋,2 小时后掌握了日本象棋,34 小时后掌握了围棋。
虽然这对于谷歌吸引人才非常重要,但人工智能教授乔安娜·布赖森(Joanna Bryson)指出,谷歌因这些成就而获得的荣誉可以在与寻求监管人工智能的政府的谈判中获得巨大优势。
2019 AlphaStar
AlphaZero 随后被转变为 AlphaStar,意在击败即时战略游戏《星际争霸》。2019 年,AlphaStar 在人类玩家中排名前 0.2%。这是人工智能首次超过电子竞技。AlphaStar 在星际争霸中并不完美,但它仍被视为人工智能的一个巨大里程碑,因为它在复杂的规则下,利用部分信息实时工作。尽管围棋面临的决策数量相对复杂,但与围棋相比,围棋的规则却非常简单。AlphaStar 所处的这种更复杂的环境是一个很好的指标,表明人工智能已经准备好用于更广泛的商业用途,如自动驾驶汽车、机器人和供应链。
高斯模型
信封背面关于新冠肺炎感染的草图。
作者照片
首先声明:我不是流行病学家。这些都不是专业的预测;这些是 粗略计算 。我是一个物理学家,你知道我们有多喜欢我们的“ 数量级 ”、“ 球形牛近似法 ”和“ 封底计算 ”。
《纽约时报》上周刊登了一篇关于 哪些国家正在“拉平曲线” 的文章,所以让我们探索一下这些“曲线”的一个简单模型。
选定国家的每日新冠肺炎感染率
感染率数据的一个封底模型
我们将使用最简单的模型:正态或高斯曲线。
正态或高斯曲线
感染开始时呈指数增长,然后无论东道国采取何种应对措施,一段时间后,新感染人数会回到接近零的水平。至少这是信封背面的理论。当然有更好的模型,但我们将使用高斯模型作为第一枪。
高斯模型仅由三个参数定义: N 、 μ 和 σ ,看起来如下:
- N 是感染率的高峰期,疫情的中点。
- μ 是感染率达到峰值的日期,并且
- ∑控制宽度,即国家经历疫情的时间段。
高斯模型参数
在该模型中,在感染高峰前的 2 σ 天,在第μ-2σ天(第 20 天),大约总人数的 2%已经被感染。到高峰前 1 天(第 35 天),大约 16%的最终感染人群已经呈阳性。在第 μ 天,总病例的 50%被感染。
在某一天,曲线下的面积分数=累计病例数除以疫情结束时的总病例数。
使用模型
让我们首先在那些似乎已经度过感染高峰并正在复苏的国家尝试这个模型:中国和韩国。
我们可以从欧洲疾病预防和控制中心得到我们需要的格式的数据,欧洲疾病预防和控制中心相当于 T2 的美国疾病预防和控制中心。 Kaggle 也有不错的数据。
从 2020 年 1 月 1 日开始,绘制来自中国的每日感染率,显示了在第 43 天(2 月 12 日)左右病例的大幅增加,当时医疗团队开始使用更简单和更快速的诊断方法而不是早期的 DNA 匹配测试。即便如此,高斯模型提供了一个体面的拟合。
对韩国来说,fit 可能看起来更好。但它没有很好地捕捉右侧停滞的衰减。甚至有可能这种超出代表了一个单独的区域高斯事件。
为了使模型符合这些数据,我使用了 python scipy.optimize 模块中的 curve_fit() 函数,我的 Jupyter 笔记本在这里是。
对这些模型的一个简单检查是,模型曲线下的总面积是否接近该国的实际感染总数。信封背面计算的标准程序是频繁的健全性检查。
给定 N 和 σ ,模型曲线下的总面积为:
以下是对比数据(截至 2020 年 3 月 24 日)
中国
- 实际案例总数: 81748
- 型号总面积: 79315
令人惊讶的是,只有 3 折左右。
韩国
- 实际案例总数: 9037
- 型号总面积: 8145
∾10%的折扣,主要是因为该模型遗漏了最近在韩国案例下降中出现的停滞。但是,对于一个粗略的估计来说,10%还不算太糟糕。
预测建模
这里是信封背面模型失败的地方,或者说失去了它的 10%的优点。
以下是高斯模型对一些国家截至 2020 年 3 月 24 日数据的拟合。
通过将当前累计感染人数与模型中的预期总病例数进行比较,我们可以了解到国家目前的状况。这个比率是到目前为止模型下的面积除以模型的总面积。**
该百分比如下图所示(面积分数可能大于 100%,因为实际病例总数可能不同于模型预测的总数,例如韩国)。请记住,面积分数* 是来自模型的 估计值 ,因此会受到下面将提出的模型的统计怀疑。***
高斯模型适合不同国家新的每日感染率和世界数据(不包括中国)。每张图的下方是“面积分数”,这是一个对该国“陷入其中”程度的估计。
这个简单模型的问题
这种模式太简单的方式太多了!
真正的流行病学模型融合了像马尔可夫链蒙特卡罗(MCMC)耦合微分方程、实时交通数据和社会图分析这样的东西。通过在你的手机上体验像瘟疫公司这样的游戏,你可以看到,这种流行病可以以多种方式呈现自己的生命,并偏离简单的模式。真的— 高斯模型唯一支持的是中心极限定理,而且它很简单。
该模型相当好地捕捉了事件发生后国家的总体特征,这些国家似乎现在已经控制住了感染,如中国和韩国(如上所述,一些非高斯现象似乎正在韩国发生)。但是模型的拟合参数 μ 、 N 和 σ 在很大程度上取决于你在曲线上的位置,即你的面积分数。**
当你爬上数据的一边时,有许多局部的波峰和波谷。但是,如果你的国家已经接近感染曲线的一半,你可以使用高斯模型对未来做一个很好的猜测。从最高点的角度来看,当面积分数= 50%时,未来看起来,嗯,有点像反过来的过去。感染应该开始减少,并最终减少到零。
问题是,你不确定你什么时候在那里。
如果你只有 10%的感染指数上升,那么使用高斯模型得到的参数的误差棒对最新数据太敏感了。下面是一些不同的可能模型,我们从疫情沿途 10%、20%和 30%的数据统计波动中得到(面积分数)。你可以看到,当我们只有中心峰左侧很远的数据时,模型波动很大,面积分数很小。
拟合不同面积分数时的模型参数方差
事实上,高斯模型的 σ 参数的方差,如在不同点“进入事件”(由该点曲线下的面积分数表示)所估计的,随着我们更早地向左移动而放大。
因此,我们不能真正使用这个简单的近似值作为预测模型,至少在我们深入了解它之前,可能有 30%的总感染已经已知。再说一次,直到后来我们才真正知道那是什么时候。
例如,根据美国数据,当前面积分数估计为 15%。这意味着我们使用迄今为止(2020 年 3 月 24 日)的数据得到的可能模型存在很大差异。下面是一些例子,包括“最佳”拟合: N =21178,μ= 91(3 月 31 日!),并且 σ =6,由 curve_fit() 函数返回。尽管许多领导人都呼吁让“T22”恢复工作,但这似乎过于乐观了。但是此时(第 85 天)与美国数据相似的其他模型参数就不那么令人鼓舞了,看起来像这样。
一些可能的感染率高斯模型,符合当前美国数据(2020 年 3 月 24 日)。在这个面积分数(15%)下,可能模型的差异非常大。
从这些模型的长期角度来看,我们目前所知甚少。请注意,即使是“面积分数” 估计值(美国为 15%)也有非常大的建模误差,如下所示。虽然我们似乎已经完成了乐观(蓝色)模型的 15%,但是我们还不到其他“合理”模型(红色、绿色和橙色)的 1%。现在下结论还为时过早。
使用当前(2020 年 3 月 24 日)美国数据的可能模型的长期视图。
尽管如此,这个的封底模型还是很有指导意义的。很简单,每周都会有更多的数据进来,让我们沿着曲线走得更远,这样高斯模型就有了更多的预测能力。有趣的是,伊朗和意大利似乎已经接近或接近顶峰。
该模型还指出,在疫情的这一阶段,简单的预测是多么糟糕,而且似乎表明,在我们达到舒适的 90%面积分数之前,我们可能还有一段路要走。请注意,韩国有 111% 的面积比例,他们的感染仍然没有减少,所以不要误认为这是真正的流行病学建模。
这只是某个容易获得数据、突然有很多时间呆在家里、一堆信封堆积如山的人的想法。
阿基米德的天才
他是如何利用基础物理学推导出球体的体积的
苏格兰出生的数学家埃里克·坦贝尔 在《数学界人士 】、 中写道,他的数学史著作 :
所有历史上三位“最伟大”数学家的任何名单都会包括阿基米德的名字。另外两个通常和他联系在一起的是牛顿和高斯。一些人考虑到这些巨人所处时代数学和物理科学的相对富裕或贫困,并根据他们所处的时代背景来评估他们的成就,会把阿基米德放在第一位。”
— E. T .贝尔
图 1:意大利巴洛克画家多梅尼科·费蒂的阿基米德图(来源)。
阿基米德是谁?
阿基米德(公元前 287-212)是希腊数学家、物理学家、工程师、发明家和天文学家。他被广泛认为是历史上最有影响力的数学家之一。在他的众多成就中,以下几项尤为重要:他预见了现代分析和 T21 微积分的技术,推导出π的近似值,描述了阿基米德螺线,创立了流体静力学和静力学(包括杠杆原理),是第一批应用数学研究物理现象的思想家之一。
图 2:阿基米德螺旋(来源)。
德谟克里特斯
希腊苏格拉底之前的哲学家德谟克里特斯因他的宇宙原子理论而闻名,他也是一位杰出的数学家。他写了几本书(超过 75 本,至少),包括关于数字、几何、切线、映射的、关于无理数的和但不幸的是,这些著作无一幸存。他第一个注意到底面和高度相同的圆锥体和金字塔的体积分别是圆柱体或棱柱体的三分之一( Wiki )。
图 3:德谟克里特斯荷兰画家亨德里克·特尔·布鲁根。
希腊人和解析几何
用我们现在的符号表示的解析几何是在 17 世纪由法国哲学家、数学家和科学家勒内·笛卡尔(1596-1650)发明的。这是作为他著名的《La géométrie》的附录提出的在这部开创性的著作中,笛卡尔首次提出了将几何对象转化为代数方程,从而将代数和几何结合为一门学科的概念。
图 4:勒内·笛卡尔(1596–1650)的开创性作品“La géométrie”(来源)。
然而,希腊人已经有了解析几何中一些基本概念的概念(尽管仍然是原始的)。一个例子是,在一个平面上,轨迹可以用移动点到两条垂直线的距离来分析(如果这些距离的平方和是固定的,它们就是一个圆)(见西蒙斯)。
阿基米德和球体的体积
阿基米德是最早将数学技术应用于物理学的人之一。众所周知,他创立了流体静力学和静力学,并因解释了杠杆而闻名。事实上,他最著名的名言是:
“给我一个支点,我可以撬动整个地球”
—阿基米德
图 5:出自“力学杂志”的一幅版画,取材于阿基米德的名言(来源)。
使用现代符号,考虑图 6 所示的下列圆。
等式 1:用现代符号书写的圆。
为了我们目前的目的,我们将把这个等式表示如下
等式 2:等式。1 以不同的形式表达。
现在考虑以下程序的及其相应的解释,全部基于图 6:
- 首先,围绕圆的直径旋转它。这将给我们一个球体。
- π x 等于在x∈【0,2a】的直线 y = x 下面的三角形绕 de x 轴旋转一周所产生的圆锥体的横截面面积
- π(2 a )等于绕边为 2a 的正方形的轴 x 旋转一周所产生的圆柱体横截面的面积
- πy 等于球体横截面的面积
图 6:在 y = x 直线的下方为x∈【0,2a】(源)做一个三角形的旋转锥,得到面积为π x 的横截面。
现在我们用等式乘以等式。2 乘以 2π得到:
等式 3:等式。2 乘以 2π。
右手边是我们刚刚描述的围绕 de x 轴的旋转圆柱的区域(上面列表中的倒数第二个项目)。
现在阿基米德的天才开始发挥作用了。他重新排列了几何图形,如图 7 所示。在这种构形中,球体和圆锥体由一根细绳悬挂着(可以假定是无重量的),水平轴被当作一根杠杆,以原点为其固定铰链(支点)。根据所谓的杠杆定律,“输出力与输入力之比由支点到这些力的施加点的距离之比给出”(维基)。
图 7:两个旋转的图形(圆锥体和圆柱体)和球体,重新排列(来源)。
现在,利用德谟克里特斯的结果,即圆锥体的体积是圆柱体的三分之一,杠杆定律意味着和:
方程式 4:阿基米德利用杠杆定律得出的球体体积。
这是我们追求的结果。这一计算的独创性令人震惊。正如美国数学家乔治·f·西蒙斯所观察到的:
[在这个推导中]讨论的想法是由一个人创造的,他被描述为“古代世界最伟大的天才”,这是有充分理由的。"的确,没有什么地方能比这更能展示智力与最高境界的想象相结合了。"
乔治·f·西蒙斯
感谢您的阅读,再见!一如既往,我们随时欢迎建设性的批评和反馈!
我的 Github 和个人网站 www.marcotavora.me 有一些关于数学和其他主题的有趣资料,如物理、数据科学和金融。看看他们!
鬼魂,机器和它们之间的东西
形而上学中的二元论是相信有两种现实:物质的(物理的)和非物质的(精神的)。在心灵哲学中,身心二元论认为,心灵和身体在某种程度上是绝对分离的,精神现象在许多方面是非物质的。
精神和身体问题关注的是精神和身体在多大程度上是分离的,或者是同一件事,以及人类思想中思想和意识之间的关系。已经提出了许多理论来解释我们所谓的心灵(定义为意识)和大脑(定义为肉体的一部分)之间的关系,其中一些我想在本文中讨论,但首先让我们看看这个争论的漫长而多样的历史。
鬼魂:“我思故我在”
“我是否如此依赖身体和感官,以至于没有它们我就无法生存?”
二元论可以追溯到柏拉图和亚里士多德。柏拉图首先提出了“形式理论”,认为我们在世界上感知的物体和其他现象只不过是影子。他认为,要让智力接触到概念或想法,头脑必须是非物质实体。亚里士多德认为,既然智力能够接收和反映所有形式的数据,那么它一定不是一个物理器官,因此一定是非物质的。
然而,二元论在 17 世纪由法国哲学家勒内·笛卡尔最精确地阐述,他为“笛卡尔二元论”的开端奠定了基础,特别是他的论点是,身体和心灵是完全分离的物质,彼此独立,我们称之为二元论。
机器
“一切自然的事物都可以归结为一个原则,这就是自然;所有自愿的事情都可以归结为一个原则,即人类的理性或意志。”【圣托马斯·阿奎那】(T11)
相比之下,托马斯·霍布斯和约翰·洛克是英国哲学家,他们不同意二元论的概念,支持唯物主义。
他们认为,所有人类的经历都是发生在大脑和神经系统中的物理过程。由于这种观点认为精神和身体是同一个,它后来被称为一元论。
霍布斯不相信灵魂,也不相信有别于肉体的心灵,或者任何其他非实体的和形而上学的实体。相反,他认为人类本质上是机器,甚至他们的思想和情感都按照物理规律和因果、行动和反应的链条运行。人类作为机器,无情地追求自己的私利,机械地回避痛苦,追求快感。
霍布斯认为,在人类的自然状态下,道德观念是不存在的。因此,在谈到人性时,他简单地将善定义为人们所渴望的,将恶定义为人们所避免的,至少在自然状态下是这样。霍布斯使用这些定义作为解释各种情绪和行为的基础。例如,希望是获得某种明显的好处的前景,而恐惧是意识到某种明显的好处可能得不到。
机器里的幽灵
英国哲学家 Gilbert Ryle 也在牛津大学讲课,通过引入短语“机器中的幽灵”作为对笛卡尔和其他人的观点的批评,对“心灵哲学”做出了重要贡献,笛卡尔和其他人认为精神和身体活动同时发生,但却是分开的。
“机器中的幽灵”是指物理实体中携带的意识或思想。赖尔认为,人类的意识和思维非常依赖于人脑。术语“机器中的幽灵”也用来描述设备中的假定意识,它的行为就好像它具有独立于人类操作员想要设备做什么的意志。
计算机程序员用“机器中的幽灵”这个术语来解释程序运行与他们的预期相反的时候。
1967 年亚瑟·库斯勒,一位匈牙利裔英国作家兼记者写了《机器中的幽灵》。标题使用了赖尔创造的短语。科斯勒的书本质上是对人类大脑可以被视为一台机器,一种化学计算机的假设的批判。他继续考虑,如果它是一台计算机,那么形而上的呢?五十年后,反过来才是问题,许多人质疑人工智能(AI)是否是机器获得意识的第一步。
但承认关于人工智能的两件事非常重要:首先,现代人工智能的成功与其说是因为新技术的突破,不如说是因为可用的大量数据和计算能力。然而,重要的是,即使无限量的数据也不会赋予人工智能类似人类的智能——我们需要首先在开发人工“一般智能”技术方面取得重大进展。一些方法包括建立人脑的计算机模型——这一点我们还没有接近实现。第二件要承认的事情是,没有人类的输入,人工智能无法发挥作用。人类是人工智能,在你考虑一些邪恶的评论之前,让我解释一下:玛丽·l·格雷,哈佛大学伯克曼·克莱恩中心的研究员和微软研究院的高级研究员在她的新书《幽灵工作》中透露了人工智能的秘密:“人类工作者不仅仅是标记让人工智能工作的数据。有时候人类工作者就是人工智能。”
人工智能系统不是在我们中间进化的外星大脑,很快就会成为我们的主人。他们是我们通过将我们的人性嵌入到他们的程序中来建造和训练的机器。
机器学习算法通常被认为是黑盒,在精确定位我们的算法找到的解决方案的细节方面付出的努力较少。这是一个重要但经常被忽视的方面,因为我们经常沉迷于性能而不是理解。理解这些系统发现的解决方案非常重要,因为我们还可以评估它们是否是正确的或理想的解决方案。
哲学僵尸 有人可能会说 AI 是一个“哲学僵尸”,这个词与大卫·查尔莫斯和哲学家罗伯特·柯克联系在一起,用来描述一个走路和说话都像人类的精确的物理克隆。但是,尽管如此,它缺乏任何内在的精神体验、思想或情感。它只是为了复制而复制人类行为。机器可能有某种意识,但没有人类的意识。
哲学家托马斯·内格尔在他的文章中提出,“做一只蝙蝠是什么感觉?”意识有一个主观方面,对于那些无法体验其他精神状态的人来说,理解这些精神状态是困难的或者不可能的。他选择蝙蝠是因为它们是与人类关系相对密切的哺乳动物,(有人可能会说,这就是我们如何得到新冠肺炎病毒的传播?—让我们暂时就这样吧!)——但是,即使我们知道所有关于它们的客观事实,我们也永远无法真正知道作为一只蝙蝠会是什么样子。我们也许能够想象倒挂、夜间飞行或使用回声定位追踪猎物会是什么样子,但纳格尔也认为,我们真的无法知道蝙蝠的经历是什么样子,就像我们无法知道蝙蝠是什么样子一样。
我们无法知道计算机或某种人工智能会是什么样子。我们只能说,除非给某个人工智能一个真正的人脑,否则只有人类才能知道作为人类是什么样子。但另一方面,剩下来要回答的问题是:我们可能不知道作为一台机器是什么样子,一台机器不可能有人类的意识,但我们是机器里的幽灵吗?
为了回答这个问题,我们首先必须了解人类决策的一些基本理念。
鬼魂还是机器?
“两只狼”的故事是我最喜欢的故事之一。即使你已经听过了,这也是一个很好的提醒。事情是这样的:
一位年长的切罗基族祖父正在教导他的孙子关于生活的知识:“我体内正在进行一场战斗,”他对这个男孩说。“这是一场可怕的战斗,是两只狼之间的战斗。一个是邪恶的——他是愤怒、嫉妒、悲伤、后悔、贪婪、傲慢、自怜、内疚、怨恨、自卑、谎言、虚假的骄傲、优越感和自我。”他继续说,“另一个是善——他是快乐、和平、爱、希望、宁静、谦逊、善良、仁慈、同情、慷慨、真理、同情和信仰。你内心也在进行着同样的斗争——每个人的内心也是如此。”孙子想了想,然后问爷爷:“哪只狼会赢?”老切诺基人简单地回答:“你喂养的那只。”
这个故事可以有很多不同的解释,但对我来说,它是一个重要的提醒,提醒我们每个人内心都有双重力量。好的和坏的,或“肩膀天使”——一种在小说、动画书和电影中常用的情节设计。
来说说我们肩上的天使还是魔鬼。很明显,你可以想象,这种想法的根源可以追溯到哲学家西格蒙德·弗洛伊德,精神分析的创始人,他提出了“自我和本我”的概念(发音像“愚蠢”,没有“愚蠢”),作为对人类心理的分析研究。
肩膀上的天使或魔鬼的概念基本上是弗洛伊德关于本我、自我和超我的理论。
本我是想象中的魔鬼,弗洛伊德将其描述为“努力带来本能需求的满足……”本我是心灵中寻求快乐的部分,它忽略了可能的后果。它缺乏道德,自私自利。肩膀上想象的天使是超我。它也被称为有意识的。它代表了我们的理想,我们的是非观。它试图控制 id。
最后一块是自我,以我们的头卡在肩膀上的天使和魔鬼之间为代表。自我基本上是法官,它在本我和超我之间进行调解,以便采取适当的行动。它很好地权衡了本我和超我想要的东西之间的利弊。
弗洛伊德理论的问题在于没有办法支持。我们无法证明本我或超我的存在。我们所知道的是,当我们不得不做出决定时,我们会听到内心的冲突。
事实上,如果我们要从心理学中寻找决策的解释,我们可能会找到一种补救方法。
根据我们之前关于意识的讨论,以及机器无法拥有意识的潜在结论,我们是否可以说只有人类有能力以天使般的方式行事,而机器从定义上来说就是魔鬼?我认为这是一个更复杂的问题,可能介于哲学、科学和人类进步之间。但有一点我可以保证,人类的决策过程远比深度神经网络或决策树复杂。
做决定可能是艰难的,我们的自我对话可能会引导我们走向许多结果。这些决定中的一些会导致对我们有利的结果,而一些决定确实对我们不利。但是是什么引导我们做决定呢?嗯,我们都有良知——当我们做决定时,内心的声音会告诉我们“对与错”。
今天早上的早餐,我不得不在一个羊角面包(确切地说是巧克力味的)和一碗燕麦片(羊角面包很好吃)之间做出选择。一整天,我都不得不克制住查看推特、不去健身房、看《改变的碳》直到深夜的冲动。每时每刻,诱惑都在召唤。心理学家用这种冲突来解释自我控制:我们短期冲动的情绪系统和我们长期深思熟虑的逻辑系统之间的推拉。但是,心理学家认为这两个系统不一定同时起作用。人们一致认为,当我们看到羊角面包时,我们的冲动系统首先行动,迅速引发自动冲动。从这个角度来看,魔鬼一有麻烦就来,天使在游戏中姗姗来迟,试图征服魔鬼。
这意味着自我控制在很大程度上取决于我们的意识,即天使。事实上,现代社会崇尚意志的力量——控制和超越动物欲望的想法,以便理性能够占上风。这为个人失败提出了非常明确的补救措施:更强的意志力和更坚韧的精神。
你可能会把它看作是两只狼,天使和魔鬼栖息在你的肩膀上,自我和本我或者我更喜欢这样看——作为一个内在的幽灵和一台机器。我让你来决定谁会赢,是鬼魂还是机器?
鬼魂和机器
“我们必须热爱我们的技术,才能准确地描述它。我们必须足够爱自己,去面对科技对我们的真实影响”(特克尔)
人工智能接管是一种假设的场景,其中人工智能(AI)成为地球上的主导智能形式,计算机或机器人有效地从人类物种手中夺走了地球的控制权。人们在谈论 AI 接管并超越人类智能。
我个人更关心人类如何使用 AI。机器学习算法通常被认为是黑盒,在检查算法找到的解决方案的细节方面付出的努力较少。这是一个重要而又经常被忽视的方面,因为我们经常过度沉迷于性能而不是理解。理解这些系统发现的解决方案非常重要,因为我们还可以评估它们是否是正确或理想的解决方案。
就像人类一样,机器学习和人工智能都是工具。像其他事物一样,它们可以被正确或错误地使用。我们应该关心的是使用它们的方式,而不是方法本身。人类的贪婪和人类的自满比人工智能更让我害怕。
机器人会在某些工作中取代人类吗?答案是明确的,是的。然而,随着每一项工作都被机器取代,新的工作将有同等数量的机会由人来做。其中一些将是创造性的,其他的将需要人类磨练他们超人的推理能力。但是 AI 会完全取代人类吗?我认为答案是否定的。人工智能系统不是在我们中间进化的外星大脑,很快就会成为我们的主人。他们是我们通过将我们的人性嵌入到他们的程序中来建造和训练的机器。
人们担心人工智能会接管世界,担心未来会出现失业、机器控制的噩梦。为了实现这一点,我们首先必须了解人工智能发展出“超级智能”的可能性有多大,这种智能行为将超过人类。
人类往往会害怕自己不了解的东西。因此,难怪这也适用于新技术——新技术通常被某种神秘所包围。一些技术成就看起来几乎是超现实的,明显超出了对它们的预期,在某些情况下,还超出了人类的表现。
未来,人和机器可以而且将会一起工作,他们会发现自己处于共生关系中,互相帮助做他们最擅长的事情。这不是一个或的问题,而是和的问题。所以,让我们停止,或者至少忽略人工智能优越性的空洞鼓点。人类是惊人的,没有他们人工智能将会迷失,但有一件事人工智能可以肯定——它可能会帮助我们专注于我们不可替代的东西,并使人类再次成为人类。
原载于 2020 年 4 月 6 日https://iron woman . ai。
Git 备忘单
背景图像由 Yancy Min 在 Unsplash 上拍摄。由作者编辑。
Git 是最流行的版本控制系统之一,你可以把它看作是在特定的状态和时间拍摄代码快照的一种方式(Git 术语中的提交),以防你以后把事情搞砸了,想回到代码的稳定版本。如果你把它和 GitHub 结合起来,这也是一种很好的合作方式。
Git 是免费和开源的。你可以从官网下载。一旦安装完毕,你应该能够在你的终端上运行 Git 命令。
在开始使用 Git 之前,您应该知道一些事情:
- 当你想跟踪项目中的文件时,你把它们放在一个仓库中。存储库基本上是一个目录,在其中启用了版本控制,并且总是对您放入的内容保持警惕。它会知道这些文件的任何变化,并帮助你跟踪它们。
- 每个提交都有一个标识符,以防你以后需要引用它,这个 ID 叫做 SHA ,它是一个字符串。
- 工作目录包含你在项目目录中看到的所有文件。
- staging index 是 Git 目录中的一个文件,它存储了下一次提交中将要包含的信息。
创建或克隆存储库
在当前目录下创建或克隆一个存储库。
- 从头开始创建存储库:
git init
- 克隆现有存储库:
git clone <https://github.com/>...
- 克隆存储库并使用不同的名称:
git clone <https://github.com/>... new_name
显示信息
- 确定回购状态:
git status
- 显示回购的提交:
git log
- 紧凑显示回购的提交:
git log --oneline
- 查看修改的文件:
git log --stat
- 查看文件更改:
git log -p
- 查看文件更改,忽略空白更改:
git log -p -w
- 查看最近提交:
git show
- 查看特定提交:
git show <SHA of commit>
增加
“暂存”是指将文件从工作目录移动到暂存索引。
- 暂存文件:
git add <file1> <file2> … <fileN>
- 卸载文件:
git rm --cached <file>...
- 登台所有文件:
git add .
犯罪
从暂存索引中取出文件,并将其保存在存储库中。
- 提交暂存文件:
git commit
该命令将打开代码编辑器。在代码编辑器中,您必须提供一条提交消息,保存文件并关闭编辑器。
- 不打开代码编辑器提交文件:
git commit -m "Commit message"
Git 差异
- 查看已经完成但尚未提交的更改:
git diff
磨尖
标记被用作特定提交的标记。这些对于给代码分配一个版本非常有用。
- 将标签添加到最近提交:
git tag -a <tag(v1.0)>
- 向特定提交添加标记:
git tag -a <tag(v1.0)> <SHA of commit>
*-a*
用于创建一个带注释的标签,其中包括额外的信息,如创建日期和创建者。添加此标志通常被认为是一种好的做法。
- 显示存储库中的所有标签:
git tag
- 删除标签:
git tag -d <tag-name>
分支
当在存储库中提交时,它会被添加到您当前所在的分支。默认情况下,存储库有一个名为 master 的分支。特别是在你的代码上试验新特性的时候,创建一个单独的分支,作为一个与你上次提交安全隔离的环境,通常是很有用的。您可以在分支之间切换,提交将只添加到您当前所在的分支。
- 列出所有分支:
git branch
- 创建新分支:
git branch <branch-name>
- 删除分支:
git branch -d <branch-name>
您不能删除当前所在的分支。
如果一个分支包含不在任何其他分支上的任何提交,则不能删除该分支。
- 强制删除:
git branch -D <branch-name>
- 分支切换:
git checkout <branch-name>
- 在特定提交上添加分支:
git branch <branch-name> <SHA of commit>
- 在与主分支相同的位置开始分支:
git branch <branch-name> master
- 一次查看所有银行:
git log --oneline --decorate --graph --all
合并
当执行合并时,另一个分支的更改会被带到当前签出的分支中。
- 执行合并:
git merge <branch to merge in>
批改作业
- 修改上次提交的消息:
git commit --amend
还原提交
这将创建一个新的提交,恢复或撤消以前的提交。
- 撤消提交中所做的更改:
git revert <SHA of commit>
重置提交
这将清除提交。
- 重置提交:
git reset <reference to commit>
根据您添加的标志,您将获得不同的结果:
--hard
清除提交的标志--soft
将提交的更改移动到暂存索引的标志--mixed
取消已提交变更的标志
如果你想了解更多关于 Git 的知识,Udacity 提供了这门很棒的课程,它涵盖了所有基础知识和更多深入的概念(免费!).我自己上过这门课,它启发我总结了我学到的一些主要概念,并在我的项目中使用。
希望你从这篇文章中得到一些价值😊下一集再见!
GitHub 备忘单
GitHub 是使用 Git 托管软件开发版本控制的最受欢迎的服务之一。如果你对版本控制和 Git 还不熟悉,你可以看看我之前的文章,Git 备忘单,在那里我解释了基础知识。
为什么要使用 GitHub 呢?
作为一名开发人员,您可能会觉得使用版本控制在自己的本地存储库上工作很舒服。然而,协作是至关重要的,因为大多数时候,你不会独自在一个项目中工作。你将和你公司的一个团队一起工作,或者可能和你在世界各地都不认识的人一起工作。无论您想从事较小的项目,还是大型开源项目,协作都是开发人员必须具备的重要技能。
GitHub 使版本控制项目的协作变得容易。因此,在这篇文章中,我们将学习如何使用 GitHub 进行协作的基础知识。
添加远程存储库
当您希望本地存储库与 GitHub 中的远程存储库进行通信时,请使用此命令。基本上,通过这个命令,您可以告诉您的计算机在您的本地 repo 和指定的远程 repo 之间创建一个连接,这将被称为origin
(这是一个简称)。
$ git remote add origin https://github.com/username/repository.git
当您将远程存储库克隆到本地设备时,此连接会自动完成。
发送提交
我的远程回购的简称是origin
,我想要推送的提交在master
分支上。所以我将使用下面的命令将我的提交发送到 GitHub 上的远程存储库:$ git push origin master
从远程存储库中提取更改
为了将本地存储库与远程存储库同步,我们需要使用 git pull。与git push
类似,您提供远程存储库的简称,然后提供您希望提交的分支的名称。
$ git pull origin master
取得
如果你不想自动合并本地分支和远程跟踪分支,那么你就不要使用git pull
,而是使用git fetch
。如果远程存储库上有您没有的提交,但是本地存储库上也有远程存储库也没有的提交,您可能想要这样做。在这种情况下,您希望获取远程更改,以便在本地分支中获得它们,然后手动执行合并。然后,您可以将新合并提交推回到远程。
等等,那么拉和取的区别是什么?
您可以认为git pull
命令做两件事:
- 获取远程更改(这将提交添加到本地存储库中,并移动跟踪分支以指向它们)。
- 将本地分支与跟踪分支合并。
git fetch
命令只是第一步。它只是检索提交并移动跟踪分支。它不将本地分支与跟踪分支合并。
叉
当您派生一个存储库时,您正在创建该存储库的一个相同副本,并将其存储在您的配置文件中。修改分叉回购不会影响原回购。
短日志
当在一个项目中与其他开发人员合作时,知道谁做了什么是很有用的。git shortlog
将显示提交的作者分组。
您可以添加标志-s
来查看提交的数量,添加标志-n
来对它们进行数字排序:$ git shortlog -s -n
重定…的基准
在协作项目中进行变更时,我们需要尽可能清晰。这将有助于其他开发者理解我们所做的事情。
假设您连续提交了三次都是小的打字错误,这里最好的办法是将这三次提交合并成一次。
对于这个例子,您可以使用:$ git rebase -i HEAD~3
git rebase
将提交转移到新的基础。在本例中,HEAD~3
表示头前三位(头是你当前的位置)。
看起来你已经准备好在 GitHub 上合作了!🎉我知道学习曲线有时会很陡,但绝对值得坚持下去。希望这是对你有帮助的介绍😊
金发区:你能设计出恰到好处的神经网络吗?
了解如何在实践中设计基于特定应用的神经网络。
深度学习很难,退一步说。用于创建神经网络体系结构的多种结构和方法几乎专用于非常选择性的问题。在大多数情况下,样板模型是行不通的,那么你如何着手设计最好的神经网络呢?
credit->Xu:对信号(在通信中)的一种借鉴,其中神经网络以与 SEFDM 信号相似的方式构建,在 SEFDM 信号中,带宽被分割并分出多个其他流用于通信。
现实是没有正确的答案 ,但是从稀疏性、记忆、剪枝等领域的研究来看,有一些通用的规则可以遵循,以有效地测试和产生一个可行的模型。
从不同的角度看神经网络架构(NNA)
本质上,神经网络只是信息流经的结构。通过各层及其各自的神经元,以指定的多种方式对这些信息进行某些操作。一种思考方式是通过不同的层传递信息。
想到一条河;数据的河流。这条河不是以固定的速度流动,而是转弯、变窄、分开、回来、循环……你明白了吧。河流流经不同的关口,变窄溪流,斜坡,甚至汇集成湖泊!
我已经告诉你的分别是,从纯数学的角度来看神经网络架构的本质,以及它如何控制信息以对新数据进行准确预测。从迁移学习到瓶颈方法,甚至 LTSM 网络,在设计神经网络和你要寻找的输出时,记住这些概念是很重要的。
这就是为什么找到这个适居区比你想象的要难:你在与无数的变量打交道,你的数据必须适合所需的神经网络架构。
本质上:
嗯,设计神经网络可能有一些重要的规则需要理解。然而,在此基础上,内化任何神经网络的目标是学习任意的输入输出函数。
Credit -> ZipTech:网络中带有标记神经元的几个神经网络;利用不同的卷积和记忆单元以及在多个神经网络中发现的基本神经元
每个权重和连接都有一个用途,将特定的恒定权重应用于之前的输入,以便在数据中找到特定的模式。
许多这些想法都是功能性的,每个独立的神经元都服务于神经网络的一个深层目的,无论是深度学习的架构,还是结合机器学习子集的不同方法。
现在,这些层和神经元不寻找眼睛颜色或肤色之类的东西:这些特征通过浮点运算来量化,这些浮点运算共同构建了给定输出的某个概率。
例如,CNN 不是什么特别的东西。它仍然是一个神经网络,但由不同的线性核组成,以发现数据中的特征,而不是使用传统的输入输出结构。CNN 由记忆细胞、池细胞、核细胞、过滤细胞和其他更一般问题所必需的隐藏数学运算组成。此外,重要的是要认识到信息正在经历一个瓶颈,所有这些不同的神经元都在消除噪音和提取数据中的共同模式方面发挥作用!
最基本的卷积神经网络的功能分解,以及每一层如何构造以确保分类准确发生
为什么这很重要?了解某些神经元如何工作可以让你创建定制的架构,并更准确地将问题与模型相匹配。某些模式和层数会影响信息流,以便更好地解决问题。
- CNN 使用池层来识别图像的特征,并简化所需参数的数量。它对数据集进行线性扫描,只获取最重要的信息。
- rnn 将输出反馈到同一层,以获得记忆感,从而分析非常具体的趋势。通过循环输出作为输入,你允许某些记忆神经元过早地在数据中寻找特定的模式。
- 块-稀疏 GPU 集成使用带有 0 的稀疏层来降低神经网络层所需的 GPU 功耗,并识别输入数据之间最相关的连接。
- 内核算法是神经网络中的一个附加层使用非线性问题的线性运算提取特征。
这里发生了一些有趣的事情:所有这些结构都在对给定的输入数据进行线性或非线性运算,以将其映射回一般的输出。我们唯一不关注的是我们如何做到这一点,以及最好的方法是什么。我们是在寻找更好的不变性,回忆,还是效率?
归功于 3blue1brown:基于手写数字分类算法的输入 7 的激活神经元的可视化,请注意,虽然这是一个图像问题,但没有使用 CNN,而是数据能够有效地格式化为传统的人工神经网络(或基本神经网络)
结论:我们可以从一些抽象的需求或特性中,将层及其指定的线性操作组织成数据流的数学参考。
我现在如何使用这个?
许多高级机器学习问题需要从数据中做出直观的决策,但你不能只是盲目地挑选 10 层和 10 个神经元,然后就此结束。你必须是有意的,研究源于这个想法,并产生了一些最流行的抽象问题集模型。随着时间的推移,它会变得更加复杂,但在设计神经网络的架构时,您可以记住一些提示。
- 了解问题和你的需求,确定相关因素和功能。
你想解决什么?是高维问题吗?我需要某些注意机制吗?看看你的问题是什么,确定你需要解决什么。通常,您可以将您的数据映射到不同的模型,并应用类似的方法来添加您自己的特定设计变更。
例如,当试图为患有罕见遗传疾病的患者寻找某些非同义遗传序列时,高通量测序是一种分析你的基因组大块的流行方法。
鸣谢:谷歌大脑
该团队后来设计了一种新的测序方法,称为 DeepVariant,而不是使用 LSTMs(一种识别致病序列的传统方法)将问题转变为 CNN 问题,以更好地可视化和绘制出某些序列的流行及其与体内其他基因的相互作用。
2。避免网络碎片和不必要的神经元,防止过度拟合。
在实践中,许多深度学习研究人员利用仪表板(y 轴上的误差和 x 轴上的训练规模)来跟踪你的偏差和方差,但通常在神经网络中,更难看到应该如何减少方差和增加偏差来获得它,再次,恰到好处。
一般来说,最好的方法是减少模型的维数,以防止高阶函数以几乎 100%的精度映射训练集。辍学率是一个有用的解决方案,您可以识别并重新评估您的层中神经元的需求。好的辍学率范围从 0.1 到 0.5 (训练一个神经元的概率)。
Credit -> Analytics Vidhya:辍学率,表示给定层中神经元被训练的概率
在神经网络中,您可以改变权重的数量,以避免碎片或使用更大的运算(常数超过特定的权重值)。
3。使用已经开发的不同机制
这看似矛盾,但让我解释一下。瓶颈、全局平均值和修剪算法等机制是某些工具,可以添加到您的基本样板神经网络架构中,以根据您的需求增强其可行性。
Credit -> FloyHub:注意力机制视觉直觉的一个例子。
你本质上是在一个简单的模型上增加了另一层复杂性,以便简单地达到一个复杂的结果,无论是更好的 GPU 优化还是在你的模型预测中达到更高的偏差。
这些机制特别有助于确定您可以做些什么来更好地改进您的模型,以及您需要关注什么。 PCA(主成分分析)是另一种机制,可以帮助你降低维度,以确定哪些神经元和输入对最终输出有影响。
其他机制包括通过简单的神经网络格式化数据,并将概率作为输入输入其他深度学习算法。最终,你的目标是降低复杂性,并为你给定的问题找到最有效的方法。
4。更多的层和更少的神经元并保持操作简单
为什么这是真的?好吧,让我们回到信息流的概念。深度学习起作用的原因是因为它的各个层利用非常特定的神经元和功能来提取特征。您拥有的层越多,您就可以更好地对您的体系结构进行建模,以匹配数据中的特定信息。
你不想要一个有 3 层和 1000 个神经元的网络来识别一只狗的所有特征。这些层和应用在它们上面的操作没有什么意义,对模型中的其他东西没有任何贡献。
您拥有的图层越多,您的图层就越能更好地提取某些要素并将结果传递到下一个图层。这是通过非常特殊的神经元功能逐步积累知识。最好把它想成是一起工作的整体的一部分,而不是一个人的军队。
然而,同样重要的是要认识到,在没有明确目的的情况下添加更多层会导致初级层的学习速度发生增量变化,因此您的网络可能会遇到消失梯度问题。然而,这也可以通过证明归因于在模型学习时随着时间推移具有显著变化的层中缺少神经元。
功劳-> 胡:消失渐变问题表现出不同的准确性
尽管如此,具有高维数和小输出的神经网络中的某些问题需要足够的神经元来包含尽可能多的信息。另一方面,有些问题使用 RNNs,在这种情况下,输入很少,输出很多,因此需要更多的层来提取更多的信息。
好吧,现在怎么办?作为一名开发人员,你不仅要理解你试图解决的问题,还要将它与两个概念联系起来,即信息丢失和信息复杂性。
在信息丢失中,瓶颈效应发生在整个网络中,在网络中,您使用更多的内核和卷积池层来概括数据中的模式。这是 CNN 用来对各种类型、大小和形状的图片进行分类的工具。问题是,回到消失梯度,你的主要层学习速度较慢,因为需要更多的神经元来获得足够的信息。在 CNN 的情况下,这不是一个问题,但当你遇到深度感知或语义分割等问题时,这并不理想。
随着信息的复杂化,你要从一个小的特性集中识别出许多不同的关系。研究发现,网络中的前几个隐藏层会产生其他层所依赖的推断信息。rnn 将它们的输出作为输入进行反馈,以找到集合关系,而不会在整个网络中引起连锁反应。复杂性也会导致渐变消失的问题,因为前几层只使用一组参数库,所以学习速度较慢,精度会降低。
那你是做什么的?实验在这种情况下进行。理解你的问题。但总的来说,使用适量的层和足够的神经元来平衡您的数据复杂性将有助于您获得可行的结果。
信用-> RM 出版物:简单问题的经验法则;用直觉解决更复杂的问题
总之,有哪些要点?
首先,没有确切的“金发女孩地带”,可悲的是,可能永远也不会有一个恰好合适的模型。然而,当制定或构建您自己的神经网络架构时,您需要了解您做出的每个决定的基本原理。
在深度学习中,与其花时间收集更多的数据,进行更多的研究,或制定更好的数据,不如专注于模型本身。
专注于如何设计和改进你的神经网络,而不是第一次就把它做对,因为事实是,你永远不会把它做对。
迭代、毅力和对基本原理的深刻理解将帮助你建立你的知识,并根据问题定制你的架构,我希望这个总结有助于引导你朝着正确的方向去实现它。
T2 感谢你花时间阅读这篇文章,我希望你从中有所收获。如果你想获得更多的技术或者干脆联系我,你可以在LinkedIn邮箱 ,或者GitHub上找到我。**
分析的黄金地带
iStock.com/伊利亚布洛托夫
现实太真实了。数据太抽象了。可视化恰到好处。
我们地球人过得很好。如果地球的轨道稍微靠近太阳一点,就会太热;再走远一点就太冷了。地球所处的位置恰到好处,一个被称为“适居带”的区域。
如果分析是太阳系,那么数据可视化就是它的金发区。一方面是现实,它太详细和复杂,无法完全理解。另一边是原始数据,也因为太抽象而难以理解。为了让分析有用,它必须位于中间——不要太真实,也不要太抽象。视觉化是让它恰到好处的关键。
分析学的三脚凳
人们知道他们能触摸、看到、听到、闻到和尝到什么。他们无法用抽象的概念做到这一点。人们在与他们生活的物质世界相关的想法中找到意义。
这是分析的一个问题,因为抽象是它的一个基本方面。要对某事进行分析并做出有把握的结论,通常需要大量的信息。然后,这些信息必须被抽象成原始数据。
一旦设置了数据,下一步就是对其进行分组、汇总和应用统计方法,目标是找到有意义的模式,这些模式可以转化为通用原则和预测。这也是分析的一个基本方面。每一个分析过程都是从数据和分析开始的,但不能止于此。还是太抽象了。为了使分析有用,它必须回到五种感官。
如果分析是一个三条腿的凳子,第一条腿使信息易于管理(原始数据),第二条腿使信息变得有意义(数据科学),那么就需要第三条腿使信息变得有关联。这就是视觉化的作用。要使分析站得住脚,所有三个方面必须协调一致。很多时候,可视化被认为是一个附加物,但是有几个原因为什么它应该被看作是每个分析项目的一个基本部分。
眼见为实
描述某事,它可能被理解。展示一些东西,不仅会被理解,而且会立刻被理解。这方面的经典例子是 Anscombe 的四重奏,它采用了 4 个具有完全相同的汇总统计数据的数据集…
安斯康贝的四重奏:数据和统计摘要
…并将它们绘制成图,展示视觉观察时图案的显著差异。
作者图片
当然,有更复杂的方法来描述模式,但是没有一个模型,无论多么优雅,能够比上面的图片更快更有效地解释这些模式。分析正确是不够的;它还必须帮助他人理解什么是正确的。一个深思熟虑的分析与正确的可视化相结合,可以很好地做到这一点。
可视化是一种隐喻
比喻用容易理解的东西来描述其他难以理解的东西。我最喜欢的一个例子是当爱因斯坦描述相对论时:“把你的手放在热炉子上一分钟,感觉像一个小时。和一个漂亮女孩坐一个小时,感觉就像一分钟。”在短短的几句话中,他用任何人都能理解的生动形象描述了一个抽象的概念 e=mc2。这就是可视化对分析的作用。
图表将数据组织成一种格式,这种格式代表现实世界中易于识别的事物。换句话说,它们是隐喻。就像一个【KC1】的嫌疑人阵容,酒吧比较相对高度。像一个便当盒,树状图显示了每个部分如何对整体作出贡献。像一块土地一样,散点图显示 2D 的相对位置。诸如此类。
在上面的每个例子中,无论数据素养如何,所有人都能立即理解图表的含义,因为它用的是他们已经理解的术语。这就是可视化的要点:不要过度简化,而是将不透明、抽象的概念转化为更容易理解的形式。
第六感
分析的肮脏小秘密是,如果人们不喜欢你的数字,他们会找到新的。
仅仅依靠五种感觉是不够的,因为还有一种更强大的第六感。它的正式名称是确认偏差,但更普遍的说法是“直觉”。这是一种根深蒂固的信念,即不管有没有证据,某事都是真实的。有时候,是基于经验的健康本能;其他时候,它是一种顽固的拒绝,拒绝放弃一个错误的信念。不管怎样,这是人们如何做决定的重要部分,包括本文的读者和作者。
在你的分析方法中忽略这一事实将是一个错误。仅仅以符合逻辑的方式陈述事实是不够的。你还必须向直觉提出一个论点,而直觉只对一件事做出反应:情绪。
现在,这个词对大多数分析师来说是一个亵渎的词,因为我们最不想做的事情就是情绪操纵。然而,情感在可视化中的作用不是操纵,而是展示真实的事情和它们为什么重要。分析的目标是发现洞察力和从而让人们采取不同的行动。为了让他们采取行动,他们必须觉得这样做很重要。视觉化可以让他们感觉到。
关于如何将这些想法付诸实践,有很多话要说,但为了节省时间,让我们简要地谈一谈这样做的三种方法。
1。为了让大家知道,我们展示了
如果你是一名数据分析师,并且你还没有在你的可视化技能上做一点点投资,那么你有一个扩大你的受众和影响力的好机会。在你的个人发展计划中把形象化放在首位。你不必成为一名艺术家——只要遵循一些基本原则,任何人都可以胜任。挑一两本书开始读。如果你需要推荐信,爱德华·塔夫特或斯蒂芬·诺的任何一本书都是不错的起点。
2。不要本末倒置
为所回答的问题使用正确的视觉隐喻。一个常见的错误是在理解要解决的问题之前就开始构建图表。某些类型的问题最好用某些类型的视觉隐喻来回答。所以,从问题开始,密切注意正在使用的单词,并将其与适当的隐喻相匹配。
例如,如果问题是“多少…?”或者“最大的是什么…?”,然后用一个大小和排名的比喻,比如条形图。像嫌疑犯队列一样并排比较多个物体的长度或高度对人们来说很容易做到,特别是当等级排序时。
如果问题是“什么是趋势?”,然后用一个时间的比喻,比如折线图。人们倾向于认为时间在水平面上从左向右移动。当看到 x 轴上有日期的连续折线图时,他们会直观而迅速地理解他们正在看一条时间线。
如果问题是“在哪里…?”或者“之间的路径是什么?”,然后用一个位置的比喻。在这里,2D 地图是显而易见的选择。但是,一个常见的错误是,仅仅因为题目涉及地理,就认为问题本身就是地理问题。问题,“哪个地区的销量最多?”这看起来像是一个地理问题,但实际上是一个规模和排名问题。虽然地图擅长显示事物与其他事物之间的关系,但它们却不擅长显示相对大小和等级。在这种情况下,最好使用条形图或其他与尺寸相关的图表。
当然,还有许多其他类型的问题和视觉隐喻可以探索,但这几个例子应该可以让你知道如何选择人们可以直观理解的图表。
3。加一点剧情
可视化的一个关键优势是,它可以显示什么是重要的,这在处理“直觉”时至关重要。如果它很重要,它应该跳出页面,这样做的方法是创造视觉对比。
一种方法是用色。真正明亮的东西会引起注意,尤其是当周围的颜色变得柔和时。不同的颜色也能唤起不同的情感。红色、橙色和黄色等暖色倾向于表示更强烈的情绪,如兴奋、活力和恐惧。像蓝色和绿色这样的冷色调往往意味着积极和冷静。因此,在你的视觉效果中使用颜色向用户表明在哪里看和如何感受。
作者图片
另一种增加戏剧性的方法是用的尺寸。比周围物体大得多的物体最先被注意到。当视觉中的某个东西很大时,观众不仅首先看到它,而且他们还会直观地理解它的重要性。同样,目标是对比度,所以做稍微大一点的东西是不够的。如果它很重要,它需要大得多。
作者图片
如果你是一名数据分析师,你可能会花很多时间观察数字,识别模式,并得出结论。你习惯于密集的表格和统计模型,但是你的观众可能不习惯。你需要一种方法让你的作品更容易理解。可视化会有所帮助。
如果你是一名可视化实践者,你已经购买了可视化的能力,将分析带入生活,但你可能会与创建比满桌子数字更有洞察力的可视化的持续挑战作斗争。努力把你的视觉效果和你的观众直观得到的东西更好地联系起来。
分析很重要,但如果人们不理解或不关心它,它就没有多大用处。要构建出色的分析,就要让它清晰、有意义,并通过可视化让它恰到好处。
Dan 是 Aspirent Consulting 视觉分析的实践主管。他在金融、商业分析和可视化方面拥有超过 15 年的经验,曾在家得宝、可口可乐和 Mattel 等财富 500 强公司工作。
我在 2019 年进行的好的、坏的和丑陋的幻想足球交易
另外,你应该做那个交易吗?用我的工具找出答案。
我们能握握手吗?在第三周用阿伦罗杰斯换拉塞尔威尔逊将会是一笔非常好的交易。尽管罗杰斯在整个赛季都有一些重要的比赛,但威尔逊在本赛季剩下的比赛中总得分为 273 分,而罗杰斯为 235 分,每周净增加 2.7 分。
随着 2019 年梦幻足球赛季的到来,是时候回顾一下我们本赛季所做的好的、坏的和丑陋的交易了。
为了帮助这个练习,我建立了一个工具,根据参与交易的每个球员在赛季剩余时间里的表现,对每笔交易进行数学评分。
复制一份我的交易评估表,输入你在整个赛季中的所有交易,从数学上看,这些交易的结果,包括你的“交易等级”A+到 f。
使用交易评估员在第 3 周用 Aaron Rodgers 换 Russell Wilson 的交易中获得 A 级。
如何使用交易评估工具
- 复制一份交易评估员电子表格。(需要谷歌账号;没有谷歌账户?在此处查看电子表格并下载文件>以在 Excel 或您选择的电子表格程序中查看。注意:格式化可能会有点不稳定。)
- 在单元格 B1 中,选择赛季的最后一周,16 或 17,取决于您的联盟何时举行锦标赛。这将确保该工具不会在你的冠军周之后计算任何积分。
- 在单元格 B2,选择您的联赛的得分格式:PPR,半 PPR,或标准。
- 在单元格 B3 中,选择您的联盟中的球队数量。
- 在单元格 B5-B7 和 F5-F7 中,输入每个位置的首发球员人数。
- 在单元格 F8 中,输入 flex+板凳球员的人数。在最后三个步骤中输入的数据用于确定替补级别的球员价值,以更好地评估不同位置之间的交易。
- 从第 20 行开始,在 A 列中输入您交易的球员,在 b 列中输入交易后的一周。该工具将自动计算该球员在交易后的一周与赛季结束之间累积的梦幻点数,以及该周该位置的平均替补级别球员的相同点数,并为被交易的球员生成每周替换值(VOR) 。这一步对于准确评估不同头寸的交易很重要,例如,交易一个你可以更容易找到替代玩家的 QB,交易一个好的替代玩家可能更稀缺的 RB。
- 在 I 列中,输入您在交易中收到的球员,并在 j 列中输入交易后的一周。该工具将计算与上一步相同的统计数据,并为每次一对一交易提供一个等级。
- 继续前面的两个步骤,直到你整个赛季的所有交易都被输入。
- 在单元格 A9 和 A10 中查看您的总体交易等级和汇总。
案例研究:评估我的 2019 年交易
在我的 2019 年主场联赛中,我对 6 名球员进行了 3 次交易:
- 从第四周开始,T3,我用亚伦罗杰斯换来了马特·莱恩。
- 从第四周开始,我用乔·米克森换了亚伦·琼斯,用菲利普·林赛换了达米恩·威廉姆斯,用维京人 D/ST 换了爱国者 D/ST 。
- 从第五周开始,我用梅森·克罗斯比和 T21 换来了格雷格·祖莱因,用小奥德尔·贝克汉姆换来了阿马里·库珀。
交易#1:亚伦·罗杰斯换马特·莱恩
贸易等级:C
亚伦罗杰斯挣扎着走出大门,平均每场比赛得到 13.5 分。一些人质疑他是否秘密受伤,或者仅仅是他的比赛生涯结束了。与此同时,马特·莱恩的表现要好得多,场均 22.1 分。鉴于罗杰斯的季前赛排名和名字的价值,我提出用他来交换瑞安,我的对手接受了。
交易看起来很好,直到第 7 周,当瑞安受伤离开比赛,只有 3.6 分。雪上加霜的是,罗杰斯在第七周打出了今年最大的表现,以 43.8 分排名第一。
瑞安在第 8 周缺阵,从未真正恢复状态,在赛季的最后 6 周只有一次得分超过 20 分。罗杰斯有时在比赛中挣扎,但在第七周之后仍然打出了两场 25 分以上的比赛。
交易#2a:乔·米克森换阿伦·琼斯
贸易等级:A+
这将是我本赛季最好的交易。我甚至不想交易琼斯,但在赛季糟糕的开局后,我想摆脱米森。当我的对手提出琼斯时,我认为这是一笔好交易;琼斯在赛季的前几周表现得更好。
这种不平衡将持续到赛季的大部分时间,琼斯给出了五个(!!)25+ PPR 积分游戏,平均每周 21.1 分,而 Mixon 在第 14 周仅有 25+积分游戏,平均每周 14 分。
这笔交易将在整个赛季中给我带来每周 7.1 分的巨大优势。
交易#2b:菲利普林赛换达米恩威廉姆斯
贸易级:D
在同一个交易组,我也经历了本赛季最糟糕的交易。虽然林赛在 2019 年没有占据主导地位(只有一场 20+分的比赛,在第 5 周),但坏运气将在第 11 周因肋骨受伤而袭击威廉姆斯,他将仅以 2.3 分的成绩离开比赛,直到第 16 周才回来,此时我已经把他从我的阵容中删除了。
这个交易会让我每周损失 5 个点。
交易#2c:维京人 D/ST 换爱国者 D/ST
贸易等级:A
爱国者队的防守最终将成为历史上伟大的防守,尽管他们的前三周令人难以置信,但我想我的对手怀疑回归到均值,并愿意为维京人队在季前赛中排名很高的防守让路。
对我来说幸运的是,爱国者队将继续他们的统治地位,在第 4 周和第 8 周之间的未来 5 场比赛中的 4 场比赛中获得 20+分。他们在赛季的后半段确实回归到了平均水平,从第 9 周开始到赛季的剩余时间,他们与维京人的交易都很糟糕,但在赛季前半段的那些可怕的几周却是一笔很好的交易。
交易#3a:梅森·克罗斯比换格雷格·祖莱因
贸易等级:C+
作为我今年最后一次交易的一部分,在第五周,我交易了排名第一的踢球者。这笔交易没有做太多,因为格雷格腿最终得到 74 分,而克罗斯比在赛季剩余时间里得到 76 分,这基本上使这笔交易变得无用,尽管鉴于我在赛季剩余时间里的踢球方式,这没有多大关系。
交易#3b:小奥德尔·贝克汉姆换阿马里·库珀
贸易等级:A
我几乎没有提出这个交易,但我很高兴我提出了,我的对手接受了。OBJ 在赛季初的表现远远低于预期,但由于其名字的价值,我想我可以进行交易。库珀似乎是一个合理的风险回报选择,幸运的是,对我来说,这是一个正确的决定。尽管在赛季的后半段出现了一些严重的不一致,库珀在本赛季的剩余时间里继续为 PPR 贡献 159.1 分,为 OBJ 的 126.4 分,每周净得+3 分。
总体贸易评估
贸易等级:A-
总的来说,我做了一些很好的交易,因为我的交易,每周理论上赚了 8.5 个点。当然,我没有每周都和我交易的每一个球员比赛,但是这确实证实了我今年表现不错的感觉。
我的总交易等级 : A-
交易评估员限制
虽然交易评估器是一个很好的工具来判断你是否应该进行交易,但请记住以下几点:
- 交易评估员在赛季期间每周分析一名球员在交易后的表现,但你不太可能每周开始这名球员,甚至不太可能将这名球员留在你的名册上。也就是说,可以合理地假设,当你进行交易时,你是在赌你得到的球员比你在赛季剩余时间里交易走的球员平均水平更高。
- 交易评估员不考虑交易如何改善你的团队和/或你对手的团队。例如,如果你在某个位置很深,这可能比交易评估员建议的用那个位置的一个玩家换一个你弱的位置的玩家更有利。
- 交易评估员根据 FantasyPros 的 PPR、半 PPR 和标准评分格式的幻想领袖指标计算业绩。因此,该工具不包括您的联盟可能使用的非标准得分和/或奖励积分,但它仍然应该是对赛季过程中交易价值的相当准确的评估。
- 交易评估者计算每周获得/失去的点数,不考虑玩的游戏或周数,所以统计是准确的,但可能与考虑玩的游戏或周数的其他来源不同。
- 交易评估员对 K 列中的每笔交易进行一对一的比较,不考虑非偶数的交易(例如,用一名球员交换两名球员),但总体分数和评估仍然是准确的。请注意,非偶数交易通常用于释放席位或购买彩票,因此最终的计算可能不代表这些策略的无形收益。
- 交易评估工具是一个面向后的工具,用来回顾性地评估交易。对于季节内交易分析,可以考虑使用 FantasyPro 的免费或高级交易工具,或者考虑阅读 Reddit 上提到的方法,点击这里或点击这里。我可能会探索创建自己的季节性交易分析工具;关注我以获得新帖子的通知!
在你走之前
2019 梦幻足球赛季,你有哪些好的、坏的、难看的交易?下面评论让我知道!
如果你喜欢这篇文章,你可能也会喜欢我的其他关于体育和数据的文章——给我一个关注,当我发布更多的文章时会通知我!:
- 我如何战胜了一个 538 预测算法
- 我如何利用 200 名专家和 Reddit 的评论排名算法赢得我的 Office NFL Pick'em Pool
- 我如何正确预测比利亚诺瓦赢得 2018 年 NCAA 男篮锦标赛
传统的梯度推进
梯度助推器
梯度推进的数学入门
2001 年,杰罗姆·h·弗里德曼写了一篇开创性的论文——贪婪函数逼近:梯度推进机。他一点也不知道这将演变成一类方法,威胁到表格世界中沃伯特的没有免费的午餐定理。Gradient Boosting 及其同类产品(XGBoost 和 LightGBM)在分类和表格数据领域的回归问题上表现出色,已经征服了世界。
不尽然!(来源:我自己古怪的大脑)
让我们从理解弗里德曼提出的经典梯度推进方法开始。尽管这是一个数学难题,但也没那么难。只要有可能,我都试图对正在发生的事情提供直觉。
问题设置
假设有一个数据集 D 有 n 个样本。每个样本在向量 x 和实值目标 y 中具有 m 组特征。形式上,它被写成
现在,梯度推进算法是一种采用加法形式的集成方法。直觉告诉我们,我们试图估算的复杂函数可以由更小更简单的函数相加而成。
假设我们试图逼近的函数是
我们可以把这个函数分解为:
这是我们在选择加性集成模型时采用的假设,并且我们在讨论梯度增强时通常谈到的树集成可以写成如下:
其中 M 是基础学习器的数量,F 是回归树的空间。
损失函数
其中 l 为可微凸损失函数 f(x)。
因为我们在寻找 f(x)的加法函数形式,我们可以用以下等式代替 yᵢ
所以,损失函数将变成:
算法
- 通过最小化损失函数,用常数值初始化模型
- b₀是在第 0 次迭代时最小化损失函数的模型的预测
- 对于平方误差损失,它是所有训练样本的平均值
- 对于最小绝对偏差损失,它是所有训练样本的中间值
2.对于 m=1 至 M:
2.1 计算
- rᵢₘ 只不过是损失函数(在真实值和来自最后一次迭代的输出之间)的导数 w.r.t. F(x) 来自最后一次迭代
- 对于平方误差损失,这就是残差(观察值—预测值)
- 它也被称为伪残差,因为它的行为类似于残差,并且它是平方误差损失函数的残差
- 我们为所有的 n 个样本计算 rᵢₘ
2.2 使用基尼系数或熵(通常的方法)将回归树拟合到 rᵢₘ 值
- 对于 j = 1……Jₘ,树的每片叶子由 Rⱼₘ表示,其中 jₘ是在迭代 m 中创建的树的叶子数量
2.3 对于 j = 1 … Jₘ,计算
- bⱼₘ是基函数或最小平方系数。这可以方便地计算出任何叶中所有样本的平均误差损失和最小绝对偏差损失的中值
- ρₘ是叶重的比例因子。
- 由于回归树的不相交性质,可以忽略 b 上的内部求和。一个特殊的样本只会出现在其中一片叶子上。因此,等式简化为:
- 因此,对于每片叶子,Rⱼₘ,我们计算最佳值ρ,当加入到最后一次迭代的预测中时,最小化驻留在叶子中的样本的损失
- 对于已知的损失函数,如平方误差损失和最小绝对偏差损失,比例因子为 1。正因为如此,标准 GBM 实施忽略了比例因子。
- 对于一些损耗,如 Huber 损耗,使用线搜索找到最小损耗来估算ρ。
2.4 更新
- 现在,我们将最新的优化树添加到上一次迭代的结果中。
- η是收缩率或学习率
- 等式中的求和仅在特定样本出现在多个节点的极小概率情况下有用。否则只是优化后的回归树得分 b 。
正规化
在标准实现(Sci-kit Learn)中,没有实现目标函数中的正则化项。在那里实施的唯一正规化如下:
- 收缩正则化 —在加法公式中,每个新的弱学习器被“收缩”一个因子η。在某些实现中,这种收缩也被称为学习速率,因为它类似于神经网络中的学习速率。
- 行子采样 —集合中的每个候选树使用样本子集。这具有规则化的效果。
- 列子采样 —集合中的每个候选树使用一个特征子集。这也有一个正则化的效果,通常更有效。这也有助于并行化。
梯度推进和梯度下降
相似之处
我们知道梯度推进是一个加法模型,可以表示如下:
其中 F 是集成模型, f 是弱学习器, η 是学习率, X 是输入向量。
用 y^代替 f,我们得到熟悉的等式,
现在,由于 fₘ(X) 是通过最小化损失函数在每次迭代中获得的,损失函数是一阶和二阶梯度(导数)的函数,我们可以直观地将其视为指向最陡下降的方向向量。让我们称这个方向向量为 rₘ₋₁.下标是 m-1,因为向量已经在迭代的阶段 m-1 被训练。或者,直觉上的剩余
。所以等式现在变成了:
翻转标志,我们得到:
现在让我们看看标准的梯度下降方程:
我们可以清楚地看到相似之处。这个结果使我们能够使用任何可微损失函数。
差别
当我们使用梯度下降来训练神经网络时,它试图找到最佳参数(权重和偏差),,这使得损失函数最小化。这是利用损耗相对于参数的梯度来完成的。
但是在梯度提升中,梯度仅调整创建集成的方式,而不调整底层基本学习器的参数。
而在神经网络中,梯度直接给出了损失函数的方向向量,在 Boosting 中,我们只能从弱学习器中得到该方向向量的近似。因此,GBM 的损耗只可能单调减少。随着迭代的进行,损耗完全有可能跳跃一点。
履行
Sci-kit Learn 中的GradientBoostingClassifier和GradientBoostingRegressor是 python 生态系统中最早的实现之一。这是一个直截了当的实现,忠实于原始文档。我很清楚我们之前的讨论。它已经实现了多种损失函数,其中贪婪函数近似:Friedman 的梯度推进机【1】已经导出了算法。
回归损失
- ls’→最小二乘法
- lad’→最小绝对偏差
- “胡伯”→胡伯损失
- 分位数→分位数损失
分类损失
- “偏差”→逻辑回归损失
- “指数”→指数损失
参考
- 贪婪函数近似:一种梯度推进机器。安。统计学家。29 (2001 年),第 5 号,1189-1232。
原载于 2020 年 2 月 2 日 http://deep-and-shallow.com*。***
好的、坏的和丑陋的:监督的、非监督的和强化学习
机器学习三巨头的应用、实践和商业见解
图片来自 Unsplash
亲爱的读者你好!在你将要阅读的文章中,我将以一种非常简单的方式讲述机器学习中的三种主要学习类型:监督学习、非监督学习和强化学习。
由于有数以百万计的帖子讨论这三者之间的差异、它们可以在哪里使用以及所有典型的主题,我将尝试更进一步,以一种新颖的方式探索它们,从行业和商业的角度给出我的观点,并加入一点幽默,同时也巧妙地解释它们各自的内容。
我们走吧!
好处:监督学习
监督学习。自制图像。来自 FlatIcon 和 DLpng 的图标。
大家都喜欢的家伙。多亏了他,你的语音助手可以给你打电话,让优步在晚上来接你。他可以对你网站的访问者进行排名,这样你就可以很容易地看出谁更有可能购买你出售的漂亮太阳镜,并针对他们开展营销活动。他让你可以通过按 tab 键和自动补全句子来轻松回复邮件。他预测房价,以便真正的国有企业可以调整报价,获取最大利润。
监督学习是根据数据进行预测。从他能完成的令人敬畏的任务来看,他可能看起来非常聪明,然而,如果他能做到这一切,那是因为他学会了使用数据,这些数据有一条宝贵的,有时很难得到的信息:标签。
不,不是你衣服上的标签。这些标签更有价值。它们是告诉监督学习算法它们稍后将试图预测的确切变量的信息片段。
例如,如果我们希望监督学习来预测房价,我们需要使用这些房屋的特征(平方米、房间、楼层、浴室等)以及最重要的变量(我们希望稍后预测的变量:房价)来训练它。
我们伟大的监督学习被用来进行预测,比如:
- 使用我们上面提到的房屋特征来预测房价。
- 使用诸如时间戳、供应商、花费的钱和以前的交易等特征来预测交易是否是欺诈性的。
- 使用我们感兴趣的时间段的先前销售、趋势和特征来预测未来销售。
- 使用您之前键入的单词预测您将要键入的下一个单词。
- 还有很多很多…
然而,只有在训练阶段向监督学习提供与它稍后将尝试预测的信息相同的信息时,这些预测才会发生,在前面的四个示例中,这些信息是:房价、识别的欺诈性和非欺诈性交易、在前面的时间段中测量的销售注册表,以及在自动完成示例中的大文本单词集。
这种信息有时是昂贵的、不可用的或不可能获得的,这是监督学习的主要缺点。
目前,机器学习模型提供的大部分经济价值都来自于这个学习家族。Garnet states 高级主任分析师 Saniye Alabeyi:
“到 2022 年,监督学习仍将是企业 IT 领导者使用最多的 ML 类型”
之所以如此,是因为它在许多相关的商业场景中提供了价值,从欺诈检测到销售预测或库存优化。
然而,监督学习可能并不总是最适合某些问题。这就是它的坏弟弟出现的地方:无监督学习。
坏处:无人监督的学习
还记得监督学习的主要问题吗?昂贵而有价值的标签?嗯,无监督学习在某种程度上解决了这个问题。
他的主要技能是他可以对数据进行分段、分组和聚类而完全不需要这些烦人的标签。他知道如何根据顾客的购买行为对他们进行分组,根据他们的特征区分不同的房子,或者在一组数据中发现异常。他还能够降低我们数据的维度。
主要的好处是,它可以通过找到不同组共有的模式来对数据进行分组和分段,而不需要这些数据有特定的标签。
在我们的住房例子中,我们将在无监督的情况下学习我们的整个数据集(没有房价),它会告诉我们类似这样的事情:“嘿,这里有 5 组主要的房子”:
- 有花园和小水池的房子,可容纳 5 人以上,通常位于良好的社区。
- 小公寓,有一对夫妇的空间,一个美式厨房和一个小阳台。
- 宽阔的底层空间,非常小的房间看起来像商店。
- 超过 500 平方米的公寓,有许多房间,4 个以上的浴室,一个餐厅和一个烟囱。
- 没有电梯的楼房里一对夫妇的最后一层公寓:不要给爷爷奶奶买这个!
这看起来很酷也很简单,但并不像看起来那么简单。
无监督算法的输出或响应实际上不是一系列类似于前面的文本,而是具有其特征和 5 个不同组的数据。这取决于我们去观察不同的群体,并为他们提取出房屋的共同特征,这些特征使得我们能够创作出之前的文本。
我们必须自己分析结果,并从中提取有价值的见解。目前,与监督学习相比,无监督学习在工业和商业应用中的影响范围更小,但它仍然能够提供不错的商业价值,并且越来越受欢迎。
最后,我们有承诺,丑陋的表弟,已经取得了一些惊人的成就,但仍然被许多人视为害群之马:强化学习。
丑陋:强化学习
强化学习是一种不同的家伙。他在几乎没有以前数据的情况下工作,但仍然成功地创造了一些惊人的记录,比如在国际象棋和电子游戏中击败人类专家,或者教机器人如何在不同的环境中移动。
他通过使用惩罚-奖励系统、最终目标和政策学会了做这一切。知道了自己想要达到的目标,他就按照自己所学的政策去行动,并得到积极或消极的奖励。然后,根据该奖励更新策略。
以国际象棋为例。国际象棋强化学习模型从一个非常基本的策略开始,目标是让对手的国王进行对弈,并在对弈中保护自己的国王。这个大的最终目标,可以分成更小的更短期的目标,比如不要抓住他的棋子,尽可能多地抓住对手的棋子,或者控制棋盘的中心。
随着算法玩的次数越来越多,并因某些行为而受到惩罚和奖励,它将强化那些导致它获得奖励的行为(因此得名强化学习)。
在游戏领域,这类算法已经出类拔萃。让我们试着找出原因。
据说,要成为某个主题的专家,你必须投入大约 1000 个小时。擅长电子游戏、国际象棋或其他类似任务的人,除了有天生的能力外,还会为了达到精通而投入大量的时间。一局接一局的下棋,日复一日,必然会让你变得更好。
然而,你一天可以下的棋数是有限的。每天只有 24 小时,你只能以一定的速度玩:首先,你必须在玩的时候思考,然后你必须吃饭,睡觉,照顾好自己。
一个使用强化学习的软件,不用睡觉,不用吃饭,玩得多,比一个人快得多。通过这样做,并让强化学习系统与自己比赛,他们可以达到出色的表现,这使他们能够在许多游戏中击败最好的人类玩家。
虽然强化学习看起来很酷,但它仍然有有限的实际应用:因为我们之前讨论过,强化学习最好用在可以完全模拟的领域,比如游戏,这使得它在商业领域的影响力非常有限。然而,这是一个研究快速增长的学习家族,对于机器人或自动驾驶汽车等任务来说,这是非常有前途的。
结论
在这篇文章中,我们已经看到了机器学习家族的三个主要成员中的每一个都可以做得最好。这个家族中还有其他成员,比如半监督学习,或自我监督学习,但我们将在未来谈论这些。
监督学习、非监督学习和强化学习可以而且应该用来完成不同种类的任务。没有解决所有问题的灵丹妙药,不同性质的问题需要使用不同的工具来解决。
尽管它们在商业和工业用途上存在差异,但所有这三个分支都与构建高效和高价值的人工智能应用非常相关,并且它们越来越多地同时用于解决极其复杂的任务和应对新的挑战。
就是它!一如既往,我希望你 喜欢这个职位。关于机器学习的更多资源, 看看这个牛逼的博客 !
谷歌商业分析师访谈
图片来自 Unsplash
介绍
谷歌,美国科技巨头,拥有从操作系统(Android,Chrome OS)到移动和桌面应用(Google Chrome,Google Adwords 等)的互联网相关产品和服务。)以及从硬件(Google Nexus line)到类似 Google Cloud、Youtube TV 等服务。
该公司成立于 1998 年,总部位于加州山景城。谷歌的企业使命是“组织世界上的信息,并使其普遍可用和有用”,而这只有通过数据才有可能实现。
数据对谷歌很重要,这也是他们在全球拥有和运营 20 多个数据中心的原因。谷歌每天处理超过 35.5 亿个搜索查询,每天观看 50 亿个 Youtube 视频,是“世界上数据最丰富的公司”之一,也是数据分析师、数据科学家和业务分析师发展职业生涯的最佳场所。
谷歌的商业分析师角色
图片来自 Pixabay
谷歌的商业分析师分析数据,得出不同的见解,推动产品的商业决策,回答诸如“我们如何让产品更好?”以及“用户喜欢产品的什么?”。
谷歌拥有强大的数据文化,业务分析师利用这些数据来指导和推动业务决策。根据分析师被分配到的团队,角色可能略有不同,但在谷歌的总体角色范围从确定解决方案和新的业务见解,到广泛的数据分析和预测建模,再到需求管理和向相关利益相关方传达见解。
对亚马逊等类似公司的业务分析师职位感兴趣? 在面试查询上查看“亚马逊商业分析师面试”!
所需技能
谷歌商业分析师的角色需要专业领域和丰富的行业经验。因此,谷歌只雇用在定量分析、咨询或任何相关数据驱动的业务职位方面至少有 4 年(高级职位 7 年以上)行业经验的最合格的申请人。
其他基本资格包括:
- 数学、统计学、计算机科学、物理学、工程学、运筹学、经济学、工程学学士(MBA、硕士或博士优先)或同等的实践经验。
- 熟悉关系数据库,包括 SQL、MySQL、MapReduce 查询、数据库定义、模式设计和商业智能工具。
- 对脚本语言(如 PHP、Python、R、Perl、Java 等)有基本的了解。)以及 R、SAS、Matlab、Numpy/Pandas 等统计软件。
- 具有从各种结构化和非结构化数据源中提取、采样和可视化大型数据集,以及编写和维护提取、转换、加载(ETL)的经验。
- 具有与工程和业务团队跨职能合作的经验。
谷歌的商业分析师团队
“谷歌现在是,将来也永远是一家工程公司”,因此,数据驱动着谷歌的业务决策。数据科学是谷歌文化的核心,应用于公司的各个方面。
为了强调数据科学对谷歌的重要性,他们创建了一个“人员分析部门”,以协助公司的人力资源决策过程,包括根据对绩效评估数据的分析,决定经理或团队成员是否对团队的绩效产生影响。数据和合理的商业决策之间的差距是由商业分析师弥合的,他们深入挖掘谷歌的数据以提供合理的见解。
根据所分配的团队,谷歌业务分析师的角色可能包括:
- 谷歌云:这个团队帮助谷歌的客户,比如学校、政府机构、公司等。,通过使用谷歌的全球数据中心和软件资产来转变和发展他们的业务,使他们更具生产力、移动性和协作性。该团队中的业务分析师与高级销售领导合作,提供可操作的见解,提高决策能力,并通过数据驱动的方法加深对谷歌快速增长的业务的理解。
- YouTube Trust & Safety: 这个团队致力于让 YouTube 成为一个安全的地方,让世界各地的用户、观众和内容创作者能够创作和表达自己。担任此角色的业务分析师利用高级数据分析和预测模型来确定提高运营效率的关键影响因素,并与各种利益团队进行跨职能协作,以实施可扩展的解决方案,从而进一步优化运营指标。
- YouTube Insights,Impact &工具:该团队支持 YouTube 业务和运营团队以及其他内部合作伙伴,为严格的数据洞察提供数据基础设施、工具和分析支持,构建改变 YouTube 业务团队工作方式的解决方案和服务。分析师还与业务利益相关者合作,以了解他们的业务领域并构建业务需求,与数据基础设施连接以构建满足这些需求所需的管道、数据集和工作流。
- 业务系统集成:这个团队识别谷歌内部合作伙伴内部耗时的内部流程,然后构建可靠的解决方案,这些解决方案具有足够的可扩展性,能够与公司的规模和范围相适应。他们还从头开始设计和开发创新的推荐系统,以促进业务增长,将科学应用于销售,并提高销售团队的生产力。
- gTech 的用户和产品(gUP):gUP 团队构建了创新的解决方案,将谷歌的用户体验和参与度提升到一个全新的水平,支持不同产品、国家、文化、收入和身份的用户。guP 通过数据建模、指标开发、数据原型和使用统计技术对谷歌用户的复杂数据进行洞察,帮助用户充分利用谷歌。
- 销售和销售运营:该团队利用高级数据分析,持续管理关键数据指标的审核,以指导决策制定,并提高可扩展性和效率。分析师与销售、营销、财务、法律和运营团队进行跨职能协作,积极交付标准流程,促进和支持销售模型并简化服务。
- Google Pay: 该团队通过与银行/支付生态系统的各个方面(包括网络、发行商、网关和金融技术)合作和互动,为 Google 用户开发和实施安全便捷的支付系统。其他职责包括通过启动项目来收集和分析端到端流程,以开发全面的、以数据为基础的战略问题评估,从而推动谷歌所有货币化产品的增长。
面试过程
来自 Pixabay 的 Googleplex office 图片
谷歌商业分析师面试就像其他谷歌面试流程一样。首先是对招聘人员的在线电话面试,然后是对经理的技术筛选面试。技术面试后,招聘人员将安排现场面试,包括三到四轮一对一的面试,中间有午餐休息时间。
要更熟悉谷歌的面试流程,请在面试查询中阅读“谷歌数据科学家面试”!
初始屏幕
这是招聘人员或人力资源的第一步面试,主要是试探性的。在这个长达 45 分钟的面试中,招聘人员会问一些关于你相关的过去经历和项目的问题,尤其是那些涉及 SQL 的问题。招聘人员还将提供对公司、工作角色和公司工作文化的见解。
注意:在这次面试中,你应该用一个故事或经历来回答每个问题,用真实的例子和数据来证明你适合这个角色。
样题:
- 描述一个你做过的数据项目。
- 说说你自己吧。
- 描述一个你引以为豪的涉及统计学实践的项目。
技术屏幕
谷歌的商业分析师技术屏幕遵循与大多数谷歌技术面试几乎相同的协议。标准的基于案例的 SQL 问题被问到,候选人被要求在一个共享的谷歌文档上写 SQL 查询。
问题是标准化的,所以解决来自面试查询的 SQL 问题可以更好地为这次面试做准备。
要了解类似角色所提 SQL 问题类型的更多信息, 请查看关于面试查询的“产品分析师面试问答”文章!
现场面试
业务分析师现场访谈包括与经理、产品专家和业务分析师的三轮访谈,持续时间在 30 到 45 分钟之间。
谷歌面试候选人的评估基于四个一般属性:“一般认知能力、领导力、角色相关知识和谷歌度”。每一个面试问题都围绕着这四个基本属性,候选人应该相应地设计他们的答案。
谷歌商业分析师现场面试的时间表如下:
1.技术面试
这是对一位经理的采访,问题是基于案例的标准 SQL 问题。
2.产品感访谈
3.领导力/行为面试
4.谷歌面试
注意事项和提示
谷歌的业务分析师面试评估候选人利用数据分析来识别关键业务见解、提供解决方案以及帮助做出合理的战略性商业决策的能力。面试问题主要涵盖概念层面的数据科学知识、预测建模、指标和战略定义,以及与利益相关方交流见解的能力。重温你的描述性分析、统计和概率、时间序列、回归和预测模型的知识。
谷歌商业分析师面试问题:
- 在改进现有产品方面,你会给管理层什么建议?依据是什么?
- 你如何衡量一个用户的价值?
- 如果你是一家花店的老板,你会如何在网上锁定你的顾客?(谁?什么时候?在哪里?怎么会?)
- 您熟悉哪种类型的 SQL 连接?
- 你的 ETL 和 OLAP 经验是什么?
- 你用过哪些 DB 和可视化工具?
- 列出几个 SQL 分析函数。
- 给我一个你领导过的项目的例子。结果如何?你遇到了哪些困难?
- 如果你正在建立一个新的电子商务企业,你会关注什么?
- 你将如何建立一个专利系统?
- 说出一个你使用的谷歌产品,你会对它做什么改变?你会如何改进它?
- 用三句话向孩子描述 AdWords。
感谢阅读
- 如果你想为面试做准备,请查看 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
- 在面试查询博客上找到更多面试准备资源,如 谷歌数据分析师面试 和 亚马逊商业分析师面试 。
原载于 2020 年 8 月 1 日https://www.interviewquery.com。
谷歌数据分析师访谈
谷歌数据分析师面试问题
图片来自 Unsplash
介绍
谷歌公司。是一家美国科技巨头,提供基于行业的解决方案。作为一家以“一键访问世界信息”而自豪的公司,谷歌提供了一长串的产品和服务,包括庞大的硬件组合、互联网搜索引擎、网络电子邮件服务、软件解决方案、网络分析和人工智能。
正如他们在数据和数据基础设施方面的大量投资所证明的那样,谷歌明白数据对于了解客户需求和推动业务增长的重要性。
谷歌的数据分析师角色
图片来自 Pixabay
一般来说,数据分析师角色需要从各种数据源中检索、收集和组织数据,此外还要使用这些信息为业务决策提供有意义的见解。该角色根据收集的数据类型以及项目类型而有所不同。
在谷歌,数据分析师包括所有这些职责,甚至更多。该职位要求分析师不仅要了解数据分析的定量方面,还要了解业务影响以及每个指标如何影响谷歌的底线。因此,谷歌的分析师也将与营销团队密切合作,分析和报告谷歌产品和服务的绩效指数,与工程团队合作,根据谷歌的内部数据创建高性能的量化商业模型,并将相关的商业发现传达给各级管理层。
有兴趣在一家与谷歌规模相似的公司成为数据分析师吗? 在面试查询上查看“亚马逊数据分析师面试”!
所需技能
谷歌的数据分析师角色需要高水平的领域资格和丰富的行业经验,这为招聘设定了非常高的标准。他们只接受在数据分析或相关定量领域至少有三年行业经验的合格候选人。
其他相关标准包括:
- 计算机科学、数学、工程、经济、金融或同等实际经验的学士/硕士学位。
- 对时序分析、SQL、数据仓库、数据建模、ETL、仪表板自动化和报告有深刻的理解。
- 有使用 Python、R 和 Tableau 等数据可视化工具的经验。
- 具有脚本语言(Javascript、Python 等)的经验,对更高级的数据科学技术和方法(机器学习、R 等)有深刻的理解。
- 有将分析结果转化为业务建议和将业务问题转化为分析框架的经验。
谷歌的数据分析团队
图片来自 Unsplash
与商业分析师不同,谷歌的数据分析师通常更关注数据——特别是其收集、分析、可视化和呈现——为明智的商业决策提供可操作的见解和解决方案。
该职位的一般技能要求包括数学、统计、编程(SQL、Python 等)方面的背景知识,以及数据处理和分析方面的行业经验。
不管分配给哪个团队,角色都是分析的重点。具体职位取决于分配的团队和分配的项目类型。然而,谷歌的一般数据分析师角色范围从基本分析、建模、可视化和数据呈现,到轻型机器学习技术。
团队中特定角色的一些示例包括:
Waze: 分析师开发并自动化报告,为业务建议执行广泛的数据分析,并向多个层次的利益相关者提供有效的结果演示。他们还与谷歌的内部客户进行跨职能合作,以了解他们的业务需求,并制定端到端的分析,包括数据收集、分析、现有的可交付成果和演示。
谷歌云:该团队的数据分析师致力于利用谷歌的大数据,通过对复杂数据的全面扫描,推动对业务增长基准和趋势的可扩展分析。他们还为“区域和职能销售团队”提供来自这些数据的可扩展的洞察力和仪表板。
人员分析:该团队的分析师帮助推动数据治理,以确保不同数据库之间的数据完整性。他们致力于数据建模、开发和定义指标、执行原型制作,并通过高级商业智能技术生成商业见解。他们还管理数据可视化,并以清晰而有说服力的方式为多层次的利益相关者提供见解。
信任和安全:角色包括执行大规模分析和建模以确定改进机会,构建仪表板报告和高价值的自动化商业智能解决方案,以及开发关键绩效指标以监控增长。
EMEA 销售分析团队:该团队的数据分析师利用谷歌的大数据推动大规模分析以促进业务增长,执行复杂的分析以转化为可操作的见解,并与销售管理层合作构建可扩展的数据集、系统、仪表盘和分析,从而系统地支持销售组织。
你在寻找另一个数据分析师的职位吗?这个职位在许多不同的团队工作,而且是跨职能的? 阅读《脸书数据分析师访谈!
面试过程
图片来自 Unsplash
谷歌数据分析师面试流程遵循谷歌的标准技术面试程序。它始于与人力资源或招聘经理的第一次电话面试。然后,候选人进行现场面试,包括三轮一对一的面试,中间有午休时间。
像所有的谷歌招聘程序一样,面试将由高质量的问题组成,这些问题是专门为该职位和著名的谷歌四大特征量身定制的。
为了更好地熟悉谷歌的面试流程,我们建议回顾关于面试查询的“谷歌商业分析师面试”文章!
初始电话
谷歌数据分析师面试的第一个电话与谷歌所有标准的人力资源面试相似。在这里,面试官会问一些探索性的问题,旨在更多地了解你、你的兴趣、你过去与该职位相关的项目经验,以及你与团队中的工作角色相关的技能。面试官还会告诉你谷歌,谷歌的文化,你申请的团队,以及工作角色在预期能力方面的范围。
现场面试
谷歌的数据分析师现场面试由三到四次面试组成,每次持续约 45 分钟,面试人员包括招聘经理、团队经理和开发人员(以确定你的 SQL 和数据分析技能)。在这几轮面试之间有一个午休时间,应聘者可以与一位现任谷歌员工进行非正式交谈。
一般来说,谷歌数据分析师现场访谈是技术(标准 SQL 和统计)、产品感觉(关键指标定义)和文化契合度/行为评估的混合。
注意事项和提示
谷歌在所有的招聘面试中都使用标准化的问题。对于数据分析师的角色,候选人可能会遇到关于统计(尤其是中心极限定理、贝叶斯定理、条件和联合概率,以及指数、几何和二项式分布等基本分布)实验设计,以及大量 SQL (基本 SQL 查询、优先级、连接、聚合、过滤等)和 Python 问题。
记得复习你的统计和概率概念知识,包括回归、假设检验、最大似然估计和抽样。
对于 SQL 和 Python 部分,请访问访谈查询并练习大量 Google data analyst SQL 和 Python 问题。
谷歌数据分析师面试问题
- 你如何比较两个搜索引擎的性能?
- 你最喜欢的谷歌产品是什么?
- 你在以前的单位工作怎么样?
- 说说你自己吧。
- 如何设计一个遵循所有社区准则的在线社交网络平台?
- 描述一个非常困难的项目,告诉我你是如何解决的。
- 描述您使用过的任何数据清理技术。
感谢阅读
- 想要更多数据分析师面试资源?退房 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
- 在面试查询博客上找到更多数据分析师面试指南,如 亚马逊数据分析师面试 和 脸书数据分析师面试 。
原载于 2020 年 8 月 25 日 https://www.interviewquery.com。
谷歌数据科学家访谈
图片来自 Unsplash
谷歌是一家美国科技巨头,专注于互联网相关服务和产品,包括在线广告、搜索引擎、云计算、软件和硬件。该公司成立于 1998 年,总部设在加州山景城[1]。
自 2002 年成立以来,谷歌发展迅速,开发了广泛的产品,收购了许多公司,通过其在搜索领域的主导地位进入了主流文化。现在,谷歌已经扩展到大量的产品和服务,如办公套件应用程序、电子邮件客户端、云计算、视频聊天、android 等等。
鉴于谷歌提供的产品和服务过多,用户数量惊人,有人可能会问谷歌到底处理了多少数据?根据 2019 年的统计数据,谷歌平均每秒处理超过 40,000 次搜索查询,相当于全球每天超过 35 亿次搜索,每年 1.2 万亿次搜索[2]。对于谷歌来说,这提供了帮助其客户增长和扩展的无限机会,而对于数据科学家来说,这提供了一个用于分析和解释的信息宝库,以帮助谷歌及其客户识别机会,并塑造谷歌的业务和技术战略。
如果你对面试中的问题感兴趣,可以查看一下 谷歌数据科学面试问题 !
数据科学在谷歌的角色
谷歌的数据科学家在团队、产品和功能的广泛层面上工作,从增强广告效果到网络基础设施优化。
谷歌数据科学的角色主要是一个专注于指标和实验的分析角色。这与机器学习和产品分析师角色截然不同,后者也存在于谷歌,分别更侧重于工程和产品方面。在转向数据科学以吸引更多人才之前,谷歌的数据科学职位曾被称为定量分析师。
其他相关资格包括:
- 统计学、计算机科学、生物信息学、计算生物学、工程学、物理学、应用数学、经济学、运筹学或相关定量学科的硕士或博士学位,或同等的实践经验。
- 在统计软件方面有丰富的经验(如 MATLAB、Panda、Colab、S-Plus、SAS 等)。)、Python、R、C++和/或 Java 等编程语言,以及数据库语言(如 SQL)和管理系统方面的高级经验。
- 拥有大数据和云平台部署大规模数据科学解决方案的经验。
- 数据科学方面的经验,侧重于业务分析、设计和构建统计模型、可视化、机器学习、数字属性、预测、优化和预测分析
- 高级统计概念的知识和在大型数据集上机器学习的应用经验。
- 展示问题框架、问题解决、项目管理和人员管理技能。
所需技能
谷歌通常只雇佣在分析或相关领域有至少两到三年行业经验的有经验的人。谷歌确实为数据科学领域的实习和大学毕业生提供了计划,特别是为新的博士毕业生提供了更高级的职位。
谷歌的数据科学团队
从营销部门到谷歌研究的研究团队,数据科学家利用高级分析、机器学习理论以及统计概念和方法来确定产品开发和改善客户体验的机会。
Google land 的数据科学家最常见的团队是:
- 工程和设计:应用高级分析并反复构建分析管道,以提供大规模洞察,同时与各种团队进行跨职能协作,以提供业务影响建议。
- gTech 专业服务:利用技术实施、优化和关键解决方案,帮助客户实现其广告业务目标。
- 谷歌地图核心指标:开发核心指标和实验实践,定义如何衡量和测试谷歌地图的参与度、采用度和保留度。
- 地理:在大型地理数据集上应用高级分析工具,构建分析管道并建立原型,研究和开发分析、预测和优化方法,并在各个级别提出业务建议。
- 运营和支持:与工程师合作,分析、解释数据,开发衡量结果的指标,并将新工具集成到客户支持和运营中。
- 广告:通过利用统计研究和机器学习概念,建立和扩展谷歌的广告能力。
- 搜索广告:设计和分析复杂的实验,了解变化对系统的影响,并提供改进建议。与分析师和软件工程师(SWE)就核心算法进行合作,以改善客户体验。
- 业务战略:通过与跨职能团队合作,了解他们的业务需求,提供有意义的战略建议。
谷歌面试流程
谷歌的面试流程始于招聘人员在你提交申请后,首先通过电子邮件向你发送一份预筛选问卷。然后你会接到招聘人员的电话,讨论你的兴趣和经历。面试结束后,招聘人员将安排一次与数据科学家或招聘经理的电话面试,时间通常为 45 至 60 分钟。完成这一部分后,将安排一次现场面试,包括五轮单独的面试。
初始屏幕
最初的屏幕通常是与招聘人员进行 30 分钟的电话面试,他们描述了工作职位、职责,然后是谷歌不同团队的例子,然后询问你是否愿意追求数据科学职位。在这次面试中,你可以和招聘人员交谈,招聘人员会更多地了解你的技能。
招聘人员主要是想弄清楚你的职业目标,看看这些目标如何与谷歌的文化和价值观以及他们能把你安排到的不同团队保持一致。
- 描述一个过去基于数据科学的项目。
- 你遇到了什么问题?如果数据不同,您会使用什么方法?
- 统计问题(计算统计)或因果推理问题
- 共享代码编辑器上的编码问题
技术屏幕
谷歌的数据科学家技术筛选是通过与数据科学家的视频会议(Google Hangouts)完成的。这次采访围绕着实验设计、统计学和一个概率编码问题。它还涉及更多的技术讨论,集中在过去的研究和工作经验,深入到你所面临的问题和你解决这些问题的技术方法。试着在面试提问上练习中等水平的问题。
谷歌现场采访
现场面试是谷歌数据科学家面试流程的最后一个阶段。它包括与数据科学家的 5 轮一对一访谈,涵盖计算统计学、概率、产品解释、指标和实验、建模和行为问题。每次面试持续大约 45 分钟,中间有一次午餐休息。
点击此处,阅读更多关于谷歌数据科学问题的示例。
感谢阅读!
参考
[1]谷歌维基百科页面[2]谷歌搜索统计
原载于 2020 年 4 月 21 日 https://www.interviewquery.com。
谷歌产品分析师访谈
图片来自 Pixabay
介绍
2008 年,谷歌推出了云解决方案“谷歌云平台”(GCP),这是一套云计算服务,提供出色的基础设施即服务(IaaS)解决方案,帮助企业扩大规模。
如今,GCP 几乎应用于每个行业,包括制造、零售、金融、医疗保健和生命科学、游戏、教育、电信和政府。谷歌云平台还提供“ML 模型开发、搜索、自然语言、语音、翻译、视觉和视频智能”的大数据(大查询大规模数据仓库、数据流、云数据实验室、云数据实验室、数据工作室等)和 AI/机器学习解决方案。
多年来,谷歌花费了大量资金开发分析和基于云的架构工具,以帮助企业发展。数据和数据分析是公司核心愿景不可或缺的一部分,因此,谷歌为新加入的数据科学家、数据分析师、数据工程师和业务分析师提供了前所未有的工作规模。
谷歌的产品分析师角色
图片来自 Pixabay
一般来说,产品分析师是利用市场研究、数据分析和商业智能技能成功将新产品推向市场的人。这个角色在谷歌是专门的。谷歌的产品分析师利用数据分析寻找不同的见解推动业务影响。他们为“谷歌的内部客户和整个组织的合作伙伴提供定量分析、市场专业知识和战略视角”。
谷歌的产品分析师通常会监督产品的整个过程,包括设计阶段、发布前和发布后。围绕产品旅程(从设计到市场)有很多问题,产品分析师帮助回答真正的问题,比如“我们试图让什么发生?”、“怎么才能定量证明?”,以及“我们对此有信心吗?”。
产品分析师还与内部团队进行跨职能合作,在产品方向、实验和分析方面指导他们,并与开发人员合作,帮助他们在项目中取得成功。
所需技能
像谷歌的每个职位一样,产品分析师的角色需要企业级的分析技能和至少三年的定量分析行业经验。
其他相关技能包括:
- 统计学、计算机科学、数学、工程、数据科学或其他定量领域的学士/硕士学位。
- 丰富的统计软件包经验,包括 R,SAS,Stata,MATLAB 等。
- 在编写 SQL 查询、提取大数据和设计 ETL 流程方面有丰富的经验。
- 具有开发模型、方法/途径(包括时间序列预测、计量经济学、因果推断和分类方法)的经验,以及将分析结果转化为业务建议的能力。
- 三年与工程师和产品经理合作的经验,尤其是在提供以产品为中心的见解方面。
谷歌的产品分析师团队
图片来自 Unsplash
虽然产品分析师的角色有时与业务分析师的角色重叠,但产品分析师严重依赖于定量分析,而不是专注于产品设计的业务影响。他们在团队中工作,并与其他人进行跨职能合作,以实现业务目标。
作为一家大公司,有许多团队围绕许多不同的产品和功能进行产品开发和设计,谷歌提供了一个非常全球化的独特规模,即使你最微小的努力也会产生重大影响。根据所分配的团队,具体角色可能会有所不同。以下是谷歌的一些产品分析师团队及其具体角色:
- 数据科学团队:这个团队的产品分析师为业务建议进行分析,开发和自动化报告,并迭代地构建和原型化仪表板,以提供大规模的洞察力。他们还向多层次的利益相关者提交调查结果,并与利益相关者进行跨职能合作,以制定和完成全周期分析。
- 开发人员控制台:角色包括与开发人员控制台中的工程和产品管理团队合作,通过端到端分析了解他们的业务需求,包括收集和分析数据以及正在进行的可交付成果,并向多个领导层提供有效的演示和建议。该职位还包括开发和自动化报告,原型仪表板,以提供可操作的大规模见解。
- Youtube 数据科学团队:角色包括通过严格的实验和分析来指导团队的产品方向,并与工程团队密切合作,以实现成功的产品开发之旅。
面试过程
图片来自 Unsplash
产品分析师面试流程遵循谷歌的标准招聘流程。面试过程始于招聘人员通过电子邮件联系你,评估你的兴趣。下一步是完成一个关于你过去的项目和与角色相关的技能的十个问题的调查。在此之后,将通过电话或 Google Hangouts 安排与产品分析师的初次面谈。最后一个阶段是现场采访,包括同一个团队的产品分析师的四轮采访。
初始屏幕
谷歌产品分析师的初始屏幕是探索性的。这是一次与产品分析师(PA)的 45 分钟电话或 Google Hangouts 访谈;问题的范围可以从过去的项目经验型问题到简单的技术型问题。
样题: 你会如何向一个非技术人员解释一个 95%的置信区间?
现场面试
这是谷歌产品分析师面试步骤的最后一个阶段。这个面试由与产品分析师(团队内部或团队外部)的四轮连续面试以及中间的午餐休息组成。
标准的谷歌产品分析师现场访谈问题可以包括建模、指标定义、SQL 和标准统计问题。问题的范围也可以从假设到基于案例和现实生活的场景。在这些面试中还有行为、产品意识和文化契合问题。你可能会遇到这样的问题:“你会怎么做?”,以及“告诉我一次你..”
注意:在面试中详细讲述你的解决方案是很重要的,使用你过去参与的项目来解释你的答案和选择也是很有帮助的。
注意事项和提示
谷歌是一家基于产品的科技公司,谷歌的产品分析师预计会利用数据和高级分析方法来推动产品增长。谷歌产品分析师面试旨在评估候选人履行工作职责的能力,以推动谷歌产品的成功。
谷歌在所有面试过程中使用专门针对职位定制的标准化问题。 解决谷歌产品分析师关于面试查询的 SQL 和 Python 问题 对你面试成功大有帮助。
请记住,谷歌产品分析师面试还将测试统计和数据分析概念的组合,以及产品感知和商业分析概念。复习基本的统计和概率、预测模型、指标定义和 SQL(包括等级、连接等)知识。
同样值得注意的是,不管你申请的是什么职位和部门,谷歌对所有面试流程都有四个主要标准。第一个是“一般认知能力,第二个是“角色相关知识,第三个是“领导技能,最后一个是你的“粘性”。
谷歌采用严格的面试后招聘流程,包括团队匹配和整合报价。这是由一个高素质的、不带偏见的谷歌团队“招聘委员会”来完成的,他们是这些角色/工作的专家,以前从未见过任何申请人。在招聘委员会做出裁决后,他们会向高级管理层提交一份建议书,供最终审核,然后才会发出聘用通知。
谷歌产品分析师面试问题
- 给定一个假设的情况,你将如何创建一个模型来预测这个指标?
- 你会如何处理阶级不平衡等。?你将如何在商业环境中使用这个模型?
- 如何使用 rank()来获得具有最高值的 id?
- 对一列排序还是对该列的多个部分同时排序更快?
- 你会如何测试一个新产品?
- 你会如何向一位老奶奶解释 AdSense?
查看 SQL、产品指标、a/b 测试等方面的更多产品分析师面试问题!
感谢阅读
- 如果你有兴趣提高你的数据科学技能,请查看 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
原载于 2020 年 8 月 21 日 https://www.interviewquery.com**的 。
谷歌机器学习实践的 7 个步骤:结构化数据的 TensorFlow 示例
一步一步的教程,把 7 个步骤付诸实践,并从头开始建立一个机器学习模型。
谷歌机器学习实践的 7 个步骤
网上有很多很棒的机器学习教程。然而,它们中的大多数集中在机器学习的特定部分,例如,探索数据、建立模型、训练和评估。他们中很少有人介绍建立机器学习模型的完整步骤。
最受欢迎的概述机器学习过程步骤的文章之一是国玉峰的机器学习的 7 个步骤,由谷歌云平台推出。
https://www.youtube.com/watch?v=nKW8Ndu7Mjw
郭列出了如下 7 个步骤:
- 收集数据
- 准备数据(和探索数据)
- 选择模型
- 培养
- 估价
- 超参数调谐
- 预测(和保存模型)
在本文中,我们将把上述步骤付诸实践,并从头构建一个机器学习模型。
定义问题和环境设置
在我们进入细节之前,我们需要为任何机器学习项目做的第一件事是为我们的机器学习模型定义问题。
在本教程中,我们将处理来自 Kaggle 的泰坦尼克号数据集。这是一个非常著名的数据集,通常是学生学习机器的第一步。
假设我们被要求创建一个系统来预测泰坦尼克号上的幸存者。
环境设置
为了运行本教程,您需要安装
TensorFlow 2,TensorBoard 2,numpy,pandas,matplotlib,seaborn
它们都可以通过 PyPI 直接安装,我强烈建议创建一个新的虚拟环境。最好避免使用 base(root) ,因为这可能会破坏您的系统。
您可以查看以下文章,了解如何创建 Python 虚拟环境:
[## 使用“virtualenv”创建虚拟环境,并将其添加到 Jupyter 笔记本中
你是机器学习工程师,正在使用 Python 和 Jupyter Notebook 吗?在这篇文章中,你会看到为什么…
towardsdatascience.com](/create-virtual-environment-using-virtualenv-and-add-it-to-jupyter-notebook-6e1bf4e03415) [## 使用“conda”创建虚拟环境,并将其添加到 Jupyter 笔记本中
你正在使用 anaconda 和使用 Jupyter Notebook 和 Python 吗?在这篇文章中,你将看到如何创建虚拟的…
medium.com](https://medium.com/analytics-vidhya/create-virtual-environment-using-conda-and-add-it-to-jupyter-notebook-d319a81dfd1)
源代码
所有的说明都在这篇文章里,我已经把笔记本开源了,源代码请查看下面的 Github 项目
Google 的 7 步机器学习实践,在 Github 中是免费的。更多教程可从 Github Repo 获得。
1.收集数据
一旦我们定义了我们的问题,就到了机器学习的第一步:收集数据。这一步最重要,因为您收集的数据的质量和数量将直接决定您的预测模型有多好。
在本教程中,数据将来自 Kaggle。让我们导入一些库并加载数据来开始吧
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
让我们将 train.csv 和 test.csv 文件加载到 pandas DataFrame 中。
df_train_raw = pd.**read_csv**('data/titanic/train.csv')
df_test_raw = pd.**read_csv**('data/titanic/test.csv')df_train_raw.head()
泰坦尼克号数据预览
来自 Kaggle 的数据字典
2.准备数据
先说一些探索性的数据分析 (EDA)。我们将从检查缺失值开始。
2.1 缺失值
我们可以使用 seaborn 创建一个简单的热图来查看哪里缺少值
sns.heatmap(**df_train_raw.isnull()**,
yticklabels=False,
cbar=False,
cmap='viridis')
缺失值的 seaborn 热图输出
小屋有缺失值。 年龄 缺失的比例很可能小到足以用某种形式的插补进行合理替换。查看 舱 列,看起来那些数据缺少太多的值,无法做一些有用的事情。我们以后很可能会去掉 舱 ,或者改成另一个类似“已知舱:1 或 0”的特性。上船失踪的比例很小,这个教程还是留着吧。**
2.2 可视化更多的数据
让我们继续将更多的数据可视化
**sns.countplot(**x='Survived'**, data=df_train_raw, palette='RdBu_r')**
幸存的情节
**sns.countplot(**x='Survived',**
**hue='Sex',**
data=df_train_raw,
palette='RdBu_r')**
**sns.countplot(**x='Survived',**
**hue='Pclass',**
data=df_train_raw,
palette='rainbow')**
**sns.distplot(**df_train_raw['Age'].dropna(),**
**kde=True,**
color='darkred',
bins=30)**
**sns.countplot(x='SibSp',data=df_train_raw)**
**df_train_raw['Fare'].hist(color='green',
bins=40,
figsize=(8,4))**
2.3 数据清理
我们想用某种形式的插补来代替缺失的年龄。一种方法是填写所有乘客的平均年龄。然而,我们可以更聪明地处理这个问题,按乘客级别检查平均年龄。例如:
**sns.boxplot(**x='Pclass',**
**y='Age',**
data=df_train_raw,
palette='winter')**
我们可以看到,在较高的阶层中,较富裕的乘客往往年龄较大,这是有道理的。我们将根据年龄的 Pclass 使用这些平均年龄值进行估算。
**def impute_age(cols):
Age = cols[0]
Pclass = cols[1]
if pd.isnull(Age):
**if Pclass == 1:**
return 37
**elif Pclass == 2:**
return 29
**else:**
return 24
else:
return Age**
现在让我们应用这个函数并检查它是否工作
**# Make a copy for test only
train_copy = df_train_raw.copy()
train_copy['Age'] = train_copy[['Age','Pclass']]
**.apply(impute_age, axis=1)**# check that heat map again
sns.heatmap(**train_copy.isnull(),**
yticklabels=False,
cbar=False,
cmap='viridis')**
太好了!impute_age()
作品。让我们继续转换分类特征并删除 小屋 列。
2.4 转换分类特征
我们需要将分类特征转换成一次性编码。否则,我们的机器学习算法将无法直接将这些特征作为输入。
让我们用info()
检查列数据类型
**df_train_raw.info()<class 'pandas.core.frame.DataFrame'>
RangeIndex: 712 entries, 0 to 711
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 712 non-null int64
1 Survived 712 non-null int64
2 Pclass 712 non-null int64
3 Name 712 non-null **object**
4 Sex 712 non-null **object**
5 Age 566 non-null float64
6 SibSp 712 non-null int64
7 Parch 712 non-null int64
8 Ticket 712 non-null **object**
9 Fare 712 non-null float64
10 Cabin 168 non-null **object**
11 Embarked 710 non-null **object**
dtypes: float64(2), int64(5), **object(5)**
memory usage: 66.9+ KB**
有 5 列的数据类型为 object。其中 姓名 、 车票 、 客舱 不需要。另外,我们注意到 Pclass 根据我们上面看到的数据字典是一个分类数据。让我们制作一个函数preprocessing()
来保留这些有用的数字特征,并将 Pclass , Sex, 和apolled转换成一键编码。
让我们应用该函数,并为构建我们的机器学习模型创建训练和测试数据集。
**x_train = **preprocessing(df_train_raw)**
y_train = **df_train_raw['Survived'].values**x_test = **preprocessing(df_test_raw)**
y_test = **df_test_raw['Survived'].values**print("x_train.shape =", x_train.shape )
print("x_test.shape =", x_test.shape )**
通过上面的运行,您应该得到如下所示的训练和测试数据集的形状:
**x_train.shape = (712, 13)
x_test.shape = (179, 13)**
让我们看看x_train.head()
的数据
我们的数据经过preprocessing()
太好了!我们的数据已经可以建模了
3.选择型号
在 TensorFlow 2.0 中有三种方法实现神经网络架构:
- ****顺序模型:是使用 Keras 最简单的方法。
- 功能 API :针对更复杂的模型。
- ****模型子类:完全可定制,使您能够实现自己定制的模型前向传递。
为简单起见,我们用最简单的方法:带Sequential()
的时序模型。让我们继续建立一个具有 3 个密集层的神经网络。每层中的所有参数都已硬编码,如下所示:
**import tensorflow as tf
from tensorflow.keras import models, layerstf.keras.backend.clear_session()model = **models.Sequential()**
model.add(**layers.Dense(10, activation='relu', input_shape=(13,)**))
model.add(**layers.Dense(20, activation='relu' )**)
model.add(**layers.Dense(1, activation='sigmoid')**)model.summary()**
下面是model.summary()
的输出
model.summary()
的输出
4.培养
首先,让我们使用model.compile()
来配置我们的模型
- 使用优化器随机梯度下降(缩写为
sgd
) - 使用二元交叉熵损失函数(
binary_crossentropy
)用于我们的二元分类 - 为简单起见,使用
'accuracy'
作为我们在训练和测试期间评估模型的评估指标
对于训练,有三种方法可以训练 Keras 模型:
- 将
model.fit()
用于固定历元数的模型 - 使用
model.train_on_batch()
只进行一次单批次训练。 - 创建自定义训练循环。
在本教程中,让我们用最简单的方法model.fit()
继续。
**# Convert DataFrame into np array
x_train = np.asarray(x_train)
y_train = np.asarray(y_train)# Get around with KMP duplicate issue
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'# Use binary cross entropy loss function for binary classification
model.compile(**optimizer='sgd'**,
**loss='binary_crossentropy'**,
**metrics=['accuracy']**)history = **model.fit**(x_train,y_train,
batch_size= 64,
epochs= 30,
validation_split=0.2
)**
如果一切顺利,我们应该得到如下输出。
**Train on 569 samples, validate on 143 samples
Epoch 1/30
569/569 [==============================] - 1s 2ms/sample - loss: 0.5568 - accuracy: 0.7206 - val_loss: 0.6139 - val_accuracy: 0.6713
Epoch 2/30
569/569 [==============================] - 0s 91us/sample - loss: 0.5639 - accuracy: 0.7047 - val_loss: 0.6212 - val_accuracy: 0.6643
Epoch 3/30
569/569 [==============================] - 0s 112us/sample - loss: 0.5705 - accuracy: 0.6907 - val_loss: 0.6379 - val_accuracy: 0.6573
Epoch 4/30
569/569 [==============================] - 0s 109us/sample - loss: 0.5538 - accuracy: 0.7065 - val_loss: 0.6212 - val_accuracy: 0.6713
......
......
Epoch 30/30
569/569 [==============================] - 0s 102us/sample - loss: 0.5597 - accuracy: 0.7065 - val_loss: 0.6056 - val_accuracy: 0.7203**
5.模型评估
一旦训练完成,就该看看模型是否适合模型评估了。模型评估通常包括
- 绘制损失和准确性指标的进度
- 用从未用于训练的数据来测试我们的模型。这就是我们之前搁置的测试数据集
df_test
发挥作用的地方。
让我们创建一个函数plot_metric()
来绘制指标。
**%matplotlib inline
%config InlineBackend.figure_format = 'svg'def plot_metric(history, metric):
train_metrics = history.history[metric]
val_metrics = history.history['val_'+metric]
epochs = range(1, len(train_metrics) + 1)
plt.plot(epochs, train_metrics, 'bo--')
plt.plot(epochs, val_metrics, 'ro-')
plt.title('Training and validation '+ metric)
plt.xlabel("Epochs")
plt.ylabel(metric)
plt.legend(["train_"+metric, 'val_'+metric])
plt.show()**
通过运行plot_metric(history, 'loss')
来绘制损失进度。
损失图
通过运行plot_metric(history, 'accuracy')
绘制精度进度。
根据测试数据集测试我们的模型
**# Convert DataFrame into np array
x_test = np.asarray(x_test)
y_test = np.asarray(y_test)**model.evaluate(x = x_test,y = y_test)****
我们应该得到一个具有损耗和精度的输出,如下所示:
**179/1 [====] - 0s 43us/sample - **loss: 0.5910** - **accuracy: 0.6760**[0.5850795357586951, 0.67597765]**
6.超参数调谐
酷,我们已经对我们的第一个机器学习模型进行了评估。现在是时候看看我们是否能以任何方式进一步改善这种情况了。我们可以通过转动超参数来做到这一点。在我们进行第一次培训时,我们隐含地假设了一些参数,现在是时候回去测试这些假设并尝试其他值了。
对于本教程,我们只关注模型中以下三个超参数的实验:
- 第一密集层中的单元数
- 第二密集层中的单元数
- 【计算机】优化程序
6.1 实验设置
首先,从加载 TensorBoard 笔记本扩展开始
**# Load the TensorBoard notebook extension
**%load_ext tensorboard****
然后,添加一条语句来清除上一次运行的所有日志。如果你不清理它们,它会把你的仪表板搞乱。
**# Clear any logs from previous runs
**!rm -rf ./logs/****
导入 TensorBoard HParams 插件:
****from tensorboard.plugins.hparams import api as hp****
列出要尝试的值,并将实验配置记录到 TensorBoard。
5
、10
、20
为第一层单元数10
、20
、40
为第二层单元数- 优化器的
adam
和sgd
超参数调谐的实验设置
6.2 调整 TensorFlow 运行以记录超参数和指标
我们的模型很简单:3 个密集层。代码看起来很熟悉,尽管超参数不再是硬编码的。相反,超参数在hyparams
字典中提供,并在整个训练功能中使用:
调整 tensorflow 运行以记录超参数和指标
对于每次运行,记录一份hparams
摘要,包括超参数和最终精度
**def run(run_dir, hparams):
with tf.summary.create_file_writer(run_dir).as_default():
hp.hparams(hparams) # record the values used in this trial
accuracy = **train_test_model(hparams)**
tf.summary.scalar(METRIC_ACCURACY, accuracy, step=1)**
6.3 开始运行并记录它们
我们现在可以尝试多个实验,用一套不同的超短波来训练每个实验。为了简单起见,让我们使用一个 网格搜索 来尝试离散参数的所有组合,并且只尝试实值参数的上下界。
**session_num = 0for num_units_one in HP_NUM_UNITS_ONE.domain.values:
for num_units_two in HP_NUM_UNITS_TWO.domain.values:
for optimizer in HP_OPTIMIZER.domain.values:
**hparams = {
HP_NUM_UNITS_ONE: num_units_one,
HP_NUM_UNITS_TWO: num_units_two,
HP_OPTIMIZER: optimizer,
}**
run_name = "run-%d" % session_num
print('>> Starting trial: %s' % run_name)
print({h.name: hparams[h] for h in hparams})
**run('logs/hparam_tuning/' + run_name, hparams)**
session_num += 1**
如果一切顺利,我们应该得到如下输出:
6.4 在 TensorBoard 的 HParams 插件中可视化结果
一旦运行完成,打开你的终端和cd
进入项目目录。然后,现在可以通过在终端中运行以下命令来打开 HParams 仪表板
**admin@Mac:~/Code/WorkSpace/machine-learning/tf2
⇒ **tensorboard --logdir logs/hparam_tuning**Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_allTensorBoard 2.0.0 at [http://localhost:6006/](http://localhost:6006/) (Press CTRL+C to quit)**
在浏览器中打开仪表板,直接进入 HPARAMS - > 平行坐标视图
通过查看平行坐标视图,点击并拖动精度轴,可以选择精度最高的运行。
表现最好的那个
当这些运行通过不同的超参数时,我们可以得出结论
**5**
单位在第一层、**10**
单位在第二层,- 和同
**'adam'**
优化器
在这些实验中表现最好。
7.预测(和保存模型)
现在,我们已经得到了精确度最好的机器学习模型。最后一步是使用这个模型进行预测或推断。这是所有这些工作的重点,也是机器学习的价值得以实现的地方。我们终于可以用我们的模型来预测乘客是否幸存。
使用模型进行预测
****model.predict**(x_test[0:10])array([[0.56895125],
[0.37735564],
[0.5005745 ],
[0.60003537],
[0.5371451 ],
[0.36402294],
[0.49169463],
[0.49049523],
[0.4984674 ],
[0.1470165 ]], dtype=float32)**
使用模型为输入样本生成分类预测。
****model.predict_classes**(x_test[0:10])array([[1],
[0],
[1],
[1],
[1],
[0],
[0],
[0],
[0],
[0]], dtype=int32)**
最后,我们可以将整个模型保存到一个 HDF5 文件中:
**model.**save**('data/keras_model.h5')**
并加载通过save()
保存的模型
**model = **models.load_model**('data/keras_model.h5')# Predict class
model.predict_classes(x_test[0:10])**
就这样,接下来呢?
本文是一个快速教程,主要是向大家展示如何将 Google 的机器学习 7 步付诸实践。我试图避免许多机器学习概念,并尽可能使本教程简单。
请在我的 Github 上查看 笔记本获取源代码。
在实际应用中,需要考虑的因素要多得多。例如,选择评估度量、特征缩放、选择有意义的特征、分割数据集、处理过拟合和欠拟合等。此外,本教程仅针对结构化数据,现实世界中的数据并不总是结构化数据,所有像图像、音频或文本这样的东西都是非结构化数据。
下一次,我们将构建一个 Keras 机器学习模型,它有三种不同的方式:顺序、函数和模型子类化。
如果你对机器学习的实用方面感兴趣,请继续关注。
GPT-3 不会让你失业(Github 的自动驾驶也不会)
除非你是全职的自回归语言模型
马特·诺布尔在 Unsplash 上的照片
你有点(或者很)喜欢科技。你从 Twitter、Reddit、Medium、Slack 中的#random 等网站获取新闻。
在过去的两个月里,你的订阅越来越多与 GPT 3 相关的帖子。你开始感到好奇,并继续研究,看看新的 OpenAI 自回归语言模型 API 到底是怎么回事。
也许你有足够的好奇心去了解事情的本质,比如阅读报纸并尝试尽早接触美联社 I,以弄脏你的手。
同时,您会发现一些项目正在使用 GPT-3 来理解用简单英语编写的请求,并生成一些有意义的输出。
浅灰色文本为用户输入,黑色文本由 GPT-3 生成—来源: GPT-3 论文。
如果你问我,我会说,这无疑是非常令人印象深刻和非常酷的。
GPT-3 生成布局、 Python 代码或创意内容的能力让大多数人感到震惊。也应该如此。看到一个机器学习模型能够理解请求并以正确的方式采取行动是非常了不起的。
考虑到这一点,让我们进入主题。
GPT-3 不会让你失业。
嗯,至少在不久的将来是这样。我不敢给出时间表,因为我坚信以下几点:
“很难做出预测,尤其是对未来的预测”——丹麦谚语
当然,我指的不是那些朝九晚五工作的人,而是自回归语言模型 API。我为你感到难过。
Sam Altman,OpenAI 的首席执行官
当创新打破人们执行的任务时,关于技术对社会影响的讨论总是变得激烈起来。当这样的创新是看似扰乱了众所周知的生产类似魔术的东西的劳动力的产出,就像一般的软件工程师一样,事情肯定比以前更加激烈。
作为技术人员,我们有一些复杂的感觉,这影响了我们的判断。
我担心 GPT-3 是一个真正突破性的成就,同时,它不会伤害我们的概念没有被经常提起。
- 是的,它可以生成代码。 正因为如此,我不会建议你转行或者解雇你的工程团队。
- 是的,也许生成的代码不像你用 5 年、10 年或 20 年以上的经验编写的代码那样花哨,欺骗编译器或框架达到最大性能。
“深度学习是一种超能力”——吴恩达。
我们需要先学会如何利用来发挥我们的技术,然后再做其他事情。
使用 GPT-3 和其他 ML 模型来帮助我们建立、保持和运行更好的技术的工具是独一无二的。他们可以帮助我们,作为专业人员,达到一个新的水平的生产力,质量和整体专业知识。
在我们小小的科技泡沫中,我们可以想到 GPT-3 带来的新的可能性。
我们可以从头开始重新想象和构建我们日常使用的工具——用于编码、设计、管理工作等。—成为更好的专业人士。
例如,我们可以用它来构建更好的 ide。聪明的想法。一些公司已经开始了这方面的工作,并开发出了很棒的产品。然而,我觉得还有很多需要改进的地方,甚至是重新想象 IDE 应该是什么样子。
我们应该在这些工具上努力,让我们的手艺更好,而不是完全取代我们。
由于我们编写的代码,各个领域的大部分专业人员不得不在这些年里彻底改造自己。突然间,我们自己不能做我们提倡了几十年的事情了?
该是我们学会如何使用我们新的超级力量的时候了。
如果你喜欢这个故事,可以考虑关注我的 推特 。
梯度向量
它是什么,我们如何计算它?
向量演算
在向量微积分中,一个主要的课题是引入向量和三维空间,作为通常在笛卡尔坐标系中研究的二维空间的延伸。矢量有两个主要属性:方向和大小。在二维空间中,我们可以把从原点延伸的向量想象成一个箭头(显示方向和大小)。
来自 matplotlib 的 2d 矢量图
直观地说,这可以扩展到三维空间,我们可以看到一个箭头漂浮在空间中(再次展示方向和大小)。
来自 JCCC 的 3d 矢量图
不太直观的是,向量的概念可以扩展到任何维数,而理解和分析只能通过代数来完成。需要注意的是,在任何情况下,矢量都没有特定的位置。这意味着如果两个向量具有相同的方向和大小,它们就是相同的向量。现在我们对向量有了基本的了解,让我们来谈谈梯度向量。
梯度向量
不考虑维数,梯度向量是包含函数所有一阶偏导数的向量。
让我们计算以下函数的梯度
我们正在计算梯度向量的函数
该梯度被表示为∇…
函数 f 的梯度向量
部分微分后…
代入偏导数后函数 f 的梯度向量
这是函数 f(x,y) 的梯度向量。这些都很好,但有什么意义呢?梯度向量能做什么,它到底意味着什么?
梯度上升:最大化
任何功能的梯度指向最大增加的方向。这真是不可思议。假设您有一个为公司利润建模的函数。显然,你的目标是利润最大化。一种方法是计算梯度向量并选取一些随机输入-现在,您可以通过计算梯度并将这些值添加到之前的输入中来迭代更新您的输入,直到达到最大值。
梯度下降:最小化
我们知道梯度向量指向最大增长的方向。相反,负梯度矢量指向下降最大的方向。梯度下降的主要目的是最小化误差或成本,这在机器学习中最为普遍。假设您有一个为公司建模成本的函数。显然,你的目标是最小化成本。与利润最大化类似,您可以计算一些随机输入的梯度向量,并通过从以前的输入中减去梯度向量中的值来迭代更新输入,直到达到最小值。
梯度上升/下降的问题
使用这种优化方法最值得注意的问题是相对极值的存在。相对极值指的是函数上的点,这些点相对于下图所示的函数周围的点是最大值或最小值。
照片来自保罗的在线笔记
传统的微积分优化方法遇到了同样的问题,并通过比较所有相对极值处的函数输出来确定真正的全局最大值/最小值,从而解决了这个问题。就梯度上升/下降而言,可以对更新输入的迭代过程进行各种不同的修改,以避免(或通过)有助于优化工作的相对极值。梯度上升/下降的主要类型有…
- 随机梯度上升/下降
- 批量梯度上升/下降
- 小批量梯度上升/下降
图形顿悟
Graphbits:一堆 5 分钟的文章:都是关于图形的
也许我正在慢慢陷入疯狂。或者也许我已经是偏执狂了。但是我好像没办法。这就是为什么我要把它写下来。不过要小心。你也许会跟我一起赶时髦。
几天前开始的。我开始阅读图表,现在,它是我随处可见的。不,不是那些严肃的图表和柱状图。这不是我说的图表。让我告诉你我在说什么
有一个看起来悲伤的定义:
你得到了两个点(或者他们称之为“节点”)。给它们起具体的名字。将这两个节点连接起来,这条线就叫做关系(如果你愿意,也可以给它起个名字)。使用多个节点和关系进行扩展。你得到了一个图表!简单。朴素。简单。
我看到的图片是一个图形结构
看起来像蜘蛛网。只有一个。我读得越多,我就越被吸引,也越纠结。下面是我一天的情况。让我告诉你昨天的事。
我醒来后觉得很有冒险精神,决定坐火车去上班。我冲到车站,迅速看了一眼摊开在墙上的火车地图,寻找我必须走的路线。当我盯着地图时,我只能看到一张图表。对我来说,每个地点都变成了一个节点,连接任何两个地点的铁路线看起来就像一条被指定了距离的边。
摆脱了那些想法,我上了火车。因为我有将近一个小时的时间可以消磨,所以我采用了最常见的分散注意力的方法。查看社交媒体。
LinkedIn 告诉我,Frank Fakename 可能是连接请求的下一个潜在候选人。显然,这个人和我的朋友在同一家公司工作(他已经是我的朋友了),也和我的角色相似……该死!那是一张图表!
这让我开始思考。因此,这可能不仅仅是 LinkedIn 的问题,而是所有社交媒体的问题。因为嘿!社交媒体是关于人的。人们喜欢网络。网络看起来完全像图表。
来源:https://blog . soton . AC . uk/skillted/files/2015/04/social-network-grid . jpg
这就是我在整个火车旅途中一直想知道的。
当我去上班的时候,我仍然全神贯注于这些想法。我机械地重启我的笔记本电脑,打开了一个网页浏览器会话。按照我每天阅读最新新闻的习惯,我点击了链接,把我带到了新闻网站。我的思绪游离并停留在网站地址的“www”部分。万维网。网络…网络…..哦,不…图表。
我突然意识到,我的“社交媒体是一个图表”只是一个更大计划中微不足道的一部分。整个网络就是一张图表!每个网页慢慢演变成一个节点,页面上的链接就是关系。我脑海中形成的画面大概是这样的
够了。!让我们开始工作吧,我想。我决定更有条理一点,开始在各种“思维导图”中列出“要做”的行动项目。中途,我后退了一下,看了看我的作品。
继续..为什么它又看起来像一张图表?事情正在失去控制。
午餐时,当我看着前面的女士准备我的沙拉时,这个想法一直萦绕在我的脑海里。她把我选的所有配料放在一起,然后加入我想要的调料。所以也许这不仅仅是我的待办事项清单。但是我实际上可以将任何类型的工作流程显示为一个图表,每个步骤表示为一个节点,连接到下一个步骤。这被证明是我大脑的养料。
来源:https://pbs.twimg.com/media/DkeAmEhUcAAYs5V.jpg:large
到下午三点左右,我的眼睛开始下垂,唯一的解决办法是喝杯咖啡和读一篇好的博客。作为一名机器学习爱好者,我决定阅读有关神经网络的书籍。我想,也许一个新的话题会对我有好处。男孩,我错了。我打开的第一篇文章在最上面有一张图片。
来源:https://cdn-images-1 . medium . com/max/800/1 * fbxs 211 LJ 7 zweqzramedq . png
现在你知道我要说什么了。我真心希望你也看到了。(线索:看起来像图形)。那么这是否意味着深度学习和人工智能领域正在使用只是复杂的图形结构的算法(神经网络)?嗯,不再需要咖啡了。
最后,我决定到此为止。让我们回家和“网飞”在一起。有一部新的惊悚/犯罪电影,看起来不错。一切都很好,直到这个特别的场景出现。侦探试图把导致犯罪的事件和相关人员联系起来。他把所有的东西都放在一个图钉板上。还有…
我现在真的没必要再告诉你了。照片就在那里盯着你。我要告诉你的是,我在那里停止了电影,关上了我的笔记本电脑,简单地接受了图形是我们生活中不可避免的一部分的事实,因为我滑入了一个满足的睡眠…..
结尾注释:
等等我!这只是一个虚构的故事,我希望通过它来阐述这样一个事实,即图形数据结构非常适合建模许多形式的真实世界数据。无论是代表业务工作流程还是决策,它们都是完美的选择。图形构成了社交和互动网络、运输网络、分子生物学等等的基础。它们用于提供产品推荐、估计旅行时间、发现新药等。
在之后的系列博客中,我从基础开始深入探讨这个话题。我真的希望你能很快有一个“图形顿悟”,如果你已经有了;欢迎加入俱乐部!
如果你想继续阅读,请到我的下一个博客这里
图形模型
Graphbits:一堆关于图形的 5 分钟文章
之前的博客都是关于图形的应用。是时候深入探索了!先说图数据结构本身。我发誓在这个问题上尽量不使用术语。
什么是图表?
所以让我再重申一次。图形数据结构有两个方面:
- 节点
- 这种关系
把节点想象成任何真实世界的实体。从最简单的意义上来说,你能看到的东西或物理上存在的东西。它可以是一个人,一个地方,一个汉堡,一部电影…我想你明白了。
关系只是节点之间的某种交互。更抽象一点。就像两个人之间的友谊。或者两个城市之间的高速公路。简单吧?
接下来,让我们看看图表的数据模型。任何图形数据库都有两种主要类型的数据模型:
属性图模型
从前,有两个节点。每个都有一个名字和一些特征。他们通过一种关系联系在一起。亲爱的朋友们,这是一个属性图模型。
简而言之,节点和关系都有一个通用标签。此外,节点和关系可以具有标识它们的某些属性。
请注意,属性图模型中的每个关系一次只能连接两个节点。
Neo4j 是遵循属性图模型的图形数据库中的一个流行选择
超图模型
超图模型把它带到了下一个层次。与关系只能连接两个节点的属性图模型不同,Hypergraph 模型允许多个节点通过同一关系连接。看起来你可以在这里有一个第三轮节点!
来源:https://i.stack.imgur.com/RImaq.png
Grakn.ai 是一个有效实现超图模型的图形数据库的例子。(接下来会有更多相关内容)
有趣的是,这两个模型是同构的。这仅仅意味着您可以将 Hypergraph 转换为属性图,反之亦然。(通常,可以通过添加更多节点将 hypergraph 转换为属性图,反之适用于属性图到 hypergraph 的转换)。
仅此而已!
在接下来的文章中,我们将借助简单的例子来更深入地研究这些模型的实现。敬请期待!
链接到以前关于图形应用的博客:
Graphbits:一堆 5 分钟的文章:都是关于图形的
towardsdatascience.com](/the-graph-epiphany-4050e96ddcf6)
链接到下一组图表博客:
Grakn 模式
towardsdatascience.com](/a-day-described-in-grakn-part-i-46bb7e3cd82a)