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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

如何吸引数据科学家,以及如何留住他们!采访

原文:https://towardsdatascience.com/how-to-attract-data-scientists-and-how-to-keep-them-an-interview-215d0606ec2f?source=collection_archive---------24-----------------------

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

这篇采访最初于 2019 年 6 月 19 日由创业公司的杰克·惠特尔领英上发布。

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

几周前,我与 Jan Teichmann(zoo PLA 数据科学家负责人)坐下来讨论如何吸引最好的数据科学家,以及如何将他们留在贵公司。

这是简必须要说的…

您为什么成为数据科学家?

“数据科学仍然是技术创新的代名词,和许多早期的数据科学家一样,我一直被好奇心和技术所驱动。这和对数学的热情。起初,我看到了我在学术界的使命,但我无法真正决定我想研究什么。我开始非常重视数学和理论生物学。然而,我忽略了技术方面。我进入生物信息学是为了更多地了解应用计算机科学、算法和数据处理,只是为了回到数学领域攻读博士学位。随着我作为一名科学家的成熟,我意识到我有强烈的创业和商业倾向。因此,我与能源行业的朋友共同创办了一家初创公司,目的是利用新兴的云技术来提供数据产品,并以此改造整个公用事业行业。梦想远大,从小处开始!如今,数据转型响彻每个行业,但在那时,看到数据和机器学习在新兴智能电网领域的强大威力,人们大开眼界。这成为我后来工作中反复出现的一个主题,数据和机器学习继续对两者都产生真正的影响,对业务和消费者体验都是如此。这种感觉现在仍然很有力量和动力。”

所以,对数据科学家来说,最重要的事情是看看他们的工作如何产生真正的影响?

“我敢说,大多数数据科学家的动机是解决困难和复杂的问题,每个人都希望看到他们的辛勤工作产生的影响。不仅仅是数据科学家。问题是真正的影响是什么样的,这当然在研究职能部门的数据科学家和企业的商业数据科学团队之间有很大的不同。目前,企业中老一套的数据科学家正在努力产生真正的影响。根据 Gartner 和 NewVantage 的研究,超过 75%的商业数据科学项目和团队无法交付业务成果。对大多数企业来说,让数据科学取得商业成功确实很难。原因很复杂,但在很大程度上是将数据科学部署到生产中的挑战。生产化是数据科学中最棘手的问题。”

促进这一点的最重要方式是什么?

“如果我们看看 Gartner 炒作周期,我们目前正处于数据科学和人工智能炒作的巅峰。以目前商业数据科学项目的成功率来看,我们正直接走向幻灭的低谷。我们迫切需要重新关注成功的要求。不幸的是,成功没有灵丹妙药或捷径!挑战是复杂的,也经常被误解。有五个总体主题,我刚刚写了一篇关于它们的文章,主题是走向数据科学

一些主题得到了很好的理解和广泛的讨论,如文化的重要性。其他主题突出了一些误解,例如,这些误解导致低估了技术在留住数据科学团队中的重要性。"

你是如何在你的团队中做到这一点的?

“我们是一个高度产品化公司中的集中专家团队。公司文化在将数据科学与业务的其余部分结合起来方面发挥着重要作用。集中的团队可能会变得孤立,尤其是在大公司。我们刚刚组织了一次全公司范围的黑客马拉松,这是一次与产品团队沟通和展示数据科学价值的绝佳机会。公司文化对数据科学的成功至关重要。正如彼得·德鲁克(Peter Drucker)恰如其分地说的那样:“文化把战略作为早餐”。

同时,团队文化在留住数据科学家方面发挥着至关重要的作用。我很幸运有一个非常聪明、高度积极和富有成效的团队。但我们产品的业务适应可能会很慢,并导致挫折。幸运的是,在数据科学领域有一个强大的社区,有很多机会在聚会上和通过博客帖子展示工作。我们还为数据科学创建了一个职业框架,并利用我们丰富的数据集和业务挑战积极创造一个促进学习和发展的环境。我们认识到需要在不断变化的领域(如数据科学)中学习和发展,这是团队的一个独立目标。"

好了,你已经了解了正确的文化,那么技术和结构呢?

“对数据基础设施有明显的要求:任何数据团队都需要访问高质量的数据和合适的基础设施来处理这些数据。基础设施还需要一定程度的敏捷性。正如您将看到的,大多数数据科学项目(希望不是团队)都非常短暂,并且失败率很高。你根本不知道数据会把你带到哪里,也不知道在每个想法的结尾是否有一个可行的模型。为了保持生产力,基础设施需要敏捷性来支持失败率高的短期项目。数据科学的生产部署有许多独特的要求,我写了一整篇文章介绍作为我支持的解决方案的 Rendezvous 架构

要将数据科学投入生产,了解数据科学是一项团队运动是很重要的。成功需要数据科学家与工程、数据架构、开发运维及产品等其他职能部门的合作。最后,这种支持是存在于跨职能团队内部,还是可以通过团队和部门之间的良好协作和强大的优先级划分来获得,对于数据科学的成功并不重要。"

所以你做对了,那么你如何让你的团队开心呢?

“用 DataOps!

我们已经谈到了文化的重要性,但更独特的是数据科学,技术在保持团队长期快乐方面发挥着重要作用。

可扩展的交付管道和快乐的数据科学家之间有着重要的联系。

数据科学家的动机是开发新模型来解决相关的业务问题,而不是模型在生产中的日常运营责任。这意味着,数据基础设施、数据科学平台、自动化和数据运营不仅对于业务成果的交付,而且对于团队的长期保留都是至关重要的问题。在一个超过 75%的团队未能做到这一点的市场中,任何将模型端到端交付到生产中的数据科学家都变得非常有价值。对生产中的模型进行日常维护和监控并不是留住人才的好方法。很快,您会发现自己的产品中有一个无人维护的模型,这个模型正在漂移,没有人知道这个模型最初是如何工作的。

交付、技术和保留都与数据科学的长期成功紧密相关。"

为了让这些新项目继续下去,让一家公司专注于数据战略有多重要?

“这很关键。数据科学是企业正在进行的数据转型的一部分,以实现数据驱动。这引发了许多变化,需要战略协调和最高层的支持。根据我的经验,数据科学需要一个由长期愿景而非短期目标驱动的企业。数据应该得到与公司其他产品同样的战略关注,甚至更多。数据是新的石油,太多的公司仍然把它当作事后的想法。您的数据战略将是关键,决定您是否有一个改变游戏规则的数据科学项目路线图,或者一个被放弃的数据科学团队和大量没有回报的沉没成本。”

Jan,你能总结出培养和留住数据科学家的几个关键步骤吗?

“成功没有灵丹妙药或捷径,我们需要重新关注数据科学成功的复杂要求。请阅读我的文章来了解更多我们今天没有时间讨论的话题。

企业需要超越宣传,对数据科学及其随之而来的数据转换更具战略性。但不仅仅是企业,数据科学家也需要开始问一些重要的问题:

动机:这仅仅是另一个虚荣的项目还是与商业战略一致?

需求:是否有坚实的基础和基础设施,还是只有大量的管道胶带和消防设备?

招聘:招聘流程适合招聘数据科学独角兽吗?

交付**:是否有机会生产模型或者只是笔记本电脑上未记录的模型?**

留任:18 个月内会出现改变游戏规则的数据科学项目路线图,或者一个被放弃的团队吗?"

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

Jan 是公司数据转型方面的成功思想领袖和顾问,拥有将数据科学大规模应用于商业生产的记录。他最近被 dataIQ 评为英国 100 位最具影响力的数据和分析从业者之一。

****在 LinkedIn 上连接:【https://www.linkedin.com/in/janteichmann/】

****阅读其他文章:https://medium.com/@jan.teichmann

如何自动化超参数优化

原文:https://towardsdatascience.com/how-to-automate-hyperparameter-optimization-73950c9fdb5?source=collection_archive---------16-----------------------

将贝叶斯优化与 Scikit-Optimize 结合使用的初学者指南

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

Photo by Crew on Unsplash

在机器学习和深度学习范例中,模型“参数”和“超参数”是两个经常使用的术语,其中“参数”定义模型内部的配置变量,其值可以从训练数据中估计出来,而“超参数”定义模型外部的配置变量,其值不能从训练数据中估计出来()参数和超参数之间有什么区别?)。因此,超参数值需要由专业人员手动指定。

我们制作的每个机器学习和深度学习模型都有一组不同的超参数值,需要进行微调才能获得满意的结果。与机器学习模型相比,深度学习模型往往具有大量需要优化的超参数,以便获得所需的预测,这是由于其架构比典型的机器学习模型复杂。

手动重复试验不同的值组合以获得每个超参数的最佳超参数值可能是一项非常耗时且乏味的任务,需要良好的直觉、丰富的经验和对模型的深刻理解。此外,一些超参数值可能需要连续值,这将具有未定义数量的可能性,即使超参数需要离散值,可能性的数量也是巨大的,因此手动执行这项任务相当困难。说了这么多,超参数优化似乎是一项艰巨的任务,但由于网络上有几个现成的库,这项任务变得更加简单。这些库有助于轻松实现不同的超参数优化算法。一些这样的库是 Scikit-OptimizeScikit-Learnhyperpt

多年来,有几种超参数优化算法被频繁使用,它们是网格搜索、随机搜索和自动超参数优化方法。网格搜索和随机搜索都建立了超参数网格,但是在网格搜索中,每个单个值的组合都将被彻底地探索,以找到给出最佳精度值的超参数值组合,这使得该方法非常低效。另一方面,随机搜索将从网格中重复选择随机组合,直到达到指定的迭代次数,并被证明比网格搜索产生更好的结果。然而,即使它设法给出一个好的超参数组合,我们也不能确定它实际上是最好的组合。自动超参数优化使用不同的技术,如贝叶斯优化,它对最佳超参数进行引导式搜索(使用网格和随机搜索进行超参数调整)。研究表明,贝叶斯优化可以产生比随机搜索更好的超参数组合(超参数调整的贝叶斯优化)。

在本文中,我们将提供一步一步的指导,通过采用使用高斯过程的贝叶斯优化,在深度学习模型上执行超参数优化任务。我们使用由 Scikit-Optimize (skopt) 库提供的 gp_minimize 包来执行这个任务。我们将对使用 TensorFlow 开发的简单股票收盘价预测模型执行超参数优化。

sci kit-优化(skopt)

Scikit-Optimize 是一个比其他超参数优化库相对容易使用的库,并且拥有更好的社区支持和文档。该库通过减少昂贵且嘈杂的黑盒函数,实现了几种基于顺序模型的优化方法。更多信息你可以参考 neptune.ai 的文章,他们对 skopt 的功能和用法做了全面的分析。

使用高斯过程的贝叶斯优化

贝叶斯优化是 skopt 提供的众多功能之一。贝叶斯优化找到一个后验分布作为参数优化过程中要优化的函数,然后使用一个采集函数(如预期改善-EI、另一个函数等)从该后验分布中采样,以找到下一组要探索的参数。由于贝叶斯优化基于考虑可用数据的更系统的方法来决定下一点,因此与诸如网格搜索和随机搜索之类的穷举参数优化技术相比,它有望更快地获得更好的配置。你可以从这里阅读 skopt 中关于贝叶斯优化器的更多信息。

代码警报!

所以,理论说够了,让我们言归正传!

这个示例代码是使用 python 和 TensorFlow 完成的。此外,该超参数优化任务的目标是获得能够为我们的深度学习模型给出最低可能均方根误差(RMSE)的一组超参数值。我们希望这将是非常直截了当的任何第一次。

首先,让我们安装 Scikit-Optimize。您可以通过执行以下命令使用 pip 安装它。

pip install scikit-optimize

请注意,您将必须对现有的深度学习模型代码进行一些调整,以便使其与优化一起工作。

首先,我们来做一些必要的导入。

import skopt
from skopt import gp_minimize
from skopt.space import Real, Integer
from skopt.utils import use_named_args
import tensorflow as tf
import numpy as np
import pandas as pd
from math import sqrt
import atexit
from time import time, strftime, localtime
from datetime import timedelta
from sklearn.metrics import mean_squared_error
from skopt.plots import plot_convergence

我们现在将设置 TensorFlow 和 Numpy 种子,因为我们希望获得可重复的结果。

randomState = 46
np.random.seed(randomState)
tf.set_random_seed(randomState)

下面显示了一些我们已经声明的重要 python 全局变量。在变量中,我们还声明了希望优化的超参数(第二组变量)。

input_size=1
features = 2
column_min_max = [[0, 2000],[0,500000000]]
columns = ['Close', 'Volume']

num_steps = None
lstm_size = None
batch_size = None
init_learning_rate = None
learning_rate_decay = None
init_epoch = None
max_epoch = None
dropout_rate = None

“输入大小”描述了预测形状的一部分。“特征”描述了数据集中特征的数量,“列”列表具有两个特征的标题名称。“column_min_max”变量包含两个特征的缩放上限和下限(这是通过检查验证和训练分割获得的)。

在声明了所有这些变量之后,最后是时候为我们希望优化的每个超参数声明搜索空间了。

lstm_num_steps = Integer(low=2, high=14, name='lstm_num_steps')
size = Integer(low=8, high=200, name='size')
lstm_learning_rate_decay = Real(low=0.7, high=0.99, prior='uniform', name='lstm_learning_rate_decay')
lstm_max_epoch = Integer(low=20, high=200, name='lstm_max_epoch')
lstm_init_epoch = Integer(low=2, high=50, name='lstm_init_epoch')
lstm_batch_size = Integer(low=5, high=100, name='lstm_batch_size')
lstm_dropout_rate = Real(low=0.1, high=0.9, prior='uniform', name='lstm_dropout_rate')
lstm_init_learning_rate = Real(low=1e-4, high=1e-1, prior='log-uniform', name='lstm_init_learning_rate')

如果您仔细观察,您将能够看到我们在 log-uniform 之前声明了“lstm_init_learning_rate ”,而不仅仅是放入 uniform。这样做的目的是,如果您将 prior 设为 uniform,优化器将不得不在均匀分布中从 1e-4 (0.0001)到 1e-1 (0.1)进行搜索。但是当声明为 log-uniform 时,优化器将在-4 和-1 之间搜索,从而使这个过程更加高效。当 skopt 库为学习率分配搜索空间时,这已经被告知

有几种数据类型可以用来定义搜索空间。它们是绝对的、实数的和整数的。当定义一个包含浮点值的搜索空间时,你应该选择“实数”,如果它包含整数,就选择“整数”。如果你的搜索空间涉及分类值,比如不同的激活函数,那么你应该选择“分类”类型。

我们现在将在“尺寸”列表中记下要优化的参数。这个列表稍后将被传递给‘gp _ minimize’函数。您可以看到,我们还声明了“default_parameters”。这些是我们给每个超参数的默认参数值。记住按照您在“尺寸”列表中列出超参数的顺序输入默认值。

dimensions = [lstm_num_steps, size, lstm_init_epoch, lstm_max_epoch,
lstm_learning_rate_decay, lstm_batch_size, lstm_dropout_rate, lstm_init_learning_rate]

default_parameters = [2,128,3,30,0.99,64,0.2,0.001]

要记住的最重要的事情是“default_parameters”列表中的超参数将是您的优化任务的起点。贝叶斯优化器将使用您在第一次迭代中声明的默认参数,根据结果,采集函数将确定下一步要探索的点。

可以说,如果您之前已经运行过该模型几次,并且找到了一组合适的超参数值,您可以将它们作为默认的超参数值,并从那里开始您的探索。这将有助于算法更快地找到最低的 RMSE 值(更少的迭代)。然而,请记住,这可能并不总是正确的。另外,请记住,在分配默认值时,要分配一个在您已定义的搜索空间内的值。

到目前为止,我们所做的是为超参数优化任务设置所有的初始工作。我们现在将重点关注我们的深度学习模型的实现。我们将不讨论模型开发过程的数据预处理,因为本文仅关注超参数优化任务。我们将在本文末尾包含完整实现的 GitHub 链接。

然而,为了给你更多的背景知识,我们将数据集分成三部分,分别用于训练、验证和测试。训练集用于训练模型,验证集用于执行超参数优化任务。如前所述,我们使用均方根误差(RMSE)来评估模型并执行优化(最小化 RMSE)。

使用验证分割评估的精度不能用于评估模型,因为在超参数优化过程中,使用验证分割最小化 RMSE 的所选超参数可能会过度拟合验证集。因此,标准程序是使用尚未在管道中的任何点使用的测试分割来测量最终模型的准确性。

下面显示的是我们深度学习模型的实现:

def setupRNN(inputs, model_dropout_rate):

  cell = tf.contrib.rnn.LSTMCell(lstm_size, state_is_tuple=True, activation=tf.nn.tanh,use_peepholes=True)

  val1, _ = tf.nn.dynamic_rnn(cell, inputs, dtype=tf.float32)

  val = tf.transpose(val1, [1, 0, 2])

  last = tf.gather(val, int(val.get_shape()[0]) -1, name="last_lstm_output")

  dropout = tf.layers.dropout(last, rate=model_dropout_rate, training=True,seed=46)

  weight = tf.Variable(tf.truncated_normal([lstm_size, input_size]))
  bias = tf.Variable(tf.constant(0.1, shape=[input_size]))

  prediction = tf.matmul(dropout, weight) +bias

  return prediction

“setupRNN”函数包含了我们的深度学习模型。尽管如此,您可能不想理解这些细节,因为贝叶斯优化将该函数视为一个黑盒,它将某些超参数作为输入,然后输出预测。因此,如果你没有兴趣理解我们在函数中有什么,你可以跳过下一段。

我们的深度学习模型包含一个 LSTM 层、一个辍学层和一个输出层。模型工作所需的必要信息需要发送给这个函数(在我们的例子中,是输入和辍学率)。然后,您可以在该函数中继续实现您的深度学习模型。在我们的例子中,我们使用 LSTM 层来识别股票数据集的时间依赖性。

然后,出于正则化目的,我们将 LSTM 的最后一个输出馈送到漏失层,并通过输出层获得预测。最后,请记住将该预测(在分类任务中,这可能是您的 logit)返回给将被传递给贝叶斯优化的函数(“setupRNN”将被该函数调用)。

如果您正在为机器学习算法执行超参数优化(使用 Scikit-Learn 等库),您将不需要单独的函数来实现您的模型,因为模型本身已经由库给出,您将只需编写代码来训练和获得预测。因此,这段代码可以放在将返回给贝叶斯优化的函数内部。

现在,我们来到了超参数优化任务中最重要的部分,即“适应度”函数。

@use_named_args(dimensions=dimensions)
def fitness(lstm_num_steps, size, lstm_init_epoch, lstm_max_epoch,
            lstm_learning_rate_decay, lstm_batch_size, lstm_dropout_rate, lstm_init_learning_rate):

    global iteration, num_steps, lstm_size, init_epoch, max_epoch, learning_rate_decay, dropout_rate, init_learning_rate, batch_size

    num_steps = np.int32(lstm_num_steps)
    lstm_size = np.int32(size)
    batch_size = np.int32(lstm_batch_size)
    learning_rate_decay = np.float32(lstm_learning_rate_decay)
    init_epoch = np.int32(lstm_init_epoch)
    max_epoch = np.int32(lstm_max_epoch)
    dropout_rate = np.float32(lstm_dropout_rate)
    init_learning_rate = np.float32(lstm_init_learning_rate)

    tf.reset_default_graph()
    tf.set_random_seed(randomState)
    sess = tf.Session()

    train_X, train_y, val_X, val_y, nonescaled_val_y = pre_process()

    inputs = tf.placeholder(tf.float32, [None, num_steps, features], name="inputs")
    targets = tf.placeholder(tf.float32, [None, input_size], name="targets")
    model_learning_rate = tf.placeholder(tf.float32, None, name="learning_rate")
    model_dropout_rate = tf.placeholder_with_default(0.0, shape=())
    global_step = tf.Variable(0, trainable=False)

    prediction = setupRNN(inputs,model_dropout_rate)

    model_learning_rate = tf.train.exponential_decay(learning_rate=model_learning_rate, global_step=global_step, decay_rate=learning_rate_decay,
                                                decay_steps=init_epoch, staircase=False)

    with tf.name_scope('loss'):
        model_loss = tf.losses.mean_squared_error(targets, prediction)

    with tf.name_scope('adam_optimizer'):
        train_step = tf.train.AdamOptimizer(model_learning_rate).minimize(model_loss,global_step=global_step)

    sess.run(tf.global_variables_initializer())

    for epoch_step in range(max_epoch):

        for batch_X, batch_y in generate_batches(train_X, train_y, batch_size):
            train_data_feed = {
                inputs: batch_X,
                targets: batch_y,
                model_learning_rate: init_learning_rate,
                model_dropout_rate: dropout_rate
            }
            sess.run(train_step, train_data_feed)

    val_data_feed = {
        inputs: val_X,
    }
    vali_pred = sess.run(prediction, val_data_feed)

    vali_pred_vals = rescle(vali_pred)

    vali_pred_vals = np.array(vali_pred_vals)

    vali_pred_vals = vali_pred_vals.flatten()

    vali_pred_vals = vali_pred_vals.tolist()

    vali_nonescaled_y = nonescaled_val_y.flatten()

    vali_nonescaled_y = vali_nonescaled_y.tolist()

    val_error = sqrt(mean_squared_error(vali_nonescaled_y, vali_pred_vals))

    return val_error

如上所示,我们将超参数值传递给一个名为“fitness”的函数“适应度”函数将被传递到贝叶斯超参数优化过程( gp_minimize )。请注意,在第一次迭代中,传递给该函数的值将是您定义的默认值,从那里开始,贝叶斯优化将自行选择超参数值。然后,我们将选择的值赋给我们在开始时声明的 python 全局变量,以便我们能够在适应度函数之外使用最新选择的超参数值。

然后,我们来到优化任务中的一个相当关键的点。如果您在本文之前使用过 TensorFlow,您会知道 TensorFlow 通过为您制作的任何类型的深度学习模型创建计算图来运行。

