TowardsDataScience-博客中文翻译-2016-2018-十八-
TowardsDataScience 博客中文翻译 2016~2018(十八)
原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
R 中分类数据的层次聚类
原文:https://towardsdatascience.com/hierarchical-clustering-on-categorical-data-in-r-a27e578f2995?source=collection_archive---------0-----------------------
这是我第一次尝试在真实数据上执行客户聚类,这是一次宝贵的经历。虽然网上关于使用数值变量进行聚类的文章和博客文章很多,但我花了一些时间来寻找分类数据的解决方案,如果你想到这一点,这确实不那么简单。分类数据聚类的方法仍在开发中——我将在另一篇文章中尝试这两种方法。
另一方面,我也遇到过这样的观点,对分类数据进行聚类可能不会产生合理的结果——这在一定程度上是正确的(在 CrossValidated 上有一个惊人的讨论)。在某一点上,我想“我在做什么,为什么不把它全部分成几组呢?”但是群组分析并不总是明智的,特别是在您获得更多级别的分类变量的情况下,您可以轻松浏览 5-7 个群组,这可能很容易,但是如果您有 22 个变量,每个变量有 5 个级别(比如,这是一个离散分数为 1,2,3,4,5 的客户调查),并且您需要了解您有哪些独特的客户群,您将有 22×5 个群组。没人想这么做。聚类似乎是有用的。所以这篇文章是关于分享我希望在开始研究集群时遇到的事情。
聚类过程本身包含 3 个不同的步骤:
- 计算相异度矩阵——可以说是聚类中最重要的决定,你所有的后续步骤都将基于你所做的相异度矩阵。
- 选择聚类方法
- 评估集群
这篇文章是初级水*的,涵盖了基础知识和 r 中的实现。
D issimilarity Matrix
可以说,这是你聚类的主干。相异矩阵是一种数学表达式,表示数据集中的点彼此之间的差异或距离,因此您可以稍后将最接*的点分组在一起或分离最远的点,这是聚类的核心思想。
这是数据类型差异非常重要的步骤,因为相异矩阵是基于各个数据点之间的距离。虽然很容易想象数字数据点之间的距离(例如,还记得欧几里德距离?),分类数据(R 中的因子)似乎不那么明显。
为了计算这种情况下的相异度矩阵,你需要一个叫做高尔距离的东西。我不会进入它的数学,但我在这里提供了一个链接和链接。为此,我更喜欢使用**cluster** package
中的daisy()
和metric = c("gower")
。
#----- Dummy Data -----#
# the data will be sterile clean in order to not get distracted with other issues that might arise, but I will also write about some difficulties I had, outside the codelibrary(dplyr)# ensuring reproducibility for sampling
set.seed(40)# generating random variable set
# specifying ordered factors, strings will be converted to factors when using data.frame()# customer ids come first, we will generate 200 customer ids from 1 to 200
id.s <- c(1:200) %>%
factor()
budget.s <- sample(c("small", "med", "large"), 200, replace = T) %>%
factor(levels=c("small", "med", "large"),
ordered = TRUE)origins.s <- sample(c("x", "y", "z"), 200, replace = T,
prob = c(0.7, 0.15, 0.15))area.s <- sample(c("area1", "area2", "area3", "area4"), 200,
replace = T,
prob = c(0.3, 0.1, 0.5, 0.2))source.s <- sample(c("facebook", "email", "link", "app"), 200,
replace = T,
prob = c(0.1,0.2, 0.3, 0.4))## day of week - probabilities are mocking the demand curve
dow.s <- sample(c("mon", "tue", "wed", "thu", "fri", "sat", "sun"), 200, replace = T,
prob = c(0.1, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2)) %>%
factor(levels=c("mon", "tue", "wed", "thu", "fri", "sat", "sun"),
ordered = TRUE)# dish
dish.s <- sample(c("delicious", "the one you don't like", "pizza"), 200, replace = T)
# by default, data.frame() will convert all the strings to factors
synthetic.customers <- data.frame(id.s, budget.s, origins.s, area.s, source.s, dow.s, dish.s)#----- Dissimilarity Matrix -----#library(cluster)
# to perform different types of hierarchical clustering
# package functions used: daisy(), diana(), clusplot()gower.dist <- daisy(synthetic.customers[ ,2:7], metric = c("gower"))# class(gower.dist)
## dissimilarity , dist
用相异矩阵完成。这对于 200 次观察来说是非常快的,但是如果你有一个大的数据集,计算起来可能会非常昂贵。
实际上,您很可能必须首先清理数据集,执行从字符串到因子的必要转换,并注意丢失的值。在我自己的例子中,数据集包含丢失值的行,每次都很好地聚集在一起,使我认为我找到了宝藏,直到我看了这些值(哼!).
C 聚类算法
你可能听说过有 k-means 和分层聚类。在本文中,我主要关注后者,因为它是一种更具探索性的类型,并且可以采用不同的方法:您可以选择遵循聚集(自下而上)或分裂(自上而下)的聚类方式。
Credits: UC Business Analytics R Programming Guide
凝聚聚类将从 n 个聚类开始,其中 n 是观察值的数量,假设它们中的每一个都是自己单独的聚类。然后,算法将尝试找到最相似的数据点,并将它们分组,因此它们开始形成聚类。
相比之下,分裂聚类将反其道而行之——假设所有的 n 个数据点是一个大的聚类,并将最不相似的分成不同的组。
如果你正在考虑使用其中的哪一个,尝试所有的选项总是值得的,但总的来说,*凝聚聚类在发现小簇方面更好,*并且被大多数软件使用;分裂聚类——发现更大的聚类。
我个人喜欢先看看树状图——聚类的图形表示,以决定我将坚持哪种方法。正如你将在下面看到的,一些树状图将会非常*衡,而其他的看起来会很混乱。
# The main input for the code below is dissimilarity (distance matrix)
# After dissimilarity matrix was calculated, the further steps will be the same for all data types
# I prefer to look at the dendrogram and fine the most appealing one first - in this case, I was looking for a more balanced one - to further continue with assessment#------------ DIVISIVE CLUSTERING ------------#
divisive.clust <- diana(as.matrix(gower.dist),
diss = TRUE, keep.diss = TRUE)
plot(divisive.clust, main = "Divisive")
#------------ AGGLOMERATIVE CLUSTERING ------------#
# I am looking for the most balanced approach
# Complete linkages is the approach that best fits this demand - I will leave only this one here, don't want to get it cluttered# complete
aggl.clust.c <- hclust(gower.dist, method = "complete")
plot(aggl.clust.c,
main = "Agglomerative, complete linkages")
A 选择聚类
在这里,您将在不同的聚类算法和不同数量的聚类之间做出选择。正如评估经常发生的那样,可能的方式不止一种,辅以 你自己的判断 。它是粗体和斜体,因为你自己的判断 很重要 —聚类的数量应该有实际意义,数据分组的方式也应该有意义。使用分类变量时,您可能最终会得到无意义的聚类,因为它们的值的组合是有限的-它们是离散的,组合的数量也是如此。可能,您也不希望集群数量非常少——它们很可能太过笼统。最后,一切都取决于你的目标和你分析的目的。
从概念上讲,当创建聚类时,您会对不同的数据点组感兴趣,这样,在聚类内它们之间的距离(或紧密度)最小,而组之间的距离(间隔)尽可能大。这直观上很容易理解:点与点之间的距离是从相异度矩阵导出的它们相异度的度量。因此,聚类的评估是围绕紧密性和分离性的评估而建立的。
这里我将采用两种方法,并说明其中一种可能会产生无意义的结果:
- 肘法:当聚类的紧密度,或者说组内的相似性对你的分析最重要的时候,就开始使用肘法。
- 剪影法:作为数据一致性的一种度量,剪影图显示一个聚类中的每个点与相邻聚类中的点的接*程度。
在实践中,它们很可能会提供不同的结果,这些结果在某一点上可能会令人困惑-不同数量的聚类将对应于最紧密/最明显分离的聚类,因此判断和理解数据实际上是什么将是做出最终决策的重要部分。
还有一堆测量值,你可以根据自己的情况进行分析。我将它们添加到代码本身。
# Cluster stats comes out as list while it is more convenient to look at it as a table
# This code below will produce a dataframe with observations in columns and variables in row
# Not quite tidy data, which will require a tweak for plotting, but I prefer this view as an output here as I find it more comprehensive library(fpc)cstats.table <- function(dist, tree, k) {
clust.assess <- c("cluster.number","n","within.cluster.ss","average.within","average.between",
"wb.ratio","dunn2","avg.silwidth")
clust.size <- c("cluster.size")
stats.names <- c()
row.clust <- c()output.stats <- matrix(ncol = k, nrow = length(clust.assess))
cluster.sizes <- matrix(ncol = k, nrow = k)for(i in c(1:k)){
row.clust[i] <- paste("Cluster-", i, " size")
}for(i in c(2:k)){
stats.names[i] <- paste("Test", i-1)
for(j in seq_along(clust.assess)){
output.stats[j, i] <- unlist(cluster.stats(d = dist, clustering = cutree(tree, k = i))[clust.assess])[j]
}
for(d in 1:k) {
cluster.sizes[d, i] <- unlist(cluster.stats(d = dist, clustering = cutree(tree, k = i))[clust.size])[d]
dim(cluster.sizes[d, i]) <- c(length(cluster.sizes[i]), 1)
cluster.sizes[d, i]
}
}output.stats.df <- data.frame(output.stats)cluster.sizes <- data.frame(cluster.sizes)
cluster.sizes[is.na(cluster.sizes)] <- 0rows.all <- c(clust.assess, row.clust)
# rownames(output.stats.df) <- clust.assess
output <- rbind(output.stats.df, cluster.sizes)[ ,-1]
colnames(output) <- stats.names[2:k]
rownames(output) <- rows.allis.num <- sapply(output, is.numeric)
output[is.num] <- lapply(output[is.num], round, 2)output
}# I am capping the maximum amout of clusters by 7
# I want to choose a reasonable number, based on which I will be able to see basic differences between customer groups as a resultstats.df.divisive <- cstats.table(gower.dist, divisive.clust, 7)
stats.df.divisive
看,average.within,即聚类内观察值之间的*均距离,正在缩小,聚类 SS 内也是如此。*均轮廓宽度有点不直接,但相反的关系仍然存在。
看看星团的大小是多么不成比例。我不会仓促地处理星团中无与伦比的观测数据。其中一个原因是,数据集可能不*衡,一些观察组将在分析中超过所有其他组-这不好,很可能导致偏差。
stats.df.aggl <-cstats.table(gower.dist, aggl.clust.c, 7) #complete linkages looks like the most balanced approach
stats.df.aggl
请注意,在每组的观察数量上,更加*衡的聚集完全联系层次聚类是如何进行比较的。
# --------- Choosing the number of clusters ---------## Using "Elbow" and "Silhouette" methods to identify the best number of clusters
# to better picture the trend, I will go for more than 7 clusters.library(ggplot2)**# Elbow
# Divisive clustering**
ggplot(data = data.frame(t(cstats.table(gower.dist, divisive.clust, 15))),
aes(x=cluster.number, y=within.cluster.ss)) +
geom_point()+
geom_line()+
ggtitle("Divisive clustering") +
labs(x = "Num.of clusters", y = "Within clusters sum of squares (SS)") +
theme(plot.title = element_text(hjust = 0.5))
所以,我们制作了“肘”图。它显示了*方和(作为观察值接*程度的一种度量:*方和越低,分类内的观察值越接*)随着分类数的不同而变化。理想情况下,我们应该在肘部看到一个与众不同的“弯曲”,在那里分裂星系团只会使 SS 略微下降。在下图的情况下,我会选择 7 左右。虽然在这种情况下,一个聚类将只包含 2 个观察值,但让我们看看凝聚聚类会发生什么。
# Agglomerative clustering,provides a more ambiguous picture
ggplot(data = data.frame(t(cstats.table(gower.dist, aggl.clust.c, 15))),
aes(x=cluster.number, y=within.cluster.ss)) +
geom_point()+
geom_line()+
ggtitle("Agglomerative clustering") +
labs(x = "Num.of clusters", y = "Within clusters sum of squares (SS)") +
theme(plot.title = element_text(hjust = 0.5))
凝聚型“肘”看起来与分裂型相似,只是凝聚型看起来更*滑,而“弯”不那么突兀。与分裂聚类类似,我会选择 7 个聚类,但在这两种方法之间进行选择,我更喜欢凝聚方法产生的聚类的大小——我想要大小相当的东西。
**# Silhouette**ggplot(data = data.frame(t(cstats.table(gower.dist, divisive.clust, 15))),
aes(x=cluster.number, y=avg.silwidth)) +
geom_point()+
geom_line()+
ggtitle("Divisive clustering") +
labs(x = "Num.of clusters", y = "Average silhouette width") +
theme(plot.title = element_text(hjust = 0.5))
当谈到轮廓评估时,规则是您应该选择使轮廓系数最大化的数字,因为您希望聚类足够独特(远)以被认为是独立的。
轮廓系数的范围在-1 和 1 之间,1 表示类内一致性良好,-1 表示不太好。
从上面的图中可以看出,您不会选择 5 个集群,而会选择 9 个。
作为比较,对于“简单”的情况,轮廓图可能看起来像下图。我们还不完全是,但几乎是。
Credits: Data sailors
ggplot(data = data.frame(t(cstats.table(gower.dist, aggl.clust.c, 15))),
aes(x=cluster.number, y=avg.silwidth)) +
geom_point()+
geom_line()+
ggtitle("Agglomerative clustering") +
labs(x = "Num.of clusters", y = "Average silhouette width") +
theme(plot.title = element_text(hjust = 0.5))
上面的剪影宽度图是在说“你打破的数据集越多,聚类就变得越有特色”。最终,您将得到单个数据点——您不希望这样,如果您尝试使用更大的 k 作为聚类数,您将会看到它。例如,在 *k=30,*我得到了下面的图:
所以:你分割得越多,效果越好,但是我们不能分割到单独的数据点(记住我们在上面的图中有 30 个集群,只有 200 个数据点)。
综上所述,在我看来,这种情况下的凝聚聚类看起来更加*衡——聚类大小或多或少是可比的(看看分裂部分中只有 2 个观察值的那个聚类!),我会选择通过这种方法获得的 7 个聚类。让我们看看它们的样子,并检查里面有什么。
该数据集由 6 个需要在 2D 或 3D 中可视化的变量组成,所以是时候接受挑战了!分类数据的性质也造成了一些限制,因此使用一些预定义的解决方案可能会变得棘手。我想 a)了解观察值如何聚集,b)了解观察值如何跨类别分布,因此我创建了 a)彩色树状图,b)每个聚类内每个变量的观察值计数热图。
library("ggplot2")
library("reshape2")
library("purrr")
library("dplyr")*# let's start with a dendrogram*
library("dendextend")dendro <- as.dendrogram(aggl.clust.c)dendro.col <- dendro %>%
set("branches_k_color", k = 7, value = c("darkslategray", "darkslategray4", "darkslategray3", "gold3", "darkcyan", "cyan3", "gold3")) %>%
set("branches_lwd", 0.6) %>%
set("labels_colors",
value = c("darkslategray")) %>%
set("labels_cex", 0.5)ggd1 <- as.ggdend(dendro.col)ggplot(ggd1, theme = theme_minimal()) +
labs(x = "Num. observations", y = "Height", title = "Dendrogram, k = 7")
*# Radial plot looks less cluttered (and cooler)*
ggplot(ggd1, labels = T) +
scale_y_reverse(expand = c(0.2, 0)) +
coord_polar(theta="x")
*# Time for the heatmap
# the 1st step here is to have 1 variable per row
# factors have to be converted to characters in order not to be dropped*clust.num <- cutree(aggl.clust.c, k = 7)
synthetic.customers.cl <- cbind(synthetic.customers, clust.num)cust.long <- melt(data.frame(lapply(synthetic.customers.cl, as.character), stringsAsFactors=FALSE),
id = c("id.s", "clust.num"), factorsAsStrings=T)cust.long.q <- cust.long %>%
group_by(clust.num, variable, value) %>%
mutate(count = n_distinct(id.s)) %>%
distinct(clust.num, variable, value, count)*# heatmap.c will be suitable in case you want to go for absolute counts - but it doesn't tell much to my taste*heatmap.c <- ggplot(cust.long.q, aes(x = clust.num, y = factor(value, levels = c("x","y","z", "mon", "tue", "wed", "thu", "fri","sat","sun", "delicious", "the one you don't like", "pizza", "facebook", "email", "link", "app", "area1", "area2", "area3", "area4", "small", "med", "large"), ordered = T))) +
geom_tile(aes(fill = count))+
scale_fill_gradient2(low = "darkslategray1", mid = "yellow", high = "turquoise4")*# calculating the percent of each factor level in the absolute count of cluster members*
cust.long.p <- cust.long.q %>%
group_by(clust.num, variable) %>%
mutate(perc = count / sum(count)) %>%
arrange(clust.num)heatmap.p <- ggplot(cust.long.p, aes(x = clust.num, y = factor(value, levels = c("x","y","z",
"mon", "tue", "wed", "thu", "fri","sat", "sun", "delicious", "the one you don't like", "pizza", "facebook", "email", "link", "app", "area1", "area2", "area3", "area4", "small", "med", "large"), ordered = T))) +
geom_tile(aes(fill = perc), alpha = 0.85)+
labs(title = "Distribution of characteristics across clusters", x = "Cluster number", y = NULL) +
geom_hline(yintercept = 3.5) +
geom_hline(yintercept = 10.5) +
geom_hline(yintercept = 13.5) +
geom_hline(yintercept = 17.5) +
geom_hline(yintercept = 21.5) +
scale_fill_gradient2(low = "darkslategray1", mid = "yellow", high = "turquoise4")heatmap.p
有了热图,您可以看到初始因素(我们已经开始使用的变量)中每个因素级别有多少观察值。较深的蓝色对应于一个集群中相对较多的观测值。在此图中,您还可以看到,一周中的每一天/购物篮大小在每个箱中都有几乎相同数量的客户,这可能意味着这些对于分析来说不是决定性的,并且可能会被省略。
C 丢失音符
在这篇文章中,我们已经经历了相异矩阵计算,尝试了凝聚和分裂的层次聚类方法,并且用“肘”和“剪影”方法看了一下聚类评估。
在这篇文章中,我们经历了相异度矩阵计算,尝试了凝聚和分裂的层次聚类方法,并对聚类评估进行了研究。
分裂式和凝聚式层次聚类是开始探索的好地方,但是如果您的目标是成为一名聚类大师,请不要止步于此——还有更多的方法和技术出现在那里。与数值数据聚类相比,主要区别在于相异矩阵的计算。从评估的角度来看,并不是所有的标准聚类评估方法都会产生可靠和合理的结果——剪影方法可能会被淘汰。
最后,我做这个练习已经有一段时间了。到目前为止,我看到了我的方法背后的一些缺点,我欢迎任何反馈。我的分析中的一个普遍缺陷在于聚类本身之外— 我的数据集在很多方面都是不*衡的,这个问题仍然没有得到解决。我可以看到它对聚类的影响:有 70%的客户属于一个因素级别(在这种情况下是国籍),这个组控制了大多数产生的聚类,使得很难找出其他因素级别之间的差异。*衡数据集和比较聚类结果是我接下来要尝试的,我会写一篇单独的文章来讨论这个问题。
最后,如果你想克隆,这里有 github 的链接:https://github.com/khunreus/cluster-categorical
希望你喜欢它!
以下是我发现有用的资源:
分层聚类教程(数据准备、聚类、可视化),总的来说,这个博客可能对那些对 R:http://uc-r.github.io/hc_clustering和https://uc-r.github.io/kmeans_clustering的商业分析感兴趣的人有用
聚类验证:http://www . sth da . com/English/articles/29-cluster-validation-essentials/97-cluster-validation-statistics-must-know-methods/
文档分类示例(分层和 k-means):https://eight 2 late . WordPress . com/2015/07/22/a-gentle-introduction-to-cluster-analysis-using-r/
denextend 包相当有趣,允许比较不同方法之间的集群结构:https://cran . r-project . org/web/packages/dend extend/vignettes/introduction . html # the-set-function
不仅有树状图,还有聚类图:https://www . r-statistics . com/2010/06/cluster gram-visualization-and-diagnostics-for-cluster-analysis-r-code/
结合聚类热图和树状图:https://JC Oliver . github . io/learn-r/008-gg plot-dendrograms-and-heat maps . html
我个人有兴趣尝试一下在https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5025633/引入的方法,他们的 GitHub 库:https://github.com/khunreus/EnsCat
分层软最大值和负采样:值得讲述的简短笔记
原文:https://towardsdatascience.com/hierarchical-softmax-and-negative-sampling-short-notes-worth-telling-2672010dbe08?source=collection_archive---------0-----------------------
感谢观众对我上一篇(也是唯一一篇)致力于单词嵌入的帖子的意外和非常愉快的关注,我很高兴再写一篇:更短更易读。严格地说,这是上一篇文章的延续,因为这里讨论的主题是对方法的更详细的解释,这些方法用于生成单词嵌入,特别是用于使用 softmax 函数计算最后的激活层。Softmax 产生多项式概率分布;我们将接收到的输出向量视为单词的向量表示(上下文单词或简单的输出单词,取决于我们使用的模型)。为什么我们需要新的练习来输出我们的单词向量?他们给了我们什么好处?他们的表现如何,有什么不同?让我们开始这个故事吧,我想我们会明白的。
直觉和先决条件
我之前说过,softmax(归一化指数函数)是输出层函数,它激活我们的每一个节点,作为神经网络计算的最后一步。它用于计算至少两种不同类型的常见单词嵌入: word2vec 和 FastText 。此外,它与 sigmoid 和 tanh 函数一起,是许多情况下神经网络架构的激活步骤。softmax 的公式如下:
其中,激活的输出向量的每个元素是给定我们的输入单词 I 的情况下,该单词等于词汇表中第 j 个单词的概率。此外,值得一提的是,输出向量的元素之和等于 1 ,并且它的每个元素都被映射到一个范围*【0,1】*。
以直接方式计算的该算法的计算复杂度是我们的词汇表的大小, O(V) 。实践告诉我们,我们可以通过使用二叉树结构来充分减少它,为什么不呢?
分级 softmax
这种方法背后的主要动机是,我们评估的是以 2 为底的对数 V 而不是 V :
这是算法所需的计算复杂度和运算数量的戏剧性变化。我们用二叉树的用法来做,其中树叶代表单词的概率;更具体地,索引为 j 的 leave 是第 j 个字的概率,并且在输出 softmax 向量中具有位置 j 。
每一个单词都可以通过从根到内部节点的路径到达,内部节点表示沿着这条路径的概率质量。这些值是通过使用简单的 sigmoid 函数产生的,只要我们计算的路径仅仅是这些概率质量函数的乘积,这些函数定义为:
在我们的具体案例中 x 是什么?它是通过我们正在使用的单词的输入和输出矢量表示的点积来计算的:
其中 n(w,j) 是从根到 w 路径上的第 j 个节点,我们正在计算。更多关于输入和输出单词表示的解释可以在我之前的文章中找到。
实际上,我们可以用概率代替 sigmoid 符号;对于每个内部节点,我们选择一个任意的子节点(左或右),并将正 sigmoid 函数值赋给其中一个(通常是左子节点)。通过保留这些约束,sigmoid 函数可以被视为:
对于节点 n 的左子节点,同样对于节点 n 的右子节点:
我们已经收集了最终函数计算的所有部分,包括前面的所有步骤,以及对我们选择的任意节点(右或左)的布尔检查:
其中,尖括号表示布尔检查大小写是真还是假; L(w) 是树的深度; ch(n) 是节点 n 的子节点。
如果树有根节点、2 个内部节点和叶节点,很明显我们正在执行 3 步计算,这足以减少我们正在做的操作的数量。
负采样
负采样思想是基于噪声对比估计的概念(类似于生成性对抗网络),它坚持认为,一个好的模型应该通过逻辑回归来区分伪信号和真实信号。此外,负采样目标背后的动机类似于随机梯度下降:不是每次都改变所有的权重,同时考虑到我们拥有的所有成千上万个观察值,我们只使用其中的 K 个,并且也显著提高了计算效率(取决于负样本的数量)。
一次观察的负采样目标看起来像:
正如我们所看到的,与随机梯度下降的不同之处在于,我们考虑的不仅仅是一个观察值,而是其中的 K 个。
我们使用的概率分布是噪声分布(将在后面更详细地描述)。我们使用这种噪声分布的原因是我们试图解决区分真实数据和虚假数据的挑战。
合适的噪声分布是一元分布 U(w) 定义为:
其中 3/4 为实验得出的值; f(w) 是该词在语料库中的出现频率。
如果我们说的是取自 word2vec 理论的 skip-gram 模型,那么负样本就是词,不是上下文词;正面的例子当然是语境词。
结论
我不能称这篇文章为一篇有价值的文章,至少因为我花了不超过一个小时来写这篇文章;网上还有很多更详细的帖子专门针对不同类型的 softmax,包括差异化 softmax,CNN-softmax,目标采样等。比如,塞巴斯蒂安·鲁德的这篇文章。我试图尽可能多地关注复杂公式的简单解释和给定算法的优点,这使得它们在给定的领域中最受欢迎。正如从文本中所理解的,所提到的方法更多地从数学公式和机器学习方法的角度进行描述,然后从实际实施的角度进行描述(通常,这些算法已经在标准 gensim/tensorflow 库中采用)。
使用 HAProxy 和 Heartbeat 实现负载*衡的高可用性 MySQL 集群。
原文:https://towardsdatascience.com/high-availability-mysql-cluster-with-load-balancing-using-haproxy-and-heartbeat-40a16e134691?source=collection_archive---------1-----------------------
你好,在这篇文章中,我想分享一些从两个主 MySQL 节点构建高可用性 MySQL 数据库集群的经验,该集群具有基于 HAProxy & Heartbeat 的负载*衡和故障转移功能。
在大多数现代项目中,数据库可用性是生死攸关的问题。好的解决方案是从一个以上的 MySQL 服务器创建一个分布式数据库集群,它可以负责负载*衡、故障转移功能和数据复制。此外,您可以拆分传入的请求并处理高负载。
在这个例子中,我将展示从两个主节点创建一个 MySQL 集群,主要思想是创建一对具有相同配置的服务器和一个用于接收请求的虚拟 IP。即使完全失去其中一个节点,该群集也将继续工作。
我们将使用两台服务器(虚拟或裸机),上面安装一对 MySQL masters 和一对 HAProxy,主虚拟 IP 将配置 Heartbeat。请注意,在本例中,一个时间段内仅使用一个 HAProxy,第二个 HAProxy 将处于热储备状态。MySQL 服务器将循环使用负载*衡类型。
选择具有两个服务器的模式是为了使示例更简单。当然,如果您有额外的服务器,您可以创建更复杂的配置,将 HAProxy 与 Heartbeat 放在外部 LB 集群中等等。但是无论如何,这个例子对于在你的项目中构建一个强大的数据库集群来说已经足够了。
0。正在准备。
首先,我们需要为 MySQL 复制和 HAProxy with Heartbeat 选择几个子网,最好将它们分开,如果您的服务器有几个网络接口,也将这些子网放在不同的接口上。
192 . 168 . 0 . 0/24-DB 流量网络
MySQL1 的 192.168.0.1 IP,MySQL2 的 192.168.0.2 IP。
10.10.10.0/24 -心跳网络& HAProxy。
10.10.10.1 虚拟 IP 用于取请求,10 . 10 . 2主 IP 用于服务器 1 , 10.10.10.3 主 IP 用于服务器 2 。
事实上/29 子网就足够了:)
1。用主-主复制配置 MySQL 服务器。
首先,我们需要在两台服务器上安装 MySQL:
# apt-get update && apt-get upgrade -y# apt-get install mysql-server mysql-client
然后在第一个和第二个节点上编辑 /etc/mysql/my.cnf ,以启用 mysql 服务器之间的复制,并使它们使用来自 192.168.0.0/24 子网的 IP:
服务器 1 配置。
[mysqld]bind-address = 192.168.0.1server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
expire_logs_days = 10
max_binlog_size = 100M
log_slave_updates = 1
auto-increment-increment = 2
auto-increment-offset = 1
Server2 配置。
[mysqld]bind-address = 192.168.0.2server_id = 2
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
expire_logs_days = 10
max_binlog_size = 100M
log_slave_updates = 1
auto-increment-increment = 2
auto-increment-offset = 2
然后重新启动它们,并确保 MySQL 叶在指定的 IP:
server1# systemctl restart mysqlserver1# netstat -ntlpActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.0.1:3306 0.0.0.0:* LISTEN 9057/mysqldserver2# systemctl restart mysqlserver2# netstat -ntlpActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.0.2:3306 0.0.0.0:* LISTEN 8740/mysqld
现在将为数据库之间的复制创建一个用户,你可以使用 pwgen 实用程序来生成足够强的密码。连接到每个 MySQL 服务器,并使用来自对方服务器的 IP 创建该用户:
server1# mysql -u root -pMariaDB> GRANT REPLICATION SLAVE ON *.* TO 'replicauser'@'192.168.0.2' IDENTIFIED BY 'somestrongpassword';server2# mysql -u root -pMariaDB> GRANT REPLICATION SLAVE ON *.* TO 'replicauser'@'192.168.0.1' IDENTIFIED BY 'somestrongpassword';
检查复制用户是否可以访问每台 MySQL 服务器。
server1# mysql -u replicauser -p -h 192.168.0.2
Enter password: somestrongpassword
Welcome to the MariaDB monitor. Commands end with ; or \g.bla bla....server2# mysql -u replicauser -p -h 192.168.0.1
Enter password: somestrongpassword
Welcome to the MariaDB monitor. Commands end with ; or \g.bla bla....
好了,现在我们可以继续配置 MySQL 服务器之间的复制。从那时起,最好从两个 MySQL 服务器打开两个控制台,因为我们需要根据另一个服务器的输出输入命令。
获取服务器 1 上的 MySQL 主服务器状态:
server1# mysql -u root -pMariaDB> SHOW MASTER STATUS;+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 531 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
我们需要这个输出中的文件和位置信息。打开 server2 上的 MySQL 控制台,配置与第一台服务器的从属关系。
server2# mysql -u root -pMariaDB> STOP SLAVE;MariaDB> CHANGE MASTER TO master_host='192.168.0.1', master_port=3306, master_user='replicauser', master_password='somestrongpassword', master_log_file='mysql-bin.000002', master_log_pos=531;MariaDB> START SLAVE;
现在从 server2 查询主服务器状态,并在第一台服务器上为 MySQL 配置从服务器关系。
server2# mysql -u root -pMariaDB> SHOW MASTER STATUS;+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 531 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)server1# mysql -u root -pMariaDB> STOP SLAVE;MariaDB> CHANGE MASTER TO master_host='192.168.0.2', master_port=3306, master_user='replicauser', master_password='somestrongpassword', master_log_file='mysql-bin.000002', master_log_pos=531;MariaDB> START SLAVE;
好了,如果一切都做对了,我们必须在 MySQL 主服务器之间建立一个有效的复制。您可以创建一些测试数据库并检查这一点。
server1# mysql -u root -pMariaDB> CREATE DATABASE TESTDB;
MariaDB> CREATE TABLE TESTDB.REPLICA (`id` varchar(40));
然后检查该数据库是否也出现在第二台服务器上:
server2# mysql -u root -pMariaDB> SHOW TABLES IN TESTDB;
+------------------+
| Tables_in_TESTDB |
+------------------+
| REPLICA |
+------------------+
1 row in set (0.00 sec)
正如您所看到的,TESTDBbase 被成功地复制到了 server2。我们刚刚完成了创建故障转移集群的第一阶段。
2.在两台服务器上配置 HAProxy。
在第二阶段,我们将在两台服务器上安装和配置两个完全相同的 HAProxy,用于*衡 MySQL 服务器之间的传入请求。
首先,我们需要在我们的 MySQL 服务器上添加额外的用户(用户必须在没有任何密码的情况下创建),该用户将由 HAProxy 用于检查 MySQL 服务器的健康状态。
server1# mysql -u root -pMariaDB> CREATE USER 'haproxy_check'@'%';
MariaDB> FLUSH PRIVILEGES;
您可以在我们的任何 MySQL 服务器上创建这个用户,因为我们在它们之间配置了一个复制。使用以下命令检查用户是否已添加:
server1# mysql -u root -p -e "SELECT User, Host FROM mysql.user"
Enter password:
+---------------+-------------+
| User | Host |
+---------------+-------------+
| haproxy_check | % |
| replicauser | 192.168.0.2 |
| root | localhost |
+---------------+-------------+server2# mysql -u root -p -e "SELECT User, Host FROM mysql.user"
Enter password:
+---------------+-------------+
| User | Host |
+---------------+-------------+
| haproxy_check | % |
| replicauser | 192.168.0.1 |
| root | localhost |
+---------------+-------------+
此外,让我们创建一个具有 root 权限的用户,以便稍后进行一些测试请求:
server1# mysql -u root -pMariaDB> CREATE USER 'haproxy_root'@'%' IDENTIFIED BY 'password';
MariaDB> GRANT ALL PRIVILEGES ON *.* TO 'haproxy_root'@'%';
现在是安装 HAProxy 的时候了:
server1# apt-get install haproxy
server2# apt-get install haproxy
保存原始配置并创建新配置:
server1# mv /etc/haproxy/haproxy.cfg{,.back}
server1# vi /etc/haproxy/haproxy.cfg
接下来,在两台服务器上添加此配置:
global
user haproxy
group haproxydefaults
mode http
log global
retries 2
timeout connect 3000ms
timeout server 5000ms
timeout client 5000mslisten stats
bind 10.10.10.1:9999
stats enable
stats hide-version
stats uri /stats
stats auth statadmin:statadminpasslisten mysql-cluster
bind 10.10.10.1:3306
mode tcp
option mysql-check user haproxy_check
balance roundrobin
server mysql-1 192.168.0.1:3306 check
server mysql-2 192.168.0.2:3306 check
可以看到,两个 HAProxy 服务都将使用 10.10.10.1,共享 IP 地址。这个虚拟 ip 将在服务器之间移动,因此我们需要使用一些技巧并启用net . IP v4 . IP _ non local _ bindsysctl 选项,以允许系统服务绑定在非本地 IP 上。
将此选项添加到文件 /etc/sysctl.conf 中:
*server1# vi /etc/sysctl.conf*net.ipv4.ip_nonlocal_bind=1*server2# vi /etc/sysctl.conf*net.ipv4.ip_nonlocal_bind=1
那就跑
*sysctl -p*
之后,我们可以在两台服务器上启动 HAProxy:
server1# systemctl start haproxy
server2# systemctl start haproxy
检查它们是否在共享 IP 10.10.10.1 上启动:
server1# netstat -ntlp Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.0.1:3306 0.0.0.0:* LISTEN 918/mysqld
tcp 0 0 10.10.10.1:3306 0.0.0.0:* LISTEN 802/haproxy
tcp 0 0 10.10.10.1:9999 0.0.0.0:* LISTEN 802/haproxy
tcp 0 0 10.10.10.2:22 0.0.0.0:* LISTEN 785/sshdserver2# netstat -ntlpActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.0.2:3306 0.0.0.0:* LISTEN 918/mysqld
tcp 0 0 10.10.10.1:3306 0.0.0.0:* LISTEN 802/haproxy
tcp 0 0 10.10.10.1:9999 0.0.0.0:* LISTEN 802/haproxy
tcp 0 0 10.10.10.3:22 0.0.0.0:* LISTEN 785/sshd
一切看起来都很好,两台服务器都是使用虚拟 IP 启动的,我们还在 9999 端口上配置了一个统计页面,因此您可以使用 statadmin:statadminpass 在http://10 . 10 . 10 . 1:9999/stats上检查 HAProxy 状态。
3.使用共享 IP 配置心跳。
在最后一个阶段,我们需要在两台服务器上配置 Heartbeat 服务,并创建共享的 IP,它将用于处理传入的请求。如果其中一台服务器发生问题,这个 IP 将在服务器之间迁移。
在两台服务器上安装 Heartbeat:
server1# apt-get install heartbeat
server1# systemctl enable heartbeatserver2# apt-get install heartbeat
server2# systemctl enable heartbeat
现在我们需要为它创建一些配置文件,它们对于 server1 和 server2 来说基本相同。
创建一个 /etc/ha.d/authkeys ,在这个文件中心跳存储数据来认证对方。两个服务器上的文件将是相同的:
server1# vi /etc/ha.d/authkeysauth 1
1 md5 securepassserver2# vi /etc/ha.d/authkeysauth 1
1 md5 securepass
将 securepass 改为您的强安全密码。此外,该文件只需要由 root 用户拥有,因此:
server1# chmod 600 /etc/ha.d/authkeys
server2# chmod 600 /etc/ha.d/authkeys
接下来将在两台服务器上为 Heartbeat 创建一个主配置,对于 server1 和 server2 会有一点不同,创建 /etc/ha.d/ha.cf :
服务器 1
server1# vi /etc/ha.d/ha.cf# keepalive: how many seconds between heartbeats
#
keepalive 2
#
# deadtime: seconds-to-declare-host-dead
#
deadtime 10
#
# What UDP port to use for udp or ppp-udp communication?
#
udpport 694
bcast ens18
mcast ens18 225.0.0.1 694 1 0
ucast ens18 10.10.10.3
# What interfaces to heartbeat over?
udp ens18
#
# Facility to use for syslog()/logger (alternative to log/debugfile)
#
logfacility local0
#
# Tell what machines are in the cluster
# node nodename ... -- must match uname -n
node server1
node server2
服务器 2
server1# vi /etc/ha.d/ha.cf# keepalive: how many seconds between heartbeats
#
keepalive 2
#
# deadtime: seconds-to-declare-host-dead
#
deadtime 10
#
# What UDP port to use for udp or ppp-udp communication?
#
udpport 694
bcast ens18
mcast ens18 225.0.0.1 694 1 0
ucast ens18 10.10.10.2
# What interfaces to heartbeat over?
udp ens18
#
# Facility to use for syslog()/logger (alternative to log/debugfile)
#
logfacility local0
#
# Tell what machines are in the cluster
# node nodename ... -- must match uname -n
node server1
node server2
您可以通过在您的服务器上运行uname -n
来获得这个配置的节点名称。
最后,我们需要在服务器 1 和服务器 2 上创建 /etc/ha.d/haresources 文件。文件是相同的,在这个文件中,我们将默认声明我们的共享 IP 地址和主节点:
server1# vi /etc/ha.d/haresourcesserver1 10.10.10.1server2# vi /etc/ha.d/haresourcesserver1 10.10.10.1
毕竟,让我们在两台服务器上启动我们的心跳服务,您必须看到,在服务器 1 上,我们已经启动了虚拟 IP:
server1# ip a
....
2: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether bla:bla:bla:bla brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.0.255 scope global ens19
valid_lft forever preferred_lft forever
inet6 fe80::bla:bla:bla:bla/64 scope link
valid_lft forever preferred_lft forever
3: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether bla:bla:bla:bla:bla:bla brd ff:ff:ff:ff:ff:ff
inet 10.10.10.2/24 brd 10.10.10.255 scope global ens18
valid_lft forever preferred_lft forever
inet 10.10.10.1/24 brd 10.10.10.255 scope global secondary
....
好了,现在我们在 server1 上分配了虚拟 IP,HAProxy 监听它,所以我们可以检查它是如何工作的,发出测试请求。从一些外部服务器运行以下命令:
# mysql -h 10.10.10.1 -u haproxy_root -p -e "show variables like 'server_id'"Enter password:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+# mysql -h 10.10.10.1 -u haproxy_root -p -e "show variables like 'server_id'"Enter password:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
一切正常,你可以看到我们的 MySQL 服务器之间的“循环”*衡。现在,我们需要检查故障转移,例如当服务器 1 离线时。转到并重新启动或关闭服务器 1,检查虚拟 IP 是否已移动到服务器 2,对 MySQL 服务器的请求是否仍然正常,但现在服务器 2 上只有 MySQL 会响应:
server2# ip a
....
2: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether bla:bla:bla:bla brd ff:ff:ff:ff:ff:ff
inet 192.168.0.2/24 brd 192.168.0.255 scope global ens19
valid_lft forever preferred_lft forever
inet6 fe80::bla:bla:bla:bla/64 scope link
valid_lft forever preferred_lft forever
3: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether bla:bla:bla:bla:bla:bla brd ff:ff:ff:ff:ff:ff
inet 10.10.10.3/24 brd 10.10.10.255 scope global ens18
valid_lft forever preferred_lft forever
inet 10.10.10.1/24 brd 10.10.10.255 scope global secondary
....
再次检查 MySQL 请求:
# mysql -h 10.10.10.1 -u haproxy_root -p -e "show variables like 'server_id'"Enter password:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+# mysql -h 10.10.10.1 -u haproxy_root -p -e "show variables like 'server_id'"Enter password:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
在服务器 1 恢复在线后,虚拟 IP 将被移回服务器 1。
我们做到了,我们刚刚配置并测试了我们的 MySQL 集群,它现在已经准备好为请求提供服务。
祝你好运。
带有 R 的高分辨率天气数据
原文:https://towardsdatascience.com/high-resolution-weather-data-with-r-410e5e5f12e5?source=collection_archive---------3-----------------------
我们在 WeatherDecTech 遇到的一个棘手问题是客户需要大量天气数据,但没有科学数据格式的经验。
自从我们的高分辨率分析数据(NetCDF 格式)发布以来,这个问题越来越频繁地出现。虽然我们过去提供过 CSV 文件,但是这种方法有很多限制。
Australian High Resolution Hourly Temperature
最大的问题是 CSV 文件的大小通常是 NetCDF 的 20-30 倍。因此,查看我们对 10 个变量一年的每小时分析数据,NetCDF 分布可能为 750GB,而同等 CSV 数据为 20TB。
使用 NetCDF 数据的其他好处在其常见问题解答中有最佳描述:
NetCDF 数据是:
自诩。netCDF 文件包含有关它所包含的数据的信息。
便携。netCDF 文件可以由具有不同存储整数、字符和浮点数方式的计算机访问。
可扩展。可以有效地访问大型数据集的小子集。
可追加。可以将数据附加到结构正确的 netCDF 文件中,而无需复制数据集或重新定义其结构。
可共享。一个编写器和多个读取器可以同时访问同一个 netCDF 文件。
可建。该软件的当前和未来版本将支持对所有早期形式的 netCDF 数据的访问。
虽然好处是显而易见的,但这仍然不能使格式变得容易使用。为了解决这些可访问性问题,我又写了 2 个 R 包。第一个是一个瘦 API 包装器,它允许你以一种方便的方式下载数据:skywisedataferrer
用法很简单:
> Authorize('app_id', 'app_key')
> DataTransfer('skywise-conus-surface-analysis', directory = '.')
第二个是用于处理 NetCDF 文件的库: SkyWiseNetCDFR
# extract the temperature grid
> grid <- ExtractGrid(fileName, "temperature")
# find the data value at a certain lat / lon
> val <- GetValueAtPoint(35, -97, grid)# Extract a subset of the grid
> vals <- mapply(GetValueAtPoint, lats, lons, MoreArgs = list(grid))
如果你想访问这些数据,请访问 WDT 进行注册或联系销售。
CONUS High Resolution Temperature
本周三位一体镜像数据单元的亮点
原文:https://towardsdatascience.com/highlights-from-the-trinity-mirror-data-unit-this-week-58ba5ecb48b7?source=collection_archive---------9-----------------------
以性别薪酬差距、传染病、自动化在新闻中的作用以及我通常对德比郡的春季抱怨为特色,只有数据支持。(算是吧。)
打破性别薪酬差距
所以我们都看到了本周的全国头条新闻,揭示了性别薪酬差距最大和最小的公司。与此同时,数据部门的 Claire Miller 正忙于提取 Trinity Mirror 图书的本地列表,将每家公司注册地址的邮政编码与我们覆盖的每种图书的读者足迹列表进行匹配。
结果呢?一个重要的全国性故事变成了一个重要的地方性故事 x 40(这是 Claire 摘录的许多地方性电子表格)。你可以在这里看到一个例子:
Read this story here
如果你对全国的性别工资差异感兴趣,你可能也会喜欢我们上个月做的这个互动。输入你的工资、邮编和性别,找出你的*均收入比男人(或女人)多(或少)多少。
Try this interactive here
…公司只支付最低工资
上面的例子很好地说明了在本地化的数据集中寻找故事并不一定要挑出最好的、最差的、进步最快的等等。
这是一个数据记者很容易陷入的陷阱:故事必须主要是一个数据故事;它必须涉及某种比较,无论是与其他地区或另一个时间点。
嗯,不。这些比较可能就是故事。但它们可能只是故事的有用背景。
有时,数据在任何地方都讲述着大致相同的故事。或者,更准确地说:有时,出于完全相同的原因,不止一个地方对关于 X 的相同数据感兴趣,不管它是否显示其中一个地方在 X 处更好或更差。
这是本周的另一个例子:Deb Aru 分解了支付员工最低工资的公司的数据。
Read this story here
显然,如果一个地方有全国最差的数据,那显然是新闻专线。但在大多数地方,大多数时候,(当地)读者主要不是问:“在支付高于最低工资方面,我所在的地区与英国其他地区相比如何?”相反,他们在问:“在我所在的地区,有多少人的工资不超过最低工资?”
传染病继续激增
Claire 对什么地方的数据集已经发布,什么时候发布,有着难以置信的了解;作为该团队事实上的新闻编辑,她还保留了一份精心挑选的日记,记录了未来几天和几周将要公布的数据。
结果是,她总是第一个在定期发布的本地数据集中发现趋势和突发事件,否则可能会被忽视。
一个很好的例子是她对猩红热和麻疹病例的法医监测。令人担忧的是,最*几个月病例一直在上升——这一趋势在本周的新数据中得以延续。
这里是她写的关于麻疹的两个故事,包括一个将伯明翰、加的夫和利兹确定为最新爆发热点的全国版本:
Read this story here
Read this story here
这里有两个她写的关于猩红热的当地故事:
Read this story here
Read this story here
自动新闻
有时你会在本地数据集中找到新闻;有时它会跳出来打你的脸。
我之前提到过我们的一个副业项目是如何为 Trinity Mirror 的周刊提供自动打印页面的。他们告诉我们他们覆盖的邮政编码、地方当局、健康信托等;我们用它从常规发布的数据集中提取本地信息,通过图形模板运行,页面显示为 pdf。
本周的主题是车辆犯罪,当我在全国各地校对网页时,有一件事引起了我的注意。这是一个康沃尔作品的页面:
如果我们把左上角放大一点:
这是一个重要的,潜在的高新闻价值的上涨,我们目前正在检查。这也是我们只发现的一个上升,因为我校对了自动生成的一个页面。
好吧,这是人为干预。尽管如此,这是“机器人新闻”让我兴奋的一点:编程的前景是获取常规数据,并提醒记者有重大新闻价值的变化。
官方:今年英超和英冠垃圾
如果你——像我一样——是德比郡的球迷,你会知道其他人称为“复活节假期”的那段时间是另一回事。也就是:“德比的崩溃和所有晋级的希望再次破灭的时候”。
今年应该是我们的一年。不过话说回来,每年都应该是我们的一年。特别烦的是 2017/18 赛季的总冠军感觉有点,嗯,垃圾。
但是是吗?嗯,本周该小组的 Rob Grant 指出的一个因素是去年从英超降级的球队相对糟糕的表现。
米德尔斯堡、赫尔和桑德兰目前分别排名第六、第十八和第二十三。如果他们在那里结束,这将是自 2004/05 赛季冠军更名以来最差的总成绩。
Read this story here
不过,英超联赛的观众不应该太得意。随着富人越来越富,穷人越来越穷,英格兰顶级联赛大肆吹嘘的“竞争力”可能正在减弱。
我们的体育数据记者 David Dubas-Fisher 本周对这一问题进行了研究,发现以 3 个或更多进球获胜的英超比赛数量将达到 1958/59 赛季以来的最高水*。
我们这周做的其他事情
在报纸报道方面,《哈德斯菲尔德审查员》对我上周提到的安妮·高克对被看护儿童的调查进行了大篇幅报道:
与此同时,《曼彻斯特晚报》将我们对逃学率的研究放在了其奥尔德姆版的头版:
我们的摄像师 Mark Magill 第一次使用了他的“摇头管理器”,它最终将成为我们为各种三一镜报制作的视频生成工具的基础:
哦,我在 Twitter 上进行了一次有趣的讨论,讨论的基础是我快速制作的一张地图,上面显示了每个住宅的*均市政税账单,而不是通常用于讨论这个问题的“D 级”税率。如果你对此感兴趣(面对现实吧,如果你已经读到这里,你是我最好的选择),你可以点击这里:
祝你周末愉快。
本周三位一体镜像数据单元的亮点
原文:https://towardsdatascience.com/highlights-from-the-trinity-mirror-data-unit-this-week-7f3b520c82f9?source=collection_archive---------13-----------------------
因为我在罗马,所以比计划的时间晚了一点,这里是该部门上周所做的一些数据新闻工作的简要介绍。
警察倒下了,犯罪上升了
谁能想到,当你把警察人数削减到最低限度时,犯罪率会有所上升?克莱尔·米勒决定在全国范围内运行三一镜报的数据,结果非常明显。
在大曼彻斯特地区,自 2010 年以来,记录在案的暴力犯罪增加了两倍,而该地区的警察队伍却损失了 2000 名警官和 1000 名文职人员。政府否认任何形式的因果联系,尽管一份泄露的内政部报告(和当地政客)声称并非如此。
不仅仅是曼彻斯特:这里的是《提赛德公报》对克莱尔的作品所做的评价(这里的暴力犯罪上升了 70%,警察人数下降了四分之一)。
紧张的国民保健服务
NHS 的年度员工调查清楚地展示了另一个面临压力的公共服务。克莱尔(再次)分析了当地的数字,同样的画面一次又一次地出现:卫生工作者越来越感到工作过度,工资过低,并担心是否有足够的资源来完成他们的工作。
《剑桥新闻》(将*一半的医院工作人员说人手不够)在克莱尔的公告栏上大肆渲染;你也可以阅读她为巴斯、伯明翰和林肯郡所写的文章,前者有 43%的员工因压力而感到不适,后者有 45%的员工对薪酬不满,高于去年的 33%。
我们也做了视频,你可以在上面的任何链接上看到。
我用数据选了一匹国马。它输了。
国家大饭店。一个分裂的英国团结一致大喊“你真没用”的时代电视上一些可怜无辜的马。
这也是数据单元开始更新它的“使用数据挑选一匹马”小工具的时候。
这是一件相当简单的事情。我们把选马归纳为四个要素:几率、体重、骑师的评级和马最*的状态。人们向左或向右移动滑块,这取决于这些因素对他们的重要性,我们将这些因素与数据进行匹配。
对于这种一直被认为是半开玩笑的东西,这个小工具使用了相当复杂的合成算法。这也是我们用于其他目的的模板,包括“如果我想在英国退出欧盟之后离开英国去欧洲生活,我应该搬到哪个国家”。(显然卢森堡,对我来说。)
*年来,这个大国家的小玩意对我并不友好:我最*挑选的大多数数据都幸运地越过了第一道栅栏。今年它选择了 Pleasant Company(见上图),该公司以 25/1 的赔率获得第二名。太好了!
除了我没有赌这场比赛,因为我在罗马。(这个我可能提过。)
不寻常的名字
所以我们都知道国家统计局每年发布的全国“最受欢迎的名字”数据集——如果你对此感兴趣,你可以用我们的小工具在这里绘制你的名字多年来的受欢迎程度。但你知道吗,英国国家统计局还发布了一个地区分类,显示哪些名字在某些地区比其他地区更受欢迎?
例如,东北地区特别喜欢它的森林和小树林。去年,西米德兰兹郡有许多玫瑰和扎卡里亚。与此同时,伦敦的父母似乎喜欢米歇尔和锡安这两个名字。你可以通过克莱尔为哈德斯菲尔德、莱斯特和德比写的故事的链接之一阅读完整的分析(或观看我们的完整结果视频)。
离家出走的寄养儿童
我们最*做了很多关于受照料儿童前景的调查工作:那些因为无论什么原因,他们的父母不能照顾他们而成为国家责任的人。
其中一个方面是被看护的儿童更容易失踪;并不总是持续很长时间,但确实是经常性的。一个下落不明的孩子,显然是一个有潜在危险的孩子。
上周,我们看了显示从寄养家庭出走的儿童人数的数据,利物浦回声报确实非常突出地使用了这些数据:
《回声报》的汤姆·霍顿(Tom Houghton)利用当地的引用和见解,在开发我们的数据故事方面做得很好。这是一个很好的例子,说明我们希望如何在这些问题上与三一合作,我建议你读一读。
其他东西
黛比·阿鲁发现每四个小时就有人因被狗咬伤而住院——你可以通过这些链接查看她为伯明翰、德比郡和诺丁汉写的这个(极其受欢迎的)故事的版本。
安妮·古克(Annie Gouk)观察了每个地区长期空置的房产数量(主要由私人房东拥有),并将它们与由于显然没有合适的住所而被安置在招待所和住宿加早餐的无家可归者的数量进行了比较。样本数据:在整个西米德兰兹郡,有 687 个家庭因为无家可归而住进了 B&的寄宿处和招待所。仅在考文垂就有 1364 套公寓和房屋空置超过 6 个月。看故事这里。
我们还发现,令人惊讶的是,在线欺诈在许多地方都有所下降(例如,在赫尔市下降了三分之一),而大卫·杜巴斯-费希尔证明了(也许难以令人信服)德比郡臭名昭著的 2007/08 赛季可能不是任何职业足球俱乐部有史以来最糟糕的赛季。
最后,衷心祝贺该部门的 Rob Grant,他因今年的个人作品集获得了数据新闻奖提名。这里可以看到。
*罗马令人惊叹
这真的是这样的一个伟大的城市度过了一个漫长的周末(虽然,在回顾我的照片后,我似乎花了大部分时间在梵蒂冈博物馆拍摄儿童谋杀天鹅的怪异雕像)。
本周三位一体镜像数据单元的亮点
原文:https://towardsdatascience.com/highlights-from-the-trinity-mirror-data-unit-this-week-b39d05dbeee0?source=collection_archive---------6-----------------------
圣帕特里克节前夕快乐!这里是我们本周披露的一些独家数据,以及它们出现的一些标题的链接。
学校:更少的钱+更多的学生+失败的学校=一个重要的问题
学校是怎么回事?在托尼·布莱尔时代,教育是头等大事:“教育,教育,教育”。这是每个父母都非常关心的事情(因此也是大多数成年人关心的事情)。然而,当政客们——相当正确地——谈论 NHS 的现金危机时,对困扰我们教育系统的问题的讨论却少得多。
本周,我们做了一些数据工作,预测未来几个月和几年需要的学校数量。
事实证明,像伯明翰这样的城市——那里的人口,特别是年轻人口,增长极快——到 2021 年 9 月将需要 12000 个名额,到今年 9 月需要 5000 个。
Read the story here
当然,不仅仅是伯明翰。数据单元的克莱尔·米勒也为许多其他地方写了基本相同的故事,包括 T2 利兹 T3、T4 巴斯 T5 和剑桥 T7。
与此同时,学校可花的钱越来越少,正如克莱尔本周所展示的,许多失败的学校多年来一直在努力寻找学院的赞助。
世界上两个商店扒手…
该小组的安妮·高克做了一些分析,发现在美国部分地区,入店行窃的比率急剧上升。原因?嗯,你可以振振有词地将这种低层次的贪婪犯罪与紧缩、工资停滞和生活成本上升联系起来。
但是这些数字并不能方便地与被剥夺联系起来,而且在任何情况下,店主自己都有另一种解释:法律的改变意味着警察不会调查价值低于 200 英镑的物品的失窃。
Read the story here
自从法院裁定收养应该是最后的解决办法后,收养率直线下降
多年来,委员会和机构已经花费了大量的时间、金钱和努力来促进收养。
尽管如此,我们本周透露,在上一个财政年度,英国大部分地区找到永久新家的被照看儿童数量显著下降。
我是说意义重大。例如:布里斯托尔有 25 例这样的收养,低于前一年的 45 例,而赫尔的数量从 2013/14 年的 90 例下降到今年的 45 例。在整个东北部,2013/14 年度有 390 起,但 2016/17 年度只有 300 起。
收养机构表示,关键的变化是由最高法院和上诉法院做出的两项法院裁决,这两项裁决明确表明了将孩子归还给亲生父母、大家庭或养父母的偏好。
你可能会说这是件好事。这可能确实是一件好事。但是我们也发现接受看护的儿童数量并没有下降。因此,我们不能假设一个快乐的结局:事实上,数据中没有充分的理由认为儿童错过了被收养的机会,因为他们被送回了亲生父母身边。
4 空房子,价格上涨
因此,我们看了一下关于空置房屋数量的新数据,它在全国范围内发出了相当严峻的信号——特别是当无家可归者的比率回到自 2004 年峰值以来从未见过的水*时。
你可能会认为让房屋空置可能意味着需求不足和随之而来的供应过剩,从而导致价格下跌。不幸的是,情况似乎并非如此:例如,在格里姆斯比,有 3000 多套空置房产,但*均价格仍是*均工资的 5 倍。
Read the story here
5 其他材料
安妮·高克(Annie Gouk)表示,在像 T2 肯特(Kent)和 T4 利兹(Leeds)这样的地方,宗教和种族仇恨犯罪达到了创纪录的水*(这是多么反常的一件好事),而黛比·阿鲁(Deb Aru)透露,尽管求助需求不断增加,但在雷丁(Reading)这样的地方,性健康支出却下降了一半。
在体育方面, David Dubas-Fisher 和 Carlos Novoa 为切尔滕纳姆金杯重建了他们的“使用数据挑选你的马”小工具,而它再次让我非常失望。
你仍然可以在不同的 Trinity Mirror 网站上试用这个小工具(看看你是否能反向工程出真正的赢家,因为我不知道我能不能做到),例如这里的或这里的或这里的。
本周我最喜欢的一个版面是这个,Alice Cachia 和 Kelly Leung 披露了越来越多的骑自行车的人死于路面坑洼:
最后,这是我做的一张奖金图,显示了每个地方政府中自称是爱尔兰裔的人的比例。
结论:如果你想度过一个美好的圣帕特里克节,去伯明翰、曼彻斯特或伦敦吧。
祝你周末愉快。
本周三位一体镜报数据单元的亮点是:对被看护儿童的深入调查,查明有逃学问题的学校,以及揭露一波“不加区别的”国民保健服务罚款
原文:https://towardsdatascience.com/highlights-from-the-trinity-mirror-data-unit-this-week-deep-dive-investigation-into-children-in-5da3ef7cc0e0?source=collection_archive---------8-----------------------
上周没有综述,但我们从上周五开始就一直很忙,所以我将把这限制在我们自那以来所做的一些事情上。
被照管的儿童:一个深入的数据项目
数据记者 Annie Gouk 对围绕重要社会问题的当地数据进行了多次“深度”调查。你可以在这里看到她以前围绕种族不*等的一些作品,或者在这里看到性别差距的不同方面。
本周——实际上是今天——我们发表了她对在看护环境中长大的儿童的生活机会的最新调查。除此之外,还有一些令人震惊的新闻:例如,利兹只有 5%的被看护儿童会被收养,而默西塞德被看护的儿童被判有罪的可能性是其他儿童的两倍。
View this video here
但这不仅仅是新闻热线。Annie 还讲述了一系列 explainer 视频(你可以在下面的链接中找到),视频采访案例研究,并与编码器 Carlos Novoa 和设计师 Kelly Leung 合作,创建了一个邮政编码搜索互动,让读者可以获得他们当地受照顾儿童的大量数据。这一点很重要:你越是将新闻个性化,读者的反应就越强烈。
通过安妮在这里开始的线索,你可以看到许多三一出版社的报道:
无家可归——猜猜看,它正在上升
在全国范围内,无家可归者——不要与露宿街头混淆——自 2010 年以来一直在攀升,并在 21 世纪初达到顶峰。
任何不是因为自己的过错而失去家园的人正式成为无家可归者,重新安置他们的责任落在了当地议会的肩上。众所周知,地方议会受到了预算大幅削减的打击。结果,你得到了一场完美的风暴:更多的人失去了他们的房子,而议会却没有足够的资金和人员来为他们寻找新的房子。
Rob Grant 对最新的无家可归人数做了一些地方层面的分析,发现在许多地区无家可归人数不再攀升,而是直线上升。在城市中尤其如此。例如,在考文垂,Rob 发现在临时住所的无家可归家庭的数量在一年内几乎翻了一番,为《每日电讯报》提供了这样的头版:
你可以在这里阅读完整的故事,或者谷歌其他版本的 Rob 写的该集团的其他标题。
与此同时,该部门的 Deb Aru 正在调查无家可归的家庭在处理他们的住房福利申请时如何面对邮政编码抽签。(见她为伯明翰写的故事这里举例。)随着越来越多的人宣布无家可归,资金短缺的议会无力应对官僚主义,等待的时间越来越长。如我所说:一场完美风暴。
逃学的孩子,父母被罚款
本周,我们查看了大量与逃学和其他父母/孩子不良行为相关的数据集。这是影响最大的两个。
首先,克莱尔·米勒分析了全国各地因带孩子在学期中度假而被罚款的父母人数。
这在沃里克郡引起了轰动,从利兹到莱斯特,从萨默塞特到克罗伊登,各种头衔都有很棒的台词。
其次,我们对政府的旷课数据做了一些法医分析,这让我们能够找出每一个三位一体镜像区域中未经授权缺勤率最高的学校。
事实证明,这些故事非常受读者欢迎,有许多版本——包括这个给肯特的版本——在最受欢迎的故事排行榜上名列前茅(顺便说一句,肯特学校的校长把它的位置归结为对假期的零容忍政策)。你可以通过搜索找到我们做的各种其他版本,例如赫尔这里或者伯明翰这里。
打嗝去 A 和 E
你不会的,对吧?好吧,根据英国国民健康保险制度公布的新数据和安妮的分析,如果你这样做了,那么你会在去年的其他 42 人中。
总共有 22,000 人去了 A 和 E,他们有明显的轻微抱怨,包括打喷嚏、喉咙痛(默西塞德郡有 76 人这样做),以及鼻塞(大曼彻斯特有 30 人这样做)。
正如一位顾问向安妮指出的那样,这些人不是我们 NHS 面临压力的根源。许多人试图从其他地方获得帮助,但都失败了。但是他们在医院的出现,充其量是一个迹象,表明整个系统正在努力在正确的时间,正确的地点,以正确的方式对待人们。
你可以在这里阅读安妮为伯明翰写的版本——这是出版当天阅读量最大的新闻报道。
患者推翻“不分青红皂白”的 NHS 牙科罚款
罗布透露了英国国家医疗服务体系是如何发出数万张罚款通知,要求支付牙科服务费用的——尽管事实证明,有问题的病人有权享受免费医疗。
以德文郡为例:在发出的 16,000 张罚单中,四分之一被成功质疑。类似的比例在巴斯、莱斯特、纽卡、伯明翰——基本上到处都被成功挑战。
英国牙科协会对这种情况很不高兴,他告诉罗伯:“可悲的是,根除欺诈的强硬言论与完全不加区别的罚款方式齐头并进。”
暴露狂和偷窥者数量的增加 TOMS
安妮一直在做一项数据调查,以了解“偷窥”犯罪的数量是否一直在上升,这种犯罪是指像“穿裙子”这样的闪光和性间谍犯罪。
令人沮丧的是,事实证明,他们已经做到了,几乎遍布全国。
Read the story here
Read the story here
乐观的解释是,这反映出警方对这些犯罪的认识和采取行动的意愿有所提高。
但是,正如妇女*等党对安妮说的那样:“不管这是因为更多的人站出来,更多的犯罪意识,还是更多的事件,要解决这个问题,我们必须明白,偷窥和暴露犯罪是暴力侵害妇女和女孩行为的一部分。”
你可以看到《安妮故事》的其他版本,比如在这里阅读和在这里阅读的《诺丁汉(那里的人数翻了一番)】。
我们做的其他新闻
随着周末寒流的预测,我们开始关注是否会有破纪录的天气出现。提供了关于令人担忧的极右极端主义崛起的地方数据和分析;揭示了在包括伯明翰在内的一些地区,阿拉伯语和乌尔都语现在比德语更受欢迎。并展示了议会如何削减预防酗酒的开支,尽管酗酒使住院人数创下纪录。
我已经没有空间来容纳我们所做的所有体育内容了,为此我向我们杰出的体育数据记者大卫·杜巴斯·费舍尔道歉——我会在下周首先提到它。我将以我们本周做的一份日报来结束这篇文章,关于在英国国民医疗服务系统工作的外国医生的数量。祝你周末愉快。
本周三位一体镜像数据单元的亮点
原文:https://towardsdatascience.com/highlights-from-the-trinity-mirror-data-unit-this-week-e9e811cf62d9?source=collection_archive---------10-----------------------
好吧,这实际上是两周的集锦。上周五,我正在参观我在东中部的精神家园,没有时间去参观。
犯罪:当地情况
一句话,可怕。本周发布的内政部记录的犯罪数字呈现了一幅几乎无处不在的可怕画面。暴力犯罪、持有刀具和其他武器、入室盗窃——都在上升,而且上升得很快。
Claire Miller 和 Deb Aru 做了很好的工作,检查了每个警察部队的数据,并把他们的发现写在整个小组的标题上,导致了(令人沮丧但必要的)这样的报道:
Read the full story here
或者这个:
Read the full story here
他们发现了几行字:大曼彻斯特现在是全国犯罪率最高的地方;达勒姆的犯罪率在一年内上升了 40 %,比其他任何地方都要高;杜伦和诺森比亚现在的犯罪率都比伦敦高。
这个故事表明了一个数据记者(或记者团队)查看所有领域数据集的价值。这给了他们一个很好的鸟瞰图。如果你只看一个特定的警察队伍,你可能没有这样的背景。
如果你的自行车被偷了,不用麻烦去报警
大多数人都知道自行车盗窃案的破案率很低。但是有多穷呢?有特别的热点吗?
Rob Grant 决定在超本地水*上分析这些数据来找出答案。
在考文垂的福尔希尔区,2017 年发生了 64 起盗窃案。
有多少嫌疑犯被确认了?
零。
其他地方也是如此:例如伯明翰的 Edgbaston,那里发生了 99 起自行车盗窃案,却没有确定犯罪嫌疑人。
Read the full story here
显然这不是好消息。但值得指出的是,我们只知道这些事情,因为英国公开的警察数据是好的,并且一直在改进。发布(比方说)整个警队级别的年度数据集(如上例)和发布个人犯罪的详细信息有很大的不同。我们的政府和警察双管齐下,虽然我们可能不喜欢出现的故事,但我们应该感谢有机会找到它们。美国的犯罪数据更好,但许多国家的情况更糟。
Read the full story here
英国退出欧盟:还是一团混乱
Trinity Mirror 联合其他地区媒体组织主持了一项关于英国退出欧盟的谷歌调查。它收到了超过 20 万份回复,我相信这是这类调查的最高记录。
现在,你可以争论这类调查的价值:完全有理由指出,它们不像民意调查那样具有人口统计学权重,你可以(事实上应该)将这一点与回应的规模进行对比。
在任何情况下,我们的角色是挑选线条,并找到一种方式将发现呈现给任何想要它们的人,无论是否在三一镜报集团内。
Claire 在她的文章中加入了一个公开的可视化画面,这并不是为了嵌入到我们的网站中,而是为了让记者可以使用这些数据。你可以在这里尝试一下。
调查的结果?人们想加入单一市场。他们对英国退出欧盟谈判深感关切。他们担心英国退出欧盟会让我们的情况变得更糟。
但是他们可能还是会投赞成票。
人们,嗯?
你可以从这一切中得到各种各样的东西。我从中得到的是,推动反对的不是对潜在经济风险的无知,而是对整个“收回对我们法律/边境/移民水*的控制”论点的信念,这种信念压倒了几乎任何其他考虑。
由此得出什么结论?好吧,如果你希望通过堆积经济证据或拙劣谈判的证据来说服英国退出欧盟选民改变忠诚,你可能会把头撞向砖墙。
对儿童肥胖的局部观察
我们知道观众喜欢的东西:(一)提供真正本地画面的精细数据;(二)邮政编码搜索互动,允许人们个性化的故事;(三)关于孩子变胖的故事。
本周公布的新数据显示,超重或临床肥胖的学龄儿童的比例,细分到委员会级别。
安妮·高克分析了这些数据,发现伦敦南华克的坎伯威尔格林(Camberwell Green)有最大的问题(字面上的意思)。那里大约 33%的 10 岁和 11 岁的孩子肥胖,还有 51%超重。
对坎伯威尔格林的人们来说是令人震惊的,真的。但大多数人都不是坎伯威尔绿人,也不会太在意那些绿人。
那么,对于其他人来说,为什么不给他们一种快速获得自己数据的方法呢?突然之间,你让可能感兴趣的人数增加了数百倍。
Try this out here
你可以在我们写的任何版本的故事上试用这个小工具,例如这个。
其他东西
安妮根据对食物银行使用的最新数据的分析提供了地区性的故事;《曼彻斯特晚报》的夏洛特·考克斯将这些纳入了一个关于实际使用食物银行的人的更广泛的专题。这是一篇很棒的文章,也是一个很好的例子,说明了地方中心可以如何建立在我们的工作基础上:
Read the full story here
我们还报道了越来越多的人因枪伤而住院(例如在伯明翰和 T2,伦敦西部,T3),并披露了监狱中数量破纪录的袭击事件,在地方层面,在你看到全国报道的前一天,在 T4。
我们的体育新闻包括这条关于富勒姆可能在今年的锦标赛中创造最不受欢迎的记录的新闻。
最后,我们非常高兴地在#newsawards18 获得了国际印刷创新奖,这是因为我们为整个集团的出版物制作的每日和每周基于数据的印刷页面。为 Marianna Longo,Alice Cachia,Kelly Leung 和编码天才 Carlos Novoa 欢呼!
我们也很高兴在今年的地区新闻奖中获得四项提名。这些对我们来说可能是最重要的,因为我们成立的目的是为三一镜报集团的地区报纸服务,并更广泛地支持地区新闻业。
我们作为一个团队入围了整体数字奖(几年前我们赢得了它,去年再次入围)和年度数字创新奖。
玛丽安娜·隆戈被提名为年度设计师候选人,安妮被提名为年度记者候选人。
我认为,最后一项对整个数据新闻业来说是一个巨大的进步。很高兴看到一名全职数据记者的调查工作与他们行业中最好的一起得到认可,对于我们所有相信数据新闻是主流新闻的人来说,这是一个潜在的突破时刻。
你可以在这里阅读更多关于安妮的作品。
祝你周末愉快!
本周三位一体镜报数据单元的亮点:选举、危险司机和超市抢劫
原文:https://towardsdatascience.com/highlights-from-the-trinity-mirror-data-unit-this-week-elections-dangerous-drivers-and-e2f82c0f4959?source=collection_archive---------10-----------------------
现在是下午 2 点,我在过去的 30 个小时里几乎没有睡觉,因为一个熟悉的朋友:议会选举。
它们并不迷人,但它们确实很重要——而且不仅仅是政治观点的风向标。议会不只是清空垃圾箱。他们照顾老人、脆弱的成年人和面临虐待风险的儿童。他们负责学校和图书馆。他们给无家可归的人提供了栖身之所。虽然读者不一定关心议会政治,但他们非常关心议会选举结果。
我们对待地方选举的方式一直是问我们如何为我们的网站增加最大的价值。对我来说,这是关于确保他们能以最快和最好的格式显示结果。有了大选,每个席位的结果都不难得到。在地方选举中,实际上只有一名当地记者在计票。
这是一个主要的竞争优势——如果你能利用它的话。
为了方便起见,我们与记者合作,在 Google Sheets 中建立候选人名单,看起来有点像这样:
然后,我们使用这些电子表格中的数据来支持移动友好的结果小工具。当晚,计票处(或新闻编辑室)的记者只需填写每位候选人获得的票数——因为是谷歌表单,所以可以合作完成。我们的系统将候选人按投票顺序排列,识别出获胜者,并计算出获胜者所在的政党是获胜还是保持领先。
结果几乎立即显示出来,如下所示:
你可以在这里看到这个特殊的结果小工具。今年,我们制作了超过 50 个,用于整个集团的标题,它们确实总是做得非常好。我们确实花时间提供其他工具(投票份额、总席位、波动等),以及夜间分析。然而,没有什么比让人们得到他们真正想要的信息更重要:他们的选区和他们的委员会的结果。
当我埋头于选举电子表格时,团队的其他成员却一如既往地忙碌着。
黛比·阿鲁利用公开犯罪表对危险驾驶进行了一些局部分析,得出了明显的结果。
Read the full story here
例如,在利兹,违法行为在过去的五年里增加了三倍,包括 31 起危险驾驶致死的案件。
道路安全慈善机构 Brake 告诉 Deb,这种增长是“令人震惊的”,并呼吁在道路交通执法方面进行新的投资,同时进行更严厉的判决。(我们以前写过交通警察是如何被削减的。)
Deb 还忙着写一份信息自由请求,显示全国范围内袭击救护车工作人员的数量在上升。仅举一个例子:在东中部地区,有 203 起袭击事件,包括 7 起性侵犯——其中两起看到受害者受到持刀威胁。在全国范围内,袭击事件的数量在一年内从 3495 起上升到 3701 起。
Read the full story here
UNISON 首席官员艾伦·洛夫豪斯告诉 Deb,这样的攻击使得“已经压力很大的工作几乎无法忍受”,并且“导致许多人离开他们热爱的工作”。
你可以在这里阅读格里姆斯比或拉夫堡的故事。
随着阿斯达-塞恩斯伯里合并的消息传出,罗布·格兰特决定搜集两家公司的大型商店的地址,以了解它们在同一邮政编码区的出现频率。答案?很多。这是威尔士的数据,这是布里斯托尔的数据。
Sainsbury's 已经表示没有关闭商店的计划,但是——正如 GlobalData 的 Patrick O'Brien 指出的——监管机构也可能会对一家有两家商店的公司采取措施。
印刷方面,《考文垂电讯报》大肆报道了我上周提到的安妮·高克的儿童肥胖分析:
Read the full story here
在体育方面,大卫·杜巴斯-费舍尔发现主队在点球大战中绝对没有优势,分析了英格兰低级别联赛中电视转播最多的球队,并观察了降级球队重返冠军宝座的频率(没有你想象的那么频繁)。
我把这个留给你,来自我们本周的报纸,它回答了一个问题:如果世界杯是基于言论自由的评级,它会如何发展?剧透:英格兰在四分之一决赛中被淘汰。但是,他们不总是这样吗?
滑稽的图表(和盗版)证明了相关性不是因果关系
原文:https://towardsdatascience.com/hilarious-graphs-and-pirates-prove-that-correlation-is-not-causation-667838af4159?source=collection_archive---------6-----------------------
现实世界中的 DS
说到讲故事,我们有一个问题。
然而这不是我们的错——作为人类我们生来就注定要寻找模式并解释为什么会发生。这个问题并没有随着我们的成长而消失,而是随着我们认为自己越聪明而变得越糟糕。我们说服自己,现在我们更老了,更明智了,更聪明了,我们的结论比年轻时更接*事实(风吹得越快,风车叶片转得越快,而不是相反)。
即使真正聪明的人看到了一种模式,并坚持对其做出解释,即使他们没有足够的信息来得出这样的结论。他们没办法。
这就是做人的道理。我们寻求对发生在我们周围的事件的解释。如果某件事不符合逻辑,我们会试图找到它可能有意义的原因。如果有什么不对劲,我们会弥补。
事后谬误
听说过拉丁语表达 Post Hoc,Ergo Propter Hoc ,意思是“在这之后,因此因为这”?这是“相关性并不意味着因果关系”这句话的基础,在统计学中也被称为“事后谬误”,因为这是一个我们都经常陷入的非常熟悉的陷阱。这是一个想法,当观察到事情按顺序发生时,我们推断首先发生的事情一定引起了接下来发生的事情。
事后谬误是导致足球经理只在比赛日穿紫色袜子的原因。他曾经穿着它们参加比赛,他的球队赢了。很明显,是袜子干的。现在他担心如果不穿它们去比赛,球队可能会输。该死的那些发臭的紫色袜子(他也不敢洗,怕神奇的仙尘洗出来)。
Post Hoc 也是雨人成为部落不可或缺的原因——他们相信他们的雨人可以让它下雨。雨人发现了远处酝酿的云,他跳舞直到它倾盆而下。通常不需要超过三四天的舞蹈,直到不可避免的事情发生。“雨人舞,水从天而降”。对雨人来说,印第安人不会说拉丁语是件好事,否则他就真的有麻烦了…
后海盗假设
对于后特设谬误的幽默观点,让我们看看 Pastafarianism。这是最*最流行的。没听说过?这是这个街区最新、发展最快的宗教之一。全称是 Pastafarian Sparrowism,是一种“充满活力的宗教,它试图通过先知杰克·斯派洛船长的一生,将飞行中的意大利面条怪兽短暂的爱带给我们所有人”。说真的,他们不是在开玩笑。嗯,事实上,他们是。他们提倡轻松的宗教观,反对在公立学校教授智能设计和神创论。他们还坚持认为海盗是最初的牧民。
为了证明相关性并不意味着因果关系,创始人 Bobby Henderson 提出了全球变暖是自 19 世纪以来海盗数量减少的直接影响的论点,并附有这张图表:
Pirates Caused Global Warming. Honest…
哇,看那条直线,我听到你们都说——海盗数量的下降和全球气温的上升之间显然有关联,所以这里肯定有和之间的因果联系,不是吗?是的,你们都陷入了事后谬误(我就知道你会)。
仅仅因为图中有一条直线并不一定意味着一件事导致了另一件事,特别是当你随机抓住两个看似不相关的变量,并把它们放在一起,看看它们之间是否存在某种微妙的关联。
以海盗和全球变暖为例,仔细看看 x 轴上的标签。注意到奇怪的事情了吗?除了相邻数据点的比例都不正常这一事实之外,还有一个问题是,其中有几个数据点已经被幽默地打乱,以故意欺骗。
我不知道你怎么想,但我是个信徒!一旦我写完这本书,我就放弃在公海上当海盗的统计数据。如果这是我做的最后一件事,我会阻止全球变暖。
可能会是…
我们中断这篇博文,为您带来突发新闻……
这篇博文摘自诙谐的新书真相、谎言和统计
下面是简介:
海盗、猫、墨西哥柠檬和北卡罗来纳律师。奶酪消费,人造黄油和从渔船上掉下来淹死。这本书什么都有。在这本令人大开眼界的书中,获奖的统计学家和作家李·贝克揭示了统计骗子用来欺骗、蒙蔽和愚弄粗心大意者的关键伎俩。作为一个外行人写的指南,用数据和统计来说明撒谎、欺骗和欺骗,没有一页是乏味的!一本书的八个机智章节的过山车,这可能是你今年会读到的最有趣的统计学书籍。
发现统计欺骗和有说服力的误导的令人兴奋的世界。
点击下面的链接,立即获得这本书……
[## 真相、谎言和统计数据
你被当成傻瓜了吗?一本书的 8 个机智章节的过山车,这可能是最…
www.chi2innovations.com](https://www.chi2innovations.com/truth-lies-and-statistics-book/)
器质性自闭症相关性难题
如果你在网上看看,有各种各样的幽默图表可以证明事后谬误。在过去 20 年左右的时间里,反疫苗运动有了巨大的增长,特别是在美国,并且已经“发现”了各种各样的虚假相关性,这些相关性“证明”疫苗接种计划和自闭症之间存在因果联系。与此同时,为了揭穿这些最荒诞的理论,其他同样荒谬的相关性也出现了。
有一篇发表的文章显示了美国有机食品的销售和自闭症诊断之间的相关性:
Organic Food Causes Autism. Oh My…
这对情节线之间有着非常紧密的相关性,甚至伴随着一个非常大的 r 值(接* 1)和一个非常小的 p 值(接* 0)。建议是——如果我们相信相关性意味着因果关系——有机食品和自闭症之间的相关性比目前存在的任何其他理论都更密切,因此它一定是原因。除了相关性不一定意味着因果关系,有机食品不会导致自闭症。那太荒谬了。这就是这些图表的全部意义。你所需要做的就是找到任何一对在同一时间段内增加的变量,用相同的 x 轴和不同的 y 轴将它们绘制在图表上,调整 y 轴刻度,直到曲线结合,然后——嘣——关联!如果,由于某种巧合和命运的魔力,存在一种统计上的相关性,那么就公布与之相伴随的 p 值作为额外的证明。这只是证明了相关性的存在,但并不能证明一件事导致了另一件事。有可能,但也有可能不会…**
柠檬死亡相关收敛
我也很欣赏这种相关性,它证明了墨西哥柠檬是美国道路上死亡的主要原因。等等,什么?我一定错过了那天的新闻——墨西哥柠檬正在杀死美国人?你打赌!
看看从墨西哥进口到美国的新鲜柠檬数量与 1996 年到 2000 年间美国高速公路上的总死亡率的关系图:
Mexican Lemons Kill Americans!
天啊,天啊,看看 R 的*方值——它真的必须为真。尽管图表似乎在告诉我们,美国的墨西哥柠檬越多,交通事故死亡人数就越少,但不可避免的结论是,墨西哥柠檬杀死了美国人!我们应该做些什么呢?我们应该进口更多的墨西哥柠檬吗(相关性告诉我们这是我们应该做的)?或者我们应该完全禁止墨西哥柠檬?毕竟,如果街上没有墨西哥柠檬,他们就不会再杀害更多的美国人。
真是一派胡言!我不在乎和是否有关联,没有任何迹象表明柠檬会导致事故。如果有,你不认为在卡车进入美国之前,柠檬会在墨西哥道路上造成事故吗?西西里柠檬怎么样?它们会导致意大利和整个欧洲的交通死亡吗?
哦,关联的力量。只要你的观众不明白相关性并不一定意味着因果关系,你就可以让他们相信几乎任何事情。
你忘了你的那本书了吗?别担心,它就在这里等着你:
[## 真相、谎言和统计数据
你被当成傻瓜了吗?一本书的 8 个机智章节的过山车,这可能是最…
www.chi2innovations.com](https://www.chi2innovations.com/truth-lies-and-statistics-book/)
原载于chi2innovations.com。
Hinton++
原文:https://towardsdatascience.com/hinton-1e6d26a64bd6?source=collection_archive---------2-----------------------
杰弗里·辛顿有所发现。他的机器智能模型依赖于他称之为“胶囊”的神经元簇,这是对我们自己的大脑如何理解世界的最好解释,因此也是对机器如何理解世界的最好解释。然而,总有改进的余地。胶囊未能解释我们对扭曲的理解——当面对不合语法的句子时,我们可以说出“蹒跚学步的是什么意思,当他的特征不对齐时,我们可以看到“如何重新排列土豆头先生”。胶囊仅识别面部,例如,当其部件的姿态正确时,没有关于如何修复变形的建议。我会试着对他的作品做些调整。
打住,什么是胶囊?
如果你没听说过胶囊也没关系。它们并不是一个新的话题——它们从 70 年代就藏在杰弗里·辛顿的脑海里了!从本质上来说,胶囊是一种克服几何变化的尝试。当我们观察一张纸上的正方形时,我们认出它是正方形,即使页面翻转或倾斜远离我们。那个正方形的“像素”发生了戏剧性的变化,而我们对“正方形”的 概念 保持不变。
人工神经网络不像我们一样用静态的“方块”来思考。辛顿创造了胶囊,这样 CNN 可以保持正方形的静态概念,即使这些正方形倾斜和旋转。人脸,汽车,任何东西都一样。胶囊通过记录辛顿所说的“姿势”来补偿几何失真。
一个物体的姿态描述了在视野中的位置,它的如何倾斜,它的相对大小,以及如何倾斜。总的来说,这些特性描述了当 3D 对象被简化为 2D 图像,并且这些对象在视场中移动时出现的失真。辛顿的核心见解是这样的:如果我看到一张脸,但那张脸是倾斜和旋转的,那么那张同样的倾斜和旋转被应用到脸的每一个部分。所以,如果我看到一张 2D 倾斜嘴巴的照片,我希望看到同样倾斜的眼睛和鼻子!
Hinton 的每个胶囊都在寻找脸部的部分——一个胶囊寻找鼻子,另一个寻找眼睛,第三个胶囊希望找到嘴。当这些胶囊中的每一个找到它们的物体的实例时,它们就会亮起来,说“我找到了一只眼睛/鼻子/嘴!”他们记录下各自目标的姿态,并将信息传递给高层胶囊,即面部胶囊。当面部胶囊接收到来自嘴巴、鼻子和眼睛胶囊的信号时,它会比较它们的姿势。一张真实的脸应该有相同的眼睛、鼻子和嘴的姿态数据。如果三个姿势都一致,那么脸部胶囊就会亮起,表示“我找到了一张脸”。这就是全部了。
我们示例中的面部胶囊有自己的姿势,它向检测上半身的更高层胶囊发送信号。如果肩膀,脖子和头发的胶囊都亮了,并且都同意一个姿势,那么更高层的胶囊也亮了。这种一致的级联反应一直持续到整个人被识别出来,并且类似的胶囊为每一种物体运作。主要思想是较大的对象由较小的对象组成,那些较小的对象期望彼此同意它们的相对排列。到目前为止,Hinton 的胶囊工作得相当好,分离和识别重叠的手写数字,精确度远远超过现有的神经网络。然而…
“我记得好像不太对劲……”
当他们期望的协议没有出现时,辛顿的胶囊绊倒了。如果眼睛完全侧着,嘴巴上下颠倒,那么“面部胶囊”就不会出现。面部胶囊是无声的,就好像根本没有面部部分*,* 一样,即使这些部分存在并且没有对齐。相比之下,我们会看着错位的面部特征说“这是一张脸,但是眼睛是横着的,嘴是上下颠倒的。”我们自己的“脸”神经元亮了,还有眼睛和嘴巴的神经元,尽管它们的姿势不一致!哎呀。
所以,让我们好好想想。我们大脑的某个部分看到了眼睛、鼻子和嘴巴,并且它们想要压缩这些信息。最简单的压缩就是称那堆混乱的东西为‘一张脸’,即使这些特征没有对齐。我们的大脑径直向前,点亮了“脸”神经元。然而,我们的大脑并不止于此。他们回去 检查 那压缩。“我把这种疯狂叫做脸,但是真的是脸吗?”我们的大脑似乎将“面部期望”投射回更低的层次,询问:“如果这是一张正常的面部,那么嘴巴、鼻子和眼睛的正常姿势会是什么样的?”
当姿势投影发生时,大脑使用它在压缩时确定的“脸”的姿势。“如果这个真的是一张脸,在我认为的方向上,那么嘴应该在这里,朝向这个方向,眼睛应该在这里和这里,朝向这个方向……”脸部的压缩产生了对其部分姿势的预期!
眼睛和嘴巴的实际姿势是与这些部位的预期姿势的比较。这就是我们的大脑记录错误的时候!“我看到了嘴、鼻子和眼睛,这让我相信有一张脸, ,但我认为这张脸对这些部分来说会有不同的姿势 。”我们的大脑记下这些错误,然后记住它们。额外的神经元必须被激活,以记录相对于预期的扭曲——嘴相对于脸对“嘴”的预期是颠倒的,眼睛相对于脸对“眼睛”的预期是侧向的。那些失真是附加的“相对姿态”数据。此外,我们的大脑会跟踪这些扭曲,同时还有检测脸部的神经元,这样我们就能在以后记住它们!
因此,将辛顿的胶囊与我们自己的大脑相比较,如上:
胶囊看到眼睛、鼻子和嘴,记录它们的姿势,并将这些姿势发送给面部神经元。面部神经元检查这些姿势是否一致;因为姿势不同意,辛顿的脸部神经元不火。它决定根本没有脸!
然而,我们的大脑模型记录了眼睛、鼻子和嘴巴的存在,并将这些信号发送给面部神经元。脸部神经元发出的信号,它停留在一个让最小化不协调的脸部姿势。也就是说,我们的大脑采取每个部分的姿势,并粗略地问,“如果所有这些部分组成一张脸,那么什么样的脸姿势最有可能?”然后,他们将那个姿势向下投射到眼睛、鼻子和嘴巴。因为嘴和眼睛的姿势不同于面部姿势,额外的“扭曲”神经元被触发,记录产生眼睛和嘴姿势的面部姿势的变化。我们的大脑说“有一张脸,但是它的部分是扭曲的。”我们,不像辛顿的胶囊,记得照片有什么问题。
猪脑猴脑
除了最小化姿势之间的不协调,我们的大脑也最小化相互竞争的解释之间的不协调。这个不和谐的概念有一个生物学上的对等物。我们的大脑向前发送许多信号,每个信号都在说“看我发现了什么!”然而,这些信号关注的是我们注意力的同一点,它们不可能都是正确的。所以,我们的大脑根据不和谐通过迭代抑制,在那些信号中找到最强的**。想象一下:你看着一幅画,这幅画可以被理解为一个披着披肩的老妇人或一个戴着帽子的年轻女子…**
在任何时候,这些解释中的一种都会胜出。然而,我们的大脑可以在两种观点之间跳跃。不知何故,写着“老女人的眼睛”的信号和写着“年轻女人的耳朵”的信号竞争。假设这幅画是彩色的——在一种颜色中,“耳朵”和年轻女子的脸颊一样晒成褐色,老妇人的幻觉消失了;在另一种颜色中,“眼睛”是带有一点绿色的白色,对年轻女性的诠释不屑一顾。每个观点依次强化,另一个因为不和谐而被压制。(“那可能是一只眼睛——等等,不,是肤色的。”或者“那可能是一只耳朵——等等,不,它有白色的巩膜和绿色的虹膜。”)
具体一点!
看着这种视错觉,我们的大脑触发了神经元,在某种程度上,这些神经元与年轻和年老的女性都相对应。在最高层次的意识中,只能存在一种解释。所以,当两种解释到达时,我们的大脑开始 抑制 一些导致每种解释的信号,直到一种解释比另一种解释被抑制得更多。大脑提取一些活跃的神经元,然后让它们安静下来。对于“年轻女人”的解释,我们看到她的鼻子,她的耳朵,下巴和项链。对“老女人”来说,那些相同的点被记录为眼睑、眼睛、鼻子和嘴。每一部分都有相互竞争的解释,我们的大脑开始忽略一个而偏爱另一个——相反,把年轻女性的下颌线称为鼻子,以观察那个是否会减少不和谐,或者把老女人的眼睛变成耳朵,希望解决分歧。
这种“击倒”或“逆转”输入直到分歧消失的概念,应用于 Hinton 的胶囊和姿势,可能看起来像这样:“我看到一碗水果”/“我看到一张笑脸”……“他们不可能都是对的……这是一只眼睛,还是一个苹果?我称它为一只眼睛,看看一种解释是否比另一种更有效,使用我的假设“……”是的,如果那个苹果是一只眼睛,那么这很可能是一张脸,而不是一个水果盘。从根本上说,这一过程要求高级神经元向低级神经元发回信号,低级神经元选择一个信号或另一个信号,低级神经元重新传输它们的信号,直到低级神经元与它们的高级解释产生最小的分歧。
从土豆头先生的例子可以看出,分歧可能不会完全消失。每一个较低级别的神经元传输它对所见事物的猜测——“眼睛”、“鼻子”、“嘴巴”,以及每一部分的姿势。这些部分和姿势传递到更高层,在那里它们点亮“脸”神经元…然而,这些部分的姿势不一致!嘴巴倒过来,眼睛完全侧着!我们的大脑不会丢弃“脸”神经元的信号——它们只是试图找到一种方法来最小化这种分歧。“或许是整张脸上下颠倒,解释了倒口?不,那不可能是对的,因为鼻子是正面朝上的,而眼睛的位置是正脸的正确位置。”“或者,是脸侧着,解释了不寻常的眼睛?不,因为那会把嘴和鼻子放在完全错误的位置。”所以,我们的大脑说"脸确实是竖直的,因为那个方向导致最小的不一致,但是脸的部分方向错误。“姿势不一致,而这种不一致并没有消失——我们的大脑只是尽可能地将这种不一致最小化。
接下来是什么?
一旦我们的大脑将分歧最小化,并确定了一个更高层次的解释,他们就会执行额外的一步:他们将更高层次解释的期望投射回更低的层次。这是与 Hinton 的胶囊的一个关键区别,对于迈向通用机器智能至关重要。
土豆头先生的脸虽然扭曲了,但整个脸的姿势是“*均的”。在具有相同*均姿势的正常人脸上,每个部分都有关联姿势——“一张直立的脸应该有直立的眼睛、鼻子和嘴巴”。我们的大脑从土豆脑袋先生那里取了一个*均的姿势,一个最小化分歧的姿势,然后把这个姿势投射回零件的预期姿势。只要预期的姿势与观察到的姿势不一致,我们的大脑就会记下:“对于这张直立的脸,我本以为会看到一张直立的嘴,但这张嘴是颠倒的!”(这种方法确保数据得到接*最优的压缩;我们的大脑会跟踪“主要观点”以及任何“特殊情况”。)后来,当我们回想我们所看到的东西时,我们不记得 只记得 看到一张脸——我们 也 记得它的嘴是倒着的。胶囊目前不记得这样的扭曲。
因此,我们在较高层次的抽象和较低层次的特征之间有两种方式的回响:1)竞争抽象(‘年轻女人’/‘老女人’)之间的任何‘*局’通过抑制他们的一些输入直到*局被打破来解决(即最小化不和谐);2)一旦一个抽象被认同(“直立的脸”),它的理想化的期望被投射回较低的层(“直立的眼睛、鼻子、嘴”),以找到任何分歧仍然存在的地方(“颠倒的嘴”)。我们的大脑会暂时忘记失去的抽象概念,但它们会记住我们的高层期望与低层观察不一致的地方。我们记得只看到了年轻女子或老妇人,而我们记得土豆头先生的嘴是上下颠倒的。
在实践中
我建议对辛顿的胶囊做一个简单的修复。通过随机梯度下降的反向传播仍然适用。仍然像 Hinton 描述的那样比较姿态向量。我们只需要对网络的前馈激活进行修改。
通常情况下,人工神经网络像方阵一样前进,从网络的最低层步进到最高层,从不后退。然而,我描述的模型有许多向后和向前运动的实例——当竞争的抽象抑制输入,直到确定一个单一的解释,当较高层的“*均姿态”向后投射,以确定其输入的姿态与预期不同的地方。这种神经网络 与 相呼应。
因此,在得出最终答案之前,网络从低到高被激发*,甚至激活输出层中的多个神经元。从输出层向后移动,网络抑制中间层神经元,直到单个输出神经元占主导地位。(“是啊,是个老女人。”)然后,该输出通过网络将其姿态期望发送回,以记录理想期望与观察值不同的地方*。(“是一张脸,但嘴巴倒过来了。”)输出层激活和低水*失真的结合是网络“真正”看到的,也是我们的神经网络应该“记住”的……不过,有效地存储这些记忆本身就是一个棘手的问题。这个我以后再说。
雇佣聪明的人,不要挡他们的路
原文:https://towardsdatascience.com/hire-smart-people-and-get-out-of-their-way-d152ecea56bc?source=collection_archive---------5-----------------------
雇佣聪明人并告诉他们该做什么是没有意义的;我们雇佣聪明的人,这样他们就能告诉我们该做什么。
有时候最直接的建议是最有价值的。史蒂夫·乔布斯用一句话阐明了领导一家公司所需的最有用的品质之一。在我自己的职业生涯中,我见过糟糕的管理者、好的管理者和伟大的管理者。对于那些从优秀走向卓越的人,我能说的一件事是——他们没有挡路。
我努力成为自己理想中的经理人。我也知道我在大多数时候都做不到。最困难的事情之一是在艰难时期成为一名好的领导者。而且,正如大多数艰难的事情一样,很少有真正的文章讲述如何在艰难时期成为一名伟大的领导者。
成为一名优秀的领导者
当环境稳定时,成为一个好的领导者是很容易的。当事情变得困难时,当你筋疲力尽时,当你不知道到底该做什么时,成为一个好的领导者会更加困难。对压力和疲惫的一个典型反应是微观管理。我已经看了一遍又一遍,我自己也至少掉进过几次那个陷阱。
更复杂的是,当你在一家初创公司时,很容易去一个团队并开始提供想法,朝着这个方向稍微移动一下,以找到导致短期收益的路径。可怕的重新排序。然而,当我回头看时,许多“有益的推动”只是阻碍了进步。虽然这听起来并不独特,但我已经艰难地认识到,这更多的是提供最终目标,让你的团队做他们最擅长的事情。这是我一直从我的经理那里得到的重视,也是我自己承诺要做的事情。
提供目标,而不是方向
关于一个领导者应该如何提供愿景和给出方向,有大量的信息。这是真的,但往往缺乏现实世界的感觉。提供视野是什么意思?在我看来,这意味着提供最终的目标,给这个目标一个目的,并帮助其他人在他们的工作中脱颖而出。下面是一个简单目标的糟糕例子:
我们希望一个新的系统能够以 X%的准确率运行,节省 X%的分析师时间。然后,我们可以讨论解决问题的潜在方法,我们愿意在开发时间和性能以及一系列其他假设之间进行权衡。
或者,我可以告诉他们,我们正在尝试回答一个问题或解决一个具体的棘手问题。即给他们一个有目的的目标。
我们需要开发一种量化工具,帮助我们的客户了解美国股市面临的重大媒体事件风险。理想情况下,我会把他们放在客户面前,让他们问问题。如果这是不可能的,我应该给他们尽可能多的领域知识。
我应该把自己看作一个间接的引导者,而不是具体活动的指导者。目标是给他们尽可能多的必要信息,以便他们将来在没有我参与的情况下做出最佳决策。在我看来,最好的方法是让他们首先提出问题并做出决定。
等等,有问题
两周后,他们遇到了一些问题。我们无法达到我们想要的精确度,我们的进展也没有我们想象的那么快。从领导力的角度来看,这里只有两种方法:
- 直接参与,准确地告诉人们使用什么算法,做什么调整,并重新定位项目。
- 和他们谈谈假设和他们遇到的困难。假设可以调整吗?他们试过另一种选择吗?我们问对问题了吗?我们有合适的领域知识吗?
第一种在短期内要舒服得多(假设你知道该做什么),第二种不仅会帮助他们成长和发展,而且很可能会带来更好的结果。你知道的比他们多吗?他们已经研究这个问题好几个星期了,而你只是插了一脚。
在这种情况下,良好的领导意味着根据证据审查或调整目标,从新鲜的角度提供一些想法,并让他们从那里选择做什么。传统公司中的领导力通常意味着表现得好像你总是知道自己在做什么。真正的领导力意味着承认你并不总是知道自己在做什么,并授权他人去发现。
一个真实生活的例子
我给你看一段我女儿妮娅的视频。不管出于什么原因,她决定爬上她的椅子。我不能和她很好地交流(她七个月大),但是她的目标很明确——学习!
我可以插话说她可能会受伤,或者危险地试图从椅子上跳下来没有任何实际好处,但我认为她会在一天结束时找到对她最好的事情。摔几跤没什么坏处。
招聘合适的人
如果这是我想要的领导方式,我应该如何招聘?这个很简单。雇佣比你更擅长工作的人。除此之外,如果有机会,你应该雇佣那些能够胜任新职位的人。如果你雇佣的是没有经验的人(这通常是非常有益的),要意识到你需要给这些人提供指导和辅导。
虽然我经常听到经理们宣称这是他们的意图,但他们的行动很少在实践中表现出来。
反省过去
如果你是一家公司的领导或经理,回想一下你上一次和你的团队开产品会议是什么时候。
- 你是如何行动的?
- 你只是提供目标吗?或者你有没有给目标一个目标和指导?
- 如果假设不合理或错误,你是否与他们一起调整目标?
- 你挡住他们的路了吗?
虽然一个好的领导者的品质是显而易见的,但领导远非易事。它是关于扔掉你的自我,每天自我反省,努力成为你想为之工作的人。如果你认为你擅长这个,那么你可能并不擅长。
雇佣数据科学家第一步:停止寻找数据科学家。
原文:https://towardsdatascience.com/hiring-data-scientists-step-1-stop-looking-for-data-scientists-9eb282a0f96b?source=collection_archive---------1-----------------------
亲爱的世界,
我们正在寻找一个人来填补我们商业模式中即将到来的空白。我们不确定你会做什么,但我们确信我们的股东会喜欢我们有数据科学家的想法。你将向不理解你工作的人汇报,当你向管理层提出你的解决方案时,你经常会遇到怀疑。候选人必须具备以下条件:
- B.计算机科学理学学士
- 米(meter 的缩写))定量领域的 Sc/PhD
- 3-5 年的研究工作经验,具有后端框架、应用程序开发、网站托管的经验,并对神经网络和统计方法有深入的了解
- 5 年编程经验
- 2-3 年数据库管理经验
- 在我们的领域(医疗保健、营销等)有 5 年的经验
- 具备 SQL、Python、R、Matlab、Java、C、C++的高级知识
- 2-3 篇在人工智能、自然语言处理或计算机视觉领域发表的研究论文(三者皆佳)
- 体验 Spark、Hadoop 和 Pig...和马
这个人几乎不存在
你认为世界上有多少人符合这个标准?这些人中有多少人拥有面向顾客、面向客户、面向管理层的软技能,同时还具有分析能力、创造力和智慧。我们向数据科学家提出了错误的问题,我们也找错了地方。奇怪的是,苹果公司的招聘广告通常不到 XYZ 咨询公司的一半要求。
数据科学家不可能在一家公司使用所有这些工具,更不可能有人知道所有这些语言。数据科学更多的是关于编程的智能使用,而不是编程本身。
你没有雇佣程序员。
不要再关注学位和证书,而是关注已被证明的真实世界的经验。它甚至不一定是一个正式的数据科学家。当我打算为我们的 ML 团队引进一名新成员时,我的主要目标是:
我们想要的:
- 聪明、探索、热情的人经验丰富。
- 有能力接受模糊的、不确定的想法,并把它们变成成品的人
我们提供的服务:
- 提供一个有趣的团队和策略,并给他们机会研究尖端技术
- 给他们成长的空间,了解他们想学什么,并帮助他们达到目的
- 团队中的每个人都是*等的
从最重要的事情开始
谈到数据科学,最难找到的技能与学位或具体的工作经验无关。正是探索的天性、对优化的追求、结果思维、永不放弃的态度和学习的意愿造就了一名优秀的数据科学家。如果你给我一个具备这些软技能、一些基本编程能力和对数学的理解的人,我保证他们会在相对较短的时间内成为一名伟大的数据科学家。当我打算在我的团队中招聘员工时,这些是最重要的技能。其他的都是肉汁。
诚然,学位和经验可以很好地判断能力。但这需要很高的成本——它极大地缩小了你希望从中提取的资金规模,并且它造成了一种确认偏差,从而我们继续推动越来越多的凭证。
这是我写的职位描述中的一小段:
期望
我们正在建立一个以高标准和卓越执行为荣的团队。对你的评价更多的是基于你的结果,而不是你的代码。基于客观的精英标准,责任、挑战和机遇将快速增长。
主要职责
-协助深度神经网络和传统机器学习模型的设计、开发和评估。
-协助创建可扩展、高效、自动化的流程,用于大规模数据分析、模型开发、模型验证和模型实施
-致力于成为以执行为导向的团队中的合作伙伴。
—注重结果—能够在紧迫的期限内完成出色的工作
创造一份你想做的工作
当我在招聘的时候,我会花几个小时在职位描述上。我写,我重写,我再写。我所扮演的角色符合我们团队的需求,有成长的空间,提供很好的学习机会,并提供一些令人兴奋的东西。没有这一点,随着时间的推移,人们会变得无聊和痛苦。确定特定角色的业务需求很容易,但通常很难准确定义您为什么需要数据科学家以及他们将做什么。你的工作是在开始搜索之前考虑清楚这一点。
可以肯定的是,工作中总会有人们不喜欢的部分,但每天去上班做自己讨厌的事情是一场悲剧。当我兴奋、积极、有动力地去工作时,我的工作效率是*时的 5 倍。作为团队领导,我必须为我的团队提供这样的环境。这对个人、团队和企业都是最好的。
经理应该写下自己的职位描述
如果你不能花 3-5 个小时写一份合适的工作描述,那么你就不够需要这个职位。
我读过的职位描述听起来都是人力资源部写的,这让我感到震惊。有时候感觉好像同一个职位描述被 100 个招聘人员反复循环使用。你常常不知道自己在做什么,团队是什么样的,或者你是否具备胜任这份工作所需的 35 项技能。
对人们的想法更感兴趣
由于我不是计算机科学家,也不是博士,所以可能有点偏颇(我是机械工程师)。我被教导如何把复杂的问题分解成更小的任务,就像程序员一样。然而,我真的相信,直到我的本科工程学位,没有人期望我去思考。这项技能被如此不充分利用和低估,令我震惊。
寻找能够批判性地、创造性地、聪明地思考的人是很难的。这就是寻找数据科学家如此困难的原因——理解如何获取数据、探索数据、理解数据,并以有价值的方式建模/呈现数据非常困难。获取数十亿个非结构化数据点并提取信息、转换信息、扩充信息以及生成可操作的数据/预测非常困难,并且没有预定义的规则或适用的系统。
也许数据科学家需要的最有价值的技能是在没有明确解决方案的情况下处理公开问题的能力。他/她需要能够在价值未定义时提供价值—他们通常需要理解这一点,并靠自己实现这一点。他/她需要能够从数百个潜在的结果中进行选择,以找到最适合当前问题和业务的结果。
真正的数据科学家:
- 理解价值创造的概念
- 了解业务
- 了解如何使用不同的技术和模型来为您的数据创造价值
- 有条不紊地处理复杂、开放的问题,并充满兴趣。
- 不需要成为一名优秀的程序员。
这会让你找工作更容易吗?大概不会。但是,至少你会寻找现实生活中的人,你会寻找合适的技能。当你强迫自己去寻找这种类型的人的时候,你强迫自己去思考为什么你首先需要一个数据科学家。
这对你更好,对你的团队更好,对你的公司更好。
雇佣最好的数据科学家
原文:https://towardsdatascience.com/hiring-the-best-data-scientists-fba389a5b3c1?source=collection_archive---------17-----------------------
Photo by rawpixel on Unsplash
你在这篇文章中找不到的是数据科学工具、学位授予程序的列表,或者估计填充 747 所需乒乓球数量的能力。这些并不能造就伟大的数据科学家。另一方面,如果你有一个具备以下三个特征的候选人,不管他们已经知道哪一套工具,那么你可以用你的组织使用的工具来训练他们。实际上,他们会训练自己。
特质#1:能够提出重要的问题
如果答案有影响,问题就很重要。通常,这意味着它驱动着一个重要的决策。对于一个企业来说,这可能是进入一个市场还是另一个市场的决定。对于一个非盈利组织来说,这可能是一个关于用什么策略来帮助那些需要帮助的人的决定。对于医生来说,这可能是决定使用何种药物来治疗患者的癌症。特质#1 是关于将我们数据科学家的自然好奇心引向重要目标的能力。这需要首先了解这些目标是什么,然后定义我们对数据提出的问题——即假设——以便答案会告诉我们如何实现我们的目标。
特质#2:确定问题已经被回答的能力,第 1 部分:逻辑思维
从数据到分析结果,从分析结果到关于假设的结论,每一步推理的正确性都是必须的。逻辑思维的一部分是演绎推理。另一部分是理解所有人的假设,并确认每个人都满意。
逻辑思维需要一个额外的重要组成部分:对知识诚实的承诺。这意味着不允许自己屈从于对特定结果的渴望。
特质#3:确定问题已经被回答的能力,第二部分:创造性思维
数据科学家必须积极尝试推翻自己的答案。这意味着要问这样的问题:什么是可能的混淆变量?原因和结果会和我想的相反吗,不管这有多违背直觉?有没有可能这些结果是由于两种或两种以上的效应在历史的这一刻碰巧结合在一起,而不是被重复?我的数据集代表真实世界吗?
特质 3 是创造性头脑风暴的一种形式。在所有三个特征中,它是最费工夫的一个。根据我的经验,这可能会导致进行几次额外的调查,每次调查的规模都与最初的调查一样大。投入精力做到这一点也需要对智力诚实的承诺。
为什么有必要?因为如果问题很重要,那么确保问题得到正确回答也很重要。正确回答这个问题可以决定数百万美元的商业收入是赚了还是赔了,需要帮助的人群是否得到了帮助,病人是否治愈。
数据科学家的好消息
如果你是一名数据科学家,这种思考数据科学家工作的方式对你来说是全新的,不要气馁。这三种特质是认知技能,通过学习形成工作习惯。它们不是本能的问题。这是一个好消息,因为无论你现在对这些特性运用得多或少,你都可以通过训练和有意识的使用来改善它们,直到它们成为习惯,就像它们需要的那样。
如何雇佣最好的数据科学家
如果你雇佣数据科学家,那么你知道软件、工具和数学技能是重要的考虑因素。评估这些应该是你面试过程的一部分。然而,我发现体现这三种特质的数据科学家也是最容易适应不同工具、技术和编程语言的人。
评估求职者这三种特质的一个简单方法是让他们简要描述一个或多个他们过去的项目,然后问他们许多后续问题,关于他们是否以及如何运用这三种特质。是什么让他们的项目变得重要(特质 1)?他们分析的假设是什么(特征 2)?他们如何检查他们命名的假设(特质 2)?他们还考虑了其他什么解释(特质 3)?
即使候选人只在学校项目(有时是玩具问题)中有过数据科学经验,他们对第一个问题(特质 1)的回答也可以揭示他们对问题背景的思考程度,而不仅仅是进行分析。他们对第二个和第三个问题(特征 2 和 3)的回答对学校项目和工作项目一样有意义。
这三个特征是任何类型的优秀科学家的特征。通过让你的候选人参与这种面试讨论,你就和他们一起参与了科学家参与的那种讨论。这有助于你确定他们是否是好的数据科学家。
您的额外福利
事实证明,在你的面试过程中包括上述内容有两个好处。首先,它复制了数据科学团队中发生的协作,从而让您了解候选人是否会很好地参与您希望您的团队进行的讨论。
第二,与你的候选人进行这些讨论强化了你作为招聘经理的三个特质。事实上,在这些讨论中,你的最佳候选人会挑战你。雇佣他们!
Boaz Super 是一位财富 500 强高管,领导着一家人工智能和数据科学组织;一个创业公司创始人;也是一所大学研究中心的创始人之一。
你可以通过Medium.com和 LinkedIn 联系到波阿斯。
Boaz Super 版权所有 2017–2018。保留所有权利。
这篇文章代表我的观点,不一定代表我雇主的观点。
直方图均衡
原文:https://towardsdatascience.com/histogram-equalization-5d1013626e64?source=collection_archive---------1-----------------------
图像对比度增强
柱状图
直方图是图像强度分布的图形表示。简而言之,它代表了所考虑的每个亮度值的像素数。
在上图中,X 轴代表色阶(左边为黑色,右边为白色),Y 轴代表图像的像素数。这里,直方图显示了每个亮度级别(从黑到白)的像素数量,当像素越多时,特定亮度级别的峰值越高。
直方图均衡
直方图均衡化是一种用于提高图像对比度的计算机图像处理技术。它通过有效地扩展最频繁的强度值来实现这一点,即扩展图像的强度范围。当可用数据由相*的对比度值表示时,这种方法通常会提高图像的整体对比度。这允许较低局部对比度的区域获得较高的对比度。
图像的颜色直方图表示每种颜色分量中的像素数量。直方图均衡化不能单独应用于图像的红色、绿色和蓝色分量,因为它会导致图像的色彩*衡发生巨大变化。然而,如果图像首先被转换到另一个颜色空间,如 HSL/HSV 颜色空间,则该算法可以被应用到亮度或值通道,而不会导致图像的色调和饱和度的改变。
自适应直方图均衡
自适应直方图均衡化与普通直方图均衡化的不同之处在于,自适应方法计算几个直方图,每个直方图对应于图像的不同部分,并使用它们来重新分配图像的亮度值。因此,它适用于提高图像每个区域的局部对比度和增强边缘的清晰度。
对比有限自适应均衡
对比度受限 AHE (CLAHE)在对比度限制方面不同于自适应直方图均衡。在 CLAHE 的情况下,对比度限制过程被应用于从其导出变换函数的每个邻域。开发 CLAHE 是为了防止自适应直方图均衡化可能引起的噪声过度放大。
实验结果
源代码
https://github . com/shree 6791/Deep-Learning/blob/master/CNN/Cats % 20 和%20Dogs/ca_do.py
Python 中的直方图和密度图
原文:https://towardsdatascience.com/histograms-and-density-plots-in-python-f6bda88f5ac0?source=collection_archive---------0-----------------------
用 Python 可视化一维数据
绘制单个变量似乎应该很容易。只有一个维度,有效地显示数据有多难?很长一段时间,我通过使用简单的直方图来显示值的位置、数据的分布和数据的形状(正态、偏态、双峰等)。)然而,我最*遇到了一些直方图失败的问题,我知道是时候拓宽我的绘图知识了。我找到了一本优秀的关于数据可视化的免费在线书籍,并实现了其中的一些技术。我没有把我学到的一切都留给自己,而是决定写一个直方图的 Python 指南和一个已经被证明非常有用的替代方法,密度图,这对我和其他人都有帮助。
本文将通过使用 matplotlib 和 seaborn 库,全面了解如何在 Python 中使用直方图和密度图。自始至终,我们将探索真实世界的数据集,因为有了网上可用的丰富资源,没有理由不使用实际数据!我们将可视化nyflights 13 数据,其中包含 2013 年超过 300,000 次对纽约出发航班的观察。我们将重点显示一个变量,即航班的到达延迟时间(以分钟计)。本文的完整代码可以从 GitHub 上的 Jupyter 笔记本中获得。
在开始绘图之前检查我们的数据总是一个好主意。我们可以将数据读入 pandas 数据帧,并显示前 10 行:
import pandas as pd# Read in data and examine first 10 rows
flights = pd.read_csv('data/formatted_flights.csv')
flights.head(10)
Head of Dataframe
航班到达延迟以分钟为单位,负值表示航班提前到达(事实证明,航班往往会提前到达,只是我们乘坐的航班从来不会提前到达!)航班超过 30 万次,最小延误-60 分钟,最大延误 120 分钟。数据框中的另一列是我们可以用来比较的航空公司名称。
直方图
开始研究单个变量的一个很好的方法是使用直方图。直方图将变量划分为多个区间,对每个区间中的数据点进行计数,并在 x 轴上显示区间,在 y 轴上显示计数。在我们的例子中,箱将是代表航班延误的时间间隔,计数将是落入该间隔的航班数量。二进制宽度是直方图最重要的参数,我们应该总是尝试一些不同的二进制宽度值,以选择最适合我们数据的一个。
要用 Python 制作一个基本的直方图,我们可以使用 matplotlib 或者 seaborn。下面的代码展示了两个库中创建等价图形的函数调用。对于绘图调用,我们通过面元的数量来指定面元宽度。对于这个图,我将使用长度为 5 分钟的仓,这意味着仓的数量将是数据范围(从-60 到 120 分钟)除以仓宽度,5 分钟(bins = int(180/5)
)。
Histogram (equivalent figured produced by both matplotlib and seaborn)
对于大多数基本的直方图,我会使用 matplotlib 代码,因为它更简单,但是我们稍后将使用 seaborn distplot
函数来创建不同的分布,熟悉不同的选项是有好处的。
我是怎么想出 5 分钟的宽度的?找出最佳 binwidth 的唯一方法是尝试多个值!下面是在 matplotlib 中用一系列 binwidths 制作相同图形的代码。最终,binwidth 没有正确或错误的答案,但我选择 5 分钟,因为我认为它最能代表分布。
Histograms with Different Binwidths
binwidth 的选择会显著影响结果图。较小的二进制宽度会使图变得杂乱,但较大的二进制宽度可能会模糊数据中的细微差别。Matplotlib 会自动为你选择一个合理的 binwidth,但是我喜欢在尝试了几个值之后自己指定 binwidth。没有真正正确或错误的答案,所以尝试几个选项,看看哪个最适合您的特定数据。
当直方图失败时
直方图是从一个类别开始探索单个变量的好方法。然而,当我们想要比较一个变量在多个类别中的分布时,直方图存在可读性问题。例如,如果我们想要比较航空公司之间的到达延迟分布,一种不太有效的方法是在同一图上为每个航空公司创建直方图:
Overlapping Histograms with Multiple Airlines
(请注意,y 轴已被归一化,以反映航空公司之间不同的航班数量。为此,将参数norm_hist = True
传递给sns.distplot
函数调用。)
这个情节不是很有帮助!所有重叠的条形图使得航空公司之间几乎不可能进行比较。让我们来看看这个常见问题的几种可能的解决方案。
解决方案#1:并排直方图
我们可以将它们并排放置,而不是重叠航线直方图。为此,我们为每个航空公司创建一个到达延迟列表,然后将它作为一个列表列表传递给plt.hist
函数调用。我们必须为每家航空公司指定不同的颜色和标签,这样我们才能区分它们。包括为每个航空公司创建列表在内的代码如下:
默认情况下,如果我们传入一个列表的列表,matplotlib 会将条形并排放置。在这里,我已经将 binwidth 改为 15 分钟,因为否则情节会过于混乱,但即使进行了修改,这也不是一个有效的数字。有太多的信息需要一次处理,条形图与标签不一致,而且仍然很难比较航空公司之间的分布情况。当我们制作一个情节时,我们希望观众尽可能容易理解,而这个人物没有达到那个标准!让我们看看第二个可能的解决方案。
解决方案 2:堆积条形图
我们可以通过向直方图调用传递参数stacked = True
来堆叠每个航空公司的柱状图,而不是并排绘制柱状图:
# Stacked histogram with multiple airlines
plt.hist([x1, x2, x3, x4, x5], bins = int(180/15), stacked=True,
normed=True, color = colors, label=names)
嗯,那绝对不会好到哪里去!在这里,每家航空公司都代表了每个仓位整体的一部分,但几乎不可能进行比较。例如,在-15 到 0 分钟的延迟时,联合航空公司或捷蓝航空公司的酒吧尺寸更大吗?我不知道,观众也不会知道。我一般不支持堆积条形图,因为它们可能很难解释(虽然有一些用例,比如可视化比例)。我们尝试使用直方图的两种解决方案都不成功,所以是时候转向密度图了。
密度图
首先,什么是密度图?密度图是根据数据估计的直方图的*滑、连续版本。最常见的估计形式被称为核密度估计。在这种方法中,在每个单独的数据点绘制一条连续的曲线(内核),然后将所有这些曲线加在一起,进行一次*滑的密度估计。最常用的核是高斯核(在每个数据点产生一个高斯钟形曲线)。如果你和我一样,觉得这样的描述有点混乱,看看下面的情节:
Kernel Density Estimation (Source)
这里,x 轴上的每条黑色竖线代表一个数据点。各个内核(本例中为高斯内核)在每个点上方用红色虚线表示。蓝色实线曲线是通过将各个高斯曲线相加得到的,并形成总密度图。
x 轴是变量的值,就像直方图一样,但是y 轴到底代表什么?密度图中的 y 轴是用于核密度估计的概率密度函数。然而,我们需要小心指定这是一个概率密度而不是一个概率。区别是概率密度是 x 轴上每单位的概率。要转换成实际概率,我们需要找到 x 轴上特定区间的曲线下面积。有点令人困惑的是,因为这是一个概率密度而不是一个概率, y 轴可以取大于 1 的值。密度图的唯一要求是曲线下的总面积积分为 1。我通常倾向于将密度图上的 y 轴视为仅用于不同类别之间相对比较的值。
锡伯恩的密度图
为了在 seaborn 中绘制密度图,我们可以使用distplot
或kdeplot
函数。我将继续使用distplot
函数,因为它允许我们通过一次函数调用进行多次分发。例如,我们可以制作一个密度图,在相应的直方图顶部显示所有到达延迟:
# Density Plot and Histogram of all arrival delays
sns.distplot(flights['arr_delay'], hist=True, kde=True,
bins=int(180/5), color = 'darkblue',
hist_kws={'edgecolor':'black'},
kde_kws={'linewidth': 4})
Density Plot and Histogram using seaborn
该曲线显示了密度图,其本质上是直方图的*滑版本。y 轴表示密度,默认情况下直方图是归一化的,因此它与密度图具有相同的 y 轴刻度。
类似于直方图的二进制宽度,密度图有一个称为 带宽 的参数,该参数会改变单个内核并显著影响图的最终结果。绘图库将为我们选择一个合理的带宽值(默认情况下使用‘Scott’估计值),与直方图的 binwidth 不同,我通常使用默认带宽。但是,我们可以考虑使用不同的带宽,看看是否有更好的选择。在情节中,“斯科特”是默认的,这看起来是最好的选择。
Density Plot Showing different Bandwidths
请注意,带宽越宽,分布越*滑。我们还看到,即使我们将数据限制在-60 到 120 分钟,密度图也超出了这些限制。这是密度图的一个潜在问题:因为它计算每个数据点的分布,所以可能会生成超出原始数据范围的数据。这可能意味着我们最终在 x 轴上得到不可能的值,而这些值在原始数据中从未出现过!请注意,我们还可以更改内核,这将更改在每个数据点绘制的分布,从而更改整体分布。然而,对于大多数应用程序,默认的内核,高斯和默认的带宽估计工作得很好。
解决方案 3 密度图
现在我们已经了解了密度图是如何制作的,它代表了什么,让我们看看它如何解决我们可视化多个航空公司的到达延迟的问题。为了在同一个图上显示分布,我们可以遍历航空公司,每次调用distplot
,将内核密度估计值设置为 True,将直方图设置为 False。绘制多家航空公司密度图的代码如下:
Density Plot with Multiple Airlines
最后,我们达成了一个有效的解决方案!有了密度图,我们可以很容易地在航空公司之间进行比较,因为这个图不那么杂乱。现在我们终于有了我们想要的图,我们得出结论,所有这些航空公司都有几乎相同的到达延迟分布!然而,数据集中还有其他航空公司,我们可以绘制一个稍有不同的航空公司,以说明密度图的另一个可选参数,对图表进行着色。
阴影密度图
填充密度图可以帮助我们区分重叠分布。尽管这并不总是一个好方法,但是它可以帮助强调发行版之间的差异。为了给密度图着色,我们将shade = True
传递给distplot
调用中的kde_kws
参数。
sns.distplot(subset['arr_delay'], hist = False, kde = True,
kde_kws = {'shade': True, 'linewidth': 3},
label = airline)
Shaded Density Plot
是否对绘图进行着色和其他绘图选项一样,是一个取决于问题的问题!对于这个图表,我认为它是有意义的,因为阴影帮助我们区分重叠区域中的图。现在,我们终于有了一些有用的信息:阿拉斯加航空公司的航班往往比联合航空公司更早更频繁。下次你有选择的时候,你就知道该选择哪家航空公司了!
地毯地块
如果您想要显示分布中的每个值,而不仅仅是*滑的密度,您可以添加地毯图。这显示了 x 轴上的每一个数据点,使我们能够可视化所有的实际值。使用 seaborn 的distplot
的好处是我们可以用一个参数调用rug = True
来添加 rug plot(也有一些格式)。
Density Plot with Rug Plot for Alaska Airlines
如果有很多数据点,地毯图可能会变得过于拥挤,但对于某些数据集,查看每个数据点可能会有所帮助。rug 图还让我们看到了密度图是如何在不存在数据的地方“创建”数据的,因为它在每个数据点创建了一个核分布。这些分布可能会泄漏原始数据的范围,并给人以阿拉斯加航空公司的延误时间比实际记录的时间更短或更长的印象。我们需要小心这个密度图的伪像,并指出给观众看!
结论
这篇文章有望给你一系列的选项来可视化一个或多个类别中的单个变量。我们甚至可以制作更多的单变量(单变量)图,如经验累积密度图和分位数-分位数图,但现在我们将把它留在直方图和密度图(还有地毯图!).如果选项看起来势不可挡,不要担心:通过练习,做出一个好的选择会变得更容易,如果需要,你可以随时寻求帮助。此外,通常不存在最优选择,而“正确”的决定将取决于偏好和可视化的目标。好的一面是,无论你想制作什么样的情节,在 Python 中都有一种方法可以做到!可视化是交流结果的有效手段,了解所有可用选项可以让我们为数据选择正确的数字。
我欢迎反馈和建设性的批评,可以通过 Twitter @koehrsen_will 联系到我。
人工智能的历史
原文:https://towardsdatascience.com/history-of-ai-484a86fc16ef?source=collection_archive---------1-----------------------
早期
第二次世界大战期间,著名的英国计算机科学家艾伦·图灵致力于破解德国军队用来安全发送信息的“谜”码。艾伦·图灵和他的团队创造了用于破译恩尼格玛密码的炸弹机器。
英格玛和庞贝机器奠定了机器学习的基础。根据图灵的说法,一台可以在人类不知道它是机器的情况下与人类交谈的机器将赢得“模仿游戏”,可以说是“智能的”。
Alan Turing in 1927.
1956 年,美国计算机科学家约翰·麦卡锡组织了达特茅斯会议,会上首次采用了“人工智能”一词。研究中心在美国各地涌现,探索人工智能的潜力。研究人员艾伦·纽厄尔和希尔伯特·西蒙在推动人工智能成为可以改变世界的计算机科学领域方面发挥了重要作用。
认真对待人工智能研究
1951 年,一台名为 Ferranti Mark 1 的机器成功地使用了一种算法来控制跳棋。随后,Newell 和 Simon 开发了通用问题求解算法来解决数学问题。同样在 50 年代,通常被称为人工智能之父的约翰·麦卡锡开发了 LISP 编程语言,这在机器学习中变得非常重要。
在 20 世纪 60 年代,研究人员强调开发算法来解决数学问题和几何定理。20 世纪 60 年代末,计算机科学家致力于机器视觉学习,并在机器人中开发机器学习。第一个“智能”人形机器人 WABOT-1 于 1972 年在日本制造。
艾特斯
然而,尽管几十年来这种资金充足的全球努力,计算机科学家发现在机器中创造智能非常困难。为了取得成功,人工智能应用(如视觉学习)需要处理大量数据。计算机还不够发达,无法处理如此大量的数据。政府和企业对人工智能失去了信心。
因此,从 20 世纪 70 年代中期到 90 年代中期,计算机科学家面临着人工智能研究资金的严重短缺。这些年被称为“人工智能冬天”。
新千年,新机遇
20 世纪 90 年代末,美国企业再次对人工智能产生了兴趣。日本政府公布了开发第五代计算机的计划,以推进机器学习。人工智能爱好者认为,很快计算机将能够像人一样进行对话、翻译语言、解释图片和推理。1997 年,IBM 的“深蓝”计算机成为第一台击败国际象棋世界冠军加里·卡斯帕罗夫的计算机。
Garry Kasparov & IBM’s Deep Blue.
21 世纪初互联网泡沫破裂时,一些人工智能资金枯竭了。然而,机器学习继续前进,这在很大程度上要归功于计算机硬件的改进。企业和政府在狭窄的领域成功地使用了机器学习方法。
计算机处理能力和存储能力的指数增长使得公司第一次能够存储大量的数据。在过去的 15 年里,亚马逊、谷歌、百度和其他公司利用机器学习获得了巨大的商业优势。除了处理用户数据以了解消费者行为,这些公司还继续致力于计算机视觉、自然语言处理和一系列其他人工智能应用。机器学习现在嵌入到我们使用的许多在线服务中。因此,今天,技术部门驱动着美国股市。
—
沙恩雷
关注 Lansaar Research on Medium,了解最新的新兴技术和新的商业模式。
简单码中卷积块的历史
原文:https://towardsdatascience.com/history-of-convolutional-blocks-in-simple-code-96a7ddceac0c?source=collection_archive---------6-----------------------
我尽量定期看 ML 和 AI 相关的论文。这是跟上最新发展的唯一方法。作为一名计算机科学家,我经常在阅读科学描述文本或公式的数学符号时碰壁。我发现用明码理解要容易得多。因此,在本文中,我想引导您浏览 Keras 中最*实现的架构中重要卷积模块的精选列表。
当你在 GitHub 上寻找流行架构的实现时,你会惊讶于它们包含了多少代码。包含足够数量的注释并使用额外的参数来增强模型是一个很好的实践,但同时这会分散对架构本质的注意力。为了进一步简化和缩短代码片段,我将使用一些别名函数:
def conv(x, f, k=3, s=1, p='same', d=1, a='relu'):
return Conv2D(filters=f, kernel_size=k, strides=s,
padding=p, dilation_rate=d, activation=a)(x)def dense(x, f, a='relu'):
return Dense(f, activation=a)(x)def maxpool(x, k=2, s=2, p='same'):
return MaxPooling2D(pool_size=k, strides=s, padding=p)(x)def avgpool(x, k=2, s=2, p='same'):
return AveragePooling2D(pool_size=k, strides=s, padding=p)(x)def gavgpool(x):
return GlobalAveragePooling2D()(x)def sepconv(x, f, k=3, s=1, p='same', d=1, a='relu'):
return SeparableConv2D(filters=f, kernel_size=k, strides=s,
padding=p, dilation_rate=d, activation=a)(x)
我发现去掉模板代码后,代码可读性更好了。当然,这只有在你理解了我的单字母缩写后才有效。让我们开始吧。
瓶颈块
卷积层的参数数量取决于内核大小、输入滤波器的数量和输出滤波器的数量。你的网络越宽,一个 3x3 的卷积就越贵。
def bottleneck(x, f=32, r=4):
x = conv(x, f//r, k=1)
x = conv(x, f//r, k=3)
return conv(x, f, k=1)
瓶颈块背后的思想是使用廉价的 1x1 卷积以一定的速率 r 减少通道的数量,从而使下面的 3x3 卷积具有更少的参数。最后,我们通过另一个 1x1 卷积再次拓宽了网络。
初始模块
Inception 模块引入了并行使用不同操作并合并结果的思想。这样,网络可以学习不同类型的过滤器。
def naive_inception_module(x, f=32):
a = conv(x, f, k=1)
b = conv(x, f, k=3)
c = conv(x, f, k=5)
d = maxpool(x, k=3, s=1)
return concatenate([a, b, c, d])
这里,我们将使用内核大小为 1、3 和 5 的卷积层与最大池层合并。这个片段展示了一个初始模块的简单实现。实际的实现将它与上面的瓶颈思想结合起来,这使得它稍微复杂一些。
Inception Module
def inception_module(x, f=32, r=4):
a = conv(x, f, k=1)
b = conv(x, f//3, k=1)
b = conv(b, f, k=3)
c = conv(x, f//r, k=1)
c = conv(c, f, k=5)
d = maxpool(x, k=3, s=1)
d = conv(d, f, k=1)
return concatenate([a, b, c, d])
残余块
ResNet 是由微软的研究人员推出的一种架构,它允许神经网络拥有任意多的层,同时仍然提高了模型的准确性。到现在为止,你可能已经习惯了,但在 ResNet 之前,情况并非如此。
def residual_block(x, f=32, r=4):
m = conv(x, f//r, k=1)
m = conv(m, f//r, k=3)
m = conv(m, f, k=1)
return add([x, m])
想法是将初始激活添加到卷积块的输出中。这样,网络可以通过学习过程决定输出中使用多少新卷积。注意,初始模块连接输出,而残差块将它们相加。
ResNeXt 块
根据它的名字,你可以猜测 ResNeXt 和 ResNet 有密切的关系。作者将术语基数引入卷积块,作为宽度(信道数量)和深度(层数)的另一个维度。
基数是指一个块中出现的并行路径的数量。这听起来类似于以并行发生的 4 个操作为特征的 inception 块。然而,基数 4 将简单地使用相同的操作 4 次,而不是并行使用不同类型的操作。
如果它们做同样的事情,为什么要把它们放在一起呢?好问题。这个概念也被称为分组卷积,可以追溯到最初的 AlexNet 论文。虽然,当时它主要用于将训练过程分割到多个 GPU,而 ResNeXt 使用它们来提高参数效率。
def resnext_block(x, f=32, r=2, c=4):
l = []
for i in range(c):
m = conv(x, f//(c*r), k=1)
m = conv(m, f//(c*r), k=3)
m = conv(m, f, k=1)
l.append(m)
m = add(l)
return add([x, m])
这个想法是把所有的输入通道分成组。卷积将只在它们专用的通道组内起作用,而不是跨越所有的通道。人们发现,每一组将学习不同类型的功能,同时增加重量的效率。
想象一个瓶颈模块,首先使用压缩率 4 将 256 个输入通道减少到 64 个,然后将它们作为输出恢复到 256 个通道。如果我们想要引入基数 32 和压缩率 2,我们将使用 32 个 1x1 卷积层,每个并行 4 (256 / (32*2))个输出通道。之后,我们将使用 32 个 3×3 卷积层和 4 个输出通道,然后是 32 个 1×1 卷积层,每个卷积层有 256 个输出通道。最后一步包括添加这 32 条并行路径,在添加初始输入以创建剩余连接之前,为我们提供单个输出。
Left: ResNet Block — Right: RexNeXt Block of roughly the same parameter complexity
这需要消化很多东西。使用上面的图像来获得正在发生的事情的可视化表示,也许可以复制片段来自己在 Keras 中构建一个小网络。我复杂的描述可以用这简单的 9 行代码来概括,是不是很牛逼?
顺便说一下,如果基数等于通道的数量,我们将得到一个叫做深度可分卷积的东西。自从引入 Xception 体系结构以来,这种方法越来越受欢迎。
密集块
密集块是残差块的极端版本,其中每个卷积层获得块中所有先前卷积层的输出。首先,我们将输入激活添加到一个列表中,之后我们进入一个循环,该循环遍历一个块的深度。每个卷积输出也连接到列表,以便后续迭代获得越来越多的输入特征地图。这种方案一直持续到达到所需的深度。
def dense_block(x, f=32, d=5):
l = x
for i in range(d):
x = conv(l, f)
l = concatenate([l, x])
return l
虽然需要几个月的研究才能得到一个和 DenseNet 一样好用的架构,但实际的构建模块可能就是这么简单。令人着迷。
挤压激励块
SENet 在短时间内是 ImageNet 上最先进的技术。它建立在 ResNext 之上,专注于对网络的信道信息进行建模。在常规卷积层中,对于点积计算中的加法操作,每个信道将具有相同的权重。
Squeeze- and Excitation Module
SENet 推出了一个非常简单的模块,可以添加到任何现有的架构中。它创建了一个微小的神经网络,学习如何根据输入对每个过滤器进行加权。如您所见,它本身不是卷积块,但因为它可以添加到任何卷积块中,并可能提高其性能,所以我想将其添加到组合中。
def se_block(x, f, rate=16):
m = gavgpool(x)
m = dense(m, f // rate)
m = dense(m, f, a='sigmoid')
return multiply([x, m])
每个通道被压缩成一个单一的值,并送入一个两层的神经网络。根据频道分布,该网络将学习根据频道的重要性对其进行加权。最后,这个权重与卷积激活相乘。
SENets 引入了微小的计算开销,同时潜在地改进了任何卷积模型。在我看来,这个街区没有得到应有的重视。
纳斯内特正常细胞
这就是事情变得有点糟糕的地方。我们正在离开人们提出简单而有效的设计决策的空间,进入一个设计神经网络架构的算法世界。NASNet 在设计上令人难以置信,但实际架构相对复杂。我们所知道的是,它在 ImageNet 上工作得非常好。
作者手动定义了不同类型的卷积层和池层的搜索空间,每个层都有不同的可能设置。他们还定义了这些层如何并行、顺序排列,以及如何添加或连接。一旦定义了这一点,他们就建立了一个基于递归神经网络的强化学习(RL)算法,如果特定的设计提案在 CIFAR-10 数据集上表现良好,就会得到奖励。
最终的架构不仅在 CIFAR-10 上运行良好,还在 ImageNet 上实现了最先进的结果。NASNet 由一个正常细胞和一个还原细胞组成,它们一个接一个重复出现。
def normal_cell(x1, x2, f=32):
a1 = sepconv(x1, f, k=3)
a2 = sepconv(x1, f, k=5)
a = add([a1, a2])
b1 = avgpool(x1, k=3, s=1)
b2 = avgpool(x1, k=3, s=1)
b = add([b1, b2])
c2 = avgpool(x2, k=3, s=1)
c = add([x1, c2])
d1 = sepconv(x2, f, k=5)
d2 = sepconv(x1, f, k=3)
d = add([d1, d2])
e2 = sepconv(x2, f, k=3)
e = add([x2, e2])
return concatenate([a, b, c, d, e])
这就是你如何在 Keras 中实现一个普通的单元。除了这种图层和设置的完美结合之外,没有什么新的东西。
反向剩余块
到现在为止,你已经听说过瓶颈块和可分卷积。让我们把它们放在一起。如果你运行一些测试,你会注意到,因为可分卷积已经减少了参数的数量,压缩它们可能会损害而不是提高性能。
作者提出了这样一个想法,即实际上做与瓶颈剩余块相反的事情。他们使用廉价的 1×1 卷积来增加通道的数量,因为下面的可分离卷积层已经大大减少了参数的数量。它在添加到初始激活之前关闭通道。
def inv_residual_block(x, f=32, r=4):
m = conv(x, f*r, k=1)
m = sepconv(m, f, a='linear')
return add([m, x])
这个难题的最后一部分是可分离卷积后没有激活函数。相反,它被直接添加到输入中。这种模块在应用于架构中时非常有效。
阿米巴网正常细胞
Normal Cell of AmoebaNet
有了 AmoebaNet,我们可以了解 ImageNet 的当前技术水*,也可能了解一般的图像识别。像 NASNet 一样,它是由一种算法设计的,使用与以前相同的搜索空间。唯一不同的是,他们用一种通常被称为进化的遗传算法取代了强化学习算法。不过,深入研究其工作原理超出了本文的范围。故事的结尾是,通过进化,作者能够找到一个比 NASNet 计算成本更低的更好的解决方案。它在 ImageNet 上获得了 97.87%的前 5 名准确率,这是单一架构中的第一个。
查看代码,这个代码块没有添加任何您没有见过的新内容。你为什么不试着在图片的基础上实现新的正常单元,看看你是否能跟上。
结论
我希望这篇文章让您对重要的卷积块有了一个坚实的理解,并且实现它们可能比您想象的要容易。要更详细地了解这些体系结构,请查看它们各自的论文。你会注意到,一旦你掌握了一篇论文的核心思想,理解其余部分就容易多了。还请注意,实际的实现通常会将批处理规范化添加到组合中,并根据激活函数的应用位置而有所不同。欢迎在评论中提问。
PS:我在考虑用简单的代码创建一个包含所有这些块和架构的存储库。这对你们有些人有帮助吗?
关于有效使用 Python NumPy 数组的搭便车技巧
原文:https://towardsdatascience.com/hitchhiker-tips-on-effectively-using-python-numpy-arrays-66649b7bd5fb?source=collection_archive---------5-----------------------
Tips on Effectively using NumPy Arrays
如果您正在使用 python 进行数据科学研究,那么您要么使用过 NumPy,要么肯定听说过它。大多数需要将数据存储在内存中的统计分析都使用 NumPy。
如果你是 NumPy 的新手,我强烈推荐你阅读我之前的文章python NumPy 数组的搭便车指南来了解 NumPy 的基本用法。
在这篇文章中,我将讨论一些具体的技巧、窍门和技术,它们将帮助你获得大多数 NumPy 数组
1.修改现有的 NumPy 数组
与 Python 列表不同,NumPy 没有
append(...)
函数,这实际上意味着我们不能追加数据或改变 NumPy 数组的大小。为了改变大小和/或维度,我们需要通过在旧数组上应用效用函数来创建新的 NumPy 数组。
从语法上来说,NumPy 数组类似于 python 列表,我们可以使用下标操作符来插入或更改 NumPy 数组的数据。例如,对于大小为 5 的 NumPy 数组,我们可以使用像while
和for
这样的循环来访问/更改/更新内容
Changing individual events of NumPy array
可以理解的是,这是一种非常过时的、非功能性的访问/操作数据的方式。幸运的是,NumPy 为 same 提供了批量访问功能,它在一行中毫不费力地做了同样的事情。一个这样的功能是numpy.put(...)
。
为了描述numpy.put(...)
的用法,我们将创建一个 python 列表并将该列表的内容复制到 NumPy 数组中
Using numpy.put(…) function
numpy.put(...)
函数获取一个范围,然后使用该范围从目的地复制源。副本将被限制在range(..)
功能中提供的数量。
在上面的例子中,如果我们将np.put(...)
线改为
np.put(np_arr, range(3), py_arr)
它将只改变np_arr
的前三个元素,其他的都不变
np.put(...)
函数的适用性不仅限于复制一维数组,还可以用于复制 n 维数组,如下面的代码所示
numpy.put(…) for multi dimensional array
使用np.put(...)
函数,我们可以提供一个数字列表,但是,在某些情况下,我们希望将相同的数字复制到 NumPy 的所有元素中。这类似于调用np.zeros(...)
或np.ones(...)
,区别在于除了 0 和 1 之外,还可以提供其他数字
这是通过调用
np.fill(...)
函数实现的。
无论我们在填充中提供什么数字(..),它适用于 NumPy 数组的所有元素,而不管该数组是一维数组还是多维数组
Using numpy.fill(…) function
.fill(..)
函数只接受标量值。
这里描述的是dtype=np.int
的例子。它也适用于所有其他数据类型,如np.float, np.str, np.object
等
2.切片 NumPy 数组
如果你有切割 python 列表的经验,在这里你会感觉像在家里一样。
切片 NumPy 数组带来了额外的功能,并且在多维数组的情况下变得有趣。然而,为了正确理解切片是如何工作的,我们需要在研究多维数组之前先研究一维数组。
:
被称为分隔符,与 相容—不相容 原理一起工作,这意味着分隔符的左侧将被包含,而分隔符的右侧将被排除。
例如,np_arr[1:4]
这样的语句意味着它将包括索引→ 1,但排除索引→ 4。因此这将有效地显示 Index → 1,2 & 3 中的元素
下面是一些对一维数组进行切片的例子以及它们的预期输出
Slicing 1-D arrays
切片的一个独特功能出现在 NumPy 数组中,但不能用于 python list 中,这就是用一个值就地改变数组的多个元素的能力。
老实说,这是非常有价值的功能之一,对数学和机器学习都有帮助。下面是使用该功能的方法
Slicing 1-D array
现在让我们来看一下多维数组的切片。当我们对多维数组进行切片时,分隔符左边和右边的含义保持不变(即索引),但我们通过使用两组逗号分隔的分隔符来扩展它,这两组分隔符代表行和列,即
[rows → Start_Index : End_Index, Column → Start_Index : End_Index ]
下面是一些例子,说明在 2D 阵列中切片意味着什么
Slicing a 2 — D Array
类似地,对于 3D 数组,我们必须为一个维度添加一个逗号分隔的值。这里有一些相同的例子
Slicing a 3-D Array
3.拆分 NumPy 数组
在某些时候,有必要将 n-d NumPy 数组分成行和列。拆分 numpy 数组有多种函数和方法,但是有助于按行和按列拆分 NumPy 数组的两个特定函数是split
和hsplit
。
split
功能用于行行行行的明智拆分hsplit
功能用于 列 的明智拆分
拆分 NumPy 数组的最简单方法可以在它们的维度上完成。一个 3 * 4 的数组可以很容易地分成 3 组行列表和 4 组列列表。下面是我们如何做同样的事情
NumPy Split Row and Column wise
如果多重因子允许分割,我们可以提供一个不同于分割可用维数的数。例如,我们可以将数组按列分为 2 组,如下所示
多重不均匀分裂
在上面的例子中,我们提供了一个数字来按行或列等分 NumPy 数组。
但是,通过提供需要拆分的精确索引,可以在不同的行和列上进行不均匀的拆分。
它的工作原理就像我们上面看到的切片一样。基于列表中提供的索引,这些拆分函数将相应地对行或列进行切片。
让我们假设我们有相同的 2D 数组如上所示,我想做自定义分裂。
情况 1:将 3 行分成[1]和[2,3]
在这里,我想将行分成两部分,我们提取第一行,然后将第二行和第三行合并为一行。我们将这样做
Splitting Rows
情况 2:将 4 列分为[1]、[2、3]和[4]
在这里,我想将列分成三部分,我们提取第一列,然后是第二+第三列,最后是第四列。我们将这样做
Splitting Columns
所以这是 NumPy 的一些小技巧,可以帮助你更好地使用它。
这就是这个故事的全部内容。更多关于下一组故事。
感谢阅读…!!!
达克什
探索性数据分析指南
原文:https://towardsdatascience.com/hitchhikers-guide-to-exploratory-data-analysis-6e8d896d3f7e?source=collection_archive---------3-----------------------
如何用 python 调查数据集?
- “我如何在数据科学/机器学习/数据分析领域获得 kickstart?”
- “当您拥有数据集时,我应该采取哪些初始步骤来建立与数据集的连接?”
- "在探索性分析过程中,如何定义一组针对数据集的问题?"
如果你正在寻找上述任何一个问题的答案,那么这个博客系列将真正帮助你开始。
那么,什么是探索性数据分析(EDA)?
探索性数据分析(EDA)是数据科学的一个重要组成部分,它允许您开发您的数据看起来像什么以及它们可能回答什么样的问题的要点。
最终,EDA 是重要的,因为它允许研究者做出重要的决定,什么是有趣的,什么可能不值得继续,从而利用变量之间的关系建立一个假设。
一点背景知识
这是一个由两部分组成的系列,我们将查看来自 Kaggle 的电影数据集,并对数据进行一些探索性分析。
我们将在本教程中使用 python。我建议您在继续阅读之前先复习一下 python 基础知识。我将向您介绍我在数据集上执行 EDA 的步骤。
TMDB 电影数据集可以在这里找到。收集数据有不同的方法,我们将在另一篇文章中讨论。作为一名数据分析师,我的工作是能够提出一系列问题,解读字里行间的含义,并找到这些问题的答案。
我把它分成了三个部分
- **清洗:**检查收集到的数据是否有问题,比如缺失数据或测量错误、列的数据类型等。)
- 定义问题:识别特别有趣或意想不到的变量之间的关系。
- 使用有效的可视化方式来传达我的结果(将在第第二部分中介绍)
我用过 jupyter 笔记本,因为我发现它们最适合数据清理、转换、数值模拟和数据可视化。Jupyter Notebook 的另一个优势是,您可以使用用于建模和可视化数据集的 Jupyter 笔记本,并将其用作技术演示的幻灯片。
这篇文章的代码可以在我的 Github 上找到:
[## harshi codes/tmdb _ movie _ data _ analysis
探索性数据分析开始挖掘这些问题,包括剧情、演员、剧组、预算和…
github.com](https://github.com/harshitcodes/tmdb_movie_data_analysis)
第一步是创建一个虚拟环境,您将在其中安装所有的软件包。下面是使用 pip 为我们安装 4 个包的命令。
pip install numpy pandas seaborn matplotlib
- Numpy:用 Python 进行科学计算的基础包。
- Pandas :为 Python 编程语言提供高性能、易于使用的数据结构和数据分析工具的库。
- Matplotlib :一个 Python 2D 绘图库,它以多种硬拷贝格式和跨*台的交互环境生成出版物质量数字。
- Seaborn :基于 matplotlib 的 Python 数据可视化库。它提供了一个高层次的界面来绘制有吸引力的和信息丰富的统计图形。
导入你需要清理、压缩和可视化的 python 包。我已经导入了包,第二部分(作为 pd )只是为了方便,这样我就不用写“ pandas ”。命令“每次我用它的时候。
从路径加载数据:
这里,我使用了 pandas 的 read_csv 函数,该函数返回一个快速有效的 DataFrame 对象,用于集成索引的数据操作。我有两个来自 movies_df 和 credits_df 的数据帧。
movies_df.head() 将显示数据帧的前 5 行。您可以将想要查看的行数传递给 head 方法。看看我们得到的数据框架:
在我们开始寻找这些数据中隐藏的答案之前,我们必须清理数据,为分析做准备。
#1 数据清理过程
数据清理是整个数据准备过程的第一步,也是非常关键的一步,是对杂乱的、原始的数据进行分析、识别和修正的过程。当分析组织数据以做出战略决策时,你必须从彻底的数据清理过程开始。
- 我们需要删除未使用的列,如 id,imdb_id,vote_count,production_company,keywords,homepage 等。从实际相关且简明的数据中做出决策总是更容易。
以下是从数据帧中删除冗余列的方法:
2.移除行中的副本(如果有):
3.数据库中的一些电影具有零预算或零收入,这意味着它们的价值没有被记录或一些信息丢失。我们将从数据帧中丢弃这些条目:
4.为了方便地操作这些列,使用 python 对象是很重要的。将发布日期列转换为日期格式,并从日期中提取年份,这将有助于我们分析年度数据。
5.类似地,使用 numpy 的 int64 方法将预算和收入列的格式更改为整数。
6.在检查数据集时,我们看到流派、关键词、生产公司、生产国家、口语都是 JSON 格式,这将在操作数据帧时生成。现在让我们将这些列展*成一种易于解释的格式。
我们将把它们转换成字符串,然后再转换成列表。编写一个通用函数来解析 JSON 列。
清理后,数据如下所示:
#2 确定变量/特征之间的关系
这里的主要目标是识别和建立可以帮助你建立假设的关系。我们必须定义一些能帮助我们建立一些关系的问题。
此时,我在研究这个数据集时产生了以下问题。您可能会提出一系列不同的问题,这些问题没有在下面列出:
- 哪 5 部电影最贵?两个极端之间的比较?探索最昂贵的电影,它可以告诉你,根据它们的性能和产生的收入,它们是否值得花在它们身上的钱。
2.由于我们需要比较 3 个问题中的最小值和最大值,我们可以编写一个通用函数来完成这项工作,并重用它。
2.最赚钱的 5 部电影?最小利润和最大利润的比较。这种比较有助于我们识别失败和成功的不同方法。如果我从产生的收入中减去预算,它将给出我获得的利润。
3.大多数人谈论电影。
4.电影*均播放时间?两个极端之间的比较。
5.分级在 7 级以上的电影
6.我们哪一年的电影最赚钱?
这将有助于你提出一些更深层次的问题,比如电影在哪些年份表现不佳,在哪些年份表现良好。这些都是初步的问题,这些问题引出了提供更深层次见解的问题。
让我们看看这些年来盈利电影的传播情况
为了找出盈利电影数量最多的年份,我们使用了 idxmax 方法:
这会给我们 2014 年。你可以在 Ipython 笔记本这里查看这些代码片段的所有输出。
现在,我们已经分析了这个数据集包含的内容,是时候尝试构建一个可以根据所选的特征/变量预测电影成功率的故事了。因此,我们需要确定使电影盈利的因素。
以下是一系列问题,可以引导我们朝着理想的方向前进
- 最成功的类型——柱状图解释了每种类型电影的出现频率。
- 电影中的常见演员——显示每个演员的电影谱的图。
- 盈利电影的*均预算——分配的*均预算是多少
- 最赚钱电影的*均时长。
- 最赚钱电影的语言。
以上所有问题的答案将帮助我们建立我们的假设,即 “制作一部卖座、赚钱的电影的秘诀是什么?”
在的下一篇文章中,我将讨论如何利用 Matplotlib 和 seaborn 库**来可视化(此过程中的第三步)**上述问题的答案。
我们将在下一部分(下面的链接)用所有的发现和想象来结束调查。
[## 探索性数据分析指南(下)
如何使用 Python 调查数据集?学习如何使用可视化来回答一些重要的问题。
towardsdatascience.com](/hitchhikers-guide-to-exploratory-data-analysis-part-2-36ab72201e1d)
Harshit 的数据科学
通过 Harshit 的数据科学频道,我计划推出几个涵盖整个数据科学领域的系列。以下是你应该订阅频道的原因:
- 该系列将涵盖每个主题和副主题的所有必需/要求的高质量教程。
- 解释了为什么我们在 ML 和深度学习中做这些事情的数学和推导。
- 与谷歌、微软、亚马逊等公司的数据科学家和工程师以及大数据驱动型公司的首席执行官的播客。
- 项目和说明,以实现迄今为止所学的主题。
你可以在 LinkedIn 、 Twitter 或 Instagram 上与我联系(在那里我谈论健康和福祉。)
注意:在这些黑暗的时期,自我隔离为自我提升腾出了一些空间,我们可以利用这些空间来发展新的技能、爱好,并帮助未来的自己。
探索性数据分析指南(下)
原文:https://towardsdatascience.com/hitchhikers-guide-to-exploratory-data-analysis-part-2-36ab72201e1d?source=collection_archive---------12-----------------------
如果您已经到达这里,我相信您已经完成了我们讨论过的第 1 部分
- 数据清理过程
- 确定变量之间的关系,并在数据集上定义探索性问题
从我们离开的地方继续,我们现在开始学习可视化如何帮助我们理解数据帧中的数字和模式。我们将使用 Matplotlib——据我和业内一些最好的数据科学家所说,这是最好的 Python 数据可视化库。
重温我们需要回答的问题,
- 最成功的流派。
- 电影中频繁的演员阵容。
- 盈利电影的*均预算。
- 最赚钱电影的*均时长。
- 所有盈利电影中使用的语言范围。
深入思考这些问题,你会发现我们需要所有盈利电影的清单。我们现在必须把研究范围缩小到赚钱的电影。这将有助于我们分析什么样的成分组合能产生一部轰动一时的电影。
我想到的下一个问题是,我们如何决定一部电影是否盈利?为此,我选择了一个随机的(但合理的)5000 万美元的利润数字,这是任何电影在盈利电影桶中占有一席之地的标准。
我是这样操纵电影的 _df:
我得到了利润数据框架,它包含了所有利润≥5000 万美元的电影。
来到问题#1
我们在利润数据帧的类型列中有类型列表,我们必须格式化这些字符串,这样我们就可以很容易地得到所有盈利电影中每个类型的数量:
流派栏现在看起来像这样
我们打算绘制一个条形图,帮助我们了解每种类型的电影在盈利电影中的成功之处,并对它们进行排名。
在我们开始绘制图表之前,我们需要了解一些事情。
Subplots: Matplotlib 有 Subplots 的概念,subplots 是一组较小的轴,它们可以一起存在于单个图形中。这些可以是插图、网格图或其他更复杂的布局。
Seaborn :基于 Matplotlib 用 python 编写的数据可视化库。重点是统计图表。该库是可视化单变量和双变量和分布图的良好资源,但 seaborn 有助于构建多图网格,让您轻松构建复杂的可视化。
我们在这里的问题是绘制出每种类型在所有盈利电影中的出现频率。我已经创建了一个熊猫系列,我可以使用 plot.barh()方法绘制它,下面是我是如何做到的:
我创建了一个列表,所有的流派都从“流派”列添加到这个特定的列表中,并扩展了列表 1。然后,我创建了一个系列,在这个系列上我使用了 value_counts()方法,该方法返回一个系列,其中包含每个流派的计数,如上面的要点所示。绘制这个数列给我们一个这样的柱状图
多田…!
从上面的柱状图我们可以看出,喜剧是所有盈利电影中最常见的类型。如果你想在好莱坞或其他电影行业赚点钱,这可以告诉你应该选择哪种类型。
问题 2
在类似的行中,我们能够得到盈利电影中最常见演员的类似情节,如下所示:
看看酒吧情节,塞缪尔·杰克逊是大多数电影成功背后的支柱。
问题 3
同样,我们有每种语言在盈利电影中的使用频率。
正如我们所料,英语是世界上最通用的语言。这很容易,但我们有证据。
除了这些可视化,我们还有其他非常有趣的情节要看。如果你有兴趣了解更多关于这些情节和设计模式所传达的信息,你可以浏览下面的链接。这将帮助你选择最恰当的方式来传达你的发现。
[## 选择一个好的图表
这里有一些我们想出来的帮助你考虑使用哪个图表。它的灵感来自《基因》中的表格…
extremepresentation.typepad.com](http://extremepresentation.typepad.com/blog/2006/09/choosing_a_good.html)
我们需要一些*均值(如问题 4、5 和 6 中所要求的)来总结我们的研究并阐明我们的假设。使用均值函数计算:
- *均运行时间
- *均收益
- *均预算
一旦你有了这个,你就能建立你的假设,在我们的例子中如下:
这是一项非常有趣的数据分析。我们得出了一些关于电影的非常有趣的事实。经过这一分析,我们可以得出以下结论:
对于制片人来说,一部电影要想盈利:
*均预算必须在 6300 万美元左右电影*均时长必须在 114 分钟以上其中任何一位应在演员阵容:塞缪尔·杰克森,罗伯特·德·内罗,摩根·弗里曼,布鲁斯·威利斯类型必须是:动作片,冒险片,惊悚片,喜剧片,剧情片。通过这样做,这部电影可能会成为热门电影之一,因此*均收入约为 2.62 亿美元。
因此,在研究了 TMDB 数据集后,我们得出了以下结论。
PS:我希望这一系列的帖子能帮助你开始用你有的其他一些有趣的数据集进行探索性的数据分析。如果您对上述任何内容有任何问题/意见/想法,请在下面发表评论。
HMTL -解决自然语言处理任务的多任务学习
原文:https://towardsdatascience.com/hmtl-multi-task-learning-for-solving-nlp-tasks-cfae39b3d6e1?source=collection_archive---------11-----------------------
通过在任务间转移知识实现 SOTA 结果
自然语言处理领域包括许多任务,其中包括机器翻译、命名实体识别和实体检测。虽然不同的 NLP 任务通常是分别训练和评估的,但是将它们合并到一个模型中存在潜在的优势,即学习一个任务可能有助于学习另一个任务并改善其结果。
分层多任务学习模型( HMTL )提供了一种学习不同 NLP 任务的方法,首先训练“简单”的任务,然后使用这些知识训练更复杂的任务。该模型展示了几个任务的最新表现,并对模型每个部分的重要性进行了深入分析,从单词嵌入的不同方面到任务的顺序。
背景
*年来的几篇论文表明,结合多个自然语言处理任务可以产生更好和更深层次的文本表示。例如,识别句子中的实体,如地名或人名,有助于在后续句子中找到对它们的提及。然而,并非所有的 NLP 任务都是相关的,选择对其他任务有益的相关任务是很重要的。
HMTL 模型关注四个不同的任务:命名实体识别,实体提及检测,共指消解,关系抽取。
- 命名实体识别(NER) -识别文本中的实体类型(如个人、组织、位置等。)
- 实体提及检测(EMD)——NER 的扩展版本,识别任何与现实生活中的实体相关的提及,即使它不是一个名字。
- 共指消解(CR)——对同一实体的提及进行识别和分组。
- 关系提取(RE) -识别实体并对它们之间的关系类型进行分类(如果存在)。关系的类型可以在这里找到。由于 RE 和 CR 在语义上的相似性,它们都在同一层级上。
下面的文字说明了任务之间的区别(一个很棒的演示可以在这里找到):
我们在西班牙的时候,我妈妈教我如何开车。她还解释了如何给它加油
所有四项任务都与识别文本中的实体以及它们之间的关系有关,具有不同的复杂程度——而 NER 是最简单的一项,认知无线电和认知无线电需要对文本有更深的理解。因此,学习一项任务可能有助于学习其他任务。
HMTL 模式
HMTL 是一个层次模型,在这个模型中,最初简单的任务,如 NER,被学习,然后他们的结果被用来训练接下来的任务。每个任务由三个部分组成:单词嵌入、编码器和特定于任务的层。
该模型的基础是使用三种模型将输入句子中的每个单词嵌入向量的单词表示法:
- 手套 —预先训练的单词嵌入。这个模型中的单词没有上下文,给定的单词总是用相同的向量表示。
- ELMo —预训练的上下文单词嵌入。单词的矢量表示不仅取决于单词本身,还取决于句子中的其他单词。ELMo 是胶水基准中表现最好的模特之一。
- 字符级单词嵌入-一种卷积神经网络,它根据字符级特征学习表示单词。这种表示对形态特征(前缀、后缀等)更敏感,形态特征对于理解实体之间的关系很重要。
此外,每个任务都用专用的编码器进行训练——这是一个多层递归神经网络,可以生成为任务量身定制的单词嵌入。编码器使用双向 GRU 单元网络实现,其输出是前向和后向网络最后一层的级联。编码器的输入由基本单词表示和前一个任务编码器的输出(如果可用)组成。
在编码器之上,每个任务使用不同的神经网络,如下所述:
- 前两个层次(NER 和 EMD)使用一个条件随机场,根据一个词的相邻词的类型来预测该词的实体类型。该算法背后的概念是,它为句子中的所有单词 a 一起找到实体的最佳组合。很好的解释这个算法可以在这里找到。
- 在共指消解(CR)中,模型首先计算每个单词序列(“span”)成为前一个 span 的提及的可能性,例如,代词比动词更有可能成为提及。然后,它挑选前 N 个跨度,并计算每个跨度组合的得分,以形成一对。每个跨度最多可以是一个跨度的引用,通过使用 softmax 实现。在没有找到配对的情况下,添加一个伪令牌。
- 关系提取(RE)任务使用一个图层来计算每对标记匹配每种关系类型的概率(总共为 T * R_types 个概率)。该模型使用 sigmoid 函数,而不是 softmax,以允许每个令牌有多个关系。
训练分层模型的挑战之一是灾难性遗忘,在这种情况下,训练新任务会导致模型“忘记”以前的任务,并对它们实现降级的性能。HMTL 通过在当前任务的训练过程中(每次参数更新后)随机选取一个先前的任务,并在随机任务数据集中的随机样本上训练模型,来处理灾难性遗忘。选择一项任务进行训练的概率并不一致,而是与其数据集的大小成比例,这是一种作者发现更有效的技术。
数据集
该模型在几个数据集上进行训练以进行比较,其中两个关键数据集是 NER 的 OntoNotes 5.0 和其余任务的 ACE05。ACE05 用于两种配置——常规和金牌提及(GM ), GM 配置由两部分组成:
- 共指消解(CR)任务的评估基于人工提取的黄金提及,而不是自动提及。这些提及的生成成本更高,并且无法用于大多数数据集。根据这篇论文,在评估中使用黄金提及可以提高 CR 的性能。
- 使用用于训练 RE 和 EMD 任务的相同数据集(ACE05)的不同分割来训练 CR 任务。使用不同的分割可以帮助模型学习更丰富的表示。
结果
该论文声称,通过使用黄金提及(GM)配置训练完整模型,在实体提及检测(EMD)和关系提取(RE)方面取得了最先进的结果。根据该论文,在训练中使用 GM 配置将 CR 任务的 F1 分数提高了 6 分,同时将 EMD 和 re 任务提高了 1-2 分。
该论文还声称在命名实体识别方面取得了最先进的结果,尽管最*的 BERT 模型似乎取得了略好的结果。然而,很难比较这两者,因为 HMTL 模型没有针对伯特使用的数据集进行微调。伯特的总结可以在这里找到。
这篇论文的另一个有趣的结果是减少了达到相同性能所需的训练时间。完整模型(含 GM)比大多数单一任务(NER (-16%)、EMD (-44%)和 CR (-28%)需要的时间少,但比 RE (+78%)需要的时间多。
关于 GM 配置的一个可能的担心是“信息泄漏”——由于不同的分割,用于训练一个任务的记录可能稍后被用作另一个任务的测试。关于这些记录的知识可能存储在一个共享层中,从而允许人工改进结果。
消融研究
任务组合多任务训练的贡献似乎是不确定的,取决于任务:
- 不同的任务通过不同的任务组合获得了最好的结果,这意味着没有一个占优势的组合。
- 在低级任务中,等级模型的好处很小(低于 0.5 F-1 分)。
- 最大的改进是在 RE 任务中实现的,超过 5 个 F-1 点。一种可能的解释是,EMD 任务在 re 任务之前被训练,并且学习识别与 RE 任务几乎相同的实体。
Task combinations comparison
单词表示
如前所述,该模型的基础是单词表示,它由三个模型组成——GloVe、ELMo 和字符级单词嵌入。这些模型的选择对模型性能也有很大的影响,如下表所示。Elmo 嵌入和字符级嵌入给大多数任务的 F-1 分数各增加 2-4 分。
Comparison of Word representation (Source: Sanh et al.)
结论
本文介绍了一种有趣的技术,它将看似独立的 NLP 任务和技术结合起来,以在语言分析中获得最佳结果。这些结果强调了对该领域进行进一步研究的必要性,因为目前很难理解何时特定的 NLP 任务可以有助于改善不相关的 NLP 任务的结果。
特别感谢本文作者之一 Victor Sanh,他对 HMTL 的运作提出了宝贵的见解。
与产品团队召开有效的分析会议
原文:https://towardsdatascience.com/holding-effective-analytics-meetings-with-product-teams-2f792add1cf9?source=collection_archive---------4-----------------------
2015 年,我在游戏分析峰会上做了一个演讲,讲述了我在黎明游戏与不同游戏团队合作的经历。从那以后,我一直与电子艺界和 Twitch 的产品团队合作,并想为这次演讲提供一个更新。大多数科技公司现在都有分析团队,但将数据见解转化为可操作的结果通常很有挑战性。
我在 Daybreak Games 面临的挑战是,我在营销组织中领导一个中央分析团队,该团队需要与位于圣地亚哥和奥斯汀的游戏工作室合作。我们在产品团队中嵌入了分析师,但需要更多的结构来使工作室领导更加了解数据。我们努力实现这一目标的一种方式是改进分析团队与产品团队安排和举行会议的方式。
在重新设计如何安排会议时,我们会提出以下问题:
- 我们应该与产品团队共享哪些数据?
- 我们应该何时以及如何共享数据?
- 我们如何根据数据洞察采取行动?
为了确保分析团队能够与产品团队有效沟通,我们需要确定一组产品 KPI(关键性能指标),作为讨论的起点。如果没有首先决定如何跟踪产品性能,以及了解不同 KPI 之间的关系,您就有可能会因为关于跟踪什么是重要的问题而使会议偏离轨道。在《黎明游戏》中,我们提出了六个指标,在我们所有的游戏中进行跟踪,并利用这些 KPI 建立了工作室可以访问的自动化报告。我们确实担心的一个问题是,在整个公司范围内分享太多关于敏感话题的信息,比如公司财务状况。我们的方法是将所有报告和数据提供给工作室负责人,并为游戏团队的所有成员提供对特定游戏报告的访问。
一旦我们决定了如何与产品团队沟通,我们需要决定如何通过会议与团队合作。我们提出了三种方法,将在下一节详细讨论。这些不同会议的目标是确保我们能够向产品团队介绍我们的 KPI,定期检查性能,同步新功能的计划,并根据分析团队的发现提出建议。我们希望提供足够的结构,以便产品团队认为会议提供了关于产品性能的足够详细的信息,而不是默认向分析师提出特别的请求。
第三个挑战是让产品团队响应来自报告和分析的数据。我们最初的重点是让工作室领导可以访问自动报告,并让产品团队在分析会议中领导更多的讨论。这种成功因游戏团队而异,因为领导者有不同的背景和技术专长,但作为一家公司,我们在成为数据信息公司方面取得了一些进展。我们采取的另一种方法是直接与游戏团队合作,将分析团队提出的模型产品化。这包括对游戏内信息系统、营销工作和游戏内市场的改进。
在 Electronic Arts 和 Twitch,由于这些公司的规模,我在与产品团队合作时遇到了不同的问题。大多数产品团队已经确定了一组要跟踪的 KPI,但是不清楚跨团队的不同 KPI 是如何交互的。如果度量标准之间的关系不清楚,那么会议可能会因为讨论产品的分食或对归属的关注而偏离轨道。为了解决电子艺界的这一问题,我们必须更好地了解 EA Access 订阅服务和 Xbox One 游戏销售之间的关系,而在 Twitch,我们必须更深入地了解网络和移动观众之间的关系。一旦就这些不同的 KPI 如何交互达成一致,分析团队就能够召开更有效的会议。
分析会议
在修改了我们的 KPI 并在 daken Games 上报告之后,分析团队开始与产品团队召开以下类型的会议:
- 分析 101
- 数据 Scrum 会议
- 数据洞察会议
我们安排的第一类会议是与产品团队的领导一起审查我们的新报告工具,并解释我们重点跟踪的一组 KPI。然后,我们向公司的每个人开放了这些会议,并倡导更多地了解数据。这些分析 101 会议的目标是确保公司的每个人都知道我们在跟踪什么以及为什么。我们还举办了分析办公时间,产品团队的成员可以在这里学习如何获得更多的数据。
我们安排的第二组会议是每周与数据团队进行的简短的检查,称为数据 scrum 会议。我们为每个游戏都开了一次会,与会者包括来自不同学科的领导,包括设计、工程和品牌。这些会议的目标是跟踪标题的表现,并讨论更新(如促销活动)如何影响 KPI。在 Twitch,我们也利用这种类型的会议来讨论即将推出的功能,并确保我们对即将推出的新功能有跟踪规格和实验计划。数据 scrums 对于回顾分析团队在过去一周调查的特别请求,以及与更广泛的团队分享结果也很有用。
我们不想让自己的会议太多,所以我们尽量缩短 data scrum 会议,并根据需要安排 data insights 会议,当有更多实质性的结果需要讨论时。这类会议的目标是讨论分析的结果,为什么它很重要,并讨论如何根据发现做出响应。例如,我们可能希望根据对季节性商品销售的分析,对某个游戏市场进行更改。在电子艺界,我们会有类似的会议,通常可交付的是会后共享的幻灯片。Twitch 使用了一种不同的方法,分析团队会写一份长格式的报告,通过电子邮件发送给团队,然后根据产品团队的反馈召开会议。当 A/B 实验有冲突的结果时,数据洞察会议是有用的,并且产品团队需要确定是否全面推出该功能。
分析团队通常也参与每月的业务回顾会议,但通常不是与产品团队合作的好论坛。这些会议往往侧重于向高管提供细节,并往往侧重于产品路线图,而不是解释过去的业绩。
为了让分析师有效地与产品团队合作,重要的是要有足够的结构,让团队能够有效地交流产品性能,有机会在必要时分享发现,并能够跟进可操作的结果。在 Daybreak Games,我们通过标准化 KPI 和设置自动报告、安排教育会议来宣传我们的新方法、召开简短的定期会议来检查团队,以及根据需要安排会议来讨论深入分析来实现这一目标。
根据我在 Twitch 和 Electronic Arts 的经验,我对这条建议的主要改变是,鼓励通过 slack 等工具进行更频繁的沟通,而不是依赖数据 scrums 会议,并通过书面报告而不是甲板来分享结果。
一个人在家?在家用 Alexa,Echo 和 HomePod 重新定义隐私
原文:https://towardsdatascience.com/home-alone-redefining-privacy-with-alexa-echo-and-homepod-at-home-5bf2dc303417?source=collection_archive---------11-----------------------
Photo by Serge Kutuzov on Unsplash
“毫无疑问,销售这些产品的科技巨头将继续调整它们,希望避免类似的结果。然而,一个根本性的挑战依然存在:如何让那些靠便利推销自己的技术了解我们私人世界的复杂性和细微差别?”默里·古尔登,《对话》
我通常不喜欢引用别人的话来开始文章,但我认为古尔登先生很好地说明了当前个人语音命令设备上的隐私和大规模消费领域正在发生的事情。
你对家居(科技)的未来有多兴奋?人工智能驱动的虚拟助理和语音控制的设备正在权衡一场战争,看看谁将接管你的家庭命令。一个连接到你的 wifi 的设备,在云端存储数据,检查你的日常习惯,并以你的购物行为为食,这似乎是我们都在等待的完美的工程营销特洛伊木马。不是。
进入外观
虽然科技的未来似乎总是光明的,但人们似乎很容易开始怀疑反乌托邦的场景,几十年前乔治·奥威尔和雷·布雷德伯里等人就已经很好地描述了这种场景。这些设备从零售商到我们的家庭都是直接成型的,丝毫没有忽视对消费者的真正影响。进入Echo Look *,*亚马逊的新宝贝以及从纯音频到集成摄像头的交互设备的明显演变。完美的自拍杆不仅可以从 Alexa 收集音频请求,还可以拍照,以便比较你每天穿的衣服。是的,它通过使用机器学习,比较你在某一天、某一周或某个月做出的所有服装选择,学习你的购买行为并给你建议。奇特又恐怖。
变聪明:世界不是你的
可以肯定地说,对于亚马逊这样的大公司来说,数据收集是唯一重要的事情,亚马逊在说明他们在云服务器上实际存储了什么样的信息方面做得很差。虽然数据收集听起来是一项巨大的投资,但机器学习甚至更好。每个人都在这么做,所有的大品牌、社交媒体巨头和通信巨头都已经在这项技术上投入了巨资。
脸书旗下的 WhatsApp messenger 应用程序能够学习你的部分对话(音频或文本),这些对话是向你推销商品或给你推荐的基础。你提到过你和你的家人最*度假时发现的那个好地方吗?你和朋友讨论过未来去伦敦旅行的可能性吗?那么下次你登录你的脸书账户时,不要惊讶地看到你和你重要的人私下谈论的特定事情的广告或赞助内容。
开始重新定义供应商和消费者之间的关系是双方的责任。随着这些学习和识别技术的不断发展,我们必须开始要求我们的提供商在数据收集方面更加透明。从零售商的角度来看,解构和简化语言是日常消费者正确的第一步。细则应该停止微妙,让每个人都阅读所有的含义时,处理这种设备。
房屋改造分析转变为 Python 中的 Excel 数据处理
原文:https://towardsdatascience.com/home-remodeling-analysis-turned-excel-data-handling-in-python-e1115f8302e4?source=collection_archive---------25-----------------------
为什么清理数据是最重要的步骤
原始项目任务:寻找有趣的见解,了解改造市场的发展方向
项目任务(Twist): 如何用 Python 处理修剪良好的 excel 数据(剧透:整齐是骗人的词)
时间线:一周(我告诉你,如果你像我一样是 DS 新手,一周是不够的
针对最初目标的项目调查结果:
- 这些数字看起来很稳定,只是在优先级上有所调整
- 加州帕洛阿尔托的*均成本远高于全国*均水*
- 最大的全方位服务改造公司所在的州
**关于数据处理的发现:**熊猫(Python)有解决方案,生活还没绝望!
数据:探索不同来源的公开可用数据——哈佛大学联合住房研究中心、重塑杂志,并从 Hinkle 建筑公司的网页上获取加州帕洛阿尔托及其周边地区的*均项目成本。
方法:Python——主要使用 Pandas、Matplotlib、Seaborn 进行数据角力、基础统计和可视化。
这篇文章的顺序将是首先谈论我们从家庭改造数据中得到的结果。稍后,我们也将经历数据清理的斗争。
下图显示了不同类别的家庭装修的全国*均支出。数据显示,“客房增加”是最受欢迎的类别。在过去的 15 年中,这一类别的支出在 2005 年达到顶峰,*均支出约为 2.5 万美元。最低点是在 2011 年,支出降至 1.2 万美元以下。自那以后,市场似乎正在复苏。从 1995 年到 2005 年,房主在房屋扩建上的支出在 20 年内增长了 62%以上。另一个相对较大的变化是厨房改造,支出从 1995 年到 2015 年翻了一番,并在 2007 年达到顶峰。
Source: Joint Center for Housing Studies at Harvard
当我得到上述结果时,我很想知道在我居住的地方,房主的*均支出。考虑到时间限制,我找不到与上图直接可比的数据,只能找到我们地区这些项目的*均值。
下面的条形图描绘了加利福尼亚州帕洛阿尔托市内及周边不同类型的房屋装修的*均成本。费用明显高于全国*均水*。增加一个 144 *方英尺的新房间,花费超过 5 万美元。主要的厨房改造也同样昂贵,为 5 万美元。
Source: Hinkle Construction Inc’ website
对于前两个图,如果感兴趣,请检查所附的 python 文件。
我不得不找出谁是装修行业最大的玩家。《重塑杂志》在这一领域进行了深入的研究。该杂志的重塑 550 部门收集数据,并根据前几年的收入宣布重塑业务的获胜者。用他们自己的话说:“2017重塑 550 有四个列表,每个列表都在下面的一个标签中显示,并显示全方位服务的重塑者、替代承包商、保险修复公司和特许经销商中的谁是谁。公司排名基于其 2016 年改造产生的收入;不按公司毛收入。
我只调查了 2017 年的全服务公司。该排名基于 2016 年的收入(2018 年的榜单要到 2019 年 5 月才会公布)。
该条形图显示了全国重塑业务中最突出的 15 家公司(总共 340 家)。
Source: Remodeling magazine
不出所料,这些公司中有相当一部分位于加州。
Source: Remodeling magazine
最后的情节只是为了好玩。我运行了一个相关矩阵,以了解收入、排名和其他变量之间的相互关系。阴影显示相关系数的强度。比如:排名(' # ')和营收高度负相关。不要在这里混淆。我们都知道排名是如何工作的:数字越低,排名越好(1 是最好的)。所以,收入越高,数字越低(比如 1),意味着排名越高。
以下是我在 Jupyter 笔记本上为以上情节所做的工作。
现在,让我们像承诺的那样谈谈数据争论/清理斗争部分。我为这个项目收集的数据的一些背景:
- 我下载了比我实际需要/可以及时处理的多得多的数据
- 我认为更多的数据总是意味着更好的结果
- excel 中漂亮、整洁的数据意味着 Pandas/Python 中更少的清理。不对!第一个错误。
- 我的数据分布在 4 个不同文件的 26 个 Excel 表格中(我不是开玩笑)
**整洁的 Excel 表格中的问题:**这些是我遇到过的问题,所以要小心,可能还有更多我还没有遇到的问题。
Impressively neat excel data
- 空单元格:Excel 在让单元格为空时更灵活,但你的熊猫阅读功能不会喜欢它。它在嘲笑你,就像“告诉过你,现在就去对付南方人!”
- 页眉:excel 中干净的页眉在 Pandas 中不一定意味着什么。您检查实际的列名,不要惊讶实际的列名与 excel 标题中显示的有很大不同!更改列名。列数越多,工作量越大。
- 另一个类似的问题是,当除了第一列之外的所有列都有列名时(在 excel 中,如果是分类变量列,这仍然有意义),但是在 Pandas framework 中对这样的列进行操作是一个问题。
- 啊!那些看起来整洁的数值!不要被骗了。你将不得不应付每一个。单身。号外。东西。你在这两个数字之间。可以是美元符号、逗号等等。熊猫把它看做一个物体,这是一个问题。你不可能用它达到任何统计/数学目标。你必须把它转换成 int/float 才能使用。
我从这个项目中学到了什么:
- 想想时间线,不要有额外的野心。选择一个可行的数据集。与其选择多个数据集,不如选择一个,想想有多少种方法可以操纵/分析它。
- 围绕项目可交付成果对工作进行优先级排序。当你陷入我这种有很多零碎数据的情况时,重新安排你的目标的优先次序,遵循倒金字塔原则:先做最重要的工作。
- 您不必总是将 excel 文件转换为. csv。有一种更简单的方法可以直接导入所需的工作表。它只需要一个工作路径名。
- 求助。作为 Python 的初学者,我比我希望的更经常地挣扎。但是向你的同事/导师/经理寻求帮助可能会给你提供有价值的见解和针对单一问题的多种解决方案。
- 当你遇到困难时,在 excel 中解决问题比花时间在 Python 中解决问题更容易。但是,我告诉你,在熊猫身上,不付出并以正确的方式得到回报是值得的。
- 您需要知道什么样的可视化适合您的数据。Python 中有很酷的可视化库,但是没有一个很酷的图形适用于您的数据,这没关系。当看到大错误时,不要忽视它。
在上图中,我试图描绘出所有 340 家重塑公司,它们的收入,工作数量和*均工作价格。这是无效的比较类型。尊重错误,深入挖掘,才知道什么样的图更适合你的数据表示。简单并不意味着坏,因为花哨并不总是意味着更好(好吧,可能是葡萄酸在这种情况下,因为我不能得到一个花哨的情节,但我说的是真的)。
对我来说,第一个项目是一个很大的学习曲线。但在培训中,我成为了一名更强大、准备更充分的数据科学家,再也不会以同样的眼光看待 excel 数据表了。:-)
芝加哥凶杀案:数据故事第一部分
原文:https://towardsdatascience.com/homicide-in-chicago-data-storytelling-part-one-e6fbd77afc07?source=collection_archive---------12-----------------------
数据清理
在过去的几年里,芝加哥经常出现在新闻中,尤其是因为最*枪支暴力导致的谋杀案激增。作为芝加哥的居民,我知道这些枪击事件大多局限于该市的某些地区,但为了真正了解这种暴力的真实性质,我决定深入挖掘芝加哥市的数据。
很可能因杀人被捕的几率不到一半。如果你是住在高犯罪率地区的罪犯,这种可能性会大得多。
这篇博文分为两部分。第一部分包括数据清理,第二部分在这里找到进入数据探索和可视化。
我在 Jupyter 笔记本上使用 Python 进行了数据清理、探索和可视化,希望在这个过程中发现一些有趣的见解。我也用过下面的 python 库。完整的笔记本、支持代码和文件可以在我的 GitHub 中找到。
*# import modules*
**import** **numpy** **as** **np**
**import** **pandas** **as** **pd**
**from** **pandas** **import** *
**import** **os**
**import** **matplotlib.pyplot** **as** **plt**
**import** **seaborn** **as** **sns**
%**matplotlib** inline
**import** **datetime**
**from** **scipy** **import** stats
sns.set_style("darkgrid")
**import** **matplotlib.image** **as** **mpimg**
**from** **IPython.display** **import** IFrame
**import** **folium**
**from** **folium** **import** plugins
**from** **folium.plugins** **import** MarkerCluster, FastMarkerCluster, HeatMapWithTime
我使用了下面链接的芝加哥市数据门户网站的公开数据,来探索芝加哥从 2001 年 1 月到 2018 年 2 月的犯罪情况。
数据来源:
- https://data . city of Chicago . org/Public-Safety/Crimes-2001 年至今/ijzp-q8t2
- https://data . city of Chicago . org/Public-Safety/Boundaries-Police-Beats-current-/aerh-rz74
笔记本工作流程如下:
- 将数据集加载到 pandas 数据框架
- 数据探索和清理
- 洞察提取
- 结论
来自城市数据门户的原始数据集。CSV 格式,但对我的笔记本电脑资源来说太大了(1.5 GB)。我无法在内存中容纳整个文件,所以我使用 pandas 的 TextFileReader 函数,该函数允许我以 100,000 行的块加载大文件,然后将这些块连接回一个新的数据帧。
加载数据集后,我使用了 panda 的一些内置函数来探索数据的特征,如下所示。
*# use TextFileReader iterable with chunks of 100,000 rows.*
tp = read_csv('Crimes_-_2001_to_present.csv', iterator=**True**, chunksize=100000)
crime_data = concat(tp, ignore_index=**True**)
*# print data's shape*
crime_data.shape# Output:
(6546899, 22)
接下来,我们查看列的基本统计信息
crime_data.info()Output:<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6546899 entries, 0 to 6546898
Data columns (total 22 columns):
ID int64
Case Number object
Date object
Block object
IUCR object
Primary Type object
Description object
Location Description object
Arrest bool
Domestic bool
Beat int64
District float64
Ward float64
Community Area float64
FBI Code object
X Coordinate float64
Y Coordinate float64
Year int64
Updated On object
Latitude float64
Longitude float64
Location object
dtypes: bool(2), float64(7), int64(3), object(10)
memory usage: 1011.5+ MB
下一行代码预览数据帧的前 5 行。
crime_data.head()
关于数据的观察。
- 从上面的单元格中,我们可以看到有 22 列和 600 多万行,但同样重要的是,我们可以看到每一列中使用的数据类型。
- 这一步很重要,有助于我们发现是否需要将数据类型更改为更适合我们特定需求的格式。例如,日期列可能需要更改为 python 的 datatime.datetime 格式,以提取月份、时间和星期几信息。
- 我们还可以从主要类型栏中看到,我们的研究主题(凶杀)与其他犯罪混合在一起,因此在某些时候我们必须将凶杀放在单独的表格中。
- 通过观察上面的输出,我们可以获得的另一条信息是,数据集中的一些列在重要性上重叠,因此在最终的 dataframe 配置中保留所有这些列是没有意义的。
- 从内存的角度来看,这也会使我们的数据帧不那么庞大。将这种臃肿的配置输入到机器学习(ML)任务中是一种糟糕的做法,因为它无助于模型对数据进行良好的概括。
*# preview all crime variables in the "Primary Type" column*
crimes = crime_data['Primary Type'].sort_values().unique()
crimes, len(crimes)
芝加哥警区地图与所有犯罪地理位置散点图
- 我对凶杀案的数字感兴趣,但我仍然想知道整个城市的总体犯罪率是如何分布的。有多种方法可以做到这一点,但我还是创建了一个散点图,绘制了数据集中所有犯罪地理位置(X 和 Y 坐标),并将其绘制在城市的地理地图上。
- 我还使用了警区作为色调,以更好地了解城市不同社区的犯罪分布情况。
- 我本可以使用社区区域或选区将城市细分为不同的区域,但这两个变量在可用时间框架(2001-2018)的持续时间内缺少大量数据点。
- 使用替代列意味着我们必须删除其他行中的大量数据,多达 600,000 多行,而这恰好是数据集的 10 %。有点太多的数据丢失,可能还有重要的信息。
*# Created a scatter plot of X and Y coordinates vs all crime data available in the dataset*
crime_data = crime_data.loc[(crime_data['X Coordinate']!=0)]
sns.lmplot('X Coordinate',
'Y Coordinate',
data=crime_data[:],
fit_reg=**False**,
hue="District",
palette='Dark2',
size=12,
ci=2,
scatter_kws={"marker": "D",
"s": 10})
ax = plt.gca()
ax.set_title("All Crime Distribution per District")
- 从上面的可视化效果中,我们可以看到来自地区网络的图像和数据集中所有犯罪数据地理位置的散点图,从而生成了芝加哥地图的副本图像。
- 散点图中有一些缺口,但这些地方没有连续的人类活动,如河流、港口和机场。
- 芝加哥警方过去将芝加哥的绝大多数凶杀案归因于帮派暴力,所以我从主要类型列中分组了 4 种通常与帮派活动有关的犯罪,并创建了散点图,以查看它们在整个城市中是否有相似的地理分布。这四种罪行是杀人罪、私藏武器罪、毒品和武器罪,其情节如下所示。
*# create and preview dataframe containing crimes associated with gang violence*
col2 = ['Date','Primary Type','Arrest','Domestic','District','X Coordinate','Y Coordinate']
multiple_crimes = crime_data[col2]
multiple_crimes = multiple_crimes[multiple_crimes['Primary Type']\
.isin(['HOMICIDE','CONCEALED CARRY LICENSE VIOLATION','NARCOTICS','WEAPONS VIOLATION'])]
*# clean some rouge (0,0) coordinates*
multiple_crimes = multiple_crimes[multiple_crimes['X Coordinate']!=0]
multiple_crimes.head()
接下来,我将该组中每起犯罪的地理分布散点图可视化,以了解这 4 起犯罪在整个城市中的分布情况。
# geographical distribution scatter plots by crime
g = sns.lmplot(x="X Coordinate",
y="Y Coordinate",
col="Primary Type",
data=multiple_crimes.dropna(),
col_wrap=2, size=6, fit_reg=**False**,
sharey=**False**,
scatter_kws={"marker": "D",
"s": 10})
- 看起来毒品和武器违规犯罪在整个城市都很常见,但是杀人和隐蔽携带违规犯罪有一个特定的地理模式开始出现。
- 在左上角和底部有两个区域似乎发生了犯罪集群,这是一个很好的观察结果,但得出任何鼓舞人心的结论还为时过早。
- 也可能是毒品犯罪在帮派活动之外更为常见,就凶杀案而言,它并不能真正告诉我们任何事情。这将成为机器学习预测任务的一个好主题。
在进行了一些基本的观察之后,是时候检索一个包含凶杀案数据的数据框架并做一些数据清理了,然后我才能继续深入研究它。
*# create a dataframe with Homicide as the only crime*
df_homicideN = crime_data[crime_data['Primary Type']=='HOMICIDE']
df_homicideN.head()
*# print some attributes of our new homicide dataframe*
df_homicideN.info()<class 'pandas.core.frame.DataFrame'>
Int64Index: 8975 entries, 641 to 6546894
Data columns (total 22 columns):
ID 8975 non-null int64
Case Number 8975 non-null object
Date 8975 non-null object
Block 8975 non-null object
IUCR 8975 non-null object
Primary Type 8975 non-null object
Description 8975 non-null object
Location Description 8975 non-null object
Arrest 8975 non-null bool
Domestic 8975 non-null bool
Beat 8975 non-null int64
District 8975 non-null float64
Ward 8594 non-null float64
Community Area 8594 non-null float64
FBI Code 8975 non-null object
X Coordinate 8893 non-null float64
Y Coordinate 8893 non-null float64
Year 8975 non-null int64
Updated On 8975 non-null object
Latitude 8893 non-null float64
Longitude 8893 non-null float64
Location 8893 non-null object
dtypes: bool(2), float64(7), int64(3), object(10)
memory usage: 1.5+ MB
找到数据帧中的所有空值,以便进一步清理。
*# find null values in our dataframe*
df_homicideN.isnull().sum()# OUTPUTID 0
Case Number 0
Date 0
Block 0
IUCR 0
Primary Type 0
Description 0
Location Description 0
Arrest 0
Domestic 0
Beat 0
District 0
Ward 381
Community Area 381
FBI Code 0
X Coordinate 82
Y Coordinate 82
Year 0
Updated On 0
Latitude 82
Longitude 82
Location 82
dtype: int64
从上面的单元格我们可以观察到:
- 我们现在总共有 8981 行数据,7 列包含空值。
- 选区和社区区域列有 386 个空值,而区的空值为零。就绘制地理比较而言,我选择了地区列,因为它似乎更容易获得。然而,对于数据清理,人们总是必须权衡保留或丢弃数据的利弊,规则不是一成不变的,而是我们必须使用我们最好的判断和测试测试。
- 我总共有 463 行包含一个或多个空值。
- 接下来,我从数据帧中删除了所有包含空值的行,以便能够对数据集执行不同的数据转换。
*# drop null values and confirm*
df_homicide = df_homicideN.dropna()
df_homicide.isnull().sum().sum()# OUTPUT
0
接下来,我创建了一个要保存的列列表,并用新列更新了数据帧。
*# create a list of columns to keep and update the dataframe with new columns*
keep_cols = ['Year','Date','Primary Type','Arrest','Domestic','District','Location Description',
'FBI Code','X Coordinate','Y Coordinate','Latitude','Longitude','Location']
df_homicide = df_homicide[keep_cols].reset_index()
df_homicide.head()
删除空列后,我用我认为最有助于理解芝加哥凶杀案的列更新了数据框架。
- 我应该提到,新的见解可能会导致我们回去重新检查我们放弃的列,但现在我们应该没问题。
- 下面我使用 pandas datetime 函数从 Date 列中提取一些时间变量。这些新列给了我额外的维度来可视化数据,也许还有新的见解。
*# change string Date to datetime.datetime format*
df_homicide['Date'] = df_homicide['Date'].apply(**lambda** x: datetime.datetime.strptime(x,"%m/**%d**/%Y %I:%M:%S %p"))
df_homicide.head()
*# create new columns from date column -- Year, Month, Day, Hour, Minutes, DayOfWeek*
df_homicide['Year'] = df_homicide['Date'].dt.year
df_homicide['Month'] = df_homicide['Date'].dt.month
df_homicide['Day'] = df_homicide['Date'].dt.day
df_homicide['Weekday'] = df_homicide['Date'].dt.dayofweek
df_homicide['HourOfDay'] = df_homicide['Date'].dt.hour
df_homicide = df_homicide.sort_values('Date')
*# print columns list and info*
df_homicide.info()
到目前为止,我已经创建了一个更精简的熊猫数据框架,只包含原始犯罪数据框架中的相关数据。在下一节中,我们将尝试探索和可视化新的凶杀数据框架。
泡菜数据
现在,我们已经执行了一些数据清理,我们可以开始将其可视化,以获得芝加哥犯罪的更大图片。为了能够从我们停止的地方继续,我以 pickle 形式存储了新数据,这是 Python 中一种将对象保存到文件中供以后检索的方法。Pickling 通过将对象写成一个长字节流来实现这一点。
*# save cleaned data to pickle file*
df_homicide.to_pickle('df_homicide.pkl')
print('pickle size:', os.stat('df_homicide.pkl').st_size)# load pickled data
df_homicide = pd.read_pickle('df_homicide.pkl')
这个芝加哥犯罪数据集的数据探索和可视化将在本帖的第二部分继续。
芝加哥凶杀案:数据故事第二部分
原文:https://towardsdatascience.com/homicide-in-chicago-data-stroytelling-part-two-e8748602daca?source=collection_archive---------10-----------------------
Image via Wikipedia
数据探索和可视化
这是关于芝加哥凶杀案的数据故事的第二部分,这是最*的一个热门话题,包括特朗普总统在 2017 年竞选时提到的。作为芝加哥人,每次我遇到来自其他州的人,他们都会情不自禁地和我谈论这个城市的谋杀率,但很少有人从数据意识的角度提起这个话题。
在本系列的第一部分中,我清理了犯罪数据,但现在我将尝试从这些数据中提取一些见解。在这一节中,我将使用前一节中新创建的熊猫数据帧来描绘芝加哥市的凶杀案。
芝加哥最危险的地方是街道上,在夏天,周末,晚上 11 点到凌晨 2 点。
整个城市的犯罪分布
我们首先想看到的是按警区分组的整个城市的凶杀犯罪分布。
为此,我们将使用 Seaborn 。我们将从第一部分中早期的散点图中获得灵感,按地区可视化 2001 年至 2018 年 2 月的所有凶杀案。下面是代码和结果图。
*# plot all homicides in dataset by location per District*df_homicide = df_homicide.loc[(df_homicide['X Coordinate']!=0)]sns.lmplot('X Coordinate',
'Y Coordinate',
data=df_homicide[:],
fit_reg=**False**,
hue="District",
palette='Dark2',
size=12,
ci=2,
scatter_kws={"marker": "D",
"s": 10})
ax = plt.gca()
ax.set_title("All Homicides (2001-2018) per District")
从上图中,我们可以观察到以下情况:
- 高凶杀率聚集在散点图的左上方和中下方。
- 右上角和中间一些区域的凶杀率更为分散。
由于每个区都是不同的颜色,我们可以从这张图表中获得的重要见解是,有很多点聚集在一起的区比没有聚集在一起的区有更多的凶杀率。所以现在,在某种程度上,我们对空间维度的凶杀有了一个概念,但我也想从时间维度了解这些凶杀率。
下面我创建了一些凶杀案与时间的可视化,并对之后的观察做了笔记。
年度凶杀率:
*# plot bar chart of homicide rates for all years*plt.figure(figsize=(12,6))
sns.barplot(x='Year',
y='HOMICIDE',
data=df_homicide.groupby(['Year'])['Primary Type'].value_counts().\
unstack().reset_index(),
color='steelblue').\
set_title("CHICAGO MURDER RATES: 2001 - 2018")
从上面的柱状图可视化中,我们可以得出以下结论:
- 在现有的数据范围内,芝加哥的凶杀案从 2001 年到 2003 年有一个短暂的上升趋势,从 460 起上升到 586 起。
- 接下来是一个良好的下降到 400 的范围,并保持了四年,直到 2008 年。
- 在 2016 年之前的七年里,凶杀率立即回落到 400。
- 然而,谋杀率在 2016 年急剧上升,从 2015 年的 467 起上升到 749,282 起,创历史新高。
- 2017 年也出现了持续的高凶杀率,尽管下降了 90 至 659 起。
- 我们可以说,2016 年和 2017 年芝加哥的凶杀率显著上升。
- 我想我们可以开始理解为什么有那么多关于风城谋杀案的新闻了。
- 根据我们对数据集中过去两年的观察,我想记住这一点,并在探索其余数据的过程中进行更深入的研究。
每月凶杀率:
*# plot homicides sorted by month*fig, ax = plt.subplots(figsize=(14,6))
month_nms = ['January','February','March','April','May','June','July','August'\
,'September','October','November','December']
fig = sns.barplot(x='Month',
y='HOMICIDE',
data=df_homicide.groupby(['Year','Month'])['Primary Type'].\
value_counts().unstack().reset_index(),
color='#808080')
ax.set_xticklabels(month_nms)
plt.title("CHICAGO MURDER RATES by MONTH -- All Years")*# -------------------------------------------**# plot average monthly temps in Chicago*
*# source of data: ncdc.noaa.gov*mntemp = [26.5,31,39.5,49.5,59.5,70,76,75.5,68,56,44,32]
df_temps = pd.DataFrame(list(zip(month_nms,mntemp)),
columns=['Month','AVERAGE TEMPERATURE'])
fig, ax = plt.subplots(figsize=(14,6))
sns.barplot(x='Month', y='AVERAGE TEMPERATURE', data=df_temps,color='steelblue')
- 从逐月凶杀率来看,我们看到*均凶杀案在 3 月份开始稳步上升,在 7 月份达到高峰。
- 一月份略高于二月份,但这似乎是十二月份的延续。
- 这种周期性趋势有很多原因,但最好的解释似乎与月*均气温和总体天气有关。
- 芝加哥的冬天往往很冷,这使得大多数人不到万不得已不出门。
- 这种周期性趋势的另一个可能原因是,学校在夏季放假,因此更多的年轻人有时间去惹更多的麻烦。考虑到风险最大的年龄组在 15 至 30 岁之间。(来源:芝加哥论坛报)
一周中的凶杀率:
*# plot homicide rates vs. day of the week*fig, ax = plt.subplots(figsize=(14,6))
week_days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
fig = sns.barplot(x='Weekday',
y='HOMICIDE',
data=df_homicide.groupby(['Year','Weekday'])['Primary Type'].\
value_counts().unstack().reset_index(),
color='steelblue')
ax.set_xticklabels(week_days)
plt.title('HOMICIDE BY DAY OF THE WEEK -- All Years')
接下来,我们深入挖掘从每月到每周的时间框架,以获得更精细的外观。
- 在这个水*上,周一和周二的谋杀率最低,*均每天约 60 起。
- 周三略有上升,周四又略有上升。这种微小的变化几乎不明显,但考虑到这是 18 年的*均值,我们可以假设这种上升在某些周比其他周更明显。
- 本周早些时候出现的这种小幅上升趋势从*均每天 61 起凶杀案跃升至每天 81 起凶杀案,增幅达 25%。我们必须记住,这些*均值并没有根据这些杀戮的季节性进行调整。所以实际上,在温暖的月份,这个数字要高得多,而在寒冷的月份,这个数字要低得多。
- 周六出现了持续的高利率,但仅比周五略有上升。
- 周日的谋杀率确实从 80 年代下降到 60 年代,并持续下降到周一,并在每周循环再次重复之前稳定在 50 年代以上。
- 我们不知道是什么导致了这种循环,但我们可以假设,它们与离开学校或工作的时间有关,更多的人倾向于在这段时间参与毒品和帮派活动以及其他犯罪。
一天中的小时凶杀率:
*# use seaborn barplot to plot homicides vs. hour of the day* fig, ax = plt.subplots(figsize=(14,6))
fig = sns.barplot(x='HourOfDay',
y='HOMICIDE',
data=df_homicide.groupby(['Year','HourOfDay'])['Primary Type'].\
value_counts().unstack().reset_index(),
color='steelblue',
alpha=.75)
plt.title('HOMICIDE BY HOUR OF THE DAY -- All Years')
继续时间框架分析,从一天中的某个时间来看芝加哥的凶杀率是有意义的。我认为很容易假设谋杀发生在晚上比白天多,但这充其量只是一种猜测,所以不管我们认为结论有多明显,看看这些数字是明智的。
看待上述情节的一种方式是从一个正常的工作日或学校日的角度。
- 上午 7 点的凶杀案数量最少,约为 9 起,但随着时间的推移,我们看到凶杀案的数量稳步上升。
- 下午 2 点,我们穿过 15 关口,这为另一个稳定的上涨让路,有一点波动,其中下午 6 点飙升,下午 7 点下降,但不足以抹去之前的利率收益。
- 晚上 9 点是事情开始变得令人担忧的时候。*均值有时可能无法给出清晰的图像,但它们确实报告了一个简单的指标,即所有观察值的总和除以观察值的数量。考虑到这一点,每小时 25 起谋杀案是相当高的。
- 从晚上 9 点到凌晨 12 点的高峰,我们看到这些数字持续上升。凌晨 12 点和 1 点的谋杀率保持在每小时 30 起以上,只有在凌晨 2 点我们才看到低于 30 起,然后迅速下降,直到早上 7 点回到低于 10 起。
- 下降的一个可能原因可能是因为每个人都倾向于在深夜睡觉。即使是毒贩子和黑帮成员也有睡着的时候。
- 我想从上面的图表中得出的最后一个观察结果是,通过每个小时的误差棒线,夜间的时间比白天的时间有更多的变化,这表明夜间的凶杀活动更加活跃。
按家庭成员分列的年度凶杀率:
*# plot domestic variable vs. homicide variable*fig, ax = plt.subplots(figsize=(14,6))
df_arrest = df_homicide[['Year','Domestic']]
ax = sns.countplot(x="Year",
hue='Domestic',
data=df_arrest,
palette="Blues_d")
plt.title('HOMICIDE - DOMESTIC STATS BY YEAR')
- 在整个数据范围内,家庭参与的程度似乎对凶杀率没有任何明显的影响。2016 年至 2017 年谋杀案的激增与国内数字没有任何明显的相关性。
- 考虑到原始数据集包含 40 多种犯罪类型,包括纵火、性侵犯、家庭暴力、跟踪等,因此将该变量包含在数据集中是有意义的,但它对我们涉及杀人的特定案例没有用处,尽管它在家庭暴力中肯定有权重。
按犯罪现场分列的凶杀率:
*# visualize the "scene of the crime" vs. number of occurences at such scene*crime_scene = df_homicide['Primary Type'].\
groupby(df_homicide['Location Description']).\
value_counts().\
unstack().\
sort_values('HOMICIDE',ascending=**False**).\
reset_index()
*# Top Homicide Crime Scene Locations*
crime_scene.head(10)
*# create a count plot for all crime scene locations*g = sns.factorplot(x='Location Description',
y='HOMICIDE',
data=crime_scene,
kind='bar',
size=10,
color='steelblue',
saturation=10)g.fig.set_size_inches(15,5)
g.set_xticklabels(rotation=90)
plt.title('CRIME SCENE BY LOCATION FREQUENCY')
- 从上面的 Seaborn FactorPlot,我们可以观察到大多数谋杀(超过 60%)发生在街上。
- 第二个最常见的地方是汽车,然后依次是公寓、小巷、房子、门廊、院子和停车场。
- 其余位置的含量非常低,具有显著的统计影响。然而,更深入地研究数据采集方法是值得的,因为其他一些位置(尽管标注可能很专业)可能会在更大的一般化标注(如街道)之后进行标注。
- 到目前为止,从所有上述观察到目前为止,我们可以开始看到一个画面出现;芝加哥最危险的地方是街道上,在夏天,周末,晚上 11 点到凌晨 2 点。
- 然而,我们想知道这是否适用于芝加哥的所有地区。我经常被外地的朋友问住在芝加哥是否安全,我告诉他们,只要你不去错误的地方,这是安全的。接下来,我将展示我的探索,看看这是否是真的。
热图—每个警区的凶杀率:
*# create a heatmap showing crime by district by year*corr = df_homicide.groupby(['District','Year']).count().Date.unstack()
fig, ax = plt.subplots(figsize=(15,13))
sns.set(font_scale=1.0)
sns.heatmap(corr.dropna(axis=1),
annot=**True**,
linewidths=0.2,
cmap='Blues',
robust=**True**,
cbar_kws={'label': 'HOMICIDES'})
plt.title('HOMICIDE vs DISTRICT vs YEAR')
上面我创建了一个热图,比较了 2001 年至 2017 年芝加哥所有警区与每个警区的凶杀案数量。
- 正如热图所示,谋杀案在各地区的分布并不均匀。较暗区域对应较高的谋杀率。
- 热图上的区域越暗,该地区相应年份的谋杀案就越多。
- 在数据集中的所有年份中,第 1、16 和 20 区的凶杀率较低,每年为 10 起或更少。
- 第 17、18、19 和 24 区的谋杀率都在每年 20 起或更少(T3)的水*,尽管有些年份低于 10 起。
- 第 2、12、14 和 22 区每年有 30 起或更少的谋杀案发生在 T4。
- 其余的地区每年有超过 30 起谋杀案,有些地区的谋杀率甚至超过了 50 起。
- 第 7 区和第 11 区在 17 年的数据集中一直保持较高的数字。我们甚至可以宣布它们为芝加哥凶杀案最致命的警区。
- 整个数据集的最高谋杀率是在 2016 年的第 11 区,有 92 起谋杀案。
- 2016 年是数据集中凶杀案最糟糕的一年**,有 6 个区的凶杀案超过 50 起。**
- 热图使这些数据变得生动,是我们数据探索工具包中的一个非常好的工具。
最危险和最不危险的警区
**with** sns.plotting_context('notebook',font_scale=1.5):
sorted_homicides = df_homicide[df_homicide['Year']>=2016].groupby(['District']).count()\
.Arrest.reset_index().sort_values('Arrest',ascending=**False**)
fig, ax = plt.subplots(figsize=(14,6))
sns.barplot(x='District',
y='Arrest',
data=sorted_homicides,
color='steelblue',
order = list(sorted_homicides['District']),
label='big')
plt.title('HOMICIDES PER DISTRICT (2016-2017) - Highest to Lowest')
正如我们之前从热图中观察到的,有些地区比其他地区更危险,但现在我们可以更仔细地观察这一现象。从我们创造的各种可视化来看,我们至少可以得出结论,2016 年和 2017 年是芝加哥凶杀案最活跃的年份。
- 在上面的柱状图中,我将每个地区在这两年中最多和最少的谋杀案可视化,以了解它们之间的关系。
- 在这两年中,排名前 10 的地区都发生了 90 起以上的凶杀案。
- 11 区比名单上的下一组多了 30 起谋杀案。
- 22 个群体中的前 5 个群体占了该市所有凶杀案的 50%以上。
- 前 10 个群体占芝加哥所有凶杀案的 80%以上。
- 25 个区中有 8 个区的凶杀率非常低或相对较低。
杀人罪的逮捕与不逮捕:
接下来,我通过绘制下面的一些关系来看逮捕和杀人之间的关系。
看起来你可以在芝加哥逃脱谋杀。
*# create seaborn countplots for whole dataset*fig, ax = plt.subplots(figsize=(14,6))
df_arrest = df_homicide[['Year','Arrest']]
ax = sns.countplot(x="Year",
hue='Arrest',
data=df_arrest,
palette="PuBuGn_d")
plt.title('HOMICIDE - ARRESTS STATS BY YEAR')
上图比较了 17 年来数据集中所有凶杀案的逮捕与不逮捕情况。
- 在 21 世纪初,警方逮捕的人比没有逮捕的人多。
- 从 2001 年到 2008 年,警方逮捕了超过一半的凶杀案。
- 从 2009 年至今,警方逮捕了不到一半的人。
- 事实上,这种趋势看起来像是警察逮捕人数的下降趋势,可能始于 2004 年左右。
- 2016 年和 2017 年,逮捕率不到 30%。
*# create seaborn countplots for 2016 and 2017 -- high crime rate spike years*fig, ax = plt.subplots(figsize=(14,6))
ax = sns.countplot(x="Month",
hue='Arrest',
data=df_homicide[df_homicide['Year']>=2016][['Month','Arrest']],
palette="PuBuGn_d")
month_nms = ['January','February','March','April','May','June','July',\
'August','September','October','November','December']
ax.set_xticklabels(month_nms)
plt.title('HOMICIDE - ARRESTS STATS BY MONTH -- (2016-2018)')
- 真正让我惊讶的是,即使在 2016 年和 2107 年犯罪激增后,警方逮捕的谋杀事件仍在继续下降。上图试图观察月份特征,但只是证实了我们之前的观察。
- 我还没有发现这种下降的好原因,但经过一点点挖掘,我发现媒体报道了芝加哥警察局的政策变化,减少了对逮捕低级别罪犯的关注,更多地关注犯罪规模方面的大鱼。这就引出了一个问题,谋杀难道不是一种高调的犯罪吗?
- 2016 年发生的另一件有趣的事情是公众关注警察对有色人种的枪击事件,这让我想知道这是否在警察逮捕时不太积极方面发挥了重要作用。大多数高犯罪率地区都是以少数族裔为主的社区,2016 年,一名法官下令发布一段视频,显示芝加哥警察枪杀了一名黑人社区成员。
*# create seaborn lmplot to compare arrest rates for different districts*dfx = df_homicide[df_homicide['District'].\
isin(list(sorted_homicides.head(10)['District']))].\
groupby(['District','Year','Month','Arrest'])['Primary Type'].\
value_counts().unstack().reset_index()**with** sns.plotting_context('notebook',font_scale=1.25):
sns.set_context("notebook", font_scale=1.15) g = sns.lmplot('Year','HOMICIDE',
col='District',
col_wrap=5,
size=5,
aspect=0.5,
sharex=**False**,
data=dfx[:],
fit_reg=**True**,
hue="Arrest",
palette=sns.color_palette("seismic_r", 2),
scatter_kws={"marker": "o",
"s": 7},
line_kws={"lw":0.7})
进一步细分地区一级的逮捕与不逮捕,仅是高凶杀率地区,为我之前观察到的数据集中逮捕数量逐年下降提供了更多依据。上图显示了前 10 个最危险地区在同一轴上的逮捕和未逮捕回归线。
2006 年以前,警察逮捕的人数就开始比前一年少,到 2010 年,所有地区逮捕的杀人案不到一半。
很可能因杀人被捕的几率不到一半。如果你是住在高犯罪率地区的罪犯,这种可能性会大得多。
接下来,我用 python 可视化相册“叶子”创建了一些地图,展示了我的一些发现,并在下面做了笔记。原始代码上的地图是用户响应的,所以你可以放大、缩小和移动它们。
凶杀案与地区的对比图
(2001–2017)
*# plot chloropleth maps 2001 - 2017* **def** toString(x):
**return** str(int(x))df_homicide_allyears = df_homicide.groupby(['District']).count().Arrest.reset_index()
df_homicide_allyears['District'] = df_homicide_allyears['District'].apply(toString)*# ______________________________________________________#*chicago = location=[41.85, -87.68]
m = folium.Map(chicago,
zoom_start=10)plugins.Fullscreen(
position='topright',
title='Expand me',
title_cancel='Exit me',
force_separate_button=**True**).add_to(m)m.choropleth(
geo_data='chicago_police_districts.geojson',
name='choropleth',
data=df_homicide_allyears,
columns=['District', 'Arrest'],
key_on='feature.properties.dist_num',
fill_color='YlOrRd',
fill_opacity=0.4,
line_opacity=0.2,
legend_name='Choropleth of Homicide per Police District : 2001-2017',
highlight=**True**
)
folium.TileLayer('openstreetmap').add_to(m)
folium.TileLayer('cartodbpositron').add_to(m)
folium.LayerControl().add_to(m)
m.save("map1.html")
IFrame('map1.html', width=990, height=700)*# plot 2016-2018 chloropleth map*# code for *second map* is available on github
2001–2017 vs 2018
- 我为两个不同的时间段制作了两张 choropleth 地图。一个针对整个数据集,另一个针对 2016-2017 年期间,我们看到了谋杀案的激增。
- 这些地图很好地展示了不同警区的凶杀犯罪情况。
- 从这两张地图上,我们可以看到犯罪集中在城市西边和南边的警区周围。
- 有两个地区特别突出。这是 11 区和 7 区。
- 此外,犯罪率较高的地区在地理上是相连的/会传染的。
凶杀案 vs 地区热图—(2016–2017)
*# plot heatmap all districts -- (2016-2018)*after_2015_geo = []
**for** index, row **in** df_homicide[df_homicide['Year']>=2016][['Latitude','Longitude','District']].dropna().iterrows():
after_2015_geo.append([row["Latitude"], row["Longitude"],row['District']])
*# ___________________________________________________________________*
chicago = location=[41.85, -87.68]
m = folium.Map(chicago, zoom_start=9.5,control_scale = **False**)plugins.Fullscreen(
position='topright',
title='Expand me',
title_cancel='Exit me',
force_separate_button=**True**).add_to(m)m.choropleth(
geo_data='chicago_police_districts.geojson',
name='choropleth',
data=df_homicide_after_2015,
columns=['District', 'Arrest'],
key_on='feature.properties.dist_num',
fill_color='YlOrRd',
fill_opacity=0.4,
line_opacity=0.2,
legend_name='HeatMap Homicides : 2016-2017',
highlight=**True**
)
m.add_child(plugins.HeatMap(after_2015_geo,
name='all_homicides_2016_to_2017',
radius=5,
max_zoom=1,
blur=10,
max_val=3.0))
folium.TileLayer('openstreetmap').add_to(m)
folium.TileLayer('cartodbpositron').add_to(m)
folium.LayerControl().add_to(m)
m.save("map3.html")
IFrame('map3.html', width=990, height=700)
Chicago Homicide Heat Map
- 上面的热图可视化是用 pythonfollow可视化库创建的,它可以很好地控制在笔记本上绘制动态地图。
- 该热图适用于 2016-2017 年时间框架。这个时间段的各个犯罪现场位置被绘制在城市的画布上,并用颜色表示。
- 热图可以帮助我们在地图上直观地显示犯罪发生频率高或低的大致位置。深橙色代表犯罪率高的区域,断开的浅黄色/绿色阴影显示地图上犯罪率低的位置。
- 给人的第一印象是芝加哥西区和南区的凶杀率较高。我们可以放大每个区域的更多细节,每次放大都会显示该子区域中的更多集群。
注:我还创建了更具交互性的时移热图和聚类图,可以在这里 和在github上**查看。
最后,我创建了显示谋杀地点的聚类地图。在 nbviewer 上渲染的现场互动笔记本就位于这里。
(2001–2017) vs 2018
这些地图描绘了各个犯罪现场,这或多或少类似于热图,只是没有给这些地理位置添加颜色。其中一张地图是 2016-2017 年期间的,另一张地图是 2018 年的两个月数据(1 月和 2 月)。
1 月和 2 月的地图特别有趣,因为它显示了 2018 年初犯罪已经开始大量出现的地方。可悲的是,凶杀案遵循与前几年相同的模式,绝大多数犯罪发生在同一地区。
对于在正确领域中试图确定哪些问题点需要更多资源的任何人来说,该地图将是一个很好的工具。这些地图也是一个很好的工具,可以直观地检查社区中的个人犯罪地点,结合他们对该地区的了解,可以带来新的见解,可以探索并采取行动,使社区更加安全。例如,社区成员可以确定问题点,并为儿童建立安全的上下学通道。这张地图将有助于他们识别不太危险的街区。
结论
在这本笔记本中,我使用了芝加哥警察局收集的数据,从中提取了一些关于芝加哥凶杀案的见解。虽然这里进行的数据分析缺乏国家视角,但我的主要发现可以归纳为以下几个要点:
- 各警区的凶杀犯罪数量差异很大。数字高的地区似乎年复一年都有高的数字,反之亦然。
- 从 2004 年到 2015 年,凶杀案数量基本未变,每年分别为 400 起和 500 起。这些数字在 2016 年突然跃升至每年 700 起凶杀案。
- 这个新数字一直保持到 2017 年,每年超过 650 起凶杀案。
- 天气温度和每月凶杀案数量之间有关联。越是温暖的月份,杀人犯罪就越多。
- 一周中的某一天也会影响谋杀案的数量,周末的谋杀案数量会更多。
- 一天中的时间也会影响杀人案件的数量,晚上 9 点到凌晨 2 点最危险,早上 7 点到下午 1 点最安全。
- 第 11 区、第 7 区和第 15 区在 2016-2017 年期间发生的凶杀案最多,同一时期各发生了 120 多起凶杀案。
- 绝大多数凶杀案发生在街头,占所有凶杀犯罪现场的 60%以上。
- 2016-2017 年期间,第 20、16、18、1、19、17、24 和 14 区的凶杀案都不到 20 起,这使它们成为芝加哥最安全的警区。
- 自 2003 年以来,因杀人罪而被逮捕的人数一直在下降,2008 年,谋杀案的数量超过了因谋杀而被逮捕的人数。截至 2018 年,每 10 起凶杀案中有不到 3 起被逮捕。
虽然这些观察结果很有启发性,但我应该指出,它们并没有描绘出全貌,应该与国家或其他可比数据进行比较,以提供更多的视角。例如,虽然每年的凶杀案数量看起来很高,但我们不知道这是在全国*均水*以内还是太高了。这种比较将有助于我们在讲述数据故事时建立更有说服力的论据,用它们来支持我们的本地发现。
话虽如此,我们的发现仍然与当地决策者密切相关,因为他们非常清楚何时何地,但不是为什么。
抓住你的下一条鱼——如何撰写完美的数据科学白皮书
原文:https://towardsdatascience.com/hook-your-next-fish-how-to-write-the-perfect-data-science-white-paper-28ab51ef45af?source=collection_archive---------12-----------------------
Peter Sellars as Dr Strangelove, emphasing the importance of publicising a successful project.
如果你保守秘密,这个项目就失去了意义。“你为什么不告诉全世界,嗯?”——奇爱博士,1964 年。
做令人兴奋的工作的最大好处之一就是告诉别人这件事。除了自我满足的热情之外,当你用过去的工作给别人留下深刻印象时,你很有可能会有更令人兴奋的工作。
做到这一点的一个关键方法是写一份白皮书。白皮书是一份营销文件,旨在展示作者在特定领域的专业知识。通常,作者会试图解释他们是如何用自己的专业知识解决问题的,或者教授他们领域的一些基本知识,目的是帮助读者理解什么时候该给专家打电话。因此,一个商人可能会分享一些关于一些非常小的工作的提示,导致读者应该打电话给专业人士。
互联网上有很多写白皮书的指南,比如这里的,通常包括结构指南。然而,在数据科学的情况下,有一个转折,即作者通常使用他们的数据科学专业知识来解决读者是专家的领域中的问题。这对文档的组织方式以及如何接*观众有一个微小但明显的影响。
第一项任务是在读者的问题领域建立凭证,因为你在该领域不太可能比读者有更高的资格或经验,直接提供你自己的凭证不太可能成功。相反,最好的方法可能是“展示不说”法,这种方法在创意写作课上很常见。在这种情况下,它指的是让读者看到你的角色在行动和他们的故事展开,而不是写出他们的特点或概述情节。在这种情况下,它意味着以一种不怀疑其对该领域的重要性的方式解释你所处理的领域问题。如果一个解决方案没有价值,你就不会去做它,所以解释价值在哪里——很多时候它会以这个问题成为更大目标的障碍的形式出现。总的来说,通过展示你了解问题如何影响他们的业务,你可以赢得听众。
一旦你确定了问题,故事的下一步将是你如何解决它。在数据科学的背景下,通常需要两种工具来获得解决方案——足够的数据集(“足够”是因为大多数数据集与我们的“理想数据集”相差甚远)和合适的分析工具。
鉴于如此多的数据科学工具都是开源的,数据集(如果不是处于原始状态,通常是在您对其进行清理和预处理之后)有可能比竞争对手更具优势。因此,提及数据获取或清理的方式可能有助于进一步建立可信度。如果您使用主题专家的建议来改进预处理流程,情况尤其如此,例如,如果存在与收集流程相关的丢失数据的原因,而收集流程决定了如何处理这些丢失的数据。
当讨论所使用的算法时,这不仅仅是一个为非技术观众正确定制讨论的问题,还是一个节奏的问题。为了保持读者的注意力,白皮书需要有一个正在展开的故事的感觉和节奏;太多关于算法如何工作和你是如何做的细节会减慢速度,让读者失去兴趣。至关重要的是,读者没有必要完全理解用来传达你的信息的算法。几乎可以说,对算法的任何描述都比它对算法如何工作的真实解释更有色彩和趣味。
将您的算法应用于数据代表了您的三幕故事中的第二幕。在这里,解决方案本身并不是卖点,尽管它很重要。当您实施类似于预测模型的东西时,卖点通常是您在此过程中观察到的数据——关于变量相互作用方式的额外经验,或者关于哪些变量最有影响力或关系形状的惊喜。如果有必要的话,将你的分析扩展为一个完整的推理分析(无论如何你都要这么做,但那是改天的话题)。
如果你的白皮书框架正确,它会让人们记住你,并在他们的领域中想到你。接受数据科学解决方案的最大障碍之一是认为数据科学正在篡夺专家知识——白皮书提供了一个绝佳的机会来证明数据科学不是篡夺者,而是对专家知识的补充。
这一块源自 这一块 和 这一块 ,它们与数据科学销售周期的早期阶段相关。这篇文章如何与预期的未来文章相适应的纲要可以在我的博客 这里 找到。
人工智能研究的热点
原文:https://towardsdatascience.com/hot-topics-in-ai-research-4367bdd93564?source=collection_archive---------1-----------------------
如果你正在阅读这篇文章,你已经被人工智能驱动的技术包围了,超出你的想象。从你面前的网站到阅读 CT 扫描,AI 应用是不可避免的。
一般来说,当人们听到人工智能时,他们往往会将其等同于机器学习和深度学习,但它们只是人工智能研究中的许多子主题中的两个。这两个主题可以说是当今人工智能世界中最有效的主题,但还有许多其他子主题因其应用和未来潜力而在人工智能社区中获得了巨大的吸引力。在本文中,我们将讨论人工智能研究中的一些热门子主题,其中许多主题是相互关联的,并属于人工智能的大范围:
大规模机器学习
机器学习(ML)关注的是开发能够通过经验提高性能的系统。在过去的十年里,人工智能的进步可以很容易地归因于人工智能的进步。ML 太受欢迎了,已经成了 AI 的代名词。研究人员现在专注于将最先进的 ML 算法扩展到大型数据集。想了解更多关于 ML 的信息,请阅读这篇介绍性博客。
深度学习
深度学习(DL)是 ML 的一个子集,是神经网络的重新品牌化——一类受我们大脑中生物神经元启发的模型。DL 一直是人工智能中许多应用的驱动力,如对象识别、语音、语言翻译、玩计算机游戏和控制无人驾驶汽车。欲了解更多关于 DL 的信息,请阅读这篇介绍性博客。
强化学习
强化学习是人类学习方式的封闭形式。它由一个智能代理组成,智能代理与环境智能地相互作用,以获得一定数量的回报。代理的目标是学习顺序动作,以便最大化长期回报。就像一个从现实世界中学习经验的人一样,不断探索新事物,更新自己的价值观和信念,RL 代理人以类似的原则工作,以从长远角度最大化自己的回报。2017 年,谷歌的 AlphaGo 计算机程序在围棋比赛中使用 RL 击败了世界冠军。想了解更多关于 RL 的信息,请阅读这个博客。
机器人技术
从技术上讲,机器人技术是一个独立的分支,但它确实与人工智能有一些重叠。人工智能使机器人在动态环境中导航成为可能。你如何确保一辆自动驾驶汽车在最短的时间内从 A 点到 B 点,而不伤害自己和其他任何人?DL,RL 的进展可能有机器人学中此类问题的答案。想了解更多关于机器人技术的信息,请阅读这篇关于人工智能机器人技术的博客,并观看这些演示视频: 1 、 2 、 3 。
计算机视觉
如果我们想让机器思考,我们需要教它们看。费-李非,斯坦福人工智能实验室主任计算机视觉(CV)关注的是计算机如何视觉感知周围的世界。具有讽刺意味的是,计算机擅长做庞大的任务,如寻找一个 100 位数的 10 次方根,但在识别和区分物体等简单的任务中却举步维艰。最*在 DL 和标记数据集的可用性以及高计算能力方面的进展使得 CV 系统有可能在一些狭窄定义的任务(如视觉对象分类)中胜过它们的人类对应物。想了解更多关于简历的信息,请阅读这个博客。
自然语言处理
自然语言处理(NLP)涉及能够感知和理解人类口语的系统。它由语音识别、自然语言理解、生成和翻译等子任务组成。随着全球使用多种语言,NLP 系统可能成为真正的变革者。目前的 NLP 研究包括开发可以与人类动态交互的聊天机器人。想了解更多关于 NLP 的信息,请阅读这篇介绍性博客。
推荐系统
从读什么,买什么,到和谁约会,推荐系统无处不在,已经完全取代了虚拟世界中烦人的推销员。像网飞和亚马逊重工这样的公司依赖 RS。智能推荐系统会考虑用户过去的偏好、同伴的偏好和趋势,从而做出有效的推荐。要了解更多关于 RS 的信息,请阅读以下文章: 1 , 2 。
算法博弈论与计算机制设计
算法博弈论从经济学和社会科学的角度考虑多主体系统。它看到这些代理人如何在基于激励的环境中做出选择。这些多智能体系统可以包括自私的人类成员以及在有限资源环境中一起竞争的智能体。关于这个话题的更多信息,你可以关注大卫·巴夏礼教授的文章。这个环节也是很好的资源。
物联网
物联网(IoT)是一个概念,日常使用的物理设备连接到互联网,并可以通过交换数据相互通信。收集到的数据可以进行智能处理,使设备更加智能。这篇文章解释了人工智能如何被用来建造更智能的建筑。
神经形态计算
随着依赖于基于神经元的模型的深度学习的兴起,研究人员一直在开发可以直接实现神经网络架构的硬件芯片。这些芯片被设计成在硬件层面模仿大脑。在普通芯片中,数据需要在中央处理器和存储块之间传输,这导致了时间开销和能量消耗。在神经形态芯片中,数据以模拟方式在芯片中进行处理和存储,并可以在需要时生成突触,从而节省时间和能量。更多关于这些智能芯片开发的信息,请阅读这两篇文章: 1 、 2 。
其他详细介绍 AI 研究动态的文章: 0 、 1 、 2 、 3 。
注:该文章于 2018 年 5 月 7 日在 medium 上的出版物 AI Tale 中首次发表为“AI 研究中的热点子主题”。
参考文献:
斯通、彼得等《2030 年的人工智能与生活》。人工智能百年研究:2015–2016 研究小组报告 (2016)
房价和回归
原文:https://towardsdatascience.com/house-prices-and-regressions-7adf696053d6?source=collection_archive---------1-----------------------
本着我正在进行的系列活动的精神,如泰坦尼克号游戏竞赛,这里是另一个机器学习游戏竞赛。这次是为了用回归法计算出缺失的房价。
一如既往这里是我提交的捷径这里
数据
你从来不知道你想去爱荷华州的埃姆斯,但最终你会从迪安·德·科克收集的一组数据中获得超乎你想象的知识。有许多城市都有公开的住房数据集,比如我所在的佛蒙特州伯灵顿镇,但是在这次卡格尔竞赛中,我们希望探索销售价格与房子所有其他特征之间的可能关系。
房子的许多特征,但不是所有特征,都与销售价格有线性关系。通过填补缺失值,一些决定销售价格的功能工程和功能选择应该不会太远。在这种情况下,我尝试应用随机森林回归、套索和山脊回归来得出我的最终答案。
快速看一下地面以上*方英尺与销售价格的线性回归,就可以看出这种方法的优势。
方法
该数据集中有大量的特征,为了创建良好的预测,必须提前做大量的工作。组合训练集和测试集将意味着只需要在两个数据集之间进行一次更改。我们将探索以下步骤:
- 相互关系
- 特征探索
- 缺少值
- 数据标准化
- 特征工程
- 组装数据集
- 预言;预测;预告
销售价格应该有几个良好的指标,挑战将是数据和特征工程的标准化。
数据
该数据具有广泛的整数、浮点和分类信息。最终,它们将以数字的形式结束,但还不完全是。有几组不同类型的测量,了解它们的差异将有助于确定可以创建哪些新特征。
街区— 关于街区、分区和地段的信息。
- 示例:MSSubClass、LandContour、Neighborhood、BldgType
日期— 关于何时建造、改造或出售的基于时间的数据。
- 示例:YearBuilt、YearRemodAdd、GarageYrBlt、YrSold
质量/条件— 对房屋的各种特征进行分类评估,很可能是由房产评估员进行的。
- 示例:PoolQC、SaleCondition、GarageQual、HeatingQC
物业特征— 建筑附加特征和属性的分类集合
- 示例:基础、外部 1st、BsmtFinType1、实用程序
*方英尺— 建筑截面的面积测量以及门廊和地块面积等特征(单位为英亩)
- 示例:TotalBsmtSF、GrLivArea、GarageArea、PoolArea、LotArea
房间/特征计数— 特征(相对于分类)的定量计数,如房间,特征工程的主要候选
- 例如:全浴室、卧室、壁炉、车库
定价— 货币值,其中之一是我们试图确定的销售价格
- 示例:SalePrice、MiscVal
相互关系
快速相关性检查是了解数据集核心的最佳方式。销售价格与几个变量有很大的相关性:
- 总质量— 0.790982
- GrLivArea — 0.708624
- 车库汽车-0.640409
- 车库面积-0.623431
- TotalBsmtSF — 0.613581
- 1stFlrSF — 0.605852
- 全浴— 0.560664
- TotRmsAbvGrd — 0.533723
- 年份-0.522897
- YearRemodAdd — 0.507101
热图显示了整个数据集与其自身的相关性。记住红色越深(正相关)或蓝色越深(负相关)越好。
缺少值
缺失值的选择范围很广。首先,有意义的是先击中低垂的果实,处理那些缺少一两个值的,然后处理剩下的。其中一些看起来缺少值,不是因为他们没有数据,而是因为建筑物缺少该特征,如车库。使用熊猫获取。傻瓜会把那个问题分成真/假值。
替换丢失的数据
对于缺少单个值的分类信息,快速检查会显示哪些值占主导地位,并手动替换缺少的值。对大多数人来说,这是一个快速的过程。
推断缺失值
某些缺失值可以从该给定属性的其他值中推断出来。车库的建造时间最早应该是房子建造的那一年。同样,TotalBasementSQFeet 必须等于一楼的*方英尺。
地段临街
很多正面有点棘手。有 486 个缺失值(占总值的 17%),但快速检查相关性后发现,在地块区域之外具有高相关性的要素少得惊人。
逻辑表明,地块面积应与地块正面成线性关系。通过对地块正面和地块面积的*方根(如果是方形地块,则为有效的一边)之间的关系进行线性回归,快速检查表明我们处于大致范围内。
一旦缺失的值被填充,就可以很好地确认分布没有超出 wack 的范围。蓝色是原始分布,绿色是推断出缺失值的新分布,红色是地块面积的*方根曲线。不出所料,这些地产中的大部分看起来都没有完美的正方形地块,但就我们的目的而言,一切看起来都很好。
特征工程
现在是时候创建一些新的功能,看看它们如何帮助模型的准确性。首先是几个宏观的创造,比如把所有的内部和外部面积加在一起,得到包括楼层、车库和外部空间在内的总居住空间。有趣的是,这里有一个与整体条件评级相关的新功能的可视化
条件评级增加到*方英尺,这并不奇怪。然而,当对销售价格进行线性回归时,一个更明显的模式出现了。
这是一个很好的添加特性,但是它确实向您展示了特性的选择非常依赖于您想要预测的内容。
房间总数
相反,如果你对房间感兴趣,房间和浴室的数量有明显的关系。这是浴室的*均值,这条线是方差(大多数值偏离*均值的程度)。
楼上的房间越多,浴室之间的关系也越紧密。对于 13 个房间及以上的房间,房屋数量要少得多,因此数据的可靠性和可预测性较差。
地区
我们都知道社区有各种各样的特点。在某种程度上,它与销售价格有关系,但它更难定义,在预测中也不太有用。
销售月
在结束之前,最后一次彩色图表。我想知道佛蒙特州的房地产市场,因为天气会对许多活动产生很大的影响,包括看我想象中的房子。
这两个图表向我们展示了,虽然价格没有明显的月与月之间的变化,但有几个月的房屋销售量比其他月份多得多。如果我想预测房子什么时候会被卖掉,那会很有用。因为我看到的是实际价格,所以实际价格要低得多。
特征选择
选择正确的功能至关重要。低相关性的不良特征只会使噪声比信号更强,遗漏太多会导致数据丢失。因为有这么多,我不打算在这里列出来,但它在笔记本上。
模型和结论
有几个模型试过了。随机森林回归、LassoLarsCV 和 Ridge 都是选项,经过试验,我最终选择 Ridge 作为更好的选项。令人着迷和沮丧的是,每次我运行它时,准确性都有很大的变化。这些模型似乎都有一些波动。最后,我有了大约 82%-90%的准确率。在尝试将同样的过程应用于伯灵顿的住房数据时,我遇到了更奇怪的不一致和巨大的过度拟合问题。
回归的应用是复杂的,因为你试图预测一个特定的值,而不是像泰坦尼克号一样的是/否答案。我的提交可以进一步完善,但我的目标是在我拥有的 Burlington 数据集上做,而不是在这里。
3 个行业如何利用人工智能和物联网个性化在 CX 竞争
原文:https://towardsdatascience.com/how-3-industries-tap-into-ai-and-iot-personalization-to-compete-on-cx-bb56f7a31a48?source=collection_archive---------4-----------------------
Photo by Daniil Vnoutchkov on Unsplash
在全球品牌家喻户晓之前,本土品牌和较小的市场允许在直呼其名的基础上进行面对面的交流——想想安迪·格里菲斯吧。随着品牌变得地区性甚至全球性,奢侈品个性化通过客户关系管理软件来实现——例如,酒店员工记住客人的首选房间。但是曾经的奢侈待遇现在变成了现状,消费者需要更多来保持忠诚。
数字化通过消费者喜爱的数据建议帮助品牌保持竞争力——想想亚马逊和网飞。但是,顾客期望的改变意味着,没有新的个性化举措将是不够的。Gartner 报告称,不断投资新技术以提供完全个性化的客户体验(CX)的品牌——从品牌认知到购买等——将比那些不投资的品牌获得高 30%的销售率。
品牌转向全方位个性化,以保持消费者的忠诚度。
因此,品牌必须始终准备采用新技术来提高他们的个性化能力。而且,如果他们善于观察,他们知道物联网(IoT)和人工智能(AI)将在客户旅程的所有阶段塑造我们与产品和服务的交互方式。事实上,来自不同行业的许多品牌已经在利用人工智能和物联网的强大伙伴关系来实现全方位的 CX 个性化。
医疗保健品牌创建个性化护理的完整健康视图。
一名 58 岁男性因内出血被紧急送往急诊室。在找到并止住了出血后,一位医生提出了一个看似难以忍受的诊断:正在恶化的肝癌。
鉴于潜在的肝脏疾病,他可以接受治愈性肝脏移植,但肿瘤必须很小,以符合从负担过重的器官池中获得肝脏的资格。进一步的测试显示,在漫长的器官等待期内,他的肿瘤不太可能保持在标准范围内。病人和他的妻子都希望他们能早点发现肝癌。但是肝癌是无症状的,直到进行治疗时往往已经太晚了。
为了防止更多家庭遭受类似的创伤,IBM Research 正在开发一种纳米技术设备,它实际上是一个芯片上的 T2 实验室。这种手持设备可以分离出直径小至 20 纳米的生物颗粒,如病毒、外来体,甚至 DNA,这比人类头发的直径小 1000 倍。这样,即使患者没有任何症状,它也能在体液中检测出癌症等疾病。
但这还不是全部。IBM Research 的转化系统生物学和纳米生物技术项目主任 Gustavo Stolovitzky 说“我们的目标是,在未来 5 年内,我们将能够将这一技术和其他纳米技术与人工智能相结合,以克服当前的挑战,并在最早的可能阶段检测出癌症等疾病。”
患者可以像进行家庭怀孕测试一样轻松地使用纳米技术设备。然后,诊断数据将被发送到云中,并与其他物联网健康设备数据相结合,如智能手表或睡眠监测数据。总之,这些数据显示了完整的患者健康视图,通过人工智能分析实现了个性化的实时计划。
酒店品牌提供每时每刻的个性化服务来取悦每一位客人。
商务旅行时,你登记入住万豪酒店,然后去你的房间。在里面,每台电视机都叫着你的名字迎接你。时间不早了,你还有一个早会,所以你决定马上去睡觉。
夜里,你醒来需要去洗手间。当你起床时,红色的落地灯照亮了黑暗中的道路。当你回到床上时,你深吸一口气,注意到房间里的氧气水*会根据房间里的人数自动调节,所以不会感到闷热。
早上,蓝色的灯光让你进入清醒状态。你走向房间的智能镜子,它会指导你进行晨练,同时监控你的心率。天亮了,你环顾四周墙上的个性化艺术作品。
你开了一整天的会,然后回到你的房间,渴望进行一次缓解压力的锻炼。当您喜欢的健身器闲置并可供您使用时,您的手机会提醒您。锻炼后,您可以享受智能淋浴,水龙头会自动将水调节到完美的温度,带来舒缓的体验。
这就像一个包裹在商务旅行中的假期。万豪酒店已经准备好了。该品牌与三星和罗格朗合作,创建了一个原型智能房间,可以提供这种和其他个性化体验,包括家庭度假体验。
“这个想法是,如果我是万豪奖励会员,我的个人资料中有我的属性和不喜欢/喜欢,它可以根据我和我的旅行类型来做事情,更加个性化,”Legrand 需求挖掘高级副总裁 Ken Freeman 解释说。客人只需加入品牌的奖励计划,创建个人资料,然后进入他们的个性化人工智能/物联网体验。
Photo by Denys Nevozhai on Unsplash
汽车品牌与 autotech 公司合作,在旅途中实现实时个性化。
莎拉开着她新买的车在高速公路上行驶时,听到汽车仪表板发出叮的一声。因此,她的一天变得很紧张。仪表板显示屏上出现一盏小小的发动机灯。由于几乎没有指向原因的信息,她的想象力变得天马行空。她想象自己在高速公路边,汽车冒着热气。她驶离高速公路,开始给经销商打电话。与此同时,她担心会迟到或完全错过工作。
好消息是,这种情况很快就会成为一种濒临灭绝的物种。这是因为,到 2020 年,将有 2.5 亿辆联网汽车上路。此外,联网汽车带来了大数据,为实时诊断当前和潜在问题提供了潜力。即使没有连接的物联网汽车也存储数据,一旦连接,这些数据可以用于创建个性化的驾驶体验。
例如, CarForce 与 AT & T 合作,将断开连接的汽车重新连接到汽车服务中心,从而将人们从可怕的仪表盘叮当声中解救出来。经许可,经销商服务中心可以在客户汽车上安装小型设备,然后从所有当前连接的传感器收集数据。利用这些数据,CarForce 依靠人工智能来诊断和提醒经销商潜在的车辆问题。
反过来,经销商通过预防性维护警报和驾驶员可以采取的主动措施来解决现有问题,帮助驾驶员在可怕的高速公路场景中保持领先。更好的是,通过将物联网和人工智能结合起来,汽车经销商在 CX 有了一种新的竞争方式:他们不再简单地出售汽车,而是成为值得信赖的维护来源,提供全方位的个性化汽车拥有体验。
品牌可以采取小步骤为消费者未来的个性化期望做准备。
《商业内幕》报道称,如果不能在 CX 很好地竞争,T2 40%的品牌将在七年后不复存在。一些品牌显然致力于提供前沿的个性化服务,从而提高了所有行业的标准。这意味着,鉴于预计到 2020 年将有 204 亿台联网设备,品牌必须知道如何利用它们来获得个性化体验。
三个步骤帮助品牌开始实现个性化技术的现代化,以尖端的客户体验取代现状:
1.**确定哪种技术将提供行业特定的 CX 个性化,且几乎没有陷阱。**虽然 HIPPA 可能会为医疗保健公司的大规模物联网和人工智能个性化战略设置障碍,但物联网和人工智能 it 仍然可以通过个人设备数据分析来帮助个性化与患者的一对一关系。
2.通过循序渐进的方式为新兴技术做准备。万豪不是从创造智能房间开始的。相反,他们首先试验了 Alexa 为客人提供更个性化 CXs 的能力。与此同时,他们计划下一步的发展。
3.与提供特定行业个性化功能的科技公司建立合作伙伴关系。CarForce 就是这样一家科技公司。合作的代理商和维修中心不需要建立内部能力。通过战略合作伙伴关系,他们将物联网和人工智能满足目标市场的个性化需求,为消费者和品牌创造双赢。
通过三个小步骤,品牌可以大步迈向未来最重要的个性化体验的竞争。
一个高中生如何制造一辆自动驾驶汽车
原文:https://towardsdatascience.com/how-a-high-school-junior-made-a-self-driving-car-705fa9b6e860?source=collection_archive---------9-----------------------
与这个库相关的问题是我收到的最多的问题之一,这个库来自我三年前创建的一个项目。这个存储库本身并没有什么特别的,只是一年前发布的 Nvidia 论文的一个实现。一名研究生后来设法在一辆实际大小的汽车上实现了我的代码,这真的很酷。我的代码创建背后的故事是有趣的部分。
我对机器学习的迷恋始于 2015 年初,那时我偶然发现了遗传算法和神经网络。YouTube 上的热门视频显示,虚拟生物似乎在没有任何人类输入的情况下神奇地进化出复杂的行为。视频解释说,算法就像我在生物课上学到的交叉和随机突变一样简单,但我仍然不相信这样的计算机模拟是可能的。所以很自然的,我写了我自己的模拟来验证这是可能的。在它实际上起作用后,我被迷住了,我深入研究了麻省理工学院关于人工智能的开放课件系列。我花了大约两个星期的时间,每天看一到两个讲座,基本上是吃了整整一学期的人工智能入门材料。
现在,真正有趣的事情开始了——数学。老实说,在我真正理解 backprop 之前,我与它斗争了几个星期。我找到的所有论文、指南和博客都没有以我能真正理解的方式解释它,我花了很长时间试图实现它,但几乎没有成功。最后,我找到了一个我点击的博客,我在 YouTube 上制作了一个视频浓缩了我所了解到的信息,以便处于我这个位置的困惑的人可以像我一样学习*。最后,我用 C++从头开始编写了一个神经网络库,以确保我理解了我所学的内容,并且(很)后来将其改进为一个小型知识库,旨在帮助初学者理解神经网络如何工作。*
我对自动驾驶汽车的迷恋几乎完全是受特斯拉(该公司,而不是天才)的启发,特斯拉最*发布了他们的自动驾驶仪“驾驶”他们汽车的疯狂视频。带着我新发现的天真和对机器学习的浅薄知识,我开始制作我自己的。
第一个(也许是最明显的)挑战是数据收集。我需要记录视频和相应的方向盘角度。视频很简单:我只是草率地在挡风玻璃上贴了一个摄像头。另一方面,方向盘角度是一个完全不同的挑战。我的第一个方法是将加速度计和 Arduino 连接到方向盘上,并将时间数据与视频同步。对于任何一个曾经在糟糕的司机急转弯时被甩到车边的人来说,你会立刻明白为什么这种方法会彻底失败。首先,加速度计从汽车的任何微小运动中获得加速度。其次,精确同步来自不同设备的加速度计数据和视频数据是一个巨大的挑战,我不想应对。
我的第二种方法是直接与汽车接口,使用每辆现代汽车都配备的 OBD-II 端口访问 CAN 总线。这给带来了许多挑战,但回报(超精确的方向盘测量)绝对值得。
*挑战 1: *我如何从 OBD-II 端口读取 CAN 总线?解码和处理 CAN 总线信号是一个复杂的过程,需要花费大量时间来编写和调试。幸运的是,已经有人做到了。使用这段代码和相对便宜的 Arduino shield,我能够轻松地从汽车中提取和读取 CAN 总线数据。
*挑战 2: *我如何将大量的 CAN 总线数据转化为方向盘读数?下面是我收到的仅 10 行(不到一秒)CAN 总线数据的图像。
所有这些数据都包含了与 CAN 总线相连的汽车中每个系统的信息,从挡风玻璃雨刷到方向盘上的扭矩传感器。在数据的最左列是对应于接收到的数据包的地址(右列)。例如,在第 1 行,我们从地址 86 接收[7,108,255,160,7,4]。汽车公司真的不喜欢公开发布哪些地址对应于汽车的哪些部件,他们尤其不喜欢有人摆弄他们汽车的硬件。因此,我必须设计一些方法来解析数百个 CAN 总线通道,并找到提供方向盘角度信息的单个通道。**
我基本上是通过手动单独监控每个通道来做到这一点的,同时我慢慢转动方向盘,寻找接收到的数据的*滑变化。经过大量的实验,我设法找出了哪个通道对应于方向盘,以及汽车的其他几个部件(油门、刹车、速度等)。).
挑战三: 我有了数据和渠道,现在怎么办?来自 CAN 总线的数据格式不佳。你不会收到类似“64 频道发送信息:43.5 度”的信息相反,你得到的是一堆杂乱的数据,这些杂乱的数据在某种程度上对应着一个角度。我需要确定几个字节的数据和方向盘角度之间的某种“转换函数”。为此,我将方向盘移动到不同的位置,并记录与该位置相关的相应字节。例如,如果我将方向盘移动到 90 度并接收到[0,128,0,0],然后将其移动到 135 度并接收到[0,192,0,0],我可以粗略估计第二个数据点对应于大约:(192–128)/(135–90)度的倍数。我非常幸运地得到数据是转向角的简单线性变换。使用这种方法,我最终通过实验确定了一个可以应用于数据的线性变换,以获得方向盘角度。
这里有一个视频展示了这一过程,三个挑战都得到了解决。后来我出去了,在我的镇上开了几个小时的车,收集有标签的数据,我的 2015 Macbook Air 放在副驾驶座上。我拿到驾照还不到一年,所以这真的不是个好主意。另一个有趣的事实是:我有几次逃学出去收集数据,所以为我错过的所有课程向 S 先生和 N 女士道歉!
现在有趣的部分:将机器学习应用于任务。
我的第一次尝试是用 Caffe 在 AlexNet 上训练一个分类模型。我把我的数据分成大小为 10 度的箱,得到一组方向盘角度在 0-9 度、10-19 度、20-29 度之间的图像。最后,我对分类输出进行线性组合,以获得最终预测。动机大致是这样的:“如果模型预测 20 度和 30 度的角度有相同的可能性,那么真实的角度可能在 25 度左右。”快速声明:这是而不是处理事情的好方法。感谢当时我并不真正理解的统计学的魔力,这实际上并没有变成可怕的,我后来把它变成了一个仓库的垃圾箱火灾。知识库中嵌入了许多糟糕的编码实践,我将它作为我成功和失败的提醒,将它作为我从那时起学到的许多东西的时间胶囊。
我的第二次尝试是复制最*出来的 Nvidia 论文,稍加修改。Nvidia 型号使用以下架构:
最后的输出是前面十个神经元的简单线性组合,我觉得还可以改进。我通过对线性组合应用反正切函数来改变这一点,我认为这样更直观。反正切为网络提供了一种从可视数据中“恢复”曲率角度的工具,而不必重新学习将斜率或切线转换为弧度的方法。在实践中,它真的没有什么不同,但我保留它只是为了好玩。
我在 TensorFlow 中花了大约一个晚上编写了代码,并在我当时拥有的廉价 750ti GPU 上对它进行了训练。Nvidia 的论文并没有详细说明他们的训练过程,总体来说,论文没有给出太多关于他们如何完成他们所做事情的信息。我使用亚当优化连同 L2-正常化和辍学的训练。最后,我取得了不错的成绩!
总的来说,这个庞大的项目教会了我大量的信息、技术和编码实践。它也引起了很多关注,并为我带来了一些面试和一些工作机会!Nvidia 甚至让我飞到他们的自动驾驶实验室,参观他们的技术,这真的很酷!他们给了我一个相当优厚的条件,让我在接下来的一年里和他们一起实习,但我不情愿地拒绝了继续读本科。在我发布了我的作品后,我在网上遇到了很多了不起的人,这可能是整个经历中最有收获的部分。
有什么问题尽管问!
一个简单的算法如何以中等精度对文本进行分类
原文:https://towardsdatascience.com/how-a-simple-algorithm-classifies-texts-with-moderate-accuracy-79f0cd9eb47?source=collection_archive---------1-----------------------
涵盖的内容:数据探索、文本分类、不*衡数据、各种度量
Photo by Damiano Lingauri on Unsplash
尽管最*围绕 NLP 的深度学习取得了令人兴奋的进展,但我想展示简单的分类器如何能够达到中等精度。这是一件好事,因为训练这些分类器不需要大量的数据和计算,这是训练深度神经网络的情况。
在这篇博文中,我选择了一个叫做逻辑回归的分类器。我将在亚马逊美食评论上训练它,以预测给定的文本被归类为正面评论或负面评论。
1。数据描述
数据形状(行,列):(568454,10)
列名:描述
- Id:分配给每行的唯一编号
2.产品 Id:产品 id 号
3.用户标识:用户标识号
4.ProfileName:用户名
5.HelpfulnessNumerator:认为评论有帮助的用户数量
6.HelpfulnessDenominator:投票总数(认为评论有帮助的用户数和认为没有帮助的用户数)
7.得分:评分在 1 到 5 之间(1 =最不喜欢,5 =最喜欢)
8.时间:审核的时间戳
9.总结:产品的简短回顾
10.文本:产品评论的文本
我将只使用两个特征:7:分数和 10:文本作为预测器或自变量。
2.数据探索
import panda as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns; sns.set();data = '../../datasets/amazon_review/Reviews.csv'
data = pd.read_csv(data) *# Take proportion of each review score* score_pct = np.bincount(data['Score']) **/** data.shape[0]
scores = pd.DataFrame(np.random.rand(1, 5),
index=['scores'],
columns=pd.Index([1, 2, 3, 4, 5], name='Score'))
scores.iloc[0] = score_pct[1:]
scores.plot.bar()
Proportion of review from 1 to 5
超过 60%的评论是最受欢迎的评论(得分 5),其次是中等受欢迎的评论(得分 4)。总评论的 70%由这两个评论分数组成。
来看一些评分 3 和评分 4 的评论。
10 条评分为 3 的评论:
这些评论包括正面评论和负面评论。我将评分为 3 的评论归类为负面,原因如下:第一、第三和第十条评论不包含任何正面评论,即使有些评论有正面评论,但在同一食品的评论中包含负面评论可能会阻止其他人购买食品。
print(data[data['Score'] == 3]['Text'].values[:10])[ "This seems a little more wholesome than some of the supermarket brands, but it is somewhat mushy and doesn't have quite as much flavor either. It didn't pass muster with my kids, so I probably won't buy it again."
'The flavors are good. However, I do not see any differce between this and Oaker Oats brand - they are both mushy.'
'This is the same stuff you can buy at the big box stores. There is nothing healthy about it. It is just carbs and sugars. Save your money and get something that at least has some taste.'
"we're used to spicy foods down here in south texas and these are not at all spicy. doubt very much habanero is used at all. could take it up a notch or two."
'Watch your prices with this. While the assortment was good, and I did get this on a gold box purchase, the price for this was<br />$3-4 less at Target.'
"If you're impulsive like me, then $6 is ok. Don't get me wrong, the quality of these babies is very good and I have no complaints. But in retrospect, the price is a little ridiculous (esp. when you add on the shipping)."
'The taste was great, but the berries had melted. May order again in winter. If you order in cold weather you should enjoy flavor.'
'While my dogs like all of the flavors that we have tried of this dog food, for some reason their itching increased when I tried the lamb and rice. I have some very itchy dogs and am giving them a limited ingredient dog food to try to help. The duck and sweet potato cut down on the itching significantly, but when we tried lamb and rice they started itching more once again. I like Natural Balance for the quality ingredients.'
'Awesome dog food. However, when given to my "Boston", who has severe reactions to some food ingredients; his itching increased to violent jumping out of bed at night, scratching. As soon as I changed to a different formula, the scratching stopped. So glad Natural Balance has other choices. I guess you have to try each, until you find what\'s best for your pet.'
"not what I was expecting in terms of the company's reputation for excellent home delivery products"]
5 条评分为 4 的评论:
得分为 4 的评论总体上是正面的,并且包括诸如“高度推荐”、“我很高兴”之类的词语。
print(data[data['Score'] == 4]['Text'].values[:10])[ 'This is a confection that has been around a few centuries. It is a light, pillowy citrus gelatin with nuts - in this case Filberts. And it is cut into tiny squares and then liberally coated with powdered sugar. And it is a tiny mouthful of heaven. Not too chewy, and very flavorful. I highly recommend this yummy treat. If you are familiar with the story of C.S. Lewis\' "The Lion, The Witch, and The Wardrobe" - this is the treat that seduces Edmund into selling out his Brother and Sisters to the Witch.'
'I got a wild hair for taffy and ordered this five pound bag. The taffy was all very enjoyable with many flavors: watermelon, root beer, melon, peppermint, grape, etc. My only complaint is there was a bit too much red/black licorice-flavored pieces (just not my particular favorites). Between me, my kids, and my husband, this lasted only two weeks! I would recommend this brand of taffy -- it was a delightful treat.'
'good flavor! these came securely packed... they were fresh and delicious! i love these Twizzlers!'
'I was so glad Amazon carried these batteries. I have a hard time finding them elsewhere because they are such a unique size. I need them for my garage door opener.<br />Great deal for the price.'
"McCann's Instant Oatmeal is great if you must have your oatmeal but can only scrape together two or three minutes to prepare it. There is no escaping the fact, however, that even the best instant oatmeal is nowhere near as good as even a store brand of oatmeal requiring stovetop preparation. Still, the McCann's is as good as it gets for instant oatmeal. It's even better than the organic, all-natural brands I have tried. All the varieties in the McCann's variety pack taste good. It can be prepared in the microwave or by adding boiling water so it is convenient in the extreme when time is an issue.<br /><br />McCann's use of actual cane sugar instead of high fructose corn syrup helped me decide to buy this product. Real sugar tastes better and is not as harmful as the other stuff. One thing I do not like, though, is McCann's use of thickeners. Oats plus water plus heat should make a creamy, tasty oatmeal without the need for guar gum. But this is a convenience product. Maybe the guar gum is why, after sitting in the bowl a while, the instant McCann's becomes too thick and gluey."]
2。训练分类器和预测
我会将每一篇评论分为正面或负面,并训练一个分类器来预测这两个值。正如我们在上面看到的,分数为 3 的评论可以被视为负面的,所以如果分数超过 3,我会将每个评论分为正面的,如果分数低于 3,则分为负面的。由于数据量很大,我将使用 4%的数据。
*# We shuffle the rows and extract 10% of the rows* df_reduced = data.sample(frac=0.04, random_state=7)
reduced_data_size = df_reduced.shape[0]# Encode positive as 1 and negative as 0
reduced_labels = np.array([df_reduced['Score'] >= 4])[0][:].astype(int)
reduced_texts = df_reduced['Text'].values
样本数量从 568454 减少到 22738
reduced_sentiment_pct = np.bincount(reduced_labels) / reduced_data_size # percentage value of each sentiment
sentiment = pd.DataFrame(np.random.rand(1, 2),
index=[‘count’],
columns=pd.Index([“negative”, “positive”], name=’sentiment’))
sentiment.iloc[0] = reduced_sentiment_pct
sentiment
sentiment.plot.bar(title="Ratio of each sentiment")
Proportion of each sentiment value
正如我们在上面的柱状图中看到的,78%的评论是正面的。所以这是不*衡的数据,这意味着,**“如果我们只是手动将每个样本(或每个样本)分类为“阳性”,我们将获得大约 78%的分类准确率。”**因此,78%的准确率是我们的基准之一。
我将使用 80%的数据作为训练集,20%作为测试集。
*# we will use 80% of data as training set, 20% as test set*train_size = int(reduced_data_size ***** .8)text_train = reduced_texts[:train_size]y_train = reduced_labels[:train_size]text_test = reduced_texts[train_size:]y_test = reduced_labels[train_size:]
训练集:18190 个样本
测试集:4548 个样本
我会将文本转换成适当的格式(由数值组成),以便可以对它们进行分类训练。我将使用两种方法:A:单词袋和 B.TFIDF
答:一堆废话
单词包使用标记化将文本转换成数字表示。
使用下面的单词包处理两个文档的示例:
Process of bag-of-words. Inspired by [Introduction to Machine Learning with Python](http://Process of bag-of-words. Inspired by Introduction to Machine Learning with Python)
上述过程的代码
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer().fit(text_train)
X_train = vect.transform(text_train)
print(repr(X_train))X_test = vect.transform(text_test)
print(repr(X_test))
X_train 是:8190x26817 稀疏矩阵
X_test 为:4548x26817 稀疏矩阵
#稀疏矩阵是只包含非零元素的矩阵
拟合逻辑回归
注意:
- 我在下面的实例化中使用了 class_weigtht="balanced"。这具有惩罚少数类(该数据集中的负类)上的错误的效果。
- 我用的 GridSearchCV 是带“roc_auc”的,不是“分类精度”。这方面的理由写在下面一节。
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import confusion_matrix
from sklearn.linear_model import LogisticRegressionlogreg = LogisticRegression(class_weight=”balanced”, random_state=0)
param_grid = {‘C’: [0.01, 0.1, 1, 10, 100]}grid = GridSearchCV(logreg, param_grid, scoring=”roc_auc”, cv=5)
logreg_train = grid.fit(X_train, y_train)pred_logreg = logreg_train.predict(X_test)
confusion = confusion_matrix(y_test, pred_logreg)
print(confusion)
print("Classification accuracy is: ", (confusion[0][0] + confusion[1][1]) / np.sum(confusion))
混乱矩阵:
[[ 826 206]
[ 468 3048]]
分类精度为:0.851802990325
我打印了一个混淆矩阵,下面画出了它的一个概念。总的来说,我们希望增加真阴性和真阳性的数量。(这两个是矩阵的主对角线)同时最小化假阴性和假阳性的数量(这两个是非对角线)。在上面的混淆矩阵中,假阴性比假阳性多。这可能是由于给定的类权重的惩罚。分类精度计算为:(TN+TP) / (TN+TP+FP + FN)。
Concept of confusion matrix
from sklearn.metrics import roc_curvefpr, tpr, thresholds = roc_curve(y_test, grid.decision_function(X_test))
# find threshold closest to zero:
close_zero = np.argmin(np.abs(thresholds))
plt.plot(fpr[close_zero], tpr[close_zero], ‘o’, markersize=10,
label=”threshold zero(default)”, fillstyle=”none”, c=’k’, mew=2)
plt.plot([0,1], linestyle=’ — ‘, lw=2, color=’r’, label=’random’, alpha=0.8)
plt.legend(loc=4)
plt.plot(fpr, tpr, label=”ROC Curve”)
plt.xlabel(“False Positive Rate”)
plt.ylabel(“True Positive Rate (recall)”)
plt.title(“roc_curve”);
from sklearn.metrics import auc
print(“AUC score is: “, auc(fpr, tpr));
AUC 分数是:0.901340273919
ROC curve
ROC & AUC
ROC:针对假阳性率和真阳性率绘制的曲线,它考虑了分类器的所有阈值。真阳性率也叫召回率。最佳点是左上角,在这里可以实现最低的 FPR 和最高的 TPR。
AUC:ROC 曲线下的面积。此 AUC 的范围(可能值)介于 0(最差)和 1(最佳)之间。随机预测总是产生 0.5 的 AUC 分数。 AUC 是从阳性类别中随机选择的样本比从阴性类别中随机选择的样本给出更高分数的概率或阳性类别中的置信度。因此,AUC 给出了关于预测的附加信息,即关于模型比较(例如,一些模型可能是随机分类器)和可以产生更高分类率的适当阈值的信息。这就是我在 GridSearch 中使用 AUC 作为度量标准的原因。
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(\
y_test, logreg_train.decision_function(X_test))
close_zero = np.argmin(np.abs(thresholds))
plt.plot(precision[close_zero], recall[close_zero], 'o', markersize=10,
label="threhold zero", fillstyle="none", c="k", mew=2)
plt.plot(precision, recall, label="precision recall curve")
plt.xlabel("precision")
plt.ylabel("recall")
plt.title("Precision Recall Curve")
plt.legend(loc="best");
Precision Recall Curve
精确和召回
精确度和召回率由下面的公式决定。这两种价值观之间是有取舍的。当目标是减少假阳性的数量时,使用精度。在该数据中,目标可以是减少被预测为正面的负面评论的数量。设定这一目标的理由是,如果预测是肯定的,一些食品公司可能会出售大量不喜欢或不受欢迎的食品。因此,更高的假阳性率将导致不必要的更高的食品生产成本。另一方面,当目标是减少假阴性的数量时,使用召回。在这些数据中,这意味着目标是减少被错误分类为负面评价的正面评价的数量。我们可能需要更高的召回率,因为销售更多的大众食品会增加利润。因此,我们可以将精确度和召回率的权衡视为该数据集中成本最小化和利润最大化的权衡。
Formulas of precision and recall and tradeoff
B: TFIDF(频率-逆文档频率)
TFIDF 对在特定评论(文档)中频繁出现但在作为整体的评论(语料库)中不频繁出现的词给予高权重。具有高权重的单词是每个评论的代表,而具有低权重的单词出现在许多评论(例如,吃、食物)中,并且不与特定评论相关联。
A formula of tf-idf
A process of tf-idf
logreg = LogisticRegression(class_weight="balanced", random_state=0)
pipe = make_pipeline(TfidfVectorizer(norm=None, stop_words='english'), logreg)
param_grid = {'logisticregression__C': [0.001, 0.01, 0.1, 1, 10]}grid = GridSearchCV(pipe, param_grid, scoring="roc_auc", cv=5)
logreg_train = grid.fit(text_train, y_train)fpr, tpr, thresholds = roc_curve(y_test, grid.decision_function(text_test))
pred_logreg = logreg_train.predict(text_test)
confusion = confusion_matrix(y_test, pred_logreg)
print(confusion)
print("Classification accuracy is: ", (confusion[0][0] + confusion[1][1]) / np.sum(confusion))
print("Test AUC score is: ", auc(fpr, tpr));
混淆矩阵
[[806 226]
【454 3062]]
分类准确率为:0.850483729112
AUC 得分为:0.899483666
让我们想象一下哪 25 个单词对预测的影响最大。(点击下图放大)
mglearn.tools.visualize_coefficients(grid.best_estimator_.named_steps['logisticregression'].coef_,
feature_names, n_top_features=25)
plt.title("tfidf-cofficient")
Blue for word which has huge influence on making prediction on positive review and red for negative.
对于负面评论(红色部分),会出现“失望”、“最差”等词语。对于正面评论(蓝色部分),会出现“很好”、“最好”等词语。奇怪的是,还有一些红色的单词,如“ok”、“excited”,这些应该是正面的评论。这将在下面讨论。
N-gram
对单词或每个单词进行训练是很棘手的,因为一些单词组合在一起表示非常不同的意思。
例如,“这不是一个好产品”,如果你用 1-gram(unigram)来标记这个句子,你会得到 6 个不同的单词,其中包括“好”。如果你用 3-gram,那么你会得到 3 个单词的所有组合,其中一个是“不好”。很明显,对“不是一个好”的训练可能导致更好的准确性,因为“不是一个好”更好地抓住了这句话的负面含义。
3-gram(三元模型)用于训练下面的分类器。
pipe = make_pipeline(TfidfVectorizer(min_df=5), LogisticRegression(class_weight="balanced", random_state=0))
param_grid = {'logisticregression__C': [0.001, 0.01, 0.1, 10, 100],
'tfidfvectorizer__ngram_range': [(1,1), (1,2), (1,3)]}grid = GridSearchCV(pipe, param_grid, scoring="roc_auc", cv=5)
logreg_train = grid.fit(text_train, y_train)
pred_logreg = logreg_train.predict(text_test)
confusion = confusion_matrix(y_test, pred_logreg)
print("confusion matrix \n", confusionprint("Classification accuracy is: ", (confusion[0][0] + confusion[1][1]) / np.sum(confusion))
print("AUC score is: ", auc(fpr, tpr));
混淆矩阵
[[810 222]
【261 3255】]
分类准确率为:0.893799472296
AUC 评分为:0.932426383
AUC 增加了约 3%
feature_names = np.array(grid.best_estimator_.named_steps["tfidfvectorizer"].get_feature_names())
coef = grid.best_estimator_.named_steps["logisticregression"].coef_
mask = np.array([len(feature.split(" ")) for feature in feature_names]) == 3
mglearn.tools.visualize_coefficients(coef.ravel()[mask],
feature_names[mask], n_top_features=40)
Trigram gram visualization
对于负面评论,会出现“不值得”、“不如”这样的词。对于这些单词,每个单词不传达任何意思(例如,the,as)或相反的意思(例如,值得,不值得)。对于正面评价,有一个连词,“喜出望外”。“惊讶”只能被认为是消极或积极的,副词,“愉快地”确保这有一个积极的意义。
总结:
对于少量数据和少量计算资源,您可以使用分类器,如逻辑回归,并根据如何转换数据来达到中等精度。考虑到数据大小和有限的硬件,在某些情况下,您可能不需要使用像 RNN、LSTM 这样的模型。
完整代码在此
主动学习如何帮助您用更少的数据训练模型
原文:https://towardsdatascience.com/how-active-learning-can-help-you-train-your-models-with-less-data-389da8a5f7ea?source=collection_archive---------5-----------------------
即使有大量的计算资源,在大型数据集上训练一个机器学习模型也可能需要几个小时、几天甚至几周的时间,这是昂贵的,并且是你生产力的负担。但是,在大多数情况下,您不需要所有可用的数据来训练您的模型。在本文中,我们将比较数据子集化策略以及它们对模型性能的影响(训练时间和准确性)。我们将在对 MNIST 数据集子集的 SVM 分类器的训练中实现它们。
通过主动学习构建子集
我们将使用主动学习来构建我们的数据子集。
主动学习是机器学习的一种特殊情况,在这种情况下,学习算法能够交互式地询问用户,以在新的数据点获得所需的输出。
子集化数据的过程是由一个主动学习者完成的,该学习者将基于一个策略进行学习,该策略的训练子集适合于最大化我们的模型的准确性。我们将考虑 4 种不同的策略来从原始训练集中构建这些数据子集:
- 随机采样:随机采样数据点
- 不确定性采样:我们选择我们最不确定其类别的点。
- 熵采样:选择类概率熵最大的点
- 边缘采样:我们选择最有可能和第二有可能类别之间的差异最小的点。
这些策略中的概率与 SVM 分类器的预测相关联。
对于这项研究,我们将构建 5000 个子集(8%的数据);原始训练集 60,000 点中的 10,000 点(数据的 17%)和 15,000 点(数据的 25%)。
结果
为了测量我们在子集上训练的性能,我们将测量 训练准确度 和 训练时间比率计算如下:
我们可以为测试数据集计算相同的比率。结果总结在下图中。每个策略的 3 个数据点对应于子集的大小(5,000;一万和一万五)。
正如我们所看到的,使用不确定性采样策略,我们可以在 15,000 个点的子集上实现 99%以上的性能,而在完整数据集上训练 SVM 所需的时间仅为 35%。这清楚地表明,我们可以获得与使用完整数据集相当的结果,但只需要 25%的数据和 35%的时间。随机抽样是所有策略中最快的,但就准确率而言也是最差的。
因此,对数据子集进行处理是一种合理的方法,可以用更少的计算量显著减少训练时间,并且不会影响准确性。子集化数据适用于大多数分类数据集,但需要扩展以适用于时间序列数据和您正在训练的模型。
我们需要多少数据?
既然我们已经证明了在数据子集上训练模型的价值和可行性,我们如何知道最佳的子集大小应该是多少呢?一种叫做 FABOLAS [Klein et al.]的方法在这里实现可以推荐你应该使用的子集的大小。它通过学习上下文变量(要使用的数据集的大小)和最终得分的可靠性之间的关系来做到这一点。这意味着,通过在子集上训练模型,它可以推断模型在完整数据集上的性能。
贝叶斯优化扩展
如果我们想更进一步,我们可以通过使用贝叶斯优化来更有效地优化子集上的超参数的训练。我在以前的帖子中已经写了很多关于它的内容:
[## 高斯过程贝叶斯优化背后的直觉
在某些应用中,目标函数是昂贵的或难以评估的。在这些情况下,一般…
towardsdatascience.com](/the-intuitions-behind-bayesian-optimization-with-gaussian-processes-7e00fcc898a0) [## 揭开超参数调谐的神秘面纱
它是什么,为什么是自然的
towardsdatascience.com](/demystifying-hyper-parameter-tuning-acb83af0258f)
在 Mind Foundry,我们正在努力通过贝叶斯优化和主动学习来实现最优和高效的机器学习。如果您有任何问题或想尝试我们的产品,请随时给发电子邮件给我!
【更新:我开了一家科技公司。你可以在这里找到更多的
1:https://en . Wikipedia . org/wiki/Active _ learning _(machine _ learning)
2: 亚伦·克莱因,斯特凡·福克纳,西蒙·巴特尔,菲利普·亨宁,弗兰克·赫特,大型数据集上机器学习超参数的快速贝叶斯优化,arXiv:1605.07079【cs。LG]
人工智能和人类如何优化空气污染监测
原文:https://towardsdatascience.com/how-ai-and-humans-can-optimise-air-pollution-monitoring-bcc7807c7566?source=collection_archive---------8-----------------------
空气污染监测
众包空气质量监测案例
Photo by veeterzy on Unsplash
根据世界卫生组织(世卫组织)的数据,空气污染每年导致 420 万人死亡。难怪我们应该投入资源来了解和监测城市和社区的空气质量。这应该有助于城市规划当局,因为他们可以决定在哪里种树,建设绿地和管理交通。此外,它可以让我们所有人意识到空气污染对我们日常生活的影响,这对我们的健康至关重要。
在这篇文章中,我们从不同的角度探讨空气污染。我们想介绍和讨论众包空气质量监测的概念。对于那些不熟悉众包概念的人来说,它是关于让公众参与进来以实现一个共同的目标。我们可以通过将参与者的工作分成小任务来实现这一点;在这种情况下,收集空气质量测量值。我们的目标是以一种聪明的方式使用众包,通过使用人工智能(AI)来建立一个准确的空气污染热图。
我们认为,与目前放置在城市中的静态空气质量传感器相比,众包可能是一种更好的方法。首先,不是每个城市或城镇都有一个,当他们有一个时,他们通常被放置在一个捕捉该地区*均空气质量的方式。这意味着它们不一定反映我们在市中心行走时吸入的污染物。此外,我们需要考虑获取、维护和使用静态空气质量传感器的成本。
相反,众包提案依赖于我们参与的意愿。然而,这也需要使用低成本的移动空气质量设备来读取我们的行踪。
重要的是,我们不希望在任何时候任何地方都进行测量。这既有实际原因,也有数据隐私原因。首先,传感器必须连续工作。它还必须跟踪我们的位置,并采取时间戳空气质量测量。即使我们在室内,或者它在我们的包里或口袋里。因此,电池寿命很容易耗尽。最重要的是,这个小小的传感器比你的另一半更了解你的行动。不太好。
因此,挑战在于
确定何时何地应该进行空气质量测量,以便有效地监测我们的城市。
希望现在这里的优化问题开始变得更加清晰。考虑到我们实际愿意贡献的频率和设备可用的电池量,我们希望确定进行测量的最佳位置,以便这些测量对促进有效的环境探索最有用,从而提高我们对环境的了解。
要解决问题,首先需要回答一些关键问题。具体来说,我们的环境是如何表现的?每个测量对整体情况的贡献有多大?不同的测量方法如何影响我们对空气质量的理解?
本质上,我们需要一个环境模型。这将有助于我们量化每次阅读中包含的信息。它还可以帮助我们了解每个测量如何影响随时间收集的整体信息。
一个很好的候选方法是使用高斯过程。对于更专业的读者来说,高斯过程是一种回归技术,它自然地提供了估计值的预测均值和方差。在实践中,这意味着我们可以使用这种技术来插值随着时间推移的环境空气质量,只要进行一些测量。换句话说,我们可以预测未被观察到的位置(没有进行测量的位置)的空气质量,以及预测未来的环境状态。然而,重要的是,高斯过程也可用于提供我们对每个位置的空气质量有多确定(通过利用预测方差)。
Average air pollution over Beijing in terms of particulate matter (PM2.5) — Image by Author
在统计学和信息论中,*方差是不确定性的度量。*我们的目标是消除热图中的不确定性。我们想知道我们地区的空气质量。为了帮助我们直观地理解插值的含义,请看上图。在该图中,我们可以看到高斯过程作为回归技术的应用。具体来说,它插值了北京市的空气质量。
Variance/Uncertainty of air quality over Beijing — Image by Author
然而,正如我们所声称的,重要的是,高斯过程为你提供了对不确定性领域的理解。上图显示,静态传感器周围的不确定性较低,而其间的不确定性开始上升。离传感器越远,不确定性就越高。
现在,回到我们的众包方法。这种建模方法对我们有什么帮助呢?
让我们考虑一下。等效的数字看起来像什么,而不是静态传感器,我们正在模拟志愿者进行的测量。正如我们所说的,一直进行测量是很困难的。当我们在户外或者只是想测量时,我们更有可能进行测量。然而,从概率上来说,更多的人聚集在市中心,也许靠*受欢迎的景点。这部分不用想太多。下面是一个设置示例。确实有些人在市中心,有些人在颐和园附*。
Variance/Uncertainty of air quality over Beijing — Image by Author
然而,从该图中我们可以看出,静态传感器设置可能并没有那么糟糕。这是因为环境的变化或不确定性在所有区域都很高(如图中黄色部分所示)。从好的方面来看,市中心或热门景点的人们可以确信,他们知道他们所在地区的空气质量如何。但这对于城市规划来说用处不大。
我们可以做得更好。我们还没有真正解决这个问题,因为我们还没有指导或提醒人们何时何地获取读数。考虑到人们如何移动或者他们更可能愿意在哪里进行测量,这仅仅是一个可能的默认设置。
然而,我们设法发展了我们的理解。我们现在可以用我们的建模方法来描述这个问题。具体来说,我们需要进行一组测量,以使通过使用高斯过程测量的信息最大化。
这个问题的解决方案需要使用广泛的人工智能领域的算法。具体来说,我们需要一个智能系统来决定何时何地进行测量,以最大限度地获取有关空气质量的信息,同时最大限度地减少所需的读数数量。该系统可以采用与元启发式算法相结合的贪婪搜索技术,例如随机局部搜索、无监督学习(聚类)和随机模拟。这些只是一些潜在技术的例子,我不打算进一步展开,而是给出一个算法的大概情况。
主要想法是随着时间的推移模拟环境,问一些假设的问题。如果我现在进行测量,而不是晚上。哪一个会给我最好的结果?两者都有必要吗?如果我在市区测量或者在我家附*测量会怎么样?
想想我们可以问的所有可能的假设问题。这是每个人每时每刻的假设。即使对于最强大的计算机,这个问题也很难解决。这将需要运行数百万次模拟来涵盖我们每个志愿者的所有可能场景。幸运的是,如上所述,我们有更多的算法方法。例如,聚类可用于将同一地点的人分组,并从本质上将其视为一个实体。因此,智能系统不需要为每个志愿者考虑不同的模拟,而是为每个实体考虑不同的模拟。我们不仅能在空间上,而且能在时间上把人们分组。在相似的时间在相似的地点进行测量的人也可以被看作是一个单一的实体。
既然我们减少了所需的模拟,我们可以使用元启发式方法,基本上是按顺序评估每个组合,以便我们逐渐接*更好的配置,但不一定是最好的配置。一个比上述更好的可能对参与者和城市规划都有用。例如,贪婪算法将首先随时间迭代所有可能的实体,并评估如果这些实体中的任何一个进行单次测量,所收集的信息如何变化。以同样的方式,该算法可以逐步选择最佳位置,而实际上不必评估所有可能的设置。
Variance/Uncertainty of air quality over Beijing — Image by Author
最后,给定上述算法过程,智能系统给了我们一个很好的可能的解决方案。这意味着我们有一组推荐的位置来获取空气质量读数。正如我们在上图中看到的,这是一个比我们以前的设置好得多的设置。此外,它与我们之前讨论的静态传感器放置相当。想象一下有更多的志愿者。这只会变得更好,使上面的地图更绿。总体而言,随着人工智能算法和众包的使用,空气质量监测可以变得更容易和更有效。
这篇文章和数字是基于一个出版的期刊:泽诺诺斯,亚历山大,塞巴斯蒂安斯坦,和尼古拉斯詹宁斯。"在不确定的参与式传感环境中协调测量."人工智能研究杂志61(2018):433–474。
人工智能咨询如何损害您的数字化转型
原文:https://towardsdatascience.com/how-ai-consulting-can-hurt-your-digital-transformation-c51f35ba5dbb?source=collection_archive---------9-----------------------
Image by Edu Lauton, CC0
你对人工智能如何提升你的业务有很好的想法?你有预算,有支持,只是想让它动起来。现在你聘请外部顾问来做这项工作。他是一个完美的模型建造者——但是尽管他很善良,他却在摧毁你的生意,因为他在做模型和跑步!
伟大的机器学习顾问会被推进一项工作,并做得很好。然后他们消失了;留下一个模型。以下是为什么模型和运行对你的业务伤害大于帮助的原因。
失去了知识
在项目开始之前,顾问需要做很多事情。首先,他需要从统计学的角度定义你的问题。他需要抓住潜在的问题并找到正确的数据。这个过程很耗时间,需要大量的沟通。当顾问离开项目时,他最终的继任者面临两个主要问题。
他为什么要这样做?理想情况下,这应该可以从代码和注释中得到解答。现实告诉我,事实往往并非如此。另一个人工智能顾问进入这个项目的问题是,他需要从用例的角度理解派生的价值。虽然乍一看这听起来微不足道,但人们可能会碰到从物理方程推导出来的东西。
更难的问题是:他为什么不这么做?或他试过这个吗?。失败的尝试有时和成功的尝试一样重要。如果你想再次接触模型,你不想做徒劳的重复,只是因为你不知道这已经被尝试过了。失败通常没有记录。你可能会说这没关系,因为模型是静态的;但通常情况下这是不正确的。
型号维护
人工智能模型和其他机器一样需要维护。这是因为世界在变化。机器可能会更新,或者你的客户行为可能会改变。你需要发现这些概念的变化并采取行动。这可能像简单的再培训一样简单,但可能涉及建模技术或数据模型的重大变化。失去你的顾问对任何新的人工智能专家来说都是一项艰巨的任务。
另一个密切相关的点是,你经常想要在相同的数据上建立一个模型,但是有不同的目标。你建立了一个客户流失模型?也许你想在相同的数据上建立一个销售线索评分模型或客户生命周期模型。如果有相同的人参与,许多工作流程可以重复使用,许多讨论可以缩短。
运行不驱动变化
许多企业正处于转型阶段。他们需要采用新技术,并将数字化作为竞争优势。对于“非数字原生”企业来说,这带来了一个复杂的问题:*我如何利用我员工的现有技能来实现这一点?*拥抱数字化需要一个自下而上的组成部分。
团队中的每个人都需要看到用例,看到为什么要用 AI 来解决的原因。复杂的任务是让预测文化和思维进入公司。新的潜在的改变游戏规则的想法需要专家可以给出反馈的明确点。实际上,这个任务就是从推动式文化中走出来——做这个项目吧! —对于拉动式文化:——嘿,我们有这种数据,我想我们可以对此建模,你觉得呢?
让人工智能顾问运行意味着你移除了一个关键的结晶点。有多少午餐讨论比一小时的会议更有成效?
解决方案:辅导
永远拥有一个人工智能顾问通常是不可能的,因为预算原因或者因为他想继续前进。你可以做的是转换到教练型的参与。与其在地下室的小衣柜里做模型,不如让其他人尽早参与进来。
最极端的情况是,顾问不是自己做工作,而是和别人一起做。这些人接受以数据科学的方式思考的训练。他们可以添加有价值的反馈和运输信息。
这方面最大的挑战是数据科学的两个最苛刻的技能:统计和编码。但是两者都可以通过正确的工具训练或减少到最低的必要水*。RapidMiner 等无代码数据科学解决方案与编码解决方案一样强大,并为每个人提供了参与旅程的选项。
人工智能如何改变公关
原文:https://towardsdatascience.com/how-ai-is-changing-pr-14b40b8cd619?source=collection_archive---------3-----------------------
如今,人工智能正在被广泛讨论,因为它有可能自动完成需要重复手工操作的任务。分析人工智能是否会在未来取代人类,这不是本文的范围,而是我在这里提出人工智能如何真正帮助公关专业人员的日常工作。
如果你有一个满是客户的机构,你可能已经意识到在社交媒体上与公众接触是多么令人疲惫,喜欢、回复、关注、搜索你每天管理的每个账户。如果每一项任务都可以自动化该有多好,这样可以节省公关专业人员的时间,让他们去做一些重要的工作,比如创造性的工作和决策活动。
如果你认为有足够的软件可以帮助营销人员,那你就大错特错了。大多数情况下,这些机构不得不依靠多种解决方案,因为没有一个软件能够满足公关机构的大部分需求。
因此,我越来越相信,公关专业人士将不得不掌握人工智能和机器学习的良好命令,以自动化上述重复性的手工工作。不要害怕,人的因素将始终与建立公众参与的机器人相关,因为算法必须不断受到监控,也由公共关系和营销专家设计。
总之,人工智能将塑造未来的公共关系,人们必须准备好充分利用它。
我在这里结束这个话题,但我建议你快速阅读关于人工智能和机器学习的文章,以了解它们如何帮助你推动你的活动。
想取得联系?请在下方留言或通过LinkedIn**:)**联系我
人工智能如何改变信任和安全
原文:https://towardsdatascience.com/how-ai-is-changing-trust-and-safety-9c0dfc1e4f9e?source=collection_archive---------3-----------------------
Source: https://medium.com/trooly-buzz/bay-area-tech-wire-los-altos-based-trooly-raises-10m-launches-instant-trust-ratings-5a600c77dd01
信任是人类互动的基础。这是贸易、政治和社会纽带所必需的。对于互联网来说是必不可少的。在过去的 20 年里,我们经历了三次不同的互联网活动爆炸,每一次都有自己的信任问题。
- 从 2000 年到 2005 年,我们见证了电子商务在 Ebay、亚马逊和 Paypal 等*台上的发展。这些公司饱受洗钱和欺诈问题的困扰。
- 从 2005 年到 2010 年,像脸书、Linkedin 和 Twitter 这样的社交网络发展迅速。这些公司面临着网络辱骂、仇恨言论、虚假账户以及最*的虚假内容等问题。
- 自 2010 年以来,像优步和 Airbnb 这样促进同伴互动的公司越来越多。这些公司面临着上述一些问题,以及游客破坏、卖淫、性骚扰和杀人案件中的新问题。
网上信任的主要目的是安全。随着在线互动变得越来越个人化,这种互动带来的危险也越来越大。去年最致命的枪击事件之一是密歇根州卡拉马祖市的一名优步司机所为。归咎于拼车公司的事故清单在这里汇总。
大多数领先公司已经采取措施解决信任和安全问题。这些步骤包括制定保护保险等政策、要求背景调查和对交易进行人工审查。但这些工具中最强的可以说是机器学习,因为不可能人工审查任何给定*台上的所有交易。
在我看来,机器学习的兴起导致了三个主要变化。**首先,企业在信任和安全方面变得更加积极主动。**在点对点经济的早期阶段,大多数公司只是在用户犯了一个不好的行为后才封禁用户。然而,当欺诈、损害和潜在诉讼造成的损失开始增加时,许多公司都出台了更严格的政策,甚至禁止用户进行可疑活动。例如,一家公司可能禁止 IP 地址来自尼日利亚的所有用户。这种新的警戒级别可能会导致大量的误报或假警报。在对个人或公司可能存在风险的情况下,人们可以调整算法以接受更多的误报。在其他情况下,风险只是很小的财务损失(促销滥用等)。),公司可能愿意接受假阴性。机器学习允许我们根据场景做出正确的权衡。
**其次,在信任和安全领域,已经出现了建立行业模型的初创公司。**以前,公司仅依靠自己的数据来做出决策。现在,他们可以用外部数据来补充。 Sift Science 和 Onfido 就是这类创业公司的两个例子。这些公司与不同行业的各种客户合作过,并能够调整自己的模型来检测许多模式。
例如,在处理电子邮件地址时,提供信任解决方案的初创公司会查看诸如首字母大写、电子邮件中数字的存在以及一次性电子邮件域的使用等特征。根据他们的研究,存在上述特征的用户更有可能是欺诈用户的 6 倍、4 倍和 9 倍。Sift Science 在支付欺诈、账户接管和内容、推广和账户滥用方面提供解决方案;Onfido 在身份验证和背景调查方面提供解决方案。通过使用这些外部解决方案,引领 P2P 经济的公司已经能够减少良好用户的摩擦,减少欺诈造成的损失,提高转化率,同时节省欺诈团队的时间和金钱。
**最后,人工智能最积极的影响是减少了偏见。**研究人员表明人类基于认知、社会和个人偏见做出决定。例如,众所周知,Airbnb 的客人会歧视名字很黑的客人、亚裔和甚至是残疾人。这些偏见甚至已经蔓延到了我们的机器学习模型中。
微软研究院的研究表明,当你在谷歌新闻的文章上应用一种名为 word2vec 的神经网络技术时,它会对基于性别的刻板印象进行编码,如“父亲:医生母亲:护士”和“男人:计算机程序员女人:家庭主妇”。这些偏见往往对少数民族和有色人种影响最大。然而,一旦识别出这种偏差,修复人工智能或消除算法偏差就容易多了。公司现在正在采取积极的措施来减少他们*台上的偏见和歧视。最突出的例子是 Airbnb,该公司已采取重大措施促进包容性 。
如今,有大量的公开数据,以网站、社交媒体、观察名单、犯罪名单等形式存在。然而,从这些数据中提取洞察力是一个巨大的挑战。我一直致力于使用公开可用的数据来增强身份验证、滥用检测、背景调查和就业筛选解决方案。这很有挑战性,因为每个*台都是不同的,每个*台都有自己的问题。我认为,随着我们在线互动的增长,我们需要投资于信任层,以减少并有望在某一天消除不良事件。机器学习将在构建这一层中发挥巨大的作用。
Chirag Mahapatra 在 Trooly 工作,这是一家使用机器学习的初创公司,根据网站、社交媒体和犯罪记录等公共来源的数据提供信任评级。所有观点仅代表其个人观点,不代表其雇主的观点。
人工智能如何改变金融行业?
原文:https://towardsdatascience.com/how-ai-is-transforming-finance-industry-f2cd1eaf67be?source=collection_archive---------1-----------------------
风险评估
因为人工智能的基础是从过去的数据中学习;很自然地, AI 应该在金融服务领域取得成功,在这个领域,记账和记录是业务的第二天性。让我们以信用卡为例。今天,我们用信用评分来决定谁有资格申请信用卡,谁没有。然而,将人们分为“富人”和“穷人”并不总是对企业有效。取而代之的是关于每个人的贷款偿还习惯、当前活跃的贷款数量、现有信用卡数量等数据。可用于自定义卡上的利率,使其对提供卡的金融机构更有意义。现在,花一分钟思考一下,哪个系统有能力检查成千上万的个人财务记录并提出解决方案——当然是一台有学问的机器!这就是人工智能的用武之地。由于它是数据驱动和数据依赖的,扫描这些记录也使人工智能能够提出具有历史意义的贷款和信贷建议。
人工智能和人工智能正在很快取代人类分析师,因为人类选择中涉及的不准确性可能会花费数百万美元。人工智能建立在机器学习的基础上,它随着时间的推移学习,减少出错的可能性,并分析大量的数据;人工智能在需要智能分析和清晰思维的领域建立了自动化。聊天机器人确实证明了自己是提高客户满意度的强大工具,也是帮助企业节省大量时间和金钱的无与伦比的资源。现在,回到脸书在设计和开发机器人以像人类一样进行谈判方面的努力,让我们分析一下这项研究成功的机会。这项新技术不仅会改变我们做生意的方式,也会改变非商业活动。非商业活动的例子可以包括固定会议时间。机器人可以安排会议,记住参与会议的每个人的可用性。
欺诈检测和管理
每个企业都旨在降低其周围的风险条件。对于一个金融机构来说更是如此。银行给你的贷款基本上是别人的钱,这就是为什么你还可以获得存款利息和投资红利。这也是银行和金融机构非常、非常严肃对待欺诈的原因。在安全和欺诈识别方面,人工智能处于领先地位。它可以利用过去在不同交易工具上的消费行为来指出奇怪的行为,例如在其他地方使用过一张来自另一个国家的卡几个小时后就使用这张卡,或者试图提取一笔对相关账户来说不寻常的钱。使用 AI 的欺诈检测的另一个优秀特性是,系统对学习没有疑虑。如果它对常规交易发出了危险信号,而人类纠正了这一点,系统可以从经验中学习,并做出更复杂的决定,确定哪些可以被视为欺诈,哪些不可以。
金融咨询服务
根据普华永道的报告,我们可以期待更多的机器人顾问。随着金融机构降低个人投资佣金率的压力增加,机器可能会做人类不会做的事情——为一笔首付而工作。另一个不断发展的领域是仿生咨询,它结合了机器计算和人类洞察力,提供比单个组件更有效的选项。协作是关键。把一台机器看作是一个附件,或者另一方面,看作是一个令人难以忍受的万事通,这是不够的。出色的*衡和将人工智能视为决策中的一个组成部分的能力与人类观点一样重要,这是金融决策的未来。
贸易
投资公司一直依赖计算机和数据科学家来确定市场的未来模式。作为一个领域,交易和投资依赖于准确预测未来的能力。机器在这方面很棒,因为它们可以在短时间内处理大量数据。也可以教会机器观察过去数据中的模式,并预测这些模式在未来如何重复。虽然数据中确实存在 2008 年金融危机这样的异常,但可以教会机器研究数据,以找到这些异常的“触发器”,并在未来预测中为它们做好计划。更重要的是,根据个人的风险偏好,人工智能可以建议投资组合解决方案,以满足每个人的需求。因此,一个有高风险偏好的人可以依靠人工智能来决定何时购买、持有和出售股票。风险偏好较低的人可以在市场预期下跌时收到警报,从而决定是继续投资还是退出市场。
管理财务
在这个联系紧密、物质至上的世界里管理财务对我们许多人来说都是一项具有挑战性的任务,当我们进一步展望未来时,我们可以看到 AI 正在帮助我们管理财务。PFM(个人财务管理)是人工智能钱包的最新发展之一。 Wallet 由旧金山的一家初创公司创立,使用人工智能来构建算法,以帮助消费者在花钱时做出明智的决定。钱包背后的想法非常简单,它只是从你的网络足迹中积累所有数据,并创建你的消费图表。主张在互联网上侵犯隐私的人可能会觉得这很无礼,但也许这是未来的事情。因此,为了节省制作冗长的电子表格或写在纸上的时间,它必须是首选的个人财务管理。从小规模投资到大规模投资,AI 承诺做未来理财的看门狗。
毫无疑问,人工智能是金融业的未来。由于它在使客户的财务流程变得更容易方面的进步速度,它很快就会取代人类,提供更快、更有效的解决方案。随着人工智能领域的创新,机器人正在逐步发展。这些公司正在进行大规模投资,他们认为这是一项长期的成本削减投资。这有助于公司节省雇人的费用,也避免了这个过程中的人为错误。
虽然它仍处于萌芽阶段,但以其发展金融业的速度,可以预期其前景将导致轻微亏损、更智能的交易,当然还有一流的客户体验。
到 2020 年,人工智能、虚拟现实和大数据将如何改变房地产行业
原文:https://towardsdatascience.com/how-ai-vr-and-big-data-will-transform-the-real-estate-industry-by-2020-76f916cf016e?source=collection_archive---------3-----------------------
Photo credit: Shutterstock
对虚拟现实和人工智能的大肆宣传让我很长一段时间没有写这篇文章。在某一点上,似乎每个能够把单词放在一起的人都至少写了一篇关于这个话题的帖子。我不想追随潮流。我也不知道一些关于人工智能或虚拟现实的独特和有趣的东西,我可能会与他人分享。
然而,事情发生了变化。生活中所有美好的事情都发生在午餐时间(我是一个美食家,对此我很抱歉)。我坐在餐厅里,听到我的两个同事在谈论我们公司即将推出的新功能。我听了几分钟,这足以让我大吃一惊。“天哪,太大了,”我只能这么说。他们所描述的在我听来像是 2050 年。只不过这是我们团队当时正在开发的功能。那是 2017 年。现在依然如此。
如果我告诉你这是什么机密信息,希望没有人会责备我泄露了它。毕竟,已经上了新闻了。我的同事们谈论的是一些完全不寻常的事情。我惊讶地意识到,我工作的公司(和我一起工作的人)创造了由人工智能驱动的下一代租赁*台。我花了几个小时消化这些信息,花了几天时间才意识到我需要了解细节。这就是为什么我让我的同事告诉我他们所知道的一切。
长话短说,我听到的比我预料的要多。我不仅了解了 Rentberry 计划推出的新功能,还发现了整个房地产行业的未来。
长话短说,整个房地产世界将会翻天覆地。更具体地说,即将到来的将改变人们租房和出租的方式。告诉你最好的部分,最新的技术进步将带来优质的租赁体验,并节省我们的时间,金钱和精力。
对于对所有这些未来事物都不是特别满意的我(我就是那个害怕机器人有一天征服世界的人),它给未来带来了一些希望。我准备承认,人工智能实际上可以服务于像你我这样的人的需求。但是我们先把空话放在一边,深入挖掘话题。我等不及要透露细节了。
租户智能搜索工具
想象一下搬到你从未去过的城市。你不知道哪些社区是安全舒适的,哪些是最好不要去的。你不熟悉当地的交通模式,这使得很难对可能的上下班通勤做出估计。更不用说你无法确定某个特定的街区是否符合你对餐饮和购物设施的期望。
在不久的将来,人工智能算法将能够分析你的习惯和偏好,并告诉你特定城市的哪个部分最适合你。很难相信,但有算法能够分析你的日常工作,并根据它们的位置、设施等为你建议最佳的租赁单元。
对你有什么好处?
正如我之前所说,由人工智能驱动的租赁*台将能够搜索成千上万的房源,并预测你最有可能喜欢的房源。该算法将根据你的工作地点、你满意的价格范围、你最可能喜欢的活动等等做出假设。该系统将不断研究你的偏好,并随着时间的推移使其假设更加准确。你能想象一个租赁*台知道你在找什么,并向你展示完全符合你需求的房产列表吗?
VR 和 AR vs. Open House
我几乎可以听到保守的房东尖叫说,没有什么可以取代传统的开放房屋。我几乎可以听到他们说,无论是高质量的照片还是 3D 旅行都不会挤掉对未来家园的真正访问。嘘,老学生。我明白你的意思。你说得对。但是没有人说新技术会取代所有传统的东西。不要想替代,要想补充。
看房仍然是了解某个房产是否符合你的需求的最佳方式。然而,如果手头有更多合适的选择,参加开放日有时可能太昂贵、太耗时,而且完全不合理。你未来的房产可能离你现在的住处有几英里远,或者你的日程安排可能被会议和紧急事情排得满满的。如果这描述了你的经历,开放参观选择可能是天赐之物。
你有什么好处?
假设你正计划搬迁到另一个城市,而你在那里没有地方住。你在网上搜索租房信息并找到几个你喜欢的房源。在旧世界(没有 VR 和 AR 的世界),你的下一步将是花费时间和金钱去新城市旅行,以便参加开放参观。然而,在当今世界,这只是选择之一。让我告诉你这不是最好的。
多亏了新技术,你所要做的就是戴上虚拟现实耳机,让自己沉浸在另一个现实中。不需要去参观就能享受到开放日的所有好处。听起来很酷?确实如此。房地产公司看到了 VR 和 AR 的巨大潜力。虽然虚拟现实可以作为开放门户的替代方案,但增强现实可能有助于潜在客户想象他们现在空无一人的家中的家具和装饰。
由大数据驱动的列表
任何精通房地产的人都会证实,经过计算的风险才是王道。不要相信那些告诉你他们投资成功是靠运气的人。质疑那些向你保证他们在为房产定价时不分析市场的人的话。在房地产行业,一切都归结于分析。数据越多,预测就越准确。
这就是大数据在房地产领域如此强大的原因。由于大数据服务越来越受欢迎,在购买出租、设定合适的租赁价格或出售房产时,可以消除所有猜测并依赖统计假设。
在 Rentberry,我们现在正在开发一个功能,该功能将使用大数据资产来帮助房东和房主定义他们房产的真实价值,并确保他们的价格符合当前的市场趋势。
你有什么好处?
让我们假设你有一处房产出租。你需要找出什么是你的财产的正确价格。但是,你以前没有租出去的经验。你也没有时间和欲望去研究市场。
如果没有大数据分析,您将需要手动搜索类似的租赁单元,确保它们位于与您相同的城市/社区,并计算所有单元的*均价格。显然,要做到这一切需要时间、努力和耐心。多亏了 AI,系统会帮你跑腿。它将搜索相同大小、相同设施和相似位置的房产。最终,它会告诉你像你这样的财产最合理的价格是多少。
遇见未来
他们说我们永远不知道未来会发生什么。听起来不错,但对于本文的主题并不成立。作为一个在 IT 和租赁业务之间取得*衡的公司工作的人,我可以清楚地看到现在的情况和未来的情况。房地产的未来是关于改善和进步的。它是关于在更短的时间内获得更好的结果。而是让智能算法在很短的时间内解决我们的问题。而是变得更好,做得更多。
这是未来,孩子。你会喜欢的。
AI 将如何影响不同的技术领域!
原文:https://towardsdatascience.com/how-ai-will-affect-different-fields-of-technology-9977369f3e2b?source=collection_archive---------2-----------------------
人工智能是一个在一些人的头脑中激发奇迹,但在另一些人的心中引发恐惧的术语。事实是,人工智能正在以惊人的速度改变我们的生活。从无人驾驶汽车到专用机器人,人工智能旨在提高人类生活质量。
Driverless car by Google
由人工智能和机器学习驱动的技术已经开始改变工业格局,为组织提供了巨大的利益,并为其业务增加了巨大的价值。
在人工智能的影响下,交通运输、医疗保健、物流、金融和工业制造等行业将经历巨大的变革,它们将变得更具生产力、更便宜,更重要的是,提供更好的服务。
在它的所有应用中,我最兴奋的是人工智能在以下领域产生的结果:
卫生保健
在人工智能专家系统和自主机器人外科医生的帮助下,与所有类型手术相关的风险可以大幅降低,因为即使是小手术也可以以惊人的精度和效率完成。
由于人工智能系统可以作为一个整体不断学习和进化,与只能从自己的经验中学习的人类医生相反,它们将在利用现有的大量医疗数据诊断和治疗疾病方面变得更加优越。
研究已经表明,通过从医疗保健系统收集的数百万患者扫描档案中进行训练,可以训练深度神经网络产生高度可靠的基本放射学结果。许多巨头已经进入了医疗保健机器人领域。
例如,在 2000 年,Intuitive Surgical 推出了达芬奇系统,这是一种新颖的技术,最初上市是为了支持微创心脏搭桥手术,然后在前列腺癌治疗方面获得了巨大的市场牵引力,并在 2003 年与它唯一的主要竞争对手 Computer Motion 合并。
目前处于第四代的达芬奇,在一个符合人体工程学的*台上提供了 3D 可视化(与 2D 单眼腹腔镜相反)和腕式仪器。许多研究人员正在研究类似的医疗设备,这些进展有可能增加和提高人类的*均寿命。
个人护理
我们已经有几个聊天机器人和个人代理,如 Google home、Alexa 和 Siri,它们可以帮助我们进行简单的查询。
在不久的将来,我们可能会有能替我们做日常家务的人形机器人。国家劳工统计局预测,家庭健康助理在未来十年将增长 38%。
这说明了市场的需求。像亚马逊机器人和优步这样的公司正在研究能够提供基本家庭援助服务的类人机器人。
Human like Robot Sophia
由深度学习实现的自然语言处理和图像处理的巨大进步将增强机器人在家中与人的互动。人工智能真正有用的另一个领域是老年人护理。
尽管目前市场上已经有了一些设备,但一种帮助老年人的可持续人形机器人仍在研发中。人工智能将成为我们生活中不可或缺的一部分,因为我们的家庭将充满智能技术,带来更高的效率和更高的舒适度,为我们节省时间、金钱和能源,同时为我们提供优质服务。
最新的例子是 Amazon Go stores,它使用人工智能和计算机视觉来消除百货商店的长队账单,节省了我们的时间和精力。
自治系统
不管技术变得多么智能,它们永远不能被认为是人类生活的替代品。
在一段时间内,所有危及人类生命但很重要的工作都可以由 AI 赋能的机器人来完成;这包括修理电线,在最深的海沟中寻找石油,以及充当打击犯罪的警察力量。
One of RobotWorx designs
机器人保护人类免受伤害的最好例子之一是机器人焊接。手工焊接是危险的,会对相关人员造成很大伤害。 RobotWorx ,一家机器人初创公司已经开发出机器人来完成这种任务,只需要几个人来帮助机器人焊接。
另一个这样的例子是下水道勘测;目前,遥控设备可以爬下沙井,导航下水道,调查堵塞的下水道管道,很快它们就会有足够的智能来自行操作和自主行动。
这样,每年可以从这些地区发生的不幸事故中挽救许多生命。
太空旅行
人工智能最伟大的应用之一是在太空旅行和探索中。人工智能可以帮助我们到达未知的行星和恒星,而不必冒生命危险。
在不久的将来,人工智能驱动的人形机器人将足够聪明,能够独立执行太空任务,为人类的繁荣发展寻找新的资源。
正如你在这里看到的,美国宇航局喷气推进实验室的钱志军和奇莉·瓦格斯塔夫预测,在未来,太空探测器的行为将由人工智能而不是来自地球的人类提示来控制。
In future AI empowered robots will govern space programs autonomously
许多组织已经努力设计专门用于探索目的的人工智能技术,他们取得的进步继续模糊了虚构和现实之间的界限。
例如,2003 年发射的勇气号和机遇号火星车都有一个名为 Autonav 的人工智能驾驶系统,允许他们探索火星表面。鉴于人工智能行业的快速发展,我们将拥有完全自主的系统,这将很快改变太空探索领域。
这些只是人工智能应用的一小部分,尽管毫无疑问,人类将从这些应用中大大受益,但不可否认的是,将会有重大的后果。
根据一份报告,到 2021 年**,智能代理人和相关机器人将会减少 6%的工作岗位**。
也就是到 2021 年。因此,最重要的是密切监测人工智能的发展,并采取措施确保社会最终不会受害。
现在和人工智能驱动的未来之间的*稳过渡需要实施。
一个良好的开端是谷歌的“人人都有人工智能”项目,该项目试图向人们展示如何利用人工智能的力量。因此,人工智能可以被认为是一种工具,如果使用得当,它可以在无数方面造福人类。
亚马逊 Alexa 是如何工作的?你的自然语言处理指南
原文:https://towardsdatascience.com/how-amazon-alexa-works-your-guide-to-natural-language-processing-ai-7506004709d3?source=collection_archive---------1-----------------------
我们现在可以与几乎所有的智能设备对话,但它是如何工作的呢?当你问“这是什么歌?”,正在使用哪些技术?
【Alexa 是如何工作的?
据微软项目经理阿迪·阿加什称,Alexa 是基于自然语言处理(NLP)构建的,这是一种将语音转换为单词、声音和想法的程序。
- 亚马逊记录你的话。事实上,解释声音需要大量的计算能力,你讲话的录音会被发送到亚马逊的服务器上进行更有效的分析。
**计算能力:**指指令执行的速度,通常用千浮点、百万浮点等表示。
- 亚马逊将你的“订单”分解成单独的声音。然后,它会查询包含各种单词发音的数据库,以找到哪些单词最接*单个发音的组合。
- 然后识别重要的单词以理解任务并执行相应的功能。例如,如果 Alexa 注意到像*“运动”或“篮球”*这样的词,它就会打开运动应用。
- 亚马逊的服务器将信息发送回你的设备,Alexa 可能会说话。如果 Alexa 需要回应什么,它会经历上述相同的过程,但顺序相反
( 来源)
Source
深入解释
根据 Trupti Behera 的说法,“它从信号处理开始,这给了 Alexa 尽可能多的机会通过清理信号来理解音频。信号处理是远场音频领域最重要的挑战之一。
这个想法是为了改善目标信号,这意味着能够识别像电视这样的环境噪声,并将其降至最低。为了解决这些问题,七个麦克风被用来大致识别信号来自哪里,以便设备可以专注于它。声学回声消除可以减去该信号,从而只留下剩余的重要信号。
下一个任务是“唤醒词检测”。它确定用户是否说出设备被编程需要打开的单词之一,例如“Alexa”。这是减少误报和漏报所必需的,误报和漏报可能会导致意外购买和愤怒的顾客。这真的很复杂,因为它需要识别发音差异,并且它需要在 CPU 能力有限的设备上这样做。
如果检测到唤醒词,信号将被发送到云中的语音识别软件,该软件将音频转换为文本格式。这里的输出空间是巨大的,因为它查看英语中的所有单词,云是唯一能够充分扩展的技术。使用回声音乐的人的数量使这变得更加复杂——许多艺术家使用不同的拼写作为他们的名字,而不是单词。
Amazon.com
为了将音频转换成文本,Alexa 将分析用户语音的特征,如频率和音高,以给你特征值。
给定输入特征和分成两部分的模型,解码器将确定最可能的单词序列。第一个是先验,它基于大量的现有文本给你最可能的序列,而不看特征,另一个是声学模型,它通过查看音频和转录本的配对,用深度学习进行训练。这些被组合并应用动态编码,这必须实时发生。"(来源)
对“订单”的分析
Source
上面的命令有 3 个主要部分:唤醒词、调用名、话语。(这部分摘自基兰·克里希南的文章)
- 唤醒词 当用户说‘Alexa’时,唤醒设备。唤醒词将 Alexa 置于监听模式,并准备接受用户的指令。
- 调用名称 调用名称是用来触发某个特定“技能”的关键字。用户可以将调用名称与动作、命令或问题结合起来。所有的定制技能必须有一个调用名来启动它。
Alexa“技能”:语音驱动的 Alexa 能力。
- 话语 【金牛座】是话语。话语是用户向 Alexa 发出请求时使用的短语。Alexa 从给定的话语中识别用户的意图,并做出相应的响应。所以基本上话语决定了用户想要 Alexa 执行什么。
之后,支持 Alexa 的设备将用户的指令发送到一个名为 Alexa 语音服务(AVS)的云服务。
将 Alexa 语音服务视为 Alexa 启用设备的大脑,并执行所有复杂的操作,如自动语音识别(ASR)和自然语言理解(NLU)。
Alexa 语音服务处理响应并识别用户的意图,然后在需要时向第三方服务器发出 web 服务请求。
什么是 NLP?
这是人工智能和计算语言学的融合,处理机器和人类自然语言之间的交互,其中计算机需要分析、理解、改变或生成自然语言。
NLP 帮助计算机机器使用多种形式的自然人类语言进行交流,包括但不限于演讲和写作。
"与电脑进行 20 分钟的闲聊不仅仅是一次登月,而是一次火星之旅。"
在这篇文章中,我发现了一个有趣的部分,它说“理解人类语言由于其复杂性而被认为是一项困难的任务。例如,在一个句子中有无数种不同的方式来排列单词。此外,单词可以有多种含义,正确解释句子需要上下文信息。”
开始时,系统得到自然语言的输入。
**自然语言:**人类通过使用和重复,没有有意识的计划或预谋,自然进化出来的任何语言。自然语言可以采取不同的形式,如语音或手语
之后,它将它们转换成类似语音识别的人工语言。在这里,我们将数据转换成文本形式,由 NLU(自然语言理解)处理以理解其含义。
如果你只是在谈论机器理解我们所说的话的能力,一个好的规则是使用术语 NLU。NLU 实际上是更广阔的 NLP 世界的一个子集
隐马尔可夫模型(NLU 例子) :
在语音识别中,该模型将波形的每个部分与之前和之后的内容进行比较,并与波形字典进行比较,以找出正在说的内容。
**波形:**声带的周期性振动产生浊音
隐马尔可夫模型(HMM)是一种观察到一系列排放,但不知道模型产生排放所经历的状态序列的模型。隐马尔可夫模型的分析寻求从观测数据中恢复状态序列。
Image source
对于 NeoSpeech 的营销专家 Trevor Jackins 来说,“它试图通过获取语音数据并将其分解为特定持续时间(通常为 10-20 毫秒)的小样本来理解你所说的话。这些数据集进一步与预输入的语音进行比较,以解码你在演讲的每个单元中所说的话。这里的目的是找到音素(语音的最小单位)。然后,机器会查看这一系列音素,并通过统计确定最有可能说出的单词和句子。”(来源
然后 NLU 开始深入理解每个单词,试图理解它是名词还是动词,用的是什么时态,等等。这个过程被定义为词性标注。
根据 EasyGov 的 CPO Pramod Chandra Yan 所说,“NLP 系统也有一个词典(一个词汇表)和一组编码到系统中的语法规则。现代 NLP 算法使用统计机器学习将这些规则应用于自然语言,并确定你所说的话背后最可能的含义。”(来源)
对于一家名为 Lola.com 的公司来说,“为了建造理解自然语言的机器,有必要结合使用规则和统计建模来提取语音。必须提取、识别和解析实体,语义必须在上下文中导出,并用于识别意图。例如,一个简单的短语“我需要 12 月 5 日到 10 日在巴黎的航班和酒店”必须被解析并给出结构:
**need:航班
(来源)
Bernard Marr,作者、主题演讲人和顾问,“当 Alexa 在解释你的请求时出错,这些数据将用于下次改进系统。机器学习是语音激活用户界面功能快速提高的原因。”(来源)
在亚马逊网站上,我们可以读到“通过自然语言理解(NLU),计算机可以推断出说话者实际的意思,而不仅仅是他们说的话。基本上,当你问“Alexa,外面天气怎么样?”时,它使像 Alexa 这样的语音技术能够推断出你可能在问当地的天气预报。"
今天的语音优先技术是由 NLU 构建的,它是以识别人类语言中的模式和意义为中心的人工智能。以语音助手为代理的自然语言处理已经重新定义了我们在家里和其他地方与技术互动的方式。"(来源)
你可以在这里查看 Alexa 设备背后的代码:
[## Alexa/AVS-设备-sdk
商业设备制造商将 Alexa 直接集成到互联产品中的 SDK。-Alexa/AVS-设备-sdk
github.com](https://github.com/alexa/avs-device-sdk/wiki)
有关更多信息:
- https://www.quora.com/How-does-Alexa-work
- https://www . quora . com/亚马逊回声背后的技术是什么
- https://chatbotsmagazine . com/how-does-Alexa-skills-works-82 a7 e 93 DEA 04
- https://becoming human . ai/a-simple-introduction-to-natural-language-processing-ea6a 1747 b 32
- http://future-ai.news/2018/03/02/hi-ai-lets-chat/
- https://machine learning-blog . com/2018/07/25/自然语言处理/
- https://code burst . io/a-guide-to-NLP-a-confluence-of-ai-and-language-2786 c56c 0749
- https://blog . neo speech . com/what-is-natural-language-processing/
- https://medium . com/@ Lola . com/NLP-vs-nlu-whats-the-difference-d91c 06780992
- https://medium . com/@ Lola . com/NLP-vs-nlu-what-the-difference-d91c 06780992
- https://developer.amazon.com/fr/alexa-skills-kit/nlu
人工智能引擎如何改善你的业务
原文:https://towardsdatascience.com/how-an-ai-engine-can-improve-your-business-f8dc91e8371?source=collection_archive---------3-----------------------
Image Attribution
过去十年的巨大技术进步解决并极大地影响了人类的基本通信需求。一方面是网站、博客、电子邮件、短信、脸书、Snapchat、Slack 和智能手机,另一方面是作为主导媒介的谷歌,所有这些本质上都满足了我们的沟通需求。我将此称为“通信时代”,我认为就潜在的真正颠覆性创新而言,这个时代已经“停滞不前”。
我们现在正处于下一个时代的开端,即“知识时代”,人工智能(AI)将占据主导地位。AI 是一个总括术语,包括机器学习(ML)、自然语言处理(NLP)和知识表示(KR)等多种技术。人工智能现在是技术的前沿。
你的企业如何使用人工智能?
客户和潜在客户总是问他们如何使用人工智能来增加他们业务的价值。答案是通过部署人工智能引擎作为实现工具,通过它可以利用人工智能功能,抽象出内在的复杂性。由几个不同的模块组成,例如人工智能驱动的创意引擎,人工智能引擎可以作为服务(AIaaS)部署,也可以嵌入客户端-服务器、web 或移动应用程序中。
什么是人工智能引擎?
一个 AI 引擎由几个基本模块组成,包括一个机器学习模块、一个自然语言处理模块和一个知识表示(本体)模块。
为了实现特定的业务目标,如增加销售额、降低成本、解决合规性和提高网络安全性,这些模块用于收集和转换数据、生成准确的预测和见解、读取和分类文本等。
Fortuit AI 引擎
在 Fortuitapps 我们开发了一个强大的、面向商业的人工智能引擎(相对于同样重要的面向学术的对手)。下面我将详细介绍 AI 引擎组件,并描述它们如何用于改进业务流程。
机器学习模块
机器学习基于模拟生物大脑功能的神经网络。神经网络是一个由神经元(脑细胞)组成的网络,这些神经元通过称为突触的连接相互连接(想象一个渔网)。这些连接具有一定的强度(正或负),这些连接的组合将根据特定的阈值导致神经元打开(触发)或不打开(想象一个连接有一些电源线的灯泡:如果累积的功率足够大,灯泡将打开)。人类的思维是神经元放电(或不放电)的结果。
现在,拿一个神经网络的一边,打开一些神经元。然后拿另一边,再次打开一些神经元。你已经给了网络一个给定输入和预期输出的例子(想象一个 1 加 1 的输入和一个 2 的输出,以便教它加法)。接下来,给它许多例子,然后使用一种特定的标准化学习算法,通过这种算法,它可以通过调整其连接的能力以及神经元何时激活来学习。一旦它通过多次迭代稳定下来,让它添加你没有教过它的数字:它会根据它所学到的东西以很高的概率做出准确的响应。这样,给定输入数据集(例如图像)和输出数据集(例如这些图像的描述),基于它“看到”的模式,它可以非常准确地回答新图片包含什么,即使它以前从未见过它。
机器学习模块如何改善您的业务
机器学习模块可以提供
o 描述性分析(发生了什么)
o 预测分析(将会发生什么)
o 规范性见解(应该做什么)
换句话说,ML 模块可以分析游戏的当前状态,并提供关于未来的预测和建议。用于商业目的的机器学习部署的具体示例如下:
库存需求预测
一家全国性面包店希望准确预测需求并相应地调整生产。给定与一系列因素相关的过去表现,如一年中的时间、天气、政治局势、当前事件等,基于 ML 的准确需求预测可以产生可测量的显著节约。
减少产品退货
一家在线零售服装公司希望根据各种因素降低其产品的退货率,这些因素包括买家性别、年龄、订单历史、网站访问量、产品兴趣等。根据可用数据,选择最佳 ML 模型以提供对促成退货的因素的重要见解,可以显著影响盈利能力和效率(甚至达到实时“阻止”有高退货概率的订单的程度)
产品推荐
也许机器学习最受欢迎的应用是网飞的电影推荐系统和亚马逊的“顾客也买了”功能。“结帐”时推荐的产品是根据对将要发生的事情的非常准确的预先评估(即实际将购买多少建议产品)来选择的。
不良贷款
贷款人面临的一个巨大问题是,在潜在的不良贷款候选人实际成为不良贷款之前识别出他们,并采取相应的行动,这显然可以提供重要的价值。给定足够的历史数据,包括客户交易、概况、当前事件、失业率、利率和股票市场利率,所有这些都输入到 ML 模型的选定组合中,可以以令人印象深刻的准确度识别潜在的不良贷款。
自然语言模块
自然语言处理(NLP)为计算机提供了以书面或口头方式理解和解释人类语言的能力。目标是让计算机在理解语言、识别语音和生成语言方面像人类一样智能。
主要应用领域包括:
o 摘要:提供只包含主要概念的文本摘要。摘要使用已经提供的句子或短语,而摘要使用新生成的文本
o 情绪分析 —识别给定文本中的感觉、判断和/或观点(即负面或正面的 twitter 帖子)
o 文本分类 —对文本进行分类(例如,根据域对新闻进行分类)或对文本进行比较,以识别其可能所属的组(例如,此电子邮件是否为垃圾邮件)
o 实体提取 —识别人物、地点、组织等
自然语言处理模块如何帮助您的业务
具体来说,在商业中部署自然语言处理模块的例子如下:
在线博客、新闻网站和论坛上用户评论的汇总和情感分析
抓取目标博客、论坛和新闻网站,提取与特定产品或公司相关的评论,然后自动总结和分析相关观点,以提供关于产品和服务的有价值的见解。
利用许多网站上的“关于”栏目寻找潜在客户
给定目标公司网站的列表(例如来自 CrunchBase),专门的爬行器可以从“关于”部分提取文本,对这些文本进行总结和分类,然后提供洞察,以便通过根据当前客户的“关于”部分进行分类,从列表中定位潜在客户可能感兴趣的那些公司。
电子邮件发送者档案和情感
对于每个电子邮件联系人,对所有收到的电子邮件进行总结和分类,然后将它们输入预先训练的 ML 模型,以确定符合联系人个性和写作风格的回复方式。
知识表示/本体模块
KR 是人工智能的一个领域,致力于表示关于世界的信息:以计算机系统可以使用和理解的形式对现实的基本性质进行概念表征。这可以以“本体”的形式实现,本体是一种知识表示形式,由一组分层的概念和类别以及它们的属性和它们之间的关系组成。本质上,我们对世界的认识是一种内在的本体论。
人工智能引擎的核心是作为一个本体来实现的,该本体可以默认填充大量的一般知识(例如 DBPedia 形式的整个维基百科),或者特定领域的知识,如电子商务或医疗保健。
在业务中利用知识表示模块
领域特定的本体可以提供显著的商业影响。具体例子包括:
电子商务
在电子商务网站上,用户可以通过名称或特征来搜索产品,但他们不支持诸如“如何减肥”或“如何消除蚂蚁”的查询,尽管他们可能针对这种情况销售产品。他们需要的是一个本体,通过这个本体,用自然语言表达的概念被映射到产品上。类似地,客户支持可以使用聊天机器人来利用本体,以提高的准确性和效率自动处理查询。
卫生保健
在医疗保健领域,将症状、病情、治疗和药物联系起来的本体可以为日常医疗保健业务流程提供显著的附加值。
集中公司知识
大多数公司都有一组存储在共享目录中的常用文档,以及一组驻留在本地员工 pc 和笔记本电脑上的文档。这些文档(可能是 word、pdf 或文本文档)包含重要的信息,这些信息总体上构成了重要的数字资产。通过 NLP/NLU 系统,这种知识可以被收集、预处理和语义分析,以创建公司集中的本体/知识库,然后可以被扩展、搜索或更新。
预览:自然语言生成模块
NLG 是上述“知识时代”向前迈出的非常重要的一步。在 Fortuitapps,我们现在正致力于为上述 AI 引擎添加一个 NLG 模块。由于这是我们商业专有工作的一部分,我不会给出确切的细节,而是在本文的上下文中以更一般的术语描述我们的工作。
什么是自然语言生成(NLG)?
NLG 是用自然语言生成文本以响应查询或特定用户请求的智能过程。为了做到这一点,一个 NLG 模块必须对使人类变得聪明的一项非常重要的能力进行建模:常识。如果没有大量关于世界的日常知识(或者至少是关于特定应用领域的知识),自然语言的生成在产品层面是不可能的。因此,任何 NLG 模块的核心都必须由一个本体形式的知识库组成,该本体提供最终将作为“文本”响应产生的“知识”。
我们如何创建 NLG 核心知识库?
由于人类通过阅读任何形式的文档(如书籍、文章、博客、报纸、网站等)来学习,因此 NLG 核心知识库必须由机器“阅读”文档来填充。
从机器的角度来看,文档展示了一个具有多个抽象层次的顺序结构,如标题、句子、段落和章节。这些层次抽象提供了上下文,通过它我们可以推断文本中单词和句子的意思。
因此,为了填充 NLG 核心知识库,我们需要能够阅读和理解语料库(例如谷歌新闻文本)的软件,并利用通过维基百科(文本)和 DBPedia(本体)获得的大量一般知识。
机器如何阅读和理解文本?
从更广泛的意义上来说,有两种主要的自然语言理解方法,,这两种方法我们都使用,并且在更高层次的控制模块的上下文中互为补充。这两种方法描述如下。
基于机器学习的方法
如上所述,关于神经网络,LSTM 或长短期记忆网络是一种递归神经网络,它能够从过去的“经验”中给自己反馈。LSTM 是一种非常强大的算法,可以对数据,尤其是时间序列和文本进行分类、聚类和预测。
我们将上下文特征(主题)合并到模型中,以实现特定的 NLP 任务,如下一个单词或字符预测、下一个句子选择和句子主题预测。我们使用的模型帮助我们回答问题,完成句子,生成释义,并在对话系统中提供下一个话语预测。
除了上面的深度学习模型,我们还使用 Word2vec 中实现的“浅层”模型。Word2vec 是一个工具,它为我们提供了单词、它们的含义以及与其他单词的交互的“心理地图”。每个单词被映射到“数字空间”中的一组数字,这被称为“单词嵌入”。相似的词在这个数字空间中彼此靠*,不相似的词相距很远
基于语义框架的方法
语义框架是相关概念的结构化模型,它们共同提供所有概念的知识,没有它们就不可能有任何概念的完整知识。
一个例子是查询“苹果价格预测”:我们指的是水果苹果或苹果公司的价格以及与其股票价格相关的预测吗?为了回答这个问题,我们必须模拟人类是如何做到这一点的,那就是本质上使用“贝叶斯推理”。贝叶斯推理是一种统计理论,其中关于世界真实状态的证据是根据被称为贝叶斯概率的信任度来计算的。
在贝叶斯概率的上下文中,为了选择与查询“苹果价格预测”相关的正确概念框架,从而知道我们在谈论什么,我们使用“先验素性分布”,简称为不确定量的“先验”。先验是在一些证据被考虑之前,表达一个人对这个量的信念的概率。
虽然没有保证,但是给定先验和结构,我们选择我们认为与查询相关的语义框架(水果价格或股票价格),以便产生适当的响应。在我们的例子中,我们实际上是在问人们通常是什么意思,所以我们使用股票价格语义框架。
生成自然语言文本
基于我们的核心 NLG 本体知识库,以及结合上述两种方法的**,给定一个查询或命令,我们基于以下三个主要步骤继续生成自然语言文本:**
o 制定一个文件计划:选择将形成要制作的文本的知识地图的概念
o 将概念转化为句子
o 过滤结果:概念、语义和句法审查和调整
在 NLG 领域还会有更多有趣的事情发生!
最新跟进:元宇宙
关于作者
尼古拉·费克斯
http://www.fortuitapps.com
人工智能如何解决“玛丽的房间”思维实验
原文:https://towardsdatascience.com/how-an-ai-would-solve-the-marys-room-thought-experiment-4f708707c5f4?source=collection_archive---------2-----------------------
想象我们有一个人工玛丽智能(Ami)。Ami 是一个具有大型复杂人工神经网络和定制的感觉和运动设备系统的机器人。她的感觉装置不断向神经网络发送信息流,她有复杂的奖励信号驱动她学习关于颜色的一切。她的人工神经网络反过来与她的运动系统接口,以驱动机器人身体,从外表看起来就像玛丽的身体。
Ami 的生活和 Mary 的生活有很多相似之处。她的相机能够处理红色,并将信息发送到她的人工神经网络,但事实上,在她的生活中,它们从未这样做过,因为她的环境只包含黑白物体。她的书只是黑白的。她的电脑屏幕只是黑白的。她学习了所有关于颜色的物理知识,以及她的照相机和人工神经网络是如何工作的。所以她非常清楚一旦她的相机前面真的有了彩色的东西,她的系统会如何对颜色做出反应。
然而,关键的是,Ami 没有被允许重新连接她自己的人工神经网络。因此,尽管她知道自己的视觉系统会对看到的颜色做出怎样的反应,但她无法提前做出这些改变。
最后,Ami 被释放了。她走到外面,走进一个充满色彩的世界。她看到一大片健康的玫瑰花丛,有许多玫瑰,她的邻居告诉她是红色的,她看到附*有一个停车标志和一个消防栓,她用手指戳刺,看到一滴人造血。附*一个帅哥看到她脸红了。她对体验红色的感觉有什么新的了解吗?
她的人工神经网络到目前为止只有几秒钟的时间来处理这些新信息,所以网络中的连接权重才刚刚开始变化。她“大脑”中处理颜色的部分仍处于发育的最早期阶段。因此,起初,Ami 并不认为红色物体具有与其他颜色不同的颜色。但随着她与周围世界的互动,她的人工神经网络逐渐通过接触这些新的颜色输入进行训练,她开始能够区分颜色。起初她犯了许多错误。随着她识别颜色的经验越来越多,她变得越来越准确,不久她就能一直正确识别颜色。(除了偶尔在新的和不寻常的照明条件下,她会遇到边缘情况,她和她的朋友对事物的颜色有分歧,比如黑色和蓝色或金色和白色的裙子。)
在她的电子大脑适应她周围丰富多彩的世界的整个过程中,由于她的学习,Ami 理解并期待着每一个新的变化。她“大脑”中以前未被使用的部分从事新的联想和运动学习,但她没有学到新的事实。
玛丽也是如此。
轶事证据如何成就或破坏你的洞察力
原文:https://towardsdatascience.com/how-anecdotal-evidence-can-make-or-break-your-insights-97295303d577?source=collection_archive---------12-----------------------
你一直在等待一个特殊的场合,带你的伴侣去城里新开的高级餐厅。你已经做了调查:查了 yelp 评论,问了几个朋友,甚至搜索了报纸和杂志的文章,以确保它会成为一个完美的夜晚。
就在你预订之前,你告诉你的朋友,让我们叫她黛比,关于你的计划。“你犯了一个大错误,”她警告说,“我上周五在那里吃的,很糟糕。即使我有预约,我也要等 20 分钟,我们桌子旁边的声音太大,面包不新鲜,服务很慢,我的饭煮过头了。”
黛比不会对你隐瞒她的经历,但你详尽的研究表明这是一个很好的机构。你是做什么的?!
眼下的问题是企业不断挣扎的一个问题:我们应该如何恰当地从轶事证据中获得洞见?如果不正确地看待,轶事会让你和你的组织得出错误的结论。如果使用得当,它们对于与客户建立联系至关重要。
在我们进入什么在这里工作得很好之前,让我们从分析的角度来看“轶事”的定义。
我们如何定义与分析相关的“轶事”?
你知道轶事基本上是一个短篇故事,但是让我们想出一个定义来说明它在数据收集方面的价值。
“轶事是对数据点的描述,不仅仅是提供正在收集的指标。”
看一下餐馆体验的例子,让我们首先确定您可能收集的一个或多个指标。网上的评论和文章提供了所有的细节,从“良好的体验”到每个课程和服务元素的描述。(毫无疑问,在 yelp 的每篇评论和文章中,你都会读到有关这家餐厅就餐体验的细节。然而,如果你在 yelp 上看到的评论仅仅是“太棒了!”,您仍然会考虑该数据点。)
你真正衡量的是什么?如果你选择将体验作为一个整体来衡量(你是在衡量人们作为一个整体的体验。如果 Debbie 简单地说“我真的不喜欢”,该数据点仍然会提供很多价值,因为它说明了你的目标指标。除非你是专门跟踪服务和食品质量细节的反馈,否则你不需要额外的信息。
因此,黛比的“我真的不喜欢它”将构成一个数据点,但不是一个轶事。根据我们的定义,她实际上说的是一件轶事,因为它包含的信息超出了你正在收集的指标。请记住,这并不是说额外输入没有价值,我们稍后会谈到这一点。
趣闻轶事如何影响你的数据洞察力
大数据面临的一个众所周知的挑战是信息过载。你用什么?你能折腾什么?
奇闻轶事是同一个问题的缩影:给你的信息太多了!你如何比较 yelp 上给餐厅 5 颗星的评论和“年度美食!”用黛比的账户吗?有价值的数据点是那些与你优先考虑的变量相关的数据点。
轶事在情感层面上引起我们的共鸣,这会导致过分强调那些数据点。当黛比带你经历晚上的每一步时,就好像你自己正在经历一样。你想象自己感受到等待餐桌的烦恼,品尝不新鲜面包的不快,无法引起服务员注意的沮丧,以及期待已久的饭菜不合标准时的失望。
与其比较数据本身,不如比较你对每个数据点的情绪反应。是一般的网上评论还是黛比的描述给了你更大幅度的感动?显然是黛比的!我们很自然地把引起强烈情绪反应的叙述与更大的意义联系起来。
事实上,你认为写五星在线评论的人有强烈的情绪反应吗?可能是这样,特别是如果他们被感动后,一个好评如潮的审查。那个人和黛比暴露在相同的变量中,但是描述没有那么详细。同样的评论也可以被写成符合或超过黛比描述中的情感水*。
简而言之,当你亲身经历一个数据点时,你会比仅仅是向你报告时联想到更大的价值。因为你从一个数据点体验到更多的情绪,你自然地(通常是下意识地)赋予它更多的重要性。
这对你的数据洞察力有何影响?太多时候,这些轶事是对数据点的描述,这些数据点与为你提供你想要的度量和你想要的度量的数据点没有什么不同。这件轶事只是沧海一粟,它会诱使你把它看起来比实际更重要。
这种情况在客户服务中每天都会发生。最有可能打电话进来的人是不满意的顾客,你可以打赌他们会详细描述一个产品或服务是如何给他们带来可怕的体验的。如果高管们听到这些故事,并将它们与显示其销售正变得更强劲的原始数据进行比较,他们可能会倾向于做出不明智的改变,因为消费者轶事具有情感分量。这并不是说那些不满意的客户不算数据点,也不是说在改进产品或服务方面没有什么可做的。它只是简单地陈述了这样一个事实,即每个客户都应该得到同等的重视,即使不满意的数据点更具情感吸引力。
情感在生活的各个领域都是有用的,包括商业。它们让我们能够与客户建立联系,这样我们就可以有效地进行营销,开发出满足他们需求的产品和服务。然而,它们会影响我们的判断,阻止我们从数据集得出结论时保持客观。
如果没有一个事先准备好的数据收集过程,轶事证据会使你容易受到人类本能的影响,即赋予那些感动你的信息更大的价值。不正确的加权输入导致不正确的输出。这可能导致实施错误的策略,耗费您的资源,甚至更糟的是,客户。
联系客户和最终用户
在任何政治辩论中,你都会听到每个候选人讲述他们自己或他们在竞选中遇到的某个人的轶事。他们明白信息不足以投资,人们想要一种式的情感纽带。
数据本身是冰冷的,没有人情味的。它们呈现的数字和图形只不过是屏幕上的像素或页面上的墨水。事实上,这些数字通常代表人和经历。数据背后的意义对于联系内部和外部的人是至关重要的。
在内部,最终用户必须相信来自数据的洞察力足以改变他们的行动。没有他们的认同,你的洞察力是没有用的。轶事可以用来激励内部客户采取行动,而冰冷的数据可能不会。
例如,如果一家汽车制造商的产品开发人员正在确定应该在安全功能上投入多少质量,他们可能会获得如下图所示的数据。
该开发商可能会将每年每 10 亿英里死亡人数的下降(红线)视为不重视安全的理由,因为人们似乎是更好的司机。然而,如果听到一些关于汽车的安全特性如何极大地影响人们生活的故事,他们可能会采取新的行动,因为他们现在感觉到了安全。原始数据不能形成这种纽带,轶事可以。
对外,轶事可以把你和客户联系起来。这就是焦点小组的目的。仅仅知道人们认可或不认可你的产品是不够的。理解他们因你的产品而体验到的情绪,对于与你的目标市场建立联系并推动销售至关重要。
轶事也有助于解释没有意义的数据点。听到一些没有直观意义的数据点的故事,可以发现真正推动结果的隐藏变量。
只有当您的最终用户在实践中利用这些数据时,从您的数据中获得的洞察力才是有用的。轶事证据可能是获得你需要的认同的有效方式,因此你的分析为你的组织提供优势。
我们将何去何从?
如果使用得当,轶事证据可以成为从数据中获得独特见解的强大工具。还记得我们对轶事的定义吗?这是一个提供额外信息的数据点。如果你有一个训练有素的方法,这些信息不会误导你,它能让你更好地理解你正在研究的东西。
如果有一个收获,那就是:让轶事证据驱动你的问题,以及数据分析支持答案。
科学方法在你的数据分析过程中起着至关重要的作用。系统地测试你的假设,并从结果中传达结论,这就是数据如何帮助我们做出更明智的战略决策。然而,不要被术语“数据科学”误导,因为它也是一门艺术。
当接*一个数据集时,实际上有无限多的假设要发展。因此,选择一个测试是一种艺术形式,它允许并且经常需要创造力来获得最有用的洞察力。
轶事证据为我们提供了典型数据点之外的额外信息。在那些故事中可能会有反直觉的模式,或者你没有考虑到的变量。
让我们回到我们的餐馆例子。在读了许多评论和听了黛比的故事后,你会注意到在考虑星期几时可能会有一个模式。黛比周五在那里用餐,也许你看到的唯一负面评论也是在周五。这不足以得出应该避免周五的结论,但它可以促使你现在用一个新的问题来处理数据:一周中的某一天与客户体验之间有任何关联吗?轶事提供了问题,现在你让你的分析为你提供一个客观的答案。无论您是否发现了相关性,现在您都可以从您的数据集中做出更明智的决策,这要感谢轶事证据提供的额外洞察力。因此,当黛比抱怨她的外出之夜时,记住如何处理趣闻轶事:
- 抛开情绪
- 倾听你还没有考虑到的变量
- 从你的新变量中发展出新颖的、可测试的假设
- 系统客观地测试这些假设
- 根据结果维持或改变你的策略
现在,你可以更有信心,你的夜晚将是一个愉快的夜晚。
本文原载于www.strataquant.com
动物投资者如何战胜市场
原文:https://towardsdatascience.com/how-animal-investors-beat-the-market-3c052dd1e31c?source=collection_archive---------4-----------------------
许多文章声称,一群驯养的动物可以成为选股者,不仅打败市场,也打败了熟练的基金经理。从一只名叫 Orlando 的可爱的猫,它通过将一只老鼠放在股票网格上来“击败”经理,到训练外汇交易的实验室老鼠和被蒙住眼睛的猴子在《华尔街日报》扔飞镖,动物王国似乎比我们优越!
“一只被蒙住眼睛的猴子向一份报纸的金融版投掷飞镖,可能会选择一个与专家精心挑选的投资组合一样好的投资组合。”—伯顿·马尔基尔
这回避了一个显而易见的问题——为什么我们付给基金经理那么多钱,而这些钱显然应该去奥兰多?
好吧,让我们看看是否有其他动物可以战胜市场!为了节省水族馆的费用,我将模拟金鱼从 S&P500 随机挑选股票。奥兰多几乎没有研究基本面,所以随机选择对我们的鱼来说不是一个可怕的假设。在这个模拟中,每条鱼挑选 50 只股票,构建一个相等权重的投资组合,持有 3 年。
1000 goldfish returns, S&P500 in black
在管理金鱼的 1000 个模拟基金中,96.1%跑赢了市场,市场回报与金鱼 3 年回报的*均差为 14.5%!
但是,S&P500 96%的随机样本怎么可能胜过整个 S&P500 呢?乍一看,这类似于抛硬币,96%的情况下得到的是反面,或者在 1-100 之间随机选择 10 个数字,大多数情况下得到的*均值在 50 以上。
然而,这是假设 S&P500 的每只股票对 S & P500 指数的整体表现的贡献是相同的,但是 S & P500 和其他指数是根据其中包含的每家公司的规模或市值进行加权的。
The divisor is roughly $8.933 Billion and is adjusted for major shakeups any of the component companies
与 S&P500 不同,我们的金鱼和其他非人类投资者选择的投资组合权重相等,这意味着他们持有相同数量的每只股票。
事实证明,S&P500 前 10%的股票贡献了* 50%的整体指数。这些大盘股的回报往往远不如小盘股那样易变或多变,这使得小盘股的风险更大。大多数投资者并不特别喜欢高风险的股票,所以为了补偿购买这些股票的投资者,这些股票需要提供更高的回报。这是从经验上看的,因为在 1980 年至 2015 年之间,小型股票的*均年增长率为 11.24%,而大型股票的*均年增长率为 8.0%。
因此,当我们的动物朋友选择随机投资组合时,他们选择了不成比例的大量小股票,与 S&P500 相比,这提高了投资组合的回报率,同时也增加了很多风险,这一点 Orlando 忘记提到了。因此,尽管金鱼/猫/老鼠选择的随机投资组合确实提供了高回报,但其风险水*的回报不太可能是最佳的。
苹果如何建立其 iPhone X 面部识别系统 TensorFlow 中的暹罗网络解释道
原文:https://towardsdatascience.com/how-apple-built-its-iphone-x-facial-recognition-system-siamese-networks-in-tensorflow-explained-707321c07d99?source=collection_archive---------8-----------------------
背景
在机器学习中,输入数据的质量经常取代模型架构和训练方案。与在较低质量数据集上训练的更高级、高度调整的模型相比,具有正确标记的高质量图像的大型、*衡数据集将始终产生更好的模型性能。然而,数据科学家并不总是收到大量的数据集。事实上,在我参与的大多数项目中,数据集甚至没有被标上。因此,机器学习的最大瓶颈是数据集的创建。
苹果已经建立了一个自动面部识别系统——在训练中只需给定几个人脸样本,它就能在测试中以极高的准确度正确识别出个人。有几个模型在幕后一起工作来实现这一点。这里有两个最重要的模型——1)能够区分真实的人和其他人工制品(如人的照片)的模型,以及 2)能够区分人的模型。考虑到 iPhone 用户的巨大数量(为了便于讨论,假设有 1000 万),苹果如何建立一个足够强大的系统来识别一个人的图像?
解决这个问题的第一步是数据扩充。通过旋转、模糊或裁剪图像数据,可以创建*似反映原始数据集中图像分布的合成图像。然而,这种方法并不完美——它提供了一种正则化效果,如果网络在训练中表现不佳,这种效果可能是不想要的。
第二步,也是更重要的一步,是采用一类被称为暹罗网络的通用架构。这里讨论的暹罗网络的特殊风格使用带有共享参数的模型为每个图像构建特征表示。损失定义如下——如果两个图像属于同一类,则当它们的相关特征向量之间的距离较低时损失较低,而当它们的相关特征向量之间的距离较高时损失较高。反之亦然,如果两个图像属于不同的类别,只有当图像特征表示相距很远时,损失才很低。该模型架构旨在处理以下两种情况:
- 稀疏数据
- 新数据
该架构已经在苹果、百度等公司进行了全球部署。
现在,让我们在 tensorflow 中建立模型!
输入管道
由于暹罗网络严格的输入参数,输入管道可能是我们编写的最复杂的代码。基本要求是我们必须选择两幅输入图像。这些输入图像必须以相等的概率属于同一类或不同类。
虽然 tensorflow 中的健壮数据集类可以简单有效地提供图像数据,但它不是为暹罗网要求而设计的,因此需要一些技巧才能实现。
为了提高效率,在下面的代码中,我从 TFRecords 格式读入图像数据。图像数据可以很容易地与 tensorflow 的数据集类
dataset = tf.data.Dataset.from_tensor_slices()
第一步是创建一个包含所有图像数据的数据集。
数据以一定的缓冲区大小进行混洗(较大的值增加时间,较小的值减少随机性),并映射到它们各自的图像和标签张量。回想一下,所有这些操作都是张量流图的一部分。
接下来,必须将上述结构的两个数据集压缩在一起,以创建暹罗数据集。对于这个数据集,我们有一些架构和性能要求
- 数据必须被重新洗牌
- 数据必须均匀分布
- 开销应该是分布式的和同步的
通过 tensorflow 的prefetch()
、filter()
和 shuffle()
实用程序,这可以实现。这些操作的顺序非常重要——在过滤之前重复可能会导致无限循环!prefetch()
操作允许 CPU 在 GPU 训练时加载一批图像。
由于我们已经在 tensorflow 图形中工作,所有操作都必须由 tensorflow 支持。我在这里定义了操作filter_func
。该操作根据图像对是否出现在同一数据集中来随机过滤图像对。
咻!我们有数据集了!现在,我们建模。
模型
让我们定义一个基本模型。首先,我们可以定义一个卷积块。
有了这些卷积块,我们可以定义一个模型。给定一个输入图像,该模型返回一个展*的 1024 单位特征向量。
回想一下,在暹罗网络中,两个图像都是由同一模型处理的。因此,我们可以在 tensorflow 中设置一个可变范围,允许我们在处理每一对输入时共享参数。
一个紧密连接的层被附加到特征因子的绝对差上。值得注意的是,没有激活函数应用于这个最终向量,这允许模型捕捉输出的自然分布,并允许所有神经元被表示。
最后,我们必须定义暹罗损失。在暹罗网络的这个特殊变体中,我展示了对比损耗——另一种常见的损耗是三重损耗。然而,三重态损耗需要与上述不同的模型架构。
培养
让我们现在把它拉在一起。首先,我们调用我们的数据集,并在我们的图中实例化代表左右输入图像的张量,以及它们对应的标签。
接下来,我们将损耗添加到张量流图中。
最后,我们实例化一个优化器来最小化损失,实例化一个初始化器来将所有变量实例化为值的某种分布(可以为每个操作指定)。我在这里使用流行的 Adam 优化器。
现在,我们可以开始张量流训练。
一些离别的想法
这里描述了一个使用低级 tensorflow API 的基本暹罗网络。这个网络在解析稀疏数据集方面非常强大,并被用于全球公认的系统,包括 iPhone X。
如果你对代码有任何问题/评论/修正,给我发消息或在这个帖子上发表评论。
逻辑回归和普通最小二乘回归(线性回归)有什么关系?为什么会出现逻辑上的“回归”?
原文:https://towardsdatascience.com/how-are-logistic-regression-ordinary-least-squares-regression-related-1deab32d79f5?source=collection_archive---------3-----------------------
https://cdn-images-1.medium.com/max/1436/1*_TqRJ9SmwFzRigJhMiN2uw.png
如果你和我一样被“逻辑回归”中的“回归”所困扰,而逻辑回归实际上应该被称为“逻辑分类”,考虑到它确实分类,我对你的困扰有一个答案!
逻辑回归和普通最小二乘回归(又名线性回归)简介:
逻辑回归适用于根据一组预测变量的值预测某个特征或结果是否存在的情况。它类似于线性回归模型,但适用于因变量为二分变量的模型。它的系数可以用来估计模型中每个独立变量的奇数比率。它比判别分析适用于更广泛的研究情况。另一方面,逻辑回归用于确定事件的概率,该事件以二进制格式捕获,即 0 或 1。
如你所知,使用逻辑回归,多类分类是可能的,而不仅仅是二元分类。但 logistic 回归多用于二元分类。
线性回归又名最小二乘回归,估计线性方程的系数,涉及一个或多个自变量,能最好地预测因变量的值。例如,可以根据年龄、教育程度和经验年限等独立变量来预测销售人员的年总销售额(因变量)。
线性回归是连续的,而逻辑回归是离散的。
这里有更多关于连续变量和离散变量的内容。
它们有什么特别的联系?
- 逻辑回归估计结果的概率。事件被编码为二进制变量,值 1 表示目标结果的出现,值 0 表示不出现。
- 最小二乘回归也可以使用线性概率模型来模拟二元变量。最小二乘回归可能会给出超出范围(0,1)的预测值,但该分析仍可用于分类和假设检验。
- 逻辑回归模型将事件的概率估计为独立变量的函数。设 y 表示情况 I 的因变量上的一个值,同样情况下 k 个自变量的值表示为 x (j = l,k)。假设 Y 是一个二元变量,用来衡量某个群体的成员关系。如果情况 I 是该组的成员,编码 y = 1,否则编码 0,那么让 p = y = 1 的概率。y = 1 的几率由 p/(l-p)给出。p 的对数概率或 logit 等于 p/(l-p)的自然对数。逻辑回归将对数优势估计为独立变量的线性组合
logit(p) =B0 + B1X1 + B2X2+ ……。+ BkXk
(0、1、2、k 都是在时缺乏媒介订阅能力的下标)
- 最小二乘回归对因变量和自变量集合之间的关系进行建模。因变量的值被定义为自变量加上误差项ϵ.的线性组合
Y = B0 + B1X1 + B2X2+ ……。+ BkXk + ϵ
(0,1,2,k 都是下标)
其中(B0 … Bk)是回归系数,Xs 是独立变量的列向量,e 是预测误差的向量
- 逻辑回归应用于二元因变量的建模。逻辑回归模型的结构是为二元结果设计的。
- 最小二乘回归不是为二元分类而构建的,因为与最小二乘回归相比,逻辑回归在分类数据点方面表现更好,并且具有更好的对数损失函数。
它们在哪里排列在一起:
线性回归使用一般线性方程 Y=b0+∑(biXi)+ϵ,其中 y 是连续的因变量,自变量 Xi 通常是连续的(但也可以是二元的,例如当线性模型用于 t-检验时)或其他离散域。ϵ是模型无法解释的方差的术语,通常被称为“误差”。用 Yj 表示的独立相关值可以通过稍微修改等式来求解:
Yj=b0+∑(biXij)+ϵj
(j,0,I,j 都是下标,具有与所解释的相同的表示)
线性回归的输出如下所示:
https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Linear_regression.svg/400px-Linear_regression.svg.png
逻辑回归是另一种广义线性模型 (GLM)程序,使用相同的基本公式,但它不是连续的 Y,而是回归分类结果的概率。简单来说,这意味着我们只考虑一个结果变量和该变量的两种状态——0 或 1。
Y=1 的概率公式如下:
p(y = 1)= 1**/**(1+e−^(b0+∑(bixi)))
(0,我都是下标)
其中术语与先前解释的相同。
自变量 Xi 可以是连续的,也可以是二进制的。回归系数 bi 可以被指数化,以给出 Xi 每改变一次 Y 的几率的改变。
输出是一条如下所示的 s 形曲线:
https://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Logistic-curve.svg/1200px-Logistic-curve.svg.png
两者都是线性模型,然而:
逻辑回归本身绝对不是一种分类算法。只有分类算法与决策规则相结合,才能使结果的预测概率二分法。逻辑回归是一种回归模型,因为它将类成员的概率估计为要素的多元线性函数(的变换)。
我们可能会问,为什么它被称为“逻辑回归”,而不是“逻辑分类”?
要回答这个问题,我们必须追溯到 19 世纪,在那里逻辑回归找到了它的目的。它被广泛用于发现种群的增长和自催化化学反应的过程,如这里的所示。
同样需要明确的是,正如一些专家指出的那样,“逻辑回归”这个名字远在任何“监督学习”出现之前就被创造出来了。此外,术语“回归”并不意味着结果总是连续的,正如本文 中指出的 。所以,并不是每个“回归”都是连续变量预测。
线性回归通常通过最小化模型对数据的最小二乘误差来解决,因此大的误差被*方惩罚。逻辑回归正好相反。
仅供参考:以下是线性回归的损失函数:
https://www.researchgate.net/profile/Alexandros_Karatzoglou/publication/221515860/figure/fig1/AS:339586132791298@1457975051470/Figure-1-Mean-Squared-Error-formula-used-to-evaluate-the-user-model.ppm
使用逻辑损失函数会导致较大的误差被罚为渐*常数。
考虑对分类{0,1}结果的线性回归,看看为什么这是一个问题。如果模型预测当真值为 1 时结果为 67,没有太大损失。线性回归会试图减少 67,而逻辑回归不会(同样多),这意味着,对这一连续产出使用逻辑回归不会解释更多的损失。它认为损失并不大,换句话说,逻辑回归并不惩罚使“最佳拟合线”根本不是“最佳拟合线”的损失。
逻辑回归的结果在许多方面可以与最小二乘回归的结果相比,但它能更准确地预测相关结果的概率。最小二乘回归在从因变量预测连续值方面是准确的。
如上所述,重要的是要知道“回归”是一个抽象的术语。它根据上下文有不同的解释。
这是一个对比图像:
http://slideplayer.com/slide/6183997/18/images/8/Linear+versus+Logistic+Regression.jpg
最后,让我们来看看每个属性:
产出:
**线性回归:**连续值【2 个以上输出】。
**Logistic 回归:**离散值。通常是 2 个输出{0,1}。输出是在舍入到最接*的值 0 或 1 后得出的。请记住,多类是允许的。
解释系数:
**线性回归:**线性回归系数代表预测变量变化一个单位的响应变量的*均变化,同时保持模型中其他预测变量不变。换句话说,保持所有其他变量不变,这个变量增加一个单位,因变量预计会增加或减少某个值 x。
**逻辑回归:**解释逻辑回归系数需要解释概率,而概率本身就是另一个话题。然而,这里有一个直观的解释。
方程式:
线性回归:线性回归是一种对两个变量之间的关系进行建模的方法。你可能还会把这个方程看作斜率公式。该等式的形式为 Y=a+bX ,其中 Y 是因变量(Y 轴上的变量),X 是自变量(即,它绘制在 X 轴上),b 是直线的斜率,a 是 Y 截距。
Simple linear regression equation : http://www.statisticshowto.com/probability-and-statistics/regression-analysis/find-a-linear-regression-equation/
总有一个误差项,又名剩余项 ϵ ,如图所示:
https://cdn-images-1.medium.com/max/1436/1*_TqRJ9SmwFzRigJhMiN2uw.png
**逻辑回归:**逻辑回归使用一个等式作为表示,非常类似于线性回归。输入值( x )使用权重或系数值(称为希腊大写字母,beta)进行线性组合,以预测输出值( y )。与线性回归的一个关键区别是,被建模的输出值是二进制值( 0 或 1 ),而不是数值(来自 Safari 在线图书)。
Example for logistic regression: https://www.safaribooksonline.com/library/view/ensemble-machine-learning/9781788297752/e2d207ff-3690-4e74-9663-2d946e2a7a1c.xhtml
误差方程:
线性回归:均方误差:
https://www.researchgate.net/profile/Alexandros_Karatzoglou/publication/221515860/figure/fig1/AS:339586132791298@1457975051470/Figure-1-Mean-Squared-Error-formula-used-to-evaluate-the-user-model.ppm
**逻辑回归:**逻辑回归的输出是概率,这些概率随后被分类。底线是,你不能像以前看到的那样用逻辑回归做线性回归。
逻辑回归的通常成本或损失函数也称为误差方程,被称为“分类交叉熵”,如神经网络中所见。
Binary outcomes loss function aka binary categorical cross entropy (BCE): http://cat.birdhabitat.site/categorical-cross-entropy-loss-formula/
然而,由于这是一个分类,这里是来自 sklearn 的分类常用指标。
线性关系:
**线性回归:**需要因变量和自变量之间的线性关系。
**Logistic 回归:**因变量和自变量之间不需要线性关系。
剩余分配:
**线性回归:**要求误差项呈正态分布。
**Logistic 回归:**不要求误差项呈正态分布。
既然我们知道了线性回归和逻辑回归之间的关系。
如果你喜欢这篇文章,那就鼓掌吧!:)也许一个跟随?
在社交网站上与我联系:
[## Rakshith Vasudev | LinkedIn
查看拉克什特·瓦苏德夫在全球最大的职业社区 LinkedIn 上的个人资料。拉克什特教育上市…
www.linkedin.com](https://www.linkedin.com/in/rakshith-vasudev/) [## 拉克什特·瓦苏德夫
拉克什·瓦苏德夫。和我一起学习人工智能,让这个世界变得更美好。张量流…
www.facebook.com](https://www.facebook.com/imrakshithvasudev/) [## 拉克什特·瓦苏德夫
Datascience 入门,最佳编程实践。主题包括机器学习和其他。
www.youtube.com](https://www.youtube.com/c/rakshithvasudev)
来源:
http://papers.tinbergen.nl/02119.pdf
https://pdfs . semantic scholar . org/5a 20/ff 2760311 af 589617 ba 1b 82192 aa 42 de 4 e 08 . pdf
https://stats . stack exchange . com/questions/29325/线性回归和逻辑回归的区别是什么
https://stats . stack exchange . com/questions/24904/least-squares-logistic-regression
http://www . statistics solutions . com/what-is-logistic-regression/
https://stack overflow . com/questions/12146914/线性回归和逻辑回归的区别是什么
人工智能如何改变商业世界的面貌
原文:https://towardsdatascience.com/how-artificial-intelligence-has-changed-the-face-of-business-world-f554da5ff8?source=collection_archive---------8-----------------------
人工智能行业已经成为商业和技术整合的主流。
人工智能不再是未来某个地方会发生在小企业身上的现象——它已经在这里了。企业主和管理人员现在可以利用商业世界中的这些创新,因为等待人工智能到来意味着在商业发展中被抛在后面。人工智能可以帮助企业的几乎每个方面,包括移动性、营销和广告、客户服务和安全。
Artificial Intelligence
通过人工智能实现卓越的企业移动性
人工智能还允许员工在办公室之外的其他地方工作,并且仍然与办公室保持联系。例如,通过人工智能,员工可以通过云共享文档、信息、财务工作、营销和其他信息。移动性因素意味着办公室中的人可以在现场,他们可以在家工作,或者从不同的位置工作,但是团队中的每个人仍然能够相互联系以回答问题和进行协作。移动性的增加意味着员工可以随时随地工作。研究表明,当员工能够在不同的地点工作时,他们会感到更加快乐,并表现出更高的生产率。
营销和广告
人工智能改变了客户接收广告和营销信息的方式。任何上过社交媒体的人都知道人工智能在营销中扮演的角色。例如,如果客户在谷歌上搜索一家企业,该企业的广告可能会出现在他们的社交媒体订阅源上,而无需他们要求,因为人工智能能够识别某人过去的搜索,并使用搜索历史来做有针对性的广告。
人工智能对销售产品和服务的企业也至关重要,因为它能够通过有针对性的广告和搜索历史将客户带到企业。人工智能在网上收集重要的数据,并可以指出企业可以增加网站流量的方式,以及商店的位置。
以更低的成本提高效率和精度
使用人工智能的公司的增加只能意味着一件事——人工智能改变了任务的效率和速度。如前所述,人工智能在企业中的作用是增加企业以前留给员工的自动化量。例如,在 20 世纪 90 年代,人们被雇用来将公司必须支付的发票数据输入到计算机中,然后一名员工运行一个支票书写程序,该程序大约每周运行一次支票,以支付公司欠其他人的发票。然后,一个完全不同的员工会拿着公司从其他公司收到的支票,手动将其输入分类帐程序,然后将支票带到银行。然而,通过人工智能,计算机能够在没有输入的情况下根据从企业收到的数据生成发票,然后以电子方式支付发票上的存款,同时也以电子方式支付其他人,并将双方都记入其分类账,以便员工可以查看。
人工智能不需要喝咖啡休息,也不会在圣诞节休假,这意味着它能够生成数据,检索信息并进行分析,供员工在到达时或假期结束时查看和采取行动。
人工智能和机器人在工作场所意味着更好的客户服务和支持
虽然机器人不会像末日预言家们不断预测的那样,抹去世界上所有的工作,但机器人和先进的计算机编程可以自动完成一些任务。例如,使用人工智能语音电话系统的企业能够让客户接受服务,并在不与人类交谈的情况下回答他们的许多问题,这让客户感觉他们的问题已经得到解决,并允许与客户服务合作的员工帮助客户解决需要人工干预的更复杂的问题。此外,工作场所中的机器人技术允许通过计算机或机器人干预来完成重复性任务,而不可预测的任务可以由人类来完成。
帮助整合和巩固业务运营
AI 帮助商家巩固业务领域。虽然上面简要描述了,但还有其他方式可以整合业务,那就是通过使用人工智能结合云技术。有了人工智能和云,业务信息和文件不必保存在多个地方,而是可以保存在云中,这意味着不仅可以有多人查看文件,而且没有搜索文件,也没有因为文件丢失而导致的办公室混乱,因为使用云技术可以获得信息。此外,可以简化日常业务流程,减少从事相同工作的人员,让办公室内的人员专注于特定的业务领域。
更强的网络安全
当与云技术结合时,人工智能还增加了公司的安全性。人工智能能够发现在线或服务器内的威胁,并在违规发生前或发生时警告技术和安全人员。鉴于黑客不仅在信息损失方面给公司造成了数百万美元的损失,而且当黑客泄露数百万客户的个人信息时,客户的不信任也给公司带来了损失,因此人工智能帮助公司更加安全的概念尤为重要。出于这个原因,企业越来越多地指望人工智能来帮助填补他们的安全漏洞。
人工智能可能有点可怕,特别是如果一家企业难以将所有业务流程的控制权交给计算机。然而,通过一点灵活性和一点工作,企业可以让人工智能为他们工作。人工智能可以简化和自动化企业的许多方面,从客户服务电话到办公室程序到营销,甚至到完成销售。人工智能不再是一种说企业懂技术的方式。在 21 世纪的第二个十年,信息技术正迅速成为商业运作的重要组成部分。
深度神经网络眼中的你有多有魅力?
原文:https://towardsdatascience.com/how-attractive-are-you-in-the-eyes-of-deep-neural-network-3d71c0755ccc?source=collection_archive---------1-----------------------
几个月前,华南大学发表了一篇论文和一个关于“面部美容预测”的数据集。这里可以找到[。该数据集包括 5500 人,他们对自己的吸引力进行了 1 到 5 分的评分。
以下是文中的一些例子:](https://arxiv.org/abs/1801.06345)
片场还有几个名人。这张朱莉娅·罗伯特的照片*均得分为 3.78:
以色列著名模特芭儿·莱法利的这张照片得到了 3.7 分:
这些看起来可能很低,但 3.7 分意味着 bar 比数据集中的 80%的人更有吸引力。
除了数据集,作者还训练了多个模型,试图根据面部照片预测一个人的吸引力。
在这篇文章中,我想复制他们的结果,看看我有多有魅力。
原始论文实现了一堆不同的模型,包括具有手工制作功能的经典 ML 模型和 3 个深度学习模型:AlexNet、ResNet18 和 ResNext50。
我想让我的工作尽可能简单(我不想从头开始实施和培训整个resnet
网络),我想微调一些将完成工作的现有模型。在keras
中,有一个叫做applications
的模块,它是不同预训练模型的集合。其中一个就是resnet50
。不幸的是,在keras.applications
没有 ResNet18 或 ResNext50,所以我无法复制完全相同的作品,但我应该足够接*resnet50
。
from keras.applications import ResNet50
ResNet 是一个深度卷积网络,由微软开发,并赢得了 2015 年 ImageNet 竞赛,这是一个图像分类任务。
当我们在keras
中启动resnet50
模型时,我们创建了一个具有 ResNet50 架构的模型,并且我们还下载了在 ImageNet 数据集上训练的训练权重。
论文作者没有提到他们到底是如何训练模型的,所以我尽量做到最好。
我想删除最后一层(“softmax”层)并添加一个没有激活功能的密集层来执行回归。
resnet = ResNet50(include_top=False, pooling=’avg’)
model = Sequential()
model.add(resnet)
model.add(Dense(1))model.layers[0].trainable = Falseprint model.summary()# Output:
Layer (type) Output Shape Param # ================================================================= resnet50 (Model) (None, 2048) 23587712 _________________________________________________________________ dense_1 (Dense) (None, 1) 2049 ================================================================= Total params: 23,589,761
Trainable params: 23,536,641
Non-trainable params: 53,120
您可以看到,我将第一层(resnet 模型)设置为不可训练,因此我只有 2,049 个可训练参数,而不是 23,589,761 个。
我的计划是训练最后的密集层,然后,用更小的学习率训练整个网络。
model.compile(loss='mean_squared_error', optimizer=Adam())model.fit(batch_size=32, x=train_X, y=train_Y, epochs=30)
在那之后,我改变第一层为可训练的,编译并且适合另外 30 个时期的模型。
这里的train_X
是照片,即numpy
个形状(350, 350, 3)
的数组,train_Y
是被标记图像的分数。
结果
论文使用两种技术训练模型:5 重交叉验证和 60%-40%的训练测试分割。他们使用皮尔逊相关(PC)、*均绝对误差(MAE)和均方根误差(RMSE)来衡量他们的结果。这些是他们使用五重交叉验证得到的结果:
这些是他们用 60%-40%的训练测试分割得到的结果:
我将进行 80%-20%的训练测试分割,因此这类似于执行 1 倍的交叉验证部分。
我得到了以下结果:
RMSE: 0.301799791952313
MAE: 0.2333630505619627
PC: 0.9012570266136678
非常好。此外,查看分数的散点图和直方图总是很好的:
原始分数分布(标准化):
预测分数分布(标准化):
结果看起来相当不错。现在让我们看看这个深度神经网络对我说了什么。我一开始用这张照片:
我得了 2.85 分,这意味着我比这个数据集中 52%的人更有吸引力。我不得不说我有点失望,我希望我会比那更好。所以我试图改善我的处境。
我拍了很多照片,最终这张照片我得到了 3.15 分,这意味着我比数据集中 64%的人都更有吸引力。
这好多了,我必须诚实地说,我希望更好:)
最后一点,我使用谷歌合作实验室构建并微调了这个模型,简而言之,它给你一个免费使用 GPU 的 python 笔记本!
希望你喜欢这篇文章。
贝叶斯统计如何说服我去健身房
原文:https://towardsdatascience.com/how-bayesian-statistics-convinced-me-to-hit-the-gym-fa737b0a7ac?source=collection_archive---------1-----------------------
Image Source: Pixabay
一次有趣的贝叶斯线性回归理论之旅(是的,我在这篇文章中使用了度量标准)
正如文章题目所暗示的,我会对我的体质做一个科学的调查。
“得了吧,你不会是认真的吧!!!"
是的,我是。所以有一点背景信息:我来自越南,在新加坡上高中,目前在美国上大学。我经常听到人们取笑我看起来有多小,我的体重肯定有多轻,我应该如何锻炼,去健身房,增加体重,以便拥有“更好的体格”。我常常对这些评论半信半疑。对于一个身高 1 米 69 (5 英尺 6 英寸)、体重 58 公斤(127 磅)的人来说,我的身体质量指数指数接*完美(20.3)。
“不老兄!我们说的是体格"
好吧,我明白了,没人在这里谈论身体质量指数。
想想看,人们可能有一个好的观点:鉴于我比普通越南男性略高,体重也完全相同(维基百科的资料显示为 1 米 62,58 公斤),我可能“看起来”更瘦一点。 看 是这里的关键词。逻辑挺简单的不是吗?如果你稍微伸展一下自己,保持同样的体重,你会看起来更瘦更苗条。我认为这是一个需要进一步研究的严肃的科学问题:
对于一个身高 1 米 69 的越南男性来说,我(体重)有多小?
我们需要一种方法来研究这个话题。一个很好的前进方式就是尽可能多地找到越南男性身高体重的数据,看看我在他们中间的位置。
越南人口概况
在浏览网页后,我发现了一份调查研究数据,其中包含了一万多名越南人的人口统计信息。我将样本量限制在 18-29 岁年龄组的男性。这样我就有了 383 名年龄在 18-29 岁之间的越南男性的样本,这对于分析来说可能足够了。
首先,让我们画出人口的重量,看看我如何融入年轻的越南男人。
红线显示样本的中值,而橙色线显示*均值
这张图表明,我略低于 383 名越南年轻男性的*均体重和中值体重。令人鼓舞的消息?有点,但不完全是。看,问题并不在于我的体重与样本中的体重相比如何,而在于 给定 1 米 68 的身高, 假设这 383 个人很好地代表了越南男性人口,那么与整个越南人口相比,我们可以推断出我的体重是多少?为此,我们需要进行回归分析。
首先,让我们绘制一个身高和体重的二维散点图
嗯,我只是看起来一般。事实上,如果我们只看那些身高 168 厘米的人的数据(想象一条 168 厘米的垂直线穿过红点),我的体重比这些人稍微轻一点。
另一个重要的观察结果是,该图表明越南男性的身高和体重之间存在正线性关系。我们将做一个定量分析,以弄清这种关系。
首先,我们快速添加一条标准的“普通最小二乘法”线。
我们可以将我们的最小二乘法直线y**= 86.32+0.889x解释为,对于我这个年龄的越南男性的一般轮廓来说,身高每增加 1 厘米,体重就会增加 0.88 公斤**
然而,这仍然没有回答我们的问题;也就是说, 对于我这种身高(1 米 68)的人来说,58 公斤是算多了,还是算少了,还是算一般? 用一种更定量的方式重新表述这个问题,如果我们有一个身高 1 米 68 的所有人的分布,我的体重落入 25、50 或 75 百分位的几率有多大?要做到这一点,让我们更深入地挖掘,并试图理解回归背后的理论。
线性回归理论:
在线性回归模型中, Y 变量(在我们的例子中是人的体重)的期望值是 x (身高)的线性函数。我们姑且称这种线性关系的截距和斜率为0和β1;即我们假设 E(Y|X=X)=β0*+β1×X。我们不知道0和β1所以我们把它们当作未知参数。***
在最标准的线性回归模型中,我们进一步假设给定X=X的条件分布是正态分布
这意味着简单的线性回归模型:
可以改写为:
(1)
注意,在很多模型中,我们可以将 方差 参数 σ 替换为 精度 参数 τ ,其中 τ=1/σ 。
****总结:因变量 Y 服从均值 μ i 和精度参数τ参数化的正态分布。 μ i 是由 β0 和 β1 参数化的 X 的线性函数
最后,我们还假设未知方差不依赖于x**;这个假设被称为同质性。****
这是很多,但你可以想象我用这个图像讨论了什么。
在实际的数据分析问题中,我们得到的只是黑点——数据。注意每个点周围的正态分布看起来完全相同。这就是 同质化的本质。使用这些数据,我们的目标是对我们不知道的事物做出推断,包括【β0】、β1** (它们决定了神秘的黑线)和***【σ】(它们决定了从中得出【y】数据值的红色法线密度的宽度)。***
估计参数
现在,有几种方法可以用来估算和 β1 。如果您使用普通最小二乘法估计这种模型,您不必担心概率公式,因为您是通过最小化拟合值与预测值的*方误差来搜索 β0 和 β1 的最优值。另一方面,您可以使用最大似然估计来估计这种模型,您可以通过最大化似然函数来寻找参数的最佳值**
注意:一个有趣的结果(这里没有数学证明)是,如果我们进一步假设误差也属于正态分布,最小二乘估计也是最大似然估计。
带有贝叶斯方法的线性回归;
贝叶斯方法不是单独最大化似然函数,而是假设参数的先验分布并使用贝叶斯定理:
似然函数同上,但变化的是你对估计参数 β0,β1,τ 假设了一些先验分布,并把它们包含到方程中:
(2)
“等等,之前的演出是怎么回事,为什么它让我们的公式看起来复杂了 10 倍?”
相信我,这个优先业务感觉有点奇怪,但它是非常直观的。事实是,有一个强大的哲学推理,为什么我们可以用一些看似任意的分布来分配一个未知参数(在我们的例子中是 β0,β1,τ )。这些先验分布是为了在看到数据 之前捕捉 我们对情况的信念。在观察了一些数据后,我们应用贝叶斯规则来获得这些未知量的后验分布,它考虑了先验和数据。根据这个后验分布,我们可以计算出未来观测值的预测分布。
跟我重复:这些先验分布是为了在看到数据之前捕捉我们对情况的信念
最终的估计将取决于来自 1) 你的数据和 2) 你的前科的信息,但是你的数据包含的信息越多,前科的影响就越小。
"所以我可以选择任何先验分布?"
这是一个好问题,因为有无限多的选择。(理论上)只有一个正确的先验,这个先验捕获了你的(主观的)先验信念。然而,在实践中,先验分布的选择可能是相当主观的,有时是任意的。我们可以只选择具有大标准偏差(小精度)的正态先验;例如,我们可以假设 β0 和 β1 来自均值为 0 且 SD 为 10,000 或其他值的正态分布。这被称为无信息先验,因为本质上这种分布将是相当*坦的(也就是说,它将几乎相等的分布分配给特定范围内的任何值)。
接下来的是,如果这个分布族是我们的选择,我们不需要担心哪个确切的分布可能是最好的,因为:
(a)在可能性不可忽略的区域中,它们几乎都是*坦的,以及(b)在可能性可忽略的区域中,先验分布看起来像什么对于后验分布并不重要。
同样,对于精度,我们知道这些必须是非负的,因此选择限制为非负值的分布是有意义的——例如,我们可以使用低形状和比例参数的伽马分布。**
另一个有用的无信息选择是均匀分布。如果你为 σ 或 τ 选择均匀分布,你可能会得到一个由约翰·k·克鲁施克展示的模型
用 R 和 JAGS 进行模拟
理论到目前为止还不错。问题是解方程(2)在数学上是有挑战性的。在绝大多数情况下,后验分布不会直接可用(看看正态分布和伽玛分布有多复杂,你必须将它们相乘)。马尔可夫链蒙特卡罗方法常用于估计模型的参数。JAGS 帮助我们做到了这一点。
“等等!!!有一种工具可以帮助我们解决这些可怕的方程?”
JAGS 模型是一个基于马尔可夫链蒙特卡罗(MCMC)的仿真过程会产生参数空间θ=(β0;β1;τ)* 。为该参数空间中的每个参数生成的样本的分布将*似该参数的总体分布。*****
为什么会这样呢?这个解释比这篇文章所能容纳的要复杂得多。一行解释是:MCMC 通过构造马尔可夫链(!idspninfopath)从后验分布生成样本。?)具有目标后验分布作为其稳定分布。
我告诉过你这不好玩。快速的收获是:我们可以做一些智能采样,用数学证明我们的样本分布是 β0,β1,τ的真实分布,而不是求解方程(2),这在分析上通常是不可能的。
“好了,数学挥舞够了。我如何使用这个 JAGS 魔法?”
我们在 R 中运行 JAGS 如下
- 首先,我们以文本格式编写模型:
然后,我们命令 JAGs 进行模拟。这里我让 JAGs 模拟参数空间 θ 的值 10000 次。
经过这样的采样,我们得到的采样数据为θ=(β0;β1;τ)如是
“很酷的东西,那又怎么样?”
****现在我们有参数空间 θ 的 10000 次迭代,记住由方程(1) 😗***
这意味着,如果我们将 x=168cm 代入每次迭代,我们将找到 10,000 个权重值,因此,假设的高度为 168cm,权重**的分布。****
我们感兴趣的是我体重的百分位数,以我的身高为条件。我们能做的是找到以我的身高*为条件的我体重的百分位数分布。***
现在,这张图告诉我们的是,我的体重(考虑到 168 厘米的身高)很可能位于模拟越南人口的 0.3%左右。
例如,我们可以找到我的体重在前 40 个百分点或更少的百分点
因此,有压倒性的证据表明,以我 168 厘米的身高为条件,我 58 公斤的体重将使我处于越南人口的较低百分位。也许是时候去健身房增肥了。毕竟,如果你不能相信一些做得很好的贝叶斯统计结果,你还能相信什么?
我在数据源中包含了一个数据集,其中包含了 8169 名美国男女青年的身高和体重(国家纵向调查 1997 2 ),您能进行同样的分析并看看您的情况吗?
如果你喜欢这篇文章,你可能也会喜欢我的另一篇关于有趣的统计事实和经验法则的文章
- 优化生活的统计法则:呼唤效应
- 规则三:计算尚未发生事件的概率
对于其他深潜分析:
- 利用数据驱动的体育博彩策略赚大钱
- 寻找上帝的贝叶斯探索
- 用 Python 构建自己的图书推荐引擎
这篇文章的完整 R 脚本可以在我的 Github 页面找到。
注:我想为 Joseph Chang 教授(耶鲁大学)和他的班级 S&DS238:(贝叶斯)概率与统计大声喊出来。我几乎是偶然上了这门课,这很容易成为我上过的最有影响力的课之一(谈论一个政治科学专业的学生正在成为一名数据科学家)
数据来源:Vuong Q. H..开放的科学框架。2017 年https://doi.org/10.17605/OSF.IO/AFZ2W
资料来源:1997 年全国纵向调查| https://www.nlsinfo.org/investigator/pages/search.jsp?劳动统计局 s = nlsy 97
大数据分析如何帮助企业开发新机遇
原文:https://towardsdatascience.com/how-big-data-analytics-helps-businesses-to-develop-new-opportunities-88af9a9457b9?source=collection_archive---------4-----------------------
无论你经营的企业规模有多大,你都需要有价值的数据和见解来帮助你了解谁是你的目标受众,他们的偏好是什么,这样你就可以预测他们的需求。这就是所谓的“大数据”它在你的业务中扮演着非常重要的角色。有了它,你可以有效地提出和分析所有这些问题,实现你的品牌目标。考虑到这一点,这里有一些你们都想知道和需要知道的事情。
云:大数据战略的关键点
IE 表示,大数据战略的一个关键组成部分是云。这是因为企业外部的数据比企业内部的数据多得多。因此,我们应该开始看到公司更加依赖外部数据——特别是现在越来越多的数据存储在云中,API 和外部服务用于访问这些数据。
当您准备考虑大数据战略时,您也必须决定是将信息存储在自己的系统中还是使用云。云的主要好处之一是没有任何限制或障碍,因此您可以直接链接到任何其他数据源。这意味着您可以快速实施变革和新的业务模式。这在今天是至关重要的,即使这意味着从我们的错误中学习,然后花时间去纠正它们。当你使用云来做到这一点时,你将不必承受进行大量初始投资的限制,这种投资会使你局限于单一的行动过程。
大数据——一种新的竞争优势
Simpli Learn 表示,你可以通过捕捉和创新大数据,利用大数据超越竞争对手。这就是为什么你会发现它被应用于当今几乎每个领域的例子。公司用它来发现他们的服务和产品,供应商和买家,以及消费者的意图和偏好的缺陷,这样他们就可以创造更新更好的产品。老实说,自从 1997 年公司开始使用它以来,它创造了许多新的增长机会。从那时起,它甚至催生了一种新的业务类别——包括那些负责分析和汇总这些数据的业务。在过去的 20 多年里,它也成为大多数企业非常积极的事情。
除了其他好处,大数据还经常被实时挖掘。这是至关重要的,因为它可以评估指标,包括消费者忠诚度,这在过去是相互独立处理的。现在,它们不仅被连续处理,而且被更广泛地处理,甚至使它们成为对您的业务更有力的因素,因为您现在可以实时测试您的理论。
这些只是大数据可以帮助公共和私营部门企业的多种方式中的几种。
创造新的收入来源
有了大数据,你将拥有基于对市场及其消费者分析的洞察力。这些数据不仅对你有价值,对其他人也有价值。你可以通过向同行业的大型企业出售非个性化趋势数据来获得额外收入,从而为你的企业创造新的收入来源。
技术帮助
Data Floq 表示,有很多技术可以帮助你进行大数据分析。还有很多方法可以收集您想要和需要的数据,包括:
基于云的电话系统让您可以轻松存储和检索大量与通信相关的数据——包括保存的通话记录、客户信息和客户对话,无论它们发生在何时何地。这是非常经济、可靠和稳定的。您还可以轻松集成新的附加功能(如 Google Apps、Office 365),使数据收集和存储变得更加简单。然后,当您仍在进行通话时,您将能够收集和存储电子邮件 id、公司名称和物理地址等信息。
云存储也提供了许多优势。其中最大的一个好处是,它让你的企业可以轻松存储、访问和共享你收集的信息。这是以一种安全且经济高效的方式完成的,便于您以后访问这些信息。
今天,分析工具大量存在。这些将有助于你分析收集到的信息。你也可以使用这些工具来寻找具体的信息,比如你的公司在获取客户方面花了多少钱,你的每个客户在你的业务的不同领域花了多少钱。分析工具本质上是描述性的、预测性的和说明性的,这意味着您可以使用它们来了解在任何给定的时间点您的业务的任何部分正在发生什么。你也可以用它们来发现未来会发生什么。这些工具可以根据它们过去为你收集的信息做出这些预测。这在你考虑做出某些决定或制定某些行动计划的任何时候都是有益的。
数据安全和风险分析
有了大数据工具,您可以规划出公司的完整数据环境,以便在各种内部威胁发生之前进行分析。当您掌握了这些信息后,您就可以采取适当的措施(根据法规要求)来保护您所有的敏感信息。这也是如今大多数行业都在关注大数据的另一个重要原因。但是,任何处理财务信息、信用卡和借记卡信息或任何其他此类业务的公司都应该更加注意这一点,甚至要持续进行风险分析。为了取得成功,必须考虑许多不同的因素,包括经济和社会因素——这两个因素在决定你的成就时都起着重要作用。这并不难做到,因为大数据带来了预测分析,这意味着你可以快速、持续地扫描和分析你的社交媒体源和报纸报道。因此,你将能够轻松地跟上行业的最新趋势和发展。
大数据和商业智能如何改变资本市场
原文:https://towardsdatascience.com/how-big-data-and-business-intelligence-are-transforming-capital-markets-4ef61a06b2b8?source=collection_archive---------7-----------------------
商业决策通常会对财务产生影响,但在金融交易中影响最大,每个决策,无论大小,都会对底线产生直接影响,导致损失或收益。
因此,商业智能(BI)解决方案开始利用其处理大量结构化和非结构化数据的能力来支持交易决策就不足为奇了。对投资银行和大型交易机构来说是这样,但对小型金融企业甚至个人交易员来说也是如此。
金融交易市场一直非常依赖数据分析,因此大数据和高级商业智能的出现应该会扰乱这些市场参与者的运营方式。它确实做到了,其结果与本文简要探讨的三个结果一样重要。
金融交易变得数据驱动
投资银行和对冲基金从来都不缺数据。然而,自从大数据和金融商业智能的出现,他们使用数据的方式发生了相当大的变化。更快地分析市场状况的需求已经将金融交易组织从数据消费者转变为真正的数据驱动型实体,这依赖于除金融专家和分析师之外的可用数据工程师和科学家的专业知识。
金融行业的许多企业都有非常具体的软件需求,因此决定从头开始构建大数据解决方案。对于这项任务,数据工程师是不可或缺的。
对于雇不起数据工程师的较小企业来说,答案往往是金融科技开发外包,这种做法反过来刺激了软件公司对金融专业知识的需求。
金融交易中的数据科学
数据科学家比工程资源更受欢迎。这部分是因为,与其他商业领域不同,数据的数量和种类通常过于复杂,无法在交易员可以理解的通用仪表盘上提供。相反,数据科学家需要识别微妙的数据模式,并在复杂算法的帮助下生成可操作的见解。
因此,大数据和商业智能在金融交易中的使用越来越多,这对科技行业来说是个好消息。然而,这也导致了分析专业人员的短缺,迫使金融服务和交易公司为他们雇佣的资源支付更多费用。
事实上,根据 Glassdoor 的数据,2018 年一名数据科学家的中值基本工资约为 11 万美元。毫无疑问,这一高比率部分归因于金融行业,IBM 的一项研究显示,该行业目前对数据科学家和分析师的需求高于其他任何行业,占所有相关职位空缺的 19%。
大数据:新型交易者的数字黄金
对于能够访问大数据和金融商业情报的交易员来说,决策变得越来越明智,因此风险也越来越小。交易曾经主要基于对价格行为的分析,而大数据的整合使得支持和反对水*、政治和社会因素以及其他有影响的条件能够被添加到等式中。
预测性商业智能的应用可以进一步降低风险,使交易员能够评估每笔交易的可能结果和回报率。然而,整个过程都需要大量数据,这促使越来越多的企业准备收集数据并出售给金融交易机构。
量化对冲基金:大数据的大买家
通过购买或其他方式获得大数据,也催生了一种全新的交易实体——量化对冲基金。这些基金在某些方面类似于传统或“基本面”对冲基金,但几乎完全依赖数字算法和模型来选择和发起交易。
由于他们的商业模式,量化对冲基金需要大量的数据,讽刺的是,他们的胃口已经把出售数据变成了金融行业最赚钱的活动之一。事实上,在所谓的“替代数据”上的支出到 2016 年已经达到 2 亿美元,预计在五年内将翻一番。这是研究和咨询公司 Tabb Group 的研究得出的结论之一。
HFT 让位于智能交易
金融科技行业进步产生的一个更有趣的动态可以被视为影响了有争议但广泛存在的高频交易实践(HFT)。高频交易本身是一个数据驱动的过程,一度非常有利可图(对一些 HFT 公司来说仍然如此)。
然而,随着在 HFT 领域竞争的技术要求变得越来越复杂,利润开始下降,机构开始将注意力从闪电般的机器启动交易转向基于大数据洞察的人工交易。例如,人类股票交易者可能使用市场情绪分析的结果来提取可操作的交易信号。
HFST 的趋势?
考虑到 BI 技术的持续改进,这种动态变得更加有趣。例如,实时分析将成为金融科技领域的一股强大力量。随着交易实体可以实时收集和分析来自新闻、社交媒体和股票市场的数据,然后将情报输入自动化交易解决方案,我们可能会再次看到高频交易的兴起。
然而,在下一次迭代中(会是 HFT 2.0,还是高频智能交易?)区别可能在于机器执行更智能算法的能力,这使得高度知情的交易能够以极高的频率达成。
当然,尽管自动化金融交易在公*性方面名声不佳,但仍有很多值得称道的地方。毕竟,机器不会受到紧张、兴奋或任何其他导致错误决策的行为特征的影响,而在金融市场的世界里,这些行为特征确实非常昂贵。
这只是大数据和金融 BI 的开始
奇怪的是,对于一个一直依赖数据的行业来说,情绪分析、智能高频交易和数据科学等发展在金融交易领域相对较新。
实际上,这还只是皮毛,所以如果你的公司在资本市场交易或涉足金融服务,你应该预计大数据和商业智能将在你的业务中发挥越来越大的作用。
此外,机会不太可能仅限于创收。密切关注在中后台流程中利用财务 BI 的可能性,因为随着越来越多的公司适应大数据,这些领域的用例肯定会变得明显。
以下是数据分析如何帮助社区银行
原文:https://towardsdatascience.com/how-big-data-can-help-community-banks-c7e672c4f6a4?source=collection_archive---------5-----------------------
大数据工具不仅简化了任何行业中冗长的分析程序,还为银行提供了竞争优势。随着新法规的出台,银行正在寻找使合规程序更加有效和准确的方法。银行业的大数据正慢慢获得动力,并成为整个银行业不可避免的必需品。随着传统数据管理结构变得过时,社区银行很难适应外部竞争和监管压力。
在社区银行系统中执行分析工具的需求逐渐成为一种强制而不是一种选择。Gartner 的 2014 年首席信息官调查显示,金融公司鼓励在技术支出方面投资数据分析。尽管大银行通过在数据分析方面的昂贵投资,在了解客户方面拥有明显优势,但社区银行在采用这种创新趋势方面似乎有点谨慎。为了实施大数据工具,社区银行面临着围绕高成本、缺乏专业知识和数据安全性的障碍。
社区银行并不总是负担得起实施分析工具和基础设施,以及雇佣新数据库所需的专业人员。
此外,对于许多社区银行来说,与私人客户信息相关的数据安全是一个敏感问题。大多数银行在当地社区发展壮大,在那里银行和客户之间有着高度的信任。通过个人互动和长期建立的关系,社区银行往往比大银行更了解客户的信贷决策。
随着大数据的实施,社区银行可以保持密切的监督,并实时检测任何欺诈行为。通过预测分析,银行可以识别和监控客户账户中的任何差异,甚至预测贷款违约。社区银行还将能够发现高风险账户,帮助他们做出更明智的决定。但不愿分享私人信息对许多银行来说仍是一个问题,因为它们的繁荣依赖于客户的信任和信心。
然而,许多社区银行正在采用分析解决方案来做出完全基于准确风险分析和透明度的数据驱动型决策。
这些银行越来越有兴趣与技术驱动的竞争对手竞争,并从中脱颖而出。他们正在与 Verizon Enterprise Solutions、亚马逊、IBM 和谷歌等云服务公司合作,以更低的成本获得大数据和分析的存储。此类服务的实施有助于社区银行通过实时市场反馈和社会趋势在成本和回报之间实现*衡。除了与以相对较低的成本获得的服务建立伙伴关系之外,数据可视化工具还为银行内的更多员工而不仅仅是少数员工提供数据趋势。
随着运营变得越来越复杂,对数据分析工具的需求对这些小型银行来说也变得至关重要。据北卡罗来纳银行(BNC)称,数据可视化软件也有助于简化数据报告过程。通过 SAS Visual Analytics ,获得的数据比通过传统电子表格获得的数据更强大、更准确。数据可视化工具可靠、成本较低,并且有助于银行快速把握趋势。
MX 为银行提供了一个类似的可视化*台,帮助潜在账户持有人实现账户聚合、自动分类和资金管理功能。Insight 和 Target 等工具有助于同时对不同的账户持有人应用更加定制化的方法。这种分析工具不仅有助于社区银行在竞争对手中的定位,而且有助于在不到五分钟的时间内跟踪潜在的活动,而不需要它。这些工具的部署有助于实时掌握客户的需求。
视觉分析在并购过程中也很有用,可以发现不准确之处,从而确认数据的真实性。
通过利用大数据,社区银行可以管理信贷、流动性和利率风险,并更好地为社区服务。随着对社区银行的既定看法慢慢适应这种变化,通过整合智能数据治理、低成本和客户隐私的*衡方法可以恢复人们对当前银行系统失去的信任和信心。
版权所有。重新出版需要作者的许可。
大数据和位置智能如何改变世界
原文:https://towardsdatascience.com/how-big-data-location-intelligence-are-changing-the-world-4207ff92a151?source=collection_archive---------3-----------------------
毫无疑问,智能手机数量的爆炸式增长已经改变了我们所知道的世界。传感器和互联设备数量的增加产生了海量数据。这正被用来改变我们的生活方式。
物联网,位置数据,位置智能,大数据。不管你给它起了什么名字,很难否认各种行业的潜力
现在很明显,精确的位置数据可以提供对离线世界前所未有的洞察力。越来越多的企业意识到移动位置数据的价值及其在全球范围内的影响。
随着我们远离不可靠的数据集,传感器驱动的精确数据集正在占据中心舞台。这种精确的数据有许多用途。但是我想看看一些具有最大破坏性影响的。
商业智能
通过使用数据来观察趋势的能力并不新鲜。基于人们在线下世界的活动,以接*实时的方式做到这一点的能力。
位置智能揭示了经常被忽略的大数据集之间的关系。它将这些见解转化为可操作的商业智能。帮助通知关键业务决策,提高转化率优化,尤其是在网站上。
从与大型连锁场馆竞争的小酒吧,到与在线大公司竞争的小零售商,这些企业正在通过使用这种大数据来制定商业战略,从而获得宝贵的见解。
事实是,移动位置数据现在已经足够成熟,可以解决小型企业和大型企业面临的许多问题。让我们来看几个:
金融服务 —通过大数据集了解客流量对于金融行业很有价值。移动设备数据有助于在正式报告之前预测收入和其他 KPI。这有助于投资决策。
零售 — 大数据可以帮助小型和大型零售商。通过移动设备数据了解商店访问以及客户行为,对零售行业产生了许多积极的影响。这些见解有助于为商业决策提供信息,如商店布局、营业时间、人员配备等。
基础设施和规划
我们都听说过智能城市这个术语。我们倾向于认为,这不仅仅是添加一些数据点,并在前面加上“智能”一词。事实上,还不止这些。我们正朝着人口众多的城市中心前进,并渴望实现无人驾驶汽车。大数据是开启这一真正智能未来的关键。
移动设备数据的增加为理解城市如何运转提供了更好的机会。它有助于创建反映这一点的系统和基础设施。
结合城市中不断增加的联网设备,中央规划机构现在拥有了一套工具,可以为许多不同领域的决策提供信息。
移动位置数据有助于更好地了解哪里对公共基础设施的需求最大。例如,我们可以检查移动设备位置数据,以了解城市中自行车最多的道路。当计划在哪里实施新的自行车路线时,这些信息是精确的和无价的。
交通和拥堵也是如此。在日益拥挤和污染的大城市,了解如何缓解交通问题是很重要的。了解交通流量以及在哪里建设新的道路结构或引入新的低排放区,对于建设能够维持当前人口增长水*的智能城市至关重要。
大数据正在对此类规划产生巨大的积极影响。由于移动设备数据和位置智能的准确性和独特性,它正在改变世界各地城镇的决策方式。
营销和广告
大数据和营销从来都是相辅相成的。营销人员总是希望利用数据集来提高广告的效率和效果。使用大数据创建量身定制的相关受众并不是一种新的做法。
但是移动位置数据允许营销商和广告商将数字广告与消费者离线时的行为联系起来。了解消费者如何在线下世界移动有助于营销人员变得更加有效。它帮助营销人员向消费者提供更多的个人广告。
对消费者行为的这种理解使品牌能够根据一个人的独特体验来定制沟通——例如建立更好的网站来匹配访问者的行为,并相应地进行个性化。
位置智能正在扰乱消费者生命周期的许多阶段。它把网络上的分析能力带到了现实世界。
分割
移动设备数据有助于构建人们如何移动和行为的复杂图像。这有助于广告商建立复杂的客户档案。品牌最终理解了顾客去的地方,以及他们如何与周围的物质世界互动。
这远比其他受众细分的方法有效。这是因为一个人的位置往往比他们在电脑上搜索或坐在沙发上浏览手机时更能表明意图。
这使得营销人员能够准确识别消费者在购买过程中的位置。此外,它允许他们以更详细的级别来完成这项工作。
个性化
大数据在营销和广告方面的一个重大突破是增强大规模个性化的能力。
位置数据让品牌通过了解顾客的情况变得更有帮助和人性化。这个概念并不新鲜,但是这个空间中数据集的准确性和不断增长的规模使得交流变得更加个人化。
位置有助于在客户实际兑换时提供促销。它让“顾客也买了”的体验到达现实世界的零售店。通过这种方式,大数据正在为线下问题提供数字化解决方案。位置智能是根据一个人对现实世界的独特体验来定制品牌传播。
对消费者行为的这种理解,使得品牌能够根据一个人的独特体验来定制沟通——例如,建立符合访问者行为的网站,并据此进行个性化。营销人员应该问问自己,他们如何能够使用行为目标来实现他们的目标和提高他们的底线。
客户体验
大数据改善了客户体验。位置智能有助于自动寻路、订购、协助和队列管理。了解一个人的物理位置有助于改善许多领域的游客体验。
体育场、度假村、机场和交通枢纽都会改善在这些地方花费时间和金钱的人们的体验。这可能是基于位置的售票方式——你走上火车买票。或者它可能在你的位置订购食物和饮料。
大数据和位置智能在改善客户体验方面仍有巨大的应用空间。在网络定制和登陆页面中,无论是 Leadpages 还是insta page,你都会获得更好的参与度和更好的客户体验。
属性
正如我们所见,移动设备数据已经将许多数字生活方式与线下消费者行为联系起来。这项技术革新营销和广告空间的另一种方式是通过属性。
传统上,许多广告商在衡量线下广告对线下 KPI 的影响时都是盲目的。
但是移动设备位置数据正在填补空白。例如,当一个人站在户外广告前时,位置智能可以理解。然后,它可以测量这些人中有多少人在商店内或特定实物产品前被看到。
将两者联系起来,为营销人员提供了一种准确的方法来衡量线下广告库存的影响和投资回报率。这种线下归因也让他们能够衡量数字广告对线下目标的影响。这些事情以前是不可能确定的。但是大数据改变了广告的衡量方式。
阿肯色州
如果 AR 真的要实现它的承诺,它将不得不依赖复杂的数据集和准确的位置智能。
随着 AR 越来越突出,它的应用将从好玩的游戏转向有用的生产力应用。随着 AR 的发展,它作为一种通过内容和广告接触观众的方式的使用将会增长。像以前的营销活动一样,它将通过使用大数据和位置智能来改进。
当用户在现实世界中移动时,AR 将需要大量准确和实时的位置数据才能正常工作。
优化供应链
大数据和位置智能正在影响希望优化供应链的组织。
位置智能在供应链中的明显应用在于理解和跟踪交货和供应的能力。它已经被用来生成数据集,可以优化和改善这些服务。
但是位置智能不仅仅是帮助企业优化流程。这有助于他们了解对产品的需求。历史上有很多人建造一些东西,希望人们想要它,结果却发现他们并不需要。
大数据帮助制造业优化的另一种方式是帮助它调整运输类型、装货地点或销售地点。
随着位置数据的兴起,这些见解现在由来自线下世界的信息推动。随着数据治理的出现,以前无法实现或已经滞后的洞察力现在可以实时获得。这是扰乱供应链运作的核心问题。
隐私和透明度
像往常一样,对于新的破坏性活动,焦点集中在这些新技术的责任上。理应如此。事实上,大数据领域的企业需要更加透明地了解数据集的来源。
仅仅勾选一个框并开始收集和汇总个人数据是不够的。为了清理数据供应链,还需要做更多的工作。需要将更多的控制权交给用户。
这一点已经很明显了,从目前移动 VPN的兴起就可以看出来。这些应用是用户的一种反应,他们希望保护自己的隐私,并控制谁可以看到他们在网上做什么。
通过这种方式,我们有责任向用户传达大数据和位置智能的价值。它在全球范围内产生了巨大的积极影响,这也是保护隐私的更多理由。
您的数据应该有多大?
原文:https://towardsdatascience.com/how-big-should-be-your-data-fdace6e627e4?source=collection_archive---------6-----------------------
在设计机器学习模型时,所有数据科学家都会想到一个简单的问题:“数据集应该有多大?建模应该使用多少特征?”。本文将通过一项实验研究,向您展示如何决定数据集大小和模型所需的特性数量。
https://commons.wikimedia.org/wiki/File:BigData_2267x1146_white.png
下面是我的 github 资源库的链接。它包含用于分析的 python 代码。您可以派生或克隆存储库,并使用代码:-P
[## bmonikraj/机器学习数据分析-01
机器学习-数据分析-01 -使用统计方法对数据集进行实验分析,以获得更好的机器…
github.com](https://github.com/bmonikraj/machine-learning-data-analysis-01.git)
下面是从 UCI 机器学习知识库到数据仓库的链接。它包含与数据集和属性相关的信息。这里提到,这个问题是一个回归问题。
https://archive . ics . UCI . edu/ml/datasets/理化+属性+of+蛋白质+三级+结构
**Description of Dataset**
Dataset inititally has 10 columns.
Column with name 'RMSD' is the target column of our data set
Rest 9 columns with name F1, F2, ... , F9 are the features columns of the data set. m = Number of observations in the data set
Dimension of Y : m X 1
Dimension of X : m X 9
现在,我将向您展示数据帧的每一列之间的关联矩阵,包括 RMSD (数据帧是一个术语,用来表示 Python 的 Pandas 模块读取的数据集)。
Correlation Matrix — Heat Map , showing the correlation between each and every column of data frame
从上图中,我们可以得出结论,RMSD 与其他列几乎是独立的,因为理论上说如果,correlation(x,y)~0,那么‘x’和‘y’是彼此独立的(其中‘x’和‘y’是相同维数的向量)。
在我们不知道哪一列将被选为目标列的情况下,我们可以找到相关矩阵,并找到与所有其他列最独立的列。
这是 x 中所有特征列之间的相关矩阵图。
对于 X 的列‘I’和列‘j ’,它显示了两个变量之间的散点图,当‘I’时!= 'j '。如果' i'=='j ',那么它显示了变量的频率分布。
Correlation Matrix plot — Correlation between two variables (feature column) and frequency distribution of the variable itself
上图讲述了变量之间的相互关系。同样,我们可以用图形来推断矩阵之间的相关性,以便更好地进行分析。
变量的频率分布显示了它所遵循的分布类型,如果遵循一个已知的标准分布,如 【高斯】 分布或 【瑞利】 分布,我们可以预测和分析变量的行为,这在进一步研究数据时会很方便。
注:变量的频率分布或直方图通常用于将变量拟合为标准分布。
现在,我想请大家注意功能选择。在这里,我将阐明决定保留哪些特性的方法。我将使用 Python 的 Sci-kit 学习模块中的 SelectKBest 模块来完成这项工作。他们使用 f 检验估计从数据集中找到最佳特征。关于模块和理论的更多信息可以在参考资料中找到。
from sklearn.feature_selection import SelectKBest, f_regression
#Assuming X and Y are numpy array of dimension (m,9) and (m,1) #respectively
#We use f_regression function since our's is a regression problem
X_best = SelectKBest(f_regression, k=5).fit_transform(X,Y)
'''
After the code snippet is run, X_best keeps top k=5 features from X.
'''
现在,我将使用线性回归向您展示最佳“k”特征对模型的“ R2 分数”指标的影响。这里你可以看到,通过增加“k”的值,我们的线性回归模型得到了更好的 R2 分数。我还存储了与' SelectKBest '方法相关的功能的降序。同样的代码可以在我上面的 github 链接中找到。
‘k’ vs ‘R2 Score ‘ plot on linear regression model (‘k’ determines the top k features from the data set)
这样,我们可以选择一个合适的“k”值作为模型的 R2 分数的相应值,这对于我们的问题陈述来说是可接受的(我可能会选择 k=5,但对于您来说,可能会根据问题的需求而有所不同)。
以下是按降序排列的‘k’个特性列表:【F3,F4,F2,F9,F6,F1,F5,F7,F8】
特征选择的主要应用之一是降低数据的维数,以获得更好的计算性能。
主成分分析是将维度(特征)分解成更小维度空间的另一种方法。使用主成分分析的主要好处是:
- 降维
- 将高维空间数据转化为低维空间数据进行可视化
以下是将高维空间分解为低维空间后的数据可视化(对于“X”)。
Visualizing ‘X(1-D space)’ vs ‘Y’ after decomposing X into lower single dimension space
Visualizing ‘X(2-D space)’ vs ‘Y’ after decomposing X into lower 2 dimension space
现在,我将向您展示使用线性回归将数据投影到“p”分量特征空间对模型的“ R2 分数”度量的影响。这里你可以看到,通过增加“p”的值,我们可以得到更好的线性回归模型的 R2 分数。
‘p’ vs ‘R2 Score ‘ plot on linear regression model (‘p’ determines the top p components from the eigen vector projection of data set)
查看图表,我们可以为我们的解决方案选择一个合适的“p”值。根据问题的要求,应通过相应的可接受的 R2 评分值来选择“p”的值。
现在我将讨论数据集大小的影响,【m】=数据集 中的观察次数。我保留了最初出现在数据集中的 9 个特征,我改变了“m”,在训练集 (80%) 上训练,并使用线性回归模型计算了测试集 (20%) 上每个“m”的 R2 分数。
分析上面的图表,我们可以推断出以下几点:
- R2 分数的最初峰值是由于较低的“m”值造成的数据偏差。
- 在尖峰之后,R2 分数在某种程度上饱和(忽略中间的尖峰,这是因为在分裂成‘m’’时随机选择数据点),这意味着逐渐增加数据集大小,最终增加 R2 分数,直到饱和。
- 在某一点之后,它饱和,增加“m”,不影响 R2 分数。
- 较低的“m”导致模型中的偏差或较低的 R2 分数。
D 设计机器学习模型包括许多因素,如选择特征、决定数据大小以获得更好的模型性能、计算成本、实现实时数据的可行性(对于某些情况),以及根据问题的要求的许多其他因素。这总是对数据的探索性分析,这导致了更好的模型设计,因为
机器学习中的每个问题都是不同的
参考:
- Sci-kit 模块:http://scikit-learn.org
- SelectKBest 模块:http://sci kit-learn . org/stable/modules/feature _ selection . html
- 熊猫模块:https://pandas.pydata.org/pandas-docs/stable/
- 用于可视化的 Seaborn 模块:https://seaborn.pydata.org/
- 主成分分析:https://en.wikipedia.org/wiki/Principal_component_analysis
区块链将如何保护隐私
原文:https://towardsdatascience.com/how-blockchains-will-enable-privacy-1522a846bf65?source=collection_archive---------3-----------------------
科技侵蚀了我们的隐私保护。个人或组织所做的大多数事情现在都在公共领域。第三方监控、存储和使用个人和组织数据、模式、偏好和活动。许多新兴的商业模式依赖于我们个人数据的收集、组织和转售。
技术也使得将数据与个人联系起来变得更加容易,即使个人选择退出社交网络*台。例如,面部识别技术的突破已经在商业和安全领域得到广泛应用,特别是在中国和俄罗斯。
区块链技术可能会限制这种隐私侵蚀的影响,同时仍然会在有用的时候发布个人信息。例如,用户可以在区块链上存储个人信息,并临时释放部分信息以接受服务。比特币和其他基于区块链的数字货币已经证明,使用点对点的分散网络和公共账本,可信和透明的计算是可能的。
这篇文章探讨了个人和组织产生的数据对隐私的影响。它还简要考虑了支持区块链的系统如何帮助用户重新掌控自己的数据。
第一部分:个人
个人
隐私对个人来说很重要,因为他们的个人信息对组织、营销人员和其他个人来说很有价值。互联网用户中的一个普遍说法是:如果你不为产品付费,你就是产品。这意味着,对于提供免费服务的公司,如社交网络*台,个人信息是有价值的。
宪法保护
在美国,隐私对于行使各种宪法权利非常重要,包括言论自由权、结社自由权、出版自由权、免受不合理搜查和扣押权以及免受自证其罪权。缺乏国家行为者的隐私会危及这些权利。知道他们的言论将在公共领域被归因于他们,一个人可能不会为正义的事业大声疾呼,特别是如果他们的观点或主题是有争议的或不受欢迎的。由于许多重要的观点不受欢迎或有争议,自我审查应该引起社会的严重关注。知道自己被监视,也可能会阻止你和志同道合的人见面。如果举报者和其他揭露组织不法行为的人不能保持匿名,他们就不太可能这样做。随着技术的进步,法院已经勾勒出了对国家行为的限制。
健康资讯
如果信息就是力量,保护信息可以帮助一个人与组织谈判。例如,健康保险公司可以利用负面健康信息向特定个人收取更高的保费,或者拒绝承保。因此,个人有动机阻止这些信息进入公共领域。健康信息的公开发布也会给一个人的社交或职业生活带来尴尬或尴尬。
金融信息
金融信息是个人信息赋予其拥有者权力的另一个领域。个人可能不希望金融机构知道几年前的不良信用记录,并且肯定不希望邪恶的行为者使用个人的个人信息来实施身份盗窃或金融欺诈。
虽然人们不得不经常披露个人财务信息,例如纳税或获得抵押贷款,但如果这种信息进入公共领域,各种行为者都会感兴趣。寻求客户的公司、寻求捐赠者的慈善机构以及寻求捐赠的政治候选人都对了解个人的个人财务信息感兴趣。尽管这些行为者大多是良性的,但人们对于他们想要与谁分享个人财务信息以及他们想要这些信息用于什么目的有着不同的偏好。
例如,人们可能不希望他们的财务信息被公司用来确定他们愿意和能够为通常以较低价格购买的东西支付的最高金额。然而,Orbitz 向 Mac 用户展示同样的酒店房间,价格却比 PC 用户高。这表明,即使是一点点个人信息,比如一个人是使用 PC 还是 Mac,也能对营销人员评估一个人的经济能力有用,这种方式会让大多数人感到不舒服。
个人行为
研究表明,当人们知道自己被监视时,他们的行为会有所不同。因此,在更基本的层面上,隐私使一个人能够以一种受启发的、亲密的或愚蠢的方式行动,而没有恐惧。就像人们凭直觉关上或锁上前门一样,他们在与技术的互动中也渴望隐私。如上所述,组织有许多充分的理由收集个人信息(从未来使用产品或服务的便利性,到未来互动的便利性,到研究消费者偏好以创造更好的产品或服务)。精明的组织努力不违反个人对个人隐私的期望,因为个人隐私具有内在的价值:它允许人们做自己,以不受约束的方式行事。
匿名和假名
互联网的核心存在一个悖论:人们期望它成为一个公开透明的论坛来交流思想、信息、商品和服务,然而他们也期望匿名上网。正如《纽约客》一幅著名漫画的标题所言:在互联网上,没有人知道你是一只狗。对互联网隐私的期望因利益集团和国家而异。例如,由于政府监管,韩国人对互联网隐私的期望比美国人低。2015 年初,中国政府通过了新的规定,要求互联网用户今后在写博客或使用社交媒体时使用真实姓名。在互联网上匿名和假名是可取的情况是有争议的。例如,虽然一个大学生期望在互联网上匿名是合理的,但对于利用互联网策划暴力犯罪的人来说就不是这样了。对于是否应该允许教授用笔名写作,人们有不同的看法。
虽然有趣,但关于何时应该尊重匿名或假名的辩论有可能变得没有实际意义,因为新技术对个人隐私构成了前所未有的新挑战。
社交媒体和按需经济要求披露个人数据
脸书、推特和其他社交网络*台的崛起改变了人们对互联网隐私的期望。使用这些*台的人自愿提供个人信息,并同意与有限的受众或所有人分享。然而,即使是那些不想分享个人信息的人(例如,那些没有脸书或 Twitter 账户的人)也会因为职业或营销目的而感到压力。雇主经常对候选员工进行谷歌搜索。虽然没有结果总比糟糕的结果好,但今天的求职者通常会使用互联网来推销自己,要么创建一个 LinkedIn 帐户,要么通过个人网站、博客或文章展示成就。对小企业来说也是如此:大多数要么有网上业务,要么因为没有网上业务而失去业务。
过去十年的另一个主要技术趋势是按需经济(简称为共享经济)的出现,在这种经济中,商品或服务的提供商和用户通过网络或电话应用程序或网站进行交易。这就产生了排挤现有中间参与者的效果(这一过程被称为非中介化)。正如优步和 Lyft 等拼车服务已经让传统的出租车服务和城市出租车牌照系统几乎过时一样,维基百科已经取代了微软 Encarta 等大型私人编辑的百科全书。如今,旅行者不仅会查看其他城市的酒店价格,还会查看 Airbnb 的价格,以便直接从其他人那里租赁短期房间或房屋。随着 Airbnb 和其他代表按需经济的公司的出现,他们通过要求主人和客人提供个人信息来满足客户的安全需求。此外,在 Airbnb 住宿后,主人和客人会被邀请互相评论,这些评论通常包含个人信息,任何浏览 Airbnb 网站的人都可以免费获得。
尽管几十年来,易贝等公司一直在使用身份验证和用户评论来打击欺诈,并鼓励在线市场的质量,但新一代共享经济应用认为个人信息等同于可信度:越多越好。由于按需服务的参与者之间的互动比易贝上的买家和卖家之间的互动更密切,这是有意义的。上陌生人的车,在陌生人家里睡觉,让陌生人帮你遛狗,这些都需要对应用、站点或*台的高度信任。收集更多信息的*台会产生更多信任。例如,虽然 Airbnb 的客人可以通过积极的主机评论历史来建立信任,但没有先前历史的客人可以上传政府 ID,甚至链接到他们的脸书账户,以表明可信度。因此,尽管共享经济的去中介化让人们能够相互信任,但它也经常要求人们向*台甚至公共领域披露公共信息。
个人提供给社交媒体网络和按需经济服务的个人数据可以为希望基于诸如位置、年龄、性别、消费者偏好、社交偏好和其他类似属性来描述个人的组织或个人提供基础。个人信息赋予其拥有者权力,因此个人应该仔细考虑他们在不同情况下可以接受的个人隐私级别。
第 2 部分:组织
保护组织战略和专有信息
组织需要保护敏感信息,如公司战略见解或专有信息(如知识产权),这些信息可能会被竞争对手或不法行为者用来破坏组织。这不仅适用于制造行业尖端技术的组织(如国防、航空航天或汽车行业),也适用于所有类型的组织。2016 年,黑客以民主党全国委员会为目标,发布了其内部电子邮件通信,破坏了几位民主党候选人的可信度。同样在 2016 年,冒充孟加拉国中央银行官员的黑客向纽约美联储发送指令,试图从孟加拉国中央银行在纽约美联储的账户中窃取 9.51 亿美元。他们成功地吸走了 1 . 01 亿美元,其中大部分国际当局仍未追回。这些引人注目的黑客事件象征着组织在保护其组织战略和专有信息免受竞争对手和不良行为者攻击时所面临的挑战。
出于营销和研究目的收集客户信息
组织出于营销目的收集客户信息。杂货店筛选从人们的手机上收集的位置信息,以确定他们在特定的过道里花了多长时间。常旅客和其他忠诚度计划向人们提供额外津贴,以换取他们的个人信息,这些信息可用于加强产品和服务的促销。营利性和非营利性组织都建立客户或捐赠者档案,帮助他们进行销售和筹集资金。
客户信息还可以用来帮助了解消费者的偏好,并在未来提供更好的产品和服务。此外,组织对客户信息的收集通常会使客户将来与该组织的交易更加方便。
在收集此类信息时,组织必须遵守适用的联邦和州法律。在美国,医疗保健公司、金融服务公司和其他公司在允许收集的客户信息类型方面受到不同的限制。成熟的组织熟悉管理其行业的法律框架。随着数据收集和分析越来越多地由非人类参与者执行,法律和法规合规性变得越来越困难。
保护客户信息
对于所有面向消费者的公司,尤其是谷歌、苹果和亚马逊等科技公司,收集消费者的个人信息有助于为每位消费者提供更个性化的服务。这也让公司有责任保护这些信息。例如,在一个人的 Mac、iPhone 和 iPad 上同步数据可以方便地访问信息,但也让人预期苹果会采取措施保护这些信息不受外人影响。
保护客户信息
对于为其他组织提供服务的组织(如会计或法律服务组织),保护客户信息对于维护客户关系同样至关重要。黑客以前曾瞄准专业服务公司,以获取他们客户的数据,试图绕过客户复杂的数据保护措施。认识到这一风险后,主要的专业服务公司已经采取了大量措施来保护客户信息。
当前保护敏感信息的组织措施
组织已经采取了许多措施来保护敏感信息:例如,雇用内部和外部信息安全专业人员,教育员工如何保护信息,以及审查员工以防范内部威胁。一些已经成为或可能成为目标的组织也开始使用蜜罐(伪造的、由公司监控的数据室,声称保存敏感的公司信息,引诱和欺骗黑客,帮助公司了解黑客的动机)。这些措施是重要和必要的,需要发展以应对新的挑战。
第 3 部分:大数据
组织收集包含各种信息的数据,例如公司的产品和服务、内部流程、市场条件和竞争对手、供应链、消费者偏好趋势、个人消费者偏好以及消费者与产品、服务和在线门户之间的特定交互。组织收集的数据量显著增加。
对存储数据数量膨胀的担忧至少在上个世纪就已经存在。2014 年 4 月,研究机构 IDC 发布了一份题为“充满机遇的数字世界:丰富的数据和物联网不断增长的价值”的报告,该报告预测,“从 2013 年到 2020 年,数字世界将增长 10 倍——从 4.4 万亿千兆字节到 44 万亿字节”。当今数据的扩展是由计算和数据存储能力的增加、传感器的增加和连接性的增加推动的。
计算能力和数据存储能力的提升
随着时间的推移,我们发现存储更多的信息变得更加容易,因为在过去的几十年中,计算能力和存储容量都有了显著的提高。英特尔联合创始人戈登·摩尔在 1975 年观察到,芯片上的晶体管数量每两年翻一番。这一观察结果被称为摩尔定律,准确地描述了 21 世纪计算能力的指数增长。类似地,同时,在过去的几十年中,数据存储容量呈指数增长,尤其是我们在越来越小的驱动器上存储大量数据的能力。
由于这些增长,存储大量数据变得可能、便宜,甚至方便。因此,组织往往倾向于存储更多数据,因为丢失随后证明有用的数据的风险超过了通过保存更少的数据来略微降低存储成本的好处。
云计算的兴起
云计算仅仅意味着按需使用远程(而非本地)计算能力、数据存储、应用程序或网络。由于云计算,组织可以简单地从云提供商那里租用计算能力或存储,而不再需要在自己的服务器上存储大量数据,维护巨大的计算能力,或维护供应商的传统数据库(尽管传统数据库对大型组织仍然有用)。由于云提供商必须提供可靠的按需、可扩展的解决方案,像亚马逊、微软和谷歌这样的大公司是占主导地位的云提供商。
面向企业的云计算服务有三种形式:软件即服务(SaaS),其中云提供商允许组织在线使用其软件(例如,在线访问 TurboTax *台即服务(PaaS),其中组织使用云提供商的资源开发应用程序供其成员访问(例如,Microsoft Azure);基础设施即服务(IaaS),其中云提供商为客户提供基本的基础设施服务以提供服务(例如,网飞使用亚马逊网络服务基础设施来支持视频流)。(个人用户可能更熟悉 iDrive、Google Docs 或 Dropbox 等云应用。)云计算的实现不仅得益于前面讨论的计算能力和数据存储能力的进步,还得益于互联网接入、速度和可靠性的显著提高。虽然云计算的采用在一定程度上是为了应对存储不断增长的数据量的困难,但它的广泛采用促进了存储数据量的增长。
增加传感器的使用、传感器的复杂性和连接性
传统上,互联网由人类用户相互之间以及与数据库的交互组成,互联网越来越多地用于将物理设备相互连接。机器对机器(M2M)交互的定性和定量增长预计将导致无处不在的物联网:一个智能设备网络,这些设备相互集成,在最少的人工干预下执行越来越复杂的功能。
物联网不需要全新的基础设施。相反,它是通过在现有设备和基础设施中嵌入传感器来实现的。例如,当家庭空调系统使用传感器来确定人们何时在家,并使用这些信息来决定温度以保持每个房间时,它就变得'智能'。类似地,当城市能源和水基础设施嵌入传感器时,智能系统可以监控使用情况,预测未来使用情况,并更有效地分配资源。先进的传感器可以改善几乎任何技术,从智能手机到心脏监视器,再到大型农场或工厂。
智能设备根据其用途需要不同种类的传感器。电脑有摄像头和麦克风已经有几十年了。现在,设备还可以配备传感器,测量温度、运动、其他物体的距离、压力、化学物质和各种其他东西。传感器的质量每年都在提高,价格也越来越低。
虽然传感器本身可以极大地改善设备,但设备之间的通信对于许多智能系统来说是必不可少的。例如,虽然使用嵌入在汽车中的各种传感器让你的汽车自动驾驶会很有用,但让路上的所有汽车相互通信会更有用。这将缓解交通流量,并理想地使汽车旅行更加安全。同样,当物联网适用于大规模生产或仓储时,它将需要设备之间良好的通信。各种通信技术的进步,尤其是无线通信技术的进步,释放了物联网技术的潜力。
智能设备经常收集个人数据
在智能设备出现之前,晨跑几乎不会产生任何数据。今天,如果你在智能手机上安装一个健康应用程序,并进行相同的跑步,关于跑步持续时间、你走的路线、你走的步数以及你在跑步过程中各个点的心率的数据都可以收集并存储在你的手机中。同样,三十年前,你家窗户里装个空调也不会产生多少数据。如今,智能家居温度系统每天都会收集大量的温度和湿度数据。一旦收集起来,这些数据不仅可以用来保持室内温度和节能,还可以推断出你通常在家的时间,或者你最有可能调整温度设置的时间。晨跑和家用空调系统的例子表明,智能设备可以创造更多的数据。它们还表明,为一个目的收集的个人数据可以用于许多其他目的。
数字世界正在以指数速度扩张:在 2013 年 4 月的一篇文章中,Ralph Jacobson 在 IBM 的消费品行业博客上发表了一篇文章,估计世界每天创造 25 亿千兆字节的数据。正如计算能力和存储能力的进步促使组织收集的数据量增加一样,改进的传感器和通信技术的出现也是如此。传感器测量事物,这些测量结果被传送到其他设备或服务器,被收集并存储为数据点。
人工智能
人工智能从数据中出现,正如我在 之前的 中所讨论的。
大多数人工智能研究都是由谷歌、亚马逊和百度资助的,因为数据是人工智能的食物,这些公司每天都产生大量数据。微软收购 LinkedIn 不是为了它的*台,而是为了它的数据。
到目前为止,公司已经利用人工智能彻底改变了金融和制造业。保护我们的财务信息有时看起来像是一个失败的事业,因为政府、房东、银行、信用卡公司和信用评级机构都在收集这些信息(正如 Equifax hack 所显示的,存储得很差)。
人们通常认为他们的医疗保健信息比他们的财务信息更敏感。人工智能已被用于医疗保健数据,但由于隐私问题,这些数据往往是分散和碎片化的,人工智能在医疗保健中的影响有限。然而,最终,公司将利用我们的私人健康信息编制越来越全面的数据库。
如果是技术导致了隐私的侵蚀,也许技术可以帮助解决这个问题。
第四部分:区块链
采用特殊协议的区块链允许不同程度的匿名、保密和隐私,可以保护医疗保健、金融和其他个人数据,同时仍允许这些数据用于人工智能应用。例如,用户可以拥有带有个人健康信息的区块链,并且出于特定目的,仅向产品或服务提供商(例如隐形眼镜制造商)简要发布该信息的特定元素(例如视力处方)。
虽然区块链是一个公共账本,存储在多个地方,但它可以实现匿名和信任,正如多个区块链应用程序和已经存在的高隐私加密货币所证明的那样。
目前,第三方收集的个人数据通常存储在具有单点故障的集中式数据库中。这种数据的泄露通常不被注意和报道。一旦我们的数据落入不受信任的一方手中,我们就无法控制如何使用这些数据。
区块链解决方案
正如比特币所显示的,密码学和深思熟虑的经济激励可以创造一种安全的方式来存储和管理信息,包括个人信息。
区块链上的私人数据受密码保护。我曾在其他地方讨论过散列是区块链技术的核心。以下是区块链技术可用于保护个人数据的一些方式,即使这些数据的一部分可供算法处理。
同态加密
一种称为“同态加密”的新加密技术允许在加密数据上进行计算,而无需首先解密数据。这意味着在对数据进行计算时,可以保护数据的隐私和安全。只有拥有适当解密密钥的用户才能访问数据或交易的私人细节。
诸如零知识证明(ZKPs)和 zk-SNARKs 之类的密码技术已经使用同态加密。一种叫做 Zcash 的流行加密协议使用 ZK-SNARKs 加密其数据,并且只将解密密钥提供给授权方,以便他们查看该数据。
状态通道
区块链可以为非区块链解决方案提供模型,或者成为保护隐私的混合解决方案的一部分。
国家频道是区块链互动,可以发生在区块链,但不是在区块链进行。状态通道通过三个过程工作。
1.锁定:使用链上的智能契约锁定事务。
2.相互作用:相互作用发生在链外或侧链上。
3.发布:在交互完成并且状态通道关闭之后,智能合约被解锁,并且在区块链上发布对交易的引用。
国家频道可以允许服务提供商保护用户数据的隐私和安全。交易可以在区块链之外进行,交易的参考散列(不泄露关于交易的机密细节)被保存在区块链上。
结论
我们的私人信息目前集中在互联网和公司数据库中,因此被少数玩家控制。数据创建和收集的指数级增长预计会继续侵蚀我们的隐私。基于区块链或受区块链启发的解决方案可以帮助减少这种隐私侵蚀,同时让我们受益于更快的交易、更好的服务和更强大的人工智能算法。
沙安雷
请关注 Lansaar Research 关于媒体的报道,了解最新的新兴技术和新的商业模式。
** [## 沙恩·雷
来自 Shaan Ray 的最新推文(@ShaanRay)。创造新价值和探索新兴技术| ENTJ | #科学…
twitter.com](https://twitter.com/shaanray)**
博客如何帮助你建立一个数据科学社区
原文:https://towardsdatascience.com/how-blogging-helps-you-build-a-community-in-data-science-923460cfabbf?source=collection_archive---------12-----------------------
天啊。我在三月份开始写博客,这让我大开眼界。
首先,我想说我并没有奇迹般地想出自己写博客的主意。我注意到我的朋友乔纳森·诺利斯在 LinkedIn 上变得活跃起来,所以我给他们发了短信来获取独家新闻。他们让我开个博客,还开玩笑地说“我正在做我的#品牌”。我是那种什么都尝试一次的人,而且我已经拥有了一个域名,有了一个网站建设者(在 Vistaprint 工作时),我还有一个电子邮件营销账户(因为我的工作是为了保持联系)。那么确定,为什么不呢?
如果你想开一个博客。要知道,你不需要有一堆现成的工具供你使用。你可以在 Medium.com 的 LinkedIn 上写文章,在投资一分钱之前,你有很多选择可以尝试..当然,你也可以创建自己的网站。从那以后,我开始使用自托管的 Wordpress。我已经爱上了写博客,Wordpress 让我利用了很多额外的功能。
在我的第一篇文章中,我开始看到数据科学社区的其他成员正在做的所有事情。老实说,如果你在我开始写博客之前问我在数据科学方面谁是我最崇拜的人,我可能只会快速说出那些创造了让我生活更轻松的 R 包的人,或者那些在 Stack Overflow 上发布了许多问题答案的人。但现在我关注 LinkedIn 和 Twitter,看到 Kirk Borne、Lillian Pierson、Carla Gentry、Bernard Marr 和许多其他人(说真的,还有许多其他人)等大数据科学影响者正在向社区添加信息。
我也开始第一手地看到很多人正在学习成为一名数据科学家(耶!).即使是仍在上学或刚刚步入职业生涯的人也在积极参与数据科学社区。(不需要专业人士,直接跳进去就行)。
我关注了我的博客统计(当然,我是一个数据狂),发现我写的得到最大回应的文章要么是:
- 关于如何进入数据科学的文章
- 关于如何执行数据科学领域的编码演示
但是你可能会发现有些不同的东西适合你和你的写作风格。我不只是在 LinkedIn 上发布我的文章。我也在 Twitter 上发帖,Medium,我把它们发到我的邮件列表,我把它们放到 Pinterest 上。当有人第一次提到 Pinterest 用于数据科学文章的想法时,我犹豫了。这很疯狂,但 Pinterest 是我网站流量的最大推荐者。谷歌分析没有骗我。
我在 LinkedIn 消息中与许多人聊天,我有机会与一些热爱数据和围绕数据科学创作内容的优秀人士交谈和(虚拟地)见面。我真诚地建立关系,为社区做贡献,这感觉很棒。如果你是“活跃于 LinkedIn 上的数据科学社区”的新手,请关注塔里·辛格、兰迪·劳、凯特·斯特拉赫尼、法维奥·瓦兹奎、博·沃克、埃里克·韦伯和莎拉·诺拉维。如果你走出去,你会很快找到你的部落。我发现当我参与时,我得到的比我投入的要多得多。
第一次点击你创建的内容的“发布”是令人生畏的,我不是说这将是你做过的最容易的事情。但是你会和有同样热情的人建立真正有价值的关系甚至友谊。如果你开了博客,我期待着阅读你的文章,看你的旅程。
如果你喜欢这篇文章,请访问我在 www.datamovesme.com的博客
你的国家对商业有多友好?Python 中的线性回归
原文:https://towardsdatascience.com/how-business-friendly-is-your-country-linear-regression-in-python-c22ff0fcebdd?source=collection_archive---------0-----------------------
Image courtesy: Wikipedia
动机
世界发展指标(WDI) 是由世界银行编制的广泛而全面的数据汇编。WDI 包括 200 多个国家经济的 1400 个指标,它提供了现有的最新和最准确的全球发展数据。
“营商便利度排名”指标对各国进行比较,其排名范围从 1 到 190(1 =最有利于商业的法规)。我今天的目标是开发一个多元线性回归模型,以了解什么属性使一个国家排名更高。那么,我们开始吧。
数据
r 有一个叫做 WDI 的很棒的软件包,可以让你搜索和下载世界银行的数据系列。
library(WDI)
indicator1 <- WDI(country="all", indicator=c("NY.GDP.PCAP.CD", "IC.REG.COST.PC.ZS", "IC.REG.PROC", "IC.TAX.TOTL.CP.ZS", "IC.TAX.DURS", "IC.BUS.EASE.XQ"),
start=2016, end=2016)colnames(indicator1) <- c("code","country","year", "GDP_per_capita", "Cost_start_Bus", "Days_reg_bus", "Bus_tax_rate", "Hours_do_tax", "Ease_Bus")write.csv(indicator1, file = "indicator1.csv",row.names=FALSE)
根据常识,我选择了以下变量作为预测值(独立变量):
- 人均国内生产总值
- 创业程序成本占人均国民总收入的百分比
- 注册企业的天数
- 营业税税率
- 纳税时间
预测变量:
- 做生意容易(1 =最有利于商业的法规)
我选择 2016 年,因为它是最*的一年,并且缺少的值最少。在选择了所有我需要的变量后,我将它保存为一个 csv 文件。
多重线性回归假设
- 线性
- 无多重共线性
- 同方差性
- 多元正态性
- 误差的独立性
我们将在分析过程中检查上述假设。现在我们来看看 Python。
数据预处理
%matplotlib inline
import numpy as np
import pandas as pd
np.random.seed(45)
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12indicator = pd.read_csv('indicator1.csv')
indicator.head()
很好,正是我们需要的。
现在,删除“代码”列和“年份”列。
indicator.drop(indicator.columns[[0, 2]], axis=1, inplace=True)
indicator.info()
我们正在处理 186 个观察值(国家)和 7 列(变量或属性或特征)。
我现在使用 describe()方法来显示数字变量的汇总统计信息。
indicator.describe()
计数、*均值、最小值和最大值行是不言自明的。std 显示标准偏差。25%、50%和 75%的行显示了相应的百分位数。
为了了解我们正在处理的数据类型,我们为每个数字变量绘制了一个直方图。
indicator.hist(bins=50, figsize=(20, 15))
plt.savefig('numeric_attributes.png')
plt.show()
Figure 1
两个直方图向右倾斜,因为它们向中间值的右侧延伸得比向左侧延伸得更远。然而,我会考虑他们所有的回归分析。
我们检查属性之间的相关性。
from pandas.plotting import scatter_matrixattributes = ["GDP_per_capita", "Hours_do_tax", "Days_reg_bus", "Cost_start_Bus", "Bus_tax_rate", "Ease_Bus"]
scatter_matrix(indicator[attributes], figsize=(12, 8))
plt.savefig("scatter_matrix_plot.png")
plt.show()
Figure 2
看来“人均 GDP”和“营商难易程度排名”是负相关的。其他自变量均与“营商难易程度排名”呈正相关。让我们找出最有希望预测“做生意容易程度排名”的变量。
from sklearn.linear_model import LinearRegression
X = indicator.drop(['country', 'Ease_Bus'], axis=1)
regressor = LinearRegression()
regressor.fit(X, indicator.Ease_Bus)
*print('Estimated intercept coefficient:', regressor.intercept_)*
预计截距系数:59.9441729113
*print('Number of coefficients:', len(regressor.coef_))*
系数个数:5
*pd.DataFrame(list(zip(X.columns, regressor.coef_)), columns = ['features', 'est_coef'])*
预测“做生意容易程度”的最有希望的变量是“注册企业的天数”变量,所以让我们放大它们的相关散点图。
*indicator.plot(kind="scatter", x="Days_reg_bus", y="Ease_Bus",
alpha=0.8)
plt.savefig('scatter_plot.png')*
Figure 3
相关性确实很强;你可以清楚地看到上升的趋势,而且这些点不是太分散。
将数据分为训练集和测试集。
*from sklearn.cross_validation import train_test_split
y = indicator.Ease_BusX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)*
建立线性回归模型
*from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)*
linear regression(copy _ X = True,fit_intercept=True,n_jobs=1,normalize=False)
*y_pred = regressor.predict(X_test)regressor.score(X_test, y_test)*
0.60703279859102988
因此,在我们的模型中,Y 的 60.7%的可变性可以用 x 来解释。
计算均方根误差(RMSE)。
*from sklearn.metrics import mean_squared_error
regressor_mse = mean_squared_error(y_pred, y_test)import math
math.sqrt(regressor_mse)*
33.582374172286
因此,在我们的测试集上进行预测时,我们离“做生意容易程度”的实际分数*均相差 33.59 分。
“做生意容易程度”的中值是 95,因此 33.59 的典型预测误差不是很令人满意。这是一个模型欠拟合训练数据的示例。当这种情况发生时,可能意味着这些特征没有提供足够的信息来做出正确的预测,或者模型不够强大。修复欠拟合的主要方法是从词库指标中选择更多的特征(例如,“获得信贷”、“登记财产”等)。
剩余剧情
最后,我们绘制残差图来检查线性回归假设。残差图是检验同质性的好方法。分布中不应该有明确的模式;特别是,不应该有锥形图案。
*plt.scatter(regressor.predict(X_train), regressor.predict(X_train)-y_train, c='indianred', s=40)
plt.scatter(regressor.predict(X_test), regressor.predict(X_test)-y_test, c='b', s=40)
plt.hlines(y=0, xmin=0, xmax=200)
plt.title('Residual plot using training(red) and test(blue) data')
plt.ylabel('Residual')
plt.savefig('residual_plot.png')*
Figure 4
我们的剩余地块看起来不错。
结论
- 在这个练习中,我下载并研究了一个世界银行业务相关指标数据集。我的目标是通过选定的特征来预测一个国家的“经商便利度”排名。
- 我使用 Sklearn 对整个数据集进行线性回归拟合,并计算系数。
- 我将数据分为训练集和测试集,并计算了测试集的 R *方和 RMSE。
- 我绘制了训练集和测试集的残差图。
- 如前所述,为了获得更好的 RMSE 分数,我可以尝试添加更多的功能,或者尝试另一种模型,如随机森林或决策树。
- 由于缺乏信息,朝鲜和索马里没有包括在本分析中。
- 叙利亚最新的人均 GDP 是 2007 年的数据。因此,关于叙利亚的信息不是最新的。
创建这篇文章的源代码可以在这里找到。我将很高兴收到关于上述任何反馈或问题。
人工智能如何成为你的营养师并预防糖尿病
原文:https://towardsdatascience.com/how-can-ai-be-your-dietitian-and-prevent-diabetes-dd87196bdb7c?source=collection_archive---------2-----------------------
以下故事基于这篇文章:通过预测血糖反应进行个性化营养发表在《细胞》上。
带回家的信息
- 餐后高血糖(餐后高血糖)是二型糖尿病的主要危险因素。
- 餐后葡萄糖反应因人而异。
- 具有微生物组和个人数据的机器学习算法可以帮助区分改善或恶化餐后葡萄糖反应的食物。
- 该算法可以提供有效改善餐后葡萄糖反应的个人定制饮食建议。
背景
糖尿病是影响全球 8.5%成年人口的主要健康负担,其并发症包括中风、心脏病发作、肾衰竭、视力丧失等。(世卫组织,2016)
餐后高血糖(餐后高血糖)是发生二型糖尿病和前驱糖尿病的主要危险因素。而饮食摄入是餐后血糖的核心决定因素。(加尔维茨,2009)
问题:差的葡萄糖反应预测导致差的控制
我们知道饮食摄入是餐后葡萄糖反应(PPGR)最重要的决定因素,但我们没有现有的方法可以准确预测 PPGR。
碳水化合物计数是目前的做法,但它不能提供良好的预测,因为不同的人对同一种食物的 PPGR 差异很大。例如,PPGR 的一些地区涨幅较大,而另一些地区涨幅较小。
Variability of PPGR of different patients gathered from the study, doi: 10.1016/j.cell.2015.11.001
假设我的血糖目标是餐后血糖控制在 7.8mmol/L 以下(美国糖尿病协会推荐)。
如果我能在决定自助餐选择什么食物之前有一个准确的预测值,那就简单多了。
问题的根源:没有考虑到个体差异
我们可以把计算 PPGR 看作一个数学函数。我们选择食物作为输入 x,我们的生理过程作为函数 f:,我们的 PPGR 将是输出 f(x)。
input: food. Function: physiological process. output: PPGR
我们生理功能的个体差异解释了为什么不同的患者会有不同的 PPGR,给定相同的输入 x(相同的膳食)。这是因为每个个体的功能部分是不同的。
以前的方法是基于广义总体,因此忽略了个体差异。
解决方案:学会用个人数据建立个人模型
目标是为 PPGR 建立一个准确的预测模型,我们可以通过找到个人的函数公式来实现。
生物过程非常复杂,许多因素都可能导致 PPGR,包括饮食习惯、体育锻炼、药物摄入、微生物群等..我们将期待该函数是一个多元线性回归模型,它将有许多不同的输入,不同的输入不同的权重。
目标是:
- 列出对 PPGR 有贡献的因素作为输入(X1,X2,…,Xn)
- 找出不同输入(β1,β2,…,βn)的单独权重
用机器学习的方法解决它
我们将通过机器学习的方式来解决这个问题,我们收集了大量的数据,不同的个人和微生物组数据作为特征和 PPGR 作为标签。我们将数据交给计算机算法,我们将能够得到不同个体的 PPGR 的预测模型。
收集数据
患者人口统计:
该研究针对以色列成年非糖尿病人群。
该研究招募了 800 名年龄在 18-70 岁之间、之前未被诊断为二型糖尿病的人。
该算法来自于从上述 800 个人中收集的数据。
该算法随后被另外 100 名具有相似人口统计学特征的个体验证。
收集输入:
生活方式信息
一个移动网站已经被开发出来,供患者记录他们的饮食、锻炼、睡眠和其他个人信息。
微生物组
患者使用omni gene GUT工具包收集他们的粪便样本。用 MagAttract PowerSoil DNA 试剂盒提取 DNA(从粪便中自动分离 DNA)。用 Illumina MiSeq 对微生物组进行测序。
衡量产出:PPGR
连续血糖监测器(CGM)用于收集 800 名参与患者的血糖,连续 7 天,每 5 分钟一次。
算法
使用梯度推进回归来生成模型,作为 PGGR 和我们数据集中不同因素之间非线性关系的方法。
梯度推进回归使用决策树对数据进行分类。
决策树模型不断尝试用是/否问题对数据进行分类,直到我们得出最终答案。
梯度推进回归基于先前树的残差来训练决策树。例如,黑点代表实际数据,蓝线代表我们模型的预测。我们可以观察到,每个树都建立在先前树的分类之上,并且与实际数据更加匹配。
使用梯度推进回归,该研究推断了数千棵决策树。这些树的特征是从代表膳食含量(卡路里、营养含量)、血液参数(HbA1c)、日常活动和微生物组特征的 137 个特征中选出的。
模型:在预测中超越黄金标准
一种定制算法的预测结果考虑了个体差异的 137 个特征,并与当前“碳水化合物计数”的黄金标准进行了比较。
我们可以通过使用决定系数来比较模型与实际数据的拟合程度。
如果 R 2 =1,表示模型可以完全预测结果,如果 R 2=0,表示模型完全不能预测结果。
基于个体的模型比目前“碳水化合物计数”的黄金标准大大提高了预测能力。
给出定制饮食建议的算法
另外招募了 26 个人,旨在通过给出定制的饮食建议来研究该算法在 PPGR 改善中的有效性。
所有 26 名患者都经历了一个“分析周”,收集个人数据,供算法生成预测模型。
12 名患者被分为算法组,另外 14 名被分为营养师组。
根据个人的 PPGR 模型的预测,所有的参与者都经历了一个“好饮食”周和一个“坏饮食”周。无论在“好”或“坏”饮食周,所有建议的膳食都有相同的卡路里含量,但成分不同。
Red represents PPGR in “bad diet” week, green represents PPGR in “good diet” week. Both the expert’s and algorithm’s dietary suggestion shows significant difference in PPGR response.
Individual data shows fewer glucose spikes and fewer fluctuations
注意:饮食建议是高度个性化的
对建议膳食的分析表明,不存在普遍的“好”或“坏”饮食。一些能有效控制一个病人 PPGR 的饮食对另一个病人来说可能是“坏”的饮食。
这就是为什么拥有一个适合您自己的 PPRG 的个性化模型对于管理您的血糖水*非常重要。
结论
这是“个性化医学”的一个例子,现代医学尚未了解个体差异,但这些差异确实很重要。
故事中的例子是关于 PPRG 的,但该原则也适用于医疗保健的其他方面,例如癌症治疗。
随着个人数据收集变得越来越可用,例如更便宜的基因组学测试成本,我们开始拥有更精确和个性化的医疗保健。
分析和人工智能如何让营销人员预测未来?
原文:https://towardsdatascience.com/how-can-analytics-and-ai-allow-marketers-to-predict-the-future-2e7b46d6a48c?source=collection_archive---------15-----------------------
永远不要做预测,尤其是对未来。
我们并没有预测未来的良好记录,所以这似乎是明智的建议。
从 IBM 总裁 Thomas Watson 在 20 世纪 40 年代早期宣称将会有“大约 5 台计算机”的世界市场(诚然,这个星球上可能只容得下 5 台早期的 IBM 机器),到 Y2K 的喧嚣,人们无法抗拒浮夸的、常常是极其不准确的预测。
提前知道未来的回报太大了,以至于无法抗拒尝试一下,但我们相当依赖人类的直觉来形成我们的预测。因此,这些奖励经常无人认领。
然而,这是一个快速发展的行业,人工智能(AI)的进步可能很快会让我们将未来的预测建立在可靠的统计模型上,而不是我们熟悉但有缺陷的直觉上。
在这个由三部分组成的系列中,我们将探索人工智能在开发准确、可访问的预测分析以提高业务绩效方面的潜在作用。
本文将首先分析预测分析行业的现状,以及一些帮助企业充分利用现有技术和数据的技巧。
我们所说的“预测分析”是什么意思?
预测分析是一种数据挖掘形式,它采用机器学习和统计建模,根据历史数据预测未来的事态。
我们周围已经有了预测分析的例子。如果您的银行通知您,您的信用卡有潜在的可疑活动,很有可能已经使用统计模型根据您过去的交易来预测您未来的行为。严重偏离这种模式被标记为可疑。
作为理解该领域兴趣水*的一个简单代表,我们可以从 Google Trends 中看到,主题“预测分析”的搜索量在过去 5 年中显著上升:
我们可以看看这条线,预测它会继续增长。但这实际上只是基于最*的历史趋势,或者我们在业内听到了很多关于这个话题的议论。我们需要进行更多的调查,才能真正确定这条线的下一步走向。
这么多企业对这个话题感兴趣也是有道理的。据预测到 2020 年,每年将有超过 760 亿美元花费在大数据技术上。获得投资回报的最佳方式是利用所有这些数据来预测未来的需求趋势。
正如我们所看到的,这对于人们来说是一项很难掌握的任务。如果我们要开始做出正确的预测,我们需要一点帮助。
因此,在 Gartner 的“分析优势模型”中,预测分析被视为描述性分析和诊断性分析的进化飞跃。
也就是说,对精确预测分析的渴望并不新鲜,使用分析来模拟未来消费者行为的尝试也不新鲜。例如,许多分析专业人员每天都在从事这一领域的工作,以计算典型客户的终身价值(LTV)等数字。大量不同的数据集的可用性有助于大大提高这些计算的准确性。
相对较新的是人工智能的应用,以填补我们技能组合中的差距,并扩展预测分析的可能性。
这种结合产生了更复杂的统计模型,这些模型可以发现过去消费者行为的模式,并利用这些模式来规划未来可能的行动。
但是为什么人工智能在实现我们自己发现几乎不可能的事情上如此有效呢?
习惯的生物:预测分析在现实世界中是如何应用的?
人们的可预测性极大地帮助了预测分析。
尽管我们愿意相信自己是独一无二的、有自由意志的,但人工智能可以根据我们过去的行为和类似人的行为,相当准确地预测我们将继续做什么。
麻省理工学院媒体实验室的科学家在 2007 年进行的一项研究发现“大多数人每天所做的事情中有 90%都遵循着如此完整的常规,以至于他们的行为可以用几个数学公式来预测。”
许多营销活动都基于这一假设,但我们现在可以更准确、更负责地应用这一原则。
人工智能在这一领域发挥作用的地方在于它能够识别人类根本看不到的更广泛的模式。我们根据我们认为安全的假设选择调查领域,但 AI 可以识别其他变量,当这些变量被改变时,会相互影响。
这种方法(在很大程度上是通过使用回归分析形成的)恰当地反映了消费者所处的不断变化的世界。
例如,根据我的位置、年龄、过去的购买和性别,如果我刚刚在篮子里放了面包,我有多大可能会买牛奶?网上超市可以利用这类信息,根据我预测的购买倾向,自动向我推荐产品。
此外,金融服务提供商可以利用我和类似人的在线互动产生的数千个数据点来决定何时向我提供哪张信用卡。一家时装零售商可以根据我刚买的牛仔裤,使用我的数字档案来决定我下一次购买哪双鞋。
这有助于企业提高转化率,但其影响远不止于此。预测分析允许公司根据消费者预期和竞争对手基准制定定价策略。它允许零售商预测需求,从而确保每种产品都有合适的库存水*。
预测分析甚至可以通过发现客户偏好的变化,为新的产品线提供建议。这标志着分析从数据专家的追溯工具转变为塑造业务战略、改善客户关系和创造运营效率的重要预测功能。
事实上,最*的一份 Forrester 报告指出,“预测型营销人员报告收入增长率高于行业*均水*的可能性是 2.9 倍。”
这场革命的证据已经在我们周围了。例如,每次我们在谷歌、脸书或亚马逊输入搜索查询,我们都在向机器输入数据。机器因数据而繁荣,随着接收这些反馈信号,变得越来越智能。
这种现象给营销人员带来了很多好处。谷歌使用这项技术已经有一段时间了,通过其在分析领域的 Smart Goals 产品,以及去年底推出的会话质量评分功能。这些是由机器学习技术推动的预测分析的例子。
有一种观点认为预测是智能的基石,所以这对人工智能来说是一个壮举。
然而,这仅仅是开始。目前预测分析的大部分工作都集中在提出建议或推荐上,但基于人工智能的预测有机会成为营销战略的支点。
在这方面,最*的发展提供了很多乐观(或者有些人可能会说是恐惧)的理由。谷歌的 DeepMind 团队刚刚创造了一个人工智能,它能够规划未来,并在行动前考虑不同的结果。
这在预测分析的范围内是相关的,因为想象力是创建预测的一个基本方面。这种能力只会巩固人工智能作为成功预测分析活动的重要组成部分的作用。
企业如何整合预测分析?
为了利用人工智能和预测分析的潜力,组织需要落实四个要素。
1.正确的问题
最好的预测分析项目始于一个要测试的合理假设。尽管我们应该为机器学习算法提供空间,让它们能够在数据点之间建立自己的客观关联,但我们需要着手解决一个我们希望克服的商业挑战。这有助于提供一些努力的形状。
2.正确的数据
过去十年数据科学的进步意味着我们可以更准确地从大量非结构化数据中获得洞察力,但我们仍然需要完整的数据集来得出令人信服的结论。
因此,在定义了您希望用预测分析来回答的问题之后,下一步就是弄清楚哪些数据可供您使用,以及这些数据是否足以令人信服地回答您的问题。
3.正确的技术
正如预计到 2020 年价值 760 亿美元所暗示的那样,大数据技术是一个蓬勃发展的行业。数据产生的速度如此之快,以至于我们需要不断改进的技术能力来捕捉、存储和理解数据。
许多领先的分析软件包已经推出了预测分析工具,但它们的方法各不相同。要决定哪种解决方案最适合您的企业,现在比以往任何时候都更需要一个团队,他们对每种解决方案都有经验,能够确定最合适的方案。
4.合适的人
本质上,这将我们带回到第一步。没有合适的人,很难提出合适的问题。也很难知道可能需要什么数据来回答这些问题,或者从最新技术中获得最佳效果。对于所有关于人工智能取代人的讨论,它只是真正加强了对让正确的人充分利用它创造的新机会的关注。
这项技术的应用已经很广泛了,但我们还只是刚刚触及皮毛。在本系列的下一篇文章中,我们将了解目前使用预测分析来提高业务绩效的五家企业。
最初发表于【www.clickz.com】。
如何释放大数据在风险管理方面的潜力?
原文:https://towardsdatascience.com/how-can-big-datas-potential-be-unleashed-for-risk-management-e7c62bcd02b7?source=collection_archive---------3-----------------------
一个相互关联的世界意味着更大的增长潜力,但也带来了更多的系统性风险,因为各个组成部分都在一起移动,任何变化都会传播。有时,这放大了协同效应。大数据分析的作用是通过揭示可能预示市场甚至个人账户危机或突变的模式,为经理们提供预见和对冲这些风险的必要信息。到目前为止,唯一的应用是在金融领域——以投资组合管理为目标——但最*在其他活动领域的进展证明,这种方法还有更大的潜力可挖。
大数据的潜力
如果您准备好加入大数据运动,并成为这个到 2020 年将达到500 亿美元的行业的一部分,那么很自然会问这将给您的组织带来什么?大数据是一个术语,指各种信息源的巨大集合,其中大多数是非结构化的,有时是作为其他活动的副产品生成的。例如,与卡支付历史相关的数据,或者媒体上的新闻和谣言,甚至社交媒体聊天,都可以用来提取关于风险管理的知识。
欺诈检测
大数据是用来为专门从事模式检测的机器学习算法提供信息的原材料。这在可能存在欺诈的情况下非常有用,因为“照常营业”的变化可能是恶意活动的信号。分析中包含的数据可能各不相同,如地理位置、用于连接账户的设备类型或转账金额。参与交易的各方的身份也是一个潜在的警告信号。主要优势是由于实时处理,这种类型的欺诈检测可以触发警告并停止操作,直到进一步授权,从而最大限度地降低风险。
增强场景分析
在大数据出现之前,情景分析和模拟很难创建,并且结果不准确。现在,使用大量信息样本的能力提高了准确性,加快了决策过程。现在的挑战是在模拟的数量和容量与速度限制之间达到完美的*衡。这项工作最有用的工具之一是蒙特卡洛模拟,由分布式文件系统上的并行计算提供动力。结果给出了给定时间范围内投资组合的风险价值。
开发新的商业模式
到目前为止,风险要么通过对公司的审计和尽职调查来计算,要么通过评估个人的 FICO 或 Vantage 分数来计算。然而,这些代理并不能说明全部情况,尤其是对新进入者而言。一家拥有百万美元创意的初创公司没有资格获得融资,一名常青藤联盟(Ivy League)的应届毕业生即使有六位数的收入,也无法在大学毕业后马上找到像样的住房解决方案。
同样,大数据在这里重新定义了风险衡量标准,并创造了机会和新的业务模式。一些公司现在使用每个申请的 10K 数据点来衡量信用度,他们考虑的不仅仅是信用历史。
使用区块链预先验证申请人
风险衡量不是用几十年前的标准来衡量,而是可以根据情况进行调整。引入基于大数据的区块链技术可以提供一种方法来追踪特定个人的历史,直到他们在网络中的进入点。这种新的交易方式会使当前的风险衡量变得多余。每次操作都可以自动计算风险分值,并将其附加到每个账户上。这可能意味着信贷或智能合同的申请人甚至不需要披露他们的身份,他们可以通过网络预先验证。
常见障碍
由于金融和银行业是 T4 监管最严格的行业之一,即使承诺削减成本和增加利润,引入创新模式也是困难的。旨在利用大数据提供的洞察力的公司不仅需要得到董事会的批准,还需要得到客户的批准。否则,他们可能会被指控未经同意处理个人数据。此外,人们可以期待更多的监管和进一步加强数据的数字处理。
目前已知的风险只是随着技术进步而出现的一小部分危险。通过大数据进行的分析应该能够识别网络攻击,就像它检测欺诈一样,并建立实时机制来预防它。
由于机器学习在很大程度上是一个黑盒,因此纠正有偏差的模型或其假设比纠正确定性模型更困难,因此正确的测试和校准应该是模型定义的一个组成部分。
上升的预期
我们越来越习惯于技术,以至于我们将很难等待银行和信贷机构使用他们几十年前的程序。为了避免客户失望并提高他们的利润率,他们最终将被迫采用大数据技术。金融机构可以从零售连锁店和艺人那里获得灵感,他们已经通过这些工具完善了与客户的关系。
好消息是,有大量可能的应用,因为直到现在,关于使用大数据模型进行风险管理的讨论更多地是在学术层面,而不是在实践中。大型、单一的机构需要跟上更小、更灵活的公司和点对点模式。
数据如何刺激创新?
原文:https://towardsdatascience.com/how-can-data-spur-innovation-6f6cbdab1bfa?source=collection_archive---------2-----------------------
Photo credit : The Vegan Society
如果管理是为了降低风险、不确定性和模糊性;数据科学就是将数据转化为集体行动。今年的皇后国际创新挑战赛为研究生提供了一个利用他们的分析技能和创造力解决食品安全问题的机会——这是一个普遍的、永恒的挑战,不会消失。竞赛面向在本学年注册学位或证书研究生课程的所有学生。数据科学和创新之间的关系是什么,为什么参与这样的挑战,为什么是食品安全,以及你的努力会有什么回报?
大学挑战和创新之间有什么联系?斯蒂夫·约翰森对创新历史的十年研究使他得出结论,某些“空间”的固有特征,如 18 世纪的英国咖啡馆、19 世纪的 T4 赌场和今天的万维网,有利于创新思想、产品和实践的诞生。这种空间的一个特点是,它们将注意力集中在特定的问题上,而不是久经考验的“解决方案”。第二个特征是,这种空间允许参与者以新的眼光看待数据,促进了现在和可预见的未来的无限结合。最后,这些空间鼓励小预感的对抗,这种对抗随着时间的推移发展成在新的环境中应用想法。与他研究的例子类似,创新挑战提供了一个将数据转化为创新的绝佳机会。
在这个比赛中你能学到什么关于数据科学的知识?数据科学是衡量要解决的问题,鉴定手头的数据,应用适当的方法,并将数据转化为行动。加拿大丰业银行客户分析中心副主任 Dean McKeown 指出,创新挑战为每个参与者提供了一个独特的*台,与来自世界各地的高度多元化的学生、从业者和专家团队合作。您将与 Queen ' s Master of Management Analytics 的员工一起研究来自各种公共和私人数据源的真实数据。您将被要求开发一个数据科学模型,以理解数据,提供可操作的见解,并以激励行动的方式传达您的结果。数据科学永远不会在教室里掌握,而是通过在处理现实世界挑战时练习分析方法来掌握。
为什么关注粮食安全?根据联合国世界粮食安全委员会的定义,粮食安全是指所有人在物质、社会和经济上都能获得积极健康生活所需的营养的状况。麦克欧文教授提醒我们,在可预见的未来,对自然资源的管理充满了风险、不确定性和模糊性。全球变暖、大规模移民、商品价格波动和政治动荡严重影响着粮食安全。公共政策以及企业预测需要适应当地和全球条件,包括处理土地使用模式、用水、商品贸易和食品加工的战略。
你努力的回报是什么?女王国际创新挑战赛为您提供了使用最先进的分析*台(如 SAS Institute 的 VIYA)解决重要问题的可能性。这是一个与来自其他学校和文化的学生联系的理想场合,面对你的经历和见解,并提出可以对社会产生真正影响的做法。该活动提供了一个向经验丰富的从业者学习和向潜在雇主展示你的技能的绝佳机会。前五名团队将被邀请到多伦多展示他们的作品,获奖者将获得 2 000 至 20 000 加元的奖金。带上你的思考帽,今天就报名吧——因为正如斯蒂夫·约翰森会补充的那样——“未来属于互联的头脑”。
Lee Schlenker 是 Pau 商学院的教授,也是 http://baieurope.com T2 商业分析研究所的负责人。他的 LinkedIn 个人资料可以在 www.linkedin.com/in/leeschlenker.[查看](http://www.linkedin.com/in/leeschlenker.)你可以在 https://twitter.com/DSign4Analytics[通过 Twitter 关注我们](https://twitter.com/DSign4Analytics)
更多关于女王 2017 年国际创新挑战赛的信息可以在https://www.facebook.com/queenschallenge找到。
研究生可以在https://Smith . queensu . ca/centres/scotiabank/competition/index . PHP报名参赛
约翰逊,S. (2010),好主意从何而来:创新的自然史,河源图书公司
【ii】世界粮食安全委员会,网站
怎样才能写出更好的 AI 文章?
原文:https://towardsdatascience.com/how-can-i-write-better-articles-on-ai-6b37e1baad5a?source=collection_archive---------3-----------------------
我很清楚,我在媒体上的写作让我获得了有趣的联系,这些联系可以转化为我业务发展渠道中的线索。对我在 medium.com 上发表的 35 篇文章的分析告诉我,你们——我的读者——喜欢阅读更多关于人工智能的业务,以及我作为顾问的经历。你似乎不太关心技术建议或学习资源。
数据告诉我,像“如何雇用一名人工智能顾问”和“如何为一个人工智能项目定价”这样的文章,比关于如何提取电子邮件有效性的演示或关于机器视觉的演示有趣 10 倍。
支点:少一些科学,多一些远见
好吧,与其和数据斗争,我要听听你们的点击和掌声,把我的文章集中在我收集的经验上。这将需要一些额外的认知努力,但我会在不违反任何保密协议的情况下做到这一点,基本上是通过用说明性的例子来讲述故事,而不是使用声明性的“我为 y 公司做了 X,”事实上,我在这篇文章中承诺不会成为一个名字滴漏者。我将从我俯瞰人工智能工程和商业化漩涡的树枝上,给你我对正在发生的事情的诚实看法。所以不要再说“这是做 x 的代码。”而且,从严格的自私的角度来看,为这些文章编写代码并不简单。所以当我写观点和经历的时候,我花费的时间更少,吸引的眼球也更多。
在开始这一系列文章时,我问自己,如何在不违反 NDAs 的情况下,表达我公司做的事情。这些是回归、分类、标准化、云、物联网、教育等等。相反,我转而谈论经验和观点。正如我的商业伙伴马特指出的,我的努力需要赚钱、省钱或者节省工作和时间。这个支点将节省工作和时间(我的工作和时间),它将赚钱(通过介绍你,我的观众,给我)。所以,亲爱的读者,如果我误解了你对人工智能世界中商业故事的渴望,而你真正想要的是技术细节…告诉我。发表评论。
经验和观点:付费数据清理
现在,关于我要写的许多经历中的第一个……一个客户最*要求我在他们签订合同之前帮助他们组织他们的数据。这种态度忽略了一点,即数据科学的核心是数据,而不是算法。下面这张漂亮的图片让你感受到清理数据是一项多么艰巨的工作。这通常比项目的其余部分要大得多。
From Mohamadreza Mohtat in this post.
现在,一旦组织好数据,就需要一些时间来为数据找到合适的解决方案,并将解决方案与体系结构挂钩。通常我们的客户端会从某种数据库(例如 postgres)进入 tensors,然后从 tensors 返回某种可调用的 JSON 服务,发出响应。
总结一下,当我做人工智能咨询时,我不会让数据清理逃避工作声明。这是工作。对客户来说,项目的其余部分可能看起来很难,但对顾问来说这并不是最难的部分。困难的部分是整理你的数据。剩下的就是魔法了。
如果你喜欢这篇文章,那么请试试屏幕右下角的新鼓掌工具。就像我之前说的,我也很高兴在评论中听到你的反馈。
编码快乐!
——丹尼尔
丹尼尔@ lsci . ioLemaySolutions.com
如何用球员名字预测世界杯,准确率 80%?
原文:https://towardsdatascience.com/how-can-use-player-name-to-predict-world-cup-with-80-accuracy-262d076544c4?source=collection_archive---------13-----------------------
在这个内核中,我将演示如何通过 Tensorflow 使用球员姓名来预测历史世界杯结果,准确率达到 80%。后来,我试图预测 2018 年世界杯的结果,似乎有一些有趣的发现
阶段
- 数据摄取:首先,我从给定的数据集中获得 3 个数据框架,并从网站上手工构建 2018 年世界杯数据
- 预处理:对建筑物特征嵌入输入所需的特征进行预处理
- 转换:为模型输入转换处理过的数据
- 模型构建:构建字符嵌入模型
- 评估:尝试预测 2018 年世界杯结果
特征工程
为什么球员名字和教练名字选择为特色?这是因为我们发现这些名字可能为我们做预测提供关键信号(来自测试集结果)。
标记
为了建立一个训练数据,让冠军的标号为 1,亚军的标号为 2,季军的标号为 3,依次为 4。团队的其他成员为 0。从数据来看,我们有大约 20 个世界杯记录。
数据分布:标签 1、2、3 和 4 分别有 20 条记录,大约有 300 条负数据。
模型结构
我们使用字符嵌入来建模预测模型。如果你不熟悉,你可以看看这篇文章。通过使用定义的函数,我们可以简单地用几行代码构建模型
char_cnn = CharCNN(max_len_of_sentence=256, max_num_of_setnence=1)
char_cnn.preporcess(labels=training_df['label'].unique())
然后处理原始数据
x_train, y_train = char_cnn.process(
df=train_df, x_col='name', y_col='label')
x_test, y_test = char_cnn.process(
df=test_df, x_col='name', y_col='label')
试着预测结果
char_cnn.build_model()
char_cnn.train(x_train, y_train, x_test, y_test, batch_size=32, epochs=10)
输出
Train on 341 samples, validate on 86 samples
Epoch 1/10
341/341 [==============================] - 13s 40ms/step - loss: 0.9741 - acc: 0.7801 - val_loss: 1.0188 - val_acc: 0.7674
Epoch 2/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7981 - acc: 0.8240 - val_loss: 1.0271 - val_acc: 0.7674
Epoch 3/10
341/341 [==============================] - 11s 31ms/step - loss: 0.7864 - acc: 0.8240 - val_loss: 1.0512 - val_acc: 0.7674
Epoch 4/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7660 - acc: 0.8240 - val_loss: 0.9753 - val_acc: 0.7674
Epoch 5/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7506 - acc: 0.8240 - val_loss: 1.0135 - val_acc: 0.7674
Epoch 6/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7426 - acc: 0.8240 - val_loss: 1.0135 - val_acc: 0.7674
Epoch 7/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7824 - acc: 0.8240 - val_loss: 1.0176 - val_acc: 0.7674
Epoch 8/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7763 - acc: 0.8240 - val_loss: 1.0137 - val_acc: 0.7674
Epoch 9/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7805 - acc: 0.8240 - val_loss: 0.9793 - val_acc: 0.7674
Epoch 10/10
341/341 [==============================] - 10s 31ms/step - loss: 0.7624 - acc: 0.8240 - val_loss: 1.0138 - val_acc: 0.7674
估价
来到这篇文章的结尾,准确率好像很不错,大概是 80%左右。让我们看看 2018 年世界杯的预测结果。
在我们的编码中,4 表示团队失败。说到这一点,你可能会认为这有什么不对吗?请看看结论部分。
输出
array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4])
结论
完整源代码请去 kaggle 看看。
谢谢你看了这个毫无意义的模型。实际上,我想展示的是特性的重要性,而不是模型架构。
- 当人们谈论“我们正在使用机器学习”、“应用深度神经网络”时,你可能更好地询问特征和数据,而不是询问模型架构。当然,模型架构很重要,但是特性和数据也很重要。请记住垃圾进,垃圾出。
- 当人们谈论拥有 80%甚至 90%的准确率时。你最好检查一下是实验的结果还是实际的结果。许多模型在实验阶段过度拟合,尽管数据科学家认为他们已经很好地防止了这种情况。
- 对于测量,更好地理解其他指标,而不仅仅是准确度。比如我们在分类上也有精准和召回。我们有机器翻译的 BELU。
- 作为一名数据科学家,与其谈论使用 CNN,LSTM bla bla bla,花更多的时间去理解你的特性和数据
- 如果您没有足够大的数据(在本例中,少于 500 条记录)。不要相信你可以从零开始建立一个惊人的模型。
关于我
我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和*台相关领域的最新发展。
中:http://medium.com/@makcedward/
领英:https://www.linkedin.com/in/edwardma1026
github:https://github.com/makcedward
https://www.kaggle.com/makcedward
VLSI 设计的模式检测有多复杂?
原文:https://towardsdatascience.com/how-complex-pattern-detection-can-be-for-vlsi-designs-1ca729260899?source=collection_archive---------13-----------------------
VLSI pattern detection can be exciting and scary at the same time !
早期,电子设计自动化行业吸引我的主要原因之一是过多的 NP 完全问题及其天文复杂性。在机器学习的时代,这仍然是正确的,全世界都震惊于训练一个神经 50 层 CNN 所需的天数。就性能而言,EDA 问题的复杂性让图像识别等现实生活中的解决方案相形见绌。请允许我用神经网络展示一个简单 VLSI 单元模式检测的简单问题的艰巨性。
为了便于讨论,我们假设在电路级使用一个简单的 VLSI 单元,如下图所示。
transistor schematic of simple AND gate
上图显示了一个简单与门的晶体管原理图。这个电路的连接性被转化为适合输入深度学习网络的数字矩阵的形式。该矩阵的第一列显示了分别表示为任意整数 20 和 10 的 PMOS 和 NMOS 晶体管。矩阵中其余 3 列是 MOS 器件的漏极、栅极和源极节点,编号如下图所示。
每个器件有三个电节点。受 M. Ohlrich 的工作[1]的启发,我们分别为特殊节点地和电源保留节点号 1 和 2。其余的节点可以在不改变电网络的情况下任意标记。
让我们假设 n 是节点的数量, d 是电气网络中设备的数量。电网络可以标记的排列数由下面的等式给出:
(n-2)!
其中感叹号代表一个数的阶乘。上面的表达式减去了 2,因为 2 个特殊的节点地/电源是不可置换的。现在,节点已被标记,它们与符合 SPICE 格式[2]的表 1 所示的器件放在一起。排列设备可以在矩阵中排序,矩阵由下式给出:
维!
给定任何器件(矩阵行)的漏极和源极端子可以在不改变电气网络的情况下互换,该操作的组合总数给定为:
σd!/我!。(d-i)!
从 1 到 n-2。一个电网络的排列总数可以表示为矩阵,它是上述三个表达式的简单乘积。这在下面给出。
d!。(n-2)!。(σd!/我!。(d-i)!)
让我们为上面的例子计算矩阵排列的数量。在 n=7 和 d=6 的情况下,矩阵排列的总数刚好低于140 亿。
走向无限… ∞
对于具有(d=) 351 个设备和(n=) 44 个节点的数据集中的较大尺寸的单元之一,矩阵置换超过 1e900。
这个数字是 1 后面跟着 900 个零。
如果这还不足以惊叹设计自动化中模式检测数据集的巨大规模,我会让你计算出在最快的 GPU 上训练一个具有 50 层的深度神经网络需要多少年,就像 nVidia 的 Titan X Pascal 每秒仅 11 万亿次浮点运算(1e13)。
提示:远远超过宇宙的年龄(即 4.35e17 秒)
超越👊
该计算时间是针对具有 351 个晶体管的非常小的单元的。我将给你们留下一个真实的例子,nvidia 的 Volta 芯片有超过 210 亿个晶体管。这么说吧,为这种模式训练一个神经网络所需的时间超出了…嗯,超出了我的想象。
Totem spinning forever (credit: Movie Inception)
参考
- 米(meter 的缩写))Ohlrich,C. Ebeling,E. Ginting 和 L. Sather,“使用快速子图同构算法识别子电路”,Proc .1993 年设计自动化会议,第 31-37 页,1993 年 6 月。
- 长度以集成电路为重点的模拟程序。第十六届中西部电路理论研讨会,加拿大滑铁卢,1973 年 4 月 12 日。
- 设计自动化中的机器智能
数据和设计如何帮助防止托管安置。
原文:https://towardsdatascience.com/how-data-and-design-can-help-prevent-custodial-placements-b4662e07f273?source=collection_archive---------14-----------------------
Prototype of the Extra Team member application and game board at Dutch Design Week 2018
把孩子从家里带走是一件令人痛苦的事情。青年福利部门的社会工作者尽一切可能防止这种情况发生。然而,在 2017 年,每 10,000 名儿童中,就有 121 名儿童被带离家庭。2017 年,阿姆斯特丹市政府(青年部)和 Garage2017 使用数据分析来深入了解影响监管安置的因素。
在荷兰市政协会(VNG)和荷兰设计基金会的“如果实验室:智能社会遇见设计”中,数字设计机构 Greenberry 与garages 2020一起着手在青年社会工作者中寻找这些数据的应用。我们希望通过假设实验室回答的关键问题是:我们如何成功地利用青少年福利部门的数据,以最大限度地降低监管安置的可能性?原型可以在荷兰埃因霍温举行的 2018 年荷兰设计周上看到
阿姆斯特丹市政府进行的数据分析确定了某些可识别的模式。它还表明,在向社会工作者提供的信息方面还有改进的余地。然而,仅仅听到“数据”这个词就会让许多社会工作者吃惊。说到底,数据不就是冷冰冰的、硬邦邦的、匿名的信息,与社工的同理心和直觉工作关系不大吗?
Mapping insights from the interviews
不是放在地球上坐在电脑前
我们设计流程的第一步是对一线专业人员进行一系列全面的采访。我们总共采访了八名社会工作者。在采访中,我们决定不要过多谈论数据。相反,我们把讨论集中在参与者的工作,他们的挫折,他们的动机。这些都是很棒的谈话,在谈话中,我们获得了对社会工作者工作的更多尊重。但我们也越来越深入地了解到青年福利部门面临的挑战:从极高的工作量到专业人士不愿采取行动。
“帮助社工复查一下很好:我是不是把事情看清楚了?”—社会工作者玛丽莎
采访向我们表明,青年福利是一个直观的职业。在经验和感觉的基础上,与家庭、儿童和其他专业人员协商(在个案讨论期间),就下一种干预形式作出决定。数据目前在这方面不起作用。我们了解到,社会工作者来到这个世界上不是为了坐在电脑前,他们主要是想把时间花在他们的客户身上。我们还发现,社会工作者需要确认他们的决定。我看清形势了吗?对我的当事人来说这是正确的干预途径吗?
Co-design session with experts & designers
我们如何……
在与来自 Garage2020、阿姆斯特丹市政当局和 Greenberry 的设计师、护理专业人员和团队负责人的设计会议上,我们开始在合作设计过程中开发原型。我们把采访作为我们的出发点:我们如何创造一个工具,方便专业人士在不同的干预途径之间作出决定?我们如何让社会工作者洞察可比的情况?我们如何向他们展示干预过程中所有可能的选项(包括不太为人所知的选项)?我们如何帮助他们更快更有效地分析一个案例?
“我来到这个世界上不是为了坐在电脑前。”—朱迪思,社会工作者
经过几次合作设计会议,我们开发了两个概念。我们使用故事板研究每个概念的细节,并再次与社会工作者交谈。我们在格林伯里实验室展示了故事板,并让社会工作者在实践中测试这些概念。他们被要求深入探索原型,对其进行改进和补充。在原型测试结束时,我们达成了一个可行的概念:为青年社会工作者增加一名“额外的团队成员”。
玩玩具
在与社会工作者的访谈中,我们发现社会工作者从来不会在没有与其他专业人士和同事进行深入讨论的情况下就某个客户做出决定。为了进一步支持这一过程,我们提出了“额外团队成员”的概念。想象一下,有一个团队成员拥有阿姆斯特丹(以及后来整个荷兰)所有青少年福利案例的信息。最重要的是,在与团队或客户讨论时,你可以咨询谁。
然而,我们不想生产一种社会工作者被迫坐在电脑前使用的数据工具。我们的偏好是创造一个实体产品,通过它可以很容易地检索数据,而不需要在屏幕上点击太多。所以,我们玩玩具。当我们这样做时,我们寻找合适的格式。
Early storyboard of the concept
额外的团队成员
额外的团队成员包括一个游戏板、木块和一个软件应用程序。每个干预路径都由一个特定的木块代表,这些木块由社会工作者按时间顺序放置在游戏板上。这创建了到目前为止部署的所有干预路径的可视化时间线。
“如果这个概念行得通,结果可能会改变游戏规则。”社会工作者萨宾
额外团队成员应用程序“了解”所有可能的情况,并通过数据分析支持社会工作者为其客户选择下一个干预途径。通过在应用程序中拍摄游戏板的照片(木块通过图像识别被识别为代码),社会工作者可以立即看到下一个合乎逻辑的干预可能是什么。此外,extra team member 应用程序提供了与不同干预途径相关的故事和背景信息。还显示了不同选项的等待时间、可用性和位置。更重要的是,通过数字化游戏板,我们积累了关于不同干预途径的新的匿名数据。
The Extra Team member prototype
在实践中
在 2018 年荷兰设计周期间,Greenberry、Garage2020 和阿姆斯特丹市政府将展示原型:一名额外的团队成员。与社会工作者一起为他们设计。原型可以在 4 号展厅 Klokgebouw 的 VNG 现实主义展台上看到。下一步是将原型转化为我们可以在实践中测试的功能应用程序。想法?感兴趣吗?小贴士?我们希望通过extra teamlid @ garages 2020 . nl收到您的来信
产品演示:https://vimeo.com/295986844
本文由green berry的创意总监 Alain Dujardin 撰写。
译本:丽贝卡·海鲁尔, D2E 译本 。
数据驱动的企业如何进行场景规划
原文:https://towardsdatascience.com/how-data-driven-businesses-approach-scenario-planning-7ba3e9a89e79?source=collection_archive---------2-----------------------
有已知的已知。这些是我们知道自己知道的事情。有已知的未知。也就是说,有些事情,我们知道我们不知道。但也有不为人知的未知。有些事情我们不知道我们不知道。 拉姆斯
情景规划是 20 世纪 50 年代开发的一种规划技术,用于帮助军方更好地应对意外变化。在情景规划之前,许多军事规划都是以类似于影响分析技术的方式进行的,假设未来与现在非常相似。相比之下,情景规划迫使你分析许多可能的未来,这些未来可能与现在非常不同。
场景规划会因业务而异,因为您需要考虑的未来场景取决于您的业务。本周我们将介绍情景规划的基本框架,这样你就可以将它应用到你自己的需求中。具体来说,我们将涵盖:
- 识别驾驶趋势
- 选择场景
- 情景模拟
- 高级场景
让我们从确定将形成我们需要考虑的未来的驱动趋势开始吧!
离群值 **监控您的业务数据,并在发生意外变化时通知您。**我们帮助营销/发展&产品团队从他们的业务数据中获取更多价值。 今天安排试玩。
- Outlier 是 Strata+Hadoop World 2017 观众奖得主。
场景规划:识别驱动趋势
在你开始构建未来的场景之前,你需要确定可能塑造这些未来的力量。这些力量很大程度上取决于你的业务类型,但通常可以分为社会,技术,经济,环境和政治趋势,这就是所谓的陡峭。例如,如果你是一家电子公司,你的未来可能会受到进口关税(政治)、运输成本(经济)、制造成本(技术)、回收法规(环境)和客户认知(社会)的影响。让我们通过几个简单的步骤来识别你所有的驾驶趋势。
第一步。集思广益,找出你的企业可能存在的所有驱动趋势。这可能会是一个非常大的列表,所以寻找相似之处和可能包含许多不同趋势的更大趋势。理想的情况是,你希望汇集一个合理的主要趋势列表,而没有太多的重复。
第二步。即使在整合之后,您的业务也可能有大量潜在的驱动趋势。下一步是对这些趋势进行分类,并找出最重要的趋势来塑造你的场景。为此,我们将从两个不同的方面对每位驱动因素进行评估:
- 影响:这个驱动因素对未来的潜在影响有多大?
- 不确定性:你能多好地预测这个驱动因素在未来会发生什么?
回到我们的电子公司,构建产品的组件成本具有较低的不确定性(不太可能在没有警告的情况下改变),但具有较高的影响(影响您的利润)。同时,竞争性的产品发布具有很高的不确定性(你不知道你的竞争对手在计划什么)和很高的影响(可能会降低销量)。影响和不确定性是定性的衡量标准,因此您应该决定自己的评分标准。无论你用什么标准,确保你对每个司机的相对评分是一致的。
第三步。评分后,您现在可以根据潜在驾驶员的两个得分将他们分为三类:
- 次要因素是对塑造你的未来影响较小、不太重要的驱动因素。
- 总体趋势是重要的驱动因素,但也很容易理解和预测。
- 关键的不确定性是很难预测其未来的重要驱动因素。
显然,关键的不确定性是最重要的,也是你应该用来构建你的场景的!次要因素和总体趋势将成为你从关键不确定性中构建的情景的背景。接下来,我们将讨论如何做到这一点。
方案规划:选择方案
在您确定了业务的驱动趋势(昨天的那些关键不确定性)之后,是时候选择值得研究的场景了。如果你只是简单地选择你最感兴趣的场景或者你已经知道的场景,那么整个场景规划的过程就是一种浪费!为了使情景规划有效,你需要面对可能的不愉快或未知的未来。
幸运的是,你已经确定的关键不确定性将为你塑造你的场景。例如,给定任意两个不确定性,您可以使用它们可能的结果(积极或消极)构建场景:
如果没有例子,这可能很难想象,所以让我们用一个例子!假设我们是一家电子公司,在中国生产产品,主要在美国销售。通过我们的流程,我们发现最大的关键不确定性是竞争性价格变化和进口关税变化。每种情况都有两种可能的结果:
然后,我们可以根据这两个关键的不确定性构建四种情景:
每个场景都有很大的不同,对每个场景进行分析将有助于深入了解这些以前不确定的业务领域。这是一个简单的例子,只使用了你的两个关键不确定性来创建场景,但是你可能会有两个以上的不确定性。您可以通过组合成对的不确定性(重复这个简单的过程)或者将两个以上的不确定性组合成一个更复杂的矩阵来构建更多的场景。无论哪种方式,您都应该有一个有趣的场景集合来分析。
如果你有太多的场景需要在有限的时间内考虑,按照可能性对它们进行排序会很有帮助,这样你就可以在极不可能的场景上花费更少的时间。例如,如果你的一个场景依赖于心灵运输的发明,你可以跳过这一个,因为你可能不会很快看到心灵运输的发明。
接下来,我们将介绍分析这些场景的不同方法,因为您已经掌握了这些方法!
一旦你确定了你的场景,以及产生这些场景的关键不确定性,是时候模拟这些场景,看看它们会如何发展。这里的目标不是完美地预测场景的未来,而是充分地探索它,以便您可以使用获得的知识做出更好的决策。你可以通过思考场景中的一连串事件以及它们在未来可能会如何发展来做到这一点。
你的模拟将依赖于你的业务经验、你能收集到的关于总体趋势和关键不确定性的任何数据以及外部建议。许多公司会聘请顾问来帮助他们进行场景规划,以确保他们避免在这个阶段引入偏见。如果你真的希望你的利润增加,你可能会无意中添加到你的模拟偏差,显示利润增加。
与任何模拟一样,最重要的部分是您建立的规则。运行良好的模拟具有以下规则:
- …反映公司潜在的战略选择。如果你的公司位于加州,搬迁是不可能的,你应该避免考虑搬迁到其他国家。
- …不受制于你当前的战略。情景规划的发展是为了攻击“官方未来”的想法,即简单地将今天延伸到明天。你需要愿意改变现状,考虑彻底的改变。
- …足够严格以提供一个结果。生活非常复杂,有很多因素,这就是为什么很难预测下周会发生什么。你需要限制你的模拟中的因素,否则你真的不能取得很大进展。
当你发现自己在考虑以前没有考虑到的选项和因素时,你就会知道你的模拟在起作用。请记住,情景模拟的目标不是最终结果,而是过程和它迫使你思考业务的不同方式。
接下来我们将介绍如何模拟真正复杂的场景,包括许多不同的竞争者或组织相互作用:战争游戏!
方案规划:高级方案
有些场景太复杂,不能简单地在白板上思考,因为要考虑的因素太多了。例如,如果您的场景涉及与三个或四个竞争对手的竞争性价格战,则很难理解每个参与者对每个变化的反应。这些可能是需要理解的最重要的场景;你如何管理复杂性?
正如我前面提到的,情景规划最初源于军事规划技术。军方预测未来的一个非常有效的方法是运行战争游戏(模拟),让团队在模拟的战斗中相互竞争,以观察不同部队之间的事态发展。战争游戏运行良好,因为每个团队只需要担心他们的利益和资源,给他们清晰的决策和更有效的整体模拟。这是一个有效的工具,您可以部署它来理解这些高度复杂的多方场景。而且很好玩!
最简单的部分是把你的人分成小组,在你的场景中每一方一个小组。困难的部分是建立模拟的规则(正如我们昨天所讨论的),以便它以一种对决策有用的方式进行。这与我们之前模拟的场景没有太大的不同,不同的是在你的战争游戏中每个团队可能有不同的规则。例如,一个大的竞争对手可能比一个小的竞争对手更灵活地调整他们的价格和利润(由于大量的现金流)。你为每个团队设计的规则越好,你的模拟结果就越好。
轮换你的团队总是一个好主意,这样每个人都有机会从不同的角度看问题。如果你定期重复这个过程,这是很容易的,这也将帮助你的团队提高他们的模拟技能。
延伸阅读:我在这里只触及了场景规划的皮毛!如果你想了解更多关于场景规划的知识,并看到更多详细的例子,我推荐莱比锡管理研究生院发表的关于场景规划的的优秀论文。
离群值 **监控您的业务数据,并在发生意外变化时通知您。**我们帮助营销/发展&产品团队从他们的业务数据中获取更多价值。 今天安排演示。
- Outlier 是 Strata+Hadoop World 2017 观众奖得主。
数据驱动型公司如何构建客户角色
原文:https://towardsdatascience.com/how-data-driven-companies-build-customer-personas-c1559d82a1d4?source=collection_archive---------1-----------------------
“与人打交道可能是你面临的最大问题,尤其是在商界。”——卡耐基
客户角色通过识别共同的特征和行为来帮助你理解你的客户。
不是所有的客户都是一样的,这就是为什么我们首先需要数据!如果你的生意成功,你将拥有大量的客户,每个人都有不同的需求和兴趣,这使得你很难理解你的客户到底想要什么。你如何为数百个不同的客户建立营销策略和计划?
客户人物角色通过识别大群客户共有的共同特征和创建简单的档案,使得处理如此多样化的客户群变得更加容易。这些人物角色是代表大部分客户的客户档案,将使您的决策更容易,因为相对于数百个单独的客户,根据已知的人物角色测试给定的策略更容易。
例如,如果您在线销售桌子,并且有大量居住在加利福尼亚的女性客户,您可以创建一个名为 Beth 的热爱家具的加利福尼亚妇女的角色。Beth 不是一个真实的人,但是她的角色与你的许多现有客户有着共同的特征,因此 Beth 可以用来代表他们的利益。当你考虑产品变化和营销活动时,你可以通过 Beth 的视角来看待它们,并考虑她作为你客户的代理人可能会如何回应。
你如何建立你的客户角色,你如何知道他们代表你的客户?本周我们将介绍一些技巧,包括:
- 第 2 部分— 寻找特征(群体重采样)
- 第 3 部分— 构建人物角色(人群分类)
- 第 4 部分— 测试人物角色
- 第 5 部分— 利用人物角色做决策
首先,我们将从一个简单的方法开始,确定哪些角色已经存在于您的客户数据中。
离群值 **监控您的业务数据,并在发生意外变化时通知您。**我们帮助营销/发展&产品团队从他们的业务数据中获取更多价值。 今天安排试玩。
- Outlier 是 Strata+Hadoop World 2017 观众奖得主。
客户角色:寻找特征
创建人物角色很容易,你只需要收集描述大部分用户的一系列特征,并把它们组合成一个人物角色。识别这些大片段并提取它们的特征是真正的挑战。
如果你把你的客户想象成一大群复杂的人,这个任务可能会令人生畏。然而,你需要做的只是找到一些特征,有效地将你的客户分成几个主要群体。要做到这一点,你可以一次从一个角度看你的客户。
比如让我们考虑一下我们网上表公司的客户群。我们的客户遍布全国各地,代表了许多年龄组和人口统计数据。让我们看看它们是如何分布在几个常见维度上的:
在这种情况下,购买量分布相当均匀,因此没有明显的客户集中。因此,这对于我们的任何角色来说都不是一个好的特征。
购买总数有一个有趣的钟形曲线形状,表明购买总数向中心集中,但它未能将我们的客户划分成任何逻辑组。相反,看起来我们的客户在一系列购买中表现得像一个单一的、大的部分。
Breaking customers into groups based on effective traits
年龄让我们第一次清楚地看到有效的特质,两个明显的年龄组彼此分开。这使得年龄成为创建人物角色的理想特征,因为这里出现了两种明显的人物角色:年轻人和老年人。
正如你所看到的,通过不同的维度来观察客户的分布,可以很容易地识别出清晰的界限,这表明这是构建人物角色的一个很好的选择。您正在寻找的维度将在您的客户中创建清晰的分离,并允许您用单一维度有效地捕获大型群体。
接下来,我们将讨论如何将这些候选特征组合成人物角色!
客户角色:构建角色
我们刚刚讨论了如何通过维度来查看客户的分布,从而为我们的人物角色确定候选特征。现在我们只需要将它们放在一起,组成人物角色!
不幸的是,你可能有一长串的特征,因为你的客户会自然地分成几十个组。虽然我们欢迎你创建几十个人物角色,但通常只有少数几个是最有用的。为了处理这种复杂性,我们将通过使用总人数来对可能的角色进行分类。
例如,让我们假设我们为我们的在线家具公司确定了 3 个特征,每个特征都有 2 个明确的细分:年龄(年轻人和老年人)、桌子大小(小和大)和购买频率(一次性和每月)。即使这个简单的模型有三个特征(每个有两个部分),也能产生 8 个不同的角色!
这太多了,所以让我们通过查看属于每个候选人角色的客户总数来减少数量。当我们这样做时,事情就变得清楚多了:
如你所见,结合我们的特征实际上减少了我们大部分潜在的人物角色到我们人口中很小的一部分。只有“年轻的、小的、一次性的”和“老的、小的、每月的”代表了足够多的客户,值得创建人物角色。
请注意,这两个人物角色并没有涵盖我们所有的客户,只是很大一部分。你的人物角色永远不会覆盖 100%的用户,因为需要的人物角色数量是不切实际的。然而,在使用你的人物角色时,请记住这一点,因为有许多客户不在此列。
你会发现使用人口作为过滤器是从几十个潜在人物角色中筛选出几个的非常有效的方法。有了这些,明天我们将讨论如何验证你的人物角色是否真正代表了你的客户,或者你的客户只是代表了你的人物角色。
客户角色:测试角色
既然我们已经集合了一组人物角色,我们需要做最后的检查,确保组成我们的人物角色的特征是有用的。特征可以是两种形式之一:
- 描述性。这些特征抓住了客户行为方式的某些方面,并有助于预测未来的行为。
- 衍生。这些特征是客户行为的结果,很可能是你的产品如何运作或者客户如何看待你的公司的产物。
区别是很重要的,因为由衍生特征组成的人物角色是没有用的,因为它们不会帮助你理解变化会如何影响你的客户。你的人物角色应该只由描述性特征组成,但是你如何确定呢?
为了说明这个困难,让我们回顾一下另一篇关于集群的文章中的一个特征:桌子大小。请记住,我们发现了两个客户角色:(1)一次性购买小桌子的年轻人,以及(2)每月购买小桌子的老年人。有人每个月都会买桌子,这应该会让你感到奇怪吧!为什么会发生这种情况?
- 他们可能代表一个更大的组织或社区购买桌子,所以他们并不是真正为自己购买,幕后有一个你永远看不到的顾客。
- 他们可能会在你的网站上购买桌子,然后在其他地方转售,因为你的价格低于他们在其他地方可以买到的价格。
选项#1 是描述性的,因为购买一张桌子的频率表明了一组特定的客户需求,这意味着向您购买时有一组特定的决策标准。选项#2 是派生的,因为它仅仅是你的桌子价格的结果,没有真正的决策标准。根据哪个原因是正确的,这种特征的分类会有所不同,所以你需要调查所有的原因来确定。
理解为什么一个特征存在对于正确分类它是至关重要的。做到这一点的唯一可靠方法是在每个角色中与客户交谈,更好地了解他们的需求。好消息是,你不必在每个人物角色中与几个人交谈,就能确定你已经捕捉到了代表他们的描述性特征。
接下来,我们将讨论如何利用我们收集的这些人物角色做出决策!
客户角色:使用角色
有了我们的客户角色,是时候使用它们来做一些决定了!
正如我在开始时提到的,客户角色作为大部分客户的替身是很有用的。你可以用它们来评估客户眼中的许多不同决策。例如,如果你是…
- …考虑增加新功能。你的角色会在意吗?对他们的效用是什么?他们将如何看待这种效用?他们是否有时间使用更多的功能,或者他们已经尽可能多的花时间和你在一起了?
- **…考虑新的品牌信息。**它将如何脱颖而出?他们还收到了哪些信息,这些信息与其他信息相比会有什么不同?有没有办法用一种直接吸引他们的语言来说话?
- ……考虑新市场。你的人物角色在新市场中存在吗?你需要接触全新类型的客户,还是以新的方式接触相同的人物角色?
大多数公司会更进一步,使用他们的人物角色来组织客户焦点小组,这些小组是符合给定人物角色的简单的客户小组。通过按人物角色收集客户,您可以从真实客户那里获得关于即将到来的变化的实时相关反馈,反馈的方式应该是有针对性的和一致的。从人物角色中建立的客户焦点小组远远优于一般的客户小组,在那里你会得到许多相互冲突的利益和观点。
无论你如何使用你的人物角色,确保你公司的每个人都知道他们是什么,并把他们作为决策的参考点。如果你这样做了,你会发现你的团队做出了更好、更一致的以客户为中心的决策。
回顾:顾客角色是一种简单的方法,可以确保你在做每一个决定时都考虑到顾客。通过创建几个典型客户类型的简介,你可以更容易地从客户的角度看问题。
离群值 **监控您的业务数据,并在发生意外变化时通知您。**我们帮助营销/发展&产品团队从他们的业务数据中获取更多价值。 今天安排试玩。
- Outlier 是 Strata+Hadoop World 2017 观众奖得主。
数据科学如何实现早期癌症诊断
原文:https://towardsdatascience.com/how-data-science-enables-early-cancer-diagnosis-6221ae841ae3?source=collection_archive---------8-----------------------
在这篇文章中,我提出了一个使用两步法的癌症早期检测的解决方案。第一步是使用霰丨弹丨枪法,如质谱法,利用常规检查样品收集尽可能多的化学信息;第二步是建立一种可靠的方法来筛选化学信息,并标记可疑的癌症样本以供进一步测试。开发了一个网络应用程序,以促进癌症预测和发现用于癌症诊断的指纹化学物质。
癌症的早期发现和治疗对于提高癌症患者的生存率和生活质量至关重要。根据英国癌症研究的数据,对于女性和男性最常见的癌症乳腺癌和前列腺癌,如果在 I 期/之前诊断,五年存活率几乎是 100%,而在 IV 期存活率显著下降到不到 30%!
Figure. 5-Year Survival Rate for Breast Cancer at Different Stages
Figure. 5-Year Survival Rate for Prostate Cancer at Different Stages
目前,癌症通常是在患者出现呕吐和头晕等症状后才被诊断出来。然而,在大多数情况下,症状只有在晚期才明显,即使症状出现,病人和医生也不会首先怀疑癌症。因此,最好是找到一种可靠的方法,使用常规体检样本(,例如,血液样本)来检查癌症,并且甚至在症状出现之前就“标记”可疑的癌症样本以进行进一步的测试。
早期癌症检测的两步法
第一步。猎枪法
质谱提供了一种经济、快速的解决方案,可从唾液、血液或其他样本中收集尽可能多的化学信息,已被制药公司广泛应用于药物筛选和测试。
一般来说,质谱通过化学物质的重量或质量来区分化学物质,即使化学物质的浓度很低,质谱也具有很高的灵敏度。此外,质谱分析通常使用微小的样品(毫克),需要几分钟才能完成,并且可以很容易地与机器人样品制备技术结合,这是高通量化学筛选和测试的理想方法。
然而,太多的信息意味着很难找到哪个肿块是癌症诊断的决定性因素,即使是有经验的专业人员。通常的做法是,人们根据有限数量的已知癌症决定化学物质(或标准)来预测癌症,这将由于样本差异而导致大量的错误分类。
Figure. Typical mass spectra of ovarian cancer samples and ovarian control samples
第二步。受数据科学启发的频谱分析
在人们的印象中,数据科学和机器学习更多的是与高科技行业相关,比如图像处理、语音处理、人工智能,但它们与频谱分析有什么关系呢?换句话说,如何将现实世界的癌症早期诊断问题转化为机器学习问题来解决?让我们在下面几节中演示这种“转换”。
数据收集
查看我的 github 了解更多详情@第一节
首先,让我们收集一些质谱数据。我正在调查的数据可以从国家癌症研究所 (NCI)公开获得。在这里,我主要关注两种癌症:卵巢癌和前列腺癌。对于卵巢癌,我采用了两组,一组由机器人准备,另一组按照标准协议手工准备。对于前列腺癌,所有样品都是按照标准方案手工制备的。每组都有癌症组和对照组(健康组)。大约 20%的癌症样品处于 I 期,而其余 80%的癌症样品处于 II、III 和 IV 期。
Figure. Mass spectra samples collected for cancer prediction
这种情况下的数据争论是将单个质谱结合到光谱矩阵,每行代表单个样品,每列代表单个 M/Z。所有样品都标记为癌症为 1,非癌症为-1。
Figure. Mass spectra matrix after combining individual mass spectrum
数据可视化
查看我的 github 了解更多详情@ Section 2
那么我们的数据是什么样的呢?他们可以很容易地被分为癌症或非癌症群体吗?现在,我们面对的数据集的特征(不同的质量)明显大于样本(质谱的数量)。这对于所有光谱数据都是常见的,通过实验收集大量样本相对困难,但通过光谱分析获得大量特征或数据点却相当容易。由于我们数据的高维数(> 9000 个特征),不可能直接查看我们的数据。相反,我们可以将我们的数据“投影”到 2D 空间,并将其可视化。主成分分析为我们提供了很好的工具来做到这一点,在这里我们可以很容易地看到和知道我们的数据。在这里,我们使用前两个主成分绘制了数据分布图。
Figure. Comparison of cancer and non-cancer group in three groups. Purple plots represent the non-cancer group, while yellow plots represent the cancer group. From left to right: robotic prepared ovarian samples, hand-prepared ovarian samples, and prostate samples
我们可以看到,对于机器人制备的卵巢样本和前列腺样本,癌症和非癌症样本可以合理地分离,而对于手工制备的卵巢样本,癌症和非癌症样本在很大程度上重叠,无法仅使用前两个主成分进行分离(与机器人制备的卵巢组和前列腺组相比,更难预测癌症/非癌症)。
特征选择
查看我的 github 了解更多详情@ 3.1 节
我们知道我们的光谱数据是高维数据。事实上,高维数据不仅带来了高维的诅咒,还带来了相关和噪声特征,这可能导致我们的模型过拟合数据或难以收敛。因此,在应用机器学习算法之前,我们需要选择重要的特征。
决策树是一种自然的特征选择方法。树分裂基于基尼不纯的最大增益,因此树总是向着更重要的特征分裂。随机森林算法是一种集成方法,对每次分裂使用树打包和随机特征选择。在这里,我使用随机森林来选择最重要的特征。我将阈值设置为 95 %,这意味着我预计最重要的特征可以解释数据集 95%以上的差异。
Figure. Explained Variance vs. Number of Features rendered by Random Forest.
值得注意的是,在 9,200 个特征(M/Z)中,仅使用 40 个特征(总特征的 0.43%)就可以解释前列腺样本 95%以上的差异,52 个特征(总特征的 0.58%)将解释机器人制备的卵巢样本 95%以上的差异,而手工制备的卵巢样本需要 86 个特征(总特征的 0.93%)。特征选择将显著减少噪声和冗余特征。
选择的特征有意义吗?
是的,这意味着指纹肿块可以确定癌症
【T4查看我的 github 了解更多详情@第 4.4 节
对于机器人制备的卵巢样本,200 到 1000 之间的指纹质量数为 25,确定卵巢癌的癌症的一个关键代谢物 (分子量 472) **在我们用于卵巢预测的重要质量列表中。**换句话说,我开发了一种工具,用于选择可能用于癌症诊断的指纹分子,这对新发现代谢和致癌化学物质具有重要价值。在这种情况下,研究人员可以只关注 52 个预测卵巢癌的分子,或者 40 个预测前列腺癌的分子,而不是关注所有 9300 个可能的分子,这将大大提高研发效率并节省成本。
癌症预测模型
查看我的 github 了解更多详情@ 3.2 和 3.3
使用选择的特征,我应用了支持向量机(SVM)随机森林(RF)K 最*邻 (KNN)和集成方法,通过投票进行癌症预测。模型参数通过网格搜索交叉验证进行调整。基于预测准确性、AUC 评分和 F1 评分比较模型性能。
Figure. Comparison of model performance on robotic-prepared ovarian samples, hand-prepared ovarian samples, and prostate samples
值得注意的是,对于卵巢癌和前列腺癌的预测,所有机器学习模型都表现良好。对于机器人准备的卵巢数据,随机森林和 SVM 可以达到 100%的准确性,1.0 的 AUC 和 1.0 的 F1 评分,使它们成为预测的完美模型;对于手工准备的卵巢数据,SVM 和系综方法表现相似,达到 95%的准确性,0.95 的 AUC 和 0.96 的 F1 评分;对于前列腺数据,SVM、随机森林和集成方法可以实现高达 98%的准确性、0.98 的 AUC 和 0.98 的 F1 分数。然而,我们不应该对我们的模型过于自信,因为我们的结果是基于小规模的样本,我们将需要更大的数据来优化我们的模型和测试模型的性能。我们的模型还必须灵活,这意味着它们应该能够处理质谱中出现比*时更多噪音的情况(例如,仪器误差和样品制备过程中引入的杂质)。
我们可以看到 SVM 和集成模型在预测准确性、AUC 和 F1 评分方面相似,但是哪一个对于癌症的早期确定更好呢?
查看我的 github 了解更多详情@第 4.1 节
让我们回到这项工作的目标。我们将对疑似癌症样本进行“危险标记”以进行进一步检测,因此敏感性是我们首要关注的问题。换句话说,如果有癌症,我们的模型应该尽可能地预测癌症。这类似于机场的安全检查,警报被调整为对所有金属物体敏感,甚至对钥匙和手机也是如此。
如果我们看一下下面显示的混淆矩阵,它显示了当有癌症时有多少样本没有被预测为癌症(假阴性结果),我们希望尽可能少地出现假阴性结果。这里,1 代表癌症,而-1 代表非癌症。可以容易地看出,SVM 模型在所有三组中呈现 0 假阴性结果,使得 SVM 是比集合模型更好的预测卵巢癌和前列腺癌的模型。
Figure. Comparison of Confusion Matrix between SVM and Ensemble models
如果样本不小心混在一起,我们能知道它属于哪一组吗?
查看我的 github 了解更多详情@ 4.3 节
经常会有人把样本搞混的情况,尤其是处理大量样本的时候。在这里,我提供了一个如何使用机器学习工具将未知样本分配到组中的解决方案。在这个数据集中,我们有六个单独的组。我们必须使用多分类来决定样本属于哪一组。通过比较三种模型(SVM、随机森林和 KNN),我们得出结论,SVM 在这种多分类中表现最佳,准确率高达 93%。进一步证明,我们的模型可以根据性别(高达 97%的准确率)以及机器人准备和手工准备(高达 100%的准确率)来分离样本。
我们能否开发一个应用程序,只需上传一个质谱文件,它就会提供预测结果?
是的。为了实现这个目标,我开发了一个名为癌症诊断 1.0 的应用程序
在这里,我开发了一个基于 Dash 的 web app ,你只需上传一个质谱文件,癌症诊断结果就会立即显示出来。该应用程序已通过 Heroku 部署。
- 上传文件
- 质谱将通过热图和曲线图显示,您可以选择质量范围
- 它显示所有训练样本中新样本的可视化,并通过四个模型预测概率。您可以选择不同的分类标准:全部、性别或准备
- 如果您选择一个特定的组(此处为机器人准备的卵巢组),它会显示该组中训练样本内新样本的可视化,并通过四个模型预测癌症/非癌症的概率
- 它还将显示特定组(此处为机器人准备的卵巢组)内的指纹质量,您可以选择质量范围来显示感兴趣的指纹质量
结论
- SVM 被选为预测卵巢癌和前列腺癌的最佳模型,准确率高(95-100%),假阴性率为零,非常适合“标记”疑似癌症样本
- 确定了决定卵巢癌的指纹分子之一,这被文献报道所证实
- 开发了一个癌症诊断应用程序,以提供快速的癌症预测结果以及用于癌症诊断的指纹分子列表
建议
- 在癌症筛查的常规检查中,患者应该要求进行质谱检测
- 医生应该建议患者在常规体检时做质谱测试
- 保险公司应该支付质谱测试费用,作为一种预防性测试,以鼓励人们进行常规癌症筛查
数据科学如何帮助营销
原文:https://towardsdatascience.com/how-data-science-helps-marketing-d63980fcc8fa?source=collection_archive---------0-----------------------
This post is the updated version of a piece I wrote last year, How Data is Fueling Marketing
数据科学正在迅速改变营销。具体来说,情境营销正在兴起。情境营销不同于传统营销。顾名思义,这种营销策略完全是关于背景。我们不再对观察和预测人们如何进行简单的有意识决策感兴趣。相反,通过这种类型的营销,我们试图观察个人在购买某种产品、预订旅行或浏览在线目录时的习惯。
I updated the content after the talk I gave at the SXSWi 2016 in Austin, Texas
习惯模式塑造了我们每天大约 45%的选择。通过情境营销,我们不仅可以发现和了解某人是谁,还可以了解他们的地理位置,他们在不同的地区和时间点正在做什么,以及他们接下来最有可能做什么。更准确地说,利用今天可用的数据,我们可以观察个人的年龄、性别、过去的行为、设备使用、位置、天气条件、一天中的时间和购买历史以及其他相关因素。这有助于我们在正确的时间传递正确的信息,并识别正确的趋势。我们观察和评估深层背景特征的能力改变了一切。
大公司已经在战略性地使用情境营销。例如,在线预订公司 Orbitz 向 Mac 用户显示价格更高的酒店!另一方面,Travelocity 为移动购物者提供 5%的折扣。众所周知,美国航空公司会在你购物时提高机票价格,以制造一种紧迫感。购物零售商 Target 已经开发了一款“怀孕探测器,它基本上是通过观察访问其网站的女性的购物和浏览历史/cookie 来挖掘数据,从而进入你的子宫。
这是怎么回事?营销人员知道怀孕是一个非常有利可图的时间段。通过观察成千上万不同的产品购买,数据科学家能够确定 25 种最显著的产品,这些产品对“怀孕预测”得分有显著影响。该分析模型有助于预测个人在特定时间段和小机会窗口内的购物行为。然后,Target 会在孕妇可能搜索和购买其产品的特定怀孕阶段发送优惠券。
计时是如何工作的?举个例子:化妆水是一种广泛使用的,每个人都广泛购买的,不仅仅是孕妇。然而,据观察,孕妇在第二个三个月开始时会购买更多的无味乳液。
数据科学不仅非常好地补充了传统营销,它还在我们眼前改变了传统营销。数据科学的一个重要方面是,它通过输入和输出来改善情境营销。诸如年龄、性别、收入、位置、搜索历史、购买历史、一天中的时间等输入。这些输入产生相关的输出,这些输出可以改变你的服务/产品的游戏规则,例如:你需要使用什么渠道来锁定你的客户,你的产品的正确价格和折扣,客户在一年中的特定时间对什么特定产品感兴趣,等等。
关于数据科学如何驱动环境,我最喜欢的一个例子是 Stitchfix 。在刚刚于 6 月 1 日发布的玛丽·米克尔互联网趋势报告中,Stitchfix 在微观数据驱动的参与度、满意度、数据收集和个性化方面领先。Stitchfix 正在将类似网飞和 Spotify 的内容发现应用于时尚,为每位顾客提供差异化的体验。Stitchfix 有一个融合了艺术和科学的数据驱动的入职流程。他们收集顾客偏好、风格和活动的数据点。设计师使用 Pinterest 板和访问算法来帮助改善产品选择。下面的幻灯片描述了 Stitchfix 如何利用数据科学不仅驱动上下文,而且作为其整个产品的基础。
Get the full report at Kleiner Perkins
Nestle Purina 在数据科学方面也取得了成功,不仅利用它来个性化客户信息,还个性化客户宠物!雀巢普瑞纳,*年来,已经建立了一个目标,为宠物主人提供量身定制的营养计划,为他们喜爱的宠物。作为全球第二大宠物食品公司,data science 通过文章索引、文章结构聚类以及推荐算法的使用,帮助 Purina 推出了许多针对客户的广告。
所有这些例子听起来都很棒。但问题出现了,我们如何在数据科学的支持下实际实现和实施情境营销?
确定你的战略无论你的品牌是什么,舒适的鞋子、驾驶汽车的乐趣、快餐配送、难忘的经历都会强化这种价值。与此同时,开始思考什么样的输入对改进你的产品最有益,以及你希望产生的输出。
为顾客旅程提供便利想办法解决顾客购买前、购买中和购买后的旅程问题。关注客户体验和参与度。
内容仍然是王道在互动过程中,你提供的每一条内容都必须基于你从过去的互动中收集的数据,不仅针对客户,而且针对特定的时刻。
与您的 IT 部门合作引入正确的工具来执行自动化和项目。
今天,我们作为营销人员可以获得大量的数据。你必须愿意去挖掘它。搜索、移动设备使用、内容浏览和社交媒体活动揭示了客户一生的旅程。重新定义活动的目的,邀请你的客户不仅购买你的产品或服务,还要与你建立深厚的关系。
这只是冰山一角。如果您有更多问题,请在 Twitter 上联系我。
在 Slideshare 上查看这篇文章的演示文稿。
数据科学如何实现更好的决策
原文:https://towardsdatascience.com/how-data-science-is-enabling-better-decision-making-1699defd6899?source=collection_archive---------9-----------------------
良好的决策是公司和机构高效运行和克服不可预见障碍的关键。在数据科学公司的帮助下,决策者现在能够通过形成和过滤他们的组织收集的数据,做出比过去更明智的选择。通过使用这些数据,他们能够对未来做出预测,例如,如果他们决定将他们的组织带到一个全新的方向,或者他们将如何在金融灾难后重建自己,等等。
然而,应该提到的是,仅有数据科学并不总是足够的。正如 InData 实验室的 Irina Peregud,解释:“数据科学家分析数据以发现洞见,但告诉他们要寻找什么是产品经理和商业领袖的工作。”从本质上来说,企业领导人和政府机构负责人需要在派出数据科学团队尝试解决问题之前,知道问题是什么。数据科学家能够挖掘大量信息,但这些信息毫无价值,除非他们由了解他们工作环境的人领导,即具有行业经验的领导者。在数据科学家能够理论化实现目标的方法之前,需要明确设定目标。
自动化
构建自动响应系统通常被视为许多寻求投资数据科学的企业领导者的最终目标。当收集和利用正确的数据时,许多小的决策可以很容易地自动化。例如,许多发放贷款的银行多年来一直使用信用评分系统来预测其客户的“信用价值”,然而,现在,在数据科学的帮助下,他们能够以更高的准确度做到这一点,这减轻了员工的一些决策过程,降低了如果客户“不值得”就无法获得贷款回报的可能性,同时也加快了这一过程。
最重要的是,数据科学还能够帮助自动化更复杂的决策过程,能够提供许多可靠的方向供选择,并以数据作为这些可能性的证据。使用数据科学,有可能预测尚未做出的决策的影响。这种例子有很多,但最著名的可能是那些濒临倒闭的公司,他们相信数据科学,并根据数据告诉他们会起作用的东西重塑公司,从而得救了,如 Dunkin' Donuts 和 Timberland 。前者投资于忠诚度系统,后者投资于识别其理想客户。拥有支持此类重大决策的数据,可以让决策者对他们正在做的事情更有信心,并在财务和心理上对该想法进行更多投资。
医疗保险
医疗保健是另一个领域,数据科学已证明对各种行业的决策非常有益。显然,提供充分的治疗是第一要务。许多医疗保健提供商现在正在转向循证医学,当与数据科学结合使用时,医生可以通过在做出治疗决定之前访问更大的资源池来为患者提供更个性化的体验。
健康和人寿保险是从数据科学中受益匪浅的其他医疗保健领域。与上述银行根据“信用价值”评分发放贷款的方式类似,健康和人寿保险公司也可以制定“健康”评分。要得出这样的分数,需要从大量地方收集数据,包括社交媒体、金融交易甚至身体传感器。这在整个保险行业也可以看到。事实上,正如 Datafloq 解释的那样:“保险公司依赖于通过为每个客户调整保单来增加客户数量”。通过使用数据科学,保险公司能够为客户和保险公司提供更加个性化的保险方案。这使得决策过程变得更加容易,因为这不再是保险公司对客户说“是”或“否”的问题,而是询问对双方都适用的条款。
更顺畅的操作
数据科学也为那些旨在提高运营标准的人所熟知。通过将数据科学应用于运营程序,决策者能够更有效地实施变革,并通过反复试验更密切地监控变革是否成功。这种方法可以应用于雇佣和解雇员工,通过收集和测量数据来看谁最适合这份工作,以及测量绩效目标来看谁真正应该得到提升。最重要的是,它有助于雇主了解哪里真正需要工作,哪里可以裁员。
威廉·爱德华·戴明曾经说过:“我们相信上帝。所有其他人都必须带数据。”虽然他在 24 年前就去世了,但他的话现在比当初说的时候更有道理。在数据科学的帮助下,决策者——无论他们身处哪个行业——都可以做出比以往更加精确的选择。或者,在某些情况下,通过自动化来消除整个决策过程。
通过充分利用数据科学的潜力,所有行业的顶级决策者不仅可以做出更明智的决策,还可以对未来做出更清晰的预测。凭借这一优势,他们能够稳定那些一直没有清晰愿景的企业,拯救那些濒临倒闭的企业。
然而,应该再次提到的是,只有当决策者知道有一个问题需要解决,并且能够给他们领导下的数据科学家以目标时,数据科学才是一种优势。一旦目标确立,数据科学家就可以施展他们的魔法,并理论化如何修正它。数据科学本身并不是决策的优势,数据科学结合良好的领导力才是优势。
数据科学如何带来更好的决策
原文:https://towardsdatascience.com/how-data-science-leads-to-better-decision-making-2de2116e586e?source=collection_archive---------4-----------------------
Simplilearn
本周美国、欧洲和中东的新闻生动地提醒人们理性决策的谬误。无论我们阅读的是商业、经济还是社会方面的书籍,每天似乎都会带来明显糟糕的决策。杰克·曾格和约瑟夫·福克曼概述了决策者失败的几个原因,包括疏忽、缺乏预见性、优柔寡断和孤立。【我】。假新闻、伪造的事实和被操纵的观点是糟糕决策的原因还是结果?【ii】最重要的是,为了我们的组织、我们的客户和我们的职业,我们可以做些什么来提高我们的决策技能?
我们生活在一个数据经常被误认为事实的时间和空间里。*做出更好的决策,而不是处理数据,是改善管理的最终基准。*我们目前每天大约产生 2.5 万亿字节的数据——过去两年的数据量超过了人类历史上的数据量。克劳斯·施瓦布认为,我们已经进入了第四次工业革命,在这场革命中,价值是由我们捕捉和分析这些海量数据的能力来定义的。迄今为止,很少有证据表明这场革命带来了比过去更好的决策。数据科学旨在将数据转化为有效的行动,以应对基本的组织挑战。
改善决策需要什么?在决策科学中,我们了解到有效管理的主要挑战是对我们做出决策的环境的复杂性、模糊性和不确定性的认识。在认知科学中,我们被告知,我们的先入之见和偏见扭曲了我们看待问题的方式,也限制了我们提出创新解决方案的能力。在管理学院,我们被训练认识到当今现实世界问题的复杂性,无视“一个最好的方法”的逻辑。最后,在商业中,我们意识到罪魁祸首不仅仅是我们自己的决定,还常常是我们周围的人。
什么是更好的决定?根据大卫·斯诺登关于理性决策的研究,我们认为好的、更好的和伟大的决策之间有着明显的区别。在确定性决策环境中,好的决策是可能的,在确定性决策环境中,可以通过检查手头的数据找到正确的答案。不幸的是,大多数商业决策是在随机环境中做出的,在这种环境中,无法从可用数据中推断出正确的决策——通过减少不确定性的原因,更好的决策仍然是可能的。最后,我们所指的伟大决策是那些背景、挑战和解决方案允许我们重新审视决策过程本身性质的决策。
虽然机器学习目前作为一种神秘的灵丹妙药被推销给管理层,但它只不过是一种用于探索我们所面临问题的本质的技术工具。监督学习代表了一种特定类型的解决问题的方法,在这种方法中,我们知道答案就在数据中,挑战在于推导出它。无监督学习概括了一种没有唯一正确答案的挑战,但我们相信研究数据将使我们能够归纳出潜在反应的模式。半监督学习代表了第三种方法,其中我们知道答案,但我们正试图校准决策过程,以产生更可靠的结果。在所有情况下,信息技术为我们提供了一面思考我们周围挑战的镜子。
数据科学研究如何帮助我们成为更好的决策者?业务分析是一个四步流程,旨在帮助人们在其工作环境中做出更好的决策。首先,我们需要扫描环境(物理环境和数字环境),以了解我们试图解决的问题的本质。第二步是探索我们必须处理的数据的质量。第三步是应用正确的方法来探索数据,并针对我们试图解决的问题类型制定解决方案。最后,我们需要将数据转化为故事,激励我们的团队和社区采取适当的行动。数据科学与其说是理论,不如说是实践,将这些决策基础整合到我们的工作方式中。
数据科学实践是商业分析研究所的核心和灵魂。2018 年 白暑期项目 将探索利用数据科学提高管理决策的关键任务技能。我们独特的夏季会议将为来自美国和加拿大、欧洲和亚洲的四十多名参与者提供对使用分析实践的坚实理解——如何评估手头的数据,如何将适当的方法应用于特定类型的个人和专业挑战,以及如何将数据转化为集体行动。
Lee Schlenker 是商业分析和数字化转型教授,也是 http://baieurope.com 商业分析研究所的负责人。他的 LinkedIn 个人资料可以在www.linkedin.com/in/leeschlenker.查看,你可以在https://twitter.com/DSign4Analytics的 Twitter 上关注我们
【I】曾格尔,j .和福克曼 J. (2014)。导致可怕决定的 9 个习惯。哈佛商业评论[在线]
【ii】Schlenker,L. (2017),更好的决策对你来说意味着什么?,中等
【iii】屈臣氏营销,(2017)2017 年十大关键营销趋势
【iv】施瓦布,K. (2017)。第四次工业革命。第一版。兰登书屋公司。
Snowdon,d .和 Kurtz,C.F. (2003),复杂世界中的意义构建,IBM 系统杂志
数据科学家如何让医生相信人工智能有效
原文:https://towardsdatascience.com/how-data-scientists-can-convince-doctors-that-ai-works-c27121432ccd?source=collection_archive---------0-----------------------
当我在医学院的时候,我被教导对一个病人说的四个最重要的词是*‘你没有癌症’*。我相信你会同意,这一声明对于正确行事至关重要。为了作出这一声明,观察者必须尽可能地确信这一声明在当时确实是正确的(癌症已经被证明是不存在的)。在统计学术语中,这种说法被称为真正的否定。可惜医学不是非黑即白的,医生也有可能搞错。这种情况并不经常发生(嗯,比我们希望的要多,但还不足以让每个人都放弃),但一旦发生,结果对患者来说可能是灾难性的。
当人工智能系统进行诊断或报告发现时,确保新技术也是准确的,或者至少像人类一样准确是很重要的。这是通过临床验证过程完成的,其目的是评估系统的“准确性”。我们当然不希望 AI 开始错误地告诉人们,他们比人类更容易患癌症或不患癌症!在这篇文章中,我将回顾在临床环境中为 AI 开发者报告准确性的最相关的指标。
准确性到底是什么?
“准确性”不是一个已定义的科学统计术语,但它本质上包含了指数测试(被测试的系统)表现如何的概念,通常与另一个预先存在的系统相比较,在人工智能的背景下,该系统通常是人类医生。“准确性”可以使用替代测量来评估,例如可靠性、灵敏度、精确度和误差率,等等。
指标测试的“准确性”最好通过与黄金标准的无误差测试进行比较来衡量。然而,在医学诊断领域(或其他领域,如放射学或病理学发现),往往没有无错误的黄金标准。因此,应该使用建立“基础事实”的最佳方法,即临床参考标准(CRS)。CRS 可以定义为“一组合格医生的一致意见”,或者更简单地说是“一名合格医生的专家意见”。CRS 的全部意义在于尽可能接*一个完美的系统。在进行临床验证时,CRS 的定义非常重要,因为它会影响任何统计检验的方法、分析和结果。我经常看到发表的关于人工智能系统准确性的文献,相比之下只有一两个医生,这可能还不够。(但是,占用几百个医生的时间,大概是不合理的,所以尽你所能吧!)
有几种统计方法来衡量“准确性”。然而,必须指出的是,大多数统计测试旨在评估二元分类(给定的疾病、条件或生理测量)中仅一个目标条件的测试的“准确性”,而不是大量变量。
或者,测试间比较(kappa 一致性、一致性、可靠性)可用于评估“准确性”,尤其是在缺乏具体定义的目标条件的情况下。然而,这些测试只是衡量 AI 和人类之间的一致程度,并不能反映‘准确性’。不一致并不能告诉你两个测试哪个更好,只能说明他们不一致。因此,我将在本文中忽略这些比较测试。
最后,任何对“诊断准确性”的方法学评估都应尽可能消除偏见,适用于具体情况,透明,并有适当的依据。出于这个原因,产生了报告“诊断准确性”的国际标准,这是一个同行评审的框架,使研究人员能够充分记录和合理化他们的研究和发现。
测量二元分类的“准确度”
在结果是二分的环境中(二元;存在或不存在),没有不确定的结果,可以使用统计二元分类器。
通过将指数测试与黄金标准进行比较,可以创建一个简单的 2x2 表格,称为混淆矩阵或列联表。
Standard confusion matrix
基于真/假正/负的计算可以提供“准确性”的替代测量。
一般来说,系统越“精确”,出现的真阳性和真阴性就越多,假阳性和假阴性就越少。
两个世界碰撞
在报告诊断“准确性”时,医学和数据科学指标之间有相当大的重叠。在临床领域,使用的主要指标是真实柱比率——真实阳性率和真实阴性率(灵敏度和特异性)。在数据科学中,最常报告的指标是真阳性率,即阳性预测值(PPV)和真阳性率(TPR),分别称为精确度和召回率。
传统上,非医疗部门的人工智能系统仅根据精确度和召回率进行评级。这是因为在将模型应用于非临床问题(例如,为文档或信息检索而设计的系统)时,真正的负面因素可能并不重要。然而,当将人工智能应用于医疗情况时,真正的负面因素必须包括在你的统计分析中。
精度
精确度(绿色单元格)是对阳性结果与相关性的度量,也称为阳性预测值(PPV)。
其计算方法如下:
精度= TP / (TP + FP)
Precision
当黄金标准完全没有误差时,精确度是一种有用的“准确度”衡量标准。然而,当金本位制可能出现错误时,必须小心谨慎。这是因为指数测试实际上可能更“准确”(例如,人工智能比人类医生更好*),但因为它只是与 CRS 进行比较,指数测试产生的任何真阳性都可能被错误地归类为假阳性,从而人为地降低了报告的精确度。医生的一致意见是有癌症,而实际上没有。人工智能系统正确地说没有癌症。在这种情况下,AI 系统是正确的,但因为我们只是将结果与医生的不正确共识意见进行比较,所以 AI 系统的精度受到了负面影响)。*
召回/灵敏度
回忆(红细胞)是对正确阳性结果的比例的测量,也被称为真阳性率,或灵敏度。
其计算方法如下:
召回= TP / (TP + FN)
Recall
只有当黄金标准是无误差的,召回/灵敏度才能真正有用,因为它假设黄金标准的所有阳性结果确实是阳性的。如果一个人是不正确的,一个诊断实际上是一个真正的否定,那么报告召回将被人为地减少。
值得注意的是,精确度和召回率/灵敏度都没有考虑真正的负面因素,因此不能提供“准确性”的完整描述。出于这个原因,传统的数据科学的精确度和召回率指标不足以在临床环境中评估准确性。记住——“你没有癌症”是一个真正的否定,无论是精确度还是召回率都不能告诉我们任何关于人工智能系统是否能做出这种声明的事情。
特异性
特异性(黄色细胞)是对正确阴性结果的比例的测量,也称为真阴性率。
其计算方法如下:
特异性= TN / (TN + FP)
Specificity
真正的阴性率在诊断测试中至关重要,因为它是衡量指标测试正确否定诊断的频率。这在临床上很重要,因为排除诊断对所需的分类/进一步调查/治疗水*有很大影响,更不用说假阴性对患者的情绪影响了。
然而,只有当金标准产生真阴性时,才能测量真阴性率,而医生在做出临床诊断决定时往往不会这样做。想象一下,医生的鉴别诊断列表必须包括所有可能的阴性诊断,或者放射学报告必须包括所有可能的阴性发现——这几乎是不可能的!在实践中,可以假设,如果医生没有而不是将一个诊断包括在鉴别诊断中,则所有其他可能的诊断都被自动排除。
阴性预测值
阴性预测值(NPV,蓝色单元格)衡量的是与阴性结果的相关性。
其计算方法如下:
NPV = TN / (FN + TN)
Negative predictive value
至于真负率,只有金本位产生真负才能算出来。
具有高 NPV、特异性和敏感性的人工智能系统很可能被批准用于临床。
组合二元分类
ROC 曲线
为每个诊断临界值绘制 1-特异性和敏感性对给出了接收器操作特征曲线(ROC 曲线)。
左上角的曲线越高,诊断测试就越“准确”。
曲线下面积(AUC)给出了诊断测试的区分能力的单一数字指标。
Arbitrary AUC cut-off meanings
当比较两种不同的诊断试验时,AUC 通常比对照金标准比较指数试验更有用,因为它不提供关于试验在裁定或排除诊断或发现方面有多好的信息。还需要进行统计显著性计算(p 值),以便将结果放入上下文中。(我甚至不打算触及支持和反对 p 值的论点!).
如果两条 ROC 曲线不相交,那么一种方法优于另一种方法,因为它在各方面都优于另一种方法。如果两条曲线相交,那么这表明存在一个*衡点,在这个*衡点上,对于某项任务,一个系统比另一个系统好,在这个*衡点之上,另一个系统更好。例如,人工智能系统可能比人类更具体,但人类可能更敏感。这可能表现为两条曲线在两个系统执行两个指标的点上相交。
有趣的是,与完美的黄金标准相比,人工智能系统永远不会有更好的 AUC。这是因为不可能在完美的金本位上有所改进。你所能期望的最好结果是同等的。幸运的是人工智能开发者,但不是病人,人类容易出错!
F1 得分
精确度和召回率的加权*均值(紫色单元)被称为 F1 分数,是机器学习中分类系统的常用度量。
其计算方法如下:
F1 得分= 2x((精确度 x 召回率)/(精确度+召回率))
然而,重要的是,这个分数没有考虑真正的否定(TN)。人工授精系统的阴性率对于确定(诊断“遗漏”率)很重要,因此也应尝试报告特异性和/或 NPV。
可能性和诊断优势比
为了涵盖阳性率和阴性率,需要一个包含检测概率和误报概率的综合单一指标。假阳性是“假警报”,假阴性是“假再确认”。
阳性似然比(LR+ = TPR / FPR)是检测的概率,高 LR+值是包括诊断的良好指标。
负似然比(LR- = FNR / TNR)是虚警的概率,低 LR 值是排除诊断的良好指标。
这两个比率(包括所有 4 个粉红色细胞)可以结合起来形成诊断比值比(DOR ),它是一项测试诊断准确性的量度。
其计算方法如下:
DOR = LR+ / LR- = (TPR/FPR) / (FNR/TNR)
DOR 的优势在于它不依赖于潜在的患病率,是一个不需要统计学意义的单一指标,具有 95%置信区间的简单计算,并且得到医学认可。
效力
测试的有效性可能最接*于“准确性”的定义,因为它是所有情况下指数测试的正确输出比例的度量。
其计算方法如下:
有效性= (TP + TN) / (TP + TN + FP + FN)
然而,有效性受潜在患病率的影响很大,这使得它成为一个较差的统计测试。例如,给定一组灵敏度和特异性,人群中高患病率的疾病比低患病率的疾病更有可能被指数测试诊断出来。因此,成效从不作为单一指标报告,而总是与 PPV 和 NPV 等其他指标一起报告。在测试人工智能系统的情况下,当计算有效性时,极高的流行率可能是一个问题,因为测试的每个案例都有一个诊断。
总结
不符合严格方法标准的研究通常会高估或低估测试性能的指标,因为它们限制了研究结果的适用性。人工智能开发人员可以使用几种统计方法,每种方法都有自己的优点和缺点。在临床环境中验证人工智能系统时,重要的是要考虑是否会报告真正的阴性结果,因为这将影响可以应用哪些统计测试。目前,医生的鉴别诊断、报告或发现不包括所有可能的阴性结果(这将过于详尽),因此必须假设被排除的诊断/发现是阴性的。但是,由于错误/疲劳/知识偏差,这可能会错误地将排除的诊断/发现计算为阴性,从而导致一些错误的结果。相反,如果没有真正的阴性结果,只能推断出精确度、召回率和 F1 值,这不能提供医学相关阴性诊断/发现和遗漏方面的完整情况。
最后的信息是,没有 100%正确的方法来报告人工智能系统在临床环境中的准确性,因为每个人都有自己的怪癖!我的建议是报告 ROC 曲线、AUC 和 DOR——这样你就可以用医学家理解的统计语言涵盖阳性率和阴性率的所有方面。令人欣慰的是,ROC 曲线在机器学习界越来越受欢迎,所以对于那些将你的技能应用于医疗问题的人来说,你将能够让你遇到的医生理解你的结果。
参考文献:
【http://www.stard-statement.org/ 号
*【http://bmjopen.bmj.com/content/6/11/e012799 *
http://www.ifcc.org/ifccfiles/docs/190404200805.pdf
http://gim.unmc.edu/dxtests/roc3.htm
* [## 选择和解释诊断测试|生化医学
诊断检查的范围从从病人的病史和体检中获得的体征和症状到…
www.biochemia-medica.com](http://www.biochemia-medica.com/content/selecting-and-interpreting-diagnostic-tests)*
如果你和我一样对人工智能在医学成像领域的未来感到兴奋,并想讨论这些想法,请联系我们。我在推特@drhughharvey
如果你喜欢这篇文章,点击推荐并分享它会很有帮助。
关于作者:
哈维博士是一名委员会认证的放射科医生和临床学者,在英国国民医疗服务体系和欧洲领先的癌症研究机构 ICR 接受过培训,并两次获得年度科学作家奖。他曾在 Babylon Health 工作,领导监管事务团队,在人工智能支持的分诊服务中获得了世界第一的 CE 标记,现在是顾问放射科医生,皇家放射学家学会信息学委员会成员,以及人工智能初创公司的顾问,包括 Kheiron Medical。
DBSCAN 如何工作,为什么要使用它?
原文:https://towardsdatascience.com/how-dbscan-works-and-why-should-i-use-it-443b4a191c80?source=collection_archive---------0-----------------------
Scikit Learn — Plot Cluster Comparison
首先,这是我在 medium 上的第一个故事,如果我做错了什么,我很抱歉。其次,我的英语不是很流利,那么我可能会犯很多错误,对此我也很抱歉。
简单解释一下我为什么用英语写这篇文章:首先,我需要提高我的英语技能。那么,什么比用英语写课文更好呢?第二,我认为英语文本会比葡萄牙语(我的母语)文本更受欢迎。
我认为当我们尝试去做,犯错误并从中吸取教训的时候,我们就学到了新的东西。
"经验只是我们给自己的错误起的名字."(奥斯卡·王尔德)
好了,开始说 DBSCAN 吧。
带噪声应用的基于密度的空间聚类(DBSCAN) 是一种众所周知的数据聚类算法,常用于数据挖掘和机器学习。
基于一组点(让我们在图中举例说明的二维空间中思考),DBSCAN 根据距离度量(通常是欧几里德距离)和最小点数将彼此靠*的点分组在一起。它还将低密度区域中的点标记为异常值。
参数:
DBSCAN 算法基本上需要两个参数:
eps :指定点之间应该有多*才能被认为是聚类的一部分。这意味着如果两点之间的距离小于或等于该值(eps),则这些点被视为邻居。
minPoints :形成密集区域的最小点数。例如,如果我们将 minPoints 参数设置为 5,那么我们至少需要 5 个点来形成密集区域。
参数估计:
参数估计是每个数据挖掘任务都面临的问题。为了选择好的参数,我们需要了解它们是如何使用的,并且至少对将要使用的数据集有一个基本的了解。
eps :如果选择的 eps 值太小,很大一部分数据将不会被聚类。它将被视为异常值,因为不满足创建密集区域的点数。另一方面,如果选择的值太高,聚类将合并,大多数对象将在同一个聚类中。eps 应该根据数据集的距离来选择(我们可以使用 k-距离图来找到它),但一般来说,较小的 eps 值是更可取的。
minPoints :作为一般规则,最小 minPoints 可以从数据集中的多个维度(D)中导出,因为 minPoints ≥ D + 1。对于有噪声的数据集,较大的值通常更好,并将形成更重要的聚类。minPoints 的最小值必须是 3,但是数据集越大,应该选择的 minPoints 值就越大。
你可以在这里找到更多关于参数估计的信息。
为什么要用 DBSCAN?
DBSCAN 算法应该用于查找数据中的关联和结构,这些关联和结构很难手动找到,但对于查找模式和预测趋势可能是相关的和有用的。
聚类方法通常用于生物学、医学、社会科学、考古学、市场营销、字符识别、管理系统等领域。
让我们考虑一下 DBSCAN 的实际应用。假设我们有一个电子商务,我们想通过向客户推荐相关产品来提高销售额。我们不知道客户到底在寻找什么,但根据数据集,我们可以预测并向特定客户推荐相关产品。我们可以将 DBSCAN 应用于我们的数据集(基于电子商务数据库),并根据用户购买的产品找到聚类。使用此聚类,我们可以发现客户之间的相似之处,例如,客户 A 购买了 1 支笔、1 本书和 1 把剪刀,客户 B 购买了 1 本书和 1 把剪刀,然后我们可以向客户 B 推荐 1 支笔。这只是使用 DBSCAN 的一个小示例,但它可以用于多个领域的许多应用程序。
如何才能轻松实现?
正如我已经写的(提示:不要相信我写的所有东西)DBSCAN 是一个众所周知的算法,因此,您不需要担心自己实现它。您可以使用互联网上可以找到的一个库/包。下面是一个可以找到 DBSCAN 实现的链接列表: Matlab、 R、 R、 Python、 Python 。
我还开发了一个应用程序(葡萄牙语),以教学的方式解释 DBSCAN 如何工作。该应用程序是用 C++编写的,你可以在 Github 上找到它。
参考资料:
1996 年 8 月,北京大学出版社出版。一种基于密度的发现带噪声的大型空间数据库中聚类的算法。在 Kdd (第 96 卷,№34,第 226–231 页)中。
https://en.wikipedia.org/wiki/DBSCAN
应该有多‘深’才称得上深度学习?
原文:https://towardsdatascience.com/how-deep-should-it-be-to-be-called-deep-learning-a7b1a6ab5610?source=collection_archive---------2-----------------------
深度学习现在无处不在。它是 AI 的前沿,每个人似乎都在追求它。
当我们第一次试图理解深度学习的概念时,通常会出现一个问题,
“机器学习模型需要有多深才能被认为是深度学习模型?”
这听起来可能是一个合理的问题。毕竟,在深度学习中,我们正在使用更深更复杂的模型。
事实证明,我们问了一个错误的问题。我们需要从一个不同的角度来看待深度学习,看看为什么。
让我们来看几个深度学习的定义。
“机器学习中的一个子领域,它基于学习多级表示的算法,以便对数据之间的复杂关系进行建模。因此,较高级别的功能和概念是根据较低级别的功能和概念定义的,这样的功能层次结构被称为深度架构”——深度学习:方法和应用。
“概念的层次结构允许计算机通过用简单的概念构建复杂的概念来学习它们。如果我们画一个图表来显示这些概念是如何建立在彼此之上的,那么这个图表是很深的,有许多层。为此,我们将这种方法称为人工智能深度学习。”—深度学习。麻省理工学院出版社,伊恩·古德菲勒,约舒阿·本吉奥,亚伦·库维尔。
这些谈到了一个叫做分层特征学习的概念。为了理解它,让我们后退一步,看看深度学习模型是如何工作的。
让我们以卷积神经网络为例。
卷积神经网络是深度学习的一个主要例子。他们受到了视觉皮层(大脑中处理视觉输入的区域)中神经元排列方式的启发。这里,并不是所有的神经元都与来自视野的所有输入相连。相反,视野是由相互部分重叠的神经元群(称为感受野)组成的。
卷积神经网络(CNN)以类似的方式工作。它们使用数学卷积算子(*似于感受野的工作方式)处理输入的重叠块。
A Convolutional Neural Network
典型 CNN 的第一卷积层使用一组卷积滤波器来从输入图像中识别一组低级特征。这些识别的低级特征然后被汇集(来自汇集层)并作为输入提供给下一个卷积层,该卷积层使用另一组卷积滤波器从先前识别的低级特征中识别一组高级特征。这对于几个层继续进行,其中每个卷积层使用来自前一层的输入来识别比前一层更高级别的特征。最后,最后一个卷积层的输出被传递给一组完全连接的层,用于最终分类。
本质上,CNN 的卷积滤波器试图首先识别较低级别的特征,并使用这些识别的特征通过多个步骤逐渐识别较高级别的特征。
这就是我们前面讲的分层特征学习,是深度学习的关键,也是它与传统机器学习算法的区别所在。
Hierarchical Feature Learning
深度学习模型(如卷积神经网络)不会试图一次理解整个问题。
即,它不像传统算法试图做的那样,试图一次掌握输入的所有特征。
它所做的是逐段查看输入,并从中导出较低级别的模式/特征。然后,它使用这些较低级别的特征来逐步识别更高级别的特征,通过许多层,分等级地。
这使得深度学习模型能够通过从简单模式逐步建立复杂模式来学习复杂模式。这也允许深度学习模型更好地理解世界,它们不仅“看到”特征,还看到这些特征是如何建立的层次结构。
当然,必须分层次地学习特征意味着模型中必须有许多层。这意味着这样的模型将是“深”的。
这让我们回到了最初的问题:这并不是说我们将深度模型称为深度学习。那就是,为了实现分层学习,模型需要是深度的。深度是实现分层特征学习的副产品。
分层特征学习允许深度学习模型不像传统机器学习模型那样具有“性能高原”。
The (lack of) Plateau in Performance in Deep Learning
那么,我们如何鉴别一个模型是深度学习模型还是现在?
简单来说,如果模型使用分层特征学习——首先识别较低级别的特征,然后在此基础上识别较高级别的特征(例如,通过使用卷积滤波器)——那么它就是深度学习模型。如果不是,那么无论你的模型有多少层,它都不被认为是深度学习模型。
这意味着具有 100 个全连接层(并且只有全连接层)的神经网络不会是深度学习模型,但具有少量卷积层的网络会是。
如果你想了解更多关于深度学习的知识,可以在亚马逊查阅我的书:Build Deeper:Deep Learning 初学者指南 。
原载于 2017 年 9 月 5 日 www.codesofinterest.com。
牙科诊所如何解决取消预约的问题
原文:https://towardsdatascience.com/how-dental-clinics-are-solving-their-cancellation-epidemic-382e0131c0b3?source=collection_archive---------5-----------------------
牙科医学的学生在学校学习口腔卫生和牙科的各个方面,但有一点他们没有让你做好准备,那就是你会因为预约取消的瘟疫而浪费多少空闲时间。
事实证明,大约 20%的牙科预约在最后一刻被取消。在一些诊所,这个数字可能高达 50%,特别是当考虑到没有出现时。其中至少 75%仍未填补,这相当于该行业每年损失约 114 亿美元的收入。
当我们检查这种患者行为背后的原因时,我们可以看到许多患者在提前两到四周预约时取消预约——任何超过四周的预约被取消的风险都要高得多。
这是合乎逻辑的,因为大多数人的时间表主要是由他们不可预测的老板决定的,他们的孩子忘记告诉他们即将举行的家长会或在学校太早到来的最后期限等等。
取消的另一个预测因素是保险类型,它与社会经济地位密切相关。来自有公共保险的低收入家庭的病人是臭名昭著的失约者。处罚和一些战术服务的引入,如旨在提醒患者预约的灯塔 360 和解决方案 Reach ,在一定程度上改变了这种行为。然而,他们设法减少了失约,但没有取消,因为以前可能失约的人现在只需提前一两天取消。
这些行为上的变化,虽然为这些公司提供了成功的声称,但对该行业仍然是无益的,因为这些被取消的任命仍然在很大程度上是空缺的。
一家总部位于波士顿的健康科技初创公司对这个行业之谜提出了一个罕见的新观点。EarlierCare 的目标是通过应用机器学习算法来研究预订模式和取消约会的行为,从而减少取消,接*零。该数据将允许牙科诊所看到其最频繁取消的时间段的热图,并被给予关于如何修改其时间表中这些红色区域的可用性以尽可能减少它们的建议。
除了采用人工智能, EarlierCare 还旨在通过创建一个*台来减少取消预约的情况,该*台将通过一个应用程序向现有患者和新患者群“转售”这些新开放的位置。
然后,患者可以标记出他们最想看牙医的日期和时间,从而创建一个个性化的提醒日历,在取消预约后突然有空的时候通知他们。这为患者和诊所创造了双赢的局面,因为患者现在可以获得更方便的预约,他们也更确定自己能遵守。诊所的空缺职位会自动从现有数据库和外部早期护理患者库中填补。
无论机器学习发展到什么程度,不确定性都会存在。但通过研究我们的行为,我们可以利用习惯的力量,最终通过看似随机的万亿字节数据,帮助解决几十年的老问题。
费德勒是如何击败纳达尔的
原文:https://towardsdatascience.com/how-did-federer-beat-nadal-aus-open-17-90b956137610?source=collection_archive---------3-----------------------
对费达尔游戏玩法的深入探究
对于那些生活在岩石下的人来说,今年 1 月 29 日早些时候,费德勒和纳达尔之间的澳大利亚网球公开赛决赛在墨尔本举行。费德勒在史诗般的五盘比赛中胜出6–4 3–6 6–1 3–6 6–3,这是为电影编写的完美跷跷板!两位球员在整个比赛中都表现出了令人难以置信的毅力,特别是因为他们都在长期受伤后复出。对罗杰和拉法来说,这标志着一个非凡游戏赛季的开始,对我来说,有很多数据需要分析!
我一直想对费德尔的竞争做一次真正的深度挖掘,澳大利亚公开赛决赛似乎是一个不错的起点。多亏了令人难以置信的图表项目,世界可以对最*的大部分比赛进行逐镜头分析。对我们这样的网球爱好者来说绝对是金牌;)
在这篇博客中,我们将会看到拉法糟糕的正手击球,罗杰漂亮的反手回击以及这之间的一切。他们在球场上的发球有多好,身体发球对罗杰有效吗,拉法是从哪里完成长途拉力赛的?罗杰的反手击球被讨论了很多,他是打得很深,还是打在底线上?谁控制了反弹,谁处理压力更好,等等!
拍摄制作
让我们看看他们的投篮——意料之中的正手触地球和反手触地球领先,其次是反手削球和其他击球。
有趣的是,拉法比罗杰打更多的正手球,而罗杰比拉法打更多的反手球——很可能是纳达尔掩盖他的反手球的结果。很快会有更多的消息:)
按拉力赛长度计算的胜率
纳达尔的一个著名策略是延长反弹,迫使对手失误。这对罗杰不利吗?
左边是罗杰·费德勒通过致胜和诱导强迫失误赢得的分数(来自纳达尔),右边是拉法。纳达尔的策略看起来肯定是有效的(6 杆后明显增加),强迫失误让他比胜利者获得更多的分数!在费德勒这边,他的获胜者是在一个不同的联盟,在 6 次出手后为他赢得了超过 30%的分数。
谁主宰了!
分数显示这场比赛打得很好,两局轮流进行。然而,我想看看双方球员在比赛中的统治力,比赛分数是一个很容易衡量的变量。
优势得分:我没有深入研究拉力赛长度(一分有多难!),只看在那个特定游戏中赢得的积分份额。假设罗杰以 40 比 15 赢得了比赛——罗杰的统治力得分是 0.8,而拉法的统治力得分是 0.2。
一个有趣的统计数据——罗杰在发球比赛中的*均统治力为 0.71,而纳达尔为 0.66。费德勒的发球稍微轻松了一点!
这是两个球员每场比赛的优势分数,由于发球的变化,会出现预期的曲折。看看第 6-8 场比赛,罗杰在第一盘击败了纳达尔,第 11-14 场比赛,纳达尔连续 4 场比赛!最后,在第五盘,罗杰最初被打破(勉强),但他回来赢得了最后 4 场比赛的小跑!
发球
作为玩家游戏性的最重要因素之一,你的发球决定了接下来的对打风格!我已经分析了他们的发球策略,他们是否在寻找更短的反弹,以及他们的第一次和第二次发球有多不同。
显然罗杰有更好的一发(22%的一发得分率!),但是拉法在第二次发球时挡住了它(用那一脚!).
发球方向——发球方向分为三大类,“宽”、“身体”和“T”。看看他们在*分(左边)和分庭(右边)的百分比。
x 轴是发球的自然顺序,deuce_wide 在最左边,ad_wide 在最右边。
重要的是要记住,罗杰打右手,而拉法打左手,以了解模式。而罗杰在 Deuce T 和 Ad Wide 打反手,拉法在 Deuce T 和 Ad T 打反手,罗杰投篮 60%发球给拉法的反手,拉法投篮 50%以上给罗杰的反手。该模式几乎是对称的两个*分和广告法院!
还要注意罗杰几乎从不在身体上发球,但是拉法在 30%的时候都在这样做——有意思!它有分红吗?
服务器在 3 分或以下赢得的分数百分比
对于纳达尔来说,向身体发球并不是一个很大的优势(在短分上)——这几乎类似于在*分场上向反手发球,以及在 Ad 场上最糟糕的方向。对于费德勒来说,所有方向的短分都几乎相等!
现在让我们把注意力转移到他们发球得分的进程上——发球方需要多长时间才能结束得分?
正如我们前面看到的,罗杰的第一次发球非常有效!由于拉法的二次发球胜率更高,我本以为这些反弹会持续更短时间——两者完全相等!每秒 5.3 次拉力赛——这可能是纳达尔用他的触地击球指挥拉力赛的结果。我们再深入一点,好吗?
左边的图表示第一次发球得分与对打得分的百分比,右边的图表示第二次发球得分。一个非常有趣的之字形图案是可见的,因为当球在他的球场上时,两个球员都占上风!根据我们之前的观察,拉斐尔在第二次发球时领先,而罗杰在第一次发球时也领先。
第一次发球的稳步下降表明,得分越长,对他不利的可能性就越大——如果这是一次强有力的发球,得分应该更早结束,对打仍然存在的事实表明回球者占了上风!
接发球
足够的服务,让我们得到一些好的回报!我们将会看到在回球时打了哪些球,从哪些位置以及回球的深度。
根据报道,费德勒在反手回击方面占据上风,而拉法在正手回击方面略微领先罗杰。不要看太多的切片和芯片回报,数量太少,没有任何洞察力。
我们已经看到了纳达尔令人惊讶的高身发球,让我们看看费德勒如何反应!
罗杰·费德勒几乎 50%的身体发球胜利——难以置信!拉法,请发球出界!纳达尔在身体上也有 50%的胜率,但他们总共只占 6 次发球(对洞察力来说微不足道)。
好的回报通常是快速深度的,这使服务器处于惊讶状态。弱小的矮个子通常很容易被派出,这就是为什么两个球员都更喜欢发球而不是对手的反手。
图中显示的是费德勒(左)和纳达尔(右)的短回和深回的百分比。费德勒在所有击球中都有更深的回球,尤其是正手击球!很明显,拉法应该在回报上下功夫,这将是费德勒发球 3 分高比例的一个重要因素。
触地击球
发球发了,接发球发了,我们还是要得分,对吗?让我们关注一下两位选手的击球方向——费德勒更多的直拍,纳达尔更多的正手?
蓝条代表斜线球、中线球、底线球、内外球的正手击球百分比。费德勒在左,纳达尔在右
我对两位球员如此高的斜线球命中率感到惊讶!正如所料,当球打在中间时,反手击球的比例较高,这表明反手击球的风险较低。另一个非常令人惊讶的数据是——相比纳达尔的 27 次(12%),罗杰打出了 42 次内翻正手(20%)。你可能永远也猜不到这一点,让我们看看这些内外颠倒是否能有效地完成这一点?
为了计算最后一击的有效性,我考虑了三个因素——如果这一击是致胜的或者导致了对手的被迫失误(在接下来的一击中),则为+1,如果这一击被证明是非被迫失误,则为-1。因此,如果拉法打了 5 次反手得分,其中 2 次是致胜球,2 次是罗杰的诱导失误,1 次是拉法的非受迫性失误,他的反手得分将是(2+2–1)/5 = 0.6
让我们剖析一下上面的情节,它给了我们很多启示!
- 罗杰的正手斜线球还可以,但是拉法的失误有点多
- 中路的正手一点也不漂亮,尤其是拉法(6 次非受迫性失误,1 次致胜)。
- 嗯,拉法的正手下网一如既往的完美(香蕉射谁了?).罗杰因为他的非受迫性失误受到了很多处罚,显示了他的表现有多不稳定!
- 从内外来看,罗杰可能命中更多,但在这方面没有人能击败纳达尔!
- 反手向下-中间也不好看。基本不要中间击球!
- 费德勒的反手直拍再次显示了他的连胜(4 次胜利,2 次受迫性失误和 3 次非受迫性失误)
在最后的镜头中有更多的视觉效果
Forehand Finishing Shots
Backhand Finishing Shots
两张饼状图都显示了费德勒非受迫性失误的优势,也显示了纳达尔是如何从受迫性失误中获得异常高的分数的!
网玩
随着费德勒*年来在网球比赛中大获全胜,纳达尔成为一名底线球员,这几乎是一个机会!
一个有趣的统计数据是,当费德勒决定上网时,反弹是多么短暂。我完全可以想象费德勒发球,上前截击,然后纳达尔将球打入网内——4 次对打!
我告诉过你!
压力点
现在我们知道费德勒的比赛有多冒险了,他是如何在第五盘坚持住的,尤其是在休息的时候!我试图理解压力点,我的定义是当发球方在发球时落后一分以上(例如 0-30 或 15-40),或者当他落后一个破发点(40-AD)时,就称为“压力点”。
这是压力点的图表。
Pressure points and Pressure points saved, Federer on left, Nadal on right
通过之字形曲线可以看到设定的优势,两条曲线之间的差距变成了失去的关键破发点!在第一盘,罗杰没有面对一个压力点,这与纳达尔在第四盘的情况类似。第五盘非常有趣——尽管在一个压力点上输了,但费德勒反击了,让纳达尔承受了巨大的压力(13 分!).最终,罗杰在最后 4 场比赛中连胜,夺得冠军:)
结论
- 罗杰打出了更多的致胜球和更多的非受迫性失误。五花肉的游戏性!
- 罗杰的发球比拉法更有统治力(0.71 比 0.66)
- 罗杰的第一次发球更有效,他发球得分率高
- 拉法有一个更强的二次发球,在比赛中一直表现得更好。
- 两名球员都在对方的背后发球,拉法在罗杰的身体上发了相当多的球。
- 为身体服务对拉法来说没有用——失去了 50%的分数
- 两位球员都有很高的斜线球命中率,罗杰比拉法更多的内外球。令人惊讶!
- 拉法在所有射门类型上都有更好的得分——罗杰犯了太多的错误。
- 罗杰打了一场非凡的落网球,在离网 4.5 个回合内完成了比赛。
- 直到第五盘,两位选手对压力点的处理几乎是一样的。罗杰全力以赴,最后一盘拉法连得 13 分,最终他屈服了!
总而言之,这个分析是更多分析的起点——我很想看看这几年来两位球员是如何处理最后一击、发球方向和压力点的!
2008 年温布尔登网球公开赛应该讲述一个不同的故事,对吧?;)
我们如何在一小时内构建图书推荐系统第二部分— k *邻和矩阵分解
原文:https://towardsdatascience.com/how-did-we-build-book-recommender-systems-in-an-hour-part-2-k-nearest-neighbors-and-matrix-c04b3c2ef55c?source=collection_archive---------0-----------------------
在的上一篇文章中,我们看到了如何使用简单的相关技术,根据图书用户的评分记录,在他们之间建立一个相似性的衡量标准。在本帖中,我们将展示如何使用这些相似性度量向读者提出建议。
基于 k *邻的协同过滤
kNN 是一种机器学习算法,可以根据常见的书籍评级来找到相似用户的聚类,并使用前 k 个最*邻居的*均评级进行预测。例如,我们首先在矩阵中显示评级,矩阵中每个项目(书籍)占一行,每个用户占一列,如下所示:
然后,我们找到具有最相似的用户参与度向量的 k 个项目。在这种情况下,项目 id 5 的最*邻居= [7,4,8,…]。现在让我们将 kNN 实现到我们的图书推荐系统中。
数据
我们使用上次使用的相同的图书数据:它由三个表组成:ratings、books info 和 users info。我从这里下载了这三张表。
评分信息
用户信息
图书信息
为了确保统计上的显著性,我们将只看流行书籍
为了找出哪些书受欢迎,我们需要结合书籍数据和评分数据。
然后,我们按书名分组,并为总评分创建一个新列。
我们现在将评分数据与总评分计数数据相结合,这正好给了我们过滤掉不太出名的书所需的数据。
让我们来看看总评分的统计数据:
中值书只被评价过一次。让我们看看分布的顶端:
大约 1%的书获得了 50 或更多的评分。因为我们的数据中有如此多的书,我们将把它限制到前 1%,这将为我们提供 2713 本独特的书。
仅过滤美国和加拿大的用户
为了提高计算速度,并避免遇到“内存错误”问题,我将把我们的用户数据限制在美国和加拿大。然后将用户数据与评级数据和总评级计数数据相结合。
实现 kNN
我们将表格转换为 2D 矩阵,并用零填充缺失的值(因为我们将计算评级向量之间的距离)。然后,我们将矩阵数据帧的值(等级)转换成一个稀疏矩阵,以便进行更有效的计算。
寻找最*的邻居
我们使用带有 sklearn.neighbors. 的无监督算法我们用来计算最*邻的算法是“brute”,我们指定“metric=cosine”这样算法就会计算评分向量之间的余弦相似度。最后,我们拟合模型。
测试我们的模型并提出一些建议:
在这一步中,kNN 算法测量距离以确定实例的“接*度”。然后,它通过查找最*的邻居对实例进行分类,并在邻居中挑选最受欢迎的类。
完美!《绿色一英里》系列书籍绝对值得推荐,一本接一本。
使用矩阵分解的协同过滤
Source: ohAI
矩阵分解只是一个玩弄矩阵的数学工具。矩阵分解技术通常更有效,因为它们允许用户发现用户和项目(书籍)之间交互的潜在(隐藏)特征。
我们使用奇异值分解(SVD)——一种矩阵分解模型来识别潜在因素。
与 kNN 类似,我们将美加用户评级表转换为 2D 矩阵(这里称为效用矩阵),并用零填充缺失值。
然后我们转置这个效用矩阵,这样书名变成了行,用户标识变成了列。在使用 TruncatedSVD 对其进行分解后,我们将其拟合到模型中进行降维。这种压缩发生在数据帧的列上,因为我们必须保留书名。我们选择 n_components = 12 作为 12 个潜在变量,您可以看到,我们的数据维度已经从 40017 X 2442 显著减少到 2442 X 12。
我们为最终矩阵中的每个图书对计算皮尔逊相关系数。为了与 kNN 的结果进行比较,我们选择了同一本书“绿色里程:科菲的手(绿色里程系列)”,以找到与它具有高相关系数(在 0.9 和 1.0 之间)的书籍。
你有它!
不算太寒酸!我们的系统可以打败亚马逊的,你说呢?看标题截图!
参考:音乐推荐
我们如何在一小时内建立图书推荐系统第一部分——基础
原文:https://towardsdatascience.com/how-did-we-build-book-recommender-systems-in-an-hour-the-fundamentals-dfee054f978e?source=collection_archive---------3-----------------------
几乎每个人都有过这样的网上体验:网站为了未来的销售或持续的流量而提供个性化的推荐。亚马逊告诉你“买了这个商品的顾客也买了”,Udemy 告诉你“看过这个课程的学生也看过”。2009 年,网飞向一个开发团队颁发了 100 万美元的奖金,奖励其将公司推荐系统的准确率提高了 10%的算法。
如今,构建推荐系统需要分析、机器学习和软件工程方面的专业知识,学习新的技能和工具既困难又耗时。在这篇文章中,我们将从头开始,讲述 Python 中的一些基本技术和实现。在以后的文章中,我们将介绍更复杂的方法,如基于内容的过滤和基于协作的过滤。
所以,如果你想从头开始学习如何构建推荐系统,那就开始吧。
数据
Book-Crossings 是由蔡-尼古拉斯·齐格勒编制的图书评分数据集。它包含 90,000 个用户对 270,000 本书的 110 万个评级。等级从 1 到 10。
该数据由三个表组成:评级、图书信息和用户信息。我从这里下载了这三张表。
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltbooks = pd.read_csv('BX-Books.csv', sep=';', error_bad_lines=False, encoding="latin-1")
books.columns = ['ISBN', 'bookTitle', 'bookAuthor', 'yearOfPublication', 'publisher', 'imageUrlS', 'imageUrlM', 'imageUrlL']
users = pd.read_csv('BX-Users.csv', sep=';', error_bad_lines=False, encoding="latin-1")
users.columns = ['userID', 'Location', 'Age']
ratings = pd.read_csv('BX-Book-Ratings.csv', sep=';', error_bad_lines=False, encoding="latin-1")
ratings.columns = ['userID', 'ISBN', 'bookRating']
评级数据
评级数据集提供了用户对图书的评级列表。它包括 1,149,780 条记录和 3 个字段:userID、ISBN 和图书评级。
收视率分布
收视率分布很不均匀,绝大多数收视率都是 0。
书籍数据
图书数据集提供了图书的详细信息。它包括 271,360 条记录和 8 个字段:ISBN、书名、图书作者、出版商等。
用户数据
该数据集提供用户人口统计信息。它包括 278,858 条记录和 3 个字段:用户 id、位置和年龄。
年龄分布
最活跃的用户是那些 20-30 岁的人。
基于评级计数的建议
ISBN 为“0971880107”的书获得了最多的评分。我们来看看是什么书,前 5 都有哪些书。
在这个数据集中获得最多评分的书是里奇·沙佩罗的《野性的阿尼姆斯》。这五本书有一个共同点,那就是它们都是小说。这位推荐者认为小说很受欢迎,可能会获得更高的收视率。而如果有人喜欢《可爱的骨头:一部小说》,我们大概也应该向他(或她)推荐《野阿尼姆斯》。
基于相关性的建议
我们使用皮尔逊相关系数来衡量两个变量之间的线性相关性,在我们的例子中,两本书的评级。
首先,我们需要找出*均评分,以及每本书获得的评分数。
观察结果:
在这个数据集中,获得最多评价的书根本没有得到很高的评价。因此,如果我们使用基于评分的推荐,我们肯定会犯错误。所以,我们需要一个更好的系统。
为确保统计显著性,评级低于 200 的用户和评级低于 100 的图书被排除在外。
评级矩阵
我们将评级表转换成 2D 矩阵。这个矩阵将是稀疏的,因为不是每个用户都对每本书进行评级。
让我们来看看哪些书与排名第二的书《可爱的骨头:一部小说》相关。
引用维基百科的话:“这是一个十几岁的女孩在被强奸和谋杀后,在她的个人天堂看着她的家人和朋友努力继续他们的生活,同时她接受了自己的死亡”。
我们获得了图书的 ISBNs,但是我们需要找出书名,看看它们是否有意义。
让我们从上面高度相关的列表中选择三本书来考察:《保姆日记:一部小说》、《飞行员的妻子:一部小说》和《心在哪里》。
《保姆日记》讽刺了曼哈顿上层社会在照看孩子的人眼中的形象。
《可爱的骨头》的作者是同一个人,《飞行员的妻子》是 Shreve 非正式三部曲中的第三部小说,故事发生在新罕布什尔州海岸的一座大型海滨别墅里,这里曾是一座修道院。
《心在何处》详细描述了美国低收入家庭和寄养儿童的苦难。
这三本书听起来会与《可爱的骨头》高度相关。看来我们的关联推荐系统正在发挥作用。
摘要
在这篇文章中,我们学习了如何设计简单的推荐系统,你可以在一个小时内实现并测试它。这篇博文的 Jupyter 笔记本版本可以在这里找到。如果你想了解更多,Xavier Amatriain 的讲座是一个很好的起点。
在未来的帖子中,我们将介绍更复杂的方法,如基于内容的过滤、k-最*邻、协作过滤,以及如何提供推荐和如何测试推荐系统。在此之前,享受推荐!
我的训练和测试数据有多相似?
原文:https://towardsdatascience.com/how-dis-similar-are-my-train-and-test-data-56af3923de9b?source=collection_archive---------0-----------------------
了解机器学习模型可能失败的场景
他们总是说不要拿苹果和橘子比较。但是如果我们比较一种苹果和橘子的混合物和另一种苹果和橘子的混合物,但是分布是不同的呢?还能比吗?你会怎么做?
在现实世界的大多数情况下,你会遇到后者。
这在数据科学中经常发生。在开发机器学习模型时,我们遇到了这样一种情况,我们的模型在训练数据上表现很好,但在测试数据上却无法达到同样的性能。
我这里指的不是过度适应。即使我选择了基于交叉验证的最佳模型,但它在测试数据上的表现仍然很差,测试数据中仍有一些我们没有捕捉到的固有模式。
想象一下这样一种情况,我正试图模拟顾客的购物行为。现在,如果我的训练和测试数据如下所示,那么您可以清楚地看到这里的问题。
与测试相比,该模型将针对*均年龄较低的客户进行培训。这个模型从未见过像测试数据中那样的年龄模式。如果年龄是你的模型中的一个重要特征,那么它在测试中就不会有好的表现。
在这篇文章中,我将谈论如何识别这个问题,以及我们如何解决它的一些原始想法。
协变量移位
我们可以更正式地定义这种情况。协变量是指我们模型中的预测变量。协变量移位是指预测变量在训练和测试数据中具有不同**特征(分布)**的情况。
在有许多变量的现实世界问题中,协变量的变化很难发现。在这篇文章中,我试图讨论一种方法来识别这一点,以及如何解释这种训练和测试之间的转换。
基本思路
如果存在协变量偏移,那么在混合训练和测试时,我们仍然能够以良好的准确性对每个数据点的来源(无论是来自测试还是训练)进行分类。
我们来了解一下原因。考虑上面的例子,其中年龄是测试和训练之间的漂移特征。如果我们采用类似随机森林的分类器,并尝试将行分类为测试和训练,年龄将成为分割数据时非常重要的特征。
实施
现在,让我们尝试将这个想法应用到真实的数据集上。我用的是这次 kaggle 比赛的数据集:https://www . ka ggle . com/c/Porto-seguro-safe-driver-prediction/data
第一步:数据预处理
我们必须首先清理我们的数据,估算所有缺失值,并对所有分类变量进行标签编码。对于这个数据集,不需要这一步,所以我跳过了这一步
#loading test and train data
train = pd.read_csv(‘train.csv’,low_memory=True)
test = pd.read_csv(‘test.csv’,low_memory=True)
Step2: 表示产地来源
我们必须在训练和测试数据中添加一个特征**‘is _ train’**。该特性的值对于测试为 0,对于序列为 1。
*#adding a column to identify whether a row comes from train or not
test[‘is_train’] = 0
train[‘is_train’] = 1*
第三步: 训考结合
然后我们必须把两个数据集结合起来。此外,由于训练数据具有测试中不存在的原始“目标”变量,我们也必须删除该变量。
***注意:*对于您的问题,“目标”将被您的原始问题的因变量的名称所替代
*#combining test and train data
df_combine = pd.concat([train, test], axis=0, ignore_index=True)
#dropping ‘target’ column as it is not present in the test
df_combine = df_combine.drop(‘target’, axis =1)y = df_combine['is_train'].values #labels
x = df_combine.drop('is_train', axis=1).values #covariates or our independent variablestst, trn = test.values, train.values*
第四步: 构建并测试一个分类器
出于分类的目的,我使用随机森林分类器来预测组合数据集中每一行的标签。您也可以使用任何其他分类器。
*m = RandomForestClassifier(n_jobs=-1, max_depth=5, min_samples_leaf = 5)
predictions = np.zeros(y.shape) #creating an empty prediction array*
我们使用分层的 4 倍,以确保每个类别的百分比得到保留,并且我们一次覆盖全部数据。对于每一行,分类器将计算它属于训练的概率。
*skf = SKF(n_splits=20, shuffle=True, random_state=100)
for fold, (train_idx, test_idx) in enumerate(skf.split(x, y)):
X_train, X_test = x[train_idx], x[test_idx]
y_train, y_test = y[train_idx], y[test_idx]
m.fit(X_train, y_train)
probs = m.predict_proba(X_test)[:, 1] #calculating the probability
predictions[test_idx] = probs*
第五步: 解释结果
我们将输出我们的分类器的 ROC-AUC 度量,作为对该数据有多少协变量偏移的估计。
如果分类器能够以良好的准确性将行分类到训练和测试中,我们的 AUC 得分应该在较高的一侧(大于 0.8)。这意味着训练和测试之间的强协变量转移。
*print(‘ROC-AUC for train and test distributions:’, AUC(y, predictions))# ROC-AUC for train and test distributions: 0.49944573868*
AUC 值为 0.49 意味着没有明显的协变量变化。这意味着大多数观察值来自不特定于测试或训练的特征空间。
由于这个数据集取自 Kaggle,所以这个结果是意料之中的。因为在这种竞争中,数据集是经过精心策划的,以确保这种变化不存在。
在我们开始建模之前,可以对任何数据科学问题重复这一过程,以检查协变量的变化。
超越
在这一点上,我们要么观察协变量转移,要么不观察。那么,我们可以做些什么来提高测试数据的性能呢??
- 漂移特征的丢弃
- 使用密度比估计的重要性权重
漂移特征的丢弃:
***注:*此方法适用于你见证协变量移位的情况。
- 从我们在上一节中构建的随机森林分类器对象中提取特征重要性
- 顶部的特征是那些正在漂移并导致转变的特征
- 从顶部的功能中,一次放下一个变量,构建您的模型并检查其性能。收集所有不会降低性能的特性
- 现在,在构建最终模型时,删除所有这些功能
Bucketing of features
我们的想法是移除红色桶中的要素
使用密度比估计的重要性权重
***注:*无论是否存在协变量移位,该方法都适用。
让我们来看看我们在上一节中计算的预测。对于每个观察值,该预测告诉我们根据我们的分类器它属于训练数据的概率。
*predictions[:10]
----output-----array([ 0.34593171])*
因此,对于第一行,我们的分类器认为它属于概率为. 34 的训练数据。我们姑且称之为 P(火车)。或者我们也可以说它有 0.66 的概率来自测试数据。我们姑且称之为 P(测试)。魔术是这样的:
对于每一行训练数据,我们计算一个系数 w = P(测试)/P(训练)。
这个 w 告诉我们训练数据的观察值与我们的测试数据有多接*。下面是笑点:
我们可以在我们的任何分类器中使用这个 w 作为样本权重,以增加这些看起来与我们的测试数据相似的观察值的权重。直觉上,这是有意义的,因为我们的模型将更侧重于从观察中捕捉模式,这似乎类似于我们的测试。
这些重量可以使用下面的代码来计算。
*plt.figure(figsize=(20,5))
predictions_train = predictions[len(tst):] #filtering the actual training rows
weights = (1./predictions_train) — 1\.
weights /= np.mean(weights) # Normalizing the weightsplt.xlabel(‘Computed sample weight’)
plt.ylabel(‘# Samples’)
sns.distplot(weights, kde=False)*
您可以传递在模型拟合方法中计算的权重,如下所示:
*m = RandomForestClassifier(n_jobs=-1,max_depth=5)m.fit(X_train, y_train, ***sample_weight=weights***)*
Weights distribution for the training observations
以上情节中需要注意的一些事情:
- 观察值的权重越高,与测试数据越相似
- 几乎 70%的训练样本具有接* 1 的样本权重,因此来自对训练或测试高密度区域不是非常特定的特征空间。这与我们计算的 AUC 值一致
结束注释
我希望现在你对协变量转换有了更好的理解,你可以如何识别它并有效地对待它。
参考
[1] Shimodaira,H. (2000 年)。通过加权对数似然函数改进协变量移位下的预测推断。统计规划与推论杂志,90,227–244。
【2】比克尔,S. 等 (2009)。协变量移位下的鉴别学习。机器学习研究杂志,10,2137–2155
https://github.com/erlendd/covariate-shift-adaption
[4]所用数据集的链接:https://www . ka ggle . com/c/Porto-seguro-safe-driver-prediction/data
数据科学家如何提出正确的问题?
原文:https://towardsdatascience.com/how-do-data-scientists-ask-the-right-questions-6a5d7b89cdd9?source=collection_archive---------10-----------------------
我喜欢提问。而且,多年来,这份爱让我不仅能很好地提问,还能问出正确的问题。
通过在大学里学习古希腊语和拉丁语,我非常熟悉一些最好的魔鬼拥护者:苏格拉底、亚里士多德和柏拉图;在获得图书馆和信息科学硕士学位的同时,我开始应用批判性思维大师的学术研究框架,如玛西娅·贝茨和布伦达·德文;现在,在熨斗学院的数据科学沉浸式课程中,我开始学习数据科学的提问方式。
那么,对于一个数据科学家来说,问正确的问题是什么样的呢?
如果你花几秒钟在谷歌上搜索“问正确的问题数据”,你会检索到几十个“问这几个问题,你不会出错”的想法。这些妙趣横生的文章更有可能用下图这样的图表来修饰:
Image from Piyanka Jain‘s piece “3 Key Analytics Questions to Ask Your Big Data” (2012).
这些图片通常概述的步骤大致如下:1)就衡量成功的关键绩效指标达成一致(上文 Jain 的衡量框架),2)定义这些关键绩效指标(上文 Jain 的投资组合分析),以及 3)确定利益相关方(上文 Jain 的客户分析)。一旦你做到这一切,瞧!你拥有一切你需要的东西来精心制作一个值得数据驱动的探索的真诚问题。
虽然回答上述问题应该是任何数据驱动的分析的一部分,但简单地回答这些问题似乎不符合数据科学家在“做”数据科学时所做的事情。那么,我们带来了什么额外的东西呢(当然,除了我们对微积分、线性代数、统计学、概率和编程的惊人理解之外)?
嗯,在这个领域呆了整整两个星期之后,我觉得有资格说,数据科学提问方式的独特力量来自于……等等……科学!
(不,我不是说数据科学家整天站在实验室里,在显微镜下看着比特和字节。我的意思是,数据科学家通过使用传统上与生命科学相关的技术来质疑他们的世界。)
对一些人来说,这似乎是显而易见的——科学实际上是专业的名称——但在写这篇文章之前,它对我来说仍然有点模糊。
为了提醒我们自己“科学”意味着什么,让我们回到五年级和科学方法。科学方法的第一步(或者第二步,如果你把观察算作第一步的话)是提问。
https://www.slideshare.net/jamesbirchler/experimenting-your-way-to-success-applying-lean-startup-principles-to-product-development-at-imvu
回到五年级,在提出一个问题后,我们被教导形成一个假设,然后检验这个假设,最后分析我们的结果。但是我们很少被鼓励在观察数据和得出结论之间徘徊(另外,我们为什么要这样做?最酷的部分是证明醋和小苏打混合会使东西爆炸。
但是,我们在五年级时掩盖的同一个极限空间,我们可以根据某种基于数据的反馈循环一次又一次调整我们的问题的空间,似乎就是制造数据科学特殊调味酱的地方。
如果我们深入一些数据科学教育学,我们可以看到科学方法与乔·布利茨坦和汉斯·彼得·菲斯特所说的“数据科学过程”之间的相似之处:
https://insidebigdata.com/2014/11/12/ask-data-scientist-data-science-process/
你会很快发现科学方法和数据科学过程非常非常相似。
(如果你想要一个更性感的版本,请查看微软的数据科学生命周期,并用“问一个问题”替换商业理解。)
而且,与探索最相关的是,他们都强调迭代(Bircher 的科学方法图及其“快速迭代”调用,以及 Blitzstein & Pfister 的不断旋转的箭头)。这些过程中的“科学”似乎体现在一个我们应该反复重复的问题-测试-分析循环中。通过重复这些步骤,数据科学家能够精心设计正确的问题。
这些正确的问题被脸书数据科学家 Brandon Rohrer 称为“尖锐的”在“如何做数据科学”中,他写道:
在选择你的问题时,想象你正在接*一个神谕,它可以告诉你宇宙中的任何事情,只要答案是一个数字或一个名字。这是一个恶作剧的神谕,它的回答将尽可能含糊不清,令人困惑。你想用一个无懈可击的问题来确定它,以至于先知不得不告诉你你想知道的。糟糕问题的例子有“我的数据能告诉我关于我的业务的什么?”,“我该怎么办?”或者“我如何增加利润?”这些为无用的答案留下了回旋的空间。相比之下,对于“第三季度我会在蒙特利尔卖出多少台 Q 型小玩意?”这样的问题,答案很明确或者“我车队中的哪辆车会先出故障?”是无法避免的。
当然,因为我们是在这里做科学研究,Rohrer 的文章以命令式的**“然后重新开始”结束。**
数据科学教育家 Raj Bandyopadhyay 在“数据科学过程:一个数据科学家每天实际做什么”中同样强调了提问的迭代过程是真正的数据科学分析的第一步:
你一开始会问很多问题。。。一旦你对这个领域有了一个合理的理解,你应该问更多有针对性的问题,以准确理解你的客户想要你解决的问题。。。答对了!你现在可以看到问题中的数据科学。。。[和]。。。你可以把它框起来。。。请求进入数据科学问题。。。【还有一次】。。。你有一些具体的问题,你可以回到销售副总裁那里,向她展示你的问题。
…等等,直到你到达的问题。
总之,虽然为数据分析提供一个按数字绘制的解决方案的思考片段对于调整业务目标和让你的老板高兴是有用的,但要知道数据科学远不止这些。
数据科学是关于科学的!科学是关于反复提问的,很少能被包装成一个可转移的“做这个,然后做那个”的包。这就是为什么数据科学家拥有我们出了名的高薪,并且是值得这些薪水和尊敬的神奇科技独角兽——我们是批判性思维、商业敏锐度和硬技能的结合体。
爱因斯坦知道发生了什么,他说
如果我有一个小时来解决一个问题,而我的生命取决于它,我会利用前 55 分钟来确定要问的适当问题,因为一旦我知道了适当的问题,我就可以在不到 5 分钟的时间内解决问题。
如果我有一个小时来解决一个问题,我可能会分配至少 10 分钟来阅读栈溢出,但是嘿,爱因斯坦不得不利用他所拥有的。
温哥华人对(取消)拥挤收费有什么看法?一种社交媒体文本挖掘方法。
原文:https://towardsdatascience.com/how-do-vancouverites-feel-about-de-congestion-pricing-a-social-media-text-mining-approach-90b3635f840c?source=collection_archive---------3-----------------------
温哥华是世界上许多考虑移动定价策略的城市之一,希望以此减少交通拥堵,促进公*,支持交通投资。成立了一个移动定价独立委员会,对在温哥华市引入去拥堵收费的可行性进行研究并提出建议,以实现这些目标。
几周前,我在委员会的脸书官方网页上浏览对其中一个帖子的评论——“是时候了,Metro Vancouver*”——这两条评论引起了我的注意:*
在同一周,我有机会参加了由新威斯敏斯特市组织的小组讨论,会上发表了不同的意见。许多与会者认为移动定价是减少拥堵的灵丹妙药,而其他人则严重关注公*、公正和可负担性。在脸书和推特的官方页面上,我也观察到了一个类似的趋势,这让我很好奇——温哥华人对拥堵费有什么看法?
我的假设是:这是一种消极的感觉。显而易见先生——嘿,我听到了!不要认为我的话是理所当然的。正如 w .爱德华兹·戴明曾经说过的:我们信赖上帝;所有其他人带来的数据。因此,让我们获取数据,进行一些分析,并对这一假设进行测试。**
正如你将在几分钟后看到的,我的分析得出结论,虽然关于这个有争议的话题确实有复杂的感情,但负面的情绪占主导地位。这是一种自然的反应:没有人愿意为他们曾经“免费”拥有的东西付费(许多纳税人认为这不是真正的免费)。这适用于任何形式的移动定价,尤其是在像美丽的温哥华这样的昂贵城市,以及我们目前支付的所有税收(包括汽油税)之外。也许这个一般观察的(唯一)例外是当人们看到引入新收费的价值时。不幸的是,真正的价值可能我们很多人都不清楚。****
在我们看结果之前,我想指出一个重要的注意事项。这种分析所感受到的表达出来的情绪可能不能用它们的真实程度来表示。只有通过精心设计的实验,从的代表性样本中收集数据,才能对感兴趣的量进行准确的估计。在这一分析中,来自用户在脸书官方帖子上互动的数据只被使用了*。诚然,这个样本不能被认为是一个代表性的样本,但尽管如此,它提供了一个镜头来回答这个有趣的问题。***
在接下来的两节中,我将解释数据是如何收集和分析的。分析在R
中完成,源代码可在 Github 上获得。
数据
数据收集自 2017 年 10 月下旬至 2018 年 3 月中旬委员会的官方脸书页面。这一时期涵盖了是时候了项目的整个公众参与阶段。
我使用了Rfacebook
包——它提供了一个到脸书 API 的接口——来获取页面内容。数据分 3 步查询。首先我查询了帖子,然后是评论,最后是评论回复。帖子数据集包括发布的消息和类型(状态、照片、视频等。),喜欢的次数和反应(喜欢,难过,生气等。)、份额数量、时间戳和 ID。评论和评论回复数据集的结构几乎相同。两个数据集都包括发表的评论、赞数、时间戳和 ID。
分析
为了测量用户的印象,我们将从两个方面分析这些数据:一个是通过用户对每个帖子做出反应的显式情绪(对帖子的分析)。另一种是通过使用文本挖掘技术的情感分析(评论分析)。我将在下面的小节中详细讨论这两种方法。
一、职位分析
为了将事情放入 perceptive 并了解页面的活跃程度,让我们看看每月的帖子数量:
下图显示了每月的参与度。我不是社交媒体专家(甚至不是一个非常活跃的用户!),但是,我理解“参与度”一词在营销和广告领域可能有不同的含义。在这个分析中,我将参与度定义为“用户每月的总活动量”,包括喜欢、反应、评论和分享的数量。
理想情况下,敬业度计算为一个比率或加权*均值,其中不同类型的敬业度根据其重要性进行加权。例如,一个帖子的分享应该比一个评论或类似的东西更重要。然而,就我有限的知识而言,没有明确的方法来量化这一点。因此,我决定简单地将不同类型的约定放在一起。也就是说,可能有一些重复计算(同一个人可能喜欢、分享和评论同一篇帖子),这在下图中没有考虑到。由于我无法访问只有页面所有者或管理员才能访问的“洞察”数据(如帖子的总点击量或浏览量),因此限制重复计算和/或计算更有意义的比率是不可行的。
回到正题:看起来二月是参与度最高的月份。接下来,我们来看看帖子反应的分布情况:
特别感兴趣的,点赞数和愤怒情绪。总的来说,喜欢的情绪多于愤怒的情绪。以下是在参与阶段每个月的*均反应数,即喜欢和愤怒反应数的趋势:
在参与活动的早期阶段,没有太多的愤怒反应,然而,这一数字在 2 月份达到了最高水*。有意思!看起来二月份的帖子收到了最多的喜欢和愤怒情绪!
让我们看看最受欢迎的帖子是什么?
**We’re studying Distance-Based Charges: charging per kilometre driven within a given boundary, varying by time and location. We’re exploring ways this type of charge could work in Metro Vancouver to figure out whether this approach would reduce congestion, improve fairness, and support transportation investment in our growing region. We want to hear your thoughts when online engagement opens on February 26!**
收到最多愤怒反应的帖子是什么?
**We’re studying Distance-Based Charges: charging per kilometre driven within a given boundary, varying by time and location. We’re exploring ways this type of charge could work in Metro Vancouver to figure out whether this approach would reduce congestion, improve fairness, and support transportation investment in our growing region. We want to hear your thoughts when online engagement opens on February 26!**
不,这不是一个错误!同样的帖子获得了最高数量的喜欢和愤怒的反应。在不同的拥挤收费方法(警戒线收费、过路费等)中。),看起来“基于距离的收费”是页面上讨论的最有争议的方法。有道理,对吧?
在我们进入下一部分之前,让我们将反应分为积极(喜欢和爱)和消极(生气、悲伤、哈哈和哇)情绪。我把哈哈和哇的反应归类为负面情绪,因为在这种情况下,它们分别与讽刺和震惊联系在一起。
耶!
抓紧…我们不要太兴奋太快。评论中仍然隐藏着大量我们尚未看到的信息。下一节重点分析评论和评论回复。
二。评论分析
根据所选的分析单位,有许多可能的方法来分析文本数据。一种方法是将分析单位定义为单词。另一种方法是将其定义为文本块(一句或多句)。后一种方法更现实,但也更复杂。
在我们深入分析之前,值得注意的是,我将评论和评论回复合并在一个数据集中。我还删除了页面管理员的所有评论,以便分析只关注用户的评论。在文本挖掘分析中,去除“停用词”和数字是很典型的,我也是这样做的。
现在,让我们来看看评论中最常用的词语:
“拥堵”这个词没有进入前五名!“税”是使用最多的词,其次是“人”——嗯,“税务人”只是提醒一下,以防你想知道:“不”是一个停用词,从正在分析的词包中删除。
这里是评论中使用的漂亮的彩色单词云——颜色和大小表示每个组的排名:
接下来,我们将讨论从用户评论中挖掘情感的两种方法:作为单词和作为评论。
二世。a .情感分析—字数
在我们看了词频之后,现在让我们来看看这些词背后潜在的情感。这个过程通常被称为意见挖掘或情感分析。为了做到这一点,我们需要知道每个单词的相关情绪。幸运的是,有字典可以用来评估超过 27,000 个单词的相关意见或情绪。****
在这个分析中,我使用了三个通用词汇:AFINN
、bing
和nrc
——这三个都是tidytext
R
包的一部分。值得注意的是,这些词典是基于单字(即单个单词)。单字方法不考虑单词组合,如“不高兴”或“非常悲伤”。在某些文本中(如小说),这可能不是一个问题。然而,对于预期会出现否定和讽刺的情况,比如在社交媒体文本中,基于词汇的方法可能不会返回最准确的结果。尽管如此,它们仍然可以用来获得评论中情感内容的总体感觉。
如使用 R 的 文本挖掘中所述,nrc
词典以二元方式(“是”/“否”)将单词分类为积极、消极、愤怒、预期、厌恶、恐惧、快乐、悲伤、惊讶和信任。bing
词典以二元方式将单词分为积极和消极两类。AFINN
词典给单词打分在-5 到 5 之间,负分表示消极情绪,正分表示积极情绪。
让我们来看看基于三种词汇的结果是如何比较的:
Word Sentiments using nrc lexicon
Word Sentiments using bing lexicon
Word Sentiments using AFINN lexicon
看起来,bing
和AFINN
词汇的结果更加一致——负面情绪的词汇更多。另一方面,将nrc
词典中的不同情绪分为积极情绪和消极情绪(类似于我们之前对帖子反应所做的)会导致两组之间的单词份额几乎相等。鉴于我前面提到的这种方法的局限性,我不想在这些结果上多费口舌。相反,让我们看看如何将评论作为一个文本单元而不是一个词来进行情感分析。
二。b .情感分析—评论
在本节中,我们的目标是为每条评论分配一个情感分数,同时将评论视为一个文本单元,而不是单个单词。几年前,这不是一个简单的问题。然而,多亏了谷歌,这现在变得更加可行和容易实现。
谷歌云*台的最新更新提供了强大的机器学习 API,这些 API 运行在复杂的深度学习模型背后,这些模型是多年来利用谷歌源源不断的数据和巨大的计算能力开发的。这些工具和服务使用户更容易在指尖驾驭机器学习的力量。自然语言处理(NLP) API 也不例外。我使用了[googleLanguageR](https://cran.rstudio.com/web/packages/googleLanguageR)
包来访问 NLP API。为了能够访问这个 API,必须首先获得一个密钥。查看谷歌文档获取快速入门指南。建立一个软件开发帐户,除了 300 美元的注册积分之外,还提供每月一定限额(NLP API 为 5000)的免费访问。
NLP API 提供不同的服务。出于本文的目的,我将只关注情绪分析。分析的重点是识别给定文本中的主流情感观点。根据谷歌的文档,情感是由数值score
和magnitude
来表示的。score
的范围在-1 和 1 之间,表示总体情绪是消极的还是积极的。与score
不同的是,magnitude
没有规格化。然而,它是一个正整数,表示情绪的强度(消极或积极),通常与文本的长度相关(文本越长,magnitude
越高)。
为了验证 API 结果,我评估了一堆注释和它们的赋值
scores
。结果相当不错。正如人们所料,API 背后的模型并不完美,但我多次惊讶于其对潜在情绪的捕捉。请记住,社交媒体文本通常是低质量的文本,包括拼写错误、表情符号和缩略语。我还注意到,非常短的评论经常得到零或接*零的scores
。这可能表明,如果模型是不确定的,它会分配一个低的score
——这是需要记住的。
下面是用户评论的score
分布:
如你所见,负面评论比较多。然而,有很多零或接*零的评论score
。我们应该如何处理这些问题?
总的来说,score
和magnitude
指标可用于测量四种情绪水*,即:积极、消极、中性和混合情绪。例如,零或接*零的文本score
可能被解释为低情绪或混合情绪的文本。低情绪文本是一个中立的观点,而混合情绪文本是一个积极和消极情绪相互抵消的文本。谷歌建议用magnitude
来区分两者。具有低score
和低magnitude
的文本应归类为中性文本,而混合文本将具有低score
和高magnitude
。低和高的定义相当宽松;这在很大程度上取决于分析的背景。基于score
的分布,并通过检查个人评论,我发现,*均而言,score
在-0.2 和 0.2 之间的文本既不明显是负面的,也不明显是正面的。类似地,通过查看magnitude
低score
评论的分布(在-0.2 和 0.2 的范围内),0.5 似乎是定义低/高magnitude
的合理界限。
如果你还记得,根据明确的反应(例如,喜欢,愤怒的情绪),我们发现关于“基于距离的收费”的帖子是同时收到最多喜欢和愤怒情绪的帖子。你猜怎么着?结果发现,同一篇帖子收到的正面和负面评论最多(基于四个定义的情绪水*)。这是对情感分析结果的很好的验证。
我们来看看用户评论中情绪的四个层次的分布情况:
这并不奇怪。我们从score
分布中得知,负面评论会更多。但是,正如你所看到的,也有相对较高比例的低情绪评论被分为中性和混合情绪评论。
现在让我们考虑一下看待这个问题的另一种方式。如果你是脸书用户,你可能知道评论和评论回复也可以被用户喜欢。让我们考虑这个假设的例子,对于一个给定的帖子,有两条评论:一条负面评论获得 10 个赞,一条正面评论获得 15 个赞。如果我们忽略喜欢的数量,我们会得出结论,该帖子被感知的比例为 50/50。然而,与一个负面评论和 10 个喜欢(11 个负面印象)相比,得出帖子被正面看待的结论可能更现实,因为有一个正面评论和 15 个喜欢(16 个正面印象)。下图显示了基于他们收到的评论和相关赞数的分布情况。
这种方法是一种改进,但并不完美。同一个人可以任意多次评论一篇文章,也可以喜欢自己的评论。此外,更有可能的是,一个写了负面(或正面)评论的人也会喜欢同一帖子上的其他负面(或正面)评论。因为我们不知道对帖子(或评论)发表评论和/或喜欢评论(或评论回复)的用户的 id,所以我们在解释这些结果时必须小心——它们不代表用户的百分比。然而,有人可能会争辩说,这些影响可能会相互抵消,不应该对结果产生太大影响。不幸的是,我们没有更多的数据来确认。
最后,为了把事情放在一起,让我们把我们从用户对每个帖子的反应的显性情绪和我们从他们的评论中提取的隐性情绪结合起来。与我们之前所做的类似,我将喜欢和爱的反应的数量添加到正面评论及其相关喜欢的数量中,将愤怒、悲伤、哇和哈哈的反应的数量添加到负面评论及其相关喜欢的数量中。下面是情绪水*的总体分布:
哒哒!该图总结了分析。它结合了我们从帖子和评论分析中学到的见解。这也证实了我最初的假设——负面情绪占主导地位。好消息是,现在我们对情绪水*的分布有了更好的认识。中性和混合感觉占整体分布的 40%左右。与强烈反对的人相比,不确定引入移动定价的人可能更容易改变看法。这可以通过解决他们关心的问题并帮助他们理解问题的复杂性和欣赏提议的解决方案来实现。第一步是确定这些评论和相关的意见/关注点——这种类型的分析有助于实现这一点。
TL;博士;医生
在这篇文章中,我们使用文本挖掘技术来分析社交媒体源。特别是,从独立移动定价委员会的官方脸书网页收集数据。我们探索了几种分析公开可用数据的方法,并提出了一种了解用户情绪水*的方法。这是数据科学和机器学习如何从半非结构化数据中提供有价值的见解的一个例子。
交通拥堵和移动定价是影响每个人日常生活的争议话题。个人不太可能意识到向他们曾经免费拥有的东西收费的价值。这解释了为什么就需求管理这样一个复杂的概念教育公众不是一件容易的事情。我们发现,虽然用户表达了许多中性和混合的情绪,但负面情绪占主导地位。这样的反应是意料之中的。这一分析帮助我们理解了不同情绪水*的分布,这对制定公众参与策略非常有用。
谢谢你的来访!我希望你喜欢阅读这篇文章,我很想听到你的反馈。欢迎在评论中给我留言。
在这个帖子中表达的观点和看法完全是我的。用于进行分析的数据和信息都是公开的,不包含任何敏感和/或个人信息。代码可在这里获得,但是,数据集不符合 API 服务提供商的条款和条件。您可以通过按照代码中提供的步骤获取数据来重现结果。探索愉快!
我们如何在网上自动找到每天的好交易?
原文:https://towardsdatascience.com/how-do-we-find-daily-good-deals-online-automatically-fe8cfc8f783a?source=collection_archive---------0-----------------------
使用 R 进行基本的 web 内容抓取,以自动化枯燥的任务
背景
正如这里所定义的那样,“数据科学家比任何软件工程师都更擅长统计,比任何统计学家都更擅长软件工程。”因此,这篇博客文章重点关注 web 内容废弃的实践,这是数据科学家在结构化数据库之外获取信息的一项基本技能,当 API 不可用时。
当在网上寻找好的交易时,我们经常去一些电子商务网站查看我们想要的商品的价格。过了一段时间,这就变成了一项乏味的任务。受 程序员预订飞机指南 的启发,Zeke 在 Node 中编写了一个脚本来自动完成寻找廉价机票的过程,我们想在好的 MacBook 交易中复制他的方法,使用 r
目标
目的是当 MacBook 价格跌至某个点以下时,可以收到自动电子邮件提醒。
方法
- 从电子商务网站上删除产品信息
我们需要首先加载网站的 html 结构,以便检索我们需要的信息。我们将使用的 R 包是 rvest 。
library(rvest)
library(XML)#save html of URL
url <- "[http://www.rakuten.com.tw/category/4945/?p=1&l-id=tw_pagen_1](http://www.rakuten.com.tw/category/4945/?p=1&l-id=tw_pagen_1)"
保存 URL html 后,我们需要通过检查页面源代码来找到我们需要的信息部分。我们将搜索价格以导航到产品相关信息,如下所示。
Screenshot of the page source
我们注意到产品相关信息在
下,因此我们将只提取这一部分。
product <- url %>%
read_html() %>%
html_nodes(".b-content")
一个优秀的 Chrome 插件叫做 SelectorGadget 可以在这里下载。这个工具可以让我们直观地选择我们想要的具体内容。
当我们选择产品名称时,内容将以绿色突出显示,如下所示。该工具还猜测我们还需要其他产品名称,因此它会用黄色突出显示其他产品名称。对于我们不需要的任何内容,我们可以单击它,它将被删除(颜色将变为红色)。
我们发现可以使用提取产品名称。产品名称,如页面底部所示。
name <- product %>%
html_nodes(".product-name") %>%
html_text()
接下来,我们将重复这个过程来查找价格并以数字格式保存它。
price <- product %>%
html_nodes(".b-underline .b-text-prime") %>%
html_text() %>%
gsub(",","",.) %>%
as.numeric()
完成后,我们可以将名称和价格保存在一个数据帧中。
all <- data.frame(name, price,stringsAsFactors = FALSE)
我们还需要删除多个页面来提取所有信息。
for (i in 1:10){
starturl <- "[http://www.rakuten.com.tw/category/4945/?p=](http://www.rakuten.com.tw/category/4945/?p=)"
nexturl <- "&l-id=tw_pagen_"
url <- paste(starturl,i,nexturl,i,sep="")product <- url %>%
read_html() %>%
html_nodes(".b-content")name <- product %>%
html_nodes(".product-name") %>%
html_text()price <- product %>%
html_nodes(".b-underline .b-text-prime") %>%
html_text() %>%
gsub(",","",.) %>%
as.numeric()mydata <- data.frame(name, price,stringsAsFactors = FALSE)
all <- rbind(all,mydata)
}all<-all[!duplicated(all),]
最终结果以 dataframe 格式存储在下面。
Screenshot of the scrapped prices on MacBooks
2。创建发送电子邮件提醒的规则
接下来,我们将设置接收电子邮件提醒的规则。假设我们只希望收到价格在新台币 25,000 元到新台币 30,000 元之间的产品的警报。
alert <- all[all$price>25000&all$price<=30000,]
接下来,如果至少有一个警报,我们将使用 mailR 包发送电子邮件,如下所示。
if (nrow(alert) >=1){write.table(alert,"alert.txt",fileEncoding = "UTF-8")send.mail(from = "[jchen6912@gmail.com](mailto:jchen6912@gmail.com)",
to = c("[jchen6912@gmail.com](mailto:jchen6912@gmail.com)"),
subject = "Mac Deal Alert",
body <- "alert.txt",
smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "[jchen6912@gmail.com](mailto:jchen6912@gmail.com)", passwd = "xxxxxxxx", ssl = TRUE),
encoding = "utf-8",
authenticate = TRUE,
send = TRUE)
}
Screenshot of the automatic email alert received
3。通过定期安排任务来自动化流程
这可以通过 taskscheduleR 包来完成,但是目前只在 Windows 中可用。点击此处了解更多详情。我们可以安排 Rscript 以所需的频率运行,并相应地接收自动警报。
Screenshot of the UI in taskscheduleR
这总结了关于如何为静态内容的网站删除内容的简短博客,然而,动态网站更复杂,可能需要额外的代码来模拟真实的浏览行为,如会员登录和表单提交。或者,类似的任务也可以用 Python 中的 scrapy 和 BeautifulSoup 来执行。
r 代码
library(rvest)
library(XML)
library(taskscheduleR)
library(mailR)setwd("~/Desktop/deals")url <- "[http://www.rakuten.com.tw/category/4945/?p=1&l-id=tw_pagen_1](http://www.rakuten.com.tw/category/4945/?p=1&l-id=tw_pagen_1)"
product <- url %>%
read_html() %>%
html_nodes(".b-content")name <- product %>%
html_nodes(".product-name") %>%
html_text()price <- product %>%
html_nodes(".b-underline .b-text-prime") %>%
html_text() %>%
gsub(",","",.) %>%
as.numeric()all <- data.frame(name, price,stringsAsFactors = FALSE)for (i in 1:10){
starturl <- "[http://www.rakuten.com.tw/category/4945/?p=](http://www.rakuten.com.tw/category/4945/?p=)"
nexturl <- "&l-id=tw_pagen_"
url <- paste(starturl,i,nexturl,i,sep="")product <- url %>%
read_html() %>%
html_nodes(".b-content")name <- product %>%
html_nodes(".product-name") %>%
html_text()price <- product %>%
html_nodes(".b-underline .b-text-prime") %>%
html_text() %>%
gsub(",","",.) %>%
as.numeric()mydata <- data.frame(name, price,stringsAsFactors = FALSE)
all <- rbind(all,mydata)
}all<-all[!duplicated(all),]alert <- all[all$price>25000&all$price<=30000,]if (nrow(alert) >=1){write.table(alert,"alert.txt",fileEncoding = "UTF-8")send.mail(from = "[jchen6912@gmail.com](mailto:jchen6912@gmail.com)",
to = c("[jchen6912@gmail.com](mailto:jchen6912@gmail.com)"),
subject = "Mac Deal Alert",
body <- "alert.txt",
smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "[jchen6912@gmail.com](mailto:jchen6912@gmail.com)", passwd = "xxxxxxxx", ssl = TRUE),
encoding = "utf-8",
authenticate = TRUE,
send = TRUE)
}
问有什么问题、意见或顾虑吗?
jchen6912@gmail.com
我们如何教会一台机器自己编程?—整洁的学习。
原文:https://towardsdatascience.com/how-do-we-teach-a-machine-to-program-itself-neat-learning-bb40c53a8aa6?source=collection_archive---------1-----------------------
在这篇文章中,我将尝试解释一种叫做通过扩充拓扑进化神经网络(NEAT)的机器学习方法。
简介:
我喜欢学习。打开一本书或一篇论文,谈论一个我还没有遇到的话题,并试图理解它,这真的很令人兴奋。有些人喜欢在空闲时间解决纵横字谜、数独或谜语来刺激他们的意识——我喜欢阅读论文并尝试实现所提出的算法。因为我喜欢学习,但遗憾的是,我无法学到我真正想学的所有东西,所以我对学习如何让计算机为我学习并向我提供有趣的信息特别感兴趣,这些信息可能会最大限度地提高我的学习效率。这些算法有助于构建复杂的信息,是“专家系统”领域的一部分。因此,我们的目标是“创造”一个“专家”,当你需要做决定的时候,你可以向他咨询。让我们从高层次上来看一个模型,它有助于创建那些被称为 NEAT 的“专家”。本文将介绍这个概念。在以后的文章中,我可能会分享实现示例。
什么是整洁?
Neat 代表“通过增强拓扑结构的神经网络”,并描述了自学习机器的算法概念,这些概念是由进化过程中的基因修改激发的。
生活本身绝对是迷人的。每当我观察自然时,我倾向于在所有生物中看到一个共同的特性,那就是信息。信息似乎是繁衍的核心传承。大自然能够优化过去 37 亿年传递的信息,创造了许多共存的不同物种。查尔斯·达尔文的适者生存的概念启发了我们对某些物种进化而其他物种灭绝的理解。进化计算机科学家的目标是通过模仿自然进化来构建寻求解决复杂问题的系统。
[## 基因复制——维基百科
基因复制(或染色体复制或基因扩增)是产生新基因的主要机制
en.wikipedia.org](https://en.wikipedia.org/wiki/Gene_duplication)
描述 NEAT 如何工作的最简单的方法是通过一个例子。如果你必须设计一个专家系统,让它以最优的方式为你玩游戏,那么相关的因素是什么?
**首先,**定义“玩家”被允许执行的所有潜在动作是很重要的。例如,超级马里奥能够跳跃、蹲下、向左、向右行走、扭动身体、快速奔跑等等。如果我们将一台机器连接到这些变量,并允许它执行这些变量,它将有可能做一些事情。
**其次,**给电脑定义一个目标很重要。NEAT 的工作原理有一个概念,叫做“健身得分”。健康分数是一个奖励成功的数学函数。在像马里奥这样的游戏中,体能分数是玩家向终点线前进的程度。健身分数函数中可以包含更多的变量,如收集的硬币、击败的敌人或完成比赛的总时间。
**第三,**定义进化的规则很重要。NEAT 允许节点的突变,节点之间的新连接,以及最适合的神经网络遗传到新的后代中。此外,NEAT 确保不同种类的“物种”可以共存,直到它们被允许相互竞争产生新的更健康的后代。为了确保最适合的物种生存下来,已经尝试过的网络不会在未来重复自己,并且现有的网络会优化自己,NEAT 为每个基因添加了一个创新编号,作为历史标记。
上图显示了通过添加连接的变异和通过添加节点的变异。在图中的上例中,从 2 到 4 的连接被禁用,而从 3 到 5 的新连接被创建。在下面的节点突变示例中,可以看到从 2 到 4 的连接是如何被禁用的,以及新节点 6 是如何被引入的,以及它是如何生成从 3 到 6 和从 6 到 4 的两个新连接的。
上图显示了进化是如何发生的。Parent 1 和 Parent 2 在节点和连接上确实有相似的结构,但是它们也有区别。现在,机器使用二进制逻辑来包含节点/连接或删除它。基本的决定机制是基于真与真是真,真与假是假,假与假是假。以这种方式,后代确保继承的信息是关于适应度分数的有希望的有效性,同时在后代中考虑新的进化节点和/或连接,并且禁用的父节点保持禁用。匹配基因是随机遗传的,而分离基因(那些中间不匹配的基因)和多余基因(那些最终不匹配的基因)是从更适合的亲本遗传的。在这种情况下,假设适合度相等,因此不相交和多余的基因也是随机遗传的。被禁用的基因可能会在未来几代中再次启用:如果父母中的任何一方禁用了某个遗传基因,该基因就有可能被禁用。”[斯坦利,Miikkulainen,109 页,整洁]
现在一切都或多或少清楚了,NEAT 可以通过迭代和进化新的神经网络来完成游戏,以达到最佳的健身分数。我强烈推荐阅读这篇论文,它写得非常好,只需要一点谷歌搜索的努力,初学者就能理解。但是如果你想有一个快速速成班,你也可以在 youtube 上观看这个精彩的视频:
NEAT 通过将复杂的问题分成可以优化的更小的问题来解决复杂的问题。可以为许多不同的单独任务开发 NEAT 代理,然后联合起来解决更复杂的问题。一个例子可以是使用 NEAT 创建新的药房,首先布局所有可以使用的原子,其次定义一个适应度函数,使模拟理解奖励系统,最后定义进化规则。另一个 NEAT 可用于选择生产新设计的药物的制造技术。一旦这两个系统结合在一起,针对成本效率优化的新适应度函数可以为新设计的药房创建最佳生产方法。这在理论上听起来很棒,但显然是一项非常复杂的任务,需要花费大量精力进行研发。
这是论文:
我们如何“训练”神经网络?
原文:https://towardsdatascience.com/how-do-we-train-neural-networks-edd985562b73?source=collection_archive---------1-----------------------
一.导言
这是我计划的关于用于机器学习特别是神经网络“训练”的优化算法系列的第 1 部分。在这篇文章中,我将介绍梯度下降(GD)及其小变化。在未来,我计划写一些其他流行的算法,如:
- 带动量的 SGD。
- RMSprop 。
- 亚当。
- 遗传算法。
我会在写完之后把链接放在上面。
今天我将从简单介绍神经网络开始,这足以理解我将要谈到的概念。我将解释什么是损失函数,以及它对“训练”神经网络或任何其他机器学习模型的意义。我并不声称我的解释是对神经网络的全面、深入的介绍,事实上,我希望你已经熟悉了这些概念。如果你想更好地理解神经网络中正在发生的事情,我在文章末尾提供了一个学习资源列表。
我会解释几年前在 kaggle 举行的狗和猫比赛的例子。在比赛中,我们面临的任务是识别一张图片上出现的是一只狗还是一只猫。
二。让我们定义一个神经网络
人工神经网络(ANN)的灵感来自于你大脑中实际发生的事情。虽然这些类比相当松散,但人工神经网络与它们的生物“父母”有几个相似之处。它们由一定数量的神经元组成。让我们来看看单个神经元。
Single Perceptron.
我们将考虑一个由弗兰克·罗森布拉特在 1957 年提出的最简单的神经元模型的一点修改版本,称为“感知器”。我做的所有修改都是为了简单,因为我不打算对神经网络进行深入解释。我只是想让你对正在发生的事情有一个直觉。
那么什么是神经元呢?这是一个数学函数。它接受几个数字作为输入(想要多少就有多少)。我上面画的神经元接受两个数字作为输入。我们将每个输入数字表示为 xₖ ,其中 k 代表输入的索引。对于每个输入 xₖ 神经元分配另一个数字 wₖ 。由这些数字 wₖ 组成的向量称为权重向量。这些权重使得每个神经元独一无二。它们在测试期间是固定的,但在训练期间,我们将改变这些数字,以便“调整”我们的网络。稍后我会在帖子中谈到这一点。如我上面所说,神经元是一种功能。但这是什么功能呢?它是权重和输入的线性组合,上面有某种非线性函数。让我进一步解释一下。我们来看第一部分——线性部分。
Linear combination of weight and inputs.
上面的公式就是我说的线性组合。我们将获取输入,将它们乘以相应的权重,然后将所有内容相加。结果是一个数字。最后一部分——是在其上应用某种非线性函数。今天使用的最流行的非线性实际上比称为整流线性单元( ReLU )的线性函数更简单。公式如下:
Rectified Linear Unit formula.
如果我们的数字大于零,那么我们就照原样取那个数字,如果它小于零,那么我们就取零。这种非线性函数应用于神经元中的顶部线性函数称为激活函数。我们必须有某种非线性函数的原因将在后面变得明显。总而言之,神经元是一种功能,它接受一些固定数量的输入,并输出一个单一的数字——它的激活。我们对于上面被淹没的神经元的最终公式是:
Neuron that takes two numbers as input.
稍微超前一点,如果我们以狗和猫为例,我们将把我们的图像作为输入传递给神经元。你可能会想,当我把神经元定义为函数时,我们怎么传递图像。你应该记得,我们在计算机中存储图像的方式是把它表示成一个数字阵列,每个数字表示一个给定像素的亮度。因此,将它传递给神经元的方法是采用 2D 阵列(或彩色图像的 3D 阵列),将其展*成一行以获得 1D 向量,并将所有这些数字传递给神经元。不幸的是,这使得我们的网络依赖于图像大小,我们只能处理网络定义的给定大小的图像。现代神经网络已经找到了解决这个问题的方法,但是现在我们将有这个限制。
是时候定义一个神经网络了。神经网络也是一个数学函数。它是由一堆相互连接的神经元定义的。当我说连接时,我的意思是一个神经元的输出被用作其他神经元的输入。让我们看看一个非常简单的神经网络,希望它能让我们更清楚。
Simple neural network.
上面定义网络有 5 个神经元。正如你所看到的,这些神经元堆叠在 3 个完全连接的层中,也就是说,一层中的每个神经元都连接到下一层中的每个神经元。一个网络有多少层,每层有多少个神经元以及它们是如何连接的——所有这些选择定义了网络的架构。第一层由两个神经元组成,称为输入层。这一层中神经元实际上不是我前面描述的神经元,从某种意义上说,它们不执行任何计算。它们只是用来表示网络的输入。对非线性的需求来自于我们将神经元连接在一起的事实,以及线性函数之上的线性函数本身就是线性函数的事实。所以,如果没有在每个神经元中应用非线性函数,神经网络将是线性函数,从而不会比单个神经元更强大。最后要注意的是,我们通常需要一个介于 0 和 1 之间的数字作为神经网络的输出,所以我们把它当作一个概率。例如,在狗和猫的对比中,我们可以把接*零的数字当作猫,把接*一的数字当作狗。为此,我们将对最后一个神经元应用不同的激活函数。我们将使用一个乙状结肠激活。关于这个函数,你只需要知道它返回一个从 0 到 1 的数字,这正是我们想要的。说了这么多,我们准备定义一个与我上面画的网络相对应的函数:
Function, defining out neural network. Superscript of w denoted to the index of the neuron. Subscript of w denotes the index of input.
因此,我们有某种函数,它接受一些数字,输出另一个介于 0 和 1 之间的数字。实际上,这个函数有什么公式并不重要,重要的是我们有复杂的非线性函数,它由一些权重参数化,在某种意义上,我们可以通过改变权重来改变函数。
三。损失函数
在我开始讨论训练之前,唯一需要定义的是一个损失函数。损失函数是一个告诉我们,我们的神经网络对于某项任务有多好的函数。直观的方法是,取每个训练示例,通过网络得到数字,从我们想要得到的实际数字中减去它,然后*方它(因为负数和正数一样糟糕)。
其中,y 代表我们希望从网络中获得的数字,y 代表我们通过网络传递示例实际获得的数字,I 代表训练示例的索引。让我们再次以狗对猫为例。我们有一个关于狗和猫的图片的数据集,如果是狗就标记为 1,如果是猫就标记为 0。这个标签对应于 y——当我们把图像传递给网络时,它是我们想从网络获得的数字。为了计算损失函数,我们将检查数据集中的每个训练示例,为该示例计算 y ,然后计算上面定义的函数。如果损失函数很大,那么我们的网络就不能很好地运行,我们希望损失函数越小越好。我们可以重写这个公式,将 y 改为我们网络的实际函数,以更深入地了解损失函数和神经网络的联系。
四。培养
当我们从神经网络开始时,我们随机初始化我们的权重。显然不会给你很好的结果。在训练的过程中,我们希望从性能差的神经网络开始,以高精度的网络结束。就损失函数而言,我们希望我们的损失函数在训练结束时更低。改进网络是可能的,因为我们可以通过调整权重来改变它的功能。我们希望找到另一个比最初的函数性能更好的函数。
训练的问题等价于最小化损失函数的问题。为什么要把损失最小化而不是最大化?原来损失是更容易优化的函数。
有很多优化函数的算法。这些算法可以基于梯度,也可以不基于梯度,因为它们不仅使用函数提供的信息,还使用函数的梯度。一种最简单的基于梯度的算法——我将在本文中讨论——被称为随机梯度下降。让我们看看它是如何工作的。
首先,我们需要记住什么是对某个变量的导数。让我们取一些简单的函数 f(x) = x 。如果我们还记得高中时的微积分规则,它的导数是 x 的每一个值,这告诉了我们什么?导数是当我们朝正方向迈出无限小的一步时,函数变化的速度。从数学上讲,它可以写成如下形式:
这意味着:我们的函数改变了多少(左边的项)大约等于这个函数对某个变量的导数 x 乘以我们改变了那个变量多少。当我们的步长无限小时,这个*似值是精确的,这是导数的一个非常重要的概念。回到我们的简单函数 *f(x) = x,*我们说过,我们的导数是 1,这意味着,如果在正方向上采取一些步骤ε,函数输出将改变 1 乘以我们的步骤ε,也就是ε。很容易检查出这是规则。这甚至不是一个*似值,这是准确的。为什么?因为我们的导数对于每个 x. 的值都是一样的,这对于大多数函数来说是不成立的。让我们来看一个稍微复杂一点的函数 f(x) = x .
y = x²
从微积分的规则中我们知道,函数的导数是 2x。很容易检查出,如果我们从某个值 x 开始,进行某个步长ε,那么我们的函数改变了多少,并不完全等于上面给出的公式。
现在,梯度是偏导数的向量,其元素包含关于函数依赖的变量的导数。对于我们到目前为止考虑的简单函数,这个向量只包含一个元素,因为我们只使用了一个输入的函数。对于更复杂的函数(如我们的损失函数),梯度将包含我们想要的每个变量的导数。
我们如何利用导数提供给我们的信息来最小化某个函数呢?让我们回到我们的函数 f(x) = x . 显然,那个函数的最小值在点 x = 0 ,但是计算机怎么会知道呢?假设,我们从某个随机值 x 开始,这个值是 2。 x = 2 中函数的导数等于 4。这意味着我们正向移动一步,我们的函数将成比例地变为 4。所以会增加。相反,我们想最小化我们的功能,所以我们可以向相反的方向迈出一步,负的,以确保我们的功能会减少,至少一点点。我们能走多远?这是个坏消息。我们的导数只能保证,如果迈出无限小的一步,函数就会减小。我们不能这么做。一般来说,你需要用某种超参数来控制你的步长。这个超参数被称为学习率,我稍后会谈到它。现在让我们看看如果我们从点 *x = -2 开始会发生什么。*导数现在等于-4,这意味着,如果向正方向迈出一小步,我们的函数将成比例地变为-4,因此它将减小。这正是我们想要的。
注意到这里的一个模式了吗?当 x > 0 时,我们的导数大于零,我们需要往负方向走,当 x < 0 时,导数小于零,我们需要往正方向走。我们总是需要向导数的反方向前进一步。让我们把同样的想法应用于梯度。梯度是指向空间某个方向的向量。它实际上指向函数增长最快的方向。因为我们想最小化我们的函数,我们将向梯度的相反方向迈出一步。让我们应用我们的想法。在神经网络中,我们认为输入 *x、*和输出 y 是固定的数字。我们要对其求导的变量是权重 w,,因为这些是我们想要改变的值,以改善我们的网络。如果我们计算损失函数相对于我们的权重的梯度,并且在梯度的相反方向上采取小的步骤,我们的损失将逐渐减少,直到它收敛到某个局部最小值。这种算法被称为梯度下降。在梯度下降的每次迭代中更新权重的规则如下:
For each weight subtract the derivative with respect to it, multiplied by learning rate.
上面符号中的 lr 表示学习速率。它是用来控制我们在每次迭代中走多远。这是训练神经网络时需要调整的最重要的超参数。如果你选择学习太大的东西,那么你会迈出太大的步伐,并且会“跳过”最小值。这意味着你的算法会有分歧。如果你选择的学习率太小,可能会花太多时间收敛到局部极小值。人们已经开发了一些非常好的技术来寻找最佳的学习速度,但是这已经超出了这篇文章的范围。其中一些在我的另一篇文章“提高我们工作的方式和学习率”中有所描述。
不幸的是,我们不能真正应用这种算法来训练神经网络,原因在于我们的损失函数公式。
从我们上面的定义可以看出,我们的公式是总和的*均值。从微积分我们知道,和导数就是导数的和。因此,为了计算损失的导数,我们需要检查数据集的每个例子。在梯度下降的每一次迭代中都这样做是非常低效的,因为算法的每一次迭代都只是通过一些小的步骤来改善我们的损失。为了解决这个问题,有另一种算法,称为小批量梯度下降。更新权重的规则保持不变,但我们不会计算精确的导数。相反,我们将对数据集的某个小批量进行导数*似,并使用该导数来更新权重。小批量不能保证在最佳方向采取措施。其实通常不会。对于梯度下降法,如果选择足够小的学习率,每次迭代的损失一定会减少。对于小批量来说,这不是真的。你的损失会随着时间的推移而减少,但它会波动,并且更加“嘈杂”。
用于估计导数的批量大小是你必须选择的另一个超参数。通常,您想要尽可能大的批量,因为您的内存可以处理。但是我很少看到有人使用大于 100 的批量。
批量等于 1 的小批量梯度下降的极端版本称为随机梯度下降。在现代文献中,当人们说随机梯度下降(SGD)时,他们实际上指的是小批量梯度下降。大多数深度学习框架会让你选择 SGD 的批量大小。
这就是梯度下降及其变化。最*,越来越多的人开始使用更先进的算法。大部分是基于梯度的,实际上是基于 SGD 稍加修改。我也打算写这些。
七。反向传播
关于基于梯度的算法,唯一要说的是我们如何计算梯度。最快速的计算方法是解析地找到每个神经网络结构的导数。我想,就神经网络而言,我不应该说这是一个疯狂的想法。我们上面为一个非常简单的神经网络定义的公式很难找到所有的导数,而且我们只有 6 个参数。现代建筑有数百万个。
第二种方法,实际上也是最容易实现的方法,是用微积分中的公式来*似求导:
虽然它非常容易实现,但这样做的计算代价太大。
计算导数的最后一种方法叫做反向传播,这种方法很好地*衡了计算难度和计算代价。讨论这个算法超出了这篇文章的范围,但是如果你想了解更多,可以去这篇文章的最后一部分,在那里我列出了学习神经网络的资源。
不及物动词为什么会起作用?
当我第一次了解神经网络及其工作原理时,我理解所有的方程,但我不太确定它们为什么工作。这个想法,我们可以采取一些功能,然后采取一些导数,并最终与算法,可以区分狗和猫的图像似乎有点超现实主义对我来说。为什么我不能给你一个真正好的直觉,为什么神经网络工作得这么好,有一些方面你应该注意。
- 我们用神经网络解决的任何问题都必须用某种数学方式来表达。对于狗和猫是这样的:我们需要找到一个函数,它从一幅图像中提取所有的数字,并输出它是一只狗的概率。你可以这样定义任何分类问题。
- 可能还不清楚,为什么有这样一个函数可以在给定的图像上区分狗和猫。这里的想法是,只要你有一些带有输入和标签的数据集,总会有一个函数在给定的数据集上工作得很好。问题是这个函数将会非常复杂。神经网络来帮忙了。有一个“通用逼*定理”,它说只有一个隐藏层的神经网络可以尽可能好地逼*任何函数。现在,还不清楚为什么,即使我们找到了这个函数的*似值,它也会在新的数据集上工作得一样好,神经网络在训练中没有看到这个数据集。这被称为泛化问题,是一个开放的研究问题。研究表明,SGD 具有“自我概括”效应。但是我们仍然没有真正理解这个问题。
七。从哪里了解更多信息
在学习神经网络时,我发现了一些非常有用的资源:
- fast.ai 课程提供了两门优秀的程序员实用深度学习课程,以及一门精彩的计算线性代数课程。这是尽快开始编写神经网络代码的好地方,同时随着课程的深入,学习更多的神经网络理论。
- neuralnetworksanddeeplearning.com 的书是一本很棒的关于基础的在线书籍。神经网络背后的理论。作者用一种非常好的方式解释了你需要知道的数学。他还提供并解释了在不使用任何深度学习框架的情况下从头实现神经网络的代码。
- 吴恩达关于深度学习的课程coursera 上的课程也很棒,可以学习更多关于神经网络的知识,从非常简单的网络开始,到卷积网络等等!
- 3Blue1Brown youtube 频道有一些很棒的视频可以帮助你理解深度学习和线性代数。它们提供了很好的可视化和非常直观的方式来思考数学和神经网络。
- 关于视觉识别的卷积神经网络的 Stanford CS231n 课程是了解更多深度学习特别是 CNN 的好地方。
怎么把物理教给机器学习模型?
原文:https://towardsdatascience.com/how-do-you-combine-machine-learning-and-physics-based-modeling-3a3545d58ab9?source=collection_archive---------7-----------------------
混合分析:结合两个世界的精华
在我的其他帖子中,我已经涉及了一些主题,如:用于异常检测和状态监控的机器学习、机器学习如何用于生产优化,以及如何避免机器学习用于时间序列预测的常见陷阱。
但你知道吗,你也可以结合机器学习和基于物理的建模?在这里,我将描述它是如何实现的,以及我们如何向机器学习模型“教授物理”。
机器学习与基于物理的建模
作为一名物理学家,我喜欢制作数学模型来描述我们周围的世界。有了关于当前情况的足够信息,一个制作精良的基于物理学的模型使我们能够理解复杂的过程并预测未来的事件。这种模型已经在我们的现代社会中广泛应用于非常不同的过程,例如预测大型太空火箭的轨道或纳米大小物体的行为,这些都是现代电子学的核心。
做出预测的能力也是机器学习(ML)的重要应用之一。一个常见的关键问题是如何在基于物理的模型和数据驱动的 ML 模型之间进行选择。答案取决于你想解决什么问题。在这种情况下,主要有两类问题:
1)我们没有关于该系统的直接理论知识,但是我们有关于它如何表现的大量实验数据。
例如,如果你对一个系统的行为没有直接的了解,你就不能用数学模型来描述它并做出准确的预测。
幸运的是,并没有失去一切。如果你有很多示例结果,你可以使用基于 ML 的模型。给定足够多的示例结果(训练数据),ML 模型应该能够学习关于系统的信息(输入变量)和您想要预测的结果(输出变量)之间的任何潜在模式。
这方面的一个例子是预测一个城市的房价。如果你有足够的同一地区类似房屋销售价格的例子,你应该能够对待售房屋的价格做出合理的预测。
2)我们对系统有很好的理解,并且我们也能够用数学方法描述它。
如果一个问题可以用基于物理的模型很好地描述,这种方法通常会是一个好的解决方案。
这并不意味着机器学习对于任何可以使用基于物理的建模来描述的问题都是无用的。相反,在混合建模方案中结合物理和机器学习是一个非常令人兴奋的前景。如此激动人心,事实上,它正在被深入研究。与我的工作相关,我最*一直在深入研究机器学习和基于物理的建模之间的交集。
混合分析:结合机器学习和基于物理的建模
即使一个系统,至少在原则上,可以用基于物理的模型来描述,这并不意味着机器学习方法不起作用。ML 模型从经验中学习的能力意味着它们也可以学习物理:给定足够多的物理系统如何表现的例子,ML 模型可以学习这种行为并做出准确的预测。
这种通过经验而不是通过数学方程来学习物理的能力对我们很多人来说都很熟悉,尽管我们可能没有意识到这一点:例如,如果你曾经踢足球,你可能会试图做出完美的射门。为了做到这一点,你必须准确预测球的路径。这是一个有点复杂的物理问题,包括几个变量,比如你踢球的力,你的脚的角度,球的重量,空气阻力,草地的摩擦力,等等。
然而,当一名足球运动员踢球时,这并不是他在几分之一秒内完成的复杂物理计算的结果。相反,他从经验中学到了正确的动作,并获得了完美击球的直觉。
( 插画作者:越轨艺术 )
原则上,ML 模型(或算法)从经验中学习的事实类似于人类学习的方式。一类称为人工神经网络的 ML 模型是受大脑如何处理信息和从经验中学习启发的计算系统。
这种从经验中学习的能力也启发了我和我的同事尝试向 ML 模型教授物理学:我们通过向模型展示输入变量和正确解的例子来训练模型,而不是使用数学方程。
当我们已经有基于物理的模型时,为什么还要使用机器学习?
一个重要的问题是,当我们有一个基于物理的模型能够描述正在讨论的系统时,我们为什么要实施基于 ML 的方法。
其中一个关键方面是模型的计算成本:我们可能能够使用基于物理的模型来详细描述系统。但是,解决这个模型可能是复杂和耗时的。因此,如果我们的目标是一个可以根据实时数据进行实时预测的模型,基于物理学的方法可能会失败。
在这种情况下,更简单的基于 ML 的模型可能是一种选择。ML 模型的计算复杂度主要在训练阶段可见。一旦模型完成训练,对新数据进行预测就很简单了。这就是结合机器学习和基于物理的建模的混合方法变得非常有趣的地方。
通过混合建模方案的虚拟流量计量
例如,我们已经考虑将这种方法用于油井虚拟流量计量的特定任务,如下图所示。几个传感器可以提供油井井下 P_dh、T_dh 以及油井节流器上游 P_uc、T_uc 和下游 P_dc、T_dc 的温度和压力测量值。我们想要解决的问题是油、气和水的流量如何依赖于这些测量值:即描述多相流率的函数:
Q_o,Q_g,Q_w = F(P_dh,P_uc,P_dc,T_dh,T_uc,T_dc,Pos_Choke)
这是一个复杂的建模任务,但使用最先进的模拟器工具,我们可以做到这一点,具有高度的准确性。
该模型捕捉了来自生产井的油、气和水的多相流的热力学和流体动力学。利用这一点,我们可以为 ML 模型生成大量模拟训练数据,并将它们与来自物理井的真实数据相结合。
这种方法的优点是,我们可以离线执行所有计算要求高的部分,快速实时预测不是问题。通过从基于物理的模型生成大量训练数据,我们可以向 ML 模型传授问题的物理原理。
经过训练的 ML 模型可以仅使用来自物理井的传感器测量值,即压力和温度,来同时预测油、气和水的流量。更重要的是,它可以在几分之一秒内做出这些预测,使其成为运行生产井实时数据的理想应用。
这种方法允许我们为生产设施上的所有油井实施虚拟多相流量计。毫无疑问,它将成为监控和生产优化的一个非常有价值的工具。
你认为还有哪些领域会受益于机器学习?
在未来,我相信机器学习将会被用在比我们今天所能想象的更多的地方。你认为它会对各个行业产生什么影响?我很想在下面的评论中听到你的想法。
如果你有兴趣了解更多与人工智能/机器学习和数据科学相关的主题,你也可以看看我写的其他一些文章。你可以在我的中型作者简介中找到它们,你可以在这里找到。
而且,如果你想成为一个媒体会员,免费访问*台上的所有资料,你也可以使用下面我的推荐链接。(注意:如果您使用此链接注册,我也会收到一部分会员费)
[## 通过我的推荐链接加入媒体- Vegard Flovik
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@vflovik/membership)
更多来自 Vegard Flovik 媒体:
- 蒙特卡洛方法简介
- 从物理学到数据科学的转变
- 什么是图论,你为什么要关心它?
- 用于图像分类的深度迁移学习
- 构建一个能读懂你思想的人工智能
- 机器学习:从炒作到现实应用
- 人工智能和大数据隐藏的风险
- 用于供应链管理的人工智能:预测分析和需求预测
- 如何(不)使用机器学习进行时间序列预测:避免陷阱
- 如何使用机器学习进行异常检测和状态监控
- 如何利用机器学习进行生产优化:利用数据提高绩效
- 我们能使用纳米级磁铁建立人工大脑网络吗?
人工智能研讨会——从宣传到现实应用
如何训练一个人脸检测模型?
原文:https://towardsdatascience.com/how-do-you-train-a-face-detection-model-a60330f15fd5?source=collection_archive---------3-----------------------
由于我最*一直在探索 MTCNN 模式(在这里了解更多信息)所以我决定试着训练它。即使只是从概念上考虑,训练 MTCNN 模型也是一个挑战。这是一个级联卷积网络,这意味着它由 3 个独立的神经网络组成,不能一起训练。我决定从训练第一网络 P-Net 开始。
P-Net 是传统的 12-Net:它以 12x12 像素的图像作为输入,并输出一个矩阵结果,告诉您是否存在人脸——如果存在,则显示每个人脸的边界框和面部标志的坐标。因此,我必须从创建一个仅由 12x12 像素图像组成的数据集开始。
开发这个模型的团队使用宽脸数据集来训练边界框坐标,使用 CelebA 数据集来训练面部标志。为了简单起见,我从只训练边界框坐标开始。
宽脸数据集包括具有不同情况下的人的 393,703 张脸的 32,203 张图像。这些图像被分成训练集、验证集和测试集。在训练集下,图像根据场合进行了划分:
Image 1: Folders of different images
每个文件夹里都有数百张照片,有成千上万张面孔:
Image 2: Inside a folder
然而,所有这些照片都明显大于 12x12 像素。我不得不将它们裁剪成多个 12x12 的正方形,其中一些包含人脸,一些不包含。
我考虑简单地创建一个 12x12 的内核,它在每张图片上移动,并且每移动 2 个像素复制其中的图片。然而,这将给我留下数百万张照片,其中大多数不包含人脸。为了确保更好的训练过程,我希望大约 50%的训练照片包含人脸。此外,面可以具有不同的尺寸。我需要不同大小的脸的图像。
这是我决定要做的:首先,我将加载照片,去掉任何有一张以上脸的照片,因为这些照片只会使裁剪过程更加复杂。
然后,我将为每张照片创建 4 个不同比例的副本,这样我就有一个副本,照片中的人脸高 12 像素,一个高 11 像素,一个高 10 像素,一个高 9 像素。
小于 9x9 像素的人脸太小,无法识别。为了说明我的观点,这里有一张年轻的贾斯汀比伯的 9x9 像素的脸:
Image 3: 9x9 Justin Bieber // Source
对于每个缩放后的副本,我会尽可能多地裁剪 12x12 像素的图像。例如,在这张 12x11 像素的贾斯汀比伯图像中,我可以裁剪两张包含他的脸的图像。
使用更小的比例,我可以裁剪更多的 12x12 的图像。对于每张裁剪后的图像,我需要将边界框坐标转换为 0 到 1 之间的值,其中图像的左上角是(0,0),右下角是(1,1)。这使得处理计算以及将图像和边界框缩放回原始大小变得更加容易。
Image 4: Converting bounding box coordinates // Source
最后,我将边界框坐标保存到一个. txt 文件中。我运行了几次,发现每张脸产生了大约 60 个裁剪过的图像。我需要做的就是再创建 60 张没有人脸的裁剪过的图片。
生成负面(无脸)图像比生成正面(有脸)图像更容易。类似地,我创建了每张图片的多个缩放副本,正面分别为 12、11、10 和 9 像素高,然后我随机绘制了 12×12 像素的方框。如果那个盒子碰巧落在边界框内,我就画另一个。如果该框没有与边界框重叠,我就裁剪了图像的这一部分。
最后,我生成了大约 5000 张正面图像和 5000 张负面图像。这足以做一个非常简单的短期训练。
训练变得简单多了。使用原始文件中的代码,我构建了 P-Net。然后,我读入正负图像,以及边界框坐标集,每个都作为一个数组。我给了每个负像的边界框坐标[0,0,0,0]。
然后,我用一个索引将这些图像混在一起:因为我首先加载的是正图像,所以所有的正图像都在数组的开头。如果我不洗牌的话,前几批训练数据都是正像。
最后,我定义了一个交叉熵损失函数:每个包围盒坐标和概率的误差*方。
我跑了一圈训练。大约 30 个时期后,我达到了大约 80%的准确率……考虑到我的数据集中只有 10000 张图片,这已经不错了。
保存我的权重后,我将它们加载回完整的 MTCNN 文件,并用我新训练的 P-Net 进行了测试。就像以前一样,它仍然可以准确地识别人脸,并在人脸周围画出边框。MTCNN 模型的一个巨大优势是,即使 P-Net 精度下降,R-Net 和 O-Net 仍然可以设法细化边界框边缘。
我没有再次经历为 RNet 和 ONet 处理数据的繁琐过程,而是在 Github 上找到了这个 MTCNN 模型,其中包括该模型的培训文件。该模型类似地仅用宽脸数据集训练边界框坐标(而不是面部标志)。
Image 5: Intersection over Union
正如我所做的那样,这个模型在训练过程之前裁剪了每个图像(P-Net 为 12×12 像素,R-Net 为 24×24 像素,O-Net 为 48×48 像素)。与我的简单算法不同,这个团队根据 IoU (交集超过并集,即 12x12 图像和边界框之间的相交面积除以 12x12 图像和边界框的总面积)将图像分类为正面或负面,并包括一个单独的“部分”面类别。
创建单独的“部分面部”类别允许网络学习部分覆盖的面部。这样,即使你戴着墨镜,或者把半边脸转开,网络仍然可以识别你的脸。
此外,对于 R-Net 和 O-Net 培训,他们利用了硬样本挖掘。即使经过训练,P-Net 也不是完美的;它仍然会将一些没有人脸的图像识别为正面(有人脸)图像。这些图像被称为假阳性。由于 R-Net 的工作是细化包围盒边缘,减少误报,因此在训练 P-Net 之后,我们可以将 P-Net 的误报包含在 R-Net 的训练数据中。这样可以帮助 R-Net 针对 P-Net 的弱点,提高准确率。这个过程被称为硬样品开采。类似地,他们也在 O-Net 训练中应用硬样本挖掘。
这个模型的另一个有趣的方面是他们的损失函数。他们没有为人脸检测和边界框坐标定义一个损失函数,而是分别定义了一个损失函数。在训练过程中,他们在每个反向传播步骤中在两个损失函数之间来回切换。我以前从未见过这样定义的损失函数——我一直认为定义一个包罗万象的损失函数会更简单。不知道这样来回切换是否提高了训练精度?
训练这个模型花了 3 天时间。大型数据集使得训练和生成硬样本成为一个缓慢的过程。另外,我第一次训练的时候 GPU 就用完了内存,迫使我重新训练 R-Net 和 O-Net(又花了一天)。
我以前没有研究过这个,但是分配 GPU 内存是训练过程的另一个重要部分。在每个培训计划结束时,他们会记录他们想要使用多少 GPU 内存,以及他们是否允许增长。如果是,如果需要的话,程序可以请求更多的内存。如果没有,程序将在程序开始时分配内存,并且在整个训练过程中不会使用超过指定的内存。这使得进程更慢,但降低了 GPU 耗尽内存的风险。
- 点击此处阅读实现 MTCNN 模型!
- 点击此处阅读 MTCNN 模型的网络结构!
- 点击此处阅读 MTCNN 模式如何运作!
点击此处下载 MTCNN 论文和资源:
- 受训模特 Github 下载:【https://github.com/ipazc/mtcnn
- 可训练模型 Github 下载:https://github.com/wangbm/MTCNN-Tensorflow
- 调研文章:http://arxiv.org/abs/1604.02878
- 我的 PNet 培训代码:https://github.com/reinaw1012/pnet-training
Docker 如何帮助您成为更高效的数据科学家
原文:https://towardsdatascience.com/how-docker-can-help-you-become-a-more-effective-data-scientist-7fc048ef91d5?source=collection_archive---------0-----------------------
作者:哈默尔·侯赛因
在过去的 5 年里,我听到了很多关于码头集装箱的传言。似乎我所有的软件工程朋友都在用它们开发应用程序。我想弄清楚这项技术如何能让我更有效,但我发现在线教程要么太详细:阐述我作为数据科学家永远不会使用的功能,要么太肤浅:没有给我足够的信息来帮助我了解如何快速有效地使用 Docker。
我写了这个快速入门,所以你不必解析所有的信息,而是可以学习你需要知道的东西来快速入门
编辑 2020 年 8 月 24 日 : 本文写于 2017 年。大部分仍然是正确的,我已经注释了事情发生变化的几个地方。我仍然鼓励你阅读这篇文章。当你完成后,你可能也会喜欢我最*在 Docker 上做的这些 详细笔记。
Docker 是什么?
您可以将 Docker 视为轻量级虚拟机,其中包含运行应用程序所需的一切。docker 容器可以捕获系统状态的快照,以便其他人可以快速重建您的计算环境。对于本教程,这就是你需要知道的全部,但是更多细节你可以点击这里。
为什么要用 docker?
- 可再现性:作为一名专业的数据科学家,你的工作具有可再现性真的很重要。再现性不仅有助于同行评审,还能确保您构建的模型、应用程序或分析能够顺利运行,从而使您的交付成果更加健壮,经得起时间的考验。例如,如果您在 python 中构建了一个模型,仅仅运行 pip-freeze 并将结果 requirements.txt 文件发送给您的同事通常是不够的,因为这只会封装 python 特定的依赖关系,而通常存在于 python 之外的依赖关系,如操作系统、编译器、驱动程序、配置文件或代码成功运行所需的其他数据。即使您可以只共享 python 依赖项,但是将所有内容包装在 Docker 容器中可以减轻其他人重新创建您的环境的负担,并使您的工作更容易访问。
- 计算环境的可移植性:作为一名数据科学家,尤其是在机器学习领域,能够快速改变计算环境会极大地影响你的工作效率。数据科学工作通常从原型制作、探索和研究开始,这些工作不一定马上需要专门的计算资源。这项工作通常在笔记本电脑或个人电脑上进行。然而,经常会出现不同的计算资源会大大加快您的工作流程的情况,例如,一台具有更多 CPU 的机器或一个用于深度学习等事情的更强大的 GPU。我看到许多数据科学家将自己限制在本地计算环境中,因为他们认为在远程机器上重新创建本地环境会有摩擦。Docker 负责移植您的环境(所有的库、文件等)。)非常容易。快速移植您的计算环境也是 Kaggle 竞争中的一个巨大竞争优势,因为您可以以经济高效的方式利用 AWS 上的宝贵计算资源。最后,创建 docker 文件允许您移植许多您喜欢的本地环境的东西——比如 bash 别名或 vim 插件。
- 增强您的工程能力:熟悉 Docker 可以让您将模型或分析部署为应用程序(例如,作为可以提供预测服务的 REST API 端点),让其他人可以访问您的工作。此外,作为数据科学工作流的一部分,您可能需要与之交互的其他应用程序可能存在于 Docker 容器中,如数据库或其他应用程序。
码头术语
在我们开始之前,熟悉 Docker 术语很有帮助:
- 图像:是你想要构建的蓝图。例如:Ubuntu + TensorFlow,带有 Nvidia 驱动程序和运行的 Jupyter 服务器。
- 容器:是你赋予生命的图像的实例。您可以运行同一映像的多个副本。掌握图像和容器之间的区别非常重要,因为这对新来者来说是一个常见的混淆来源。如果图像和容器之间的区别不清楚,停下来再读一遍。
- Dockerfile :创建图像的方法。Docker 文件包含特殊的 Docker 语法。从官方文档来看:
Dockerfile
是一个文本文档,它包含用户可以在命令行上调用的所有命令来组合一个图像。 - 提交:和 git 一样,Docker 容器提供版本控制。通过提交更改,您可以随时将 docker 容器的状态保存为新的图像。
- DockerHub / Image Registry :人们可以发布公共(或私人)docker 图片以促进协作和共享的地方。
- 层:对已有图像的修改,由 docker 文件中的指令表示。图层按顺序应用于基础图像,以创建最终图像。
我将在这篇文章的其余部分使用这个术语,所以如果你迷路了,请参考这个列表!这些术语很容易混淆,尤其是图像和容器之间——所以在阅读时要保持警惕!
安装 Docker
你可以免费下载并安装 Docker 社区版。你可以在这里按照的指示。
创建您的第一个 Docker 图像
在创建 docker 容器之前,创建一个定义图像的 docker 文件是很有用的。让我们慢慢浏览下面的文档。你可以在本教程 附带的 Github repo 上找到这个文件 。
语句中的
FROM ubuntu:16.04
来自语句的封装了 Docker 最神奇的部分。该语句指定了要在其上构建的基础映像。在用 FROM 指定一个基本映像后, Docker 将在您的本地环境中查找一个名为 ubuntu:16.04 的映像,如果在本地找不到,它将搜索您指定的 Docker 注册表,默认为 DockerHub 。这种分层机制很方便,因为你经常想在 Ubuntu 这样的操作系统上安装你的程序。不用担心如何从头开始安装 Ubuntu,你可以简单地在官方的 Ubuntu 映像上构建!Dockerhub 上托管着各种各样的 Docker 映像,包括那些不仅仅提供操作系统的映像,例如,如果您想要一个已经安装了 Anaconda 的容器,您可以在官方的 anaconda docker 映像之上构建一个容器。最重要的是,您还可以随时发布您构建的图像,即使该图像是通过在另一个图像上分层而创建的!可能性是无限的。****
在这个例子中,我们指定我们的基本映像是 ubuntu:16.04 ,它将寻找一个名为 ubuntu 的 DockerHub repo。冒号-16.04 后面的镜像名称部分是标签,它允许您指定想要安装的基本镜像版本。如果你导航到 Ubuntu DockerHub repo ,你会注意到不同版本的 Ubuntu 对应不同的标签:
Screenshot of the official Ubuntu DockerHub repo as of December 2017.
比如在本文撰写之时, ubuntu:16.04 、 ubuntu:xenial-20171201 、 ubuntu:xenial 、 ubuntu:latest 都是指 Ubuntu 16.04 版本,都是同一个镜像的别名。此外,该存储库中提供的链接将您链接到用于构建每个版本的映像的相应 docker 文件。你不会总是在 DockerHub 库上找到 DockerHub 文件,因为维护者可以选择包含他们如何制作映像的 DockerHub 文件。我个人发现看几个这样的 Dockerfiles 对更好地理解 Dockerfiles 很有用(但是等你看完这个教程再说吧!)
有一个标签值得特别一提,那就是:最新的标签。如果您没有在您的 FROM 语句中指定一个标签,这个标签指定了您将默认拉取的内容。例如,如果您的 FROM 语句如下所示:
FROM ubuntu
那么你最终只会得到 ubuntu:16.04 的图像。为什么?—如果仔细看上面的截图,您会看到:latest 标签与 16.04 相关联
关于 Docker 图片的最后一点:当从 DockerHub 中提取随机的 Docker 图片时,运用明智的判断。恶意行为者创建的 Docker 图像可能包含恶意软件。
标签声明
该语句向图像添加元数据,并且是完全可选的。我添加这个是为了让其他人知道应该联系谁来处理这个映像,也是为了让我可以搜索我的 docker 容器,特别是当服务器上有很多容器同时运行的时候。
LABEL maintainer="Hamel Husain <youremail>"
ENV 语句
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
这允许您更改环境变量,而且非常简单。你可以在这里阅读更多关于这个的内容。
运行语句
这通常是完成你想要建立一个 Docker 形象的主要手段。您可以运行任意 shell 命令,如 apt-get 和 pip install 来安装您想要的包和依赖项。
RUN apt-get update --fix-missing && apt-get install -y wget bzip2
build-essential \
ca-certificates \
git-core \
...
在本例中,我安装了一些我喜欢的实用程序,比如 curl、htop、byobu,然后安装了 anaconda,接着安装了基本 anaconda 安装中没有的其他库(向上滚动到完整的 other 文件以查看所有的 RUN 语句)。
在 RUN 语句之后的命令与 Docker 无关,而是普通的 linux 命令,如果您自己安装这些包,您将会运行这些命令,所以如果您不熟悉这些包或 linux 命令,也不用担心。另外,作为进一步的建议——当我第一次开始学习 docker 时,我查看了 Github 或 DockerHub 上的其他 docker 文件,并将我想要的相关部分复制并粘贴到我的 docker 文件中。
您可能会注意到 RUN 语句的格式。为了可读性,每个库或包都整齐地缩进并按字母顺序排列。这是 Dockerfiles 的一个普遍惯例,所以我建议你采用它,因为它会简化协作。
EXPOSE 语句
如果您试图公开一个端口——例如,如果您从容器内部为一个 jupyter 笔记本或某种 web 服务提供服务,这个语句会很有帮助。Docker 的文档很好地解释了 EXPOSE 语句:
EXPOSE
指令实际上并不发布端口。它在构建映像的人和运行容器的人之间起到一种文档的作用,说明打算发布哪些端口。要在运行容器时实际发布端口,使用docker run
上的-p
标志发布并映射一个或多个端口,或者使用-P
标志发布所有公开的端口并将它们映射到高阶端口。
卷报表
VOLUME /ds
这个语句允许你在 docker 容器和主机之间共享数据。VOLUME 语句允许您挂载外部挂载的卷。主机目录仅在容器运行时声明(因为您可能在不同的计算机上运行该容器),而不是在定义映像时。现在,您只需在 docker 容器中指定想要与主机容器共享的文件夹的名称。*
来自 docker 用户指南:
*** 主机目录是在容器运行时声明的:主机目录(挂载点)本质上是依赖于主机的。这是为了保持图像的可移植性。因为不能保证给定的主机目录在所有主机上都可用。因此,您不能从 docker 文件中挂载主机目录。
*VOLUME*
指令不支持指定*host-dir*
参数。创建或运行容器时,必须指定挂载点。**
此外,这些卷意味着在容器的文件系统之外持久存储数据,如果您正在处理大量数据,并且不希望 docker 映像膨胀,这通常是有用的。保存 docker 映像时,此卷目录中的任何数据都不会保存为映像的一部分,但是容器中此目录之外的数据将被保存。
WORKDIR 语句
WORKDIR /ds
该语句设置工作目录,以防您想要在另一个命令中引用没有绝对路径的特定文件。例如,docker 文件中的最后一条语句是
CMD [“./run_jupyter.sh”]
假设工作目录是/ds
ADD 语句
编辑 2020 年 8 月 24 日:您现在应该使用 COPY 语句而不是 ADD 语句。在这里阅读更多。****
*ADD run_jupyter.sh /ds/run_jupyter.sh*
该命令允许您在 docker 容器运行时将文件从主机复制到 docker 容器中。我用它来执行 bash 脚本并将有用的东西导入容器,比如。bashrc 文件。
请注意这里没有完全指定主机容器的路径,因为主机路径是相对于运行容器时指定的上下文目录的(这将在后面讨论)。
当我运行这个容器的时候,碰巧我会将文件 run_jupyter.sh 放在上下文目录的根目录下,所以这就是为什么在源文件前面没有路径。
从用户指南中:
ADD <src>... <dest>
ADD
指令从<src>
复制新文件、目录或远程文件 URL,并将它们添加到路径<dest>
处的镜像文件系统中。
CMD 声明
Docker 容器的设计理念是,它们是短暂的,只停留足够长的时间来完成你想要运行的应用程序。然而,对于数据科学来说,我们经常希望让这些容器保持运行,即使其中没有任何活动的东西在运行。许多人通过简单地运行 bash shell(除非您杀死它,否则它不会终止)来实现这一点。
*CMD [“./run_jupyter.sh”]*
在上面的命令中,我运行一个 shell 脚本来实例化一个 Jupyter 笔记本服务器。但是,如果您没有任何想要运行的特定应用程序,但是您希望容器在不退出的情况下运行,那么您可以使用下面的命令来运行 bash shell:
*CMD ["/bin/bash"]*
这是可行的,因为 bash shell 在您退出之前不会终止,因此容器保持启动和运行。
从用户指南中:
一条
Dockerfile
中只能有一条CMD
指令。如果您列出了多个CMD
,那么只有最后一个CMD
会生效。****
**CMD**
的主要用途是为正在执行的容器提供默认值。这些默认值可以包括一个可执行文件,也可以省略该可执行文件,在这种情况下,您还必须指定一条ENTRYPOINT
指令。
建立你的码头工人形象
唷,这是关于 Dockerfiles 的大量信息。别担心,从这里开始,其他事情都相当简单。现在我们已经以 docker 文件的形式创建了我们的食谱,是时候构建一个图像了。您可以通过以下命令完成此操作:
Also available on Github
这将构建一个 docker 映像(不是容器,如果你不记得区别是什么,请阅读本文开头的术语!),您可以在以后运行它。
从您的 Docker 映像创建并运行一个容器
现在,您已经准备好让所有这些魔法发挥作用了。我们可以通过执行以下命令来启动此环境:
Also available on Github
在您运行这个之后,您的容器将启动并运行!jupyter 服务器将启动运行,因为
***CMD [“./run_jupyter.sh”]***
**Dockerfile 文件末尾的命令。现在,您应该能够在它所服务的端口上访问您的 jupyter 笔记本了——在本例中,应该可以使用密码教程从 http://localhost:7745/ 访问它。如果你远程运行这个 docker 容器,你必须设置本地端口转发以便你可以从你的浏览器访问 jupyter 服务器。
与容器交互
一旦您的容器启动并运行,这些命令将会派上用场:
- 将新的终端会话附加到容器。如果您需要安装一些软件或使用 shell,这很有用。
- 将容器的状态保存为新图像。即使您从一个包含所有想要安装的库的 over 文件开始,随着时间的推移,您可能会通过交互地添加更多的库和包来显著地改变容器的状态。将容器的状态保存为图像是很有用的,您可以稍后共享或在其上分层。您可以通过使用 docker commit CLI 命令来实现这一点:
***docker commit <container_name> new_image_name:tag_name(optional)***
例如,如果我想将名为 container1 的容器的状态保存为名为 hamelsmu/tutorial:v2 的图像,我只需运行以下命令:
***docker commit container_1 hamelsmu/tutorial:v2***
你可能想知道为什么 hamelsmu/ 在图像名称的前面——这只是为了让[稍后更容易将这个容器推送到 DockerHub](http://n order to push a repository to the Docker Hub, you need to name your local image using your Docker Hub username, and the repository name that you created) ,因为 hamelsmu 是我的 DockerHub 用户名(稍后将详细介绍)。如果你在工作中使用 Docker,很可能有一个内部私有的 Docker repo,你可以把你的 Docker 图片放到里面。
- 列出运行容器。当我忘记了当前正在运行的容器的名称时,我经常使用这个方法。
***docker ps -a -f status=running***
如果您在没有 status=running 标志的情况下运行上面的命令,那么您将看到系统上所有容器的列表(即使它们不再运行)。这对于追踪旧容器很有用。
- 列出您保存在本地的所有图像。
***docker images***
- ****将您的图像推送到 DockerHub(或另一个注册表)。如果你想和别人分享你的作品,或者方便地在云中保存图片,这是很有用的。注意,这样做时不要分享任何私人信息(DockerHub 上也有私人回购)。
首先创建一个 DockerHub 存储库,并适当地命名您的映像,如这里所描述的。这将包括运行命令 docker login 首先连接到你在 DockerHub 或其他注册表上的帐户。例如,要将一个图像推送到这个容器,我首先必须将我的本地图像命名为 hamelsmu/tutorial(我可以选择任何标记名)例如,CLI 命令:
***docker push hamelsmu/tutorial:v2***
将上述 docker 图像推送到标签为 v2 的该储存库。应该注意的是,如果你公开你的图片,其他人可以简单地在你的图片上叠加图层,就像我们在本教程中给 ubuntu 图片添加图层一样。这对其他寻求复制或扩展你的研究的人来说是非常有用的。****
现在你有超能力了
现在您已经知道如何操作 Docker,您可以执行以下任务:
- 与同事和朋友分享可重复的研究。
- 通过根据需要将您的代码临时迁移到更大的计算环境中,在不破产的情况下赢得 Kaggle 竞赛。
- 在您的笔记本电脑上的 docker 容器中本地构建原型,然后毫不费力地将相同的计算无缝地转移到服务器,同时随身携带许多您喜欢的本地环境的东西(您的别名、vim 插件、bash 脚本、定制提示等)。
- 使用 Nvidia-Docker 快速实例化在 GPU 计算机上运行 Tensorflow、Pytorch 或其他深度学习库所需的所有依赖关系(如果你从头开始做这件事,这可能会很痛苦)。更多信息见下面的奖金部分。
- 将您的模型作为应用程序发布,例如作为一个 rest api,它从 docker 容器中提供预测服务。当您的应用程序被 docker 化时,它可以根据需要被任意多次复制。
延伸阅读
我们只是触及了 Docker 的皮毛,您还可以做更多的事情。我把重点放在了 Docker 的一些领域,我认为作为一名数据科学家,您会经常遇到这些领域,希望能给你足够的信心开始使用它。以下是一些对我的 Docker 之旅有帮助的资源:
- 2020 年 8 月 24 日编辑:以下是我最*在 Docker 上做的一些更详细的笔记。
- 有用的停靠命令
- 更有用的 Docker 命令
- 文档参考
- 如何在 DockerHub 上创建并推送存储库
奖金:英伟达-Docker
我最初学习 Docker 的最初动机是在单个 GPU 上构建深度学习模型的原型,并在我需要更多马力时将计算转移到 AWS。我也在快速学习这门优秀的课程。人工智能由杰瑞米·霍华德开发,并希望与他人分享原型。
然而,要正确封装所有依赖项,如 Nvidia GPUs 的驱动程序,您需要使用 Nvidia-Docker 而不是 Docker。这比使用普通的 Docker 需要更多的工作,但是一旦你理解了 Docker,这就很简单了。
我已经将我的 Nvidia-Docker 设置放在这个报告中,并将它作为读者的练习。
取得联系!
希望这个教程对别人有用。你可以通过以下方式联系我: Github , Twitter , Linkedin 。
计算机如何画出*滑的线条?
原文:https://towardsdatascience.com/how-does-a-computer-draw-a-smooth-line-a484176ac24e?source=collection_archive---------8-----------------------
将用于追踪数据点连线的统计技术背后的一些直觉可视化
如果我让你在一堆点之间画一条*滑的线,你可能会做得很好。这也是记者们一直在做的事情,用计算机图形来展示他们数据的趋势。但是我们如何从第一个例子转到第二个例子——计算机如何复制我们在描绘线条时的直觉?
一种这样的方法被称为核回归(或者更具体地说, Nadaraya-Watson 核回归),它使用以下等式来估计输入 x 的因变量 y :
如果你是那种一旦一个数学方程式出现就放弃一篇文章的人,我劝你留下来,因为这实际上比看起来要简单,我们将在下一段之后完成数学。
上面的等式只是说,我们可以通过对现有点进行加权*均来估计任何新点。 x-xi 项测量我们的新点和旧点之一之间的距离,并且 K 函数(内核)在乘以伴随的 y- 值之前基于该距离分配一个权重。将所有这些加权点相加,您将获得一个基于所有旧点的值的新点的估计值(分母确保权重总和为 1)。
这当然是一种更明确的技术方法,我们本能地在数据中划线:考虑接*的点,而忽略其余的大部分,尤其是那些最远的点。
如果这仍然没有意义,那么…很好!这篇文章的目标是直观地理解内核是如何工作的,而不是数学上的。我们最终的成果将会是一张 GIF 图,清晰地展示了一个运行中的内核,它画出了一条*滑的线。从现在开始,我们将使用 R 来写一些代码,如果你熟悉这种语言或者忽略它,你就可以理解。
首先我们需要一些假数据。我们将为我们的 x- 值数到 100,并且为了创建一个体面的曲线响应,我们的 y- 值将是 x 的*方和 x 的正弦的乘积(缩小到一个周期)。自然地,我们会添加一些噪声来动摇这些点的基本功能。
使用 R 包 ksmooth ,我们可以很容易地使用我们刚刚定义的内核回归为这些数据画一条*滑的线。“正常”一词指定了我们使用的内核类型,而带宽设置了它的灵敏度——带宽越小,*滑线就越优先考虑非常接*的点。
现在,在我们看到中间步骤之前,内核包自动实现了前面的等式——这毕竟是统计软件的目的——但我们需要每个点的权重的实际值,以便我们可以直观地看到它们对曲线的影响。
因为我们使用的是高斯核,所以周围点的权重是正态分布的,峰值出现在距离 0 处(也就是说,处的是正在讨论的新点),我们可以使用 R 的 dnorm 函数来计算。冒着做一些经典数学手势的风险,我会忽略下面的“比例”线——简而言之,这是我们将由四分位数定义的 ksmooth 带宽转换成适当的正态分布的方式。
现在我们有了一种方法来表达进入内核估计的每个周围点的权重,我们可以使用点的大小和颜色来可视化它。更具体地说,对于光滑线上的任何一个新点,现有点的影响都是通过它们有多大和多红来体现的。比如这里是点 x = 50:
本质上,如果我们跟踪*滑线到它落在值为 50 的 x- 上的地方,我们会得到周围点的*均值,这些点具有由它们的大小和颜色表示的各种权重。附*的点对*滑器的影响很大,因此又大又红;更远的点几乎可以忽略不计,因此又小又蓝。
让我们想象一下。通过对 1 到 100 之间的每个 x 值进行相同的计算和可视化,我们可以生成一堆图像,然后将它们拼接成一个漂亮的小 GIF。这就像在 for 循环中执行上述代码一样简单,然后将各个图像上传到一些免费的在线软件中来创建 GIF:
如果 GIF 因为某种原因没有加载,也是这里
这在某种程度上是对内核回归的权宜之计。当然,我们可以解开更多的等式,或者使用不同的内核和不同的带宽。
但是我们最终的 GIF 仍然说明了*滑内核背后的概念。此外,这有点像我们在窥视电脑的脑电波,因为它决定在画线时要考虑哪些点。反过来,这个过程对于任何用传统的手工方式做过类似事情的人来说都是非常熟悉的。
感谢阅读。我其他的大部分统计思想都可以在我的博客上找到,conflem . city。这里的完整代码是 。
人脸检测程序是如何工作的?(使用神经网络)
原文:https://towardsdatascience.com/how-does-a-face-detection-program-work-using-neural-networks-17896df8e6ff?source=collection_archive---------0-----------------------
神经网络人脸检测初学者指南
Cover image: Face Detection // Source
最*,我一直在玩一个用于人脸检测的多任务级联卷积网络(MTCNN)模型。该模型具有三个卷积网络(P-Net、R-Net 和 O-Net ),能够在保持实时性能的同时超越许多人脸检测基准。但是,它到底是如何工作的呢?
注: 如果你想要一个如何处理人脸检测神经网络的具体例子,我在下面附上了 MTCNN 模型的下载链接。下载后,打开。/mtcnn/mtcnn.py 并滚动到 detect_faces 函数。这是您在实现该模型时会调用的函数,因此浏览该函数会让您了解程序是如何计算和缩小边界框和面部特征的坐标的。但是,我不会一行一行地解读代码:这不仅会使本文变得冗长,而且对大多数读者来说也是适得其反的,因为代码中的许多参数只适用于这个特定的模型。
Image 1: MTCNN Structure // Source
第一阶段:
显然,要做的第一件事是向程序传递一个图像。在这个模型中,我们想要创建一个图像金字塔,以便检测所有不同大小的人脸。换句话说,我们希望以不同的尺寸创建相同图像的不同副本,以便在图像中搜索不同尺寸的人脸。
Image 2: Image Pyramid // Source
对于每个缩放副本,我们有一个 12 x 12 的阶段 1 内核,它将遍历图像的每个部分,扫描人脸。它从左上角开始,是图像从(0,0)到(12,12)的一部分。图像的这一部分被传递给 P-Net,如果 P-Net 注意到人脸,它将返回边界框的坐标。然后,它将对部分(0+2a,0+2b)到(12+2a,12+2b)重复该过程,一次将 12 x 12 内核向右或向下移动 2 个像素。2 个像素的移动被称为步距,或者内核每次移动多少像素。
步长为 2 有助于降低计算复杂度,而不会显著牺牲精度。由于大多数图像中的人脸都比两个像素大得多,所以内核仅仅因为人脸移动了两个像素而错过它是极不可能的。同时,你的计算机(或任何运行这段代码的机器)将有四分之一的运算量要计算,使程序运行得更快,内存更少。
唯一的缺点是,我们必须重新计算与步幅相关的所有指标。例如,如果内核在向右移动一步后检测到一张人脸,输出索引将告诉我们该内核的左上角在(1,0)。但是,因为步幅是 2,所以我们必须将索引乘以 2 才能得到正确的坐标:(2,0)。
每一个核相对于一幅大图像来说都要小一些,所以它能够在大图像中找到更小的脸。类似地,相对于较小尺寸的图像,内核会更大,因此它能够在较小尺寸的图像中找到较大的人脸。
Video: Kernels can find smaller faces in larger images, and bigger faces in smaller images.
传入图像后,我们需要创建图像的多个缩放副本,并将其传入第一个神经网络——P-Net——并收集其输出。
Image 3: Sample output for P-Net. Note that the actual output has 4 dimensions, but for simplicity, I’ve combined it into a 2-dimensional array. Also, the coordinates for the bounding boxes are values between 0 and 1: (0,0) would be the top left corner of the kernel, while (1,1) would be the bottom right corner of the kernel.
P-Net 的权重和偏差已经被训练,使得它为每个 12×12 核输出相对准确的边界框。然而,网络对一些盒子比其他的更有信心。因此,我们需要解析 P-Net 输出,以获得每个边界框的置信度列表,并删除具有较低置信度的框(即,网络不太确定是否包含人脸的框)
Image 4: Standardizing kernel coordinates by multiplying it by the scale
在我们挑选出具有较高可信度的框后,我们必须标准化坐标系,将所有坐标系转换为实际的“未缩放”图像的坐标系。由于大多数内核位于缩小的图像中,因此它们的坐标将基于较小的图像。
然而,仍然有许多边界框留下,并且它们中的许多重叠。非最大抑制,或 NMS,是一种减少边界框数量的方法。
在这个特定的程序中,NMS 是通过首先根据置信度或得分对边界框(以及它们各自的 12×12 个内核)进行排序来进行的。在其他一些模型中,NMS 采用最大的包围盒,而不是网络最有信心的那个。
随后,我们计算每个核的面积,以及每个核与得分最高的核之间的重叠面积。与得分高的内核重叠很多的内核会被删除。最后,NMS 返回一个“幸存”边界框的列表。
Image 5: Non-Maximum Suppression
我们对每个缩放的图像进行一次 NMS,然后对每个尺度中所有幸存的内核再进行一次。这消除了多余的边界框,允许我们将搜索范围缩小到每张脸一个精确的框。
为什么我们不能只选择可信度最高的盒子,把其他的都删掉呢?上图只有一张脸。然而,在其他图像中可能有不止一张脸。如果是这样,我们将会删除其他面的所有边界框。
之后,我们将边界框坐标转换为实际图像的坐标。现在,每个边界框的坐标是一个介于 0 和 1 之间的值,其中(0,0)是 12 x 12 内核的左上角,(1,1)是右下角(见上表)。通过将坐标乘以实际的图像宽度和高度,我们可以将边界框坐标转换为标准的实际大小的图像坐标。
Image 6: Here, the red box is the 12 x 12 kernel, while the yellow box is the bounding box inside it.
在此图中,红框代表 24 x 24 内核,大小调整回原始图像。我们可以计算内核的宽度和高度:1500–200 = 300,1800–500 = 300(注意宽度和高度不一定是 12。这是因为我们使用了原始图像中内核的坐标。这里我们得到的宽度和高度是当缩小到原来的尺寸时内核的宽度和高度。)之后,我们将包围盒坐标乘以 300: 0.4x300 = 120,0.2x300 = 60,0.9x300 = 270,0.7x300 = 210。最后我们加上内核的左上坐标,得到包围盒的坐标:(200+120,500+60)和(200+270,500+210)或者(320,560)和(470,710)。
由于边界框可能不是正方形的,我们通过拉长较短的边将边界框整形为正方形(如果宽度小于高度,我们向侧面扩展;如果高度小于宽度,我们就垂直展开)。
最后,我们保存边界框的坐标,并将其传递给阶段 2。
第二阶段:
有时,图像可能只包含从框架侧面窥视的脸部的一部分。在这种情况下,网络可能会返回一个部分超出框架的边界框,就像下面照片中 Paul McCartney 的脸:
Image 7: The Beatles and their bounding boxes. Paul McCartney’s box is out of bounds and requires padding. // Source
对于每个边界框,我们创建一个相同大小的数组,并将像素值(边界框中的图像)复制到新数组中。如果边界框超出边界,我们只将边界框中的图像部分复制到新数组中,并用 0 填充其他所有内容。在上图中,麦卡特尼脸部的新数组在盒子的左侧有像素值,在右边附*有几列 0。这个用 0 填充数组的过程叫做填充。
填充边界框数组后,我们将它们的大小调整为 24 x 24 像素,并将其归一化为-1 到 1 之间的值。目前,像素值在 0 到 255 之间(RGB 值)。通过将每个像素值减去 255 的一半(127.5)并除以 127.5,我们可以将它们的值保持在-1 和 1 之间。
现在我们有了许多 24 x 24 的图像数组(与阶段 1 中幸存的边界框的数量一样多,因为这些边界框中的每一个都已被调整大小并归一化到这些内核中),我们可以将它们输入 R-Net 并收集其输出。
R-Net 的输出类似于 P-Net 的输出:它包括新的、更精确的边界框的坐标,以及每个边界框的置信度。
再一次,我们去除具有较低置信度的盒子,并且对每个盒子执行 NMS 以进一步消除冗余的盒子。由于这些新边界框的坐标是基于 P-Net 边界框的,我们需要将它们转换成标准坐标。
标准化坐标后,我们将边界框整形为正方形,以传递给 O-Net。
第三阶段:
在我们可以从 R-Net 传入边界框之前,我们必须首先填充所有超出边界的框。然后,在我们将框的大小调整为 48 x 48 像素后,我们可以将边界框传入 O-Net。
O-Net 的输出与 P-Net 和 R-Net 略有不同。O-Net 提供 3 个输出:边界框的坐标(out[0])、5 个面部标志的坐标(out[1])和每个框的置信度(out[2])。
再一次,我们去除了具有较低置信水*的框,并且标准化了边界框坐标和面部标志坐标。最后,我们让他们通过最后一个 NMS。此时,图像中的每个面应该只有一个边界框。
交付结果:
最后一步是将所有的信息打包到一个字典中,字典有三个关键词:“盒子”、“信心”和“关键点”。“框”包含边界框的坐标,“置信度”包含每个框的网络置信度,而“关键点”包含每个面部标志(眼睛、鼻子和嘴的端点)的坐标。
当我们想在自己的代码中实现这个模型时,我们所要做的就是调用 detect_faces,我们将得到这个字典,其中包含绘制边界框和标记面部特征所需的所有坐标。
下面是整个过程的简短总结:
第一阶段:
- 传入图像
- 创建图像的多个缩放副本
- 将缩放图像输入 P-Net
- 收集 P-Net 输出
- 删除低置信度的边界框
- 将 12 x 12 内核坐标转换为“未缩放图像”坐标
- 每个缩放图像中内核的非最大值抑制
- 所有内核的非最大抑制
- 将边界框坐标转换为“未缩放图像”坐标
- 将边界框整形为方形
第二阶段:
- 填充未装订的盒子
- 将缩放后的图像输入 R-Net
- 收集 R-Net 输出
- 删除低置信度的边界框
- 所有框的非最大抑制
- 将边界框坐标转换为“未缩放图像”坐标
- 将边界框整形为方形
第三阶段:
- 填充未装订的盒子
- 将缩放图像输入 O-Net
- 收集 O-Net 输出
- 删除低置信度的边界框
- 将边界框和面部标志坐标转换为“未缩放图像”坐标
- 所有框的非最大抑制
交付结果:
- 将所有坐标和置信度打包到一个字典中
- 归还字典
最后备注:
这个模型与我以前遇到的模型很不一样。它不仅仅是一个普通的旧神经网络:它利用一些有趣的技术来实现高精度和更少的运行时间。
低计算复杂度导致快速运行时间。为了实现实时性能,它使用步长 2,将操作数量减少到原来的四分之一。在边界框坐标被校准之后,它直到最后一个网络(O-Net)才开始寻找面部标志,这甚至在它开始计算之前就缩小了面部特征的坐标。这使得程序快了很多,因为它只需要在通过 O-Net 的几个盒子中找到面部标志。
深度神经网络实现了高精度。拥有 3 个网络(每个网络都有多个图层)可以提高精度,因为每个网络都可以微调前一个网络的结果。此外,该模型采用图像金字塔来查找大脸和小脸。即使这可能会产生大量的数据,NMS,以及 R-Net 和 O-Net,都有助于拒绝大量的错误边界框。
看着这个模型的高性能,我不禁想知道我们还可以利用这个模型做什么。它能识别某些动物吗?某些车?能不能调成既能做面部识别,又能做面部检测?这个模型——以及它的应用——给了我们无数的未来应用。
- 点击此处阅读实现 MTCNN 模型!
- 点击这里阅读 MTCNN 模型的网络结构!
点击此处下载 MTCNN 论文和资源:
- Github 下载:【https://github.com/ipazc/mtcnn
- 研究文章:http://arxiv.org/abs/1604.02878
一个推荐引擎到底是怎么工作的?
原文:https://towardsdatascience.com/how-does-a-recommendation-engine-really-work-656bdf12a5fc?source=collection_archive---------1-----------------------
在我们上一篇博客中,我们了解了推荐引擎的基本知识以及不同类型的推荐引擎。听了这么多关于推荐引擎的介绍,你一定很想了解它实际上是如何工作的,以及它是如何向客户展示他/她最可能喜欢的东西的。根据文章在计算引擎上使用机器学习进行产品推荐,典型的推荐引擎通过以下四个阶段处理数据,即收集、存储、分析和过滤。
数据收集:
创建推荐引擎的第一步是收集数据。数据可以是显式数据,也可以是隐式数据。显式数据将由用户输入的数据组成,例如对产品的评级和评论。隐式数据将是订单历史/退货历史、购物车事件、页面视图、点进和搜索日志。将为访问该网站的每个用户创建该数据集。
行为数据很容易收集,因为你可以在你的网站上记录用户的活动。收集这些数据也很简单,因为它不需要用户的任何额外操作;他们已经在使用这个应用程序了。这种方法的缺点是更难分析数据。例如,从不太需要的日志中筛选出需要的日志可能很麻烦。
由于每个用户对某个产品肯定会有不同的喜好或厌恶,他们的数据集将是不同的。随着时间的推移,当你“喂”给引擎更多的数据时,它会越来越聪明地给出建议,这样你的电子邮件订户和客户就更有可能参与、点击和购买。就像亚马逊的推荐引擎如何与“经常一起购买”和“推荐给你”标签一起工作一样。
存储数据:
您可以为算法提供的数据越多,推荐就越好。这意味着任何推荐项目都可以迅速转变为大数据项目。
用于创建建议的数据类型可以帮助您决定应该使用的存储类型。您可以选择使用 NoSQL 数据库,一个标准的 SQL 数据库,甚至是某种对象存储。这些选项中的每一个都是可行的,具体取决于您是否在捕获用户输入或行为,以及实施的容易程度、存储可以管理的数据量、与环境其余部分的集成以及可移植性等因素。
当保存用户评级或评论时,可扩展和可管理的数据库最大限度地减少了所需的任务数量,并有助于专注于推荐。Cloud SQL 满足了这两个需求,并且使得直接从 Spark 加载数据变得很容易。
分析数据:
我们如何找到具有相似用户参与度数据的项目?为此,我们使用不同的分析方法过滤数据。如果你想在用户浏览产品时向他们提供即时的建议,那么你就需要一种更灵活的分析方式。我们可以分析数据的一些方法有:
- 实时系统可以在数据被创建时对其进行处理。这种类型的系统通常包含可以处理和分析事件流的工具。需要一个实时系统来给出即时的建议。
- 批量分析要求你定期处理数据。这种方法意味着需要创建足够的数据来进行相关的分析,比如日销售量。批处理系统可以在以后发送电子邮件。
- *实时分析让您能够快速收集数据,以便每隔几分钟或几秒钟刷新一次分析。接*实时的系统最适合在同一浏览会话期间提供推荐。
过滤数据:
下一步是过滤数据,以获得向用户提供推荐所需的相关数据。我们必须从上面解释的算法列表中选择一个更适合推荐引擎的算法。喜欢
- **基于内容:**一个受欢迎的、推荐的产品与用户观看或喜欢的产品具有相似的特征。
- 集群:推荐的产品搭配的很好,不管其他用户做过什么。
- 协作:喜欢与另一个用户查看或喜欢的产品相同的产品的其他用户,也会喜欢一个推荐的产品。
协同过滤使您能够将产品属性理论化,并根据用户口味进行预测。这种过滤的输出基于这样的假设,即过去喜欢相同产品的两个用户现在或将来很可能会喜欢相同的产品。
您可以将关于评分或互动的数据表示为一组矩阵,以产品和用户作为维度。假设以下两个矩阵相似,但我们用数字 1 替换现有评分,用数字 0 替换缺失评分,从第一个矩阵中减去第二个矩阵。结果矩阵是一个真值表,其中数字 1 代表用户与产品的交互。
Ref: https://cloud.google.com/solutions/recommendations-using-machine-learning-on-compute-engine#storing_the_data
我们使用 K-Nearest 算法、Jaccard 系数、Dijkstra 算法、余弦相似度来更好地关联基于评级或产品进行推荐的人的数据集。
上图显示了 k-nearest 算法的聚类过滤是如何工作的。
然后最后,过滤和使用算法后获得的结果,基于推荐类型的时效性向用户给出推荐。无论是实时推荐还是稍后发送电子邮件。
在我们的下一篇博客中,我们将解释您的组织如何实现产品推荐引擎,以及与它相关的好处。
机器学习是如何工作的?
原文:https://towardsdatascience.com/how-does-machine-learning-work-6dd97f2be46c?source=collection_archive---------6-----------------------
这是一系列文章中的第二篇,旨在使机器学习对那些没有受过技术培训的人来说更容易理解。第一篇,描述机器学习的典型用途和例子,这里可以找到。
在本系列的这一期中,将使用一个简单的示例来说明从正反例中学习的底层过程,这是分类学习的最简单形式。我犯了一个简单的错误,让所有人都可以理解机器学习的原则,但我应该强调,现实生活中的用例很少像这样简单。
从训练集中学习
想象一下,一家公司有一个招聘流程,该流程会查看成千上万份申请,并将它们分成两组——有“高潜力”获得该公司工作的人和没有“高潜力”的人。目前,人类决定每个应用程序属于哪一组。假设我们想要学习和预测哪些应用程序被认为是“高潜力”的。我们从该公司获得了一些数据,用于一组随机的先前申请,包括那些被归类为高潜力的申请(正面例子)和那些没有被归类为高潜力的申请(负面例子)。我们的目标是找到一个所有正面例子都有的描述,而没有负面例子。然后,如果出现新的应用程序,我们可以使用此描述来确定新的应用程序是否应该被视为“高潜力”。
对应用程序的进一步分析表明,有两个主要特征会影响应用程序是否可以被描述为“高潜力”。第一个是申请人的大学 GPA,第二个是申请人在申请过程中参加的考试的表现。因此,我们决定在确定某项申请是否具有“高潜力”时,只考虑这些因素。这些是我们的输入属性。
因此,我们可以选取当前申请的一个子集,并用两个数值 (x,y) 来表示每个申请,其中 x 是申请人的大学 GPA, y 是申请人在测试中的表现。如果是正面例子,我们也可以给每个应用程序赋值 1,如果是负面例子,赋值 0。这被称为训练集*。*
对于这个简单的示例,可以在二维图上绘制训练集,正面示例标记为 1,负面示例标记为 0,如下所示。
在进一步查看数据后,我们可以在两个维度上确定某些最小值 x 和 y ,我们可以说任何“高潜力”应用都必须在这些值以上。即 x > x1 和 y > y1 为 x1 和 y1 的合适值。
这将“高潜力”应用的集合定义为图表上的矩形,如下所示。
这样,我们就做出了这样的假设:我们的“高潜力”应用类是二维空间中的矩形。我们现在将问题简化为寻找 x1 和 y1 的值,以便我们在训练集中具有最接*的正例。
我们现在决定尝试一个特定的矩形,看看它与训练数据的吻合程度。我们称这个矩形为 T21。 r 是一个假设函数*。我们可以在我们的训练集上尝试 r ,并计算在训练集中有多少个正例没有落入矩形 r 中。这些实例的总数称为 r 的错误。我们的目标是使用训练集使这个错误尽可能的低,如果可能的话,甚至使它为零。*
一种选择是使用最具体的假设。也就是说,使用包含所有正例而不包含反例的最紧密矩形。另一种是使用最一般的假设,即包含所有正例而不包含任何负例的最大矩形。
事实上,在最具体和最一般的假设之间的任何矩形都将对我们已经得到的特定训练集起作用。
但是,我们的训练集只是应用程序的示例列表,并不包括所有应用程序。因此,即使我们提出的矩形 r 在训练集上起作用,我们也不能确定如果应用于不在训练集中的应用,它将没有错误。因此,我们的假设矩形 r 在训练集之外应用时可能会产生错误,如下所示。
测量误差
当一个假设 r 从一个训练集中发展出来,然后在不在训练集中的数据上进行试验时,会发生以下四种情况之一:
- 真阳性(TP): 当 r 给出阳性结果且与实际数据相符时
- 真阴性(TN):当 r 给出阴性结果且与实际数据相符时
- 假阳性(FP): 当 r 给出阳性结果且与实际数据不符时
- 假阴性(FN): 当 r 给出一个阴性结果,与实际数据不符。(这是上图中的阴影区域)
假设函数 r 的总误差等于 FP 和 FN 之和。
理想情况下,我们希望这个等于零。然而…
噪音
前面基于两个输入属性学习“高潜力”应用程序的例子非常简单。大多数学习场景将涉及数百或数千个输入属性、训练集中的数万个示例,并且将花费数小时、数天或数周的计算机能力来处理。
由于噪声*,在这些情况下几乎不可能创建零误差的简单假设。噪音是数据中不必要的异常,它可以掩盖或复杂化潜在的关系,并削弱学习过程。下图显示了一个可能受噪声影响的数据集,简单的矩形假设对其不起作用,更复杂的图形假设对于完美拟合是必要的。*
噪音可能由以下原因引起:
- 输入数据中的错误或遗漏
- 数据标签中的错误
- 不可观察且无数据可用的隐藏属性,但会影响分类。
尽管有噪声,数据科学家通常会致力于在训练集上找到最简单的假设,例如直线、矩形或简单的多项式表达式。为了使假设尽可能简单,他们愿意接受一定程度的训练误差。简单假设更容易构建、解释,并且通常需要更少的处理能力和容量,这是大型数据集的一个重要考虑因素。
泛化、欠拟合和过拟合
如上所述,数据科学家有必要假设哪个函数最适合训练集中的数据。实际上,这意味着数据科学家假设某个模型或算法最适合训练数据。学习过程需要这样的输入假设或假说,这被称为学习算法的归纳偏差*。*
正如我们所观察到的,某个算法可能非常适合训练集,但当应用于训练集之外的数据时却失败了。因此,一旦根据训练集建立了算法,就有必要针对训练集之外的一组数据来测试该算法,以确定它是否适合新数据。模型预测新数据结果的好坏被称为泛化*。*
如果数据科学家试图拟合过于简单的假设算法,尽管它可能会为训练数据提供可接受的误差水*,但在处理新数据时,它可能会有更大的误差。这被称为欠拟合*。例如,尝试用一条直线来拟合一个高阶多项式的关系可能在某个训练集上工作得相当好,但不能很好地推广。*
同样,如果使用太复杂的假设函数,它将不能很好地推广,例如,如果在关系接*线性的情况下使用多阶多项式。这叫做过拟合*。*
通常,学习算法的成功是三个因素之间的微妙*衡:
- 训练集中的数据量
- 新数据的概化误差水*
- 符合数据的原始假设的复杂性
其中任何一个问题通常可以通过调整其他问题来解决,但只能在一定程度上解决。
机器学习的典型过程
将上述所有观察放在一起,我们现在可以概述机器学习中使用的典型过程。这个过程旨在最大化学习成功的机会,并有效地测量算法的误差。
***培训:*向数据科学家提供真实数据的子集。该数据包括足够数量的正面和负面示例,以允许任何潜在的算法进行学习。数据科学家在决定最适合训练数据的算法之前,会对许多算法进行实验。
验证:**向数据科学家提供真实数据的进一步子集,其具有与训练数据相似的属性。这被称为验证集。数据科学家将在验证集上运行选择的算法,并测量误差。产生最小误差的算法被认为是最好的。即使是最好的算法也可能对数据进行过拟合或欠拟合,从而产生不可接受的误差水*。
***测试:*测量任何被认为是可实现的学习算法的误差将是重要的。验证集不应用于计算此误差,因为我们已经使用验证集来选择算法,以使其误差最小。因此,验证集现在实际上已经成为训练集的一部分。为了获得准确可靠的误差度量,应该使用第三组数据,称为测试集。在测试集上运行该算法并计算误差。
分类算法的典型输出
分类算法的典型输出可以采取两种形式:
***离散量词。*一个二进制输出(是或否,1 或 0 ),表示算法已将输入实例分类为正还是负。使用我们之前的例子,算法会简单地说应用程序是“高潜力”或者不是。如果在决策过程中不存在人工干预的预期,例如,如果公司对被视为“高潜力”的申请数量没有上限或下限,这一点尤其有用。
***概率分类器。*概率输出(0 到 1 之间的数字),表示输入落入正类的可能性。例如,该算法可以指示该应用具有 0.68 的高潜力概率。如果在决策过程中需要人工干预,例如公司对被视为“高潜力”的申请数量有限制,这一点尤其有用。请注意,一旦人类定义了“截止”来确定哪些实例属于肯定类,概率输出就变成了二进制输出。
在下一期,我们将看看机器学习算法的一些典型例子,比如贝叶斯分类器和决策树。这里读一下。
最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在LinkedIn或Twitter上找我。
机器学习是如何工作的?像大脑一样!
原文:https://towardsdatascience.com/how-does-machine-learning-work-a3bf1e102b11?source=collection_archive---------5-----------------------
图像分类中描述机器学习的人类类比
我可以举出几十篇关于机器学习和卷积神经网络的文章。每篇文章描述了不同的细节。有时会提到太多的细节,所以我决定用机器学习和人脑的相似之处来写我自己的帖子。我不会碰任何数学或者深度学习的细节。我们的目标是保持简单,帮助人们尝试 Vize.ai 来实现他们的目标。
介绍
机器学习为计算机提供了无需显式编程就能学习的能力。
对于图像:我们想要的东西可以看到一组图像,并记住模式。当我们给我们的智能**【模型】曝光一个新图像时,它会【猜测】**图像上是什么。人就是这么学的!
我提到了两个重要的词:
- 模型——我们称之为机器学习算法。不再编码(ifgreenthengrass)。是一个可以学习和概括的结构(小的,圆形的,绿色的是苹果)。
- 猜测 —我们不是在二元世界。现在,我们进入概率领域。我们收到一个图像是苹果的可能性。
深入但仍然简单
模型就像孩子的大脑。你给一个小孩看一个苹果,然后说“这是一个苹果”。重复 20 次,它大脑中的连接就建立起来了,现在它可以识别苹果了。重要的是开始时它不能区分小细节。你手中的小球将会是一个苹果,因为它遵循同样的模式*(小的,圆形的,绿色)*。只有苹果植根于小小的大脑。
显示给孩子的一组图像称为 训练数据集 。
大脑是模型,它只能识别**图像数据集中的类别。**由层和连接构成。这使得它与我们的大脑结构相似。网络的不同部分正在学习不同的抽象模式。
监督学习意味着我们要说“这是苹果”,并给它添加一个视觉信息。我们正在给每张图片添加一个标签。
Simple deep learning network
评估—模型精度
用人类的话来说,这就像考试时间。在学校,我们学习许多信息和一般概念。为了了解我们实际上知道多少,老师准备了一系列我们在课本上没有见过的问题。然后我们评估我们的大脑,我们知道 10 个问题中有 9 个回答正确。
教师的问题就是我们所说的测试数据集。它通常在训练前从训练数据集分离(提供图片的 20%在我们的例子中)。
准确率是我们答对的图片数量(百分比)。重要的是:我们不在乎他对自己的答案有多确定。我们只关心最后的答案。
计算机的局限性
为什么我们还没有拥有人类水*技能的计算机?因为大脑是最强大的计算机。它有着惊人的处理能力,巨大的内存和一些我们连自己都不懂的神奇酱。
我们的计算机模型受限于内存和计算 功率。我们在存储内存方面做得很好,但在处理器可访问的超高速内存方面做得不够。功率受到热量、技术、价格等的限制。
更大的模型可以容纳更多的信息,但需要更长的训练时间。这使得 2017 年的 AI 发展重点是:
- 让模型变小,
- 计算强度较低,
- 能够了解更多的信息。
连接到自定义图像识别- Vize.ai
这项技术驱动了我们的 自定义图像分类 API 。人们不需要很深的知识就可以在几分钟内建立图像识别器。有时客户问我,我们是否能识别 10 000 个类别,每个类别有一个训练图像。想象一下孩子的大脑学习这个。这几乎是不可能的。这个想法是你想让你的孩子知道更多的类别,看到更多的图像。我们的大脑需要很长时间来发展和理解这个世界。与子对象相同从基本对象开始从基本类别开始。
孩子自信什么是好/坏。辨别好坏的教学模型非常准确,不需要很多图像。
总结:
我试图将机器学习简化为仅视觉任务,并将其与我们都知道的东西进行比较。在 Vize.ai 中,我们在试验新模型和处理流水线时,经常会想到人脑。我将很高兴听到你的一些反馈。
不同媒体的新闻报道有何不同?
原文:https://towardsdatascience.com/how-does-news-coverage-differ-between-media-outlets-20aa7be1c96a?source=collection_archive---------1-----------------------
使用 R 和 Python 对上个月的新闻媒体进行对比分析
在过去的一年里,政治新闻似乎变得更加分裂,更加偏颇。当川普总统指责科技公司没有*等地宣传新闻来源时,我想知道,这些天的新闻有明显的不同吗?
幸运的是,有一个很棒的 python 库可以用来抓取新闻网站,所以我们可以开始回答这个问题了。使用报纸,我能够从多个媒体渠道抓取上个月的主要标题。通过编写一些简单的脚本来收集和分析新闻数据,我能够了解他们的报道是如何偏离的。
新闻的焦点
查看文本数据模式的一个有趣方法是生成单词云。r 提供了一些简单的文本挖掘库(tm、wordcloud 和 SnowballC ),使得生成 word cloud 变得轻而易举。关于这个话题的丰富资源,请看本教程 ⁴.
在我从数据中删除了明显的英语停用词(“the”、“a”等)以及一些特定新闻的停用词(“link”、“video”等)后,我看到了明显的模式。
Mainstream news sites are all about ‘trump’
2018 年,主流新闻被‘川普’主导也就不足为奇了。
然而,我也想看看那些不太受欢迎的媒体报道了什么。为了做到这一点,我从各政治派别中挑选了一些资料。尽管这些消息来源的次要兴趣领域有所不同,但每一个都主要集中在总统身上。
最后,我从两家国际新闻网站——英国广播公司(BBC)和《卫报》(Guardian)——获取了数据,以了解全球对特朗普总统的重视程度是否一样高。
令人欣慰的是,全球新闻似乎不仅仅关注唐纳德·特朗普。
新闻标题中的热门词汇
另一个检测文本数据语料库中最常见术语的有用工具是 R“TermDocumentMatrix”函数。它告诉我们《text⁵.全集》中每个单词的频率利用这些信息,很容易从每个新闻来源中找出最常见的词。下面我列出了 MSNBC、CNN 和福克斯新闻频道头条中最常见的 5 个词。
很明显,CNN 和 MSNBC 几乎完全专注于特朗普总统和他的丑闻,“特朗普”、“科恩”、“穆勒”和“马纳福特”是最热门的词汇。在福克斯电视台,《特朗普》仍然遥遥领先地排名第一,但其他故事更为普通(即。男人','女人','报告','警察)。
有趣的是,这里也有其他网站头条中的热门词汇。
浅析标题情感
新闻总是倾向于负面的偏见。在这个动荡的时代,有些人声称我们生活在一个新的黑暗时代,我想看看这些头条新闻到底有多负面。
测量文本的情绪的一个简单方法是使用情绪词典,或者每个单词都有一个与之相关的积极得分的词典。我选择使用流行的⁶词典,它给单词打分,范围是-5 到+5。例如,在这个语料库中,像“担心”这样的词得分为-3,像“很好”这样的词得分为+3。
通过*均每个新网站相关词汇的情感分数,我能够得到它们看起来是积极还是消极的图片。
令人惊讶的是,华盛顿邮报被证明是使用这种方法的最负面的新闻来源。我猜这家公司的新座右铭是“民主在黑暗中消亡”,它不会拐弯抹角。
使用 Sentimentr 库进行情感分析
单纯使用单词得分来天真地衡量情感的一个缺陷是,这种方法忽略了句子的上下文。使用这种方法,像“这个比萨饼不错”这样的句子将只记录单词“bad ”,而不记录前面的变价词“not”。幸运的是,⁷图书馆考虑到了这些变价因素,让我们能够以句子为单位测量情感。
用这个库来比较头条本身的正面/负面,我得到了下面这个情节。
《华盛顿邮报》再次以明显优势成为最负面的,击败了布莱巴特和 Infowars 等更激进的网站。其余的新闻来源都差不多,都略显负面。
结论
在这个“假新闻”的时代,政治客观性的理念似乎比以往任何时候都更加遥远。然而,有了数据驱动的方法,我们也许能够更中立地看待媒体呈现给我们的东西。正如我所展示的,收集新闻数据非常容易。我鼓励任何有一点点时间的人看看他们最喜欢的新闻渠道如何,并确保他们真正获得了我们共同现实的全面代表。
笔记
本文使用的所有代码和数据都在 https://github.com/taubergm/NewsHeadlines[的](https://github.com/taubergm/NewsHeadlines)网站上
1-一项关于媒体偏见的有趣研究—http://www . nieman lab . org/2018/06/Democrats-see-most-news-outlets-as-unbiased-Republicans-think-they-almost-all-biased/
2—https://gizmodo . com/president-trump-accounts-Google-withing-search-result-1828647850
3—https://github.com/codelucas/newspaper
4 — a 如何使用 R—https://datascienceplus.com/building-wordclouds-in-r/
5 —关于文档矩阵的信息—https://en.wikipedia.org/wiki/Document-term_matrix以及如何生成它们https://www . rdocumentation . org/packages/TM/versions/0.7-5/topics/TermDocumentMatrix
6—阿芬情感词典http://corpustext.com/reference/sentiment_afinn.html
7—sentiment r lib—https://cran . r-project . org/web/packages/sentiment r/readme . html
缩放如何改变主成分?—第一部分
原文:https://towardsdatascience.com/how-does-scaling-change-principle-components-part-1-822fa8be5462?source=collection_archive---------17-----------------------
Photo by Markus Spiske on Unsplash
请注意,这篇文章是出于我自己的教育目的,也是为了满足我的好奇心。
动机/摘要
假设我们有一个像上面这样的数据,红色箭头表示第一个主成分,而蓝色箭头表示第二个主成分。规范化和标准化会如何改变这两者?我们还可以对方差进行某种标准化吗?(我将继续发布更多帖子。)
正常化
上面的 gif 显示了不同规模的数据看起来是什么样子,以及它的主要组成部分(红色表示第一台电脑,蓝色表示第二台电脑。).
如上所述,PC 的方向不会随着不同的比例而改变。
标准化
标准化并没有改变 PC 的方向,生成的图形也没有什么特别之处。
投影到主元件
上面的过程显示了通过两个主要部分投影我们所有数据的旋转。左边的 gif 显示了相互重叠的结果,右边的 gif 显示了我们将数据投影到投影矩阵后的结果。
当我们完全投影到投影向量上时,我们会看到类似上面的东西,现在让我们将数据投影回原始空间。
当我们将数据投影回数据空间时,我们可以看到原始数据。如上所述,这些值检查出来是相同的。
当我们将结果可视化时,我们会得到一个俯视图。
交互代码
对于 Google Colab,您需要一个 Google 帐户来查看代码,而且您不能在 Google Colab 中运行只读脚本,因此请在您的游戏场上制作一份副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!
要访问该笔记本,请单击此处的。
遗言
关于 tensorflow 的 svd 需要注意的一点是,返回的 v 已经被转置,不需要被转置。Else numpy 的 svd 转置 v 矩阵。
参考
- tf.linalg.svd | TensorFlow。(2018).张量流。检索于 2018 年 11 月 15 日,来自https://www.tensorflow.org/api_docs/python/tf/linalg/svd
- PCA?,R. (2018)。奇异值分解与主成分分析的关系。如何用 SVD 进行 PCA?。交叉验证。检索于 2018 年 11 月 15 日,来自https://stats . stack exchange . com/questions/134282/relationship-between-SVD-and-PCA-how-to-use-SVD-to-perform-PCA
- PCA?,R. (2018)。奇异值分解与主成分分析的关系。如何用 SVD 进行 PCA?。交叉验证。检索于 2018 年 11 月 15 日,来自https://stats . stack exchange . com/questions/134282/relationship-between-SVD-and-PCA-how-to-use-SVD-to-perform-PCA
- PCA?,W. (2018)。为什么吴恩达更喜欢用奇异值分解而不是协方差矩阵的 EIG 来做主成分分析?。交叉验证。检索于 2018 年 11 月 15 日,来自https://stats . stack exchange . com/questions/314046/why-do-Andrew-ng-prefere-to-use-SVD-and-not-EIG-of-协方差矩阵-do-pca
- 【复本】,U. (2018)。理解 SVD 用于 PCA 时的输出。交叉验证。检索于 2018 年 11 月 15 日,来自https://stats . stack exchange . com/questions/96482/understanding-the-output-of-SVD-when-use-for-PCA
缩放如何改变主成分?—第二部分
原文:https://towardsdatascience.com/how-does-scaling-change-principle-components-part-2-6974cf40aa60?source=collection_archive---------17-----------------------
Photo by Nikita Taparia on Unsplash
今天,我想对数据中存在的差异进行某种标准化。
请注意,这个帖子是出于我自己的教育目的。
比较 Numpy 和张量流 SVD
当我使用特征值分解来寻找主分量时,主分量的符号已经翻转,因此当我们在主空间中投影数据时,我们注意到数据已经翻转。然而,当我们重建回原始数据空间时,我们可以看到结果是相同的。
动机/摘要
上图显示了标准化后对数据的影响,我们可以注意到每个轴的比例都发生了变化。特别是当我们观察 x 轴时,我们可以注意到刻度已经急剧缩小。
在上面的原始数据中,最小 x 轴值是-20,而最大 x 轴值是 15,但是标准化后,我们注意到它已经缩小到-3 到 3 的范围。批量标准化(即标准化)在深度学习中很有帮助,因为它将数据集中起来,并将其标准化。然而,如果我们(在每个轴上)根据它的变化量来定标,会有帮助吗?
根据各轴的变化改变缩放比例
上面的图像可能很难看到,但我们正在将投影数据重建到原始数据空间,然而,根据每个轴的变化量,缩放因子会有所不同。让我们仔细看看。
上图 →原始数据
中图 →带主轴的标准化数据
下图 →带主轴的 PC 重新缩放数据
如上所述,最终结果不同于我们比较标准化和按比例缩放的结果。
这里需要注意的一个重要事实是,尽管重建的数据与我们开始时的原始数据不同(因为我们对其进行了不同的缩放)。两个主分量的方向确实匹配。
交互代码
对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!
要查看这本笔记本,请点击此处。
最后的话
在下一篇文章中,我将增加维度。
参考
- matplotlib.pyplot,H. (2018 年)。如何用 matplotlib.pyplot 改变图例大小.堆栈溢出?检索于 2018 年 11 月 16 日,来自https://stack overflow . com/questions/7125009/how-to-change-legend-size-with-matplotlib-py plot
- plot,H. (2018)。如何更改 matplotlib 绘图的字体大小?堆栈溢出。检索于 2018 年 11 月 16 日,来自https://stack overflow . com/questions/3899980/how-to-change-the-font-size-on-a-matplotlib-plot
- 字符串,M. (2018)。Matplotlib xticks 字体大小如果字符串。堆栈溢出。检索于 2018 年 11 月 16 日,来自https://stack overflow . com/questions/39211707/matplotlib-x ticks-font-size-if-string
- Jupyter 笔记本教程。(2018).Plot.ly .检索 2018 年 11 月 16 日,来自https://plot.ly/python/ipython-notebook-tutorial/
- 斧头。(2018).Plot.ly .检索 2018 年 11 月 16 日,来自https://plot.ly/python/axes/
湾区怎么通勤?
原文:https://towardsdatascience.com/how-does-the-bay-area-commute-22f45e00419e?source=collection_archive---------5-----------------------
使用无监督机器学习定义公交服务区
对于这个项目,我想回答一个问题。我们能否仅使用通勤数据来定义旧金山湾区公交机构的服务区域?如果可以,会是什么样子?
答案是肯定的,它看起来像这样:
我是这样到达那里的。
背景
海湾地区在多极性质的大都市中是不寻常的。这早已反映在我们的交通系统中——我们有大约 28 个交通系统服务于九个县的海湾地区(忽略每天一次的美国国家铁路客运公司州际铁路服务)。粗略地说,这些分为三类:
- 跨区域交通—国会走廊、圣华金、阿尔塔蒙走廊快线、未来高铁。这些系统服务于九县湾区以外的目的地。
- 区域公交 — BART、Caltrain、SMART、金门轮渡、三藩市湾轮渡。这些系统服务于下面列出的两个或更多的本地交通区域。
- 当地公交 — Muni、AC Transit、VTA、SamTrans、金门公交、Marin Transit、Dumbarton Express、County Connection、Santa Rosa City Bus、Tri Delta Transit、Wheels、SolTrans、Sonoma County Transit、WestCAT、Fairfield 和 Suisun Transit (FAST)、Solano Express、Vine、City 蔻驰、Petaluma Transit、Rio Vista Delta Breeze。
Bay Area Transit Agencies (Source: SPUR, Seamless Transit, April 2015)
湾区交通的分散导致交通乘客的体验不佳,他们被迫浏览多个票价系统和信息材料,以便到达他们要去的地方。人们常常天真地认为,解决方案只是将所有机构合并在一起,但这在政治上具有挑战性,可能会产生比解决的问题更多的问题。正如交通咨询顾问 Jarrett Walker 指出的那样,“一位非常左派的旧金山主管曾经问我,为什么旧金山应该把对其交通的任何控制交给郊区主导的董事会,他们根本不会理解旧金山对非常高的人均服务水*的密度驱动的需求。他说得有道理。”
由交通分散引起的许多问题在 SPUR 的无缝交通报告中有详细描述,该报告讨论了如何通过更好的机构间合作来解决这些问题,而无需将所有的交通机构合并成一个庞大的实体。其他国家也采取了类似的方法;比如德国的莱茵-鲁尔区和湾区是类比的,人口相似,大城市距离相似,多极相似。一个叫做 Verkehrsverbund 的组织负责协调服务;尽管有 27 家不同的运营商,但他们的公交系统只有一张地图、一个票价结构和一个品牌
A service map for the Rhein-Ruhr Verkehrsverbund
因此,如果我们可以用一个 Verkehrsverbund 来掩盖我们交通系统中的裂缝,我们就不需要担心分裂,对吗?不完全是。Verkehrsverbund 没有解决的一个问题是为其管辖范围内的交通系统定义合理的边界。在这些边界,乘客必须换乘另一个系统来继续他们的旅程。一个例子是旧金山/圣马特奥县线,市政的 14 任务巴士在此终止,SamTrans 的 ECR 巴士继续沿着埃尔卡米诺雷亚尔的旅程;另一条是圣马特奥/圣克拉拉县线,ECR 公共汽车在此终止,VTA 的 522 公共汽车沿着埃尔卡米诺路继续开往圣何塞。
界限虽然不方便,但也是必要的;将这三条公交线路合并为一条 60 英里长的线路是不现实的,旧金山也不会对圣何塞决定其公交服务感到满意,反之亦然。如果一定要在某个地方划一条线,那么这条线应该划在一个尽可能少的乘客因为过渡而感到不便的地方。**我们能否改进本地公交服务区的定义,以更好地匹配居民的实际通勤模式?**对湾区通勤模式的了解应该让我们能够在适当的时候提出交通机构合并的建议,并在不合适的时候将这些机构分开。
方法学
Kaggle 已经发布了从美国每个人口普查区到美国其他人口普查区的通勤流量,以 2010 年美国人口普查为原始来源。此数据的“流量”值,即从给定的起始人口普查区域到给定的目的人口普查区域的通勤人数,可用于计算特征空间中人口普查区域之间的距离。
我们将特征空间中人口普查区域 i 和 j 之间的距离 d(i,j) 定义为:
其中:
这意味着两个没有通勤者的人口普查区域之间的要素空间距离在数量上等于数据集中的最大通勤流量,即这些人口普查区域在要素空间中相距最远。这也意味着具有最大通勤流量的人口普查区域对具有~1 的特征空间距离,即那些人口普查区域在特征空间中是最*的。
创建距离矩阵时,通勤流的方向性带来了挑战。聚类算法一般取一个数据集在特征空间中的位置,计算距离矩阵,然后建立链接;然而,对于这个问题,我们直接从源数据中定义距离矩阵。这导致了不寻常的性质,即从 A 到 B 的特征空间距离可能不同于从 B 到 A 的特征空间距离,因为更多的通勤者将在一个方向上比在另一个方向上通勤。对于这个项目,我们决定只检查从起点到目的地的通勤流,因为这将导致在特征空间和真实空间中明确定义的聚类,而相反将导致在真实空间中明显重叠的聚类。
一旦我们计算出每对人口普查区域之间的距离,我们就将其输入到 SciPy 的层次聚类算法中,以确定湾区人口普查区域之间的关系。(在本分析中,湾区被定义为位于纬度 37°和 38.5°之间以及经度-123°和-121.5°之间的所有普查区域。)聚类的数目不是预先确定的,但是可以通过计算样本中所有数据点的*均轮廓得分来计算聚类的有效性和一致性。下面显示了 k 的变化值:
Bay Area Silhouette Scores
剪影得分图中双峰的存在表明了通勤模式中的区域和局部一致性。在 3 处找到了 k 的最佳值,并且再次在 9、10 和 11 处找到。
我们先来看一下 k =3:
Bay Area Census Tract Clustering (k=3)
这种聚类代表了海湾地区的第一个内部内聚的次区域划分。首先,纳帕和索拉诺县在 k =2 处分裂;然后,圣何塞和硅谷在 k = 3 时分道扬镳。其余的海湾地区包括所有你可以乘坐 BART 火车到达的地方,再加上南边的红木城和北边的圣罗莎。
下一级可行聚类出现在更高的 *k 值处。*让我们从 k =9 开始:
Bay Area Census Tract Clustering (k=9)
直觉上,这个看起来不错;我们在湾区的所有逻辑子区域之间有一个清晰的分隔。这些大致可以描述为:索诺玛/马林,索拉诺/纳帕,旧金山/圣马特奥,奥克兰/伯克利/里士满,核桃溪/康科德/安提阿,三谷地区,海沃德/弗里蒙特,圣何塞/硅谷。
让我们上升到 k =10:
Bay Area Census Tract Clustering (k=10)
现在,旧金山和圣马特奥已经分裂,旧金山保留了戴利市、科尔马和帕西菲卡。
最后我们来看 k =11:
Bay Area Census Tract Clustering (k=11)
在这里,南部的东湾分成了北部的海沃德/卡斯特罗谷和南部的联合城/纽瓦克/弗里蒙特。
值得注意的是,最初脱离的两个集群(纳帕/索拉诺和圣何塞)没有进一步细分,这表明了很强的内部一致性。(在 k =15 时,圣何塞从圣克拉拉县的其余部分分离出来;Napa 和 Solano 保持相互连接,直到非常高的值 k 。)
结论
区域间运输
没有得出关于区域间交通的结论,因为区域间交通主要服务于商务和休闲旅客,因此不适合使用通勤数据进行分析。由于覆盖的距离,这些服务可能最好在州一级汇总和管理。
区域运输
- 圣何塞和湾区的其他地方不同。作为一个以汽车为主的大都市区,它的许多通勤模式包括从圣何塞南部和东部的卧室社区到圣何塞北部和硅谷的办公园区的汽车旅行。认为硅谷与湾区的其他地方联系在一起是错误的;谷歌巴士可能有很多恶名,但它们服务的通勤者相对较少。
- 索拉诺县和纳帕县也与湾区的其他地方脱节,尽管它们在地理上很接*;前往该地区其他地方的交通选择少得可怜,60-70 分钟的 Vallejo 渡轮是唯一直接连接旧金山的方式。这种情况可以通过在这些县增加通勤铁路来改善,从里士满向北穿过一座新桥到达瓦列霍,然后分支到索诺马、纳帕和费尔菲尔德。理想情况下,这将通过一个新的跨湾管道直接运行到旧金山,但也可以在短期内作为巴特的馈线。
- 尽管如此,没有任何理由为了区域交通的目的而划分湾区。Caltrain 服务于旧金山湾区和南湾,不久 BART 也将提供同样的服务。这两种服务都是区域交通系统的组成部分,不能一分为二。虽然 Solano/Napa 比 Sonoma/Marin 更远离旧金山湾区,但这主要是由于 I-80 拥堵和糟糕的交通选择,这些问题可以也应该得到补救。所有地区公交提供商应合并为一个系统,为横跨九个县的海湾地区的地区出行提供服务。
本地运输
虽然聚类与这些机构的服务区域惊人地匹配,但仍有一些变化可以做出,大致基于 k =10 地图。在多种选择都是合理的情况下,我选择了对现状改变最小的选择。
- 金门交通、马林交通、佩塔卢马交通和圣罗莎市公共汽车应该合并成一个北部湾交通机构。(注意:有一种观点认为应该将 SMART 包括在这个机构中,但我认为它应该保留为一个区域机构,以便于与金门大桥整合。)
- Vine、FAST、SolTrans 和蔻驰市应该合并成一个索拉诺/纳帕运输机构。里约维斯塔三角洲微风也可能包括在内。
- 县连接和三角运输应该合并。
- Wheels 应该从 County Connection 接管 San Ramon 和 Danville 的服务,因为这些城市与都柏林/普莱森顿的通勤联系比与核桃溪的更紧密。
- AC Transit 应该将 WestCAT 吸收到北部。里士满地区两种服务之间的分界线完全是人为的。
- 目前由 AC Transit、Union City Transit 和 Dumbarton Express 提供的从 Bay Fair BART station south 到 Alameda/Santa Clara county line 的公共汽车服务应合并为一个新的机构,为东南湾提供服务。这一变化与上述变化相结合,将使 AC Transit 专注于成为服务于奥克兰/伯克利/里士满大都市的城市交通系统。
- 市政当局应该从 Daly 市和 Colma 的 SamTrans 接管服务。圣布鲁诺山的大部分和科尔马墓地的(字面上的)死亡区形成了旧金山和圣马特奥县之间的一条天然分界线,这条线在地图上划出的位置以南一点。Pacifica 也将受益于到旧金山的直航服务。
- VTA 应该接管位于门洛帕克和东帕洛阿尔托的 SamTrans 的服务。阿泽顿镇太富裕,人口太稀少,无法支撑公交乘客,形成了圣马特奥服务区和硅谷之间的屏障。
这是最终结果。我对系统名称使用了一些创造性的许可。
当然,合理化服务领域并无帮助,除非我们也合理化票价体系和品牌。请继续关注未来关于湾区 Verkehrsverbund 可能会是什么样子的帖子。
有问题吗?评论?
在推特或 LinkedIn 上找到我
这个分析背后的代码是 GitHub 上可用的 。感谢Alex Golden Cuevas和Bonnie Shen帮助编写代码;另外感谢 亚历克斯·戈尔登·奎瓦斯 和 布兰登·阿纳尼亚斯·马丁-安德森 在发表前审阅了这篇文章。
奖励地图
虽然我对其他地区不太熟悉,无法提出交通重组建议,但对其他多极地区进行类似的聚类分析提供了一些有趣的见解。
南加州
剪影分数为正且*坦,直到 k =12,之后快速下降。有趣的是,在 k =3 时,洛杉矶县与圣地亚哥的联系比奥兰治县或内陆帝国更紧密。洛杉矶县在 k = 9 时一分为二,主要是高地和盆地,高地也声称贝弗利山和沿海城市。
Southern California Silhouette Scores
Southern California Census Tract Clustering (k=3)
Southern California Census Tract Clustering (k=6)
Southern California Census Tract Clustering (k=9)
Southern California Census Tract Clustering (k=12)
东北走廊
这里有很多东西要打开。有趣的是,州界线对人们工作的地方有重大影响,即使这些地方不符合自然特征。新泽西州和纽约州之间,以及马里兰州和特拉华州之间的陆地边界有明显的分界线。费城/卡姆登/特伦顿根据流经城市的河流被整齐地分为四个,其中一些也是州界。波士顿/普罗维登斯逆势而行,尽管位于不同的州,但仍然聚集在一起,而巴尔的摩的分布在南部的 DC 和北部的哈里斯伯格之间。
Northeast Corridor Silhouette Scores
Northeast Corridor Census Tract Clustering (k=19)
流行的 XGBoost 和 LightGBM 算法是如何实现单调约束的
原文:https://towardsdatascience.com/how-does-the-popular-xgboost-and-lightgbm-algorithms-enforce-monotonic-constraint-cf8fce797acb?source=collection_archive---------8-----------------------
XGBoost 和 LightGBM 都有这个很好的参数来加强特性和目标之间的单调关系。当我们的“心智模型”告诉我们期待这样一种单调的关系时,这就很方便了。例如,在其他条件相同的情况下,我们预计同一街区的大房子会比小房子贵。如果让算法自由运行,它可能会捕捉到总体上积极的*方英尺与价格的关系(控制其他因素),但一些局部区域具有相反的关系-更大的*方英尺与更低的价格相关联-这是违反直觉的。这种情况经常发生在数据稀疏或有大量噪声的区域。从我的经验来看,放置一个真正有意义的单调约束通常会在测试数据上产生更好的模型性能,这意味着受约束的模型可能会更好地泛化。因此,人们可以将单调约束视为一种正则化。
如果单调性的概念对你来说很陌生,请点击下面的链接阅读 XGBoost:https://XGBoost . readthedocs . io/en/latest/tutorials/monotonic . html
然而,大多数数据科学家都在使用这个参数,而不知道它实际上是如何工作的。我的过去就是其中之一。毕竟,不是每个人都想弄乱源代码。
XGBoost 代码片段 1:
XGBoost 代码片段 2:
上面两个代码片段展示了 XGBoost 如何实现单调约束。我花了一段时间才完全理解实现。还没有关于 XGBoost/LightGBM 中单调性实施的确切实现的论文。下面我将把我的解释分成几个部分,希望你会觉得有用。
**举一个例子:**在 XGBoost 或 LightGBM 估计器中生长树时,如果候选分裂导致非单调关系,算法将会放弃它。这个很简单:假设你对特征 fₘ施加一个正单调约束,在某个内部节点,fₘ被选中,在值 vₙ处的分割将产生最佳增益。因为约束是正的,所以您希望分配给右侧子对象的权重高于左侧子对象。该算法检查是否是这种情况,如果是,它将继续并以值 vₙ分割该节点,如果不是,它将放弃 vₙ,并将试图找到下一个最佳分割,直到右孩子的权重高于左孩子的权重。
这对应于 *XGBoost 代码片段 1 中的第 432 和 433 行。*如果条件不满足,则增益由负无穷大代替,因此算法将放弃分割。类似地,如果您实施负单调约束,则左孩子的权重需要高于右孩子的权重(行 434 和 435)。
当该特征仅被选择一次时,这听起来不错。但是如果沿着这条路,这个特性又被选中了呢?让我们想象一下,如果算法继续下去,对碰巧再次选择相同特征的左孩子(L)做同样的事情,由于你施加的正单调约束,你将得到分配给左孩子(LR)的右孩子的更高权重。然而,这个重量可能比你之前得到的右孩子(R)还要高。所以现在你有一个问题,因为为了保持单调的正关系,分配给右孩子的权重(R)不仅应该高于左孩子(L),还应该高于它的后代(LL,LR,LLL,LLR,LRL,LRR…你能想到的)。那么如何确定是这样的呢?或者换句话说,如何确保约束在树级得到执行?
**取二:**在一个节点上拆分时,子节点的权重以其父节点权重和叔叔权重的*均值为界(叔叔指的是与父节点共享同一个父节点的节点)。这确保了如果在树中多次选取特征,则分配给来自最*分裂的后代节点的权重不会以违反单调约束的方式高于或低于祖先节点。让我们使用上述相同的例子:左孩子(LR)的右孩子的权重现在由左孩子(L)和右孩子(R)的权重的*均值来限定。并且因为左孩子(L)的体重低于右孩子(R),所以右孩子(LR)的左孩子的体重永远不能超过右孩子(R)的体重。该规则贯穿于树的整个构建过程,因此,无论如何左右切割树,与左侧子树中的要素 fₘ相关联的权重始终低于与右侧子树中的要素 fₘ相关联的权重。特征 fₘ对预测的正单调约束(左节点的权重)在树级被保留。
这对应于 XGBoost 代码片段 1 中的第 448 到 457 行以及所有 XGBoost 代码片段 2。
太好了!算法层面的单调约束呢?
**拿三:**轻松!因为 XGBoost 预测是叶节点权重的相加(对于分类问题,在 sigmoid 或 softmax 变换之前),所以在算法级保留了单调约束。
让我们更正式一点:
假设对于特征 x1 的每一对值(α,β),其中α≤β,我们想要强制执行正单调关系,即 w(α)≤w(β)。
- 在根节点,只产生一个权重 w₀。w₀(α)=w₀(β),用于根节点 0 中的特征 x₁中的α,β。这符合单调约束。
- 在第一次拆分时,任何导致左孩子(l)权重大于右孩子(r)权重的拆分都被放弃,因此对于节点 l 中的特征 x₁的α和节点 r 中的特征 x₁的β,wₗ(α)≤wₗ(β
- 类似地,在从左孩子(l)开始的下一次分裂时,导致其左孩子(LL)权重大于其右孩子(LR)权重的任何分裂都被放弃,从而对于节点 LL 中的特征 x₁的α和节点 LR 中的特征 x₁的β,wₗₗ(α)≤wₗᵣ(β。
- 除了 3 之外,为了确保在树级别实施约束,wₗₗ和 wₗᵣ的值还受到 wₗ和 wᵣ-midₗᵣ.的*均值的限制也就是 wₗₗ≤midₗᵣ和 wₗᵣ≤midₗᵣ.
- 类似地,3 和 4 也适用于节点 r 的子节点,只是这次是 wᵣₗ≥midₗᵣ和 wᵣᵣ≥midₗᵣ.
- 3、4 和 5 的过程贯穿于树的构建。因此,对于要素 x₁,左侧子树的权重始终低于右侧子树。因此,正单调约束在树级被强制执行。
- 由于 XGBoost 的最终输出是叶节点权重的相加(最终分类问题需要 sigmoid 或 softmax 变换),因此单调约束在算法级别得以保留。
最终想法
边界值的使用是实现的关键。这个概念对于决策树来说并不新鲜。然而,使用“中间”值(父节点和叔节点的*均值)似乎不是基于任何文献,并且过于严格,可能潜在地损害算法的预测能力。然而,在我构建的所有约束 XGBoost 模型中,我没有看到模型性能的严重恶化。正如我在开始时提到的,在许多情况下,性能实际上概括得更好。我的直觉是,助推机制确实弥补了约束权重的损失。另一方面,单个决策树可能确实受到这种限制方法的影响。
另外,你还可以使用 R Caret 库创建一个单调约束 GBM。
请在评论中告诉我你的想法。乐于讨论。
企业软件如何通过机器学习变得智能化
原文:https://towardsdatascience.com/how-enterprise-software-is-getting-intelligent-through-machine-learning-4cafc2d7367e?source=collection_archive---------7-----------------------
Photo by Hunter Harritt on Unsplash
当想到自动化时,人们总是可以追溯其根源,而不是实际的发明家,而是富有想象力的作家。几个世纪以来,一个智能机器可以在改善人类生活的各个方面发挥关键作用的世界一直吸引着思想家和作家。他们让人们思考这种努力中蕴含的可能性和精彩。自从第一台计算机诞生以来,人们一直在努力使机器更加智能。
计算机的发展已经使它更接*那些作家和发明家很久以前预见的东西。人工智能、机器学习和神经网络已经成为计算领域创新和发展的焦点。它们已经逐步接*实现其全部潜力,目前正在从农业到交通运输的几乎每个人类活动领域中找到应用。此外,这种不断发展的计算形式在企业领域也产生了显著的影响。
其中,机器学习已经在企业中被广泛接受。通过将其集成到企业软件中,大多数公司发现了一种更可预测、更数据驱动的模型,这使他们能够实现流程自动化。机器学习利用数据集的核心动力有助于产生洞察力,从而促进创新和效率,并使企业软件更加智能。
在本文中,我们将深入探讨:
- 机器学习基础
- 为什么传统企业软件是无效的
- 机器学习将改变企业软件的原因
- 机器学习改革企业软件的方式
对机器学习的洞察
那么到底什么是机器学习呢?机器学习使计算机能够在没有任何编程或人工干预的情况下进行学习和改进。机器学习系统中专门编程的算法可以从数据中识别模式,并预测可能的结果。它革新了从医疗保健到零售的每个领域,采用率越来越高。
联合市场研究的预测指出,到 2020 年,像机器学习这样的认知计算的全球市场将增长约 137 亿美元。这将在企业和服务行业利用数据的方式上引发一场彻底的变革
通过机器学习,计算机可以挖掘和处理大量数据,以得出预测模型和见解。你可以在电子商务中找到机器学习的一个典型例子,像亚马逊这样的在线零售商正在使用这项技术为顾客提供更好的服务。
每当你购买或浏览其产品列表时,你都会留下一系列数据,供 it 机器学习系统用来为你提供个性化的产品推荐。此外,机器学习的使用让电子商务*台在客户服务、交付和定价方面获得了优势。
传统企业软件的缺点
基本上,企业软件或企业应用软件(EAS)是一个组织为满足其特定需求而使用的任何软件。它构成了部署在公司内的计算系统的一部分,并作为面向业务的工具,在客户关系管理、人力资源、会计、企业资源规划等过程中提供帮助。
其他形式的软件,如系统和应用软件,不属于企业软件的范畴。它们只用于执行特定的功能,如运行计算机或创建电子表格、演示文稿、文档等。而企业软件是可扩展的和集中的,能够为整个组织提供解决方案。
企业软件将机器学习纳入其框架的转变是由特定原因引导的。传统的企业软件在效率、速度、可扩展性等方面都有自己的缺点。它依赖于人的干预,这种干预会以错误、信息不充分、个人偏见等形式影响输入系统的数据。
如果输入的与业务运营相关的数据不正确,可能会导致数据堆积。这使得它在很大程度上是分散的,在需要的时候很难整理。由于传统的企业软件依赖于人工努力的结合,因此与机器学习相比,它在快速准确地生成洞察方面最没用。
传统企业软件的一个共同缺点是适应性。大多数企业不得不改变他们的工作方法,以适应软件。此外,它在硬件和软件方面都有非常大的前期资本成本。可伸缩性也是一个问题,事实证明要满足不断变化的业务需求是困难和昂贵的。
为什么机器学习会改变企业软件
每天,企业都面临着从管理到运营的各种挑战。到目前为止,企业软件在处理这些重要过程中发挥了重要作用。但是商业中不断增长的需求意味着需要更新的方法来处理不同的领域。随着机器学习在企业中的引入,一扇可能性的窗户打开了。
机器学习正在提供企业可以依赖的正确框架。机器学习嵌入式计算系统中使用的算法和应用程序可以通过利用企业拥有的庞大数据集来产生预测性的洞察力。这些数据包括结构化和非结构化形式,如数据库和互联网。
根据麻省理工科技评论和谷歌的一项研究,60%的公司已经在他们的计算基础设施中采用了机器学习策略。18%的人计划在明年实施机器学习。
图一。来源——麻省理工科技评论和谷歌
向机器学习软件模型的转变,通过提供更好、更快的数据分析和见解,使组织明显受益。它可以提高组织内部运作的效率,同时增进对客户的了解。
当提到内部运作时,具有机器学习的企业软件的一个明显的用例是在物流领域。ML 系统可以在没有人工干预的情况下,通过做出数据驱动的决策,实现订单、库存、运输和仓储管理流程的自动化。
物流专业 DHL 最*整合了机器学习以降低其供应商风险。该公司最新进入其名为 DHL Supply Watch 的 Resilience 360 供应链管理*台,使用机器学习和自然语言处理的结合来早期识别任何潜在的中断。
此外,世界各地的企业都在他们的软件中转向机器学习,原因多种多样,例如:
- 改善行为分析以提供个性化的客户体验
- 利用自然语言处理(NLP)功能进行更好的分析
- 提供风险分析以提升数据安全性
- 挖掘和分类数据
- 经常提出建议
- 启用图像识别
此外,机器学习的复杂性正在阻止公司转向这种模式。目前正在开发中,完全转向机器学习模型可能被证明是不明智的。机器学习有几个局限性,因为其算法经常遇到错误,并且由于其复杂性,解决这些错误是一项艰巨的任务。
此外,机器学习嵌入式软件可能需要时间来熟悉数据,以便进行更好的预测。同时,在历史数据不可用的所有情况下,预测可能都不准确。从机器学习企业软件中提取期望的输出仍然需要人工干预。
机器学习改革企业软件
机器学习被认为是今年企业软件的主要趋势。通过使企业软件智能化,机器学习可以通过创造有价值的见解来接管评估的关键过程。一个组织可以利用这一点采取必要的行动,使他们的生产力得到提高。
将机器学习框架整合到企业软件中,可以确保所有的数据堆栈都得到充分利用,从而提高整体效率和生产率。这实际上增强了企业中使用的软件的功能,使其更加智能和自给自足。
例如,在销售领域,一个公司可以通过使用具有 ML 模型的软件而获益匪浅。机器学习可以扰乱关键流程,并在预测、客户行为和评估方面创造更多理解,从而使销售流程更加智能。
以下是机器学习将改变企业软件的一些方式:
产生更好的见解和分析
*年来,企业中数据的使用和生成已经大大增加。处理这些大量的数据是一个挑战,这正是机器学习适合的地方。拥有具有机器学习功能的企业软件有助于从这些大型非结构化数据集获得竞争优势。
通过提供收集的数据,机器学习嵌入式软件中的算法可以轻松处理这些数据集,并发现见解和模式。通过帮助他们实现目标并推动增长,组织可以从这些成果中受益匪浅。
跨国零售公司沃尔玛是成功实现机器学习软件的一个很好的例子。他们大量利用机器学习来发现客户在产品推荐等领域的行为和使用。
结果。沃尔玛极大地改善了他们的零售业务和顾客体验。此外,机器学习帮助他们在商店和在线*台提供的购物体验之间建立了一座桥梁
数据的非本地化
由于移动和社交媒体等技术的激增,数据现在在很大程度上是分散的。通常,企业软件使用特定种类的数据库模型来存储和组织数据。结构化和非结构化数据现在共同存在于外部源中,这需要更深入的处理才能生成有用的最终结果。
谷歌等科技巨头已经完全转向数据中心形式的外部存储模块,以处理其海量数据。这些位于世界各地不同位置的数据中心需要持续的监控和维护,以确保它们不间断地运行。
谷歌利用机器学习软件来帮助这一过程,仅在 2014 年就大幅降低了 50%的能源使用量。这家科技巨头通过使用机器学习模型,能够优化和节省其数据中心的更多能源。
促进数据驱动的决策
以有效的方式使用数据对公司制定关键的商业决策有巨大的好处。使用机器学习的企业软件系统可以通过帮助组织基于从数据池中收集的见解单独和公正地做出决策,来极大地帮助这一过程。这对人才招聘、客户管理、R&D 等领域尤其有帮助。
例如,使用 TensorFlow,谷歌用于机器学习应用的开源库,使公司的研究部门能够发挥机器学习的潜力,以更好地洞察产品和服务的开发。当机器学习在 R&D 应用于做出数据驱动的决策时,DMAIC(定义、测量、分析、改进和控制)的使用是常见的。这导致了产品和服务质量的显著提高。
增强员工智能
机器学习通过自动评估组织中员工进行的搜索,将企业软件向前推进了一步。这实际上增强了员工的智能,通过监控他们参与的所有关键领域,促进了工作相关领域的决策。
通过这种方式,机器学习可以帮助提高生产率、节省时间并给出及时的响应。例如,IBM 已经建立了一个模型,说明机器学习等认知技术如何通过创造更好的参与和个性化的信息传播来增强员工的能力,以达到教练等目的。
IBM 全球员工发展合作伙伴 James Cook 表示,
"认知技术的优势在于,它可以快速准确地处理大量结构化和非结构化数据,以找到与[员工]当前职业经历相匹配的培训课程。我们认为人力资源部门面临着前所未有的机遇来推动许多行业的数字化转型。
IBM 自己的 Watson Discovery 广泛依赖于机器学习来快速整理和向员工提供信息,以便他们可以将这些信息用于当前的任务,而不必浪费时间进行广泛的搜索。此外,机器学习软件也在提升员工技能方面得到应用。
欺诈检测
欺诈行为的持续存在每年都会给组织带来损失。具有机器学习框架的企业软件通过及早发现欺诈帮助降低了欺诈。机器学习算法使用的模式识别方法可以识别交易等操作中的任何违规行为。
机器学习如何帮助欺诈检测的一个例子是在企业的财务部门。通过在企业软件中包含机器学习,它可以评估交易数据和外部来源,以检测涉及个人网络的交易中的任何类型的欺诈活动和异常。
SAS 是欺诈检测等领域机器学习的早期采用者。在金融领域,SAS 涉足欺诈检测,其软件被多家信贷机构用于消除交易中的欺诈行为。
总结
像机器学习这样的计算技术的发展,通过提高组织的生产力和效率,使组织受益匪浅。已经实施了机器学习企业软件模型的组织已经获得了相对于仍然坚持传统系统的其他组织的优势。
因此,越来越多的公司正在转向机器学习,或者已经在考虑投资机器学习的可能性。在未来几年,更多的组织将拥有由机器学习驱动的企业软件,以利用其推动业务创新和增长的可能性。
作者简介:
Vinod 已经概念化和交付利基移动产品,以满足各种领域,包括物流,媒体和非营利组织。他在 Fingent 领导、指导和训练一个由项目协调员和分析师组成的团队。https://www.facebook.com/vsaratchandra
T3T5https://in.linkedin.com/in/vsaratchandran
我们离完全自动驾驶的世界还有多远?
原文:https://towardsdatascience.com/how-far-are-we-from-a-fully-autonomous-driving-world-89fde97b5352?source=collection_archive---------4-----------------------
你可以在 Twitter @bhutanisanyam1 上找到我,在 Linkedin 上联系我
这里是我的车库项目
这里和这里是我学习通往自动驾驶汽车的路上的两个帖子
Source: Business Insider
麻省理工学院自动驾驶汽车深度学习课程刚刚发布了他们的第一堂课视频
该讲座是对深度学习技术的概述,也对自动驾驶技术的未来进行了一些讨论,并对当前系统的差距进行了简要警告。
以下是我们离自主驱动的未来还有多远,以及对伦理的简要介绍:
到 2017 年,计算机视觉已经达到 97.7%+的准确率!(ImageNet 挑战)很神奇吧?
那么,我们离一个完全自主的世界还有多远?
97.7%听起来足够好了。是吗?毕竟驾驶涉及很多计算机视觉,它确实比人类的高分更好——那么我们接*了吗?
ImageNet 挑战包括将 1400 万张图片分类到 22000 个可能的类别中。
当外推至真实世界时,这种准确性有多好?
现在,是的,挑战中涉及的类不会都涉及到 SDC 场景,但它们确实指出了一件事,计算机视觉,尽管它现在比人类更准确,但仍然不完美。这不是 100%准确。
这与现实世界的动态相结合,表明自治系统以意想不到的方式运行的可能性很小。在所有情况下,您会完全信任系统吗?比人类司机更好地处理各种情况?
讲座中提出的论点是,SDC 现在将作为工具,帮助我们更好地驾驶。他们甚至可能比我们开得更好,但在某些时候,人类需要干预。我们从 2018 年开始有一个半自治年。
大致来说,在 90%的情况下,汽车会比我们更好地自动驾驶,但在其余 10%的情况下,需要人工干预/控制。
100%的准确性将得到普遍认可,这也需要对所有意外情况进行概括,例如:百万分之一的情况,其中一只鹿将穿过道路,该情况必须得到处理。
Lex Fridman 在演讲中认为,“完美的系统”需要更多的研究工作,并提高深度学习算法的效率。这也是非常低效的(从计算角度来说)。
我说的完美情况不是指一辆能自动驾驶的汽车。最完美的情况是,我们对系统如此自信,以至于我们的汽车里不再有方向盘。人类驾驶会被认为比自动驾驶更危险。
在那之前,SDC 肯定会出现在道路上,毫无疑问,我们可能不必长时间握着方向盘。但是肯定会有需要人类控制的时刻。因此,术语半自治。
简要提及与强化学习相关的道德规范:
再举一个强化学习的例子——强化学习包括一套算法,在这套算法中,人工智能(agent)自我学习,以最大限度地实现既定目标,从而获得最大回报。这里有一本入门书做一个抽象的概述。
很多时候,系统(特定术语为代理)以完全出乎意料的方式运行。(哪些更擅长得到结果)。
Coast Runners. Source: Lecture Notes.
讲座中海岸跑步者的例子:你和我可能会参加比赛并收集绿色圆圈。代理人发现当地的高额奖励忽略了“隐含的”完成比赛的大目标。
前沿的 AlphaGo 和 AlphaGo Zero 系统已经证明了这一点,它们在围棋比赛中表演了令人类专家感到惊讶的棋步。
那么,如果我们想以最快的方式从 A 到达 B,而 SDC 决定采用一种意想不到的方法/路径,该怎么办呢?(我知道交通规则已被很好地编码到核心系统中——但这不允许我们忽略这种可能性)
鉴于结果可能是意想不到的,我们肯定需要对系统进行检查。
Source: Lecture 1 slides.
视觉系统的鲁棒性也是有问题的。这里有一个例子,说明了如何给图像添加一点扭曲,就能轻易地骗过 ImageNet 获奖模特。
最后,SDC 来了吗?随着 Voyage 在乡村部署自动驾驶出租车;通用汽车公司测试他们的大规模生产车辆?
是也不是。是的,我们周围有半自动车辆。但是一个完全自主的世界还很遥远。一种汽车根本没有方向盘的模式。几年——也许几十年。
我们有一个开始成形的半自主的现在(或未来)。
我相信到目前为止,SDCs 会像丰田展示的守护者模式那样运作良好。
在人类可能无法迅速做出反应的情况下,机器会接管控制权,例如:当你前方的车辆发生碰撞,需要在毫秒内做出决定时。或者在恶劣的天气条件下,由于车上的传感器(在这种情况下是雷达),车辆可以比人类“看得更清楚”。
另一方面,当情况复杂时,司机会控制局面。
在高速公路上,你可以打开自动驾驶仪,看报纸,玩游戏。但是在复杂的情况下,自动驾驶系统需要人工控制。
订阅我的时事通讯,获取深度学习、计算机视觉文章的每周精选列表
奔驰汽车能多快测试发布?——一场纸牌游戏比赛
原文:https://towardsdatascience.com/how-fast-can-a-mercedes-benz-car-be-tested-and-released-a-kaggle-competition-6a1d56ea17a7?source=collection_archive---------10-----------------------
我在 10 个月前注册了 Kaggle,并不时更新不同的比赛。我会窥探并查看数据,查看评估指标,还会浏览一些讨论和内核。但我绝不会真的做任何事。这场比赛是我第一次参加 Kaggle。我和我的另一个朋友 Vinayaka Raj 合作。数据清理、特征工程和模型调整的大部分见解都是他的主意。在这篇文章中,我会分享我们使用的方法。
比赛的主要目的是决定一辆车能以多快的速度通过筛选过程,以减少在测试台上花费的时间,从而减少污染。由于奔驰汽车有各种各样的选项,测试每一个选项,看看它们是否按照标准工作是至关重要的。因此,随着越来越多的功能年复一年地被添加到汽车中,测试一辆这样的汽车所花费的时间增加了。因此,戴姆勒向 Kaggle 社区提供了许多具有众多“匿名”功能的此类汽车的数据集,以提出最佳算法来帮助他们解决这一问题。
评定标准
首先,让我们看看在这次比赛中提交的作品是如何被评估的。用于评估的度量是 决定系数 (也称为 R 的*方)。它是预测分数和实际分数(范围 0-1)之间相关性的*方。简而言之,该指标决定了模型在用样本数据训练后预测真实值数据的能力或接*程度。
数据探索
在这样做之前,我想让你知道我们在这次比赛中使用了 python 及其相关包(matplotlib、pandas、numpy、sklearn 等等)。
现在我们开始研究数据!让我们先看看吧!
Snapshot of the csv file provided by Kaggle
每一行都有一个唯一的 ID、一组分类变量(X0-X8)和二进制/标识变量(X10-X378)以及输出“y”。
经过分析,我们发现了一些列:
- 这表明非方差(整个列中的值相同)
- 高度倾斜的**(大部分时间出现的少数值(> 95%))**
- 那是完全相同的副本****
- 那些与某些其他列线性相关**(正相关或负相关)**
我们没有遇到任何缺少值的列。因此没有必要进行插补。
数据预处理
预处理背后的主要思想是应对我们在数据探索阶段遇到的问题。那我们做了什么?在问这个问题之前,让我们先问一下我们为什么要这样做
- 降低手头问题的维度。
- 降低过度拟合的可能性(模型倾向于学习所有冗余、重复或不必要的可用特征)。
- 更少的特征意味着更简单的模型、更少的内存、更少的训练时间和更快的结果。
现在我们回到问题‘我们做了什么?’**
- 我们删除了没有可变性的列,即始终只包含一个值的列。
- 我们还删除了值在整个列中出现超过 95%的列。
- 我们扫描了数据集的重复出现,在每种情况下只保留一列。
- 显示高相关性的列也被删除,以减少过度拟合。
特征工程
特征是用于预测的有用信息。因此,更好的特性会带来更好的结果。
实际上,原始数据集中可用的特征(数字特征)可以立即用于预测。然而,你不会达到所需的精确度。如果我们可以创建更多的功能,并将它们转换成算法可以理解的东西,会怎么样?通过这样做,我们通过强调潜在的问题,使模型学习起来更简单。
冲击编码
由于数据包含分类变量,我们的第一项工作是将它们转换成算法可以理解的形式。我们进行了影响编码,其中每个分类变量都被该变量在该列中出现的“*均值”所替代。因此,具有更多“*均值”的变量将具有更高的数值。
有许多方法可以将分类变量转换成数字变量。本文对此提供了更多的见解。
在分类变量中创建新特征
我们能够创建具有分类变量的新特征。以下是列车组的前五行:
First five rows of the dataframe
列 X0、X1 和 X2 有一些共同点。他们有一些有两个字母的变量(例如:az,ab,bc 等。)所以我们想到创建一个新的专栏,叫做 X0_club、X1_club 和 X2_club。在把那些以相同字母开头的列组合起来之后,这些列中的每一列都会有变量。例如:[aa,ab,ac,…,az]会被棒化为[a],而[ba,bb,bc,…,bz]会被棒化为[b]等等。下图显示了包含新创建的列的数据帧:
Notice the three additional columns in the end
也可以为数值变量创建新特征。但是因为已经有很多列了,我们没有创建更多的(大错误)。
注意: 需要记住的一个关键点是,在训练数据集上执行的步骤也必须在测试数据集上执行**。因此,在进行数据预处理和特征工程时,要确保这些步骤是针对测试数据同时进行的。**
构建和训练模型
由于我们的问题是一个涉及回归的问题,我们决定使用随机森林,这是众多可用集成方法中的一种。还有许多其他算法可供选择。
我们使用 sklearn 库中可用的 RandomForestRegressor 函数来执行回归。该函数的不同参数(树的数量、树的深度、分割的最小样本和特征的数量)通过为循环运行决定,并使用交叉验证进行验证。
另一种方法
将输出变量与观察值的数量进行对比,我们看到它是高度倾斜的,也有一些异常值。我们决定使用 Box Cox 变换对此进行变换。它将偏态分布转换为正态分布。为此,我们使用了 scipy 中的相应函数。然而,根据转换后的结果训练模型并没有提高验证的准确性
我们能做什么?
以下是一些我们本可以使用但没有使用的技术/方法:
- 使用现有数据中非常重要的变量创建新要素。一个变量的重要性可以通过观察在决定结果时最依赖哪个变量来发现。在这种情况下,交叉验证可以帮到你。
- 我们想到在二进制变量之间执行基本的逻辑运算(AND、XOR 和 OR ),以增加特性的数量。但是由于我们有一个 8GB RAM 的系统,并且有大量的二进制变量(~300),它挂起了几次:(。如果这一步对您有用,必须注意确保删除重复和相关的列。
- 使用 AdaBoost 算法。虽然它有时对噪声和异常值敏感,但在大多数情况下,它优于其他集成方法。尽管如此,还是要小心,因为很有可能会吃得过多。
- 我们也可以在内聚力和回归中使用正则化的方法。sklearn 库中的套索函数可以帮你做到这一点。
结尾注释
所以现在你想要密码了?嗯所有相关的代码都可以在GitHub 的资源库中找到。
你有更好的办法解决这个问题吗?或者你还有其他想分享的评论吗?请随意评论。顺便说一下,这是我在 Medium 上的第一篇帖子。
我目前正在参加另一个 Kaggle 比赛——insta cart 市场篮子分析。一旦完成,我一定会写下我的经历。
今天五家企业如何使用人工智能和大数据
原文:https://towardsdatascience.com/how-five-businesses-are-using-ai-and-big-data-today-784abeb6f9ef?source=collection_archive---------6-----------------------
预测分析可以定义为一种数据挖掘形式,它使用统计建模来分析历史模式,然后使用这些模型来预测未来的结果。人工智能的部署使分析技术能够发现人类根本无法看到的变量之间的关系。
在本文中,我们希望通过五个预测分析用例将这一理论付诸实践。
在这个领域有一些有新闻价值的故事,特别是几年前引起如此多关注的“目标知道你何时怀孕”头条新闻。
从那以后,事情有了很大的发展。广泛可用和可访问的分析*台的发展为各种规模的公司提供了对复杂统计模型的访问。除了稍微令人毛骨悚然的怀孕预测的夸张之外,大数据更典型地被小型和大型企业用来改善他们的日常功能。
通过定义他们想要解决的问题,获取正确的数据,雇用具有理解数据的技能的人,并为他们提供适当的技术,任何企业都可以从今天有利可图的预测分析领域开始。
竞争者太多了,无法在一篇文章的范围内考虑每一个例子,所以我们试图提供一个有效的基于人工智能的分析的代表性样本,涵盖广泛的案例研究。
1.供应链优化:沃尔玛
我们从一个重量级的例子开始,但它为所有零售商提供了灵感。
当许多其他“传统”零售商还在苦苦挣扎时,沃尔玛已经连续 11 个季度公布了增长数据。值得注意的是,这是由网上销售额同比增长 63%推动的。
沃尔玛因其适应数字时代的意愿而备受赞誉,并押注于其连接线上和线下世界的能力,以与亚马逊竞争。
人工智能和预测分析是这一驱动力的核心。沃尔玛从其销售点系统即时获取数据,并将其纳入预测,以评估哪些产品可能售罄,哪些产品表现不佳。
Photo by chuttersnap on Unsplash
结合在线行为模式,这提供了大量的数据点(超过 40pb)来帮助沃尔玛为产品需求的上升或下降做准备。
数据通过沃尔玛的“数据咖啡馆”在云中管理,该咖啡馆由硅谷的沃尔玛实验室团队维护。这是一项复杂的、大规模的工作,要根据可靠的数据做出准确的预测,就需要与如此规模的企业所需的变量数量保持一致。
尽管如此,它带来的好处也可以被小企业所追求。
例如,沃尔玛对人工智能和预测分析的使用对于库存管理来说非常宝贵,因为经理们可以适当地进货,而不必冒着在需求超过供应时不得不做出昂贵的最后一分钟调整来填补缺口的风险。
这些预测还允许沃尔玛个性化其在线存在,根据特定客户的预测购买可能性向他们展示产品。
这种方法带来的纪律和严谨性意味着沃尔玛可以坚持严格的交货日期,因为其供应链的每一步都通过使用预测分析进行了优化。所有这些领域都可以由任何企业通过谷歌和 Adobe 这样的可用技术来改进。
引人注目的是,如果顾客从实体店取货,沃尔玛还会以降价或插队特权的形式向他们提供激励。尽管基于人工智能的分析可以给企业带来所有好处,但在运输成本上与亚马逊竞争仍然是一项艰巨的任务。
2.预测价格趋势:Hopper
众所周知,T2 的旅游业竞争激烈,需求时好时坏,还有许多低利润的线路。这可能会让旅行者蒙在鼓里,不确定最佳预订时间。有时最好提前预订,有时最好等到离出发日期更*的时候。
这使得它成为一个成熟的领域,可以发挥人工智能驱动的预测分析的力量,这一事实见证了旅行应用 Hopper 自 2015 年以来的受欢迎程度大幅增长。
Hopper 通过预测未来的价格模式并提醒旅行者购买飞往他们首选目的地的航班的最便宜时间,领先一步。
它通过每天观察数十亿的价格,并基于每条路线的历史数据,预测趋势将如何发展来做到这一点。然后,用户可以设置通知,提醒他们在价格下降时预订。
虽然不是唯一一家提供这种服务的公司,但 Hopper 报告称其预测准确率达到 95%,并声称每次飞行*均为客户节省 50 多美元。
下面的截图显示了这个过程是如何运作的。在一只可爱的、戴着眼镜的小兔子的陪伴下,我选择了纽约到檀香山的飞行路线,度过了一个当之无愧的假期。
Image created by author
根据我选择的日期,令人惊讶的专横的兔子告诉我现在预订,因为这条路线的门票只会随着时间的推移越来越贵。
Hopper 提供了一个将机器学习和预测分析作为其商业战略核心原则的商业范例。没有预测分析,就没有 Hopper。
然而,它所使用的统计模型对所有企业都有借鉴意义。Hopper 的成功本质上来自于它作为一个客观的消费者建议*台的可靠性。因此,许多其他公司可以通过使用统计数据来提供符合客户最佳利益的预测,而不仅仅是他们自己的底线。
3.小企业增长:迪法恩斯角动物园和水族馆
SAP 在 2016 年末进行的一项调查发现,超过 70%的小企业领导者认为他们仍处于从数据中获得洞察力的“早期阶段”。
华盛顿塔科马的一家动物园逆潮流而动,与国家气象局合作,找出导致游客人数如此不可预测地上升和下降的因素。这给管理人员带来了问题,他们总是为公园配备工作人员以迎合大量观众,但往往由于出席人数不多而导致工资超支。
凭直觉,我们可以假设,在温暖干燥的日子里,上座率较高,但在寒冷或潮湿的日子里,上座率较低。然而,通过将国家气象局的数据纳入 IBM 的人工智能驱动的沃森*台,动物园能够准确地确定哪些条件导致更多人参观。
这一知识随后被用于模拟未来的游客模式,使用历史游客人数和预测的天气统计数据。
Source: Unsplash
该项目取得了巨大的成功,现在是动物园商业规划的核心部分。Point Defiance 可以预测 95%以上的出席人数,使管理人员能够适当地为公园配备人员。这对游客如何体验公园没有负面影响(甚至可能相反),并创造了一些重要的商业效率。
当然,这种方法的应用范围远远不止是出席人数。迪法恩斯港可以监控游客与动物园的互动,有助于提供更好的客户体验。还计划使用人工智能驱动的预测分析来监控健康数据,诊断公园动物的问题,以提供预防性治疗。
4.留住员工:IBM
预测分析的根本吸引力在于它有可能根据组织目标提供更好的结果。这些通常公开以利润为基础,但预测分析也可以帮助识别员工保留问题并提出解决方案。
通过上传结构化数据文件(如下图所示),Watson 可以发现员工流失的常见原因。然后,根据每个员工预计不久离开公司的可能性,为他们生成一个“质量分数”。
真正发挥作用的是它响应用户自然语言请求的能力。与谷歌的新分析功能类似,Watson 可以根据用户的偏好响应特定的查询并构建数据可视化。
这是一个*台从探索性和诊断性分析快速进入预测性分析领域的绝佳例子。任何企业所有者或管理者都可以利用这些工具来精确地确定到底是什么导致员工离职,但他们也可以看到这些因素背后的原因,并采取预防措施来*息任何潜在的离职。考虑到招聘新员工与留住现有高绩效员工的成本,这将直接导致运营成本的降低。
5.观众延伸:安德玛
受众扩展是从人工智能和预测分析的使用中受益匪浅的另一个营销领域。通过了解现有高价值客户的数量特征,可以识别相似的个人,并向他们提供可能引起共鸣的个性化信息。
知道把广告预算花在哪里很重要,但知道不花在哪里也很重要。预测分析允许像安德玛这样的公司专注于将带来最大回报的领域,并将原本会被不准确花费的预算进行再投资。
安德玛使用人工智能来执行情感分析和社交倾听等任务,以了解客户对该品牌的看法,以及市场的差距在哪里。这使得该公司专注于成为一个数字健身品牌,这一举措使其在饱和的市场中开辟了一个新的利基市场。
安德玛生产健身产品,也生产应用程序和可穿戴设备,将线下和数字世界联系在一起。使用这些产品的人越多,安德玛就能收集到越多的数据来改进产品。每年有超过 2 亿的注册用户和超过 100 亿次的数字交互,因此不缺少数据。
最初发表于【www.clickz.com】。
模糊匹配如何改进你的 NLP 模型
原文:https://towardsdatascience.com/how-fuzzy-matching-improve-your-nlp-model-bc617385ad6b?source=collection_archive---------7-----------------------
模糊匹配
Photo by Ross Joyner on Unsplash
处理自然语言处理任务的挑战之一是文本模糊匹配对齐。当跳过这个文本处理文本时,您仍然可以构建您的 NLP 模型,但是代价是您可能不会获得好的结果。有人可能会说,在使用深度学习时,没有必要进行预处理。从我的经验来看,有适当的文本预处理至少可以提高你的模型 3% ~ 5%。
那么在什么样的场景下我们需要处理文本模糊匹配,我们能做些什么呢?如果输入源(即文本)不能保证 100%正确,或者存在别名,如“纽约”和“美国纽约”。
对于情况 1,输入可以来自用户,典型的例子是搜索。想象你正在构建谷歌搜索引擎,你必须验证输入而不是盲目地使用输入。
“language” is suggested to replace “lang” by Google
另一种可能的情况是输入是其他模型的输出。例如,输入来自光学字符引擎(OCR)的输出,您最好减少来自其他模型的错误。
对于第二种情况,即别名。尽管有人认为我们可以构建一个惊人的单词嵌入,使得“纽约”和“美国纽约”的向量对于模型来说足够接*。但是,为什么不用一种简单的方法来解决呢?
Photo by KEITH WONG on Unsplash
模糊的
FuzzyWuzzy 是一个简单但有用的库,可以找到相似的文本和分数。这个库是由 SeatGeek 提供的。使用这个库非常简单。您只需要传递目标令牌和字典。对于下面的例子,我试着搜索国家,国家列表可以从这里下载。
from fuzzywuzzy import process
process.extract('Hong Kong', countries, limit=3)
第一个参数是你的目标词,而第二个参数是字典。
[('Hong Kong SAR China', 90), ('Kongo', 72), ('Tonga', 54)]
经过计算,fuzzywuzzy 提出“中国香港特别行政区”与“香港”的得分最高。
其他得分算法
Fuzzywuzzy 为我们提供了以下不同的算法来对字符串进行评分。详细实现可以访问源代码。
ratio:sequence matcher 的包装器。根据 0 到 100 之间的匹配字符块的数量计算分数。
Formula: 2*(Matched Characters) / (len(String A) + len(String B))
以“Edward”为目标词,以“Edwards”、“Edwards2”和“drawdE”为词典。字符数分别为 7、8 和 6。
process.extract('Edward', ['Edwards', 'Edwards2', 'drawdE'], scorer=fuzz.ratio)
结果是
[('Edwards', 92), ('Edwards2', 86), ('drawdE', 50)]
“drawdE”的结果是 50,你可以看到它不是简单地计算匹配字符的数量,而是字符块。
WRatio:默认计分器。使用不同的算法给 0 到 100 之间的字符串打分。
为了查看我们是否可以查询回预期的位置名称,让我们看看是否可以返回日本(输入“日本”)和美国(输入“美国”)。
# Default scorer is Weighed Ratio
for location in ['Hong Kong', 'jepen', 'United tates']:
result = process.extract(location, countries, limit=2)
print(result)
结果是
[('Hong Kong SAR China', 90), ('Congo - Kinshasa', 57)]
[('Japan', 60), ('Yemen', 60)]
[('United States', 96), ('United Arab Emirates', 86)]
QRatio:字符串的快速比率比较。
# Partial Ratio
process.extract('Hong Kong', countries, scorer=fuzz.QRatio, limit=3)
结果是
[('Hong Kong SAR China', 64), ('Kongo', 57), ('Togo', 46)]
还有 UWRatio(与 WRatio 相同)和 UQRatio(与 QRatio 相同),以防你必须处理 unicode。
拿走
要访问项目模板,您可以访问这个 github repo。
关于我
我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和*台相关领域的最新发展。你可以通过媒体博客、 LinkedIn 或 Github 联系我。
参考
Python 中的 Fuzzywuzzy(原创)
Java 中的 Fuzzywuzzy
国家数据集
文字嵌入故事
谷歌如何利用人工智能将软件与新硬件结合起来
原文:https://towardsdatascience.com/how-google-is-using-ai-to-unite-software-with-its-new-hardware-bdb1849b3fcd?source=collection_archive---------6-----------------------
谷歌已经发布了一系列备受期待的硬件产品,包括一款新的 Pixel 智能手机、一款较小的谷歌 Home、一款较大的谷歌 Home 扬声器、一款笔记本电脑和一些耳塞。
即使是最不经意的观察者也应该清楚,谷歌对硬件越来越认真了。这标志着一家最初依赖其开源 Android 软件影响智能手机市场的公司的方向发生了变化。
软件方法导致了太多的碎片;没有产品和服务的独立生态系统,很难正面应对苹果。
仅有硬件是不够的。摩尔定律不再适用;CPU 的发展速度已经不如从前了。一家科技公司需要找到新的增长领域,才能主导现代格局。
谷歌正押注于其人工智能技术来实现这一点:一个可以统一其硬件和软件的竞争优势领域。
整个活动传达的信息非常明确,谷歌知道自己在这个领域抢在了竞争对手的前面。
“在人工智能优先的世界,计算机应该适应帮助人们生活”——谷歌首席执行官桑德尔·皮帅
中国科学家最*在进行的一项研究发现,谷歌人工智能的智商是苹果同类产品的两倍多。还是落后于一般人,但是差距每年都在减少。另一方面,谷歌和其他公司之间的差距每年都在扩大。
谷歌现在可以将人工智能产品直接构建到其硬件中,这在速度和隐私方面都给消费者带来了好处。
Tensor Processing Units
当然,大部分工作将在云中完成,这让谷歌有机会利用如此庞大的数据集来训练和改进其流程。最*推出的张量处理单元(TPUs)专门用于大规模提供机器学习,为谷歌在这方面的未来做好了准备。
Pixel 手机是旗舰产品,它将使人工智能助手脱颖而出。
谷歌助手将直接与谷歌的服务器通信,它是一个无处不在的固定设备,现在已经有很多谷歌设备。
这款手机的摄像头在开发时就考虑到了 AR 和 VR,尽管公*地说,谷歌在短期内更专注于前者。
“Pixel 用户拍摄的照片是 iPhone 用户的两倍,他们每年存储大约 23GB 的图像。”——布莱恩·拉考斯基,谷歌
在这方面,Google Clips 是一个有趣的发展。Clips 是谷歌将 AI 直接构建到其硬件中的一个例子;在这种情况下,硬件将自动识别和捕捉重要的时刻。无论像素相机有多好(据说确实非常非常好),它仍然依赖于有缺陷的人来充分利用它。
Clips 完全消除了这一因素,它可以同步到 Pixel 手机和基于云的谷歌照片存储*台。当然,Photos 充分利用机器学习和人工智能来解释图片,消除不完美之处,并将主题相关的图像捆绑在一起。
也许最有趣的公告是苹果 AirPods 的竞争对手 Pixel Buds。这些耳塞并不完全是无线的(它们通过一根线相互连接),但它们确实具有一系列的无线功能。
用户可以通过触摸来调高、调低或关闭音乐,也可以通过将手指放在其中一个芽上来调用谷歌助手。这将受到那些觉得在公共场合使用“Ok,Google”提示有点不自然的人的欢迎。
同样,Pixel Buds 允许谷歌使用人工智能来整合其硬件和软件,甚至提供 40 种语言的即时翻译服务。这已经在一系列语言中进行了测试(包括瑞典语,如下面的现场演示所示),早期的报告非常积极。
所有这些都清楚地表明了谷歌的商业战略。
拥有硬件允许搜索巨头将其人工智能和机器学习系统直接集成到产品中。
消费者将会愿意放弃他们的个人数据,因为通过更好的个性化服务,这些数据给他们带来了如此直接的好处。
所有这些数据都是谷歌机器学习系统的燃料,随着时间的推移,随着他们从反馈中学习,准确性只会提高。这将创造新的赚钱机会,搜索在未来一段时间内仍将是谷歌的摇钱树。
当然,只有当人们完全沉浸其中时,才能真正感受到这个生态系统的全部影响。例如,如果搭配 Beats 耳机和亚马逊 Echo,Pixel 智能手机的容量将会减少。
这一赌注是否会有回报还有待观察,但谷歌相信,其卓越的人工智能技术将说服消费者做出转变。
你的国家有多幸福?—快乐星球指数可视化
原文:https://towardsdatascience.com/how-happy-is-your-country-happy-planet-index-visualized-32220715adaf?source=collection_archive---------2-----------------------
介绍
幸福星球指数(HPI) 是由英国经济智库 NEF 推出的人类福祉和环境影响指数,旨在促进社会、经济和环境公*。它根据“什么最重要——所有人的可持续福祉”对 140 个国家进行了排名。
HPI 是这样计算的:
Source: HPI
它告诉我们“各国在实现长寿、幸福、可持续生活方面做得有多好”。该指数加权后,生态足迹越低的国家得分越高。
我从 HPI 网站下载了 2016 年的数据集。我感兴趣的是找到幸福、财富、预期寿命、足迹等等之间的相关性,然后根据上述衡量标准,将这 140 个国家归入不同的组别。我想知道这些发现是否会让我吃惊。
注:对于那些想现在就看到结果的人,我已经建立了一个 Tableau 故事,可以从这里进入。
数据
经过预处理后,这是我们正在处理的数据:它包含 140 个国家和 12 个变量:国家,地区,预期寿命,幸福,幸福年,足迹,不*等结果,预期寿命,幸福指数,国内生产总值和人口。
最幸福的 20 个国家(根据幸福星球指数)
哥斯达黎加位居榜首,紧随其后的是墨西哥和哥伦比亚。挪威是排名最高的欧洲国家。
最不快乐的 20 个国家(根据快乐星球指数)
乍得排名垫底,其次是卢森堡。卢森堡是富裕国家中得分非常低的最极端的例子——它在预期寿命方面做得很好,但不*等程度较低;它是世界上人均 GDP 最高的国家之一,但却以世界上最大的人均生态足迹维持着这种生活方式。“如果卢森堡的生活在其他国家复制,我们需要 9.1 个地球来维持我们的生存!”快乐星球指数声称。
人均 GDP 和预期寿命的关系
人均国内生产总值和预期寿命之间的相关性相对较强,因为这两个变量是一致的。这两个变量之间的皮尔逊相关性相当高,约为 0.62。
Figure 1
Pearson's product-moment correlation
data: hpi$gdp and hpi$life_expectancy
t = 9.3042, df = 138, p-value = 2.766e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.5072215 0.7133067
sample estimates:
cor
0.6208781
预期寿命和幸福星球指数得分的关系
尽管欧洲和美洲的许多国家预期寿命较长,但由于碳足迹较大,它们的 HPI 指数最终处于中低水*。
Figure 2
GDP 与幸福星球指数得分的关系
GDP 买不到幸福。GDP 和幸福星球指数得分的相关性确实很低,大概在 0.11 左右。
Figure 3
Pearson's product-moment correlation
data: hpi$gdp and hpi$hpi_index
t = 1.3507, df = 138, p-value = 0.179
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.05267424 0.27492060
sample estimates:
cor
0.1142272
一个简单的关联热图
Figure 4
使聚集
在一系列统计分析之后,通过应用 Pam 聚类分析,我将这 140 个国家按照财富、发展、碳排放和幸福程度分成三组(如果你对聚类分析的细节感兴趣,你可以在 Github 上的 R Markdown 文件中找到它们)。
Figure 7
这三个星团是如何出现在世界地图上的?
Figure 8
摘要
幸福星球指数被批评为对生态足迹的加权过重;生态足迹是一个有争议的概念。此外,幸福星球指数被误解为个人“幸福”的衡量标准,而事实上,它是地球“幸福”的衡量标准。
然而,快乐星球指数已经成为政治领域的一个考虑因素。对我们来说,它是有用的,因为它结合了福祉和环境方面,而且简单易懂。而且,它可以在网上找到,所以我们可以用它来创作一个故事。
创建这篇文章的源代码可以在这里找到。同样,欢迎你尝试用这些数据创建的画面故事。我将很高兴收到关于上述任何反馈或问题。
我如何解决数据科学问题
原文:https://towardsdatascience.com/how-i-approach-a-data-science-problem-714bfbc5c68c?source=collection_archive---------0-----------------------
对于刚刚进入数据科学领域的人来说,事情肯定会变得令人生畏。数据科学有太多的技术和程序会让任何人困惑。
亲身经历过这个问题,并且看到我的大多数同学都在为这个问题而挣扎,我决定写这篇博客,讲述我通常是如何处理数据科学问题的。
第一步:将你的业务问题陈述转化为技术问题陈述
与任何其他软件问题类似,数据科学旨在解决商业问题。大多数时候,业务问题陈述是模糊的,可以有多种解释。这主要是因为我们通常在语言中使用不能直接翻译成机器可读代码的定性词汇。
比方说,我们需要开发一个解决方案来降低城市的犯罪率。术语“减少”可以解释为:
- 降低高犯罪率地区的犯罪率
- 降低最常见犯罪类型的犯罪率
与定义问题的客户或业务团队一起确定正确的解释是一个好的实践。
第二步:决定监督学习技术
几乎每个数据科学问题的最终目标通常是分类或回归。确定问题的监督技术将有助于你更清晰地理解商业陈述。
让我们来看看降低犯罪率的问题。虽然降低犯罪率的问题更多的是一个政策决定,但根据上面的选择,我们必须决定是否需要进行分类或回归。
- 如果我们需要降低高犯罪率地区的犯罪率,我们就需要确定一个地区的犯罪率。这是一个回归问题。
- 如果我们需要降低最常见犯罪类型的犯罪率,我们就需要确定一个地区最常见的犯罪类型。这是一个分类问题。
再次强调,与定义问题需求的客户或业务团队进行交流,澄清确切的需求,这是一个很好的实践。
第三步:文献调查
文献调查是解决任何问题的最重要的一步(也是最容易被忽视的一步)。如果你阅读任何关于数据科学组成部分的文章,你会发现计算机科学、统计/数学和领域知识。因为对一个人来说,在所有可能的领域都拥有专业知识是很不人道的,所以文献调查通常有助于弥补专业知识不足的差距。
在浏览了与某个问题相关的现有文献后,我通常会尝试提出一组假设,这些假设可以形成我的潜在特征集。浏览现有文献有助于你理解该领域中的现有证据,作为在你的问题中采取正确方向的指南。它还有助于解释从预测模型中获得的结果。
回到我们降低犯罪率的问题上来,如果你想预测一个地区的犯罪率,你会考虑人口统计、邻*地区、执法规则等常识因素。文献调查将帮助你考虑额外的变量,如气候、交通方式、离婚率等。
第四步:数据清理
如果您与任何在数据科学方面花了一些时间的人交谈,他们总是说他们的大部分时间都花在清理数据上。真实世界的数据总是杂乱无章的。以下是大多数数据集中的一些常见差异,以及如何清理它们的一些技巧:
- 缺失值
缺失值是数据集中的空白值。这可能是由于各种原因,如价值未知、未记录、保密等。由于缺少某个值的原因不清楚,因此很难猜测该值。
您可以尝试不同的技术来估算缺失值,从简单的方法开始,如列*均值、中位数等。以及复杂的方法,如使用机器学习模型来估计缺失值。
- 重复记录
重复记录面临的挑战是识别重复的记录。在合并来自多个来源的数据时,经常会出现重复记录。这也可能是由于人为错误造成的。要识别重复项,您可以将数值*似到特定的小数位,对于文本值,模糊匹配可能是一个好的开始。识别重复项有助于数据工程团队改进数据收集以防止此类错误。
- 不正确的值
不正确的值大多是由于人为错误。例如,如果有一个名为“年龄”的字段,其值为 500,这显然是错误的。拥有数据的领域知识将有助于识别这些值。识别数值列的错误值的一个好方法是手动查看*均值的 3 个标准偏差以上的值,以检查其正确性。
第五步:特征工程
特征工程是任何数据科学问题中最重要的步骤之一。一组好的要素可能会使简单的模型适用于您的数据。如果功能不够好,你可能需要复杂的模型。特征工程主要包括:
- 移除多余特征
如果某个要素对输出值贡献不大,或者是其他要素的函数,则可以移除该要素。有各种各样的度量标准,如 AIC 和 BIC 来识别冗余特征。有内置的包来执行向前选择、向后选择等操作。删除多余的功能。
- 转换特征
某个要素可能与输出列存在非线性关系。虽然复杂模型可以用足够的数据捕捉到这一点,但简单模型可能无法捕捉到这一点。我通常试图想象每列的不同函数,如对数、倒数、二次、三次等。并选择看起来最接*正常曲线的变换。
第六步:数据修改
一旦清理了数据,在应用机器学习模型之前,可能需要进行一些修改。最常见的修改之一是将每一列缩放到相同的范围,以便给予所有列相同的权重。其他一些所需的修改可能是数据特定的,例如,如果输出列是倾斜的,您可能需要上采样或下采样。
步骤 7 到 9 是迭代的。
第七步:建模
一旦我准备好了数据,我通常会从尝试所有标准的机器学习模型开始。如果是分类问题,一个好的开始将是逻辑回归、朴素贝叶斯、k-最*邻、决策树等。如果是回归问题,可以试试线性回归、回归树等。从简单模型开始的原因是简单模型需要修改的参数较少。如果我们从一个复杂的模型开始,像神经网络或支持向量机,有太多的参数可以改变,穷尽所有选项可能会很费时间。
每个机器学习模型都对数据做出一些潜在的假设。例如,线性回归/逻辑回归假设数据来自输入参数的线性组合。朴素贝叶斯假设输入参数相互独立。了解这些假设可以帮助您判断不同模型的结果。将实际值与预测值可视化以了解这些差异通常很有帮助。
第八步:型号对比
评估不同机器学习模型的最标准的技术之一是通过交叉验证的过程。我通常选择 10 重交叉验证,但是你可以根据数据的大小选择正确的交叉验证分割。交叉验证基本上得出一个模型的*均性能。这有助于避免选择针对数据表现良好的模型,或者换句话说,避免过度拟合。在交叉验证之前随机化数据通常是一个好的做法。
比较不同模型性能的一个好方法是 ROC 曲线。ROC 曲线有助于您可视化不同模型在不同阈值下的性能。虽然 ROC 曲线给出了模型性能的整体感觉,但根据业务决策,您必须选择性能指标,如准确性、真阳性率、假阳性率、F1-得分等。
第九步:错误分析
此时,你已经尝试了一堆机器学习模型,得到了结果。这是一个很好的利用时间的方法,不仅仅是查看结果,如准确性或真正的阳性率,而是查看在一些模型中失败的数据点集合。这将帮助您更好地理解数据,并且比尝试所有可能的模型组合更快地改进模型。这是尝试集合模型的时候了,比如随机森林、梯度推进或者你自己的元模型【比如决策树+逻辑回归】。集合模型几乎总是保证比任何标准模型表现更好。
第十步:改进你的最佳模特
一旦我有了最好的模型,我通常会根据参数的数量来绘制训练与测试的准确性(或正确的度量标准)。通常,根据数据点的数量来检查训练和测试的准确性是很容易的。基本上这个图会告诉你你的模型是过拟合还是欠拟合。这篇文章检测过拟合与欠拟合清楚地解释了这个概念。
了解您的模型是过度拟合还是欠拟合将告诉您如何继续下一步。如果模型过度拟合,您可以考虑收集更多数据。如果模型不合适,您可以考虑使模型更复杂。[例如,将高阶项添加到线性/逻辑回归中]
步骤 11:部署模型
一旦您有了最终的模型,您会希望模型被部署,以便它自动预测新数据点的输出,而无需重新训练。你可以为简单的模型推导出一个公式,比如线性回归,逻辑回归,决策树等等。对于像 SVM、神经网络、随机森林等复杂的模型来说,就不是那么简单了。我不太熟悉其他语言,但 Python 有一个名为 pickle 的库,它允许你保存模型,并使用它来预测新数据的输出。
第 12 步:添加反馈
通常,任何数据科学问题的数据都是历史数据。虽然这可能在一定程度上类似于当前的数据,但它可能无法捕捉当前的趋势或变化。例如,如果您使用人口作为输入参数,虽然 2015-2016 年的人口可能会略有变化,但如果您在 5 年后使用该模型,它可能会给出不正确的结果。
处理这个问题的一个方法是不断用额外的数据重新训练你的模型。这可能是一个很好的选择,但是重新训练一个模型可能很耗时。此外,如果您有大量数据流入的应用程序,这可能需要定期进行。另一个更好的选择是使用主动学习。主动学习基本上试图使用实时数据作为反馈,并自动更新模型。最常见的方法是批量梯度下降和随机梯度下降。基于应用程序使用正确的方法可能是合适的。
结束语
数据科学的领域真的很广阔。人们一生都在研究上面讨论的各个主题。作为一名数据科学家,比起研究单个子主题,你更需要解决业务问题。此外,您必须向可能没有足够技术知识的业务团队解释技术过程和结果。因此,虽然您可能不需要对每种技术都有非常深入的了解,但是您需要有足够的清晰度来抽象技术过程和结果,并用业务术语来解释它。
LinkedIn 上的链接:https://www . LinkedIn . com/pulse/how-I-approach-data-science-problem-Ganesh-n-Prasad?trk=prof-post
如果您有任何建议,请留言或通过ganeshn1411@gmail.com联系我
我是如何在短短一个多月内完成 Udacity 的机器学习 ND 的
原文:https://towardsdatascience.com/how-i-completed-udacitys-machine-learning-nd-in-just-over-one-month-91f6b355ee3e?source=collection_archive---------1-----------------------
Machine Learning by mohamed_hassan, Pixabay license
如何在短时间内有效地学习?在这篇文章中,我描述了我是如何在大约一个月内完成 Udacity 的机器学习纳米学位的,而这通常需要 6-12 个月。我希望这能给你一些见解和想法,告诉你如何更有效地完成自己的学习目标。
这篇文章中的部分:
- 背景:我开始之前做了什么,基本技能是什么
- 导航纳米学位计划
- 观看视频讲座
- 时间管理
- 完成项目
一.开始之前
Build firm foundations. Photo by Mads Schmidt Rasmussen on Unsplash
我对数学和统计学(高中水*)有一定的了解,以前也做过编程(主要是关于 CodeAcademy 和基本 web 开发的入门课程)。特别是,我参加了 Udacity 的免费数据分析入门课程,因此我接触到了熊猫。Numpy 和 Pandas 是 Python 中用户友好的库,用于分析和操作数据。
要吸取的教训:对将要使用的工具有一个坚实的基础,例如 Numpy 和 Pandas 。这对你会有很大帮助。
- 我提到的教程似乎已经集成到 MLND 的第一部分(项目 1 之前)了,所以在开始之前你不必学习使用这些工具。
- 在继续之前,您不必掌握这些工具,但我建议您至少要基本熟悉**,这样您就可以专注于其他事情,如数据预处理和建模**。
如果你是 Numpy 和 Pandas 的新手,花点时间记下常用的命令并在需要时查阅你的备忘单。这是一张熊猫小抄(不是我的)。
Scikit-learn 也是你将要使用的一个关键的机器学习工具,但是我不认为你需要在早期就很好地了解它。
二。导航 ND
Photo by Himesh Kumar Behera on Unsplash
Udacity 的课程结构是,先有课程,再有项目。每节课都由短视频组成,中间有小测验。例如,在监督学习部分,在进入监督学习项目之前,您将学习回归、决策树、神经网络、支持向量机、基于实例的学习、朴素贝叶斯、贝叶斯学习和集成学习。
你可能知道会有很多视频观看。问题是,如果你按时间顺序进行,当你完成这个项目时,你可能已经忘记了在这一节的前几课中学到的东西。
为了解决这个问题,我在观看视频讲座之前浏览了项目大纲,并在浏览视频的过程中完成了项目。此外,我没有按顺序观看所有视频——我先去看我需要的视频,然后再去看其他视频。这样做有两个原因:
1。理解你为什么要学习一些东西。
- 你会更积极地寻找重要的或有用的材料。
2。一边做一边完成这个项目。
- 课后,你将能够更彻底地应用所学的知识,所以你会更好地吸收材料。
- 你也可以花更少的时间在课程中寻找你以后需要的答案。
示例:监督学习项目
拿监督学习项目(这里是项目笔记本)来说。通过浏览笔记本,您可以很好地了解机器学习过程——从探索和预处理数据到选择和调整模型。您可能不知道许多术语的意思,但这不是问题,您稍后会了解它们。现在浏览笔记本意味着当你遇到一些想法时,你会更好地了解它们在大局中的位置。
您还可以看到,例如在问题 2 中,您被要求描述每种模型的优点和缺点,以及为什么它们可能适合该问题。这些是你在观看视频讲座时需要注意的事情。这些项目的伟大之处在于它们很实用,并且只问你一些你在工作中作为一个真正的项目来做时需要回答的问题。因此,通过观察他们问的问题,你可以推断出你需要从视频中学到什么。因此,你会更好地理解内容,更快地完成项目。
我也建议你从一开始就开始考虑你的顶点项目。顶石项目是一个准自由形式的项目,你将在项目结束时完成。
三。观看视频讲座
Illustration by mohamed hassan, CC0 License.
充分利用观看视频讲座的时间也很重要,因为你会花很多时间来做这件事!这里的关键是主动学习并避免因为忘记所学内容而不得不再次观看视频。(重新观看部分视频,因为你不明白所说的是好的。)
主动学习是什么意思?这意味着你不只是坐在那里听,而是想想你在说什么,你是否理解它。如果你不积极思考所说的话,你就不会记得或理解它。你需要把知识变成你自己的。
怎样才能积极倾听?你可以通过边看视频边记笔记来做到。试着不要逐字逐句地记下老师说的话,而是用自己的话写(或画)一个总结。这也意味着你不必写下所有的东西——只写下你认为以后需要的信息。这样,你不仅处理了信息,而且避免了以后为了寻找你需要的东西而不得不重播视频。
你可以看看我在 GitHub repo 上的笔记。Udacity 在程序的资源部分也有一些注释。
四。时间管理
Photo by Anastase Maragos on Unsplash
我很幸运能够在 2016 年 9 月几乎全职从事 MLND 的工作,所以设置将与大多数人不同。当我兼职从事自动驾驶汽车工程师 Nanodegree 的工作时,这些想法仍然适用(如果不是更适用的话)。
可操作项目
有很多关于时间管理的建议,但是这两个是对我有用的,并且我已经坚持了一年多的:
1。优先考虑你要做的事情
我列出了三件我想做的事情,并按照优先顺序去做。如果你每天花一个小时在 MLND 上,你可能想把这个调整到每周一到三个项目。
这个想法是决定少数几件重要的事情,并专注于这些事情。
2。追踪您的时间
知道你实际上是如何度过你的时间是很棒的——你经常会意识到有多少时间花在了不重要或完全无用的事情上。你可以使用像 Toggl 这样的工具、电子表格或纸笔来完成。
一般想法
1。深潜比浅潜更好
- 在继续前进之前,花时间去理解这些想法。如果你不知道某个部分发生了什么(也没有试图去理解它),只是继续前进,你很可能不得不重新观看视频。你可能会觉得当时你走得更快了,但通常不值得。
- 如果你能一次花更长的时间在这个项目上(45 分钟足够坚持下去)会有帮助。我每天花大约 3-6 个小时在这个项目上,这样我就可以每天完成一大部分。这意味着我花更少的时间来复习我已经忘记的课程材料。
2.记录你的工作
- 这看起来像是浪费时间,但是*特别是如果你是兼职做这个的话,*当你两周后回到你的项目时,你会很高兴你做了。
3。努力工作,但不要超越自己的极限
- 如果你认为你没有任何进展,因为你不能思考或者感觉不舒服,休息一下。时间的质量比时间的数量更重要。如果我累到无法清晰思考,我会去散步,只有在感觉好多了之后才继续工作。休息的一个好方法是小睡一会儿或者只是睡觉。充足的睡眠真的很重要。
4。保持动力
- 通过 MOOCs 学习的最大问题是,你可能会失去动力,不再投入时间。如果你能激励自己,这是很有帮助的,例如通过和朋友一起参加课程,在闲聊中寻找学习伙伴,对朋友负责或者写下你所学到的。
- 当我在做这个项目时,Udacity 正在我所在的地区试验面对面的联系小组会议。我见到了其他 Udacity 的学生,并讨论了我们每个人的进步。这对我很有帮助。你可以看看你所在的地区是否有联谊团体,或者是否有其他空闲时间的学生愿意见面。
动词 (verb 的缩写)完成项目
Photo by Joshua Hoehne on Unsplash
你需要通过所有的项目才能从纳米学位项目毕业。为了通过一个项目,你的提交需要满足项目标题中的所有要求。
1.如前所述,在观看视频之前,浏览项目的每个部分。
- 你甚至可以一边浏览视频,一边完成你的项目。通过这种方式,你可以更好地理解每个被教授的思想是如何融入大局的,以及它为什么重要。
特别是,尽早开始考虑你的顶点项目。随着项目的进展,你可以寻找一些想法来解决你的问题。有问题要解决也会让你有动力。
2。边走边草拟问题的答案
MLND 有许多问答形式的问题。当你完成项目时,做一个第一遍的“草稿”回答。
记下你的问题或你不能回答问题的原因。这将帮助你摆脱困境,因为你知道要寻找什么。这在心理上也是有帮助的,因为你不会盯着许多空白的地方——你知道你有所收获。
3。不要害怕提交项目,即使你认为它们不怎么样,或者你不知道怎么做。
提交项目意味着你可以得到反馈。**多次提交(因为你第一次没有通过)意味着你可以得到更多的反馈!**评论可以说是项目中最精彩的部分。请你的评论者对你不确定的地方提出建议。
从经验来看,很多学生的一大拦路虎是泰坦尼克号项目(Project 0) 。人们可以为此花费数周时间,因为他们认为他们的结果会更好。Project 0 是在你学习大部分东西之前,是为了让你体验一下机器学习的过程。如果你想做出色的工作,当你对概念和工具有了更好的理解时,把它留给以后的项目。给泰坦尼克做点基础的就行了,符合精度要求就提交。
祝你学习愉快,万事如意!如果你有任何问题或反馈,请在评论中告诉我。
阅读更多关于机器学习和编程的帖子, 访问我在 jessicayung.com 的网站 。
我如何用 4 小时的工作和 500 美元创建了一个 40,000 标签的音频数据集
原文:https://towardsdatascience.com/how-i-created-a-40-000-labeled-audio-dataset-in-4-hours-of-work-and-500-17ad9951b180?source=collection_archive---------10-----------------------
我将向您展示如何使用 amazon mechanical Turk 创建定制的高质量数据集。
我已经开发深度学习产品好几年了,在我开始一个新项目之前,我对客户的要求之一是他们必须已经有一个数据集。这一直是一个要求,因为它确保我不必做任何我不太喜欢的数据集创建工作。这通常需要一段时间,并且会变得非常繁琐,尤其是在没有公开可用的数据源的情况下。虽然公*地说,每天都有许多数据集可用,而且越来越多,你现在可以使用谷歌的新数据集搜索工具进行搜索。
几个月前,一家读者公司找到我,希望帮助我开发一款产品,但他们没有数据集,这次我决定尝试一下。我想这将是一个探索过程和培养技能的绝佳时机。这是我发现亚马逊 Mechanical Turk 对于深度学习工程师的强大之处。经过 4 个小时的编码和跑腿工作,我发表了我的第一首热门歌曲。40 小时后,我有了一个包含 40k 标签图像的数据集,而我的钱包只轻了 500 美元。我觉得我刚刚用了一个作弊代码。我想分享一些我使用 MTurk 学到的东西,并希望它能帮助你为你的项目建立定制的深度学习数据集。
尝试构建自定义数据集?不确定从哪里开始?和我一起聊 30 分钟,谈谈你的项目。我会帮助你更清楚地看到问题,并帮助你消除噪音。
报名一个时间段
什么是机械土耳其人
Mechanical Turk 或 MTurk 是一个众包市场,在这里你可以发布和协调广泛的人类智能任务(HITs)。任务可以是任何东西,如分类、标记、调查、转录、数据收集,以及任何你可以制作成网站的东西。工人可以查看/选择您的任务,并为每个任务赚取少量奖励。
该*台提供了许多有用的工具来创建您的工作,并使工人轻松地成功完成您的任务。假设您想要创建一个包含 1000 张带标签图像的数据集,您可以对每 10 张分类图像收取 0.25 美元,并以 25 美元的价格获得完整的数据集。最棒的是,你将在几个小时内获得数据集。
从现实世界的例子开始
1:选择击中的类型
MTurk 有多种 HIT 模板可供选择,这使得它很容易开始。它们的范围从调查模板到音频和视频的转录。花些时间检查不同的项目,了解你能做什么。
如果您看不到可以使用的项目模板,您可以随时使用通用调查链接模板,并将其链接到自定义网页,这样员工就可以执行任何任务。我用这种方法收集非标准的训练数据已经非常成功了。
2.设置点击的属性
命中属性对于成功收集数据非常重要。命中属性包括像标题和描述这样*凡的事情,但也有很多重要的设置,如每次命中的任务数量和每次命中的奖励。
每次点击的奖励是你要付给完成你的任务的工人多少钱。当试图计算一个公*的报酬率时,花点时间自己做,并计算好时间。看看你完成任务需要多长时间,然后计算出等价的报酬,假设完成任务需要 1 个小时,并且你支付了最低工资。我已经无数次使用这种方法来获得我所有任务的启动费,并且结果的质量一直很高。请记住,工作越努力,你就应该付出更多来保持质量。我花了高达 2.00 美元去做一件需要 10 分钟的工作。
每项任务分配的时间也是一个需要考虑的重要因素。我发现这一点时,我认为这只是一个数字,工人们看看他们是否有时间完成任务。我了解到,一旦他们开始工作,就会被限制在这个时间范围内。这导致了一些工人的问题,当他们的时间用完了,不能领取他们的奖励!
其他一些有用的参数:
- 点击过期
- 自动审批和支付员工
- MTurk 大师
- 点击率
- 批准的点击次数
- 特定位置的工人
- 特定语言技能要求
3.自定义您的 HIT HTML 模板
设置好参数后,您可以创建或更改所有员工在决定是否接受您的工作时都会看到的 HTML 设计。MTurk 为你提供了一个非常用户友好的 HTML 编辑器来帮助你。如果你想要一个非常定制的模板,你也可以直接编辑 HTML 源代码。
最佳实践
花点时间为任务创建说明,因为这可能意味着好数据和坏数据之间的差异。这是每一击最关键的组成部分。保持你的指示简单明了,以避免工人的错误
为你的项目制定清晰的评估政策
您应该手动评估您的点击结果。当您制定评估政策时,无法满足这些指标的明确员工有机会不接受 HIT,而不是糟糕地完成它,这将浪费您和他们的时间。
包括黄金标准项目
黄金标准项目是那些你已经知道答案的项目。当您将这些项目包含到您的 HIT 中时,您就有办法在评估期间自动剔除不良员工的工作。
评估你得到的结果
总是评估你得到的结果。您可以选择自动或手动完成这项工作,但这是至关重要的一步。不检查工人的工作会导致质量低劣和彻头彻尾的欺诈。
我最*遇到过一个案例,一个工人正在提交由自动化系统生成的结果。幸运的是,我的黄金标准项目和我花在评估结果上的时间提醒了我这个坏演员,我能够阻止他们的帐户提交任何更多的工作。
尝试构建自定义数据集?不确定从哪里开始?和我一起聊 30 分钟,谈谈你的项目。我会帮助你更清楚地看到问题,并帮助你消除噪音。
报名一个时间段
最后的想法
Mechanical Turk 对于深度学习工程师和团队来说是一个非常棒的工具。它可以用来建立数据集,只有大公司才能在很短的时间和成本内完成。它的 API 还允许你自动化剩下的大部分工作。我可以进行全自动的评估和职位发布。
除了显而易见的成本和时间优势,还有出色的员工群体。他们来自各行各业,为了完成你指定的 10 分钟任务,他们愿意走多远会让你吃惊。我最*开发了一个数据集,我用它来建立一个老年人监测和警报系统,我收到了 10 封电子邮件感谢我开发这个系统,还有几封电子邮件让我知道如何更好地帮助工人们完成它。
感谢阅读:)如果你喜欢它,尽可能多的点击下面的按钮!这对我意义重大,鼓励我写更多这样的故事
咱们也连线上 Twitter 或者LinkedIn
我如何创建一个分类器来确定一首歌的潜在流行度。
原文:https://towardsdatascience.com/how-i-created-a-classifier-to-determine-the-potential-popularity-of-a-song-6d63093ba221?source=collection_archive---------5-----------------------
帮助音乐人成功的工具。
Source: Unsplash
介绍
从我的角度来看,我看到许多音乐家,无论是乐队还是个人,都没有在社会上获得他们想要的受欢迎的地位,而很少有人主宰音乐行业。因此,我的努力是开发一个系统,让每个对通过歌曲展示自己独特才华感兴趣的音乐爱好者能够评估他们可能从观众那里获得的潜在受欢迎程度。
受欢迎程度与取决于音乐观众偏好的评级相关联。将有三个评级等级,分别标为优秀、中等和差。因此,较高的评价(优秀)表明在音乐观众中类似于其他高评价歌曲的流行度,反之亦然,而中等的保持在以上两者之间的音轨。
技术
tensor flow——一个流行的机器学习库
pandas——python 的数据处理和操作库
一个音乐和音频分析工具
另一个机器学习库(一个高级 API)
numpy——有效执行矩阵(2d 数组)运算的便捷工具
操作系统处理与文件系统相关的操作
CatBoost——一个用较少的过度拟合实现增强树的库
XGBoost- a 梯度推进算法
方法
我们将需要一个数据集来工作,我们需要手工制作,因为我将使用僧伽罗语歌曲,因为僧伽罗语是我的母语,以及基于这些做的研究较少。目前没有关于僧伽罗歌的数据集。因此需要创建一个。我们的任务将是一个采用监督学习方法的分类任务。我们将主要关注神经网络作为我们的分类算法。具体来说,我们将使用使用 tensorflow 实现的多层神经网络。我们还将在结果部分对使用多种技术获得的结果进行比较。
设计
A complete process execution of the system
方法学
在开发我们的解决方案时,我们考虑了各种方法来选择最佳方案。每种方法的性能比较可以在结果部分找到。考虑了以下实现。
1.香草神经网络(多层神经网络)
2.集合技术(随机森林)
3.升压(XGboost,CatBoost)
4.堆叠(2 个基础学习者,1 个元学习者)
创建数据集
我们将使用 librosa 从 8000 多首音乐库中为每首歌曲提取三个有意义的特征。这三个特征将是节奏(每分钟节拍数)、梅尔频率倒谱系数(模仿人类语音产生和语音感知的某些部分)和谐波元素(音频信号内的谐波分量)。使用这三个特征的原因是因为它们被认为是音乐的高级特征,并且高级特征已经被证明是观众偏好的更具决定性的因素,因为它们捕获了观众最看重的特征。接下来,我们需要标记这个数据集。为此,我们使用 K-means 聚类将数据点分成三个聚类,这三个聚类的数量等于评级类别的数量。这里,我们假设具有相似特征的歌曲生成彼此接*的特征值,因此当计算距离度量以确定数据点所属的聚类时,具有相似评级的数据点的距离将具有微小的差异。从而落入相同的集群。确定标注后,合并要素和标注以创建数据集。
Clustering performed on the dataset using three clusters
聚类标签将被分配 0 和聚类数-1 之间的随机整数给三个聚类。这些标签 0、1 和 2 只是分隔三个集群的符号,因此没有数字表示。因此,如果有人需要确定哪个标签是优秀、中等和差,以评估他们的立场。他们必须从自己的角度来定义成功。原因是音乐因人而异的主观性。例如,如果我想根据我认为的流行歌曲来评价我的歌曲。我必须首先选择我认为优秀、一般和差的三首歌曲,并提取这些歌曲的特征,将它们提供给系统,并获得这些歌曲的评级/标签。现在,既然我知道了这些标签在我看来意味着什么,我就可以把我的作品交给系统,并获得标签/评级,然后比较我的立场。
First few records of the dataset
Label Distribution
数据预处理
sklearn 中的 LabelBinerizer()已用于在标签上创建等效的一键编码。
StandardScaler()用于将数据标准化为*均值为零、标准差为一的普通高斯分布。
构建神经网络
神经网络有一个输入层、两个隐藏层和一个输出层。首先,我们创建三个占位符,以提供每个神经元存在的特征、标签和概率,这是丢弃层中需要的参数。这些占位符的值将在运行时提供。然后,我们通过声明每一层的权重和偏差来创建网络的每一层。除了输出层之后,在每一层之后,将在激活函数的输出上添加漏失。前馈神经网络的基本概念是,输入到某一层的输入乘以一个权重矩阵,并添加到该层的偏差中。这些权重和偏差是可以改变的变量,以便使学习函数一般化。来自层的结果被给予激活函数,该激活函数根据激活函数将输入映射到特定范围内的输出。输入层和隐藏层的激活函数将是 tanh ,而输出层将具有 softmax 激活函数。中间层的最佳激活被证明是 tanh ,其流行的激活函数与性能的比较将在结果部分提供。
价值函数
我们使用的成本函数是交叉熵函数,它取预测标签的对数值,然后乘以实际标签。然后进行求和并创建新的矩阵值。为了获得每一批的成本,我们计算矩阵各行的*均值。现在我们有了一个列矩阵,它指定了每一批或一个时期的成本。
优化功能
作为优化函数,我们使用了随机梯度下降法,它通过学习率在降低成本的方向上调整学习曲线。
培养
训练是分批进行的,以减少过度拟合。此外,训练时期的数量被设置为 200。这应该在 Tensorflow 的会话中完成,因为 Tensorflow 中的计算图形仅在会话中进行评估。要提供给占位符的值是在训练期间使用 feed_dict 字典参数提供的。session 类中的 run 方法可用于运行计算图的操作。
设置超参数
训练时期
当我们将所有的训练数据用于训练过程时,我们说一个时期完成了。训练数据由我们的训练特征及其相应的训练标签组成。这里,我们将训练时期设置为 200,这意味着我们在 200 次迭代中训练我们的全部训练数据。没有我们可以使用的训练时期的理想数量。这取决于数据的复杂程度。因此,您应该进行参数调整或基本上尝试几个参数配置,以找到该参数的理想/合适值。
超参数 1:training_epochs = 200
因为我们正在实现一个多层神经网络。它将由一个输入层、两个隐藏层和一个输出层组成。
隐藏层中的神经元数量
隐藏层是对输入数据执行转换以识别模式并概括我们的模型的层。在这里,我在第一和第二个隐藏层中分别使用了 120 个神经元,这足以达到相当好的精度。但是正如我之前解释的那样,所有的超参数都应该以这样一种方式进行调整,以改善您的模型。
超参数 2:n_neurons_in_h1 = 120
超参数 3:n_neurons_in_h2 = 120
学习率
这是算法学习的阶段。机器学习大师说,我们应该从高学习率开始,逐步降低学习率,以达到最佳效果。此外,建议学习率保持在 0 & 1 的范围内。
超参数 4:learning_rate = 0.001
辍学者
用于减少训练时的过度配合。
keep_prob=0.5 用于训练,1.0 用于测试。退出仅用于培训,不用于测试。上述概率变量指定了每个神经元留在层中的概率。
最后,可以在训练后使用 save()类中的 save()方法保存模型。
为减少过度配合而采取的措施
1.打乱数据集
2.标准化数据集
3.添加漏失层
4.成批样本的训练数据集。
结果和讨论
在本节中,我们将评估我们在解决问题时使用的每种方法的性能,以及我们可以获得的推论。
参数调整结果如下:
Hyper parameter configurations with changes in accuracy
其他参数(批量和分割百分比)变化:
Changes in accuracy with other parameter configurations
Accuracy variation against training epochs
Cost variation against training epochs
Performance comparison of each approach
Feature importance plot
上图显示了通过 F-score(2TP/2TP+FP+FN)测量的每个特征的预测能力。其中 TP 是真阳性的数量,FP 是假阳性的数量,FN 是假阴性的数量。
Variation in misclassification error with various activation functions
很明显,就预测精度而言,堆叠通过正确分类每个类中的每个元素提供了令人印象深刻的结果。而增压和装袋也进行得很好。神经网络的实现不是很令人印象深刻,但给出了可接受的结果。最重要的事实是,给定数据集的偏差性质,神经网络仍然能够识别类别 2 的小部分。但这是在上面提到的许多技术被结合以最小化过度拟合之后。此外 tanh 被认为是为输出层以外的层选择激活函数的最佳选择。
参考文献
[## 张量流
用于机器智能的开源软件库
www.tensorflow.org](https://www.tensorflow.org/) [## LibROSA - librosa 0.5.1 文档
LibROSA 是一个用于音乐和音频分析的 python 包。它提供了创作音乐所必需的构件…
librosa.github.io](https://librosa.github.io/librosa/) [## sci kit-learn:Python 中的机器学习
编辑描述
scikit-learn.org](http://scikit-learn.org/stable/) [## 催化增强/催化增强
catboost 是一个开源的决策树梯度提升库,支持分类特征。
github.com](https://github.com/catboost/catboost) [## XGBoost 文档- xgboost 0.4 文档
这是 xgboost 库的文档。XGBoost 是极端梯度增强的缩写。这是一个旨在…
xgboost-clone.readthedocs.io](http://xgboost-clone.readthedocs.io/en/latest/) [## 城市声音分类,第 1 部分
基于神经网络的声音特征提取和分类
aqibsaeed.github.io](https://aqibsaeed.github.io/2016-09-03-urban-sound-classification-part-1/) [## 语音识别维基
1.自动语音识别(ASR)中最常用的特征提取方法是 Mel-Frequency…
recognize-speech.com](http://recognize-speech.com/feature-extraction/mfcc)
附录
Source code for feature extraction
Source code fro neural network implementation,training and evaluation
我如何利用我自己的社交媒体数据
原文:https://towardsdatascience.com/how-i-exploited-my-own-social-media-data-84e886dcf101?source=collection_archive---------10-----------------------
如果他们能从中受益,为什么我不能?
大约两年前,我参加了第一次数据科学入门课程。在我注册的十周时间里,我学会了如何收集数据,修改数据,分析数据,可视化数据,并将其粘贴到机器学习算法中。我立刻就被吸引住了。在这个大数据就像吃到饱的流行词自助餐一样随处可见的时代,我感觉一个全新的世界展现在我的眼前。
在我学习数据科学入门的同时,我还参加了一个名为职业责任的课程。在我的大学,这通常被称为计算机伦理。我快速增长的渴求数据的欲望突然被极端的认知失调所压制。
早上,我会学到从训练数据集中推断缺失的属性是多么容易,而下午,我会学到发生在行业中的去匿名化丑闻。我在学习上下文完整性的同一天学会了如何创建一个网页抓取器。我瞥见了两种未来;一个将延续系统性的欺骗,另一个可以利用我的技术知识实现社会公正。
虽然我在打一场数据冲突战,但我对这场战斗无比感激。那十周完全改变了我对技术的看法。我一直生活在一个自满和否认的现实中。我曾想,如果我假装不知道自己对数据隐私的需求,我就不必为自己过度使用社交媒体辩护。
然后是这个季度的最后三周。我们被分配了一个数据科学课程的期末项目。我要获得一个数据集,清理它,进行某种分析,创建可视化,将其输入到机器学习模型中,并教给学生一些东西。
我知道我想用我的项目做一些重要的事情。我想发表声明。我可以很容易地找到一个关于体育统计或电影评论的数据集,但这些不会影响我以我需要的方式培养道德的能力。当我上传一张集体照片到脸书的超级数据库时,我突然想到。
我打算利用我自己的脸书数据。
揭幕仪式
在 GDPR 出现之前,脸书的数据收集是透明的对立面。我很难找到这家公司在收集什么数据,更不用说如何获得任何形式的访问权了。最终,在眯着眼睛阅读设置页面上的小字时,我用一句话找到了我的金券。
[Download a copy](https://www.washingtonpost.com/news/the-intersect/wp/2018/03/27/heres-how-to-download-all-your-data-from-facebook-it-might-be-a-wake-up-call/?noredirect=on) of your Facebook data.
花了几天时间,但最终我收到了一个 html 文件的压缩文件夹,里面有我在与这家社交网络巨头共事的八年中亲自提供给他们的所有信息。我很震惊。
- 我犹豫地说,因为有一种可能性,这种信息只是脸书愿意分享他们从用户那里收集/汇总的信息。
Facebook has since changed the design of our data representation, but this was what they offered pre-GDPR
实际上,我不知道我为什么这么惊讶。我应该知道他们一直保存着我所有的数据。*十年来的想法、信息、事件、图片和喜好加在一起。我认为这是实际看到我的在线生活在一个 zip 文件中的聚合的行为,真正把樱桃放在隐喻的数据-隐私-危机圣代的顶部。他们甚至有我的面部识别数据。我第一次删除了脸书。
具有讽刺意味的是,我刚刚在计算机伦理课上学到,删除一个脸书账户实际上是不可能的,因为已经收集的数据永远不会被删除。不管怎样,我打开我的笔记本电脑,开始搜索我的在线身份。我有工作要做。
该项目
此时,我第一次接触数据科学大约已经八周了。我无法创建一个面部识别神经网络或我朋友的社交图谱分析。真的,我只希望我的项目证明一件事:如果社交媒体公司从使用我们的个人数据中受益,为什么我们不能做同样的事情?我决定创建两个数据集:
- 我在 Facebook Messenger 上的私人信息。
- 我在脸书发表的公开帖子。
使用 nltk 库,我对这两个数据集进行了情感分析,看看我是否在我的公众形象和我的私人事务之间保持一致的积极和/或消极。我发现我不是。(可以理解的)我私下比公开场合更消极。我摆弄了一下数据。我意识到在一月份,我更有可能变得消极。不过,四月很棒。我创造了一个机器学习预测器,它可以猜测我在任何一天的积极或消极程度,精确到秒。
我用八周的数据科学知识做到了这一点。是什么阻止了脸书的专业人士做类似的事情?如果我通过基本的数据分析了解了这么多关于我个人生活的信息,我甚至无法想象一群专家会发现我什么。
我向全班展示了我的发现。我告诉他们我的动机、在线数据隐私和社交媒体数据利用。他们鼓掌,我坐了下来。项目结束了……但旅程才刚刚开始。
我利用了自己的数据,希望能更多地了解自己。相反,我对自己的身份有了更多的了解。在欧洲,我的数据被认为是我身份的一部分。在美国,情况并非如此。当我在过去十年收集的数以千计的个人信息、公共想法或习惯性页面赞中搜寻时;很难想象有人会认为数据不是我们身份的一部分。
一个瞬间可以改变一个人一生的看法。我的时刻是大学三年级的时候,坐在咖啡店里,利用我自己的数据。随着自满的安慰开始变得越来越虚幻,我知道漠不关心不是一个选项。
在这个话题上,我一直在考虑把我的老项目变成一个通用的开源工具,这样每个人都可以分析自己的脸书情绪。如果您对利用自己的数据感兴趣,请联系我们,也许我们可以让这成为现实!
我是如何在凯格尔斯的泰坦尼克号比赛中获得 98%的预测准确率的
原文:https://towardsdatascience.com/how-i-got-98-prediction-accuracy-with-kaggles-titanic-competition-ad24afed01fc?source=collection_archive---------1-----------------------
首先,我想开始目测数据,看看人们加入这艘船的城市是否有任何统计上的重要性。尽管从瑟堡开始旅程的旅行者在存活率上有轻微的统计改善。我决定放弃这个专栏。
Count of survivors vs non-survivors, grouped by arrival point
Survivors using mean (Southhampton, Cherbourg & Queenstown)
接下来,我想确定乘客支付的票价是否对整体存活率有影响。这是一个重要的发现,表明票价和存活率之间有很大的相关性。
Y Axis denotes ticket cost
在对数据集进行更多检查后,我发现 18 岁以下的人有更大的生存机会。18-35 岁年龄段的几率要低得多,此后基本上是 50:50。
Chance of survival by age
独自旅行的人比有家人的人死亡率更高:
Family vs Lone Passenger
因为 16 岁以下年龄组的存活率更高。当按性别分析数据时,我把孩子们分成单独的班级。妇女和儿童确实有更大的生存机会。
Gender breakdown of survival
让我们开始做一些机器学习吧!我使用了三种不同成功程度的模型。
首先,我尝试了传统的逻辑回归。
logistic_regression = LogisticRegression()
logistic_regression.fit(X_train, y_train)
y_pred = logistic_regression.predict(X_test)
logistic_regression.score(X_train, y_train)
这产生了大约 80%的准确度。接下来,我尝试了 K *邻。
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
knn.score(X_train, y_train)
~81%.略有改善,但也好不了多少。最后,我尝试使用随机森林。
random_forest = RandomForestClassifier(n_estimators=100)
random_forest.fit(X_train, y_train)
y_pred = random_forest.predict(X_test)
random_forest.score(X_train, y_train)
哇哦!使用该模型的准确率超过 98%!Kaggle 真的是一个很好的乐趣来源,我建议任何人都尝试一下。
我希望你喜欢我这篇概述了我的数据集分析过程的简短文章,并希望很快见到你!
我如何用人工智能制造假的人
原文:https://towardsdatascience.com/how-i-got-a-computer-to-make-fake-people-using-ai-gans-a8e2f542e992?source=collection_archive---------15-----------------------
—以及为什么它很重要
下棋赢了人类?检查。
对恶性肿瘤和良性肿瘤的分类比医生更好?检查。
对数百万种可能治愈癌症的药物建模?等等,人工智能真的能做到吗??
我们美丽的人类肤色呢?当然,人工智能不能模仿人类面部的纯粹的华丽的,对吗?
权利的反义词。
人工智能的最后两个令人兴奋的应用可以通过 GANs 来完成。但首先,在我们进入如何,什么,为什么和“哦,我的上帝,我想我只是拉屎我自己”之前,让我们用一个故事来描述这种特殊类型的人工智能背后的直觉。
Are these paintings even real or did AI make them too? Is it safe to trust your eyes?
假设几个月后有一家画廊开张,希望展示著名艺术家的真实可信的画作,所以他们雇了一名侦探来检查每一幅画。与此同时,这个地区有个伪造者试图卖掉他的一些赝品。但他还不是一个伟大的画家,所以他的艺术现在看起来就像随机的形状和涂鸦(他称之为抽象)。
起初,侦探能够很容易地分辨出真迹和赝品。请记住,这位侦探对他的工作来说也是新手,但不需要太多技巧就能看出伪造者现在的画非常糟糕,一点也不像真正的艺术。
但是随着几个月的过去,伪造者发现是什么让真正的艺术品看起来…嗯,是真的。他研究真正的艺术家为使他们的作品看起来是世界级的而使用的风格、模式和形状,并开始尽可能地复制它们。他做得如此之好,以至于侦探现在很难区分赝品和真品。尽管随着时间的推移,侦探也获得了更多的工作经验,但伪造者只是超过了他。
当画廊真正开放时,大约一半的画是真的,一半的画是伪造者画的。侦探非常困惑,最后只能猜测一件作品是真是假。
现在让我们更进一步;让我们看看你能不能分辨出哪些脸是真的,哪些是假的(如果有的话)。
可怕的是右边所有的人脸都是由一个 AI 系统生成的;具体来说,一种特殊类型的神经网络称为生成对抗网络(GAN)。
GANs 概述
GANs 由两个神经网络组成,生成器和鉴别器,它们在游戏中相互竞争以最小化或最大化某个函数。鉴别器接收真实的训练数据以及来自生成器的生成(假)数据,并且必须输出每个图像是真实的概率。它的目标是最大化正确分类给定数据类型的次数,同时生成器试图最小化该次数;它试图让鉴别器将生成的输出分类为实数,使鉴别器不那么正确。
简单来说,发电机就像我们的伪造者;它的目标是制造假的图像来欺骗侦探,让他们以为这些图像是真的。鉴别者就像我们的侦探;它的工作是将真正的训练图像与伪造者制作的图像区分开来。
等等,为什么这里有两个神经网络?
The function that both networks are trying to minimize/maximize (the rules of the game)
上面这个复杂的函数实际上意味着,生成器(G)和鉴别器(D)都在进行一场博弈,竞争看谁更擅长实现他们的某个目标。当给两张图片供选择时,一张来自真实的数据集(艺术家),另一张是 G 画的,D 想知道如何分辨哪一张是真实的。它每次都想准确地挑出真正的一个。
G 认为它比 D 更聪明,可以很容易地愚弄它,所以它的工作是努力确保 D 认为 G 的图像是真实的,并使 D 得到正确答案的次数尽可能低。实际上,当鉴别器确信一幅图像是真的时,它会输出 1,当它发现一幅赝品时,它会输出 0。理想情况下,我们希望 D 的*均输出为 0.5,这证实了 G 非常擅长制作赝品,以至于它们看起来几乎与真实图像相同,这意味着 D 只需猜测,并且只有大约一半的时间是正确的。
What the Discriminator (left) and Generator (right) look like in code (PyTorch Implementation)
我构建的特殊类型的 GAN 是一个深度卷积生成对抗网络(DCGAN ),它生成了上面看到的伪假。基本思想是网络 D 和 G 都是使用卷积层结构构建的,其中特征图或内核扫描图像的特定部分以寻找关键特征。
这实际上是通过矩阵乘法来实现的,因为图像中的每个像素都可以表示为一个数字。像素组的值乘以矩阵,允许网络学习该像素组中存在的重要特征,如边缘、形状和线条。这在一开始是很难接受的;你可以在这里看到更深入的解释和可视化。
生成器扫描真实输入图像,以寻找尽可能接*地模仿真实训练图像的特征的模式。鉴别器扫描训练数据和生成的图像,以找到它们的特征之间的重要差异,从而可以将它们区分开来。这些重要的数据通过每一层进行传输,最终得到每幅图像中最重要的特征。
一遍又一遍地重复训练过程,让生成器和鉴别器更好地了解真实人脸的样子,我们可以从左边的图像到右边的超逼真的结果。我实际上有点敬畏;右边的一些脸看起来真的像真人!
Results over time look wayyyyyyyy more realistic
在现实生活中,我们能用甘斯做什么?
我个人最喜欢的也可以说是最有趣的应用程序之一是条件 GANs 的 pix2pix 实现。一个不熟练的艺术家只需要画出一幅画的轮廓,GAN 就可以根据它被训练模仿的图像来填充其余的特征(伪造的未来)。
Edges2cats draws a great cat, not that great of a hat
音乐
甘不仅仅对图像有好处;他们也可以制作音乐。我们可以识别和弦和旋律等方面来创作歌曲,而不是识别图片中的边缘和形状等特征来伪造绘画。
药物发现
GANs 最令人兴奋和实用的用途是在药物发现方面。生成器可以连续生成随机药物的分子结构,接收来自鉴别器的关于药物看起来是否真实的反馈,以继续迭代。理想情况下,我们最终希望生成器能够模仿真实药物结构中的模式。这将是疯狂的;**机器能够创造出前所未有的新药,**有可能征服世界上最有害的疾病。
关键要点
- gan 是两个相互竞争的神经网络
- 生成器的目标是最小化某个函数;鉴别器试图最大化相同的功能
- 发生器制造模仿真图像的假图像来欺骗鉴别器,鉴别器试图准确地区分假图像和真图像
- 随着时间的推移,网络能够生成超逼真的数据
- 有多种变体,其中 2 种是条件和深度卷积 gan
- 甘斯可以用来制造假人、音乐、毒品和画猫
- 不要相信任何人;任何东西都可以伪造
非常感谢您的阅读!关注我关于 中 更多和LinkedIn。如果你想了解更多,或者让我知道你在做什么,请随时联系我!
我是如何得到 82.3%的分数,并最终进入 Kaggle 的泰坦尼克号数据集的前 3%的
原文:https://towardsdatascience.com/how-i-got-a-score-of-82-3-and-ended-up-being-in-top-4-of-kaggles-titanic-dataset-bb2875cee6b5?source=collection_archive---------1-----------------------
就我的经历而言,我不是一名专业的数据科学家,但我一直在努力成为一名数据科学家。幸运的是,有 Python 作为我的主要武器,我在数据科学和机器学习领域有优势,因为这种语言有大量的库和框架支持我。我也阅读这方面的书籍,我最喜欢的是“Python 机器学习入门:数据科学家指南”和“用 Scikit-Learn 和 TensorFlow 进行机器学习”。
但仅此还不够。在浏览各种博客、浏览几个网站并与朋友讨论后,我发现,要成为一名数据科学家专家,我肯定需要提高赌注。参与竞争,建立网上形象,这样的例子不胜枚举。然后我遇到了 Kaggle。就像 HackerRank 是为了一般的算法竞赛,Kaggle 是专门为机器学习问题开发的。不得不试试。它举办各种各样的比赛,其中著名的“泰坦尼克号”问题是欢迎你在门户网站上注册的。接下来呢?我下载了训练数据,在我的机器上安装了所有我需要解决的库。我甚至初始化了一个空的存储库来避免以后的麻烦。剩下的唯一部分是处理数据和训练模型。“应该很简单,能有多难?”,我问自己脸上有笑容。
“应该很简单,能有多难?”,我问自己脸上有笑容。
我匆忙地从下载的 csv 文件中解析数据,将其输入决策树模型进行训练,预测测试乘客的生存能力,并上传结果。我得了 64 分,在排行榜上排名倒数 7%。是的,你没看错;垫底的 7%!!!
这是我的原始代码,第一个版本
结果在我面前粉碎了我的自尊。**是的,它教会了我现实世界的问题不能用 5 行代码来解决。**我是在我之前的一篇博客中说这些的——“用 5 行代码用 Python 编写的简单机器学习模型”:D
它教会了我现实世界的问题不是 5 行代码就能解决的。
我坐下来,重新访问并阅读了我之前提到的书中的更多章节。我通读了“端到端建立一个完整的机器学习模型”部分。因此,这不是向模型输入垃圾,数据需要尽可能干净,这直接反映了所用模型的性能。
分析现在开始…
Source : http://www.azquotes.com/quote/593283
由于我曾使用 Jupyter 笔记本进行分析部分,请前往我的 github 项目进行详细分析。链接在这里:
<源代码—最终迭代>
[## 拉曼萨/卡格尔-泰坦尼克号
在 GitHub 上创建一个帐户,为 kaggle-titanic 的发展做出贡献。
github.com](https://github.com/ramansah/kaggle-titanic/blob/master/Analysis.ipynb)
我的卡格尔简介
我还建立了一个爱好项目,以提高我在 Python 和机器学习方面的技能。目前托管在这里,(目前未激活)它可以在云上运行和保存一些机器学习模型。虽然还需要进一步改进…
我如何让 Matplotlib 绘制苹果颜色表情符号
原文:https://towardsdatascience.com/how-i-got-matplotlib-to-plot-apple-color-emojis-c983767b39e0?source=collection_archive---------18-----------------------
以及为什么图书馆目前不能
问题是
如果你尝试绘制表情符号,你可能会看到这样的东西:
This graph has no meaning other than to demonstrate the appearance of plotted emojis.
虽然我们明确指定为字体,但这些表情符号并不是苹果色表情符号。它们来自字体 DejaVu Sans,默认字体在 Matplotlib 无法处理我们指定的字体后接管,抛出以下错误:
RuntimeError: In FT2Font: Could not set the fontsize.
关于 Matplotlib 中绘制表情符号的堆栈溢出的一些相关问题:
- 如何在 matplotlib 中绘制(高质量)表情符号?
- matplotlib:用表情符号标签标注剧情
- OS X Matplotlib 中的表情符号
- matplotlibs x ticks 中的表情符号
- 无法加载 Matplotlib 中的表情字体
所有这些都没有答案。最*版本的 Matplotlib 根本无法做到这一点。看看 Matplotlib 的 GitHub repo 就会发现问题 #3135 、 #4492 和 #12830 ,其中第一个问题截至 2022 年已经开放了* 8 年。
为什么 Matplotlib 不能从苹果彩色表情符号字体中绘制表情符号?我们如何克服这种功能性的缺失来绘制表情符号呢?本帖回答了这些问题。
为什么 Matplotlib 不能绘制表情符号
苹果颜色表情符号是一个 TrueType 集合(TTC)文件。这种格式将多种字体合并到一个文件中,以节省空间。我们之前看到的抛出运行时错误的依赖项 FT2Font 只支持从 TTC 文件中获取第一种字体。虽然这可能行得通,但是转换依赖项 ttconv 的限制阻止了后端实际使用这种字体。
有一个解决方案是以拉请求的形式出现的 #9787 。目前正在等待进一步审查。
当我们等待拉请求被合并时,有一个直接的解决方案,我们可以使用 Matplotlib 成功地绘制表情符号。
直接解决方案:使用第三方后端
输入 Mplcairo 。作为“Matplotlib 的 cairo 后端的一个全新的、本质上完整的实现”,Mplcairo 在最初后端的几个方面进行了改进。最值得注意的是,Mplcairo 引入了对在 TTC 文件中使用第一种字体的支持。
看起来我们应该能够通过pip install mplcairo
轻松安装 Mplcairo,但是对我来说,当我试图将它导入到我的代码中时,这个安装继续抛出错误。
相反,我用 git 将 repo 克隆到我的机器上(git clone https://github.com/matplotlib/mplcairo.git
),然后遵循构建和安装指令。下面我总结一下我的过程。
建筑物
由于车轮不可用于 OS X,我们需要建立自己的 OS X 车轮使用终端。为此,我们需要以下依赖关系:
- 支持 C17 的 C编译器,如 GCC ≥ 7.2 或 Clang ≥ 5.0 。我用
brew install llvm
安装了后者。 - Cairo 和 FreeType 头,以及定位它们的 pkg-config 信息。由于 cairo 在 1.15.8 版本中引入了对表情符号的颜色支持,我们需要一个不早于此的 cairo 版本。直到康达-福吉更新它的开罗,
brew install cairo
。然后是pip install pycairo
。
一旦我们获得了依赖项,我们就可以激活 llvm(如brew info llvm
所述)并构建 OS X 轮子,而在 mplcairo 的根文件夹中:
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"
export CC='/usr/local/opt/llvm/bin/clang'
export CXX='/usr/local/opt/llvm/bin/clang++'
tools/build-macos-wheel.sh
装置
现在我们已经构建了 Mplcairo,我们可以用pip install dist/mplcairo-0.1.post47+g109b19f-cp37-cp37m-macosx_10_9_x86_64.whl
在系统范围内(或者在我们的虚拟环境中)安装它。
这可能是一个异常,但是在构建终端时,我的 Python 从版本 3.7.0 降级到版本 3.6.5。当我打开一个新的终端窗口时,Python 又回到了 3.7.0,我可以安装滚轮了。
注(2020 年 8 月 16 日):确认 tools/build-macos-wheel.sh 和 dist/mpl cairo-0.1 . post 47+g 109 b 19 f-cp37-cp37m-ma cosx _ 10 _ 9 _ x86 _ 64 . whl 是正确的文件路径——2018 年我第一次发表这篇文章的时候,它们的命名是不同的。
用法!
为了绘制我们的表情符号,我们只需导入 Mplcairo 并将其设置为 Matplotlib 的新后端。
import matplotlib, mplcairo
print('Default backend: ' + matplotlib.get_backend())
matplotlib.use("module://mplcairo.macosx")
print('Backend is now ' + matplotlib.get_backend())
运行上面的脚本后,您应该会看到以下输出:
Default backend: module://ipykernel.pylab.backend_inline
Backend is now module://mplcairo.macosx
您的默认后端可能会有所不同,这取决于您运行脚本的位置。我的默认后端来自 Jupyter 笔记本。(如果使用的是 Jupyter Notebook,必须先重置内核,然后才能重置后端。您还必须在导入 matplotlib.pyplot 之前重置后端。)
一旦你启动并运行 Mplcairo,Matplotlib 就能漂亮地绘制表情符号。
Lo and behold the emoji.
完整代码:
如果你想阅读更多我的文章或者探索数以百万计的其他文章,你可以注册成为中级会员:
[## 通过我的推荐链接加入 Medium-briena Herold
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
brienna.medium.com](https://brienna.medium.com/membership)
你也可以订阅我的邮件列表,以便在我发表新文章时得到通知:
[## 每当布蕾娜·赫罗尔德发表。
每当布蕾娜·赫罗尔德发表。通过注册,您将创建一个中型帐户,如果您还没有…
brienna.medium.com](https://brienna.medium.com/subscribe)
你可能会对我的其他一些故事感兴趣:
[## 如何免费下载 Twitter 好友或关注者
Python 中的简单指南
towardsdatascience.com](/how-to-download-twitter-friends-or-followers-for-free-b9d5ac23812) [## 如何批量获取 arXiv 全文预印本
使用 Python3 和 MacOS X 命令行
towardsdatascience.com](/how-to-bulk-access-arxiv-full-text-preprints-58026e19e8ef) [## 从《纽约时报》收集任何时期的数据
Python 中的简单指南
towardsdatascience.com](/collecting-data-from-the-new-york-times-over-any-period-of-time-3e365504004)
我是如何用 Python 中的深度学习实现 iPhone X 的 FaceID 的。
原文:https://towardsdatascience.com/how-i-implemented-iphone-xs-faceid-using-deep-learning-in-python-d5dbaa128e1d?source=collection_archive---------2-----------------------
逆向工程 iPhone X 的新解锁机制。
你可以在这里找到所有的 Python 代码。
在推特上关注我的工作更新和更多:【https://twitter.com/normandipalo
新款 iPhone X 讨论最多的一个特点就是新的解锁方式,TouchID 的继任者: FaceID 。
创造了无边框手机后,苹果不得不开发一种简单快捷的解锁手机的新方法。当一些竞争对手继续使用放置在不同位置的指纹传感器时,苹果决定创新和彻底改变我们解锁手机的方式:只需看着它。由于一个先进的(非常小的)前置深度摄像头,iPhone X 能够创建用户面部的 3D 地图。此外,使用红外相机捕捉用户脸部的图片,这对于环境的光线和颜色变化更加鲁棒。使用深度学习,智能手机能够非常详细地学习用户的面部,从而在每次手机被主人拿起时识别他/她。令人惊讶的是,苹果 ha 声明这种方法甚至比 TouchID 更安全,突出错误率为 1:100 万。
我对苹果公司实现 FaceID 的技术非常感兴趣,尤其是这一切都是在设备上运行的,只需对用户的面部进行一点初始训练,然后每次拿起手机时都能顺利运行。我专注于如何使用深度学习来实现这个过程,以及如何优化每个步骤。在这篇文章中,我将展示如何使用 Keras 实现类似 FaceID 的算法。我将解释我采取的各种架构决策,并展示一些最终的实验,这些实验是使用 Kinect 完成的,这是一款非常流行的 RGB 和深度相机,其输出与 iPhone X 的前置相机非常相似(但在更大的设备上)。舒服地坐着,喝杯咖啡,让我们开始逆向工程苹果的新游戏改变功能。
了解 FaceID
“……驱动 FaceID 的神经网络不仅仅是执行分类。”
FaceID setup process.
第一步是仔细分析FaceID 如何在 iPhone X 上工作,他们的白皮书可以帮助我们了解 FaceID 的基本机制。使用 TouchID,用户最初必须通过按几次传感器来注册他/她的指纹。大约 15-20 次不同的触摸后,智能手机完成了注册,TouchID 准备就绪。类似地,使用 FaceID,用户必须注册他/她的脸。这个过程非常简单:用户只需像*常一样看着手机,然后慢慢地将头部旋转一圈,从而从不同的姿势注册面部。就这样,过程完成,手机准备解锁。这个惊人快速的注册程序可以告诉我们很多关于底层学习算法的信息。例如,驱动 FaceID 的神经网络不仅仅是执行分类,我将解释为什么。
Apple Keynote unveiling iPhone X and FaceID.
对于神经网络来说,执行分类意味着学习预测它看到的人脸是否是用户的。因此,它应该使用一些训练数据来预测“真”或“假”,基本上,但不同于许多其他深度学习用例,这里这种方法将不会工作。首先,网络应该使用从用户面部获得的新数据从头开始重新训练。这将需要大量的时间、能量消耗以及不切实际的不同面部的训练数据的可用性,以得到负面的例子(在转移学习和对已经训练好的网络进行微调的情况下变化很小)。此外,对于苹果来说,这种方法不会利用“离线”训练更复杂的网络的可能性,即在他们的实验室中,然后将已经训练好的网络运送到他们的手机中使用。相反,我认为 FaceID 是由一个暹罗状卷积神经网络驱动的,它由苹果“离线”训练,利用对比损失将人脸映射到一个低维潜在空间中,该空间的形状使不同人的人脸之间的距离最大化。发生的事情是,你得到一个能够一次性学习的架构,正如他们在主题演讲中非常简要地提到的。我知道,有些名字很多读者可能不熟悉:继续读,我会一步一步解释我的意思。
FaceID looks like it will be the new standard after TouchID. Will Apple bring it to all his new devices?
用神经网络从面孔到数字
一个连体神经网络基本上由两个相同的神经网络组成,它们也共享所有的权重。这种架构可以学习计算特定类型数据之间的距离,比如图像。其思想是,你通过暹罗网络传递几对数据(或者简单地通过同一网络分两步传递数据),网络将其映射到一个低维特征空间,就像一个 n 维数组,然后你训练网络进行这种映射,以便来自不同类的数据点尽可能远,而来自同一类的数据点尽可能*。从长远来看,网络将学会从数据中提取最有意义的特征,并将其压缩到一个数组中,从而创建一个有意义的映射。为了对此有一个直观的理解,想象一下你将如何用一个小向量来描述狗的品种,这样相似的狗就有了更接*的向量。你可能会用一个数字来编码狗的皮毛颜色,用另一个数字来表示狗的大小,用另一个数字来表示皮毛的长度,等等。这样,彼此相似的狗就会有彼此相似的向量。很聪明,对吧?嗯,一个连体神经网络可以学会为你做这件事,类似于一个 自动编码器 所做的。
A figure from the paper “Dimensionality Reduction by Learning an Invariant Mapping” by Hadsell, Chopra and LeCun. Notice how the architecture is learning similarity between digits and is automatically grouping them in 2-dimensions. A similar technique is applied to faces.
通过这种技术,可以使用大量的人脸来训练这样的架构,以识别哪些人脸最相似。有了合适的预算和计算能力(就像苹果一样),人们还可以使用越来越难的例子来使网络对诸如双胞胎、对抗性攻击(面具)等事情变得健壮。使用这种方法的最终优势是什么?你终于有了一个即插即用模型,它可以识别不同的用户,而无需任何进一步的训练,只是在初始设置期间拍摄一些照片后,简单地计算用户的面部在面部潜像图中的位置。(想象一下,就像前面说的,为一只新狗写下狗的品种向量,然后存储在某个地方)。此外,FaceID 能够适应你外貌的变化:既有突然的变化(如眼镜、帽子、化妆),也有缓慢的变化(面部毛发)。这基本上是通过在这张地图上添加参考面向量来完成的,根据你的新外观来计算。
FaceID adapts when your looks change.
现在,让我们最后看看如何使用 Keras 在 Python 中实现。
在喀拉斯实施 FaceID
至于所有的机器学习项目,我们首先需要的是数据。创建我们自己的数据集需要时间和许多人的合作,这可能是相当具有挑战性的。因此,我在网上浏览了 RGB-D 人脸数据集,我找到了一个看起来非常合适的。它由一系列面向不同方向并做出不同面部表情的 RGB-D 照片组成,就像 iPhone X 用例中发生的那样。
要看最终的实现,可以去我的 GitHub 资源库 看看,在那里可以找到 Jupyter 的笔记本。此外,我用一台 Colab 笔记本 进行了实验,你也可以试试。
我基于 SqueezeNet 架构创建了一个卷积网络。该网络将情侣脸的 RGBD 图片(即 4 通道图片)作为输入,并输出两个嵌入之间的距离。使用对比损失来训练网络,该对比损失最小化同一个人的图片之间的距离,并且最大化不同人的图片之间的距离。
Contrastive loss.
经过一些训练后,该网络能够将人脸映射到 128 维的阵列中,这样同一个人的照片就可以分组在一起,而其他人的照片则远离。这意味着,为了解锁您的设备,网络只需计算解锁期间拍摄的图片与注册阶段存储的图片之间的距离。如果距离低于某个阈值,(距离越小,越安全)设备解锁。
我使用了 t-SNE 算法来在二维空间中可视化 128 维嵌入空间。每种颜色对应不同的人:正如你所看到的,网络已经学会了将这些图片紧密地分组。(当使用 t-SNE 算法时,聚类之间的距离是没有意义的)当使用 PCA 降维算法时,一个有趣的情节也出现了。
Clusters of faces in the embedding space created using t-SNE. Every color is a different face (but colors are reused).
Clusters of faces in the embedding space created using PCA. Every color is a different face (but colors are reused).
实验!
我们现在可以试着看看这个模型的工作原理,模拟一个通常的 FaceID 循环:首先,注册用户的面部。然后,解锁阶段,用户(应该成功)和其他人都不能解锁设备。如前所述,差异在于网络计算的解锁手机的人脸和注册人脸之间的距离,以及该距离是否低于某个阈值。
让我们从注册开始:我从数据集中拍摄了同一个人的一系列照片,并模拟了一个注册阶段。该设备现在正在计算这些姿势中每一个的嵌入,并将它们存储在本地。
Registration phase for a new user, inspired by the FaceID process.
Registration phase as seen by the depth camera.
现在让我们看看,如果同一个用户试图解锁设备会发生什么。同一用户的不同姿势和面部表情实现了*均大约 0.30 的低距离。
Face distances in the embedding space for the same user.
另一方面,不同人的 RGBD 图片得到的*均距离为 1.1。
Face distances in the embedding space for different users.
因此,使用 0.4 左右的阈值应该足以防止陌生人解锁您的设备。
结论
在这篇文章中,我展示了如何基于面部嵌入和暹罗卷积网络实现 FaceID 解锁机制的概念验证。我希望它对你有所帮助,有任何问题你可以联系我。 你可以在这里找到所有相关的 Python 代码。
在推特上关注我的工作更新和更多:【https://twitter.com/normandipalo
我是如何战胜一个 538 预测算法的
原文:https://medium.com/s/story/how-i-outsmarted-fivethirtyeights-nfl-forecasting-algorithm-592a301fa318?source=collection_archive---------1-----------------------
你也可以
Photo by Fredrick Lee on Unsplash
今年,内特·西尔弗的《FiveThirtyEight》向读者发出挑战,要求预测 NFL 比赛结果比的预测算法更好。结果呢?在 20,352 名参与的读者中,不到 2%的人胜过 FiveThirtyEight 的 Elo 算法。
我是其中之一。
我是如何在锦标赛中预测股市的
原文:https://towardsdatascience.com/how-i-predicted-the-stock-market-at-numerai-ml-tournament-6f74e1c8809e?source=collection_archive---------1-----------------------
在此之前,我的机器学习教程是无聊的故事和理论:),在这篇文章中,我将分享我在人工智能竞赛中的第一次代码体验。我在数字上尝试了我的基本机器学习技能。
Github 源代码:【https://github.com/andela-ysanni/numer.ai
根据他们比赛的网站,数字是一个预测股票市场的全球人工智能比赛。Numerai 有点类似于 Kaggle,但是数据集干净整洁;你下载数据,建立模型,然后上传你的预测。很难找到一个比赛,你可以应用你喜欢的任何方法,而不需要太多的数据清理和特征工程。在这场锦标赛中,你可以做到这一点。
哦,是的,我最初开始学过 Udacity 机器学习入门,并且有一些关于使用 scikit-learn 的监督机器学习算法的基础知识。一开始我很害怕;像我这样的新手如何参加有排行榜的在线比赛?我不在排行榜末尾的可能性有多大?总之,我不畏艰险。
本项目使用的包
Pandas 是一个用 Python 编写的包,用于数据结构和数据分析, numpy 用于创建大型多维数组和矩阵,您可以使用 pip install 命令简单地安装这些包。我们还将从 sklearn 库导入一些包,sklearn 库由简单高效的数据挖掘和数据分析工具组成,包括监督和非监督算法。
数据概述
对于这场比赛,我们有两个数据集,即我们的训练数据和测试数据。我建议你用数字加载你的数据集(默认情况下,它是 Mac OS 自带的),看看它看起来怎么样,否则,感谢微软 Excel。您还可以使用 Sublime 或 Atom 等文本编辑器来加载数据集。
我使用 panda 库方法“read_csv”将数据解析成 DataFrame 对象。read_csv 方法接受 file_path 和一些其他可选参数。
import pandas as pdtraining_data = pd.read_csv('numerai_training_data.csv')tournament_data = pd.read_csv('numerai_tournament_data.csv')
训练数据集有 22 列。第 21 列包括从特征 1 到特征 21 的特征,而最后一列是目标值;将用于训练我们的分类器的 1 或 0 值。我们大约有 96321 行。
锦标赛数据集是我们的测试集,它也有 22 列。列 1 是 t_id,它是来自我们训练数据的目标 id。剩下的 21 列是我们的特性值。
交叉验证
交叉验证主要是衡量统计模型对独立数据集的预测性能的一种方式(从 http://robjhyndman.com 检索)。.)衡量模型预测能力的一种方法是在一组未用于训练数据的数据上进行测试。数据挖掘者称之为“测试集”,用于估计的数据是“训练集”。
验证的主要目的是避免过度拟合。当机器学习算法(如分类器)不仅识别数据集中的信号,还识别噪声时,就会发生过拟合。噪声这里意味着模型对数据集的特征过于敏感,而这些特征实际上没有任何意义。过度拟合的实际结果是,对其训练数据表现良好的分类器可能对来自相同问题的新数据表现不佳,甚至可能非常差。
为了开发我们的分类器,我们使用 70%的数据将数据集分成两部分来训练算法。然后,我们对剩下的 30%进行分类,并记录这些结果。下面是我们自己的交叉验证版本:
from sklearn import cross_validationfeatures_train, features_test, labels_train, labels_test = cross_validation.train_test_split(training_data.iloc[:,0:21], training_data['target'], test_size=0.3, random_state=0)
我使用了 sklearn 的 cross_validation 方法,从训练数据中提取了 30%的测试集。让我解释一下参数:
train_test_split 获取我们的训练数据数组,该数组包括特征训练,但不包括我们的目标值,后跟我们的目标值数组。
test_size 是我们百分之三十的数据比例。
random_state 取用于随机采样的伪随机数发生器状态的整数值。
我们的交叉验证返回四个数组,其中包括 70%的 features_train 和 labels_train,剩余 30%的 features_test 和 labels_test。
分类器的实现和装配
在这个项目中,任务是二进制分类,输出变量也称为我们的目标预计是 1 或 0。我将使用 SVC(支持向量分类)作为分类器。一个支持向量机 ( SVM )是一个判别分类器形式上由一个分离超*面定义。换句话说,给定标记的训练数据(监督学习),算法输出一个分类新例子的最佳超*面。
支持向量机的优势在于:
- 在高维空间有效。
- 在维数大于样本数的情况下仍然有效。
- 在决策函数中使用训练点的子集(称为支持向量),因此它也是内存高效的。
- 通用:可以为决策函数指定不同的内核函数。提供了通用内核,但是也可以指定定制内核。
from sklearn.svm import SVC as svcclf = svc(C=1.0).fit(features_train, labels_train)
C 这里控制训练数据的误分类成本。大的 C 给你低偏差和高方差。低偏差是因为你对错误分类的代价进行了大量的惩罚,而小的 C 给了你更高的偏差和更低的方差。
。fit() 方法根据给定的训练数据来拟合 SVM 模型,即特征训练和标签训练。
做预测
下一步是使用 30%的数据集对我们训练的分类器进行预测。
predictions = clf.predict(features_test)
predict() 方法获取一个数组并对该数组执行分类。
精度
精确度是我们建立的模型的精确度的加权算术*均值。我将使用 sklearn 测量准确度分数。该方法返回给定测试数据和标签的*均准确度。
from sklearn.metrics import accuracy_scoreaccuracy = accuracy_score(predictions,labels_test)
accuracy_score()接受两个数组;我们之前做的预测和真实的目标测试数据。
这里得到的准确度分数是**0.51849391。**非常低,所以我决定将 C 的值提高到 100.0,以获得更好的分类和高方差。这实际上几乎花了很长时间(15 分钟)来运行分类,但给出的分数为 0.518133997785 ,比之前的分数略高。它仍然是低的,但是我很高兴知道它稍微高于*均水*。对新手来说够公*了:)
重大挑战
我使用的分类器非常慢,当 C=1.0 时需要大约 10 分钟,当 C=100.0 时需要 15 分钟才能获得更好的分数,如果我们的数据集大小增加两倍,这将是不可伸缩的。**为什么?**实现基于 libsvm。因此,拟合时间复杂度大于样本数量的*方,这使得难以扩展到具有超过 10000 个样本的数据集。
改进与结论
在我的下一篇文章中,我将谈论我如何微调我的分类器的参数,以及我如何切换到使用另一种算法来优化我的结果。我希望到目前为止你喜欢这个教程。欢迎在评论区发表评论和问题。再见
更新:这里是链接到最终教程。
禁食比你想象的要容易
原文:https://towardsdatascience.com/how-i-survived-fasting-for-five-days-using-one-weird-trick-8629166bf2ad?source=collection_archive---------0-----------------------
我的 5 天禁食可以减少饥饿感,提高精神集中力
如果有人说你可以用一个奇怪的技巧来减肥、提高注意力、减少对食物的渴望、延长寿命,会怎么样?如果你像我一样,你可能会想:
- 这是雅虎广告吗?
- 我才不要尝试那种禁食垃圾。
- 我喜欢食物。我为什么要放弃?
狼吞虎咽地吃下一整盒 Xtra Cheddar 金鱼来*静我的神经后,我想了想,意识到我仍然很好奇。毕竟,碧昂斯做到了?
间歇性禁食的健康益处
愉快地屈服于证实偏见,我开始在谷歌上搜索证实这些说法的严肃的研究。这里有一些潜在的好处,我发现即使是核实科学类型的人也不会完全反对。
- 防止肥胖和神经退化
- 增加寿命
- 提高认知表现
- 增强你的免疫系统
- 在食物上省钱:)
禁食有可能延缓衰老,有助于预防和治疗疾病,同时将慢性饮食干预引起的副作用降至最低。
禁食:分子机制 瓦尔特·d·隆戈和马克·p·马特森
禁食也有良好的记录。宗教和精神团体已经禁食几个世纪了。冥想和瑜伽的练习者利用禁食来提高注意力和自律。
个人对禁食的兴趣
- 癫痫症——我从 19 岁开始就患有癫痫症。在我们找到正确的药物组合后,癫痫大发作(电视节目中的身体抖动)停止了。然而,尽管尝试了不同的药物和剂量,我仍然频繁出现被称为光环的“眩晕发作”。我在哪里读到过禁食会有帮助。
- 精神专注——任何有希望让我精神振奋的事情,我都愿意尝试。还记得无限的吗?通常这相当于我在亚马逊上购买不科学的垃圾。
- 减肥——我刚刚结束为期三周的欧洲之旅。考虑到我吃了数量惊人的糕点,当我回来时,我毫不惊讶地发现自己重了几磅。我很好奇,想看看我是否能“快速启动”塑身的过程。
- 对食物的渴望——我发现自己无时无刻不在想食物,尤其是在旅行的时候。禁食似乎是一种减少食欲和减少食物依赖的合理方法。是的,我们的祖先有很好的理由去思考这个问题——食物、睡眠、击退捕食者——但今天的生活非常不同——巨无霸、懒汉、在使命召唤中击退纳粹僵尸。
结果呢
我周日晚上 9 点开始禁食,周六中午 12:30 停止。我在早上用我的 Fitbit Aria 和酮测试条进行了测量。
酮
身体通常依靠葡萄糖运转,葡萄糖来自分解碳水化合物。然而,如果你饿了,你的身体不能找到足够的葡萄糖,所以它开始分解脂肪来获取能量。酮是葡萄糖转化为脂肪的酸性副产品。
酮对追踪很重要。它们标志着你的身体从碳水化合物向脂肪的转变,如果你走得太远,它们会警告你。根据这张图,在脂肪上跑步的“好处”在 1.5-3 左右显现。空腹酮症在 4 岁开始,k 依托酸中毒(危及生命)在 9-10 岁左右开始。
体重和体脂
我怀疑禁食是一种可持续的减肥技术,但它绝对不是一个噱头。
Weight decreased 8.8 pounds
Body fat decreased .7%. BMI decreased 1.2 lbs/in².
光环(眩晕)
这是整个斋戒中最令人兴奋的发现。我通常*均每天有 3 个光环,但在禁食期间,我连续 4 天没有一个光环。更好的是,禁食后光环的数量仍然很低。
精神焦点
总的来说,我感觉更加专注和坚定。白天我的能量水*保持不变,有一次我甚至发现自己熬夜阅读重构:改进现有代码的设计,它已经在我的床头柜上积了 6 个月的灰尘。
Based on GitHub contributions, I was more productive than usual during the fast
对食物的渴望
两周后,我仍然渴望某些食物,但总的来说,我对食物的关注减少了,当我不能按时吃饭时,我也不会感到压力。就像马拉松训练让跑 5000 米变得微不足道一样,禁食 5 天的经历让不吃饭,甚至禁食一整天,看起来都像是儿戏。我怀疑我新发现的超脱将会导致与食物更健康的关系。
禁食的副作用
- 身体迟缓— 这是迄今为止最明显的副作用。3 天来,我的腿感觉不稳定,下班走回家很有趣。
- 便秘 —这么说吧,那周我在卫生纸上省了钱;)
- 对寒冷的敏感——我记得不止一次问我的同事:“伙计们,这里冷吗?还是只有我冷?”显然只有我一个人。
据我的医生说,副作用是由于我血液中的电解质失衡造成的。尽管喝了大量的盐水,我还是很快脱水并缺乏关键矿物质(钾、钠、氯)。
My doctor ordered blood work at key times during the fast.
医生提示:用盐片代替盐水,并添加镁、钾补充剂,减轻上述症状。
副作用在很大程度上是可以控制的,但是我很高兴在尝试之前和我的医生谈过。
其他观察
- 禁食 5 天出奇不差。根据我禁食一天的经验,我假设禁食 5 天的痛苦等于禁食一天的痛苦乘以 5。事实并非如此。几天后,我的身体适应了,饥饿感慢慢演变成隐隐作痛。
- **社会含义。**没想到和朋友出去不吃东西会有多尴尬。我发现自己反复向持怀疑态度的观众解释我的推理。不要指望你的朋友会支持你或给你留下深刻印象。
- 咖啡有助。所以我作弊,每天喝大约 3 杯咖啡,一半一半(每天 120 卡路里)。咖啡是一种众所周知的食欲抑制剂,我在禁食期间肯定受益于这一事实。有趣的是,这项研究建议你应该喝不含咖啡因的咖啡。
快速发布
禁食之后,我恢复了我通常的低碳水化合物饮食,并开始四处走动。大多数症状在 48 小时内消失,但是一天早上我犯了一个错误,早餐吃了 6 个鸡蛋。还好我在卫生纸上省了钱!
减肥成功了吗?
体重仍然很低,但身体脂肪又回来了,这表明我在禁食期间也减掉了肌肉和水的重量。第 12 天,我开始尝试一种生酮饮食,这可能解释了水重量持续下降的原因。
Weight decreased 9.6 pounds
Body fat decreased .14%. BMI decreased .7 lbs/in².
光环回归,但不完全
在斋戒之前,我*均每天有 3 个光环。在禁食期间,我*均获得 0.5 光环,禁食后,我*均获得 1.6 光环。我的生酮饮食可能解释了为什么酮保持在禁食前水*以上,而光环保持在禁食前水*以下。
I had a hard time getting Ketones above 1, despite my new diet
下次
那么,什么是减肥、提高性生活质量、获得超人智力的一个怪异诀窍?我会留到下一篇文章来说,但是现在这里有 3 个我用来维持 5 天禁食的简单窍门:
- 喝咖啡,最好是无咖啡因的。如果再来一次,我还会加入鸡汤,这是另一种值得期待的美味高盐饮料。
- 拥抱久坐不动的生活——犒劳自己,享受所有你渴望的与食物无关的事物。用瑜伽代替慢跑,骑优步去上班,狂看第一季奇人异事,在家工作,或者更好,翘班!
- 找一个副业——找一个令人兴奋的副业,全神贯注。在哈比神工作非常有趣,我几乎忘了吃饭..;)至少,在工作中安排一些无意义的会议,这样你就没有时间在办公桌前思考食物了。
我很快肯定会再次斋戒。也许不是连续 5 天,但每季度 3 天禁食和每两周 1 天禁食的频率似乎是合理的。敬请期待!
我如何使用深度学习解决我的第一个 Kaggle 挑战——第 1 部分
原文:https://towardsdatascience.com/how-i-tackled-my-first-kaggle-challenge-using-deep-learning-part-1-b0da29e1351b?source=collection_archive---------4-----------------------
Artificial Intelligence
在过去的几周里,我一直在参加免费且优秀的 fast.ai 在线课程,该课程从实用的角度教授深度学习。作为一名编程出身的人,我发现这是正确的方法。然而,我一直在用各种材料补充我的理论理解(我强烈推荐那些来自 CS231n 斯坦福课程的笔记)。
进入 Kaggle
Kaggle 是应用深度学习挑战的战场和训练场,我被其中一个特别吸引:州立农场分心司机检测挑战。在这项挑战中,我们得到了一组大约 20K 的驾驶员照片,这些驾驶员要么处于专注状态,要么处于分心状态(例如,拿着电话,化妆等)。).测试集由大约 80K 幅图像组成。目标是建立一个模型,该模型可以在一组 10 个类别中准确地对给定的驾驶员照片进行分类,同时最小化对数损失(即,每次分类器得到错误的预测时,惩罚分数都会按照对数顺序上升)。
我对 State Farm challenge 感兴趣,因为我目前正在开发一款由人工智能驱动的 dash cam 手机应用程序,它将使驾驶变得更加安全和丰富。KamCar 将做的一件事是检测司机的注意力分散/困倦,并提醒司机避免灾难。根据疾病预防控制中心的数据,司机分心是 20%车祸的原因,我相信,随着当前深度学习的进步和智能手机功能的增强,我们可以采取更多措施来解决这一问题。
Driver in different distracted states
在严格遵循杰瑞米·霍华德(fast.ai 联合创始人)的方法之前,我尝试了自己的愚蠢方法,但收效甚微。
第 1 步—获得正确的验证集
据我所知,对于有多少训练集应该放在验证集中没有明确的规则,所以我设计了一个在训练集和验证集之间 80/20 的划分。
当我开始应对州立农场挑战时,我只是在所有 10 个类中随机移动了 20%的图像,从训练集到验证集。但是当我对数据运行一个简单的线性模型时,训练集的损失是巨大的(超过 14),而验证集的准确性未能超过 17%。
我回到州立农场挑战赛页面,再次阅读其详细信息,并注意到以下内容:
训练和测试数据被分割在驱动程序上, 使得一个驱动程序只能出现在训练或测试集上。
有趣… 我想…既然我们根据验证集来验证(而不是训练)我们的模型,它应该表现出与测试集相似的属性,对吗?因此,解决方案是分割训练集和验证集,使得验证集中一定比例的驾驶员不在训练集中。 State Farm 方便地提供了一个 csv 文件,该文件将给定的驱动程序 id 映射到一个文件名,因此分割非常简单:
import pandas as pd
import randomdf = pd.read_csv(path + ‘/driver_imgs_list.csv’)
by_drivers = df.groupby(‘subject’)
unique_drivers = by_drivers.groups.keys()# Set validation set percentage with regards to training set
val_pct = 0.2
random.shuffle(unique_drivers)# These are the drivers we will be entirely moving to the validation set
to_val_drivers = unique_drivers[:int(len(unique_drivers) * val_pct)]
步骤 2 —从样品组开始
由于训练和验证集总计 20K 个图像,当您只是检查一些设置是否有效时,在这么大的数据量上训练模型仍然需要一点时间。
样本集只是训练集和验证集的子集:您的模型将根据样本训练集进行训练,以快速评估哪些有效,哪些无效。这样做让我节省了很多时间!我选择我的样本集是大约 20%的数据,其中图像被随机复制到样本集。
第三步——尝试准系统模型
下面的模型非常简单,事实上它根本没有卷积层:
def linear_model():
model = Sequential() # image size is 3 (RGB) x 224x224 (WidthxHeight)
model.add(BatchNormalization(axis=1, input_shape=(3, img_size_1D, img_size_1D)))
model.add(Flatten())
# here we have 10 classes
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
有趣的是,在没有卷积和正则化的情况下,它是如何在验证集上达到接* 40%的准确率的!
model = linear_model()
model.optimizer.lr = 10e-5model.fit_generator(sample_train_batches, samples_per_epoch=sample_train_batches.nb_sample, nb_epoch=3,
validation_data=sample_val_batches, nb_val_samples=sample_val_batches.nb_sample, verbose=1)Epoch 1/3
1803/1803 [==============================] - 29s - loss: 5.7358 - acc: 0.2806 - val_loss: 10.9750 - val_acc: 0.1741
Epoch 2/3
1803/1803 [==============================] - 24s - loss: 1.6279 - acc: 0.6339 - val_loss: 4.6160 - val_acc: 0.3304
Epoch 3/3
1803/1803 [==============================] - 24s - loss: 0.5111 - acc: 0.8358 - val_loss: 3.1399 - val_acc: 0.3951
显然,你可以看出它大大超出了训练集,因为在仅仅 3 次完整运行中,它就达到了超过 80%的准确率,而验证集的准确率是两倍。问题是我们的简单模型已经学会记忆大多数图像的正确权重,这使得它无法很好地概括以前从未遇到过的驾驶员图像(猜猜看,他们都在验证集中!).
第四步——在你的生活中增加一些回旋的余地
Example of a convolutional neural network — from Adit Deshpande’s blog https://adeshpande3.github.io/
好了,这才是真正有趣的地方……我创建了一个模型,用一些卷积来测试这样的架构是否会提高准确性:
def simple_convnet():
model = Sequential([
BatchNormalization(axis=1, input_shape=(3,224,224)),
Convolution2D(32,3,3, activation='relu'),
BatchNormalization(axis=1),
MaxPooling2D((3,3)),
Convolution2D(64,3,3, activation='relu'),
BatchNormalization(axis=1),
MaxPooling2D((3,3)),
Flatten(),
Dense(200, activation='relu'),
BatchNormalization(),
Dense(10, activation='softmax')
])model.compile(Adam(lr=1e-5), loss='categorical_crossentropy', metrics=['accuracy'])
return model
令人惊讶的是(至少对我来说),该模型在验证集上表现很差,但在训练集上很快达到了 100%的准确率:
Epoch 1/3
1803/1803 [==============================] - 34s - loss: 1.2825 - acc: 0.6184 - val_loss: 2.0999 - val_acc: 0.2612
Epoch 2/3
1803/1803 [==============================] - 25s - loss: 0.2360 - acc: 0.9590 - val_loss: 2.2691 - val_acc: 0.2098
Epoch 3/3
1803/1803 [==============================] - 26s - loss: 0.0809 - acc: 0.9939 - val_loss: 2.4817 - val_acc: 0.1808
Epoch 1/3
1803/1803 [==============================] - 30s - loss: 0.0289 - acc: 0.9994 - val_loss: 2.6927 - val_acc: 0.1585
Epoch 2/3
1803/1803 [==============================] - 29s - loss: 0.0160 - acc: 1.0000 - val_loss: 2.7905 - val_acc: 0.1540
Epoch 3/3
1803/1803 [==============================] - 26s - loss: 0.0128 - acc: 1.0000 - val_loss: 2.7741 - val_acc: 0.1562
第五步——有意愿,就有增加
数据扩充使我们能够对图像进行随机修改,以降低模型记忆特定图像权重的能力。一些类型的增强包括旋转、宽度/高度移动、剪切和 RGB 通道移动。我尝试了一系列参数,并确定了以下最佳结果:
gen_all = image.ImageDataGenerator(rotation_range=15, height_shift_range=0.05, shear_range=0.15, channel_shift_range=10, width_shift_range=0.1)
经过多次运行,我设法在验证集上实现了 60%的准确率,这对于接下来的事情来说是非常令人鼓舞的:
Epoch 13/15
1803/1803 [==============================] - 26s - loss: 0.4834 - acc: 0.8697 - val_loss: 1.4806 - val_acc: 0.5625
Epoch 14/15
1803/1803 [==============================] - 26s - loss: 0.4944 - acc: 0.8658 - val_loss: 1.4361 - val_acc: 0.5759
Epoch 15/15
1803/1803 [==============================] - 27s - loss: 0.4959 - acc: 0.8597 - val_loss: 1.3884 - val_acc: 0.6004
对于这样一个简单的模型来说还不错,你同意吗?
Not bad at all, according to Michelle Obama
我正在进行这个系列的第 2 部分,在那里我们将使用完整的数据集,并通过利用已经预先训练好的 VGG 网模型来执行迁移学习。代码也将很快出现在我的 github 上。
敬请期待,喜欢就分享,不要犹豫留下评论:)。
我是建筑KamCar,AI 驱动的 dash cam app,让驾驶更安全、更丰富的体验。如果你是一名移动开发者,想要开发一些令人兴奋的技术和产品,或者只是想提供一些建议,请在Twitter或这里联系我:)
第 2 部分——我如何使用深度学习解决我的第一个 Kaggle 挑战
原文:https://towardsdatascience.com/how-i-tackled-my-first-kaggle-challenge-using-deep-learning-part-2-1dfeb413c54d?source=collection_archive---------4-----------------------
这是我如何在 Kaggle 上擒下 国营农场分心司机检测挑战赛 的第二部分。这里的许多工作都是基于杰瑞米·霍华德和雷切尔·托马斯教授的优秀的fast . ai课程的课程和教程。
我对这个挑战特别感兴趣,因为我目前正在开发KamCar,这是一款人工智能驱动的 dash cam 移动应用程序,旨在让驾驶变得更加安全和丰富。你可以在这里 阅读一下 Part-1 。
Driver talking on the phone while driving
在对样本训练集应用了一些扩充并在验证集上达到 50%的准确度之后(即步骤 5),我们停止了第一部分-1。现在,我们正以更大的数据集作为盟友,开始我们深度学习冒险的剩余部分。
步骤 6-邀请整个数据集
在对样本集进行实验时,我也逐渐明白,如果不在更丰富的数据集上训练模型,大幅提高准确性将更具挑战性。因此,加载整个训练集和验证集并针对前者训练模型是很自然的。
第七步——减轻一些重量
我计划使用第一部分中使用的同样小的 CNN,但这次我引入了 Dropout ,它基本上使我们能够在我们的密集层中“放下”重量。我使用 Dropout,因为它迫使网络忘记它在训练集上计算的一些特征,从而减少模型对训练数据的过度拟合。如果没有退出,我们的模型将开发的特性可能不够通用,不能很好地处理新数据(即验证或测试集)。
def conv_model_with_dropout():
model = Sequential([
BatchNormalization(axis=1, input_shape=(3,img_size_1D,img_size_1D)),
Convolution2D(64,3,3, activation='relu'),
BatchNormalization(axis=1),
MaxPooling2D(),
Convolution2D(128,3,3, activation='relu'),
BatchNormalization(axis=1),
MaxPooling2D(),
Convolution2D(256,3,3, activation='relu'),
BatchNormalization(axis=1),
MaxPooling2D(),
Flatten(),
Dense(200, activation='relu'),
BatchNormalization(),
Dropout(0.5),
Dense(200, activation='relu'),
BatchNormalization(),
# Using a simple dropout of 50%
Dropout(0.5),
Dense(num_classes, activation='softmax')
])
model.compile(Adam(lr=1e-5), loss='categorical_crossentropy', metrics=['accuracy'])
return model
经过几次运行后,性能在验证集上徘徊在 60%-62%左右,没有取得太大进展:
Epoch 1/10
17990/17990 [==============================] - 521s - loss: 0.7413 - acc: 0.7560 - val_loss: 1.3689 - val_acc: 0.6087
Epoch 2/10
17990/17990 [==============================] - 520s - loss: 0.7123 - acc: 0.7665 - val_loss: 1.3105 - val_acc: 0.6238
Epoch 3/10
17990/17990 [==============================] - 520s - loss: 0.6663 - acc: 0.7815 - val_loss: 1.2932 - val_acc: 0.6283
Epoch 4/10
17990/17990 [==============================] - 520s - loss: 0.6253 - acc: 0.7973 - val_loss: 1.2504 - val_acc: 0.6245
是时候转向更强大的东西了!
第八步——不要逞英雄:让迁移学习拯救你
正如你所看到的,我之前创建的所有模型都很简单,不太深入。我当然可以创建一个更深层次的架构,但很可能需要在一个大规模数据集(比我目前拥有的大得多)上训练它很长时间,才能显著提高准确性。另外,我也负担不起两周的培训费用。
幸运的是,许多令人敬畏的研究人员通过在数百万张图像上训练深度学习模型,保存了他们模型的最终权重,并使他们的结果可用,从而使我们的生活变得更容易。该领域最活跃的研究人员之一 Andrej Karpathy 建议使用现有的技术,而不是在他的 CS231N 课程中重新发明一个昂贵的轮子:
**“不要逞英雄”:**你应该看看 ImageNet 上目前最有效的架构,下载一个预训练模型,并根据你的数据对其进行微调,而不是推出自己的架构来解决问题。您很少需要从头开始训练或设计一个 ConvNet。
采用一个已经预先训练好的模型并用我们自己的训练数据对其进行微调被称为迁移学习。对于这个挑战,我将使用一个预先训练好的 VGG 网络,它赢得了 ImageNet ILSVRC-2014 竞赛。
VGG Architecture — From Toronto University
第八步——保持这些卷积层紧密相连
提醒一下,以下是我决定使用预先培训过的 VGG 网络的一些原因:
- 我们只有很少的训练数据,因此无法生成一个容易通用的模型
- VGG 已经接受了数百万张图片的训练
- 从 VGG 的卷积层中提取的特征应该足够通用,可以应用于人类的图像
- VGG 比我上面的临时神经网络有更多的卷积层,我的假设是我们将获得更高的精度
神经网络最重要的组成部分是它的卷积层(马修·泽勒和罗布·弗格斯在论文可视化和理解卷积网络中写道),它学习如何识别初始层中的边缘等基本特征,以及上层中更复杂的特征。
Visualisaion of early layers of a CNN — from Karpathy’s blog
因此,我们需要从预训练的 VGG 网络中提取卷积层,因为我们稍后将创建自己的密集层:
# This will import the full gcc model along with its weights
vgg = Vgg16()
model = vgg.model# identify the convolutional layers
last_conv_idx = [i for i,l in enumerate(model.layers) if type(l) is Convolution2D][-1]
conv_layers = model.layers[:last_conv_idx + 1]# Make sure those convolutional layers' weights remain fixed. We are purely using them for prediction, not training.
for layer in conv_layers: layer.trainable = False# Create a model now out of the convolutional layers
conv_model = Sequential(conv_layers)
步骤 9-预先计算卷积特征
请记住,根据 VGG 架构图,最后一个卷积层产生的输出尺寸为 512 x 14 x 14:这正是我们上面的纯卷积模型要做的。接下来需要的是在仅卷积模型上预计算我们的训练、验证和测试特征,然后在密集模型中使用它们。换句话说,我们使用仅卷积模型的输出作为仅稠密模型的输入。
# batches shuffle must be set to False when pre-computing features
train_batches = load_in_batches(train_dir, shuffle=False, batch_size=img_batch_size)# Running predictions on the conv_model only
conv_train_feat = conv_model.predict_generator(train_batches, train_batches.N)
conv_val_feat = conv_model.predict_generator(val_batches, val_batches.N)# Predict feature probabilities on test set
test_batches = load_in_batches(test_dir, shuffle=False, batch_size=img_batch_size)
conv_test_feat = conv_model.predict_generator(test_batches, test_batches.N)
我们加载我们的图像,同时确保洗牌标志设置为假,否则我们的输入特征和标签将不再匹配。
步骤 10-制作你自己的致密层
回想一下,VGG 网络产生包含 1000 个类的输出。这是因为训练它的 ImageNet 竞赛要求将图像分成 1000 个不同的类别。但是在这个 Kaggle 挑战中,我们只处理 10 个类,因此原始的 VGG 密集层不足以解决我们试图解决的问题。
因此,我们需要创建一个合适的密集层架构,该架构将使用 SoftMax 作为最后一个密集层的激活函数,最终产生我们期望的类数量的预测。此外,请记住,我们使用仅卷积模型的输出作为我们定制的密集模型的输入。我们还在这一阶段引入了辍学,以防止在训练集上过度适应。
def get_dense_layers(dropout_rate = 0.5, dense_layer_size = 256):
return [
# Here input to MaxPooling is the output of the last convolution layer (without image count): 512 x 14 x 14
MaxPooling2D(input_shape=conv_layers[-1].output_shape[1:]),
Flatten(),
Dropout(dropout_rate),
Dense(dense_layer_size, activation='relu'),
BatchNormalization(),
Dropout(dropout_rate),
Dense(dense_layer_size, activation='relu'),
BatchNormalization(),
Dropout(dropout_rate),
# num_classes is set to 10
Dense(num_classes, activation='softmax')
]
我们现在可以使用来自步骤 9 的仅卷积模型的预先计算的特征来训练我们的密集模型:
d_rate = 0.6
dense_model = Sequential(get_dense_layers(dropout_rate = d_rate))
# We will use a more aggressive learning rate right off the bat, as our model has been pre-trained
dense_model.compile(Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])# See how we call fit and not fit_generator, as our array of features has already been pre-computed
dense_model.fit(conv_train_feat, trn_labels, batch_size=img_batch_size, nb_epoch=3,
validation_data=(conv_val_feat, val_labels), verbose=1)
这使我们能够达到大约 70%的验证准确率
Train on 17990 samples, validate on 4434 samples
Epoch 1/3
17990/17990 [==============================] - 9s - loss: 0.9238 - acc: 0.7178 - val_loss: 1.0323 - val_acc: 0.6340
Epoch 2/3
17990/17990 [==============================] - 9s - loss: 0.1435 - acc: 0.9565 - val_loss: 0.8463 - val_acc: 0.7352
Epoch 3/3
17990/17990 [==============================] - 9s - loss: 0.0802 - acc: 0.9748 - val_loss: 0.9537 - val_acc: 0.7082
Doctor House’s nod of approval
虽然与我开始时相比,这是一个显著的改进,但我们实际上可以做得更好:我还没有将数据增强引入这场战斗,也没有使用一些无人监管的技术和其他技巧,我将在第 3 部分中介绍这些技巧。这将是一个非常激动人心的部分,所以不要错过!
敬请期待,喜欢就分享,不要犹豫留下评论:)。
我是建筑 KamCa r,AI 驱动的 dash cam 应用程序,让驾驶变得更安全、更丰富。如果你是一名移动开发者,想要开发一些激动人心的技术和产品,或者只是想提供一些建议,请在Twitter或这里联系我!
我如何在非 Rails 环境中测试 Ruby APIs
原文:https://towardsdatascience.com/how-i-test-ruby-apis-in-a-non-rails-environment-718aba24b189?source=collection_archive---------1-----------------------
我用 Ruby 编程已经快 5 年了,但是(喘气)不要用 Ruby on Rails 。尽管 Sinatra 是一个很好的框架,但它可能是 Rails 拥有 Ruby 社区 90%以上的份额之后才想到的。在 Rails 之外让一个 gem 工作并被很好地记录下来,几乎就像在苏联得到一双 Levi's。也就是说,通过一点点尝试和错误,你可以准备好任何宝石生产。
有时候,让一个专注于 rails 的 gem 在 Rails 之外工作需要更长的时间。例如,我的团队在弄清楚如何让 ActiveRecord 与多种模式一起工作之前,使用了将*一年的数据映射器。ActiveRecord 是 Rails 核心的一部分,除了自动重新连接失败之外,我们很喜欢它。我们的测试也有类似的问题,这导致我们放弃了测试覆盖率。直到我们的暑期实习生 Parker McGowan 整个夏天都在这个项目上,我们才最终得到了一个好的 Sinatra 测试套件。它看起来是这样的:
我们如何运行我们的测试
我们的团队使用非常传统的 web 开发设置。我们选择在前端(Angular)和后端(Ruby)之间进行硬分离。我们使用 Sinatra 框架运行微服务(小型 REST APIs ),并将数据存储在 MySQL 中。我们偶尔会用 Redis,Beanstalk 进行排队,联系 Twitter 之类的公共 API。为了测试,我们选择了 MiniTest 而不是 Rspec,因为很像 Tenderlove ,我们更喜欢它的语法。它使用普通的老 ruby 代替 DSL,库现在在 core Ruby 中。
我们使用 SQLite 作为我们的测试数据库。不要使用 MySQL,因为您的测试会在每次运行时清除您的本地数据库。我们的数据库也遇到了一个有趣的问题。我的团队使用 SQL 已经有 10-15 年了,所以我们更喜欢手工创建表,而不是使用迁移来构建表。它给了我们更多的控制,但是超出了 Rails 的约定,使得用 ActiveRecord 测试变得很痛苦。我们手工创建我们的表,然后使用独立迁移 gem 来生成迁移,然后我们可以使用它来动态生成我们的数据库以供测试。
注意:如果您使用独立迁移,您将使用 。standalone _ migrations文件而不是 Rakefile。看起来是这样的:
# .standalone_migrationsconfig:
database: config/development.yml
db:
schema: test/db/schema.rb
我们用bundle exec rake test
从命令行运行我们的测试
我们的每个测试都需要测试助手文件:
# /test/helper.rb**# Setup our test environment**
ENV[‘RACK_ENV’] = ‘test’
require ‘minitest/autorun’
require ‘mocha/mini_test’
require ‘rack/test’**# Include our application**
$LOAD_PATH.unshift ‘lib’
$LOAD_PATH.unshift ‘routes’
require File.expand_path ‘../../app.rb’, __FILE__ **# Sinatra App****# Setup database (and tear it down afterwards)**
test_db = SQLite3::Database.new(‘test/db/test.db’)Minitest.after_run do
test_db.close
File.delete(‘test/db/test.db’)
endActiveRecord::Base.establish_connection adapter: ‘sqlite3’, database: ‘test/db/test.db’
load ‘test/db/schema.rb’
这设置了我们的测试环境,包括我们的测试框架(rack 和 minitest)和 mocha 我们的模拟库。然后,在启动数据库和运行迁移之前,我们包括我们的应用程序特定的文件。由于 ActiveRecord 连接的运行方式,我们只运行一次迁移来构建我们的结构。为了保持测试的整洁,我们在每次测试后都清除数据库(截断表而不是删除它)。
试验
我们的自动化测试分为两类: 单元 和 集成 。我为库和助手编写单元测试,为路由编写集成测试。单元测试范围很小,但是很全面。他们也跑得非常快。集成测试可以覆盖很多动作,有时会测试多个 API 调用。状态被大量修改,所以从一个干净的石板开始每个单独的测试是必要的。此外,您必须假设集成测试中的单元正在工作。稍后我们将讨论当我们测试特定于业务的代码时,如何使用模拟来忽略经过良好测试的库。
自动化测试基于一个简单的度量: 断言 。你要么通过你的断言,要么失败。尽管有大量的断言(和反驳)可用,我倾向于只使用这些:
**assert** # is it truthy?**assert_nil** # is it nil?**assert_equal** # do the 2 parameters match?**assert_match** # test string against a pattern
单元测试
那么应该如何选择用单元测试测试什么,用集成测试测试什么呢?我建议为副作用少、代码使用频繁的库编写单元测试。我认为为您的数据库模型编写它们是很忙的,因为您的 ORM 应该经过良好的测试。对于包装类(例如,包装对另一个 API 的调用的方法),我也会忽略它们。话又说回来,我倾向于只写集成测试,除非一个库几乎没有副作用(错误不太可能发生在那些方法中看不到的代码中)并且经常被使用:
- 人物计数器——我的公司为社交媒体编写工具。我们必须在用户发送/安排消息之前验证文本的长度。
- Url shorter 的哈希生成器 —我们运行自己定制的 Url shorter。一个常见的函数是将整数(数据库表 ID)转换为 base 62 字符串,反之亦然。
以下是 Url Shortener 的一些测试:
require ‘./test/test_helper’class BaseConversionTest < MiniTest::Testdef setup
[@logger](http://twitter.com/logger) = Logger.new(STDOUT)
end# Encodedef test_convert_b10_to_b62_zero
assert_equal(‘0’, Leadify::LinkShortener::Math.to_base(0, base=62))
enddef test_convert_b10_to_b62_one_digit
assert_equal(‘5’, Leadify::LinkShortener::Math.to_base(5, base=62))
enddef test_convert_b10_to_b62_two_digit
assert_equal(‘A’, Leadify::LinkShortener::Math.to_base(36, base=62))
enddef test_convert_b10_to_b62_two_digit_b62
assert_equal(‘10’, Leadify::LinkShortener::Math.to_base(62, base=62))
enddef test_convert_b10_to_b62_two_char_b62
assert_equal(‘1A’, Leadify::LinkShortener::Math.to_base(98, base=62))
enddef test_convert_b10_to_b62_max_two_char_b62
assert_equal(‘ZZ’, Leadify::LinkShortener::Math.to_base(3_843, base=62))
end# ...
如你所见,这变得非常乏味。代码覆盖率不够。您必须涵盖代码中可能遇到的所有变化。我们测试 0、5、36、62、98 和 3843。这给了我们一组广泛的数据,让我们可以专注于失败。我们知道,如果我们在新的基本系统中处理一位数、两位数、带进位的两位数,等等。
在为函数编写了这样的测试之后,我们仍然有可能错过一些东西。由于我们有编码和解码功能,我们可以使用我们的代码来测试自己。我们可以做一个蒙特卡罗模拟,并使用函数x = decode(encode(x))
测试一组随机输入。
# Reversibility Sampler
def test_monte_carlo_b10_to_b62_to_b10
1000.times do |i|
seed = rand(1_073_741_823) # Max 32 bit Fixnum
b62 = Leadify::LinkShortener::Math.to_base(seed, base=62)
assert_equal(seed, Leadify::LinkShortener::Math.from_base(b62, base=62))
end
end
但即使这样也不能囊括一切。你的编码器和解码器都可能损坏,但损坏的方式通过了x = decode(encode(x))
测试。你的单元测试应该是健壮的,但是你不能抓住所有的东西。只要尽可能多的测试,当你看到一个失败时,添加一个测试。一旦你修改了你的代码,你就可以解决这个问题了。
如果你想看一套好的单元测试,看看热门 库。您还可以使用它们来理解文档记录不良的特性,或者找到有用的未记录的方法。通过阅读其他人的代码,你也可以学习编码风格。
集成测试
如果单元测试是树,那么集成测试就是森林。我们不再测试小而独特的组件。在我们的 Sinatra 集成测试中,我们通常测试单个 API 调用,然后测试一系列 API 调用。
创建、读取、更新、删除(CRUD) 路由大量使用我们的永久数据存储,我们使用 ActiveRecord 来访问它。正如我前面提到的,我们在生产中使用 MySQL,在测试中使用 sqlite。除了删除之外,我们所有的路由都返回 JSON 数据。因此,我们可以通过返回的 http 状态代码和输出 JSON 来验证 API 调用的正确性。这里有一个例子:
**def test_post_messages_with_message**
post '/messages', text: '[@ash_ketchum_all](http://twitter.com/ash_ketchum_all), check out this pikachu I found digging through the dumpster behind the #Pokestop!'
assert last_response.ok? response = Oj.load(last_response.body)
assert(response.key?('message'))
message = response['message']
assert_equal '[@ash_ketchum_all](http://twitter.com/ash_ketchum_all), check out this pikachu I found digging through the dumpster behind the #Pokestop!', message['text']
**end**
由于有了 Rack::Test 库,我们可以进行这些 CRUD 调用。它提供了 http 方法,get
、post
、put
、patch
和delete
。您可以用一种非常简单的方式来调用它们:
<http method> <route name>, <parameters>, <headers># Examples
get '/messages'
post '/messages', text: "Gotta catch 'em all"
post '/shares', { facebook_post_id: '1337' }, 'rack.session' => { visit_id: 1 }
这些 Rack::Test 方法允许我们导航我们的 API,MiniTest 允许我们断言应用程序的状态是我们所期望的。
我们的 CRUD 路线整合测试涵盖以下模式:
1)验证
路由是否按照我们期望的方式处理不存在或无效的参数?每次验证失败时,它应该停止执行并返回一个错误代码,有时还会返回一条错误消息(例如,“name 是必填字段”)。
2)输出
首先,我们检查 http 状态是成功还是失败。如果它失败了,我们可以就此打住,我们必须找出它出错的原因。
接下来,我们检查 JSON 输出是什么。它是否返回了一个格式正确的对象?数据是我们预期的吗?如果我们有问题,具体是哪里的问题?
3)持久数据
当我们发布、上传或删除数据时,我们希望修改我们的数据。我们可以验证我们的 API 调用返回了正确的输出,但这并不意味着我们的应用程序永久地存储了数据。因为我们使用 ActiveRecord,所以我们可以在测试和生产中使用完全不同的数据库引擎。由于 ActiveRecord 经过了很好的测试,我们简单地假设,如果它在测试中有效,它将在生产中有效。为了验证永久存储中的数据是否被修改,我们只需要在 API 调用后检查我们的数据存储。
4)业务逻辑
API 中总是会有业务逻辑。如果它很小并且容易测试,那么我们可以把它移到库中,为它编写单元测试。那是首选。但是隔离这种行为通常很困难或者很费时间。对于这些情况,我们可以使用集成测试。例如,我们在新用户的注册过程中使用了大量的业务逻辑。我们首先创建一个登录名和一个帐户,然后为用户创建一个订阅,并将其连接到他们的 Stripe 订阅。然后,我们的一些用户在完成注册过程并登录我们的 web 应用程序之前授权他们的 twitter 帐户。
由于我们依赖于一些外部依赖(Stripe 和 Twitter),我们不能通过在测试模式下调用我们的 API 来模拟这一点。我们必须启动一个真正的网络浏览器,通过模拟用户界面上的点击来进行端到端的测试。我们的 UI 超出了 API 测试的范围。此外,我们将依赖这些网站的可用性和速度。出于这些原因,模拟您的数据和模拟您的外部依赖性要好得多。
嘲弄
当我说 mocks 时,我实际上是指 stubs 。实际上,您可能会听到 Mock 既用于 Mock 又用于 stubs。FWIW,我们用摩卡(懂了吗?)宝石写我们的存根。存根通常用于覆盖类方法。他们的名字来源于他们的长相。下面是一个覆盖 Stripe 类方法的模拟示例:
**# Mock for a class method**
Stripe::Plan.stubs(:create).returns(
stripe_uuid: 'vindaloo',
name: 'Red Dwarf',
subtitle: 'Spaceship',
statement_descriptor: 'EDGETHEORY SB VIP',
amount: 9999,
currency: 'usd',
interval: 'month',
interval_count: 1,
is_active: false
)
模拟实例方法需要更多技巧。您必须首先创建一个模拟对象,然后用一个存根来扩展该模拟对象。下面是一个示例存根,它覆盖了他们的计划类的条带实例上的删除方法:
**# Mock for an instance method**
object = mock('object')
Stripe::Plan.stubs(:retrieve).returns(object)
object.stubs(:delete).returns(true)
这些模拟允许我们消除外部 api 的不可预测性和缓慢性。我们在 MiniTest 应用程序的 setup 块中运行这两个代码片段,这样当我们创建或删除一个计划时,我们可以得到一个可预测的结果。当我们创建一个计划时,我们总是返回相同的散列,我们也可以干净地删除一个。
例子
我在下面包含了一个完整的集成测试的例子,所以你可以看到一些相关的样板文件。我们包含了测试助手,并且必须使用 app 方法,这样 Rack::Test 就可以访问我们的 Sinatra app 并调用我们的内部 API routes。我还有设置(在测试用例运行之前)和拆卸(在测试用例完成之后)的方法。
require File.expand_path '../helper.rb', __FILE__class ShareTest < MiniTest::Test
include Rack::Test::Methodsdef app
EdgeTheory::Loyalty::ApplicationController # Require our Sinatra app
end**# Called before each individual test case is run**
def setup
@account = EdgeTheory::DB::Loyalty::Account.create!(name: 'Your Cash Now', key: 'yourcashnow', is_active: true)
@style = EdgeTheory::DB::Loyalty::Style.create!(
account_id: [@account](http://twitter.com/account).id,
logo: '[http://rs278.pbsrc.com/albums/kk110/joker8851/PIKACHU.jpg~c200'](http://rs278.pbsrc.com/albums/kk110/joker8851/PIKACHU.jpg~c200')
)
@promotion = EdgeTheory::DB::Loyalty::Promotion.create!(account_id: @account.id)@reward = EdgeTheory::DB::Loyalty::Reward.create!(reward_type: 'instant',
name: 'Your Cash Now',
title: 'Fast cash, Money Now.',
instruction: 'Give us your social security number?')
[@promotion](http://twitter.com/promotion).instant_reward_id = [@reward](http://twitter.com/reward).id
[@promotion](http://twitter.com/promotion).save
[@message](http://twitter.com/message) = EdgeTheory::DB::Loyalty::Message.create!(account_id: [@account](http://twitter.com/account).id, text: 'They gave me money')[@visit](http://twitter.com/visit) = EdgeTheory::DB::Loyalty::Visit.create!(promotion_id: [@promotion](http://twitter.com/promotion).id)
end**# Called after each individual test case is completed**
def teardown
ActiveRecord::Base.connection.tables.each do |table|
ActiveRecord::Base.connection.execute("DELETE FROM #{table}")
ActiveRecord::Base.connection.execute("DELETE FROM sqlite_sequence where name='#{table}'")
end
ActiveRecord::Base.connection.execute('VACUUM')
enddef test_requires_visit
err = assert_raises(EdgeTheory::Loyalty::SessionError) { post '/shares' }
assert_match('Session has no visit_id', err.message)
enddef test_share
post '/shares', {}, 'rack.session' => { visit_id: [@visit](http://twitter.com/visit).id }
assert last_response.ok?
enddef test_create_share
post '/shares', {}, 'rack.session' => { visit_id: [@visit](http://twitter.com/visit).id }
assert last_response.ok?shares = EdgeTheory::DB::Loyalty::Share.all
assert_equal(1, shares.length)
assert_equal(1, shares[0].id)
assert_equal(1, shares[0].visit_id)
enddef test_create_share_with_facebook_post_id
post '/shares', { facebook_post_id: '1337' }, 'rack.session' => { visit_id: [@visit](http://twitter.com/visit).id }
assert last_response.ok?shares = EdgeTheory::DB::Loyalty::Share.all
assert_equal('1337', shares[0].facebook_post_id)
enddef test_create_share_with_message
post '/shares', { message_id: 1 }, 'rack.session' => { visit_id: [@visit](http://twitter.com/visit).id }
assert last_response.ok?shares = EdgeTheory::DB::Loyalty::Share.all
assert_equal(1, shares[0].message_id)
enddef test_create_share_with_invalid_message
post '/shares', { message_id: 1_337 }, 'rack.session' => { visit_id: [@visit](http://twitter.com/visit).id }
assert last_response.ok?shares = EdgeTheory::DB::Loyalty::Share.all
assert_equal(1, shares.length)
assert_equal(1, shares[0].id)
assert_equal(1_337, shares[0].message_id)
enddef test_create_share_with_message_and_facebook_post_id
post '/shares', { message_id: 1, facebook_post_id: '1337' }, 'rack.session' => { visit_id: [@visit](http://twitter.com/visit).id }
assert last_response.ok?shares = EdgeTheory::DB::Loyalty::Share.all
assert_equal(1, shares[0].message_id)
assert_equal('1337', shares[0].facebook_post_id)
end
end
进一步阅读
我希望你觉得这很有用。我不想写一个正式的教程,而是想把几个月的学习成果传递给大家,我绞尽脑汁,直到最终在 Ruby 中完成测试。
[## 隔离测试 active record-Iain . nl
不加载 Rails 测试 ActiveRecord 并不困难。让我告诉你如何开始。
www.iain.nl](http://www.iain.nl/testing-activerecord-in-isolation) [## 马特·西尔斯|迷你测试快速参考
给出了所有 MiniTest 断言的示例
www.mattsears.com](http://www.mattsears.com/articles/2011/12/10/minitest-quick-reference/) [## 使用 Rack 测试 Sinatra::Test
以下各节中的所有示例都假定正在使用,以尽可能做到通用。请参见…
www.sinatrarb.com](http://www.sinatrarb.com/testing.html) [## 模仿不是树桩
几年前,我在极限编程(XP)社区第一次接触到“模拟对象”这个术语。从那以后我就…
martinfowler.com](https://martinfowler.com/articles/mocksArentStubs.html)
我如何在 20 分钟内训练一个语言检测人工智能,准确率达到 97%
原文:https://towardsdatascience.com/how-i-trained-a-language-detection-ai-in-20-minutes-with-a-97-accuracy-fdeca0fb7724?source=collection_archive---------3-----------------------
Weird — I actually kind of look like that guy
这个故事一步一步地指导我如何在 20 分钟内使用机器学习建立一个语言检测模型(最终准确率为 97%)。
语言检测是机器学习的一个很好的用例,更具体地说,是文本分类。给定来自电子邮件、新闻文章、语音到文本功能的输出或任何其他地方的一些文本,语言检测模型将告诉您它是什么语言。
这是快速对信息进行分类和排序,以及应用特定于语言的工作流的附加层的好方法。例如,如果您想对 Word 文档应用拼写检查,您首先必须为正在使用的词典选择正确的语言。否则你会发现拼写检查是完全错误的。
其他用例可能包括将电子邮件路由到地理位置正确的客户服务部门,对视频应用正确的字幕或隐藏式字幕,或者对正在分析的文本应用一些其他语言特定的文本分类。
好了,你明白了,语言检测真的很有用,让我们继续我是如何这么快做到的。
我从这个数据集开始。https://cloud.google.com/prediction/docs/language_id.txt
它基本上是一个. csv 格式的文件,带有英语、法语和西班牙语的样本。我的目标是看看我是否可以训练一个机器学习模型来理解这些语言之间的差异,然后,给定一些新文本,预测它是哪种语言。
所以我做的第一件事是启动分类框,一个运行在 Docker 容器中的机器学习模型生成器,有一个简单的 API。这用了不到一分钟。
The output of the terminal
然后我下载了这个方便的工具,它可以让你在电脑上用文本文件训练分类框变得非常容易。这又花了一分钟左右。
下一步是将 CSV 转换成文本文件,这样我就可以很容易地训练 Classificationbox。
一个合格的开发人员会跳过这一步,直接解析 CSV 文件并从那里对 Classificationbox 进行 API 调用。
这里是我写的一些不太好的 Go 代码,以防你感兴趣,如果不感兴趣,请跳到下一步。
运行这个脚本后,我的硬盘上有了以不同语言命名的文件夹。每个文件夹里都有语言样本的文本文件。我花了大约 10 分钟编写脚本并运行它。
现在有趣的部分来了。我确保分类框已经启动并运行,然后我在语言文件夹的父目录上运行textclass
。大约花了 3 秒钟:
- 处理所有样本
- 将 20%的样本分成一个验证集
- 用训练集训练分类框
- 使用验证集进行验证
这些是我的结果:
97% !对于只花 20 分钟训练语言检测机器学习模型来说,这已经很不错了。
需要注意的一件重要事情是,我的班级并不是*衡的。我对每一个类都有不同数量的样本,这不符合训练模型的最佳实践。理想情况下,我会在每节课中有相同数量的例子。
关键是,机器学习最受益于实验。我强烈鼓励每个人尝试使用机器盒或任何其他工具。我希望我能够展示给定一个好的数据集,创建自己的机器学习/分类模型是多么容易。
什么是机器盒子?
Machine Box 将最先进的机器学习功能放入 Docker 容器中,这样像您这样的开发人员就可以轻松地将自然语言处理、面部检测、对象识别等融入其中。到您自己的应用程序中。
盒子是为扩展而建造的,所以当你的应用真正起飞时,只需水*地添加更多的盒子,直到无限甚至更远。哦,它比任何云服务都要便宜得多(而且可能更好)……而且你的数据不会离开你的基础设施。
我如何训练一个人工智能在一小时内发现讽刺
原文:https://towardsdatascience.com/how-i-trained-an-ai-to-detect-satire-in-under-an-hour-2b8b300ea805?source=collection_archive---------5-----------------------
source: https://www.theonion.com/nasa-announces-plans-to-place-giant-pair-of-shades-on-s-1825413851
我决定给自己一个挑战,看看我能否教会一个机器学习模型在不到一个小时的时间内检测洋葱文章(和其他讽刺文章)和真实新闻文章之间的差异。这些是我的结果:
解决这个问题的第一步是收集训练数据。这是迄今为止最困难的部分。有很多方法可以实现这一点。一种方法是尝试抓取网站。如果你正在寻找合适的工具,你当然可以尝试“https://scrapy.org/或https://scrapinghub.com/open-source,或者简单地构建你自己的工具(如果你愿意的话)。
我不太擅长计算机,不知道如何抓取网站,所以我决定手动收集数据(畏缩)。**这个过程占用了大半个小时。**我访问了www.theonion.com,开始将文章内容复制粘贴到单独的文本文件中,我简单地按顺序命名为(“0.txt”、“1.txt”等……)。我把这些文本文件保存在一个名为“讽刺”的文件夹里。(前 10 个之后,我开始用 Command-C 变得非常快,打开一个新的文本编辑窗口,Command-V sequence。)
我当然不建议手动这么做。做一个比我更好的程序员,做适当的网页抓取。
Screenshot of my Finder
一旦我有了大约 300 篇洋葱文章,我就转向路透社和美联社,作为非讽刺新闻的来源。我开始手动将这些文章复制粘贴到文本文件中,并保存到一个新文件夹中,我称之为“notsatire”。
再说一次,一开始进展很慢,但是一旦我掌握了窍门,事情就变快了。在这一点上,我做了大约 45 分钟,已经非常累了。我决定每个类 300 个就足够了,看看我是否可以训练一个分类器来检测两者之间的差异。
Classificationbox
自然,我的计划是使用分类框,因为它使得构建和部署分类器变得极其容易。而且,为了让事情变得更简单,我很快从 GitHub 克隆了 Mat Ryer 的便利的 textclass
工具,这样我就可以直接从我的计算机上的文件中运行这个小东西(而不是试图用正文中的文本构建 API 查询)。
首先,我启动了分类箱。
然后,我发出了这个命令:
go run main.go -teachratio 0.8 -src ./testdata/fakenews/
坐下来看结果出来。
Terminal view of imgclass running
大约 1 秒钟,分类框就训练好了!然后又花了 2 或 3 秒钟来确定,然后进行验证。
结果显示准确率为 83%。这告诉我,很有可能建立一个分类器来检测讽刺和真实新闻之间的差异,我可能只需要添加更多的例子来增加准确性。
为了确保万无一失,我花了 5 分钟时间,每篇文章又增加了 20 篇,然后重新进行测试。这次我考了 86 分。
这表明,在没有大量训练数据的情况下,你可以开始构建一个机器学习驱动的分类器。甚至像检测讽刺或真实新闻这样复杂的事情也能在一个小时内完成!
我强烈建议你亲自尝试一下。
什么是机器盒子?
Machine Box 将最先进的机器学习功能放入 Docker 容器中,以便像您这样的开发人员可以轻松整合自然语言处理、面部检测、对象识别等功能。到您自己的应用程序中。
这些盒子是为扩展而建造的,所以当你的应用真正起飞时,只需水*地添加更多的盒子,直到无限甚至更远。哦,它比任何云服务都便宜**(它们可能更好)……而且你的数据不会离开你的基础设施。**
我如何使用机器学习来节省时间
原文:https://towardsdatascience.com/how-i-use-machine-learning-to-save-time-49f8b0ee0881?source=collection_archive---------10-----------------------
事情已经变了。某些类型的问题曾经非常困难,或者需要大量重复的工作才能解决。我相信我们都有过这样的经历,面对一些我们知道需要很长时间才能完成的事情,不是因为它具有挑战性,而是因为它重复且耗时。
像苹果公司的 Automator 这样的东西可以用来使某些与计算机相关的任务变得更可行,尤其是如果你不擅长脚本语言的话。这些工具可用于解决需要重命名文件夹中的数千个文件或删除重复文件等问题。但是有些事情是它解决不了的。
许多年前,我制作了一个网络系列,有相当广泛的演员阵容。我需要完成的一项任务是为这个节目制作一个网站。我记得我很喜欢这部作品,直到我看到演员名单。我突然意识到,我需要裁剪和放置大量不同大小和形状的头像,以便在网站上看起来统一(这是在我知道网格布局之前)。这个过程花了我几天时间来完成。自从我手动完成所有工作后,我从来没有觉得自己做得很对。
今天,这个问题可以通过机器学习很容易地解决。以下是我的方法:
- 从机器盒子(我帮忙创立的一家初创公司)下载并安装 Facebox。
- 编写一个脚本,将您想要裁剪的每张照片发布到 Facebox,并获取人脸的位置。
- 使用 Facebox 返回的尺寸在脸部周围裁剪照片(带有一些填充)。
我已经在这里开源了一些这样做的代码: profilecropper
profilecropper powered by Machine Box
你可以用这种方式创建和自动裁剪数以百万计的个人资料图片,而不必做任何手工劳动。只需要知道人脸在哪里,这是机器学习可以解决的问题。
让我们再举一个例子。比方说,你已经有了一个过去 50 年扫描的照片库。扫描每张照片是一种痛苦,但至少现在它们都是数字文件。但问题是,你无法搜索它们。幸运的是,机器学习可以再次拯救我们。以下是我的方法:
- 从机器盒下载并安装 Tagbox
- 编写一个脚本,将你拥有的每张照片发布到 Tagbox,并获取标签列表。
- 您可以根据结果决定是否过滤掉低可信度的标签。
- 将标签与文件名一起存储在一个文本文件中,您的操作系统稍后将对其进行索引。或者,将数据写入简单的数据库,如 excel 电子表格或 SQL 表。
- 现在,您可以通过照片中的内容来搜索照片。
为了让你开始,这里也有一些解决这个问题的开源代码: tagroll
Solving the chihuahua/muffin problem with Tagbox
好玩的小旁注;假设你有特定类型的想要搜索的对象,比如一辆特殊类型的汽车或房子。你可以用一两张样本照片来教 Tagbox 这些东西,然后它会从那时起标记它看到的每张照片。点击阅读更多关于如何做的。
你还可以做一些非常聪明的事情,比如对你所有的照片进行视觉相似性搜索。上传某样东西的照片,并使用 Tagbox 向您显示您收藏的其他类似照片。
可以想象,这些解决方案几乎无处不在。例如,您的电子商务网站可以为客户提供强大的工具,根据他们喜欢的东西的视觉相似性来找到他们更有可能购买的衣服。
在这个时代,我们都在处理大量的数据。无论是个人照片还是产品目录,我们都需要开始定期考虑将机器学习作为一种强大的方法,来解决因拥有如此多的数据而产生的问题。
我如何使用 200 名专家和 Reddit 的评论排名算法来赢得我的办公室 NFL Pick'em 池
原文:https://towardsdatascience.com/how-i-used-200-experts-and-reddits-comment-ranking-algorithm-to-win-my-office-nfl-pick-em-pool-cbca64abe31d?source=collection_archive---------0-----------------------
The spreadsheet that won me my NFL pick’em office pool: https://docs.google.com/spreadsheets/d/1caV-Uv7f4OsVuioSU3iPWn8cMkYjG0S9XgU9pgKwlPU/edit?usp=sharing
我发现,每年参加我办公室的 NFL 扑克比赛都是一种极大的快乐。去年(2015-2016 NFL 赛季),在没有任何连贯策略的情况下,我在 24 场比赛中排名第 18,并在赛季结束时排名并列第 4。今年,我想如果我采用一致的策略,我可能真的会赢。
我赢了。
新英格兰队昨天在超级碗比赛中令人难以置信地战胜了亚特兰大队,使我在 19 名同事中排名第一,在 265 次正确选择中取得了 172 次的成绩。
我是怎么做到的?我创建了一个系统,使用来自 200 多名“专家”的数据和 Reddit 评论排名算法的变体,有条不紊地产生超越我同事的优势。
我的主要论点是:每周,我都会听从记录最好的专家的建议,将他或她预先宣布的选择作为自己下周的选择。
随着这些专家证明了他们在挑选赢家方面的熟练程度,我也跟着他们走向了成功。随着他们争夺和交换最高神谕的位置,我也相应地改变了我的忠诚。
我的逻辑虽然在理论上容易出错,但在实践中是成功的:过去在某些专家中的成功确实保证了我未来的表现。
结果呢?一个将数以千计的专家预测变成办公室吹嘘资本的系统。
收集“专家”预测
如果我要追随最可靠的专家,我首先需要数据来告诉我,这些所谓的“专家”中的哪一个实际上每周都在挑选赢家。
我在 NFL Pickwatch 找到了我所需要的。
NFL Pickwatch 跟踪 NFL“专家”在 NFL 赛季期间每周的选择和预测。大多数专家是 NFL 媒体分析师(因此他们的“专家”身份),但 NFL Pickwatch 也跟踪 Vegas line、ESPN 用户共识、微软的人工智能机器人 Cortana 和算法,如 FiveThirtyEight 的 Elo 预测。NFL Pickwatch 背后的家伙,用他们自己的话说,“跟踪、观察和跟踪(象征性地)每个网络和网站上的每个 NFL 专家”。
NFL Pickwatch 每周都有专家预测,可以追溯到 2014 赛季。8 月,我从 NFL Pickwatch 手动复制并粘贴了 2014 和 2015 赛季每周选秀权数据到一个谷歌电子表格。每周的数据如下所示:
第 3 行包含每场比赛的获胜者,我会每周手动发布。左边的一个公式计算了所有选秀权中的获胜次数。
该公式只惩罚错误选择的专家,而不是不完整的选择。这是我自己计算的,而不是依靠 NFL Pickwatch 的计算,因为他们只是在 2016 赛季开始时停止了对不完整选秀权的处罚。
寻找最好的专家
NFL Pickwatch 的数据面临的一个挑战是,他们只能跟踪专家公开提供的预测。多年来,NFL Pickwatch 已经扩大了他们追踪的专家数量。这意味着一些专家拥有 2014 年的数据,而其他人则是 2016 赛季开始时的新手。这使得比较专家成为一个挑战。
胜率的问题
比较专家的一个自然的起点是比较他们的胜率,即所有预测中正确预测的数量。例如,如果我做了 100 个预测,并在其中的 60 个中选择了正确的赢家,我的胜率将是 60%。
这种方法的问题是,在 500 场比赛中表现稳定的专家不容易与第一周运气好的新手相比。
例如,在 2014、2015 和 2016 赛季,要被认为是所有专家中第 90 百分位的顶级专家,专家必须在至少 66.25%的时间里正确选择获胜者。同一时期的几个基准供参考:
- 拉斯维加斯线:66.11%
- ESPN 粉丝共识度:66.29%
- 主队赢了 56.4%的时间
使用获胜百分比对专家进行排名将导致一位公认的专家预测 600 场游戏中的 400 名获胜者(66.67%的获胜百分比),排名在之后,一位新参与者在第一周运气不错,在 16 名获胜者中正确选择了 13 名(81.25%的获胜百分比)。
我希望我的系统能够*衡新加入者(他们可能发现了一种创新的预测方式)和专家(他们在多个季节里一直表现良好)之间的优势。
输入 Reddit 的评论排名算法
几年前,我偶然看到阿米尔·萨利哈芬迪克的一篇文章,详细介绍了Reddit 如何对评论进行排名。
Reddit 允许评论被投票赞成和投票反对,以根据其众包质量对评论进行排名。为了对它们进行排名,Reddit 必须将一条有 1 张赞成票和 0 张反对票的评论与另一条有 50 张赞成票和 0 张反对票的评论进行比较。两者都有 100%的“正面”评价,但 Reddit 的算法将第二条评论的排名高于第一条。
Reddit 通过执行“置信度排序”来做到这一点。它*衡了评论的质量和信心,即从长远来看,当前的赞成票和反对票的分配将是准确的。参见“如何不按*均评分排序”,了解为什么这种方法比城市字典和亚马逊等其他网站的排名计算更准确。
为了进行置信度排序,Reddit 使用了一个威尔逊评分区间:
Source: https://medium.com/hacking-and-gonzo/how-reddit-ranking-algorithms-work-ef111e33d0d9#.ar9spcw5k
Salihefendic 解释:
"在上述公式中,参数定义如下:
- p 是正面评级的观察分数
- n 是评级总数
- zα/2 是标准正态分布 的(1-α/2) 分位数
下面我们总结一下:
- 信心排序将计票视为每个人的假想全票的统计抽样
我们可以使用相同的参数为我们的专家计算威尔逊评分区间。在我们的例子中,
- p 是正确预测的数量
- n 是预测的总数
- zα/2 仍然是标准正态分布的理想分位数,或者我们希望对专家预测的准确性有多有信心
下面是公式在 Excel 公式中的表示方式:= sqrt((p/n)+z * z/(2 * n)-z (p/n)(1-(p/n))+z * z/(4 * n))/n)/(1+z * z/n)
根据 Salihefendic 的说法, Reddit 的评论排名算法使用的置信区间(上面 z 的值)为 1.281551565545。他声称这相当于 85%的置信区间,这意味着:
- “置信度排序给一个评论一个临时排序,它有 85%的把握它会到达
- 投票越多,85%的置信度得分越接*实际得分”
我认为他弄错了,基于维基百科上的这个分位数函数表显示 1.28 是 80%置信区间的值,而不是 85%。
不管怎样,总的想法是一样的。我们应该根据我们对专家预测质量的信心程度来选择 z 的值。
在试验不同的 z 值时,我选择使用 1.6,从代表 90%置信区间的 1.644853626951 取整。我选择了 90%超过 95%和 98%的置信区间( z = 2.0, z = 2.3 分别)。我觉得 90%给了我最好的*衡,既尊重久经考验的专家,又有足够的进取心,在短短几周持续的优秀选择后识别出“冉冉升起的新星”。
结合数据和算法
使用 NFL Pickwatch 的两个赛季的数据,我根据他们的威尔逊得分区间对 177 名专家进行了排名。前 5 名专家:
- 538—0.8205(531 个中的 360 个,占 67.8%)
- ESPN 球迷—0.8144(533 人中的 356 人,占 66.8%)
- 杰米·艾森伯格—0.8144(533 人中的 356 人,占 66.8%)
- 拨片风扇拨片—0.8133(533 个中的 355 个,占 66.6%)
- 乔希·卡佐维茨—0.8129(532 人中的 354 人,占 66.5%)
于是,在 2016 赛季的第一周,我把 FiveThirtyEight 的选秀权据为己有。
我每周都重复这个方法。我从 NFL Pickwatch 导出了前一周的结果,重新计算了每位专家的威尔逊得分区间,并相应地更改了我的选择。在 2016 赛季,NFL Pickwatch 增加了 30 多名专家,使专家总数超过 200 人。我还添加了一些我自己的专家,我可能会在以后的帖子中写一些。
这是显示我的系统的完整电子表格,其中有从 2014 赛季第一周到昨天超级碗 51 的数据。
正如你在上面看到的, FiveThirtyEight 的 Elo 模型在整个 2014 和 2015 赛季占据主导地位,在 2016 赛季开始时,比排名第二的“专家”ESPN 粉丝高出*一个百分点。正因为如此,FiveThirtyEight 在整个 2016 赛季都保持领先!
尽管要花费数小时复制和粘贴数据,并创建一个复杂的自动生成公式的电子表格,但我的系统一直告诉我只需遵循 FiveThirtyEight 的建议。
FiveThirtyEight 在整个常规赛中都将是顶级专家,只是在 2016 年季后赛第一周之后被踢下了宝座。
到本赛季结束时,使用 2014 年、2015 年和 2016 年(包括每个赛季的季后赛和超级碗)的数据,目前排名前 5 的专家是:
- 乔希·卡佐维茨—0.8159(797 人中的 533 人,占 66.9%)
- 538—0.8151(794 个中的 530 个,占 66.8%)
- 迈克·戴斯—0.8151(216 人中的 146 人,占 67.6%)
- 乔希·希尔—0.8151(216 人中的 146 人,占 67.6%)
- 安德鲁·林奇—0.8138(265 个中的 178 个,7.2%)
以下是这五位专家从 2014 年第一周开始每周的排名:
正如你所知,FiveThirtyEight 在过去的三年中占据了主导地位,在 63 周中有 39 周高居榜首,只是在 2016 年季后赛的最后几周输给了 Josh Katzowitz。
赢得办公室赌注
使用这个系统,实际上相当于整个赛季都在复制 FiveThirtyEight 的选秀权,我在 265 场比赛中选对了 172 场,最终胜率为 64.66%。我排名第二的同事做了 171 次正确的选择,几乎赢得了所有的选择,直到她的超级碗 51 次选择,亚特兰大猎鹰队,在第四季度崩溃。
现在,我很乐意承认我们的办公室并不特别热衷于运动。此外,游泳池显然很小。这个系统可能不会在另一个更大的办公室里工作。尽管如此,我花了无数个小时把这个系统组装在一起,这是一个巨大的乐趣,只是碰巧最后胜出了。
可悲的是。如果我们中的任何人只是随大流,选择了雅虎用户的最爱,我们会以 174 个正确的选择排名第一。如果我们选择拉斯维加斯线的最爱,我们会有 175 个正确的选择。这显示了大众和市场的力量,以及为什么在试图击败它们时要小心谨慎。
但至少今年,办公室的荣耀——以及几块钱——是我的。
请在下面的评论中告诉我你对我的方法的看法。我没有花时间详细指出它的各种缺陷,但是如果你读到这里,我相信你已经有了自己的一些聪明的批评和建议。
我如何使用深度学习来优化 Keras 的电子商务业务流程
原文:https://towardsdatascience.com/how-i-used-deep-learning-to-optimize-an-ecommerce-business-process-with-keras-8ba328e12d9c?source=collection_archive---------7-----------------------
问题介绍
在进入问题细节之前,我想先介绍一下业务工作流程, Avito.ma 是摩洛哥领先的电子商务广告*台,用户在这里发布广告,销售二手或新产品,如手机、笔记本电脑、汽车、摩托车等。
现在让我们进入问题的细节,为了发布你的广告来销售产品,你必须填写一个表格,在表格中描述你的产品,设定价格,并上传相应的照片。成功填写这些字段后,您需要等待大约 60 分钟,以便您的广告在版主验证这些图像后发布。
如今,在深度学习和计算机视觉的时代,手动检查网页内容被认为是一种缺陷,非常耗时,此外,它可能会导致许多错误,如下面的这个错误,其中版主接受了电话类别中的笔记本电脑广告,这是错误的,并影响搜索引擎质量,而这项工作可以通过深度学习模型在一秒钟内完成。
Laptop ad published on phones category — link
在这篇博文中,我将介绍我如何通过使用 Keras 框架构建一个简单的卷积神经网络来优化这一过程,该网络可以分类上传的图像是用于手机还是笔记本电脑,并告诉我们图像是否与广告类别匹配。
这篇博客将分为 5 个具体步骤。
- 数据收集
- 数据预处理
- 数据建模
- 用张量板分析模型
- 模型部署和评估
1.数据收集
像任何数据科学项目一样,我们应该寻找的第一个组成部分是数据,在这种情况下,我们将处理的数据是从同一网站 Avito.ma 废弃的一组图像。对于笔记本电脑和手机两类,结果文件夹将包含两个子目录,分别名为“笔记本电脑和“手机”,其中下载图像的形状在 120 x 90 和 67 x 90 之间变化,每个图像有 3 个通道的 RGB。这里是执行这项任务的代码的快照,而完整的代码在笔记本中提供。
一旦这个过程很好地完成,我们得到了 2097 张笔记本和 2180 张**手机的图像。**为了使分类更加准确且没有偏差,我们需要验证两个类别具有几乎相同数量的观察值,因为我们可以从下图中看到两个类别大致相当*衡。
Images distribution over classes
2.数据预处理
对于预处理任务,我们将它分成如下三个子任务:
2.1 去除噪声数据
当手动检查下载的图像时,我注意到存在一些与相关类别无关的噪声图像,例如,在手机文件夹中观察到以下图像(手机充电器、手机包、虚拟现实眼镜):
Noisy images found with phones images
不幸的是,没有自动的方法来处理这个问题,所以我们必须手动检查它们,并开始删除它们,以便只保留那些与适当的类相关的图像。
2.2 图像大小调整
这一步完全取决于所采用的深度学习架构,例如当使用 Alexnet 模型对图像进行分类时,输入形状应该是 227 x 227,而对于 VGG-19 来说,输入形状是 224 x 224。
由于我们不打算采用任何预先构建的架构,我们将构建自己的卷积神经网络模型,其中输入大小为 64 x 64,如下面的代码快照所示。
为了执行这个任务,我们在两个子目录**phone**
和**laptop**
**,**中创建了另一个名为preprocessed_data
的目录,然后我们对raw_data
的原始文件夹中的每个图像进行循环,以调整其大小并将其保存在新创建的目录中。
因此,我们最终在 64 x 64 的适当形状内得到两个类的新生成数据集。
2.3 数据拆分
在调整数据集的大小后,我们将其分成 80%用于训练集,剩下的用于验证。为了执行这个任务,我们创建了一个名为data
**、**的新目录,其中我们设置了另外两个新目录train
和validation
、,我们将在其中为**phones**
和**laptops**
设置两个类图像。
更明确地说,我们定义当前目录和目标目录,然后我们将训练集的比率固定为 0.8,将验证的比率固定为 0.2,以测量我们将有多少图像从原始路径移动到目标路径。
Snapshot of code doing the data splitting
为了更好地显示文件夹层次结构,下面是项目树视图:
Global project structure
3.数据建模
现在,我们来到了所有这些管道中的主要步骤,即数据建模,为此,我们将建立一个卷积神经网络,该网络将在我们之前处理过的几千张手机和笔记本电脑图像上进行训练。
在计算机视觉中,卷积运算是卷积神经网络的基本构建模块之一,它需要 4 个强制组件:
Major components of a convolutional neural networks
对于该模型,我们将讨论每个组件是如何使用 Keras 及其自身参数实现的,从卷积到全连接层,但首先,让我们了解内置模型的完整架构。
CNN model architecture
卷积层
model.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(64, 64, 3), activation=‘relu’))
在将一个顺序对象实例化为model
后,我们使用add
方法添加一个名为Conv2D
的卷积层,其中第一个参数是filters
,它是输出体积的维度,就像模型摘要上显示的那样,第一层输出的形状是(None, 62, 62, **32**)
。
因为第二个参数kernel_size
是指定 1D 卷积窗口的长度,这里我们选择 3×3 的窗口大小来卷积输入体积。
第三个参数代表input_shape
,它是分别与image_width x image_height x color channels (RGB)
相关的64 x 64 x 3
的量,最后但并非最不重要的是activation_function
,它负责向网络添加非线性变换,在这种情况下,我们选择relu
激活函数。
Illustration of a convolution operation with kernel_size = (3, 3)
最大池层
在卷积后添加最大池图层的原因是为了减少我们之前应用的卷积图层提取的要素数量,换句话说,我们对这些要素的位置感兴趣。
为了给网络一个高度概括,如果我们有一个从 x 到 y 的垂直边,这并不重要,但是有一个*似垂直的边,距离左边缘大约 1/3,大约图像的 2/3 高度。
所有这些过程都在 Keras 的一行代码中恢复:
model.add(MaxPooling2D(pool_size = (2, 2)))
简单地说,这里我们使用add
方法注入另一个最大池层MaxPooling2D
,其中 pool_size 是(2,2)的窗口,默认情况下是strides=None
和padding='valid'
。
Illustration of Maximum pooling with pool_size = (2, 2)
拉*输出
在结束 CNN 模型时,将最大池输出展*为连续的一维向量是一个强制步骤。
model.add(Flatten())
Keras 在这里所做的,只是简单地在网络中添加了一个Flatten
层,它简单地等同于带有‘C’
排序的numpy
中的reshape
功能。
全连接层
最后,我们将最后一层注入到网络中,这是一个完全连接的层,您可以将其视为一种廉价的方式来学习从以前的卷积中提取的特征的非线性组合。
model.add(Dense(units = 128, activation = 'relu'))
model.add(Dense(units = 2, activation = 'sigmoid'))
Keras 通过在网络中添加Dense
函数很容易做到这一点,它只需要两个参数units
和activation
,这两个参数分别代表我们将拥有的输出单元的数量,因为我们正在进行二元分类,所以它将值 2 和激活函数作为要使用的值。
编译网络
最后,我们必须通过调用compile
函数来编译我们刚刚构建的网络,这是使用 Keras 构建的每个模型的强制步骤。
model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
loss
参数,因为我们有一个二进制分类,其中类的数量 M 等于 2,交叉熵可以计算为:
Objective function of binary cross entropy
其中p
是预测概率,y
是二进制指示器(0 或 1)。
为了最小化这个目标函数,我们需要调用一个优化器,比如adam
是Adaptive Moment Estimation
的缩写,默认情况下它的学习率被设置为 0.001,但是这并没有关闭超参数调整窗口。总结我们所做的,下面是内置模型的完整代码。
加载图像和数据转换
为了将图像馈送到我们编译的模型,我们调用ImageDataGenerator
函数,它将帮助我们生成批量的张量图像数据,并进行实时数据扩充。数据将(分批)循环。
现在我们已经创建了两个ImageDataGenerator
实例,我们需要用一个categorical
类模式为它们提供训练和验证数据集的正确路径。
一旦train
和validation
集合准备好提供给网络,我们调用fit_generator
方法将它们提供给模型。
通常,除了评估最终训练模型的验证之外,我们还准备了另一个测试数据集,但我们将保持它的简单性,只在验证集上评估它。
模型评估
训练结束后,准确率达到了 87.7%,仍然有 0.352 的较高损失,但高准确率并不一定意味着我们拥有好的模型质量。我们需要跟踪并可视化模型在这段时间内的行为,为此,我们使用了 TensorBoard,它提供了 Keras 作为与 TensorFlow 后端一起运行的回调函数。
4.用 TensorBoard 分析模型
在这一步中,我们将看到如何使用 TensorBoard 来分析我们的模型行为。TensorBoard 是一个工具,用于与 TensorFlow 后端一起构建模型,帮助我们可视化基本上我们的模型随时间的训练,以及
观察准确性与验证准确性或损失与验证损失。
使用 Keras,这个步骤可以通过调用TensorBoard
函数,在仅仅一行代码中重新开始,并在拟合数据时注入它作为回调。
from keras.callbacks import TensorBoardtensorboard = TensorBoard(log_dir='./tf-log', histogram_freq=0,
write_graph=True, write_images=False)
失败
Loss histogram for both training and validation set
从上面的图中,我们可以清楚地看到,对于从 0.39 开始到 0.13 的训练线,损失严格地减小,而对于从 0.42 开始并且花费 25 个历元来达到 0.35 的验证线,损失缓慢地减小。
就我个人而言,每当我要评估一个模型时,我会观察验证损失,这里我们可以想象的是,在第 19 个纪元之后,验证损失开始增加一点,这可能会导致模型记住许多输入样本,为了验证这个假设,我们最好检查准确性直方图。
准确(性)
Evolution of Accuracy histogram for both training and validation set
如我们所见,验证准确度一直在增加,直到第 19 个纪元,此时验证准确度趋于稳定,出现了预期的下降和上升,这可以用从同一纪元开始增加验证准确度时的验证损失行为来解释。
为了保持良好的模型质量,建议在这种情况下使用提前停止回调,这将迫使模型在验证损失开始增加或准确度以一定容差下降时停止训练。
5.使用 Flask 进行模型部署
在转到部署细节之前,我们首先需要保存之前已经训练好的模型,为此我们调用save
方法如下图所示:
# save models weights on hdf5 extension
models_dir = 'models/'
model.save(models_dir+'avito_model.h5')
一旦我们的模型被保存,我们以后就可以使用它来预测新的图像类。
为什么是 Flask?
Flask 是 Python 的一个微型框架,它的灵感来自于一句名言“做一件事,把它做好”,这就是我选择 Flask 作为 REST API 的原因。
flask 应用程序由两个主要组件组成:python 应用程序(app.py
)和 HTML 模板,对于app.py
,它将包含进行预测的逻辑代码,并作为 HTTP 响应发送。该文件包含三个主要组成部分,可呈现如下:
- 载入储存的模型。
- 变换上传的图像。
- 使用加载的模型预测其适当的类。
在下一节中,我们将讨论其中最重要的组成部分。
回到主要问题。
当用户选择笔记本电脑作为广告类别时,预计他必须为笔记本电脑上传图像,但发生的事情是不同的。正如我们之前看到的,许多广告中的图片都包含手机类别中的笔记本电脑。
运行应用程序后,假设模型成功加载,用户可能上传不同大小的图像,而我们的模型只能预测 64 x 64 x 3 的图像,因此我们需要将它们转换为正确的大小,以便我们的模型可以很好地预测它。
Snapshot of code processing uploaded images
一旦上传的图像被转换,我们就将它作为参数发送给加载的模型,以便进行预测,并以 JSON 对象的形式返回 HTTP 响应,模式如下:
{"class" : "laptop/phone", "categories_matched": True/False}
第一个属性是图像预测类别,第二个属性是布尔值,指示从用户选择的类别是否与上传的图像匹配。下面我展示了完成这项工作的代码逻辑的快照。
应用程序演示
要运行应用程序,我们只需切换到创建app.py
的文件夹,并运行以下命令:
$ python3 app.py
然后,我们浏览控制台上显示的以下 URL:[http://127.0.0.1:5000/](http://127.0.0.1:5000/)
,一旦显示索引页面,选择广告类别并上传其相关照片,在后台会向路由/upload
发送一个请求,该路由会将照片保存在一个目录中,以预测其适当的类别。
这是一个现场演示,展示了我们在这个项目结束时能够建造的东西。
Web application demo
如果选择的类和预测的类都匹配,那么你会得到一个成功的消息,表明一切正常,否则你会得到一个警告消息,并且select box
会自动改变到适当的预测类。
结论
最后,这篇博文通过建立一个深度学习模型,展示了一个完整的计算机视觉管道,该模型可以预测应用于电子商务环境的上传图像的类别,从数据收集到数据建模,最后通过模型部署为 web 应用程序来完成。
改进方法
- 通过废弃两个类别的更多图像并移除有噪声的图像来增加数据大小。
- 学习率和 beta 值的超参数调整。
- 尝试其他架构,如 Lenet-5 。
- 在完全连接的(密集)层上使用 Dropout。
有用的链接
完整项目+笔记本+数据集:https://github.com/PaacMaan/avito_upload_classifier
Flask Web 应用:https://github . com/PaacMaan/avito _ upload _ classifier/tree/master/flask _ app
我如何使用机器学习对电子邮件进行分类,并将其转化为见解(第 1 部分)。
原文:https://towardsdatascience.com/how-i-used-machine-learning-to-classify-emails-and-turn-them-into-insights-efed37c1e66?source=collection_archive---------0-----------------------
今天,我想知道如果我抓起一堆没有标签的电子邮件,把它们放在一个黑盒子里,然后让一台机器来处理它们,会发生什么。知道会发生什么吗?我没有。
我做的第一件事是寻找一个包含各种电子邮件的数据集。在查看了几个数据集之后,我想出了安然语料库。这个数据集有超过 500,000 封电子邮件是由安然公司的员工生成的,如果你问我的话,这足够了。
作为编程语言,我使用了 Python 及其强大的库:scikit-learn、pandas、numpy 和 matplotlib。
无监督机器学习
为了对未标记的邮件进行聚类,我使用了**无监督机器学习。**什么,怎么?是的,无监督的,因为我的训练数据只有输入,也称为特征,不包含结果。在有监督的机器学习中,我们处理输入及其已知的结果。在这种情况下,我想根据邮件正文对邮件进行分类,这绝对是一项无人监管的机器学习任务。
载入数据
我没有加载所有+500k 的电子邮件,而是将数据集分成几个文件,每个文件包含 10k 的电子邮件。相信我,你不会想在内存中加载完整的安然数据集并用它进行复杂的计算。
import pandas as pdemails = pd.read_csv('split_emails_1.csv')
print emails.shape # (10000, 3)
现在,我的数据集中有 10k 封电子邮件,分为 3 列(索引、message_id 和原始邮件)。在处理这些数据之前,我将原始消息解析成键值对。
这是一个原始电子邮件的例子。
消息-id:❤0965995.1075863688265.javamail.evans@thyme>
日期:2000 年 8 月 31 日星期四 04:17:00 -0700 (PDT)
发件人:phillip.allen@enron.com 收件人:greg.piper@enron.com 主题:回复:你好
mime-版本:1.0
内容-类型:文本/普通;charset = us-ascii
Content-Transfer-Encoding:7 bit
X-From:Phillip K Allen
X-To:Greg Piper
X-cc:
X-bcc:
X-Folder:\ Phillip _ Allen _ de c2000 \ Notes Folders \ ' sent mail
X-Origin:Allen-P
X-FileName:pallen . NSF格雷格,
下周二或周四怎么样?
菲利普
为了只处理发件人、收件人和邮件正文数据,我创建了一个函数,将这些数据提取到键值对中。
def parse_raw_message(raw_message):
lines = raw_message.split('\n')
email = {}
message = ''
keys_to_extract = ['from', 'to']
for line in lines:
if ':' not in line:
message += line.strip()
email['body'] = message
else:
pairs = line.split(':')
key = pairs[0].lower()
val = pairs[1].strip()
if key in keys_to_extract:
email[key] = val
return emaildef parse_into_emails(messages):
emails = [parse_raw_message(message) for message in messages]
return {
'body': map_to_list(emails, 'body'),
'to': map_to_list(emails, 'to'),
'from_': map_to_list(emails, 'from')
}
运行该函数后,我创建了一个新的数据帧,如下所示:
email_df = pd.DataFrame(parse_into_emails(emails.message))index body from_ to
0 After some... [phillip.allen@](mailto:phillip.allen@enron.com).. [tim.belden@](mailto:tim.belden@enron.com)..
要 100%确定没有空列:
mail_df.drop(email_df.query(
"body == '' | to == '' | from_ == ''"
).index, inplace=True)
使用 TF-IDF 分析文本
是术语 频率的简称——逆文档频率 和是一种数字统计,旨在反映一个词对集合或语料库中的文档有多重要。我需要给机器输入一些它能理解的东西,机器不擅长处理文本,但它们会处理数字。这就是为什么我把邮件正文转换成一个文档术语矩阵:
vect = TfidfVectorizer(stop_words='english', max_df=0.50, min_df=2)
X = vect.fit_transform(email_df.body)
我做了一个快速的图表来显示这个矩阵。为此,我首先需要制作一个 DTM 的 2d 表示(文档术语矩阵)。
X_dense = X.todense()
coords = PCA(n_components=2).fit_transform(X_dense)plt.scatter(coords[:, 0], coords[:, 1], c='m')
plt.show()
做完这些后,我想找出那些邮件中最热门的关键词是什么。我创建这个函数的目的就是:
def top_tfidf_feats(row, features, top_n=20):
topn_ids = np.argsort(row)[::-1][:top_n]
top_feats = [(features[i], row[i]) for i in topn_ids]
df = pd.DataFrame(top_feats, columns=['features', 'score'])
return dfdef top_feats_in_doc(X, features, row_id, top_n=25):
row = np.squeeze(X[row_id].toarray())
return top_tfidf_feats(row, features, top_n)
在对一个文档运行这个函数之后,它得到了下面的结果。
features = vect.get_feature_names()
print top_feats_in_doc(X, features, 1, 10) features score
0 meetings 0.383128
1 trip 0.324351
2 ski 0.280451
3 business 0.276205
4 takes 0.204126
5 try 0.161225
6 presenter 0.158455
7 stimulate 0.155878
8 quiet 0.148051
9 speaks 0.148051
10 productive 0.145076
11 honest 0.140225
12 flying 0.139182
13 desired 0.133885
14 boat 0.130366
15 golf 0.126318
16 traveling 0.125302
17 jet 0.124813
18 suggestion 0.124336
19 holding 0.120896
20 opinions 0.116045
21 prepare 0.112680
22 suggest 0.111434
23 round 0.108736
24 formal 0.106745
如果你查看相应的电子邮件,这一切都说得通。
出差去参加商务会议会让旅行变得无趣。尤其是如果你要准备一个演示的话。我建议在这里举行商务计划会议然后进行旅行没有任何正式的商务会议。我甚至会试着获得一些诚实的意见,看看是否需要或有必要进行一次旅行。就商业会议而言,我认为在不同的小组中尝试和激发讨论什么是可行的,什么是不可行的会更有成效。主持人发言,其他人安静地等着轮到自己,这种情况太常见了。如果以圆桌讨论的形式举行,会议可能会更好。我建议去奥斯汀。打高尔夫球,租一艘滑雪船和水上摩托。飞到某个地方太花时间了。
下一步是编写一个函数来获取所有电子邮件中的热门词汇。
def top_mean_feats(X, features,
grp_ids=None, min_tfidf=0.1, top_n=25):
if grp_ids:
D = X[grp_ids].toarray()
else:
D = X.toarray()D[D < min_tfidf] = 0
tfidf_means = np.mean(D, axis=0)
return top_tfidf_feats(tfidf_means, features, top_n)
返回所有电子邮件中的热门词汇。
print top_mean_feats(X, features, top_n=10) features score
0 enron 0.044036
1 com 0.033229
2 ect 0.027058
3 hou 0.017350
4 message 0.016722
5 original 0.014824
6 phillip 0.012118
7 image 0.009894
8 gas 0.009022
9 john 0.008551
到目前为止,我得到的很有趣,但我想看到更多,并找出机器还能从这组数据中学习到什么。
使用 k 均值聚类
KMeans 是机器学习中使用的一种流行的聚类算法,其中 K 代表聚类的数量。我创建了一个具有 3 个聚类和 100 次迭代的 KMeans 分类器。
n_clusters = 3
clf = KMeans(n_clusters=n_clusters, max_iter=100, init='k-means++', n_init=1)
labels = clf.fit_predict(X)
在训练分类器之后,它出现了以下 3 个集群。
因为我现在知道了机器将哪些电子邮件分配给了每个聚类,所以我能够编写一个函数来提取每个聚类的最高术语。
def top_feats_per_cluster(X, y, features, min_tfidf=0.1, top_n=25):
dfs = [] labels = np.unique(y)
for label in labels:
ids = np.where(y==label)
feats_df = top_mean_feats(X, features, ids, min_tfidf=min_tfidf, top_n=top_n)
feats_df.label = label
dfs.append(feats_df)
return dfs
我没有打印出这些术语,而是找到了一个关于如何用 matlibplot 绘制这个图形的很好的例子。所以我复制了函数,做了一些调整,想出了这个情节:
我立刻注意到集群 1 ,有奇怪的术语,如“后”和“等”。为了获得更多关于为什么像“后”和“等”这样的术语如此受欢迎的见解,我基本上需要获得整个数据集的更多见解,这意味着一种不同的方法..
要知道我是如何想出这种不同的方法以及我是如何发现新的有趣见解的,可以在 第二部分 中阅读。
Github 上提供的代码
我如何使用机器学习对电子邮件进行分类,并将其转化为见解(第二部分)。
原文:https://towardsdatascience.com/how-i-used-machine-learning-to-classify-emails-and-turn-them-into-insights-part-2-6a8f26477c86?source=collection_archive---------2-----------------------
自从我写了 第一部分 已经有一段时间了,在过去一年的许多项目中,我找不到时间和精力来继续我离开的地方。在我写第 2 部分的时候,圣诞节越来越*了,这给了我一些空闲时间来继续我的研究。
在第 1 部分的最后一节中,我讨论了每个集群的热门术语,以及为什么这些奇怪的术语(例如,HOU 等,..)如此频繁地出现。为了找到答案,我检查了数据集中的一些电子邮件,看能否找到其中的一些。
Richard Burchfield
10/06/2000 06:59 AM
To: Phillip K Allen/HOU/ECT@ECT
cc: Beth Perlman/HOU/ECT@ECT
Subject: Consolidated positions: Issues & To Do list
在浏览了数据集中的一些电子邮件后,很明显为什么这些词是热门词汇。它们几乎出现在每个“收件人”、“抄送”或“密件抄送”规则中。为了解决这个问题,我在 tfidf 矢量器中添加了一些自定义的停用词。因为停用词是一个冻结列表,所以我复制了一份,并将其传递给矢量器。
添加停用词后的聚类图。
当我看这个情节时,三件事很快浮现在我的脑海里。
1。第一个群集不包含令人兴奋的术语。
2。第二群集几乎单独由人名组成。
3。最后一组看起来非常有趣,绝对值得进一步研究
我对安然公司一无所知,但在看了最后一组之后,不可否认的是“菲利普”和“约翰”与该公司有一些重要的关系。
现在我对这些邮件是如何聚集在一起的有了一些了解,是时候让我的研究更进一步了。
查找相关电子邮件
在通过聚类算法发现了最流行的术语和最令人兴奋的电子邮件后,我正在寻找一种方式来进一步将与特定关键字相关的电子邮件分组。比如找到所有和工资或费用有关的邮件,安然因为某种原因卷入了丑闻,对吗?
首先想到要实现这一点的是余弦相似度。在数据挖掘领域中,一种用于测量聚类内聚力的常用技术。
余弦相似性是内积空间的两个非零向量之间的相似性的度量,它度量它们之间角度的余弦。0 的余弦为 1,其他任何角度都小于 1。
为了找到一封邮件和所有其他邮件的余弦距离,我只需要计算第一个向量与所有其他向量的点积,因为 tfidf 向量已经行规范化。为了得到第一个向量,我需要按行分割矩阵,得到一个只有一行的子矩阵。
# The vector of the first email.
vec_train[0:1]
幸运的是,scikit-learn 已经提供了成对度量(机器学习术语中的内核),既适用于向量集合的密集表示,也适用于向量集合的稀疏表示。在这种情况下,我需要一个点积,也就是线性核。
[ 1\. 0\. 0\. ..., 0\. 0\. 0.]
输出显示,数据集中第一个向量和第一封电子邮件之间的余弦相似度为 1,这很明显,因为这是完全相同的电子邮件。
我希望看到与我可以指定的“查询”(例如,特定的关键字或术语)相关的电子邮件,而不是查找彼此相关的电子邮件。
假设我想找到与最后一个集群中的一个顶级术语“Phillip”相关的所有电子邮件,例如,在这种情况下,我需要从查询(Phillip)中创建一个单独的向量,该向量将适合原始向量。
因此,为了找到匹配我的查询的前 10 封电子邮件,我使用了 argsort 和一些负数组切片(大多数相关的电子邮件具有较高的余弦相似值)
related_email_indices = cosine_sim.argsort()[:-10:-1]
print(related_email_indices)
要查看电子邮件,我只需通过返回的索引来查找它们。
# Print out the first result
first_email_index = related_email_indices[0]
print(email_df.body.as_matrix()[first_email_index])
哪些输出:
约翰,你这个星期还想聚一聚吗?菲利普
为了提高代码的可重用性,我创建了一个类,它可以快速查找我想要的任何术语或查询。
在那之后,我忍不住用更令人兴奋的关键词搜索邮件,比如工资或费用。我做了一个新的查询,找到 50 封与关键字薪水最相关的邮件。
ds = EmailDataset()
results = ds.query('salary', 100)# print out the first result.
print(ds.find_email_by_index(results[0]))
兰迪,你能给我发一份调度组每个人的工资和级别的明细表吗?加上你对任何需要改变的想法。(举帕蒂的例子)菲利普
对**费用的另一个查询,**显示第一个结果:
yesIna RangelJohn,您认为我们是否需要在周五为您和 Maggi 派遣一名 IT 技术人员,以确保一切正常运行?如果我们这样做,我们将不得不支付他们的旅行费用。这将是有益的,而不是你必须在电话上与它的任何问题。让我知道。表示女名
摘要
在第一部分中,我使用了一种无监督聚类算法,让机器为我对电子邮件进行分组。在检查这些集群并发现一些有趣的见解后,我使用了一种更受监督的方法来对与特定关键字相关的电子邮件进行分组。
我可以使用很多更先进的技术来获得更深入的见解,但我在摆弄我所使用的那些技术时获得了很好的体验。
对于有兴趣对安然数据集进行更深入研究的人来说,这篇论文值得一看。
如果你和我一样喜欢这个系列,别忘了鼓掌。源代码可以在我的 Github 页面上找到。欢迎在下面留下评论或在 Twitter 上联系我。
我如何使用自然语言处理从新闻标题中提取上下文
原文:https://towardsdatascience.com/how-i-used-natural-language-processing-to-extract-context-from-news-headlines-df2cf5181ca6?source=collection_archive---------4-----------------------
最*,我在 ka ggle(https://www.kaggle.com/therohk/india-headlines-news-dataset)偶然发现了一个非常惊人的数据集。这是一个难得的机会,你可以看到印度背景下的数据。这个数据是在一份名为《印度时报》的印度全国性日报上发表的大约 250 万条新闻标题。我想,如果我能分析这些数据并从这些数据中提取一些见解,那就太好了。因此,在一个晴朗的夜晚,我决定通宵从超过 250 万条新闻标题中搜集任何有趣的东西
Searching for insights!!!!
第 1 部分:了解数据
所以,我开始探索这个数据集。如果你有大量的文本,你想知道数据中存在什么样的趋势,你会怎么做?你从简单的词频开始!!!最后,我计算了最常见的单字母词、双字母词和三字母词,发现了一些真知灼见。下面是一个非常简单的记号频率的例子
第二部:碰壁
从这个图像中,我可以很容易地看出沙鲁克·汗吸引了大量的头条新闻,而 BJP 作为一个政治团体设法与宝莱坞明星一起保持其显著的地位!!!!!到目前为止一切顺利。这是我的分析将要撞上砖墙的时候。
所以,我想,为什么不继续从不同的角度来创造频率图呢?因此,我认为,如果我能绘制出多年来常见二元符号的频率图,那将是一个好主意?本质上,我想找出 2001 年(这是有数据的第一年)最频繁的二元模型标记,然后找出 2002 年最频繁的二元模型标记,最后找出 2001 年和 2002 年常见的频繁标记。并继续累积这些代币。这是我结尾的情节:
Problem Plot !!!
这里可以看到历年来最频繁最常见的重名是***‘岁’*。但这意味着什么呢?它是在什么背景下使用的?可悲的是,频率图只能带我们到这里。他们大多没有告知关于的上下文。这是我的砖墙!有一会儿,我想,现在是凌晨 2 点,让我去睡觉吧!!!!**
然后我想起了兰迪·波许
所以,我继续努力…最终我明白了…
第三部分:爬砖墙
我不会撒谎,我想我睡了一会儿,梦见了我在高中的语法课。在给定的句子中,名词、动词或形容词传达了什么样的信息?报纸标题不是句子吗?
我接下来需要做的就是过滤掉所有出现单词“ 岁 ”的标题,然后找出哪些名词和动词与这个单词同时出现。但是你是怎么做到的呢?实现这一点的方法是为每个句子创建一个词性树。词性标注是一种标准的自然语言处理技术。所有的 NLP 实现都有这个特性。我选择了 spacy,这是我必须写的一小段代码:
index=data['headline_text'].str.match(r'(?=.*\byear\b)(?=.*\bold\b).*$')
texts=data['headline_text'].loc[index].tolist()
noun=[]
verb=[]
for doc **in** nlp.pipe(texts,n_threads=16,batch_size=10000):
try:
for c **in** doc:
if c.pos_=="NOUN":
noun.append(c.text)
elif c.pos_=="VERB":
verb.append(c.text)
except:
noun.append("")
verb.append("")
plt.subplot(1,2,1)
pd.Series(noun).value_counts().head(10).plot(kind="bar",figsize=(20,5))
plt.title("Top 10 Nouns in context of 'Year Old'",fontsize=30)
plt.xticks(size=20,rotation=80)
plt.yticks([])
plt.subplot(1,2,2)
pd.Series(verb).value_counts().head(10).plot(kind="bar",figsize=(20,5))
plt.title("Top 10 Verbs in context of 'Year Old'",fontsize=30)
plt.xticks(size=20,rotation=80)
plt.yticks([]
要创建此图:
看哪!!!我有与 token“岁”相关联的上下文。这个符号被用在报道暴力行为/犯罪的新闻标题中,这些暴力行为/犯罪也大多是针对妇女的。
为了确保我的结论是正确的,我查看了实际的新闻标题,其中提到了“岁”,这是我看到的-
['10-year-old girl missing',
'Relative kills 9-year-old',
'59-year-old widow murdered',
'Spunky 60-year-old woman prevents burglary',
"75-year-old woman done to death in B'lore",
'Encroachments threaten 900-year-old temple',
'3 nabbed for 5-year-old robbery',
'25-year-old man electrocuted',
'5-year-old boy run over',
'Killers of 88-year-old woman arrested',
'21-year-old held in theft case',
"60-year-old gets two years' RI for rape attempt",
'STRAIGHT ANSWERSBRSwati Aneja 13 year old schoolgirl on what I Day means to her',
'Robbers stab 9-year-old',
"Eight year old's brush with 'commissions'",
'By Ganesha; what 81-year-old Deryck does BEST',
'Six-year-old girl raped; murdered',
'FBI woos 16-year-old indian author',
'Six-year old raped murdered in Patiala cantonment',
'FBI woos 16-year-old Indian author']
唷!!!那是一些工作。我继续研究这个数据集,寻找更多这样的故事。你可以在这个 Kaggle 内核https://www . ka ggle . com/gunvant/what-India-talks-about-a-visual-essay上查看我正在进行的工作
如果你喜欢这篇文章,别忘了鼓掌。另外,如果你在 Kaggle 上,如果你能投票支持我的内核就太好了
我如何使用文本挖掘来决定观看哪个 Ted 演讲
原文:https://towardsdatascience.com/how-i-used-text-mining-to-decide-which-ted-talk-to-watch-dfe32e82bffd?source=collection_archive---------6-----------------------
我喜欢 ted 演讲,谁不喜欢呢?当我第一次看这个数据集的时候,我突然想到了一些事情。首先,由于这个数据集包含了许多 ted 演讲的文字记录,默认情况下,我们有一个非常丰富的语料库,并且在语言学上有很好的结构。第二,由于这个语料库有很好的语言学属性,它可能是一个和路透社 20 新闻组或任何版本的古滕贝格语料库一样好的数据集。这让我想到:
我有许多 ted 演讲的所有记录的数据,我能试着想出一种方法来根据它们的相似性推荐 ted 演讲吗,就像官方 Ted 页面所做的那样?
当然,官方 ted 页面所使用的推荐引擎将会比我在这里演示的更加复杂,并且还会涉及到使用某种历史用户-项目交互数据。
这里的想法是演示如何仅仅使用内容就能产生推荐。当你没有任何用户-项目交互数据时,这变得非常重要,尤其是当你开始一个新的项目,并且仍然想要为你的内容的消费者提供相关的上下文推荐时。
满足数据
数据以表格文件的形式输入,每次谈话的文字记录存储在名为 文字记录 的一行中。下面是该文件的样子
**import** **pandas** **as** **pd**
transcripts=pd.read_csv("E:**\\**Kaggle**\\**ted-data**\\**transcripts.csv")
transcripts.head()
在检查了数据的样子之后,我发现我可以很容易地从 url 中提取演讲的标题。我的最终目标是使用抄本栏中的文本来创建一个相似性度量。然后为一个演讲推荐 4 个最相似的标题。使用简单的字符串分割操作将标题从 url 中分离出来非常简单,如下所示
transcripts['title']=transcripts['url'].map(**lambda** x:x.split("/")[-1])
transcripts.head()
在这一点上,我准备开始拼凑将帮助我建立一个谈话推荐器的组件。为了实现这一目标,我必须:
- 创建每个转录本的向量表示
- 为上面创建的向量表示创建相似性矩阵
- 对于每个演讲,基于一些相似性度量,选择 4 个最相似的演讲
使用 Tf-Idf 创建单词向量:
因为我们的最终目标是基于内容的相似性来推荐演讲,所以我们要做的第一件事是,创建一个可以比较的文字记录的表示。一种方法是为每个转录本创建一个 tfidf 载体。但是这个 tfidf 到底是什么东西?让我们先讨论一下。
语料库、文档和计数矩阵
为了表示文本,我们将把每个抄本看作一个“文档”,把所有文档的集合看作一个“语料库”。然后,我们将创建一个向量,表示每个文档中出现的字数,如下所示:
如您所见,对于每个文档,我们都创建了一个向量来计算每个单词出现的次数。所以向量(1,1,1,1,0,0)表示文档 1 中单词“This”、“is”、“sentence”、“one”、“two”、“three”的计数。这就是所谓的计数矩阵。这种文本表示有一个问题,它没有考虑到文档中单词的重要性。例如,单词“one”在文档 1 中只出现一次,但在其他文档中却没有出现,因此从其重要性的角度来看,“one”是文档 1 的一个重要单词,因为它表征了文档 1,但是如果我们查看文档 1 的计数向量,我们可以看到“one”的权重为 1,像“This”、“is”等单词也是如此。关于文档中单词重要性的问题可以使用所谓的 Tf-Idf 来处理。
术语频率-逆文档频率(Tf-Idf):
为了理解 Tf-Idf 如何帮助识别单词的重要性,让我们做一个思维实验,问我们自己几个问题,什么决定一个单词是否重要?
- 如果这个词在文档中出现很多?
- 如果这个词在语料库中很少出现?
- 1 和 2 都是?
如果一个单词在文档中出现很多,但在语料库中的其他文档中很少出现,则该单词在文档中是重要的。术语频率衡量该词在给定文档中出现的频率,而逆文档频率衡量该词在语料库中出现的频率。这两个量的乘积,衡量这个词的重要性,被称为 Tf-Idf 。创建 tf-idf 表示相当简单,如果您正在使用机器学习框架,比如 scikit-learn,那么创建文本数据的矩阵表示也相当简单
**from** **sklearn.feature_extraction** **import** text
Text=transcripts['transcript'].tolist()
tfidf=text.TfidfVectorizer(input=Text,stop_words="english")
matrix=tfidf.fit_transform(Text)
*#print(matrix.shape)*
因此,一旦我们通过考虑单词的重要性来解决表示单词向量的问题,我们就可以开始处理下一个问题了,如何找出哪些文档(在我们的例子中是 Ted talk 抄本)与给定的文档相似?
查找相似文档
为了在不同的文档中找出相似的文档,我们需要计算相似性的度量。通常在处理 Tf-Idf 向量时,我们使用余弦相似度。可以把余弦相似性看作是衡量一个 TF-Idf 向量与另一个向量的接*程度。如果你还记得之前的讨论,我们能够把每个抄本表示为一个向量,所以余弦相似度将成为我们发现一个 Ted 演讲的抄本和另一个有多相似的一种方法。
所以本质上,我从 Tf-Idf 向量创建了一个余弦矩阵来表示每个文档与另一个文档的相似程度,大致如下:
再一次,使用 sklearn,这样做是非常直接的
*### Get Similarity Scores using cosine similarity*
**from** **sklearn.metrics.pairwise** **import** cosine_similarity
sim_unigram=cosine_similarity(matrix)
我现在要做的就是,根据余弦相似度,找出每份抄本中最相似的 4 份。从算法上来说,这相当于为上面构建的余弦矩阵中的每一行找出五列的索引,这五列与对应于相应行号的文档(在我们的情况下是抄本)最相似。这是使用几行代码完成的
**def** get_similar_articles(x):
**return** ",".join(transcripts['title'].loc[x.argsort()[-5:-1]])
transcripts['similar_articles_unigram']=[get_similar_articles(x) **for** x **in** sim_unigram]
让我们通过检查建议来检查我们是如何公*的。让我们从列表中选择任何一个 Ted 演讲题目,比如说我们选择:
transcripts['title'].str.replace("_"," ").str.upper().str.strip()[1]'AL GORE ON AVERTING CLIMATE CRISIS'
然后,根据我们的分析,四个最相似的标题是
transcripts['similar_articles_unigram'].str.replace("_"," ").str.upper().str.strip().str.split("**\n**")[1]['RORY BREMNER S ONE MAN WORLD SUMMIT',
',ALICE BOWS LARKIN WE RE TOO LATE TO PREVENT CLIMATE CHANGE HERE S HOW WE ADAPT',
',TED HALSTEAD A CLIMATE SOLUTION WHERE ALL SIDES CAN WIN',
',AL GORE S NEW THINKING ON THE CLIMATE CRISIS']
你可以清楚地看到,通过使用 Tf-Idf 向量来比较会谈的记录,我们能够挑选出,主题相似的会谈。
我还在这里创建了一个 kaggle 内核,别忘了向上投票:https://www . ka ggle . com/gunvant/building-content-recommender-tutorial
你可以在这里找到完整的代码https://github . com/gun vant/ted _ talks/blob/master/blog March 18 . ipynb
我如何从阅读保罗·兰德到做回归分析影响了 DJ Mix
原文:https://towardsdatascience.com/how-i-went-from-reading-paul-rand-to-making-a-regression-analysis-influenced-dj-mix-911fc2389696?source=collection_archive---------8-----------------------
这里有一个灵感的故事,有一些不寻常的转折。有时你不明白你在一条路上,直到你发现隐藏的线索。
在软件开发领域工作了 10 年,并且在过去的 5 年里作为一名 UX 设计师,我发现自己对下一个项目不那么感兴趣了。我觉得我对设计和开发软件有相当多的了解,但是我对我为什么要做这个有一些疑问。
但是在这开始之前,我的日历上还有一些时间,所以我想我应该利用这段时间去探索一个不同的方向。我住在纽约,经常去 The Strand,但去年秋天的某一天,我有一个小时的额外空闲,在设计区寻找,碰巧发现了这本书:
buy it here or view on slide share
保罗·兰德是二十世纪最有影响力的*面设计师之一。就像副标题所说的,这是一本与学生对话的书,他不是在谈论自己或他的工作,他在回答关于设计本质的问题,并通过他的回答重新构建这些问题。你可以看到他的答案真的挑战了学生,他没有让他们摆脱困境。更重要的是,你可以看到他真的在这个他认为是大师的主题上推行他自己的观点,这是一个超级有趣的阅读。
然后,在第 19 页,他说:
…就这样,我明白他不仅仅指“页面上”的对象,还指人与人甚至组织之间的复杂关系。
让我产生共鸣的想法是,我可以通过使用我的能力,超越绘制软件图片的界限,来帮助“设计”一个组织。当然,实用性植根于技术,但真正的工作是理解做出了什么业务决策,需要做出什么决策,并通过向我们的同事提供证明组织实际正在做什么的数据来帮助他们提升思维。这是解放!
正如我在这篇文章的开头所说,我在专业上有点害怕,这三个小词帮助我离开了产品设计,走向了分析设计。那天晚上,我开始研究机器学习,这让我找到了维基百科的条目:
"回归分析广泛用于预测和预报,其使用与机器学习领域有大量重叠。回归分析也用于了解哪些自变量与因变量相关,并探究这些关系的形式。”—维基百科
哦——你也看到了,对吗?
因此,如果… 设计是关系… 而统计回归是揭示这些关系的技术… 那么…理解回归分析…就是设计的工具!
哇,好吧!我知道我现在在正确的道路上!那么我接下来做了什么?
…我做了一个 DJ 混音!
观察力敏锐的读者可能已经在我的简历中注意到我是一名音乐家。我发现我倾向于以多种方式处理我所学到的东西;有时候我会直接在日常实践中插入新的概念,但有时候我需要从抽象的角度思考,让东西渗透进来。作为一名务实的 UX 设计师,我戴上了“同理心帽子”,试图思考我那些有统计学头脑的同事是如何从不同的角度解决问题的。
但是不要让我欺骗你——当我坐下来做混音的时候,这些我都没想到。我只是有一种想做点什么的冲动。当你制作 DJ 混音时,你可能知道你想要播放的歌曲,但你通常不知道它们是如何组合在一起的。这就像一个谜题,很难理解歌曲之间的关系,但当它起作用时,你就知道了。
对于这个特殊的组合,我给了自己一堆约束。我想在混音中使用每个艺术家两次,我想把它分成两个“侧面”,我想用环境声音以及某种丛林节拍来演奏,但不要过度索引任何一个流派。我喜欢有内在逻辑的混音,尤其是当你不知道它要去哪里的时候。
看,在我之前的帖子中,我解释了我刚刚作为他们的 UX 设计师过渡到一个人员分析团队。自从我开始与我的新团队合作以来,我一直在思考我们如何衡量事物,由于我的角色很大一部分将是数据可视化,我一直在绘制尺子、网格、线条和圆形以获取灵感。
作为一名*面设计师,我还继续探索我认为是设计“基础”的东西——圆、线、网格等等。因此,我以类似的方式为我的组合做了一个设计,作为探索一些创造性想法的练习,并没有真正考虑数据科学。这是我想到的:
当我完成混音后,我知道这与我在分析设计方面的新工作有关。我明白,我在视觉上摆弄的设计元素与为我的业务同事创建的图表是一样的。“测量”当然已经渗透到我的潜意识里了。
所以现在我们在时间线的尽头,我正在做机器学习的研究,我已经完成了我的混音,设计有点不完整,我受到了兰德的话的启发。像许多人一样,我的浏览器中有许多打开的标签,我去关闭它们——它就在那里。回归分析作为一种在嘈杂世界中寻找逻辑线索的方法。
这是一个灵感的故事。这篇文章试图通过三个层次的灵感。当然,(翻白眼),我不得不把它画成图表:
- 兰德的话激发了学习和应用新技能的欲望
- 回归分析成为 DJing 的意外隐喻
- 由此产生的组合激发了设计和数据科学概念在持续学习和激活方面的应用
最终很难理解我们的想法到底从何而来,但思考它们如何演变以及它们可能对未来决策产生什么影响是很有趣的。谁知道呢——你拿起或浏览的最后一本书可能会激发你做出一个有所作为的创造性决定。
我如何学习深度学习—第一部分
原文:https://towardsdatascience.com/how-im-learning-deep-learning-in-2017-part-1-632f4187ce4c?source=collection_archive---------0-----------------------
通过构建深度学习模型学习编程
By Luca Bravo
整个人工智能革命令我着迷。我想参与进来。我的搜索把我带到了 Udacity 。一个漂亮的在线学习*台。我真的很喜欢网站的布局和颜色。我对此很感兴趣。
我注册了新课程通知,并发现了深度学习基金会纳米学位。
先决条件是基本的 Python 语法和一些微积分知识。当我第一次读这封邮件时,我从高中起就没有什么 python 经验(最少的整体编程经验)和少量微积分知识。
建设
我对涉足编程领域非常感兴趣。看了那么多 Medium、博客和互联网其他地方的文章,机器学习和深度学习最让我感兴趣。我决定开始准备这门课程。我在最后期限前有三个星期。
我开始通过多种方式学习 python,主要是通过我之前在 Udemy 上购买的 Python Bootcamp 课程。
最后期限很快就要到了。在我有 24 个小时来决定之前,我几乎没有通过 Python 中的方法和函数。
充满了对自己是否准备好的焦虑,我输入了我的信用卡信息并在 Udacity 上注册了 Nanodegree。我怀疑自己,我甚至发邮件给支持人员,说明我的担忧以及退款窗口何时结束。
The anxious email I sent to the Udacity support team.
我在怀疑自己。
我决定不选择退款。我想测试一下自己。我想,“最坏的情况会是什么?”。
学习 Python 很有趣。在我见过的所有语言中,Python 最快地征服了我。
除了 Udemy 课程,我还开设了 Udacity 的免费的 Python 编程基础课程。这两个人合作得很好。
课程开始日期的迅速临*是每天学习 Python 的巨大动力。在三周时间里,我从对 Python 一无所知到能够画出花朵,检查一段文字中的脏话,当然,还完成了经典的 FizzBuzz 算法挑战。
我甚至制作了一个 YouTube 视频,我试图解释我是如何使用 Python 来画花的。这确实有助于巩固我的学习。
所以经过三周的 Python 准备,我成功地从 mega noob 变成了 super noob。
课程结束两天了,我没有学任何数学。我从高中(7 年前)就有很强的数学背景,但从那以后就没怎么做过。我对数字很在行,所以比起编程,我对数学部分更有信心。
在课程开始前的一些公告中,我听到几次提到矩阵操作。Udacity 团队推荐使用可汗学院来温习矩阵和向量。所以我开始看一些视频,练习矩阵乘法,重新发现什么是向量。
第一天
我加入了深度学习基金会的 Slack 频道。介绍频道挤满了未读的信息。我开始滚动频道。
“大家好,我是来自 SF 的 John,X 的软件工程师”*
“大家好,我是来自伦敦的 Paul,X 的数据分析师”*
*这两个都是杜撰的名字。频道里的每个人都非常友好,乐于助人。
焦虑程度上升。
我让自己陷入了什么?
我意识到,这不是我和其他同学之间的竞争。我们上这门课都是有原因的,最有可能是为了提高自己的技能,互相帮助,改变世界,而不是竞争。
有趣的是,我们很快就会把自己和他人进行比较。我是唯一这样做的人吗?
即使是比赛,Udacity 团队也竭尽全力警告我课程会很难,并给出了详细的先决条件。如果我因为不知所措而对开课感到焦虑,那是我的选择。
另一种认识。我身边有一些世界上最聪明的人。我现在有机会向这个领域的佼佼者学习,我怎么能不兴奋呢?
第一周
到第一周结束时,我已经学到了相当多的知识。我被介绍给了一些令人惊叹的 Udacity 深度学习团队。
我了解了深度学习的真正含义。是的,我在实际上不知道深度学习的正确定义的情况下,创办了深度学习基金会 Nanodegree。跟机器学习有关吧?
我知道了深度学习可以应用在哪里,我甚至利用一些预先制作的算法为我的狗设计了一张照片,就像毕加索的 La Muse 。
My dog Bella, recreated by my computer in the style of Picasso’s La Muse.
我用这种技术为朋友们设计了一系列不同的照片,他们都很喜欢。
My friends and I in a human pyramid, La Muse style.
我了解了线性和逻辑回归模型,以及它们如何作为神经网络的构建模块在机器学习中使用。
通过几个编程例子,我了解了 NumPy 和矩阵数学。在本周之前,我从未使用过 NumPy。关于 NumPy 的文档非常广泛,结合 Udacity 的课程,非常有用。
最后,我深入研究了逻辑回归和神经网络背后的思想。对我来说,这是一周中最困难的部分。有时我感到沮丧,因为我不明白发生了什么。为了克服这一点,我会把课文内容复习一遍。然后我会走开几分钟,只是想一想。然后,我会回来写下(在纸上)所有我不理解的部分,并在尝试挑战之前修改它们。
这种技术似乎很有效。
第二周
我错过了第二周的所有内容,因为我在家乡参加了麻省理工学院的训练营。
在线课程的美妙之处在于所有的信息在任何时候都是可以获取的。
下一步是什么?
第三周是本周。
在开始第三周之前,我将继续完成第一周和第二周的剩余内容,然后最终开始我的第一个项目。
我正在用特雷罗追踪我的进度,随时跟进,如果我松懈了就告诉我。
I’m using a modified Kanban technique to stay on top of things.
到这个月底,我将从零开始建立和训练我自己的神经网络。
我有许多工作要做。
我很害怕,但也很兴奋。
开始学习这门课程是我做过的最好的事情之一。我在学习如何编程的过程中获得了乐趣,同时也成为了我经常从外部观察的社区的一部分。
我已经学到了很多,但最重要的事情之一就是开始。很久以来,我一直想学习编程,我终于做到了。
如果你想开始学习如何编程,那就试试吧。网上有很多免费资源,都试试吧。找到最适合自己的。
我仍然不知道这是否最适合我,但目前为止我很喜欢它。
这篇文章是一个系列的一部分,这里是其余的。
- 第一部分:新的开始。
- 第二部分:动态学习 Python。
- 第三部分:广度太多,深度不够。
- 第四部分: AI(营养)对 AI(智能)。
- 第五部分:回归基础。
- 额外:我自创的 AI 硕士学位
我如何学习深度学习—第二部分
原文:https://towardsdatascience.com/how-im-learning-deep-learning-in-2017-part-2-5cff7967a0e4?source=collection_archive---------1-----------------------
动态学习 Python
TL;速度三角形定位法(dead reckoning)
- 提交了我的第一个深度学习项目,我通过了!
- 开始学习卷积神经网络
- 了解了 TensorFlow 和情绪分析
- 回到基础,开始在树屋学习 Python,在可汗学院学习基础微积分
- 下个月:项目 2 和循环神经网络
第 1 部分 从我开始 Udacity 深度学习基础
Nanodegree ,以及通过 Udacity 的 Python 编程入门开始学习 Python 开始。
那篇文章在第三周结束。我现在在第六周。
我是如何追踪的
How I’m using Trello to stay on top of things.
到目前为止,它一直具有挑战性,但惊人的支持渠道已经令人难以置信。
我遇到的大多数麻烦都是我自己造成的。这主要是因为我在编程和统计方面的背景知识很少。
我喜欢挑战。在 8 号球后面意味着我的学习已经是指数级的。我从对 Python 和微积分知识几乎一窍不通,到能在六周内写出部分神经网络。
这一切都来之不易。我每周至少花 20-30 个小时在这些技能上,但我还有很长的路要走。这么长时间是因为我在开始课程前缺乏必要的知识。
第三周
在 Udacity Slack 频道的大力帮助下,我成功完成了我的第一个项目。该项目包括训练我自己的神经网络来预测某一天的自行车共享用户数量。
看到模型在调整诸如迭代次数(模型尝试映射数据的次数)、学习速率(模型从训练数据中学习的速度)和隐藏节点的数量(输入数据在成为输出数据之前流经的算法数量)等参数时得到改善,真的很有趣。
Source: Udacity
上图显示了一个神经网络的示例。隐藏层也称为隐藏节点。在深度学习中,输入和输出之间可能有数百个,如果不是数千个这样的隐藏层,反过来创建了一个深度神经网络(深度学习由此得名)。
在等待我的项目被评分和继续深度学习基础 Nanodegree 的过程中,我决定继续学习 Udacity 提供的其他一些课程。
我完成了 Python 编程入门课程,开始了数据分析入门课程。我在数据分析课程上没有取得多大进展,但这是我下个月的目标之一。
提交项目三天后,我收到了反馈。我通过了!我无法向你解释这有多令人满意。
Passing my first Deep Learning project! 😄
在询问了课程的退款流程(见 第一部分 )三周后,我已经完成了课程的第一个重要里程碑。
我做出了正确的选择,留下来。
向 Slack 频道大声呼喊,感谢他们所有的惊人帮助!
卷积神经网络
在收到我的第一个项目的反馈后的几天,我开始了纳米级卷积神经网络的第二部分。
卷积神经网络能够识别图像中的对象。它们是强大的功能,例如脸书的照片自动标记功能。
为了更深入地了解卷积神经网络,我强烈推荐你阅读 Adam Geitgey 的文章。事实上,当你在的时候,看看他的整个系列。
第 2 部分从 Siraj Raval 的一段视频开始,讲述如何为神经网络准备最好的数据。
Siraj 可能是我在 YouTube 上见过的最有趣的教练。即使你不喜欢 DL、ML 或 AI(你应该喜欢),看他的视频也很有趣。
就像人类一样,当信号从噪音中被破译出来时,机器工作得最好。为神经网络准备数据包括移除数据边缘的所有绒毛,以便神经网络可以更有效地处理数据。
请记住,机器学习只能在数据中找到人类最终能够找到的模式,只是这样做要快得多。
(非常)简单的例子:
您想要了解特定学校中特定九年级班级的考试成绩趋势。
您的初始数据集包含全国每所高中的结果。
使用这个数据集来寻找特定类的趋势是不明智的。
因此,为了准备数据,除了您想要测试的特定的 9 年级班级之外,您要删除每个班级和年级。
关于数据准备的更多信息,我推荐 Siraj 的这个视频:
第四周
本周我开始构建和学习 Miniflow,这是我自己的 TensorFlow 版本(稍后我将介绍 TensorFlow)。本课的目标是学习可微分图和反向传播。
这两个词都是行话,上课前对我来说毫无意义。
当我用最简单的术语定义它们时,我发现事情变得更容易了。
可微图:(从函数中)可以求出导数的图。用这个导数可以更容易的计算未来的事情。
**反向传播:**通过神经网络前后移动,计算每次输出和期望输出之间的误差。该误差然后被用于相应地调整网络,以更精确地计算期望的输出。
我在这门课的某些部分遇到了困难。我越来越沮丧。我休息了一下,决定吞下我的自我,我必须回到基础。
回归基础
如果你对一个概念有困难,回到基础,而不是试图推进。如果你继续让沉没成本谬误得逞,你最终可能会成功,但它可能弊大于利。我对在许多紧张的时间里努力完成目标感到内疚。我不想让这种事情在这门课上发生。
课堂上的数学是最困扰我的。不过,不要把我的麻烦当成害怕的理由,没多久我就被可汗学院可爱的人们带着熟悉起来。
我看了关于偏导数、梯度和链式法则的整个系列。在这之后,迷你流课程中的一切开始变得更有意义了。
在完成可汗学院的课程后,我不仅获得了更好的理解,学习过程也远没有那么令人沮丧。
本着返璞归真的精神,我买了几本关于 DL 的书。第一个是安德鲁·特拉斯克的探索深度学习。安德鲁是这门课程的讲师,也是牛津大学的博士生。
这本书的前半部分我已经看了大约 50%(后半部分还没有发行),它已经开始巩固我已经学到的知识了。在稍微深入地挖掘神经网络的整体概念之前,它从 DL 的大概述开始。
我向任何希望开始学习深度学习的人推荐这一点。Trask 指出,如果你通过了高中数学考试,并且可以用 Python 编程,你就可以学习深度学习。我几乎没有勾选任何一个选项,这绝对对我有帮助。
在 Slack 频道的一次推荐后,我最*还购买了自制神经网络。我还没有开始做这件事,但是我会在下个月的某个时候开始做。
计算机编程语言
当课程开始时,它说初级到中级 Python 知识是先决条件。我知道这个。问题是,除了 Udacity 上的 Python 基础课程,我什么都没有。
为了解决这个问题,我注册了 Treehouse 上的 Python Track。除了没有要求退款之外,这是迄今为止我在课程中做出的最好的决定。
突然间,我有了另一个知识来源。由于基础课程,我有一个小的基础,但现在知识正在复合。
树屋的社区就像 Udacity 一样,非常有帮助。事实上,我已经开始在树屋论坛上分享我自己对人们关于 Python 的问题的回答。
5 周从学生到老师??
在 Treehouse 上学习更多关于 Python 的知识让我进一步了解了深度学习纳米学位基金会正在发生的事情。
我发现混合知识是一件非常强大的事情。在过去,我总是坚持不懈地学习新的东西,而不是复习已经学过的东西。
如果你太快地尝试一些超出你舒适区的事情,你会很快达到筋疲力尽的地步。
回归基础不仅提高了我的知识,更重要的是,给了我继续学习的信心。
第五周
接下来是情感分析。我看了特拉斯克和西拉杰的课。
情感分析包括使用神经网络来决定电影评论是正面还是负面。
我无法相信我正在编写代码来分析一篇文章中的单词,然后用这些代码来判断它的意思。
想到在你真正做一件事之前,你永远也做不了这件事,这很有趣。
Siraj 有另一个关于情感分析的很棒的视频,我会看它只是为了看看迷因。
接下来是张量流。我很努力地研究 TensorFlow。连 logo 看起来都很酷。
TensorFlow 是 Google Brain 开发的开源 DL 库。它几乎被用于所有的谷歌产品。它最初是为 ML 和 DL 研究设计的,但后来被用于各种其他用途。
TensorFlow 让我兴奋的是它是开源的。这意味着任何有想法和足够计算能力的人都可以像谷歌一样有效地使用同一个库来实现他们的想法。
我真的很激动,以后能更多的了解 TensorFlow。
第六周
这就是我现在的处境!
我玩得很开心。这些课程有时很难,但我不会有别的办法。
通常,最困难的任务也是最令人满意的。每当我完成一门课或一个我已经工作了几个小时的项目时,我都会有一种巨大的满足感。
我下个月的计划是什么?
我想花更多的时间在复习模式上。我学到了很多。
因为很多东西对我来说都是新的,我的直觉告诉我应该复习一下我所学的。
我将尝试使用抽认卡(通过 Anki )来帮助记忆 Python 语法和各种其他项目。
在我写第 3 部分的时候,我将已经完成了另一个项目,读了几本书,完成了更多的在线课程。
你可以通过查看我的 Trello 板来观察我在做什么。我会尽可能保持更新。
回到学习上来。
这篇文章是一个系列的一部分,这里是其余的。
- 第一部分:新的开始。
- 第二部分:快速学习 Python。
- 第三部分:广度太多,深度不够。
- 第四部分: AI(营养)对 AI(智能)。
- 第五部分:返璞归真。
- 号外:我自创的 AI 硕士学位
我如何学习深度学习——第三部分
原文:https://towardsdatascience.com/how-im-learning-deep-learning-in-2017-part-3-343598d60032?source=collection_archive---------1-----------------------
我已经答应了太多的隐藏单位
在我们进入细节之前,这篇文章有很多细节,这里有一个 10 秒钟的总结:
- 📈通过 Udacity 深度学习基础纳米学位
- 🤓使用特雷罗板来跟踪我的学习
- 📚在树屋和学习 Python《艰难之路》教材
- ➗Learning 数学与汗学院
- 📝在这个媒体系列中每天写我的学习心得
- 每天⌚️studying 3-4 小时,使用番茄工作法并用 Toggl 追踪时间
- 📽每周发布 1 条 VLOG总结我的日常学习
- 👀在 YouTube 上观看 Siraj 的所有视频
现在,让我们深入一下。
今年二月,我还没有写过一行 Python 代码。我一生都在接触科技,但从来没有接触过创造,只是把它用于消费。我想改变这一切。所以我决定开始学习编程,我在这个领域的短暂研究让我找到了 Udacity ,从这里我看了无数他们各种纳米学位项目的预告片,但最让我印象深刻的是深度学习基金会纳米学位(DLFND) 。
在开始询问退款政策之前的几天,我向 Udacity support 发送了一封电子邮件,现在我已经进入了该计划的最后一个模块(参见第 1 部分)。我很高兴我没有继续写那封邮件。
距离我上次更新只有两个月了,我已经学到了很多。我写这些更新主要是作为我自己反思的一种方法。过去,反思我所学到的东西是我的一个弱点。学习全新的东西是困难的,我发现回头回顾你做过的事情是提醒自己实际上已经走了多远的好方法。
与其他帖子一样,这不会完全是关于深度学习的,但 DLFND 已经成为我过去几个月研究的基础,从这一点上,我开始提升自己在其他领域的技能(Python、统计、代数)。
在这篇文章中,我将回顾一些事情,包括我目前的学习日程和自第 2 部分以来我所学内容的简要概述。
我目前的学习日程是怎样的?
正如在之前的帖子中提到的,我使用了一个 Trello 板作为我的主要规划工具。我把 DLFND 需要的所有东西以及我在纳米学位之外做的任何补充研究都写在了板上。
What the board looks like as of July 14 2017.
如果你愿意,你可以看看公告板,我已经公开发布了。
即使我已经完成了 DLFND,我也将保持 Trello 板的最新状态,我计划参加下一个课程(在未来的帖子中会有更多关于这方面的内容)。
每天早上,我起床后在白板上写下一系列目标。
My personal assistant.
你可以把这块板子想象成有组织的混乱。上面散落着随机的激励性引语,我的“是和不是清单”,每天要做的事情(左手边黑色的),有一天要做的事情(蓝色的复选框),当然,我目前的幸福方程在顶部。
右下角的“是和不是”列表不断提醒我,哪些事情我想说是,哪些事情我想说不。DL 是深度学习,ML 是机器学习, AnyGym 是我和一些朋友正在做的一个项目(稍后会详细介绍),其余的应该不言自明。
经过几年的研究,我发现番茄工作法最适合我。每天我的目标是完成至少 6 个 Pomodoro(25 分钟一组)的给定主题。例如,如果是以 Python 为主题的一天,我的目标是完成 6 个 Pomodoro(150 分钟)的无分心 Python 学习。这段时间的大部分将在午饭前完成(我在早上学得最好)。
我通常做三个 25 分钟的街区,然后有 30-45 分钟的休息时间,我会吃早餐或者出去散散步。休息过后,在我完成一天的学习之前,我将继续接下来的三个街区。
这种套路是在读了卡尔·纽波特的深度作品后产生的。我发现,在 3 到 4 个小时集中精力、不受干扰的工作中,我能比在 6 到 8 个小时的持续干扰中完成更多的工作。
你可以说我在遵循达尔文式的常规。
晨间散步和早餐后,达尔文 8 点钟就在书房里,持续工作一个半小时。九点半,他会阅读早班邮件并写信。10:30,达尔文回到更严肃的工作中,有时搬到他的鸟舍、温室或其他几个进行实验的建筑中的一个。到了中午,他会宣布,“我完成了一天的工作,”然后开始在沙滩漫步,这是他在买下房子后不久铺设的一条路。(部分沙滩漫步穿过卢伯克家族租给达尔文的土地。)
当他一个多小时后回来时,达尔文吃了午饭,回复了更多的信。三点钟时,他会去睡觉小睡一会儿;一个小时后,他会起床,绕着沙滩散步,然后回到书房,直到 5:30,他会和他的妻子艾玛以及他们的家人一起吃晚饭。在这个时间表上,他写了 19 本书,包括关于攀缘植物、藤壶和其他主题的技术书籍;有争议的人类起源;《物种起源》可能是科学史上最著名的一本书,这本书仍然影响着我们对自然和自身的看法。
我学到了什么?
这个系列的最后一部分在 DLND 的第 6 周结束,我现在已经到第 16 周了。以下是我所学内容的简要总结。
第 7–10 周
我花了一段时间,但我终于明白了一个事实,即深度学习需要大量的计算能力。我还了解到 GPU(图形处理单元)特别擅长进行深度学习的计算类型(大规模矩阵乘法等)。我用的是带 Touch Bar 的 2016 款 13 寸 MacBook Pro,它没有专用 GPU。正因为如此,在我的本地机器上训练深度学习模型需要非常长的时间,不理想。
My work station of choice and a nice view from one of my city’s libraries.
大约就在这个时候,我发现了云计算的力量。我过去听说过,但从未完全体验过。如果你几个月前问我什么是 AWS(亚马逊网络服务),我可能一点都不知道。
我仍然没有完全理解云计算,但没关系,你不需要完全理解它来利用它。简而言之,AWS 是一台你可以通过互联网访问的巨型计算机(至少,我是这么告诉自己的)。
第一次浏览 AWS 控制台令人生畏,但在几次失败的尝试后,我设法启动了我的第一个实例。一个实例实际上激活了 AWS 上您可以访问的少量计算能力。我很惊讶。我现在可以通过互联网访问 GPU 的全部功能,在那里我可以训练我的深度学习模型。
第一次体验这种感觉就像开着一辆比你的车快得多的车。突然间,我开始了训练,而不是在本地机器上等待相当于五分钟的微波时间(很长时间)。
Thanks to the internet, my patience with computers has been beaten down to practically zero.
我还发现了 FloydHub 。对我来说,FloydHub 是设计更精美的 AWS 版本(更不用说更便宜了)。我更喜欢使用 Floydhub,因为它很容易安装和运行。通过命令行中的几行代码,您可以开始训练您的深度学习模型。
How quickly you can start training a model using FloydHub.
我喜欢 FloydHub 的另一个原因是他们的网站。布置得太漂亮了。在页面上的几秒钟内,我立即知道它能做什么以及如何使用他们的服务。而 AWS 是一个更陡峭的学习曲线。
还有人对网页设计着迷吗,还是只有我?
有了这些新发现的云计算知识,我能够为 DLFND 进行我的第二个项目。我的任务是使用卷积神经网络对来自 CIFAR-10 数据集的图像进行分类。
在论坛和专门的 Slack 频道的帮助下(谢谢大家!),我设法提交了一个工作的 CNN。当你在 Udacity 上提交一个项目时,会出现一条消息说它将在 24 小时内被审核。我过去认为(现在仍然认为)在 24 小时内对一个项目进行全面的评审是令人惊奇的。在我大学的五年里,我从来没有这么快得到反馈。
令我惊讶的是,24 小时实际上是一个夸大的时间。我在提交后的两个小时内完成了一个完整的项目评审。虽然我没有看它,但我需要在那天剩下的时间里从我的电脑上休息一下。
我的第一次提交远非完美,该项目需要改进,我才能获得及格分数。在重新提交之前,我花了大约 8 个小时(和一个 Udacity 支持成员进行了 3 个小时的实时聊天)来调整超参数、训练模型和改进各种功能。我把第二次提交的材料传了过去。
*我的模型还能进一步改进吗?*当然。但我并没有追求完美。我本来可以再花一周时间努力让模型变得更好,但我的目标是学习深度学习的首要原则,而不是完善我的项目提交,这可以稍后进行。
我的完整提交可以在我的 GitHub 上获得,但是如果没有正确上传请原谅,我正在努力学习如何使用 Git 和 GitHub(稍后会有更多)。
大约在 DLFND 开始 9 周后,我看到吴恩达的 机器学习课程的一个新班级正在 Coursera 上开课。我觉得报名参加这个课程会很棒,可以更深入地了解机器学习,以及深度学习的专业知识。再一次,我没有阅读先决条件就开始了课程。我能学会吗?
A photo of me after starting Machine Learning Course on Coursera without reading the prerequisites.
哦,是的,本着签约的精神,我决定挑战自己,承诺 100 天的代码。我开始了每日媒体系列和每周视频博客记录我的学习。我会更有规律地更新这些内容,每 4-6 周左右写一篇更长的文章。
VLOG 10 of my 100 Days of Code.
第 11–14 周
DLFND 课程的第 3 部分是关于递归神经网络(RNN 氏)。我还不完全理解 RNN 的作品,但我正在慢慢理解这个概念。 Andrej Karpathy 有一篇非常深入的文章关于 RNN 的有效性,我自己正在读。
我认为 RNN 的方法是,他们接受一系列输入,并能够产生单一输出或一系列输出。
来自一系列输入的单个输出在哪里可以派上用场?
比方说,你有一堆电影评论(作为输入的单词序列),你想知道哪些是好的和坏的评论(单个输出)。RNN 可用于对评论进行情感分析,并输出评论是好是坏。
输入序列中的输出序列在哪里使用更好?
以翻译为例。如果你有一个英语句子(作为输入的单词序列)并想将其翻译成法语(作为输出的单词序列),可以使用 RNN 来执行翻译。
当然,现在 RNN 还可以产生其他输出(单输入到多输出),但是我现在让专家来解释这些。我的定义是基本的,但这是我学得最好的方法。我从事物如何工作的总体概念开始,然后慢慢地在此基础上构建。
Siraj 的这个视频展示了一个如何使用 RNN 创作音乐的很酷的例子。
使用长短期记忆(LSTM)网络,Siraj 将采用一系列乐器数字接口(MIDI)并训练 RNN 产生全新的声音。
什么是 LSTM?
我把 LSTM 想象成一系列阀门。如果你把整个 RNN 想象成一个管道系统,水就是流经网络的信息。LSTM 决定有多少水应该流过网络。将这些因素结合起来将有助于微调输出。
再说一次,这是我对他们的看法,还有更多内幕。为了更深入的理解,我推荐这篇阎石的文章。
什么是迷笛?
MIDI 相当于音乐设备的字母表。就像在单词序列是输入(例如,英语)和输出(例如,法语)的机器翻译模型中一样,MIDI 输入序列(例如,旧钢琴歌曲)可以用于生成输出序列(例如,新钢琴歌曲)。
项目 3
使用我们在之前的课程中学到的知识,下一个项目涉及创建我们自己的 RNN,目标是生成一个电视脚本。
网络的输入将是一个数据集,其中包含 27 季《辛普森一家》的剧本,特别是在莫酒馆的场景。使用这个输入序列(文本串),RNN 将被用于产生一个全新的场景(输出序列)。
我不会深入研究这个项目的细节(有机会的话,我会把我的代码上传到 GitHub ),但是在准备好数据和几个小时的构建和训练网络之后,下面是我得到的一些输出。
1)
最低工资和小费。(意味深长地)当然有,但是,嗯,有两个。
荷马·辛普森:你知道什么在搅拌吗?
moe_szyslak:好吧,为什么我有的只是如果这是或者女人的方式他死了。
嘿。抱歉。
韦伦史密瑟斯:嗷。
荷马辛普森:(大笑着,朋友)现在是荷马,我在做一个比我还猪的人(一个热情得可以的家伙)在这种紧张的时候,又有什么好寂寞的。现在,考虑把一个可怕的。
moe_szyslak:(笑)他会?让我赢!答(很荷马)
荷马 _ 辛普森:(对簿)程序。
荷马·辛普森:(笑)现在如果你想上游戏,我就和我的新生活一样”。
homer_simpson:让我们看看什么是玛吉。
少年巴特:(说唱,莫伊)这个角色太好了,哪里是真正的你。
听着,荷马,这是我记得的时间,我一直在用它?
荷马·辛普森:(暂定)
2)
moe_szyslak:喝酒会帮助我们计划。
荷马·辛普森:这个情人节的垃圾必须是一个酒吧。(下车)新健康检查员:除了一个白痴。
(自言自语)对不起,我需要我在你的脚后面。
moe_szyslak:但是我想我有 200 个孩子,所有人都可以用这些孩子。
荷马·辛普森:成为最好的东西?
因为我以为你只说了一个。
(对自己)有人做了一个小的,我能要一个免费的吗?拿着这个!(荷马的声音)
荷马·辛普森:有一个,但我没打算去找出来。
moe_szyslak:(唱)我只想告诉我的生活,直到他们走了!
男人们在女人的绅士世界里游荡。
哦,你不让我呆在这里?不,莫伊。
你知道,是你,莫伊。饮料算你的。
西摩·斯金纳:(叹气)不再是眼睛了。
荷马·辛普森:(笑)好吧。
这些脚本完全由网络生成,我觉得不可思议。它们也很有可能是完全独一无二的,没有人曾经创造过这样的场景。
迁移学习
DLFND 的下一个主题是迁移学习。我认为迁移学习就是把你在一个领域中的知识应用到另一个领域中,而不需要明显地改变它。
所以对我来说,一个真实的例子就是我把我在运动中学到的知识应用到学习中。在过去的七年里,我发现对我来说最好的锻炼方式是设定一个目标,并设定一段时间来实现这个目标。如果我把这些知识应用到学习中,我认为这是迁移学习。
在机器学习/深度学习的情况下,你可以将一个已经在一个数据集上训练过的模型应用于另一个类似的数据集,而不必完全重新训练该模型。能够做到这一点,可以节省大量的时间。
可以使用迁移学习的一个例子是在虚拟模拟中训练机器人,然后使用它在虚拟世界中学到的知识,并将其应用到现实世界的场景中。类似于 OpenAI 用他们的积木堆叠机器人所做的。
如果你想了解更多关于转移学习的信息,我强烈建议你看看来自 Sebastian Ruder 的这篇博文。
项目 4
DLFND 中的第四个项目涉及使用从一种语言到另一种语言的神经网络。
这个项目将利用我们对 RNN 氏症的了解来建立一个能够将一小串英语单词翻译成法语的网络。
如果你在几个月前问我该怎么做,我不会告诉你。现在,我仍然不能完全解释这一过程,但我对谷歌翻译等应用程序如何完成大部分翻译有一个大致的了解。
我发现课程和项目的一个趋势是,我花了大约 50%(有时更多)的时间来完成它们,比预期的工作时间要多。例如,这个项目在最初的描述中有 2 个小时的工作时间,然而,我花了 6 个多小时才完全完成它,如果你包括模型训练时间,那就更多了。我通过 Toggl 跟踪我所有的在线学习,这有助于我了解我的时间被分配到哪里,并帮助我调整/计划我的学习时间表。
A screenshot of the time I spent working on Project 4 from Toggl.
我花了三次提交来为这个项目获得及格分数,主要是因为如果我诚实的话,我的第一次提交有点仓促。这一模式行之有效,但还可以做得更好。
Udacity 评论者的反馈总是很迅速,充满了洞察力和进一步学习的机会。
An example of feedback from a Udacity reviewer.
最后,我的模型仍然不完美,但在将英语单词的一个小句子翻译成法语方面,它做得还不错。我本可以在这个项目上花更多的时间来使它变得更好,但是在花了 6 个多小时试图提高一点点的精确度后,我发现最好是继续前进,继续学习。
我发现的一个重要细节是超参数的多样性。我在 Udacity 论坛上看了看,发现一些学生使用了非常不同的参数,仍然得到了很好的结果。我的直觉告诉我,超参数只是最后一步。如果您的模型一开始就没有正确构建,那么再多的超参数调整也不会有助于它的改进(或者只能有很小的改进)。
An example of my model translating English to French.
我正式创造了一个比我懂法语的模特。
第 15 周—2017 年 7 月 14 日
很难相信我在没有正确使用 GitHub 的情况下坚持到了第 15 周。当我开始学习这门课程时,我使用 git clone 下载了所有的 Udacity 深度学习文件,并从那时起一直使用相同的文件。
这导致了项目 4 的问题。我最终完成了这个项目的一个老版本,当我完成了 80%的时候才意识到这一点。正是因为如此,我决定是时候开始正确使用 GitHub 了。在课程的大部分时间里,我一直忽略它,因为我对它了解得不够,我的工作方式也很好,直到项目 4 事件。
如果还能更好,那就跟坏了一样。—格雷格·普利特
这句话与我完全相关。我的工作流程可以更好。它坏了。
这让我开始在树屋上了解 Git 和 GitHub 。很快,我开始对使用它更有信心了。我还没有完全弄明白,但它现在在我的清单上。我保证在我写下一篇文章的时候,你会在 GitHub 上看到我所有的文件。
第四部分
DLFND 的第 4 部分是关于生成性敌对网络(GANs)的。这就是我现在的情况。
我说我对课程的每一个新部分都感到兴奋,但这一部分已经让我大吃一惊。
2014 年,Ian good fellow在酒吧与朋友交谈后想到了 GANs 这个概念(多么不可思议的创始故事)。
我认为 GANs 是两个相互竞争以产生更好输出的网络。
An overview of GANs.
有一个网络叫做生成器(G ),它接收随机的噪声样本。发生器的目标是从噪声中产生新的样本,这些样本与进入另一个网络(鉴别器(D))的真实样本输入具有相同的概率分布。D 的作用是破译哪个输入是真实的。
随着 G 越来越擅长制作假样本,D 也越来越擅长检测假样本。这两个网络相互竞争,并随着时间的推移在各自的特定角色上变得更好。
如果你在寻找更深入的描述,我建议你看看亚瑟·朱利安尼的这篇文章。朱利安尼用海绵宝宝来比喻甘斯。
由于 GANs 仍然是深度学习领域相对较新的突破,它们的大多数用例可能还没有被发明出来。GANs 目前的一些用途包括生成人脸图像、将草图转换成全尺寸图片( edges2cats )以及将马变成斑马。
Turning a bunch of random lines into pictures of cats. (Source)
CycleGAN turning a horse into a Zebra using styling transfer at 60 fps.
Using GANS to generate and change the direction a face is looking. (Source)
DLFND 即将到来的最终项目包括构建一个 GAN 来生成人脸。我有点害怕又有点兴奋。
到目前为止,我仍然不明白它们到底是如何工作的。在最终截止日期(2017 年 8 月 3 日)之前,我还有几周的课程。
额外学习
当我报名参加 DLFND 时,我几乎没有任何 Python 或机器学习的经验,而且从高中起就没有接触过微积分。
因此,我一直在使用许多其他资源来帮助我学习深度学习所需的技能。
对于 Python,我一直使用的是结合了 Treehouse 和艰难地学习 Python的教材。在撰写本文时,我几乎已经完成了这两篇文章,在写作过程中,我实际上已经学会了所需的 Python 技能。
为了获得一些机器学习的基础知识,我一直在使用 Coursera 上吴恩达的机器学习课程。这是我上过的最好的课程之一。我上周完成了课程(没有正式证书)。
可汗学院的各种课程让我的数学技能达到了标准。我一直在断断续续地学习诸如线性代数、多元微积分、矩阵和向量之类的课程。
我还没有掌握 Git 或 GitHub 的使用,但是 Treehouse 是一个快速提升我在这两个工具上的技能的好方法。我保证,我的 GitHub 在接下来的几周内会有点像样。
我还每隔一天早上使用 Anki 来帮助巩固我的 Python 语法知识。
侧项目
我不知道这是否适合这篇文章,但我想我最好把它放在这里,因为它是我每周投入一部分时间的地方。
5 月底,我终于掌握了几周前开始的 Coursera 的 DLFND 和机器学习课程。这给了我一些时间开始做一些我已经计划了一段时间的副业。
利用我所学的 AWS 和云计算知识。我在免费的 AWS 微层上构建了一个 LEMP 堆栈服务器来托管我一直在计划的一个网站。我花了相当多的时间在谷歌上寻找一些可靠的指南,但我设法用 WordPress 前端安装并运行了它。几天后,我有了一个功能齐全的网站,并开始运行,只需为域名付费。
我的背景是健身和营养,我计划将我从这些不同的课程中学到的技能与我过去学到的知识结合起来,为这个世界带来价值。
我和我的团队有一个目标,那就是帮助世界前进。所以我们搭建了一个*台,连接全世界的健身设施和用户。目前,它在我们的家乡布里斯班发挥作用,但我们计划在未来的某个时候扩展。它可能永远不会起飞,我知道这一点,但这不是重点。旅程就是一切,我宁愿尝试,也不愿根本没有尝试过。
你可以在 useanygym.com 查看我们的进展。更新 2019: 我们失败了。
到目前为止,我还不知道我所学的东西是如何与这个项目联系在一起的,但是我确信我会想出办法的。另外,做自己的项目总是很有趣。
下一步是什么?
如果你要求我,我仍然无法编写一个完整的深度学习模型,但我正在慢慢理解基本概念,并从零开始更好地构建网络。
我还有几周的深度学习纳米学位,所以这是我目前优先学习的内容。
我将继续使用各种在线资源学习 Python,并在未来通过构建一些项目来实践(我将尽我所能来写这些)。
Trello 板块会每隔几天更新一次我学到的东西,所以如果你感兴趣的话,一定要去看看。
我还将在我的中型系列中记录我剩余的 100 天代码,并制作一个关于我一直在做什么的每周 VLOG。
这篇文章是一个系列的一部分,这里是其余的。
- 第一部分:新的开始。
- 第二部分:动态学习 Python。
- 第三部分:广度太多,深度不够。
- 第四部分: AI(营养)对 AI(智能)。
- 第五部分:回归基础。
- 号外:我自创的 AI 硕士学位
我是如何学习深度学习的——第四部分
原文:https://towardsdatascience.com/how-im-learning-deep-learning-part-iv-d26753a4e1ed?source=collection_archive---------2-----------------------
大量数据是最终的前沿吗?
A few of the resources helping me break into the world of AI. — Hinton Image Source
第三部之后发生了很多事情。虽然前两篇文章深入探讨了我到底学到了什么,但这篇文章会有所不同。我不会一周一周地分解它,我会涵盖主要的里程碑。
我是去年 8 月从 Udacity 深度学习纳米学位 (DLND)毕业的。想想我是如何在开课前给支持团队发邮件询问退款政策的,我就觉得好笑。这无疑是我参加过的最好的学习项目之一。如果你想了解更多细节,我最*在 DLND 上发布了一个深度回顾视频。
制作关于我的旅程的视频让我与同路的其他人进行了一些很棒的对话。我在加拿大遇到一个人,他和我学的课程几乎完全一样。更有趣的是,我们房间里有一张和阿诺一模一样的海报。世界真小。
最*,我有机会与来自印度的 14 岁人工智能开发者 Shaik Asad 进行了一次对话。完成作业后,他自学人工智能。从那以后,我们一直在积极地谈论生活和我们的其他兴趣。看到 Shaik 对人工智能的热情,听到他的目标是什么,灵感是一种轻描淡写的说法。
AI 硕士学位
从 DLND 毕业后,我就像车灯前的小鹿。我已经了解了深度学习(DL)的惊人力量,但仍然没有完全理解是什么让深度神经网络运转起来。我还想知道 DL 是否是人工智能的全部和终结(后面会有更多)。
我需要知道更多。好奇心促使我创建了自己的 AI 硕士。有一个粗略的课程大纲可以让我缩小如何度过我的时间。我的使命是用 AI 帮助人们多运动,吃得更好。我在健身和营养世界的游戏中有皮肤,我在人工智能方面工作。
在过去的几个月里,我已经完成了吴恩达和 deeplearning.ai 团队的 Coursera 深度学习专门化(课程 5 在撰写本文时刚刚发布)的 80%,以及 Udacity 人工智能纳米学位 (AIND)的第一学期。
对于那些从基础方法学习的人来说,deeplearning.ai 专业化是开始学习 DL 的最好地方。如果你对项目建设更感兴趣,或者想继续学习 Udacity 的高级纳米学位,可以从 DLND 开始。
AIND 的术语 1 涵盖了经典的人工智能方法。由于我缺乏编程能力和最*对 DL 的关注,我有时会迷失自己。然而,了解这个领域自诞生以来已经取得了多大的进展是令人着迷的。
我现在进入第二学期,包括使用 DL 在计算机视觉、自然语言处理和语音识别方面构建项目。回到熟悉的鱼缸里。
一旦我完成了 deeplearning.ai 和 AIND,我会发布对它们的全面深入的评论。
人工智能的未来
在了解了更多关于 DL 的工作原理后,我开始怀疑它的长寿前景。许多 DL 模型需要大量的数据来产生有用的输出。
如果你是世界上拥有足够数据让泰坦尼克号继续航行的两家公司之一,这很好,但如果你是一个年轻的人工智能希望,这就不太好了。深度学习已经带来了许多令人难以置信的见解,但其中许多是在监督学习的领域,这仍然需要大量的人力投入。
虽然我们收集和产生数据的能力正在呈指数增长,但我不相信更多的数据是解决我们所有人工智能问题的关键。
我们真的只是数据处理机器吗?上个世纪,人们认为我们的内部过程可以用蒸汽机的概念来模拟。想到了有锤子问题的人。
反向传播(一种帮助神经网络自我改进的算法)在未标记的数据上工作得不是很好,这些数据是组成宇宙的大部分。
想象一个四岁的孩子走进一个他们从未去过的房间。年幼的孩子不需要一万张贴有标签的房间图片就能知道如何导航。他们甚至不需要一个房间的标签图像,他们只是开始与它互动。
甚至深度学习的教父似乎也在沿着同样的思路思考。在去年年底的一次采访中,杰弗里·辛顿被问及他对人工智能技术现状的看法。
"我的观点是抛弃这一切,重新开始。"
“未来取决于某个对我所说的一切深感怀疑的研究生。”
听了 Monica Anderson 的讲座和演讲(尤其是关于 T2 的双过程理论的讲座和演讲)并发现她在人工直觉作为人工智能方法方面的工作提出了更多的问题。
我将在以后的文章中更深入地探讨这些话题。
后续步骤
在接下来的几个月里,我将完成我为自己设定的课程。
我刚刚提交了 AIND 第二学期的第一个主要项目,一个检测面部关键点的计算机视觉模型。
对于每个即将到来的主要项目,我将发表一篇文章,详细介绍我对这项工作的理解,以及为那些希望建立一个等效的一步一步的指导。
我也非常喜欢麻省理工学院提供的关于人工通用智能和自动驾驶汽车深度学习的免费课程。
完成 AIND 后, fast.ai 似乎很可能是我的下一个停靠站。
当我完成我的课程时,我将寻求搬到美国,加入健康和人工智能领域的创业公司(或创建我自己的公司)。如果你认识任何人,或者认为我应该关注目前在健康和人工智能十字路口的任何人,请告诉我。
对于那些考虑开始自己的自主学习之旅或了解更多人工智能的人来说,Naval Ravikant 的话完美地总结了这一点。
当前的教育体系是一种路径依赖的结果。我们现在有互联网,如果你真的有学习的欲望,一切都在互联网上。学习的能力、方法和工具是丰富的和无限的,学习的欲望是难以置信的稀缺。
第五部见。
这篇文章是一个系列的一部分,这里是其余的。
- 第一部分:新的开始。
- 第二部分:动态学习 Python。
- 第三部分:广度太多,深度不够。
- 第四部分: AI(营养)对 AI(智能)。
- 第五部分:回到基础。
- 额外:我自创的 AI 硕士学位
我如何学习深度学习——第五部分
原文:https://towardsdatascience.com/how-im-learning-deep-learning-part-v-df73a535dd9?source=collection_archive---------8-----------------------
A Day In The Life Of A Machine Learning Engineer on YouTube.
回归基础。
**重大更新:**我被聘为机器学习工程师。麦克斯·凯尔森太牛了。我们正在研究一些很酷的东西。周一是研究日。我制作了一部短片来展示我们在做什么。
从上个帖子开始,我毕业于 Udacity 的人工智能纳米学位。这是一门很棒的课程。我拍的最好的一张。
许多人伸出手来,问自己在某个地方得到一个角色是否足够。
简短回答:不完全是。
稍微长一点的回答:是的,如果你能够通过自己的项目或其他课外活动有效地交流你所学到的东西。
我认为,工作准备来自于参加吴恩达的 deeplearning.ai 或 Udacity 的 AI Nanodegree 等课程,然后利用你所获得的知识寻找自己的项目。一些让你足够感兴趣的事情,让你去做一段时间,并与世界分享你的旅程。我还没有真正做到这一点。
有一些很棒的在线课程,但是当你在解决一个问题时,没有什么能让你做好准备,你必须自己寻找答案。
回归基础
我开始用深度学习学习 Python。有点像被丢在山顶而没有爬完剩下的部分。
自从在 Max Kelsen 开始工作以来,我的大部分时间都花在清理和准备数据集上,以便在上面使用机器学习和深度学习技术。
基础可能是个错误的词。但经过一些实践经验后,我发现深度学习在数据方面只是冰山一角。如果您的数据看起来像本地转储,那么准备好史诗级深度学习模型就没有意义。
俗话说的好。
垃圾进,垃圾出。
但是,改变这种说法是一个崭露头角的机器学习工程师或数据科学家的职责。
垃圾进来,美丽出去。
为了对此有所帮助,我从 Wes McKinney 那里得到了一本关于使用 Python 进行数据分析的书。它与我们最*工作的相似之处令人震惊。
我哥哥和我正在 Coursera 上应用数据科学与 Python 专业。它补充了这本书。我甚至用了前几天在工作中的一个讲座中学到的精确函数。
未来深度学习课程
第一部是史诗级的。我喜欢杰里米的教学方式。他是一个真正的从业者。
不过,在继续第 2 部分之前,我将先浏览一下 Jeremy 的机器学习讲座和 Rachel(fast . ai 的联合创始人)关于计算线性代数的系列讲座。
在这些之后,我会寻找一些基因组学和人工智能主题的课程。健康和科技的交叉让我着迷。在 Max Kelsen,我们很快将开始一项分析全基因组的项目,试图为癌症患者找到更个性化的治疗方法。我等不及了。
在不久的将来,我计划将这些技能带到营养基因组学领域,或与你的 DNA 相匹配的营养学领域。
一如既往,这些将在我的 Trello 板上显示。
你能做什么?
如果你想学习深度学习和机器学习。太好了。你会经历一场地狱之旅。
但是要注意,并不是你在网上课程之外找到的所有数据都有一个整洁的小包装。
一定要称赞你的深度学习和机器学习能力,有能力获取数据集,操纵它,精心打扮它,并带它出去吃饭,你将拥有一套危险的(以好的方式)技能。
编程语言其实也不重要。挑一个坚持下去。我选择了 Python。我每天都努力提高一点。
这篇文章是一个系列的一部分,这里是其余的。
第一部分:新的开始。
第二部分:动态学习 Python。
第三部分:广度太多,深度不够。
第四部分: AI(ntuition)对 AI(intelligence)。
第五部分:回归基础。(你目前正在阅读这篇文章)
号外:我自创的 AI 硕士
信息技术如何影响风险管理?
原文:https://towardsdatascience.com/how-information-technologies-influenced-risk-management-7eb3a38d253?source=collection_archive---------0-----------------------
Risk management process / Image Source: www.edarabia.com/229684/pmi-risk-management-professional-pmi-rmp-abu-dhabi-uae
1.介绍
风险管理是一项非常需要的核心能力,可以帮助组织随着时间的推移交付和增加利益相关者的价值。良好的风险管理需要更好的数据和信息,因此组织可以对不断变化的风险清单采取行动。
风险管理团队必须促进和鼓励当前和前瞻性风险信息的获取、分析和交付。预测风险信息可以帮助管理层做出更明智的决策,并帮助他们采取行动,产生更可靠的结果。
计算和风险技术的发展,以及利用大数据、分析、移动应用、云计算、企业资源规划(ERP)和治理、风险和合规(GRC)系统的新技术的相关发展,对风险管理也很重要。这些技术进步为风险管理者和那些参与改进现有风险管理计划的管理人员或组织外部人员提供了增强风险管理有效性的更好能力。
在这份报告中,我将试图总结信息技术和风险管理之间的关系,以及信息技术的发展如何影响风险管理领域。
2.风险管理
2.1.什么是风险管理?
风险管理是识别、评估、评价和控制对组织资本和收益的威胁的过程。这些威胁或风险可能来自各种来源,包括财务不确定性、法律责任、战略管理失误、事故和自然灾害。[18]
2.2.风险管理流程
所有的风险管理计划都遵循相同的步骤,这些步骤共同构成了整个风险管理过程:[18]
1.风险识别:公司识别并定义可能对特定公司流程或项目产生负面影响的潜在风险。
2.风险分析:一旦确定了特定类型的风险,公司就可以确定风险发生的可能性以及风险的后果。分析的目标是进一步了解风险的每个具体实例,以及它如何影响公司的项目和目标。
3.风险评估和评价:在确定风险发生的总体可能性及其总体后果后,对风险进行进一步评估。然后,公司可以根据其风险偏好来决定风险是否可接受以及公司是否愿意承担风险。
4.风险缓解:在这一步骤中,公司评估其最高级别的风险,并制定计划,使用特定的风险控制来缓解风险。这些计划包括风险缓解流程、风险预防策略和风险实现时的应急计划。
5.风险监控:缓解计划的一部分包括跟踪风险和整体计划,以持续监控和跟踪新的和现有的风险。整体风险管理流程也应进行相应的审查和更新。
2.3.风险管理策略
在确定了公司的具体风险并实施了风险管理流程后,公司可以针对不同类型的风险采取几种不同的策略:[18]
1.风险规避:虽然完全消除所有风险几乎是不可能的,但风险规避策略旨在转移尽可能多的威胁,以避免破坏性事件的高成本和破坏性后果。
2.降低风险:公司有时能够降低某些风险对公司流程的影响。这是通过调整整个项目计划或公司流程的某些方面,或通过缩小其范围来实现的。
3.风险分担:有时,风险的后果被分担,或分布在项目的几个参与者或业务部门中。风险也可以由第三方分担,如供应商或业务伙伴。
4.风险保留:有时,公司决定从商业角度来看风险是值得的,并决定保留风险和处理任何潜在的后果。公司往往会保留一定程度的风险,一个项目的预期利润大于其潜在风险的成本。
2.4.风险管理标准
自 21 世纪初以来,一些行业和政府机构扩大了监管合规性规则,以审查公司的风险管理计划、政策和程序。越来越多的行业要求董事会审查和报告企业风险管理流程的充分性。因此,风险分析、内部审计和其他风险评估手段已经成为企业战略的主要组成部分。
风险管理标准已由多个组织制定,包括美国国家标准与技术研究所和 ISO。这些标准旨在帮助组织识别特定的威胁,评估独特的漏洞以确定其风险,确定降低这些风险的方法,然后根据组织战略实施风险降低措施。
例如,《ISO 31000 原则》提供了改进风险管理流程的框架,无论公司的规模或目标部门如何,都可以使用这些框架。根据 ISO 网站[13],ISO 31000 旨在“增加实现目标的可能性,改善对机会和威胁的识别,并有效地分配和使用风险处理资源”。虽然 ISO 31000 不能用于认证目的,但它可以帮助为内部或外部风险审计提供指导,并允许组织将其风险管理实践与国际公认的基准进行比较。
ISO 建议以下目标领域或原则应成为整体风险管理流程的一部分:
- 这个过程应该为组织创造价值。
- 它应该是整个组织过程的一个组成部分。
- 它应该成为公司整体决策过程中的一个因素。
- 它必须明确解决任何不确定性。
- 它应该是系统的和结构化的。
- 它应该基于现有的最佳信息。
- 应该根据项目量身定制。
- 它必须考虑到人为因素,包括潜在的错误。
- 它应该是透明的和包罗万象的。
- 它应该能适应变化。
- 应该不断对其进行监测和改进
ISO 标准和其他类似的标准已经在世界范围内制定,以帮助组织系统地实施风险管理最佳实践。这些标准的最终目标是建立通用框架和流程,以有效实施风险管理策略。
这些标准通常得到国际监管机构或目标行业团体的认可。它们还会定期补充和更新,以反映快速变化的业务风险来源。尽管遵循这些标准通常是自愿的,但行业监管机构或商业合同可能会要求遵守这些标准。
2.5.企业风险管理
企业风险管理包括各组织用来管理风险和抓住与实现其目标相关的机会的方法和流程。机构风险管理提供了一个风险管理框架,通常涉及确定与组织目标(风险和机会)相关的特定事件或情况,从影响的可能性和程度方面对其进行评估,确定应对战略,并监测进展情况。通过识别和积极应对风险和机遇,工商企业保护并为其利益相关者创造价值,包括所有者、员工、客户、监管者和整个社会。[2]
2.6.治理、风险管理和法规遵从性(GRC)
治理、风险管理和法规遵从性(GRC)是一个涵盖组织在这三个领域的方法的总称:治理、风险管理和法规遵从性。GRC 被正式定义为“使组织能够可靠地实现目标、解决不确定性并诚信行事的能力的集成集合。”[1]
GRC 是一个旨在跨治理、风险管理和合规同步信息和活动的学科,以便更有效地运营、实现有效的信息共享、更有效地报告活动并避免浪费的重叠。尽管在不同的组织中有不同的解释,但 GRC 通常包括诸如公司治理、企业风险管理(ERM)和公司遵守适用法律法规等活动。
组织达到需要对 GRC 活动进行协调控制才能有效运营的规模。这三个学科中的每一个都为其他两个学科创造了有价值的信息,并且这三个学科都影响着相同的技术、人员、流程和信息。
当独立管理治理、风险管理和法规遵从性时,会出现大量重复任务。重叠和重复的 GRC 活动会对运营成本和 GRC 矩阵产生负面影响。[8]
3.风险信息
有效的风险计划应该为管理层提供增强的能力,以持续捕捉、评估、分析和应对因内部运营、外部市场或法规变化而产生的风险。不能有效地管理这些变化会产生财务损失、负面宣传,并影响组织目标或任务的实现。因此,有效的风险计划考虑、评估并为组织的规划、绩效衡量提供输入,并支持评估潜在的负面事件及其对组织既定风险偏好和容忍度设定流程的影响。此外,请注意,信息和沟通是基本的框架组件,但更重要的是反馈工具。
拥有及时的信息是有效的机构风险管理计划的关键。例如,立即知道一个关键供应商经历了原材料供应链的重大中断,使客户能够调用供应链弹性计划,以快速在其他地方获得替代材料。如果没有及时的信息,供应商的中断也可能会中断其客户的制造流程。管理层必须持续监控内部运营、供应商、关联方、交易对手和客户,以寻找必须解决的不断变化的情况,从而降低损失风险。
4.风险管理和信息技术
信息技术的发展已经影响到我们生活的每个领域,如学习、营销、商业、娱乐和政治。风险管理是受这种发展影响很大的领域之一,因为它主要基于数据。日复一日,信息技术促进了从风险识别到监控过程的自动化。大数据、分析、移动应用、云计算、企业资源规划(ERP)以及治理、风险和合规(GRC)系统等新技术的开发对于风险管理非常重要。这些技术进步为风险管理者和那些从事改进的管理人员或组织外的人员提供了机会。
在这一部分,我将描述不同信息技术领域在风险管理中的作用。
4.1.基本风险可视化程序
信息技术影响风险管理领域的第一个基本因素是不太复杂和不太昂贵的应用程序的基础,如 Microsoft Excel、PowerPoint 和 SharePoint 等办公自动化工具,这些工具在大、中、小型组织中广泛用于风险跟踪和报告目的。
此外,还有许多由著名服务提供商发明的基本威胁建模程序,如微软[20],以及许多其他程序,如 CORAS 威胁建模[19]。
4.2.社会化媒体
一些企业现在积极监控社交媒体内容(例如 Yelp ),以收集关于客户服务、产品质量或服务交付问题的及时见解。在这种情况下,广泛和即时可用的社交媒体内容提供了关于公众对企业产品和服务的看法的宝贵见解,这有助于企业通过提供管理工具来避免声誉受损,这些工具可以在服务和产品质量问题造成严重的品牌或特许经营损害之前快速解决它们。[9]
4.3.数据集成和分析
许多组织目前已经在生产中拥有大型和广泛的数据库,许多 IT 部门正在积极地将这些数据库与现有应用程序更好地集成,以从 IT 投资中获取更多价值。许多数据库包含风险数据点,这些数据点也可以被更强大的计算*台提取、“挖掘”或摄取,从而随着时间的推移提供更多的组织价值。组织的首席信息官(CIO)现在使用的工具包括电子数据仓库(edw)、“大数据”、商业智能(BI)应用和信息分析技术。[9]
这些工具可以辅以强大的数据提取、转换和加载(ETL)技术,这些技术为从难以定位和解析的数据文件中提取价值提供了更大的自由度。虽然风险经理最初可能不是这种数据集成投资的预期受益者,但是许多组织仍然在为此目的使用这些工具。
此外,大数据分析可以在许多与市场风险分析相关的领域提供帮助:[21]
-欺诈管理:快速识别欺诈,将损失降至最低
-信用管理:更好的预测能力,新的数据来源允许预测用户行为
-洗钱:更快发现问题,实时反应
-市场和商业贷款:允许更好地模拟和预测市场和公司
-运营风险:对与客户的互动提供更多控制和知识,提高安全性。
-综合风险管理:在出现金融风险的不同部门和领域提供全球视野
4.4.数据挖掘
此外,对于我们在上一部分中提到的数据分析的使用,组织可以从数据挖掘技术中受益,以预测组件或机器的故障,识别欺诈,甚至预测公司利润。与其他数据挖掘技术结合使用,预测包括分析趋势、分类、模式匹配和关系。通过分析过去的事件或实例,你可以对一个事件做出预测。
例如,使用信用卡授权,您可以将对单个过去交易的决策树分析与分类和历史模式匹配结合起来,以识别交易是否是欺诈性的。在购买飞往美国的航班和在美国的交易之间进行匹配,很可能交易是有效的。[6]
4.5.开放数据
开放数据是这样一种理念,一些数据应该免费提供给每个人使用和重新发布,不受版权、专利或其他控制机制的限制。[23]
如今,大多数组织都可以通过实时数据源即时获得有关不断变化的经济状况和市场的数据。商业新闻服务提供商,如 Thompson Reuters、Blackrock、彭博、道琼斯和华尔街日报,都提供有关金融资产和市场价值变化的最新信息。这种数据馈送还可以用来支持成熟的机构风险管理方案和风险监测流程,这些信息服务对股票交易和资本市场参与者的影响是显而易见的。[9]
许多全球性组织正变得越来越全球一体化,并跨境运营非常复杂的业务流程。当市场条件发生实时变化时,这样的组织在纳秒内执行交易、评估和采取行动。
许多新一代面向大数据、“基于分析”的 BI 系统已经支持智能决策、交易处理和数据可视化,这些都是监控风险和运营绩效的有用工具。
4.6.云计算
在评估 GRC 应用程序时,基于云的 IT 环境的发展也是人们可能希望或需要了解和考虑的事情。提供“按需”GRC 软件即服务(SaaS)的基于云的 IT 环境利用了基于*台的操作系统和相关基础设施及中间件软件的固有虚拟化功能,为“租户”用户提供了比购买 GRC 应用程序并在内部运行更高效、更经济的替代方案。基于云的应用程序,或“租户”,以及使用它们的组织提供并收取这些应用程序的用户所需的处理能力的费用。[9]
基于需求的使用和收费方案为用户提供了更大的灵活性,因为它要求用户只在运营业务所需的应用程序上花钱。基于云的应用程序利用了规模经济的优势,SaaS 允许多个租户用户组织使用云托管的应用程序,同时支持多种 IT 使用案例。
4.7.物联网
对于风险经理来说,物联网可以归结为在业务之上引入一层技术。运营不需要重新发明。这为依赖管理风险的组织提供了一个不可或缺的工具。通过为公司配备更多连接到互联网的传感器和设备,组织能够收集更多实时数据来推动商业价值。这对管理风险也有很大影响。
例如,使用物联网来帮助用射频识别(RFID)标签标记资产。这有助于监控从起重机等设备的维修间隔到确保发电机具有正确的燃料水*的一切。[3] [4]
物联网使决策者能够发现趋势,适应不断变化的市场条件,并改进他们的战略。此外,物联网主导的方法可以应用于任何企业,无论是零售商、医疗机构、初创公司,甚至是建筑公司。
通过利用物联网等新兴技术并实施集成系统,您可以收集和分析来自多个位置的无限数量来源的海量数据。通过这种方式,您可以改进运营流程以提高报告的及时性,并利用数据来推动预防措施,让您在潜在风险面前领先一步。
4.8.数字图象处理
图像处理是将图像转换成数字形式并对其进行某种操作,以获得增强的图像或从中提取一些有用信息的方法。[17]
从 1997 年开始,图像处理被引入作为医疗风险评估的工具。应用于高分辨率乳腺热像图的图像处理技术用于预测乳腺癌。目标是观察由于温度差异和/或观察到的泡状结构区域和其他“热点”导致的热模式的不对称性。[16]
此外,图像处理还被用于预测自然风险,如森林火灾,处理和分析由飞机或卫星*台上的传感器捕获的图像。图像衍生产品用于火灾风险的火灾前评估、火灾范围和移动的实时绘图、烧伤范围和严重程度的火灾后分析以及火灾后恢复。[14] [15]
4.9.网络安全
网络安全是旨在保护网络、计算机、程序和数据免受攻击、破坏或未经授权访问的技术、流程和实践的集合。[5]
风险管理人员必须受益于领先的网络安全公司,如赛门铁克、卡巴斯基等,这些公司定期发布最新的威胁、恶意软件和系统漏洞。这将使他们对使用技术时可能发生的风险有更多的了解,从而提高意识并选择适当的安全防御措施来防止风险。
网络安全最成问题的因素之一是安全风险的快速和不断演变的性质。传统的方法是将大部分资源集中在最关键的系统组件上,并防范已知的最大威胁,这使得一些不太重要的系统组件和一些不太危险的风险无法防范。这种方法在当前环境下是不够的
4.10.人工智能
人工智能是一种“认知技术”,它扩展了过去被认为是人类过程的东西——如思考、学习和预测——并将它们嵌入到联网的机器中。此外,由于谷歌、IBM 和微软等主要开发商如今通常可以免费获得这项技术,初创公司就像资金雄厚的大型组织一样能够颠覆行业。
例如,在风险管理中,人工智能可用于将政策、程序和控制与监管机构和监管变化相结合,以提高其组织的合规性。[24] [25]
5.挑战
正如我们在上一节中所描述的,风险管理受到信息技术兴起的极大影响。然而,我们必须考虑到每一种可以使用的技术都有其自身的风险。因此,在使用一项技术时,我们必须意识到所有潜在的漏洞。
例如,当在云上存储企业数据以便在风险评估流程中使用时,我们可能会遇到隐私问题,尤其是在使用机密数据时,例如新发明的产品或战略计划。[22]
另一方面,每个组织都必须有精通知识的 IT 专家,以便能够处理使用某项技术带来的任何风险。或者,公司必须与外部 IT 公司签订合同,这可能会导致隐私泄露
6.摘要
在本报告中,我们简要概述了风险管理,其中我们描述了流程、方法和标准。之后,我们谈到了信息收集在风险管理中的重要性。然后我们讨论了影响这个领域的信息技术,从可视化程序开始,到人工智能结束。
另一方面,我们谈到了在使用这些技术时发现的一些挑战。
未来可以做的工作之一,是研究使用信息技术来评估一个组织中的风险会带来哪些风险,以及许多技术的集成是否会有风险。
7.参考
- [1] OCEG,“GRC 能力模型”,网址:https://go.oceg.org/grc-capability-model-red-book,访问日期:2017–12–25
- [2]托马斯·h·斯坦顿,“企业风险管理”,网址:【https://www.youtube.com/watch?v=voGyHN-tWMg ,访问日期:2017–12–25
- [3] Beatrix Knopjes,“为什么物联网是集成风险管理的未来”,URL:【https://www.isometrix.com/iot-in-risk-management/ ,访问日期:2017–12–25
- [4] Hein Koen,“物联网如何有利于风险管理”,网址:http://www . riskmanagementmonitor . com/How-the-Internet-of-Things-Benefits-Risk-Management/,访问日期:2017–12–25
- [5]玛格丽特·劳斯,“什么是网络安全?”,网址:http://whatis.techtarget.com/definition/cybersecurity,访问日期:2017–12–25
- [6]马丁·布朗,《数据挖掘技术》,网址:https://www . IBM . com/developer works/library/ba-Data-mining-techniques/,访问日期:2017–12–23
- [7]约翰·史派西,“7 种风险清单”,网址:https://simplicable.com/new/inventory-risk,访问日期:2017–12–24
- [8] OCEG,“风险管理是 GRC 和原则性绩效的核心”,URL:https://www.oceg.org/about/people-like-you-risk/,访问日期:2017–12–26
- [9]汤姆·帕特森,“信息技术在风险管理中的应用”,出版日期:2015 年 9 月
- [10] Michael Thoits,“企业风险管理技术解决方案”,出版日期:2009 年
- [11] Maryam Teymouria 和 Maryam Ashoori,“信息技术对风险管理的影响”,出版日期:2010 年
- [12] Hamidi Tohidi,“风险管理在组织的 IT 系统中的作用”,出版日期:2010 年
- [13] ISO 组织,“ISO 31000 —风险管理”,网址:https://www.iso.org/iso-31000-risk-management.html,访问日期:2017–12–26
- [14] Douglas Stow,“遥感和图像处理在火灾管理中的作用”,URL:【http://map.sdsu.edu/Notes/stow-remotesensing.htm, 访问日期:2017–12–26
- [15]PRIYADARSHINI M . HANAMARADDI,“森林火灾探测图像处理的文献研究”,出版日期:2016 年 12 月
- [16] C.A. Lipari 和 J.F. Head,“用于乳腺癌风险评估的高级红外图像处理”,出版日期:1997 年 10 月 30 日
- [17] EngineersGarage,《图像处理导论》,网址:https://www . engineers garage . com/articles/image-processing-tutorial-applications,访问日期:2017–12–26
- [18]玛格丽特·劳斯,“什么是风险管理?”,网址:http://search compliance . tech target . com/definition/risk-management,访问日期:2017–12–23
- [19]“CORAS 方法”,网址:http://coras.sourceforge.net/,访问日期:2017–12–26
- [20]微软,《微软威胁建模工具 2016》,网址:https://www.microsoft.com/en-us/download/details.aspx?id=49168,访问日期:2017–12–26
- [21] ICAR,“大数据如何帮助金融风险管理?”,网址:https://www . icar vision . com/en/how-does-big-data-help-with-financial-risk-management-,访问日期:2017–12–25
- [22] CEPIS,“云计算安全与隐私问题”,网址:https://www.cepis.org/index.jsp?p=641&n = 825&a = 4758,访问日期:2017–12–26
- [23] Auer,S. R .和 Bizer,c .和 Kobilarov,g .和 Lehmann,j .和 Cyganiak,r .和 Ives,z .“DBpedia:开放数据网的核心”,出版日期:2007 年
- [24]企业风险,“人工智能与风险管理”,网址:https://enterpririsgmag . com/ARTIFICIAL-INTELLIGENCE-Risk-MANAGEMENT,访问日期:2017–12–27
- [25]彭博,“人工智能是金融风险管理的游戏规则改变者”,网址:https://www . Bloomberg . com/professional/blog/Artificial-Intelligence-game-changer-risk-management-finance,访问日期:2017–12–27
物联网将如何变革教育行业
原文:https://towardsdatascience.com/how-iot-is-going-to-revolutionize-education-industry-f6ea952e9669?source=collection_archive---------9-----------------------
技术无处不在,它正在改变我们的生活、学习和工作方式!从汽车到洗碗机,日常用品正在成为互联设备,智能手机正在成为生活的完全遥控器。根据 Statista 的数据,预计全球“物联网”设备的安装数量将增长至* 310 亿台。如今,物联网正在改变各行各业,教育领域也不例外。传统上,学习的起源仅限于教室、会议、在线教程等,但随着物联网的出现,这开始缓慢而稳步地转向更好的方向。
那么,物联网到底能如何颠覆这个行业呢?让我们仔细看看!
将世界各地的人们联系起来
想象一个场景,学生坐在他们的舒适区,与世界各地的教育者和同龄人互动,所有人都可以模仿个人互动。嗯,很有可能。智能板和数字荧光笔允许将印刷文本传输到手机或任何其他设备,然后,交互式板可以接收、确认和回复信息(我们做的一个这样的试点项目的快速演示在这里),使学习互动和有趣,并且人人都可以使用。
教材增强
还记得翻遍图书馆书架寻找参考资料和辅助材料吗?随着技术的进步,这已经成为过去。如今,几乎所有的教科书都有一个二维码,可以扫描该二维码,以便在他/她的设备上获取教科书。他们可以轻松下载或将书保存到 iBooks,并在任何地方开始阅读。更重要的是,在电子书的情况下,如果你正在寻找一些特定的东西,你可以直接搜索并立即找到它,而不是花很长时间翻阅页面来找到它。
残疾人的援助之手
除非你听力不好,或者你与听力好的人关系密切,否则你根本不知道什么是手语,这对依赖手语的人来说是令人沮丧的。在物联网的帮助下,手语现在可以被翻译成文本和语音。这也是确保听障人士能够获得尽可能最好的手语教育的一个很好的方式。每当戴着手套的学习者做手势时,传感器就会获取信号,进行分析,并提供关于他/她的准确性的反馈。
提高效率
使用物联网简化日常运营有助于更加专注于实际的教学活动,例如,自动检测学生在学校的设备可以消除考勤需求,还允许学校官员向家长发送电子消息。他们可以与物联网传感器合作,并使用它来为经过验证的进入者开门,并在出现任何不速之客的情况下向管理层发送警报。
安全
一所学校里有成千上万的学生,监视他们每个人的行踪和活动是一项不可能完成的任务。射频识别(RFID)芯片使用无线电波来读取和捕获数据,这些数据作为标签存储在物体上,可以在几英尺外读取,不需要在数据收集器的直接视线范围内。
这有助于当局和家长在任何给定的时间点监控学生,在增强安全性方面增加了巨大的价值。启用 GPS 的公共汽车系统意味着可以跟踪路线和公共汽车的运动。此外,学生可以在公交车到达时得到通知,从而缩短不必要的等待时间。
根据皮尤研究中心的数据,95%的青少年有智能手机,45%的人说他们“几乎经常”在线。那么,有了这样的统计数据,在采用“智能学校”的学校和大学的帮助下,有什么更好的办法来尝试和引导他们持续的网瘾变得更好呢?物联网确实正在改变教育领域,让学习变得更简单、更快速、更安全。在这些技术的帮助下,地理、语言、残疾等常见的教育障碍将不复存在。然而,这仅仅是一个开始,我们才刚刚开始触及未来基于技术的教育的表面。
最初发布于:binary 乡亲
大型企业如何利用人工智能/机器学习
原文:https://towardsdatascience.com/how-large-enterprise-can-leverage-artificial-intelligence-machine-learning-715c0bdc27ec?source=collection_archive---------2-----------------------
我们在新闻中听到了很多关于机器学习的消息,并且开始变得很难将双曲线和令人兴奋的未来主义预测与务实的现实世界商业应用分开。我热爱人工智能领域,它每天都激励着我,但人工智能往往看起来像是发生在一个遥远的先进技术领域,或者只有谷歌、脸书和亚马逊的企业在实施它。认为这是错过了一个相当大的机会,其他企业已经在利用这个机会。实际上,我认为大企业比更常见的“小”、“灵活”和“颠覆性”的创业部门有独特的优势。大型企业在实施改变游戏规则的机器学习产品或利用机器学习来获得更高的运营效率方面具有优势。这是因为大企业有两个巨大的优势。1)您有一个现有的客户分销网络。但最重要的是在机器学习的背景下,2)你有方式更多的专有数据来训练机器学习算法,而初创公司根本无法获得这些数据。
首先,在谈论这个话题时,你会经常听到三个常见的短语:“人工智能”、“机器学习”和“深度学习”是最常见的。把它们放在一个概念层次中考虑。“人工智能”或“AI”处于顶端,它是计算机科学的整个学科,试图使用机器/软件复制智能推理和行为。人工智能的一个特别强大的策略是所谓的“机器学习”,本质上是指通过给计算机大量数据来学习,教它做一些事情。机器学习算法实际上是非常强大的模式识别过程。在大量数据示例中查看模式是机器学习的目的。最后,“深度学习”是机器学习策略中的一个特殊算法家族,它被发现非常擅长解决以前我们无法解决的人工智能问题(对象识别、理解文本和语音)。出于本文的目的,我经常将机器学习和人工智能作为同义词,但现在你知道了,它们不是。
想想机器学习和人工智能,因为它可以应用到您的业务中,就像高级模式识别一样! 如果你是一名企业领导者,正在阅读这篇文章,最好的办法是不要陷入技术实现或炒作,而是为自己建立一个概念镜头,这样你就可以审视你组织的各个领域,并开始注意到自己应用机器学习的机会。然后就可以更深入的看技术实现了。这里有一些问题要问你自己:
- **数据在哪里?**您在组织的哪个部门收集或利用大量数字数据?(这里的很多是指 10 万到 100,000,000 以上的记录。这些数据可能是客户交易、销售记录或支持票据。与应用程序的一些交互。不可能先验地说你所拥有的数据是否足够。机器学习算法需要大量高质量的数据来开始形成可靠的预测和假设。根据数据的质量,你可能需要更多。高质量的数据越多越好。在这些数据密集的领域,您可以开始利用机器学习来发现复杂的模式并加以利用。重要的是,这些数据需要是机器可读的。如果你有数百万份客户记录,但它们都在纸质文件夹中,你首先需要考虑数字化,然后才能梦想利用机器学习。一个常见的例子是使用机器学习来阐明销售线索列表中的模式,这些模式基于哪些销售线索关闭和哪些未关闭,以便您可以根据关闭概率对销售线索列表进行排序/优先排序,从而提高内部销售团队的转化率,因为他们首先将时间花在关闭销售线索的最高概率上。
- 你在哪里做预测?您在公司的哪个部门使用数据进行预测?这通常包括财务预测、需求预测、营销预测等。预测越大,从越多的数据中进行预测,机器学习就越适用于提高这些预测的准确性。您的业务分析师可能已经使用了一种称为无监督聚类的机器学习技术来创建客户细分,但您还可以开始做更多的事情。例如,使用历史需求数据、所有 CRM 数据,甚至天气数据,实时进行高度准确的需求预测。
- **重复的流程在哪里?**哪些重复过程可能需要人的判断,但仍在可预测的参数或界限内。您试图使用结构良好的数据(即贷款或保险申请)评估欺诈风险或可能性,或浏览陈旧流程(大多数支持渠道请求、数据输入)的任何地方。通常,我们认为需要人类判断的独特洞察力的事情都落在某些具有非常可预测的约束和参数的老路之中。当然,总会有例外情况,比如如何评估贷款申请,但大多数都可以像人类一样准确地自动化,而将例外情况留给人类来评估。机器学习正在迅速自动化这些传统的人类活动。
现在,这些问题应该让你开始用你自己的模式识别镜头来审视你的公司,并开始想象你可以在你的公司中利用机器学习的方法。然而,一旦你看了,我可以预测你将最常看到三个直接用途中的一个。还有许多其他方法来利用机器学习,但这些通常都是唾手可得的成果。
- 销售优化 —销售通常是我们拥有一些机器学习最佳数据的领域。这也是实施机器学习可以获得最直接的财务影响的地方。请记住,机器学习可以识别模式,因此它可以注意到:当某些客户群最适合追加销售时,哪种类型的客户线索最有可能关闭,以及潜在客户关闭的概率,以及基于您的历史销售数据和客户档案中的模式的产品推荐系统。如果有足够的数据,所有这些实施都会对转化率产生直接影响,因为你开始将销售人员的时间优先安排在最有可能赢得销售的事情上。无论你是想雇人来定制实现这一点,还是试图使用大多数 CRM 现在提供或正在争相开发的许多交钥匙 SaaS 人工智能支持的销售优化产品,都没有关系,公司在这一领域已经获得的回报是真实而显著的。
- 流程自动化 —这是机器学习的一种不同用途。从自动化手动数据输入,到自动化保险风险应用评估。这是在你的公司中寻找大量使用人工决策的地方,但这些地方通常属于共同的模式、界限或约束。我已经给出了评估应用程序的示例,但我还想在这一领域中包括支持渠道自动化。如果你正在阅读这方面的内容,你肯定听说过“聊天机器人”或“对话界面”,如果实现得好,它们可以大大减轻你的支持团队的负担。这里的数据不是销售数据,而是支持票评论和客户档案。它通常不是定量数据,而是定性数据,但仍然有方法来自动化这些经典的人类判断过程。
- 支持人工智能的产品/功能 —这是机器学习/人工智能的一种更加无定形和创造性的应用。这就是你利用你的优势,作为一个现有的企业,可以访问所有这些专有数据和现有的客户分销网络,来部署其价值来自他们对人工智能的使用的产品。在这里,你开始审视你的客户数据和客户需求,并开始问自己,现在你可以使用人工智能/机器学习而不是人工劳动(作为一种产品/服务,这可能不具成本效益),为客户大规模完成哪些看似类似人类的模式识别任务。这不是取代工作,这是做一些你的公司从一开始就做不到的事情,因为用人力做这件事的成本很高。
我的最后一条建议是,开始阅读大公司中人工智能的不同应用。它将开始激发你的想象力,让你有可能在自己的企业中有所建树。首先,这里有两个资源,但我发现简单地在谷歌上搜索“在[在此插入企业功能]中的人工智能应用”,往往会让你找到许多有趣的文章。这里有几个让你开始。
德勤人工智能创新报告 2016
人工智能在销售:10 家公司看
真正的商家是如何使用机器学习的
最后,一旦你准备好继续前进,组建/雇佣一个小团队,开始探索潜在的应用。这种价值很大程度上取决于数据的质量、相关性和数量,因此在开始试验数据、阐明有趣的模式并进行试点以测试其影响之前,你无法确切知道其影响。
学习神经网络是如何给我带来生存危机的
原文:https://towardsdatascience.com/how-learning-about-neural-nets-gave-me-an-existential-crisis-d8e3f42d70b6?source=collection_archive---------5-----------------------
此刻没有人能忽视的一件事是 AI 在我们日常生活中的盛行。我们在日常使用的所有应用程序中都可以看到人工智能的雏形。脸书最*一直用我和我的朋友们的旧记忆困扰着我。他们很好地使用了他们的图像识别算法,与我建立了另一个层次的情感联系,提醒我我已经没有朋友了。
因此,就像所有其他对人工智能感兴趣的产品开发人员一样,我最*开始想办法在我的*台上使用机器学习、神经网络和其他预测算法。我想知道如何让它变得更智能,并显著减少由于数千个基于开关/案例规则的系统而导致的处理过载。所以我开始了解什么是神经网络以及如何实现它的一些基础知识。
开发人工神经网络的方法包括松散地复制我们自己的大脑如何工作。开始时,我没有注意太多的逻辑——但我越是试图理解神经网络如何实现背后的逻辑,它就越让我起鸡皮疙瘩。我知道这听起来很荒谬。我过度使用它,直到我的大脑自动关闭,我在周末剩下的时间里狂看黑白电影 Strangelove 博士,North x northwestern 和 Clerks。
这是两个神经元之间连接的非常精确的细胞表达。人工神经网络也基于非常相似的概念工作——有不同的节点&连接节点的突触。每个节点都被编程为对其输入执行特定的处理。你在神经网络的开始传递某些输入,它经过不同的处理层产生一个输出。Siraj Raval 在他的一个视频中很好地解释了这个概念——他是我此刻的英雄。
此图中的圆圈显示了一个三层神经网络,每层都有不同的节点集。尽管该图看起来非常简单,但是每个节点都内置了许多抽象概念。然而,神经网络如何工作背后的简单思想是,传入的每组输入根据其对输出的贡献大小而被赋予一定的权重。
例如,如果我要选择一家餐馆或酒吧进行约会,我会注意某个地方的以下特征——食物质量、饮料质量、等级、离家距离、音乐类型、屋顶或其他。接下来,我会使用上述所有特征以及约会质量对我以前的约会地点进行手动分类。然后,我会将这些分类数据传入我的神经网络进行训练。这里的输入是一家餐馆的所有特色,输出是约会的质量。在对训练集进行多次迭代之后,神经网络将知道每个特征在产生期望输出中的重要性。然后,它将根据每个要素对输出的影响程度为其分配相关权重。节点之间的每个突触都有自己的逻辑程序,为不同的特征分配相应的权重。
我的神经网络的目的是根据我选择的地点来预测我的约会是令人惊奇还是不那么棒。当然,这是一个非常愚蠢的例子,因为约会的地点与约会的质量关系不大。和你的人际交往能力有很大关系。所以请不要真的设计一个神经网络来预测你约会的质量。然而,这将有助于确定你约会的最佳地点。
好了,这是我将偏离技术细节的时刻,因为这真的让我反思我们的大脑是如何工作的。我们一生都在接受所谓的“训练数据”,以规划我们当前的行为模式。无论我们一天中做什么,都只是我们体内的神经元根据周围环境传递给我们的输入进行计算。我们的突触被训练来分配传递到我们系统的不同输入的权重,这就是我们的个性。
这让我质疑我生活和存在的基础。我是不是一辈子都在无意识地训练自己的神经元,才真正塑造了我现在的人格?我一直是 A 型人格,总是努力不断改进,这真的让我很失望,因为这需要我完全重新编程我的神经元,以改善我人格的某些方面。这一开始听起来确实令人难以置信,但并非完全不可能。
这个训练我们的神经元来改变它们的连接并影响我们行为的过程也被称为神经可塑性。临床心理学家经常使用这一过程来帮助大脑适应新的环境或适应任何类型的伤害或疾病。这个模型给了我们希望,通过有意识地训练我们的大脑,我们有可能从任何对我们心灵造成的严重伤害中恢复过来,事实证明我们的大脑非常灵活——这与传统的观点相反,传统观点认为人类的大脑是僵化的,人类的行为在一定年龄后无法改变。
这怎么可能呢?神经网络中使用的感知器模型意味着,如果我们简单地改变我们每天从周围环境中接收的训练数据,那么我们就可以显著地改变我们提供的输出。现在的困境是——如何准确地过滤训练数据,以便给你的个性塑造理想的形象?这要求我们完全意识到我们是如何度过我们的时间和我们所接触的一切的。一些无意识决策的时刻,我们的神经元以某种方式被编程,以影响我们的决策能力。
这个想法是首先要注意我们是如何做决定的(即使是冲动的决定),并理解我们的神经元是如何权衡每个输入的。一旦我们对我们的神经元如何被编程有了想法,我们就可以开始有意识地权衡传入我们系统的不同输入,以提供符合我们真正想要成为的人的期望输出。
我怀疑没有人读到这里。点击下面的绿色心脏,让我知道你是否做了:)
Python 的列表理解:用途和优点
原文:https://towardsdatascience.com/how-list-comprehensions-can-help-your-code-look-better-and-run-smoother-3cf8f87172ae?source=collection_archive---------4-----------------------
The eyes of an interpreter, the scales of robust code. Source: Pixabay
无论您是数据科学家、从事 API 工作的 Web 开发人员,还是一长串角色中的任何一个,您都有可能在某个时候偶然发现 Python。
我们中的一些人喜欢它的简单、流畅和易读。其他人讨厌它,因为它不像 C 或纯汇编那样高性能,具有鸭式类型,或者是单线程的(ish)。
不管你属于哪一类,如果你处于想要/必须写 Python 代码的位置,你会希望它尽可能的易读。或者你可能在野外偶然发现了一个列表理解,并对如何驯服它感到困惑。如果这些都是真的,那么这篇文章是给你的。
什么是列表理解?
首先,我们来定义一下我们的术语。列表理解是替代以下模式的一种句法糖:
用这个,相当于,一个:
为什么我们应该使用它们
使用列表理解有什么好处?首先,你将三行代码减少为一行,这对于任何理解列表理解的人来说都是显而易见的。其次,第二段代码更快,因为 Python 会先分配列表的内存,然后再添加元素,而不是在运行时调整大小。它还可以避免调用“append ”,这可能很便宜,但会增加成本。最后,使用理解的代码被认为更“Python 化”——更符合 Python 的风格准则。
重构代码的味道
另一个更微妙的优势是嗅觉检测。没有理解的代码可能如下所示:
如果' some_function '中前面或后面的代码足够长,那么关于列表的那部分可能会丢失。但是在这 6 行中直接使用列表理解看起来并不漂亮:
试图用你的眼睛来解析它会让你头疼。你们座位下面有一些纸袋,以防你们需要用。这里发生了什么事?很明显,一点逻辑应该被抽象成一个新的函数,就像这样:
refactoring with two levels of abstraction
然后,前六行代码最终只是
another_list = [new_function(i) for i in range(k)]
如果你知道发生了什么,它会更清晰(如果我没有为我们的函数取这么糟糕的名字)并且读起来更快。有些人可能会说,为了达到这个目的,我最终添加了 6 行开销代码。确实如此,但是如果这种行为在代码中至少出现了一次,那么即使这样也不算是一种损失。即使不是这种情况,我们在代码大小上的损失,我们在可维护性和易读性上的收益,这是应该追求的。
优秀的程序员编写人类能够理解的代码。
——马丁·福勒。
使用列表理解很容易做的其他事情有
将矩阵展开成向量:
vector_version = [1,0,0,0,1,0,0,0,1]
过滤列表:
生成一个类的许多实例(在这种情况下用一个简单的字典建模,比如 JSON 对象):
将某种类型的对象列表转换为另一种类型的列表:
We generate a list of the first 100 numbers turned into strings, or just a string joining them with commas. All in one smooth line!
性能提升
为了验证性能是否真的有所提升,我决定运行一些测试。我运行了相同代码的 for 循环版本和 list comprehension 版本,过滤和不过滤都可以。下面是测试的片段:
list_a 方法以通常的方式生成列表,带有 for 循环和追加。 list_b 方法使用列表理解。
我的结果如下:
- 列表 a 为 5.84 秒
- 名单 b 为 4.07 秒
- 过滤列表 a 为 4.85 秒
- 过滤列表 b 为 4.13 秒
我鼓励您在自己的计算机上运行同样的脚本,亲自看看性能的提升,甚至可以改变输入大小。
在未过滤的情况下,我们看到从切换到列表理解的速度提高了 33%,而过滤的算法只提高了 15%。这证实了我们的理论,即主要的性能优势来自于不必在每次迭代时调用 append 方法,在过滤的情况下,每隔一次迭代就跳过一次。
最后,我应该补充一点,我刚刚教你的关于列表理解的所有内容都可以用 Python 字典来完成。
字典理解:
这是我的列表理解速成班,我希望你喜欢它!如果有任何你觉得我应该提到而没有提到的功能,或者对 gists 有任何抱怨,请让我知道。
最后,有一本我喜欢的 O'Reilly 的书,当我开始我的数据科学之旅时,我发现它非常有用。实际上,我就是从这本书上学会理解列表的。用 Python 从零开始叫 数据科学,大概也是我得到这份工作的一半原因。如果你读到这里,你可能会喜欢它!
P.S:如果你想在这个话题上展开,建议你看我的文章 Python 的生成器表达式 。我也鼓励您关注我,获取更多的 Python 教程、技巧和诀窍。
机器学习和人工智能如何给软件测试带来新的维度
原文:https://towardsdatascience.com/how-machine-learning-and-ai-bring-a-new-dimension-to-software-testing-7b2b6ea67b61?source=collection_archive---------1-----------------------
看起来,软件测试行业从未停止,并且一直在发展。根据 2017 年测试调查的状态,未来是自动化测试,因为 62%的受访者认为未来几年将会增加。根据同一份报告,我们还可以预计测试人员将花费更多的时间和资源来测试移动和混合应用程序,而花费在实际开发上的时间将会减少。
虽然这些因素很大,但没有一个因素(测试自动化、更短的开发周期或专注于移动和混合应用程序)像新兴的机器学习技术一样真正改变了测试游戏。
机器学习现在正在各行各业成功应用,那么问题来了,机器学习和人工智能会如何影响软件测试?他们真的会增强它吗?
阅读这篇文章,了解软件测试和质量保证在机器学习和人工智能时代是如何发展的。
传统测试方法的头号挑战
软件测试曾经是一项简单直接的任务。只要我们知道系统在用例中是如何表现的,输入一个输入并比较结果和期望就相对容易了。匹配意味着测试通过。如果有不匹配,警报就会响起,因为我们有一个潜在的错误,需要重新开始来修复它。
在这样一个传统的场景中,测试人员会仔细检查清单,以确保潜在用户的步骤和行为都被覆盖,问题得到解决。然而,由于消费者在某种意义上变得越来越苛刻,越来越缺乏耐心,传统的测试方法往往跟不上他们的步伐。
主要问题在于测试人员需要在他们目前通常拥有的有限时间内处理大量的数据。仅仅这一点就将传统的测试方法排除在外,需要一种更相关的方法。也就是说,由人工智能、机器学习和预测分析驱动的那个。
交给机器:不再有人工干预(和错误)
传统的测试技术仍然依赖于人类来获取和分析数据。但是我们只能说,人类并不是一贯正确的,并且很容易做出错误的假设。
处理数据的时间越少,测试产生错误结果的机会就越大,软件中的错误就被忽略了。在你知道之前,消费者会发现这些缺陷,这通常会导致沮丧和破坏品牌的声誉。
这就是为什么机器学习,它教会系统在未来学习和应用这些知识,使软件测试人员得出比传统测试更准确的结果。更不用说出错的概率并不是唯一降低的。执行软件测试和发现可能的错误所需的时间也缩短了,而需要处理的数据量仍然可以增加,而不会给测试团队带来任何压力。
使用预测分析来预测客户需求
随着市场需求的增长,企业需要找到比竞争对手领先一步的方法,并能够预测消费者的需求。预测分析在质量保证和软件测试中发挥着关键作用,因为它允许企业分析客户数据,以更好地了解(和预测)他们想要什么样的新产品和功能。
在这一点上,机器学习和预测分析在今天的软件测试和 QA 中齐头并进。它们对于一个不间断的、更短的测试过程都是必要的,最终会带来更好的用户体验。
机器学习在 QA 和软件测试中的位置?
人工智能和机器学习无疑也正在成为质量保证和软件测试的重要组成部分。
专家们对这一切可能带来的前景感到兴奋。例如,埃森哲欧洲、非洲和拉丁美洲的董事总经理兼测试服务负责人 Shalini Chaudhari 在接受 QA Financial 采访时表示,人工智能起飞的原因是物联网突破带来的巨大数据可用性,以及不再仅限于专业研究机构的不断增长的计算能力。
结论
机器学习让测试人员有机会更好地了解他们客户的需求,并对他们不断变化的期望做出比以往更快的反应。此外,测试人员现在还需要分析越来越多的数据,而给他们的时间却越来越少,同时他们的误差幅度也在不断减小。机器学习和预测分析等工具提供了一种解决这些挑战的方法,要么通过精通测试的内部团队,要么如果情况不是这样,转向 QA 外包。无论如何,这种方法将填补传统测试方法的空白,并使整个过程更有效,更符合用户的需求。
机器学习和人工智能如何改善旅行服务
原文:https://towardsdatascience.com/how-machine-learning-and-ai-can-improve-travel-services-3fc8a88664c4?source=collection_archive---------3-----------------------
这篇关于机器学习和 AI 在旅游行业的文章最初发表在 Django Stars 博客上。
克里斯托弗·哥伦布是历史上最著名的旅行家之一,他一生只进行了 4 次旅行。其中一次旅行花了他将* 6 年的时间来准备、计划和预算。幸运的是,现代旅行者可以在仅仅一年甚至一个月甚至一周内轻松打破那个终身记录(一些铁杆)。
廉价的航班,实惠的酒店价格,以及大量帮助旅行者计划和导航旅行的旅行应用程序,使人们能够更多地旅行。难怪数字旅游销售额预计到 2020 年将突破 8000 亿美元。像 Kayak、、Booking.com和 Expedia 这样的应用颠覆了旅行社行业,现在正通过使用机器学习为的旅游服务开发重新创造全方位服务体验。
尽管看起来很痛苦,但人们实际上喜欢计划他们的旅行,可以花 2 / 4 /(你可以选择)个小时粘在屏幕上寻找最佳地点、最佳行程和最佳价格。这就是机器学习和人工智能发挥作用的时候:通过分析大型数据集,人工智能融合的旅行系统可以为旅行者提供超级个性化的建议。
AI & ML 的螺母和螺栓
越来越难找到一个成功的故事,说明旅游公司 X 如何进行技术改进,使销售额增加 Z%,而没有发现“机器学习”或“人工智能”的字眼。有时互换使用,这两个概念实际上有不同的含义。
人工智能是计算机科学的一个广阔领域,它研究如何教会计算机像人一样思考和行动。
机器学习是 AI 的子集,重要,但不是唯一。简而言之,机器学习就是建立模型,在输入数据的基础上以高精度预测结果。使用统计方法,随着更多的数据被输入系统,它使机器能够提高它们的准确性。
机器学习模型的最终输出取决于:
**1)数据的质量。**数据越多样、越丰富,机器就越能发现模式,结果也就越精确。例如,以下是旅游业提供商获取数据的一些方式和方法:
Image source: Markrs.co
高质量的数据集通常需求量很大,公司有时不得不寻找合适的数据集。
2)特征是现有数据包含的有意义的输入,如用户性别/位置/浏览器扩展等。通常数据有更多的信息需要建立模型,因此有必要选择重要的特征。在此过程中,分析师或建模工具根据属性对分析的有用程度来选择或丢弃属性。
众多的特征使得算法工作得更慢,所以通常数据准备和 having 的过程是整洁的。xlsx 和。csv 文件最终比整个培训过程花费更多的时间。
3)分析数据的算法寻找模式或趋势,然后找到创建模型的最佳参数。选择最佳算法来解决特定任务是一项相当具有挑战性的任务,因为每种算法都可能产生不同的结果,其中一些算法会产生不止一种结果。
以下是机器学习驱动的模型是如何构建的:
机器学习模型可以胜过传统的僵化的商业智能,在传统的商业智能中,商业规则无法捕捉隐藏的模式。
旅游公司正在积极实施 AI & ML,以深入挖掘可用数据,优化其网站和应用程序的流程,并提供真正卓越的体验。
您可能还喜欢:
[## 如何开发旅游预订服务:来自 PADI 开发团队的 5 条经验
易于使用,顺利交易,快速获取信息和交易-热情的旅行者通常使用这些…
pxlme.me](https://pxlme.me/CxAiPOj-)
你随时想要的任何东西的世界。旅游公司如何使用人工智能和机器学习解决方案来取悦客户
旅行是一种高度情绪化的体验,有无数的选择来满足不同预算和类型的旅行者。独自旅行、公司旅行或家庭度假——心中有不同目标的旅行者希望应用程序从一开始就建议正确的套餐。证据如下: 88%的休闲旅行者会换一个不同的应用或网站,如果你的不能满足他们的需求。
Booking.com 在其调查中发现,几乎三分之一(29%)的全球旅行者表示,他们愿意让计算机根据他们之前的旅行历史数据来计划即将到来的旅行,一半(50%)的人不介意与真人或计算机打交道,只要任何问题都能得到回答。
目前,预订机票、酒店和租车已经完全变成了一种在线体验。因此,我们所有的旅行习惯都有大量的数据,这允许人工智能算法提取大量的见解,并将它们转化为定制的产品和一种新的体验。
谷歌首席执行官桑德尔·皮帅已经讲述了人工智能如何引领世界:
“随着时间的推移,计算机本身——无论其外形如何——都将成为帮助你度过一天的智能助手。我们将从移动优先转向人工智能优先的世界”。
人工智能是一个强大的工具,可以促进客户与旅游提供商之间的关系,即时丰富体验,并提供无摩擦的体验。以下是人工智能和人工智能在旅游业中最成功的应用:
- 聊天机器人
根据 HubSpot 的研究报告,71%的人使用聊天机器人快速解决他们的问题。截至目前,我们在酒店领域看到人工智能的最大地方是用于客户服务的聊天机器人。客户服务在旅游业中占有非常重要的位置,聊天机器人可以提供全天候的全面客户支持,从而减轻工作人员的负担。
聊天机器人有两种类型:
第一种由一组预先设定的答案驱动,这些答案是预先编程的,由一组规则驱动。这些需要手动编程,并且往往代表一大组常见问题,例如:
- “明天布鲁克林的天气怎么样?”
- "下一趟去巴黎的航班是什么时候?"
阅读如何创建电报机器人的教程
[## 如何开发旅游预订服务:来自 PADI 开发团队的 5 条经验
易于使用,顺利交易,快速获取信息和交易-热情的旅行者通常使用这些…
pxlme.me](https://pxlme.me/CxAiPOj-)
第二种更复杂,由人工智能驱动,它理解语言和命令,并在交互过程中学习。它可以回答一些更复杂的问题,比如:
- “150 美元能带我去哪里?”
- “纽约发生了什么事?”
Image source: JWT Intelligence
无论白天还是晚上,随时提供即时回答,提供全面的支持,尽管听起来可能很奇怪,但以友好的方式管理与人类的关系。通过适当的预编程,聊天机器人可以增强整个旅行体验,从到达前的自动提醒到建议目的地附*的娱乐场所和交通设施。
如果游客到达一个新的目的地,在游客信息中心撞上了“关闭”的标牌,不用担心——只需轻点几下,他们就可以启动一个机器人,询问他们需要什么。事实上,客户对人工智能聊天机器人的期望很高——他们希望聊天机器人以友好的方式解决他们的问题,而且在紧急情况下提供帮助。下面是用户请求的表达方式:
Kayak 因将机器人融入旅行体验而闻名。这个机器人会为你提供完整的信息,包括航班、租车、行程选择,还会告诉你一些活动。此外,它还通过 messenger 向客户发送未来旅行计划的更新信息。
Kayak 首席执行官史蒂夫·哈夫纳说,
“整整一代人更熟悉通过 Siri 发送短信和语音,他们在寻找与在线旅行社不同的互动方式。我们有与 Alexa 的语音交互,你可以对 Kayak 说,'嘿 Kayak,我今天晚些时候飞往丹佛的航班情况如何?'‘这个周末我可以花 300 美元去哪里?’”
到目前为止,旅游行业出现了一些很棒的聊天机器人,如 Lola,它使用人工智能增强功能来授权旅游顾问,以便他们可以提供完美的旅行。由人工智能驱动的 Mezi,一个可以帮助所有旅行安排的聊天机器人,人工智能由旅行专家训练和改进,或者 Sam,一个帮助提高旅行顾问专业知识的聊天机器人。沃森驱动的“康妮”机器人是为连锁酒店希尔顿开发的,它使用沃森的大脑来帮助客人办理登机手续并推荐当地景点。
Image source: theverge.com
- 推荐系统
Youtube、Spotify、网飞、Booking.com——这些领先的公司有一个共同点。这个东西让他们的客户在网站上保持很长时间,对历史和实时数据进行操作,并生成大量的相关命题。
通常,旅行者一旦进入旅游网站或应用程序,就会被信息淹没。另一方面,以正确的方式响应客户日益复杂的期望是一个相当大的挑战。将人工智能和人工智能纳入其业务的酒店和旅游提供商有一张王牌——通过利用大量数据,公司可以更密切地调查客户的行为,并最终提供定制产品。
旅游*台上每个客户的数字足迹使系统能够了解每个客户的需求、预算和偏好,并建议合适的交易。在正确的时间提供正确的建议将有助于增强客户的忠诚度,让他们一次又一次地回来。
人工智能支持的推荐系统可以输入历史数据,如旅行者以前的预订、行为或实时数据。例如,当这个人打开电子邮件时事通讯时,它会向数据科学家发回一个信号,以便在下一次触摸时合并该信号。
经过处理并与旅行者的背景保持一致后,人工智能支持的推荐系统可以提供卓越的体验。比较这两种情况:
这种量身定制的推荐无疑会提升整体体验。
- 预测:从机票价格到酒店客房供应
“航空公司什么时候降价?”、“周二的航班真的便宜吗?”而且一堆类似的问题,每天都要多次输入谷歌搜索栏。难道它们不是人们渴望找到脑海中出现的最佳价格的最好证据吗?似乎每个人都有这样的情况:你刚刚找到一个好的航班交易,然后过一会儿回到网站,哇!—票价上涨(或者如果你幸运的话,下跌)。
航班价格生成引擎根据特定规则工作,可能会考虑以下一些参数:
众所周知,机器学习可以发现隐藏的模式,而人类的眼睛甚至可能看不到这些模式。例如,ML 算法可以在票价大幅上涨后检测到异常情况,并考虑导致这种上涨的特征组合。
旅游提供商可以通过利用机器学习来帮助旅行者找到预订酒店或购买廉价机票的最佳时间。当交易变得可用时,应用程序可能会向用户发送通知。
例如,以帮助客户跟踪最佳航班交易而闻名的 Hopper 应用,最*加入了选择酒店的功能;应用程序中实现的 ML 算法将推荐是否预订酒店或等待价格下降,类似于机票的工作方式。人工智能和预测分析是这一驱动力的核心。使用彩色编码的日历,用红色标记昂贵的日期,用黄色标记适中的日期,用绿色标记最便宜的日期,Hopper 允许用户查看哪些日期会比其他日期更昂贵:
Image source: theverge.com
- 内容监管
对于品牌与顾客的互动来说,内容才是王道,旅游和酒店业也不例外。网站上的一张照片,移动应用程序中的推送通知,新收到的电子邮件,这些只是为旅行者提供所有所需信息的整个内容机器的几个触摸。告知、启发、互动、推动对话——一流的内容总是会引发用户在网站上的活动。
通常,内容监管是一个依赖于人的过程;然而,AI & ML 可能有助于提供个性化和自动化一些日常任务。
Trip Advisor 在重新设计网站时,注意到他们的网站上有很多很棒的照片(超过 1.1 亿张);然而,你永远不知道哪张照片会先出现。这就是为什么工程团队决定改进照片在不同背景下的显示方式。
该团队可以要求业主对照片进行评级,为他们的列表选择主要照片,并根据场景类型标记照片。在那之后,他们不得不雇佣一大群照片版主来标记、排列和选择照片,但是这又慢又贵。
工程团队从深度学习的角度来完成这项任务。深度学习是机器学习的一个子集,专门用于神经网络架构开发和训练。该团队开发了一个模型,选择有吸引力的相关照片,然后在网站上优先显示它们。只需对比一下他们在实现深度学习模型前后的英雄照片:
Image source: tripadvisor.com
内容优化中人工智能应用的另一个变革性例子是 Booking.com 的翻译管理。他们是迄今为止最大的旅游运营商,通过神经机器翻译(NMT)提供相关的交流——酒店描述、房间描述和酒店名称被翻译成 43 种语言:
也请阅读我们的案例研究
用户体验管理
对于旅游行业的企业来说,你的网站/应用程序的客户之旅对公司的成功至关重要。一些统计数据证明:事实上, 38%的人会停止使用内容或布局不吸引人的网站。
ML 可以在不同的点上注入客户的旅程:从灵感、研究、体验到与家人和朋友分享印象。就 UX 而言,旅游提供商面临两大挑战:
- 优化用户交互界面的方式,从点击式模式到更具对话性的模式
- 让选择选项的过程变得简单快捷
人工智能可以从网站上的每一次互动中主动学习,从而优化用户流量。接触点是否过多?在客户旅程的每一点,会有什么建议?每个阶段应该弹出哪些上下文提示?
将人工智能和人工智能应用于 UX 将有助于理解如何设计客户体验。
大量的数据允许追踪:
- 客户最关心的事情是什么?
- 客户的细分是什么?
- 人们在旅途中会从哪里掉下来,最重要的是,为什么?
- 客户生命周期是怎样的?
- 用户能多快找到东西?
Booking.com公司的全球客户服务总监詹姆斯·沃特斯说
“由于我们在一个极其个人化、情绪化和复杂的行业中运营,在真正的人际互动和高效的自动化之间保持适当的*衡是我们在消费者旅程的每个阶段一直努力微调和优化的事情。”
Skyscanner 分析了用户在使用该应用程序时经历的客户旅程,发现为了获得他想要的东西,用户必须在应用程序中至少进行 9 步操作和 17 次点击。在那之后,该公司转向用基于人工智能的聊天机器人建立对话界面。
旅游公司将通过跟踪元数据提供更相关的体验,例如:
- 意味着你更愿意离开机场
- 和你一起旅行的同伴
- 不管是出差
- 个人/团体
- 该地点的天气如何
旅游业中的机器学习和数据分析:转变商业运作
让我们把话题从客户利益转到业务利益上,因为人工智能和人工智能可以在许多情况下应用于调整业务流程:
销售优化
人工智能模型可以在销售漏斗的所有阶段增强销售经理的能力:
- 发现阶段帮助客户找到目的地
- 参与阶段,找出最适合每个客户的选项
- 通过处理众包数据的转化和保留阶段
旅行历史、以前的行为模式、购买历史和加入忠诚度计划——如果这些数据被输入基于人工智能的系统,它可以帮助销售团队生成个性化的旅行套餐。
人工智能和人工智能模型也可以通过应用程序帮助追加销售/交叉销售产品。例如,如果客户更喜欢在商务旅行中开车,并且正在寻找一些酒店报价,则该算法将从整个建议池中获得租车报价。
Image source: http://gearmark.blogs.com
价格优化
人工智能注入的动态定价技术可以帮助精确定位购买模式,使航空公司可以实时同步其定价策略,并在正确的时间提供正确的价格。
让我们以 Hopper 为例:它鼓励旅行者利用他们的数据驱动技术进行智能购物,这是他们应用的核心。每个用户都有特定的特征,例如更喜欢的飞行日期和时间、购买机票的时间、便利性等。该系统自动检测价格和产品特性之间的正确权衡,并在正确的时间以最优的价格提供相关优惠。
Hopper 在他们的博客中写道,他们 90%的销售额直接依赖于应用程序通知:
当公司的大部分收入来自特定数量的客户时(就像帕累托法则),为什么不为公司的忠实客户优化价格呢?
例如,当系统有一个新客户的一天需求和一个忠实客户的五天需求时,系统可以为这两种不同类型的客户生成价格。
营销机会
在理想的价值链中,来自营销工作和人工智能及人工智能技术的销售收益激励营销人员根据上下文和信息在所有客户的设备上开展所有营销活动。
通过分析 cookies 和设备 id,人工智能系统将允许营销人员通过精确定位,在正确的时间通过正确的设备精准地接触到用户,因此该公司的所有客户都不会被“一刀切”的广告吓倒。
欺诈检测
使用自然语言处理、计算机视觉和机器学习的人工智能工具可以实时分析大量数据集和各种数据源。在这些数据的基础上,人工智能系统可以识别异常行为,并创建风险评分,以全面了解每笔支付交易。
AI & ML 可以帮助旅游公司跟踪不同类型的欺诈行为:
- 信用卡信息被盗时的支付欺诈
- 创建假账户
- 内容滥用(如果它们包含评论和其他用户生成的内容)
- 账户接管(忠诚度欺诈)
通过整合人工智能工具,旅游公司将能够识别可信的付款人和不可信的付款人,以高精度和高速度检测异常,从而确保在线交易的安全。
结果
有了人工智能和机器学习所建议的各种各样酷而闪亮的东西,很容易捕捉到火花,并陷入“我想要全部”的想法。请记住,技术只有在正确实施时才能发挥作用。考虑以下事项,并在您的企业中推广这些技术:
- 收集质量数据。他们说“垃圾进——垃圾出”,这很刺耳,但却是事实。数据的丰富程度、是否可连接以及如何标记数据都非常重要。数据质量直接影响模型的输出。数据科学家可能会帮助你整理这些数据集,并建立整个系统。
- *了解你的产品。*是的,这听起来像是“谢谢,显而易见的队长”,但实际上这是任何技术实施的起点。我们 Django Stars 告诉我们的客户,我们可以构建任何复杂的算法,但产品负责人必须清楚地了解如何插入这些算法,商业目标是什么,以及它应该如何工作。
- 考虑你业务的成熟度。引入人工智能是一项艰巨的任务,需要非常好的领域知识、高级技能和法律限制知识(例如数据捕获法规)。这就是为什么你可以考虑聘请工程师来协助,因为在公司内部很难找到并留住工程师。
- 关注最重要的事情。“吃到饱”的方法有一点成功的机会。一些模型只给出了 5%的改进,但在大范围内,这是一个实质性的进步,带来了更好的体验和收入。另一方面,专注于人工智能聊天机器人可能会解放你的员工,并将客户体验带到新的水*。
如果你觉得这篇文章有用,请点击👏下面的按钮:)
机器学习如何为你构建应用
原文:https://towardsdatascience.com/how-machine-learning-builds-your-applications-for-you-965cf0c50dba?source=collection_archive---------2-----------------------
© 2013 Les Stone
或者说用户架构师和机器学习有什么关系?
用户架构师是系统的用户。甚至在这个系统存在之前,它们就以一种模糊不清的方式进入我们的大脑。我们想象这些角色将会是系统的使用者。我们想象和虚构的用户然后形成用户档案。我们向这些用户授予特性。我们赋予他们人格,然后用黑魔法让他们复活。或者,如果不能让他们活起来,至少要清除和洗掉一些模糊我们对他们的看法的因素。
对我们来说,黑魔法只不过是构建一个满足用户需求的应用程序。提供我们认为有用甚至是必要的功能。关于这些需求是什么,我们有大量以前的信息。我们也有足够的证据表明我们将整合哪些功能并赋予其价值。然而,这些证据并不能保证这个系统是一个完美的,甚至是好的解决方案。
为了尝试和设计更完美的解决方案,我们回到用户身边,收集他们的行为。在这个过程开始时,我们进行了调查和采访,但是,这只是我们的第一反应。它没有提供打造良好用户体验所需的深度信息。为突破性特征或前沿功能提供一个计划是不够的。尽管如此,这是一个起点,让我们能够生产出最低限度的可行产品。一个成熟的应用程序将从中成长和发展的产品。
从这个意义上说,它让我们进入了下一个阶段,是不断改进系统的关键一步。让用户告诉我们应用程序的第一步是提供词汇表。通过这种方式,他们开始在系统的架构中发挥作用。他们已经告诉我们他们对应用程序中使用的语言的理解。如果一个应用程序提供了处理数据的方法,那么我们必须知道用户所说的“数据”是什么意思。这个阶段的设计可能有点像泥巴,但我们能够从中找到真理。
让应用程序告诉我们用户想要什么
提供软件的悠久历史让我们看到了用户经历的痛苦和问题。我们的灵感是缓解这些痛苦和问题。询问用户他们遇到了什么样的痛苦和挫折使这一点成为焦点。他们面临的问题反复出现,使得简单的任务变得艰巨。寻求减轻负担的系统往往过于复杂。
所有的工程师,包括软件工程师,都倾向于过度工程化。用户可以,也确实要求太多琐碎的功能,这些功能极大地扰乱了他们的生活。我们如何发现什么是本质的,什么是杂乱的?我们如何沿着持续改进的道路前进?是的,我们要求我们的用户,但是以不同的方式,我们要求他们向我们展示。
一个处理数据并提供分析的应用程序应该知道用户如何对数据提出问题。它应该观察并记录他们是如何做的,以及他们收集了什么结果集。为了使应用程序更容易使用,它应该能够预测用户提出的问题。它应该能够建议他们将需要数据的哪些部分,以及如何最好地呈现。
机器学习是实现这一目标的理想工具。这可以手动完成,但需要观察以多种不同方式询问的大量查询。手动这一过程将需要亿万年。在计算上,我们可以编写一个程序,查看所有选项,并有规则来决定输出应该是什么。这将花费大量的时间和精力来设计和编写。我们没有时间做这个,应用程序需要更快地响应。使用机器学习,我们可以实现一个网络来承担这项任务,这将大大缩短时间。它还需要到达一个能快速适应的位置。它需要在描述它正在响应的时间长度内做出响应。
© 2013 Les Stone
过去,我们会让用户参加研讨会,捕捉并观察他们的行为。我们观看并记录他们做了什么以及如何做的实验环节。这种收集数据的方法提供了定性信息,但缺乏定量信息。没有足够的数据来支持从小样本中收集的观点。即使对焦点小组进行了最仔细的选择,还是会出现观点偏颇的风险。监督学习算法可以取代这种类型的实验室会议,并产生更好的结果。
通过反复做来学习。
观察和记录用户的质量是明确的。然而,没有定量数据,就无法确保所需的*衡。获得洞察力需要适度测量定量和定性数据输入。
从观察用户中获取数据所需的人力和精力是昂贵且耗时的。然而,重复性和耗时的任务是软件非常适合的。机器学习,特别是深度学习和神经网络,由大量数据滋养*。*
深度学习也擅长从少量数据中归纳,最*关于使用深度学习逼*函数的工作指出;“深度学习的成功不仅取决于数学,也取决于物理:尽管众所周知的数学定理保证神经网络可以很好地逼*任意函数,但实际感兴趣的函数类可以通过“廉价学习”来逼*,其参数比一般函数少得多,因为它们具有可追溯到物理定律的简化属性。”
深度学习(DL)是机器学习(ML)的一种类型,深度学习中有子集。深度神经网络(DNNs);通常用于表格数据集。卷积神经网络(CNNs 通常用于图像数据。递归神经网络;通常用于时态数据。下图显示了由神经元和相互连接的突触组成的神经网络中的多个层。
当软件能够参与自己的设计时,它就变得自省,变得有用。捕捉用户与系统的交互收集了新的数据语料库。能够对数据的各个部分进行分类将数据暴露给分析,使用户能够通过使用系统的简单过程来设计应用程序。让我们考虑一下这在实践中是如何运作的。我们将通过检查提供数据分析系统的软件应用的可能性来做到这一点。
© 2013 Les Stone
在一个旨在捕捉数据、混合数据、分类数据和探索数据的系统中,各个步骤可以相互分离。捕获数据需要用户将文件上传到系统或将系统插入源。对于此图,让我们看看机器学习如何帮助优化捕获过程。
上传文件需要找到它们,而且通常需要添加一些描述性信息。这同样适用于插入式数据源,一个 API 很可能有一个描述性名称或者一个名称和一个描述。
查找正确的文件和具有正确内容的文件时可能会出现问题。在上传时添加的描述性信息可以提供密钥。如果用户上传一系列电子表格并添加描述(例如“每周销售额”),系统就能够执行特定的任务。
在上传时,应用程序可以检查文档的结构,并计算单词或模式的实例。它可以检测样式和布局的属性。它可以查看数学或公式的类型。它可以计算数据类型的出现次数,例如:字符串或文本、整数或数字。
格式可以揭示其他数据特征,如:浮点数、小数、文本、运算符。然后,一系列模式和子模式可以与描述中的摘录相结合。一旦这些组合暴露在分类过程中,系统就学到了一些东西。它已经自学了“销售”文档可能是什么样子。然后,它可以用“每周”、“每月”、“每季度”或“每年”做同样的事情。
这同样适用于诸如“销售”、“采购”、“订单”或“发票”等标签。一旦它学会了这一点,而不是要求分类,它将能够预测描述符合什么。应用程序可以问用户“你想处理月度数据吗?”。然后,系统能够查找包含以月为间隔构建的数据的文档或数据源。
系统对数据检查得越多,它学到的东西就越多,也就越确定自己学到了什么。问题是谁在教谁?机器是自动学习的吗?是的,但是是用户在教它这些描述适用于什么数据的限制和范围。用户是分类过程所利用的语言的原始来源。
收集用户输入、描述和后续查询的摘录作为元数据。该元数据、上传的数据集、查询和查询结果集是学习过程的来源。标签是从这些描述中提取出来的,算法是为了对不同的部分进行加权而编写的。数据集的结构与查询传递的结果集和输出一样分类。
说到做到——来自机器学习
机器,或深度学习,接受用户输入并预测行动。这些预测改进了界面,这是系统架构变化的起源。这就是从用户动作中获取的数据如何构建应用程序。它类似于一个进化过程,因为它提供持续的改进。应用越来越好。
随着应用程序理解自然语言查询能力的提高,部分界面可能会被替换。“月”、“季度”、“年”的选择功能可能会被弃用。应用程序将学习提供相关的摘要报告和可视化,以响应:"给我欧洲最* 4 个月的销售数据.",“在接下来的 12 周内,我们需要开始订购什么?”,“如果这个价位提高. 5%会怎么样?”。该系统将学习期望它提供什么报告,并在请求它们之前产生它们。
对许多软件工程师来说,这似乎是对系统架构应该如何设计的彻底背离。很长一段时间以来,计算机科学似乎更乐于忽视用户。许多人认为从采购软件的人那里获取规范,然后构建功能来交付规范是正确的途径。然后出现了一个更开明的观点,即观察用户交互有一定的价值。现在,将用户交互的结果融入到设计中似乎势在必行。
可以收集和存储通过详细日志记录存储的用户交互。监督机器学习从例子和经验中学习,而不是从硬编码规则中学习。处理大量用户输入的可能性打开了新的大门。随着大量不断增长的数据,机器学习将有所借鉴。
软件编写软件,每一种编译语言在编译时都是这样做的。软件创造本身已经被抑制了,人工智能暗示这种选择在某种程度上现在是可能的。现在,软件能够提供一些工具来改进自己。其中最明显的是自动化测试。另一个是跟踪用户如何使用应用程序。
机器学习将应用程序的用户转变为应用程序的架构师,这导致他们成为 用户架构师 。真正构建应用程序的是用户使用应用程序所获得的用户数据。从这个意义上说,更好的做法是将他们视为 数据架构师 ,因为我们正在考虑一个主要任务是处理数据的应用程序。
深度学习能够在编写软件应用程序中发挥重要作用,并揭示新的方法。这将使编写软件的整个概念从一个主要的工程学科向一个自然科学学科靠拢。下面给出了机器学习和深度学习如何帮助这种转变的简单说明。
机器和深度学习如何设计自己。
使用网格搜索并通过学习算法的超参数空间来精炼应用的模型,并在训练集上交叉验证它,这是使用机器学习来微调算法并发现新算法的方式。通过优化算法的性能来优化学习算法的超参数,是模型变得自省的一种方式。
最*的一篇论文指出,现代计算机视觉的最大突破是学习如何直接从数据中优化算法,从循环中去除人工工程。由长短期记忆网络 ( LSTMs)执行的学习算法,在它们被训练完成的任务上胜过一般的、手工设计的竞争对手
鉴于深度信任网络、卷积网络和基于特征提取的分类器通常包含十到五十个超参数,因此毫不奇怪,诸如超参数优化的强力随机搜索等策略是所有学习算法中有趣且重要的组成部分。在模型选择中使用机器学习也是一项有趣的工作,它与程序合成和归纳编程并行。
也已经完成了使用递归网络来生成卷积架构的架构的工作。它基于这样的观察,即神经网络的结构和连通性通常可以由可变长度的字符串来指定。
发现'神经架构搜索可以从零开始设计好的模型。像设计算法的例子一样,网络正在创建神经网络的架构超参数。在许多方面,人工设计神经网络的架构比设计算法更具挑战性。
机器和深度学习如何编写函数
举个简单的例子,机器学习可以通过看例子来定义函数。标准编程遵循以下过程:为一个函数设置规范,然后实现该函数以满足规范。
机器学习允许给出( x,y )对的例子,从这些例子中我们可以猜出函数 y = f(x) 。
对于任何函数,对于 x 的每个输入都有一个神经网络,值(x)从该网络输出。我们可以从 x=1 和 f(x ) =1 开始,这与我们的训练数据相匹配,但是当我们输入 x = 2 和 f(x) =5 时,它会失败,因为训练数据显示 x = 3。单个输入和层将不能预测我们正在寻找的功能。如果我们的训练数据非常干净,比如 2,3,5,8,13,21,34,那就不一样了
我们可以有多个输入,并试图创建一个单一的输出,我们正在寻找的输出是一个函数,以预测当 x =n 时,y 会是什么。从我们的例子对(其中我们知道什么是 x 和 y)X1[2, 3, 1.5],X2[3, 5, 1.66],X3[n,n,n]
输出(x)可以由以下函数表示
在 Clojure 这样的函数式语言中,这可以写成:
深度学习采用示例 x,y 对,并在几个抽象层次上形成它们的表示,以产生对小说 x 很好概括的函数
使用深度学习来产生一个函数的众多优势之一是,如果该函数有许多输入,Ǭ=Ǭ(x1,…,x m )和许多输出,它也可以工作。
虽然这是一个非常简单的例子,并且有许多方法可以生成斐波纳契数列,但是从数据中导出函数的过程有许多可能性。
我们想要生成的程序是一个相当简单的数学运算序列,比如使用上一个运算的输出和上一个运算的输出。使用递归神经网络,其中控制器输出下一个操作应该是什么的概率分布。它会执行所有可能的操作(例如乘、加、除、减),然后对输出进行*均。因为我们能够定义导数,只要问题的结果是已知的,程序的输出是可微的,损失是可以计算的。因此,网络能够被训练成诱导程序提供正确的答案。
编写源代码
设计算法和架构离用 AI 写程序只有一步之遥。中间步骤可以包括使用神经网络来预测函数出现在源代码中的概率,而不是预测整个源代码。 DeepCoder 是一个提出使用神经网络来“指导搜索与一组输入输出示例一致的程序”的项目。
而对程序综合的初步研究将集中在特定领域语言上。使用受限语言(如 SQL)进行搜索比使用全功能语言(如 python)更容易。查询日志还将提供输入源。网络公司的目标是创造模型,将程序表现为简单、自然的源代码,即人们编写的那种源代码。
学习如何编写新程序的机器已经使用学习表示和解释程序的架构开发出来。
动态程序
语音识别方面的进步,但更重要的是序列到序列学习和允许神经网络相互通信的技术将影响程序的构建方式。对世界的推理是有序的,这些序列中有一些潜在的随机结构。递归神经网络(RNNs)和随机状态空间模型(SSMs)被广泛用于建模序列数据,随机递归神经网络结合了这两种模型。
设想一个将自然语言查询与程序合成结合起来的应用程序并不太困难。通过提供语音驱动指令集,合成程序将通过搜索可能的功能来匹配这些输入,并设计新的输出。这样,它将创建一个程序来动态地交付所需要的东西。
要做到这一点,网络需要自己的工作记忆。信息的短期存储及其以简单子程序形式进行的基于规则的操作将在运行中创建功能和算法,并设计自我修改的体系结构。而短期存储器将用于保存变量,长期和可重写存储器将用于存储将通过自我学习而改变的例程。
向神经网络添加内存是一个相当明显的步骤可微分神经计算机就是这样做的,使网络能够利用知识进行思考或推理。除了使学习过程更有效和计算要求更低之外,它将允许核心程序的持续修改。这将使基于经验的改进成为可能。
神经网络和深度学习被 Michael A. Nielsen 描述为“有史以来发明的最美丽的编程范例之一”*
首次发布【2016 年 4 月 14 日
致谢。
本文中的所有图片均由摄影师 Les Stone 在 2013 海地伏都教仪式 20 年间拍摄。它们发表在互联网上的其他地方,我在这里分享它们(至今未经作者许可),以反映我个人对他的工作的钦佩。溴
- 迈克尔·a·尼尔森《神经网络与深度学习》,决心出版社,2015 年
参考
为什么深度廉价学习效果这么好?https://arxiv.org/pdf/1608.08225v2.pdf
通过梯度下降学习
通过梯度下降学习https://arxiv.org/pdf/1606.04474v2.pdf
超参数优化算法https://papers . nips . cc/paper/4443-algorithms-for-Hyper-Parameter-Optimization . pdf
基于序列模型的集成优化http://auai.org/uai2014/proceedings/individuals/229.pdf
用【https://arxiv.org/pdf/1611.01578v1.pdf 强化学习
搜索神经架构
DEEPCODER:学习写程序https://arxiv.org/pdf/1611.01989v1.pdf
TERPRET:一种概率编程语言
用于程序归纳https://arxiv.org/pdf/1612.00817.pdf
神经程序员-解释器https://arxiv.org/pdf/1511.06279.pdf
神经程序员:用梯度下降诱导潜在程序https://arxiv.org/pdf/1511.04834v3.pdf
用神经网络进行序列对序列学习https://arxiv.org/pdf/1409.3215v3.pdf
使用合成梯度解耦神经接口https://deep mind . com/blog/decoupled-Neural-networks-Using-Synthetic-Gradients/
具有随机层的序列神经模型https://arxiv.org/pdf/1605.07571v2.pdf
可微分神经计算机https://deepmind.com/blog/differentiable-neural-computers/
机器学习可能如何帮助千禧一代买房子和继承未来
原文:https://towardsdatascience.com/how-machine-learning-might-help-millennials-buy-a-house-and-inherit-the-future-bfc3685e02bd?source=collection_archive---------7-----------------------
https://cdn.theatlantic.com/assets/media/img/2012/08/21/0912-COL-Millenials-wide/lead_large.jpg?1429717181
如今,似乎你必须成为顶尖的计算机专家才能获得成功,尤其是在机器学习和人工智能被大肆宣传的情况下。但我认为你真正需要做的是跳出框框思考。当然,机器学习现在正在让人们赚钱,但是有一场革命正在进行,我认为它可能会影响硅谷技术魔法之外的事情。我相信每个千禧一代都会受益。那么这和买房有什么关系呢?
千禧一代不买房,主要是因为买不起入门级的房子。千禧一代倾向于住在市区,需要住得离他们工作的地方*一些(尽管他们更愿意住在郊区),所以今天他们租房住,希望有一天他们能负担得起美国梦。这种情况似乎充满了绝望和灾难,但我知道千禧一代可能会如何利用人工智能革命,在这个新世界住房市场中比你想象的更富裕。
重大技术进步可以改变整个行业,或者创造全新的赚钱方式。喷气发动机让整整一代企业可以在一天之内穿越全国或海外,无论是运送货物还是举行面对面的会议。航空业会变成我们今天所知道的样子,这在当时似乎并不明显。想一想所有全新的市场、经济和商业类型,它们今天因为互联网而蓬勃发展;音乐流媒体、快递服务、加密货币、社交媒体……太疯狂了。
我相信我们正处于另一场机器学习的技术革命中。我知道这么说很流行,但我每天都生活在其中,感受着它,我看到了它对商业经济的影响。但是住房呢?
在旧金山湾区,交通绝对是一场噩梦。糟糕的是,离我们工作地点更*的住房需求非常高,这反过来推动了价格上涨。如果你出门离城市足够远,房价会大幅下跌。我认为这将会改变,因为有一项非常有前途的技术;自动驾驶汽车。
http://static6.businessinsider.com/image/57d84375077dcc21008b5865-1200/uber-self-driving-car.jpg
2027 年,的交通可能会因为特斯拉而消失。那栋远离以前不受欢迎的位置的房子现在更受欢迎,因为住在城市附*的压力已经消失了。我们现在可以分散开来,知道上班的通勤时间(假设由于增强现实,我们真的需要在办公室工作)不再是距离的反函数。
因此,千禧一代可能会在今天对通勤来说是噩梦的地方购买这些更便宜的房子,但在其他方面却非常令人向往,并收回他们承诺继承的美国梦。
机器学习(ML)如何改变制造业
原文:https://towardsdatascience.com/how-machine-learning-ml-is-transforming-manufacturing-dfaaa30e87e4?source=collection_archive---------11-----------------------
对于没有合适的工具来开发产品的公司来说,制造过程既耗时又昂贵。*年来,机器学习(ML)在建造和组装物品方面变得更加流行,使用先进的技术来减少制造的长度和成本。在组装过程中使用ML有助于创造所谓的智能制造,在智能制造中,机器人以外科手术般的精度将物品组装在一起,同时该技术实时调整任何误差,以减少溢出。
使用 ML 算法、应用程序和*台可以通过监控其组装过程的质量来彻底变革商业模式,同时优化运营。TrendForce 估计,智能制造将在未来三年内快速增长。该公司预测,到今年年底,智能制造市场的价值将超过 2000 亿美元,到 2020 年将增长到 3200 亿美元,预计复合年增长率为 12.5%。 WorkFusion 正通过一系列智能解决方案帮助企业满足其制造需求。
以下是 ML 改变制造业游戏的一些方式。
1)优化半导体制造
McKinsey & Company 看到了使用 ML 将半导体制造产量提高 30%的巨大价值。该公司认为,该公司可以通过降低废品率和优化与 ML 的业务。该技术可以使用根本原因分析,并通过简化制造工作流程来降低测试成本。此外,在 ML 上运行的制造设备的年维护成本预计将降低 10%,同时停机时间减少 20%,检测成本减少 25%。
2)质量控制和 OEE
术语 OEE 指的是总体设备效率,ML 在提高设备效率方面起着关键作用。这个指标衡量组装设备的可用性、性能和质量,这些都是通过集成深度学习神经网络来提高的,深度学习神经网络可以快速学习这些机器的弱点,并帮助将其最小化。德国企业集团西门子几十年来一直在使用神经网络监控其钢铁厂并提高效率。该公司表示,在过去十年中,它已投资约 100 亿美元收购美国软件公司,包括加入 IBM 的 Watson Analytics,以提高其运营的质量水*。
3)完善供应链
ML 还通过改善物流解决方案,包括资产管理、供应链管理和库存管理流程,在实现公司价值最大化方面发挥着重要作用。人工智能(AI)和物联网的成功结合对于现代公司来说是必要的,以确保其供应链在最高水*上运行。世界经济论坛(WEF)和 A.T. Kearny 的一项研究发现,制造商正在寻找将 ML、AI 和物联网等新兴技术与提高资产跟踪准确性、库存优化和供应链可见性相结合的方法。通用电气推出了一套出色的制造套件,它监控制造、包装和交付过程的每一步,是该公司供应链管理的重要组成部分。
4)更多统计数据
普华永道预测,更多的制造商将采用机器学习和分析来改善预测性维护,预计未来五年将增长 38%。在此期间,流程可视化和自动化预计将增长 34%,而分析、API 和大数据的集成将使互联工厂增长 31%。麦肯锡补充说,ML 将减少 50%的供应链预测误差,同时也减少 65%的销售损失。
互联的未来
制造业中的 ML 有很多值得期待的地方,因为该技术有助于组装厂建立一系列互联的物联网设备,这些设备协调工作,以改善工作流程。从质量控制到资产管理、供应链解决方案和降低开支,ML 正在以多种方式改变制造业的未来。
WorkFusion 提供了 RPA 解决方案来帮助希望改善制造流程的公司。
机器如何理解我们的语言:自然语言处理导论
原文:https://towardsdatascience.com/how-machines-understand-our-language-an-introduction-to-natural-language-processing-4ab4bcd47d05?source=collection_archive---------5-----------------------
Photo by Tatyana Dobreva on Unsplash
对我来说,自然语言处理是数据科学中最迷人的领域之一。机器能够以一定的准确度理解文本内容的事实令人着迷,有时甚至令人害怕。
自然语言处理的应用是无穷无尽的。这是机器如何分类一封电子邮件是否是垃圾邮件,如果评论是正面或负面的,以及搜索引擎如何根据您的查询内容识别您是什么类型的人,以相应地定制响应。
但是这在实践中是如何运作的呢?这篇文章介绍了自然语言处理的基础概念,并重点介绍了在 Python 中使用的nltk
包。
注意:要运行下面的例子,您需要安装
nltk
库。如果没有的话,开机前在你的 shell 中运行pip install nltk
,在你的笔记本中运行nltk.download()
即可。
无论输入机器的是什么文本或句子,都需要首先进行简化,这可以通过标记化和词条化来完成。这些复杂的单词意味着一些非常简单的事情:标记化意味着我们将文本分解成标记,根据具体情况分解成单个或成组的单词。词汇化意味着我们将一些单词转换成它们的词根,即复数变成单数,共轭动词变成基本动词等等。在这些操作之间,我们还从文本中清除所有不携带实际信息的单词,即所谓的停用词。
让我们看看下面的句子,用一个例子来理解这一切意味着什么。
Example of tokenization and lemmatization for ngrams = 1.
对文本进行分词时,相应地选择 ngram 很重要。它是指定我们希望每个令牌包含多少单词的数字,在大多数情况下(就像上面的例子),这个数字等于 1。但是,如果你在一个商业评论网站上进行情绪分析,你的文本可能会包含“不高兴”或“不喜欢”这样的语句,你不希望这些词相互抵消,以传达评论背后的负面情绪。在这种情况下,您可能需要考虑增加 ngram,看看它对您的分析有何影响。
在进行标记化时,还需要考虑其他因素,例如标点符号。大多数时候你想去掉任何标点符号,因为它不包含任何信息,除非文本中有有意义的数字。在这种情况下,您可能需要考虑保留标点符号,否则文本中包含的数字将在出现.
或,
的地方被拆分。
在下面的代码中,我使用了RegexpTokenizer
,一个正则表达式标记器。对于那些不熟悉正则表达式的人来说,在形式语言理论中,它是一个定义模式的字符序列,根据您在RegexpTokenizer
函数中传递的参数,它将根据该参数分割文本。在一个正则表达式中,\w+
字面意思是将所有长度大于或等于 1 的单词字符分组,丢弃空格(从而标记单个单词)和所有非单词字符,即标点符号。
Tokenizing with RegexpTokenizer.
这段代码生成的令牌列表如下:
tokens = ['Rome', 'was', 'founded', 'in', '753BC', 'by', 'its', 'first', 'king', 'Romulus']
这是一个不错的开始,我们有了由单个单词组成的令牌,标点符号不见了!现在我们必须从令牌中删除停用词:幸运的是,对于许多不同的语言,nltk
中包含了停用词列表。但是当然,根据具体情况,您可能需要定制这个单词列表。例如,文章默认包含在此列表中,但是如果您正在分析一个电影或音乐数据库,您可能希望保留它,因为在这种情况下,它确实有所不同(有趣的事实:帮助和帮助!是两部不同的电影!).
Discarding the stop words from a text.
新令牌列表是:
*clean_tokens = ['Rome', 'founded', '753BC', 'first', 'king', 'Romulus']*
我们从 10 个单词增加到 6 个单词,现在终于到了词汇化的时候了!到目前为止,我已经测试了两个具有相同目的的物体:WordNetLemmatizer
和PorterStemmer
,后者肯定比前者更残忍,如下例所示。
Lemmatization example with WordNetLemmatizer.
最后一个列表理解的输出是:
*['Rome', 'founded', '753BC', 'first', 'king', 'Romulus']*
什么都没变!这是因为WordNetLemmatizer
只作用于复数单词和一些其他的东西,在这个特殊的例子中,没有单词真正被词条化。另一方面,PorterStemmer
转换复数和衍生词、动词,并使所有术语小写,如下所示:
Lemmatization example with PorterStemmer.
列表理解的输出是:
*['rome', 'found', '753bc', 'first', 'king', 'romulu']*
在这种情况下,没有大写字母的单词了,这对我们来说是没问题的,因为仅仅因为一个是小写字母而另一个不是,区分相同的单词是没有意义的,它们有相同的意思!动词 founded 已经改成了 found 甚至 Romulus 都把自己名字的最后一个字母弄丢了,可能是因为PorterStemmer
以为是复数词。
这些引理化函数非常不同,根据具体情况,一个会比另一个更合适。
在建模之前,有许多不同的方法来收集和组织文本中的单词,这些只是可用选项的一小部分。在将文本输入机器学习模型以尽可能简化它之前,所有这些清理都是必要的。当你在预测模型中分析大量词汇时,在完成上述步骤后,你将很可能依靠[CountVectorizer](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html)
、[TfidfVectorizer](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html#sklearn.feature_extraction.text.TfidfVectorizer)
或[HashingVectorizer](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.HashingVectorizer.html#sklearn.feature_extraction.text.HashingVectorizer)
等sklearn
方法,将原始文本转换成一个令牌计数的矩阵来训练你的预测模型。
管理者应该如何为深度学习做准备:新范式
原文:https://towardsdatascience.com/how-managers-should-prepare-for-deep-learning-new-paradigms-28de63054ea6?source=collection_archive---------7-----------------------
Exploring the unique challenges for managing analytic systems enabled by Deep Learning [photo by Charlie Wild on [Unsplash]](https://unsplash.com/@charles_the1st)
本文是关于深度学习 的管理视角系列文章的第一篇,该系列文章面向参与或负责由使用人工神经网络技术的深度学习** (DL)实现的分析系统的管理人员。在处理这些系统时,他们面临混乱的概念和独特的挑战。这篇文章关注的是新范例,这些范例引导这些管理者思考 DL 的基本性质。[1]**
作为一名大学教授、软件企业家和行业分析师,我的职业生涯一直在大型信息技术(IT)系统中探索。在过去的五年里,这一焦点已经集中在商业分析上,特别是在由神经网络技术驱动的深度学习(DL)上。我最*完成了深度学习领域的 Coursera 专门化课程和反思其含义。[2]
注意:我不喜欢这些文章中的术语深度学习*,尤其是人工智能,因为它们有令人困惑的含义和分散注意力的包袱。正确的技术术语是*人工神经网络 (ANN)。所以,想象下面 DL = ANN。
DL 与传统的机器学习有独特的区别,尤其是在企业系统的环境中。此外,DL 有潜力以今天无法想象的方式增强这些系统,无论是好的还是不好的。
IT-DL 断开
在企业系统中正确采用 DL 的一个主要障碍是 IT 专业人员和 DL 实践者之间概念上的脱节。这两个群体对基本原则有不同的想法——问题陈述、数据的性质、结果的交付、性能准确性、数据治理以及对业务的价值。
在这个 IT-DL 脱节的中间,是大型 IT 生态系统中与 DL 支持的分析系统有关的经理(和高管)。这些经理了解组织的优先事项和 IT 资源,经常与 IT 和数据科学团队进行跨职能互动。他们也意识到 DL 的非凡成就,这要归功于 Google。他们对面部识别、自动驾驶、文本分析和聊天机器人的新兴应用感到惊讶。此外,他们还担心媒体对人工智能(AI)的神奇好处和悲剧性影响的神秘炒作。
这些文章的读者是这些经理。他们将负责指导使用 DL 的分析应用程序。当这些应用程序成功时,他们将获得荣誉,当#失败时,他们将承担责任。他们很难处理发展迅速的数字鸿沟问题。此外,他们必须解决IT-DL 脱节的问题,并需要弥合这一差距。
这个问题
本系列文章的问题是…
对于负责支持 DL 的系统的经理来说,DL 有哪些新的不同之处?
Business Intelligence — Machine Learning — Deep Learning
通过这个系列,这个问题会有几种形式。本文将讨论新范例,管理者需要这些范例来理解 DL 的独特性质,与一般的商业智能(BI ),特别是传统的机器学习(ML)相比较。这种理解对于实现与 DL 实践者的流畅对话以及与 IT 团队的协作至关重要,从而使 DL 项目取得成功。
接下来的部分研究了这些新的范例,将它们与旧的(但仍然相关的)IT 范例进行了对比。对于每一个,从这种范式转变中吸取的教训都被记录下来。
TL;dr —选择几个看起来有趣的。以后再看别人。
超越已知数据的概括
旧的 IT 分析范式是生成洞察,让各级经理能够基于数据做出更好的决策。这种模式出现在 20 世纪 70 年代,由 Peter Keen 等人开发的决策支持系统。从那时起,IT 的一个关键角色就是以报告和仪表板的形式提供有组织的数据,最初是在厚厚的纸张上,到 CRT 屏幕,再到移动设备。这一趋势导致了视觉分析领域的繁荣,出现了 Tableau 和 Qlik 等灵活的仪表盘产品。向管理人员直观地描述已知数据是必不可少的。
新的 DL 分析范式将支持超越已知数据的概括方法。组织的竞争优势将是推断(聪明地猜测)复杂业务系统的动态。这意味着预测未来事件,就像在预测分析中一样。更重要的是,这意味着能够理解为什么过去的事件在这些复杂的系统中以独特和令人惊讶的方式展开。DL 生成的模型有潜力提取和捕捉这些超出人类能力的复杂性。这既令人欣慰又令人不安。
要点 : DL 是关于……获取关于你的组织的具体已知事实,并创建其行为的通用模型。要知道在商业环境中,一个决策需要超越可用数据的概括…这几乎是每一个决策!这个决定是主观(凭直觉)做出的吗?)基于一个人漫长的经历?或者,它是基于具体的数据吗?如果是,数据是什么,这些数据是如何分析的?当管理 DL 驱动的系统时,质疑决策的基础变得更加重要。
耕种农场
软件项目的旧 IT 范式就像盖房子一样。第一,设计它;聚集资源;建造它;移动到下一个房子,以及对以前的房子进行一些维护。几十年来,软件开发方法有了很大的改进。敏捷方法目前允许在设计和实现中有更多的灵活性。然而,剩下的是完成项目的概念,以便资源可以应用于新的项目。
“A farmer in a tractor, clearing wheat during sunset in Lincoln” by Noah Buscher on Unsplash
新的 DL 范式更像是一个农民在耕地。这是一个持续的过程。农民不会在地里播种后就离开。在收获和为即将到来的季节做计划的过程中,人们一直在努力。DL 项目不是正常意义上的项目!这是一个不断完善 DL 模型以更好地支持用例的过程。
收获:对 DL“项目”进行缓慢而谨慎的长期投资。评估每一步的商业利益是否超过商业成本和风险。不要指望从“低洼的水果”中获得巨大或快速的回报。只期待适度和持续的收益。另一方面,不惜早杀,勤杀 DL 项目。避免认为“项目”已经完成,可以在无人看管的情况下继续运行。
应对黑盒
IT 范例是应用程序系统应该(并且可以)被清晰地指定,从而易于维护和管理。事实是,新的 DL 范式是一个邪恶的黑盒!
DL 模型由一组矩阵组成,通过神经网络层传播以产生准确的预测。在数以千计的矩阵中,结果是人类无法解释和说明的。例如,回答 DL 模型拒绝特定贷款申请的原因。这是一个 DL 结果可解释性的巨大问题,对于一个可操作的 DL 系统来说必须解决。
然而,这个硬币有两面。管理者不应该被血淋淋的细节所吸引,成为房间里的焦点人物。作为管理者应对黑箱!下图说明了这种情况。神奇的是数据科学团队的责任。
The DL Blackbox where the Magic Happens
导读:你正在和技术人员讨论新的支持 DL 的系统,慢慢陷入黑暗。去白板上画一个简单的方框。询问产出;然后是投入。质疑输出是否促进了特定的业务目标。质疑我们是否能够恰当地将数据作为训练示例的输入。询问如何从模型中解释影响客户的结果。在所有人(尤其是你)都理解并同意之前,不要离开房间!设法拿到黑匣子。
举例教学
IT 范例是将预定义的过程编程到硬代码中。首先,必须指定过程,然后编码,最后调试。
DL 范例与过去典型的 IT 软件项目有着本质的区别。第一个区别是,您通过用示例训练 DL 模型来编程,这些示例标有每个示例的预期结果。这叫做监督学习。
我不喜欢在这种情况下使用“学习”甚至“训练”这样的术语。第一个暗示学习是模型的责任。第二个意味着模型应该遵循严格的协议来执行任务。两者都暗示责任在于 DL 模型。事实上,真正的责任在于经理和数据科学团队,通过清楚地将示例标记为“好”或“坏”来教授DL 模型。
Photo by NeONBRAND on Unsplash
经理的比喻就像一年级老师给全班同学讲解动物园,而你们班没有人见过。你的责任就像为他们下周的动物园之旅做准备。所以,你准备一套他们将会看到的动物的例子,详细描述它们。
从技术上讲,DL 中的这个过程被称为“训练模型”,但它更像是教授甚至指导模型。和一年级学生一样,模型一开始知道的很少。不像一年级学生,模型只会通过你的例子来学习。如果你的例子选择不当或标记不当,预计一年级学生和你的模型会有不好的结果。有足够的数量吗?它们是否足够多样化以涵盖未来的情况?诸如此类。
外带:负责将数据整理成有标签的例子,教授DL 模型。这将是你讨论黑盒输入的主要部分。您会发现,这一职责将严重依赖于您现有的 IT 生态系统来存储和集成跨数据仓库和可能的数据湖的数据。感谢这个生态系统遗产。如果没有这样的生态系统,那就另谋高就。
保存信息
数据监管的 IT 范式是清理和组织数据,以满足人们的消费需求,让人们赏心悦目。相比之下,DL 范式是为机器消费保留数据中的信息(类似于 T4 的香农信息熵),以最精细的粒度进行处理。DL 模特都爱丑位!
Photo by kevin laminto on Unsplash
这类似于艺术博物馆中的策展。策展人保存艺术作品,同时用背景和历史增强其本质。似乎数据湖的人们可以通过内化这种类比回到正轨。此外,数据仓库通过提供上下文(即示例数据的补充功能)发挥着关键作用。
许多 DL 项目从与数据仓库隔离的应用程序开始,只是意识到为组织做任何有用的事情都必须小心地与数据仓库联系起来。为自己节省额外的精力,从数据仓库开始,向外构建。数据仓库作为包含上下文和关系的官方结构化数据的存储库,反映了被认为对组织的运作很重要的信息。
原始数据(对人类来说是杂乱的)是好的,如果它准确地传达了关于组织及其环境的准确信息。因此,如果设计得当,数据湖工作可以很好地评估有效性和纠正准确性/有效性。
外卖:DL 的动力开始和结束于数据。所以,不要为了让它们看起来漂亮而丢弃它们!丑陋是现实的真实面目。
将数据视为现实照片
IT 范式将数据可视化为由行和列组成的表格电子表格。当我学习 DL 的时候,这是影响我个人的范式转变。我会经常回到我旧的表格思维,好像这就是地面真相。然而,当我放开这根拐杖,开始思考矩阵,然后是张量(更高维度的矩阵)作为基础真理时,DL 变得容易多了。以一种微妙的方式,思考表格(行-列,实例-特征)过度简化了现实。我们的眼睛和耳朵无法在电子表格中捕捉每一分钟的真实情况!
Photo of Business Reality by Charlize Birdsinger on Unsplash
DL 范式以两种方式转向图像和其他非结构化数据格式。首先,用于物体检测和识别的 DL 图像处理已经非常成功,这意味着利用了照片中嵌入的空间信息。其次,一个新的 DL 技巧是将表格数据视为实际(但杂乱)图像中的像素,然后利用相同的有效 DL 技术。使用这种技巧的早期结果是惊人的。[3]
外卖:不要再把数据当成表格了!相反,请将数据视为商业现实的照片。此外,把商业行为想象成现实的视频。得到的 DL 模型可能执行得更好。
超越人类水*的性能
IT 范例是通过将组织任务的过程编程到硬代码中来使这些任务计算机化。动机是与同等的人的表现相比,更便宜和更快地完成任务。例如,由于这种更便宜更快的目标,自动化制造装配线(在关键点有几个人)已经取代了人工。
DL 的新范式是教会 DL 模型执行这些相同的任务,并期望超越人类水*的表现(HLP)。为什么?
我们人类已经创造了足够聪明的工具来超越我们自己!
计算机在国际象棋和围棋比赛中击败世界冠军的消息,以及 IBM Watson 在 2011 年的 Jeopardy,似乎证明了这种说法是正确的。然而,许多人对这些成就不屑一顾,因为这些例子仅仅是游戏,而不是混乱商业环境中的真实用例。
也许不是这样的……吴恩达经常说,在任何需要人类几秒钟思考才能完成的智力任务上,人工智能技术都可以超越人类。为了证明他的观点,他已经建立了一个风险基金。[4]
每个月,DL 都在进化,将这 5 秒钟增加到更深思熟虑的任务上。这在图像识别任务中尤其明显,从半导体制造缺陷到癌症的 CT 扫描。智力任务的范围正在逐渐扩大,侵入了以前专为受过大学教育的白领工人保留的领域。
对于管理人员来说,这一 DL 成就的意义在于,它使人类能够创建在挑战智力任务方面超过 HLP 的算法。此外,它揭示了思考和学习这些任务的本质,以便可以实现超越 HLP 的一致的增量改进。
这不是通常的超级智能机器人因为我们的自卑而决定消灭人类的科幻故事。真正的问题是在大型系统中嵌入 DL 应用程序的意想不到的后果,如脸书、亚马逊、谷歌和其他影响许多人生活的公司。
要点:大胆地(负责任地)考虑将 DL 应用到重要的用例中。鉴于 HLP 由来已久的限制,现在可以实现不可想象的任务。DL 赋予了我们巨大的力量,同时也赋予了我们巨大的责任,为了人类的利益,我们应该明智地使用它。有人将 DL 与人类的其他重大发明相提并论,比如核能。如果这种比较是正确的,那么它是一个发人深省的想法。
数据驱动性能
IT 范式是,有了更多的数据,人们就能够在数据中产生更多的关系和更多的跨职能比较,从而产生更多有用的见解。这一假设在过去几十年中推动了数据仓库和商业智能的发展。
新的数字图书馆范例是相似的和协同的。有了更多的数据,DL 模型就能够在概括(即预测)的准确性方面表现得更好。下面是吴恩达在他的 Coursera DL 专业中的一张简单而深刻的幻灯片,标题是“规模推动 DL 进步”。
Model Performance vs Labeled Data
对于任何预测算法来说,模型预测的准确性都受到精选的标记样本数据量的影响。在左边,这些数量可能是几千个例子,不到十亿字节。在右侧,这些数量可能是数百万或数十亿个示例,超过数百万亿字节。左下角表示在没有数据和经验的基础上做出预测,就像掷硬币一样。
这里有几点需要注意…
- 在低量的情况下,任何预测算法都和其他算法一样好。DL 没有优势;因此,使用传统的机器学习算法(如随机森林),因为它们更容易,更快,并提供更好的可解释性。
- 在较高的数量下,具有较多数据的 DL 模型总是胜过那些具有较少数据的模型。然而,DL 模型必须在其结构上变得更加复杂(即,更多的隐藏层,每层具有更多的权重),以吸收数据中的附加信息。而且,这种结构的复杂性意味着训练和解释模型的工作量增加。
- 右上角是机器算法能够超过 HLP 的最佳点。认识到并非所有用例都需要 HLP,因此更少的数据和更简单的算法可能就足够了。
外卖:简单来说,谁拥有数据谁就赢了。控制最多数据的公司最终会战胜所有其他公司!同样,DL 的力量始于数据,也止于数据,不管模型结构有多奇特和复杂。标签化的训练数据集是 DL 的“阿喀琉斯之踵”。
作为打包应用的训练模型
交付解决特定用例的软件工具的常见 IT 范例是通过打包的应用程序,通常由专门处理该用例的专有软件供应商提供。例如,Salesforce.com 推出了一个客户关系管理包,为大公司跟踪从最初的合同到购买的整个销售活动。
新的 DL 范式是软件 2.0……Andrej Karpathy,Testa 的 AI 主管,在他最*的文章中明确了这个概念,然后在推特上对所有的程序员朋友说,“梯度下降可以比你写得更好。对不起。”【5】哎哟!
你能想象吗……数百万程序员因为 DL 而失去工作,涌向华盛顿要求立法限制 DL 的使用并禁止支持 GPU 的设备。同样的事情也可能发生在套装软件供应商身上!
对于 DL 系统的经理来说,这意味着您在过去几年中一直在小心翼翼地成熟的 DL 模型…那是您定制的打包应用程序!打包应用程序供应商的下一代将销售基于大量示例数据集的预训练 DL 模型。通过迁移学习,这些预先训练的模型可以帮助您的 DL 项目节省数月的努力,以达到所需的绩效水*。
外卖:非常尊重地对待你训练过的 DL 模特。这些是您公司的 IT 珠宝,就像一个成熟的数据仓库一样。精通迁移学习,无论是在你的行业内,还是在有类似信息对象的其他行业。
增强,而不是自动化!
信息技术范式是计算机化,以减少日常任务,增加执行任务的一致性。
DL 范式更像是一种伦理主张,包含了大量的常识… 使用 DL 来增加人工任务,而不是使这些任务自动化。
这里的挑战是创造性地将人重新插入到工作流程中。术语 人在回路 (HITL)已经在快速系统的界面设计中使用了几十年(决策时间要求亚秒级响应),就像驾驶战斗机一样。HITL 的典型模式是:监视异常情况,批准高度不确定的情况,调查预测错误的情况,否决感觉不正确的情况,等等。
著名的数字图书馆研究者 Francois Chollet 认为数字图书馆工具不应该被用来操纵人。相反,DL 应该让人们控制那些工具,去追求他们自己的目标和激情。[6]
DL 扩充挑战不受时间限制;它受到思想(或信息)的限制。在 DL 模型中,知识包含在数百万个数字中,这对于张量粉碎来说完全有意义,但对于人脑来说意义不大。我们需要新一代的沉浸式分析(就像下一代视觉分析)来创建虚拟空间,利用所有人类感官来表现这些数字的全部复杂性。我认为人类能够胜任这项任务,并将让他们与计算能力更强的人工同事*起*坐。[7]
要点:设计 DL 系统时,你的 HITL 临界点在哪里?将如何增加,扩大和人性化的人的任务?在模糊的情况下,人类的判断将如何应用?这些人将如何得到适当的装备来执行这些 HITL 任务?
承担责任!
总之,DL 在企业系统中有潜在的好处和坏处。在所有级别,负责支持 DL 的系统的经理必须负责监控和*衡组织和社会的收益和成本。
这篇文章描述了这些经理应该理解并传达给他们的同事的十个范式转变,减轻 IT-DL 脱节的问题,并成功利用 DL。
感谢博尔德数据侦探的 DL 研究小组在过去几个月里与我们进行的讨论,这有助于澄清这些想法。
最后… 如果你从这些文章中受益,请支持 my Patreon 创建并指导小型经理同行小组,以探索由深度学习实现的分析系统的关键管理问题。如果同事对该计划感兴趣,请分享链接或推文。谢谢,理查德
笔记
[1]文章系列概述。惊讶于这个问题是如何爆炸成几十个话题的。这应该够我忙一阵子了!
https://medium . com/@ Hackathorn/series-on-how-managers-should-prepare-for-deep-learning-f5b 795 b 36148
【2】我在完成深度学习 Coursera 专业化后对 DL 的反思。第一部分对课程的逻辑进行了评论,而第二部分则更深入地探讨了创造出比我们更聪明的工具所引发的问题。结论:权力越大,责任越大。
https://towards data science . com/deep-issues-pending-within-deep-learning-f923a 96564 c 7
[3]用像素表示表格数据。一个新兴的 DL 技巧,对举例教学有着更深的含义。与此相关的是由 Rutger Ruizendaal 撰写的文章,该文章基于 de Brébisson 等人在 2015 年发表的论文,强调了实体嵌入用于分类特征。【更新于 2018 年 7 月 4 日。还没有找到表格到图像技巧的参考资料!救命?】
https://towards data science . com/deep-learning-structured-data-8d6a 278 f 3088
[4]五年前的文章,仍然总结了深度学习即将产生的影响,以及吴恩达的背景。经常被引用。
https://www . wired . com/2013/05/neuro-artificial-intelligence/
[5]Karpathy 关于软件 2.0 的文章。对 DL 软件如何不同于我们过去几十年对软件的传统想法的极好描述。他可爱的推文总结了他的观点!
https://medium.com/@karpathy/software-2-0-a64152b37c35
[6]Fran ois Chollet 关于他对人工智能的社会和伦理关注的个人观点。思路清晰,考虑周到。强化增强,而不是自动化点。
https://medium . com/@ Francois . chollet/what-worries-me-about-ai-ed 9df 072 b 704
[7]沉浸式分析(IA),我的长期爱好!别让我开始!然而,我现在看到了通过由 DL 模型集群驱动的沉浸式虚拟世界(大规模的和协作的), DL 和 IA 之间的紧密耦合,所有这些都集中在一个特定的问题领域。感兴趣吗?更多详情请见…
https://www.immersiveanalytics.com/
管理者应该如何为深度学习做准备:新价值观
原文:https://towardsdatascience.com/how-managers-should-prepare-for-deep-learning-new-values-f29a98b70bd8?source=collection_archive---------15-----------------------
Exploring the unique challenges for managing analytic systems enabled by Deep Learning [photo by Charlie Wild on [Unsplash]](https://unsplash.com/@charles_the1st)
TL;DR —请参见末尾的摘要以快速了解概况。
本文是关于深度学习 的管理视角系列文章中的第二篇,面向负责或参与由深度学习** (DL)使用人工神经网络技术实现的分析系统的管理人员。在处理这些系统时,他们面临混乱的概念和独特的挑战。本文重点关注新价值,这些新价值建议了不同的方法来评估组织从支持 DL 的分析中实现的价值。在每一部分的结尾,都有一份外卖为经理们提供了实用的建议。**
走向智能有效性
大型 IT 系统为组织和整个社会创造的价值正在从成本效率转移到智能效率。
正如彼得·德鲁克所说,“效率就是把事情做对;有效性就是做正确的事情。[01]利用这句话,成本效率是指更快、更便宜、更可靠地执行特定任务,而智能效率是指定制任务以满足特定情况的需求。
这两者都很重要,但当任务的目的不能完全明确或随各种情况而有很大变化时,更应注重有效性。对于大规模的系统来说尤其如此。
自从计算的早期以来,计算机系统的价值主要在于以降低成本为目标的效率。手动程序在数据采集和报告方面容易出错。早期的计算机应用是简单地在纸上打印工资支票,这比手工写支票有了巨大的效率提高。生成工资单的任务已被精确地定义,因此计算机化的时机已经成熟。
今天,电子商务系统正在帮助成千上万的客户从成千上万的选择中选择正确的产品,这些选择基于各种因素的组合,如价格、畅销、最低成本、最*更新、关联购买和评论星级。没有预先指定的程序,因为功能会根据产品的可用性和客户的独特性不断变化。在这种大规模的情况下,聪明有效是创造价值的关键。
**收获:**作为一名与分析系统相关的经理,要意识到为特殊情况定制标准程序的机会。评估潜在的业务价值,并向 LOB 同事强调这些机会。请技术同事思考如何利用分析,以便以每小时超过 1000 次的速度独特地处理每种情况。在你的组织中培养一个提高智能效率的机会列表。
超越已知数据的概括
这些系统的智能有效性取决于对大规模生态系统行为的理解,但也取决于小规模的独特互动。促成因素是对已知数据的概括,这与描述已知数据形成对比。[02]
的定义概括意味着通过从较小(但有代表性的)样本中进行推断,做出一个适用于(有效)广泛情况的陈述(假设)。
这是分析的本质——获取关于一组示例案例的数据,并创建适用于类似案例的模型。在对已知数据进行归纳的分析背后有两个关键假设。首先,训练模型的范例案例必须代表模型将预测的所有案例。第二,训练好的模型必须在一个随机的(有约束的)样本子集上进行验证,以获得准确的预测。
在正常生活中,自文明出现以来,人类凭借直觉一直在超越已知数据进行归纳。事实上,我们作为一个物种的生存依赖于这种能力。最*,我们使用我们的 IT 系统以巧妙的方式描述已知数据,使用常规报告、交互式仪表盘和可视化分析。因此,人类的直觉擅长创造洞见,从而归纳因果关系并预测商业未来。
**要点:**作为一名与分析系统相关的经理,您是否意识到您的组织中有哪些领域超出了人类直觉的能力范围而无法得到正确管理?你能举出这个失败的具体例子吗?导致这个问题的因素是什么?你的企业是否涉足新领域,而多年的业务经验与当前的业务问题并不相关?是否有数据可以充分描述当前问题的例子?
一百万个独特的东西
当处理智能有效性情况时,人类直觉的一致性和可靠性是有限的,即使使用描述性分析工具来增强。随着系统复杂性的增加,研究表明直觉本质上是非理性的,因此是次优的。[03]
从管理的角度来看,衡量复杂性的一个标准是经理要负责百万件独特的事情(简称 MUT)。[04]让我们考虑三个例子来说明这一点。
假设你是一家小型零售店的老板。您已经在您的社区开展业务多年,并且亲自了解大多数光顾您商店的顾客。你本能地以定制服务独特地对待这些客户,同时保持社区作为一个整体的感觉。当一个陌生人进入你的商店,你热情地迎接他们,并了解他们的独特需求。你的智能效率可能会得 A。那么,你有多少独特的客户?可能有几百个。四舍五入到 10 的幂,对于一个小型零售店来说,独立客户的数量大约是 10 到 10。
假设你成功了,并在你的区域内建立了多个大型商店。现在你的独特客户可能已经增加到 10⁵.你个人是否认识今天光顾你的商店的大多数顾客?大概不会。你为客户服务的智能效率如何?
想象一下,你取得了巨大的成功,将自己的企业发展成为一家全球零售连锁企业,在几十个国家拥有数千家门店。现在这个数字已经轻松超过了 10⁶.为了服务您的客户,您现在在智能有效性方面遇到了一个真正的大问题!你必须处理好你的 MUT!
结论是,在一百万个独特的事物周围,人类直觉去归纳超越已知数据变得不可靠。[05]
我们世界的复杂性现在已经超出了我们人类直觉的能力,无法进行大规模的可靠概括,尤其是在经济、社会和政治领域。
分析(能够大规模归纳已知数据以外的信息)变得必不可少。支持这些分析的技术已经从描述性统计(过去一百年)发展到机器学习(过去二十年)和人工神经网络(过去五年)。
请注意,从人类历史的大角度来看,这项技术的发展是最*才出现的!古希腊人没有 MUT 问题。
作为人类,我们必须明智地接受分析,以使我们能够智能有效地应对我们世界日益增长的复杂性。
正如一篇相关文章中所指出的,分析应该用来增强人类的直觉,而不是用自动化流程来取代它。[增强直觉]挑战在于用客观数据驱动的支持来增强人类的直觉,以便超越已知数据进行归纳。
**收获:**作为一名分析系统经理,调查你的组织中必须处理 mut 的关键领域。在集成数据仓库的主要主题领域中寻找线索。您的组织在这些方面表现得足够好吗?如果您的组织能够在这些领域显著提高其智能效率,会带来显著的好处吗?
体积—速度—变化
你不必成为一家拥有 1000 家店铺的全球性公司,也能理解和管理一个 MUT。术语大数据经常被滥用来兜售你的成功业务和所有人的更好生活的承诺。然而,来自大数据的 3V 概念有助于解释为什么分析可以实现智能有效性。这完全取决于是否有足够的数据来描述这些 mut。
真正的问题是处理需要管理 MUT 情况的信息内容。[06]换句话说,充分描述一个 MUT 需要多少位数据?1gb 还是 1pb?[06]
以在您的商店购物的 100 万客户为例,MUT 对收集的这些客户的数据意味着什么?
考虑 3V 的维度— 体积 速度 变化 —来解释数据的信息内容,从而解释其支持超出已知数据的概括的潜力。
体积… 客户的例子将事物的体积视为独特事物的数量——它的基数。然而,这可能很棘手,取决于如何定义客户。客户是个人、家庭还是大公司?进一步说,这个东西是顾客与商店的互动吗?而且,这种互动是对商店的实际访问,还是对网站的浏览,还是对邮件优惠券的回应,还是对电子邮件报价的回复?因此,您可能认为您的组织只与几百个客户打交道,但是您将被迫处理数百万件事情来理解这些客户。
速度… 客户互动的例子涉及事物的速度——单位时间内独特的事物。每当时间维度相关时(通常如此),数据速度就成为一个重要因素。所有客户关系管理(CRM)系统都是对客户互动进行分析,而不是对客户进行分析。分析结果可能会汇总到单个客户的邮件活动中,但这些结果是基于对这些交互的概括。
多样性… 作为个人、家庭或公司的客户的例子处理事物的多样性——单一事物的信息丰富性。充分描述一个人、一个家庭或一个公司所需要的信息是非常不同的。如果你的客户是 IBM 或 Apple,你将需要大量的数据来理解如何正确地为公司客户服务。此外,数据现在因图像、文本、音频、传感器等固有的丰富种类而变得丰富。
因此,MUT 的信息内容是体积、速度和这些东西的变化的乘积。例如,100 件事情(比如管理公司客户,而不是个人)可能足以超过人类直觉碰壁的 IC 水*。作为人类,我们不是被设计(也不是进化)来超越这个水*的。[07]
**要点:**作为一名与分析系统相关的经理,3V 如何影响您在关键的百万独特事物领域的信息内容?
特征示例(加标签)
从传统的机器学习到较新的神经网络,一个共同的特征是输入数据的格式,即示例(或行、实例)特征(列、属性),加上一个标签(或目标)作为特征之一。这就是所谓的示例 - 特征 - 标签(简称 EFL)数据格式。[08]
大多数人认为 EFL 数据是表格形式的,因为它通常以类似 Excel 的电子表格形式显示。然而,这是一种误导,因为支持 DL 的模型的特征可能是图像、音乐或其他非结构化数据。神经网络的当前实现将张量(多维矩阵)作为数据的基本单位。
其中一个特征可以是一个标签(或目标),该标签表示该示例的一个重要特征。例如,一个客户可以用一个包含各种特征的例子来表示,比如年龄、性别等等。标签可能是他们过去一个月的购买总额。标签特征是“监督”(引导)算法向有效泛化方向优化的目标。
总之,数据分析以感兴趣事物的示例开始(并结束),由一组特征描述,其中一个可以是重要特征的标签。标签通常是分类值,例如“非常重要客户”,这通常由主观判断决定。
**要点:**作为一名分析系统经理,专注于 EFL 数据中标签的管理。如果数据与其他特征相似,这是模型预期结果的关键陈述。它的值可能是由专家主观设定的,这是昂贵的、容易出错的,并且规模不灵活。
EFL 数据作为价值驱动因素
在关于新范例的文章中,解释了这个数字。[09]横轴对应于 EFL 数据量,右侧是 MUT 区域。纵轴对应于分析生成模型的良好程度,该模型可以超越已知数据进行归纳。
因此,该图(右上方)表明神经网络是目前处理 MUT 问题的最佳技术。此外,这项技术在某些任务上可以超越人类水*的表现。然而,关键的要求是我们能够收集和整理足够的关于我们 mut 的 EFL 数据。
**要点:**作为一名与分析系统相关的经理,评估可用于解决 MUT 问题的 EFL 数据量。如果数据不足,传统的机器学习技术是否足够?如果有足够的数据,潜在的商业价值是否激励你的组织开发神经网络?你有这样做的资源吗?
分析成熟度阶段
分析的价值通常被描述为一系列成熟阶段,对于这些阶段,可以回答某些问题。[10]注意,后面的阶段是超越已知数据的各种形式的概括。
- 描述性——发生了什么?…描述已知数据
- 诊断 —为什么会这样?…从相关性中推断因果关系
- 预测性的 —会发生什么?…推断未来事件的各个方面
- 规定性 —应该发生什么?…朝着理想目标优化计划
这个框架意味着……一个公司通过将分析能力从阶段 1 发展到阶段 4 来达到更高的分析成熟度。由于能够解决更广泛的问题,更高的分析成熟度增加了产生更大商业价值的潜力。然而,努力(以及成本、技能、资源、风险)也会增加。
成熟度阶段对于评估分析能力是很有用的,因为它支持问题的类型。它严重依赖于从洞察力中主观得出的人类直觉,如前所述,这可能不足以处理 MUT 问题。
**要点:**作为一名与分析系统相关的经理,评估 IT 系统支持跨各种职能领域的分析成熟度阶段的能力。您的分析是否足以处理当前运营和未来增长的 MUT 问题?
分析价值链
在组织研究中,称为“价值链”的框架将价值定义为向消费者交付产品或服务所需的一系列活动。这个概念最早是由迈克尔·波特在他 1985 年的著作 【竞争优势】 中描述的,用来解释一个典型公司在为股东创造价值方面的功能。
让我们从分析价值链的角度将这一范式应用于分析。
Analytic Value Chain as pipeline from data to action
分析价值链是从数据到行动的管道,以智能有效的组织行为的形式产生不断增加的价值。序列从左向右流动(实际操作中有相当大的循环)。原材料是数据,而成品是行动,意在改变公司的行为。
如果您的组织必须处理管理 mut,那么它必须支持所有五个阶段的功能,端到端的结果是数据到行动。其含义是:当分析使业务流程能够智能有效地积极影响客户、产品等时,就创造了商业价值。如果没有通过行动对业务流程产生积极的影响,那么组织就不会受益。有了这些输入,所有的分析系统都是昂贵的开销!
**要点:**作为一名与分析系统相关的经理,经理应该采用端到端的关注点,因为这个框架代表了一个价值流,在任何阶段都可能被打断。此外,中间三个阶段是数据科学团队的重点。因此,管理者应该特别注意第一阶段和最后阶段。第一个——Acquire&Curate——处理前面部分讨论的问题,如 MUT 和 EFL。最后一个——操作化&治理——是下一节的主题。
分析最后一英里
与大型电气、通信和运输系统一样,众所周知的“最后一英里”通常是这些复杂系统中最昂贵、最慢、最容易出错的环节。从端到端价值链的角度来看,分析也是如此。
分析的最后一英里强调价值链的最后阶段——操作化和治理——处理操作化分析,以及治理其应用。此时,初始 EFL 数据用于训练和验证神经网络模型。该模型以智能有效的方式增强了特定的业务流程,并根据一组策略监控和治理其行为。
当前的实践通常被称为分析开发,以表明开发模型的团队和执行其生产应用程序的团队之间的紧密协作。神经网络模型出现了一系列独特的问题:
- 所需的软件能在生产环境中执行吗?做模型预测需要什么?
- 在大型流系统中实施实时模型预测,而不是对数据仓库进行批量预测更新
- 检测到当前模型不再有效,因为操作数据已经偏离了训练数据
- 模型是否需要再培训:再培训可以在生产环境中同时进行吗?在什么时间周期—每天、每小时?
- 检测训练数据中的非预期偏见,如性别/种族偏见。
- 链接到数据治理,将模型作为学习逻辑而非静态逻辑来管理
- 通过冠军挑战者动态不断改进模型性能
- 经理和受影响的消费者对模型结果的可解释性
- 整个端到端分析工作流的管理和可审核性
**要点:**作为一名分析系统经理,分析的最后一英里是你最大的挑战。尽早并经常分配足够的资源,并给予你高度的关注。
作为价值维系者的学习
最后一个主题是,通过分析系统学习成为价值的长期维持者。一旦这种学习停止,系统的价值就会下降,因为模型概括新例子的能力会减弱。
Testa 人工智能总监 Andrej Karpathy 在他 2017 年的文章 Software 2.0 中最好地捕捉了这种范式转变。他写道…
因为现在很容易收集关于许多业务问题的数据,所以与编写显式静态代码相比,可以使用这些数据更快、更有效地训练神经网络模型。这些模型实际上是数据驱动的,而不是像前 50 年的商业计算那样是代码驱动的。
Karpathy 区分了静态逻辑(硬编码)和学习逻辑(示例训练),并假设这些示例有足够的数据。
让我们再进一步学习逻辑,不断对新的示例数据进行再训练。
通常的情况是……一个模型在一组原始的例子上被训练和验证。创建这样的范例集是一项困难、昂贵和劳动密集型的工作。该模型在生产系统中投入运行后,表现符合预期。而且,由于创建这些新示例的工作量很大,该模型不会在新示例上重新验证。
请注意潜在的假设…新的示例被认为与旧的示例相似(具有代表性),因为业务没有发生重大变化。因此,重新训练是不值得的。
然而,对于大多数组织来说,当前环境的变化超出了人们的想象。此外,数据基础设施正在走向成熟,因此可以收集新的示例作为正常操作的一部分,如果该功能作为模型操作化的一部分实现的话。
**要点:**作为一名分析系统经理,将您的分析系统从静态逻辑转移到学习逻辑和学习逻辑的商业价值是什么?你有实现这一价值的资源吗?
摘要
本文为定义和确定大型分析系统的价值构建了一个循序渐进的论证。该论点用基本概念解释了这些步骤,这些基本概念可以在所有管理级别上讨论,并为评估和协作提供了一个共同的基础。
增强始于对比有效性(做正确的任务)和效率(做正确的任务)。重点放在智能有效性——定制任务以满足特定情况的需求。关键的能力是根据关于过去情况的数据概括新的情况,从而实现任务的定制。人类的直觉很好地服务于这一功能,直到最*复杂性超过了它的极限。当管理超过百万个唯一事物(简称 MUT)时,这个限制就会出现。然而,事物在数量、速度和多样性方面存在差异,因此一些快速发展的复杂事物可能会非常难以管理。
捕捉这种复杂性的格式是一组示例,每个示例都有其特性,外加一个表示目标值的标签。这种“示例-特征-标签”格式的数据称为 EFL 数据,它是分析系统的价值驱动因素。随着 EFL 数据量的增加,DL 模型的表现越来越好,最终超过了人类水*的表现水*。
讨论转移到处理各种问题的四个分析成熟度阶段。这与分析价值链形成对比,后者展示了将数据转化为行动的增值渠道。突出显示的是分析的最后一英里,这是可操作的&治理步骤,通常是为组织产生价值的瓶颈。
最后一部分关注作为价值维系者的学习。对静态逻辑、习得逻辑和学习逻辑进行了区分。后者是长期保值的唯一选择。
感谢… 位于的 DL 研究小组,博尔德的数据侦探们在过去几个月里与我们进行了讨论,帮助我们理清了这些想法。
最后… 如果你从这些文章中受益,请支持 my Patreon 创建并指导小型经理同行小组,探索由深度学习支持的分析系统的关键管理问题。如果同事对该计划感兴趣,请分享链接或推文。谢谢,理查德
尾注
[01]引用自德鲁克的著作 《有效的管理者:把正确的事情做好 。这本书的 12 条经验的简明摘要似乎非常适用于管理支持 DL 的系统。此外,1993 年 5 月的文章对这种效率-效益的区别进行了详尽的阐述。
[02]概括是数百年来科学、逻辑和统计中的一个基本概念。来自维基百科的定义抓住了它的本质:通过抽象共同属性从具体实例中形成一般概念,这导致定义形成整体的相互关联的部分。术语抽象是遵循一般规则的过程的结果,就像数据分析算法一样。
[03]丹·艾瑞里 2008 年出版的《可预测的非理性:塑造我们决策的隐藏力量 是一本革命性的书,讲述了当今社会动态,无论是个人还是社会,似乎都以违背理性逻辑的方式表现。因此,基于理性的模型充其量是误导性的。2016 年,《福布斯》的乔诺·培根采访了艾瑞里,探究我们如何【能够】帮助机器更好地理解我们【人类】。有一句话引人注目:我认为我们应该与人性合作,而不是试图违背人性,并且……看看人们犯的错误,并……想想纠正这些错误的途径是什么,以及需要什么样的系统。
【04】术语 thing 是有意的非正式用法,用于泛指某一情况下涉及的物体或事件。正式术语是实体*,在韦氏词典中定义为独立存在的任何事物。在数据结构化中,术语实体在实体关系模型 (ER 模型)中具有正式角色,即在一种情况下相互关联的感兴趣的事物。*
【05】TBD:需要研究来支持断言人类无法超越 MUT* 进行可靠的概括。阅读大卫·温伯格 2012 年的著作《大到不知道:重新思考知识》 ,寻找灵感。*
【06】术语 信息量 (或自我信息)是分析学的一个基础性课题,涉及到 1948 年 Claude Shannon 的 信息论 ,形式化为 熵 的概念。它是从随机数据样本中获得的“惊喜”。惊喜越多,熵就越多。如果来自数据的惊奇加倍(即,提供两倍的选择)并且继续加倍(例如,乘以 2、4、8…),则信息内的比特数(即,其熵)是 1、2、3…
[07]解决方案是增强人类的直觉,而不是用自动化过程取代它。这一点——增强而不是自动化——在新范例文章中有解释。分析可以是将信息复杂性降低到人类直觉可以理解并成功执行的水*的工具。这个类比就像一架望远镜或显微镜,可以增强人类感官和直觉来观察和理解非常大或非常小的物体。在上面的注释[03]中,增强应该有助于人类直觉中的错误。
[08]这是假设模型的常规监督*(相对于非监督)训练。通过预测“真实”标签值的准确度来监督(指导、评估)训练。这组例子被分成一个较大的训练集和一个较小的测试集。所有训练示例的每个循环被称为一个时期。在每个时期之后,记录训练和测试示例的标签和预测值的不匹配,并绘制在学习曲线中。该图表显示了该模型在偏差(接*正确值)和方差(接*某个值)误差方面的泛化能力。这总结了当今大多数传统的机器学习实践。然而,深度学习实践正在以令人惊讶的方式扩展这个框架,这将在未来的文章新视野中讨论,该文章讨论了元学习研究。*
[09]此图表在新范例文章的数据驱动性能部分有更详细的解释。这是吴恩达在 Coursera DL 专业化中题为“规模推动 DL 进步”的幻灯片的简化版。
[10]大多数显示分析成熟度四个阶段的图表都是 Gartner 在 2012 年 3 月发布的。然而,有人引用了汤姆·达文波特 2007 年的一篇文章。甚至维基百科也对其起源保持沉默。也许这个图表应该被重新命名为分析能力阶段(或者级别)。
男士服装店如何利用数据科学竞赛。
原文:https://towardsdatascience.com/how-mens-wearhouse-could-be-using-data-science-cont-75a99a37f9cb?source=collection_archive---------10-----------------------
写完关于男士服装店如何利用数据科学的短文后。我和我的团队继续讨论如何向顾客推荐男装店的产品。我们相信,如果男装店可以将他们的店内顾客体验和时尚知识(这很棒)转移到网上,那么他们的市值将从目前的 16.5 亿美元增长到现在的几倍。不知何故,Stitch Fix 的市盈率为 666 倍,市值为 2B 美元(高于亚马逊的市盈率)。同样,男装店也有机会创造类似或更好的服务,帮助推荐可能会增加网上购买的产品。
在创建一个推荐产品的系统时,我们的第一步是将客户分类。这可以使用像 K-最*邻或 SVM 这样的算法来完成。这也取决于客户是否已经被分类(我们假设没有)。因此,这一步首先需要一种无监督的方法,看看你是否能开发出可以解释的自然聚类。
如果这是成功的,那么接下来的几个步骤可以分开并同时完成。
其中一个重要的步骤是计算客户的可能价值。这可以通过考虑过去的购买习惯来计算,例如客户是否经常购买一种产品,或者他们是否每年购买一次价值 2000 美元的产品,这些客户是为了销售而来,还是购买全价商品。他们还可以购买第三方数据来计算顾客在商店外的其他消费习惯和可自由支配收入。这将提供更准确地向每个客户营销正确价格点的能力,以及更好地引导客户转向客户已经知道的品牌。
另一个重要的步骤是考虑每个人可能会购买哪些产品。顾客是否想购买一双绿色条纹袜子、一个领结、一条领带、一套新西装等。由于男装店已经有很多过去的购买历史,他们已经知道什么样的服装可以搭配顾客已经拥有的服装。这将是一组独立的试探法或业务逻辑,在将每个组分成不同的类别后会出现,因为这将有助于更好地拟合预测,并消除您在查看过大数据集时遇到的一些干扰(您将注意到的一件事是,我们将多次使用分解数据或步骤的概念,因为我们相信这有助于提高准确性并减少复杂问题的干扰)。
这可能是一个算法,也可能是多个算法来进一步分解问题。例如,你可以试着预测一个人会买哪种产品。然而,尝试创建一个算法来预测可能是替换购买、新购买和自发购买的购买可能更容易。这些都可能有不同的模式和功能,可能会被浏览时,试图使所有的所有产品推荐算法结束。
这需要测试,以确定哪种方法更好。一旦做出决定,那么算法可以是从决策树到神经网络的任何东西,可以用来预测该人应该购买的下一件产品是一件新的紫色条纹礼服衬衫,搭配灰色三件套西装和纯紫色领带(我实际上不确定这是否可行),这就是为什么该系统会对他们的客户有帮助!它消除了对犯错的恐惧,并提供了不思考的便利。
一旦决定了产品,就需要正确地包装广告。我们可以预见广告会出现在电子邮件中,也会出现在男士服装店的“完美合身”应用程序中。如果他们可以在应用程序上获得良好的用户基础,那将是最佳的,然后每隔几个月就会弹出一个通知,列出客户可能感兴趣的 2-5 种产品。而不是仅仅告诉顾客他们的衬衫尺寸。为更多的购买制定可行的步骤。归根结底,这才是他们真正的目标。做这件事可能会有帮助。这种类型的系统有可能消除知道穿什么的压力。也许它甚至可以推荐在特殊场合或日常商务场合穿什么。男装店越能提供服务,而不仅仅是产品,就会增加顾客的忠诚度和购买量。因此,如果男装店可以在网上衡量他们的店内感觉,我们预计会有类似的结果。我们有很多方法可以看到这种数据产品被用来提高客户满意度和销售额。
最后,一旦广告展示给你的客户,跟踪广告的成功是很重要的。这是最有价值的步骤之一,因为知道结果将允许公司在未来创建更准确的算法和产品。如果顾客在网上看到广告后立即购买,那么就很容易合理地判断广告何时成功。客户也可能在几天后亲自或在线购买产品,因此也必须考虑这一点。这可能需要某种形式的商业规则。也许如果一个产品在看到广告后不到 15-30 天内被购买,他们会认为它是成功的。在这个范围内会有假阳性,但是这需要实际的测试。
我们非常好奇,看看已经存在一段时间的男装店和其他零售商将如何开始越来越多地将他们的数字战略与他们已经拥有的所有数据整合起来。在我们看来,有很多旧的概念,如产品推荐和广告定位,仍然有很多工作可以做,以帮助增加公司的利润和整体效率。此外,将核心竞争力转移到网上,比如店内时尚建议,将大有裨益。
有兴趣阅读更多关于成为更好的数据科学家的信息吗?
如何成长为一名数据科学家
助推装袋,构建更好的算法
作为数据科学家如何在公司政治中生存
机器学习的 8 个顶级 Python 库
什么是决策树
男士服装店如何利用数据科学
原文:https://towardsdatascience.com/how-mens-wearhouse-could-use-data-science-4a194f8fdbb?source=collection_archive---------8-----------------------
最*,我会见了几个朋友,为将于 5 月 31 日在西雅图举行的关于电子商务的机器学习小组会议做准备。我们的目标是用数据科学和数据分析解决方案回答零售商的实际业务问题。我们开始讨论如何利用数据来改善不同的实体店和电子商务网站。
我们的一次讨论让我们谈到了男士服装店。我们最初是从讨论网上买衣服的问题开始的。主要问题是尺寸和品牌之间的差异。
最终,它让我们意识到,男装店可能正坐拥利用其客户大量数据的机会,或者……它应该抓住机会收集更多数据。老实说,我们感到惊讶的是,男装店似乎仍然没有类似下面的一些想法,因为 Stitch Fix 已经提供了一些这样的服务。
Here is an example from Stitch Fix’s Algorithm Page…it is honestly just fun to watch and think about all the different algorithms they have developed to mange each portion of their supply chain.
以前的购买历史
上次我去男装店时,销售助理查看了我上次购买的服装,帮我找到了一些与我之前购买的套装相配的衬衫和领带。
为什么不用这些信息为我下次网上购物提供时尚建议。有点像虚拟时尚顾问(有点像缝针)。而不是每天用 2-3 封电子邮件来轰炸我的销售(这是他们目前的做法)。他们可以用更个性化的方式来处理这个问题。
男装店已经知道我有一套灰色西装,搭配两件不同款式的紫色礼服衬衫、一件蓝色礼服衬衫等。也许他们发送的电子邮件会推荐另一件与顾客当前西装相配的礼服衬衫,也许是另一条与礼服衬衫相配的领带,或者是一套全新的西装。你明白了。他们可以从本质上管理顾客的衣柜,并通过消除知道什么衬衫配什么西装的不便来增加价值。归根结底,大多数成功使用数据的服务都专注于提供更多便利。网飞、亚马逊、优步等。与同类产品相比,它们都提供了更多的便利,而且……最重要的是,让花钱变得更容易。
事实上,男装店甚至可以更上一层楼。如果他们能够获得足够的数据,将他们的客户分为不同的类别,如“传统型”、“冒险型”和/或“古怪型”,那么他们就可以更好地知道向谁销售哪些产品。有时候,人们甚至不知道他们穿其他颜色好看,疯狂的袜子等。他们只是需要有人建议一个新的外观。
同样,也许男装店可以预测某个性类型的人会喜欢戴领结,然后要么推荐一款与顾客西装相配的领结,要么免费送给他们一款(这可能会令人毛骨悚然)。但最终,它可能会让顾客在未来购买三个领结,并对佩戴它们感到自信。
也许男装店还可以打造一个豪华版的 Stitch Fix 服务,专门针对西装和更精致的时装。
他们有我的尺寸
再一次,以一种奇怪的方式,男装店可能拥有的关于我们的信息量可能令人毛骨悚然。然而,事实上,他们得到我们的尺寸对所有的服装零售商来说都是非常有价值的。
我相信梅西百货会很想知道我的确切尺寸!然后,他们可以更好地向我推荐产品。此外,我相信在未来,所有的零售商都必须知道我们的尺寸和尺寸,才能与像 Stitch Fix 这样专注于让产品尽可能方便的公司竞争。
这对男式 Wearhouse 来说是一个巨大的优势。我不在网上购买衣服的一半原因是我不确定它们是否合身。然而,如果他们真的知道什么产品适合他们的客户,什么不适合,那么他们就意味着他们可以给我们发送产品,避免过多的退货。这将为他们或他们的客户节省一大笔退货费用。无论是哪种情况,都会改善他们的服务,给我留下一个满意的顾客。
结论
这是我们讨论过的两个想法。在这种情况下,Stitch Fix 确实具有先发优势,我们认为,像梅西百货、男装店和其他服装店这样的公司将不得不效仿,以便参与竞争。
否则,这些公司就有可能像百视达或巴诺一样完蛋。让服务和产品更方便往往是最成功的策略。
如果 Men's Wearhouse 突然开始向你推荐与你目前的衣橱直接相关的衣橱,你会有什么感觉?
是不是有点太小众报道了?
加入我们关于电子商务的机器学习小组进一步讨论!
其他关于数据科学的精彩阅读:
什么是决策树
算法如何变得不道德和有偏见
如何开发鲁棒算法
4 数据科学家必备技能
p 值二分法会如何影响统计测试中得出的结论?
原文:https://towardsdatascience.com/how-might-p-value-dichotomization-affect-the-conclusions-achieved-in-statistical-tests-54ab8f3e5873?source=collection_archive---------10-----------------------
具有相似数据属性的模拟数据中显著 p 值缺乏可重复性的探索性分析
研究人员目前主要关注的一个问题是以前和现在的研究结果缺乏可重复性。在当前和未来的研究中,有一种认识认为需要采取措施来减少假阳性的估计数量。然而,对于实现这一目标的最佳战略存在分歧。战略范围从更自愿和理想主义的到更有限制性和务实的。
在获得更具可重复性的结果的过程中,一个激烈的争论是降低甚至消除单变量测试的典型 0.05 临界值(此处为争论的介绍)。典型的单变量统计分析包括对数据集每个特征的单变量测试(如病例和对照之间的学生 t 检验)中的 p 值进行计算。从几十个要素中,观察到一些具有显著 p 值的要素,因为它们低于截止值。然后,根据所分析的因素,阐述了与这些特征中发现的显著差异相一致的故事。
这种策略承认,在显著性和非显著性 p 值的这种二分法过程中,可能会产生一些假阳性和假阴性。一个 p=0.049 的特征的结果和另一个 p=0.051 的特征的结果实际上有多大差别?直观上,差异可以忽略不计。然而,我感觉有一种默契,即一定的任意限制对于删除非信息数据是必要的,这样结果(以及对这些结果的解释)就更容易被潜在的读者理解。基本上是通过分析来避免瘫痪。
我理解这种简化的需要。然而,我认为目前对于这种简化会在多大程度上改变结论缺乏理解。我发现探究由于 p 值的二分法,结果的可重复性有多低很有趣。为此,我使用了 113 个样本(57 个对照样本和 56 个病例样本)和 46 个特征的代谢组学数据集。在下一张表中,我显示了 p 值最低的 10 个要素及其相关的 t 统计量(绝对值大于 1.96 表示 p 值小于 0.05):
所以我们有 7 个显著不同的特征。有了这 7 个特征,我们就产生了一个关于这些差异是如何被所研究的因素解释的好故事,并且我们有了一篇文章。
但是,如果我们模拟与分析的数据集具有相同属性的数据,会发生什么呢?t 检验研究两组正态分布样本的均值之间的差异,考虑每组中样本的数量和标准差。如果我们模拟具有相同特征的数据,我们应该在 t 检验中观察到相似的结果。这种模拟数据应该是后来试图复制相同效果的研究中发现的数据的最佳代表。
这是在原始数据集和模拟数据集中估计的 46 个 t 统计量(每个要素一个)的比较:
当模拟具有相同分布的数据时,模拟的数据将不会与原始数据完全相同。生成的略有不同的数据集解释了观察到的略有不同的 t 统计。
然而,当我们对 p 值进行二分法处理时,原始数据集中的 t 统计量和模拟数据集中的 t 统计量之间的高度相关性会恶化。下图左图中的红线表示 1.96 的界限,它区分了显著和不显著的结果。我们可以观察到,在模拟数据集中有一些值高于 1.96,而在原始数据集中有一些值低于 1.96。因此,模拟数据集中会有几个更重要的 p 值。在下面的右图中,我们可以更好地观察二分法的效果(0 =不显著;1 =显著)。这种二分法在质量较差的模拟数据集和原始数据集之间进行比较。
这些不同的显著和非显著结果的产生帮助我们更好地理解 p-hacking 的本质,这是一组注定要使显著 p 值的数量最大化的实践。通常,我们将 p-hacking 与试图尽可能扭曲数据以生成更多重要 p 值的恶意面孔联系在一起。然而,我们需要理解的是,具有相同分布的重复数据可以产生数量大不相同的显著 p 值。这是在 1000 次模拟数据迭代中发现的显著 p 值数量的密度图:
因此,如果不扭曲数据,而只是在处理后查看“复制数据”,我们可能会发现不同数量的 p 值。提高数据质量的可能措施范围有助于意外地找到一种最大化显著 p 值生成的配置;我们发现后验关于这种最大化是如何产生的合理解释,而不是通过数据改进,而不是通过掷骰子直到得到正确的组合。最大限度地减少非自愿的 p-hacking 实践可能需要加强对数据操作的限制,对执行这种操作的必要性进行更深刻的解释,或者如果不是绝对必要的话,简单地删除 p-值二分法。
当将 p 值二分法时,我们实际上是将数值数据转化为二元分类数据。因此,我们可以通过分类性能度量标准(如 ROC 曲线下的面积 (AUROC ))来开发对假阳性和假阴性的直觉。这种度量有助于直观地了解分类模型在不产生假阳性的情况下找到真阳性的能力。
通过 AUROC,我们可以比较在原始数据集中获得的显著和非显著 p 值在模拟数据集中的统计分析中是如何复制的。如果我们对模拟数据进行 1000 次迭代,对得到的 AUROC 值进行分析,我们得到的是得到的 AUROC 值的这个密度图(是“AUROC 值”,不是“AUROC 曲线”;抱歉:)):
你真的会相信预测分类和获得分类之间的分类仅仅比 0.7 好一点的模型吗?这就是在随后的研究中用相同的数据分布获得的显著 p 值的可重复性。
当通过 Benjamini-Hochberg 调整 p 值时,没有发现有意义的改善(发现 1.00 值中的尖峰;然而,这是与非常低数量的有效 p 值的产生相关的假象)。
p 值校正有助于处理执行的测试数量,但可能无法帮助处理将数值变量转换为二进制变量时信息是如何失真的。
对模拟的 AUROC 值的分析应该是 p 值二分法对可重复研究的可能有害后果的另一个例子。
我相信,大多数研究人员至少有一些直觉,知道在这种二分法之后,信息有多糟糕,以及在未来的研究中,结果可能不会总是重现。然而,这种影响的强度可能被低估,因为 p 值和 t 统计的解释很困难。更好地理解这种恶化的可能方法是显示某个特性具有显著 p 值的模拟迭代的百分比。下表比较了 p 值、t 统计量和 1000 次模拟迭代中 p 值显著的百分比:
为什么特征 26 比特征 11 更重要,而特征 26 的显著差异在未来的研究中可能只再现了 4.8%呢?
依我看,像第三个这样的度量标准可以更好地理解每个特性的能力,以区分病例和控制。更容易检测到三个特征可以作为区分病例和对照的单一生物标记。此外,其他几个特征也显示出一定的辨别能力。然而,这种能力似乎是部分的,而是由可能通过特征工程(例如,PCA)或多变量分析来分析的高级机制来调节。试图基于几个特征来叙述一个故事是没有任何意义的,这些特征显示出在具有类似分布的未来数据中再现的能力略好于 50%。此外,故事的质量将会提高,因为需要与其他特征的部分差异保持一致。最后,这种带有部分歧视的其他特征的报告将减少参与 p-hacking 的动机。
我对这些现象背后的统计学基础缺乏了解,这让我不愿意陷入一些武断的结论。然而,我有一种直觉,可以取得一些进展,以确保为解释所取得的成果而创造的故事更加可靠。作为一种选择,我认为至少有必要帮助读者更清楚地了解关于后来研究结果可重复性的实际观点。
一个 IT 工程师需要学多少数学才能进入数据科学/机器学习?
原文:https://towardsdatascience.com/how-much-maths-does-an-it-engineer-need-to-learn-to-get-into-data-science-machine-learning-7d6a42f79516?source=collection_archive---------1-----------------------
注意:如果你正在寻找一篇关于数据科学的各种数学资源的更全面的文章,请看看这篇文章。
[## 数据科学的基本数学
成为更好的数据科学家需要掌握的关键主题
towardsdatascience.com](/essential-math-for-data-science-why-and-how-e88271367fbd)
免责声明和序言
一、免责声明,我不是 IT 工程师:-)
我是一名技术开发工程师,从事半导体领域的工作,特别是高功率半导体,日常工作主要是处理半导体物理、硅制造过程的有限元模拟或电子电路理论。当然,在这一努力中有一些数学,但无论好坏,我不需要涉足一个数据科学家所必需的数学。
然而,我有许多 IT 行业的朋友,并观察到许多传统的 IT 工程师热衷于学习或为数据科学和机器学习或人工智能的激动人心的领域做出贡献。
我正在涉足这个领域,学习一些可以应用到半导体器件或工艺设计领域的技巧。但是当我开始深入这些令人兴奋的科目时(通过自学),我很快发现我不知道/只有一个初步的想法/忘记了我在本科学习的一些基本数学。在这篇 LinkedIn 文章中,我漫谈一下 …
现在,我拥有美国一所著名大学的电子工程博士学位,但如果没有复习一些基本的数学知识,我仍然觉得自己在扎实掌握机器学习或数据科学技术方面的准备不完整。
无意冒犯 IT 工程师,但我必须说,他/她的工作性质和长期培训通常会让他/她远离应用数学世界。(S)他可能每天都在处理大量的数据和信息,但可能不强调这些数据的严格建模。通常,有巨大的时间压力,重点是“将数据用于你的迫切需要,并继续前进”,而不是对其进行深入的探测和科学探索。
然而,数据科学应该永远是关于科学的(而不是数据),沿着这条线索,某些工具和技术变得不可或缺。
这些工具和技术——通过探索潜在的动态来模拟一个过程(物理的或信息的),严格估计数据源的质量,训练人们从信息流中识别隐藏模式的感觉,或清楚地理解模型的局限性——是合理的科学过程的标志。
它们通常在应用科学/工程学科的高级研究生课程中讲授。或者,你可以通过类似领域的高质量的研究生水*的研究工作来吸收它们。不幸的是,即使是十年的传统 IT 职业生涯(开发操作系统、数据库或 QA/测试)也无法严格传授这种培训。简单地说,没有必要。
它们变化的次数
直到现在。
您看,在大多数情况下,对 SQL 查询有无可挑剔的了解,对总体业务需求有清晰的认识,并对相应的 RDBMS 的一般结构有所了解,足以执行提取-转换-加载循环,从而为任何称职的 IT 工程师为公司创造价值。
但是,如果有人突然来访,并开始问一个奇怪的问题,如“你的人工合成测试数据集足够随机吗”或“你如何知道下一个数据点是否在你的数据底层分布的 3-sigma 限制内”,会发生什么呢?或者,即使隔壁隔间的计算机科学毕业生/书呆子偶尔开玩笑说任何有意义的数据表(也称为矩阵)数学运算的计算负载随着表的大小(即行数和列数)非线性增长,也会令人恼火和困惑。
这类问题越来越频繁和紧迫,因为数据是新的货币。
执行官、技术经理、决策者不再满足于仅仅通过传统 ETL 工具获得的干巴巴的表格描述。他们希望看到隐藏的模式,感受列之间的微妙交互,希望获得完整的描述性和推理性统计数据,这些统计数据可能有助于预测建模,并将数据集的投影能力扩展到远远超出其包含的值的直接范围。
今天的数据必须讲一个故事,或者,如果你愿意,唱一首歌。然而,要聆听它美妙的旋律,你必须精通音乐的基本音符,这些是数学真理。
事不宜迟,让我们来看问题的关键。如果一个普通的 IT 工程师想进入商业分析/数据科学/数据挖掘领域,他必须学习/更新的数学基本主题/子主题是什么?我将在下面的图表中展示我的想法。
基础代数、函数、集合论、绘图、几何
从根源开始总是一个好主意。现代数学的大厦是建立在一些关键基础上的——集合论、泛函分析、数论等。从应用数学学习的角度来看,我们可以通过一些简洁的模块(排名不分先后)来简化对这些主题的学习:
a)集合论基础,b)实数和复数及基本性质,c)多项式函数,指数,对数,三角恒等式,d)线性和二次方程,e)不等式,无穷级数,二项式定理,f)排列和组合,g)图形和绘图,笛卡尔和极坐标系统,圆锥曲线,h)基本几何和定理,三角形性质。
结石
伊萨克·牛顿爵士想要解释天体的行为。但是他没有足够好的数学工具来描述他的物理概念。因此,当他躲在他的乡村农场里躲避英格兰城市爆发的瘟疫时,他发明了这个(或某种现代形式的)数学分支。从那时起,它被认为是任何分析研究的高级学习的门户——纯科学或应用科学,工程学,社会科学,经济学,…
毫不奇怪,微积分的概念和应用出现在数据科学或机器学习领域的许多地方。涉及的最基本主题如下-
a)单变量函数、极限、连续性和可微性,b)中值定理、不定形式和洛必达法则,c)最大值和最小值,d)乘积和链法则,e)泰勒级数,f)积分学的基本和中值定理,g)定积分和反常积分的计算,h)β和γ函数,I)二元函数,极限、连续性、偏导数,j)常微分方程和偏微分方程的基础。
线性代数
在上得到了新朋友建议脸书?一个久违的职业联系突然在 LinkedIn 上加了你? 亚马逊 突然推荐了一本超赞的言情-惊悚小说给你下次假期阅读?还是 网飞 为你挖掘出一部纪录片中那颗鲜为人知的宝石,恰好符合你的口味和心情?
如果你学习了线性代数的基础知识,那么你就拥有了关于基本数学对象的知识,这是科技行业所有这些成就的核心,这种感觉难道不好吗?
至少,你会知道控制你在 目标 上购物的数学结构的基本属性,你如何使用 谷歌地图 ,你在 潘多拉 上听哪首歌,或者你在 Airbnb 上租谁的房间。
要研究的基本主题是(无论如何不是有序或详尽的列表):
a)矩阵和向量的基本性质——标量乘法、线性变换、转置、共轭、秩、行列式,b)内积和外积,c)矩阵乘法规则和各种算法,d)矩阵求逆,e)特殊矩阵——方阵、单位矩阵、三角矩阵、关于稀疏矩阵和密集矩阵的概念、单位向量、对称矩阵、埃尔米特矩阵、斜埃尔米特矩阵和酉矩阵,f)矩阵分解概念/LU 分解、高斯/高斯-乔丹消去法、解 Ax=b 线性方程组,g)向量空间、基、跨度、正交性、正交性、线性最小二乘法
这里有一篇很好的关于线性代数的文章。
统计和概率
只有死亡和税收是确定的,其他都是正态分布。
在关于数据科学的讨论中,牢固掌握统计学和概率的基本概念的重要性怎么强调都不为过。该领域的许多从业者实际上将机器学习称为统计学习。当我在研究我的第一个机器学习 MOOC 时,我看了广为人知的“统计学习简介”,并立即意识到我在这个主题上的概念差距。为了填补这些空白,我开始参加其他侧重于基本统计和概率的 MOOCs 课程,并阅读/观看相关主题的视频。这个主题是巨大的和无止境的,因此有重点的规划是至关重要的,以涵盖最基本的概念。我试图尽我所能把它们列出来,但我担心这是我最欠缺的地方。
A)数据汇总和描述性统计,中心趋势,方差,协方差,相关性,B)概率:基本思想,期望,概率演算,贝叶斯定理,条件概率,c)概率分布函数-均匀,正态,二项式,卡方,学生 t 分布,中心极限定理,d)抽样,测量,误差,随机数,e)假设检验,A/B 检验,置信区间,p 值,f)方差分析,g)线性回归,h)功效,效应大小,测试方法,I)研究和实验设计。
这是一篇关于数据科学家统计知识的必要性的好文章。
专题:最优化理论,算法分析
这些主题与应用数学中的传统论述几乎没有什么不同,因为它们在专业研究领域(理论计算机科学、控制理论或运筹学)中最相关和最广泛使用。然而,对这些强大技术的基本理解在机器学习的实践中可以是如此富有成效,以至于它们在这里值得一提。
例如,几乎每种机器学习算法/技术都旨在最小化受到各种约束的某种估计误差。这是一个最优化问题,通常通过线性规划或类似的技术来解决。另一方面,理解计算机算法的时间复杂性总是一种非常令人满意和深刻的体验,因为当算法应用于大型数据集时,它变得极其重要。在这个大数据时代,数据科学家通常需要提取、转换和分析数十亿条记录,因此他必须非常小心地选择正确的算法,因为它可以决定惊人的性能或彻底的失败。算法的一般理论和属性最好在正式的计算机科学课程中学习,但要理解如何分析和计算它们的时间复杂性(即,对于给定大小的数据,算法运行需要多长时间),必须对数学概念有基本的了解,例如 【动态编程】 或递归方程。熟悉数学归纳法 的**证明的技巧也会非常有帮助。**
收场白
害怕吗?作为先决条件要学习的令人费解的主题列表?不要害怕,你会随时随地根据需要学习。但是目标是让你的心灵之窗和门保持敞开和欢迎。
甚至还有一门简明的 MOOC 课程让你入门。注意,这是一门初级课程,用于更新您高中或大一水*的知识。这里有一篇关于 kdnuggets 上 15 门最佳数据科学数学课程的总结文章。
但你可以放心,在刷新这些话题之后,其中许多你可能在本科时就已经学习过,甚至学习过新概念,你会感到如此有力量,你一定会开始听到数据唱出的隐藏的音乐。这被称为成为数据科学家的一大飞跃…
#数据科学,#机器学习,#信息,#技术,#数学
如果您有任何问题或想法要分享,请通过tirthajyoti【AT】Gmail . com联系作者。此外,您可以查看作者的 GitHub 资源库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学习资源。也可以在 LinkedIn 上关注我。
学数据科学应该交多少钱?
原文:https://towardsdatascience.com/how-much-should-you-pay-to-learn-data-science-bfdd0880c9ad?source=collection_archive---------11-----------------------
对于任何想知道他们是否应该追求 MS Analytics(又名 MS 数据科学)或只是使用在线培训的人,以下是我作为已经获得 MS Analytics 和的人使用在线资源的观点。
首先,我们来谈谈货币。你不应该只考虑金钱成本,还应该考虑那些时间、信誉和意志力的成本。你必须找到一个适合你的*衡点。
时间
是的,你需要学习的一切都可以在网上免费或低价获得。然而,它的大部分是过度技术性和迟钝的。另一个常见的问题是,许多错误的材料也被兜售。围绕数据科学的炒作正处于白热化,大量骗子已经进入这个领域。
这两种杂乱的来源——迟钝的材料和错误的材料——会浪费你很多时间。如果你处在一个你的时间很宝贵的位置,那么为一个精心策划的、精简的、可信的课程付费将会有很强的价值主张。
在线学习也有价值。尽管我已经完成了 MS Analytics,但我仍然经常使用在线资料,以(1)保持自己的敏锐,(2)扩展我的知识库,以及(3)注意不同的术语(例如,“行”≈、“记录”≈、“元组”≈、“个人”≈、“观察”≈、“对象”≈、、 … )。随着其他学科对统计技术的“重新发明”,许多新的术语不必要地产生了。一个典型的例子是将计算多元统计学重新命名为“数据科学”和“机器学习”。咳咳…“科学”和“学习”功能主要是统计数据。(除非你只是想……宣传你正在销售的东西,否则你为什么要更名呢?…嗯…)
如果你有强烈的动力,从网上学习可能是简单学习材料的一个完美可行的选择。然而,如果你追求一种纯在线的方法,你可能仍然会遇到其他人是否能验证你的自学培训的问题。
可靠性
我从我的 MS 分析程序中获得了一些东西,这是任何预先录制的在线养生法都无法提供的。(请注意,我参加了一个现场和面对面的 MS Analytics 项目。)
- **信任。**这个是大的。在我的行业中,有权势的人往往是婴儿潮一代。他们重视正规教育,尤其是来自高排名大学的教育。数十亿美元是根据他们的最佳判断进行分配的。我选择做 MS 分析,很大程度上是因为我知道这将提升他们对我的能力的满意度。任何做决策的经理都喜欢让他们的侧翼被容易辩护的论点所覆盖。相比自学成才的候选人,雇佣或提升受过正规教育的候选人要容易得多。
- 师徒。我的顶点教练在我的行业中有超过 45 年的统计经验(流行的 ISLR 文本甚至以他的名字命名了一个奖项)。在我的许多课上,我的教授们在统计学研究方面享有世界声誉(其中一位教授引用了 10,000 篇文献)。他们不只是对我说话。他们回答了问题...大量问题!他们对我的工作提供了反馈。这是我知道我可以信任的反馈。它帮助我知道统计学的指导方针有多灵活或不灵活。首先,是面对面的。与统计界的资深人士进行个人互动的价值是巨大的。
- 友情。我在团队中完成了许多项目。我了解了队友的长处,他们也了解了我的长处。他们中的许多人成了亲密的朋友。职业教练会经常反复强调人际关系网的重要性。没有比团队项目更好的人际关系网了…只要你做好自己的本分。
My Texas A&M University ring
一所被认可的大学,在一系列科目上有分级的学分,增加了可信度。在顶点项目中加入专家指导。考虑战壕里的网络。与数据科学一样,这里需要考虑多种因素。对于我的职业生涯,你可能会明白为什么我不顾代价选择这条路。
意志力
我见过非常能干的工程师为了自我激励的唯一目的而报名参加日间课程。这花了他们的钱,但节省了他们的时间,让他们走上正轨。他们花钱买了一个弹弓——这是一种刺激,可以让他们不浪费时间(加上通过导师指导节省时间),让他们更快达到目标。
在线自定进度学习的一个缺陷是没有截止日期和评分。最终期限带来的压力可能是学习过程中的一个有效组成部分。压力有助于保持一个人在正轨上,并锁定经验教训。没有一个需要遵循的时间表,很容易将困难的任务推迟到以后。即使在线课程设置了时间表并有同行评分,也存在延迟注册的问题(因为实际上无论何时入学都是有保证的)…并且不知道同行是否给你正确评分(回到可信度问题)。
当意志力减弱时,战略性地利用压力可以维持努力。然而,硬币还有另一面——需要一些意志力才能在全职工作的同时不退出兼职 MS 项目。会有艰难的时期。
σ
综上所述,不管花费多少,获得 MS Analytics 是一个最佳的决定。我的最终目标不是改变职业。我以前是领域专家(地球科学家),现在也是。首先,在我的行业中,一个有经验的地球科学家的*均工资仍然高于大多数数据科学家的工资。那么我得到了什么?我现在是一名领域专家,也牢牢掌握了多元统计。这给我的职业生涯增加了灵活性和安全性。它打开了大门,其中一些已经抵消了学位的成本(入学时为 5 万美元)。说一句统计学上的双关语,我现在有了更多的自由度。
这对你来说是正确的道路吗?这是你根据你的时间的相对价值、对可信度的需要、意志的力量、财务状况以及从曾经获得的学位中获益的能力来做出的决定。(有趣的是,在我的 MS Analytics 团队中,约 90%的人在项目期间或之后不久获得了职位提升或工作变动。)如果你有一些时间来决定,我建议现在就从在线学习开始。早点开始,帮你一把也无妨。
根据您的最终目标,其他完全有效的替代方案也同样有效。物理学、生物统计学、计算机科学、等专业的硕士或博士学位。可能是你追求目标的最佳方式。已经有了成功的事业或职位?那么,也许你只是需要一个不那么正式的方法来帮助你保持竞争优势或保持“时髦的合规性”无论你选择哪条路,祝你好运。
世界是我们创造的,它需要变得更聪明。你应该避免的一个选择是什么都不学。
我的团队如何在我们的第一次黑客马拉松中赢得人民选择奖
原文:https://towardsdatascience.com/how-my-team-won-the-peoples-choice-award-at-our-first-hackathon-d9ca3778e1d4?source=collection_archive---------3-----------------------
现在我们在争夺全球大奖。投票给余烬警戒!
From left-to-right and top-to-bottom: Eric MacEwen, Adrian Nip, Tanweer Rajwani, Paul McLaughlin, Kim Andrew, Sam MacEwen, Caroline Dikibo
在 http://www.emberalert.co/[查看我们的网络应用程序](http://www.emberalert.co/)
两个周末前,我参加了我的第一次黑客马拉松… **,我的团队赢得了人民选择奖!**现在我们正在角逐全球大奖,而可能需要您的投票。
我们参加了 2017 休斯敦 NASA 太空应用挑战赛。事情发生的时候,我刚刚进入休斯顿的一个编码训练营 Digital Crafts 两周。所以我花了两周时间学习 Python,以及一些非常基础的 HTML/CSS 和 Javascript,这些都是我在训练营的前期工作中学到的。而且,不知何故,我最终加入了一个我拥有最多开发经验的团队。
我学到了什么?
参加黑客马拉松时,经验水*并不重要,但快速学习的心态至关重要。
不要害怕寻求帮助。
如果你的黑客技术不是最炫的,也不用担心。现在就做你能做的,如果将来有能力扩展,那就太好了。
做好结束时精疲力尽的准备。
团队合作让梦想成真。
灰烬警报的诞生
黑客马拉松跑了两天。我认识的唯一参加的人是我的高中朋友阿德里安,他也不认识那里的其他人;所以我们直到周六早上到达那里才组队。从一开始,你就可以看到人们开始为他们的团队承担他们的角色。并不是每个人都有突破性的想法。所以“创造者”很早就显现出来了。对我们来说,那就是 Adrian,他的背景是项目管理、工程和创业。他很快就想到了使用无人机为处理野火的人们创建快速反应策略的愿景。任何对使用无人机或灭火感兴趣的人都很快加入了我们的团队。令人惊讶的是,这是我们所有人的第一次黑客马拉松除了 Sam 和 Eric,他们之前参加了 NASA 的太空应用挑战赛。
唯一的问题是……我们没有无人驾驶飞机,也不知道如何自动应对火灾。但我们的想法有一个基础:我们想用技术帮助任何人处理火灾。我们的目标消费者既是救火的紧急服务团队,也是想要逃离火灾的*民。
小组形成后,我们急忙跑到各个角落,开始设计我们的黑客。我们很快确定了每个人的优势,并相应地划分了研究。保罗和我是数据人员。阿德里安和埃里克是硬件人员。金和萨姆是设计人员。卡罗琳和我成了开发者。我们花了最初的几个小时研究我们有哪些可用的资源。由于黑客马拉松是由美国国家航空航天局赞助的,我们可以公开访问他们所有的数据集。
**我们很快就意识到,我们最初的计划很难在 48 小时内实现。所以我们开始缩小规模。**我们知道我们既想帮助紧急服务机构,也想帮助*民,但由于我们有最后期限,我们决定把重点放在*民身上。我们知道我们想帮助他们避免处理火灾时的危险情况,所以我们研究了人们在应对火灾时遇到的问题。
我们的黑客很快从无人机扩展到一个网络应用程序,当附*发生火灾时,它会向人们发出警报。我们利用了美国宇航局提供给我们的活跃火情数据。我们的目标是使用谷歌地图的 API 并利用他们的路由算法。不幸的是,我们的 48 小时的最后期限和缺乏开发经验,使我们无法钻研它谷歌地图。我们满足于使用leafle JS,一个用 javascript 生成的开源地图 API。经过一点修补和折腾,我能够在传单的地图上绘制美国宇航局的数据集。现在我们有了一个交互式地图,允许用户看到他们附*和世界各地所有活跃的火灾。
Ember Alert’s interactive map. It displays active fires happening around the world.
这听起来很简单,但是由于我们组中没有人接触过使用 javascript,我们开始的时候有点像无头鸡。我遇到的最具挑战性的问题是将 NASA 的 CSV 格式的数据转换成与传单兼容的 JSON。幸运的是,我在 github 上找到了一个项目,我能够在我们的项目中利用它。
我们项目的第二层是为人们建立一个警报系统,以防附*发生火灾。随着我对后端开发和数据库管理的了解越来越多,这一部分仍然是一个未完成的工作。但这个想法是,人们可以向我们提交他们浏览器的地理位置,以及电子邮件地址或电话号码,每当我们检测到他们附*有火灾时,我们就会提醒他们。这个特性激发了我们项目的名字……Ember Alert。
经过 48 小时的艰苦工作,提出了一个产品创意,并为其开发了一个 MVP,Ember Alert 已经准备好向世界展示了。我们有机会在各种评委面前展示我们的技术。我运用我在高中和大学时的辩论技巧,把我们的项目作为一种工具展示给消费者,让他们避免在火灾中措手不及。我们的黑客得到了评委们的积极回应。给我们的主要建议是将我们的产品定位于保险公司,他们在防止客户房屋被烧毁方面有既得利益。
一开始对我们来说有点过于雄心勃勃的东西,缩小到最终赢得人民选择奖的黑客!
http://www.emeberalert.co/
下一步是什么?
我计划在我的新兵训练营中继续开发余烬警报。我的目标是在几周内让该产品完全发挥作用,这意味着该应用程序将能够存储人们的地理位置,并在附*发生新的火灾时发送短信。
一个更长期的目标是将 Ember Alert 迁移到谷歌地图的 API,这样我们就可以使用更强大的功能,例如为处于危险中的*民选择离开防火区的安全路径,以及为紧急救援人员选择进入防火区的安全路径。我还想使用气候数据来预测火灾可能蔓延的路径,让我们能够在火灾发生前提醒人们火灾的风险。最终,我希望《余烬警报》也能扩展到其他的自然灾害,但是现在我将专注于火灾。
与此同时
Ember Alert 正在角逐 2017 年美国宇航局太空应用挑战全球人民选择奖。我们需要你的帮助!
在https://2017.spaceappschallenge.org/vote?q=Ember%20Alert为余烬警报投票
你必须注册一个账户,但这个过程相当简单。你可以每天投票一次,直到 5 月 22 日。
在 http://www.emberalert.co/[查看我们的网络应用](http://www.emberalert.co/)
神经网络如何“学习”
原文:https://towardsdatascience.com/how-neural-network-learn-3b56c175b5ca?source=collection_archive---------11-----------------------
Source: https://stats385.github.io/assets/img/grad_descent.png
在我的第一个故事中,我解释了神经网络如何处理你的输入。在神经网络能够像前一篇文章那样进行预测之前,它必须经过一个预处理阶段。这个阶段控制神经网络在处理输入时使用的权重和偏差值。
在神经网络生命周期中有两个阶段,一般来说,所有机器学习算法都是训练阶段和预测阶段。寻找权重和偏差值的过程发生在训练阶段。与此同时,神经网络处理我们的输入以产生预测的阶段发生在预测阶段,如在之前的中。这一次,我将讨论神经网络如何在训练阶段获得正确的权重和偏差也称为“学习”以做出准确的预测(阅读:回归或分类)。
那么,神经网络如何获得最优的权重和偏差值呢?答案是通过一个误差梯度。在固定当前权重和偏移(最初随机生成)时,我们想知道的是当前权重和偏移值是太大还是太小(我们需要减少还是增加我们的当前值吗?)关于它们的最优值?以及它偏离了多少(我们需要减少或增加当前值多少?)从它们的最优值。我们寻找的梯度是误差相对于权重和偏差的导数。
where E is an error, W is weight and b is bias
这是为什么呢?因为我们想知道我们当前的权重和偏差如何影响神经网络误差的值,作为回答上段 2 个问题(减少或增加以及增加多少)的参考。我们如何得到梯度值是通过一个众所周知的算法叫做反向传播。我们如何利用通过反向传播获得的梯度来改善权重值和偏差是通过优化算法实现的。优化算法的一个例子是梯度下降,这是最简单和最常用的优化算法。它只是用获得的梯度值乘以学习速率常数来减少最*的权重和偏差值。什么是学习率以及更多细节,我们将在本帖中立即讨论。
假设我们有一个如下的神经网络。
Our neural network has a structure 3–2–2
假设我们有一个输入向量、偏差向量、权重矩阵和真值,如下所示
为了明确起见,权重值的顺序为
让我们做一下向前传球 。流程与上一篇相同。在本演示中,我们对所有神经元使用的激活函数是 sigmoid 函数。
这里我们将 sigmoid 函数的输出值四舍五入到 4 位小数。在实际计算中,这样一轮会大大降低神经网络的精度。小数的个数对神经网络的准确性至关重要。我们这样做是为了简化计算,这样写作就不会太长。
在我们进行下一层之前,请注意下一层是最后一层。意味着下一层是输出层。在这一层,我们只做纯线性运算。
是时候计算误差了。在这种情况下,我们使用均方误差 (MSE)来计算输出神经元的误差。MSE 方程如下
在我们的例子中,N = 1,因为我们只有 1 个数据,所以等式简化为
让我们根据前面定义的真值(T)来计算输出层神经元的误差。
这就是我们当前在输出层的误差。现在是通过反向传播(也称为反向传递)在层之间的每次交互中寻找相对于权重和偏差的误差梯度,然后应用梯度下降来最小化误差的时候了。反向传播仅仅是一个链式法则,它是如何工作的将立即讨论。现在,让我们找出我们在正向传递中使用的所有方程的导数。
- E 关于 O 的导数
2.sigmoid (h)函数关于 P 的导数(纯线性运算的输出)
h 在哪里
3.关于权重(W)、偏差(b)和输入(h)的纯线性导数。
purelin 在哪里
其中 l 是从 1 到 m 的数。
这就是我们所需要的,是时候应用反向传播了。我们首先寻找隐藏层和输出层之间的权重和偏差的梯度。为了寻找梯度,我们使用链式法则。
通过应用这些,我们得到
这就是我们在隐藏层和输出层之间的渐变。现在,进入下一层。这里真正的挑战(不那么挑战)!但是不要担心,在这之后一切都会变得清晰和容易:)。
反向传播中的链式法则完全是关于神经元之间的路径。让我们收集信息吧!
- 隐含层有 2 个神经元,每个神经元在左侧(输入层和隐含层之间)用 3 个权值和 1 个偏置连接**。**
- 在右侧,隐藏层中的每个神经元都与输出层中的 2 个神经元相连**。**
这些信息对于求 W1 的梯度非常重要。从这些,我们想要找到的梯度是
在哪里
添加了从我们关注的权重到输出层的所有可能路径。这就是为什么上面的等式中有两项之和。现在,让我们计算 W1 的真实梯度。
代入 E 对 h 的偏导数,我们得到
现在谈谈偏见,又称 b1
这就是反向传播算法作用的终点。现在,让我们来看看优化算法。优化算法是关于如何利用我们已经获得的梯度来校正现有的权重和偏差。我们选择的优化算法是梯度下降法。梯度下降法通过下面的等式校正权重和偏差。
其中 W’是新的权重,W 是权重,a 是学习常数,梯度是我们从反向传播获得的梯度。学习常数是至关重要的常数,因为如果这个常数太大,结果将不会收敛,如果太小,需要更多的迭代,这意味着训练阶段将更加耗时。假设我们有一个等于 0.02 的学习常数。
依此类推,该过程将被重复(具有将被输入的相同输入)直到达到所需的迭代次数或目标误差。
这就是神经网络一般是如何“学习”的。如果我有更多的空闲时间(当然还有好心情),我会用 numpy 分享 python 中多层感知器(另一种“普通神经网络”的名称,这是我们这里的重点)的源代码。再见。
我的另一个神经网络系列:
- 神经网络如何处理你的输入(经过训练的神经网络)
- 神经网络如何“学习”
- 知道你的输入在神经网络中有多重要的简单方法
神经科学家如何分析来自透明鱼脑的数据:第 1 部分,预处理。
原文:https://towardsdatascience.com/how-neuroscientists-analyze-data-from-transparent-fish-brains-part-1-pre-processing-63a09436ea93?source=collection_archive---------20-----------------------
从鱼脑的视频到可利用的数据集。
大脑很酷。不仅仅是人脑。在神经科学中,许多动物模型被用来研究大脑回路:小鼠、大鼠、苍蝇、蠕虫和我最喜欢的一种——鱼。但不仅仅是任何鱼:T2 斑马鱼。
An adult zebrafish (wikipedia)
斑马鱼最初来自南亚,现在可以在任何普通的水族馆和商店里找到。它们很小,有漂亮的条纹,喜欢温暖的水。但是让科学家们感兴趣的是,一些斑马鱼发生了突变,阻止它们产生黑色色素,因此它们拥有完全透明的皮肤**。如果想研究大脑,这是一个很好的特性。不需要打开头骨,不需要切开任何东西,只需要把一条鱼放在显微镜下,你就可以研究它的大脑。或者……差不多。**
Below, a transparent zebrafish (wikipedia)
斑马鱼真的很棒,因为它们的基因组是已知的,科学家能够精确地产生一些突变,使鱼的神经元在活跃时发出荧光(所有这些都不会影响大脑的功能或斑马鱼的健康!).你可以想象这背后的大量工作和研究,但这是一个数据科学博客,所以我现在将专注于这种数据的分析。
这是原始数据的样子:这是一个斑马鱼大脑的视频,每一个圆形的白色斑块都是一个变得活跃的神经元。
Courtesy of Yaksi lab ©, NTNU in Trondheim, Norway
已经很酷了!然而,在能够使用一些机器学习算法(如 PCA 或聚类)之前,我们需要将该视频转换为可利用的数据集,即[神经元 x 时间]的 2D 矩阵,其中每个元素都是特定神经元在特定时间点的活动程度。“预处理”管道有 3 个主要步骤:
- 对齐
- 细胞检测
- 荧光提取
The preprocessing pipeline that extracts the activity of each neuron in time, from the raw images.
第一步是对准**。在实验过程中,鱼是活着的,可以自由移动尾巴(只有头部和腹部被一些琼脂糖凝胶保持不动)。这可能会导致录制过程中的一些运动,因此,图像可能会轻微*移或旋转。因此,图像必须重新对齐,以适合用户选择的一个“参考”图像的方向。这是图像配准的过程。**
An illustration of image registration with Matlab
这可以通过多种方式完成,例如(除其他方式外)使用 Matlab 或使用开源图像处理软件 ImageJ / Fiji 。为了保持这篇文章(相对)简短,我将不详细说明这一步,而是将重点放在细胞检测。
一旦运动伪影被校正,第二步检测神经元在图像中的位置。同样,神经科学家目前正在使用或开发许多不同的方法,但我想在这里介绍的方法使用模板匹配**。基本上,用户可以创建一个细胞应该是什么样子的模板,算法将在整个图像中寻找这个特定的形状。**
首先,在参考图像中对对应于期望时间段的所有记录图像进行*均。然后,通过高斯滤波器对该图像进行*滑,以统一背景并调整所有细胞的对比度。
这可以通过使用高斯滤波器(或 内核 )的 2D 卷积来完成。每个像素的值将被原始图像和高斯核之间的卷积所取代。这在下面的示意图中有很好的描述:
From developer.apple.com
其次,生成细胞的模板。用户可以选择模板的形状和大小(取决于你正在研究的大脑区域,神经元可以更小或更大)。然后,该模板将在参考图像上传递,并且——对于每个图像块——将使用该模板计算相关性。
A cell-like donut template
****相关性值表示模板与图像部分的匹配程度。结果将由一个 correlationMap 组成,其中颜色代表模板与以像素为中心的区域的匹配程度。基于相关值的直方图,用户可以选择一个阈值来仅选择具有高相关性的像素(在本例中为 0.5)。
由于选定的像素只是我们神经元的中心,所以需要一个膨胀步骤来在其周围添加更多的像素。此后,所有像素被认为属于一个神经元:它们可以被标记(例如用 Matlab 函数 bwlabel ),这意味着它们被赋予一个新的数字,代表它们所属的神经元的身份。该结果随后显示给用户,用户可以手动消除任何检测错误。
neuronLabels
对于不同尺寸和形状的不同模板,可以重复这个过程。最终的输出是原始图像大小的一个“遮罩”:如果每个像素不属于一个神经元,它就会被标记为 0,或者是一个介于 1、2、3 之间的数字。550,如果它属于一(550 是在这个特定例子中发现的神经元的数量)。这用于最后一步:提取每个神经元在一段时间内的荧光值。
为了及时提取每个神经元的荧光水*,将掩模应用于图像,并且对属于组成神经元的像素的所有值进行*均。这为每个神经元创建了一个向量,显示其在时间上的活动:
Activity profiles of 5 neurons during 20min
但是当你有 550 个神经元的时候,不可能一个个去看。同时查看几个神经元的更有效的方法是绘制活动图(x 轴:时间,y 轴:神经元标签,颜色:活动):
Activity map
这样,预处理就完成了。现在,有趣的事情可以开始了,这将是第二篇文章的目标,我们将看看一些聚类算法和 PCA:神经科学家如何分析来自透明鱼脑的数据:第二部分,聚类神经数据。
新毕业生如何从数据科学导师那里获益
原文:https://towardsdatascience.com/how-new-grads-can-profit-from-a-data-science-mentor-cad7afffb4d4?source=collection_archive---------22-----------------------
年轻的大学毕业生——或者所有为此目的而开始职业生涯的人——通常会对大学毕业后的众多选择感到不知所措。特别是在数据科学中,有许多不同的领域需要开始或关注,这并不会使它变得更容易。这就是职业导师可以帮忙的地方。
在导师制,我们看到 200 多名年轻学生通过了导师制——其中许多人在数据科学工作。他们中的许多人已经开始了新的职业生涯,甚至在指导期间获得了晋升。
数据科学的特殊之处在于它是一个新的、不断发展的领域。大学并不总是知道他们如何才能最好地支持他们的新毕业生,而且有太多的方法可以进入这个行业。许多进入这个行业的新人都是自学成才的,甚至更多的人已经在学术界工作了很长时间,只是现在转向初创公司或大型科技公司,这带来了他们自己的一系列挑战。
万物变化时的常数
通过获得数据科学导师——从像mentor cruise这样的地方,也通过在社交媒体或社区上找到他们——学生可以在他们的生活中获得一个常数,并在学习时接触行业,毕业后开始第一次真正的求职。
这可能是一个麻烦的时期——搬家,找工作,在此期间面临很多拒绝。但是如果有一个导师可以帮这个忙,成功的几率就高很多。
业内的一个联系人
专业导师知道这个行业是如何运作的,你如何在面试中取得成功,以及你需要什么样的技能才能被录用。
除此之外,他们在业内人脉很广。和他们一起工作更长的时间——我们的指导通常持续几个月——会让他们对你的优点和缺点有一个很好的感觉。让他们更有可能向你推荐同事、经理和关系的东西。
获得业内公认的技能
学校、课程提供商和 MOOCs 并不总是告诉你事情的全部。当我在机器学习中学习在线课程时,我学习了强化学习和 GANs 等华而不实的东西,然后才知道如何准备和处理大型数据集——这是一项不那么华而不实的现代技能,但重要得多。
通过找一个专业的导师,你可以洞察到哪些技能是你被雇佣所需要的,哪些技能是你必须具备的。你会惊讶于数据科学和机器学习的世界还需要什么样的技能!
Nike Run Club 如何引导我编写第一个人工智能项目
原文:https://towardsdatascience.com/how-nike-run-club-led-me-to-write-my-first-ai-project-116d0617c2d1?source=collection_archive---------4-----------------------
很长时间以来,我一直想开始学习如何将人工智能作为我代码流的一部分。我应该从哪里开始?嗯,我没有理科学士学位,也没有数学基础来理解它背后的所有方程和计算。但是后来,我看到了杰森·布朗利的这篇惊人的文章,我又开始相信了!
在多次阅读这篇文章并理解它之后,我终于可以说我对 KNN 算法很流利了。让我们谈谈 KNN 吧。
KNN 算法
想象你在世界杯上。你看到三个不同球迷的酒吧:英格兰,瑞典和法国。你是威尔士人,你会和谁一起庆祝?当然是英国,因为你们都在大不列颠!
那是 KNN 的意思: K 最*邻。
我们的数据将被分类为同一维度中最接*的类型:
From Wikipedia
我们可以看到中间的绿色圆圈。它最接*三角形,所以它可能会被归类为三角形。我说“可能”是因为没有定义“K”。这个“K”表示应该考虑多少个项目。如果“K”是 3,则该圆应归类为三角形(两个三角形对一个正方形)。但是如果“K”是 5,那么该圆应该被归类为正方形(三个正方形对两个三角形)。
大多数时候“K”的默认值是 3(较大的“K”表示不敏感)。
一个美好的一天,我正在用 Nike Run Club 应用程序跑步。那天我觉得很累,我需要有人叫醒我,给我一些动力。你猜怎么着,它从没来过。我突然想到:把歌曲分为节奏型和非节奏型!
我不是一个音乐家,但一点点研究让我想到了术语“ Tempo ”和它的度量单位“BPM”。每分钟节拍值决定了歌曲是否有节奏。
正如维基百科中所写的,一首节奏歌曲的 BPM 值在 120 以上:
快板——快速,迅速,明亮(120–156 BPM)(非常快板比快板稍快,但总是在它的范围内)
Vivace —活泼而快速(156–176 BPM)
Vivacissimo —非常快且活泼(172–176 BPM)
快板或活泼的快板——非常快(172–176 BPM)
很快—非常非常快(168–200 BPM)
Prestissimo —甚至比 presto 更快(200 bpm 及以上)
所以理论上我们需要对一首歌的 BPM 是否在 120 以上进行分类。问题是我没有找到任何精确的算法来计算 BPM,所以我必须添加更多的值来确保歌曲是有节奏的。一首歌的 BPM *均值。
2。高 BPM 点占总点数的百分比。
3。歌曲有多少 BPM 点序列(连续 5 个高 BPM 点以上)。
我还用 5 减去了每个点,因为我不相信 Aubio 库算法的结果。
让我们检索这些值并将它们添加到 DB:
首先用 aubio 提取歌曲的 BPM 值示例:
然后,获取我们需要的所有值:
把所有的值放入一个数据库,让我们开始分类!
创建数据集
我们需要给机器喂食。诀窍是数据集,数据集是我们希望为学习部分的算法提供的数据列表(很多)。
让我们来看看:
我们用数据库中的数据创建了一个列表列表。
然后,我们需要加载它并将其分成 2 组:
*训练集——算法实际学习的数据。
*测试集——用于测试我们算法的验证集。
每个列表包含 4 个属性:
- BPM *均值。
- BPM 计数器百分比。
*高 BPM 点序列。
*歌曲是否有节奏
创建 KNN 模型
我们的 KNN 模型处理实数。这就是我们要使用"欧几里德距离"来计算即将到来的预测的最佳 K 点的方法。将每个训练集与一个测试用例进行比较:我们计算每个训练集值和测试集值之间的距离,并将其添加到一个变量中。我们对存储数据的变量进行排序,并检索 K 个最佳选项(最小距离)。
我们写点代码吧!
预测未来
我们创建了所有数据,检索了每个训练集的最佳点,现在我们可以预测结果了!
预测是投票。主要群体是选举出来的。就这么简单。
让我们看看它是怎么做的
把所有的放在一起
现在我们有了所有的碎片,让我们来完成这个拼图吧!
- 首先获取训练数据,或者从现有的 Pickle 对象中加载它。
- 找到周围最好的邻居。
- 预测。
我们会有两种模式:
1。训练模式——尽我们所能找到最准确的最佳数据集。预测。
2。对一首歌进行分类,不管它是否有节奏。
让我们测试分类器并检查结果:
Remix.mp3
Train set: 64
Test set: 1
[[158, 64, 125, <TEMPOS.RHYTHMIC: 'Rhythmic'>], [154, 63, 112, <TEMPOS.RHYTHMIC: 'Rhythmic'>], [167, 72, 145, <TEMPOS.RHYTHMIC: 'Rhythmic'>]]
Is Remix.mp3 rhythmic? True
Remix.mp3 is added successfully
我测试过的歌是有节奏的(是混音的!!!)
我们可以看到它找到的最好的邻居是:
【158,64,125,< TEMPOS。节奏:>)
【154,63,112】<节奏。节奏:>)
【167,72,145】<节奏。节奏:'节奏'> ]
获胜者是……‘有节奏’!我们成功了!
结论
我们已经学习了 KNN 模型,以及如何实现它和用它预测数据。在你的代码中使用人工智能,即使你可能不具备所有必要的基础也是可能的。我确信,如果我们有更多类似上面提到的关于这些模型及其实现的简单文章,我们将会看到更多的开发者在他们的代码中使用这些概念。不要害怕使用它!
我希望这篇文章教会你一些新的东西,我期待着你的反馈。请告诉我——这对你有用吗?
完整的项目可以在 Github 这里 找到。
如何不雇佣数据科学家
原文:https://towardsdatascience.com/how-not-to-hire-data-scientists-ecdb55fcd1ef?source=collection_archive---------7-----------------------
一个数据科学家的日记
给数据科学招聘人员的一些建议
Photo by Gabrielle CC
我作为一名应用科学家工作了 5 年,主要是作为一名数据科学家。在这段时间里,我学到了很多关于这个职业的知识,包括在你的 LinkedIn 个人资料中有数据科学家这几个字会让你收到很多来自招聘人员的消息、电子邮件和电话。
不幸的是,由于这些信件的制作和发送方式,它们的效果往往远不如预期。我决定利用数百次这样的互动(好的、坏的和丑陋的)来写一篇警示文章,讲述如何不雇佣数据科学家。
我不打算这篇文章对数据科学招聘人员不屑一顾。我知道他们中的大多数都是专业人士,有着良好的意愿和真诚的热情去帮助人们找到他们喜欢的工作。我也意识到,他们面临着一个艰难的就业市场,有很多职位需要填补,但很少有候选人填补这些职位。
但是,对于那些希望从那些信息接收方那里获得视角的数据科学招聘人员来说,这里有一些浅显的建议。
1.不要假设所有的数据科学家都是一样的
招聘人员经常要求我们不具备的资格——不是所有的数据科学家都有运筹学背景——或者推销资历不匹配的角色——大多数数据科学领导者不会考虑入门级的机会。了解你的受众,并相应地调整你的信息。如果你有目的地制作通用的职位描述,向 LinkedIn 上的每一位数据科学家发送垃圾邮件,那么你不太可能吸引那些收到更多此类消息的更合格的数据科学家的注意。
2.不要对所涉及的技术含糊其辞
含糊不清的工作描述(例如,“使用统计软件来应用机器学习技术”)或陈腐的工作描述(例如,“你将执行前沿工作”)对数据科学家来说是没有信息的;我们无法判断这份工作是否相关,因此不太可能做出回应。对技术需求的具体描述有助于我们这些非常适合的人对机会感到兴奋,并更有可能伸出援手。例如,不是所有的数据科学家都乐于在 PC 上用 SAS 分析数据;但是如果这是你招聘的目的,那么让那些符合要求的人知道这一点!
3.不要隐瞒实际的工作描述
招聘人员很少分享描述性的工作总结,这些总结分享了工作的重要细节,如公司名称和职位位置。我们想研究有趣的问题,但是我们对同样的问题并不感兴趣。如果你不能告诉我们公司的名字,至少告诉我们它是做什么的,我们会做什么工作,我们会住在哪里或者必须搬到哪里。(不提及地点的职位描述尤其可能会让那些有家庭的高级数据科学家失去兴趣,他们不太愿意或不太有能力立即搬迁。)
4.不要找独角兽
一些职位描述列出了世界上所有的数据科学术语——CART、DAG、JSON、LOL、NLP、SVM、YARN 等等。这让我们认为你并不真的知道你想要雇佣哪种数据科学家(或者你将会花长的时间去寻找一个类似瑞士军刀的)。如果招聘经理负责职位描述,督促她或他改进。这些粗心的描述会给他们带来不好的影响,如果你不做点什么,他们也会给你带来不好的影响。
5.不要只关注薪水
比你想象的更多的招聘人员外联活动包括抛出一个工资范围和关于工作的基本俏皮话,假设数据科学家是一心一意的,计算机器主要优化这个指标。数据科学是一个量化的职业,但是数据科学家,他们中的大多数人前世是科学家,往往非常关心他们工作的智力挑战。高薪可能是必要的,但不足以吸引高质量的数据科学家。在最好的情况下,你可能会雇佣那些一旦找到报酬更高的机会就会离职的雇佣兵。
我知道数据科学招聘并不容易——工作需求超过了候选人的供应量,相关技术领域的广度很大,数据科学家对招聘人员的拓展可能会很挑剔:)—但我希望这些来自邮件接收端的人的观点可以让工作变得简单一点。
如何不按受欢迎程度排序
原文:https://towardsdatascience.com/how-not-to-sort-by-popularity-92745397a7ae?source=collection_archive---------2-----------------------
问题:你是一个 web 程序员。你有用户。你的用户会阅读你网站上的内容,但不会对他们进行评级。您想要制作一个用户可能想要点击的流行内容列表。你需要某种“分数”来排序。
错解#1 :分数=浏览量
为什么是错的:如果你的网站足够老,你可能有过去流行的内容,但那已经不再相关了。
错解#2 :分数=最*小时浏览量 x 小时。
为什么是错的:“趋势”是一个比绝对流行更好的解决方案,但它缺乏意外收获。没有必要显示用户可能会找到的内容。如果某样东西很流行,它可能已经在你的主页上了。
间歇 I:隐性反馈
如果用户在给你的内容评分,你应该去看看埃文·米勒 8 年前的建议,而不是按*均评分排序。但通常情况并非如此。更多的时候,我们有隐性的反馈,而不是显性的评级。那个是什么?
隐性反馈是用户活动,可用于间接推断用户偏好,例如点击、页面浏览量、购买行为。有时只知道正面的反馈,例如,客户已经购买的产品,但不知道他们已经决定不购买的产品。
通过隐式反馈来推断用户偏好听起来可能很难,但在实践中效果很好。主要原因是,收集点击量和页面浏览量比显式评级容易得多。如果你有足够的数据,输入中的噪声就不会有太大影响。
如果你有很多注册用户,你可以(也应该)用这些数据建立一个推荐系统。但即使你建立了一个,你如何推荐项目(博客帖子,文章,音乐,视频,产品等。)给新用户如果你对他们一无所知?
这就是所谓的冷启动问题。当你掌握了用户的一些信息,你可以推荐与她之前消费过的东西相似的商品,但对于新用户,你不能这么做。最简单的方法是显示“流行”的内容,但我们可以做得比天真的解决方案好得多。
主要的技巧是不要只跟踪人们在看什么,而是要跟踪呈现给他们的选项是什么(印象)以及他们决定点击什么。
错误解决方案#3: 得分=点击率=点击数/印象数
如果我们将点击数除以一个项目的印象数,我们就得到了 CTR(点击率)。这意味着一个项目每次被推荐时*均有多少点击量。好的物品会有很高的点击率。
为什么错了:这里的问题是,如果一件商品的点击率很少,就很难估计它的点击率。假设有一篇文章被推荐了一次,没有被点击。你会相信点击率为零,你永远不会再推荐它吗?或者说如果这个商品被展示一次并被点击,你会把它推荐给每个用户吗?
免责声明 : CTR 不是评估推荐质量的唯一指标,也可能不是最佳指标。我们不想显示用户实际上不喜欢的点击诱饵内容,但这超出了本文的范围。
让我们回到我们的问题上来。我们怎样才能得到一个可靠的估计项目的 CTR?
错误解决方案#4: 得分= LCB(CTR)
LCB 在这里代表较低的置信限。它表示在您可以指定的置信度下,该项目保证具有的最小 CTR。为了计算这一点,我们可以使用威尔逊评分,来自埃文·米勒的建议。我们只需要将每一次点击视为“竖起大拇指”,而将每一次未被点击的印象视为“竖起大拇指”。如果我们的例子很少,它会考虑到 CTR 的不确定性。
为什么是错的:这个解决方案在实践中很好,但它仍然是错的。它擅长发掘点击率高的文章,但不擅长发掘新文章。也许一篇新文章会有一个更好的点击率,但是我们会因为没有一个好的估计值而陷入展示一篇次优文章的困境。
如果你明白这一点,恭喜你!这是多股武装匪徒理论背后的基本概念。你已经知道了足够的术语来在拉斯维加斯的鸡尾酒会上讨论 MAB。但是什么是 MAB 呢?
幕间休息二:多武装匪徒
By Yamaguchi 先生 at the English language Wikipedia, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=57295504
维基百科定义解释了这个古怪名字的来源:
多臂土匪问题是一个在一排吃角子老丨虎丨机(有时被称为“独臂土匪”)上的赌徒必须决定玩哪些机器、每台机器玩多少次以及以什么顺序玩它们的问题。当游戏开始时,每台机器从特定于该机器的概率分布中提供随机奖励。游戏者的目标是通过一系列的杠杆操作获得最大的回报。
MAB 在业内最为人所知的是作为 A/B 测试的替代选择,作为挑选你的网站的最佳变体的一种方式。在我们的例子中,我们可以把每篇文章看作一个不同的手臂,每一次点击都是一种奖励。有些文章会给更好的奖励,因为他们有更好的*均点击率。
好的解决方案#1: 分数=对某些用户随机,对其余用户 LCB
如果我们选择一小部分(epsilon,ε)用户,并向他们展示随机的文章,我们将能够探索所有的项目,同时仍然显示大多数用户的最佳选择。这被称为ε-greedy,非常有效,但是很难为ε选择一个好的值。如果太小,我们将无法探索所有项目。如果太大,太多用户会收到差的推荐。
好方案#2: 得分= UCB(CTR)
如果我们使用 UCB (置信上限)而不是 LCB,我们将有一个非常好的 MAB 政策。LCB 给出了项目的最小 CTR 估计值,而 UCB 返回了项目在给定期望置信度的情况下可以具有的最大 CTR。
它能够尝试新的武器,直到它有一个合理的点击率估计,并会更经常地推荐最好的文章。我们说它有低遗憾。如果与总是推荐最好武器的最佳可能的政策相比,这基本上是多少点击将会失去。一个问题是,如果你不实时更新点击和印象,它可能不会很好地工作。我们可以做得更好。
最佳解决方案:分数= beta(点击次数+ 1,展示次数-点击次数+ 1)
也称为汤普森采样。
https://sk.pinterest.com/pin/537898749225885705
Thompson 抽样是解决多臂强盗问题的最古老的启发式方法之一。这是一种基于贝叶斯思想的随机算法,最*几项研究表明,与最先进的方法相比,它具有更好的经验性能,因此引起了人们的极大兴趣。
上面的引用来自文章Thompson Sampling for Contextual bottom with Linear payments。 Xavier Amatriain ,前机器学习研究员,后来领导网飞的推荐系统团队,以及后来的 Quora,在本期播客 TWiML 中说了同样的话:
有很多关于多臂强盗的文献,但只有一本在实践中有效。我不知道我是否想给出答案(……)在业内众所周知,汤姆逊抽样是最简单、最实用的 MAB 方法。
听起来不错,对吧?不过,如果你看看维基百科上关于汤普森取样的文章,数学可能会非常吓人。幸运的是,实现和理解它实际上非常简单。
那么,什么是汤普森抽样?它是以威廉·r·汤普森的名字命名的,他在 1933 年提出了这个想法。这叫做抽样,因为对于每一条手臂,我们从我们当前对其概率分布的信念中挑选(抽样)一个随机的 CTR 比率,然后我们根据抽样的 CTR 对文章进行分类。
但是 CTR 的概率分布是什么呢?当我们使用 LCB 和 UCB 时,我们承认我们不知道确切的 CTR 值是多少,所以我们对其值进行了有根据的猜测。概率分布只是一个函数,它返回 CTR 为任何特定值的几率。
它看起来怎么样?对于一篇新文章,我们不知道 CTR 是什么。它可以是 0 到 1 之间的任何数字。这叫做均匀分布。但每次我们展示一篇文章,就像是在抛一枚不公*的硬币。我们翻转它,看看结果。假设是正面,我们得到一个点击。每次我们抛硬币并看到结果,我们可以更新我们对正面概率或文章 CTR 的信念。
下面是一个例子,根据我们得到的人头数,在我们进行一些投掷后,这个分布(名为 Beta )看起来是什么样的:
http://nbviewer.jupyter.org/github/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Chapter1_Introduction/Ch1_Introduction_PyMC2.ipynb
这种承认我们不知道所有事情的想法和根据新信息修正我们的信念是所谓贝叶斯统计背后的主要思想。如果你想了解更多这方面的知识,我推荐《T4 概率编程》&黑客贝叶斯方法这本书。它不像深度学习那样新潮,但仍然很有趣,很有用。这是你在鸡尾酒会上可以讨论的另一个好话题!
那么,用 score = beta(点击+ 1,impressions - clicks + 1)是什么意思呢?我们只是得到一个随机的 CTR,从 beta 分布中取样。然后,我们根据这个随机分数对文章进行排序。点击率高的文章将会更频繁地展示( exploited ) ,但我们也会随着新项目的出现探索。太神奇了,这么简单,效果这么好。
确保你理解所有概念的最后一个测试:你会发现这部卡通很有趣。:)
https://xkcd.com/1132/
拜 雨果·洛佩斯·塔瓦雷斯莱安德罗·莫雷拉丹尼尔·马丁斯菲拉维奥·里贝罗拉斐尔·卡里奥****
如何(不)使用机器学习进行时间序列预测:避免陷阱
原文:https://towardsdatascience.com/how-not-to-use-machine-learning-for-time-series-forecasting-avoiding-the-pitfalls-19f9d7adf424?source=collection_archive---------1-----------------------
在我的其他帖子中,我已经涉及了一些主题,如:如何将机器学习和物理,以及机器学习如何用于生产优化,供应链管理以及异常检测和条件监控。但在这篇文章中,我将讨论时间序列预测的机器学习的一些常见陷阱。
时间序列预测是机器学习的一个重要领域。这一点很重要,因为有太多的预测问题涉及到时间因素。然而,虽然时间组件增加了额外的信息,但与许多其他预测任务相比,它也使时间序列问题更难处理。
这篇文章将介绍使用机器学习的时间序列预测的任务,以及如何避免一些常见的陷阱。通过一个具体的例子,我将展示一个人如何表面上有一个好的模型,并决定将其投入生产,而在现实中,该模型可能没有任何预测能力,更具体地说,我将重点关注如何评估您的模型准确性,并展示如何简单地依靠常见的误差指标,如*均百分比误差、 R2 评分等。如果不谨慎应用,可能会产生误导。
时间序列预测的机器学习模型
有几种类型的模型可用于时间序列预测。在这个具体的例子中,我使用了一个长短期记忆网络,或简称为 LSTM 网络,这是一种特殊的神经网络,它根据以前时间的数据进行预测。它在语言识别、时间序列分析等方面非常流行。然而,根据我的经验,在许多情况下,更简单类型的模型实际上提供了同样准确的预测。使用诸如随机森林、梯度推进回归器和时间延迟神经网络的模型,可以通过添加到输入的一组延迟来包括时间信息,从而在不同的时间点表示数据。由于它们的顺序性质,TDNN 被实现为一个前馈神经网络,而不是一个递归神经网络。
如何使用开源软件库实现模型
我通常使用 Keras 来定义我的神经网络模型类型,这是一种高级神经网络 API,用 Python 编写,能够在 TensorFlow 、 CNTK 或 Theano 之上运行。对于其他类型的模型,我通常使用 Scikit-Learn ,这是一个免费的软件机器学习库,它具有各种分类、回归和聚类算法,包括支持向量机、随机森林、梯度推进、、 k -means 和 DBSCAN
然而,本文的主题不是如何实现时间序列预测模型,而是如何评估模型预测。由于这一点,我将不会进入模型建设等细节。,因为有大量其他博客帖子和文章涉及这些主题。
示例案例:时间序列数据的预测
这种情况下使用的示例数据如下图所示。稍后我会更详细地讨论这些数据,但现在,让我们假设这些数据代表了股票指数的年度演变。数据被分成训练集和测试集,其中前 250 天用作模型的训练数据,然后我们尝试在数据集的最后一部分预测股票指数。
由于我在本文中不关注模型实现,所以让我们直接进入评估模型准确性的过程。仅从视觉上观察上图,模型预测似乎与真实指数非常接*,显示了良好的准确性。然而,更准确地说,我们可以通过绘制真实值与预测值的散点图来评估模型的准确性,如下图所示,还可以计算常见误差指标 R2 得分。
从模型预测中,我们获得了 0.89 的 R2 分数,并且实际值和预测值之间似乎很好地匹配。然而,正如我现在将更详细讨论的,这个度量和模型评估可能会非常误导人。
这是完全错误的…
从上面的数字和计算的误差度量来看,该模型显然给出了准确的预测。然而,事实并非如此,它只是一个例子,说明了在评估模型性能时,选择错误的准确性度量标准是如何产生误导的。在本例中,为了便于说明,明确选择数据来表示实际上无法预测的数据。更具体地说,我称之为“股票指数”的数据实际上是用一个随机漫步过程建模的。顾名思义,随机漫步完全是一个随机过程。由于这个原因,使用历史数据作为训练集来学习行为和预测未来结果的想法是完全不可能的。有鉴于此,这个模型怎么可能给我们如此准确的预测呢?正如我将更详细地讨论的那样,这一切都归结于精度度量的(错误)选择。
延时预测和自相关
顾名思义,时间序列数据不同于其他类型的数据,因为时间方面很重要。从积极的方面来看,这为我们提供了在构建我们的机器学习模型时可以使用的附加信息,即不仅输入特征包含有用的信息,而且输入/输出随时间的变化也包含有用的信息。然而,虽然时间组件增加了额外的信息,但与许多其他预测任务相比,它也使时间序列问题更难处理。
在这个具体的例子中,我使用了一个 LSTM 网络,它根据以前的数据做出预测。然而,当放大一点模型预测时,如下图所示,我们开始看到模型实际上在做什么。
时间序列数据往往在时间上是相关的,并表现出显著的自相关。在这种情况下,这意味着时间“ t +1”处的索引很可能接*时间“ t 处的索引。如上图右侧所示,该模型实际上是在预测时间“ t +1”的值时,简单地使用时间“ t ”的值作为其预测值(通常称为持久性模型)。绘制预测值和实际值之间的 c 交叉相关(如下图),我们看到一个明显的峰值,滞后时间为 1 天,表明模型只是使用以前的值作为对未来的预测
如果使用不当,准确性指标可能会产生误导
这意味着,当评估模型直接预测值的能力时,常见的误差指标,如*均百分比误差和 R2 分数都表明预测准确度较高。然而,由于示例数据是通过随机行走过程生成的,因此该模型不可能预测未来的结果。这强调了一个重要的事实,即简单地通过直接计算常见的误差度量来评估模型的预测能力可能会非常误导,并且人们很容易被愚弄而对模型的准确性过于自信。
*稳性和差分时间序列数据
一个*稳时间序列是指其统计特性如均值、方差、自相关等。都是不变的。大多数统计预测方法都是基于这样一种假设,即通过使用数学变换,时间序列可以呈现为*似*稳的(即“*稳化”)。一个这样的基本转换是对数据进行时差处理,如下图所示。
这种变换的作用是,我们不是直接考虑指数,而是计算连续时间步长之间的差值。
定义模型来预测时间步长值之间的差异而不是值本身,是对模型预测能力的更强测试。在这种情况下,不能简单地使用数据具有很强的自相关性,并使用时间“ t 的值作为“ t+ 1”的预测。由于这一点,它提供了对模型的更好的测试,以及它是否从训练阶段学到了任何有用的东西,以及分析历史数据是否实际上可以帮助模型预测未来的变化。
时差数据预测模型
由于能够预测时间差数据,而不是直接预测数据,这是该模型预测能力的一个更强的指标,让我们用我们的模型来尝试一下。该测试的结果如下图所示,显示了真实值与预测值的散点图。
该图表明模型不能根据历史事件预测未来的变化,这是本例中的预期结果,因为数据是使用完全随机的随机游走过程生成的。根据定义,能够预测随机过程的未来结果是不可能的,如果有人声称这样做,人们应该有点怀疑…
你的时间序列是随机游走吗?
您的时间序列实际上可能是随机游走,检查这一点的一些方法如下:
- 时间序列显示出强烈的时间相关性(自相关),线性衰减或以类似的模式衰减。
- 时间序列是非*稳的,使其*稳表明数据中没有明显的可学习的结构。
- 持久性模型(使用前一时间步的观察值作为下一时间步将发生的情况)提供了可靠预测的最佳来源。
这最后一点对于时间序列预测非常关键。使用持久性模型的基线预测可以快速显示你是否可以做得更好。如果你不能,你可能正在处理一个随机游走(或者接*随机游走)。人类的大脑天生就到处寻找模式,我们必须保持警惕,不要通过开发随机行走过程的精细模型来愚弄自己和浪费时间。
摘要
我想通过这篇文章强调的要点是在评估你的模型在预测准确性方面的表现时要非常小心。正如上面的例子所示,即使对于一个完全随机的过程,预测未来的结果是不可能的,人们也很容易被愚弄。通过简单地定义一个模型,进行一些预测和计算常见的准确性度量,人们可能看起来有一个好的模型,并决定将其投入生产。然而,在现实中,该模型可能没有任何预测能力。
如果你从事时间序列预测工作,或许认为自己是一名数据科学家,我会敦促你也把重点放在 科学家 方面。永远要对数据告诉你的东西持怀疑态度,问关键问题,永远不要得出任何草率的结论。科学方法应该应用于数据科学,就像应用于任何其他种类的科学一样。
在未来,我相信机器学习将会被用在比我们今天所能想象的更多的地方。你认为它会对各个行业产生什么影响?我很想在下面的评论中听到你的想法。
编辑:根据兴趣和反馈的数量,我决定写一篇相同主题的后续文章: “如何(不)使用机器学习进行时间序列预测:续集”
如果你有兴趣了解更多与人工智能/机器学习和数据科学相关的主题,你也可以看看我写的其他一些文章。你会发现它们都列在我的中型作者简介中,你可以在这里找到。
而且,如果你想成为一个媒体会员,免费访问*台上的所有资料,你也可以使用下面我的推荐链接。(注意:如果您使用此链接注册,我也会收到一部分会员费)
[## 通过我的推荐链接加入媒体- Vegard Flovik
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@vflovik/membership)
更多来自 Vegard Flovik 媒体:
- 蒙特卡洛方法简介
- 从物理学到数据科学的转变
- 什么是图论,为什么要关心它?
- 用于图像分类的深度迁移学习
- 构建一个能读懂你思想的人工智能
- 机器学习:从炒作到现实应用
- 人工智能和大数据隐藏的风险
- 用于供应链管理的人工智能:预测分析和需求预测
- 如何利用机器学习进行生产优化:利用数据提高绩效
- 如何使用机器学习进行异常检测和状态监控
- 你是怎么把物理教给 AI 系统的?
- 我们能使用纳米级磁铁构建人工大脑网络吗?
人工智能研讨会——从宣传到现实应用
我多大了?
原文:https://towardsdatascience.com/how-old-am-i-f62538487d36?source=collection_archive---------9-----------------------
使用 3D 膝关节磁共振成像和卷积神经网络进行年龄评估
One of the 145 samples that was part of the data set
你能猜到这个膝盖核磁共振后面的人有多大年纪吗?我给你一个提示。这是一个 14 到 21 岁的德国男性的录音。不知道吗?我喜欢想象这是神经网络在被训练之前看待世界的方式。它完全没有线索。所以,让我来训练你。
在与缺乏合法证件的人打交道时,确定一个人的实际年龄是一个复杂的过程。在庇护申请或刑事诉讼中,情况往往如此。根据法律,儿童和成人的处理方式是不同的,但是我们没有一个准确的方法来确定一个人的年龄。我们今天使用的最佳方法是基于 X 射线,这是一种将患者暴露于电离辐射的侵入性成像技术。这就是为什么许多欧洲国家只允许这些录音作为司法命令的一部分。其他一些方法包括个人采访,以确定心理和生理特征,但它们很费时,也很主观。这就是为什么非常需要一种自动且无创的方法来精确地确定一个人的年龄。
作为德国研究基金会(DFG)的一项研究的一部分,我接触了一组 3D 核磁共振成像数据,显示了德国男性的右膝盖。图像上半部分的股骨是大腿骨,正下方的胫骨是胫骨。在录像的后面,你可以看到另一块骨头在左下角冒出来——腓骨。如果你看得更*,你可以在骨头上发现几乎像裂缝一样的黑色水*线。这些被称为生长板,因为这是你的骨骼实现纵向生长的地方。它们由软骨组成,这就是为什么它们可以在核磁共振成像记录中看到。一旦你停止生长,这些区域会慢慢地开始闭合,直到看不见为止。
Examples of a 14, 17 and 20 year old caucasian male (left to right)
我们在这项研究中使用了膝盖记录,因为我们知道可见的生长板在成年前会关闭。其他研究使用核磁共振成像或手部 x 光,已知手部生长板关闭较早。在上面的图片中,你可以看到黑色水*间隙的宽度是如何与一个人的年龄相关的。
我们记录的个体年龄在 14 到 21 岁之间。如果我们预测每个人的*均年龄是 17.5 岁,我们的误差不会超过 3.5 岁。事实上,我们*均只差 1.2 年,因为数据是正态分布的。这是我试图打破的原始基线。我喜欢把基线看作是你能做出的最聪明最愚蠢的估计。仅预测年龄为 17.5 岁的模型将显示 1.2 岁的*均差异。这也将是完全无用的。
Age distribution of individuals in the data set
在深度学习中,你通常首先尝试的事情之一是使用预先训练好的架构的即插即用方法。即使原始模型是在一个非常不同的数据集上训练的,这通常也能让你走得很远。我拿了我最喜欢的迁移学习架构 VGG16 和它在 ImageNet 上学习的权重。然而,我很快明白这不会让我有任何进展,因为这个模型没有收敛。我尝试了其他各种各样的附加功能,比如更简单的架构、特殊的训练过程或者将回归转化为分类问题。什么都没用。
所以,我退了一步。要么是数据显示没有与年龄相关的特征,要么是这个问题对于我的数据集来说太复杂了。由于数据只包含 145 张图片,第二种可能性似乎并不遥远。在这种情况下,你可以做两件事:
- 获取更多培训数据
- 降低问题的复杂性
在一个完美的世界里,第一种选择肯定是更可取的,但特别是在医疗领域,它有时不是一个选项。当涉及到医疗数据时,我们受到非常严格的隐私法的保护,这是一件好事,除非你正在处理这样的问题。所以我决定降低数据的复杂性。
幸运的是,一个勤奋的人在同一个项目中已经用骨骼分割图标记了一半的数据集。使用基于区域生长的半自动方法,他对每个样本花费了大约 2 个小时。有了这 76 个遮罩,我建立了一个工作流程,在人类膝盖的 3D 核磁共振成像中分割骨骼。我尝试了 2D 和 3D CNN 架构,但 2D 版本显示出更准确的结果,也更快地训练。
The architecture I used with visualizations for different slices
最后,我使用 U-Net 的一个小变体,每个卷积有 32 个恒定数量的输出通道,得到了 98.0% DSC 。腓骨是最小的骨头,事情变得有点问题,这就是为什么我决定训练三个独立的模型。我还尝试了一大堆其他的东西,你们可以在我的论文中读到,但是现在,我想就这样。
顺便说一句,你对这种方法如此有效不感到惊讶吗?一开始我的确是。想想吧。我无法在 145 个样本上训练回归器,但在 76 个样本上进行更复杂的分割可以完美地工作。事实证明,分割可以被看作是对每个像素的分类。这意味着对于每个样本,我有宽度高度*信息通过网络反向传播。这比简单回归得出的一个数值要多得多。
Input, predicted output and applied mask
通过对输入数据应用蒙版,我去掉了所有我不关心的非骨组织,能够更清晰地聚焦于生长板。我回到最初的问题,但很快发现它仍然不起作用。只有在采用了我的细分架构的收缩端并将其用作预训练模型之后,我才能够超越基线。这种想法不会使模型每次都收敛,但当它收敛时,它的预测是稳定的。
因为这个网络使用了每个体积图像的 2D 切片,所以我现在对每个 MRI 有了多个预测。*均来说,我错了 0.64 ( 0.48)年。显然,这已经是一个非常好的结果,超过了以前的腕骨核磁共振成像研究和使用 X 射线的 boneXpert 算法。
我分析了每张 2D 图像的不同预测,注意到内部切片导致了更高的准确性。我用加权*均值和丢弃外层切片进行了实验。这两个概念都改进了以前的结果,但另一种方法产生了更高的准确性。我设置了一个随机的森林回归器,它将获取多个年龄预测的向量,并为每个 3D MRI 输出一个估计值。这让我在测试集上得到 0.48 ( 0.32)年的*均差异。换句话说,这个工作流程让我评估 14 到 21 岁白人男性的年龄,*均误差为半年。
Slice predictions, combined prediction through random forest and ground truth of one example
这个项目成了我的学士论文。我计划开源代码和论文,这样任何人都可以在未来的工作中使用它。现在,在我发布任何消息之前,我必须等待委员会的意见。我觉得难以置信的是,像我这样没有医学背景的人可以利用人工智能算法为当前的研究做出贡献。这是这个计算机科学领域让我感到惊讶的地方,我希望将来能继续从事像这样令人着迷的项目。
更新:我的论文和整个代码现在已经上线。出于上述隐私原因,数据集不可用。
开放健康数据如何拯救 NHS
原文:https://towardsdatascience.com/how-open-health-data-can-save-the-nhs-a2f7059af0f7?source=collection_archive---------5-----------------------
在医学人工智能开发者面临的诸多挑战中,获取干净、可验证、真实的医学数据被认为是最大的障碍。在最*的一次在线调查中,我的 Twitter 社区中有 42%的人同意这一观点,认为“数据访问和清理”比临床部署(将模型引入野外的过程)更难,比训练和验证模型(鉴于可用工具的巨大增加,这是一个相对简单的过程)更难。
数据访问和清理被认为是人工智能在临床实践中实现的最大障碍的原因可以归结为三个简单的事实:
- 监督模型需要大量的医疗数据
- 医疗数据很难获得
- 医学数据很难符合事实
目前,围绕医疗人工智能,NHS 内部出现了一种奇怪的先有鸡还是先有蛋的局面。一方面,患者和临床医生对人工智能的潜力感到兴奋,但另一方面,他们通常不希望放弃他们的数据,这些数据将使人工智能得以发展,通常是因为害怕引起公众对不适当的数据共享的愤怒,或者对恶意企业利益的不确定性。显然,有些事情需要改变。
充分利用数据
NHS 是世界上最大的国有医疗保健系统。它涵盖了所有年龄层、多民族、多样化的人群,最重要的是,它是基于证据的,并且在很大程度上实现了医疗保健方法的标准化。在它的墙内包含了地球上最丰富的医学数据来源之一。这些数据可以实现新的数据驱动技术,包括人工智能系统,并有可能改变医学。但这些丰富的数据往往被锁在一个庞大的官僚机构后面,无法访问和丢失,阻碍了创新和进步。是时候与英国公众讨论公开他们的数据了。是时候告诉大家数据可以救命了。
开放数据和内容可以被任何人出于任何目的自由使用、修改和共享**。**
我一直在提议,为了利用人工智能的力量,大规模医疗数据需要更加开放,鉴于英国从摇篮到坟墓的国有化医疗系统,英国可能是最适合这样做的国家之一。我绝不是唯一认为开放数据很重要的人。在英国,理解患者数据计划(由英国公共卫生部的 Dame Caldicott 和 Wellcome Trust 支持,由独一无二的Natalie Banner 博士领导)的使命是教育共享医疗数据的好处。对强大的开放数据共享*台的呼声越来越高,这一倡议在引导公众对话方面做得非常出色。他们不仅关注为什么数据可以拯救生命,还关注如何。
对于那些对开放健康数据感兴趣的人来说,甚至有一个学术期刊关注强调开放数据的可用性和再利用的出版物。然而,在大规模数据共享开始之前,人工智能领域中相对较少的实际案例研究可以作为这些论点的基础,并提供令人信服的数据故事。
以身作则
我想简要强调一下我自己在试图展示开放卫生数据的力量时的经历。我在皇家放射科医师学院工作时,我们经常讨论对我们的职业影响最大的人工智能技术是什么——就工作量和体积而言,简单的胸部 x 光检查往往是最大的问题之一。到目前为止,cxr 是 NHS 中最流行的成像研究,据估计,其中 50-80%完全正常。如果我们能开发一个系统,有效而准确地将“正常”的 cxr 与“异常”的 cxr 区分开来,会怎么样?我们能否节省超过 50%的放射科医师 CXR 报告时间?我们能否通过让一线员工获得初步的分诊读数来加快护理点的交付?
为了建立一个人工智能系统,可以从病理学中准确地对正常状态进行分类,你需要大量这样标记的 cxr。不幸的是,你不能走进一家医院,要求数以百万计的标记图像,而且目前没有来自 NHS 患者的标记和公开可用的 CXR 数据集。
值得庆幸的是,在大洋彼岸,美国国立卫生研究院(T0)明白了这一点,并发布了 10 万份完全匿名的 cxr 供公众使用。这个数据集被证明是当前人工智能研究中最有影响力的数据集之一。它已经被 T2 大学、斯坦福大学、麻省理工学院和 T4 大学、谷歌公司等用来创建可以发现病理的算法,并在推动医学图像分析兴趣的增长方面发挥了重要作用。
然而,这些由知名机构进行的大规模研究都集中在寻找特定的病理(肺炎、肋骨骨折等),而不是执行整体图像分类。这可能是因为构建多类分类器算法是一项远比构建简单的二进制分类器有趣的机器学习任务。这也可能是因为还没有人想到这样做,而是去玩更性感的“人工智能在诊断中击败人类的表现”?
两位对机器学习感兴趣的英国初级医生找到了我,他们想问一个问题:如果我们可以使用非常简单、公开可用的现成算法,并训练他们执行高影响力的放射工作,会怎么样?答案是我们合著的关于 CXR 分流的论文,在线发表在《临床放射学》上。
他们采用了一个非常受欢迎的开源图像感知模型,称为 Inception ,该模型已被广泛用于对来自 ImageNet(狗、猫等)的图像进行分类,并使用一种称为迁移学习的技术,他们在来自 NIH 数据集和印第安纳大学的较小公共数据集的 CXRs 上重新训练该模型。
Inception-V3 — developers need only train the last final layers — a technique known as transfer learning.
一旦 cxr 被分成正常和异常(丢弃任何不确定性),使用 10 的云计算时间,训练初始模型的最后层只需要 6 个小时。他们的结果如下:
Our model yielded sensitivity 94.6% (95% CI: 94.4–94.7%) and specificity 93.4% (95% CI: 87.2–96.9%) with a positive predictive value (PPV) of 99.8% (95% CI: 99.7–99.9%) and negative predictive value (NPV) 27.9% (95% CI: 26–28.9%), all based on a cut value of 0.5.
The ROC curve demonstrated an area under the curve (AUC) of 0.98 (95% CI: 0.97–0.99). Cut-offs were unadjusted from 0.5.
实际上,两个 NHS 的初级医生(没有接受过正式的数据科学培训)建立了一个极其廉价和高度准确的 CXR 分流模型,他们之所以成为可能,是因为他们能够获得大量的、有标签的开放健康数据。
现在,我并不是说我们的论文在任何方面都是开创性的——我们当然没有在深度学习领域取得进展,也没有创造出商业化的产品或影响任何现实生活。然而,我们所做的证明了开放的健康数据可以以非常低的成本被用来创造潜在有效的工具。这才是最重要的——通过使用开放数据来创建一个有可能为 NHS 节省大量成本和效率的工具,来展示开放数据的力量。
分享是关怀
曾有过几次统一 NHS 数据基础设施的尝试,最著名的是国家信息技术计划(NP fit——不是有史以来最好的缩写)和最*的 Care.data。这两个计划被认为失败的地方在于所涉及的既得企业利益和缺乏数据安全性的细节。NPfIT 崩溃的部分原因是,几家不同的公司被给予了英国的大块土地来设计基础设施,并且对数据安全性没有给予足够的重视。最终,数十亿英镑被浪费在创建不可互操作的非标准化服务上。 Care.data 再次失败,原因是公众对他们的数据共享缺乏信任。
我们需要的是一种“自下而上”的数据共享方法,由国家指导方针来管理。如果每个 NHS 信托机构都能够得到关于数据去识别和共享的最佳实践的指导方针,那么他们就可以在当地与患者合作,以确保大规模的数据共享能够适当地进行,并符合当地的需求。例如,如果一家医院需要 CXR 分流算法,他们可以在当地咨询,为当地委托的研究小组提供历史去识别图像和报告,以构建并随后部署这样的算法。通过将大规模数据共享纳入本地研究,NHS 可以为算法建立试验台,这对提供过程的最后一步——临床验证——至关重要。不是所有的算法都行得通,但没关系。快速失败是科技界常用的咒语,如果 NHS 要转向技术来拯救自己,它需要营造一个允许快速失败的环境。
随着时间的推移,医院可以共同努力,确保数据集得到合并,为数据科学家提供更好的培训场所,并为推广到人群提供更好的算法。更好的是,一个中央机构可以委托进行一系列的研究。回到 CXR 的例子——如果说 NHS Digital 和 RCR 想要建立一个全国通用的 CXR 分流算法,他们需要做的就是公开呼吁感兴趣的医院参与进来。参与的医院将分享他们的 CXR 数据的一部分,这些数据可以集中保存(当然是去身份化的),并开放给研究人员使用。像 Kaggle 这样的数据科学竞赛已经存在多年,并提供了一个优秀的沙盒,研究人员可以在其中开发、快速失败和迭代。(这实际上是我一直在谈论的一个英国放射学人工智能网络(大脑)的模型!)
现在是时候了
NHS 中有很多关于数据共享的喋喋不休,还有很多会议、辩论和文章(我当然有参与其中的罪恶感!).与此同时,其他国家只是简单地应付着。例如,法国已经宣布将开始整理超过 5 亿个放射学病例用于人工智能研究的唯一目的。许多美国机构已经在准备大规模的数据共享计划,通常是与大型科技公司合作。澳大利亚已经开始建设一个巨大的生物库,这是南半球最大的生物库。
如果英国国民医疗服务体系在采纳和适应方面太慢,那么它只会被甩在后面。我们现在需要努力,开始与患者对话,并为未来做好计划。毕竟,开放的健康数据可能是唯一能拯救我们的病人和国民医疗服务的东西。
免责声明:本文所代表的工作是个人的,与我所属的任何公司或组织无关。
如果你和我一样对人工智能在医疗保健中的未来感到兴奋,并想讨论这些想法,请联系我们。我在推特上 @drhughharvey
如果你喜欢这篇文章,点击推荐并分享它会很有帮助。
关于作者:
哈维博士是一名委员会认证的放射科医生和临床学者,在英国国民医疗服务体系和欧洲领先的癌症研究机构 ICR 接受过培训,并两次获得年度科学作家奖。他曾在 Babylon Health 工作,领导监管事务团队,在人工智能支持的分诊服务中获得了世界第一的 CE 标记,现在是顾问放射科医生,皇家放射学家学会信息学委员会成员,Kheiron Medical 的临床总监,以及人工智能初创公司的顾问,包括 Algomedica 和 Smart Reporting。
OpenMined 如何利用你闲置的游戏机来训练下一代人工智能
原文:https://towardsdatascience.com/how-openmined-uses-your-idle-consoles-to-train-the-next-generation-of-ai-64a2207e2323?source=collection_archive---------2-----------------------
到现在为止,你应该已经听说过很多关于开源组织 OpenMined 的事情了。他们正在研究一种使用区块链和 Unity 游戏引擎来实现个人数据访问民主化的方法。
没听说过露天开采吗?没问题,有 有 很多篇 出有 。随便选一个。
OpenMined 为他们的加密深度学习库 PySyft 使用 Unity 游戏引擎。你现在可能会问自己,为什么深度学习库要用游戏引擎。让我解释一下。
面向所有人的 GPU 无处不在
如果你活跃在深度学习领域,你就知道训练一个 AI 需要大量的处理能力。在大多数情况下,一个好的兼容 CUDA 的 GPU 可以大大加快训练进度。如果你没有合适的硬件,即使训练一个简单的分类器也是一件痛苦的事情。
这是露天开采的问题。
OpenMined 的目标是日常用户,而不仅仅是数据科学家或深度学习工程师,他们可能无论如何都拥有一个高端 GPU。想想你的父母,你的兄弟姐妹,你的非技术朋友:他们拥有 CUDA 硬件吗?
如果你读过上面链接的一些文章,你就会知道 OpenMined 的目标是用户在自己的设备上用自己的数据训练共享网络——个人数据不应该离开设备。这就是为什么在大多数人使用的设备上进行培训很重要。
通过使用 Unity 游戏引擎,OpenMined 团队能够将他们的代码交叉编译到地球上几乎所有现有的 GPU 上。这意味着培训可以在更多的设备上运行,您可能拥有多台设备:
- 游戏机【The Xbox One X 的 GPU 堪比 GeForce GTX980 。此外,游戏机大部分时间都处于闲置状态——所以为什么不用它来训练一些人工智能呢?
- 智能手机/*板电脑:手机中的图形处理器越来越好——如果你不是一个手机游戏玩家,大部分时间都会闲置。如果你有一部 iPhone 8/8 Plus 或 iPhone X,你的手上也会有专用神经网络处理器 A11 仿生的力量。
- 电脑:即使你的电脑或笔记本电脑没有最新的 NVIDIA GPU,Unity 也可以在旧的 GPU 和 AMD、Intel 等硬件上训练 AI。—在每个操作系统上。
- ****更多:你的智能电视里面很可能有 GPU,也许你的智能手表也有,而且还会有更多的设备不断到来。
结论
**我在我的上一篇文章中说过,现在我再说一遍:open mined 项目的愿景和工具是彻底改变我们收集、保护和保护您的个人数据并将其用于人工智能的方式。显然,革新我们使用硬件进行训练的方式也是其中的一部分。
大部分内容摘自“为什么是 Unity?”open mined GitHub上的 Markdown 文件。如果你想投稿,请访问 OpenMined 的网站获取更多信息,并加入我们的 Slack。我去打个招呼。
组织如何从技术驱动的大数据战略中获益?
原文:https://towardsdatascience.com/how-organizations-gains-from-a-technology-driven-big-data-strategy-f1a834e7d7b0?source=collection_archive---------2-----------------------
中小型企业如何从数据分析中受益?
小型企业缺乏资源来进行大数据投资。因此,中小企业需要更明智的策略来加入大数据趋势。这里有一些提示——
- 中小型企业应该从投资小规模分析开始,而不是担心使用大数据集或小数据集,并专注于通过最佳业务数据集将数据技术分析用于企业决策。
- 此外,中小型企业应该利用数据集来帮助他们解决眼前的问题,而不是收集各种业务数据来预测未来的用途。
- 由于大多数中小企业高管依赖个人经验和信念,而不是业务数据驱动的结果,因此组织变革成为在小型组织中引入大数据文化的先决条件。
- 使用云计算也是在中小企业中有效实施大数据解决方案的基础。云有双重好处——一;它有助于通过统一的*台连接所有服务。第二,中小型企业可以通过采用基于云的大数据处理解决方案获得显著的成本优势。
- 中小企业的经营规模要小得多,因此在运营分析、R&D 分析等方面投资过多。对他们来说没什么意义。相反,他们可以通过专注于客户分析而受益更多。凭借更好的产品营销、个性化服务和有针对性的产品,中小企业可以获得显著的成本收入比优势。
- 最后,中小企业应该毫不犹豫地利用其组织外部的数据,以获得对客户行为、运营和财务管理的更多洞察。
如果中小型企业明确定义自己的目标,并且不被市场炒作所左右,他们可以从大数据实施中获益更多。然而,企业(无论规模大小)在实施大数据解决方案方面的成功取决于两件事。第一,数据的可用性,第二,正确处理技术的实施。
从技术驱动的大数据战略中获得组织收益
大数据分析在组织效率中发挥着重要作用。大数据战略带来的好处使公司获得了超越竞争对手的竞争优势,这通常是由于组织及其员工通过使用分析作为决策基础而增强了意识。以下是组织如何通过部署大数据战略获益——
降低组织成本
大数据解决方案有助于建立高效的制造流程,实现需求驱动型生产和原材料的最佳利用。自动化和使用人工智能来减少人工工作是在生产和运营中实现成本效益的另一种方式。对销售和财务部门的深入了解有助于管理者制定战略,促进敏捷工作环境,降低整体组织成本。
提高员工效率和生产力
数据驱动的决策有助于增强员工的信心。当人们根据可量化的数据做出决策时,而不是被要求自己做出决策时,他们会变得更加积极主动和富有成效。这反过来又提高了整个组织的效率。
设置有竞争力的价格
正如本文前面所证明的,众所周知,创建差异化的定价策略有助于开发有竞争力的定价,并带来相关的收益。此外,组织可以通过使用大数据来获得价格优势,从而应对类似产品和服务的竞争。
基于人口统计的销售策略
人口统计学划分了大多数市场,但是在客户分类中存在更深的划分。大数据分析可以根据顾客购买的可能性,将顾客分为不同的等级。这为销售代表提供了更多可靠的线索,并帮助他们转化更多。此外,当销售和营销基于大数据洞察时,销售代表很可能知道潜在客户的倾向和订单历史,从而提升销售代表的优势。
提升品牌忠诚度
客户可能会对关系驱动的营销做出更大的反应。使用数据分析,组织可以利用他们对客户需求和期望的先验知识,并相应地提供服务。因此,大大增加了重复订单的机会,并建立长期关系。
雇用更聪明的人做更聪明的工作
使用大数据技术已经成为人力资源经理通过访问社交媒体、商业数据库和求职引擎的概况数据来识别候选人的有用工具。这使得公司能够比传统的招聘技术更快、更可靠地招聘员工,因为传统的招聘技术总是存在不确定性。此外,当组织在所有*台上使用分析时,他们必须雇用符合其政策的候选人。
重新调整商业策略
大数据战略不仅为组织提供了更好的决策权,还为他们提供了验证这些决策结果的工具。组织可以使用这些久经考验的商业策略,根据新的需求重新调整他们的策略或规模。
结论
毫无疑问,大数据技术将继续发展,并在未来几年涵盖更多领域。随着数据生成速度的提高,即使是较小的企业也会发现很难使用较旧的系统来维护数据集。最重要的是,分析将成为商业活动背后的指导原则。此外,公司将需要更加自动化和数据驱动,以竞争和生存。 拥有机器学习和智能个人助理等技术的人工智能的发展也严重依赖于大数据。他们将在未来的商业管理、制造流程、销售和营销以及整体组织中扮演何种角色,仍有待观察。
如果您喜欢阅读上述文章,您可能会喜欢阅读“大数据分析将如何在企业中发挥重要作用?”
你的城市有多强大/空中连接?
原文:https://towardsdatascience.com/how-powerful-aerially-connected-is-your-city-79d886a79907?source=collection_archive---------9-----------------------
探索我的第一个“真正的”D3 可视化来找出答案
Click here to explore the live visualization!
首先,快速插入 D3.js
一直在学 d3.js,被它吹得神魂颠倒。不久前,我尝试用 R 闪亮的构建一个交互式可视化。我发现它很强大,但有点被服务器端的设置所阻碍——不太容易在任何旧服务器上部署。
D3.js 有一个令人困惑的更新周期(至少对我来说),但这是我唯一不喜欢它的地方。令人惊讶的是,您可以如此广泛地定制它的输出。如果你能想象,你就能做到。而且总会有一个bl . lock样本让你开始走上正确的道路。
如果你对学习 d3.js 感兴趣,我推荐这个简短的 Udemy 课程。这位教师很了解他的东西,他已经构建了一些真实世界的入门项目,在几周内带你从简单到复杂。
写完之后,我想试着围绕我对航空数据的兴趣做点东西。我在 R(仍然喜欢用它来做数据准备)处理了最新的 OpenFlights.org 数据,并给出了 100 个联系最紧密的城市的路线。
空中连接的城市是强大的城市
关于这些数据,有趣的第一件事是,一个城市的空中连接程度与城市权力的各种指数有多少重叠。全球化和世界城市研究网络(T9)(GaWC)和其他组织根据大都市的 GDP 估计值和其他数据编制了年度城市实力排行榜。
他们的选择标准听起来很复杂,有些是专有的。但是,仅仅通过对城市提供的出境航班数量进行排名,你就可以得到与 GaWC 100 强相当接*的结果。
这就是维恩图显示的。
这两份清单有 65 个重叠的项目。如果你想生活在一个强大的城市,你可以做得比简单地测量其出境航班时刻表的厚度更糟。
对于超级好奇的人来说,看看这张显示每个列表中前 50 名城市排名对应关系的二分图。
请注意,某些航空枢纽城市(例如亚特兰大和达拉斯)的空中连接排名比电力高得多。看起来,他们之间的联系更多的是由于主要航空公司的轴辐式航线,而不是他们的整体经济实力。
那么,你所在的城市与空中的联系有多紧密?
它在名单上吗?(我住在#18!)
探索我的 viz 找出答案。通过下拉菜单浏览整个 100 列表。将鼠标悬停在两侧的桑基条(是的,就是这些东西)上,查看绘制的路线(这部分花了一些时间!).
你会注意到前 20 个左右的城市是真正的全球连接,提供许多地区和直接的跨大陆航班。随着你在列表中越来越深入,提供的直飞洲际航班的数量逐渐减少,剩下的大部分都是区域航班。
放射学和人工智能将如何走到一起
原文:https://towardsdatascience.com/how-radiology-and-ai-will-come-together-36e48bb56870?source=collection_archive---------12-----------------------
Photo by Owen Beard on Unsplash
放射科医生的机器学习介绍— 10 部分系列
第二部
作者: 达尼洛泰·瓦雄
编辑: 迈克尔博士
万一你错过了第一篇帖子,在这里 查看一下 。
一个高效、准确的住院医生和一个经验丰富的主治医生是一股不可忽视的力量。该团队可以粉碎患者名单,从容应对列车事故。住院医生可以根据需要调出实验室和病史,他们可以在正确的时间通过电话找到正确的人,并处理除最复杂的临床情况之外的所有情况。这需要年的训练才能实现。
让我们来看看基思·德雷尔博士对临床诊断学的概述。
从左下方的患者开始,从左向右移动。
现在,这个临床工作流程大纲非常笼统,但我们可以跟踪患者进入医疗保健系统的步骤,到提供者订购成像,到放射科医师做他/她最擅长的事情。它很好地概述了患者诊断过程中采取的步骤。下一张图片将提供更多的放射学背景。
来自上面的临床路径被缩小以跟随具有急性神经症状的患者。从左至右:症状、影像学、影像解释和临床管理。
从上面的幻灯片中,我们可以对放射科医师每天都参与的大量功能进行分类,一天多次。过程中的具体点涉及放射科医师的知识,并在整个过程中注重团队合作。在一个复杂的工作环境中,管理一个病人的护理需要整个团队,相互关联的因素。
此外,众所周知,工作流中可能会有一些完成起来很繁琐的点,而这些点是可以自动化的。这可以改善放射科医师的工作流程,并且潜在地,提高的效率将转化为改善的患者结果和实际节省的资金。
这就是人工智能可以发挥作用的地方。在上面的幻灯片中,人工智能算法进入了检测 阶段。一般来说,这是大多数机器学习目前关注的地方。然而,在未来,我们可以想象这样一个世界,其中大多数步骤都可以通过智能算法来增强或辅助,以提高工作流效率。随着本系列文章的深入,这种人机交互的结合将会更加清晰。
放射学往往处于技术的最前沿*。“在过去的 30 年里,医学成像已经成为现代医学的一个标志,并彻底改变了医疗保健和医疗行业。”(MRI 和 PACS 系统彻底改变了成像的提供、使用和解释方式。这些为放射学应该处于领先地位的普遍观念铺*了道路。***
成像技术的创新不仅可以让放射科医生更好地了解潜在的疾病过程,还可以转化为改善患者的结果。
那么,人工智能在哪里呢?
第一个应用是心脏核磁共振成像。通常,放射科医师(研究员/住院医师)完成绘制心脏流出道轮廓的非常乏味的任务。这可能需要个小时。现在,理论上,这可以完全自动化。潜在的算法可以像脸书一样,自动检测主动脉根部并画出它的轮廓。对每个需要的大纲重复上述步骤。一旦轮廓完成,流量、狭窄和回流的计算也可以自动化。
从主治医师的角度来看,如果你的第四年住院医师一直低估主动脉根部周长,你应该鼓励他们使用你的教育方式和技巧来改进这项特殊的任务。如果你还记得住院医师的话,每个员工都不一样。
理想情况下,在这种情况下,算法将优于居民。当你操作图像来纠正任何错误时,算法将自动学习什么是可接受的,什么是错误的。现在把它想象成一个机构或者一群机构的缩小版。它对你来说应该是几乎透明的。它将有一个直观的系统,所以当你做出改变时,它会做一些小的修正,并持续改进。
随着智能嵌入到临床工作流程中,这只是将被研究的许多场景中的一个。
“医学成像将人类的视觉扩展到疾病的本质,使新一代更强大的诊断和干预成为可能”(1)。
放射科社区是一个独特的医生子集的一部分,我们往往是技术的早期采用者。因此,我们已经准备好站在正在开发的工具的最前沿,这些工具将遍布我们的工作空间。不——我们不需要知道如何对神经网络进行物理编程;我们可以把这个问题留给 Kaggle 开发人员和上一篇文章中提到的其他人。但理解机器学习的基础、潜在动机和含义将非常有帮助。
下周:
第 3 篇—机器学习和人工智能简介
参考文献
- W.高,谢(2011)。医学影像技术的艺术状态:从创建到存档,然后返回。开放医学信息学杂志, 5 (1),73–85。土井:10.2748386786867
小米是如何开始的
原文:https://towardsdatascience.com/how-remi-started-84495d722e0c?source=collection_archive---------5-----------------------
三年前,卡尔、沙拉德和我坐在帕拉马塔一家非中心的小咖啡馆里,当时我们决定尝试一下。
回过头来看,我们天真到了极点,不知道它到底是什么,但我们知道人工智能站在神经科学、数学、计算机科学、哲学和心理学的交叉点上,这将是一场地狱之旅。
在喝了许多咖啡和其他酒精含量更高的饮料后,我们讨论了这个想法,我们知道像 Remi 这样的东西必须存在。当然,有像 Deepmind 这样的纯人工智能研究公司,但没有一家人工智能公司带着绝对疯狂的长期使命,推动人工智能研究的边界,然后将他们的前沿突破转化为超棒的美丽解决方案和产品。
疯狂的长期任务?通用人工智能。
因此,在 2014 年春天,我们抛开谨慎,全力以赴。
我们选择 Remi.ai 的原因是,我们真诚地希望不要和那些充斥在科技创业领域的不友好公司混在一起。我们的长期目标是人类水*的人工智能,因此我们想要一个友好的人类名字。另一个因素是 Remi.ai 的报价为 130,000.00 美元,而 Remi.ai 在 onlydomains.com 的报价为 19.90 美元。
2014 年,人工智能领域没有很多公司,也没有大量关于深度神经网络的论文或培训材料。尽管如此,我们还是投入到学习和构建一切可用资源的任务中。我们从简单的神经网络和 RNNs 开始,在多种任务上进行测试,如预测销售收入和库存变动。我们为几个不同的项目探索了图像识别,甚至赢得了一场 kaggle 比赛。
但是几个月后,我们非常清楚强化学习是真正提高人工智能和开发像人类一样学习的智能体的关键。
对于任何在人工智能领域没有经验的读者来说,目前有三个不同的子领域。监督学习、非监督学习和强化学习。我不会对前两个给出太多的细节,因为这可以等待另一个帖子。但是强化学习可以被定义为建立人工智能来像哺乳动物一样学习。哺乳动物有一个简单但极其有效的学习机制,它们能够尝试一些事情,从结果中学习,最有趣的是,将他们的学习传递给他们的同伴和后代。这种学习机制在很大程度上受到了几千年来进化的内部奖励的影响,强化学习给了我们一个机会来开发可以模仿这一点的人工智能,显然是以一种初级的方式开始的。生活不完全是奖励和惩罚,有更高级的认知功能,可以说是关于哺乳动物大脑中的奖励机制。但它是我们智力的基石,是迈向人类水*人工智能的重要一步。
第二个基本点是,许多强化学习算法是通用算法,在某种意义上说,相同的算法可以应用于许多不同的任务,常常会产生令人难以置信的结果。如果你想一想,人类是这种能力的最好例子,通过试验、错误和实践来学习任何任务,只要在训练期间有回报和进步的感觉。你至少可以做下面的一些事情,如果不是全部的话:读书、写字、系鞋带、做长除法、骑自行车、下棋、玩滑雪板和无数其他的技能。这一切都来自于你大脑中的一种或者多种学习算法。
正如你拥有学习各种任务的能力一样,我们研究的算法可以应用于许多任务:从驾驶汽车,到玩电脑游戏,到学习如何理解语言和许多其他应用。
这成为我们小组研究的全部重点。我们开始在人工环境(电脑游戏)和真实世界的问题中测试强化学习代理。我们构建了代理来玩太空入侵者、Pong 和其他电脑游戏。我们构建了一个代理,它可以重新排列代码,以满足用户的请求,通过消除每次请求一个 API 的需要,简化了任何聊天界面。我们建立了一组智能体,它们在一个环境中发展自己的语言来交流环境,学习如何警告威胁智能体的到来,就像猫鼬一样。我们建立了一个代理,它可以在 Google Adwords 投标活动中踢屁股,并大大提高公司的投资回报率,我们还建立了一个非常酷的语言代理,它可以自己学习如何理解用户的请求来完成任务。
在这整个过程中,发生了太多的变化。我们学到的比目前任何大学学位所能提供的都要多。在这段时间里,人工智能已经从少数人感兴趣的一个小而随意的主题变成了目前谈论最多的技术之一,被预示为未来之路,不是对工业而是对整个社会。在 Remi,我们已经从在 tic tac toe 等小游戏上测试小算法,发展到为控制每月数百万美元支出的企业公司构建代理。
然而,许多事情都保持不变。我们仍然在阅读大量关于儿童神经发育的书籍,我们仍然喝太多咖啡,我们仍然 100%自举,我们仍然有同样疯狂的长期使命,这真的让我们兴奋。
接下来的几年对雷米来说将会非常有趣。我们将在未来一年推出两款产品,我们将继续致力于语义网络强化学习器,该学习器处于早期阶段,在推进人工智能语义理解方面表现出非常强劲的前景。我们正在与一家虚拟现实开发公司进行谈判,以在虚拟现实游戏中建立一个人工智能。也有一些更多的嘘嘘项目将有望在今年晚些时候见天日。
真的没有像开公司这样的体验。找到一群非常聪明、有动力的人,把你们所有的集体智慧和意志力投入到尝试建造一些没有人做过的东西中去。它有如此多的高潮和低谷。数小时盯着方程式和论文,试图让你的脑袋里有一个新的想法。多少个夜晚,你试图找到继续工作的能量。但是当一个智能体开始工作的时候,当你看到它在某些方面超越了人类,那种谨慎的兴奋可能真的在工作,最后和团队一起喝啤酒庆祝它在工作。
真的没有多少经验可以与之相比。
阿拉斯代尔·汉密尔顿
创始人
想在生活中浪费更多的时间?请继续关注 Remi AI 博客,因为我们正在构建完整的供应链产品,或者你可以在这里注册我们的 Remi 推荐阅读简讯。
或者,如果你准备好开始看到人工智能驱动的库存管理的好处,从这里开始旅程。
我们是谁?
Remi AI 是一家人工智能研究公司,在悉尼和旧金山设有办事处。我们已经交付了横跨快速消费品、汽车、工业和企业供应等领域的库存和供应链项目。
自动驾驶汽车如何从 A 地到达 B 地?
原文:https://towardsdatascience.com/how-self-driving-cars-get-from-a-to-b-f18b1fc12044?source=collection_archive---------4-----------------------
最*我偶然发现了一篇非常有趣的论文,这篇论文对城市地区无人驾驶汽车的运动规划和控制技术做了很好的概述。在这篇文章中,我将回顾这篇论文中与我在 Udacity 无人驾驶汽车纳米学位的最后一个学期 2 项目相关的几个部分。
The final output from last project in Term 2
构建自动驾驶汽车系统的常见方法之一是组织传感器感知(雷达、激光雷达、摄像头等)。)和决策过程分成一个等级结构。
分级结构
自动驾驶汽车的决策模块可以通过四个组件来表示:
- 路线规划——寻找 A 点和 b 点之间的最短路径。当你搜索附*的餐馆时,想想谷歌和 Here 地图在做什么。
- 行为决策 —一旦找到路线,该子模块负责选择驾驶行为(车道跟随、变道、右转等)。)基于其他交通参与者和既定的交通法规。这些行为是有限的一组动作,通常表示为有限状态机和一些启发法,用于反映车辆周围环境(其他车辆、道路工程等)的当前上下文。).这一领域的最新发展之一是麻省理工学院的人工智能方法,用于模拟决策过程中的这一步骤。
- 运动规划 —一旦行为被选择,它需要被转换成一个低级别反馈控制器可以遵循的轨迹。运动规划模块负责寻找轨迹/路径。
- 车辆控制 —反馈控制器通过使用适当的执行器(转向、油门、刹车)和纠正轨迹误差,完成沿着选定轨迹移动车辆的所有艰苦工作。
Decision making process in self-driving cars. Source.
关于运动规划和车辆控制的更多信息
在课程第二学期的最终项目中,我们被要求在模拟器中使用模型预测控制(简称 MPC)驾驶汽车,这基本上涵盖了自动驾驶汽车决策过程的最后两个部分(运动规划和车辆控制)。
MPC 能够预测车辆在有限时间范围内的未来状态(位置、方向和速度)。这是一个不断自我更新的迭代模型,并在 N 个时间段( dt )预测车辆状态。预测本身是基于数学车辆模型。
创建一个正确的车辆模型是一项相当复杂的任务,并且伴随着权衡(我们是应该选择精度较低的简单模型还是计算要求较高的复杂模型)。在我们的项目中,我们将使用运动学模型,与动力学模型(考虑了影响车辆动力学的其他力)相比,该模型更容易理解。
这是我们的车型:
Kinematic vehicle model
车辆坐标用 x 和 y 表示。 ψ 和 v 分别对应方位和速度和*。* 车辆执行器用转向角( δ )和加速度( a )建模。
Udacity simulator 为我们提供了车辆应该去哪里的方式(参考点)。这将来自路线规划步骤,来自现实世界中的层级流。通过这些点拟合高阶多项式,并且输出用于与 MPC 预测模型进行比较。这将是运动规划步骤。
MPC 的工作方式是,它预测车辆未来的位置,并试图通过正确调整执行器(转向、油门和刹车)来最小化错误率。这将代表车辆控制步骤。
你会注意到项目中缺少行为决策步骤,但这是由于 Udacity 模拟器中场景的简化(路上没有其他车辆,没有路障,等等。).
延迟启动
我们应该注意的一件事是反馈控制器中执行器的响应性。在现实世界中,改变转向角和/或油门的请求将由汽车上的致动器以一定的延迟来执行。在该项目中,为了模拟这种行为,引入了人工100 毫秒延迟。我通过设置运动学方程来处理这个问题,以使用前一时间步的驱动。在这种特殊情况下,时间步长( dt )与模拟延迟具有相同的值。
最后结局
该项目的源代码可以在我的 Github 个人资料中找到:
[## bdjukic/CarND-MPC-项目
CarND-MPC-Project - CarND Term 2 模型预测控制(MPC)项目
github.com](https://github.com/bdjukic/CarND-MPC-Project)
自动驾驶汽车的转向控制
原文:https://towardsdatascience.com/how-self-driving-cars-steer-c8e4b5b55d7f?source=collection_archive---------2-----------------------
用数据做酷事
典型的自动驾驶汽车从感知系统开始,该系统估计周围环境的状态,包括地标、车辆和行人。
Perception of local environment
定位模块将其所学与地图进行比较,以确定车辆的位置。
Localizing a self driving car
一旦知道了车辆的位置,路径规划模块就绘制出到达目的地的轨迹。
Path planning trajectory
最后,控制回路在每个时间步决定转向和油门/制动,以在该轨迹上引导车辆。在这篇博客中,我将讨论控制回路如何决定转向和油门值
对于我在 Udacity 自动驾驶汽车 nano degree 中的项目 10,我实施了预测控制,以在模拟器中驾驶汽车。见下图。模拟器向用户提供汽车在每个时间点的位置和速度,反过来,用户向模拟器提供转向和加速度以应用于汽车。非常感谢 Udacity 创建了这个模拟器,并为我提供了实现模型预测控制的专业知识
Self Driving Car in Udacity Simulator
我已经用 C++分享了我的 GitHub 的链接和完整代码。
模型预测控制
状态:车辆在任一点的状态由四个向量描述——x 位置、y 位置、速度(v)和方向(psi)。
执行器或控制输入是转向角(δ)和节流阀(a)。刹车可以表示为负油门。因此 throttle 的值可以在-1 和+1 之间。转向角通常设置在-30 度到+30 度之间。
运动学运动模型可用于在应用转向和油门后从先前状态预测新状态。
x _[t+1]= x[t]+v[t]* cos(psi[t])* dt
y _[t+1]= y[t]+v[t]* sin(psi[t])* dt
psi _[t+1]= psi[t]+v[t]/Lf * delta[t]* dt
v _[t+1]= v[t]+a[t]* dt
这里 Lf 是车辆前部和重心之间的距离。车辆越大,转弯速度越慢
为了估计理想的转向角和油门,我们从理想状态估计新状态的误差——我们想要遵循的实际轨迹和我们想要保持的速度和方向,并使用 Ipopt 解算器来最小化该误差。这有助于选择最小化期望轨迹误差的转向和油门。
所以良好运动控制的关键是很好地定义这个误差。我将误差设置为基于以下内容
- 与参考点的距离——见下面的等式。我们将由于与参考 x,y 的差异而产生的误差(定义为跨磁道误差(CTE))、与期望取向的差异(定义为取向误差(epsi ))以及与参考速度的差异相加。n 是我们预测未来的时间步数。
double cost = 0;
for (int t=0; t < N; t++) {
cost += pow(epsi[t], 2); //Orientation error
cost += pow(cte[t], 2); //Cross track error
cost += pow(v[t]- ref_v, 2);//Delta from ref velocity
}
2.与执行器成比例的误差
cost += pow(delta[t], 2); //Steering angle
cost += pow(a[t], 2);//Throttle
3.与致动器变化成比例的误差——成本函数中的这一附加项反映了下一个致动器状态与当前状态之间的差异。这确保了致动器值的*稳变化
for (int t = 0; t < N-1; t++) {
cost += pow(delta[t+1] - delta[t], 2) //Change in steering
cost += pow(a[t+1] - a[t], 2) //Change in throttle
}
上述各项可以乘以权重,这些权重增加了该项在总成本等式中的重要性。例如,如果我们将pow(delta[t+1] - delta[t], 2)
乘以 500,这将确保非常*稳的转向变化,并防止模拟器中的颠簸运动
C++ Ipopt 解算器用于最小化误差,并计算转向和油门的最佳值。
另外两个相当重要的参数是我们要预测转向和油门的未来时间步数(N)。和时间步长(dt)。
- dt——不同时间步长之间的时间间隔。我发现 dt 是模拟器中整体性能的一个非常重要的参数。如果 dt 太低,就会导致赛车在赛道中心来回摆动。发生这种情况可能是因为致动器输入接收非常快,并且车辆不断响应。此外,如果 dt 小于延迟时间(0.1 秒),则在执行前一个信号之前接收到新的致动器信号。这导致汽车的颠簸运动。另一方面,如果 dt 太大,在致动器被接收之前,汽车行驶了太多的距离,虽然这导致沿着轨道的直线部分的*稳性能,但是它导致汽车在弯道上偏离道路。
- n-是模型预测的时间步数。随着 N 的增加,模型预测更远。模型预测的时间越长,预测就越不准确。此外,如果 N 很大,则需要进行更多的计算,这会导致求解器的结果不准确,或者求解器无法实时提供解。我发现大约 10-15 步是最好的
一旦设置了所有的模型并且定义了所有的参数,
- 我们将当前状态作为初始状态传递给模型预测控制器。
2.我们称之为优化求解器。给定初始状态,求解器将返回使成本函数最小化的致动器向量。
3.我们将转向和油门应用到车辆上。然后回到步骤 1。
通过预测每一步正确的转向和油门来驾驶汽车绕着模拟器行驶不是一件容易的事情,但却是一次令人敬畏的学习经历。非常感谢 Udacity 创建了这个课程!
其他著述:【https://medium.com/@priya.dwivedi/】T2
PS:我住在多伦多,我希望将职业生涯转向深度学习。如果你喜欢我的帖子,并能把我联系到任何人,我将不胜感激:)。我的电子邮件是 priya.toronto3@gmail.com
参考文献:
Udacity 无人驾驶汽车 Nano Degree——我感谢 Udacity 和巴斯蒂安·特龙给我机会成为他们新的无人驾驶汽车项目的一部分。这是一次非常有趣的旅程。我使用的大部分代码都是在课堂讲课中建议的。这里的图片和视频参考也在讲座中分享
图片:https://arxiv.org/pdf/1612.02649.pdf
模拟将如何发展数据科学
原文:https://towardsdatascience.com/how-simulations-will-evolve-data-science-3187c18de886?source=collection_archive---------1-----------------------
数据科学可以分为两类:监督学习和非监督学习。不同的是,监督学习有一个所谓的标签。标签或目标变量包含关于真相的信息。与世界各地的许多客户合作时,我经常建议:
如果你能被监督;去监督。
我更喜欢这样,因为有监督的问题更容易优化。你有了一个更清晰的业绩衡量标准,这让生活变得更轻松。
在这个领域,很难被监督。要克服的问题是:我从哪里得到一个标签?
在大多数教育例子中,关于这个基本事实的信息是简单给出的。事实上,你经常要付出很大的努力来获得这些信息。这项工作分为三类:
- 用一种可以被监督的方式来解释问题
- 从数据中提取信息(例如,获取时间序列中的预测值)
- 获取一般的标签信息
在这篇文章中,我们主要讨论获取标签的问题。更准确地说,我们关注一种未被充分利用的方式来获得它。
Elmer-pump-heatequation by A1, Wikipedia, CC BY-SA 3.0
获取标签信息的三种方式
目前最常用的获取标签的方法是使用历史数据。虽然这很直观,但也有其独特的问题。一方面,可能有些事情从来没有发生过,因此你没有相关的数据。另一方面,你可能会遇到概念漂移的问题。概念的漂移意味着潜在的模式随着时间而改变。一个常见的原因是机器的腐蚀。
获得标签数据的第二种方式是人类专家。人类非常擅长给日常物品贴标签,比如图片或文本。如果你问一位生物学家,他在显微镜图像上看到的是哪种细菌,他通常能说出名字。这些技术的缺点是:有限的数据量、主观性和用例的局限性。人类不太擅长标记 1000 个传感器的时间序列问题。
第三个很少被使用的选项是:模拟。作为一名工程师,你可以非常精确地模拟你的设备。汽车或飞机制造商正在模拟空气动力学。但是你可以在所有工程领域看到类似的模拟。
如果你不仅模拟了设备本身,还模拟了整个传感器电子设备来获取数据,你就可以用它来进行数据科学研究。您可以使用它来生成给定缺陷的传感器读数。这样,您可以生成许多积极的预测性维护案例。只有在使用模拟的情况下才有可能,因为搜索到的维护需求很少被记录下来。
物理学家正在开拓
事实上,这是粒子物理学家使用了几十年的技术。现代粒子探测器,如 ATLAS 或 Cern 的 CMS,是通过非常精确的模拟来描述的。为了找到你的希格斯粒子,你要模拟整个探测器,给自己创造模拟的希格斯粒子。之后,您可以将它用作监督学习算法的标记数据。
在实践中很少这样做的原因是获得好的模拟的挑战。模拟的质量限制了建模技术的复杂性。在欧洲粒子物理研究所,物理学家花了数年时间研究模拟本身。
随着物联网和工业 4.0 的兴起,我希望模拟工程师和数据科学家能够找到彼此。我对结果非常兴奋。有没有行业内的动手经验?如果是这样,我很想听听你们的经历!
统计数据如何误导你
原文:https://towardsdatascience.com/how-stats-can-mislead-you-e0ad563a578a?source=collection_archive---------5-----------------------
“我的统计数据不会说谎”,隔壁的统计学家说;嗯,也许是的,但爱丽丝可以使用那些很酷的图表,曲线数字来编造谎言!,不是在仙境,而是在现实!
如果你是一名数据科学家、分析师、机器学习工程师,或者仅仅是喜欢数字的人,理解统计学是至关重要的。但是统计数据并不是绝对的真理!也许你看到的统计数据被操纵了,为什么?因为他们可以!媒体和广告公司经常玩弄消费者心理,只展示他们想让消费者感知的东西。为了做出正确的决定,经常需要知道你得到的数据是真实的,毕竟你不想失去那笔百万美元的交易,不是吗?让我们仔细看看如何识破谎言,这样下次你去开会或看报纸时,你就不会被花哨的图表误导了。
统计数据误导的方式
①。 统计意义并不意味着实际意义。简单地说,某件事在统计上有意义并不一定意味着它是可行的或有任何实际重要性。
在一个统计实验中,假设检验(H0 和 H1)的框架是评估关于总体的两个相互排斥的陈述,以确定哪一个陈述最受样本数据支持。零假设(H0)是一种假设,即两个或多个总体的参数(均值、方差)没有差异,而另一种假设表示存在差异,称为备择假设。
显著性水*,用希腊字母 alpha 'α'表示(当假设为真时拒绝零假设的概率),在实验开始前选择。例如,显著性水*为 0.05 表示当没有实际差异时,得出存在差异的结论的风险为 5%(通常选择 0.05 作为显著性水*,但它最终取决于用例,如果您的研究是关键的,您可以考虑 0.01)。另一个统计是“p 值”,即当研究中的零假设(H0)为真时,发现观察到的或更极端的结果的概率。
如果 p < α Null Hypothesis is rejected, which means the likelihood of the occurrence of the event if the Null Hypothesis is true is unlikely. A test result is said to be Statistically Significant when the sample statistic is unusual enough relative to the Null Hypothesis. Confused still?, 在这里阅读更多信息,但是现在要明白统计意义并不意味着实际意义。例如:你进行的一项研究(即使 alpha 为 0.01)可能完全具有统计学意义,但也许你收集的样本不足以代表总体,或者涉及的风险太高,你甚至不希望有 1%的概率出错。
**②。无关情节:**俗话说‘一图胜千言’,统计的图表/情节也是如此。
a.曲线图/图表类型:用于表示数据取决于您想要向观众讲述什么故事,例如:折线图更适合描述股价的涨跌,而条形图可能适合表示 x 地区每家公司的销售数据。使用饼图(条形图可以完成这项工作)可能会使整个演示文稿显得笨拙,并且您可能无法向观众传达一个观点。
b.操纵 Y 轴: Y 轴可以被截掉,告诉一个不相关的检查
其他时候, Y 轴需要截断,以必要的比例表示数据
省略基线或挑选数据是图表可能被歪曲的一些其他方式。同样解释你的情节也很重要,例如,不要混淆趋势的波动(如下图所示)。
**3)。相关性并不意味着因果关系:**想象你在一个周日的早晨醒来,当你走向沙发,手里可能拿着一杯咖啡,啜饮着,当你拿起那份报纸时,你震惊地看着一条可能是很好的误导性信息,它读起来像这样
不要担心,放松你的大脑肌肉,简单地抓住‘相关性并不意味着因果关系’这个事实;我的意思是,虽然缅因州的离婚率和人造黄油的消费是相关的,但没有证据表明一个导致了另一个。要了解更多信息,请参考。
相关性就像一种潜在的关系,虽然有潜在的关系并不意味着关系的存在。所以,下次你看到一个奇特的图表,有人说这是造成这种情况的原因,记得不要落入陷阱,除非你有确凿的证据。这并不意味着相关性是无用的,事实上它被用在许多地方,例如:评估机器学习中变量对之间线性关系的强度和方向。
4)。辛普森悖论: 辛普森悖论,或尤尔-辛普森效应,是概率统计中的一种现象,一个趋势出现在几组不同的数据中,但当这些组组合在一起时就消失或反转。
一个真实的悖论发生在 1973 年。在伯克利大学的研究生院调查了录取率。该大学因招生中的性别差距被女性起诉:
调查的结果是:当每个学校被分开看时(法律、医学、工程等。),女性的录取率比男性高!然而,*均值表明,男性的录取率比女性高得多。说到困惑。
当单个部门被关注时,录取实际上稍微偏向女性。这个误导性的*均值是悖论的经典例子。
**5)。抽样:**收集的数据需要数量合适,样本量小的统计数据通常不太准确。影响数据收集的一个因素是调查是如何进行的。抽样的目的是收集、计算和分析统计数据,以便我们可以从样本中为总体做出推断。最后,我们需要确信结果充分代表了我们关心的人群。
构建样本时,请记住->收集的过程和数据的一致性、多样性和透明度。有几种抽样技术(随机的、系统的、分层的等等),每一种都有其优点和缺点。你可以在这里进一步了解它们。
结论
统计数据只是数字,它们是你想要讲述的故事的一半,如果没有上下文,它们是没有意义的,所以在做出任何结论之前,你需要精通并知道他们正在解决的问题,他们正在处理的数据,即你需要领域知识来推断/解释所进行的研究背后的统计数据。此外,统计只是一种工具,就像所有工具一样,你需要知道何时何地使用它们,如果使用得当,它可以帮助你做出价值数百万美元的决策,如果使用不当,它会让你失去这些决策。所以下次你看到一张图表或一些统计数据时,不要忘记质疑权威!或许在得出结论之前收集更多的证据。
我希望我已经提供了在分析你的统计数据或进行实验时要考虑的基础知识的概述。尽管不用说,我还没有深入研究过任何主题,您可能希望进一步探索它,为此,我提供了我的一点知识来源的链接。
参考文献
计算思维与数据科学讲座-15。统计罪恶并总结:【https://www.youtube.com/watch?v=mCHwwW_Y5wE】T2&list = pl 2 goet 98 czrrq 0 nku 3c mpvr 0 v2 mjb 1 qku&index = 15
统计 vs 实际意义:https://atrium . lib . uoguelph . ca/xmlui/bitstream/handle/10214/1869/A _ Statistical _ vs _ Practical _ Significance . pdf;sequence=7
辛普森悖论:https://www . statisticshowto . datascience central . com/what-is-Simpsons-Paradox/
样本量问题:https://askpivot.com/blog/2013/11/05/sample-size-matters/
采样技术:https://blog . social cops . com/academy/resources/6-Sampling-techniques-choose-representative-subset/
理解统计显著性:http://blog . minitab . com/blog/adventures-in-statistics-2/Understanding-hypothesis-tests-Significance-levels-alpha-and-p-values-in-statistics
【误导图:】【https://venngage.com/blog/misleading-graphs/】
相关性与因果性:
1.https://www . insights association . org/article/correlation-does-not-equal-causance-and-why-you-should-care
2.https://idata STS . com/why-journalists-love-cause-and-how-statists-can-help/
出租车是如何算出车费的?—预测纽约市黄色出租车的价格
原文:https://towardsdatascience.com/how-taxis-arrive-at-fares-predicting-new-york-city-yellow-cab-fares-71a8c43b7c50?source=collection_archive---------11-----------------------
photo credit: Pixabay
如何从基线模型到机器学习
预测出租车价格绝对没有预测机票价格那么红火。然而,由于我们目前没有可用的机票价格公开数据,为什么不从预测出租车价格开始练习呢?
在此任务中,我们将在给定接送地点和接送日期时间的情况下,预测纽约市的出租车费用。我们将在一些基本的数据清理后从创建一个最简单的模型开始,这个简单的模型不是机器学习,然后我们将转移到更复杂的模型。让我们开始吧。
数据预处理
数据集可以从 Kaggle 下载,整个训练集包含 5500 万次打车,我们将使用 500 万次。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
% matplotlib inline
plt.style.use('seaborn-white')
pd.set_option('display.float_format', lambda x: '%.3f' % x)taxi = pd.read_csv('ny_taxi.csv', nrows = 5_000_000, parse_dates = ['pickup_datetime']).drop(columns = 'key')
print("The dataset is {} taxi rides".format(len(taxi)))
数据集为 5000000 次打车
我们先看几排。
Figure 1
和统计摘要。
Figure 2
当我们查看统计摘要时,我们有几个发现:
- 最低票价金额为负数。
- 最小和最大经度和纬度看起来不真实。
- 最小乘客数为 0。
我们将修复它们。
- 纽约市的经度约为-74 度,纬度约为 41 度。
- 移除 0 乘客计数。
- 出租车费的初始费用是 2.5 美元,所以我们取消了低于这个数额的车费。
taxi = taxi[((taxi['pickup_longitude'] > -78) & (taxi['pickup_longitude'] < -70)) & ((taxi['dropoff_longitude'] > -78) & (taxi['dropoff_longitude'] < -70)) & ((taxi['pickup_latitude'] > 37) & (taxi['pickup_latitude'] < 45)) & ((taxi['dropoff_latitude'] > 37) & (taxi['dropoff_latitude'] < 45)) & (taxi['passenger_count'] > 0) & (taxi['fare_amount'] >= 2.5)]
然后我们再检查统计汇总。
Figure 3
看起来好多了。
电子设计自动化(Electronic Design Automation)
让我们试着想象几次乘坐出租车的情景。
import seaborn as sns
def showrides(df, numlines):
lats = []
lons = []
goodrows = df[df['pickup_longitude'] < -70]
for iter, row in goodrows[:numlines].iterrows():
lons.append(row['pickup_longitude'])
lons.append(row['dropoff_longitude'])
lons.append(None)
lats.append(row['pickup_latitude'])
lats.append(row['dropoff_latitude'])
lats.append(None)plt.plot(lons, lats)showrides(taxi, 10)
Figure 4
有些骑行距离很短,有些在中间距离,其中一个相当长。
票价金额
plt.figure(figsize = (14, 4))
n, bins, patches = plt.hist(taxi.fare_amount, 1000, facecolor='blue', alpha=0.75)
plt.xlabel('Fare amount')
plt.title('Histogram of fare amount')
plt.xlim(0, 200)
plt.show();
Figure 5
车费金额直方图显示大多数车费金额非常小。
taxi.groupby('fare_amount').size().nlargest(10)
Figure 6
最常见票价金额非常小,仅为 6.5 英镑和 4.5 英镑,表明它们是曼哈顿内非常短的车程。
乘客数量
taxi['passenger_count'].value_counts().plot.bar(color = 'b', edgecolor = 'k');
plt.title('Histogram of passenger counts'); plt.xlabel('Passenger counts'); plt.ylabel('Count');
Figure 7
taxi.groupby('passenger_count').size()
Figure 8
基于以上发现,我们准备去除passenger_count
> 6 的打车。
taxi = taxi.loc[taxi['passenger_count'] <= 6]
基线模型
我们要创建的第一个模型是一个基于比率计算的简单模型,不涉及机器学习。
baseline_model
Figure 9
这个基线模型让我们的测试集 RMSE 为 9.91 美元。我们期望 ML 能取得比这更好的成绩。
特征工程
- 从日期时间中提取信息(星期、月、小时、日)。出租车费在一天中的不同时段以及工作日/周末/节假日有所不同。
taxi['year'] = taxi.pickup_datetime.dt.year
taxi['month'] = taxi.pickup_datetime.dt.month
taxi['day'] = taxi.pickup_datetime.dt.day
taxi['weekday'] = taxi.pickup_datetime.dt.weekday
taxi['hour'] = taxi.pickup_datetime.dt.hour
- 从上车到下车的距离。行程越长,价格越高。
haversine_np
- 增加一栏,标明从接送坐标到 JFK 的距离。往返 JFK 的统一票价为 52 美元。
JFK_coord = (40.6413, -73.7781)pickup_JFK = haversine_np(taxi['pickup_latitude'], taxi['pickup_longitude'], JFK_coord[0], JFK_coord[1])
dropoff_JFK = haversine_np(JFK_coord[0], JFK_coord[1], taxi['dropoff_latitude'], taxi['dropoff_longitude'])taxi['JFK_distance'] = pd.concat([pickup_JFK, dropoff_JFK], axis=1).min(axis=1)del taxi['pickup_datetime']
taxi.head()
添加新要素后,我们的新数据框看起来是这样的。
Figure 10
让我们想象一个新的特征,距离
plt.figure(figsize = (14, 4))
n, bins, patches = plt.hist(taxi.distance, 1000, facecolor='blue', alpha=0.75)
plt.xlabel('distance')
plt.title('Histogram of ride distance')
plt.show();
Figure 12
taxi['distance'].describe()
Figure 13
最小距离为 0,我们将删除所有 0 距离。
taxi = taxi.loc[taxi['distance'] > 0]
我们已经为更复杂的模型做好了准备,并击败了基线模型产生的 RMSE。
线性回归模型
linear_regression
Figure 14
随机森林回归
random_forest
Figure 15
LightGBM
Figure 16
Figure 16
Keras 回归模型
keras_regression
Figure 17
今天到此为止。 Jupyter 笔记本可以在 Github 上找到。周末愉快!
文本摘要如何改变我们的教育方式
原文:https://towardsdatascience.com/how-text-summarization-could-change-the-way-we-educate-e1a6b2a21cea?source=collection_archive---------6-----------------------
这篇文章并没有提出新的研究或创新,而是描绘了一幅我们可以用适当的技术实现的画面。
历史上,人类发现计算机是有用的,因为他们将解决问题的更繁琐的方面卸载到这些机器上。人类于是能够将他们的努力重新分配到真正需要他们的地方;到他们能产生影响的地方。白领工人已经被减少到机器还不容易自动完成的任务。
Text summarization could reduce the amount of information that humans have to intake and understand daily
作为一个物种,我们现在在不同的领域严重依赖计算机。数学、制造、定价、送货/提货物流、搜索和股票交易是让我印象深刻的主要例子。这些计算能力的应用都(至少)有一个共同点:它们都接收问题作为输入,并提供答案作为输出。
计算机解决问题有两种主要方法:找到一个已有的答案或根据输入计算出一个新的答案。
谷歌是为充满问题的人类带来答案的典型代表。它梳理了数以万亿计的网页,并做了大量有趣的处理,给你带来似乎包含当前问题答案的页面。这对于那些只需要快速找到当前问题答案的人来说是非常有用的。对于程序员来说,这也是一个有用的抽象。谷歌不是试图自己回答所有的问题(就像 WolframAlpha 所做的那样),而是试图将互联网上已经存在的问题的答案带给用户,以引起用户的注意。
这种解决问题的方法与其他一些旨在为大量变量计算最佳状态的计算领域形成了直接对比。作为一个明显的例子,股票交易机器人不需要一个关于股票市场如何运作的文章的链接,它需要计算一个对许多股票在下一个时间间隔的表现的预测。
互联网很大
正如我们之前在探讨谷歌的有用性时提到的,互联网目前估计有超过 60 万亿的页面。这比任何人希望阅读或理解的信息都要多。这证明了我们人类在掌握信息方面的成就。我们现在拥有和创造的数据比人类历史上任何时候都多。最*一次统计(2017 年 3 月),每分钟有 300 小时的视频被上传到 YouTube。每分钟,有 35 万条推文被发送(2013 年 8 月)。在美国,每年有 60 万到 100 万本书出版。这些数字既是为了吓唬你,也是为了证明信息的创造速度超过了人类的消费速度。
面对大量涌入的新数据,我们怎么可能有望保持领先呢?我们怎么可能希望继续解析这些不断增长的数据呢?我认为,答案是,如果没有新形式的技术来推动我们消费信息的能力达到更高水*,我们就做不到。我觉得我目前正处于信息灵通和信息超载之间。我不认为自己会突破目前每天 45-60 封需要我关注的邮件的水*。
我们需要新的工具来筛选出无用的信息,并为我们提供我们试图学习和理解的信息的最小化版本。
最*有趣的工具
有一些工具开始出现,它们意味着扩展人类数据消费的限制。事实证明,这是一个特别困难的问题,正从几个不同的方向着手解决。
在这个问题领域中,更有趣的攻击手段之一实际上是改变消费数据的方法。这一类别的工具不是创建数据集的摘要,或者将相关数据冒泡到顶部,而是试图通过提供范式转变来增强人类的自然消费能力。Spritz 是这种工具的一个有趣的例子。对于门外汉来说,Spritz 是一个快速阅读工具,可以帮助你以高达 1000 wpm 的速度阅读(尽管人们通常不这样做)。它围绕一个中心点排列单词,然后以您指定的任何速度快速闪烁单词。
增加人类可以接受的数据量的最明显的方法是减少人类需要接受的数据量。现已倒闭的 Summly 就是一个有趣的例子,它扫描最大的新闻来源上发布的新闻故事,将其归结为要点,并自动生成合理的内容摘要。Summly 可以为你提供一个清晰简洁的新闻故事摘要,尽管是以一种更简洁的形式。
我们真正需要的是
但是这些方法不足以满足日益增长的解析、合成和管理数据流的压力。导致 2016 年大选个性化“真相”筒仓的信息算法排序是不够的。最*的注意力似乎集中在将“有趣的”文章、网站或图像引入用户的提要上。我们需要能够从不同的来源中综合和提取有意义的信息的工具。
通过解决理解新研究的困难,蒸馏正在做出巨大的努力。这是一份旨在向大众传播机器学习突破的杂志。研究人员和作家一起工作来创建交互式可视化,这将清楚地展示最*研究的有趣部分。这是朝着正确方向迈出的一大步。我们需要重新强调在信息山上建造一条铺好的道路,我们目前正在其上建造我们的最新产业。
未来普通人可能接触到现代研究的唯一途径是通过像 Distill 这样的出版物。然而,我认为更直接的途径是通过更先进的技术工具。这些工具旨在将文章、科学出版物、书籍中最重要的部分呈现出来,而不仅仅是你可能感兴趣的部分。
我知道在文本提取和自动文本摘要领域有很多的优秀研究,但是我们需要将这项研究商品化。目前只有 17 家公司在安吉尔的内容摘要名单上。为什么我们对破坏婚礼策划感兴趣的人比对消费信息创新感兴趣的人多?我们需要建立工具来总结、提取和提炼,而不使读者远离更详细的、潜在的源材料。
教育应用
对于任何一个最*上过大学的人来说,你都知道教科书价格真的失控了,自 20 世纪 70 年代以来上涨了 1000%以上。课本冗长,难懂,枯燥。艾伦·唐尼的教科书宣言是对这一趋势的精彩批判。唐尼告诫学生和教科书编写者要愿意接受这种情况。缺乏引人入胜和简明的教科书只会增加现代信息超载的负担。从大量当前不相关的数据中解析可操作数据的行为对各方来说都是浪费。
如果我们能*息这些惊涛骇浪,代之以现代工具来探索各种细节层次的信息,会怎么样?如果我们可以依靠算法生成的最新公关丑闻的年表会怎么样?仔细阅读国情咨文的要点摘要,并快速浏览一个生成的段落摘要,看看是什么让一篇研究论文在其领域的背景下变得新颖?具有这些功能的工具将有可能改变我们对教育的看法。教育可以真正成为一生的追求,而不仅仅是我们生命中前 25%的时间。
这些技术可以很容易地用于创建任何可以想象的主题的个性化课程。你可以快速生成你选择的任何主题的解释材料、教程、工作表、测验、总结、学习指南等等。你完全可以通过自学获得博士学位。鉴于大多数专业工作的极端社会性质和你自己所拥有的研究资金的严重缺乏,这样一个学位的价值是可疑的。
软件工程在专业教育计划中是一个特例,因为你需要跟上现代技术的发展。但我认为,如果这些类型的工具被创造出来并适当地商品化,这种职业再教育的状态应该而且将会成为标准。我们的教育系统本身需要从头开始重新设计,以应对这些变化。如何监控、验证和利用持续的、递增的研究来产生影响?
互联网为我们提供了几乎免费的获取信息的途径,但是要恰当地利用它仍然存在障碍。多分辨率自动文本摘要技术可以真正拆除沿着经济和政治轴形成的人为信息壁垒。
我说的是一个我们还没有找到通往它的道路的未来,但是我鼓励我的读者去思考有能力的、算法化的文本摘要对我们现代世界的深远的、积极的影响。
大女孩如何构建机器学习产品:由产品中的女性推动的演讲(上)
原文:https://towardsdatascience.com/how-the-big-girls-build-machine-learning-products-a-talk-powered-by-women-in-product-part-i-26c9a2f3e458?source=collection_archive---------12-----------------------
Amy, Sarah, Ronnie, Carla, Elsie, and Inga @ Squarespace Inc. NYC offices
当我在纽约有一个空闲的晚上时,我做了什么?我浏览了 Eventbritte,发现这个活动由 Squarespace Inc. 主办,由女性产品组织。我知道有关于机器学习的最佳实践的书籍和文章,但是当他们建立依赖于 ML 的产品时,看到不同公司的过程和思路真的很有趣。
你可以从图片中看到与会代表的公司,但以下是发言人:艾米·金(克拉里菲)、莎拉·卡坦扎罗( Canvas Ventures )、罗尼·法尔肯(谷歌)、卡拉·科瓦尔斯基( Capital One )、埃尔西·凯尼恩( naralogics )、因加·陈(Squarespace)。组织者提供了他们每个人的简介,你可以在这里找到他们。
Pretty large audience (many are at the food & drinks bar), tickets were sold out!
这个活动的议程很简单:产品中的女性的开场和欢迎,Inga 在 Squarespace 对机器学习和深度学习的介绍(她在她之前工作的公司叫做自动化实验室也谈到了 ML),以及最后的小组讨论。
我意识到这篇文章越来越长,所以这一部分将是关于 Squarespace 的,我将在另一篇文章中包括小组讨论的要点。
注意:我没有这些幻灯片,它们是对事件的记录,我决定截图来支持文字,使其更容易理解。
ML 和 DL 如何在 Squarespace 中使用
整个事件被记录下来,包括幻灯片,可以在页面底部找到。在这一部分,我想总结一下 Inga 演讲的要点。
对于那些不知道 Squarespace 的人来说:这是一个帮助你建立华丽网站的*台,包括内容管理系统、电子商务功能、博客等。就像 Wordpress 一样,但是更好的设计和 UX。看看一些用它建造的网站的实例。(☆▽☆)
什么是人工智能(AI)、机器学习(ML) &深度学习(DL)?
“我希望我的另一半像《发现周刊》一样理解我”——这是 Inga Chen 在解释概念时说过的一句话
- 人工智能:人工智能是任何能够执行脑力任务的计算机程序。即使现在人们会想到人形机器人(Westworld 和 stuff),但其中一个典型的例子是你在象棋比赛中与之对抗的机器人。
- 机器学习:使计算机能够自我学习的程序。在 Inga 的幻灯片上,ML 的表示显示了输入(数据)是如何输入到模型(ML 模型)中的,而这个模型将提供一个输出(F-1 分数,置信水*)。经典的例子是它的应用程序来分类垃圾邮件/非垃圾邮件。
- 深度学习:常见的误解说 DL > ML,其实 DL 是 ML 的子集。它是应用人工神经网络 (ANNs)来解决需要一层以上的问题。人工神经网络是模仿人脑学习方式的算法。一个经典的例子就是图像的分类:这个图像是狗吗?图像是复杂的数据结构,为了回答这个问题,我们需要将文件分解成例如像素的层,然后其他层计算出眼睛、耳朵、爪子等的形状。在每一层中,都有一个模型(有监督的、无监督的等等)。).这就是 DL 深的原因。
在 Inga 的幻灯片上,你可以将该图与 ML 的图进行比较,ML 的图中没有一个盒子,而是有多个盒子,代表模型的各个层,输入通过这些层直到产生结果。
Machine Learning Model — Inga’s Slides
Deep Learning Model — Inga’s Slides
我喜欢 Inga 在解释深度学习时提供的例子。她谈到了亚马逊 Echo 上安装的语音识别程序 Alexa 。它是用来做什么的?嗯,在家开灯/关灯。对于 Alexa 来说,要理解并执行一个看似简单的命令*“Alexa,开灯”*,至少有两个 DL 模型:一个用于将语音转换为文本,另一个用于将文本转换为任务。就像图像一样,声音也是复杂的数据结构。显然,Alexa Echo 至少安装了 6 个麦克风。ヽ( 〇 )ノ
为什么 ML & DL 对 Squarespace 很重要?
看了一些例子后,你可以想象他们的客户提供了多少内容:从文本到很多很多图片,甚至视频。Squarespace 之所以有一个(强大的)人工智能团队,是因为他们希望利用它为每个用户提供定制化的体验。面对如此庞大的数据量和复杂性,手动处理和得出结论是不可行的。
Squarespace 的 ML & DL 开发流程
如果你看着这个图表,并且是一个从业者,它可能看起来没什么特别的。尽管如此,我认为令人欣慰的是,我们在学校或学术界学到的东西并不都适用于这种情况,但现实世界中的公司实际上都在遵循类似的最佳实践。
Product Development Cycle Slide by Squarespace Inc.
Inga 确实强调了评估是否需要 ML 或解决问题/满足需求的最佳工具的必要性。这是学习阶段,问自己这样一个问题:你试图达到的目标是否符合 ML 问题。同样的问题可以用其他方法解决吗?如果是的话,这些方法在任何方面都比 ML 好吗?考虑到 ML,DL & AI 都是热门话题,到处都在用流行语,我觉得这些问题真的很重要。很高兴看到公司采用它们,但有时它被用在不该用的地方,想想这些项目的成本会有多高。
下一个关键点是数据收集和准备,这通常是最耗时的步骤,尤其是在开始阶段。其他公司也提到了拥有适当的数据管道以尽可能减少此阶段花费的时间是多么重要。
拥有一个好的数据管道不仅对你的产品的第一次迭代很重要,对实现一个有效的反馈循环也很重要。这就是最后一步收集更多的数据,重建和改善所指的。收集更多的数据并不意味着增加观察,也要给你的用户(可能是你最好的数据源)提供反馈的机会。
这是第一部分,一旦我有更多的时间,我会写第二部分。敬请关注❤
Slideshow with Voice of the Whole Event
大女孩如何构建机器学习产品(下)
原文:https://towardsdatascience.com/how-the-big-girls-build-machine-learning-products-part-ii-4ccb8ad6b6a4?source=collection_archive---------11-----------------------
你的公司或者你的团队是否在考虑利用机器学习来构建令人敬畏的产品?在第二部分*中,为了快速阅读,我在活动最后的小组讨论中总结了构建 ML 产品的最佳实践和技巧。
如果你不同意某些东西或者你想分享你的经验,请对这篇文章发表评论 o(>ω
*If you’re looking for part one, here’s the link: 大女孩如何构建机器学习产品:由产品中的女性驱动的演讲(第一部分)
你在应用 ML 时有什么问题、恐惧或挑战?
- 一位小组成员发现管理 ML 团队很有挑战性(如果您有类似的经历,请评论?).
- 数据管理和处理:如何更新你的模型,加班加点,建立一个管道移动得更快?(通常,数据管理和预处理需要数据科学家大约 80%的时间)。
- 应用程序方面,由于 ML 的存在,构建的应用程序为用户带来了真正的价值。
- 缺乏部署和维护 ML 模型和产品的基础设施。
所有这些炒作是怎么回事?如何将一个问题归类为适合机器学习?
简而言之,ML 并不是万能的银弹(闪亮的技术现象),有以下专家组提到的考虑因素。
首先从的关键问题开始:
- 你有数据吗?你获得它有多容易?它的容量、速度、多样性和准确性如何?如果没有数据,就不能用 ML。
- **能否成为你产品的竞争优势?**有市场需求吗?你是在用 AI 和 ML 解决一个用其他方法解决不了的问题吗?只有当它能提供很多时,才应该使用它。确保你处理的是正确的问题,要有背景。专注于你想要完成的事情
- 如果有,**你买得起吗?**由于服务器、GPU、维护、数据科学家、经验等原因,建立一个模型非常昂贵。
- **您的产品出错有多好?**你对假阳性和假阴性的接受程度或容忍度如何?考虑到 ML 模型不太稳定。因此,组织和清理数据是至关重要的任务。
如果以上都是肯定的,那么转到如何充分利用 ML 的技巧:你将需要反馈机制,这样你就可以随时纠正数据。有效地组织和清理数据将是关键,但在你的系统中整合反馈回路也同样重要。让你的模型不断发展变化是至关重要的。
分享构建 ML 产品的故事和经验
抱歉,只写了一个有趣的故事。一位小组成员分享了她的一个朋友制作的产品。这是一个会检查他的宝宝是否醒着的模型(宝宝醒着。・゚゚*(>д
Importance of users’ trust
When building ML products, it’s important to think of what’s the users’ perspective of the technology. You don’t want to create magic or creepy technology.
- 了解你的用户:小边缘情况,被冒犯的用户可能永远不会回来。您的系统必须准备好检测这种情况,并从中吸取教训。一个很好的例子是亚马逊,通过简单地改变措辞来解决这一风险:在他们建议的商品中使用“人们也购买… ”,而不是“我们也推荐… ”。降低用户对推荐系统失去信任的风险,因为当推荐系统出错时,用户会将其归咎于其他用户。
- 重新考虑你的设计:考虑那些可以把黑盒变成用户可以理解的有形概念的设计原则
- 创建界面,让人们觉得获得自己的定制体验是他们的责任。他们必须知道,他们需要参与进来,以获得定制的体验,他们对自己的体验负责。例如:“如果我有几周时间(Spotify weekly),而他们不在我的区域内……”该客户可能会失去对该功能的信任。
开发流程提示
- 获得管理层和高管的支持:当你正在构建的产品使用了 ML,并且它对它所创造的价值至关重要时,确保你获得了高管(层级组织)或领导的支持。这些项目是昂贵的,但是当上述问题得到回答时,在非 ML 专家之间传播理解是同样重要的。
- 数据策略&团队:经理或策略师可能会提供很好的输入来建立数据策略。
- 下面是 Clarifai 的 DS '部门的样子:数据策略团队处理处理,清理数据,抓取,清理数据;应用机器学习团队,全是数据科学家;和 ML 工程师一起工作,在技术栈中进行研究、扩展和计算新的算法。重要的是,applied ML 团队不仅提供训练模型所需的数据,还开发产品并将其交付给客户。该模型集成了来自客户的反馈系统。
未来:景观是如何变化的?你想怎么换?
- 罗尼:将会有更多的资金,更多现成的技术和强大的计算能力。在法律方面,政策和洗钱之间的动态关系,我们需要在监管和不降低进步能力之间找到良好的*衡。
- 埃尔希:我们将从这个过程中学习,ML 可能会失败很多次,但我们将在管理层中传播数据责任。
- 艾米 : " 机器人?"。进入的障碍变得越来越无摩擦,创建和构建、部署您的模型的摩擦越来越少。一切都将有一个 ML 组件。我们将了解如何解释数据,并为更多用户创造更多价值。
通过多样性减少偏见
讨论以一个关于偏见的关键观点结束,这是实习者的一个普遍问题/错误,几乎无法避免。然而,我们可以通过多样性来减少偏见:性别、种族、年龄等。偏见越少,你的产品越好。提到的有偏见模式的例子是“母乳喂养被贴上工作不安全的标签”。就像“潜意识偏见”存在于人的大脑中一样,当它发生在 ML 模型上时,具有可比性。
抱歉发了这么长的帖子。感谢你阅读❤
【当前】最佳问答模式是如何运作的?
原文:https://towardsdatascience.com/how-the-current-best-question-answering-model-works-8bbacf375e2a?source=collection_archive---------1-----------------------
https://pixabay.com
最*对深度学习如何解决问答问题产生了兴趣。
给定一篇文章和一个问题,任务是根据文章中的信息预测问题的答案。这被证明是一项相当复杂的任务,尤其是在处理大量文本的情况下。经过相当广泛的研究,我发现几个月前(2017 年 5 月),微软亚洲研究院的科学家发布了最新和最准确的模型,旨在解决这个问题。迄今为止,他们的模型在斯坦福问答数据集上保持着最高的结果——用于评估任何问答系统。
在这篇文章中,我将尝试一步一步地解释他们的模型,称为 R-NET 。
首先,让我们从实现的概述开始。它由 4 个阶段组成,每个阶段解决一个特定的问题:
- 分别为文章和问题建立表征。
- 将问题信息整合到文章中。
- 通过直接将其与自身进行匹配来获得该段落的最终表示。
- 预测答案的起止位置。
边注:上述步骤使用具有 GRU 细胞(门控循环单元)的循环神经网络。如果你不熟悉,我推荐看 我的解释 。
#1.为问题和文章建立表征
为了做到这一点,作者使用了一些基本的技术,我将在下面的步骤中解释。为了清楚起见,m 表示问题中的字数,n 表示文章中的字数。
- 对问题和段落分别执行单词级嵌入产生矩阵:
其中第一个是 Q 问题矩阵,第二个是 P 访问矩阵。
- 对问题和段落分别执行字符级嵌入会产生矩阵:
其中第一个是 Q 问题矩阵,第二个是 P 访问矩阵。作者声称字符级嵌入有助于词汇外标记。这里有一个很好的定义:
该模型(使用字符级嵌入)逐个读取字符,以创建给定句子/文本的嵌入。因此,我们的神经网络将试图学习由空格或其他标点符号分隔的特定字母序列组成的单词。— 人物级深度学习。
- 将单词和每个单词的字符嵌入连接到一个新的向量中,我们得到:
其中第一个是 Q 问题连接,第二个是 P 消息连接。
- 最后,作者使用两个具有 GRU 细胞的双向递归神经网络来获得最终结果:
BiRNN — bidirectional recurrent neural network
#2.把这个问题添加到文章中
使用上面的问题和段落表示,该模型将来自问题的信息合并到段落中。这产生了一个新的矢量:
先解释一下 k_t 是什么*。基本上,这个向量保存问题和当前段落单词的数据。其计算方法如下:*
- 使用不同的权重(标记为 W )我们计算:
(s_j)^t 表示来自矩阵 s^t 的单个向量)。向量从单个疑问词— (u_j)^Q 、当前段落词— (u_t)^P 和前一状态— (v_(t-1))^P. 中提取信息
在应用了 tanh 激活函数和附加权重向量 V 后,(s_j)^t 变成:
边注:VT 表示 v 的转置向量—如果 v =[1;2;3]的大小是 3x1,那么 VT = [1,2,3]的大小是 1x3。
- 然后模型计算矩阵 s^t.的 softmax 函数考虑单行,我们有:
- 将上述等式组合成:
产生整个问题的注意力集中向量l^tu^q.
- 最后,作者又增加了两个计算。他们计算矢量 g^t:
它使用激活函数 sigmoid ,一组独特的权重 W_g 和 (u_t)^P 和 l_t 的串联。
最后一个等式使用对 g_t 的逐元素乘法和对 (u_t)^P 和 l_t: 的相同串联来获得 k_t
本质上,这些最后的步骤是基于当前的段落单词和问题的注意力集中向量。关注它们的关系旨在模拟这样一个事实,即只有部分段落与问题回答中的问题相关。
#3.将这篇文章和它自己配对
作者已经注意到了如上所述的问题意识段落表征的问题。基本上,这个模型对上下文的了解非常有限。一个答案候选人经常没有意识到其周围窗口之外的段落中的重要信息。
由于文章上下文对预测答案至关重要,模型需要使用与第二步类似的等式,将有问题意识的文章与其自身进行匹配。
- 自匹配后当前段落单词的结果向量是:
如你所见,它的获得方式与 (v_t)^P )完全相同,唯一的区别在于 k_t 的计算。
我们不使用当前的文章单词和问题,而是取问题意识文章 v^P 和它的当前单词 (v_t)^P:
所有其他的等式都遵循第二个等式的相同模式,使用问题意识段落表征 v^P:
#4.预测答案
为了预测答案,作者使用所谓的指针神经网络 —从文章中输出答案的开始和结束单词的索引的递归神经网络。数学插图看起来像这样:
其中 h^P 是步骤#3 中自匹配产生的问题感知段落, (h_(t-1))^a 是指针 RNN 的前一状态, p^t 是函数argmax应用于当前 a^t 向量的结果。因为我们只需要 2 个索引,所以网络只由 2 个 GRU 单元构成,只产生 p 和 p (开始和结束索引)。
让我们看一下整个流程:
- 首先我们有:
本质上,上面的等式计算了面对 r^Q 的 RNN 的初始隐藏状态。这里我们使用问题表示 u^Q 和一个参数 (V_r)^Q )。
最终结果 r^Q 可以看做是 RNN 中的 (h_0)^a (隐藏状态)。
- 使用 (h_0)^a (= r^Q )和问题意识段落,我们计算答案起始词的索引如下:
- 然后我们产生第一个隐藏状态,它需要传递给 RNN 中的下一个 GRU 单元:
- 使用对 p 重复上述步骤(h_1)^a 隐藏状态给我们提供了答案结尾词的索引:
最后的想法
我希望 R-NET 模型的演示足够全面,以便您能够掌握基本原理并更好地理解该模型。在撰写本文时,这款车型因在斯坦福问答数据集上的最佳表现而在排行榜中排名第一。
我很高兴在评论区听到你的问题和想法。
谢谢你的阅读。如果你喜欢这篇文章,给它一些掌声👏。希望你有一个伟大的一天!
第一次世界大战中的法国军队如何教会你管理一个更好的分析团队
原文:https://towardsdatascience.com/how-the-french-army-of-world-war-1-can-teach-you-to-run-a-better-analytics-team-d71e64efa7cd?source=collection_archive---------12-----------------------
100 年前的这个月,WW1 结束了。一场长达四年的血腥战争改变了我们的生活方式。正如历史上许多伟大的斗争一样,创新往往会发展得非常快,WW1 也不例外。结果,许多新的想法被付诸实践,因为每个竞争者都试图超越对方。坦克就是从第一次世界大战中发展起来的这样一种发明。我们最常想到的是英国人和他们的坦克,或者是庞大的德国陆地战舰。然而,我们今天仍然可以把一些创新归功于法国人。正是这些创新可以为当今的分析、大数据和数据科学团队提供借鉴。
1915 年,法国人着手建造他们自己的坦克,因为他们认为这将是打破西线僵局的一个好方法。他们第一次制造坦克非常昂贵,第一个模型预计 100 辆坦克要花费 700 万法郎,这在当时是一大笔钱。第一批坦克必须争夺资源。法国工业生产其他武器已经达到极限,为了制造坦克,必须进口钢板。最终,一辆 60 马力的坦克诞生了,它可以在*坦的地面上行驶 7 公里,在崎岖的地面上行驶一半的距离。这种装甲的厚度仅够阻挡小型武器的火力,但不能被大炮击中。这些坦克也是死亡陷阱,因为它们不是为机组人员的安全而设计的,发动机放在前面,这是大多数撞击发生的地方。换句话说,这些坦克并不完美。有点像第一批大数据和数据科学团队。
那些早期的团队很有趣,我享受我拥有的时间,然而我们所创造的还有很多需要改进的地方。我们有粗略的想法和理想主义,但让数据科学和大数据作为业务单位为组织服务的能力仍然是一条出路。许多人认为这些新学科会取代其他一切,有时当我访问一家公司时,他们仍然会有这些想法。但我们知道这是不正确的,我们在这些新的分析领域的初步尝试需要改进。公司对结果感到失望;团队领导对缺乏资源感到沮丧,团队成员经常与真正的期望脱节。需要一些新的不同的东西。
1916 年春天,法国人意识到他们的第一批坦克需要改进,有人想出了一个好主意,让我们把它做得更大!设想新坦克有 9 名乘员,更大的炮,更多的炮!见鬼,甚至连火焰喷射器都被设计出来放在坦克上。它最终被称为圣肖蒙德坦克,如果你玩过战地 1,你可能会很熟悉它。它更大更重,但是它的履带和一年前制造的第一辆坦克一样大。众所周知,这意味着履带上的重量更大,这意味着它更容易陷入泥中。
随着分析的发展,在过去几年中,我们看到数据科学团队和大数据团队也出现了这种情况。他们把失败视为成长的一种方式。我们需要更多的人、更快的系统、更大的系统!我们需要一个高管席位。首席数据官或首席分析官的重要性越来越大。但失败仍然是常态,主要是因为就像 1916 年法国的新坦克一样,如何使分析工作的基础没有随着时代而改变。从 2016 年到现在,公司看到了一些小的成功,但没有什么真正大的规模。当然,这里或那里有一些小的成功,但是能够横向扩展并以创建快速扩展的方式使用数据仍然是许多人的梦想。法国人在 1916 年的内维尔战役中引进了坦克,并且看到了整体上的巨大失败。然而,他们看到个别坦克表现出色,并利用这些知识来改变他们的坦克战略和使用方法。坦克被用作冲击武器,与步兵一起碾压,帮助清除敌军。这不起作用,太多的坦克被摧毁,士兵被杀。
法国人从头开始,意识到坦克的主要杀手是火炮。所以这意味着摧毁火炮是首要任务。因为摧毁炮兵是首要任务,这意味着你需要知道他们在哪里。这意味着你需要以航空摄影的形式进行空中侦察。为了使空中摄影成为可能,你需要拥有当地的空中优势。一旦他们拥有了空中优势,他们就需要高度集中自己的火炮来压制敌人的火炮。一旦炮击发生,坦克需要知道他们在最好的地面上的路线,在前进中,用烟幕弹来帮助他们尽可能接*敌人的阵地,以帮助最大限度地减少炮兵干掉太多坦克。他们需要与步兵更好的沟通,这意味着与军队其他部门的新的沟通方法。最后,坦克将用于有限的交战和有限的目标。
当法国人使用他们新的交战方式时,他们非常成功地达到了他们的目标。在他们的第一次交战中,许多坦克坏了,这在当时是很常见的。但是坦克在突破防线或者转移步兵的注意力方面起到了至关重要的作用,使得步兵能够到达他们的目标。
像法国人一样,许多公司需要思考他们如何使用数据,并真正摆脱他们团队的孤立方法。团队通常被创建为公司中的一个新的筒仓,与公司中的其他人没有什么关系。法国人意识到这是一场灾难,他们改变了他们的方法,采取了更加综合的方法。大多数数据团队也需要这样做,并花时间与他们组织的各个接触点进行沟通。因为就像法国人 100 年前学到的那样,你可以拥有新的技术和伟大的技术,但如果你不能与你组织的其他人交流,这些技术就是一种浪费。
但是法国人并没有就此止步。他们有重型坦克,他们决定需要轻型坦克。有两个乘员的坦克,一个旋转炮塔,这在当时是新的。这种坦克也轻得多,只有 4 吨重,行驶速度是当时任何一种坦克的两倍。此外,这种坦克很容易生产。金融时报是大多数人所说的这些坦克。从 1918 年 6 月开始,它们很容易部署,法国生产了 2000 多辆这种坦克,比其他坦克加起来还多。事实上,英国《金融时报》通常被称为赢得战争的坦克。法国的联合部队理论并没有随着英国《金融时报》而改变,事实上,他们能够用这些坦克更快地占领更多的土地,比敌人可能希望恢复的速度更快,因为坦克的速度使得重新集结以进行可能的反击变得困难。直到今天,FT 的设计也经常被称为所有坦克的模板。两条轨道的基本设计,一个带枪的移动炮塔,100 年后本质上是一样的。
数据团队需要找到他们的 FT。现在,我们真的没有一个,因为大多数公司还没有就他们的联合力量战略进行对话,以创建 FT 场景,这将使他们有能力与竞争对手竞争。因此,数据科学和大数据仍然是阵地战式的努力。第一次世界大战 100 年后,我们可以从当时人们的经历中吸取教训,并将其应用于当前的形势。法国坦克使用的演变可以教会我们团队融合的重要性,以及为解决实际问题而创新的重要性,而不仅仅是为了创新本身。如果数据团队希望生存下去,他们今天需要学习的东西。因为堑壕战对战壕里的士兵或他们各自的国家从来都不是好事。
我要感谢 youtube 频道《伟大的战争》,这是我获得关于法国军队研究信息的地方。我强烈建议去看看他们的频道。
古老的排序算法如何帮助伟大的机器学习技术
原文:https://towardsdatascience.com/how-the-good-old-sorting-algorithm-helps-a-great-machine-learning-technique-9e744020254b?source=collection_archive---------5-----------------------
在本文中,我们展示了简单排序算法如何成为解决计算几何中一个重要问题的核心,以及它如何与广泛使用的机器学习技术相关联。
机器学习正迅速成为现代社会中最重要的计算技术之一。作为人工智能(AI)的一个分支,它正被应用于从自然语言翻译和处理(想想 Siri 或 Alexa)到医学、自动驾驶或商业战略发展的方方面面。一系列令人眼花缭乱的智能算法正在不断开发,以解决 ML 问题,从数据流中学习模式,并建立人工智能基础设施。
然而,有时后退一步,分析一些基本算法如何在这场革命中发挥作用,并欣赏它们的影响,感觉会很好。在本文中,我将举例说明这样一个重要的案例。
支持向量机
支持向量机或 SVM 简而言之,是过去几十年发展起来的最重要的机器学习技术之一。给定一组训练样本,每个样本被标记为属于两个类别中的一个或另一个,SVM 训练算法建立一个模型,将新样本分配给一个类别或另一个类别,使其成为非概率 二元 线性分类器。它广泛应用于工业系统、文本分类、模式识别、生物 ML 应用等。
下图说明了这个想法。主要目标是将二维*面中的点分为两类——红色或蓝色。这可以通过在两组点之间创建分类器边界(通过运行分类算法并从标记数据中学习)来完成。图中显示了一些可能的分类器。它们都将正确地对数据点进行分类,但是并非所有的数据点都与最接*边界的数据点集具有相同的“余量”(即距离)。可以看出,它们中只有一个最大化了蓝点和红点集合之间的这个“T4”裕度。该唯一分类器用实线表示,而其他分类器用虚线表示。这种间隔最大化的效用在于 两个类之间的距离越大,对于一个新点的分类的泛化误差就越低。
FIG 1: SVM and Maximum-margin classifier
SVM 算法的主要区别特征是 分类器不依赖于所有的数据点 (不像逻辑回归,其中每个数据点的特征将用于分类器边界函数的构建)。事实上, SVM 分类器依赖于数据点的一个非常小的子集,那些最靠*边界 的数据点以及它们在超*面中的位置会影响分类器边界线。由这些点形成的向量唯一地定义了分类器函数,并且它们'支持分类器,因此被命名为'支持向量机'。这个概念如下图所示。
阅读更多关于支持向量机的白痴指南。一个关于 SVM 的视频教程可以在这里找到。
SVM 工作原理的几何解释:凸包
SVM 算法背后的形式数学相当复杂,但通过考虑一种叫做凸包的特殊几何构造,可以直观地理解它。
什么是凸包 ?形式上,欧氏*面或欧氏空间中的点集 X 的凸包或凸包络或凸闭包是包含 X 的最小凸集。然而,使用橡皮筋类比最容易形象化。想象一根橡皮筋绕着一组钉子(我们的兴趣点)的圆周伸展。如果橡皮筋被释放,它会缠绕在挂钩上,形成一个紧密的边界来定义原来的设置。最终的形状是凸包,并且可以通过接触橡皮筋创建的边界的钉的子集来描述。这个想法如下所示。
现在,很容易想象 SVM 分类器只不过是一个线性分隔符,它将连接这些凸包的线正好在中点处一分为二。
因此,确定 SVM 分类器简化为寻找一组点的凸包的问题。
如何确定凸包?
图片(动画的)说一千个字!因此,让我展示用于确定一组点的凸包的算法。它叫做格雷厄姆扫描。该算法找到沿着其边界排序的凸包的所有顶点。它使用一个堆栈来有效地检测和移除边界中的凹陷。
FIG: Graham’s scan to find convex hull.
现在,问题是这种算法的效率如何,也就是说,格雷厄姆的扫描方法的时间复杂度是多少?
事实证明,Graham 的扫描 的时间复杂度取决于底层排序算法 ,它需要使用该算法来找到构成凸包的正确点集。但是排序是从什么开始的呢?
这种扫描技术的基本思想来自凸包的两个特性,
- 可以通过逆时针旋转穿过凸包
- 凸包的顶点相对于 y 坐标最低的点 p 以极角
递增的顺序出现在中。
首先,这些点存储在一个数组points
中。因此,算法从定位参考点开始。这是具有最低 y 坐标的点(如果出现*局,我们通过选择具有最低 y 坐标和最低 x 坐标的点来打破*局)。一旦我们定位了参考点,我们通过使它与数组中的第一个点交换位置,将该点移动到points
的开头。
FIG: A stack data structure
接下来, 我们根据剩余点相对于参考点 的极角对其进行排序。排序后,相对于参考点极角最小的点将位于数组的开头,极角最大的点将位于末尾。
正确排序这些点后,我们现在可以运行算法中的主循环。这个循环使用了第二个列表,当我们处理主数组中的点时,这个列表会增长和收缩。基本上,我们将逆时针旋转出现的点推到堆栈上,如果旋转变为顺时针则拒绝点(从堆栈中弹出)。第二个列表开始时是空的。在算法结束时,构成凸边界的点将出现在列表中。一个堆栈数据结构用于此目的。
伪代码
# *Three points are a counter-clockwise turn if ccw > 0, clockwise if*
# *ccw < 0, and colinear if ccw = 0 because ccw is a determinant that #gives twice the signed area of the triangle formed by p1, p2, and #p3.***function** ccw(p1, p2, p3):
**return** (p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x)**let** N **be** number of points
**let** points[N] **be** the array of points
**swap** points[0] with the point with the lowest y-coordinate***# This is the most time-consuming step*
sort** points by polar angle with points[0]**let** stack = NULL
**push** points[0] **to** stack
**push** points[1] **to** stack
**push** points[2] **to** stack
**for** i = 3 **to** N:
**while** **ccw**(next_to_top(stack), top(stack), points[i]) <= 0:
**pop** stack
**push** points[i] **to** stack
**end**
所以,格雷厄姆扫描的时间复杂度取决于排序算法的效率。可以使用任何通用排序技术,但是使用***【o(n^2】***和 O(n.log(n)) 算法之间有很大的区别(如下图所示)。
FIG: Animations of various sort algorithms
摘要
在本文中,我们展示了简单排序算法如何成为解决计算几何中一个重要问题的核心,以及它如何与广泛使用的机器学习技术相关联。尽管有许多基于离散优化的算法来解决 SVM 问题,但这种方法展示了在核心处使用基本有效的算法来构建人工智能复杂学习模型的重要性**。**
如果您有任何问题或想法要分享,请联系作者在tirthajyoti【AT】Gmail . com。此外,您可以查看作者的 GitHub 资源库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学习资源。如果你像我一样对机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
关键词:#机器学习,#支持向量机,#算法,#人工智能,#计算几何
如何使用 Python API 访问 Google 工作表数据并转换成 Pandas dataframe
原文:https://towardsdatascience.com/how-to-access-google-sheet-data-using-the-python-api-and-convert-to-pandas-dataframe-5ec020564f0e?source=collection_archive---------3-----------------------
对于我从事的许多数据科学/可视化项目来说,建立一个 SQL 数据库(或类似的东西)是多余的。另一方面,使用本地 Excel 文件会增加共享和复制的难度。Google Sheets 通常是一个很好的中间地带,它提供了一个易于使用的协作*台,有一个熟悉的类似 Excel 的界面。
使用 OAuth 和 Google Python API 访问 Google 工作表数据是一个简单的过程,这要感谢(通常)优秀的 Google 文档。首先,我们需要在 Google Drive 帐户上设置 OAuth 凭证,以便访问工作表。
接下来,我们需要为 Python 安装 Google API 客户端库。我们可以在(理想情况下,在激活的 Python 虚拟环境中)使用 pip 来实现这一点。
显然,在关于访问 Google 工作表数据的教程中,您将需要一个工作表来使用——我将使用我的“火山酒”工作表(基于史密森尼博物馆提供的令人惊叹的火山活动数据)。在接下来的步骤中,您将需要工作表 ID(可以从 URL 获得),然后是工作表的名称。
Get the spreadsheet ID from the Google Docs URL
Get the Google Sheet name of interest
现在,创建一个新的 Python 脚本来检索数据(确保‘client _ secret . JSON’文件保存在与脚本相同的工作目录中,或者提供一个显式路径)。用电子表格的相关值更新下面代码中的电子表格 ID 和工作表名称。
Final Python code for accessing Google sheet data and converting to Pandas dataframe
运行该脚本,您应该得到作为 dataframe 返回的工作表数据——请继续关注即将推出的一组教程,这些教程将使用这些火山酒数据来完成 Plotly Dash web 应用程序的创建和部署!
Final Pandas dataframe returned from Google Sheet
如何用机器学习赢得陌生来电
原文:https://towardsdatascience.com/how-to-ace-cold-calling-with-machine-learning-8409737cc62d?source=collection_archive---------11-----------------------
打还是不打?
陌生来电:“你好卢克,今天过得怎么样?我注意到您正在办理汽车保险续保,我想知道您是否有几分钟时间听听我为奖励您的忠诚而向您提供的这个令人惊叹的优惠?”
如果你是卢克,你会怎么做?
这实际上很难讲,这就是为什么冷电话的成功率极低,需要成千上万次电话才能带来任何价值。由于所涉及的随机性,它们对于所涉及的任何一方来说都不是真正令人愉快的。然而,有了机器学习和足够的数据,就有可能了解成功电话背后的因素,然后可以用来更好地确定潜在客户并定制电话内容。
在本文中,我们将使用自动化数据科学团队 AuDaS 建立一个机器学习模型,用于预测汽车保险电话推销的成功。数据由慕尼黑技术大学提供,由 Kaggle 托管。
数据探索
该数据集是从美国的一家银行收集的,该银行也提供汽车保险,并包含其客户的信息。因此,我们的目标是建立一个能够预测客户是否会购买汽车保险的模型。下表提供了此信息的快速概述:
为了理解推动转化的特征,我们可以试着想象一下陌生电话的持续时间如何影响结果。首先,我们需要通过添加 datediff 操作,通过 AuDaS 的数据准备页面来创建该特性。
Data Preparation in AuDaS
然后,我们可以访问直方图视图来了解可能的关系。
Histogram view in AuDaS
令人惊讶的是,虽然通话时长确实增加了转化的几率(CarInsurance = 1),但似乎并没有明确的关系。打电话的时间似乎也不会影响结果。
Distribution of successful conversions across all the features
总的来说,我们的数据集中似乎确实存在模式,这就是为什么我们可以希望 AuDaS 将找到一个性能良好的机器学习模型!
自动化建模
我们的目标是建立一个分类管道来预测客户是否会购买汽车保险。但是,我们需要能够在生产中使用这种模式,这就是为什么我们将排除通话持续时间和通话结束时间戳,因为这是我们在通话前无法预料的信息!
对于模型训练,AuDaS 将执行 10 重交叉验证,并将保留原始数据的 10%*衡样本用于最终验证。AuDaS 还将使用 OPTaaS 、 Mind Foundry 的专有贝叶斯优化器来有效地导航可能的数据科学管道空间。
AuDaS 提供了最佳数据科学管道(模型、参数值等)的完全透明性以及得分指标。
Score metrics of the best found model
一旦运行完成,我们就可以查看模型在 10%保持率上的性能,并且我们放心地看到分类准确性相当好(72.4%)并且模型健康状况良好!
AuDaS Model Health Diagnostic
解释模型
我们的模型的特征相关性表明,客户银行账户的年*均余额似乎对他们是否购买汽车保险有最大的影响,其次是他们的年龄和电话推销的时间。
AuDaS feature relevance
换句话说,如果卢克 40 岁,账户上有很高的余额,他很有可能接受陌生来电者的提议!
然后,这个模型可以由 AuDaS 通过 RESTful API 自动投入生产。
这意味着,陌生来电者可以使用 AuDaS 训练的机器学习模型来优先考虑他们应该致电的客户,这将帮助他们提高营销活动的成功。不幸的是,这个数据集没有提供足够的见解来定制这些电话的内容,但我们可以想象,分析抄本可能会让我们确定一些有趣的建议!
AuDaS 完成这项任务的完整视频可以在下面查看。如果你想尝试澳币,请不要犹豫,通过电子邮件或 LinkedIn 联系我们。
奥达斯
AuDaS 是由 Mind Foundry 开发的自动化数据科学*台,为构建端到端的机器学习解决方案(分类、回归、聚类和 soon 时间序列)提供了一个强大的框架。该框架有助于识别数据泄漏并采取行动,以免为时过晚。你可以在这里和这里阅读一些其他的实际用例。
注册尝试 AuDaS:
更新:我开了一家科技公司。你可以在这里找到更多
团队和资源
Mind Foundry 是牛津大学的一个分支机构,由斯蒂芬·罗伯茨(Stephen Roberts)和迈克尔·奥斯本(Michael Osborne)教授创建,他们在数据分析领域已经工作了 35 年。Mind Foundry 团队由 30 多名世界级的机器学习研究人员和精英软件工程师组成,其中许多人曾是牛津大学的博士后。此外,Mind Foundry 通过其分拆地位,拥有超过 30 名牛津大学机器学习博士的特权。Mind Foundry 是牛津大学的投资组合公司,其投资者包括牛津科学创新、牛津技术与创新基金、牛津大学创新基金和 Parkwalk Advisors 。
如何赢得数据科学面试:R & Python
原文:https://towardsdatascience.com/how-to-ace-data-science-interviews-r-python-3a49982000de?source=collection_archive---------2-----------------------
这是正在进行的数据科学职位面试系列的一部分。你可以看看第一部分,这里涵盖了 SQL、和第二部分,这里涵盖了统计、*。***
数据科学家的日常工作很大一部分涉及在交互式编程环境中操纵、分析和可视化数据。在过去的几年中,两种语言已经成为这些任务的标准选择: R 和 Python 。每个人都有自己的优点和缺点,最终你可能会从了解这两者中受益,但对于面试来说,最好的策略是选择一个,并真正学好它。无论你选择哪种语言,我都会帮你搞定:在这篇文章中,我将介绍每种语言的基础知识,这样你就可以放心地参加面试,准备好白板演示了。
选择一种语言
正如我上面提到的,我能给你的最好的建议是不要因为试图学习所有的东西而分散你的精力。我参加的每一次数据科学面试,无论是作为面试官还是被面试者,都允许应聘者用两种语言中的任何一种来解决问题。所以最终学习任何一种都是完全没问题的。以下是如何做出选择的一些通用指南。
Python 是一种多用途、全功能的编程语言(从技术上来说,R 也是,不过我们一会儿就会谈到这一点)。它的设计目的是实现与 C 和 Java 等其他编程语言相同的功能。但是与 C 不同,Python 有很多现代的便利,比如自动内存管理和动态类型化 T21。在我看来,Python 在数据科学方面的优势在于它能够作为生产系统的真正后端语言,这意味着你作为数据科学家所做的任何建模都可以在一个真实的网站或软件产品上轻松实现。换句话说,如果你的主要兴趣是编写或原型化生产代码,我会选择 Python。
另一方面,r 感觉更像一种分析语言。虽然 R 支持所有标准的 CS 数据结构和技术,如数组和 for 循环,但当您处理矩形数据集时,就像您在典型的电子表格程序中看到的那样,它确实表现出色。与电子表格不同的是,你仍然可以利用计算机科学的概念,比如迭代和抽象(下面将详细介绍),这使得它比 Excel 等工具强大几个数量级。此外,R 是学术界定量研究人员的事实上的语言,这意味着最前沿的统计技术通常在它们进入任何其他地方(包括 Python)之前很久就以 R 包的形式提供了。因此,如果您的主要工作流涉及进行离线分析和数据可视化,尤其是如果您想要访问最先进的统计软件包,R 就是您想要的地方。
但是,同样,你不能真的出错——两者都非常有用,而且有可能你可以让任何一种语言完成你试图完成的任何数据科学任务。
选择一个环境
一旦你选择了一种语言,帮你自己一个忙,熟悉这种语言的最佳交互环境。在组织和保存代码、可视化数据以及管理包方面,这将使您的生活变得更加轻松。
在 R 你想去下载免费版本的 RStudio。与使用命令行或其他 IDE 相比,使用 RStudio 进行数据分析要容易得多,这一点我实在说不出什么好的。它管理软件包,提供对帮助文件的访问,显示可视化,并为您提供一个漂亮的、可定制的文本编辑器以及您的控制台。整个环境被组织成一个四窗格的格式,因此您可以一次查看所有内容。
对于 Python,请前往 Jupyter ,用他们的笔记本进行设置。这是一个与 RStudio 非常不同的环境,但同样有用。Jupyter 没有提供本地 IDE,而是提供了一个基于浏览器的笔记本,可以让你将代码分成可执行的块,这样你就可以一次运行一段代码并进行分析。输出内联显示在生成它的代码的正下方,因此很清楚哪个输出来自哪个分析。此外,由于 Jupyter 笔记本是基于浏览器的,因此很容易与他人分享,使您的所有工作更具可重复性。
编程基础
无论你选择哪种语言,你都需要了解编程的基础——数据类型和结构、迭代和抽象。有可能,但不太可能,你会直接得到关于这些概念的问题,因为通常这种类型的东西是留给软件工程面试的。但是,您肯定需要熟悉这些概念,以解决您在典型的数据科学面试中可能会遇到的任何白板或带回家的挑战。
数据类型 只是描述被存储信息类型的一种方式。在 Python 中,选项是数字,可以是整数、长整数或浮点数;一个布尔值,一个二进制的真或假;和一个字符串,它是字符的组合。在 R 中,所有这些相同的类型都存在于添加了因子的情况下:一个有序的变量,其级别由不同的字符串表示。
就不同的数据类型如何存储和编码而言,这个话题很有深度,但一般来说,面试时你不需要知道这些东西。请注意,任何给定的数据单元都需要属于这些类型之一,这些类型将决定您能够对数据执行什么操作。例如,你可以将两个数值变量相乘,但是当然你不能对两个字符串做同样的事情。
****数据结构是将每个原子数据块(如数字或字符串)组合成一个对象的方法。Python 有列表(在其他语言中通常称为数组)和元组,这两者都是数据的有序集合。它还有一个称为集合的东西,这是一个没有重复的无序变量集合。最后,Python 有字典,它代表了键值对的有序集合。r 有向量(类似于 Python 列表,除了所有元素需要共享一个类型)、列表、矩阵和数据框。
****迭代是计算机科学中的一个重要概念,它与数据结构紧密相连——本质上是对数据结构中的每一项执行操作的一种方式。这里的两大类别是向量化操作和循环。矢量化函数只是将单个函数应用于数据结构的每个元素并返回一个元素的一种方式。
例如,您可以获取一个包含五个不同数字的列表或向量,并返回一个包含每个数字的*方根的新向量。另一方面,循环允许您编写代码块,为给定结构中的每一项执行该代码块。这通常比较慢,但是稍微灵活一些,因为您可以执行任意代码,输出可以是任何内容。
在 R 和 Python 中,循环以几乎相同的形式存在。另一方面,矢量化函数在两种语言中都有多种形式,并且差别很大。在 R 中,有整个矢量化函数家族apply
,你可以在这里读到关于的内容。在 Python 中,Numpy 包中有列表理解和vectorize
以及其他选项。这可能看起来很多,但是一旦你学会了这个概念,你会发现所有这些不同的选项只是应用同一个基本概念的不同方式:取一个数据结构,用它的每个元素做一些事情。
抽象,大部分是以函数的形式,是一种编写代码块的方法,通过提供不同的输入可以重用。例如,您可以编写一个函数,它接受一个数字输入,并将其自身相乘以获得*方值。然后,您可以向您的函数传递任何数字以获得*方输出——理论上,这样做比每次需要手动*方数字更简洁。虽然这个示例可能不会节省太多时间或代码,但是函数可能会变得更加复杂,此时为重复任务编写函数可以使代码更加易读和简洁。Python 和 R 都允许用户定义函数,只是语法略有不同。
如果这一节感觉有很多新信息,我建议从基本的 R 或 Python 教程开始。 DataCamp 有一个很好的 R 用的,CodeAcademy 有一个很好的 Python 用的。
数据操作
数据操作代表了典型面试问题的一大类。和 SQL 一样,一个标准的面试官会给你提供一个样本数据集,要求你输出一个具体的结果。
对于这种类型的面试来说,重要的是你要有扎实的数据操作 R 或 Python 包的基础,因为试图解决这些问题是困难和低效的。
在 Python 中,这意味着了解 Pandas ,这是一个包,它提供了一个完整的框架来操作数据框,即具有行和列的矩形数据集。Pandas 拥有你操作和重构数据所需的所有操作符,以及过滤、聚集、连接等方法。
虽然 R 本身支持矩阵和数据框形式的矩形数据集,但是学习 dplyr 或 data.table 仍然会让您的生活更加轻松。这些包中的每一个都为操作数据框提供了一个比 base R 更好的界面:dplyr 更直观,可读性更好,而 data.table 更快,语法更简洁。
一旦你掌握了其中的一个软件包,用白板演示这类面试问题就非常类似于准备 SQL 面试,就像我在我之前的帖子中描述的那样。所有相同的概念都适用:组合、过滤、聚合和连接。和 SQL 一样,在你写的时候,通过讲述你的代码来帮助你的面试官,这样他们知道你在想什么,并且在你没有得到最终答案的情况下,他们可以给你部分的信任。
统计数字
统计学是另一类你可能会被要求在白板上讨论的问题。有点讽刺的是,这实际上是最容易的部分,因为这些语言中复杂的统计函数通常被抽象成一个易于使用的单行函数。
base R 中包含了许多基本的统计函数。例如,一个简单的线性回归,如果您从头开始编写,可能需要花费几个小时,但只需:
**model <- lm(y ~ x1 + x2, data = df)**
在 Python 中,你至少需要 Numpy 和 Scipy 包来确保你拥有基本的统计函数,但是像 R 一样,一旦安装了这些包,你就可以开始了。
当然,您仍然需要理解底层的统计数据,以便很好地利用这些强大的工具。如果您需要加快速度,我建议您在这里查看我的文章,并查看您最终使用的软件包的文档。通常,这些文档还会链接到深入研究特定技术的原始学术论文,如果你想要更深入的理解,这会很有帮助。
形象化
除了白板问题之外,许多数据科学面试都会有一个带回家的部分,要求你获取一个样本数据集,分析它并得出一些结论。通常你会发回你的代码,一些说明性的文本和可视化。为了成功地通过这一关,上面讨论的数据操作和统计是至关重要的,但是我们还没有谈到可视化。
对于每一个 R 和 Python 来说,可视化你的数据实际上只有一个选择:在 Python 中你想学习 matplotlib ,在 R 中你想学习 ggplot2 。这两个库都为创建好看的数据可视化提供了灵活的接口,远远优于这两种语言的基本功能。
不幸的是,我发现这两个可视化软件包的语法都有点麻烦和不直观,特别是对新程序员来说,但是一些实践应该会让你达到你需要的地方。我会避免从堆栈溢出或其他地方复制和粘贴语法的诱惑,因为这只会推迟学习语法如何工作的底层结构的必要性。当你掌握了其中的一个技巧后,你理解了其中的具体细节,这将使你更快地生成可视化效果,而不必求助于谷歌。
带回家作业中可视化的一些小技巧:给你的图表加标题,给你的坐标轴加零和标签,包括误差线(如果适用的话),选择一些颜色并坚持使用它们。例如,如果你在一个图表中把 iOS 数据点做成红色,把 Android 数据点做成蓝色,那么在所有后续的图表中做同样的事情。另外,保持可视化简单:通常你只需要条形图、折线图和散点图。
包扎
像统计学一样,你可以真正深入到编程概念,并开始感到不知所措。但是实际上,一旦你了解了你所喜欢的编程语言的基础,你就可以轻松地使用一些关键工具了:数据操作、统计和可视化。关注这三个方面,你就能为下一个面试官抛给你的任何问题做好准备。
我是一名数据科学家和研究人员,在科技行业工作,并在 Medium 上撰写相关文章。也可以关注我的 推特 。如果您喜欢这篇文章,请点击下面的关注按钮,了解我的数据科学文章。
如何赢得数据科学面试:SQL
原文:https://towardsdatascience.com/how-to-ace-data-science-interviews-sql-b71de212e433?source=collection_archive---------0-----------------------
这是正在进行的数据科学职位面试系列的一部分。你可以看看下一部分,涵盖统计, 这里 ,还有第三部分关于 R 和 Python 这里 ..
数据科学面试可能很难驾驭。事实上,这是一个多学科的领域,这意味着你需要准备的大量材料会让你不知所措。
但我是来帮忙的。**我已经将您需要了解的内容分成了四个方面,并将在本系列的每一部分中涵盖一个方面:SQL、统计、脚本和产品。**每篇文章将涵盖学习基础知识的资源、重要技术领域的概述和示例,以及我在该领域面试的一般方法的一些笔记。
如果这是你第一次参加数据科学职位的面试,阅读这一系列文章会让你对该期待什么以及如何准备有一个明确的想法。但是,即使你以前做过这些,我希望这些文章将有助于你集中精力准备最有可能被测试的技能。
SQL 基础知识
我参加的每一次数据科学面试都以某种方式涉及到 SQL。我几乎可以保证,在你找工作的过程中,你将不得不写一些 SQL。尽管数据科学家喜欢假装我们已经从列式数据库发展到 Hadoop 等分布式系统,但事实是大多数现代数据存储仍然依赖(或至少允许)SQL 语法来检索数据。
SQL 的基础很简单,但是在数据科学面试中被问到的 SQL 问题会变得非常复杂。我猜大多数阅读这篇文章的人都有过使用这种语言的经验,但是如果你在阅读 Codecademy 的简介之前从未接触过 SQL。
本文的其余部分假设你对以下内容了如指掌:
SELECT
FROM
JOIN
WHERE
(AND)
GROUP BY
ORDER BY
LIMIT
一个SELECT...FROM
语句将从指定的表中返回一组行和列,这些行和列的细节由您在剩余的关键字后添加的内容决定。例如,要按用户名的字母顺序统计今天的网页浏览量,您可以编写如下代码:
SELECT username, count(1) as number_of_views
FROM pageviews
WHERE day = '2017-09-08'
GROUP BY username
ORDER BY username;
明白了吗?太好了,让我们开始有趣的东西。
子查询和公用表表达式
你现在知道如何检索一组行和列,这可能会让你通过面试官的第一个问题。但是更高级的问题将需要子查询或公共表表达式 (CTEs)。先说这些是什么,怎么用。
**cte 和子查询允许您获取数据的子集,并用一个名称存储该数据,然后您可以从中进行选择并对其执行更多操作。**这两种方法的功能几乎相同,所以这里我只关注 cte,我发现它的语法更可读。
假设某个用户要求您计算事务之间的*均时间。您有一个名为transactions
的表,其中包含用户名和交易时间。要解决这个问题,您需要一行中每个事务的时间以及该用户的下一个事务的时间。单个查询并不能让您一路到达目的地:您需要提取一个用户的事务,将其存储在一个 CTE 中,然后将后来的事务加入其中,这样您就可以计算两者之间的时间。这可能是这样的:
-- First, find all of user_a's transactions today with user_a_trans as (
SELECT username, time
FROM transactions
WHERE day = '2017-09-08'
AND username = 'user_a'),-- Join each transaction to all transactions occurring after itjoined_trans as (
SELECT username, time, future_times
FROM user_a_trans a
INNER JOIN user_a_trans b
ON b.time > a.time),-- Find the immediate next transaction using MIN()next_trans as (
SELECT username, time, MIN(future_times) as next_time
FROM joined_trans
GROUP BY username, time)-- Average difference of the time and the next transaction's timeSELECT AVG(next_time - time) as avg_time_to_next_transaction
from next_trans;
如果您不太了解这个查询如何工作的所有细节,这完全没关系——一些练习会使它变得容易。**重要的一点是,更复杂的问题需要分解成小块,用一系列 cte 来解决。**这导致…
筛选、聚合、连接
当你遇到一个像上面这样的难题时,花一分钟时间问问自己,让你用一句SELECT
话来回答你的问题,理想的表格应该是什么样的。在上面的例子中,理想的表是这样一个表,它包括每个事务的一条记录,以及给出下一个事务时间的一列。
一旦你知道你的最终表格应该是什么样的,你就可以逆向工作,一步一步地确定如何使用一系列 cte 将你的原始表格转换成你的面试官要求的最终输出。
通常,您希望对 cte 字符串执行以下步骤:过滤、聚集、连接。过滤使用WHERE
,聚合使用GROUP BY
,连接使用JOIN
。冲洗并重复。
通过在加入之前过滤和聚合数据,您可以编写最高效的 SQL。连接的处理成本很高,因此您希望在将两个表连接在一起之前尽可能减少行数。有时首先聚合是不可能的,但是通常您可以用至少一两个WHERE
子句来限制要连接的表的大小。
需要注意的是,如果在同一个 CTE 中有一个JOIN
和一个WHERE
子句,SQL 首先处理JOIN
。换句话说,以下是非常低效的,因为您的整个表将被连接在一起,然后才被过滤为 2017 年 9 月 1 日之后的数据:
SELECT *
FROM table_a a
INNER JOIN table_b b
ON a.username = b.username
WHERE a.day >= '2017-09-01'
正确的表达方式是在连接之前使用 cte 过滤*,就像这样:*
with a as (
SELECT *
FROM table_a
WHERE day >= '2017-09-01')b as (
SELECT *
FROM table_b
WHERE day >= '2017-09-01')SELECT *
FROM a
INNER JOIN b
ON a.username=b.username;
同样,这里效率的提高来自于这样一个事实,即只有在过滤到尽可能少的行数之后才执行连接。
窗口功能
您可能只需要上述的过滤、聚合、连接过程就能解决大多数问题。不过偶尔,您会在 SQL 中遇到一个需要窗口函数的棘手问题。像一个GROUP BY
子句一样,窗口函数将你的表分成几个块,并分别对每个块进行操作。但与GROUP BY
不同的是,行并没有合并。举个例子是理解这一点最简单的方法。
假设您有一个包含一些行项目的表,这些行项目报告收入及其来自的美国州。你的任务是确定每个行项目的收入占该州总收入的百分比。
这里的技巧是要认识到,您需要将单个值(特定行项目的收入)与聚合值(特定州的所有行项目收入的总和)进行比较。任何时候你需要做这样的事情,窗口函数是一个很好的选择。该查询可能是这样的:
with state_totals as (
SELECT state, revenue,
SUM(revenue) OVER (PARTITION BY state) as state_revenue
FROM state_line_items)SELECT state,
revenue/state_revenue as percent_of_state_revenue
FROM state_totals;
窗口功能由OVER
子句指定。通过对按州划分的收入求和,您可以获得与每个单独行项目相关联的每个州的合计值。这使得得到你关心的百分比贡献数字成为一个简单的除法问题。
窗口函数适用于大多数聚合,如SUM
、COUNT
或AVG
,但也有一些特殊的关键字仅用作窗口函数。一些很好的例子是RANK
、FIRST_VALUE
和LAG
。你可以在 Postgresql 文档中阅读更多的窗口函数以及它们是如何工作的。我上面提到的六个函数可能就是你成功完成一次典型的数据科学 SQL 面试所需要的全部。
Union 和 Case 语句
为了充实您的 SQL 库,您只需要一些工具。第一个很容易理解:工会。
联合只是联接的垂直版本:联接使用一个联接键水*地组合表或 cte,而联合只是将表堆叠起来,形成一个包含两个原始表中所有行的表。这样做的要求是被联合的两个表具有完全相同的列——否则就没有办法在逻辑上组合它们。
union 可能有用的一个例子是,当您有两种类型的事务的不同表,但希望用一个查询告诉您每种类型的事务有多少个时。
with sales as (
SELECT 'sale' as type
FROM sale_transactions
WHERE day >= '2017-09-01'),buys as (
SELECT 'buy' as type
FROM buy_transactions
WHERE day >= '2017-09-01'),unioned as (
SELECT type
FROM buys
UNION ALL
SELECT type
FROM sales) SELECT type, count(1) as num_transactions
FROM unioned
GROUP BY type;
通过从两个表中各选择一个常量type
字段(在本例中只是‘sale’或‘buy’),然后将它们合并,最终得到一个大表,可以在单个查询中对其进行分组和计数。
当您希望两个表被构造成一个组合表时,联合就是答案。
Case 语句是另一个相当简单的概念:它们与 R 和 Excel 等环境中的ifelse()
函数完全相同。它们对于从一组预定义值映射到另一组值很有用。
例如,您可能希望将一周中的某一天列转换为表示该天是否为周末的变量。
SELECT
CASE WHEN day_of_week in ('Sat', 'Sun')
then 'Weekend' else 'Weekday' end as day_type
FROM table_a;
类似地,您可以将一个字符串列(如星期几)转换为一个二进制变量,并对其求和以计算表中周末的天数。
SELECT
SUM(
CASE WHEN day_of_week in ('Sat', 'Sun')
THEN 1 ELSE 0 END) as num_weekend_days
FROM table_a;
Case 语句非常灵活——您可以将一串WHEN
串在一起,将任何值映射到任何其他值,然后使用一个ELSE
来捕捉其余的值。
包扎
现在,您已经具备了成功通过数据科学面试的 SQL 部分所需的所有要素。当然,实践是这里的关键。试着给自己设置几个问题,用我上面描述的工具解决它们。更好的办法是,找一块白板,在上面练习,这样你在面试中会更加自如。如果你陷入困境,谷歌是你的朋友。Stack Overflow 和类似的网站有如何解决任何特定 SQL 问题的详细指导,谷歌通常很擅长从他们那里找到你需要的东西。
我将留给你一些关于面试本身的建议。
**将每个问题分解成尽可能小的部分。**这是清楚地思考 SQL 问题的最佳方式,并且允许您将每个步骤映射到具体的 SQL 命令。
大声说出你的过程。就像在学校一样,你会因为展示自己的作品而获得荣誉。如果你只是开始在白板上写东西,而不让你的面试官知道你在做什么,他们将很难评估你的技能,尤其是如果你没有完成最后的回答。
寻求帮助。信不信由你,大多数面试官都希望你成功,并乐意提供一些帮助,只要你能准确说出你有困难的地方。换句话说,可以问一些问题,比如将整数转换成浮点数的正确语法是什么,但是要避免问一些模糊的问题,这些问题可能表明你不知道如何解决你试图解决的问题。
如果您对数据科学面试流程有任何疑问,可以在 Linkedin 或 Twitter 找到我。并在接下来的几周中寻找本系列的下一部分,包括统计数据。