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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

大规模使用空间的几个技巧

原文:https://towardsdatascience.com/a-couple-tricks-for-using-spacy-at-scale-54affd8326cf?source=collection_archive---------2-----------------------

Python 包 spaCy 是自然语言处理的一个很好的工具。下面是我在大型数据集上使用它所做的一些事情。

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

Me processing text on a Spark cluster (artist’s rendition).

编辑:这个帖子现在已经过时了(看看一些评论)。自从我写这篇文章以来,SpaCy 引入了一个 ***pipe*** 方法,它做了我在这里所做的事情,只不过它不需要黑客,而且更快。建议大家都用那个方法。

当我正在做的项目需要自然语言处理时,我倾向于首先求助于 SpaCy。Python 还有其他几个 NLP 包,每个包都有自己的优缺点。我通常发现 spaCy 很快,它的约定很容易学习。

我在 Spacy 遇到的一个困难是需要处理大量的小文本。例如,我最近有几十万个不同的标签,每个标签有 1 到 15 个单词,我决定用 word2vec 来比较它们。我对 spaCy 的单词矢量化很满意,但我还需要处理每个字符串,首先删除不相关的单词和词性,对一些标记进行词汇化,等等。花了很长时间。以下是我加快速度的两种方法。

将所有内容作为一个文档处理,然后拆分成多个部分

处理一堆独立记录的直观方法是分别处理它们。我开始遍历每条记录,并对每条记录调用 spaCy 的nlp。我不知道处理每件事要花多长时间,因为我已经没有耐心了,只是在进程结束前就终止了它。所以我想了想,又读了一些文档,得出了这个结论:

这将所有文本连接成一个字符串,每个原始文本由一些字符序列分隔,这些字符序列不太可能自然出现。我选择了三个管道,每边都有一个空间。然后我给nlp打了一次电话。处理大约 25,000 条记录只需几秒钟。之后,我可以遍历标记列表,识别特殊的字符序列,并使用它将文档分割成多个部分。这些跨度包含单独的标记,并且具有文档的属性,例如单词向量。

使用火花

这并不像听起来那么简单。根据我的经验,做 NLP 最昂贵的部分是加载语料库。一旦你把所有的东西都装上了,就只需要高效地查找你需要的信息了。如果你正在使用 spaCy 提供的最大的英语语料库,就像我一样,你将面临一些困难来把这些语料库放到你的 Spark 执行器上。

首先,spaCy 使用了与 PySpark 不同的 pickling 库,这导致在试图将语料库包含在用户定义的字段中时出错——无论是作为广播变量还是其他。无论如何,序列化庞大的语料库,然后将它转移到执行器,然后再反序列化,这不一定有意义,因为您可以将它加载到执行器本身。

这提出了一个新问题。加载语料库需要很长时间,所以你想尽量减少需要加载的次数。我发现,在将 Scikit-learn 模型部署到 Pyspark 时,遵循我过去使用的一个实践非常有用:将记录分组到一个相当长的记录列表中,然后调用列表中的一个 UDF。这允许你做一次昂贵的事情,代价是必须连续做一小组相对便宜的事情。

我的意思是:

因此,我将我的 spark 数据框随机分成 20 个部分,将我所有的文本收集到一个列表中。我的 UDF 从 spaCy 加载语料库,然后遍历文本进行处理。

需要注意两件事:

  • 我在一个循环中分别处理每个文档。我没有理由要那么做。我可以使用第一个技巧,将所有文档作为一个整体处理,然后拆分成多个部分。这两个技巧并不相互排斥。
  • 出于我的目的,我只需要单词向量,所以这就是我返回的全部内容。我不知道 PySpark 是否很难将整个 spaCy 文档或 span 对象从执行者那里移回来。我从来没试过。无论如何,我发现使用 Spark 只获取自己需要的东西是一个好习惯,因为移动东西是很昂贵的。所以如果你只需要单词向量,写一个只返回这些向量的 UDF。如果您只需要命名实体或词类之类的东西,编写一个 UDF 来返回它们。如果您需要所有这些内容,请在 UDF 中将其分离出来,并作为单独的字段返回。

使用这两种方法,处理大量文本对我来说变得更有效率。

证明停机问题的速成教程

原文:https://towardsdatascience.com/a-crash-course-on-proving-the-halting-problem-3579fdcd114?source=collection_archive---------8-----------------------

以非正式的严谨方式解释

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

A plan for Charles Babbage’s Analytical Engine circa 1840, which would have been a Turing complete mechanical computer had it ever been built. CC BY 4.0

在一堂课上,老师解释了“我”:

《我是围的声音》他说

当学生要求解释他的意思时;大师说“它是你头脑中的一个声音”

“我脑袋里没有声音”学生想,他举起手告诉大师

大师叫住学生,说“刚才说你脑袋里没有声音的声音;是我”

然后学生们就开窍了。

杰夫·贝索斯在推特上宣布:“我将提供 10 亿美元给一个人,他可以编写一个程序,可以测试任何和所有其他可以想象的程序,看看在一些输入下,它们是否在有限的时间后产生正确的输出,或者永远继续运行。”

您立即开始在您的黑暗主题 IDE 中噼啪作响,并迅速着手为项目编写 Python 类结构。但是在你的内心深处,你感到某种不祥的预感,好像来自以太的一些深奥的知识在悄悄地警告你即将到来的徒劳。

正如所证明的,一般来说不可能编写一个程序或算法来确定任何任意的程序或算法(包括它自己)是否在某个任意的输入上停止或者永远继续运行。更有甚者,在所有可能的输入下,更不可能确定所述程序是否会停止或永远运行。在这篇文章中,我们将谈论前一个事实。

为了便于讨论,让我们假设我们的算法是完美的,并且除了暂停之外,将总是产生正确的结果。我们可以把一个通用算法(非正式地)想成类似于一个巨大的查找表(一个函数),它把一些输入 x 映射到它相应的输出 y = f( x ),并且在 100%的时间里都可以预测。然而,与查找表不同,该算法可以由经典编程意义上的决策语句(if,else)、循环和递归组成,因此它是一个具有开始和结束状态的“动态”过程,它在输入 x 上计算一些输出 y 或永远继续运行。上述问题被称为停机问题,由艾伦·图灵于 1936 年著名地证明,根据他发明的算法的正式定义及其相关的计算模型,即现在普遍称为图灵机是不可计算的。事实上,并不是所有的函数都是可计算的,所以我们的算法不同于查找表函数,尽管上面的类比是有用的。

为了理解为什么会出现这种情况,请思考一下,我们将以一种非正式的严谨方式讨论兼容性和停顿问题背后的一些想法。事实上,我们甚至不需要正式定义什么是算法,也不需要像图灵机这样的计算模型。我们只会对一般的可计算性做简单的论证。

