TowardsDataScience 博客中文翻译 2020(二十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

Python 中的 5 个地理空间提示和技巧

原文:https://towardsdatascience.com/5-geospatial-tips-and-tricks-in-python-eef86aec5110?source=collection_archive---------37-----------------------

第 1 部分:如何使用 Geopandas 在 Python 中轻松有效地集成空间要素。

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

Unsplash 上由 L B 拍摄的照片

在数据科学领域,处理地理空间数据通常被认为是一件麻烦的事情。我们很少费心在我们的机器学习模型中包括空间特征。部分原因是几何图形和地理坐标参考系统的复杂性。然而,我倾向于在我的机器学习模型中获得提升,并获得融入空间特征的更好的洞察力。

在过去的一个月里,我一直在 Twitter 上分享 Python 中的地理空间技巧和诀窍,它受到了地理空间社区的大量关注。

在本文中,我将分享使用 Geopandas 处理地理空间数据的前五个技巧和诀窍。我使用了一个代码美化器在线工具来显示代码。

技巧 1:直接在压缩文件夹下读取地理空间数据

我们压缩数据以减少空间和快速传输。因此,我们往往倾向于在读取数据之前对其进行解压缩或解压。然而,这不是必须的。使用 Geopandas,您可以直接读取压缩文件,就像这样。

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

读取地理数据 zip 文件。

这种技术也适用于 zip 文件中的子文件夹。你只需要把它指向子文件夹。

技巧 2:用一个单独的类别标出缺失的数据

数据集中缺少数据并不罕见。创建带有缺失数据的 Choropleth 地图不会区分零值或空值,因此会将它们聚合到一个类别中。

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

但是,如果您需要空值有一个单独的类别,您可以如下面的代码片段所示来实现。

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

Geopandas 有。plot()方法为其所有的地理空间数据可视化接口,它可以带关键字参数 missing_kwds,在那里可以提供要使用的颜色和要调用的类别。

结果是这幅美丽的地图,图例中缺失值类别被着色为浅灰色。

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

缺少值的地图

技巧 3:将地理数据框导出到 PostGIS 数据库

我们经常使用 PostGIS 来存储和分析地理空间数据。使用 PostgreSQL 设置空间数据库,并像专业人员一样使用 Python 和 Geopandas 传输数据。

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

从 Python 导出到 PostGIS

技巧 4:使用 PyGEOS 加速空间运算

空间索引是空间操作的运行引擎。它通常需要更长的处理时间,但是在 Geopandas 中添加 PyGEOS 集成后,您可以加快和提高性能。

您需要做的就是将 use_pyges 设置为 True。

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

PyGEOS

使用这个新的 PyGEOS 集成,我发现我的处理时间有了显著的改进。因此,如果您使用大数据执行空间操作,请尝试一下。

技巧 5:使用 Contextily 向 Geopandas 图添加底图。

尽管我们认为这是理所当然的,但底图将我们的地图融入了语境。使用最新版本的 Geopandas,可以使用不同的底图提供商叠加您的地图。

以下代码片段显示了如何将底图合并到 Geopandas 图中。

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

背景底图

您在地图上的点有上下文和丰富的可视化底图。

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

工作草图

结论

处理地理空间数据并不困难。有了 Geopandas,它可以有效地处理地理空间数据。在本文中,我们分享了 Python 中空间数据的五个不同的技巧和诀窍。

如果你喜欢我在 Twitter 上发布的这些提示和技巧,你可以在 @spatialML 找到它们

熊猫的 5 个陷阱

原文:https://towardsdatascience.com/5-gotchas-with-pandas-974df6595e61?source=collection_archive---------15-----------------------

用熊猫做数据分析是非常简单的……但事实并非如此!在这篇博文中,我提出了一些你需要注意的关于熊猫的问题。

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

ImgFlip 生成的熊猫迷因

运行示例下载本 Jupyter 笔记本

这里有几个你可能会感兴趣的链接:

- [Labeling and Data Engineering for Conversational AI and Analytics](https://www.humanfirst.ai/)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Become a Growth Product Manager](https://imp.i115008.net/c/2402645/803127/11298) [Course]- [Deep Learning (Adaptive Computation and ML series)](https://amzn.to/3ncTG7D) [Ebook]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)

上面的一些链接是附属链接,如果你通过它们购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。

要升级你的熊猫游戏,请阅读:

[## 熊猫分析服务器

一个开源项目,简化了熊猫与实时数据的连接,测试假设和可视化…

towardsdatascience.com](/pandas-analytics-server-d9abceec888b)

1.读取多个文件

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

图片来自 Meme

假设我们想从一个文件夹中读取多个文件到一个熊猫数据帧中。Python 有一个路径库,可以列出某个文件夹中的所有文件,但我发现 glob 更容易使用。glob 支持正则表达式,这给了我们对想要读取的文件的粒度控制。注意,没有必要解压压缩文件,因为熊猫可以在阅读时自动解压。

为了指定我们想要读取哪些文件,我们在 glob 中使用了*.gz

filepaths **=** glob**.**glob('data/*.gz')# Output
['data/20191210.csv.gz', 'data/20191209.csv.gz', 'data/20191211.csv.gz']

glob 检测文件,但是它们没有排序。列表中日期为 2019-12-10 的文件在 2019-12-09 之前。如果我们像在这个例子中一样处理时间序列数据,这是一个问题。

为了获得时序数据的正确顺序,我们有两个选择(一个比另一个好):

  • 将文件按名称排序并按排序顺序读取(坏),
  • 在数据帧中读取所有数据后,按列对数据进行排序(首选)。

1.1 按文件名排序

让我们按名称对文件进行分类,以说明为什么这是个坏主意。

filepaths **=** sorted(filepaths)# Output
['data/20191209.csv.gz', 'data/20191210.csv.gz', 'data/20191211.csv.gz']

在本例中,对文件名进行排序是可行的,但是我们需要注意,对字符串进行排序不同于对整数进行排序,如下例所示。这是因为编程语言逐字符进行比较。依靠文件名来保证数据的正确顺序是一个坏主意。

在下面的例子中,我们分别对字符串和整数进行排序。

sorted(['100', '200', '1000', '20000', '9'])# Output
['100', '1000', '200', '20000', '9'] sorted([100, 200, 1000, 20000, 9])# Output
[9, 100, 200, 1000, 20000]

1.2 按列对整个数据帧进行排序

如上所述,按列对数据帧进行排序是一个更好的选择,但是我们需要注意列数据类型。

我们来读数据。

df_list **=** []
**for** filepath **in** filepaths:
    df_ **=** pd**.**read_csv(filepath)
    df_list**.**append(df_)df **=** pd**.**concat(df_list)

DataFrame 有多列,我们希望按时间戳对其进行排序。

df**.**head()

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

没那么快!让我们看看时间戳列的数据类型。

df**.**timestamp# Output
0         2019-12-09D00:00:18.265072000
1         2019-12-09D00:00:42.503391000
2         2019-12-09D00:01:50.513620000
3         2019-12-09D00:02:35.189775000
4         2019-12-09D00:03:49.934950000
                      ...              
389905    2019-12-11D23:35:26.637330000
389906    2019-12-11D23:35:26.637330000
389907    2019-12-11D23:37:25.166632000
389908    2019-12-11D23:40:09.701271000
389909    2019-12-11D23:55:46.793512000
Name: timestamp, Length: 1578327, dtype: object

时间戳列有一个对象类型。当我们对一个对象类型进行排序时会发生什么?

pd**.**Series(['100', '200', '1000', '20000', '9'])**.**sort_values()# Output
0      100
2     1000
1      200
3    20000
4        9
dtype: object

熊猫对象类型用于文本或混合数值和非数值。为了获得时间戳列的正确顺序,我们需要将其更改为 datetime64 类型。

df**.**timestamp **=** pd**.**to_datetime(df**.**timestamp**.**str**.**replace("D", "T"))
df**.**timestamp# Output
0        2019-12-09 00:00:18.265072
1        2019-12-09 00:00:42.503391
2        2019-12-09 00:01:50.513620
3        2019-12-09 00:02:35.189775
4        2019-12-09 00:03:49.934950
                    ...            
389905   2019-12-11 23:35:26.637330
389906   2019-12-11 23:35:26.637330
389907   2019-12-11 23:37:25.166632
389908   2019-12-11 23:40:09.701271
389909   2019-12-11 23:55:46.793512
Name: timestamp, Length: 1578327, dtype: datetime64[ns]

timestamp 列具有 datetime64 类型,我们现在可以继续排序了。

df **=** df**.**sort_values("timestamp")
df**.**head()

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

2.描述统计学

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

图片来自 MemeGenerator

当我不熟悉数据集时,describe 是我通常运行的第一个命令。我简要回顾了描述性统计数据,如计数、最小值和最大值,以查看数据是否被正确读取。

df**.**describe()

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

我有一段时间没有注意到的是,describe 只输出数字列的描述性统计数据。这是有意义的,因为我们不能用其他数据类型如字符串来计算它们。

当我们输出列时,我们看到有时间戳、符号等列。,上面没有列出。

df**.**columns# Output
Index(['timestamp', 'symbol', 'side', 'size', 'price', 'tickDirection', 'trdMatchID', 'grossValue', 'homeNotional', 'foreignNotional'], dtype='object')

幸运的是,describe 使用 include 参数,我们可以指定包含所有列。Include 参数也接受一个列表,我们可以在其中指定列的子集。

df**.**describe(include**=**'all')

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

3.可视化离群值

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

来自 Pinterest 的熊猫迷因

Pandas plot功能使我们能够快速可视化某一列的分布情况。

为了可视化某一列的异常值,我们可以使用一个箱线图。

df["size"]**.**plot(kind**=**"box")

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

在上面的图中,我们可以观察到大小有许多异常值,这使得箱形图没有信息。

我的解决方案是去掉底部和顶部的 1%分位数。

df['size_clip'] **=** df['size']**.**clip(df['size']**.**quantile(0.01), df['size']**.**quantile(0.99))df**.**size_clip**.**plot(kind**=**'box')

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

这使得盒图更具信息量,但我们需要尝试不同的分位数值,并在数据帧中添加一个新列。出现了一个问题,我们应该使用哪一列。有没有更好的办法?

Plot 函数采用 ylim 参数,在这里我们可以指定 y 轴的边界。这使得一个方框图更能提供信息,我们不需要在数据框中增加新的一列。

df["size"]**.**plot(kind**=**"box", ylim**=**(0, 5000))

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

4.宁滨数据

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

来自 Giphy 的熊猫玩耍

假设我们想将一个数值列转换成一个离散列。

4.1 将值装入离散区间

最直接的方法是指定 n 个间隔,并相应地绑定数据。熊猫有这样的功能。

让我们将价格列绑定到 5 个离散值。

df['price_discrete_bins'] **=** pd**.**cut(df**.**price, 5)# Output
0            (7462.2, 7575.6]
1            (7462.2, 7575.6]
2            (7462.2, 7575.6]
3            (7462.2, 7575.6]
4            (7462.2, 7575.6]
                  ...        
1309666    (7121.433, 7235.4]
1309667    (7121.433, 7235.4]
1309668    (7121.433, 7235.4]
1309669    (7121.433, 7235.4]
1309670    (7121.433, 7235.4]
Name: price_discrete_bins, Length: 1309671, dtype: category
Categories (5, interval[float64]): [(7121.433, 7235.4] < (7235.4, 7348.8] < (7348.8, 7462.2] < (7462.2, 7575.6] < (7575.6, 7689.0]]

正如我们所料,price_discrete_bins 有 5 个不同的值,每个 bin 一个。

df['price_discrete_bins']**.**value_counts()# Output
(7121.433, 7235.4]    419820
(7235.4, 7348.8]      367043
(7462.2, 7575.6]      301654
(7348.8, 7462.2]      200231
(7575.6, 7689.0]       20923
Name: price_discrete_bins, dtype: int64

剪切功能还使我们能够指定箱标签。另请参见 retbins 参数,它输出间隔和标签。

df['price_discrete_labels'] **=** pd**.**cut(df**.**price, 5, labels**=**['very low', 'low', 'mid', 'high', 'very high'])# Output
0              high
1              high
2              high
3              high
4              high
             ...   
1309666    very low
1309667    very low
1309668    very low
1309669    very low
1309670    very low
Name: price_discrete_labels, Length: 1309671, dtype: category
Categories (5, object): [very low < low < mid < high < very high]df**.**price_discrete_labels**.**value_counts(normalize**=**True)# Output
very low     0.320554
low          0.280256
high         0.230328
mid          0.152886
very high    0.015976
Name: price_discrete_labels, dtype: float64

4.2 将值装入大小相等的桶中

在进行数据分析时,最直接的方式并不总是最好的方式(或者我认为是其他方式)😊).上面我没有指出的是,极高值(0.015%)明显比其他值(都超过 15%)代表的少。如果我们打算在这个数据集上训练一个预测模型,这可能会带来一个问题:

  • 算法可能会过度拟合“非常高”的值,因为该值非常罕见,
  • 算法可以将“非常高”值的出现归因于错误,并完全跳过它。

有办法避免这个问题吗?

有。让我们将价格分成大小相等的箱,这样每个箱都有相同数量的值。

df['price_discrete_equal_bins'] **=** pd**.**qcut(df**.**price, 5)# Output
0            (7477.0, 7689.0]
1            (7477.0, 7689.0]
2            (7477.0, 7689.0]
3            (7477.0, 7689.0]
4            (7477.0, 7689.0]
                  ...        
1309666    (7121.999, 7212.5]
1309667    (7121.999, 7212.5]
1309668    (7121.999, 7212.5]
1309669    (7121.999, 7212.5]
1309670    (7121.999, 7212.5]
Name: price_discrete_equal_bins, Length: 1309671, dtype: category
Categories (5, interval[float64]): [(7121.999, 7212.5] < (7212.5, 7292.5] < (7292.5, 7348.5] < (7348.5, 7477.0] < (7477.0, 7689.0]] df**.**price_discrete_equal_bins**.**value_counts()# Output
(7121.999, 7212.5]    264009
(7292.5, 7348.5]      262610
(7348.5, 7477.0]      262396
(7477.0, 7689.0]      260412
(7212.5, 7292.5]      260244
Name: price_discrete_equal_bins, dtype: int64

5.处理缺失数据

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

来自 Giphy 的愤怒熊猫

在熊猫中,多个值表示一个缺失值:

  • NaN 表示数值/对象缺失值,
  • DateTime 的 NaT 缺少值,
  • None,来自 Python。

造成这种混乱的原因是(来自 pandas 文档):
选择在内部使用 NaN 来表示丢失的数据很大程度上是出于简单和性能的原因。我们希望 NumPy 很快能够提供一个本地 NA 类型的解决方案(类似于 R ),其性能足以用于熊猫。

让我惊讶的是 Python 中的 None 等于 None,而 numpy 中的 nan 不等于 nan。

None **==** None
Truepd**.**np**.**nan **==** pd**.**np**.**nan
False

这一点很重要,这样我们就不会按“无”来筛选值:

df[df.some_column == None]# instead use:
df[df.some_column.isnull()]

numpy nan 不等于自身的原因是什么?让我们潜入更深的地方。某些函数在不可计算时返回 nan。

pd**.**np**.**log(**-**1)nan pd**.**np**.**arccos(2)nan

这是否意味着函数的结果应该是相同的?显然不是。

pd**.**np**.**log(**-**1) **==** pd**.**np**.**arccos(2)False

关于缺失值行为的一些重要细节摘自 pandas 文档:

  • GroupBy 中的 NA 组被自动排除。
  • 对数据求和时,NA(缺失)值将被视为零。
  • 如果数据都是 NA,结果会是 0。
  • 像 cumsum()和 cumprod()这样的累积方法默认情况下忽略 NA 值,但是将它们保留在结果数组中。

结论

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

来自 Giphy 的强壮熊猫

这些是你在做数据分析时需要小心的一些关于熊猫的问题。希望你学到了新的东西。

在你走之前

Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的消息。

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

Unsplash 上由Courtney hedge拍摄的照片

面向终身学习者的 5 本伟大的数据科学书籍

原文:https://towardsdatascience.com/5-great-data-science-books-for-lifelong-learners-3a6405a7f890?source=collection_archive---------22-----------------------

在这次疫情期间,我对那些对机器学习感兴趣的人的阅读建议。

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

介绍

随着全球疫情的进行,我们所有人都被困在家里,现在是一个远离世界、补上阅读的好时机。虽然我喜欢阅读许多不同类型的书籍,但我发现最有成效的书籍类型很少,而且很少有详细解释统计学和机器学习的例子。作为一个终身学习者,书籍是推断全部剩余信息的伟大媒介,在某些主题上甚至可以超过互联网上可用的信息。

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

从零开始的数据科学

乔尔·格鲁什

数据科学模块是试验和熟悉数据科学的绝佳工具。然而,随之而来的一个大缺点是,熟悉**模块比熟悉模型容易得多。**从零开始的数据科学的伟大之处在于,它在一本 330 页的书里深入探究了几个行业标准模型究竟是如何实现的。虽然对这本书的主观看法似乎是复杂的,但它确实是我非常喜欢的一本书,你也可能喜欢。

首先,这本书提供了 Python 的速成课程,虽然“速成课程”可能不是学习编程的好方法,但我认为 Joel 的解释来自任何其他编程语言,肯定是恰当的。除了 Python 课程之外,这本书还附带了数据科学中线性代数的概要,以及涉及概率、基础和高级的统计学。

在整本书中,k 近邻、朴素贝叶斯、线性和逻辑回归、决策树、神经网络和无监督聚类等模型都得到了生动的详细讨论,并在我看来得到了很好的解释。这本书最后概述了自然语言处理和网络分析,这绝对是我推荐的一本书!

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

统计学习导论

作者:加雷斯·詹姆斯、丹妮拉·威滕、特雷弗·哈斯蒂和罗伯特·蒂布拉尼

与我讨论过的上一本书不同,这本书使用 R 而不是 Python 进行了完全不同的阐述。这本书介绍了 R 中一些最重要的建模和预测技术,以及相关的应用程序。与从头开始的数据科学相比,我认为这本书更适合初学者。这本书也有真正精心设计的彩色图形和真实世界的场景,它们结合在一起,成为一个易于理解的机器学习课程。

这本书的每一章都有一个很棒的教程,介绍如何在 r 中实现不同的分析和建模模块。

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

统计学习的要素

作者:特雷弗·哈斯蒂、罗伯特·蒂布拉尼和杰罗姆·弗里德曼

许多主题在统计学习的元素中被很好地覆盖,包括模型绘图、神经网络、支持向量机、分类树和梯度推进。这本书深入探讨了你可能会想到的东西:有监督的学习,也有无监督的学习。这本书被广泛认为是任何一本书中第一个全面论述这一主题的主要著作之一。Hastie、Tibshirani 和 Friedman 都是斯坦福大学的统计学教授,都是统计学领域的杰出研究者。

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

统计卡通指南

拉里·戈尼克和伍尔科特·史密斯

与前几本书来了一个一百八十度的大转弯的是*统计学的卡通指南,*这本书使用漂亮的插图和简单的解释,以一种真正独特而美丽的方式解释统计学。我不仅因为这本书有时非常有趣的插图而读得很开心,而且里面也有很多信息。虽然它可能没有这个列表中其他书籍的统计水平高,但我认为它绝对符合它迷人的艺术风格和对初学者友好的性质。

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

算法设计手册

史蒂文·s·斯基埃纳

虽然数据科学经常面临更多的问题——统计比编写算法更重要,但在许多不同的情况下,成为算法向导对任何数据科学家来说都是一个巨大的好处。《算法设计手册》深入探讨了如何从头开始创建高级、复杂的算法。

这本书的伟大之处在于,它吸取了真实的、实际的经验,并把它压缩在短短的 486 页中。这本书分为两大部分,第一部分是算法设计和分析的广泛介绍。这本书的第二部分是参考部分,这是一个各种各样的“词汇表”,包含 75 种需要熟悉的最重要的算法。这不仅是一本值得一读的好书,也是一本可以随身携带以供参考的好书!

结论

这些是我个人最喜欢的书籍,从统计学到机器学习和开发算法。总的来说,我认为这些书对长期使用特别有益,因为我经常参考像从头开始的数据科学算法设计手册这样的书。

幸运的是,数据科学文献远没有以前那么少了,而且每天都有更多的书籍需要解读。虽然这对于终身学习者来说绝对是一个很好的情况,但整个机器学习书籍图书馆可能会令人望而生畏。这些是我最喜欢的关于数据科学、机器学习、统计学和计算机科学的书,但是我很想知道你推荐读什么!有没有哪本书是你获得大量知识的原因?

使用 Tableau 的 5 种数据可视化技术

原文:https://towardsdatascience.com/5-hacky-tableau-techniques-cf3b039345ea?source=collection_archive---------8-----------------------

用简单的方式解决画面的局限性

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

Tableau 是一个功能强大且易于使用的数据可视化工具。然而,当我们想要创建一个高级仪表板时,有时功能的限制会阻碍我们。

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

我的画面项目

  1. 行分隔符
  2. 页码
  3. 搜索框
  4. 带标记的折线图
  5. 带有 URL 链接的文本
  6. 其他酷酷的画面特色

1.行分隔符

行分隔符可以帮助您的受众更好地理解仪表板中各部分之间的关系以及内容的层次结构。在 Tableau 中创建行分隔符有很多方法,我们将介绍使用文本框的方法。

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

行分隔符

1.1 创建一个文本对象

将一个文本框从浮动层拖到仪表板上

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

将一个文本框从浮动层拖到仪表板上

1.2 配置布局选项卡

布局的选项卡中

a)将文本框的高度设置为 1 像素

