TowardsDataScience 博客中文翻译 2016~2018(一百四十七)
如何通过 5 个步骤开始使用指标
所以,你决定使用 KPI 和指标,用数据来发展你的创业公司。恭喜你!您将获得奖励!现在,艰难的工作从实际决定什么指标重要和创建数据驱动的文化开始。那么你从哪里开始呢?启动行动是来帮忙的。在本指南中,你会找到几个步骤,让你朝着正确的方向前进:
1。定义你的战略目标
因为你想为你的事业做每一件事,所以在有限的几个目标上做出决定可能是困难的。但是这确实是您需要开始的地方,因为您的度量应该是您的战略目标的延伸。与几个关键绩效指标相关联的几个目标将帮助您专注于重要的事情。
一旦你做出决定,将它们分成财务目标和客户价值目标。
让我们从财务开始考虑,这显然是最简单的。我假设你正在经营一家初创公司,这意味着你正在经营一个从零开始的组织,然后你的财务目标可能是在不消耗太多现金的情况下实现收入最大化。更多的钱进来,更少的钱出去!另一方面,如果你在经营一个更成熟的组织,你的目标可能是达到或增加盈利能力。如果你还没有开始赚钱,你的财务目标可能是未来与你的收入流紧密相连的东西,比如在保持低成本的同时最大化活跃用户的数量。
如果你经营订阅业务,你的目标可能是月经常性收入 (MRR)。然而,对于一个市场,你可能会关注商品总值 (GMV)。
现在你可以明白为什么尽早确定你的目标很重要了!
设定客户价值目标更加棘手。简单来说,把它们想象成你公司的愿景或使命。它可能是你如何帮助你的客户,解决问题,或者为他们创造价值。设定一个目标,如果达到这个目标,将保证客户需要你的产品,为你的企业创造长期稳定。例如,如果你提供一个 B2C 预算节省应用程序,你的目标可能是帮助你的用户节省更多的钱。尽量保持低数量的客户价值目标——两个是一个好数字,如果你是一家早期创业公司,不要超过三个。俗话说,不会走路就不要试着跑!
为了决定你的目标,确保你和你的核心团队(创始/执行团队和/或董事会)坐下来好好谈谈。如果你的目标被具体地写了下来,你们很有可能达成一致。这对于实现长期目标至关重要,因为整个团队需要朝着同一个方向努力。不要犹豫改变或更新你的目标,因为你可能会学到关于你的市场的新东西,并在你业务的不同生命周期阶段之间移动。适应性是关键。
The whole team needs to push in the same direction
2。使其可测量
你的下一个挑战是将你的目标转化为可衡量的 KPI。这些将是 2-3 个指标,推动你的企业朝着你的目标前进。通过这样做,你将能够具体地定义你的目标是什么,以及你每天都在努力提高什么样的绩效。让你的目标变得可衡量会让你更容易监控你的创业是否越来越接近你的目标。为了进一步分析你的 KPI,你需要将它们分解成更小的部分,也称为指标,这将使你更清楚地了解哪些杠杆可以提高你的 KPI。
例如,如果你设定了 MRR、GMV 或 MAU,财务目标几乎不需要转化为 KPI。因此,让我们深入探讨如何分解它。你如何做到这一点完全取决于你的商业模式,但你需要做的是把你的收入一点一点分开。例如,如果你是一家 SaaS 公司,向你的客户收取月订阅费,你的第一层指标将是付费客户的数量和月费用。看一看:
客户数量 *** 月费*=MRR(月经常性收入)*
你的下一层指标将是新的、保留的和流失的客户。我们是这样计算的:
新增 + 留存—流失 = 客户数量。
这种细分可以一直进行到你的漏斗的开始,网站访问者转化为试用用户,试用用户转化为新的付费客户。
要查看一个虚构的 SaaS 企业的示例,您可以查看下面链接的指标树。在不同的列中,您可以看到绝对数量、客户总数的百分比以及与前一个月相比的变化。通过做这个练习,团队可以很好地理解你的收入是如何形成的,以及所有的数字是如何与你的月绩效联系起来的。理解这些数据将使原始数据转化为结果变得更加容易。要阅读度量树的详细分解,请查看这篇文章。
为了控制成本和优化利润,您还可以增加收入成本比。这意味着你要从普通客户那里获得净收入,换句话说,就是你的客户终身价值** (LTV),然后把它除以你的不同成本组。例如,如果你为客户获取付费,你应该计算你的客户获取成本 (CAC)。然后你计算 LTV/CAC,得到一个比率,帮助你控制最重要的可变成本。该比率应该优选至少为 3 或 4。如果更低,通常意味着你还没有以最具成本效益的方式接近你的客户,或者你的客户没有被产品吸引,因此离开(流失)。**
要分解客户价值目标,你的挑战将是具体定义它们是什么。它需要一些创造力来得出比率和百分比,这将有助于你确定你是否实现了你的客户价值目标。
让我们再来看看预算节省应用程序的例子。他们的目标是帮助用户省钱。这个目标可以转化为一个 KPI,其形式为用户在第三个月与第一个月相比节省的量的比值。如果这个比例很高,证明这个 app 帮用户省了更多的钱。
为了分解这个 KPI,你可以看看有多少第一次下载应用程序的用户回来使用它(保留)以及使用频率。这两个指标可以作为您可以优化的指标,以帮助您将 KPI 推向正确的方向。
当你在创业时,你的团队会不断地添加新功能,纠正产品中的错误。这意味着,根据用户到达的时间,他们可能会看到不同的产品。此外,这意味着通过根据用户行为指标到达的时间对它们进行分组来研究它们是值得的。这是通过群组完成的,如下图所示。
您希望从群组表中看到的是,每一组新客户都比前一组客户表现得更好。例如,如果在第一周下载你的应用的客户的三周保留率是 29 %,你希望在第二周加入的客户的三周保留率更高。所以在上图中,你会希望数字沿着箭头的方向增加。
当看到你的指标与前一个月的差异时,奇迹真的会发生。然后,您可以将您的指标与您在一个月中采取的不同行动联系起来,看看这些行动对您的成长有何直接影响。反过来,这将启动你的反馈循环,你的结果将有助于你计划下个月的行动。一般来说,这都是为了进入你的客户的头脑,看看你的行动如何影响他们的决策和行为。不要害怕利用自己作为消费者的经验!
3。可视化
你一天刷两次牙,一周锻炼三次,每天吃 500 克青菜。跟踪您的指标也应该是一个健康的习惯,以保持对您公司健康状况的掌控。你不想花时间更新仪表板,所以投资于自动化仪表板,因为这样你就可以始终确保完成。
你可以在我的关于创业仪表板的文章中了解不同的仪表板软件。我想在这里提一个,那就是克利普弗利奥。他们提供了一个非常灵活和强大的工具,但引导友好的定价。
在您的仪表板中,您应该从两个角度显示您的 KPI 和指标:
- 每月或每周概览,您可以在其中查看历史发展。
- 滚动总数或平均值。例如,过去 7 天与之前 7 天的对比,或过去 30 天与之前 30 天的对比。这是为了让你对你的行动获得快速反馈——你不应该等到月底才衡量你行动的效果。
仪表板应该总是告诉你一个不需要任何人解释的故事,这意味着它需要简单明了。看到仪表板的人应该想,“哦,我看到我们添加的新功能对参与度有非常积极的影响,但它没有帮助我们降低流失率。嗯,我想知道我们还能做些什么来减少客户流失?”
要实现这一点,请使用条件格式来自动标记某些内容是否有所改进、减少或保持不变。你可以使用颜色,像箭头一样的符号,或者简短的单词。让它充满活力,但保持简单。
4。问为什么
你会意识到,可视化你的创业公司的表现的仪表板将回答很多问题,但它也会让你提出新的问题。这正是你想去的地方。
我建议你每周召开团队会议,检查你的表现和仪表盘。在这些会议中,每个团队成员都应负责展示他们的图表,并解释他们增加或减少的原因。这件事我怎么强调都不为过——无论何时你讨论你的仪表盘,都应该是关于为什么,为什么,为什么(你好,两岁的孩子!).这个想法是,你的仪表板将是你的公司健康状况的截图,这需要通过对业绩具体变化之外的原因进行更深入的特别分析来跟进。
当你知道你的表现是什么以及你为什么会有这样的表现时,你将学会什么样的行动是有效的,以及如何使用有效的杠杆。你将能控制自己的表现,并能实现快速增长。
5。教育
在您的组织中工作的每个人都应该了解您的仪表板中的 KPI 和指标的作用。你们都应该知道他们为什么在那里,以及他们如何提高你的创业公司的业绩。与每一位新员工坐下来,就如何使用该系统对他们进行培训,这应该是一个优先事项。为了简化这一部分,一起写一个文档,解释你所有的 KPI、指标和图表,这样你就有了一个参考。
最后,你的努力应该会导致一个创新和可持续发展的公司,在那里员工可以被激励,并更好地了解公司的立场。这使得团队成员更容易采取主动,更快地做出决策,而没有沉重的官僚作风。
如何开始使用 PySpark
PySpark 是使用 Spark 的 Python API,Spark 是运行大数据应用的并行分布式引擎。开始使用 PySpark 花了我几个小时——这是不应该的——因为我必须阅读大量的博客/文档来调试一些设置问题。这个博客旨在帮助您尽快开始使用 PySpark!
更新:我写了一篇关于 PySpark 以及如何使用一些托管服务(如 Databricks 和 EMR)和一些常见架构开始使用 Spark 的新博文。片名为 从熊猫到星火。有兴趣了解更多就去看看吧!
How do we analyze all the “big data” around us?
这些步骤适用于 Mac OS X(我运行的是 OS X 10.13 High Sierra)和 Python 3.6。
1.开始新的康达环境
你可以安装 Anaconda ,如果你已经有了它,使用conda create -n pyspark_env python=3启动一个新的conda环境。这将创建一个新的 conda 环境,使用最新版本的 Python 3,供我们尝试我们的 mini-PySpark 项目。
用source activate pyspark_env激活环境
2.安装 PySpark 包
你可以尝试使用pip来安装pyspark,但是我无法让pyspark集群正常启动。看了几个关于堆栈溢出的答案和官方文档,我发现了这个:
Spark 的 Python 打包并不打算取代所有其他用例。Spark 的 Python 打包版本适合与现有集群(无论是 Spark standalone、YARN 还是 Mesos)进行交互,但不包含设置您自己的独立 Spark 集群所需的工具。你可以从 Apache Spark 下载页面下载 Spark 的完整版本。
使用上面的链接,我继续下载了[spark-2.3.0-bin-hadoop2.7.tgz](https://www.apache.org/dyn/closer.lua/spark/spark-2.3.0/spark-2.3.0-bin-hadoop2.7.tgz),并将解压后的版本存储在我的主目录中。
3.安装 Java 8
一些说明建议使用 Java 8 或更高版本,我继续安装了 Java 10。当我试图在我的 Spark 集群中运行collect()或count()时,这实际上导致了如下几个错误:
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.: java.lang.IllegalArgumentException
我最初的猜测是,它必须与Py4J安装做一些事情,我试图重新安装了几次,没有任何帮助。没有多少人谈论这个错误,在阅读了几篇堆栈溢出的帖子后,我看到了这篇帖子,它讨论了 Spark 2.2.1 如何与 Java 9 及更高版本发生问题。推荐的解决方案是安装 Java 8。
所以,安装 Java 8 JDK,进入下一步。
4.“改变”。“bash_profile”变量设置
为了告诉 bash 如何找到 Spark 包和 Java SDK,在您的.bash_profile中添加以下几行(如果您使用 vim,您可以做vim ~/.bash_profile来编辑这个文件)
export JAVA_HOME=$(/usr/libexec/java_home)
export SPARK_HOME=~/spark-2.3.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
export PYSPARK_PYTHON=python3
这些命令告诉 bash 如何使用最近安装的 Java 和 Spark 包。运行source ~/.bash_profile获取该文件或打开新终端自动获取该文件。
5.启动 PySpark
运行pyspark命令,您将会看到:
PySpark welcome message on running pyspark
您可以使用命令行来运行 Spark 命令,但是这不是很方便。可以使用pip install jupyter notebook安装 jupyter 笔记本,运行jupyter notebook时可以访问笔记本中的 Spark 集群。您也可以使用vim或nano或您选择的任何其他代码编辑器将代码写入 python 文件,您可以从命令行运行这些文件。
6.用 PySpark 计算圆周率!
运行一个小而快速的程序来估算pi的值,看看你的火花簇在起作用!
import random
NUM_SAMPLES = 100000000
def inside(p):
x, y = random.random(), random.random()
return x*x + y*y < 1count = sc.parallelize(range(0, NUM_SAMPLES)).filter(inside).count()
pi = 4 * count / NUM_SAMPLES
print(“Pi is roughly”, pi)
7。接下来的步骤
PySpark 中有很多东西可以探索,例如弹性分布式数据集或 rdd(更新:现在 DataFrame API 是使用 Spark 的最佳方式,rdd 谈论“如何”完成任务,而数据帧谈论“什么”——这使得数据帧更快和优化)和 MLlib 。
2021 年 6 月更新:我写了一篇关于 PySpark 以及如何开始使用 Spark 的一些托管服务(如 Databricks 和 EMR)和一些常见架构的新博客。它的名字叫 从熊猫到星火。有兴趣了解更多就去看看吧!感谢您的阅读。
如何开始使用 word 2 vec——然后如何让它工作
一个 Gensim Word2Vec 教程
Photo by Hugo Ruiz on Unsplash
Word2Vec 背后的想法非常简单。我们假设一个词的意思可以通过它所结交的朋友来推断。这类似于一句谚语,“让我看看你的朋友,我就知道你是谁”。”
如果你有两个单词有非常相似的邻居(意思是:使用它的上下文大致相同),那么这些单词可能在意思上非常相似,或者至少是相关的。例如,单词震惊、惊骇、和惊讶通常用在类似的上下文中。
使用这个基本的假设,您可以使用 Word2Vec 来表现相似的概念,找到不相关的概念,计算两个单词之间的相似性,等等!
谈正事
在本教程中,您将学习如何使用 Word2Vec 的 Gensim 实现,并实际使用它。我早就听到了关于总体性能不佳的抱怨,但这真的是两件事的结合: (1)您的输入数据和 (2)您的参数设置。
请注意,Gensim 包中的训练算法实际上是由 Google 从最初的 Word2Vec 实现移植而来的,并扩展了附加功能。
导入和日志记录
首先,我们从导入开始,并建立日志记录:
# imports needed and logging
import gzip
import gensim
import logginglogging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)
资料组
我们的下一个任务是找到一个真正好的数据集。让 Word2Vec 真正为您工作的秘密是在相关领域拥有大量的文本数据。例如,如果你的目标是建立一个情感词典,那么使用来自医学领域甚至维基百科的数据集可能不是有效的。所以,明智地选择你的数据集。
在本教程中,我将使用来自我的一些博士论文的 OpinRank 数据集的数据。该数据集包含汽车和酒店的完整用户评论。我特意将所有的酒店评论收集到一个大文件中,压缩后大约 97 MB,解压缩后大约 229 MB。在本教程中,我们将使用压缩文件。该文件中的每一行都代表一篇酒店评论。
现在,让我们通过打印第一行来仔细看看下面的数据。
Printing the OpinRank Word2Vec dataset
您应该看到以下内容:
b"Oct 12 2009 \tNice trendy hotel location not too bad.\tI stayed in this hotel for one night. As this is a fairly new place some of the taxi drivers did not know where it was and/or did not want to drive there. Once I have eventually arrived at the hotel, I was very pleasantly surprised with the decor of the lobby/ground floor area. It was very stylish and modern. I found the reception's staff geeting me with 'Aloha' a bit out of place, but I guess they are briefed to say that to keep up the coroporate image.As I have a Starwood Preferred Guest member, I was given a small gift upon-check in. It was only a couple of fridge magnets in a gift box, but nevertheless a nice gesture.My room was nice and roomy, there are tea and coffee facilities in each room and you get two complimentary bottles of water plus some toiletries by 'bliss'.The location is not great. It is at the last metro stop and you then need to take a taxi, but if you are not planning on going to see the historic sites in Beijing, then you will be ok.I chose to have some breakfast in the hotel, which was really tasty and there was a good selection of dishes. There are a couple of computers to use in the communal area, as well as a pool table. There is also a small swimming pool and a gym area.I would definitely stay in this hotel again, but only if I did not plan to travel to central Beijing, as it can take a long time. The location is ok if you plan to do a lot of shopping, as there is a big shopping centre just few minutes away from the hotel and there are plenty of eating options around, including restaurants that serve a dog meat!\t\r\n"
你可以看到这是一篇很好的、有很多单词的全面综述,这正是我们想要的。在这个数据集中,我们有大约 255,000 个这样的评论。
为了避免混淆,Gensim 的 Word2Vec 教程说,您需要将一系列句子作为输入传递给 Word2Vec。然而,如果你有大量的数据,你实际上可以将整个评论作为一个句子(也就是说,一个大得多的文本)来传递,并且它不会产生太大的差异。最后,我们使用数据集的目的是获取给定目标词的所有相邻词。
将文件读入列表
现在我们已经有了数据集的一个峰值,我们可以将它读入一个列表,这样我们就可以将它传递给 Word2Vec 模型。请注意,在下面的代码中,我直接读取了压缩文件。我还使用gensim.utils.simple_preprocess (line)对评论进行了温和的预处理。这将进行一些基本的预处理,如标记化、小写等,并返回一个标记(单词)列表。该预处理方法的文档可在官方 Gensim 文档网站上找到。
read user reviews into a list
训练 Word2Vec 模型
训练模型相当简单。您只需实例化 Word2Vec 并传递我们在上一步中阅读的评论。因此,我们本质上传递了一个列表列表,其中主列表中的每个列表都包含一组来自用户评论的标记。Word2Vec 使用所有这些标记在内部创建词汇表。我所说的词汇是指一组独特的单词。
上面的代码应该开始训练过程。在幕后,我们实际上是在训练一个简单的只有一个隐藏层的神经网络。但是我们实际上不会在训练后使用神经网络。相反,目标是学习隐藏层的权重。这些权重本质上是我们要学习的单词向量。
在 Word2Vec OpinRank 数据集上的训练需要几分钟。所以请喝一杯茶,耐心等待。
有趣的部分——一些结果!
Photo by Victor Rodriguez on Unsplash
让我们开始有趣的事情吧!因为我们是在用户评论上训练的,所以在一些形容词上看到相似性会很好。第一个示例显示了对类似于单词“dirty”的单词的简单查找。这里我们需要做的就是调用most_similar函数,并提供单词‘dirty’作为正例。这将返回前 10 个相似的单词。
Words similar to ‘dirty’
哦,看起来不错。让我们看看更多。
类似客气:
Words similar to ‘polite’
类似法国:
Words similar to “France”
类似震惊:
Words similar to “shocked”
总的来说,结果实际上是有意义的。对于给定的查询单词,所有相关单词倾向于在相同的上下文中使用。
现在,您甚至可以使用 Word2Vec 通过调用similarity(...)函数并传入相关单词来计算词汇表中两个单词之间的相似度。
Compute similarity between two words in the vocabulary
下面,上面的三个代码片段使用两个指定单词的单词向量来计算它们之间的余弦相似度。从上面的分数来看,dirty与smelly高度相似而dirty与clean不相似是有道理的。如果你在两个相同的单词之间做相似性,分数将是 1.0,因为余弦相似性的范围可以从[-1 到 1],有时在[0,1]之间,这取决于它是如何计算的,以及你的向量是否有正值和负值。你可以阅读更多关于余弦相似性评分这里。
你会在我的 Jupyter 笔记本中找到更多关于如何使用 Word2Vec 的例子。
仔细查看参数设置
Photo by Emiliano Vittoriosi on Unsplash
为了更早地训练模型,我们必须设置一些参数。现在,让我们试着理解其中一些是什么意思。作为参考,这是我们用来训练模型的命令。
model = gensim.models.Word2Vec (documents, size=150, window=10, min_count=2, workers=10, iter=10)
size
表示每个标记或单词的密集向量的大小。如果您的数据非常有限,那么 size 应该是一个更小的值。如果你有大量的数据,最好尝试不同的大小。对于相似性查找,100–150 的值对我来说很合适。
window
目标单词与其相邻单词之间的最大距离。如果您的邻居的位置大于左侧或右侧的最大窗口宽度,则一些邻居不被认为与目标单词相关。理论上,一个更小的窗口应该给你更相关的术语。如果你有大量的数据,那么窗口的大小不应该有太大的影响,只要它不会太窄或太宽。如果您对此不太确定,就使用默认值。
min_count
单词的最小频率计数。该模型将忽略不满足min_count的单词。极不常用的单词通常不重要,所以最好把它们去掉。除非数据集非常小,否则这不会真正影响模型。
workers
后台要用多少线程?
iter
要训练多少个纪元?对于中小型数据集,我通常使用 10 或更多。
什么时候应该使用 Word2Vec?
Word2Vec 有很多应用场景。想象一下,如果你需要建立一个情感词典。在大量用户评论上训练 Word2Vec 模型有助于你实现这一点。你有一个不仅仅是情感的词汇,而且是词汇中大多数单词的词汇。
除了原始的非结构化文本数据,您还可以使用 Word2Vec 来处理更多的结构化数据。例如,如果您有一百万个 StackOverflow 问题和答案的标签,您可以找到相关的标签,并推荐这些标签进行探索。您可以通过将每组共现的标签视为一个“句子”并根据该数据训练一个 Word2Vec 模型来做到这一点。当然,你仍然需要大量的例子来使它工作。
源代码
要使用本教程的 Jupyter 笔记本,你可以去我的 GitHub repo 并按照说明如何让笔记本在本地运行。我计划上传预先训练的向量,可用于您自己的工作。
卡维塔·加内桑是《人工智能的商业案例:人工智能战略领导者指南,最佳实践&现实世界应用 的作者。要了解更多关于卡维塔的信息,请访问www.kavita-ganesan.com。
如何充分利用数据科学
最后更新于 2022 年 5 月
找到您需要的内容,并在您的学习之旅中前进
About us — Photo by Leone Venter
你好。
如果你的目标是…
- 了解数据科学、机器学习、编程或人工智能
- 转行成为数据科学家、机器学习工程师或相关职位
- 及时了解该领域最重要的发展和对话
…那么走向数据科学就是你的正确选择。我们是任何想要扩展数据科学和机器学习知识的人的首选目的地。我们也是一个欢迎和支持的社区,将学习者和专业人士聚集在一起。
我们的网站包含数千篇文章、教程和其他资源,因此我们准备了这个简短的路线图来帮助您找到方向。准备好了吗?我们走吧!
找到你需要的信息
我们最好的内容总是一次点击(或两次)就能看到
我们每天在 TDS 上发布几十篇文章,但我们希望让您能够轻松找到与您当前需求最相关的文章。
编辑推荐的是最近引起我们注意的值得关注的文章。它们包括教程、观点文章和原创研究——它们都值得你花费时间。如果你不确定下一步该读什么,这将是你最好的选择。
我们的专栏是精选的集合,专注于广阔的数据科学世界中的特定兴趣和工作流——从准备你的第一份工作到使用人工智能带来社会变革。
标签页显示特定区域内最新的帖子。你可以选择从非常宽泛的(像 Python 或机器学习)一直到非常专业的(特征工程),有人吗?).
获取我们的每周简讯
养成阅读习惯从未如此简单
对于每周一次的顶级数据科学阅读,注册我们每周一期的时事通讯,这是我们每周四发送的变量。
我们专注于包含真实世界用例、前沿研究和技术以及基于经验的职业和商业主题的教程。我们的目标是帮助您了解数据科学、机器学习和人工智能领域的最新理念和创新。
成为中等会员
无限好奇?获得无限制访问权限。
通过成为 Medium 会员,你可以无限制地访问 TDS 的全部档案(以及 Medium 上的所有其他帖子),并确保你的学习永不停止。
同样重要的是:会员资格直接支持你最喜欢的 TDS 贡献者的写作,并鼓励他们分享新文章。
与我们的社区分享您的作品
你的想法、故事和项目值得更广泛的受众
写下你的数据科学和 ML 工作是更深入理解它的最好方法之一。这也是一个展示你成长的机会,也是一个和其他与你有共同兴趣的专业人士交流的机会。它可以激励你去发现新的想法和技术,并帮助你扩大你的人际网络。如果你对写数据科学感兴趣,你可以在这里找到更多信息。
如何获得正确的数据?试着要求它。
为什么数据科学中最重要的技能可能不是技术性的
虽然数据科学的技术技能——想想用梯度推进机器建模——得到了最多的关注,但其他同样重要的通用问题解决能力可能会被忽视。熟练地提出正确的问题、坚持不懈和利用多种资源对于数据科学项目的成功至关重要,但当人们问及成为数据科学家需要什么时,编码能力往往退居其次。
最近,我在从事一个数据科学促进良好发展的项目时,想起了这些非技术技能的重要性。这个项目目前在 Kaggle 上运行,它包括确定纽约市的学校,这些学校将从鼓励弱势学生参加 T2 高中入学考试(SHSAT)的项目中受益最大。这项任务带有一个小数据集,包括 2016 年的测试结果,但组织者鼓励使用任何公开可用的数据。
Data Science is for more than just getting people to click on ads (Get Started Here)
知道数据科学项目的成功与数据的质量和数量成正比(T4),我开始寻找更新的测试结果。毫不奇怪,有了现在唾手可得的大量资源,我最终获得了成功,并且在这个过程中,我学到了一些关于数据科学所必需的“其他”技能的经验,我在下面列出了这些经验。
第一步:问正确的问题/有正确的目标
资源的广泛可用性可能是一件好事,也可能是一件坏事:有这么多选择,有时可能很难找到一个起点(当人们想学习数据科学时,我经常看到这种现象)。正确的问题或目标可以帮助你缩小选择范围。
如果我问“有没有我可以使用的纽约市的数据?”我可能会被各种可能性淹没,就像“想学习 Python”的人面对令人眼花缭乱的资源一样(更好的目标是“我想为 x 学习 Python ,因为这将限制选择)。
如果你在最初的目标上没有成功,你总是可以撒更大的网或者改变问题/目标。此外,有时你可以用一组与你想象中不同的数据来回答你最初的问题,或者你可能会发现有一个更好的问题要问。记住这一点,我带着一个问题开始了我的搜索:我能找到 SHSAT 的最新结果吗?
第二步:探索资源
对于我的唯一一个重点问题,最好的起点是纽约市开放数据门户网站。像许多大城市一样,纽约市有大量的数据可供免费下载并在您的项目中使用。开放数据门户是探索问题和利用数据科学产生影响的绝佳起点。
不幸的是,尽管纽约市的数据很广泛,但没有一个涵盖 SHSAT。所以我扩大了搜索范围——这意味着我在谷歌搜索结果列表中走得更远——看到了《T4 时报》的一篇文章,这篇文章准确地分析了我想要的数据(带有一些很棒的信息图表)!
One of several interactive maps in the article
第三步:伸出手
很明显,如果 NYT 能够得到的话,这些数据是可以公开获取的!因为我已经检查了开放数据门户,所以我决定尝试一个更直接的途径来联系作者。我以前用这种方法取得过成功——我曾经通过给作者发电子邮件获得了一本绝版的免费大学教材——现在很容易找到社交媒体或专业联系地址。只要你的请求是有礼貌的(一两句赞美不会有什么坏处),大多数作者都会尽可能地乐意帮忙。
然而,在这种情况下,我的直接方法失败了,因为作者在我使用的任何渠道上都没有回应。老实说,我不怪她:作为一个作家,处理所有的请求可能很难,我更希望她专注于写更多的文章,而不是回复每一条评论!
步骤 4:坚持不懈
作为一名数据科学家,最重要的一点是关注细节的能力。有价值的信息可能隐藏在意想不到的地方(如文件名),在这种情况下,阅读信息图下的小字可以发现来源:纽约市教育局,我已经通过开放数据门户搜索过了!
Always read the details
虽然我已经尝试过这个来源,但我还是回到了门户网站,并决定从联系人页面发出一个请求。我提交了一张包含我想要的具体数据的票,并收到了一个稍微令人沮丧的通知,可能需要 2 周才能听到回复。幸运的是,这似乎是一个悲观的高估,两天之内我就收到了回复——来自一个真实的人类!我所要求的数据是可用的。同一天,的全部数据出现在纽约市数据门户网站上,供全世界免费使用,以造福纽约市的学生。公开数据没有任何障碍,有人只需要问一下就行了!
第五步:向前分享
虽然这个项目在技术上是 Kaggle 上的一个竞赛,但我不可能对这些数据的可用性保密。我立即建立了一个讨论线程,并分享了数据源的链接。几个小时内,其他数据科学家就开始使用这些数据进行自己的分析,然后分享他们的发现。这就是数据科学社区的伟大之处:它不是关于竞争,而是关于相互学习。
一个人只能有这么多的经验,但一个群体的集体知识可以是巨大的。这意味着,当你发现一些有趣的事情时,不要把它藏在心里,而是与他人分享,这样其他人也可以学习!从 Kaggle 上的其他数据科学家那里获得了这么多,能够回馈一点感觉很好。
这个小例子说明了几个关键点:第一,问一问无妨!我以前写过这方面的文章,但当你向某人寻求帮助时(只要要求合理),他们最糟糕的回答是不。第二,利用多种资源并坚持不懈的能力会比你职业生涯中的任何特定技能都更能让你进步。我采取的所有步骤都不涉及任何编码,但是如果不完成这些步骤,我就无法获得进行分析所需的数据!最后,不要害怕向人们寻求帮助,或者使用我们现在可以利用的任何伟大的资源。
一如既往,我欢迎评论、建设性的批评和讨论。可以在推特上找到我
如何走进数据科学?
面向有抱负的数据科学家的终极问答,附有严肃的指南
那么…你想成为一名数据科学家?酷毙了。你是一个自我激励的人,对数据科学和通过解决复杂问题为公司带来价值充满热情。太好了。但是你对数据科学毫无经验,也不知道如何在这个领域入门。**我明白了。我去过那里,我绝对能感受到你。**这就是为什么这篇文章献给你——充满热情和抱负的数据科学家——来回答大多数人面临的最常见的问题和挑战。
如果数据是“新的石油”,那么数据科学家的职能就像一个炼油厂,将数据转化为既能省钱又能产生资本的见解
——伊娃·肖特
下面所有的问题都不是我创造的,而是你们——充满活力的数据科学社区。非常感谢大家对我之前的 LinkedIn 帖子的支持,包括我从电子邮件和其他渠道收到的问题!请注意,以下问题没有按顺序排列,因此请随意跳到您认为合适的问题部分。
我希望通过在这篇文章中分享我的经验,能够对如何从事数据科学职业有所启发,并给你一些一般性的指导,希望能让你的学习之旅更加愉快。我们开始吧!
数据科学技能缺口的当前趋势是什么?
国际数据公司(IDC)预测,2020 年全球大数据和商业分析收入将超过 2100 亿美元。
根据 2018 年 8 月美国 LinkedIn 劳动力报告,2015 年全国有数据科学技能的人过剩。三年后,随着越来越多的公司面临拥有数据科学技能的人才短缺以及大数据被越来越多地用于产生见解和做出决策,趋势发生了巨大的变化。
从经济学上讲,这完全是供求关系。
好消息是:“桌子”现在被翻转了。坏消息是:随着数据科学领域工作机会的增加,许多有抱负的数据科学家仍然面临着入门的挑战,因为他们缺乏与当前就业市场要求相关的数据科学技能差距。
在接下来的部分中,您将看到如何提高数据科学技能来缩小“差距”,从其他候选人中脱颖而出,并最终增加获得理想工作的机会。
问题与答案
1.需要什么样的技能,如何掩盖这些技能?
我会非常诚实地告诉你。学习数据科学中的所有技能几乎是不可能的,因为范围太广了。总会有一些技能(技术/非技术)是数据科学家不知道或没有学到的,因为不同的业务需要不同的技能组合。
总的来说,根据我的经验和向其他数据科学家的学习,我认为要成为一名数据科学家,必须掌握一些核心技能。
**技术技能。**数学与统计、编程和商业知识。尽管无论使用何种语言,我们都精通编程,但作为数据科学家,我们应该能够用商业语言向利益相关者解释我们的模型结果,并得到数学和统计数据的支持。
要学习数学和统计学(或更全面的数据科学资源),请查看由 Randy Lao 创建的他的网站。 Randy 一直在帮助有抱负的数据科学家,他在网站上的知识库真是一座金矿!
我仍然记得当我第一次开始研究数据科学时,我读了这本教科书— 统计学习介绍—以及 R 中的应用。我向初学者强烈推荐这本教科书,因为这本书侧重于统计建模和机器学习的基本概念,并附有详细而直观的解释。如果你是一个数学铁杆,也许你会更喜欢这本书:统计学习的要素。
学习编程技巧,特别是对于没有经验的初学者,我建议专注于学习一门语言(我个人更喜欢 Python!😊)因为如果需要的话,这些概念也适用于其他语言,而且 Python 更容易学习。Python 或 R 的重要性和用法一直是数据科学中争论的话题。就我个人而言,我认为重点应该是你如何帮助企业解决问题,不管使用何种语言。
最后,我再怎么强调对商业知识的理解也是极其重要的,因为我已经在中收录了我的一篇文章(你可以在这里查阅)。
**软技能。**其实软技能比硬技能更重要。惊讶吗?我希望不会。
LinkedIn 调查了 2000 名商业领袖,他们最希望看到自己的员工在 2018 年具备的软技能是:领导力、沟通、协作和时间管理。我真的相信这些软技能在数据科学家的日常工作中起着至关重要的作用。特别是,我学到了沟通技巧的重要性,你可以在这里阅读。
2.当有大量的训练营和在线课程时,如何选择合适的呢?
随着围绕人工智能和数据科学的大肆宣传以及许多人加入这一潮流,许多 MOOCs、训练营、在线课程、研讨会(免费/付费)如雨后春笋般涌现,希望不会“错失良机”。
外面有很多资源。足智多谋。
所以问题来了:如何选择适合自己的学习资料?
我筛选和选择适合我的在线课程/研讨会的方法:
- 要明白没有一门最好的课程可以涵盖你需要的所有材料。有些课程在某些领域重叠,不值得花钱购买不同的课程,而是重复大部分教材。
- 首先要知道你需要学习什么。永远不要仅仅因为花哨和吸引人的标题就一头扎进课程。还记得前面提到的技术技巧吗?在网上查看数据科学家的职位描述,你会注意到一些公司需要的通用技能。现在你已经知道了需要的技能和你缺少的技能。太棒了。去搜索可以帮助你提高知识(理论和实践)的课程。
- 在网上搜索不同平台提供的最佳课程。一旦你列出了几门适合你的课程,看看他们各自的评价(非常重要!)被别人在你掏出钱包报名之前。另一方面, Coursera 、 Udemy 、 Lynda 、 Codecademy 、 DataCamp 、 Dataquest 等等也有很多免费课程。我是不是也提到了 YouTube ?是的,你明白了。
- **提示:**一些平台可能会提供财政援助来补贴你的课程费用(Coursera 等。).试试看!
- 一些我个人最喜欢的课程对我帮助很大:
- Coursera 联合创始人吴恩达教授的机器学习 。
- 何塞·波尔蒂利亚教授的数据科学与机器学习训练营Python。
- 深度学习 A-Z:基里尔·叶列缅科和哈德琳·德·庞特维斯教授的动手操作人工神经网络 。
- Python 对于数据科学的必备培训 莉莲皮尔森教授。
- 终极实践 Hadoop —驯服您的大数据! 由弗兰克·凯恩教授。
3.向开源学习足以成为一名数据科学家吗?
我要说的是,从开源学习足以让你开始学习数据科学,除此之外的任何事情都是为了进一步发展你作为数据科学家的职业生涯,这也取决于业务需求。
4.一个初学者(来自完全不同的背景)应该从阅读材料开始了解基础知识吗?你会推荐什么书?
学习没有固定的道路,因为条条大路通罗马。阅读材料绝对是理解基本面的一个很好的开始,我也是这样做的!
只是要注意不要试图去阅读和记忆数学和算法的本质。因为很有可能,当涉及到编码时,如果没有真正将概念应用到实际问题中,你会忘记一切。
**只要知道和理解到足以让自己开始,并进入下一步。**实用一点。不要仅仅因为完美主义在不知不觉中成为拖延和不前进的最佳理由,就试图在知道一切方面做到完美。
下面是一些我建议用来理解 Python、机器学习和深度学习基础的书籍(希望有所帮助!):
- 学习 Python
- 用于数据分析的 Python
- 统计学习简介
- 绝对初学者的机器学习
- Python 机器学习
- Python 数据科学手册
- Python 机器学习简介
- 用 Python 进行深度学习
- 使用 Keras 进行深度学习
5.如何在理解业务问题(制定解决方案)和发展技术技能(编码、核心数学知识等)之间取得平衡。)?
在了解业务问题和制定解决方案之前,我从发展我的技术技能开始。
商业问题给你什么,为什么。要解决一个商业问题,首先要知道如何解决问题。方法来自于技术技能。同样,方法取决于情况,我的建议主要基于个人经验。
6.我们如何克服开始数据科学家职业生涯的挑战?
许多有抱负的数据科学家(包括我)面临的主要挑战之一是数据科学是信息的海洋。我们很容易因为被来自不同方向的建议和资源(在线课程、研讨会、网络研讨会、聚会等等)淹没而失去注意力。保持专注。知道你拥有什么,你需要什么,然后全力以赴。
在我的数据科学之旅中,挑战数不胜数,但也正是这些挑战塑造了今天的我。我将尽力解释我面临的主要挑战以及如何克服这些挑战:
- 刚开始的时候,我对这么多的资源感到困惑。我艰难地过滤掉了噪音。收听播客,观看数据科学家举办的网络研讨会,阅读大量关于如何在该领域发展的数据科学文章,尝试各种在线课程,参与 LinkedIn 上的数据科学社区,并向他们学习。最后,我只关注我在这篇文章中分享的有用资源。
- 有一段时间我几乎要放弃了。当学习曲线过于陡峭,我开始怀疑自己时,放弃的想法出现在我的脑海中。我真的有能力这样做吗?我真的在追求正确的道路吗?激情和耐心把我重新引回,让我继续前行。日复一日,继续努力,继续忙碌。
你的工作将占据你生活的很大一部分,而真正满足的唯一方式就是做你认为伟大的工作。做伟大工作的唯一方法是热爱你的工作。
—史蒂夫·乔布斯
- 获得一份数据科学家的工作( 或类似的工作范围但不同的头衔 **)。**我希望我能早点读到这些由 Favio Vázquez — 如何找到一份数据科学家的工作?和获得数据科学家工作的两面性。由于就业市场竞争激烈,找工作对我来说并不容易。我提交了大量的求职简历,但毫无结果。我正在深思,一定是出了什么问题。我改进了我的方法,开始建立关系网:参加聚会和研讨会,在网上分享我的学习经验,在招聘会上接触未来的雇主,以更系统的方式分享会议,在提交简历后跟进等等。事情开始改变,机会开始敲我的门。
7.如何把我的工作经历放在简历里,这样我才会被录用,我的经历才会被计算在内?
我相信这里有一个误解——你不会仅仅因为简历中的经历而被录用。事实上,你的简历是获得你下一阶段申请——面试——的第一张入场券的方法之一。
因此,学会如何在简历中写工作经历对获得入场券至关重要。研究表明,一般招聘人员会花六秒钟浏览简历的 ,然后决定应聘者是否适合这个职位。换句话说,要通过简历测试,你的简历只有 6 秒钟的时间给未来的雇主留下好印象。就我个人而言,我参考了以下资源来润色我的简历:
- 跳马
- 顶部简历
- 优化指南 (个人喜好!)
- 简历专家给出职业建议
- 如何通过 6 秒简历测试
- 如何为数据科学职位量身定制你的学术简历
- 招聘经理在数据科学家的简历中寻找什么?
- 你简历上需要的 14 件事,让你找到理想的工作
8.什么样的投资组合可以帮助我们在数据科学或机器学习领域获得第一份工作?
在我关于媒体的第一篇文章中,我提到了建立投资组合的重要性。没有好的作品集,有一份精心打磨的简历不足以让你获得面试机会。
在第一眼看完你的简历后,未来的雇主想要更多地了解你的背景,这就是你的简历出现的地方。虽然你可能想知道如何从零开始建立一个文件夹,从记录你的学习旅程开始。通过社交媒体平台(LinkedIn、Medium、脸书、Instagram、个人博客——没关系)分享你的学习经验、错误、收获——技术或非技术。
**对着录像机说话有意思?**然后开始制作视频(采访其他有抱负的/公认的数据科学家)并在 YouTube 上分享。擅长写作?然后开始在不同的平台上写你热衷的话题。如果你对视觉和写作不感兴趣,那么联系其他人,和他们一起做播客。
我的观点是:互联网带来了大量的机会来建立你的投资组合,获得关注,或者潜在的吸引你未来雇主的注意。
我做过的最好的决定之一是在 LinkedIn 上与数据科学社区接触,并在 T2 媒体上记录我的学习历程。在 LinkedIn 上,在这样一个有益的共享学习环境中,我从紧密团结的数据科学社区中学到了最多。
渐渐的,我学会了(还在学!)如何用我不同来源的经历在 LinkedIn 上建立我的投资组合。一路上,我从不同的招聘人员那里得到了关于工作机会的信息,我甚至有机会喝了点咖啡,和他们中的一些人聊了会儿天。
现在,我非常兴奋地分享我所学到的东西,并为社区做出贡献。所以我给出了一些有用的指导,教你如何用一些严肃的技巧建立你的 LinkedIn 个人资料!
请在下面的评论中留下你的电子邮件地址,我会直接发送到你的收件箱。😄
—更多资源—
在这一点上,你可能想知道我是如何在这篇文章中同时分享这么多资源的。嗯,我的显而易见的秘密:把我觉得有用的网站和文章标上书签,并不时地参考它们。
这被证明是非常有帮助的,当我需要一些参考和修改时,这对我很有用。我当然可以分享书签网站的完整列表,但对于这篇文章来说太长了(我想可能在另一篇文章中)。
尽管如此,我还是会列出一些有用的资源:
- 走向数据科学 , Quora , DZone , KDnuggets ,Analytics vid hya, DataTau , fast.ai
- 网络研讨会 — 数据科学办公时间、数据科学交流、数据科学的人类(HoDS)
- 用数据讲故事:商业专家数据可视化指南
- 闯入数据的坏蛋指南
- 10 必须具备数据科学技能
- 我的数据科学&机器学习,初学者的学习路径
- 机器学习掌握度
- 24 个终极数据科学项目提升您的知识和技能
追随鼓舞人心的数据科学家和专业人士
LinkedIn 上的数据科学社区非常棒,我强烈建议您关注下面提到的鼓舞人心的数据科学家和专业人士:
-
凯尔·麦基乌
-
法维奥·巴斯克斯
-
Vin Vashishta
-
埃里克·韦伯
-
莎拉·诺拉维
-
凯特·斯特拉奇尼
-
塔里·辛格
-
伊马德·穆罕默德·汗
-
安德烈·布尔科夫
最后的想法
你一路赶到这里?!感谢阅读。
这是迄今为止最长的帖子,还有很多我渴望与你分享的(也许在下一篇帖子里,谁知道呢?😊).
不要让任何人催促你完成他们的时间表
希望我的分享已经为你解答了燃眉之急。每当您在数据科学之旅中遇到任何障碍时,请记住,您并不孤单,作为社区的一部分,我们都在这里提供帮助。只要给我打电话,我会非常乐意帮忙的!
现在你已经有了问题的答案(如果你有其他问题,请在下面留下你的评论),是时候采取大规模行动来实现你作为一名有抱负的数据科学家的目标了。没有什么行动是微不足道的。一步一步向前。当你濒临放弃时,坚持是关键。
我知道这是一篇很长的帖子,所以请在评论中让我知道哪些部分对你最有用。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
—注释—
如果你在寻找一些有用的指南,关于如何用一些严肃的技巧建立你的 LinkedIn 个人资料,在下面的评论中留下你的电子邮件地址,我会直接发送到你的收件箱。
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](www.admondlee.com/)
如何增长数据
Image by Staleybk from Pixabay
数字化和人工智能这两股浪潮已经高涨到任何企业都无法忽视的地步。它已经从幕后成为价值和创新的驱动力。难怪最近一期的《经济学人》宣称“世界上最有价值的资源不再是石油,而是数据”。
由于现在几乎每一项人类活动都会产生数字痕迹,优势在于那些能够利用数据中的洞察力的人。顾客什么时候会购买?最好的产品组合是什么?什么时候应该做保养?什么使我的员工最有效率?
令人惊讶的是,驱动这些见解的算法并不是秘方。尽管定价很高,但使用它们的数据科学家也不感兴趣。价值在于数据本身,以及应用于您的业务时的潜力。
尽管使用数据来降低成本或优化流程会带来很多好处,但这还不是全部。大量的数据创造了未来的可能性和竞争优势。例如,通过交付联网汽车,特斯拉获得了对驾驶模式的独特和巨大的洞察力:对抗竞争对手的壁垒,以及在未来创新中可以利用的丰富资源。
通过运营当前业务来创造这种未来潜力的能力是数据驱动的最终定义:当价值而不仅仅是决策由数据驱动时。
这使得数据访问成为每个人的当务之急。增加数据储备的计划应该在每一项企业战略中占据首要位置。但是你怎样才能让它成为现实呢?
不断增长的数据投资有四个层次:购买、集成、工具和设计。真正的数据驱动型企业参与所有四个层面。
Four levels of growing data investment
购买数据
获得洞察力的最快方法之一是购买数据,这对许多企业来说并不新鲜。由于 Acxiom、LexisNexis 或 Hoovers 等信息公司,购买数据已经成为消费者和竞争情报领域几十年的行业惯例。金融数据、天气和地理数据都是许多企业的主要需求。 通过获取第三方数据,您可以更深入地了解现有运营,并改善决策支持。然而,可供出售的数据往往局限于大规模数据集,主要是环境性质的数据集。购买数据可以推动业务发展,但你无法通过购买数据来实现竞争优势。
整合您的数据
甚至在大数据时代之前,公司就产生了大量信息,这些信息可以用来推动增长和创造更多价值。整合这些信息的潜力很大。组合数据集往往会对数据的功效产生倍增效应,而不仅仅是累加效应。
公司的每个系统都在不断地创造数据。然而,数据孤岛是一个系统性问题,严重限制了这些数据的有用性。孤岛来自软件应用程序和流程,这些应用程序和流程是在数据的价值未被真正认识到的时代构建的,在这个时代,资源约束更加严格。面向流程的一个自然副作用是导致业务功能之间的语义差异,并增加了进一步的复杂性:遇到诸如“客户”等概念的多种不同定义并不罕见。
工具
当你真正专注于使用数据来推动决策和价值时,下一步就是使用仪器。插装是将数据生成嵌入到过程和系统中的行为,它报告它们随时间的状态。多亏了运筹学领域,这个概念并不新奇,但是随着数字化程度的提高,仪器化的范围越来越大,成本也越来越低。
举一个软件方面的例子:软件检测的范围曾经是记录错误,以便给支持技术人员诊断的希望。现在,记录用户的每一次交互,鼠标的每一次移动都是可行的,我们可以问的问题进一步延伸:不仅仅是“为什么会出错”,而是“这个产品使用起来有多容易?”再举一个零售业的例子,无线电信标现在可以监控商店的客流量,从而评估实体布局的有效性。
仪器和数据科学的结合使我们能够收集细节并解决问题,这在以前需要昂贵的人工干预。
面向数据的设计
任何在上述三个层面深度投入的组织都已经处于强大的领先地位,只是在实现数据的潜力方面还有一步。如果您真正理解数据的力量,那么围绕数据的积累和利用来设计活动,将数据构建为战略资产。
达到这一点就是开始对谷歌、亚马逊和脸书这些科技巨头有了答案。作为以数据为基础的公司,它们的灵活性、数据积累和财务实力使它们能够在新市场中令人信服地发起挑战。
为数据而设计的业务的本质是,产品或服务的交付产生进一步增强服务的数据,并为下一步的创新和扩展创建平台。客户不是孤立的接受者,而是生态系统的一部分,他们的参与使产品对每个人都更好。与前三个阶段的带外应用相比,以客户生成的数据为基础,分析和人工智能被用作产品的一部分。
数据不是一种可替代的商品,因此它的积累给竞争对手设置了一个令人望而生畏的障碍:也许正如《经济学人》所观察到的,一种新的反垄断方法将在未来变得必要。
如果你喜欢这个并想听更多,请加入我的简讯。
如何处理丢失的数据
“归罪的想法既诱人又危险”(R.J.A Little & D.B .鲁宾)
我在数据清理/探索性分析中遇到的最常见的问题之一是处理丢失的值。首先,要明白没有好的方法来处理丢失的数据。我遇到过不同的数据插补解决方案,取决于问题的类型——时间序列分析、ML、回归等。并且很难提供通用的解决方案。在这篇博客中,我试图总结最常用的方法,并试图找到一个结构性的解决方案。
插补与删除数据
在讨论数据插补方法之前,我们必须了解数据丢失的原因。
- 随机缺失(MAR): 随机缺失是指一个数据点缺失的倾向与缺失数据无关,但与一些观察到的数据有关
- 完全随机缺失(MCAR): 某个值缺失的事实与其假设值无关,也与其他变量的值无关。
- 非随机缺失(MNAR): 两种可能的原因是,缺失值取决于假设值(例如,高收入的人一般不愿意在调查中透露自己的收入)或缺失值取决于其他一些变量的值(例如,我们假设女性一般不愿意透露自己的年龄!这里年龄变量中的缺失值受性别变量的影响)
在前两种情况下,根据缺失值的出现情况删除缺失值的数据是安全的,而在第三种情况下,删除缺失值的观测值会在模型中产生偏差。因此,在删除观察值之前,我们必须非常小心。请注意,插补不一定给出更好的结果。
删除
- 列表式 列表式删除(全病例分析)删除具有一个或多个缺失值的观察的所有数据。特别是如果缺失的数据仅限于少量的观察值,您可以选择从分析中排除这些情况。然而,在大多数情况下,使用列表式删除通常是不利的。这是因为 MCAR 的假设(完全随机缺失)通常很难得到支持。因此,列表式删除方法会产生有偏差的参数和估计值。
newdata <- na.omit(mydata)# In python
mydata.dropna(inplace=True)
- 成对 成对删除分析感兴趣的变量存在的所有情况,从而最大化分析基础上可用的所有数据。这种技术的一个优点是它增加了你的分析能力,但是它也有很多缺点。它假设丢失的数据是 MCAR。如果你成对地删除,那么你会得到不同数量的观察值,这些观察值对你的模型的不同部分有贡献,这会使解释变得困难。
#Pairwise Deletion
ncovMatrix <- cov(mydata, use="pairwise.complete.obs")#Listwise Deletion
ncovMatrix <- cov(mydata, use="complete.obs")
- 丢弃变量 在我看来,保留数据总是比丢弃好。有时,如果超过 60%的观测数据缺失,您可以删除变量,但前提是该变量不重要。话虽如此,插补法总是优于剔除变量的选择
df <- subset(mydata, select = -c(x,z) )
df <- mydata[ -c(1,3:4) ]In python
del mydata.column_name
mydata.drop('column_name', axis=1, inplace=True)
时序特定方法
- 上一次观察结转(LOCF) &下一次观察结转(NOCB) 这是纵向重复测量数据分析的常用统计方法,其中一些随访观察可能会丢失。纵向数据在不同的时间点跟踪相同的样本。这两种方法都可能在分析中引入偏差,并且当数据有明显趋势时表现不佳
- 线性插值 这种方法适用于具有某种趋势的时间序列,但不适用于季节性数据
- 季节性调整+线性插值 该方法适用于同时具有趋势和季节性的数据
Data: tsAirgap form library(imputeTS), Interpolated Data in Red
library(imputeTS)na.random(mydata) # Random Imputation
na.locf(mydata, option = "locf") # Last Obs. Carried Forward
na.locf(mydata, option = "nocb") # Next Obs. Carried Backward
na.interpolation(mydata) # Linear Interpolation
na.seadec(mydata, algorithm = "interpolation") # Seasonal Adjustment then Linear Interpolation
平均值、中间值和众数
计算总体均值、中位数或众数是一种非常基本的插补方法,它是唯一一种没有利用时间序列特征或变量之间关系的测试函数。它非常快,但有明显的缺点。一个缺点是均值插补减少了数据集中的方差。
library(imputeTS)na.mean(mydata, option = "mean") # Mean Imputation
na.mean(mydata, option = "median") # Median Imputation
na.mean(mydata, option = "mode") # Mode ImputationIn Python
from sklearn.preprocessing import Imputer
values = mydata.values
imputer = Imputer(missing_values=’NaN’, strategy=’mean’)
transformed_values = imputer.fit_transform(values)# strategy can be changed to "median" and “most_frequent”
线性回归
首先,使用相关矩阵来识别具有缺失值的变量的几个预测值。选择最佳预测值并将其用作回归方程中的独立变量。有缺失数据的变量作为因变量。预测变量数据完整的案例用于生成回归方程;然后,该方程用于预测不完整情况下的缺失值。在迭代过程中,插入缺失变量的值,然后使用所有情况来预测因变量。重复这些步骤,直到从一个步骤到下一个步骤的预测值之间的差异很小,即它们收敛。它“理论上”为缺失值提供了很好的估计。然而,这种模式有几个缺点,往往大于优点。首先,因为被替换的值是从其他变量中预测出来的,它们往往“太好”地吻合在一起,所以标准误差被缩小了。我们还必须假设回归方程中使用的变量之间存在线性关系,而实际上可能没有线性关系。
多重插补
- 插补:对不完整数据集的缺失条目进行插补 m 次( m =图中 3)。请注意,估算值来自分布。模拟随机抽取不包括模型参数的不确定性。更好的方法是使用马尔可夫链蒙特卡罗(MCMC)模拟。这一步产生了 m 个完整的数据集。
- 分析:分析每个 m 完成的数据集。
- 汇总:将 m 分析结果整合成最终结果
Source: www.stefvanbuuren.nl/publication…
# We will be using mice library in r
library(mice)
# Deterministic regression imputation via mice
imp <- mice(mydata, method = "norm.predict", m = 1)
# Store data
data_imp <- complete(imp)# Multiple Imputation
imp <- mice(mydata, m = 5)#build predictive model
fit <- with(data = imp, lm(y ~ x + z))#combine results of all 5 models
combine <- pool(fit)
这是目前最受欢迎的插补方法,原因如下: -易于使用 -无偏差(如果插补模型正确)
分类变量的插补
- 模式插补是一种方法,但它肯定会引入偏差
- 缺失值本身可以被视为一个单独的类别。我们可以为缺失的值创建另一个类别,并将它们用作不同的级别。这是最简单的方法。
- 预测模型:在这里,我们创建一个预测模型来估计将替代缺失数据的值。在这种情况下,我们将数据集分成两组:一组没有变量的缺失值(训练),另一组有缺失值(测试)。我们可以使用逻辑回归和方差分析等方法进行预测
- 多重插补
KNN (K 个最近邻居)
还有其他机器学习技术,如 XGBoost 和随机森林用于数据插补,但我们将讨论 KNN,因为它被广泛使用。在这种方法中,基于某种距离度量来选择 k 个邻居,并且将它们的平均值用作插补估计。该方法需要选择最近邻的数量和距离度量。KNN 可以预测离散属性(k 个最近邻中最频繁的值)和连续属性(k 个最近邻中的平均值) 距离度量根据数据类型而变化: 1。连续数据:连续数据常用的距离度量有欧几里德、曼哈顿和余弦 2。分类数据:在这种情况下通常使用汉明距离。它接受所有的分类属性,并且对于每个属性,如果两点之间的值不相同,则计数 1。然后,汉明距离等于值不同的属性的数量。 KNN 算法最吸引人的特点之一是它简单易懂,易于实施。KNN 的非参数性质使其在某些数据可能非常“不寻常”的情况下具有优势。 KNN 算法的一个明显缺点是在分析大型数据集时变得非常耗时,因为它会在整个数据集中搜索相似的实例。此外,对于高维数据,KNN 的精度会严重下降,因为最近的和最远的邻居之间几乎没有差别。
**library**(DMwR)
knnOutput <- **knnImputation**(mydata)In python
from fancyimpute import KNN
# Use 5 nearest rows which have a feature to fill in each row's missing features
knnOutput = KNN(k=5).complete(mydata)
在上面讨论的所有方法中,多重插补和 KNN 被广泛使用,而更简单的多重插补通常更受青睐。
如果你对这个帖子有任何问题,请在评论中提问,我会尽力回答。
资源: 1。https://www.bu.edu/sph/files/2014/05/Marina-tech-report.pdf 2。https://arxiv.org/pdf/1710.01011.pdf3。https://machinelingmastery . com/k-nearest-neighbors-for-machine-learning/ 4 .https://kevinzakka.github.io/2016/07/13/k-nearest-neighbor/ 5。纳撒尼尔·史蒂文斯在旧金山大学的时间系列讲座
如何突出 3D 大脑区域
最近,我在读霍华德 et。艾尔。,(2018)“对 807,553 名个体进行的抑郁症全基因组元分析确定了 102 个独立的变异,并在另外 1,507,153 名个体中复制”并看到了与抑郁症相关的突出显示大脑区域的非常酷的 3D 可视化:
Source: goo.gl/7rY5KV
经过彻底的搜索,我无法在方法或补充信息中找到任何关于这是如何完成的参考,所以我联系了作者。在我等待回复的时候,我也联系了推特上的T21,看看是否有人知道可以用来创建这样一个可视化的工具。
头盔卡里姆暗示说,也许这些图像是使用MATLAB中的BrainNet Viewer创建的,所以这是我尝试的第一种方法。
注意:本文中涉及的所有方法都使用了所谓的brain Atlas叠加在标准化 T1 MRI 图像上作为mask。我选择突出显示这些方法的left hippocampus,以便它们具有可比性。
BrainNet 浏览器
首先遵循BrainNet Viewer 的安装说明,然后从终端启动图形用户界面(GUI)。
接下来选择加载文件,并选择一个表面模板surface template和一个mapping文件(即 a brain atlas)。软件包提供了样本,所以我选择了BrainMesh_ICBMI52_smoothed.nv和[aa l90](neuro.imm.dtu.dk/wiki/Automa…)brain atlas,它们已经标记了 90 个大脑区域的体积。
接下来将弹出一个包含 7 个部分的窗口,我们对其中的layout、surface和volume感兴趣。
在layout中选择您想要的视图,我选择了full view,它将显示八个不同的视角。
在surface选项卡中,你可以选择表面贴图的透明度——我已经将它设置为 0.75 。
在volume选项卡中选择ROI drawing,取消选择draw all,在自定义框中输入37(hippocampus_L的代码)。然后选择确定。
芒果
我目前正在与霍华德实验室讨论,试图获得他们用来创建他们的数字图像的确切方法,但我认为这是他们如何用[ 芒果 ]做到的。
Mango有很好的视频教程、用户指南和论坛但是对于我们这些唯一感兴趣的是创建一个高亮的 3D 大脑图像的人来说,这是一大堆需要浏览的材料。因此,我决定为这个过程创建一个详细的协议来节省其他人的时间。
我决定下载锤子大脑图谱作为蒙版/覆盖图和Mango提供的样本图像
接下来选择Add Overlay并选择hippocampus_L。
现在选择Image > Build Surface创建大脑的 3D 图像。
在这个新的弹出 GUI 中,我们想做一些事情。首先,将背景改为白色,这样就可以在手稿中发表了。第二,将这张图片的透明度改为 0.75 。
在View选项卡下取消选择十字光标。
在另一个面板中选择Analysis > Create Logical Overlays,然后在表面面板中选择Shapes > Add Logical。
然后在Surface > Views下,你可以选择任何你喜欢的方向,然后Surface > Create Snapshot保存为.png。
下面是海马体的三视图 _L: 前、左和上:
r 实施
约翰·穆斯切利约翰·霍普金斯大学彭博公共卫生学院的助理科学家,他写了许多R包(例如 fslr)几周后回复了我的推特。他想出了一个要点来强调《T2》中的 3D 大脑图像。
library(rgl)
library(misc3d)
library(neurobase)
if (!requireNamespace("aal")) {
devtools::install_github("muschellij2/aal")
} else {
library(aal)
}
if (!requireNamespace("MNITemplate")) {
devtools::install_github("jfortin1/MNITemplate")
} else {
library(MNITemplate)
}img = aal_image()
template = readMNI(res = "2mm")
cut <- 4500
dtemp <- dim(template)# All of the sections you can label
labs = aal_get_labels()# Pick the region of the brain you would like to highlight - in this case the hippocamus_L
hippocampus = labs$index[grep("Hippocampus_L", labs$name)]mask = remake_img(vec = img %in% hippocampus, img = img)### this would be the ``activation'' or surface you want to render
contour3d(template, x=1:dtemp[1], y=1:dtemp[2], z=1:dtemp[3], level = cut, alpha = 0.1, draw = TRUE)
contour3d(mask, level = c(0.5), alpha = c(0.5), add = TRUE, color=c("red") )
### add text
text3d(x=dtemp[1]/2, y=dtemp[2]/2, z = dtemp[3]*0.98, text="Top")
text3d(x=-0.98, y=dtemp[2]/2, z = dtemp[3]/2, text="Right")
rglwidget()
John Muschelli 也在R教授一些关于成像的短期课程,我目前正在上他的[ 神经黑客课程。我真的很感谢他花时间做这件事。
如果你有兴趣在R了解更多关于医学成像的知识,一定要去看看神经传导
如果你觉得这篇文章有用,请随意与他人分享或推荐这篇文章!😃
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
如何建立一个机器学习团队
领域专家、ML 实践者和数据工程师的正确组合,在机器学习中取得成功
我偶尔会做的事情之一是建议谷歌云的客户建立他们的机器学习团队。一家公司可能会启动一项计划,在整个组织中注入机器学习,这对于他们雇佣一名高级数据科学家并建立一个从业者团队非常重要。他们给我看了几份简历,问我的想法,或者问他们应该去参加什么样的招聘会议。
我在一个能为价值数百万美元的机器学习项目提供强有力的技术领导的人身上寻找什么?团队中资历较浅的成员怎么样?
你在 ML 团队成员身上寻找什么
想象你正在面试一个程序员。“你以前编过程序吗?,“你问得微妙。“是的!候选人声称,“这是一个 GitHub repo,包含我在参加的在线编程课程中编写的 Hello World 程序。”
“我希望有一些真实世界的程序,”你坚持说,“比你好世界更深刻的东西。”
“我学会了用 Python、Java 和 C++编写 Hello World 程序,”候选人回答,“我甚至修改了它们,让它们说 Hello Earth”。
你会雇佣这个人吗?
You wouldn’t hire a programmer whose entire experience consists of “Hello World” in 3 languages. Why would you do that when it comes to machine learning?
然而…这正是许多机器学习候选人的简历所表明的!在线和大学课程教授理论和玩具示例,许多学习者只是止步于此。你需要你的 ML 从业者超越这一点。
他们应该知道如何建立端到端的机器学习解决方案来解决现实世界的问题,我的意思是他们需要收集/整理数据,摄取数据,探索数据,并清理数据。他们还需要编写模型,训练它,评估它,迭代它,最后部署它进行批量和在线预测。然后,也只有到那时,他们才能声称知道如何进行机器学习。
在招聘你的 ML 团队成员时,确保区分希望从事机器学习研究的人和希望将机器学习应用于你的业务问题的人。对于你的 ML 团队,雇佣优秀的程序员,他们通常会重用现有的框架和库,但是对数据科学中固有的模糊性感到舒服。
你在 ML 技术领导中寻找什么
知道如何进行机器学习并不等于精通它,就像知道如何编写 Java 类并不意味着面向对象和企业设计模式是你的第二天性。你不会为你的团队雇佣一个不能创造性地组装高级组件的高级架构师,你也不应该为机器学习领导这样做。
知道如何端到端地实现机器学习模型并不等同于创造性地使用机器学习。因此,机器学习课程可能会教你如何建立序列到序列的模型,这是建立翻译模型的良好起点。但是,野外的翻译系统不仅仅是使用欧洲议会的演讲记录来编写和训练一个英语到德语的模型。
我什么意思?让我用谷歌搜索“谷歌翻译”时发生的事情来说明一下。在链接页面的顶部,我有一个框,我可以在里面输入我想翻译的文本并选择目标语言:
Even a simple user journey will involve multiple ML models. You need a technical lead for ML who can creatively think through a use case and identify all the machine learning models you will build, the data you will collect to train those models, the model architecture you will use, and how you will evaluate those models.
在这个简单的用户旅程中,我可以识别至少六个机器学习模型(见上图中的数字):
Whether or not to bring up this translation UI in response to a search involves ML.
- 当我搜索“谷歌翻译”时,我得到的不仅仅是一组链接——我还得到了这个特殊的用户界面(见左图)。还有哪些搜索词可以调出翻译界面?我甚至成功地找到了一个甚至不包含“翻译”这个词的查询。
Whether or not to bring up this translation UI in response to a search involves ML — notice that is not as simple as looking for the word “translate” in the search term.
决定什么时候把盒子拿出来?那很可能是 ML 型号。
2.请注意,UI 显示“检测到英语”。检测源文本使用的语言?另一个机器学习模型。
3.然后当然是核心的翻译模型。在我的第一个例子中,我以一种辩论的语气写英语,泰米尔语以类似的语气回复。让事情变得更难的是,泰米尔语的自然顺序是把第二个短语(“而不是仅仅依靠例子”)放在前面,翻译就是这样做的。
4.翻译后的文本出现在一个框中,该框为我提供了文本到语音转换的选项,即大声朗读泰米尔语文本。如果我在国外,只是想让我的设备用外语和我的对话人交流,这非常有用。
5.但是万一我想读,又不读泰米尔文字,有一个很有帮助的拼音指南。这是另一种 ML 模型,一个音节一个音节地转录翻译的文本。
6.最后,当然,可以选择完全通过语音进入翻译界面。模型 4 和 6 向谷歌助手用例开放了基于网络的翻译服务。
熟悉机器学习意味着能够创造性地思考一个用例,并确定您将建立的所有机器学习模型,您将收集来训练这些模型的数据,您将使用的模型架构,以及您将如何评估这些模型。当你为你的 ML 团队雇佣一个高级领导时,你希望有人有能力做到这一点。
不幸的是,没有任何课程或书籍谈论机器学习的这一方面。我目前正与 Coursera 合作,根据我为谷歌云客户提供咨询的经验,为决策者创建一个机器学习课程。
完整的数据科学组织
构建各种模型并让它们协同工作的需求意味着您的大型数据科学团队还需要许多其他角色。我的同事凯西列了一张便利清单。
特别是,你还需要一个数据工程团队和一个数据分析团队来支持 ML 团队。数据工程师构建管道来定期接收和转换数据。数据分析师构建仪表板并创建报告,以支持整个组织的决策制定-除非您的分析团队已经手动进行了几次分析,并且您了解到这是您的企业通常会做出的决策,否则您不会想要构建 ML 模型来自动化任何决策制定。
这是员工人数约为 60 人的数据组织的典型设置,也是适合员工人数约为 10 人的组织的简化版本:
My suggestion for typical 60-person and 10-person data science organizations. The colored shapes represent tech leads while the gray circles represent individual contributors. Transparent shapes are managers whose primarily role is organizational (i.e. they lead either programs or people).
构建组织
在 Google Cloud,我们确实为所有这些角色提供培训,以便您可以提升现有团队成员的技能。参见 cloud.google.com/training/da… Google Cloud 销售或客户代表。
对于数据工程职位,谷歌云提供了数据工程认证和 Coursera 数据工程专业认证来帮助培训你的组织获得该认证。对于 GCP 的数据分析,我们提供从数据到洞察专业化。
为了跟上实际机器学习的速度,我建议 GCP 的带 TensorFlow 的机器学习和 GCP 的高级机器学习Coursera 的专门化。我有偏见,但我认为它们是最实际、最实用的机器学习课程。他们专注于帮助你建立一个 ML 从业者的团队,而不是研究人员。
如何通过 7 个简单的步骤在 AWS 云上托管一个 R Shiny 应用程序
R Shiny App 是什么?
闪亮的应用程序是一个交互式网络界面。R shiny app 有两个组件用户界面对象(UI。r)和服务器功能(server。r)。这两个组件作为参数传递给创建闪亮 app 对象的闪亮 app 函数。更多关于如何构建闪亮应用的信息,请参考这个链接。R Shiny App 基础知识
步骤 1 : 创建一个 EC2 实例
登录 AWS 帐户,点击“计算”标题下的 EC2 或点击“最近访问的服务”下的 EC2
单击启动实例
选择你选择的机器镜像,这里我选择了 Ubuntu server 16.04 LTS (HVM)
选择实例类型;可以从 t2.micro、t2.small 或 t2.medium 实例开始。对于较大的应用程序,可以使用 t2.large 或更大的。
然后单击“启动实例”,您将转到下面的页面
单击编辑安全组,您将被定向到下面的页面(配置安全组)。
在 SSH 行中,将 source 更改为“我的 IP”
单击添加规则,将添加自定义 TCP 规则。在“端口范围”下输入 3838。这是 R shiny 服务器的端口。
单击“查看并启动”,然后单击“启动”。这样做后,你会看到一个如下的对话框。该对话框有助于创建一个私钥,这将使我们能够 ssh 到 EC2 实例。为密钥命名,然后单击“下载密钥对”。你会得到。pem 文件。保存了。pem 文件/密钥安全。
按启动实例。您将看到如下屏幕
如果实例创建成功,实例状态将显示为“正在运行”
复制公共 DNS (IPv4)下的 IP 地址,这将是我们以后托管 R shiny 应用程序的 URL 的基础。
步骤 2:通过 SSH 从 Putty(基于 Windows)访问 EC2 实例
下载 putty,下载后,转换。pem 文件转换为 ppk 文件。
皈依。pem 文件保存到 ppk,请在 windows 开始对话框中键入 puttygen。点击“puttygen”。应该会出现下面的框。
单击文件选项卡,然后单击加载“私钥”。
导航到保存的文件夹或路径。pem 文件并选择它。的。pem 文件将被导入,您应该会看到如下画面。
现在将密钥保存为“保存私人密钥”,为密钥命名,并将其保存在您想要的位置。保存密钥后,应出现以下图标。
打开 putty,在主机名框中输入 EC2 实例的 IP,即一个相邻的 IPv4 公共 IP(54.148.189.55 ),如图 a 所示
接下来导航到左侧面板上的“Auth ”,并浏览您之前保存的 ppk 密钥。
浏览 ppk 密钥后,单击打开。如果您的密钥有效,您将会看到如下所示的命令提示符屏幕。输入您的登录凭据,然后按 Enter 键
步骤 3:安装 WinSCP,将文件从主机传输到 EC2 实例,反之亦然
在主机名框中输入 EC2 实例的 IP 地址。点击“高级”。
导航到左侧面板,在 SSH 下单击“Authentication ”,输入私钥,如下所示
输入私钥后,单击确定。你会看到下面的屏幕。点击“登录”。
你会看到一个如下的对话框。只需点击“是”。
最终结果将是下面的屏幕
步骤 4:在 EC2 实例中安装 R base 和 R shiny 服务器。
运行 R shiny app 的首要前提是安装 r base、shiny server、shiny package 以及关联包。
要安装上面的,第一步是去根目录安装它们。原因是如果你在 Ec2 中作为非根用户登录,你将有你自己的库路径,并且可能 R 包,r base,shiny 服务器可能不会在系统范围内安装。要在系统范围内安装它,请转到 root 并安装上面的
转到根目录的步骤:
在提示中键入以下内容
须藤一号
然后,您应该会看到一个#符号,如下所示
现在运行以下命令
sudo apt-get 更新
sudo apt-get 安装 r-base
sudo apt-get 安装 r-base-dev
下面的命令安装 R 闪亮包
sudo su—-c " R-e \ " install . packages(' shiny ',repos = ' http://cran . R studio . com/')\ " "
下面的命令安装闪亮服务器
wgethttps://download 3 . rstudio . org/Ubuntu-12.04/x86 _ 64/shiny-server-1 . 4 . 4 . 807-amd64 . deb
sudo dpkg-I shiny-server-1 . 4 . 4 . 807-amd64 . deb
第五步:转移 R 闪亮 app 组件
执行上述步骤后,将在路径/srv/shiny-server/中创建一个名为“shiny-server”的目录(文件夹)
下一步是在 shiny-server 目录中创建一个文件夹,我们可以在其中放置我们的 R shiny 应用程序组件(UI。r,服务器。R、配置文件、R 工作空间、数据文件或 R 程序)。
起初,我们可能无法在 shiny-server 文件夹中创建文件夹,首先执行以下命令
须藤 chmod 777 /srv/shiny-server
sudo mkdir/SRV/shiny-server/myapp
在上面的命令中,我创建了一个文件夹‘myapp’来放置所有的 R shiny 应用程序组件。
步骤 6:使用 Winscp 将 R shiny app 组件从本地机器转移到 Ec2 实例
现在将 R shiny app 组件从本地机器复制到 Ec2 实例,路径如下/srv/shiny-server/myapp/
需要考虑的一件重要事情是配置 shiny-server.conf
shiny-server.conf 可以在 /etc/shiny-server/ 中找到
同样,您可能无法访问/etc/下的 shiny-server 目录。
因此运行下面的命令
须藤 chmod 777 /etc/shiny-server
执行上述命令后,您可以将配置文件复制到本地系统,编辑它,然后将编辑后的配置文件传输回/etc/shiny-server 位置。
要制作的版本如下:请注意#后面的单词是注释。
下面的结果显示了在路径/srv/shiny-server/myapp 中复制的 shiny 组件
第七步:托管应用
现在是最后一步。在 amazon 控制台中,转到正在运行的 EC2 实例。复制公共 DNS (Ipv4),例如:ec2–34–215–115–68.us-west-2.compute.amazonaws.com。
在浏览器中复制这个并像下面一样加上后缀 : 3838/myapp 然后按回车键。
你的 R shiny app 托管成功!!!!
需要考虑的重要注意事项:
复制 R 工作空间是很重要的,因为它将在创建的文件夹(即 myapp)中包含 R 对象和数据文件。在上面的例子中,我们使用了一个简单的闪亮的应用程序“hello world equivalent ”,因此我们没有任何 R 工作空间或数据文件。
有时,应用程序可能会因为某些原因无法加载,或者屏幕可能会“变灰”。请刷新并重试。
来源:
如果你喜欢我的文章,给它几个掌声。
你可以在 Linkedin 上联系我
如何使用搜索引擎优化和文本挖掘识别公共话语中的空白
搜索引擎优化(SEO)通常用于将内容推至谷歌搜索结果页面的顶部。然而,使用今天可用的数据以及文本分析和可视化技术,我们可以将 SEO 方法应用于更有趣的事情:发现公共话语中的差距。这些差距是人们寻找的东西和他们实际发现的东西之间的差异。一旦我们确定了这些差距,我们就可以制作相关的内容来弥补需求和供给之间的不足,无论是政治话语、利基市场还是科学研究。
我们提出的方法的核心是基于文本网络分析、可视化技术和文本挖掘的结合。
问题#1:当前话语的状态是什么?
第一步是确定目标和兴趣。例如,在我们之前的一项研究中,我们专注于“文本挖掘”这一主题。我们的目标是吸引在互联网上搜索这个主题的观众到我们研究实验室的网站, Nodus Labs ,为这些观众提供 InfraNodus 文本网络可视化工具。
我们使用 InfraNodus 来可视化“文本挖掘”的当前搜索结果——人们在谷歌上搜索时实际看到的内容。
Text network visualization of Google search results for “Text Mining” — what people actually find when they look for this search query, visualized using InfraNodus
我们发现,很明显,有一个占主导地位的主题集群 文本——挖掘——分析
以及其他主题集群如 流程—分析—大型 和 数据—非结构化—分析 和 模式—转折—有趣
这向我们表明,当人们在谷歌上搜索“文本挖掘”时,他们实际上找到的大多是对它的好处(识别非结构化数据中的模式)及其工作方式的一般性描述。
当然,为了获得更好的图片,建议查看几个不同的相关关键字,以便构建更好的表示。例如,在我们的例子中,我们可以添加“数据挖掘”、“文本分析”等。
问题 2:人们实际上在寻找什么?
一旦我们确定了当前话语的状态,我们现在就可以发现当人们想要进入话语时,他们实际上在寻找什么。这将有助于我们了解人们想要的和他们实际得到的之间是否有任何差异,因此我们可以在以后用新的内容、想法、产品或服务来针对这种差异。
为了做到这一点,我们可以使用谷歌关键词规划工具,它是 AdWords 平台的一部分。首先,我们需要看到与我们的搜索查询“文本挖掘”相关的搜索词列表。
这些包括“文本分析”、“情感分析”、“文本数据挖掘”等。然后我们可以将它们下载为 CSV 文件,在 Google Sheets 中打开,然后将表格中的关键字列复制并粘贴到 InfraNodus 中,以可视化主要术语及其之间联系的图表:
What people search for when they look for “text mining” — related queries from Google Keywords Tool visualized with InfraNodus
我们可以看到,“文本挖掘”和“数据分析”这两个词在人们搜索这个话题时使用的关键词列表中相当突出。这些都是不言而喻的,所以我们可以从图表中删除它们(和其他主题),看看当我们删除所有我们已经知道的主题时,还剩下哪些主题:
“Text mining” associated search queries with “text”, “analytics”, “analysis”, “data”, “mining” removed from the graph
我们现在可以看到,当人们搜索“文本挖掘”(和相关搜索)时,他们的搜索查询中有一个主题集群,由以下内容组成:
软件—工具—在线
这意味着人们寻找在线软件工具来进行文本挖掘,识别文本处理工具的内容和市场中的潜在缺口。
问题 3:人们寻找的和他们发现的有什么区别?
既然我们已经确定了人们在搜索“文本挖掘”时所寻找的特殊主题群,我们现在可以将其与谷歌搜索结果的文本图进行比较。为了做到这一点,我们可以使用结节下比较特征。它向我们展示了第二张图中的哪些术语(人们寻找的内容)没有出现在第一张图中(人们得到的搜索结果),并根据它们的重要性对它们进行了排序:
The black nodes on the graph are the terms that people look for (in relation to “text mining”) but don’t really find in Google search results — identifying a gap and, thus, a potential content / product / service opportunity.
这些术语是: web —检索—应用—算法
正如我们所看到的,需要找到基于 web 的文本检索应用程序和各种可以在线使用的文本挖掘算法。
因此,如果我们要创建新的内容,它将是相关的,具有较低的竞争性,并满足某种需求,这是其他内容所不能满足的,我们就需要写与基于 web 的应用程序和算法相关的“文本挖掘”。这就是人们寻找却没有找到的东西。
此外,这也向我们展示了市场中一个潜在的有趣缺口,一个我们可以用新产品或服务来填补的缝隙。
当然,需要进行更彻底的研究,包括围绕“文本挖掘”的所有搜索词,但上面介绍的这个通用简化示例可用于研究任何公共话语,并根据受众的需求确定潜在的有趣领域,以增加话语的价值。
如果你想尝试这种方法,你可以在 www.infranodus.com 的上建立一个新账户。要导入谷歌搜索结果,请前往infranodus.com/google。**
如何用谷歌的自动增强功能改进你的图像分类器
通过使用优化的数据增强技术,获得了关于 CIFAR-10、CIFAR-100、SVHN 和 ImageNet 的最新结果。自己从这个 仓库 中使用它们。
Some of the best augmentations found for ImageNet. From arxiv.org/abs/1805.09…
AutoML——使用机器学习来改善机器学习设计选择,如架构或优化器的想法——已经达到了数据扩充的空间。这篇文章解释了什么是数据增强,Google 的自动增强如何搜索最佳增强策略,以及如何将这些策略转换为您自己的图像分类问题。
数据扩充
数据扩充意味着在训练机器学习模型时,对您的输入随机应用各种转换。随着新的可能的输入-输出对的生成,这人为地扩大了您的训练数据。这也有助于防止过度拟合,因为网络几乎不会两次看到完全相同的输入,也不能只记住它们。用于图像的典型数据扩充技术包括从输入图像中随机裁剪部分,水平翻转它们,并应用仿射变换,如平移、旋转或剪切。
事实上,正如 AutoAugment 的作者所指出的,近年来已经投入了大量的努力来为 ImageNet 寻找更好的网络架构,而 Krizhevsky 等人在 2012 年为 AlexNet 使用的数据增强技术仍然基本相同,只有微小的变化。
现状
选择使用哪种数据扩充的标准方法是提出不同的假设,说明哪种变换适合您的数据集,然后进行试验。你可以从随机裁剪或随机调整大小裁剪和水平翻转开始,因为它们几乎总是有效的,接下来可以尝试小的旋转。由于重复训练运行导致的验证性能的随机波动,很难确定这些添加的旋转是否提高了模型性能。你可以从一次运行到另一次运行得到随机的改进,这并不是因为增加了增强。
通常,因为你的实验是高度不明确的,你没有时间或资源来严格测试所有可能的组合,你会放弃整个搜索或坚持一些增强,而不知道它们是否有很大贡献。但是,如果有一种方法可以转移有益的数据增强技术,就像我们在迁移学习中从预训练模型转移权重一样,会怎么样呢?
从数据中学习增强策略
自动增强的想法是在强化学习(RL)的帮助下,学习给定数据集的最佳增强策略。因为在图像上应用和组合变换的所有可能方式的搜索空间是巨大的,他们用几个设计选择来限制它。一个策略由 5 个子策略组成,每个子策略按顺序应用 2 个映像操作。这些图像操作中的每一个都有两个参数:应用它的概率和操作的幅度(例如,在 70%的情况下旋转 30 度)。
这种策略如何应用于训练时的图像?对于我们当前批次中的每个图像,首先随机统一选择一个子策略,然后应用该子策略。让我们来看一个应用于来自 SVHN 数据集的图像的具有 5 个子策略的示例策略:
子策略 1 在 90%的情况下在任一 x 方向上剪切幅度为 7 的图像。然后,以 20%的概率,图像的颜色被反转。子策略 4 在 90%的情况下反转颜色,然后在 10 次中均衡颜色直方图 6。操作的幅度是固定的,但是由于子策略应用的随机性和操作的概率,对于单个图像有许多可能的增强结果。
Example of applying some of the best found augmentations to an SVHN image. From arxiv.org/abs/1805.09…
让我们看看 AutoAugment 的 RL 模型的搜索空间。他们考虑了 16 种操作:14 种来自 Python 图像库 PIL 的操作,如旋转、颜色反转和不太为人所知的操作,如色调分离(减少像素位)和曝光(反转阈值以上的颜色),加上数据增强领域的新来者剪切和样本配对(类似于混合)。将 11 个离散化的概率值(0.0,0.1,…,1)和 10 个从 0 到 9 的均匀间隔的量值相加,这对于一个子策略来说等于(16 * 11 * 10)个可能性,对于 5 个子策略来说等于(16 * 11 * 10)个⁰ ≈ 2.9 * 10 个可能性。强化学习拯救世界!
自动增强是如何训练的?
自动增强像 NASNet 一样被训练——这是谷歌的一篇早期 AutoML 论文,其中 RL 系统为图像分类找到了最先进的模型架构。方法如下:我们有一个控制器,它决定目前哪种数据扩充策略看起来最好,并通过在特定数据集的小子集上运行子模型实验来测试该策略的泛化能力。在子实验完成后,使用称为近似策略优化算法(PPO) 的策略梯度方法,用验证准确度作为奖励信号来更新控制器。让我们更详细地看看控制器和子模型实验,因为解释 PPO 超出了本文的范围。
控制器
控制器以 softmax 的形式输出要应用哪个操作的决定。这个决定然后作为输入输入到控制器的下一步。这是可行的,因为控制器是 RNN(对于 NASNet,使用了具有 100 个隐藏单元的 LSTM)。然后,控制器决定以何种幅度应用该操作。在第三步中,选择概率。因此,为了做出下一个最好的选择,控制者拥有所有其他操作的上下文、概率和大小。(这是一个说明性的例子,因为该论文目前没有告诉我们以什么顺序选择运算、大小和概率)。
Illustrative controller model architecture. Adapted from arxiv.org/abs/1707.07…
总共有 30 个 softmax 预测,因为有 5 个子策略,并且每个子策略需要关于操作、幅度和概率的两个决策(5 * 2 * 3 = 30 ),用于其顺序应用的两个操作。
子模型
我们如何告诉控制器哪些策略选择得非常好,哪些策略没有真正提高性能(想象一下将亮度设置为零)?为此,我们对使用当前数据扩充策略的子神经网络进行了一个泛化实验。实验结束后,RNN 控制器的权值以验证精度作为奖励信号进行更新。当最终将总体最佳的 5 个策略(每个策略有 5 个子策略)合并到最终策略(现在有 25 个子策略)中时,这样做 15,000 次。该最终策略用于该数据集的所有结果。
结果
由于副标题已经泄露,自动增强改善了数据集的最先进水平,如 CIFAR-10 、 CIFAR-100 、 SVHN 、 ImageNet 等。此外,还有一些特别有趣的细节:
- CIFAR-10 和 ImageNet 的最佳策略主要是基于颜色的转换。对于 SVHN,与 CIFAR-10 相比,AutoAugment 选择了非常不同的转换:剪切图像和反转颜色,这对门牌号有意义。
Test set error rates (%) on CIFAR-10. Lower is better. From arxiv.org/abs/1805.09…
Validation set Top-1 / Top-5 error rates (%) on ImageNet. Lower is better. From arxiv.org/abs/1805.09…
- 在数据较少的情况下,使用自动增强功能可以更好地改善结果。这是数据增强技术的预期行为,但值得注意。
- 在 CIFAR-10 上发现的最佳数据增强策略转化为在 CIFAR-100 上的实质性改进,从 12.19%的错误率降低到 10.67%。
Test set error rates (%) on CIFAR-100. From arxiv.org/abs/1805.09…
- 将在 ImageNet 上找到的最终策略应用于 5 个不同的困难数据集显著提高了准确性。**这是数据增强而非权重的迁移学习。**这些结果是在从头开始训练 Inception v4 而不是从 ImageNet 微调权重时获得的。
Test set Top-1 error rates (%) on FGVC datasets. An Inception v4 was trained from scratch with an without applying the best ImageNet augmentation policy. From arxiv.org/abs/1805.09…
双转移学习
如果我们想解决我们自己的图像分类问题,我们通常从使用 ImageNet 的预训练权重开始,并根据我们的问题对这些权重进行微调。我们刚刚看到,在从头开始训练时使用 AutoAugment 的最佳 ImageNet 策略也有类似的积极效果。如果我们双管齐下:在使用 ImageNet 自动增强策略的同时微调 ImageNet 权重,会怎么样?积极的效果会累积起来,并为我们提供解决任何新的图像分类问题的新的最佳方法吗?
为了回答这个问题,我使用了相同的 5 个 FGVC 数据集(牛津 102 Flowers,加州理工学院 101,牛津-IIIT Pets,FGVC Aircraft 和 Stanford Cars),并在应用或不应用来自 AutoAugment 的 ImageNet 策略的情况下对盗梦空间 v4 进行了微调。
实验设定
- 初始 v4 在一个 GPU 上训练,批量为 32,SGD 动量为 0.9,学习速率为 0.01。
- 如果验证准确性在 5 个时期内没有增加,则将学习率除以 2。在 3*5=15 个阶段的验证准确度无改善后,停止培训。
- 本报告使用了提供的经过预先培训的 ImageNet 权重。仅交换顶部的输出层,以说明不同类别的数据集。所有层从开始都是可以训练的。
- 输入图像大小为 448x448,如自动调整纸上所示。
- 两种微调场景都使用随机水平翻转和随机调整大小裁剪作为基线数据增强。随机调整大小裁剪的最小裁剪百分比是根据较小 ResNet18 模型的验证集性能选择的。
- 在随机调整大小裁剪之后,将应用 ImageNet 自动调整策略。实验表明,无论是在种植前还是种植后应用,这似乎都无关紧要。
- 利用这些选定的超参数,最终模型在训练和验证集的组合上训练,并在测试集上测试。为了确保稳定的结果,以这种方式训练了五个模型,并对测试结果进行了平均。
Test set Top-1 error rates (%) on FGVC datasets averaged over five runs. An Inception v4 was fine-tuned from ImageNet weights with and without the AutoAugment ImageNet policy. Interestingly, fine-tuned results are better on only 3 out of 5 datasets in comparison to the results trained from scratch from the AutoAugment paper above. Fine-tuning does not seem to benefit the performance in all cases as also discussed in “Do Better ImageNet Models Transfer Better (Kornblith et al. 2018)” arxiv.org/abs/1805.08…
对不同数据集应用最佳 ImageNet 策略可使 5 个数据集中的 3 个数据集的错误率平均降低 18.7% 。在 2 个数据集上,错误率略微增加,平均为 5.3%。
这些结果表明,当您通常需要微调 ImageNet 的权重时,您应该尝试额外应用 ImageNet 自动调整策略。通常情况下,您基本上可以免费获得显著的改进。
如何对您的问题应用自动建议策略
我已经创建了一个存储库,其中包含了本文附录中的最佳 ImageNet、CIFS-10 和 SVHN 策略。一些实施细节仍不清楚,但我正在与作者联系,一旦我知道更多,将尽快更新回购协议。
使用此基本语法,ImageNet 策略的随机子策略将应用于 PIL 映像:
要将其应用为 PyTorch 转换,您将执行以下操作:
结论
AutoML 再次做到了这一点:给定数据集的最佳数据扩充操作是可以学习的,甚至可以转移到类似的数据集。这可能只是即将到来的许多 AutoML 优化数据增强策略中的第一个。提高学习这些策略的效率是另一个令人兴奋的途径,以使任何人都能够使用这些技术(无需 GPU 服务器群)。ENAS 表明这是可能的。
祝你好运,把这个新工具应用到你自己的问题中。让我知道你的结果,如果他们同意或不同意我的实验。关于错误和问题,请发电子邮件到 philip@popien.net 给我。
如何用 VS 代码和 Jupyter 笔记本改善你的工作流程💘
我喜欢 VS 代码,也喜欢 Jupyter 笔记本😍。两人都擅长自己的世界。但是为了改进我的工作流程,我必须在他们的世界之间建立一座桥梁。
数据科学家喜欢 Jupyter 笔记本。它们是创建可重复实验的最佳选择。Visual Studio 代码将经典的轻量级文本编辑器的易用性与更强大的 IDE 类型的功能结合在一起,只需要很少的配置。它附带了许多令人敬畏的扩展,使它成为常规使用的一个非常强大的工具。
不幸的是,每次查看 IPython 文档时,您都必须运行 Jupyter 实例并在浏览器中打开笔记本。如果我们在 VS 代码中打开一个 IPython 笔记本,我们只能看到一个 JSON 文档,而看不到漂亮的渲染文档。
我的工作流程包括在 Jupyter 笔记本上做原型和实验,然后用 VS 代码创建一个独立的 Python 脚本。Python 代码的 Git 版本简化了我的工作流程。
让我有点失望的是,即使是为了查看预览,我也必须启动一个 Jupyter 实例,并打开我的 RAM hungry Chrome 浏览器。:)
所以我决定不运行 Jupyter 实例来解决这个预览笔记本的小问题。为了更进一步,我决定在 VS 代码中实现。
结果是 nbpreviewer,一个 VS 代码扩展,帮助你在 VS 代码中预览渲染 Jupyter notebook。你甚至可以用 VS 代码与交互式图形可视化进行交互。
在这里尝试一下
[## VS 代码 Jupyter 笔记本预览器- Visual Studio 市场
这是一个易于使用的扩展,用于在 VS 代码中预览 Jupyter 笔记本
marketplace.visualstudio.com](marketplace.visualstudio.com/items?itemN…)
演示
Playing with plotly 3D visualization within VS Code
Bridging two worlds 😃
如果您对扩展的源代码感兴趣,请访问我的 GitHub 库。请关注我的下一篇博文,了解我是如何创建扩展的,以及您如何轻松地创建自己的扩展。
[## jithurjacob/vscode-nbpreviewer
一个 VS 代码扩展,用于预览 Jupyter 笔记本
github.com](github.com/jithurjacob…)
记得给本帖一些💚如果你喜欢的话。关注我了解更多内容:)
改善神经网络的性能
神经网络是机器学习算法,提供许多用例的准确性状态。但是,很多时候,我们正在构建的网络的准确性可能不令人满意,或者可能不会让我们在数据科学竞赛的排行榜上名列前茅。因此,我们一直在寻找更好的方法来提高我们模型的性能。有许多技术可以帮助我们实现这一目标。跟着去了解他们,建立你自己精确的神经网络。
检查是否过度配合
确保您的神经网络在测试数据上表现良好的第一步是验证您的神经网络没有过度拟合。好了,打住,什么叫过度拟合?当您的模型开始记忆来自训练数据的值而不是从中学习时,就会发生过度拟合。因此,当您的模型遇到一个它以前没有见过的数据时,它无法对它们执行良好的操作。为了让你更好的理解,我们来看一个类比。我们都会有一个擅长记忆的同学,假设数学考试即将来临。你和你擅长记忆的朋友从课本开始学习。你的朋友继续记忆教科书上的每一个公式、问题和答案,但另一方面,你比他更聪明,所以你决定依靠直觉解决问题,并学习这些公式是如何发挥作用的。考试日到了,如果试卷中的问题直接取自教科书,那么你可以期待你的记忆朋友在这方面做得更好,但是,如果问题是涉及运用直觉的新问题,你在考试中做得更好,而你的记忆朋友却悲惨地失败了。
如何识别自己的模型是否过度拟合?你可以交叉检查训练的准确性和测试的准确性。如果训练精度比测试精度高得多,那么你可以假定你的模型已经过度拟合了。您也可以在图表上绘制预测点来验证。有一些避免过度拟合的技巧:
- 数据规范化(L1 或 L2)。
- 中断——随机中断神经元之间的连接,迫使网络寻找新的路径并进行归纳。
- 早期停止—加速神经网络的训练,从而减少测试集中的错误。
超参数调谐
超参数是您必须对网络进行初始化的值,这些值不能在训练时被网络学习到。E.x:在卷积神经网络中,一些超参数是内核大小、神经网络的层数、激活函数、损失函数、使用的优化器(梯度下降,RMSprop)、批量大小、要训练的时期数等。
每个神经网络将有其最佳的超参数集,这将导致最大的准确性。您可能会问,“有这么多的超参数,我如何为每一个选择使用什么?”不幸的是,没有直接的方法来确定每个神经网络的最佳超参数集,因此它主要是通过反复试验获得的。但是,下面提到了一些超参数的最佳实践,
- 学习率——选择一个最佳的学习率是很重要的,因为它决定了你的网络是否收敛到全局最小值。选择一个高的学习率几乎不会让你达到全局最小值,因为你很有可能超过它。因此,你总是在全局极小值附近但从不收敛于它。选择小的学习速率可以帮助神经网络收敛到全局最小值,但是这需要大量的时间。所以,你要对网络进行更长时间的训练。小的学习率也使网络容易陷入局部最小值。即网络将收敛到局部最小值,并且由于小的学习速率而不能摆脱它。因此,在设定学习率时,你必须小心。
- 网络架构——没有一个标准的架构能在所有的测试案例中给你高的准确性。你必须进行实验,尝试不同的架构,从结果中获得推论,然后再试一次。我建议的一个想法是使用经过验证的架构,而不是构建自己的架构。对于图像识别任务,你有 VGG 网,Resnet,谷歌的 Inception 网络等。这些都是开源的,并且已经被证明是高度准确的,因此,你可以复制它们的架构,并根据你的目的进行调整。
- 优化器和损失函数——有无数的选项可供你选择。事实上,如果有必要的话,你甚至可以定义你自己的损失函数。但常用的优化器有 RMSprop、随机梯度下降和 Adam。这些优化器似乎适用于大多数用例。如果你的用例是分类任务,常用的损失函数是分类交叉熵。如果您正在执行回归任务,均方误差是常用的损失函数。请随意试验这些优化器的超参数,以及不同的优化器和损失函数。
- 批量大小和时期数量——同样,没有适用于所有用例的批量大小和时期的标准值。你必须尝试不同的方法。在一般实践中,批处理大小值被设置为 8、16、32…历元的数量取决于开发人员的偏好和他/她拥有的计算能力。
ReLU Activation Funciton
- 激活函数—激活函数将非线性函数输入映射到输出。激活函数非常重要,选择正确的激活函数有助于模型更好地学习。如今,校正线性单元(ReLU)是最广泛使用的激活函数,因为它解决了消失梯度的问题。早期的 Sigmoid 和 Tanh 是使用最广泛的激活函数。但是,它们遇到了梯度消失的问题,即,在反向传播期间,当它们到达开始层时,梯度的值减小。这阻止了神经网络随着层数的增加而变得更大。ReLU 能够克服这个问题,因此允许神经网络具有较大的规模。
算法集成
如果单个神经网络不像您希望的那样准确,您可以创建一个神经网络集合,并结合它们的预测能力。您可以选择不同的神经网络架构,在数据的不同部分对它们进行训练,然后集成它们,利用它们的集体预测能力来获得测试数据的高准确性。假设,你正在构建一个猫和狗的分类器,0-猫和 1-狗。当组合不同的猫和狗分类器时,基于个体分类器之间的皮尔逊相关性,集成算法的准确度增加。让我们看一个例子,取 3 个模型并测量它们各自的准确度。
Ground Truth: 1111111111
Classifier 1: 1111111100 = 80% accuracy
Classifier 2: 1111111100 = 80% accuracy
Classifier 3: 1011111100 = 70% accuracy
三个模型的皮尔逊相关系数都很高。因此,将它们组合在一起并不能提高精度。如果我们使用多数投票将上述三个模型集成,我们会得到以下结果。
Ensemble Result: 1111111100 = 80% accuracy
现在,让我们来看三个模型,它们的输出之间具有非常低的皮尔逊相关性。
Ground Truth: 1111111111
Classifier 1: 1111111100 = 80% accuracy
Classifier 2: 0111011101 = 70% accuracy
Classifier 3: 1000101111 = 60% accuracy
当我们集成这三个弱学习者时,我们得到以下结果。
Ensemble Result: 1111111101 = 90% accuracy
正如你在上面看到的,具有低皮尔逊相关性的弱学习者的集合能够胜过它们之间具有高皮尔逊相关性的集合。
缺乏数据
在执行了上述所有技术之后,如果您的模型在测试数据集中仍然表现不佳,这可能是由于缺少训练数据。在许多用例中,可用的训练数据量是有限的。如果你不能收集更多的数据,那么你可以求助于数据扩充技术。
Data Augmentation Techniques
如果您正在处理图像数据集,可以通过剪切图像、翻转图像、随机裁剪图像等方式将新图像添加到训练数据中。这可以为神经网络训练提供不同的例子。
结论
这些技术被认为是最佳实践,在提高模型学习特征的能力方面通常是有效的。这似乎是一篇很长的帖子,谢谢你通读,如果这些技巧对你有用,请告诉我:)
如何使用 Cmake 从源代码构建和安装 OpenCV 和额外的模块,并配置您的 Pycharm IDE
OpenCV(开源计算机视觉)是一个非常强大的图像处理和机器学习任务库,它还支持 Tensorflow、Torch/Pytorch 和 Caffe。这个库是跨平台的,你可以在 CPU 的支持下 pip 安装它(如果你使用 Python 的话)。或者,举例来说,如果您想在 GPU 支持下使用它,您可以从源代码构建它,这更复杂。本文介绍了在 Linux Ubuntu 机器上从源代码构建 OpenCV 的过程。
特别是,本文解释了如何:
- 使用 Cmake GUI 从源代码安装 OpenCV master 和 OpenCV contrib 文件
- 在 Cmake 中构建时,通过适当地选择/取消选择,仅选择您想要的 OpenCV contrib 模块
- 配置您的 Pycharm IDE 以识别生成的 OpenCV 安装
几个月前(2018 年 5 月),我决定使用 Cmake 从头构建 openCV,因为我希望 OpenCV 在我的本地机器上有 Nvidia GPU 支持,而不是只在 CPU 上运行 OpenCV。我第一次安装 openCV 是在 5 月份,从 github 资源库下载,网址是:
开源计算机视觉库。在 GitHub 上创建一个帐户,为 opencv/opencv 开发做贡献。
github.com](github.com/opencv/open…)
下载完成后,我用 Cmake 安装了 openCV。我当时没有意识到的是,由于没有将“opencv_contrib”作为 Cmake 安装的一部分,我错过了多少 openCV 的功能。这些是 OpenCV 的附加模块。
OpenCV 额外模块的存储库。通过在…上创建帐户,为 opencv/opencv_contrib 开发做出贡献
github.com](github.com/opencv/open…)
当时我还不知道 openCV contrib(T1 ),并认为安装 openCV 本身会给我提供 openCV 必须提供的几乎所有功能。那么,从源代码来看,标准的“openCV”安装缺少哪种模块呢?比如 openCV 的 TrackerMedianFlow(openCV 中的对象跟踪器之一)。如果你从头开始制作 openCV,没有 opencv_contrib 文件,这个对象跟踪器不包括在内。这个跟踪器甚至包含在带 CPU 支持的 openCV 的标准 pip 安装中。如果您感兴趣,这里解释了可用的 OpenCV 跟踪器:
在本教程中,您可以选择视频或图像列表作为程序输入。如帮助中所写,您…
www.docs.opencv.org](www.docs.opencv.org/3.1.0/d2/d0…)
因此,本文解释了我使用 Cmake 重新安装 OpenCV 的过程,但是这次选择了我需要的额外的 openCV 功能,可以从 opencv_contrib 库获得。安装过程有几个“陷阱”(这当然让我);我已经解释了这些是如何绊倒我的,以及我是如何解决它们的。
请注意,我正在描述 OpenCV 的 Cmake 过程,我的机器上已经安装了一些东西,下一段将详细介绍。
我的系统规格和我已经安装的内容:
- 我的操作系统: Linux Ubuntu 16.04 LTS
- Nvidia GPU: GeForce GTX 1050,驱动程序版本:384.130(你可以在电脑上打开一个终端,输入
nvidia-smi来检查这一点 - 从源代码构建应用程序: CMake 3.5.1 (在 Linux 上可以通过打开计算机上的终端并键入
sudo apt-get install cmake)来安装)。 - CUDA 9.0
这篇文章中的步骤概述如下:
- 从 github 克隆最新的 openCV master 和 openCV contrib 模块
- 在 Cmake GUI 中,配置,然后在您创建的新“build”文件夹中生成新的构建文件
- 在您的终端中,导航到“build”文件夹,然后运行“make”和“install”命令。“make”命令将花费相当长的时间,并且可能会产生错误(将在下面讨论)。
- 检查这个进程在哪里安装了在 Cmake 进程中创建的 cv2.xxx.so 文件(如果需要的话,用符号链接)
- 在 Python 控制台中检查 openCV 是否已经安装,以及它是否被 Python 识别
- 在 Pycharm 中配置 openCV,以便 Pycharm IDE 识别新安装的 OpenCV 包并检查结果。
使用 Cmake 从源代码下载文件并进行编译的更多详细步骤
步骤 1 : 将主 openCV 文件(opencv_master)和附加模块(opencv_contrib)从 Github 下载/克隆到您的电脑上
图 1 显示了从 Github 下载的 opencv_master 文件夹。下载或克隆主要 openCV 文件后,我创建了一个名为“ build ”的新(空)文件夹。Cmake 将在这里为您的新构建创建文件。
Fig 1: Downloaded opencv-master folder with new empty ‘build’ folder I created inside
步骤 2:在 Cmake GUI 中,“配置”然后在您创建的新“构建”文件夹中“生成”新的构建文件
通过在 bash 终端的$符号后键入以下命令,打开 Cmake GUI:
$ cmake-gui
这将打开一个 Cmake GUI 窗口,如图 2 所示。在 Cmake GUI 中,您会注意到,在从 Github 下载资源库时,我已经将 opencv-master 文件放在我的计算机上名为“…/opencv-master”的文件夹中,然后在 GUI 中,我在“Where are the source code”选项中指向它。如步骤 1 所述,在 opencv-master 文件中,我创建了一个名为“build”的新的空子文件夹。这个构建文件夹是二进制文件将要构建的地方,文件路径设置“在哪里构建二进制文件”指向这个空文件夹。关于 Cmake 的伟大之处在于,如果你完全塞住了你的构建过程(在我弄清楚我在做什么之前,我做了令人沮丧的大量工作…)然后,在再次开始构建过程之前,您应该删除构建文件夹的内容。
Fig 2: Cmake GUI example building opencv-master
在 Cmake GUI 中运行配置命令
按下'配置'(图 2 左侧的按钮)。运行 configure 将填充构建文件的内容,该文件到目前为止是空的。首次配置时,这将提示您为交叉编译指定工具链。我选择了原生工具链。当这个过程完成时——这并不需要很长时间——您应该在窗口中得到一条消息,说“配置完成”。
将 OpenCV Contrib 中的额外模块添加到您的 OpenCV 构建中
按下 GUI 上的'配置',然后浏览参数并查找“OPENCV_EXTRA_MODULES_PATH”。浏览参数,寻找名为 OPENCV_EXTRA_MODULES_PATH 的形式;使用搜索表单快速关注它。单击“advanced ”(高级)复选框(分别显示在图 2 和图 3 的右上方),通过勾选或取消勾选相应的复选框,搜索您特别希望包括或排除的模块。
Fig 3: Searching for, selecting and deselecting additional openCV modules (e.g. opencv_face)
在 Cmake GUI 中运行“生成”命令
配置完成后,按下'生成'(见图 3),同样应出现“生成完成”。
步骤 3:在您的终端中,导航到“build”文件夹,运行“make ”,然后运行“install”命令。
在 bash 终端中使用以下命令导航到构建文件夹(这里的示例显示了导航到我的构建文件夹,因此相应地修改您的路径):
$ cd /home/joanne/opencv-master/build
然后在命令行中输入 cmake 命令:
$ cmake .
过了一会儿,这将产生一条消息(如图 4 所示):
" —配置完成—生成完成 —构建文件已写入:/home/Joanne/opencv-master/Build"
(根据您将构建文件写入的位置,此消息会有所不同)。
Fig 4: Running the cmake command in your build folder
接下来,在命令行上,键入:
$ make -j8
请注意,数字“8”指的是您拥有的 CPU 内核的数量(您在这里的数量可能不同)。那个-j[8]标志是并行的,因此可以加速构建。正是这个“制作”过程需要时间(大约 2 个小时),而且对我来说,会产生一些错误。当您的“make”过程成功完成时,通过以下命令在您的终端中再次执行最后的安装步骤:
$ sudo make install
注意,使用这些“make”和“install”命令,您可能不需要在它们前面包含“sudo”来获得 Linux 上的必要权限。我发现我的机器需要这个。2018 年 5 月,我已经在我的机器上安装了来自我的原始 openCV 版本的 OpenCV。运行' sudo make install 命令成功覆盖了原始安装。
抓到你了!对您的 Cmake 构建进行故障排除
Trip hazard 1 : 确保你的 openCV 和 openCV_contrib 代码同步,在同一天 下载
正如我在本文开头提到的,我最初是在 2018 年 5 月下载并构建 openCV 的。因为当时我没有包含 openCV_contrib 模块,所以我不得不重新构建 openCV,这一次包含了 openCV_contrib 模块 和 。
我在 2018 年 8 月下载了 openCV_contrib 代码,但最初尝试结合我在 2018 年 5 月下载的 openCV 代码在 Cmake 中构建。这三个月的差异足以使 openCV 主代码库和 openCV_contrib 模块之间出现不兼容。结果,当 make 进程试图构建 contrib 模块时,我的构建在' make -j8 '阶段总是失败。这导致整个 openCV 'cmake '构建过程失败。例如,模块“生物感应失败,如图 5 所示。最初,当我遇到这样的故障时,我通过 GUI 排除了那些额外的模块,并再次运行了重建过程。然而,经过几次尝试后,很明显有许多模块以这种方式失败了,我意识到问题的根源是主要的 openCV 代码来自 2018 年 5 月,与最近的 contrib 模块不兼容。因此,我不得不下载 2018 年 8 月的 openCV 代码,并将其用于我的 Cmake 构建,以确保与 2018 年 8 月的 contrib 模块兼容。
Fig 5: Contrib module ‘bioinspired’ failing as a result of incompatibility between main OpenCV code version and the OpenCV contrib modules
跳闸危险 2:可能有奇怪的 openCV_contrib 模块就是不工作
即使您已经确保在同一天从代码库构建 openCV 和 openCV_contrib,也可能有奇怪的 openCV_contrib 模块会失败。 contrib 模块本质上更具实验性,因此还没有成为标准的 openCV 版本。
我发现只有一个 openCV 模块不管我做什么都不工作,并导致我的整个构建失败,这就是“ xfeatures2d ”。图 5 显示了这个附加模块的失败,它使得整个构建陷入停顿。
Fig 6: Build failure due to the xfeatures2d openCV_contrib module
事实证明,我不需要额外的“ xfeatures2d ”模块。我使用 Cmake GUI 从构建中排除这个模块(参见在步骤 2 中从 OpenCV Contrib 中添加额外的模块到 OpenCV 构建中),然后使用上面的步骤重新构建
跳闸危险 3 : 从源代码重建时,删除“构建”文件的内容
如上所述,如果您不得不多次从源代码构建,在 Cmake GUI 中再次运行配置和生成命令之前,按“生成”会确保您删除了构建文件的内容(留下一个空的构建文件)。
第 4 步:查看该进程在何处安装了 openCV”。所以“在 Cmake 过程中创建的文件
假设你的库已经安装成功,你应该可以找到你的' cv2.xxx.so '文件。在我的例子中,文件是“cv2 . cpython-35m-x86 _ 64-Linux-GNU . so”安装在“/usr/local/lib/python 3.5/dist-packages”中。我的另一个"。所以与 openCV 相关的文件位于“”/usr/local/lib”路径下,如图 7 所示。
Fig 7: The location of my openCV .so files
第 5 步:在 Python 控制台中检查 openCV 是否已经安装,以及它是否被 Python 3 识别
当我使用 Pycharm 进行 Python 开发时,我使用 Pycharm 中的 console 选项卡来检查 OpenCV 的安装。如图 10 所示,输出显示了到的完整路径。所以归档吧。
Fig 10. Checking the installation path of OpenCV using the python console tab in Pycharm
步骤 6:在 Pycharm 中配置 openCV,确保 Pycharm IDE 能够识别新安装的 OpenCV 包
尽管 Pycharm 中的 Python 控制台可以识别 openCV(如图 10 所示),但是第 6 步可以确保 Pycharm IDE 能够识别新安装的 openCV 包。在主菜单中,如果您选择 File -> Settings(或 Settings for new projects),那么这将显示项目解释器,如图 11 所示。
Fig 11. Project Interpreter selected (note ‘cog’ symbol in top right shown by pointer)
在图 11 中窗口的右上方,有一个 cog 图标,如果你点击它,会给你“添加”或“显示所有”项目解释器的选项。选择“显示全部”会打开一个新窗口,显示所有可用的项目解释器(我在这里稍微编辑了一下)。
Fig. 12: Path addition in Pycharm IDE
对于给定的解释器,您可以添加路径。当你点击图 12 右手边的按钮时(当你悬停在上面时,显示“显示所选解释器的路径”),一个名为“解释器路径”的新窗口打开(图 12)。在该窗口中,可以通过按“+”号添加新路径。我在图 12 中添加了一个新路径,名为“ /usr/local/lib ”。我发现这对于 Pycharm IDE 识别我新安装的 OpenCV 是必要的。
Fig.12: Adding a new interpreter path in the Pycharm Integrated Development Environment
要测试 Pycharm IDE 是否识别新的 OpenCV 安装,您可以尝试在 IDE 中创建一个新的 python 文件。尝试主 OpenCV 构建中缺少的“TrackerMedianFlow”现在是可用的,如图 13 所示。
Fig. 13: Checking import of OpenCV and additional modules e.g. TrackerMedianFlow
就是这样!OpenCV(在我的例子中有 GPU 支持)现在已经从源代码安装好了,可以在 Python 控制台或 Pycharm IDE 中使用。
如何整合 Google Sheets 和 Jupyter 笔记本
Jupyter 笔记本的功能非常强大。与 Google Sheets 或 Microsoft Excel 不同,它们可以轻松处理大量数据。只需几行代码,您就可以执行复杂的统计操作或操纵数据。你可以运行复杂的 for-loops 来创建蒙特卡洛模拟,而不需要像水晶球这样昂贵的附加组件。
但是有时您需要将这种强大的功能与简单且几乎普遍理解的电子表格 UI 结合起来。
例如,您可能想在一个小数据集上练习您的 Python 代码,您可以在 Google Sheets 中轻松直观地操作它。或者你可能需要将复杂分析的结果输出到电子表格中,以便你的非编码人员 CEO 或客户能够阅读和理解。或者,您可能会发现在电子表格中做一些简单的数据工作更容易,而在 Python 中只做最复杂的部分。
我曾经在 Google Sheets 中完成我的电子表格工作,下载一个 CSV 文件,将 CSV 文件数据拉入 Jupyter,处理我的数据,导出另一个 CSV 文件,然后将其上传回 Google Sheets。对每次调试或新的数据迭代进行清洗和重复。呸。
但后来我意识到,谷歌提供了一个 API,可以将工作表连接到你能想到的任何第三方应用,包括 Jupyter 笔记本。在修补了一会儿之后,我想出了如何轻松地将最新的数据从我的 Google Sheets 导入 Jupyter,并将数据从 Jupyter 输出回 Google Sheets。
这需要一点一次性设置。但是,如果您发现自己在工作表和 Jupyter 之间来回切换,或者偶尔想念电子表格的易用性,或者需要从 Jupyter 快速更新工作表中的数据,那么本教程就是为您准备的。
注意:我使用的是 Python 2.7.14 和 Anaconda 4 . 3 . 30 版本。你可以在这里看到我的完整环境,在这里看到我在第 2 部分中使用的完整示例笔记本。
第一部分——创建你的谷歌开发者证书
在将我们的 Jupyter 笔记本连接到我们的 google sheets 之前,我们首先必须创建允许访问我们的 google Drive 的 Google 开发人员凭据。这一部分有点长也有点难,但是你只需要对所有的笔记本和纸张做一次。
创建一个 Google 开发者项目
进入谷歌开发者控制台。
点击创建项目。
输入一个项目名称——我只为我所有的笔记本使用一个项目,而不是为每个项目创建一个新项目,所以我将我的项目命名为“Jupyter 和 Google Sheets”。如果愿意,您还可以重命名项目 ID。
点击创建。
启用 Google Drive API
创建项目后,Google 会带你回到开发者控制台。我必须刷新页面才能看到我的新项目。单击您的新项目。
点击左侧的汉堡菜单,进入 API & Services 仪表盘,选择API&Services>仪表盘。
点击 Google Drive API 。
点击启用。
好吧。现在我们已经创建了我们的 Google Drive 项目。让我们获得使用它的凭证。
创建凭据以使用 Google Drive API
启用 Google Drive API 后,Google 应该会带您进入项目的 Google Drive API 控制台。
点击创建凭证。
选择其他用户界面中的“您将从哪里调用 API?”。
选择用户数据用于“您将访问哪些数据?”然后点击我需要什么凭证?。
输入名称并点击创建客户端 ID 。
选择您的电子邮件地址,输入产品名称,然后单击继续。
下载您的凭证,并将其保存到您打算创建 Jupyter 笔记本的文件夹中。
创建服务帐户凭据
设置凭据的最后一步是创建服务帐户凭据,这样我们就可以将我们的客户端(我们刚刚创建的)连接到我们实际的个人 Google Drive。
返回凭证仪表板,创建一个服务帐户密钥。
选择新建服务账户,将服务账户名称设置为 Google Sheets ,将角色设置为服务账户用户,将密钥类型保留为 JSON ,点击创建。
将 JSON 文件保存到您打算创建 Jupyter 笔记本的文件夹中(确保文件名中没有像这样的空格)。
好吧。咻。我们有我们的谷歌开发人员证书,有权访问我们的谷歌驱动器,因此谷歌表。
第二部分—将 Jupyter 连接到 Google Sheets
现在让我们将 Jupyter 笔记本连接到 Google Sheet。
使用 conda install 和 pip 安装所需的软件包。
conda install pandas jupyter pip install gspread oauth2client df2gspread
上面所有的工作你只需要做一次。从现在开始,将数据从 Google Sheet 放入 Jupyter 笔记本变得很容易,反之亦然。
首先,你需要一张谷歌表。这可以是任何工作表。我们将使用我的美国首席执行官文章中的候选人得分数据。
要允许您的 Jupyter 笔记本访问 Google 表单,您需要与您在第一部分中创建的 Google 开发者凭证共享该表单。为此,请在 Jupyter 或文本编辑器中打开服务帐户凭据文件。
复制 client_email 属性。
回到你的谷歌表单,点击分享。
将 client_email 粘贴到人物框中,点击发送。
您需要对任何想要放入 Jupyter 笔记本的工作表重复上述步骤。
将谷歌工作表数据放入 Jupyter 笔记本
打开或创建 Jupyter 笔记本。我的笔记本的完整版本可以在这里找到。
导入库
import pandas as pd import gspread from oauth2client.service_account import ServiceAccountCredentials
连接到您的服务帐户
scope = ['https://spreadsheets.google.com/feeds'] credentials = ServiceAccountCredentials.from_json_keyfile_name('./<YOUR CREDENTIALS FILENAME>.json', scope) gc = gspread.authorize(credentials)
将谷歌电子表格中的数据导入 Jupyter
在电子表格的 url 中找到您想要导入的电子表格的 Google Sheet key ,如下所示。
复制密钥并将其粘贴到以下代码中。
spreadsheet_key = '1f0OwtmuTk1fTdhnn4tuvVcPCZjdb00D79dWw4RFhYs0' book = gc.open_by_key(spreadsheet_key) worksheet = book.worksheet("Candidate Data") table = worksheet.get_all_values()
输入要导入到上述代码中的工作表的名称。
如果您运行代码,您会看到表变量现在有了来自 Google 工作表的行,如下所示。
将工作表数据转换成熊猫数据框架
现在我们已经在 Jupyter 笔记本中有了工作表数据,我们想要将包含在表变量中的数据转换成一个干净的 pandas 数据框架,以便于操作。
##Convert table data into a dataframe df = pd.DataFrame(table[1:], columns=table[0]) ##Only keep columns we need df = df[['Order', 'Candidate', 'Position', 'Start Date', 'End Date', 'Years of Experience', 'Points']] ##Convert number strings to floats and ints df = df.apply(pd.to_numeric, errors='ignore') ##Convert date strings to datetime format df['End Date'] = pd.to_datetime(df['End Date'],infer_datetime_format=True) df['Start Date'] = pd.to_datetime(df['Start Date'],infer_datetime_format=True) df.head()
还有瓦拉!你已经将你的谷歌表单数据转换成了一个漂亮、干净的熊猫数据框架。如果您更改了工作表中的数据,并希望更新数据框架,只需重新运行以下所有代码:
book = gc.open_by_key(spreadsheet_key)
前进。
从 Jupyter 笔记本推送到 Google Sheet
我们还可以将 Jupyter 笔记本中的数据发送回 Google Sheet。
首先,让我们处理数据。数据帧的 groupby 功能很难在一个工作表中复制,所以我们就这么做吧。
candidate_groups = df.groupby('Candidate') scores_df = candidate_groups.sum() scores_df['Order'] = candidate_groups.first() scores_df.head()
这将创建一个新的分数数据框架,如下所示…
要将这些数据输出到名为“Jupyter Manipulated Data”的工作表下的同一个 Google 工作表中,只需运行以下代码。
from df2gspread import df2gspread as d2g wks_name = 'Jupyter Manipulated Data' d2g.upload(scores_df, spreadsheet_key, wks_name, credentials=credentials, row_names=True)
然后嘣。谷歌表用我们的 Jupyter 数据更新…
现在,在 Google Sheets 和 Jupyter notebook 之间来回推送数据简直易如反掌。我每天都在使用它,并不断为它寻找新的功能和工作流程。我希望你会和我一样觉得它很有用。
获取更多科技小技巧, 订阅我的简讯 !
如何组织你的研究项目:文件夹结构
一个文件夹结构,带有在线工具,让你的研究项目有条不紊。
所有的研究人员都知道以一种清晰而有条理的方式发表论文的重要性。然而,对于我们在研究项目的后端(即代码和数据层)组织和维护代码和数据的方式,情况往往就不一样了。项目的这一部分通常是不可见的,当截止日期临近时,保持项目有序的良好意图往往是最先飞出窗外的事情之一。虽然可以理解,但我认为这是一个有很大改进空间的领域。我们花了大部分时间与项目的这一部分互动,如果我们保持它的整洁和有组织性,我们可以节省很多时间和挫折!
在这一系列文章中,我将描述和分享一些我多年来复制、改编和开发的最佳实践,以保持我的研究和编码项目有条理。诚然,我没有比任何人更多的资格来谈论这个话题。然而,我认为缺少面向易于使用和实现,同时仍然有效地保持事物有序的最佳实践。因此,本系列文章旨在为这种最佳实践提供一个起点。我希望这是一个社区驱动的努力,所以如果你有额外的提示或建议,请通过评论或给我发电子邮件来分享,以便我可以整合和添加它们!
第一部分:文件夹结构
我想开始的第一个主题是文件和文件夹的组织。从正确的文件夹结构开始项目,甚至在编写第一行代码之前,可以提供一种简单且相对不引人注目的方式来保持有序。Matthew Gentzkow 和 Jesse Shapiro 的指南是一个很好的起点,该指南名为“社会科学的代码和数据:从业者指南”。它们描述了各种核心“规则”,值得一读。然而,他们的实际建议,至少对我来说,从来没有真正解决过我的组织问题。但这是一个很好的起点!基于他们的基本原则,我开发了一个适应版本的目录结构,它更加全面,同时仍然保持直观和易于使用。下图用图形表示了这一点:
这种文件夹结构背后的主要思想是,您有一个顶层项目文件夹,它包含 4 个子文件夹:0 _ 数据、1 _ 代码、2 _ 管道和3 _ 输出。我将在下面更详细地描述每个文件夹:
0_data 包含从外部来源检索或手动创建的所有输入数据。例如,这包括从数据库(如 Compustat)下载的数据,但也包括包含您手动分类的数据的 Excel 表。这里的核心原则是该文件夹中的任何内容都不应该被修改。此文件夹中的数据应该与您检索或手动创建的方式保持一致。
1_code 包含你所有的代码文件。这包括例如 Python、Stata、R 或 SAS(或其组合)的代码文件。此外,我建议以数字开头来命名代码文件,以表示执行的顺序。这使得文件应该以什么样的顺序执行变得显而易见(您还可以在. bat /中进一步形式化)。sh 文件,如果你想的话)。
2_pipeline 为 1_code 文件夹中包含的每个代码文件包含一个单独的子文件夹,它们根据名称(减去文件扩展名)进行对应。这意味着,例如, 1_code 中的代码文件“0_load_data.ipynb”将在 2_pipeline 文件夹中有一个名为“0_load_data”的子文件夹。主要思想是,由代码文件生成的所有输出最终都在它们对应的管道文件夹中。这使得理解数据如何在代码文件之间流动变得非常容易,因为数据位置指示了它是在哪里生成的。为了进一步组织生成的输出,我建议在每个子文件夹中包含以下文件夹: out 、 store 和 tmp 。
2_pipeline - > 子文件夹 - > out 包含您保存的文件,以便在将来的代码文件中加载它们。这些通常是当前代码文件的“最终产品”。
2_pipeline - > 子文件夹 - > store 包含您保存的打算加载到当前代码文件中的文件。例如,在需要一段时间来运行部分代码的情况下,可以使用这种方法,以避免每次需要间歇地将生成数据的进度保存到 store 文件夹时都必须重新运行这些部分。
2_pipeline - > 子文件夹 - > tmp 包含您出于检查目的或其他临时原因而保存的文件。基本原则是你不必担心 tmp 文件夹中的任何东西会被删除,因为它只是一个临时的目的。
3_output 包含任何要进入纸张的最终输出文件。这包括表格和图表等文件。
还有几个额外的原则值得一提:
- 您应该只从 0_data 文件夹或 2_pipeline 子文件夹中的 out 文件夹中加载数据。
- 您应该只从属于代码文件的 out 文件夹中加载数据,这些代码文件在您正在处理的当前代码文件之前执行。例如,当您在代码文件“ 2_process_data ”中工作时,千万不要从“ 5_run_analysis ”的 out 文件夹中加载数据。这是为了保证代码文件能够按顺序执行。
- 务必将工作目录设置为顶级项目文件夹。这使您能够使用相对路径来引用各种文件夹,从而使整个项目文件夹可移植。换句话说,使用相对路径,您可以将项目文件夹复制到另一台计算机,只要工作目录设置为顶级项目文件夹,所有代码都将正常工作。
- 我通常会将 0_data 、 1_code 、 2_pipeline 、 3_data 文件夹放在一个名为“experimental”的父文件夹中,并创建其他几个父文件夹,如:“administrative”、“explorative”和“paper”。通过这种方式,我也可以把我所有的其他文件,比如那些写论文的文件,组织好。
如果遵循这种文件夹结构,任何人都应该能够很容易地分辨出原始数据是什么,代码应该如何执行,以及数据如何在不同的代码文件之间流动。这不仅对试图使用或复制您的代码的其他人有益,而且当您在一段时间没有使用代码之后需要与代码进行交互时,这也是一个巨大的时间节省器。
但是等等,还有!
正如我前面提到的,从研究项目一开始就使用这样的文件夹结构是很重要的。然而,我完全理解,在热情地开始一个新的研究项目的过程中,不得不处理所有这些文件夹的创建是不太吸引人的。幸运的是,我为这个问题创建了一个解决方案!使用我的在线工具,在选择一些基本选项后,您可以简单地下载一个 zip 文件,其中已经为您设置了整个目录结构。只需将该文件夹解压缩到所需的位置,就可以开始了!
www.tiesdekok.com/folder-stru…
我还包含了 Python 的入门模板(都是。py 文件和笔记本)、Stata 和 R 代码,用于将工作目录更改为项目文件夹并创建管道文件夹。你所需要做的就是将你需要的模板文件复制到 1_code 文件夹中,并将其重命名为你想要对该文件执行的任何操作。然后,如果您在代码文件中修改 NAME 参数(如果您使用 Stata / R 还有 PROJECT_DIR 参数)并运行代码,它将自动检查相应的管道文件夹是否存在,如果不存在,则为您生成它。它还提供了一个特定于该代码文件夹的“管道”变量,以便您在保存文件时可以轻松地引用它。每个模板文件还包含如何加载和保存数据的参考示例,例如:
我希望这是一个有趣的阅读,如果你有意见,评论,或建议,请让我知道评论下面或给我发电子邮件!
如何在你梦想的公司找到一份数据科学家的工作——我的 Airbnb 之旅
流程、提示和一些资源
Photo by Kalen Emsley on Unsplash
我写这篇博客的原因
我一个月前刚开始在 Airbnb 的新工作,是一名数据科学家,我仍然觉得我在这里太幸运了。没人知道我有多想加入这家公司——我的办公桌前贴着 Airbnb 办公室的照片;我把我的 iPhone 壁纸设置成我站在 Airbnb 标志前的照片;我四次申请 Airbnb 的职位,但最后一次才收到招聘人员的回复…
以前别人问我“你最想去哪家公司工作?”我不敢说“Airbnb”,因为当我这么说的时候,他们回答我,“你知道有多少人想在那里工作吗?他们中有多少人最终被录取了?加油,现实一点。”
结果证明,没有什么是不可能的。由于我的许多朋友让我分享我的求职经历,我认为把它写下来并与人分享可能会有帮助。
一些数据……
概述我的求职过程:
- 应用:475
- 电话采访:50 次
- 完成数据科学带回家的挑战:9
- 现场面试:8 次
- 优惠:2
- 花费的时间:6 个月
正如你可能从数据中看到的,我不是一个强有力的候选人,因为,否则,我只会申请几个职位并收到一堆邀请。是的,我曾经超级弱;我曾经是那种浪费面试官时间的考生。但是“几个月前你是谁并不重要,重要的是你正在成为什么样的人。”
数据科学家工作少走的路
稍微介绍一下我的背景,我在国内某大学获得了经济学学士学位,在伊利诺伊大学香槟分校获得了工商管理硕士学位。毕业后,我做了两年的数据分析师,其中 7 个月在谷歌做合同工,另外 1 年 4 个月在一家初创公司。我的工作主要是编写 SQL 查询,构建仪表板,并给出数据驱动的建议。
在意识到我没有像预期的那样学习和成长后,我辞去了工作,申请了激励数据科学沉浸计划,这是一个在旧金山为期 12 周的训练营。我 4 次都没能通过统计面试进入新兵训练营,在第五次参加统计面试后被录取了。
galilet 教授的内容侧重于 Python 和机器学习,并且他们假设你已经有很强的统计学基础。不出所料,一开始我很纠结,因为我对编程了解不多,对统计也不太强。我别无选择,只能努力工作。在镀锌期间,我没有休息,没有娱乐,没有约会,除了每天超过 12 个小时的学习,什么都没有。后来,我对这些课程更加适应了。
然而,当我第一次开始找工作时,我仍然在面试中让自己尴尬了无数次。因为我和真正的数据科学家之间的差距是如此之大,即使我很努力,12 周的研究也远远不足以实现职业转型。于是我申请,面试,失败,再申请,再面试,再失败。好的一面是,每次我都能学到新的东西,变得更强一点。
2018 年 3 月,我辞去上一份工作,已经失业快一年了。我的银行账户上只有 600 美元,我不知道如何支付下个月的房租。更糟糕的是,如果我在 2018 年 4 月底之前找不到工作,我就必须离开美国,因为我的签证将到期。
幸运的是,经过这么多的练习和重复,我已经从一个不知道如何恰当地介绍自己,不记得拉索和里奇中哪一个是 L1,对编程算法一无所知的人,成长为一个知道自己已经准备好得到自己想要的东西的人。
当我进入 Airbnb 的最后一轮面试时,我手里拿着一份数据科学家的聘书;因此,我一点也不紧张。我最后面试的目标是做最好的自己,不留遗憾。这次面试是我经历过的最好的一次。他们给了我这份工作,所有的努力和不眠之夜都得到了回报。
Photo by Jackson Hendry on Unsplash
我很乐意分享的小贴士
- 知道你想要什么,设定你的目标,努力实现这个目标,永远不要退而求其次。
- 成长心态,这真的很重要(如果你没听说过这个成长心态动画视频)。不要说“我不擅长编码”,“我不擅长统计”。不是天赋的问题。不要用“天赋”来形容别人,作为自己懒惰的借口。你需要的是用正确的方法去学习,多练习几次,直到你很好。
- 记下你被问到的所有面试问题,尤其是那些你没有回答的问题。你可以再次失败,但不要在同一个地方失败。你应该一直学习和提高。
- 如果可能的话,和其他人讨论你不懂的问题。我真的很感谢我的同学和指导老师的帮助,每个人都非常支持并愿意互相帮助。
- 去当地的数据科学聚会,加入数据科学学习小组,与行业内的人联系,当你试图在 LinkedIn 上与陌生人联系时,发送一封个性化的短信……尽可能地扩展你的网络,你不知道哪一封会为你打开一扇门。
- 有时候,结果是运气和准备的结合,你只是这次运气不好。不要总是把失败归因于自己不够好。
如果我可以重新开始找工作,我会有什么不同的做法
- 不要在求职之初就去面试你想去的公司,除非你认为自己已经准备好去应聘了。
我从采访优步开始了我的求职过程,我对那个决定深感后悔。我搞砸了,以至于不能在优步获得其他团队的面试机会。大多数人将主要的科技公司视为梦想中的公司;但是,这些公司大多有一个严格的规定,如果你失败了一次,6 个月或 1 年内不能再参加面试。因此,你要确保在去这些公司面试之前做好准备。
- 缩小你想做的工作类型,以及不适合你的工作类型,这会节省你很多时间。
如果你曾经看过数据科学家的招聘信息,你就会知道责任有多广。有从事自然语言处理、计算机视觉、深度学习的数据科学家,也有从事 A/B 测试、产品分析的数据科学家。确定什么样的工作适合你,什么不适合,这将帮助你节省大量准备面试的时间。
就我而言,我跳过了所有要求博士学位和深度学习、计算机视觉等知识的招聘信息。但是我还有太多的领域需要学习和准备。下面是我在找工作时使用的资源的总结。记住,有太多的资源你可以用来学习,你可能会花很多时间只是搜索材料,请有所选择,并确保你充分利用它们。
数据科学面试准备资源
统计数据
- 可汗学院:非常好的学习基本概念。
- 数据科学家实用统计学:不错的一个,非常实用,强烈推荐。
- 杜克大学在 Coursera 上开设的统计学课程(以 R 语言授课)
概率问题
- brilliant.org:我在准备采访时购买了他们的会员资格,我发现这是脸书现场采访准备指南的推荐资料之一。
A/B 测试
- Google 的 Udacity A/B 测试课程:我看了两遍,写了这个课程的总结。
- 微软的 KDD 论文和幻灯片:A/B 测试是数据科学面试中常见的问题,但之前没有多少业外人士做过 A/B 测试,所以当我试图了解实验设计时,我搜索并阅读了约 15 篇论文。
- Exp 平台上的幻灯片和视频
- 公司科技博客,如 Airbnb 数据科学博客
机器学习
- 吴恩达在 Coursera 上发布的斯坦福大学机器学习课程
- 统计学习介绍:在 R 中的应用:我们在 galilep 使用的教科书之一
- 行动中的机器学习:我们在 galile 使用的另一本教科书
- 密歇根大学在 Coursera 上发布的 Python 专业应用数据科学
基本编程算法
- HackerRank :更加入门级的友好
- 从简单到中等水平的问题
- 破解编码面试:189 个编程问题及解答(Java 编写)
Python 数据操作(Pandas,Numpy)
- 数据营
- 提示:通过解决公司的带回家的挑战,我极大地改进了 Python 数据操作。实践是最好的学习方法。
稀有
- 抱歉,我不太用 R。通常在面试中,你可以使用 R 或 Python。
结构化查询语言
- Mode Analytics SQL 教程:我对 SQL 相当熟悉,但我还是会在每次 SQL 面试前浏览一遍,尤其是高级部分,以防万一。
产品意识/商业理解
一般面试问题
- 琳达·雷尼尔的 Youtube 频道:对一般的面试问题很有帮助。你也可以搜索其他视频来了解如何回答特定的面试问题。
其他资源
- 公司科技博客: Airbnb ,优步, LinkedIn ,网飞, Lyft , Pinterest , Stitch Fix , Quora , Yelp …应有尽有。学习的绝佳资源。
- 在技术面试前从 Glassdoor 收集公司的面试问题。
离别的思念
找工作只是我们人生旅程中的一段插曲。但是从长远来看,我们在这个过程中所表现出的勇气、激情和毅力将使我们受益。就我个人而言,我深深地相信下面的引用,并将永远继续相信它。希望它能像激励我一样激励你:
永远不要让别人告诉你,你做不到。如果你有梦想,就要捍卫它。人们自己做不到一些事情,他们想告诉你你也做不到。你想要什么,就去得到它。句号。” —海蓓娜斯的追求
Photo by Denys Nevozhai on Unsplash
如果你破产了,如何学习数据科学
去年,我自学了数据科学。我从数百个网上资源中学习,每天学习 6-8 个小时。同时在一家托儿所拿最低工资。
我的目标是开始一项我热爱的事业,尽管我缺乏资金。
因为这个选择,我在过去的几个月里完成了很多。我发布了我自己的网站,发表在一个主要的在线数据科学出版物上,并获得了一个竞争性计算机科学研究生项目的奖学金。
在下面的文章中,我给出了指导方针和建议,以便您可以制定自己的数据科学课程。我希望给别人工具,让他们开始自己的教育之旅。因此,他们可以开始在数据科学领域从事更有激情的职业。
快速笔记
当我说“数据科学”时,我指的是将数据转化为现实世界行动的工具集合。这些包括机器学习、数据库技术、统计学、编程和特定领域技术。
开始你的旅程的一些资源。
互联网是一个混乱的烂摊子。从中学习常常感觉像从消防水管的有趣一端喝水。
有更简单的替代方法可以帮你整理混乱的局面。
像 Dataquest 、 DataCamp 和 Udacity 这样的网站都可以教你数据科学技能。每个人都创建了一个教育计划,引导你从一个话题到另一个话题。每一个都不需要你做什么课程规划。
问题?它们花费太多,它们没有教你如何在工作环境中应用概念,它们阻止你探索自己的兴趣和激情。
还有一些免费的选择,比如 edX 和 coursera,它们提供深入特定主题的一次性课程。如果你从视频或课堂环境中学得很好,这些都是学习数据科学的绝佳方式。
Free Online Education Platforms
查看此网站,获取可用的数据科学课程列表。你也可以使用一些免费的课程。查看大卫·文丘里的帖子,或者开源 DS Masters (一个更传统的教育计划)。
如果你读书学得好,就看看数据科学从零开始这本书。这本教材是一个完整的学习计划,可以用在线资源补充。你可以在网上找到这本书的全文,或者从亚马逊网站(27 美元)得到一本纸质书。
这些只是为数据科学提供详细学习途径的免费资源中的一部分。还有很多。
为了更好地理解你在教育之旅中需要获得的技能,在下一节中,我将详细介绍一个更广泛的课程指南。这是高层次的,而不仅仅是一个课程或书籍的清单。
课程指南
Data Science Curriculum Guideline
Python 编程
编程是数据科学家的一项基本技能。熟悉 Python 的语法。了解如何以多种不同方式运行 python 程序。(Jupyter 笔记本 vs 命令行 vs IDE)
我花了大约一个月的时间复习了 Python 文档、Python 搭便车指南,以及 CodeSignal 上的编码挑战。
提示:留心程序员常用的解决问题的技巧。(读作“算法”)
统计学&线性代数
机器学习和数据分析的先决条件。如果你已经有了一个坚实的理解,花一两周时间温习关键概念。
特别关注描述性统计数据。能够理解一个数据集是一项价值连城的技能。
Numpy,熊猫,& Matplotlib
了解如何加载、操作和可视化数据。掌握这些库对你的个人项目至关重要。
快速提示:不要觉得你必须记住每一个方法或函数的名字,这需要练习。如果你忘记了,谷歌一下。
查看熊猫文档、 Numpy 文档和 Matplotlib 教程。有更好的资源,但这些是我用的。
记住,你学习这些库的唯一方法就是使用它们!
机器学习
学习机器学习算法的理论和应用。然后将您学到的概念应用到您关心的真实世界的数据中。
大多数初学者从使用来自 UCI ML 知识库的玩具数据集开始。摆弄数据,浏览指导式 ML 教程。
Scikit-learn 文档中有关于常用算法应用的优秀教程。我还发现这个播客是 ML 理论背后的一个伟大的(免费的)教育资源。你可以在上下班的路上或者健身的时候听。
生产系统
获得一份工作意味着能够获得真实世界的数据并将其转化为行动。
要做到这一点,你需要学习如何使用企业的计算资源来获取、转换和处理数据。
Amazon Web Services, Google Cloud, Microsoft Azure
这是数据科学课程中教授最少的部分。主要是因为你使用的具体工具取决于你要从事的行业。
然而,数据库操作是一项必需的技能。你可以在 ModeAnalytics 或 Codecademy 上学习如何用代码操作数据库。你也可以(便宜地)在 DigitalOcean 上实现自己的数据库。
另一个(经常)需要的技能是 版本控制 **。**你可以通过创建一个 GitHub 账户并使用命令行每天提交你的代码来轻松获得这项技能。
当考虑学习其他什么技术时,重要的是要考虑你的兴趣和激情。例如,如果你对 web 开发感兴趣,那么就去看看这个行业的公司所使用的工具。
执行课程的建议。
by Ugur Akdemir on Unsplash
1.概念会比你学习的速度更快。
有成千上万的网页和论坛解释常用数据科学工具的使用。正因为如此,在网上学习时很容易偏离主题。
当你开始研究一个课题时,你需要牢记你的目标。如果你不这样做,你就有被任何吸引你眼球的链接所吸引的风险。
解决方案,获得一个好的存储系统来保存有趣的网络资源。这样你就可以把材料留到以后,然后把注意力集中在与你当前相关的话题上。
My current Chrome Bookmarks Bar
如果你做对了,你就可以制定一个有序的学习路径,告诉你应该关注什么。你也会学得更快,避免分心。
警告,随着你探索自己感兴趣的新话题,你的阅读清单将很快增长到数百个。别担心,这引出了我的第二条建议。
2.不要有压力。这是一场马拉松,不是短跑。
拥有一个自我驱动的教育经常感觉就像试图阅读一个永无止境的知识图书馆。
如果你想在数据科学领域取得成功,你需要将你的教育视为一个终生的过程。
只要记住,学习的过程就是它自己的回报。
在你的教育之旅中,你将探索自己的兴趣,发现更多驱动你前进的动力。你对自己了解得越多,你从学习中获得的乐趣就越多。
3.学习->应用->重复
不要满足于仅仅学习一个概念,然后再去做下一件事。学习的过程不会停止,直到你能把一个概念应用到现实世界中。
by Allef Vinicius on Unsplash
不是每个概念都需要在你的投资组合中有一个专门的项目。但重要的是要脚踏实地,记住你正在学习,这样你才能对世界产生影响。
4.建立一个投资组合,这表明其他人可以信任你。
归根结底,怀疑是你在学习数据科学时将面临的最大逆境之一。
这可能来自别人,也可能来自自己。
你的作品集是你向世界展示你有能力并且对自己的技能有信心的方式。
因此,建立投资组合是你在学习数据科学时可以做的最重要的事情。一份好的投资组合可以让你找到一份工作,让你成为一名更自信的数据科学家。
在你的文件夹中装满你引以为豪的项目。
你是从零开始构建自己的 web 应用程序的吗?是自己做的 IMDB 数据库吗?你写过有趣的医疗保健数据分析吗?
把它放在你的文件夹里。
只要确保文章可读,代码被很好地记录,并且投资组合本身看起来不错。
这是我的作品集。发布您的作品集的一个更简单的方法是创建一个 GitHub 资源库,其中包含一个很棒的 ReadMe(摘要页面)以及相关的项目文件。
这是一个美观又简单的 GitHub 文件夹。对于更高级的投资组合,请查看 GitHub-IO 来托管您自己的免费网站。(举例)
5.数据科学+ _______ =充满激情的职业
填空。
数据科学是一套旨在改变世界的工具。一些数据科学家构建计算机视觉系统来诊断医学图像,其他人遍历数十亿个数据条目来发现网站用户偏好的模式。
数据科学的应用是无穷无尽的,这就是为什么找到让你兴奋的应用是很重要的。
如果你找到了自己感兴趣的话题,你会更愿意投入工作去完成一个伟大的项目。这引出了本文中我最喜欢的一条建议。
当你在学习时,睁大眼睛寻找让你兴奋的项目或想法。
一旦你花了时间学习,试着把这些点联系起来。找到让你着迷的项目之间的相似之处。然后花些时间研究从事这类项目的行业。
一旦你找到一个你热爱的行业,就把获得该行业所需的技能和专业技术作为你的目标。
如果你能做到这一点,你将会把你对学习的努力和奉献变成一份充满激情和成功的事业。
结论
如果你喜欢探索这个世界。如果你对人工智能着迷。那么无论你的情况如何,你都可以闯入数据科学行业。
这并不容易。
为了激励你自己的教育,你需要毅力和纪律。但是如果你是那种能推动自己进步的人,你完全有能力自己掌握这些技能。
毕竟,这就是作为一名数据科学家的意义所在。好奇心强,自我驱动,对寻找答案充满热情。
想要更多高质量的数据科学文章,关注我。👍
保持学习数据科学的动力。
关于如何在你的教育之旅中保持一致的建议。
Photo by Victoria Heath on Unsplash
在过去的几周里,我暂停了写作,专注于申请实习。但是当我今天开车去上课的时候,一个问题开始困扰我。
互联网上有这么多可供我们使用的资源,为什么我们很难保持学习数据科学的动力呢?
在过去的一年里,我不得不非常努力地保持学习数据科学的动力。我完全用(免费)网络资源制作了自己的课程,每天,不管我的动机如何,我都会留出至少四个小时来拓展我的技能。
这种追求祝福了我的人生,很多都是从奋斗中得来的。就在过去的六个月里,我建立了我的投资组合网站,并创建了一些非常惊人的数据科学项目(分析了 140 万个媒体故事)。
然而,去年也经历了非常艰难的日子。那些日子里,尽管我已经取得了很大的成就,但我仍在努力奋斗,几乎要放弃。
根据我的经验,无论你走哪条通往数据科学的道路,你都将面临可能会扼杀你动力的挑战。你会承担一些可能让你觉得自己渺小无力的任务,或者是在你耳边低语“这太难了。你应该放弃”。
但你不必一个人去。在这篇文章中,我将描述一些可能威胁你学习数据科学动机的陷阱。我希望通过意识到这些障碍,你在数据科学领域的职业道路会比我更容易。让我们开始吧。
在开始之前,确保数据科学是合适的。
Photo by Glenn Carstens-Peters on Unsplash
数据科学是一份性感的工作。薪水很高,工作很有趣,头衔也带来了巨大的声望。因此,许多人想成为数据科学家。
不幸的是,即使你对数据科学充满热情,并且能把工作做得非常好,你也不能强迫自己热爱这个过程。这给有抱负的数据科学家带来了一些令人不安的建议。
你可以对数据科学着迷,但如果你讨厌日复一日的任务和随之而来的感觉,那就很难保持你的动力。
对于大多数刚开始学习的人来说,你可能需要几个月的时间才能真正进入教育的“实践”阶段。(在那里你实际上建立了全面的数据科学项目。)在这一点上,意识到你讨厌这个过程对你个人来说是一个沉重的打击。为了省去你的麻烦,我整理了一份数据科学家面临的一些常见挫折的清单。
如果你选择从事数据科学领域的职业,以下是你需要适应的一些任务和感受:
感受:
- 学不完的感觉。
- 力不从心/不知所措的感觉。
- 失败了很多很多次才获得一次成功的感觉。
- 那种你花了几周时间做的事情失败或被忽视的感觉。
任务:
- 自学一门你一无所知的技能。
- 花几十个小时来回答一个看似简单的问题。
- 将自己与(表面上)更成功的人进行比较。
- 与不了解(或不关心)数据科学的人交流。
- 做 95%准备,5%执行的工作。
- 做很多不“性感”的工作。(数据库工作、数据管理等)
- 编码…大量编码。
我的建议是:在你跳下去之前做好你的研究。
数据科学是一个令人敬畏的职业,但随之而来的肯定是一些严重的挫折。
对于有抱负的数据科学家,我鼓励你在投身数据科学事业之前,了解更多关于普通数据科学家所做的工具和任务的知识(本文、此视频)。
开始的时候,做一点点研究将会大大增加你完成教育之旅的机会。
学会如何应对焦虑。
当你开始研究如何成为一名数据科学家时,你会发现一个关于这个职业的不幸事实。也就是说,成为一名数据科学家需要广泛而深入的工具、技术和技能知识。所有这些都让成为数据科学家的前景变得非常可怕。
你可能会开始问这样的问题:我必须回学校拿个博士学位吗?没有工作经验的我如何获得这些技能?我有能力学会所有这些吗?
Photo by Nathan Dumlao on Unsplash
当你踏上通往数据科学的旅程时,你会感到很多焦虑和压力。这是完全正常的反应,每个处于你的处境的人都会有同样的感觉。
要知道,在你教育旅程开始的这段时间对你的长期成功绝对至关重要。你在最初几周采取的行动将决定你为自己树立什么样的习惯,结果将决定你如何应对整个旅程中压力和焦虑的负面影响。
如果你能从一开始就找到应对压力和焦虑的健康方法,随着时间的推移,你的信心和动力将变得不可动摇。
然而,这里有一个需要解决的危险。在这段时间里,避免用不健康的方式应对负面压力是绝对重要的。
不幸的是,健康和不健康在很大程度上取决于你是谁。但在我自己的旅程中,我已经认识到一些不健康的应对机制,它们在过去损害了我的动力。
这里有一些你应该避免的处理压力的不健康方式。
避免不知所措:购买全包课程或教材。
这一次真的让我栽了大跟头。每当我开始对我需要学习的大量东西感到不知所措时,我就有一种强烈的冲动,想放弃自学,去购买别人的教案。
如果我最终真的买了包罗万象的课程或教材,学习就开始感觉像是别人交给我的苦差事。更糟糕的是,因为我没有努力去计划我需要学习什么,我变得和我为什么要学习一个特殊的技能或概念脱节了。结果呢?每当我购买在线课程时,我快速学习的动力就消失了。
**为什么要避免这种情况:**即使你可以从别人的课程中学到很多东西,我仍然建议不要这样做。为什么?因为在你迈向数据科学的旅程中,最重要的技能是能够自学。
自学是识别你的技能组合中的漏洞,研究新技术来缩小差距,并制定可行的计划来获得该技能的过程。如果你在旅途中仅仅依靠手把手的课程,你在这个过程中的经验会少得多。
随着时间的推移,这真的很糟糕。当你真正得到这份工作时,你可能会面临一个非常独特的、特定领域的、你几乎没有经验的问题。如果没有一个 MOOC 或教科书可以教你所需的技能,你将会非常艰难。
避免压力:推迟,或者指定一天来学习。
在旅程开始时,你可能犯的最大错误就是推迟学习。如果你觉得自己太忙也没关系,如果你想在旅途中获得成功,你需要每天留出时间来学习。
如果你不每天练习和学习,你的动力会很快消失,你将不可避免地对一个潜在的令人满意的职业失去兴趣。
**为什么要避免这些:**追求数据科学是一场马拉松,而不是短跑。这项工作所需的技能是如此的多样化,只有通过长时间的不懈努力才能获得。如果你试图在短时间内学习,你最终会耗尽你自己,熄灭你继续下去的动力。
更糟糕的是,如果你把学习推迟到你觉得有时间的时候,你可能永远也不会开始你的旅程。而且,如果你这样做了,你就会在你的头脑中形成这样一种观念:学习是你在时间允许的情况下做的事情。在数据科学中,这种心态是职业生涯的快速终结。
我的建议是:尽早养成健康的习惯。
无论你是全职工作,想做一个职业支点,还是正在读大学,想走一条让你兴奋的职业道路;无论哪种方式,你都需要找到让你克服压力的健康习惯。
几个你可以从一开始就养成的健康习惯:
- 每天留出时间学习新东西。
- 尝试加入数据科学社区。你会惊讶有多少人会认同你的焦虑感。
- 如果你因为学习而感到疲惫和焦虑,那就休息一段时间,用你最近学到的东西建立一个项目。这是一个减压的好方法,可以让你重新认识到你为什么要学习。
学会如何应对不知所措。
当你真正开始学习数据科学技能时,你会注意到有很多事情需要关注。此时此刻,我可能会列出未来 6 个月内我想获得的 8-12 项技能。
不幸的是,这不仅仅是我。在您迈向数据科学的旅程中,拥有一长串您想要学习或实践的技能将是每天的现实。只要看看 Swami Chandrasekaran 的数据科学路线图,你就会明白我在说什么。
当我第一次看到这个路线图时,我的直觉反应是被这个清单的庞大所淹没。一个人怎么可能指望自己学会所有这些?到目前为止,我所学到的只是列表中的一小部分,我真的取得了任何进步吗?
不幸的是,这种不知所措的感觉将伴随你走向数据科学的旅程。
有一天,你可能会觉得你已经掌握了一个概念/技能,只是意识到有五个新的东西需要添加到你的学习清单中。随着时间的推移,随着你需要学习的技术变得更新更复杂,这个问题只会变得更糟。
如果你没有想出一个计划来处理这种不知所措的感觉,有两件事会发生在你身上。
首先,你会开始对你需要掌握的技能的广度感到非常焦虑。如果这种感觉继续恶化,你会发现越来越难专注于一件事。结果,你可能会花几个月的时间在技能之间摇摆不定,拼命想一次学会所有技能,最后当你没有掌握任何一项技能时,你会感到沮丧。
第二,你会开始因为你需要学习的技能数量而感到压力。这样下去,你学习的动力就岌岌可危了。过去的每一天都会让你更加沮丧,因为你会将已经取得的进步与尚未完成的艰巨任务进行比较。在某些时候,你会开始相信你迄今为止取得的任何进展都是毫无价值的,成为一名数据科学家的任务是不可能的。
如果允许这两种感觉中的任何一种在你的头脑中增加重量,它们将慢慢粉碎你学习数据科学的动力。但是不要担心,这些负担可以通过深思熟虑的计划和战略重点在早期得到解决。
我的建议是:保持条理,保持短视。
数据科学本质上是一个广阔的领域,掌握如此多样的技能的唯一方法是一点一点地学习,一次学习一项技能。不管你选择如何从事数据科学,你都需要制定某种线性的、有组织的学习计划。这将有助于您通过一次专注于一项技能来应对数据科学技能集的广度。
如果你想建立自己的课程,你可以选择像 Swami 那样建立一个端到端的路线图。然而,你可能会开始对清单的深度感到不知所措。
这就是有点近视真正有帮助的地方。
根据我的经验,处理不知所措的感觉的最好方法是设定短期目标,将你的注意力集中在最重要的技能上。我的原则是,在任何时候,我都应该有一个清单,上面列有我下个月应该掌握的三项最重要的技能。
整个月我的注意力都集中在学习这三项技能上,我取得的任何进步都让人觉得非常充实和值得。当我觉得自己在进步时,激励自己每天学习就变得容易多了。在月末,我会重新评估我的技能,并尝试确定我应该关注的三个更有价值的技能。
如果你想自己做这件事,只需做以下几件事。问问你自己,“根据我现在所学的,接下来我需要的三个最重要的技能是什么?”把它们写下来,然后坚持到下一步去学习。
如果你想知道从哪里开始,或者你应该以什么顺序学习数据科学技能,请查看下面链接的我以前的帖子。在这个故事中,我给出了指导方针和建议,以便您可以执行自己的数据科学课程。
去年,我自学了数据科学。我从数百个在线资源中学习,学习了 6-8 个小时…
towardsdatascience.com](/how-to-learn-data-science-if-youre-broke-7ecc408b53c7)
结论
归根结底,我们学习数据科学的动力是我们拥有的最宝贵的资源。如果我们要持续地掌握我们的手艺,我们需要保护我们的动机,使其免受威胁消灭它的挑战。
具体来说,我们需要对焦虑或不知所措的感觉保持警惕。这些负担可以通过健康的学习习惯以及有组织和有意识的专注来解决。
如果你可以保护和培养你学习数据科学的动机,那么没有什么可以阻挡你。你将拥有不可动摇的决心,推动你成为尽可能最好的数据科学家。
保持热情。保持动力。感谢阅读。