在超参数优化过程中,在每次迭代中,我们将重置现有的图形并构建一个新的图形。这样做是为了最小化图形占用的内存,并防止图形相互堆叠。重置图表后,您必须立即设置 TensorFlow 随机种子,以获得可重复的结果。经过以上过程,我们终于可以宣告 TensorFlow 会话了。

在这之后,你可以像平常一样开始添加负责训练和验证你的深度学习模型的代码。这一部分实际上与优化过程无关,但是在这一点之后的代码将开始利用贝叶斯优化选择的超参数值。

这里要记住的要点是返回为验证分割获得的最终度量值(在本例中为 RMSE 值)。该值将被返回到贝叶斯优化过程,并将在决定它想要探索的下一组超参数时使用。

注意:如果你正在处理一个分类问题,你会想把你的精度作为一个负值(例如-96),因为,即使精度越高,模型越好,贝叶斯函数将继续试图减少这个值,因为它被设计为找到返回给它的最低值的超参数值。

现在让我们把整个过程的执行点,即“主”函数写下来。在 main 函数中,我们声明了“gp_minimize”函数。然后,我们向该函数传递几个基本参数。

if __name__ == '__main__':

    start = time()

    search_result = gp_minimize(func=fitness,
                                dimensions=dimensions,
                                acq_func='EI', # Expected Improvement.
                                n_calls=11,
                                x0=default_parameters,
                                random_state=46)

print(search_result.x)
print(search_result.fun)
plot = plot_convergence(search_result,yscale="log")

atexit.register(endlog)
logger("Start Program")

“func”参数是您希望使用贝叶斯优化器最终建模的函数。“dimensions”参数是您希望优化的一组超参数,“acq_func”代表采集函数,该函数有助于决定应使用的下一组超参数值。 gp_minimize 支持 4 种采集功能。它们是:

  • LCB:信心下限
  • EI:预期改进
  • PI:改善的可能性
  • gp_hedge:在每次迭代中概率性地选择上述三个获取函数中的一个

以上信息摘自文件。这些都有自己的优势,但如果你是贝叶斯优化的初学者,尝试使用“EI”或“gp_hedge ”,因为“EI”是最广泛使用的采集函数,“gp_hedge”将从上述采集函数中选择一个,因此,你不必太担心。

请记住,使用不同的采集功能时,您可能需要更改其他参数,这些参数会影响您选择的采集功能。请参考文档中的参数表。

回到解释其余的参数,“n_calls”参数是您想要运行适应度函数的次数。优化任务将通过使用由“x0”定义的超参数值(默认超参数值)开始。最后,我们设置超参数优化器的随机状态,因为我们需要可重复的结果。

现在,当您运行 gp_optimize 函数时,事件流将是:

适应度函数将与传递给 x0 的参数一起使用。将使用指定的历元对 LSTM 进行训练,并将运行验证输入来获取其预测的 RMSE 值。然后,根据该值,贝叶斯优化器将在采集函数的帮助下决定它想要探索的下一组超参数值。

在第二次迭代中,适应度函数将使用贝叶斯优化已经导出的超参数值运行,并且相同的过程将重复,直到它已经迭代了“n_call”次。当整个过程结束时,Scikit-Optimize 对象将被赋给“search _result”变量。