b)将宽度设置为略小于仪表板宽度

c)将背景颜色设置为黑色

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

布局页签中,设置高度宽度背景颜色

现在,您可以在仪表板上看到一个行分隔符。

2.页码

添加分页以使受众能够在仪表板之间导航有助于提供更流畅的用户体验,并更好地理解内容之间的相互关系。由于 Tableau 没有分页特性,我们将通过使用动作特性来解决这个问题。

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

页码

2.1 为每个仪表板创建一张表

对您的所有仪表板重复以下步骤

a)创建一个新工作表,用您仪表板的编号命名

b) 创建一个计算字段… 以仪表板编号字符串作为内容

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

创建计算字段……

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

以仪表板编号字符串作为内容

c)将尺寸拖到板材上

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

尺寸拖到板材上

d)将板材拖到仪表板上

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

板材拖至仪表板

2.2 配置操作

a)在仪表板栏下,选择动作…

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

仪表板栏下,选择动作…

我们需要为我们想要导航到的每个仪表板配置一个操作。对每个仪表板重复以下步骤:

b)点击添加动作 > 转到工作表…

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

点击添加动作 > 转到工作表…

c) 源表:选择全部,这将启用对您所有表的操作,下面,只检查与仪表板号对应的表

d) 运行动作于:选择选择,我们要通过选择分页来触发动作

e) 目标表:选择目标仪表板

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

在动作中配置源片运行动作、目标片

现在,如果您单击仪表板上的分页,您将被导航到相应的仪表板。

3.搜索框

当受众对大型数据集中的特定主题感兴趣时,搜索框非常有用。

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

搜索框

3.1 为搜索框创建一个参数

a)将数据类型设置为字符串并将当前值设置为空值

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

数据类型设置为字符串并将当前值设置为空值

b)在搜索框的下拉菜单下,选择显示参数控制

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

选择显示参数控制

3.2 创建用于筛选的计算字段

a)使用 CONTAINS() 函数过滤数据

b)将计算字段重命名为筛选器

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

创建用于筛选的计算字段

c)将过滤器维度拖到过滤器部分

d)仅选择真值

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

仅选择真值

现在,您可以在搜索框中键入文本,仪表板将呈现过滤后的数据。

4.带标记的折线图

有时我们想在线图上添加一个标记,以强调特定的数据点。在 Excel 中配置可能很容易,但在 Tableau 中就不容易了。

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

带标记的折线图

a)我们首先以通常的方式创建一个线图

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

创建线形图

b)然后我们再次将我们的 y 变量拖到架上。复制的线图将显示在原始线图的下方。在第二个 y 变量的下拉菜单下,选择双轴。这两块地将合二为一。

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

选择双轴

c)右击右侧 y 轴,选择同步轴

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

同步轴

d)在标记部分,选择第二个图。在下拉菜单下,选择。现在,您可以在线图中看到圆形标记。

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

标志>圆圈

5.带有 URL 链接的文本

Medium 不允许在文本中直接嵌入 URL 链接。然而,我们可以用动作特性来解决这个问题。

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

带有 URL 链接的文本

5.1 为文本创建一个表

a)为文本创建一个表

b) 创建一个计算字段,以文本字符串作为内容

c)将尺寸作为文本拖到图纸上

d)将颜色更改为蓝色,表示它是链接嵌入的

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

5.2 将文本作为浮动对象拖动到仪表板上

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

5.3 转到仪表板栏> 动作 > 添加动作 > 转到 URL……

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

5.4 在配置中粘贴 URL ,在上运行动作选择

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

现在,您可以通过单击文本对象导航到目标 URL。

6.其他酷酷的画面特色

6.1 自动生成的标题

如果你没有时间,想要一个简短的说明,Tableau 可以帮你做到。

只需转到工作表 > 显示标题

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

自动生成的字幕

6.2 地图图层

Tableau 提供了许多地图功能。进入地图 >地图图层,你可以改变背景颜色,显示城市边界,甚至自动在你的地图上绘制美国人口数据。

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

地图图层

— — — — — — — — — — — — — — — — — —

如果你对 Tableau 有任何问题,欢迎在下面评论。

本周(11 月 8 日)你应该阅读的 5 篇有趣的人工智能/人工智能文章

原文:https://towardsdatascience.com/5-interesting-ai-ml-articles-on-medium-you-should-read-this-week-nov-8-bd42448e6493?source=collection_archive---------38-----------------------

关于人工智能和机器学习发展的文章的评论和总结。

随着我们越来越接近多事之秋,我想增加我消费的人工智能内容的数量。

更具体地说,我想回顾 2020 年,对自己通过阅读文章、研究论文、观看在线课程和教程所积累的知识感到满意。我敢肯定,对于大多数机器学习从业者来说,这大概是一样的。

在这一点上,本周推荐的文章将丰富你关于基于人工智能的技术、产品和发展的信息。

快速总结:

  • 亚历山德罗·克里米博士向读者介绍了在脑机接口领域与 Neuralink 不相上下的初创公司。
  • 丽莎·帕尔默探讨了商业和组织中对话的应用和益处。
  • Nishu Jain 的文章快速浏览了著名人工智能技术和算法的细节。
  • Sam Palani 解释了变压器网络的架构细节。
  • Shareef Shaik 提供了一个蓝图,机器学习从业者可以采用它来有效地学习算法和机器学习概念。

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

图片作者:Richmond Alake

如果你在 Medium 上写人工智能/人工智能内容,你希望我阅读你的文章,并将其包含在我的每周/每月文章报道中,请随时在你的文章的评论部分给我加标签,或者连接并发送一个链接到LinkedIn上的文章。

5 家初创公司打破了神经技术和脑机接口的界限,优于 Neuralink 作者:亚历山德罗·克里米博士

你可能知道埃隆·马斯克的 Neuralink 公司,但你可能不知道分散在世界各地的初创公司也在影响神经技术领域。

在这篇文章中,Alessandro 博士提供了五家初创公司的名称和简介,这些公司正在生产或已经生产出与 Neuralink 的大脑植入芯片相比,可以以更实用和非侵入性的方式应用的产品。

我不得不承认,像大多数读者一样,我从未听说过这些初创公司,我很高兴看到有几种不同的努力致力于使脑机接口成为日常生活的一个方面。

一些提到的创业公司在有限的资金和人力资源下取得了值得称赞的成就。

