TowardsDataScience 博客中文翻译 2016~2018(八十六)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

用于分类和回归的决策树和随机森林第二部分

原文:https://towardsdatascience.com/decision-trees-and-random-forests-for-classification-and-regression-pt-2-2b1fcd03e342?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Forest from the trees, mountains from the dust.

亮点:

在本文中,我们将了解以下内容:

  • 用于鲁棒学习的自举聚合
  • 变量选择的随机森林
  • 随机森林用于快速和稳健的回归、分类和特征选择分析

点击这里链接到第一部分。

链接到 Neptune.ai 关于随机森林算法在哪里会失败的文章:https://Neptune . ai/blog/Random-Forest-regression-when-do-it-fail-and-why

链接到我的其他文章:

  1. tensor flow 中的自定义损失函数
  2. Softmax 分类
  3. 气候分析
  4. 曲棍球骚乱和极端值

简介:

在我的上一篇文章中,我们讨论了决策树以及它们如何用于分类和回归。在这篇文章中,我们将继续我们停止的地方,并介绍集合决策树模型或所谓的随机森林。我们将看到决策树的优势与引导聚合的结合如何使随机森林成为非常健壮而简单的学习模型,与监督学习问题的单一决策树相比,不容易过度拟合。为了感受随机森林的威力,下面我们用它们从公开的飞行路线数据中识别美国政府驾驶的间谍飞机。

引导聚合:

Bootstrap Aggregation 或 bagging 是一种强大的技术,可以减少模型方差(过拟合)并改善有限样本(即少量观察值)或不稳定数据集的学习结果。Bagging 的工作原理是获取原始数据集并创建 M 个子集,每个子集有 n 个样本。从原始数据集中用替换对 n 个个体样本进行均匀采样。下图说明了这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Subsetting for bootstrap aggregation.

在上图中,保留了对应于每个数据点的标签。换句话说,每个数据元组*(xy)被采样和子集化,其中每个***【xᵢ是输入的向量, Yᵢ 是向量理论上,随着 bootstrap 样本数 M 接近无穷大,bagging 被证明收敛于某个非 bagged 函数估计量的均值,该估计量利用了来自原始数据集的所有可能样本(直观上,这是有意义的)。在随机梯度学习的情况下,例如在神经网络或逻辑回归中,以随机顺序从多个(重复的)数据样本中学习往往会提高学习性能,因为梯度估计往往更多地被“推来推去”,希望克服局部极值。同样,在 Bühlmann 的文章中显示的一个有趣的结果表明,bagging 倾向于 偏差添加到 bagged 估计量中,以减少方差为代价。在大多数实际应用中,与方差的减少相比,这种偏差的增加是很小的。一般来说,偏差-方差权衡是统计学习的一个非常重要的方面,在挑选监督学习模型时,这是一个熟练的数据魔术师应该很清楚的事情。

接下来,为每个 M 引导样本创建 k 个个体学习模型(称为集合)。然后,以某种方式,如投票或简单平均法,对每个单独学习模型的输出进行汇总或平均。下图对此进行了说明。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bootstrapping and learning ensembles.

一般来说,使用集成模型打包是一种稳健的方法,通过利用引导样本和聚合学习集成的输出(均值、中值、其他更复杂的方法)来减少学习模型的方差和过度拟合。Bagging 和集成是通用的,可以应用于任何监督模型,从神经网络到 SVM 到决策树,以及非监督聚类模型(将在另一篇文章中讨论)。在实践中, M 被选择为至少 50,而 n 是原始数据集大小的 80%。

随机森林:

随机森林是一个由 k 个未训练的决策树(只有一个根节点的树)和 M 个引导样本( kM 不必相同)组成的集合,这些样本使用随机子空间方法或特征打包方法的变体进行训练。注意,训练随机森林的方法不像对一堆单独的决策树应用 bagging,然后简单地聚合输出那样简单。训练随机森林的过程如下:

  1. 在当前节点从可用特征 D 中随机选择 p 特征。特征数量 p 通常远小于特征总数 D
  2. 使用指定的分裂度量(Gini 杂质、信息增益等)计算树 k 的最佳分裂点。)并将当前节点分割成子节点,并从此节点开始减少特征 D 的数量。
  3. 重复步骤 1 到 2,直到达到最大树深度 l 或者分裂度量达到某个极值。
  4. 对森林中的每棵树重复步骤 1 到 3。
  5. 投票或合计森林中每棵树的产量。

与单决策树相比,随机森林通过在每个分裂点选择多个特征变量而不是单个特征变量来分裂。直观地说,决策树的变量选择特性可以通过使用这种特征打包过程得到极大的改善。通常,树的数量 k 很大,对于具有许多特征的大型数据集,数量级为数百到数千。

变量选择:

随机森林的变量选择非常简单。使用 scikit-learn 的 RandomForestClassifier ,让我们加载我们最喜欢的数据集(有高档葡萄酒的数据集),看看我们的随机森林分类器认为葡萄酒分类最重要的特征是什么。滚动 Jupyter 笔记本以查看功能信息图和作为功能数量函数的 F1 平均分数(您可能应该从我的 github 下载 Jupyter 笔记本文件/要点以更好地查看这些图)。

有趣的是,当 n_trees = 1000 时,脯氨酸含量仍然是最具信息量的特征。在我的 Core i7 笔记本电脑上用 1000 棵树进行训练需要几秒钟,这比大多数深度神经网络模型快得多。对于较小的树,颜色强度倾向于出现在顶部。当 n_trees = 1000 时,颜色 _ 强度仍能与脯氨酸*含量相当接近。**一般来说,您应该扫描超参数 n_trees 并评估诊断图,以更好地了解数据集以及哪些特征是重要的。*一旦绘制了每个特征的相对信息/重要性图,高于某个阈值的特征可以用于另一个学习模型,如深度神经网络,低于阈值的特征可以忽略。跨越特征数量的 F1 分数应该在具有有限少数学习者的非常受限的集合模型上完成。笔记本中的 F1 扫描图显示了向模型添加要素或变量的效果,即添加更多输入要素对分类准确性的影响(注意 F1 得分和 AUROCs 仅针对分类问题定义,回归问题需要不同的误差测量,如均方差)。

总而言之:

随机森林可用于稳健分类、回归和特征选择分析。希望你能看到,在你期望得到像样的结果之前,你还需要先运用一些技巧。

关于监督学习问题,对你的简单模型进行基准测试总是一个好主意,比如随机森林与复杂的深度神经网络或概率模型。如果你有任何关于运行代码的问题,或者关于一般生活的奥秘,请不要犹豫问我。

机器学习中的决策树

原文:https://towardsdatascience.com/decision-trees-in-machine-learning-641b9c4e8052?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一棵树在现实生活中有很多类比,事实证明它影响了机器学习的广泛领域,既包括分类,也包括回归。在决策分析中,决策树可用于直观、明确地表示决策和决策制定。顾名思义,它使用树状决策模型。虽然在数据挖掘中它是一个常用的工具,用来导出一个策略以达到一个特定的目标,但它也广泛地用于机器学习,这将是本文的主要焦点。

一个算法如何用树来表示?

为此,让我们考虑一个非常基本的例子,使用泰坦尼克号的数据集来预测一名乘客是否会幸存。以下模型使用数据集中的 3 个特征/属性/列,即性别、年龄和 sibsp(配偶或子女数量)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image taken from wikipedia

*一棵决策树被倒过来画,它的根在顶部。*在左边的图片中,黑色的粗体文本代表一个条件/ 内部节点,基于该条件树分裂成分支/ 。不再分裂的分支的末端是 decision/ leaf ,在本例中,乘客是死是活,分别用红色和绿色文本表示。

虽然,一个真正的数据集将有更多的功能,这只是一个更大的树的一个分支,但你不能忽视这种算法的简单性。特征的重要性是清楚的并且可以容易地查看关系。这种方法通常被称为从数据中学习决策树**,上述树被称为分类树**因为目标是将乘客分类为幸存或死亡。回归树以同样的方式表示,只是它们预测连续的值,比如房子的价格。一般来说,决策树算法被称为 CART 或分类和回归树。****

那么,后台到底是怎么回事呢?种一棵树包括决定选择哪些特征使用什么条件进行分裂,以及知道何时停止。因为一棵树通常是任意生长的,所以你需要修剪它,让它看起来更漂亮。让我们从一种常用的分割技术开始。

递归二进制分裂

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在该程序中,考虑了所有特征,并使用成本函数尝试和测试了不同的分割点。选择具有最佳成本(或最低成本)的分割。

考虑从 titanic 数据集学习的树的早期例子。在第一次分裂或根中,考虑所有属性/特征,并且基于该分裂将训练数据分成组。我们有 3 个特征,所以将有 3 个候选分裂。现在我们将 计算出 准确度 每拆分一次将花费我们多少,使用函数选择成本最低的拆分 ,在我们的例子中是乘客的性别。该 算法本质上是递归的 ,因为形成的组可以使用相同的策略细分。由于这个过程,这个算法也被称为贪婪算法,因为我们有降低成本的过度欲望。这使得根节点成为最佳预测器/分类器。

拆分的成本

让我们仔细看看用于分类和回归的成本函数。在这两种情况下,成本函数试图找到最相似的分支,或者具有相似响应的组的分支。这使得我们可以更确定一个测试数据的输入会遵循一定的路径。

回归:总和(y-预测)

比方说,我们正在预测房价。现在,决策树将通过考虑训练数据中的每个特征来开始分裂。特定组的训练数据输入的响应的平均值被认为是对该组的预测。上述函数应用于所有数据点,并计算所有候选分割的成本。再次选择最低成本的分割。另一个成本函数涉及标准偏差的减少,更多信息可在这里找到。

分类:G =总和(PK *(1-PK))

基尼系数通过分裂产生的群体中反应类别的混合程度,给出了分裂有多好的概念。这里,pk 是特定组中同类输入的比例。当一个组包含来自同一类的所有输入时,出现完美的类纯度,在这种情况下,pk 为 1 或 0,G = 0,其中一个组中具有 50-50 个类的节点具有最差的纯度,因此对于二进制分类,它将具有 pk = 0.5 和 G = 0.5。

什么时候停止分裂?

你可能会问 什么时候停止种一棵树? 作为一个问题通常有一个大的特征集,它导致大量的分裂,进而产生一棵巨大的树。这样的树*很复杂,会导致过度拟合。*所以,我们需要知道什么时候停止?一种方法是**设置在每片叶子上使用的最小数量的训练输入。**例如,我们可以使用最少 10 名乘客来做出决定(死亡或幸存),并忽略任何少于 10 名乘客的叶子。另一种方法是设置模型的最大深度。最大深度是指从根到叶子的最长路径的长度。

修剪

一棵树的性能可以通过 修剪 进一步提升。它包括 去除利用低重要性特征的分支 。这样,我们降低了树的复杂性,从而通过减少过度拟合来提高其预测能力。

修剪可以从根部开始,也可以从叶子开始。最简单的修剪方法是从叶子开始,删除叶子中最受欢迎的类的每个节点,如果这种改变不会降低精确度,则保留这种改变。它也被称为减少错误修剪。可以使用更复杂的修剪方法,例如成本复杂性修剪,其中使用学习参数(α)来衡量是否可以基于子树的大小移除节点。这也被称为最弱链接修剪。

手推车的优势

  • 易于理解、解释和形象化。
  • 决策树隐含地执行变量筛选或特征选择。
  • 能处理数字和分类数据吗。也可以处理多输出问题。
  • 决策树需要用户相对较少的努力来准备数据。
  • 参数之间的非线性关系不影响采油树性能。

推车的缺点

  • 决策树学习者可以创建不能很好概括数据的过于复杂的树。这叫做过拟合
  • 决策树可能不稳定,因为数据的微小变化可能导致生成完全不同的树。这就是所谓的 方差 ,需要通过 套袋、 升压 等方法降低*。*
  • 贪婪算法不能保证返回全局最优的决策树。这可以通过训练多个树来减轻,其中特征和样本通过替换被随机采样。
  • 决策树学习者创建偏向 的树如果某些职业支配。因此,建议在拟合决策树之前平衡数据集。

这都是基本的,让你和决策树学习一样。使用提升技术对决策树学习进行了改进。实现这些算法的一个流行库是 Scikit-Learn 。它有一个很棒的 api,只需几行 python 代码就能让你的模型运行起来。

如果你喜欢这篇文章,一定要点击下面的❤推荐它,如果你有任何问题,留下评论,我会尽力回答。

为了更加了解机器学习的世界,跟我来。这是最好的办法,等我多写点这样的文章就知道了。

也可以在 推特直接发邮件给我 或者 在 linkedin 上找我。我很乐意收到你的来信。

乡亲们,祝你们有美好的一天:)

决策树—修剪

原文:https://towardsdatascience.com/decision-trees-pruning-4241cc266fef?source=collection_archive---------7-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

image by Sarah Dorweiler on unsplash.com

我的上一篇博客关注的是决策树的概念,它是随机森林机器学习算法的基础。因为这只是一篇很短的博客(4 分钟阅读),我没有深究细节,但是嵌入了一些(希望)有用的链接。

在这篇文章中,我想更进一步,涵盖:

  • 随机森林如何使用决策树
  • 过度拟合的问题以及如何识别它
  • 修剪决策树以限制过度拟合问题。

正如您将看到的,R 中的机器学习非常简单,通常只需要几行代码就可以让模型运行起来。尽管有用,算法使用的默认设置很少是理想的。

以下代码是准备分类树模型的示例。我使用了“rpart”包,但是“caret”是另一种选择。