我们可以使用这个对象来检索文档中提到的有用信息。

  • x[列表]:最小值的位置。
  • fun [float]:函数值最小。
  • 模型:用于每次迭代的代理模型。
  • x _ iters[列表列表]:每次迭代的函数求值位置。
  • func_vals [array]:每次迭代的函数值。
  • 空间[Space]:优化空间。
  • specs [dict]`:调用规范。
  • rng [RandomState instance]:最小化结束时随机状态的状态。

“search_result.x”为我们提供了最佳超参数值,使用“search_result.fun ”,我们可以获得与所获得的超参数值相对应的验证集的 RMSE 值(为验证集获得的最低 RMSE 值)。

下面显示的是我们为模型获得的最佳超参数值和验证集的最低 RMSE 值。如果您发现在使用“search_result.x”时很难确定超参数值的排列顺序,那么它与您在“dimensions”列表中指定超参数的顺序相同。

超参数值:

  • 第六步
  • lstm_size: 171
  • lstm_init_epoch: 3
  • 最大纪元:58
  • lstm _ learning _ rate _ decay:0 . 54686 . 38686868661
  • lstm_batch_size: 24
  • lstm _ dropout _ rate:0 . 20015 . 38383838661
  • lstm _ init _ learning _ rate:0 . 36867 . 38686868686

**最低的 RMSE:**2 . 54686 . 38686868661

收敛图

在该图中产生贝叶斯优化最低点的超参数是我们得到的超参数值的最优集合。

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

该图显示了贝叶斯优化和随机搜索中每次迭代(50 次迭代)记录的最低 RMSE 值的比较。我们可以看到,贝叶斯优化已经能够比随机搜索更好地收敛。然而,在开始时,我们可以看到随机搜索比贝叶斯优化器更快地找到了更好的最小值。这可能是因为随机抽样是随机搜索的本质。

我们终于到了这篇文章的结尾,所以总结一下,我们希望这篇文章通过向您展示找到最佳超参数集的更好方法,使您的深度学习模型构建任务变得更容易。不要再强调超参数优化了。编程快乐,各位极客!

有用的材料:

  • 完整的代码可以通过这个链接找到。
  • 关于贝叶斯优化的更多信息,可以参考这篇论文
  • 有关采集功能的更多信息,请参考这篇论文

原载于https://dzone.com

如何自动将您喜欢的库导入 IPython 或 Jupyter 笔记本

原文:https://towardsdatascience.com/how-to-automatically-import-your-favorite-libraries-into-ipython-or-a-jupyter-notebook-9c69d89aa343?source=collection_archive---------1-----------------------

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

(Source)

不再需要每天十次输入“进口熊猫作为 pd”

如果您经常使用交互式 IPython 会话或 Jupyter 笔记本,并且厌倦了一遍又一遍地导入相同的库,请尝试以下方法:

  1. 导航至~/.ipython/profile_default
  2. 创建一个名为startup的文件夹(如果它还不存在的话)
  3. 添加一个名为start.py的新 Python 文件
  4. 把你喜欢的进口货放在这个文件里
  5. 启动 IPython 或 Jupyter 笔记本,您喜欢的库每次都会自动加载!

以下是可视化的步骤。一、start.py的位置:

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

Full path of Python script is ~/.ipython/profile_default/startup/start.py

以下是我的start.py的内容:

现在,当我启动一个 IPython 会话时,我会看到:

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

我们可以通过检查globals()来确认库已经加载:

globals()['pd']**<module 'pandas' from '/usr/local/lib/python3.6/site-packages/pandas/__init__.py'>**globals()['np']
**<module 'numpy' from '/usr/local/lib/python3.6/site-packages/numpy/__init__.py'>**

我们现在都可以很好地使用我们的交互式会话,而不必键入命令来加载这些库!这也适用于 Jupyter 笔记本。

笔记

  • 该文件可以命名为任何名称(start.py很容易记住),并且在startup/中可以有多个文件。当 IPython 启动时,它们按照字典顺序执行。
  • 如果你在 Jupyter 笔记本中运行这个,你不会得到一个带有导入的单元格,所以当你共享笔记本时,确保将start.py内容复制到第一个单元格中。这将让人们知道你在使用什么库。(作为替代,你可以使用我写的default_cell Jupyter 笔记本扩展。)
  • 如果您在多台计算机上工作,您将不得不重复这些步骤。确保使用相同的start.py脚本,以便获得相同的导入!
  • 感谢这个栈溢出回答官方文档

这当然不会改变生活(不像写数据科学),但每次你启动 IPython 时,它都会为你节省几秒钟。这也是一个有用的演示,展示了如何定制您的工作环境,以尽可能提高效率。你可以通过阅读文档(比如关于 IPython magic commands )找到许多其他的技巧,自己尝试,甚至关注有用的 Twitter 账户。如果你发现自己对一天打十次键盘这样的低效率感到沮丧,不要只是接受,要找到更好的工作方式。

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

如何避免悲惨的 Airbnb 入住?

原文:https://towardsdatascience.com/how-to-avoid-a-miserable-airbnb-stay-2563b9f20cc7?source=collection_archive---------24-----------------------

用 Python 对 Airbnb 在洛杉矶的数据进行探索性分析

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

Heat map of Airbnb listings in Los Angeles

我相信不少人对 Airbnb 既爱又恨,一些美好的回忆因 Airbnb 的出色房源而高兴,也夹杂着其他令人失望甚至恐惧的住宿体验。有没有可能选择一个“满意保证”的 Airbnb 住宿,去一个我们从未去过的地方旅行?

我将对来源于 Airbnb 内部的的洛杉矶 Airbnb 数据集进行探索性分析,作为一个例子来演示如何在一个陌生的城市中以省时和准确的方式从数百个可用房源中筛选出一个值得信任的房源。

分析是用 Python 语言完成的。所有的源代码都可以转移到 Airbnb 内部列出的其他城市,并可以在我的 Github 上找到:【https://github.com/jystacy/Airbnb。

数据描述

作为世界闻名的旅游目的地,大量寻求物有所值的游客促进了 2008 年以来洛杉矶 Airbnb 的发展。截至 2018 年 12 月,天使之城的 25487 个主机拥有 43026 个房源。从文章开头展示的热图来看,Airbnb 房源集中分布在一系列旅游景点,从洛杉矶市区、好莱坞、西好莱坞、圣莫尼卡海滩一直延伸到这里。马里布和长滩也有很多上市选择。

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

我选择了上市获得第一次审查的年份作为上市年份的指标,发现 2015 年后的年增长率稳定在 40%至 60%之间。与此同时,在连续 8 年增长后,新主机从 2016 年开始出现负增长。2018 年,只有 2721 名新主机首次房源加入 Airbnb,数量仅为 2015 年增长高峰时的 58%。新房源和主机的反向增长趋势表明,近三年来,Airbnb 主机中有多个房源的数量有所增加。

住在哪里?

在选择住宿地点时,安全总是一个重要的考虑因素。该网站(www.bestplaces.net)提供犯罪数据,按邮政编码从 1(低犯罪率)到 100(高犯罪率)排列,其粒度比联邦调查局(仅按县)提供的犯罪数据更细。我用 Python 编写了代码来自动收集暴力犯罪数据,并在此基础上创建了一个洛杉矶邮政编码犯罪 choropleth。

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

对比热图可以看到,最热门的上市区域都避开了洛杉矶最危险的区域。但游客最好不要去市中心以南,并小心市中心、圣莫尼卡海滩和长滩等热点周围的财产和暴力犯罪。有趣的是,这个位于洛杉矶市中心以南、北邻圣莫尼卡高速公路(I-10)的地区几乎没有 Airbnb 房源。这个历史上被称为“中南部”的地区,长期以来一直遭受着集中贫困和高犯罪率的困扰。

P 是另一个重要的度量标准。在洛杉矶 Airbnb 住宿平均花费 198.74 美元,另一家每晚 83.30 美元的清洁费。不同地区的挂牌价格差别很大。位于海岸和贝弗利山附近的房屋的短期租金价格推高了洛杉矶的平均水平。

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

Malibu 和 Bel Air 的房源平均价格最高,超过 1000 美元。评分分布表明,这些地区的房源在地理位置、入住服务和主客沟通方面得到了很高的评分,而在价值和清洁度方面的评分相对较低。在洛杉矶,有 13 个房源的价格高于每晚 10,000 美元,其中有 11 个房源属于同一个主机。

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

Rating distribution of the listings in the zip code areas whose average price per night is higher than $1,000

irbnb 使游客能够通过对清洁度、准确性、登记流程、与主人的沟通、位置和价值进行评级并留下评论来评估列表和他们的体验。其中“价值”是指付出的成本和获得的收益之间的回报(Curhan,Elfenbein,& Eisenkraft,2010)。我检查了所有拥有超过 100 个 Airbnb 房源的社区,发现以下 20 个社区的房源获得了最高的分。

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

要选择哪个列表?

什么样的主机可以信任?

在共享经济平台上,陌生人之间的一种新的信任被命名为“分布式信任”(Botsman,2017),这种信任通过代表产品或服务分数、评级或评论的评估机制(Pettersen,2017)得到了脆弱的培育。

主机的可信度部分基于这样一个事实:Airbnb 使用各种方法来验证主机的身份。在这一部分,我想验证这些认证的有效性。

“Ssuper host”是一项每季度审核一次的计划,旨在奖励平均综合评分达到 4.8 分或更高、在过去一年中至少接待过 10 次住宿、在 24 小时内保持 90%的回复率且一年内没有取消预订的主人。Airbnb 通过在他们的个人资料和列表中添加徽章来突出显示这些合格的主机,并为列表搜索优先考虑他们的可见性。t 检验的结果证实了“Superhost”拥有的列表的平均评分显著高于其他列表。

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

Boxplot of listings’ rating scores between different host groups

为了加强平台上的分布式信任,Airbnb 还鼓励主机上传他们的个人资料照片,并完成个人资料验证。t 检验的结果也验证了主机验证的有效性,而有和没有个人资料图片的主机之间的列表评分没有显著差异。

W 主机取消政策怎么样?Airbnb 为房东提供五种取消选择——灵活、适度、有宽限期的严格、30 天超级严格和 60 天超级严格。前三种政策分别对应于在入住时间前 24 小时、5 天和 14 天取消住宿的全额退款,而后两种政策仅提供 30 天和 60 天取消的 50%退款。

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

Listing rating score comparison among host groups with different cancellation policies

我的许多朋友倾向于避开有严格取消政策的主人。然而,这并不能保证。正如所料,选择超级严格取消政策的主机的评级分数明显低于其他主机,而选择 14 天严格取消政策的主机仍然是可靠的。相比之下,在 Airbnb 的所有主机中,取消政策适中的主机评分最高。

基于主机分析,理想主机的画像包括完整的配置文件验证、“超级主机”认证和相对灵活的注销策略。

取消保单部分的 ANOVA 分析和事后分析 ( Tukey HSD )的代码也可以在这里查看。由于“严格”类别已完全被“有宽限期的严格”取代,并且数据集中只有 63 个具有“超级严格 30 天”取消政策的列表,我从 Tukey 的 HSD(诚实地说,显著差异)测试中删除了这两个类别。

评分和评论说明了什么?

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

Scatter plot displaying the relationship between rating score and the number of reviews of listings

建议厌恶风险的客人选择有大量评论的列表。所有每月收到超过 7.5 条评论的列表项在 100 分中被评为不低于 80 分,而所有被评为低于 60 分的列表项每月收到不超过 5 条评论。把评论少的房源排除在外太武断了,尤其是这些新上市的房源。然而,选择具有大量评论的列表将减少遇到不满意停留的概率。

在缩小到点评量可观的优质房源后,如何从甚至多达 700 条的点评中形成房源一目了然的印象?这种印象应该包括对最流行的话题的了解,但也包括对那些不经常出现的话题的了解。通过这种印象传达的信息量应该足以决定是否列名。

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

Word clouds for three random selected listings

传统的方法——基于单词在列表评论中出现的频率的单词云——对于这项任务有一些明显的问题。如果我们比较以上从三个包含 100 多条评论的列表生成的词云,词云提取的信息提供了高度的同质性,并提出了可读性的问题。

I nstead,基于语义相似度对评论进行聚类,并从每个聚类中提取典型句子,满足了客人对支持快速决策的有效评论摘要的需求。在去除了非英语评论(来自 langdetect 库)和句子标记化(来自 NLTK 库)之后,在句子嵌入方面,我使用了 Skip-Thought model ,该模型考虑了句子中单词的顺序而不仅仅是词频,从而语义相似的句子的嵌入在向量空间中彼此更接近,因此适合于聚类。然后我把高维向量空间中的这些嵌入聚类成预定义数量的聚类。聚类的数量等于总结中句子的数量,在这种情况下,我选择它作为评论中句子总数的第五个根。

从以上列表中获得的示例摘要如下:

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

Review summary based on Skip-thought clustering involves more amount of information than word cloud. Those who are dog-lovers may select Sherren’s listing. Tom’s listing seems more suitable for tourists. For John’s one, guests need to trade off between the unbeatable location and small size.

最后但并非最不重要的一步是记住,由于在线评论的积极性偏差,签到时的失望或多或少是不可避免的。积极的评论占据了 Airbnb 的评论区,即使考虑到 Airbnb 的双盲或“同步揭示”评论系统。我用情感函数(来自 textblob 库)对每个嘉宾留下的评论进行了情感分析。该函数返回范围为[-1,1]的极性得分,其中 1 表示肯定陈述,-1 表示否定陈述,0 表示中性陈述。大多数评论(98%)绝对不是负面的,尽管结果是基于这样一个事实,即带有一两个投诉的评论与其他正面评论一起出现,仍被职能部门归类为“正面”。

随着共享经济的发展和 Airbnb 的兴起,一批研究者和商业记者(如 Ho,2015;弗拉德金、格雷瓦尔、霍尔茨和皮尔森,2015 年;Yannopoulou 等人,2013 年;泽卡诺维奇-科罗纳&格尔祖诺夫,2014;Zervas 等人,2015)已经注意到 Airbnb 评分的这种异常积极的倾斜。可能的原因包括礼貌和礼貌的社会文化因素,以及恐惧或报复,以及担心自己的网络身份与负面评论相关联(Bridges,j .,& Vásquez,c .,2018)。

希望我们在 Airbnb 陪伴下的下一次旅行会很愉快!

本节中文本挖掘包括文本清洗、词云、聚类摘要的所有代码均可参考:https://github . com/jystacy/Airbnb/blob/master/Review % 20 analysis . ipynb

如何避免数据科学编程环境中的常见困难

原文:https://towardsdatascience.com/how-to-avoid-common-difficulties-in-your-data-science-programming-environment-1b78af2977df?source=collection_archive---------12-----------------------

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

(Source)

减少编程环境中的附带问题,这样您就可以专注于重要的数据科学问题。

考虑以下情况:你正试图练习你的足球技能,但是每次你走上球场,你都会遇到一些问题:你的鞋子穿错了脚,鞋带没有系好,你的袜子太短,你的短裤太长,以及球的大小不对。这是一个荒谬的情况,但它类似于许多数据科学家由于一些常见的、容易解决的问题而发现自己的处境:

  • 无法管理库依赖关系
  • 代码风格不一致
  • 不一致的命名约定
  • 团队中不同的开发环境
  • 不使用集成开发环境进行代码编辑

所有这些错误都会“绊倒”你,耗费你的时间和宝贵的精神资源去担心小细节。您没有解决数据科学问题,而是发现自己在设置环境或运行代码时遇到了一些附带的困难。幸运的是,使用正确的工具和方法,上述问题很容易解决。在本文中,我们将探讨数据科学编程环境的最佳实践,这将让您有更多的时间和精力来解决重要的问题。

1.无法管理库(依赖项)

最令人沮丧的事情莫过于,某一天编写的代码运行良好,但第二天却发现它有许多错误,而你却没有改变一个字符。几乎每次我遇到这个问题,都只有一个原因:无法跟踪你在代码中使用的库的版本。这个问题如此普遍,如此令人沮丧,以至于它的名字叫做依赖地狱

为了克服这一点,你必须记住库有版本:当你说你使用pandas,那是不正确的;你实际上用的是pandas==0.24.0或者pandas==0.19.2等等。您在项目中导入的每个库都将是特定于的版本,记录您项目的版本对于避免可怕的代码崩溃是至关重要的。围绕着创建一个隔离环境的想法,有许多解决这个问题的选择:Python 的托管安装,它有自己的独立于系统 Python 的包。

  1. Python 内置的 [venv](https://docs.python.org/3/library/venv.html):这个是 Python 自带的但是有点难用。
  2. [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html) 虚拟环境:使用 conda 包管理器创建和维护虚拟环境。这是我向虚拟环境新手推荐的方法。
  3. [pipenv](https://docs.pipenv.org/)(第三方):也用版本控制的Pipfile创建和管理虚拟环境。我发现这个很容易使用。
  4. [docker](https://www.docker.com/resources/what-container) 容器:容器超越了虚拟环境,包含了运行应用程序所需的所有软件和代码(尽管它并不完全是虚拟机)。Docker 在数据科学中越来越常见,因为你可以将数据、代码和所有需要的库打包在一起,所以学习如何设置和运行 docker 容器是值得的。

( Real Python 在所有这些工具上都有很棒的教程)。

pip freeze > requirements.txt还不够好:您需要使用虚拟环境(可以从requirements.txt创建)来确保库与预期版本相匹配。虚拟 env 也有一个指定的 Python 版本,消除了不同 Python 安装的问题。

你选择的方法取决于你的团队的需求和你想要投入多少时间。例如,我在个人工作中使用 conda 环境,在工作中使用pipenv。我不打算做推荐,除了说:挑一个用吧!在不知道您调用的每个库的版本的情况下,您永远不应该从事数据科学。

不一致的代码风格

如果您必须选择在脚本的每一行使用多少空格,您就没有时间考虑实际的代码了!大部分人的格式化倾向没那么差,但也接近了。你永远不必对代码格式做出有意识的决定:比如关键字参数周围的空格、行的长度、函数之间的空行、列表中最后一项后面的尾随逗号等等;仅处理代码外观的因素。

与其在每一条线上做选择,不如做一个全球性的决定——为你的项目采用一种风格——并且永远不要再担心它。在工作中,我的团队使用了[black](https://black.readthedocs.io/en/stable/) 自动套用格式工具,该工具在我们整个项目中应用了一种标准的代码风格,只是修复了错误——无需去想它。每次在 vscode 中保存 Python 文件时,我都将其设置为自动运行。black工作非常好,也非常容易使用,所以我也把它用于我所有的个人工作。

Python 和其他语言还有其他自动格式化林挺选项。我建议采用一套代码风格标准,并使用一个工具来检查所有文件的使用情况。在代码格式化上花费比要求更多的精力,这是对你宝贵时间的一种浪费。

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

No more code format errors thanks to black autoformatting!

不一致的命名约定

在另一个“一次做出全局决定,而不是多次做出局部决定”的应用中,您应该为一个项目建立命名约定。这些应该包括变量、函数、类、文件、测试和目录。命名约定还应包括单位(如kph)和聚合(minmax)的标准化缩写。我在这里写了关于命名变量。

选择精确的约定并不重要,重要的是一致地使用它们。在整个团队(可能只有你自己)中就标准达成一致,把它们写在一个共同的地方,然后毫无偏差地遵循它们。在代码审查中,(另一个至关重要的最佳实践)执行标准,这样每个人都在同一页上。这个小技巧再次告诉我们,必须减少你做出的有意识的决定的数量。当您为函数、变量等编写名称时,应该有一个基于代码和约定的显而易见的选择。

如果你正在挣扎,采用另一个项目使用的标准惯例。不要固执己见,拒绝改变,因为你总是以一种方式做事。在编程中,没有一成不变的个人信念。制定惯例,写下来,应用它们,停止把时间花在数据科学的偶发问题上。

团队中不同的开发环境

团队中的每个人都应该使用相同的开发环境,没有例外。作为一个终生(22 年)的 Windows 用户,我完全没有想过抗议在我目前的职位上使用 MacOS 进行开发(Cortex Building Intelligence)。根本没有选择的余地:其他人都使用 Mac,所以我不得不在整个团队中使用它来实现标准化。我不打算提倡一个系统优于另一个系统(这里是最常用的系统的数字),但我会大声疾呼同一团队中的每个人使用相同的操作系统。

“它在我的机器上有效”是任何数据科学家都不想听到的一句话。即使在使用相同的库时,我也发现了这个问题,因为操作系统不同。当我知道我在我的机器上写的分析可以在其他人的机器上工作时,我们的团队可以更有效率(感谢操作系统和依赖管理)。此外,当我们团队中的任何人需要安装新软件时,我们都可以使用完全相同的命令来完成。对于不得不采用新操作系统的人来说,这并不好玩,但为了团队的利益,这是必要的。

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

Use the same operating system: no excuses

在笔记本而不是集成开发环境中编写太多代码

纠正这种做法可能是我从研究数据科学背景到行业的最大变化:程序和个人脚本应该在集成开发环境中编写,而不是在 Jupyter 笔记本上。笔记本非常适合探索、学习、绘图和有文化的编程,但是你不应该养成依赖它来编写所有代码的不健康习惯。

Jupyter 笔记本是一个用许多脚本编写实际程序的可怕地方,因为缺少工具:没有林挺,没有跨项目的自动格式化代码,糟糕的文件浏览,没有项目范围的查找和替换,没有内置的测试框架,糟糕的调试,没有集成的终端,等等。不,Jupyter 实验室没有解决这些问题;它仍然不是一个你可以或者应该开发脚本的地方。

打破笔记本电脑是令人生畏的,因为它需要你一次在你的大脑中容纳更多的信息。您需要从由许多函数和类组成的整个脚本的角度来考虑代码,而不是代码块。此外,笔记本呈现了从上到下执行的线性代码路径,而真正的程序有许多互锁的部分形成一个循环。一个脚本可能从你的模块中的 10 个其他脚本中导入,这些脚本在一个复杂的结构中相互作用。

我不想进入编码最佳实践,但是您的开发环境对您如何思考和编写代码有着巨大的影响。一个合适的集成开发环境会让你把数据科学代码看作一个软件产品,而不是孤立的笔记本:一个有许多联锁部分和复杂交互的软件产品。

IDE 有许多很好的选择。我建议尝试几个来找到您需要的合适的复杂性和特性数量。

  • Sublime Text 开始是轻量级的,但是有很多插件
  • Atom 是另一个很好的基本 IDE,提供了更多的功能包
  • Rodeo 试图为 Python 创造一种 RStudio 的感觉
  • PyCharm 是一个全功能的环境,拥有比你需要的更多的功能,还需要一点学习过程

我个人使用的 Visual Studio 代码,已经成为软件工程师最喜欢的编辑器。vscode 通过扩展(包括内置浏览器和 git 集成)给了我上面提到的所有东西,甚至更多。我大约 90%的编码时间都花在 Visual Studio 代码上,我已经像喜欢 Jupyter 笔记本一样喜欢它了。

Jupyter 笔记本没有什么本质上的错误,它们只是从来就不是用来开发严肃程序的。当正确使用时(实现文化编程的概念),它们是一个很好的工具。但是,和任何工具一样,笔记本可以用在不合适的地方。当您想要开始编写生产代码时,您将不得不切换到集成开发环境。即使您还没有做到这一点,我也建议您熟悉编写脚本而不是笔记本的想法,并将许多脚本组合成一个库(您可以将其导入笔记本进行分析)。不使用 IDE 来开发程序是一个严重的障碍:对工作的自己好一点,开始使用全功能的编程环境。

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

A little intimidating at first, but much more productive. Remember, your environment affects how you think.

结论

在他的优秀论文“没有银弹”中,大卫·布鲁克斯讨论了软件工程中偶然与本质问题的观点。过去 40 年来,软件工程生产率的提高是通过减少偶然问题实现的——那些与将想法转化为代码相关的问题——而基本困难——构思想法——仍然存在。在数据科学领域,我仍然看到许多人在偶然的困难中挣扎,甚至在开始编码之前就被自己绊倒,因为他们没有一个好的环境或者没有坚持简单的实践

作为一个领域,我认为我们可以做得更好。让我们花更少的时间在数据科学的意外困难上——管理依赖关系、代码格式、命名、操作系统和代码编辑器——花更多的时间在基本困难上——开发算法、建立模型、工程特性和部署训练有素的模型(以及用机器学习应对气候变化)。通过采用本文中概述的实践,您将有更多的时间和精神资源来解决真正重要的问题。

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

如何避免数据科学领域的菜鸟错误?

原文:https://towardsdatascience.com/how-to-avoid-rookie-mistakes-in-the-field-of-data-science-3076017cdab1?source=collection_archive---------18-----------------------

数据科学初学者的注意事项指南

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

我最近开始了通过自学成为数据科学家的旅程。这条路并不总是一帆风顺的,因为没有人给我详细的连续教学大纲。因此,我尝试了一些事情,不太成功,但后来从那里拿起。如果你是一个有抱负的数据科学家,这篇文章可能会帮助你避免犯我犯过的错误。

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

首先,不要试图记忆或学习机器学习算法。大脑只保留其中的一部分,并丢弃其余部分。吸收它们的最好方法是通过实践。没有捷径!

我犯了一个错误,那就是在 Udemy 上浏览“机器学习 A-Z:数据科学中的 Python 和 R 的实践”课程。我的大脑吸收了课程的前半部分,但最终作为初学者,通读其余部分变得乏味。我确实得到了大多数算法的直觉,但现在回想起来,我觉得我本可以取消这门特殊的课程。

其次,编程是掌握数据科学的一个至关重要的部分。我们不能忽视这个阶段。精通一门编程语言是必须的,尤其是 Python。它是最被接受的语言,因为它有广泛的库,这有助于数据科学家部署随时可用的工具。而且大部分的课程和比赛都需要我们用 Python 编码。因此,“Pythonic 式”思维对数据科学职业生涯至关重要!

我借助了两个资源——一开始是 Codecademy ,后来是 Datacamp 。我很快就退出了 Codecademy,因为它是从非常基础的水平开始的——可能是为那些不是来自技术领域的人准备的。我在 Datacamp 上购买了一年的订阅,发现从数据科学的角度来看,这是学习 Python 的一个很好的资源。有些课程是为你最终要使用的库准备的——numpy,scipy 等等。有关于数据分析和可视化的项目。同样,人们应该记住没有必要记住语法。熟悉这种语言的功能和包是很重要的,确切的语法总是可以通过谷歌搜索到的。堆栈溢出是寻找查询答案以及回答他人问题的绝佳资源。

第三,在没有分析数据集的情况下,人们甚至不应该考虑机器学习算法。机器学习部分只有 2-3 行代码。其余的代码致力于详细的数据分析和可视化。如果不知道数据中的模式,就不可能确定哪些输入对您的输出很重要,消除数据中的噪声并最终转换数据以供模型使用。 Kaggle 是一个很好的资源,可以让你开始进行简单的机器学习练习(泰坦尼克号 & 房价预测)并尝试数据清理和转换。

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

我将在下一篇文章中涉及更多关于数据工程的内容。在此之前,请保持数据科学家的活力,并寻求任何问题或反馈!

如何避免每个数据科学家都会犯的最严重的错误——使用以下两个关键步骤

原文:https://towardsdatascience.com/how-to-avoid-the-worst-mistake-every-data-scientist-can-make-using-these-2-crucial-steps-a25a90b0995?source=collection_archive---------3-----------------------

独家 TDS 采访

Patreon 的首席数据科学家分享了职业成功的宝贵技巧和资源以及解决数据方面实际挑战的策略。

Please subscribe to our official YouTube channel!

面试官:TowardsDataScience.com 项目负责人 Haebichan Jung

受访者: Maura Church ,Patreon 的数据科学主管。曾在谷歌工作,获得应用数学学士学位(哈佛大学)。

Patreon.com 是一个平台,让创作者很容易通过会员模式直接从粉丝那里获得报酬。你可以上 Patreon,每月支付给最喜欢的创作者一定的费用,以获得独家利益,偷窥等。有了足够的赞助,创意者就可以在 Patreon 上谋生,而不是通过广告或品牌。

你能告诉我们你的专业背景吗?

在 Patreon 之前,我在谷歌的一个数据分析团队从事数据工作。我一直在研究垃圾邮件和滥用,具体来说,就是应用数据来减少谷歌通信产品中的垃圾邮件、滥用和欺诈。在那之前,我在哈佛大学学习应用数学和音乐,特别是技术、艺术和计算机科学的交叉是我的兴趣所在。大约 4 年前,我作为第二名数据科学家加入了 Patreon,从那以后我就一直在这家公司工作。

刚开始在 Patreon 工作时,你的日常职责是什么?这些年来,您的数据角色发生了怎样的变化?

当我第一次开始时,Patreon 的主要数据结构是将我们所有的关键指标写入一个 Google sheet,该表通过 Google Sheet 的 API 每天更新,这在当时是有效的。这就是我进入的环境,我们没有任何数据基础设施设置,我们开始学习基础数据问题,我们想问的是像 Patreon 这样的创作者、顾客和企业是如何成长的。

我们第一年花了很多时间做 1)数据工程工作,例如设置我们的第一个 ETL,2)完成从 MySQL 到 redshift 的大迁移,3)定义我们的核心指标和我们想要测量的内容,以及 4)构建我们的第一个关键仪表板。

现在我的一天看起来很不一样。我现在管理着 5 名数据科学家。我对战略有更大的影响力(我们的数据应该帮助我们告诉我们去哪里),我非常关注产品分析(产品表现如何?如何做好实验?).

pat reon 的所有数据科学家都研究与产品相关的问题吗?如果不是,你能告诉我数据团队是如何构成的吗?

我们是一个核心数据科学团队(我们是一个非常集中的团队)。我们在业务中支持 4 个主要功能:

  1. 产品分析:衡量产品的性能。
  2. 业务分析:与走向市场业务团队(销售、营销、创造者成功、财务、法律等)相关的所有数据和指标。).
  3. 核心研究:关于创造者和赞助者的基础性、深层次的问题,这些问题将推动整个行业的发展。
  4. 商业智能/数据教育/数据可访问性:对新员工的入职数据进行改进,为公司提供使数据更易访问和解释的资源。

我们每季度 70%的工作都是在产品分析方面。一些人更倾向于 B.A .方面,一些数据教育,这取决于个人和季度以及我们那个月要做的事情。

你能详细说明一下你的主要任务吗:让“Patreon 的创造者、顾客和队友拥有做出卓越决策所需的数据”?

我认为,一方面是基础数据基础设施,另一方面是为我们的数据科学团队的创意经济提供动力的数据产品。今天,我们已经完成了通往另一端的旅程的 60-70%。我的希望是,在未来,我们正在构建嵌入 Patreon.com 的数据产品、API 或模型,使顾客和创造者能够做出更好的决策。

例如,我们可以帮助创作者了解顾客及其会员的流失特征[流失模型和分析]。这有助于创作者采取更好的行动来留住这些会员,并增加他们在 Patreon 的会员人数。或者,我们可以告诉用户他们还没有看到的最受欢迎的帖子或好处,通过数据科学团队建立的东西[内容推荐引擎]。

现在我们只有一个模型在生产,欺诈模型,它主要是帮助 Patreon 不收取欺诈性的承诺。我的希望是,从长远来看,我们正在建立更多的数据产品,为网站提供动力。

你希望 Patreon 的未来数据科学家具备什么样的特质、品质或背景?

对我来说,真正重要的事情很少,尤其是因为 Patreon 是一家初创公司,在初创公司担任数据科学家与在拥有一百名数据科学家的更大公司担任数据科学家是不同的。几件关键的事情:

  1. 技术障碍:我们每天都在 SQL 中工作,特别是在 Postgres 中,并希望候选人了解 Python/某种统计语言的某种流利程度。此外,有人谁是真正舒适的查询非常大的数据集。
  2. 沟通:在我们的角色中,我们每天都要花很多时间来获得深刻的见解或建立模型,并将结果传达给利益相关者,无论是产品经理、营销人员还是财务人员。数据科学考生具备良好的沟通能力是超级关键的。
  3. 勇气、韧性和解决难题的意愿:Patreon 是新市场的新产品。我们试图学习的东西和我们试图解决的问题通常都是难题。我希望任何加入数据科学团队的人都对困难的问题和艰难的挑战感到兴奋。
  4. 对艺术的热情和对使命的热情:这不是最重要的,但却是最重要的。

反过来,你不寻找的特质是什么?换句话说,你在数据科学申请者中见过哪些常见的陷阱?

我经常看到的一个常见陷阱与马斯洛的锤子的想法有关。这个观点认为,对于拿着锤子的人来说,任何东西看起来都像钉子。在数据科学中,这是一种愿望,即不管实际问题如何,将候选人可能感到非常舒服的方法应用于任何问题。

例如:候选人可能会进入 Tensorflow 并学习 Keras 和深度学习,对于他们遇到的任何问题,他们会说“哦,让我使用 Tensorflow!让我将深度学习应用于此”。这是一个需要避免的非常重要的陷阱。你将要面对的一些问题可能需要一个简单的 excel 电子表格。或者实际上解决问题的方法是让人们聚在一起讨论。因此,不考虑解决问题的正确方法是非常重要的陷阱。

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

https://www.youtube.com/watch?v=Cw0iK9OoETs

所以那将是从他们试图解决的问题中抽离出来,并问“为什么”他们正在使用的技术和模型?

没错。询问我们为什么试图解决这个问题,我们将为企业增加什么价值总是一个很好的开始,而不是用你知道的方法。

对于那些不熟悉商业价值思维的人来说,该如何改进呢?

我推荐两种方法:

  1. 有很多关于战略思维的好书。如果你谷歌一下《哈佛商业评论》关于战略思维的书籍,那会有所帮助。对于数据科学家来说,拥有战略性思考的技能,提出更长期的问题,并把事情框定为为什么要这样做,这很好。
  2. 候选人思考类似产品的案例研究是非常有价值的。例如,为 Pinterest、Airbnb 或 Lyft 这些非常常见的软件产品想出 10 个功能创意。在分析一个特性之前,先回顾一下,问问自己为什么要构建这个特性。这有助于培养问为什么的能力,并以此为起点,而不是一头扎进去。

特别关注 Patreon,该公司面临的主要数据挑战是什么?

我们面临的一个数据挑战是,创建者以许多不同的方式经营他们的会员资格。举个例子:有些音乐家会打开一个 Patreon 页面来支持他们的粉丝。他们只是想把他们的粉丝带到他们创作的音乐中来。另一个例子:一个播客正在创建会员资格以提供独家内容。

事实上,人们为什么使用 Patreon,他们如何使用它,以及他们如何构建他们的定价和利益,有如此多的商业模式,这使得它在数据方面确实具有挑战性。我们确实有基本的聚类来显示这些不同的模型是什么样子,但是它们并不规范。数据中的这种非结构化商业模式问题对我们来说确实具有挑战性。因为这意味着我们必须依靠我们在支付行为和定价行为中看到的其他元素和特征,来试图找出对于给定的创作者来说什么是可行的。

第二个主要挑战是 Patreon 已经存在 6 年了,在这段时间里,我们有不同的信息、营销和品牌来配合当时的战略。现在,我们专注于会员资格。帕特里翁是一个你可以建立会员资格并从你最大的粉丝那里获得报酬的地方。但这与我们最早的创造者是非常不同的模式。因此,当我们试图研究这个新的会员市场时,我们的历史数据可能不是最有价值的东西。

这是一个固有的挑战,即你用什么数据来解决什么问题,以及我们在多大程度上依赖旧数据,而不是来自可能在过去一年推出的创作者的数据。

对于这个冷启动问题,你运用了哪些成功的策略?

这是个好问题。采取的一个重要步骤,也是更商业的方法,是挑选我们正在寻找的典型的和案例研究的例子。因此,找到一个在会员资格方面做得非常好的创作者,并深入了解他们在做什么?他们是如何建立自己的网页的?他们如何向他们的成员传递价值?并利用这些问题试图找到其他创作者。

举一个具体的例子,我们知道 Patreon 上的播客创作者拥有非常好的留存率,因为他们每周都在发布连载内容。所以如果你知道下周会有全新的剧集,你可能会留下来。我们以此为例说,“好的。怎样才能鼓励其他创作者做连载内容?我们如何从特定的创作者那里获得这种洞察力,并将其更广泛地应用于我们所有的创作者?这就是我们所说的规范创建者方法,它在缺乏数据的情况下对我们很有帮助。

关于完整的剩余采访,请观看 YouTube 视频,其中 Maura 深入研究了在 Patreon 工作的数据科学项目,以及为当前和有抱负的数据科学家提供的其他重要提示和资源。

[## Haebichan Jung —中等

阅读容格在媒介上的作品。项目负责人@ TDS | haebichan@towardsdatascience.com。每天,Haebichan…

medium.com](https://medium.com/@haebichan) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如何批量校正单个单元格

原文:https://towardsdatascience.com/how-to-batch-correct-single-cell-7bad210c7ae1?source=collection_archive---------16-----------------------

生命科学的数理统计和机器学习

单细胞基因组批量校正方法的比较

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

From Butler et al., Nature Biotechnology 36, p. 411–420 (2018), image source

这是专栏 生命科学的数理统计和机器学习 中的第 11 篇文章,我试图在这里涵盖生物信息学、生物医学、遗传学、进化等领域常见的分析技术。在我之前的一篇文章中,我开始讲述通过比较标准化策略来消除技术变异的方法。在这里,我将对该主题进行扩展,并谈论校正由不同技术、实验室、方案等测序的相同类型细胞之间的系统差异,即批量效应检测和消除。

如何检测批量效应?

批量效应有一个危险,即混淆真实的生物信号,即在 scRNAseq 的情况下,在样本中发现细胞类型。批次可能来自:不同的测序日期、测序人员、流动池/板、化学/方案、泳道、读数长度、实验室产生的数据,甚至极端情况下的不同生物体。

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

Human vs. mouse (left ) as well as stimulated vs. control (right) same type cells form distinct clusters, from Butler et al., Nat. Biot. 36, 411–420 (2018)

批次效应可以是全基因组,即大多数基因都存在,也可以是基因特异性,即某些基因恰好受到批次的影响。前者很容易从 PCA 或 tSNE 等降维图中看出。出于演示目的,我将继续使用来自的先天淋巴细胞( ILC ) scRNAseq 数据集。bjrklund 等,自然免疫学 17 ,第 451–460 页(2016) 。下面我计算了来自三个捐赠者的 ILC 细胞的 PCA 和 tSNE 降维图,详情请查看我的 github 上的完整笔记本。

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

从图中可以清楚地看到供体特异性批次,即来自同一供体的细胞倾向于聚集在一起,并且与来自其他供体的细胞截然不同。为了进一步量化,让我们显示每个主成分(PC)中有多少变化是由供体、平板和细胞类型解释的。

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

从上面的热图可以看出,PC1 的 44%是由供体批次造成的,而细胞类型的贡献可以忽略不计,因此我们有一个严重的全基因组供体相关批次效应。然而,如果我们在上述降维图中没有观察到任何供体聚类,这是否意味着我们的数据集中不存在批效应?不,不是的。某些基因在很大程度上仍可能因批次而非细胞类型而存在变异。我们可以通过将它们的表达与供体变量相关联来对受该批次影响的所有基因进行排序。从下面的左图中,我们观察到 个基因由于供体批次而具有> 20%的变异。为了评估这个数字是多还是少,我们将批次变量混洗多次并计算** 噪声区,即由于随机变量导致的基因表达的变化。我们也可以做一个正式的统计测试,计算出偏离噪声区的显著性的 p 值(下图)。通过这种方式,我们最终得到了大约 200 个受批次显著影响的**基因的列表,这些基因对于进一步的下游分析来说是值得关注的。****

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

Ranking the genes by their variance explained by the batch variable and computing the noise zone

如何纠正批量效应?

一旦我们检测到数据中的批量效应,我们就可以应用多个可用的批量校正算法。我不建议对 scRNAseq 数据进行类似于 SVA 的无监督校正,因为 scRNAseq 分析也是无监督的,其基础事实(细胞类型)未知,因此移除近似批次的替代变量可能会破坏生物信号。对于监督批次校正,即当批次先验已知时,使用 方法进行简单的线性校正将是一个良好的开端。

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

战斗通过贝叶斯线性回归执行批量校正,因此与例如在 Limma 中实现的简单 aka Frequentist 线性批量移除相比,提供了相当大的改进。除了对于小样本量更好的性能,Combat 使用****贝叶斯向均值收缩,这意味着我们使用来自其他基因的**“均值”信息来校正每个基因,而 Limma 独立地逐个基因地进行校正。尽管如此,战斗应用了线性批量效果修正。**

相互最近邻(MNN) 算法采用了受K-最近邻(KNN) 思想启发的非线性批量效应修正。该方法试图找到批次之间最相似的细胞(共同邻居),这些细胞被假定为属于相同类型MNN 细胞之间的系统差异量化批次的强度,该信息被用于缩放批次中的剩余细胞。

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

Idea behind Mutual Nearest Neighbor (MNN) batch correction, from Haghverdi et al., Nat. Biot. 36, 2018

我对这种方法的一般问题是,我总是无法理解 MNN 细胞应该属于同一类型的假设。我的直觉是,一个批次可以完全混淆批次中细胞之间距离的概念,所以批次之间最近的两个细胞实际上可以属于不同的细胞类型但是因为批次本身的原因看起来非常相似 。然而,MNN 批量效应修正在实践中似乎运行良好,我们将在后面看到它在我们的基准测试中表现良好。

另一种流行的特定批量校正方法是 修拉典型相关分析(CCA) 技术,该方法有时被视为跨样本整合。CCA 的概念与我在以前的一篇文章中描述的 PLS 数据集成 非常相似。通过最大化来自不同批次的数据集之间的相关性(或协方差),来自批次的数据被投影到低维空间中。这意味着数据集的投影相关但不一定对齐,即在低维空间中没有很好地重叠。后者通过应用 动态时间扭曲(DTW) 技术来解决,该技术局部地拉伸和挤压CCA 数据投影,以便进一步对准它们。

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

Idea behind Seurat Canonical Correlation Analysis (CCA) batch correction, from Butler et al., Nat. Biot. 36, 2018

当战斗时,MNN 和修拉 CCA 试图转换数据以便合并来自不同批次的子集, SCMAP 算法试图将查询细胞投影到参考数据集上,该参考数据集可能是例如 人类细胞图谱 ,而不实际产生单个校正的数据集。

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

Idea behind SCMAP single cell projection onto a reference data set, from Kiselev et al., Nat. Met. 15, 2018

SCMAP 使用 KNN 分类器来寻找测试细胞和用于训练分类器的大概大得多的参考数据集之间的对应关系。

ILC 批量校正方法的比较

这些方法在实践中是如何工作的?我们将使用 ILC scRNAseq 数据集来运行它们,并尝试消除与供体相关的批次效应,从而协调批次之间的细胞。完整的笔记本可以在 github 找到,这里我只给出最终的对比 tSNE 图:

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

看着上面的 tSNE 图,我会说所有的方法都很好地混合了来自不同捐赠者的细胞。遵循奥卡姆剃刀原理,我认为最简单的战斗在超级容易理解和编程的同时性能也足够令人满意。

有趣的是,当在两个供体上训练 SCMAP 分类器作为参考并将来自第三个供体的细胞投射到参考上时,考虑到大约一半的细胞根本不能被可靠地分配到任何群,导致差的细胞分配/分类准确度 84% 。这可能是由于训练集不够大或者数据不满足对于 KNN 分类器至关重要的球面对称性

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

摘要

在这篇文章中,我们了解到批量效应代表了一种技术上的变异,这种变异可能会混淆 scRNaseq 分析中的生物信号 。这些影响可以通过全基因组基因特异性方式检测,并使用线性(战斗)或非线性(MNN、修拉 CCA、SCMAP)算法进行校正。总的来说,批量修正方法在基准测试中运行良好,表明最简单的(战斗)模型应该优先。

在下面的评论中让我知道生命科学中的哪些分析对你来说似乎特别神秘,我会在这个专栏中尽力解答。在我的 github 上查看帖子中的代码。在媒体关注我,在 Twitter @NikolayOskolkov 关注我,在 Linkedin 关注我。下一次我们将会涵盖到底如何**UMAP作品,敬请关注。**

如何成为 10 倍数据科学家

原文:https://towardsdatascience.com/how-to-be-a-10x-data-scientist-4718accf7d3f?source=collection_archive---------9-----------------------

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

我将告诉你成为 10 倍数据科学家需要什么。什么是 10x 数据科学家?一个比普通数据科学家多做十倍实验的人。

为什么要做实验?数据科学家也做其他事情:数据管理、分析和为生产编写机器学习算法的实现。但是实验是数据科学家的定义。这就是科学的所在,也是他们区别于数据分析师或机器学习工程师的地方。

因此,要成为一名伟大的数据科学家,你必须擅长做实验。

为什么要多做 10 倍的实验?你永远不能保证你会因为更聪明或更快而获得十倍的好结果。但是你可以做更多的实验。你做的实验越多,你得到更好结果的可能性就越大,你迭代的速度就越快,你学习的速度也就越快。

你为什么想成为 10x 数据科学家?我不知道。可能因为听起来很酷。可能因为好玩吧。也许因为你会有更多的时间吃糕点。这取决于你。

我假设你能正确地进行实验。你是数据科学家,对吧?然而,有一件事我见过许多数据科学家犯了错误。是这样的:

1.衡量你的不确定性

如果不知道结果是否具有统计学意义,那么在基线上提高 5%有什么意义呢?数据科学家知道(或者说应该知道)统计学,但是他们往往懒得把它应用到自己的工作中。

这方面并不缺乏选择。我最喜欢的方法是我在物理学学位中学到的:将不确定性估计为平均值的标准误差。当然,这意味着您报告的值必须是某个值的平均值,无论是交叉验证中五次折叠的平均 F1 分数,还是 1000 个不同查询的排名中 10 的平均精度。

你不需要在所有结果之间做统计显著性检验。但是你需要知道你的结果有多不确定。平均值的标准误差给出了这一结果——如果您的结果相差超过标准误差的三倍,则差异可能非常显著。

你可能还想考虑一下你想要什么样的效果尺寸。如果 0.1%的改进对你没有用,那么进行可以检测这种变化的实验就没有意义了。

2.大数据并不酷

大数据慢。你不想慢下来。所以用小数据。大多数时候你不需要大数据。如果你认为你需要它,花一点时间重新考虑,以确保你真的需要它。

您希望您的数据集足够大,以便您的结果中的不确定性足够小,足以区分您所关心的差异。你不想让它变得更大:那只是浪费时间。

你不必使用所有可用的数据。根据您的实验,您可能能够估计您需要多少数据。否则,看看您所关心的指标是如何随着训练集的大小而变化的。如果它相当快地稳定下来,你就会知道你可以丢弃很多数据。做更多的实验,弄清楚你需要多少数据来使不确定性足够低,以获得你正在寻找的洞察力。

实验缓慢的首要原因是使用了太多的数据。就是不做。

3.不要使用大数据工具

如果你有小数据,就不需要大数据工具。不要使用 Spark,它会慢得可怕,与熊猫和 Scikit-learn 相比,结果会很差。用那个代替。

4.使用好的 IDE

使用一个像样的集成开发环境,比如PyCharm——实际上,只是使用 py charm,没有什么真正的比较。学习如何正确使用它。

这些是我觉得最有用的东西:

  • 自动完成,尤其是与键入的代码结合使用时
  • 查看函数或类的参数和文档
  • 快速搜索文件、类或函数的整个代码库
  • 重构以提取变量、函数或方法以及内联变量

我不忍心看着人们为了这种事情和一个文本编辑器较劲。请停下来。

Jupyter 笔记本做探索性工作还可以,但是如果你想成为 10x 的数据科学家,你需要用一个 IDE 做实验。

5.缓存中间步骤

实验可以包括数据预处理、特征提取、特征选择等。这些步骤中的每一步都需要时间来运行。一旦你找到了一组好的特性,你就可以在实验模型的时候或多或少地保持它们不变。如果预处理步骤需要很长时间,缓存中间步骤是有意义的,这样您只需执行一次这些昂贵的计算。这将对实验进行的时间产生巨大的影响。

我通常会使用一个或多个预处理脚本来完成这项工作,这些脚本会生成供后续阶段使用的文件。确保您跟踪这些文件如何与源数据相关,以便您可以通过文件命名约定或为工作设计的工具(如 Pachyderm )将您的实验结果追溯到原始数据。

6.优化您的代码

如果您的实验在减少数据集大小后仍然很慢,那么您可能会从优化代码中受益。在运行实验的同时,平衡运行实验和优化代码。

你应该知道如何优化代码的基本知识。这里是基本的:使用一个分析器。分析器会告诉你哪些位是慢的。改变这些位,直到它们不再慢为止。然后运行分析器,找到其他慢的位。重复一遍。

在一个小样本上运行分析器,这样您就可以快速找出哪些位运行缓慢。(你也需要优化优化。)

7.记录你的结果

如果你丢失了实验结果,那就是浪费。所以要小心追踪。使用为工作设计的工具,比如 MLFlow圣物,或者我自己的宠物项目 PyPastry 。如果你到处复制结果,你是在浪费时间,而且很可能出错。不要。

如果你做了以上所有的事情,运行一个实验可能需要不到五分钟,理想情况下不到两分钟。这段时间足够思考下一个实验会是什么。

这意味着你有可能在一天内运行数百个实验。当你运行这么多实验时,你需要一个好的方法来跟踪。

7a。多吃糕点

这实际上不是一个好建议。你的大脑每天需要高达 400 卡路里的葡萄糖,但吃糕点可能不是实现这一目标的最健康的选择。但是会很好吃。

相反,你可以考虑联系 DataPastry ,这是一家数据科学咨询公司,我和我的联合创始人 Iskander 一起经营。如果您想要任何建议或需要数据科学项目方面的帮助,我们很乐意收到您的来信,我们不咬人(糕点除外)。

结论

如果你做了以上所有的事情,我很确定你会比坐在你旁边的数据科学家至少多做十倍的实验(除非你坐在我旁边)。大部分数据科学家都不做。所以如果你都做了,你可能会多做五十次实验。这让你变得更有价值 50 倍吗?我不知道,但这没什么坏处。你会有更多的时间吃糕点。

原载于 2019 年 10 月 1 日https://datapastry.com

如何成为一名气候学家

原文:https://towardsdatascience.com/how-to-be-a-climatologist-f8f017ed01af?source=collection_archive---------19-----------------------

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

Image taken by author.

这些天,我们从各种新闻渠道中读到和听到了很多关于地球气候的信息。关于这些文章中的大多数,值得注意的一件有趣的事情是,它们中的许多报告来自科学报告。虽然这是一种传播科学信息的完美有效的方式,但它并没有真正告诉读者他们可以如何进行自己的气候学研究。虽然提供信息可以让观众了解信息,但在教育他们这些信息是如何产生的方面却没有什么作用。认识到这样一个事实,即许多人由于时间或缺乏资源而无法进行这些类型的检查,对许多人来说,有一个直接的指南来教他们一些关于气候科学和分析的知识仍然是有用的。今天我将使用来自美国历史气候网络(https://www.ncdc.noaa.gov/cdo-web/)的数据。他们有来自全美各站的数据。我在南卡罗来纳州哥伦比亚的车站寻找这个特别的练习。让我们开始吧。

1。)了解气候正常

气候正常是该领域大多数人所指的 30 年平均天气模式。有些人也可能把它称为某个研究区域的大气变量的“气候学”。每十年末更新一次正常值。最近的正常时期是 1981 年到 2010 年。你可能会想,“那是 29 年。”但是看似一年的假期却不是,正常情况下,整年都被计算在内,这意味着我们没有计算“到”2010 年,我们考虑的是“到”2010 年的数据,这给了我们完整的 30 年。气候常态有助于理解趋势变化、模式变化和异常事件。除非你是在做一个特定事件的案例研究,否则你应该尽可能多地查看数据,将这项研究视为一项气候学研究。然而,这个规则有一个例外。有句话说,“什么是气候学,取决于正在研究什么。”如果你开始研究一个领域的蒸发和风型的气候学,这是非常正确的。除了偶尔的恶劣天气事件,这些小气候很可能会经历很多变化。在这些更小的尺度上,异常仍然可能发生,但是 30 年的数据对于检查它们是不必要的。因此,当你观察区域、大陆或全球范围的天气模式时,应该应用气候常态。

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

Climate normal for the Columbia, SC station between 1981 and 2010. Figure made by author.

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

Climographs for each decade within the normal: 1980, 1990, and 2000. Figures made by author.

2。)季节性

另一个要考虑的是季节性。大多数气候学家喜欢按季节分解事物。季节分为春季(三月、四月、五月)、夏季(六月、七月、八月)、秋季(九月、十月、十一月)和冬季(十二月、一月、二月)。如果您还没有发现,winter 会要求将前一年的数据与下一年的数据进行分组。因此,我们 1981 年的第一个冬天需要 1980 年 12 月的数据,2010 年的最后一个冬天需要 2011 年 1 月和 2 月的数据。季节性对于确定一年中什么时候事件更有可能发生很有用。例如,如果我们检查从 1981 年到 2010 年所有秋季的飓风频率,我们会看到大多数发生在 9 月。我们也可以比较一段时间内的多个秋季。这让我们在不涉及天气模型或其他变量的情况下,更好地了解未来飓风预测的可变性和不确定性。

3。)地理

地理无疑会影响我们在气候学中观察到的模式类型。如果您正在检查亚利桑那州凤凰城和宾夕法尼亚州费城之间的干旱情况,您不会想要宣布凤凰城的干旱情况比费城严重,因为它的周、月或年降水量要少得多。这两个地方由于所处的位置,会经历非常不同的降水模式。费城比凤凰城潮湿得多,从局部对流活动和更大的迁移风暴系统中获得降水。如果要在两个地点之间进行比较,需要计算两个地点的被检查变量的正态分布,然后使用方差、标准差或标准误差等测量方法检查数据。

4。)时间序列,归属,&视窗

时间序列和归因可能是大多数气候学研究的主线。气候科学家想知道在观测记录中天气模式是如何变化的,他们也想知道是什么导致了这种变化。有大量的时间序列方法,但最常用的是拟合数据的回归线,以创建一个方程,显示随着时间的变化量。问题是气候数据通常不是高斯分布的,需要转换或者使用其他非参数方法。这是“使用不假设数据是正常的技术”的行话。归因技术可以有多种形式,但最常用的是相关性分析。正相关意味着两个观察点很可能相关,而负相关意味着它们不太可能相关,并且当一个发生时,另一个不相关。中性相关意味着看不出两者之间有任何关系。窗口是被分开来检查变化的时间段。因此,如果我们以 10 年为一个区间来考察我们的常态,我们可以观察到每个十年之间的明显差异。

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

Temperature (left) and Precipitation (Right) climate normal trends for each month. Notice how these compare to the decadal examinations below. Figures made by author.

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

Above: Temperature trends for the decades of 1980, 1990, and 2000. Below: Precipitation trends for the decades of 1980, 1990, and 2000. Temperature shows an increase over the three decades and precipitation shows a decrease. Figures made by author.

有了以上提供的所有信息,你现在可以练习一些基本的气候学了。随意钻研一些数据源,看看温度、降水、湿度,甚至是恶劣天气事件。通过这种方式,你可以随时了解你所在社区发生的事情。重要的是要注意到气候系统是复杂的,无论你发现的结果如何,都可能有更多的因素在起作用,而不仅仅是数据向你揭示的答案。前国防部长唐纳德·拉姆斯菲尔德说过一句话,在分析任何数据时,我总是喜欢记在心里,“有些事情我们知道我们知道。有已知的未知。也就是说,有些事情我们现在知道我们不知道。但也有不为人知的未知。有些事情我们不知道我们不知道。”

如何成为一名成功的首席数据官

原文:https://towardsdatascience.com/how-to-be-a-successful-chief-data-officer-e34b6ae56443?source=collection_archive---------10-----------------------

首席数据官为组织创造价值并引领数据驱动型转型的三种方式

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

Photo by Ahmer, To the Mountain Top (Source)

总结

首席数据官(CDO)是组织内数据的代言人,将数据视为战略性企业资产。CDO 的角色正在演变,在行业中获得了巨大的吸引力,它的成功对于推动组织的发展和创新是必不可少的。CDO 必须将自己的角色从防御型数据战略转变为进攻型数据战略,承担起变革推动者的角色,并负责为其组织创造价值。这是成功的秘诀。

挑战

尽管 CDO 的角色正在走向成熟,但许多 CDO 正在失败。Gartner 最近的一项研究预测,50%的 CDO 将因众多内部和外部因素而失败。大多数外部因素是不可控的,因此,了解成功的关键内部障碍非常重要。

角色的级别:头衔“首席”意味着该角色向高管层汇报,但许多 CDO 并不这样做。他们没有资历、决策权和政治影响力来推动企业数据战略。

角色清晰性和限制:CDO 角色的定义仍然没有一致性,角色的期望取决于组织的数据成熟度。这个问题的一个直接后果是对角色本身的限制。

缺乏资金和资源:没有将 CDO 的角色放在组织中足够高的位置,其专用预算影响了对工具、技术和人员的投资。

公司文化和变革阻力:CDO 是一个颠覆性的变革管理角色,不是每个人或每个公司都能很好地适应变革。最重要的是,公司中任何新的“首席”角色都会带来政治动态,根据角色的位置,它可能会给首席信息官和首席技术官带来政治问题。

建议

随着组织逐渐走向成熟,并希望由 CDO 来共同主导增长章程,CDO 应首先评估其组织的数据成熟度,然后通过以下方式为其组织创造价值:

数据管理:这是 CDO 角色的核心,涉及数据控制、数据质量、维护、保护和治理。将数据作为企业资产或公司货币进行管理,并建立对数据的信任是一个关键因素,其他一切都取决于此

数据丰富和支持:找到利用现有数据实现业务成果的方法,并用额外的内部和外部数据对其进行扩充。从小处着手,在每一次成功(和失败)中积累。确保整个组织内分析的数据可用性,包括可操作的见解人力资源和财务等职能部门的不足

数据货币化:确定从数据中获取收入的方法。创建创新章程,进行实验,构建原型,传播和实现数据科学、人工智能和机器学习等高级分析,并将数据产品开发为企业知识产权和竞争优势

评估

新商业和数字化转型的出现,使得组织越来越依赖数据,无论是从即时交易的角度,还是从制定长期发展战略的角度。许多没有接受这一新现实的组织已经失败并继续挣扎,例如 Sears。数据和分析正在引领市场差异化和以消费者为中心。随着组织开始意识到数据是他们的公司货币,需要将其作为资产进行管理,首席数据官的角色应运而生。

该评估的重点是那些在数字方面非本地的组织,以及那些没有从头开始最大限度地发挥数据和分析作为其商业模式关键驱动因素的潜力的组织,如亚马逊、谷歌、脸书、Airbnb 等。在这些组织中,CDO 的角色通常是不存在的,数据管理,以及用数据和分析推动商业价值是一个基本元素和日常业务现实的一部分。

首席数据官对不同的组织有不同的含义。在一些组织中,风险、合规性和法规可能是创建相对狭窄和深入关注的角色的背后。在其他组织中,它可能更广泛,包含企业数据和分析以及创收驱动因素,或者它可能是对业务模式中断和推动创新需求的响应。从本质上讲,CDO 的角色必须与其数据战略的组织成熟度相关联。Gartner 从四个方面描述了 CDO 角色的演变:

CDO1.0 :专注于数据管理

CDO2.0 :开始拥抱分析

CDO3.0 : Led 数字化改造

CDO4.0 :以数据产品为重点的货币化

随着数据战略的发展,分析也在不断发展。根据 Thomas Davenport 进行的研究,分析经历了以下发展阶段:

分析 1.0 :传统商业智能时代

分析 2.0 :大数据时代

分析 3.0 :面向快速经济的数据丰富产品时代

分析 4.0 :认知消费者控制的数据时代

这给 CDO 带来了一个挑战:从哪里开始,关注哪里?CDO 的角色也是一个跨职能的变革管理角色,它从组织调整和政治角度创造了自己的内部挑战。事实上,Gartner 预测约有 50%的 CDO 会倒闭。在 Gartner 的 2017 年 CDO 调查中,文化惯性和数据素养被报告为缺乏成功的首要原因。

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

这一评估与新 Vantage 合作伙伴进行的研究非常一致,该研究旨在确定业务采用分析的障碍。

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

Source: New Vantage Partner (2019)

CDO 进气管道中的典型一天包括:

●营销部门对消费者总体水平的营销活动绩效报告的需求

●销售人员说这些数字是错误的,不可信

●首席财务官表示,向他们报告了多个版本的 topline KPIs,他们需要确定哪个版本是正确的

●商业智能团队表示他们没有足够的资源和工具

● CTO 说他们已经决定将数据从内部系统迁移到云中

似乎立即解决这些问题应该是 CDO 的重点,但这是错误的做法,因为这只会加剧围绕这一重点的关切。许多战术工作可以由现有的数据团队采用敏捷或老虎团队的方法来完成,但 CDO 必须专注于建立功能的战略愿景,并获得企业范围的认可。

首先,CDO 必须承担起变革推动者的角色,并理解这是一项跨职能的责任,需要组织能力来建立联盟和伙伴关系。了解组织如何运作至关重要。这应导致创建一个基于文化并与企业使命相联系的职能愿景。

接下来,CDO 必须开发一种组织结构,这种结构旨在通过一种跨越业务单位中的多个层级的参与模式来推动采用。CDO 应该根据变革的速度和组织的政治环境来评估集中型、分散型和混合型组织结构——建立信任和协作比建立帝国更好。

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

Copyright: Ahmer Inam

CDO 也应该是以人为中心的设计、设计冲刺和敏捷方法的支持者,并创建以领域专家或业务单位用户为中心的多学科敏捷团队。这使得采用成为从发现和设计阶段向前的计划的一部分。领导这些敏捷团队的一个重要角色应该是能够用数据和策略语言进行有效沟通的数据翻译者/传播者。

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

Copyright: Ahmer Inam

这里要考虑的一个关键因素是 CDO 想要领导的变革程度以及他们想要前进的速度。这些雄心应该与组织对变革的准备和 CEO 的支持相匹配。来自 Standish Group 的混沌报告显示,从大型计划开始有更高的失败可能性。

识别并专注于可解决的问题。不要一开始就野心太大,先把基础打好。平衡潜在的长期计划和短期项目,并尽早和经常地交付组件,提高成功率和价值。CDO 应该以价值而不是数量来衡量他们组织的生产力和成功。在向企业领导人讲述透明的价值驱动的故事中磨练出来的沟通策略将逐步在组织中建立声誉和信任。

解决组织战略的这些基本问题将导致 CDO 组织章程的制定,并为组织的成功奠定基础。

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

Copyright: Ahmer Inam

现在,我们来探讨一下 CDO 为其组织创造价值的三种方式。

建议 1:数据管理

许多 CDO 组织都是从这个领域(数据运营)开始的。这是 CDO 的核心责任领域,必须如此管理。没有掌握的、精心整理的、良好治理的和安全的数据,其他一切都是空谈。这不仅仅是一个维持的领域,也是一个将继续挑战 CDO 组织的创新领域。例如,确定如何最好地存储和检索高维高基数纵向时间序列数据,或者在 GDPR 时代掌握消费者数据,以有效地推动消费者参与战略。CDO 必须关注的一些价值驱动因素:

●将企业数据作为资产进行保护,并管理风险和合规性

●利用先进的治理原则减少敏感数据的暴露

●单一真相来源与多个真相来源的策略

●数据架构和系统的发展,以保持领先于市场的步伐

●持续评估和应用精益数据运营方法,以较低的成本提供高价值

●建立高标准的数据质量,消除“垃圾进垃圾出”的风险

建议 2:数据丰富和支持

CDO 必须对现有数据进行全面评估,对它们进行编目,并创建元数据。这将有助于最终用户更好地理解数据,也可以用来培养组织的数据素养。然后,探索组织利用现有数据还能做什么和做多少。从获得“易得之果”开始,并以此为基础。继续评估现有数据中的差距,并利用外部来源和合作伙伴进行补充和扩充。随着现有数据被用来推动组织价值,它将缓解对数据扩充和丰富策略的额外资金的请求。此外,使跨业务部门的数据访问民主化,以赢得更多支持者。向人力资源和财务等数据匮乏的组织表达爱意,并赢得这些强大业务职能部门的支持,因为他们拥有资源和预算方面的关键决策。

采取一种渐进的方法来逐步开发一个“洞察系统”,该系统必须集成数据孤岛,并作为一个干净的、治理的、扩充的数据系统,该系统将继续推动组织的价值。使用财务和销售数据来创建仪表板,以衡量对交付给组织的顶线 KPI 的影响。

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

Source: Forrester

建议 3:数据货币化

数据货币化本质上是数据丰富、利用和支持的延伸。CDO 必须专注于在现有流程和职能之外寻找新的收入和创收机会。这将需要挑战现有的商业模式,并通过宣传来获得组织盟友,以推动创新,并从项目导向转向产品导向。CDO 必须为产品创新创造空间,无论是在其组织内部还是与其他互补组织合作

●使组织的思维模式从数据是业务的副产品转变为 it 具有内在的货币价值:将数据视为组织的货币

●在当前项目之外增加关注点,以增加现有收入或降低成本

●利用数据产品确定新的收入来源,例如,商家服务提供商可以通过 SaaS 洞察门户向其商业客户授权聚合洞察

●在数据和分析领域之外进行思考,并将其视为创新练习。以人为中心的设计为先导,识别潜在的有价值的想法,将其原型化,无情地迭代、测试和学习,并在价值驱动因素确立后扩大规模。以下框架可用于建立以人为中心的产品开发生命周期(PDLC)流程

●不要一个人去争取。作为合作伙伴,带着战略财务、公司战略和其他高管一起踏上旅程

●确定拓展分析边界的机会,并将基于人工智能和机器学习的知识产权作为竞争优势

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

Copyright: Ahmer Inam

结论

使用此处规定的框架来处理首席数据官的角色,可以让 CDO 率先在一个安全且治理良好的环境中提供来自组织内外的最佳数据。这将推动组织的价值,并建立一个成功的和创新的价值驱动的 CDO 组织。

参考文献

[1] J. Heizenberg,A. Duncan,设计有效的数据和分析组织时要避免的 5 个陷阱 (2018),Gartner Research

[2] R. Bean,T. Davenport,大数据和人工智能高管调查 (2019),新 Vantage Partners

[3] M. Faria, Gartner 研究委员会任命首席数据官 (2019),Gartner 研究委员会

[4] C. Pettey,Gartner 首席数据官调查的 3 大要点 (2018) Gartner Research

[5] J. Bennett,为什么只有一半的 CDO 做好了成功的准备 (2016),Gartner Research

[6]斯坦迪什集团国际有限公司,混乱报告 (2015)

[7] M.Teerlink,B. Gow,K.Banerjee,大数据和分析的新英雄 (2014),IBM 商业价值研究所

[8] L. DalleMule,T. Davenport,你的数据战略是什么 (2017),《哈佛商业评论》

[9] T .达文波特,分析的四个时代 (2015),分析前沿会议

[10] S. Soares,《首席数据官数据治理手册》 (2014),MC 出版社

[11] C .卡鲁泽斯,p .杰克森,首席数据官的剧本 (2018),刻面出版

[12] D. Laney,信息经济学:如何将信息货币化、管理和衡量为竞争优势的资产 (2017),Routledge

[13] B. Evelson,洞察系统:下一代商业智能 (2015),Forrester

[14] A. Inam,B. Franks,以人为中心的变革推动分析采用 (2019),国际分析研究所

[15] A. Inam,B. O’Neill,以人为中心的设计如何增加对数据科学计划、产品和解决方案的参与 (2019),体验数据播客

[16] A. Inam,A. Hartsoe,实现客户终身价值(CLV) (2019),客户资产加速器

[17] A. Inam,P. Capon,播客#40 (2019),创新社区

如何成为一个成功的投资者:用 Python 进行简单的投资组合分析

原文:https://towardsdatascience.com/how-to-be-a-successful-investor-simple-portfolio-analysis-with-python-7b66fc90fa68?source=collection_archive---------9-----------------------

阅读这篇文章是一项值得的投资

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

It’s amazing what you can do with this

你知道你去的那个地方,在那里你会投入大量的金钱,放弃四年(或更长)的宝贵时间,作为交换,你可以和一群你从未见过的同龄人一起住在一个狭小的空间(你也必须付钱),参加一系列聚会,你可以坐在那里看老年人说话,在白板上写东西(或使用 PowerPoint), 度过许多不眠之夜,了解最起码的营养是什么,所有这些都是为了得到一张小纸片或电子文档?

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

Feels bad…

我是不是不小心给你带来了生存危机?学院/大学是实际回报不固定的投资的完美例子。远非如此。事实上,投资的回报几乎完全取决于学生投入的精力和时间。

这就是投资的全部。它只是简单地放弃一些东西,希望一段时间后你会得到一些东西回来。在金融界,放弃金钱是希望你能得到更多的回报。这个非常简单的概念推动了商业和整个经济的大部分发展。银行不断发放贷款和/或接受贷款。为什么有人会给我一堆钱,除非他们知道他们会拿回来,再加上更多?

散户投资者(为自己投资的人,而不是像专业投资者那样的公司)投资的一种相当常见的方式是将他们的钱存入储蓄账户。他们投入一些钱,然后随着时间的推移,他们的钱的利率复合,然后最终当他们拿回他们的钱时,它会略有增长。

这样做的问题是你的钱增长太慢。还有很多很多其他的投资方式和投资对象。快速定义,你投资的那些东西叫做资产。资产可以是:股票、债券、短期国库券、储蓄账户,任何最终能为你赚钱的东西。如果你想最大化你的回报,你需要有一个计划,考虑到你将投资的所有资产,以及每种资产你将投资多少。一旦你列出了你所有的资产和你的权重,它们是你投资于单个资产的总资金的百分比,你就得到你的投资组合。

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

Just like mixing ingredients for cooking, you want the best mix for your delicious investment portfolio

举个简单的例子,假设 Amber 有 100 美元是她在当地地铁工作赚来的。她想用这笔钱投资,这样她会得到一些好的回报。她决定将一些钱存入储蓄账户,一些钱用于购买股票。她决定将 40 美元或 40%存入利息为 3%的储蓄账户。她用剩下的 60 美元,即 60%,购买了埃克森美孚公司(XOM)的股票。一年后,她的 100 美元变成了 107 美元。那就是 7%的回报率。这可能看起来很小,但是想象一下,如果 Amber 不投资 100 美元,而是投资 100,000 美元?!回报率是一样的,但实际收益是巨大的!一年后,安珀将有 107,000 美元。如果 Amber 在接下来的五年里将她所有的收益进行再投资,她可能会净赚超过 15 万美元!如果她在接下来的 15 年里一直这样做呢?那就超过了 $30 万(顺便说一句,这都是假设安珀没有把任何额外的钱投入她的投资组合,只是把她的收益再投资。)

既然我已经激起了你的兴趣,让我们来看看使用 Python 寻找最优投资组合的简单方法。

重要声明:接下来的大部分内容将是高度技术性的,所以如果有你不理解的术语和概念,请参考底部的参考资料部分。此外,本文的主要目的是提供投资组合分析的入口,而不是提供实际的投资建议,所以请不要将这些技术用于自己的投资决策。

数据

让我们首先设置下载股票数据来计算我们需要的重要参数:平均收益和方差。我们将使用 pandas 自带的数据阅读器库从 Yahoo Finance 获取股票数据。

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

让我们通过抓取特斯拉上的一些股票数据来确保该库能够工作。

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

现在我们已经建立了如何收集一些数据,让我们得到一些其他公司的股票。

现在让我们检查一下,看看我们是否有必要的数据。

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

让我们继续前进!

基于历史数据计算参数

现在我们有了历史数据,我们可以计算好的东西。

首先,我们从对数收益开始。这些是每天股票价格的百分比变化。

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

现在我们有了百分比变化,我们可以计算每项资产的平均日收益和协方差矩阵。为了确保每个人都清楚,协方差矩阵用于计算波动率。

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

现在我们有了所有这些信息,让我们创建一个假设的投资组合,看看我们得到什么回报和波动。如前所述,我们将对资产使用一些随机权重,看看我们的代码会给出什么。至于分配,我们就这么做吧:谷歌——50%,丰田——20%,可口可乐——20%,百事可乐——10%。

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

因此,我们看到,从我们的迷你投资组合中,我们的年回报率约为 16%,标准差约为 4%。鉴于这是基于 2010 年至 2019 年的数据,这些数字实际上相当不错。最酷的是,我们甚至还没有优化投资组合权重,因此还有很大的改进空间!

可视化数据

在我们真正开始优化我们的投资组合之前,让我们看看我们的股票(GOOGL,TM,KO,PEP)如何相互叠加。很多时候,可视化我们的数据使我们能够看到模式、趋势和见解,这在单独通过数据时会非常麻烦和困难。

这是我们得到的。你可以清楚地看到,一只股票通常回报越高,其波动性就越大。

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

优化我们的投资组合权重

现在让我们开始有趣的部分。让我们弄清楚(利用代码的力量)如何让我们的资产获得最大的回报。

我现在警告你,接下来你将看到的很多东西看起来就像一堆疯狂的编程奇才的胡言乱语。只要你遵循代码,理解所有东西并不是最重要的。

我们将首先定义一组函数,使这个过程变得容易得多。Python 有一个名为 scipy 的库,它有一个优化功能,使我们试图实现的东西变得相当简单。

第一个函数基本上完成了我们刚刚完成的工作,即在输入权重、平均回报和协方差矩阵后,计算投资组合回报和标准差。

我们将用来优化我们投资组合的一个指标叫做夏普比率,本质上是每单位波动率的平均回报率。从字面上来看,这意味着你所投入的风险能获得多少回报。

该函数根据前面提到的参数计算负夏普比率。我们计算负夏普比率的原因是因为 scipy 优化函数只能最小化。

在这里,我们实际上使用了 scipy 优化函数,通过优化我们刚刚定义的函数来找到最佳的投资组合权重。

当我们运行函数时,我们得到这些权重:[0.231,0,0.167,0.602]

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

There we go! We just got our optimal portfolio!

让我们试着在最小化波动的基础上优化我们的投资组合。

如果我们运行这个函数,我们得到权重:[0,0.783,0.217,0]

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

结论

在所有这些之后,我们可以看到在投资组合优化方面有很多东西要学。现实世界显然没有这么简单。对于我们的优化函数来说,输入和金融环境中最微小的变化都会极大地改变结果。尽管如此,这仍然是一个有趣的小练习。请随意尝试不同的技术和方法,看看什么适合你!

需要改进的地方

感谢您花时间通读这篇文章!请随意查看我的作品集网站我的 GitHub

1.使用不同的股票数据

还有许多其他股票可能以相对较低的风险获得巨大的回报,所以要勤奋地做研究,找到这些公司。

2.尝试不同的优化功能

您不仅仅局限于 scipy 优化功能。还有很多其他的选择,比如求解算法。

3.了解更多关于投资分析的信息

这篇文章仅仅触及了金融和投资分析的表面。想学多少就学多少,想探索多少就探索多少。无论你是想为华尔街公司投资,还是仅仅为个人投资,这里都有适合每个人的东西。

资源

  1. 收益和波动
  2. 风险承受能力
  3. 在无风险和风险资产之间分配
  4. 风险证券分配
  5. 夏普比率
  6. 基于夏普比率最大化的最优投资组合

如何对自己的神经网络自信

原文:https://towardsdatascience.com/how-to-be-confident-in-your-neural-network-confidence-10d10dcf8003?source=collection_archive---------17-----------------------

这些笔记基于关于现代神经网络校准的研究论文(郭等,2017。)

在 CIFAR100 等计算机视觉数据集上,ResNet 等非常大而深的模型远比 LeNet 等较老的模型准确。然而,尽管他们更擅长对图像进行分类,我们对他们自己的信心却不太有信心!

大多数用于分类的神经网络使用 softmax 作为最后一次激活:它产生每个目标(猫、狗、船等)的概率分布。).这些概率总计为 1。我们可以预期,如果对于给定的图像,我们的模型将 0.8 的分数与目标“船”相关联,我们的模型有 80%的把握这是正确的目标。

超过 100 个图像被检测为船,我们可以预期大约 80 个图像确实是真实的船,而剩余的 20 个是假阳性。

对于 LeNet 这样的浅层模型来说是正确的,但是随着新模型精度的提高**,它们的置信度变得与“真实置信度”不相关**。

这对深度神经网络不再有效:

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

Figure 1: Miscalibration in modern neural network [source]

如您所见,LeNet 等较老的网络准确度较低(55%),但它们的可信度实际上与准确度相当!ResNet 等现代网络具有更高的准确性(69%),但如图 1 所示,它们过于自信。

模型置信度和实际准确度之间的差异被称为校准错误

为什么它很重要

除了学院中使用的玩具数据集,了解我们的模型有多少可信度也是有用的。

想象一下,我们有一个预测欺诈的模型。我们希望根据模型置信度将某个交易标记为可疑,因为它是一个欺诈。我们可以明确地计算出验证集的最佳阈值,然后超过该阈值的所有置信度都将被标记为欺诈。然而,这个计算的阈值可以是 0.2 或 0.9,但是对人类来说可能更有意义。

没有错误校准的模型将有助于用户更好地解释预测。

为什么会这样

作者从经验上探索了现代网络中这种失调的原因。

他们用预期校准误差 (ECE)来测量误校准:置信度和准确度之间的平均差值。这个指标应该最小化。

更高的容量和交叉熵

错误校准的最可解释的原因是容量的增加和交叉熵损失。

模型容量可以被看作是一个模型可以记忆多少的度量。由于容量无限,该模型可以简单地记住整个训练数据集。必须在低容量和高容量之间进行权衡。如果太低,模型将无法学习数据的基本特征。如果它太高,模型将学习太多和过度拟合,而不是一般化。实际上,理解就是压缩:通过留下足够少的容量,模型必须挑选出最有代表性的特征(非常类似于 PCA 的工作方式),然后将更好地概括(但是容量太少&将不会发生学习!).

ResNet 之类的新体系结构比老的 LeNet 具有更大的容量(前者 25M 参数,后者 20k 参数)。这种高容量导致了更好的准确性:训练集几乎可以被记住。

此外,模型优化了交叉熵损失,这迫使他们正确并且非常自信。更高的容量有助于降低交叉熵损失,从而鼓励深度神经网络过于自信。正如您在图 1 中看到的,新模型现在过于自信了。

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

Figure 2: More capacity (in depth or width) increases the miscalibration [source]

神秘的批量标准化

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

Figure 3: Batch Normalization increases the miscalibration. [source]

批量归一化归一化网络中的张量。这大大提高了训练收敛&的最终表现。为什么它能如此有效还不太清楚(见更多)。

作者凭经验评论说,使用批量标准化增加了错误校准,但找不到确切的原因。

这种方法在训练中的帮助会促进过度自信吗?

正规化

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

Figure 4: More regularization decreases the miscalibration. [source]

重量衰减是一种额外的损失,它损害了重量的 L2 标准。权重越大,标准越大,损失也就越大。通过约束权重的大小,它避免了模型寻找可能使其过度拟合的极端权重值。

作者发现,正如预期的那样,增加正则化会降低模型精度。

然而,它也减少了误校准!答案还是因为正则化避免了过度拟合&从而避免了过度自信。

如何修复校准错误

这篇文章的标题,“如何对你的神经网络自信”,让你相信你会发现如何减少错误校准。

您不会减少容量、取消批处理规范化并增加正则化:您会过多地损害您宝贵的准确性。

幸运的是,有后处理解决方案。作者描述了几种,但最有效也是最简单的一种:温度标度

不是像这样计算 softmax:

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

所有 logits(最终激活前的值,此处为 softmax)除以相同的温度值:

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

类似( Hinton 等人,2015。),这个温度软化了概率

极端概率(高置信度)比较小概率(低置信度)减少得更多。作者通过最小化验证集上的预期校准误差来找到最佳温度。

校准错误几乎完全得到纠正:

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

Figure 5: Temperature Scaling fixes the miscalibration. [source]

温度缩放的另一个很酷的特性:因为所有的 logits 都除以相同的值,并且 softmax 是一个单调函数,精度保持不变!

原载于 2019 年 5 月 29 日https://arthurdouillard.com

如何少犯错误

原文:https://towardsdatascience.com/how-to-be-less-wrong-5d6632a08f?source=collection_archive---------17-----------------------

用有限数据预测未来的贝叶斯指南

柏林墙还能屹立多久?这就是 j .理查德·戈特 1969 年访问德国时的想法。

仔细想想,这是一个棘手的问题,因为没有太多关于柏林墙寿命的数据(事实上,柏林墙是 T2 唯一的数据点)。那么,在我们几乎一无所知的情况下,如何处理这样一个问题呢?

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

Remains of the Berlin Wall. (Source: Pixabay)

戈特现在是普林斯顿大学的天体物理学教授,他是这样想的:他在那一年的某一天看到长城并没有什么特别的。如果你把这堵墙的整个生命周期分成四个等长的部分,那么有 50%的可能性他会在中间的两个部分到达。这反过来又转化为对墙应该保留多长时间的估计:到目前为止它的寿命的三分之一(如果他碰巧在两个中间部分的末尾访问),到目前为止它的寿命的三倍(如果他碰巧在两个中间部分的开始访问)。

鉴于当时的长城在 1969 年已经建了 8 年,他得出结论说,有 50%的把握,它还能再用 3 到 24 年。这堵墙又持续了 20 年。

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

There is a 50% chance that Gott’s visit falls within the middle two segments of the Wall’s existence. (Source)

哥白尼原理:我们并不特别

戈特的推理是,他没有在任何特殊的时刻拜访长城,这实际上是更广泛的 哥白尼原理 的应用,该原理指出,我们在宇宙历史中既不占据特殊的位置,也不存在于特殊的时间。地球不是一个特别的地方,我们的太阳系或银河系也不是。2019 年并不是一个特别的活着的时间。

Gott 基于哥白尼原理的计算至少可以帮助我们在完全不知情的情况下对事件发生的时间做出估计。用它来估计各种世界大事可能是一项有趣的练习:

  • 朝鲜有 50%的可能性作为一个孤立的国家再存在 24 到 213 年。
  • 英国退出欧盟谈判有 50%的可能性会再持续 8 个月到 6 年。
  • 欧元有 50%的可能性会再存在 7 到 60 年。
  • 有 50%的可能性人类物种会再存在 7 万到 60 万年。

公平地说,戈特并不是第一个运用这种推理方式根据有限的数据做出预测的人。考虑一下 德军坦克问题 :二战期间,盟军试图根据目前缴获的坦克序列号来估算德军坦克总数。在极端的情况下,一辆缴获的坦克至少可以提供总共有多少辆坦克的线索。如果它的序列号是 60,那么有 50%的可能性坦克的总数在 80 到 240 之间。实际上,随着更多的坦克被俘获,这个估计会变得更准确。

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

Earth, as seen from Jupiter. (Nasa)

戈特基于哥白尼原理的计算实际上是应用贝叶斯定律的结果,该定律更广泛地告诉我们如何在面对新信息时更新我们的概率估计。Gott 展示了如何根据一个单一数据点更新我们的估计。然而,在大多数情况下,我们仅仅从我们的生活经验中获得了关于现象预期结果的额外信息,这些额外信息使我们的预测更加准确。

先验塑造了我们的预测

在我们的世界中,大致有两种不同类型的观察:围绕自然值聚集的事物,以及不围绕自然值聚集的事物。我们称前者为高斯分布,后者为幂律分布。人类寿命是高斯分布的一个例子,人类体重、卡路里摄入量、每晚睡眠时间、电影长度、老鼠尾巴长度等等也是如此。

以人类的寿命为例。我们对寿命有很好的预期:例如,在美国,平均寿命约为 78 岁,分布大致呈高斯型。用统计学术语来说,这个额外的信息是我们的先于

由于我们的先验,我们可以根据某人的年龄来更新他们剩余寿命的概率,这比用哥白尼原理更准确——我们有额外的信息。例如,社会保障局每年都会更新这一计算方法,保险公司也是如此:根据他们的表格,7 岁儿童的预期剩余寿命约为 70 岁,而 70 岁老人的预期剩余寿命约为 14 岁。这是高斯先验的一个基本结果:你活得越久,你预期的额外寿命就越短。

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

Source: Unsplash

幂律

并非世界上的一切都遵循高斯分布。当观察值在许多数量级上发生变化时,我们很可能在处理一种幂律分布——例如城市人口、图书销售、电影票房、人们的财富和收入。

以电影票房为例。2018 年最成功的电影*【黑豹】,拍出了大约 7 亿美元,而亿万富翁男孩俱乐部*,表现最差的电影之一,拍出了微薄的 600 美元——这是 6 个数量级的差距!换句话说,幂律分布没有自然尺度:它们是无尺度分布。电影可以赚几亿或几亿美元。

利用贝叶斯定律,我们可以再一次估计我们期望一个观察结果在哪里结束,给定我们今天看到它的地方,给定幂律先验。事实证明,幂律先验隐含着一个乘法预测规则:将目前观察到的量乘以一个常数因子,这就是预期的最终结果。例如,对于电影票房,这个倍数大约是 1.4:鉴于一部电影已经赚了 1000 万美元,它很可能会达到 1400 万美元(对于*亿万富翁男孩俱乐部,*前景相当严峻)。乘法法则是幂律无尺度性质的直接结果,在幂律中,唯一能给我们尺度感的是我们所拥有的单一观察。

因此,Gott 的柏林墙预测——它将比它已经存在的时间长三分之一到三倍——类似于具有幂律先验的贝叶斯预测,不同之处在于乘法因子未知。由于缺乏数据,戈特的柏林墙计算更加无知。

因此,高斯先验和幂律先验之间最重要的区别是:有了高斯先验,事情持续的时间越长,我们期望它持续的时间就越短。有了幂律先验,事情持续的时间越长,我们期望它持续的时间就越长。

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

Source: Unsplash

生活就是学习的过程

无论我们承认与否,我们都会根据我们每天对世界的观察,含蓄地了解我们一生中世界上各种现象的先验知识。我们了解到人们的身高、体重和寿命集中在一个典型值上,而城市人口、电影票房和财富却没有。我们最终都是贝叶斯思想家。

“生活是一所概率学校.”—沃尔特·巴杰特

以呼叫中心等待时间为例:研究人员 Tom Griffith 和 Josh Tenenbaum 根据已经等待的时间调查了人们认为他们的总等待时间。通过将他们的答案拟合到不同的分布,他们了解到,平均而言,人们对等待时间的预期是幂律的,乘法参数约为 1.3:在等待 5 分钟后,他们预计总共会等待 7 分钟。等了 50 分钟后,他们预计总共要等 67 分钟。

前科很重要

在《T2:T3 前的生存算法》一书中,作者布莱恩·克里斯蒂安和汤姆·格里菲斯讲述了哈佛生物学家史蒂芬·杰·古尔德的悲惨故事,他在 1982 年被诊断出患有一种致命的癌症。通过阅读医学文献,古尔德了解到他在这个阶段的平均寿命只有 8 个月。

然而,他推断,这个统计数字并没有说明任何关于预期寿命的 T4 分布。如果是高斯型的,那么他的预期寿命大约是 8 个月,越接近这一点,预期寿命就越短。

另一方面,如果这是一个幂律,他活得越久,他就能活得越久!古尔德发现这种分布实际上是严重偏斜的(更像是幂律),并在确诊后又活了 20 年。

前科很重要:我们的前科越多,我们的预测就越准确。

如何在迈向数据科学的旅程中保持灵感

原文:https://towardsdatascience.com/how-to-be-motivated-in-learning-data-science-d459811b4aab?source=collection_archive---------17-----------------------

以下是保持学习数据科学积极性的 7 个技巧。

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

Photo by Kristopher Roller on Unsplash

由于数据科学是一个相对较新的领域,如果没有正确的心态和方向,学习数据科学可能会令人疲惫不堪。此外,仅仅通过使用 Scikit-learn 掌握数据可视化或了解所有机器学习术语,你不会立即成为数据科学家。这需要几个月甚至几年的实践和对不完美数据的亲身实验。它是软技能(黑客技能)和硬技能(沟通)的融合。

也就是说,学习它将是你一生中最好的投资之一。难学甚至更难掌握的事实使得这个领域在未来的岁月里非常有价值。同样值得理解的是,你不能只学习数据科学,因为它是许多技能的组合,你所能做的就是提高这些技能。

现在,在我进入改变生活的建议——获得动力和燃烧激情之前,我相信如果你心满意足地发现自己需要学习数据科学的动力,那么你可能根本就不应该走这条路。一个真正热爱数据,热爱用黑客技巧和数学分析事物的个体,应该是愿意不断学习数据科学的。每一天都应该被视为学习的机会。

如果你经常发现自己需要学习数据科学的动力,那么你就不应该一开始就追求它。

尽管如此,这里有 7 种方法可以点燃你内心的火,让你开始感到被点燃了去实现你的目标。突出对你来说很重要的想法,仔细思考,花时间思考,好好阅读。

1.不要让金钱成为你的动力

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

Photo by Alexander Mils on Unsplash

首先,金钱不应该是你的首要目标或动机。我这么说是因为你可能已经决定进入数据科学领域,因为那里有丰厚的薪水和难以置信的高需求。据 Glassdoor 报道,数据科学家的平均工资为 120495 美元/年,最高为 163000 美元/年。

“钱通常是被吸引来的,而不是被追求来的。”—吉米·罗恩

尽管社会传播着这样一种观点,即获得大学学位的动力是受雇于一家有声望的公司,有一份赚钱的工作,以便谋生和偿还债务,等等。即便如此,我认为金钱不应该成为一个人进入数据科学或任何工作的动机。

在我看来,这是因为从长远来看,金钱并不能给你带来动力。当然,你可能对你在优步或脸书的新数据科学工作充满热情,而且你在财务上做得很好,但如果你正在做的事情不是你喜欢的,迟早你会意识到,当钱可以用来实现上帝赋予你的目的和使命时,它不值得你宝贵的生命。同样,许多数据科学家正在离开他们的工作岗位,主要是因为他们的期望与现实不符。所以好好想想,反复思考这个问题。

2.设定你自己的目标

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

Photo by Estée Janssens on Unsplash

目标是你发展和成功的基石。没有它们,就像跑一场没有终点线的比赛。没有目标意味着你的生活没有意义。所以很明显,有目标是很重要的。

即使你已经有了目标,挑战也在于确保这些目标是你独有的,而且只属于你一个人。永远不要根据别人说的或做的来设定目标。它应该符合你对生活的愿景,而且是没人能说服你放弃的事情。

“如果你想快乐,就设定一个目标,这个目标能控制你的思想,释放你的能量,激发你的希望。”—安德鲁·卡内基

将你的目标分为短期和长期也是很好的,这样你就可以有所作为。短期目标可以为你提供短暂的推动力,驱使你努力实现长期目标。

假设你的目标是获得一份与数据科学相关的工作。短期目标是学习基本的 Python 和与数据科学家建立联系,长期目标是在数据科学领域找到一份工作,成为一名全栈数据科学家。

一个建议是试试概念应用,它有很棒的模板,可以用来设定目标、待办事项、笔记等等。这将是一个非常有用的反思工具,提醒你关于你的目标和日常反思,无论你是否朝着你的目标努力。现在就试用!

3.用创造性的视觉想象结果

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

Photo by Caleb Jones on Unsplash

创造性想象描绘了一种方法,利用你的想象力来想象你想要的结果,并为你构建一幅精神画面来重新连接你的大脑。这让你的头脑有努力的目标,就像灯塔用它的光束指引船只驶向安全。

它是许多成功人士自觉或不自觉使用的一个不可或缺的工具,让他们高度专注于实现自己的梦想和抱负。通过想象自己成功,他们实际上吸引了成功。

“在做之前想象一下你想做什么。可视化是如此强大,当你知道你想要什么,你就会得到它。”

——奥黛丽·弗莱克

如果你决定进入数据科学,那么你必须有一份理想的工作或公司,GAFA 公司——谷歌、苹果、脸书和亚马逊是许多数据爱好者渴望进入的知名科技公司。

举例来说,如果你的梦想是成为一名首席数据科学家,想象自己是 GAFA 公司的一员,管理一个由数据科学家、ML 工程师和大数据专家组成的团队,规划数据项目,建立预测模型等。

现在试试吧,去吧。闭上眼睛,想象自己处于最后阶段,想象每一个过程的细节。每天花些时间这样做,甚至你最疯狂的梦想也可能实现。

4.驾驭习惯的力量

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

Photo by Drew Beamer on Unsplash

T 尽管习惯被认为是不好的,不利于一个人的生活,比如吸烟,甚至是在 Instagram 上随意滚动,但习惯也可以是好的。专业人士将习惯视为给他们的生活提供结构的东西,并关注他们生活中的某些基本惯例。例如,比尔·盖茨读书很多,事实上,他一年读 50 本书。通过使阅读成为一种习惯,它已经成为他的第二天性。他强烈的好奇心和求知欲培养了他阅读的习惯,这造就了他今天的成就。

在查尔斯·杜希格的《习惯的力量》一书中,他提到成功的关键在于理解习惯是如何工作的。所有爬上成功阶梯的人都到达了顶端,因为他们专注于塑造他们生活的潜在模式,并建立了培养成功的习惯。

“冠军不做不平凡的事。他们做普通的事情,但他们不加思考地做,快得让另一个团队反应不过来。他们遵循他们已经学会的习惯。”查尔斯·杜希格

在学习阶段,你应该养成无数的习惯,以便更好地为未来做准备。首先,收集一份来自可靠来源的 A 级内容的资源列表,这样,你就有一个独特的渠道来跟上数据科学每日的最新消息,并跳过互联网上的所有垃圾。

接下来,养成问很多很多问题的习惯。作为一名数据科学家,你的工作就是做一名科学家,对数据做出假设。关键在于提出正确的问题,并据此做出理想的决策。此外,为了管理复杂性并使您的数据科学项目更不容易出错,您应该养成某些编码习惯——例如保持代码整洁和使用函数。

5.极其乐观

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

Photo by Allie Smith on Unsplash

O 乐观主义被定义为一种倾向于事物积极一面的精神优势。乐观主义者对事物有更高的期望,梦想更大,而悲观主义者(相反)通常期望较低,并认为一切都是最坏的。因此,乐观主义者更快乐,更健康,情商也更高。

“悲观者在每个机会中都看到困难;乐观主义者在每一个困难中都看到机遇。”温斯顿·丘吉尔

很明显,我们的思想对我们的行为和态度有很大的影响。如果你一直面对障碍和路障,你很容易失去自信。如果你让你的失败有害地影响你的想法,你会开始认为其他人都比你更有资格,你只是一个模仿者。这就是专家所说的冒名顶替综合症。

简而言之,当你对自己的成功有不确定性,并且永远害怕被暴露为“伪装者”时,就会出现冒名顶替综合症。这种综合症在数据科学领域非常普遍,原因有很多,但主要是因为 ML 工具的激增和数据科学定义不明确的事实。正如亚历克斯·兰姆所解释的,

这些工具的真相是,它们中的大多数都有很大的重叠。你不需要把它们都冷冻起来。但这不会阻止你的感觉。

应对这种不断把你推下去的综合征可能很难,但乐观地看,你会以不同的方式看待这个世界,并意识到有很多人和你一样面临这种综合征。不要让消极情绪征服你,要意识到即使是最好的人也会跌倒。相信自己,在任何情况下都保持乐观。

6.让你周围都是专家

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

Photo by Product School on Unsplash

你可能听说过这句话“你周围的人,你会成为什么样的人。”之前。生活给我们设置了许多障碍,在通往成功的道路上,总会有人质疑你的信念,挑战你。还有什么更好的方法能让你重新站起来,和那些听你说话并推动你前进的人一起前进。

不要成为房间里最聪明的人也很重要,因为那只会限制你真正的潜力,阻碍你成长和个人发展的空间。通过将聪明人包围在你周围,并与他们交换意见,你才能完全重新构建你对世界的框架,并提高你的期望

“你是和你相处时间最长的五个人中的平均水平。”—吉米·罗恩

为了让自己周围都是数据科学专家,你可以尝试在 LinkedIn、Twitter 等网站上与数据科学专家建立联系,因为在这个领域,联系是无价的。此外,参加聚会会议也是让自己置身于来自世界各地的专家之中的另一个好方法。这不仅会拓展你的思维,而且你会从他们的激情和能量中汲取营养,让你充满活力和热情,开始为你的目标和梦想而努力。

ODSC 东方 2020 由 ODSC -开放数据科学是 2020 年 4 月举行的最大的人工智能会议之一!不要错过!去那里,让你自己被人工智能中最大的名字包围。

7.查看大图

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

Photo by pine watt on Unsplash

放眼全局意味着对你的目标有一个总体的想法。在你的头脑中有一个大的图景是非常重要的,因为有时候你会在你的学习过程中走极端,偏离你最初的目标。你现在看到的有益的东西从长远来看未必有益。

学会看清大局。我们常常目光短浅,看不到大局,也看不到我们真正想要完成的目标。—罗伯特·奇克

一个看不到全局的例子是,你可能会沉迷于学习太多的 ML 工具,最终成为一个万事通,但没有一个是大师。虽然掌握 ML 工具的知识在数据科学中是必不可少的,但是您只需要一些重要的工具来完成您的工作。因此,从这个意义上来说,大局可能是在数据科学世界中找到自己的位置。

问自己这个问题:数据科学的哪一部分首先让你着迷?是在 it 的业务方面,您与领导者和投资者交流数据吗?或者是机器学习不可思议的潜力和无限的能力?如果什么都不懂,那就去争取全栈数据科学家的职位。

你想达到的目标是什么?你清单上的第一个?把它写下来,放在你每天都能看到的地方。确保它不是一个你可以在一天或几周内完成的目标,它必须是值得你每天为之奋斗的东西,是让你感动并在你内心燃烧的东西。有了这个,你就能走在自己定义的成功之路上。

摘要

  1. 不要让金钱成为你的动力
  2. 为你的生活设定独特的目标
  3. 用创造性的视觉想象结果
  4. 驾驭习惯的力量
  5. 异常乐观
  6. 和志同道合的人在一起
  7. 查看大图

感谢阅读,我希望这篇文章对你有深刻的见解,并激励你去实现你的激情。

查看我的文章《给数据科学初学者的可行建议》!

[## 给数据科学初学者的 5 条可行建议

这里是给进入数据科学的人的 5 个建议

towardsdatascience.com](/5-actionable-advice-for-data-science-beginners-50fd912aa2d6)

关注我在 LinkedIn 和 T2 Twitter 上的更新。

如何成为 Pythonic 式的,为什么你应该关心

原文:https://towardsdatascience.com/how-to-be-pythonic-and-why-you-should-care-188d63a5037e?source=collection_archive---------4-----------------------

提高 Python 软件质量的常用策略

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

Token photo of a Python for an article about [the other kind of] Python. Photo by Tyler B on Unsplash

蛇就是蛇,就是这样

我已经正式写了十几年的代码,最后 5 年是全职软件工程师,虽然我还有很多要学的(确切地说,是一辈子的学习!),在那段时间里,我已经见识了相当多的软件,并且(我敢说)极大地发展了我在该领域的技能。我仍然记得我写的第一批程序,晚上躺在床上回想我做程序员新手时的噩梦。虽然我永远无法逃脱过去的罪行(编写五重嵌套循环是最大的罪行),但也许我可以通过帮助其他新手学习一些最佳实践来编写更快、更干净、更好的代码,从而部分地救赎自己,即使只是轻微的救赎。

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

Photo by Rock’n Roll Monkey on Unsplash

蟒蛇——一种仿生蟒蛇?

与几乎所有编程语言一样,Python 社区接受了某些特定的风格和常规指导原则,以促进统一、可维护和简洁的应用程序,这些应用程序是按照该语言设计的方式编写的。这些指导方针从适当的变量、类和模块命名约定,到循环结构,甚至是包装代码行的适当方式。“Python”这个名字是用来描述任何遵循这些准则并利用 Python 独特功能的程序、函数或代码块的。

为什么所有这些都很重要?这个问题可以有多种解释,但是您应该关注的几个关键原因可以归结为代码的清晰性、效率和可信度。让我们进一步分析一下。

清楚

如果你想成为一名开发者,代码的清晰对你的成功至关重要。随着您在该领域的成长,您可能会在某个时候与其他人一起工作,这将需要同事阅读您的代码。如果你的代码写得很差,别人破译你的意图可能是一场噩梦,即使代码很短。从 r/badcode 子编辑中选取以下示例:

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

The definition of insanity

这个代码有用吗?没错。函数名描述了函数的用途吗?确实如此。如果您更改了函数名,是否很容易确定这段代码应该完成什么?如果不花一个小时分析它,可能不会。

正如我所知道的每一个开发新手(包括我自己)的情况一样,当涉及到代码时,有一种普遍持有的“它能工作——不要碰它”的心态。当我们可以写一些东西来解决我们的问题时,我们害怕对代码做任何事情,害怕我们会破坏一切并且无法再次修复它。

我鼓励任何开发人员尽早打破这种心态(这适用于所有语言)。即使你自己编写了糟糕的代码,一个星期,一个月,甚至一年后,你也很难再回头去看它,试图揭开它的神秘面纱。更糟糕的是,如果你自己都不能破译代码,你怎么能指望队友或合作者来揭开其中的含义呢?

通过按照语言设计的方式编写程序,开发人员自然会编写出看起来与同行相似的代码。这使得它易于理解,易于分享,易于更新。

效率

回到我在大学实习的时候,我在工作中遇到的一个实习生同事告诉我“不要费心去写已经用 Python 写好的东西,因为你不可能写出更好的东西。”虽然我最初对这种令人沮丧的想法感到沮丧,但我最终意识到他的说法有些道理。到目前为止,Python 已经存在了近三十年,并迅速成为全世界开发者最流行的语言之一。Python 还以包含大量库而闻名,这些库几乎可以做你想要或需要的任何事情。这些库和特性中的许多都见证了成千上万的成员在几年内创建更新,尽可能地从每一行代码中榨取尽可能多的性能。虽然我们当然欢迎您编写自己的最佳字符串比较函数,但您得到的结果可能不会比现有的结果更快,而且开发新函数所花的时间可能已经花在了您试图解决的实际问题上。一般来说,寻找一个内置函数或数据类型来实现你所寻找的。很有可能,这将是完成任务最快的方法。如果没有,检查是否有任何可以安装的库或包可以满足您的需要。如果你仍然没有解决方案,现在是时候创造自己的解决方案了!

可靠性

对于第一次学习如何用 Python 之外的语言编程的人来说,通常很清楚开发人员来自哪种语言。以下面这个问题为例:

  • 求 10 到 1000 之间所有数字的和

C(或 C++)开发人员可能会按照下面的思路写一些东西:

int a = 10;
int b = 1000;
int total_sum = 0;while (b >= a) {
    total_sum += a;
    a++;
}

对此的直接 Python 重写看起来非常相似:

a = 10
b = 1000
total_sum = 0while b >= a:
    total_sum += a
    a += 1

虽然上面的语句会产生预期的输出,但大多数 Python 开发人员会对这段代码不满,抱怨它不是 Python,没有利用该语言的强大功能。从头开始,你可以用 Pythonic 的方式来解决这个问题:

total_sum = sum(range(10, 1001))

这一行代码生成了与上面完全相同的结果(为了记录,我打算在代码中写1001,因为 Python 的range命令有一个包含的下限和一个不包含的上限,这意味着较低的数字将是循环的一部分,而较高的数字则不是)。如果您使用第一个例子编写 Python 代码,您作为 Python 开发人员的可信度将会下降,因为 Python 社区非常热衷于按照指南编写代码。这是另一个例子:

  • 确定特定字符串是否在数组中

对于大多数非 Python 开发人员来说,第一个解决方案可能是这样的:

#include <stdbool.h>
char * arr[] = {"apples", "oranges", "bananas", "grapes"};
char * s = "cherries";
bool found = false;
int len = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < len; i++) {
    if (!strcmp(arr[i], s)) {
        found = true;
    }
}

和以前一样,直接的 Python 翻译应该是:

arr = ["apples", "oranges", "bananas", "grapes"]
s = "cherries"
found = False
size = len(arr)for i in range(0, size):
    if arr[i] == s:
        found = True

我相信你已经猜到了,用 Python 写这个有一个更简单的方法:

arr = ["apples", "oranges", "bananas", "grapes"]
found = "cherries" in arr

无论你选择上面的哪种方法,found最终总会评估到False(或false)。然而,当谈到 Pythonic 代码时,最后一个选择显然是冠军。它简明易懂。即使那些从未读过 Python(或任何相关代码)的人也有机会理解最后一个代码块的意图,这与前两个不同。

最后一个例子是我最喜欢的 Python 工具之一,列表理解。这种技术允许你在一个列表中嵌入一个循环来创建一个新的列表。请考虑以下情况:

  • 将数组中每个偶数的值加倍

首先,这里是 C 代码:

int[] arr = { 1, 2, 3, 4, 5, 6 };
int length = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < length; i++) {
    if (arr[i] % 2 == 0) {
        arr[i] *= 2
    }
}

直接的 Python 翻译:

arr = [1, 2, 3, 4, 5, 6]
length = len(arr)for i in range(0, length):
    if arr[i] % 2 == 0:
        arr[i] *= 2

现在大蟒道:

arr = [1, 2, 3, 4, 5, 6]
arr = [x * 2 if x % 2 == 0 else x for x in arr]

如果你从未见过列表理解的实际应用,这可能看起来很滑稽。我发现从右向左看理解列表通常是最容易的。首先,它遍历列表中的每个元素for x in arr,然后检查元素是否为偶数if x % 2 == 0。如果是这样,它将数字加倍x * 2,如果不是else x,则保持不变。无论元素最终是什么,它都会被追加到一个新的列表中。在我们的例子中,我们用新的列表覆盖了arr的原始值。

这些只是编写代码 Pythonic 化的几种常见方法。您可能已经注意到,所有这些例子都包含某种循环。虽然有许多方法可以编写 Pythonic 代码,但是一个很好的做法是问问自己是否真的需要一个循环,或者是否可以用一个惯用的替代方法来代替它。

如果您关心您在软件世界中的可信度,并且想自豪地称自己为 Python 开发人员,那么请确保您知道并在代码中使用这些适用的技术。

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

Photo by Carolyn V on Unsplash

叶老指引道

希望您现在理解了编写 Pythonic 代码的重要性。在这一点上,你可能想知道一些指导方针是什么,以及你如何能遵循它们。请允许我向您介绍一下 Python 增强提案#8 (PEP 8)。对于那些不熟悉 pep 的人来说,它们是由社区编写的提案,旨在改进 Python 的某些方面,从性能到新功能和文档。具体来说,第 8 个提议提供了关于样式指南和约定的建议。这是一个经常被引用的关于如何成为 Pythonic 的资源,如果你还没有读过,我强烈推荐你读一读。以下是我认为最重要的一些话题:

命名规格

命名约定对于任何语言都很重要,它提供了一种标识类型和对象的通用方法。以下是命名约定的简略版本:

  • **包/模块:**必须全小写。必要时可以使用下划线,但不鼓励使用。例如:package或者module.py
  • **类:**必须使用 CapWords。建议不要在名字中使用Class二字。例:class BasketballTeam:
  • **常量:**必须使用尖叫蛇格。例:API_URL = '...'
  • **函数/变量:**必须使用标准蛇盒。例如:home_team_points = ...或者def final_boxscore(...)
  • **函数/方法参数:**必须使用标准 snake case。例:home_team_name

注释的正确使用

注释是代码清晰的重要辅助。我通常建议在代码的任何部分上面添加注释,这些注释的目的对于其他人来说并不明显。一般来说,注释应该是完整的句子,位于代码块之上,用英语写。此外,建议使用文档字符串(或“文档字符串”)来记录函数的用途,以及描述输入和输出的类型、名称和描述(如果适用)。PEP 257 包含了大量关于如何使用文档字符串的信息。

将行换行到 79 个字符或更少

Python 开发中一个更有争议的话题与换行有关。PEP 8 要求每行代码少于或等于 79 个字符。一些嵌入式系统的屏幕尺寸有限,一行最多只能显示 80 个字符,如果更长的话,就需要很难看的代码包装。此外,如果某一行代码长达数百个字符,那么阅读起来会非常困难,因为该行中可能会丢失许多变量和函数调用。

虽然在大多数情况下这可能不是问题,但有时一行代码需要大量的空间,尤其是当它包含长变量名或复杂的列表理解时。解决这一问题的几种方法是,每次在函数调用中使用逗号时创建一个换行符。例如,替换

some_function(first_var, second_var, third_var, ... twelfth_var)

随着

some_function(first_var,
              second_var,
              third_var,
              ...
              twelfth_var)

上面的两个块将被完全相同地执行。而在括号(或元组)中,逗号后新行上的任何代码都将作为下一个参数包含在语句中。

Python 还允许使用反斜杠来分隔不包含在元组或其他类似对象中的代码。例如,替换

if first_boolean_variable == accepted_value and not second_boolean_variable:  # This is all one line
    print('Accepted')

随着

if first_boolean_variable == accepted_value and \
   not second_boolean_variable:  # This is a second line
    print('Accepted')

虽然这些改变会给你的程序增加额外的代码行,但它会变得更容易阅读,尤其是在一系列的显示类型和尺寸上。

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

Photo by Jared Rice on Unsplash

Python 的禅

另一个经常被引用的资源是 Python 的 Zen。以下短文是蒂姆·皮特斯写的 PEP 20 的唯一内容:

漂亮总比难看好。
明的比暗的好。
简单胜于复杂。
复杂总比复杂好。
扁平比嵌套好。
稀不如密。可读性很重要。特例不足以特殊到打破规则。
虽然实用性胜过纯粹性。错误永远不会悄无声息地过去。
除非明确消音。
面对暧昧,拒绝猜测的诱惑。应该有一种——最好只有一种——显而易见的方法。虽然这种方式一开始可能并不明显,除非你是荷兰人。
现在总比没有好。
虽然从来没有经常比现在*好。如果实现很难解释,这是个坏主意。如果实现很容易解释,这可能是个好主意。
名称空间是一个非常棒的想法——让我们多做一些吧!

虽然上面的几行是不言自明的,但最重要的主题可以用第七条来概括:“可读性很重要。”对我来说,这意味着任何 Python 开发人员,不管他或她的经验如何,都应该能够阅读和理解代码。Python 使用一种简单的语法,这种语法比几乎所有其他语言都更接近自然英语。因此,代码应该简单美观。用英语传达信息的最好方法是以简洁的方式表达。Python 也是如此。

不管你的代码要实现什么,永远记住 Python 的禅。如果您的代码不遵循这些原则,那么它就不是真正的 Pythonic 应用程序。

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

Every developer needs a set of useful tools. Photo by Cesar Carlevarino Aragon on Unsplash

编写 Pythonic 代码的工具

我们现在已经了解了为什么 python 代码很重要,一些关键原则是什么,以及一些 python 代码的例子。毕竟,是时候我们学习如何实际应用这些技术了。幸运的是,有几个工具可以用来检查我们的代码是否符合 Python 的指导方针。第一个工具,pycodestyle(以前的pep8)检查任何指定的 Python 模块,以确定它是否违反了 PEP 8 中列出的任何准则。更多信息可以在 GitHub 库上找到。

另一个常用的工具是[pylint](https://www.pylint.org/)pylint的基本前提与pycodestyle相同,但它更进一步,在范围和建议上更具侵略性。我个人更喜欢pycodestyle,因为我在过去遇到过几次pylint的误报。虽然有一些方法可以对抗这些误报,但我发现不值得不断地修改我的源代码来解决问题,并解释为什么某些行没有通过,但应该通过。

我还应该注意到,还有额外的代码验证和林挺工具,但是上面提到的两个是最常用的资源。

**编辑:**感谢 Tarun Chadha 提到这些工具可以与流行的 ide 集成,比如 PyCharmVisual Studio Code

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

Photo by Sara Kurfeß on Unsplash

为地道的未来干杯!

如果您已经做到了这一步,那么现在您应该掌握了编写更快、更干净、更好的 Python 应用程序的知识。这不仅有助于您的开发技能,还会赢得 Python 社区的更多尊重。实践这个行业,你可能会被认为是伟大的 Python 开发者的神圣领域。

如何用天赋打败谷歌的自动超参数优化

原文:https://towardsdatascience.com/how-to-beat-automl-hyperparameter-optimisation-with-flair-3b2f5092d9f5?source=collection_archive---------11-----------------------

使用 Flair 进行文本分类的超参数优化

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

这是我们之前关于最先进的文本分类的帖子的后续。我们解释了如何使用 Flair Python NLP 库进行超参数优化,以在文本分类中获得优于 Google AutoML 自然语言的最佳结果。

什么是超参数优化,为什么我们不能简单地手动完成?

超参数优化(或调整)是为机器学习算法选择一组最佳参数的过程。数据预处理器、优化器和 ML 算法都接收一组指导其行为的参数。为了实现最佳性能,需要对它们进行调整,以适应所用数据集的统计属性、要素类型和大小。深度学习中最典型的超参数包括学习速率、深度神经网络中的隐藏层数、批量大小、退出率…

在自然语言处理中,我们还会遇到许多其他与预处理和文本嵌入相关的超参数,如嵌入类型、嵌入维数、RNN 层数等

通常,如果我们足够幸运,问题足够简单,只需要一个或两个具有一些离散值的超参数(例如 k-means 中的 k),我们可以简单地尝试所有可能的选项。但是随着参数数量的增加,试错法变得困难。

我们的搜索空间随着调整的参数数量呈指数增长。

假设离散选项,这意味着如果我们有 8 个参数,其中每个参数有 10 个离散选项,我们最终得到超参数的 10⁸可能组合。假设训练一个模型通常需要相当多的时间和资源,这使得手工挑选参数不可行。

有许多超参数优化技术,如网格搜索、随机搜索、贝叶斯优化、梯度方法以及最终的 TPE。树形结构的 Parzen 估计器 (TPE)是我们在 Flair 的包装器 Hyperopt 中使用的方法,Hyperopt 是一个流行的 Python 超参数优化库。

使用 Flair 进行超参数调谐

Flair 提供了一个简单的 API 来调整您的文本分类器参数。然而,我们需要告诉它需要调整哪些类型的超参数,以及应该为它们考虑哪些值。
运行优化器并不比训练分类器本身更难,但它需要更多的时间和资源,因为它本质上要执行大量的训练。因此,建议在 GPU 加速的硬件上运行。

我们将对在 Kaggle 垃圾短信收集数据集上训练的文本分类器模型进行超参数优化,以区分垃圾短信和非垃圾短信。

做好准备

要准备数据集,请参考最新文本分类的“预处理—构建数据集”部分,在此我们获得train.csvtest.csvdev.csv。确保数据集存储在与运行 Flair 的脚本相同的目录中。

您可以通过运行以下命令来检查您是否有可用于培训的 GPU:

import torch
torch.cuda.is_available()

它返回一个 boolean 值,指示 CUDA 是否可用于 PyTorch(在它上面写有 Flair)。

调整参数

超参数优化的第一步很可能包括**定义搜索空间。**这意味着定义我们想要调整的所有超参数,以及优化器应该只考虑它们的一组离散值还是在一个有界的连续空间中搜索。

对于离散参数,使用:

search_space.add(Parameter.PARAMNAME, hp.choice, options=[1, 2, ..])

对于均匀连续的参数,使用:

search_space.add(Parameter.PARAMNAME, hp.uniform, low=0.0, high=0.5)

所有可能参数的列表可在这里看到。

接下来,您需要指定一些参数,这些参数涉及我们想要使用的文本分类器的类型,以及要运行多少个training_runsepochs

param_selector = TextClassifierParamSelector(
    corpus=corpus, 
    multi_label=False, 
    base_path='resources/results', 
    document_embedding_type='lstm',
    max_epochs=10, 
    training_runs=1,
    optimization_value=OptimizationValue.DEV_SCORE
)

注意DEV_SCORE被设置为我们的优化值。这是非常重要的,因为我们不想基于测试集优化我们的超参数,因为这会导致过度拟合。

最后,我们运行param_selector.optimize(search_space, max_evals=100),它将执行优化器的 100 次评估,并将结果保存到resources/results/param_selection.txt

运行整个过程的完整源代码如下:

from flair.hyperparameter.param_selection import TextClassifierParamSelector, OptimizationValue
from hyperopt import hp
from flair.hyperparameter.param_selection import SearchSpace, Parameter
from flair.embeddings import WordEmbeddings, FlairEmbeddings
from flair.data_fetcher import NLPTaskDataFetcher
from pathlib import Pathcorpus = NLPTaskDataFetcher.load_classification_corpus(Path('./'), test_file='test.csv', dev_file='dev.csv', train_file='train.csv')word_embeddings = [[WordEmbeddings('glove'), FlairEmbeddings('news-forward'), FlairEmbeddings('news-backward')]]search_space = SearchSpace()
search_space.add(Parameter.EMBEDDINGS, hp.choice, options=word_embeddings)
search_space.add(Parameter.HIDDEN_SIZE, hp.choice, options=[32, 64, 128, 256, 512])
search_space.add(Parameter.RNN_LAYERS, hp.choice, options=[1, 2])
search_space.add(Parameter.DROPOUT, hp.uniform, low=0.0, high=0.5)
search_space.add(Parameter.LEARNING_RATE, hp.choice, options=[0.05, 0.1, 0.15, 0.2])
search_space.add(Parameter.MINI_BATCH_SIZE, hp.choice, options=[16, 32, 64])param_selector = TextClassifierParamSelector(
    corpus=corpus, 
    multi_label=False, 
    base_path='resources/results', 
    document_embedding_type='lstm',
    max_epochs=10, 
    training_runs=1,
    optimization_value=OptimizationValue.DEV_SCORE
)param_selector.optimize(search_space, max_evals=100)

我们的搜索空间包括学习率、文档嵌入隐藏大小、文档嵌入 RNN 层数、丢失值和批量大小。注意,尽管只使用了一种类型的单词嵌入(一堆新闻向前、新闻向后和手套),我们仍然必须将它传递给搜索空间,因为它是一个必需的参数。

结果

优化器在 GPU 上运行了大约 6 个小时,执行了 100 次评估。最终结果写入resources/results/param_selection.txt

最后几行显示最佳参数组合,如下所示:

--------evaluation run 97
dropout: 0.19686569599930906
embeddings: ./glove.gensim, ./english-forward-v0.2rc.pt, lm-news-english-backward-v0.2rc.pt
hidden_size: 256
learning_rate: 0.05
mini_batch_size: 32
rnn_layers: 2
score: 0.009033333333333374
variance: 8.888888888888905e-07
test_score: 0.9923
...
----------best parameter combination
dropout: 0.19686569599930906
embeddings: 0 
hidden_size: 3
learning_rate: 0 <- *this means 0th option*
mini_batch_size: 1
rnn_layers: 1

根据进一步评估确认的调优结果的test_score,我们获得了测试 f1 分数 0.9923 (99.23%)

这意味着我们以微弱优势超过了谷歌的 AutoML。

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

Results obtained on Google AutoML Natural Language

提示:如果 *precision* = *recall* 那么*f-score*=*precision*=*recall*

这是否意味着我可以按照这个指南一直达到最先进的效果?

简短回答:不。该指南应该让您很好地了解如何使用 Flair 的超参数优化器,并且不是 NLP 文本分类框架的全面比较。使用所描述的方法肯定会产生与其他最先进的框架相当的结果,但是它们会根据数据集、使用的预处理方法和定义的超参数搜索空间而变化。

注意当选择最佳参数组合时,Flair 会考虑所获得结果的损失和变化。因此,损失最低且 f1-得分最高的车型不一定会被选为最佳车型。

那么我现在如何使用参数来训练一个实际的模型呢?

要在实际模型上使用最佳性能参数,您需要从param_selection.txt中读取最佳参数,并手动将它们一个接一个地复制到将训练我们的模型的代码中,就像我们在第 1 部分中所做的那样。

虽然我们对这个库非常满意,但是如果能够以一种更加代码友好的格式提供最佳参数,或者更好的是,在优化过程中可以选择简单地导出最佳模型,那就更好了。

如何战胜人工智能项目的阻力:3 个步骤

原文:https://towardsdatascience.com/how-to-beat-resistance-to-ai-projects-3-steps-bb191c310c4a?source=collection_archive---------23-----------------------

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

是什么阻碍了人工智能在您的组织中的采用?了解制药公司如何克服 3 个最常见的障碍

在最近由 O’Reilly 进行的一项调查中,受访者称“公司文化”是在他们的组织中采用人工智能的最大瓶颈。尽管人们对人工智能议论纷纷,但组织中的大多数人还没有认识到人工智能的必要性。

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

Pic: O’Reilly survey on AI adoption in the enterprise

在我看来,每个组织的高管都面临三个常见的障碍:

  1. 人工智能从何入手?
  2. 这对企业来说是否可行?
  3. 你如何获得预算和买入费?

让我们看一个真实的例子,一个制药行业客户如何在药物发现中采用人工智能来解决这些问题。

1.找到你的人工智能可以解决的商业问题

启动任何数据分析项目的最糟糕方式是询问关于数据或分析的问题。相反,通过识别最大的商业挑战来开始你的人工智能之旅。

启动任何数据分析项目的最糟糕方式是询问关于数据或分析的问题。

数据科学只有在解决业务问题时才能发挥价值。第一步是识别业务挑战并确定其优先级。

这家制造仿制药的制药公司渴望开始一场人工智能之旅。通过绘制他们的现有业务流程,他们发现药物特性是一个需要改进的领域。这是药物发现的关键一步,包括研究分子的大小、形状和特性。

这里的挑战之一是从显微图像中计数生物细胞。这是一项痛苦的手动任务,耗费了病理专家数小时的时间。这是应用人工智能的潜在候选者。

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

Pic: Microscopic image showing the biological cells

2.评估人工智能试点的可行性和潜力

确定了最大的业务挑战后,对它们进行优先级排序。发现挑战对业务团队有多重要。检查是否可以通过数据和分析解决。

评估一下是否真的需要 AI 的火力。很多问题通过简单的分析就可以更高效的解决。当你必须应用人工智能时,通过建立一个快速试验来检查可行性。

算法从来都不是 AI 项目中最大的挑战。今天,大多数常见用例都有开源模型库。

今天,有个开源库的 AI 算法可供通用用例使用。检查如何利用它们。公司文化抵制人工智能,因为缺乏熟悉和无法感知其好处。试点有助于正面解决这一问题。

制药客户选择解决手动细胞计数问题。人们发现这类似于人群计数——估计人群中的人数。一项文献研究揭示了关于人工智能驱动的人群计数的学术论文。

下一步是重用公共算法。在 Gramener 人工智能实验室,我们已经使用人工智能在购物中心进行了人群计数的试点实施。我们把它改装成一个工作试点来计算生物细胞。该试点项目展示了可行性、工作量和成本影响。利用潜在的时间和金钱节约,计算投资回报(ROI)。

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

Pic: AI pilot solution with a UI to count cells of different shapes

3.展示投资回报率和人性化的人工智能模型的结果

一旦你确定了商业问题的潜在人工智能解决方案,你必须在内部销售它们。高管们可能想知道人工智能项目是否是他们 IT 预算的最佳用途。由于可解释性和准确性的问题,用户可能会怀疑人工智能解决方案。他们担心人工智能是否会取代他们。所有这些导致了一种抵制文化。

始终使用视觉叙事来解释和人性化人工智能模型的结果。

通过展示业务投资回报,说服管理层预算。人工智能的不断进步有助于带来信任和透明的元素。利用它们和视觉故事向用户解释人工智能模型的结果。通过建立人的反馈和改进的渠道,让人们了解情况。

制药客户的 IT 主管证明,每张图像节省了 80%的时间。一年处理数千张图像,投资回报非常明显。

该解决方案构建了丰富的可视化层,以使模型输出易于理解。审查、编辑和添加手动输入的交互功能使人保持在循环中。人工智能可以通过人类输入的自动再训练来改善每一次运行。

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

Explainable AI: A framework to visualize what the AI uses to distinguish dogs from cats

将人工智能项目视为业务转型计划

总之,人工智能项目与业务转型项目没有什么不同:选择正确的问题来解决。通过试点评估想法。用可消费的福利说服用户。

然而,实践者经常被解决方案冲昏头脑。他们忽略了必须解决的问题。另一方面,用户被围绕人工智能的大肆宣传吓倒了。所有这些导致了一种抵制人工智能项目的文化。

技术领导者必须促进人工智能从业者和工具使用者之间的合作。他们需要教育人们人工智能将如何授权而不是压制他们。

您还必须导航人工智能项目要求的变更管理。通过教育、授权和启发来带动整个组织。

这篇文章最初是由 发表在 企业家项目上。增加了插图。

如何成为数据科学三重威胁

原文:https://towardsdatascience.com/how-to-become-a-data-science-triple-threat-bb41e0664ca5?source=collection_archive---------7-----------------------

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

所以,前几天晚上我在看闪电侠(别评头论足),我起来看了闪电侠/超女穿越集、二重唱,其中闪电侠(格兰特·古斯汀)和超女(梅利莎·拜诺伊斯特)被困在一部音乐剧中,为了逃离不得不唱歌跳舞。

很明显,这一集之所以成为可能,是因为 Gustin 和 Benoist(以及他们的许多合作明星)都是非常有才华的演员,能歌善舞,还会演戏。

也就是说,他们是“三重威胁”。精通三种关键的、受欢迎的技能的人,会有令人难以置信的就业前景(如果你感兴趣,你可以在这里和这里看到这一集的片段)。

这让我开始思考。如果演艺界的“三重威胁”是会唱歌、跳舞、演戏的人,那么数据科学的三重威胁是什么样子的?你如何着手成为一个人呢?

数据科学家最重要的三项技能

为了回答这个问题,我研究了 2019 年 4 月 22 日至 2019 年 5 月 5 日期间在 LinkedIn 上发现的四个英语国家(澳大利亚、加拿大、英国和美国)的 100 个数据科学招聘广告。

这些招聘广告被选择来代表雇主类型、规模、行业和工作级别的广泛代表性,而纯粹的管理角色没有被考虑。

从这些招聘广告中,我手动提取了作为选择标准或在角色的日常职责中列出的技能的详细信息,并根据这些技能在招聘广告中出现的比例,确定了最受欢迎的 20 项数据科学技能。

他们在这里:

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

[如果你想知道,在创建这个列表时,我专注于一般技能,而不是特定的编程语言或技术,这就是为什么像 R、Python 和 Hadoop 这样的东西不值得一提。]

这些技能可以大致分为三类:

  • 建模和统计:包括机器学习、统计建模和模型部署;
  • 数据工程(和编程):包括数据争论、使用数据库和分布式计算(如果我们在分析中包括编程语言,我也会把它们放在这里);和
  • 沟通和专业知识:包括提供见解、行业知识、领导和指导初级员工。

这三个类别与数据科学技能集的经典维恩图中显示的类别大体一致(下面给出了一个版本)。

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

然而,在我们的版本中:

  • 我们扩大了“数学和统计”类别,以包括所有类型的建模(包括机器学习,它通常被认为是介于统计学和计算机科学之间),以及整个端到端的建模过程,直到部署;
  • 我们用一个更接近软件或数据工程的类别来代替“编码”;和
  • 我们扩大了“领域知识”类别,以包括对数据科学成功至关重要的其他软技能。

我们新版本的图表变成了:

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

基于此,我们可以认为数据科学领域的三重威胁是那些擅长数据工程和编程的人;建模和统计;交流和专业知识。

因此,要成为数据科学的三重威胁,有必要在这些类别中的每一个类别中培养自己的技能。

假设你已经对机器学习和编程有了一定的了解,以下是你可以重点培养的六项技能,以此来证明你对三重威胁的重视:

建模和统计

  • 统计建模
  • 模型部署

数据工程与编程 通信与工程

  • 从数据中获得洞察力
  • 领导和指导初级团队成员
  • 沟通

让我们更详细地看一下每一项。

技能 1:统计建模

当许多数据科学家想到数据建模时,他们会立即想到大多数机器学习课程中教授的监督学习算法的集合。然而,除了这些算法之外,统计学还包括许多技术,这些技术适用于一些最常见的数据类型,而许多数据科学家似乎完全没有意识到这一点。

一些例子包括:

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

  • 地理空间分析:与时间序列分析一样,地理空间分析技术是为应用于基于位置的数据(例如不同位置的降雨量测量)而设计的,并考虑了地理上接近的数据点之间的相关性。
  • 广义线性模型:这些模型是标准线性回归模型的推广,可以应用于标准回归模型的假设不成立的许多情况。例如,在偏斜和计数数据的情况下。

在您的工具包中添加一些这样的技术,可以极大地拓宽您能够处理的问题的范围。

技能 2:模型部署

每一个称职的数据科学家都知道如何建立一个模型(模型好不好是另一回事)。但是在你造好它之后,你用它做什么呢?

当然,你不会期望将你的代码交给你的利益相关者(他们可能认为 Python 只是一种爬行动物,R 是字母表中的第 18 个字母)并让他们继续运行它吧?您需要能够部署您已经构建的模型。

模型部署在不同的情况下意味着不同的事情,不幸的是,在大多数数据科学学位或 MOOCs 中很少教授。

在某些情况下,部署可能只是意味着获取从模型中获得的见解,并使用它们来生成报告。

在其他情况下,这可能意味着开发一个前端/应用程序(例如,使用 Flask 或 Shiny),以便其他人可以自己运行您的模型,而不必接触代码。

在第三种情况下,它可能涉及到将您的代码转换成 R 或 Python 包,并上传到 CRAN 或 PyPi,以便其他人可以使用它。

意识到这一步,并学习一些把你的工作从电脑中拿出来,放在那些重要的人面前的替代方法,将会降低你的工作因缺乏关注而浪费的风险。

技能 3:使用数据库

如果你工作的(或想要工作的)公司有合理数量的数据(如果他们雇佣数据科学家,他们应该有),那么他们不会将这些数据存储在 csv 文件或 Excel 电子表格中。他们会把它保存在某种数据库里。

这意味着你,数据科学家,需要能够从数据库中提取数据。

最常见的数据库类型仍然是传统的关系数据库,在这种数据库中,数据存储在相互关联的表的集合中的行和列中。

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

如果招聘广告将 SQL 技能列为选择标准之一,那么你可以保证,如果你得到这份工作,你将与关系数据库一起工作,因为 SQL 是关系数据库的语言。

你不必学习所有关于关系数据库的知识。毕竟,你是数据科学家,不是数据库管理员。但是,如果您学习了连接(内部、外部、左侧和右侧)、键(主和外部)以及足够的 SQL 来合并和过滤一组表,那么您应该没问题。

技能 4:从数据中获得洞察力

每当我向我的前老板提交一份工作时,他总是会问的第一个问题是“那又怎么样?”

他为什么要关心我刚刚放在他面前的工作?里面有什么对我们的组织或客户有益的东西吗?我刚刚完成的工作意味着什么?

回答“那又怎样”是寻找洞见的全部内容,也是数据科学家可以为雇主增加价值的地方(从长远来看,如果你想保住工作,这一点很重要)。

如果你是一个组织或行业的新成员,那么寻找见解可能会很有挑战性。这就是行业知识(雇主看重的另一项技能)变得重要的地方。

通过花时间了解你工作(或有兴趣工作)的行业,通过与该行业的其他人交谈,或只是通过一般的研究,你提供见解的能力将会增加,你工作的价值也会增加。

技能 5:领导和指导初级团队成员

对于入门级的数据科学职位,领导和指导初级团队成员的能力并不那么重要。毕竟,在这样的位置上,你是团队中其他成员指导你的人,而不是相反。

然而,如果你渴望有一天爬上数据科学的阶梯,成为高级/首席数据科学家,甚至是数据科学团队的经理,那么发展你的领导和指导技能是你应该尽早考虑的事情。

从这个角度来看,虽然只有 6.7%的入门级数据科学职位广告提到能够领导/指导初级团队成员,但 18.2%的中级数据科学职位广告和 58.5%的高级数据科学职位广告都提到了这一点。

但是,领导和指导团队不应该是团队经理的职责吗?

通常,数据科学团队经理本身并不是数据科学家,因此培训初级团队成员的任务必然会落到数据科学团队的高级成员身上。

此外,经理通常是非常忙碌的人,因此他们需要高级团队成员的协助才能完成所有工作。这可能意味着更高级的团队成员指导初级成员,以便团队经理可以专注于指导高级团队成员。

不要等到别人问你。好事将会降临到那些自愿帮助团队其他成员并承担领导责任的人身上,不管这些责任有多小。

技能 6:沟通(不是你想的那样)

每个人都知道,要成为一名成功的数据科学家,你需要能够写下你的工作成果,并向他人展示。然而,这只是交流的一个方面。

交流是双向的。这不仅仅是说,也是听和解释对方在说什么。

当你被分配一项任务时,你需要和分配这项任务的人一起工作,准确地理解他们想要你做什么。这在一定程度上与倾听有关,但也包括提出正确的问题,以确定这个人所说的他们想要的实际上是否是他们解决问题所需要的(而事实往往并非如此)。

如果你能给别人提供他们真正需要的东西,而不仅仅是他们说他们想要的,那么这将会为你的声誉创造奇迹。

沟通也是关于能够影响他人。例如,根据您的分析结果,您可能需要能够影响他人做出正确的决定。

对于数据科学家来说,在管理层获得一个席位并不罕见,但如果你一旦到了那里,就无法影响这些人的决策,那么你还不如根本不在那里。

如果你和我一样,你永远也不会像梅利莎·拜诺伊斯特或格兰特·古斯汀那样能歌善舞(尽管,如果你能,那不是很棒吗?).

然而,如果你从上面提到的三种技能中选择一种,并且每周花几个小时来发展它们,很快你就会开始建立自己的令人敬畏的技能组合。这将使你成为数据科学世界的三重威胁。

它可能不会让你成为超女或闪电侠,但它肯定会让你变得超级。

Genevieve Hayes 博士是数据科学家、教育家和人工智能及分析专家,拥有Genevieve Hayes Consulting。你可以在LinkedIn或者Twitter上关注她。她还是 价值驱动数据科学 的主持人,这是一个每月两次的播客,面向希望最大化其数据和数据团队价值的企业。

想要发掘企业数据的价值,但不知道从哪里开始?**下载免费的数据科学项目发现指南。

如何成为一名数据科学家

原文:https://towardsdatascience.com/how-to-become-a-data-scientist-2a02ed565336?source=collection_archive---------0-----------------------

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

Image of Chandrasekaran showing a possible trail that inspires me to create the trail below.

课程、书籍和电影几乎都是免费的

最近几个月,许多人问我如何才能成为一名数据科学家,在了解了大多数人的主要问题并随着时间的推移改进了我的答案后,我决定花大量时间制作这份指南,以便大多数人都能获得它。

索引
1-什么是数据科学家?
2-需要什么背景?
3-学什么?
4-受试者的循序渐进。
5-课程、书籍、电影推荐。
6-下一步。

1.什么是数据科学家?

如果你知道什么是数据科学家,你很难找到,因为即使是最有经验的专业人士也很难定义该领域的范围。一种可能的界定是,数据科学家是负责使用机器学习和统计学生成预测和/或解释模型的人。更完整(或详细)的描述可在以下链接中找到:

[## 毕竟,数据科学中有什么新东西?

数据科学家的工作范围和角色是什么。

medium.com](https://medium.com/swlh/data-science-and-the-data-scientist-db200aac4ea0) [## 每个人都需要掌握的 10 种偏见和因果关系技巧。

第 1 部分—数据科学和机器学习中的偏差、因果关系、实验设计和辛普森悖论

medium.com](https://medium.com/@marcos.silva0/the-10bias-and-causality-techniques-of-that-everyone-needs-to-master-6d64dc3a8d68)

作为一名数据科学家,要不断学习、更新和提高。学习应用机器学习不会让你成为一个人,改变不仅仅是技术的集合,而是面对问题的思维方式的改变,它是怀疑的思考,没有偏见,它不会很快到来。
这份入门指南可以节省您寻找最佳材料或学习顺序的时间,而不是取代您培训所需的数百个小时。

2.必要的背景是什么?

第一波数据科学家主要来自开发人员、计算机科学家和工程师。他们创造了机器学习模型,优化了流程,最小化了成本函数。他们将分析非结构化数据,为每个问题创建特定的程序,并且由于计算处理的限制,进行手动映射/简化。幸运的是,时间一去不复返了,高性能程序和软件包极大地促进了这些操作,目前大多数数据科学家在建模上花费的时间更多,而在工程上花费的时间更少。

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

Image of Andrew Silver showing the great pillars of Data Science.

好消息是,今天,这个学习曲线不再那么陡峭了。来自不同背景的人有机会加入这个领域,其中一个主要原因是 Python 的大量使用,Python 是一种高级语言,作为更具表演性的低级语言的 API。换句话说,你不必浪费精力担心复杂的语法,因为,用 Python 写就像用英语写一样。你只需要在几周内学习掌握基础知识。除此之外,数据科学家的大部分耗时工作正在自动化或专门用于其他领域,如机器学习工程师和数据工程师。因此,把科学的一部分留给科学家。

如今,处理大数据已经变得像在 DataBricks 等环境中编写 SQL 一样简单。

有了像 SageMaker 及其竞争对手这样的工具,让算法在生产中高度可扩展和可用变得更加简单。

使用 AutoML ,甚至复杂特征工程的创建也实现了自动化。

简而言之,今天编程背景仍然重要,但重要性正在下降,我对未来的预期是,编程将不再是核心,它将成为 it 专业人员的专属活动。所以,我给你一个建议:把你的时间和精力集中在分析、建模和科学上。

3.那么学什么呢?

编程:Python & SQL

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

你肯定需要学习如何编程,许多语言都满足这一需求,无论是像 Scala 这样最具执行性的语言,还是像 R 这样更学术和统计性的语言,或者像 Python 这样通用的语言,后者对于任何初学者来说都是最明显的选择。原因很简单。Python 拥有最大的数据分析社区,在 Kaggle (机器学习竞赛网站成为数据科学家的作品集)中找到分析的例子,在 Stackoverflow (Q &一个拥有大多数初学者和经常是高级问题的网站)中找到代码例子,以及职位空缺,因为它是市场上最受欢迎的语言。

机器学习:公分母。

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

没办法跑,你不可避免的要经过机器学习的基础。当我在 2014 年第一次开始学习机器学习时,大多数课程都专注于推导模型,就像正规学位所期望的那样,许多 DS 都是这样训练的,
这给了你巨大的能力来理解不同模型内部如何工作,甚至思考每个问题的最佳模型。我建议你不要这样做。研究许多不同模型类别的成本收益非常小,你需要知道(每小时)模型是一个黑盒,可以将输入(我们的变量,如人的身高,他们住在哪里,他们赚多少钱)转化为输出(如他们成为欺诈者的可能性)。几乎每个模型都有许多共同的技术,我的建议是,你先学习这些技术,然后再专注于理解它们的数学差异和实现细节。

统计:基本做得好。

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

我把最好的,最重要的,也是(不幸的)最难的留到了最后。正是这种技能将区分数据科学家和机器学习工程师。这里没有太多的捷径。你应该从描述统计学开始,知道如何做一个好的探索性数据分析( EDA ),或者至少是概率和推理的基础知识,很好地理解选择偏差、辛普森悖论、变量关联(特别是方差分解方法)、统计推理的基础知识(以及著名的、市场上已知的作为推理的 A / B 检验),以及实验设计的好主意。

4.什么是理想的赛道?

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

这是一个很难的问题,根据每个人的背景可能会有不同的答案。但是万一你是初学者,我会建议,随着你的进步,你应该按照你最喜欢的细分领域去做。

先决条件:

  • 数学:代数- >微积分。
  • 统计:描述性统计- >概率>推断
  • Python :数据类型- >迭代- >条件- >函数

基本:

我把基础知识称为任何数据科学家都应该具备的知识,无论背景或专业如何。

  • 熊猫数据分析(打开不同的文件并操纵它们)
  • 统计:变量之间的关联、方差分析、假设检验;
  • :matplotlib;seaborn 散景;
  • 数据 : SQL,查询 APIs
  • 监督机器学习:梯度下降- >偏差和方差的权衡- >验证- >正则化-

    回归和分类度量- >平衡- >参数化- >特征选择;—>观念的整体性;

  • 无监督机器学习:聚类、降维

中介:

在这一点上,一个数据科学家应该专攻一个更小的(也是更困难的)领域;在这个阶段,几乎没有人是所有领域的专家,但我会向您展示每个领域:

  • 统计:贝叶斯统计,因果实验;计量经济学(如果实验是不可能的),数据管理;
  • 数据:数据摄取、Web 报废、非结构化数据、大数据环境;
  • 生产算法:转换流水线;容器和创建 APIs
  • 创建多层模型(堆叠)和元模型,
    嵌入模型;用莱姆和 SHAP 解释模型;
  • 具有自相关数据(或仪表板数据)的机器学习

高级:

我选择以下主题作为高级,不是因为它的难度,而是因为它们是最专业的知识。对于一个有经验的数据科学家来说,仅仅因为他或她在工作中没有机会,而不必使用这些技能的一部分是完全可以接受的。不过还是那句话,
了解所有技能的基础很有意思。

深度学习:深度强化学习、自然语言处理、计算机视觉;

统计学 : MCMC,带有倾向分数匹配和工具变量的因果建模,合成反事实。

数据:面向图形的数据、数据湖、流数据、低延迟 API、kubernetes

5.这些都是从哪里学来的?

由于我已经为生活在世界任何地方的任何对数据科学感兴趣的人写了这个指南,我将只推荐在线课程,最好是免费的。所有这些至少都有英文字幕,涵盖了上述线索的基本部分。

Python:

最完整的推荐 Python 课程是 MITx 的计算机科学和使用 Python 编程入门(>120 小时)或 Michigan 的Python for Everybody(>30 小时),你可以根据你有多少时间来选择。两个课程都已经从零开始形成了几千人,所以你没有先决条件,你会写小程序。

如果你已经熟悉其他编程语言,但不了解 Python,你可以选择来自 DataCamp (免费)的 4 小时短期课程。

机器学习:

一大群 DS 在斯坦福著名的机器学习课程中向 Andrew NG 学习。我不能不推荐。他采用了更技术性的方法,使用 Octave 语言(一种开源的 Matlab)。课程约 60h,先修线性代数和基本统计。

其他完整选项包括:

机器学习来自华盛顿大学 Coursera ( > 180h)

Nanodegree de 机器学习由 Udacity 提供(不免费)(> 120h)

统计数据

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

(更长更饱满) 统计学基础,MIT,免费,> 160h。这是一门非常广泛的课程,如果你没有数学或相关领域的背景,它可能太专业了,因为这是一门推导概念背后的数学的课程。本课程将教会你:

  • 特定的模型对于特定的数据集有多合适?
  • 线性回归如何选取变量?
  • 如何对非线性现象建模?
  • 如何查看大数据?

如果你想从短期(和基础)课程开始,这里有个替代选项 :

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

概率由哈佛,edX,免费 ~ 12h。这是一门比前一门更实用的入门课程,侧重于概率的主题,你将学到几个基础知识,例如:

  • 随机变量,
  • 独立,
  • 蒙特卡洛模拟,
  • 期望值,
  • 标准误差,
  • 中心极限定理。

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

推理与建模,哈佛,edX,免费 ~ 12h。补充前面实用性课程的另一个重要主题是同样由哈佛团队开发的推理课程。在本课程中,您将学习制作良好的统计模型所需的基础、误差范围,并了解本课程样本的预测可靠性,所有这些都有真实世界的例子,如 2016 年选举的数据。

书籍推荐

介绍性:

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

我不推荐给任何已经有基础的人,因为它太慢了。最近发布了这本书的第二版。

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

用于数据分析的 Python:与熊猫、NumPy 和 IPython 的数据角力作者 Wes McKinney 。这里所有的书显然都是很好的读物,但这里有一个阅读案例,是简单(或不那么简单)技巧的很好汇编,它会为你节省很多时间。
这不是一本统计学或机器学习的书,但你需要通过这些技术来做任何最接近真实世界的事情。

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

用 Scikit-Learn 和 TensorFlow 进行动手机器学习:构建智能系统的概念、工具和技术 。这里有一本优秀且最新的书(我甚至推荐最近发布的已经更新到优秀 tensorflow 2.0 的这本书的第二版)。第一部分讨论机器学习算法的“共同点”,第二部分重点讨论神经网络。

除此之外,还有一个很棒的 github 库,里面有这本书的所有代码。可用此处-v2 ou 此处-v1

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

说白了就是统计 。对那些没有统计学背景的人来说是轻松简单的阅读。每章描述一种不同的统计技术,从基本概念如集中趋势和分布的描述到更高级的概念如测试,回归,重复测量方差分析和因素分析。
每一章都以统计数据的简要描述和何时使用开始,随后是可选的进一步阅读。

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

Think Stats:程序员概率统计 点击链接即可免费获得。在这本令人愉快的读物中,你将放下沉重的公式,开始分析国家卫生研究院的实际数据。对于那些需要比理论更实际的东西来学习的人,或者如果他们已经很好地了解了理论,并且想看看如何在现实世界中应用它。。肤浅有趣的书。

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

统计学习入门 一本经典,满满的例子和应用(用 R 语言)。不可或缺!涵盖的主题包括线性回归、分类、重采样方法、收缩方法、基于树的方法、支持向量机、聚类等。
使用颜色图表和真实世界的例子来说明所提出的方法。

没那么入门…

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

【免费链接】这篇文章是该领域的一个里程碑。在此之前,不同的地区发展了他们自己的语言和符号来使用统计概念,作者在统计学的阴影下收集了所有这些。这里强调的是概念而不是数学。
借助好的彩色图形给出了很多例子。对于统计学家和任何对科学或工业中的数据挖掘感兴趣的人来说,这是一个有价值的资源。它探讨了不同的算法和统计用途的机器学习技术。

.

.

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

伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔合著的《深度学习》一书,埃隆·马斯克这样评价这本书:“由该领域的三位专家撰写,深度学习是该领域唯一一本全面的书。”这本书的第一部分是对更传统的机器学习的相当全面的介绍,同时关注其余部分。这本书的主题是深度学习和知识前沿。网上免费提供。

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

流畅的 Python:清晰、简洁、有效的编程 一本真正完整的书(我不知道还有比这本书更完整的了)让你学习 Python 哪怕是最小的细节。高级素材,不推荐现在开始用 Python 的人。

.

.

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






黑客的贝叶斯方法
作者:Cam Davidson-Pilon。阅读有助于给这个超级重要的领域一些实用主义,但与 frequentist 统计相比,内容相当贫乏。轻量级文本主要关注概念和应用,将数学留在背景中,
最终可以在一本优秀的书中将概率编程与贝叶斯统计结合起来。

.

.

.

电影和纪录片推荐。

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

MoneyBall,2011 这是那种让我们对数据分析充满热情的电影。他讲述了比利·比恩抓住一个相当小的棒球队的故事,通过数据分析,大量的勇气和一点政治可以将旧的感觉方法抛在身后,并彻底改变一项超级传统的运动。IMDB 注释 7.6。不可错过的
。(一个参考是 8 级在电影史上前 250 名)

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

alpha go 2017 纪录片是如何将复杂的机器学习算法转变为所有观众都能理解的纪录片的又一个光辉例子。在网飞上可以看到,你将在一个几年前被认为是人类固有的游戏中学习机器学习的不可思议的潜力。附注 7.9。

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

统计的快乐,2010 是对使用统计数据的道歉,由兴奋的汉斯·罗斯林教授提出,他用各种视觉技巧展示了不同的领域如何处理这个数据泛滥的新时代。IMDB Note 7.3(太棒了!)

2013 年大数据时代 bbc quee 纪录片探索了三个非常有趣的案例:

  • 洛杉矶警方预测未来 12 小时内哪里最有可能发生犯罪
  • 伦敦金融城的科学家转行做交易员,他相信自己已经找到了用数学赚几百万的秘密
  • 南非天文学家,他想通过聆听所有的星星来记录天空。

推荐的最新去处…

。第一个推荐并不完全是最新的,但它是一个相当丰富的例子和讨论的来源,它是 Google 购买的 Kaggle 网站。那里有竞赛(包括高额奖金)、课程、大量笔记本、讨论,最近它正在成为一种数据科学家课程。
所以如果你想成为其中一员,这是值得了解的。

KDnuggets 。不要让这个 90 年代的网站欺骗了你,但它确实创建于 1997 年,从那时起就收集了大量高质量的帖子和内容,大部分是技巧和应用。

AnalyticsVidhya。&TDS这些都是由成千上万各种水平的数据科学家组成的分享内容的博客。这需要一点经验来区分谷壳和小麦,但有很多质量。

Montreal . ai我最喜欢的枢纽之一,他们在不同的社交网络上发帖,如果你关注你的频道,就会不断更新前沿知识。高质量的内容很难跟上该领域的创新步伐。

6.后续步骤:

显然后面还有很多步骤要做。但是每个人最终都会专攻你最感兴趣的某个领域,比如:

贝叶斯统计 ,加州大学。

计量经济学 s (因果推断)鹿特丹伊拉兹马斯大学

深度学习by Deep Learning . ai

[计算机视觉](http://Convolutional Neural Networks Course by deeplearning.ai (Coursera))by deep learning . ai

高等经济学院自然语言处理 或 TensorFlow 中的 NLP

艾伯塔大学强化学习

如果你喜欢这篇文章,你可能也会喜欢以下内容:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值