[## 5 家创业公司打破了神经技术和脑机接口的界限,比…

更多的机器学习和更少的笨重硬件

medium.com](https://medium.com/the-innovation/5-startups-breaking-the-boundaries-in-neurotechnology-and-brain-computer-interfaces-better-than-2a3864e50ecb)

对话式人工智能:谈论我们的数字化转型之路作者丽莎·帕尔默

丽莎·帕尔默写了一篇文章,探讨了 B2B(企业对企业)组织中会话式人工智能的应用、好处和影响。根据文章中的解释,对话式人工智能有两种主要形式,要么是人工智能驱动的人类声音,要么是人工智能聊天机器人。

虽然这篇文章探讨了 converstaional I 带来的业务影响和组织转变,但也包含了对 converstaional I 的描述,以及它如何应用于组织网站和应用程序以增强其客户/业务关系。

我会将这篇文章推荐给担任管理角色或业务决策角色的机器学习从业者,因为这篇文章为一项技术的集成创造了一个案例,这项技术无疑将在未来几年内流行。

你已经可以见证自然语言处理在应用人工智能中的影响,特别是有几个网站拥有人工智能聊天机器人来解决客户和访客提出的常见问题。

这篇文章不同于你在 Medium 上遇到的关于 AI 或 ML 的典型技术文章。丽莎·帕尔默写了一份我可以称之为从商业、组织和战略角度验证人工智能整合的文件。

希望说服团队、高管或公司利益相关者尽早利用人工智能的读者会发现这篇文章的价值。

[## 对话式人工智能:谈论我们的数字化转型之路

数字化转型似乎令人望而生畏。一个简单的起点怎么样?你想改善你的服务吗…

palmerlisac.medium.com](https://palmerlisac.medium.com/conversational-ai-talking-our-way-to-digital-transformation-1674646117ae)

值得了解的 10 项改变游戏规则的人工智能突破作者尼舒·贾恩

Nishu 写了一篇有趣的文章,快速浏览了近年来开发的著名人工智能技术和算法的细节,而没有牺牲所提供信息的质量。

这篇文章在我的每周推荐列表中,因为它提供了一些常规机器学习技术背后的概念直觉。

对于每一个提到的 AI 开发,都有足够的信息来提供对所介绍技术的高层次理解,最重要的是,Nishu 提供了简单的描述和创造性的类比,使这篇文章对于所有级别的 AI 爱好者和从业者都是可读的。

列表中一个值得注意的例外是变压器架构。

不用担心,因为下面的下一篇推荐文章将涵盖这种新颖的深度学习架构。

我建议快速阅读这篇文章,因为它介绍了人工智能算法背后的起源和思想,而不需要教科书。

[## 值得了解的 10 个改变游戏规则的人工智能突破

过去几十年中引人入胜的想法和概念

medium.com](https://medium.com/towards-artificial-intelligence/10-game-changing-ai-breakthroughs-worth-knowing-about-b2076afc4930)

变形金刚背后的直觉——注意力是你所需要的全部

这是您推荐的本周技术文章!

Sam Palani 介绍了主要用于自然语言处理和语言建模领域的各种神经网络体系结构。

在这篇写得很好的技术文章中,简要介绍了 RNN(递归神经网络)、LSTM(长短期记忆)和注意力机制等架构的描述和局限性。

文章的主要内容是围绕 2017 年发布的变压器架构,该架构解决了以前使用的架构的局限性。

Sam 的文章是对 Transformer 体系结构的技术内部工作的快速总结,许多技术读者都会喜欢。Sam 提供了从介绍变压器网络的原始研究论文中获得的图像,并对每个图像的每个组件进行了解释。

[## 变形金刚背后的直觉——注意力是你所需要的

传统的递归神经网络及其变体已经广泛用于自然语言处理…

towardsdatascience.com](/the-intuition-behind-transformers-attention-is-all-you-need-393b5cfb4ada)

有效学习机器学习算法的诀窍ByShareef Shaik

Shareef Shaik 探讨了机器学习库和工具对正在探索机器学习的个人的影响,这是一种错误的看法,即机器学习局限于利用少数模型和预先实施的方法。

Shareef 的文章提供了一个详细的蓝图,说明如何构建机器学习项目,以及如何有效地分析和学习机器学习算法。

我会把这篇文章推荐给自学机器学习的从业者和那些正在学习机构课程的人。

Shareef 有效地提供了我只能描述为发展正确理解的秘诀,这是成功的机器学习生涯所必需的。

[## 有效学习机器学习算法的诀窍

我希望我在开始自学时就知道这一点。

towardsdatascience.com](/know-how-to-learn-machine-learning-algorithms-effectively-81766fe442e0)

我希望这篇文章对你有用。

要联系我或找到更多类似本文的内容,请执行以下操作:

  1. 订阅我的 邮件列表 获取每周简讯
  2. 跟着我上
  3. 通过 LinkedIn 联系我

5 个有趣的 Python 库

原文:https://towardsdatascience.com/5-interesting-python-libraries-1395c791deb5?source=collection_archive---------7-----------------------

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

约书亚·科尔曼在 Unsplash 上拍摄的照片

你有没有想过数据可视化可以在命令行中实现?

作为最受欢迎的编程语言之一,Python 拥有大量优秀的有利于开发的库,如 Pandas、Numpy、Matplotlib、SciPy 等。

然而,在本文中,我将向您介绍一些更有趣而不是非常有用的库。我相信这些库可以展示 Python 的另一面和社区的繁荣。

1.Bashplotlib

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

David WerbrouckUnsplash 上拍摄的照片

老实说,当我第一次看到这个图书馆时,我质疑为什么人们会需要它?Bashplotlib 是一个 Python 库,它使我们能够在命令行 stdout 环境中绘制数据。

很快我意识到,当你没有任何可用的 GUI 时,它可能会有用。嗯,这种情况可能不太常见,但这并不妨碍我的好奇心,并觉得这是一个非常有趣的 Python 库。

Bashplotlib 可以用pip轻松安装。

pip install bashplotlib

让我们看一些例子。在下面的代码中,我导入了numpy来生成一些随机数组,当然还有bashplotlib

import numpy as np
from bashplotlib.histogram import plot_hist
arr = np.random.normal(size=1000, loc=0, scale=1)

plot_hist是来自bashplotlib的函数,用于绘制直方图中的一维数据,就像 Matplotlib 中的plt.hist一样。然后,我使用 Numpy 生成一个随机数组,其中包含 1000 个正态分布的数字。之后,我们可以很容易地将这些数据绘制如下:

plot_hist(arr, bincount=50)

输出是这样的

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

那不是很有趣吗?😃

此外,您可以将文本文件中的数据绘制成散点图。

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

2.漂亮的桌子

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

Goran IvosUnsplash 上拍摄的照片

我刚才介绍的 Bashplotlib 用于在命令行环境中绘制数据,而 PrettyTable 用于以漂亮的格式输出表格。

同样,我们可以使用pip轻松安装这个库。

pip install prettytable

首先,让我们导入库。

from prettytable import PrettyTable

然后,我们可以使用PrettyTable创建一个表格对象。

table = PrettyTable()

一旦我们有了表对象,我们就可以开始添加字段和数据行。

table.field_names = ['Name', 'Age', 'City']
table.add_row(["Alice", 20, "Adelaide"])
table.add_row(["Bob", 20, "Brisbane"])
table.add_row(["Chris", 20, "Cairns"])
table.add_row(["David", 20, "Sydney"])
table.add_row(["Ella", 20, "Melbourne"])

要显示表格,只需简单地打印它!

print(table)

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

PrettyTable 还支持细化表格样式,几乎可以从任何角度来看。例如,您可以右对齐表格中的文本:

table.align = 'r'
print(table)

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

按列对表格排序

table.sortby = "City"
print(table)

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

您甚至可以获得表格的 HTML 字符串

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

3.模糊的

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

布雷特·乔丹Unsplash 上的照片

在我看来,这个图书馆不仅非常有趣,而且非常有用。很多时候你可能想为你的程序实现一个“模糊”的搜索特性。FuzzyWuzzy 为此提供了一个开箱即用的轻量级解决方案。

照常从pip开始安装。

pip install fuzzywuzzy

导入库:

from fuzzywuzzy import fuzz

让我们做一个简单的测试。

fuzz.ratio("Let’s do a simple test", "Let us do a simple test")

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

如图所示,结果“93”意味着这两个字符串有 93%的相似性,这是相当高的。

当你有一个字符串列表,并且你想搜索所有字符串的时候,FuzzyWuzzy 会帮助你提取最相关的字符串。

from fuzzywuzzy import processchoices = ["Data Visualisation", "Data Visualization", "Customised Behaviours", "Customized Behaviors"]process.extract("data visulisation", choices, limit=2)
process.extract("custom behaviour", choices, limit=2)

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

在上面的例子中,参数limit告诉 FuzzyWuzzy 为您提取“前 n 个”结果。否则,您将获得一个包含所有这些原始字符串及其相似性得分的元组列表。

4.TQDM

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

照片由 Jungwoo HongUnsplash 上拍摄

你通常使用 Python 开发命令行工具吗?如果是这样,这个有趣的库将在您的 CLI 工具处理一些耗时的事情时通过显示进度条来指示已经完成了多少来帮助您。

再次使用pip进行安装。

pip install tqdm

当你有一个使用range函数的 for 循环时,只需用 tqdm 的trange来代替它。

from tqdm import trangefor i in trange(100):
    sleep(0.01)

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

更一般地,你可能想要循环一个列表。使用 tqdm 也很简单。

from tqdm import tqdm
for e in tqdm([1,2,3,4,5,6,7,8,9]):
    sleep(0.5)  # Suppose we are doing something with the elements

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

tqdm 不仅适用于命令行环境,也适用于 iPython/Jupyter 笔记本。

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

图片提供:https://github.com/tqdm/tqdm

5.彩色光

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

照片由格雷森·乔拉蒙Unsplash 上拍摄

你想给你的命令行应用增加一些色彩吗?Colorama 可以让您轻松地以自己喜欢的颜色输出所有内容。

再次安装 Colorama 需要pip

pip install colorama

Colorama 支持在“前景”(文本颜色)、“背景”(背景颜色)和“样式”(颜色的额外样式)中渲染输出文本颜色。我们可以进口

from colorama import Fore, Back, Style

首先,让我们用黄色显示一些警告。

print(Fore.YELLOW)
print("This is a warning!")

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

然后,让我们试着用红色背景显示一些错误。

print(Back.RED + Fore.WHITE + "This is an error!")

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

那红色太亮了。让我们使用“暗淡”风格。

print(Back.RESET + Style.DIM + "Another error!")

在这里,我们设置“重置”为回改变背景颜色为默认。

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

“暗淡”风格使字体看不见。当我们想把一切恢复正常时,只需将“样式”设置为“重置所有”

print(Style.RESET_ALL)

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

摘要

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

照片由 twinsfischUnsplash 上拍摄

感谢这些为 Python 社区做出贡献并使其繁荣的开源开发者。

在我见过 Bashplotlib 库之前,我不得不说我从来没有过在命令行环境中绘制数据的想法。不管它对你是否有用,我要说的是,人们的发展思想和创造力的多样性从未停止。

[## 通过我的推荐链接加入 Medium 克里斯托弗·陶

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

medium.com](https://medium.com/@qiuyujx/membership)

如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)

Jupyter 笔记本扩展,用于全面组织的数据科学项目

原文:https://towardsdatascience.com/5-jupyter-notebook-extensions-for-a-fully-organized-data-science-project-d764195f91be?source=collection_archive---------31-----------------------

解释了 5 个实用的 Jupyter 技巧…

在数据科学项目笔记本上工作时,我每分钟都在创建代码和标记单元格,打印变量,获得结果,可视化数据,尝试数十种可视化效果以找到最好的……如果我在整个过程中没有保持良好的组织,我就无法在截止日期前完成项目。

在这篇文章中,我将分享我每天在做项目时使用的 Jupyter 笔记本扩展。

如何安装 Jupyter 笔记本扩展?

在终端:

pip install jupyter_contrib_nbextensions

在朱庇特笔记本里:

! pip install jupyter_contrib_nbextensions

安装笔记本扩展后,点击主页标签,然后点击nb 扩展。

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

选择可折叠标题、代码折叠、目录(2)、Autopep8 和 ExecuteTime。

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

打开笔记本后,您会看到下面的工具栏。

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

是时候发现这 5 个扩展了:

1.可折叠标题

这种扩展将使你在技术演示中更有条理。

这是你所有的项目:只有一行!

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

浏览这些可折叠的标题非常容易。

2.代码折叠

这是代码单元中一个可折叠的标题。如果你使用这个扩展,你的代码会看起来更短。隐藏长代码单元格。蓝色左右小箭头表示可以打开这条线。

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

3.目录

这是笔记本中目录扩展的图标。

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

当你点击它时,左边会弹出一个窗口。

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

您可以通过单击设置按钮来更改设置。

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

在这个扩展中最好的事情是,你什么都不做。目录是自动准备的。你只需将标题放在减价单元格中,它就会自动给你的标题编号。爱死了!

4.Autopep8

什么是 PEP-8 风格?

PEP-8 是关于如何编写易读和一致的代码的指南。它是由吉多·范·罗苏姆、巴里·华沙和尼克·科格兰在 2001 年写的。

如何安装 autopep8?

python3 -m pip install autopep8

这段代码将 autopep8 安装到 Python3 上

如何使用 autopep8?

前往您想要符合 pep8 标准的单元格。只需点击工具栏上的这个图标。

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

它会改变你的代码,

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

变成类似的东西。

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

酷!

5.执行时间

如果要处理大量数据,执行时间很重要。你试图降低计算成本,让你的代码运行得更快。您可以测量所有单元的运行时间和时间戳,而不是使用%timeit 或%time 命令。

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

结论

Jupyter 笔记本有大约 60 个扩展。我只分享了其中的 5 条,它们让我的生活变得更轻松。只需点击即可发现其他扩展。

非常感谢您对 seymatas@gmail.com 的任何建议!

用于训练 GANs 的 5 个 Kaggle 数据集

原文:https://towardsdatascience.com/5-kaggle-data-sets-for-training-gans-33dc2e035161?source=collection_archive---------21-----------------------

GANs 入门的有用数据集

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

来源

生成对抗网络(GANs)是一组深度神经网络模型,由 Ian Goodfellow 在 2014 年推出,用于生成合成数据。GANs 已被用于各种各样的任务,包括改善天文图像,提高旧视频游戏的分辨率,以及最著名的应用“deepfakes”,涉及人类图像合成。在本帖中,我将介绍一些可以用来训练 GAN 模型的有趣数据集。这个数据目录可以作为那些有兴趣开始构建 GAN 模型的人的起点。

我们开始吧!

首先,让我们简要回顾一下 GAN 模型背后的概念。GAN 由两个竞争的神经网络、一个生成器和一个鉴别器组成。生成器是一个修改的卷积神经网络,它学习从噪声中产生合成数据。鉴别器是一个卷积神经网络,它学习区分伪数据和真实数据。随着模型训练的进行,鉴别器在区分真实和虚假数据方面变得更好,生成器在生成真实数据方面变得更好。

现在,让我们进入一些有趣的数据集。

抽象艺术数据

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

来源

这个数据集包含了 2782 幅从 wikiart.org 刮来的抽象艺术图像。此数据可用于构建 GAN,以生成抽象艺术的合成图像。数据集包含梵高、达利、毕加索等的真实抽象艺术图像。

用秀丽隐杆线虫进行高含量筛选

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

来源

该数据包含与使用蛔虫秀丽隐杆线虫寻找新型抗生素的筛选相对应的图像。该数据包含感染了一种名为*粪肠球菌的病原体的蛔虫图像。*一些图像是未经抗生素氨苄青霉素处理的蛔虫,其他图像是经氨苄青霉素处理的感染蛔虫。对于那些对将 GANs 应用于有趣的药物发现问题感兴趣的人来说,这是一个很好的起点!

肺部胸部 X 线异常

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

来源

该数据集包含由放射科医师临床标记的胸部 X 射线图像。有 336 个患有肺结核的胸部 X 射线图像和 326 个对应于健康个体的图像。对于那些对使用 GANs 进行医学图像数据合成感兴趣的人来说,这是一个很好的数据源。

假面

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

来源

这些数据实际上包含了 GANs 生成的人脸合成图像。这些图片是从网站上刮来的这个人不存在。每当你刷新页面时,该网站就会生成一个由 GAN 生成的新的假人脸图像。对于用 GANs 生成合成图像来说,这是一个很好的数据集。

戴眼镜还是不戴眼镜

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

来源

这个数据集包含戴眼镜的人脸图像和不戴眼镜的人脸图像。虽然这些图像是使用 GANs 生成的,但它们也可以作为生成其他合成图像的训练数据。

结论

总之,在这篇文章中,我们讨论了五个 Kaggle 数据集,它们可以用来生成 GAN 模型的合成图像。这些数据源应该是您尝试 GANs 的良好起点。如果你对一些帮助你开始使用 GANs 的有用代码感兴趣,可以看看这篇GANs Kaggle 笔记本简介。我希望你觉得这篇文章有用/有趣。感谢您的阅读!

与数据隐私相关的 5 个关键人工智能问题

原文:https://towardsdatascience.com/5-key-ai-problems-related-to-data-privacy-f39558290530?source=collection_archive---------20-----------------------

隐私

解决机器学习模型的问题将如何提高数据隐私合规性

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

连浩曲Unsplash 上拍照

隐私不仅是与人工智能(AI)相关的问题,也是任何数据相关领域的问题。它是关于人们控制他们的个人数据和基于这些数据做出的决定。

在欧洲,2018 年生效的《一般数据保护条例》( GDPR)规范了个人数据的收集和使用。[1]数据保护法并未明确提及人工智能或机器学习,但重点关注个人数据的大规模自动化处理和自动化决策。这意味着,如果人工智能使用个人数据,它就属于该条例的范围,并适用 GDPR 原则。这可以通过使用个人数据来训练、测试或部署人工智能系统。不遵守 GDPR 可能会导致相关公司受到巨额处罚。

一些个人数据的例子包括出生日期、邮政编码、性别,甚至是用户的 IP 地址。

具体来说,GDPR 教赋予个人不受完全自动化的决定支配的权利。对人工智能专家来说,关键问题是:当你在人工智能的帮助下对一个人做出决定时,你如何证明你公平、透明地对待了他,或者给他们机会质疑这样的决定?

尽管 GDPR 与欧洲和英国最为相关,但其主要原则和思想应该与全世界相关。

从人工智能的角度考虑什么?

虽然模型的公平性和可解释性是人工智能中活跃的研究主题,但在数据隐私方面,你可能已经考虑了至少 5 个因素。

1)阶层失衡

当你的培训标签不成比例地偏向某个特定的班级时,就会出现班级失衡。换句话说,在二进制分类问题中,输出为 0 的例子很多,但输出为 1 的例子很少,反之亦然。这可能是由于数据收集过程中的偏差,例如仅从本地分支机构收集的数据,或者是域的固有属性,例如在制造过程中识别异常数据点。

类别不平衡是模型偏差最常见的原因之一,但它经常被数据科学家忽略。这是因为,通常,微小的不平衡不会造成巨大的风险,因为模型可以同样好地学习所有类的特征。然而,当出现严重的阶级失衡时,事情就变得棘手了。具体来说,少数阶级会更难预测,所以你的模型偏向多数阶级。

例如,当你训练一个人工智能系统来识别图像时,你可能会面临许多潜在的问题,类别不平衡可能就是其中之一。想想一组 100,000 张图片,其中只有 100 张是猫的图片,99,900 张是狗的图片。你训练的人工智能系统更有可能预测一只狗,因为它被训练得更频繁;它没有足够的反面案例来准确区分这两种类型的图像。

这个潜在的问题并不像错误地给猫和狗分类那样无辜。假设您正在训练一个接受或拒绝个人贷款的模型,而大多数历史贷款都被拒绝了(出于某种原因)。你猜怎么着。您的模型可能会拒绝大多数或所有未来的贷款申请,因为它更多地暴露于此类信息,并且可能没有学会区分这两种情况。从数据隐私的角度来看,这是一个问题,因为该模型不会产生公平的结果。

缓解措施:

首先,尽早确定这是否是一个问题非常重要。你可以通过了解属于你的每个类的数据点的数量来检查:df[‘your_label’].value_counts()

如果您确实注意到了类别不平衡,但是您仍然对您的数据运行一个简单的模型,那么您可能会在准确性方面得到很好的结果。您的测试数据可能与您的训练数据遵循相同的分布,因此,如果大多数实例主要来自一个类,则总是预测该类会给出良好的准确度分数。

但是不要被这个愚弄了。通常情况下,混淆矩阵会让你更好地了解你的模型实际在做什么。减轻相关问题的一个主要且最简单的策略是随机重采样。您可以减少多数类以匹配少数类(欠采样)或过采样少数类。

实际上,

count_0, count_1 = df.target.value_counts()
df_class_0 = df[df[‘your_label’] == 0].sample(count_1)#under sample

或者

df_class_1 = df_class_1.sample(count_0, replace=True)#over sample

你同样可以像 Imblearn 一样使用 NumPy 或其他库对数据进行采样。此外,还有很多方法可以解决这个问题,比如 SMOTE 和 Tomek 链接。

2)易受敌对攻击

对一个人工智能系统的对抗性攻击可以完全扰乱系统。例如,图像识别系统被证明有弱点或容易受到恶意攻击。研究人员已经表明,即使人工智能系统在成千上万张图像上进行训练,图像中精心放置的像素也可以从根本上改变人工智能系统对它的感知,从而导致错误的预测。[2]这可能会对涉及个人身份识别的实际应用产生严重影响。想象一个安全摄像头拍摄的场景,其中 AI 系统因为这种类型的攻击而错误地识别了罪犯。

缓解措施:

我们需要让我们的深度学习模型更加健壮。不幸的是,这个问题很棘手。目前,全球顶尖大学正在对这一问题进行研究。然而,在理论上,你应该能够测试你的模型,不仅仅是在一个看不见的测试数据集上,还可以模拟这些敌对的攻击来评估它的健壮性。深度学习模型中被错误激活的神经元可能会被丢弃,以提高鲁棒性。【2019 年的这篇文章讨论了这样的方法。

3)再现性和一致性