Model = rpart(分类器~预测器,data = train_data,method = "class ",control = rpart.control(###))

“分类器”是模型预测的特征,“预测器”是数据集中的独立特征,用于确定分类器结果的概率。

method = "class "语句将确保为分类器(为因子类型变量)做出预测。例如,准备与贷款偿还数据集相关的脚本。分类器是申请人是否“偿还”或“违约”债务,有许多特征(列)可用于预测这一结果。随机森林算法使用许多决策树,这些决策树是使用训练数据的随机段准备的。然后,测试数据集中的每个观察值通过每个树运行,以独立地对分类器的结果进行预测。由最大数量的树预测的分类代表模型的预测。如果大多数树预测贷款将被偿还,那么这就是模型的预测。

测试数据$预测

Once a prediction vector was created, the overall accuracy of the models could be calculated and a confusion matrix produced showing which of the two outcomes (repaid and default) the model was best at predicting.

准确度 =平均值(测试数据 预测 = = 测试数据 预测==测试数据 预测==测试数据实际结果)

混淆矩阵 =表格(测试数据 预测,测试数据 预测,测试数据 预测,测试数据实际 _ 结果)

在我在 Data Camp 完成的一个活动中,我比测试标准决策树和我修剪过的版本的准确性的要求更进一步。修剪的原因是由基本算法准备的树可能倾向于过度拟合,因为它们变得非常大和复杂。下面我展示了使用不带调整参数的基本算法生成的决策树。不要担心字体太小而无法阅读,我只是简单地强调了在没有添加控制参数的情况下树可以有多复杂。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我修剪树的时候,我测试了 minsplit(在被‘修剪’之前出现在叶子中的观察数量)和 maxdepth(一个分支中的最大节点数量)的不同值。如果你喜欢快速更新的话,这个术语在我之前的博客中已经全部介绍过了!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我发现一个复杂度显著降低的树实际上提供了一点准确性的提高——我的目标是保持准确性稳定!原始模型在违约和已偿还住房贷款方面产生了类似的准确性水平,而新模型在预测违约贷款方面有了显著改善,其已偿还贷款预测的准确性下降较小。这将是值得探索的,但是复杂性的大幅降低仍然产生了很好的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是我为标准树和修剪树准备的代码。只有少量的代码,还有很大的改进空间!

# Trees prepared with no pruning
# prepare model
lm <- rpart(outcome ~ ., data = loans_train, method = “class”, control = rpart.control(cp = 0))# prepare predictionloans_test$PredLM <- predict(lm,loans_test, type = “class”)# calculate overall accuracymean(loans_test$PredLM == loans_test$outcome)# prepare confusion matrixtable(loans_test$PredLM,loans_test$outcome)# plot treerpart.plot(lm, type = 3, box.palette = c(“red”, “green”), fallen.leaves = TRUE)# Trees prepared with pruning# prepare modellmp <- rpart(outcome ~ ., data = loans_train, method = “class”, control = rpart.control(cp = 0, minsplit = 250, maxdepth = 6))# prepare predictionloans_test$PredLMP <- predict(lmp,loans_test, type = “class”)# calculate overall accuracymean(loans_test$PredLMP == loans_test$outcome)# prepare confusion matrixtable(loans_test$PredLMP,loans_test$outcome)# plot treerpart.plot(lmp, type = 3,cex = .7, box.palette = c(“red”, “green”), fallen.leaves = TRUE)

决策树——理解可解释的人工智能

原文:https://towardsdatascience.com/decision-trees-understanding-explainable-ai-620fc37e598d?source=collection_archive---------5-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可解释的人工智能或 XAI 是人工智能的一个子类,与“黑盒”模型相反,模型做出的决定可以被人类解释。随着人工智能从纠正我们的拼写和定向广告转向驾驶我们的汽车和诊断病人,验证和证明得出的结论的需求开始得到优先考虑。

为了开始深入这个领域,让我们看一个简单的 XAI 模型:决策树。决策树很容易阅读,甚至可以通过将选择分成许多小的子选择来模仿人类的决策方法。一个简单的例子是当一个人离开高中时,如何评价当地的大学。假设学生心中有一门课程,一个简单的决策过程可以是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果第三方可以访问“模型”和所需的变量,学生如何得出他们的结论可以很容易地得到证明。

这种相同的结构可以应用于监督学习,目标是创建一个最好地描述训练数据的决策树。然后,该模型可用于理解变量之间的关系或用于预测应用。

该算法

决策树的构建是作为一个推理过程来完成的。

  1. 估计哪个变量给出最大的信息增益。信息增益是自变量状态已知时因变量熵的减少。
    那里有很多大词。
    本质上,这衡量了当我们根据因变量的值将自变量分成组时,自变量的组织程度。
  2. 选择在组织中提供最大增加的因变量,并根据该变量分割数据集。
  3. 此时,三个条件之一必须为真:
    -因变量现在只取一个值。在这种情况下,树的这一分支是完整的,我们已经达到了我们的“决定”。
    -因变量取> 1 值。在这里,我们简单地回到第一步,并尝试进一步缩小范围。
    -因变量取值> 1,但我们没有更多的自变量来分割数据。在这里,我们简单地说一下决策可能采取的值,并根据每个选项的相对比例估计每个值的概率。

计算信息增益

首先,我们需要一个组织或熵的公式。为了计算因变量的熵,我们使用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下图显示了 Y(其中 Y 有两种状态)的熵是如何随着每种状态的概率而变化的。当一个状态的概率为 0 时,熵也为 0,因为这是 Y 最有组织的时候,而当 Y 在两个状态之间平均分配时,熵最大。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

扩展这一点以增加已知独立变量 X 对熵的影响:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

信息增益现在被定义为我们知道 X 和不知道 X 时的熵之差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

把密码给我!

这里没有包括一些计算熵和创建图形的函数。

def decide(Y, X_dict, previous_node):
    #Calc info gain for each X
    max_IG = 0
    var_to_split = None#Calculate information gain to find out which variable to split on
    for x in X_dict.keys():
        IG = InfoGain(Y, X_dict[x])
        if IG > max_IG:
            max_IG = IG
            var_to_split = x#See if all variables have been used and none are left.
    if var_to_split == None:
        Y_options = list(set(Y))
        tot = float(len(Y))
        count = [0 for _ in range(len(Y_options))]for op in range(len(Y_options)):
            for i in range(len(Y)):
                if Y[i] == op:
                    count[op] += 1
        #Format Node label
        Prob = ""
        for op in range(len(Y_options) - 1):
            Prob += "P("
            Prob += str(Y_options[op]) + ")-> "
            P = float(count[op]) / tot
            Prob += "{0:.2f}".format(P)
        #Make a new node
        nodename = node(Prob, color = "orange")
        edge(previous_node, nodename)
    else:
        print("Splitting on {0}".format(var_to_split))
        X_options = list(set(X_dict[var_to_split]))
        #Make decision variable node
        Var_nodename = node(var_to_split, color = "red")
        edge(previous_node, Var_nodename)
        #Init new data for each new branch of the tree
        for X_option in X_options:
            X_nodename = node(str(X_option))
            edge(Var_nodename, X_nodename)
            New_X_dict = {}
            #get remaining variables
            for key in X_dict.keys():
                if key != var_to_split:
                    New_X_dict[key] = []
            New_Y = []
            #Populate
            for i in range(len(Y)):
                if X_dict[var_to_split][i] == X_option:
                    New_Y.append(Y[i])
                    for key in New_X_dict.keys():
                        New_X_dict[key].append(X_dict[key][i])#Check if this is a terminal node:
            if len(set(New_Y)) == 1:
                nodename = node(str(New_Y[0]), color = "green")
                edge(X_nodename, nodename)
            else:
                #No terminal node, so try again
                decide(New_Y, New_X_dict, X_nodename)Y, X_dict =  import_golf('golf.csv') #import data
root_node = node("root", color = "blue") #Create the first node
decide(Y, X_dict, root_node) #start the tree

对于高尔夫数据集,输出以下树,这是解释决策过程的简单方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解码人工智能

原文:https://towardsdatascience.com/decoding-ai-47b3e6840f9d?source=collection_archive---------5-----------------------

无论你走到哪里,人们似乎都在谈论一件事。好吧,我是说除了唐纳德·特朗普和他令人不安的搞笑行为。那就是 AI。有些人抑制不住自己的兴奋(‘哟,人工智能要改变世界了!’)。还有那些不确定的*(“我们真的还没有完全理解人工智能会对一切产生的影响”)。最后,那些已经宣布天启降临到我们头上的人(‘人工智能将吞噬人类。准备去死吧!)*。事实上,它已经成为一个被滥用的术语,被断章取义地使用,并且经常被错误地用于很多事情。

但是人工智能到底是什么?我相信你也想知道,你是否会向一群批判性的朋友承认这一点,他们会呆呆地看着你,指出你盔甲上的一个裂缝,这是人工智能今天已经成为的鸦片。所以让我们来看看我们是否能把它分解一下。

如果你偶然看到这个页面,你可能已经有了一些基本的知识——AI 代表人工智能——从语义上来说,它很容易理解,因为这两个词本身是不言自明的。然而,你确实需要透过表面去触及它的核心。我们会一个一个来。

人工:

人工的字典含义是*‘引起或产生的,与自然存在的’*相对。换句话说,它意味着某种被创造、制造、模拟的东西。在人工智能的背景下,人工性来自于进行创造、制造和模拟的机器。

智能:

你可以尝试用许多方法来解释智慧的含义。但最核心的是,在考虑多个参数的同时,做出复杂决策和结论的能力。想一想——这难道不是人类区别于所有其他物种的地方吗?这难道不是他们考虑事实(清晰或模糊)、权衡事实、确定替代方案并最终得出结论的能力吗?这个决定或结论可能很简单,比如“我会看敦刻尔克,因为我想我会喜欢它。”或者更复杂的东西,比如国际象棋中的一步棋。

所以让我们把这两件事放在一起理解 AI。用最简单的方式来说,人工智能是一个让机器能够复制人类智能的概念,即基于现有事实做出决策和得出结论的能力。这些事实可能是二元的或模糊的(这些术语我将在后面的帖子中解释),就像人类决策可用的参数一样。

这就把我们带到了下一个关于人工智能的问题——一个非常现实的问题:为什么?为什么我们需要机器来做人类可以做的决定?AI 的好处是什么?虽然这本身是一个巨大的话题,但我将在用外行人的术语解释人工智能的更广泛尝试的背景下,重点回答这个问题。

让我们回到我们得出的定义——AI 是指机器根据现有事实做出决策。在这方面,机器比人类有一些明显的优势,其中主要有以下四点:

(1)机器没有偏差。人类有。如果我们谈论的是纯粹的、基于逻辑的决策,这些偏见有时会成为障碍。例如,一台机器不会仅仅因为早上与配偶争论该轮到谁倒垃圾而心情不好,从而做出次优决策!

(2) 机器可以拥有高得多的计算能力。因此,他们可以从字面上列举所有不同的排列和相关因素的组合,并计算他们的结果值,以达到最佳决策。虽然人类肯定可以从概念上理解这一点,但他们并不具备在头脑中实际拥有数千甚至数百万行数据并据此打分的能力。这是计算机能够在逻辑驱动的游戏(如国际象棋)中持续击败人类的主要原因之一。当计算机采取行动时,它会考虑你可能采取的所有下一步行动,并据此做出决定。(补充说明:象棋本身是一种有无限可能性的游戏,因此在数据和人工智能的背景下研究象棋是一件非常有趣的事情)。

(3) **机器不会犯‘人为错误’。**这是一个术语,通常用于描述无意中发生的错误,因为男人(或女人)不是机器!可能改变结果的小错误,例如,在餐馆手动计算总账单金额时,您无意中漏掉了一项。换句话说,一旦被编程,一台机器将永远(或者至少直到它发生故障、出现错误或需要升级)完全按照预期做事情。

(4) **机器不需要休息。**还是睡觉。或者周末。或者假期。或者生病的叶子。你明白我的意思。从生产率的角度来看,这显然是一个非常相关的因素。

人工智能驱动的方法也有明显的缺点,其中几个非常重要,特别是从社会学的角度来看。它最终归结为人工智能被使用的背景。

在我结束之前,简单说一下人工智能的历史。虽然围绕它的讨论最近变得非常激烈,甚至在自动驾驶汽车成为现实的时候辩论也很激烈,但人工智能绝不是最近的现象。这种想法在你能想到的最早的时候就已经存在了。你甚至可以在古希腊神话中找到它的典故。亚里士多德(公元前 4 世纪)被认为发明了第一个演绎逻辑系统(这是人工智能的关键)。第一台从人类手中接管计算的数字机器是计算器,它的原始版本是由帕斯卡在 1642 年发明的。

当然,在过去的几十年里,变化的速度是惊人的,而且只会越来越快。我认为我们现在非常接近哲学需要进入技术领域的地方,以确定人工智能的未来。问题不再是‘我们能让机器做这件事或那件事吗’(你能想到的大多数事情的答案都是肯定的),现在的问题是‘我们想在哪里做这件事?’

使用数据科学解码 BuzzFeed 标题

原文:https://towardsdatascience.com/decoding-buzzfeed-headlines-using-data-science-25198eb25082?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不管你喜欢它还是讨厌它(就我个人而言,对它着迷),Buzzfeed 有其独特的方式来捕捉我们短暂的注意力,他们的魔力很大一部分在于他们如何创建他们的标题。我采用洞察驱动的方法,使用各种机器学习和 NLP 实践来分析 BuzzFeed 最常见的标题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

An overview of my analysis

1.数据收集和清理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 newsapi.org 的 BuzzFeed API ,我可以一次从网站上查询多达 50 个头条新闻。我连续一周每天两次抓取 50 个标题,这给了我大约 700 个标题。
完成后,我通过删除非英语句子和无用的 Unicode 字符清理了文本数据。

2.数据告诉我们什么

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

preliminary plotting of some descriptive stats

互联网上的普遍共识是,标题的理想长度在 50-70 个字符之间。BuzzFeed 标题的平均长度大致在这个范围内。由于这是一个寻找 BuzzFeed 最经常出现的标题结构的任务,我将搜索范围缩小到 11 个单词的标题,并继续进行词性标注,以发现最流行的单词序列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

the most popular sequence followed a CD, NNS, WDT, VBP pattern

我们可以看到 BuzzFeed 喜欢用数字开始标题。以数字开头的标题几乎总是会引出一篇基于列表的文章,比如“30 样 10 美元以下的东西永远有用”。现在我不是列表心理学和它们为什么吸引我们的专家,但是对于任何感兴趣的人来说,有几个来源可以解决这个话题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一个词类:名词。很明显,这些标题后面都有名词(单数或复数)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

popular nouns used

这里没有什么太令人惊讶的。这些都是我们所有人在某种感官层面上都可以联系到的名词。显然是为了吸引大众。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

真正引起我注意的是序列中使用的第四个词——“威尔”。
举个例子:“如果你是健身房会员,你会明白的 14 件事”。很快,我们可以看到“will”这个词是如何产生预期效果的。不点击标题会有一种看不见但很明显的代价——没有发现的代价。

现在我们有了合适的结构,我们可以看看标题的其他特征,比如情绪:这些常见的标题通常是正面的、负面的还是都不是?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

双峰分布确实表明有一些正面倾斜的标题,但总体而言,它们是中性的。然而,这种评估也有局限性。一,BuzzFeed 标题倾向于使用表情符号和相关标点符号(比如!!!')是我在数据收集过程中天真地清理掉的。我还使用了一个基本的情绪分析模型,这个模型可能漏掉了俚语、不寻常的比较和其他情绪信号。尽管有这些担心,当我查看模型归类为“中性”的句子时(如下所示),似乎没有太多的错误分类。我自己不能手动将这些句子分为积极或消极:它们天生没有主见,这与我最初的期望相反。这又回到了我之前的观点,即 BuzzFeed 如何利用预期作为一种工具来激起读者的兴趣。这些中性的标题(占大多数)导致文章旨在传达一些你“需要”拥有的信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

neutral headlines

3.创建简单的 BuzzFeed 标题生成器

在我继续本节之前,让我们总结一下目前为止我们对 BuzzFeed 标题的了解:

  • 标题简洁,每个大约 7-14 个字。
  • 最常用的标题结构是[CD、NNS、WDT、VBP……],即一个数字后面跟着一个名词(大多是复数),再后面跟着一个 Wh-word 和一个动词(大多是“will”)。
  • 标题透露了文章内容的很多信息。他们不一定是“点击诱饵”:在我看来恰恰相反。它们确切地告诉你你将会得到什么——基于列表的文章揭示了你想要/需要知道的一些信息。
  • 他们在情感上大多是中立的。我不认为“期待”属于“积极”或“消极”的范畴。这些标题的目的是尽可能高效地引发你的好奇心。在大多数情况下,他们不需要借助任何极端情绪来实现这一点。
  • 注意:我不能强调这一点。以上分析仅适用于本文指定的标题的具体结构。BuzzFeed 利用了其他几个有趣且值得研究的标题结构。

好吧,让我们创建一个简单的算法来尝试复制这个结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

structure I employ

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Output

我觉得产量不错。其中一些标题看起来很荒谬(虽然很搞笑),但它们对我们的目的很有用。
为了更进一步,我想看看分类模型是否能够识别这种结构。为此,我需要一个不同来源的标题数据集。

4.测试

我决定从 ABC 新闻中查询大约 500 个标题。我将数据集与 BuzzFeed 数据集相结合,创建了一个训练和目标集,其中包含标题的矢量化版本,目标变量中的“1”表示它是 BuzzFeed 标题。然后,我将一个简单的支持向量分类器模型用于训练集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该模型在测试集上实现了 83.84 的准确度,具有许多假阳性(低精度、高召回),即,有 13 种情况下,该模型认为 ABC 标题是 BuzzFeed 标题。使用我们的标题生成器生成的 1000 个标题,模型预测所有标题都是 BuzzFeed 的。因此,我们生成的标题的结构确实有点像 BuzzFeed。注意,我用来生成标题的随机名词和动词不是取自 BuzzFeed 语料库(我取自 WordNet 字典)。

结论和附加内容

我写这篇文章的目的不是为了最好地复制 BuzzFeed 标题,而是为了分析它的结构,并了解它们为什么有效。因此,我选择了他们最流行的标题格式,并试图根据提供给我的数据进行推断。你可以在这里访问我使用的的所有代码和数据。

我使用了一个预训练的递归神经网络(RNN) 来根据 BuzzFeed 标题生成文本。下面是我得到的输出示例(4 个时期后):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在它们看起来并不完全像我们讨论过的标题,但是以某种不可思议的方式,它们确实展现了我们已经详细讨论过的性质。他们以一个数字开头,后面跟着一个复数名词,他们使用将来时来进一步引起你的注意。迷人的东西。

深度学习热潮背后的真正原因

原文:https://towardsdatascience.com/decoding-deep-learning-a-big-lie-or-the-next-big-thing-b924298f26d4?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Ryoji Iwata on Unsplash

一个简单的英文解释,减去数学,统计和代码

更新:这篇文章可以在 日文 阅读(感谢 Koki Yoshimoto)。

深度学习创造了一个完美的二分法。

一方面,我们有数据科学从业者对此赞不绝口,每个人和他们的同事都投身于学习,并从这种被认为是改变游戏规则的技术中发展出自己的事业。

然后每个人都想知道这是怎么回事。随着众多分析技术被预测为解决商业问题的灵丹妙药,人们想知道这个额外的’酷东西到底是什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Sandro Schuh on Unsplash

对于业务方面的人来说,没有简单的途径来获得简单直观的理解。谷歌搜索让人陷入神经网络的深层,或者被数学符号弄得晕头转向。关于这一主题的在线课程充斥着一大堆统计术语。

一个人最终会屈服,并最终接受所有的炒作。这里有一个尝试,用简单的英语和不到 5 分钟的时间,去神秘化和民主化对深度学习(DL)的理解。我保证不会向你们展示人类大脑的老套图片,或者蜘蛛网:-)

那么,什么是深度学习呢?

先说机器学习(ML)的基本前提。这种尝试是教机器如何在有一些输入的情况下得到想要的结果。比方说,当显示过去 6 个月的股票价格时,预测明天的价值。或者,当看到一张脸时,识别这个人。

机器学习如何做这样的事情,避免每次都需要费力的指令。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度学习只是机器学习的弟子(或者说,学科),但是智商更高。它做的事情和上面一样,但是以一种更聪明的方式。

还有,它和机器学习有什么不同?

让我用一个简单的人脸检测的例子来解释一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pic: “Jimmy answering questions” by Beatrice Murch derivative work: Sylenius, licensed under CC BY 2.0

使用机器学习的传统人脸识别包括首先手动识别人脸上的明显特征(例如眼睛、眉毛、下巴)。然后,一台机器被训练将每一张已知的脸与这些特定的特征关联起来。现在展示一张新面孔,机器提取这些预设的特征,做一个比较,得到最佳匹配。这个效果一般。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pic: Machine learning is fun… by Adam Geitgey

现在,深度学习如何解决同样的问题?过程几乎是一样的,但是记住这个学生更聪明。因此,代替填鸭式的标准面部特征,你让模特创造性地找出该注意什么。它可能决定了人类面部最显著的特征是左脸颊的弯曲,或者前额有多平。或者,也许是更微妙的东西。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Facial features identified by some of the interim layers of DeepFace DL architecture

当看到大量这样的对时,它会默默地找出输入(脸)和输出(名字)之间的联系。然后,当出现一张新面孔时,瞧,它神奇地恢复了正常。与早期的识别技术相比,DL 在准确性和速度上都将球击出了公园。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Icons by hunotika, MGalloway(WMF), Google [CC BY 3.0)] via Wikimedia Commons

但是,为什么他们总是展示人脑的图片?

公平地说,这里有的联系。

让我们回顾一下孩子是如何学习第一课的。你展示带有大象图片的卡片,并大声朗读出来。几次这样的例子之后,当婴儿看到任何类似大象的东西时,她马上就能认出来。不管姿势、颜色或背景如何。我们没有教她象鼻、长牙或耳朵的形状,但她完全学会了。而她正好得到了*。*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photos by Picsea, Anita Jankovic, Anna Stoffel, Chris Rhoads on Unsplash

正如我们不确定婴儿是如何学会识别大象的组成部分一样,我们也不知道深度学习背后的技术神经网络是如何解决这一问题的。这是人类大脑和神经连接的所有相似之处涌现的地方,但我将在这里停下来,为您省去这些麻烦。

只要知道深度学习在自动识别任何给定数据(面部)中最有区别的信号(特征)方面非常智能就足够了。换句话说,它在特征提取方面是个高手。当给定大量的输入-输出对时,它就能确定学习什么和如何学习。

深度学习在任何呈现的实体中找出最强的模式——一张脸、声音甚至一张数字表。

这对机器学习来说有这么重要吗?

是的,它很大。

尽管机器学习取得了巨大的进步,但这门学科面临的最大挑战是……你猜对了,特征提取。数据科学家度过不眠之夜,发现输入(客户行为的一百个因素)和输出(客户流失)之间的联系。然后机器就可以方便地从中学习。

因此,最高精度和较差结果之间的区别在于最佳特征的识别。现在,由于深度学习,如果机器也能自动完成这种繁重的工作,那岂不是很棒?

模式识别机对商业有什么用?

很多。

深度学习可以应用在任何有机器学习设备的地方。它可以轻松地研究结构化数据问题,这是传统算法占主导地位的领域。基于我们所看到的,它可以破坏学习周期,并将准确性推到令人眩晕的水平。

但对巴克来说,最大的冲击是在 ML 还没有快速起步的领域。以图像、视频、音频或普通旧文本中的深层含义为例。深度学习已经粉碎了这种需要机器识别、分类或预测的数据类型的问题。让我们来看几个。

  • 先进的 人脸识别技术正在现实世界中看到早期应用,图像质量或曝光不再是制约因素。
  • 它不仅使探测动物物种成为可能,还让我们能够给海洋中的每一条鲸鲨命名。向座头鲸威利问好!
  • 自从 DL 接手以来,语音识别技术的进步将错误率降低了 30%。大约两年前,他们在这个领域打败了人类。
  • DL 赋予了机器艺术能力,并且使图像合成和风格转换有趣应用成为可能。
  • 多亏了数字图书馆,才有可能从文本中提取更深层次的含义,并且有初步尝试来解决假新闻的棘手问题。

Object detection using Deep learning on Tensor flow, by Diego Cavalca

这一切都太顺利了,不是有一个陷阱吗?

嗯,深度学习最大的优点真的是它的缺点。人类不需要识别显著特征的事实意味着机器定义了它认为重要的东西。我们人类是理性的动物,我们对任何不符合模式的东西都有困难。

当一个人试图解释机器识别的特征的意义,或者试图透明地解释为什么机器的决定必须被执行时,麻烦就在这个天堂酝酿了。毕竟,一个商业决策者在一个神秘但准确的推荐工具面前赌上数百万,或者更糟的是把人们的生活置于神坛之上,这种感觉有多舒服呢?这个工具是多年前发明的。

深度学习算法的可解释性和结果的可视化解释是一个快速发展的领域,研究正在快速赶上。是的,它需要大量的数据才能开始。因此,是的,在这个领域有一些小问题,但目前来看,恒星和稳定的结果显然大于缺点。

所以,这就是坚果壳里的深度学习。请在下面分享您的反馈。

如果你觉得这很有趣,你会喜欢我写的这些相关文章:

对数据科学充满热情?随时在LinkedIn上加我,订阅我的 简讯

这是这篇文章的 5 分钟视频。

解码基因组变异分析

原文:https://towardsdatascience.com/decoding-gene-set-variation-analysis-8193a0cfda3?source=collection_archive---------6-----------------------

从基因表达数据表征生物途径

基因组变异分析是一种从基因表达数据集中表征途径或特征摘要的技术。GSVA 建立在基因组富集分析的基础上,其中一组基因在样品中定义的两个条件组之间被表征。GSEA(基因集合富集分析)致力于研究两组定义的基因之间的不同表现。你需要了解 GSEA 才能继续吗?绝对不行。你唯一能从 GSEA 那里学到的是,它使用了一个非常基本的概念,叫做“运行总和”,我将在这里解释它。

我为什么需要 GSVA?

原因很简单,因为 GSEA 依赖于表型数据,而样本是以这样一种方式来看待的,即两组样本(它们的表型我已经知道了)必须进行比较。如果我想在不依赖于表型信息的情况下研究我的样品中某一途径的富集,该怎么办?如果我想问,这个途径或基因信号在这个样本中表现如何呢?基因变异分析可以帮我解决这个问题!

让我们开始吧,因为你(可能)更想知道它是如何工作的。我首先通过将 GSVA 应用于胰腺癌的实际数据集来解释它在表面上是如何工作的,然后我们通过查看它对极小的数据集做了什么来深入它。如果你已经对 GSVA 有了大致的了解,你可以跳到后者。

GSVA 的脚步

将数据拟合到模型中

GSVA 的第一步是用模型估计 RNASeq 或微阵列数据。当你有实际的数据时,为什么还要使用模型呢?因为模型是干净的,没有四肢,容易操作。

RNAseq 数据是通过泊松分布建模的,虽然有些人会认为它实际上是负二项式的,他们没有错,但我们现在就认为它是泊松分布。简而言之,想一个实验,你试着从很远的地方往饼干上撒巧克力碎片——落在饼干上的巧克力碎片的数量可以是 0…任何可能的数字。如果你试图估计一块饼干上的巧克力片数量,它遵循泊松分布。以类似的方式,在一个 RNASeq 实验中,你试图得到所有读数中有多少读数属于一个基因的转录本。转录本是你的巧克力片,基因是你的饼干。这就是为什么一个基因的计数遵循泊松过程。

在微阵列数据的情况下,每个基因的强度被建模为高斯或正态分布。注意,在对数转换的 RNA 序列数据或任何其他连续计数的情况下,从高斯分布估计它是好的,并且当数据具有整数值(例如原始计数)时,泊松核应该用于估计它

使用来自上述分布的所有样本来估计每个基因的累积密度函数。简单地说,CDF 值被分配给每个样本中的每个基因。

这是我们的 RNA 表达数据的样子。我们在 183 个样本中有大约 15,000 个基因。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们看看一些基因的拟合分布的 CDF。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

已经对每个基因的 CDF 进行了估计。下一步是对每个样本的每个基因进行排序。稍后将阐明我们为什么对每个样本中的每个基因进行排序。请注意,这些排名用于计算 GSVA 分数。

定义基因集合

毫不奇怪,我们需要一套基因来做 GSVA。这些基因组可能来自任何地方——你可能感兴趣的途径,你在实验中发现的基因签名,或者你从 10 年前写的论文中发现的签名。假设我们想研究两个签名:-

  1. 1 型干扰素信号——该信号由 25 个基因组成。
  2. 1 型干扰素刺激基因——这一特征由 125 个基因组成

计算 GSVA 分数——K-S 统计和经验分布

既然我们已经有了排序的基因和基因集合,下一步就是计算 GSVA 分数。这是使用 Klimigrov 随机游走统计来完成的。

K-S 统计是一种判断一个经验分布是否与另一个分布相似的方法。在我们的例子中,我们必须定义两种分布,一种是位于基因集中的基因的分布,另一种是不在基因集中的基因的分布。我们的问题很简单:我们基因集中的基因相对于不在基因集中的基因有多大的变化?

什么是经验 CDF?经验 CDF 只是一种从样本中估计总体真实 CDF 的方法,并且通过使用每个观察值的顺序统计或等级来找到经验 CDF。简而言之,对于从未知分布中抽取的观察值样本 x1,x2,x3…xn,在任意点 x 的经验累积分布函数是值小于或等于 x 的观察值的比例。不要将此与我们之前找到的 CDF 混淆。这个 CDF 是针对基因组合的,不同于先前使用全部数据估计的 CDF。

计算特定样品的基因集中的基因和不在基因集中的基因的分布,并且这两种分布的差异是 K-S 统计量。这一切是如何完成的将在后面的例子中展示。

GSVA 为我们的样本评分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在你有了每个样本的两个签名的 GSVA 分数。这个分数是什么,它是如何计算的,它能告诉我们什么?一个刺激的例子将更好地阐明这一点。

例子

为了我们的理智,让我们考虑一个有 3 个样本和 10 个基因的数据集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

估计每个基因的 CDF 并找出等级

这里跳过这一步,我们假设已经计算了 CDF。这是因为从如此小的数据中计算 CDFs 会给出一个很差的估计,并且会破坏我们通过一个例子来理解 GSVA 的目的。因此,让我们假设我们已经使用高斯核估计了每个基因的分布,并对每个样本的基因进行了排序。这是队伍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们定义由基因 B、E 和 H 组成的基因集合

让我们分别找出每个样本的 GSVA 分数。注意,样本的 GSVA 评分计算仍然依赖于每个样本,因为每个基因的 CDF 是使用所有样本估计的。

样本 1

在这种情况下,随机行走的思想是逐个迭代每个基因,并检查它是否在基因集中。这种迭代的顺序由样本的基因排序来定义。所以基因是从最积极表达的基因到最消极表达的基因重复的。让我们为样本 1 定义此订单:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机行走和跑步和

随机漫步是关于计算一个运行总和。这是通过迭代每个基因,并检查它是否位于基因集中来完成的。

我们在这里做了两次随机漫步。一个用于位于基因集中的基因,一个用于不在基因集中的基因。对于第一种情况,我们迭代每个基因并检查它是否在基因集中。

  1. 如果是,将该基因的等级添加到运行总和中。
  2. 如果没有,则不做任何事情,保持运行总和不变。

对于位于基因集合之外的基因,通过迭代每个基因来完成。

  1. 如果基因不在基因集中,则在运行总和中加 1
  2. 如果基因位于基因集中,则什么也不做,保持运行总和不变。

请注意,在计算不在基因集合中的基因的运行总和时,我们并不将它们的等级相加,而只是将运行总和加 1。这给了我们一种直觉,我们想要给基因集中的基因赋予权重,我们对此更关心。

基因集中基因的运行总和

这是基因集合中的基因随机行走的样子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,基因“E”的“上升”幅度更大,而不在基因集合中的基因(基因“B”和“H”)的上升幅度持续下降。这是因为基因‘E’的等级更高。换句话说,我们与一个基因的表达量成正比。

不在基因集中的基因的运行总和

在找到位于基因集中的基因的运行总和后,我们对不在基因集中的基因做类似的练习。注意每次“上升”的量是相等的。

这是不在基因集中的基因的随机漫步。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

样品 1 的 GSVA 分数

在我找到这两个随机漫步之后,我需要量化它们有多大的不同。一种方法是取这两者之间的最大偏差。两者之间的偏差可以是正的,也可以是负的。我考虑两个方向上的最大偏差,并将它们的差值作为 GSVA 分数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GSVA 得分为 0.57。这是高度阳性的,表明与不在基因组中的基因相比,基因中的基因是正向富集的。

样本 2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,B、E 和 H 基因现在都是排名最低的基因

基因集中基因的运行总和

这是基因集中的基因的随机行走。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不在基因集中的基因的运行总和

这就是随机漫步寻找不在基因集中的基因分布的方式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

样品 2 的 GSVA 分数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GSVA 的分数是-0.71。这是高度负的,表明与不在基因集中的基因相比,基因中的基因是负富集的。

样本 3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意,B 是排序较高的基因之一,而 E 和 H 是排序较低的基因中的基因。你能猜到这种情况下 GSVA 分数会是多少吗?或许,会接近 0?让我们看看。

基因集中基因的运行总和

这是基因集中的基因的随机行走。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不在基因集中的基因的运行总和

这就是随机漫步寻找不在基因集中的基因分布的方式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

样品 3 的 GSVA 分数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分布混合在一起。GSVA 得分为 0.1,非常接近于 0。这意味着与不在基因组中的基因相比,这些基因既没有正富集也没有负富集。因此,如果基因集合中的一些基因位于较高的等级,而一些基因位于较低的等级,则它们的影响被抵消,并且 GSVA 分数接近于 0。

结论

总之,GSVA 是在逐个样品的基础上量化途径和信号的富集的关键方法。它给出了一种非常聪明的方法,该方法基于简单的直觉,即当我们对所有基因进行排序并寻找基因集的基因在排序列表中的位置时,基因集在样本中的富集将取决于基因的位置。

参考

GSVA 文学

用 ISOMAP 分解非线性

原文:https://towardsdatascience.com/decomposing-non-linearity-with-isomap-32cf1e95a483?source=collection_archive---------10-----------------------

数据科学的许多应用包括处理像图像这样的高维数据。面对如此大量的多元数据,一个潜在的问题就是如何将它们可视化。为此,我们通常将数据投影到更低的维度。传统的降维技术,如 PCA、LDA 等,由于大多是线性方法,不能给出正确的结果,不能解释数据的非线性结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

nonlinear data after applying PCA.

线性方法基于欧几里德距离来降低维度,而 ISOMAP(等距映射)在多元数据点中使用测地线距离方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Isomap 按照以下步骤工作:

  1. 它根据流形距离确定相邻点,并连接固定半径内的点。
  2. 它计算在上述步骤中确定的点之间的测地线距离。
  3. 最后,在距离图上应用多维缩放,并且保持几何形状,然后优化点的位置。

让我们举一个简单的例子来理解这一点。我们将在 sklearn 生成的非线性数据集上测试这些算法。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import NullFormatter
from sklearn.manifold import Isomapfrom sklearn import datasetsn_points = 1000# S datasetX, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10
n_components = 2X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10
n_components = 2

可视化我们生成的数据集。

%matplotlib inline
fig = plt.figure(figsize=(15, 8))plt.suptitle("S shape dataset"
             % (1000, n_neighbors), fontsize=14)
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral)
ax.view_init(4, -72)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

