使用 R 运行线性回归分析的 7 个步骤
我学会了如何用蛮力在 R 中做回归分析。通过这 7 个复制和粘贴步骤,你也可以做到。
照片由兰斯·安德森在 Unsplash 上拍摄。
我的经理认为我知道如何使用 r 进行回归分析。所以,为了保住我的位置,我决定用整个周末来学习如何做。把这篇文章看作是一个速成班介绍,学习如何用蛮力去做一件事。
跳到你想读的部分。下面的目录:
- 第一部分 | 我开始写这篇文章的知识范围
- 第二部分 | 我如何搜索我的资源
- 第三部分 | 回归提示:向工程师学习
- 第四部分 | 7 复制&粘贴步骤使用 R 运行线性回归分析
- 第五部分|下一步:改进你的模型
开始写这篇文章时,我的知识范围
首先,为了建立基础,让我告诉你我对回归了解多少,以及我能在 r 中做些什么。
我对周末线性回归的了解是:
- 该方程的格式为:y=ax+b,其中 y 为因变量,x 为自变量,a 为系数,b 为常数/y 截距。我知道这些术语的意思。
- 这是一种计算自变量 x 对因变量 y 的影响的方法。为了做到这一点,您需要使用现有的数据,并根据该方程测试所有情况,以找到最合适的 a 和 b,从而预测您没有数据的 y 值。
- 您可以添加任意数量的独立变量,并为每个变量附加一个系数,以查看每个变量对因变量的影响。也就是说,太多的变量不会改善模型,在某些情况下还会损害模型。
- 最好将数据标准化,以便使用 0 到 1 之间的值。这样,由于独立变量的性质,系数不会很小或很大(例如,4634 天和 13 年是可以在同一个模型中使用的两个变量,但因为它们的大小如此不同,系数可能会有偏差)。
周末我能做的是:
- dplyr 中的基础数据角力(
mutate
、filter
、select
、管道运算符%>%
、summarize
、点占位符、group_by
、arrange
、top_n
) - dplyr 中的图(
plot
、hist
、boxplot
) - ggplot2 中的图(几何图、
facet_grid
、时间序列图、轴变换、stratify
、boxplot
、斜率图) - 到目前为止,我所知道的关于 R 的一切都是从我参加的两门在线课程中学到的(1。 R 基础知识,2。可视化。
第二部分|我如何搜索我的资源
我是如何想出这个周末该关注什么的。
1.在学习 R 基础知识时,r-bloggers 对我来说是一个很好的资源,所以我决定从那里开始。我谷歌了一下“r-bloggers 回归”
谷歌搜索“r-bloggers 回归”结果
这是我想到的前四个链接:
- https://www . r-bloggers . com/how-to-apply-linear-regression-in-r/
- https://www.r-bloggers.com/linear-regression-using-r/
- https://www.r-bloggers.com/regression-analysis-using-r/
- https://www . r-bloggers . com/linear-regression-from scratch-in-r/
2.我浏览了每一个结果,并决定把重点放在第二个结果上,因为我在页面的底部看到它提到它将告诉我如何解决“现实世界的商业问题”
我选择引用的博客中的一段话。
我点击了链接“下一篇博客”,结果!"预测跳出率的基础上,在谷歌分析页面加载时间."因为我还没有提到,在这里要注意:我是在性能广告领域,所以这确实是我的拿手好戏。他们甚至做了一个 part 3 上的改进模型!
我已经找到了这个周末我要关注的事情。我要在这里汇编我学到的任何东西!
第三部分|回归技巧:向工程师学习
我和一位工程师进行了一次非常有益的谈话,这位工程师在周末解答了我的问题,我想和你分享一些他分享的技巧。总之,运行回归分析只是评估某些数据是否与其他数据有关系的调查的开始。在这种背景下,这里有一些方法可以确保你得出一个诚实的分析,并帮助你找出下一步。
- **将数据标准化,以便尽可能公平地比较系数。**虽然没有固定的方法来比较自变量之间的系数,但标准化数据至少可以让你看到自变量对因变量的影响。这是一个很好的研究起点:一旦你发现一个系数比另一个系数大,你就可以开始研究是什么导致了任何“高”系数。如果不对数据进行标准化,则每个值的范围可能会很大,从而导致系数的范围也很大,以补偿较大值的权重。
- **p 值显著性是确定性的指标。**即使一个系数很高,如果没有统计意义,往好了说是没有意义,往坏了说是毁了模型。(参见这篇博文中的“星号”部分,了解如何解读 p 值。)
- 运行回归时移除异常值,然后在创建模型后,使用每个异常值测试模型,以比较因变量的预测值和真实值。这可以让你看到你的模型有多健壮。如果离群值的误差很低,那么这个模型就大获全胜;如果误差仍然很高,那么您可以简单地继续断言它们是异常值这一事实。
- 除了查看总体误差,查看每个数据点的误差也很重要。通过这样做,你可以深入了解为什么某个点或一组点可能比其他点有更大的误差的任何原因或趋势。
- 废话进,废话出。没有好的数据,你就不会有好的结果。确保你知道你的数据来自哪里,并确保它是高质量的。
第四部分| 7 使用 R 运行线性回归分析的复制和粘贴步骤
所以我们在这里。是时候使用 r 实际运行回归分析了。
一般提示和说明:
- 对于引入代码的每一步,我都添加了一个例子的截屏,然后添加了一个相同的代码块,您可以将其复制并粘贴到您自己的 R 脚本中。
- 代码块适用于有 1 个独立变量的情况。如果有一个以上的自变量,请遵循 R 注释中的说明。
- 在每个代码块中,我都用斜体包含了括号,您可以用自己的代码替换它们,比如:
*[[insert your code]]*
。 - 当你用你自己的代码替换时,确保你删除了和括号和文本。这样做时,不要添加任何空格。
- 使用我的截图作为指导,特别是如果你有一个以上的自变量。您可以在每个步骤中执行,或者在复制并粘贴所有内容后一次性执行。
开始了。
- **获取一个包含所有要测试的变量的数据集。**选择要建模的因变量和自变量。所有好的回归都是从一个问题开始的。为了弄清楚你想要什么样的变量,问自己一个现实生活中的问题,以确定你需要什么。你想测试的关系是什么?
- 清理您的数据,并将其保存为 csv 文件 —删除所有不需要的变量列。在我的例子中,我想看看转换是否依赖于花费、影响、点击、usv 和 pv,所以我将保留这六个并删除其他所有内容。此外,请确保删除所有包含总计的行。清理后,保存为 csv 文件。
我回归分析要用到的数据。
3。用函数 **read.csv()**
将 csv 文件导入 R Studio。(参见此[链接](https://osxdaily.com/2015/11/05/copy-file-path-name-text-mac-os-x-finder/#:~:text=Right%2Dclick%20(or%20Control%2B,replaces%20the%20standard%20Copy%20option)了解如何在 mac 上获取路径名。)
将 csv 文件导入 RStudio。
#import data from csv file
data <- read.csv('*[[insert your pathname]]*')
从 3055 行数据开始。
4。使用 tidyverse 中的 **drop_na()**
**删除因变量的所有 NA 值。**参见此处的了解描述该功能的参考。
删除所有因变量“Conversions”为“NA”的行
#install tidyverse if you don't have it already
install.packages("tidyverse")#launch tidyverse
library(tidyverse)#remove na values of independent variable
data <- data %>% drop_na(*[[insert column name of your independent variable]]*)
删除了因变量的 NA 值(转换)。行数减少到 142。你已经知道这不是最强的数据集。
5。标准化你的自变量。我在 R 中通过将每个独立变量除以它们各自的最大值来做这个。
使用 mutate 为每个独立变量追加规范化列。
#normalize data (add additional %>% for any number of independent variables you have)
norm_data <- data %>%
mutate(*[[insert a simple name of independent variable]]*_norm = *[[insert column name of independent variable]]*/max(*[[insert column name of independent variable]]*,na.rm=TRUE))
为了分解我在上面所做的事情,让我们看看我对列 Spend 做了什么:mutate(spend_norm = Spend/max(Spend,na.rm=TRUE))
mutate()
:用于向现有数据集追加新列的函数spend_norm
=我的新专栏的名字Spend/max(Spend)
:归一化公式na.rm=TRUE
:用于删除空值的参数
因为我用新名称改变了每一列,从而创建了 5 个额外的列,所以我使用了函数select()
以便只保留相关的列。
只选择我需要的数据。
#select relevant columns (add additional commas and variable names for any number of independent variables)
select_data <- norm_data %>% select(*[[insert column name of dependent variable]]*,
*[[insert new normalized column name of independent variable]]*)
将数据标准化。行数保持不变,仍然是 141,因为我只是将原始列换成了它们的规范化版本。
6。查找并删除异常值。
对于我的数据集,我使用的方法是不考虑第一个四分位数以下四分位数间距(IQR)的 1.5 倍或第三个四分位数以上 IQR 的 1.5 倍。见这里我用来确定这个的参考和我复制的函数。这里有两个小步骤:
- 1.找出异常值。从原始数据集中为每个独立变量确定 IQR 和上/下范围**。**
- 2.移除异常值。从移除先前独立变量的异常值后获得的更新数据集中,仅选择落在步骤 1 中找到的上限和下限之间的数据。
我对每个独立变量重复这两步,最终得到子集removed5
。请参见下面 RStudio 中的我的代码。(你会发现我没有以最有效的方式做到这一点。希望有任何建议能让这更有效率。)
去除每个自变量的异常值的两个步骤。前两个独立变量的屏幕截图。
去除每个自变量的异常值的两个步骤。第三、第四和第五个独立变量的屏幕截图。
#removing outliers
#1\. run this code to determine iqr and upper/lower ranges for independent variable
x <-select_data$*[[insert new normalized column name of independent variable]]*
Q <- quantile(x,probs=c(.25,.75),na.rm=TRUE)
iqr <- IQR(x,na.rm=TRUE)
up <- Q[2]+1.5*iqr # Upper Range
low<- Q[1]-1.5*iqr # Lower Range#2\. run this code to select only the data that's between the upper and lower ranges
removed1 <- subset(select_data,
select_data$*[[insert new normalized column name of independent variable]]* >
(Q[1] - 1.5*iqr) & select_data$*[[insert new normalized column name of independent variable]]* <
(Q[2]+1.5*iqr))#if you're curious, see the new boxplot
ggplot(removed1,aes(*[[insert new normalized column name of independent variable]]*)) + geom_boxplot()#this is the new dataset you'll be working with
View(removed*[[insert # of total independent variables you normalized data for]]*)########if you have two or more independent variables, copy and paste the code below as many times as you need:#2nd independent variable ranges - repeating #1 and #2 above
#1\. run this code to determine iqr and upper/lower ranges for independent variable
x <-select_data$*[[insert new normalized column name of independent variable]]*
Q <- quantile(x,probs=c(.25,.75),na.rm=TRUE)
iqr <- IQR(x,na.rm=TRUE)
up <- Q[2]+1.5*iqr # Upper Range
low<- Q[1]-1.5*iqr # Lower Range#2\. run this code to select only the data that's between the upper and lower ranges
removed*[[insert # for what number independent variable you are on]]* <- subset(select_data, select_data$*[[insert new normalized column name of independent variable]]* > (Q[1] - 1.5*iqr) & select_data$*[[insert new normalized column name of independent variable]]* < (Q[2]+1.5*iqr))#if you're curious, see the new boxplot
ggplot(removed*[[insert # for what number independent variable you are on]]*,aes(*[[insert new normalized column name of independent variable]]*)) + geom_boxplot()#this is the new dataset you'll be working with
View(removed*[[insert # of total independent variables you normalized data for]]*)
移除所有独立变量的异常值,行数减少到 14。在这一点上,我不确定这些数据是否真的会对我有所帮助,因为这些行的数量很少,但是无论如何,我将尝试对它们进行回归。
**7。**回归时间!对数据使用 R 函数 **lm()**
**。**回到我正在学习的原始帖子来了解你在这里做什么的解释。
此数据集的回归模型。
#add additional variables as needed with + sign
Model1 <- lm(removed*[[insert # of total independent variables you normalized data for]]*$*[[insert column name of dependent variable]]* ~
removed*[[insert # of total independent variables you normalized data for]]*$*[[insert new normalized column name of independent variable]]*)
您已经创建了您的模型!现在,为了汇总结果,运行回归的最后一段代码:
summary(Model1)
总结(模型 1):回归的结果显示了“转化率”和自变量之间的关系。
我上面提到的工程师看了这些结果,马上说:“是啊,你的数据很烂。”他说每个变量的 T1 与其 T2 相比都太大了。他还提到,对于只有 15 行数据的模型,使用 5 个变量是没有意义的。
但是没关系…我们做到了!万岁!
第五部分|后续步骤:改进您的模型
所以我们已经进行了回归分析!…但这并不是结束。俗话说“所有的模型都是错的,但有些是有用的。”因此,你的下一步是找出如何改进你的模型,以确保你拉的东西实际上是有用的。从本周末我所学习的系列文章的第三篇文章中,以及一篇更详细的文章的支持下,我发现函数regsubsets()
的组合以及经过调整的 R2、Cp 和 BIC 指标允许我们计算出你的数据集中有多少变量实际上对正在讨论的模型有用。这有助于任何有两个以上自变量的模型。
使用**regsubsets**
函数来看看我的变量是否有用。
install.packages("leaps")
library(leaps)#add any number of independent variables that you need to the equation (note: this will not work if you only have 1 independent variable)
leaps <- regsubsets(removed*[[insert # of total independent variables you normalized data for]]*$*[[insert column name of dependent variable]]* ~
removed*[[insert # of total independent variables you normalized data for]]*$*[[insert new normalized column name of independent variable]]*,
data=removed*[[insert # of total independent variables you normalized data for]]*,
nvmax=*[[insert # of total independent variables you normalized data for]]*)summary(leaps)res.sum <- summary(leaps)
data.frame(
Adj.R2 = which.max(res.sum$adjr2),
CP = which.min(res.sum$cp),
BIC = which.min(res.sum$bic)
)
为了用我上面链接的帖子的话来解释我在上面做的事情,这里有一个帖子的摘录:
R 函数
regsubsets()
[leaps
package]可以用来识别不同尺寸的不同最佳模型。您需要指定选项nvmax
,它代表了要合并到模型中的预测值的最大数量。例如,如果nvmax = 5
,该函数将返回最佳 5 变量模型,即返回最佳 1 变量模型、最佳 2 变量模型、…、最佳 5 变量模型。在我们的例子中,数据中只有 5 个预测变量。所以,我们就用
nvmax = 5
。 ( )来源 )
关于上面代码的后半部分:
summary()
函数返回一些指标-调整后的 R2、cp 和 BIC(参见第[…]章)-允许我们确定最佳总体模型,其中最佳被定义为最大化调整后的 R2 和最小化预测误差(RSS、Cp 和 BIC)的模型。调整后的 R2 代表结果中由预测值的变化所解释的变化的比例。调整后的 R2 越高,模型越好。 ( 来源 )
根据他们提到的每个度量标准,最好的模型在下面的代码块中,并产生下面的结果。
res.sum <- summary(leaps)
data.frame(
Adj.R2 = which.max(res.sum$adjr2),
CP = which.min(res.sum$cp),
BIC = which.min(res.sum$bic)
)
基于这些结果,调整后的 R2 告诉我们,最好的模型是有一个预测变量的模型,Cp 和 BIC 标准也是如此。它说我应该把模型中的变量数量从五个减少到一个。这并不奇怪,因为我一开始只有 15 行数据。
就这样,我结束了我周末用 r 学习线性回归的大丰收。如果你和我一样,强行通过做来学习是了解一个主题的完美开端。我希望你和我一样从中获益匪浅。前进!
赢得垄断的 7 个策略
一个关于 Python、统计、可视化和童年记忆的故事
Raivis Razgals 在 Unsplash 上拍摄的照片
大富翁是世界上最受欢迎的棋盘游戏之一。它有许多不同的许可和本地化版本。孩之宝刚刚发布了一个更长版本的大富翁游戏,拥有三重属性,永远玩不完。
这是一款给人(好?)童年回忆。我以前在假期和亲戚的孩子一起玩,通常都是输。
我玩大富翁已经很多年了。但我真的想知道我是否可以打得更好,以增加获胜的机会。也许我能战胜困难。今天,我将分析我们如何最大化赢得垄断游戏的机会。
我们的分析涉及 Python、统计和可视化。
就像在现实世界中,游戏中的属性是不相等的。它们承载着不同的价值观和回报。许多人认为“Go”瓷砖前最昂贵的房产(Mayfair/Boardwalk 或 Blue 2)能给他们带来财富,而其他人更喜欢收集一整套铁路或公用事业。
代码可在 GitHub 上获得。
约定
- 命名 :我们将根据黑板上的颜色来命名酒店,因为它们在全球的不同版本中有不同的名称。原来还有各种各样的配色方案,但是我们将按照价格的升序使用以下版本——棕色、天空、粉色、橙色、红色、黄色、绿色和蓝色。还有铁路和公用事业。
- 标注 :我们用从 0 到 39 的整数来标注从 Go 到 Blue 2(即梅菲尔街/木板路)的每一个方块。
- 成本 :投资房产的玩家支付 A)一次性土地 价格,以及 b)房价价格,如果他们决定建造一些的话。
- 收入 :当对手拥有的财产落地时,玩家获得租金收入。
- 双打 :两个骰子有相同的数字。掷出双打的玩家可以再次掷骰子。
1.目标
a.韵律学
你希望在游戏中实现什么?你想赢。成为唯一的幸存者。挣钱。你想明智地投资能给你带来利润的房地产。我们正在到达那里。
安妮·斯普拉特在 Unsplash 上拍摄的照片
投资一套房产,需要多长时间才能达到收支平衡?我在游戏中能赚多少钱?我们需要建立一些指标来衡量你的表现。
- 盈亏平衡点:你需要多少个对手回合才能收回你投入的资金?棕色的很便宜,但是要很长时间才能收回成本吗?蓝色的很贵,但也许我会很快收回投资?
- 预期利润:一个游戏中每套属性的预期利润是多少?如果一场游戏有无限多轮,我们很有信心蓝色的一轮会给你带来最多的利润。然而,当其他人的钱都用完时,游戏就结束了。蓝色的可能不值得在短期游戏中投资。
一组属性的性能取决于 a)收入,b)成本,以及 c)对手登陆的可能性。如果不知何故,你的对手有 2 倍的可能在地产 A 上着陆,即使 B 的租金更高,它也更值得投资。薄利多销。
我们知道房产的成本和租金。它们写在他们的地契上。但是我们不知道它们的着陆概率。让我们找出答案。
b.方法—蒙特卡洛
我们将落地概率定义为玩家在回合结束时或下一次掷骰前(如果他们得到双倍)出现在牌上的概率。
游戏中影响落地概率的因素有很多。所有玩家在开始时从 Go(平铺 0)开始。他们在自己的回合中掷出一对公平的骰子,并相应地在棋盘上移动。因为掷出 7 比得到 2 或 12 更有可能,所以有些牌可能比其他牌被访问得更频繁。
Geoff Brooks 在 Unsplash 上拍摄的照片
当玩家落在不是属性的“临时”牌上时,他们会遵循该牌的规则,最终可能会出现在另一张牌上。
- 到达的玩家坐牢(平铺 30)显然是被送进了监狱(平铺 10)。
- 到达社区公益金 (CC)(牌 2、17 和 33)的玩家从 CC 牌组中抽取牌并相应移动。他们可能会留在目前的位置,但可能会被送进监狱。
- 到达机会(牌 7、22 和 36)的玩家从机会牌组中抽取牌并相应移动。他们可能会留在当前的牌,但也可能会被送去监狱、牌 5、11、24 或 39。他们可以后退三步。
- 连续三双的玩家被送进监狱。
你马上可以发现,登陆‘坐牢’的概率是零。玩家不能留在这个瓷砖上而不被送进监狱。
注意*‘免费出狱’卡让玩家不用付钱给银行就能出狱,它们不能用来避免入狱**。
非常复杂。
我们可以使用马尔可夫链和一些巨大的矩阵来解析地找到着陆概率。您可以从每个起始方块解析获得落在每个方块上的条件概率。我们不会这么做的。
或者,我们可以通过蒙特卡洛模拟来估算着陆概率。蒙特卡罗方法通过重复随机抽样来近似分布。在这种情况下,我们可以模拟垄断游戏一百万次。我们记录玩家出现在每张牌上的频率。记录的频率是着陆概率的近似值。我们模拟的游戏越多,我们对近似值就越有信心。
但是如何?
c.实现—面向对象的编程
我们模拟棋盘。我们模拟玩家掷骰子,在棋盘上走来走去,以及使用面向对象编程的其他一切。我们正在用 Python 实现它,代码可以在 GitHub 上找到。
米罗斯拉夫·乔纳斯在 Unsplash 上的照片
垄断游戏中有两种对象—棋盘和一些玩家。进行模拟时,玩家在棋盘上跑来跑去,通过掷骰子,有时在需要时从机会桌或社区公益金桌上抽牌。然后,玩家在每个牌上结束的概率可以通过蒙特卡洛模拟来近似。
某玩家有 1。状态:
- a 当前在板上的位置 ∈ [0…39] ,
- 一个双倍计数器,它计算连续掷出的双倍数∈[0]…3] 当一名球员连续掷出三个双打时,他会立即被送进监狱,并且计数器会重置
- 监禁 布尔变量*∈【0,1】区分*‘只是探望’和‘坐牢’**;
2。所有物:
- 随机牌组 ∈ [0,1] 中的监狱自由牌,以及
- 一张*社区公益金*∈【0,1】的监狱自由牌;
和 3。记录,
- 落在棋盘上每块瓷砖上的事件总数,以及
- 登陆监狱时“只是访问”和“在监狱中”的总次数。
玩家可以
- 掷骰子一对公平的骰子,
- 更新并记录他们的新位置,
- 更新他们的其他状态和所有物,以及
- 开始新游戏时清理他们的身份和财产。
另一方面,理事会
- 名称、物业类型、物业价格、房价、所有瓷砖的不同数量房屋的租金,以及
- 在游戏开始时将的牌和牌洗一次,在这里可以取出和放回免战牌。
板可以
- 模拟一个玩家掷骰子的回合以及之后将要发生的一切,以及
- 模拟从每副牌中抽一张牌。
迪伦·诺尔特在 Unsplash 上的照片
2.变量
a.着陆概率
让我们模拟一个四人垄断游戏一百万次。为了保持模拟简单,我们没有模拟玩家之间的货币交换或交易,因为这将使事情复杂化。
我们来定义一些变量。
对于一个 N 玩家垄断游戏,我们假设有 R 轮,其中每个玩家在每轮中进行轮游戏。对手回合总数为 (N-1)R 。我们假设每个玩家在一场游戏中玩相同的回合数,即没有玩家提前退出。
边注 1:按照官方垄断规则,连续双打算一次单回合。我们的模拟中仍然记录了每个替身的着陆。因此,对于每 100 圈,所有牌的预期落地数约为 119 。
为了获得更真实的近似值,我们将随机性添加到模拟中,其中一局游戏中的回合数 R 遵循平均值为 30 且标准差为 3 的高斯分布。平均值取自网上的一篇文章,方差是任意的。
蒙特卡洛模拟的主脚本
让我们用一个条形图来可视化每个瓷砖 s 的落地概率 p(s) 。
大富翁棋盘上牌的落地概率
哇。
我当然没想到会这样。着陆概率并不相等。我们可以观察到
- 你有 0%的几率像预期的那样“进监狱”,
- 你更有可能出现在 CC 牌上,而不是运气牌上,这可能是因为牌组中的牌组合不同,
- 你有 6.31% 的几率最终进监狱,包括“只是探访”和“进监狱”两种情况,
- 监狱是最常去的瓦即使我们排除‘只是去看看’,
- 布朗 1 号(老肯特路/地中海大道)是最少光顾的房产有 1.98%的几率,
- 红色 3(特拉法尔加广场/伊利诺斯大道)是最常光顾的酒店,概率为 3.16%,这可能是因为将玩家送到该酒店的机会卡,以及
- Orange 3(Vine Street/New York Avenue)和 Orange 2(Marlborough Street/Tennessee Avenue)是访问量最大的房地产竞赛的亚军,这使得 Orange 平均成为访问量最大的颜色集。这是因为他们经常被刚离开监狱的玩家访问,监狱是棋盘上被访问最多的地方。
也许棕色的那套不值得投资。也许橙色的是必须买的。我们在现阶段不能确定,因为我们没有考虑到他们的租金和成本。让我们也做那件事。
旁注 2 :监狱落地概率可能低估。我们假设一个玩家通过使用免罪卡或者支付 50 英镑/美元来出狱。他们不会试图不付钱就卷铺盖走人。这个假设在游戏开始时成立,但在游戏结束时不成立,因为呆在监狱里是避免付房租的最佳策略。
b.投资成本
房产的投资成本 c(s,h) 包括土地价格和房屋价格。不同的房产和上面建的房子数量有所不同。它们被硬编码到程序中。
每种颜色、铁路和公用设施的成本矩阵
请注意,我们考虑的是整个色彩组合的投资成本,而不是单个属性。这是因为房子只有在玩家拥有整套颜色时才能被购买。
我们还以类似的方式对租金收入矩阵 r( s,h) 进行了硬编码。
3.估价
a.盈亏平衡点
我们将资产的盈亏平衡点定义为预期的对手回合数收回投资所需的时间。这是通过总财产成本除以每个对手回合的预期租金收入计算出来的。财产的每个对手回合的预期收入与其落地概率和租金收入成比例。我们可以使用相同的逻辑,通过以下公式找出颜色集的盈亏平衡点。
我们还将增量盈亏平衡点定义为收回增量投资所需的预期对手回合数。这意味着如果玩家决定建造额外的房子,他们需要多长时间才能收回他们的钱。
让我们看看盈亏平衡点如何随着不同数量的房屋而变化。为了可视化的目的,5 个房屋对应于一个酒店。
每种颜色的盈亏平衡点作为房屋数量的函数
我们发现
- 它需要最长的时间来收回你在棕色电视机上的投资,
- 即使你投资了天空、橘子和 T21,也很容易收支平衡。
- 与 1 或 2 个房子相比, 3 个房子的房子更容易达到收支平衡
- 如果你投资绿色或蓝色系列中的第四个房子,你可能无法收回你的钱。
我们仅仅基于盈亏平衡点的比较,就想出了以下策略。你应该
- 忌棕色套、
- 用你所有的其他颜色快速建造 3 栋房子
- 建造天空中的第四座房子和/或橙色布景,如果你拥有它们的话。
蒂埃拉·马洛卡在 Unsplash 上拍摄的照片
b.预期利润
我们都知道游戏的目标不仅仅是收支平衡。
你想挣钱,想让对手破产。一台彩色电视机的利润是该电视机的总收入和总成本之间的差额。收益与对手回合总数成比例,而成本是常数**。它们可以通过以下公式计算。**
我们之前假设一局游戏中的回合数 R 或多或少是恒定的。对手回合数 T=(N-1)R 线性增加,因此收入(和利润 P )随着玩家人数的增加而线性增加。
让我们看看,如果你拥有不同的颜色组合和不同数量的房屋,你的利润会随着游戏中不同数量的玩家而变化。还绘制了持有所有 4 个站和持有所有 2 个公用事业公司的利润,以供参考。
N 人游戏中每种颜色的预期利润,N 在 2 到 7 之间
我们发现
- 棕色的那套一文不值,
- 在玩家开始建造房屋之前,获得 4 条铁路可以在游戏开始时给你带来快速的现金,
- 建造第三座房子时利润大幅增加,
- 橙色在双人游戏中占优势,
- 红色、黄色和绿色也很有希望
- 蓝色是普通的。
因此,您应该
- 避开公用设施,棕色或粉色,
- 如果你一开始能负担得起,就把所有的 4 条铁路都拿走,不要坚持用其他财产来换取铁路的收藏,因为从长远来看做得不好,
- 在双人游戏中,选择天空的和橙色的和和,
- 在 3+玩家游戏中,选择橙色、红色和黄色,
- 选择绿色的 4 人以上的游戏,
- 如果你有足够的现金储备,只在 4 人以上游戏中选择蓝色
- 快速建造 3 栋房子。这是关键。
由 Alexander Mils 在 Unsplash 上拍摄
4.外卖
总之,我们使用蒙特卡洛模拟法来估算着陆概率,以便计算在 N 人游戏中,在一定数量的房屋下,每个颜色集的盈亏平衡点和预期利润。基于上述观察和策略,我们总结出以下 7 个你应该遵循的策略 。
- 避免公用事业和棕色设置,
- 当获得铁路收集以获得短期收益时,或获得 4+玩家游戏中的蓝色设置以获得长期收益时,请注意您的现金储备,
- 根据游戏中玩家的数量选择橙色、红色、黄色和/或绿色,
- 为你拥有的每种颜色快速建造 3 个房子,
- 注意你的现金流,如果经济上可行的话,建造第四所房子来最大化你的利润,
- 避免购买旅馆,否则你会为对手腾出房子,因为一场比赛中只有 32 个房子
- 以不交钱的方式呆在监狱里,以避免后期交房租。
你应该对我们的分析持保留态度,因为我们做了很多假设,这些假设在某些情况下可能不成立。每个游戏都不一样,很难一概而论。考虑到不可预测的人类行为也是极其困难的,因为玩家被允许和鼓励彼此自由交易。
有趣的事实
有 1.94% 的几率,你在一个回合后入狱。你可以在替身的帮助下点击“进监狱”,或者从任意一副牌中抽取“立即进监狱”牌。
千载难逢的机会。
一生一次机会的蒙特卡罗模拟
感谢阅读!同样,代码可在 GitHub 上获得。你也可以注册我的时事通讯来接收我的新文章的更新。如果您对 Python、统计或可视化感兴趣,以下文章可能会有所帮助:
超越 lambda、map 和 filter 的 Python 技巧
towardsdatascience.com](/5-python-features-i-wish-i-had-known-earlier-bc16e4a13bf4) [## 为什么样本方差除以 n-1
解释你的老师没有教过的高中统计学
towardsdatascience.com](/why-sample-variance-is-divided-by-n-1-89821b83ef6d) [## 使用交互式地图和动画可视化伦敦的自行车移动性
探索 Python 中的数据可视化工具
towardsdatascience.com](/visualizing-bike-mobility-in-london-using-interactive-maps-for-absolute-beginners-3b9f55ccb59)
最初发表于edenau . github . io。
作为一名初级数据科学家,我在两年中学会了 7 件事
我很想让我这个有抱负的数据科学家知道
LinkedIn 销售导航员在 Unsplash 上的照片
得到一份数据科学的工作是目标,但不是目的。第一天,你可能会发现自己置身于一群似乎一直都知道自己在做什么的人当中。老实说,这很可怕,而且一开始会让人不知所措。你努力学习和提高自己的技能,但就在你被录用并认为自己足够优秀的时候,自我怀疑再次袭来。
在我作为初级数据科学家工作的头几个月甚至几年里,我有过相当多的自我怀疑。尽管这让我对自己和这个职业有了更多的了解。这就是为什么我想与你分享我所学到的,希望你的自我怀疑会更容易控制。
如果你是一名有抱负的数据科学家,希望很快被聘用,这篇文章将帮助你了解当你开始职业数据科学家之旅时可能会面临的困难。了解潜在的问题是了解工作现实的好方法。
到目前为止,最重要的事情是要有条理,进行版本控制并记录你的进展
我的许多项目开始得非常慢。数据需要一段时间才能到达,有许多会议要参加,同时我做了一些辅助工作。这就是为什么在我的前几个项目中,我没有从保持一个可靠的文件系统开始,也没有记录我所做的事情。大错特错。当项目开始时,它开始了,一切都进行得如此之快。如此之快,以至于如果你还没有一个系统来跟踪你的进展,一旦项目开始,你可能就没有时间来设置它了。
现在我所做的是组织我的文件夹和文件,在行动开始前设置相关的版本控制环境。最重要的是,我养成了在笔记本上写标题和评论的习惯,甚至在我开始编码之前,这样当我开始编码的时候,我就知道所有东西都放在哪里了。
我还写每周进度日志,记下我每周做了什么,以及下周打算做什么。这样,我可以随时回顾过去,并刷新我对迄今为止所做的事情的记忆。哦,最重要的是,我学会了正确命名。让我告诉你,当你有 10 个不同的笔记本,上面有一个项目的不同部分,有着非常相似或不可描述的名字,并且在 2 个月的休息后试图找出哪个做了什么,这并不好玩。
对自己的能力要有信心,你知道的比你想象的多
当你刚开始工作时,感到不自信是很常见的。你周围的每个人似乎都知道自己在做什么,而你只是在努力学习诀窍。相比较而言,在这个岗位上干了多年的人当然比你懂得多。那很自然,但是你也知道很多。不要认为你的努力是理所当然的。
此外,你总是有机会了解更多。这份工作并不要求你记住所有的东西,而是要求你在需要的时候能够灵活地学习新的东西。这才是你真正的价值所在:具备能够快速学习新工具和技术的基础。
在你不确定的话题上做一些副业
单独或在小组中研究你不确定的话题是非常有帮助的。召集一些资历较浅的同事,说服一些资历较高的同事,一起开展一个副业项目。你的同事基本上就是资源。用他们的知识来提升自己。有一个你们一起工作的课外项目是很棒的。不会有时间,金钱或客户的压力。这将是学习的全部。如果你不能说服你的同事这样做,那就自己去做,也许当你谈论你学到了多少,你有多开心的时候,你的同事会想加入进来。
跟随你的上司并不可耻
你的主管很可能是一名高级数据科学家。如果不是这样,你可能应该找一个资深数据科学家做导师。这个人已经知道什么是商业智慧和技术智慧。这有点像幼狮看着父母学习捕猎。你需要观察和学习这个人。注意他们如何处理日常办公室事务,他们如何与客户交谈,他们如何向非技术人员解释技术问题,他们如何以及为什么对项目做出某些决定。确保在他们周围戴上你的观察帽。
倾听是关键
当我开始工作时,我意识到沟通在数据科学中非常重要。我只是没意识到它有多重要。不管是你的主管,你的客户,还是和你一起工作的团队的领导,你都必须注意他们所说的话。我确信这对许多职位来说都是正确的,但我发现对数据科学家来说尤其如此。这可能是因为数据科学家充当许多不同团队之间的中介,从组织的不同部分获取输入,并负责组合这些信息并从中获得意义。这就是为什么你需要学会倾听和监控你需要的信息。
问吧。全部。你的。问题。
我怎么强调都不为过。你不应该展示你不知道的东西,这是很自然的,但相信我,提问是成为更好的数据科学家的关键。没有人指望你知道所有的事情或者知道所有的答案,尤其是当你是一个大三学生的时候。当你不能马上给出答案时,可以随意说“我不知道”或“我需要再联系你”。如果有人使用你不熟悉的短语和术语,不要害怕问他们在谈论什么。隐瞒你不知道的事情只会妨碍你和某人的职业关系。毕竟,你在讨论中贡献了多少比你给人的印象有多渊博更重要。
相信你的直觉,但要有外界的支持
当你从事数据科学项目时,有许多决策点。我如何分离训练集和测试集,对分类变量使用什么类型的编码,在训练中包括哪些特征,生成哪些新特征…其中一些比其他的更重要,但它们都对最终的模型有影响。在某些时候,你不能到处去试图优化每一个决定。这就是为什么你需要相信你的直觉和你的经验(这在开始时非常少)来决定有时该走哪条路。我发现记下我做出的大部分(如果不是全部的话)决定和假设非常有用,以便能够追踪它们。如果在任何时候你感到不自信或困惑,把你的担忧告诉一个或多个同事,并讨论你的假设。你会从他们的经验和投入中学到很多。
正如你可能已经意识到的,这些要点中有许多是关于学习的。这是因为当你是一名数据科学家时,学习永远不会结束。这可能是你在考虑这个职业时应该记住的第一件事。初级数据科学家的很大一部分时间都花在寻找他们知识中的漏洞,试图修补漏洞,同时努力跟上最新的发展。
我希望这有助于你看到硬币的另一面,看看你开始工作后会发生什么。请在评论中告诉我,你是否希望在你从事数据科学的头几年里遇到任何其他困难!
您是否打算转行从事数据科学职业,但不确定从哪里开始? 通过我的网站免费参加我的数据科学入门课程。
本课程旨在帮助您:
- 阐明您的数据职业目标,
- 明白努力的方向,
- 了解必要的技能,
- 在您的学习旅程中做出明智的决定
此外,我每周发表文章、采访数据专业人员和免费资源,以帮助专业人员有效地将他们的职业生涯转向数据科学。如果你对你需要学习的东西感到迷茫,对所有声称自己是最好的课程感到困惑,觉得没有一门课程对你的目的来说足够完整,我的网站就是为你准备的。
培养强化学习者时要考虑的 7 件事
尽管我们在强化学习研究方面取得了很大的进展,但是仍然缺少一个统一的框架来比较这些算法。此外,研究论文中报告的指标没有提供足够的信息。在这里,我们讨论一些潜在的东西来使分析更加严谨。
我们都知道强化学习纸是如何工作的。研究人员 A 发布了一个算法 B,算法 B 在策略上选择的环境子集上优于其他“最先进”算法的子集,这些环境子集恰好对该算法工作良好。此外,作者可能会或可能不会优化基线的超参数,但反过来,报告算法 b 的最佳运行。
不去细说是什么导致了这种研究趋势,我们可以做一些事情来改善它。为了进行有效的比较,适当的算法评估指标(除了适当的基准之外)是必不可少的。大多数情况下,研究人员用来评估算法性能的是运行的平均性能,如果你幸运的话,他们甚至会报告中位数,这可能会提供更多的信息。虽然听起来有点愤世嫉俗,但我不得不说,与机器学习的其他子领域相比,RL 是面包和黄油,例如甚至没有多次运行算法(视觉人,我在跟你说话:)。
【https://uscresl.github.io/humanoid-gail/
因此,这篇文章是关于我们必须看什么来比较一种强化学习算法和另一种,一个很好的灵感来源是[1],其中作者建议了一种计算 RL 算法的各种度量的具体方法,但我们将更多地从顶层角度来看它,因为错综复杂只是更大目标的技术细节。
最直观的是,当一个人开发一个算法时,你应该看看它对训练过程中的各种因素有多敏感,比如随机种子和超参数。较少的可变性意味着算法更加稳定、健壮、可靠等。除了一般可变性之外,我们想要查看不同事物的最坏情况,即当有度量时,它在分布的较低尾部是什么。难怪[1]的作者从金融中获得灵感来定义具体的指标,因为事实证明我们也关心 RL 中的风险和可变性。总而言之,不同的“可靠性”类别可以分为以下几类:
http://www . IRI . UPC . edu/files/scidoc/2168-Learning-cloth-manipulation-with-examples . pdf
1.推广培训期间的可变性
理想情况下,我们希望有持续的、单调的改进。这意味着平均性能应该随着每次推出和推出内而增加,并且性能不应该随着推出而(显著地)变得更差。不幸的是,大多数情况下,RL 算法往往是不稳定的。可变性的来源可能是环境,所以您要做的是考虑环境中的随机性,并在指标中对其进行调整。理想情况下,你会
希望在训练结束时获得最佳表现,而不是在中途。
2.不同训练跑的可变性
训练的初始条件不应该显著影响算法的性能,这就是为什么在不同的训练运行中查看不同的随机种子是重要的(视觉人,我在看着你!).还应考虑对超参数的敏感性。
3.评估中各次展开的可变性
我们希望该算法在评估中产生类似的性能和行为。这显示了该算法如何处理环境的随机性和不同的初始化条件。还必须考虑到的是,在首次展示中可实现的最大性能可能取决于初始状态,也应该考虑到这一点。
4.培训推广中的短期风险
该算法应该在最坏情况下表现出一些保证。这在训练期间有安全考虑的情况下尤其重要。在短期情况下,我们希望算法的性能不会局部波动太大。有效地观察风险意味着观察(局部)分布最低尾部的期望值,低于某个百分点(假设为 5%)。
5.培训推广中的长期风险
纵观整个展示,我们希望缩小展示中最差和最佳性能之间的差距。与短期情况相比,这里我们将根据整个部署来拟合分布。我们很少在首次展示中获得最差性能的预期性能值,但这是可能的。显然,同样,这可能来自算法的不稳定性,也可能来自环境的特性。
6.训练中的风险
与 1 相反。我们在丢弃异常值后查看可变性的地方,这里我们想看看在低概率下会发生什么,我们得到一个非常差的种子或一组非常差的超参数。
7.评估时跨展开的风险
相比之下,3。点,我们在评估中查看许多部署的最差情况性能。同样,可变性的来源可能是算法,也可能是环境。
在开发强化学习算法时,这些都是需要考虑的好事情。获得这些指标后,可以使用标准的统计显著性测试来确定算法 A 是否优于算法 b。在研究论文中纳入这些指标可能会为科学家节省大量时间,并且还会引起现实的期望。不限于理科,如果你来自工业界,考虑这些方面可以帮助你决定针对你的具体问题选择哪种算法。
虽然我不完全同意[1]中所写的,但这是一本好书,作者提出了一些重要的观点。更重要的是,代码是开源的,因此您可以立即开始运行评估。
参考
[1]测量强化学习算法的可靠性,陈等,ICLR 2020
我们在视频标签工具中寻找的 7 样东西
以下是需要注意的问题和要问的问题:
2020 年 7 月, V7 Labs 发布了其视频标注工具。这是 6 个月开发旅程的一部分。以下是我们不得不注意的,这将不可避免地影响你的机器学习项目的质量。
1.视频帧质量:避免视频压缩
视频压缩,无论是 H264、H265,还是任何以. MP4 结尾的扩展名。AVI。MOV,几乎总是有损耗。大多数流媒体服务中使用的 H264 视频比未压缩的图像系列轻 20 到 200 倍,人眼很难注意到运动中的差异。
然而,当您捕获静止图像时,这种差异是显而易见的,并将影响您的注释质量和训练数据。
来源: Geeksforgeeks
视频压缩主要影响运动中的元素,并且在存在噪声(在黑暗场景中很常见)的情况下表现得非常糟糕。像 H265/HEVC 这样的现代视频压缩在处理较小的移动项目方面做得更好,但是它们仍然比它们应该的更断断续续和更像素化。这将最终影响模型检测运动中较小项目的方式,并学习在运动模糊中检测它们。
来源: Frame.io
你可能还需要注意的是帧采样。大多数视频以 30FPS 拍摄,但除非你正在测试快速对象跟踪算法,否则你不需要频繁地标记。大多数计算机视觉应用需要 2FPS 的高多样性数据集,或者 15FPS 的以人的速度进行实时跟踪(这不是移动的汽车,而是行走/互动的人)。我们已经内置了一个帧采样器,允许您调整视频的帧速率进行标记。这不会影响视频质量,但可以让你不用注释几乎相同的帧。
来源: V7 实验室
确保您使用的任何视频注释系统都允许您**以全分辨率标记未压缩的视频帧。**通常会避免这种情况,以确保视频可以流畅播放。以下是需要注意的事项:
**问题:**从原始文件中标记视频时,我们预计会有什么图像质量损失?
2.z 堆叠标签:是什么让视频编辑工具与众不同
早在 2004 年我 11 岁的时候,我的学校购买了一些现已不存在的 Macromedia Flash MX 的许可证。让 Flash 在当时脱颖而出,并导致 2000 年代中期动画和游戏创造性爆发的是它处理如此多同时移动的对象和运动图形关键帧插值的能力。
这是 Adobe Flash Professional 2016,它的化身在被弃用之前的最新版本。来源:Alan Becker flash 教程
类似地,像 Adobe Premiere Pro 或 After Effects 这样的专业视频编辑软件,凭借其可以支持的同步轨道数量,使自己与免费或开源的替代品区分开来。这给 UX 和工程带来了挑战,因为视频注释可能需要数百个同时出现的对象,在时间线中有独立的入口和出口点。
Adobe Premiere Pro 中繁忙的时间线,有 11 个音频和视频轨道。我们将不得不处理 100+。来源:Adobe
这意味着我们不能像在视频编辑中那样使用基于轨道的时间轴,因为需要巨大的垂直空间。相反,我们选择在一个单独的层栏中定义重叠的注释,并让时间轴自动调整,以在一个狭窄的范围内适应尽可能多的注释。
我们的视频注释系统的画板草图。来源:V7 实验室,设计
我们选择了基于出现顺序的自动调整时间线,但是水平轨道可以在注释之间共享。这样,当一个对象退出框架时,下一个对象会出现在它的位置上。此外,关键帧会记住它们在时间上的位置,因此如果调整了注释的持续时间,关键帧也会相应地调整。
来源: V7 视频注释
**问题:**一个视频中可以同时出现多少个物体?
答:确保每个都可以有一个在你界面上清晰可见的起点和终点。这将有助于 QA,因为时间错误是视频注释中最常见的错误之一,对网络性能非常不利。
3.关键帧:查看发生变化的地方
关键帧用于地球上的每一个视频编辑和动画软件。就像他们说的,如果它没坏,就不要修理它。
根据软件的用途,它们可能会被不同地处理。例如,在像 Adobe Premiere Pro 这样的视频蒙太奇软件中,它们处于后座位置,只有打开剪辑的设置才能看到。最终剪辑也是如此,一次只能看到一个片段。对于像 After Effects 或 Adobe Animate(ye olde Macromedia Flash)这样的动画软件来说,它们占据了中心位置,因为它们是动画师的主要交互模式。
来源:V7 实验室,Adobe.com,苹果
图像注释比视频编辑更接近运动图形。
在 V7 中,我们希望确保一个形状中的关键帧独立于另一个形状。因此,每个注释都有自己的一组关键帧,可以定义它们的位置、形状、属性或任何其他支持的属性,如可见/隐藏、遮挡等。
来源: V7 视频注释
我在视频编辑套件中发现令人沮丧的事情是错误地在错误的帧中编辑属性,丢失了一个关键帧,所以我们让每个都成为可点击的快捷方式。
问题: 关键帧是如何工作的?注释中发生的事件(如属性变化或形状变化)是如何被明显标记的?
回答:确保很容易发现变化,否则你的 QA 会变得凌乱而耗时。还要确保每种注释类型都支持某种形式的关键帧。
4.插值:走多远?
先说线性 vs 三次插值。这真的重要吗?
来源:V7 实验室,研究
不完全是,不。我们在这里讨论的是空间插值。大多数对象,例如左边的球,都是按照三次样条曲线移动的。然而,在制造业中这是不正确的,因为齿轮的性质,运动几乎总是线性的。即便如此,最大的区别并不在空间插值上,而是在时间插值上**。本质上,难处理的不是物体的弧形运动,而是加速和减速。时间插值让用户感到困惑,以至于“时间插值”是 After Effects 教程中搜索最多的概念之一。我们发现保持时间线性在避免用户沮丧方面做得更好,代价是多点击几次。
来源: V7 达尔文
包围盒插值
最容易处理的是边界框。本质上是两个坐标点的移动。你唯一想要确保的是边界框可以随着时间改变状态,例如添加或丢失属性,或者隐藏。
来源:V7 实验室,研究
多边形插值
当您有潜在的无限数量的点要处理,并且您的源和目标形状使用不同数量的点时,事情会变得更加困难。我们发现在多边形注释中,这几乎适用于每一种情况。
在数学中,这被称为稳定婚姻问题。形状还有一个额外的挑战,就是必须确保目标点和原点彼此靠近。实时计算这可能是一个挑战。
我们包括了实时多边形插值,因为分割遮罩是我们工具的主要组成部分,我们认为我们在解决它方面做得很好,但是它仍然不完美。
如果你有兴趣深入了解为什么多边形插值是棘手的,Flash 动画师 Alan Becker 的这个优秀教程展示了它的一些缺点。
关键点插值
来源: V7 变更日志
关键点骨架是多边形插值的一种变通方法,因为它们有一定数量的点。您还需要确保能够插值骨架或自定义多边形。如果数据中有需要,请确保能够标记被遮挡的关节。这里有一个视频关于我们如何在 V7 上处理视频注释中的关键点骨架。
基于神经网络的插值
最后,我们发现平滑视频中多边形的最有效方法是在每一帧(或 2-5 帧,在它们之间插值)上运行神经网络,并进行任何必要的调整作为网络的输入。这里,我们使用自动注释,它是类不可知的,响应用户的点击,作为重新绘制分割蒙版的提示。
5.擦洗性能:为什么视频编辑花费$000 的权利编辑套件。
因为一个滞后的视频让人抓狂。当人们购买视频编辑软件时,它不是关于预置、效果或过渡的——那些都是购买后从市场上下载的。是因为回放体验和实时渲染的保真度。你要反复播放同一个 3 秒钟的序列十几次,确保它是流畅的!
有两个因素需要注意:
- 视频播放得有多好,你能以多快的速度跳过视频的各个部分并播放一个序列。
- 视频播放时,注释的渲染有多流畅和忠实?确保您在测试时使用了尽可能多的标签,就像您预计在生产中使用的那样。
并且可能
3.上传视频后,您能以多快的速度处理视频,并在完成后生成导出?
当一个视频被完全标记时,不要低估性能损失。大多数注释系统运行在有性能限制的浏览器上,当您作为数据科学家或评审员检查工作质量时,会变得非常慢。
6.慢速连接性能:它能在世界上的每个地区工作吗?
*cdn 是 SaaS 的无名英雄。他们通过让内容的一部分更靠近用户来确保内容交付给用户,同时(如果做得好的话)仍然符合 GDPR 或 HIPAA。
这意味着:**如果一个演示在加州的 Macbook Pro 上运行良好,那么它可能在秘鲁的用户中运行不佳。*对你来说 2 秒钟就能加载的内容,对某些用户来说可能需要 60 多秒才能加载,这仅仅是因为他们的位置。在这一点上,标记数据的用户并不总是在超快的连接上。
当你能在主题中找到的唯一插图是剪贴画时,你就知道有些东西很无聊
来源:谷歌 Chrome 浏览器
通过使用连接到远程国家的 VPN 来测试视频注释的性能。您也可以通过在浏览器的开发工具(CTRL+ALT+I)中转到网络选项卡来模拟较慢的连接。左图是 Chrome 的。
问题: 【地区】是否有用户,他们报告的网络性能如何?
回答:你应该可以测试该地区服务的性能,得到一些具体的数字。
7.视频数据集管理:当你深陷数据时会发生什么?
事情会大规模崩溃,如果不是不可能的话,修补一个不是为你的最终目标而构建的产品是非常困难的。当寻找一个标签合作伙伴,你把你的业务交付在他们手中。确保他们对其工具的长期和大规模性能坦诚。
我们也遇到规模问题,并且从未停止遇到边缘情况。加载几十个正片长度的视频?检查。8:1 纵横比的视频?检查。拥有数千个类别和数万个属性的视频数据集?检查。如果您没有构建支持它们的先决条件,那么支持它们是很棘手的,并且可能会让您付出高昂的代价。
数据集管理界面中的一系列待标注视频。来源: V7 达尔文
我们遇到了太多的企业因为规模表现不佳而放弃了内部工具或开源标签平台。这是一个痛苦的转变,因为它必须发生在你全力生产的时候。对于视频,这些性能问题会成倍增加。以下是要注意的事项和要问的问题:
问题:数据集大小- 当我的一个数据集达到 10 万个视频时,性能会如何下降?100 万怎么样?你能提供一些你如何克服规模问题的例子吗?
回答:没有什么是完全尺度不变的。你可能会发现在检索和搜索视频时速度变慢了。确保该工具的开发人员已经和另一个客户一起经历过这个挑战,并且没有忽视这个挑战。
问题:数据集管理 — 我可以通过名称、状态、标签或标记它的用户来搜索或检索任何视频吗?
回答:你会需要这个的。在培训结束后,有时需要对数据集进行拆分、重新调整用途、清理或故障排除。
问题:数据集完整性 — 你是否保留了每个视频的变化历史,以备我们遇到地面真相的问题?您是否备份了这些资产?
回答:你至少要确保你有机会发现一批坏数据*,因为错误往往要么发生在同一时间段内,要么发生在用户内。您还希望确保每天都备份注释、数据以及任何性能和历史指标。删除中的人为错误是我们每天都会遇到的事情,而且太常见了。*
我希望这是一个有用的指南,告诉你应该注意什么。确保在开始机器学习数据标记时,你已经涵盖了所有可能的场景,因为你使用的工具将是你的 ML 进展的基石。如果你想看看我们最终在 V7 中构建了什么,下面是一个视频摘要:
最大化 PyTorch 性能的 7 个技巧
在过去的 10 个月里,在开发 PyTorch Lightning 、时,团队和我已经接触到了许多构建 PyTorch 代码的风格,我们已经确定了一些我们看到人们无意中引入瓶颈的关键地方。
我们非常小心地确保 PyTorch Lightning 不会在我们为您自动化的代码中犯任何这些错误,当我们检测到这些错误时,我们甚至会尝试为用户纠正它们。然而,因为 Lightning 只是结构化的 PyTorch,而你仍然控制着所有的科学 PyTorch,所以在很多情况下我们不能为用户做什么。
此外,如果您不使用 Lightning,您可能会无意中在代码中引入这些问题。
为了帮助你更快地训练,这里有 8 个你应该知道的技巧,它们可能会降低你的代码速度。
在数据加载器中使用工作线程
这第一个错误很容易纠正。PyTorch 允许在多个进程上同时加载数据(文档)。
在这种情况下,PyTorch 可以通过处理 8 个批处理来绕过 GIL 锁,每个批处理在一个单独的进程中进行。你应该用多少工人?一个好的经验法则是:
num_worker = 4 * num_GPU
这个 answe r 对此有很好的论述。
警告:坏处是你的内存使用量也会增加(来源)。
引脚存储器
你知道有时你的 GPU 内存显示已满,但你很确定你的模型没有使用那么多吗?这种开销被称为固定内存。这个内存已经作为一种“工作分配”被保留
当您在数据加载器中启用 pinned_memory 时,它会“自动将获取的数据张量放入 pinned memory,并使数据更快地传输到支持 CUDA 的 GPU”(source)。
在这篇 NVIDIA 博客文章中描述的固定内存。
这也意味着您不应该不必要地呼叫:
torch.cuda.empty_cache()
避免 CPU 到 GPU 的传输,反之亦然
# bad.cpu()
.item()
.numpy()
我看到大量使用。项目()或。cpu()或。numpy()调用。这对性能非常不利,因为这些调用中的每一个都将数据从 GPU 传输到 CPU,并且显著地降低了性能。
如果您试图弄清楚附加的计算图,请使用。请改为分离()。
# good.detach()
这不会将内存转移到 GPU,它会删除任何附加到该变量的计算图形。
直接在 GPU 上构造张量
大多数人都是这样在 GPU 上创建张量的
t = tensor.rand(2,2).cuda()
但是,这个先创建 CPU 张量,然后再传递给 GPU……这个真的很慢。相反,直接在你想要的设备上创建张量。
t = tensor.rand(2,2, device=torch**.**device('cuda:0'))
如果您使用的是 Lightning,我们会自动将您的模型和批次放在正确的 GPU 上。但是,如果你在代码中的某个地方创建了一个新的张量(例如:VAE 的样本随机噪声,或者类似的东西),那么你必须自己放置这个张量。
t = tensor.rand(2,2, device=self.device)
每个 LightningModule 都有一个方便的 self.device 调用,无论你是在 CPU、多 GPU 还是 TPU 上,它都可以工作(即:lightning 将为该张量选择正确的设备。
使用分布式数据并行而不是数据并行
PyTorch 有两个主要模型用于在多个 GPU 上进行训练。第一个,DataParallel(DP),跨多个 GPU 拆分一个批处理。但这也意味着模型必须复制到每个 GPU,一旦在 GPU 0 上计算了梯度,它们必须同步到其他 GPU。
这需要大量昂贵的 GPU 传输!相反,*DistributedDataParallel(DDP)*在每个 GPU 上创建模型的孤岛副本(在它自己的进程中),并且只使一部分数据对那个 GPU 可用。这就像有 N 个独立的模型训练,除了一旦每个模型计算了梯度,它们都跨模型同步梯度…这意味着我们在每个批处理期间只跨 GPU传输数据一次。
在闪电中,你可以在两者之间轻松切换
Trainer(distributed_backend='ddp', gpus=8)
Trainer(distributed_backend='dp', gpus=8)
注意 PyTorch 和 Lightning 都不鼓励 DP 使用。
使用 16 位精度
这是另一种加快训练速度的方法,我们没有看到很多人使用。在 16 位训练中,模型和数据的一部分从 32 位数字变为 16 位数字。这有几个优点:
- 您使用了一半的内存(这意味着您可以将批量加倍,并将训练时间减半)。
- 某些 GPU(V100,2080Ti)可以自动加速(快 3-8 倍),因为它们针对 16 位计算进行了优化。
在 Lightning 中,这很容易实现:
Trainer(precision=16)
注意:在 PyTorch 1.6 之前,你还必须安装 Nvidia Apex…现在 16 位是 PyTorch 的原生版本。但是如果你使用的是 Lightning,它支持这两种方式,并根据检测到的 PyTorch 版本自动切换。
剖析您的代码
如果没有 Lightning,最后一个技巧可能很难做到,但是您可以使用类似于 cprofiler 这样的工具来做到这一点。但是,在 Lightning 中,您可以通过两种方式获得培训期间所有通话的摘要:
一、内置的基本剖析器
Trainer(profile=True)
它给出了这样的输出:
或者高级分析器:
profiler **=** AdvancedProfiler()
trainer **=** Trainer(profiler**=**profiler)
变得非常精细
闪电剖面仪的完整文档可以在这里找到。
在你的代码中采用闪电
PyTorch 闪电只不过是结构化的 PyTorch。
如果你已经准备好让这些技巧中的大部分为你自动完成(并经过良好的测试),那么看看这个关于将 PyTorch 代码重构为 Lightning 格式的视频!
选择最佳优化器的 7 个技巧
根据我的经验。
马库斯·温克勒在 Unsplash 上的照片
介绍
在机器学习中,当我们需要计算预测值和实际值之间的距离时,我们使用所谓的损失函数。
与许多人认为的相反,损失函数和成本函数不是一回事。虽然损失函数计算单个预测与其实际值的距离,但成本函数通常更通用。事实上,成本函数可以是,例如,训练集上的损失函数之和加上一些正则化。
另一个经常被错误地用作前两个的同义词的术语由目标函数表示,它是在训练期间被优化的任何函数的最一般的术语。
一旦澄清了正确的术语,我们就可以给出优化器的定义。
机器学习中的优化器用于调整神经网络的参数,以便最小化成本函数。
因此,优化器的选择是一个重要的方面,可以区分好的训练和坏的训练。
实际上,有许多优化器,所以选择并不简单。在本文中,我将简要描述最常用的优化器,然后给你一些在不同项目中帮助过我的指导原则,我希望在为你的任务选择最合适的优化器时,这些指导原则也能帮助你。
关于具体优化器如何工作的进一步信息,你可以看看这个网站。
有多少优化者?
就像刚才说的,有很多优化器。它们中的每一种都有与特定任务相关的优点和缺点。
我喜欢把优化器分为两个家族:梯度下降优化器和自适应优化器。这种划分完全基于一个操作方面,在梯度下降算法的情况下,强制您手动调整学习率,而在自适应算法中自动调整*——这就是我们使用这个名称的原因。*
梯度下降:
- 批量梯度下降
- 随机梯度下降
- 小批量梯度下降
自适应:
- 阿达格拉德
- 阿达德尔塔
- RMSprop
- 圣经》和《古兰经》传统中)亚当(人类第一人的名字
梯度下降优化器
有三种类型的梯度下降优化器,它们在我们使用多少数据来计算目标函数的梯度方面有所不同。
批量梯度下降
也被称为香草梯度下降,这是三种算法中最基本的算法。它为整个训练集计算目标函数 J 相对于参数 θ 的梯度。
批量梯度下降中更新重量的公式。梯度乘以学习速率η,然后用于更新网络的参数。
*由于我们使用整个数据集仅执行**一步,*批量梯度下降可能会非常慢。此外,它不适合不适合内存的数据集。
随机梯度下降
它是批量梯度下降的改进版本。它不是计算整个数据集的梯度,而是为数据集中的每个示例执行参数更新*。***
因此,该公式现在还取决于输入 x 和输出 y 的值。
用于更新 SGD 中权重的公式
SGD 的问题是更新频繁且具有高方差,因此目标函数在训练期间波动很大。
相对于批量梯度下降,这种波动可能是有利的,因为它允许函数跳到更好的局部最小值,但同时它可能代表相对于在特定局部最小值中的收敛的不利之处。
这个问题的解决方案是缓慢降低学习率值,以便使更新越来越小,从而避免高振荡。
小批量梯度下降
这种算法背后的直觉是利用两种梯度下降方法的优势,我们已经看到了。
它主要计算小批量数据的梯度,以减少更新的方差。
在小批量梯度下降中更新重量的公式
外卖#1
- 小批量梯度下降是大多数情况下三者中的最佳选择。
- ***学习率调优问题:*都受制于一个好的学习率的选择。不幸的是,这个选择并不简单。
- ***不适合稀疏数据:*没有机制来证明很少出现的特征。所有参数同等更新。
- 陷入次优局部最小值的可能性很高。
自适应优化器
这个优化器家族已经被引入来解决梯度下降算法的问题。它们最重要的特点是不需要调整学习率值。实际上,一些库——比如 Keras——仍然允许你手动调整它来进行更高级的测试。
阿达格拉德
它使学习速率适应参数,对频繁出现的特征进行小更新,对最罕见的特征进行大更新。
通过这种方式,网络能够捕获属于不经常出现的特征的信息,将它们放在证据中,并给予它们适当的权重。
Adagrad 的问题是,它根据所有过去的梯度来调整每个参数的学习速率。因此,在高数量的步骤之后具有非常小的学习率的可能性——由所有过去梯度的累积产生——是相关的。
如果学习率太小,我们就不能更新权重,结果是网络不再学习。
阿达德尔塔
它通过引入历史窗口来改进先前的算法,该历史窗口设置了在训练期间要考虑的固定数量的过去梯度。
这样,我们就不存在学习率消失的问题。
RMSprop
它与 Adadelta 非常相似。唯一的区别是他们管理过去梯度的方式。
圣经》和《古兰经》传统中)亚当(人类第一人的名字
它增加了 Adadelta 和 RMSprop 的优点,即存储类似于动量的过去梯度的指数衰减平均值。
外卖#2
- 亚当在大多数情况下是自适应优化者中最好的 。
- 擅长稀疏数据:自适应学习速率非常适合这种类型的数据集。
- 没有必要关注学习率值
梯度下降与自适应
总的来说亚当是最好的选择。无论如何,许多最近的论文指出,如果结合一个良好的学习率退火计划,SGD 可以带来更好的结果,该计划旨在管理其在培训期间的价值。
我的建议是在任何情况下都首先尝试 Adam,因为它更有可能在没有高级微调的情况下返回好的结果。
然后,如果 Adam 取得了好的结果,那么打开 SGD 看看会发生什么是个好主意。
2020 年实现卓越商业智能的 7 种工具
图像通过像素
随着公司的不断发展,理解他们长期收集的大量数据变得越来越困难。关键决策者和高层需要智能数据和分析工具来做出明智且有利可图的决策。
商业智能(BI)工具帮助公司收集、分析、监控和预测各种商业场景。他们通过识别趋势、提供数据可视化和提供实时自助数据分析来实现这一点,用户可以在此基础上做出决策。
更具体地说,决策者可以使用 BI 工具来合并和准备来自不同来源的数据集,这些来源通常是非结构化的,并且采用不同的格式。然后,他们可以使用这些工具在交互式嵌入式仪表板中可视化洞察。与老一代企业商务智能软件相比,新的自助式商务智能使 it 部门能够轻松地为业务线用户(也称为“公民分析师”)设置他们自己的软件环境,让他们能够独立工作。
用户不再需要大量的技术知识或编码查询的能力。这样做的主要好处是业务线用户需要最少的 it 参与,他们能够更快地做出明智的决策,从而增加公司的利润。
在本文中,我们将仔细研究一些商业智能的最佳工具,并强调它们的突出特点。
1. Sisense
Sisense 商业智能平台非常用户友好,需要最少的 IT 参与。这使得它成为混合了需要访问它的公民分析师用户和高级用户的组织的完美候选。
Sisense 是一个可扩展的解决方案,这意味着它非常适合初创公司、中小型企业和企业组织。用户可以随心所欲地扩展核心软件,因为该平台提供了对各种插件和库的支持。此外,Sisense 的 SSO 机制允许系统对用户进行身份验证,而无需用户输入单独的登录凭据。
Sisense 允许用户整合来自各种数据源的数据,包括 Google Analytics、AdWords 和 Salesforce,并将其转换为交互式可视化和可操作的应用程序组件。它还使用户能够将分析嵌入到具有完全定制和白色标签的第三方产品中。
图片来自 Sisense
Sisense 最强大的功能之一是基于 NLP 技术的自然语言查询(NLQ)支持。用户可以简单地问一些复杂的问题,并立即收到数据切片和图像,为他们的搜索查询提供答案。该平台还会在你构建查询时提供建议。例如,你可以问*我的总收入是多少?*并迅速看到明确的回应。还可以自动合并新的数据集和数据源,甚至是非结构化的数据集和数据源。
使用 Sisense,您可以创建警报,以便您的利益相关者和数据团队可以立即收到 KPI 异常的通知。它还允许您将警报集成并自动化到第三方应用程序中,包括 Slack、Zapier 和 Zendesk,以触发即时响应。最后,您可以使用 Sisense 自动生成每日、每月或每季度报告,按计划向主要利益相关方发送定制的快照。
2.画面
Tableau 是一个用于数据发现和数据可视化的 BI 工具,非常适合个人数据分析师、团队和组织。它让用户能够分析、可视化和共享数据,帮助他们更快地做出明智的业务决策。它提供了一套商业智能工具,包括 Tableau 桌面、Tableau 在线、Tableau 服务器和 Tableau 移动设备。
该平台支持与内部或云中各种数据源的连接。这包括 SQL 数据库、大数据、电子表格和云应用程序,如 Google Analytics 和 Salesforce。用户可以访问和组合来自不同来源的数据集,而无需编写代码。尽管 Tableau 被认为是自助 BI 领域的领导者,但它确实需要一些学习才能有宾至如归的感觉。
用户可以使用自然语言从发布的数据源中提问,并以可视化的形式获得答案。Tableau 的端到端 web 创作功能使用户可以轻松添加额外的数据源或创建交互式仪表板。
该平台还为用户提供人工智能驱动的数据点解释,否则这些数据点可能会被忽视。除此之外,用户还可以将交互式仪表盘嵌入到各种第三方应用中。
3. Domo
Domo 是一个基于云的 BI 软件产品,由多个系统组成,让您能够连接多个数据源(包括数据库、电子表格和社交媒体),并使用 Domo Appstore 中的预建应用程序扩展它们。该工具是为企业用户设计的,尽管它肯定可以被拥有精通技术的数据团队的较小公司使用。
通过 Domo,用户可以用 1000 多个预建的云连接器建立数据管道,并查询它们的托管位置。这包括文件上传(例如 Google Docs 或电子表格)、专有系统和使用 Domo Workbench 的内部部署。
图像通过 Domo
该平台还具有神奇的 ETL 功能,让用户无需了解 SQL 就能利用数据转换。这有助于团队加快数据分析过程。此外,Domo 建议数据可视化自动使团队能够立即从原始数据源到图形、图表和地图。
Domo 还配备了内置的人工智能引擎 Roboto 先生,可以帮助数据团队创建预测分析模型,并允许他们利用人工智能和机器学习。例如,用户可以设置在 KPI 发生变化时提醒他们。
4.清析毕
Clear Analytics BI 是一款功能强大的工具,可以整合来自内部系统、CRM、云应用和会计软件等各种业务工具的数据,允许您将这些数据导入 Excel。该工具与 Microsoft Power BI 配合使用,非常适合精通 Excel 的用户和使用 Microsoft 服务的公司。
Clear Analytics BI 提供的突出功能是,它直接向 Microsoft Power BI 提供自助服务报告。除此之外,它与 Excel 的集成使数据分析师能够随意调整公式,并管理用户查看权限。
Clear Analytics BI 还提供了完整的审计跟踪,让用户可以跟踪数据来自哪里、使用了哪些过滤器、数据是何时提取的以及谁运行了报告。
5.微软 Power BI
Microsoft Power BI 是一个基于 web 的商业智能套件,专注于提供可以在全球数据中心之间共享的交互式数据可视化。它是为企业组织设计的,但它使各个级别的用户都能做出明智的决策。
微软 Power BI 使用户可以轻松地与各种第三方应用程序集成。例如,用户可以将 Excel 查询、数据模型和报告连接到他们的仪表板,以便收集、分析和共享业务数据。
图片来自微软
该平台与 Azure 数据湖无缝集成,这使得用户可以轻松地与主要利益相关者共享大量数据。此外,他们还能够增强部门间的协作,并有效减少获得见解所需的时间。
Microsoft Power BI 使数据分析师能够准备数据并构建机器学习模型,以从结构化和非结构化数据(包括文本和图像)中获得洞察力。更不用说,该平台集成了 Power Apps 和 Power Automate,允许用户构建业务应用和自动化工作流。
6.数据线
datapine 是一个 BI 工具,专为各行各业各种规模的企业而设计。它非常适合高级用户和普通商业用户。该平台允许用户连接来自各种数据源的数据,对其进行分析,创建仪表板,并生成报告。datapine 提供了一个 SQL 模式,使用户能够创建定制查询,尽管它还打包了一个拖放接口,让业务线用户无需高级编码就可以创建数据可视化。
该平台还提供强大的分析功能,包括基于预测引擎的预测分析。用户可以选择 KPI,确定他们想要预测的数据点、特定的先前数据点,并通过设置置信区间来定义模型质量。
此外,datapine 通过简洁的特性简化了数据发现过程,比如向下钻取、小部件链接和层次过滤器。它还提供了与团队成员共享报告的不同方式,包括通过直接 URL、提供查看器访问以及在特定时间间隔发送自动电子邮件。
datapine 基于人工智能的警报和智能洞察在异常情况下向用户发出警报,并且还可以自动生成不同类型的洞察。
7.旁观者
Looker 本质上是一款为初创公司和中小企业设计的数据发现应用。它集成了几乎所有的 SQL 数据库或仓库——包括 Redshift、Snowflake 和 big query——并且非常易于使用。
这款 BI 工具提供强大的协作功能,使用户能够通过电子邮件或第三方应用程序共享数据分析和报告。用户可以利用支持多种数据源和部署方法的多云策略。
图片来自旁观者
Looker 使数据分析师能够跨多个接触点查看每个客户,从而使他们能够基于实际交互发现洞察。这是了解客户使用行为、创建量身定制的信息以及确定追加销售机会以提高业务效率的绝佳方式。
该平台还允许用户集成工具和应用程序,包括 Slack、Segment、Marketo 和 Dropbox,以创建商业智能工作流。
结论
BI 工具使关键决策者、高层、数据团队和利益相关者能够更好地理解大量业务数据,分析这些数据并做出快速(且有利可图)的业务决策。全新的自助式 BI 工具让数据团队中的几乎每个人都可以轻松创建和共享交互式数据可视化,并更快地获得洞察力,而无需编写代码。
您有在组织中使用 BI 工具的经验吗?如果是,哪些特性对你来说最重要?
创建 Rockstar 数据科学产品组合的 7 种工具
使用这些工具脱颖而出
根据 Coursera 的最新统计,超过 300 万人注册了吴恩达流行的机器学习课程。这只是一个在线课程,还有很多其他类似的课程和在线训练营。这意味着有非常多的人希望进入数据科学领域。
超过 300 万人注册了吴恩达广受欢迎的机器学习课程
那么,考虑到这些数字,你如何在申请数据科学职位时脱颖而出呢?企业越来越多地寻找能够证明自己能够实际运用所学技能来改善业务成果的人。
一张课程证书已经不足以在数据科学领域找到一份工作。您需要创建一个实用的数据科学项目组合来展示您的工作,并确保您的应用程序在所有其他应用程序中脱颖而出。
一张课程证书不再足以在数据科学领域找到一份工作
已经有很多关于你可以在投资组合中包含的项目类型的文章,我特别喜欢来自 dataquest 的这篇文章。然而,很少有人写你可以用来实际完成和在线展示这些项目的工具。
我目前正在重建我自己的数据科学组合,我认为值得分享我在本文中使用的一些工具和技术。
Github 页面
Github 可能是任何技术组合中最明显的工具。每个项目都可以很好地展示为一个带有文档和 README.md 的独立存储库。
然而,如果你有许多项目都在不同的存储库中,那么最好在你自己的网站上把这些项目和一些注释整理在一起。Github 有一个非常好的工具来创建一个简单的网站,叫做Github pages。
要创建您的网站,只需导航到您的 Github 帐户并选择创建新的存储库选项,就像创建任何新项目一样。但是,在存储库名称框中,您需要在名称的末尾添加.github.io
。
接下来,您需要以通常的方式克隆存储库。从命令行输入。
git clone https://github.com/myaccount/myname.github.io.git
导航到新目录。
cd rebeccavickerydt.github.io
添加一个 index.md 文件,添加一点内容。
touch index.md
我补充了以下内容。
<html>
<head>
<title>My Portfolio</title>
</head>
<body>
<h1>Example projects</h1>
<footer>rvickery 2020</footer>
</body>
</html>
提交并将更改推送到 Github 存储库。
git add --all
git commit -m "adding landing page"
git push
现在转到您的存储库中的设置,向下滚动到 Github 页面并选择源主分支。
您现在可以在“设置”中访问您的网站 URL。
现在你可以访问你的网站了。
wordpress 软件
如果你想创建一个外观更丰富的作品集网站,使用 Wordpress 来创建你的作品集是值得一看的。
Wordpress 是一个完全免费的网站开发方式,有很多我认为非常适合作品集的主题,如果你不使用自定义域名,它是完全免费的。这周我刚开始把我的作品集搬到这里,我用了主题。下面是我的登陆页面截图。
所有的主题都非常灵活,添加新页面和改变布局来适应你的风格非常简单。我发现这是一个非常快速的方法来制作一个专业的作品集。
卡格尔
一旦你选择了创建投资组合的工具,你需要创建一些项目来添加到其中。
Kaggle 是一个受欢迎的机器学习竞赛网站,它有许多功能,可以用来创建项目来展示你的技能。
比赛本身包含一些非常有趣的数据问题,数据集可能非常复杂和具有挑战性,此外还有一个排行榜,使您能够将自己的技能与其他人进行比较。
Kaggle 还有一个叫做 Kaggle 内核的工具。这些是托管笔记本,用于开发和运行您的数据科学代码。导入 Kaggle 数据集来直接处理它们是非常容易的,而且你写的代码是公开的,因此很容易在投资组合中共享。内核还连接到谷歌云服务,允许你展示你查询存储在关系数据库中的数据和访问云计算资源的技能。
Kaggle 还维护着一个公开可用的数据集的档案。这里有各种不同的数据集可用,这些数据集对于创建更新颖的项目和展示探索性数据分析非常有用。
驱动数据
如果你想展示你的技能,同时帮助解决社会问题,那么 drivendata.org 的是一个很好的开始。与 Kaggle 类似,这个网站举办数据科学比赛,有数据集和排行榜,但这里的不同之处在于,所有比赛的核心都是用数据科学解决的社会问题。
这些比赛背后的数据集很有趣,从初学者友好到更具挑战性。
drivendata.org 竞赛页面
Jovian.ml
如果你正在寻找 Github 的替代品来跟踪、组织或分享你的数据科学代码, Jovian.ml 是一个不错的选择。这是一个用于托管和共享基于笔记本的数据科学项目的开源项目。
您可以创建无限的公共项目,项目中可以包含笔记本、文件(如帮助文件)和环境配置文件。Jovian 还能够跟踪模型版本等输出文件,因此在某些方面比 Github 更适合存储数据科学项目和实验。
jovian . ml个人资料页面
谷歌云平台
如今,绝大多数企业正在转向或已经在利用云数据存储和计算能力。因此,这是一个好主意,包括一些应用你在这方面的技能的实际例子。谷歌云平台(GCP)有很多展示你作品的工具。
GCP 有一个免费使用层,所以你应该能够免费创建一些项目。
BigQuery 是 Google 的云数据仓库产品。在该产品中,Google 托管了大量公共数据集,可以通过 BigQuery web UI 访问这些数据集。通过访问这些数据集的文档可以在这里找到。
一旦你可以访问 BigQuery 中的一些数据,你就可以使用 GCP 人工智能中心创建项目,其中包括云托管笔记本电脑、模型部署工具和机器学习 API。
UCI 机器学习知识库
UCI 机器学习库是另一个公共可用数据集的伟大来源。该网站上有近 500 个数据集,涵盖了广泛的数据科学项目类型。
它们按照任务类型、数据类型、区域和数据集大小进行分类,这很有帮助。这些数据集再次为您的投资组合整合数据科学项目提供了很好的资源。
希望本文为您提供了一系列工具来创建一个真正出色的数据科学组合。我目前正在写我的,但是一旦完成,我会更新这篇文章并提供最终版本的链接。快乐的投资组合建设!
【如约更新——我的作品集现已完成,住在 www.rebecca-vickery.com。
感谢阅读!
我每月发一份简讯,如果你想加入,请通过此链接注册。期待成为您学习旅程的一部分!
更好仪表板设计的 7 大技巧
有效的数据可视化对于使您的报告尽可能易于理解至关重要。是时候升级你的游戏数据了。
在 Unsplash 上由 Carlos Muza 拍摄的照片
在我的职业生涯中,我为不同行业的一些世界知名品牌设计了数百个仪表盘。在这里,我将与您分享在设计业务仪表板以支持您的数据游戏时需要考虑和实施的 7 件最重要的事情。我的最佳建议,如果你愿意的话。
1.提前计划
在开始向计划发布的报表中添加图表之前,请确保您对其内容和布局有一个清晰的概念。我建议你做的第一件事是写下所有的疑问,或者你想对你的数据提出的问题。列个清单。它应包含:
- 查询的名称
- 它来自的数据源
- 该数据源中的字段需要
- 可视化类型
如果您还没有进行任何数据发现来查看您将要处理的结果,那么最后一个选项在这一点上并不重要
一旦你列出了清单,我建议你拿一张白纸和一支铅笔,简单地勾画出你希望你的报告看起来是什么样子。没什么细节,只是一个非常粗略的草图。尝试添加列表中的所有查询。相信我,这将是一个很大的帮助。您还会发现您的报告中是否需要超过 1 页,以及如何将某些查询分组在一起。
2.讲故事
我的意思是,你的报告将被它的读者“阅读”,很可能是从左上角到右下角,就像一本书的一页。那只是我们大脑的设置方式。因此,要确保报告在显示哪些查询方面有一定的一致性。
帕特里克·福尔在 Unsplash 上的照片
此外,考虑将包含与相同区域、活动或 KPI 相关的数据的查询分组在一起。你会发现很多有多页的报告,第一页会包含一种主要标题的摘要,而其他页面会专注于特定的领域并更深入。所以这就是我讲故事的意思。
3.避开 TMI
这个技巧与前两个密切相关,那是为了避免 TMI,或“太多的信息”。我的意思是不要在你的报告中加入过多的图表和信息,使其难以阅读和理解。
图片由 Adobe Stock 根据 Adam Finer 的许可提供。
你永远不要问自己“我可以在页面/屏幕上再挤几个图表来避免跳到一个新的图表上吗?”因为通常在这些情况下发生的事情是,你要么最终缩小其他图表的尺寸,使它们不容易阅读。或者您在页面上四处移动图表以尝试容纳更多图表,这可能会扰乱您试图讲述的故事。否则你的星盘会靠得太近;您的数据需要空间来呼吸。你甚至可以反其道而行之,不要给你的浏览者提供过多的信息,更简约地使用尽可能多的页面来确保你的数据能够被正确地阅读。
TMI 也与个人观想有关。例如,不要有一个条形图,里面有太多的条,很难阅读,你不能正确地看到标签。记住,这个想法是让你的观想尽可能容易阅读和理解。
4.墨水与数据比率
这是数据可视化专家爱德华·塔夫特在他 1983 年的著作《定量数据的可视化显示》中引入的概念。
他在书中写道,
“图形上的大部分墨水应该呈现数据信息,墨水随着数据的变化而变化。数据墨水是图形中不可擦除的核心,这种非冗余墨水是根据所代表的数字的变化而安排的
所以本质上,他所说的是,显示(或打印)可视化所需的大部分墨水应该是数据墨水。例如,条形图上的条形或时间序列图上的线条。只要有可能,你应该移除任何对观想不重要的东西。
这意味着图表上的网格、轴标签等。如果观想数据没有它也能被阅读和理解,那么就移除它。
图片由 Adobe Stock 授权给 Adam Finer 。
时间序列图就是一个很好的例子。x 轴上的值是日期,对观察者来说是显而易见的。所以你不需要有一个写着“日期”的 x 轴标题标签,因为这是多余的。一个例外可能是,当数据集中有不止一个日期时,需要指定日期,但您已经知道了。
如果你有兴趣学习更多关于数据可视化理论的知识,那么我肯定会推荐你买一本量化信息的可视化显示(附属链接)。
5.选择正确的观想
Adeolu Eletu 在 Unsplash 上的照片
确保为正在创建的查询选择正确的可视化类型非常重要。这里有一些你可能想问的问题:
- 你在比较价值观吗?那么柱形图或条形图可能是最好的。
- 你是在尝试将关系或等级可视化吗?然后可能是一个树状图。
- 你显示的是总数的百分比吗?除非您要显示 5 个以上的值,否则饼图可能是最好的选择。
- 你在和日期打交道吗?那么时间序列图或面积图就是一种方法。
所有这些问题将帮助你决定哪种观想类型最适合你想要传达的东西。我们的目标是让你的数据尽可能容易被浏览者理解,而可视化类型在实现这一点上起着很大的作用。
6.明智地使用颜色
我的意思是不要疯狂,开始为每个观想选择不同的颜色。尽可能简单地使用颜色。
你可以在报告中用不同的颜色来代表不同的区域,所以与销售相关的一切用一种颜色,与营销相关的用另一种颜色,等等。但只有在这样做有意义的时候。我猜一个规则是,如果你要使用不同的颜色,确保它应用于报告中不止一个视觉化。
然而,你会注意到,设计最好的报告和仪表板都保持了非常简单的配色方案。
7.为你的观众设计
这不仅关系到谁将查看您的报告,还关系到如何查看或消费您的报告。
Jonas Jacobsson 在 Unsplash 上拍摄的照片
关于第一个问题,谁,他们需要深入数据还是过滤数据?如果是的话,你需要在构建你的可视化和设计你的报告时包括这些选项。您的仪表板查看者对所呈现的数据有多熟悉?这将决定你在观想中有多少描述或非必要的信息来解释正在呈现的东西。
如何查看和使用报告将会对你的仪表板的方向和大小产生影响。会不会主要分享成会打印出来的 pdf?如果是这样,你需要确保它打印正确。在这种情况下,您可能还需要添加更多信息,如在图表中显示某些值,因为您不能将鼠标悬停在图表上以在 pdf 中显示值。
所以你可以看到,当涉及到你的观众时,有许多事情需要考虑。
这就是我为更好的仪表板设计提供的 7 大技巧,帮助你的报告更上一层楼。想要更多类似的文章,别忘了关注和查看我的 YouTube 频道。
7 种人工智能风险以及如何减轻其影响
识别和管理人工智能风险对所有组织都至关重要
由 Unsplash 上的 Loic Leray 拍摄的照片
从事人工智能/人工智能项目是许多个人和公司的梦想。令人惊叹的人工智能倡议的故事遍布网络,声称拥有这些倡议的人因发言而受到追捧,获得了可观的职位,并赢得了同行的尊重。
在现实中,人工智能工作是高度不确定的,并且有许多类型的风险与人工智能/人工智能工作相关联。
“如果你知道风险可能潜伏在哪里,不被理解,或者只是未被识别,你就有更大的机会在它们赶上你之前抓住它们。”—麦肯锡[1]。
在这篇文章中,我将总结 7 种风险以及如何减轻它们的负面影响。对于那些喜欢简洁视图的人,这是我整理的一张幻灯片。
人工智能风险的 7 个维度— 巴巴尔·巴蒂
- 战略风险——正如我在一篇早先的文章中所写的,制定人工智能战略并不简单。早期阶段的错误为其他下游问题埋下了伏笔。不幸的是,战略往往掌握在那些对人工智能能力没有透彻理解的人手中。这一类别包括选择错误(不可行)计划的风险(相对于组织的基础现实)、缺乏高管支持、政策不协调、业务团队之间的摩擦、高估 AI/ML 潜力(与宣传相反, ML 并不是所有分析或预测问题的最佳答案)、目标或成功指标不清晰或不明确。最明显的缓解方法是在人工智能领导和执行团队之间就战略以及与之相关的风险达成一致。准确理解人工智能将如何影响人和流程,以及当事情不顺利时该做什么。
- 财务风险 —一个常见但不经常谈论的假设是,模型开发的成本是 AI/ML 的主要财务因素。只有当我们有最好的数据/人工智能科学家时,我们才会一切就绪。正如本文所讨论的,人工智能的整个生命周期更加复杂,包括数据治理和管理、人工监控和基础设施成本(云、容器、GPU 等)。)人工智能工作总是存在不确定因素,这意味着与软件开发相比,该过程将更具实验性和非线性,即使在所有昂贵的开发工作之后,最终结果也不总是积极的。确保你的财务领导明白这一点,不要把 AI/ML 仅仅当作另一个技术项目
- 技术风险 —这是最明显的挑战。这项技术还不成熟,但技术专家或供应商想要推动它。或者,也许企业领导想用前瞻性的眼光给媒体或他们的竞争对手留下深刻印象。技术风险以多种形式出现 : 数据:数据质量、适用性、代表性、刚性数据基础设施等等。模型风险:能力、学习方法、现实世界中的糟糕表现或可靠性。概念漂移,即市场或环境随着时间的推移或由于意外事件而发生变化。能力:缺乏合适的技能或经验、实施延迟、错误、测试不彻底、缺乏稳定或成熟的环境、缺乏数据操作、MLOps、IT 团队跟不上 ML/AI 部署或扩展需求、安全漏洞和知识产权盗窃。减轻这些问题的最佳方法是提高您团队的技能,投资现代数据基础设施,并遵循 ML 的最佳实践。
- 人员和流程风险 —不言而喻,正确的组织结构、人员和文化对你的工作成功至关重要。有了能干的人和支持性的文化,你就能发现问题,面对挑战。不良文化的标志是人们隐藏问题并逃避所有权。当团队之间有政治和紧张关系时,问题就会被放大。技能差距、僵化的思维模式、沟通不畅、传统 IT 缺乏扩展人工智能的运营知识。流程中的差距、IT 和 AI 之间的协调问题、零散或不一致的实践/工具、供应商炒作。缺乏数据/知识共享(组织结构),缺少领域专家的输入/审查,缺乏监督/政策控制&后备计划,第三方模型依赖,人力监督不足,学习反馈循环。薄弱的技术基础。
- 信任和可解释性风险 —你做了所有的工作,但你的人工智能应用程序的最终用户对使用或采用该模型犹豫不决。这是一个共同的挑战。原因包括模型在特定条件下的不良表现、模型的不透明性(缺乏对结果的解释)、出现问题时缺乏帮助、用户体验差、缺乏激励一致性、对人们的工作流程或日常事务的重大干扰。正如 ML/AI 从业者所知,深度神经网络等最佳模型是最难解释的。这导致了一些困难的问题,例如,模型性能和目标用户的采用哪个更重要?
- 合规和监管风险 — AI/ML 会给需要遵守规则和法规的用例或垂直行业带来很大的麻烦。这里有一条微妙的界线——如果你不采取一些行动,竞争对手可能会领先太多。当你采取行动时,你必须防范不可预见的后果和监管机构的调查或罚款。金融和医疗保健行业就是这种紧张关系的很好例子。上面讨论的可解释因素是这里的关键。缓解:确保风险管理团队充分了解 AI/ML 工作及其影响。为人员监控和纠正措施分配资源。
- 道德风险——你的人工智能/人工智能项目拥有大量数据和超级明星技术团队,利益显而易见,也不存在法律问题——但它是道德的吗?以警察工作中的面部识别为例。供应商们将此作为一种革命性的方式来推动警务工作,但最初的模型缺乏做出公平准确预测所需的稳健性,并导致对某些少数群体的明显偏见。信用评分和保险模型长期以来一直存在偏见——随着 ML 驱动的应用程序的增长,这已经成为一个更大的问题。
上述每个风险领域本身都是一个巨大的领域,需要大量的阅读和实践经验来熟悉这个主题。我鼓励你看看下面的参考资料,以获得更多关于处理人工智能风险的观点。
注意事项:
[1]直面人工智能的风险,麦肯锡。https://www . McKinsey . com/business-functions/McKinsey-analytics/our-insights/对抗人工智能风险
[2] AI 与风险管理,德勤。https://www2 . Deloitte . com/global/en/pages/financial-services/articles/GX-ai-and-risk-management . html
[3]Ulrika jgare,假人的数据科学策略,2019,Wiley。
[4]衍生机器学习和人工智能,麦肯锡。https://www . McKinsey . com/business-functions/risk/our-insights/derisking-machine-learning-and-artificial-intelligence
[5]理解人工智能和机器学习的模型风险管理,EY。https://www . ey . com/en _ us/banking-capital-markets/understand-model-risk-management-for-ai and-machine-learning
YouTube 上 7 个被低估的频道
人工智能、人工智能和数据科学领域的游戏规则改变者
阿瑟尼·托古列夫在 Unsplash 上的照片
A 人工智能,数据科学是一个捆绑在一起的主题海洋,包括统计学、数学、机器学习、深度学习、云、编程知识、领域知识,以及一个永无止境的列表。它是综合性的,这些领域的研究每天都在涌现。自从哈佛商业评论宣布“21 世纪最性感的工作”以来,这份工作的受欢迎程度达到了顶峰。
很多时候我们经常感到困惑,我们问自己这个问题 我从哪里开始?掌握这个领域最好的资源是什么?我们遇到了许多障碍,以我个人的经验,仅仅一种资源不足以理解像线性回归这样简单的主题。
在这篇文章中,我汇集了一些在 YouTube 上被低估但在人工智能数据科学领域却是杰出领导者的最佳创造者。YouTube 是一个获取任何知识的伟大平台。唯一的投资就是你的 时间 。没有包月,只需几分钟就能给你的生活带来纯粹的附加值。
列出的创作者有一个涵盖广泛主题的技术武器库。它包括从你对任何与人工智能&数据科学相关的主题的理论知识,到获得一份工作或破解你的面试。这篇文章是你 一站式目的地 掌握的领域。
要关注的 YouTube 频道
照片由Sara kurfe在 Unsplash 上拍摄
克里斯·纳伊克
克里斯·纳伊克是一名首席数据科学家,在机器学习、深度学习和计算机视觉领域处于领先地位。他是一个完整的包裹。他用许多真实世界的场景解释了每一个主题,从理论知识到实践方面。他有很多项目,是社区的积极贡献者。Krish 是下一个日复一日真诚提供服务的人。
我是一名首席数据科学家,在机器学习、深度学习和计算机视觉方面处于领先地位,还是一名教育工作者和…
www.youtube.com](https://www.youtube.com/user/krishnaik06/featured)
阿布舍克·塔库尔
Abhishek Thakur 是首席数据科学家,世界第一 【四次 kaggle 特级大师】 。他完全专注于应用机器学习、深度学习和数据科学。他是一个伟大的问题解决者。他在 YouTube 上的视频纯粹是魔术,它会像专家一样帮助你解决问题。他最近还出版了一本关于 “如何处理任何机器学习问题” 的书,绝对是大师级的。
我制作关于应用机器学习、深度学习和数据科学的视频。我是世界上第一个 4x 特级大师…
www.youtube.com](https://www.youtube.com/c/AbhishekThakurAbhi/featured)
代码基础
Code Basics 是 YouTube 的一个频道,它提供了广泛的工具和技术,如 TensorFlow、PowerBI、Python、数据结构和算法。实践环节非常直观,易于理解。除此之外,他还与其他数据科学家举行各种会议,并在人工智能和数据科学领域提供职业指导。
朋友们,我叫 Dhaval Patel,作为一名软件工程师,我已经有超过 15 年的工作经验。我已经…
www.youtube.com](https://www.youtube.com/c/codebasics/featured)
人工智能工程
AIEngineering 是另一个很棒的 YouTube 频道,它涵盖了许多端到端的项目,特别是处理机器学习、人工智能、数据工程、开发运营、模型部署、云和 ML/AI 业务用例(概述和实施)等工具和技术。这些视频很深入,对主题进行了详细而简单的解释。
这个频道将发布“所有数据”的信息…我将通过该频道讨论的主题是机器…
www.youtube.com](https://www.youtube.com/c/AIEngineeringLife/featured)
StatQuest
砰!!!!它已经成为一个标志性的单词。Joshua Starmer 的 StatQuest 是 YouTube 的一个频道,它将帮助你以一种简单的方式理解复杂的统计学和机器学习概念。这些概念被很好地分成多个有趣的小视频,这使得学习更加简单。理想的学习体验旨在适应我们的生活节奏。他是一个伟大的老师,也是一个伟大的艺人。
统计学、机器学习和数据科学有时看起来是非常可怕的话题,但由于每种技术都是…
www.youtube.com](https://www.youtube.com/c/joshstarmer/featured)
跳板
印度跳板是 YouTube 的一个频道,这个频道关注的是这样一个事实,即教育应该让我们为真实世界做好准备&在行业专家的指导下从事有意义的项目是实现这一目标的最佳途径之一。在这个频道中,他们分享 explainer 视频、职业建议和对数据科学、人工智能、机器学习和数据分析的现实生活从业者的采访。
在线学习,有工作保障。找份工作或者把你的钱要回来。深入数据科学、UX 设计等领域…
www.youtube.com](https://www.youtube.com/channel/UCqd6TofKNjqagInm5Waeu7w)
数据教授
数据教授是 Chanin Nantasenamat 的一个 YouTube 频道。他获得了博士学位,是一所研究型大学的生物信息学副教授,领导着一个研究实验室,利用数据科学来揭示医学中大数据的隐藏知识。在这里,您将获得由讲解者视频和实践教程组成的数据科学内容。该频道的主要目的是帮助学生和数据爱好者了解数据科学以及如何利用它来理解数据。
数据科学、机器学习、生物信息学、研究和教学是我的激情所在。数据教授 YouTube…
www.youtube.com](https://www.youtube.com/channel/UCV8e2g4IWQqK71bbzGDEI4Q)
最后说明:—
上面的创作者是一些在他们的领域已经建立的数据科学家,也是 YouTube 上的新兴科学家。现在是我们应该用他们提供的绝对世界级的知识和资源来启发自己的时候了。数据科学是一个热门话题,作为美国顶级企业家之一,马克·库班说*“如果我们不学习或投资人工智能,并用它来解决商业问题或现实世界的用例,我们将面临成为恐龙的风险”。数据和人工智能将驱动未来,最好是成为趋势的一部分,不要错过机会。谢谢:)*
人工智能将数字标牌提升到新水平的 7 种方式!
人工智能对我们的生活方式产生了影响。一段时间以来,它一直在数字标牌领域占据一席之地。
AI 正在改变数字标牌,并为其用户提供新的更好的机会。今天,我们专注于这些机会,并看到人工智能和数字标牌相结合的最重要的方面。
目前,你会得出结论,人工智能将增强数字标牌的功能。它将使用所有必须处理的数据来改进内容的创建和向目标受众显示的方式。
数字标牌是一种多方面的工具,人工智能的加入扩展了这种多功能性,并确保它尽可能地流畅。
现在,让我们来看看人工智能和机器学习是如何影响数字标牌世界的。
1)更简单的数据收集
数字标牌的主要目的是传播信息。然而,今天它已经出现到你可以在 AI 的帮助下收集数据的地步。
使用带有面部识别等组件的下一代数字标牌解决方案,零售商可以更清楚地了解他们的客户是谁。
由于面部识别诚实地分享了隐私问题,获得的数据可能会影响企业的商业战略或方向,以适应他们的观众。此外,数字标牌可以获取收集的信息,甚至实时使用这些信息。
2)更个性化的用户体验
作为人类,我们内心是感性的。事实上,像机器人和人工智能这样冰冷和没有生命的东西可以激发我们的情感。研究甚至表明,尽管知道人工智能的本质,人们仍然对它做出反应,就好像它是一个真人一样。这就是为什么 AI 为数字标牌已经提供的个性化用户体验带来了一种新的范式。
在数字标牌中,如果技术以更个性化的方式对待客户,他们会感到很特别。人工智能学习使数字标牌能够以独特的方式学习并与真人互动。
数字标牌人工智能可以识别客户并问候她或他。它可以根据用户的购买历史来传达产品报价和折扣等信息。
3)更具互动性的界面
虽然个性化是一个令人兴奋的元素,但当涉及到交易购买时,每个客户都欣赏效率。
交互式店内数字标牌始终是一种选择。消费者可以看到现有的产品,他们的特点,并获得更多的信息更快,而不必等待工作人员。有些人甚至喜欢不受干扰地浏览网页。
未来,AI 会让顾客的购物体验更好。例如,顾客可以带一件或几件商品到附近的展示区查看价格和特征。
数字标牌甚至可以立刻比较两种产品。通过将在线购物的许多组成部分带到现实世界,这可以真正帮助提供全渠道购物体验。
4)更多相关内容
我们已经提到了根据顾客以前的购买情况推出特别折扣。人工智能的这一方面也可以在生产内容中发挥作用。这些数据可以帮助数字标牌显示特定的广告。
在雨天或寒冷的天气,有些产品可能比其他产品更受欢迎。你会观察现实生活中出现的卖伞小贩。
同样,天气信息可以自动调整数字标牌内容,并可能影响购买决策。广告不仅可以基于分析显示,还可以基于天气、一天中的时间、一周、一年等等。
5)更好的广告安排
人工智能不仅仅是一种识别客户面部的技术。人工智能在购买广告空间方面也起着至关重要的作用。
它已经在网络上展示程序化广告领域存在了相当长的一段时间。它允许传递相关内容,并使实时竞价更加有效。
将这一概念应用于零售数字标牌,可以加速正确的广告投放。零售商可以参与程序化广告,在全球范围内的数字标牌上购买广告空间。这些广告的功效将类似于在线广告,因为数字标牌 AI 使用关于客户的数据来选择向他们显示哪些广告。
随着人工智能的进一步发展以及与数字标牌等技术的融合,个性化水平将在很大程度上增长。问题只是有多远。人工智能将会提高生产力。随着数字标牌已经使顾客在零售中的体验更加舒适,人工智能将进一步推动这一点。消费者找到产品的容易程度和他们意识到适合他们的产品的速度也将增长。
6)深度学习和人工智能
深度学习是人工智能中 ML(机器学习)的一个子集,其中人工神经网络在处理信息和创建用于决策的模式方面模仿人脑。
人工智能驱动的引擎可以访问大量数据。通过深度学习,人工智能驱动的平台可以评估大型数据集,大部分是实时的,从而导致特定的反应。
随着精度和数据处理的提高,对用户的了解也更加深入。但是人工智能不一定会替你思考。都是关于自动化的。它得出结论,检测模式,并对情况做出反应。
7)环境感知型数字标牌
智能数字标牌的适应性允许在一天甚至一周的不同时间安排和显示不同的内容。
内容也可以实时呈现,以反映快速变化的环境。例如,感知环境的数字标牌可以显示与外面天气相关的内容:阳光明媚时可以自动显示太阳镜广告,下雨时可以自动显示雨伞广告。
结论
可以得出结论,人工智能和数字标牌是齐头并进的。到 2023 年,数字标牌市场预计将增长至 328.4 亿美元,到 2024 年,人工智能的市场整体将增长至 1910 亿美元。
无论是从市场增长的角度还是从新发展的角度来看,这两家公司都有着光明的未来。
人工智能的几个方面已经成为数字标牌世界的一部分,它们成为广为人知的匹配只是时间问题。
识破数据科学家谎言和欺骗的 7 种方法
亚历克斯·利特温在 Unsplash 上的照片
确保你不会被卖给你“人工智能”和“机器学习”的人利用的 7 个简单原则
声明:所有表达的观点都是我自己的。
W 无论你是商业领袖、企业家、天使投资人、公司中层管理人员、黑客马拉松的评委,还是参与‘科技’的人,在某个时候,你都可能会遇到有人试图向你‘出售’他们的“人工智能产品”、“机器学习软件”或其他一些时髦词汇的情况。如果你发现自己处于这种情况,很自然地会觉得自己没有足够的知识和专业技能来做出明智的决定。坚持自己的立场,不要被压倒!以下是 7 个常识性的方法,可以帮助你将信号从噪音中分离出来。这些将帮助你切入正题,并帮助你理解你所推销的机器学习解决方案的核心价值主张。
1.“我们用人工智能来……”
别人说“艾”的时候要特别小心。虽然这可能是一种幻想营销,但也可能是一种真诚的努力,试图抽象出令人痛苦的复杂细节,以便不打扰你。假定他们是无辜的但是要深入细节。**进一步了解他们使用了哪种特定的机器学习模型。**让他们举一反三给你解释一下。
如果不能简单的解释,说明你理解的不够好。——阿尔伯特·爱因斯坦
这里有几个要问的其他关键问题:
- 您尝试过哪些其他方法(模型/算法/技术),结果与选择的解决方案相比如何?(如有可能,要求提供图形证据)
- 你为什么选择这种方法而不是其他方法?
- 为什么你认为这种方法在这个数据上优于其他方法?
- 有人解决过类似的问题吗?如果是,他们使用了哪种方法?
起初,你可能不一定理解这些问题答案的所有细节,但你应该尽可能多地询问、澄清和理解。
在我的经验中,我还没有遇到一个机器学习概念不能用类比来解释。所以,如果交流太多的技术细节是一个挑战的话,要求一个高层次的解释。这样的审视不仅会扩展你的理解,还会表明解决方案考虑得有多周全。(这也将证明你的会议室是一个禁止废话的区域😎)
2.适应者的生存
来源:https://i.pinimg.com
在 20 世纪 90 年代和 21 世纪初,电子邮件收件箱中的垃圾邮件过滤器会寻找拼写错误和其他简单的指标,自动将垃圾邮件放入垃圾邮件文件夹。现在,垃圾邮件发送者变得越来越聪明,垃圾邮件也变得越来越难以检测。现代电子邮件提供商使用的机器学习模型必须适应并变得更加复杂,才能正确识别垃圾邮件。
“所有的失败都是适应的失败,所有的成功都是成功的适应。”——马克斯·麦克欧文
你必须澄清的一件事是,随着时间的推移和输入数据的演变,机器学习模型在新数据上重新训练或被更具性能的模型取代的难易程度如何。这一点至关重要,因为你有权知道出售给你的解决方案是否有“到期日”。
3.垃圾进垃圾出
来源:https://media.tenor.com
机器学习模型的好坏取决于它的数据。因此,**你应该确定用于训练机器学习模型的数据质量。**虽然“质量”很难定义,并且可能因环境而异,但了解训练数据质量的一个简单方法是询问— 与模型将面对的“真实世界”数据相比,训练数据的相似性和代表性如何。
“我们相信上帝,所有其他人都会带来(高质量的)数据。”爱德华·戴明
无论一个机器学习模型有多么花哨或者多么先进,如果训练它的数据质量很差,结果肯定会很糟糕。
4.更多,更多,更多!
一般来说,模型训练的数据越多,它的表现就越好(其他条件相同)。深度学习模型更是如此。你可以把一个机器学习模型想象成一个高中生为了 sat 而练习做题。练习更多种类的问题会增加学生在 sat 考试中表现更好的可能性。
“在没有(充分的)数据之前就建立理论是一个严重的错误.”—夏洛克·福尔摩斯
**确保在训练任何机器学习模型时使用了充足的数据是至关重要的。**多少数据才够?很难说需要多少数据,但是越多越好!理想情况下,数据应该来自可靠的来源,并且应该尽可能地使用这些来源。
5.可解释性
来源:https://lh3.googleusercontent.com
在机器学习中,模型的表现如何,以及其表现(尤其是糟糕的表现)可以被解释的难易程度之间,往往存在权衡。一般来说,对于复杂的数据,更精密和复杂的模型往往做得更好。然而,由于这些模型更加复杂,因此很难解释输入数据对输出结果的影响。例如,让我们想象一下,你正在使用一个非常复杂的机器学习模型来预测一种产品的销量。这个模型的输入是花在电视、报纸和广播广告上的钱。复杂的模型可能会给你非常准确的销售预测,但可能无法告诉你电视、广播或报纸这三个广告渠道中哪一个对销售影响更大,更值得花钱。另一方面,一个更简单的模型可能会给出一个不太准确的结果,但却能够解释哪一个商店更值得花钱。你需要意识到模型性能和可解释性之间的权衡。这是至关重要的,因为在可解释性和表现之间的平衡应该取决于目标,因此应该由你来决定。
6.以正确的方式衡量正确的事情
准确性是衡量分类机器学习模型性能的一个非常常见的指标。例如,对猫和狗的图片进行分类的机器学习模型,准确率为 96%,可以认为是非常好的。这意味着在 100 张猫和狗的图片中,模型能够猜对 96 张。现在想象一下,一家银行试图应用相同的指标对欺诈交易进行分类。欺诈分类器可能很容易达到 96%的准确率,因为欺诈交易非常罕见。然而,捕捉欺诈交易并不意味着 96%的时间都是正确的。这是关于减少错误和尽可能多地捕捉欺诈交易,因为错误地将 4%的交易归类为非欺诈交易会造成很大的损失。
测量是神话般的。除非你忙着衡量什么是容易衡量的,而不是什么是重要的。——塞思·戈丁
对于银行欺诈的例子,假阴性的数量比准确性更能说明模型的性能。根据问题的不同,应该使用其他一些指标,如精确度、召回率、特异性和 F1 分数,而不是精确度。这里有一篇由 Mohammed Sunasra 撰写的的精彩文章,讲述了这些工具应该在什么时候使用。因此,至关重要的是尽可能注意使用正确的指标和各种指标。
7.那么…你的优势和劣势是什么?
在企业面试中,优势-劣势问题是一个老生常谈的问题,当试图评估机器学习解决方案时,这个问题会非常方便。当有人提出机器学习解决方案时,你绝对应该询问他们解决方案的局限性。了解回答两个关键问题的局限性是非常重要的:
- 实施该解决方案的优势是否足以超过限制?
- 这些限制会影响未来的表现吗?
“成功的关键是了解自己的弱点,并成功地弥补它们。缺乏这种能力的人会长期失败。”—雷伊·达里奥
从实现有效和可持续的机器学习解决方案的角度来看,了解其局限性对其成功至关重要。此外,要求支持者坦白他们解决方案的局限性会让你了解他们的透明度。它将表明解决方案考虑得有多周全,以及提出解决方案的人有多值得信任。
结论
不管你感到多么缺乏知识和不知所措,你有一个秘密武器可以帮助你——一个引导你穿过迷雾的手电筒。这个秘密武器就是你提问的能力。提问!质疑、澄清和审视你不确定的一切。上面提到的这 7 个想法会给你一个整体策略和 7 个关键维度,你可以沿着这 7 个维度提问。你可以依靠它们来增强你的理解,并合理地评估机器学习解决方案。
7 种入门 ML 的方法,从最容易到最难排列
入门
永远不要因为事情难做而放弃,没有什么值得拥有的东西来之不易。
机器学习是教计算机如何从数据中学习以做出决策(或预测)。坐在计算机科学和统计学的交叉点上,你可能会看到几个热门词汇,比如:
数据科学、大数据、人工智能、预测分析、计算统计、数据挖掘、监督学习、强化学习等。
那么,如何打入机器学习呢?
1.观看 ML 相关视频。
那么,你想开始进入 ML 吗?好消息是网上有无数的教程。YouTubers 没有筛选大量的内容,而是挑选出有趣的内容,使其简洁,并尽可能用通俗的语言解释。
这篇文章介绍了七个 YouTube 频道,旨在揭示机器学习领域最新、最酷的发展。例如,两分钟的论文视频很有趣,很吸引人,看起来绝对是一种享受。
如何跟上最新最酷的机器学习进展
towardsdatascience.com](/7-essential-ai-youtube-channels-d545ab401c4)
许多会议邀请著名的演讲者和作者为那些喜欢听行业专家和研究人员自己演讲的人展示他们的论文。神经信息处理系统会议(NeurIPS),机器学习领域的领先会议之一,发布了他们的免费访问视频。
2.阅读 ML 中的趋势和事件。
在《走向数据科学》杂志上,作者向广大读者呈现内容丰富的书面文章。无论你是在寻找了解更多数据科学的步骤,获得机器学习的最新更新,还是听到关于人工智能职业的建议,走向数据科学都可以为你提供全方位的学习体验。
让你跟上机器学习的其他值得注意的来源是
也可以在 LinkedIn 上联系关注 ML 的人。他们自然会分享 how-tos 教程和最新的 ML 开发。
3.参加 ML 课程。
对于初学者来说,AI 的元素是一系列免费的在线课程,适合广大观众学习什么是 ML,可以(和不可以)用 ML 做什么,以及如何开始创建 ML 模型。
吴恩达的《AI For everybody》是一本很好的 ML 入门书;它全面概述了什么是 ML 以及围绕 ML 的各种概念、术语和方法。这门课程大多是非技术性的,适合任何人,是一门优秀的入门课程。
想深潜的可以从选择深度学习专精课程中自己感兴趣的专精开始。无论是计算机视觉还是自然语言处理,吴恩达教授算法工作背后的关键概念和机制。fast.ai 提供免费的在线课程,这是一种实用的方法,通过提供 PyTorch 的实际操作来补充吴恩达的方法。
对于那些对 TensorFlow 感兴趣的人,谷歌有带 TensorFlow APIs 的机器学习速成班。这是对机器学习的实用介绍,有视频讲座、真实案例研究和动手实践练习供您遵循。
4.写下你的 ML 旅程。
定期消费信息并不是学习和成长的理想方式。在你所有的阅读和学习之后,写下你的想法的过程有助于理清你的思路。这是一个时间和空间来处理这些信息并反思你所学到的东西。
在消费更多内容的同时创造内容的过程,写作可以让你强化你的学习。作为一名数据科学家,有效的沟通是需要磨练的最重要的非技术技能之一。
你可以从写关于数据科学的文章开始(如何投稿)。我们的编辑通过提供反馈来帮助作者表达他们的想法。通过依靠不同的流量来源,如媒体源、社交媒体和时事通讯,在《走向数据科学》中发布可让您接触到更广泛的受众。
或者,你可以托管你的网站,完全控制网站的内容和风格。我建议查看一下 GitHub 页面。您的内容直接托管在您的 GitHub 存储库中,您可以通过使用您的用户名(如https://username.github.io
)访问这些内容。例如,你可以在 https://jinglescode.github.io/的查看我的。
5.从 ML 宠物项目开始。
现在,这是事情变得更加实际的时候。课程有助于培养基本技能,但参与项目是一种很好的学习方式。你将被迫独自批判性地思考问题和解决方案。它建立了无法教授的特定知识和技能;看别人做比自己学做容易多了。
一个宠物项目可以让你在更深的层次上探索和应用你所学到的东西。从职业角度来看,这将使你能够建立一个投资组合,并向潜在雇主展示。你会知道如何问正确的问题,尤其是如何谷歌正确的问题。它让你在一个端到端的机器学习项目中面临各种各样的问题。
这里是一个宠物项目的例子。一个基于 web 的项目,通过 TensorFlow.js 框架从在线 API 提取股票价格,并使用长短期记忆执行预测。在我称之为的游乐场中查看一些我喜欢的项目。
[## 用 TensorFlow.js - Hong Jing (Jingles)进行时间序列预测
从在线 API 中提取股票价格,并使用递归神经网络和长短期记忆进行预测…
jinglescode.github.io](https://jinglescode.github.io/time-series-forecasting-tensorflowjs/)
当决定做一个自己喜欢的项目时,最困难的事情之一就是找时间开始。因为我们大多数人都有一份全职工作,剩下的“空闲时间”都可以用来看《网飞》。但是你从个人项目中获得的学习和成长是金子。
6.参加纸牌比赛。
对于初学者来说,Kaggle 是一个很好的学习工具,因为每个比赛都是独立的。您不需要确定项目的范围和收集那些数据,这使您可以专注于解决问题。此外,讨论和获奖者访谈很有启发性。每个竞赛都有自己的讨论板,并向获胜者汇报。你可以窥视更有经验的数据科学家的思维过程。
比赛还将迫使你应对应用机器学习过程的每一步,包括探索性分析、数据清理、特征工程和模型训练。团队合作是与比你有更多领域知识的人合作的好方法,可以进一步扩大你的机会和向他人学习。
7.为 ML 创业公司工作。
加入一家初创公司是作为数据科学家学习端到端开发运营的绝佳机会。要构建的东西太多了,您将做所有的事情,从获取和清理数据、组织和理解数据,到构建和部署模型。
如果创业时的沉浮态度没有吓到你或让你放弃在创业公司工作,这可能是快速获得一些有价值技能的好方法。由于你将身兼多职,而且你需要随时学习,你将会更好地掌握机器学习以及将机器学习应用于生产的相关流程。
这就是开始机器学习的 7 种方法,从最容易到最难。
- 观看 ML 相关视频
- 阅读 ML 中的趋势和事件
- 参加 ML 课程
- 写下你的 ML 旅程
- 从 ML 宠物项目开始
- 参加纸牌比赛
- 为 ML startup 工作
你目前处于哪个阶段并不重要。选择一种适合你的学习方式,这种方式对你来说很舒服——在感知到的任务挑战和个人感知到的技能之间找到恰当的平衡。
你永远不应该因为某件事难做而放弃它。任何值得拥有的东西都来之不易。
现在就开始吗?
了解卷积的工作原理。
理解卷积及其参数的生动方式
towardsdatascience.com](/how-convolutional-layers-work-in-deep-learning-neural-networks-2913af333b72)
了解更多变形金刚,关注。
逐个组件的细分分析
towardsdatascience.com](/illustrated-guide-to-transformer-cf6969ffa067)
机器学习中处理缺失值的 7 种方法
凯文·Ku 在 Unsplash 上的照片
处理数据集中缺失值的常用策略
真实世界的数据通常有很多缺失值。丢失值的原因可能是数据损坏或未能记录数据。在数据集的预处理过程中,缺失数据的处理非常重要,因为许多机器学习算法不支持缺失值。
本文涵盖了处理数据集中缺失值的 7 种方法:
- 删除缺少值的行
- 估算连续变量的缺失值
- 估算分类变量的缺失值
- 其他估算方法
- 使用支持缺失值的算法
- 缺失值的预测
- 使用深度学习库 Datawig 进行插补
使用的数据是来自 Kaggle 的泰坦尼克号数据集
data = pd.read_csv("train.csv")
msno.matrix(data)
(图片由作者提供),缺失值的可视化:白线表示存在缺失值
删除缺少值的行:
缺失值可以通过删除具有空值的行或列来处理。如果列中有超过一半的行为 null,则可以删除整列。也可以删除一个或多个列值为 null 的行。
(图片由作者提供)**左:**具有空值的数据,**右:**移除空值后的数据
优点:
- 通过移除所有缺失值来训练的模型创建了稳健的模型。
缺点:
- 大量信息的丢失。
- 如果与完整数据集相比,缺失值的百分比过大,则效果不佳。
用平均值/中值估算缺失值:
数据集中具有连续数值的列可以替换为该列中剩余值的平均值、中值或众数。与以前的方法相比,这种方法可以防止数据丢失。替换上述两个近似值(平均值、中值)是处理缺失值的统计方法。
(图片由作者提供)**左:**插补前的年龄栏,**右:**按平均值插补后的年龄栏
在上面的例子中,缺失值由平均值代替,同样,它也可以由中值代替。
赞成者:
- 防止导致行或列删除的数据丢失
- 适用于小型数据集,并且易于实现。
缺点:
- 仅适用于数值连续变量。
- 会导致数据泄露
- 不要考虑要素之间的协方差。
分类列的插补方法:
当缺失值来自分类列(字符串或数字)时,可以用最常见的类别替换缺失值。如果缺失值的数量非常大,那么可以用新的类别来替换。
(图片由作者提供)**左图:**插补前的数据,**右图:**通过“U”插补后的客舱栏
优点:
- 防止导致行或列删除的数据丢失
- 适用于小型数据集,并且易于实现。
- 通过添加唯一的类别来消除数据丢失
缺点:
- 仅适用于分类变量。
- 编码时向模型添加新特征,这可能会导致性能下降
其他插补方法:
根据数据的性质或数据类型,其他一些估算方法可能更适合估算缺失值。
例如,对于具有纵向行为的数据变量,使用最后一个有效的观察值来填充缺少的值可能是有意义的。这就是所谓的最后观察结转(LOCF)方法。
对于时序数据集变量,对缺失值使用时间戳前后的变量插值是有意义的。
使用支持缺失值的算法:
所有的机器学习算法都不支持缺失值,但一些 ML 算法对数据集中的缺失值具有鲁棒性。当缺少值时,k-NN 算法可以忽略距离度量中的列。在进行预测时,朴素贝叶斯也可以支持缺失值。当数据集包含空值或缺失值时,可以使用这些算法。
Python 中朴素贝叶斯和 k-最近邻的 sklearn 实现不支持缺失值的存在。
这里可以使用的另一个算法是 RandomForest,它适用于非线性和分类数据。它适应考虑高方差或偏差的数据结构,在大型数据集上产生更好的结果。
优点:
- 不需要处理每一列中的缺失值,因为 ML 算法将有效地处理它们。
缺点:
- scikit-learn 库中没有这些 ML 算法的实现。
缺失值的预测:
在早期处理缺失值的方法中,我们没有利用包含缺失值的变量与其他变量的相关性优势。使用没有空值的其他特征可用于预测缺失值。
根据具有缺失值的要素的性质(分类或连续),回归或分类模型可用于缺失值的预测。
Here 'Age' column contains missing values so for prediction of null values the spliting of data will be,**y_train**: rows from data["Age"] with non null values
**y_test**: rows from data["Age"] with null values
**X_train**: Dataset except data["Age"] features with non null values
**X_test**: Dataset except data["Age"] features with null values
(作者代码)
了解如何使用机器学习模型及其实现来预测数据集中的缺失值
towardsdatascience.com](/predict-missing-values-in-the-dataset-897912a54b7b)
优点:
- 给出比早期方法更好的结果
- 考虑缺失值列和其他列之间的协方差。
缺点:
- 仅被视为真实值的代表
使用深度学习库进行插补— Datawig
这种方法非常适用于分类的、连续的和非数字的特征。Datawig 是一个库,它使用深度神经网络来学习 ML 模型,以估算数据报中的缺失值。
Install datawig library,
**pip3 install datawig**
Datawig 可以获取一个数据帧,并以所有其他列作为输入,为每一列的缺失值拟合插补模型。
下面是估算年龄列中缺失值的代码
(作者代码)
优点:
- 与其他方法相比相当准确。
- 它支持 CPU 和 GPU。
缺点:
- 对于大型数据集可能会非常慢。
结论:
每个数据集都有需要智能处理的缺失值,以创建稳健的模型。在本文中,我讨论了 7 种处理缺失值的方法,它们可以处理每种类型的列中的缺失值。没有以特定方式处理缺失值的重击规则,这种方法可以获得具有最佳性能的健壮模型。根据数据的方式和内容,可以对不同的特征使用不同的方法。了解数据集的领域知识非常重要,这有助于了解如何预处理数据和处理缺失值。
参考文献:
[1]数据维格:https://github.com/awslabs/datawig
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一小部分会员费,不需要你额外付费。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
satyam-kumar.medium.com](https://satyam-kumar.medium.com/membership)
感谢您的阅读
操纵熊猫数据框的 7 种方法
熊猫提供了很大的灵活性
Pandas 是一个非常强大和通用的 Python 数据分析库,它加速了数据分析和探索过程。Pandas 的优势之一是它提供了多种数据操作的功能和方法。
在 Unsplash 上由 Waldemar Brandt 拍照
数据帧是熊猫的核心数据结构。为了掌握熊猫,你应该能够轻松流畅地摆弄数据帧。在这篇文章中,我们将讨论不同的方法来操作或编辑它们。
让我们从导入 NumPy 和 Pandas 开始,并创建一个示例数据帧。
import numpy as np
import pandas as pdvalues = np.random.randint(10, size=(3,7))
df = pd.DataFrame(values, columns=list('ABCDEFG'))
df.insert(0, 'category', ['cat1','cat2','cat3'])df
我们将提到的第一种操作方式是熔化功能,它将宽数据帧(大量列)转换成窄数据帧。一些数据帧的结构是连续的测量值或变量用列来表示。在某些情况下,将这些列表示为行可能更适合我们的任务。
#1 meltdf_melted = pd.melt(df, id_vars='category')
df_melted.head()
用 id_vars 参数指定的列保持不变,其他列显示在变量和值列下。
第二种方法是增加索引级别的堆栈函数。
- 如果 dataframe 有一个简单的列索引,stack 返回一个系列,其索引由原始 dataframe 的行列对组成。
- 如果数据帧有多级索引,stack 增加索引级别。
考虑以下数据帧:
#2 stackdf_stacked = df_measurements.stack().to_frame()
df_stacked[:6]
在这种情况下,stack 函数返回一个 Series 对象,但是我们使用 to_frame 函数将其转换为 dataframe。
顾名思义,拆分功能是堆栈功能的反向操作。
#3 unstackdf_stacked.unstack()
添加或删除列可能是我们做得最多的操作。让我们添加一个新列并删除一些现有的列。
#4 add or drop columnsdf['city'] = ['Rome','Madrid','Houston']
df.drop(['E','F','G'], axis=1, inplace=True)df
我们创建了一个包含列表的新列。Pandas 系列或 NumPy 数组也可用于创建列。
要删除列,除了列名之外,轴参数应该设置为 1。为了保存更改,将原位参数设置为真。
默认情况下,新列会添加到 dataframe 的末尾。如果希望新列放置在特定位置,应该使用 insert 函数。
#5 insertdf.insert(0, 'first_column', [4,2,5])df
我们可能还想添加或删除行。
append 函数可用于添加新行。
#6 add or drop rowsnew_row = {'A':4, 'B':2, 'C':5, 'D':4, 'city':'Berlin'}
df = df.append(new_row, ignore_index=True)df
我们可以像删除列一样删除 a。唯一的变化是轴参数值。
df.drop([3], axis=0, inplace=True)df
对数据帧的另一个修改可以通过 pivot_table 函数实现。考虑以下具有 30 行的数据帧:
import randomA = np.random.randint(10, size=30)
B = np.random.randint(10, size=30)
city = random.sample(['Rome', 'Houston', 'Berlin']*10, 30)
cat = random.sample(['cat1', 'cat2', 'cat3']*10 ,30)df = pd.DataFrame({'A':A, 'B':B, 'city':city, 'cat':cat})
df.head()
pivot_table 函数也可以被视为从不同的角度查看数据框架的一种方式。它通过允许变量以不同的格式表示数据来探索变量之间的关系。
#7 pivot_tabledf.pivot_table(index='cat', columns='city', aggfunc='mean')
返回的数据帧包含每个 city-cat 对的平均值。
我们已经介绍了 7 种编辑或操作数据帧的方法。其中一些非常常见,你可能几乎每天都在使用它们。也会有需要使用稀有的情况。
我认为熊猫的成功和流行来自于多功能、强大和易于使用的操作和分析数据的功能。和熊猫一起完成一项任务几乎总是有多种方式。由于花在数据科学项目上的大部分时间都花在数据清理和预处理步骤上,所以非常鼓励学习 Pandas。
感谢您的阅读。如果您有任何反馈,请告诉我。
你应该在 LinkedIn 上关注的 7 位数据科学领域的女性
作为一名数据科学家,不断进步并跟上时代的步伐
布鲁克·拉克在 Unsplash 拍摄的照片
P 撤回这篇文章我分享了 你应该在 LinkedIn 上关注的 8 个人 。当我看到帖子的结尾时,我意识到“等一下……我一个字都没有提到一位单身女士!”
考虑到您已经阅读了我的上一篇文章,您会惊讶地发现,实际上有许多女性在数据科学领域做出了值得肯定的非凡成就。在女士们联合起来割破我的喉咙之前,我必须声明我真的在 LinkedIn 上关注了很多女性领导者——事实上,我有策略地计划写两篇独立的帖子!
事不宜迟。女士们先生们,你们应该在 LinkedIn 上关注这些开拓创新的女性。
#1 — 凯特·斯特拉赫妮
任何数据可视化?凯特是只山羊。她是数据化学院的创始人,该学院专注于提供数据可视化最佳实践的培训。哦,我说过她写了 4 本书吗?耶!
我忘了补充一点,她在做这些事情的同时平衡了她作为父母的责任。看,我有一个侄女(我已经提到过几次),当她在我身边时,我不得不停止我的日常工作,因为她成了老板——老实说,我不知道凯特是怎么做到的,但她做到了,因此她在 LinkedIn 上有超过 10 万名粉丝就很有道理了。
来源 : 数据可视化工具的数据化指南
附言凯特还不时在 LinkedIn 上做视频直播,讨论数据可视化。长话短说,跟着凯特就好!
[## 凯特·斯特拉赫尼·♕——数据学院| LinkedIn 创始人
" "我只是想分享一个简短的说明,让你知道你和 StorybyData 的团队已经完成了一项…
www.linkedin.com](https://www.linkedin.com/in/kate-strachnyi-data/)
#2 — 王梦瑶
梦瑶甚至可能会惊讶的发现自己上了这个榜单,不是因为她缺乏自信,不,不可能!梦瑶很可能会因为两个原因而感到惊讶,首先是她可能会对自己受到关注感到震惊,其次是因为她仍在学习数据科学— “但即使是首席数据科学家 Kurtis 也仍在学习”。不,当我说她还在学习的时候,我的意思是她还在学习!
从她的 LinkedIn 个人资料来看,她有一些作为数据分析师的经验,这是进入数据科学的一个非常自然的过程,所以她并不是一无所知。虽然她可能不像凯特或其他一些女士那样拥有以下粉丝,但她的帖子仍然很有冲击力——主要包括围绕机器学习和数据科学的免费书籍的链接。
她的 LinkedIn 上的头条是:
“我与我出色的 LinkedIn 朋友分享我进入数据科学的学习之旅,请关注我,让我们一起成长!”
离开梦瑶的帖子(其中大部分我都会收藏并重新浏览),如果你问我,这不是个坏建议。
在全球最大的职业社区 LinkedIn 上查看王梦瑶的个人资料。梦瑶有 3 个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/mengyaowang11/)
第三名——凯西·科济尔科夫
凯西有一份这样的简历,你拿起它开始摇晃,然后想知道到目前为止你是否做出了正确的人生决定。伙计,这位女士很在行!然而,作为她的帖子的热心观众,我感觉她是一个充满活力而又温柔的人,超越了她对非常复杂的话题的简单解释。还记得由数据科学家 解释的 P 值的 Admond Lee 的病毒帖子吗?原来是凯西启发阿德蒙德写了那个帖子——这充分说明了她的教学的影响力和有效性。
在谷歌担任首席决策科学家——这是她在谷歌创立的一个领域…
来源 : 卡西解释什么是置信区间
看,如果你现在还不相信,我真的不知道还能说什么。
[## Cassie Kozyrkov -首席决策科学家-谷歌| LinkedIn
我是谷歌的数据科学家和领导者,我的使命是让决策智能和安全可靠的人工智能民主化。我…
www.linkedin.com](https://www.linkedin.com/in/cassie-kozyrkov-9531919/)
#4 — 安吉拉·巴尔蒂斯
首先,祝贺安吉拉在纽约大学担任兼职教授的新职务,她将于 2021 年 1 月开始工作。安吉拉非常特立独行,自从跟随她之后,我在她身上看到了两种类型的人。第一个是这个非常严肃的人,表达了她对招聘数据科学家的欺诈行为的担忧,另一个是有很多玩笑的人。
很明显,她非常有激情,非常有趣,是专业人士的完美结合。
[## Angela Baltes -机构数据科学家-新墨西哥大学| LinkedIn
在世界上最大的职业社区 LinkedIn 上查看安吉拉·巴尔蒂斯的个人资料。安吉拉有 9 份工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/angelabaltes/)
#5 — 克里斯汀·凯尔勒
我第一次见到克里斯汀是在她和凯特(我在上面提到过她)一起生活的早期阶段。这是一次有趣的讨论,讨论开始时谈到了封锁(孩子们不去上学)的困难。这段对话引起了我的一些兴趣,因为当凯特在 LinkedIn 上直播时,她经常和与她工作相关的人说话。
原来克里斯汀是加州大学伯克利分校的数据科学讲师,也是 Data Moves 的创始人——最重要的是,克里斯汀在该领域有超过 10 年的经验。
[## Kristen Kehrer -加州大学伯克利分校数据科学讲师| LinkedIn
我帮助数据科学团队:-解释他们的机器学习模型,并充分传达警告…
www.linkedin.com](https://www.linkedin.com/in/kristen-kehrer-datamovesme/)
瑞秋·托马斯
在我的经理告诉我写作的事之后,我读了 Rachel title 在 Medium 上的一篇文章,为什么你(是的,你)应该写博客。当我读完这篇文章的时候,我已经开始写我的第一篇文章了。
雷切尔·托马斯是 USF 应用数据伦理中心的创始主任,该中心旨在解决虚假信息、监控、算法偏见和其他数据滥用等危害,但我与雷切尔的第一次相遇是在 Fast.ai 课程上,她与杰瑞米·霍华德是该课程的联合创始人。
Rachel 对数据世界中的道德规范充满热情,最近发布了一门名为应用数据道德规范的免费课程
来源:应用数据伦理
关注 Rachel 是一个很好的方式来了解数据的道德方面。
[## 雷切尔托马斯-主任,应用数据伦理中心-数据研究所,圣…
Rachel Thomas 是 USF 应用数据伦理中心的创始主任,该中心旨在解决诸如…
www.linkedin.com](https://www.linkedin.com/in/rachel-thomas-942a7923/)
第七名——艾琳娜·泰吉·格雷瓦尔博士
Elena 在 AirBnb 工作了大约 7 年,其中她最后一个职位是数据科学主管用了 3 年时间。现在,埃琳娜是数据科学咨询公司 Data 2 the People 的创始人。
我和埃琳娜的第一次相遇是在下面的对话中…
我很好奇,就在 LinkedIn 上找到了她,并关注了她。
[## Elena Tej Grewal 博士-团队成员,创始人- Data 2 the People | LinkedIn
查看 Elena Tej Grewal 博士在世界上最大的职业社区 LinkedIn 上的个人资料。Elena Tej 有 5 份工作…
www.linkedin.com](https://www.linkedin.com/in/elena-grewal/)
包裹
像上一份名单一样,这份名单很难放在一起,数字背后没有任何意义(它们不是排名)。这个名单上可能有很多名字,但我只列出了想到的前 7 个。
如果你有一些很棒的名字要添加,请在评论区用链接随意评论这些名字,让我们在 LinkedIn 上继续对话…
[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn
在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有一个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/kurtispykes/)
不应错过的 8 个高级 Python 日志功能
在不影响性能的情况下理解你的程序
日志是软件开发中非常重要的一个单元。它帮助开发人员更好地理解程序的执行,并对缺陷和意外失败进行推理。日志消息可以存储诸如程序的当前状态或程序运行的位置等信息。如果出现错误,开发人员可以快速找到导致问题的代码行,并采取相应的措施。
Python 提供了一个非常强大和灵活的内置日志模块,具有许多高级特性。在本文中,我想分享 8 个高级特性,它们将有助于我们开发软件。
记录 101
在查看更多高级功能之前,让我们确保对logging
模块有一个基本的了解。
记录器
我们创建来生成日志的实例被称为记录器。它是通过logger = logging.getLogger(__name__)
实例化的。最佳实践是使用__name__
作为记录器名称,包括包名和模块名。该名称将出现在日志消息中,这有助于开发人员快速找到生成日志的位置。
格式化程序&处理程序
每个记录器都有许多可以修改的配置。稍后将讨论更高级的配置,但最常见的是格式化器和处理器。
格式化程序指定日志消息的结构。每个日志消息都是一个LogRecord
对象,带有多个属性(模块名是其中之一)。当我们定义一个格式化程序时,我们可以决定日志消息应该如何使用这些属性,并且可能使用定制的属性。默认格式化程序如下所示:
severity:logger name:message
# e.g: WARNING:root:Program starts!
具有更多属性的自定义格式化程序如下所示:
"%(asctime)s - [%(levelname)s] - %(name)s - (%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"# 2020-07-26 23:37:15,374 - [INFO] - __main__ - (main.py).main(18) - Program starts!
处理程序指定日志消息的目的地。日志消息可以发送到多个目的地。日志模块实际上提供了相当多的标准处理程序。最流行的是将日志发送到文件的 FileHandler 和将日志发送到流的 StreamHandler,例如sys.stderr
或sys.stdout
。记录器实例支持 0 个或多个处理程序。如果没有定义处理程序,那么它会将日志发送到sys.stderr
。如果定义了多个处理程序,则目标取决于日志消息的级别和处理程序的级别。
例如,我有一个带有级别警告的 FileHandler 和一个带有级别信息的 StreamHandler。如果我写了一个错误日志消息,那么该消息将被发送到 *sys.stdout*
和日志文件中。
例如:
在这个例子中,我们创建了一个main.py
、package1.py
和app_logger.py
。app_logger.py
包含一个函数get_logger
,它返回一个记录器实例。logger 实例带有一个自定义格式化程序和两个处理程序:带有信息级别的 StreamHandler 和带有警告级别的 FileHandler。重要的是将基本级别设置为 INFO 或 DEBUG (默认日志级别为 WARNING) ,否则低于 WARNING 级别的日志将被过滤掉。main.py
和package1.py
都使用get_logger
来创建它们自己的记录器。
图高
基本-日志记录. py
警告日志被发送到控制台输出(sys.stdout)和日志文件,但信息日志仅被发送到控制台输出。如果你能完全理解这个例子中发生了什么以及为什么,那么我们就可以继续开发更高级的特性了。
1.使用 LoggerAdapter 创建用户定义的日志记录属性
正如我前面提到的,LogRecord 有许多属性,开发人员可以选择最重要的属性,并将它们放入格式化程序中。除此之外,日志模块还提供了向日志记录添加用户定义属性的可能性。
一种方法是使用LoggerAdapter
。当您创建一个适配器时,您将 logger 实例和您的属性(在字典中)传递给它。这个类提供了与Logger
相同的接口,所以你仍然可以调用像logger.info
这样的方法。
具有固定值的新属性
如果您希望在日志消息中有一种固定值属性,比如应用程序名,那么您可以使用默认的LoggerAdapter
类,并在创建日志记录器时获取属性值。不要忘记在格式化程序中添加这个属性,你可以自由选择它的位置。在下面的代码中,我添加了属性app
,这个值是在我创建记录器时定义的。
日志适配器固定值. py
带动态值的新属性
在其他情况下,您可能需要动态属性,例如,一种动态 ID。然后你可以扩展基本的LoggerAdapter
并创建你自己的。方法是将额外的属性附加到日志消息的地方。在下面的代码中,我添加了一个动态属性id
,它可以在每个日志消息中有所不同。在这种情况下,您不需要在格式化程序中添加属性。
日志适配器动态值. py
2.使用过滤器创建用户定义的日志记录属性
添加动态用户定义属性的另一种方法是使用自定义过滤器。过滤器提供了额外的逻辑来确定输出哪些日志消息。这是在检查基本日志级别之后,但在将日志消息传递给处理程序之前的一个步骤。除了确定日志消息是否应该向前移动,我们还可以在方法filter()
中插入新的属性。
图来自 Python 官方文档
在这个例子中,我们在filter()
中添加了一个新的属性color
,它的值是根据日志消息的级别名确定的。在这种情况下,属性名应该再次添加到格式化程序中。
日志过滤器动态属性. py
3.带有日志模块的多线程
日志模块实际上是以线程安全的方式实现的,所以我们不需要额外的努力。下面的代码显示 MainThread 和 WorkThread 共享同一个 logger 实例,没有竞争条件问题。格式化程序还有一个内置属性threadName
。
记录多线程. py
在幕后,日志模块几乎在任何地方都使用threading.RLock()
。RLock
与Lock
的区别在于:
Lock
只能获得一次,发布后才能获得。另一方面,RLock
可以在释放前多次获取,但应该释放相同的次数。Lock
可以被任何线程释放,但是RLock
只能被获取它的同一个线程释放。
任何从类Handler
扩展的处理程序都有一个方法handle()
来发出记录。这是Handler.handle()
的一个代码块。如您所见,处理程序将在发出记录之前和之后获取和释放锁。emit()
方法可以在不同的处理程序中不同地实现。
handle.py
4.带有日志模块的多处理—队列处理器
尽管日志模块是线程安全的,但它不是进程安全的。如果您希望多个进程写入同一个日志文件,那么您必须手动处理对您的文件的访问。根据测井指南,有几个选项。
QueueHandler +【消费者】流程
一种选择是使用QueueHandler
。这个想法是创建一个multiprocessing.Queue
实例,并在多个进程之间共享它。在下面的示例中,我们有两个“生产者”进程将日志发送到队列,还有一个“消费者”进程从队列中读取日志并将它们写入日志文件。
队列中的日志可能有不同的级别,因此在log_processor
中,我们使用logger.log(record.levelno, record.msg)
而不是logger.info()
或logger.warning()
。最后,我们发出信号让log_processor
停下来。在多个进程或线程之间共享一个队列实例并不是什么新鲜事,但是日志模块可以帮助我们处理这种情况。
日志队列处理程序. py
queue handler+queue listener
在logging.handlers
模块中,有一个特殊的类叫做[QueueListener](https://docs.python.org/3/library/logging.handlers.html#logging.handlers.QueueListener)
。该类创建一个侦听器实例,该实例具有一个日志消息队列和一个处理日志记录的处理程序列表。QueueListener
可以用更少的代码替换我们在前一个例子中创建的listener
流程。
日志队列 listener.py
SocketHandler
Cookbook 提供的另一个解决方案是将来自多个进程的日志发送到一个T4,并有一个单独的进程实现一个套接字服务器,该服务器读取日志并发送到目的地。该文档有一个相当详细的实现。
所有这些解决方案基本上都遵循相同的原则:将日志从不同的进程发送到一个集中的位置,要么是队列,要么是远程服务器。另一端的接收器负责将日志记录写入目的地。
5.默认情况下不发出任何库日志— NullHandler
到目前为止,我们已经提到了许多由日志模块实现的处理程序。另一个有用的内置处理程序是[NullHandler](https://docs.python.org/3/howto/logging.html#configuring-logging-for-a-library)
。NullHandler 的实现基本上什么都没有。然而,它帮助开发人员区分库日志和应用程序日志。
这是NullHandler
的实现。
nullhandler.py
为什么我们需要区分库日志和应用日志?
根据测井模块的作者 Vinay Sajip:
默认情况下,使用
logging
的第三方库不应该输出日志输出,因为使用它的应用程序的开发人员/用户可能不希望这样。
最佳实践是默认情况下不发出库日志,让库的用户决定他们是否希望在应用程序中接收和处理日志。
作为一个库开发者,我们只需要在__init__.py
里面一行代码就可以添加NullHandler
。在子包和子模块中,记录器照常保存。当我们通过pip install
在我们的应用程序中安装这个包时,默认情况下我们不会看到库中的日志。
记录 nullhandler example.py
使这些日志可见的方法是向应用程序中的库记录器添加处理程序。
# your application
logging.getLogger("package").addHandler(logging.StreamHandler())
如果库不使用NullHandler
,但是你想禁用库日志,那么你可以设置logging.getLogger("package").propagate = False
。如果 propagate 设置为 False,那么日志将不会传递给处理程序。
6.旋转日志文件—旋转文件处理程序,timedrotating 文件处理程序
RotatingFileHandler
支持日志文件轮换,这使得处理程序能够根据日志文件的最大大小来轮换日志文件。这里需要定义 2 个参数: maxBytes 和 backupCount 。 maxBytes 告诉处理程序何时旋转日志。 backupCount 是日志文件的数量,每个扩展日志文件都有一个后缀“. 1”,文件名末尾有“. 2”。如果当前日志消息将使日志文件超过最大大小,那么处理程序将关闭当前文件并打开下一个文件。
这是一个非常类似于食谱的例子。您应该得到 6 个日志文件。
日志文件 rotation.py
另一个文件循环处理程序是TimeRotatingFileHandler
,它允许开发人员基于运行时间创建循环日志。时间条件包括:秒、分、小时、日、w0-w6(0 =星期一)和午夜(午夜翻转)。
在以下示例中,我们每秒轮换 5 个备份文件的日志文件。每个备份文件都有一个时间戳作为后缀。
时间文件 rotation.py
7.记录期间的异常
在许多情况下,我们在处理异常时使用logger.error()
或logger.exception()
。但是如果记录器本身引发了一个异常,程序会发生什么呢?嗯,看情况。
记录器错误在处理程序调用emit()
时被处理,这意味着任何与格式化或写入相关的异常都被处理程序捕获,而不是被引发。更具体地说,handleError()
方法将把引用通告打印给stderr
,程序将继续。如果你有一个从Handler
类扩展的自定义处理程序,你可以实现你自己的handleError()
。
在本例中,第二条日志消息的参数太多。所以在控制台输出中,我们收到了 trackback,程序仍然可以继续。
但是,如果异常发生在emit()
之外,那么可能会引发异常,程序将会停止。例如,在下面的代码中,我们在logger.info()
中添加了一个额外的属性id
,而没有在 LoggerAdapter 中处理它。此错误未得到处理,导致程序停止。
日志记录异常引发. py
8.3 种不同的方法来配置您的记录器
我想分享的最后一点是关于配置你的日志。有 3 种方法可以配置记录器。
使用代码
最直接的选择是使用代码来配置您的日志记录器,就像我们在本文中看到的所有例子一样。但是这种方法的缺点是任何修改都需要改变源代码。
使用 ***dictConfig***
第二种选择是在字典中编写配置,并使用logging.config.dictConfig
来读取它。您还可以将字典保存到 JSON 文件中,并从那里读取。优点是它可以作为外部配置加载,但由于其结构,它可能容易出错。
日志配置 json.py
使用 ***fileConfig***
最后但同样重要的是,第三个选项是使用logging.config.fileConfig
。配置被写入一个单独的.ini
文件。
日志配置文件. py
可以通过配置服务器在运行时更新配置。食谱展示了一个客户端和服务器端的例子。通过套接字连接更新配置,在客户端,我们使用c = logging.config.listen(PORT) c.start()
接收最新的配置。
我希望这些日志提示和技巧可以帮助您在不影响性能的情况下,围绕您的应用程序建立一个良好的日志框架。如果你有什么要分享的,请在下面留下你的评论!
参考:
[## 日志记录指南- Python 3.8.5 文档
这个页面包含了许多与日志记录相关的方法,这些方法在过去很有用。多次呼叫…
docs.python.org](https://docs.python.org/3/howto/logging-cookbook.html#) [## 日志记录-Python-Python 3 . 8 . 5 文档的日志记录工具
源代码:Lib/logging/init。py 这个模块定义了实现灵活事件记录的函数和类…
docs.python.org](https://docs.python.org/3/library/logging.html) [## 日志 Python 的搭便车指南
自版本 2.3 以来,该模块一直是 Python 标准库的一部分。它在 PEP 282 中有简洁的描述。的…
docs.python-guide.org](https://docs.python-guide.org/writing/logging/)