人工智能中的一个常见问题是,复制我们获得的结果或我们生成的模型有多容易。许多算法在训练它们的模型时具有随机元素。因此,不同的训练运行产生不同的模型(假设不同的随机种子),并且不同的模型可能具有不同的预测结果。我们如何确保与个人有关的预测不会被基于相同数据训练的下一个模型逆转?

此外,在本地机器上使用我们的数据表现良好的系统,在现场测试时可能表现不佳。我们如何确保我们最初拥有的性能传播到部署的应用程序?我们如何确保系统的性能不会随着时间的推移而恶化,从而影响对个人的决策?

缓解措施:

这些是多重相关的问题,需要采取多种方法。为了确保结果的一致性,您通常应该采用交叉验证技术,以确保您的结果不是基于训练集和测试集的幸运分割。参见这篇文章获得实践指导。

此外,对于预测模型,您可以进行反向测试,并评估如果在过去的某个时间点部署它,并且仅给出到该时间点的训练数据,性能会如何。

此外,在具有相似输入的完全不同的数据集上评估您的模型,以检查其在给定数据集之外的泛化能力,这是一个好主意。不过,重要的是,当您在现实世界中部署模型时,数据应该遵循与您的训练模型相同的分布。在任何其他情况下,性能都会不可预测地下降。

最后,监视已部署的模型并评估其在新数据上的性能始终是一个好的实践。在性能突然下降或漂移的情况下,这可能是模型需要重新训练的信号。当然,这也将取决于具体的应用。根据应用程序的不同,您可能有一个适当的再培训策略,每天、每周、每季度、每年等等都有一个新的模型。

4)评估指标

构建人工智能系统的关键问题应该是“我们如何评估系统?”。最常见的指标之一是准确性。换句话说,无论你的模型在所有测试样本中预测正确与否。但是准确性是一个好的衡量标准吗?想想一个问题,你有 100 个女人,其中 10 个怀孕了。假设你有一些关于这些妇女的信息,你试图建立一个模型来预测谁怀孕了,谁没有。你这样做,你的模型有 85%的准确率。这是否意味着你有一个好的模型?另一方面,让我们假设你没有模型,你宁愿做的是预测所有女性都没有怀孕。令人惊讶的是,这个准确率高达 90%,因为你 100 次中有 90 次是正确的。这比你上面创建的实际模型更好吗?那么,我们使用什么指标,我们如何评估模型的性能?对于影响个人的决策,你会仅仅依靠准确性吗?

缓解措施:

答案显然是否定的。事实上,通常情况下,最好的方法是比较多个指标,并仔细检查混淆矩阵,以了解您的模型的优点和缺点。

因此,对于上述有 90%准确率的简单方法,F1 分数实际上是 0,因为没有真阳性(只有真阴性)。相反,您 85%准确性的模型实际上可能有 67%的 F1 值,这在特定应用中可能是可接受的,也可能是不可接受的。要寻找的其他度量是接收器操作特性(ROC)的曲线下面积(AUC)、精确度、召回率和特异性,仅举几个例子。

5)黑天鹅事件

依靠历史数据来预测未来并不总是可行的。一个很好的例子是试图预测股票市场。由于多种原因,这在本质上是困难的。利用长期以来具有某种结果的数据,可以创造出在其历史范围内有效的模型。这意味着,如果你在一个没有市场崩溃的时期训练一个模型,这个模型是不可能预测到市场崩溃的。即使你在市场崩盘期间训练了它,由于事件的罕见性和缺乏指向该方向的明确信号,该模型仍然不太可能知道何时会发生崩盘。现在,想想在全球疫情时代做出影响个人决策的模型。因为所有的模型在过去都没有类似的数据,所以不太可能像在疫情之前那样准确地对个人做出决策。

缓解措施:

在这种情况下,为了在新的现实中操作,模型可能需要利用从新的情况中获取的数据进行重新训练。这可能会暂时奏效,直到行为再次转变到旧的标准。如果重新培训是不可能的,那么就不应该自动做出决定,因为它们很可能是错误的。这需要测试和验证。

总而言之,在我们的模型运行的当前假设下,预测黑天鹅事件是不可能的。对个人进行预测和决策,因为你知道你预测的数据与你训练的数据不遵循相同的分布,这样做是不负责任的。这并不是说模型不能作为咨询工具。除了“所有的模型都是错的,只有一些有用”——乔治·博克斯。

[1]https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri = CELEX:32016 r 0679&from = EN

[2]https://arxiv.org/pdf/1710.08864.pdf

将推动您的数据科学之旅的 5 个关键点

原文:https://towardsdatascience.com/5-key-points-that-will-empower-your-data-science-journey-e987f9756918?source=collection_archive---------39-----------------------

将促进您学习过程的关键主题。

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

近年来,数据科学获得了极大的普及。越来越多不同领域的企业投资数据科学,从数据中创造价值。在某些领域,新的业务是根据数据科学创建的。计算能力和技术的进步可能会给数据科学领域带来更多关注。因此,对数据科学家和数据工程师的高需求不足为奇,这促使许多人转行到数据科学领域工作。我是大约一年半前开始数据科学之旅的积极参与者之一。在这篇文章中,我想分享 5 个要点,我认为这将使你成为一名数据科学家的道路更加稳健和敏捷。我将要讨论的观点通常不被重视,在某种程度上被忽视了。我想强调它们对您的数据科学之旅的重要性和贡献。

1.简单更好

具有许多层的深度学习模型可能对你来说很有吸引力,但大多数时候,它们比必要的更复杂。用更简单的模型来完成任务总是可取的。图像识别任务可能需要深度学习模型,但我们不需要那么复杂的流失预测。业务需求在这里也扮演着重要的角色。如果 90%的准确率满足需求,就不需要额外的复杂度。随着模型变得越来越复杂,它们需要更多的计算能力,这意味着额外的成本。此外,深度学习模型需要大量数据。我们需要向他们提供过量的数据,以便获得准确且不会过度拟合的模型。数据和计算能力都意味着成本越简单越好。

2.线性代数有魔力

线性代数就像是幕后英雄。数据有许多不同的格式,如数字、文本、图像、声波。但是,数据必须转换成数字,模型才能理解它。数据采用表格格式(即行和列),用矩阵表示。因此,大量的计算是在模型的训练过程中完成的,这就是线性代数发挥作用的地方。这些计算是基于矩阵或向量运算,这是线性代数的核心。当梯度下降算法通过模型收敛工作时,矩阵/向量计算在遮光罩下完成。我们看不到他们。我们更感兴趣的是最终的结果,即准确性或损失。但是,为了让我们的理解更进一步,超越准确和损失,我们需要对线性代数概念有一个全面的了解。一开始可能会很无聊,但一旦你掌握了它,就会变得令人兴奋。我强烈建议抽出时间学习线性代数,因为它是您数据科学旅程中的基础之一。