S shaped dataset

现在我们在上面的数据集上应用 PCA。

Y = PCA(n_components).fit_transform(X)ax = fig.add_subplot(111)
plt.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)
plt.title("PCA on S curve")
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis('tight')
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在上面的图中,PCA 在二维上分解 3d 图的维度,但是在这样做的时候丢失了很多信息。

让我们检查流形上的 Isomap 的结果

Y = Isomap(n_neighbors, n_components).fit_transform(X)ax = fig.add_subplot(111)
plt.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)
plt.title("Isomap on S curve")
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis('tight')
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里,非线性数据被适当地投影在 2d 图上。Isomap 根据点之间的测地线距离分解数据。

解构 BERT:从 1 亿个参数中提取 6 种模式

原文:https://towardsdatascience.com/deconstructing-bert-distilling-6-patterns-from-100-million-parameters-b49113672f77?source=collection_archive---------4-----------------------

从伯特混乱的注意力网络中,一些直观的模式浮现出来

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2018 年标志着自然语言处理领域的一个转折点,一系列深度学习模型在从问题回答到情感分类的 NLP 任务中取得了最先进的成果。最近,谷歌的 BERT 算法已经成为一种“统治所有人的一种模式”,这是基于它在各种各样的任务上的卓越性能。

试玩一个 互动演示 伯特维兹

BERT 建立在两个关键的理念之上,这两个理念是 NLP 最近许多进步的原因:(1)转换器架构和(2)无监督的预训练。变形金刚是一个序列模型,它放弃了 RNN 的循环结构,采用了一种完全基于注意力的方法,正如即时经典中所描述的那样。伯特也是经过预先训练的;它的权重是通过两个无监督的任务提前学习的:掩蔽语言建模(在给定左右上下文的情况下预测一个缺失的单词)和下一句预测(预测一句话是否跟随另一句话)。因此,伯特不需要为每个新任务从头开始训练;相反,它的权重是微调过的。关于伯特的更多细节,请查看插图伯特。

伯特是一头(多头)野兽

伯特不像传统的注意力模型,在 RNN 的隐藏状态上使用扁平的注意力结构。相反,BERT 使用了多层注意力(12 层或 24 层,取决于模型),并且还在每层(12 层或 16 层)中加入了多个注意力“头”。由于模型权重不在层之间共享,单个 BERT 模型实际上具有多达 24×16 = 384 种不同的注意机制。

可视化伯特

由于 BERT 的复杂性,很难直观地理解其学习到的权重的含义。深度学习模型通常是出了名的不透明,各种可视化 工具已经被开发出来帮助理解它们。然而,我还没有找到一个可以解释伯特正在学习的注意力模式的方法。幸运的是, Tensor2Tenso r 有一个很好的工具来可视化编码器-解码器变压器模型中的注意力,所以我修改了它来与 BERT 的架构一起工作,使用了 BERT 的 PyTorch 实现。适配后的界面如下图,可以使用 Github 上的笔记本自己运行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该工具将注意力可视化为连接被更新的位置(左)和被关注的位置(右)的线。颜色标识相应的注意力头部,而线条粗细反映注意力得分。在工具的顶部,用户可以选择模型层,以及一个或多个注意力头(通过单击顶部的色标,代表 12 个头)。

伯特到底学到了什么?

我使用该工具探索了预训练 BERT 模型(基于 BERT 的无案例版本)各层/头部的注意力模式。我试验了不同的输入值,但出于演示目的,我只使用以下输入:

句子 A: 我去了商店。

在商店,我买了新鲜的草莓。

BERT 使用词块标记化,插入特殊量词(【CLS】)和分隔符(【SEP】)标记,所以实际输入顺序是:【CLS】我去商店。在商店,我买了新鲜的草莓。**

我发现了一些相当独特和令人惊讶的直觉注意力模式。下面我确定了六个关键模式,对于每一个模式,我都展示了展示该模式的特定层/头的可视化。

模式 1:注意下一个单词

在这种模式中,特定位置的大部分注意力都集中在序列中的下一个标记上。下面我们看到一个第 2 层,头 0 的例子。(所选的头部由顶部颜色栏中高亮显示的正方形表示。)左边的图显示了对所有标记的关注,而右边的图显示了对一个选定标记(“I”)的关注。在这个例子中,几乎所有的注意力都集中在序列中的下一个标记“got”上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pattern 1: Attention to next word. Left: attention weights for all tokens. Right: attention weights for selected token (“i”)

在左边,我们可以看到【SEP】记号扰乱了下一个记号的注意力模式,因为来自【SEP】的大部分注意力被导向【CLS】而不是下一个记号。因此,这种模式似乎主要在每个句子中起作用。

这种模式与向后 RNN 相关,在向后中,状态更新是从右到左顺序进行的。模式 1 出现在模型的多个层上,在某种意义上模拟了 RNN 的周期性更新。

模式二:注意前一个单词

在这种模式中,大部分注意力都集中在句子中前面的标记上。例如,在下图中,“去了”的大部分注意力都指向了前面的单词“我”。图案不像上一个那样清晰;一些注意力也被分散到其他令牌上,尤其是*【SEP】令牌。与模式 1 一样,这与顺序 RNN 有着松散的联系,在本例中是前向 RNN。*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pattern 2: Attention to previous word. Left: attention weights for all tokens. Right: attention weights for selected token (“went”)

模式 3:注意相同/相关的单词

在这种模式中,注意相同或相关的单词,包括源单词本身。在下面的例子中,第一次出现的“store”的大部分注意力都集中在它本身和第二次出现的“store”上。这种模式不像其他一些模式那样明显,注意力分散在许多不同的单词上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pattern 3: Attention to identical/related tokens. Left: attention weights for all tokens. Right: attention weights for selected token (“store”)

模式 4:注意其他句子中的相同/相关单词

在这个模式中,注意另一个句子中相同或相关的单词例如,第二句中“商店”的大部分注意力都指向第一句中的“商店”。人们可以想象这对于下一个句子预测任务(BERT 预训练的一部分)特别有帮助,因为它有助于识别句子之间的关系。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pattern 4: Attention to identical/related words in other sentence. Left: attention weights for all tokens. Right: attention weights for selected token (“store”)

模式 5:注意单词的其他预测词

在这种模式中,注意力似乎被引向预测源单词的其他单词,而不包括源单词本身。在下面的例子中,来自“吸管”的大部分注意力被导向“#浆果”,来自“#浆果”的大部分注意力集中在“吸管”上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pattern 5: Attention to other words predictive of word. Left: attention weights for all tokens. Right: attention weights for selected token (“##berries”)

这种模式不像其他一些模式那样独特。例如,大部分注意力都集中在定界符标记上(【CLS】),这是接下来讨论的模式 6 的定义特征。

模式 6:注意分隔符标记

在这个模式中,大部分注意力都集中在定界符标记上,要么是【CLS】标记,要么是【SEP】标记。在下面的例子中,大部分注意力都集中在两个【SEP】标记上。正如本文中所讨论的,这种模式充当一种“无操作”:当注意力头在输入句子中找不到任何有意义的东西来关注时,它会关注*【SEP】*标记。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pattern 6: Attention to delimiter tokens. Left: attention weights for all tokens. Right: attention weights for selected token (“store”)

笔记

有人说数据可视化有点像罗夏测验:我们的解释可能被我们自己的信念和期望所影响。虽然上面的一些模式非常独特,但其他模式有些主观,因此这些解释只能作为初步观察。

此外,上述 6 种模式描述了 BERT 的粗略注意结构,并不试图描述注意可能捕获的语言模式。例如,有许多不同类型的“关联性”可以在模式 3 和模式 4 中表现出来,例如同义词、共指等。看看不同的注意力是否专注于不同类型的语义和句法关系会很有趣。

试试吧!

可以在 Github 上查看可视化工具。请玩玩它,分享你的发现!

为了进一步阅读

第二部分 中,我扩展了可视化工具来展示伯特是如何形成其独特的注意力模式的。在我最近的文章 中,我探索了 OpenAI 的新文本生成器,GPT-2。**

在这里 了解更多我的可视化与可解释性工作 。你可以在 Twitter 上找到我@Jesse _ vig**

大感谢Llion Jones独创 Tensor2Tensor 可视化工具

解构介质上的度量

原文:https://towardsdatascience.com/deconstructing-metrics-on-medium-bf5b4863bf96?source=collection_archive---------9-----------------------

利用数据科学设计更好的媒体统计体验

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

入门指南

如果你以前曾经在 Medium 上发表过一个故事,那么你很有可能熟悉 Medium Stats 和它的产品。Medium Stats 是一个工具,您可以在其中查看您在平台上发布的帖子的流量和访客统计数据。这也是一个严重缺乏的工具。

该功能让我们可以访问他们发布的每个故事的视图、阅读、阅读率和粉丝等指标。它还提供了过去 30 天内某些指标的累计总数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A look into Medium Stats

