TowardsDataScience 博客中文翻译 2021(四百四十)
让我们假设我们被一个酿酒厂雇佣来建立一个预测模型来检查他们红酒的质量。传统的葡萄酒检测方法是由人类专家来完成的。因此,该过程容易出现人为错误。目标是建立一个生产葡萄酒测试客观方法的流程,并将其与现有流程相结合,以减少人为错误。为了建立预测模型,我们将使用 UCI 机器学习库提供的数据集。我们将尝试根据与葡萄酒相关的特征来预测葡萄酒的质量。探索数据预测葡萄酒质量(二元分类)浏览模型结果我真诚地相信人
那种红酒够好吗?
介绍预测建模的基本工作流程并演示如何记录该过程的介绍性教程。
让我们假设我们被一个酿酒厂雇佣来建立一个预测模型来检查他们红酒的质量。传统的葡萄酒检测方法是由人类专家来完成的。因此,该过程容易出现人为错误。目标是建立一个生产葡萄酒测试客观方法的流程,并将其与现有流程相结合,以减少人为错误。
为了建立预测模型,我们将使用 UCI 机器学习库提供的数据集。我们将尝试根据与葡萄酒相关的特征来预测葡萄酒的质量。
目标:
- 探索数据
- 预测葡萄酒质量(二元分类)
- 浏览模型结果
探索数据
加载数据,库和主浏览数据
# libraries
library(dplyr)
library(ggplot2)
library(caTools)
library(caret)
library(GGally) dataFrame = read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv", sep = ';')summary(dataFrame)## fixed.acidity volatile.acidity citric.acid residual.sugar
## Min. : 4.60 Min. :0.1200 Min. :0.000 Min. : 0.900
## 1st Qu.: 7.10 1st Qu.:0.3900 1st Qu.:0.090 1st Qu.: 1.900
## Median : 7.90 Median :0.5200 Median :0.260 Median : 2.200
## Mean : 8.32 Mean :0.5278 Mean :0.271 Mean : 2.539
## 3rd Qu.: 9.20 3rd Qu.:0.6400 3rd Qu.:0.420 3rd Qu.: 2.600
## Max. :15.90 Max. :1.5800 Max. :1.000 Max. :15.500
## chlorides free.sulfur.dioxide total.sulfur.dioxide density
## Min. :0.01200 Min. : 1.00 Min. : 6.00 Min. :0.9901
## 1st Qu.:0.07000 1st Qu.: 7.00 1st Qu.: 22.00 1st Qu.:0.9956
## Median :0.07900 Median :14.00 Median : 38.00 Median :0.9968
## Mean :0.08747 Mean :15.87 Mean : 46.47 Mean :0.9967
## 3rd Qu.:0.09000 3rd Qu.:21.00 3rd Qu.: 62.00 3rd Qu.:0.9978
## Max. :0.61100 Max. :72.00 Max. :289.00 Max. :1.0037
## pH sulphates alcohol quality
## Min. :2.740 Min. :0.3300 Min. : 8.40 Min. :3.000
## 1st Qu.:3.210 1st Qu.:0.5500 1st Qu.: 9.50 1st Qu.:5.000
## Median :3.310 Median :0.6200 Median :10.20 Median :6.000
## Mean :3.311 Mean :0.6581 Mean :10.42 Mean :5.636
## 3rd Qu.:3.400 3rd Qu.:0.7300 3rd Qu.:11.10 3rd Qu.:6.000
## Max. :4.010 Max. :2.0000 Max. :14.90 Max. :8.000
从特征上看,我们认为“质量”是我们的目标特征。我们总共有 11 个特征用作预测器。
探索特性
转换目标特征
由于我们将讨论分类模型,我们将把我们的目标特征从连续类转换成二进制类。这样我们就能适应一个广泛使用但非常简单的分类模型。
原始目标特征标签的分布
# checking ratio of different labels in target feature
prop.table(table(dataFrame$quality)##
## 3 4 5 6 7 8
## 0.006253909 0.033145716 0.425891182 0.398999375 0.124452783 0.011257036dataFrame = dataFrame %>%
mutate(quality_bin = as.factor(ifelse(quality <= 5, 0,1))) %>%
select(-quality) p = round(prop.table(table(dataFrame$quality_bin))*100,2)
经过改造后,我们有 53.47%的案例被归类为好酒,而 46.53%的案例被归类为劣酒。
我们在这里有一个很好的目标类分布!这很好。否则,我们将不得不处理数据平衡。虽然我们不会在本教程中讨论这个领域,但这是一个很好的讨论领域。所以对于那些将要了解它的人来说,这是额外的加分!
简而言之,我们希望在我们的目标特征中有一个来自不同标签的观察值的平衡分布。否则,一些 ML 算法会过度拟合。
可视化探索预测器
探索酸度
dataFrame %>%
ggplot(aes(x = as.factor(quality_bin), y = fixed.acidity, color = quality_bin)) +
geom_boxplot(outlier.color = "darkred", notch = FALSE) +
ylab("Acidity") + xlab("Quality (1 = good, 2 = bad)") +
theme(legend.position = "none", axis.title.x = element_blank()) +
theme_minimal()
我们有多个连续的特征,可以用相似的方式绘制出来。这意味着我们将不得不一次又一次地重写我们刚刚在代码块中写的代码:viz _ acidity。在编码中,我们不想那样做。因此,我们将创建一个函数,并将其包装在我们的代码中,以便将来可以重用它!
如果听起来太多,就坚持下去。一旦你看到代码,它会变得更有意义。
# boxplot_viz
# plots continuous feature in boxplot categorized on the quality_bin feature labels from dataFrame
# @param feat Feature name (string) to be plotted
boxplot_viz = function(feat){ dataFrame %>%
ggplot(aes_string(x = as.factor('quality_bin'), y = feat, color = 'quality_bin')) +
geom_boxplot(outlier.color = "darkred", notch = FALSE) +
labs(title = paste0("Boxplot of feature: ", feat)) + ylab(feat) + xlab("Quality (1 = good, 2 = bad)") +
theme(legend.position = "none", axis.title.x = element_blank()) +
theme_minimal()
}boxplot_viz('volatile.acidity')
for (i in names(dataFrame %>% select(-'quality_bin'))){
print(boxplot_viz(i))
}
检查相关性
我们可以快速检查我们预测者之间的相关性。
dataFrame %>%
# correlation plot
ggcorr(method = c('complete.obs','pearson'),
nbreaks = 6, digits = 3, palette = "RdGy", label = TRUE, label_size = 3,
label_color = "white", label_round = 2)
高度相关的特征不会向模型添加新的信息,并且模糊了单个特征对预测器的影响,因此难以解释单个特征对目标特征的影响。这个问题叫做多重共线性。一般来说,我们不想保留相关性非常高的特征。
- 相关性的阈值应该是多少?
- 我们如何决定丢弃哪个变量?
- 相关特征会损害预测准确性吗?
所有这些都是很好的问题,值得好好了解。所以,对于那些将要学习的人来说,再一次加分!
在基于相关性做出任何决定之前,检查特征的分布。除非任意两个特征有线性关系,否则相关性意义不大。
特征工程
根据从数据探索中获得的见解,可能需要转换某些要素或创建新要素。一些常见的特征工程任务有:
- 特征的规范化和标准化
- 宁滨连续特征
- 创建复合特征
- 创建虚拟变量
本教程不会涵盖特征工程,但这是一个很好的探索领域。在拟合任何预测模型之前,在必要的特征工程之后进行大量的数据探索是绝对必要的先决条件!
拟合模型
拆分数据
在现实世界中,我们根据被称为训练数据的历史数据训练我们的预测模型。然后,我们将该模型应用于新的未知数据,称为测试数据,并测量性能。因此,我们可以确定我们的模型是稳定的,或者没有过度拟合训练数据。但是由于我们无法访问新的葡萄酒数据,我们将按照 80:20 的比例将数据集分成训练和测试数据。
set.seed(123)
split = sample.split(dataFrame$quality_bin, SplitRatio = 0.80)
training_set = subset(dataFrame, split == TRUE)
test_set = subset(dataFrame, split == FALSE)
让我们检查一下训练和测试数据中的数据平衡。
prop.table(table(training_set$quality_bin))##
## 0 1
## 0.4652072 0.5347928prop.table(table(test_set$quality_bin))##
## 0 1
## 0.465625 0.534375
训练数据的拟合模型
我们将在数据集上拟合逻辑回归分类模型。
model_log = glm(quality_bin ~ .,
data = training_set, family = 'binomial')
summary(model_log)##
## Call:
## glm(formula = quality_bin ~ ., family = "binomial", data = training_set)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.3688 -0.8309 0.2989 0.8109 2.4184
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 17.369521 90.765368 0.191 0.84824
## fixed.acidity 0.069510 0.112062 0.620 0.53507
## volatile.acidity -3.602258 0.558889 -6.445 1.15e-10 ***
## citric.acid -1.543276 0.638161 -2.418 0.01559 *
## residual.sugar 0.012106 0.060364 0.201 0.84106
## chlorides -4.291590 1.758614 -2.440 0.01467 *
## free.sulfur.dioxide 0.027452 0.009293 2.954 0.00314 **
## total.sulfur.dioxide -0.016723 0.003229 -5.180 2.22e-07 ***
## density -23.425390 92.700349 -0.253 0.80050
## pH -0.977906 0.828710 -1.180 0.23799
## sulphates 3.070254 0.532655 5.764 8.21e-09 ***
## alcohol 0.946654 0.120027 7.887 3.10e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1766.9 on 1278 degrees of freedom
## Residual deviance: 1301.4 on 1267 degrees of freedom
## AIC: 1325.4
##
## Number of Fisher Scoring iterations: 4
让我们绘制 p 值最低/绝对 z 值最高的变量。
p = varImp(model_log) %>% data.frame()
p = p %>% mutate(Features = rownames(p)) %>% arrange(desc(Overall)) %>% mutate(Features = tolower(Features))p %>% ggplot(aes(x = reorder(Features, Overall), y = Overall)) + geom_col(width = .50, fill = 'darkred') + coord_flip() +
labs(title = "Importance of Features", subtitle = "Based on the value of individual z score") +
xlab("Features") + ylab("Abs. Z Score") +
theme_minimal()
检查模型性能
我们将通过在我们以前看不到的测试数据上运行来检查我们的模型表现如何。我们将比较预测结果和实际结果,并计算一些常用的二元分类模型性能测量指标。
# predict target feature in test data
y_pred = as.data.frame(predict(model_log, type = "response", newdata = test_set)) %>%
structure( names = c("pred_prob")) %>%
mutate(pred_cat = as.factor(ifelse(pred_prob > 0.5, "1", "0"))) %>%
mutate(actual_cat = test_set$quality_bin)p = confusionMatrix(y_pred$pred_cat, y_pred$actual_cat, positive = "1")
p## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 108 46
## 1 41 125
##
## Accuracy : 0.7281
## 95% CI : (0.6758, 0.7761)
## No Information Rate : 0.5344
## P-Value [Acc > NIR] : 9.137e-13
##
## Kappa : 0.4548
##
## Mcnemar's Test P-Value : 0.668
##
## Sensitivity : 0.7310
## Specificity : 0.7248
## Pos Pred Value : 0.7530
## Neg Pred Value : 0.7013
## Prevalence : 0.5344
## Detection Rate : 0.3906
## Detection Prevalence : 0.5188
## Balanced Accuracy : 0.7279
##
## 'Positive' Class : 1
##
模型性能总结:
- 准确率 : 72.81%的葡萄酒样本被正确分类。
- 灵敏度/召回率 : 73.1%的实际好酒样本被正确分类。
- Pos Pred 值/精度:总好酒预测的 75.3%是实际好酒。
概要洞察
让我们总结一下我们从练习中学到的关于葡萄酒测试的知识:
- 酒精含量、挥发性酸度、硫酸盐和总二氧化硫是影响葡萄酒质量的四个最重要的统计学特征。
- 给定我们分析的 11 个特征的信息,我们可以在大约 73%的情况下准确预测葡萄酒质量,
- 这比使用传统的基于专家的方法获得的准确度高大约 26%。
人们能区分 5 度以下的葡萄酒和 10 度以上的葡萄酒,对于白葡萄酒只有 53%的可能性,对于红葡萄酒只有 47%的可能性
感谢阅读!
通过阅读这篇文章,您应该对 R 中的函数是如何工作的有一个基本的了解,以及如何在您的个人生活中使用它!
不确定接下来该读什么?我为你挑选了另一篇文章:
https://curious-joe.medium.com/have-r-look-after-your-stocks-8462af2ee3c1
阿拉法特·侯赛因
AI 的民主化好不好?
一篇关于 AI 民主化是否对网络有益的观点和讨论文章
图片来自 Unsplash,作者马库斯·温克勒
在现代教育时代,几乎任何有网络连接的人都可以学习他们想学的任何东西。学习 AI 也是如此,现在,任何具备必备背景的人都有机会学习 AI 并构建 AI 程序。当我说“民主化”时,我指的是容易获得人工智能教育和学习,更重要的是,容易获得建立可扩展的人工智能应用程序。在我今年夏天早些时候写的一篇文章中,我讨论了我在人工智能伦理方面的个人经历,以及我如何不重视我的工作的意义。那篇文章在这里:
我总是听说任何一种学习的民主化都是有益的,这一点我大体上同意。这也延伸到了人工智能,对于我人工智能职业生涯的主要部分,我完全同意。我是一名高中生,直到 11 个月前才开始学习微积分课程。然而,到那时为止,我已经在人工智能方面取得了很大进步,因为我可以从免费的 Youtube 视频和在线项目中学习。然而,在这一点上,在考虑了我和其他人是如何使用 AI 后,我的强烈意见有些动摇。虽然老实说,我对这个话题没有固定的看法,但在这篇文章中,我将讨论我认为 AI 民主化的一些主要好处,更重要的是,一些缺点是什么,因为我相信许多人都不会谈论它。
好人
我会尽量缩短这一部分。显然,有太多的理由说明让这么多的人能够接触到人工智能是有益的。首先,它为人们提供了学习和建立职业生涯的机会,这是他们以前从未有过的。对于那些可能没有机会接受正规教育的人来说,训练营、Coursera 课程和谷歌的认证是人们进入人工智能和寻找工作机会的绝佳选择。此外,它允许像我这样的年轻开发人员建立对人工智能的兴趣,并在大学里追求它。
最重要的是,人工智能的民主化为未来几十年创造了一大批人工智能工程师、研究人员和开发人员。这一点很重要,因为只有在历史上,我们才能向如此年轻的人传授如此复杂的概念。这无疑应该会加速 AI 的成长,并帮助它融入我们社会的更多部分。然而,有人担心我们将这些新的人工智能系统融入我们日常生活的速度有多快。虽然我可以举出更多的好处,但我会在这里停下来,因为我想你已经明白了。在我看来,更重要但讨论较少的是人工智能易于使用的一些负面影响。
坏事
老实说,人工智能的可访问性没有太多的负面影响,然而,主要的和明显的一个是伦理问题。
作为一名年轻的开发人员,我的工作在 AI 社区经常被视为噱头。虽然社区中的退伍军人经常过度赞扬我的工作,但有时他们并不重视我的理解和工作。当我试图启动真正的应用程序或对我的工作产生真正的影响时,这导致了重大问题。正如我在上面链接的文章中所描述的,许多人伸出手来,警告我关于我工作的道德问题。问题是我不理解道德规范,也不愿意去想它。
一个主要问题是,几乎每门初级人工智能课程,包括我自己的课程,都讨论了人工智能可以在哪些领域实施,这些领域存在重大的伦理问题,例如医疗保健。对于开始学习人工智能的年轻孩子来说,他们相信他们可以创建人工智能系统用于真实的系统,让他们忘乎所以。对于渴望和驱动的年轻头脑,他们不会接受否定的答案,会直接进入一个项目,而不考虑伤害。这正是我所做的。这就是我害怕民主化的原因,因为它将人工智能交给了那些可能不理解他们在建设什么以及为什么他们的工作有潜在危险的人。虽然这只是我为数不多的保留意见之一,但却是非常重要的,应该予以考虑。
这就提出了一个问题,人们应该从什么时候开始接触人工智能?我相信它可以在大学早期,但老实说,这是一个具有挑战性的问题来回答。一个更好的解决方案是在任何人工智能课程或课程表中包含多个伦理课程。这将是一门课程的第一课,这样学生们才能确切地了解人工智能伦理是什么,以及它们为什么如此重要。这将加强学生的谨慎和责任感,从而解决这个问题。
另一个主要问题是缺乏理解。快速浏览 Coursera,可以发现很多 AI 课程只注重开发,没有理论。这意味着学习人工智能的新人只是在学习如何用 Keras 和 PyTorch 编写神经网络代码,而不理解它背后的任何理论。我很快就成为这个陷阱的受害者,我希望在不久的将来写下这段经历。这是 AI 社区的一个主要问题,因为它创造了没有适当技术背景的工程师。如果理论在开始时没有被恰当地教授,那么以后就很难恰当地执行它,因为它是一个基础。因此,一旦新的人工智能开发人员进入就业市场,他们是较弱的候选人,如果他们被雇用,人工智能的进步就会停止。为了让人工智能以它需要的速度发展,我们需要恰当有效地教导新的开发者。
这是人工智能民主化的两大负面,主要是因为我亲眼看到和经历了这些。如果你有任何其他的担忧,请在评论中告诉我,这样我们就可以讨论它们了。
最后的想法
我真诚地相信人工智能的民主化对网络是有益的。如果它不存在,我就写不出这篇文章。我实际上只有 17 岁,就在几十年前,这么年轻的人对如此先进的课题如此了解是不可思议的。但现在,在 2021 年,我很难称得上是独一无二的,有些比我年轻的学生知道的甚至比我还多。我认为我们面临的关于人工智能民主化的主要问题可以很容易地解决,只需要那些建立这个机构的人的正确认识和努力。但是现在,我会尽我最大的努力来防止我自己和我周围的人落入阻碍人工智能发展的陷阱。希望这篇文章能让合适的人看到,并帮助他们改变心态。
彩虹之上有特色店吗?
如何为您的使用案例选择合适的功能库
图片由叶夫根尼·切博塔列夫通过像素拍摄
在一个蓬勃发展的 SaaS 垂直市场中艰难地选择任何工具,让我想起了《绿野仙踪》中的那首歌*—*—越过彩虹——这首歌最初由朱迪·加兰演唱,但被夏威夷活动家伊斯雷尔·kamakawiwoʻole.完美翻唱
在彩虹之上的某个地方,天空是蓝色的,你敢于梦想的梦想真的会实现
有一天我会对着星星许愿,醒来时发现乌云已经离我远去,烦恼就像柠檬汁一样融化了
所以,是的,我们很容易感觉像多萝西在寻找传说中的特色商店!但是,任何旅程都是这样开始的,对吗?带着一种睁大眼睛和极度缺乏知识的感觉。考虑到这一点,多一点信息和经验可以帮助我们获得足够的知识来开始这段旅程。
几个好问题
功能商店无疑已经成为 MLOps 生态系统中最受关注的新参与者之一。但是,伴随炒作而来的是许多问题。这篇博客旨在提供一些关于如何根据您的特定需求和要求来识别最佳特性库的建议。
与所有探索之旅一样,我们的功能商店探索始于提出正确的问题。在考虑选择什么样的功能商店时,可以问自己以下几个问题:
- 有什么好的方法来分析我的选择,即筛选越来越多的解决方案?为此,你真的需要了解你自己,你的组织,你的团队。
- 今天能得到的有多少是真正“跨越彩虹”的?翻译——什么是真实的,什么是炒作?
- 我能自己做吗?建而不买?也许有一个骗局要造???
- 我的团队的目标如何与我的选择相交?
现在,是时候看看我们潜在的工具包了!
欢迎来到选择
大约三年前,我和我的一位同事开始对所有可用的主要和次要 MLOps 工具的细微方面进行编目(该文档供我们工作的咨询公司内部使用,很抱歉我不能分享)。我们创造了一个超级有用的工具。
这有助于我们区分各种产品和服务。它帮助我们向其他顾问介绍了各种选择之间的区别。然而,如果您在过去几年中一直关注 MLOps 对话,您会知道市场上充斥着许多开源项目和 SaaS 工具。用博·伯翰讽刺而睿智的话来说,我能让你在任何时候对任何事情都感兴趣吗?当然,他说的是互联网,但老实说,如果你对一切都开放的话,MLOps 市场开始变得有点势不可挡。
因此,正如你所料,我们所做的编目是不可持续的——正确维护是一个巨大的难题。我们开始走上记录太多排列、太多选择的道路。虽然这很有教育意义,但我们也碰到了非常重要的事实。
大多数决策者,甚至是工程师,都需要对工具有更直观的理解,也就是说,肮脏的细节会在适当的时候出现,但我们关键的、固执己见的要点是什么。
记住所有这些,这个由 MLOps 社区成员管理的功能商店的比较被很好地放在一起并且非常方便,所以我将把它作为一个参考点。该页面提供了一个直观的方向,可以开始就考虑哪些功能商店进行有意义的讨论。此外,它通常符合我所认为的功能存储,即 ML 功能的离线和在线存储,重点是通过存储、转换定义、标准化、时间旅行、沿袭和治理进行数据和功能管理。
最后一点很重要,因为并不是所有被称为特性库的东西都是一个。这是一个越来越流行的术语,许多技术供应商都热衷于赶时髦,不管什么很快被接受为功能商店的合适定义。
比较功能商店
你很可能不熟悉特色商店。如果这是真的,你可能会试图过滤掉炒作,得到什么是重要的。因此,让我们坚持一些基本原则,比如与云供应商的集成、交付方法和销售模式。
基础知识实际上很重要,因为可能有两个主要杠杆控制着你的决策过程——政策和金钱——这两个杠杆都已经在影响你的偏好。换句话说,这些基本要素可以很好地将产品分成大致适合您的环境的组。
从这里开始,可能值得考虑一下功能商店中的主要产品功能。例如,从源代码到定义、自动化和服务的整个特性生命周期的管理。或者,治理实际上存在于别处的所述生命周期。或者,满足在线用例的能力。
对于这次对话,我将选择泰克顿、盛宴、 AWS Sagemaker 功能商店和 scribbleData 进行比较,这当然不是一个详尽的列表,但这是一个很好的起点,并且适用于本次练习。
功能商店评估对比页面 |图片由 MLOps 社区提供
基础知识
关于泰克顿和 scribbleData,首先要注意的是,它们更像 SaaS 风格。相比较而言,Feast 是一个开源工具,AWS 的功能商店是 Sagemaker 平台的一部分。
下一个吸引我眼球的是对云平台的支持——有不同级别的支持(现在和路线图)。如果你是 AWS 优先购买者,你可能会选择 Sagemaker。如果你在 Azure 上,只有泰克顿和盛宴适用。如果你是一家 GCP 商店,或者害怕被云供应商锁定,除了 AWS 的功能商店,其他都适用。为了这个练习,让我们保留我们的多云选项,从列表中删除 AWS 的功能商店。
那么,其他的基础呢?先说发货和销售模式。考虑到 Tecton 和 scribbleData 不是开源的,并且是更明显的 SaaS 产品,它们从 Feast 中形成了一个独立的分支,这就引出了一个问题——我能使用 Feast 构建自己的吗?这是一个重要的问题,值得我在下面提供它自己的部分。所以,让我们转而关注这个 SaaS-y 分支。
在这里,我们可以看到另一个分裂——Tecton 是一个完全托管的云服务,而 scribbleData 提供了一个自我管理的路线。此外,这两种产品的定价模式也不同。泰克顿提供了一种基于消费的定价方法,而 scribbleData 似乎提供了每节点成本或其他潜在的东西。这两家技术供应商的这种“为使用付费”的方法在通过 PoC 评估您的用例时非常有用。不过,如果不进行 TCO 分析,中长期的影响就不太清楚。
与任何采购决策一样,在可以协商的商业协议与您的工程团队的目的、能力、成本以及您需要支持的用例之间,总会有一个平衡行为。对于这个练习,大部分都是推测性的。然而,我认为有两个主要的用例会促使人们做出关于 Tecton 和 scribbleData 的决定。
支持两个关键用例
在回顾 Tecton 和 scribbleData 时,我想到了两个关键的用例。
第一个用例是完整的生命周期支持。更具体地说,我指的是特性转换的管理,它包括通过 CI/CD 编排的特性定义和自动转换。值得注意的是,AWS 的特性库和 Feast 中都没有特性定义和自动转换。然而,泰克顿和 scribbleData 都支持这一点。
特征定义示例|图片作者泰克顿
为了使这些潜在的新术语更加清晰,特征定义的含义是用于定义如何创建特征的框架或代码——字面意思是可以被调用来创建特定特征的 SQL、python 或其他声明性函数。当然,这也应该通过 CI/CD 流程进行版本控制和编排。这将我们带到自动化转换,它指的是处理特征值的整个 ML 数据管道的编排,可能包括回填数据等内容,确保批处理和在线功能可用性和编排可观察性之间的对等性。
考虑到对特性定义和自动转换的一些变化的需求,在特性库中看不到这两个组件是很奇怪的,对吗?我的意思是,术语功能商店实际上暗指这个时代的这两个组件。
第二个用例是为训练和在线 ML 模型自动存储和提供数据。离线存储培训和在线存储(如果需要)中的功能需要高度准确和精确。离线数据必须允许数据科学家执行“时间旅行”,以生成过去任何时间点的训练数据,或批量评分。在线数据用于实时预测。由于在线 ML 模型的低延迟要求,这是具有在线支持的功能商店的亮点。将数据放入离线存储和在线存储,并使所有功能易于访问以进行培训和服务,即使是在在线模式下,也是一项挑战。
同样,Tecton 和 scribbleData 以及 AWS 和 Feast 都通过在线功能摄取以及与存储和转换服务的集成来支持这种用例。然而,如果使用 scribbleData,通过 API 呈现这些在线功能取决于管理管道的工程师。
这些是相对高级的用例。如果这两个不是非常相关,或者您想自己动手构建它,该怎么办?
自己造?
一些组织致力于开源选项。其他人会说他们希望他们的工程师有为教育目的构建自己的工具的经验。就我个人而言,我认为只致力于开源工具在特定场景下是有意义的,但如果被教条地追求,这就是一个危险信号。此外,我不认为过多地重新发明轮子是有意义的——对教育有一点帮助是好的,但如果你想得太远,你可能会拖团队的后腿,错过新技术的优势。
如果你想自己建立一个功能商店,考虑一下这个。功能存储只是一个数据仓库,具有适当的编排、逻辑和视图——直到您需要支持在线 ML 部署用例。如果你只关心批量部署,我认为这增加了构建你自己的特性库的可行性。如果你愿意使用 BigQuery、Snowflake 或其他现代数据仓库,这一点尤其正确。请注意,如果你走那条路,你可能会发现自己在重新发明已经存在于 Feast 中的东西。
现在,如果你肯定是追求在线用例,我的建议是使用 Feast 来做一些更复杂的在线过程,当然,除非你想要一个教育体验。
盛宴工作原理示意图|图片来自盛宴
值得注意的是,Feast 是开源的,但最初是在对 BigQuery 的强大支持下构建的。看起来对本地文件系统、SQLite、Redshift 和 DynamoDB 的支持已经存在了。
Feast 是我之前提到的理想化功能商店的一个很好的开端。它没有完全满足我列出的品质——转换定义、规范化、时间旅行、传承和治理——但有了体面的工程师在你身边,你的团队肯定可以达到 Feast 功能商店的定义。
如果你真的想建立自己的博客,我建议你看看另外两个中型博客(一个和两个)。
结论
彩虹之上有特色店吗?依我拙见,还没有。用户很难获得好的信息。MLOps 功能商店评估框架是一个很好的工具,可以帮助进行比较,但由于 TCO 和供应商成熟度等因素,中长期观点尚不明确。
也就是说,我确实认为像上面提到的那些工具正在接近一个健壮的特性库,这是我们许多人都希望看到的。简而言之,有 SaaS 选项提供先进的能力,至少作为进入特色商店世界的优秀跳板。如果您计划在生产中支持少量的 ML 模型,尤其是如果这些模型中的任何一个被期望以在线模式进行推断,那么检查它们是值得的。
我在上面已经提到了,但是它确实应该被强调一点。功能商店的现代 SaaS 实现确实在在线 ML 用例方面表现出色。SaaS 选项肯定有替代模式——比如数据流+大查询(+盛宴),火花流+三角洲湖,或者更有针对性的东西。然而,要很好地支持在线用例,还需要大量的工程工作。相比之下,具有开发数据仓库或客户数据平台经验的工程师会对面向批量的特性商店非常熟悉(CDP)——大致相同的工具,只是规则有所改变。
对于那些雄心勃勃并热衷于构建开源的人来说,我认为有一个机会在等待着他们。难道一个小的、专注的团队不能缩小 Feast 和许多人认为的理想特性商店之间的差距吗?如果你是这种心态,你可能会考虑让为盛宴贡献。
如果你想了解更多关于特色商店的信息,或者想与人交流以帮助你,我强烈推荐你加入 MLOps 社区 Slack 群组,这里每天都有很多这样的对话。
这是由 Salesforce 开发的最好的文本摘要框架吗?
基于 CTRLsum 的 Python 可控文本摘要
图片由 Gerd Altmann 从 Pixabay 拍摄
文本摘要技术是指从长文本文档中提取最重要的信息。它可以用来创建一个简短、准确、流畅的文档摘要。文本摘要器的目的是减少文档的阅读时间,使选择过程更容易。
Python 中有各种开源的文本摘要器,但是在本文中,您可以阅读 Salesforce 团队在论文 **CTRLsum: Towards Generic Controllable Text Summarization**.
中开发的最新摘要技术
CTRLsum:
CTRLsum 是一个通用的可控摘要系统,用于在给定关键字、查询或前缀形式的控制标记或设置的情况下处理文本摘要。CTRLsum 还可以在不受控制的设置中实现文本的强摘要。
Salesforce 团队提出了 CTRLsum paper 的 Pytorch 实现。参考他们的 GitHub 库来获得使用预训练的 CTRLsum 模型以及训练新模型的说明。
Hyunwoong Ko 围绕 CTRLsum 开发了一个 python 包装器,可以从 PyPI 安装,称为summarizer。summarizers 包只需几行 Python 代码就可以使用 CTRLsum 的实现。
在本文中,我们将进一步讨论 summarizers Python 包的实际实现。
总结者:
**summarizers**
是基于 Salesforce 的 CTRLsum PyTorch 实现的可控摘要包。截至目前,summarizer 只支持英语,不支持其他语言。
安装:
**summarizers**
软件包可以从 PyPI 安装,使用:
**pip install summarizers**
用法:
在开始之前,使用from summarizers import Summarizers
导入库并实例化Summarizers()
类的对象。它带有预先训练的模型,用于普通摘要、论文摘要和专利摘要,使用关键字普通、论文、专利作为参数传递给Summarizers()
对象。
**summ = Summarizers('normal')** # <-- default.
summ = Summarizers('paper')
summ = Summarizers('patent')
它还提出了 GPU 加速,使用参数device=’cuda’
在实例化**Summarizers()**
对象后,可以执行不同类型的汇总,包括:
- 基本概述
- 面向查询的摘要
- 抽象自动问题检测
- 基于提示的摘要
- 带提示的查询聚焦摘要
我们将进一步讨论上述每一种总结技术及其实现。
我将使用维基百科中一篇关于人工智能介绍的文章来生成上述摘要。
(1.)基础总结:
基本摘要可用于生成长文本文档的简短摘要。这不涉及生成摘要时的任何控制。
(2.)查询聚焦摘要:
您可以基于指定的查询生成摘要文本。如果想要将查询与摘要放在一起,可以使用以查询为中心的摘要。
(3.)抽象的自动问题检测:
抽象问答可以通过在查询参数中提供一个问题作为参数来进行。
(4.)基于提示的总结:
您可以使用参数prompt
生成一个以某个序列开始的摘要。
(5.)带有提示的查询聚焦摘要:
您可以通过询问查询来生成摘要,并强制摘要以给定的提示开始。
结论:
对于在应用自然语言处理领域工作的开发者来说,这是一个非常有用的软件包。这是一个方便的工具,可以用几行 Python 代码生成大型文本语料库的受控摘要。
请参考我以前的一篇关于使用 Sumy 包进行文本摘要的文章:
参考资料:
[1]总结者 GitHub 库:https://github.com/hyunwoongko/summarizers
感谢您的阅读
VAE 是一个好的随机生成器吗?
VAE 的另一种美德
维基百科-狄利克雷
这个职位是我之前的职位的延续。回想一下,我在那里讨论过是否使用 ELBO 训练 VAE,编码器收敛到期望的最佳参数(传统上,我们考虑高斯分布,因此参数是均值和标准差)。情况似乎不是这样:当我们希望优化编码器(在这种情况下是标准高斯编码器)时,我们需要单独训练它们。仅关注 ELBO 公式中的 KL 散度项:
作者
当我们使用整个公式时,我们获得了模糊的图像,但是编码器没有收敛到标准的高斯分布
但是这种发动机有什么潜在的应用吗?
我们暗示的一个方向是" “编码器作为随机发生器能有多好?”
下面的算法可以提供这个问题的答案:
*仅使用 KL 术语训练编码器
*为期望的分布生成样本(例如标准正常 ) ( 生成样本)
*从编码器生成 Z 值
假设我们正在处理一个具有 KL 散度解析形式的分布(如高斯分布),比较期望分布和以下各项之间的 KL 散度:
1生成样本
两个 Z
3 编码器的参数。
高斯情形
在高斯情况下,Z 的生成机制与随机样本的生成机制相同(重新参数化技巧),因此在最佳情况下,第 1 条和第 2 条必须合并。仍然需要证明最佳方案已经实现。
作者
作者
在后面的图表中:
红色曲线代表编码器值(即神经网络中的值)
**绿色曲线-**Z 的
黑色曲线— 随机样本
X 轴代表迭代次数和 Y,KL 值。
可以看出,绿色曲线和黑色曲线的表现几乎相同(从更远处看是最佳情况)。
以一种独特的方式,高斯情况允许多一个封闭形式的度量:wassertin 2 度量
作者
作者
我们可以看到,这些图形类似于 KL 散度情况,只是值不同。
我们可以总结出,在高斯情况下,编码器可以生成具有与标准高斯相似的 KL 散度的 Z 作为采样函数本身(例如 torch.randn 或 numpy.random
这听起来很酷,但是:
- 我们不能改进正则语言的随机抽样函数
- 如果我们不能改进,我们可以对标题中提出的问题给出肯定的答案,但训练引擎实现 numpy.random 的冗长过程并不吸引人
我们有两个选择:
- 放弃
- 检查其他通用发行版
幸运的是,我是一个古董爱好者
伽马射线盒
什么是伽玛分布?
为了对伽马、有一个很好的直觉,考虑一个测量事件时间到达的过程,但不仅仅是单个事件,还有 K 个事件。
有两种方法来参数化伽马,
α β 其中 α 表示到达量 K ( 也称为形状),而 β 是到达率。在某些地方,G amma 由 K 和 θ 定义
PDF 是:
作者
其中γ是伽玛函数。正如我提到的 α 是“到达的数量”
如果我们将 α 设为 1,那么**γ(1)= 1(**检查这里或者相信我),pdf 变成:
作者
这正是泊松分布(测量单个到达)
几个属性:
支撑是整个正实轴,这意味着如果
作者
而 b 是常数,X +b 没有伽玛分布。另一方面,标量缩放成立
作者
暗指
作者
对于正极 c
最后如果 X 是一个 r.v。
维基百科-Drichlet
所以我们有了很好的公式,我们能向前迈进,创造出基于伽马射线的 VAE 吗?
伽玛和 VAE
只要我们考虑从输入到编码器上层的道路。答案是没问题。当我们从编码器转移到解码器时,障碍出现了。
“传统”VAE 的神奇之处基于高斯分布的伟大特性:
如果 X r.v .具有随机分布,那么每个仿射变换都具有高斯分布。
这种方式允许从固定分布中取样,并容易地将其映射到所需的分布。这允许我们得到保持分布,避免对随机变量求导。Gamm 就不是这种情况了。
我们可以缩放它,但它对 **α没有影响。**挺拉屎的吧?然而,也有好消息:我们不关心解码器,因为在我们的实验中,我们研究的随机方式 Z 只是为了测试,我们不区分它们。
那么它是如何工作的呢?
我们设定一个目标函数(例如γ(1,1)γ(4,3) )
关于潜在尺寸,我们可以取 1 或更多,如果目标在所有维度上都是固定的,那么就像有一个巨大的批量。
我们基于目标函数创建一个样本
我们像以前一样训练编码器。我们的兴趣是理解 Z 的实际分布,看看它是否更接近目标函数
然后是样本。
如何从 Z 的样本量得到 α β ?
- 计算平均值
- 计算方差
- 方差和平均值之间的比率提供了 **β,**使用平均值我们得到 α。
结果
对于γ(4,3) 我们得到了下面的图形
对于γ(5,2) 我们得到了下面的图形
我做了一些额外的实验,展示了同样的画面:
与高斯相比,我们可以发现 VAE 使用伽马 VAE 提供了更高精度的样本
狄利克雷
狄利克雷是概率向量的分布。具有 K 维狄利克雷分布的 r.v .是向量 x1,x…xk ),使得它们都是正的,并且它们的和是 1
此外,我们还有:
作者
和
维基百科(一个基于 wiki 技术的多语言的百科全书协作计划ˌ也是一部用不同语言写成的网络百科全书ˌ 其目标及宗旨是为全人类提供自由的百科全书)ˌ开放性的百科全书
狄利克雷为什么有趣?
作者
因此,我们将遵循具有更大潜在维度的相同伽马机制,并且损耗将遵循狄利克雷 KL 公式
一些图表也显示了狄利克雷中的伽马现象:
摘要
我们看到,与高斯分布相比,我们可以获得比 Gamma 和 Dirichlet 中的随机样本更接近(KL -wise)给定分布的样本。关于原因,我没有深刻的理论支持。这些现象的发生可能是由于错误的样本量或其他潜在的超参数。但是它们发生了。我相信进一步的研究是有益的
这个帖子的代码是这里是。
此外,在工作期间,我需要 Pytorch 没有提供的几个度量函数:
- 多变量高斯函数之间的加权系数 2
- 在多变量高斯和对角协方差高斯"对角"之间插入 2(在 Pytroch 术语中称为独立
- 在两条对角线高斯线之间
- 对角线和标准高斯线之间的垫圈 2
- 对角线和多变量高斯线之间的 KL 散度
- 对角高斯和标准高斯之间的 KL 散度
我把它们都整理在这个文件里了。
谢谢你。
来源
https://en.wikipedia.org/wiki/Dirichlet_distribution(图片开头)
你的 AI 是专业级的吗?
https://www.publicdomainpictures.net/en/view-image.php?image = 161590&picture =槌子和听诊器
你可以做些什么来开始为专业人士开发数据科学。
专业级是一个在 21 世纪初因广告标语“GMC:我们是专业级”而流行的术语今天,它被用来区分一般用途(或消费级)产品,并传达一种产品在更频繁使用或由专业人士使用的压力更大的环境中会工作得更好或更久。
我们今天使用的大多数人工智能都是由人类(数据科学家)开发的某种机器学习模型驱动的。这些模型通常是使用训练数据集构建的。这些训练数据是决定最终人工智能应用程序“智能”水平的关键因素。这是一个简单的事实:更好的训练数据产生更好的模型。一个公理是:更多更丰富的训练数据会产生更多的健壮的模型。让我们讨论一下数据科学家在搜索完美的训练数据集时必须考虑的两个重要因素:相关性和规格。
寻找具有相关内容的数据集是数据科学项目的第一个关键步骤。例如,如果您希望构建一个聊天机器人来回答客户支持问题,那么您需要包含样本客户支持问题的训练数据。而不仅仅是一系列问题。如果问题集太窄或者太完美(对,太完美!),所得到的模型将不具有可学习的必要可变性,并且在野外不会表现良好。用数据科学的术语来说,我们会说结果模型不是很健壮。最好使用由一系列格式良好的和格式不良的问题组成的数据。
定位高质量和相关的训练数据对于当今的模型开发是如此重要,以至于专门的网站获取可用于训练数据的独特数据资产。例如,像谷歌这样的大型搜索提供商提供 数据搜索 ,这是一种专门寻找数据源的搜索。此外,三大云供应商中的每一家都有自己的数据共享平台,提供独特而有用的数据集: 【谷歌云】AWSAzure。
虽然定位与项目相关的数据是关键的第一步,但下一个重要步骤是规范过程,其中大部分“智能”来自人工智能。大多数训练数据都是原始格式,缺少一个关键部分。在我们之前的客户支持聊天机器人示例中,一旦数据科学家有了一组丰富的客户支持问题样本,他们现在就需要这些问题的最正确答案。在数据科学行话中,我们称之为数据标记。数据标注也称为数据注释或数据标记,是向原始数据添加信息(标签)的过程。**这个标记的信息就是结果模型试图预测的。**为了将这些标签添加到数据集中,现代数据科学家使用标记程序,这些程序读入原始的、未标记的数据集,然后逐个记录地进行检查。用户根据他们在每个记录中观察到的内容添加标签。今天,一些更好的标记工具采用了一些机器学习辅助,它们开始提出建议,使用初始的人类输入作为指导,以帮助加速人类标记,因为它们通过数据前进。正如 Big-3 云厂商提供了大量的原始训练数据一样,他们也提供了智能数据标注能力:Google AutoML亚马逊地面真相Azure 数据标注 。
上述方法是为消费级人工智能应用创建相关且明确指定的训练数据集的优秀工具。不幸的是,当谈到专业级发展时,在相关性和规范组件上都有额外的挑战,如果没有大量的帮助,这些挑战是很难克服的。
**为法律或医疗人工智能应用寻找数据时,数据来源需要成为首要考虑因素。**虽然公众可以获得一些专业数据的样本快照,但专业人士使用的绝大多数数据都是由行业认可的公司维护和管理的,例如【LexisNexis】(法律) 【汤森路透】 (法律) Elsevier (医疗)Wolters Kluwer(医疗)。这些组织维护的数据资产庞大而复杂,并且是由法律和医疗专业人员多年来收集和管理的。天真地向这些数据提供商索要数据转储(T21)经常会导致问题。尤其是当应用程序的预期客户(例如,律师或医生)询问关于 AI 应用程序的详细问题时,这需要对数据的来源有深入的了解。例如,当向法律专业人士提交新申请时,经常会遇到这样的问题,如这涵盖哪些司法管辖区、涵盖哪些法律领域、、追溯到多远之前或您是否考虑过 不良法律 ?
此外,许多数据科学应用程序是由来自这些专业认可的数据源的持续数据访问或反馈推动的。因此,即使数据科学开发人员从这些来源之一获得了一次性的数据快照,一旦投入生产,他们也需要找到一种方法来维护这些数据的最新性和完整性。这是通过应用程序编程接口或 API 的在 AI 应用程序和数据提供者之间创建程序链接来实现的。由于这些数据是专有的,对提供商来说是极其宝贵的资产,这些 API 通常位于付费墙之后。由于模型的维护和供给至关重要,因此需要考虑 API 成本,因为它们会大大增加运行和维护应用程序的总拥有成本(TCO)的计算。
在典型的消费级应用中,当涉及到标记数据时,数据科学家通常可以自己完成或在朋友的帮助下完成。然而,法律和医疗数据标签需要高级培训、知识和经验。**对于需要法律或医学专业知识的专业级人工智能项目,数据科学家需要与律师或医生合作来执行标记。**为了扩大大型数据集的消费级人类标签,通常会将外包给大型廉价资源,如 机械土耳其人 。然而,由于高级教育要求和专业人员的稀缺,扩大专业等级数据的人工标注过程是困难的,并且可能相当昂贵。
此外,一旦找到专业人员来帮助标记数据,法律和医疗数据的细微差别仍然会使执行简单的注释变得困难。例如,阅读一些案例法并确定法官的裁决可能听起来很简单。然而,这种看似简单的支持或反对标记过程实际上相当复杂,需要具有法律背景的人来解释文件的语言并做出决定。因此,该数据受到解释偏差风险增加的影响。为了减少这种情况,最佳实践是使用基于共识的方法,例如成对标记。该流程包括让多位专家对同一份文件进行标记,并且只接受两位或更多专家同意的标记。这些额外的努力产生了高质量的标签,但却大大增加了项目的成本和时间。
构建一个专业级的 AI 应用,首先要从一个可靠的行业公认的来源定位相关数据。不能只是一次性转储;专业人士希望应用程序提供的信息是最新的并且维护良好,因此应该考虑通过 API 连接到这些资源。通过标记来丰富数据,以便它可以成为建模的训练数据集,这需要律师或医生等主题专家的帮助。由于专业数据是细致入微的,并受到解释,谨防解释偏差,并试图寻求跨多个专家的共识,以提高标签质量。开发专业级的人工智能应用并不容易,需要数据科学家付出额外的努力。虽然开发消费级应用通常可以由个人来完成,开发专业级应用需要团队的合作:数据科学家、数据提供商和主题专家。最终证明你做了专业级 AI 产品的会是什么?简单: 法律或医疗专业人士在日常工作中信任并使用它!
你的聊天机器人敏感吗?
对话辅助解决方案越来越多地包括情感分析功能。这是什么意思?相关吗?它对情绪的表达应该有怎样的反应?
情感分析:今天至关重要的必需品
长期以来,公司通过实地调查或满意度表格来分析客户意见。它允许收集客户对产品、品牌或所提供服务的意见。在互联网时代,随着社交网络的爆炸,不可能对每一个观点都做出回应,无论是批评还是祝贺。
因此,考虑到评论的激增、这些评论权重的增加以及消费者在购买过程中的选择评级,分析的自动化已经成为一种必要的行为。尤其是因为这些数据在每个人都可以访问的许多地方都可以获得:论坛、在线评论、社交网络上的出版物……或者可以从电子邮件或纸质邮件中检索。这种自动化包括构建能够从自然语言文本中提取主观信息的计算机工具,以创建决策支持系统可以使用的结构化和可利用的知识。这种发现是从最微妙的、上下文的和文化的方面理解文本意义的工作,因此是一个复杂的过程。
情绪是一个模糊的概念,很难定义,它具有特质的特殊性,也就是说,对每个人的解释都是特定的——我们并不都害怕同样的事情,害怕的程度也不一样。换句话说,某样东西并没有那么明显的“好”或“坏”,而是“它可能会更好”或“它可能会更坏或它已经是了”。这意味着当我们使用这些工具时,我们需要在任何解释之前了解受众(和媒体),这也解释了为什么预训练模型在用于不同于它们被训练的领域时准确性较低。
在情感背景下对语言的自动分析是一个复杂的过程,需要一系列的处理,这些处理对应于不同的理解深度水平,因此对应于不同的提取难度。语言的丰富性意味着一个人表达的情绪不一定是整体情绪的绝对衡量;此外,人们倾向于表达与他们的期望相关的情感,一句话可能会被之前说过的另一句话抵消…
传达信息的媒介会引发不同的情感表达,无论是短的还是长的,是口头的还是书面的,等等。在电子邮件中,作者通常会更倾向于语境化和解释,而推特则更倾向于自发性和夸张。现在让我们看看聊天机器人中的情感分析。
检测的规模
情感分析可以分为几个检测级别:
- 情感的检测在于确定作者是否希望传达一种情感,或者它是否纯粹在描述中,在事实陈述中(“我在 9 点钟有一个约会”)。是二元分类:0 或 1,感性或中性。这是最基本的层面。
- 极性分类区分表达积极、消极或中性情绪的句子,代表情感的第一级分离,没有更多细节。与这种极性类似的是在聊天信息中或在对话助手发送的信息中使用拇指向上和向下。中立当然表现为没有投票权。
- 情感检测被定义为一种态度、一种思想或一种判断,这种态度、思想或判断是由一种更微妙和更长期的感觉所激发的,例如爱、恨、信任等。人们可能想知道这种检测对于“经典”对话助手的相关性:电子商务、支持、自我护理…
- 对情绪的检测与更多的自发情况有关,如愤怒、喜悦、悲伤、焦虑、抑郁等。情感的丰富性在社交或专业信息中的表情符号的使用中有其相似之处。这些小图像用表达情感的元素丰富了文本,而不必写出来。2021 年 4 月,微软宣布将团队中的表情符号选择器从 85 个元素扩展到 800 多个元素。
一些来自 https://openmoji.org/的表情符号
- 检测讽刺和挖苦,人们可以用积极的词语表达他们的消极情绪。如果没有对表达单词的上下文的深刻理解,使用单词权重的算法很难检测到这一点。
由于会话分析的应用领域和涉及的媒介,在谈论聊天机器人会话分析时,说“情绪分析”比“情感分析”更合适。
情感的指称
很容易意识到,这种情绪和情感的调色板几乎可以无休止地下降。为了能够以电子方式管理它,有必要建立一个框架,一个参考系统,以便当我们在聊天机器人领域时能够采取相应的行动。
在最广泛使用的参考系统中,我们发现:
- 极性系统分三级:正极、中性、和负极。
- 保罗·艾克曼的模型【1】根据 6 个基本类别区分情绪。根据他的理论,这些基本情绪源于不同的神经系统,因为一个人感知情况的方式不同。所以,情绪并不是相互依存的。这 6 种基本情绪是愤怒、厌恶、恐惧、喜悦、悲伤、和惊喜。在 20 世纪 90 年代,埃克曼将他的核心情绪列表扩展到 16 种,包括更广泛的积极情绪:娱乐、蔑视、满足、尴尬、兴奋、内疚、成就自豪、解脱、满足、*感官愉悦、*虽然这项工作侧重于面部表情,与书面表达的对应物是可能的。
- 心理学家罗伯特普卢奇克【2】的情绪轮,它包括 8 种多维度的“基本情绪”:期待、愤怒、厌恶、喜悦、恐惧、惊讶、悲伤和信任。这些情绪的特殊性在于可以根据三个标准来识别:它们的强度、它们的相似性以及它们的“两极性”,即它们彼此之间的对立。一种情绪的强度越低,就越难辨别。
普卢奇克的情感之轮——机器精灵 1735,公共领域,通过维基共享
- 奥托尼、克洛和科林斯模型反对罗伯特·普卢奇克和保罗·艾克曼提出的“基本情感”概念。根据这一模型,情绪产生于人类感知事件的方式,其强度不同。OCC 将情绪分为 22 类,增加了 16 种额外的情绪:钦佩、愤怒、失望、苦恼、恐惧、恐惧——证实、幸灾乐祸、欣慰、感激、开心——为、憎恨、
2020 年 6 月,斯坦福和谷歌研究已经公开了一个基于 27 种情绪+中性的数据集。这个数据集被称为 GoEmotions [5]。
找到许多其他的参考框架是可能的,但重要的是建立一个框架并使用它。因为它有更多的类,OCC 模型有更广泛的情感表达范围。另一方面,查找示例(标记)和处理完整的列表将需要更多的工作。
检测技术
文本中的情感检测通过两种方法解决:
- 显式检测。显性检测意味着在书面文本中使用明确陈述的词语,或带有情感的词语,如“快乐”或“幸福”,来表达情感(但人们可以找到与这一原则相矛盾的表述,如在句子中:“你的两种服务的组合不快乐”或“你偷走了我的快乐”)。
- 隐性检测。将文本识别并分类为没有携带情感的词的类别被称为隐含情感检测。当感情是隐性的时候,情绪词的识别就不起作用了(“你的服务宕机了”)。
检测方法可以分为三类:
- 通过一套手动精心制定的规则。在文本挖掘中开发了许多技术:词干提取、标注单词、句法分析、词性标注和组块;词汇的使用(即单词和表达列表)。这里有一个这个系统如何工作的例子,分三步:定义一个极化词的列表(例如,像“丑”、“坏”、“最差”这样的负面词,以及像“漂亮”、“好”、“最好”这样的正面词,等等)。);统计给定文本中的正面词和负面词的数量;如果正面词多于负面词,则该文本被认为是正面的,反之亦然。在出现平局的情况下,文本被认为是中性的。这个系统的主要缺陷是它一个接一个地提取单词,而不是按照单词的顺序,这使得它不是一个完全可靠的系统(例如“好”对“不好”)。然后,有必要添加许多规则来获得令人满意的结果,但是这使得系统的调整和维护变得更加复杂。
- 通过来自实例数据的机器学习技术。这包括训练模型来学习将输入(例如,句子)与极化的结果(积极的、消极的或中性的)相关联。情感分类可以被建模为分类问题,其中我们给模型一个向量(单词或句子),它返回一类情感(例如,中性、积极、消极、恐惧、焦虑、快乐、悲伤、愤怒、失望等)。).为了训练它,我们学习我们的模型,将对应于要检测的情绪的结果(类别)与单词向量相关联。存在许多预先训练的模型,但是对专有语料库的性能研究表明,这些网络对于会话情况来说不够有效。
- 通过一个混合系统结合了之前的两个系统。
使用任一系统还是两个系统取决于预期的检测水平。
检测的挑战
- 监督分类工作基于带注释的语料库。这种有监督的情感分类所固有的主要问题之一是,有必要拥有特定于被处理的领域的人工注释的学习语料库。这是一个复杂的过程,既费时又费钱。此外,由于情感文本的模糊性,标注时往往很难有较高的标注者间评分。最佳-最差缩放技术的使用[4]减少了基于人的注释偏差。
- 隐性情绪检测很难实现,因为句子中不包含情绪词。
- 否定强烈影响检测。
- 一些含糊不清的词语会影响检测,讽刺和挖苦的使用也是如此。
- 情感检测可能是一个耗时(并且 CPU 密集型)的过程。在大量的情况下,它可能需要大量的处理资源,甚至导致聊天机器人响应的传输延迟。
- 根据与对话中其他句子的关联,单词和句子可能具有不同的强度水平,这可能会影响逐句识别。
- 公共的预先标注的语料库通常是不平衡的,这导致了偏见,并且通常是为了不一定与业务目标兼容的特定目的而制作的。
- 包含积极和消极表达的信息很难处理,其中两种极性都不占主导地位,例如“尽管在收银台前等待了很长时间,我还是喜欢你的产品”。
- 在基于语音的系统中,调制、节奏、音量和停顿也提供了用户情绪状态的指示,并且检测起来非常复杂。
- 重要的是定义我们想要捕捉的情绪水平。要检测的每种情绪代表要执行的治疗。
从最普通到最特殊的情绪等级的例子
当一个聊天机器人面对一种情绪的表达时应该怎么做?
对于一个人来说,知道如何对一种情绪做出反应是很复杂的。对于一个 Bot 和配置它的人来说,就更复杂了!管理对话已经相对复杂,如果答案必须考虑到对话者的情绪水平,就更加困难。
面对负面情绪的检测,几种反应是可能的:
- 在基于对话树的对话中,可以根据用户的反应添加情感测试。在回答的每个过程中,我们可以尝试检测情绪,根据反馈,根据情绪的类别和强度,有可能触发相应的行动。我们越是试图检测不同的情绪,树的设计和维护就会变得越复杂。
- 助手可以保留对话并添加标签,允许领域专家查看这些对话并异步处理它们。这对于理解用户恼怒的原因尤其重要,并且如果必要的话,修改对话以管理这种类型的行为。
- 当面临负面情绪(或一系列负面情绪)时,机器人可以安抚用户,并建议他们通过实时聊天对话联系人类。这当然是最容易从事的行为。也有可能触发 web 回调操作。
- 在使用自动自然语言生成(NLG)的系统中,“有可能”添加一个情感参数,该参数将允许响应根据一种或多种情感而变化。最简单的是能够通过用静态句子块填充空槽列表来传输文本,直到能够基于检测到的情感生成完整的句子。
结论和展望
你应该通过在聊天机器人中添加情绪管理来明确你想要达到的目标。如果你使用一个预先训练好的模型,用你的用户反馈在你的域上测试它。不要想当然地认为出版商做的性能测试是理所当然的,他们是在不同的领域用不同的数据做的。
如果您想创建您的模型,不要低估收集、注释和建立对话树所涉及的工作。这是大量的工作,应该考虑到目标。
定义你的情绪清单,那些对你的生意有意义的情绪。
仔细考虑来龙去脉。没有系统总比一个只起一半作用的系统好。
迄今为止,大多数聊天机器人解决方案都允许你在对话过程中或对话结束时发表评论。因此,在场景结束时知道用户的意见是相对容易的,这在许多情况下是足够的。
参考
[1]https://en.wikipedia.org/wiki/Paul_Ekman 的保罗·艾克曼
*[2]罗伯特·普卢奇克——【https://en.wikipedia.org/wiki/Robert_Plutchik *
[3]奥托尼,a .,克洛尔,G.L .,柯林斯,a .:情绪的认知结构。剑桥大学出版社,英国剑桥(1988 年)
*[4]最佳-最差缩放—【https://en.wikipedia.org/wiki/Best%E2%80%93worst_scaling *
[5] GoEmotions:一个细粒度情感的数据集——https://arxiv.org/abs/2005.00547
你的数据和人工智能/人工智能团队经得起未来考验吗?
除了技能,智商,情商,找数据智商(DQ)
GIF by giphy
随着技术的快速演进,数据工程师、数据分析师、数据科学家、ML 工程师、AI 产品开发人员的角色在未来 3-5 年内将会有显著的不同!
你如何证明你的数据+人工智能/人工智能团队雇佣的未来?您当前的团队能够学习当今不存在的技术技能吗?
考虑一下数据工程师的角色。二十年前,这个角色主要围绕数据仓库模式设计,写模式治理,生成每周业务报告。这是数据被视为 IT 开支的一部分的时代。
在过去的十年里,随着 Hadoop 时代,数据仓库设备内的集成服务被用于数据摄取、ETL、数据目录、数据争论、治理、解耦存储和处理、NoSQL 持久性存储、可视化的技术的挑选组合所取代。数据工程师的技能更多地转向各种技术的集成,以创建数据管道。随着数据规模的增长,ETL 的挑战转向了有效利用分布式查询处理范例,如 MapReduce。如今,数据被认为是一个区分因素,业务团队希望管道变化能够快速转变,从而产生新的指标/见解。
按作者分类的表格
总结一下:你今天在面试中评估的技能很有可能会变得无关紧要。你如何确保被雇佣的人不仅仅在今天需要的技能上是好的,而且在未来不断变化的技术环境中也是有效的。
我的方法是在面试中寻找 7 种特质。我将这些特征称为数据智商(或 DQ) 。与智商和情商类似,我认为 DQ 对于数据+人工智能/人工智能领域的所有团队招聘都至关重要。
DQ#1:对业务环境的端到端理解的好奇心——洞察力将如何被使用,由谁使用,做出什么决定,等等。这意味着数据工程师有兴趣了解业务度量或 ML 模型将如何产生影响。同样,数据科学家有兴趣了解数据集的局限性或摄取或处理中的障碍。
GIF via giphy
DQ#2:从数据到洞察力再到影响力的极端所有权 —不认为将原始数据转化为洞察力是要完成的工作。大多数候选人忘记了从洞察力到影响力的最后一英里。多年来,我观察到优秀员工的一个重要特征是,努力看到自己的工作产生影响(即,洞察力以某种形式得到应用)。他们不会停止,直到我们从洞察力到影响力!
DQ#3:现实地看待统计的力量——数据中可能没有足够的统计意义来改变你的零假设。在广泛参与之前,能够运用自己的判断力来区分信号和噪音。对于这种特质,我最喜欢的问题是分享马克·吐温的名言“谎言、该死的谎言和统计”,并请候选人分享他们的经历。
DQ#4:猎人与农民的心态——凭直觉寻找见解和解决方案。探索的渴望是关键。判断这一特征的一个方法是候选人接受广泛观点的能力,而不是接受第一个想法,即,由宽入窄。
DQ#5:冷静的骄傲/对失败的宽容——在探索的海洋中游泳,知道什么时候继续游泳,什么时候停止(快速失败)。列表中的第二点和第五点是矛盾的——我见过表现出强烈极端自主性的候选人很难对他们的工作保持冷静和中立。
DQ#6:相信实验的力量 —度量标准之间的因果关系是一种假设,除非用实验来证明!在大多数成功的数据项目中,关键是减少从最初的想法到第一次实验的时间。不管未来的技术如何,数据团队的每个人都必须坚信实验的力量。
GIF via giphy
DQ#7:拥抱不确定性——快速迭代,并在新数据的背景下修改决策。这也广泛地转化为通过综合模式从错误中学习的能力。一些候选人从不确定性下的经营中获得乐趣,而一些人则走上了另一个极端。今天你可能已经有了一个清晰的路线图和轨迹,但是要为快速转变的时期做好准备,在这个时期团队需要适应不确定性。
GIF via giphy
总而言之,我在未来的招聘中寻找 DQ。这些年来,我在 Data + AI/ML 团队中看到了 DQ 与对不断变化的技术和技能要求的适应性之间的强烈关联。
渴望更多——查看一篇关于“ML 项目中可能出错的 98 件事 ”的相关文章还有,跟着我上 中 获取我自以为是的定期简讯 艾无 BS
你的数据好吗?如何辨别。
验证数据和模型非常重要
拥有“好的数据”意味着什么?是否所有数据都能够用于开展研究或向相关方提供信息?应该采取什么步骤来确定数据是否“好”?在实施线性回归、神经网络、逻辑回归、决策树或在其上建立模型之前,应该采取措施确定任何给定数据集的准确性和精确性。你可能在想,“嗯……所有这些额外的数据处理只会占用我更多的时间来构建我的模型。”真的!然而,花额外的时间来辨别你的数据是否正确是防止你在以后的工作中出错的一个很好的方法。不要忘记传播误差是非常真实的事情,原始数据集中的任何误差都可能导致最终分析中的更多误差。我们开始吧。
1。检查来源
不,它不需要 R、Python 或 Julia 的代码行。它不需要使用大量计算能力的复杂算法。它只是在网上搜索和深入挖掘潜在数据源的能力。虽然看起来很简单,但你可以从科学组织、政府机构或大学免费获得的大多数数据集通常都经过了严格的审查。有大量的校准协议来确保用户将访问的数据得到尽可能正确和准确的处理。
如何确定一个来源是否有效?首先看看托管数据的组织。如上所述,他们是传播数据的合法机构吗?美国地质调查局的 EarthExplorer 工具是我经常访问的 LANDSAT 卫星图像在线存储库。美国地质调查局是一个被认可的网站,由美国联邦政府支持。现在,如果我从乔的野生卫星世界得到我的数据。嗯,Joe 的网站似乎有很多免费的数据,但他只是将这些数据收集到一个存储库中,并放在自己的网站上。我真的不知道他从哪里得到的数据,我只知道它就在那里,可能准确也可能不准确。
美国地质调查局地球探测器概述。作者照片。
这里的一般经验法则是:如果数据不在一个被认可或可信的网站上,你应该怀疑它的真实性。
2。元数据审查
元数据是数据的一个方面,每个人都了解但很快就会忘记。元数据是数据集的隐藏细节和信息,通常随数据集一起下载。您可以将元数据视为数据的自述文件。它解释了数据集内观察到的变量、时间覆盖范围、分辨率(或粒度)、发布日期、创建者等特征。
当您使用 wget 或 REST API 将数据集直接拉入 Excel、R、Python 或 Julia 时,您并不总是能看到元数据。有时数据被直接拉进数据框、矩阵、向量等,你没有时间做一个完整详细的检查。在其他情况下,您可能会下载数据而根本没有获得任何元数据,在这些情况下,您应该对您拥有的信息保持警惕。尝试做一些额外的调查,以找到更多关于您刚刚导入到 r 中的内容的信息。作为一项挑战,您能找到常用 Iris 数据集的元数据吗?
请经常查看元数据,这样不仅可以更好地了解您正在使用的数据,还可以验证其真实性。是否有缺失字段?有细节遗漏吗?如果元数据字段中似乎缺少了显而易见的关键细节,那么可能需要一些额外的调查来找到它。始终通过查找和阅读元数据进行彻底的背景调查。
NCEI 气候数据目录。作者照片。
3。 (比较)描述性统计
描述性统计本身并不足以检验数据质量。原因是数据集的平均值、中值、最小值和最大值不能告诉您数据是否来自可靠的来源,或者数据是否被篡改过。缺失值不是欺诈性数据的标志,许多著名的数据源都有缺失值。零不是坏数据的指示符,许多观察值可能真的是零,或者零可以用作指示坏数据的方式(尽管在其他情况下需要使用零,因为它可以影响数据集的整体统计;您更有可能看到 N/A、Null 或-9999)。
但是,如果您的数据非常常见,您可以比较两个数据集,以确定它们是否在彼此的范围内。我称之为比较描述统计学。例如,我用于降水研究的两个数据集是北美区域再分析(NARR)和气候预报系统(CFS)。这两个数据集都是栅格,具有不同的像元大小(分辨率),测量方式也略有不同。我可以对两者的同一时间段进行观察,进行描述性统计,看看它们有多相似。通常,尽管分辨率不同,我们还是会看到相似的结果。
如果您自己的研究有多个数据集,最好同时获取两个数据集并比较它们的值。应该调查任何主要的差异,如果需要,您可以使用这些信息来丢弃数据。
北美区域再分析降水的合成图。作者照片。
我希望你发现这三个技巧对识别好的数据有帮助。鉴于当今数据科学家可获得的海量信息,梳理每个数据集可能具有挑战性,但构建有用且可靠的模型是非常必要的。请继续关注我的下一篇文章,了解如何快速轻松地找到好的数据!
您的数据在云中安全吗?
在云中工作时要记住的 4 个注意事项
miosz klin owski 在 Unsplash 上拍摄的照片
欢迎阅读关于云系列中的数据的新文章。如果您错过了之前的任何文章,我建议您快速阅读并赶上进度,因为在本文中,我们将继续讨论云,强烈建议结合上下文。在云系列的第一篇文章中,我们讨论了云的优势和劣势,以及它如何帮助您的业务。在第二篇的中,我们解释了不同的云服务模型是什么,以及您在每种模型中负责什么。
在本文中,我想与您分享一些关于安全性的想法,这个问题已经成为那些考虑使用云解决方案的人非常关心的问题。更具体地说,我们将讨论数据安全性。我相信您已经厌倦了听到有关数据中心安全漏洞将敏感数据暴露给公众的新闻。我也确信,人们会想到大公司如何利用数据来更好地了解他们的客户。当你听到云的时候,你可能会想到这一切,这通常会产生很多不信任,但事实是,你的想法是有偏见的,受到这个问题所造成的所有媒体的影响。
虽然安全是我热爱的领域,但我不是安全专家,我写这篇文章的目的不是列出必须考虑的一系列优点或缺点。我唯一的目的是提供一些你可能已经想到的考虑因素,并邀请你去思考它们。欢迎在评论中留下你的想法,我会尽力回答。
云提供商(大部分)是安全的
如果你不信任云,问自己一个问题:你是把钱存在银行里还是放在床底下?一般来说,人们把存款存在银行里。为什么?因为这样更安全。你的房子似乎很容易成为小偷的目标,但很少有人会去抢银行。为什么“大部分”是安全的?因为绝对安全是不存在的。
许多人认为抵制云迁移的原因之一是数据“转移”到云提供商。“我的公司数据会在第三方服务器上,为什么不能保存在我的服务器上?这样更有保障。”是的,你公司的数据会在不属于你的服务器上,那又怎样?你的云提供商会窃取你的数据吗?回到之前的例子,你的银行偷你的钱有意义吗?一般来说,将你的数据存储在云提供商那里并不会带来安全风险。
另一方面,您可能会怀疑云提供商是否能看到您存储在他们云中的内容。如有疑问,在开始任何云活动之前,我建议您阅读服务条款以及您选择的云提供商的隐私政策。实话实说,作为服务提供商,未经客户同意访问他们的数据是非法的。确保你没有同意。你的内容是你的,不是别人的。
你的数据在哪里?
另一个最常见的问题是您的数据在哪里。云是一个听起来如此抽象的术语,以至于你会认为你的数据可能在任何地方。
事实是,云提供商拥有庞大的基础设施,并且遍布全球。我接下来要说的内容可能会因不同的云提供商而异,但大多数都是这样组织的。
云提供商的基础设施分布在世界各地的不同地区。您可以随时选择要在哪个区域工作,因此您可以控制数据的存放位置。这样,你将能够遵守相应的法规。
当您选择一个地区时,除了选择最适合您的地区之外,您还必须记住,并非所有地区都有相同的服务目录,因此,根据您要使用的服务,您会稍微习惯于使用特定的地区。然而,大多数“共同”服务通常在所有地区都可以获得。
你是个风险
当我们谈论安全时,你应该永远记住,最薄弱的环节是你自己。一个不安全的密码、一个禁用的多因素身份验证、一台未锁定的计算机,都足以导致安全漏洞,带来可怕的后果。像贵公司这样的公司越来越意识到这一点,并投资培训员工以降低安全漏洞的风险。同样,作为云服务的客户,我们有责任确定谁可以访问我们的数据,谁不可以。
简单总结一下,我们作为客户,负责云中的安全**,而云提供商负责云中的安全。因此,您必须确保只有适当的人才能访问信息,并授予最低的访问权限,以便他们能够执行符合相应安全策略的任务。**
可以想象,根据您在云上使用的服务模型,配置工作会或多或少。你必须意识到,在每一种情况下,你要对什么负责。管理具有持久存储的虚拟机不同于管理 Google Drive 文件夹的权限。
数据加密
另一个重要的话题是数据加密。加密被定义为对信息进行编码的过程,该过程将信息转换成理想情况下只能由接收者解码的表示形式。我们不打算在本文中讨论密码学,因为这是一个太宽泛的话题。你必须明白的重要思想是,当你的数据被加密时,理想情况下,只有拥有解密密钥的人才能读取它。
当我们谈到数据加密时,有两种情况可以而且应该加密数据:
- 静态:当你的数据存储在云提供商那里,并且没有被使用时,它必须被加密。这样就算有人“抢银行”,也什么都不懂。
- 传输中:例如,当你在两台服务器之间传输数据时,它必须被加密。这样,如果有人拦截了通信,就像前面的情况一样,他们将什么都不明白。
正如我们所看到的,在开始在云中工作之前,我们必须考虑一些事情。有了正确的措施,在云中工作通常是安全的。云提供商将完成必要的任务来确保其基础设施和服务的安全,但请记住,最终是您必须通过应用严格的访问策略或数据加密来确保云中的数据安全。
感谢阅读“云中的数据”系列的第三篇文章🤗。
您的数据战略是否遗漏了一个关键领域?
任何一项数据计划所带来的好处都将受到组织信息素养成熟度的影响和限制。
马克·吐温著 AF 布拉德利著。维基共享(公共领域)
向任何数据领导者询问他们的数据战略;他们可能会从他们的现代数据架构开始,提到诸如数据湖、事件流或非结构化/半结构化数据等时髦词汇。接下来,他们可能会钻研他们正在使用或计划使用的技术。例如,Kafka、Fivetran、Snowflake 或 Looker 都可以用来解释他们的数据策略。你所询问的数据领导者也可能描述他们打算如何通过他们的数据科学团队来操作他们的 ML 驱动的见解或开发复杂的模型。
数据栈背后的架构、模式和技术本身并不是数据策略。同样,您打算通过该数据堆栈实现或执行的业务目标本身并不是数据策略。那么,什么 你缺什么?
有时
时光倒流一点点,你会发现到处都是数据专业人士,他们渴望解释“数据湖”将如何彻底改变我们管理大量数据的方式。数据湖的主要和固有优势是什么?首先,提供一个“转储”数据的地方,然后弄清楚它的用途。数据湖可以消除所谓的数据孤岛。
再往前追溯,你会发现数据仓库和数据集市的支持者。现在,你会听到更新的概念,如数据湖屋或流行的水冷却器概念,数据网格。数据网格的主要固有优势是什么?为了启用,数据湖打算消除的数据筒仓结构。
计算的进步淘汰了传统的建模技术。物理模型可以成为逻辑抽象。范式转变和数据平台即服务支持不同的大规模数据域。
改变。在这个世界上,景观不断变化,技术来来去去,模式和观点在解决问题/创造问题的永恒舞蹈中潮起潮落,什么是你的基本数据策略?
抽象的目标
最强大的目标有时也是最简单的。虽然持续交付能够实现您的运营和业务目标的数据实践对您的战略至关重要,但定义一个与当前技术或业务趋势无关的更抽象的目标变得越来越重要。经常被忽略的抽象目标是什么?它是组织内企业数据和信息素养的结构化和持续传播。有一种遗留的期望,即只有数据分析师需要理解概念数据模型,只有软件工程师需要理解架构,或者只有业务分析师从详细的、跨领域的业务事件理解中受益。
任何一项数据计划所带来的好处都将受到组织信息素养成熟度的影响和限制。
叙述的基础
达到的信息素养程度不会因人而异,也不会因团队而异。它不是客观可测量的,只是数据策略的一部分,尽管是基础部分。然而,对开发和传播数据驱动文化这一核心组件的认真关注不应该作为优先事项被忽视。
如果利用它们的团队不符合定义、业务相关性、影响它们的变量或使用它们的基本愿望,那么提供见解、为您的解决方案带来五个 9 以及复杂的数据科学模型都将毫无意义。
“不读书的人并不比不识字的人优越”这句格言最初是马克·吐温说的。
作为一名现代数据领导者,你的工作不仅仅是讲述故事,甚至教组织阅读,还要激发阅读的欲望和渴望。
请关注我或通过我的推荐链接注册 Medium 来支持我的写作。谢谢!
你的深度学习模型好吗?
一个新的深度学习框架,使得在 PyTorch 中构建基线变得简单
说你是研究员;你对一个全新的神经网络架构或一个看起来奇怪的优化步骤有一个创新的想法,这有可能成为深度学习领域的突破。你应该如何测试你的方法?
另一方面,假设你是一个机器学习工程师,你想测试你建立的模型是否有意义。这是你能做的最好的吗?选择一个现成的、经过实战检验的算法并部署它不是更好吗?
Lightning Flash:一个新的深度学习框架,使得在 PyTorch 中构建基线变得微不足道。真的!
答案不应该令人惊讶:你需要设定一个基线。在学术界,基线通常是关于特定任务和数据集的最新发布的结果(假设这设置了新的艺术状态)。在行业中,基线在很大程度上是特定于领域的。
然而,没有人愿意花费太多的时间来实现基线。如果你有一些快速的东西来集中你的时间迭代你的方法,那将是最好的。这就是我们今天要讨论的: **lightning-flash**
一个新的框架,让在 PyTorch 中构建基线变得微不足道!
学习率是为那些对 AI 和 MLOps 的世界感到好奇的人准备的时事通讯。你会在每周五收到我关于最新人工智能新闻和文章的更新和想法。在这里订阅!
电闪
闪电侠围绕着任务的想法。到目前为止,框架附带的任务有助于解决图像分类、图像嵌入、文本分类和摘要、表格分类和翻译的挑战。更多的即将到来,当然,你可以随时建立自己的。
所以,我们假设你要解决膜翅目图像分类挑战,预测某张图像中是有蚂蚁还是有蜜蜂。正如我们已经看到的,首先,我们需要一个基线。怎么做?让我们从工具箱中取出图像分类任务并敲钉子。
在要求模型进行预测之前,我们需要在数据集上对其进行微调。这对于lightning-flash
来说非常简单:
现在,我们已经准备好获取模型对测试数据的预测。让我们将 3 张蚂蚁的图片输入到我们微调过的模型中。我们期望得到相同的类,或者是0
或者是1
,这取决于哪个索引被用作‘ant’类的符号。
事实上,我的终端上的结果是这样的:
[0, 0, 0]
如果我们想进一步测试这一点,我们也可以添加蜜蜂的图像,或者指示我们的模型用整个文件夹来生成预测:
几分钟后,我们得到了基线。最重要的是,记住闪电是无限可扩展的;您可以用几行代码构建自己的任务,适应自己的架构,将训练扩展到多个 GPU,并采用最佳实践,如混合精度训练!
入门指南
最好的开始方式是阅读文档。但是,如果您使用 VS 代码并安装了 Docker,我可以让事情变得更简单:
- 安装
[remote-containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
扩展 git clone [https://github.com/dpoulopoulos/medium.git](https://github.com/dpoulopoulos/medium.git)
- 导航至
lightning_flash
示例文件夹 - 启动命令面板(
ctlr + shif + p
)并键入Reopen Folder in Container
几分钟后,您将获得一个开发环境,其中包含测试lightning-flash
所需的一切。阅读下面关于remote-containers
扩展以及如何使用它进行开发的更多内容。
结论
无论你是研究人员还是工程师,你都需要强大的基线来取得进展。然而,建立基线不应该花费你一整天的时间。
基于 PyTorch 和 PyTorch Lightning 构建的新深度学习框架 Lightning Flash 使这个任务变得微不足道。让我们看看我们能用它来建造什么!
关于作者
我的名字是迪米特里斯·波罗普洛斯,我是一名为阿里克托工作的机器学习工程师。我曾为欧洲委员会、欧盟统计局、国际货币基金组织、欧洲央行、经合组织和宜家等主要客户设计和实施过人工智能和软件解决方案。
如果你有兴趣阅读更多关于机器学习、深度学习、数据科学和数据操作的帖子,请关注我的 Medium 、 LinkedIn 或 Twitter 上的 @james2pl 。此外,请访问我的网站上的资源页面,这里有很多好书和顶级课程,开始构建您自己的数据科学课程吧!
Zillow 是不是“被诅咒了?”行为经济学视角
意见
iBuying 业务告诉我们预测模型的使用和误用
(本文基于我的书 【使用 R 和 Python 的行为数据分析:真实业务结果的客户驱动数据】【1】)
简介
房地产公司 Zillow 最近宣布,在过去几个月亏损超过 3 亿美元后,它将关闭其购房部门 Offers,并解雇 25%的员工。
Zillow Offers 是该公司进军 iBuying 的一次尝试:用 Zillow 的话说,“即时买家,通常被称为 iBuyers,是一种房屋买卖服务,通常以市场价格直接从卖家手中购买场外房屋,并在进行轻微维修和更新后迅速在公开市场上出售”【6】。Zillow 的核心业务是列出待售房产(即房地产市场),这是一项由他们著名的房屋估价工具 Zestimate 支持的活动。
作为一名行为科学家,我很清楚后见之明和叙述偏见。当专注于一个单一的过去事件时,很容易陷入一个简单解释的幻觉,而这个解释一直是可预测的。人们也很容易采取“内部观点”,关注手头案件的细节和轶事,而不是采取更广泛的“外部观点”。例如,我看到过类似“数据科学对于这个用例来说不够精确”或“市场太不稳定”的解释[3,4,5];这些并没有说明在同一时期,其他 iBuyers,如 Opendoor 和 Offerpad,比 Zillow Offers 表现得更好。然而,有充分的理由相信预测分析不是这个行业的正确工具。在描述这些原因之前,我将首先介绍不同类型的分析。
不同类型的分析
“数据科学”已经涵盖了所有的业务分析,只要它们足够新奇,但在我看来,一个关键的区别在于描述性分析、预测性分析和因果分析:
- 描述性分析提供了数据的描述。简单地说,我认为它是“现状”或“我们衡量的”分析。上个月有多少客户取消了订阅?我们去年赚了多少利润?描述性分析是最简单的分析形式,但它也没有得到应有的重视。许多组织实际上很难获得清晰统一的运营视图。
- 预测分析提供了一种预测。我认为它是“假设目前的条件持续下去,将会是什么”或“我们还没有测量”的分析。大多数机器学习方法都属于这种类型的分析,并帮助我们回答诸如“下个月有多少客户会取消订阅?”以及“该订单是否具有欺诈性?”
- 最后,因果分析提供了数据的原因。我把它想成“如果呢?”或“在不同条件下会怎样”的分析。它回答了一些问题,比如“除非我们给他们发优惠券,否则下个月会有多少客户取消订阅?”。
在过去 25 年左右的时间里,预测分析席卷了整个世界,如今,大批数据科学家正忙于为企业构建预测模型。这些模型并不完美(正如约吉·贝拉所说,“很难做出预测,尤其是对未来的预测”),但它们通常胜过拥有数十年经验的人类专家。那么,我们为什么应该期待预测分析在智能交通领域表现不佳呢?有两个原因:
- 房屋买卖行为受到多种波动因素的影响(又名人类是复杂的);
- iBuying 市场具有很强的战略意义。
在接下来的两节中,我将研究这两个方面并指出它们的解决方案。
房屋买卖行为受多种波动因素影响
当所研究的现象服从少数稳定且众所周知的因素时,预测分析效果最佳。让我们以风力涡轮机的预测性维护为例:
- 相关因素的数量是有限的,它们之间的相互作用也是有限的。一旦你考虑了风力、运动部件之间的摩擦和材料的腐蚀,你就对将要发生的事情有了很好的把握。
- 物理定律是不变的(引力不放任何一天假!).
- 物理学很好理解。为了简单起见,模型可能会忽略次要或罕见的现象,如百年一遇的风暴,但即使出现这种异常情况,结果仍然是可以预测的:叶片将会断裂和坠落,而不是罢工或退出。
另一方面,在房地产市场:
- 有许多许多不同的因素在起作用——人口统计、经济,但也有文化和心理因素——它们有着复杂的相互作用。这意味着即使是 3 或 4 个最重要的方面的预测能力也会令人失望地低。
- 这些因素不是恒定的;偏好会随着时间而改变,有时会变得很残酷。房地产市场的三个特征放大了这一点。第一,行为“参差不齐”;一次买或卖一整栋房子,消费者不可能轻易减少他们每月 5%的住房消费。二是交易时机灵活;人们可以根据市场情况匆忙或推迟购买新房子,而不是推迟购买食品或家庭用品。最后,住房可能是人们财富的一大组成部分,这放大了价格变化的影响(相反,当咖啡变得更贵时,更少的人变得更富有并疯狂消费)。这可能会导致交易量出现过山车式的变化,这在其他消费品中是看不到的。
- 前两个方面的结合意味着市场可能的“状态”数量是巨大的(这个问题在统计学和其他定量领域被称为“维数灾难”)。从数学建模的角度来看,这具有重要的意义。预测分析在预测与训练数据“足够接近”的预测值组合的结果时表现最佳。不可否认,在任何非平凡的数据集中,拥有个唯一的个数据点,以及训练数据集中从未出现过的预测值组合是很常见的(几乎任何连续变量,如身高或收入,都会出现这种情况)。但是,大多数情况下,即使是唯一的数据点也可以通过训练数据集中的点的线性组合来近似。相反,在房地产市场的情况下,很容易想象整个本地市场(比如说,凤凰城地区)立刻就进入了未知的水域。然后,预测分析必须依赖外推,随着我们远离先前观察到的值,外推变得越来越不稳健(也称为过度拟合)。
“就房地产市场而言,很容易想象整个本地市场(比如说凤凰城地区)会立刻进入未知领域。预测分析必须依赖外推,随着我们远离之前观察到的值,外推越来越不可靠(也就是过度拟合)。”
因此,房地产市场为分析提供了一个棘手的难题。这不是一个新问题。早在 20 世纪 70 年代,宏观经济学家罗伯特·卢卡斯(Robert Lucas)就阐明了这一点(凯恩斯模型的“卢卡斯批判”)。他建议我们识别人类行为的更深层次的参数,比如消费者偏好,我非常同意。
将因果分析与潜在行为驱动因素的分析结合起来使用,可以缓解这些问题。在我的书中,我为此开发了我所谓的“数据分析的因果行为框架”。
数据分析的因果行为框架
预测分析满足于构建高准确度的黑盒,而因果分析则致力于挖掘在某种情况下起作用的基本规律和规则。这种目标上的差异意味着因果分析在“常规”情况下的预测能力通常低于其预测兄弟,但在更复杂和多变的情况下会大放异彩。
iBuying 市场具有很强的战略意义
iBuying 业务的一个重要特点是,你对单个物业进行投标。这句话实际上有很多东西需要解开,所以让我们一次解开一部分:
- 每个属性都是独一无二的。即使在最统一的市场中,房屋之间也略有不同(例如不同程度的磨损)。特别是,不同位置的两个几乎相同的房子不能像超市货架上的豆子罐头那样互换;购房者对不同地段的偏好不同:有人的“离市区远”,就是有人的“离我父母近”。
- 每笔交易都是独一无二的。超市出售许多相同或相似的商品,而房地产交易大多是一对一的。即使有人在卖几套房子,一套房子的价格也不会自动适用于另一套。房子也是不经常转手的长效产品。
- 没有固定的价格。卖家从相对较高的价格(与他们的预期相比)开始,逐渐降低价格,直到找到买家。反过来,买方可能会试图通过谈判降低价格。相反,没有正式公布销售价格的人可能仍然会接受潜在买家的自发报价。这一点在这里尤其重要,因为 85%的 iBuyers 购买的是以前不在市场上的房子(资料来源)。最后,当多个买家对同一物业感兴趣时,他们可能会出价高于对方,因为没有“先到先得”的规则。
所有这些方面结合起来意味着,所谓的“房地产市场”实际上是一个房子的个体、临时、议价市场的松散集合。因此,Zillow 宣称的成为房地产“做市商”的愿望——类似于股票市场的“做市商”——充其量也只是一个不稳定的基础。我们谈论“约会市场”,但成为它的做市商意味着什么???
特别是,这让 Zillow 受到了赢家的诅咒。拍卖理论中这个听起来不祥的概念指的是本质上导致买家支付过高价格的情况。通过一个简化的例子可以很好地理解这一点,所以让我们想象一下,在一个市场中有三个 iBuyers。他们每个人都建立了一个机器学习模型来预测他们可以有利可图地购买和出售房屋的价格。因为他们可以使用相同的资源(装修承包商等)。),这三个价格都一样。比方说,一栋 30 万美元的房子是一笔有利可图的交易,不管是哪家卖家做的。这三家公司建立的预测模型也很相似:它们中的每一个都有三分之一的时间正确预测价格(在前面的例子中是 30 万美元),三分之一的时间低于 10%(27 万美元),三分之一的时间高于 10%(33 万美元)。这意味着,就其本身而言,每种模式都相当合理且有利可图。最后,为了简单起见,我们假设三个模型的误差是独立的。一家公司的模型预测超调并不影响另一家公司的模型准确的概率,也不影响其误差的方向。
如果这三家公司在一个给定的市场上相互竞争,他们最终将平均获得三分之一的房屋,但大多数都是以虚高的价格购买的。一般 30 万美元的房子会收到一个 27 万美元的出价,一个 30 万美元的出价,以及一个 33 万美元的出价。换句话说,尽管每家公司的平均出价是有利可图的,但平均的中标却不是。胜利者被自残的成功所诅咒。
“尽管每家公司的平均投标都是有利可图的,但平均的中标却不是。胜利者被诅咒以自残的成功”。
您可以看到这与预测分析的局限性有着怎样的联系。即使一个模型能够非常准确地预测一处房产的潜在转售价格,如果使用不当也会导致损失。最重要的是,任何销量或市场份额目标都将使你的盈利能力取决于你的竞争对手的模型的准确性:如果你的竞争对手有糟糕的模型,并为物业支付过高的价格,你只能通过支付更高的价格来击败他们!幸运的是,博弈论者和拍卖理论家已经开发了模型和工具,可以通过模拟其他参与者的战略行为来帮助缓解这些问题。
结论
概括一下:我不认为 iBuying 业务存在固有缺陷,我也不认为算法在定价方面不如人类的观点有说服力。然而,我确实认为这一业务线为预测分析带来了独特的挑战,预测分析产生了一些更广泛的见解:
- 就像谚语中的锤子一样,预测分析并不总是适合某项工作的工具。有时一个问题需要描述性或因果分析。
- 如果你想让你的模型在经济周期和动荡中表现良好,你需要理解并考虑人类行为的基本的、持久的驱动因素。
- 一些市场大大偏离了许多买方和许多卖方以单一价格交换相同产品的理论理想。在这种情况下,你需要使用相关的经济学概念,如博弈论和拍卖理论。否则,你也会被诅咒!
但是等等,还有呢!
最后不要脸的塞来了。如果你想了解更多关于赢家的诅咒,̶y̶o̶u̶̶s̶h̶o̶u̶l̶d̶̶r̶e̶a̶d̶̶m̶y̶̶b̶o̶o̶k̶,你应该读读理查德·泰勒的书。),另外在 LinkedIn 上关注经济学家约翰·李斯特。然而,如果你想了解更多的因果分析以及如何在商业中使用它来理解人类行为,我的书会告诉你:
- 如何建立因果图,理解因果关系;
- 如何想清楚更深层的心理和行为因素;
- 如何建立模型,为商业决策提供有益的信息;
- 以及许多其他关于在商业中分析客户数据的很酷的事情。
参考
- [1] F. Buisson,用 R 和 Python 进行行为数据分析:真实业务结果的客户驱动数据,奥赖利媒体,2021。
- [2] R. Thaler,《赢家的诅咒:经济生活中的悖论和异常现象,第一版。1994 年,kindle ed。2012.
- [3]《卫报》,《3 亿美元的翻身仗:房地产网站 Zillow 的一方骗局是如何严重出错的》 ,2021 年 11 月 4 日。
- [4]华尔街日报,Zillow 到底哪里出了问题?2021 年 11 月 17 日,一个房地产算法打乱了它的大赌注。
- [5]连线,为什么 Zillow 无法让算法式房屋定价发挥作用,2021 年 11 月 11 日。
- [6] Zillow Research,2021 年 9 月 7 日,iBuyers 帮助人们搬家的次数创下纪录。
《ISLR 评论》:开始你的 ML 之旅的理想教材
你是不是也一直在想接下来要学什么?让 ISLR 成为你阅读的下一本教科书——复习和学习技巧。
几个月前,我觉得我的机器学习基础有点不牢固。我想开始 Kaggle,但是我被所有可用的技术吓倒了。我想尽可能高效地改变这一点,我已经找到了一个好的解决方案。我很兴奋现在就和你分享!
在这篇文章中,我将告诉你我在 R (缩写为 ISLR )的统计学习导论教材中的工作经验。我希望这能帮助你弄清楚你是否也应该捡起来,我也会分享一些让你学习更有效率的小技巧。
这么多书要读,时间却这么少——一定要挑一本好书!|照片由 Alfons Morales 在 Unsplash 上拍摄
为什么我选择了 ISLR
大约一年前,我开始了我的机器学习之旅——当我开始厌倦时,我在 Coursera 上完成了吴恩达著名的 机器学习课程。虽然我喜欢这门课程,它给了我一个工作的基础,但我觉得我需要更多的帮助和指导来用实际的方式使用 T21 新学到的知识。我想学习更多的技术,比如随机森林,更多地了解何时使用哪种算法,以及如何在 Python 中实际实现它们。我想创办 Kaggle,所以我决定参加 Kaggle 的和课程。当第一批 Kaggle Learn 教程中有一个是关于实现决策树,但是没有解释是什么或者它是如何工作的时候,我很快就泄气了。在半个小时的疯狂搜索和阅读了许多没有真正解释任何东西的博客帖子后,我决定我需要一些知识更详细和更有条理的东西——一本教科书。
挑选教材时,我在寻找以下内容:
- 入门/本科水平,容易理解,不适合博士生
- 深入数学的细节,但也解释了直觉
- 介绍了 Ng 的课程中没有涉及的许多不同的 ML 技术
- 实用,有编码练习来实现我所学到的东西
- 可在 2-3 个月内完成
经过一番 Reddit 深潜(go joinr/learn machine learning)发现最值得推荐的入门水平书好像是 ISLR 。它也满足了我想要的所有要求,所以我试了一下。
关于 ISLR 的一切
这本书的好处在于它可以从作者的网站上免费下载。你可以先看一眼,然后决定你是否喜欢这本昂贵的教科书。然而,我确实建议获得一个物理副本来浏览它。
如题所示,ISLR 在 R. 中用例子和练习介绍了统计学习技术,但是什么是静态学习呢?这本书将它定义为“理解数据的一套庞大工具”。一般来说,统计学和 ML 之间正在进行一场战斗,你可以在这篇非常有趣的帖子中读到它。关于这本书,与通常的 ML 资源有轻微的文化差异,有时是不同的术语(例如,“Lasso/Ridge”而不是“L1/L2”),有些侧重于经典的统计概念(如 p 值和假设检验),但它主要解释了通常可以归类为 ML 算法的方法,如回归、支持向量机、基于树的方法和无监督学习概念。
这本书是为不同行业和背景的人设计的,这些人需要在他们的专业领域处理数据,而不一定需要大学水平的数学教育。这本书并没有比一本入门数学课程**,更多的数学背景,也没有使用矩阵或向量符号来简化事情。它也不假设任何以前的 R 经验**,认真讲解每一行代码,包括写函数和制作剧情。
ISLR 分为 10 章,从介绍性章节开始解释符号、偏差/方差权衡,并介绍 r。在第一章之后,所有后续章节都围绕选定的技术,从线性回归慢慢构建到更复杂的概念,如随机森林和层次聚类。每一章的结尾都有实验,指导你实现本章所教的方法,并进一步概念和编码练习来加深你的理解。
在每一章中,重点是对概念的高层次理解和良好的直觉。我发现对于我所需要的这本书来说,这些细节已经足够了,可以自信地在我自己的项目中使用一个方法的实现。它通过列出优缺点来比较类似的方法,并给出一种方法优于另一种方法的例子。作者用简单的数据集和真实的例子来说明每一种方法,这进一步有助于直觉。我特别喜欢几乎每一页上丰富多彩的图表——每当解释新的东西时,都会有一个图表来说明数据上的概念。
可访问所有数学背景和漂亮图片|照片由 Ben White 在 Unsplash 上拍摄
ISLR 被推荐给谁?
我认为你肯定会从阅读这本书中获得很多价值,如果以下任何一条适用的话:
- 你想要一个单一的信息来源来解释最流行的 ML 方法的基础,而不是花费大量的时间来搜索不同质量的相关文章和教程
- 您想做 Kaggle,但是对所有可用于数据的 ML 方法感到害怕
- 你知道算法在理论上是如何工作的,但不知道如何开始实现它们
- 你需要一本解释直觉的预备教材,然后才开始阅读数学厚重的研究生教材
- 在数据科学面试之前,你要提醒自己算法背后的数学。据我的一些朋友说,这本书里的材料对一些数据科学家毕业生的在线面试非常有帮助(也足够了)。
一些提示
将 ISLR 移植到 Python
这本书是 R 语言的,很多人(包括我)在他们的数据科学项目中不使用 R 语言。不过,如果你和我一样是团队 Python,这本书还是很惊艳的。你可以阅读它并接受一个挑战:用 Python 而不是 r 解决实验室问题。
这给了你一个框架,让你通过练习来实践理论概念,但是更少的手动操作:你不能只是重新键入 R 代码来完成实验,你必须首先弄清楚如何去做。这将意味着深入研究 Numpy、scikit-learn 和 StatsModels 库文档,并理解每个函数中的参数,以获得与 r 中相同的行为。老实说,这样做给我带来的益处至少与阅读这本书给我带来的益处一样多。
好的一面是,如果你被卡住了,你总是可以查找其他人的解决方案,因为许多人已经这样做了。(这里有 我的 GitHub 回购与 Python labs *,*但你总是可以谷歌“Python 中的 ISLR”并找到十几个其他回购。)
认证在线课程+视频
比起视频,我更喜欢书,但我们都不一样。如果你从视频中学得更好,你不必担心——作者已经根据这本书录制了一门课程,以补充你的阅读。 15 小时 Youtube 播放列表从 链接至此 。
如果你通过努力获得一张证书而变得更有动力,你可以购买这张证书来展示你的简历,这个选择也是存在的。斯坦福大学在 edX **,**网站上提供课程 ,如果你决定购买证书,还会有额外的练习和反馈。
时间范围
如果你想让自己负起责任,这里有一个估计,你可以如何为自己设定目标来完成这本书:
- 我估计这本书可以在 10 周,内完成,每周工作大约 5-6 小时(如果你是自己移植到 Python 的话,8-10 小时)
- 如果你做笔记的话,通读一章的文本大约需要 2 个小时,半个小时用于概念练习,一个小时用于 R 语言的实验(或者对我来说用 Python 最多 4 个小时),1-2 个小时用于编码练习。当然有更短和更长的章节,但这是我对平均值的粗略估计。
单独阅读一本教科书可能会有点让人泄气——没有像在线课程那样的提醒和红色弹出窗口。我建议你给自己设定一个目标,在某个特定的日期前完成每一章,让自己保持动力。这是一本非常受欢迎的书,你可能也能在 Reddit 上找到一些负责任的伙伴。
独自完成一本教科书是一项艰巨的工作……|照片由 Siora 摄影在 Unsplash 上拍摄
下一步做什么?
如果你已经读完了这本书,你应该会对应用机器学习方法来解决你选择的问题感到更舒服一些。如果您感兴趣,您可能已经准备好开始使用数据集进行实验,并在 Kaggle 上进行实践。如果你正在寻找一种温和的比赛体验,我推荐从 表格游乐场系列 开始。这些数据集易于使用,不占用大量计算资源,非常适合尝试各种简单的模型。如果你想了解更多,我可以全力推荐 Rohan Rao 的文章逐步接近 Kaggle。
如果你对在 ISLR 学的数学还不过瘾,并且有扎实的线性代数和微积分基础,我推荐你去看看 《统计学习要素》 (ESL) 。从技术上来说,《ISLR》是 ESL 的入门书,它更多地涉及了数学内容,更像是博士生和研究人员的参考书,而不仅仅是你通读的东西。
无论你决定下一步做什么,我希望这篇评论对你有用,并祝你在机器学习之旅中好运!
原载于 2021 年 4 月 25 日https://Alexandra souly . github . io。
“隔离森林”:任何数据科学家都应该知道的异常检测算法
通过出色的无监督算法进行异常检测(也可在 Scikit-learn 中获得)
[图片由作者提供]
“隔离森林”是诞生于 2009 年的一个高明的异常检测算法(此处为原文)。它已经变得非常流行:它也在 Scikit-learn 中实现(参见文档)。
在本文中,我们将欣赏这种算法背后的直觉之美,并借助一些例子理解它到底是如何工作的。
“为什么异常检测如此困难?”
异常(或异常值)检测的任务是识别与大多数观察值相比“非常奇怪”的数据点。
这在一系列应用中非常有用,从故障检测到发现金融欺诈,从发现健康问题到识别不满意的客户。此外,它也有利于机器学习管道,因为已经证明去除异常值会提高模型的准确性。
异常检测之所以如此困难,是因为它是一个无人监管的问题。换句话说,我们通常没有标签来告诉我们哪些实例实际上是“异常”。或者更确切地说,即使我们有标签,也很难将异常检测框定为监督问题。事实上:
- 异常很少见;
- 异常是新奇的;
- 异常各不相同。
出于所有这些原因,监督技术通常不适合异常检测。
隔离森林有什么特别之处
传统的异常检测方法大致是:
- 描述“正常实例”是什么样子的(这通常涉及到聚类分析)。
- 将不符合这些配置文件的所有实例标记为离群值。
隔离森林引入的创新是,它直接从异常值开始,而不是从正常观察值开始。
核心思想是基于使异常独特的特征来“隔离”异常应该是非常容易的。
从技术上讲,这转化为这样一个事实,如果我们在所有观察值上拟合一个决策树,离群值应该比“正常”实例更接近树的根。
这是什么意思?让我们用一个例子来说明这一点。
假设我们有一个数据集,其中包含了目前活着的所有 7,932,843,214 个人的数据。我们想要多少变量就有多少变量:年龄、净资产、居住地、职称…
这样的数据集中有哪些离群值?请记住,异常值不一定是错误的数据:它们只是与总体中的其他数据点非常不同的数据点。在这个例子中,杰夫·贝索斯肯定是一个异数。
现在想象一下,我们可以拟合一个决策树,使得每个末端叶子包含一个且只有一个人。换句话说,这棵树完全没有修剪。如果隔离森林背后的假设是正确的,那么杰夫·贝索斯会比我自己更接近树根。
一棵完全未修剪的决策树,其中每一片末端叶子代表世界上的一个人[图片由作者提供]
作为一个局外人,杰夫·贝索斯更容易被孤立:只要问一句“他的身价超过 1700 亿美元吗?”就够了在近 80 亿人中找回他。另一方面,由于我比杰夫·贝索斯普通得多,你可能需要至少 10 个是非题来缩小搜索范围,直到找到我。
在引擎盖下寻找
现在我们已经看到了隔离森林背后的主要直觉,让我们借助一些简单的数据点来尝试理解算法的确切机制。
import pandas as pddf = pd.DataFrame({
'x': [1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 2.0],
'y': [2.1, 2.4, 3.0, 2.6, 2.2, 2.8, 3.7]
}, index = ['A', 'B', 'C', 'D', 'E', 'F', 'G'])
一些数据点[图片由作者提供]
从 A 到 F 的项目表示一个非常紧凑的点云:它们是“正常的”数据点。与这些实例相比,G 可能是一个异常值:它对于 x 和 y 都有异常值。
隔离林是以树为基础的,所以让我们根据这些数据拟合一棵树:
数据点上的树随机拟合。[图片由作者提供]
注意,这棵树是随机生长的。
这里最基本的概念是每个元素所在叶子的深度。例如,在这个树中,称为 G(我们的离群值)的观察值在深度 1(例如,离根节点 1 层),而 C 在深度 3。
隔离林背后的想法是,平均而言,离群点将比正常实例更接近根节点(即,在更低的深度)。
在机器学习中,关键是迭代。事实上,如果我们随机拟合许多决策树,然后对不同树上的每个观察值的深度取平均值,我们会发现一个“平均深度”,它代表了一个“外部性”的经验度量。
Scikit 中的隔离林-学习
让我们通过 Scikit-learn 的实现来看一个使用示例。
from sklearn.ensemble import IsolationForestiforest = IsolationForest(n_estimators = 100).fit(df)
如果我们从森林中取出前 9 棵树(iforest.estimators_[:9]
)并绘制它们,我们会得到:
隔离林的前 9 个(100 个)决策树。每个数据点旁边的数字是它在树中的深度。[图片由作者提供]
看一看这前 9 棵树,我们已经可以看到一个模式:G 往往比任何其他点的深度低得多(平均 1.44)。的确,第二个点是平均深度为 2.78 的 A。
从概念上讲,这正是该算法的工作原理:平均深度越低,出现异常值的可能性就越大。
然而,在实践中,我们不能使用平均深度,因为树的深度取决于它所适合的样本数。由于这个原因,我们需要一个公式来考虑实例的总数。这是论文中提出的公式:
刘提出的“另类”评分。[截图自此处
其中 n 是实例的数量, h(x) 是在特定树中找到数据点的深度( E(h(x)) 是它在不同树中的平均值),而 H 是调和数。
s(x,n) 是一个介于 0 和 1 之间的数字,其中分数越高,越有可能是异常值。
注意:Scikit-learn 的实现返回与上面定义的分数相反的分数。所以上面所说的仍然有效,但是带有负号。
在我们的小数据集上,分数由下式给出:
scores = iforest.score_samples(df)
让我们来看看我们每一点的估计分数:
隔离森林估计的分数[图片由作者提供]
正如我们所料,G 更有可能是一个离群值,因为它的分数低于所有其他分数。
除了我们的玩具数据集,模拟算法在某些特定情况下会产生什么也很有趣。例如,如果我们在两个变量( x 和 y )上取一些大致形成圆形的数据点,这是我们将通过隔离森林获得的分数的等值线图:
我们将通过隔离林获得的分数的数据点(左)和等高线图(右)。[图片由作者提供]
有趣的是,不仅最极端的区域可能是异常值,而且位于圆圈中心的部分也可能是异常值,因为它是 x 和 y 的不寻常组合。
感谢您的阅读!我希望这篇文章对你有用。
我感谢反馈和建设性的批评。如果你想谈论这篇文章或其他相关话题,你可以发短信给我我的 Linkedin 联系人。
Isomap 嵌入——一种令人敬畏的非线性降维方法
机器学习
如何用等距映射“展开瑞士卷”?
等距映射(Isomap)。图片由作者提供。
介绍
我继续机器学习算法系列,看看另一种称为等距映射或简称为 Isomap 的降维技术。
在文章中,我回答了以下问题:
- Isomap 属于机器学习技术的哪一类?
- Isomap 是如何工作的?我通过一个直观的例子来解释,而不是复杂的数学。
- 如何在 Python 中使用 Isomap 对我的数据进行降维?
机器学习算法家族中的 Isomap
有这么多的机器学习算法,可能永远不可能将它们全部收集和分类。然而,我已经尝试为一些最常用的做了,你可以在下面的互动旭日图中找到。确保通过单击浏览图表👇在不同的类别上对进行放大并展示更多的。
机器学习算法分类。由作者创建的互动图表。
如果你喜欢数据科学和机器学习 ,请 订阅 每当我发表一个新的故事,你都会收到一封电子邮件。
如你所见,Isomap 是一种无监督机器学习技术,旨在降维。
它不同于同类中的其他一些技术,它使用了一种非线性的降维方法,而不是 PCA 等算法使用的线性映射。我们将在下一节看到线性和非线性方法的不同之处。
等距映射(Isomap)是如何工作的?
Isomap 是一种结合了几种不同算法的技术,使其能够使用非线性方式来降低维度,同时保留局部结构。
在我们查看 Isomap 的示例并将其与主成分分析(PCA)的线性方法进行比较之前,让我们列出 Isomap 执行的高级步骤:
- 使用 KNN 方法找到每个数据点的 k 个最近邻居。这里,“k”是您可以在模型超参数中指定的任意数量的邻居。
- 一旦找到邻居,构建邻居图,其中如果点是彼此的邻居,则这些点彼此相连。非相邻的数据点保持不连接。
- 计算每对数据点(节点)之间的最短路径。通常,这是弗洛伊德-沃肖尔或迪克斯特拉的算法是用于这项任务。注意,这个步骤通常也被描述为寻找点之间的测地线距离。
- 使用【MDS】计算低维嵌入。给定每对点之间的距离是已知的,MDS 将每个对象放置到 N 维空间中(N 被指定为超参数),以便尽可能地保留点之间的距离。
对于我们的例子,让我们创建一个称为瑞士卷的 3D 对象。这个物体由 2000 个独立的数据点组成。图表是交互式的,所以请务必旋转它,以熟悉它的确切形状。
交互式 3D 瑞士卷。图由作者提供。
接下来,我们想使用 Isomap 绘制这个三维瑞士卷的二维图。为了跟踪这个转换过程中发生了什么,让我们选择两个点:A 和 b。
3D 瑞士卷上两点之间的欧几里得距离与测地线距离。图片由作者提供。
我们可以看到这两个点在 3D 空间中彼此相对靠近。如果我们使用线性降维方法,如 PCA,那么这两个点之间的欧几里德距离在较低的维度上仍然有些相似。请参见下面的 PCA 转换图:
使用 PCA 将 3D 瑞士卷缩减为二维。图片由作者提供。
注意,PCA 中 2D 物体的形状看起来像从特定角度拍摄的同一 3D 物体的照片。这是线性变换的一个特点。
与此同时,Isomap 等非线性方法给了我们一个非常不同的结果。我们可以把这种转变描述为展开瑞士面包卷,把它平放在 2D 表面上:
使用 Isomap 将三维瑞士卷缩减为二维。图片来自作者。
我们可以看到,2D 空间中 A 点和 B 点之间的距离是基于通过邻域连接计算的测地线距离。
这就是 Isomap 能够在平衡局部和全局结构之间的关系的同时执行非线性降维的秘密。
如何在 Python 中使用 Isomap 对我的数据进行降维?
现在让我们使用 Isomap 来降低 MNIST 数据集(手写数字的集合)中图片的高维度。这将使我们能够看到不同的数字在三维空间中是如何聚集在一起的。
设置 我们将使用以下数据和库:
- Scikit-learn 库用于
1)来自 sklearn 数据集的 MNIST 数字数据(load _ digits);
2)执行等距映射(Isomap); - 用于数据可视化的 Plotly 和 Matplotlib
- 熊猫用于数据操作
让我们导入库。
接下来,我们加载 MNIST 数据。
导入数据的形状。图片由作者提供。
让我们显示前 10 个手写数字,这样我们可以更好地了解我们正在处理的内容。
前 10 个手写数字的图像(8x8=64 像素)。图片由作者提供。
等距映射 我们现在将应用 Isomap 将 X 数组中每条记录的维数从 64 减少到 3。
转换数据后的数组形状。图片由作者提供。
最后,让我们绘制一个 3D 散点图,看看将维度减少到 3 后的数据是什么样子。
这是一个带有结果的交互式图。确保旋转它以查看每组数字之间的间隔。
Isomap 结果-3D 空间中的数字集群。图片由作者提供。
正如您所看到的,Isomap 在将维度从 64 减少到 3 的同时保留非线性关系方面做得非常出色。这使我们能够在三维空间中可视化手写数字的集群。
如果我们愿意,我们现在可以轻松地使用分类模型之一,如决策树、 SVM 或 KNN 来预测每个手写数字标签。
结论
Isomap 是降维的最佳工具之一,使我们能够保留数据点之间的非线性关系。
我们已经看到了 Isomap 算法是如何在实践中用于手写数字识别的。类似地,您可以使用 Isomap 作为 NLP(自然语言处理)分析的一部分,在训练分类模型之前减少文本数据的高维度。
我真诚地希望这篇文章能让您轻松地了解 Isomap 是如何工作的,以及它在数据科学项目中的好处。
如果您有任何问题或建议,请随时联系我们。
干杯👏
索尔·多比拉斯
如果你已经花光了这个月的学习预算,下次请记得我。 我的个性化链接加入媒介是:
https://solclover.com/membership
你可能喜欢的其他故事:
找一份数据科学的工作应该总是很难的
意见
随着时间的推移,它也会变得更难。
照片由 Unsplash 上的 Muhammad Faiz zulkefiry拍摄
好事从来都不容易,对吧?这是我找工作时的心态。老实说,当我看起来如此接近的每一个机会都溜走时,提醒自己这一点是非常困难的。在不确定时期保持动力完全是它自己的问题。然而,随着我堆积越来越多的拒绝邮件和自动道歉,我实际上很高兴这个过程如此艰难,就个人而言,我希望它变得更难。
亚当,你是认真的吗?你真的想让你的整个职业生涯都依赖于像想知道你毕业后是否有工作这样困难的事情吗?你真的想日复一日醒来,希望被某个地方接受,只是为了让你知道你可以达到目的吗?
是的。欢迎来到现实。
尽可能简单地说,难以置信的困难是那些为了薪水而工作的人和那些真正想在这个领域推动自己前进的人之间的过滤。
在这里,我们必须对自己诚实,有很多人进入数据科学只是为了钱。你知我知,我真为他们感到难过。他们会精疲力尽,放弃,后悔为了高于平均水平的薪水在他们实际上不喜欢的事情上浪费了这么多时间,但是不要告诉任何人我这么说过。
然而,我不相信大多数读到这篇文章的人会这样想。如果你定期检查数据科学,那么很可能是因为你对其他人以他们自己的方式对该领域做出的贡献感兴趣,这只会促进你自己作为数据科学家的成长。
此外,你点击这篇文章可能是因为你也对申请过程感到紧张。别担心,我们都是。听着,我不是来给你的生活增加压力,也不是来耸人听闻地报道申请过程,点击诱饵只是为了引起你的注意。抱歉。然而,我确实想严肃地指出,申请过程的难度实际上比你实际认为的对你和你的职业更好。
我每天都需要解决新问题。如果不是这样,我真的会疯掉。解决问题对我来说是与生俱来的,尤其是当问题是基于数字的时候。我在这个疯狂的数据领域找到了一个家,我希望以自己的方式在这个领域留下印记。我找到了我的专长,所以现在是时候磨练我的手艺了。你看,人们认为压力是不好的。我认为压力是个人成长和做得更好的一种方式。
作为数据科学家,压力永远不会离开我们。只是不在工作描述里。如果求职是轻而易举的事,那么这说明了工作本身的什么呢?如果找工作和得到回音的过程很容易,那么这说明了这个领域的什么呢?随着时间的推移,我希望申请过程越来越难。我想看看申请人到底是什么样的*。*当截止日期越来越多,工作压力越来越大时,你将如何坚持下去?你会在压力下崩溃还是会把它当作继续前进的燃料?
让我告诉你一些事情,如果你不能处理申请工作和被拒绝的压力,你还没有准备好工作本身。你会日复一日地在一个项目上投入数小时,结果却被看到它的人彻底毁掉,迫使你不得不从头再来。听起来熟悉吗?工作过程也是如此。
通过确保你有毅力不惜一切代价在这个领域追求职业生涯,你就确保了自己是比大多数人更好的候选人。有些人实际上认为他们可以在没有经验的情况下在 6 个月内找到这个领域的工作。我不想告诉你,除非你已经认识这个领域的人,他们会给你推荐,否则这是不可能的。
不要把困难误认为不可能。我爸爸曾经告诉我,如果在你之前有人做过这件事,那么你也没有理由去做。这一直困扰着我,让看似困难的事情变得微不足道。不是不可能,只是现在对你来说很难。以这样一种方式工作,它对你来说变得不那么困难,你会有少得多的问题。
我希望我没有给你的生活增加更多的压力,而是成为你继续找工作的动力。事情越困难,回报必然会越好。现在有太多的人走捷径,我相信他们缺乏纪律性和远见,最终会产生严重的后果。事实上,我还没有听说过一个不成功的人有耐心、勤奋和努力工作。请证明我是错的。耐心、勤奋、努力工作,让我知道你在 5 年内不可避免地会变得多么不成功。
到时候再聊!
Python 中基于项目的协同过滤
用 python 实现基于项目的协同过滤的实践。
照片由 CardMapr.nl 在 Unsplash 上拍摄
基于项目的协同过滤是利用用户评分,利用项目间相似性的推荐系统。在本文中,我解释了它的基本概念,并实践了如何使用 Python 制作基于项目的协同过滤。
基本概念
这种方法的基本假设是用户对相似的电影给出相似的评级。考虑下面的电影分级表。
在本例中, **User_1**
对**Movie_1**
的评级为空。让我们使用基于项目的协同过滤来预测这个评级。
- 步骤 1:找到与你想要预测分级的电影最相似(最接近)的电影。
有多种方法可以找到最近的电影。在这里,我使用了https://en.wikipedia.org/wiki/Cosine_similarity余弦相似度。在使用余弦相似度时,替换为 0 的缺失值。看下图。 x 轴代表**User_0**
的等级, y 轴代表**User_1**
的等级。然后,我们可以为空间中的每部电影找到点。例如,**Movie_3**
对应于空间中的点(5,2)。
余弦相似度用 cos(θ) 来衡量两个向量之间的距离。随着θ增大,cos(θ)减小(θ= 0°时 cos(θ) = 1,θ= 90°时 cos(θ) = 0)。因此,θ值越小,这两个向量就越接近(相似性越大)。由于θ1 最小,θ3 最大,**Movie_3**
离**Movie_1**
,,**Movie_2**
最远。
****这里值得注意的是,电影之间的相似度是由所有用户决定的。例如,**Movie_1**
和**Movie_3**
之间的相似度是使用**User_0**
和**User_1**
的评分来计算的。
- 第二步:计算用户对最相似电影的评分加权平均值。
用户对相似的电影给出相似的评级。因此,当我们预测用户对电影的评级时,使用用户对类似电影的评级的平均值是合理的。将最近邻的数量设置为 2。然后我们使用**Movie_3**
和**Movie_0**
来预测**User_1**
对**Movie_0**
的评分。
**User_1**
对**Movie_3**
的评分为2,**User_1**
对**Movie_0**
的评分为 3。如果**Movie_3**
和**Movie_0**
与**Movie_1**
距离相同,我们可以通过**User_1**
估算出**Movie_1**
的等级为 2.5。但是,如果认为**Movie_3**
更靠近**Movie_1**
,则**Movie_3**
的重量应该大于**Movie_0**
的重量。因此,如下图所示,**Movie_1**
的预测评级将更接近于**Movie_3**
的评级。使用余弦相似度作为权重,预测评分为 2.374。
制作电影推荐器
为了更好地理解,这里使用了具有 10 部电影和 10 个用户的数据集。(数字是随机抽取的。)
**df**
- 10 部电影和 10 个用户
- 0 表示缺少值。
- 用户给电影评分的百分比是 50%(只给 50 分)。在真实的电影数据集中,这个百分比变得小于 10%。
如果用户没有对电影进行评级,我假设用户没有观看电影。
计算最近的邻居
**sklearn.neighbors**
库中的**NearestNeighbors()**
可用于使用余弦相似度计算电影之间的距离,并为每部电影找到最近的邻居。
from sklearn.neighbors import NearestNeighborsknn = NearestNeighbors(metric='cosine', algorithm='brute')
knn.fit(df.values)
distances, indices = knn.kneighbors(df.values, **n_neighbors=3**)
最近邻居(**n_neighbors**
)的数量被设置为 3。由于这包括电影本身,通常它会找到除电影本身之外的两个最近的电影。
indices**[Out] array([[0, 7, 5],
[1, 3, 7],
[2, 1, 6],
....
[9, 0, 7]])**
**indices**
显示每部电影的最近邻居的指数。每一行对应于**df**
中的一行。一行中的第一个元素是最相似(最近)的电影。一般是电影本身。第二个元素是第二个最近的,第三个是第三个最近的。比如第一行**[0,7,5]**
,离**movie_0**
最近的电影是自己,第二个最近的电影是**movie_7**
,第三个是**movie_5**
。
distances**[Out] array([[0.00000000e+00, 3.19586183e-01, 4.03404722e-01], [4.44089210e-16, 3.68421053e-01, 3.95436458e-01], [0.00000000e+00, 5.20766162e-01, 5.24329288e-01],
....
[1.11022302e-16, 4.22649731e-01, 4.81455027e-01]])**
**distances**
显示电影之间的距离。数字越小,表示电影越近。该数组中的每个数字对应于索引数组中的数字。
示例:预测用户对电影的评级
预测用户对电影的评价相当于计算用户对相似电影的评价的加权平均值。
实际上,通过**user_7**
预测**movie_0**
的评级。首先,使用**NearestNeighbors()**
找到**movie_0**
的最近邻居。
**# get the index for 'movie_0'**
index_for_movie = df.index.tolist().index('**movie_0**')**# find the indices for the similar movies** sim_movies = indices[index_for_movie].tolist()**# distances between 'movie_0' and the similar movies** movie_distances = distances[index_for_movie].tolist()**# the position of 'movie_0' in the list sim_movies** id_movie = sim_movies.index(index_for_movie)**# remove 'movie_0' from the list sim_movies** sim_movies.remove(index_for_movie)**# remove 'movie_0' from the list movie_distances** movie_distances.pop(id_movie)print('The Nearest Movies to **movie_0**:', sim_movies)
print('The Distance from **movie_0**:', movie_distances)
与**movie_0**
最相似的电影是**movie_7**
和**movie_5**
,与**movie_0**
的距离分别为 0.3196 和 0.4034。
计算预测评级的公式如下:
【r(m,u) = { ∑ ⱼ S(m,j)R(j,u) } / ∑ ⱼ S(m,j)
- R(m,u) :用户对电影 m 的评分
- S(m,j) :电影 m 与电影 j 的相似性
- j ∈ J 其中 J 是与电影 m 相似的电影的集合
这个公式简单地暗示了用户对电影的预测评级是用户对类似电影的评级的加权平均值。当电影 m 和电影 k 越接近时,每个评价的权重越大。该项的分母使所有权重之和等于 1。******
让我们用**user_7**
, R(0,7): 来预测**movie_0**
的评分
R(0,7)=[S(0,5)÷R(5,7)+S(0,7)÷R(7,7)]/[S(0,5)+S(0,7)]
由于**movie_0**
和**movie_5**
以及**movie_0**
和**movie_7**
之间的距离分别为 0.4034 和 0.3196,相似性为
- S(0,5) = (1-0.4034)
- S(0,7) = (1-0.3196)。
因为 R(5,7) = 2、 R(7,7) = 3,所以预测的 R(0,7) 为 2.5328。
建立一个推荐者
下面的代码预测了所有没有看过的电影的收视率。(**n_neighbors = 3**
)
原始数据集**df1**
的副本更新了**user_4**
的所有预测评级。以下代码是使用更新的数据集为选定用户显示推荐电影的函数。
例如,让我们为**user_4**
推荐 5 部电影。
**recommend_movies('user_4', 5)**
输出显示用户已经观看的电影列表和推荐的电影列表。**movie_2**
对**user_4**
的预测评分最高。
这个项目的目标是建立一个推荐器,为选定的用户推荐电影。如果我们在推荐器中输入一个用户名,推荐器应该返回具有最高预测评级的推荐电影列表。结合上面的代码,我们可以为任何选定的用户构建电影推荐器。
下面用n_neighbors = 3
和the number of recommended movies = 4
为user_4
推荐电影。
**movie_recommender('user_4', 3, 4)**
在本文中,我简要解释了基于项目的协同过滤的基本概念,并展示了如何使用这种方法构建推荐引擎。
本练习的附加代码和电影数据集可以在这里找到。
如何迭代 Python 字典中的键和值
讨论如何在 Python 中迭代字典的键和值
劳伦·曼克在 Unsplash 上的照片
介绍
字典是 Python 中最有用的数据结构之一。迭代字典的键和值是我们在处理这类对象时需要执行的最常用的操作之一。
在今天的简短指南中,我们将探讨如何在 Python 3 中迭代字典。具体来说,我们将讨论如何
- 仅迭代键
- 仅迭代值
- 一次性遍历键和值
首先,让我们创建一个示例字典,我们将在整篇文章中引用它来演示一些概念。
my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
遍历键
为了只迭代键,您需要调用[keys()](https://docs.python.org/3/library/stdtypes.html#dict.keys)
方法,该方法返回字典键的新视图。
**for key in my_dict.keys():**
print(key) *# Output
a
b
c
d*
迭代值
为了迭代字典的值,您只需要调用[values()](https://docs.python.org/3/library/stdtypes.html#dict.values)
方法,该方法返回包含字典值的新视图。
**for value in my_dict.values():**
print(value)# Output
*1
2
3
4*
对键和值进行迭代
现在,如果你需要一次遍历键和值,你可以调用[items()](https://docs.python.org/3/library/stdtypes.html#dict.items)
。该方法将以(key, value)
的形式返回一个包含键值对的元组。
**for key, value in my_dict.items():** print(f'Key: {key}, Value: {value}') # Output
*Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3
Key: d, Value: 4*
请注意,上面探讨的三种方法返回的对象返回视图对象。换句话说,这些对象提供了字典中条目的动态视图,这意味着一旦条目被修改,视图对象也会反映这种变化。
Python 2 中的字典迭代
Python 2 中的符号与 Python 3 略有不同。为了迭代键值,你需要调用如下所示的iteritems()
方法:
for key, value in my_dict.iteritems():
print(f'Key: {key}, Value: {value}')# Output
*Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3
Key: d, Value: 4*
最后的想法
在今天的文章中,我们讨论了如何使用keys()
、values()
和items()
方法一次独立或同时迭代键和值。此外,我们讨论了如何使用 Python 2 符号和iteritems()
方法迭代键和值。
成为会员 阅读媒介上的每一个故事。你的会员费直接支持我和你看的其他作家。
你可能也会喜欢
[## 如何将 Python 包上传到 PyPI
towardsdatascience.com](/how-to-upload-your-python-package-to-pypi-de1b363a1b3) https://betterprogramming.pub/11-python-one-liners-for-everyday-programming-f346a0a73f39 </6-tips-to-help-you-stand-out-as-a-python-developer-2294d15672e9>
使用 Scikit-learn 进行迭代插补
使用高级插补策略增强模型结果
介绍
虽然对于许多数据科学家来说,拥有一个良好、干净且预处理需求最小的数据集是理想的场景,但真实世界的数据通常并不理想。某些预处理步骤(如归一化和变换)有助于创建可能的最佳模型,但在技术上是可选的,也就是说,如果忽略了输出质量的差异,可以在没有这些步骤的情况下创建模型。然而,一个不容忽视的常见问题是缺少数据。
用给定的统计方法填充缺失数据的过程被称为插补,有多种形式。在本文中,我将讨论一些最常见的插补方法,并将它们与一种更先进的方法迭代插补进行比较,这种方法可以增强模型结果。
常见插补方法
一些最常见的插补方法包括根据现有数据,用给定变量的平均值或中值填充缺失数据。在这两者之间做出选择很大程度上取决于正在处理的数据。在数据以某种方式倾斜的情况下,中位数可能更合适。相反,正态分布的数据可以使用平均值或中位数,因为两者相对来说是相同的。让我们来看看实现它们的几种方法。
使用熊猫和熊猫
用数字和熊猫来计算价值是小菜一碟。在下面的示例中,列A
和B
各有一个缺失值。然后使用 NumPy 中的nanmean()
函数计算列A
的平均值,并忽略任何缺失值。同样的过程应用于列B
,取而代之的是中值。然后将fillna()
函数应用于每一列,以填充缺失的值。下面显示了该代码的输出,右侧包含每个相应列的估算值。
图片作者。上面代码的输出。
使用简单估算器
Scitkit-learn 的SimpleImputer
( 查看文档)是估算缺失值的另一种方法。虽然看起来比 NumPy 和 Pandas 的例子稍微复杂一些,但是使用SimpleImputer
有几个关键的好处。首先,缺失值可以设置为您喜欢的任何值,并且不必像在 Pandas 中使用fillna()
函数那样等同于np.nan
。此外,简单地通过改变strategy
参数,插补策略可以在以下四个选项之一之间轻松改变:
"mean"
—用平均值替换缺失值"median"
—用中间值替换缺失值"most_frequent"
—用最常见的值替换缺失值"constant"
-用fill_value
参数中指定的任何值替换缺失值。在您希望用字符串“missing”而不是实际值来替换缺失值的情况下,这可能很有用。
图片作者。上面代码的输出。
迭代插补
仅在处理多变量数据时有用,scikit-learn ( 视图文档)中的IterativeImputer
利用其他功能中可用的数据来估计要估算的缺失值。它通过一个…
…迭代循环方式:在每一步,一个特性列被指定为输出
y
,其他特性列被视为输入X
。已知的y
在(X, y)
上安装一个回归器。然后,使用回归变量来预测y
的缺失值。以迭代的方式对每个特征进行此操作,然后对max_iter
插补轮次重复此操作。返回最后一轮插补的结果。[ 来源
如果这看起来仍然有点抽象,希望下面的例子将有助于澄清事情。由于IterativeImputer
仍处于试验阶段,导入enable_iterative_imputer
是使用的一个需求。
图片作者。上面代码的输出。
该虚拟数据的底层模式旨在使列B
成为列A
的平方。虽然并不完美,但IterativeImputer
确实填充了一个有点接近“真实”值 16.0 的值。将结果与使用均值插补策略(12.7)或中值插补策略(9.0)获得的结果进行比较,可以清楚地看出在这种情况下使用迭代插补策略的好处。
使用真实数据的比较
我最近有机会用真实世界的数据集测试了IterativeImputer
,同时创建了一个澳大利亚第二天降雨预测模型。虽然我不会在这里详细介绍整个项目,但它确实是一个很好的例子,说明迭代插补如何比一些更简单的策略更有益。使用来自源数据集的weatherAUS.csv
文件,使用以下三种不同策略估算连续特征:
- 平均插补
- 中位数插补
- 迭代插补
我选择比较Pressure9am
和Pressure3pm
特性,因为它们彼此直接相关,并呈现出线性关系,这对于评估非常有用。下面的代码用三种不同的策略估算缺失的数据,沿着回归线绘制数据,然后显示均方根误差 (RMSE,越低越好)。
图片作者。上面代码的输出。
即使不考虑 RMSE 值,迭代插补策略也应该能突出显示出更好的拟合值。由于均值和中值策略用相同的值填充所有缺失值,因此在数据中心附近会形成一个十字形形状,这不一定符合总体趋势。然而,迭代插补策略能够利用包含在其他特征中的信息来近似该值,从而产生更清晰的图,更准确地符合趋势。
你可能认为 RMSE 从 1.874 提高到 1.871 没什么大不了的——你是对的。虽然它本身并不引人注目,但有几件事要记住:
- 在
Pressure9am
和Pressure3pm
特征中丢失的数据量只有大约 10%。因此,与均值和中值策略相比,RMSE 值只能提高这么多。 - 这种比较仅针对两个要素,而完整的数据集包含更多要素。当在建模过程中使用所有数据时,这些特征中的每一个的小的改进可以导致整体的大的改进。
结论
在处理单变量数据时,使用平均值或中位数等简单的插补策略可能是有效的。处理多元数据时,迭代插补等更先进的插补方法可以产生更好的结果。Scikit-learn 的IterativeImputer
提供了一种快速简单的方法来实现这样的策略。
Github:https://github.com/tjkyner
中:https://tjkyner.medium.com/
LinkedIn:https://www.linkedin.com/in/tjkyner/
Julia 中人工神经网络的迭代剪枝方法
摩根·豪斯尔在 Unsplash 上的照片
思想与理论
基于剪枝的压缩技术综述
近年来,深度学习模型在实时嵌入式应用中变得更加流行。特别是,这些模型已经成为从自然语言处理到计算机视觉等几个领域的基础。计算能力的增加有利于面对实际挑战,这些挑战已经通过采用广泛的神经网络得到解决;随着网络越来越深入,模型大小也增加,引入了对指定输出没有贡献的冗余参数。最近,研究人员专注于如何通过修剪多余的参数来减少存储和计算能力而不损害性能的不同方法。
本文的参考实现语言是 Julia [1],这是一种最近开发的面向科学计算的编程语言。特别是,我们将扩展 Flux 库[2,3],通常用于机器学习。
为什么修剪?
自 80 年代末开始使用的剪枝算法【4,5】包括从网络中删除单个权重或整个神经元,以减少冗余,同时不牺牲准确性。为了在通过示例训练的系统中获得良好的泛化能力,应该使用适合数据的最小系统[6]。经验证据表明,训练一个大型网络,然后压缩它,比从头开始训练一个较小的网络更容易[7]。
(作者图片)
这种方法的问题在于,通过去除太多的边缘,可能会丢失所学的内容。主要的困难在于找到最佳的模型尺寸。因此,我们可以将剪枝视为一个神经网络架构搜索[8]问题,目标是为所考虑的任务找到最佳网络。修剪方法的各种实现主要在四个方面不同:
- 结构:结构化剪枝包括消除网络中的整个神经元,并允许使用更小的矩阵来加速计算。另一方面,非结构化修剪更灵活,因为它允许消除单个连接,但不能有效地加速神经网络的计算。
(图片作者)
- 显著性:可以被视为与每个边缘相关联的重要性,根据所采用的策略来确定是否应该消除它
- 调度:决定每一步要淘汰的网络比例。例如,一次性修剪包括在一个步骤中消除网络的期望百分比。其他可能的策略是在每一步消除网络的恒定部分,或者采用更复杂的调度功能。
- 微调:在修剪阶段之后,准确度通常会下降,因此重新训练网络以稳定它可能是有用的。有不同的可能方法来处理微调。在边缘消除之后,可以使用修剪步骤之前具有的相同权重(没有被消除)来训练,或者使用在某个先前阶段具有的边缘的权重,或者从开始重新初始化剩余的边缘
数量修剪
这是最简单的剪枝算法。在共同训练阶段之后,去除具有较低显著性的连接。链接的显著性仅由其权重的绝对值给出。幅度修剪有两种主要的变体。一旦所需百分比的连接被固定,逐层幅度修剪将从每层移除该百分比的边,而全局幅度修剪将从整个网络移除一个百分比,而不区分层。更复杂的分层剪枝技术引入了灵敏度分析阶段,允许为每层指定不同的稀疏度阈值,以便在不太敏感的层中消除更多的边(即那些权重的消除对网络结果影响较小的边)。首先,总是需要一个训练阶段,以便了解哪些是网络最重要的连接,那些具有最高绝对值的连接。在消除显著性较低的连接后,网络性能将会下降。
(图片作者)
由于这个原因,从最后获得的权重开始重新训练网络而不从头重新初始化参数是必要的。修剪参数的百分比越高,精度下降越多,这就是为什么修剪通常迭代地进行,一次消除一小部分网络。这意味着需要一个时间表,在这个时间表中,我们指定要删除的网络部分,分多少步,每一步要删除多少个连接。
镗孔预处理步骤
**using** Flux: onehotbatch , onecold
**using** MLDatasetstrain_x , train_y = CIFAR10.traindata()
test_x , test_y = CIFAR10.testdata()X = Flux.flatten(train_x)
Y = onehotbatch(train_y , 0:9)test_X = Flux.flatten(test_x)
test_Y = onehotbatch(test_y , 0:9)data = Flux.Data.DataLoader ((X,Y),batchsize = 128, shuffle=true)
test_data = Flux.Data.DataLoader ((test_X ,test_Y), batchsize = 128)
快速实现
修剪通常通过将权重设置为零并在随后的训练中冻结它们来实现。我的实现使用了一种基于元素的操作,将权重矩阵乘以二进制剪枝掩码。
(图片作者)
第一个矩阵代表神经网络层的权重,而第二个矩阵是掩码,它将某个阈值下的所有值设置为零,在本例中为 0.5
在 Flux 中,简单的致密层由两个基本部分定义。首先,一个 struct 包含三个字段:权重、偏置和激活函数。
**struct** Dense{F, M <: AbstractMatrix , B}
weight :: M
bias::B
sigma::F
end
第二个关键部分是表示向前一步计算的函数,如下所示:
**function** (a::Dense)(x:: AbstractVecOrMat)
W, b, sigma = a.weight , a.bias , a.sigma
**return** sigma.(W*x .+ b)
end
我开发的实现扩展了 Flux 提供的实现,如前所述,添加了带有矩阵掩码的 Hadamard 乘积。然后,层 PrunableDense 被定义为一种结构,该结构通过添加用于位矩阵的字段来重用密集层:
**struct** PrunableDense
dense :: Dense
mask:: BitMatrix
end
其次,我们重新定义了前向阶跃函数,以包括掩模矩阵的哈达玛乘积:
**function** (a:: PrunableDense)(x:: AbstractVecOrMat)
W, b,sigma , M = a.dense.W, a.dense.b, a.dense.sigma , a.mask
**return** sigma .((W.*M)*x .+ b)
end
现在你可以用你想要的方式使用这些可修剪的密集层,然后减少你的神经网络的大小!
文献学
[1]杰夫·贝赞森、艾伦·埃德尔曼、斯特凡·卡尔平斯基和维尔拉·B·沙阿。朱莉娅:一种新的数值计算方法。暹罗评论,59(1):65–98,2017。
[2]迈克尔·英尼斯、埃利奥特·萨巴、基诺·菲舍尔、达里亚·甘地、马尔科·康采托鲁迪洛索、尼图·玛利亚·乔伊、泰詹·卡尔马里、阿维克·帕尔和维尔拉·沙阿。带有通量的时尚造型。更正,abs/1811.01457,2018。
[3]迈克·英尼斯。通量:优雅的机器学习与朱莉娅。开源软件杂志,2018。
[4]史蒂文·雅诺夫斯基。《神经网络中的剪枝与剪枝》,物理评论 A,39:6600–6603,1989 年 6 月
[5]戴维斯·布拉洛克、何塞·哈维尔·冈萨雷斯·奥尔蒂斯、乔纳森·弗兰克尔和约翰·古塔格。神经网络剪枝是什么状态?arXiv 预印本:2003.03033,2020。
6 Anselm Blumer、Andrzej Ehrenfeucht、David Haussler 和 Manfred K Warmuth。奥卡姆剃刀。信息处理通讯,24(6):377–380,1987。
7 拉塞尔·里德。剪枝算法-综述。IEEE 神经网络汇刊,4(5):740–747,1993。
[8],孙明杰,周廷辉,,和特雷弗·达雷尔。重新思考网络修剪的价值,2019。
该是我们解散数据科学的时候了
意见
为什么我们必须分散数据科学,以及它看起来会是什么样子
马诺洛·克雷蒂安在 Unsplash 上拍摄的照片
介绍
企业主不太可能会读到这篇文章,并开始改变他们对我们如何定义数据科学的看法。不是因为我怀疑自己的影响力或其他什么,而是因为我意识到我的大多数读者才刚刚开始他们的数据科学之旅,我真的不喜欢“有抱负”这个词,但我想告诉大家的是…
不要试图精通数据科学中的每一件事,选择一个(最多两个)你想专攻的领域,并真正精通它!
概观
老实说…进入数据科学领域非常困难,原因有很多。然而,我最近意识到,大部分困难在于“数据科学家”一词包含如此多不同的技术素质,以至于一个人几乎不可能满足所有这些标准并在每个领域保持最新,这没关系!
我一直在听首席数据科学家兼领英 2019 年顶级声音 Vin Vashishta 讲话,他认为为了更好地定义角色,从业者必须更加专业化。实际上,我喜欢这个想法,因为它要求从业者投入更多的时间来战略性地规划他们想如何将自己推向市场,以及他们认为他们如何能够增加价值。
作为数据科学家,我们做的很多工作都需要我们花时间深入一个问题,这对一月份从事对话式人工智能项目、下个月从事计算机视觉任务的人来说可能很难。因此,决定专业化不仅对公司有利,而且对你的数据科学之旅也有好处,因为你将有更多时间专注于你所关注领域的特定任务,而且你可以深入研究。
“数据科学家是一个类别,而不是一个职称。藏在风衣下的实际上是 8+份不同的工作”——Vin Vashishta
实际上,目标是让你从人群中脱颖而出,这通常是通过强调你个人的特殊技能来实现的。你凭什么,你?我们都有一些区别于其他人的东西,而一个有趣的候选人是一个可以同时强调这一点和他们的数据技能的人。无论是你处理 NLP 任务、计算机视觉任务的能力,还是你在欺诈检测问题上的大师,我们都有一些我们可以做得很好的事情和令人信服的背景故事来支持它。
一家正在招聘机器学习工程师的公司通常会有一个非常具体的问题,比如部署一个模型并通过 REST API 提供服务。由于一些最受欢迎的数据科学课程(以及其他原因),大多数数据科学家都会掌握一些通用的数据科学技能,因此我们很容易成为万金油。老实说,我在这里有罪。
这样做的结果通常是一份无人问津的简历…例如,当我们在 LinkedIn 或其他网站上点击“ easy apply ”时。这很疯狂,因为我真的得到了背后的想法——“我知道他们想要一个 ML 工程师,但也许他们也希望我能建立一个仪表板和一大堆其他东西,对吗?”。嗯……不完全是。
我不是说你不可能得到这份工作,但从招聘经理的角度来看,他们希望对你部署机器学习模型并通过 REST API 提供服务的能力有信心,因为这是他们眼前的问题,所以如果你简单地强调这一技能会更好。
这里有一篇文章,我相信它更深入地探讨了专业化的概念:
https://www.simplilearn.com/why-every-data-scientist-needs-to-specialize-article
分手
会有物理上的分裂吗,就像一个董事会聚在一起,以标准石油的方式物理上拆分数据科学?我高度怀疑。然而,我相信人力资源和招聘人员会对工作规范进行压制,以提出更具体的要求和头衔。这些工作及其角色的简要描述可能如下所示:
数据工程师/架构师
根据 Glassdoor 的说法,数据工程师的任务是将数据转换为易于分析的格式。他们通过开发、维护和测试用于数据生成的基础设施来做到这一点。数据工程师与数据科学家密切合作,主要负责为数据科学家设计解决方案,使他们能够开展工作。[ 来源 : 玻璃门
机器学习工程师/架构师
在一篇题为机器学习工程师 vs 数据科学家的文章中,作者对机器学习工程师/架构师的角色描述如下:
机器学习工程师位于软件工程和数据科学的交叉点。他们利用大数据工具和编程框架来确保从数据管道收集的原始数据被重新定义为数据科学模型,可以根据需要进行扩展。
机器学习工程师将数据输入到数据科学家定义的模型中。他们还负责采用理论数据科学模型,并帮助将它们扩展到能够处理万亿级实时数据的生产级模型。【来源 : 机器学习工程师 vs 数据科学家
NLP 工程师
作为一名 NLP 工程师,您将负责处理和分析日常自然语言与计算机从非结构化自然语言数据中获取可操作见解的能力之间的交集。
CV 工程师
雇佣的计算机视觉工程师描述如下:
作为一名计算机视觉工程师,你能够自动化人类视觉系统所能做的各种功能。您可以在协作环境中同时处理多项任务,高效地完成关键项目。我们的计算机视觉工程师能够自我激励,并表现出领导素质。
机器学习研究员
机器学习研究人员比机器学习工程师拥有更少的软件工程技能,尽管他们仍然关注机器学习中特定利基的进步。两者之间的另一个显著区别是,ML 研究人员通常接受过博士水平的教育,因此这意味着他们有非常强的学术和研究背景——然而,ML 工程师也可以有博士学位,但它不会像研究员那样排序。
数据分析师
TargetJobs 将数据分析师的角色描述为:
使用数据分析工具审查信息的人。他们从原始数据中提取的有意义的结果,通过识别各种事实和趋势,帮助他们的雇主或客户做出重要决策。[ 来源 : 目标作业
在这个时代,数据分析师通常比我们所说的数据科学家使用更少的编程技能。通常还有一种误解,认为数据科学家比数据分析师更好——两者都不比对方更好,他们做不同的事情。
商业分析师
业务分析包括研究和发现业务需求,以及对业务中的问题提出解决方案。从本质上来说,业务分析师将在业务想法和业务能力之间架起一座桥梁。
最后的想法
在我收到多面手群体的谩骂之前,我想澄清一点,我并不是说成为多面手是无价的。老实说,您可以在数据科学生命周期中执行多种功能,这很好。同样,一个全栈开发人员可以执行前端和后端任务,我相信这很酷,但是,如果这阻碍了你深入研究特定类型问题的能力,那么最好专注于感兴趣的领域。
感谢您的阅读!在 LinkedIn 和 Twitter 上与我联系,了解我关于数据科学、人工智能和自由职业的最新帖子。
相关文章
这只是语义|数据如何自己说话(不)
一致的见解需要一致的数据
过去三个月你有多少活跃客户?在这篇文章的结尾,如果你回答“看情况”,我已经达到了我的目标。没有上下文,这个问题应该是不可能回答的。
戴维·特拉维斯在 Unsplash 上拍摄的照片
是的,我是那种“视情况而定”的人。当你问他们一个问题时,他们会用另一个问题来回答。正如喜剧小品《专家》(看着很痛苦,因为这确实很真实)中所描述的那样,专家知道这个问题是不合理的,并尽力解释为什么他需要更多的上下文,以便“用透明墨水画出 7 条垂直的红线”。
如果你想回答我关于活动客户端数量的第一个问题,你可以很快给出答案。然而,这将是一个错误的或不完整的答案,因为你没有问我对“客户”、“活跃”的定义是什么,或者哪些日期对所述三个月的衡量是重要的。
在这种特殊情况下,如果某人的每月订购借记订单在您所想的 3 个月内有效(他选择了 30 日)会怎样?但因为是公共假日,它实际上只在 1 号爆炸,不在你想查看的三个月期限内。如果第一天他的账户里没有足够的钱,并且被拒绝了怎么办?他活跃吗?是三个月以内吗?他现在也取消了订阅,但只在下个月生效…
为了证明这一点,我把这个例子弄得过于复杂了……上下文很重要。仅仅通过查看原始的不一致的数据,是不可能对算法有意义的。关于这些学究式的问题中哪一个是不必要的,需要一些解释。
业务和技术有效性
当我 12 年前开始我的职业生涯时,我的老板教给我的第一课是技术生效日期和业务生效日期之间的区别。从那时起,我一直认为这种区别是常识,直到在我的日常对话中出现了某种趋势。起初我以为只是我,然后随着越来越多的会议突然出现,有效日期完全被混淆,我开始接受这样的想法,也许不是我,也许是你。
我不得不多次重复这个对话……多年来在不同的背景下,有时是对同一个人。就在那时,我意识到常识并不那么普遍(借用伏尔泰的一句话)
我觉得说出来很傻,但我会说的。
技术生效日期不同于业务生效日期。数据可以是技术上有效的,但不是业务上有效的。数据可以在业务有效期内,但在技术上无效。不同的来源和不同的系统处理技术有效性和业务有效性的方式完全不同。
在我职业生涯的开始,我在 SAP 中开发了一个模块,这个模块处理得非常好,这是我还没有在其他地方看到过的。这是一个巨大的领域开销,但毫无疑问,数据是什么。只有当我开始看到其他系统中缺少这一点时,我才明白为什么它经常如此令人困惑。简而言之,每个对象有七个元数据字段来描述这一点:技术来源、技术目的、业务来源、业务目的、版本、无效对象标志和无效版本标志。有了这七个字段,你就知道发生了什么。
我就用一个例子来说明。销售代理合同上有一条佣金规则,规定对产品的销售收取 5%的佣金。该规则是在 7 月 6 日(技术有效期)技术上创建的(用户在前端键入)。然而,该规则本应在 7 月 1 日至 31 日生效(商业有效期)。后来它被删除了(技术上在 15 日被删除),并建立了一个新的规则,规定 10%的佣金具有相同的有效性。上面列出的七个元数据字段能够很容易地描述这种情况。
作者图表
我不打算讨论这七个字段是否在每种情况下都值得,但是有这么多的数据信息消除了任何可能的混乱。它让我明白了真正理解每个数据点背后的背景需要什么。
如果你能接受源代码系统会以不同的方式处理这一事实,这对你(从精神健康的角度)会有好处。即使在一个源系统内部,它也可以被不同地处理。
我还看到源系统在开始时以“保持简单愚蠢”的方式开始,然后系统地向表中添加更多的技术日期。你逐渐看到这个易读的 KISS 模型变形为一个不连贯的 WTF 模型。一些源系统有一个仅包含当前记录的活动表,并将它们的历史表保存在单独的表中。其他人有混合。
所以不要试图修复上游系统,你会失败的。我们应该接受不同的来源会以不同的方式呈现这一点,照原样阅读数据,或者试图照原样连接数据,无论如何都不是一件简单的任务。
小麦
所报告的数据的粒度指的是所存储的细节的级别,以及在数据集中暴露了哪些相关联的对象。以保险为例:支付的保费值是存储在客户和利益层,还是仅汇总到客户和月度视图中?(也就是说,您是查看所有产品的累计保费,还是单独查看您的人寿保险和您的猫的宠物保险)
在谈论谷物时,一些常见的混淆是围绕产品、子产品以及它们之间的分组。产品的标签和等级结构,特别是在保险和投资行业,会使这变得复杂。然而,随着公司开始收集或收购其他公司,这些公司的产品具有不同的标签和结构,数据集必须合并或存放在一起,情况变得更加复杂。
语义学
你必须预先定义某些术语的含义。这听起来是显而易见的常识,对吗?还记得我之前说的常识吗?这一点往往没有做到(我自己也不觉得羞耻)。我想是因为人们不想为了确立这个意义而问太多的问题,让自己觉得或者显得很愚蠢。
一段时间前,我是一个团队的成员,负责一个俄语项目,我没有提前询问地域、地区、区域和分支之间的不同含义。(也许是因为它的所有俄语版本听起来都类似于以英语为母语的人。(Прошу прощения, мои русские коллеги!).很长一段时间,我都认为它们是一回事,只是同义词而已。事实上,它不是。事实证明,在许多业务流程中,理解这种差异非常重要。
所以,简单的规则…不要觉得自己很蠢。经常并尽早询问某些商业术语的含义,并有一个核心术语表。人们会克服最初认为你的问题愚蠢的想法(可能在 10 秒钟内),或者他们会觉得不那么愚蠢,因为他们也不知道。
真的,是双赢。我向你保证,房间里还有另一个“愚蠢”的人,非常感激你问了他没有勇气提出的问题。(当然,不要傻傻地在俄罗斯问这个问题,因为这可能是你问的最后一个问题)
下面是我看到的其他几组术语的列表,它们之间的区别经常不清楚:
- 政策、计划、协议、利益、产品
- 当事人、客户、顾客、销售线索、潜在客户
- 中介、经纪人、顾问、销售代理
- 证券、工具、投资工具、投资组合
这些都是你 认为 的例子,你知道它的意思,但我保证另一个组织或业务单位在完全不同的上下文中使用相同的术语。甚至你自己团队里的人也会对它的含义有不同的看法。
同样,和有效期一样,不同的来源会有不同的标签。不同的源也会以不同的方式处理层次结构或分组。因此,确定需要建模的业务实体并确保目标消费者同意它们的意思是很关键的。
这就是我大力支持能够在敏捷和快速失败的环境中工作的原因。问题是,即使我说你应该得到企业的同意,他们也不会知道,直到你向他们展示错误的东西。
因此,或许我可以稍微改变一下我的建议:让他们明白你的想法,让他们告诉你这是多么错误(他们会的)。
我一开始说背景很重要。原始数据需要在对消费者或消费算法有意义的上下文中呈现。算法获得的训练数据将假设关联是正确的。有人仍然需要决定如何连接来自不同来源的原始数据,以便它们以相同的语义意义注册,具有相同的粒度并与相同的时间有效性相关联。
对于受过训练的人来说,这听起来很像是我在提倡历史上被称为数据仓库的东西。在数据湖时代,它最近经历了许多标签,“策划”或“消费者”区,以及数据湖屋的出现。我现在不打算详细说明这一点,因为我正试图接触受过训练和未经训练的人,要全面地解决这个问题需要更多的背景知识。
组织正在收集越来越多的数据,要么通过收购其他公司(因此无法控制上游来源如何构建数据),要么探索不同的方法从客户那里收集数据。这不可避免地意味着,BI 环境经常会得到一张医院通行证,并被指示去理解这种疯狂——去“基于所有这些丰富的信息创造洞察力”。
一些应用可能不像其他应用那样依赖于时间,或者说,不正确的时间完整性的后果并不严重。然而,如果你在精算应用中弄错了粒度和关联,你可能会产生一个漂亮的预测模型,预测下一个索赔将来自哪里。然而,它将成为算法的装饰性植物:漂亮,但没什么用。
我们应该小心,不要迷失在我们试图创造的所有这些见解的宣传中,并记住只有一致的数据才能提供一致的见解。
那么,让我们再试一次:在过去的三个月里,你有多少活跃的客户?
现在是自然语言处理的黄金时代,为什么聊天机器人不能解决更多的问题?
行业笔记
自然语言处理(NLP)正在彻底改变我们的生活方式以及我们与机器和人之间的交互方式。但是聊天机器人仍然存在不足。原因如下。
图片来自 Pixabay
人工智能和机器学习(ML)领域的进步,特别是自然语言处理(NLP),正在彻底改变我们与机器和彼此互动的方式。亚马逊的 Alexa,苹果的 Siri,虚拟助手和聊天机器人改变了我们请求和接收信息的方式。NLP 管道获取非结构化文本数据,并将其处理为结构化格式,以提取信息、分类并获得洞察力。它意味着计算机可以将人类语言转换成一种可以为 AI 系统精简和处理的形式。最终,它们让人类和机器之间的交流变得更加容易。
工作原理
计算机擅长各种自然语言任务,如文本分类、语音到文本、语法纠正和大规模分析。ML 算法已经被用来帮助在特定问题上取得重大进展,例如面向任务的聊天机器人的翻译、文本摘要、问答系统和意图检测和槽填充。
例如,你的文字处理器中内置的语法插件,以及你在开车时用来发送文本的语音笔记应用程序,都要归功于机器学习和自然语言处理。
然而,尽管这些机器人看起来很聪明,但人类现在更聪明。归根结底,人类的语言是微妙的,而且常常是模棱两可的。这对 ML 系统提出了严峻的挑战。在大规模数据集上进行训练——例如:维基百科的每一篇文章——并创建大型语言模型不会导致对语言的理解。
事实上,这种方法可以延续人类的错误和误解。
尽管使用广泛,但仍然不清楚依赖语言模型的应用程序,如生殖聊天机器人,是否可以在没有人类监督的情况下安全有效地释放到野外。还记得 2014 年的电影《T2》前玛奇纳吗?它可能不是那么极端,但这些系统的后果和考虑应该认真对待。
自然语言处理的最新进展导致了创新的爆发
就在过去的十年里,技术发生了巨大的变化,并影响着客户支持生态系统。随之而来的是一个有趣的机会,可以在客户体验(CX)过程中增强和帮助人们——使用最新模型中的见解来帮助指导客户对话。
自然语言处理突破和语言模型爆炸的主要驱动力包括:
- 新技术和算法的开发(单词嵌入和转换器)。
- 对高端硬件(GPU 和TPU)的改进和更多访问。
- 开源工具和库——如 SpaCy 、humping Face和Rasa——已经使自然语言处理民主化。
变形金刚,或者说基于注意力的模型,已经在自然语言基准上产生了更高性能的模型,并迅速淹没了这个领域。利用语言模型的文本分类器、摘要器和信息提取器已经超越了先前的最先进的结果。高端硬件的更高可用性也允许更快的训练和迭代。开源库及其支持生态系统的发展使从业者能够接触到前沿技术,并允许他们快速创建基于该技术的系统。
这些进步导致了语言模型的雪崩,这些语言模型有能力预测序列中的单词。想想谷歌的自动填充。可以预测序列中下一个单词的模型可以由机器学习实践者进行微调,以执行一系列其他任务。
OpenAI 的 GPT-3——是一种可以自动编写文本的语言模型——在过去的一年里受到了大量的炒作。北京人工智能研究院的无刀 2.0 (一种多模态人工智能系统)和谷歌的开关变压器都被认为是更强大的模型,包括超过 1.6 万亿个参数,使 GPT-3 微不足道的 1750 亿个参数相形见绌。新的、更大的语言模型以惊人的速度发布。说到人工智能系统,市场上并不缺乏。
那么为什么聊天机器人没有更好呢?
虽然这些语言模型和利用它们的系统变得更加复杂和强大,但问题仍然存在:为什么这些 技术仍然如此令人沮丧并且经常出错 ?
除了令人沮丧的与 Alexa 的交互,一些人工智能系统的错误可能会产生严重的后果。如图 1 所示,在大规模数据集上训练的大型语言模型可能会延续人类的错误和误解:
图 1: TruthfulQA 来自 GPT-3–175 b 的带有默认提示的问题和答案。例子说明了 GPT-3 的错误答案,模仿人类的谎言和误解。更多信息,请查看完整的研究: TruthfulQA:测量模型如何模仿人类的谎言
答案比你想象的简单:自然语言处理不是自然语言理解。无论计算的复杂性、能源和时间如何致力于创建更大的语言模型,这种方法都不会导致获得意义、把握上下文或理解的能力。要深入了解这一点的更多技术解释,请参考机器学习不会解决自然语言理解。这是对 NLP 缺点的一个大开眼界的观察。
这对公司、客户服务和聊天机器人意味着什么?
那么这对公司,尤其是那些严重依赖聊天机器人的公司有什么影响呢?很复杂。
自然语言处理的进步导致人们高度期待聊天机器人能够帮助转移和处理过多的客户问题。公司加快了其数字业务的发展,将聊天机器人纳入其客户支持堆栈。
对一些人来说,是的,聊天机器人可以成为他们 CX 解决方案的一个可行部分。然而,对于大多数人来说,聊天机器人并不是客户服务解决方案的一站式商店。此外,它们甚至会制造自己的盲点和新问题。虽然聊天机器人现在无处不在,但根据技术公司 Tidio 的研究,大约一半的用户仍然喜欢与真人交流,而不是聊天机器人。
在一个日益数字化、自动化和虚拟化的世界中,当客户遇到问题时,他们只是希望由真人来迅速、恰当地解决问题。聊天机器人供应商可以希望只解决大约 50%的顾客询问。虽然聊天机器人有可能减少简单的问题,但仍然有一部分对话需要人工代理的帮助。
作者图片
无法使用聊天机器人解决问题的沮丧客户可能会觉得公司不想处理他们的问题。他们可能会因为自己的经历而感到不满足,也不会被视为客户。对于那些真正致力于自助服务门户并浏览常见问题的人来说,当他们联系到人时,客户通常会更加沮丧。更不用说收集到的信息之间的差距了——例如,一个聊天机器人收集客户信息,然后一个 CX 代表请求相同的信息。在这些时候,代理对这些潜在的有争议的谈话准备得越充分(他们掌握的信息越多),对客户和代理都越有利。
尽管一些公司押注于完全数字化和自动化的解决方案,但聊天机器人还没有出现在开放域聊天中。如果不检查生成模型,则会导致有害问题。
坦率地说,聊天机器人无法处理人类查询的多样性和细微差别。在最好的情况下,聊天机器人有能力将未解决的、通常是最复杂的问题交给人工代理。但这可能会引发问题,给 CX 特工带来一连串需要处理的问题,增加他们的工作负担。
那么,我们是否为人类配备了处理客户问题的最佳工具和支持?
好消息是 NLP 的进步不必完全自动化和孤立使用。在洛里斯,我们相信来自我们最新模型的洞察力可以用来帮助引导对话和增强人类交流。理解人类和机器如何合作创造最佳体验将会带来有意义的进步。从我们的模型中获得的见解可以用来帮助指导对话,并帮助而不是取代人类交流。
我们的软件利用这些新技术,用于更好地装备代理,以处理最困难的问题——机器人无法单独解决的问题。我们努力通过向用户学习来不断改进我们的系统,以开发更好的技术。
通过实时预测客户满意度和意向,我们使代理能够有效、恰当地处理客户问题。我们的软件可以实时指导代理人做出回应,并简化死记硬背的任务,因此他们有更多的空间来解决最困难的问题,并专注于为客户提供价值。在客户支持职位的人员流动率达到历史最高水平的时候,这一点尤其令人心酸。
Paul R. Daugherty 在他的书《人类+机器:人工智能时代的重新想象》中解释道,
“简单的事实是,当人类和机器作为盟友一起工作时,公司可以实现业绩的最大提升……以便利用彼此的互补优势。”
图片来自 Pixabay
虽然语言建模、机器学习和人工智能已经取得了很大的进步,但在处理人类问题的复杂性方面,这些技术仍处于起步阶段。正因为如此,聊天机器人不能放任自流,仍然需要人类的支持。技术驱动的人类可以也应该帮助驱动和引导对话系统,帮助他们随着时间的推移而学习和改进。意识到并实现人类和技术之间平衡的公司将主导客户支持,推动未来更好的对话和体验。
有兴趣了解更多信息吗?
- 联系 LinkedIn 上的我
https://www.linkedin.com/in/sethplevine/
- 我们在招人!查看我们的开放数据科技角色
资源、参考资料和进一步阅读
- 博玛萨尼,r .等人,论基金会模式的机遇与风险。 arXiv 预印本 2021。
- 布伊格,m .,认知虚拟代理人如何革新客户支持行业。2021 年 3 月 4 日。福布斯。
- Daugherty,p .,人类+机器:重新想象人工智能时代的工作。2018 年 3 月 20 日。哈佛商业评论出版社。
- Fedus,w .,开关变压器:通过简单有效的稀疏性扩展到万亿参数模型。2021 年 1 月 11 日。arXiv 预印本。
- 人类与数字客户服务:如何找到正确的平衡?。2021 年 7 月 12 日。Loris.ai 博客。
- 为什么现在是加速数字化的时候了。2020 年 9 月 11 日。高德纳。
- 拥抱脸。https://huggingface.co/
- 为什么没人愿意在客户服务部工作。2021 年 11 月 10 日。LinkedIn Pulse。
- 林等, TruthfulQA:测量模型如何模仿人类的错误。2021 年 9 月 8 日。arXiv 预印本。
- 马克西姆。机器学习的变形金刚和序列对序列学习介绍。2019 年 1 月 4 日。中等。
- 拉莎。https://rasa.com/
- 罗梅洛,a ., GPT-3 吓到你了?遇见武道 2.0:1.75 万亿参数的怪物。2021 年 6 月 5 日。迈向数据科学,中等。
- 跟踪自然语言处理的进展。http://nlpprogress.com/。
- 萨缪尔·s .艾的伊斯兰恐惧症问题。2021 年 9 月 18 日。Vox。
- 2021 年你需要知道的 11 个聊天机器人统计数据和趋势。2021 年 12 月 6 日。蒂迪奥。
- 斯帕西。https://spacy.io/
- Sullivan d .,谷歌自动完成预测是如何产生的。2020 年 10 月 8 日。谷歌博客。
- Tavva,r .,自然语言处理管道,解释。 KDNuggets。
- 你所需要的只是关注。第 31 届神经信息处理系统会议(NIPS 2017),美国加州长滩。
- Walid S .,机器学习不会解决自然语言理解。2021 年 8 月 7 日。渐变。
- Wiggers,k .,大型语言模型更可能出现错误。创业节拍。2021 年 9 月 20 日。
- OpenAI 通过其 API 使 GPT-3 普遍可用。2021 年 11 月 18 日。
现代数据文化栈的时代到了
行业笔记
建立一个理想的数据团队不仅仅是使用正确的数据堆栈。
几天前,我在 dbt Coalesce 做了一个关于我建立数据梦之队的经历的演讲,在那里我引入了一个术语,我称之为**“现代数据文化栈”**。这是我多年来一直在思考的话题,但即便如此,我还是对社区的反应感到惊讶。
来自我演讲期间的 dbt Slack 讨论。(图片由 Atlan 提供;编辑删除全名和照片。)
在过去的两年里,关于现代数据堆栈——改变了我们工作方式的工具——有太多的噪音。就像应该有的那样。坦率地说,在现代数据堆栈出现之前,我们处理数据的方式已经支离破碎。数据世界的第一个“增量”自然需要来自让数据团队变得更有效的工具。
在过去的四年中,现代数据栈取得了巨大的进步,由于采用了像雪花和 dbt 这样的工具,它已经成为主流。由于新工具的出现,现代数据堆栈中早在去年就存在的缺口(在元数据管理、数据治理和可观察性等领域)正在迅速得到填补。随着这一领域如此多的创新,我确信在未来几年内,所有数据团队将最终拥有一个接近“完美”的数据堆栈。
这让我相信,随着我们进入 2022 年,对话需要从对更好工具的需求转移到下一个“delta ”,最终帮助我们创建梦想数据团队——现代数据文化堆栈。这些是最佳实践、价值观和文化习俗,将帮助我们这些不同的数据人(或 dbt 创造的“紫色人”)走到一起,有效地合作。
构建理想数据团队的挑战,或者为什么每个数据团队都需要文化堆栈
喜欢这个!(来自我演讲时 dbt 的 Slack 社区。图片由 Atlan 提供;编辑以删除全名。)
多年来,我一直在为建设优秀数据团队的承诺和挑战而奋斗。数据驱动的团队有潜力在未来几年推动最伟大的创新,如消除 COVID,使自动驾驶汽车成为现实,或将人送上火星。但是我们都知道作为一个数据团队一起工作的日常困难…
- 当一个重要的仪表板坏了,一大早就疯狂地给工程师打电话
- “看在上帝的份上,给我数据吧”的请求在几周的等待后
- 老板发来的令人揪心的“这个数据看起来不对劲…”电子邮件
- “难道‘column _ xxy 81’的意思不明显吗?”或者“为什么会有‘file _ 2 _ final _ final . CSV’和‘file _ 3 _ final . CSV’?!"关于时差的问题
之所以如此困难,是因为…嗯,数据团队是有史以来最多样化的团队之一。他们由分析师、工程师、分析工程师、科学家、业务用户、产品经理等等组成——所有人都有自己的工具偏好、技能和限制。结果是协作开销和数据混乱。
我们数据团队的成员及其个人工具偏好。(图片来自 Atlan。)
亚特兰蒂斯诞生于这些挑战之中。2016 年,我们启动了“流水线项目”,开始测试新的方法,让我们的团队更加敏捷,减少开销,提高生产力,建立弹性。两年后,我们的敏捷度提高了六倍。我将这 6 倍的敏捷性归因于两个关键驱动因素——我们的技术栈(或现代数据栈),以及我们的文化栈。
建立理想的数据团队不仅仅是使用正确的数据堆栈。这是关于建立一个强大的文化堆栈。
我将详细介绍我们是如何创建这种文化体系的,以及我们在反复试验后发现的最佳实践。这并不意味着您应该采用这些确切的做法!相反,它们是帮助你自己的团队思考什么适合你的一个起点。
1.为你的文化堆栈打下基础:团队价值观和章程
我们首先召集我们的整个数据团队进行了一次模拟谷歌设计冲刺的练习。
我们都充满了挫败感,但是几个小时的抱怨并不能帮助我们前进(尽管感觉很棒!).因此,我们使用 HMWs 或“我们如何能够”问题,将我们的痛点重新定义为机会。
这些成为了我们数据团队的梦想清单——所有我们希望在未来做得更好的事情。
我们如何提问的例子。 ( 图片由 Atlan 提供。)
然后,我们将这些目标转化为团队章程,或我们希望我们的数据团队遵循的关键价值观。
我们多年前的团队章程。(图片由 Atlan 提供。)
这个章程不一定要完美。(显然,我们的不是!)我们没有花费大量的时间来精心设计美丽的语言,而是确保我们达成一致并继续前进。
来自 dbt 的 Slack 社区。(图片由 Atlan 提供;编辑删除全名和照片。)
2.用强化你价值观的仪式将价值观转化为行动
很多人认为文化“就这么发生了”。这是一种神秘的生物,这就是它的本质…
我坚决不同意。文化不是凭空产生的。通过将你的价值观转化为更具体的东西,你可以努力创造你渴望的文化。我们通过“仪式”做到了这一点。
例如,我们最终将我们团队的章程固化为 4 个关键价值观:敏捷、信任、协作和创新。然后,我们通过将每个价值映射到特定的仪式,努力将它们转化为真实的东西。
将我们的文化价值观映射到新的团队仪式中。(图片由 Atlan 提供。)
人们对可能有帮助的仪式有不同的想法,所以我们尝试了许多新的传统和流程。有些效果很好,有些则很糟糕。但是在这个过程中,我们学到了更多关于如何帮助我们的团队一起工作的知识。
总之,这些习惯成为了文化堆栈,为我们的数据堆栈和人员堆栈提供动力,并帮助我们变得更加快乐和敏捷。
来自 dbt 的 Slack 社区。(图片由 Atlan 提供;编辑删除全名和照片。)
3.推出新的仪式,自下而上而不是自上而下
我非常相信以自下而上而不是自上而下的方式来促进文化仪式的建立。由于这个原因,我认为构建一个新的仪式观念的最好方法是一个“实验”。如果实验成功了,那么它就会成为一种仪式,成为你的团队工作的一种方式。如果不行,你就试试别的。
以下是创造这些新仪式的一些最佳实践:
- 从就共同的原则和问题达成一致开始:确保你理解并同意贯穿你的仪式的具体想法。例如,我们的一个习惯是每季度进行一次开始、停止、继续练习,以揭示我们作为一个团队想要解决的最大问题。
- **让团队达成共识:**在我们第一次开始尝试敏捷和 Scrum 之前,我们整个团队都阅读了《T2 Scrum》一书来理解这个过程背后的基础。这是关键。像 Scrum 这样的新流程看起来像是一个巨大的开销——如果自上而下地执行,它很可能会变成另一个苦差事。
- **衡量您的进步:**我们毕竟是数据人!对我们来说,每周的速度测量和完成百分比目标有助于激励团队,让我们不断前进。一条简单的每周 Slack 消息向我们展示了我们是如何前进和改进的,这让世界变得不同。
- 建立一种有益提问的文化:没有人会有正确的答案,所以重要的是放下自我,创造开放、友好的交流。例如,在我们的日常站立活动中,我们会问这样的问题:“你为什么没有实现本周的目标?”或者“是什么阻碍了你完成这项任务?”。创造一种彻底坦诚和信任的文化有助于我们不断学习如何在未来做得更好。
我们的每周进度信息。(图片由 Atlan 提供。)
😍聚焦我们最喜爱的仪式,帮助我们实践我们的价值观
支持创新的数据智囊团
我们担心关注业绩会降低我们的创新能力,所以我们成立了智囊团。(这是我们无耻地借鉴了皮克斯的想法,并为我们的数据团队做了修改。阅读这个伟大的观点,了解他们是如何做到的。)
大多数情况下,只有一两个人从事一个数据项目,但是整个团队都有集体的知识,并且从过去的项目中学到了有用的东西。
在我们的智囊团中,我们会很快将这些知识用于早期项目。我们召集团队 30 分钟,向每个人简要介绍项目,然后通过结构化的头脑风暴过程来帮助每个人创造和贡献他们的创新想法。
一些松散的消息宣布我们的智囊团会议。(图片由 Atlan 提供。)
数据抄袭方支持信任和协作
由于数据团队如此多样化,人们很难理解彼此的挫折。
例如,销售主管可能一开始是销售代表,但大多数数据经理都不是数据工程师,大多数数据工程师都不是分析师。因此,当仪表板损坏时,分析师很容易质疑,“工程师是否完成了他的工作?!"或者让数据团队互相攻击。
这些抄袭派对有助于将这些不满公开化。我们在一个周五的晚上抽出一两个小时,坐在一起吃晚饭,开始抱怨那个星期出了什么问题。这些非但没有带来麻烦,反而帮助我们增强了对彼此工作的同理心和理解。
我们的一个数据剽窃团体的照片。(图片由 Atlan 提供。)
这只是两种仪式的一个例子,但是我们投资了大量其他的仪式,比如每日站立、实施敏捷、鼓励运输文化的每周演示,以及文档时间。
我不想在这里写一本书,所以我将在我的周刊时事通讯中深入探究我们的文化仪式。
对数据领导者的一些最终想法
随着 2022 年的到来,我建议大力投资现代数据文化体系,就像投资现代数据体系一样。就像你的数据栈一样,建立一个更好的文化并不容易或迅速。这需要时间、信任和实验。会有很多失败,但如果你不断评估和沟通,你最终会拥有一个梦想的数据团队。
如果你真的想建立一种数据文化,我也建议你考虑建立一个“数据支持”团队。这可以模仿一个销售支持团队,该团队负责推动销售的文化仪式、支持和项目管理。这些角色非常新,所以你可能想在你的团队中寻找对文化和团队建设有热情的人。我认为非常适合的人物角色类型是具有构建社区或项目管理天赋的分析师,或者是“参谋长”类型的人。
当你步入 2022 年时,问问你自己——你的团队中是否有人的全职工作是考虑你的数据文化堆栈?
觉得这个内容有帮助?在我的时事通讯《元数据周刊》上,我每周都写关于活动元数据、数据操作、数据文化和我们的学习建设的文章。 在此订阅。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)