3.领域知识是成功的关键

数据科学应用旨在解决问题或改进流程。例如,机器学习可以用于做出明智的商业决策。但是,那些问题和过程是什么呢?我们决定应用机器学习技术的目的是什么?

我们需要有领域知识来回答这些问题。我们可能非常擅长数据预处理、特征工程或模型选择和实现。然而,我们的技能组合在领域知识方面更加完整。例如,如果我们正在构建一个用于石油生产的机器学习产品,我们需要知道原油蒸馏过程的细节。收集什么样的数据以及它们的含义是揭示我们的模型的有价值信息的重要问题。我并不是说我们应该成为石油生产方面的专家,但是学习过程的动力学是绝对有益的。

领域知识也在数据预处理步骤中帮助我们。我们可以在处理缺失值时做出明智的决策。如果我们理解了潜在的过程,某些特征之间的相关性就更有意义了。

4.做项目

数据科学之旅从学习基础知识开始。有很多很好的资源可以帮助你开始。数据科学课程介绍有助于熟悉该领域。更实用的课程可能侧重于使用特定的工具或软件包,如 TensorFlow 或 PyTorch。开源包的文档也非常丰富。根据你的背景,你可能还需要学习一些编程或软件课程。

一旦基础完成。是时候开始做项目了。我们从项目中学到的东西不局限于某些主题或工具。但是,从项目中学到的最有价值的技能是正确处理问题的能力。我们解决问题的方式是创造一个强大且有价值的模型或产品的关键。在不同领域做大量的项目不仅会提高我们的实践技能,还会增强我们作为数据科学家的思维方式。

5.优化算法非常重要

我们获取原始数据。清理一下。应用数据预处理和特征工程技术。创建一个模型。然后用我们准备的数据训练模型。训练模型以确定模型参数,从而尽可能正确地映射特征和目标之间的关系。

学习参数的过程被称为优化,并且在该过程中使用的技术是优化算法。例如,随机梯度下降是机器学习和深度学习中广泛使用的优化算法。对优化算法的全面理解有助于更好地解释模型。我们可以更好地理解准确性和其他性能指标。因此,我们将能够以结构化的方式改进我们的模型。

我们讨论的五个要点并没有涵盖您在数据科学领域需要学习的所有材料,而是强调了可能容易被忽略的非常重要的概念。

感谢您的阅读。如果您有任何反馈,请告诉我。

参考

  • 图来源:https://unsplash.com/photos/Ev1XqeVL2wI

职业发展的 5 个关键(作为一名数据科学家)

原文:https://towardsdatascience.com/5-keys-to-advancing-in-your-career-as-a-data-scientist-10d3ee80877b?source=collection_archive---------35-----------------------

在这篇文章中,我想讨论我用来浏览数据科学职位网格的 5 个技巧。我希望这些建议能帮助你找到自己的路,迎接新的和令人兴奋的挑战,无论是在你现在的公司还是在新的公司。

因为我对清单生活很感兴趣,所以我希望你能从这篇文章中学到些什么:

  • 关键 1: 在数据科学(以及可能的其他职业)中导航你的职业是网格;这不是梯子。
  • 关键二: 强迫自己进行看起来(甚至可能是)不舒服的对话。
  • 关键三: 知道自己想要什么,确保那些帮你职业导航的人也知道自己想要什么。
  • 关键 4: 追踪你的成就——包括个人和团队的成就。
  • 关键 5: 愿意做出你知道自己应得的艰难决定。

如果你刚刚开始成为一名数据科学家的旅程,我建议你从我之前的文章 开始,7 个步骤让你成为一名数据科学家 。然而,如果你已经获得了作为数据科学家的第一份工作,首先,恭喜你!其次,我希望这篇文章能帮助你晋升。

关键 1:

在数据科学中导航你的职业生涯是一个网格;这不是梯子。

一旦你想通了关于你职业生涯的大问题(参见)在你作为一名数据科学家的道路上,你仍然有几条路可以选择。

让我们开始定义作为数据科学家的不同团队的路径网格。你可能会在很多团队中工作——研究、产品、营销、战略等等。在这些领域中的任何一个,你可能会决定走管理之路或者个人贡献者之路。

两条路径都从相同的基础标高开始:

数据科学家 I →数据科学家 II →高级数据科学家

然后对于 管理器 路径,你可以按以下方式上移:

DS 经理→DS 高级经理→DS 总监→DS 高级总监→DS 副总裁

而对于 个人撰稿人 接下来的步骤是:

职员 DS →高级职员 DS →首席 DS →杰出 DS

一个雇员可能看起来像 :

数据科学家 I:(产品) 你在产品中执行 A/B 测试。

数据科学家二:(营销) 然后你接着执行媒体混合模型进行营销。

高级数据科学家:(产品/工程) 接下来,您将承担一个更重要的工程任务,在这个任务中,您将在 A/B 测试平台中构建新功能,以支持不同的 A/B 测试场景。

****员工数据科学家:(研究/工程)鉴于您的 A/B 测试背景,您的任务是领导与构建一个平台相关的研究,该平台为营销和产品测试环境整合了多臂工具。

在矩阵形式中,如下所示:

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

让我们考虑第二种可能的情况。

数据科学家 I:(产品/研究) 你的任务是确定公司如何利用新的深度学习技术来改善现有的推荐服务。

数据科学家 II:(产品/研究) 你获得一些起步成功,你的任务是衡量你的新算法比现有算法好多少。您构建了一个框架,用您的新方法来测试现有的方法。然后你被要求去影响你的利益相关者,你的新建议在对业务有意义的方面确实更好。

高级数据科学家:(Product) 您的说服策略奏效了,并为您提供了新的机会来领导所有推荐服务的实施和测试工作。您与几个利益相关者密切合作,通过公司内的多条产品线建立多种策略,并扩展推荐服务。

****经理数据科学家:(产品)你将被分配到一个团队,协助处理公司所有与推荐服务相关的请求。你要确保团队成功满足这些要求。

在矩阵形式中,如下所示:

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

你不需要马上知道你想做什么,但是要知道在这个过程中有很多不同的机会可以选择。睁大你的眼睛寻找机会,因为它们可能就在你面前。

关键 2:

强迫自己进行看起来不舒服的对话。

支持与更高层领导不一致的决定(或你的特定经理的决定)可能会让人不舒服。

即使到了提问的时间,在满是同事的房间里大声说话也会让人不舒服。

要求升职可能会让人不舒服。

然而,这些不舒服的时刻往往会帮助你脱颖而出,它们是事物宏伟计划中如此微小的一瞥。这些时刻向你的同事表明你是来改变现状的。你在那里不是为了在房间的后面划分区域,而是为了让公司朝着更好的方向发展。在这些不舒服的时刻,你可以获得尊重,并最终改变你职业的方向。

记住,在进行可能会让人不舒服的对话时,要表现出额外的尊重。收集和分析数据,对你即将开始的艰难对话做出明智的决定,然后坚持你的决定。

关键 3:

知道你想要什么,确保那些帮助你规划职业生涯的人也知道你想要什么。

重要的是,当你在一个组织中导航时,你要主动与你的经理沟通。你的经理是最能帮助你实现职业目标的人。

取决于你和你的经理有多亲密,你可能很难提前说出你的职业发展方向,以及你实现每个目标的途径。然而,如果你的职业期望和你的经理对你职业的期望不一致,当你的期望没有得到满足时,这种不一致肯定会让你感到沮丧。

在你着手的项目的复杂性和类型方面,不一致可能会发生。这可能发生在你获得晋升的时候。这可能发生在你最终和谁一起工作,以及其他团队如何看待你作为团队成员的能力。你不会希望这一切发生的!

为了避免期望值不一致,定期与你的经理进行一对一的沟通。为你的目标建立清晰明确的路径——这些目标可能是升职,在特定项目中担任领导,或者你想从事的新项目。

最终,你是自己成长的主要利益相关者。知道自己要走什么路。了解如何实现目标,并确保定期与经理沟通以实现目标!

关键 4:

追踪你的成就。

与上一点一样,你是自己成长的主要利益相关者。让你的经理很容易看到你的贡献,并表明你在坚持你在一对一中设定的道路。记录你的贡献,以及它们如何与你的目标直接相关。

你提供的细节越多越好。这些细节包括日期,你的角色*,完成了什么 ed,涉及的其他团队成员,以及业务影响。***

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

拉自healthcare.utah.edu

如果你在指导其他团队成员,记录这些努力。如果你定期为生产代码库或开源资源做贡献,记录这些努力。如果你正在参加利益相关者会议并影响公司文化,你猜对了,记录下这些努力

人们很容易忽略那些没有记录他们在一个月、一个季度或一年内完成了什么的人。另一方面,很难忽视这样一个人,他与经理一起设定了期望目标,并记录了他们是如何实现这些期望的。

关键 5:

愿意做出你知道自己应得的艰难决定。

改变是艰难的。

离开一份对你来说没有挑战性的工作,换一份可能会有挑战性的工作,是令人兴奋的,但也是可怕的。如果你不知道自己在新的岗位上要做什么,该怎么办? 忽略这个内在的声音,你绝对会想出来的!

如果你离开这家公司,你将不得不在一家新公司重建你的声誉,交一群新朋友。别人不喜欢你怎么办? 忽略这个内在的声音,他们是要爱你的!

如果你已经完成了关键步骤 1-4,并且你发现你自己没有在你的组织中实现你的职业目标,那么可能是时候去别处看看了。如果你发现自己正在寻找一个新的角色,通过执行步骤 1-4,你从未像现在这样准备好去获得一份数据科学家的好工作。你能做到的!

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

像素箱贴上标签以便重复使用

最后一点,我发现 这本书 是了解组织内人们如何看待数据科学的绝佳资源。希望大家都来看看!

5 Seaborn 绘制了许多科学家不知道的数据

原文:https://towardsdatascience.com/5-lesser-known-seaborn-plots-most-people-dont-know-82e5a54baea8?source=collection_archive---------19-----------------------

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

但是真的应该尝试

Seaborn 是 Python 中最流行的可视化库之一,它提供了大量的绘图方法,其中一些方法很多人并不熟悉。在本文中,将介绍五个相对不为人知的 Seaborn 地块(和一个复活节彩蛋),以及图表、潜在的用例、代码和解释。

箱线图

箱线图是出了名的糟糕的可视化,因为它们隐藏了带有一些潜在误导性数据统计表示的分布。虽然在某些情况下,箱线图可能是数据的适当表现,但特别是对于大分布,用于绘制箱线图的五个数据点是远远不够的。

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

来源:Autodesk Research。图片免费分享。

“箱线图”是箱线图的扩展,试图通过增加更多的分位数来解决箱线图的问题。箱线图代表四分位数,即数据的四个部分的宽度,而箱线图可以将数据分成更多的分位数,以便更深入地了解数据的形状,尤其是分布的尾部。

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

Boxenplots 有许多每个 seaborn plot 都有的标准参数,但不同的参数包括scaleoutlier_propfloatshowfliersbool

聚类热图

虽然热图有助于可视化关系,但聚类热图提供了对矩阵层次结构的深入了解。聚类热点图通常用于相关矩阵(两个要素的每种组合之间的相关性),但实际上也可用于任何矩阵,只要其元素处于相同的比例。

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

有许多热图聚类算法和方法,但每一种都试图通过最重要的元素来分解维度,在较低的级别将相似的特征(可能通过相关性或另一种度量)聚类在一起,在较高的级别将更不同的元素聚类在一起。然后,顶部的二元分割应该代表在特征中提供最不同信息的两个元素。

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

如果两个特征在最底部组合在一起(如上图中的 A 列和 B 列),那么它们一定非常相似,并且包含相关信息。你可以在这里阅读更多关于聚类算法的内容。

脱衣舞场

去废图显示单个数据点,但沿宽度方向随机显示,这样即使数据点重叠,它们也是可见的。它们是高度可定制的,具有对透明度、形状和重叠的控制。

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

然而,在实践中,剥离图很少是最具信息性的可视化方法。相反,它们可以用作其他图(如箱线图或紫线图)顶部的抖动,以帮助查看者理解数据的真实分布。

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

剥离图是高度可定制的:例如,您可以在显示透明抖动时标记特征的方式,或者通过创造性地使用网格和旋转剥离图来创建点图。

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

群集图

虽然条带图利用随机性来显示重叠点,但群集图采用一种更系统的方法来显示重叠值,方法是堆叠具有相同(或非常相似)值的数据点。

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

群集图是小提琴图和脱衣舞图之间的可视化;它揭示了数据的对称分布,就像小提琴图,但没有平滑,而是揭示了原始数据点。它以宽度作为一个因素来显示各个数据点,以防止具有相似值的数据点模糊不清,但更具结构化。像条带图一样,群集图可以放置在其他更常见的可视化方法(如箱线图)之上。

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

点图

一个点状图可以被认为是一个带有垂直条的线形图。这可用于显示误差线、置信区间或数值范围。像传统的线形图一样,点状图可以使用连续的 x 轴;或者简单地绘制分类值之间的视觉差异,如平均值,这使得用户更容易基于连接线的斜率来评估差异的严重性。

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

点图是特别可定制的,可以控制条的长度、连接点的位置、帽长度、条的厚度等等。

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

奖励:狗场

seaborn 的创造者放入一个复活节彩蛋,然后 seaborn 会随机传回一张可爱狗狗的高清照片!

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

来源:Seaborn dogplot。图片免费分享。

这很可能给你的数据可视化项目一个急需的微笑!

感谢您的阅读,请在回复中告诉我您的想法!

如果你对最新的文章感兴趣,可以考虑订阅。如果你想支持我的写作,通过我的推荐链接加入 Medium 是一个很好的方式。干杯!

[## 在 Python 中创建复杂可视化的最简单方法不是使用 matplotlib。

直接从熊猫身上创造流畅简单的情节

towardsdatascience.com](/the-simplest-way-to-create-complex-visualizations-in-python-isnt-with-matplotlib-a5802f2dba92) [## 用一行代码彻底美化可视化效果:设计情节

制作吸引人的情节从未如此容易

towardsdatascience.com](/drastically-beautifying-visualizations-with-one-line-styling-plots-35a5712c4f54)