从一些定义开始。目前,我们提供给算法或程序的所有输入都是自然数 N 的子集,因此我们的输入由单个整数组成,如 2、3、12、23 或2^82589933 1及其组合(在传递多个参数 xyzf ( xy 的意义上)这个想法就是,我们关心的输入到算法或函数中的唯一输入可以用自然数来编码。

定义 1 :一个函数p(x)= yxy ∈ N 称为部分可计算 (p.c.) 如果有一个算法在定义 y 时停止,但在 y 时不停止(发散)该算法计算出 y 的值或一些相关值。直观上,部分函数 p 是不需要 p 将域 X 的每个元素 x 映射到共域y的元素的函数

部分可计算函数的一个例子是带余数的非负整数除法。下面用 abZ+: 定义

a**b=p(ab)= {φ(ab ) = qrifb如果 b 为 0,则未定义

在上面,实体 φ 是实际用来计算整数除以余数的结果的算法或过程,也就是函数 p 。我们可以很容易地从小学回忆起,带余数的除法规则定义得很好,适用于所有非负整数 ab ,除了当 b 为 0 时。无余数的正则非负整数除法也是部分函数。

定义 2 :一个函数 f 是全可计算的或者简单的可计算 i f 它被定义在它的输入子集 N 的整个定义域上,并且存在在f的定义域上停止的算法

我们可以用一些技巧使一般的整数除法(没有余数)可计算:

a**b=p(ab)= {φ(ab ) = qr 如果 b 不为 0;如果 b 为 0 }

注意,如果 b 为 0,我们将 aNaN作为输出,并且我们还升级了算法φ来处理负整数。从技术上讲 我们的函数是为 a,bZ 的整个定义域定义的,根据著名数学家乔治·康托的工作,这个定义域的大小与自然数 N 的某个子集的大小相同,或者是可数无穷的。*

*关于技术细节,它是数学和一阶逻辑中证明方法的基础,因为数学中的许多定义都相当精确,所以最好接受它。以后的证明将直接依赖于我们自己创造的定义的技术细节。

定义 3: 对于某个算法 φₖ 一个(输入的)集合叫做可计算可枚举*(也就是说,递归可枚举这个术语也很流行)如果它在一个 p.c .函数 p = φₖ 的域内。也就是说,如果所有元素 x 导致 φₖ 停止或导致 φₖ 分叉,而不是两者,则集合 Xφₖ 中是 c.e .*

可计算可枚举的性质归因于特定的集合和特定的算法。因此,我们可以说整数集合 Z 是整数除余数算法的集合,因为在 Z 中有值导致除余数算法给出未定义的输出(例如 0 和负数)。同样, φₖ 对于某种计算模型来说是唯一的,但是所有具有正确特征但彼此仅略有不同的确定性计算模型在图灵意义上是等价的。因此,我们可以说 φₖ 是计算模型 T. 中所有可能算法集合中的第 k 个算法

**定义 4:称为 XN 的子集是可计算的或递归的,如果它有一个可计算的特征函数或指示函数:

I( x ) = { 1 如果 xX 中;如果 x 不在 X 中,则为 0

因此,指示器功能必须停止,并在整个域 N 上给出真或假的结果。

既然我们已经建起了操场,是时候去玩一玩了。在证明为什么停机问题是不可计算的之前,让我们先问一个问题:

在一个理发师只给自己不刮胡子的人刮胡子的城镇里,谁会给理发师刮胡子呢?在这个镇上,妻子、单身女子、母亲、孩子和外地人都不能给任何人刮胡子。

如果理发师不刮自己的胡子,那么他必须刮自己的胡子,反之,如果理发师刮自己的胡子,那么根据定义,他就不能刮。这是罗素悖论的一个应用版本,它询问所有集合中不包含自身的那个集合是否存在。罗素悖论是试图在“所有集合的集合”这一概念被从标准集合论的公理中丢弃之前找到这一概念的幼稚想法的直接结果。另一个有趣的逻辑矛盾是著名的第 22 条军规:

申请工作需要工作经验,但是要获得工作经验就需要一份工作。

原来我们可以用这些矛盾来表明某些前提(一个逻辑假设)的反面或复合前提一定是真的,即如果我们已经逻辑地推导出一个矛盾的前提,那么原前提的否定一定是真的。这就是著名的反证法技术。例如,罗素悖论的存在意味着所有集合中的一个集合不可能存在。注意,可计算性理论中的许多重要定理,有点像机器学习中的,是非构造性的。换句话说,这个定理可能假设某个特定事物的存在,或者排除其他事物的存在,但实际上并没有提供这个事物的一个例子,所以这个证明可能是不直观的,完全不可思议的,但这就是可计算性的工作方式。

停机问题的设置导致了一个矛盾;让我们将一个暂停集 H 定义为一组所有程序或算法,它们在一些任意输入时暂停。如果我们只讨论 H 的某些子集,这个证明就不会如此深刻。直觉上,这是一个可以接受的定义——尽管我们很快就会看到这是一个天真的定义。回想一下,在我们的计算模型 T 中,所有 k 索引算法都是唯一的。

****定义 5:h:= {(k,x )使得算法或程序 φₖ 在输入 x 时停止运行

定理 1: H 不可计算。

证明:

假设 H 是(总)可计算的,那么它一定有一个可计算的指示函数 I( kx )由 Def。4.如果 H 中的程序停止,该指示灯输出 1,否则输出 0;

I( kx ) = { 1 如果 φₖ 停在x;0 否则}。

假设我们按如下方式制作一个程序φt57】:

φₘ(x):={ 1 如果我( mx)= 0;如果 I( mx ) = 1,则未定义**

函数 φ ₘ的伪代码如下所示:

**def *φ*ₘ():
    if I(*φ*ₘ):
        while 1:
            pass
    return 1**

φ ₘ在 H (由于 φ ₘ在某个输入 x 上停止),也是 p.c .(记住,只有指标需要是可计算的总量)。现在观察当我们将指标函数应用于ₘ:时会发生什么

我们想确定 φ ₘ是否在 x. 上停止。如果指示器 I( mx)= I(φₘ(x))确定φₘ(x)停止,那么根据 φ ₘ的定义,它一定不会停止如果指示器确定 φ ₘ没有停止, φ ₘ必须停止并返回定义 1。在这种情况下,没有反对递归自引用的规则,因为 H 的定义足够宽泛,可以包含这样的程序。既然我们得出一个矛盾,我们就不能假设 H 是可计算的。

显示 H 是 c.e .留给读者作为练习(提示:我们能为 H 建立一个 p.c .指示器函数吗?).

这类似于罗素悖论,因为我们对集合 H 的(幼稚)定义允许这样的 φ ₘ,其中当且仅当 φ ₘ不停止时 φ ₘ停止。在 H 的定义中所有程序的规定就是允许这种矛盾发生的原因。这看起来像是循环推理,从抽象的角度来说就是,但是当我们假设 H 是可计算的时候,我们对 H 的定义承认了这种矛盾。因此,为了保持 H一致性,我们必须拒绝它,因为它是可计算的。

课程在现实生活中,如果我们小心避免编写类似于 φ ₘ的程序,那么我们的磕磕绊绊的测试人员可以在真实的程序上实现实际的性能,只是受到时间的限制。停滞问题的影响当然是显著的。可以想象,我们可以构建一个元系统来观察暂停检查器的子系统是否会遇到暂停问题。但是,我们需要多少元系统来覆盖它们下面的系统呢?情况变得像一个无限的套娃。令人着迷的是,人类可以从这些停止检查元系统的无限回归之外意识到这种情况,但也可以随意切换到这些系统的任意级别,并从外部和内部对它们进行推理。事实上,这就是一些人认为的意识的标志性特征。正是这种力量让库尔特·哥德尔、艾伦·图灵、阿隆佐·邱奇等人在 20 世纪 30 年代证明了几个关于逻辑、计算和数学基础的深刻而又相关的定理

如果我们能建立一个确定性的,甚至是基于机器学习的停机测试器,来分析 CPU 指令,以确定一个程序是否正在进行有用的计算,或者是否已经进入了无用的无限循环,这将是一件有趣的事情。如果你喜欢这篇文章,请检查我的其他文章,如果你发现任何明显的错误或逻辑漏洞,请让我知道。

*如果你有风险资本,有兴趣投资这个创意,请联系我。

补遗:

预计到人们会抱怨上面的证明是“手动的”或者太不正式(毕竟,我们大踏步地采用了递归自引用,并且没有很好地定义指示器将如何检查 φ ₘ是否停止),我将在下面给出一个更加严格的证明。

我们将使用图灵机 T 的直观定义作为运行确定性过程的机器,满足以下条件:

  • 能够进行循环和条件分支,并且是有状态的
  • 能够运行子程序
  • 能够复制数据(例如将数据复制到子程序中)
  • 能够永远停止或者运行

这台机器 T 将计算函数 I( mx )如果它是可计算的。缺乏对 T 的精确定义不会过多地妨碍我们对这个证明的理解。**

定理 2(定理 1 重述): I( mx )不可计算。

证明:**再次假设 I( mx )是可计算的。为了避免怪异的递归自引用,我们做的一件事就是将 φ ₘ的源代码,S( m ) = φ ₘ作为输入提供给 I,即 I( φ ₘ, φ ₘ).在图灵机定义中,程序 φ ₘ和它们对应的源代码只是唯一的、真正大的自然数。从机械上讲,在 H 中给某个程序输入一个非常大的自然数是没有错的,即使这个数字是 φ ₘ本身的唯一“源代码号”。在这种情况下,函数调用自身时没有递归。

现在我们在下面定义一个程序控制函数 h (我们的候选停止检查器):

h(φ):= { 0 if I '(φφ)= 0;否则未定义}

注意我们有一个不同的指示函数 I’。我们对可计算的定义只谈到了可计算指标的存在,它们不需要完全相同,但是它们应该表现相同(一致性)。计算h(φ)的程序在 H. 中,因此我( mx )将能够检查 h ( φ )是否停止。我们将 h ( φ )的来源馈给 I( mx ),即 I( hh )。将 I( hh )视为我们的第一级暂停元检查器。

h ( φ )在某个程序源代码 φ 上运行时,如果 I’(φφ )没有暂停,而 I( h,h )返回 1 表示 h 暂停,当 I’(φ时发散根据可计算性的定义,我们不能让程序同时暂停和分叉(考虑一下h(φ)I 的一个子程序( hh ))。因此 I( mx )是不可计算的。

链接到我的其他文章:

  1. 张量流和自定义损失函数
  2. 随机森林
  3. Softmax 分类
  4. 气候分析
  5. 曲棍球骚乱和极端值

一种创造性的特征选择方法

原文:https://towardsdatascience.com/a-creative-approach-towards-feature-selection-b333dd46fe92?source=collection_archive---------31-----------------------

品格如树,名誉如影。影子就是我们对它的看法。这棵树是真的。——亚伯拉罕·林肯

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

简介

谈到特征工程,特征选择是最重要的事情之一。我们需要减少特征的数量,以便我们可以更好地解释模型,使训练模型的计算压力更小,消除冗余效应,并使模型更好地一般化。在某些情况下,特征选择变得极其重要,否则输入维度空间太大,使得模型难以训练。

执行功能选择的各种方式

有多种方法来执行特征选择。我将使用我自己在实践中使用的方法。

  1. 卡方检验(分类变量对连续变量)
  2. 相关矩阵(连续变量与连续变量)
  3. 领域知识
  4. 线性正则模型的系数。
  5. 树方法的特征重要性(最喜欢这个)

我的创作方法

在这里,我提出了我的创造性观点,如何使用以上我最喜欢的方法来进行特征选择,而不是仅仅局限于其中一种。核心思想是结合相关矩阵(每个变量与目标变量比较)、线性正则化模型的系数和各种树方法的特征重要性,使用随机加权平均将它们结合起来。使用随机加权是为了避免对某一种单一方法的固有偏见。所以,最后,我们有了一个最终的特征重要性矩阵,它综合了我最喜欢的特征选择方法。与研究各种方法相比,在我们面前有一个单一的产出数字总是一件好事。

概念证明

为了展示概念证明,我将使用波士顿住房数据集。这是一个回归案例,所有输入变量都是连续的。

  1. 首先计算整个数据集的相关矩阵。这里只做这个,因为所有变量都是连续的。在有一些分类变量的情况下,我们需要使用卡方统计而不是相关矩阵。

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

Natural values of linear correlation with respect to target variable

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

Absolute Linear correlation with respect to the target variable ‘MEDV’

2.选择套索和山脊计算变量系数。

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

Lasso natural coefficients

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

Ridge natural coefficients

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

Normalised and absolute values of lasso coefficients

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

Normalised and absolute values of ridge coefficients

3.选择 GradientBoostingRegressor、RandomForestRegressor、DecisionTreeRegressor 和 ExtraTreeRegressor 来计算特征重要性。在实践中,在此步骤之前,分类变量的所有转换都应该完成(例如,使用一个热编码或标签编码)。

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

Decision Tree Feature Importance

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

Random Forest Feature Importance

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

Extra Trees Feature Importance

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

Gradient Boosted Trees Feature Importance

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

4.使用 numpy 进行随机采样,为每种方法赋予权重,然后取加权平均值。

这里,我们使用了随机权重生成方案,其中,对于任何形式的特征选择机制,我们都不使用 0,并且为了简单起见,值或权重以 0.1 为步长。

5.然后,我们返回合并的结果,可以使用条形图显示。

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

结论

还有各种其他的特征选择技术,但我提出的这个可以提供一个非常不同的视角,使用一种我最喜欢的特征选择技术的集合来比较特征与目标变量的相关性。你可以摆弄各种参数,让这个想法更有创意。还可以使用具有更具体设置的模型,例如使用树模型对象,根据具体的使用情况,用 n_estimators 或 max_depth 的一些具体值初始化,但这里只是为了展示我使用默认模型对象的想法。

这一思考过程不仅有利于得出最终的一次性特征重要性输出,而且我们可以直观地看到数字和图表,以比较不同方法如何独立执行,然后就输入变量的选择做出明智的决定。

就像爱因斯坦的名言 一样,我相信直觉和灵感。我有时觉得我是对的。我不知道我是。

第三次民主辩论的数据分析

原文:https://towardsdatascience.com/a-data-analysis-of-the-third-democratic-debate-67094c363083?source=collection_archive---------40-----------------------

辩论数据能告诉我们谁赢了吗?

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

Photo by Kyle Head on Unsplash

在许多方面,政治似乎已经取代棒球成为全国性的消遣。就像体育博客和 ESPN 争论球类运动一样,新闻网站和 CNN 的专家们也沉迷于政治竞选的细枝末节。

本着体育赛事的政治精神,我认为从这个领域再偷一招——体育统计——会很有趣。内特·西尔弗和其他人完善了民意测验专家的艺术,但我希望能更进一步。正如 Sabermetrics 让我们对棒球世界有了新的认识,我希望政治数据可以让我们对政治前景有更好的看法。为此,我分析了上一次民主党辩论的记录,并分析了数据以寻找趋势。这是我的发现。

关注并不总是随着投票而来

就数据而言,新闻报道的一条信息是说话时间。理论上,越受欢迎的候选人应该得到更多的时间,因为观众对他们要说的话更感兴趣。实际上,情况并非如此。

下面是两个对比图。左边是最新早间咨询民意调查的图表。右边是每位候选人在 9 月辩论中的发言字数。

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

Left — Democratic Polling : Right — Words Spoke during Sept Debate

不出所料,领先的乔·拜登在辩论中获得了最多的字数。然而在他下面,投票和发言时间之间有很大的差异。民调支持率仅为 3%的科里·布克参议员几乎和前副总统说得一样多。当然,大部分都是在辩论接近尾声的时候。尽管如此,它还是说明了当权派候选人是如何在电视上受到优待的。

有趣的是,时间充裕的伯尼·桑德斯在说的单词方面几乎垫底。很明显,他比他的对手说得更慢,用的词更少。我还观察到,他不太愿意超过分配给他的时间,也不需要像其他候选人那样被打断。

最后,不管你怎么看,杨安泽在辩论中被欺骗了。在大多数民意调查中,杨的表现优于奥罗克、布克、卡斯特罗和克洛布查尔。然而,他在电视上只说了少得可怜的 1600 字。这并不奇怪,因为杨经常被主流媒体忽视,以至于他有时会被完全从政治报道中抹去。

好斗能获得播出时间

当比较候选人的发言时间和他们的投票时,观察到的最大差异是朱利安·卡斯特罗。尽管民调支持率只有 1%,他说的话甚至比皮特·布蒂吉格还多。这主要是因为卡斯特罗利用他的演讲时间发动了攻势。

冲突造就了好的电视节目,所以卡斯特罗有足够的机会与乔·拜登辩论。这是有数据证明的。如果只看候选人发言的次数(包括简短的交流),我们会发现卡斯特罗做得非常好。

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

这一策略是否会提高他的支持率还有待观察,但很明显,继续攻击将会获得更多的播出时间。

沃伦和桑德斯最受观众欢迎

辩论笔录中最能说明问题的一句话是“(掌声)”。如果我们计算每个候选人的掌声次数,我们就能知道谁在现场观众中表现最好。

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

令人惊讶的是,领先的乔·拜登几乎排在名单的末尾。只有艾米·克洛布查尔(Amy Klobuchar)不太受与会者的欢迎(我预计她很快就会退出)。

伯尼·桑德斯和伊丽莎白·沃伦支持的进步议程最受民主党人欢迎,这或许不足为奇。在描述他们的“全民医保”计划时,两人都获得了积极的观众反应。

科里·布克会讲笑话

另一个值得注意的词是“(笑声)”。让观众发笑是让他们喜欢你的一个简单方法。在这方面,科里·布克做得最好。他在晚上得到了一些很好的笑点,特别是当他自嘲他的纯素食饮食时。

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

布克作为一名沟通者如此娴熟,而且他如此受媒体喜爱,这一事实表明他可能是这场竞选中的一匹黑马。如果卡玛拉·哈里斯开始下滑,我预计更优雅的布克将取代她的位置,成为一个迷人和可口的中间派候选人。

每个候选人都专注于“人民”

我们可以从这场辩论中收集到的另一个数据是哪些词用得最多。如果去掉“会”、“必须”、“美国人”等无聊的政客词汇,就能统计出每个候选人最常用的词汇。这些术语用下面的单词云表示。

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

纵观领跑者,无一不是在呼吁“人民”。这个词是最常见的。这些诉求的性质因政治家而异。拜登专注于“事实”和“数字”,表明他试图显得务实。桑德斯和沃伦花更多的时间谈论“医疗保健”、“保险”和“公司”。沃伦从“家庭”的角度谈论个人,而桑德斯从“国家”的角度看待事物。

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

中间派候选人也对“人民”有吸引力。哈里斯通过她反对“特朗普”,布克通过呼吁“社区”。皮特·布蒂吉格词云的平淡表明他的中心思想是模糊的,难以确定的。

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

最后,在低层候选人中,我们观察到一些有趣的趋势。奥罗克在提到得克萨斯州和埃尔帕索时大多处于高位。杨想给人们钱,并与私营公司合作解决医疗保健问题。克洛布查尔大概说“我认为”太多,也想“团结”人。最后,卡斯特罗正在努力推动自己的医疗保健“计划”,同时也在攻击其他候选人的计划。

最后的想法

《金钱球》出版后,统计数据开始主导体育评论和分析。同样的事情还没有发生在政治上。大多数专家仍然依靠直觉来描述政治形势,只有当民意调查出来时,他们才会接受现实的检验。有了推特新闻报道,以及现在的电视辩论,我们有了大量的数据来进行更客观的分析。随着时间的推移,我相信这些工具将会有更好的预测能力。

肯巴-垂怜经“互换”的数据驱动分析

原文:https://towardsdatascience.com/a-data-driven-analysis-of-the-kemba-kyrie-swap-24241f136d29?source=collection_archive---------26-----------------------

使用 Python 的数据科学模块来分解统计数据和高级指标,看看哪个球员更适合波士顿凯尔特人队。

这个 NBA 淡季是整个联盟运动的焰火。仿佛是很久以前,凯里·欧文离开小镇去了布鲁克林和凯文·杜兰特一起打球。不到一年前,垂怜经声称自己热爱波士顿,并将长期留在这里。然而,与其他波斯顿球迷不同的是,我很难将对垂怜经的憎恨藏在心里,因为作为一名球员,我太喜欢他了——这与本文的观点无关。

现在让我们波士顿球迷惊讶的是夏洛特黄蜂队的肯巴·沃克有兴趣来凯尔特人队打球。这很奇怪,因为 1)沃克似乎打算留在黄蜂队,2)波士顿似乎真的是从他想要的比赛目的地冒出来的。我们都知道他在康涅狄格大学做了什么,当他在三月疯狂锦标赛中投篮命中,最终带领哈士奇队赢得男子大学篮球冠军

无论如何,让我们进入这篇文章的主题。让我们试着剖析谁赢得了这场“交换”,谁是更好的球员,以及我们可以期待什么。我们在这里只分析有形的东西,所以我们不能考虑无形的东西,比如化学反应和球员对教练的反应。

在我们真正分解它之前,让我们看看一些基本的统计数据(所有统计数据都来自 basketball-reference.com)。我将使用 Python(尤其是 matplotlib 模块)来生成一些图形。让我们开始吧。

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

Points Per Game (career)

让我们来看看与控卫位置最相关的数据。传统上和历史上,控球后卫的位置是控制比赛节奏的位置。很自然地,我想到了两个数据:得分和助攻。垂怜经职业生涯 22.2 PPG,肯巴 19.8 PPG。

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

Assists Per Game (career)

如果我们看看助攻,数据更相似,肯巴是 APG 的 5.5 次,垂怜经是 APG 的 5.7 次。他们职业生涯的平均得分和平均助攻都非常相似。垂怜经是更有天赋的球员,所以我们可以把更高的 PPG 归因于此。虽然垂怜经在职业生涯中受益于更好的队友,但他仍然平均每场比赛只多 0.2 次助攻,这可能表明肯巴可以在球队中服务得更好。即使当垂怜经在凯尔特人,一个可以说更有天赋的球队打球时,他平均只有 6.1 个 APG,只比他在骑士队的平均水平高出 0.6 个 APG,只比他的职业生涯平均水平高出 0.4 个 APG。

既然我们比较了传统控球后卫的标准数据,让我们来看看现代 NBA 中非常重要的东西——三分球。

在我们继续深入之前,值得注意的是,虽然垂怜经和肯巴都打了 8 个赛季——他们都是在 2011 年的选秀中被选中的,分别在第 1 和第 9 选择,肯巴打了 97 场比赛,尽管垂怜经在他参加的所有 508 场比赛中都是首发。让我们来看看三个百分点和总数:

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

垂怜经和肯巴场均 2.1 3 分。然而,垂怜经的投篮命中率更高,平均每场 5.4 次,而肯巴每场 5.9 次。虽然这看起来不是一个巨大的差异,但实际上肯巴的三分球命中率为 35%,而垂怜经的命中率接近 39%。

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

总数再次描绘了一幅相似的画面。做出来的 3 个百分点显然和上面一样。肯巴更多的尝试(和失误)可以归因于更多的比赛。然而,话虽如此,肯巴在他职业生涯的 605 场比赛中投进了 1283 个三分球,而克里在 508 场比赛中投进了 1063 个三分球。如果我们假设一切保持线性,让垂怜经打 605 场比赛,他将会投中 1266 个三分球,这在某种程度上是可以比较的。

到目前为止,有两点需要注意——这些数据基本上没有让我们得出更适合的现实结论;也就是说,我们只是看到了两个伟大的控球后卫职业生涯中的平均水平。包含每 36 分钟的统计数据并没有什么意义,因为两位球员都打了首发级别的比赛(肯巴每分钟 34.1 分钟,而垂怜经每分钟 33.8 分钟)。我认为更能说明问题的是最近几个赛季,以及一些更先进的指标。

所以我们来思考一下为什么要看近几季。有几个原因。首先,我们想看看谁更适合波士顿凯尔特人队的整体。这意味着我们只想看看垂怜经的最后两个赛季,并将它们与肯巴的赛季进行比较。我们可以在这个概念上加倍下注,因为肯巴从 2017 赛季开始才成为全明星。无论你是否认为他在那之前应该是全明星球员,这都不会帮助我们,所以让我们深入了解过去两个赛季的统计数据和高级指标。让我们把最基本的东西弄清楚。

PPG,APG 和 3PT%是我们想再看看的。

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

再一次,这个数据有点不确定,因为在过去的两个赛季中,肯巴场均 23.85 次 PPG,而垂怜经场均 24.1 次 PPG。APG 也是如此,肯巴和垂怜经分别为 5.75 和 6 APG——尽管垂怜经上赛季的确有职业生涯最高的 6.9 APG,这可以归功于更好的队友,我们很快就会看到这一点。

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

在过去的两个赛季中,垂怜经是一个神奇的三分射手,他的三分命中率为 40.4%,而肯巴只有 37%。垂怜经的能力,尝试和艰难的运球投篮(三分)不能被忽视;联盟中可能没有其他球员更擅长创造自己的投篮机会勒布朗球迷对我的愤怒加剧

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

值得注意的是,在过去的两个赛季中,肯巴几乎参加了所有可能的比赛,只缺席了两场比赛。肯巴打了 162 场比赛,而垂怜经打了 127 场。肯巴的长寿是一个巨大的加分点,但在肯巴的三个全明星赛季中,黄蜂队都没有进入季后赛。在某种程度上,我们可以再次将这归因于他周围的团队,我们将查看一些高级指标,看看谁更适合。

高级指标

如前所述,在肯巴的每个全明星赛季,夏洛特黄蜂队都没有资格进入季后赛。垂怜经上赛季无疑拥有他职业生涯中最好的配角,但作为一个团队,凯尔特人队只获得了 49-33,低于上一年的表现。黄蜂队以 39 比 43 结束了比赛。为了更好地了解支持强制转换,让我们更深入地了解指标。

在 37 场比赛中一起出场最多的黄蜂队首发阵容是尼克·巴图姆-杰瑞米·兰布-肯巴·沃克-马文·威廉姆斯-科迪·泽勒。这个阵容取得了 19 胜 18 负的战绩,是他们所有首发阵容中最好的胜率(51.4%)。另一方面,波士顿凯尔特人队的首发阵容一起打了 33 场比赛,19 胜 14 负,胜率为 57.6%。这个问题中的阵容是艾尔·霍福德-凯里·欧文-马库斯·莫里斯-马库斯·斯马特-杰森·塔图姆。这可能会让某些人感到震惊,因为 1)我们付给戈登·海沃德很多钱,对他期望很高,2)杰伦·布朗似乎有退步的迹象。如果我们更深入地观察,我们会发现实际上有两个 5 场比赛的首发阵容非常出色。阿隆·贝恩斯-艾尔·霍福德-凯里·欧文-马库斯·斯马特-杰森·塔图姆的阵容以 80%的胜率取得了 4 比 1 的胜利,艾尔·霍福德-马库斯·莫里斯-特里·罗齐尔-马库斯·斯马特-杰森·塔图姆的首发阵容以明显的 100%胜率取得了 5 比 0 的巨大胜利。

艾尔·霍福德、马库斯·莫里斯和阿隆·贝恩斯已经不在队里了。因此,这将对我们如何让肯巴适应凯尔特人产生明显的影响。在我们尝试将这些放在一起之前,让我们看一下 2018-2019 赛季的 win share 相关指标。我们将关注 VORP(价值超过替代球员)。如果我们把一个玩家的 VORP 乘以 2.7,我们得到他们的战争(胜于替换)。由于比例是线性的(2.7 倍),所以在数据可视化方面并不重要,所以让我们看看 2018-2019 赛季的 VORP。

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

这里我们有凯尔特人队首发阵容的 VORP,他们一起打了 33 场比赛。凯里·欧文拥有最高的 VORP,为 4.7,占 VORP 首发阵容的 41.6%。欧文得益于艾尔·霍福德的帮助,他的得分是 3.4。

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

如果我们看看黄蜂队的 VORP 图表,我们看到肯巴实际上在整个 VORP 中占了更高的百分比,为 41.9%。肯巴的个人 VORP 是 3.9,但没有一个艾尔·霍福德类型的人来帮助他。整个团队中第二高的 VORP 是尼克·巴图姆,1.7 分。所以很明显,垂怜经确实有更好的配角。

为了更好地了解支持阵容,让我们看看没有肯巴和垂怜经的阵容。

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

很明显,凯尔特人的队友上赛季比黄蜂的队友打得更好,分别是 17.82 分和 14.58 分。

以我们对凯尔特人阵容的了解,让我们看看如果我们把肯巴放入肯巴-马库斯·斯马特-杰森·塔图姆-杰伦·布朗-伊内斯·坎特的最佳阵容会发生什么。我承认这不会是完美的,因为 1)伊内斯·坎特的 VORP 上赛季不会很好,因为他取代了正在经历职业生涯赛季的努尔基奇(所以我们将使用他职业生涯的平均水平 VORP ), 2)我们不知道首发阵容会是什么,这意味着我们不能真正在杰伦·布朗或戈登·海沃德身上下注。

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

事实上,杰伦·布朗的 VORP 值为 0.0。海沃德的 VORP 指数实际上是 1.2,这让我感到意外,可能也让所有人感到意外。我们应该期待布朗和海沃德在没有垂怜经的情况下在本赛季向前迈进一步。

我会把前面提到的 more 瓦尔和垂怜经/肯巴的对比放在另一张图上,但这并不能说明什么,因为垂怜经的 VORP 是 4.7,而肯巴是 3.9,所以它只会持续 0.8。

所以这些数字告诉我们,就纯生产而言,凯里·欧文和肯巴·沃克之间并没有巨大的差距。正如我之前提到的,我只考虑了有形资产。我试着不偏不倚,但根据这些数据,凯尔特人队的总胜率比上赛季更好并不是不可能的。老实说,VORP/战争的数据告诉我们,霍福德是更大的损失,因为他上赛季 3.4 的 VORP 远远超过了预计的中锋伊内斯·坎特,他上赛季的 VORP 为 0.6(但职业生涯的 VORP 为 2.1,尽管仍有所下降)。

很明显,这不是一篇完美的文章,也不是对名单和两名球员的分析。我这样做有几个原因:

  1. 了解篮球运动中的高级指标
  2. 使用 Python 中的数据分析模块来实现数据可视化

我会很高兴地感谢任何反馈!我知道网上已经有其他工具来做我所做的这种类型的分解,但我这么做只是为了好玩,因为它结合了我最喜欢的两件事:篮球和编码(尤其是 Python)。我完全打算把这样的东西放在一起,可能会看看科怀·伦纳德和保罗·乔治的新阵容。展望未来,我希望:

  • 实施机器学习模块来预测最佳阵容
  • 从 Basketball-Reference.com 导入 CSV(逗号分隔值)格式的数据,这样我就不用硬编码值了。通过这种方式,我可以创建一个项目,该项目具有对任何球队的任何球员进行分析的类和函数。
  • 与前一个项目相反,因为我可以引入一个 CSV,所以我也可以使用 Pandas 模块。

最后,万一垂怜经或肯巴看到这个:这只是一个软件工程师在找乐子,并试图学习。我对你们以及你们为凯尔特人所做的/将要做的一切只有爱。

感谢阅读!

图像来源:

  1. https://bleacher report . com/articles/2835452-尼克斯-谣言-凯里-欧文-给予强烈考虑-肯巴-沃克-雷达
  2. https://www . nytimes . com/2011/03/11/sports/ncaabasketball/11 uconn . html

人格模型的数据科学方法

原文:https://towardsdatascience.com/a-data-science-approach-to-personality-models-d3c7e18a377?source=collection_archive---------8-----------------------

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

1。简介

我个人一直觉得人们在行为方式上的差异很有趣,所以这项研究将让我们对此有更多的了解。我们将洞察一个人的特征如何与他们的性格特征和习惯相关联,甚至能够根据一些人口统计数据进行预测。

特别是,大多数当前的性格测试利用了普遍接受的 5 因素模型,也称为海洋,以组成它的 5 个因素的首字母命名。

对经验的开放。(创新/好奇vs一贯/谨慎)

C .责任心。(高效/有条理与随和/粗心)

[E]外向。(外向/充满活力与孤独/保守)

宜人性。(友好/富有同情心与挑战/冷漠)

神经质。(敏感/紧张与安全/自信)

该模型基本上是一种被该领域专家普遍接受的人格特征分类方法,因为它允许捕捉人与人之间最相关的人格差异。然而,它也是辩论和批评对象。

有人认为,作为一种解释性或预测性理论,五大模型的范围是有限的。也有人认为,五大人格量表只占正常人格特质的 56%。

一个常见的批评是五大人格不能解释所有的人类人格,事实上,一些心理学家不同意这个模型,因为他们觉得它忽略了人格的其他方面。由于这个原因,一些人已经开始把五大心理学称为“陌生人心理学”,因为他们指的是陌生人身上相对容易观察到的特质,而其他更私人化或更依赖于背景的个性方面被排除在外。

鉴于范围限制的批评,也许可以开发一个新的心理测量模型,以找到相关的维度或替代的潜在因素来解释人格的差异。因此,这成为本文的核心,我将在下面的章节中详细解释。

2。数据

这个数据集不是以海洋方法为基础的,它是一个有趣的答案集合,通过个人兴趣、性格特征、生活方式和个人特征,回答了从音乐偏好到恐惧症等一系列不同的问题。它是通过调查收集的,调查对象是 1010 名年龄在 15 至 30 岁之间的欧洲人。顺便提一下,答案中几乎没有缺失值,但是由于样本量足够大,我们可以小心地完全删除这些行。要了解问题列表的更多信息,请参考附录。

抽样单位是按行组织的单个回答。在列中,我们可以找到变量。我分析的重点是,一方面是基本特征,另一方面是个性特征。

基本特征

**性别。**分类,男,女。

年龄。数值变量,但按照以下标准转换为序数变量:

  • 1:15–19 哟
  • 2:20–24 哟
  • 3:25–30 yo(比其他组多花一年时间,但有意义,因为就受访者而言,该组人数较少)

**教育。**序数变量。类别如下:

  • 1:小学
  • 2:中学
  • 3:大专学历
  • 4:硕士学位和博士学位(我加入了他们两个,因为受访者中很少有博士)

受访者度过大部分童年时光的地方。类别:

  • 村庄
  • 城市

性格特征

更准确地说,这份名单不仅包括性格特征,还包括对生活的信念和看法,在我看来,这些都可以追溯到性格特征。

它由 54 个问题组成,所有问题都有 1 到 5 级的建议答案,1 表示强烈反对,5 表示强烈同意。实际上有 57 个,但为了简单起见,删除了 3 个,因为它们与其余的性质不同。

其他感兴趣的数据

除了个性数据,还有关于兴趣、音乐偏好、恐惧症和生活方面的问题。

答案的范围也是从 1 到 5。

3.方法学

为了进一步实现我们的目标,即找到人格特质与一个人的特征之间的关系的有价值的见解,先花些时间研究一下人格特质的问题列表是很方便的。在这个意义上,我们说的是一个因素分析。背后的理由是双重的。

首先,我们希望能够在相似的维度上对变量(问题)进行分组,而不损失信息的能力,换句话说,我们希望降维。这很方便的原因是因为向前看,使用几个变量比使用很多变量要方便得多(记住我们在谈论 55 个问题,所以有 55 个变量);尤其是关于将来使用回归技术的前景。因此,简而言之,这就好像我们在为随后的分析筛选变量。

其次,它将允许我们发现潜在的结构,这些结构也许可以建立一种人格测试的替代心理模型。

因此,由于没有创建变量时使用的模型,或者我们可以与之进行比较的任何参考,我们需要探索是否可以找到潜在的相关维度,因此该分析实际上是一种探索性因素分析

一旦基本原理清楚了,我们该如何进行呢?

首先,对变量之间的相互关系有所了解是有好处的。为此有两个选项,一个是绘制关联热图矩阵,另一个是对所有问题运行 PCA ,以查看它们在前两个维度上的回归,并观察它们如何相互关联。请注意,主成分分析是一种降维方法,但出于此目的,最好利用其他方法。正如我们将在结果部分看到的,两者都是计算出来的。

特别是,使用基于 Ward 最小方差凝聚法的系统聚类绘制了相关可视化。Ward 的聚类遵循在树的每个节点处合并两个聚类的标准,其中它试图最大化新聚类的均值与其他聚类的均值的分离,这相当于最小化新组合的聚类内的离差。r 包 Corrplot 允许我们计算这个。

在此之后,使用的方法是主轴分析。这里的要点是提取因子后的旋转,以不断寻找潜在结构。使用的旋转方法是 varimax 旋转。R 中的 Factanal 包用于计算这一点。

此时出现的一个问题是,我们需要执行多少次旋转?意思是,我们在哪里停止得到因子或维度?

在这里,scree 图就派上了用场。scree 图描绘了变量(问题)相对于因子数的相关矩阵的特征值。在这个问题上,R 中的 Nscree 包帮助了我们。

一旦我们提出了解释原始变量中观察到的大多数差异的少量因素,我们的想法是根据人的特征回归它们,以便对人进行区分或分类。这是通过分类和回归树(CART)完成的。

回归树开发了易于可视化的决策规则,用于根据一些相关变量以某种方式预测分类变量。r 也被用来计算这个,特别是 rpart.plot 包。

这基本上是项目主干中使用的方法。然而,除此之外,我想得到一些其他的见解。特别是,我想分析健康的生活方式。为此,我求助于对应分析。其主要目的是在地图(通常从投影到平面上的多维空间)中直观地描述答案之间的关系——从 1 到 5,1 表示非常不同意,5 表示非常同意,回答以下陈述“我过着非常健康的生活方式”;和类别,在这种情况下,变量是性别、年龄(分组)和教育。

4.结果

在开始之前,可以在附录中找到的原始问题列表也已经用数字给出,以便于可视化,因为 54 个变量一起有时使得有时难以阅读图表。

主成分分析

首先,让我们看一下进入前两个维度的主成分分析。为此,我们需要对数据集应用 PCA,如下面的代码所示。

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

Thanks to Prof. Michael Greenacre for its PCA customized function

运行代码后,结果如下所示:

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

在这里,我们可以对变量在前两个维度中的关系有一个粗略的近似。我们可以看到,他们解释的方差约占 16%,这表明我们最好探索并考虑更多的维度。

查看 PCA,例如在维度 2 中,我们可以看到有一组变量,稍后我们将能够更详细地看到它们,它们是非常负相关的(由相反的箭头表示),这些是问题 52、47 和 31,即兴趣或爱好、能量水平和朋友数量,而不是问题 27 和 24,即改变过去(悔恨、忧郁)和孤独。正如我们所看到的,双方都唤起了完全相反的感觉。

相关性热图矩阵

现在让我们更详细地看看问题之间的关系。下面是相关矩阵。

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

x 和 Y 轴显示了 54 个问题。这种排序已经给出了一些想法和提示,告诉我们在计算因子分析时会发现什么。特别地,矩阵单元中每个正方形的大小和颜色指示了每对之间的皮尔逊相关系数的强度。

此外,我随意突出显示了 9 个矩形,这些矩形显示了相似特征之间的分组。例如,问题 2、3 和 4(从右下角开始的第二个矩形)、“优先处理工作量”、“写笔记”、“工作狂”等概念包含了一个潜在的相似概念,即勤奋,努力工作的动力。(请注意,样本单位是 15 至 30 岁的年轻人,因此在大多数情况下,他们相当于工作的老年人正在学习)。此外,有趣的是,我提到的这个组与问题 25、51(从左上角开始的第三个矩形)、“学校作弊”和“早上起床困难”负相关,这完全说得通。

无论如何,上面的相关性矩阵是一个很好的起点,但是要告诉我们的是调查问题下面的主要潜在因素,是因素分析。

所以让我们开门见山吧。

要素分析

首先,我们定义一个函数来画出我们将要得到的维度和它的参数。

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

然后,我们调用 factanal 包,使用 varimax 旋转法获得因子。

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

最后,我们在包含因子的变量上调用之前定义的函数。

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

阅读以下因子图的方法基本上是关注 X 轴和 Y 轴的极值标签,因为它们是表征或解释每个维度的大部分方差的标签。换句话说,它们代表每个因素最高负荷的变量。

因素 1

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

Dimension of factor 1 can be read horizontally and the one for factor 2, vertically

同样,每个变量的含义可以在附录中找到。

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

F1. Positiveness

我称之为积极因素,因为他们与积极的感觉有关,看起来他们是积极的人,感觉快乐,精力充沛,晚上做好梦,对自己和自己的个性有积极的想法。在光谱的另一端,我们发现那些感觉不好的人是因为他们感到孤独(正如我们在前面展示的相关性矩阵中看到的那样,与“生活幸福”和“能量水平”非常负相关),他们经历负面情绪可能是因为他们不积极,如悔恨和愿意改变过去,以及情绪不稳定。

因素 2

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

F2. Extroversion

第二个因素是外向/内向性格维度的有效测量。那些外向的人发现与新的人一起进入和适应新的环境是容易和令人兴奋的,喜欢认识新的人,有大量的朋友,有许多兴趣和爱好,而且他们也更容易变得自信。自信并不总是容易运用的东西,因为关系的另一部分可能不会很好地接受它,一个内向、更敏感和一般朋友较少的人可能想要避开。另一方面,我们看到内向者的典型特征(内向的春天),当被很多人包围时,他们往往会感到不舒服,所以他们往往不喜欢/害怕公开演讲;他们也倾向于反复思考,因此做决定和回复一封严肃的信需要时间。内向的人也倾向于内省,因此平均来说比外向的人更担心健康,这也是有道理的,毕竟,内向的人比外向的人更能意识到他们内心发生的事情,所以发现健康异常并沉思它们对他们来说比外向的人更有可能发生。

因素三

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

Dimension for factor 3 can be read vertically

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

F3 — Diligence

第三个维度是勤奋。正如我们在简要评论 PCA 时提到的,这个因素代表了那些勤奋工作的人,他们可以被认为是有纪律的、勤奋的人,因此也是可靠的。像写笔记和工作狂这样的概念清楚地反映了这一点。其他如优先考虑工作量和提前考虑可能不太明显,但仔细想想,以系统的方式做这件事并不容易,让我们说舒服,所以它显示了一定程度的勤奋和动力,以按时完成任务。另一方面,我们有那些早上起床有困难的人,他们在学校有作弊的倾向,简而言之,这些人通常更懒,也不那么勤奋。

因素 4

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

Dimension for factor 4 can be read vertically

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

F4 — Warmth

第四个人格维度是“温暖”,是善良、敏感和诚实的概括。它反映了个性的各个方面,例如,对他人的同情,看到他人痛苦时的痛苦,该给礼物时的慷慨,当一个人感到挣扎时的哭泣,以及享受孩子的陪伴。前两个表示同理心,第三个表示善良,第四个表示不克制表达情感如哭泣的人,所以诚实地反映他们的真实情况和感受;第五宫也显示出温暖,毕竟,小孩子很爱玩,经常微笑,这迫使他们以某种方式回报,所以如果有人有点冷淡、严肃或不想被这种事情困扰,就会倾向于喜欢少一些孩子的陪伴。

在光谱的另一端,我们有那些双面的人,那些喜欢大的危险的狗而不是小的狗的人,和那些容易爱上某人但很快失去兴趣的人。它们看起来似乎是毫无关联的话题,但对我来说并非如此,因为它们描绘了那些倾向于在他们周围筑起一堵墙的人,这样其他人就看不到他们是谁或他们的感受。第一个似乎显而易见,因为他们直截了当地说出来,第二个可能与那些通过想要给人留下强大和危险印象而建起一堵墙的人相匹配,第三个反映了那些在敞开心扉、展示真实自我、在更深层次上同情和联系他人方面有很多困难的人,因此他们很快失去兴趣并不断更换伴侣。

因素五

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

Dimension for factor 5 can be read vertically

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

F5 — Superficiality

我把第五个因素称为肤浅,在某种程度上代表了那些把形象和地位看得非常重要的人物,这通常与物质主义、自我中心和浅薄联系在一起。在我看来,第一个变量将个人关系的重点放在了解一个人对他/她可能有多大用处上,这在我看来是自私的,第二个变量与他们对自己身体形象的重视程度有关,第三个变量反映了那些吹嘘自己成就的人。

另一方面,我们有远离物质主义和自私的人格特征,因为第一个问题回答了那些上交丢失物品的人,这些物品虽然有价值,但不是他们的;第二个回答了那些把朋友看得比金钱更重要的人。

到目前为止,我们提出了一些因素,除了有意义之外,它们还解释了变量的值的变化。因此,在这一点上出现的问题是,选择多少因素?

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

上面的碎石测试对此有所启发。我们可以看到,有 17 个特征值高于 0,这告诉我们,有多达 17 个因素至少可以解释一些方差。10 被认为是因素的最佳数量,然而我尝试了,他们除了没有多大意义之外,几乎不能解释差异。所以,根据我的发现和对特征值曲线上因素数量的直观探索,我们可以看到随着曲线斜率的减小,增加新的因素似乎并不能捕捉和解释大量的方差,所以我决定在 5 个因素处停止。

能够将 54 个问题归结为 5 个维度,并获得所有变量的大部分方差,这似乎很棒。这是因素 1:积极,F2:外向,F3:勤奋,F4:热情,F5:肤浅。

但是在进入分类树之前,还有一个缺口需要填补。

如前所述,这个想法是为了简化变量,我们已经这样做了,但是,我们知道归入因子的变量有相反的符号。如果我们不转换这些因素的组成部分,我们就不能真正反映它的本质。例如,“生活中的快乐”给那些对自己和自己的生活感到非常快乐的人打 5 分,但我们也可以找到“孤独”,它给孤独的最大强度打 5 分,因此如果我们听其自然,一个快乐的人会给“生活中的快乐”打 5 分,给“孤独”打 1 分,所以我们的平均得分是 3 分。然后,一个孤独、消极的人给“生活中的快乐”打 1 分,给“孤独”打 5 分,平均再打 3 分。如果两个完全相反的人,就这种人格特征而言,给维度相同的平均值,我们如何能期望维度在人的特征上正确分类?

似乎很明显,必须进行变革。我所做的是反转“相反”变量的评级,因此转换后的 1 是 5,2 是 4,以此类推。将此应用于所有获得的因素,我们可以计算平均值,并在接下来的分类模型中将其用作解释变量。

回归树

我们在这里要做的是分类并预测一个人属于所分析的特征变量的给定类别的概率,给定他们在树的每一层的最有区别的维度上的分数。

年龄

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

根据数据部分中确定和解释的群体,我们可以从树的顶部节点看到,最大的受访者群体属于 20 至 24 岁的人。顶部节点(和每个节点)的第二行代表分别属于第一、第二和第三组的预期概率(相当于它们的频率)。

我们可以看到,勤奋维度得分 3.2 更有利于预测 25 至 30 岁的人(从观察到的 9%至 15%)。然后,低于 3.2 的勤奋,低于 3.1 的积极,但高于 4.2 的热情是进一步帮助预测有利于“中年”人的组合(从观察到的 48%到 75%)。最后,更好地预测最年轻者(15-19 岁)的组合是勤奋低于 3.2,积极高于 3.2,肤浅高于或等于 3.9。

因此,总之,该树将“年纪最大”的人归类为受访者中最勤奋的人,最年轻的人归类为最肤浅、最不积极和最不热情的人,而“中年人”归类为最积极的人,然而,如果受访者在积极方面的平均得分低于 3.1,根据该模型,他们将是最热情的人。

童年地点

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

简而言之,该模型预测最热情和最不肤浅的人在乡村度过了相当长的童年时光。平均热情得分高于 4.2 和肤浅低于 2.7 的组合预测回答者有 63%的概率在农村度过童年。如果我们考虑到它们只占观测值的 29%,那就相当高了。所以根据这些因素和这棵树,城市意味着更少的温暖和更多的肤浅,这似乎很准确。

性别

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

简而言之,更多的温暖(平均分数为 3.4%)预测有利于女性,从 59%的女性受访者中高达 78%。同样,当试图对人们进行性别分类时,最具歧视性且似乎更相关的因素是温暖因素。平均分数低于 2.7 的人有 80%的可能性是男性(41%的男性回答了调查)。

对应分析

一旦分析了项目的主干,让我们把注意力从人格特征转移到人们的生活方式上。

特别是,其目的是获得一些关于健康的生活方式是如何由性别、年龄和教育等特征决定的直观见解。

对于“我过着非常健康的生活方式”这个问题,人们被要求强烈同意(5)、同意(4)、中立(3)、不同意(2)或强烈不同意(1)。

这里有一些年龄性别和教育的交叉列表。

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

“ma”和“fa”分别代表男性和女性,而 1、2、3 对应于我们在数据部分解释的最年轻、中年和最年长的人。

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

性别-年龄

对应分析对我们的目的来说很方便。让我们按性别-年龄来看一看。

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

在上面的 CA 图中,我们可以看到所包含的维度分别解释了总惯性的 72.4%和 16.2%,对于二维解决方案,总共解释了 88.6%,这似乎是一个非常高的值,表明与剩余维度相关的其余惯性实际上与解释差异无关,因此所使用的二维是解释类别差异的最佳维度。

从地图上我们可以推断出什么?

第一个维度由生活方式总体健康的人与生活方式极端的人之间的对立决定,也就是说,要么生活方式非常健康,要么生活方式总体不健康。

第二个维度似乎把偏离整体利益的符号分开了。

所以,我们可以在第一维的一边观察女性,在另一边观察男性。这意味着总体而言,年轻女性比年轻男性更关注健康的生活方式,观点的可变性似乎比男性更少分散和“两极化”。而对于男性,我们可以看到最年轻的(15-24 岁)和成年人(25-30 岁)之间的明显区别,成年人遵循非常健康的生活方式,而年轻人则相反,特别是年轻男性,他们似乎平均遵循相当不健康的生活方式。

教育

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

这一次,总惯性的 99.3%由双标图的 2 个维度解释,这证实了这是解释变量间差异的最佳维度数。

特别是,我们可以观察到,与受过高等教育的人相比,受教育程度较低的人的平均生活方式往往不太健康。

无论如何,让我们对此持保留态度,因为由于取样单位的年龄从 15 岁到 30 岁,年龄与研究高度相关。

5.结论

我们应用因子分析得出了有趣的个性维度,这些维度可能无法从遵循海洋方法的标准问卷中捕捉到。从他们身上,我们已经能够看到部分不同的人格因素,这些因素可能是替代人格心理测量模型的基础。在对获得的因素使用回归树之后,我们也能够为不同的基本分类特征找到有趣的分类。

限制可能是导致获得 5 个维度的解释性因素分析应该继续进行验证性因素分析,以便建立具有统计显著性因素的模型。这肯定会是我为这种项目设想的扩展。

6.参考

https://www . ka ggle . com/nowaxsky/visualization-and-prediction-of-shopping-habits/data

https://cran . r-project . org/web/packages/corr plot/corr plot . pdf

https://www.statisticssolutions.com/factor-analysis-2/

https://github . com/rsangole/personalitytracfactoranalysis/blob/master/FA _ Traits。R

https://www.statmethods.net/advstats/factor.html

https://cran . r-project . org/web/packages/nf actors/nf actors . pdf

http://www.milbo.org/rpart-plot/prp.pdf

http://trevorstephens . com/ka ggle-titanic-tutorial/r-part-3-decision-trees/

https://en.wikipedia.org/wiki/Big_Five_personality_traits

[## 什么是内向的人?一个深入的解释——内向的春天

内向和外向出现在一个谱上。这意味着有不同程度的内向。没有人…

introvertspring.com](https://introvertspring.com/what-is-an-introvert/#whatisintrovert)

7.附录

人格特质陈述/问题列表

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

斯托克霍姆公寓价格的数据科学方法

原文:https://towardsdatascience.com/a-data-science-approach-to-stockholms-apartment-prices-part-1-dcee0212596d?source=collection_archive---------20-----------------------

SE 公寓项目

用 Python 中的 Web 抓取获取和清理数据

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

项目背景

被认为是世界上价格最高的房地产市场之一,我认为斯德哥尔摩的公寓市场可以作为一个有趣的案例研究,有很多有趣的数据。将大部分数据转化为易于理解的有用见解,并建立一个预测未来公寓房源销售价格的模型。

我还决定确保用一个数据科学家处理这个问题的方式来处理这个问题,处理一些现实情况下会出现的头痛和挑战。这意味着我想挑战自己,将可用的数据转换成可以实际使用的干净数据。

注意:通常这个角色包括提出一个对业务有益的具体目标。但是在这种情况下,我选择了一种非常通用的方法,我还不知道我可能在寻找什么样的模式。

“数据科学家是能够获取、筛选、探索、建模、解释数据、融合黑客技术、统计学和机器学习的人。数据科学家不仅擅长处理数据,还将数据本身视为一流产品。— 希拉里·梅森 ,快进实验室创始人。

在这里阅读这个项目的下一部分:
用机器学习把数据变成洞察和预测器。

所有源代码都在这里:
https://github . com/gustaf VH/Apartment-ML-Predictor-Stockholm _-with-web scraper-and-Data-Insights

项目目标

1.收集在线可用的真实生活数据,并能够收集、清理和过滤这些数据成一个高质量和高数量的数据集。这次没有干净的 Kaggle-datasets 的捷径。

2.根据收集到的数据,制作一个机器学习模型,该模型基于相关的 f 特征,如大小、房间数量和位置,以可行的准确度对其销售价格做出准确的猜测,从而实际上被认为是有用的。

3.将我收集的所有数据转化为洞察力,希望能教会我一些关于斯德哥尔摩房地产市场的令人惊讶或有用的东西

使用的特殊工具

  • Python :整个项目都是用 Python 编写的,因为它对这个领域的库有很大的支持
  • Selenium**(Python)😗*流行的在 Chrome 中执行网页抓取程序的端到端测试软件。
  • 熊猫&Numpy**😗*Python 库为易于使用的数据结构和数据分析工具。
  • [Yelp API](# https://www.yelp.com/developers/documentation/v3/business_search)**😗*API 接收附近的兴趣点以及基于地址的坐标。
  • Seaborn&Matplotlib**😗*Python 的数据可视化库旨在直观地展示我们的结果。

获取良好和丰富的数据。

为了开始这个项目,我需要好的数据。从这个意义上说,好的数据意味着它主要满足两个要求,质量和数量。就质量而言,重要的是我们的数据具有不同的属性(特征),这些属性与我想要了解和预测的内容相关。如果我想预测一套公寓的销售价格,好的特征将是,例如,公寓的大小,它的位置房间数量何时售出等等。

我可以在 Hemnet 上找到所有这些数据,这是一个瑞典的公寓列表网站,所以我决定使用这些数据。

关于网络抓取非常重要: 就我而言,我绝不会将此作为商业产品或用于任何金钱利益,但始终尊重其他人或公司的数据,并确保您总是仔细检查适用于网络抓取的内容,以免侵犯版权。

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

Demo of how my Selenium Web Scraper works by automatically controlling an instance of Chrome.

简而言之,Web Scraper 的工作原理是打开 Chrome 浏览器窗口,导航到 Hemnets Stockholm 列表,获取该页面上的所有公寓列表,然后导航到下一页,重复这个过程。

我遇到并幸运解决的一些问题:

  • Hemnet 将每个搜索查询的列表限制为 50 页。我以此为契机,在公寓大小之间获得了均匀分布的数据。我将我的搜集工作分成 20 个查询部分,每个部分对应于一个特定的公寓大小,然后我告诉搜集者为我搜集。为了前任。一部分是面积在 20 至 25 平方米之间的所有公寓。这导致我得到:
    每页 50 个列表 50 页 20 段= 50,0 00 个列表** 现在我也有了比以前更好的数据传播,结果非常好!
segments = [20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 250]*for* i in range(0, (len(segments)-1)):
driver = initCrawler(segments[i], segments[i+1])apDataNew =           getRowsFromHnet(driver, 50)
apData = apData.append(apDataNew, *ignore_index*=True)
  • **谷歌广告横幅。**这些都很棘手,因为它们的类是动态的,当我试图点击“下一页”按钮时会导致 Scraper 误点击。不幸的是,这导致 Scraper 在我的例程中多次获得相同的页面,因为它有时没有正确地点击下一页按钮。正因为如此,在删除重复的条目后,我最终得到了 15 000 个条目,而不是 50 000 个。然而,我没有深究这个问题,因为幸运的是,15 000 仍然是足够继续下去的数据。
  • **iframe 中的隐私策略弹出窗口。**每次都弹出来,因为我们处于匿名模式,需要点击。原来它是在一个 iframe 中实现的,这使事情变得复杂,但是用 Seleniums 窗口管理工具解决了。

在 Yelp 的帮助下,为我们的数据添加特征。
在 Yelps API 的帮助下,我们可以得到很多基于某个位置的细节信息。例如,通过发送地址,我们可以获得该位置的坐标(纬度和经度)。这非常有用,因为我们现在可以将基于字符串的地址,如“Hamngatan 1”转换成更可量化的东西,如两个数字。这将使位置成为一个可用的功能,以后创造的可能性,几何比较公寓的位置。

此外,我们还接收兴趣点功能,以添加到我们的公寓数据集。这被定义为 Yelps 认为值得列出的地方的数量,这些地方在公寓的 2 公里以内。你可能会问,这有什么关系?它之所以相关,是因为它可以表明你的公寓位于市中心的位置,这可能会反映在销售价格中。因此,添加这个特性可能有助于我们以后在模型中的准确性。

response = yelp_api.search_query(*location*=adress, *radius*=2000, *limit*=1)*return* (latitude, longitude, pointsOfInterestsNearby)

清理、擦洗和过滤数据

这是我认为我学到的将问题应用到现实世界的最多的部分,因为数据从来没有像你希望的那样被很好地格式化和干净,这次也不例外。首先,我开始清理数据并重新格式化:

  • **改变日期顺序并制作数值。**我使用 python 字典结构将月份转换成数值。
*# 6 december 2019 --> 20191206* df.Date = [apartment.split(' ')[2] + (apartment.split(' ')[1]) + (apartment.split(' ')[0]).replace('december', '12')
  • 将除地址和经纪人之外的所有特征都变成数字(浮点数)。
  • **削减销售价格。**从“Slutpris 6 250 000 kr”转换为“6 250 000”。
  • 删除错误获取的坐标。Yelp API 确实在一些情况下认为一个地址在瑞典完全不同的地方,并返回这些坐标。这可能会扭曲数据,因此如果一个公寓的坐标明显超出斯德哥尔摩的范围,整行都会被删除。
df = df.loc[17.6 < df['Longitude'] < 18.3]
df = df.loc[59.2 < df['Latitude'] < 59.45]
  • 添加新的组合功能 PricePerKvm。由于奖金与公寓的面积密切相关,直接比较不同面积公寓的价格并不能显示价格有多合理。为了直接比较奖品,我创建了一个名为(PricePerKvm)的新功能,即价格除以平方米。

请击鼓:我们的最终数据集

经过大量的清理、擦洗和过滤,我们最终得到了一个包含 14 171 套公寓房源的数据集,这些房源具有 9 种不同的特征。

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

[Sample of 5 out of 14 171 entries]

在这一部分中,我了解到数据科学项目中的大部分时间将包括收集和清理数据,因为从时间上来说,**这一部分几乎占了整个项目时间的 80%。**现实生活中的数据很少按照你想要的方式进行清理、过滤或结构化。它也不总是统一的,所以对于下一个项目我想接受将不同类型的数据集结合成一个的挑战。

当谈到这个数据集时,它应该是我们下一部分的足够数据— 建立一个预测性的机器学习模型,并将数据转化为见解!

在这里阅读这个项目的下一个故事:
用机器学习把数据变成洞察和预测器。

所有源代码均可在此获得:
https://github . com/gustaf VH/Apartment-ML-Predictor-Stockholm _-with-web scraper-and-Data-Insights

斯托克霍姆公寓价格的数据科学方法

原文:https://towardsdatascience.com/a-data-science-approach-to-stockholms-apartment-prices-part-2-13e51772b528?source=collection_archive---------22-----------------------

SE 公寓项目

通过机器学习将数据转化为洞察和预测

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

这个故事的目标和上一个故事的摘要。

之前的故事中,我们探索了如何获取和清理数据。虽然清理和过滤的时间比预期的要长,但我们最终得到了一个非常干净的数据集。为了唤起你的记忆,我们现在把这个作为我们的数据集:

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

Sample of 5 out of 14 171 apartment listings with 9 different features.

拆分数据进行验证。

我们的数据集中大约有 14 000 个条目,这对训练我们的 ML 模型非常有用。训练我们的模型,需要大量的数据,所谓的训练 数据。但是为了检查我们模型的性能,我们还需要数据,即所谓的*验证数据。*在这里,平衡很重要,因为如果我们的训练数据太少,我们的模型将无法在足够的数据上进行训练并且不准确。另一方面,如果我们没有足够的验证数据,我们就不能确定我们的模型在以后测试时的准确性。注意:我们也可以使用交叉验证,但是因为我们有大量的数据,收益会很小。

出于这些原因,我选择对数据进行 3/4 分割,这意味着 75%的行用于训练,25%用于验证。

建立机器学习模型。

训练我的机器学习(ML)模型的第一步是考虑我应该包括的特征,这也很重要。根据直觉和以前对公寓的了解,我决定选择:‘日期*’、大小、【附近位置】、【房间】、【纬度】、* 和***‘经度’。*** 选择要包含和排除的正确特性对于我们模型的性能非常重要,所以我们稍后将返回来对此进行调整。但是让我们从这个开始,看看我们最终会怎样。

如何建模

这个问题将是一个回归任务,很可能会过度拟合。因此我最终决定使用一个 随机森林树 。因为它是一种集合方法(一种使用不同评估平均值的方法),所以它可以很好地对抗过度拟合,并且通常在很少调整其超参数的情况下产生非常好的结果。

因为它是一个决策树模型,我们也不需要标准化数据来避免某些特性比其他特性更优先。

现在,我们用训练数据训练模型,并对照验证数据进行测试。

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

I wrote a function that calculates the accuracy in Mean Absolute Error or Mean Absolute Error Percentage. Follow the links if you want to learn more but the short story for both measurements is that the closer to 0, the better.

嗯,不完全是一个伟大的公寓价格预测。这意味着我们的模型的预测将会平均偏离24%或者超过 1 000 亿 SEK。我们肯定可以改进这一点。那么我们如何优化这一点呢?

特征工程和优化

我绘制了特征的相关性,以发现使用我们训练的模型及其特征最好包括哪些特征。

feat_importances = pd.Series(trainedModel.feature_importances_, *index*=trainFeatures.columns)
feat_importances.nlargest(numOfFeatures).plot(*kind*='barh')

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

Which feature that has the biggest impact on the price. The higher the value, the bigger the impact. This means Size affects the pricing the most.

我最终决定选择: 【大小】【邻近点】【纬度】【经度】 因为它们对价格的影响最大,你可以在这里的图表中看到。

我遗漏了租金,因为在这种情况下,我们知道租金但不知道价格,反之亦然,似乎没有必要包括在内。

我在这个实例中使用了大量的优化,但这超出了本文的范围。然而,经过这些优化后,我们最终获得了以下性能:

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

Shows how close the predictions were to actual pricing (in SEK). X-Axis: What the prediction model predicted the price would be. Y-Axis: Actual Price for the apartment. Each dot represents one apartment listing and the red line is the linear fit of all predictions.

更好的是,我们的模型可以预测销售价格,平均为 390,000 SEK 或实际价格的 8.4 %。

这里需要注意是,对于这种精确度,我们只使用 4 个特征:*‘大小’,‘邻近点’,‘纬度’,‘经度’,*来获得这种精确度。因为附近的点、纬度和经度都来自地址,**我们实际上只需要两个特征。**这为什么让人印象深刻?这意味着我们的模型只需要公寓大小和地址就可以达到 91.6%的准确率。

**我们为什么不干脆赋予模型所有的特性呢? *多多益善吧?***不,这样做通常会导致过度拟合——其中模型学习训练数据太好,意味着噪声和离群值也包括在其预测中,而不是学习一个通用公式,这正是我们要寻找的。

结论:将数据转化为见解。

在这一点上,我们有干净和有组织的数据和预测销售价格的 ML 模型。最后,我想总结一下这项研究给了我们哪些有益的启示。

先说实际数据。这是我们所有数据行的汇总。它显示了所有 9 个特征数据的平均值、标准偏差、最大值和最小值。

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

Summary of 14 171 rows of data.

假设从 Hemnet 获得的数据代表了斯德哥尔摩的公寓市场,我们可以得出结论:斯德哥尔摩公寓的**😗*

  • 中间价是 390 万 SEK。
  • 租金中位数是 2 800 SEK。
  • 房间数量的中位数是 2。

此外,我们可以比较所有功能之间的关系(它们的相关性),以了解每个功能如何相互影响,而不仅仅是价格。

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

Shows how much each feature is dependent on each other. For example, the Size is entirely dependent on itself, so its value is 1 (green). The lower (red, -1) or higher (green, 1) the value, the more dependency.

从这个图表中,我们可以看到一些并不令人惊讶的事情,房间很大程度上取决于大小。但我们也可以总结出一些我们之前可能不知道的关于斯德哥尔摩公寓的事情:

  • 经度很大程度上取决于附近的兴趣点。含义:附近好玩的地方(餐馆、酒吧、学校等)的数量。根据 Yelp) 这很有趣,取决于你是住在西斯德哥尔摩还是东斯德哥尔摩,东斯德哥尔摩有更多附近的景点。
  • PricePerKvm 对经度的依赖程度是纬度的两倍。意思是如果你住在东斯德哥尔摩,你的公寓可能会更贵。

当然,还有很多需要建立的联系,但这些是我个人最喜欢的。

最后,我想再次回到这个关联图,它显示了每个特性对价格的影响程度。

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

Which feature that has the biggest impact on the price. The higher the value, the bigger the impact. This means Size affects the pricing the most.

我发现最令人惊讶的一点是,房间数量对价格的影响是如此之小。含义:

  • **无论是多一间房还是两间房,一套公寓的价格都没有太大差别。**在这种情况下,最重要的是平方米的大小。

我们还可以从该图中得出结论,大小、邻近点、纬度和经度是对价格影响最大的特征。其中三个完全取决于位置。含义:

  • 位置决定一切并将极大地影响定价。

为了展示斯德哥尔摩的价格变化,我决定直观地展示一下。

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

Shows the geographical positions of the most expensive apartments. X-Axis: Latitude, Y-Axis: Longitude, Z-Axis: Sales Price / Square Meters (SalePricePerKvm)

如你所见,模式确实存在。如你所见,最高点(黄色)位于 stermalm 的中部。

本案例研究的主要收获

对于斯德哥尔摩的公寓:

  • 中间价390 万 SEK。
  • 租金中位数是 2 800 SEK。
  • 房间数的中位数是 2。
  • 附近有趣的地方(餐馆、酒吧、学校等)的数量。根据 Yelp) 的说法,这些都很有趣,这取决于你是住在斯德哥尔摩西部还是东部,那里的东部有更多有趣的地方。
  • 如果你住在东斯德哥尔摩**,你的**公寓很可能会更贵。****
  • 一套公寓的定价是没有明显的不同** 不管它有一个额外的房间还是两个房间,如果它不增加更多的平方米。**

在这里阅读之前的故事:
用 Web 抓取获取和清理数据。

所有源代码均可在此获得:
https://github . com/gustaf VH/Apartment-ML-Predictor-Stockholm _-with-web scraper-and-Data-Insights

Python 数据科学案例研究:Mercari 价格预测

原文:https://towardsdatascience.com/a-data-science-case-study-with-python-mercari-price-prediction-4e852d95654?source=collection_archive---------6-----------------------

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

Photo by Myriam Jessier on Unsplash

学习数据科学最有效的方法是解决与数据科学相关的问题。阅读、倾听和记笔记是有价值的,但是一旦你解决了一个问题,概念就会从抽象固化成你有信心使用的工具。通常,一个完整周期的数据科学项目包括以下阶段:

  1. 数据收集和争论
  2. 数据分析和建模
  3. 沟通和部署

在本案例研究中,我们将介绍工作流程中的分析、建模和沟通部分。解决数据科学问题的一般步骤如下:

  1. 理解问题和数据
  2. 数据探索/数据清理
  3. 特征工程/特征选择
  4. 建立绩效指标
  5. 模型评估和选择
  6. 模型优化
  7. 得出结论并记录工作

那些不熟悉数据科学领域和 Python 编程语言的人仍然可以继续阅读这篇文章,因为它将提供关于如何处理和解决这类问题的高级概述。

虽然博客中包含了一些代码片段,但是完整的代码你可以看看这个 Jupyter 笔记本

问题定义

Mercari 是日本最大的社区购物应用程序,人们可以在这里出售和购买不同品牌的各种全新和二手产品,从毛衣到智能手机。现在,Mercari 希望向卖家建议正确的价格,但这很难,因为他们的卖家可以在 Mercari 的市场上放置任何东西或任何一捆东西。

因此,我们的目标是建立一个模型,自动向卖家建议正确的产品价格。我们获得了每种产品的以下信息:

train_id —产品的 id

名称—产品的标题

item_condition_id —卖方提供的产品的状况

类别名称—产品的类别

品牌名称—产品的品牌名称

运费—如果运费由卖方支付,则为 1;如果运费由买方支付,则为 0

item_description —产品的完整描述

价格—产品的销售价格(这是我们将预测的目标变量)

这类问题属于监督回归机器学习的范畴:

  • **监督:**我们可以访问特征和目标,我们的目标是训练一个可以学习两者之间映射的模型。
  • **回归:**目标变量价格是一个连续变量。

探索性数据分析

EDA 是一个开放式的过程,在这个过程中,我们计算统计数据并制作图表,以发现数据中的趋势、异常、模式或关系。简而言之,EDA 的目标是学习我们的数据能告诉我们什么。它通常从高层次的概述开始,然后随着我们发现数据中感兴趣的部分,缩小到特定的领域。这些发现本身可能是有趣的,或者它们可以用于通知我们的建模选择,例如通过帮助我们决定使用哪些功能。在匆忙进入机器学习阶段时,一些数据科学家要么完全跳过探索过程,要么做一个非常敷衍的工作,但实际上 EDA 是解决数据科学相关问题的最关键步骤之一。

数据集可以从 Kaggle 下载。为了验证结果,我们只需要“train.tsv”数据文件。所以让我们开始吧!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split

我们将把数据分别按 80%和 20%的比例分成训练集和测试集。作为惯例,我们将仅对训练数据集进行 EDA。

In:
data = pd.read_csv('train.tsv', sep='\t')train, test = train_test_split(data, test_size=0.2)
print(train.shape, test.shape)Out:
(1186028, 8) (296507, 8)

在训练数据中有大约 118 万个数据点/行,在测试数据中有 29.6 万个数据点/行。8 是两组中的列/特征的数量。特性和变量在这里的意思是一样的,所以它们在博客中可以互换使用。

#this command displays first few rows of the data set
train.head()

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

检查缺少的值

处理真实世界数据时的一个常见问题是缺少值。这些可能由于许多原因而出现,并且必须在我们训练机器学习模型之前填充或移除。首先,让我们了解一下每一列中有多少缺失值。

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

“brand_name”功能有 42%的缺失值。处理缺失值时通常考虑的一些方法有:

  1. 删除缺少值的记录。
  2. 如果缺失值的数量高于某个阈值,比如 50%,则移除特征本身。
  3. 将“缺失值”视为相应特征本身的另一个类别。

在这个项目中,我们将采用第三种方法。

现在我们将开始逐一分析特性。我们将首先检查目标变量价格,然后开始单独分析预测变量,并查看它如何与价格变量相互作用。

价格

让我们检查价格变量的分布,并浏览一些基本的统计数据。

train['price'].plot.hist(bins=50, figsize=(10,5), edgecolor='white',range=[0,500])
plt.xlabel('Price', fontsize=15)
plt.ylabel('Frequency', fontsize=15)
plt.tick_params(labelsize=15)
plt.title('Price Distribution - Training Set', fontsize=17)
plt.show()

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

train['price'].describe()

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

  • 价格变量的分布与上述统计数据一致,即分布是右偏的。
  • 这些商品的中间价格是 17 美元。
  • 75%的商品价格低于 29 美元。
  • 数据中一个商品的最高价格是 2009 美元。

运费

In:
train['shipping'].value_counts(normalize=True)*100Out:
0    55.267667
1    44.732333 
Name: shipping, dtype: float64

55.26%的商品运费由买家支付。让我们看看运输功能与价格的关系。

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

如果卖家支付运费,产品的中值价格为 14.0 美元,而如果买家支付运费,产品的中值价格为 20.0 美元。

通常,当我们在网上购买产品时,我们需要支付低于一定价格的产品的运费或送货费。但是这里的趋势有点相反,因为卖家支付运费的项目的中值价格低于买家支付运费的项目的中值价格。

项目条件

“项目条件标识”有五个唯一值,范围从 1 到 5。数字越低,物品的状况越好。

In:
train['item_condition_id'].value_counts(normalize=True, sort=False)*100Out:
1    43.194511 
2    25.323264 
3    29.166934 
4     2.153153 
5     0.162138 
Name: item_condition_id, dtype: float64

43%的项目条件 ID 为 1,而只有 0.16%的项目条件 ID 为 5。让我们看看这个特性与价格的关系。为了比较和可视化分类变量和数值变量之间的关系,箱线图非常有用。下面的代码用于绘制箱线图。

#for easier visualization, we are considering the prices from range of 0-100
price_100 = train[train['price']<100]fig, ax = plt.subplots(figsize=(20,7.5))
sns.boxplot(x='item_condition_id', y='price', data=price_100, ax=ax)
plt.xlabel('Item Condition', fontsize=15)
plt.ylabel('Price', fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.show()

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

虽然比例较低,但是与具有更好条件的项目相比,项目条件 ID 为 5 的项目具有更高的中值价格

在仔细检查了一些数据后,其中项目条件 ID 被给定为 5,大多数具有这种条件的产品,尤其是电子产品被出售,因为它们的零件本身可以被证明是有价值的。这很好地解释了中值价格较高的原因。

产品类别

“类别名称”中有 1268 个独特的类别

(train['category_name'].value_counts(normalize=True)*100).head(6)Out:
Women/Athletic Apparel/Pants, Tights, Leggings              4.060365
Women/Tops & Blouses/T-Shirts                               3.134841 Beauty/Makeup/Face                                          2.321684 Beauty/Makeup/Lips                                          2.025398 Electronics/Video Games & Consoles/Games                    1.798039 Beauty/Makeup/Eyes                                          1.720390 Name: category_name, dtype: float64

正如我们所看到的,对于每个项目,有三组由“/”分隔的类别。类别根据全面性从上到下排列。因此,我们可以将类别分成三个不同的列。这三个类别将表示主要类别、第一子类别和第二子类别。拆分时,缺少的值将用字符串“类别未知”填充。

作为常见的预处理实践,我们将把所有文本分类值转换成小写。通过下面的例子,这样做的原因将会很清楚:

假设数据中有两行,属于这两行的产品是 iPhone,对应于第一个条目的品牌名称是“Apple ”,第二个条目的品牌名称是“APPLE”。因此,当我们特征化数据以应用机器学习模型时,我们将应用的任何特征化技术都将考虑“苹果”和“苹果”具有两种不同的值,尽管它们意味着相同的东西。因此,为了让我们的模型认为这两个值是相同的,我们将把所有文本分类值转换为小写。实际上,“苹果”和“苹果”将变成“苹果”和“苹果”。

拆分类别后,我们有 11 个唯一的主类别,114 个唯一的第一子类别,863 个唯一的第二子类别。

主要类别

让我们看看哪一个主要类别在数据中的产品数量最多,并看看主要类别如何根据各自产品的中值价格进行排列。

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

最多的产品,即全部产品的 44.8%属于“女性”类,其次是“美容”类产品,约占全部产品的 14%,而最少的 1.7%的产品属于“运动和户外”类。

最高中值价格为 21 美元,属于“男士”类别,其次是“女士”类别,中值价格为 19 美元,而“手工”类别的最低中值价格为 12 美元。

第一子类别

由于有 114 个独特的子类别,很难将它们全部可视化。因此,我们将看看前 10 个最受欢迎的子类别,以及根据其各自项目的中值价格排序的前 10 个和后 10 个子类别。

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

最受欢迎的子类别是“运动服装”,这与之前的观察一致,即最受欢迎的主要类别是“女性”,而“运动服装”属于“女性”和“男性”两个类别。9%的产品属于运动服装类。

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

从商品的中间价格来看,“电脑&平板电脑”子类别的商品具有最高的中间价格,中间价格为 40 美元。

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

子类别“纸制品”中的商品的最低中间价格为 6 美元。“纸制品”属于“手工制品”一类。这也证实了之前的观察,即“手工”类别的商品在所有主要类别中具有最低的中值价格。

商标名称

数据中有 4535 个独特品牌。让我们来看看十大最受欢迎的品牌。

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

Nike 和 Pink 是最受欢迎的两个品牌,数据中 12.6%的产品属于这两个品牌。

当我们检查缺失值时,“品牌名称”功能有 42.7%的缺失值。因此,为了解决这个问题,我们将使用字符串“品牌不可用”来估算缺失的值。

train[’brand_name’] = train[’brand_name’].fillna(’brand_unavailable’)

因为有 42%的价值缺失,所以当给定或不给定特定产品的品牌名称时,观察价格是否会受到影响将是有趣的。为此,我们将创建一个名为“品牌名称已给定”的新功能,其中值“是”和“否”表示品牌名称是否已给定。让我们来了解一下!

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

看了箱线图后,虽然有很多重叠,但我们可以说,给出品牌和不给出品牌时,价格有相当大的差异。当给出品牌名称时,产品的中间价格是 20 美元,当没有给出品牌名称时,中间价格是 14 美元。简而言之,这个特性将有助于 ML 模型从中映射某种模式。

项目说明

“item_description”功能属于非结构化文本数据类别。对于这种类型的数据,预处理步骤将包括以下操作:

  1. 将所有单词转换成小写。
  2. 删除常用词,如“或”、“和”、“是”、“the”、“was”等。我们删除它们是因为这些种类的单词将会以很高的比例出现在数据中,而 ML 模型将无法从中生成任何有意义的模式。这些词被称为“停用词”。
  3. 删除特殊字符,如“&”、“@”、“!”, '?'等等。

对于可视化,可视化文本数据最有效的方法之一是绘制“单词云”。我们将在下面的词云中看到,当价格上涨时,物品描述中的词是如何比较的。为了检查这一点,我们将根据价格从低到高对数据进行排序,然后将数据分成四个相等的部分。通过这样做,第一季度将有价格最低的产品,因此第四季度将有价格最高的产品。

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

First Quarter

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

Second Quarter

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

Third Quarter

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

Fourth Quarter

所有的四个字云几乎都是一模一样的。像“全新”、“从未使用过”、“状况良好”、“大小”、“中等”等词。无论价格如何,在大多数产品中都被频繁使用。这表明销售者大部分时间都试图在产品描述部分为他们的产品说好话,这样他们就不会有太多的麻烦来快速卖掉产品。

在第一个词云中有一个有趣的事情是“描述尚未”这几个词。在快速浏览数据后,有些条目中没有给出描述,只有“还没有描述”几个字,有 5.57%的行有这样的字。就像我们对“brand_name”功能所做的那样,我们将验证产品的价格是否会受到描述的影响。

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

与“brand_name”功能不同,这里没有太大的区别。给出描述时和不给出描述时的产品中值价格几乎相同。给出描述时,产品价格的第 75 个百分位值比未给出描述时的产品价格的第 75 个百分位值多 5 美元。

特征工程和选择

我们将选择用于建模的特征是*‘品牌名称’,‘品牌名称给定’,‘项目描述标识’,‘发货’,‘主类别’,‘子类别 1’,‘子类别 2’和‘项目描述’*。

一键编码

机器学习模型只能从我们提供的数据中学习,因此确保数据包含我们任务的所有相关信息至关重要。我们刚才分析的所有上述特征将用于制作模型。但 ML 模型无法区分“耐克”和“三星”品牌,也无法区分“化妆品”和“玩具”类别,也无法区分任何分类特征。所以为了解决这个问题,我们需要将我们的分类值转换成数值。我们可以通过**‘一键编码’**我们的分类值来做到这一点。通过下面的例子,“一键编码”的概念将变得清晰。

假设我们有一个名为“颜色”的特征,这个特征有三个唯一的值:红色、蓝色和绿色。通过对该颜色特征应用“一键编码”,将生成三列,每列代表三种颜色,二进制值 1 或 0 表示该颜色是否出现在特定的行/观察中。

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

One Hot Encoding (Source)

借助 Python 中的 Scikit-Learn 库,我们可以对分类数据实现“一键编码”。此外,当我们应用 OHE 时,我们需要将其应用于与列车数据相关的测试数据,以避免数据泄漏。例如,如果测试数据中有另一种颜色“黄色”,而这种颜色在列车数据中不存在,那么为了避免数据泄漏,我们将在对测试数据应用 OHE 时忽略“黄色”,因为测试数据应该总是被视为“不可见的”。

一袋单词

现在开始将“item_description”特征表示成数值,我们将应用名为“单词包”的技术。这种技术与“一键编码”相同

在这项技术中,我们将构建一个包含数据集中所有唯一单词的词汇表,并为词汇表中的每个单词关联一个唯一的列。然后,每个句子都被表示为一个列表,其长度与我们的词汇表中不同单词的数量一样长。在列表的每一栏,我们标记出给定单词在句子中出现的次数。这被称为“单词袋”模型,因为它是一种完全忽略句子中单词顺序的表示。通过下面给出的图像,解释将变得清楚。

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

Representing sentences as a Bag of Words. Sentences on the left, representation on the right. Each index in the vectors represent one particular word (Source)

评估指标

通常,均方根误差(RMSE)度量用于回归任务。但是,由于价格遵循长尾分布(50%的产品低于 17 美元),为了使低价产品的误差比高价产品的误差更相关,此问题的适当度量标准是均方根对数误差(RMSLE)。因此,我们将对价格目标变量应用对数转换,以使此假设可用于模型训练。下图给出了 RMSLE 的公式以及每个变量的含义。

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

建立基线

开始建模前的最后一步是建立一个简单的基线。这基本上是一个猜测,我们可以根据它来比较我们的结果。如果机器学习模型没有击败这个猜测,那么我们可能不得不得出结论,机器学习对于这项任务来说是不可接受的,或者我们可能需要尝试一种不同的方法。

对于回归问题,合理的原始基线应该是:对于测试集中的所有示例,相应的价格预测将是训练集中所有示例的价格变量的平均值。这为任何车型设定了相对较低的超越门槛。因此,让我们将对数转换应用于基线模型并对其进行评估。

#split the target variable and the predictor variables
x_train, x_test = train.drop(['price'], axis=1), test.drop(['price'], axis=1)
y_train, y_test = train['price'], test['price']#log transformation
y_train_log = np.log1p(y_train)
y_test_log = np.log1p(y_test)#for baseline prediction
y_train_mean = y_train_log.mean()from sklearn.metrics import mean_squared_error
def rmsle(y_test, y_pred):  
    result = (np.sqrt(((y_test-y_pred)**2).mean())).round(4)
    return result

baseline_result = rmsle(y_test_log,y_train_mean)
print(baseline_result)**0.7497**

为了让我们说机器学习算法表现良好,从 ML 模型获得的误差应该小于基线误差,即 0.7497。

模型选择和超参数调整

有大量的机器学习模型可供选择,决定从哪里开始可能会令人生畏。其中一种方法是尝试几种算法,看看哪一种效果最好!机器学习仍然是一个主要由实验结果而不是理论结果驱动的领域,不可能提前知道哪个模型会做得最好。

我们将评估涵盖复杂性范围的四种不同模型:

  • 线性回归
  • 支持向量回归
  • 决策树回归
  • 极端梯度推进回归(XGBoost)

对于上面的每个模型,我们可以通过调整它们各自的超参数来优化它。模型超参数最好被认为是机器学习算法的设置,由数据科学家在训练前设置。例如随机森林中的树木数量或 K-最近邻算法中使用的邻居数量。

模型参数是模型在训练期间学习的内容,例如线性回归中的权重。

控制超参数通过改变模型中欠拟合和过拟合之间的平衡来影响模型性能。欠拟合是指我们的模型不够复杂无法学习从特征到目标的映射。一个欠拟合模型有高偏差,我们可以通过使我们的模型更复杂来纠正它。

过拟合是我们的模型本质上记忆训练数据的时候。过度拟合模型具有高方差,我们可以通过正则化来限制模型的复杂度,从而对其进行校正。欠拟合和过拟合模型都不能很好地概括测试数据。

选择正确的超参数的问题是,对于每个机器学习问题,最佳集合都是不同的!因此,找到最佳设置的唯一方法是在每个新数据集上尝试多种设置。

我们将应用的特定超参数调整技术是带有 K 倍交叉验证的随机搜索:

  • 随机搜索指的是我们将用来选择超参数的技术。我们定义一个网格,然后随机抽样不同的组合,并执行 K-fold CV,而不是网格搜索,在网格搜索中,我们穷尽地尝试每一个组合。随机搜索的性能几乎和网格搜索一样好,但运行时间大大减少。
  • K-Fold CV 是将给定的数据集分成 K 个部分/折叠,其中每个折叠在某个点被用作测试集。让我们以 5 重交叉验证(K=5)为例。这里,数据集被分成 5 个部分。在第一次迭代中,第一次折叠用于测试模型,其余的用于训练模型。在第二次迭代中,第二个折叠用作测试集,而其余折叠用作训练集。重复该过程,直到 5 个折叠中的每个折叠都被用作测试组。对于特定的超参数组合,来自所有五次迭代的测试误差被平均。随机搜索 CV 完成后,平均测试误差最小的超参数组合被选为最优超参数组合。然后,该组合将用于预测测试数据中示例的价格。

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

K-Fold Cross Validation with K = 5 (Source)

在 Scikit-Learn 中实现机器学习模型

我们将使用 Python 中的 Scikit-Learn 库进行建模。一旦您知道如何在 Scikit-Learn 中制作一个模型,您就可以快速实现各种算法。我们可以举例说明模型创建、训练(使用。适合)和测试(使用。预测)与决策树回归以及随机搜索 CV:

from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import RandomizedSearchCV# Create the model to use for hyperparameter tuning
DT = DecisionTreeRegressor(random_state=42)# Minimum number of samples to split a node
min_samples_split = [25,50,75,100,200]# Maximum depth of each tree
max_depth = [5,10,20,30,50]# Define the grid of hyperparameters to search
params = {'max_depth':max_depth, 'min_samples_split':min_samples_split}# Set up the random search with 4-fold cross validation
RS_DT = RandomizedSearchCV(DT, params, scoring='neg_mean_squared_error', cv=4, n_jobs=-1, random_state=42)# Fit on the training data
RS_DT.fit(x_train_final, y_train_log)# this will return the hyperparameters with lowest CV error
RS_DT.best_params_**Out:
{'max_depth':30, 'min_samples_split':50}**

现在我们将使用上述超参数来评估模型在测试集上的性能。

# Create the model with the optimal hyperparameters
DT = DecisionTreeRegressor(max_depth=30, min_samples_split=50, random_state=42)# Fit the model on the training data
DT.fit(x_train_final, y_train_log)# Make predictions on the test data
y_pred_dt = DT.predict(x_test_final)# Evaluate the model
dt_error = rmsle(y_test_log, y_pred_dt)
print(dt_error)**Out:
0.582**

决策树模型的 RMSLE 为 0.582,比基线模型结果低 22.3%。显然,机器学习适用于我们的问题,因为在基线上有显著的改进!其余选定的 ML 型号也遵循相同的程序。让我们看看其他模型在测试集上的表现如何。

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

线性回归模型给出了测试集上最低的 RMSLE。这表明更简单的 ML 模型也可以完成这项工作,它们不应该被低估。

此外,两种线性模型(线性回归和支持向量回归)都比两种非线性模型(决策树和 XGBoost 回归)表现得更好。

结论

在本文中,我们完成了一个数据科学案例研究,其中我们理解了问题陈述,进行了探索性数据分析、特征转换并最终选择了 ML 模型,进行了随机搜索和超参数调整,并在测试集上对它们进行了评估并比较了结果。

机器学习往往是一个迭代而非线性的过程。我希望这个案例研究至少给了你一个关于数据科学和机器学习相关问题通常是如何处理和解决的高层次概述。

帮助我写这篇博客的参考资料:

  1. https://towards data science . com/a-complete-machine-learning-walk-through-in-python-part-one-c 62152 f 39420
  2. https://towards data science . com/a-complete-machine-learning-project-walk-through-in-python-part-two-300 f1 f 8147 e 2
  3. https://towards data science . com/machine-learning-for-retail-price-suggestion-with-python-64531 e 64186d
  4. https://medium . com/unstructured/how-I-lost-a-silver-medal-in-kaggles-mercari-price-suggestion-challenge-using-CNN-and-tensor flow-4013660 fcded

感谢您的阅读!

数据科学作品集比简历更有价值

原文:https://towardsdatascience.com/a-data-science-portfolio-is-more-valuable-than-a-resume-2d031d6ce518?source=collection_archive---------11-----------------------

考察 3 个投资组合构建平台:Github、LinkedIn 和 Medium

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

Image be Benjamin O. Tayo

数据科学是一个实用的领域。实践技能非常重要,尤其是当你有兴趣作为一名实践数据科学家在学术界之外工作时。

在学术界,你需要更多的理论和研究技能。虽然深入了解数据科学的理论基础很重要,但作为一名实践数据科学家,实践经验非常重要,展示您实践技能的一种方式是通过构建一个非常棒的投资组合。有兴趣雇用你的公司肯定会向你索要投资组合,因为这证明了你在基础数据科学概念方面的优势。

虽然数据科学简历很重要,但数据科学投资组合比简历更有价值。本文将讨论可用于投资组合构建的 3 个重要平台。

在深入探讨构建良好的数据科学组合这一主题之前,让我们首先讨论数据科学组合为何重要的 5 个原因。

数据科学产品组合之所以重要的 5 个原因

  1. 投资组合有助于展示您的数据科学技能。
  2. 投资组合使您能够与其他数据科学专业人员和该领域的领导者建立联系。
  3. 投资组合有利于记账。您可以使用它来记录已完成的项目,包括数据集、代码和示例输出文件。这样,如果你不得不在一个类似的项目上工作,你总是可以使用已经写好的代码,只需要很小的修改。
  4. 通过建立投资组合并与其他数据科学专业人士和领导者建立联系,您可以接触到该领域的技术变化。由于技术的进步,数据科学是一个不断变化的领域。为了跟上该领域的最新变化和发展,加入数据科学专业人士网络非常重要。
  5. 作品集增加了你找到工作的机会——我已经从 LinkedIn 获得了很多机会,比如招聘人员联系我寻找数据科学方面的工作机会。

现在,我们来讨论创建数据科学产品组合的 3 个重要平台。

构建数据科学组合的平台

1.开源代码库

Github 是一个非常有用的平台,可以展示你的数据科学项目。这个平台使您能够与其他数据科学家或数据科学爱好者共享您的代码。有兴趣雇佣你的雇主会检查你的 github 作品集,评估你完成的一些项目。所以在 github 上建立一个非常强大和专业的投资组合对你来说很重要。

要建立 github 投资组合,首先要做的就是创建一个 github 账户。创建帐户后,您可以继续编辑您的个人资料。编辑您的个人资料时,添加简短的个人简介和专业的个人资料图片是个不错的主意。你可以在这里找到一个 github 概要的例子:

现在让我们假设您已经完成了一个重要的数据科学项目,并且您想要为您的项目创建一个 github 存储库。

****创建存储库的技巧:确保你为你的存储库选择了一个合适的标题。然后附上一个自述文件,提供项目的概要。然后,您可以上传您的项目文件,包括数据集、jupyter 笔记本和样本输出。

下面是一个机器学习项目的 Github 知识库的例子:

储存库名称:bot 13956/ML _ Model _ for _ Predicting _ Ships _ Crew _ Size

资源库 URL:https://github . com/bot 13956/ML _ Model _ for _ Predicting _ Ships _ Crew _ Size

自述文件:

**ML_Model_for_Predicting_Ships_Crew_Size**Author: Benjamin O. TayoDate: 4/8/2019We build a simple model using the cruise_ship_info.csv data set for predicting a ship's crew size. This project is organized as follows: (a) data proprocessing and variable selection; (b) basic regression model; (c) hyper-parameters tuning; and (d) techniques for dimensionality reduction.**cruise_ship_info.csv**: dataset used for model building.**Ship_Crew_Size_ML_Model.ipynb**: the jupyter notebook containing code.

2.商务化人际关系网

LinkedIn 是一个非常强大的平台,可以展示你的技能,并与其他数据科学专业人士和组织建立联系。LinkedIn 现在是发布数据科学工作和招聘数据科学家最著名的平台之一。实际上,我已经通过 LinkedIn 获得了 2 次数据科学面试。

确保您的个人资料始终是最新的。列出你的数据科学技能,以及你的经历,包括你已经完成的项目。列出奖项和荣誉也是值得的。你还想让招聘人员知道你正在积极寻找工作。此外,在 LinkedIn 上,您可以关注数据科学的影响者和出版物,如数据科学的和人工智能的。这些公司发布关于各种主题的有趣数据科学文章的更新,包括机器学习、深度学习和人工智能。****

从这里找到我在 LinkedIn 上的帖子的例子:https://www . LinkedIn . com/in/Benjamin-o-tayo-ph-d-a 2717511/detail/recent-activity/shares/

3.中等

Medium 现在被认为是投资组合构建和网络发展最快的平台之一。如果你有兴趣使用这个平台来建立投资组合,第一步是创建一个中型账户。您可以创建一个免费帐户或会员帐户。对于免费帐户,每月实际访问的会员文章数量是有限制的。会员账户需要 5 美元或 50 美元/年的月订阅费。从这里了解更多关于成为中等会员的信息:【https://medium.com/membership】

创建帐户后,您可以继续创建个人资料。确保附上一张职业照片和一份简短的简历。下面是一个中等配置文件的例子:https://medium.com/@benjaminobi

在 medium 上,与其他数据科学专业人士交流的一个好方法是成为一名追随者。您还可以关注专注于数据科学的特定媒体出版物。排名前两位的数据科学出版物是面向数据科学的和面向人工智能的****

提升你的媒体作品的最好方法之一就是成为一名媒体作家。

为什么要考虑在 Medium 上写数据科学文章?

写中型文章有 5 个主要优势:

  1. 它为您提供了展示数据科学知识和技能的途径。
  2. 它激励你从事具有挑战性的数据科学项目,从而提高你的数据科学技能。
  3. 它使你能够提高你的沟通技巧。这是有用的,因为它使你能够以一种普通大众能够理解的方式传达信息。
  4. 每一篇发表在 medium 上的文章都被认为是知识产权,所以你可以在简历中添加一篇 Medium 文章。
  5. 你可以从你的文章中赚钱。通过 媒介合作伙伴计划 ,任何在媒介上发表文章的人都可以获得赚钱的资格。

如果您有兴趣成为一名数据科学媒体作者,这里有一些资源可以帮助您入门:

在介质上写数据科学博客的初学者指南

为您的数据科学文章选择合适的精选图片

总之,我们已经讨论了可用于构建数据科学产品组合的 3 个重要平台。投资组合是您展示技能和与其他数据科学专业人员交流的一种非常重要的方式。一份好的作品集不仅能帮助你跟上该领域的最新发展,还能帮助你在潜在的招聘者面前提高知名度。

数据科学项目周期

原文:https://towardsdatascience.com/a-data-science-project-cycle-af5a1cdef14f?source=collection_archive---------28-----------------------

如何更多地关注问题,而不是工具

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

Photo by Katie Rodriguez on Unsplash

作为组织中的一名数据科学家,您经常会发现自己处于以下几种情况:

  • 你有一个数据集,你想提取一些有用的信息
  • 你有一个业务问题,你想找到一个数据驱动的解决方案

第一种情况实际上是一种常见的情况,基本上,这意味着在您的数据科学之旅中,将您所学的所有内容作为探索性数据分析(EDA)的一部分。在本文中,我将解释如何处理第二种情况。

假设你在你的组织中已经呆了足够长的时间,知道它的业务实践和它产生的所有类型的数据。在这个过程中,你已经形成了一个假设,你想要验证这个假设。或者,也许你的经理/首席执行官/首席技术官正在请求你帮助找到他们遇到困难的问题的答案。如果你有足够的经验,你可能会知道你的下一步,但新手往往很难将他们的思维引向正确的方向。这是一种算法的方式来思考问题,直到找到解决方案。

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

Data science project cycle ( @DataEnthus)

问题是

在第一步,你有一个疑问或问题。如果它很大,如果需要的话,你可以把它分成小块。例如,如果问题是关于预测未来 10 年的销售增长,你可以把它分成几个部分,比如历史销售额是多少?目前的销售趋势如何?市场需求趋势如何?竞争对手表现如何?等等。

你从不同的来源收集尽可能多的信息,从不同的角度理解问题。你首先缩小大图,然后放大与问题相关的具体信息。在这个阶段,你真的从许多不同的角度开始了解手头的问题。这部分类似于学术研究项目中的文献综述。你应该花大量的时间来构思这个问题。

该过程

第二步,不,你不是在想用什么模型/工具/可视化技术;还没有。你正在思考一个方法过程,它将引导你回答你的问题。您可以列出一个数据集列表,确定在哪里可以找到它们,还可以列出一个可能有用的工具列表。即使您还没有对数据/工具的细节做出最终决定,在头脑中或在纸上有一个整体过程也会有很大帮助,即使它会随着后来的额外信息而改变。这种方法有点类似于在学术环境中,你在实际执行研究之前写下你的研究提案;随着你进一步研究手头的问题,事情往往会发生变化。

工具

在第 3 步中,现在您正在考虑哪些工具可以帮助回答这个问题。如果这是一个预测问题,你会想基于时间序列的模型是否有用?还是反而是线性回归问题?需要 GIS 技术吗?有没有好的 R 或者 Python 的包?

一旦您探索了所有可用的选项并决定了一组特定的工具,您现在就可以开始搜寻数据了。您需要的数据可以是一个数百万行的数据集,也可以是一百个数据点,这取决于您的问题和您选择的模型。

你找到所选模型所需的数据了吗?如果是,你就可以去适应你的模型了。但是如果你没有所有需要的输入,你应该在这里停下来,回到第二步的方法过程。也许还有其他不需要时间序列数据的工具/方法?一个不需要很多参数或者大数据集的系统动态模型怎么样?

答案

你已经把你的大问题分成了几个小部分,并单独回答了它们。总的来说,你解决了你开始的那个大问题了吗?如果是的话,恭喜你。如果没有,请返回步骤 2。

沟通是解决问题过程中很重要的一部分。你需要能够说服你的听众(产品经理/同事/外部听众)为什么你的解决方案有意义吗?您还需要对与提议的解决方案相关的不确定性和警告以及您在此过程中所做的假设保持透明。

底线

总之,成为一名科学家意味着要经历一个探索/发现的过程。我们经常被我们所知道的工具/模型以及如何用数据来拟合它们所困扰。正如我们所见,选择正确的工具是解决问题过程的一小部分。总是先有问题,后有工具。

数据科学公共服务公告

原文:https://towardsdatascience.com/a-data-science-public-service-announcement-fe81fbe6dc3f?source=collection_archive---------4-----------------------

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

(Source)

开源数据科学工具需要你的帮助。幸运的是,现在比以往任何时候都更容易做出贡献——以下是提供帮助的方法

生命中最美好的东西都是免费的:朋友、pandas、家人、numpy、睡眠、jupyter notebooks、欢笑、python。严肃地说,令人难以置信的是,数据科学的最佳工具可以免费获得,而且不是由一个拥有无限资源的公司创造的,而是由一个个人社区创造的,其中大多数人无偿从事这些项目。你可以支付860 美元/年购买 Matlab (外加额外费用以获得更多库),或者你可以免费下载 Python 和任何库,不用花一分钱就能获得更好的软件和更好的客户支持(以栈溢出和 GitHub 问题的形式)。

自由和开源软件(FOSS) 运动——你可以自由使用、共享、复制和以任何方式改进软件——极大地改善了公司和个人使用的数字工具,同时将许多领域(包括数据科学)的准入门槛降低到接近于零。对于我们这些在过去几十年中长大的人来说,这是我们唯一知道的模式:软件当然是免费的!然而,我们每天依赖的开源工具现在面临着严重的可持续性问题。

在这篇文章中,我们将探讨自由/开源软件面临的问题,更好的是,你可以采取许多步骤(有些步骤只需 30 秒)来确保你最喜爱的数据科学工具保持免费,并且比付费工具更好。虽然存在一个真正的问题,但我们所有人也有许多解决办法。(本文所依据的信息来自“道路和桥梁:我们数字基础设施背后看不见的劳动”以及 NumFocus 网站。)

为什么开源数据科学工具需要帮助

想想熊猫图书馆这个神奇的工具。截至 2019 年 2 月 20 日,《熊猫》已被 PyPi 下载超过 8000 万次(详细分析 PyPi 下载在此)。根据 libraries.io 的说法,在至少有 25000 个 GitHub 库依赖于 Pandas,至少有 100 个不同的包需要这个库。栈溢出所有问题中有近 1.8%是关于熊猫的(5 倍于整个 Matlab 语言的问题数量)。

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

Analysis of Stack Overflow Tags. You can do your own exploration here.

发展和维护熊猫的工作是由一个相对较小的群体完成的。据 openhub.net 介绍,自从韦斯·麦金尼在 2009 年启动项目以来,熊猫知识库只有 1400 名贡献者,他们总共编写了 294000 行代码。这代表了惊人的 78 年开发者的努力,价值至少 780 万美元。尽管他们的劳动很有价值,但几乎每一个贡献者都是完全免费工作的,他们都渴望构建伟大的数据科学工具。

然而,要维护和更新熊猫,需要的不仅仅是兼职贡献者。根据 NumFocus (稍后将详细介绍该组织), Pandas 需要 10 名全职付费开发人员来实现其目标,包括致力于 1.0 版本的发布。目前,这个由数千万人和数千家公司使用的库有 1 个按 20%时间付费的核心开发人员、1 个按 10%时间付费的核心开发人员和 8 个按 0%时间付费的核心开发人员。

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

From NumFocus (Some of these stats are a little old).

在其他开源数据科学库中也存在类似的问题:matplotlib 需要 14 名全职付费开发人员——目前有 2 名 10%付费时间的开发人员 numpy 需要 12 名——有 2 名 100%付费时间的开发人员(多亏了一笔拨款)。这种付费开发者时间的缺乏损害了开源库:尽管业界广泛依赖,但 Pandas 尚未发布 1.0 版本(被认为是稳定版本),只能以与其获得的资金水平成比例的速度发布。

维护和改进开源软件这样的共享资源的挑战在“公地悲剧”中有所体现:许多人利用免费工具,但很少有人回报。没有适当的支持,公地悲剧的最终结果是资源的枯竭和最终的损失。开源软件——不仅仅是在数据科学领域——正越来越多地遇到可持续性问题,因为越来越多的人采用这些工具而不给予回报。

扩大采用是好事——没有人主张关闭自由/开源软件工具——但这意味着生产者与消费者的比率继续下降到不可持续的水平。在开源时代的开始,许多用户也帮助构建工具,但现在,由于个人电脑的令人难以置信的采用,更多的人可以使用这种软件,这给真正构成我们数字基础设施的工具带来了压力。

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

A quote from Noah Kantrowitz, Python developer and member of the PSF.

在过去的几年里,我们已经开始看到构成我们数字基础设施的开源软件的崩溃(见道路和桥梁报道)。OpenSSL 是一套被 2/3 的 web 服务器使用的加密工具,多年来一直由一名全职开发人员提供支持。70%的网络依赖于一个人的工作,这一事实并没有激励任何人或任何公司捐款,直到 2014 年发现“heartbleed”漏洞,将注意力集中在该项目上,并导致急需的捐款。目前,OpenSSL 有足够 4 名全职员工工作 3 年的资金。如果没有另一个重大问题,这种资助的持续性是不确定的。

作为另一个例子, [bash,一种安装在 70%的互联网连接设备上的 Unix shell 和命令语言](http://Bash - GNU Project - Free Software Foundation https://www.gnu.org/software/bash/)(包括每一台 Linux 和 MacOS 机器),自 1992 年以来一直由一个人维护,Chet Ramey,他在凯斯西储大学工作。同样,这似乎没有困扰任何人,直到 2014 年 bash 中发现了“shell shock”漏洞,引起了急需的媒体关注。

幸运的是,在撰写本文时,我们还没有看到开源数据科学工具中的同等问题。尽管如此,采取行动的时间并不是在灾难发生后,而是尽早阻止灾难发生,防止损失。如果我们想避免真正的公地悲剧,那么我们需要采取行动,把我们心爱的工具放在稳定的基础上。是时候从开源工具的单纯消费者转变为支持者和/或生产者了!

解决方案

任何时候你提出一个问题,你都应该在法律上有义务提出一个解决方案,最好是一个读者可以立即接受的方案。在支持开源数据科学工具的情况下,无论您的技术专长或财务状况如何,都有大量的选项可供您选择。在这里,我们将经历三个阶段:

  1. 报告问题
  2. 解决问题和撰写文档
  3. 通过像 NumFocus 这样的组织进行小额捐赠(这需要30 秒)。

第一种,也许是最简单的帮助方式,是报告问题,这样项目开发人员就知道该修复什么。莱纳斯定律说“如果有足够多的眼球,所有的bug都是肤浅的”这意味着如果一个项目有足够多的用户,所有的问题最终都会被发现。报告问题很有价值,但需要以有效的方式进行。确保您的问题尚未解决(首先搜索类似问题),提供重现问题所需的准确代码,并根据要求提供后续信息。此外,尊重项目开发人员:开源贡献者没有义务解决你所有的问题,所以友善点,尽你所能给他们帮助。

如果你有点不确定该不该问,这里有一些在 GitHub 上提交问题的小技巧,还有如何问一个关于堆栈溢出好问题。除了改进开源库之外,这两项技能(提交问题/提问)将帮助你个人成为一名数据科学家,因为如果你使用一个库足够长的时间,你最终会遇到一个别人从未遇到过的问题。当你遇到新问题时,你必须知道如何提问或如何自己解决问题。

这一点让我们想到了第二种贡献方式:解决开源库的突出问题和需求。GitHub 是一个很棒的合作平台,它让你很容易找到你可以贡献的地方。你所需要做的就是去你最喜欢的图书馆的仓库,选择问题,并在你觉得舒服的地方寻找。

这甚至不需要高水平的技术专业知识。GitHub 上有超过 2800 个关于熊猫的公开问题,其中 227 个被标记为“好的第一期”。这些问题中的许多都与文档有关,这意味着您不需要编写代码!这些贡献是一个让你接触开源工作的好地方,也可以帮助你建立一个档案,向雇主展示你对数据科学的承诺(请不要只是为你的档案做象征性的贡献,而是对一个项目做出承诺)。

开源的精神是每个问题都应该被视为一个机会:如果你看到一个问题,没有什么可以阻止你为自己和数百万其他人改善图书馆做出贡献。

如果这两个选项都不吸引你,或者你想提供更多的帮助,你可以为开源项目提供财政支持。现在,你可能会说我的捐赠永远不会有所作为,但由于这些项目中的大多数获得的金额极低(2017 年熊猫获得 3000 美元,Numpy 获得 1300 美元),即使是小额捐赠也可以发挥很大作用。此外,来自许多个人的许多小额捐款加起来:如果每个阅读我的文章的人在一个典型的月中只给开源 1 美元,那将超过 50 万美元来支持我们的数据科学工具!

说到捐赠,有时可能有太多的选择,所以我只给你一个专注于数据科学的选择,NumFocus。该慈善机构的既定目标是“为开源科学数据堆栈中的项目提供一个稳定、独立和专业的家园。”NumFocus 支持开源项目,如numpypandasmatplotlibproject jupyteripythonpymc3pytables等。向 NumFocus 捐款很简单:点击图片,30 秒内你就成为支持会员。

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

Click this image and make a difference!

就我个人而言,我每月向 NumFocus 捐赠 2 美元。这是一个很小的数目——以普遍的价值衡量,还不到一个月一杯咖啡——但我很高兴知道我在为我所热爱的图书馆做一点点贡献。成为永久会员也很棒,因为我甚至不需要记得捐款——我只需注册一次,然后自动捐款,每个月都会收到 NumFocus 的感谢邮件。

如果数据科学不是你的领域,或者你想为其他项目做贡献,这里有一些支持开源的组织:

(你可以在这里看到一个更大的列表。)同样,我认为重要的是不要不知所措,所以只需选择一两个,自动化您的支持,然后您甚至不必考虑它。

最好的自动化让我们不用任何有意识的努力就能让世界变得更好!

如果你想更进一步,让你的公司也成为开源软件的一员。如果我的经验是任何迹象,那么你的公司将很高兴投资这些工具,如果你在你的工作中依赖他们。几周前,我在《熊猫》中遇到了一个奇怪的 bug,我在 Stack Overflow然后是 GitHub 上发布了这个 bug,在那里它加入了 2800 个其他关于熊猫的公开问题。不久之后,我收到一条评论,将我引向问题的可能来源,8000 行文件中的第 7400 行,形成了 pandas 中数据帧的基础,并被告知欢迎一个拉请求。

不幸的是,我对熊猫的专业技能和知识远没有达到我想去搞乱图书馆内部的水平。因此,我觉得我需要做些什么来帮助他们,于是我向我公司的首席技术官( Cortex Building Intel )询问公司是否愿意每月向 NumFocus 捐款。幸运的是,我们的 CTO 意识到了支持我们日常使用的技术的价值,并乐于提供帮助。

我分享这个故事不是因为我是一个典范,而是因为它表明有多种方式来支持开源。当我脱离我的技术联盟时,我转向另一种方式来有所作为。我还没有天真到认为我一个人的行动就能缓解这个问题,但是如果有足够多的人行动起来,我们就能改善这些工具的可持续性。

尽管认为砸钱就能解决问题有点过于简单,但更多的付费开发时间确实有所帮助。熊猫有一个在 1.0 版本发布前要达到的目标列表,而及时完成这些目标的唯一方法是用资金支持付费开发者。

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

Pandas road map (if they get more donations!)

为了使它更有效,你应该这样表达你的信息:支持开源工具是对你公司未来的投资。免费和开源技术让许多初创企业得以起步,现在已经成为许多公司甚至整个互联网的技术核心。现在的捐赠将确保开源继续提升技术领域,加强我们的基础设施,并为我们提供最好的数据科学工具。

最后的想法

支持开源不仅仅是拥有有效的免费工具,而是成为更大社区的一部分。解决公地悲剧最有效的方法是培养一种社区意识。让人们感觉他们属于一个共享的团体,他们将努力确保所有成员的资源得到维护。当你开始做出贡献时,你会感受到一种更强烈的团体意识(这是我们这个世界严重缺乏的东西),并且知道你在帮助自己和他人。

此外,如果你做出了任何形式的贡献,我完全允许你在你所有的社交媒体渠道上夸耀。有些活动——献血、在食物银行做志愿者——天生对世界有益,我永远不会厌倦看到关于它们的帖子。当你向开源捐款的时候,站在你个人的山顶大声喊出来。如果你捐得比我多(是的,这是一个挑战),那么让我知道,我会很高兴听到。如果有人说你讨厌,不要理会他们:你让世界变得更好,而他们不是。开源数据科学社区只会不断发展,所以让我们努力为我们都使用的工具提供一个可持续的基础。

提醒一下,游戏计划如下:

  • 提交质量问题,尽最大努力帮助解决这些问题。
  • 去你最喜欢的开源图书馆,挑一个问题(应该有一些标明“好的第一个问题”)并尝试解决它
  • 如果你有能力,向 NumFocus 或其他开源组织进行持续捐赠。
  • 如果你的公司依赖于开源工具,和某人谈谈如何维持公司对开源软件的支持
  • 在任何你想的地方张贴你的捐款。
  • 通过对话和写作说服他人也这样做。

一如既往,我欢迎反馈和建设性的批评。你可以在推特上找到我。

阿克巴和伯巴尔时代的一个数据科学问题

原文:https://towardsdatascience.com/a-data-science-question-in-the-times-of-akbar-and-birbal-7e3f1128fe16?source=collection_archive---------22-----------------------

一个著名的印度故事,在那些在印度长大的人中特别受欢迎,是阿克巴-比尔巴的故事,伟大的莫卧儿皇帝阿克巴提出了一个看似不可能回答的问题——“我们王国里有多少只乌鸦?”。

伯巴尔,机智聪明的阿克巴皇帝的大臣,用一个随机数字反驳,当被要求证明其准确性时,以他典型的无与伦比的方式回应,逻辑是阿克巴不可能验证的,因为如果数字不准确,那是由于鸟类的迁徙本性!

统计估计问题

然而,我认为这是数据科学中一个完全有效的估计问题,也是一个值得问一群数据科学家(如果不是部长的话)的问题(如果我可以做一个观察的话,他们似乎从来没有对科学有足够的理解!).当然,由于所有的乌鸦看起来都一样或难以区分,这似乎是一个相当困难的问题。

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

An adjacent problem: Estimating the number of cars in a city

邻近的问题

但在我们讨论乌鸦之前,让我们讨论一个稍微相邻的问题——我们如何估计一个城市(如果不是王国)的汽车数量。当然,我们现在拥有的优势是,不像乌鸦,汽车被分配了注册号码,并且在大多数城市或多或少以升序排列。在这一点上,值得思考的一个有趣的问题是——拥有这样的注册号会让您的任务变得容易吗?

这是一个至少在面试中经常问产品经理的问题——答案围绕着一系列关于人口统计、城市条件等的猜测,导致最终的“猜测”。

然而,我意识到这个问题有一个优雅的统计解决方案,因此对于数据科学家的采访来说,这也是一个有趣的问题。当我写下数学证明(我们一会儿就会看到)时,我的一个朋友向我指出了一个令人难以置信的事实,这种技术实际上在近 70 年前的二战中被盟军用来估计德国人一直在制造的坦克数量,并将其命名为 德国坦克问题

德国坦克问题

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

By Bundesarchiv, Bild 101I-218–0504–36 / Dieck / CC-BY-SA 3.0, CC BY-SA 3.0 de, https://commons.wikimedia.org/w/index.php?curid=5476517

盟军正利用缴获的坦克进行估算。他们得到的估计是每月生产 270 辆坦克,后来德国战后的记录显示实际数字是 276 辆!所以,事不宜迟,让我们开始吧!

估算一个城市的汽车数量!

这里有几个我们需要做的假设——假设汽车的注册号码是按顺序分配的,没有漏洞。此外,在像印度这样的国家,区号是注册号码的一部分——所以在这种情况下,让我们把重点放在估计特定区号内的汽车的问题上。此外,当有字母作为注册号的一部分时,应该不难将它们转换成数字形式,以便注册号真正是一个数字!

在上述假设/条件下,可以对城市中的一些汽车(比如说 n 辆)进行采样,并根据看到的最大注册数量得出一个估计值。

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

现在让我们来推导一下这个估计值是什么样子的——需要回忆一下你的高中数学,以防你感到数学上的挑战。当然,如果你愿意,请直接跳到这个公式

估计值的推导

假设 M 是从“n”个样本中看到的最大注册数。假设 N 是汽车总数或实际分配的最大登记数量。

理想情况下,我们希望 M 尽可能接近 n。

也就是说,我们希望 m 大于𝑡∗𝑁,其中 0 t 更接近于 1)

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

也就是说,所有的车都是按照注册号顺序从第一辆 t * N 开始的样品。

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

上面的等式可以用来表示随机变量 M 的 CDF 函数:

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

M 的预期值可推导如下:

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

在这种情况下,

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

因为我们知道 M 可以取 0 到 n 之间的值。此外,我想澄清一下,这实际上是一个离散随机变量,尽管出于计算目的,我将其建模为连续随机变量。

对于正随机变量,

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

同样的推导参见链接

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

换句话说,N 可以估计为:

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

那看起来一点也不差!

举个例子,如果你通过看 1000 辆车来估算 M,M 预计是实际值的 99.9%!

回到乌鸦队!

现在我们已经有了一个合理的统计方法来解决这个问题,当汽车被编号时,问题就出现了,在没有编号的乌鸦的情况下能做什么!好消息是,估计任何物种的数量都是目前研究得很好的课题,并且有技术可以解决这个看似困难的问题。

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

有两种估算鸟类种群的方法。一种是进行点计数,即计算从一个点可以看到的鸟类,然后跨区域进行推断。另一种方法是从样线计数,事实上,如果记录了斑点鸟的距离信息,它可以用来绘制该地区特定鸟类的密度图。

标记并重新捕获

另一种方法是称为标记和重新捕获的技术。生物学家(或者数据科学家!)标记该物种的一些鸟类,并让它们进入环境。经过足够长的时间后,发现该物种,并计算有标记和无标记鸟类的数量。样本中有标记鸟类与无标记鸟类的比例使他们能够推断出无标记物种的数量,并得到种群的总体估计。对于那些好奇的人来说,乌鸦等鸟类的标记技术可能是喷射荧光染料,这种染料可以粘在鸟类身上。

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

假设 K 只乌鸦被做了标记。假设乌鸦被重新捕获。

在重新捕获的鸟中,假设有 k 只被标记。

我们如何确定该地区乌鸦的总数 N?

让我们首先理解这里起作用的条件分布。

P(k | N) =假设总共有 N 只鸟,k 只标记的鸟被重新捕获的概率。

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

概率分布

这原来是一个超几何分布。超几何分布的平均值是

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

如果我们进行了足够的观察,k 是样本的平均值,那么 N 可以估计为:

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

这意味着,如果你标记了 100 只乌鸦,并且在你随后的观察中,你看到平均有 2%的乌鸦有标记,那么有标记的乌鸦与无标记的乌鸦的比率可以估计为 1:50,从而给我们一个 5000 只乌鸦的乌鸦种群估计!

请注意,在上述两个问题(乌鸦和汽车)中,出于理解的目的,我使用了所谓的频率主义方法,因为对于这个问题,这是一种更简单但合理的方法,尽管有足够多的情况表明频率主义方法是一种谬误。

参考

[## 如何估算一个城市的汽车数量?

我在产品经理面试中遇到过这个问题,答案围绕着一系列…

medium.com](https://medium.com/@vinodh.ravindranath/how-to-estimate-the-number-of-cars-in-a-city-dd40432f12d2) [## 人口规模、密度和分布

如果您看到此消息,这意味着我们在网站上加载外部资源时遇到了问题。如果你是…

www.khanacademy.org](https://www.khanacademy.org/science/high-school-biology/hs-ecology/hs-population-ecology/a/population-size-density-and-dispersal) [## 鸟类普查技术:数乌鸦(和其他鸟类!)为什么数鸟?描述性研究=…

为什么数鸟?(续)评估栖息地需求=询问“鸟类在……中的密度是更高还是更低?”

slideplayer.com](https://slideplayer.com/slide/4490242/) [## 对话:标记和重新捕获

乔利斯的方法也应该提到。是的,这里应该描述一下 cormack jolly seber 方法。这是极端的…

en.wikipedia.org](https://en.wikipedia.org/wiki/Talk:Mark_and_recapture#Statistical_treatment)

这篇文章最初出现在印度分析杂志上。

启动项目的数据科学工作流画布

原文:https://towardsdatascience.com/a-data-science-workflow-canvas-to-kickstart-your-projects-db62556be4d0?source=collection_archive---------10-----------------------

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

Photo Credit: https://www.wocintechchat.com/

使用本指南帮助您完成数据科学项目。

从自己的错误和最佳实践中学习,我设计了一个 数据科学工作流画布 ***** 来帮助他人实现自己的数据科学项目。这张画布可以帮助你先确定目标的优先顺序,然后再努力实现它们。你可以这样想:不是按照食谱中的步骤来做一顿预定的饭,而是首先想象这顿饭看起来和尝起来是什么样子,然后你开始制定食谱。在从事数据科学项目时,您通常没有一套指令来实现预定的结果。相反,必须确定结果和实现这些结果的步骤。这个数据科学工作流画布的设计考虑到了这一过程。在这里,我将带您了解如何使用这个画布,并且我将分享我如何在自己的项目中实现这个画布的例子。

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

Data Science Workflow Canvas.

下载数据科学工作流画布

如何使用数据科学工作流画布

第一步:确定你的问题陈述

你想解决什么问题?这个问题解决了什么更大的问题?这一部分帮助你解决项目的“为什么”。

第二步:陈述你的预期结果/预测

是的,你不会知道你的成果是什么,直到你完成了你的项目,但你至少应该有一个你认为它们应该是什么样子的想法。识别潜在的预测变量(X)和/或目标变量(y)。

步骤 3:确定您的数据源

您的数据来自哪里?数据是否足够?你真的能使用它吗?有时候,你可能有现成的数据集,或者你可能需要收集数据

第四步:选择你的模型

根据你对这些问题的回答选择你的模型:你的结果是离散的还是连续的?您是否有标记或未标记的数据集?你关心离群值吗?您希望如何解释您的结果?根据您的项目,问题列表会有所不同。

步骤 5:确定模型评估指标

确定相应的模型评估指标来解释您的结果。每个模型都有自己的一套评估指标。

步骤 6:创建数据准备计划

为了运行您的模型并实现您的结果,您需要对您的数据做什么?数据准备包括数据清理、特征选择、特征工程、探索性数据分析等等。

将这一切结合在一起

一旦你在画布上完成了你的想法的头脑风暴,是时候把它们都集中起来,激活你的项目了!将项目投入使用时,请参考画布“激活”部分中列出的顺序。

数据科学工作流画布示例#1

下面是我在 WNBA 机器学习项目中如何实现数据科学工作流画布的一个例子。阅读关于这个项目的文章或者参考这个画布跟随 GitHub

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

Data Science Workflow Canvas for the WNBA Clustering project.

数据科学工作流画布示例#2

这是我在假新闻检测器项目中如何实现数据科学工作流画布的另一个例子。阅读关于这个项目的文章或者参考这个画布跟随 GitHub

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

Data Science Workflow Canvas for the fake news detector project.

结论

要很好地实施这个数据科学工作流画布,请记住以下三点:

  1. 不要害怕犯错误。用这块画布作为头脑风暴你最初想法的空间,然后回来完善你的过程。保留有用的,去掉无用的。
  2. 专注于你想完成的事情。即使你最初的目标改变了,也要专注于你想要完成的事情。不管你需要多长时间回顾和更新你的目标,只要专注于它们。
  3. **数据科学是一个非线性的迭代过程。**实现数据科学项目没有正确或线性的方法。你可以使用这个画布作为资源来帮助你开始一个项目,但是如果你开发另一个更适合你的过程也没关系。

祝您的数据科学项目好运,愿画布与您同在!

*数据科学工作流画布中的内容灵感来自我在大会期间所做的笔记 数据科学沉浸式 。画布的结构灵感来自 商业模式画布

Jasmine Vasandani 是一名数据科学家、战略家和研究员。你可以在这里了解她的更多:www.jasminev.co/

数据科学方法

原文:https://towardsdatascience.com/a-data-scientific-method-80caa190dbd4?source=collection_archive---------7-----------------------

如何对数据科学采取务实和目标驱动的方法

数据科学的主要目的很简单:从数据中提取价值是*。这个价值在不同的环境中可能有不同的形式——但是,通常,它以 更好的决策 的形式出现。*

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

Data Science Should Ensure that Data Results in Better Decisions (CREDIT: Author on Canva)

随着我们越来越深入地探索 21 世纪,数据在我们决策中扮演的角色变得越来越重要。这是因为可用数据的绝对体积增长,以及我们可以用来存储、处理和分析数据的工具的改进。

然而,从更宏观的角度来看,数据科学领域仍处于起步阶段。这是一个出现在其他几个学科交叉领域的领域——仅举几个例子,如统计学、商业智能和计算机科学。随着这些领域的迅猛发展,数据科学也是如此。

因此,重要的是要清楚地制定一种方法,从数据中做出更好的决策,以便它可以有系统地应用于新的问题;当然,这个过程可能会以“向黑暗中开枪”开始——但你至少希望你的射击随着时间的推移变得更加准确;您希望您的过程随着每个项目而改进。

高斯工程 我们做了许多项目,明确的目标是从数据中提取价值;这篇文章将尝试记录我们的一些经验,并为数据科学制定一个流程;我们方法的灵感来源于久经考验的科学方法…

科学方法

自 18 世纪以来,科学方法是自然科学领域的一个特征;它由一系列系统化的步骤组成,这些步骤的最终目的是验证或拒绝一个陈述(假设)。

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

The Phases of the Scientific Method (CREDIT: Author on Canva)

步骤大概是这样的:

1. 观察 →进行观察

2. 提问 →提问观察,收集信息

3. 假设 →形成假设——试图解释观察结果的陈述,根据这个假设做出一些预测

4. 测试→ 使用可重复的实验来测试假设(和预测)

5. 结论→ 分析结果并得出结论,从而接受或拒绝假设

6. 重做 →实验要复制足够的次数,以保证观察值/结果与理论不矛盾。

举个例子,想象你刚从学校或工作回到家;你打开卧室的灯,什么也没发生!我们怎样才能用科学方法来确定这个问题呢?

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

The Scientific Method Applied to Everyday Life (CREDIT: Author on Canva)

科学是增进理解的方法论;而科学方法可以被看作是 一种迭代的方法来规范进行实验的过程,这样所有的实验都可能产生更有价值、更可靠的结果——因此,更好的理解。

同样,我们希望数据科学有一个标准化的方法;也就是说,一种优先获得与分析目标相关的信息的方法。

“如果它与实验不符,那就错了。这句简单的话就是科学的关键理查德·p·费曼

数据科学方法

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

The Gaussian Data Scientific Method (CREDIT: Author on Canva)

在我们的组织 高斯工程 中,我们找到了一种方法,我们觉得这种方法对我们的项目很有效。像科学方法一样,它由 6 个阶段组成:

1. 识别

2. 了解

3. 流程

4. 分析

5.**缔结缔结缔结**

6. 沟通

这些阶段将得到更详细的解释,我将列出我们在每个阶段使用的一些工具/方法(我们的团队用 Python 编程,并使用各种开源工具,所以请原谅我在这方面的偏见)。

识别

“识别”阶段涉及数据科学项目目标的制定;它也可以被称为“计划”阶段。

我们发现,通过分析所讨论的数据集,非常清楚地了解我们试图实现的目标是非常有帮助的。借用 PAS 55 实物资产管理标准中的一个术语,我们试图确保我们的团队对项目的总体目标有一个清晰的视线*。***

在这个阶段,我们会问这样的问题:

  • 根据这些数据需要做出什么决定?
  • 我们希望回答什么问题?
  • 对于答案,我们会对什么样的自信水平感到满意?
  • 我们能阐明与这些问题相关的假设吗?它们是什么?
  • 我们有多少时间进行探索?
  • 利益相关者希望从这些数据中做出什么决定?
  • 理想的结果是什么样的?
  • 我们如何导出并展示最终结果?

**对“识别”阶段有用的工具/方法:

了解

这个“理解”阶段就是对数据本身有一个 的总体感觉

在你开始迷失在细节中之前;深入各种数据源;在各个领域上进行筛选,在‘增值工作’和‘分析麻痹’之间走着细微的界限,有用的 保证你的团队对有什么 有更大的画面理解。我们在花了大量时间为我们的项目目标建立了一个视线之后才这样做——以便在下一阶段让它们在我们的脑海中保持新鲜。

在这个阶段,我们会问这样的问题:

  • 数据的大小是多少?
  • 一共有多少档?
  • 数据在多大程度上来源于不同的来源?
  • 自动导出还是手动电子表格?
  • 数据是否有一致的格式(日期、位置等)。)?
  • 整体数据质量如何?就数据质量的 6 个维度而言?
  • 需要什么样的清洁水平?
  • 各个字段是什么意思?
  • 有哪些领域存在偏见问题?

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

Our Take on the Six Dimensions of Data Quality (CREDIT: Author on Canva)

了解数据的各个方面,例如数据的总体大小,可以帮助您决定如何进行分析;对于较小的数据,您可能希望使用 Python、Jupyter 和 Pandas 或 R;对于较大的数据,您最好将它移动到一个带索引的 SQL 数据库中(对于较大的数据,Hadoop 和/或 Apache Spark 成为选项)。

这个阶段特别有趣的是,如果你对自己的目标有一个清晰的视线,那么,随着你对数据 有了更好的理解,你就可以确定哪些方面对分析 最重要;这些是你可以首先投入大部分精力的领域。这在有严格时间限制的项目中尤其有用。

**一些对“理解”阶段有用的工具/方法:

  • 研讨会/头脑风暴会议
  • Python
  • Jupyter 笔记本 (允许共享包含实时代码、公式和可视化的文档)
  • Numpy 熊猫 (Python 库)
  • MatplotlibSeaborn(可以帮助查看缺失数据的 Python 可视化库)**
  • (一种面向统计的编程语言)

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

Using Python to Visualize Missing Data with a Heatmap (Yellow is indicative of Missing Data) (CREDIT: Author on Jupyter Notebook)

Code Snippet for Heatmap (‘df’ stands for ‘DataFrame ‘— a Pandas data structure)

(以上热图是用随机数据生成的)

流程

这个“处理”阶段是关于 让您的数据进入一种准备好进行分析的状态

我想到了“清洁”、“争吵”和“争吵”这些词。

这里给你一个有用的现象是帕累托原则——或“80/20 法则”:

“对于许多事件来说,大约 80%的结果来自 20%的原因”——维尔弗雷多·帕累托

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

The Pareto Principle or 80/20 Rule (CREDIT: Author on Canva)

“流程”阶段通常会占用最多的时间;根据帕累托原则,重要的是优先考虑你投入最多时间的数据的哪些方面;你想先把注意力集中在你认为最重要的事情上,只有在必要和有时间的情况下才回到次要的领域。

在此阶段,我们可以执行以下任何或所有操作:

  • 将所有数据组合成一个单一的索引数据库(我们使用PostgreSQL)**
  • 识别并删除与确定的项目目标无关的数据
  • 识别并删除重复项
  • 确保重要数据的格式(日期、时间、地点)一致
  • 删除明显与现实不符的数据,这些异常值不太可能是真实数据
  • 修复结构错误(错别字、大小写不一致)
  • 处理丢失的数据(nan 和 null——通过丢弃或插值,取决于具体情况)

这个阶段的目的实际上是让你在分析阶段的生活变得更容易;处理数据通常需要很长时间,可能是相对乏味的工作,但结果是值得努力的。

**一些对’流程’阶段有用的工具/方法:

分析

这一阶段涉及数据的实际分析;它是对数据进行检查、探索和建模的过程——以 发现以前未知的 模式和关系。

在数据价值链中,这一阶段(以及前一阶段)是数据本身增加最重要价值的地方。这是将数据转换成(潜在的)可用信息的转换阶段。

在这一阶段,您可能希望快速可视化您的数据,尝试确定不同字段之间的特定关系。您可能想要探索不同位置或不同时间的字段差异。

理想情况下,在 识别 阶段,你会提出几个关于你想从这些数据中得到什么的问题,甚至可能会陈述几个假设——这是你实施模型来确认或拒绝这些假设的阶段。

在此阶段,我们可以执行以下任何一项操作:

  • 如果有基于时间的数据,探索某些领域是否存在长期趋势——通常使用基于时间的可视化软件,如 超集 格拉法纳
  • 如果有基于位置的数据,按区域探索某些字段的关系—通常使用制图软件,如 传单 JS ,以及空间查询(我们使用PostgreSQLPostGIS)**
  • 探索不同领域之间的相关性(r 值)
  • 使用自然语言处理方法(如单词袋模型)对文本进行分类
  • 实施各种机器学习技术,以识别多个变量/领域之间的趋势——回归分析可能很有用
  • 如果有许多变量/字段,可以使用降维技术(如主成分分析)将其减少到保留大部分信息的较小变量子集
  • 深度学习和神经网络有很大的潜力,特别是对于更大的结构化数据集(尽管我们还没有充分利用这一点)

分析阶段实际上是橡胶碰到路面的阶段;这也说明了数据科学更性感的一面。

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

Visualizing the Distribution of Two Variables Using Seaborn’s Jointplot (CREDIT: Author on Jupyter Notebook)

Code Snippet for Jointplot

**一些对“分析”阶段有用的工具/方法:

(注意,我们将可视化工具留到最后一节)

缔结缔结缔结**

这个阶段关注的是阶段的分析结果中得出可靠的、有价值的结论。在这个阶段,你可以清楚地回答你的问题;在这个阶段,你可以证明或者否定你的假设。在这个阶段,你还可以利用你的结论,产生可操作的项目,以帮助实现目标(如果合适的话)。

我们通常旨在创建一个从分析中得出的结论或“发现”列表,以及一个基于这些发现的后续建议行动列表。列出行动时应该考虑到你的目标受众:他们想简洁地知道 发现了什么他们可以用/关于它做什么

在此阶段,我们可能会执行以下任何一项或全部操作:

  • 交叉检查调查结果和原始问题(“识别”阶段),并确定我们已经回答了什么
  • 拒绝或接受“识别”阶段的各种假设
  • 对结论/调查结果进行优先排序,哪些结论/调查结果对利益相关方最重要——哪些最重要?
  • 尝试将结论编织成某种形式的故事
  • 确定跟进问题
  • 确定行动将产生最有价值结果的高度优先领域(帕累托原则)
  • 根据结论制定建议和/或行动(特别是在高度优先领域)

**一些对“总结”阶段有用的工具/方法:

  • 研讨会/集思广益会议
  • 微软办公软件(Excel、PowerPoint、Word)
  • 【80/20 法则】

传达

可以说,数据科学方法中最重要的步骤是“交流”阶段;在这个阶段,你 确保你的客户/观众/利益相关者理解你从他们的数据中得出的结论

还应该以这样一种方式向他们展示这些,以便他们能够采取行动——因此,如果你不建议采取行动,那么应该展示结论,以便激发他们采取行动的想法。

在这个阶段,您将自己的发现和结论打包成美观、易于理解的可视化、演示、报告和/或应用程序。

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

A Geographic Visualization Using Apache Superset (CREDIT: Apache Superset)

在此阶段,我们可能会执行以下任何一项操作:

  • 如果有基于时间的数据,使用像 【格拉法纳】 超集 这样的软件包创建性感的时间序列可视化
  • 如果有空间数据,使用 传单 JS Plotly 超集 等软件包创建性感的地图可视化
  • 使用D3 . jsMatplotlib Seaborn 创建统计图**
  • 将各种可视化嵌入仪表板,并确保它们是可共享的/可移植的(无论是托管的还是作为应用程序构建的)——超集 是在组织内实现这一点的绝佳方式
  • 使用D3 . js 开发交互式可视化
  • 使用 Angular、Vue.js 或 React(或只是普通的 JavaScript)等 web 技术开发交互式应用程序或 spa(单页应用程序!)—使用 PostgreSQL 的 Psycopg2 等库将这些链接到数据上

**一些对“沟通”阶段有用的工具/方法:

  • (针对时间序列)****
  • Apache 超集 (探索与可视化平台;允许创建可共享的仪表板;非常适合各种数据源,包括 SQL 数据库)
  • Matplotlib Seaborn Bokeh(Python 可视化库—Seaborn更多的是为了统计可视化,是建立在Matplotlib)
  • D3.js (一个直接将 HTML 链接到数据的 JavaScript 库,允许漂亮的、交互式的和高度可定制的浏览器内可视化)
  • leaflet . js(一个用于创建交互式地图的 JavaScript 库)
  • Plotly Altair,以及Pygal(Python 库用于交互式可视化)
  • Jinja 2(Python,HTML 模板库——类似 Django 模板)
  • psycopg 2(PostgreSQL 驱动通过 Python 方便数据库连接)
  • vue . jsReact*(SPA 库/JavaScript 框架)*****
  • 微软办公软件(Excel、Word 和 PowerPoint)——用于报告

信息应导致行动

现在,就像到目前为止所陈述的那样,通过这个过程是非常好的;毕竟,它应该会产生一些声音信息。不过,要实现这些数据的任何好处,应该对从中获得的信息做些什么!

像科学方法一样,我们的方法是一个迭代的过程,应该包含行动…

所以,稍微修改一下我们的图表:

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

The Data Scientific Method with Feedback and Action Loop (CREDIT: Author on Canva)

通常我们也会经历这六个阶段,在我们再次重复之前没有时间采取行动。我们可能会交流发现,立即引发进一步的问题,然后我们可能会陷入另一个循环。然而,从长远来看,行动是使整个工作变得有价值的关键。

我们的组织中,每个新的数据科学项目都由几个这样的周期组成。交流结果往往会引发新的讨论,并为探索开辟新的问题和途径;如果我们的结论导致产生有利结果的行动?我们知道我们正在做正确的事情。

“没有数据**,你只是另一个有观点的人。”爱德华·戴明**

本文原文, 点击此处 。感谢 为数据科学方法整理原始步骤( 查看 GitHub 账号 )

一个数据科学家至少应该了解这么多 Python OOP

原文:https://towardsdatascience.com/a-data-scientist-should-know-at-least-this-much-python-oop-d63f37eaac4d?source=collection_archive---------11-----------------------

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

© s72677466/Adobe Stock

数据科学家处理数据,并使用建模技术来检测异常、进行财务预测、对医学图像进行分类等。这些数据虽然不会神奇地到达数据科学家的计算机;它通过管道与各种数据源连接,如实时金融系统、实时传感器数据、医疗成像设备等。这些管道由软件工程师创建,通常利用面向对象编程(OOP)的概念。数据科学家是最了解管道中流过什么的人,因此,他们将参与代码评审,与其他软件工程师交流,检查系统架构等。要成为任何团队的职能成员,一个人必须说团队的语言,在这种情况下,OOP。

此外,OOP 知识对数据科学工作本身也有帮助。例如,我们知道,数据科学家工作中最耗时的任务之一是数据清理,即删除对手头的数据科学任务无用的数据。坐在代码评审中,仔细检查系统架构,可以揭示数据流路径,在那里数据出来更干净。这可以为我们的数据科学家节省时间和精力。关于 OOP 是否应该成为数据科学家技能的一个组成部分,一直有一些争论。在其他地方,有人认为面向对象编程减少了编码开销,并为数据科学任务系统提供了健壮性【2】。

我认为数据科学家至少应该掌握 OOP 的主要概念:封装、继承、多态和对象关联。 Python OOP 是我个人比较想在面试时测试的技能。那么,我们该怎么做呢?就像一张图片胜过千言万语,一个程序胜过一百个问题。如果你在网上搜索 OOP 面试问题,酒店预订管理系统的类设计经常会出现。下面是我的测试:为一个小酒店的预订管理系统(RMS)设计类,在这个系统中,你使用了封装的概念,并且至少使用了一次继承、多态和对象关联的概念。这篇文章的其余部分描述了我们这个小练习的解决方案。

解决方案:希腊米克诺斯岛精品度假村预订管理系统的设计

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

© 2mmedia/Adobe Stock

为了让这成为一次有趣的学习经历,让我们为希腊米克诺斯岛一家出租别墅的精品度假村的客户经理设计课程。度假村出租四栋标准别墅和两栋贵宾别墅。贵宾别墅更大,配有私人游艇。所有别墅都配有私人助理。

我们将使用以下类对系统建模: villa、vipvilla、guest、reservation、resort。

数据封装

类必须保护最重要的资产,我们的数据。另一方面,他们必须通过使用 get/set 访问功能向外界公开某些数据来提高透明度和协同作用。这个面向对象的概念将渗透到我们例子中所有类的设计中,每个类都将被设计成包含数据,并且只包含与现实世界中的类特征相关的数据。

其中特权最少的一类是别墅,从这个意义上来说它封装了最少的数据(别墅的名字和别墅私人助理的名字)。它还提供了一些信息功能,包括私人助理的待命时间,别墅清洁和更换钥匙的日期。此外,它还具有打印留在每位新客人房间的礼物标签的功能:

Class guest 封装了客人的以下属性:名和姓、房间中的成人数量和儿童数量。它提供了对客人姓氏的访问功能和对客人对象的打印功能。

遗传和多态性

Class v ipVilla 提供了实现类继承和多态的例子。正如我们在下面看到的,该类继承自类 villa ,并且它重新定义了基类方法 setPersonalAssistant() 。哪个方法被调用,由 Python 使用方法解析顺序进行解析。

对象关联

度假胜地提供了这方面的例子。方法 setGuest()setReservation() 分别接受类型为 guestreservation 的对象。在封装方面,类 resort 封装了以下属性:包含(标准)别墅名称的列表、包含 VIP 别墅名称的列表、客人列表、预订列表和预订 ID 列表。

我们最后的类是 reservation ,它封装了预订的以下属性:预订别墅的名称、入住日期、退房日期、预订 ID、预订类的打印功能。

github 上有完整的代码和一个测试模块:https://github . com/theomitsa/python/blob/master/mykonos 2 . ipynb

数据科学家的视觉音频比较方法

原文:https://towardsdatascience.com/a-data-scientists-approach-to-visual-audio-comparison-fa15a5d3dcef?source=collection_archive---------5-----------------------

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

Beatles 1965 “Help” album art

在本文中,我演示了一些我创建的自定义方法,以直观地比较多个音频文件的频域。这些工具在许多情况下都很有用。对于这里的音乐爱好者来说,我们可以使用这些工具来检查同一首歌的不同版本之间的差异(我在本文中演示了这一点)。或者你可能在音频录制/编辑行业工作。这些可以用来查看您自己的主设备在过程的各个阶段是如何变化的,甚至可以可视化空间中麦克风放置的效果。

基本上,如果你有两个音频文件,这些工具可以让你看到它们之间的区别!

如果你有兴趣使用你在这里看到的一些代码,去看看这个项目的 github repo

项目和演示

我正在为这个项目使用 python,我使用一个名为 Librosa 的包和一个名为 FFT ( 快速傅立叶变换 ) 的过程从我的音频文件中提取频率数据。如果你有兴趣学习更多关于 libroso 的知识,以及它如何帮助你在 python 中处理音频,这里有一些很棒的文档。

一切都是围绕我为这个项目设计的两个自定义类构建的。一个处理音频处理,另一个帮助产生比较可视化。

这些工具可以比较任何两个音频文件。但是我认为它们真正的亮点在于展示了相对相似的文件之间的差异。正因为如此,我在甲壳虫乐队的歌曲《昨天的 T12》的一个原始版本和两个重制版本中演示了它们的使用。你可以听下面每个版本的录音。

1965 年原版:

2009 年重制:

2015 年复赛:

在继续阅读之前,我鼓励你听几秒钟,看看你是否能听出一些不同之处。你能具体定义这些差异吗?如果没有,希望这个分析能帮助你看到和理解音频是如何从一个版本变化到另一个版本的。

我们开始吧!

加载数据

将音频数据放入 Librosa 实际上非常简单,但是分析和频率转换可能需要一点代码。为了获得最佳的分析结果,我们需要知道每个文件的采样率,如果文件之间的采样率匹配也是最好的。这里,它们都是 44.1 kHz(相当标准的采样速率)。

我的AudioAnalyzer类负责将音频转换成 librosa 并将其转换到频域。同样,如果您有兴趣查看所有这些的完整代码,请查看我的项目库

Initialize the AudioAnalyzer instances

input_sr 代表输入采样率,每个文件设置为 44100。我们还将 fft_size 设置为 44100。FFT 基本上是一种获取时域数据并创建特定数量的来放置频率信息的方法。为了使 FFT 大小与采样速率相匹配,我们使每个频段正好为 1 Hz。如果你有兴趣阅读更多关于 FFT 的内容,请查看本页。

在幕后,我们加载音频,通过 FFT 处理,然后平均每个频段的幅度,以获得每个文件的单一频谱。

AudioAnalyzer 类已经可以为我们生成一个简单的声谱图。

plotting individual spectrums

从代码中可以看出,我已经指定了最小和最大频率。这只是为了让我们能够聚焦于一个特定的范围,在这个范围内,我们将能够更清楚地看到一切。此外,请注意,在下图中,每个谱图的 y 轴(振幅)都被缩放到 0 到 1 之间。当比较这些光谱图时,把所有的东西放在同一个尺度上是有帮助的。

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

从这些图表中,你可能会认为它们看起来很相似。那是因为他们有。像这样并排比较频域是相当困难的(这也是我写这篇文章的原因!).幸运的是,我有另一个类可以帮助我们更好地可视化和比较差异。

比较音频

我用另一个类SpectrumCompare处理两个音频文件之间的比较。这个类接受我们之前创建的两个AudioAnalyzer实例,并在后台运行一些计算来帮助我们比较它们。

让我们来看看。

Initializing SpectrumCompare class

就这么简单!我们现在可以在我们的orig_to_09实例上调用一些不同的绘图方法来比较原始的 1965 年版本和重新制作的 2009 年版本。

首先,让我们绘制这两个文件的光谱图。

Plot basic spectrum group

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

有了这个视觉,比较这两个版本的频谱就容易多了。

快速浏览一下,似乎重新灌制的版本在所有频率上都有更高的振幅。但是振幅的差异在所有范围内都是一致的吗?如果不是,更大的差异在哪里?幸运的是,SpectrumCompare可以帮助我们回答这些问题!

Plot full spectrum group with threshold

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

通过在plot_spectrum_group中传递一些其他的参数,我们可以看到振幅在不同的频率区间是如何变化的。这里的绿线显示缩放幅度的差异,红线是阈值。当绿线位于红线上方时,意味着重制版本在该频率仓中具有更高的振幅。当它在下面时(在这个特殊的例子中我们看不到),这意味着原始信号在那个频率上有更高的振幅。

注意:将AudioAnalyzer实例添加到SpectrumCompare初始化的顺序将决定红线的哪一侧意味着哪个频谱的幅度更大。中的第一个得到下半部分,第二个得到上半部分。有关更多信息,请参见项目报告。

我们可以证实我们最后的观察结果,即重新灌制的版本在标绘的光谱范围内往往具有更大的振幅。我们甚至可以看到许多峰值形成的位置,以及它们在大约 700 Hz 后开始变平的位置。

虽然这张图肯定让我们更直观地了解了这种比较,但我认为它可以简化一点,仍然给出相同的一般信息。为此,我们可以使用SpectrumCompare.plot_spectrum_heatmap方法。

Alternative heatmap plot

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

太好了!现在,这看起来更令人愉快,并且提供了所有相同的信息。我们的红色和绿色线条已被热图背景所取代。通过这张热图,我们可以看到有几个特别的热点。如果我们想让我们的分析更精确一点,我们可以使用frange参数来放大特定的范围。在这里,看起来大多数热点出现在 100-500 赫兹之间(对于许多男性声乐和器乐来说,这是一个相当丰富的范围)。

Heatmap from 20–500 Hz

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

在这个更近的范围内,我们可以看到,在 180 Hz 左右的某个地方,有一个非常重要的热点,表明重新录制的版本在该频率下具有更高的幅度。该音域对应于 F3 左右,这是一个舒适的男声音域,正好在吉他音域的中间。这也恰好是这首歌的关键(F 大调)。此外,随着频率越来越接近 500 Hz,我们可以看到这些热点开始消退。

因此,我们可以从这一视觉分析中得出一个结论,即重新灌制的版本似乎强调了从 180 Hz 到 500 Hz 的范围。这些热点是相对包含的,我们没有看到任何特别广泛的区域,其中振幅在重制中得到显著提升。因此,这些微妙的变化可能会反映出对主要声乐和器乐线条的更多强调。

简单介绍一下这个过程之后,让我们看看这些不同版本之间的其他一些比较。

接下来,我们来对比一下 1965 年的原版和 2015 年的复刻版。

Comparison of original to 2015 remaster

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

先说这个对比和上一个的相似之处。从频谱组图中,我们可以再次看到,在重新灌制版本中,所有标绘频率的振幅普遍增加。然而,如果我们观察 100–400Hz 范围,频率的增加似乎更广泛一些。也就是说,它不仅仅集中在几个峰值周围,而是在整个范围内更加分散。

为了证实这一点,我们可以看看我们的热图。果然,我们看到 180 Hz 范围以下有一些更宽的热点。此外,90 Hz 和 110 Hz 附近的热点在我看来似乎更亮一些。这似乎表明,除了强调中间音域,2015 年的这张专辑还增加了一些低音。

但要真正测试这一点,让我们比较两个重制版。

Comparison of 2009 and 2015 remasters

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

这些结果并不明显,这本身就是一个有趣的观察。基本上,当谈到改变情商时,这两位大师做出了很多相同的美学选择。

在我们的光谱组图中,我们的绿线主要围绕红线。由于 2015 年版本是我们的SpectrumCompare类的第二个输入,红线上方的绿色意味着 2015 年的 remaster 在这些频率下具有更高的振幅。有一些地方,它下降到阈值以下,这意味着 2009 年的版本有更大的幅度,但只有少数这样的情况。

特别有趣的是,我们可以在 100–200Hz 之间的 2015 版本中看到一些更大的振幅。正如我所怀疑的那样,2015 年的 remaster 似乎有一些低音增强。

通过查看我们的热图可以确认这一点。这里,我将范围限制在 20–200Hz,这样我们就可以看到这个较低范围的细节。虽然热点不是非常明显,但我们肯定可以在 180 Hz 以下看到它们。因此,我们可以确信,2015 年版确实有一些 2009 年版没有的低音增强。

TL;速度三角形定位法(dead reckoning)

如果你跳过了所有冗长的部分,只是浏览了一下图表,这就是结论。两个重新灌制的版本似乎都比 1965 年的原版声音更大,并且彼此相对相似。特别是,翻唱者强调了歌曲的主要声乐和乐器范围(180-500Hz 之间),2015 年的版本也增加了一些低音增强。

考虑到这一点,你可能想回去再听一遍这三个版本,看看你是否能听到这些特征。此外,看看你是否喜欢其中一个。我个人认为,2009 年的重新灌制很好地平衡了旋律的重点和整体清晰度。

同样,请随意查看我的 github 库,并在其他音频上尝试代码。

我希望你喜欢这个视频音频比较的简短探索。感谢阅读!

一位数据科学家从数独到 Kaggle 的旅程

原文:https://towardsdatascience.com/a-data-scientists-journey-from-sudoku-to-kaggle-120876b7fa33?source=collection_archive---------6-----------------------

与 Rohan Rao 的对话:数据科学家、Kaggle 特级大师、印度数独卫冕冠军

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

Rohan(4th from L)along with other winners of the Brands Brain International Challenge’2019

如果你把足够多的聪明人聚集在一个地方,好事就会发生。埃里克·赫斯曼

成为 H2O.ai 一员的额外好处之一是,你可以和这个星球上最聪明的人一起工作。在这里,你可以和有丰富经验和专业知识的人近距离接触。这里的一组专家是 Kaggle 特级大师 ,他们一次又一次地证明了自己在数据科学领域的实力和专业知识。

我有机会与我的同事 Rohan Rao 互动,他是一位 Kaggle 特级大师,也是 7 次全国数独冠军,我想将对话分享给社区。通过这次谈话,你将有机会了解他的旅程、灵感和成就。你还将了解是什么激励他去竞争,是什么让他保持动力。

奥汉·拉奥,在 Kaggle 上的名字是 Vopani,他身兼数职。除了是一名四重 Kaggle 特级大师 和 H2O.ai 的数据科学家之外,他还是一名出色的数独和解谜专家,被广泛认为是印度最好的数独解谜专家。

他是数独和拼图的 15 次全国冠军,是第一个排名世界前 10 的印度人,也是唯一一个在 2018 年和 2019 年亚洲锦标赛上登上领奖台(前 3 名)的印度人。他最近赢得了最新一届的全国数独锦标赛,还在今年 7 月曼谷举行的著名的 Brands Brain 国际挑战赛中获得了第二名

[## Rohan Rao -维基百科

Rohan Rao 是一个印度数独和解谜者,被广泛认为是印度最好的数独解谜者。他是 15 次…

en.wikipedia.org](https://en.wikipedia.org/wiki/Rohan_Rao)

以下是我与 Rohan 对话的摘录:

  • 你是第一个进入数独世界前 10 名的印度人?最初是什么激励你开始玩数独?

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

Another podium finish — Winner of National Sudoku Championship’2019

罗汉: 我从小就对逻辑、数字、模式、运动着迷。2005 年,在孟买的一场比赛前一天,我学会了解数独,最终我赢得了 U-16 组别的比赛。那是我的转折点,出于兴趣和爱好,我开始积极地追求它。

作为一个天生的问题解决者,我认为数独是一个需要解决的问题。通过消除和输入数字的逻辑路径最终得到解决方案,总是给我一种成就感和幸福感。

多年来的练习、准备、勤奋和努力使我赢得了各种国内和国际冠军。这让我有机会代表我的国家参加这项运动,并帮助我实现了成为第一个进入世界前 10 名和亚洲前 3 名的印度人的目标。

  • 你是如何对数据科学产生兴趣的?擅长解谜在其中有作用吗?

Rohan*:*完成应用统计学硕士学位后,我一直在寻找可以应用统计学解决现实问题的领域。我发现数据科学(DS)是一个令人兴奋的工作领域,它使用了大量的数学和统计学。幸运的是,我在 2013 年获得了我在一家机器学习(ML)咨询公司的第一份工作,在那里我开始了我的职业生涯。

数独和 ML 一开始是独立的兴趣和工作领域。虽然最初很难跟上两者,但逐渐发现了两者重叠的一些领域。

数独教会我思考、制定策略和计划解决一个给定的问题。它帮助我建立了精神上的耐力、速度,以及找到脱颖而出的解决方案的关键要素的能力。

另一方面,ML 教会了我如何巧妙地将理论见解和想法结合到实际的动手解决方案中。它让我体会到分析的重要性,多维度的洞察力,以及将解决方案优化到边缘的概念。

  • 成为 Kaggle 特级大师是一项令人印象深刻的壮举,需要极大的毅力和努力。你和 Kaggle 的幽会是如何开始的,是什么让你在你的大师之旅中一直保持动力?

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

Rohan’s Kaggle Profile

罗汉: 我很幸运在我工作的最初几年有一位伟大的导师,他让我接触了 Kaggle,并与我密切合作。然后,我的竞争精神、渴望和取得成功的动力占据了我的心头,这是我整个旅程中不变的动力。

成为 Kaggle 特级大师无疑是我职业生涯中的一个决定性时刻,这涉及到一些个人牺牲以及来自家人和朋友的大量支持。

  • 就数据科学而言,您最喜欢的资源是什么?你更喜欢哪种编程语言?

罗汉: Kaggle、Google、Stackoverflow 会是我的前三名,一点也不奇怪。根据问题陈述的不同,有许多有用的 Github 库和开源库/包都可以为构建解决方案增加价值。

我从 R 开始,它仍然是我首选的 DS 语言。随后我学习了 Python 和 Scala,过去几年我一直在使用 Scala 构建生产就绪的解决方案。

  • 很多人,尤其是新手,被 Kaggle 弄得不知所措?对于他们应该如何对待数据科学竞赛,有什么建议吗?

Rohan:ka ggle 已经变得浩如烟海,拥有大量有用的信息、代码、想法、讨论和解决方案。由于可用内容的庞大和深度,一开始可能会有点让人不知所措。

我的建议是开辟一条道路,根据目标,确定小任务,花时间完成它们。在最初阶段,最好完全专注于一项比赛。人们可以从探索内核开始,并参与比赛的讨论。接下来可以参加不同类型的比赛,一个接一个地获得最大的曝光率。

  • 作为 H2O.ai 的一名数据科学家,你的角色是什么?你在哪个具体领域工作?

Rohan:作为 H2O.ai 的 Kaggle 特级大师,我的职责主要是开发 H2O 的产品,如无人驾驶 ai,以帮助我们的客户为各种行业的广泛用例构建机器学习解决方案,包括金融科技、制造、零售、医疗保健和营销。我专攻推荐引擎、信用风险建模、数字支付生态系统和优化数字营销活动。

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

Makers gonna Make

挑战是双重的:为可扩展的机器学习解决方案建立一个行业无关的平台,以及通过与数据或模型或领域专业知识有关的各种方法实现智能,并能够将一切结合到端到端的打包产品中。

  • 你通过 Kaggle 学到的最好的东西有哪些是你在 H2O.ai 的专业工作中应用到的?

罗汉:ka ggle 上的问题种类繁多,各有各的处理数据、建立模型、优化解决方案的方式。对我来说,最重要的学习是理解数据集,然后设计数据科学解决方案框架的能力。

我自动化了机器学习工作流的许多组件,以提高我在 Kaggle 比赛中的效率。我现在使用其中的许多模块来增强 H2O.ai 的产品,如无人驾驶 AI 用于构建跨各种行业的机器学习解决方案,以便在更广泛的生态系统中可用。

  • 总的来说,最近有很多关于 ML 和 AI 的炒作。你对此有什么想法?

Rohan:理解人工智能正在跨行业取得巨大突破,并在围绕其构建的产品和应用中拥有光明的未来是至关重要的。同样重要的是要认识到,几乎所有的创新解决方案都极其难以开发,并且是经过多年研究开发出来的,而不仅仅是魔术。

随着时间的推移,它将逐渐成为我们生活中不可或缺的一部分,有望解决世界上的许多问题,它将变得更容易理解、构建和分享。

  • 你希望在 ML 的哪些特定领域或问题上运用你的专长?

Rohan:利用数据和 ML 预测全球范围内的犯罪是我最感兴趣的领域之一,它可以在世界上产生重大的积极影响。

  • 对刚刚开始或希望开始数据科学之旅的数据科学有志者有什么建议?

Rohan:DS 正在成为一把巨大的保护伞,拥有许多令人兴奋的工作和项目,涉及各种行业。许多有抱负的人会被信息的内容和深度所困扰。

我给其他人的建议是,确定一个适合他们技能的领域,然后朝着这个方向努力解决问题。在任何 ds 工作中亲自动手是必不可少的,因为只有这样,一个人才能理解个人资料的所有细节。作为全职贡献者,作为公司/团队的一部分参与 DS 项目也是更好的选择,因为这样可以暴露 DS 项目的整个工作流程。

这需要大量的努力、时间、耐心和牺牲。记住这一点将有助于你更好地准备快节奏的 DS 社区,并增加你成功的机会,同时享受这个过程中的工作和旅程。

成功从来都不容易。这往往是一条充满艰难险阻的艰难之路。耐心、毅力和实践是构成成功支柱的三大美德。大师不是一天出来的。相反,他们日复一日、年复一年地不懈努力来实现他们的目标。希望这次谈话也能启发和激励你朝着你渴望的人生目标努力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值