页面的设计一直备受争议,但事实是,除了视觉上的改进,还有更多工作要做。Medium 跟踪大量在页面的有限功能中不可用的信息。此外,所做的存在的任何功能都是以虚荣心为中心,难以传达全貌。

该项目

我们可能无法访问收集到的过多的指标,但是我们确实有中等的统计数据。也许真的有一些有意义的见解埋藏在那里的某个地方。也许,只是也许…

有没有什么方法可以利用这些数据获得比目前提供给我们的更有用的信息?

带着这个问题,我继续从我自己的媒体统计页面收集数据,然后对我之前 30 多个故事中任何值得注意的关系和趋势进行一些探索性数据分析

如果你有兴趣对自己的媒体数据进行类似的分析,请查看下面链接的回购协议。你会发现我的个人数据集可以开始使用,还有几个笔记本应该会有用。

自从我开始在数据中挖掘,我开始思考很多关于指标和它们在媒体上的意义。

在这篇文章中,我将深入研究 Medium Stats 提供的每个指标,并探索可能的替代方案。我还将引用探索性数据分析对我以前的故事提出的见解和问题。

[## conordewey 3/Medium-Stats-分析

Medium-Stats-Analysis -探索数据并分析特定于用户的 Medium Stats 的指标

github.com](https://github.com/conordewey3/Medium-Stats-Analysis)

关于度量的几点注记

创建或选择新的度量标准当然不是一件容易的事情。出于这个原因,我们经常用一些更容易理解的简化问题来代替最初的问题。有很多有用的启发式方法,但是当考虑度量标准时,我经常会将事情分解为以下几点:

1。在这种背景下,成功是什么样的?

2。怎么才能量化呢?

由于任务的主观性质,分析是什么使得某个指标’‘好’‘或’‘坏’'往往更加困难。也就是说,有几个属性值得一提,它们通常与有效的指标相关联。下面是来自计划兄弟的一个简短列表:

比较的

一个好的衡量标准必须能够与时间、其他同等群体和竞争对手相比较。

明白

创建易于理解的指标。如果人们不能记住细节或讨论它们,这意味着度量标准令人困惑。

基于比率

每个指标都应该基于一个明确的比率。想想开车吧。行驶距离是信息性的,但不是可操作的。另一方面,每小时的距离是你可以行动的。

行为改变

一个好的指标可以产生数据,为必要的调整提供信息,并推动行动。根据这些信息,我会做哪些不同的事情?

记住这些属性,让我们开始一些分析。关于度量的更多信息,我强烈推荐查看 Julie Zhuo 和她关于设置度量的各种帖子。我们开始吧!

指标#1:视图

对于基于网络的内容来说,浏览量是一个主要因素。它们非常容易解释,而且非常有效地让我们自我感觉良好。就我个人而言,以下是我的五个点击率最高的帖子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可能会注意到,最上面的两个故事明显比其他的突出。经过进一步分析,我发现我一生中超过 70%的观点来自我在 Medium 上的 30 多个故事中的 2 个。这些帖子通过在 Python 中实现机器学习和数据操作中的概念来重点讲解它们。我想这是作家之间的一个共同主题——不是每篇文章都会是全垒打。

这进一步说明了观点并不能说明全部。如果有的话,他们正在衡量一个职位的范围。它影响了多少人。某个故事吸引眼球的数量非常具有误导性,并且经常鼓励点击诱饵标题和充满流行词汇的描述。

替代度量:Shares

有人可能会说观点可以被完全抛弃。这种衡量标准往往弊大于利,导致作者更多地关注吸引注意力,而不是创作有见地的作品。

如果你需要一个计数指标来衡量作品的范围,我建议用股份来代替。我认为这是一个进步的原因有几个:

  1. 分享仍然衡量帖子的范围,但也考虑内容,因为读者不会分享他们不喜欢的帖子。
  2. 股票惩罚肤浅的、点击诱饵的投资者,而不是奖励他们。

使用分享的一个可能的不利之处是,一个知名影响者的转发会被赋予与关注者较少的人相同的权重。

这是好是坏有待讨论。在量化范围的背景下,份额最初不足,将取决于发生的连锁效应。例如,当一个拥有 100,000 名粉丝的人在 Twitter 上转发你的文章时,它最初被记录为+1 份额。特定的有影响力的分享的额外权重必须以暴露给更多读者的形式出现,这些读者也将有机会分享帖子,等等。

即使考虑到这一点,我仍然认为在提供有意义的反馈方面,分享是一种进步。即使这并不能取代那些始终如一的观点,因为作家们无疑仍然对有多少人看过他们的故事感兴趣。

在评估一个帖子的真实范围和传播力时,应该提供分享和观点。

指标#2:读取

Reads 在剔除肤浅的文章方面做得更好,因为读者可能会点击它们,但一旦他们意识到自己没有从中获得任何价值,他们可能就不会读完了。

您可能还记得,通常应该避免计算指标。向朋友提起它们或者用它们来增强我们的自尊心可能会很有趣,但当涉及到驾驶行动时,它们就不够了。

正如人们所料,阅读量和浏览量之间存在明显的相关性,这使得我们无法从这个指标中获得任何洞察力。请注意,为了更好地了解下面的关系,我已经删除了异常值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阅读和观点有一点不同。虽然 Views 希望衡量范围,但 Reads 关注的是参与度。人们对材料的实际参与程度如何?这很难用计数度量来回答。

为了真实地捕捉一个帖子有多吸引人,我们需要使用更多基于比率的东西。幸运的是,Medium 已经有了这个问题的答案。

替代度量:读取比率

我现在不会深入讨论读取率,因为我们稍后会更深入地讨论它,但是让我们来看看一些显著的改进:

  1. 读取率根据视图数量进行调整,消除了之前影响读取的偏差。
  2. 阅读率在大多数类型的帖子中不相上下,无论是内容还是受欢迎程度。

阅读率被证明是评估我的文章可读性的一个非常有用的指标。归根结底,如果你不能让读者参与进来,你就无法向他们传递价值。

指标#3:读取率

终于有了一个关于中等统计的可行指标!正如我们刚才提到的,读取率是对传统读取计数的更有意义的改变。此外,它仍然可以很容易地理解为逗留和阅读帖子的观众的百分比。让我们通过阅读率来看看我在媒体上的热门帖子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这对我来说非常有趣。看起来我的第一篇媒体文章拥有最高的阅读率。当我回去回顾上面的热门故事时,我注意到了一个主题。几乎所有的都有点短;阅读时间不到 6 分钟。他们也有大量的图片和标题,使读者很容易浏览。

这看起来很直观,但是让我们通过评估帖子的阅读率和它们各自的阅读时间来进一步观察这种直觉。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如人们所料,有人通读帖子的可能性很大程度上取决于文章的长度。这绝对阻碍了我们对 Read Ratio 的解读。所以让我们解决它。

替代度量:调整后的读取比率

我们需要设计一种方法来告诉用户,相对于阅读时间相同的其他帖子,什么是好的,什么是坏的。为了做到这一点,我们可以标准化每个读取时间组内的读取比率,并报告 0 和 1 之间的新分数。

这个指标可以更准确地评估一个职位的参与度,但它带来了可解释性的问题。在选择度量标准时经常会有取舍;我们想回答手头的问题,但我们需要一些容易理解的东西。

让我们找到一个折中的办法。注意,我在这里要作弊一点。这不一定是它自己的独立指标,而是一个微妙的信息设计调整。通过将相对性能添加到已经可以解释的读取率中,用户可以从中推断出更多信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这并不惊天动地,但这个小小的变化却让世界变得不同。让我们回想一下强指标的四个特征:可比较、可理解、基于比率和行为改变。

最初,读比率是很好理解的,并且是基于比率的。然而,由于对阅读时间的偏见,它缺乏可比性和实质性的行为改变能力。

有了这个新的设计,所有的四个底座都被覆盖了,作家可以很容易地解释他们的作品相对于它的长度有多吸引人。

衡量标准 4:粉丝

在 Read Ratio 取得短暂成功后,我们又回到了虚荣指标上。注意 Fans 并没有告诉我们拍手的数量,只是简单的将每个拍手的用户注册为粉丝。不用说,这里可能有更多的内容。

对于粉丝,我们希望评估一些完全不同于我们之前的观点(范围)或阅读(参与度)。我们尤其希望量化影响。帖子的影响有多大?人们有多喜欢它?

为了改进这一指标,让我们保持简单,并采用基于比率的替代方法。对于每一个阅读这篇文章的人来说,有多少人受到了足够的影响而至少鼓掌一次?答案是粉丝比。

替代指标:调整后的风扇比率

一些中型用户已经谈到手工计算这一指标,所以我有点惊讶它没有被纳入中型统计产品。

通过使用 Fan Ratio 而不是 Fans,我们得到了使用 Ratio 而不是 count 的明显好处。最值得注意的是,它为我们提供了一个可比较的指标,并包含可操作的信息。以下是我关于粉丝比例的热门帖子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我在这里注意到的第一件事是,我关于自我提升的帖子比我的技术类帖子获得了明显更高的粉丝比率。

某些类型的故事比其他类型的故事有更好的粉丝比率吗?

幸运的是,我把所有的帖子都提交给了基于该主题的出版物。关于自我提升主题的帖子去了 The AscentThe Startup ,而更多的技术帖子去了forward Data SciencefreeCodeCampHackernoon 。最后,任何与设计相关的帖子通常都会提交给 UX 星球

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虽然基于 30 个故事的小样本,但这似乎证实了我们的猜测,即一些类型比其他类型表现得更好。然后,通过介绍出版物,可能只是一些出版物比其他出版物有更多的参与用户。在没有更多数据的情况下,很难明确回答这个问题,但是我的直觉告诉我选择第一个选项:流派。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这在我看来很有道理。尤其是涉及到自我提升岗位的表现。从长远来看,他们似乎是媒体中最受欢迎的,经常吸引大量的粉丝。他们中的许多人可以在任何情况下针对任何人,因此更有可能对某人产生积极影响,并创造一个粉丝。

Medium 甚至可以更进一步,使用其他基于内容的功能将相似的帖子聚集在一起,从而创建一个分析系统。

与其将一个帖子的粉丝比率与其类别中的其他帖子进行比较,不如将它与该类别中的其他帖子进行比较,以更准确地反映其真实的相对优势。

更好的 KPI

经过大量的思考和分析,我发现一篇成功的媒体文章通常具有以下特征:

  1. 它吸引读者,让他们有足够的兴趣读完。
  2. 它积极地影响读者,提供一些价值或享受。

在这篇文章中,我们已经触及了许多不同的指标和见解,但是真的就这么简单。你把读者带进来,给他们提供价值。

正如我们前面提到的,我们可以用调整后的读取比率来衡量参与度,用调整后的风扇比率来衡量影响。幸运的是,这两个因素似乎与这个特定样本上的 0.54 相关性有很强的相关性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

很高兴在这里看到某种程度上的线性关系,这意味着强势帖子通常在阅读率和粉丝率方面都表现良好。考虑到这一点,我考虑了归一化和加权平均值最终成为一个包罗万象的指标的几种可能性,但出于可解释性的考虑,我选择了不这样做。

“当人类的判断和大数据相交时,会发生一些有趣的事情。”——内特·西尔弗

如果我有自己的方式,当你把鼠标放在一个特定的帖子上时,我会提供类似下面的可视化效果。正如我们前面所探讨的,这提供了一个给定职位有效性的更好的表示,同时保持了可解释性和可比较性。参与和影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后的话

恭喜你坚持了这么久!我从来没有预料到这个项目会从一个简短的探索性数据分析转变为一个 2600 字的度量标准的深度挖掘。然而,我还有最后一点要说。

我们知道数据的力量有多大。我们知道它对几乎任何环境都是有用的——是的,包括写作。据推测,公司每天都变得越来越受数据驱动。

那么,这场运动是什么时候冲击 Medium 的作家平台的呢?

这种类型的分析应该适用于所有的作者,而不仅仅是数据科学爱好者和从业者。我们需要让内容创作者的数据分析民主化。从 one Medium Stats 页面中抽取 30 篇文章的样本,这些见解就成为可能。想象一下我们拥有更多数据和信息的可能性。

通过授权作家分析他们的内容并了解读者如何看待它,他们创作出更有影响力的更好的作品。

这不是一个小任务,但我相信这是可以做到的。你的移动,媒介。

感谢阅读!如果你想检查我的分析或者用你自己的媒体数据执行一个类似的项目,请访问我在 Github 上的回购:媒体统计分析

如果你对未来的更多帖子感兴趣,请确保关注我并订阅下面的我的简讯以接收任何新内容。想了解更多关于我和我在做什么,请查看我的网站。

解密生成式人工智能和 GANs

原文:https://towardsdatascience.com/decrypt-generative-artificial-intelligence-and-gans-16646dbb4426?source=collection_archive---------9-----------------------

大家好,

今天的话题是 AI 的一个非常令人兴奋的方面,叫做生成式人工智能。简言之,生成式人工智能指的是一种算法,它使机器能够使用文本、音频文件和图像等东西来创建/生成内容。在之前的帖子中,我谈到了变化的自动编码器以及它们如何用来生成新图像。我提到过它们是一个更大的模型集的一部分,称为生成模型,我将在下一篇文章中更多地讨论它们。所以我们在这里。

正如我在那篇文章中简要解释的,有两种模式。判别性和生成性。第一类是最常见的模型,如卷积或递归神经网络,用于区分/辨别数据中的模式,以便将它们归类。图像识别、皮肤癌诊断、以太坊预测等应用都属于判别模式的范畴。

后者能够在数据中生成新模式。因此,他们可以产生新的图像,新的文本,新的音乐。以严格的数学形式来说,判别模型试图估计后验概率 p(y|x),这是给定输入样本(手写数字的图像)的输出样本(例如手写数字)的概率。另一方面,生成模型估计联合概率 p(x,y),这是输入样本和样本输出同时为真的概率。实际上,它试图计算一组类的分布,而不是它们之间的边界。

你能想象可能性吗?嗯,你可以通过查看该领域的当前进展和一些现有的应用来了解它们。迄今为止,生成模型已经被用于从图像中产生文本,开发肿瘤学分子,发现新药,将梵高等艺术家的风格转化为新的图像。我敢肯定你听说过 Deepfakes,他们把名人的脸放在任何类型的视频上。如果你认为你能分辨真假,那就别想了。你不能。

如果你点击了上面的一些链接,你可能会注意到一些更有趣的东西。由于一种叫做 GANs 的东西,所有的应用都成为可能。GANs 或生成性对抗网络是大多数生成性应用背后的基础架构。当然,还有许多其他很酷的模型,如变分自动编码器、深度玻尔兹曼机器、马尔可夫链,但 GANs 是过去三年围绕生成式人工智能有如此多宣传的原因。

什么是生成性对抗网络?

2016 年,伊恩·古德菲勒(Ian Goodfellow)在过去十年最有前途的人工智能论文中引入了生成性对抗网络。它们是一种无监督的学习技术,基于一个简单的前提:

你想生成新的数据。你是做什么的?你建造两个模型**。你训练第一个产生假数据,第二个辨别真假。你让他们互相竞争**。

嘣!这就是了。我希望事情就这么简单。它不是。但这是 GANs 背后的主要原则。

好的,让我们进入一些细节。第一个模型是神经网络,称为生成器。生成器的工作是产生虚假数据,输入时只有噪音。第二个模型,鉴别器,接收真实图像和伪造图像(由生成器产生)作为输入,并学习识别图像是否是伪造的。当你让他们互相竞争并同时训练他们时,奇迹就开始了:

生成器在图像生成方面变得越来越好,因为它的最终目标是欺骗鉴别器。鉴别器变得越来越擅长区分真假图像,因为它的目标是不被愚弄。结果是我们现在有了来自鉴别器的难以置信的真实的假数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图是一个很好的类比,描述了 GAN 之间的功能。生成者可以被视为制造欺诈性文件的伪造者,而鉴别者可以被视为试图检测这些文件的侦探。他们参与了一场零和游戏,随着时间的推移,他们都变得越来越好。

到目前为止一切顺利。我们有模型,现在我们必须训练它们。这就是问题开始出现的地方,因为它不是我们用梯度下降和损失函数训练神经网络的标准方法。这里我们有两个相互竞争的模型。那么,我们该怎么办?

我们不确定。GAN 的优化是目前最活跃的研究领域之一,不断有新的论文出现。我将尝试解释这里的基础,我需要一些数学和一些博弈论。!!)来做到这一点。请不要离开。和我在一起,最后,一切都会变得有意义。

如何训练他们?

我们可以认为这里有一个极小极大博弈。引用维基百科的话:“一个玩家的马希民值是在不知道其他玩家的行动的情况下,该玩家能够确定得到的最高值;等价地,这是当其他玩家知道该玩家的动作时,他们可以强迫该玩家接受的最低值”

换句话说,第一个玩家试图最大化他的奖励,同时最小化他的对手奖励。第二个玩家试图完成完全相同的目标。

在我们的例子中,鉴别器试图最大化分配正确标签给真实数据和生成样本的概率。而生成器试图最小化鉴别器正确答案的概率

我们将损失表示为一个极大极小函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是什么?

鉴别器试图使函数最大化;因此,我们可以对目标函数执行梯度上升。生成器试图最小化函数;因此,我们可以对函数进行梯度下降。通过在梯度上升和下降之间交替,可以训练模型。

当鉴别器不能最大化函数,生成器不能最小化函数时,训练停止。用博弈论的术语来说,他们达到纳什均衡。

我希望你还在。这是主要的想法,被称为对抗性训练。当然,有几个经常出现的陷阱,例如:

  • 模型参数振荡并且从不收敛,
  • 鉴别器太成功了,以至于发生器梯度消失
  • 它对超参数高度敏感
  • 生成器产生有限种类的样本

在过去的几年里,科学家们为解决这些问题做出了巨大的贡献,我们可以说已经取得了很大的进展。只要在 arxiv-sanity 上快速搜索一下。不过,现在还早。记住。甘的存在不到三年。

我将用一些关键事实来结束我的发言。如果你跳过整篇文章,没关系。但是不要忽略这些:

  • 生成式人工智能用于从真实数据中生成新数据
  • GAI 最突出的模式是生成性对抗网络。
  • 甘的是两个神经网络参与了一个游戏。第一个试图制造新的虚假数据,第二个试图将它们与真实数据区分开来。随着训练的进行,他们都越来越擅长自己的工作。
  • 甘的训练还有很多工作要做
  • GAN 的实时应用是……(我该如何用一个词来形容呢?嗯嗯……)huuuuge。

菲尼托…

如果您有任何想法、评论、问题或者您只想了解我的最新内容,请随时在LinkedinTwitterinsta gramGithub或在我的

原载于 2018 年 9 月 13 日sergioskar . github . io

用石灰解密你的机器学习模型

原文:https://towardsdatascience.com/decrypting-your-machine-learning-model-using-lime-5adc035109b5?source=collection_archive---------1-----------------------

你为什么要相信你的模型?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最近,人们开始重新关注模型的可解释性。ML 专家能够理解模型可解释性在随后的业务适应中的重要性。模型可解释性的问题在于,很难以人类可以理解的方式定义模型的决策边界。LIME 是一个 python 库,它试图通过产生局部忠实的解释来解决模型的可解释性。下面是一个解释文本分类问题的例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example of an explanation by LIME for a binary classification model(atheism/Christian). The words (features) highlighted in blue support atheism.