作者创建的图表/用 seaborn 创建的可视化。

作为数据科学家的 5 堂课

原文:https://towardsdatascience.com/5-lessons-from-life-as-a-data-scientist-4b4c2d0a4eb8?source=collection_archive---------25-----------------------

以及为什么我决定去做一些新的事情…

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

Daria Nepriakhina 在 Unsplash 上拍摄的照片

大约一年前,我开始了大学毕业后的第一份全职工作,在 Squarespace 做数据科学家。最近,我决定改变现状,加入了一家名为 Hugo 的快速发展的初创公司,致力于发展。

这种远离数据科学进一步专业化的弯路让很多人感到惊讶。我还是有点惊讶。作为第一次担任数据科学家,我从技术和功能的角度学到了很多东西。

这篇文章是我试图保留其中的一些想法,同时希望从我作为数据科学家的第一个角色中为你提供一些有价值的收获。

投资你的团队

当我在成长过程中打棒球时,我总是专注于尽我所能帮助我们获胜,而不是为自己创造数字。有时,这甚至对我有害。

直到去年,我才真正把这种想法带到我的职业生涯中。在实习和 Squarespace 初期,我非常专注于证明自己和建立信誉。直到我适应了自己的角色,并感觉到作为一名数据科学家受到了审查,我才能够将我的思维转移到我希望团队去哪里,以及我如何才能帮助我们到达那里。

在一家初创公司工作,我注意到这种心态很好地延续了下来。在一天结束的时候,组织和运动队并没有什么不同。你仍然可以专注于个人进步,同时努力让团队更接近某个目标。通常,它们被证明是同一个东西。

确定项目范围很难

令人惊讶的是,作为一名数据科学家,规划出能够推动影响力的项目是最困难的事情。我开始采用自上而下的方法。我会关注利益相关者提出的问题,然后努力想出可能的答案。这在某种程度上是有效的,但是我经常在试图解开一个模糊问题的混乱时陷入困境,而没有立即的行动能力。

随着我的进步,我的过程变得越来越自下而上。我会看看我今天能做些什么来产生更小但更与 T2 相关的影响。我仍然认为我天生倾向于自上而下的思维,但是我现在看到了在组织中自下而上解决问题的好处。根据您的具体情况,这可能会有所不同。尝试这两种方法,看看是什么推动了局势的发展。

当有疑问时,原型它

有句经典台词,“不要请求允许,请求原谅。”这在大多数情况下有点极端,但这里有一定的道理。如果你有一个你认为非常重要的想法,花时间去尝试并获得利益相关者的认可并不总是最好的。给他们看看。

找到你能做的最少的可行的工作来证明这个项目,并从那里开始。这可能是一个概念证明,或者简单到一页纸的项目简介。仅仅是把你的想法清楚地写在一个简短的文件里就已经很有帮助了。

这里还有一个额外的好处,那就是一旦你做了一点工作,项目有了一些希望,其他人就不太倾向于在接下来的步骤中后退。我发现这是对大型团队产生影响的最快方式。

有观点是好的

在组织中做决策时,很难避免集体思考。事情变得非常复杂,尤其是当你考虑到公司政治和历史等变量的时候。现实是你不能控制一切,但你可以通过做一件简单的事情来提供帮助:发表意见。

这并不意味着成为房间里声音最大的人,或者在你不知道发生什么事情的时候,主动提供“热门话题”。相反,这意味着当你被告知某事时,有一个强烈的观点并分享它。大多数讨论都以每个人都坐在“可能”的范围内而告终。轶闻被扔掉,信息被共享,但是团队并没有更进一步做出决定。

即使其他人不同意你的观点,你仍然在帮助对话向决策靠近。这可能会有点不舒服,但其他人会感谢这种贡献。更快、更全面的决策对每个人都有好处。

确保有人拥有它

最后,这不是火箭科学,但却是非常重要的。给几乎所有的东西指定一个主人。每个人都有一百万个球在空中。每个人都人手不足。每个人都有不同的激励和对他们重要的项目。如果你认为别人会接手一个项目,那你就大错特错了。

关键是要明确。职场神惩罚模糊的愿望奖励具体的要求。如果你想让某人做某事,去问他们。如果您想要自动询问,请指定一个所有者。把这两件事记在心里,你的生活会轻松得多。

离别的思绪

作为一名数据科学家,我没有任何抱怨。事实上,我很喜欢。数据科学是一个快速增长的高杠杆领域,有一个非常酷的额外好处。每天去工作非常有趣,在那里我可以进行深入的分析,制作很酷的东西,并为产品决策提供信息。

话虽如此,许多关于在数据中工作的反驳都是真的。当作为一名大型团队的分析数据科学家工作时,你很少是主要决策者,事情往往不在你的掌控之中。你将在房间里做很多决定,但在最好的情况下,你充当的角色是得力助手。

最终,我决定走向另一个极端,加入一家初创公司,在那里,如果我尝试,就无法避免成为主要决策者。作为一个喜欢快速行动的人,一个自称通才的人,一个想有朝一日成为创始人的人,这种感觉是对的。

我本质上仍然是一名数据科学家,但我还有许多其他兴趣想探索。此外,我内心永远是一名数据科学家。我还不会离开你,朱庇特笔记本。

感谢阅读!在 Twitter 上找到我,不要忘记 订阅 我的每周时事通讯,获取任何新帖子和有趣的链接。看看下面一些类似的帖子:

我在麻省理工学院学到的 5 课

原文:https://towardsdatascience.com/5-lessons-i-learned-at-mit-3f31cf20af0?source=collection_archive---------45-----------------------

建立精通的心态

如果你是一个喜欢视听的人…

嗨伙计们!我希望你们在冠状病毒避难所期间一切都好。我在海湾地区,在美国的这一边,我们仍然被严格命令呆在家里直到六月初。我已经被关了 8 到 9 周了,这是一个很好的向内探索的时间。

一篇有趣的 2005 年的研究文章,题为 追溯人类细胞的出生日期 ,表明你的大部分细胞在 7 年前更新或重组。这表明,在细胞层面上,2013 年的我与今天的我有着天壤之别。现在,这让我想起了 7 年前我的人生,那是我在麻省理工大学本科生活的中期。这让我开始思考…我在麻省理工学院的时候学到了大约七个关键的经验。今年我最大的自我承诺之一,就是与世界和可能走在类似道路上的人进行更多的交流,分享我的知识和生活经验。毕竟,作为人类物种,我们在一起更强大,不是吗?

以下是我一路走来学到的 5 条经验。

1.设定疯狂而崇高的目标,然后朝着目标采取行动,不可避免地会迫使你成长。

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

马库斯·温克勒在 Unsplash 上拍摄的照片

在我的本科生涯中,有一段时间我选修了 6-7 门课程,除了一门以外都是技术性的。我超过他们了吗?是的。我在所有这些方面都做得非常好吗?见鬼没有。我为什么要这么做?嗯,至少在美国,大学学费很贵,麻省理工学院最棒的一点是,如果你已经是全日制学生,你不必支付更多的钱来修更多的学分。至少我在的时候,上 4 节课,或者上 7 到 8 节课学费是一样的。这个个人挑战教会了我积极的时间管理的神奇艺术,五年后回头看,与那次经历相比,它让几乎任何课程或挑战都觉得轻而易举。有时,我们学术生活中最艰难的时刻实际上是隐藏的熔炉,它将我们转变为一个最终更准备好、更有能力处理逆境的人。

2.当你给自己足够的时间去学习时,你就能保证在一段稳定的燃烧中取得成果。

好吧,我知道这可能与我之前写的相矛盾。但是事情发生了重大转折,当我决定只上 3 门技术课和 1 门普通课时,这是麻省理工学院推荐给“普通”学生的……我放弃了。我的意思是,那无疑是我度过的最轻松、最轻松、也是学业上最成功的一个学期。我从那个决定命运的学期中学到的一切都是如此清晰明了。也许是因为我实际上正在休息,所以我实际上巩固了从那时起的记忆。我这是在说什么?一切都是为了平衡。如果你绝对迫切地需要像我一样在一个学期内完成 7 到 8 门课(因为你需要节省 5 万美元),那就去做吧。与此同时,如果你想给自己足够的时间灵活性和空间来关注困难的问题,那么你需要考虑到这一点。

3.目标明确,知道自己的理由。否则,你的兴趣只能持续一个赛季。

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

Unsplashengin akyurt 拍摄的照片

你们中有多少人尝试过在大学之外自学或自学,结果却完全忘记了?半开始的项目怎么样?或者一般来说,谁觉得上学的时候生活简单多了?部分原因来自于这样一个事实,当你在学校的时候,你的目标很明确。你需要拿到学位。你需要通过。你需要在某项考试中得到 X。这些目标支撑着你,给你一个目标。你得到一些证书。你生命中的一扇门打开了。

然而,七年后回头看,让现实世界变得更有趣的是,你可以定义自己的目标。你从沙盒的游戏场毕业,进入真实的世界,在那里你有你自己的终极游戏,并且你正在与数以百万计的其他终极游戏互动。所以,如果你想改善这一点,那么第一步就是要真正埋头苦干,弄清楚目标是什么,以及你为什么要做某事。否则,你的兴趣只能持续一个赛季。

4.别挡你的路!

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

快乐的兔子通过吉菲

我的天啊。我认为麻省理工学院最糟糕(也可以说是最好)的一点是,你周围的每个人都在自己的方面很出色。当你还停留在拿自己和别人比较的思维模式中时,那是很可怕的。当然,这在某种程度上总是会发生的。冥想和超越自我已经创造了奇迹,提示如下。但除此之外,我是真实的。很容易把自己和你周围的聪明人相比较,然后想,“操,我为什么还要努力呢?”我的意思是,我的一个最好的朋友是一个国际化学奥林匹克明星,他会吞下一盒 Franzia,并轻松地通过麻省理工学院最难的算法课程之一。我的室友是一名国际生物奥林匹克神童,现在已经投身于生物技术风险投资领域。其中一人在癌症生物学方面非常出色,她参加了这个项目,在她回到哈佛全职攻读医学博士/哲学博士之前,她被送到了英国牛津大学。

我周围都是了不起的人。当这种情况发生时,或者当你发现自己在朋友的成功周围时,你应该总是让它激励你,鼓舞你。人们很容易想,“唉,为什么我在酵母遗传学方面没有那么出色?或者为什么我高中没有为生物奥林匹克做准备?或者说为什么没有数学背景我就不能毫不费力的解决算法?别说了。只要你在某种程度上成长、学习或进化了,那么你就是好的。

5.纪律不是通过看视频或阅读指南获得的。它存在于你长期形成和规范的习惯中。

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

沉思的猫,承蒙吉菲

现在是 2020 年,我们生活在一个需要快速解决问题的社会。事实是,无论你消化了多少自助内容,对于培养一种能引导你走向成功的习惯来说,没有什么可以替代。特别是对于特别聪明的人来说,马上填鸭式地学习知识可能很容易。我有一个讨厌的习惯,总是这样做。我临时抱佛脚了吗?完全同意。但是当我用老方法做的时候发生了什么?当我抽出 30 到 45 分钟的常规学习时间。结果是疯狂的。大脑是个有趣的东西——事实证明,你做什么就会成为什么样的人。你就是你的习惯。因此,要形成坚持行动所需的纪律,就要把它们变成习惯。配料很简单:

  1. *时间盒任务。*完成 1 项任务的时间。这意味着写下开始和结束的日期。没有永无休止的故事。
  2. 建礼。把任务和你已经做的事情联系起来。连锁是让一个新习惯更容易“坚持”的关键。
  3. 确保你有足够的精力集中精力,只做那一项任务。感觉就像永远一样。然后你会回过头来想,wtf?

专业技巧:这是非常额外的,但这是我如何建立每天 30 分钟的调解练习。从 30 秒开始。然后每天加 10 秒。每天坚持增加 10 秒钟。很快,你就会被吹走。

好了,伙计们,我希望这个视频能让你们所有人在这场冠状病毒疫情中保持健康,并给你们一些思考的食物,因为你们正在寻找可以帮助你们在旅途中学习更多知识或指导你们自己的自学之旅的课程和技巧。再次感谢,期待下次再见。

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

麻省理工学院基利安法庭,由维基媒体提供

销售预测的 5 种机器学习技术

原文:https://towardsdatascience.com/5-machine-learning-techniques-for-sales-forecasting-598e4984b109?source=collection_archive---------0-----------------------

Python 中线性回归、随机森林回归、XGBoost、LSTMs 和 ARIMA 时间序列预测的比较

预测销售是机器学习(ML)的一个常见和基本的用途。销售预测可用于确定基准,确定新计划的增量影响,规划资源以响应预期需求,并预测未来预算。在本文中,我将展示如何实现 5 种不同的 ML 模型来预测销售。

这个演示的数据可以在 Kaggle 上找到,完整的代码在 GitHub 上。

入门指南

第一步是加载数据,并将其转换成一种结构,然后我们将在每个模型中使用这种结构。在其原始形式中,每行数据代表 10 家商店中某一天的销售额。我们的目标是预测月销售额,所以我们首先将所有商店和天数合并为月总销售额。

def load_data():
    url = """https://www.kaggle.com/c/demand-forecasting-kernels
    only/download/ryQFx3IEtFjqjv3s0dXL%2Fversions%2FzjbSfpE39fdJl
    MotCpen%2Ffiles%2Ftrain.csv"""     

    return pd.read_csv(url)def monthly_sales(data):    
    data = data.copy()         # Drop the day indicator from the date column    
    data.date = data.date.apply(lambda x: str(x)[:-3])         # Sum sales per month    
    data = data.groupby('date')['sales'].sum().reset_index()    
    data.date = pd.to_datetime(data.date)  
    data.to_csv('../data/monthly_data.csv')     
    return datadata = load_data()
monthly_data = monthly_sales(data)

在我们的新数据框中,现在每一行都代表给定月份所有商店的总销售额。

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

如果我们绘制一段时间内的总月销售额,我们会看到平均月销售额随着时间的推移而增加,这意味着我们的数据不是稳定的。为了使其稳定,我们将计算每个月销售额之间的差异,并将其作为一个新列添加到我们的数据框中。关于信纸和差异的更多细节可以在这里找到。

