TowardsDataScience 博客中文翻译 2019(三百五十五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

MVA:最低可行分析

原文:https://towardsdatascience.com/mva-minimum-viable-analysis-63b1e838ca08?source=collection_archive---------10-----------------------

它意味着什么,如何在实践中使用它,为什么你需要它

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

Image Source

数据科学家天生注重细节。你现在可能已经注意到了。你能责怪我们吗?我们花时间在粒度数据集上,寻找错误,清理错误,建立预测模型,制作可视化效果,得出见解,并将这些见解传达给利益相关者,希望推动影响

所有这些事情都需要大量的关注细节,所以我们知道如何关注小事情是件好事。但是每个故事都有两面性。

问题是

当被给予一个请求或业务问题去解决时,我们有一种抓住细节而忽略大局的倾向。让我用 Greg Reda 和他关于自由数据科学家生活的伟大文章中的一个例子来详细说明一下:

您会收到以下请求:“销售代表应该获得的最佳销售线索数量是多少?我们希望方向变得更好。”

作为数据科学家,我们听到“最佳数字”,我们开始考虑做复杂的数学和建立模型。我们最终忽略了最重要的部分:“我们想在方向上变得更好”——我们的利益相关者告诉我们“我们现在对此知之甚少——救命!”

如果我们在听到“最佳数字”后停下来,继续走这条路,很可能我们会在一个复杂的问题上花费数小时。只有在完成之后,我们才意识到利益相关者需要更简单的东西。这个问题困扰着数据科学家,原因有几个。

首先,数据科学问题通常是开放式的。总是有另一个直觉要遵循,另一个模型要迭代,或者另一个可视化要产生。可能性确实是无穷无尽的。当我们不小心的时候,我们会掉进这些兔子洞,寻找越来越好的解决问题的方法。与此同时,时间正以惊人的速度流逝。这段时间用在其他地方会更好。

第二,**沟通就是全力以赴的努力。**利益相关者经常会说一套做一套。作为数据科学家,我们经常以一种方式解释事情,而实际上这是一个完全不同的故事。我们陷入了一种的共识错觉,双方都认为对方理解对方。为了解决这个问题,我们最终与我们的利益相关者反复讨论,直到我们最终把事情解决。同样,这不仅令人沮丧,而且浪费了我们最宝贵的资源:时间。

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

Image Source

输入最低可行分析

所以我们知道这是一个问题,但是我们如何解决它呢?简而言之,就是从简单开始,从那里迭代。生产一些东西,尽快得到反馈。如果这听起来很熟悉,那是因为确实如此。产品人员知道这是最小可行产品或 MVP,这个术语在 21 世纪初由史蒂夫·布兰克和埃里克·里斯推广开来。

数据科学家可以利用非常相似的方法。这不仅有助于我们解决本文前面提到的问题,还会产生更有见地和更频繁的结果。我们称之为最小可行分析或 MVA。

这里的想法是我们更喜欢渐进的过程,不要假设我们的利益相关者需要最复杂的解决方案。产生最小可行分析的过程非常简单。我将在下面列出这些步骤的简明版本,然后在后面进行更详细的描述。

产生最小可行分析的步骤:

  • 确保你完全理解手头的问题
  • 产生解决问题的快速、表面层次的洞察力
  • 将结果反馈给利益相关者,并听取他们的想法
  • 要么结束分析,要么深入研究

首先,你需要尽可能多的时间来思考这个问题。这可能意味着与你的利益相关者进行额外的一对一沟通来澄清事情。这可能意味着花一些时间回顾项目过去的工作,或者向其他队友提供有用的信息。无论你需要做什么,在你开始分析并得出你的最小可行分析之前,花时间站稳脚跟是非常值得的。

从一些基本的探索性工作或情节开始。从那里开始,用你能想到的最简单的方法解决问题,以产生你的表层洞察力。一旦完成,是时候交流你的结果了。确保它们易于理解,这样你和你的利益相关者就在页面上了。

通常,他们会给你两种反馈中的一种。要么你会得到“酷,这正是我需要的”或“这很好,但继续。”根据他们的回答,要么总结分析,要么深入问题。很简单,对吧?

包扎

**实际上,你会对利益相关者对你的最低可行分析的满意程度感到震惊。**通过不假设他们需要最复杂或最优的解决方案,你为自己和公司节省了无数的时间,这些时间本可以用在其他项目上。所以享受这些其他的项目并且记住:仅仅因为你能,并不一定意味着你应该

感谢阅读!请随意查看我下面的一些类似文章,并订阅我的简讯以接收任何新内容。

你可以在 Medium 上关注我更多类似的帖子,也可以在 Twitter 上找到我。想了解更多关于我和我在做什么,请查看我的网站。

获得 Apache Spark 的 Databricks 认证后,我的 10 条建议

原文:https://towardsdatascience.com/my-10-recommendations-after-getting-the-databricks-certification-for-apache-spark-53cd3690073?source=collection_archive---------2-----------------------

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

Databricks Certified Developer Badget

几个月前,我开始准备获得 Apache Spark 的 Databricks 认证。这并不容易,因为没有太多关于它的信息,所以为了促进自我准备,我将分享 10 个有用的建议。

建议 1:在开始准备之前安排好考试

这是唯一的非技术性建议,但也是所有 9 个建议中有用的。当你有了参加考试的期限,你就有了更多学习的理由和压力。在这种情况下,对于考试来说,5-7 周的准备会让你为成功的结果做好准备,尤其是如果你有使用 Apache Spark 的工作经验。在网页上注册,你将花费300 美元,如果你第一次尝试失败,你将获得 1 次额外机会(我的建议是在接下来的 2 周内重新安排第二次尝试的最大次数)。你需要在 3 小时内回答 40 个多项选择问题的最低分数 65% 并且你可以参加 Python 或 Scala 的考试。

Basic exam information

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

Scheduling the exam makes you focus on practicing

推荐 2:无论是 PySpark 还是 Spark Scala API 对于考试来说都差不多

如果你发现自己在 Spark 语言 API 使用 Python 还是 Scala 的问题上左右为难,我的建议是不要太担心,因为这个问题不需要对这些编程语言有深入的了解。例如,您可以找到这种类型的问题,其中代码片段(Python 或 Scala)提供给您,您需要确定哪一个是不正确的。

*//Scala*
**val** df **=** spark.read.format("parquet").load("/data/sales/june")
df.createOrReplaceTempView("table")*#Python*
df = spark.read.orc().load("/data/bikes/june")
df.createGlobalTempView("table")*#Python* **from** **pyspark.sql** **import** Row
myRow = Row(3.14156, "Chicago", 7)**import** **org.apache.spark.sql.functions.lit**
df.select(lit("7.5"), lit("11.47")).show(2)

你能找到不正确的代码吗?

所以面对这种问题记住 Spark data frame(20%-25%的问题 )、RDDs、SQL、Streaming 和 Graphframes 中的结构和主要选项。例如,这些是 Spark 数据帧中的写和读核心结构。

#Read
DataFrameReader.format(...).option("key","value").schema(...).load()
#Read modes: permissive (default), dropMalformed and failFast.#Write
DataFrameWriter.format(...).option(...).partitionBy(...).bucketBy(...).sortBy(...).save()
#Save modes: append, overwrite, errorIfExists (default) and ignore.

建议 3:在头脑中用 Spark 数据帧和 SQL 练习“执行”代码

如果你想得到上面代码的输出,你做得很好,因为在测试期间,你不允许检查任何文档,甚至没有纸来做笔记,所以你会发现另一种问题,你需要确定正确的选择(可能不止一个),产生基于一个或多个表显示的输出。

#Table
+---------+---------+
|     Name|      Age| 
+---------+---------+
|    David|       71|
| Angelica|       22|
|   Martin|        7|
|      Sol|       12|
+---------+---------+#Output needed
# Quantity of people greater than 21df = spark.read.format("csv")\
  .option("header", "true")\
  .option("inferSchema", "true")\
  .load("/names/*.csv")
df.where(col("Age")>21).count()df = spark.read.parquet("/names/*.parquet")\
  .option("inferSchema", "true")\
df.where("Age > 21").count()logic = "Age > 21"
df = spark.read.("/names/*.parquet")\
  .option("inferSchema", "true")\
df.where(logic).count()df =spark.read.format("json").option("mode", "FAILFAST")\
  .option("inferSchema", "true")\
  .load("names.json")
df.where("Age > 21").count()

你能找到正确的代码吗?提示:存在不止一个。

这种问题不仅是关于数据帧的,在 RDD 问题中也会用到,所以要仔细研究一些函数,如 map、reduce、flatmap、groupby 等。我的推荐是查看书学习火花尤其是第三章和第四章

建议 4:理解基本的 Spark 架构

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

Do you feel familiar with these components? [Spark documentation]

了解 Spark 架构 ***(占考试的 15%】***意味着不仅要阅读官方文档并了解模块,还要发现:

  • Spark 中简单或复杂的查询是如何执行的?
  • Spark 的不同集群管理器
  • “懒惰评估”、“动作”、“转换”是什么意思?
  • Spark 应用程序的层次结构
  • 集群部署选择
  • Spark 工具集的基本知识

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

Spark’s toolset [Spark: The Definitive Guide]

Spark Architecture 尝试的问题是,检查一个概念或定义是否正确。

What means RDDs? What part of Spark are?Resilent Distributed Dataframes. Streaming API
Resilent Distributed Datasets. Structured APIs
Resilent Distributed Datasets. Low lever APIs

为了在建筑方面更进一步,我推荐阅读《Spark:权威指南》一书的第 2、3、15 和 16 章。

建议 5:识别 Spark 结构化流中的输入、接收和输出

大约 10%的问题 是关于 Spark 结构化流*主要是尝试让您识别出不会产生错误的正确代码,以达到您需要清楚本模块中的基本组件和定义。

在这种情况下,该代码从 Github 上的官方 Spark 文档报告中获得,并显示了从套接字获取数据、应用一些基本逻辑并将结果写入控制台并完成输出模式的基本字数。

*# Start running the query that prints the running counts to the console* **from** **pyspark.sql** **import** SparkSession
**from** **pyspark.sql.functions** **import** explode
**from** **pyspark.sql.functions** **import** split

spark = SparkSession \
    .builder \
    .appName("StructuredNetworkWordCount") \
    .getOrCreate()lines = spark \
    .readStream \
    .format("socket") \
    .option("host", "localhost") \
    .option("port", 9999) \
    .load()

*# Split the lines into words*
words = lines.select(
   explode(
       split(lines.value, " ")
   ).alias("word")
)

*# Generate running word count*
wordCounts = words.groupBy("word").count()query = wordCounts \
    .writeStream \
    .outputMode("complete") \
    .format("console") \
    .start()

query.awaitTermination()

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

[Spark documentation]

本模块的问题将要求您识别正确或不正确的代码。它将组合不同的输入源(Apache Kafka、文件、套接字等)和/或接收器(输出),例如 Apache Kafka、任何文件格式、控制台、内存等。以及输出模式:追加、更新和完成。为了练习这个问题,请阅读《火花:权威指南》一书的第 21 章。

*我知道存在数据流,但它是低级 API,不太可能出现在考试中。

建议 6:练习火花图算法

像建议 5 一样,你需要识别的图形算法很少,所以我的建议是首先检查图形和图形框架*(5%–10%的问题)的概念,然后练习这些算法:

  • PageRank
  • 入度和出度度量
  • 广度优先搜索
  • 连接的组件

例如,在这里,我们基于两个数据帧创建一个 GraphFrame,如果您想进行更多的练习,您可以在 Databricks 上的 GraphFrame 用户指南中找到此代码和完整的笔记本

**from** functools **import** reduce
**from** pyspark.sql.functions **import** col, lit, when
**from** graphframes **import** *vertices = sqlContext.createDataFrame([
  ("a", "Alice", 34),
  ("b", "Bob", 36),
  ("c", "Charlie", 30),
  ("d", "David", 29),
  ("e", "Esther", 32),
  ("f", "Fanny", 36),
  ("g", "Gabby", 60)], ["id", "name", "age"])edges = sqlContext.createDataFrame([
  ("a", "b", "friend"),
  ("b", "c", "follow"),
  ("c", "b", "follow"),
  ("f", "c", "follow"),
  ("e", "f", "follow"),
  ("e", "d", "friend"),
  ("d", "a", "friend"),
  ("a", "e", "friend")
], ["src", "dst", "relationship"])g = GraphFrame(vertices, edges)
print(g)

*在 Graphframes 出现之前也有 GraphX(现在仍然存在),但对于第一个,现在使用得更多。

建议 7:理解构建 Spark ML 管道的步骤

Spark ML* ( 10%考试 )是捆绑了很多机器学习算法的模块,用于分类、回归、聚类或者用于基础统计、调优、模型选择和流水线。

在这里,您需要重点了解一些必须知道的概念,如构建、训练和应用训练模型的步骤。例如,强制所有算法只有数字变量,所以如果你有一个字符串列,你需要使用一个**StringIndexer**方法一个**OneHotEncoder**编码器,所有的变量都需要在一个向量中,所以我们需要使用类**VectorAssembler**来最终将所有的转换分组在一个**Pipeline**

**from** **pyspark.ml.feature** **import** StringIndexer
indexer = StringIndexer()\
  .setInputCol("month")\
  .setOutputCol("month_index")**from** **pyspark.ml.feature** **import** OneHotEncoder
encoder = OneHotEncoder()\
  .setInputCol("month_index")\
  .setOutputCol("month_encoded")**from** **pyspark.ml.feature** **import** VectorAssembler
vectorAssembler = VectorAssembler()\
  .setInputCols(["Sales", "month_encoded"])\
  .setOutputCol("features")**from** **pyspark.ml** **import** Pipeline
transfPipeline = Pipeline()\
  .setStages([indexer, encoder, vectorAssembler])fitPipeline = transfPipeline.fit(trainDataFrame)

*Spark MLlib 是一个基于 RDD 的 API,从 Spark 2.0 开始进入维护模式,因此 Spark ML 是主要的 ML API,并且是基于数据帧的。

建议 8:认可火花转化、行动等等

回到 Spark RDDs ( 15%的问题 )一个问题可能类似于“选择所有变换(宽/窄)或动作的备选项”,所以你需要确保你认识到它们中的大多数。你在 Spark 文档里有很好的解释。

另一个重要的主题是很好地理解这些主题:

  • 广播变量
broadcastVar = sc.broadcast([1, 2, 3])
broadcastVar.value
  • 累加器
  • RDD 持久性
  • 将功能传递给 Spark
  • 合并,重新分配
What is the method of persistence cache()?MEMORY_ONLY
MEMORY_AND_DISK
DISK_ONLY
OFF_HEAP

建议 9:不要浪费时间构建 Spark 环境或获取培训数据

是啊!我知道你想学习 Medium 上的许多精彩的教程,但是为了准备这次考试,我强烈建议你选择其中一个选项,让你专注于内容而不是配置。我更喜欢 Databricks ,因为你得到一个配置好的小型 Spark 集群,可以免费开始练习。

[## 数据块-登录

编辑描述

community.cloud.databricks.com](https://community.cloud.databricks.com/login.html) [## 谷歌联合实验室

编辑描述

colab.research.google.com](https://colab.research.google.com/notebooks/welcome.ipynb) [## 微软 Azure 笔记本电脑

提供对运行在微软 Azure 云上的 Jupyter 笔记本的免费在线访问。

notebooks.azure.com](https://notebooks.azure.com/) [## 内核| Kaggle

编辑描述

www.kaggle.com](https://www.kaggle.com/kernels)

如果你需要一些数据来练习,我推荐这个 Github 仓库,在那里你可以有 CSV,JSONs,Parquet,ORC 文件。

建议 10:如果你是 Spark 的新手,可以考虑阅读这些书籍

您在这条路上了解 Apache Spark 的朋友有:

现在,您已经准备好成为一名认证的 Apache Spark 开发人员:)

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

Always keep learning

PS 如果你有任何问题,或者想要澄清一些事情,你可以在 TwitterLinkedIn 上找到我。另外,如果你想探索云认证,我最近发表了一篇关于谷歌云认证挑战的文章。

[## 我如何完成谷歌云认证挑战?

在按照谷歌推荐的 12 周准备后,我通过了云工程师助理考试,在这里…

towardsdatascience.com](/how-i-could-achieve-the-google-cloud-certification-challenge-6f07a2993197)

**更新:**该认证将于 10 月 19 日截止,现在面向 Apache Spark 2.4 的 Databricks 认证助理开发人员提供相同的主题(重点关注 Spark 架构、SQL 和数据框架)

更新 2(2021 年初) : Databricks 现在还提供 Apache Spark 3.0 考试的 Databricks 认证助理开发人员。与 Spark 2.4 考试相比,Spark 3.0 考试还询问了 Spark 3.0 中的新功能,如自适应查询执行。我强烈推荐这些优秀的 Databricks 认证开发人员准备 Spark 3.0 实践考试[链接:【https://bit.ly/sparkpracticeexams】T2]。模拟考试包括解释和文档的静态 PDF,类似于真实考试中的内容。

我最喜欢的 5 个数据科学投资组合

原文:https://towardsdatascience.com/my-5-favorite-data-science-portfolios-11ee8f95fc96?source=collection_archive---------12-----------------------

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

Photo by Aziz Acharki on Unsplash

本周早些时候,我发表了一篇关于如何创建惊人的数据科学组合的文章:

[## 如何创建令人惊叹的数据科学产品组合

展示你的作品并脱颖而出

towardsdatascience.com](/how-to-create-an-amazing-data-science-portfolio-1ea4bc74ceee)

在文章的最后,我贴了一个链接,链接到我喜欢的 Tim Dettmers 的作品集。后来,有几个人让我编制一份更大的伟大数据科学投资组合和项目的清单。所以,我们开始吧!我最喜欢的 5 个数据科学投资组合。

国际电睡眠与电麻醉学会

虽然不是作品集,而是一个项目,但我认为这是一个很好的尝试和范例。

[## iSee:使用深度学习从人脸上移除眼镜

Melissa Runfeldt 是 2016 年夏季硅谷数据科学会议的 Insight 校友,在那里她构建了一个深入的…

blog.insightdatascience.com](https://blog.insightdatascience.com/isee-removing-eyeglasses-from-faces-using-deep-learning-d4e7d935376f)

Melissa Runfeldt 在定义和激发她的问题方面做得很好,讨论了她是如何收集数据的,并用结果图像解释了她的方法。所有这些对于非技术人员来说都很容易理解(至少在高层次上)。不过,我认为有一样东西不见了,那就是代码的链接。

假新闻分类器

这是一种更高级的展示项目的方式,但我相信它确实做得很好。

[## 让新闻再次可信

会见项目背后的团队。毕业于加州大学伯克利分校的信息和数据科学硕士课程,我们是…

makewscredibleagain . github . io](https://makenewscredibleagain.github.io/)

该网站提供了一个很好的、简单的方法概述,甚至还提供了一种将你自己的新闻文章分类的方法(不过,它现在似乎已经坏了)。此外,该网站还链接了一系列关于该方法和结果的更深入的媒体文章。尽管如此,我还是很难找到这个团队写的代码的链接。

斯坦福机器学习项目

这个例子不是一个人的作品集,而是一个班级的作品集。斯坦福大学的机器学习课程由一个项目组成,报告和海报可以在网上看到:

[## CS229:机器学习-2018 秋季项目

编辑描述

cs229.stanford.edu](http://cs229.stanford.edu/proj2018/)

在这里你会发现很多非常好的报道,比如关于躲避大规模监控的的报道:对面部识别模型的对抗性攻击。这份报告在本质上更具学术性,但在解释问题、数据和实验结果方面做得很好。它甚至链接到 GitHub 上的代码!

FastML

FastML 是一个由 Zygmunt Zając.运营的伟大网站

[## FastML

每个人都幻想预测股票市场。我们在《股票可预测吗?。在…

fastml.com](http://fastml.com/)

用他自己的话说,“FastML 可能是出于对需要数学博士才能理解的论文的失望,以及对家庭作业质量的无代码或半生不熟的 Matlab 实现的失望。”他最受欢迎的帖子之一是深度学习变得容易,在讨论深度无监督学习和代码链接方面做得很好。

乐高排序

这个项目太神奇了!

[## 在树莓 Pi 上使用 TensorFlow 的乐高排序器

2017 年初,我偶然发现了一个名为《一个日本人如何…

medium.com](https://medium.com/@pacogarcia3/tensorflow-on-raspbery-pi-lego-sorter-ab60019dcf32)

这不仅是一个非常酷的想法,涉及 200 个小时,跨越 6 个月,而且他还花时间在媒体上创建了一个对整个过程的惊人解释。他甚至将自己创建的数据集上传到 Kaggle!如果您正在寻找数据科学项目中的黄金标准,这绝对是它。

结论

我希望我展示一些启发我的数据科学项目和投资组合的尝试也能帮助你去创造一些令人敬畏的东西!如果你有其他你喜欢的甚至是你自己的例子,请把它们放在评论里,这样每个人都可以欣赏它们!

这篇文章也可以在这里找到。

我对 50 多篇关于最大似然法在信贷中应用的论文的分析

原文:https://towardsdatascience.com/my-analysis-from-50-papers-on-the-application-of-ml-in-credit-lending-b9b810a3f38?source=collection_archive---------6-----------------------

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

Photo by Katie Moum on Unsplash

信用贷款是一个有 200 多年历史的行业,也是银行的主要职责。这些年来,它一直在经历逐渐的改进,但是,随着机器学习和大数据的兴起,整个贷款过程可能会发生根本性的变化。

梯度推进和神经网络等强大算法的使用显示了提高信用分析师执行任务的效率、速度和准确性的巨大潜力。此外,众多数据生成来源(如社交媒体、移动和网络活动)的兴起为以独特的方式承保贷款提供了可能性。

然而,释放机器学习的全部潜力用于信用贷款仍然面临多重挑战。

我决定通过 50 多篇研究论文和 20 多份商业报告来详细探讨这个话题。我的研究来源各不相同,从 NIPS 和 ICML(两个最大的 ML 会议)发表的论文到麦肯锡公司的报告。我把我的观察总结如下。

机器学习对信用风险评估的影响

机器学习可以通过两种方式使信贷行业受益:提高运营效率利用新的数据源预测信用评分

提高运营效率

在最近的主题演讲中,吴恩达明智地说道:

自动化任务,而不是作业。

在确定信用度的过程中有几十项任务(包括公司和消费者)。其中一些已经可以完全自动化:

  • 使用电子表格;
  • 文件分析;
  • 电话;
  • 从客户和公司收集数据;

例如,ICDAR 是一个完全致力于文档分析和识别领域研究的会议。2019 年表现最好的算法已经达到了 95%以上的准确率,非常接近类似人类的表现。

利用新的数据源预测信用评分

当应用于来自替代和非常规来源的数据时,ML 算法的潜力被进一步释放。基于成千上万个数据点中的潜在模式,这些算法可以预测一个人的信用评分。

两个基本条件允许上述内容实际应用:

  1. 在当今世界,无论是在线还是离线(通过各种设备),人类都会产生大量数据。
  2. 目前确定信用度的方法主要依赖于消费者的信用记录。然而,许多来自发展中国家(中国、印度和非洲)的人一生都没有得到足够的银行服务。但是,他们中的大多数人每天都通过智能手机设备生成有价值的数据。

初创公司 Branch 利用这个机会,为发展中国家的人们引入了一个贷款系统,该系统依赖于手机数据,如短信日志、联系人列表、GPS 等。

最大似然法在信用贷款行业的第二个应用将是本文的主要焦点。

最有效的最大似然算法

在我的研究中,我遇到了各种以不同和独特的方式使用的算法。然而,表现最好的不一定是最新发明的或最复杂的。我发现的两个报告成功地对表现最好的模型进行了批判性的比较。

2018 年的第一份报告比较了六种算法(其中 3 种是基于深度学习的),表明基于深度学习的算法并不比其他算法表现得更好。结论是梯度推进算法最适合于确定信用度。

另一方面,2019 年的另一份报告称,“发现先进的方法在人工神经网络等信用评分数据集上表现极佳”。对 2009 年以后的 40 多篇研究论文进行了研究。

结果

在信用评分问题上表现最好的分类算法因具体数据集、特征选择等而异。但是,以下内容往往比其他任何内容都更受青睐:

  • 支持向量机(SVM);
  • 梯度推进;
  • 基于树的算法(例如随机森林);
  • 深度神经网络(DNN);

有趣的是,DNNs 并没有产生明显更好的结果,这使我们怀疑他们的使用。由于法规限制(见下一节),与其他 ML 算法相比,神经网络可能更具挑战性。

行业采用面临的挑战

应用 ML 算法来确定信用评分的主要限制与算法的性能差或缺乏复杂性无关。相反,最大的障碍与构建这个算法/模型之外的一切都相关联。

  • 有偏数据 —所有有监督的最大似然算法都假设未来会遵循与过去相似的模式。其结果是,模型可以根据与个人还贷能力无关的潜在人类特征做出预测,这也被称为“对群体或阶层的偏见”。银行正在寻找应对这一挑战的方法,如“人口统计盲”(选择不相关的特征集)、“等概率”(为每个类别选择相同数量的真阳性和假阳性)等。
  • 可解释性 —由于无法理解个体决策背后的推理,机器学习算法被认为是“黑箱”。1974 年,国会颁布了“平等信贷机会法案(ECOA)”,禁止债权人基于敏感特征做出决定。将模型视为“黑盒”并不符合这些规则,并且可能会阻止高质量和强大的算法在实践中使用。
  • 法规 —除了 ECOA,国会还通过了“公平信用报告法案(FCRA)”,旨在维护信用报告的公平性,并通过保护或使用某些信息来确保消费者的隐私。然而,人们认为需要数千个数据点的深度学习算法不太可能符合 FCRA。依靠大数据做出决策的债权人通常会拒绝透露任何模型的规格,声称它们是“商业秘密”,从而规避这些监管。这不是一个可持续的解决方案,企业和研究人员都在探索替代方案。
  • 可扩展性 —一旦一个模型被证明表现良好,并且不干扰任何监管要求,就需要克服扩大规模的挑战。减少培训时间,将模型集成到现有产品中,以及提供持续的数据流,只是每个组织在体验 ML 的全部潜力之前所面临的一些问题。

资源

感谢您的阅读。希望你喜欢这篇文章。❤️

我在《R:第 1 部分》中复制元分析的尝试

原文:https://towardsdatascience.com/my-attempt-at-replicating-a-meta-analysis-in-r-part-1-eec2a0e900e6?source=collection_archive---------32-----------------------

请随意跳到第 2 部分的森林图。

我把这篇文章分成两部分,因为我不想让我的第一篇文章有几千字长!

学习无处不在

我倾向于通读荟萃分析以获得感兴趣领域的信息。例如,我可能想知道,在没有搜索数百项研究的情况下,一种特定类型的心理疗法对特定的精神疾病是否有效。荟萃分析非常适合提供这些信息的摘要。然后我想,好吧,我们如何在 R 中做这些分析,并渲染一个看起来很漂亮的森林图。

我从 Blanck 等人(2018)最近发表的元分析中选择了下面的森林图。有趣的是,他们研究了独立的正念练习(SAMs)对抑郁和焦虑症状的影响,而不是结合正念的治疗模式。人们对精神病理学治疗中基于正念的干预,以及普遍支持积极健康的干预有着浓厚的兴趣。只需在谷歌上搜索正念研究几十年的图片,你就会发现一些显著的图表,显示出关于正念的科学研究的显著增长。

尽管如此,这是该研究发表的森林图,分别测量对焦虑和抑郁症状的影响。森林图是总结多项独立研究估计结果的好方法。在这个例子中,我们可以看到,与对照组相比,单独的正念练习对焦虑和抑郁症状有显著的影响。

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

Figure 1. Forest plot on the effects of standalone mindfulness exercises on anxiety and depressive symptoms. Reprinted from “Effects of mindfulness exercises as stand-alone intervention on symptoms of
anxiety and depression: Systematic review and meta-analysis” by Blanck, P., Perleth, S., Heidenreich, T., Kröger, P., Ditzen, B., Bents, H., & Mander, J. (2018). Behaviour research and therapy, 102, 25–35. Copyright [2018] Blanck et al. (2018)

嗯,荟萃分析?

不是统计学家,迫使我去弄清楚任何统计技术的基础。基础优先对吗?

因此,荟萃分析是一种统计方法,用于综合多个科学研究的特定结果。目的是估计特定研究领域的总体效果。从本质上讲,荟萃分析的定量结果被用来总结一个研究机构(Egger & Smith,1997)。例如,可能有多个关于认知行为疗法(CBT)对抑郁症的有效性的独立研究。可以完成一个荟萃分析来提供一个量化的回顾,以巩固 CBT 的结果。这些研究可以通过使用的结果测量进行总结。

我将使用 Blanck 等人(2018)发表的元分析来练习如何在 r 中复制一个元分析。另外,这是一篇关于正念练习的有趣评论。以下是纳入焦虑症状荟萃分析的研究列表(所有研究都列在参考列表中):

Call,Miron,&Orcutt(2014);陈,杨,王,&张(2013);Cho,Ryu,Noh,&Lee(2016);楚(2010);课程-崔,萨维尔,&德拉克山(2017);约瑟夫松,林德沃尔,&布罗伯格(2014);Paholpak 等人(2012 年);帕金等人(2014 年);西尔斯&克劳斯(2009);森普尔(2010 年);沃内克,奎因,奥格登,陶勒,&尼尔森(2011);山田&维克多(2012);泽丹,约翰逊,戈登,&古尔卡辛(2010)

整理所有的统计数据

这很乏味,但我浏览了所有 14 项关于焦虑症状总结的研究,并在 Excel 中记录了必要的统计数据(例如,平均前测和后测分数、群体样本大小、标准偏差)。这是来自 Excel 的数据集,包含所有 14 项研究,Blanck 等人(2018 年)报告了对冲的 g 统计数据,以及这些研究报告的治疗组和对照组的平均分数和标准偏差。

# before reading data, we need to create a function for Cohen's d
# Blanck et al. (2018) used a controlled pre/post effect size calculation
# smd = standardised mean difference

# read in Excel studies data file
anxiety_studies_df <- readxl::read_excel("./data/replicating-meta-analysis-studies.xlsx",
                                         col_names = TRUE,
                                         sheet = "anxiety_es")

# take a look at the data
tibble::glimpse(anxiety_studies_df)
## Observations: 20
## Variables: 22
## $ study_name           <chr> "Call et al. (2014)", "Call et al. (2014)...
## $ treatment_cond       <chr> "Body Scan", "Body Scan", "Meditation", "...
## $ control              <chr> "Waiting List", "Hatha Yoga", "No Interve...
## $ inactive_control_ind <chr> "Y", "N", "Y", "Y", "N", "Y", "Y", "Y", "...
## $ outcome_measure      <chr> "DASS-21 - Anxiety", "DASS-21 - Anxiety",...
## $ notes                <chr> NA, NA, NA, NA, NA, NA, NA, NA, "This stu...
## $ year                 <dbl> 2014, 2014, 2013, 2016, 2016, 2010, 2017,...
## $ blanck_hedge_g       <dbl> 0.38, 0.38, 0.47, 0.66, 0.66, 1.32, 0.78,...
## $ treatment_n          <dbl> 27, 29, 30, 12, 12, 10, 15, 38, 30, 20, 2...
## $ treatment_pre        <dbl> 1.47, 1.88, 46.60, 49.75, 50.58, 1.04, 40...
## $ treatment_pre_sd     <dbl> 0.48, 0.73, 11.60, 5.71, 6.26, 0.90, 10.0...
## $ treatment_post       <dbl> 1.34, 1.41, 41.40, 38.58, 41.17, 0.33, 35...
## $ treatment_post_sd    <dbl> 0.43, 0.42, 10.40, 10.04, 8.94, 0.34, 8.3...
## $ treatment_sd_diff    <dbl> -0.05, -0.31, -1.20, 4.33, 2.68, -0.56, -...
## $ treatment_diff       <dbl> -0.13, -0.47, -5.20, -11.17, -9.41, -0.71...
## $ control_n            <dbl> 35, 35, 30, 12, 12, 10, 15, 30, 28, 20, 2...
## $ control_pre          <dbl> 1.66, 1.66, 46.20, 47.92, 47.92, 1.51, 35...
## $ control_pre_sd       <dbl> 0.56, 0.56, 11.50, 7.74, 7.74, 0.92, 10.2...
## $ control_post         <dbl> 1.78, 1.78, 46.30, 43.33, 43.33, 1.63, 37...
## $ control_post_sd      <dbl> 0.77, 0.77, 11.80, 8.49, 8.49, 0.80, 10.0...
## $ control_sd_diff      <dbl> 0.21, 0.21, 0.30, 0.75, 0.75, -0.12, -0.1...
## $ control_diff         <dbl> 0.12, 0.12, 0.10, -4.59, -4.59, 0.12, 1.7...

# take a different look at the data
head(anxiety_studies_df, 5) %>% 
  knitr::kable() %>% 
  kableExtra::kable_styling(c("bordered", "condensed"), full_width = T, position = "l") %>% 
  scroll_box(width = "100%", height = "400px")

太好了。我们已经存储了数据,并准备好进行进一步的分析,但现在我们需要使用这些统计数据来计算影响大小。幸运的是,Blanck 等人(2018 年)在他们的论文中提供了如何估计 Cohen 的 d 和 Hedge 的 h 的等式。让我的生活轻松多了!

我们可以使用一个标准的函数来计算效果的大小,例如,esc包中的esc_mean_gain()。稍后,我可能会使用用户定义的函数和软件包提供的函数来比较估计值的差异。

计算效果大小

采用方程式

在 Blanck 等人(2018 年)中,是时候为科恩的 d 方程和对冲的 g 方程创建一个函数了。这两个方程都用于估计受控的前/后效应大小。首先,我将定义一个函数,该函数将接受等式的这些参数并计算科恩的 d。此外,我将定义一个单独的函数,该函数将科恩的 d 转换为对冲的 g。我们将分别调用函数cohen_d_calc()convert_d_g()。作为参考,下面是计算前/后控制效果大小的公式(Blanck et al .,2018):

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

其中δ1 是指治疗前后的平均分数/值之间的差异,δ2 是指治疗前后的平均分数/值之间的差异。S1 和 S2 分别指治疗和对照得分的标准差。n1 和 n2 分别指完整的前/后观察的治疗组和对照组的样本量。

Morris (2008 年)(见等式[8–10])和 Lakens (2013 年)(见等式[1])报告的上述等式略有不同。这些方程的数学解释远远超出了我的知识范围,所以我要避开它。

将 Cohen 的 d 转换为 Hedge 的 g 的公式如下:

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

其中 d 是根据 Cohen 的 d 估计的前/后控制效果大小,df 是指自由度。现在让我们把它放入 R 中的函数中,这样我们就可以相应地估计以后每项研究的影响大小。

# create function for calculating Cohen's d as per the Blanck et al. (2018) provided equation
cohen_d_calc <- function(

  # specify all the arguments, i.e. pre/post means, pre/post sd etc
  treatment_pre_mean,
  treatment_post_mean,
  treatment_post_sd, 
  control_pre_mean, 
  control_post_mean,
  control_post_sd,
  treatment_n, 
  control_n) {

  # numerator: mean differences for pre MINUS mean differences for post
  ( ( treatment_pre_mean - treatment_post_mean ) - ( control_pre_mean - control_post_mean ) ) / 

    # denominator: pooled standard deviation
    (
      sqrt
      (
        # numerator
        ( ( ( treatment_n - 1 ) * ( treatment_post_sd ^ 2 ) ) + ( ( control_n - 1 ) * ( control_post_sd ^ 2 ) ) ) /

          # denominator
          ( treatment_n + control_n - 2 )
      )
    )
}

# conversion from Cohen's d to Hedge's g
convert_d_g <- function(d, treatment_n, control_n) {

  # Cohen's d multipled by conversion factor
  d * ( 1 - ( 3 / ( ( 4 * ( treatment_n + control_n ) ) ) ) )

}

# create a function for pooled standard deviations
pooled_sd <- function(

  # specify all the arguments, i.e. pre/post means, pre/post sd etc
  treatment_post_sd, 
  control_post_sd,
  treatment_n, 
  control_n

) {

  sqrt
  (
    # numerator
    ( ( ( treatment_n - 1 ) * ( treatment_post_sd ^ 2 ) ) + ( ( control_n - 1 ) * ( control_post_sd ^ 2 ) ) ) /

      # denominator
      ( treatment_n + control_n - 2 )
  )
} 

我们有这些函数形式的方程,但它真的有效吗?让我们在 forest plot 中报告的第一项关于焦虑症状的研究中进行测试,即 Call 等人(2014 年)。

# calculate Cohen's d first
call_d <- cohen_d_calc(treatment_pre_mean = 1.47,
                       treatment_post_mean = 1.34,
                       treatment_post_sd = 0.43, 
                       control_pre_mean = 1.66, 
                       control_post_mean = 1.78,
                       control_post_sd = 0.77,
                       treatment_n = 27, 
                       control_n = 35) 
call_d
## [1] 0.387562

# then convert to Hedge's g
call_h <- convert_d_g(d = call_d,
                      treatment_n = 27,
                      control_n = 35)
round(call_h, 2)
## [1] 0.38

# exact result as per Blanck et al. (2018) reported result
# h = 0.38

好吧,这看起来很有希望,因为我计算的对冲的 g 值与 Call 等人(2014 年)公布的 g 值相同。真正的测试是将这个函数应用到剩余的研究中。

上面的代码并不完全清晰,但我真的很想看看我是否可以开始元分析,特别是在以前没有进行元分析的经验的情况下。在这篇文章的第二部分,我将描述我是如何成功复制 Blanck 等人(2018)发表的森林地块的。

敬请期待!

参考

Blanck,p .,Perleth,s .,Heidenreich,t .,krger,p .,Ditzen,b .,Bents,h .,和 Mander,J. (2018 年)。正念练习作为独立干预对焦虑和抑郁症状的影响:系统综述和荟萃分析。行为研究与治疗102 ,25–35。

科尔博士、米隆博士和奥克特博士(2014 年)。短期正念技术在减轻焦虑和压力症状中的有效性。正念5 (6),658–668。

陈,杨,谢,王,李,张,谢(2013)。短期正念冥想对中国护理专业学生焦虑症状和收缩压影响的随机对照试验。今日护士教育33 (10),1166–1172。

Cho,h .,Ryu,s .,Noh,j .,& Lee,J. (2016 年)。日常正念呼吸练习对学生考试焦虑的影响。 PloS One11 (10),e0164822。

朱立成(2010)。冥想对情商、感知压力和消极心理健康的益处。压力与健康:国际压力调查学会杂志26 (2),169–180。

Course-Choi,j .,Saville,h .,& Derakshan,N. (2017)。适应性工作记忆训练和正念冥想训练对高焦虑者加工效率和焦虑的影响。行为研究与治疗89 ,1–13。

德尔西蒙尼安和莱尔德(1986 年)。临床试验中的荟萃分析。对照临床试验7 (3),177–188。

艾格博士和史密斯博士(1997 年)。荟萃分析:潜力和希望。 Bmj315 (7119),1371–1374。

赫奇斯,L. V. (1983 年)。效应大小的随机效应模型。心理通报93 (2),388。

Hofmann,S. G .,Sawyer,A. T .,Witt,A. A .,& Oh,D. (2010)。正念疗法对焦虑和抑郁的影响:一项荟萃分析综述。《咨询与临床心理学杂志》78 (2),169。

Hofmann,S. G .,Wu,J. Q .,,Boettcher,H. (2014)。认知行为疗法对焦虑症患者生活质量的影响:一项荟萃分析。咨询与临床心理学杂志82 期 (3),375 页。

t .约瑟夫松、m .林德沃尔和 A. G .布罗伯格(2014 年)。短期正念干预对自我报告的正念、偏离中心、执行注意力、心理健康和应对方式的影响:检查独特的正念效果和中介。正念5 (1),18–35。

拉肯斯博士(2013 年)。计算和报告效应大小以促进累积科学:t 检验和 anovas 实用入门。心理学前沿4 ,863。

莫里斯,S. B. (2008 年)。根据前测-后测-控制组设计估计效应大小。组织研究方法11 (2)、364–386。

Paholpak,s .,Piyavhatkul,n .,Rangseekajee,p .,Krisanaprakornkit,t .,Arunpongpaisal,s .,Pajanasoontorn,n .,其他。(2012).孔卡恩大学医学生的呼吸冥想:对精神症状、记忆、智力和学术成就的影响。泰国医学会杂志95 (3),461 页。

帕金、摩根、罗塞利、霍华德、谢泼德、埃文斯和其他人。(2014).探索正念和心觉的关系。正念5 (3),298–313。

罗森塔尔,R. (1986 年)。社会科学研究的元分析程序 sage 出版物:贝弗利山,1984 年,148 页。教育研究者15 (8),18–20。

西尔斯和克劳斯(2009 年)。因此我认为 om:认知扭曲和应对方式是正念冥想对焦虑、积极和消极情感以及希望的影响的中介。临床心理学杂志65 (6),561–573。

森普尔,R. J. (2010)。正念冥想会增强注意力吗?随机对照试验。正念1 (2),121–130。

Shim,S. R .,& Kim,S.-J. (2019 年)。干预荟萃分析:r 软件的应用与实践。流行病学与健康41

西维耶希鲍尔(未标明)。metafor 包。从 http://www.metafor-project.org/doku.php/analyses:morris2008取回

沃内克,e .,奎因,s .,奥格登,k .,陶勒,n .,,纳尔逊,M. R. (2011)。一项关于正念练习对医学生压力水平影响的随机对照试验。医学教育45 (4),381–388。

山田和维克多(2012 年)。正念意识实践对大学生健康、幸福和学习能力的影响:一项初步研究。心理学学习&教学11 (2),139–145。

Zeidan,s . k . Johnson,N. S .、Gordon 和 Goolkasian,P. (2010 年)。短暂和虚假的正念冥想对情绪和心血管变量的影响。《替代与补充医学杂志16 (8),867–873。

我在《R:第 2 部分》中复制元分析的尝试

原文:https://towardsdatascience.com/my-attempt-at-replicating-a-meta-analysis-in-r-part-2-910a94a36d31?source=collection_archive---------23-----------------------

背景信息和功能见第 1 部分

最后,让我们创建一个漂亮的森林图。

第一部分中已经涵盖了创建手动计算效果大小的函数的所有细节。让我们直入主题,看看我们如何从这个艰苦的过程中创造一个森林情节!

将函数应用于所有研究

请记住,我们已经将每个病历报告的所有统计数据导入到 Excel 数据文件中。接下来的问题是创建一个新的列,它(1)计算 Cohen 的 d;然后(2)将 d 转换为 Hedge 的 g。我们将过滤数据框,以便根据filter(inactive_control_ind == "Y")行仅包含具有无效对照比较的研究。由此,我们使用我们的函数来计算 d,即cohen_d_calc()函数,然后将其转换为 g。让我们继续创建一些列,使用我们的自定义函数来估计影响大小。

# create a new variable that provides both d and g
anxiety_studies_eff_df <- anxiety_studies_df %>% 
  filter(inactive_control_ind == "Y") %>% 
  mutate(cohen_d_val = cohen_d_calc(treatment_pre_mean = treatment_pre,
                                    treatment_post_mean = treatment_post,
                                    treatment_post_sd = treatment_post_sd,
                                    control_pre_mean = control_pre,
                                    control_post_mean = control_post,
                                    control_post_sd = control_post_sd,
                                    treatment_n = treatment_n,
                                    control_n = control_n),
         study_pooled_sd = pooled_sd(treatment_post_sd = treatment_post_sd, 
                                     control_post_sd = control_post_sd,
                                     treatment_n = treatment_n, 
                                     control_n = control_n)) %>% 
  mutate(hedge_g_val = convert_d_g(cohen_d_val, treatment_n, control_n),
         hedge_g_rounded = round(hedge_g_val, 2)) %>% 
  dplyr::select(study_name, year, blanck_hedge_g, hedge_g_rounded, cohen_d_val, hedge_g_val, everything())

我们现在应该有一个数据框,其中包含 Blanck 等人(2018)发布的效应大小和我们的函数估计的效应大小。下面来看看吧:

# take a different look at the data
anxiety_studies_eff_df %>% 
  knitr::kable() %>% 
  kableExtra::kable_styling(c("bordered", "condensed"), full_width = T, position = "l") %>% 
  scroll_box(width = "100%", height = "400px")

然而,我遗漏了另一个必需的转换。事实上,有两项研究使用了多种治疗条件,并将它们与不活跃的对照组进行了比较,即 Parkin 等人(2014 年)和 Yamada & Victor (2012 年)。我们已经估计了这些研究的影响大小,但是还没有将它们结合起来代表整个研究。

我决定计算这些研究的加权平均效应大小,我假设 Blanck 等人(2018 年,第 28 页)的作者也是这样做的:

如果研究提供了焦虑或抑郁的一个以上合格结果测量的数据,我们压缩数据以确保获得的 ESs 的独立性。以类似的方式,使用多种合格的治疗条件(例如,采用不同正念练习的条件)将数据结合起来进行研究。

加权估计量的等式可以在 Hedges (1983)中找到。下面是:

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

其中 x(带有上划线)是加权平均效果大小的计算值。

在我们的案例中,权重 w(i)是指给定研究(I)的总样本量,包括治疗组和对照组。g(i)是指为研究(I)估计的效应大小。好的,让我们通过计算加权平均效应大小来关注这些研究,然后将其与报道的效应大小进行比较。

如果研究中的效应大小无法计算,我们将采用荟萃分析中 Hedge 的 g 值。此外,Zeidan 等人(2010 年)只报告了两种焦虑量表中一种的前测和波特测试分数。鉴于信息不足,我们将用公布的值代替我们的估计 g 值。

# calculate weighted mean effect size and compare with Blanck et al. (2018)
anxiety_wgt_eff_df <- anxiety_studies_eff_df %>% 
  mutate(total_n = treatment_n + control_n,
         weight = total_n * hedge_g_val) %>% 
  group_by(study_name) %>% 
  summarise(weighted_g_val = round(sum(weight) / sum(total_n), 2)) %>% 
  dplyr::left_join(x = .,
                   y = anxiety_studies_eff_df %>% 
                     distinct(study_name, blanck_hedge_g, treatment_n, control_n),
                   by = "study_name") %>% 
  mutate(weighted_g_val = ifelse(is.na(weighted_g_val) |
                                   study_name == "Zeidan et al. (2010b)", blanck_hedge_g, weighted_g_val))
anxiety_wgt_eff_df
## # A tibble: 14 x 5
##    study_name           weighted_g_val blanck_hedge_g treatment_n control_n
##    <chr>                         <dbl>          <dbl>       <dbl>     <dbl>
##  1 Call et al. (2014)            0.38           0.38           27        35
##  2 Chen et al. (2013)            0.47           0.47           30        30
##  3 Cho et al. (2016)             0.69           0.66           12        12
##  4 Chu (2010)                    1.3            1.32           10        10
##  5 Course-Choi et al. ~          0.78           0.78           15        15
##  6 Josefsson et al. (2~          0.17           0.17           38        30
##  7 Paholpak et al. (20~          0.39           0.39           30        28
##  8 Parkin et al. (2014~         -0.28          -0.28           20        20
##  9 Parkin et al. (2014~          0.05           0.05           20        20
## 10 Sears & Kraus (2009)          0.580          0.580          19        10
## 11 Semple (2010)                 0.53           0.53           15        16
## 12 Warnecke et al. (20~          0.44           0.44           31        30
## 13 Yamada & Victor (20~          2.54           2.53           37        23
## 14 Zeidan et al. (2010~          0.54           0.54           29        26

进展顺利。现在我们可以容忍一些小的差异(特别是考虑到这对我来说是新的)。所以,我们有了效果尺寸。现在缺少什么?研究中血腥的抽样差异。

前测-后测相关性

不幸的是,没有一项关于焦虑症状的荟萃分析研究包括前测和后测结果之间的相关性。该方法还包括如何确定相关系数的任何信息。这些是计算metafor::rma包中的采样方差 vi所必需的。

先前关于正念及其对焦虑和抑郁的影响的元分析遇到了同样的问题(Hofmann,Sawyer,Witt & Oh,2010;Hofmann,Wu 和 Boettcher,2014)。为了解决这个问题,作者根据 Rosenthal (1986)的建议,使用了保守的估计值 r = .7。类似地,我将使用. 7 并测试森林图。

只见树木不见森林

在我可以复制森林图之前,我需要设置前后测试相关系数ri。由于我们已经估计了效应大小,我们可以使用 Morris (2008)的方法来确定运行随机效应模型所需的抽样方差vi。是的,非常混乱。请参阅 Viechtbauer(未注明),因为该网页包含更多关于使用混合标准差的 R 语法的信息,以使用 Morris (2008)中描述的方法计算抽样方差。

因此,让我们使用 r = .7 进行预测试和后测相关,并根据metafor::rma()函数中的vi将其输入到采样方差的计算中。

# use .7 for pre/post correlation to calculate the sampling variance
# see http://www.metafor-project.org/doku.php/analyses:morris2008 for more information
r = 0.7
anxiety_ri_vi_df <- anxiety_wgt_eff_df %>% 
  mutate(ri = r,
         vi = 2*(1-ri) * 
           (1/treatment_n + 1/control_n) + 
           weighted_g_val^2 / (2*(treatment_n + control_n)))
anxiety_ri_vi_df
## # A tibble: 14 x 7
##    study_name weighted_g_val blanck_hedge_g treatment_n control_n    ri
##    <chr>               <dbl>          <dbl>       <dbl>     <dbl> <dbl>
##  1 Call et a~          0.38           0.38           27        35   0.7
##  2 Chen et a~          0.47           0.47           30        30   0.7
##  3 Cho et al~          0.69           0.66           12        12   0.7
##  4 Chu (2010)          1.3            1.32           10        10   0.7
##  5 Course-Ch~          0.78           0.78           15        15   0.7
##  6 Josefsson~          0.17           0.17           38        30   0.7
##  7 Paholpak ~          0.39           0.39           30        28   0.7
##  8 Parkin et~         -0.28          -0.28           20        20   0.7
##  9 Parkin et~          0.05           0.05           20        20   0.7
## 10 Sears & K~          0.580          0.580          19        10   0.7
## 11 Semple (2~          0.53           0.53           15        16   0.7
## 12 Warnecke ~          0.44           0.44           31        30   0.7
## 13 Yamada & ~          2.54           2.53           37        23   0.7
## 14 Zeidan et~          0.54           0.54           29        26   0.7
## # ... with 1 more variable: vi <dbl>

在所有这些麻烦之后,我们终于有了完整的统计数据插入到随机效应模型函数中。在这一点上,我将使用metafor::rma()函数,该函数将聚合所有效应大小,以生成 SAMs 对焦虑症状的汇总效应大小。好消息是,我们知道 Blanck 等人(2018)使用了 DerSimonian & Laird (1986)的逆方差随机效应模型。您可以通过在rma()功能中指定method = "DL"来选择该型号。见下文。

# random effects model with r = .7
# fit the re model
res <- metafor::rma(data = anxiety_ri_vi_df,
                    yi = weighted_g_val, # effect size
                    vi = vi, # sampling
                    method = "DL",
                    slab = study_name)
res
## 
## Random-Effects Model (k = 14; tau^2 estimator: DL)
## 
## tau^2 (estimated amount of total heterogeneity): 0.2412 (SE = 0.1238)
## tau (square root of estimated tau^2 value):      0.4911
## I^2 (total heterogeneity / total variability):   80.19%
## H^2 (total variability / sampling variability):  5.05
## 
## Test for Heterogeneity:
## Q(df = 13) = 65.6255, p-val < .0001
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.5771  0.1487  3.8811  0.0001  0.2857  0.8686  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

# finally plot the damn thing!
metafor::forest(res,
                showweights = TRUE,
                xlim = c(-4,6),
                xlab = "Effect Size (Hedge's g)",
                # digits = c(2,3p),
                mlab = "Total",
                cex = 0.75,
                cex.lab = 0.75)

# switch to bold
par(font = 2)

# add column headings to the plot
text(x = -3, y = 17, labels = "Author(s) and Year", cex = 0.75, pos = 1)
text(x = 0, y = 17, labels = "Std. Mean Difference and CI", cex = 0.75, pos = 1)
text(x = 4, y = 17, labels = "Weights", cex = 0.75, pos = 1)
text(x = 5.1, y = 17, labels = "Hedge's g, CI", cex = 0.75, pos = 1)

# add x axis label
text(x = -1, y = -2, labels = "Favours [control]", cex = 0.75, pos=1)

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

Figure 1. First forest plot of effect size of SAMs on anxiety symptoms using pretest-posttest correlation of r = .7.

终于有情节了!

然而,每项研究效应大小的置信区间与荟萃分析中报道的相差甚远。经过反复试验,我假设 r = .5 可能比罗森塔尔(1986 年)采用的值更保守。没有关于 Blanck 等人(2018 年)使用的相关系数的信息。

一气呵成:

# use .5 for pre/post correlation to calculate the sampling variance
# see http://www.metafor-project.org/doku.php/analyses:morris2008 for more information
r = 0.5
anxiety_ri_vi_df <- anxiety_wgt_eff_df %>% 
  mutate(ri = r,
         vi = 2*(1-ri) * 
           (1/treatment_n + 1/control_n) + 
           weighted_g_val^2 / (2*(treatment_n + control_n)))
anxiety_ri_vi_df
## # A tibble: 14 x 7
##    study_name weighted_g_val blanck_hedge_g treatment_n control_n    ri
##    <chr>               <dbl>          <dbl>       <dbl>     <dbl> <dbl>
##  1 Call et a~          0.38           0.38           27        35   0.5
##  2 Chen et a~          0.47           0.47           30        30   0.5
##  3 Cho et al~          0.69           0.66           12        12   0.5
##  4 Chu (2010)          1.3            1.32           10        10   0.5
##  5 Course-Ch~          0.78           0.78           15        15   0.5
##  6 Josefsson~          0.17           0.17           38        30   0.5
##  7 Paholpak ~          0.39           0.39           30        28   0.5
##  8 Parkin et~         -0.28          -0.28           20        20   0.5
##  9 Parkin et~          0.05           0.05           20        20   0.5
## 10 Sears & K~          0.580          0.580          19        10   0.5
## 11 Semple (2~          0.53           0.53           15        16   0.5
## 12 Warnecke ~          0.44           0.44           31        30   0.5
## 13 Yamada & ~          2.54           2.53           37        23   0.5
## 14 Zeidan et~          0.54           0.54           29        26   0.5
## # ... with 1 more variable: vi <dbl>

# random effects model with r = .5
# fit the re model
res <- metafor::rma(data = anxiety_ri_vi_df,
                    yi = weighted_g_val, # effect size
                    vi = vi, # sampling
                    method = "DL",
                    slab = study_name)
res
## 
## Random-Effects Model (k = 14; tau^2 estimator: DL)
## 
## tau^2 (estimated amount of total heterogeneity): 0.2536 (SE = 0.1422)
## tau (square root of estimated tau^2 value):      0.5036
## I^2 (total heterogeneity / total variability):   72.49%
## H^2 (total variability / sampling variability):  3.64
## 
## Test for Heterogeneity:
## Q(df = 13) = 47.2558, p-val < .0001
## 
## Model Results:
## 
## estimate      se    zval    pval   ci.lb   ci.ub 
##   0.5781  0.1605  3.6020  0.0003  0.2635  0.8927  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

# finally plot the damn thing!
metafor::forest(res,
                showweights = TRUE,
                xlim = c(-4,6),
                xlab = "Effect Size (Hedge's g)",
                # digits = c(2,3p),
                mlab = "Total",
                cex = 0.75,
                cex.lab = 0.75)

# switch to bold
par(font = 2)

# add column headings to the plot
text(x = -3, y = 17, labels = "Author(s) and Year", cex = 0.75, pos = 1)
text(x = 0, y = 17, labels = "Std. Mean Difference and CI", cex = 0.75, pos = 1)
text(x = 4, y = 17, labels = "Weights", cex = 0.75, pos = 1)
text(x = 5.1, y = 17, labels = "Hedge's g, CI", cex = 0.75, pos = 1)

# add x axis label
text(x = -1, y = -2, labels = "Favours [control]", cex = 0.75, pos=1)

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

Figure 2. Second forest plot of effect size of SAMs on anxiety symptoms using pretest-posttest correlation of r = .5.

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

Figure 3. Forest plot on the effects of standalone mindfulness exercises on anxiety symptoms. Reprinted from “Effects of mindfulness exercises as stand-alone intervention on symptoms of anxiety and depression: Systematic review and meta-analysis” by Blanck, P., Perleth, S., Heidenreich, T., Kröger, P., Ditzen, B., Bents, H., & Mander, J. (2018). Behaviour research and therapy, 102, 25–35. Copyright [2018] Blanck et al. (2018)

对冲的 g 值与 Blanck 等人(2018 年)的荟萃分析中报告的结果非常接近。根据 Blanck 等人(2018 年)的森林图,随机效应模型得出 SAMs 对焦虑症状的相同汇总效应大小(和置信区间),即 SMD=0.58。然而,我们的模型报告的重量与文章中公布的不匹配。我承认现阶段无法解释这个。

尽管如此,我认为这是在完成元分析的基础上的一次不错的尝试。这并没有涵盖运行元分析所涉及的所有过程,我推荐 Shim & Kim (2019)的一篇相关的最新文章,该文章提供了在 r 中整理干预元分析的额外示例。作者还提供了一个关于元分析过程要点的漂亮图表。

我可能会写另一篇关于如何直接使用这些包来自动执行手动效果大小计算的文章。

关键要点

  • 首先,短暂的独立正念练习似乎对减少焦虑症状有积极的作用。这包括各种练习(和模式),如身体扫描、呼吸冥想等。此外,很高兴在 Blanck 等人(2018 年)和 Hofmann 等人(2010 年)中看到类似的疗效(一项关于基于正念的治疗而不是单独的正念练习的荟萃分析)。这就提出了一个问题:什么时候不使用其他治疗成分进行简单的正念练习是合适的(或许更具成本效益),以及适用于哪个群体。
  • 并非所有的研究都会报告所需的统计数据,作为您计算效应大小的输入。这使得元分析过程具有挑战性,尤其是当你需要关键的统计数据时,如前测和后测的平均分数、标准差和前/后相关性。有些研究可能只包括数字,而没有数据点的相关值,这让您的生活更加困难。
  • 一个反直觉的结论是,手动计算效果尺寸比使用软件包中预定义的函数更能提供信息,例如esceffsizepsychmetametafor。这些软件包是绝对强大的,但我发现它有利于手动计算效果大小的螺母和螺栓,而上述软件包无论如何都可以做到。这只是我。
  • 我不羡慕统计学家!

参考

Blanck,p .,Perleth,s .,Heidenreich,t .,krger,p .,Ditzen,b .,Bents,h .,和 Mander,J. (2018 年)。正念练习作为独立干预对焦虑和抑郁症状的影响:系统综述和荟萃分析。行为研究与治疗102 ,25–35。

科尔博士、米隆博士和奥克特博士(2014 年)。短期正念技术在减轻焦虑和压力症状中的有效性。正念5 (6),658–668。

陈,杨,谢,王,李,张,谢(2013)。短期正念冥想对中国护理专业学生焦虑症状和收缩压影响的随机对照试验。今日护士教育33 (10),1166–1172。

Cho,h .,Ryu,s .,Noh,j .,& Lee,J. (2016 年)。日常正念呼吸练习对学生考试焦虑的影响。 PloS One11 (10),e0164822。

朱立成(2010)。冥想对情商、感知压力和消极心理健康的益处。压力与健康:国际压力调查学会杂志26 (2),169–180。

Course-Choi,j .,Saville,h .,& Derakshan,N. (2017)。适应性工作记忆训练和正念冥想训练对高焦虑者加工效率和焦虑的影响。行为研究与治疗89 ,1–13。

德尔西蒙尼安和莱尔德(1986 年)。临床试验中的荟萃分析。对照临床试验7 (3),177–188。

艾格博士和史密斯博士(1997 年)。荟萃分析:潜力和希望。 Bmj315 (7119),1371–1374。

赫奇斯,L. V. (1983 年)。效应大小的随机效应模型。心理通报93 (2),388。

Hofmann,S. G .,Sawyer,A. T .,Witt,A. A .,& Oh,D. (2010)。正念疗法对焦虑和抑郁的影响:一项荟萃分析综述。咨询与临床心理学杂志78 (2),169。

Hofmann,S. G .,Wu,J. Q .,,Boettcher,H. (2014)。认知行为疗法对焦虑症患者生活质量的影响:一项荟萃分析。《咨询与临床心理学杂志》82 (3),375 页。

t .约瑟夫松、m .林德沃尔和 A. G .布罗伯格(2014 年)。短期正念干预对自我报告的正念、偏离中心、执行注意力、心理健康和应对方式的影响:检查独特的正念效果和中介。正念5 (1),18–35。

拉肯斯博士(2013 年)。计算和报告效应大小以促进累积科学:t 检验和 anovas 实用入门。心理学前沿4 ,863。

莫里斯,S. B. (2008 年)。根据前测-后测-控制组设计估计效应大小。组织研究方法11 (2),364–386。

Paholpak,s .,Piyavhatkul,n .,Rangseekajee,p .,Krisanaprakornkit,t .,Arunpongpaisal,s .,Pajanasoontorn,n .,其他。(2012).孔卡恩大学医学生的呼吸冥想:对精神症状、记忆、智力和学术成就的影响。泰国医学会杂志95 (3),461 页。

帕金、摩根、罗塞利、霍华德、谢泼德、埃文斯和其他人。(2014).探索正念和心觉的关系。正念5 (3),298–313。

罗森塔尔,R. (1986 年)。社会科学研究的元分析程序 sage 出版物:贝弗利山,1984 年,148 页,教育研究者15 (8),18–20 页。

西尔斯和克劳斯(2009 年)。因此我认为 om:认知扭曲和应对方式是正念冥想对焦虑、积极和消极情感以及希望的影响的中介。65 (6),561–573。

森普尔,R. J. (2010)。正念冥想会增强注意力吗?随机对照试验。正念1 (2),121–130。

Shim,S. R .,& Kim,S.-J. (2019 年)。干预荟萃分析:r 软件的应用与实践。流行病学与健康41

西维耶希鲍尔(未标明)。metafor 包。从 http://www.metafor-project.org/doku.php/analyses:morris2008取回

沃内克,e .,奎因,s .,奥格登,k .,陶勒,n .,,纳尔逊,M. R. (2011)。一项关于正念练习对医学生压力水平影响的随机对照试验。医学教育45 (4),381–388。

山田和维克多(2012 年)。正念意识实践对大学生健康、幸福和学习能力的影响:一项初步研究。心理学学习&教学11 (2),139–145。

Zeidan,s . k . Johnson,N. S .、Gordon 和 Goolkasian,P. (2010 年)。短暂和虚假的正念冥想对情绪和心血管变量的影响。《替代与补充医学杂志》16 (8),867–873。

我对敏捷数据科学研究的最佳建议

原文:https://towardsdatascience.com/my-best-tips-for-agile-data-science-research-b40365cc979d?source=collection_archive---------7-----------------------

如何在最短的时间内带来最大的价值

几天前,我读了 Shay Palachy 和 T2 Ori Cohen 写的两篇关于敏捷数据科学项目管理的文章。这些帖子讨论了数据科学项目的不同阶段,以及它们与常规软件项目的不同之处。这些帖子激励我写下自己对敏捷数据科学的看法,重点是研究方法,而不是整个项目阶段。

敏捷数据科学研究很难,当你不确定你的问题是可解决的,你怎么能给出一个时间估计呢?在看数据之前怎么规划自己的冲刺?你可能不能。敏捷数据科学需要许多调整,在这篇文章中,我将分享一些最适合我的敏捷数据科学研究的最佳实践。

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

设定项目目标

每个机器学习项目都应该从定义项目的目标开始。我们必须定义什么是好的结果,才能知道什么时候停止研究,进入下一个问题。这个阶段通常由业务涉众完成。

目标由 3 个问题定义:

  • **我们正在优化的 KPI 是什么?**这可能是项目中最重要的问题,KPI 必须可以用测试集来衡量,而且尽可能与业务 KPI 相关。
  • 评估方法是什么?测试集的大小是多少?我们需要时间序列分割/分组分割吗?我们需要在线测试吗?
  • **最低有价值的 KPI 是多少?**有时,机器学习模型将取代一些简单的启发式方法,即使 65%的准确率对企业来说也是非常有价值的。我们需要定义什么是成功。

始终与基线模型进行比较

什么是好的性能是一个很难回答的问题,这个问题很大程度上取决于问题的难度和业务需求。我的建议是通过建立一个简单的基线模型来开始建模,它可以是一个简单的具有基本功能的机器学习模型,甚至是一个商业规则(启发式),如重要类别中的平均标签。这样,我们可以通过与基线的比较来衡量我们的表现,并监控我们在任务中的改进。

从一个简单的模型开始

迭代是敏捷开发的核心特征之一。在数据科学项目中,我们不像工程团队那样迭代特性,而是迭代模型。从具有少量特征的简单模型开始,并迭代地使其变得越来越复杂,这有许多优点。当你的模型足够好的时候,你可以在任何一点停下来,节省时间和复杂性。你确切地知道你所做的每一个改变是如何影响模型性能的,这为你的下一个实验提供了直觉,也许最重要的是,通过迭代地增加复杂性,你可以更容易和更快地调试你的模型的错误和数据泄漏。

计划子目标

规划研究项目很难,因为它们有很大的不确定性。根据我的经验,最好使用子目标来规划项目,例如,数据探索、数据清理、数据集构建、特征工程和建模是研究的一小部分,至少可以提前几周进行规划。这些子目标可以在没有最终模型的情况下自行带来价值。例如,在数据探索之后,数据科学家可以为业务人员带来可操作的见解,数据集清理和构建可以立即帮助其他数据科学家和分析师开展他们自己的项目。

快速失败

快速失败可能是我最重要的一点,也可能是最难做到的一点。在每次迭代时,你必须问自己,模型性能达到最小有价值 KPI 的概率是多少?我认为迭代地使模型更复杂确实有助于这一部分。添加更多的功能和尝试更多的模型通常会带来渐进式的改进。如果你的模型性能是 70%,而你的最小有价值 KPI 是 90%,你可能不会达到那里,所以,你需要停止你的项目,并转移到下一个问题,或改变一些激烈的事情,如改变你的标签或标记更多的数据。我并不是说你不应该尝试解决非常困难的问题,只是要确保你没有在可能达不到你的项目目标的方法上浪费时间。

尽快投入生产

我的最后一个建议是,在最早的时候,或者在模型有价值的时候,将模型部署到产品中。我知道也许你最终的模型会有完全不同的特征,很多工作会被浪费掉。但是,首先,你的模型给出了价值,为什么要等待?其次,更重要的是,在许多情况下,生产有其自身的限制,有些功能在生产系统中不可用,有些功能采用不同的格式,可能您的模型速度太慢或使用太多 RAM 等。及早解决这些问题可以节省大量不切实际的建模时间。

希望你喜欢我的帖子,非常欢迎你阅读和关注我的博客。

我赌因果强化学习

原文:https://towardsdatascience.com/my-bet-on-causal-reinforcement-learning-d94fc9b37466?source=collection_archive---------16-----------------------

营销科学的下一个杀手级应用

Robert Osazuwa Ness,机器学习工程师博士,定期在 AltDeep 撰写关于数据和决策科学、机器学习和人工智能的微趋势观察。

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

上周,我开始准备给一些数据科学研究生讲授一个特殊的主题— 强化学习中的因果建模

反思这个话题,我打个赌:因果强化学习将是未来十年内的 AI 杀手级营销 app

RL 和因果建模的背景

强化学习关注的是软件代理应该如何在一个环境中采取行动,以最大化一些累积回报的概念。因果建模是建立可以明确表示和推理因果关系的模型(最近的科普书籍《为什么的书》提供了该主题的通俗易懂的介绍)。

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

近年来,机器学习研究社区对这两个领域都表现出了越来越大的兴趣。这种对强化学习的兴趣是由结合深度学习和强化学习以创建能够击败人类专家的代理的重大成就推动的。突出的例子包括古代战略游戏围棋基于团队的比赛在幻想电脑游戏 Dota 2有人认为深度强化学习是广义 AI 的路径。

因果建模如何适用

说到玩游戏,人类代理人通过形成其环境的因果模型来“玩”活着的生命的“游戏”。这些是概念模型(“这是一个棒球,那是一扇窗户”),对象之间有因果关系(“如果我把棒球扔向窗户,它就会粉碎”)。因果模型允许我们将知识转移到新的不熟悉的情况(“我敢打赌,如果我把这个奇怪的新的硬的重的东西扔向那个奇怪的新的脆的玻璃状的东西,它也会碎”)。

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

当决定做什么和不做什么时,人类用这些模型进行推理。你是否曾经思考过你在特定情况下的行为,并认为,“如果我做的事情不同,事情会变得更好。”那叫做反事实后悔,是因果推理的一种形式。你在头脑中使用一个因果模型,在脑海中模拟如果你做出不同的决定,事情会如何发展。反事实后悔是这种模拟的可能结果和实际发生的结果之间的差异。当你基于对过去决策的因果推理做出你认为会避免遗憾结果的决定时,你正在利用强大的认知机制。

一些游戏代理,比如最近在无限注德州扑克中击败人类扑克专家的代理,通过模拟数百万场游戏,做了一个最大限度减少反事实后悔的暴力版本。这比人类玩家依赖更多的经验和计算资源。

缺乏实用的工具

我专注于执行。虽然网上有无穷无尽的深度强化编程教程。然而,在编程强化学习中引入因果建模的实际案例研究还很缺乏。有一些研究(例如由 Vicarious AI 开发的模式网络),但是我实际上还没有看到任何代码。例如,将因果建模中的编程抽象如 Pearl 的 do-operations 与强化学习中的动态编程相结合的最佳方式是什么?我的希望是,将因果建模的理论和方法应用于编程 RL 可能会导致构建有用的编程抽象,用于构建更好的 RL 代理,特别是那些只需要一些真实或模拟经验就可以处理不熟悉情况的代理,就像我们人类一样。

自动化决策科学的赌注

我说我在这个问题上“打赌”,而不是做预测,因为打赌是游戏中有皮肤的预测。当我可以在 deepfakes 或 transformer networks 上工作的时候,我正在解决这个问题(这两个项目都非常值得、有利可图,而且有些令人恐惧),因为我认为这将会有回报。

我看到了一些套利机会。深度强化学习的商业应用实际上是不存在的,除了向 OpenAI 和 Deepmind 投入大量资金,以便他们可以玩视频游戏(这没什么错)。

然而,RL 中的核心理论是为决策科学的各种元素提供动力的相同理论;顺序实验、最优化、决策理论、博弈论、拍卖设计等。将这些理论分支应用于决策问题正是数据科学家影响最大的领域,尤其是在科技领域。

因果建模是连接所有这些领域的线索。它甚至引入了计算认知心理学,在那里人们模拟了人类头脑中的因果模型。这使得人们可以从关于人类行为的数据中模拟人类的非理性,如认知偏差和谬误。在我看来,广告商花了大量时间让人们不理性地花钱。

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

我认为因果强化学习将是市场营销的圣杯。想象一下,在《黑镜》中,他们可以在数字口袋世界中制造出一个认知克隆体,并进行一百万次模拟,测试你会购买什么样的产品。就像那样。

我的顶点项目:伦敦房地产价格和场馆数据分析

原文:https://towardsdatascience.com/my-capstone-project-real-estate-prices-venues-data-analysis-of-london-c936c0bc4b1d?source=collection_archive---------16-----------------------

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

Photo by Giammarco on Unsplash

他的文章是为 Coursera 的 IBM 数据科学专业认证的最终顶点项目的一部分。在这篇文章中,我将分享我所面临的困难以及我实现的一些概念。

本文将包含任何数据科学项目所必需的以下步骤:

  1. 问题陈述
  2. 数据收集
  3. 数据预处理
  4. 机器学习
  5. 形象化
  6. 结果

问题陈述

伦敦是英格兰和英国的首都和最大的城市,拥有欧盟最多的城市人口。伦敦有各种各样的人和文化,该地区有 300 多种语言。其 2016 年年中的城市人口(对应大伦敦)估计为 8,787,892 人,是欧盟人口最多的城市,占英国人口的 13.4%。根据 2011 年的人口普查,伦敦市区拥有 9,787,426 名居民,是欧盟第二大人口密集区,仅次于巴黎。人口密度为每平方英里 14,500 人。[1]

伦敦是一个人口和人口密度都很高的城市。从房地产投资者的角度来看,我们希望投资于房价低、设施完善(商店、餐馆、公园、酒店等)的地方。)和社交场所都在附近。记住以上事情,对于一个人来说,在这样一个大城市找到这样一个地方并收集如此多的信息是非常困难的。

当我们考虑所有这些问题时,我们可以创建一个地图和信息图表,其中房地产指数放在伦敦上,并根据场地密度对每个区进行聚类。

数据收集

考虑到上述问题,数据收集如下:

  • 我从维基百科上找到了伦敦地区及其行政区和邮政编码的列表。[2]
  • 关于房价,我搜索并找到了一个很棒的网站,上面有最新的伦敦房价和邮政编码。[3]
  • 我使用 Forsquare API 获取伦敦特定行政区最常见的场所。[4]
  • 我用的氯普图。伦敦 geojson 文件。[5]

数据预处理

首先,从维基百科上搜集的数据必须是干净的。

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

unclean data from Wikipedia

我删除了所有的超链接,有些地方有不止一个邮政编码,所以我只保留了一个邮政编码。

对于下一张平均房价表,数据最初看起来是这样的:

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

Unclean data of house prices

首先,我删除了所有的空值,然后去掉了不需要的列,只保留了“面积”和“平均价格”列。然后“平均价格”列包含字符串,所以我通过删除英镑符号和逗号将其处理为整数。

在清理了两个表之后,我执行了两个表的内部连接和合并,并从结果表中删除了“拨号代码”和“操作系统网格参考”列,因为它们没有用。然后,通过使用地理编码器库,我找到了该位置的经度和纬度,并在我的数据帧中添加了每一列。

我使用 pythonfollowlibrary 来可视化伦敦及其行政区的地理细节,并创建了一张叠加了行政区的伦敦地图。我使用纬度和经度值得到如下的视觉效果:

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

Map of London, with markers of different neighborhoods

我利用 Foursquare API 来探索行政区并对它们进行分段。根据给定的纬度和经度信息,我为每个区设计了 100 个场地和 1400 米半径的限制。这是一个来自 Foursquare API 的场馆名称、类别、经度和纬度信息列表。

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

This for the first Location

我对所有位置和每个位置的场地计数等重复该过程。是:

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

最后,通过结合使用 Foursquare API 和创建的数据集,生成了伦敦街区最常去的场所的表。

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

机器学习

我们在行政区有一些共同的场地类别。为此,我使用了无监督学习 K-means 算法来对行政区进行聚类。K-Means 算法是无监督学习中最常用的聚类方法之一。

首先,我将运行 K-Means 来将这些行政区分成 6 个簇,因为当我用 elbow 方法分析 K-Means 时,它确保了 K-Means 的最佳 K 值为 6 度。

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

然后我合并了每个区的聚类标签表。在检查每个集群后,我将每个集群标记如下:

  1. 混合社交场所
  2. 酒店和社交场所
  3. 商店和海鲜餐馆
  4. 酒吧和历史古迹
  5. 运动和田径
  6. 餐馆和酒吧

我也想象每个地方的房价:

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

如上图所示,我们可以将范围定义如下:

  • 500000:“低级别 1”

  • 500000–750000:“低级别 2”
  • 750000–1000000:“平均级别 1”
  • 1000000–1250000:“平均级别 2”
  • 1250000–1750000:“高等级 1”
  • < 1750000:"高等级 2 "

结果表:

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

形象化

首先,我将集群可视化,您可以看到下面的集群图:

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

k-means clustering

  1. 红色(聚类 0)
  2. 紫色(第一组)
  3. 蓝色(第 2 组)
  4. 青色(第三组)
  5. 绿色(第 4 组)
  6. 橙色(第 5 组)

接下来,我通过使用叶绿图和顶部的聚类在地图上可视化平均房价。

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

Average house pricing

结果

我得出的结论是,市中心以及附近酒店和社交场所的房价非常高,你可以在上面的地图中清楚地看到,而郊区和远离市中心的社区房价较低,但设施也很好。几乎所有的低价社区都靠近餐馆、酒吧、体育设施等。一些行政区如威斯敏斯特、肯辛顿和切尔西的房价非常高。贝克斯利、克罗伊登和萨顿区的房价非常低,但附近有很好的场馆可供参观。

结论

随着人们转向大城市创业或工作。由于这个原因,人们可以很容易地解释哪里生活设施齐全,价格便宜。

不仅对于投资者,城市管理者也可以通过使用类似的数据分析类型或平台来更有规律地管理城市。

参考

  1. https://en.wikipedia.org/wiki/London
  2. https://en.wikipedia.org/wiki/List_of_areas_of_London
  3. 【https://propertydata.co.uk/cities/london
  4. https://developer.foursquare.com/
  5. https://joshuaboyd 1 . carto . com/tables/London _ boroughs _ proper/public

这个项目的代码可以在我的 github 资源库中找到。谢谢大家!

由于这是我的第一篇关于媒体的文章,也是我的第一个完整的项目,可能会有一些错误。请随时评论我可能犯的任何错误,以便我可以纠正自己并学习。

我汇编的简单而实用的数据清理代码

原文:https://towardsdatascience.com/my-compilation-of-simple-yet-practical-data-cleaning-codes-d692ec20dca8?source=collection_archive---------13-----------------------

为了解决混乱数据的常见情况

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

长话短说,这份数据清理代码汇编是我上一篇文章的更新版本— 简单而实用的数据清理代码 出乎意料地火了起来。

我收到了来自数据科学家和数据专业人员的大量消息,介绍工具箱如何帮助他们完成日常的数据清理任务,我希望通过使用我最新汇编的数据清理代码来更新工具箱,使其更加完整。

在本文结束时,我希望您会发现一些对您的数据清理任务有帮助的数据清理代码,并且您可以在尽可能短的时间内实现它们。

把这个工具箱想象成你作为一个数据科学家的武器库,它有一个通用和有用代码的集合,你可以对它们稍加修改或不加修改地执行你的普通数据清理任务。

我们开始吧!

你为什么需要这个工具箱?

世界是不完美的,数据也是。

无论您是有抱负的数据科学家、有经验的数据科学家还是数据分析师,都没有关系。

在开始分析和理解数据之前,您可能已经有 40%-70%的时间陷入了数据清理任务。

是的,现实是这个过程通常是不可避免的(除非有人帮你清理数据)。

就我个人而言,我已经经历过这段时间的耗时和繁琐的部分,因为数据清理实在是太重要了,不容忽视。

因此,就在几个月前,我开始为数据清理任务构建我的个人工具箱,因为我注意到许多数据清理代码实际上可以重复用于许多常见的数据清理任务。

换句话说,这些代码可以被推广用于其他常见的数据清理场景,在这些场景中,它们具有相似的模式——因此我编译了所有以前的数据清理代码。

这是至关重要的,因为我的工具箱节省了我思考和搜索的大量时间,因为我可以在几秒钟内从我的代码库中**“复制和修改”。**

通过与您分享这个工具箱,我希望能够节省您的时间,并使您的数据科学工作流程更加高效,以便您可以专注于其他重要任务。

我更新的数据清理工具箱

下面的代码是在以前的数据清理代码基础上添加的。请随意查看我的上一篇文章— 简单而实用的数据清理代码 了解更多的数据清理代码。

在下面的代码片段中,出于不言自明的目的,代码是用函数编写的。您总是可以直接使用这些代码,而无需将它们放入参数稍有变化的函数中。

1.重命名列名

当面对有大写字母或中间有空格的列名时,我们经常需要改变列名,用小写字母和下划线替换它们——这样更简洁、更生动。此外,我们希望列名尽可能明确,这样您的朋友只需查看列名就能大致了解列包含的内容。

听起来微不足道,但很重要。

2.列表理解

你可能认为列表理解是如此普遍,并想知道这怎么能被认为是数据清理的一部分。嗯……对我来说,列表理解是如此的优雅和简洁,以至于你可以在一行代码中抽象出你的逻辑,而不需要任何 for 循环,并且计算起来比 for 循环快得多。

通常,如果我想获得一个基于特定条件的值列表以附加到现有的数据帧或用于进一步分析,我会使用列表理解。

3.为特定列输出不带 NaN 值的数据帧

当您希望输出一个包含列中所有可用数据的数据帧时,这很有用。

例如,您有一个包含所有客户信息的数据帧,您希望输出一个包含所有可用客户 ID 的更新数据帧,并删除缺少客户 ID 的行。在这种情况下,代码应该是这样的:df = df[df['id'].notnull()]

类似的概念可以应用于列为timestamp的时间序列数据。

4.基于列中唯一的最后一个字符串输出数据帧

使用包含所有客户信息的数据帧,并为每个id添加一列timestamp

现在每一个id都不是唯一的,它会在各自的时间段重复出现。对于每个id,您希望获得id的最后一行,因为您只关心每个id的最终客户信息。

这时,您可以使用上面的代码片段删除所有重复的id,只保留最后一行。这确保了我们总是获得具有唯一性id的最终客户信息。同样,这只需要一行代码就可以完成!

5.从数值中获取离散区间

这是我最喜欢的工具之一,当涉及到根据指定的范围将一列中的数值转换成离散的区间时。如果你想把一个连续变量转换成一个分类变量,我强烈推荐你使用pd.cut

**例如,在上面的代码片段中,我们有一个由从 1 到 10 的数值组成的rating列。**如果我们想将这些评分值转换为给定值和指定范围内的特定组,该怎么办?给定使用pd.cut指定的范围,我们可以在离散区间中存储值,并将它们标记为bad, moderate, good, strong

pd.cut的另一个常见用例是将年龄转换成年龄范围组,这样就可以将每个年龄归类到一个标签中。

最后的想法

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

(Source)

感谢您的阅读。

在本文结束时,我希望您会发现这些小工具对您的常见数据清理任务很有用,并且会使您的工作更有效率,当然,对于那些必须不时处理杂乱数据的人来说,生活会轻松得多。

同样,代码本质上实现起来相对简单。我希望这个更新的数据清理工具箱——以及我在我的上一篇文章中分享的工具箱——给你更多的方便和信心来执行数据清理,以及根据我的经验更好地了解数据集通常是什么样子。

一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄

关于作者

Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq的联合创始人/首席技术官。

想要获得免费的每周数据科学和创业见解吗?

加入 Admond 的电子邮件简讯——Hustle Hub,每周他都会在那里分享可行的数据科学职业建议、错误&以及从创建他的初创公司 Staq 中学到的东西。

你可以在 LinkedInMediumTwitter脸书上和他联系。

** [## 阿德蒙德·李

让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。

www.admondlee.com](https://www.admondlee.com/)**

我的数据分析之旅

原文:https://towardsdatascience.com/my-data-analytics-journey-d47cf52e6bd4?source=collection_archive---------29-----------------------

引导我进行数据分析的途径和学到的经验教训

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

Source: https://unsplash.com/photos/FSFfEQkd1sc

我的背景是会计和医疗保健咨询。在这些经历中,我用 Excel 处理了很多工作,来操作、组织和计算来自医院工资单数据和成本报告的指标。我的日子充满了 vlookups、数据透视表、宏、powerpoints,以及浏览 CMS 网站

总的来说,这是一次很好的经历,我和优秀的人一起工作。我开始旅行,过着四大咨询顾问的狂野生活。然而,就职业道路走向的技术轨迹而言,我并不完全满意。我看了看我的管理层,发现如果我继续走这条路,5-10 年后我会在哪里…主要是通过电话或旅行到网络和向医院管理层推销项目。我知道那不是我想做的。

在这个极其专业的团队工作了 2 年后,我想回到学校,拓展我学习和成长的技能。

全日制 MBA 加上我正在从事的一个初创项目,足以让我提交两周通知,开始人生的另一个阶段。

在学校的第二年(以及我的创业冒险,我计划在未来的帖子中写下这一点),我在各种行业建立了联系、进行了探索和尝试:公共卫生、医疗保健管理、非营利组织、广告、网络开发、运营改进咨询和数据分析。在所有这些经历中,数据分析是我最感兴趣的。我选修了这一领域的其余课程,并以此来满足我的学位要求。通过数据探索和发现洞察,是一个非常深刻和有用的过程。有一个永无止境的学习曲线,当我从事一个项目或有趣的数据集时,几个小时就像几分钟一样流逝。我的第一个数据科学相关项目是自动化和计算“风险”棋盘游戏的概率,你可以看看这里的。我花了很多时间做这个,并在此过程中自学 python。

在风险项目之后,我决定参加 Udemy 课程,并从事其他我觉得有趣和有用的项目。其中包括与统计学、机器学习和数据分析相关的概念。我最喜欢的项目链接在这篇文章的末尾。

这是一次疯狂的经历,在过去的 6 个月里,我学到了很多东西……幸运的是,2 个月前,我在 Regions Financial Corporation 找到了一份改善运营的好工作,所以我没有太多时间去做我想要的个人项目。然而,我正在学习与仪表板构建和项目管理相关的技术技能,并且我也计划写博客。通过一个公司赞助的 DataCamp 账户,我也一直在研究用于数据科学的 python,并计划很快回顾我使用 DataCamp 与使用 Udemy 课程的经历。

这可能需要很多年,但我的目标是精通并自信于我的数据科学能力,这样我有一天可以从事机器学习和高级建模工作。我还有很长的路要走,但我相信在过去的一年里,我承担了健康的风险,付出了很多努力,并取得了很大的进步。

我知道这是老生常谈,但对任何阅读这篇文章的人来说,唯一的教训是每天都努力追求你想要的东西。设置正确的常规,在你的生活中有正确的人,创造迎合你目标的习惯。进步会很慢,但只要你不断努力,就会实现。

感谢所有阅读或关注我的旅程的人。

直到下一次,

安德鲁

我最喜欢的几个项目:

基尼指数 vs 信息熵

优步点评文本分析

随机森林是否优于 Logistic 回归?(一比较)

Excel 与 SQL:概念上的比较

用 Python 中的逻辑回归预测癌症

利用数学和 Python 优化你的投资

从头开始计算 R 平方(使用 python)

Python 中的字云:综合示例

简单线性 vs 多项式回归

我的设计宣言

原文:https://towardsdatascience.com/my-design-manifesto-9ad8f580ef6f?source=collection_archive---------10-----------------------

我希望在我的设计中遵循的一套雄心勃勃的原则

这是我在巴克内尔大学埃文·佩克的人机交互课上的反思。在这篇文章中,我将分享我的设计哲学,以及我希望如何解决未来的设计问题。我将从课堂上参加的四次设计冲刺中汲取经验。特别感谢 Pablo Stanley 设计的漫画

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

Photo by Kelly Sikkema on Unsplash

设计冲刺的范围从为移动设备重新设计 web 应用程序到创建诱人的可视化效果,从使用 Leap Motion 获得“乐趣”到使用新兴技术建设更美好的未来。以下是我四个项目的一些结果。

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

[Clockwise] (1) Redesign of the Campus Theatre app (2) Street View Adventure in VR (3) Literacy Rate visualization (4) Slither.io using Leap Motion

在一个充满严格的技术课程的计算机科学课程中,这门关于人机交互的课程对我来说是一种解脱。差不多了。虽然听起来很老套,但我被鼓励以更开阔的思维来处理问题。在我们的项目中,我们采用了双钻石的设计思维过程。

在所有的创意过程中,在提炼和缩小到最佳创意(“聚合思维”)之前,会产生许多可能的创意(“发散思维”),这可以用一个菱形来表示。但是双菱形表示这发生了两次——一次是确认问题定义,一次是创建解决方案。—英国设计委员会

实际上,这个过程要复杂得多。用户测试和反馈有许多阶段,每个阶段都可以显著改变项目的发展方向。有时候,你会推出一个有用的产品。在其他时候,一切都是一团糟。

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

User testing often changes how you approach the problem that you once set out of solve | Credit to Pablo Stanley

设计原则

以下是我在这学期中学到的一些经验。

—将用户放在首位

你不是在为自己设计,所以不要把你的偏好置于用户之上。通过努力理解你的用户,你在识别真正的问题上迈出了一大步。

设计师被训练去发现真正的问题。对错误问题的绝妙解决方案可能比根本没有解决方案更糟糕:解决正确的问题。—唐·诺曼,日常用品设计

承认你的用户可能无法清楚地表达他们的问题。正如 Andrew Ko 在如何理解问题中建议的那样,进行访谈以了解问题。否则,带他们出去吃午饭,观察他们努力解决你希望改进的设计。斯坦福大学设计学院有一个关于观察用户时要记住的事情的指南。

—在构思过程中不受限制

不要因为担心执行你的想法所必需的工具可能不存在而退缩。想象你拥有世界上所有的资源。鼓励团队内部的参与。

[## 设计套件

设计工具包是 IDEO.org 的平台,学习以人为中心的设计,一种创造性的方法来解决世界上最…

www.designkit.org](http://www.designkit.org/methods/28)

一旦最初的头脑风暴完成,促进评论和反馈。我不认为所有的想法都是“有用的”或者值得同等程度的考虑。你确实希望最终达成共识,但如果不(尊重地)挑战你认为需要更多思考的想法,就没有任何好处。

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

Credit to Pablo Stanley

如果你缺乏想法,环顾四周,看看已经建成了什么。奥斯汀·克莱恩恰如其分地说,“像艺术家一样偷窃。”

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

As newbies to Adobe XD, my team was looking for some carousel inspiration. We found a cool Starbucks app redesign and tailored it to our needs.

—让自己熟悉技术

努力理解你的工具的局限性。毫无疑问,知道如何编码会增加团队的价值,然而,并非所有的设计师都需要学习编码。毕竟,他们“仅仅”需要能够估计一项工程任务可能需要的工作量。当然,众所周知,软件开发是不可预测的,这种技能只有在和工程师一起工作一段时间后才能获得。

根据我的经验,在 Leap Motion 和 VR sprints 期间,如果我们都花一些时间来解决技术的限制,我们就可以避免很多令人头疼的沟通问题。这也能让我们更好地相互理解。

—雄心勃勃

用户重视你所付出的努力。如果你采用第一种解决方案起作用,你就剥夺了额外努力带来的快乐。然后你会想这个项目会是什么样的。

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

Exploring the untrodden paths lead to immense satisfaction and joy. | Credit to Matt R. Trower

在我的 Leap Motion 项目中,我亲身经历了这一点。尽管我们为许多游戏做了《绿野仙踪》测试,我们还是选择了 Slither.io,因为它看起来很容易实现。结果呢?我们没有成就感,如下所示,我们的用户大多反应是“哼”

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

当你探索无限的可能性时,正如我上面写的,你可以在你的团队中激发能量。在的未来冲刺设计中,我的两个队友为我们的“选择你自己的冒险”游戏想出了一个引人入胜的故事。虽然故事情节太长,无法在两周的冲刺中完全实现,但它让我们所有人都感到兴奋,甚至为实验提供了广度。

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

A part of the storyline for our Street View Adventure Virtual Reality game. Having many options gave up plenty of room to modify the scenes of the adventure on the fly.

—做让你开心的事

这是前一个原则的后续。在现实世界中,你并不总是能够选择你所从事的工作。但是如果你这样做了,首先贡献给这个项目中最能激励你的东西。咄!

有些人喜欢考虑大局,而有些人喜欢解决细节。就我个人而言,我喜欢添加设计术语中所说的启示。这是一个暗示如何使用界面元素的线索。

一个人如何知道一个界面有哪些启示?这就是意符的概念变得重要的地方。能指是启示存在的任何感官或认知指示器。—安德鲁·柯,用户界面理论

以下是我特别喜欢的两个符号。

  • 对于识字率可视化,我使用了适合在地图上显示连续数据的调色板。这取代了梯度标度,使观察者更容易区分识字率差异水平。如下图所示,大量的分割与渐变有着相同的问题,所以我们坚持只进行四次分割,并增加一次来表示不可用的数据。

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

Use a sequential color palette over a gradient scale when your users hope to be able to clearly separate any two levels in your data.

  • 在 VR 游戏中,我在一个静态的主屏幕上制作了开始按钮的动画来吸引用户的注意力,让他们更容易进入游戏。

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

Only after user testing did we realize how much value these signifiers added.

—保持简单

不要过于复杂。功能膨胀是真实存在的,当你忽视用户如何与新功能交互时,它就会发生。

如果你的用户不在乎黑暗模式,你的支持者就不能证明在你的设计中增加黑暗模式是正确的。

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

Image Source

同样,不要成为沉没成本谬论的牺牲品。通常,在投入大量精力之后,继续追求一个潜在的解决方案是很有诱惑力的。然而,如果你知道一种简化现有设计的方法,可以考虑征求专家的意见,甚至是小规模的 A/B 测试

在我们的可视化项目中,我经历了惨痛的教训。我们花了这么多时间使用 JQVMap 创建一个动画世界地图,即使在得知 Tableau 可以在几分钟内达到类似的效果后,我们仍然坚持我们的原计划。这也是我们没有以正确的方式制作原型的结果。在他的书勾画用户体验:获得正确的设计和正确的设计 **,**中,比尔·巴克斯顿建议早期的原型应该邀请建议,不应该包含个人偏见或依附。如果我们对变化持开放态度,我们可以节省时间,并利用它来创建一个更引人注目的可视化。

—区分优先级

一旦你收到用户的反馈,不要根据你的团队做出某个改变(修复)所花费的时间来进行优先排序。在你的待办事项列表中,将最大化用户互动乐趣的任务放在首位。

可用性通常与美学分开处理。…由于易用性策略似乎没有带来回报,这让我们陷入了一个奇怪的境地:我们有一些产品,乍看起来很好,但一旦我们开始与它们交互,就会感到沮丧。我们认为重点应该从漂亮的外观转移到漂亮的交互,漂亮的外观是其中的一部分。—摘自让我们做些有趣的事情

如果一个改变只需要 10 分钟就能实现,那就想尽一切办法去做吧。如果有更长的时间,停下来分析一下哪些变化会最大程度地提升用户体验。为了指导你的分析,看看 UX 的法律。

[## 主页| UX 法律

UX 法则是设计师在构建用户界面时可以考虑的准则和原则的集合。它…

lawsofux.com](https://lawsofux.com/)

我们优先考虑的一个例子是 VR 游戏中的音效。在用户测试之前,我们知道故事的两个场景之间的过渡可以更平滑。我们的测试人员同意并强调声音需要淡入或淡出来创造一种更加有机的感觉。VR web 框架 A-Frame 在声音组件上没有很好的文档,但我们坚持下来,并能够实现交叉渐变音频效果。

—不要试图让每个人都开心🙁

识别你的主要用户是关键。认清取舍,如果需要的话,放过你的二级用户。

试图取悦每一个人会带来压力、痛苦、资源损失和挫败感。所以不要怕失去人,要怕失去眼光。—未知

在巴克内尔校园剧院网站的重新设计中,我们的目标是根据宾夕法尼亚州刘易斯堡游客的需求定制应用程序。由于时间有限,我们不得不在“待办事项”屏幕和应用内检票之间做出选择。我们最终选择了前者,因为我们一致认为了解正在进行的活动是游客体验的一个重要方面。

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

Things to do screen of the app. We decided to link the tickets button to the existing Campus Theatre website.

最后的想法

正如我前面提到的,这些原则是我在进入人机交互领域仅仅一个学期后学到的。我自称没有专业知识,但在这个课程之后,我很高兴我开始形成自己的关于好的设计需要什么的观点。

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

Credit to Pablo Stanley

设计思维很乱,当然也不直截了当。它涉及的不仅仅是漂亮的用户界面。清晰的愿景和关注产品的用户一样重要。它能让你真正理解手头的问题,并做出合理的妥协。一个好的设计不一定包含过度工程化的解决方案。然而,你需要遵循基本原则。获得关于你的低保真度原型的早期反馈,再加上好的(有时是无私的)优先级排序,可以为你的成功做好准备。

在这个课程中,我也学到了很多关于可访问性的知识,这是我以前没有接触过的领域。从不同的角度看问题令人耳目一新,我只希望我们在课堂上有更多的时间讨论这些问题。设计是一个快速发展的领域,所以像我这样的新人感到不知所措是合理的,也是很常见的。从糟糕的设计到好的设计需要努力,不管你选择如何定义它们,但是接受新的挑战会有很大的帮助。

如果你喜欢这个,请看看我的其他媒体帖子和我的个人博客。我一直在寻求提高我的写作水平,所以请在下面写下你的建议。

[## 人机交互设计组合

亚什·米塔尔的个人网站。他是巴克内尔大学计算机科学专业的四年级学生。

yashmittal.me](https://yashmittal.me/hci-portfolio/)

我如何将我的博客从 GitHub 页面迁移到 Netlify

原文:https://towardsdatascience.com/my-experience-migrating-my-blog-from-github-pages-to-netlify-92ff6c85fb04?source=collection_archive---------16-----------------------

作为数据科学家写博客时需要考虑的事情

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

Migrating Pelican site from GitHub Pages to Netlify

动机

今天我遇到了瑞秋·托马斯的关于“T5”为什么你(是的,你)应该写博客 的故事。她提出了一个很好的观点,所有的数据科学家都应该有自己的博客。她进一步解释说,写博客有助于你理清思路,传播知识,获得关注。所有伟大的观点,我全心全意地同意。所以我想分享我最近写博客的经历,并希望它能给我一些启示,告诉我做这件事需要什么,为什么值得。

和解

我有自己的博客已经有一段时间了。从我在 WordPress.com 的第一篇博客开始,我在多个平台上跌跌撞撞,试图为我的思想和感情找到一个好的归宿。大约一年前,我决定使用 Pelican (一个基于 Python 的静态站点生成器)来生成我的内容,然后将其托管在 GitHub 页面上。这一切都很好。

Python 是一种易于编写但非常强大的编程语言。同样作为一名数据科学家,你很有可能每天都和 Python 生活在一起。所以在所有静态站点生成器中,我挑了鹈鹕,它相当成熟,定期维护。它还支持大量的主题和插件。(我甚至开发了一个 Pelican 插件,它可以像计算媒体一样计算文章阅读时间,并被拉入主分支。).它支持 Jupyter 笔记本电脑,这对于数据科学家来说也是一个优势。

GitHub Pages 是一个非常受欢迎的免费托管服务,由 GitHub 慷慨提供。它基于 Ruby 的 Jekyll 框架,但你不必使用它。这个解决方案是完全免费的,而且维护起来有些简单。一旦你设置好了一切,你只需要专注于把内容和运行一个简单的脚本推送到 GitHub,它会自动让它活起来。我用它写了一段时间的博客。一切似乎都很好。

(注:任何人想了解更多关于如何做到这一点,可以查看这篇详细的博文。)

斗争

斗争开始了。不知何故,我不知道如何使搜索引擎优化工作。我在 GitHub 和我的博客网站上曝光了“master”分支,谷歌认为这是重复的内容,并给出了相当糟糕的排名。似乎很难获得任何流量。此外,作为 GitHub 提供的一项免费“辅助”服务,GitHub 页面上并没有太多的托管功能。正如 Netlify 在 this page 中概述的那样,当你开始写博客时,这是可以的,但当你试图更严肃地对待你的工作时,GitHub Pages 就不会满足你。

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

Image Credit: Netlify.com

冲突

所以我决定迁移到 Netlify,它也是免费的,但提供了更多的功能,如果我想在未来扩大规模,那里有很多付费计划。

准备好鹈鹕

因为我已经在 GitHub 上准备好了我的 Pelican 站点,所以大部分工作已经完成。(如果你还没有设置鹈鹕站点,可以按照这个教程。)我仍然需要对站点进行一些更改,以便 Netlify 可以顺利地连接到我的 GitHub 帐户并拉动站点进行部署。

依赖关系:

首先,Netlify 需要设置必要的依赖项,这样它才能构建我的站点。这需要我在 site GitHub repo 下提供一个requirements.txt文件。为此,我为它创建了一个 Python 虚拟环境:

$ sudo apt update
$ sudo apt install virtualenv  # install virtualenv
$ cd ~/git/wayofnumbers.github.io/
$ virtualenv venv -p python3.6  # create a virtualenv for Python 3.6
$ source venv/bin/activate  # activate the virtual env

我还在你的.gitignore文件中添加了venv/,这样 GitHub 就不会同步它了。一旦虚拟 env 准备就绪,我只安装了必要的包,如下所示:

$ pip install -U --force-reinstall pip
$ pip install pelican Markdown typogrify ipython beautifulsoup4 nbconvert

现在,依赖项已经全部安装在我的本地虚拟环境中,我使用下面的命令来生成requirements.txt:

$ pip freeze > requirements.txt

CNAME:

我在回购的根文件夹下创建了一个 CNAME 文件,其中包含我的自定义域名(“wayofnumbers.com”)。我还在我的pelicanconf.py文件中添加了以下几行,以确保 CNAME 文件被复制到了output目录的根目录下:

STATIC_PATHS = ['../CNAME']
EXTRA_PATH_METADATA = {'../CNAME': {'path': 'CNAME'}}

插件和主题:

然后是处理插件和主题的时候了。我将我使用的插件和主题(文件夹)复制到 repo 中,并将pelicanconf.py文件设置为指向它们,因为在 Netlify 构建时它需要在 repo 中访问它们。

Runtime.txt:

Netlify 需要一个runtime.txt来决定使用哪个 Python 版本来构建站点。所以我在回购的根目录下创建了一个runtime.txt文件,并将3.7 (Netlify 支持3.73.5)放入其中。

好了,现在鹈鹕已经准备好了,我可以继续设置网络生活了!

连接到网络生活

这部分其实挺容易的。我注册了 Netlify 的免费层,并按照这个分步指南连接我的 GitHub repo。唯一不同的是在’步骤 4:配置您的设置’。因为我使用的是 Pelican,所以我使用的“构建命令”是:

pelican content -s publishconf.py

由于依赖问题,在一些失败的构建之后,我让一切都工作了。Netlify 自动拉了我的 GitHub repo,安装了依赖项,构建了站点。我用谷歌域名申请了一个自定义域名,并按照这个链接设置:https://www.netlify.com/docs/custom-domains/#googledomains。一年 12 美元,完全值得。

我也打开了 SSL,遵循这个指南。

所以现在我的网站在它的新家开始运行了:

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

My blog with ‘Elegant’ theme

思想

整个迁移过程花了我一天时间。我从中学到了很多新东西。这很有挑战性,但完全可行。我鼓励任何对认真对待你的博客感兴趣的人尝试一下。挺整齐的。有人说数据科学家应该专注于他们的研究和学习,我倾向于不时地走神。在这里学习一些 web 编程技巧,在那里获得一些 DevOps 经验。我发现这种“离题”实际上有点放松,刺激了我大脑的另一部分。这是一种休息和放松的方式。我想玩一个黑客游戏,一路解决问题。了解部署将有助于您更容易、更快速地将您的模型投入生产。拥有一个博客就像拥有了另一个与你的同事和志同道合的人交流的场所。不会错的,对吧?

欢迎任何反馈或建设性的批评。你可以在推特 @ lymenlee 或者我的博客网站【wayofnumbers.com上找到我。

我用遗传算法代替深度学习反向传播(SGD)的实验

原文:https://towardsdatascience.com/my-experiments-in-replacing-deep-learning-backpropagation-sgd-with-a-genetic-algorithm-c6e308382926?source=collection_archive---------19-----------------------

本文描述了我用遗传算法(GA)取代深度学习模型中的随机梯度下降(SGD)和反向传播的实验。

作为一个剧透,让我说,这些早期的实验并没有表现出接近 SGD。然而,我在结论中对此说得更多。

语境

出于本文的目的,我将使用下图来提供今天在训练深度学习模型时使用的突出流程。

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

成本函数通过比较训练结果和预期结果(基本事实)来计算误差量( E )。反过来,SGD 将更改应用于模型参数,以改进下一个训练结果。值得注意的是,模型中使用的函数必须是可微的,以便 SGD 搜索最优解。

参数更新循环继续,直到达到所需的精度(图中未显示)。

我将用 W 来表示模型参数集。深度学习模型可以轻松包含数千万(如果不是数亿)的参数。训练完成后, W 将形成训练好的模型的基础。

遗传算法方法概述

下图显示了 SGD 被 GA 替换,单个的 W 被群体 W 替换,我将用**[W**来表示。

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

成本函数被移除,并由精度函数代替,该精度函数在 GA 术语中提供适应度函数。适合度值是给定一些标准的群体成员的适合度。适合度是一个 0 到 1 的值,0 表示最适合。我用【T24【F】来代表 [ W ]每个成员的适合度。

注意,在 GA 方法中,模型函数不必是可微的,因为 GA 不会使用函数导数来收敛于解。

遗传算法概述

有许多关于 GAs 的学术性和详细的书籍,例如,Goldberg 的“搜索、优化和机器学习中的遗传算法”。在这里,我会停留在(非常)高的水平。

给定一个种群 [ W ] ,以及种群中每个成员的适应度值 [ F ] ,GA 将决定下一代种群的构成。

W下一个=GA(W当前F当前)

一个简单的遗传算法可以描述为:

  1. 选择——将适应度作为一个偏差来配对成员
  2. 组合(combination )-组合所选对以创建下一代。这也被称为交叉,父母的基因在下一代中交叉。
  3. 突变——在释放新群体之前,应用(少量)随机突变

实验

我最初从一个简单的 XOR 问题开始,测试 GA 的流程。GA 确实相对较快地收敛于一个解决方案。然而,对于这篇文章,我将描述一个更实质性的问题。

该实验基于 TensorFlow MNIST 深度示例(mnist _ Deep . py as found the tensor flow GitHub repos)。这是一个用于识别 MNIST 手写数字数据集的深度卷积神经网络。该模型包含数千万个参数;我认为这将是一个很好的非玩具的例子。

我将所有的模型参数(权重和偏差)外化到 TensorFlow 变量中,这样就可以很容易地操纵 TensorFlow 张量之外的值。使用“feed_dict”将参数 W 载入 TensorFlow 模型图。

人口规模参数化为 N 。使用numpy.random.randn(平均值为 0 且方差为 1 的高斯分布)初始化N 个起始模型中的每一个。

然后,对于 [ W ] 中的每个 W ,计算适应度值。要运行的代数是 G (或者直到解收敛)。

*for generation = 1 to G
   for index = 1 to N
       F[index] = session.run(accuracy, feed_dict = W[index])*

计算下一代W的过程是:

*Random pairing of [W], biased towards fitter membersCrossover of each pair in [W]Random mutation of each member of [W]*

交叉

每个 W 由一组矩阵形成,其中每个矩阵代表机器学习模型的一部分(权重和偏差)。给定一对中的两个成员:

*Wa -> [a1, a2, a3, ...] # where each a is a matrix
Wb -> [b1, b2, b3, ...] # where each b is a matrix* 

有许多方法可以跨越 Wa 和 Wb。在这个实验中,我选择随机交叉相应矩阵中的元素。例如:

*mask = random 0 or 1 in shape of a1
mask_inv = opposite of masknew_a1 = a1 * mask + b1 * mask_inv
new_b1 = b1 * mask + a1 * mask_invand so on for (a2,b2), (a3, b3), etc.*

变化

作为 GA 超参数,有一个“变异量”,但变异量本身根据当前解收敛的远近而变化。最终,我发现理解和应用突变是一个挑战。

结果

第一张图显示了 300 代 200 人的种群规模。

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

上图显示了每一代的最佳结果(橙色)。回想一下,MNIST 数据有 10 位数字,因此在上述范围内随机选择 0.9。随着跑步的进行,有一个明显的拉平。对于每一代,最好的模型也是根据验证数据运行的(数据放在一边,不被视为训练的一部分)。

尽管精确度显然不是最先进的,但在某种程度上,遗传算法能够筛选数百万个参数,并随着时间的推移创建更好的模型;都没有反向传播。

在同一次运行中,下图描绘了每代中最佳模型的 100 个数值。图表显示了最初的波动性和随后的稳定值:

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

挑战在于早期的稳定会导致性能的上限,但是不稳定会导致在解决方案空间中的随机行走和没有收敛。突变的程度应该是达到平衡的一个因素。

下图显示了将人口规模增加到 1000 的效果。验证精度从 0.65 提高到大约 0.5。然而,验证准确性似乎在训练准确性之前趋于平稳。

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

结论和讨论

公平地说,200 人甚至 1000 人的人口规模可能太小,不足以取得有意义的结果。也许人口数量应该以百万计。

除了人口规模,还有其他几个超参数可以考虑。一些例子是:

  1. 排名和成对选择。有多少偏向于更适合的成员?在我的实验中,我提升了表现最好的人,这样他们的影响力就超过了严格意义上的健康水平。
  2. 突变。变异有多大?如何应用?是否随收敛而变化?
  3. 交叉。两个模型如何交叉?我选择在矩阵粒度上均匀交叉。两者中较强的一方应该保留更多的价值观吗?矩阵应该被分割然后连接吗?交叉是否应该定义在整个矩阵的交换上?
  4. 批量大小。我尝试了各种批量大小,最终确定为 64。
  5. 过度拟合。看一看 1000 人的运行,可以看到训练结果可能正在改善,而验证结果已经稳定在更高的值。

对我来说,接下来的步骤还没有确定,因为验证收敛的平稳化一直是一个难以克服的障碍(至少在我的计算机能力范围内,MacBook Pro 2018)。

如果你已经做到这一步,感谢你的关注和时间,我希望你喜欢这篇文章!

我用“自然”数据做的实验!

原文:https://towardsdatascience.com/my-experiments-with-natural-data-45eac01ef34f?source=collection_archive---------17-----------------------

我一直对斐波那契数列很着迷!这个序列在宇宙/自然界中比其他任何序列都多,这个事实几个世纪以来一直吸引着科学家。例子包括像树的分枝、茎上叶子的分布、松果的排列、菠萝的幼果和蜜蜂的家谱、星系的螺旋模式、山脉结构等(阅读“更多有待发现的东西”)。黄金比例(phi)的应用,来源于包括艺术,音乐,设计,统计在内的序列。

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

Kazimir Malevich — Suprematist Composition (1916), mimics Golden Ratio

所以我开始“研究”斐波那契(原名莱昂纳多·皮萨诺)&他是如何偶然发现这个数列的。

事实证明,这个序列早在公元前 2 世纪就被印度数学家阿查里亚·平加拉(平加拉教授)通过他的 Matra-Meru(我们现在知道的帕斯卡三角形)工作而知晓,但是是莱昂纳多·皮萨诺(斐波那契)在他周游地中海世界后把它带到了西方。达芬奇是一个出生于 12 世纪的意大利人。他游历了西方世界,主要通过他在 1202 年的著作《计算之书》来推广印度-阿拉伯数字系统。但是现在,他是如何发现这个序列的。嗯,他试图解决一个涉及兔子数量增长的问题(是的,我猜他是他那个时代的尤塞恩·博尔特,没关系)。兔子的“一代又一代”产生的顺序(我知道,听起来很多,但兔子的妊娠期大约是一个月,所以假设一只兔子一年可以生 12 次,不开玩笑,它们很快)是这样的:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 …

这就是我们今天所知道的斐波那契数列。后来人们发现,在自然界中这种序列经常出现,这一事实让科学家们挠头了几个世纪。顺便说一下,斐波那契(意为“波纳契之子”)这个名字是由一位法意历史学家在 1838 年创造的。

嗯,就是这样。所以在多年挠头之后,我已经养成了在任何地方使用这个序列的诀窍(是的,我内心的审问者会间歇性地醒来)。

现在,回到题目(实验)。所以昨晚我浏览了时间序列预测模型&偶然发现了一个奇怪的巧合,如果真是这样的话!?!当我开始阅读指数平滑模型时&当观察数据变老时,权重值如何指数下降。以下等式解释了预测方法:

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

t =时间段数(t = 0 为最近的时间段,t = 1 为之前的时间段)

Y(t) =周期 t 内的实际值

重量(t) = α(1-α)^t

n =时间段总数

这里,alpha (α)的值在 0 和 1 之间变化,使得所有权重的总和接近 1。

前面提到的我内心的质疑者想,为什么不取斐波那契数列中的数字,用重量来代替它们。所以我就这么做了&取序列中的前 15 个数字(不包括 0),并对它们进行归一化。

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

现在,我在斐波纳契数列中的权重是:

0.382, 0.236, 0.146, 0.09, 0.0558, 0.0345, 0.0213, 0.013, 0.0081, 0.005 …

根据这些标准化值,t=0 时的第一个权重为 0.3822。现在,我用上述指数平滑权重等式中的第一个权重替换该值,以便在 t=0 时α = 0.3822。现在让我们在指数平滑的权重等式中替换这个α值:

在 t = 0 时,w(0)= 0.3822 *(1–0.3822)⁰= 0.382

当 t = 1 时,W(1)= 0.3822 *(1–0.3822)= 0.236

在 t = 2 时,W(2)= 0.3822 *(1–0.3822)= 0.1458

在 t = 3 时,W(3)= 0.3822 *(1–0.3822)= 0.0901

在 t = 4 时,w(4)= 0.3822 *(1–0.3822)⁴= 0.055

在 t = 5 时,w(5)= 0.3822 *(1–0.3822)⁵= 0.0344)

明白我的意思了吗?是的,权重与斐波纳契数列的标准化版本完全相同,这意味着在特定的α值下,指数平滑权重模拟了自然!?!取序列中前 50 个数后的α值为:

α = 0.3819966011

这是一个 alpha 值为 0.38199 的预测指数平滑模型示例

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

精神食粮…

  • 现在,我只是想知道这可能只是一个巧合,或者这可能是第一个提出这个模型的人罗伯特·古德尔·布朗先生设计的?
  • 有了这个 alpha,我们能得到最好的预测模型吗?不,不是所有的时间。
  • 这个方程(近似的)可以进一步应用于时间或后续层的模式吗?

~ 0.38199 * [(0.618)^t ]

现在,在 0 和 1 之间,这些是满足以下等式的值的唯一组合(0.38199 和 0.618):

α = (1-α)它变成α -3α+1=0(这个二次方程的另一个根是 2.618)还有,α -3α+1=0 是α -α-1=0(黄金比例方程)在 y=1 处的镜像!!

所以,上面的等式可以写成

(0.618) * (0.618)^t

(0.618)^(t+2)

现在我们还知道,0.618 的乘法倒数是 1.618,这是黄金分割比率,因此现在该等式可以归结为:

(1/φ)^(t+2)

  • 这种模式可能是微观世界的斐波那契模式的另一个自我吗?

1, 0.6180, 0.3819, 0.236, 0.145, 0.09, 0.055, 0.0344, 0.0213, 0.0131 …

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

  • 神经网络会不会以某种方式模仿这种模式,因为它们是由我们自己的神经系统“启发”的?

我最喜欢的书/mooc 从金融数据科学家开始

原文:https://towardsdatascience.com/my-favorite-books-moocs-starting-as-a-financial-data-scientist-a0de577690e9?source=collection_archive---------20-----------------------

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

希望到目前为止,每个人都有一个美好的年终!寻找改进的材料是一个伟大的旅程,有时可能会有点令人生畏。对于这个想法,本文的主题是基于 Guysnove Lutumba 的以下评论:

“你知道该读什么书或选修什么 MOOCS 课程,才能(帮助你)打下坚实的金融基础吗?”
https://medium . com/@ guysnovelutumba/thank-you-for-this-great-article-d 14 fcd 01 af 28

为了回答 Guysnove 的问题,我决定收集一些资源,这些资源不会让你成为一名金融数据科学家。无论如何,这不是一个全面的列表,而是我个人最喜欢的,我会推荐给任何想进入定量分析师或金融数据科学家领域的朋友。这些资源分为 3 个部分,这对于金融数据科学领域来说是非常传统的,同时我添加了一个额外的部分,我相信在您了解所有技术细节后,这是您职业生涯中达到下一个级别所必需的。

记住这一点,让我们从第一本书开始,原则:雷伊·达里奥的生活和工作。我把这本书放在第一位,因为它是一个伟大的整体框架,告诉你应该如何走向成功。下面是 Dalio 回顾的其中一个过程:

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

Image from http://jareddees.com/wp-content/uploads/2018/01/raydalio-five-step-process-1.png

要有目的地去任何地方,你必须有目标,但是,在实现这些目标的过程中,你会遇到问题。为了进一步发展,你必须诊断出这些问题,并设计出解决它们的方法。一旦修改完成,你就可以再次继续你的目标。就我个人而言,我喜欢这样的想法,你可以用许多不同的方式获得成功。希望这个方法将来也能帮助你!

数学

在金融或数据科学领域,数学,尤其是统计学,是贯穿整个工作的一个非常常见的潜在主题。理解数学才有意义,因为你整天和数字打交道。现在,我相信你已经听说过要很好地理解数学需要很多年。这是真的,面对这个问题,大多数人都僵住了。但是从上面的 Dalio 的 5 步过程中,我们可以从任何学习材料开始取得更大的进步,并从那里开始努力。我知道在之前的一篇文章中,我推荐可汗学院学习一些基础数学。如果你想要一本更高级的数学但有应用的书,我强烈推荐绍姆的《数理经济学导论提纲》作为一个好的起点。如果我在大学时有这本书,我知道数学课会少花一点时间。

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

Image from http://mimsy.io/images/Bayes_Final.svg

一旦你解决了微积分和线性代数的问题,你仍然需要处理统计数据。我记得高中的统计课会教我们正态分布的所有特征,但对我来说,很难在现实世界中应用这个过程。在数据科学领域,有大量的贝叶斯统计方法的追随者,这基本上意味着你从最近的大量数据中更新你的信念。上图是贝叶斯的一个直观例子。你的旧信念是先验的,但是,由于新的证据,你建立了一个更好的模型,由你的后验或更新的信念来代表。对我来说,贝叶斯思维的概念和应用方式的一个简单读物是这本书:贝叶斯统计有趣的方式。作者用 R 编写代码,但是如果有人评论,我愿意在下一篇文章中发布 Python 版本!

数据科学

对于那些刚开始学习数据科学并且正在寻找更结构化的方法的人,我非常喜欢 Dataquest 。他们用清晰的解释一步一步地引导你。他们的课程基本上是文本在左边,你编码在右边。所以你主动学习,而不只是被动观察。顺便说一下,他们不是付钱让我说这些的。当我想更好地学习 Python 和数据科学时,我发现它们很有帮助。

金融

好吧,金融是一个巨大的空间,但金融内部是资本市场——我个人的最爱。所以接下来的几个建议会倾向于金融市场。第一个财经推荐是乔尔·格林布拉特的《战胜市场的小书》。如果你曾经想开始股市投资,我认为格林布拉特提供了一个很好的入门框架,告诉你如何从基本面的角度投资股票。这本书基本上给了你筛选潜在股票购买的标准,正如格林布拉特所说:

“在不知道自己在寻找什么的情况下选择个股,就像拿着一根燃烧的火柴跑进炸药厂。你可能活着,但你仍然是个白痴。”—乔尔·格林布拉特

如果你认为我们可能会进入衰退,那么下一本书非常有趣。推荐的书是霍华德·马克斯的掌控市场周期:让赔率站在你这边。这本书详细描述和理解了经济周期。我毫不怀疑,一旦你成为一名金融数据科学家,有人会要求你创建一个与你公司的商业模式相关的宏观经济模型。这本书可能有助于你入门。

让我们稍微改变一下思路,更多地关注微观经济。在分析企业及其内在价值时,沃伦巴菲特是一位值得学习的大师。所以,下一个推荐是伯克希尔·哈撒韦大学:丹尼尔·佩科特在年度股东大会上向沃伦·巴菲特&查理·芒格学习的 30 年经验。对于那些不熟悉的人来说,沃伦·巴菲特是一个著名的选股人。他发现那些股价低于其内在价值(他认为公司的价值,而不是股价)的大公司,并以高额回报买入这些公司的股票

在更细致的交易层面上,我发现没有其他书比这本书更好地解释了市场交易的方式,拉里·哈里斯的《交易和交易所:从业者的市场微观结构》。我遇到的自营交易者推荐这本书,甚至在高频领域工作的人也表示,这本书有助于解释订单簿以及市场中的其他参与者如何影响它。

我几乎不想提到这两个,因为它们相对于上面的其他建议来说相当昂贵。但是在金融数据科学领域,获得 STEM 类的学位和更多的学位更受青睐。我发现,如果你在报名攻读硕士之前想找一个介绍,这两个 MOOCs 可以帮助你获得机器学习或金融硕士学位:

沟通

为了在职业生涯中更进一步,你需要硬技能的同时也需要软技能。我所说的软,指的是知道如何与人打交道,如何表现得风度翩翩。我过去见过一些同事,他们技术很好,但是重要的利益相关者不能理解他们。因此,他们的研究或期望的倡议会受到浪费方的影响。戴尔·卡耐基的《如何赢得朋友,影响他人》是一本基本的人际技能书。在金融数据科学这样一个竞争激烈的领域,你需要你能得到的每一个优势。如果更受欢迎能为你赢得胜利,那就这样吧。

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

Image from: https://www.magicalquote.com/wp-content/uploads/2017/05/Theres-a-small-group-who-can-do-the-math.-Theres-an-even-smaller-group-who-can-explain-it.-But-those-few-who-can-do-both-they-become-billionaires.png

结论

唷,我们讨论了很多话题!简单回顾一下,首先,分离出你的目标,并坚持不懈地克服它们。雷伊·达里奥的书会给你一个走向成功的过程。在数学和统计学中,学习基础知识,这样你实际上就明白你在用什么了。使用这个世界给你的数据,并应用它来做出更好的决定——贝叶斯统计。对于数据科学领域的初学者来说,试试 Dataquest,看看它是否有帮助。至于金融,如果你想选股,乔尔·格林布拉特的书会有所帮助。霍华德·马克的书会让你了解市场周期。丹尼尔·佩科特对沃伦·巴菲特的研究将帮助你找到伟大的企业。如果你想非常详细地了解金融市场,拉里·哈里斯很有帮助。大多数金融数据科学职位需要硕士或更高学位,因此在购买之前,获得硕士学位的 MOOC 可能是一种有用的尝试方式。最后,沟通是关键。你的分析需要别人理解。学会像戴尔·卡耐基的书那样交流,可能会帮助你在漫长的职业道路上获得盟友。

祝你一切顺利,记住成功是一段旅程:

“尽你最大的努力,其他的就别管了。”—托尼·霍顿

免责声明:本文陈述的所有内容均为我个人观点,不代表任何雇主。投资带有严重的风险,在采取任何投资行动之前,请咨询您的投资顾问。这篇文章包含一些附属链接。

我最喜欢的机器学习模型是科学家应该知道的所有数据

原文:https://towardsdatascience.com/my-favorite-machine-learning-models-all-data-scientists-should-know-2ab94b4db62d?source=collection_archive---------12-----------------------

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

W 随着大量的机器学习模型每天都在增长,将你的技能集中并磨练成正确的模型和算法可能会非常困难。无论你的目标是连续的,明确的,还是其他的,从模型的湖中找出一条鱼是非常困难的。

虽然有数百万种可供选择,但肯定有一些是我所珍爱的,主观上我真的很喜欢的。虽然我绝对不会有偏见(数据科学笑话),但我承认,不给这些神奇的模型优惠待遇真的很难!

多项式朴素贝叶斯

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

from sklearn.naive_bayes import MultinomialNB

多项式朴素贝叶斯(MultinomialNB)模型是用于分类规范的目标的奇妙模型。MultinomialNB 因其在谷歌、微软和雅虎等公司的大数据管道中的应用而闻名。以我的经验来看,这个模型是可以用于带有标记化文本的布尔值的最好的模型之一,这使得 MultinomialNB 的任何涉及 NLP 分类的东西都很出名。无论你是在猜测谁最有可能说出一句名言,还是在确定文本是否是垃圾邮件,MultinomialNB 绝对是数据科学家研究烧瓶 HTTP 管道和对用户文本查询进行排序的算法的基本模型。

Regression Tree

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

from sklearn.tree import DecisionTreeRegressor

回归树是决策树和线性回归的产物。回归树通常使用相关系数来确定要拟合的充分模型,以提高准确性。该模型非常适合具有陡峭曲线和高方差的连续数据。回归树类似于保序回归,主要区别是使用相关系数而不是保序权重。

回归器/分类器

from xgboost import XGBRegressor
from xgboost import XGBClassifier

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

XGBoost 梯度是非常好的模型,因为它们可以提高传统统计或条件模型的准确性,并且可以很好地应用于两种主要类型的目标。当您需要对您的标准模型进行最终的精度提升时,XGBoost 可能是一个有用的工具。虽然不总是非常有效,但是在大多数情况下,将模型切换到 XGBoost 可以节省 10%到 15%的准确性。

随机森林分类器

from sklearn.ensemble import RandomForestClassifier

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

随机森林分类器绝对是我最喜欢使用的算法之一。随机森林模型本质上是一棵决策树(因此得名。)随机森林分类器有着非常有趣和丰富的历史,最初是由统计学家田金浩发现的。早期版本的随机森林分类器使用随机子空间算法。

这个新模型非常有趣,并且在某种程度上改变了游戏规则,因为它通常将随机辨别的思想引入机器学习世界。在随机森林模型之前,所有的分类算法都是基于相关性、贝叶斯或基于偶然的概率分布,例如二项式分布。

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

最近邻居

from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import KNeighborsRegressor

KNearest Neighbor 是一种机器学习算法,用于选择具有最相似特征的最近目标。像 XGBoost 一样,它也是一个分类器或回归器。

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

k 最近邻因其在搜索和提示功能中的使用而众所周知。特征可以包括属性和类别,例如关于在介质上接下来读什么的建议。不用说,这是为最终用户构建任何 web 工具的绝对必要的工具。从音乐提示器到 Youtube 的自动播放功能,K Nearest neighborhood 无疑在互联网的数据景观上留下了自己的印记。

梯度下降

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

梯度下降是一个广泛的和极其通用的模型。这是几乎所有神经网络的幕后工作模型。有一些贝叶斯模型不一定被认为是梯度下降,但大多数情况下,它们仍然植根于梯度下降。对于人工智能的现在和未来,梯度下降很有可能成为最重要的模型。梯度下降可以做任何事情,从简单的前馈网络一直到深度递归神经网络,甚至更远。

任何时候你看到机器学习被用来处理图像,梯度下降肯定是罪魁祸首。不用说,我们都应该知道梯度下降;不仅超级爽,还超级好玩!

结论

这些是我主观上最喜欢的模型,也是我发现自己最常求助的模型。每个工作都有一个工具,就像每个工作都有一个模型,就像每个工作都有自己的特性一样。随着时间的推移,美妙的

数据科学超级大国

那就是知道实现哪种模型的最佳方式。一个很好的理解可以来自多种来源,但是作为一个终生学习者,永远不要期望对一个或另一个模型感到太舒服。在某些情况下,我对此有点内疚,因为回到您所知道的东西可能会令人感到安慰,但深入堆栈溢出的黑暗深处可能是您可以获得的关于数据科学的最好教育。在许多其他事情中,机器学习模型的强大知识将很快出现。当你在第一轮测试中获得 92%的准确率时,你肯定会知道你做对了!

我喜欢数据科学可以用一滴信息颠覆你的整个意识形态。某一天你可能正在用梯度下降模型创作绘画,下一件事你知道你正在维基百科上阅读一些晦涩的回归算法。数据科学一直在变化,模型也在变化,所以您喜欢的模型一定会迁移!

Python 3.8 中我最喜欢的新特性

原文:https://towardsdatascience.com/my-favorite-new-features-in-python-3-8-a95d7a0a31c9?source=collection_archive---------8-----------------------

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

Python 3.8 在几周前发布,我没有急于谈论新特性,而是决定熟悉它们并加以利用,我想指出的是,我绝对会使用 Python 3 中实现的一些关键特性。不管这些新特性是否会被使用取决于程序员,但是我认为熟悉这些新特性是很重要的,这样我们就可以阅读 Python 之后的文章。

海象操作数

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

我们将以我最喜欢的新功能开始,

海象操作数

为什么这么叫?因为操作数看起来像一头侧翻的海象。这不仅是在 while 循环中使用的好工具,就像 Python 文档中的例子一样:

while (line := file.readline()) != "end":
    print(chunk)

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

然而,对我来说更重要的是,Walrus 操作数具有在一行中返回和设置的优势,换句话说,我们可以在统计函数的末尾保存一个返回,例如,在最后一次计算时,只需使用 Walrus 操作数。

x  = 5
y = 5
b := y+b

仅位置参数

不那么花哨,但这也是一个很大的变化,不会影响函数参数的经典性质。要创建一个位置参数,我们只需要在定义函数时在参数的末尾添加一个斜杠。

def func(x,y,f=5,/):

现在我们可以使用 f 等于σx+σy 的函数,如下所示:

result = func(x,y,ournum = sum(x) + sum(y))

而在以前,我们必须添加更多的结构来实现这一点。

ournum = sum(x) + sum(y)
result = func(x,y,ournum)

多重处理共享存储器

共享内存归结为在整个 Python 中全局共享数据,而不是手动提取和传输数据,或者将其保存到文件中以供访问,现在可以使用多处理模型在 Python 内部跨位置全局访问数据,这将我们带入下一个添加内容,

新的酸洗协议

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

pickle 是一个压缩和序列化数据和代码以在其他地方使用的出色工具,随着 Pickle 模块 Python 的新增加,您可以 Pickle 的序列化效率更高,通用性更强,这对于数据科学领域的我们来说非常令人兴奋,对于那些在 Flask 和 Django 中工作并且 VPS web 服务器上剩余空间有限的人来说,这绝对是一项值得贡献的事业。

CPython —改进了!

最后但同样重要的是,Python 吹嘘他们已经改进了 Python 的基于 C 引擎的后端,这是另一个我认为肯定需要注意的特性。作为一名数据科学家,我经常发现自己在处理数据时碰到了 Python 的极限,这很不幸,但确实存在。当仅仅读入数据就使 Jupyter 内核崩溃,并且您正准备尝试为所述数据安装一个管道时,这可能是很可怕的。

好消息是,情况正在好转,并且有望在未来继续好转。当然,我们指的是 C API 中的 Python,而不是 Python 中的 Python,或者只是普通的 Python。当处理绝对庞大的数据集时,在没有配置上述 API 的情况下运行 Python 常常是一场噩梦。

对我们来说更幸运的是,CPython 还做了一些工作来改进其 API 的配置,这是令人兴奋的,因为这将使优化更容易,并且很可能允许新用户使用 Python 中的 C 引擎。

我真的希望 Python 在未来几年继续关注稳定性、速度和效率。这些改进虽然看起来很小,但肯定是一个大胆的方向,并且执行得很好,尤其是我一直很喜欢的东西。这些是我最喜欢的功能,但还增加了一些功能,包括:

  • 性能改进(针对原始 Python 本身)
  • 可逆词典
  • 打字模块返工
  • f 字符串调试支持

这些都是 Python 世界中受欢迎的进步,特别是对于那些处理大型数据集和修改内存限制的人来说。

我最喜欢的 R 编程课程——数据感动我

原文:https://towardsdatascience.com/my-favorite-r-programming-course-data-moves-me-27055c68aac?source=collection_archive---------18-----------------------

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

注意:本文包括附属链接。意思是对你没有成本(实际上,你得到了折扣,得分!)如果你购买课程,我会收到一点佣金。

我从 2004 年就开始使用 R,远在 Tidyverse 推出之前。我知道完全掌握最新的软件包和功能会让我受益匪浅,所以我最终决定冒险全面更新我的技能。我想要一门涵盖 R 中每个角落的课程。我个人学习 R 的经验是粘贴教程和阅读文档,因为我需要一些东西。我想了解一些现在可能不需要,但将来可能会用到的功能。我想要一切。

我早就知道 Tidyverse 是对使用 base R 功能操作数据的巨大改进。然而,我也知道我以前的学校技能完成了这项工作。我现在明白了。有更好的方法。做出这一举动并不是非常痛苦(尤其是因为我熟悉编程),商业科学的“R 商业分析”课程将在 4 周内带你从 0 到相当危险。

对于没有 R 经验的人来说,他们不想为了达到一个“严肃 R 用户”的水平而多年碰壁。我强烈推荐这门商业科学的“带 R 的商业分析”课程。不要让这个名字欺骗了你,这个课程花了 5 个小时使用 parsnip 包来学习机器技术。更重要的是,如何将这些结果传达给利益相关者。

该课程全面、清晰、简洁。

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

课程覆盖范围

常规:

本课程将带您从头开始:

  • 安装 R
  • 设置您的工作环境
  • 然后直接进入使用事务数据的相关业务分析

这门课程“牵着你的手”踏上了在 r 中变得自给自足的旅程。我不可能在这篇文章中列出这门课程涵盖的所有内容,那将毫无意义。然而,对我来说改变最大的是:

  • 使用 stringr 的正则表达式
  • 使用 lubridate 处理日期时间
  • 格式化您的可视化

我想要的所有材料都在这里。所有的一切。

建模和创建可交付成果:

同样,不要让课程的名称欺骗了你。这门课程非常注重机器学习。花 5 个小时在欧洲防风图书馆(这是 R 的 scikit learn)。

课程包括:

然后教你如何在 R-markdown 中创建可交付物,在 Shiny 中创建交互式图形。一切都在商业背景下,并始终强调你将如何“与业务沟通”。我再怎么强调课程的布置有多细致,涵盖的材料有多少都不为过。这门课程确实很特别。

这些年来,当你在课堂上时,有多少辅导或培训让你觉得一切都很“好”?然后你试着采用这些技能,并把它们应用到个人项目中,在你成功所需的东西上有巨大的缺口。我有很多用头撞墙试图让事情和 r 一起工作的经验。

你会喜欢的东西:

  • 重复键盘快捷键,这样我就能真正记住它们。
  • 立即使用事务性数据进行分析。你不仅仅是在学习 R,你还在学习应用程序以及为什么这些函数是相关的。
  • 参考流行的 R 备忘单和文档。你将会明白如何阅读文档和 R cheat sheets——老实说,成为一个优秀的程序员很大一部分是有效的 Google 技能。学习阅读文档相当于班门弄斧。
  • 马特有一副好嗓子。好了,我说了。如果你要听几个小时的东西,我觉得这一点很有必要。

对于初学者:

  • 说明从一开始就开始了,而且说明很清楚。
  • 讲座要遵循的代码组织得非常好。商业科学显然以结构为傲。
  • 没有必要再去上一门基础课程,在那里你会重复学习一大堆你以前学过的东西。这门课涵盖了你需要的一切。它。是。全面。
  • 电子商务/交易数据是一个非常常见的用例。如果您不熟悉事务性数据的工作方式,或者您从未连接过多个表,这对于有抱负的数据科学家来说是一个极好的机会/绝佳的用例。
  • 如果您有任何问题,可直接联系 Matt(课程创建者)的松弛渠道。我个人没有使用这个功能,但是作为一个新手,直接访问 Matt 是一个巨大的价值。

老实说,我很嫉妒自己第一次没能学会这种方法,但 Tidyverse 在当时甚至还不存在。这就是生活。

本课程以一个 k-means 示例结束,其中包含一个已经在 R-markdown 中构建的、利益相关方准备好的可交付成果。这门课程实际上是数据科学的非神秘化。

总而言之:

也许我太书呆子了。但是看到一个如此好的课程,提供如此多的价值,对我来说是值得投资的。通过学习这门课程,你将会实现令人难以置信的转变。如果在我刚开始学习 R 的时候,这是可行的,我会省去很多挫折。matt Dancho(Business Science 的所有者)好心地给了我一个链接,这样你就可以在课程中享受 15%的折扣。链接

如果您购买套餐,15%的折扣甚至更划算,但老实说,我还没有选第二道菜。我一定会的!之后我一定会写一篇评论让你知道我的想法。这里是捆绑包的链接:链接

如果你想成为数据科学的摇滚明星,Matt 将推出一个全新的课程,你可以购买 3 门课程的套餐。新课程是“商业预测网络应用与 R Shiny”:链接

如果你参加了这个课程,请告诉我你是否和我一样觉得它很棒。你可以在评论里留下感言或者在 LinkedIn 上联系我。我很想听听你的经历!

原载于 2019 年 6 月 8 日https://datamovesme.com

我在 NLP 的第一次冒险

原文:https://towardsdatascience.com/my-first-adventures-in-nlp-631faa6aadd4?source=collection_archive---------18-----------------------

探索情感分析作为“黑箱”的旅程,并打破它找到见解。

2018 年 11 月 15 日,我开始着手创建一个药品评论情感分析模型。

和大多数想法一样,它开始于的问题。

在过去的 24 个月里,我妻子一直在重度抑郁中挣扎。治疗方案把她从一个药物试验(和失败)带到了下一个。每个药物试验需要 8 到 16 周的时间,这取决于滴定、随访预约和逐渐减少。在整个过程中,她经历了所有的副作用。恶心、疲劳、困倦和严重焦虑等等。一些药物对抑郁症有一点帮助。其他人让情况明显变得更糟。糟糕透顶。

在那些时刻,我感到无力去帮助我爱的人。我唯一能做的就是联系医生并留下信息或便条。通常当我从医生那里得到消息时,副作用已经改变了。

我不会因为医生的反应水平而责怪他。考虑到他们在实践中帮助的人数,他们尽可能地进行沟通。但是我经常会想到“为什么还要给他们打电话或发电子邮件呢?他们不可能很快就收到这条消息,并采取任何措施。”

通常我们会等到复诊时才向医生报告。但是当你在现场时,很难记起每天或每周尝试一种新药有多困难。尤其是在使用一种新药 8 周后。这造成了缓慢、不一致和劳动密集型的药物体验反馈循环。

医患沟通中的这些障碍和瓶颈减缓了治疗过程。**如果医生能够立即找到正确的药物,那么患者的治疗效果就会得到改善。**正确的药物搭配意味着更少的随访,这有助于降低患者护理的成本。真实成本&问题人命附后。

那么,如果我能创建一个系统,让医疗服务提供者更快地识别有效/无效的药物,会怎么样呢?

一种思路:用药体验反馈分析

量化的评论产生干净简单的数据。可以可视化、分析、监控和比较的数据。

通过收集每日患者药物反馈并进行情绪分析,可以:

  • 检查患者在试验期间对药物的体验,以跟踪药物需要多长时间开始发挥作用。(或者它到底有没有用)
  • 确定患者何时挣扎,并通知医生提供支持。
  • 随着时间的推移,对各种患者类型的药物进行评估,以监测非临床表现。
  • 在随访期间,为医生提供患者持续体验的图表视图。

但是这个系统的成功取决于一个关键因素。一个可以持续准确预测患者对药品审评情绪的模型。

所以这就是我着手去做的,看看我能不能造出来。

走向未知

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

A bit like wandering down an unfamiliar road.

走进这个项目,除了概念上它能做什么,我对 NLP 和情感分析知之甚少。但是我需要一些高质量的数据来开始。

互联网提供了一些惊人的数据。Felix Gr er&Surya Kallumadi 提供的来自 UCI 机器学习存储库的“药物评论(Drugs.com)数据集”。

“该数据集提供了患者对特定药物以及相关病情的评论,以及反映患者总体满意度的 10 星患者评级。这些数据是通过抓取在线药物评论网站获得的。(Drugs.com)"

一个优秀的数据集,包含文本评论,评级,以及条件和药物的类别字段。

我从导入和探索数据集开始。一旦对掌握了数据的结构感到满意,我就开始寻找情感分析的指导。

尝试 1——瞎猜

我搜索、阅读了许多资料,并选择了一个简单的入门教程来开始我的 NLP 之旅。我对 NLP 的第一次尝试是从 “用 Python 进行情感分析” 教程中提取一段代码,并将其应用于我的数据集。(请点击此处查看我的笔记本)我很快认识到,即使是编写得最好的代码也很难适应新的数据集。为清理数据提供的正则表达式是不够的,所以我编写并测试了自己的正则表达式。

在对评论文本进行标准化和矢量化之后,我将评论评级从 11 个类别分成了 3 个类别。“积极”、“消极”和“中立”。然后,我使用 scikit-learn 的逻辑回归训练了一个模型,并检查了模型性能的准确性。

经过少量调整后,该模型的最终准确率为 81.95%。在这一点上,我不确定如何衡量这个模型的性能,也不确定准确性本身是否是一个有效的指标。

但是当我检查前 10 个和后 10 个特征(单词)的权重时,我意识到有一些我无法解释的差异。

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

Hmm. These negative weighted words seem pretty positive…

我不是那种会放弃的人。因此,我需要学习更多的东西,并寻找更深入的教程。

尝试 2——解构黑盒

在向我的一个朋友提问后,他推荐了一篇来自 Insight AI 的 Emmanuel Ameisen 的文章。以那篇文章为指导,以 Leonardo Apolonio 的“如何解决 NLP”代码为框架,我带着新检查的数据集开始了我的 NLP 之旅。(我的笔记本在这里。)

我首先回顾了使用数据集发表的原始论文。我已经包含了关于该研究中使用的数据收集、预处理、标记化和建模方法的注释。

在我完成教程的过程中,我遵循了一个简单的过程:每当有我不理解的 ML 词汇时,就“停下来学习”。我学习了数据准备中的嵌入、Word2Vec、单词包、语料库、标记化、规范化、非 ASCII 字符、词干、词汇化和矢量化。这个过程很耗时,但很有效。

我的想法是:让黑盒工作,然后拆开黑盒

我对这些教程的目标很简单:让它工作,然后获得理解。这个过程对于像我这样可以被描述为“机械倾向”的人来说很有效。它允许我们首先建立对整个系统结构的理解,然后深入了解每个部分的知识。我发现这种方法有助于我记住我所学的东西。我的大脑锁定了对细节的解释,因为它们被视为整体的相关和必要部分。(下面是我对这种方法做的一个简短的介绍。)

“碰运气,犯错误,搞得乱七八糟!”弗里兹尔女士

这种方法的危险在于没有探测到工作内部。如果模型的机制永远被当作一个黑盒来对待用户就会错过学习的机会。

但这真的有效吗?

我做了很多工作才让它在我的数据集上干净地工作,但是工作 它做到了 。本教程在评估模型性能的框架内清晰地阐述了新的概念,包括:

  • 通过投影可视化评估各种嵌入的有效性。

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

  • 利用精度回忆f1、精度来评估 Logistic 回归的表现。

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

  • 模型性能可视化的混淆矩阵的使用

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

  • 通过使用重要的单词图来可视化特征检查。
  • 使用 Lime,一个黑盒解释器,让 word2vec 检索和检查特性。

所有这些工作的结果?

最高性能的嵌入+ logreg 模型是我的词袋模型,准确率为 78%。CNN 最终的准确率为 75%,还有很大的提升空间。

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

但是最终的特征权重和重要性显著提高。

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

有了这些小小的成功,我仍然渴望找到并建立一个更好的模型。在第三次尝试中,我做到了。

尝试# 3——一次有目的的旅行。

这次尝试与众不同,因为在我之前的尝试中,我一直在阅读和学习 LSTM 的《T1 》,我已经决定用一些新的 LSTM 代码在同一个数据集上试一试。(在这里看我的笔记本)

用我的新锦囊妙计准备数据

在我前两次尝试的所有挣扎之后,这次预处理数据很有趣。

这次我使用 MissingNo 检查了我的 NaN 数据。我觉得这个可视化包超级聪明。

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

Look for NaN’s with MissingNo

然后,我像以前一样将我的值进行分类,并检查图中的分布。

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

Bin Test & Training Data by Rating

我从数据集中删除了长度异常的句子。

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

Outlier length sentence removal

最后,我应用了正则表达式、词干和停用词删除(包括我定制的药品名称停用词语料库)来进一步清理和减少特征大小,同时保持相关的词。最终结果是更小的特征集,更容易有效地处理。

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

Word counts across all the reviews in the dataset pre/post stemming and stop word removal.

你好,LSTM

我就不详细介绍我是如何通过耗时的反复试验来测试 LSTM 的所有不同组件和评估各种参数的了。但所有这些努力的最终结果是一个比我以前的任何型号都表现更好的型号。

我的简单 LSTM 模型最终达到了 88.4%的准确率。

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

更令人印象深刻的是,它预测积极情绪的准确率高达 90%。

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

最令人惊讶的是…这次尝试很有趣。学习预处理的大部分繁重工作已经完成,模型的表现比我预期的好得多。

余波

总的来说,这是一次理解情感分析如何加深我对 NLP 理解的旅程。最重要的是,它帮助我看到了我还有多少要学,我期待着在未来回到这个数据集。

有可能有效地预测评论的情绪吗?

是的。绝对的。

我的模型足以以一种有意义的方式做到这一点吗?

这当然比什么都没有好,但远非完美。

完成>完美。

这篇博文完成了。

读者请注意:在发表这篇文章的时候,由于基因药物测试,我的妻子已经发现她的抑郁症有所缓解。如果你或你所爱的人患有抑郁症,并且对你的药物治疗的有效性感到沮丧,我会强烈推荐它。这应该是每个抑郁症诊断的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值