TowardsDataScience 博客中文翻译 2016~2018(一百七十二)
是数据科学荒还是领导力荒?
我有时觉得自己好像在电影《土拨鼠日》里。除了公司如何运行他们的数据科学实践。一家公司雇佣了一些能够很好地编码的聪明人,他们把钥匙交给这个人去“构建未来”几个月或几年后,工作变得一团糟,因为没有在最后期限前完成而被指指点点。发生了什么事?该公司没有考虑到他们需要一个数据领导者,而不仅仅是数据科学家。
如今,似乎每家公司都有一名数据科学家。甚至一些位于美国中西部玉米地里的公司也有一名数据科学家。然而,这些公司中的大多数都未能让这些数据科学家为公司生产出任何实质性的东西。有些人相信数据科学家会神奇地发现如何在没有任何真正的指导或领导的情况下运行一个高效的业务团队。然后他们就像我知道的一家公司一样,已经做了 4 年的定价模型,但仍然没有任何截止日期。为什么?没有真正的领导者管理团队。
数据科学或数据领导力
我经常和招聘人员交谈,他们要么希望我加入他们客户的团队,要么让我帮他们找人。我很乐意交谈。当谈到高层时,我们谈论的角色通常会有“他们想要一个亲力亲为的领导者”的说法。我不得不经常问,这意味着什么?如果我得到的回答是“会编码的人”,我会礼貌地告诉他们,他们想要的不是一个领导者,而是一个高级数据科学家,这和数据领导者是不一样的。
如果你希望有人编码,那很好,但是说实话,你需要一个编码员。一个领导不做太多编码。不是因为这个人不能,而是因为有很多其他的事情需要去做,而且通常领导是唯一能做的人。谁在管理专利战略、法律战略、P&L、环境要求、人员配备要求、业务案例一致性、公司战略一致性、路线图(真正的路线图,不是 sprint 计划,有些人称之为路线图)。通常,员工中没有人对数据有足够的了解来承担这些任务,但随着时间的推移,它们变得越来越重要。那么,为什么你会希望有人整天编码,这样你就可以有麻烦,因为你没有做专利搜索,以确保你没有侵犯现有的专利?或者也许你真的希望在这个月违反 GDPR?或者你想要一个编码器,这样就没有人真正关注你为什么要在第一时间编码?这里差别很大。一个许多公司艰难地发现的问题。
成立一个数据实践而非数据科学团队
大多数公司仍在努力理解数据。他们可能理解软件、硬件、实物,但这通常不会转化为理解数据和数据语言。为什么相关性如此重要?什么是过滤气泡?关于数据的异托邦怎么样?大多数高管无法回答这些问题,大多数数据科学家也无法在不查找的情况下回答这些问题。更少有人能真正将这些概念用于推动业务增长。除此之外,数据实践是关于改变一个组织的文化,这需要数学和编码之外的技能,很多数学和编码之外的技能。如果您的团队没有实现目标,那是因为您没有数据领导者。
数据领导者就是要建立正确的数据文化。一种侧重于业务对象,通过使用数据来改善客户体验(b2B 和 B2C)。这涉及到的不仅仅是编码,事实上我认为编码是最简单也是最不重要的问题。你将面临法律和合规问题。确保团队在开发算法时不违反专利、客户隐私或任何法规是这项工作非常重要的一部分。如果你只是编码,你就做不到这一点。数据领导者需要能够审查代码和模型,但需要花费大量时间审查专利和监管问题,而大多数数据科学家花在这方面的时间为零。
数据领导者需要关注数据流和性能。我认识很多数据科学家,他们认为自己了解这一部分,但实际上这是一种工程实践。数据领导者需要了解这一点,并每天围绕购买还是构建做出决策。关注平台的性能以及它在所构建的数据产品生命周期中的可行性。我有很多数据科学家告诉我,他们可以做这项工作,但转身承认他们已经超出了自己的能力范围。事实上,有一次,有人想要我们的 AWS,并告诉我每月只需 1600 美元。结果账单是那个的 15 倍,因为他不知道如何询问实际工作的成本。幸运的是,我们在事情发生前阻止了它。
数据领导者需要创造一种学习文化。同样,许多数据科学家说他们知道如何做到这一点,对于他们自己,我同意,他们确实知道。但是你不能创造一个受过教育的团队。你需要一种学习者的文化。建立一个允许学习和不断提高个人技能的结构是数据领导者的一个关键角色。
数据领导者需要建立适合团队发展的流程。随着团队的成长和承担更多的责任,他们必须从一个刚起步的团队成长为一个更成熟的团队。如何市场响应他们的产品也在变化,一个好的数据领导者了解这个生命周期,并为团队的各个阶段建立可靠的流程。我见过许多数据科学家大失败,因为他们不明白他们需要引导他们的团队通过的成长阶段。
数据领导者明白数据团队不仅仅是工程师和数据科学家。我经常看到这种情况,一个团队建立了一个推荐者,但他们的团队中没有任何来自 UX 的人。他们不会使用人物角色,即使他们使用了,他们也不会真正欣赏他们。大错特错。我的基础数据团队总是有 UX,而我的更复杂的已建立的团队有社会科学技能、商业技能、法律技能、离线团队成员技能等……为什么?数据通常是人类活动的一种表现形式。没有对人类的理解,你就不会真正了解你的数据。
数据领导者对于数据科学实践的成功非常重要,然而大多数公司都没有雇佣数据领导者,只是雇佣会编码的数据科学家。去年,我看到几项研究表明,80–90%的数据项目无法满足业务目标。这是为什么呢?在我看来,他们没有一个数据领导者来管理团队。如果你想在数据实践中取得成功,就找一个数据领导者。差别是巨大的。这里有一个例子:
我为一个客户工作,他花了两年时间开发一个数据产品。他们有很多数据科学家,很多都有博士学位。然而,该项目没有交付,花费了 1000 万美元,不知道该项目何时才能完成。我被叫去了。我立刻以流水作业的方式组织了团队。我们根据团队的能力设定期限。审查代码是为了确保它不会违反任何专利或法律。测试环境被简化,以便在不牺牲必要测试的情况下,尽可能快地从生命验证阶段进入生产阶段。并且建立了财务预测和业务目标。
六个月后,该产品上市了。需要进行少量的返工,今年将再损失 1000 万美元的成本,现在的目标是今年实现 1.55 亿美元的收入,投资回报率良好。这就是一个优秀的数据领导者为公司所做的事情。
想了解更多,随时联系我。
好吃吗?我喜欢好的东西
RecSys Week 2:一种基于项目相似度的推荐系统预测方法。
正如我们可以在推荐系统上下文中搜索相似的用户、评级一样,也可以找到相似的项目。与基于用户的协同过滤(CF)中的推理相同,相似的用户会喜欢相似的项目,用户会喜欢与他们已经喜欢的项目相似的项目。
有不同的函数来计算项目之间的相似性,一些函数完全集中在项目上,而另一些函数考虑了用户的评级行为。在我们得到每对项目之间的相似性之后,可以通过加权求和、线性回归或其他方法来预测新的评级。
由于项目在数量和动态性上通常远不如用户,这种方法的一个好处是可以预先计算相似性。新项目的添加不影响之前的计算,之前的计算可以定期更新,以纳入收集的新评级信息。
这无疑是对基于用户的 CF 所需要的改进,但仍然是项目总数的二次量。在这种方法中,我们还可以仅跟踪具有最高相似性的项目,这些项目在生成预测时具有最重的权重,并且减少丢弃其他项目所使用的大小。
但是我们能减少多少预先计算的数据呢?在作者做的实验中(见结尾),使用所有相似性的 96%的准确性是通过仅使用 1.9%的项目实现的,这是在准确性略有损失的情况下在记忆方面的巨大进步。
那表演呢?与传统的基于用户的 CF 相比,基于项目的方法的误差总是低于 200 个邻居(这是记录的结果)。所以这种方法在各方面看起来都更好。
Source: www.huffingtonpost.kr/2016/01/18/…
但是我认为这个实验有一个很大的缺陷,它只是一个电影数据库。我认为,尽管有些人可能更喜欢动作片或喜剧片,但电影的好坏总有一个相似之处。所以,通常情况下,好电影会有好的收视率,而坏电影,收视率很差。由此,我认为由该推荐系统完成的工作非常方便,因为它具有该方法假设的特征。
我并不认为这种方法不能使用,它确实在实验中使用了一个大而真实的数据集,但我认为所提出的算法,只考虑项目排名,不会在更异构的任务中工作。例如,预测 Amazon.com 的产品评级,有大量的类别和大量不同的购物者。
最后,我想重申,论文中提出的算法当然有用例,但除了从评级中寻找其他考虑项目特征的相似性函数,可能有更广泛的用途,并且仍然具有作者发现并建立在他们提出的方法上的好处。
感谢你的阅读,我将感激地接受任何更正、评论或相关阅读。这篇文章是对 Badrul Sarwar,George Karypis,Joseph Konstan 和 John Riedl 撰写的论文 ***基于项目的协同过滤推荐算法(2001)***的评论。这是智利天主教大学推荐系统课程(IIC3633)的每周帖子。
现在是数据民主化的时候了吗?
获得竞争优势的方法之一是让数据变得越来越容易访问。这与数据分析师和科学家是唯一有能力理解公司数据的人相反。归根结底,这些专家并不便宜。
正如所料,数据民主化有利也有弊。这些将在下面讨论。
反对数据民主化的论点
很长一段时间以来,许多人对数据管理持保守观点,认为数据的严格分析应该留给数字分析师和数据科学家。严格的治理也将适用于数据的收集、解释和传播。通过这种方式,负责处理数据的数据科学小组将承担责任。
人们有各种各样的理由相信获取信息应该受到限制。例如,他们可能认为这将确保更严格地控制潜在的风险数据,如档案、机密记录和给公司带来明显声誉或竞争优势的信息。此外,由于数据专家使用先进的建模技术和多个数据集来分析问题,因此人们认为限制可以确保在提出建议时进行更严格的审查。
数据民主化允许访问多个数据源和数据消费群体,从而呈现多个版本的“真相”,这是一个可能导致信心丧失和建议减少的因素。公司内不同团队的个人访问数据也会导致昂贵的冗余功能。隐私问题也出现了,因为较少的治理可能会导致侵犯隐私以及监管控制。
数据民主化的论据
然而,在最近的过去,公司已经意识到对数据采取协作和整体方法的重要性。这意味着,组织中的每个人都应该对数据有足够的了解,以便做出深思熟虑的决策。此外,数据民主化的支持者认为,责任在于数据的用户。
数据管理和访问方面的进步(如数据民主化)提高了用户管理、转换和解释数据的能力。那些有权访问所述数据的人也有机会添加他们的输入,为不同的分析和商业智能平台提供消费和分析。此外,向不同工作团队中的个人分发信息促进了创业精神,对中小企业尤其有利,因为它们比大企业更灵活,受管制更少。
民主化还可以帮助中小企业中精通数据的利益相关者减少对集中式分析团队的依赖。通过访问数据,中小型企业还可以发现他们可能错过的潜在盈利业务机会。此外,通过利用数据有效地消除猜测,他们可以降低获取客户的成本,并做出基于事实的投资决策。
有助于推动数据民主化的创新
为了让非专业人士更好地理解数据,技术上已经有了许多进步。这些创新也有助于提高大数据的可管理性。这里,我们讨论的是云存储、数据联合软件和数据可视化软件。
云存储是帮助适应数据民主化的工具之一。有了一个可在线访问的中心位置,所有授权用户都可以使用存储在那里的数据做出明智的决策。尽管存在与云服务相关的安全风险,但可以通过加密协议将其降至最低。
数据联邦软件也极大地促进了数据民主化。该软件有助于将不同来源的数据组合起来,并将其存储在虚拟数据库中。然后,这些数据可以用于商业智能分析和其他分析。不是在虚拟数据库中创建数据,而是有关于数据及其位置的元数据。
不了解技术细节的个人可以使用数据可视化软件来检索和操作数据。它将文本和数字数据转换成表格、图形和可视化图表。例如,企业可以使用该软件来展示访问者的活动。
总结
组织内的决策直接受到手头数据的影响。多年来,让业务分析师、营销人员和高管以及其他员工通过数据专家已经成为一种常态。事实上,有些人认为什么都不应该改变,而其他人认为是时候提高数据的可访问性了。在所有推动数据民主化的软件解决方案中,后者极有可能胜出。
LDA 是降维技术还是分类器算法?
介绍
在我的上一篇帖子中,我开始了一个关于维数减少的讨论,这是在执行分类任务(meigarom.github.io/blog/pca.ht…)之前使用主成分分析(PCA)对结果的真正影响。在这篇文章中,我将继续讨论这个主题,但现在,谈论线性判别分析(LDA)算法。LDA 被作者定义为一种降维技术,然而一些来源解释说 LDA 实际上作为线性分类器工作。
为了更好地理解这些定义,我在这里提出了一个简单的测试:我将对同一个数据集应用 LDA 两次,每次使用不同角色的 LDA。通过这两种方法来衡量准确性,我们可以清楚地了解哪种角色最适合 LDA。因此,让我们开始吧。
关于 LDA 的一点点
LDA 背后的想法很简单。从数学上来说,我们需要找到一个新的特征空间来投影数据,以最大化类的可分性。显然,第一步是找到一种方法来测量每个新的候选特征空间的分离能力。每个类的投影平均值之间的距离可以是度量之一,但是只有这个距离不是一个很好的度量,因为它没有考虑数据的分布。1988 年,一位名叫罗纳德·费雪的统计学家提出了以下解决方案:最大化代表均值之间差异的函数,通过对类内变异性的测量进行标准化。Fisher 的建议基本上是最大化每个类的平均值之间的距离,并最小化类本身内的分布。因此,我们提出了两个衡量标准:阶级内部和阶级之间。然而,只有当我们假设数据集具有正态分布时,这种公式才是可能的。这种假设可能会带来一个缺点,因为如果数据的分布显著非高斯,LDA 可能不会表现得很好。在接下来的帖子中,我将深入研究 LDA 算法的代码,展示它的实现,在这里我关心的是找到最初问题的答案。LDA 是线性分类器还是降维技术?。
实验的细节
本文中提出的实验包括对公共数据集的分类任务。基本上,该数据集包含来自 3 种不同类型车辆的 846 个观察值和 18 个特征。这些特征对应于这些车辆形状的物理度量,例如紧密度、圆形度和半径。可以在这里查看数据集:https://archive . ics . UCI . edu/ml/datasets/Statlog+(Vehicle+Silhouettes。原始数据集带来了对 4 种车辆的观察,为了能够绘制新的特征空间,我将只从 3 个类别中选取示例。
LDA 作为一种分类算法
正如我在开始时提到的,我将对同一个数据集应用 LDA 两次,每次使用不同的角色。在第一种方法中,LDA 将作为分类器工作,之后它将降低数据集的维度,神经网络将执行分类任务,之后将比较两种方法的结果。
在 R 语言中,LDA 作为分类器非常简单,如下所示:
**library**( dplyr )*# Load dataset*
data_raw = read.csv( "../dataset/vehicle.csv", stringsAsFactor = FALSE )data = data_raw %>% filter( class == "bus" | class == "opel" | class == "van" )*# Scale dataset*
maxs = apply( data[,1:18], 2, max )
mins = apply( data[,1:18], 2, min )
dataset = as.data.frame( scale( data[,1:18], center = mins, scale = maxs - mins ) )
dataset = cbind( dataset, "class" = data$class )*# Split dataset*
index = sample( 1:nrow( dataset ), round( nrow( dataset )*0.6 ), replace = FALSE )
X_train = dataset[ index, ]
test = dataset[ -index, ]
首先,我加载了数据集,只过滤了 bus、open 和 van 类中的行。后来,我使用标准技术缩放数据集,然后我将数据集分为训练集和测试集,分别包含 60%和 40%的示例。准备好数据集后,我们可以对训练数据集应用 LDA。
*# Model Discriminant Analysis*
**library**( MASS )
model = lda( class ~ ., data = X_train )*# Ploting LDA Model*
projected_data = as.matrix( X_train[, 1:18] ) %*% model$scaling
plot( projected_data, col = X_train[,19], pch = 19 )
LDA 使用 MASS R 库建模,它带来了一对模型参数,如组的先验概率、组均值和线性判别系数。这里最重要的结果是系数,它们是描述数据将被投影到的新特征空间的值。LDA 将维数从原始特征数减少到 C-1 个特征,其中 C 是类别数。在这种情况下,我们有 3 个类,因此新的特征空间将只有 2 个特征。上图是仅有两个要素的新要素空间的绘图,我们可以看到数据的新位置,三个类之间有一些点重叠,但总的来说,数据集是相当可分的。在训练阶段之后,我们需要测量所获得的模型的准确性。
*# Model Testing*
X_test = test[, !( names( test ) %in% c( "class" ) ) ]
model.results = predict( model, X_test )*# Results - Confusion Matrix*
**library**( caret )
t = table( model.results$class, test$class )
print( confusionMatrix( t ) )## Confusion Matrix and Statistics
##
##
## bus opel van
## bus 87 5 0
## opel 2 75 0
## van 0 5 78
##
## Overall Statistics
##
## Accuracy : 0.952381
## 95% CI : (0.9182971, 0.9751557)
## No Information Rate : 0.3531746
## P-Value [Acc > NIR] : < 0.00000000000000022204
##
## Kappa : 0.9285056
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: bus Class: opel Class: van
## Sensitivity 0.9775281 0.8823529 1.0000000
## Specificity 0.9693252 0.9880240 0.9712644
## Pos Pred Value 0.9456522 0.9740260 0.9397590
## Neg Pred Value 0.9875000 0.9428571 1.0000000
## Prevalence 0.3531746 0.3373016 0.3095238
## Detection Rate 0.3452381 0.2976190 0.3095238
## Detection Prevalence 0.3650794 0.3055556 0.3293651
## Balanced Accuracy 0.9734266 0.9351884 0.9856322
第一种方法的最后一部分是在模型中应用测试数据集,并测量其结果。正如我们所看到的,LDA 作为一个分类器达到了大约 95%的准确率,这是一个非常好的结果。LDA 基本上将数据投影到新的线性特征空间中,显然,如果数据是线性可分的,分类器将达到高精度。现在我们已经知道了 LDA 像分类器一样工作的准确性,让我们检查第二种方法。
LDA 作为一种降维算法
线性判别分析也作为一种降维算法工作,这意味着它将维数从原始的减少到 C-1 个特征,其中 C 是类的数目。在这个例子中,我们有 3 个类和 18 个特征,LDA 将从 18 个特征减少到只有 2 个特征。约简后,神经网络模型将应用于分类任务。这里的程序与上一个几乎相同。看一看它。
*# New Dataset*
new_X_train = as.matrix( X_train[,1:18] ) %*% model$scaling
new_X_train = as.data.frame( new_X_train )
new_X_train$class = X_train$class
我将使用在先前的训练阶段中已经定义的线性判别式的系数来将训练数据集投影到新的特征空间中,这个新的空间将是新的训练数据集。
*# Multi-Class -> Transforming The Labels*
new_X_train = cbind( new_X_train, opel = new_X_train$class == "opel" )
new_X_train = cbind( new_X_train, van = new_X_train$class == "van" )
new_X_train = cbind( new_X_train, bus = new_X_train$class == "bus" )
new_X_train = new_X_train[, !( names( new_X_train ) %in% c( "class" ) ) ]
在建模之前,我们需要转换数据集,以便能够将神经网络模型用作多类分类问题。修改包括为每个标签创建具有值“真”或“假”新列。例如,所有来自“opel”的示例将在“opel”列下获得“True”值,在其他标签列中获得“False”值。因此,数据集可以用于多类模型。
*# Model Neural Network*
**library**( neuralnet )
n = names( new_X_train )
f = as.formula( "opel+van+bus ~ LD1+LD2" )
nn = neuralnet( f, new_X_train, hidden = 3, linear.output = FALSE, lifesign = "full",
threshold = 0.02, stepmax = 1e6 )## hidden: 3 thresh: 0.02 rep: 1/1 steps: 1000 min thresh: 0.7307363799
## 2000 min thresh: 0.7307363799
## 3000 min thresh: 0.7307363799
## 4000 min thresh: 0.6448965006
## 5000 min thresh: 0.4485495524
## 6000 min thresh: 0.3650681285
## 7000 min thresh: 0.2756491212
## 8000 min thresh: 0.2137706548
## 9000 min thresh: 0.1995287711
## 10000 min thresh: 0.173313487
## 11000 min thresh: 0.173313487
## 12000 min thresh: 0.173313487
## 13000 min thresh: 0.173313487
## 14000 min thresh: 0.1420902136
## 15000 min thresh: 0.08689029484
## 16000 min thresh: 0.08255271673
## 17000 min thresh: 0.0690402594
## 18000 min thresh: 0.04721150014
## 19000 min thresh: 0.02719626607
## 19149 error: 11.92918 time: 4.03 secs
神经网络模型开始非常简单,只有 3 个隐藏层,0.02 的均方误差阈值和 1e6 最大历元。这里的想法是在新的数据集上应用神经网络,并检查我们是否可以达到更好的结果。测试数据集将与前面方法中使用的相同。
*# Testing*
X_test = as.matrix( test[,1:18] ) %*% model$scaling
nn.results = compute( nn, X_test )*# Results*
print( "... resulting ..." )## [1] "... resulting ..."idx = apply( nn.results$net.result, c(1), **function**( x ){ which( x == max( x ) ) } )
predictions = c( "opel", "van", "bus")[idx]*# Confusion Matrix*
**library**( caret )
t = table( predictions, test$class )
print( confusionMatrix( t ) )## Confusion Matrix and Statistics
##
##
## predictions bus opel van
## bus 84 3 1
## opel 4 81 3
## van 1 1 74
##
## Overall Statistics
##
## Accuracy : 0.9484127
## 95% CI : (0.9133996, 0.9722494)
## No Information Rate : 0.3531746
## P-Value [Acc > NIR] : < 0.00000000000000022
##
## Kappa : 0.9224872
## Mcnemar's Test P-Value : 0.7667396
##
## Statistics by Class:
##
## Class: bus Class: opel Class: van
## Sensitivity 0.9438202 0.9529412 0.9487179
## Specificity 0.9754601 0.9580838 0.9885057
## Pos Pred Value 0.9545455 0.9204545 0.9736842
## Neg Pred Value 0.9695122 0.9756098 0.9772727
## Prevalence 0.3531746 0.3373016 0.3095238
## Detection Rate 0.3333333 0.3214286 0.2936508
## Detection Prevalence 0.3492063 0.3492063 0.3015873
## Balanced Accuracy 0.9596402 0.9555125 0.9686118
神经网络模型在应用于具有降维的数据集时达到了大约 93%的准确度。这个结果非常非常接近第一种方法的结果。这是 LDA 最佳工作模式的重要线索。
两种方法的结果
嗯,我想我们完成了实验。奇怪的是,两个结果非常接近,就准确性而言,这表明 LDA 在两种模式下都能很好地工作。比较实现的难度,第一种方法比第二种方法更简单,LDA 模型自己提供分类结果,而在第二种方法中,我们有更多的代码,因为 LDA 只是降低维度,而神经网络模型负责执行分类任务。
结论
写这篇文章的动机问题是:LDA 是一种降维技术还是一种分类器?在我看来,基于实现的结果和努力,答案是 LDA 在两种模式下都工作得很好,在分类器模式和降维模式下也是如此,我会给你支持这个结论的论据。
首先,您正在处理的数据集的特征将指导您决定是应用 LDA 作为分类器还是降维算法来执行分类任务。线性判别分析的主要内容基本上是将类别的独立样本线性移动到不同的特征空间,因此,如果您的数据集是线性可分的,只应用 LDA 作为分类器,您将获得很好的结果。然而,如果数据集不是线性可分的,LDA 将尝试在另一个空间中尽可能最大程度地组织数据集的线性可分性,但由于数据的非线性特征,它仍然是类之间重叠的例子。在这种情况下,您将需要使用另一种分类模型来处理非线性数据,如具有多个隐藏层的神经网络、具有径向基函数的神经网络或具有非线性核的 SVM。
总之,LDA 模式的决定将取决于您手中的数据集,如果它是线性可分的,LDA 作为分类器是一种快速的解决方案,具有很好的结果,但如果数据集的特征是非线性的,LDA 将是应用于数据集的额外工具,以便尝试“使事情变得更好”或促进后分类器的工作。
我看过一些这方面的作品,作者将 PCA 和 LDA 结合起来,都是为了降维。首先,主成分分析通过其方差进行特征约简,然后 LDA 应用线性维数约简,最后在这个修改的数据集上执行分类器模型。为了改善分类任务的结果,这绝对是一个要遵循的路线图。
谢谢!
完整的代码可以在我的 git hub 仓库和数据集上找到。
感谢你花时间阅读这篇文章。我真的很感激,随时欢迎反馈。
回头再聊。
学习率在人工神经网络中有用吗?
本文将帮助您理解为什么我们需要学习率,以及它对于训练人工神经网络是否有用。对单层感知器使用一个非常简单的 Python 代码,学习率值将被改变以捕捉它的想法。
简介
人工神经网络新手的一个障碍是学习速度。有人多次问我,在人工神经网络(ann)的训练中,学习速度的作用是什么。为什么我们使用学习率?学习率的最佳值是多少?在本文中,我将通过提供一个例子来说明学习率对于训练一个人工神经网络是多么有用,从而使事情变得简单。在处理学习率之前,我将首先用 Python 代码解释我们的例子。
举例
一个非常非常简单的例子是用来让我们摆脱复杂性,让我们只关注学习率。单个数字输入将被应用到单层感知器。如果输入等于或小于 250,其值将作为网络的输出返回。如果输入大于 250,那么它将被裁剪为 250。图 1 显示了用于训练的 6 个样本的表格。
Figure 1. Training samples.
安架构
所用人工神经网络的架构如图 2 所示。只有输入层和输出层。输入层只有一个神经元用于我们的单一输入。输出层只有一个神经元来产生输出。输出层神经元负责将输入映射到正确的输出。还有一个偏置应用于输出层神经元,权重 b ,值 +1 。还有一个用于输入的权重 W 。
Figure 2. Network architecture.
激活功能
本例中使用的激活函数的方程和图形如图 3 所示。当输入小于或等于 250 时,输出将与输入相同。否则会被剪辑到 250。
Figure 3. Activation function.
用 Python 实现
实现整个网络的 Python 代码如下所示。我们将讨论所有这一切,直到尽可能使它变得简单,然后集中于改变学习率,找出它如何影响网络训练。
1\. import numpy
2\.
3\. def activation_function(inpt):
4\. if(inpt > 250):
5\. return 250 # clip the result to 250
6\. else:
7\. return inpt # just return the input
8\.
9\. def prediction_error(desired, expected):
10\. return numpy.abs(numpy.mean(desired-expected)) # absolute error
11\.
12\. def update_weights(weights, predicted, idx):
13\. weights = weights + .00001*(desired_output[idx] - predicted)*inputs[idx] # updating weights
14\. return weights # new updated weights
15\.
16\. weights = numpy.array([0.05, .1]) #bias & weight of input
17\. inputs = numpy.array([60, 40, 100, 300, -50, 310]) # training inputs
18\. desired_output = numpy.array([60, 40, 150, 250, -50, 250]) # training outputs
19\.
20\. def training_loop(inpt, weights):
21\. error = 1
22\. idx = 0 # start by the first training sample
23\. iteration = 0 #loop iteration variable
24\. while(iteration < 2000 or error >= 0.01): #while(error >= 0.1):
25\. predicted = activation_function(weights[0]*1+weights[1]*inputs[idx])
26\. error = prediction_error(desired_output[idx], predicted)
27\. weights = update_weights(weights, predicted, idx)
28\. idx = idx + 1 # go to the next sample
29\. idx = idx % inputs.shape[0] # restricts the index to the range of our samples
30\. iteration = iteration + 1 # next iteration
31\. return error, weights
32\.
33\. error, new_weights = training_loop(inputs, weights)
34\. print('--------------Final Results----------------')
35\. print('Learned Weights : ', new_weights)
36\. new_inputs = numpy.array([10, 240, 550, -160])
37\. new_outputs = numpy.array([10, 240, 250, -160])
38\. for i in range(new_inputs.shape[0]):
39\. print('Sample ', i+1, '. Expected = ', new_outputs[i], ' , Predicted = ', activation_function(new_weights[0]*1+new_weights[1]*new_inputs[i]))
第 17 行和第 18 行负责创建两个数组(inputs 和 desired_output ),用于保存上表中给出的训练输入和输出数据。根据所使用的激活功能,每个输入将有一个输出。
第 16 行创建了一个网络权重数组。只有两个权重:一个用于输入,另一个用于偏差。它们被随机初始化为 0.05 的偏置和 0.1 的输入。
第 3 行到第 7 行使用 activation_function(inpt)方法实现激活函数本身。它接受作为输入的单个参数,并返回作为预期输出的单个值。
因为预测中可能存在误差,所以我们需要测量该误差,以知道我们离正确的预测有多远。出于这个原因,第 9 行到第 10 行实现了一个名为 prediction_error(desired,expected)的方法,该方法接受两个输入:期望的输出和期望的输出。该方法只是计算每个期望输出和期望输出之间的绝对差值。任何误差的最佳值肯定是 0。这是最佳值。
如果有预测误差呢?在这种情况下,我们必须对网络进行更改。但是到底要改变什么呢?这是网络权重。为了更新网络权重,在第 13 行到第 14 行定义了一个名为 update_weights(weights,predicted,idx)的方法。它接受三个输入:旧权重、预测输出和具有错误预测的输入的索引。用于更新权重的等式如图 4 所示。
Figure 4. Weights update equation using learning rate.
该等式使用当前步骤(n)的权重来生成下一步骤(n+1)的权重。这个等式是我们用来了解学习速度如何影响学习过程的。
最后,我们需要将所有这些连接在一起,使网络能够学习。这是使用从第 20 行到第 31 行定义的 training_loop(inpt,weights)方法完成的。它进入一个训练循环。该循环用于以最小的可能预测误差将输入映射到它们的输出。
该循环执行三项操作:
- 产量预测。
- 错误计算。
- 更新权重。
了解了这个例子及其 Python 代码之后,让我们开始展示学习率对于获得最佳结果是如何有用的。
学习率
在前面讨论的例子中,第 13 行有权重更新等式,其中使用了学习率。首先,我们假设我们没有完全使用学习率。该等式将如下:
weights = weights + (desired_output[idx] — predicted)*inputs[idx]
让我们看看去掉学习率的效果。在训练循环的迭代中,网络具有以下输入(b=0.05,W=0.1,输入=60,期望输出= 60)。
第 25 行中激活函数的预期输出将是 activation _ function(0.05(+1)+0.1(60))。预测产量将为 6.05。
在第 26 行,预测误差将通过得到期望输出和预测输出之间的差来计算。误差将是 ABS(60–6.05)= 53.95。
然后,在第 27 行,权重将根据上面的等式进行更新。新的权重将是[0.05,0.1] + (53.95)*60 = [0.05,0.1] + 3237 = [3237.05,3237.1]。
似乎新的权重与以前的权重相差太大。每个重量增加了 3237 磅,这太大了。但是让我们继续做下一个预测。
在下一次迭代中,网络将应用这些输入:(b=3237.05,W=3237.1,输入=40,期望输出= 40)。预期输出将是 activation _ function((3237.05+3237.1(40))= 250。预测误差将为 ABS(40–250)= 210。误差非常大。它比前一个误差大。因此,我们必须再次更新权重。根据上面的等式,新的权重将是[3237.05,3237.1] + (-210)*40 = [3237.05,3237.1] + -8400 = [-5162.95,-5162.9]。
图 5 中的表格总结了前三次迭代的结果。
Figure 5. Summary of results of the first three iterations.
随着我们进行更多的迭代,结果会变得更糟。权重的大小变化很快,有时还会改变符号。它们正从很大的正值变为很大的负值。我们怎样才能阻止这种巨大而突然的重量变化呢?如何缩小权重更新的值?
如果我们从上表中查看重量的变化值,该值似乎非常大。这意味着网络以很大的速度改变它的权重。这就像一个人在很短的时间内做了很大的动作。曾经,这个人在远东,过了很短的时间,这个人将在遥远的西方。我们只需要让它慢下来。
如果我们能够缩小这个值,让它变得更小,那么一切都会好的。但是怎么做呢?
回到生成该值的代码部分,看起来是更新等式生成了该值。特别是这部分:
(desired_output[idx] — predicted)*inputs[idx]
我们可以通过将其乘以一个小值(如 0.1)来缩放该部分。因此,在第一次迭代中,不是生成 3237.0 作为更新值,而是减少到 323.7。我们甚至可以通过将比例值减小到 0.001 来将该值缩小。使用 0.001,该值将仅为 3.327。
我们现在可以抓住它了。这个比例值就是学习率。为学习率选择小的值使得权重更新的速率更小,并且避免突然的变化。值越大,变化越快,结果越差。
但是学习率的最佳值是多少呢?
我们不能说这是学习率的最佳值。学习率是一个超参数。超参数的值由实验确定。我们尝试不同的值,并使用给出最佳结果的值。有一些方法可以帮助你选择超参数的值。
检测网
对于我们的问题,我推断值 0.00001 就可以了。用那个学习率训练完网络,就可以做个测试了。图 6 中的表格显示了 4 个新测试样本的预测结果。使用学习率后,现在的结果似乎好了很多。
Figure 6. Test samples prediction results.
原文可在 LinkedIn 在此链接:https://www . LinkedIn . com/pulse/learning-rate-useful-artificial-neural-networks-Ahmed-gad/
在本页面 KDnuggets 也有分享:https://www . kdnugges . com/2018/01/learning-rate-useful-neural-network . html
这篇文章于 2018 年 6 月 28 日在 TDS 上再次分享。
联系作者
艾哈迈德·法齐·加德
LinkedIn:linkedin.com/in/ahmedfga…
机器学习是开放式的吗?
Fractal patterns are open-ended because they can be calculated infinitely many times upon zooming in, although their approximations in nature are finite like this romanesco cabbage.
近年来,机器学习取得了一些令人难以置信的成就,特别是通过利用人工神经网络的技术(例如 [Go](http://b. deepmind.com/research/al…) )。此外,尽管神经网络技术[是出了名的喜怒无常](http://f. www.turingfinance.com/misconcepti…](http://b. arxiv.org/pdf/1606.04…
开放式进化的基础
在生物学理论中,只有一种创造性的“力量”能够产生无限进化——自然选择(NS)。(如果你对这种说法的来源感兴趣,我已经在别处[充实了这一观点背后的论点。)尽管](http://a. medium.com/@philmadgwi… ns 的描述](en.wikipedia.org/wiki/Natura…](en.wikipedia.org/wiki/Univer… NS 视为底物中性(例如 Dawkins 1976,Dennett 1995 等)。因此,NS 可以被认为是一种性能优化算法。
这样,用于描述 NS 的数学可以等效地模拟真实的学习(Plotkin 1995)。虽然 NS 通常被用来指发生在代与代之间的基因进化变化,但选择也可以描述发生在个体内部模因中的学习过程。这里有三个限定性的陈述:I)模因不一定是复制体,因为它们的存在可以被限制在一个单一的头脑中(例如 Munz 1994),ii)模因可能很少像基因,但这并不改变 NS 的适用性(例如 Barkow 等人 1992),以及 iii)并不是所有的行为变化都是学习,因为指令可塑性可以简化为潜在基因的反应规范(例如棘手点所以[见](http://4. medium.com/@philmadgwi…
这些年来,人们一直在激烈辩论 NS 的品质,这些品质使它能够导致基因或迷因的开放式进化。根本的问题是 NS 同样适用于化学进化,就像它适用于生物一样,所以生物对象必须有一些特殊的特征,允许它们的 NS 具有开放的可能性(例如 Cairns-Smith 1985)。换句话说,在 NS 的算法中没有找到开放式进化的基础。进化生物学界已经认识到这个问题,现在[正在重大转变框架](http://b. devosoft.org/whats-holdi…
主要转变框架可以被认为是解决生物复杂性问题的一种尝试。当 Williams (1966)和 Dawkins (1976)引入自私基因理论时,他们强调了生物组织是多么荒谬。如果每个基因都是自私的,为什么它们会生活在基因组中基因的社会里?基因预计会遇到合作问题,如囚徒困境,这使得基因社会容易受到内部冲突的破坏,导致公地悲剧。然而,梅纳德·史密斯和 Szathmary 指出,生物组织似乎完全是不可逆的。他们提出,基因社会的扩张是通过少数重大转变事件来实现的,这些转变事件克服了合作问题,并为逆转创造了障碍。结果是一个类似棘轮的过程,增加了生物的复杂性。
因此,进化理论将开放式进化与生物物体经历重大转变的能力联系起来。重大转变仍然是一个热门的研究领域,这个问题还没有达成一致的答案。我以前曾试图将主要转变的过程解释为 NS 的主体和客体之间的反身进化过程。主体就像有机体一样是适应性最大化的代理,而客体就像基因一样是遗传的单位。主体产生于客体的集体行为,这意味着主体是相互冲突的自私利益的妥协。反过来,主体与环境相互作用,以使其对象恢复健康。然而,主体的任务是模糊的,因为它可能与其他主体共享对象,因此与其他人共享共同感兴趣的程度。
关键问题是,一个主体如何知道如何回报利益给它的客体?由于其他主体可能包含与自身相同的对象,纯粹的利己主义将失败,因为它将导致通过其他主体损害其对象健康的行为。与此同时,纯粹的利他主义也会失败,因为这会助长他人的利己行为。形成明确的组通常是一个好主意,因为这将问题限制在一小部分人身上,他们可以更容易地对共享对象做出决定。当强制群体形成的好处(例如劳动分工)超过在群体之外的代价变得太不利时,正是这个群体可以经历重大转变。结果是主体扩展为群体,因此,每个主体的对象数量和交互的复杂性增加。
虽然我的描述必然是不完整的,需要进一步的阐释,但关键的信息是,主要的转变取决于主体和客体之间的分裂。这如何转化为机器学习算法?
机器学习有主体和客体吗?
如果我们要描述网络中主体和客体之间的划分概念,我们可以把单个节点描述为客体,把主体描述为网络中相对不同的模块。一个主体会有许多强有力的内部连接,有少量的节点连接到网络的其他部分。然而,尽管这种解释很直观,但当使用选择性算法而不是机器学习算法时,它将非常有意义。逻辑可以归结为四点:
1。原则上,NS 和许多机器学习算法没有什么不同
NS 和许多机器学习算法都是优化技术。给定一个恒定的环境,两者都经历了向某种最佳状态的变化。一些进化生物学家和计算机科学家认为,群体优化方法是 NS 启发的算法所独有的。在我看来,我看不出为什么人口的统计特性不能以一种去除人口成分的方式来建模。事实上,有 NS 的进化模型就是这样做的。因此,我认为更重要的是认识到 NS 和优化之间没有什么真正的不同。但是,它们的实现方式可能会有所不同。
2。在 NS 下,对象适应度最大化,但是节点没有最大化任何东西
在一个有机体中,一个基因可以说是自私的,因为它被选择来最大化其适应性,即使它是通过与其他基因相互作用而获得这种适应性的。这可能导致基因与基因组中的其他基因发生冲突,但这种冲突表现为基因组中特定基因座的等位基因之间的竞争。可以说,位点是基因组中的一个座位,能改变的只是谁坐在这个座位上。例如,当第一个基因座的突变基因进化时,为了自己的私利而损害了基因组的其余部分(例如,一个绿胡子),这就选择了另一个基因座的修饰等位基因,以抑制这种变化。预计第一个基因座的基因库不会针对该基因座进行选择。通过这种方式,一个基因网络被一只看不见的手组织起来,基因按照自己的利益行事,并附带地有益于基因组的其他部分。
人工神经网络不是通过一只看不见的手来运作的。没有理由认为一个节点可以最大化任何东西。相反,网络作为一个整体最大化其任务性能。问题不在于节点的属性是由整个网络如何与环境(即游戏等)交互决定的,因为这也是主体在自然界中所做的,而是节点是固定架构的一部分。在自然界中,如果有害的突变被 ns 所偏爱,一个基因座可能变得无功能,但是在人工神经网络中这不会发生。事实上,有一整套选择网络约束的艺术,包括节点的数量、层中节点的排列等等,都需要预先考虑。这与盲目的选择过程完全不同。
3。机器学习网络中的节点对对象进行编码,但本身不是对象
网络对物体进行编码的想法很复杂。让我们考虑一下基因。基因由位于线性字符串上的 DNA 编码,但它们通过复杂的表达网络相互作用来创建功能,这些表达网络不映射到线性编码结构上。同样,网络不一定要映射到学习的对象上。这个问题在新兴的迷因科学中遇到过,迷因的物理基础由某人大脑中一组特殊的神经连接来表示。这些神经连结,以及许多其他的神经连结组态,编码了迷因对象。同样,机器学习网络中的节点不是对象,而是对对象进行编码。
4。机器学习网络是低效的对象编码器
在目前处于起步阶段的渐进式神经网络中,单个网络可以从玩一个游戏中获得“直觉”,然后将这种直觉应用于另一个游戏,以提高性能优化的速度。然而,网络以一种可塑性的形式做到了这一点,因为在学习玩新游戏的过程中,现有的任务表现受到了损害。这是值得关注的,因为这意味着网络中的对象非常少,因此玩新游戏必然意味着覆盖为先前任务选择的对象。这种重写显然与类人的一般智力非常不同,在类人的一般智力中,玩家可以独立地在多个游戏中保持能力。此外,在不发生这种重写的情况下,整个过程被“硬编码”以避免“遗忘”。这里还有很长的路要走。
开放式机器学习?
作为一名进化生物学家,我对当前机器学习技术可能达到的极限感到担忧。显然,采取更受 NS 启发的方法是否有益取决于你的目标。如果你想让一台机器很好地播放 Atari,我认为 DeepMind 已经非常明确地展示了超人的能力。然而,如果你想要一台具有某种生物“通用”智能的机器,那么我认为明智的做法是考虑 I)许多生物“智能”对于它们特定的小生境是多么有限,以及 ii)开放式学习的罕见情况的显著特征(在开放式进化普遍性的更广泛背景下)。对于未来的研究,我有两个试探性的建议。首先,放宽技术以允许网络体系结构更加灵活可能会使网络更具创造性;移除层结构以允许节点之间的任何类型的连接,允许节点的创建/消失,并允许内部选择网络常数。第二,如果节点被制成在选择性环境中最大化某些东西的明确对象,这可能会改善网络功能。是否会是这样,我还不确定,但不管怎样,它会让我们更有信心,技术正在走向开放式学习,因为 NS 在本质上已经实现了开放式学习。此外,有大量关于看不见的手的自组织特性的经济学、物理学和生物学文献,这些文献有助于描述在“黑匣子”中发现的结构的特征,从而可能解释它们。
感谢阅读!如果你有任何意见,我将很高兴听到他们,因为这是一个问题,我觉得不得不写下没有任何明确的答案。我认为很难说机器学习是否能够进行开放式学习(如定义的那样),但我怀疑现有的方法是不够的。开放式技术的挑战似乎开始被重视,而不是被假设,导致了一些 T2 式的创新方法。总的来说,未来看起来令人兴奋!
机器学习准备好规模化了吗?
我们的大脑中有一个动态的世界模型,帮助我们在识别出一些相似的特征后,识别出熟悉的模式。“我们假设大脑将世界建模为动力系统的层级或级联,这些动力系统在感觉中枢中编码因果结构。感知等同于这些内部模型的优化或反演,以解释感官数据。”几年前,分析脑成像数据以及大脑如何工作的计算模型的技术先驱卡尔·弗里斯顿和斯蒂芬·基贝尔在他们的开创性论文中写道。
这意味着当我们看着一只猫时,我们实际上并没有看到真实世界中的猫。我们看到一个由我们大脑的神经网络生成的猫的模型,它基于通过感官输入传递给我们大脑的真实猫的一些猫的特定细节。我们不需要处理来自真实世界的猫的完整图像来将它归类为猫并生成它的模型,因为我们的大脑可以概括。它有一个存储在内存中的猫的通用模型——一种模板,每当它在感官输入中识别出猫的模式时,它就可以将它上传到它的动态世界模型中。
随着我们的大脑不断接收关于现实世界中的猫的更多信息的感官输入,它会继续自动将通过输入获得的新信息与生成的模型进行比较。如果新的输入符合模型的模式,或者换句话说,根据模型,这是非常可能的,大脑将其归类为猫的另一个特征,并使我们的猫的模型更加详细。这种持续的模式丰富是我们大脑的背景活动,不会改变我们大脑的处理负荷。这实际上不是一个学习过程。这是模型的微调。
我们不断扫描现实世界的主要原因是寻找意外事件和低概率输入。如果你看到另一匹马,对大脑来说就不那么重要了。马可以有不同的颜色或大小,但它仍然只是一匹马。你的大脑会定期接受特定特征的输入,并将它们添加到你正在看的真实世界的马的动态生成模型中。你的大脑已经知道哪一匹马的颜色和尺寸最有可能,因为它已经在记忆中保存了类似马的模板(或广义模型)的东西。
然而,如果你突然看到马的前额有一只角,你的大脑活动会发生巨大的变化。你的大脑会对这一事件的处理负荷做出夸张的反应,你的大脑会立即意识到这是极不可能的。大脑活动的增加将持续下去,直到大脑选择了一个犀牛、独角兽或者只是一匹长着假角的马的模型。如果我们的大脑面对全新的和意想不到的东西,因此非常不可能,可能需要生成一个全新的模板(广义模型)。
我们需要世界模型及其模板来更好地压缩我们收到的数据,因为数据是神圣的——我们不能失去它,但我们的记忆不是无限的。它们还帮助我们缩短对现实世界情况的反应时间,这些情况可能需要对我们的生存至关重要的立即行动。
如果你的大脑必须在它的内存中筛选数百万张图片来识别一匹与你在现实世界中看到的棕色马相似的棕色马的图片,这可能需要几个小时或几年,取决于存储的数据量,因为我们的大脑处理数据的速度比现代计算机芯片慢得多。
人类通过搜索最不可能的数据来学习。这扩展了我们的概括能力。已经有理论假设和实践证明当我们对抗难以预测的刺激时,我们大脑的处理负荷会增加。
机器通过搜索最可能的数据来学习。这缩小了他们归纳的能力。此外,他们不能实时调整现实世界物体的模型。正如谷歌 DeepMind 的研究人员所说如今,计算机程序无法自适应地实时学习数据最有前途的人工智能技术——深度神经网络(DNNs)——最近在封闭领域(非常狭窄的特定小生境)的许多识别和分类任务中展示了出色的结果。这使得许多研究人员认为成功的 DNNs 模型可以推广。然而,这个问题仍然没有答案。
由麻省理工学院的张领导的一组研究人员最近认为成功的 DNNs 只是记忆了整个训练数据集,可以在没有任何泛化的情况下做出准确的分类。“我们进行的实验强调,几个成功的神经网络架构的有效容量足够大,足以粉碎训练数据。因此,这些模型在原则上足够丰富,可以记忆训练数据……我们的实验得出的另一个结论是,即使得到的模型不能一般化,根据经验优化仍然很容易。”
来自华盛顿大学电气工程系网络安全实验室的 Hossein Hosseini 和 Radha Poovendran 在他们的论文中显示,“尽管 DNNs 在常规数据上的表现令人印象深刻,但它们在负面图像上的准确性处于随机分类的水平。这个观察表明,简单地在原始数据上训练的 dnn 不能识别对象的语义,并且可能仅仅记住输入。无法识别转换后的输入显示了当前训练方法的缺点,即学习模型无法进行语义概括。”
正如研究人员所说,“已经证明,神经网络的有效容量足以记忆整个训练数据集。结果,DNN 分类器通常以非常高的置信度正确地分类训练样本。此外,网络损失函数在输入样本周围平滑变化,即随机扰动样本很可能与常规样本归为同一类。此外,由于测试样本通常是从与训练样本相同的分布中收集的,因此测试数据点大多出现在训练点附近。因此,随着大型数据集的可用性,网络很可能可以将每个测试样本与来自同一类的一个或几个训练样本相关联,从而实现高测试准确度。
然而,由于转换后的样本可能远离原始样本,网络无法正确地对其进行分类。然而,对于特定的转换,我们也可以在转换后的数据上训练 DNN,以获得高精度,依靠大型和多样化的数据集,涵盖测试数据中可能的新奇事物的所有方面,似乎对机器学习系统提出了一个基本问题。这导致模型需要大量数据来理解每一个特性**,这显然不适合真实世界的应用**。"
特别是,Hosseini 和 Poovendran 在他们的实验中表明,经过良好训练以识别路标的 DNN 根本不能识别负面路标,即与训练时相同但亮度相反的路标。
与此同时,百度硅谷人工智能实验室系统研究主管格雷格·迪亚莫斯在福布斯上撰文称,“为了实现人工智能的又一次重大突破,我们需要改变我们的软件。”这篇文章是由百度前首席科学家吴恩达在脸书和推特上分享的,他评论了 Greg 思想的重要性。
迪亚莫斯提出的突破是调整现有的人工智能算法,使它们更好地利用局部性。事实上,正如丹尼尔·格林菲尔德在他 2010 年的论文中所说:“自从微处理器诞生以来,晶体管变得越来越便宜、越来越快、越来越节能,而全球的线路几乎没有变化。与此同时,我们正朝着在一个芯片上集成数千个处理内核的方向发展,软件分布在这些内核上。这个以通信为主导的计算新时代的标志是,内核上的本地计算很便宜,但内核间的全局通信和外部存储器很贵。因此,软件的物理空间位置开始变得重要。事实上,已经证明,除非利用通信中的物理位置,否则随着技术的发展,成本变得难以承受
因此,当对已经定型的技术进行规模化推广时,本地化就变得至关重要。如果你的自动驾驶汽车不能识别亮度相反的让路或停车标志,这会是一个根本性的问题吗?当前的机器学习系统准备好进行扩展了吗?还是仍然有一个根本问题使它们不可扩展?下注吧。
我的 Spotify 音乐很无聊吗?涉及音乐、数据和机器学习的分析
几天前,我一边听着 Spotify 保存的歌曲,一边和一个朋友聊天。唱了几首歌后,她打断了谈话告诉我:“你的音乐品味很有趣……你的播放列表里有很多综艺、器乐歌曲,其中一些是无聊”。
我对这个评论一笑置之,因为这已经不是我第一次听到了。我承认我的音乐品味可能有点奇怪——例如,我可以以听肯德里克·拉马尔的音乐开始新的一天,然后转到《盗梦空间》的配乐,接着是西班牙萨尔萨舞曲。
然而,她的评论给了我一个好主意:让我们看看数据是怎么说的。
因此,我做了一个实验。
在这篇文章中,我将分享这个实验的发现,在这个实验中,我分析了我的 Spotify 歌曲,看看它们是否确实多样化、工具化和无聊。而且,为了让问题更有意思,我把这三个特点都和我朋友的歌做了对比。最后,我训练了一个机器学习模型,目的是预测一首歌是否更适合我或她的播放列表。
工具
这个项目中使用的主要工具是 Spotify API 服务的音频功能组件。这些音频特征代表了一首歌曲的特征,例如声音有多强,T21 有多响。稍后我会对这些特性进行更详细的解释。
Python 用于使用库 Spotipy 获取数据,使用 scikit-learn 训练机器学习模型。数据分析在 R 中完成。
数据
音乐数据是使用我编写的 Python 脚本获取的,该脚本获取用户的所有播放列表,以及特定播放列表中的所有歌曲。一旦我有了歌曲的基本信息,包括它们的 Spotify ID,我就能够使用相同的脚本获得它们的音频特征。
产生的数据集由 15 列和 1074 首歌曲组成,其中 563 首来自我的播放列表,511 首来自她的(从现在起我将称我的朋友为她或她的)。
在数据集的所有 15 列中,仅使用了与音频特征相关的那些列。在下面的列表中,我将介绍它们,并解释它们的含义(在某些情况下,我只是从 Spotify 复制/粘贴描述)。注意:所有特性的值都在 0.0 -1.0 的范围内。
- 乐器性:这个值代表歌曲中的声音量。越接近 1.0,歌曲的器乐性越强。
- 声学:这个值描述了一首歌曲的声学程度。1.0 分意味着这首歌最有可能是一首原声歌曲。
- Liveness:这个值描述了歌曲被现场观众录制的概率。根据官方文档",高于 0.8 的值表示该曲目很有可能是直播的"。
- 语速:语速检测音轨中是否存在口语单词。如果一首歌曲的语音度高于 0.66,它可能是由口语词组成的,0.33 到 0.66 之间的分数是一首可能同时包含音乐和词的歌曲,而低于 0.33 的分数意味着这首歌曲没有任何语音。
- 能量:“(能量)代表强度和活动的感知测量。通常,充满活力的曲目让人感觉快速、响亮、嘈杂。
- 可跳舞性:"可跳舞性描述了一首曲目在音乐元素组合的基础上适合跳舞的程度,包括速度、节奏稳定性、节拍强度和整体规律性。值 0.0 最不适合跳舞,1.0 最适合跳舞。
- 效价:"从 0.0 到 1.0 的量度,描述音轨所传达的音乐积极性。高价的音轨听起来更积极(例如,快乐、愉悦、欣快),而低价的音轨听起来更消极(例如,悲伤、沮丧、愤怒)。
数据分析
这篇报道的前提或者说假设是——据一个朋友说——我的歌是多种多样的,器乐化的,无聊的。所以,我调查了这三个属性,来测试她是否正确。在这一部分,我将描述我的发现。
我将首先展示两个播放列表的所有音频特征的平均值的两个图,这样我们可以了解每个数据集的主要特征,并熟悉它。
第一个图显示了我的播放列表的普遍特征是乐器性,代表她的播放列表的第二个图显示了可跳舞性是她的。但是,这些数值的差别有多大呢?下面的图表是从我的特征中减去她的每个特征的平均值后的结果。
我们可以清楚地看到乐器性和一致性(蓝色条)是我的播放列表的显著特征,相差 0.53 和 **0.1。**在她这边, danceability 和 valence ,这两个特征都以 0.19 的数值高居榜首。
这个结局可以这样解读。
- 我的歌好像少了些人声,多了些器乐。
- 她的歌曲更生动。
所以,看到这些结果后,我们都同意“*我的播放列表有用吗?”*是确定的是。
多样化
我要回答的下一个问题是:我的播放列表有多多样?
为了回答这个问题,我调查了每个播放列表中的歌曲有多相似或不相似。例如,非常多样的播放列表意味着用户有许多来自不同流派的歌曲。与此相反,低变化播放列表是一个几乎所有歌曲都属于同一流派的列表。
我用来检查我们的播放列表有多不同的技术,是简单地查看音频特征的标准偏差。以下是情节。
通过查看图表,很难确定哪个播放列表的变化更大,但是如果将所有值相加,并计算平均值,我们会发现我的播放列表的所有标准偏差的平均值是 0.244 ,而所有单个值的总和是 1.713 。关于她的播放列表,分别是 0.174 ,和 1.218 。
这意味着什么?高标准偏差表示我的歌曲的音频特征的分数不是那么相似,这意味着,例如,我可能有许多乐器性值非常高的歌曲,同时也有相同值非常低的歌曲。
结论:我的播放列表至少比她的更多样。
乏味的
寻找问题*“我的播放列表有多无聊?”*是这部作品中最有趣的部分之一,因为,到底是一首无聊的歌。对我来说无聊的事情对你们中的一些人来说可能是最好的事情。所以我解决这个问题的方法是想象自己在一个派对上,并思考我想在派对上听到什么样的音乐。所以我想出了一个简单的等式,它包括能量,和可跳舞性特征,加上我还没有介绍的两个特征:速度,和响度。我之所以选择这些,是因为在派对上,我喜欢响亮的音乐,节奏优美,能激发我(和其他人)的能量,让我有心情跳舞。
这是等式:
boringness = loudness + tempo + (energy*100) + (danceability*100)
而且按照它的说法,分数越低的歌越无聊,分数越高的歌越好玩。此外,请注意,能量和可跳舞性乘以 100,因为响度和速度值不在 0.0-1.0 的范围内,我想让一切或多或少地保持在同一范围内。
这些是结果:
上面的图像是一个直方图,它显示了无聊分数在每个数据集之间的分布情况。人们可能注意到的第一件事是,代表她的播放列表的粉红色区域的峰值高于蓝色区域,这意味着在该范围内有许多值。此外,与蓝色区域相比,粉红色区域在右侧更密集(这被称为左偏),这意味着她的播放列表的大多数无聊值都比我的大。
为了补充这个直方图,计算了无聊度的平均值,我的值是 201.735 ,她是 233.284 。下面的情节说明了这一点。
因此,我们可以得出结论,根据我自己的等式,我的播放列表比她的更无聊,我讨厌在聚会上听到我自己的音乐。
这首歌是她的还是我的?机器学习方法
这个实验的最后一个目标是研究是否有可能使用机器学习来预测一首歌是属于我的播放列表还是她的播放列表。
对于那些完全不知道什么是机器学习的人,我将给出一个非常简单的解释,这基本上是从我的另一份工作中复制/粘贴的。
我喜欢将机器学习,特别是监督学习的子领域(我将在这里应用)定义为使用系统来学习数据集模式的任务。在这个学习过程中,该算法寻找一个最佳的数学函数,或者一种能够解释数据特征(即音频特征)之间关系的方式、、,以及被称为数据的标签或类别的东西(即播放列表的所有者,我或她)。因此,当系统已经学习了数据时,它应该能够使用它在学习步骤期间学习的知识来推断或预测一组新特征的类别。
在这项工作的情况下,这意味着我们将有一个用上一部分中使用的数据集训练的机器学习系统。所述系统应该能够确定一组新的音频特征是否用于更可能出现在我或她的播放列表中的歌曲。
在所有现有的机器学习模型中,我使用了一种叫做逻辑回归的模型。为了保持这篇文章简单友好,我不会解释逻辑回归是如何工作的。相反,我只想说这是一个数学等式,其中目标变量,称为因变量,或我们想要预测的东西(在这种情况下,它是播放列表的所有者),取决于一个或几个自变量(音频特性),加上一些魔法。大概是这样的:
dependent_variable = magic(independent_variable_1 + independent_variable_2 + …)
因变量的值是一个介于 0 和 1 之间的数字,在这种情况下,该值表示一首歌属于我的播放列表或她的播放列表的概率——如果该值小于某个阈值 X,则这首歌属于我,否则它属于她。
在展示结果之前,我想为对该主题有所了解的读者描述一下培训设置。使用 网格搜索和交叉验证 获得模型参数 alpha 和迭代次数。找到的最佳配置如下:
- 处罚:弹力网,
- 阿尔法值:0.001
- 迭代次数:50
以下代码片段(Python)是用于训练模型的代码。
parameters = {‘alpha’: (0.001, 0.0001, 0.00001, 0.000001),‘penalty’: (‘l2’, ‘elasticnet’,),‘n_iter’: (10, 50, 100),‘loss’: (‘log’,)}# Perform a grid search with cross validation to search for the best parameters.grid_search = GridSearchCV(SGDClassifier(), parameters, n_jobs=-1, verbose=1, cv=5, scoring=’accuracy’)grid_search.fit(data, labels)
结果出奇的好!在几个训练和测试部分中,平均准确率为 82% ,换句话说,模型能够预测这首歌属于谁的播放列表的次数为 10 次中的 8 次。
一旦模型被训练,它就用两首在训练中没有遇到的歌曲进行测试。第一首歌名为一个更好的开始,来自视频游戏 Mass Effect Andromeda,预测是“我”,而蕾哈娜的第二首歌 Love On The Brain 是“她”。相当准确。
结论
在这篇文章中,我展示了一个关于我的音乐的愚蠢的评论或观点是如何变成一个实验的。通过使用 Spotify 的 audio features API 组件,我能够发现,正如我的朋友所说,我的播放列表是多种多样的,充满了器乐,而且有些无聊。为了补充这种分析,训练了机器学习模型逻辑回归,目的是根据歌曲的音频特征预测歌曲是否更适合我或她的播放列表。该模型的准确率为 82%,相当不错。
所有用到的代码都可以在https://github . com/Juan des/Spotify-audio-features-data-experiment获得。这包括用于获取数据和训练机器学习模型的 Python 脚本,以及用于分析的 R 脚本。
关于 Spotify 音频功能的更多信息,请查看 developer.spotify.com/web-api/get…:](developer.spotify.com/web-api/get…](machinelearningmastery.com/logistic-re…)
如果任何人发现任何打字错误,不一致,或想问或说些什么,请做评论:)
感谢阅读。
在线教育是未来的发展方向吗?
由于教育成本不断上升,与传统教学方法相比,世界正朝着 MOOCs 的方向发展。他们能成为合适的替代者吗?(第一部分)
今年早些时候,我偶然看到一篇关于美国教育债务危机的文章,这促使我看一看替代方案,在线教育似乎已经成为试图解决这一问题的一颗新星。但这真的是前进的方向吗?
Infographic Credits: Niall McCarthy
我很难相信它们能成为合适的替代品。那么,这只是一种时尚吗?还是有帮助?让我们来了解一下!
我拿起一个数据集,它给出了两个领先机构——麻省理工学院和哈佛大学——提供的 MOOC 数据。(2012–2016)
探索:
被审核的 v/s 认证参与者的百分比是多少? 性别、年龄统计数据 可能的挑战和有趣的见解 MOOC 的参与和认证总数是如何随着时间的推移而增长的? MOOC 用户中有百分之多少的人获得证书?
一些有趣的见解:
MOOCs 的发展和随后的学生参与
Number of courses as well students have gradually been rising over the years
毫无疑问,它从一开始就很受欢迎,每年增长近 2 倍。绘制过去四年的“总参与者”图显示,仅去年的注册人数有所下降,从 160 万下降到 120 万。我将 Harvardx/MITx 课程在第四年的平均参与者/课程和总注册人数中的下降归因于 MOOC 平台、选项和更简单的课程形式的更多竞争。Harvardx/MITx 趋势可能不代表整体趋势,因此,这并不意味着在线学习的下降。
然而,在这四年中,有 240 万独立用户参加了一门或多门 MITx 或 HarvardX 开放式在线课程,245,000 名学员在成功完成一门课程后获得了证书,这使得我们的完成率接近 10%,并且在四年中平均每天有 1,554 名新的独立参与者注册。
我认为,如果来自其他 mooc 的数据附加到这个 Harvardx/MITx 数据集,我们可能会看到 mooc 的受欢迎程度有所增长,而不是下降。
向“技术”的转变
Computer Science seems to be leading the pack in terms of student participation
- 计算机科学课程是最大的(例如,在科学、历史、健康和其他学科中),并且将更多的参与者引导到其他学科领域,而不是他们所接受的领域。
- 我们注意到,2014 年麻省理工学院参与者的下降是因为哈佛大学的两门计算机科学课程变得流行。除此之外,参与率稳步上升,而认证在下半年有所放缓。这可以归功于 2016 年初停止的免费认证的取消。
- 此外,对课程的细分显示,CS 课程最受欢迎,CS 课程在 视频时间方面最密集,这主要归功于 MITx(著名的编程入门课程!)
MOOC“课堂”的参与者背景和意图各不相同。
- 一门典型的课程认证 500 名学员,其中 7,900 名学员在注册后可访问部分课程内容,约 1,500 名学员选择探索一半或更多的课程内容。
- 值得注意的人口统计数据包括 29 岁的中位学习者年龄,2 比 1 的男女比例(67%的男性,33%的女性),以及来自其他国家的学习者的大量参与(71%来自国际,29%来自美国)。
如果要考虑完成率..
Credits: www.katyjordan.com/MOOCproject…
HarvardX 和 MITx 最近报告称,只有 5.5%注册了他们的开放在线课程的人获得了证书。如果从广义上看,这些数字接近 15%,但这似乎是唯一等待解决的挑战。
虽然这一初步探索确实令人兴奋,但我希望在第 2 部分中更深入地挖掘——敬请期待!
接下来是什么?
探索:
了解行为模式(群组 v/s 自定进度)
我想做什么?与运行各种代码学校的人交谈,了解什么是秘方和前进的道路(所以如果你们中的任何人能够将我连接到相关的人,那将是令人敬畏的!)
发现数据支持的成功案例
如果你对改变在线教育的未来有一点点兴趣和/或想抓住一些(虚拟!)咖啡,打我一下!
[## your product guy(@ MotwaniSuhas)| Twitter
yourproductguy 的最新推文(@MotwaniSuhas)。# just keep experimenting | Ed-tech/CPG | Hmu 如果我能帮忙…
twitter.com](twitter.com/MotwaniSuha…)
乙状结肠后的 ReLU 不好吗?
最近有一篇关于深度学习的心理模型的博客文章,从光学角度进行了类比。我们对一些模型都有直觉,但很难用语言表达出来,我相信有必要为这个心智模型共同努力。
Sigmoid graph from wikipedia
最近我和 Rajasekhar(为一个 KWoC 项目)正在分析不同的激活函数之间如何相互作用,我们发现在最后两层的 sigmoid 之后使用 relu 会恶化模型的性能。我们使用 MNIST 数据集和一个四层全连接网络,第一层是 784 维的输入层,然后第二层是 500 维的隐藏层,之后是另一个具有 256 维的隐藏层,最后是 10 维的输出层。除了输入层,我们对每一层的输出使用非线性。由于我们将研究限制在四个激活函数( ReLU,Sigmoid,Tanh,卢瑟),我们可以通过激活函数的不同组合构建 64 个不同的模型。我们在所有模型中使用随机梯度下降,学习率为 0.01,动量为 0.5。我们在所有实验中使用交叉熵损失和 32 的批量大小。我们对每个模型进行了 9 次实验,精确度的平均值和标准偏差显示在[ nishnik/sherlocked 的表格中。我在这里简单总结一下:
- 如果第一层有 relu 激活,第二层和第三层有除(sigmoid,relu)之外的(relu,tanh,sigmoid,relu)的任意组合,则平均测试精度大于 85% 。对于( relu,sigmoid,relu ),我们得到的平均测试精度为 34.91%
- 如果第一层有 tanh 激活,第二层和第三层有除(sigmoid,relu)之外的(relu,tanh,sigmoid,relu)的任意组合,则平均测试精度大于 86% 。对于( tanh,sigmoid,relu ),我们得到的平均测试精度为 51.57%
- 如果第一层有 sigmoid 激活,第二层和第三层有除(sigmoid,relu)之外的(relu,tanh,sigmoid,relu)的任意组合,则平均测试精度大于 76% 。对于( sigmoid,sigmoid,relu ),我们得到的平均测试精度为 16.03%
- 如果第一层有卢瑟激活,第二层和第三层有除(sigmoid,relu)之外的(relu,tanh,sigmoid,relu)的任意组合,那么平均测试精度大于 91% 。对于(卢瑟,sigmoid,relu )我们得到的平均测试准确率为 75.16%
- 如果最后两层具有( sigmoid,relu )的话,精确度的变化也很大
我们也在 CIFAR-10 上进行了实验,结果是相似的[ 链接 ](抱歉格式错误)。在最后两次激活为( sigmoid,relu )的每种情况下,准确度为 10% ,否则准确度≥ 50%。
然后,我们在每一层中使用批规范进行实验。和其他组合一样,精确度也有了很大的提高。[MNIST 的结果 ]。同样,在最后一层使用 batchnorm 就像 charm 一样让模型学习。
因此,对于最后两层中的( sigmoid,relu )来说,模型不能学习,即梯度不能很好地反向传播。(sigmoid(output_2)* weigh _ 3+bias _ 3)<大多数情况下为 0,或者 sigmoid(output _ 2)正在达到极值(消失梯度)。这两个我还在做实验。在twitter.com/nishantiam给我一些建议,或者在[nish Nik/Sherlock上制造一个问题。
圣诞老人是真的吗?
我的团队非常重视圣诞节和我们收到的礼物。所以,我们想追踪圣诞老人,知道他什么时候给我们送礼物。我们决定在烟囱里放一个摄像头,找到他。最近我们看到了这个帖子关于如何为你自己的数据集训练 Tensorflow 的对象检测 API,这说服我们把我们的手放在这个很酷的东西上,并试图找到圣诞老人。
代码可在这个 github repo 获得。从这段代码生成的模型可以扩展到寻找其他角色,无论是动画还是现实生活中的角色。
这是圣诞老人发现者的行动。🎅🏻
收集数据
和任何机器学习模型一样,最重要的方面是数据。因为我们想找到不同类型的圣诞老人、动画、泥塑、装扮成圣诞老人的人,所以我们的训练数据必须多样化。为了收集数据,我们编写了一个流处理器,它使用 VLC 从任何在线来源传输视频并从中捕获帧。流处理器捕获视频中的帧,而不必等待视频加载,即,如果当前播放的视频在 2 秒标记处,则流处理器将从 4 或 5 秒标记处捕获帧。作为奖励,你可以用 ASCII 码观看视频,这是最酷的观看视频的方式🤓。使用流处理器的指令可在这里获得。
Video of Santa Claus surfing in ASCII
这里是我们收集的不同类型的圣诞老人图像的一个小集合。所有这些图片都是从 YouTube 上收集的。如你所见,这里有不同种类的动画和真人圣诞老人的图像。
Different type of Santas
标注数据
下一步是标记数据,即围绕圣诞老人的脸画一个边框。标记图像的一个常见选择是使用 labelimg 工具,但是我们使用了一个从这篇文章引用的自定义脚本。
要给图像加标签,先点击人物脸部的左上角,然后点击其脸部的右下角。如果图像中没有字符,双击同一点删除图像。该脚本的代码可从这里获得。
创建张量流记录文件
将边界框信息存储在 csv 文件中后,下一步是将 csv 文件和图像转换为 TF 记录文件,这是 tensorflow 的对象检测 API 使用的文件格式。将 csv 文件转换成 TF 记录的脚本可以在这里找到。
还需要一个 protobuf 文本文件,用于将标签名转换为数字 id。对于我们来说,它只是一个类。
item {
id: 1
Name: santa
}
创建配置文件
为了训练,我们使用 faster_rcnn_inception_resnet 配置文件作为基础。我们将配置文件中的类的数量参数更改为 1,因为我们只有一个类——“Santa”,并将输入路径参数更改为指向我们在上一步中创建的 TFrecord。我们使用了 faster _ rcnn _ inception _ resnet 的预训练检查点。我们使用这个模型是因为模型精度比模型训练速度更重要。还有其他模型提供不同的训练速度和准确性,可以在这里找到。
训练
训练代码在我们的本地机器上运行,以检查一切是否正常,一旦正常,它就被部署到谷歌云平台的 ML 引擎。该模型被训练了超过 100,000 步。
Animation
该模型在动画和现实生活中表现都很好。
Real Life
导出模型
训练完成后,模型被导出,用于在不同的图像上进行测试。为了导出模型,我们选择了从训练作业中获得的最新检查点,并将其导出到冻结的推理图中。将检查点转换为冻结推理图的脚本可以在这里找到。
我们还为我们的模型构建了一个网页,它从 google 搜索中提取图像,并试图在返回的图像中找到圣诞老人。该网页上的结果被过滤以显示置信度超过 60%的边界框。这是网页的快照。
We Found Santa Claus!!
后续步骤
当训练作业运行时,我们注意到 TotalLoss 很快下降到 1 以下,这意味着模型在寻找圣诞老人方面做得很好。
TotalLoss
我们知道我们的模型不会完美。虽然模型在相当准确地找到圣诞老人方面做得很好,但我们也有假阳性。在这种情况下,假阳性是没有圣诞老人的图像,但模型预测有。
False Positive
在使预测更加准确和减少假阳性的数量方面,还有很大的改进空间。
接下来的步骤是了解更多关于配置文件中不同参数的信息,并更好地了解它们如何影响模型的定型及其预测。
结论
我们希望您现在可以为自己的数据集训练对象检测器。在这一点上,我要感谢希瓦吉·什罗夫和 T2·乔希·库尔茨,他们在项目建设中发挥了同等的作用。
感谢你的阅读,希望你喜欢这篇文章。如果您有任何问题或建议,请随时通过 LinkedIn 联系我们,地址是 Varun Vohra 和 Shivangi Shroff 。我们非常乐意收到任何反馈。
食品配送时间预测介绍
提示:不仅仅是谷歌地图
Prepare yourself for food. — Photo by Dan Gold on Unsplash
配送时间预测长期以来一直是城市物流的一部分,但最近精确化对于 Deliveroo、Foodpanda 和 Uber Eats 等按需配送食品的服务变得非常重要。
这些服务和类似的服务必须在收到订单后 30 分钟内送达,以安抚用户。在这些情况下,+/- 5 分钟可能会产生很大的差异,因此,初始预测的高度准确性以及任何延迟的有效沟通对于客户满意度非常重要。
It’s a real problem. Credit: @bustle.
在本文中,我将讨论我为一家食品配送初创公司构建(真实世界)配送时间预测模型的经验,以及它是如何给出比我们训练有素的运营团队更好的预测的。
本文将涉及机器学习的技术主题,同时重点关注创建功能良好的预测模型所需的业务知识。为了你的阅读乐趣,也将包括进一步阅读的外部资源的链接。
我们的路线图:
- 📝问题陈述
- 🔢数据
- ⚒️工具包
- 📈模型结构
- 🤔改进估计
问题陈述
首先,让我们制定一个我们可以使用的问题陈述。这将有助于我们专注于目标。
我们希望建立一个模型,它将把有关食品交付的数据作为输入,然后输出所需的提货时间,以传达给司机。
其他一些需要注意的事项:
- 交货量很大,可以假定需要汽车。
- 供应商(或多个供应商)的范围从餐馆到餐饮供应商,可以有非常不同的特点。
- 可以假设司机在指定的接车时间准时到达供应商处。在现实中,这并不总是正确的,但是如果有足够数量的驱动程序,这可以保持在最小的数量。
- 食物不应该送得太晚,因为顾客会等待和生气,也不应该送得太早,因为在顾客准备吃之前,食物必须放在外面。
Late deliveries = melted ice cream; every child and sugar-loving colleague’s worst nightmare. Photo credit The Food Passionates/Corbis.
数据
作为我们模型的输入,我们有三类典型的此类问题的数据:
- **点餐:**人们在点什么?他们向哪个供应商订购?什么时候送货?
- **顾客:**谁在点菜?它们位于哪里?
- **交付结果:**对于之前的交付,我们的表现如何?每一步花了多长时间?
交货可用数据的一个例子是:
Delivery Team : Deliveries 'R' Us
Order_ID : 12345
Agent_Name : Bob Driver
Supplier : Delicious Donuts
Customer : Big Corporation Inc.
Pickup_Address : Shop 1, Busy Street, 23456, Hong Kong
Delivery_Address : Level 9, Skyscraper, 34567, Hong Kong
Delivery_Time : 29/05/2016 08:00:00
Order_Size : $500
由于我们有大量的文本,我们需要首先处理数据,使其成为机器可用的格式。
可以使用正则表达式处理这些地址,以获得更多结构化信息。重点是:楼层、楼栋、邮编、地区、国家。
经过上述处理后,可以将建筑物、邮政编码、区域和邮政编码与其他变量组合起来进行一次热编码。一个热编码将为每个可能的文本创建许多二进制变量。这些数字变量可以输入到我们的模型中。你可以在这里阅读更多关于一次热编码的介绍。
培养
为了训练模型,我们将使用以前交货的数据,这包括预测交货时间和实际交货时间(我们练习的目标变量)。出于本文的目的,我们将使用大约 1000 个数据点。
工具包
在深入研究之前,我们应该考虑什么模型最适合解决我们所面临的这类问题。Scikit-Learn 文档中的下图给出了一个决定应该使用哪种算法的好方法。
Who said Machine Learning is a tough discipline? Credit: Scikit-Learn Documentation.
让我们看看我们对我们的问题有什么了解:
- 如前所述,我们有 1000 多个数据点用于训练。
- 模型的输出应该是一个数值。
- 由于一次性编码,我们剩下了相当多的二进制变量,这意味着许多特性可能是重要的。
考虑到这一点,我们可以按照上面的图表来实现岭回归和具有线性核的 SVR。为了简单起见,我们将只使用岭回归,并添加一个随机森林回归器,以查看它对数据的不同表现。
如果您对更多的背景感兴趣,您可以阅读 Scikit-Learn 文档中相应页面上的算法:岭回归、 SVR(支持向量回归)和随机森林回归。
性能指标
我们还应该注意我们将用来判断模型有效性的指标。
我们可以用平均绝对误差( MAE )来快速了解我们的性能。这告诉我们我们的交付时间估计和实际交付时间之间的平均差异。
更进一步,我们可以定义另外两个特定于领域的指标:
- 基本准时(< 5 mins late)
- OK, we’re a 少晚(<晚 10 分钟)
这两个指标告诉我们让用户不高兴的频率。如果我们迟到 15 分钟或 25 分钟,对用户来说并不重要,我们只是真的迟到了。MAE 没有意识到这一点,会认为一个比另一个差,但就业务而言,这实际上是一回事,我们的模型理解这一点很重要。
注意:我们实际上将使用这些指标的倒数(即延迟 5 分钟以上的交付),因为它们更容易使用。
因此,快速回顾一下:我们知道我们需要做什么,我们知道我们必须用什么数据来做这件事,我们也知道我们将要做的方式,所以让我们开始做吧!
模型结构
Thankfully data science doesn’t require so many hands. Photo credit: Rand Faith.
让我们想一想送餐都涉及哪些内容。我们可以把它分成三个主要部分:
- 从供应商那里拿食物。
- 从供应商到客户。
- 把食物交给顾客。
我们可以预测每个组件所需的时间,然后将这些时间加在一起,得到最终的交付时间。
Delivery Time = Pick-up Time + Point-to-Point Time + Drop-off Time
或者,我们可以训练一个模型来预测整个交付时间。我们应该打破这个的原因是创造专业模型,它将比一个通用模型有更好的能力。如果我们用人来代替模型,这就说得通了。在你的业务开发团队中,你会有一个非常了解供应商以及他们可能需要多长时间交货的人。在你的客户服务团队中,你会有一个非常了解每个客户的人,他可以根据他们的位置和建筑来预测送货可能需要多长时间。我们在构建我们的流程时考虑到了这一点。
现在我们有了三个阶段,让我们深入其中并构建我们的模型。
供应商提货
当司机到达一个目的地时,他被要求找到一个停车场,拿起食物并回到车上。让我们探讨一下在这个过程中可能出现的潜在并发症。
- **没有公园:**对于位于市中心的餐馆来说,与位于居民区的餐馆相比,这要困难得多。为了获取这些信息,我们可以使用邮政编码或纬度/经度信息。我发现邮政编码特别有价值,因为它们的特殊结构捕获了高级通用信息。
- **难以进入:**餐馆往往很容易进入,因为它们依赖于此来为顾客服务,但餐饮服务提供商可能位于工业区,而且没有明显的入口,这使得进入变得更加困难。与上面类似,我们可以在添加供应商类别时使用位置信息。
- **食物未准备好:**由于订单量可能很大,食物未准备好的情况并不少见。为了解决这一问题,可以在取餐当天联系餐饮服务商,检查食物是否会按时准备好。对这些信息的回应将是理解我们时机的有用标志。特定供应商是否有历史记录也是有用的输入。最后,订单大小是一个很好的指标;准备少量食物时不会出什么问题,但如果是 100 人份的食物,就更有可能出问题。
- **订单中缺少一些东西:**司机应该在到达时检查订单,在某些情况下,他们可能会发现订单中缺少一些东西。这意味着他们必须等待额外的食物准备好。同样,这可能取决于供应商以及他们提货时的繁忙程度。
对于这部分问题,我们将使用以下数据点:
Supplier : Delicious Donuts
Customer : Big Corporation Inc.
Pickup_Address : Shop 1, Busy Street, 23456, Hong Kong
Delivery_Time : 29/05/2016 08:00:00
Order_Size : $500
执行上述处理后,可将数据输入我们的 Scikit-Learn 模型,结果如下:
Baseline Results:
Mean Absolute Error: 544 seconds
Greater than 5 mins late: 55%
Greater than 10 mins late: 19%
Random Forest Results:
Mean Absolute Error: 575 seconds
Greater than 5 mins late: 42%
Greater than 10 mins late: 22%
Linear Regressor Results:
Mean Absolute Error: 550 seconds
Greater than 5 mins late: 44%
Greater than 10 mins late: 17%
Ensemble Results:
Mean Absolute Error: 549 seconds
Greater than 5 mins late: 45%
Greater than 10 mins late: 17%
可以看出,如果我们使用平均绝对误差(MAE)的基本度量,所有模型的表现都比基线模型差。然而,如果我们看一下与食品配送业务更相关的指标,我们会发现每种模式都有其优势。
随机森林模型将延迟超过 5 分钟的订单减少了近 25%。线性回归器在减少延迟 10 分钟的订单方面做得最好,大约 10%。有趣的是,集合模型在两个指标上都做得相当好,但值得注意的是,它在三个模型中具有最小的 MAE。
当选择正确的模型时,业务目标是第一位的,它决定了我们对重要指标的选择,从而决定了正确的模型。有了这个动机,我们将坚持整体模型。
点对点
出于多种原因,估计目的地之间的旅行时间是一项棘手的任务;有成千上万的路线可供选择,不断变化的交通状况,道路封闭和事故;所有这些都为您创建的任何模型提供了如此多的不可预测性。
幸运的是,有一群人对这个问题进行了长时间的思考,并收集了数百万个数据点来帮助更好地了解环境。谷歌进来了。
Our friend (and potential future overlord). Credit: Wikimedia.
为了预测点到点的旅行时间,我们将使用已知的上车点和下车点调用 Google Maps API。返回的结果包括考虑交通和最坏情况场景的参数,我们可以将这些参数用作模型的输入。对 API 的调用非常简单,看起来像这样:
gmaps = googlemaps.Client(key='MY_API_KEY')params = {'mode': 'driving',
'alternatives': False,
'avoid': 'tolls',
'language': 'en',
'units': 'metric',
'region': country}directions_result = gmaps.directions(pick_up_location,
drop_off_location,
arrival_time=arrival_time,
**params)
有了这个,我们就可以对一个已经深思熟虑过的问题得到一个高度准确的结果。重要的是不要重做工作,
如果你的问题已经有了足够好的解决方案,就不要多此一举了。
在实施这一模式之前,我们的组织使用公共的谷歌地图界面来预测送货时间。因此,我们的新模型在这部分旅程中的性能与基线完全相同。因此,我们不会在这里计算任何比较。
一个重要的旁注是地址的格式并不总是正确的!当查询谷歌地图时,总有可能他们会说“嗯……我不知道”,对此我们必须有一个答案。这是人类和机器必须如何合作的一个很好的例子。每当地址格式不正确时,操作员都有可能介入并澄清地址,甚至给客户打电话澄清信息。
这样,我们就可以继续我们模型的第三部分了。
顾客下车
一旦司机到达地点,他们必须找到一个公园,把食物送到正确的人那里,并得到最后的签字。这一过程中的潜在问题包括:
- **停车场有高度限制:**这很简单,但许多送货都是在货车上进行的,在这种情况下,可能会有高度限制,阻止司机使用主入口。
- **建筑没有停车场:**这是显而易见的。没有停车场意味着司机在送货时必须花时间开车四处寻找停车的地方。
- 大楼安全问题:大多数现代办公大楼都需要安全卡才能进入。在最好的情况下,司机可以简单地刷卡通过,但在最坏的情况下,司机可能被要求去一个单独的位置,注册一张卡,然后使用后门。
- 高楼层或棘手位置的客户:这听起来可能很荒谬,但有些办公楼很难通过不同楼层的不同电梯,对于较小的公司来说,它们可能隐藏在迷宫般的走廊中。
有了所有这些,邮政编码是一个很好的指标,因为它告诉我们,如果我们可以期待一个商业区或住宅区。我们还可以进一步深入地址。例如,如果我们有 40 级,很明显,交付是在一个大的塔块,可能会有一个复杂的安全程序。
对于这部分问题,我们将使用以下数据点。
Customer : Big Corporation Inc.
Delivery_Address : Level 9, Skyscraper, 34567, Hong Kong
Delivery_Time : 29/05/2016 08:00:00
Order_Size : $500
在执行典型的处理和运行我们的模型之后,我们看到以下内容:
Baseline Results:
Mean Absolute Error: 351 seconds
Greater than 5 mins late: 35%
Greater than 10 mins late: 0%
Random Forest Results:
Mean Absolute Error: 296 seconds
Greater than 5 mins late: 15%
Greater than 10 mins late: 7%
Linear Regressor Results:
Mean Absolute Error: 300 seconds
Greater than 5 mins late: 14%
Greater than 10 mins late: 5%
Ensemble Results:
Mean Absolute Error: 293 seconds
Greater than 5 mins late: 13%
Greater than 10 mins late: 6%
在这里,我们可以看到 MAE 减少了 17%,比以前好得多。类似地,我们看到超过 5 分钟的订单减少了 63%。另一方面,该模型确实将延迟订单数从 0%增加到 6%。同样,我们面临着各种模式之间的权衡,这两种模式各有千秋,我们必须让我们的业务 KPI 成为决定性因素。
把所有的放在一起
我们现在可以用下面的公式将我们的模型结合在一起:
Delivery Time = Pick-up Time + Point-to-Point Time + Drop-off Time
+ Hyperparamater
注意这次增加了一个超参数。我们将加入这一点,以考虑到我们在数据中看到的任何其他奇怪的影响,例如接站时间总是提前 5 分钟,以满足司机的期望。我们将设置该参数,以便在计算组合结果后最小化最终误差指标。
综上所述,我们得到了最终结果:
Baseline Results:
Mean Absolute Error: 1429 seconds
Greater than 5 mins late: 60%
Greater than 10 mins late: 19%
Ensemble Results:
Mean Absolute Error: 1263 seconds
Greater than 5 mins late: 41%
Greater than 10 mins late: 12%
因此,我们的最终模型在所有指标上都比基线模型有了显著的改进——我们做到了!
That feeling when your food finally arrives! Photo credit: Sander Dalhuisen.
最重要的是,我们发现延迟 10 分钟以上的订单减少了近 40%!我们能够实现这一目标,是因为我们开发了三个独立的模型,这些模型针对各自特定的业务问题进行了优化。将它们结合起来,并在最后阶段进行微调,确保我们生产出的模型达到了专业人员的水平。
做出更好的估计(不改进你的模型)
拥有一个更加精确的模型当然很好,但是由于收益递减法则,这也需要付出更多的努力。相反,如果我们多考虑商业案例,少考虑机器学习,就会有其他解决方案。
迟到和早退
你可能一开始就记得,这个模型是针对餐饮配送的,也就是说我们提前知道配送时间。避免延迟交付的一个简单方法是获取模型输出的任何值并增加它,以确保我们足够早。
这不是一个很好的解决方案,因为太早也有一个问题,食物可能会变坏或没有准备好。但是,它确实提出了一个观点,即我们应该考虑''和''提前量的分布。也许早 10 分钟比晚 5 分钟更好。到目前为止,我们还没有针对这种情况进行优化,因此我们可以重新考虑这一点并进行相应的优化。**
交付窗口
另一件要考虑的事情是模型如何呈现给用户。如果用户被告知你会在下午 2 点到达,而你没有,他们会很沮丧。如果你告诉某人你会在下午 1:45-2 点到达那里,那么你可以在下午 1:50 到达,如果你晚了一点,你还有余地。
将机器学习问题作为实际现实世界问题的解决方案来考虑总是很重要的——这种背景通常可以导致“改进”,否则从模型本身是不可能的。
供应商反馈
这种模式的一个关键优势是能够有效区分供应商不同的准备时间。这告诉我们,供应商必须有非常不同的表现。
深入调查后发现,司机在一些供应商处花费的时间是他们的 3 倍。有了这些信息,回到商业领域,就有可能与供应商进行讨论并确定问题,从而减少在这些供应商处花费的时间,并通过减少变化来提高模型的整体性能。
包扎
我们从预测食物配送时间的问题陈述开始。我们决定使用什么样的数据以及应该做什么样的处理。我们思考什么是解决我们特殊问题的最佳模式。然后,我们将我们的问题分解为三个部分,以构建目标模型,最后将它们组合在一起,创建一个全功能的预测模型。然而,我们并没有止步于此,我们利用我们的业务知识来提高我们模型的有效性。
这导致延迟 10 分钟以上的订单减少了 40%,这可以直接转化为退款节省的资金。它还有助于减轻运营团队的负担,这意味着他们可以专注于更有意义的任务,如提高供应商效率。
如上所述,这是可用于应用机器学习来解决业务问题的一般程序。这种方法确保在以后为额外的几个百分点的改进进行优化之前,先把基础做好。这是我成功使用过的一个方法,我希望你也能成功。
**如果你喜欢读这篇文章,请不要忘记留下一两下掌声,或者三下……👏👏👏🔄
如果你想了解为什么使用高科技(比如这篇文章)并不总是最好的解决方案,请看这里:
在我们这个以技术为中心的世界里,将外包作为自动化可以节省您的时间和金钱
medium.com](medium.com/@jyesawtell…)**
未来是人类还是机器人?
这篇文章是关于做人的。最后有一些关于与技术共存的注释。我希望你读了这两部分。
那么未来是人还是机器人?
没有。
是电子人。实际上它不在未来,它已经在这里了。已经有一万年了。也许它已经在这里 10 万年了。
什么是电子人?半人半机器人?
看看你现在的样子。你怎么看这个?你在使用技术,对吗?
你正在利用你天生的技术能力,使你不仅仅是人类。
对吗?
或者这让你成为了一个普通人。
和其他一些与我们共享这个世界的生物一样,我们也是工具使用者。我们曾经使用的每一个工具都是技术。
是什么让我们变成这样?我们不是唯一的。乌鸦会这么做。其他灵长类动物。头足类使用工具(鱿鱼:我在谷歌上查了属)。这并不需要太多,但这一点点差别就是一百万英里。
这种差异与记忆有关。
召回至关重要。即使我们只能回忆起一点点,那么我们意识到一个过去。我们记得过去的一个自己。
这种记忆发生在现在,它不存在于过去,所以你可以说这是一个故事。一个关于我们过去的故事。一个猜想。
这种对过去的记忆,即使是短暂的过去,也是自我的叙述。我的故事。
这是关键。我们周围的故事。如果我们能讲述一个关于我们过去的故事,一个在现在的经历中得到证实并且有意义的故事,我们就内在地感觉到一个随后的现在。
这暗示着未来。在未来,我们可以对自己进行类似的描述。这些想法是故事,是我们不断告诉自己的故事,是一连串的文字、感觉和图片。
自我的分离或客观化也是其中的一部分。如果我从我的环境中分离出来,是其中的一个东西,如果你愿意,那么我就是在我的环境中识别事物。我的自我就是这些对象中的一个。
随着物体被识别为独立的东西,我可以开始创造一个幻想,将它们视为我的故事的一部分。
一旦一个物体在故事中获得了一个角色,它就获得了一个本质,一个故事的目的。它获得了一个概念生命,它的过去和未来与我们分享的现在融为一体;它成为我们自我概念的一部分,也许带有精神或迷信的成分,也许主要是实际的。最受欢迎的工具既有感性的概念部分,也有实用的概念部分。
这可能是你最喜欢的珠宝,一份特别的礼物,标志着充满感情的记忆,一辆车,一栋房子,你最喜欢的领带,等等..
如果你是一个游戏玩家,你会在每一轮游戏中参与这个最古老的仪式。在不认为这个过程有什么神奇之处的情况下,游戏制作者把一些东西放在你的环境中让你探索,作为在游戏中帮助你的工具,你把它们放在你的虚拟工具包里,你的记忆库,在需要的时候使用。
我看着我的父亲渐渐患上了痴呆症。随着他回忆能力的丧失,他对自己是谁的感觉以及对未来的任何猜测能力也丧失了。记忆是他能够识别自己的关键。
和许多患者一样,即使在接近尾声时,对漫长过去的回忆也更加生动。有一次,他把我的妻子误认为一位著名的女演员,并向她背诵了一个小时完美的俄罗斯诗歌,这让我们非常开心,回忆起 60 年前他是商船队的一名信号官。
所以记忆创造了一种对过去的感觉,一个故事,而故事可以是关于任何事情的,包括未来。
在未来,我们可能会使用一种工具来使事情变得更好。
我们作为人类的标志是我们的自我叙述,这是技术的起源。
Crow 工具用户也在做同样的事情。对过去的记忆对于制定改善未来的策略至关重要。在信息技术中识别有意义的物体是电子人的行为。一些乌鸦是有思想的,可以从其环境中的物体中分离出意义和目的,并可以思考未来。
技术是我们在环境中创造性使用的每一种工具。故事是概念工具,绘画是概念工具,衣服和斧头和耕作更实用,时尚和美化更有创意。
技术在许多可能的方面有所帮助;生产力、利润、生存、友谊、快乐和愉悦。它们很容易让人上瘾,它们被到处复制,因为对自己过去和未来的相同推测被称为学习。
当依附于情感驱动时,它就变成了学习的动力。
自从我们第一次像人类一样思考,我们就与科技共同创造了我们的世界。从字面上看,它像山一样古老,但实际上却很年轻,这是我们的标志。
电子人创造技术,并利用它来发挥他们的自然能力。
电子人利用科技将他们带离狭隘,走向普遍。
我们是电子人,我们一直都是;这不是什么新鲜事。葬盆、农业、时尚、无线电、火箭技术和机器人技术;只需向前几步;每一步都是一场革命。
医学进步已经在这里了。它们无处不在,导致了生活质量和寿命的革命。当然,有一些问题,但是问问大多数髋关节置换的人,他们对不再疼痛的金属或陶瓷关节感觉如何。
使用机器人技术来增强我们在非本地环境中的生存能力是非常自然的一步。坐在火箭里是同样的事情,我看不出使用宇宙飞船,用我的声音或手在手持设备上搜索谷歌,以及植入这种能力之间有什么区别。
所以我想知道你对人工智能、机器学习、机器人、增强现实、虚拟现实等有什么感觉?已经到了。
周围有很多担忧,关于失业,失去目标,机器人接管人类的想法。
我认为这是一种错误的思考方式。对于今天的年轻人来说,我们周围的技术只是正常的环境。所有的父母都知道他们会立刻收养它。
他们天生就是电子人。自从我们第一次想到一个更好的未来的策略,我们都成了电子人。机器人只是技术,只是工具。
直到机器人或人工智能对他们的环境做出情感反应,他们才会在早上带着对日出的喜悦醒来,并梦想他们今天可能会做什么。
我们将一如既往地使用技术,不管是好是坏,但不要担心机器人会接管,至少在你准备好放下自己的智能手机、拒绝服用头痛药或微波午餐之前不会。
所以我们在这里,电子人,情感生物通过技术增强我们的可能性。我们是战略性的——技术填满了我们的梦想,也填满了我们的噩梦。
你是你自己的故事的作者。
你有控制权,因为你是叙述者。你是你自己的领袖,你可以把自己置身于自己的故事中。
最平凡的是,你在正确的时间采取正确的步骤,准时开始工作;钱,钥匙,电话,我走了。
也许,今天早上,看到这个平凡的梦想是战略思维的奇迹,它真的是。你可以现在就重写你的故事,决定今天谁将是你自己的英雄,你将持有什么原则和价值观,你将如何管理你的感情、希望和担忧,你今天将取得什么成就;你将成为什么样的人。
我会说不要担心外面的其他机器人。如果你改变,他们也必须改变。但是他们保留他们的选择,这只是你故事中的反馈,你总是可以用新的选择来回应,并希望升级而不是失去生命。
做一个战略性的小机器人,在你的下一章中,给你自己一个正确的方向。你只需要抬起头,考虑各种可能性,反思(梦想家!)然后挑一个你觉得更好的新的。然后穿上你的新鞋重新走出来。
如何在机器人的世界里生存
机器人、聊天机器人、人工智能和其他都是工具,就像你的衣服和化妆品一样。
不要害怕充满机器人的未来。
- 因为未来就是现在
- 因为这些工具比以往任何时候都更能利用人的能力。
因此,将有很多事情要做,直到机器人今天饿着肚子、快乐地醒来并想去海滩,它们将仍然是我们使用的工具,而不是相反。
在机器人的世界里生存的方法是投入并使用工具。这可能需要一些练习和挑战,就像你学会开车或使用笔记本电脑一样。
为了在机器人的世界中生存,你需要与其他人竞争,利用技术来发挥他们的能力。就像平常一样。你已经这么做了,对吧?你,已经是一个电子人了,你一直都是,所以冷静点,伸手去拿开瓶器。
国家的财富或教育支出与其学生在 PISA 中的表现有关系吗?
Photo by Vasily Koloda on Unsplash
介绍
公立学校在古代就已为人所知,许多社会发展了多年,最终在 19 世纪形成了强制性的公共机构。世界各地的社区都很重视教育年轻一代,为他们提供更好的未来,因为教育不仅对相关的个人,而且对整个社会都有很多好处。国家之间的竞争也不是一个新概念,教育只是进行跨国比较时要考虑的众多因素之一。尽管如此,现在人们似乎不仅在本地,而且在国际上比以往任何时候都更激烈地竞争工作,教育是获得优势的最重要的手段之一。想知道什么能帮助学生为进一步的学习、职业和生活做好准备,可能有许多因素应该被考虑进去。我们可能会问的一个问题是,我们能说出国家财富或教育支出与学生表现之间的关系吗?我们试着用一些开放的数据集,Python 语言,回归分析来回答这个问题。对于那些喜欢 Jupyter 笔记本形式的人,这里有一个到我的 github 的链接,里面有一个完整的项目库。
PISA 是什么?
你首先需要问自己的是如何衡量表现,也就是说如何判断一个国家总体上比另一个国家做得更好?经济合作与发展组织(OECD)投入了大量的资源来设计一个合适的比较方法。从 2000 年开始,他们每三年进行一次复杂的研究。国际学生评估项目(PISA)评估 15 岁学生在义务教育结束时获得的全面参与现代社会所必需的关键知识和技能的程度。评估的重点是学校的核心科目科学、阅读和数学。评估不仅仅是确定学生是否能够复制知识;它还考察了学生如何从他们所学的知识中进行推断,并在学校内外的陌生环境中应用这些知识。这种方法反映了这样一个事实,即现代经济奖励个人的不是他们所知道的,而是他们能用他们所知道的做什么。PISA 的调查结果使世界各地的政策制定者能够将本国学生的知识和技能与其他国家的学生进行比较,根据其他教育系统实现的可衡量目标制定政策目标,并学习其他地方的政策和做法。
最新的 2015 年报告中最有趣的发现是:
- 新加坡在科学领域的表现优于所有其他参与国家/经济体。日本、爱沙尼亚、芬兰和加拿大是经合组织中表现最好的四个国家。
- 平均而言,经合组织国家近 20%的学生没有达到阅读能力的基线水平。自 2009 年以来,这一比例一直保持稳定[1,第 3-4 页]。
提取 PISA 数据集
现在,我们对性能度量有了更好的理解,我们可以开始提取 PISA 数据集了。该分析基于熊猫的数据框架。 Pandas 是一个 Python 包,提供快速灵活的方法来进行实际的、真实的数据分析。
让我们首先为整个项目导入必要的库。
接下来,我们将读入包含 2000 年至 2015 年测试结果的 csv 文件。我们看到有 3 个独立的文件,分别是科学、阅读和数学成绩,这是它们在 OECD 数据库中的显示方式。为了一次了解所有文件的含义,我们将把它们作为一个字典来读取,字典中有考试名称的关键字和包含结果的数据帧的值。
我们看到原始数据帧由许多不相关的要素组成,因此让我们通过删除一些列并重命名现有列来执行必要的清理。
最新的 PISA 结果是在 2015 年收集的,因此我们可以使用过滤器来提取这些行。下一步我们将摆脱字典形式,因为我们大大减少了数据量。我们现在可以将所有的数据框合并成一个,这样我们就可以在一行中得到每个国家的数学、阅读和科学的结果。
all_pisa_2015.head()
当查看此数据框时,每个国家的名称并不总是显而易见的,因此为了提高清晰度,让我们在表中包括国家的名称。要构建从国家字母 3 代码到国家名称的转换图,你可以使用 pycountry 库。该字典需要一些调整,以便与分析中稍后使用的其他数据源兼容。事实证明,不同数据库中国家的官方名称差异很大。顺便问一下,你听说过捷克吗?
#add column with country name
name_code_dict = create_name_code_dict()
code_name_dict = reverse_dict(name_code_dict)
add_country_name(all_pisa_2015, code_name_dict)all_pisa_2015.head()
很高兴看到不同测试对象之间的所有数据分布,但对于基本分析来说,计算每个国家的平均结果似乎是正确的。包含每个考试部分之间的关系可能会导致过度绘制和不必要地扩展回归分析。
提取 GDP 数据集
现在我们有了 PISA 结果,我们可以进入下一步,提取 GDP 数据。多年来,我们接受 GDP 作为衡量一个国家整体经济表现的诚实标准,因此我们将使用人均 GDP 指标来回答一个问题——在评估中,较富裕的国家表现更好吗?
首先,让我们为有测试结果的国家生成一个代码列表。我们将在下一个函数中使用它作为参数。
然后,由于世界银行 API 和 Python wbdata wrapper,我们可以轻松地将所需数据直接加载到 Python shell 中,知道我们对哪些指标感兴趣。要了解这个有用工具的更多信息,请访问这个博客帖子。
使用一个国家的国内生产总值指标,你会发现它有很多版本,你必须决定哪一个适合你的目的。我决定以人均 GDP购买力平价为基础,因为它能更好地比较国家间的财富。如果你不熟悉名义 GDP 和购买力平价 GDP 的区别,我建议你阅读这篇文章。
同样,我们的数据框架需要一些争论。让我们首先过滤与 PISA 结果相同年份的所有行,即 2015 年。如你所见,GDP 数据是一个多指数数据框架。我们可以将索引重置为简单的整数,并使用列标签来执行各种操作。最后,我们将添加一个带有国家代码的列,以便稍后进行合并。
PISA 平均成绩与人均 GDP 的回归分析
回归分析应该能够产生一个方程,该方程将使用一个或多个自变量(人均国内生产总值)来预测因变量(平均 PISA 结果)。仅仅使用一个独立变量似乎不足以解释因变量的所有可变性,但是我们仍然可以试图理解它本身如何影响结果。运行回归时,您试图发现自变量上的系数是否真的与 0 不同(因此自变量对因变量有真正的影响),或者与 0 的任何明显差异是否只是随机的。零(默认)假设总是每个独立变量绝对没有影响(系数为 0),你正在寻找拒绝这一理论的理由[6]。我们将使用普通最小二乘法( OLS )建立 PISA 结果和人均 GDP 之间的关系模型。
在执行回归之前,我们需要快速查看一下我们清理过的数据,以便预先检查关系。让我们使用 alpha3 代码值合并两个数据帧,然后查看散点图。
我们可以看到,图中的点不一定形成一条直线,这提醒我们应该采用 GDP 数据的对数来进行线性回归分析。这有助于使我们的分布不那么偏斜。
现在我们的数据形成了类似直线的东西,但仍然有一个点似乎是线性模型的异常值——它是卢森堡。这个国家最近很多年都被认为是世界上第二富裕的国家。卢森堡是一个人均收入相对较高的地方,根据 Business Insider 的报告,这是因为有大量的人在这个小国工作,而生活在周围的法国、德国和比利时(甚至可能是整个人口的四分之一,这些人没有包括在 GDP 计算中[7])。将卢森堡排除在回归之外似乎是一个好主意,这就是为什么我们将在两个版本中执行分析以比较结果。
在第一个版本中,R 平方值表明人均国内生产总值和 PISA 平均测试结果之间有 0.62 的相关性。当我们将卢森堡排除在数据集之外时,由线性模型解释的变量的百分比增加到 0.70,这仍然是适中的。
解释我们的模型系数,我们可以说,人均 GDP 增加 1%后,PISA 的平均结果应该上升 0.68 点。回归输出的其他重要特征是:
- 标准误差,是对系数的标准偏差的估计,它在不同情况下的变化量,
- p 值,有助于确定结果的显著性。通过将变量的 t 统计量(系数除以其标准误差)与学生的 t 分布中的值进行比较,可以得到该值
- 置信区间,它告诉我们大多数变量分布在哪里
我们的标准误差在+/- 7 点左右波动。我们有一个非常小的 p 值,这表明反对零假设的有力证据。这意味着我们可以拒绝零假设,即人均 GDP 对 PISA 结果没有任何影响。换句话说,假设您的模型被正确地指定,您可以 100%正确地说变量正在产生一些影响。考察置信区间,我们看到可以 95%确信“真实”人均 GDP 系数在 0.53 到 0.82 点之间。
让我们看看使用回归系数拟合到数据中的曲线。
总结第一部分,我们可以非常肯定地说,国家的人均 GDP 对 PISA 测试的平均结果有一定的影响。不幸的是,即使相关率高于 70%,也无法证实这种关系是因果关系,这意味着仍然很难说,国家的财富是学生在评估中表现优异的原因,还是相反。
提取每个学生的政府教育费用
分析的前一部分表明,有理由相信较富裕国家的学生在评估中得分较高,这意味着他们为全面参与社会做了更好的准备。影响结果的因素可能有很多,但让我们更深入地看看另一个因素——政府的教育支出。我们可以问一个问题,更高的公共开支对考试成绩有正面影响吗?
让我们假设,在每个学生 15 岁参加 PISA 测试之前,他或她可能已经花了 12 年时间在各种形式和机构中学习。从幼儿园开始,我们可以根据另一个假设计算每个学生的费用,即每个学生在学前教育机构度过 3 年,在小学度过 6 年,然后在初中度过 3 年。这样,我们将在评估之前计算每个学生的教育总成本。让我们首先使用两个指标来计算每个教育层次上每个学生的年支出:
- 来自联合国教科文组织数据库的政府教育支出(按购买力平价计算)
- 官方年龄人口(男女)来自世界银行 API
gov_edu_expenses.head()
让我们打扫卫生吧。首先,我们需要只过滤我们感兴趣的 3 个教育水平的费用行。然后我们将删除几个不相关的列。
basic_edu_exp.head()
为了获得带有每个教育水平标签的列,我们将旋转表格。我们得到了一个附带多索引的数据框,但是我们可以在下一步中轻松地重置索引。最后,我们将重新安排栏目顺序,并添加带有国家代码的新栏目,以提高可读性。
basic_edu_exp.head()
一旦我们有了全球的教育支出,让我们来看看某一年各个层次的学生人数。我们将使用人口这一官方年龄指标,因为它告诉我们在给定的一年里有多少孩子适合每一级的教育。这只是入学学生真实人数的近似值,但由于缺乏其他数据,它仍然具有很大的信息量。
basic_student_pop.head()
同样,我们需要执行一些小的清理,比如重置多索引或统一标签。
basic_student_pop.head()
为了最终获得每个学生的政府开支,我们需要转换“时间”列数据类型,以便进一步合并。我们将使用“正确”的方法合并框架,因为我们希望只保留 2003 年至 2014 年的数据。
edu_data_joined.head()
之后,我们做除法,清理我们的数据框架。
edu_data_per_student.head()
正如我们看到的,NaN 值开始出现和使用。isnull()方法,我们可以检查在整个数据框中是否有更多的。有几种方法可以解决这些不足,但是在这种情况下,使用 Python 内置的函数 interpolate 似乎是合理的。为了不填补空白,当我们没有足够的信息时,让我们做一个假设。对于数据集中的每个国家,首先检查我们感兴趣的给定时间段内的 NaN 数量,例如 2003-2005 年的学前教育。如果出现任何缺失,检查给定教育水平的整个列。如果 NaN 的比率低于 50%,我们将对整个列进行插值,在其他情况下,我们将删除该国家。
由于我们的假设,我们不得不从原始数据集中去掉 10 个国家。
PISA 平均成绩与政府人均教育支出的回归分析
我们的最后一步是回归分析,以检查两个变量之间是否存在相关关系。让我们先合并数据帧并检查散点图。
正如我们看到的,我们将需要我们以前的技巧,使数据更加“线性回归友好”。让我们首先记录费用值,并绘制另一个图表。
这一次,除了卢森堡之外,似乎还有一个例外——那就是巴西。对于一个教育支出如此巨大的国家来说,它的 PISA 成绩相对较低。这可能是教育系统效率低下的一个迹象,但我们不要过分解读。
数据中的所有调整再次导致相关值增加——从 0.31 增加到 0.68 点。解释我们的模型系数,我们可以说,在每个学生的政府支出增加 1%后,PISA 的平均成绩应该上升 0.68 分。
我们看到,在排除了一些国家之后,我们的数据非常符合计算结果。关于这个图还有另一个具体的事情,似乎我们有一组国家集中在这个点周围,有 500 个 PISA 点和 11.5 英镑的支出,而其他支出较少的国家形成一条线。这就提出了一个问题,有没有可能在达到每个学生的费用的某个点后,我们看不到评估分数有太大的差异?
摘要
总结所有的结论,我们可以说,PISA 成绩和国家人均国内生产总值之间存在适度的正相关关系。这不仅仅是一个潜在的 matmat mater,因为分析真实的教育支出给了我们同样的结论。即使较富裕的国家和那些在教育上分配更多资源的国家得分较高,仍然不可能说明这种关系的方向。这可能是国家的财富是高分的原因,也可能是这种情况,一个有效的教育系统产生了聪明的人,他们追求增加他们的国家收入。文中分析的样本也不够大,不足以对这种关系得出强有力的结论。教育有效性本身可以用不同的方式来衡量。
这个分析留给我们的问题多于答案,这也是我决定写第二部分的原因之一。在 PISA 的表现中,可能有许多因素值得分析。我们可以尝试一些使用聚类方法的无监督学习来识别其他关系,这可能看起来不那么明显。我们可以检查它们中许多的相关强度,并只选择最相关的。然后,我们可以尝试拟合不同次数的多项式,并对它们进行交叉验证,以检查测试模型的预测能力。我希望你喜欢我的工作,我期待着尽快描述结果!
Github 项目库:github.com/mklajnerok/…
Jupyter 笔记本来源:https://github . com/mklajnerok/PISA/blob/master/PISA _ basic/notebooks/PISA _ project _ part 1 . ipynb
来源:
- [1]www.oecd.org/pisa/pisa-2…
- [2]https://data . OECD . org/pisa/Reading-performance-PISA . htm # indicator-chartOECD(2017),阅读表现(PISA)(指标)。doi: 10.1787/79913c69-en(于 2017 年 9 月 11 日获取)
- [3]https://data . OECD . org/pisa/Mathematics-performance-PISA . htm # indicator-chartOECD(2017),数学成绩(PISA)(指标)。doi: 10.1787/04711c74-en(于 2017 年 9 月 11 日获取)
- [4]https://data . OECD . org/PISA/Science-performance-PISA . htm # indicator-chartOECD(2017),Science performance (PISA)(指标)。doi: 10.1787/91952204-en(于 2017 年 9 月 11 日获取)
- [5]https://data help desk . world bank . org/knowledge base/articles/889392-API-documentation
- [6]http://DSS . Princeton . edu/online _ help/analysis/interpreting _ regression . htm
- [7]http://www . business insider . com/the-23-世界上最富有的国家-2015-7?IR=T
- data.uis.unesco.org/
北欧人有智慧吗?—人工智能的现状(第二部分)
在一篇由两部分组成的博客中,我们看看人工智能是什么,它的影响,然后探索人工智能在北欧的状态。这是第二部分,关于北欧人。
在我们之前的博客中,我们深入探讨了人工智能以及人工智能世界正在发生的事情,尤其是在美国。然后我们继续我们在北欧的人工智能之旅,并对我们发现的和没有发现的东西感到有点惊讶。那么,北欧人有智慧吗?是的,但是人造的那种呢?简而言之,答案也是肯定的,但各种人工智能计划散落在各处,通常在不同于“人工智能”的标题下,没有明确的议程,只有大学、老牌企业或政治家的部分兴趣。然而,人工智能正在创业社区和学生中蓬勃发展。
提问
我们想回答几个问题。北欧学术界、人工智能研究领域发生了什么?谁是领先的学者?AI 领域活跃着哪些投资人、公司、创业者?北欧哪些是领先的人工智能热点?北欧人和领先的人工智能国家相比如何?
我们与很多人交谈,研究了北欧的 129 家公司。我们把这个博客分成两个部分:首先是学术界、研究机构和科学组织,其次是商业和技术界;公司、投资者、企业家和热点。由于人工智能是一个研究密集的领域,让我们从学术开始。
学术界、研究机构和科学组织
从瑞典开始,我们求助于斯德哥尔摩皇家理工学院( KTH )计算机视觉和主动感知系(机器人感知和学习,RPL)的机器人感知教授。Stefan 对 AI 的定义最简单;“它做人类做的事情”。
斯蒂芬·卡尔松描绘了一幅艾在瑞典的凄凉景象。“传统的老牌企业和初创企业之间有很大的区别,”他表示。“我一直收到斯德哥尔摩人工智能初创公司和见面会的邀请。”
他认为,与此同时,老牌公司对此兴趣不大。也许他们专注于当前的业务,以及传统行业的生产力。我们很少看到瑞典大公司对我们的能力或雇佣我们的学生提出要求。解释可能是,人工智能的应用对新的创业公司和软件公司来说更自然。然而,随着对自动驾驶汽车的更多关注,沃尔沃和斯堪尼亚也越来越关注 KTH 的研究和学生。也有一些新的公司,如 Context Vision、Tobii 和 Electronic Arts,一直在接触。"
“与学生感兴趣的东西相比,这是一个惊人的差异”,他继续说道。“这真的是人工智能课程的热潮和巨大的兴趣。原因可能是学生们正在考虑 40 年以上的技术和工程职业生涯,并希望进入面向未来的领域。他们似乎对爱立信和 ABB 这样的老公司不感兴趣。”
这意味着我们可能会在未来几年看到许多新的人工智能创业公司,由有才华的学生创办或加入,他们希望在现有企业之外探索人工智能的机会。但是大学里的实际研究呢?
“在瑞典,人工智能研究的融资并不多。不过也有一些突破性的领域,比如计算机视觉、自然语言识别和机器人技术。但总的来说,学术界和传统企业似乎都需要很长时间才能实现转型,这并没有真正发生。相比之下,谷歌、苹果和脸书在人工智能方面的转变非常迅速。在研究领域,资金周期很长,项目需要 5 年时间,而且资金往往流向已经存在的领域,而不是新的领域。欧洲正在落后于美国,这是一个普遍问题。”
其余的北欧国家呢?斯特凡·卡尔松认为挪威、芬兰和丹麦的情况可能一样糟糕。人工智能的大推进似乎不会发生在北欧的任何地方。
为了进一步探索,我们求助于林雪平大学计算机科学副教授、WASPWallenberg 自治系统项目研究生院主任、 SAIS 瑞典人工智能协会主席 Fredrik Heintz 。WASP 是瑞典最大的个人研究计划,十年内拨款 18 亿 SEK,支持自主系统和软件开发的战略基础研究。
其目标是“将瑞典推进到这两个领域的国际公认的领先地位。”听起来像是一个令人惊叹的人工智能项目,但它真的是关于人工智能的吗?“不明确”,弗雷德里克说,“我认为这是不幸的。WASP 中很少有研究人员具有人工智能背景,因此人工智能的结果有被遗漏的风险。与此同时,许多研究可能会触及与人工智能相关的问题,例如机器学习。”
Fredrik 证实,AI 在瑞典不是一个统一的研究领域,而是跨越几个主题,如自然语言处理、信息检索、机器学习、多代理系统和计算机视觉。弗雷德里克说:“这是很多活动,但并不总是贴上人工智能研究的标签。”。
此外,“人工智能不是一个非常流行的术语”,弗雷德里克说。“一个原因是,在 80 年代,所谓的专家系统引起了强烈的反对。这些系统试图对专家知识进行编码,以提供决策支持,这些支持本应彻底改变医疗保健等行业,但却没有达到夸大的预期。今天,类似的系统经常被有效地使用,但是没有人工智能的标签。现代版本通常被称为决策支持工具或问答系统,最著名的例子是 IBM Watson。这种被认为的失败玷污了瑞典的人工智能一词。
“人工智能在瑞典发展缓慢的另一个原因是,传统的瑞典工业为学术研究设定了议程,他们普遍没有看到对人工智能的重大需求。瑞典政府还把重点放在了可以雇佣数千名员工的行业,而不是员工数量明显较少的高科技公司,如 Spotify 和 Klarna。
“对更传统行业的关注也导致了大学对电气工程的重视超过了对计算机科学的重视。然而,随着电子工程和计算机科学的融合,这种情况正在改变。如果人工智能能够成为这种统一的驱动力,那就太好了。”
正如 KTH 一样,在林雪平大学,现在人工智能蓬勃发展,超过 200 名学生正在学习一门人工智能课程和几门与机器学习相关的新课程。
人工智能看起来更像是一个联合了各个领域的交叉学科,而不是它自己的领域。所以,总的来说,有很多正在发生的事情,但是没有一把通用的雨伞来保护所有的人工智能。弗雷德里克总结道:“也可能是因为在美国,他们更擅长谈论人工智能,而我们实际上更擅长做这件事。”。“我们在大学和研究机构有能力,有了正确的方向,我们可以很容易地成为一个拥有正确激励和适当资金的领先国家”。
此外,他说,请关注 2018 年在斯德哥尔摩举行的三个主要人工智能国际会议;国际机器学习会议( ICML )、自主智能体和多智能体系统会议( AAMAS )和国际人工智能联合会议( IJCAI )。
在芬兰,我们求助于 Ville Kyrki,他是阿尔托大学电气工程学院的副教授。他是智能机器人研究小组的负责人。“芬兰可能是北欧最(人工)聪明的国家之一”,维尔说。"机器人学是一个很强的领域,机器学习有很长的历史."例如,Teuvo Kohonen 教授是人工神经网络和自组织地图的先驱,有时也被称为 Kohonen 地图。Ville 还可以看到几家使用机器学习工具的衍生公司,大多数都处于创业阶段。关于机器人的智能,有一家令人兴奋的公司叫 Zen Robotics,它正处于规模化阶段。维尔指出有两种研究。一个是自主系统、机器和车辆(这不是人工智能本身,而是使用人工智能工具和机器人)。这个领域已经相当成熟了。另一个是机器人公司,还有一些较小的机器人公司,如通用智能机器公司(GIM)。阿尔托大学的研究集中在两个领域;1)自主机器/车辆,以及 2)服务机器人,尤其是在医疗保健领域。总的来说,有很多研究是针对传统行业的,如汽车、采矿自动化和林业自动化,典型的北欧企业。
还有一些其他著名的北欧学者,以各种方式活跃在人工智能、机器人和机器学习领域:
- Finn Verner Jensen ,丹麦奥尔堡大学计算机科学系名誉教授
- Agnar Aamodt ,挪威 NTNU 挪威科技大学计算机科学和人工智能教授兼副系主任
- Erik Sandewall ,瑞典林雪平大学计算机科学教授
- 瑞典皇家理工学院(KTH)计算机科学与通信学院教授丹妮卡·克拉吉·詹斯费尔特
- 德夫达特·杜巴什,瑞典查尔姆斯理工大学计算机科学与工程系教授
- Teuvo Kohonen ,杰出的芬兰学者和研究员,现任芬兰科学院荣誉退休教授。
在瑞典,有许多组织在瑞典组织科学研究以及与商业和企业的互动:
- 瑞典皇家工程科学院( IVA )是一个独立的组织,旨在促进瑞典和国际上商业、研究和政府之间的交流。
- Vinnova 是瑞典的创新机构,资助需求驱动的研究,促进公司、大学、研究机构和公共部门之间的合作。
- 瑞典研究委员会(vetenskapsrdet)是教育和研究部下属的一个公共机构,目的是发展最高科学质量的瑞典研究,为社会发展做出贡献。
- 瑞典战略研究基金会 (SSF) ,支持科学、工程和医学领域的研究,目的是加强瑞典未来的竞争力。
- 瑞典研究所(Research Institutes of Sweden)是一个与学术界、企业和社会进行全球合作的研究和技术组织团体。
- SICS 瑞典 ICT ( SICS )由瑞典政府所有,是一家领先的应用信息和通信技术研究机构。
我们联系了这些组织,询问在人工智能领域是否有任何具体的项目。似乎有许多活动与计算机科学、人工智能和机器学习有关,然而它很少被贴上“人工智能”的标签,正如弗雷德里克·海因茨早先指出的那样。
来自 SICS 的 Niklas Rudemo 说,他们在人工智能领域的工作主要涉及人工智能在工业环境中的实际应用。虽然人工智能背后的理论很复杂,但理解哪种问题适合特定的技术就更复杂了。通过与瑞典工业客户和国际研究伙伴的合作,SICS 在这一领域积累了大量的人才和经验。
最后,这似乎根本不是来自政治方面的推动。瑞典政府已经启动了类似“智能产业”的项目和各种各样的通用数字计划,但在人工智能方面却一无所获。原因是,在瑞典,政府不想推广任何特定的技术,这取决于企业。但也许他们应该。人工智能的强大优势可能会迅速转化为国家优势。
公司、投资者、企业家和热点
Slush 是北欧和世界上最大的科技会议之一,聚集了成千上万的企业家、投资者和初创公司。根据他们的数据库,Slush 有 241 家人工智能创业公司,其中 113 家来自北欧。搜索行业数据库 Nordic Tech List ( NTL ),目前有 56 家公司被贴上“人工智能”的标签。Crunchbase 列出了 33 家人工智能类别的北欧公司。综合这些名单,加上我们自己的研究,我们推断出了 129 家公司的名单。你可以在这里找到名单。我们学到了什么?
我们的印象是,真的有两种人工智能公司。“纯人工智能”初创公司依赖于长期研究、获取大量数据和先进技术。他们通常以人工智能公司的形式成立,在广阔的人工智能领域中探索某个领域。另一种我们可以称之为“想要人工智能”的创业公司。他们可能从更基础的软件公司开始,然后增加了智能功能和更多数据,或者他们只是利用人工智能的繁荣来提高公关。在任何情况下,我们都没有真正区分这两者,任何自称为“人工智能”的公司都在名单上(然而,我们已经删除了一些与我们认为的人工智能公司毫不相关的案例)。
这些公司的总部在哪里?瑞典和芬兰占据了很大的优势(合计 84%)。这可能是因为我们使用了芬兰的数据库(Slush)和瑞典的数据库(NTL),但我们也与国际数据库进行了交叉检查,以消除任何偏见。然而,这里有数据:
- 57 家人工智能公司来自芬兰(44%)
- 51 人来自瑞典(40%)
- 11 人来自丹麦(8%)
- 10 名来自挪威(8%)
他们的基地在哪些城市?芬兰(赫尔辛基)和瑞典(斯德哥尔摩)也是这里的主要枢纽,排名前四的北欧城市是:
- 34 家人工智能公司总部位于赫尔辛基
- 32 个在斯德哥尔摩
- 9 个在哥本哈根
- 8 个在哥德堡
投资呢?Atomico 的最新报告“The State of European Tech 2016”分析了 2011 年至 2016 年在“深度技术”(一个包括人工智能、物联网、虚拟和增强现实以及前沿硬件等许多先进技术类别的术语)方面达成的交易。该报告发现,近年来(2014 年至 2016 年),欧洲有 950 家深度科技初创公司,而美国有 1252 家。看看人工智能公司,其中 43%得到了资助,相比之下,美国人工智能公司得到资助的比例为 53%。自 2015 年初以来,欧洲共有 23 亿美元投资于深度科技公司。在北欧投资了多少?瑞典在 2011 年至 2016 年期间对 Deep Tech 的投资总额为 1.98 亿美元,其次是芬兰(1.37 亿美元),然后是挪威(5600 万美元)。没有丹麦的数据。
我给斯德哥尔摩的一些主要投资者打了一轮电话,给人的印象是对人工智能的投资并不多。Industrifonden 对 Now Interact 进行了人工智能相关的投资。Creandum 投资了一家德国人工智能公司。也有一些收购,例如 Ebay 收购了 ExpertMaker。
Bjarke Staun-Olsen ,居住在斯德哥尔摩的丹麦人,风险投资公司 Creandum 的投资经理,专注于人工智能和金融科技领域。拥有机器学习背景的 Bjarke 在成为投资者之前是一名企业家,并建立了一家人工智能初创公司 Alipes Capital,该公司使用机器学习来预测金融市场。那么他从投资角度怎么看待 AI 呢?
他说,“这项技术本身前途无量”。“与一年前相比,发生了巨大的变化。然而,这对一家初创公司来说并不明显,因为一家成功的人工智能公司需要大量数据,而竞争对手(谷歌和其他公司)通常拥有这些数据。谷歌和其他数字巨头有强大的动力来提供开源算法和促进创新,因为真正的价值在于数据和你可以用它做什么,而不是算法。创建机器学习初创公司的方法是找到一个竞争有限的非常狭窄的垂直市场,在那里你可以获得独特的数据集和数据优势。算法本身还不够,但很有必要。”
那么对人工智能的投资呢?和其他地方一样,北欧在人工智能领域的投资与其他领域的投资比例可能是一样的。Bjarke 看不到其他国家在人工智能上的投资比例。而且,他无论如何也想不出有哪家 AI 公司筹到了巨额资金。然而,有一些大型科技初创公司获得了大量资本,它们依赖人工智能,但不是人工智能公司。例如,Spotify 依靠人工智能作为推荐引擎,Klarna 利用人工智能检测欺诈和信用评估,优步拥有预测物流的算法。他们受益于人工智能,因为他们有数据。
最后,就热点而言,比亚克认为,斯德哥尔摩、哥本哈根和赫尔辛基等北欧主要科技中心在人工智能方面的排名可能与纽约或柏林不相上下。然而,它们都在世界上两个主要的人工智能中心——美国的旧金山和欧洲的伦敦——的背后。因此,我们转向北欧人工智能的另一个关键影响者。
Roelof Pieters 是 KTH 大学计算机科学与通信系的学者和博士,后来成为企业家。他曾在 Vionlabs 担任研发部门的技术总监,现在已经创办了自己的公司 Creative.ai
他表示,瑞典和北欧的人工智能市场非常分散,学生通常也与创业人群分开。想做某事的人会搬到其他地方。如果你是学生,对 AI 领域的创业公司感兴趣,欧洲最好的地方是英国。他证实,伦敦是当今欧洲人工智能开发最强大的技术中心。北欧大学的顶尖人才(大部分来自亚洲、俄罗斯、中国和印度)被谷歌、微软、IBM 和其他公司挖走,这些公司花费大量资金招募和吸引学生,并将他们带往国外。学生通常通过他们的期末论文来确定,任何与人工智能有关的东西都会引起招聘人员的注意,他们会给出很好的提议。Roelof 说,加拿大是一个有趣的例子,现在多伦多有一个人工智能研究实验室。早些时候,加拿大的人才大多被美国吸收,但现在学生留下来了,研究得到了政府的大量资助。
AI-创业公司和投资呢?Roelof 认为很少有公司实际上是以人工智能公司起家的(正如我们前面指出的)。这是一个过程,软件公司开始做基本的东西,然后随着数据的增长,逐渐添加更多的智能算法。他认为投资者缺乏人工智能方面的专业知识,并认为北欧人通常更厌恶风险,这就是为什么我们在北欧很少投资人工智能的原因。人工智能初创公司的主要问题是获得资金。
Roelof 帮助组织了斯德哥尔摩的人工智能社区,首先是发起了斯德哥尔摩深度学习会议,然后合并到新成立的 Stockholm.ai,它是 Nordic.ai 的一部分(由 Corti Labs 的 Pia Elle elme gard 运营),而后者又隶属于国际city . AIinitiative,这是一个应用人工智能的全球社区。Roelof 是斯德哥尔摩人工智能大使。还有一个马尔默。人工智能和城市。人工智能运动现在正蔓延到奥斯陆和赫尔辛基。聚会的目的是将对人工智能感兴趣的学生、研究人员、技术人员、商人、投资者和初创公司聚集在一起。
艾现在也引起了斯德哥尔摩市的注意。斯德哥尔摩的创业和技术负责人 Joseph Michael 最近写了一篇关于斯德哥尔摩的人工智能的博文。
在芬兰,我们在 Headai 会见了 Marko Laiho(首席执行官、联合创始人)和 Eero Hammais(产品经理)。Headai 的创始人是 Harri Ketamo ,一位独立研究员和初创企业家,在学习科学、数据挖掘和人工智能方面拥有超过 15 年的经验。他是图尔库大学的高级研究员和坦佩雷技术大学的兼职教授。
Headai 是一家成立于 2015 年的令人兴奋的公司,基于十年的开创性研究学习科学、数据挖掘和人工智能,正在开发可教的软件机器人(bot),以自动化各种日常智力工作。这些机器人是快速学习者,互动和可靠的助手。它们可以促进数据发现,帮助做出更好的数据决策,自动化复杂的业务流程等等。Headai 的解决方案是语义神经计算和遵循人类行为的学习算法的结合。机器人使用非结构化或给定的数据来创建语义神经网络,与传统本体(即语言结构)相比,它可以提供高达 1000 倍的深度洞察力。
Headai 的重点主要是语义神经计算,分析文本、单词和单词如何连接的海量数据集,以及句子的上下文。机器人可以开始阅读任何语言,通过理解单词之间的联系和语义。该机器人创建了一个语言图像,用于阅读新闻,找到类似的新闻,并与周围世界的文本 DNA 进行比较。Headai 的愿景是,公司和个人可以拥有自己的个性化终身机器人,不断学习和帮助我们。
为了理解这一点的实际意义,我们询问了一个当前的热门话题:Headai 能帮助脸书识别假新闻和其他用于破坏民主的虚假信息吗?“是的,绝对是,”马尔科·莱霍说。Headai 将在网站上创建一个文本的 DNA(一个“新闻指纹”),将其与全球主 DNA 进行比较,并显示如果它在其他任何地方都没有找到类似的 DNA,则该新闻是假的可能性。文本的主要 DNA 是大数据(世界上所有的新闻),而不是一个小的、特定的文本 DNA(一条关于脸书的假新闻,例如“教皇支持川普”)。
那么,北欧的人工智能创业公司情况如何?Marko Laiho 认为在芬兰只有 3-5 家“真正的”人工智能公司,在北欧的其他地方也很少。Headai 的业务没有北欧竞争,大多数竞争对手都在美国,有些在英国。大多数都是早期阶段。
看起来赫尔辛基将进一步建立他们在北欧地区作为一个令人兴奋的技术中心的地位,特别是在人工智能和医疗保健的交叉领域。我们会见了 IBM 芬兰公司的 Juha Teljo(商业智能和预测分析销售主管)和 Mirva Antila(医疗保健、公共和金融服务企业销售部门总监),他们谈到了 IBM 新的赫尔辛基开发中心。
Tekes,芬兰创新资助机构(Tekes)和 IBM 有一个宣布的合作伙伴关系,这将使芬兰能够利用沃森 (IBM 的主要人工智能倡议)认知计算来帮助医生改善医疗保健,并在健康和福祉领域加强和发展芬兰的创新和商业生态系统。IBM 还将在芬兰建立 Watson Health Center of Excellence,这是第一个北欧医疗保健能力中心,也是美国以外的第一个此类中心。这些中心预计将在未来几年雇用 150 人
芬兰是医疗保健领域的创新者,Mirva Antila 指出了 IBM 将新的欧洲中心搬到这里的几个原因:政府的医疗保健改革,芬兰可以作为试验台的相当少的人口,医疗保健行业数字化的几项举措,以及许多活跃在人工智能领域的公司,最后,社会安全号码的独特使用提供了对大数据的访问。总是和数据有关。
很明显,如果有意愿,有明确需求的大型部门,政府改革,创新和资助机构,创业公司,研究和全球科技公司之间的合作可以开始加速人工智能的区域发展。
智能结论
综上所述,我们对北欧的人工智能有什么结论?当然,正如我们所料,北欧是一个领先的技术地区,这方面发生了很多事情,但我们需要在这方面做得更多,以免落后于领先的地区、中心和国家。我们有点担心,世界可能会分成传统的、缺乏数据的工业国家,以及另一方面数据丰富的软件国家。短期内北欧人不太可能在人工智能领域占据主导地位,因为一些基本原因。简而言之,我们缺乏:
- 海量全球数据(与美国和中国相比)
- 大量风险资本和企业资本(与美国和中国相比)
- 给予人工智能强有力推动的政治意愿(与其他部门相比)
- 鼓励投资人工智能的软件巨头(我们的经济由传统产业主导)
然而,我们认为我们现在可以做一些重要的事情,以便在更长的时间里成为人工智能的赢家:
- 为特定人工智能相关领域的研究分配更多资金
- 对人工智能直言不讳的政治关注,因为它是我们这个时代的定义性技术之一
- 为人工智能初创公司提供更多专门的、愿意承担风险的资本,这些公司通常处于早期阶段,由研究驱动
- 关注所有的人工智能活动,创业和研究,这些实际上是在北欧进行的,让它更加可见。为什么不在瑞典设立第一个人工智能教授职位来专注于人工智能的研究和开发呢?
我们在北欧人工智能中看到了一个非常具体和令人兴奋的机会。正如我们在早先的博客中所展示的,北欧拥有强大的创新企业软件公司基础,在全球利基市场上成功竞争。他们通常拥有扎实的行业专业知识、深厚的技术能力以及对行业垂直领域独特数据的访问权。通过注入更多的人工智能并与研究人员和人工智能初创公司合作,显然有机会进一步发展这些成熟的公司和技术。我们相信我们在北欧有足够数量的人工智能,现在我们只需要开始滚雪球。
这是玉米卷吗?自定义视觉的机器学习实验
Can machine see this as a taco?
想知道如何获得机器学习(ML)吗?那么,现在你可以通过云端提供的机器学习服务,称为功能即服务(FaaS)。
在我研究机器学习是怎么一回事的时候,我有机会了解了自定义视觉。
Custom Vision 是一种基于云的机器学习服务,允许用户提供自定义图像集来训练算法识别图像的某些特征。
FaaS 可以让曼梯·里更接近我们
过去,我玩过一些应用程序,这些应用程序对我上传的图片提供反馈,比如面部表情的情绪。
虽然这些应用程序提供了某些商业价值,但是现成的解决方案可能无法满足特定的需求。
Custom Vision by Microsoft
所以当我了解到我可以控制识别什么的自定义视觉时,我很兴奋。
我绝不是数据科学方面的专家,我更愿意走一条简单的路去体验机器学习的世界。
使用自定义视觉,我只需上传训练集并相应地标记它们,我就可以根据我的测试图像集快速测试算法。
没有比和他们一起玩更简单的了。
训练集
当我们在办公室吃墨西哥玉米卷作为午餐时,我决定对手工制作的玉米卷的照片进行自定义视觉测试。
测试是这样的:
1.上传并标记六张按照我们人类标准“正确”的玉米卷照片,并将它们标记为“玉米卷”和“食物” 2。上传了五张办公室周围不是玉米卷的食物的照片,并将它们标记为“食物”。运行培训流程 4。通过上传玉米饼和其他食物的照片来测试算法
Uploaded images with associated tags
正如你所看到的,训练数据集是最小的,他们是快速和肮脏的,无论我能在 15 分钟内抓住什么。
它与数据科学相去甚远,但请不要离开我,我们将在下面测试该算法并评估其性能。
测试集
我们先从一个我们知道肯定不是玉米卷的图像开始。
Neither food nor taco
好吧,我们继续,先吃带壳的玉米卷怎么样?
A food but not a taco
有趣的是,在 87.5% 的预测中,它确实将玉米卷壳识别为一种食物,但它并不完全符合玉米卷的标准。
让我们继续下一个,我们在贝壳里放一些牛肉怎么样?
A food and a taco
现在,我们有相当高的信心,这是一个玉米卷在 90.5% 预测。
这很有趣,因为训练集并没有必要把牛肉放在它出现的最前面。
记住这一点,让我们跳到完成的玉米卷。
A food and a taco
这张玉米卷的照片明显类似于一个完整的玉米卷,算法也同样拾取了它。
在图片中,牛肉甚至不可见,所以它可能是在看形状而不是色调。
让我们用去结构化的玉米卷来测试,从某种意义上来说,配料在每个玉米卷的外面。
Pretty close to be a taco
Definitely a taco
Definitely a taco
正如你在上面的结果中所看到的,看起来仅仅是玉米卷的形状可能也不是决定性因素。
同样,一组位置相近的配料是否能达到墨西哥玉米卷的质量也是有争议的。
我们扔一些看起来像墨西哥玉米卷的临时演员怎么样
Some similarity to a taco
Definitely not a taco
上面的测试可能会给我们一个提示,质地可能在决定玉米卷中发挥更大的作用。
我们对预测有多少把握?
说一张照片是 99% taco 是一回事,但是我们对这个预测本身有多少信心呢?
毕竟,我只提供了 11 张照片来判断什么是玉米卷。
在“性能”选项卡中,Custom Vision 确实为您提供了精确度和召回率的测量方法。
一般来说,更高的精确度和召回率将导致对该服务更准确的预测。
在这种情况下,这种精确度对于墨西哥卷饼来说是可靠的,但并不总是可信的。
我们如何利用测试之外的服务?
Custom Vision 和类似的工具提供了 API 端点,您可以在这里发布一个图像,以使用用户输入训练数据集或获得给定图像的预测。
这就是为什么它们被称为功能即服务,它只是你的应用程序可以利用的云中的一个功能,而不是扩展现有的后端功能。
如果你想了解更多关于定制视觉的信息,去他们的网站开始测试吧。
裁决
像 Custom Vision 这样的基于云的服务使机器学习更接近我们这些不是数据科学家的人。
虽然仍然需要数据科学家的知识和批判性思维技能来判断算法的准确性,但这可能是一种与应用程序集成的绝佳方式。
我是 Fresh Consulting 的前端开发主管。我写有影响力的技术领导()和最新的技术实验。
你的大数据是不是在逆向思维?
采用客户驱动的数据流作为核心业务策略的指南。
忘记通过增加客户价值的计划来扩展你的公司。考虑通过一些计划来扩展你的公司,这些计划将给你数据 告诉你如何以无人想象的方式为你的客户服务。这是必须得到认可才能成功将大数据作为企业战略文化的范例。
本文是系列文章的第二部分,从:大数据分析:你能为你的组织做的最好的颠覆性的事情 n
大数据不仅仅是一个技术问题
Krotov (2017)用一个类比解释了这一现象:
“1875 年 3 月,当时默默无闻的发明家亚历山大·格雷厄姆·贝尔向西部联合电报公司总裁威廉·奥顿提供了贝尔电话发明的专利,价格为 10 万美元,大约相当于今天的 200 万美元(Carlson,1994)。威廉·奥顿拒绝了这个提议。接下来发生的就是历史了。在贝尔提出收购时,西联汇款是美国最具主导地位的电信公司。几年后,较小的公司开始使用贝尔的电话发明来分割西联汇款的市场份额。为了迎头赶上,奥顿试图开发西联公司自己的电话。然而,这太少了,也太迟了。西部联盟再也无法回到它曾经达到的显赫地位。。。西联汇款的故事经常在商业文本中被用作一个轶事证据,证明盲目的商业领袖如何与技术的未来潜力相关 (Christensen,Anthony,& Roth,2004)。。。Carlson (1994 年,第 161 页)解释了[领导者中]的这种偏见:
“历史学家和公众通常都认为一项新技术的‘最终用途’是包含在技术本身之中的。假设一旦一个设备被发明出来,它将如何被使用以及被谁使用就很清楚了。。。相反。。。技术的“最终用途”是由技术企业中的各种参与者创造或构建的。。."【1】
这个世界已经不是大多数当代管理理论形成时的那个世界了。正如 Braganza、Brooks、Nepelski、Ali 和 Moro (2017 年)所提到的,技术的发展速度远远超过管理思维的发展速度,他们指出:
“对正在制作的数据的来源和数量的各种估计包括思科的估计”到 2020 年,每两分钟就会有相当于所有电影的千兆字节(GB)通过全球互联网”(思科视觉网络指数,2016 年,第 4 页)。。。大数据催生了新的技术、方法、数据采集应用、可视化技术和数据聚合能力。借助成熟的商业智能、数据挖掘和分析实践,大数据方法催生了新一代算法,并重新激发了人们对数学、统计和定量分析的兴趣。。。学者们认识到大数据不仅仅是一个技术问题,为了充分发挥作用,大数据需要成为组织结构的一部分 (Davenport,Barth,& Bean,2012)。应将大数据纳入营销和新产品开发等战略活动(徐,Frankwick,& Ramirez,2016)。其他人认识到大数据影响组织文化,因为决策变得更加基于证据 (Erevelles 等人,2016 年,伊拉尼,2010 年)。”【2】
最赚钱的公司正在想办法让他们的客户创造驱动核心业务流程的数据流。Pigni、Poccoli 和 Watson (2016 年)报告称:
“数字数据流的出现正在为现有公司创造战略机遇,并促成新企业的形成。这种巨大变化的催化剂是大量生成的实时结构化和非结构化数据流,组织可以利用这些数据流进行决策和运营变化。这些新企业的象征是优步,世界上最大的“出租车”公司,市值高达 500 亿美元。(1)优步没有汽车,但利用其司机汽车的实时数字数据流**,并将其与实时乘车需求相匹配。现有组织也在成功利用“大数据”的实时流动来创造新的价值。想想旧金山的 SFPark 吧,它是旧金山市政运输局(SFMTA)的一个公私合作项目。通过在城市的每个收费停车位安装磁力计来检测车辆,SFMTA 创建了实时停车数据流。通过这样做,它提供了可用停车位的实时可见性,减少了驾车者寻找停车位的平均时间(43%)、街道停车的平均费用(4%)和车库费用(12%)。此外,该市还能够通过引入需求反应定价来获得一些创造的价值。。。其结果是,停车位使用率目标更经常地达到 31 %,温室气体排放减少了 30 %,这是因为驾驶员为了停车而绕行的英里数减少了" [3]**
想想谷歌、亚马逊、脸书、推特、Instagram、Pinterest、优步和领英等公司创造的数据流。作为其核心业务战略的一部分,这些公司依靠客户创造的数据流繁荣发展。
From Pigni, F., Piccoli, G., & Watson, R. (2016)
利用客户驱动的数据流作为核心业务战略
亚马逊创建了一个全球市场 [4] ,允许他们的客户上传他们自己的产品,并利用亚马逊的平台和市场向全球受众销售。从某种程度上说,他们的公司战略创造了一种自助式商业模式,在这种模式下,客户能够挑选他们想要使用的产品和功能,利用公司提供的工具和数据管理流程来满足他们自己的需求,并提供数据,使亚马逊能够更好地为其他客户提供更好的服务,并拓展到新的市场。马泽伊&诺贝尔(2017)这样说:
“亚马逊提供了一个公司如何应用数据和分析进行战略发展的标志性例子。。。作为一家专注于图书的电子商务公司,亚马逊能够获得信息,并对查看其图书库存的消费者的鼠标点击进行分析。该公司获取了浏览历史,包括搜索词、购买的书籍、未购买的书籍、放在愿望清单上的书籍以及项目被浏览的时间长度。这导致了更多的选择,改善了目标市场营销,并最终通过电子零售商扩展到更多的细分市场。亚马逊现在在电子商务网站上销售几乎任何产品,包括电子产品、运动器材、服装,甚至建筑材料。改进的分析能力有助于增强大数据的力量,使亚马逊作为云计算服务提供商进入一个新兴行业。亚马逊网络服务(AWS)现在是一项价值 50 亿美元的业务,引领云计算和分析基础设施市场,为各种规模的公司提供灵活而全面的服务(Novet,2015)。”
通过分析在其网站上搜索书籍和产品的用户的搜索查询和流量行为,亚马逊是否可能意识到他们有机会开拓新市场的下一个大领域是云计算和网络服务?想想吧。为什么像亚马逊这样的公司会进入一个在很多方面对他们来说完全陌生的市场?这样的举动不是一步到位的冲动决定;相反,它需要在一段时间内仔细规划。亚马逊的第一次大数据收购发生在 1998 年,当时收购了 Junglee corp .【6】,这是一家 XML 数据挖掘公司,它提取在线产品价格,允许网络购物者比较数百万种产品的价格【7】。当我们回顾亚马逊的决定时,很明显,它们朝着正确的方向前进;由于他们的选择,他们已经成为这个新的自助式 web 服务技术市场的主要领导者。谷歌是自助式商业模式的另一个主要例子。谷歌的产品在由客户创造的数据流生态系统中茁壮成长,包括维护网站和网络应用的组织,以及在这些组织中搜索内容的个人【8】。根据 Davenport,t .,Barth,p .,& Bean,r .(2012)【9】的说法,早在 2012 年,仅谷歌一家每天就处理大约 24pb(或 24,000)的数据。马泽伊&诺布尔(2017)还举了 Progressive Insurance 的例子,该公司利用实时分析以新颖的方式推动其核心业务流程,而没有实质性地改变其市场焦点:**
“Progressive Insurance 正在使用来自车载电信设备的实时分析来监控驾驶活动,通过识别危险行为来创造竞争优势。这使得该公司能够根据每个司机的实际驾驶习惯更准确地对他们进行评级,同时也鼓励其消费者的驾驶行为发生积极的变化(全国保险专员协会,2015 年)。”【5】
因此,即使一家公司不适合一头扎进一个完全陌生的市场,也可以循序渐进地实现数据驱动。随着渐进式保险开始利用实时数据来更准确地评估司机的实际驾驶习惯,其他保险市场开始出现,如驾驶付费(PAYD)、驾驶付费(PHYD)和现收现付(PAYG)。这些仍然是允许流数据驱动市场决策的例子,允许公司在许多情况下创建新的市场,以更好的方式满足客户需求。
大数据不是一个独立的流程或技术
现在,组织认为大数据只是一种独立影响组织并增加价值的技术或流程是错误的。许多大数据计划正是因为这个原因而失败【12】,但是将大数据贯穿于其组织和业务流程的组织正是那些从其投资中获得最大价值和收益的组织【13】。然而,将大数据集成到现有业务流程中可能需要逆转许多流程,并彻底转变决策方面的管理视角。如果您的组织已经引入了大数据,但您的决策流程并未发生实质性变化,那么您就错失了机会,并给组织的绩效带来了瓶颈。马泽伊&宣布:
“有许多有远见的高管致力于构建数据资源,使他们的公司能够开发结合传统和现代战略思想的彻底创新的商业模式。本质上,这些领导者将数据视为其组织战略的核心,并选择专注于数据流而非数据存量*** (Davenport et al .,2012)。这些公司根据他们能够积累的数据开发出专注于其产品和服务的生态系统。。。随着这些学习型组织基于通过数据分析发现的趋势而动态发展,许多传统的扩张和多样化约束被贬低了。这些公司创造了杠杆——由于它们能够获得从过去和当前收入来源获得的数据、知识和资源——这使得传统的竞争壁垒(例如,买方/供应商的议价能力、进入壁垒)在许多情况下变得毫无意义 (Porter & Heppelmann,2014)。围绕这些公司的扩张和多样化的主要问题是 (1)他们现有的数据收集和分析是否提供了新的机会;(2)探索允许更丰富、更有洞察力的数据收集和分析;或者(3)扩展工作改善了组织的数据生态系统,其中最终客户被视为一个活生生的数据源。这些组织认为数据汇编本身就是创造价值的来源。他们不需要立即将数据货币化,因为如果他们捕获了足够多的数据,就可以在未来以无数的方式——也许是目前尚未实现的方式——利用这些数据,作为他们动态能力和数字生态系统发展的一部分,拓宽和导航新行业。。。在这里提到的公司中,有许多收购或产品线扩张乍一看似乎是被误导的,除非你把数据流想象成公司寻求的产出。公司。。。以战略身份查看数据的公司能够在没有直接盈利需求的情况下试验他们的产品(例如,脸书进入虚拟现实,苹果进入汽车,Alphabet 进入太空旅行和自动驾驶汽车),因此他们可以不断创新,学习他们不知道的东西。从战略上讲,这是一个与数据作为工具截然不同的概念,因为数据流和新知识成为战略政策和决策制定的驱动力。。。(这些类型的公司)不断将其平台发展成广阔的生态系统,渗透到消费者的生活中,建立数据库存,并增加数据流的数量,这些数据流将通过后来的产品和技术货币化,而这些产品和技术又可能继续增加数据流。【5】***
当我们考虑这种可能看起来像是传统管理理论的彻底转变的新视角时,重要的是要记住,这个世界与大多数当代管理理论发展时截然不同,那些没有赶上潮流的企业将被甩在后面。
您最近的业务决策是如何由数据驱动的?
回想一下你最近做的几个商业决策。这些决策中有多少是主要是根据你从另一个项目中发现的数据做出的?如果做出真正的数据驱动决策的过程还没有成为你企业文化的一部分,你就落后了。公司不再适合在利用数据之前做出决策。马泽伊(2017)是这样表述的:**
“【数据驱动】组织的勘探和开采决策不仅仅是基于盈利能力;相反,这些公司关心的是增强数据流*,,目的是开发创新的服务模块,这些模块可以轻松地与现有平台结合,以执行不断提高的服务水平 (Morabito,2015)。。。在大多数当代战略管理理论形成的时候,我们没有短信、聊天、电子邮件、基本免费的长途电话接入、视频会议、数码照片和电影、几乎无限的数据存储,以及现在被视为理所当然的无数其他数字工具。相反,交易是通过传真、面对面的会议、打字机和“蜗牛”邮件来完成的。数据处理是一项漫长、昂贵而艰巨的任务。。。[数据驱动的]公司如何选择探索新市场不是通过传统的战略规划来完成的,而是通过机会识别来发展的,这些机会识别主要基于从持续分析更多更丰富的数据流中收集的信息。。。据预测,仅在美国,大数据、数字化和自动化将在 10-20 年内消除 47%的现有工作岗位 (Frey & Osborne,2013)【15】***
想象一下,如果 47%的员工被大数据、数字化和自动化所取代,你的公司会是什么样子。想想谁会留下,谁会被取代。思考哪些类型的角色可能会被取代。认识到这个行业正在发生的事情很重要,因为如果你还没有接受它,这个行业和你的竞争对手会替你接受它,而你可能会成为被取代的 47%中的一员。
您的数据是否已经决定了您的业务战略?
From Mazzei, M. J., & Noble, D. (2017)
全球对数据的看法正在发生变化,数据作为一种战略优先事项变得越来越重要。让我们从博弈的角度来思考一下策略。在各种游戏中,你可能会使用策略,通过做出某些选择来观察你的对手将如何反应,以便你可以估计他们的计划。你可能用策略来探索某些机会或决定,以收集更多关于回报或风险的信息。你可能已经使用策略来利用你的资源来获得竞争或位置优势。现在,在这些情况中,有多少是你的选择或信心受到你所拥有的可用信息数量的限制?想象一下,如果你有十倍于你正在考虑的决定的信息。你能看出它是如何在有利的选择和致命的选择之间做出区别的吗?Brandenburger 和 Nalebuff (2002)指出,“成功的商业战略是积极塑造你玩的游戏,而不仅仅是玩你发现的游戏。” [19] 当竞争对手奋力追赶时,将数据流作为战略重点的公司正在积极地塑造他们的市场并创造新的市场。然而,并非所有现有的业务流程都符合这种将数据放在第一位的现代范式,因此许多公司需要认真地重新审视他们的假设、优先级和思维。Massi & Nobel (2017)也表示:
"访问海量数据和提升分析能力需要重新审视之前的假设。。。一家公司的业务层面战略决定了它如何使用数据来开拓当前市场,还是从一家公司的定位中产生的数据流在多样化和公司战略的发展中发挥了更重要的作用?尽管战略管理领域的传统观点认为,选择的战略决定了价值的衡量标准和数据的选择或适用性,但我们认为许多公司已经改变了这种方法。我们的观察表明,在某些情况下,收集和分析的数据对企业战略有着巨大的影响,而不是企业战略决定了应该收集和分析哪些数据(见图 1)。拥抱大数据带来的创新和探索机遇的公司正在实现新的价值创造和提高公司绩效 (Lavalle,Lesser,Shockley,Hopkins,& Kruschwitz,2011),,并且正在以前所未有的规模实现*。我们见证了一场实践运动,这场运动通过剔除传统价值链和竞争力,开始解开过去 40 年来发展的许多已知战略管理理论(Evans,2013)。数据的用途正在发生变化,因为收集的数据有助于确定要探索的市场以及消费者趋势如何变化,并且数据可以实时推动这些决定。我们看到企业进入非传统市场,利用他们的数据和分析资源——结合大量的人力和金融资本——颠覆传统的进入壁垒。大数据推动者和创新者的最终目标是构建更丰富的知识和动态能力并应用大数据分析的优势,通过发展多样化的生态系统和数据流来创造独特和可持续的竞争优势。”【5】***
将数据放在第一位—大数据应该如何影响战略
你的公司最近一次启动面向客户的计划是在什么时候,当时认为该计划不会直接提供额外的收入,而是会提供数据,让执行管理层获得所需的洞察力,以确定他们是否应该进入一个他们以前没有考虑过的新市场?你的公司上一次冒着失去底线的风险启动一个项目是什么时候?这个项目纯粹是为了获得数据,向你展示你的客户是否会对获得某些潜在的高影响力的新产品功能而不是其他功能更感兴趣?你的公司上一次创建一个有争议的“高风险”项目(乍一看甚至可能被误导)来决定公司是否应该冒险进入一个全新的市场是什么时候,这个市场要么刚刚兴起,要么他们目前没有经验?如果这些都不适合你,那么你的公司就落后了。过于专注于实现眼前收入目标的公司将会错过获得最大长期收入收益的机会和市场机会,而这些机会只能通过从实验性数据收集工作中获得的洞察力来获得。Shah、Soriano 和 Coutroubis (2017 年)报告称:
"大数据项目通常会失败,因为组织[努力]在技术及其能力上,而不是商业机会上 [9]。采取创新方法并给予探索机会的公司,正在创造新的价值并达到[加速的]绩效[25]。根据[15],的说法,一个常见的错误是将大数据视为一个限定时间的项目,而不是一个持续的探索练习【17】
将大数据作为核心战略优先事项意味着它不能孤立地完成。利用数据不能只由公司内一个孤立的专家小组来处理,即使是一个有影响力的专家小组。它必须成为一种系统的组织实践,渗透到管理思维和决策制定的各个方面。正如 Fleming,Fountaine,Henke 和 Saleh (2018)所述,如果大数据分析没有成为整个组织管理思想的一部分,即使是拥有集中式大数据分析业务的公司也很难从分析工作中创造价值:
“与任何重大商业计划一样, analytics 应该有自己的战略方向。。。我们观察到,拥有成功分析计划的组织将分析能力嵌入到其核心业务中。那些努力通过分析创造价值的组织倾向于孤立地开发分析能力,要么集中在远离业务的地方,要么分散在协调性差的孤岛中。这两种组织模式都是无效的。”【18】
尚未在全公司范围内采用分析的公司可能需要进行重大变革,以完全由数据驱动,但第一个重要步骤是扭转我们的思维,将数据置于战略规划之前。
【1】克罗托夫,V. (2017)。物联网与新商机。业务视野, 60 (6),831–841。加粗补充道。检索自https://Fardapaper . IR/mohavaha/uploads/2018/03/Fardapaper-The-Internet of-Things-and-new-business-opportunities . pdf
【2】brag anza,a .,Brooks,l .,Nepelski,d .,Ali,m .,& Moro,R. (2017)。大数据计划中的资源管理:流程和动态能力。商业研究杂志,70,328–337 页。加粗补充道。检索自https://www . science direct . com/science/article/pii/s 0148296316304933 # f 0005
【3】皮格尼,f .,皮考利,g .&沃森,R. (2016)。数字数据流:从大数据的实时流中创造价值。加州管理评论, 58 (3),5–25。加粗补充道。从 dds.cct.lsu.edu/ddslab/pdf/…](dds.cct.lsu.edu/ddslab/pdf/…)
【4】陈,l,Mislove,a,&威尔逊,C. (2016,4 月)。亚马逊市场算法定价的实证分析。在第 25 届万维网国际会议记录(第 1339-1349 页)。国际万维网会议指导委员会。从 mislove.org/publication…](mislove.org/publication…)**
【5】马泽伊,m . j .&诺布尔,D. (2017)。大数据梦想:企业战略框架。商业视野, 60 (3),405–414。加粗补充道。检索自http://irana rze . IR/WP-content/uploads/2018/01/e 5723-irana rze . pdf
【6】亚马逊公司(1998)。Amazon.com 收购两家领先的互联网公司[新闻稿]。检索自:phx.corporate-ir.net/phoenix.zht…=
拉杰加塔,C. (1998 年)。Junglee 男孩在网上淘金。检索自https://web . archive . org/web/20131217162934/http://expression dia . Indian express . com/ie/daily/1998 08 14/22650774 . html检索于 2018 年 8 月 11 日。
【8】佩奇、l、布林、s、莫特瓦尼、r、&威诺格拉、T. (1999)。PageRank 引用排名:给网络带来秩序。斯坦福信息实验室。从 ilpubs.stanford.edu:8090/422/1/1999-…](ilpubs.stanford.edu:8090/422/1/1999-…)
【9】达文波特,T. H .,巴斯,p .,&比恩,R. (2012)。“大数据”有何不同。麻省理工学院斯隆管理评论。检索自https://pdfs . semantic scholar . org/eb3d/ECE 257 cc a2 e 8 ce 6 EAF 73 FD 98 C1 fdcbdc 5522 . pdf**
【11】husn JAK,s .、Perakovi,d .、Forenbacher,I .、& Mumdziev,M. (2015)。基于使用的汽车保险中的远程信息系统。 Procedia 工程, 100 ,816–825。从 core.ac.uk/download/pd…](core.ac.uk/download/pd…)
Grover,v .,蒋,R. H .,梁,T. P .,&张,D. (2018)。从大数据分析中创造战略商业价值:一个研究框架。管理信息系统杂志, 35 (2),388–423。检索自https://www . tandfonline . com/doi/ABS/10.1080/07421222.2018 . 1451951
【13】达文波特,T. H .,&戴奇,J. (2013)。大公司的大数据。国际分析研究所, 3 。检索自http://datascienceassn . org/sites/default/files/Big % 20 data % 20 in % 20 Big % 20 companies % 20-% 20 Tom % 20 aven port . pdf
【15】马泽伊,m . j .&诺布尔,D. (2017 年 1 月)。不仅仅是一种资源?大数据现象的理论基础。载于《管理学院学报》(2017 年第 1 卷第 17546 页)。荆棘崖庄园,纽约 10510:管理学院。加粗补充道。检索自https://www . researchgate . net/profile/David _ noble 8/project/The-Digital-Economy-Big-Data-and-Strategy-Implications/attachment/595707 c 282999 C3 ee 923 cd7e/AS:51136483246080 @ 1498875842970/download/2017+AoM+Meeting+paper . docx?context = projectUpdateDetail
【17】Shah,s .,Soriano,c . b .&Coutroubis,A. D. (2017,12 月)。大数据是面向所有人的吗?中小企业采用大数据的挑战。在工业工程与工程管理(IEEM),2017 IEEE 国际会议上(第 803–807 页)。IEEE。加粗补充道。从 core.ac.uk/download/pd…](core.ac.uk/download/pd…)**
【18】佛莱明,奥,方丹,t,亨克,n .&萨利赫,T. (2018)。十个危险信号表明你的分析程序将会失败。麦肯锡分析公司。加粗补充道。检索自https://www . McKinsey . com/business-functions/McKinsey-analytics/our-insights/ten-red-flags-signaling-your-analytics-program-will-fail
布兰登伯格,a . m .&纳勒布夫,B. J. (2002)。用博弈论来塑造战略。战略:对商业和管理的关键观点, 4 ,260。检索自http://faculty . som . Yale . edu/barrynalebuff/right game _ HBR 1995 . pdf
您的数据科学团队是否增加了您的网络曝光率?
随着网络攻击和数据泄露几乎每周都成为头条新闻,令人惊讶的是,科技公司仍然准备不足。许多此类违规都是由于安全措施不力和/或人为错误造成的:系统更新不够快,敏感数据没有加密,或者使用容易被破解的算法加密。威瑞森每年都会发布一份报告,分析他们的客户遭受的网络攻击。2018 年版反映了超过 2,200 起此类违规事件,其中许多本来是可以轻松避免的。你可以在这里阅读完整报告。
如果问题始于糟糕的 IT 实践,它肯定不会就此结束。网络钓鱼和勒索活动使用欺骗和社会工程方法,以不知情的员工为目标。一些公司投资了培训。但是这些知识仍然相对抽象,大多数员工没有将这些知识应用到他们的日常工作和生活中。例如,他们通过电子邮件交换 excel 电子表格中的数据,而没有对数据进行加密,也不关心其中包含的敏感信息。
现在,考虑一下您的数据科学团队。他们的日常活动要求他们处理大量数据。这些数据通常存储在由您的 IT 组织管理的系统中。数据科学团队要么直接访问它,要么以文本文件的形式导出它。在这两种情况下,数据都是为建模准备的,最终以未加密的形式保存在某个文件系统中,没有任何 IT 控制或安全措施。更糟糕的是,这些数据有时会通过未加密的电子邮件发送。
为了改变这种可悲的状况,公司需要创造一种文化,让每个人都意识到网络暴露,并知道每天要做些什么来减轻它。
保护您的 IT 基础设施
也许是时候改变你对安全的看法了。传统的外围安全模型依赖网络分段作为保护敏感资源的主要机制:防火墙内的设备应该比防火墙外的设备更受信任。
在 2009 年下半年极光行动发生后,包括谷歌在内的十几个组织成为目标,谷歌开发了一个名为 BeyondCorp 的零信任网络。在这种新模式中,所有应用程序都部署到互联网上,没有任何连接会因为位于防火墙定义的更安全区域而更受信任。访问权限在用户和设备级别进行管理,无论它们在哪里。
用它来决定文件应该存储在哪里,并确定最佳加密解决方案
就建模数据集的存储位置与 IT 部门达成一致是更好地管理网络风险的第一步。It 部门不可能保护他们甚至不知道存在的数据。
删除任何敏感信息
员工需要了解不同类型的敏感信息,并明白应该根据其敏感性对其进行不同的处理。主要的有:
个人身份信息 (PII)是指可单独使用或与其他信息一起使用的信息,用于识别、联系或查找个人,或在上下文中识别个人。
根据美国法律,受保护健康信息 (PHI)是指由承保实体(或承保实体的业务伙伴)创建或收集的、与特定个人相关的任何有关健康状况、医疗保健提供或医疗保健付款的信息。这种解释相当宽泛,包括患者病历或支付历史的任何部分。
支付卡信息 (PCI)是与支付卡相关的信息,如信用卡。
公司通常拥有更专业的敏感信息,并需要向员工公开这些信息。这些信息需要限制访问,并且永远不应该存储在未加密的数据库或文件中。
确保您的建模数据集以加密格式存储
即使所有敏感信息都已删除且数据已匿名,加密数据和任何中间产品以防止未经授权的访问也是一种良好的做法。
避免通过电子邮件发送数据
电子邮件是一种非常不安全的协议,使黑客很容易拦截消息或伪造电子邮件,并且永远不应该用于交换未加密的数据。
如果你交换数据的唯一方式是通过电子邮件,你应该总是使用高度安全的加密工具。有一些安全的解决方案可以让你对信息和附件进行加密和签名,比如 GPG 工具,一个开源产品。您应该向您的 IT 部门了解贵公司的最佳实践。
实施这些非常简单的步骤将大大降低公司面临的网络风险。安全是每个人的责任,不应该掉以轻心。
夏羽是Prometheus Ax的创始人& CEO,这家公司帮助 CEO 们优化数据科学项目的成功率和投资回报率。
您的组织为高级分析做好准备了吗?
如何判断您已经准备好进行高级分析?
老板们认为网站流量分析只是为极客准备的。经过激烈的努力,你说服他们,这些数据有助于确保在线成功。现在,你终于将 Google Analytics 添加到了你的网站页面上,并且已经开始运行了。高层已经意识到分析数据的价值。他们了解游客来自哪里,停留多久以及其他有用的信息。这些知识揭示了你可以使网站更有吸引力的方法。但获得更高级的分析也有助于衡量改进如何促进游客和降低跳出率。
预见主要市场趋势
高级分析远远超出了简单的流量分析。它使您能够为网站优化和预测未来趋势建立模型。在线营销策略师用它来探索一系列可能的情况。例如,假设您的组织每月发行一期新闻稿。目前,该网站 20%的访问者订阅了它。你想知道对于每两周发行一次的时事通讯,这个比率是否会提高。高级分析能够评估访问者的反应。通过这种方式,你可以制定更有可能提高网站评级和促进销售的策略。
赢得管理层的支持
在基本版本运行并证明其价值后,是考虑高级分析的好时机。然而,决策者可能仍然怀疑是否需要更深入的数据挖掘。你如何推销这个想法?
从简单的概念解释开始,尽量少用专业术语。关注高级分析如何推进在线业务目标。展示一个与您的组织相关的典型场景。例如,假设你正在计划一项重大活动,并希望最大限度地提高出勤率。对游客偏好的深入了解有助于你决定项目和地点。
解释在谷歌上配置高级分析的实用性。例如,向他们展示配置报告以满足您的特定需求是多么容易。描述仪表板定制如何过滤掉最相关的网站数据。没有必要列出所涉及的每一个步骤。旨在展示基础和高级分析实践之间的平稳过渡。
组建专业的高级分析团队
招募高级分析专家的需求可能更难推销,但它确实有所不同。一个顶级团队必须包括准备数据的人和知道如何分析原始数据的统计学家。你还需要一个从商业角度理解这些结果意味着什么的人。正如 Carsten Bange 指出的那样,拥有一个知道如何向管理者展示结果的“数据艺术家”也是至关重要的。
在一些组织中,所需的技能存在于现有员工中。否则,他们将需要招聘员工或聘请代理服务。没错,这需要成本,但附加值证明了投资的合理性。信息是可用的,但是如果没有高级分析团队,就无法获得。高级分析不是水晶球,但如果你问了正确的问题,它会显示前进的方向。专业团队帮助你知道该问什么,他们“让分析为你服务”提供最佳答案。
最大化数据相关性
高级分析非常受欢迎。高德纳的研究主管吉姆·黑尔写道在过去的十年里,信息技术如何改变了商业面貌。如今,对于那些想要“扰乱现有市场并击败现有企业——无论是卖书、租电影、借钱,还是组建一支职业运动队——的新企业来说,这已经变得至关重要
说服高层可能需要一些努力,但结果会说明一切。如果你想为你的组织提取最相关的网站数据,这是你必须走的路。
使用我们的免费 excel 模板跟踪您的努力。
你的标准误差稳健吗?
选择正确规格的实用指南
行动纲要
- **问题:**Stata、R 和 Python 报告的默认标准误差(SE)只有在非常有限的情况下才是正确的。具体来说,这些程序假设你的回归误差是独立同分布的。实际上,情况并非如此——这会导致假设检验中出现严重的第一类和第二类错误。
- 治疗 1: 如果你在管理 OLS,你必须在两个维度上对系统工程师进行聚类:个人年度。
- 治疗 2: 如果你在运行 FE(固定效果),你必须只在一个维度上聚集 SE:个体。
- 代码: 这里的是实现 SE 集群的 Stata、R、SAS 代码的链接。
如果你对这个问题感到好奇,请继续读下去。不然下次再见:)
为一天做计划
在这篇文章中,我将把一篇关于稳健标准误差的 69 页论文合并成一张备忘单。这篇由米切尔·彼得森教授于 2009 年发表的论文,截至今日已累计被引用超过 7879 次。它仍然是选择正确鲁棒标准误差的圣经。
问题是
惯例
在任何 Stats 101 课程中,你的教授可能已经教过你在 Stata 或 R 中键入“reg Y X ”:
Where i denote an individual; t denote timestamp t
你继续用报告的点估计值和标准误差来检验你的假设。但是 99%的情况下,这是错误的。
陷阱
为了让 OLS 给出无偏且一致的估计,我们需要误差项ε独立且同分布:
独立意味着不允许序列或交叉相关:
- **序列相关:**对于同一个体,不同时间段的残差是相关的;
- **交叉相关:**不同的个体残差在周期内和/或跨周期相关。
相同意味着所有残差具有相同的方差(也称为同方差)。
将问题可视化
让我们用方差-协方差矩阵来形象化独立同分布假设。
- **无序列相关性:**红色气泡中的所有非对角线条目需要为 0;
- **无互相关:**所有对角线上的条目需要相同——绿色矩形中的所有条目需要为 0;
- **同方差:**对角线上的条目需要是相同的常数。
如果使用默认 se 而没有 I.I.D .错误,会有什么问题?
推导 SE 表达式:
默认标准误差是(3)中的最后一行。但是为了让我们从第一行到最后一行,我们需要做额外的假设:
- 我们需要独立性假设将我们从(3)中的第一行移到第二行。从视觉上看,绿色矩形中的所有条目和红色气泡中的所有非对角线条目都为 0。
- 我们需要同分布假设将我们从第二行移到第三行。从视觉上看,所有对角线上的条目完全相同。
默认 SE 在非常有限的情况下是对的!
犯错的代价
我们不知道报告的 SE 是否会高估或低估真实 SE。因此,我们最终可能会得到:
- 当实际上没有影响时,统计上的显著结果。结果,软件和产品团队可能不得不在一些对公司底线没有任何影响的原型上花费时间。
- 统计上无关紧要的结果,实际上却有重大影响。这对你来说可能是个好机会。错失良机。可惜:(
**现实中,假阳性的可能性更大。**不乏新手机器学习学生宣称他们已经找到了击败市场的一些模式/信号。然而,一旦部署,他们的模型表现灾难性。部分原因是他们从未考虑过残差的序列或互相关。
当这种情况发生时,默认的标准误差可能比真实的标准误差小 11 倍,从而导致信号的统计显著性被严重高估。
稳健的标准误差来拯救!
一个正确指定的稳健标准误差将消除偏差,或者至少改善偏差。有了稳健的标准误差,您就可以安全地进入推理阶段。
存在许多稳健的标准误差。选择错误的补救措施可能会加剧问题!
我应该使用哪种稳健的标准误差?
这取决于方差-协方差结构。问问你自己,你的残差是互相关、序列相关还是两者都有?回想一下:
- **交叉相关:**在同一时间段内,不同的个体残差可能相关;
- **序列相关:**对于同一个人,不同时间段的残差可能是相关的。
情况 1:误差项具有单独的特定成分
假设这是世界的真实状态:
假设个体之间是独立的,正确的标准误差是:
与(3)相比,我们有额外的术语,用红色圈出。所报告的 OLS 标准误差是超过还是低估了真实的标准误差,取决于相关系数的符号,其随后被时间段 t 的数量放大
实用指南在哪里?
基于更多的理论和模拟结果,Petersen 表明:
你不应该用:
- **Fama-MacBeth 标准误差:**它是为了处理序列相关性而设计的,而不是单个公司之间的交叉相关性。
- **纽威-韦斯特标准误差:**它是为了说明单一时间序列的残差中未知形式的序列相关性而设计的。
你应该用:
- **聚类标准误差:**具体来说,你应该对公司的标准误差进行聚类。代码请参考博客文章的结尾。
情况 2:误差项具有特定于时间的分量
假设这是世界的真实状态:
正确的标准误差本质上和(7)一样,一旦你把 N 和 t 互换。
你应该用:
- 标准错误:因为这就是它的构造目的。有关 Stata 代码,请参阅博客文章的结尾。
案例 3:误差项具有固定和时间效应
假设这是世界的真实状态:
你应该用:
- **聚类标准误差:**聚类应在两个维度上进行——按年度确定。请注意,这不是真正的标准误差,它只是产生更少偏差的标准误差。当一个维度上只有少数几个簇时,这种偏差就更加明显。
编码
Petersen 详细的 Stata、R 和 SAS 指令和测试数据可以在这里找到。为了我自己的记录,我在这里编译 Stata 代码列表:
案例 1:一维聚类
回归因变量自变量稳健聚类(聚类变量)
案例二:法玛-麦克白
tsset firm_identifier 时间标识符
因变量自变量,byfm(by 变量)
案例 3:二维聚类
cluster2 因变量自变量,f cluster(cluster _ variable _ one)t cluster(cluster _ variable _ two)
案例四:固定效应+聚类
xtreg 因变量独立变量,健壮群集(cluster_variable_one)
享受你新发现的强健世界吧!
Photo Credit: Good News Philippines
直到下次:)
运行回归只需要一行代码
我花了两年才发现这个!
我是一名普通的印度二级工程学院的 IT 毕业生。(这是不是让我的读者翻了一倍!?😁).像平常的学生一样,我过去常常阅读足够的课程材料,以免期末考试不及格。我是那种相信“大学让你为现实世界做好准备”的女孩。这样不对,我知道!由于我的信念,我在大学期间没有学到什么实质性的东西。但我总是想从人群中脱颖而出,总是想成为害群之马,因此开始了我变得相关的旅程。
我将努力成为相关的 和事件的参与者 我将申请 GSoC 并提交代码块 我将付出我的百分之 并继续相关
我开始尝试其他的事情,比如参加一个关于并行编程的课程,注册 HackerEarth,使用 Java 构建应用程序,学习 android 和创建应用程序,在 NLP 中使用 SVM 进行词义消歧项目,写关于 GCD 电路的论文,参加黑客马拉松。唷!任何事任何事。你猜对了,我哪儿也不去。
在这一切之中,我被安排在班加罗尔的博物馆。这些家伙给了惊人的预安置讲话,他们确保我们知道这来自 HBR。这灌输到我的脑海中,我喜欢我开始玩数据的方式。我换了工作,与不同的客户、不同的数据源和不同的团队一起工作,但是有一个不变的东西,数据!
当你在以数据为中心的公司工作时,你会不断听到先进的机器学习技术。让你着迷,让你害怕的术语。回归是我的 Pennywise!以至于我从来不敢用谷歌去了解它。尽管我在大学里读过几乎每种机器学习技术背后的理论,但我从未实现过其中任何一种。我以为这是最酷的东西了。我一直认为这需要大量的学习、编码和理解。但是我必须从某个地方开始。我必须学会如何让数据讲述自己的故事。
我回来参加在线课程。我从 Coursera 上吴恩达的机器学习开始,是的,你猜对了。这对我来说有点太多了,我迷失了几个月。在我偶然发现 edX 上的分析优势之前,我不得不把自己拉回来,开始了另一门课程和其他一些课程。课程大纲说“通过鼓舞人心的例子和故事,发现数据的力量,并利用分析为你的职业和生活提供优势”。这门课程打破了我多年来的许多误解。这正是我开始探索数据和分析力量的原因。从那以后,
我学到了在对数据运行算法之前理解数据是多么重要,在获得洞察力之前了解背景和行业是多么重要,制作模型是多么容易,但让它们为你工作却是多么困难,最后,在数据集上运行线性回归只需要一行代码
下面是我的流言终结者。在数据中寻找线性模式的一行程序
*#Build the model on training data -* lmMod <- **lm**(DependentVariable ~ IndependentVariable, data=trainingData) *#Run prediction on test data -* testPred <- **predict**(lmMod, testData)
在我杀了我的 Pennywise 之后,学习其他的事情就容易多了。我完成了那门课程,注册了的另一门,参加了 Kaggle 比赛,玩了 Twitter 数据,创建了文字云,制作了聊天机器人,并且从未停止探索。我终于变得相关了!如果不是为了世界,也是为了我自己。如果我停止学习,我就不再相关。
如果你害怕做你一直认为是地球上最酷的事情,让我告诉你一件事,埃隆·马斯克的火星任务是目前最酷的事情,你可能只是害怕你的回归模型。出去,与人交谈,回来,利用互联网,学习,创造,展示。
希望这篇文章能帮助你开始做你最酷的事情。在下面的评论里告诉我更多关于你的小聪明,我们可以一起把他饿死!
有一段时间了
过去的三年过得真快。对我来说,是时候回到我的根本,开始写更多的博客了,就像我以前做的那样。
我上一篇帖子是关于 Strata 2013 的。在这段时间里,我正从全职工作中抽出时间来完成一篇博士论文,这是我在前两个职位期间所忽视的。我得到了惨痛的教训,如果你想在合理的时间内获得博士学位,就不要在外面工作!在这段间隙,我很快就从引言到前 65 页开始写起了我的论文。然后我收到了脸书的邀请。我准备搬到硅谷,享受我羡慕了这么多年的一切:额外津贴、创新和智慧文化,以及技术社区。这是一个我不能错过的机会,论文又被搁置了两年,因为我醒着的大部分时间都花在了工作上,无论是在工作日、周末还是节假日……疯狂地写论文。我期待着生活在一个我沉迷于技术和数据生态系统的世界里。但是…
另一边的草不会更绿
The cow tries to get the greener grass.
技术社区肯定在那里,而且显然非常强大,但它不是我想象的那样。由于这个行业的庞大规模,与我在洛杉矶地区所习惯的相比,聚会和其他活动非常没有人情味。此外,似乎大部分最初的硅谷创业能量都转移到了旧金山。为了参加聚会,我会花几个小时坐班车、Caltrain、BART 和 Muni 去 SoMa,然后对频繁的公司宣传感到失望,而不是讨论实际的科学和技术。并不是所有的小组都是这样,因为我参加了很多技术性的会议,激起了我学习更多的欲望。当然,还有一个问题是我是否能让加入meetup。我参加的大多数 meetup 小组会在几个小时内就挤满了一个热门话题或引人入胜的演讲者,等候名单有时长达 100 到 200 人。最后的打击是,我的出席假设我可以从工作中的项目中脱身,但我真的不能。我的技术社区最终成为了公司的其他人,这可能对我的工作有所帮助,但给了我一个比我想要的更窄的关注点,这只是让我继续工作的又一个因素。然而,聚会并不是技术社区中唯一重要的事情。我确实参加了一些会议,如 ACM SIGCIKM 、 BayLearn 、 Strata 2014 (但为了招聘),我还在 PyData 在脸书举行的时候发表了演讲。为了完全沉浸在技术社区和体验中,似乎现在需要住在旧金山,旧金山对我来说绝对不是一个城市——我更像是硅谷郊区类型的人,但活力不一样。
当我说我醒着的大部分时间都在工作时,我并不孤单。因为我是为了工作才搬到那里的,我在那里没有任何根、朋友或家人,所以我认为我这样做是有意义的。但是,以这样的速度工作对我的身体、精神和情绪都产生了影响。虽然在旧金山湾区有很多事情可以做,但由于工作文化的原因,真的没有时间去做。出于同样的原因,人们似乎没有时间陪我。这并不是对每个人都适用,但我发现在湾区比我生活过的其他地方更适用。除了长时间的工作之外,这不是我第一次成为生活中的“超额完成者”——这是我从高中(90 年代)开始就一直困扰的事情。
不仅有长时间工作和缺乏任何外部世界的压力,湾区也极其昂贵——没有人反对这一点。我在山景城的 850 平方英尺的一居室公寓现在以每月 4200 美元的价格出售。买房子对于初出茅庐或处于职业生涯中期的工程师来说通常是不现实的,除非他们已经在一家大公司工作了一段时间,或者从一家初创公司获得了一大笔薪酬,或者愿意从硅谷以外的地方通勤更长时间。在山景城和帕洛阿尔托,一套一居室的小房子很容易标价超过 100 万美元。接下来,将会有其他的竞标者也想要这栋房子。在帕洛阿尔托,价格已经高得离谱的房子以远高于挂牌价的价格出售,这种情况非常普遍。如果你是单身,你将需要注销税款,否则你将在纳税时大吃一惊。这种生活方式从长远来看是不可持续的。对我来说,这个问题并没有让我太想念这个地区。
另一方面,湾区的许多地方绝对美丽。从圣克鲁斯上方的绿色森林,到蒙特利北部的原始海岸线,圣何塞和东湾的绿色丘陵,到海湾沿岸奇异的异世界沼泽。这是一个干旱的两年,所以天气与洛杉矶没有太大的不同。
我学到了宝贵的一课。另一边的草不会更绿是真的。你可以给一个人提供免费餐、免费乘车和其他额外待遇(我甚至忘了它们是什么……它们最终变得不重要了),但它所做的只是让你继续工作,让你只专注于生活中的那一部分。你的“朋友”最后都在公司,在这样一个竞争激烈的环境里最后都成了坏事。像现场医生、牙医和理疗师这样的额外津贴听起来可能不错,但它们没有达到我在其他地方得到的服务的水平,而且也只是让你继续工作的方法。这些东西都是噱头。它们有利于吸引人们,有利于让生活变得便利,但它们真的只是让你继续工作、降低工资的方法。
筋疲力尽:是时候反思和放慢脚步了
当我回到洛杉矶时,我沿着太平洋海岸公路开车,眺望大海。冬日橘黄色的阳光透过窗户照射在我的脸上,我简直不敢相信已经两年没开车了。这不像我。我喜欢海滩的氛围,以及它带给我的放松感。那一刻,我意识到我要让自己的“神经”慢下来——不仅是回到原来的水平,甚至更慢。我想抽出时间给自己,不仅是为了完成我的研究,也是为了享受生活,想想作为一个人和一个专业人士,什么让我快乐。我意识到在那两年里,我失去了自我,随着每一个孤独的日子,我失去了对自己兴趣的热情,除了工作,我没有太多的爱好。
在过去的十年里,我在东部山区呆了很长时间,但是远远不够。我终于能够在 Mammoth 买一栋度假别墅,现在有时间享受它了。在过去的几个月里,我徒步旅行,骑山地自行车,穿雪鞋,驾车穿越一些大自然最美丽的地方。荒野的孤独和阴谋是非常洁净和有益于灵魂的。自从离开免费餐并变得如此活跃后,我也瘦了不少。我一直走得很快,并且总是更喜欢用我的腿而不是我的轮子,但这是自大学以来我第一次例行公事地做剧烈的心脏跳动活动。当我回首往事时,我意识到不仅仅是过去的三年让我精疲力竭。这是我成年后的全部生活方式。
事情已经改变了
在这篇文章中,我没有关闭任何一扇门,但我已经学会了重视一个健康的工作环境和工作时间,而不是额外津贴和纯粹的报酬。我的意图不是专注于薪酬和在“热门”公司工作,而是做对我的利益有益的工作,同时为我提供生活、退休的手段,并为我自己的爱好和副业项目提供资金。只有一件事我不会妥协(好吧,两件):我必须能穿短裤,我必须能有灵活的时间。现在,是否接受一个职位比看一家公司的基础产品以及在工作要求/描述中包含编码、机器学习和统计要复杂得多。我不想花 1%的时间使用一些基本模型(如朴素贝叶斯或逻辑回归)进行机器学习,而花 99%的时间进行数十亿次观察。相反,我希望能够在机器学习方面进行更多的探索,并学习预测和分类的新算法和方法。这并不意味着我完全想远离系统工程的东西,但这将真正取决于的产品和团队,而不仅仅是公司。
目前,我为一家初创公司提供咨询和指导。我可能会继续以此为职业,也可能不会。我有几个创业想法,我可能会去追求,但也可能不会。谁知道呢,也许我会回到湾区(在我前面提到的约束条件下),也可能不会。我可能会像以前一样在社区中更加活跃,但我已经意识到在博客圈、推特圈和这些数千美元的会议中有很多噪音、炒作和自我。只是做好自己的事情就有话说了。也许我刚刚成长为一名职业球员,我不知道。我只知道这些东西要半信半疑。
转换领域?
经过大量反思,我想看看“纯技术”之外的一些其他领域,包括但不限于:
- **环境和活动地理空间数据。**在山区生活后,我对环境数据非常感兴趣,尤其是使用时间序列、GPS 遥测和地理空间分析。我对这一领域的兴趣有着广泛的应用,从为搜救行动有效放置雪地车,到运动和智能活动,甚至导航。
- 金融。金融曾经在我的“永远不要”清单上从我在创业公司和硅谷的时光中了解了更多关于经济学和华尔街的知识后,我也对金融方面的一些应用感兴趣。机器学习显然对自动化投资非常有用,但数据可视化对我来说在人工交易中已经被证明是有用的。
- **教育。**我最初对统计学感兴趣的是心理测量学和教育评估的发展。我正在考虑回到这个方向。我还对教育技术领域感兴趣,它能改善教育材料的交付和学习评估。当然,我可能会去教书,最有可能是在大学水平,或作为某种类型的培训顾问。
- **航空:客机和无人机。**了解我的人都知道我热爱机场、航空公司和飞行。航空使用许多不同的数据科学技术。无人机是一项新兴技术,在空中为无人机导航已经成为各公司正在努力解决的一项挑战。无人机和客机的路由都使用地理空间/地图数据和网络/图形数据,并考虑了影响飞行、空域拥堵和机场/地面资源使用的许多变量。等待时间和排队论对跑道运行也很重要。航班的定价和调度涉及到大量的博弈论、网络分析和其他数据科学。所有这些挑战对我来说都很有趣。
- “物联网”令我恼火的是,新兴的嵌入式系统领域、它们的开发和数据处理已经变成了另一个廉价的时髦词汇,就像“大数据”或“数据科学”的误用一样 Raspberry Pi、Arduino 和定制印刷电路板等设备允许大众创建新的数据收集设备,这些设备不引人注目地适合任何需要记录数据的地方。虽然数据本身很有趣,但在这种特殊情况下,我实际上对硬件和纯工程方面比数据科学方面更感兴趣。
- 安全是一个指数级增长的领域,不仅对国家安全,而且对隐私都变得至关重要。安全是我非常感兴趣的一个领域,但我对此知之甚少,因此是一个更具雄心的领域变化的选项。我可以看到这是一个领域,我对它了解得越多,我就会越有热情。安全对我来说是未知的领域,但我不认为它是一个会很快消失的领域。
在把这份清单打出来并重读一遍后,我意识到我仍然保持着和以前一样的热情,也许我的灵魂需要暂时专注于别的事情。现在我只需要做出选择,哪些是最有价值的,哪些为我提供了最好的机会。在任何工作面试中,总会有“你对我/我们有什么问题吗?”在过去的几年里,我整理了一份长长的问题清单。如果我不喜欢这个答案,或者如果我知道面试官在撒谎,那就放弃!额外津贴和名人并不是幸福或更充实生活的关键——成为一个更好的人和能够享受生活的过程才是。
要看我家附近的一些图片,请看 原帖 !
最初发表于www.bytemining.com。
项目反应模型和神经网络?
我必须承认的一点是,虽然多年来我一直断断续续地在我的一些工作中使用项目反应理论,但我认为我从未完全理解它的所有活动部分。
项目反应模型是用于通过测试评估“能力”的大型模型集的一部分。一个测试“项目”(即一个问题),无论其结构如何,必然有两种可能的结果:应试者要么答对了,要么答错了。正确的概率是能力的函数。因此,换句话说,该模型将测试者的“能力”作为答对问题的预测指标。由于“测试”将包含大量的项目,考生的能力基本上是作为许多项目的加权平均值来衡量的。“能力”被转化为答对一个问题的概率的函数形式被假定为逻辑函数的形式,这多少有些武断。
总体思路应该会提醒你神经网络是如何工作的,即使 IRM 的工作方式并不完全相似(相差甚远)。人们可能会认为每个测试问题都是一种模式,它被“激活”以将潜在的“能力”(我们想要测量的)和观察到的结果联系起来——无论应试者的问题是对还是错。给问题分配权重类似于反向传播。(也许这并不令人震惊:作为一个概念,神经网络毕竟是认知心理学家的作品,他们也熟悉 IRM 背后的逻辑)。
IRM 潜在的更有趣的地方是它如何对待问题本身,除了它们是否被激活以及它们在多大程度上有助于获得“正确”的答案。它估计了每个问题的一些参数。由于这种媒介对插入方程不友好,为此我需要从维基百科复制并粘贴一张图片:
这是 IRM 三参数逻辑变量的函数形式。与“项目”相关的参数是 a、b 和 c,而θ是与应试者“能力”相关的参数给定相同的(假定的)能力水平,问题本身具有 3 个不同的特征。参数 b 捕捉“难度”,即对于给定能力的应试者来说,答对的难易程度。参数 c 捕捉“噪音”,即高能力考生得到“错误”答案或低能力考生得到“正确”答案的难易程度
然而,我之前没有想到的是参数 a,判别参数。在给定应试者的能力水平的情况下,通过调整激活函数的斜率(以及 P(正确|85+a)和 P(正确|85-a)之间的差异),这捕获了该项目能够区分应试者能力(比如 85+a 和 85-a)的可能性。因此,IRM 的承诺是,通过利用基于参数 a 和 b 选择的问题的明智组合,可以构建一个侧重于特定能力范围的测试。
在某种意义上,将 IRM 直觉应用于 ML 问题比在测试环境中更容易。在测试问题中,“能力”是未知的。它们需要根据测试结果进行估计,并且使用能力估计值作为起点来估计单个测试项目的参数。在最大似然问题中,我们清楚地知道输入是什么。在每个分类问题(和神经网络应用)中,我们“知道”这些输入通过一些逻辑函数(或类似的函数)转化为结果,我们通过我们拥有的样本估计其参数:在纯逻辑模型中,我们估计“平均”数据、增强模型的参数,我们估计补充“主要”逻辑函数的附加模型/公式以解决分类误差,在神经网络中,我们估计一整串逻辑函数(作为各种节点的激活函数),并根据每个逻辑函数对误差的贡献大小等迭代地对它们赋予权重。基于神经网络的模型更接近 IRM,至少在某种意义上,它估计了激活函数本身的一些参数,但它仍然有点幼稚,因为据我所知,它们是对整个样本(验证集)估计的参数。然而,似乎更合理的是,每个节点的辨别能力和相关的激活函数应该被概念化为输入的函数,并且用于特定组成的数据集的节点集合应该在此基础上被有策略地选择。让 IRM 适应 ML 环境指出了前进的方向——假设人们还没有这样做。
*大多数人把这个框架称为项目反应理论,缩写为 IRT。因为它只是一个概念框架,一个模型,而不是一个“理论”,称它为 IRM 似乎更合适一些,我坚持它。
基于采样的迭代初始质心搜索 k 均值聚类算法
“Black Night Sky” by Shlomo Shalev on Unsplash
在这篇文章中,我们将着眼于使用迭代方法来搜索 k-means 聚类的一组更好的初始质心,并且将通过在我们的完整数据集的样本上执行这个过程来实现。
我们说的“更好”是什么意思由于 k-均值聚类旨在通过连续迭代收敛于聚类中心(质心)和基于距这些质心的距离的聚类成员的最优集合,直观地,这些初始质心的定位越最优,收敛所需的 k-均值聚类算法的迭代次数就越少。因此,考虑寻找一组更好的初始质心位置是优化 k-means 聚类过程的有效方法。
具体来说,我们要做的是从我们的完整数据集中提取一个数据样本,并对其运行 k-means 聚类算法的短期运行(不收敛),短期运行将包括质心初始化过程,这是不必要的。我们将使用多个随机初始化的质心重复这些短时间运行,并将跟踪度量标准(类内平方和)的改进,以确定类成员的优度(或者至少是度量这种优度的有效度量标准之一)。与提供最低惯性的随机质心初始化迭代过程相关联的最终质心是质心集,我们将把该质心集带入我们的完整数据集聚类过程。
希望这项前期工作将为我们的完整聚类过程带来一组更好的初始质心,从而减少 k-means 聚类迭代次数,并最终减少完全聚类数据集所需的时间。
这显然不是优化质心初始化的唯一方法。在过去,我们已经讨论了朴素分片质心初始化方法,一种用于最优质心初始化的确定性方法。对 k-means 聚类算法的其他形式的修改也采用了不同的方法来解决这个问题(参见 k-means++ 进行比较)。
本帖将按如下方式处理我们的任务:
- 准备数据
- 准备我们的样品
- 执行质心初始化搜索迭代,以确定初始质心的“最佳”集合
- 使用结果对整个数据集执行聚类
为了更全面地理解实现的实用性,以后的文章将对质心初始化的各种方法的结果进行比较并报告。然而,现在让我们介绍和探索这种质心初始化的特殊方法。
准备数据
对于这个概述,我们将使用 3D 道路网络数据集。
由于这个特定的数据集没有缺失值,也没有类标签,我们的数据准备将主要包括归一化,同时删除一列来标识额外 3 列测量值来自的地理位置,这对我们的任务没有用处。更多详情参见数据集描述。
import numpy as np
import pandas as pd
from sklearn import preprocessing# Read dataset
data = pd.read_csv('3D_spatial_network.csv', header=None)# Drop first column (not required)
data.drop(labels=0, axis=1, inplace=True)# Normalize data (min/max scaling)
data_arr = data.values
sc = preprocessing.MinMaxScaler()
data_sc = sc.fit_transform(data_arr)
data = pd.DataFrame(data_sc)
让我们来看看我们的数据样本:
data.sample(10)
准备样品
接下来,我们将提取用于寻找“最佳”初始质心的样本。让我们明确一下我们到底在做什么:首先,我们从数据集中抽取一组样本;然后,我们将对此样本数据执行连续的 k-means 聚类,每次迭代将:
- 随机初始化 k 个质心并执行 n 次 k 均值聚类算法迭代
- 将记录每个质心的初始惯性(聚类内平方和),以及其最终惯性,并且在 n 次迭代中提供最大惯性增量的初始质心将被选为我们用于完整数据集聚类的初始质心
最后,我们将使用上一步中找到的初始聚类对整个数据集执行完整的 k-means 聚类。
2 个要点:
- 为什么不使用惯性最大下降?(希望这一领域最初的势头能够持续下去。)。)这样做也是一个值得探索的有效选择(更改一行代码就可以做到这一点)。一个任意的初始实验选择,一个可能需要更多调查的选择。然而,对多个样本的重复执行和比较最初表明,惯性的最低值和最大下降值在大部分时间是一致的,因此决定可能实际上是任意的,但在实践中也是无关紧要的。
- 特别澄清的是,我们没有从我们的数据集中多次采样(例如,质心初始化的每次迭代从我们的数据集中采样一次)。对于单个质心初始化搜索的所有迭代,我们采样一次。一个样本,我们将从中多次随机获取初始质心。与重复采样的想法形成对比,每次质心初始化迭代一次。
下面,我们设置:
- 样本量占整个数据集的比例
- 再现性的随机状态
- 数据集的聚类数(k)
- k-means 算法的迭代次数(n)
- 在样本数据集上进行聚类时,尝试寻找最佳机会初始质心的次数
然后我们设置样本数据
# Some variables
SAMPLE_SIZE = 0.1
RANDOM_STATE = 42
NUM_CLUSTERS = 10 # k
NUM_ITER = 3 # n
NUM_ATTEMPTS = 5 # mdata_sample = data.sample(frac=SAMPLE_SIZE, random_state=RANDOM_STATE, replace=False)
data_sample.shape
现在,当我们有了数据样本(data_sample)时,我们准备好执行质心初始化的迭代以进行比较和选择。
样本数据聚类
因为 Scikit-learn 的 k-means 聚类实现不允许在聚类迭代之间容易地获得质心,所以我们必须对工作流进行一些修改。虽然verbose选项确实会将这方面的一些有用信息直接输出到 screen,并且重定向该输出,然后对其进行后解析,这将是获取我们所需要的信息的一种方法,但是我们要做的是编写我们自己的外部迭代循环来控制我们自己的 n 变量。
这意味着在每个聚类步骤运行之后,我们需要计算迭代次数,并在这些迭代之间捕获我们需要的内容。然后,我们将聚类迭代循环包装在质心初始化循环中,这将从我们的样本数据 m 次初始化 k 个质心。这是特定于我们的 k 均值质心初始化过程的特定实例化的超参数,超出了“常规”k 均值。
给定我们的上述参数,我们将我们的数据集聚类成 10 个聚类(NUM_CLUSTERS,或 k ),我们将运行我们的质心搜索 3 次迭代(NUM_ITER,或 n ),我们将尝试使用 5 个随机初始质心(NUM_ATTEMPTS,或 m ),之后我们将确定我们的“最佳”质心集,以初始化完整的聚类(在我们的情况下,度量是类内最小的平方和,或惯性)。
然而,在任何聚类之前,让我们看看在任何聚类迭代之前,我们的 k-means 的单个初始化是什么样的。
from sklearn.cluster import KMeanskm = KMeans(n_clusters=NUM_CLUSTERS, init='random', max_iter=1, n_init=1)#, verbose=1)
km.fit(data_sample)print('Pre-clustering metrics')
print('----------------------')
print('Inertia:', km.inertia_)
print('Centroids:', km.cluster_centers_)Pre-clustering metrics
----------------------
Inertia: 898.5527121490726
Centroids: [[0.42360342 0.20208702 0.26294088]
[0.56835267 0.34756347 0.14179924]
[0.66005691 0.73147524 0.38203476]
[0.23935675 0.08942105 0.11727529]
[0.58630271 0.23417288 0.45793108]
[0.1982982 0.11219503 0.23924021]
[0.79313864 0.52773534 0.1334036 ]
[0.54442269 0.60599501 0.17600424]
[0.14588389 0.29821987 0.18053109]
[0.73877864 0.8379479 0.12567452]]
在下面的代码中,请注意,我们必须在每次迭代开始和结束时手动跟踪我们的质心,因为我们自己正在管理这些连续的迭代。然后,我们将这些末端质心作为初始质心送入下一次循环迭代,并运行一次迭代。有点乏味,而且令人恼火的是,我们不能直接从 Scikit-learn 的实现中得到这一点,但这并不困难。
final_cents = []
final_inert = []
for sample in range(NUM_ATTEMPTS):
print('\nCentroid attempt: ', sample)
km = KMeans(n_clusters=NUM_CLUSTERS, init='random', max_iter=1, n_init=1)#, verbose=1)
km.fit(data_sample)
inertia_start = km.inertia_
intertia_end = 0
cents = km.cluster_centers_
for iter in range(NUM_ITER):
km = KMeans(n_clusters=NUM_CLUSTERS, init=cents, max_iter=1, n_init=1)
km.fit(data_sample)
print('Iteration: ', iter)
print('Inertia:', km.inertia_)
print('Centroids:', km.cluster_centers_)
inertia_end = km.inertia_
cents = km.cluster_centers_ final_cents.append(cents)
final_inert.append(inertia_end)
print('Difference between initial and final inertia: ', inertia_start-inertia_end)Centroid attempt: 0
Iteration: 0
Inertia: 885.1279991728289
Centroids: [[0.67629991 0.54950506 0.14924545]
[0.78911957 0.97469266 0.09090362]
[0.61465665 0.32348368 0.11496346]
[0.73784495 0.83111278 0.11263995]
[0.34518925 0.37622882 0.1508636 ]
[0.18220657 0.18489484 0.19303869]
[0.55688642 0.35810877 0.32704852]
[0.6884195 0.65798194 0.48258798]
[0.62945726 0.73950354 0.21866185]
[0.52282355 0.12252092 0.36251485]]
Iteration: 1
Inertia: 861.7158412685387
Centroids: [[0.67039882 0.55769658 0.15204125]
[0.78156936 0.96504069 0.09821352]
[0.61009844 0.33444322 0.11527662]
[0.75151713 0.79798919 0.1225065 ]
[0.33091899 0.39011157 0.14788905]
[0.18246521 0.18602087 0.19239602]
[0.55246091 0.3507018 0.33212609]
[0.68998302 0.65595219 0.48521344]
[0.60291234 0.73999001 0.23322449]
[0.51953015 0.12140833 0.34820443]]
Iteration: 2
Inertia: 839.2470653106332
Centroids: [[0.65447477 0.55594052 0.15747416]
[0.77412386 0.952986 0.10887517]
[0.60761544 0.34326727 0.11544127]
[0.77183027 0.76936972 0.12249837]
[0.32151587 0.39281244 0.14797103]
[0.18240552 0.18375276 0.19278224]
[0.55052636 0.34639191 0.33667632]
[0.691699 0.65507199 0.48648245]
[0.59408317 0.73763362 0.23387334]
[0.51879974 0.11982321 0.34035345]]
Difference between initial and final inertia: 99.6102464383905...
完成之后,让我们看看我们在质心搜索中做得怎么样。首先,我们检查最终惰性的列表(或组内平方和),寻找最低值。然后,我们将相关的质心设置为下一步的初始质心。
# Get best centroids to use for full clustering
best_cents = final_cents[final_inert.index(min(final_inert))]
best_cents
这是这些质心的样子:
array([[0.55053207, 0.16588572, 0.44981164],
[0.78661867, 0.77450779, 0.11764745],
[0.656176 , 0.55398196, 0.4748823 ],
[0.17621429, 0.13463117, 0.17132811],
[0.63702675, 0.14021011, 0.18632431],
[0.60838757, 0.39809226, 0.14491584],
[0.43593405, 0.49377153, 0.14018223],
[0.16800744, 0.34174697, 0.19503396],
[0.40169376, 0.15386471, 0.23633233],
[0.62151433, 0.72434071, 0.25946183]])
运行全 k 均值聚类
现在,有了我们最好的初始质心,我们可以在我们的完整数据集上运行 k-means 聚类。由于 Scikit-learn 允许我们传入一组初始质心,我们可以通过下面比较简单的代码来利用这一点。
km_full = KMeans(n_clusters=NUM_CLUSTERS, init=best_cents, max_iter=100, verbose=1, n_init=1)
km_full.fit(data)
这种特殊的 k 均值运行在 13 次迭代中收敛:
...start iteration
done sorting
end inner loop
Iteration 13, inertia 7492.170210199639
center shift 1.475641e-03 within tolerance 4.019354e-06
为了比较,这里有一个完整的 k 均值聚类运行,只使用随机初始化的质心(“常规”k 均值):
km_naive = KMeans(n_clusters=NUM_CLUSTERS, init='random', max_iter=100, verbose=1, n_init=1)
km_naive.fit(data)
这次运行花费了 39 次迭代,具有几乎相同的惯性:
...start iteration
done sorting
end inner loop
Iteration 39, inertia 7473.495361902045
center shift 1.948248e-03 within tolerance 4.019354e-06
我将寻找 13 次迭代和 39 次迭代(或类似的)之间的执行时间差异留给读者。不用说,从长远来看,提前几个周期吃掉一个数据样本(在我们的例子中,是整个数据集的 10%)节省了相当多的周期,而不会牺牲我们的总体集群度量。
当然,在得出任何概括之前进行额外的测试是有保证的,在未来的帖子中,我将在各种数据集上对许多质心初始化方法进行一些实验,并与一些额外的度量进行比较,希望能够更清楚地了解如何优化无监督学习工作流。
这篇文章最初发表在 KDnuggets 上。