# Calculate difference in sales month over month
def get_diff(data):
    data['sales_diff'] = data.sales.diff()    
    data = data.dropna()      
    return datastationary_df = get_diff(monthly_data)

下面是我们的数据在差异转换前后的视觉表现。所有情节的代码可以在这里找到

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

比较差分前后的平稳性。莫莉·里伯斯金图片。

既然我们的数据代表月销售额,并且我们已经将它转换为静态数据,我们将为不同的模型类型设置数据。为此,我们将定义两个不同的结构:一个用于 ARIMA 建模,另一个用于其余的模型。

对于我们的 Arima 模型,我们只需要一个日期时间索引和因变量(销售差异)列。

def generate_arima_data(data):
    dt_data = data.set_index('date').drop('sales', axis=1)        
    dt_data.dropna(axis=0)     
    dt_data.to_csv('../data/arima_df.csv')
    return dt_dataarima_data = generate_arima_data(stationary_df)

对于我们的其他模型,我们将创建一个新的数据框架,其中每个特性代表上个月的销售额。为了确定我们的特征集中包括多少个月,我们将观察自相关和偏自相关图,并使用规则在 ARIMA 建模中选择滞后。这样,我们可以保持我们的 ARIMA 和回归模型的回望期一致。

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

自相关和偏自相关图。莫莉·里伯斯金图片。

基于上述情况,我们将回望期定为 12 个月。因此,我们将生成一个有 13 列的数据框,12 个月中的每个月有一列,另一列是我们的因变量——销售额差异。以下代码摘自巴里斯·卡拉曼的《数据驱动增长》系列。

def generate_supervised(data):
    supervised_df = data.copy()

    #create column for each lag
    for i in range(1,13):
        col = 'lag_' + str(i)
        supervised_df[col] = supervised_df['sales_diff'].shift(i)

    #drop null values
    supervised_df = supervised_df.dropna().reset_index(drop=True)
    supervised_df.to_csv('../data/model_df.csv', index=False)

    return supervised_dfmodel_df = generate_supervised(stationary_df)

现在我们有了两个独立的数据结构,一个是包含日期时间索引的 Arima 结构,另一个是包含延迟特性的监督结构。

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

销售预测的 ARIMA 和监督数据框架。莫莉·里伯斯金图片。

建模

为了创建和评估我们所有的模型,我们使用了一系列的助手函数来执行以下功能。所有助手功能的代码可以在找到

  1. 训练测试分割:我们分离我们的数据,以便过去 12 个月是测试集的一部分,其余的数据用于训练我们的模型
  2. 缩放数据:使用最小-最大缩放器,我们将缩放数据,以便所有变量都在-1 到 1 的范围内
  3. 反向缩放:在运行我们的模型之后,我们将使用这个辅助函数来反向缩放步骤 2
  4. 创建一个预测数据框架:生成一个数据框架,其中包括在我们的测试集中捕获的实际销售额和来自我们的模型的预测结果,以便我们可以量化我们的成功
  5. 对模型评分:这个辅助函数将保存我们预测的均方根误差(RMSE)和平均绝对误差(MAE ),以比较我们五个模型的性能

回归模型:线性回归、随机森林回归、XGBoost

对于我们的回归模型,我们可以使用 scikit-learn 库的 fit-predict 结构。因此,我们可以建立一个基础建模结构,我们将为每个模型调用它。下面的函数调用上面概述的许多辅助函数来分割数据,运行模型,并输出 RMSE 和梅分数。

def regressive_model(train_data, test_data, model, model_name):

    # Call helper functions to create X & y and scale data
    X_train, y_train, X_test, y_test, scaler_object = 
        scale_data(train_data, test_data)

    # Run regression model
    mod = model
    mod.fit(X_train, y_train)
    predictions = mod.predict(X_test) # Call helper functions to undo scaling & create prediction df
    original_df = load_data('../data/monthly_data.csv')
    unscaled = undo_scaling(predictions, X_test, scaler_object)
    unscaled_df = predict_df(unscaled, original_df) # Call helper functions to print scores and plot results
    get_scores(unscaled_df, original_df, model_name)
    plot_results(unscaled_df, original_df, model_name)

# Separate data into train and test sets
train, test = tts(model_df)# Call model frame work for linear regression
regressive_model(train, test, LinearRegression(),'LinearRegression')# Call model frame work for random forest regressor 
regressive_model(train, test, 
                 RandomForestRegressor(n_estimators=100,
                                       max_depth=20),        
                                       'RandomForest')# Call model frame work for XGBoost
regressive_model(train, test, XGBRegressor(n_estimators=100,
                                           learning_rate=0.2), 
                                           'XGBoost')

下面的输出显示了每个回归模型的预测值(红色)叠加在实际销售额(蓝色)之上。虽然结果看起来相似,但细微的差异相当于几千美元的销售额,我们将在下面的比较部分看到这一点。

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

回归模型预测与实际销售。莫莉·里伯斯金图片。

长短期记忆(LSTM)

LSTM 是一种递归神经网络,对于使用序列数据进行预测特别有用。为此,我们将使用一个非常简单的 LSTM。为了提高准确性,可以添加季节性特征和额外的模型复杂性。

def lstm_model(train_data, test_data):
    # Call helper functions to create X & y and scale data
    X_train, y_train, X_test, y_test, scaler_object =    
        scale_data(train_data, test_data) X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])
    X_test = X_test.reshape(X_test.shape[0], 1, X_test.shape[1]) # Build LSTM
    model = Sequential()
    model.add(LSTM(4, batch_input_shape=(1, X_train.shape[1], 
                                         X_train.shape[2]), 
                                         stateful=True))
    model.add(Dense(1))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    model.fit(X_train, y_train, epochs=200, batch_size=1, verbose=1, 
              shuffle=False)
    predictions = model.predict(X_test, batch_size=1) # Call helper functions to undo scaling & create prediction df
    original_df = load_data('../data/monthly_data.csv')
    unscaled = undo_scaling(predictions, X_test, scaler_object, 
                            lstm=True)
    unscaled_df = predict_df(unscaled, original_df) # Call helper functions to print scores and plot results
    get_scores(unscaled_df, original_df, 'LSTM')
    plot_results(unscaled_df, original_df, 'LSTM')

结果图看起来类似于上面的三个回归图,所以我们将推迟比较结果,直到我们看到下面的误差。

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

LSTM 模型预测与实际销售。莫莉·里伯斯金图片。

ARIMA:

ARIMA 模型看起来与上面的模型略有不同。我们使用 statsmodels SARIMAX 包来训练模型并生成动态预测。SARIMA 模型分为几个部分。

  • AR:表示为 p,是自回归模型
  • I:表示为 d,是区别项
  • 马:表示为 q,是移动平均线模型
  • 学生:使我们能够添加季节性成分

在下面的代码中,我们定义了模型,然后对过去 12 个月的数据进行了动态预测。对于标准的非动态预测,下个月的预测是使用前几个月的实际销售额进行的。相比之下,对于动态预测,下个月的预测是使用前几个月的预测销售额进行的。

def sarimax_model(data):
    # Model    
    sar = sm.tsa.statespace.SARIMAX(data.sales_diff, order=(12, 0, 
                                    0), seasonal_order=(0, 1, 0,  
                                    12), trend='c').fit() # Generate predictions    
    start, end, dynamic = 40, 100, 7    
    data['pred_value'] = sar.predict(start=start, end=end, 
                                     dynamic=dynamic)    # Call helper functions to undo scaling & create prediction df   
    original_df = load_data('../data/monthly_data.csv')
    unscaled_df = predict_df(data, original_df) # Call helper functions to print scores and plot results   
    get_scores(unscaled_df, original_df, 'ARIMA') 
    plot_results(unscaled_df, original_df, 'ARIMA')

同样,结果看起来相当不错。我们将在下面进一步挖掘。

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

ARIMA 模型预测与实际销售。莫莉·里伯斯金图片。

比较模型

为了比较模型性能,我们将考察均方根误差(RMSE)和平均绝对误差(MAE)。这些度量都是比较模型性能的常用方法,但是它们的直觉和数学意义略有不同。

  • MAE:平均绝对误差告诉我们,平均而言,我们的预测离真实值有多远。在这种情况下,所有错误都具有相同的权重。
  • RMSE:我们通过计算所有误差平方和的平方根来计算 RMSE。当我们平方时,较大的误差对总误差有较大的影响,而较小的误差对总误差没有那么大的影响。

从上面的辅助函数中,我们使用 get_scores 来计算每个模型的 RMSE 和 MAE 分数。这些分数被保存在一本字典里,腌起来。为了进行比较,我们将把字典转换成 Pandas 数据框架并绘制结果。

def create_results_df():
    # Load pickled scores for each model
    results_dict = pickle.load(open("model_scores.p", "rb")) # Create pandas df 
    results_df = pd.DataFrame.from_dict(results_dict, 
                    orient='index', columns=['RMSE', 'MAE', 'R2']) results_df = results_df.sort_values(by='RMSE',
                     ascending=False).reset_index() return results_dfresults = create_results_df()

这给了我们下面的数据框架。

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

我们可以看到,尽管我们的模型输出在上面的图中看起来很相似,但它们的精确度确实不同。下面的图片可以帮助我们看出区别。剧情代码可以在这里找到

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

比较模型性能。莫莉·里伯斯金图片。

我们看到的是,总体而言,XGBoost 模型的性能最好,紧随其后的是 ARIMA 和 LSTM 模型。这里需要注意的是,上述所有模型都是以最基本的形式推导出来的,以展示它们如何用于销售预测。这些模型只是稍微调整了一下,以最大限度地降低复杂性。例如,LSTM 可以有许多额外的节点和图层来提高性能。

为了确定哪个模型适合您的用例,您应该考虑以下几点。

  • 你对模型的复杂程度和可解释性感到满意。
  • 模型可以调整,功能可以设计为包括季节信息、假期、周末等。
  • 了解您将如何使用结果,以及数据将如何更新您的模型。
  • 使用交叉验证或类似技术调整模型,以避免数据过度拟合。

销售预测介绍的完整代码可以在这里找到请在下面添加任何问题或意见。

使用 Matplotlib 改进可视化设计的 5 个神奇技巧

原文:https://towardsdatascience.com/5-magical-tricks-to-improve-your-visualization-design-using-matplotlib-dc47623f8cea?source=collection_archive---------22-----------------------

应该添加到代码中的新功能的集合

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

不可能什么都知道,不管我们的经验在这些年里增加了多少,有许多事情对我们来说仍然是隐藏的。这是正常的,也许是一个令人兴奋的动机去搜索和学习更多。我确信这是促使你写这篇文章的原因。

我们知道 Matplotlib 最重要的特性之一是它能够很好地与许多操作系统和图形后端兼容。Matplotlib 支持几十种后端和输出类型,这意味着无论您使用的是哪种操作系统或您希望的输出格式,您都可以依赖它工作[1]。

我正在与你分享我以前不知道的 5 个神奇的技巧和新特性,来提高你使用 Matplotlib 的设计和可视化技能。这些招数会对你的工作助一臂之力,让你的工作更加专业。

如果这些功能中有一个不适合您,请使用以下方法更新您的 Matplotlib 版本:

pip install -U matplotlib

事不宜迟,我们开始吧!

技巧 1:绘图注释

我们今天的第一个技巧是注释,它是在一个点上添加到一个图中的注释类型,以使它更容易理解,澄清更多信息,或者定义该点的角色。

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

为此,我们将使用 Matplotlib 中的 plt.annotate() 函数。它允许您创建箭头,连接它们,并使它们指向特定的区域。您可以根据自己的代码修改上面的代码行:

这种方法肯定会帮助你以书面形式、乳胶报告、博士论文答辩等方式展示你的工作

招数二:缩放法

我觉得这是最神奇的一招。这个新功能非常有用和有趣,尤其是对研究人员和数据科学家来说。方法***indicate _ inset _ zoom()***返回一个显示缩放位置的矩形,帮助您显示曲线的特定部分,而无需绘制另一部分。

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

上面的代码解释了如何调用方法并将其添加到您的绘图中:

招数三:剧情上水印

这个技巧对于解决版权问题很有用。它帮助您将水印添加到可视化设计中。它的使用并不广泛,但在准备可视化项目时,它仍然是一个需要了解的重要特性。在此功能中,您可以使用文本水印或图像水印。

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

文本水印

要添加文本水印,您可以使用下面一行:

您也可以通过更改上面代码中的第 11、12 和 13 行,将您的徽标或您公司的徽标用作水印。

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

图像水印

一旦您将徽标添加到主文件所在的目录中,您就可以使用此代码来代替文本水印。不要忘记用您自己的徽标名称来修改“tds.png ”:

招数 4:共享斧头

这些新方法允许在创建后立即共享轴。这为您的可视化效果提供了一个有吸引力和有条理的外观。请确保在使用代码之前更新您的 Matplotlib 版本,因为该方法是新发布的功能。

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

代码源代码写在下面:

招数五:无限线

这个技巧对数据科学家和机器学习工程师也很有用。它创建了一条通过两点的无限长的线。它可用于分离簇、组或图。

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

使用下面的代码源来检查这个特性,让我看看您将如何在您的数据可视化项目中应用它:

数据科学家、ML 工程师、数据分析师或业务分析师,您肯定知道 Matplotlib 的强大功能。它是帮助我们高效有力地讲述故事的最佳工具之一,将我们的分析与业务目标联系起来,并获得解释和决策结果。

有了这些功能,你将能够为你的学术或官方项目增添优雅和专业。您将使读者和审阅者更容易理解和跟踪数据可视化产生的信息和解释。

一个设计良好的视觉效果有一些非凡之处:颜色突出,层次协调,轮廓适合整个设计,它不仅具有美丽的美学品质,而且给我们一个有意义的洞察力。你知道数据可视化就像讲故事,这就是为什么你应该尽可能地让它专业和有趣。

最后注意,如果你不熟悉 Matplotlib,推荐你查看这篇有趣的文章给初学者。

感谢您的阅读。敬请关注即将推出的功能!

参考

[1]杰克·范德普拉斯(2016 年 11 月)。” Python 数据科学手册。奥莱利媒体公司出版。

