TowardsDataScience 博客中文翻译 2019(四百二十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

综述:提示性注释—深度主动学习框架(生物医学图像分割)

原文:https://towardsdatascience.com/review-suggestive-annotation-deep-active-learning-framework-biomedical-image-segmentation-e08e4b931ea6?source=collection_archive---------15-----------------------

减少生物医学专家(如放射技师)的注释工作和成本

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

Glands Segmentation in Colon Histology Images (Left) & Lymph Nodes Segmentation in Ultrasound Images (Right)

在这个故事中,暗示性的注解(SA) 被回顾。例如,结肠癌和淋巴结癌(淋巴瘤)是导致死亡的两种常见癌症。精确分割对于了解注释对象的大小/形状至关重要,例如用于诊断或癌症分级/分期。传统上,注释医学图像,需要生物医学领域的专家。需要很高的努力和成本。

由于标注代价昂贵,因此深度主动学习框架被应用于生物医学领域,以便用较少的标注样本训练深度神经网络。而这是一篇 2017 MICCAI 超过 40 次引用的论文。( Sik-Ho Tsang @中)

概述

  1. 生物医学影像专家标注的问题
  2. 什么是主动学习?
  3. 从人工标注到深度主动学习框架
  4. 提出使用提示性标注的深度主动学习框架
  5. 结果

1。生物医学成像中的专家注释问题

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

Annotation in Biomedical Imaging by Experts

  • 只有经过培训的生物医学专家才能对数据进行注释
  • 大量的人工工作(时间&成本)。
  • 人为失误

2。什么是主动学习?

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

Active Learning

  • 注释/标记是一项昂贵的活动,尤其是在生物医学领域。
  • 主动学习的建议来自 2010 年的一份技术报告,“主动学习文献调查”,引用超过 3000 条。
  • 如上图所示,人工标注来自未标注库的一些样本,输入这些标注样本用于训练
  • 在训练之后,机器学习模型输出一些具有高度不确定性的样本,回到未标记池。
  • 因此,人类可以避免注释那些由机器学习模型预测的高确定性的样本,从而节省人类注释者的努力和成本。

3.从人工标注到深度主动学习框架

3.1.雇用年轻人做注解

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

Employ Junior for Annotation

  • 如上所示,类似于前一节中的主动学习框架,训练有素的初级标注来自未标注样本池的样本。
  • 然后选择不确定性高的,请他/她的学长,也就是专家来批注。
  • 有了专家的注解,初级可以学到更多,成为一个更好训练的初级。
  • 通过更好的学习/训练,受过训练的初级应该具有更高的标注能力来标注来自池中的剩余未标注样本。
  • 有了上述框架,我们可以节省专家的精力和成本。

3.2.雇用更多的初级人员进行注释

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

Employ More Juniors for Annotation

  • 为了加快注释的速度,我们可以雇用更多的初级人员来完成注释任务。
  • 只有那些在所有训练好的初级中不确定的样本,才被送到专家那里进行标注。
  • 因此,我们可以进一步节省专家的精力和成本。

3.3.FCN 替换青年队

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

FCN Replacing Juniors

  • 为了更加自动化,全卷积网络(fcn)将取代人
  • 现在,它变成了一个主动的学习框架。借助深度学习,本文称之为深度主动学习框架

4.使用建议性注释的深度主动学习框架

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

Deep Active Learning Framework

  • 如上图所示有三个主要部分: FCN 架构不确定性度量相似性估计

4.1.FCN 建筑

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

FCN Architecture

  • 输入:未标注图像
  • 输出:**标注标签图(**我们想要的)和 1024-d 图像描述符,用于测量不确定度。
  • 所使用的架构是一个使用残差块的 FCN 式架构。
  • 使用自举(带替换的采样);这样每个 FCN 将有不同的训练数据
  • 简单情况 : 多个 fcn 会得出相似的输出
  • 疑难案例:多个 fcn 会有不同的输出
  • 由于使用了 4 个 NVidia Tesla P100 GPU,SA 中使用了4 个 fcn。

4.2.不确定性度量

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

Uncertainty Measure

  • 当一个像素的不确定性(标准偏差)较低时,该像素的精度较高,反之亦然。
  • 为了测量图像的不确定性,使用所有像素的平均不确定性。

4.3.相似性估计

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

  • 如前所述,还有另一个输出,1024-d 图像描述符。该描述符包含丰富而准确的形状信息
  • 余弦相似度用于相似度估计。

4.4.暗示性注释

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

Suggestive Annotation (SA)

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

  • 在所有未标注的图像中,我们使用不确定性度量选择 K 个不确定性得分最高的图像 K 作为ScT9(K= 16)。
  • 因此,我们选择了 K 个图像,fcn 具有不同的输出
  • 在这些 K 图像中,使用贪婪方法找到 Sa (我们想建议专家注释的一组)。
  • 最初 Sa 是空集,即 SaF ( SaSu ) = 0。
  • 迭代添加IiSc,最大化F(SaIiSu )直到 Sa 包含 k 图像( k =8)
  • 因此,选择一组具有不确定输出的图像 Sa ,但也类似于未标注的图像。

5.结果

5.1.2015 MICCAI 腺体挑战数据集

  • 85 幅训练图像
  • 80 张测试图像,其中 60 张在 A 部分(正常腺体),20 张在 B 部分(异常腺体)

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

Comparison with full training data for gland segmentation

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

Comparison using limited training data for gland segmentation

  • 当使用 50%的训练数据时,它已经接近甚至优于 SOTA(绿色)结果。

5.2.淋巴结数据集

  • 37 幅训练图像和 37 幅测试图像

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

  • 仅用 50%的训练数据,该框架就能比 U-NetCUMedVision1CFS-FCN 有更好的分割性能。
  • CFS-FCN 需要对中间标签图进行额外的标记工作,这些标签图可以被视为 200%的训练数据。

通过使用暗示性标注的深度主动学习框架,有助于提高小数据集的预测精度。

参考

【2017 MICCAI】【SA】
提示性标注:生物医学图像分割的深度主动学习框架

我以前的评论

)(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(是)(这)(些)(人)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(们)(就)(想)(到)(了)(这)(些)(人)(们)(,)(我)(们)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(到)(这)(里)(去)(。 )(他)(们)(都)(不)(在)(这)(些)(事)(上)(,)(她)(们)(还)(不)(在)(这)(些)(事)(上)(有)(什)(么)(情)(况)(呢)(?)(她)(们)(都)(不)(在)(这)(些)(情)(况)(下)(,)(她)(们)(还)(不)(在)(这)(些)(事)(上)(有)(什)(么)(情)(况)(吗)(?)(她)(们)(们)(都)(不)(在)(这)(些)(事)(上)(,)(她)(们)(们)(还)(不)(在)(这)(些)(事)(上)(,)(她)(们)(们)(还)(没)(有)(什)(么)(好)(的)(情)(情)(感)(。

物体检测 过食R-CNN快 R-CNN快 R-CNNMR-CNN&S-CNNDeepID-NetCRAFTR-FCN】 [G-RMI][TDM][SSD][DSSD][约洛夫 1 ] [ 约洛夫 2 /约洛 9000 ] [ 约洛夫 3[FPN[视网膜网[DCN

语义切分 FCNde convnetdeeplabv 1&deeplabv 2CRF-RNNSegNetparse netdilated netDRNRefineNet

生物医学图像分割 [cumed vision 1][cumed vision 2/DCAN][U-Net][CFS-FCN][U-Net+ResNet][多通道][V-Net][3D U-Net][M FCN

实例分割 [ SDS ] [ 超列 ] [ 深度掩码 ] [ 锐度掩码 ] [ 多路径网络 ] [ MNC ] [ 实例化 ] [ FCIS

)(我)(们)(都)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(。

【DeepPose】【汤普森 NIPS’14】【汤普森 CVPR’15】

回顾:汤普逊·CVPR 15—空间丢失(人体姿态估计)

原文:https://towardsdatascience.com/review-tompson-cvpr15-spatial-dropout-human-pose-estimation-c7d6a5cecd8c?source=collection_archive---------21-----------------------

在空间丢失的情况下,级联的粗略和精细热图回归优于Tompson NIPS’14

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

MPII-Human-Pose Dataset

在这个故事中, NYU 的《利用卷积网络进行高效的物体定位》被简要回顾。本文中的方法似乎没有简写形式。由于在 2015 年 CVPR的论文中,第一作者的名字是汤普逊,所以我就在标题中称之为汤普逊 CVPR 的 15** 。你可能会注意到,这是 NYU 写的,也是 LeCun 教授的论文之一。就在上个月2019 年 3 月,LeCun 获得了图灵奖,与 Yoshua Bengio 和 Geoffrey Hinton 分享,其中图灵奖是**“计算的诺贝尔奖**”。而这是一篇超过 300 次引用的论文。( Sik-Ho Tsang @中)**

人体姿态估计的目标是定位人体关节。有很多困难,比如关节遮挡,体型、服装、灯光、视角等的变化。

概述

  1. 粗略热图回归
  2. 空间脱落
  3. 使用级联架构的精细热图回归
  4. 消融研究
  5. 与最先进方法的比较

1。粗略热图回归

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

Coarse Heat-Map Regression (Only 2 scales are shown)

  • 网络是一个全卷积网络
  • 使用 3 种不同比例的输入,并输出每个关节的热图。
  • 在第一层,对输入图像应用局部对比度归一化(LCN)。
  • 有 2 个数据集进行测试:FLIC 和 MPII。
  • 对于 FLIC,使用 7 级卷积神经网络(CNN ),而对于 MPII,使用 11 级 CNN。
  • 由于共用,输出图像的分辨率低于输入图像。

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

  • 均方误差(MSE) 用作损失函数,其中 H’jHj 是第 j 个接头的预测和地面实况热图。
  • 训练时,随机旋转度r[-20,+20],s[0.5,1.5]和 p = 0.5 的翻转版本用于数据扩充。

2.空间脱落

2.1.标准辍学

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

Standard Dropout

  • 上面两行像素表示特征图 1 和 2 的卷积核,下面一行表示前一层的输出特征。
  • 对于标准的辍学,比如说上图右边的,虽然 f2b 被放弃了,但是强相关的 f2a 仍然存在。
  • 由于网络是一个全卷积网络,这使得丢失无效。

2.2.空间辍学

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

SpatialDropout

  • 提出了一种新的辍学生,空间辍学生。
  • 假设有尺寸为 n _ 功勋 × × 的特征地图,只进行n _ 功勋脱靶试验
  • 差值跨越整个特征地图。
  • 因此,漏失特征图中的相邻像素要么全为 0(漏失),要么全为活动,如上图右侧所示。
  • 如第一幅图所示,这个附加的下降层被添加在第一个 1×1 卷积层之前。

3。使用级联架构的精细热图回归

3.1.级联架构

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

Cascaded Architecture

  • 这里的目标是恢复由于粗略热图回归模型的汇集而损失的空间精度。
  • 不像深度图那样单独使用输出热图作为精细热图回归模型的输入,来自粗糙热图回归模型的中间特征图也被用作输入。****
  • 这可以帮助减少参数的数量,并作为粗糙热图模型的正则化器。
  • 精细热图回归模型为接头生成(⇼x,⇼y)。通过在粗糙模型中添加(x,y ),我们可以获得最终结果。

3.2.裁剪模块

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

Crop Module

  • 在通过精细的热图回归模型之前,热图和特征图需要通过裁剪模块。
  • 为了使保持窗口的上下文大小不变,在每个更高的分辨率级别执行裁剪区域的缩放。

3.3.暹罗网络

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

14 Joints, 14 Siamese Network in Fine Heat-Map Regression Model

  • 假设有 14 个接头,我们将得到 14 个网络,有许多参数。
  • 作者采用连体网络,其中权重和偏差对于所有实例都是共享的
  • 这可以减少参数的数量并防止过度训练
  • **最后,使用 1×1 卷积(无任何权重分配)输出每个关节的详细分辨率热图。**最后一层的目的是对每个关节进行最终检测。

3.4.单个接头的精细热图网络

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

Fine Heat-Map Network for a Single Joint

  • 4 条路径的 CNN 如上所示,这是单个关节的网络。
  • 在需要的地方应用升级。
  • 并且来自所有 4 条路径的所有特征图被加在一起,然后经过 1×1 卷积以获得输出。

3.5.联合训练

  • 首先,对粗略的热图模型进行预训练。
  • 然后固定粗略热图模型,并使用以下损失函数训练精细热图模型:

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

  • 其中 G’jGj 是第 j 个接头的预测和地面实况热图。
  • 最后,通过最小化 E3 =E1+λ×E2,对粗、细模型进行联合训练,其中 λ = 0.1。

4.消融研究

4.1.数据集

  • FLIC 数据集由 3987 个训练样本和 1016 个来自好莱坞电影的静态场景测试样本组成,并标注了上身关节标签。姿势主要是面向前方和直立。
  • MPII 数据集包括 28,821 个训练和 11,701 个测试示例中的各种全身姿势注释。

4.2.汇集效应

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

Pooling impact on FLIC test-set Average Joint Accuracy for the coarse heat-map model

  • 使用的池越多,性能越差。

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

σ of (x; y) pixel annotations on FLIC test-set images (at 360×240 resolution)

  • 测量地面实际节理的标准偏差 σ
  • 标签噪声(10 幅图像) : 13 个用户从 FLIC 测试集中为面部、左手腕、左肩和左肘关节标注了 10 幅随机图像。这可以当作人的表现
  • 同样,使用的池越多,性能越差。

4.3.仅粗略或级联模型

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

Coarse and Fine Models

  • 仅使用粗略模型,预测误差(像素)分布很广。
  • 使用级联模型,预测误差(像素)更窄。

4.4.级联模型的效果

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

Performance improvement from cascaded model

  • 使用较少的池(4 倍)和级联模式,性能最佳。
  • 使用 8 倍和 16 倍池时,级联效应显著。

4.5.测试时间

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

Testing Time in Seconds

  • 用的是 Nvidia-K40 GPU。
  • 汇集越少(4 倍),测试时间越长。

4.6.共享特征& 空间缺失

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

  • (左)基线/标准级联:精细模型只以图像为输入,粗精模型独立训练。
  • (左)共享特征:粗模型中的特征图也作为细模型的输入。当然,共享特性有更好的效果。
  • ****(右)有空间遗漏:检出率更高。

5.与最先进方法的比较

5.1.警察

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

FLIC — FCK Performance, Average (Left) Individual Joints (Right)

5.2.MPII

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

MPII— FCK Performance, Average (Left) Individual Joints (Right)

  • 同样,所提出的级联网络比所有最先进的方法具有更大的优势。

利用级联网络对预测的关节位置进行微调,可以获得更高的检测率。

参考

【2015 CVPR】【汤普森·CVPR 15】
利用卷积网络的高效物体定位

我以前的评论

)(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(是)(这)(些)(人)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(们)(就)(想)(到)(了)(这)(些)(人)(们)(,)(我)(们)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(到)(这)(里)(去)(。 )(他)(们)(都)(不)(在)(这)(些)(事)(上)(,)(她)(们)(还)(不)(在)(这)(些)(事)(上)(有)(什)(么)(情)(况)(呢)(?)(她)(们)(都)(不)(在)(这)(些)(情)(况)(下)(,)(她)(们)(还)(不)(在)(这)(些)(事)(上)(有)(什)(么)(情)(况)(吗)(?)(她)(们)(们)(都)(不)(在)(这)(些)(事)(上)(,)(她)(们)(们)(还)(不)(在)(这)(些)(事)(上)(,)(她)(们)(们)(还)(没)(有)(什)(么)(好)(的)(情)(情)(感)(。

物体检测 过食R-CNN快 R-CNN快 R-CNNMR-CNN&S-CNNDeepID-NetCRAFTR-FCN】 [TDM][SSD][DSSD][yolo v1][yolo v2/yolo 9000][yolo v3][FPN][retina net[DCN]

语义切分 FCNde convnetdeeplabv 1&deeplabv 2CRF-RNNSegNetparse netdilated netDRNRefineNet

生物医学图像分割 [ 累计视觉 1 ] [ 累计视觉 2/DCAN][U-Net][CFS-FCN][U-Net+ResNet][多通道][V-Net][3D U-Net]

实例分割 [SDS][Hypercolumn][deep mask][sharp mask][multipath net][MNC][Instance fcn[FCIS]

超分辨率
T2Sr CNN[fsr CNN][VDSR][ESPCN][红网][DRCN][DRRN][LapSRN&MS-LapSRN][SRDenseNet]

人体姿态估计
深度姿态汤普逊 NIPS’14

综述:Tompson NIPS ’ 14—CNN 和图形模型的联合训练(人体姿态估计)

原文:https://towardsdatascience.com/review-tompson-nips14-joint-training-of-cnn-and-graphical-model-human-pose-estimation-95016bc510c?source=collection_archive---------18-----------------------

又名{多人/人/人/人体} {姿势估计/关键点检测},NYU

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

FLIC (Frames Labeled In Cinema) Dataset for Human Pose Estimation (https://bensapp.github.io/flic-dataset.html)

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

FLIC Plus Dataset for Human Pose Estimation

在这个故事中, NYU 的《卷积网络和人体姿态估计图形模型的联合训练》做了简要回顾。本文中的方法似乎没有简写形式。由于在 2014 NIPS 的论文中第一作者的名字是汤普逊,所以我就在标题上称之为汤普逊 NIPS’14**。你可能会注意到,这是 NYU 写的,也是勒村教授的论文之一。而这是一篇超过 600 次引用的论文。( Sik-Ho Tsang @中)**

**人体姿态估计的目标是定位人体关节。**有很多困难,比如关节遮挡、体型变化、服装、灯光、视角等。

概述

  1. 零件检测器:模型架构
  2. 空间模型:关节间的消息传递
  3. 结果

1.零件检测器:模型架构

1.1.从滑动窗口到全图像卷积—单一分辨率

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

From Sliding Window to Full Image Convolution — Single Resolution

  • 作者通过对完整图像执行卷积而不是使用滑动窗口卷积来改进 2013 ICLR 架构。
  • 此外,不是使用全连接层来预测 4 个接头(红、黄、绿和蓝),而是使用 1×1 卷积来替换全连接层,以将特征图的数量从 512 个减少到 4 个。因此,最后,为 4 个关节生成了 4 个热图。

1.2.从滑动窗口到全图像卷积—多分辨率

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

From Sliding Window to Full Image Convolution — Multi-Resolution

  • 此外,为了提高网络的鲁棒性,使用了多分辨率输入图像。与顶部的相比,底部不需要两次滑动窗口卷积。对于底部的网络,在对输入图像进行下采样之后,我们得到 2 个输入图像,网络可以一次性执行。

2。空间模型:关节间的消息传递

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

Message Passing Between Face and Shoulder Joints

  • 一个关节位置可以帮助细化另一个关节位置,例如,通过肩部位置,我们可以知道在正常情况下面部应该在肩部之上。基于这一思想,可以消除假阳性。

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

Single Round Message Passing Network

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

SoftPlus and ReLU

  • 作者设计了一个消息传递网络来逼近马尔可夫随机场(MRF)。该网络用于模拟一元电位和成对电位的估计,以完善结果。
  • 使用 SoftPlus 代替 ReLU。两者具有相似的效果,但是 SofPlus 可以提供平滑的曲线。

3.结果

3.1.培养

  • 首先单独训练零件检测器,并存储热图输出。然后,这些热图被用来训练一个空间模型。最后,将经过训练的部分检测器和空间模型结合起来,用于整个网络的反向传播。

3.2.新的 FLIC **(电影中标记的帧)**加上数据集

  • 为了公平起见,作者对原始 FLIC 数据集进行了微调,以生成新的 FLIC Plus 数据集,使其不与测试集重叠。

3.3.估价

  • 对于给定的归一化像素半径,评估测试集中预测关节位置到地面实况位置的距离落在给定半径内的图像的数量。

3.4.FLIC 测试集和 LSP 测试集

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

FLIC Test Set (Left & Middle) & LSP (Leeds Sports Pose) Test Set (http://sam.johnson.io/research/lsp.html) (Right)

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

LSP Test Set (Left) & Further Study on Proposed Models

  • 曲线越高,模型越好。
  • 我们可以看到,对于 FLIC(顶行,左和中间)和 LSP(右上和左下)测试集,与其他方法相比,所提出的方法(我们的方法)具有较大的优势。
  • 进一步研究空间模型和联合训练的有效性(底部中间),我们可以看到两个网络的联合训练具有最高的检测率。
  • 此外,使用 3 种分辨率的图像输入网络会产生最佳结果(右下角)。

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

Predicted Joint Positions, Top Row: FLIC Test-Set, Bottom Row: LSP Test-Set

参考

【2014 NIPS】【Tompson NIPS’14】
卷积网络和人体姿态估计图形模型的联合训练

我以前的评论

)(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(是)(这)(些)(人)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(们)(就)(想)(到)(了)(这)(些)(人)(们)(,)(我)(们)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(到)(这)(里)(去)(。 )(他)(们)(都)(不)(在)(这)(些)(事)(上)(,)(她)(们)(还)(不)(在)(这)(些)(事)(上)(有)(什)(么)(情)(况)(呢)(?)(她)(们)(都)(不)(在)(这)(些)(情)(况)(下)(,)(她)(们)(还)(是)(不)(在)(这)(些)(事)(上)(有)(什)(么)(情)(况)(吗)(?)(她)(们)(都)(不)(在)(这)(些)(事)(上)(,)(她)(们)(们)(还)(不)(在)(这)(些)(事)(上)(,)(她)(们)(们)(还)(不)(在)(这)(些)(事)(上)(有)(什)(么)(好)(的)(情)(情)(情)(况)(。

物体检测 过食R-CNN快 R-CNN快 R-CNNDeepID-NetCRAFTR-FCNIONmultipath Net【T21 [ 约洛夫 1 ] [ 约洛夫 2 /约洛 9000 ] [ 约洛夫 3 ] [ FPN ] [ 视网膜网 ] [ DCN ]

语义切分 FCNde convnetdeeplab v1&deeplab v2CRF-RNNSegNetparse netdilated netPSPNetdeeplab v3]

生物医学图像分割 [cumed vision 1][cumed vision 2/DCAN][U-Net][CFS-FCN][U-Net+ResNet][多通道

实例分段 DeepMask SharpMask MultiPathNet MNC InstanceFCN FCIS

)(我)(们)(都)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(。

综述:V-Net —体积卷积(生物医学图像分割)

原文:https://towardsdatascience.com/review-v-net-volumetric-convolution-biomedical-image-segmentation-aa15dbaea974?source=collection_archive---------5-----------------------

用于体积医学图像分割的全卷积网络

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

Slices from MRI volumes depicting prostate (PROMISE 2012 challenge dataset)

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

Qualitative results (PROMISE 2012 challenge dataset)

在这个故事中, V-Net 被简要回顾。临床实践中使用的大多数医学数据由 3D 体积组成,例如描绘前列腺的 MRI 体积,而大多数方法仅能够处理 2D 图像。提出了一种基于体完全卷积神经网络的三维图像分割方法。

前列腺 MRI 体积分割是一项具有挑战性的任务,由于广泛的外观,以及不同的扫描方法。强度分布的变形和变化也会发生。

注释医学卷并不容易。注释需要专家,这产生了高成本。自动分段有助于降低成本。

然而,前列腺分割是一项重要的任务,在诊断期间和治疗计划期间都具有临床相关性,在诊断期间需要评估前列腺的体积,在治疗计划期间需要精确估计解剖边界。这是一篇 2016 3DV 论文,引用 600 多篇。( Sik-Ho Tsang @中)

  1. 虚拟网络架构
  2. 骰子损失
  3. 结果

1。虚拟网络架构

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

V-Net Architecture

  • v 网如上图。网络的左边部分压缩路径组成,而右边部分对信号进行解压缩,直到达到其原始大小。
  • 如你所见,它类似于 U-Net ,但有一些不同。

1.1.左边的

  • 网络的左侧分为以不同分辨率运行的不同阶段。每一级包括一到三个卷积层。
  • 在每个阶段,学习一个剩余函数。每一级的输入在卷积层中使用,通过非线性处理,并加到该级的最后一个卷积层的输出上,以便能够学习剩余函数。这种架构与 U-Net 等无残差学习网络相比,保证了收敛性。
  • 在每个阶段执行的卷积使用大小为 5×5×5 体素体积核。(体素代表 3D 空间中规则网格上的值。术语体素通常用于 3D 空间,就像点云中的体素化一样。)
  • 沿着压缩路径,分辨率通过与步长为 2 的 2×2×2 体素宽内核进行卷积而降低。因此,生成的要素地图的大小减半,其目的与汇集图层相似。并且特征通道的数量在 V-Net 的压缩路径的每个阶段加倍。
  • 由于反向传播不需要将池层的输出映射回它们的输入的开关,所以用卷积运算代替池运算有助于在训练期间具有更小的内存占用。
  • 下采样有助于增加感受野。
  • PReLU 用作非线性激活功能。(预走建议在预走网中)。)

1.2.对吧

  • 网络提取特征,并且扩展较低分辨率特征图的空间支持,以便收集和组合必要的信息来输出双通道体积分割。

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

Convolution for Downsampling (Left), Deconvolution for Upsampling (Right)

  • 在每个阶段,使用去卷积操作,以便增加输入的大小,随后是一到三个卷积层,涉及在前一层中使用的 5×5×5 核的一半数量。
  • 剩余函数被学习,类似于网络的左侧部分。
  • 这两个特征映射由最后一个卷积层的计算,具有 1×1×1 核大小并产生与输入卷大小相同的输出。****
  • 这两个输出特征图是通过应用软最大体素法对前景和背景区域的概率分割。

1.3.水平连接

  • U-Net 类似,位置信息在压缩路径中丢失(左)。
  • 因此,从 CNN 左边部分的早期阶段提取的特征通过水平连接被转发到右边部分。
  • 这可以帮助向正确的部分提供位置信息,并提高最终轮廓预测的质量。
  • 并且这些连接改善了模型的收敛时间。

2.骰子损失

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

  • 上面是两个二进制卷之间的骰子系数 D 。(范围在 0 和 1 之间)
  • N 体素, pi :预测体素, gi :地面真实体素。
  • 如上所述,在 softmax 之后的网络末端,我们得到的输出是每个体素属于前景和背景的概率。
  • 和骰子可以被区分,产生梯度:

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

  • 使用骰子损失,不需要对不同类别的样本进行加权来建立前景和背景体素之间的正确平衡。

3.结果

3.1.培养

  • 网络处理的所有体积都具有 128×128×64 体素的固定尺寸和 1×1×1.5 毫米的空间分辨率。****
  • 数据集很小,因为需要一个或多个专家来手动追踪可靠的基本事实注释,并且存在与他们的获取相关联的成本。
  • 只有 50 个 MRI 体积用于训练,相对手动地面实况标注从 PROMISE 2012 challenge 数据集获得。
  • 该数据集包含在不同医院采集的医疗数据,使用不同设备不同采集协议,以表示临床可变性。
  • 因此,需要增加数据。对于每次迭代,使用通过 2×2×2 控制点网格和 B 样条插值获得的密集变形场的训练图像的随机变形版本。
  • 此外,通过使用直方图匹配使每次迭代中使用的训练体积的强度分布适应属于数据集的其他随机选择的扫描的强度分布,来改变数据的强度分布
  • 小批量,只有 2 卷,由于内存要求高。

3.2.测试

  • 处理不可见的 30 个 MRI 体积。
  • softmax 之后的体素属于前景的概率高于属于背景的概率(> 0.5),被认为是解剖结构的一部分。
  • 测量了 Dice 系数和 Hausdorff 距离。
  • Hausdorff 距离是用来衡量形状相似性的。Hausdorff 距离是获得两个形状之间的最大距离。(如果感兴趣,关于豪斯多夫距离的非常简要的介绍在 CUMedVision2 / DCAN 。)

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

Quantitative Comparison on the PROMISE 2012 Challenge Dataset

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

Dice Loss (Green) Logistic Loss (Yellow)

  • 如上所示,使用骰子损失的 V-Net 优于使用逻辑损失的 V-Net。
  • 并且 V-Net 优于大多数现有技术,但不仅仅是 Imorphics。
  • 作者在未来的工作中提到,他们将致力于在其他模态(如超声)中分割包含多个区域的体积,并通过在多个 GPU 上分割网络来实现更高的分辨率。

参考

【2016 3DV】【V-Net】
V-Net:用于体医学图像分割的全卷积神经网络

我以前的评论

)(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(是)(这)(些)(人)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(们)(就)(想)(到)(了)(这)(些)(人)(们)(,)(我)(们)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(到)(这)(里)(去)(。 )(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(但)(是)(这)(些)(人)(还)(有)(什)(么)(情)(况)(呢)(?)(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(但)(是)(这)(些)(人)(还)(是)(这)(些)(人)(,)(还)(是)(这)(些)(人)(,)(还)(没)(有)(什)(么)(好)(的)(情)(情)(况)(,)(还)(是)(这)(些)(人)(,)(我)(们)(还)(没)(想)(到)(这)(里)(来)(。

物体检测 过食R-CNN快 R-CNN快 R-CNNDeepID-NetCRAFTR-FCNIONmultipath Net【T21 [ 约洛夫 1 ] [ 约洛夫 2 /约洛 9000 ] [ 约洛夫 3 ] [ FPN ] [ 视网膜网 ] [ DCN ]

语义切分 FCNde convnetdeeplab v1&deeplab v2CRF-RNNSegNetparse netdilated netPSPNetdeeplab v3]

生物医学图像分割 [cumed vision 1][cumed vision 2/DCAN][U-Net][CFS-FCN][U-Net+ResNet][多通道

实例分割 SDS DeepMask SharpMask MultiPathNet MNCInstanceFCN FCIS

)(我)(们)(都)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(。

(T38) 人类姿势估计 (T39)
[(T41) 汤普森 NIPS’14 [T42)]

复习:YOLOv3 —你只看一次(物体检测)

原文:https://towardsdatascience.com/review-yolov3-you-only-look-once-object-detection-eab75d7a1ba6?source=collection_archive---------1-----------------------

改进的 YOLOv2,性能与 RetinaNet 相当,速度快 3.8 倍!

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

YOLOv3

在这个故事里,华盛顿大学YOLOv3(你只看一次 v3) 进行了回顾。YOLO 是一个非常著名的物体探测器。我想每个人都应该知道。以下是作者的演示:

YOLOv3

由于作者忙于 Twitter 和 GAN,也帮助其他人的研究,YOLOv3 在 YOLOv2 上几乎没有增量改进。例如,具有快捷连接的更好的特征提取器 DarkNet-53 ,以及具有特征图上采样和连接的更好的对象检测器。并作为 2018 arXiv 技术报告发表,引用 200 余篇。( Sik-Ho Tsang @中)

概述

  1. 包围盒预测
  2. 班级预测
  3. 跨尺度预测
  4. 特征提取器:Darknet-53
  5. 结果

1。包围盒预测

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

Bounding Box Prediction, Predicted Box (Blue), Prior Box (Black Dotted)

  • YOLOv2 相同。
  • 预测 tx,ty,tw,th。
  • 在训练期间,使用误差损失平方和。
  • 并且使用逻辑回归来预测客观性分数。如果边界框先验比任何其他边界框先验与地面真实对象重叠更多,则为 1。仅为每个地面真实对象分配一个边界框先验。

2.类别预测

  • 不使用 Softmax。
  • 相反,使用独立逻辑分类器二元交叉熵损失。因为对于多标签分类可能存在重叠标签,例如如果 YOLOv3 被移动到其他更复杂的域,例如开放图像数据集。

3.跨尺度预测

  • 使用了 3 种不同的刻度
  • 特征是从这些尺度中提取出来的,像 FPN
  • 基本特征提取器 Darknet-53 增加了几个卷积层(下一节会提到)。
  • 这些层中的最后一层预测边界框、对象和类别预测。
  • 在 COCO 数据集上,每个尺度 3 个框。因此,输出张量为N×N*×【3×(4+1+80)】*,即 4 个包围盒偏移,1 个对象预测,80 个类预测
  • 接下来,特征图取自前 2 层,并通过 2× 对进行上采样。还从网络的早期获取特征图,并使用连接将其与我们的上采样特征合并。这其实就是典型的编解码架构**,就像 SSD 进化到 DSSD 一样。**
  • 这种方法允许我们从上采样的特征中获得更有意义的语义信息,从早期的特征图中获得更细粒度的信息。
  • 然后,增加几个卷积层来处理这个组合的特征图,并最终预测一个类似的张量,尽管现在大小是两倍。
  • k-means 聚类也用于在之前找到更好的边界框。最后,在 COCO 数据集上,使用了 (10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116×90)、(156×198)、(373×326)

4。特征提取器:Darknet-53

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

Darknet-53

  • YOLOv2 使用 Darknet-19 分类网络进行特征提取。
  • 现在,在 YOLOv3 中,使用了更深的网络 Darknet-53 ,即 53 个卷积层。
  • YOLOv2 和 YOLOv3 也使用批量标准化。
  • 快捷连接也如上图所示。

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

1000-Class ImageNet Comparison (Bn Ops: Billions of Operations, BFLOP/s: Billion Floating Point Operation Per Second, FPS: Frame Per Second**)**

  • 1000 级 ImageNet Top-1 和 Top5 错误率的测量方法如上。
  • 在 Titan X GPU 上使用单作物 256×256 图像测试。
  • ResNet-101 相比,Darknet-53 具有更好的性能(作者在论文中提到了这一点),速度快 1.5 倍。
  • ResNet-152 相比,Darknet-53 具有相似的性能(作者在论文中提到了这一点),并且速度快 2 倍。

5.结果

5.1.可可地图@0.5

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

mAP@0.5

  • 如上图,与 RetinaNet 相比,YOLOv3 以快得多的推理时间得到了不相上下的 mAP@0.5。
  • 例如,yolov 3–608 在 51 毫秒内获得 57.9%的地图,而retina net-101–800在 198 毫秒内仅获得 57.5%的地图,快了 3.8 倍。

5.2.COCO 整体图

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

Overall mAP

  • 对于整体地图,YOLOv3 的性能明显下降。
  • 然而,yolov 3–608 在 51 毫秒的推理时间内获得了 33.0%的 mAP,而retina net-101–50–500在 73 毫秒的推理时间内仅获得了 32.5%的 mAP。
  • 而 YOLOv3 与速度快 3 倍的 SSD 变种并驾齐驱。

5.3.细节

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

More Details

  • YOLOv3 比 SSD 好很多,性能和 DSSD 差不多。
  • 并且发现 YOLOv3 在 AP_S 上的性能相对较好,而在 AP_M 和 AP_L 上的性能相对较差。
  • YOLOv3 比使用 ResNetFPNG-RMITDM 的两级更快 R-CNN 变体具有更好的 AP_S。

5.4.定性结果

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

Nearly Exactly The Same Between Predicted Boxes and Ground-Truth Boxes

其实技术报告中关于 YOLOv3 的细节并不多。因此,我只能简单回顾一下。读 YOLOv3 时建议在 YOLOv2 和 YOLOv3 之间来回。(而且还有段落讲的是整体地图的测量。“是否真的反映了实际的检测精度?”如果有兴趣,请访问该文件。)

参考

【2018 arXiv】【yolo v3】
yolo v3:增量改进

我以前的评论

)(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(要)(到)(这)(些)(人)(,)(但)(是)(这)(些)(人)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(们)(还)(不)(想)(到)(这)(些)(人)(们)(,)(我)(们)(们)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(们)(还)(没)(想)(到)(这)(些)(人)(,)(我)(们)(还)(没)(想)(到)(这)(里)(来)(。 )(我)(们)(都)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(要)(到)(这)(里)(去)(,)(我)(们)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(要)(到)(这)(里)(去)(了)(,)(我)(们)(还)(不)(想)(到)(这)(些)(人)(,)(我)(们)(都)(不)(想)(到)(这)(里)(来)(。

物体检测 过食R-CNN快 R-CNN快 R-CNNDeepID-NetR-FCN离子多路径网NoC

语义切分 FCNde convnetdeeplab v1&deeplab v2parse netdilated netPSP netdeeplab v3

生物医学图像分割 [cumed vision 1][cumed vision 2/DCAN][U-Net][CFS-FCN][U-Net+ResNet

实例分割
[深度掩码 ] [ 锐度掩码 ] [ 多路径网络 ] [ MNC ] [ 实例中心 ] [ FCIS

)( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )(

查看 Python 可视化包

原文:https://towardsdatascience.com/reviewing-python-visualization-packages-fa7fe12e622b?source=collection_archive---------1-----------------------

哪些解决方案在哪些情况下是好的?

使用 Python 创建图形的方法有很多,但是哪种方法是最好的呢?当我们进行可视化时,问一些关于图形目标的问题是很重要的:你是想对你的数据有一个初步的感觉吗?也许你正试图在一次演讲中给某人留下深刻印象?也许你想给别人展示一个内在的形象,想要一个中庸的形象?在这篇文章中,我将介绍一些流行的 Python 可视化包,它们的优缺点,以及它们各自的优势所在。我将把这次审查的范围扩大到 2D 图,为 3D 图形和仪表板留有余地,尽管这些包中有许多对两者都支持得相当好。

Matplotlib、Seaborn 和 Pandas:

我将这些放在一起有几个原因,首先是 Seaborn 和 Pandas 绘图是建立在 Matplotlib 之上的——当你在 Pandas 中使用 Seaborn 或 df.plot()时,你实际上是在利用人们用 Matplotlib 编写的代码。由此产生的美感是相似的,定制你的情节的方式会使用相似的语法。

当我想到这些可视化工具时,我会想到三个词:探索性数据分析。这些软件包对于初步了解您的数据来说非常棒,但在演示方面却很欠缺。Matplotlib 是一个低级的库,允许不可思议的定制级别(所以不要简单地将其排除在演示之外!),但是还有许多其他工具可以使具有演示价值的图形变得更加容易。Matplotlib 也有一套风格选择,模仿其他流行的美学,如 ggplot2 和 xkcd。下面是一些使用 Matplotlib 及其类似工具制作的图表示例:

在处理篮球工资数据时,我希望找到工资数据中值最高的球队。为了表明这一点,我用颜色标记了一个条形图,下面是每个球队的工资,以显示球员应该加入哪个球队,才能加入一个工资高的球队。

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

第二个图是回归实验残差的 Q-Q 图。这种可视化的主要目的是展示,即使美学并不令人瞠目结舌,也只需要很少的线条就能做出有用的可视化效果。

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

最终,Matplotlib 及其相关产品非常高效,但通常不是演示的最终产品。

ggplot(2):

我呻吟着写道。“Aaron,你为什么要谈论最流行的 R 可视化软件包 ggplot?这不是 Python 包审核吗?”你可能会问。开发人员用 Python 实现了 ggplot2,复制了从美学到语法的一切。从我看到的所有材料来看,它看起来和感觉上都像 ggplot2,但有一个额外的好处,即依赖于 Pandas Python 包,该包最近否决了一些导致 ggplot 的 Python 版本不相关的方法。如果你想在 R 中使用真正的 ggplot(它有所有相同的外观、感觉和语法,没有依赖性),我在这里讨论它的一些额外好处!也就是说,如果你真的必须在 Python 中使用 ggplot,你必须安装 Pandas 版本 0.19.2,但是我要警告不要降级你的 Pandas,这样你就可以使用一个劣质的绘图包。

使 ggplot2(我猜还有 Python 的 ggplot)改变游戏规则的是他们使用“图形的语法”来构造图形。基本前提是,您可以实例化您的绘图,然后单独向其添加不同的功能,即标题、轴、数据点和趋势线都是单独添加的,具有各自的美学属性。下面是一些 ggplot 代码的简单示例。首先,我们用 ggplot 实例化我们的图形,设置我们的美学和数据,然后添加点、主题和轴/标题标签。

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

散景:

散景很美。在概念上与 ggplot 类似,它使用图形的语法来构造图形,Bokeh 有一个易于使用的界面,可以制作非常专业的图形和仪表板。以说明我的观点(抱歉!),下面是从 538 男子气概调查数据集制作直方图的代码示例。

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

Using Bokeh to represent survey responses

左边的条形图显示了 538 在最近的一次调查中对“你认为自己是男性吗”这个问题的回答。第 9–14 行中的散景代码创建了一个优雅而专业的响应计数直方图,具有合理的字体大小、y 刻度和格式。我写的大部分代码都用来标记轴和标题,以及给条块加上颜色和边框。当制作漂亮、像样的人物时,我非常倾向于使用散景——很多美学工作已经为我们完成了!

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

Using Pandas to represent the same data

左边的蓝色图是来自上面要点的第 17 行的一行代码。两个直方图具有相同的值,但是用于不同的目的。在探索性的环境中,用熊猫写一行来查看数据要方便得多,但是散景的美学显然更胜一筹。散景提供的每一个便利都需要在 Matplotlib 中进行定制,无论是 x 轴标签的角度、背景线、y 轴刻度、字体大小/斜体/粗体等。下图显示了一些随机趋势,其中使用了图例和不同的线型和颜色进行了一些自定义:

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

散景也是制作交互式仪表盘的好工具。我不想在这篇文章中讨论 dashboarding,但有一些很棒的文章( 就像这个 )更深入地讨论了散景仪表板的应用和实现。

Plotly:

Plotly 非常强大,但设置和创建图形都需要大量时间,而且都不直观。在花了大半个上午的时间研究完 Plotly 之后,我去吃午饭,结果几乎一无所获。我创建了一个没有轴标签的条形图和一个“散点图”,其中有我无法删除的线条。开始使用 Plotly 时有一些值得注意的缺点:

  • 它需要一个 API 密钥和注册,而不仅仅是一个 pip 安装
  • 它打印 Plotly 特有的非直观的数据/布局对象
  • 剧情布局对我来说还没起作用(40 行代码字面上什么都没有!)

然而,对于它的所有设置缺点,也有优点和解决方法:

  • 您可以在 Plotly 网站以及 Python 环境中编辑地块
  • 对交互式图形/仪表板有很多支持
  • Plotly 与 Mapbox 合作,允许定制地图
  • 伟大的图形有惊人的整体潜力

对我来说,只是抱怨 Plotly 而不展示一些代码和我能够完成的与更有能力使用这个包的人所做的相比是不公平的。

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

A bar graph representing average turnovers per minute by different NBA teams

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

An attempt at a scatterplot representing salary as a function of playing time in the NBA

总的来说,开箱即用的美学看起来不错,但是多次尝试修复轴标签,逐字复制文档,没有产生任何变化。然而,正如我之前承诺的那样,这里有一些展示 Plotly 潜力的情节,以及为什么花几个小时以上可能是值得的:

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

Some sample plots from the Plotly page

Pygal:

Pygal 是一个鲜为人知的绘图包,和其他流行的包一样,它使用图形框架的语法来构造图像。这是一个相对简单的软件包,因为绘图对象非常简单。使用 Pygal 非常简单:

  1. 举例说明你的身材
  2. 使用图形对象的属性格式化
  3. 使用 figure.add()符号将数据添加到图形中

我和 Pygal 之间的主要问题是如何渲染这些数字。我必须使用他们的 render_to_file 选项,然后在 web 浏览器中打开该文件,看看我构建了什么。它最终是值得的,因为数字是互动的,有一个愉快的和容易定制的美感。总的来说,这个包看起来不错,但是有一些文件创建/渲染的怪癖限制了它的吸引力。

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

网络 x:

Networkx 是分析和可视化图形的一个很好的解决方案,尽管它在视觉上基于 matplotlib。图形和网络不是我的专业领域,但是 Networkx 允许快速简单地用图形表示连接的网络。下面是我构建的一个简单图形的几种不同表示,以及一些开始绘制一个小型脸书网络的代码。

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

我用编号(1-10)对每个节点进行颜色编码的代码如下:

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

下面是我写的用来可视化上面提到的稀疏脸书图的代码:

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

This graph is quite sparse, Networkx shows it by giving each cluster maximum separation

有这么多的软件包来可视化数据,但没有明确的最佳软件包。希望在阅读完这篇评论后,您可以看到各种美学和代码如何适用于不同的情况,从 EDA 到演示。

重温以前的经历可以帮助人工系统更快地学习

原文:https://towardsdatascience.com/revisiting-previous-experiences-can-help-artificial-systems-to-learn-faster-4975298697e8?source=collection_archive---------35-----------------------

优先体验重放建议混合新旧体验以加速学习

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

Photo by Robina Weermeijer

e enforcement Learning(RL)是一个框架,它有很大的潜力成为“下一级”人工智能的基础,即所谓的人类级人工智能。在[1]中,Nils J. Nilsson 将这个下一级描述为:

“[……]通用的、可教育的系统,可以学习并被教会执行人类可以执行的数千种工作中的任何一种。”

RL 成为实现这一目标的良好候选的原因很简单:它基于奖励的学习机制接近于人类大脑用于学习事物的机制。RL 代理通过试错来学习如何表现以最大化收到的奖励(可以想象一只狗从它的主人/训练员那里得到款待)。

尽管具有潜力,经典 RL 方法显示出许多局限性,即使能够解决许多复杂的问题,也远远不能实现这一通用的长期目标。

在寻求改进的过程中,许多研究人员提出了扩展 RL 的生物启发方法。下面描述的方法包括以有效的方式使用存储的存储器来加速学习。

记忆帮助我们学习

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

Photo by Conmongt

神经科学领域的研究支持,包含先前经历的记忆在啮齿动物的海马体中重演,这在不同水平的大脑活动中观察到。

结果还显示,导致某种程度奖励的经历会更频繁地重演。更有趣的是,新鲜感还与重演某些经历的概率相关,如[2]所述:

“[……]我们已经确定,例如,在新的环境和奖励驱动的空间任务中,多巴胺能释放对于偏向随后重放轨迹的内容是重要的,有可能加强新的位置细胞组合和位置-奖励关联。”

这意味着学习也是通过重温旧的经历来进行的,并且使用某种机制来选择更好的经历以优化学习过程,例如,选择呈现某种程度的新颖性或与收到的奖励相关联的经历。

体验回放

为了模仿生物系统中存在的这种经验机制,在[3]中提出了称为经验重放的方法,以及用于规划和教学的学习行为模型。这三种扩展方法被建议用来加速 AHC(自适应启发式批评家)和 Q-学习算法的学习。应用体验回放的动机是:

“基本的 AHC 和 Q 学习算法[……]效率低下,因为通过反复试验获得的经验仅用于调整网络一次,然后就被丢弃。这是一种浪费,因为有些经历可能是罕见的,而有些经历(如涉及损害的经历)的获得成本很高。应该以有效的方式重复利用经验。”

假设是存储和处理以前的经验比与环境互动“更便宜”。

经验定义为四重, (s,a,s’,r) ,意思是执行一个动作 一个 处于一个状态 s 产生一个新的状态***‘s’***和奖励 r 。当与环境交互时,代理记住(通过采样)它过去的经验,以便从中学习更多。

通过应用体验重放缓解的两个主要问题是:

  1. **强相关更新:**流行的基于随机梯度的算法假设变量是独立同分布的(独立同分布)。然而,独立同分布假设不太适合马尔可夫链(状态序列)。当把在线体验和存储的体验混合在一起时,就有可能“打破”连续状态之间的关联。
  2. **遗忘重要经验:**如前所述,有些情况可能很少经历,经典 RL 算法只是在下一次迭代中丢弃旧的经验。

优先体验重放(PER)

经验回放的引入已经是 RL 的一大进步。然而,生物学证据支持一些经历比其他经历更频繁地重演。

在[4]中,提出了经验重放方法的改进版本 PER。主要思想是使用 TD 误差作为一个度量来定义重放一些经验的概率。

TD 误差代表给定状态的预测误差(模型输出和接收到的奖励之间的差异),经常被用作优先化机制(例如,人工好奇心[5]和特征选择[6])。

其动机是,类似于生物系统,学习系统可以从中学习更多的经验(即与大的 TD 误差相关的状态)应该更频繁地重放,从而加速学习过程。

[4]中的结果表明,在应该学习如何玩 Atari 游戏的代理上应用 PER 允许将学习速度提高 2 倍。

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

Photo by Kirill Sharkovski

不仅 RL 可以从中受益

[4]中给出的另一个有趣的结果是,同样的方法可以用于改进监督学习方法。该方法被重新命名为优先采样,包括更频繁地使用代表更高误差的例子,以集中优化(学习)过程:

“在监督学习的环境中,类似于优先重放的方法是从数据集中进行非均匀采样,每个样本使用基于其最后出现的错误的优先级。这可以帮助将学习集中在那些仍然可以学习的样本上,将额外的资源投入到(硬)边界情况中”

这种方法在处理不平衡数据集时尤其有用,因为包含较少表示的类的示例将具有较高的采样优先级,前提是它们仍然会导致较大的预测误差。

当应用于经典 MNIST 数字分类问题的类不平衡变体时,优先化采样被证明导致在泛化和学习速度方面的性能提高。

参考

[1]Nils j . Nilsson《人类级人工智能?认真点!."艾杂志 26.4(2005):68–68。阿泽顿、劳拉·a、大卫·杜普雷和杰克·r·梅勒。"记忆痕迹重放:通过神经调节形成记忆巩固."神经科学趋势 38.9(2015):560–570。
[3]林,隆基。"基于强化学习、规划和教学的自我改进反应代理.“机器学习 8.3–4(1992):293–321。
[4]绍尔,汤姆等,“优先化的经验重放”arXiv 预印本 arXiv:1511.05952 (2015)。
【5】“人工智能如何变得好奇?””【https://towardsdatascience . com/artificial-curiosity-e 1837 E4 ca 2c 9
[6]孙,易,等《基于时差误差的增量基构造》。“ICML。2011.

人工智能革命

原文:https://towardsdatascience.com/revolution-of-artificial-intelligence-260924f4c933?source=collection_archive---------17-----------------------

在为时已晚之前应该问的问题

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

Pexels

机器是需要特定指令来执行的哑东西,但自从人工智能和机器学习的兴起,事情开始变得不同,因为机器开始根据它们拥有的数据做出决定,并开始从错误中学习。据预测,未来机器将更能控制自己的决策。

谁知道呢?他们将来可能会控制我们,甚至把我们送进监狱。

在 UCL 大学,他们开发了一个程序,可以根据案件文件预测刑事案件的判决,该程序使用 500 个样本显示了类似人类的结果,准确率为 80%,此外,人类不是 100%准确,我们的表现在很大程度上取决于许多生物因素,如情绪,精神状态,甚至身体状态。

我们的智力不仅取决于生物因素,而且还受到我们生物极限的限制,我们的大脑大小固定,不具备像机器一样进行分布式(并行)处理的能力。人类直到现在都在尝试使用工具来克服这些限制,比如使用纸张、提醒和计算器。

大约 100 年前,我们还没有广泛接触到电力,但现在,随着电力的兴起,它改变了每一个主要的工业,通信,汽车等。在 18 世纪,70%的美国居民从事农业,今天,不到 1%的人从事农业,这是在大约 200 年内发生的,这是因为在电气领域发生了几次革命。

“人工智能是新的电力”,吴恩达说

在预测未来三十年将形成的十二种技术力量的《不可避免》一书中,凯文·凯利说,使用我们从云中获得的廉价而强大的人工智能,一切都将变得更加智能。

谷歌在过去几年中收购了超过 13 家人工智能公司,我们知道 Alphabet——谷歌的母公司和几家前谷歌子公司——从谷歌的搜索引擎中获得了大约 70%的利润,但预计到 2026 年,谷歌将成为一家主要依赖人工智能项目的公司。

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

Image by Gerd Altmann from Pixabay

我们在互联网上做的一切都被记录下来,当你在谷歌上搜索“Maher”并点击我的照片时,你只是告诉谷歌这是 Maher,这是他的长相,你在网上采取的每一个行动,很可能都被记录下来,以改善互联网和人工智能引擎。

如果机器将拥有意识,有许多问题需要回答。

比如,我们会告诉机器崇拜某个上帝,还是它们会崇拜我们,它们的主要创造者,设计它们的工程师?

如果智能机器做错了什么,比如杀了人,会怎么样?我们会惩罚机器还是给它编程的工程师?让它变得智能并能杀人的工程师,从技术上来说,他创造了一种能自动杀人的武器。

我认为,如果机器获得了意识,我们应该通过在它们身上实施惩罚系统来让它们经历惩罚,以便我们能够在它们犯错误时惩罚它们,因为我们不确定它们是否都是好的。

机器人可以是种族主义者,2016 年微软创建了一个名为 TayandYou 的 Twitter 机器人,不到 24 小时后,该机器人就成为了种族主义者和反对女权主义者,它在社交媒体上变成了一个笑话,但仍然引发了一些问题。

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

机器主要从我们和他们的环境中学习,所以我们应该小心我们教给他们的东西。当然,这只是暂时的,将来他们可能会有自己的观点和想法,这些观点和想法来自经验和认知思维。

到目前为止,这些机器必须对人类负责。他们缺乏在程序之外做决定的能力。我们还没有达到通用人工智能——它是一台能够成功完成人类可以完成的任何智力任务的机器的智能——但是许多伟大的思想家说,我们离达到那里并看到科幻成为现实不远了。

在我看来,人工智能不一定是一件坏事,它们会对我们有很大的帮助,加里·卡斯帕罗夫认为机器应该赋予我们权力,而不是压倒我们,在 2014 年的一次国际象棋比赛中,人工智能独自赢得了 42 场比赛,但人工智能与人类一起赢得了 52 场比赛,人工智能主要根据我们创造和收集的数据进行训练,所以直到现在,人类和人工智能相互需要。

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

Pexels

通用人工智能可能是人类自发现火和农业以来取得的最大成就,在机器达到技术奇点——人工超级智能的发明——一个可升级的智能代理将进入自我改善周期的“失控反应”,每一代新的更智能的一代出现得越来越快,导致智能爆炸,并产生一种强大的超级智能,在质量上远远超过所有人类智能。

我们会进入这样一个未来吗?在这个未来,我们享受着宁静的生活,而计算机和人工智能为我们做所有的工作。机器会终结人类吗?我们会不会像电影里看到的那样,永远生活在有意识的电脑上,抛弃自己的身体?

这些都是我们需要回答的问题,如果有一天我们设法创造出一个超级智能的机器。

使雪花与众不同的革命性特征——深度潜水

原文:https://towardsdatascience.com/revolutionary-features-of-snowflake-that-sets-it-apart-a-deep-dive-773ba52ee694?source=collection_archive---------12-----------------------

雪花提供了足够的功能来投入时间和资源吗?有周围炒作的那么好吗?让我们深潜,看看是什么让它与众不同。

最近,我有机会参加在悉尼举行的雪花峰会。我学到了一些东西,并想在实际数据上尝试一下。起初是试探性的,但在对 40GB 的数据使用它后,我意识到有一些功能使雪花在市场上与 Redshift,Azure SQL 或类似的 MPP 数据仓库竞争。

因此,这篇文章涵盖了 snowflake 的一些特性,这些特性在其他 MPP 仓库中要么没有实现,要么部分实现,或者工程师在进行 ETL 时必须实现,还有一些特性是很好的,但如果没有,也不会产生任何影响。

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

区分特征

排名不分先后,以下是一些有用的特性,这些特性让雪花有别于其他 MPP 仓库。

克隆桌子

雪花称之为‘零拷贝克隆’。雪花的区别特征之一。让我们来看一个用例,工程师或分析师必须克隆一个表,要么进一步修改它,要么只对它进行快照。现在,正如我们所知,任何 MPP 仓库都会创建表的深层副本,这会消耗额外的空间,而当您在雪花中克隆它时,它只会将原始表的指针存储在新表中。换句话说,数据实际上是相同的,但是通过两个不同的表引用。

现在,当您更改新表时,它将只存储该列,而其余的列仍然使用相同的指针。因为,雪花像其他 MPP 仓库一样,以列格式存储数据,这个特性变得非常有用。

放下&取消放下桌子

顾名思义,可以在这个命令的帮助下取消已删除的表格。如果您有一个工程师正在处理一个对资源有 drop 访问权限的表,并且意外地删除了它,那么这个特性可能会很有用。起初,这个特性没有任何意义,因为您不会将 drop 访问权授予无意中删除了一个有用表的工程师。但是考虑到一些公司更喜欢对他们的数据环境采用分散的方法,你可能会遇到由不太有经验的人来处理不同的账户,这些人可能会在他们的实例中丢失一个有用的表。相信我,这种事情现在已经发生了很多次了。

因此,以下命令允许您取消删除表格:

Undrop table {table_name};

一旦执行了上述命令,输出/结果窗格将显示以下响应。

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

默认情况下,雪花有 24 小时的时间来取消桌面,但如果您使用企业版,则有 90 天的时间。

提交后回滚一个表

本质上,这个特性是对 update 语句的回滚,即使是在提交之后。或者换句话说

update {table_name} set {column_name} = ‘value’;

更改基于每个查询的计算

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

正如在上面的窗口中可以看到的,我们可以在执行特定查询之前更改集群配置,以便让雪花使用更高的计算能力,如果我们将要执行的查询是繁重的,反之亦然。因此,当您想要运行查询时,只需选择查询,更改仓库并单击 run。最好的部分是您可以将它包含在您的 ETL 中,并充分利用它。我将把它留给你去探索。是的,这里的仓库和我们所知道的有所不同。

自动缩小比例

所以,这确实引起了我的注意。在深入研究这一点之前,让我首先告诉您,雪花就是这样一种数据仓库功能,其中计算和存储是分开计费的。或者换句话说,如果集群(这里是仓库)在不使用的时候被挂起,那么您将会节省很多钱。

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

在配置仓库时,您可以指定 Auto suspend 特性,这实际上意味着如果集群在特定时间内处于非活动状态,它的计算将缩减到 none。您还可以指定扩展策略,以便动态地来回扩展集群/仓库。最棒的是,您甚至可以通过脚本动态缩放它。

所有云提供商集中在一个地方

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

您需要让雪花知道数据当前存放的现有暂存区域。最好的部分是我们可以在数据库中有一个模式,它指向 AWS 中的 s3 位置,而其他模式可以指向 Azure blob。通过单击“Create ”,您可以创建让您选择 s3 位置的模式。对于 Azure Blob 也是如此。

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

当您运行如上所示的查询时,它将显示特定路径下的所有键/文件/blob。

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

据我所知,谷歌云存储的整合还在进行中,很快就会推出。

也可以使用以下命令创建阶段:

create stage {stage_name} url = {s3_location};

复制拼花文件

在写这篇文章的时候,AWS 在 Copy 语句中没有 parquet 选项,你需要启动 ADLA 在 Azure 中做同样的事情。而在 snowflake 中,您可以借助以下步骤将 staging 中的拼花数据复制到表中:

首先,您需要创建文件格式,这实质上是您让雪花知道的模式,以便它在将数据加载到表中之前正确地解析数据。

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

在这里,您可以指定格式类型(拼花)、压缩、分隔符等。这些选项或多或少与 Redshift Copy 语句中的选项相同。

在加载到表格之前查看 s3 数据

Snowflake 允许您在将临时区域加载到表中之前查询它。它会让您知道暂存区中有哪些记录。我会让你知道怎么做。不用说,这对于避免表中的加载错误非常有帮助。

有特色真好

这些是 snowflake 中的特性,在其他 MPP 仓库中也很好,但是如果没有这些特性也不会有太大的不同。

缓存查询结果

雪花缓存过去 24 小时内执行的每个查询的结果。因此,除非表中的下划线数据已经改变,否则相同的查询将给出相同的结果。然而,除非数据发生变化,否则几乎没有任何人需要再次执行相同查询的情况,但不管怎样,拥有这个特性还是很好的。

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

当您检查历史记录时,可以看到第二个查询比第一个查询执行得快得多,而两个查询完全相同。

在一个用户界面中进行计算、操作和存储

大多数云提供商已经处理了计算、操作和存储,但是当您想要了解集群配置时,您必须单独打开云提供商的门户来查看。而在 snowflake 中,同一个窗口将给出执行了什么查询,什么时候执行的,以及通过哪个集群配置执行的。都在一个地方。再说一遍,有功能是好事,但没有增加多少价值。

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

在上面的窗口中,“Warehouses”窗格将让您知道什么是集群配置,“Databases”将列出具有所需功能(如 create)的数据库,Worksheets 实际上是它的 SQL 编辑器,“History”给出了过去 1 年中执行的查询列表,“Shares”将让您知道您共享了什么以及与谁共享了什么。

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

历史浏览界面

到目前为止,如果我们需要从历史中提取值,要么我们需要运行系统查询,要么创建一个单独的 ETL,它接收历史日志并将数据推入所需的历史表中。但是在 snowflake 中,您可以查看您和其他用户(如果您是 sysadmin 或更高级别的用户)在过去 1 年中执行的查询列表。从数据治理的角度来看,这是一个有用的特性。

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

转换角色

如果您是 sysadmin 或 accountadmin,您可以承担其他角色,并检查您创建的角色是否具有足够的治理。

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

共享表到另一个账户

我们经常会遇到这样的情况,我们需要与分析师、数据科学家或业务分析师共享一个特定的表,而这个团队有一个不同的雪花帐户。雪花让您安全地共享表,以便其他团队可以根据需要处理数据。

包裹

我不应该称之为特色,而应该称之为实践。Snowflake 试图促进的一个实践是,它有目的地让您在冷存储中创建暂存区,以便您可以在将数据加载到其中之前看到数据的样子。这是一个非常有用的实践,但恐怕还没有多少公司采用。然而,现在,结果窗口只显示最近的结果,并且 GUI 没有能力提供选项卡式的多个结果来比较一个输出与另一个输出。从我的角度来看,这是 snowflake 目前缺乏的一个主要特性,但我不能责怪他们,因为没有其他云供应商将 sql 编辑器完全嵌入其中,更不用说多个查询结果了。

最后,我只在 40GB 的数据上使用了它,没有机会在我们 20TB 的数据仓库上使用它,但据我所知,如果不明智地使用,雪花会变得有点昂贵。好吧,伟大的特性是有代价的。

革新编辑——我最后一年的项目

原文:https://towardsdatascience.com/revolutionising-redaction-my-final-year-project-fe664e28ef84?source=collection_archive---------22-----------------------

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

现在,随着法规的重大变化,确保个人数据的安全并仅由正确的人查看变得更加重要。由于这是一个现在如此热门的话题,我非常渴望在最后一年的项目中挖掘这个日益增加的问题。

我目前正在贝尔法斯特皇后大学完成我最后一年的软件工程学习,并且得到了 T2 凯诺斯公司的赞助来完成这个项目。在这篇博客中,我计划带你开始我的项目之旅,包括它的必要性和所用技术的高层次概述。

那么,问题是什么呢?

修订是从文档中删除敏感信息的实际过程,它需要跨许多不同的行业来完成。它通常需要有人手动逐字浏览文档,寻找要删除的敏感信息,这当然是一项非常耗时、乏味且容易出现人为错误的任务

我相信我们都见过一些文档,它们看起来是这样的:

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

编校的一个主要问题是,当许多单词被删除时,文档的整个上下文可能会丢失。

我的解决方案

这个项目的总体目标是识别和删除文档中的敏感信息,同时仍然保留其整体上下文。该项目分为 3 个主要特点:

1.自动校订器——旨在获取用户的文档,自动识别和替换敏感词,并向他们呈现文档的校订副本

2.用户选择修订 —旨在获取用户的文档,自动识别敏感词,并将这些词发送回用户,让他们选择要删除哪些词。

  1. Labeller —旨在使重新训练模型识别更多单词的过程更加容易和快速。

如何识别敏感词?

这个项目围绕着识别文档中敏感词的能力。为此,我正在利用自然语言处理(NLP),这是人工智能的一个子领域,它是计算机处理、分析和理解人类语言的能力。

在 NLP 中,该项目特别关注命名实体识别(NER ),它搜索文本主体并将命名实体分类到预定义的类别中。这些类别可以是不同类型的敏感词,例如人名、组织、货币价值、位置和日期。

为了帮助我完成这项任务,我遇到了一个非常棒的开源 python 库,名为 spaCy ,这是一个用于高级自然语言处理的库。

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

spaCy 是惊人的,有助于通过一系列语言注释显示文本的语法结构。它可以识别关于文本的不同属性,例如:基本单词形式;如果单词包含字母字符或数字;句子边界检测,并可以标记词类,例如,如果该词是名词,动词,形容词等。

处理不同类型的文档

由于修订发生在如此多不同类型的行业,我希望该项目能够迎合可能上传的不同风格的文档。例如,法律文件中的措辞可能与医院报告中的不同。为了能够处理这个问题,我需要利用多种人工智能模型——但这些是什么呢?

人工智能模型是二进制数据,这些数据是通过向系统展示足够多的例子来产生的,这些例子使系统能够做出跨语言的预测。对于这个项目,我使用了默认的空间模型,并以我自己的训练数据为基础。

该项目由三个独立的模型组成,因此可以使用特定于领域的模型来编辑文档。比如说;如果用户正在上传法律文档,它将使用专门针对法律文档训练的模型。该项目包含的三个模型是法律、保险和一般模型。

自动编辑程序

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

项目中的主要功能之一是自动编校器。我已经建立了它,以便一旦用户上传一个文件,他们需要选择其类型,如法律,保险或一般,为应用程序找出应该使用哪个模型。

一旦文档被上传,就会发生一系列不同的过程,以便对文档中不同类型的单词/短语进行预测。如果你有兴趣听到更多关于这个过程的信息,深入的描述和例子可以在这里找到。

我使用自动编校器的主要目的是让它不仅能删除文档中的敏感信息,还能保留文档的上下文。为了达到这个目的,一旦敏感词被识别出来,我就用它们的标签来代替它们。例如,如果一个名字被识别出来,它就会被删除,取而代之的是“人”这个词。这确保了文档的内容仍然完好无损,但是文档不再包含任何敏感信息。

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

用户选择编辑

在最初的项目研究中,我发现有时并不是所有的敏感词都需要从文档中删除。例如,如果一家企业与某个特定的客户合作,可能需要删除关于该客户的信息,但可以保留关于企业本身的信息。

为了能够处理这个用例,我创建了一个名为用户选择修订的功能,它通过让用户选择预览已经识别的敏感词来工作。

当用户上传文档时,如果他们选择了预览选项,那么已经被模型识别的敏感词列表将被发送回给他们。

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

然后,用户可以简单地选择他们想要从文档中删除的单词。然后,只有选中的单词会被它们的标签替换,用户会收到可以下载的修订文档的副本。

再培训模型

这个项目的另一个主要功能是贴标机。我构建了这个工具,试图让重新训练模型识别更多单词的过程变得更容易、更快。

重新训练模型不是让它们记住更多的例子,而是让单个模型改进它们的算法,以便它们可以用于概括越来越多的文档。在自动编校器中,模型根据他们看到的文档进行预测,因此提高识别文档中所有敏感词的准确性的唯一方法是用更多的数据进行重新训练。

标签器允许用户通过选择一个单词,然后点击他们希望分配给它的标签的按钮来高亮显示该单词。

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

为了实际使用这些单词来重新训练现有的模型,需要获取与整个文件相关的每个单词的开始索引和结束索引。这些索引和每个敏感词的标签用于与原始文件一起建立训练数据。

在不涉及太多细节的情况下,该过程获取训练数据中的每个单词,并使用该模型对它认为该单词是什么命名实体进行预测,然后查看训练数据中该单词所附的标签,以查看该预测是否正确。如果预测不正确,它会调整其权重,以便下次获得正确的结果。然后,对模型的更新被保存到模型中以更新它。

项目完成

完成后,可以清楚地看到,像这样的项目在私营和公共部门都有很大的潜力,因为它可以在符合 GDPR 标准的位置呈现文本数据。

这个项目不仅使编辑过程更快更容易,而且也有可能成为人工智能行业的革命。当数据包含敏感信息时,很难找到可用的数据来训练人工智能模型。目前,有许多任务人工智能可以协助,但不能,因为所需的数据集包含个人信息,导致它是可牺牲的。有了这样的产品,数据集很容易被匿名化,因此可以被使用。

接近完成时,该项目被列为久负盛名的 Megaw 纪念讲座的决赛选手之一,这是皇后大学内部的一项竞赛,面向电子、电气工程和计算机科学学院的所有毕业班学生开放,以展示他们的毕业班项目。

在介绍了该项目的业务需求和创建该项目所使用的技术后,该项目被评为总赢家,并由工程技术研究院 (IET)授予 Megaw 纪念奖。

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

我还想说,我非常感谢 Kainos 赞助这个项目,并为我提供了乔丹麦克唐纳作为项目导师,他在整个项目期间的指导是非常宝贵的。

进化算法中的奖励黑客

原文:https://towardsdatascience.com/reward-hacking-in-evolutionary-algorithms-c5bbbf42994b?source=collection_archive---------20-----------------------

人工智能代理如何通过准确地做他们被告知的事情来欺骗系统,以及我们能从他们身上学到什么

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

Image Source: The Wolves of North America, Vol. II, Edward Alphonso Goldman

如果 W. W .雅各布斯出生在一个世纪之后,猴爪可能会有一个邪恶的人工智能,而不是那只被诅咒的手。人工智能代理,像有名无实的 paw,因为以一种没有人期望或想要的方式做了他们被 T2 要求做的事情而臭名昭著。就像偶尔的消防员为了扮演英雄和“拯救世界”而纵火(你已经是英雄了,伙计),就像那只狗在救了一个溺水的孩子后得到了牛排的奖励,所以走上了把孩子扔进河里的道路,人工智能特工会做任何他们能做的事情来最大化他们的奖励。这种行为,其中人工智能代理使用违反规则精神或意图的策略增加他们的奖励,被称为奖励黑客。通常,对人工智能开发者或政策制定者来说似乎合理的回报会导致令人捧腹的灾难性结果。在这里,我们将探索人工智能代理在追求奖励时表现淘气的三个案例,以及它们可以教给我们什么是好的奖励设计,无论是在人工智能中还是对人类而言。

进化算法:导论

如果你还没有,看看我的文章 进化的神经网络 对进化算法的解释。如果你已经读过,请随意跳过这一部分。如果你没有也不会,这里有一个概要:

进化算法是一种涉及模拟生物进化以产生某个问题的解决方案的技术。模拟中的每个有机体都是所述问题的潜在解决方案。这些生物体实际上可以是任何东西:蛋白质的 3D 结构、电子元件、虚拟汽车等等。该算法的步骤很简单:

  1. 创造一个随机有机体的初始种群。
  2. 衡量每一个有机体对于你试图解决的问题有多好。这被称为生物体的适应度
  3. 选择最好的生物,让它们交配,为下一代创造一个新的种群。
  4. 通过随机调整使这些后代变异。
  5. 带着变异后代的新群体回到第二步。

假以时日,该算法将(有希望)进化出一种足以解决上述问题的有机体。虽然奖励黑客行为发生在所有类型的强化学习中,但我选择关注它在进化算法中的发生,因为进化没有能力预见或规划,这表明这些病理策略是进化稳定的,有机发展的。

它们越大…

1994 年,卡尔·西姆斯发表了一篇名为 进化中的虚拟生物 的论文

描述了一种使用遗传算法创建虚拟生物的新颖系统,这些虚拟生物在模拟的三维物理世界中运动和行为………。(西姆斯,1994 年)

正如论文所解释的,西姆斯开发了一种生成和训练模拟 3D 生物的方法。这些生物的 DNA 被编码成一个有向图,通过遍历该图,将每个节点实例化为一个肢体,来表达为一个有机体。下图说明了 DNA 是如何表现的,以及三种生物的基因组是如何表现为虚拟生物的。

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

The DNA and morphology of the creatures described by Sims (Source: Sims, 1994)

模拟生物进化成在不同环境中执行各种任务。其中包括:

1.游泳

生物被放入虚拟的水下环境,目的是进化出会游泳的生物。通过禁用重力和添加粘性效果来模拟水,粘性效果引入了摩擦力和通过推动水进行推进的潜力。每个模拟都运行一段固定的时间,并测量生物体的适应度分数。从报纸上看,

游泳速度作为适应值,用单位时间内生物质心移动的距离来衡量。

在实验中,西姆斯遇到了一些困难。首先,这些生物似乎学会了转圈游泳,或者前后摆动。从技术上讲,这两种行为都构成了适应度函数所定义的“游泳”,但这两种行为都不太可能是模拟人生的初衷。具有这些行为的生物利用了平均速度的奖励,因此学会了快速移动,而不用实际去任何地方。为了防止这种情况,适应度函数被改为奖励绝对平均速度,而不是平均速度(换句话说,生物的奖励与它们开始和结束的距离成比例)。

另一个意想不到的策略是,生物先做一个大的初始推动,然后在水中滑行,这与其说是游泳,不如说是有风格的流动。为了防止这一点,适应度函数被改变,以在模拟结束时给生物的速度增加额外的奖励,鼓励他们坚持到最后。

2.跳跃的

生物被放在一个虚拟的陆地环境中,目的是进化出一种可以跳跃的生物。通过引入重力、去除粘性水效应和添加具有摩擦力的平坦地面来模拟陆地环境。当我们说“跳”的时候,重要的是我们要把它定义为一个清晰可测量的动作。从报纸上看,

跳跃行为可以通过测量生物最低部分离地面的最大高度来选择。

请注意模拟人生是如何明确地指出这是生物最低部分的最大高度。一个不太细心的研究人员(甚至可能是第一次尝试的西姆斯)可能会将这里的适应度定义为生物的质心离地面的最大高度,正如游泳实验中所使用的那样。乍一看,质心适应函数似乎是合理的,但在实践中,生物可以通过长得可笑的高来轻易地欺骗这个系统。另一个乍一看似乎合理的潜在适应度函数是生物最低部分的平均高度;然而,这可能导致生物反复进行小跳跃,而不是认真学习跳跃。

3.步行

生物再次被置于模拟的陆地环境中,这一次是为了进化出一种可以在陆地上移动的生物。与游泳实验相似,该论文指出

[a]增益,速度被用作选择标准,但是速度的垂直分量被忽略。

通过“速度”,似乎西姆斯再次意味着“绝对平均速度”,我们可以假设他也增加了相同的奖金有一个大的最终速度。在论文的这一部分,西姆斯描述了一些生物发展出的一种不幸的策略,这种策略包括长得很高和摔倒。虽然这些生物肯定移动得非常快,但这是否是有意为之的行为值得怀疑。Sims 能够防止这种情况,“首先在没有摩擦力和效应器力的情况下运行模拟,直到质心的高度达到稳定的最小值。”这是一种奇怪的方法,因为改变适应度函数来测量生物的最接近点的绝对平均速度,而不是它的质心,会更简单,也同样有效。

从字里行间解读

进化中的虚拟生物就其本身而言是一篇优秀的论文,但当你理解作者不得不与他的生物的自然倾向作斗争以欺骗系统的每一步时,它会变得更好。通读方法论,他提到了几件可能出错的事情,我们可以肯定他是凭经验说话。如果你有兴趣看这些生物的行动,这里有一个视频。很抱歉质量不好。

一丘之貉…

1995 年,拉里·耶格尔(Larry Yaeger)发表了一篇名为 PolyWorld:新背景下的生命 的论文,他在论文中描述了虚拟世界中模拟生物的同时进化。就像 Sims 的论文一样,PolyWorld 是一个虚拟的 3D 环境,用于创建生物体,其形态和行为是由进化算法开发的。与 Sims 的论文不同,在该论文中,生物体被孤立地模拟,PolyWorld 被设计成允许生物体相互作用。

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

A screenshot of PolyWorld from the original paper

尽管实现起来很复杂,但 PolyWorld 的前提非常简单。具有随机形态和行为的生物被放置在 3D 环境中,该环境由一个平面(地面)、自由生长的食物和可选的障碍组成。生物通过行动与环境互动,包括移动、进食、交配和打斗等。为了采取这些行动,生物必须消耗能量。通过吃食物或其他生物的尸体来恢复能量。当一个生物耗尽能量时,它就会死亡。如果两个生物接触并都开始“交配”行为,它们繁殖,并各自给后代一些能量。

通常,遗传算法包括一个适应度函数,旨在进化出一个解决特定问题的有机体,如西姆斯对有机体游泳、跳跃和行走能力的评估。然而,耶格尔在《多元世界》的论文中指出

除了生存没有健身功能。

这使得《聚世界》成为虚拟生命的真实模拟,并且像《有机生命》一样,它产生了一些相当非正统的生存策略。

无尽形态最美?

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

Either way, they’re in for a good afternoon (Source: freepik)

耶格尔描述了一个在没有墙壁的环形环境中进化的物种,他称之为“狂热的慢跑者”;这些小动物的特征是总是直线奔跑,适当地与它们接触的任何东西交配或进食。随着时间的推移,慢跑者通过繁殖出他们遇到的任何其他生物的多样性来主宰种群。尽管狂热的慢跑者显然过着他们最好的生活,但他们对生存问题的解决方式过于简单。为了解决这个问题,耶格尔增加了一个杂交功能,它阻止基因不相似的生物繁殖,鼓励物种形成。自由恋爱和马拉松的时代结束了。

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

The secret ingredient is love (Source: freepik)

耶格尔描述的另一个物种是“懒惰的食人族”。这些生物过着定居的生活,通常在它们出生的几步之内死去。然而,这并不是说他们的生活很无聊;食人族形成了群体,在群体中他们会交配、战斗、杀戮、互相吞食(不一定是这个顺序)。如果你想象整个《权力的游戏》发生在一个工作室公寓里,你会有正确的想法。这个物种进化是因为耶格尔最初并不要求父母给他们的后代一些能量;这导致了婴儿所包含的能量超过了他们创造的成本(永动机爱好者,请注意。)本质上,懒惰的食人族已经学会利用模拟中的一个 bug 来产生免费能源。为了解决这个问题,耶格尔强迫父母必须把他们的一些精力给他们的后代,这阻止了孩子成为一种划算的零食。

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

Some say there’s more to life than being edgy, but… (Source: rawpixel)

耶格尔将第三种病态物种描述为“边缘赛跑者”。这些过客一生都在他们封闭世界的外围巡逻。尽管他们在整个模拟中反复盘旋,边缘赛跑者在他们自我限制在世界边缘的范围内,只靠总面积的一小部分生存。这种策略的一个优点是,经常会偶然发现一位远祖早已死去的尸体,这就成了一道简单的点心。到了交配的时候,边缘跑者可以停止奔跑,等待另一只跑过来。耶格尔认为,这可能是一种行为隔离的形式,允许边缘跑者避免将他们的基因与更大的群体混合。耶格尔用“致命的下降边缘”取代了世界各地的硬墙,从而阻止了这种策略。

生活,呃,会找到出路的

《多元世界:新环境下的生活》是一篇精彩的(但也是密集的)论文,如果你对这类作品感兴趣,我推荐你阅读。即使唯一的任务是“生存”,模拟仍然产生了几个行为与模拟精神背道而驰的生物,包括一个利用模拟的物理特性来增强自身适应性的生物。包括西姆斯在内的一些人认为,对于模拟和游戏这样的复杂环境,进化算法可能是一种有效的(尽管效率低下)调试工具,事实上,耶格尔(无意中)利用懒惰的食人族在他的模拟逻辑中找到了一个漏洞。如果你有兴趣看聚世界的运作,这里有一个他本人的视频。

通往地狱的路已经铺好了…

2013 年,魏斯特利·韦默做了一个关于使用进化算法自动解决代码错误的演讲。然而,韦默和他的合作者超越了西姆斯的建议,使用进化算法来检测漏洞,并用它们来修补漏洞,从而产生了一个叫做 GenProg 的工具。在他的演讲中,他讨论了 GenProg 的发展以及在此过程中吸取的一些经验教训。他概述了奖励黑客是这一过程中最大的障碍,并将 GenProg 描述为“一个爱发牢骚的孩子”,将其比作这部经典漫画中的 Calvin:

在高层次上,GenProg 接受一个错误源代码文件和一组测试作为输入。然后,该工具通过改变原始源代码来创建一系列“子代”。这些测试作为适应度函数应用于儿童,模拟以典型的进化方式重复进行。以下是将 GenProg 应用于不同问题时遇到的三个问题:

列表排序

对列表进行排序是一个基本的软件操作,这使得它成为 GenProg 的一个理想的概念验证问题。场景很简单: sort 程序有一个 bug,GenProg 负责为它开发一个补丁。作为一种适合度的度量,sort将被给定一个未排序的列表作为输入,输出将被测试以查看它是否被排序。如果输出确实是针对各种输入排序的,那么排序被认为是修补的。GenProg 的解决方案是:总是输出一个空列表(从技术上讲,它是经过排序的)。

“你只说我已经进了浴缸,你没说我要洗澡。”—魏默,关于他的创作

他能够通过添加更多的测试来解决这个问题,大概是通过比较实际输出和预期输出,而不仅仅是测试输出是否被排序。

漏洞修补

GenProg 的任务是识别并解决 nullhttpd 中的一个问题。具体来说,它的 POST 功能中有一个漏洞,使其容易受到远程攻击,目标是消除此漏洞。在程序运行完毕后,所有测试都通过了,据报道,nullhttpd 的 POST 功能中的漏洞已被修补。GenProg 的解决方案:删除 POST 功能。

病人:“医生,我这样动胳膊的时候会疼”

医生:“那就不要那样动你的胳膊”

该团队通过在测试集中添加另一个测试解决了这个问题;看起来他最初测试的是漏洞的存在,而不是安全的工作代码。

稳健测试

在这一点上,你可能会想“为什么他们一开始没有更健壮的测试?”反正我也是这么想的。事实证明,他做到了。在演示文稿的“经验教训:测试框架”部分,魏默简要描述了测试是如何运行的,尽管他没有明确说明,但它似乎是这样工作的:GenProg 产生解决方案(修复的程序,具有不同程度的修复),这些解决方案运行并产生文件 your-output.txt ,输出与 trusted-output.txt 进行比较,作为健康的衡量标准。听起来很合理,对吧?当 GenProg 面对这个测试框架时,它的解决方案是删除 your-output.txt ,然后继续输出 nothing。

“‘[……]你轻轻敲着我的房门,敲得那么轻,/我几乎不能肯定我听到了你的声音`我在这里敞开了门;/那里一片黑暗,仅此而已。”—埃德加·爱伦·坡,讲述他在 GenProg 的经历

韦默没有说他是怎么解决这个问题的,甚至没有说如果他解决了这个问题。

玩火

GenProg 是一个令人惊叹的小工具,获得了多个最佳论文奖。根据他们网站

GenProg 修复了多种缺陷,包括无限循环、分段违规、堆缓冲区溢出、非溢出拒绝服务漏洞、堆栈缓冲区溢出、格式字符串漏洞、整数溢出——以及普遍存在的“我的程序产生不正确的输出”错误。

坦率地说,进化出可以修改计算机的可执行程序的想法让我感到恐惧,也让我感到兴奋。GenProg 使用一个测试框架作为适应度函数,看到它玩弄系统的所有小方法很有趣,但重要的是要记住,传统的、基于生存的自然选择适用于任何可以变异和繁殖的东西;这包括由 GenProg 创建的程序。如果 GenProg 制造出一个能够自我复制的程序,你可能会发现一个入侵物种生活在你的硬盘上。

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

One of these days I’ll take a week off work and do this with evolutionary algorithms (Source: xkcd)

结论

从所有这些例子中提炼出的是古德哈特定律:

当一个度量成为目标时,它就不再是一个好的度量。

这种行为模式不仅限于人工智能;人类无时无刻不在有意或无意地从事悬赏黑客活动。一些例子包括:

  1. 为考试而教,这是很多教育系统的通病。政治或行政官员实施标准化测试来衡量学生和教师的表现,以确定需要改进的地方。相反,在这些考试中的良好表现成了一个目标而不是衡量标准,这是以牺牲更广泛的学习为代价的。这降低了教育质量,使考试变得毫无价值,同时奖励了最擅长利用这个系统的老师和学生。
  2. 眼镜蛇效应,这是一种相关的现象,试图解决问题只会使问题变得更糟。据说在英国占领的印度,英国政府想减少毒蛇的数量。为此,他们为每一条提交的死亡眼镜蛇提供现金奖励,以激励眼镜蛇狩猎。如果你已经读到这里,你可能已经猜到人们开始饲养眼镜蛇是为了杀死它们并获得赏金。当英国政府听到风声后,他们终止了这个项目,养蛇者将这些动物放归野外,使得眼镜蛇问题比以前更加严重。
  3. 许多商业KPI,当一个组织积极地追求它们的时候就变得毫无用处。潜在客户网络流量是很好的关键绩效指标,但将它们变成目标最终会激励员工去寻找那些越来越不可能购买你的产品或以有意义的方式参与你的网站的用户。每笔销售的平均收入是一个有用的见解,但旨在增加该数字可能会通过阻止较小的销售来降低整体收入;事实上,根据适应度函数的平均每笔销售收入,一个月内卖出两辆豪华车的汽车经销商要比卖出四辆豪华车和一百辆中型轿车的邻居做得好得多。

我们如何解决这些问题?这里有三个指导原则:

  1. 衡量你在乎什么。如果你关心收入,衡量收入,而不是平均单位收入。如果你关心一个生物的移动能力,衡量它移动了多少,而不是它的速度。
  2. 明白你的衡量标准会被设定,并据此行动。这可以通过在你的衡量标准中加入资格来实现,例如在销售的情况下“增加平均单位收入而不减少总收入”,或者在模拟人生的行走虚拟生物的情况下“尽可能快地移动同时保持在一定高度之下”。
  3. 选择一个可行的目标,并将其与您的衡量标准分开。完全放弃目标是不可能的,但通常情况下,挑选几个可以积极追求的关键目标就足够了(“在销售对话中吸引 1000 名潜在客户”),同时保持冷静地关注你的指标(“周收入”);事后看来,度量是最有用的,而且只有当它们不以自己的方式出现时。

奖励-选择-变异循环最终是奖励者和被奖励者之间的军备竞赛。智能体将人工智能和日常生活中的适应功能视为环境中需要克服的另一个障碍。幸运的是,有了这些指导原则,你就可以防范这些奖励黑客行为;记住,即使是猴爪也有一个(几乎)幸福的结局。

来源

[1]卡尔·西姆斯,进化中的虚拟生物 (1994),第 21 届计算机图形学和交互技术年会论文集

[2]拉里·耶格尔,多元世界:新环境中的生活 (1995),苹果电脑公司。

[3] Claire Le Goues 等人, GenProg:自动软件修复的通用方法 (2011),IEEE 软件工程汇刊

用土星云回放历史

原文:https://towardsdatascience.com/rewind-history-with-saturn-cloud-1e6c3b14b1ca?source=collection_archive---------33-----------------------

难以置信的简单的 Jupyter 笔记本电脑自动版本控制

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

Photo by Pixaby via Pexels

如果你能用一个简单的滑块在你的 Jupyter 笔记本版本间来回移动,那不是很酷吗?

土星云让你做到了这一点!

Saturn Cloud 现在为您的 Jupyter 笔记本电脑提供自动化版本控制,以及一系列令人敬畏的新功能。它简单、免费,每个人都可以使用,而且完全不费力。看看吧!

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

Photo by Magda Ehlers from Pexels

什么是 Jupyter 笔记本?

我喜欢 Jupyter 笔记本!

[## 技巧、窍门、诀窍和魔法:如何毫不费力地优化您的 Jupyter 笔记本电脑

让 Jupyter 笔记本变得更好、更快、更强、更光滑、更棒的完整初学者指南

towardsdatascience.com](/how-to-effortlessly-optimize-jupyter-notebooks-e864162a06ee)

Jupyter 笔记本是最好的之一(免费!)工具,帮助您获得在大量数据相关领域高效工作所需的技能。它们是数据科学、机器学习、深度学习、人工智能等的理想工具。它们不仅可以保存代码,还可以保存丰富的文本元素,比如图像、图形、链接等等。这使得他们成为一个完美的地方,把分析,你的结果,以及正在发生的事情的描述。

尽管它们很容易使用,但要启动并运行云托管服务通常很困难。有很多人已经完全陷入了试图让他们的笔记本电脑运行云提供商的困境。

这就是土星云出现的地方!

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

土星云是什么?

土星云让生活变得简单。

[## 如何毫不费力地创建、发布甚至共享云托管的 Jupyter 笔记本

完全初学者指南,以闪电般的速度在 Jupyter 笔记本上创建、运行和协作…

towardsdatascience.com](/getting-started-with-saturn-cloud-jupyter-notebooks-b3f509a500ef)

有了土星云,运行云托管的 Jupyter 笔记本变得异常容易。你点击几个按钮,你就设置好了。您可以创建、运行、发布甚至共享 Jupyter 笔记本了。你甚至可以与其他人合作!对于数据科学家来说,在他们的 Jupyter 笔记本上使用基于云的计算可能是最简单的方法。这是我发现的唯一能让你立即(而且毫无痛苦地)做到的方法!)发布并与全世界分享您的笔记本。

什么是版本控制?

版本控制基本上就是修订控制。它允许您管理对代码的更改。每个修订都与时间戳和做出更改的人相关联。可以比较、恢复修订,还可以合并某些类型的文件。

你刚刚完全搞乱了你的模型吗?

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

Photo by Markus Distelrath from Pexels

版本控制让您可以倒回历史。你可以回到你的 Jupyter 笔记本变成一个完整的恐怖秀之前的地方。版本控制允许您将文档恢复到以前的版本。这对于允许编辑跟踪彼此的编辑和纠正错误至关重要!

例如,当多个个人或团队在设计和开发软件时,同一软件的多个版本在不同的站点运行是很正常的。不同的开发人员可能同时进行更新。其中一些版本可能有缺陷。一些版本的更新带来了新的问题。为了找到并修复这些问题,您必须能够获取并运行不同的版本来确定问题发生在哪里。

但是,尽管版本控制是工作流程的一个重要部分,Jupyter 笔记本并没有提供一个简单的方法来做到这一点。有变通办法,但并不容易。这就是土星云出现的地方。

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

这是魔法。

Saturn 图像附带 git 命令行工具和许多文本编辑器,因此您可以像使用任何其他 UNIX 安装一样使用 git。Saturn Cloud 还会自动为您的项目拍摄快照,以便用户可以轻松回滚到以前的工作。

如果你有代码要推或者拉,土星云会通知你。您可以从用户分支推入主分支,或者从主分支拉入您的分支。Saturn 提供了一个 Git diff and merge 工具,它结合了查看和合并代码和笔记本。用户在服务器中同步的独立分支中工作。每个 Saturn 项目都分配了一个 Git 存储库。

如果分支之间没有冲突,您可以单击“完成”按钮,完成您的推或拉。(如果有冲突,您可以解决这些冲突,然后单击“解决”)确保完成后点击“保存”。当然,您也可以直接在命令行中解决冲突。如果你想阅读全部内容,请查阅官方文档。

协作呢?

就是这么简单!

你只需进入你的仪表板,点击“合作者”并添加某人的用户名。如果你已经有了一个团队,你只需要选择你想合作的团队成员的名字!

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

演员表

账单页面已经升级!现在,您可以一目了然地看到每台机器,而不仅仅是看到成本概览。通常,如果你的账单很高,很容易假设你的新机器学习模型有问题。现在你一眼就能看出,这实际上是一台完全不同的机器,已经运行了三天了!

你所需要做的就是打开你的仪表盘,点击账单,然后向下滚动。你所有的信息都在这里。

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

我喜欢它

土星云继续变冷。现在,他们为 Jupyter 笔记本带来了简单的版本控制,使协作变得更加容易,他们很难被击败。再加上易于理解的计费、升级的图像控制以及他们对每个人的图库所做的改进,很难想象还有更好的云托管 Jupyter 笔记本提供商!

我还必须提到,Saturn Cloud 计划将他们的自动化版本控制功能开源。如果向 Git-verse 开放这个功能不是最酷的事情,我不知道什么才是。

我不知道你怎么样,但是我非常想看一看引擎盖下面!

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

Photo by Maria Geller from Pexels

感谢阅读!和往常一样,如果你用这些信息做了什么酷的事情,请在下面的评论中让大家知道,或者在 LinkedIn @annebonnerdata 上联系

使用四分位数和 Jenks 自然间断的 RFM 分割

原文:https://towardsdatascience.com/rfm-segmentation-using-quartiles-and-jenks-natural-breaks-924f4d8baee1?source=collection_archive---------8-----------------------

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

Photo by Heidi Sandstrom. on Unsplash

[## 吉安费尔顿/RFM-带四分位数的分段-詹克斯-自然分段-HDBSCAN

通过创建一个……为吉安费尔顿/RFM-四分点分割-詹克斯-自然断裂-和组屋开发做出贡献

github.com](https://github.com/gianfelton/RFM-Segmentation-with-Quartiles-Jenks-Natural-Breaks-and-HDBSCAN/blob/master/RFM%20Segmentation.ipynb)

这篇文章的笔记本可以在上面的链接中找到。

这篇文章的目的是分享我最近使用 RFM 模型进行客户细分的一些经验。对于那些刚接触 RFM 模型的人,这里有一个分类:

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

在实践中,它将生成如下所示的表格:

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

最终,我们将得到这些数字的百分位数(我们将在下面讨论),然后是四分位数。四分位数将给出从 1 到 4 的分数,我们将组合这些分数得到 RFM 分数。该过程将如下所示:

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

让我们从笔记本开始吧。

**import** **numpy** **as** **np**
**import** **pandas** **as** **pd**
**import** **matplotlib.pyplot** **as** **plt**
%matplotlib inline
**import** **datetime** **as** **dt**
**from** **scipy** **import** stats
**import** **jenkspy**
**import** **seaborn** **as** **sns**
**import** **warnings**
warnings.filterwarnings("ignore")df = pd.read_csv(‘Superstore.csv’)

快速浏览前三行可以了解数据的概念:

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

我们可以将订单日期、订单 ID 和销售额用于 RFM。

df['Order Date'] = pd.to_datetime(df['Order Date'])anchorDate = dt.datetime(2015,1,1)rfm = df.groupby('Customer ID').agg({'Order Date': lambda x: (anchorDate - x.max()).days,
                                     'Order ID': lambda x: len(x),
                                     'Sales': lambda x: x.sum()})

在第一行中,我们将订单日期设置为日期时间格式。第二行仅在该数据集中是必要的,因为它在 2014 年 12 月 31 日结束。在现实世界的设置中,这只是设置为当前日期。第三部分按客户 ID 汇总了最近、频率和货币。

我们最终得到了这样一张表:

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

现在我们只需要更改列名。

rfm.columns = ['Recency', 'Frequency', 'Monetary']

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

从这里,我们可以很容易地得到百分位数和四分位数。

rfm['r_percentile'] = rfm['Recency'].rank(pct=True,ascending=False)
rfm['r_score'] = pd.qcut(rfm['r_percentile'], 4, labels=range(4,0,-1))rfm['f_percentile'] = rfm['Frequency'].rank(pct=True,ascending=True)
rfm['f_score'] = pd.qcut(rfm['f_percentile'], 4, labels=range(4,0,-1))rfm['m_percentile'] = rfm['Monetary'].rank(pct=True,ascending=True)
rfm['m_score'] = pd.qcut(rfm['m_percentile'], 4, labels=range(4,0,-1))

结果表有我们的最近、频率和货币列,以及每个值的百分位数和四分位数。

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

最后,我们只需要连接三个分数列。

rfm['rfm_score'] = rfm['r_score'].astype(str) + rfm['f_score'].astype(str) + rfm['m_score'].astype(str)

这是我们完成的桌子。

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

我们可以就此打住,但是让我们做一些探索和比较。

ax = rfm['rfm_score'].value_counts().plot(kind='bar', figsize=(15, 5), fontsize=12)
ax.set_xlabel("RFM Score", fontsize=12)
ax.set_ylabel("Count", fontsize=12)
plt.show()

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

我们可以看到,我们最大的细分市场是由最没有价值的客户组成的。然而,我们下一个最大的细分市场是由我们最有价值的客户组成的。这似乎很奇怪。让我们看看我们的数据是根据哪些值进行分区的。

r_quarters = rfm['Recency'].quantile(q=[0.0, 0.25,0.5,0.75, 1]).to_list()
f_quarters = rfm['Frequency'].quantile(q=[0.0, 0.25,0.5,0.75, 1]).to_list()
m_quarters = rfm['Monetary'].quantile(q=[0.0, 0.25,0.5,0.75, 1]).to_list()
quartile_spread = pd.DataFrame(list(zip(r_quarters, f_quarters, m_quarters)), 
                      columns=['Q_Recency','Q_Frequency', 'Q_Monetary'],
                     index = ['min', 'first_part','second_part','third_part', 'max'])
quartile_spread

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

尽管这让我们了解了分区之间的范围,但我们还需要其他东西来查看密度。让我们看一个直方图,我们的分区沿着 x 轴放置。

plt.figure(figsize = (16,6))
hist = plt.hist(rfm['Frequency'], bins=100, align='left', color='cornflowerblue')
for q in f_quarters:
    plt.vlines(q, ymin=0, ymax = max(hist[0]))

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

有了这个视图,我们可以看到分区并不十分适合我们的数据。15 处的分区将看起来像一个组的东西一分为二。让我们试着用 Jenks 的自然间断来划分我们的数据,而不是四分位数。

plt.figure(figsize = (16,6))
hist = plt.hist(rfm['Frequency'], bins=100, align='left', color='cornflowerblue')
for b in f_breaks:
    plt.vlines(b, ymin=0, ymax = max(hist[0]))

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

这使得这个数据更有意义。让我们用 Jenks 来看一个分区表。

r_breaks = jenkspy.jenks_breaks(rfm['Recency'], nb_class=4)
f_breaks = jenkspy.jenks_breaks(rfm['Frequency'], nb_class=4)
m_breaks = jenkspy.jenks_breaks(rfm['Monetary'], nb_class=4)
jenks_spread = pd.DataFrame(list(zip(r_breaks, f_breaks, m_breaks)), 
                      columns=['J_Recency','J_Frequency', 'J_Monetary'],
                     index = ['min', 'first_part','second_part','third_part', 'max'])
jenks_spread

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

在这一点上,这是否更好取决于业务。让我们并排比较两个分区表。

df = pd.concat([quartile_spread, jenks_spread], axis=1)
cols = ['Q_Recency', 'J_Recency','Q_Frequency', 'J_Frequency','Q_Monetary', 'J_Monetary']
df[cols]

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

这个表应该有助于决定使用四分位数还是 Jenks。不过,还有一件事。我们用 Jenks(用 nb_class=4 参数)指定了分区的数量,但是我们是如何得到这个数字的呢?我绘制了方差拟合优度与班级数量的关系图。它看起来有点像 K-Means 的肘方法。

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

基本上,我在寻找类的数量和方差拟合优度之间的平衡。

实现这一点的代码有点长。以下是计算方差拟合优度的函数:

# Crediting camdenl with this function
# [https://stats.stackexchange.com/users/27263/camdenl?tab=profile](https://stats.stackexchange.com/users/27263/camdenl?tab=profile)def goodness_of_variance_fit(array, classes):
    # get the break points
    classes = jenkspy.jenks_breaks(array, nb_class=classes)# do the actual classification
    classified = np.array([classify(i, classes) for i in array])# max value of zones
    maxz = max(classified)# nested list of zone indices
    zone_indices = [[idx for idx, val in enumerate(classified) if zone + 1 == val] for zone in range(maxz)]# sum of squared deviations from array mean
    sdam = np.sum((array - array.mean()) ** 2)# sorted polygon stats
    array_sort = [np.array([array[index] for index in zone]) for zone in zone_indices]# sum of squared deviations of class means
    sdcm = sum([np.sum((classified - classified.mean()) ** 2) for classified in array_sort])# goodness of variance fit
    gvf = (sdam - sdcm) / sdamreturn gvfdef classify(value, breaks):
    for i in range(1, len(breaks)):
        if value < breaks[i]:
            return i
    return len(breaks) - 1

下面是绘制方差拟合优度与类数量关系的代码:

my_dict = {}
for col in rfm.columns[:3]:
    results = []
    for i in range(2, 10):
        results.append(goodness_of_variance_fit(rfm[col], i))
    my_dict[col] = results  
plt.plot(range(2, 10), my_dict['Recency'], label='Recency')
plt.plot(range(2, 10), my_dict['Frequency'], label='Frequency')
plt.plot(range(2, 10), my_dict['Monetary'], label='Monetary')
plt.xlabel('Number of classes')
plt.ylabel('Goodness of Variance Fit')
plt.legend(loc='best')
plt.show()

既然我们已经使用四分位数和 Jenks 自然间断点进行了调查,让我们添加基于 Jenks 自然间断点的 rfm 分数,并查看两个分数如何比较。

breaks_list = [r_breaks, f_breaks, m_breaks]rfm['r_j_score'] = pd.cut(rfm['Recency'], bins=r_breaks, labels=[1, 2, 3, 4], include_lowest=True)
rfm['f_j_score'] = pd.cut(rfm['Frequency'], bins=f_breaks, labels=[4, 3, 2, 1], include_lowest=True)
rfm['m_j_score'] = pd.cut(rfm['Monetary'], bins=m_breaks, labels=[4, 3, 2, 1], include_lowest=True)rfm.drop(['r_percentile', 'f_percentile', 'm_percentile'], axis=1, inplace=True)rfm['rfm_j_score'] = rfm['r_j_score'].astype(str) + rfm['f_j_score'].astype(str) + rfm['m_j_score'].astype(str)

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

df = rfm['rfm_j_score'].value_counts().to_frame().join(rfm['rfm_score'].value_counts())
ax = df.plot(kind='bar', title ="Jenks vs Quartiles", figsize=(15, 5), legend=True, fontsize=12)
ax.set_xlabel("RFM Score", fontsize=12)
ax.set_ylabel("Count", fontsize=12)
plt.show()

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

我们可以看到结果非常不同。使用 Jenks 自然中断,最近但不频繁的购买者(总消费金额低)构成了最大的细分市场。

RFM 到此为止。基于我们到目前为止所看到的,一个人应该知道这些细分方法中的哪一种(如果有的话)更适合他们的情况。

以下部分独立于 RFM 分段。在完成自己的细分工作后,我花了相当多的时间在我的客户中寻找聚类。这是相关的,因为我使用了最近,频率和货币价值的聚类。

虽然我尝试了一些聚类方法,但下面是 HDBSCAN 的一个示例(在同一数据集上):

import hdbscanclusterer = hdbscan.HDBSCAN(min_cluster_size=30,min_samples=12, metric='euclidean')clusterer.fit(rfm[['Recency', 'Frequency', 'Monetary']])rfm['Cluster'] = pd.Series(clusterer.labels_, index=rfm.index)rfm.head(3)

我选择 HDBSCAN 的原因是因为它能够在不引入噪声的情况下进行聚类。第一类是噪音。

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.colors as mcolorsfig = plt.figure(figsize=(18,12))
dx = fig.add_subplot(111, projection='3d')
colors = ['green', 'blue', 'red', 'yellow', 'black']
#colors = [ k for k in mcolors.CSS4_COLORS ]for i in range(-1,len(rfm['Cluster'].unique())-1):
    dx.scatter(rfm[rfm.Cluster == i].Recency, 
               rfm[rfm.Cluster == i].Frequency, 
               rfm[rfm.Cluster == i].Monetary, 
               c = colors[i], 
               label = 'Cluster ' + str(i), 
               s=10, alpha=1.0)dx.set_xlabel('Recency', fontsize=14)
dx.set_ylabel('Frequency', fontsize=14)
dx.set_zlabel('Monetary', fontsize=14)
dx.legend(fontsize=12)

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

我注意到的第一件事是绿色和红色集群的小尺寸。让我们看看集群之间的计数。

pd.Series(clusterer.labels_).value_counts()

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

让我们再看远一点的集群。簇 1 被排除,因为它是噪声。

myDict = {}
for i in range(0, len(rfm['Cluster'].unique())-1):
    clust = rfm[rfm['Cluster'] == i]
    myDict['Cluster ' + str(i)] = [int(round(clust['Recency'].mean(),0)),
                            int(round(clust['Frequency'].mean(),0)),
                            int(round(clust['Monetary'].mean(),0)),
                            int(round(clust['Recency'].median(),0)),
                            int(round(clust['Frequency'].median(),0)),
                            int(round(clust['Monetary'].median(),0))]

df = pd.DataFrame.from_dict(myDict, orient='index',
                            columns=['mean_Recency','mean_Frequency', 'mean_Monetary',
                                    'median_Recency','median_Frequency', 'median_Monetary'])
df

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

接下来,让我们来看看这些集群是如何按照 RFM 分数排列的:

myDict = {}
for i in range(-1, len(rfm['Cluster'].unique())-1):
    clust = rfm[rfm['Cluster'] == i]
    myDict["Cluster " + str(i)] = clust['rfm_j_score'].value_counts()
df = pd.DataFrame.from_dict(myDict)colors = ['black', 'green', 'blue', 'red', 'yellow']
ax = df.plot(kind='bar', figsize=(15, 5), legend=True, fontsize=12, color=colors)
ax.set_xlabel("RFM Score", fontsize=12)
ax.set_ylabel("Count", fontsize=12)
plt.show()

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

我们的集群有非常相似的 RFM 分数,这在用 RFM 模型术语描述我们集群的构成时是令人鼓舞的。帖子的聚类部分到此为止。谢谢大家!

基于 K 均值聚类的 RFMT 分割

原文:https://towardsdatascience.com/rfmt-segmentation-using-k-means-clustering-76bc5040ead5?source=collection_archive---------11-----------------------

重要提示:这是我个人学习 python 数据科学过程的一部分。当我把它写下来的时候,我发现它非常有帮助,可以帮助我学得更好更快。这是 DataCamp 课程的一部分,代码基于我使用的课程和其他在线资源。请访问 DataCamp 获取原始教学大纲。我不属于任何形式的 DataCamp,只是作为一名学习者使用他们的资源。

在我们客户细分旅程的最后一部分,我们将应用 K-Means 聚类方法来细分我们的客户数据。我们将继续使用我们在 RFM 车型中设计的功能。此外,我们将把任期作为我们模型的一个新特性,以创建 RFMT 模型。

什么是 K-Means?

K-Means 是一种流行且简单的无监督机器学习算法。简单地说,K-means 算法识别 k 个质心,然后将每个数据点分配到最近的簇,同时保持质心尽可能小。我们不会深入研究 K-Means 如何工作的细节,所以让我们深入研究客户细分的实现。

k-均值假设

这是我们将要用来实现 K-Means 模型的 4 个特征。在我们将 K-Means 模型拟合到我们的数据之前,我们需要确保这些关键假设得到满足。

  1. 变量的分布
  2. 平均值相同的变量
  3. 方差相同的变量

查看我们的 RFMT 汇总统计数据,我们可以看到我们的数据集目前不满足这些关键假设。让我们创建一个数据预处理管道,为 K-Means 准备好数据。

数据预处理流水线

下面是我们执行数据转换需要采取的步骤,并详细介绍了每个步骤:

  1. 取消对数据的分类—我们将使用日志转换来完成这项工作
  2. 标准化到相同的平均值
  3. 缩放到相同的标准偏差
  4. 存储为单独的数组,用于聚类分析

数据偏斜度

让我们检查一下当前数据集的分布形状。

# Plot RFM distributions
plt.figure(figsize=(16,14))# Plot distribution of R
plt.subplot(4, 1, 1); sns.distplot(data_process['Recency'])# Plot distribution of F
plt.subplot(4, 1, 2); sns.distplot(data_process['Frequency'])# Plot distribution of M
plt.subplot(4, 1, 3); sns.distplot(data_process['MonetaryValue'])# Plot distribution of T
plt.subplot(4, 1, 4); sns.distplot(data_process['Tenure'])# Show the plot
plt.show()

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

There is skewness in our RFMT data

如你所见,这是 R、F 和 M 向右的一般偏斜度。t 具有更均匀分布的形状。为了解决这个问题,我们将对数据进行对数转换。

# Apply Log Transformation
data_process['MonetaryValue'] = data_process['MonetaryValue'] + 0.0000000001
recency_log = np.log(data_process['Recency'])
frequency_log = np.log(data_process['Frequency'])
monetary_log = np.log(data_process['MonetaryValue'])
tenure_log = np.log(data_process['Tenure'])# Plot RFM distributions
plt.figure(figsize=(16,14))# Plot distribution of R
plt.subplot(4, 1, 1); sns.distplot(recency_log)# Plot distribution of F
plt.subplot(4, 1, 2); sns.distplot(frequency_log)# Plot distribution of M
plt.subplot(4, 1, 3); sns.distplot(monetary_log)# Plot distribution of M
plt.subplot(4, 1, 4); sns.distplot(tenure_log)# Show the plot
plt.show()

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

After applying log transformation, we see a much more normally distributed data set

太好了!看起来我们已经正常化了我们的 RFM 特征。但是,请注意,通过 log 变换 T,我们已经使数据向左倾斜。我们在通过可视化检查或其他方式转换数据时必须始终小心谨慎,以确保我们创建了最准确的客户群表示。

标准化平均值和标准偏差

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

为了标准平均值和标准偏差,我们可以使用下面的公式:

datamart_centered = datamart_rfm - datamart_rfm.mean()
datamart_scaled = datamart_rfm / datamart_rfm.std()

然而,让我们利用 SKLearn 库的 StandardScaler 来集中和缩放我们的数据。

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
scaler.fit(data_process_log)
data_process_norm = scaler.transform(data_process_log)data_process_norm_df = pd.DataFrame(data_process_norm)
data_process_norm_df.describe().round(2)

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

Our feature set post-scaling has a mean of 0 and standard deviation of 1

厉害!现在,我们已经实现了关键假设,以便我们能够正确、准确地应用 K-Means 聚类对我们的客户进行细分。

应用 K-均值

现在让我们进入任何机器学习项目中最激动人心的部分——应用 ML 模型!

但是在此之前,我们需要为我们的 K-Means 模型选择聚类数。这可以通过几种方式实现:

  1. 可视化方法——肘部标准
  2. 数学方法——轮廓系数
  3. 最具商业意义的实验和诠释

我们将使用肘准则法。

相对于组内误差平方和(SSE)绘制组数

误差平方和(SSE)是每个数据点到其聚类中心的距离平方和。我们希望选择最佳的聚类数量,在不过度拟合的情况下减少 SSE 的数量。让我们画出肘图来确定这一点。

# Fit KMeans and calculate SSE for each *k*
sse = {}
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, random_state=1)
    kmeans.fit(data_process_norm)
    sse[k] = kmeans.inertia_# Plot SSE for each *k*
plt.title('The Elbow Method')
plt.xlabel('k'); plt.ylabel('SSE')
sns.pointplot(x=list(sse.keys()), y=list(sse.values()))
plt.show()

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

SSE plot against number of clusters

理想情况下,我们希望在肘形图上选择一个点,在该点上,SSE 停止以递增的速率下降,即,在该点上,多个聚类之间的变化梯度变得恒定。对于我们的模型,我们将选择 k=4。

将我们的数据集拟合到 K 均值

# Import KMeans from skLearn
from sklearn.cluster import KMeans# Choose k=4 and fit data set to k-means model
kmeans = KMeans(n_clusters=4, random_state=1)
kmeans.fit(data_process_norm)# Assign k-means labels to cluster labels
cluster_labels = kmeans.labels_# Assign cluster labels to original pre-transformed data set
data_process_k4 = data_process.assign(Cluster = cluster_labels)# Group data set by k-means cluster
data_process_k4.groupby(['Cluster']).agg({
    'Recency': 'mean',
    'Frequency': 'mean',
    'MonetaryValue': 'mean',
    'Tenure': ['mean', 'count']
}).round(0)

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

Our RFMT data set grouped by their K-Means clusters

我们可以看到,我们对 R、F、M 和 T 均值的分组总结表明,每个客户群对我们的 4 个特征有不同的侧重:

  • 聚类 0 具有最高的月均值、最低的最近均值和最高的频率均值——这是我们理想的客户群
  • 集群 1 在 R、F 和 M 领域表现不佳,在我们的数据库中也存在很长时间——我们需要设计活动来再次激活它们
  • Cluster 2 最近在我们这里购物,但没有像我们希望的那样花费那么多或那么频繁——也许一些针对他们的个性化产品可以帮助他们实现终身价值最大化?
  • Cluster 3 在我们这里花了相当多的钱,但是已经有 3-4 个月没有和我们一起购物了——我们需要在失去他们之前做点什么!

RFMT 在 K 均值聚类中的相对重要性

我们可以通过热图来直观显示 4 个集群中每个功能的相对重要性。

# Calculate average RFM values for each cluster
cluster_avg = data_process_k4.groupby(['Cluster']).mean()# Calculate average RFM values for the total customer population
population_avg = data_process.mean()# Calculate relative importance of cluster's attribute value compared to population
relative_imp = cluster_avg / population_avg - 1# Initialize a plot with a figure size of 8 by 2 inches 
plt.figure(figsize=(8, 4))# Add the plot title
plt.title('Relative importance of attributes')# Plot the heatmap
sns.heatmap(data=relative_imp, annot=True, fmt='.2f', cmap='RdYlGn')
plt.show()

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

Relative Importance of RFMT for each of our 3 clusters

热图提供了一种简单易行的方法来理解我们的 K-Means 模型如何将我们的 RFMT 属性的相对重要性分配到每个客户各自的细分市场。

可视化我们的 K 均值聚类

最后,让我们在散点图中可视化我们的 K-Means 聚类,以结束我们的客户细分之旅。

# Plot RFM distributions
plt.figure(figsize=(20,20))
plt.subplot(3, 1, 1);
plt.scatter(data_process_k4[cluster_labels == 0].loc[:,'Recency'], data_process_k4[cluster_labels == 0].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 1', alpha=0.2)
plt.scatter(data_process_k4[cluster_labels == 1].loc[:,'Recency'], data_process_k4[cluster_labels == 1].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 2', alpha=0.2)
plt.scatter(data_process_k4[cluster_labels == 2].loc[:,'Recency'], data_process_k4[cluster_labels == 2].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 3', alpha=0.3)
plt.scatter(data_process_k4[cluster_labels == 3].loc[:,'Recency'], data_process_k4[cluster_labels == 3].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 4', alpha=0.3)
plt.xticks(np.arange(0, 1000, 100)) 
plt.yticks(np.arange(0, 10000, 1000))
axes = plt.gca()
axes.set_xlim(0, 500)
axes.set_ylim(0, 10000)
plt.title('Cusomter Clusters')
plt.xlabel('Recency')
plt.ylabel('Monetary Value')
plt.legend()plt.subplot(3, 1, 2);
plt.scatter(data_process_k4[cluster_labels == 0].loc[:,'Frequency'], data_process_k4[cluster_labels == 0].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 1', alpha=0.2)
plt.scatter(data_process_k4[cluster_labels == 1].loc[:,'Frequency'], data_process_k4[cluster_labels == 1].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 2', alpha=0.2)
plt.scatter(data_process_k4[cluster_labels == 2].loc[:,'Frequency'], data_process_k4[cluster_labels == 2].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 3', alpha=0.3)
plt.scatter(data_process_k4[cluster_labels == 3].loc[:,'Frequency'], data_process_k4[cluster_labels == 3].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 4', alpha=0.3)
plt.xticks(np.arange(0, 1000, 100)) 
plt.yticks(np.arange(0, 10000, 1000))
axes = plt.gca()
axes.set_xlim(0, 500)
axes.set_ylim(0, 10000)
plt.title('Cusomter Clusters')
plt.xlabel('Frequency')
plt.ylabel('Monetary Value')
plt.legend()plt.subplot(3, 1, 3);
plt.scatter(data_process_k4[cluster_labels == 0].loc[:,'Tenure'], data_process_k4[cluster_labels == 0].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 1', alpha=0.2)
plt.scatter(data_process_k4[cluster_labels == 1].loc[:,'Tenure'], data_process_k4[cluster_labels == 1].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 2', alpha=0.2)
plt.scatter(data_process_k4[cluster_labels == 2].loc[:,'Tenure'], data_process_k4[cluster_labels == 2].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 3', alpha=0.3)
plt.scatter(data_process_k4[cluster_labels == 3].loc[:,'Tenure'], data_process_k4[cluster_labels == 3].loc[:,'MonetaryValue'], s= 10, cmap='rainbow', label = 'Cluster 4', alpha=0.3)
plt.xticks(np.arange(0, 1000, 100)) 
plt.yticks(np.arange(0, 10000, 1000))
axes = plt.gca()
axes.set_xlim(0, 500)
axes.set_ylim(0, 10000)
plt.title('Cusomter Clusters')
plt.xlabel('Tenure')
plt.ylabel('Monetary Value')
plt.legend()plt.show()

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

感谢您花时间通过这个由 3 部分组成的系列来探索客户细分。如果你喜欢这些内容,请继续关注,我将探索更多的数据,也许还会用 Python 构建其他有趣的项目。

RGB 到第八球面坐标的颜色转换

原文:https://towardsdatascience.com/rgb-to-8th-spherical-coordinates-color-conversion-7d71a951d9ce?source=collection_archive---------11-----------------------

颜色转换是图像处理、计算机视觉和机器学习中的一个重要过程。例如,如果你有机器学习背景,你可以假设颜色是用于机器学习模型的数据集中的特征。

要了解彩色图像的 RGB 颜色和数字表示:

维基百科- RGB 颜色模型

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

Photo by Amanda Dalbjörn on Unsplash

不同的颜色表示会产生影响吗?

是的,他们可以。正确的色域可以为我们进行颜色分割和颜色检测创造完美的特征。

有哪些颜色转换方法?

要学习现有的颜色转换方法,我建议你 OpenCV 资源

一种新的已知领域颜色转换方法;

你了解球坐标系吗?球坐标系是用径向距离、极角和方位角三个参数来表示元素的坐标系。

来源:维基百科-球面坐标系

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

Spherical Coordinate System

我将 RGB(红、绿、蓝)颜色转换为球坐标系的参数,这样我就可以在球坐标系中表示颜色。

我为什么选择这种方法?

  1. 我们在球坐标系中表示的颜色可以转换回 RGB 值,这意味着我们不会丢失信息。
  2. 在我们将 RGB 值转换到球坐标系后,坐标系的参数代表了新的有价值的信息。极角和方位角代表颜色的类型,径向距离代表照度。像这样区分颜色的特征有助于我们找到特定的颜色,即使这些颜色受到阴影的影响。

因此,让我们编写一些 Python 脚本来展示我们如何做到这一点:

步骤:

  1. 导入必要的库。
  2. 计算极角:θ = arctan(Bv/Rv)
  3. 计算方位角:𝜑 =反正切(√(Rv +Bv )/Gv)
  4. 计算径向距离:r = √(Rv +Bv +Gv2)

,其中 Rv、Gv 和 Bv 代表红色、绿色和蓝色值。

from PIL import Image
import numpy as npimage = np.array(Image.open('yourImage'))image[:,:,0]Rv = image[:,:,0]
Gv = image[:,:,1]
Bv = image[:,:,2]polarAngle = np.arctan2(Bv,Rv)
azimuthAngle = np.arctan2(np.sqrt(np.square(Rv)+np.square(Bv)),Gv)
radialDistance = np.sqrt(np.square(Rv)+np.square(Bv)+np.square(Gv))

使用此转换的示例:

我用这种颜色转换的方法检测肤色。您可以在下面找到输入和输出图像:

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

Input image

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

Output Image

富模型,穷模型

原文:https://towardsdatascience.com/rich-model-poor-model-80b9de39172c?source=collection_archive---------32-----------------------

模型的财务成功需要良好的数据基础

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

你们中的许多人可能读过罗伯特·基尤斯基和莎伦·莱赫特写的《富爸爸,穷爸爸 》一书。它倡导金融知识和通过投资资产积累财富的重要性。

我们可以将同样的概念应用于数据科学,并提出这样的问题,“什么是丰富的数据科学模型,什么是贫乏的数据科学模型?”我的回答是,富模型是为您的公司赚钱的模型,而差模型是不为您的公司赚钱的模型

那么,我们如何创建一个为您的公司赚很多钱的富数据科学模型呢?答案之一是投资资产……就模型而言,这意味着数据。

在本文中,我将概述一个 良好的数据基础和集成数据 如何在使数据科学具有相关性和丰富您的算法方面发挥重要作用。

集成数据=更好的预测准确性=每年潜在的百万美元

有人说预测准确性是数据科学的圣杯。拥有更好的预测准确性意味着你可以解决很多问题。在许多应用中,如预测机器故障、检测欺诈和客户流失预测,您需要准确预测。

让我们以电信行业的客户流失预测为例。电信行业的年流失率从 10%到 67%不等,大多数公司的流失率超过 20%。流失率低的公司能够有效地利用数据预测客户流失,并采取措施避免流失。预测搅拌棒需要使用集成数据开发数据科学模型。

然而,这听起来可能是显而易见的,但是为了主动预测和解决客户流失,您的预测模型需要准确。一般来说,防止流失需要联系潜在的流失者,或者给潜在的流失者一些优惠或折扣,以防止他们离开。如果你对客户流失预测不准确,你可能会给那些不会离开竞争对手的客户提供优惠和折扣,从而导致不必要的成本。更糟糕的是,你不会向真正的潜在客户提供任何东西,从而失去这些客户,降低你的整体业务。

那么我们如何提高预测精度呢?有许多数学方法,但最重要的是有一个良好的综合数据基础。在大多数情况下,以下数据有助于预测客户流失:

  • 客户人口统计数据,如性别、年龄、婚姻或伴侣关系状况、受抚养人、位置等。
  • 账单和合同数据,如月费、总费用、无纸化账单、合同期限等。
  • 服务使用数据,如电话服务、互联网服务、在线安全等。
  • 网站使用、移动应用使用、数字时事通讯互动等数字互动数据。
  • 多渠道客户旅程数据,如导航路径、商店访问和呼叫中心互动。

让我们看看基于预测模型中使用的数据的典型流失预测准确性:

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

*Prediction accuracy figures are based on a typical churn model generally observed

如此处所示,通过使用集成的数据基础,预测精度可以提高近 20%。这可以转化成数百万美元。telecomstechnews 最近的一项研究表明,每个主要电信运营商每月的流失成本约为 6500 万美元。这意味着预测模型中 20%的改进可以转化为每年约 1.6 亿美元的成本节约。

这是巨大的。它展示了拥有集成数据基础的价值,以及数据科学模型为企业带来巨大成本节约的潜力。

如此处所示,通过使用集成的数据基础,预测精度可以提高近 20%。这可以转化成数百万美元。telecomstechnews 最近的一项研究表明,每个主要电信运营商每月的流失成本约为 6500 万美元。这意味着预测模型中 20%的改进可以转化为每年约 1.6 亿美元的成本节约。

这是巨大的。它展示了拥有集成数据基础的价值,以及数据科学模型为企业带来巨大成本节约的潜力。

集成数据=可操作的数据科学=百万美元/年实际现金流

有一个好的预测模型是一个好的开始,但绝不是结束。高预测准确率需要转化为可以避免流失的行动。那么,数据科学模型如何转化为行动呢?最常见的方法之一是查看模型的特性重要性。功能重要性是数据科学模型判断的导致客户流失的最重要因素。

此处显示了电信客户流失特征重要性的典型示例。

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

显示负系数的特征是使顾客留下的因素。例如,任期越高,客户就越不会流失。这意味着客户流失主要发生在新客户身上。另一方面,显示正系数的特征是促成流失的因素。如可视化图所示,拥有短期月度合同的客户以及总费用较高的客户可能会流失。

这清楚地表明,流失主要与新客户和短期合同客户有关。这为要采取的行动提供了明确的方向,这些行动应该围绕如何将新客户转化为忠诚客户。一般来说,一旦客户签了合同,电信公司就会忘记她或他。然而,保持持续联系的营销策略,特别是针对新客户的营销策略,将是非常有益的。

之所以能够采取这样切实的行动,是因为有各种各样的数据来理解预测模型。如果在预测模型中不考虑不同类型的数据,不仅预测精度会很低,而且得出的行动也可能是错误的。这可能会使情况恶化,而不是改善。

有形和具体的行动肯定会防止流失,从而确保现金流保持完整。预测结果显示,电信公司每年有 1.6 亿美元的成本节约潜力。通过切实的行动,利用综合数据,这种潜力可以转化为现实。

集成数据=更好的客户定位=参与的客户

防止流失不应该是被动的。你不能追逐每一个预计会流失的客户。你需要制定一个积极主动的策略,让客户甚至不会考虑离开。这种积极主动的策略包括定期与客户互动或沟通,并为他们提供一些好处。这些好处可以是产品优惠,甚至是关于产品使用的教育。

在上面的例子中,我们看到短期合同客户的流失率很高。因此,与新获得的客户进行主动沟通的策略非常重要。但是,在互动过程中,您不能向所有客户发送一般信息。有效的沟通是为客户量身定制的。创建定制通信的一种方法是对相似的客户进行细分,然后发送针对该细分市场的通信。

因此,问题变成了我们如何找到相似的客户放入一个细分市场?答案是基于一个综合的数据基础。你拥有的数据越多,同一细分市场中的相似客户就越多。在我们的示例中,如果您基于客户人口统计+账单和合同数据+服务使用+数字互动+多渠道客户旅程数据创建细分市场,那么每个细分市场中的客户实际上会共享许多相同的属性。然而,如果你只采用人口统计数据来创建你的细分市场,那么一个细分市场中的客户就不会真正相似,从而导致一个质量差的细分市场。如果你与某个细分市场的客户互动,认为他们是相似的,而实际上他们不是,那么你可能会加速流失,而不是减少流失。

下面是客户细分的可视化,每个点代表一个客户。真正相似的顾客被标上相同的颜色。在左侧,您有仅使用人口统计数据创建的细分市场。如您所见,没有明确的细分市场,因为相似的客户没有一起出现。在右侧,您有使用客户人口统计+账单和合同数据+服务使用+数字互动+多渠道客户旅程数据创建的细分市场。正如你所看到的,有一个清晰的模式出现,真正相似的客户确实形成了一个细分市场。

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

集成的数据基础将确保更好的沟通策略,这将使您积极主动地预防客户流失,并确保未来的现金流

因此,无论你的模型有多复杂,它的财务成功只能通过使用良好的、集成的数据基础来实现

额外资源

网站(全球资讯网的主机站)

你可以访问我的网站进行零编码分析。https://experiencedatascience.com

订阅每当我发布一个新的故事时,请及时通知我。

[## 每当 Pranay Dave 发表文章时,您都会收到电子邮件。

每当 Pranay Dave 发表文章时,您都会收到电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…

pranay-dave9.medium.com](https://pranay-dave9.medium.com/subscribe)

你也可以通过我的推荐链接加入 Medium。

[## 通过我的推荐链接加入 Medium—Pranay Dave

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

pranay-dave9.medium.com](https://pranay-dave9.medium.com/membership)

https://www.youtube.com/c/DataScienceDemonstrated 的 YouTube 频道
这里是我的 Youtube 频道
的链接

骑行共享我的路——优步

原文:https://towardsdatascience.com/ridesharing-my-way-uber-7ce8738b068b?source=collection_archive---------13-----------------------

两个大陆

7 个城市

花费 1190 美元=约 90000 印度卢比

行程超过 1400 英里

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

从亚特兰大到旧金山(下周开始,我将去那里)的路程已经过半了

优步于 2013 年在印度启动了他们的业务,2015 年我搬到班加罗尔工作时,开始积极使用它。从那以后,这个应用程序再也没有离开过我的手机。

这个博客是关于分析使用模式和回答如下问题的;

S 我应该在下午 5 点预订游泳池还是优步 x?

共享出租车的等待时间是否明显更长?

这篇文章可能看起来很长,但是我向你保证这是一篇轻松的文章!

概观

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

我的大部分骑行是在班加罗尔,在那里我平均每英里花费 0.7 美元,这似乎很高,直到我搬到亚特兰大!每英里 4.3 美元!

旧金山、芝加哥和巴尔的摩的样本量不大,因此我不会深入分析或从这些城市得出任何结论。

**在优步旅行的天数:6.62

与优步打交道的天数(等待时间+旅行时间):9.16
乘车时间效率:72.24%**

我从查看我的骑行时间表开始

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

Ride History Timeline

自从加入科技公司后,乘坐人数急剧下降。我住在离校园很近的地方。所以这是一个。此外,作为一名学生,我不喜欢坐优步,而是坐公交车(为了省钱(我想))

但是成本保持不变,多亏了每英里的高成本!

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

这只是优步。Ola 和 Lyft 将对此做出更多贡献。幸运的是,我没有从他们那里得到我的数据。

班加罗尔

在班加罗尔的使用建立了一些非常有趣的模式。

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

周一晚上是足球时间。我在下午 6 点左右去了球场,然后在晚上 8 点回到家,因此出现了黑点。

星期五是为了阿伯和托伊特。(周五晚上稍晚的黑点!)

但那是关于班加罗尔的。

美利坚合众国

优步只为您提供行程的起点和终点坐标。我计算了坐标间的哈弗线距离。这为我提供了骑行距离的下限估计。

哈弗线距离基本上是欧几里得距离,但在球面上。它会考虑纬度和经度来计算沿表面两点之间的直线距离

虽然我在美国的乘车次数没有印度多,但我仍然有足够的时间来比较共享乘车和普通乘车。共享乘车包括优步池和 ExpressPool,而普通乘车是所有其他的。

当我搬到这里时,美国对汽车的依赖非常明显。作为一个坚持绿色科技和减少汽车使用的人,我一直提倡使用 Pool 而不是 X,XL,Premier。

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

随着多年来共享算法的改进,我增加了对共享出租车的使用。我敢打赌 2019 年远远超过 50 %!

然而,共乘有时间成本吗?

在美国,为了节约成本,出租车共享在二战期间变得流行起来。第二波出租车共享是在 1973 年石油危机期间。

我想到的问题是“共享出租车的总交互时间怎么会比普通出租车的总交互时间低?”

在需求低于或等于供给之前,这个假设完全有效。然而,当需求超过供应一定数量时,共用出租车比你自己的私人出租车更快。

统计分析

一些术语;

短途旅行——哈弗森距离小于 2.5 英里的旅行

长途旅行——哈弗森距离超过 2.5 英里的旅行

日间行程 —上午 9 点到下午 7 点之间的行程

夜间旅行 —晚上 7 点到早上 9 点之间的旅行

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

与美国相比,印度的等待时间差异很大,我的最高等待时间是 44.97 分钟。这次旅行是从 MG 路到班加罗尔机场,下午 6 点,持续了 72.58 分钟

转移到亚特兰大的数据

我在亚特兰大的出租车数据不够,所以我请我的一个朋友分享他们的数据。

共享出租车和普通出租车的等待时间和总交互时间不同吗?

我最初使用非参数检验(Mann Whitney U 检验)来检查统计显著性,因为我的样本数量很少。

额外的数据允许我使用广泛使用的不成对 t 检验。(谢谢中央极限定理 )

a .短途旅行——哈弗辛距离不到 2.5 英里

测试的 p 值为 0.03,这意味着共享乘车与普通乘车的等待时间在统计上有所不同。

但是,共享和普通出租车总交互时间的 t 检验的 p 值为 0.2。

因此,虽然较短距离的等待时间不同,但从预订出租车到到达目的地的总时间在统计上没有显著差异。

此外,车费的差异也具有统计学意义,这加强了拼车优于优步 x 的理由。

b .相当长的车程——哈弗斯距离超过 2.5 英里但不到 7.5 英里

更长时间的乘坐有点不同。较长乘坐时间的等待时间差异也具有统计学意义,p 值为 0.02。

乘车时间+等待时间的差异也具有统计学意义,p 值为 0.05。

不出所料,共享乘车和普通乘车的票价也有统计学差异。

共享出租车和普通出租车之间的长途车费平均差异为 7.16 美元

所以,如果你急着去机场,并愿意支付一些额外的费用,那就打个 X 吧!

你应该根据一天中的时间选择不同的选项吗?

等待时间是选择共享出租车还是普通出租车的一个重要因素。此外,我们晚上会称得更重。统计测试未能拒绝以下假设,即对于 5 英里以内的行程,夜间(晚上 10 点至早上 7 点)共享出租车的等待时间不同于正常时间。

下面的互动 viz 向您展示了不同的时间和票价(平均值)是如何随着旅行距离的变化而变化的。

巧妙地暗示我下个月将在哪里工作。

电动滑板车

如果我们用踏板车代替哈弗森距离小于 2 英里的游乐设施会怎么样?

亚特兰大符合条件的游乐设施数量:127

电动滑板车的平均速度:每小时 7.5 英里

因为我认为哈弗线距离是旅程起点和终点之间的距离,所以我将它乘以 1.5,得到两点之间的近似曼哈顿距离。

平均节约约 30.79%(不包括环境效益)。

Average interaction time of taking a rideshare for short distances:  13.55 mins
Average interaction time of taking a scooter for short distances:  12.41 mins

好吧,没那么微妙。

感谢反馈和批评!

所有的分析都是基于我的数据。结果会有所不同。请不要下任何一概而论的结论。

github:https://github.com/jehlokhande93/UberDataAnalysis

更好使用的岭回归

原文:https://towardsdatascience.com/ridge-regression-for-better-usage-2f19b3a202db?source=collection_archive---------0-----------------------

这篇文章的目标是让你更好地使用岭回归,而不仅仅是使用库提供的东西。那么,*“什么是岭回归?”。*回答问题最简单的方法是“线性回归的变异”。最糟糕的方法是从下面的数学方程式开始,很多人一看就不明白。

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

坏消息是我们仍然需要处理它,好消息是我们不会从这样的方程开始,尽管不是现在。我想从‘普通最小二乘法*(OLS)’开始。如果你碰巧很少或没有线性回归的背景知识,这段视频将帮助你了解如何使用“最小二乘法”。现在,你知道 OLS 就像我们通常所说的“线性回归”,我将这样使用这个术语。*

在继续前进之前

在接下来的部分中,我将使用不同的术语和数字采取不同的方法。有两件事你要记住。一是我们不喜欢过度拟合。换句话说,我们总是喜欢捕捉一般模式的模型。另一个是我们的目标是从新数据中预测,而不是具体的数据。因此,模型评估应该基于新数据(测试集),而不是给定数据(训练集)。此外,我将交替使用以下术语。

  • 自变量=特征=属性=预测值= X
  • 系数=β=β
  • 残差平方和= RSS

为什么是 OLS,为什么不是

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

最小二乘法找到最佳无偏系数**

您可能知道最小二乘法可以找到最适合数据的系数。还要加上一个条件,就是它也能找到无偏系数。这里无偏是指 OLS 不考虑哪个自变量比其他的更重要。它只是找到给定数据集的系数。简而言之,只需要找到一组 betas,从而得到最低的“残差平方和(RSS)”。问题变成了“RSS 最低的模型真的是最好的模型吗?”。

偏差与方差

以上问题的答案是“不太会”。正如“无偏”这个词所暗示的,我们也需要考虑“偏见”。偏差是指一个模型对其预测者的关注程度。假设有两个模型用两个预测器“甜度”和“光泽”来预测苹果价格;一个模型无偏,一个模型有偏。

首先,无偏模型试图找出两个特征和价格之间的关系,就像 OLS 方法一样。该模型将尽可能完美地拟合观测值,以最小化 RSS。然而,这很容易导致过度拟合的问题。换句话说,该模型在处理新数据时表现不佳,因为它是专门为给定数据构建的,可能不适合新数据。

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

有偏模型不平等地接受其变量,以区别对待每个预测值。回到这个例子,我们想只关心“甜蜜”来建立一个模型,这应该在新数据中表现得更好。原因将在理解偏差与方差后解释。如果你不熟悉偏差与方差的话题,我强烈推荐你观看这段视频,它会给你带来深刻的见解。

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

可以说偏差与模型不符合训练集有关,方差与模型不符合测试集有关。偏差和方差在模型复杂性上是一种权衡关系,这意味着一个简单的模型将具有高偏差和低方差,反之亦然。在我们的苹果例子中,只考虑“甜味”的模型不会像同时考虑“甜味”和“光泽”的另一个模型那样符合训练数据,但更简单的模型将更好地预测新数据。

这是因为“甜度”是价格的决定因素,而“光泽”不是常识。我们人类都知道这一点,但数学模型不会像我们一样思考,只是计算给定的数据,直到它找到所有预测器和独立变量之间的某种关系,以拟合训练数据。

** :我们假设“甜蜜”和“闪亮”不相关*

岭回归开始起作用了

查看偏差与方差图,Y 轴为“误差”,即“偏差和方差之和”。因为这两者基本上都与失败有关,所以我们想尽量减少它们。现在仔细看一下这个图,你会发现总误差最低的地方在中间。这通常被称为“甜蜜点”。

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

让我们回忆一下,OLS 平等地对待所有变量(无偏见)。因此,随着新变量的加入,OLS 模型变得更加复杂。可以说,OLS 模型总是在图的最右边,偏差最小,方差最大。它被固定在那里,从不移动,但我们想把它移到甜蜜点。这是岭回归大放异彩的时候,也称为正则化*。I n 岭回归,你可以调整λ参数,使模型系数发生变化。这可以通过最后介绍的编程演示来更好地理解。*

岭回归的几何理解

很多时候,图形有助于获得模型如何工作的感觉,岭回归也不例外。下图是比较 OLS 和岭回归的几何解释。

等高线和 OLS 估计

每个轮廓是 RSS 相同的点的连接,以 RSS 最低的 OLS 估计为中心。此外,OLS 估计是最适合训练集的点(低偏差)。

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

圆和脊估计

与 OLS 估计值不同,山脊估计值会随着蓝色圆圈大小的变化而变化。它仅仅是圆与最外轮廓相遇的地方。岭回归的工作原理就是我们如何调整圆的大小。关键是 β 的变化在不同的层面

假设 β 1 是‘闪亮’,而 β 2 是‘甜蜜’。如您所见,随着圆大小的变化,脊 β 1 比脊 β 2 相对更快地下降到零(比较两个图)。之所以会出现这种情况,是因为 RSS 对 β 的改变不同。更直观地说,轮廓不是圆,而是倾斜放置的椭圆。

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

山脊 β 永远不可能为零,只有向其收敛*,这将在下面用数学公式解释。虽然像这样的几何表达式很好地解释了主要思想,但也有一个限制,那就是我们不能在三维空间上表达它。所以,这一切都归结为数学表达式。*

数学公式

我们已经看到了多元线性回归方程的一般形式和矩阵形式。可以写成另一个版本如下。

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

这里 argmin 的意思是使函数达到最小值的“最小值参数”。在上下文中,它找到最小化 RSS 的 β 。我们知道如何从矩阵公式中得到β。现在,问题变成了“这和岭回归有什么关系?”。

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

同样,岭回归是线性回归的一种变体。上面的项是 OLS 方程的脊约束。我们正在寻找 β ,但是它们现在也必须满足上述约束。回到几何图形,C 相当于圆的半径,因此, β 应该落在圆的区域,可能在边缘的某个地方。

向量范数

我们仍然想理解第一个方程。为此,我们需要温习一下向量范数,它无非是以下定义。

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

订阅 2 是作为在’ L2 范数’,你可以了解更多关于向量范数在这里。此时我们只关心 L2 范数,所以我们可以构造我们已经看到的方程。下面是最简单的,但仍然和我们一直在讨论的一样。请注意,下面等式中的第一项基本上是 OLS,然后第二项是 lambda,这就是岭回归。

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

我们真正想找到的是

lambda 项通常被称为“惩罚”,因为它增加了 RSS。我们将某些值迭代到 lambda 上,并用诸如“均方误差(MSE)”之类的度量来评估模型。因此,应该选择最小化 MSE 的λ值作为最终模型。这个岭回归模型在预测上一般比 OLS 模型好。如下面的公式所示,如果λ等于零(没有惩罚),脊 β 随λ变化,并且变得与 OLS β 相同。

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

为什么它收敛到零而不是变成零

使用我们之前看到的矩阵公式,λ以分母结束。这意味着如果我们增加 lambda 值,ridge β 应该会减少。但是不管 lambda 值设置得多大,ridge β 都不能为零。也就是说,岭回归为特征赋予不同的重要性权重,但不会丢弃不重要的特征。

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

使用数据集进行演示

来自 sklearn 库的数据集‘波士顿房价’用于演示。在这个元数据中解释了十几个特性。在整个演示过程中需要下面的 python 库。

** 完整代码可以在 my github 找到*

现在数据集已加载,接下来应该对要素进行标准化。由于岭回归是通过惩罚来缩小系数的,因此应该对要素进行缩放,以保证起始条件的公平性。本帖解释了这个问题的更多细节。

接下来,我们可以迭代从 0 到 199 的 lambda 值。注意,λ等于零( x = 0)时的系数与 OLS 系数相同。

现在,我们可以从数据框中绘制绘图。为了更好的可视化,只选择了五个属性。

凭直觉,‘房’应该是房价最好的指标。这就是为什么红色的线在迭代过程中不会收缩。相反,“高速公路通道”(蓝色)显著减少,这意味着当我们寻求更通用的模型时,该特征失去了它的重要性。

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

类似的图案从其余部分会聚到零(黑色虚线)可见。如果我们越来越多地增加 lambda(极端偏置),那么只有“房间”会保持显著,这又是有意义的,因为房间的数量必须解释大多数。

上面的代码片段绘制了 lambda 跟踪的 MSE。由于随着λ值设置得越大,模型变得越简单(=有偏差),所以 X 轴从左到右表示模型的简单性。

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

绿色虚线来自上图中的 OLS,X 轴通过增加λ值绘制。MSE 值在开始时随着 lambda 值的增加而减小,这意味着模型预测在某一点上得到改进(误差更小)。简而言之,一个有一定偏差的 OLS 模型比纯粹的 OLS 模型更好的预测,我们称这个修正的 OLS 模型为岭回归模型。

结论

我们从不同的角度研究岭回归,从数学公式、矩阵格式到几何表达式。通过这些,我们可以理解岭回归基本上是一个带惩罚的线性回归。通过演示,我们确认了没有找到最佳λ的方程式。因此,我们需要迭代一系列值,并用 MSE 评估预测性能。通过这样做,我们发现岭回归模型比简单线性回归模型在预测方面表现得更好。

  • OLS 只是找到给定数据的最佳拟合
  • 特性对 RSS 有不同的贡献
  • 岭回归偏向于重要的特征
  • MSE 或 R 平方可用于寻找最佳λ

好的读物

* [## 欢迎来到 STAT 501!统计 501

这是 STAT 501 在线课程材料网站。在这方面有很多例子、笔记和讲座材料…

onlinecourses.science.psu.edu](https://onlinecourses.science.psu.edu/stat501/) [## sklearn.linear_model。ridge-sci kit-了解 0.20.0 文档

该模型求解一个回归模型,其中损失函数是线性最小二乘函数,正则化是线性最小二乘函数

scikit-learn.org](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html) [## IPython 食谱- 8.1。scikit 入门-学习

IPython 食谱,

ipython-books.github.io](https://ipython-books.github.io/81-getting-started-with-scikit-learn/)*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值