本帖将涵盖以下主题:

  1. 信任你的模型的重要性
  2. 什么是石灰?
  3. 什么使 LIME 成为一个好的模型解释者?
  4. 【LIME 如何实现模型可解释性?
  5. 在分类问题上使用石灰的实例

信任你的模型的重要性

为了在模型中建立信任,我们运行多个交叉验证并执行拒绝集验证。这些模拟给出了未知数据上模型性能的汇总视图。这无助于理解为什么我们的一些预测是正确的,而另一些是错误的,我们也无法追踪我们的模型的决策路径。换句话说,我们无法理解它的学习或找出它的虚假结论。但是,如果我告诉你,有一种工具可以用人类可以理解的方式解释你的模型的决策边界,那会怎么样呢?这个魔法图书馆的名字叫莱姆。

什么是石灰?

LIME(局部可解释模型不可知解释)是一种新颖的解释技术,它通过学习预测周围的局部可解释模型,以可解释和忠实的方式解释任何分类器的预测。

LIME 在模型可解释性方面提供了什么? 1。一致的模型不可知论解释者[ LIME ]。
2。一种选择具有解释[ SP-LIME ]的代表性集合的方法,以确保模型在复制人类逻辑时行为一致。这个代表性的集合将提供对模型的直观的全局理解。

LIME 解释了一个预测,因此即使是非专家也可以通过特征工程对一个不可信的模型进行比较和改进。一个理想的模型解释器应该包含以下理想的特性:

  1. 可解释的
    它应该提供输入变量和响应之间的定性理解。应该很好理解。
  2. 一个解释不可能完全忠实,除非它是模型本身的完整描述。已经说过,它应该至少是局部忠实的,即它必须在被预测的实例附近复制模型的行为。
  3. 模型不可知论者 解释者应该能够解释任何模型,在提供解释的同时不应该对模型做任何假设。
  4. 全局视角
    解释者应向用户解释一个代表性集合,以便用户对模型有一个全局直觉。

什么使莱姆成为一个好的模型解释者?

让我们看看石灰是如何衡量这些特征的:

1。可解释的数据表示法 使用人类理解的表示法,而不管模型使用的实际特征。这被称为可解释的表现。一个可解释的表示会随着我们正在处理的数据类型而变化,例如:
1。对于文本:它表示有/没有单词。
2。对于图像:它表示超像素(相似像素的连续块)的存在/不存在。
3。对于表格数据:它是列的加权组合。

简而言之,LIME 的解释者即使是非专家也能理解。

2。保真度-可解释性权衡

我们想要一个忠实的(本地复制我们模型的行为)和可解释的(第一点)解释器。为了达到这一时间,最大限度地减少以下内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Explanation model equation

方程变量 f :原始预测值
x :原始特征
g :解释模型,可以是线性模型、决策树、 或者下降规则列出了 Pi*😒 的一个实例到 x 之间的邻近性度量,以定义 x 周围的局部性,它根据它们到 x 的距离来加权 z’(扰动的实例)* 第一项*:g 在 Pi 定义的局部性中逼近 f 的不忠实性的度量。 这在原始论文* 中被称为 位置感知损失 最后一项 :解释模型复杂度 g 的度量。例如,如果你的解释模型是决策树,它可以是树的深度,或者在线性解释模型的情况下,它可以是非零权重的数量

速记以备将来参考
1。x’(可解释表示)
:这个二进制向量是原始模型使用的实际特征的人类可理解版本。
2。z’(扰动样本):x’的非零元素的分数。
3。 f(z) :等级标签
4。 g(z’) :这是 LIME 学习的模型(解释模型)。

为了确保可解释性和局部保真度 最小化位置感知损失 ,同时保持第二项足够低以便人类能够解释。这将被引用为***ω(g)***用于后文 的其余部分,同时优化位置感知损失时间以实现局部保真度。

3。用于局部探测的采样 只是重申 g 是要学习的模型,z’是训练数据的一个实例, f (z) 是 y。为了创建完整的训练集,我们从x’执行随机均匀采样。换句话说,我们从一行 x 中创建多个z’(原始训练示例)。
然后这些由 Pi(x) 加权,以更加关注更接近 x 的z’
给定该数据集和标签,等式 1 被优化以学习解释模型。总而言之,LIME 提供的解释不依赖于原始模型的类型(模型不可知)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The black-box model’s complex decision function f (unknown to LIME) is represented by the blue/pink background, which cannot be approximated well by a linear model. The bold red cross is the instance being explained. LIME samples instances get predictions using f and weigh them by the proximity to the instance being explained (represented here by size). The dashed line is the learned explanation that is locally (but not globally) faithful.

4。稀疏线性解释
我们假设
1。 g(z’) = w . z’ (使解释模型线性)2 。局部感知损耗 =平方损耗
3。 Pi(z) : exp(-D(x,z)(2)/sigma(2))(样本的近似加权)
4。 D(x,z) :距离函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Locally-aware square loss

了解石灰算法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

K 是解释时要考虑的变量数量的限制。例如,对于文本,K 是要考虑的字数,对于图像,是超像素的数量,对于表格数据,是列的数量。为了实现这一点,我们使 Omega 趋向于无穷大,如果 size(w) > K. 总而言之,使用线性解释器来近似原始模型的决策边界。

第 2 部分:解释模型的子模型选择(SP-LIME)

LIME 旨在将模型的预测归因于人类可以理解的特征。为了做到这一点,我们需要在一组不同但有代表性的实例上运行解释模型,以返回一个非冗余的解释集,它是模型的全局表示。在介绍算法之前,让我们先了解一下先决条件:
1。 B (预算):用户愿意检查的说明数量
2。挑选步骤:从所有实例中挑选 B 实例的任务
3 . W (解释矩阵): n (样本数)
d’(人类可理解的特征)矩阵
4 . I(j): 解释空间中分量 j 的全局重要性
5。 V :说明
6 所考虑的特征。
【V,W,I】***:计算在集合 V 中的至少一个实例中出现的特征的总重要性。3)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Nonredundant coverage intuition

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Maximizing the weighted coverage function

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

算法 2 步骤 1。对所有实例(所有 x)运行解释模型
2。计算单个组件的全局重要性
3。通过迭代地添加具有最高最大覆盖增益的实例来最大化覆盖函数。
4。Return V(代表性非冗余解释集)

由此,我们可以看到 LIME 拥有理想模型解释器的所有 4 个理想属性。

在一个分类问题上使用石灰的实际例子

下面是运行泰坦尼克号经典分类案例的模型解释的代码。我用 LightGBM 来训练模型(点击了解 LightGBM 库,这里了解其优化)。

这是对训练数据中第 1 行的解释

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

orange colored features support class 1 and blue colored features support class 0

使用不同的数据实例运行最后两行,以获得不同的特征图。

这个解释有三个部分:

  1. 最左边部分显示预测概率
  2. 中间部分返回 5 个最重要的特性。对于二进制分类任务,它将是橙色/蓝色两种颜色。橙色的属性支持类别 1,蓝色的属性支持类别 0。Sex_le ≤0 支持 1 类。水平条上的浮点数代表这些特性的相对重要性。
  3. 各部分的颜色编码是一致的。它包含前 5 个变量的实际值。

使用下面的代码运行 SP-LIME

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Results of running SP-LIME

为了在我们的模型中建立信任,我们不仅需要向 ML 专家解释模型,还需要向领域专家解释,这需要人类可以理解的解释。这是通过创建一个模型不可知的本地忠实解释集来实现的,它甚至可以帮助非专家理解原始模型是如何做出决策的。通过创建代表性样本集,LIME 为用户提供了模型决策边界的全局视图。这个模型的可解释性对于人类与 ML 系统的有效交互是至关重要的。解释个人预测在评估信任度时很重要,称赞也支持模型选择中的集合验证。

参考文献

  1. *原文链接:【https://arxiv.org/abs/1602.04938 *
  2. Github 链接:https://github.com/marcotcr/lime
  3. 博客作者:论文作者:https://homes.cs.washington.edu/~marcotcr/blog/lime/

请在下面分享您的想法、反馈或建议。

用于协同过滤的深度自动编码器

原文:https://towardsdatascience.com/deep-autoencoders-for-collaborative-filtering-6cf8d25bbf1d?source=collection_archive---------0-----------------------

预测用户对电影的评价——实用教程

协同过滤是推荐系统使用的一种方法,通过从许多其他用户收集品味或偏好信息来预测特定用户的兴趣。协同过滤技术具有潜在的假设,即如果用户 A 与人 B 在一个问题上具有相同的品味或观点,则 A 更有可能在不同的问题上具有 B 的观点。

在这篇文章中,你将学习如何根据一个用户的喜好以及观看并评价了同一部电影和其他电影的其他用户的喜好来预测这个用户对这部电影的评价。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你喜欢这篇文章,想分享你的想法,问问题或保持联系,请随时通过 LinkedIn 与我联系。

目录:

  • 介绍
  • 深度自动编码器
  • 模型实现

1。简介

自动编码器是一种深度学习神经网络架构,在协作过滤领域实现了最先进的性能。在文章的第一部分,我会给你一个简单自动编码器及其扩展深度自动编码器背后的理论概述和基础数学。在第二部分中,我们将深入实践,我将一步一步向你展示如何在 TensorFlow 中实现这一技术。在本文中,我将只包括和评论模型中最重要的部分。整个模型、输入管道和预处理可以在相应的 GitHub 库中查看。

2.深度自动编码器

自动编码器

在我们关注深度自动编码器之前,我们应该讨论它的简单版本。自动编码器是一种人工神经网络,用于学习一组输入数据的表示(编码),通常是为了实现降维。

在架构上,自动编码器的形式是一个前馈神经网络,具有一个输入层、一个隐藏层和一个输出层(图 1)。输出层具有与输入层相同数量的神经元,用于重建其自身的输入。这使得自动编码器成为一种无监督学习的形式,这意味着不需要标记数据,只需要一组输入数据,而不是输入输出对。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig. 1. Typical AutoEncoder architecture.

自动编码器的隐藏层比输入层小是很有用的。这种效果迫使模型通过学习数据中的相关性来创建隐藏层中数据的压缩表示。

从输入层到隐藏层的过渡被称为编码步骤,从隐藏层到输出层的过渡被称为解码步骤。我们也可以用数学方法将这些转换定义为映射:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过将输入数据向量 x 乘以权重矩阵,添加偏置项,并对所得向量应用非线性运算 σ ,例如 sigmoid、tanh 或整流线性单元,来实现映射。

即将推出: 面向软件开发人员、数据分析师、学者和业内人士的高级深度学习教育

更多详情请看:www.deeplearning-academy.com

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

www.deeplearning-academy.com

自动编码器的训练

在训练时间期间,编码器获取输入数据样本 x 并将其映射到所谓的隐藏或潜在表示 z. ,然后解码器将 z 映射到输出矢量x’,该矢量(在最佳情况下)是输入数据 x 的精确表示。请注意,通常不可能精确重建输入 x

具有输出x’训练包括应用随机梯度下降以最小化预定义损失,例如均方误差:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度自动编码器

简单自动编码器的扩展是深度自动编码器(图 2)。从图 2 中可以看出,它的简单配对部分的唯一区别是隐藏层的数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig. 2. Deep Autoencoder architecture.

附加的隐藏层使自动编码器能够从数学上学习数据中更复杂的潜在模式。深度自动编码器的第一层可以学习原始输入中的一阶特征(例如图像中的边缘)。第二层可以学习与一阶特征的外观中的模式相对应的二阶特征(例如,在什么边缘倾向于一起出现方面——例如,形成轮廓或角检测器)。深度自动编码器的更深层倾向于学习甚至更高阶的特征。

总而言之:我们需要额外的层来处理更复杂的数据——比如我们在协同过滤中使用的数据。

3.履行

如前所述,你将学会预测用户对电影的评价。为此,我们将使用著名的电影镜头数据集。 MovieLens 是一个基于网络的推荐系统和在线社区,为用户推荐电影观看。

更具体地说,我们将使用 ml-1m.zip 数据集,该数据集包含 6,040 MovieLens 用户制作的约 3,900 部电影的 1,000,209 个匿名评级。我们需要的导入文件是 ratings.dat. 这个文件包含 1,000,209 行,都具有以下格式:user _ id::movie _ id::rating:time _ stamp。

例如 ratings.dat 中的第一行:

1::595::5::978824268 

意味着用户号。1 给电影编号。595 a 五星评级。时间戳可以忽略,因为它不会被使用。

我们实现的深度学习模型需要特定的数据结构来进行训练和测试。这个数据结构是一个 U x M 矩阵,其中 U 是用户数量,而 M 是电影数量。每行 iU 是唯一的用户 id,每列 jM 是唯一的电影 id。这种矩阵的可视化可以在图 3 中看到

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个矩阵中的每个条目都是用户对一部特定电影的评价。条目 0 表示用户没有给这部电影任何评价。例如,用户 1 给电影 3 的评级是 4 星,而电影 1 根本没有评级。

由于本教程的重点是深度学习模型的实现,所以这里不介绍从 ratings.dat 文件中制作用户电影矩阵的步骤。关于这个主题的更多问题,我想把你重定向到我的 GitHub 库,在那里你可以检查相应的 python 脚本。

训练和测试数据集

在模型可以被实现和训练之前,数据的另一个再处理步骤是必要的——将数据分成训练和测试数据集。这一步非常简单。到目前为止,我们有一个用户-电影矩阵,其中每一行都是评级列表。为了从该列表中获得训练集和测试集,我们必须从每一行中取出评级的子集,并且仅将它们用于训练,而将剩余的子集仅用于测试。

作为所述过程的一个例子,让我们考虑仅由 15 部电影组成的小得多的数据集。特定用户可能给了这些电影以下评级:

Movie Nr. : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15Rating:     5 0 2 4 0 0 2 1 5  1  0  4  5  1  3

请记住,0 表示电影未分级。现在,我们将由前 10 部电影组成的子集作为训练集,并假设其余的电影尚未分级:

Movie Nr. : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15Rating:     5 0 2 4 0 0 2 1 5  0  0  0  0  0  0

因此,原始数据的最后 5 个电影分级被用作测试数据,而电影 1-10 被屏蔽为未分级:

Movie Nr. : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15Rating:     0 0 0 0 0 0 0 0 0  1  0  4  5  1  3

这只是一个简单的演示如何获得不同的集合。在最初的 MovieLens 数据集中,我对每个用户只使用了 10 个电影评级进行测试,而其余的(绝大多数)用于模型的训练。

TensorFlow 实现

模型架构

深度自动编码器被实现为一个类,具有所有必要的操作,如推理、优化、丢失、准确性等。在课堂上。

在构造函数中,为权重和偏差设置了内核初始化器。在下一步中,网络中的所有权重和偏差都被初始化。权重呈正态分布,平均值为 0.0,方差为 0.02,而偏差在开始时都设置为 0.0。

在这个特定的例子中,网络有三个隐藏层,每个包含 128 个神经元。输入层(和输出层)的大小对应于数据集中所有当前电影的数量。

培养

给定输入数据样本 x (用户电影矩阵的一行),进行计算网络输出的正向传递。隐藏层使用 sigmoid 作为激活函数。请注意,最后一层既没有非线性也没有偏置项。

有了网络预测,我们可以计算这些预测和相应标签之间的损失(网络输入 x )。为了计算损失的平均值,我们还需要知道非零标签的数量,换句话说,就是用户在训练集中的总评分数。

网络的优化/训练步骤可能会显得有点棘手,让我们一步一步来讨论。给定一个输入 x 计算相应的输出。正如您可能已经注意到的,输入 x 中的大多数值都是零值,因为用户几乎肯定没有观看数据集中的所有 5953 部电影并对其进行评级。因此,建议不要直接使用网络的原始预测。相反,我们必须识别数据输入 x 中零值的索引,并将对应于这些索引的预测向量中的值也设置为零。这种对预测的操纵极大地减少了网络的训练时间,使网络有机会将其训练努力仅集中在用户实际做出的评级上。

在这个步骤之后,可以计算损失以及正则化损失(可选)。AdamOptimizer 将损失函数降至最低。请注意,该方法返回的是均方根误差(RMSE ),而不是均方误差(MSE ),测量精度更高。

测试

在训练阶段的一些时期之后,神经网络已经多次看到每个用户的训练数据集中的所有评级。此时,模型应该已经学习了数据中的潜在隐藏模式以及用户的相应协作电影品味。给定用户评级训练样本 x ,模型预测输出x’。该向量由输入 x 的重建组成(如预期的那样),但现在也包含输入 x 中先前零额定值的值。这意味着该模型对尚未分级的电影进行了分级。这种评级对应于用户的喜好——模型从数据中识别和学习到的喜好。

为了测量模型的准确性,需要训练和测试数据集。基于训练集进行预测。类似于训练阶段,我们仅考虑与测试集中非零值的索引相对应的输出值。

现在,我们可以计算预测和实际评级之间的均方根误差损失(RMSE)。RMSE 表示预测值和观察值之间差异的样本标准差。例如,0.5 的 RMSE 意味着平均而言,预测评级偏离实际评级 0.5 颗星。

培训结果

最后一步是执行培训过程并检查模型的性能。在这一点上,我不会进入构建数据输入管道、图形、会话等的细节。因为这些步骤是众所周知的。对这个话题感兴趣的读者可以在我的 GitHub 资源库中查看这些步骤。

在这里,您可以观察前 50 个时期的训练和测试性能。在 50 个时期之后,我们在测试集上得到预测和实际评级之间的 0.929 星偏差。

epoch_nr: 0,  train_loss: 1.169, test_loss: 1.020
epoch_nr: 10, train_loss: 0.936, test_loss: 0.959
epoch_nr: 20, train_loss: 0.889, test_loss: 0.931
epoch_nr: 30, train_loss: 0.873, test_loss: 0.923
epoch_nr: 40, train_loss: 0.859, test_loss: 0.925
epoch_nr: 50, train_loss: 0.844, test_loss: 0.929

如果你喜欢这篇文章,想分享你的想法,问问题或保持联系,请随时通过 LinkedIn 与我联系。

参考