从 R 脚本调用函数的 5 分钟指南

原文:https://towardsdatascience.com/5-minute-guide-to-calling-functions-from-r-scripts-41c4a09db1eb?source=collection_archive---------23-----------------------

使用谷歌趋势数据的 r 代码教程。

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

照片由来自佩克斯克里斯蒂娜·莫里洛拍摄

你可能听说过流行的指导方针,如果你发现自己复制和粘贴代码超过 3 次,你应该把它写成一个函数。虽然您可以在 R Markdown 文件的顶部编写和存储这些函数,但是如果您最终将这些函数复制并粘贴到多个文件中,这种方法可能会变得混乱,而且会适得其反。通常,保持条理的最好方法是在脚本中编写函数,并在需要时从任何附加文件中调用它们。

为了演示这个过程,我将使用 3 个函数对过去一个月中包含“supreme court”的 Google 搜索进行一个非常简单的变化点分析。

首先,创建你的函数

在 R 脚本中,我们编写了三个简单的函数。第一个绘制 Google 趋势数据,第二个使用“bcp”包中的 bcp()函数执行简单的变化点分析,第三个绘制分析结果。

google_graph = function(data, date, observation, graph_title) {

  data %>% 
    ggplot() +
    geom_line(aes(x = date, y = observation), 
              color = "#09557f",
              alpha = 0.6,
              size = 0.6) +
    labs(x = "Date (Start of Week)", 
         y = "Relative Proportion",
         title = graph_title) +
    theme_minimal() +
    scale_x_date(date_breaks = "1 week") +
    theme(axis.text.x = element_text(angle = 45))

}bcp_analysis = function(observation, data) {

  set.seed(100)

  bcp = bcp(observation)

  prob = bcp$posterior.prob
  prob = as.data.frame(prob) 

  bcp_dataframe = cbind(data, prob) %>% 
    select(date, prob)

}bcp_plot = function(dataframe){

  dataframe %>% 
    ggplot() +
    geom_line(aes(x = date, y = prob),
              color = "#09557f",
              alpha = 0.6,
              size = 0.6) +
    labs(x = "",
         y = "Posterior Probability",
         title = "Changepoint Probabilities") +
    theme_minimal() +
    ylim(0, 1) +
    scale_x_date(date_breaks = "1 week") +
    theme(axis.text.x = element_text(angle = 45))

}

我还选中了“保存源”框。如果您选中此框,那么当您在脚本中保存对函数的更改时,该文件将自动来源于全局环境。

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

连接到您的功能

从 R Markdown 文件连接到脚本中存储的函数与连接到包中存储的函数非常相似。我们不使用 library()语句,而是使用 source()语句并指明脚本的路径名。在这种情况下,我们使用以下代码:

source("./functions.R")

当我们运行这行代码时,脚本中包含的函数会自动出现在全局环境中。连接成功!

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

使用你的功能

首先,我们将使用“gtrendsR”包中的 gtrends()函数来获取过去一个月中包含美国“supreme court”字样的 Google 搜索量。mutate 步骤还用于将“date”变量转换为日期格式:

data = gtrends(keyword = "supreme court", geo = "US", 
               time = "today 1-m")$interest_over_time %>% 
  mutate(date = as.Date(date))

现在我们有数据可以在函数中使用了!我们使用 google_graph()函数的方式与使用任何其他函数的方式相同,这使我们可以轻松地绘制数据:

google_graph(data, data$date, data$hits, ‘Google Searches for “Supreme Court”’)

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

剧情看起来不错!不出所料,在最高法院大法官鲁斯·巴德·金斯伯格去世后,包含“最高法院”的搜索量激增。让我们使用 bcp_analysis()和 bcp_plot()函数来查看这个峰值是否代表这个时间序列对象中的一个重大变化点。同样,我们使用函数的方式与使用已加载包中的函数的方式相同:

bcp_dataframe = bcp_analysis(data$hits, data)bcp_plot(bcp_dataframe)

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

鲁斯·巴德·金斯伯格死后几天的后验概率为 1.00,这表明包含“最高法院”的搜索可能在这段时间以一种有统计学意义的方式发生了变化。

就这么简单!如果我们想要在单独的 Rmd 文件中绘制和分析几个不同的数据源,那么用 source()语句将这些文件连接到我们的“functions”脚本并使用我们的函数就很容易了。

Python 装饰者 5 分钟指南

原文:https://towardsdatascience.com/5-minute-guide-to-decorators-in-python-b5ca0f2c7ce7?source=collection_archive---------23-----------------------

立即掌握更高级的主题

毫无疑问,Python decorators 是更高级、更难理解的编程概念之一。这并不意味着您应该避免学习它们——因为您迟早会在生产代码中遇到它们。这篇文章将帮助你立刻掌握这个概念。

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

萨巴·萨亚德Unsplash 拍摄的照片

阅读这篇文章不会花费你超过 5 分钟的时间,如果你按照代码来做的话,可能需要 10 分钟。在那段时间里,您将从基础开始了解装饰器的概念——常规的 Python 函数。

此外,这篇文章旨在逐步提高你的理解水平,这样你就不会在这个过程中感到困惑。在开始编写代码之前,我们将快速了解一下装饰者是什么。稍后,在文章的结尾,我们将讨论装饰者的一些好处和用例,所以不要错过。

中间部分留给概念本身。开始吧!

什么是装修工?

装饰器是一个函数,它接受另一个函数并扩展后一个函数的行为,而不需要显式修改它。Python 修饰器可以使代码更短,更有 Python 风格。这是一个高级主题,一旦您理解了这个概念,就可以使编码变得更容易。

在我们深入探讨之前,让我们快速回顾一下基础知识。

装饰器中使用的函数

函数是编写可重复使用的特定代码的一种方式。它们存在于几乎每一种编程语言中,是每一个程序的重要组成部分。

下面是一个函数定义示例:

def function_name(args):
    #code

现在我们知道了什么是函数,下一个要理解的主题是函数中的函数:

def calc(name='add'):
    print('now you are inside the calc() function') def sub():
        return 'now you are in the sub() function' def divide():
        return 'now you are in the divide() function'

与此类似,我们也可以从另一个函数中返回一个函数:

def calc(name='add'):
    print('Now you are in the calc() function') def add():
        return 'Now you are in the add() function' def divide():
        return 'Now you are in the divide() function' if name == 'add':
        return add
    else:
        return divide

在上面的代码中,我们可以很容易地看到,在 if/else 子句的帮助下,我们可以在函数中返回函数。您需要理解的最后一点是,装饰器将一个函数作为另一个函数的参数:

def welcome():
    return 'Welcome to Python!'def do_something_before_welcome(func):
    print('Something before executing welcome()')
    print(func())

do_something_before_welcome(welcome) **Output:
>>> Something before executing welcome()
>>> Welcome to Python!**

在我们深入到装饰者之前,这差不多是你应该知道的全部。现在有趣的部分开始了。

装饰师蒸馏

现在我们有了理解装饰者所需的知识。让我们快速创建一个:

def my_decorator(func):
    def wrapper():
        print('Before function call')
        func()
        print('After function call')
        return wrapperdef say_where():
    print('say_where() function') say_where = my_decorator(say_where)**Output:
>>> Before function call
>>> say_where() function
>>> After function call**

读完上面的例子后,你有望更好地理解 decorators,因为我们刚刚应用了之前所涉及的函数的所有基础知识。

Python 允许我们通过@符号更容易地使用 decorators 有时称为 pie 语法。

让我们看看如何将它应用到上面的例子中:

def my_decorator(func):
    def wrapper():
        print('Before function call')
        func()
        print('After function call')
    return wrapper@my_decorator
def say_where():
    print('say_where() function')**Output:
>>> Before function call
>>> say_where() function
>>> After function call**

所以, @my_decorator 只是say_where = my_decorator(say_where)更简单的说法。这就是如何将装饰器应用到函数中。

现在我们对 python 装饰器有了一个清晰的概念,但是为什么我们首先需要它们呢?让我们在下一节回顾一些好处。

装修工——为什么?

我们已经讨论了装饰者的如何部分,但是为什么部分你可能还是有点不清楚。这就是为什么我准备了几个真实世界的装饰用例。

分析、日志记录和工具

我们经常需要具体地度量正在发生的事情,并记录量化不同活动的度量标准。通过在封闭的函数或方法中总结这些值得注意的事件,装饰者可以很容易地处理这个非常具体的需求。

验证和运行时检查

对于所有专业的 Python 类型系统来说,有一个缺点。这意味着一些错误可能会试图潜入,而更多的静态类型语言(如 Java)会在编译时捕捉到这些错误。除此之外,您可能希望对进出的数据执行更复杂的自定义检查。装饰者可以让你轻松地处理所有这些,并一次将它应用于许多功能。

制作框架

当您编写 decorators 时,您可以选择利用它们的简单语法,这让您可以向语言添加难以利用的语义。最好能有扩展语言结构的选项。许多众所周知的开源系统都利用了这一点。web 框架 Flask 利用它将 URL 路由到处理 HTTP 请求的能力。

我希望这三个用例已经让你相信装饰者在现实世界的任务中是多么重要。说到这里,我们来到了本文的结尾。让我们在下一部分总结一下。

在你走之前

一开始,装饰者并不是一个容易理解的概念。对我来说,这个概念需要多次阅读(和动手任务)才能感到足够自信,但一旦你到达那里,一切都是值得的。

所以,慢慢来,不要着急。确保首先理解这些函数,以及我们今天讨论的所有内容。从那里开始扩展很容易。

我还想提一下,这是更高级的 Python 概念系列中的第一篇,接下来将讨论生成器和并行性等主题。它们对于可伸缩的、干净的编程环境也是必不可少的,所以一定要保持关注。

感谢阅读。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Dario rade ci

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

medium.com](https://medium.com/@radecicdario/membership)

加入我的私人邮件列表,获取更多有用的见解。

利用 Scikit-learn 进行 5 分钟的模型开发概述

原文:https://towardsdatascience.com/5-minute-rundown-of-scikit-learn-for-complete-beginners-c7dc06a5ca17?source=collection_archive---------47-----------------------

在 5 分钟内训练一个玩具模型。

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

最近, Edward Qian 和我做了一个为初学者介绍数据科学基础知识的网站(查看一下—T8)。scikit-learn 的初级读本可以在网站上找到,还有其他数据科学资源和实践问题。

我们想通过使用著名的虹膜数据集作为例子来展示使用 scikit-learn 训练玩具模型是多么容易。

scikit-learn 通常缩写为sklearn,是 Python 的机器学习库。除了用于特征工程、特征和模型选择的工具之外,它还支持跨多种算法的模型开发。

本演示的目的是展示 scikit-learn 特性,而不考虑在如此小的数据集上的实用性。所有代码都是 Python 3。

加载虹膜数据集

我们将使用数据集模块来加载 Iris 数据集。我们还可以使用pandas库和numpy库将数据转换成数据帧,以便于预处理。

数据集模块还提供了关于数据集的简短描述:

…数据集包含 3 类,每类 50 个实例,每类涉及一种鸢尾植物。一个类与另一个类是线性可分的;后者彼此不是线性可分的。

我们可以使用data.head()来预览前 5 行:

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

目标列代表鸢尾的亚种。

  • 类 0 是 Setosa
  • 第一类是云芝
  • 二班是海滨

使用 train_test_split 对数据集进行分区

我们应该总是保留一部分数据用于测试。永远不要在开发模型的同一数据上测试你的模型。这被称为数据泄漏,它导致过拟合,这高估了模型在后续观测中的性能。

模型选择模块有几个用于分割数据集和超参数调整的有用功能。我们将使用sklearn.model_selection.train_test_split将我们的数据集随机划分为一个训练集和一个测试集。

特征选择

我们如何知道我们想要在我们的模型中使用哪些特性?我们如何从噪音中区分相关的预测因素?这很大程度上归结于领域知识,但这也是一个可以通过特征选择技术自动化的过程。Scikit-learn 有一个专门的模块。

我们将使用SelectKbest功能来选择顶部的 k 显著特征。通过将 k 设置为我们可用的相同数量的特征,我们可以使用这些输出来量化每个特征的相关性。分类的 F 检验值将用作评分函数。

F 值分数表明花瓣尺寸比萼片尺寸更能预测。

  • 萼片长度(厘米):95
  • 萼片宽度(厘米):35
  • 花瓣长度(厘米):925
  • 花瓣宽度(厘米):725

这些分数很难单独解读。我们需要查看它们对应的 p 值,以确定它们对目标变量的影响的统计显著性。

我们可以从feature_selection.pvalues_获得 pvalues

如果零假设为真,并且如果我们多次重复相同的实验,p 值表示更多“极端”观察的百分比。这里的零假设是该特征对目标没有影响(即,我们不应该将其用作预测器)。

低 p 值表明我们应该拒绝我们的零假设——换句话说,拒绝特征没有效果的说法。

在这个例子中,我们有非常小的 p 值:2.65205811e-25,8.62129460e-13,1.97685433e-72,1.15999788e-66。我们绝对应该在模型中保留所有 4 个变量。

训练分类器

我们所要做的就是实例化分类器并调用 fit 方法在训练集上训练它。

这里有一个逻辑回归的例子。逻辑回归的predict方法返回预测的类。predict_proba方法返回每个类的概率分数。

有关逻辑回归算法的更多详细信息,请单击此处的。

评估绩效

在我们训练了我们的模型之后,我们想要评估它的性能。这可以帮助我们在候选模型之间进行选择,并将模型期望传达给涉众。Scikit-learn 的度量模块可以帮助我们做到这一点。

首先,我们使用模型来预测测试集的标签。然后,我们将预测标签与真实标签进行比较,以确定性能。

我们模型的准确率在 83%左右。混淆矩阵显示了正确和错误分类的细目分类。该模型非常善于识别 Setosa,但在区分其他两类时有困难。

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

这就是你所拥有的——一个使用 scikit-learn 的一些核心功能在不到 5 分钟的时间内训练出来的玩具模型。

所有代码都在一个地方:

感谢您的阅读!

如果你喜欢这篇文章,你可能想看看我关于数据科学、数学和编程的其他文章。通过 Medium 关注我的最新动态!

我还在建立一套全面的免费数据科学课程。来看看:【www.dscrashcourse.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值