** [## artem-opper Mann/Deep-auto encoders-For-Collaborative-Filtering

深度自动编码器-用于协同过滤-使用深度自动编码器预测电影分级。

github.com](https://github.com/artem-oppermann/Deep-Autoencoders-For-Collaborative-Filtering)

http://proceedings.mlr.press/v27/baldi12a/baldi12a.pdf

http://deeplearning.net/tutorial/SdA.html**

使用 Tensorflow 的深度自动编码器

原文:https://towardsdatascience.com/deep-autoencoders-using-tensorflow-c68f075fd1a3?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在本教程中,我们将探索一种称为自动编码器的无监督学习神经网络。

因此,自动编码器是用于在输出层再现输入的深度神经网络,即输出层中神经元的数量与输入层中神经元的数量完全相同。考虑下图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此图显示了典型深度自动编码器的结构。自动编码器架构的目标是在输出层创建输入的表示,使得两者尽可能接近(相似)。但是,自动编码器的实际用途是确定输入数据的压缩版本,同时具有最低的数据丢失量。我这么说的意思是:你在开发机器学习项目的时候一定听说过一个术语,叫做主成分分析。PCA 的概念是在数据集具有大量参数的情况下,为模型的训练找到最佳和相关的参数。

自动编码器以类似的方式工作。该架构的编码器部分将输入数据分解为压缩版本,确保重要数据不会丢失,但数据的总体大小会显著减小。这个概念叫做降维。

这个概念的缺点是,压缩数据是一个黑盒,也就是说,我们不能确定数据在压缩版本中的结构。请记住,假设我们有一个包含 5 个参数的数据集,我们在这个数据上训练一个自动编码器。为了更好地表示,编码器没有省略一些参数,而是将参数融合在一起以创建具有更少参数的压缩版本(将参数数量从 5 个减少到 3 个)。

因此,自动编码器有两部分,即编码器和解码器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编码器压缩输入数据,解码器反过来产生数据的未压缩版本,以尽可能精确地重建输入。

我们将使用 Tensorflow 创建一个自动编码器神经网络,并在 mnist 数据集上测试它。那么,让我们开始吧!!

首先,我们导入相关的库并读入 mnist 数据集。如果数据集存在于您的本地机器上,那很好,否则它将通过运行以下命令自动下载

接下来,为了方便起见,我们创建了一些常数,并预先声明了我们的激活函数。mnist 数据集中的图像大小为 28x28 像素,即 784 像素,我们将把它压缩为 196 像素。你可以一直深入下去,进一步减小像素尺寸。但是,过度压缩可能会导致自动编码器丢失信息。

现在,我们为每一层的权重和偏差创建变量。然后,我们也使用之前声明的激活函数来创建层

通常不使用tf.variance_scaling_initializer()。但是,我们在这里使用它是因为我们要处理不断变化的输入大小。因此,占位符张量形状(占位符用于输入批次)会根据输入大小的形状进行自我调整,从而防止我们陷入任何维度错误。隐藏层是通过简单地将前一个隐藏层作为具有相关权重和偏差的输入馈送到激活函数(ReLu)中来创建的。

我们将为这个神经网络使用 MSE 损失函数,并将其通过 Adam 优化器。你可以随时玩这些有趣的结果。

现在,我们定义时期数和批量大小,并运行进程。我们使用来自 mnist 的效用函数来获得每个新批次:mnist.train.next_batch()。此外,我们将在每个时期后输出训练损失,以监控其训练。

最后,我们将编写一个小的绘图函数来绘制原始图像和重建图像,看看我们的模型效果如何。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Final output

在这里,我们可以看到重建并不完美,但非常接近原始图像。请注意,2 的重建看起来像 3,这是由于压缩时的信息丢失。

我们可以通过超参数调整以及在 GPU 加速器上训练来改进自动编码器模型。

好了,这是一个在 Tensorflow 上从头开始构建的深度(或堆叠)自动编码器模型。完整的代码点击下面的横幅。

下次见!!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度卷积神经网络

原文:https://towardsdatascience.com/deep-convolutional-neural-networks-ccf96f830178?source=collection_archive---------14-----------------------

这篇文章的目的是在深入阅读描述深层架构的原始出版物之前,作为对深层架构的一个很好的介绍。

我觉得研究界缺乏帮助。一个研究人员花一点点时间制作漂亮的可视化效果、仪表盘、演示甚至视频,可以节省所有跟在他/她后面的研究人员的时间,创新会发展得更快。

我的贡献是通过直觉理解如此使用的深度卷积神经网络作为计算机视觉问题的默认选项的演变。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DenseNet — Example of how networks will be demystified

指数

0.1: 卷积运算

0.2: 1x1 卷积

(1): LeNet — LeCun 1998 — 论文 …………(TBI)

(2)Alex net—krijevsky 2012—论文

(3):Google net/Inception—Szegedy 2014—Paper……(TBI)

(4): VGG —西蒙扬/齐塞曼 2014 — 论文 …………(TBI)

(5)ResNets for ImageNet—何 2015 — 论文

(6)dense nets for ImageNet

(7):fractal nets—Larsson—2016—论文 ……………(TBI)

(8):—胡— 2018 — 论文

(9): MobileNets — Howard — 2016 — 论文 ………………。(TBI)

深入研究监督学习

原文:https://towardsdatascience.com/deep-dive-into-supervised-learning-e7952c0692e9?source=collection_archive---------11-----------------------

当你在学校的时候,你被要求练习很多加减法题。最初,你必须检查你得出的答案是对还是错,但过了一段时间,你对自己的答案变得有信心,认为它是正确的。这基本上就是监督学习

在监督学习中,算法由示例输入和期望输出提供。算法的工作是建立输入和输出之间的映射。在足够数量的输入之后,该算法能够以一定的精度预测输出。

下面是展示 Alvin 的视频,它是人工智能系统通过观察人的驾驶来学习。正如我所说,第一步是训练一个网络/算法来驾驶。在训练人类驾驶员时,转向角度被提供给 Alvin。阿尔文的工作是学习“如何驾驶”。

在上面的视频中,有一个图像如下所示。它表示实时算法的输入和输出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们从监督学习开始,但在此之前,您应该熟悉一些符号:

  • m:训练实例的数量
  • x:输入变量/特征
  • y:输出变量/目标变量
  • (x,y):训练示例
  • n:输入变量或特征的数量
  • θ:参数或权重。算法的工作是选择合适的权重

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总之,我们提供学习算法的训练样本。它为我们提供了一个假设(h)。假设在提供一些输入时会给我们预期的输出。假设由下式给出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我们想要训练“m”个样本时,上述等式可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,θ表示为假设预测值的平方和减去“m”个训练样本的实际值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了最小化 J(θ),我们使用了被称为梯度下降的算法。它可以解释如下:想象你站在一个山顶上,你想向最陡的下坡方向迈出一小步,这可以让你尽快下山。梯度下降也是如此。你从一个点开始应用梯度下降,在一个新的点结束,重复同样的动作,直到你到达最小点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

假设只有一个训练样本,我们将进行梯度下降的推导

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在θ由下式给出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注:上式中的α是学习率。这就像下山时你想走多大的步。如果你步子迈得太小,下山会花很长时间。如果你的步长太大,你可能会超过局部最小值。如果有“m”个训练样本,则广义方程由下式给出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我会给你一个图像,让你看到梯度下降是行动。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上述梯度下降也被称为批量梯度下降。这意味着每次该算法将针对所有训练示例运行。梯度下降还有一种变化,称为随机梯度下降递增下降。如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机梯度下降法的优点是根据误差相对于单个训练样本的梯度来更新参数。已经观察到,对于大数据集,随机梯度下降更快。

如果你发现我的帖子有不一致的地方,欢迎在评论中指出。感谢阅读。

深入研究支持向量机

原文:https://towardsdatascience.com/deep-dive-into-support-vector-machine-654c8d517103?source=collection_archive---------16-----------------------

支持向量机是机器学习领域中最流行的监督分类器之一。让我们了解一下支持向量机(SVM)背后的直觉。请注意,在接下来的所有章节中,支持向量机将被称为 SVM。

让我们建立直觉

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 1: Improper Classifiers

考虑上面的分类器。有两类:

  • +1 ':暗数据点。
  • -1 ':轻数据点。

那么,以上的量词有什么问题呢???如果我们仔细查看图 1 中的分类器,我们无法确定这两个类的正确区域。超平面(超平面是将两个类分类的平面。这里,分类器 A 中的虚线)看起来非常接近于类“ -1 ”。分类器 B 中的超平面看起来更接近于类“ +1 ”。分类器 C 中的超平面看起来更接近于类“ -1 ”。看起来,如果超平面更接近一个阶级,那么它更偏爱那个特定的阶级而不是另一个阶级。如果是这样的话,那么分类器出错的机会将会更大,如图 2 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 2: The red coloured data point is mistakenly classified by the classifier

可以观察到,最好的分类器应该是超平面与两个类的距离相等的分类器(没有偏好)。如果班级和超平面之间的距离最大,那就更好了。这就是 SVM 的情况,如图 3 所示。注:偏爱的概念只是为了理解直觉。没有这样的想法被用来制定 SVM。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3: The red coloured dashed line is the optimal hyper plane. The green coloured dashed lines define the boundary for each class. And the data points with green coloured thick outline that are on the boundary of the class are called support vectors. Hence, the name Support Vector Machine

图 3 的标题很好地描述了该图。关于 SVM 有趣的事情是,只有支持向量被认为是确定最佳超平面。我们将很快证明这一说法。

问题 1:如果数据点不能像图 3 中那样被一个直的超平面分隔开会怎样???

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 4

如果我们考虑图 4,在二维空间中不存在可以对图中所示的数据点进行分类的超平面。但是,SVM 有一个解决方案,这就是为什么 SVM 很有趣。在这种情况下,给定的空间被转换到更高维度的空间,使得数据点在新的空间中是可分离的。因此,数据点被分类到更高维度的空间中,并被映射回原始空间。这个概念似乎有些棘手。因此,仔细查看下面显示的观想。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 5: Visualisation of transformation from given space to higher dimensional, classify data points in the new space and then map everything back to the original space. Source: https://www.youtube.com/watch?v=3liCbRZPrZA

图 5 中的可视化给出了从给定空间到更高维度空间的转换的清晰概念。在上面的可视化中,粉红色的超平面可以很容易地对高维空间中的数据点进行线性分类。因此,图 4 中的数据点可以如图 6 所示进行分类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 6

核函数的作用和问题 2

SVM 的另一个问题是,转换到更高维度空间,然后确定新空间中的最优超平面,然后转换回原始空间的过程非常复杂,并且开销很高。例如,如果在 100 维空间中有 1000 个特征,并且如果 100 维空间被转换成 1000 维空间,那么每个特征向量将具有 1000 个分量和 1000 * 1000 次计算**(如此多的计算是因为超平面被描述为 W.X + b = 0,其中 X 是特征向量)**将被要求确定最佳超平面,并且超平面将再次被映射回原始空间。而且这整个过程开销很大。

解决上述问题的方法是 k ernel 函数。关于核函数有趣的事实是,核函数做了上面的映射,而实际上没有去更高维的空间。换句话说,核函数进行上述映射,而不实际执行高维空间中的所有上述计算。

使用如图 7 所示的多项式核函数ϕ((a,b)=(a,b,a + b)来完成图 5 所示的可视化中的变换。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 7: Training example of SVM with kernel given by ϕ((a, b)) = (a, b, a² + b²). Source: https://en.wikipedia.org/wiki/Support_vector_machine

请注意,只有当问题包含点积或内积时,核函数才适用。幸运的是,SVM 的公式依赖于点积(将在接下来的章节中被证明)。

数学建模

让我们来破解支持向量机背后的数学。给定,训练集{(Xᵢ,Yᵢ)其中 i=1,2,3,…,n},Xᵢ ∈ ℜᵐ,Yᵢ ∈ {+1,-1}。这里,Xᵢ是 iᵗʰ数据点的特征向量,Yᵢ是 iᵗʰ数据点的标签。标签可以是正类的“+1”或负类的“-1”。取值“1”是为了数学上的方便。

设 Wᵢ是垂直于决策边界(最佳超平面)的向量,Xᵢ是未知向量。那么 Xᵢ向量在 Wᵢ单位向量上的投影将确定该未知点属于正类还是负类,如图 8 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 8

注:在接下来的章节中,Wᵗ或 w 上升到 t 表示 w 转置。并且两个向量 w 和 x 之间的点积与 Wᵗ和 x 之间的矩阵乘法相同。

基本上,对于具有由 WᵗXᵢ + b = 0 给出的判定边界的分类器,可以说:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 9

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 10

现在,如果我们取所有’+1 ‘模式的最小值,那么它将是某个常数ϵ,如果我们取所有’-1 '模式的最大值,那么它将是某个常数-ϵ.这里,ϵ和-ϵ代表支持向量。在图 10 中,具有粗边界的数据点是支持向量。所以,它可以写成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 11

现在,如果我们用 1/{ϵ} 缩放上述不等式,那么最优超平面将保持不变。所以,我们用相同的符号来表示缩放后的向量。所以,它可以写成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 12

可以观察到,如果上述不等式乘以相应的 Yᵢ,则上述断言可以由单个表达式描述:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 13

在图 12 的 1ˢᵗ方程中, Yᵢ=1 并且当 1 乘以 RHS 时,我们得到 1。而在 2ⁿᵈ方程 Yᵢ=-1 中,当 -1 乘以 RHS (-1) 则得到 1 。因为,负数被相乘,所以符号改变。

设, X⁺ 为正类下的支持向量, X⁻ 为负类下的支持向量。然后,wx⁺+b = 1wx⁺= 1-b。同理,wx⁻+b =-1wx⁻=-1-b。然后,向量 (X⁺ — X⁻)W 向量的单位向量上的投影给出了两个类的支持向量之间的分离间隙的宽度或余量。边距的宽度由下式给出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 14: Width of the separation gap

SVM 的目的是最大化分离间隙的宽度。这意味着最大化 2/||W||与最小化||W||相同,与最小化||W||相同,与最小化(1/2)||W||相同,同样的东西可以写成(1/2)WᵗW. ),这样做是为了数学上的方便。此外,这样做将问题转化为二次优化问题,二次优化问题没有局部最大值。除此之外,二次优化问题的原始和对偶总是相同的。SVM 的基本问题可以简单地写成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 15: The problem for a hard SVM

在真实场景中,数据不是严格线性可分的。因此,通过引入松弛变量**‘ξ’和惩罚项‘C’对问题进行了修正。这里,‘C’是一种正则化参数。实际上,如果‘C’的值很大,这意味着它不会忽略任何错误,而是会惩罚几乎每个错误,在这种情况下,它可能无法找到最佳的 Wb 。反之,如果‘C’的值非常小,则意味着它忽略了几乎所有的错误,然后 Wb 将获得任意随机值。因此,我们必须使用交叉验证来选择合适的值‘C’,它必须在很小和很大之间。因为每个错误并不都一样糟糕,所以它使用松弛变量‘ξ’**,这是数据点和另一边的类的边距之间的距离,如图 16 所示。如果一个数据点的 ξᵢ 越少,那么错误就越少,并且 C*ξᵢ 也会越少。所以,对错误的惩罚会少一些。如果一个数据点的 ξᵢ 高,则错误更严重,相应地 C*ξᵢ 也会更多。因此,对这一错误的惩罚将会很高。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 16: SVM with optimal hyper plane and slack variables

因此,图 15 中的问题可以改写为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 17: Problem for Soft SVM

硬 SVM 试图严格分类的数据点,但在现实中,这是不可能的。因此,很少考虑错误,软 SVM 开始发挥作用。

在继续之前,请考虑以下几点:

  1. 理解等高线图对于理解拉格朗日的概念是非常重要的。如果您不熟悉等值线图,请仔细浏览此链接中的视频:https://www . khanacademy . org/math/multivariable-calculus/multivariable-derivatives/gradient-and-direction-derivatives/v/gradient-and-contour-maps
  2. 如果您不熟悉拉格朗日法,强烈建议您浏览给定链接中的每个视频,以便更好地理解:https://www . khanacademy . org/math/multivariable-calculus/applications-of-multivariable-derivatives/la grange-multipliers-and-constrained-optimization/v/constrained-optimization-introduction
  3. 如果你想跳过第 2 点中提到的视频,那么只需记住以下几点:(I)如果问题是找到极值(最大值或最小值),那么使用拉格朗日。(ii)拉格朗日将约束优化问题转化为无约束优化问题。
  4. 约束优化问题的拉格朗日函数由主问题以及所有约束和拉格朗日乘子组成。对于每个约束,使用拉格朗日乘数。
  5. 对偶:根据对偶,每个优化问题都有另一个与之相关的问题,因此可以从前者派生出来。原问题被称为**‘原始’,衍生问题被称为‘对偶’**。在二次优化问题中,原始问题和对偶问题的解是相同的。

希望你已经考虑了上述几点。因此,图 17 中的等式是最主要的问题。但是,我们实际上对对偶问题感兴趣。因为由特征向量和核函数之间的点积组成的对偶问题可以用于非线性扩展(换句话说,对于不可线性分离的数据点的非线性扩展)。

这里,拉格朗日乘数用于二元化。拉格朗日乘子的总数等于原问题中约束的总数。由于图 17 中的等式有两个约束,拉格朗日函数中将使用两个拉格朗日乘数。拉格朗日函数如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 18: The Lagrangian

图 18 中的等式(L)是拉格朗日乘数,μ,λ是拉格朗日乘数,μ,λ ≥ 0。拉格朗日方程的最小值是通过对变量取偏导数并使它们等于零(根据卡鲁什-库恩-塔克(KKT)条件)得到的。给定问题的 KKT 条件如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 19: The KKT conditions

注:这里, 1/Yᵢ 始终等于 Yᵢ 。因为,对于 yᵢ= 11/yᵢ= 1/1 = 1 =yᵢ对于 yᵢ=-11/yᵢ= 1/(-1)=-1 =yᵢ。因此,在接下来的章节中, 1/Yᵢ 总是被写成 Yᵢ

根据图 19 中的 1ˢᵗ方程,它可以写成:

W=∑ᵢⁿ μᵢYᵢXᵢ对于 i = 1,2,…,n————>(a)

现在,根据图 19 中的 3ʳᵈ方程,可以写成 C = μᵢ+λᵢ 。因此,对于μᵢc,λᵢ = 0 ,因此ξᵢ = 0 。因此,图 19 中的 6ᵗʰ方程: μᵢ⋅[Yᵢ(WᵗXᵢ+b) -1 + ξᵢ] = 0 可以改写为:

yᵢ(wᵗxᵢ+b)= 1—————>(b)

等式 (B) 描述了支持向量。对于yᵢ= 1 wᵗxᵢ+b = 1,即位于类**'+1’边界上的点。对于yᵢ=-1 wᵗxᵢ+b =-1**,即位于类 ‘-1’ 边界上的点。因此,最佳超平面取决于支持向量。现在,等式 (B) 可以重写为:

b = Yᵢ-WᵗXᵢ使得 0<μᵢ<c————>©

因此,方程 (A) 和方程 © 给出了最优的 W 和最优的 C ,从而得到最优的超平面( WᵗXᵢ + b = 0 )。此外,在等式 (A) 中可以观察到 W 可以完全描述为训练模式 Xᵢ 的线性组合。现在,将最优值 Wb 放入拉格朗日方程,对偶优化问题为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 20: Dual optimisation problem

注意,根据图 20 中的等式,完整的算法可以用数据点之间的点积来描述( XᵢᵗXⱼ )。因此,核技巧可用于非线性扩展,即任何核函数可用于在更高维度空间中寻找点积,如xᵢᵗxⱼ=k(ϕ(xᵢ),ϕ(xⱼ)】。一些流行的内核函数有:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kernel Functions

谢谢,这就是 SVM。希望这篇文章是有用的。

参考

[1] **P. H .温斯顿,学习:支持向量机。**网址:https://OCW . MIT . edu/courses/electrical-engineering-and computer-science/6-034 人工智能-2010 年秋季/讲座-视频/讲座-16-学习-支持-向量-机器/

【2】**p . p . Sastry,支持向量机——导论,获得最优超平面。**网址http://nptel.ac.in/courses/117108048/32

[3] M. Awad,R. Khanna,高效的学习机器,APress,2015,Ch。3,4,第 39-80 页。

深入探讨基于电子邮件网络的推荐

原文:https://towardsdatascience.com/deep-dive-on-e-mail-network-based-recommendations-6666c46a8f4f?source=collection_archive---------19-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source: unsplash.com

组织网络分析和沟通内容分析系列文章

遵循第 1 部分:我们综合了各种措施,以建议的形式向员工推断进一步的见解,告诉他们如何改善沟通,以及向谁寻求建议和支持。此外,通过这些建议,员工能够接触到影响者和顾问,从而对组织产生影响。

这些建议是模块化的,由于其 API 服务实现,可以集成到任何系统中。在本文中,我们只关注两个例子:

1.为了增加你对公司的影响,请联系。

2.改善与的沟通和协作。

假设已经同意被推荐。

以下是这些建议的样子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source: own

1。增加你对组织的影响

每个人都想在他们的组织中有更大的影响力,但有时很难知道怎么做。在一个大型复杂的组织中很难驾驭,甚至很难知道下一步该做什么来增加自己的影响力,也很难让别人听到你的声音。出于各种原因,员工需要被赋予能力、联系、支持和培训。我们专注于社交方面和沟通流程优化。

我们的影响力推荐器是如何工作的?

想象一下这样一种情况:员工 Maria 负责、透明、守时,并让她的经理 Laura 随时了解情况。Maria 始终如一,并在与其他相关同事的沟通中应用相同的原则。像 Maria 这样的员工是影响组织的第一要素。想象一下,Maria 与组织中合适的人的联系仍然不够紧密。下一步是确认 Maria 的人脉还不够广(否则推荐就没什么意义了,她认识合适的人)。一旦我们筛选出关键影响者,并且我们知道 Maria 不在其中,我们将继续找出 Maria 是否已经与公司中的任何高层影响者有联系——Maria 应该与至少几个影响者有松散的联系。

下一步,我们要确保这些影响者(潜在的直线经理)不在 Maria 的实际近距离沟通范围内(如果在内,可能是她的直线经理或特定的组织沟通环境已经使她能够接触到)。我们确定了影响者的交流群,Maria 与这些影响者有合理的交流,但交流不多。从这些聚类中,我们识别出属于同一聚类的其他员工 John 和 Rita(不是识别出的影响者),并且具有与实际影响者的高边介数中心性(这意味着影响者与 John 和 Rita 有良好的沟通,因此可以提供关于 Maria 的支持的参考)。

一旦我们确定了约翰和丽塔,我们继续向玛丽亚推荐他们——通常,我们推荐三个人。现在,由 Maria 和 John 或 Rita 进行交流并安排他们的合作。下面,您将看到该用例的简单图表形式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source: own

2。改善您与同事的协作

对于依赖沟通的员工来说,能够有效地进行沟通是非常重要的。这对大多数办公室职员来说是真实的,而对蓝领工人、外勤人员等来说就不那么真实了。我们将沟通作为一种工具,用于识别需要改进沟通和协作的对手。

我们的协作推荐器是如何工作的?

想象一下,迈克尔是一名高度参与的员工,沟通是他的主要工具之一。我们关注电子邮件,但这也可以是任何有来源和目的地的书面交流,无论是即时聊天、评论还是反馈。随着迈克尔交流或交换电子邮件,将会出现交流模式、衰减和高峰——这取决于工作如何发展、关系如何变化以及公司结构如何改变整体交流。我们分析了迈克尔的交际群(他经常与之交流的人),同时也包括时间方面。我们得出的结论是,迈克尔的沟通率相对较高,这意味着他是很多话题的关键联系人。

接下来,在我们确定了与迈克尔关系密切的人之后,我们应用时间序列分析来理解交流模式是如何演变的。我们专注于容易衰退的交流模式——无论出于什么原因。一旦我们确定了几个与 Michael 沟通最多的员工,我们就应用边缘中间性来了解它是如何随时间变化的。我们终于找到了汤姆和杰森,迈克尔与他们的交流发生了变化。这种沟通的变化可能是由于任何人的角色、位置或组织的变化,然而这些都没有改变——然而,沟通模式确实发生了变化。

最后,通过我们的推荐器实现,我们建议 Michael 与 Tom 和 Jason 会面,讨论可能的改进选项。很明显,还有其他原因超出了我们的概念范围,但这需要由上述员工来判断情况并根据建议采取行动。这个概念的主要价值是我们的推荐者引入的机会,以改善员工之间重要的缺乏沟通。

下图以简化的形式展示了这一概念:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source: own

产品定义的概念超出了本文的范围。作为一个提示,产品经理会将这些产品定义为用户友好且在隐私范围内。虽然一些措施已经到位,但我们不会透露用于确定推荐同事的影响者的姓名。此外,我们假设被推荐的员工或教练已经同意被推荐,并愿意支持其他员工。

我们的推荐人可以作为开始谈话和改善合作的“借口”。通常情况下,员工只有在没有其他选择的情况下才能交流和合作,这往往只是由于历史、背景,甚至可能是由于个人的不兼容。我们的推荐者支持组织打破僵局,将人们聚集在一起,最终提高沟通效率和生产力。

我们结合和加权各种算法,类似于集成方法。我们使用的一些度量标准是中枢特征向量中心性卢万模块性边缘中间性中心性。我们还利用位置和角色等上下文数据。在未来,我们计划添加业务逻辑和贡献或已经与直线经理达成一致的目标。

本文是 ONA @豪夫系列文章的一部分


  1. 如何使用企业电子邮件分析来揭示隐藏的明星并确保机会均等( Part 1 )
  2. 基于电子邮件网络的见解的技术概述(第 2 部分
  3. 深潜电子邮件网游推荐( 第三部 )
  4. 如何利用趋势发现隐藏的明星,并致力于一个完美的项目?人物分析会让你成为明星
  5. 如何实现基于电子邮件内容的分析(第 5 部分)

自我学习人工智能代理 III:深度(双)Q 学习

原文:https://towardsdatascience.com/deep-double-q-learning-7fca410b193a?source=collection_archive---------2-----------------------

让深度 Q 学习再次变得伟大。关于自学习人工智能代理的系列文章的第三部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自学习人工智能代理系列—目录

如果你喜欢这篇文章,想分享你的想法,问问题或保持联系,请随时通过 LinkedIn 与我联系。

0.介绍

在“自我学习 AI-Agents”系列的第二篇文章中,我向您介绍了作为一种算法的深度 Q-Learning,它可以用来教会 AI 在离散动作空间中的行为和解决任务。然而,这种方法并不是没有缺点,有可能导致人工智能代理的性能降低。

在下文中,我将介绍一个常见的问题深度 Q-Learning ,并向您展示如何将普通实现扩展到我们所说的双重深度 Q-Learning ,这通常会提高 AI 代理的性能。

怎么才能练成深度双 Q 学习?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

OpenAI 的体操横竿问题的这个例子是用这里介绍的双 Q 学习算法解决的——以及上一篇文章中的一些技术。文档齐全的源代码可以在我的 GitHub 库中找到。我选择了 CartPole 作为一个例子,因为这个问题的训练时间非常短,你可以很快地自己重现它。克隆存储库并执行 run_training.py 来启动算法。

1.动作值函数

在本系列的前两部分中,我介绍了动作值函数 Q(s,a) 作为期望回报G _ tAI 代理将通过从状态 s 开始,采取动作 a ,然后遵循某个策略 π 来获得。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Eq. 1 Action value function Q(s,a).

等式的右边部分也被称为时间差目标(TD-目标)。TD-Target 是代理人在状态中为动作 a 获得的即时奖励与贴现值**Q(s ')****a '之和,贴现值是代理人将在下一个状态 s’ 中采取的动作。

Q(s,a) 告诉代理一个可能动作的值(或质量)s。给定一个状态 s ,动作值函数计算该状态下每个可能动作 a_i 的质量/值作为标量值。更高的质量意味着对于给定的目标更好的行动。对于一个人工智能代理,一个可能的目标是学习如何走路或如何与人类棋手下棋。

**遵循贪婪策略 w.r.t Q(s,a) ,意味着采取导致 **Q(s,a’)的最高值的动作导致贝尔曼最优性方程,给出了 Q(s,a) ( 参见第一篇贝尔曼方程也可用于递归计算任何给定动作或状态的所有值***【Q(s,a)】***。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Eq.2 Bellmann Optimality Equation.

在系列文章的第二篇文章中,介绍了时间差异学习作为估计值 Q(s,a) 的更好方法。时间差异学习的目标是最小化 TD 目标和***【s,a】***之间的距离,这表明 Q(s,a) 向其在给定环境中的真实值收敛。这被称为 Q-Learning

2.深度 Q-网络

我们已经看到,神经网络方法被证明是估计 Q(s,a) 的更好方法。主要目标保持不变。它是 Q(s,a) 与 TD-Target 的距离(或 Q(s,a) 的时态距离)的最小化。这个目标可以表示为误差损失函数的最小化:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Eq. 3 Squared error loss function.

深度 Q 学习TD-Targety _ IQ(s,a) 分别由两个不同的神经网络估计,这两个网络通常称为 Target-和 Q-网络(图 4)。参数 θ(i-1) (权重、偏差)属于目标网络,而 θ(i) 属于 Q 网络。

根据行为策略 (a|s)选择 AI 代理的动作。 另一边,贪婪目标策略 π(a|s) 只选择动作*【a’即最大化【Q(s)*,即用于计算 TD-Target。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig. 1 Target,- and Q-Network. s being the current and s’ the next state.

误差损失函数的最小化可以通过深度学习中使用的常用梯度下降算法来实现。

即将推出 : 面向软件开发人员、数据分析师、学者和行业专家的高级深度学习教育,旨在加快向人工智能职业的过渡。

更多详情请看:www.deeplearning-academy.com

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

www.deeplearning-academy.com

3.深度 Q 学习的问题

深度 Q 学习已知有时会学习不切实际的高行动值,因为它包括对估计行动值的最大化步骤,这往往倾向于高估而不是低估的值,这可以在 TD-Targety _ I的计算中看到。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在实践中,高估是否会对人工智能代理的性能产生负面影响,这仍然是一个或多或少有待解决的问题。过于乐观的价值估计本身并不一定是一个问题。如果所有的值都一致地更高,那么相对的动作偏好被保留,并且我们不期望得到的策略会更差。

然而,如果高估并不一致,也没有集中在我们希望了解更多的州,那么它们可能会对最终政策的质量产生负面影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.双重深度 Q 学习

****双 Q 学习的思路是通过将目标中的 max 运算分解为动作选择动作评估来减少高估。

在普通实现中,动作选择和动作评估是耦合的。我们使用目标网络来选择行动,同时评估行动的质量。这意味着什么?

目标网络为状态 s 中的每个可能动作 a_i 计算 Q(s,a_i) 。贪婪策略决定选择最高值 Q(s,a_i) 哪个动作 a_i 。这意味着目标网络选择动作 a_i ,同时通过计算 Q(s,a_i)来评估其质量。双 Q 学习试图将这两个过程相互分离。****

双 Q 学习中,TD 目标看起来如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如您所看到的,目标中的最大运算消失了。虽然具有参数 θ(i-1) 的目标网络评估动作的质量,但是动作本身由具有参数 θ(i)的 Q 网络确定。 该过程与深度 Q 学习的普通实现形成对比,在深度 Q 学习中,目标网络负责动作选择和评估。

新 TD-Targety _ I的计算可以总结为以下步骤:

  • Q-网络使用下一个状态*【s’来计算质量Q(s’,a)*** 对于每个可能的动作 a 处于状态***【s’*****
  • argmax 操作应用于Q(s’,a)** 选择属于最高质量的动作****动作选择*****
  • 选择属于动作【a*】*【a 】(由目标网络确定)的质量 (由 Q 网络确定)用于目标的计算。(动作评价)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 2. Path of the agent through different states.

双 Q 学习的过程可以再一次以图形的形式可视化,以便进一步理解(图 2)。一个 AI 智能体开始时处于状态 s 。基于一些先前的计算,他知道在该状态下可能的两个动作的品质 Q(s,a_1)Q(s,a_2) 。他决定采取行动 a_1 并结束于状态s’**

*Q-网络计算质量Q(s’,a _ 1’)***和 **Q(s,a _ 2’)用于这个新状态中可能的动作。动作a _ 1’被挑选,因为根据 Q 网络,它产生最高质量。

状态中动作 a_1 的新动作值 Q(s,a1) 现在可以用图 2 中的等式来计算,其中Q(s’,a _ 1’)是由目标网络确定的a _ 1’的评估。**

4.实证结果

在[1] 中,David Silver 等人在几款 Atari 2600 游戏上测试了深度 Q 网络(DQNs)和深度双 Q 网络(Double DQNs)。在图 3 中示出了由这两种方法的 AI 代理实现的标准化分数以及可比较的人类表现。该图还包含双 DQN 的调谐版本,其中执行了一些超参数优化。然而,这个版本的 DQN 将不在这里讨论。

可以清楚地注意到,这两个不同版本的双 dqn 在这方面比它的普通实现获得了更好的性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig. 3 Performances on Atari 2600 games.

深度生成模型

原文:https://towardsdatascience.com/deep-generative-models-25ab2821afd3?source=collection_archive---------2-----------------------

生成模型是一种使用无监督学习来学习任何类型的数据分布的强大方法,并且在短短几年内取得了巨大的成功。所有类型的生成模型都旨在学习训练集的真实数据分布,以便生成具有一些变化的新数据点。但是,无论是隐式还是显式地了解我们数据的准确分布并不总是可能的,因此我们试图建立一个尽可能与真实数据分布相似的分布模型。为此,我们可以利用神经网络的能力来学习一个函数,该函数可以将模型分布近似为真实分布。

两种最常用和最有效的方法是变分自动编码器(VAE)和生成对抗网络(GAN)。VAE 旨在最大化数据对数似然的下限,而甘旨在实现生成器和鉴别器之间的平衡。在这篇博文中,我将解释 VAE 和甘斯的工作以及他们背后的直觉。

变型自动编码器

我假设读者已经熟悉了普通自动编码器的工作原理。我们知道,我们可以使用自动编码器将输入图像编码为更小的维度表示,这可以存储关于输入数据分布的潜在信息。但是在普通的自动编码器中,编码向量只能通过解码器映射到相应的输入。它当然不能用于生成具有一些可变性的相似图像。

为了实现这一点,模型需要学习训练数据的概率分布。VAE 是以无监督方式使用神经网络来学习复杂数据分布(例如图像)的最流行的方法之一。它是一种基于贝叶斯推理的概率图形模型,即,该模型旨在学习训练数据的潜在概率分布,以便它可以容易地从学习到的分布中采样新数据。想法是学习训练数据的低维潜在表示,称为潜在变量(不是直接观察到的变量,而是通过数学模型推断的变量),我们假设这些变量已经生成了我们的实际训练数据。这些潜在变量可以存储关于模型需要生成的输出类型的有用信息。潜在变量 z 的概率分布用 P(z)表示。选择高斯分布作为先验来学习分布 P(z ),以便在推断时间期间容易地采样新的数据点。

现在,主要目标是用一些参数对数据建模,这些参数使训练数据 X 的可能性最大化。简而言之,我们假设一个低维潜在向量已经生成了我们的数据 x (x ∈ X ),并且我们可以使用确定性函数 f(z;θ)由我们需要评估的θ参数化(见图 1[1])。在这种生成过程下,我们的目标是最大化 X 中每个数据的概率,

Pө(X) = ∫Pө(X,z)dz = ∫Pө(X|z)Pө(z)dz (1)

这里,f(z;θ)已被分布 Pө(X|z).取代

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig. 1. Latent vector mapped to data distribution using parameter ө [1]

这种最大似然估计背后的直觉是,如果模型可以从这些潜在变量中生成训练样本,那么它也可以生成具有一些变化的类似样本。换句话说,如果我们从 P(z)中抽取大量潜在变量,并从这些变量中生成 x,那么生成的 x 应该与数据分布 Pdata(x)相匹配。现在我们有两个问题需要回答。如何捕捉潜变量的分布,如何在 z 的所有维度上积分方程 1?

显然,手动指定我们想要在潜在向量中编码以生成输出图像的相关信息是一项繁琐的任务。相反,我们依靠神经网络来计算 z,只是假设这个潜在向量可以很好地近似为正态分布,以便在推断时容易采样。如果我们在 n 维空间中有一个 z 的正态分布,那么使用一个足够复杂的函数来生成任何类型的分布总是可能的,并且这个函数的逆函数可以用来学习潜在变量本身。

在等式 1 中,积分在 z 的所有维度上进行,因此很难处理。然而,它可以使用蒙特卡罗积分方法来计算,这是不容易实现的。因此,我们遵循另一种方法来近似最大化等式 1 中的 Pө(X。VAE 的想法是用我们不知道的 P(z|X)来推断 P(z)。我们使用一种称为变分推断的方法来推断 P(z|X ),这基本上是贝叶斯统计中的一个优化问题。我们首先使用容易找到的更简单的分布 Q(z|X)对 P(z|X)建模,并且我们尝试使用 KL-散度度量方法最小化 P(z|X)和 Q(z|X)之间的差异,以便我们的假设接近真实分布。接下来是很多数学方程,我不会在这里解释,但你可以在原始论文中找到。但是我必须说,一旦你有了 VAE 背后的直觉,这些方程并不难理解。

VAE 的最终目标函数是:-

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的等式有一个非常好的解释。Q(z|X)项基本上是我们的编码器网络,z 是数据 x(x ∈ X)的编码表示,P(X|z)是我们的解码器网络。所以在上面的等式中,我们的目标是在 D_KL[Q(z|X) || P(z|X)]给定的误差下最大化我们的数据分布的对数似然。很容易看出,VAE 试图最小化 log(P(X))的下限,因为 P(z|X)不容易处理,但是 KL 散度项> =0。这与最大化 E[logP(X|z)]和最小化 D_KL[Q(z|X) || P(z|X)]相同。我们知道,最大化 E[logP(X|z)]是最大似然估计,并使用解码器网络建模。正如我前面说过的,我们希望我们的潜在表示接近高斯,因此我们假设 P(z)为 N(0,1)。按照这个假设,Q(z|X)也应该接近这个分布。如果我们假设它是具有参数μ(X)和ʃ(x 的高斯分布,则由 KL-divergence 给出的这两个分布(即 P(z)和 Q(z|X ))之间的差异引起的误差导致下面给出的封闭形式的解。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

考虑到我们正在优化较低的变分界限,我们的优化函数是:

log(P(X | z))—D _ KL[Q(z | X)‖P(z)],其中第二个的解如上图所示。

因此,我们的损失函数将包含两项。第一个是输入到输出的重建损失,第二个损失是 KL-散度项。现在我们可以使用反向传播算法来训练网络。但是有一个问题,那就是第一项不仅仅依赖于 P 的参数,也依赖于 Q 的参数,但是这种依赖性没有出现在上面的等式中。因此,如何通过我们从分布 Q(z|X)或 N[μ(X),ʃ(x]随机采样 z 的层反向传播,以便 p 可以解码。渐变不能流过随机节点。我们使用重新参数化技巧(见图 1)使网络可区分。我们从 N(μ(X),σ(X))开始采样,首先采样ε∾N(0,I),然后计算 z =μ(X)+σ1/2(X)∑ε。

这已经非常漂亮地显示在图 2[1]中了?。应当注意,前馈步骤对于这两个网络(左和右)是相同的,但是梯度只能通过右网络反向传播。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig.2. Reparameterization trick used to backpropagate through random nodes [1]

在推理时,我们可以简单地从 N(0,1)中采样 z,并将其馈送到解码器网络以生成新的数据点。因为我们正在优化较低的变分界限,所以与像生成对抗网络这样的最新技术相比,生成的图像的质量有些差。

VAE 最好的一点是,它学习生成模型和推理模型。虽然 VAE 和甘斯都是使用无监督学习来学习底层数据分布的非常令人兴奋的方法,但是甘斯比 VAE 产生更好的结果。在中,我们优化了变分下限,而在 GAN 中,没有这样的假设。事实上,GANs 不处理任何显式的概率密度估计。VAE 在生成清晰图像方面的失败意味着该模型不能学习真实的后验分布。和甘的主要区别在于训练的方式。现在让我们深入到生成性对抗网络。

生成性对抗网络

Yann LeCun 说对抗训练是自切片面包以来最酷的事情。看到生成性敌对网络的流行及其产生的结果的质量,我想我们大多数人都会同意他的观点。对抗性训练完全改变了我们教神经网络完成特定任务的方式。生成敌对网络不像变分自动编码器那样与任何显式密度估计一起工作。相反,它是基于博弈论的方法,目标是找到两个网络之间的纳什均衡,发电机和鉴别器。其思想是从高斯这样的简单分布中采样,然后学习使用通用函数逼近器(如神经网络)将这种噪声转换为数据分布。

这是通过这两个网络的对抗训练来实现的。生成器模型 G 学习捕获数据分布,鉴别器模型 D 估计样本来自数据分布而不是模型分布的概率。基本上,生成器的任务是生成看起来自然的图像,而鉴别器的任务是判断图像是假的还是真的。这可以被认为是一个迷你-最大双人游戏,其中两个网络的性能都随着时间的推移而提高。在这个游戏中,生成器通过尽可能生成真实图像来欺骗鉴别器,而鉴别器通过提高其鉴别能力来试图不被生成器欺骗。下图显示了 GAN 的基本架构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig.3. Building block of Generative Adversarial Network

我们定义输入噪声变量 P(z)的先验,然后发生器使用参数为өg.的复可微函数将其映射到数据分布。除此之外,我们还有另一个称为鉴别器的网络,它接收输入 x,并使用另一个参数为өd 的可微函数输出单个标量值,表示 x 来自真实数据分布 Pdata(x)的概率。GAN 的目标函数定义为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在上述等式中,如果鉴别器的输入来自真实数据分布,则 D(x)应输出 1 以最大化上述目标函数 w . r . t . D,而如果图像是从生成器生成的,则 D(G(z))应输出 1 以最小化目标函数 w . r . t . G。后者基本上意味着 G 应生成可以欺骗 D 的这种真实图像。但是在优化发电机目标方面存在一个问题。在游戏开始时,当生成器没有学习到任何东西时,梯度通常很小,当它做得很好时,梯度很高(见图 4)。但是我们想要相反的行为。因此,我们最大化 E[log(D(G(z))]而不是最小化 E[log(1-D(G(z))]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig.4. Cost for the Generator as a function of Discriminator response on the generated image

训练过程包括在鉴别器和发生器上同时应用随机梯度下降。训练时,我们在小批量优化 D 的 k 个步骤和优化 G 的一个步骤之间交替。当鉴别器不能区分ρg 和ρ数据即D(x,өd) =或ρg =ρ数据时,训练过程停止。

采用卷积神经网络的 GAN 的最早模型之一是代表深度卷积生成对抗网络的 DCGAN 。该网络将从均匀分布中抽取的 100 个随机数作为输入,并输出所需形状的图像。网络由许多卷积层、反卷积层和全连接层组成。该网络使用许多反卷积层将输入噪声映射到所需的输出图像。批量归一化用于稳定网络的训练。ReLU 激活用于发生器中除输出层之外的所有层,输出层使用 tanh 层,泄漏 ReLU 用于鉴别器中的所有层。使用小批量随机梯度下降来训练该网络,并且使用 Adam 优化器来通过调整的超参数来加速训练。论文的结果相当有趣。作者表明,生成器具有有趣的矢量算术属性,利用这些属性,我们可以按我们想要的方式操纵图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig.5. Generator of DCGAN

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig.6. Discriminator of DCGAN

最广泛使用的 GAN 变体之一是条件 GAN,它是通过简单地将条件向量与噪声向量相加而构建的(见图 7)。在 cGAN 之前,我们从噪声 z 的随机样本中随机生成图像。如果我们想要生成具有一些所需特征的图像,该怎么办?有什么方法可以向模型提供额外的信息,告诉我们想要生成什么类型的图像?答案是肯定的,有条件的 GAN 是实现这一目标的方法。通过根据提供给生成器和鉴别器的附加信息来调节模型,可以指导数据生成过程。条件甘用于各种任务,例如文本到图像生成、图像到图像翻译、自动图像标记等。下图显示了两个网络的统一结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig. 7. A basic example of cGAN with y as the conditioning vector

GANs 的一个很酷的地方是,即使只有很少的训练数据,它们也可以被训练。实际上,GANs 的结果是有希望的,但是训练过程并不简单,尤其是建立网络的超参数。此外,gan 难以优化,因为它们不容易收敛。当然,这里有一些破解 GANs 的技巧和窍门,但它们可能并不总是有用。你可以在这里找到一些建议。此外,除了检查生成的图像在感知上是否真实之外,我们没有任何对结果进行定量评估的标准。

结论

深度学习模型在监督学习中确实达到了人类水平的性能,但在无监督学习中却并非如此。尽管如此,深度学习科学家正在努力提高无监督模型的性能。在这篇博文中,我们看到了两个最著名的生成模型的无监督学习框架实际上是如何工作的。我们知道了可变自动编码器中的问题,以及为什么敌对网络更擅长产生真实的图像。但是 GANs 也有一些问题,比如稳定他们的训练,这仍然是一个活跃的研究领域。然而,GANs 非常强大,目前它们正被用于各种任务,如高质量图像(参见此 视频 )和视频生成、文本到图像的翻译、图像增强、从图像重建物体的 3D 模型、音乐生成、癌症药物发现等。除此之外,许多深度学习研究人员也在努力统一这两种模型,并获得这两种模型的最佳效果。看到深度学习的推进速度越来越快,相信 GANs 会打开半监督学习、强化学习等人工智能的很多紧闭的大门。在接下来的几年里,生成模型将会对图形设计、有吸引力的用户界面设计等非常有帮助。使用生成对抗网络来生成自然语言文本也是可能的。

参考文献:-

【1】。https://arxiv.org/pdf/1606.05908.pdf

[2].https://arxiv.org/pdf/1406.2661.pdf

[3].https://wise odd . github . io/tech blog/2016/12/10/variation-auto encoder/

使用 3D 卷积神经网络的深部灰质(DGM)分割:在 QSM 的应用(第二部分)

原文:https://towardsdatascience.com/deep-gray-matter-dgm-segmentation-using-3d-convolutional-neural-network-application-to-qsm-part-83c247416389?source=collection_archive---------16-----------------------

背景信息和以前的结果可在第 1 部分中找到:

代码(更新)

可在 Github 获得:【https://github.com/zl376/segDGM_CNN

描述

该记录包括对先前用于 QSM 图像上的深灰质(DGM)分割的 3D 卷积神经网络模型(基线模型)的以下更新:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example cases where proposed and manual segmentation are performed

网络体系结构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Flowchart for Baseline (left) and Proposed (right) model

  • 内核大小:从(3,3,3)变为(7,7,3),以说明各向异性的图像分辨率
  • 每层后批量归一化以提高收敛性
  • 空间坐标输入作为辅助特征

训练参数

执行 10 重交叉验证,其中 18 个案例用于训练,2 个用于测试。最大纪元是 60 年。学习率最初设置为 0.001,每 20 个时期减少 10 倍。

改进的结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Comparison of Baseline, proposed and manual segmentation for Caudate Nucleus.

较大的卷积核有助于完全捕捉 DGM 结构,如上例所示,其中基线模型中使用的较小核不必要地关注尾状核边界的对比度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Precision and Dice score for Baseline and proposed model

在精确度和骰子得分度量中也观察到了改进,尤其是对于红核,其横截面形状类似于其他结构,例如静脉或出血。辅助输入中的空间信息有助于区分红核和那些结构。

后续步骤

  • 数据扩充:缩放和旋转训练数据集,以处理临床应用中 DGM 大小和方向的变化。
  • 合并其他模态如 R2*图像或 T1w 图像。

使用 3D 卷积神经网络的深部灰质(DGM)分割:在 QSM 的应用(第一部分)

原文:https://towardsdatascience.com/deep-gray-matter-dgm-segmentation-using-neural-network-application-to-qsm-a0183cb3e3ae?source=collection_archive---------4-----------------------

【更新 2018–02–04】:新的结果可以在 Part 2 找到。

密码

可在 Github 获得:【https://github.com/zl376/segDGM_CNN

动机

在 MRI 分析中,计算机化的自动分割是期望的,并且实际上被广泛研究。具体而言,对于 QSM(定量磁化率绘图),一种量化和描绘受试者中铁/钙分布的 MRI 技术,深灰质(DGM)的感兴趣区域(ROI)测量是不同重建算法之间一致性的公认度量。DGM 铁矿资源丰富,是 QSM 的一个亮点,因此通常选择该地区作为研究目标。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Deep Gray Matter includes: Basal ganglia (Globus pallidus, Putamen and Caudate nucleus), subthalamic nucleus and substantia nigra.

通常,DGM ROI 的绘制是由经验丰富的放射科医生手动完成的,这需要花费大量的时间,并且固有地限制了分析的样本量(<20 subjects). Therefore, I try to train a neural network to segment the DGM based on QSM, for ROI measurement analysis at a potentially large scale (e.g. ~500 subjects).

Method

Convolutional Neural Network is chosen as the framework for segmentation. The model used in this work is based on:

当前的 CNN 是通过以下平台/包实现的:

  • 张量流
  • Python 3.5
  • Keras 2.0.2

数据预处理

这项工作收集并命名了来自 20 个受试者的 QSM。由有经验的专家在每个病例上绘制不同深灰质(DGM)的 ROI,并将其作为参考分割。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example for QSM (left) and ROI (right) for DGM

QSM 重建的原始结果跨越一系列矩阵大小、分辨率和覆盖范围(视野),因此数据在输入网络之前需要归一化。

数据标准化

所有 20 个三维图像被重新调整到相同的体素尺寸(1 毫米、1 毫米、3 毫米)并被裁剪成矩阵尺寸(160、220、48)。这提供了(16 厘米,22 厘米,14.4 厘米)的体积覆盖,对于普通人的大脑来说足够大。QSM 的磁化率值被裁剪为-0.2ppm 至 0.2ppm,并重新调整为 0~255。从人工分割中提取 11 个类别:1 个类别用于背景,2 个类别(左/右)用于 5 个 DGM 中的每一个。处理后的图像保存为 Nifti 文件,并提供给以下 CNN。

15 个案例表示为训练集,5 个用于测试。

训练 CNN

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Overview of the 3D CNN, as proposed by Dolz et al. Neuroimage 2017.

如在用于 iSeg2017 的解决方案中所建议的,输入 3D 体积(QSM 和类别标签)被分割成对应于输出片尺寸(9,9,9)的更小的片(27,27,27),并且仅具有背景标签的那些被从训练中丢弃。这个技巧极大地减少了数据的大小,从而减少了用于训练的内存。对于这项工作,这里的切片厚度(3 毫米)比他们的(1 毫米)大 3 倍,因此输入面片大小选择为 (27,27,21) ,对应于输出大小(9,9,3)。

选择 1/4 的输入数据进行验证。选择交叉熵作为损失函数。

针对误报的微调

由于一些补丁在训练前就被丢弃了,这些区域的信息还没有被 CNN 利用。在训练 CNN 之后,如果这些小块通过网络并与参考标签比较(验证),观察到背景类可能被错误分类为 DGM,这被表征为假阳性。

那些假阳性被 CNN 的第二轮微调处理:那些具有假阳性的小块被包括在输入集合中;然后,基于先前获得的“最优”权重,使用扩充的输入数据来重新训练网络。

参数选择

学习率被指定为 0.0001,然后减少到 0.00001。最大历元数为 40,当验证损失停止下降时,触发提前停止。

后处理

正如在大型研究论文中注意到的,分割可能由一些孤立的小“岛”组成,而不是目标 DGM 构造。这是为了在每个 DGM ROI 的分割中保持最大的连通分量。

结果和评估

计算每个 DGM 的精度(真阳性对所有阳性预测)和骰子点数,如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个很好的例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个不太好的例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在结果中观察到对特定 DGM(尤其是黑质和尾状核)的低估。对于这两个 DGM,这也在表中表示为低骰子分数。

讨论

样本量

在这项工作中,样本量有点小(15 个训练+ 5 个测试),但已经给出了一些有希望的结果,如上所示。保存所有 3D 碎片所需的昂贵的 3D 卷积和存储器是使用大样本量的主要障碍。在目前的训练平台上(酷睿 i3,16GB RAM,11GB 内存的 GTX 1080Ti),微调阶段占用了大约 50%的 GPU 内存。潜在地,样本大小可以加倍(到~40)并且可以使用交叉验证来进一步评估 CNN 的性能。

损失函数

在当前的训练中,分类交叉熵被用作损失函数。虽然 Dice 分数等其他指标被广泛用于量化 ROI 协议,但有趣的是,看看用 Dice 分数代替交叉熵是否会提高 CNN。

分割不足

当应用于 5 个测试病例时,CNN 有时不能描绘某些 DGM 区域的整个结构,尤其是尾状核。这可能与卷积层中使用的内核大小有关。

这就引出了另一个有趣的问题:欠分割真的是 ROI 分析的一个问题吗,尤其是在比较不同的 QSM 重建算法时?

多类 vs .二进制?

考虑到 DGM 在解剖和功能上是相互联系的,至少对于基底神经节而言是如此,在基底神经节中,苍白球、壳核和尾状核之间的界面难以确定,因此多类分割可能不是这一特定任务的最佳框架。同时,整个任务可能被分成更小的子任务,其中我们使用二元分类器来分割每个 ROI:例如,在分割左侧苍白球时,目标结构中的体素被标记为类 1,而其他所有的被表示为类 0。训练速度可以受益于这种任务划分,因为对于每个子任务(ROI ),涉及的补丁数量比原始多类任务中的小得多。当所有子任务同时执行时,训练过程以 ROI 数量的因子加速。

多模态输入

iseg 2017的解决方案中,T1 和 T2 加权图像均用作每个受试者的输入。T1 和 T2 加权图像显示的不同对比度可能有助于区分不同的结构。而在 QSM 的研究中,T1/T2 图像通常是稀少的,或者如果有的话,也是未注册的,因为它们是在不同的时段获得的。然而,其他图像模态,如幅度(单回波)或 R2*图(演示信号在多个回波中衰减的速度)很容易与每个 QSM 图一起使用,并可以并入当前的 CNN。它对多通道输入数据的性能将是一个有趣的研究课题。

Tensorflow 中的“深度”独立分量分析[TF 中的手动背道具]

原文:https://towardsdatascience.com/deep-independent-component-analysis-in-tensorflow-manual-back-prop-in-tf-94602a08b13f?source=collection_archive---------8-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Bernard Hermant on Unsplash

我们可以使用独立分量分析来捕捉局部变化,然而,我们在现实生活中遇到的图像数据生活在非常高维的空间中。我想看看我们是否可以结合深度学习来执行 ICA。

请注意,这篇文章只是为了娱乐和自学。

人脸数据或 MRI 数据上的 ICA

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image from this website

如上所述,当我们在人脸图像或脑部 MRI 上执行 ICA 时,我们可以注意到我们能够(清楚地)捕捉到局部变化。然而,这能在现实生活中的图像上工作吗?我的意思是,我们是否能够从包含许多差异的一组图像中捕捉到一个物体的大致结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image from this website

如上所述,对于给定对象,图像看起来会有很多不同。(带刻度或方差)。但是如果我们仔细想想,面部图像和大脑核磁共振成像一样,已经是居中的,不包含太多的变化。STL 数据集中的鸟类图像子集怎么样?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如上所述,所有的图片都包含了鸟的图像,但是有些在飞,有些在坐。有不同的规模以及旋转,角度等。

PCA、KPCA 和 ICA 的直接方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们使用高级 API 方法对 STL 数据集中的 500 幅鸟类图像执行一些降维技术。(我准备用 Sklearn。)还有,我只会得到前 40 个主分量以及独立分量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Left the whole data set \ Right split the data set in to 4 components

我们可以看到,在我们的第一张主图像中,我们的图像中心有一个白色斑点。(那看起来确实像一只鸟)。在轴上移动,我们可以观察到很少的主成分像鸟一样的图形。然而,在第三行之后,不清楚图像中到底有什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Left the whole data set \ Right split the data set in to 4 components

同样,让我们使用高级 api 方法来执行 KPCA,类似于 PCA 的结果。同样,前几个主要图像确实像一个鸟一样的数字。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Left the whole data set \ Right split the data set in to 4 components

最后,高级 ICA 方法。我们可以看到,总的来说,它捕捉到了图像中的局部变化。如果我看得足够近,我真的可以在图像中看到一些鸟一样的人物。

“深度”学习方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

黄框 →卷积层
蓝框 →主成分分析层
红框 →独立成分分析层

现在,从上面的图中,我们已经知道我想要尝试什么,只需用几个卷积层从图像中提取更高层次的特征,然后执行 PCA 以降低维度,并使用 ICA 以统计方式使这些主成分相互独立。

我之所以在 ICA 之前使用 PCA,是因为从我过去的实验来看,使用 ICA 作为降维手段并没有很好地收敛。另外请注意,我们可以选择多种独立分量分析方法,例如梯度上升法。我正要用 FastICA。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在继续之前,让我们首先实现 PCA 层,如上所述,这里还要注意的另一件事是,我将使用 Adam 来优化快速 ICA 的权重,而不是直接分配。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我不想在 ICA 上进行优化,而是想分成四个不同的流。

可用于快速 ICA 的函数形状

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image from this website

我不会进入细节,但对于快速 ICA 有几个激活功能(不是正确的名称,但我会这样称呼它。),我们可以选择使用。我想把它们形象化。

ICA 作为损失函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左上 →原图像
右上 →第一层后图像
左下 →第二层后图像
右下 →第三层后图像

因此,随着图像在层中向上移动,图像中的一些部分变暗,而其他部分变得更白。现在让我们看看 40 张组合的原则图片。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一些黑色的数字看起来像鸟,但不是那么脆,当我们看到 40 个独立的组件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,一些部分看起来更像鸟,但没有那么脆,我想还有很长的路要走。收敛过程如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本岗位代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于谷歌 Colab,你需要一个谷歌帐户来查看代码,而且你不能在谷歌 Colab 中运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

要访问 sklearn High 级别的代码,请单击此处。
点击此处获取 Tensorflow 的代码。

最后的话

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。

参考

  1. PIL?,H. (2018)。如何保存 PIL 的图像?。堆栈溢出。检索于 2018 年 9 月 15 日,来自https://stack overflow . com/questions/14452824/how-can-I-save-a-image-with-pil
  2. 南 PIL(2018 年)。用 PIL 拯救形象。堆栈溢出。检索于 2018 年 9 月 15 日,来自https://stack overflow . com/questions/1965 10 55/saving-image-with-pil
  3. 慢,S. (2018)。使用 Matplotlib 保存图形非常慢。树莓 Pi 栈交换。检索于 2018 年 9 月 16 日,来自https://raspberrypi . stack exchange . com/questions/72542/saving-graphs-using-matplotlib-is-very-slow
  4. 用于视觉识别的 CS231n 卷积神经网络。(2018).cs 231n . github . io . 2018 年 9 月 16 日检索,来自http://cs231n.github.io/classification/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值