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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

ML 算法:一种 SD (σ)-正则化算法

原文:https://towardsdatascience.com/ml-algorithms-one-sd-σ-regularization-algorithms-728af0e92f84?source=collection_archive---------25-----------------------

机器学习正则化算法简介

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

当面对各种各样的机器学习算法时,要问的明显问题是“哪种算法更适合特定的任务,我应该使用哪种算法?”

回答这些问题取决于几个因素,包括:(1)数据的大小、质量和性质;(2)可用的计算时间;(3)任务的紧迫性;以及(4)你想用这些数据做什么。

这是我在以前的文章中写的许多算法中的一部分。
在这一部分,我试图尽可能简单地展示和简要解释正则化任务的主要算法(虽然不是全部)。

正则化算法:

我发现这些算法特别有用。大多数数据科学家会发现他们的一些模型在他们职业生涯的某个时候过度拟合。这些算法背后的一般思想是,它们试图最小化甚至防止过拟合。

岭回归 ( L2 正规化)

它的目标是解决数据过度拟合的问题,以及当数据出现多重共线性时(多重回归模型中的多重共线性是两个或多个解释变量之间高度线性相关的关联)。在特征变量之间存在高度共线性(独立变量之间存在近似线性关系)的情况下,标准线性或多项式回归模型将会失败。岭回归给变量增加了一个小的平方偏差因子。这种平方偏差因子使特征可变系数远离这种刚性,将少量偏差引入到模型中,但极大地减少了方差。

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

需要考虑的一些事情:

脊很好地避免了过度拟合。

如果数据集中有一个包含大量要素的模型,并且希望避免模型过于复杂,请使用正则化来解决过度拟合和要素选择问题。

岭有一个主要缺点,它包括最终模型中的所有 N 个特征。

当您有高度相关的变量时,岭回归会使两个系数相互缩小。Lasso 有点无所谓,一般都是挑一个不选一个。

根据上下文,我们不知道选择哪个变量。弹性网是两者之间的折衷,它试图同时收缩和进行稀疏选择。

最小绝对收缩和选择算子(拉索,L1 正则化

与岭回归相反,它只惩罚高系数。当超参数θ足够大时,Lasso 具有迫使某些系数估计精确为零的效果。因此,可以说 Lasso 执行变量选择产生的模型比岭回归产生的模型更容易解释。基本上,它减少了可变性,提高了线性回归模型的准确性。

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

需要考虑的一些事情:

Lasso 是一种用于执行线性回归的正则化技术。

Lasso 是逐步回归和其他模型选择和降维技术的一种替代方法。

在我们有大量特征的情况下,LASSO 对于特征选择很有效(它减少了冗余的特征并识别出重要的特征)。

它将系数缩减为零(与将系数的“平方值”作为惩罚项添加到损失函数的 Ridge 相比)。

如果一组预测值高度相关,lasso 只选择其中一个,并将其他预测值缩减为零。

其他方法,如交叉验证、逐步回归,对于减少过度拟合和执行特征选择相当有效。但是,它们主要处理少量的功能。山脊线和套索适用于大量要素。

弹力网

结合了套索和脊的特点。弹性网减少了不同特征的影响,同时没有消除所有的特征。Lasso 将消除许多特征,并减少线性模型中的过度拟合。岭将减少在预测 y 值时不重要的要素的影响。弹性网结合了 Lasso 中的要素消除和 Ridge 模型中的要素系数减少来改善模型的预测。

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

需要考虑的一些事情:

当你有几个高度相关的变量时,使用弹性网。

当有多个相关的特征时很有用。Lasso 可能会随机选择其中一个,而 elastic-net 可能会两个都选。

研究表明,当用于具有高度相关预测值的类似数据时,弹性网技术可以优于 LASSO。

最小角度回归(LARS)

类似于向前逐步回归。在每一步,它都会找到与响应最相关的预测值。当存在具有相等相关性的多个预测器时,不是沿着同一预测器继续,而是在预测器之间的等角方向上继续。最小角度回归就像向前逐步回归的一个更“民主”的版本。它遵循向前逐步回归的相同一般方案,但是没有将预测器完全添加到模型中。该预测器的系数仅增加,直到该预测器不再是与剩余 r 最相关的预测器。然后,邀请一些其他竞争预测器“加入俱乐部”。它从所有系数都等于零开始,然后找到与 y 最相关的预测值。它在与 y 相关的符号方向上增加系数,然后在此过程中获取残差,当其他一些预测值与 r 的相关性与第一个预测值一样大时停止。

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

需要考虑的一些事情:

当维数明显大于点数时,这是有用的

如果两个变量与响应的相关性几乎相等,那么它们的系数应该以大致相同的速率增加。

如果数据是高维的或者有多重共线性,就不能很好地工作。

如果你对我的更多作品感兴趣,你可以看看我的 Github ,我的学者页面,或者我的网站

时间序列的 ML 方法

原文:https://towardsdatascience.com/ml-approaches-for-time-series-4d44722e48fe?source=collection_archive---------0-----------------------

时间序列数据的机器学习方法

用非常规模型模拟时间序列

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

在这篇文章中,我尝试了一些机器学习技术来分析时间序列数据,并探索它们在这种情况下的潜在用途。

在这第一篇文章中,只开发了索引的第一点。其余的有一个单独的帖子,可以从索引中访问。

**注意:**这项工作是在 2017 年初完成的,所以很可能有些库已经更新了。

索引

1 —数据创建、窗口和基线模型
2 —遗传编程:符号回归
3 —极限学习机
4 —高斯过程
5—卷积神经网络

1 —数据创建、窗口和基线模型

1.1 —数据创建

在这项工作中,我们将对非均匀间隔时间序列数据进行分析。我们将创建 3 个随机变量 x1x2x3 的合成数据,并向这些变量的一些滞后的线性组合添加一些噪声,我们将确定 y,即响应。

这样,我们可以确保函数不是 100%可预测的,响应取决于预测器,并且存在由预测器的先前滞后对响应的影响引起的时间依赖性**。**

该 python 脚本将在给定时间序列数据的情况下创建窗口,以便以一种我们可以为模型提供尽可能完整的信息的方式来构建问题。

让我们看看,首先,我们有哪些数据,我们将采用什么样的治疗方法。

N = 600

t = np.arange(0, N, 1).reshape(-1,1)
t = np.array([t[i] + np.random.rand(1)/4 **for** i **in** range(len(t))])
t = np.array([t[i] - np.random.rand(1)/7 **for** i **in** range(len(t))])
t = np.array(np.round(t, 2))

x1 = np.round((np.random.random(N) * 5).reshape(-1,1), 2)
x2 = np.round((np.random.random(N) * 5).reshape(-1,1), 2)
x3 = np.round((np.random.random(N) * 5).reshape(-1,1), 2)

n = np.round((np.random.random(N) * 2).reshape(-1,1), 2)

y = np.array([((np.log(np.abs(2 + x1[t])) - x2[t-1]**2) + 0.02*x3[t-3]*np.exp(x1[t-1])) **for** t **in** range(len(t))])
y = np.round(y+n, 2)

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

然后,我们有一个函数 y,它是 3 个独立随机变量的响应,并带有一个附加噪声。此外,响应与独立变量的滞后直接相关,而不仅仅是与它们在给定点的值相关。这样我们确保了时间依赖性**,并且我们强制我们的模型能够识别这种行为。**

此外,时间戳的间隔也不均匀。通过这种方式,我们强化了这样一个想法,即我们希望我们的模型能够理解时间依赖性,因为它们不能仅仅根据观察值(行)的数量来处理序列。

我们包含了指数和对数运算符,目的是在数据中引入高度非线性

1.2 —窗户框架

这项工作的所有模型所遵循的方法是通过固定的窗口来重塑我们所拥有的信息,这些窗口将在给定的时间点从最近的过去给模型提供尽可能最完整的信息,以便实现准确的预测。此外,我们将检查将响应本身的先前值作为独立变量如何影响模型。

让我们看看我们将如何去做:

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

图中只显示了时间轴和响应。记住,在我们的例子中,还有 3 个变量负责 t 的值。

顶部的图片显示了一个选定(固定)尺寸 w 的窗口,在本例中为 4。这意味着,模型将映射包含在该窗口中的信息,预测点在 t+1 。响应的大小中有一个 r,因为我们可能想要预测过去的几个时间步长。这将是一种多对多关系。为了简单和更容易可视化,我们将使用r=1

我们现在可以看到滑动窗口的效果。通过将窗口移动一个时间步到未来,并像我们在上一步中所做的那样继续,获得模型将具有的用于找到映射函数的下一对输入-输出。

那好吧。我们如何将它应用到当前的数据集?让我们看看我们需要什么,并建立我们的助手功能。
但是首先,我们不希望时间是绝对值,我们更感兴趣的是知道哪一个是观察之间的经过时间(记住数据不是均匀分布的!).因此,我们创建一个 t,看看我们的数据。

dataset = pd.DataFrame(np.concatenate((t, x1, x2, x3, y), axis=1), 
                       columns=['t', 'x1', 'x2', 'x3', 'y'])

deltaT = np.array([(dataset.t[i + 1] - dataset.t[i]) **for** i **in** range(len(dataset)-1)])
deltaT = np.concatenate((np.array([0]), deltaT))

dataset.insert(1, '∆t', deltaT)
dataset.head(3)

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

现在我们知道了数据集的样子,让我们重新创建我们希望我们的帮助函数在一个表的方案上做什么。

对于尺寸为 4 的窗户:

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

我们的函数要做的是展平窗口中包含的所有信息,即 W 窗口中的所有值,以及我们希望进行预测的时间戳。

这样,我们可以有两个不同的方程来模拟我们的系统,这取决于我们是否包括以前的响应值作为新的预测值。

该函数必须返回的结果应该如下所示:

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

我们将能够创建l = n - (w+r) +1窗口,因为我们丢失了第一行,因为我们没有关于 Y(0) 的第一个值的先前信息。

我们提到的所有滞后就像模型的新预测器(在这个可视化中,不包括先前的值 Y ,它们将遵循与 Xi 相同的值)。然后,我们希望进行预测的时间戳(经过的时间)∏t(4),以及预测应该是什么的对应值 Y(4) 。请注意,所有第一个*∏t(0)*都被初始化为 0 ,因为我们希望将每个窗口标准化为相同的范围。

下面是为实现这一过程而创建的代码。有一个函数 WindowSlider,通过它我们可以创建对象来构造不同的窗口,改变参数。

3 —基线模型

“总是先做简单的事情。只在需要的时候运用智慧”——萨德·斯塔纳

创建窗口

w = 5
train_constructor = WindowSlider()
train_windows = train_constructor.collect_windows(trainset.iloc[:,1:], 
                                                  previous_y=**False**)

test_constructor = WindowSlider()
test_windows = test_constructor.collect_windows(testset.iloc[:,1:],
                                                previous_y=**False**)

train_constructor_y_inc = WindowSlider()
train_windows_y_inc = train_constructor_y_inc.collect_windows(trainset.iloc[:,1:], 
                                                  previous_y=**True**)

test_constructor_y_inc = WindowSlider()
test_windows_y_inc = test_constructor_y_inc.collect_windows(testset.iloc[:,1:],
                                                previous_y=**True**)

train_windows.head(3)

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

我们可以看到窗口是如何为每个预测带来的,剩余变量过去(window_length)时间步长的记录,以及∏t的累加和。

预测=当前

我们将首先从一个简单的模型开始,该模型将给出最后一个值(每个预测点的当前值)作为下一个时间戳的预测。

*# ________________ Y_pred = current Y ________________* 
bl_trainset = cp.deepcopy(trainset)
bl_testset = cp.deepcopy(testset)

bl_y = pd.DataFrame(bl_testset['y'])
bl_y_pred = bl_y.shift(periods=1)

bl_residuals = bl_y_pred - bl_y
bl_rmse = np.sqrt(np.sum(np.power(bl_residuals,2)) / len(bl_residuals))
print('RMSE = **%.2f**' % bl_rmse)
print('Time to train = **0** seconds')## RMSE = 11.28

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

结论我们已经有了一个值,可以与即将得出的结果进行比较。我们应用了给定我的当前值作为预测的简单规则。对于响应值更稳定(即平稳)的时间序列,这种方法有时比最大似然算法表现得更好。在这种情况下,数据的曲折是众所周知的,导致预测能力很差。

多元线性回归

我们的下一个方法是建立一个多元线性回归模型

*# ______________ MULTIPLE LINEAR REGRESSION ______________ #***from** **sklearn.linear_model** **import** LinearRegression
lr_model = LinearRegression()
lr_model.fit(trainset.iloc[:,:-1], trainset.iloc[:,-1])

t0 = time.time()
lr_y = testset['y'].values
lr_y_fit = lr_model.predict(trainset.iloc[:,:-1])
lr_y_pred = lr_model.predict(testset.iloc[:,:-1])
tF = time.time()

lr_residuals = lr_y_pred - lr_y
lr_rmse = np.sqrt(np.sum(np.power(lr_residuals,2)) / len(lr_residuals))
print('RMSE = **%.2f**' % lr_rmse)
print('Time to train = **%.2f** seconds' % (tF - t0))## RMSE = 8.61 
## Time to train = 0.00 seconds

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

结论

我们可以看到多元线性回归模型是如何无法捕捉到反应行为的。这可能是因为响应和独立变量之间的非线性关系。此外,正是这些变量的滞后影响了给定时间的响应。因此,对于找不到映射此关系的模型,这些值位于不同的行中。

我很想检查一下我们在解释窗户结构时所做的假设。我们说过,我们希望为每个预测点建立一个完整的信息集。因此,预测能力应该增加后,建设的窗口…让我们去吧!

带窗口的 MLR

*# ___________ MULTIPLE LINEAR REGRESSION ON WINDOWS ___________* **from** **sklearn.linear_model** **import** LinearRegression
lr_model = LinearRegression()
lr_model.fit(train_windows.iloc[:,:-1], train_windows.iloc[:,-1])

t0 = time.time()
lr_y = test_windows['y'].values
lr_y_fit = lr_model.predict(train_windows.iloc[:,:-1])
lr_y_pred = lr_model.predict(test_windows.iloc[:,:-1])
tF = time.time()

lr_residuals = lr_y_pred - lr_y
lr_rmse = np.sqrt(np.sum(np.power(lr_residuals,2)) / len(lr_residuals))
print('RMSE = **%.2f**' % lr_rmse)
print('Time to train = **%.2f** seconds' % (tF - t0))## RMSE = 3.84
## Time to train = 0.00 seconds

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

哇!这绝对是一大进步。现在我们有一个非常强大的模型要打败。似乎有了新的窗口,模型能够找到整个窗口信息和响应之间的关系。

2 —符号回归

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

符号回归是一种回归分析,它搜索数学表达式的空间,以找到最适合给定数据集的模型。

符号回归的基础是 遗传规划 ,因此,它是一种进化算法(又名遗传算法——GA)

简单总结一下算法是如何工作的,首先我们需要理解一个数学表达式可以表示为一个树形结构,如上图所示。

这样,算法将从第一代的大量树木开始,根据适应度函数来测量,在我们的例子中是 RMSE。然后,每一代中最好的个体在它们之间进行交叉**,并且应用一些突变,以包括探索和随机性。当满足停止标准时,该迭代算法结束。**

这个视频是对基因编程的精彩解释。

型号

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

结论

我们已经看到,符号回归表现出令人难以置信的好,几乎完美地符合验证数据。

令人惊讶的是,我通过只包含四个最简单的操作符(加、减、乘、除)获得了最好的准确性,缺点是需要更多的训练时间。

我鼓励你尝试模型的不同参数并改进结果!

3 —极限学习机

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

极端学习机是一种重要的涌现机器学习技术。这些技术的主要方面是它们不需要学习过程来计算模型的参数。

本质上,EML 是一个单层前馈神经网络 (SLFN) 。ELM 理论表明,该隐藏层的权重值不需要调整,因此与训练数据无关。

通用逼近属性 意味着,如果 EML 有足够的隐藏神经元和训练数据来学习所有隐藏神经元的参数,它可以以期望的精度解决任何回归问题。

EML 还受益于模型结构和正则化,这减少了随机初始化和过度拟合的负面影响。

给定一组 N 个训练样本(x, t)。具有 L 个隐藏神经元输出的 SLFN 是:

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

目标与网络的输入和输出之间的关系是:

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

隐藏的神经元分两步将输入数据转换成不同的表示。首先,通过输入层的权重和偏差将数据投影到隐藏层,然后对结果应用非线性激活函数。

实际上,ELMs 是以矩阵形式作为普通神经网络来求解的。矩阵形式如下所示:

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

这就是这个方法的重要部分。给定 T 是我们想要达到的目标,使用摩尔-彭罗斯广义逆可以找到具有最小平方误差的系统的唯一解。因此,我们可以在一个单独的操作中计算隐藏层的权重值,这将导致预测目标 t 的误差最小的解决方案

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

使用奇异值分解计算这个伪逆

这篇文章中,有一个关于 EML 如何工作的详细描述,以及一个用于 EML 的高性能工具箱的包,以及在 MATLAB 和 Python 中的实现。

模型

不考虑 y 的先前值作为特征

RMSE = 3.77
Time to train 0.12

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

考虑 y 的先前值作为特征

RMSE = 6.37
Time to train 0.00

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

结论

我们可以看到 EML 对我们的数据有很强的预测能力。此外,如果我们把以前的反应值作为预测值,结果会更糟。

毫无疑问,EML 是需要继续探索的模型,这是一个快速的实现,已经显示了它们的强大功能,它们能够通过简单的矩阵求逆和很少的运算来计算精度。

在线学习

EMLs 最大的优势在于,对于实现在线模型来说,它们在计算上非常便宜。在这篇文章中有更多关于更新和 downdate 操作的信息。

在几行中,我们可以说模型变得自适应,并且如果预测误差超过一个稳定的阈值,这个特定的数据点被合并到 SVD 中,因此模型不需要昂贵的完全再训练。这样,模型可以适应过程中可能发生的变化,并从中学习。

4 —高斯过程

这篇文章是一系列文章的一部分。首发哨车发现在这里

高斯过程是随机变量的集合,使得这些随机变量的每个有限集合都具有多元正态分布,这意味着它们的每个可能的线性组合都是正态分布的。(高斯过程可以看作多元正态分布的无限维推广)。

GP 的分布是所有那些随机变量的 联合分布 。简而言之,GPs 使用确定点之间相似性的核函数来预测一个看不见的点的值。

这个视频是预测二氧化碳水平的高斯过程的精彩快速介绍。
这本书是高斯过程的主要指南。

GP 的一个明显的优势是,我们在每次预测时都获得一个标准偏差**,这可以很容易地用来计算预测的置信区间。**

模型

一个非常简单的 CNN 游戏:

不考虑 y 的先前值作为特征

RMSE = 2.320005
Time to train 4.17

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

考虑 y 的先前值作为特征

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

如果我们不向模型显示响应的先前值,那么验证的性能要差得多。

结论

我们已经看到高斯过程是另一种具有高预测能力的奇妙方法。该模型在引入以前的响应值作为预测值时也得到更差的结果。

主要的一点是,我们可以通过调整内核的几乎无限组合来寻找随机变量的组合,它们的联合分布更好地符合我们的模型。我鼓励您尝试您自己的内核并改进这些结果!

5-卷积神经网络

这个想法是,窗口的前一个值定义为一个 画面 在给定时间过程的状态。

因此,我们对图像识别使用并行性,因为我们希望找到将“图片”映射到响应值的模式。我们在timeseries.py中包含了一个新函数WindowsToPictures()

该函数将我们一直使用的窗口作为输入,并为响应中的每个值创建一个图片,该图片包含所有列的窗口长度的所有先前值。

如果我们还记得第一章中对窗户的改造,这一次,窗户不会变平。相反,它们将被堆叠在 3D 张量的第三维中,其中每个切片将是用唯一响应值映射的图片。下面是一个例子:

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

模型

不考虑 y 的先前值作为特征

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

RMSE = 4.21

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

考虑 y 的先前值作为特征

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

RMSE = 3.59

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

结论

对于多变量时间序列预测,将过程的先前状态作为每个时间步的过程图似乎是一种合理的方法。

这种方法允许将问题构建成任何类型的问题,例如金融时间序列预测、温度/天气预测、过程变量监控…

我仍然想考虑创建窗口和图片的新方法来改善结果,但对我来说,它看起来像一个防止过度拟合的健壮模块,正如我们在峰值中看到的那样,它从来没有超过实际值。

我很想知道你想出什么来改善它!

ML 基础:贷款预测

原文:https://towardsdatascience.com/ml-basics-loan-prediction-d695ba7f31f6?source=collection_archive---------2-----------------------

一个简单问题的完整数据科学管道

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

Photo by Dmitry Demidko on Unsplash

问题是:

梦想住房金融公司处理所有房屋贷款。他们遍布所有城市、半城市和农村地区。在公司确认客户贷款资格后,客户首先申请住房贷款。

该公司希望根据填写在线申请表时提供的客户详细信息自动执行贷款资格流程(实时)。这些详细信息包括性别、婚姻状况、教育程度、受抚养人人数、收入、贷款金额、信用记录等。为了实现这一过程的自动化,他们提出了一个问题来确定客户群,即那些有资格获得贷款金额的客户,以便他们可以专门针对这些客户。

这是一个分类问题,给定关于申请的信息,我们必须预测他们是否会偿还贷款。

我们将从探索性数据分析开始,然后是预处理,最后我们将测试不同的模型,如逻辑回归和决策树。

该数据由以下行组成:

**Loan_ID :** Unique Loan ID**Gender :** Male/ Female**Married :** Applicant married (Y/N)**Dependents :** Number of dependents **Education :** Applicant Education (Graduate/ Under Graduate)**Self_Employed :** Self employed (Y/N)**ApplicantIncome :** Applicant income**CoapplicantIncome :** Coapplicant income**LoanAmount :** Loan amount in thousands of dollars**Loan_Amount_Term :** Term of loan in months**Credit_History :** credit history meets guidelines yes or no**Property_Area :** Urban/ Semi Urban/ Rural**Loan_Status :** Loan approved (Y/N) this is the target variable

探索性数据分析:

我们将使用 seaborn 进行可视化,使用 pandas 进行数据处理。可以从这里下载数据集:https://data hack . analyticsvidhya . com/contest/practice-problem-loan-prediction-iii/

我们将导入必要的库并加载数据:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
%matplotlib inline
import numpy as nptrain=pd.read_csv("train.csv")
test=pd.read_csv("test.csv")

我们可以使用 head 函数来查看顶部的几行

train.head()

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

Image by Author

我们可以看到有一些缺失的数据,我们可以使用 pandas describe 函数进一步探究这一点:

train.describe()

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

Image by Author

一些变量有缺失值,我们必须处理,而且申请人收入、共同申请人收入和贷款金额似乎也有一些异常值。我们也看到大约 84%的申请者有信用记录。因为 Credit_History 字段的平均值为 0.84,并且它有两个值(1 表示有信用记录,0 表示没有)

研究数字变量(主要是申请人收入和贷款金额)的分布是很有趣的。为此,我们将使用 seaborn 进行可视化。

sns.distplot(train.ApplicantIncome,kde=False)

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

Image by Author

分布是偏斜的,我们可以注意到相当多的异常值。

由于贷款金额有缺失值,我们不能直接绘制它。一种解决方案是删除缺失的值行,然后绘制它,我们可以使用 dropna 函数来实现

sns.distplot(train.ApplicantIncome.dropna(),kde=False)

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

Image by Author

受过良好教育的人通常应该有较高的收入,我们可以通过绘制教育水平与收入的关系来验证这一点。

sns.boxplot(x='Education',y='ApplicantIncome',data=train)

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

Image by Author

分布非常相似,但我们可以看到毕业生有更多的离群值,这意味着高收入的人最有可能受过良好的教育。

另一个有趣的变量是信用历史,为了检查它如何影响贷款状态,我们可以将其转换为二进制,然后计算信用历史每个值的平均值。接近 1 的值表示贷款成功率高

#turn loan status into binary 
modified=train
modified['Loan_Status']=train['Loan_Status'].apply(lambda x: 0 if x=="N" else 1 )
#calculate the mean
modified.groupby('Credit_History').mean()['Loan_Status']OUT : 
Credit_History
0.0    0.078652
1.0    0.795789
Name: Loan_Status, dtype: float64

有信用记录的人更有可能还贷,比例为 0.07 比 0.79。这意味着信用历史将是我们模型中的一个有影响的变量。

数据预处理:

首先要做的是处理缺失值,让我们先检查每个变量有多少个缺失值。

train.apply(lambda x: sum(x.isnull()),axis=0)
OUT:
Loan_ID               0
Gender               13
Married               3
Dependents           15
Education             0
Self_Employed        32
ApplicantIncome       0
CoapplicantIncome     0
LoanAmount           22
Loan_Amount_Term     14
Credit_History       50
Property_Area         0
Loan_Status           0
dtype: int64

对于数值,一个好的解决方案是用平均值填充缺失值,对于分类,我们可以用众数(出现频率最高的值)填充它们

#categorical
train['Gender'].fillna(train['Gender'].mode()[0], inplace=True)
train['Married'].fillna(train['Married'].mode()[0], inplace=True)
train['Dependents'].fillna(train['Dependents'].mode()[0], inplace=True)
train['Loan_Amount_Term'].fillna(train['Loan_Amount_Term'].mode()[0], inplace=True)
train['Credit_History'].fillna(train['Credit_History'].mode()[0], inplace=True)
train['Self_Employed'].fillna(train['Self_Employed'].mode()[0], inplace=True)
#numericaldf['LoanAmount'].fillna(df['LoanAmount'].mean(), inplace=True)

接下来,我们必须处理离群值,一个解决方案是删除它们,但我们也可以对它们进行对数变换,以消除它们的影响,这是我们在这里采用的方法。有些人可能收入很低,但有很强的共同收入,所以一个好主意是把他们放在一个总收入栏里。

train['LoanAmount_log']=np.log(train['LoanAmount'])
train['TotalIncome']= train['ApplicantIncome'] +train['CoapplicantIncome'] train['TotalIncome_log']=np.log(train['TotalIncome'])

绘制贷款金额日志的直方图我们可以看到它是一个正态分布!

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

Image by Author

建模:

我们将在模型中使用 sklearn,在此之前,我们需要将所有分类变量转换为数字。我们将使用 sklearn 中的 LabelEncoder 来实现这一点

from sklearn.preprocessing import LabelEncoder
category= ['Gender','Married','Dependents','Education','Self_Employed','Property_Area','Loan_Status'] 
encoder= LabelEncoder()
 for i in category:   
  train[i] = encoder.fit_transform(train[i]) 
  train.dtypesOUT:
Loan_ID               object
Gender                 int64
Married                int64
Dependents             int64
Education              int64
Self_Employed          int64
ApplicantIncome        int64
CoapplicantIncome    float64
LoanAmount           float64
Loan_Amount_Term     float64
Credit_History       float64
Property_Area          int64
Loan_Status            int64
LoanAmount_log       float64
TotalIncome          float64
TotalIncome_log      float64
dtype: object

现在我们所有的变量都变成了我们的模型可以理解的数字。

为了尝试不同的模型,我们将创建一个函数,该函数接受一个模型,对其进行拟合,并测量其准确性,这意味着在训练集上使用该模型,并在同一集上测量误差。我们将使用一种称为 Kfold cross validation 的技术,它将数据随机分为训练集和测试集,使用训练集训练模型,并用测试集验证它,它将重复 K 次,因此命名为 Kfold,并取平均误差。后一种方法可以更好地了解模型在现实生活中的表现。

#Import the models
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import KFold   #For K-fold cross validation
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn import metricsdef classification_model(model, data, predictors, outcome):
  #Fit the model:
  model.fit(data[predictors],data[outcome])

  #Make predictions on training set:
  predictions = model.predict(data[predictors])

  #Print accuracy
  accuracy = metrics.accuracy_score(predictions,data[outcome])
  print ("Accuracy : %s" % "{0:.3%}".format(accuracy))#Perform k-fold cross-validation with 5 folds
  kf = KFold(data.shape[0], n_folds=5)
  error = []
  for train, test in kf:
    # Filter training data
    train_predictors = (data[predictors].iloc[train,:])

    # The target we're using to train the algorithm.
    train_target = data[outcome].iloc[train]

    # Training the algorithm using the predictors and target.
    model.fit(train_predictors, train_target)

    #Record error from each cross-validation run
    error.append(model.score(data[predictors].iloc[test,:], data[outcome].iloc[test]))

  print ("Cross-Validation Score : %s" % "{0:.3%}".format(np.mean(error)))

现在我们可以测试不同的模型,我们将从逻辑回归开始:

outcome_var = 'Loan_Status'
model = LogisticRegression()
predictor_var = ['Credit_History','Education','Married','Self_Employed','Property_Area']
classification_model(model, train,predictor_var,outcome_var)
OUT : 
Accuracy : 80.945%
Cross-Validation Score : 80.946%

我们现在将尝试一个决策树,它应该会给我们更准确的结果

model = DecisionTreeClassifier() predictor_var = ['Credit_History','Gender','Married','Education'] classification_model(model, df,predictor_var,outcome_var)OUT:
Accuracy : 80.945%
Cross-Validation Score : 78.179%

我们在准确性上得到了相同的分数,但在交叉验证上得分更低,更复杂的模型并不总是意味着更好的分数。

最后,我们将尝试随机森林

model = RandomForestClassifier(n_estimators=100)
predictor_var = ['Gender', 'Married', 'Dependents', 'Education',
       'Self_Employed', 'Loan_Amount_Term', 'Credit_History', 'Property_Area',
        'LoanAmount_log','TotalIncome_log']
classification_model(model, train,predictor_var,outcome_var)OUT: 
Accuracy : 100.000%
Cross-Validation Score : 78.015%

该模型在准确性上给了我们满分,但在交叉验证上得分很低,这是过度拟合的一个很好的例子。该模型很难推广,因为它非常适合训练集。

对此的解决方案包括:减少预测器的数量或调整模型参数。

结论:

在本文中,我们已经讨论了数据科学的大部分内容,即 EDA、预处理和建模,并且使用了基本的分类模型,如逻辑回归、决策树和随机森林。了解更多关于这些算法背后的主干逻辑,以及处理数据采集和部署阶段将会很有趣。我们将在下一篇文章中尝试这样做。

ML 设计模式#2:检查点

原文:https://towardsdatascience.com/ml-design-pattern-2-checkpoints-e6ca25a4c5fe?source=collection_archive---------18-----------------------

在训练期间保存模型的中间权重可以提供弹性、泛化和可调性

偶尔为 ML 工程师设计的一系列设计模式。 完整列表在此。

机器学习流水线的关键步骤是训练模型(使用 Keras 中的model.fit())、评估模型(使用model.evaluate())、导出模型(使用model.save())、部署模型(使用gcloud ai-platform versions create)以及通过访问模型的 REST API 使用模型进行预测。然而,有时使用检查点对训练和评估循环进行更多的控制会更好。

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

一个检查点是一个模型的整个内部状态(它的权重,当前学习率等)的中间转储。)以便框架可以在任何需要的时候从这一点继续训练。包括检查点后,ML 管道变成:

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

换句话说,你训练一些迭代,然后评估模型,检查它,然后再拟合一些。完成后,保存模型,并像平常一样部署它。

保存中间检查点有几个好处:

  • 韧性:如果你正在进行非常长时间的训练,或者在很多机器上进行分布式训练,那么机器出现故障的可能性就会增加。如果机器出现故障,TensorFlow 可以从最后保存的检查点恢复,而不必从头开始。此行为是自动的— TensorFlow 会查找检查点并从最后一个检查点恢复。
  • 泛化:一般来说,训练时间越长,训练数据集上的损失越低。然而,在某一点上,被搁置的评估数据集上的误差可能停止减小。如果您有一个非常大的模型,并且没有进行充分的正则化,则评估数据集上的误差甚至可能开始增加。如果发生这种情况,返回并导出具有最佳验证错误的模型会很有帮助。这也被称为提前停止,因为如果您看到验证错误开始增加,您可以停止。(当然,一个更好的想法是降低模型复杂性或增加正则化,这样就不会发生这种情况)。您可以返回到最佳验证错误或提前停止的唯一方法是,如果您已经定期评估和检查模型。
  • 可调性:在一个表现良好的训练循环中,梯度下降的表现是,你可以根据你的大部分数据快速到达最佳误差的邻域,然后通过优化拐角情况慢慢收敛到最低误差。现在,假设您需要定期根据新数据重新训练模型。你通常希望强调新的数据,而不是上个月的关键案例。你最好不要从最后一个检查点开始训练,而是从蓝线标记的检查点开始:

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

要在 Keras 中检查模型,请提供一个回调:

trainds = load_dataset('taxi-train*', TRAIN_BATCH_SIZE, tf.estimator.ModeKeys.TRAIN)
evalds = load_dataset('taxi-valid*', 1000, tf.estimator.ModeKeys.EVAL).take(NUM_EVAL_EXAMPLES)steps_per_epoch = NUM_TRAIN_EXAMPLES // (TRAIN_BATCH_SIZE * NUM_EVALS)shutil.rmtree('{}/checkpoints/'.format(OUTDIR), ignore_errors=True)
checkpoint_path = '{}/checkpoints/taxi'.format(OUTDIR)
**cp_callback = tf.keras.callbacks.ModelCheckpoint(checkpoint_path, 
                                                 save_weights_only=True,
                                                 verbose=1)**history = model.fit(trainds, 
                    validation_data=evalds,
                    epochs=NUM_EVALS, 
                    steps_per_epoch=steps_per_epoch,
                    verbose=2, # 0=silent, 1=progress bar, 2=one line per epoch
                    **callbacks=[cp_callback]**)

尽情享受吧!

ML 设计模式#4:键控预测

原文:https://towardsdatascience.com/ml-design-pattern-4-keyed-predictions-a8de67d9c0f4?source=collection_archive---------25-----------------------

导出您的模型,以便它通过客户端密钥

给 ML 工程师的一系列偶然的设计模式。 完整列表在此。

通常情况下,您可以在模型将被实时提供的同一组输入上训练您的模型。然而,在许多情况下,让您的模型也传递一个客户端提供的密钥可能是有利的。

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

Client-supplied keys are essential for high-performance serving infrastructure. Photo by Florian Berger on Unsplash

服务基础设施的热点

如果您的模型被部署为 web 服务并接受单个输入,那么哪个输出对应于哪个输入是非常清楚的。如果模型接受一组输入会怎么样?您可能会认为,第一个输出实例对应于第一个输入实例,第二个输出实例对应于第二个输入实例,等等,这应该是显而易见的。但是,这种 1:1 的关系会在您的服务基础设施中产生大量热点,因为无论哪个服务器节点不幸接收到特别大的请求,都需要计算阵列中所有实例的输出。这些热点将迫使你使你的服务器比他们需要的更强大。

当然,如果接收节点可以将实例外包给一个集群,收集所有结果输出,然后将它们发送回来,效率会高得多。但是如果它这样做了,那么输出就会变得混乱。客户端如何判断哪个输出对应于哪个输入?

传递键

解决方案?让客户端提供一个与每个输入相关联的键。例如,假设您的模型使用三个输入(a、b、c)进行训练,显示为绿色,以产生输出 d,显示为黄色。让你的客户提供(k,a,b,c)给你的模型,其中 k 是一个。这个键可以简单到给输入实例编号 1、2、3 等等。然后,您的模型将返回(k,d ),因此客户端将能够计算出哪个输出实例对应于哪个输入实例。

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

Clients supply a key with each input instance, so that they can disambiguate the outputs

这与您进行批量预测时会遇到的情况完全相同,因此键在这种情况下也很有用。

为什么密钥应该由客户提供?

等等……为什么服务器不能在调用模型之前给接收到的输入分配键,然后在发送输出之前删除键呢?为什么要求客户指定一个键?

这是因为键在其他一些情况下也很有用——异步服务和评估。如今许多生产机器学习模型是神经网络,神经网络涉及矩阵乘法。如果您可以确保矩阵在特定的大小范围内和/或特定数字的倍数内,GPU 和 TPU 等硬件上的矩阵乘法会更有效。因此,累积请求(当然达到最大延迟)并分块处理传入的请求会很有帮助。因为块将由来自多个客户机的交叉请求组成,所以在这种情况下,键也需要有某种客户机标识符。

如果您正在进行持续评估,记录有关预测请求的元数据会很有帮助,这样您就可以监视性能是全面下降,还是仅在特定情况下下降。如果关键点确定了所讨论的情况,这种切片就容易多了。

因为高性能服务器将支持多个客户端,由一个集群支持,并批量处理请求以获得性能优势,所以最好提前做好计划—要求客户端为每个预测提供密钥,并要求客户端指定不会导致与其他客户端冲突的密钥。

如何在 Keras 中传递密钥

为了让您的 Keras 模型通过密钥,在导出模型时提供一个服务签名。

例如,这是获取一个模型的代码,否则该模型将接受 4 个输入(is_male、mother_age、multiplies 和 importation _ weeks ),并让它还接受一个键,该键将与模型的原始输出(婴儿体重)一起传递给输出:

# Serving function that passes through keys
[@tf](http://twitter.com/tf).function(input_signature=[{
      'is_male': tf.TensorSpec([None,], dtype=tf.string, name='is_male'),
      'mother_age': tf.TensorSpec([None,], dtype=tf.float32, name='mother_age'),
      'plurality': tf.TensorSpec([None,], dtype=tf.string, name='plurality'),
      'gestation_weeks': tf.TensorSpec([None,], dtype=tf.float32, name='gestation_weeks'),
      'key': tf.TensorSpec([None,], dtype=tf.string, name='key')
}])
def my_serve(inputs):
    feats = inputs.copy()
    key = feats.pop('key')
    output = model(feats)
    return {'key': key, 'babyweight': output}tf.saved_model.save(model, EXPORT_PATH, 
                    signatures={'serving_default': my_serve})

请注意,即使原始模型没有用服务函数保存,上面的代码也可以工作。只需使用 tf.saved_model.load()加载模型,附加一个服务函数并使用上面的代码片段!

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

Load a SavedModel, attach a non-default serving function and save it.

尽情享受吧!

ML 设计模式#5:可重复采样

原文:https://towardsdatascience.com/ml-design-pattern-5-repeatable-sampling-c0ccb2889f39?source=collection_archive---------10-----------------------

使用分布良好的列将数据分为训练/有效/测试

给 ML 工程师的一系列偶然的设计模式。 完整列表在此。

许多机器学习教程会建议您将数据随机分成训练、验证和测试数据集:

df = pd.DataFrame(...)rnd = np.random.rand(len(df))
train = df[ rnd < 0.8  ]
valid = df[ rnd >= 0.8 & rnd < 0.9 ]
test  = df[ rnd >= 0.9 ]

问题是,这在许多现实世界的情况下都失败了。原因是这些行很少是独立的。例如,如果您正在训练一个预测航班延误的模型,则同一天航班的到达延误将彼此高度相关。这叫做,是做机器学习时要避免的重要问题。

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

Use the Farm Fingerprint hashing algorithm on a well-distributed column to split your data into train/valid/test

解决方案是基于日期列拆分数据集:

SELECT
  airline,
  departure_airport,
  departure_schedule,
  arrival_airport,
  arrival_delay
FROM
  `bigquery-samples`.airline_ontime_data.flights
WHERE
  ABS(MOD(FARM_FINGERPRINT(date), 10)) < 8 -- 80% for TRAIN

除了解决最初的问题(数据泄漏),这还为您提供了可重复性:

  1. FARM_FINGERPRINT 是一种开源哈希算法,在 C++(因此:Java 或 Python)和 BigQuery SQL 中实现一致。
  2. 任何给定日期的所有航班都属于同一个分段——列车、有效或测试。这是可重复的,与随机种子无关。

选择拆分列

如何选择要拆分的列?日期列必须具有几个特征,以便我们能够将其用作拆分列:

  1. 相同日期的行往往是相关的,这也是我们希望确保相同日期的所有行都在相同的拆分中的主要原因。
  2. 日期不是模型的输入(从日期中提取的要素(如 dayofweek 或 hourofday)可以是输入,但不能使用实际输入进行分割,因为经过训练的模型不会看到 20%的可能输入值)。
  3. 必须有足够的日期值。因为您正在计算散列值并寻找相对于 10 的模,所以您至少需要 10 个唯一的散列值。当然,你拥有的独特价值观越多越好。为了安全起见,取模的分母为 3–5 倍,因此在这种情况下,您需要 50 个或更多的唯一日期。
  4. 标签必须在日期之间分布均匀。如果结果是所有的延迟都发生在 1 月 1 日和一年中的其他时间,没有延迟,这将不起作用,因为分割的数据集将是倾斜的。为了安全起见,请查看一个图表,并确保所有三个拆分都具有相似的标签分布(根据出发延误或其他输入值)。您可以使用 Kolomogorov-Smirnov 测试来实现自动化。

变体 1:单一查询

您不需要三个单独的查询来生成训练、验证和测试分割。您可以在一个查询中完成,如下所示:

CREATE OR REPLACE TABLE mydataset.mytable ASSELECT
  airline,
  departure_airport,
  departure_schedule,
  arrival_airport,
  arrival_delay,
  **CASE(ABS(MOD(FARM_FINGERPRINT(date), 10)))
      WHEN 9 THEN 'test'
      WHEN 8 THEN 'validation'
      ELSE 'training' END AS split_col**
FROM
  `bigquery-samples`.airline_ontime_data.flights

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

变体 2:随机拆分

如果你想要一个随机的分裂,但只需要可重复性呢?在这种情况下,您可以简单地散列行数据本身。这里有一个简单的方法:

SELECT
  airline,
  departure_airport,
  departure_schedule,
  arrival_airport,
  arrival_delay
FROM
  `bigquery-samples`.airline_ontime_data.flights **f**
WHERE
  ABS(MOD(FARM_FINGERPRINT(**TO_JSON_STRING(f))**, 10)) < 8

请注意,如果您有重复的行,那么它们将总是以相同的拆分结束。如果这是一个问题,请在选择查询中添加一个唯一 id 列。

ML & DL 学习路径

原文:https://towardsdatascience.com/ml-dl-learning-path-66edc2e5bd91?source=collection_archive---------10-----------------------

为 ML & DL 提供的无数在线课程&mooc 指南

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

you could be lost even before you begin

继我之前关于我从商业智能到机器学习世界的转变的帖子之后,(https://towards data science . com/from-Business-Intelligence-to-data-science-94a 1fd 866231),我想分享一下我在这条路上参加的许多在线课程的学习经验。我相信一些关于这些课程顺序的指导会对那些对机器学习感兴趣的新手有很大帮助。此外,我还会指出我在完成其中一些课程(以及没有完成其中一些课程)时遇到的困难程度。

在深入细节之前,让我分享一下我选择以下课程的指导原则——编程语言的选择。当我几年前开始学习这些课程时,机器学习社区广泛采用 R 或 Python 作为编程语言。(在某种程度上,R 在当时的竞争中领先)我甚至以“R 编程”的课程开始介绍 R。但我相信,Python 在机器学习和高级分析的可用库方面很快赶上了 R,并很快受到欢迎。此外,我认为 Python 对于数据科学家/分析师来说是一种更好的语言,因为它是一种多功能的语言,使人们能够在广泛的领域编写项目代码——机器学习、Spark 上的大数据编程、文本挖掘和自然语言处理、用于深度学习的 Pytorch 等(人们甚至可以使用 Python 框架编写 web 应用程序)。此外,不断进入行业的新框架(如 h20 等)支持 python APIs,因为它在编码社区中很受欢迎。顺便说一句,我并不是说选择 R 的人不能学到很多东西,但是了解 python 有利于轻松地过渡到相关框架。

机器学习课程

  1. 斯坦福大学的机器学习——吴恩达

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

Machine Learning by Stanford

我猜,这实际上是你开始机器学习之旅的地方,由大师(吴恩达)亲自讲授这门课程。很少有人能像他那样清楚地解释这些概念。本课程将为你提供机器学习/高级统计的一些基本技术,如线性/逻辑回归。如果我没记错的话,他用房价数据集的例子解释了这些概念。

我没有完成这门课程,因为它要求用一种叫做 octave 的语言来完成练习,我相信这种语言类似于 Matlab,我太懒了,不想为了完成这门课程而学习一种新的语言。然而,我建议这是你学习道路上的第一站。

https://www.coursera.org/learn/machine-learning

2。用 Python 掌握机器学习——杰森·布朗利**

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

Machine Learning Mastery

杰森·布朗利是该领域为数不多的专家之一(杰瑞米·霍华德是另一位),他提倡自上而下的学习方法。他本人拥有博士学位,但他强烈主张,要成为一名成功的 ML 专业人士,博士并不是必要条件,最重要的是知道如何对数据应用不同的算法以获得结果。稍后,深入研究算法的具体细节。

他的网站https://machinelearningmastery.com/是你在 python 中搜索 ML 相关内容时会遇到的第一批网址之一,并提供了一些非常有用的学习资源。他提供了关于使用 python 进行机器学习/深度学习的电子书,我通过他关于 ML 的电子书“使用 python 掌握机器学习”第一次体验了 scikit learn python 库。除了使用 scikit learn library 之外,人们还将学习在 ML 项目生命周期中要遵循的典型过程,该过程用公开可用的数据集来说明。

预期学习时间—2-4 周,如果你计划每周花几个小时的话。如果你真的迷上了它,你可以在一两个周末轻松度过。你可以把它作为你将来任何项目的参考书

3。华盛顿大学的机器学习专业。讲师——卡洛斯·盖斯特林&艾米丽·福克斯

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

Machine Learning Specialization

一旦我理解了使用 python 库在数据上应用 ML 算法——scikit learn,我对使用 python 的 ML 专门化课程的搜索将我带到了这个课程。讲师是 Carlos Guestrin 和 Emily Fox,他们共同创建了后来被亚马逊收购的 Dato,他们是华盛顿大学 CS 系的杰出教授。

这是一门由四部分组成的课程,涵盖了最大似然、回归、分类和聚类的基础知识。回归课程在华盛顿房价数据集的帮助下,介绍简单的多元线性回归的概念。分类课程将通过使用决策树的线性模型和非线性模型,介绍这类算法的核心概念。Carlos G 清晰地解释了这些概念,并主要使用直觉来发展对决策树和 glm 模型的理解。他使用公开的亚马逊消费者评论,通过分类技术来预测评论的情绪。(他的插图如此生动,以至于我仍然记得他用评论来分类情绪的长颈鹿玩具)

人们在现实生活中遇到的大多数解决方案都属于分类问题领域,例如,对客户流失、客户产品倾向、高级文本分类等建模,因此如果有帮助的话,可以只做分类课程。

预计研究时间— 各部分 8-12 周

【https://www.coursera.org/specializations/machine-learning?

4。如何赢得数据科学竞赛:向顶级 Kagglers 学习-Coursera

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

how to win DS competition?

对于渴望在竞争中获胜的 ML 工程师来说,这是一门伟大的课程。在这门课中,我发现了许多在书本和其他课程中找不到的新颖、实用的概念。我认为这是顶级卡格勒人赢得像卡格勒这样的大联盟比赛的终极实用指南。

我能从这门课中回忆起的一些有用的概念是均值因子编码,数据泄漏。我无法完成这门课程,因为我没有太多时间参加比赛,但我肯定会推荐这门课程。

https://www.coursera.org/learn/competitive-data-science

5。H2O H2O 实用机器学习— Coursera

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

h2o.ai

这是 H2O 公司提供的一门课程,该公司提供自己的开源机器学习/人工智能框架/库,用于在 Spark 等分布式计算框架上进行更快的计算。在 Garner 的魔力象限中,它被提供 ML 框架的供应商评为有远见者。鉴于这一框架目前被广泛采用,将这一框架添加到一个人的剧目中肯定会有所帮助。我也希望有更多的时间来完成这门课程,但是我强烈推荐它。

https://www.coursera.org/learn/machine-learning-h2o

深度学习课程

  1. 【深度学习专业化(Deeplearning.ai)

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

deeplearning.ai

这是一套关于深度学习的 5 门课程,从入门课程开始,涵盖所有主要类型的 DL 网络 CNN,RNN。这是吴恩达的名言“人工智能是新的电力”,在整个课程中,他借鉴了他在百度的经验。除了课程内容,他还分享了他对深度学习和人工智能领域顶级人物的采访,包括 Andrej Karpathy、Ian Goodfellow 等,标题为“深度学习的英雄”。

在入门课程中,他讲述了神经网络的基础知识,并使用 numpy 库实现了一个工作示例。后来,他使用 tensorsflow 库和 tensor 做了同样的事情。从那里,他涵盖了 CNN 的主题,并解释了图像分类的概念,对象检测,面部检测等。最后,他完成了序列模型(RNN)及其在自然语言处理领域的适用性,NLP。

尽管有使用 tensorflow 的手工示例,但由于我选择 Pyspark 作为深度学习的首选库,所以我不太关注本课程的实践练习。

预期学习时间——每门课程 8-10 周

【https://www.coursera.org/specializations/deep-learning

2。程序员实用深度学习— Fast.ai

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

fast.ai

杰瑞米·霍华德和瑞秋·托马斯共同创立了专注于深度学习培训内容的 Fast.ai 公司,fast.ai library 对 pytorch 的作用就像 Keras 对 tensorflow 的作用一样。这是一个高度优化深度学习应用程序所需代码的库。在分享课程信息之前,有必要提一下 Jeremy H 编码原则。

与 Jason Brownlee 类似,Jeremy H 来自“自上而下学习方法”学派,该学派主张在深入研究深度学习的具体细节之前实践应用深度学习的实践方面。事实上,他引用了使用自下而上的方法来学习深度学习是多么错误的例子。在开始深度学习之旅之前,一个人不可能学会统计学、数学或计算机科学博士学位以及其他任何与之相关的东西。他是排名第一的卡格勒,是为什么不需要博士学位就能在深度学习应用和研究领域取得成功的经典例子。

这个免费课程大约有 7 个部分,每个部分处理深度学习中的一个不同主题,包括 NLP,CNN,RNN 等。他是我选择 pytorch 而不是 tensorflow 作为深度学习库的原因之一,因为根据他和其他像 Andrej Karpathy 这样的伟人的说法,pytorch 使编码相对于 tensorflow 更简单。此外,根据 Jeremy H 的说法,他所尊重的每个研究人员都将 Pytorch 用于他们的研究目的。此外,它有助于它基于 python 风格,使任何 python 机器学习工程师都能很快掌握。

预计学习时间- 如果想对内容做到恰如其分,完成 1 部分大概需要 2 周时间。尽管我必须承认,我只是浏览了一些内容,因为我想快速了解内容。我当然想把它作为项目的参考来源。

https://course.fast.ai/

3。深度学习纳米学位-uda city

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

Udacity DL Nanodegree

在参加了杰瑞米·霍华德关于深度学习的课程后,我对深度学习的驱动力增强了,我对 pytorch 认证课程的搜索使我进入了这个课程。Udacity 最初在 tensorflow 中提供这门课程,但由于 pytorch 在研究社区中取得的成功,内容被转移到了 pytorch。另一个加强了我对 Pytorch 的选择的例子是,除了 Pytorch 之外,2018 年所有开源项目中第二重要的更新超过了 Tensorflow。

本课程由多名讲师提供,涵盖神经网络和深度网络的基础知识。从这里开始,它涵盖了所有重要的主题,如主要用于图像分类任务的 CNN(卷积神经网络),用于自然语言处理任务的 RNN(递归神经网络),GANS(生成对抗性神经网络),以及关于在 AWS 上部署生产规模的深度学习模型。

这门课最酷的部分是针对上述每个主题的项目。人们开始编写应用程序,可以根据狗的图像对狗的品种进行分类(CNN),自动生成电视脚本(RNN),使用一组人脸创建假的面部图像(GANs),在 AWS 上部署情感分类器模型,并实时接受评论和返回响应。

预计学习时间- 4 个月

https://in.udacity.com/course/deep-learning-nanodegree-nd 101

4。深度学习研究员 PyTorch 的深度学习实践— Udemy,新加坡国立大学

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

Udemy — Pytorch Course

当我在寻找 pytorch 培训的内容时,我偶然在 Udemy 上看到了这个课程,并开始浏览。尽管大部分概念看起来像是在重复,但我发现它有助于在 pytorch 上进行实践,并且一些概念用不同的直觉进行了解释。

例如,讲师非常直观地解释了卷积层(即滤波器)中的特征映射的概念以及它的名字的由来。在我看来,有时对同一个主题的不同观点会增强对这个概念的理解,从而加深对它的回忆。

***预期学习时间-***2-3 个月

https://www.udemy.com/practical-deep-learning-with-pytorch/

感谢你通读这篇文章,我希望你会觉得有用。我想接着在博客、youtube 视频和播客上发一篇我认为值得一听的帖子。

[ML]酒店评分的特征转换、自然语言处理和分类建模

原文:https://towardsdatascience.com/ml-feature-transformation-nlp-and-classification-modeling-on-hotel-scoring-94107353a015?source=collection_archive---------18-----------------------

结合数字特征和文本评论来建立分类模型(神经网络、Xgboost、逻辑)

0.摘要

0.1 奖励

这篇文章的目的是,在我之前的尝试中,我试图为每家酒店的点评者评分建立一个预测模型。事实证明,预测能力并不令人满意,T2 R T3(决定系数)徘徊在 T4 0.4 到 0.5 T5 之间。因此,在这项任务中,我将尝试一种不同的方法,首先将评论者的分数离散化为三个有序类别—低、中、高,然后建立一个分类模型。看看在简化分类方法下是否达到更高的预测能力。该模型应该更容易将评审者的分数分为三个级别,而不是要求得出精确的预测分数。

0.2 数据集的信息

原始数据集从 Booking.com 收集,并在[ Kaggle ]平台上共享。该数据集包含 50 万条酒店评论,收集了 14 个特征,包括数字评分和文本评论。

0.3 车型性能快速汇总

在比较了 MLP、Xgboost 和 Logistic 的模型性能后,我最终选择了 Logistic 模型。结果表明,逻辑斯蒂模型不仅比其他模型表现更好,尽管差距很小,而且在训练上也有相当好的效率。在此任务中还实施了超参数微调,但是结果显示默认配置和优化参数设置之间没有显著的性能差异。

**最终模型准确率达到 0.62,F1 评分达到 0.61。**如果我们看得更深一点,每一个阶层在人口中所占的份额分别是 35%、29%、36%,与每一个阶层的预测结果的精度分别是 68%、47%、65%相比,我们可以说 Logistic 模型的精度一般是的两倍。

0.4 报告的结构

1.数据预处理

在这一部分,原始数据将经过一系列预处理,以便成为高质量的、随时可用的数据集。它包括缺失值移除、重复移除和异常值移除的实现。

2.探索性可视化

探索性分析包括目标变量和所有特征的统计汇总。可视化数据并观察要素的分布情况。

3.特征工程—离散化

在更加熟悉手头的数据后,我将首先把目标变量分成三组——低、中、高。基于目标变量的分布来定制每个箱的范围,因此,目标变量具有不相等的箱宽度。

4.特征工程—日志转换

从分布图中可以看出,这些特征是高度倾斜的。在模型中输入时,最好使用正态分布特征。因此,大多数数字特征将具有对数变换,并且也被缩放以具有相同的单位,为稍后的建模做准备。

5.特征工程——词语标记化

这个数据集的优势在于它包含酒店客人的文本评论以及他们的评分。因此,我们实际上可以利用文本提供的信息来提高预测模型的准确性。在本节中,文本将通过词条化和标记化进行预处理。然后给单词分配根据 TF-IDF 公式计算的值。

6.相关性分析

在这一部分,我将检查特征工程是否增加了目标变量(评审者的分数)和输入特征之间的相关性。结果显示在相关矩阵中。

7.不同型号的试验

有许多模型非常适合分类案例。在这里,在我的第一次尝试中,我将比较三种模式的性能— 逻辑回归、Xgboost 决策树和神经网络。超参数设置为默认值。

8.微调造型

从上述模型中,选择性能最好的模型作为最终模型,然后通过网格搜索对模型的超参数进行微调,以进一步提高其精度。最终模型将在测试数据集上进行测试,并与默认配置的模型进行比较。

1.预处理数据

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

Columns in Dataset

检查数据集行中是否有缺失值或重复值。未完成的行和重复的行将从数据集中删除。

总共有 3268 行包含缺失值和 526 个重复行。删除这些记录后,最终数据集仍有 511,944 条记录。

对数据的样子感兴趣,可以查看链接[ Kaggle ]。

2.探索可视化

在此部分,将分别显示目标变量和所有其他数值特征。

2.1 目标变量的分布(reviewer_score)

事先,我为下面的可视化定义了一个绘图函数。

Function — Plot Histogram and Mean/Median Line

**Result:**

很明显,评论者的分数分布是左倾。有很大一部分分数分布在 9.5 分及以上。

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

Distribution of reviewer_score

2.2 特征分布

  • 平均分数
  • 评论总数
  • 附加得分次数
  • 复习 _ 总计 _ 负数 _ 字数
  • 复习总字数

以下几组网格图显示了每个数字特征的 QQ 图和直方图。 QQ-plot 增加可读性,以检查特征是否遵循正态分布。此外,在内核分布旁边增加了一行理论正态分布,用于直方图比较。下面是创建 QQ-plot 和直方图并排的定义函数。

Function — Plot QQ-Plot and Histogram Alongside

**Result:**

我们可以看出,除了平均分数和平均分数之外,几乎所有的特征都是左偏或右偏。根据显示的证据,需要对这些特征进行转换和归一化,以便在使用这些特征作为输入时建模可以达到更高的精度。

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

QQ-Plot and Histogram over Each Numerical Feature (Before Transformation)

3.特征工程—离散化

3.1 目标变量

关注目标变量— 审核人 _ 分数,将分为三组。绑定间隔如下,

  1. 低:数值< = 8.0。
  2. 中:8.0 <值< = 9.5。
  3. 高:9.5 <值< = 10.0。

Function — Bin up Variable

**Result:**

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

Bin Size and Share of Target Variable

离散化后,目标变量分成三组,每组分别为 35%、29%、36%

4.特征工程—测井转换

4.1 功能

**数值特征首先进行对数变换,然后缩放到范围(0,1)内。**通过这种方式,数值将具有带有分类特征的相同单位,稍后也将被热编码为(0,1)虚拟值。

Log Transformation and MinMax Scaling

**Result:**

从 QQ 图和直方图中,我们可以看出,即使经过变换,特征仍然不太符合正态分布,但至少它们现在不那么偏斜了。

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

QQ-Plot and Histogram over Each Numerical Feature (After Transformation)

5.特征工程——单词标记化

5.1 整理文本

在清理文本数据时,我首先将两个独立的评论(一个负面,一个正面)连接成一个,然后让它去掉空白和其他标点符号。

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

Preview of Text Review (Before Concatenated and After)

5.2 词汇化和标记化

在对文本进行分词之前,我使用分词器进一步提取每个单词的词根,从而剔除不同形式单词的派生词。

然后停止字被忽略,并通过 max_dfmin_df 指定字选择阈值。

二元语法用于标记化,这样我们可以考虑短语中相反的意思,例如非常好不好

随后选择第一个 2500 记号作为模型输入。

Lemmatize and Tokenize

**Result:**

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

Samples of Tokenized Word (Both Uni-gram and Bi-gram)

6.相关性检验

下面,我将呈现 target (reviewer_score)和所有其他特征之间的相关性,包括特征转换之前和之后。看看相关性是因为变换而被放大了还是保持不变。

Function — Plot Correlation Matrix

**Result:**

通过观察这种相关性,我得出了一些有趣的发现。

  1. 对于离散化的目标变量(reviewer_score_class ),所有特征的相关性(无论是否经过变换)似乎稍弱。比方说(平均分数与审阅者分数)的相关性为 0.36 ,而(平均分数与审阅者分数类)的相关性为 0.34
  2. 转换后的特征与目标变量有更强的相关性。实际上,当这些转换后的特征作为输入时,这对于后续的建模是一个好兆头。

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

Correlation Matrix (Target, Discretized Target, and Standardized Features)

7.不同模型的试验

︽:现在是整个任务的关键部分——建模。我将首先在三个不同的模型上进行实验,多感知机、Xgboost 和逻辑回归

这些模型将基于它们在测试数据集上的**性能(F1 分数)**进行比较。最佳模型将进行到下一部分,即超参数微调。这样我们可以进一步提高它的准确性。

7.1 MLP 模式—培训

7.2 Xgboost 模型—培训

7.3 物流模型——培训

7.4 功能重要性

在拟合 Xgboost 模型时,我们从中获得了额外的好处。Xgboost 可以为我们提供特征重要性的图表,这样我们就可以告诉我们什么样的特征对数据分类更有帮助和影响。

Plot Top Feature Importance From Xgboost Model

**Result:**

快速排序在这里,我们可以从特性重要性图(Xgboost)中看出,确定的前 5 个重要特性是,

  1. review _ total _ negative _ words _ count _ STD(数字)
  2. review _ total _ positive _ words _ count _ STD(数字)
  3. average_score_std(数字)
  4. 位置(单词)
  5. 五线谱(word)

值得注意的一点是,这里我选择同时使用单字和双字作为输入特征,似乎最重要的标记是单字,而不是一个双字排在前 20 个重要特征中。

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

Feature Importance Ranking

7.5 最终选择的模型:逻辑回归

结果是,逻辑回归在测试数据集上达到了最佳性能(F1 分数),尽管只是很小的差距。但考虑到它在如此大量的数据和特征(超过 2000 个特征)上的训练效率,这确实令人印象深刻。

因此,在下一节中,我将进一步微调逻辑回归的超参数。但总的来说,三个模型在分类数据集方面都表现得很好,准确率都在 60% 以上,相比之下随机猜测的准确率在 33% 左右,这是一个相当大的预测能力增益。下表列出了更多详细信息。

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

Table of Performance over Models

8.微调选择的模型

在这一部分,我将进一步微调逻辑模型的超参数,看看它是否能进一步提高模型的性能。

被微调(网格搜索)的超参数是 C惩罚。这两个参数都负责模型的正则化。

8.1 微调模型-培训

通过热图可视化,我们甚至可以更好地掌握不同超参数组合的整体性能。让我们看看下面的图表。

在热图中绘制网格搜索分数的函数参考了Python 机器学习入门 *,*初学者必备的 ML 书。

Function — Plot Grid Search Scores in Heat map

**Result:**

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

Score Heatmap over Parameters

选择的最佳参数是 C0.5L1

似乎一旦 C 超过 0.5,模型的性能就达到了平稳状态。精度没有提高。

此外,微调带来的好处似乎微不足道,没有显著的改善。因为右上角的大多数分数始终保持在 0.61。

8.2 网格搜索前后的性能

现在,让我们检查一下,相对于没有超参数微调,它获得了多少改进。

**Result:**

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

Score of Before and After Grid Search on Test Data

结论

在对评论者的评分进行清理、转换、训练和微调分类模型的所有努力之后。该模型在识别低分和高分方面表现很好,但在识别处于中间的 T2 分数方面表现不佳。

参见回忆,该模型实际上只能识别出所有得分中的 31% ,这意味着其余的 69% 被错误地归类为低水平或高水平。

尽管如此,如果我们看看精度,那么至少模型达到了 47% 的准确度,这意味着对于每个被标记为中等的样本,有 47%的几率是正确的。与随机猜测的结果相比, 29% 。这仍然被认为是一个重大的收获。

综合 jupyter 笔记本可以在这个链接找到:【 Github 】。如果你喜欢这篇文章,欢迎在下面留下你的反馈。让我们一起把这个模型改进得更好!!!

参考:

[1] 定制矢量器类(版本 0.20.2),sckite-learn

[2] A. Muller,用 Python 进行机器学习的介绍 (2018),github

[3] S. Hallows,探索 XGBoost 的使用及其与 Scikit 的集成-Learn (2018),kaggle

[4] S. Miller,XGBoost with Python(2018),数据科学中心

[5] J. Brownlee,Python 中 XGBoost 的特征重要性和特征选择 (2016),机器学习掌握

[6] J. Brownlee,Python 中如何用 XGBoost 保存梯度增强模型 (2016),机器学习掌握

雪花中的 ML 第 2 部分:k 均值聚类

原文:https://towardsdatascience.com/ml-in-snowflake-part-2-k-means-clustering-b943c829477?source=collection_archive---------26-----------------------

我们喜欢的理解世界的方式之一是将相似的事物组合在一起。

在设计中,我们把颜色分成不同的色调。在销售和市场营销中,客户通常被细分以适应他们的差异。在统计学中,聚类是一种广泛使用的无监督学习技术,用于帮助组织数据集。

您可能已经从我以前的故事中注意到,雪花不仅仅可以用于检索或聚合数据。它可以大规模扩展到各种与数据相关的任务,并与更传统的工作负载和平共存。

在这个故事中,我将演示在雪花中运行的 k-means 聚类,其方式可以很好地扩展到大型数据集。这是最终产品的一个快速可视化画面:

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

The large dots are the cluster centroids, small dots are the data points

什么是 k-means?

我将把解释留给专家,StatQuest 有一个很棒的视频描述了 k-means 聚类是如何工作的:

雪花实现

首先,从我们账户中的样本数据中获取一些天气数据:

It’s always good beach weather in Australia

这是一个很大的表,所以为了节省时间,我只是快速地从顶部切下一百万行并对它们进行采样。

现在,我们将创建一个表来跟踪不同表和列的 k-means 元数据:

我们稍后将介绍质心列的用途。

我们希望能够将源表中的每一行分配给一个特定的集群,因此为此添加一个额外的列。

使用存储过程将整个事情联系在一起。完整的源代码是这里,但我会一步一步地解释。

调用 k-means 存储过程如下所示:

call k_means('AUSTRALIAN_WEATHER', 'LAT,LON','CLUSTER_INDEX', 5, 10)

简单地说:对于 AUSTRALIAN_WEATHER 表中的每一行,使用 10 次迭代训练,将纬度和 LON 组合分配给 5 个分类中的一个。将最后一个集群标识符放入 CLUSTER_INDEX 列。

该存储过程执行以下操作:

  1. 从 KMEANS_CLUSTERS 表中删除“AUSTRALIAN_WEATHER”中“LAT,AUSTRALIAN”的任何现有分类元数据。
  2. 从表中随机抽取 5 行样本,并使用这些样本的纬度和 LON 值作为 5 个初始聚类的中心点(或“质心”)。
  3. 将这些初始聚类质心插入到 KMEANS_CLUSTERS 表中。此后,KMEANS_CLUSTERS 表如下所示:

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

These are just randomly chosen points, now the k-means algorithm takes over and moves them around.

4.定义了分类后,存储过程现在使用用户定义的函数(UDF)将每一行分配给最近的分类:

For some reason this preview is being truncated, see here for the full code: https://gist.github.com/jamesweakley/edd9edfa3d9cffe3134e8e0f83670844

存储过程生成 SQL,该 SQL 将此 UDF 用作 UPDATE 语句的一部分:

5.更新所有记录的分类索引后,存储过程通过获取每个分类的平均 x 和 y 值来计算新的质心:

步骤 4 和 5 循环重复,直到所有的迭代用完。每次,当记录从一个群集移动到另一个群集时,群集质心通常会稍微移动。

“你是如何做出如此酷的观想的?”

很高兴你问了。

雪花有一个特性叫做时间旅行,基本上就是说你可以在定义的时间旅行窗口内从任意时间点查询一个表。

为了利用这一点,我首先为 Tableau 提供了一个定制查询,该查询将检索我在过去一个小时内运行的每个查询的准确时间戳,我在这里更新了 AUSTRALIAN_WEATHER 表:

select END_TIME::timestamp_ntz as END_TIME
from table(information_schema.query_history_by_user(USER_NAME => CURRENT_USER(), END_TIME_RANGE_START => TIMESTAMPADD(hour,-1,CURRENT_TIMESTAMP())))
where QUERY_TEXT like 'update "AUSTRALIAN_WEATHER"%'
order by start_time asc

结果如下:

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

然后,当查询您的实际表时,您可以创建一个从该列表中取值的参数:

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

并使用“at”限定符从参数中选择时间点。

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

把这个加到你的桌面上,你就有了一个时间旅行装置!

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

ML Intro 7:本地连接和空间参数共享(又名卷积层)

原文:https://towardsdatascience.com/ml-intro-7-local-connections-and-spatial-parameter-sharing-abbreviated-convolutional-layers-b419e629d2d0?source=collection_archive---------11-----------------------

这篇文章紧随 ML intro 3ML intro 6 之后。我们假设您直观地理解了堆叠线性回归图层和交替非线性函数来构建神经网络的强大功能,并理解了自定义输出单元,如 logistic 或 softmax 函数。

这个演讲是我在哥伦比亚工程【https://bootcamp.cvn.columbia.edu/data/ 的系列演讲的一部分,旨在适用于技术和企业观众。

学习目标

在这篇文章中,我们建立了一个数学工具集,让我们处理图像、语言、视频、图形和其他 ML 问题。我们将设计自定义的数学计算层,这些计算层采用本地连接来共享本地信息和空间参数,从而共享情报。最后,我们构建卷积层,并使用一个包(在这种情况下,我们选择 PyTorch)从图像数据中学习。

在这次讲座之后,你应该能够熟练地使用图像完成任务,例如物体识别,并且能够熟练地设计数学表示,以及将适当的参数共享应用于定制的商业和学术场合。

问题设置

眼前的问题是依靠 softmax 输出单元进行多类分类。正如在 ML intro 3 中所讨论的,多类分类是将一个数据点分类为多个类型中的一个。正如在 ML intro 3 中,我们使用 softmax 输出单位来分配每种类型(或类别)的可能性。但是在这个分析中,我们使用图像作为输入数据。

不要跑去谷歌“ML for images”或“如何卷积张量流”。相反,让我们想想我们想要从我们的机器学习系统中得到什么,并适当地设计它。

代码

在这里跟随尚未解决的部分代码:https://github . com/leedtan/LeeTanData/blob/master/ML _ Intro _ 7 _ Convolutions/unsolved . ipynb

并在此查看填写的解决方案:https://github . com/leedtan/LeeTanData/blob/master/ML _ Intro _ 7 _ Convolutions/solution . ipynb

原始数据

过去,我们需要学习数据点。数据集可以像我们的第一个例子一样在 2d 网格中可视化,其中每行代表一个数据点,每列代表一个要预测的特征或目标。

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

Table Visualizing Sales

图像也是如此。每个图像可以是一行,图像的每个值可以是我们机器学习模型中的一个特征。但是,请注意,图像显然具有网格结构。图像通常被理解为像素的 2d 网格,或者是 NxN 灰度图像(每个像素只是一个值),或者是 Nx3 RGB 图像(每个像素包含 3 个值,红绿蓝)。这些可以被认为是具有 1 个过滤器或 3 个过滤器的 2d 网格,其中过滤器在该空间中被定义为数值层,图像中的每个空间区域一个值。在图像的神经网络中,我们计算由许多过滤器组成的神经网络层,而不仅仅是许多密集的节点。

让我们想象一下我们的一幅灰度图像:

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

建模图像数据

所以现在我们已经讨论了图像具有结构,但我们仍然会用我们的神经网络来处理它们。那看起来是不是…乱七八糟?

概念检查:神经网络图像数学

假设我们有一个 1024x1024 的图像,我们想计算一个同样大小的隐藏层。对于这一层,我们需要学习多少个标量乘数?

解决方案:神经网络图像数学

102410241024*1024 标量,因为每百万个输入单元都需要连接到每百万个输出单元。一个隐藏层就有十亿个学习参数。似乎有点过分,对吧?

引入本地连接

与其将所有的输入单元连接到所有的隐藏单元,不如将隐藏单元构造成一幅图像。这样,我们可以认为每个隐藏单元不需要计算关于图像的特征,它只需要计算关于其区域的特征。

我们称之为局部连接层。它是保持上一层结构的一层,每个单元只接受来自自身周围一个小的局部区域的输入。我们把它接收输入的区域的宽度和高度叫做它的“内核大小”。

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

上面,内核大小没有标注,但是你可以看到蓝色的盒子正在计算红色图像的隐藏表示。蓝框的每个位置都接收来自其周围一个小区域的输入。

你可以看到在蓝色立方体中图像的相同位置有许多球。这是因为我们创建了多个隐藏单元(就像隐藏层中的节点)来计算不同的函数。然后,蓝色立方体就像图像一样被处理,并用于进一步处理表示,就像神经网络中的层一样。

查看基本的本地连接图层,并注意生成输出图层的计算。

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

请注意,上面的输出(右边的绿色)过滤器比左边的过滤器小。

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

现在请注意,蓝色立方体和红色图像,或者蓝色正方形和绿色正方形的高度和宽度是相同的。看到绿色方块的每个位置是如何由一个 3×3 的网格计算出来的吗?还要注意,边节点是通过观察蓝色网格外的区域来计算的。这些用来保持图像大小和形状的空白单元格被称为填充。因此,5x5 内核需要在所有边上填充 2,以保持图像大小。

概念检查:神经网络本地连接

如果是在课堂上,与同伴讨论。假设我们有一个 5x5x1 的灰度图像,我们想计算一个没有填充的 3x3x2 的灰度图像。我们需要多少内核?我们将如何使用它们?使用 python 随机生成内核[-1,0,1]并计算以下输入图像的隐藏层值:

[[2,1,0,0,1],
,【0,0,0,1,0】,

,【1,2,0,1,0】,
,【0,1,0,0,1】]

解决方案:神经网络本地连接

我们需要 18 个内核,每个空间位置 2 个,总共 9 个空间位置。

下面我们随机生成 18 个内核,

乘以输入

并将负值修剪为 0

创建:

概念检查:局部连接的参数数量

利用上面的公式,我们现在需要多少个参数来从 1024×1024 灰度图像学习隐藏表示?现在让我们假设我们的隐藏层有 16 个隐藏单元,每个单元有一个 3x3 内核。

解决方案:局部连接的参数数量

我们需要大约 1024×1024 个位置来计算,对于每个位置,我们只需要学习 16×9 个参数(与全连接层的 16×1024 个参数相反)。这使我们的参数减少了 100 倍!我们现在只需要 10⁸参数,这听起来仍然很多。

包装本地连接:

本地连接的网络在图像处理之外还有很多应用。它们可以应用于处理语言数据,以及处理图形数据,例如社会或地理信息。本练习的目标是学习识别何时需要处理局部信息来计算局部表示。

引入空间参数共享

在传统的机器学习中,我们首先手工制作内核来检测图像中的对象,如蓝线或黄色斑点。

对于本地连接,我们有一个内核来处理图像的左上角。也许该特征擅长检测图像中的黄色斑点,这是全局图像分类之前的重要局部任务。如果内核对图像的左上角有用,那么检测图像的中间和底部可能也很重要。为什么不只是定义相同的一组内核,然后将它们应用到图像中所有不同的空间区域?通过这种方式,我们不会学习不同的函数来处理图像的右侧和左侧,我们学习的参数数量会急剧下降。

概念检查:空间参数共享多个参数

利用上面的公式,我们现在需要多少个参数来从 1024×1024 灰度图像学习隐藏表示?同样,我们的隐藏层有两个隐藏单元,它们有相同的 3x3 内核。

之后,使用与之前相同的图像,定义适当数量的内核,并利用参数共享计算隐藏层。

[[2,1,0,0,1],
,【0,0,0,1,0】,
,【0,0,1,2,0】,
,【1,2,0,1,0】,
,【0,1,0,0,1】]

解决方案:空间参数共享多个参数

嗯,在每个图像位置,我们仍然需要 29 个参数来学习 2 个过滤器,但现在我们在整个图像上应用同样的 2 个过滤器!现在我们只需要 29 ~ 18 个参数就可以学习整个滤波器了!

下面我们随机生成两个内核,

乘以输入

并将负值修剪为 0

创建:

创造术语卷积层

本地连接层的参数共享组合如此强大,以至于它有了自己的名字,卷积层,它构建成一个卷积网络。

参数共享及其对 2D 卷积层的应用是使 Yann Lecun(脸书人工智能研究负责人)出名的关键见解之一,也是我们日常接触到的大部分人工智能得以实现的原因之一。

对于下面的编码活动,我们可以依赖卷积层,但我也应该先向您介绍一些其他概念:

池层:

池是压缩层。假设我有一张 1024x1024x1 的灰度图像,我不想在计算上处理这么大的图像。嗯,对于每个 4x4 的立方体,我可以取最大值(或最小值,或平均值),这将把图像压缩成 256x256x1 的灰度图像。(一层所需的处理能力降低了 16 倍!)

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

相反,如你所料,取消 pooling 会在空间上扩展图像。

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

传统上,我们交替使用卷积层、ReLU 层和(最大)池层来降低数据的维度,同时为每个空间位置计算越来越多的要素

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

不过,我们不太喜欢池层不能完全区分所有的输出单元。对于最大池,只有最大值可以摆动以影响输出,因此其他值不会得到导数。因此,现在我们经常使用步长卷积进行降维。

交错盘旋;

卷积的跨度是压缩到单个输出位置的输入空间位置的数量。

例如,步幅为 2 会将图像大小减少一半,类似于 2x2 池。此外,0.5 的步幅(也称为转置卷积)会将图像的大小扩大 2 倍。

请注意下面的步幅 2 是图像形状的一半,而步幅 0.5 是图像宽度和高度的两倍。

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

In the transposed convolution images above, blank pixels are inserted between the blue pixels to show that the 2x2 or 3x3 blue image is expanded and the output green image is much wider

还要注意,网络中大于 1 或小于 1 的跨距是一种通用数学工具,用于网络层以扩展或压缩卷积信息,并且比仅应用于图像操作更通用。

这是定制机器学习数学的一个案例!如果你在 ML 方面有所进步,你会发现理解核心操作背后的这些概念是令人难以置信的强大,因此你可以用它们来为你手头的问题构建定制的操作,而不是试图将你的问题放入现成的系统中。

现在让我们在 Pytorch 中实现一个神经网络

对于这个练习,您应该使用 nn。新罕布什尔州 Conv2d。LeakyReLU 和 nn。MaxPool2d 构建神经网络层,将图像转换为窄的类似图像的表示,然后将内容重塑为单个向量,并执行标准分类。

注意:这只是真实数据集的一个样本,所以我们不能获得很高的准确性,而只是演示概念。

首先导入许多包

编码活动:读入数据标签

解决方案:读入数据标签

编码活动:将数据文本标签映射到数字

解决方案:将数据文本标签映射到数字

读入图像。如果之前读入,则从缓存加载。

以下是一些对所有 PyTorch 项目有用的函数

填写你的模型的待办事项

并通过填写这些待办事项来训练模型:

创建并训练模型,绘制学习曲线

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

Learning curve of training and validation losses (notice the model improves over time!)

想象你的第一层(或第二层!)

最后,我们很好奇我们的第一层正在学习什么类型的形状,所以我们想象下面的层权重

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

如果我们训练我们的模型更长时间,如果我们有一个更大的数据集,我们可能会学习关于线和斑点的低级特征,以及关于曲率的中级特征,这些特征可能如下所示:

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

包裹

不幸的是,我们只在一些图像的小样本上运行我们的代码,所以我们的第一层看起来不太有意义,我们的精确度也不是很好。不过没关系,我们学习了代码。如果我们有一个强大的 GPU 来运行大型数据集上的代码,这个模型可能会做得更好。

我们的例子使用了一个小数据集,并且没有训练太长时间,所以你们都可以获得舒适的学习体验,而不用等待很长的训练时间。

反正就是这样!当我们处理图像时,我们希望在计算最终预测之前使用空间参数共享来处理局部特征,因此我们可以使用简单的神经网络卷积层,但我们认识到为什么我们使用那些类型的卷积,以便我们可以在解决其他类似问题时使用其他类似的操作。

总结我们所讲的内容:

在整个会议期间,我们

  • 开始用神经网络来处理图像的像素特征。
  • 计算出的局部特征而不是密集特征(所有节点都连接到所有其他节点)以减少计算次数。
  • 了解了术语内核,它是一个占用空间很小的矩阵,可以让我们基于前一层的局部补丁计算一个新的隐藏值。内核的高度宽度很重要,因为它们决定了每个输出单元有多少单元。
  • 利用参数共享在我们图像的各个区域共享内核矩阵。
  • 为上述过程的组合创造了术语卷积
  • 了解了池化跨步,两种减少图像空间宽度的方法。
  • 利用医学图像数据集上的卷积和池实现网络。

软件工程师可选后续岗位: 重数学、重 CS 的详解(上):https://medium . com/@ leetandata/neural-network-introduction-for-Software-Engineers-1611d 382 C6 aa

数学-CS-重详解(下):https://medium . com/@ leetandata/neural-network-for-software-engineers-2-mini-batch-training-and-validation-46ee 0a 1269 a 0

Cho 教授可选数学笔记:
https://github . com/NYU-dl/Intro _ to _ ML _ Lecture _ Note/raw/master/Lecture _ Note . pdf

用于 Firebase 的 ML 工具包:特性、功能、优点和缺点

原文:https://towardsdatascience.com/ml-kit-for-firebase-features-capabilities-pros-and-cons-a182b4299cc?source=collection_archive---------11-----------------------

使用 ML Kit APIs 为您的项目带来好处的权威指南

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

Photo by PhonlamaiPhoto from iStockphoto

许多开发人员期待谷歌在他们的 I/O 会议上的创新。这并不奇怪——谷歌总是有一些令人兴奋和不寻常的东西。2019 年也不例外。Android Q,升级的智能助手,新的智能手机 Pixel 3a 和 Pixel 3a XL——更新的列表还远远不够完整。

今天,我们将重点关注面向开发人员的机器学习解决方案,如用于 Firebase 的 ML Kit。这个工具包是去年在 Google I/O 2018 上向公众展示的。今年它得到了一些更新。让我们回顾一下这个 SDK,找出所有的优缺点和关键功能。

我们希望这份权威性的指南对你有所帮助和认知。

ML 试剂盒特性

ML Kit SDK 是谷歌在 2018 年推出的一款相当新的产品。ML Kit 是一个软件开发工具包,它使开发人员能够简化机器学习模型与其移动应用程序的集成。此外,即使是初级开发人员也可以处理这项任务。

ML 套件仍然只有测试版。它可以使用 Firebase 启动。目前,有 11 个特性提供了 API。顺便说一下,2018 年 Google I/O presentation 上只有 5 个功能可用,而今天,这个数字增加了一倍。功能如下:

  • 文本识别;
  • 人脸检测;
  • 条形码扫描;
  • 图像标注;
  • 目标检测和跟踪;
  • 地标识别;
  • 语言识别;
  • 翻译;
  • 智能回复;
  • 自动模型推理;
  • 自定义模型推断。

稍后我们将更好地探索每个特性及其 API,现在我们将挑选出 ML Kit 的特殊性和优点。

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

Image by Author

清晰易用

众所周知,将基于人工智能的算法集成到移动应用程序中并不是一件容易的事情,它需要良好的技能和大量的时间。首先,开发人员需要学习一些合适的机器学习库,如 TensorFlow、Torch、PyBrain、Azure 等等。然后,应该训练一个神经网络来执行所有必要的任务。但这不是终点!而且,这仅仅是个开始。下一步是建立一个不会很重的机器学习模型,因为它应该可以在移动设备上流畅地运行。而且只有模型建好了,开发者才可能稍微放松一点。如您所见,即使对于有经验的开发人员来说,这项任务也相当复杂。

但是新的 ML Kit SDK 允许开发者让一切变得更快更容易。开发人员需要将数据传递给所需的 API,并等待 SDK 的响应。谷歌的代表保证,开发人员不需要在神经网络方面高度熟练才能实现他们的 API。开发人员需要的一切就是添加几行代码,一个新的应用程序将获得基于人工智能的酷功能。

定制模型

对于熟练的开发人员来说,这是一个合适的选择。如果现有的 ML Kit APIs 没有为开发人员提供他们需要的特性,他们可以构建自己的定制 ML 模型。在 Firebase 网站上,有一个关于开发者如何做到这一点并从他们的模型中获益的解释。

ML Kit 配合 TensorFlow 使用,这是一个面向 iOS 和 Android 操作系统的机器学习库。这个库允许开发人员将他们的模型下载到 Firebase 控制台,并与他们的产品捆绑在一起。如果构建的模型太重,开发人员可以将其留在云中,然后安排动态下载到应用程序。它使缩小应用程序成为可能,用户将更快地下载应用程序。除此之外,模型的更新也是动态的,这是一件重要的事情。这意味着模型将被更新,而整个应用程序不会被更新。

设备上和云 API

开发人员可以根据自己的需求选择基于设备的 API 或云 API。如果你不知道什么选项更好,你应该考虑所有的差异,以做出正确的选择。云 API 在谷歌云平台上处理数据,因此对象识别的执行更加精确。

然而,云模型比设备模型大。设备上的模型需要更少的空间,它们可以离线工作,数据处理更快,但这些模型不是那么准确。

更重要的是,离线和云模式都有一些特定的功能。例如,文本和地标识别、图像标记——这些功能在云中工作。设备上的 API 提供了更多功能,如文本识别、人脸检测、条形码扫描、图像标记、对象检测和跟踪、语言识别、翻译、智能回复、自动模型推断、自定义模型推断。

价格也不一样。本地 API 是免费的。Firebase ML Kit 使用的是云视界 API,所以云 API 和云视界 API 的价格是一样的。你使用 API 的次数越多,你需要支付的费用就越多,一切都很简单。比如每月最多 1000 次使用,是免费的。那么每新使用 1000 次将花费 1.50 美元。

还有,更重要的一点是隐私。根据谷歌的声明,用户的数据不会存储在云 API 中,一旦处理完成,就会被删除。

多平台

还有一个好消息——ML Kit SDK 是多平台的,即 API 可以用于 iOS 和 Android 应用程序。因此,一个新的 ML 套件可能会与苹果的 CoreML 竞争,甚至有一天会打败它。然而今天,CoreML 比 ML Kit 更有优势。例如,CoreML 使用 TensorFlow,它也接受 ONYX、Python 工具、Apache MXNet。

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

Image by Author

通过 ML Kit 获得 ML 特性的 Android 应用程序甚至可以在 Android 4.0 上运行,因此 ML 的特殊性之一是它能够在旧的 Android 版本上工作。像 Android Oreo 和 Pie 这样的新版本获得了更好的性能。云模型也使用 Android 的标准神经网络 API。

其他 Firebase 服务如何与 ML 工具包交互

ML Kit SDK 可以与其他 Firebase 服务完美配合。图片标注可以保存在云 Firestore。或者谷歌分析可以用来衡量用户参与度。此外,在远程配置和 ML 套件的帮助下,可以轻松执行定制 ML 模型的 A/B 测试。

清晰而实际的例子

Firebase service 包括面向开发人员的详细手册,其中解释了如何在他们开发的应用程序中实现主要用例。有针对 Android 和 iOS 程序员的手册,因此开发人员可以使用现有的 API 在几个小时内用新功能增强他们的应用程序。

主要特性及其功能

正如我们在开始时承诺的,我们将详细讨论每个特性,并为您提供每个特性的相关信息。

文本识别

这项功能在云中和设备上都可用。文本识别 API 使得以文本形式识别任何基于拉丁语的语言成为可能。此功能可用于自动化信用卡、收据和名片的烦人数据输入。基于云的 API 允许开发者从文档的图片中提取文本。该文本可用于文档翻译或提高可访问性。此外,具有文本识别功能的应用程序可以读取现实世界物体上的数字。例如,客户需要从商店的一张图片中提取数据。

图像标注

这个 ML 工具包 API 使得识别图像中的对象成为可能。不需要提供额外的元数据,识别是在独立的基础上实现的。这个特性在离线和云中也是可用的。借助手机应用程序中的图像标签功能,用户将能够了解图片中显示的所有内容。用户得到了该图像中所有可识别物体的列表:人、动物、建筑物等等。每个标签都有一个分数,表示 ML 模型在识别这个或另一个对象时的置信度。使用此功能,用户可以执行自动元数据生成和内容审核。

地标识别

这个 API 只在云中可用。这使得在任何图像中识别众所周知的地标成为可能。为了测试它,开发人员可以将一个图像放到这个 API 中,然后所有识别出的地标都会显示出来。除此之外,还显示了地标的地理坐标。因此,可以看到这张照片是在哪里拍摄的。这些信息可用于元数据生成,为用户提供个性化体验。

人脸检测

人脸检测 API 用于检测图像中的人脸、关键面部特征,并构建检测到的人脸的轮廓。此功能仅在脱机时使用。使用这个 API,用户可以从图片中提取人脸,并使用不同的过滤器进行编辑。此外,还可以从用户的照片中生成头像。由于 ML Kit 为用户提供了在实时模式下应用人脸检测功能的可能性,开发者可以将其集成到视频聊天或游戏中。所以如果你需要开发人脸识别 app ,你可以从 ML Kit 中调用这个 API。

条形码扫描

条形码扫描 API 允许用户使用最标准的条形码格式从条形码中读取数据。扫描在设备上执行,不需要互联网连接。在条形码的帮助下,用户可以发现编码数据中隐藏了什么。例如,它可以是联系信息或任何支付数据。这个特性对于检测编码数据非常方便。

目标检测和跟踪

这个在设备上运行的令人惊叹的 API 将帮助用户定位和跟踪图像或直播相机馈送中的对象。检测到的物体可以被分类到所选择的一般类别中。如果用户需要构建实时视觉搜索体验,对象检测和跟踪功能可能是有利的。当检测到所有对象时,用户可以将它们发送到云后端或自定义模型,如果开发人员构建了这个模型的话。

语言识别

有了这个功能一切都清楚了。语言识别 API 使得从一个文本字符串中识别语言成为可能。对于需要找出图像或文档中所写语言的翻译人员或历史学家来说,该功能尤其有用。

翻译

这个 API 和上一个一样简单。它用于多达 59 种语言的文本翻译,用户可以在语言之间切换。也就是说,可以使用可用的 59 种语言选择各种翻译组合。翻译 API 使用与谷歌翻译离线应用相同的模型。

智能回复

智能回复 API 根据整个对话生成回复建议。而且这个功能可能会建立一个完整的建议,而不仅仅是“是”或者“不是”这样的简短回答。因此,由于所有回复都是自动生成的,用户可以快速回复邮件。但是目前只支持英语,而且这个功能只能用在随意的对话中,不能用于具体的讨论。

自动视觉边缘

AutoML 模型推理功能允许开发人员训练他们的图像标签模型。设备上图像标签 API 模型经过训练,可识别多达 400 个不同的类别。但是可能有必要缩小对象的数量以识别更具体的对象。例如,用户需要区分不同品种的狗。在这里,AutoML Vision Edge 工具用于使用开发人员上传的图像来训练所需的模型。

自定义模型推理

这个特性主要针对那些没有找到合适的现成模型的熟练开发人员,他们可以使用 ML Kit 构建自己的定制模型。为此,开发人员可以使用 TensorFlow Lite 模型和 ML 工具包。

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

Image by Author

重要提示!【Firebase 的 ML 工具包仍处于测试版发布模式。并且每个 API 都可能以向后不兼容的方式改变,并且 API 不受弃用策略或 SLA 的约束。

ML 套件的缺点

不幸的是,ML Kit 中也存在一些陷阱,我们应该考虑到它们。

大号

使用定制模型是一个很好的选择,因为它们可以帮助有经验的开发人员集成他们需要的特性。但是,额外的定制模型可能会使应用程序变得非常沉重,并使应用程序变得过大。因此,一个文件的大小将远远大于一个典型的应用程序的大小。而且对开发者和用户都不会有好处。

测试版

尽管 ML Kit 在一个多小时前就已经发布了,但正如我们上面提到的,它仍然处于 beta 发布模式。而且可能对基于云的 API 有负面影响。如果开发者需要添加基于云的 API,需要直接使用云视界 API。况且任何测试版都有一些缺陷和 bug,对于一个测试版来说很正常。没有关于最终版本发布日期的消息。

如何在实际应用中使用 ML 工具包

一些公司已经成功地使用 ML 套件为用户提供了全新的卓越体验。我们将在这里列举两个例子。

丢掉它!

那是一个为那些想减肥的人设计的健身应用程序。该应用程序可以跟踪燃烧的卡路里数量。该应用的所有者 FitNow 是首批使用 ML Kit 为用户提供商业应用的公司之一。因此,该应用程序使用文本识别 API,用户可以输入他们所吃产品的信息,而无需手动输入。也就是用户把摄像头对着商品标签,输了 I!应用程序扫描并读取所有内容。除了可用的 API,该公司还创建了自己的定制模型。

涡轮税

该应用程序旨在使纳税过程更加易于管理。集成了条形码扫描 API。例如,司机可以扫描他们的驾驶证,应用程序将从这个许可证中读取所有的个人数据。因此,用户将会犯更少的错误,并且准确性水平将会提高。

包装应用程序,我们想补充一点,ML Kit 是一个强大的工具,可以构建具有机器学习功能的应用程序。此外,您可以添加您的自定义模型。此外,谷歌可能会在未来准备一些新的功能,将我们击倒。也许 ML Kit 最终会正式发布。

ML 模型——从原型到生产

原文:https://towardsdatascience.com/ml-models-prototype-to-production-6bfe47973123?source=collection_archive---------10-----------------------

你有了一个模型,现在呢?

通过机器学习的力量和深度学习的承诺,今天的会议,思想领袖和人工智能专家一直在描绘由数据驱动的商业愿景。然而,尽管在 ML 和深度学习领域有突破性的研究和不断涌现的新论文,但这种研究的大部分仍然只是研究(除了少数科技巨头)。部署 ML 模型仍然是一个巨大的挑战。作为一名数据科学家和 ML 实践者,我亲身经历了从一个可靠和准确的原型模型到一个性能良好和可扩展的生产推理服务的旅程,这通常比实际构建模型更困难。当代码和/或数据更新时,需要重新训练和部署模型。因此,自动构建和部署机器学习模型是创建生产机器学习服务的关键部分。

“生产化”ML 模型的部署和操作方面处于各种实践和学科的交叉点,如统计建模、数据科学、开发运维、ML 工程等。因此,它不属于任何单一学科的专业领域。此外,除了选择部署堆栈之外,生产流量服务模型还有其他考虑因素,如持续改进和部署的需求、安全问题、性能和延迟方面、支持快速实验和 A/B 测试的能力、允许自动扩展等。

在这篇文章中,我将描述一种使用 AWS Sagemaker 和 AWS Step 函数自动构建和部署 ML 模型的方法。

AWS SageMaker 是一个完整的机器学习(ML)工作流服务,用于开发、训练和部署模型。它与 Jupyter 笔记本电脑集成在一起,用于数据分析、探索和模型实验。它提供灵活的分布式培训选项和模型托管服务,通过 https 端点在安全和可扩展的环境中进行模型部署。SageMaker 附带了许多预定义的算法。您还可以通过提供 Docker 映像、训练模型的训练映像和部署到 REST 端点的推理映像来创建自己的算法。

Docker 到底是什么?

Docker 是一个基于 Linux 容器的开源项目。它是一个工具,旨在使使用容器创建、部署和运行应用程序变得更加容易。容器允许你打包一个应用程序及其所有的库和其他依赖项,并把它们打包成一个包。码头集装箱是非常轻便和快速的。

码头工人的基本概念

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

Docker Build Process

Docker 文件是您编写构建 Docker 映像的指令的地方。这些指令可以是安装软件包、设置环境变量、路径、暴露网络端口等。

一旦建立了 docker 文件,就可以使用“docker build”命令来构建映像。Docker 图像是只读模板,您可以根据 docker 文件中的一组指令来构建。映像定义了您希望打包的应用程序及其依赖项的外观,以及启动时要运行的流程。

这些只读模板是 Docker 容器的构建块。您可以使用“docker run”命令运行映像并创建一个容器。Docker 容器是 Docker 映像的运行实例。这些基本上是从 Docker 映像创建的现成应用程序。

Docker 图像存储在 Docker 注册表中。它可以是用户的本地存储库,也可以是 Docker Hub 这样的公共存储库,它允许多个用户协作构建应用程序。

SageMaker 模型部署架构概述

使用 SageMaker 部署模型涉及到以下步骤

  1. 构建用于训练的 docker 映像,并上传到 ECR(弹性容器注册表)。该映像包含您的训练代码和依赖项。
  2. 创建并启动 SageMaker 培训作业(SageMaker CreateTrainingJob API
  3. 为服务(推理)构建 docker 映像并上传到 ECR(弹性容器注册中心)。该映像包含您的推理代码和依赖项。
  4. 创建 SageMaker 模型( SageMaker CreateModel API
  5. 创建/更新托管模型的 SageMaker 端点(SageMaker create endpoint API)

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

Sagemaker Architecture BYOM (Bring Your Own Model) Approach

SageMaker 算法被打包成 Docker 图像。这为您提供了使用 SageMaker 的几乎任何算法代码的灵活性,而不管实现语言、依赖的库、框架等等。可以使用自己定制的训练算法和自己的推理代码。您将算法和推理代码打包在 Docker 映像中,并使用这些映像来训练一个模型,并使用 Amazon SageMaker 部署它。

培训—当 Sagemaker 创建培训作业时,它会启动 ML compute 实例,运行在 ML compute 实例中创建 docker 容器的 train docker 映像,将来自 S3 位置的培训数据注入容器,并使用培训代码和培训数据集来培训模型。它将生成的模型工件和其他输出保存在您为此指定的 S3 存储桶中。

部署——对于模型部署,Sagemaker 首先使用存储模型工件的 S3 路径和包含推理代码的图像的 Docker 注册路径来创建模型资源。然后,它使用端点配置创建一个 HTTPS 端点,该端点配置指定生产模型变量和要部署到的 ML 计算实例。

客户端应用程序向 Sagemaker HTTPS 端点发送请求,以从部署的模型中获取推论。

一个完整的模型部署框架

让我们看看如何使用 SageMaker 和一系列其他不同的 AWS 服务来设计端到端的模型部署管道,并将 AWS Step 函数用作主要的协调器和工作流编排器。

AWS 步骤功能 用于工作流编排。使用 Step 函数,您可以设计和运行将多个 AWS 服务(如 AWS Lambda、Amazon ECS 等)连接在一起的工作流。Step 函数还将您的工作流转换为状态机图,以便于可视化表示和监控。

以下是服务如何协同工作的高级概述-

阶跃函数就像一个状态机,从初始状态开始,使用 AWS Lambda 函数转换状态,根据需要改变、分支或循环状态。 AWS Lambda 功能用于启动模型训练、图像构建、检查训练和构建状态等。 AWS CodeBuild 用于构建 docker 映像,并将它们推送到一个弹性容器注册表 (ECR)存储库。 AWS Systems Manager 参数存储库为我们的培训和部署工作提供了一个共享的集中式参数存储库。AWS Lambda 函数从该存储中查询参数。 AWS 简单通知服务 (SNS)用于启动构建和通知。 AWS 简单存储服务 (S3)桶用于保存模型训练数据和训练好的模型工件。当代码发生变化时,Github/CodeCommit 存储库发布到 SNS 主题。当构建开始、完成和失败时,通知也会发布到 SNS 主题。

下图显示了这些服务如何协同工作。

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

Automatic Build and Deployment with AWS Sagemaker and Step Functions Architecture

总之,SageMaker 和 Step 函数与其他 AWS 服务相结合,可以提供一个健壮的、功能丰富的端到端部署框架——持续地训练、构建和部署 ML 模型。

ML Study Jam — Vision API

原文:https://towardsdatascience.com/ml-study-jam-detect-labels-faces-and-landmarks-in-images-with-the-cloud-vision-api-a80e89feb66f?source=collection_archive---------21-----------------------

使用云视觉 API 检测图像中的标签、人脸和地标

AES, a Fortune 500 global power company, is using drones and AutoML Vision to accelerate a safer, greener energy future. Video from Vision AI

基本上,谷歌视觉人工智能可以分为两类,AutoML VisionVision API。AutoML Vision 是指通过上传图片来训练你自己定制的机器学习模型,用 AutoML Vision 来训练模型。至于 Vision API,是 Google 提供的一个 API,带有预先训练好的模型,可以很容易地用在你正在构建的产品上。今天我们要介绍的是Vision API

在我们开始之前,我想给你一个关于什么是云视觉 API 的基本概念?它能做什么?

Google Cloud 的 Vision API 通过 REST 和 RPC APIs 提供了强大的预训练机器学习模型。为图像分配标签,并快速将它们分类到数百万个预定义的类别中。检测物体和人脸,阅读印刷和手写文本,并将有价值的元数据构建到您的图像目录中。

谷歌云视觉——拖放

点击上面的链接,亲自尝试一下 cloud Vision API。您可以看到它可以检测到什么,以及它将通过该网站返回什么样的 JSON 响应。

我们将把一些图像放入谷歌云视觉网站,看看会发生什么。

表面

面部检测检测图像中的多张面部以及相关的关键面部属性,如情绪状态或*wearing headwear*不支持面部识别。

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

The movie poster is from Marvel Studio

API 将为您提供面部的标志(演员面部的绿色圆点和区域),每个圆点对应于 JSON 响应:

"landmarkingConfidence": 0.5006456,
      "landmarks": [
        {
          "position": {
            "x": 402.5942,
            "y": 91.294495,
            "z": -0.00084796624
          },
          "type": "LEFT_EYE"
        },
        ...
       ]

此外,它还会分析他们的情绪状态,如喜悦、悲伤、愤怒等。

"faceAnnotations": [
    {
      "angerLikelihood": "VERY_UNLIKELY",
      "blurredLikelihood": "VERY_UNLIKELY",
      "boundingPoly": {
        "vertices": [
          {
            "x": 354,
            "y": 85
          },
          {
            "x": 469,
            "y": 85
          },
          {
            "x": 469,
            "y": 219
          },
          {
            "x": 354,
            "y": 219
          }
        ]
      },
      "detectionConfidence": 0.83385795,
      "fdBoundingPoly": {
        "vertices": [
          {
            "x": 380,
            "y": 116
          },
          {
            "x": 466,
            "y": 116
          },
          {
            "x": 466,
            "y": 202
          },
          {
            "x": 380,
            "y": 202
          }
        ]
      },
      "headwearLikelihood": "VERY_UNLIKELY",
      "joyLikelihood": "VERY_UNLIKELY",
      ...
]

目标

物体定位可以检测并提取一幅图像中的多个物体。

对象定位识别图像中的多个对象,并为图像中的每个对象提供一个LocalizedObjectAnnotation

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

标签

标签检测检测图像中广泛的类别,从运输方式到动物。

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

网页检测检测网页对图片的引用。

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

文本

文本检测执行光学字符识别。它检测并提取图像中的文本,支持多种语言。它还具有自动语言识别功能。

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

我试图把多种语言放在一个图像中。似乎还有改进的余地。

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

性能

图像属性功能检测图像的一般属性,例如主色。

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

裁剪提示

裁剪提示为图像上的裁剪区域建议顶点。

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

JSON 的响应如下所示。

"cropHintsAnnotation": {
    "cropHints": [
      {
        "boundingPoly": {
          "vertices": [
            {
              "x": 63
            },
            {
              "x": 498
            },
            {
              "x": 498,
              "y": 535
            },
            {
              "x": 63,
              "y": 535
            }
          ]
        },
        "confidence": 1,
        "importanceFraction": 0.41
      },
      ...
   ],      
}

另一个例子,我们可以看到原始图像是一个猫的形象。

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

这是裁剪后的图像。

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

个人认为,这将是一个很好的工具来裁剪图像,而不削减最重要的东西,如脸。但是,如果图像包含许多像复仇者联盟样本一样的脸,它就不能在裁剪后的图像中包含所有的脸。

安全搜索

安全搜索检测检测图像中的色情内容或暴力内容。此功能使用五个类别(“成人”、“欺骗”、“医疗”、“暴力”和“色情”),并返回每个类别出现在给定图像中的可能性。有关这些字段的详细信息,请参见安全搜索注释页面。

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

这可能是一个过滤互联网或 UGC(用户生成内容)上任何不适当内容的好办法。最好的例子就是Google search,它会在你谷歌的时候自动过滤不良内容。

陆标

地标检测检测图像中常见的自然和人造结构。

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

Picture from Travel Explore Discovery

API 不仅响应景点名称,还响应位置的纬度和液化天然气。

"landmarkAnnotations": [
    {
      "boundingPoly": {
        "vertices": [
          {
            "x": 418,
            "y": 32
          },
          {
            "x": 816,
            "y": 32
          },
          {
            "x": 816,
            "y": 559
          },
          {
            "x": 418,
            "y": 559
          }
        ]
      },
      "description": "Notre Dame de Paris",
      "locations": [
        {
          "latLng": {
            "latitude": 48.853096,
            "longitude": 2.349113
          }
        }
      ],
      "mid": "/m/0gtxh",
      "score": 0.85791147
    }
  ]

标志

标识检测检测图像中流行的产品标识。

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

Picture from Line Corporation

好了,现在我们都知道 Vision API 可以实现什么了。接下来,我们将通过 ML Study Jam 了解如何创建一个 Vision API 请求并使用curl调用 API。

激活谷歌云外壳

  1. 在 GCP 控制台的右上角工具栏上,单击“打开云壳”按钮。

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

2.在打开的对话框中,点击启动云壳:

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

3.稍等片刻,以进行资源调配并连接到环境。然后你会看到这个项目被设置为你的项目 ID。

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

创建 API 密钥

因为我们将使用curl向 Vision API 发送一个带有 API 键的请求,所以我们需要创建一个 API 键,并将其作为环境变量导出。

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

将密钥导出为环境变量

复制您的 API 密钥,并在 shell 中执行以下命令。

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

export API_KEY=<YOUR_API_KEY>

将图像上传到云存储桶

有两种方式将图像发送到视觉 API 进行图像检测:通过向 API 发送 base64 编码的图像字符串,或者向其传递存储在 Google 云存储中的文件的 URL。我们将使用云存储 URL。

要在 Google 云存储上保存图像,我们需要先创建一个 bucket。

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

上传一张图片到你的桶里

创建 bucket 后,向它上传一个图像。然后将图像的权限修改为allUsers,以便 Vision API 可以访问它。

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

创建您的 Vision API 请求

创建一个request.json文件,作为发送给 Vision API 的请求。gcsImageUri应该被替换为我们在上一步中刚刚创建的图片 URL。并且我们可以将我们想要检测的所有类型添加到features中,包括FACE_DETECTIONLANDMARK_DETECTIONOBJECT_LOCALIZATIONWEB_DETECTIONDOCUMENT_TEXT_DETECTIONIMAGE_PROPERTIESSAFE_SEARCH_DETECTIONCROP_HINTS

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

将请求发送到 Vision API

最后,用curl调用 Vision API:

curl -s -X POST -H “Content-Type: application/json” --data-binary @request.json [https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}](https://vision.googleapis.com/v1/images:annotate?key=${API_KEY})

回应应该是这样的:

{
  "labelAnnotations": [
    {
      "mid": "/m/02wbm",
      "description": "Food",
      "score": 94
    },
    {
      "mid": "/m/0ggjl84",
      "description": "Baked Goods",
      "score": 90
    },
    {
      "mid": "/m/02q08p0",
      "description": "Dish",
      "score": 85
    },
    {
      "mid": "/m/0270h",
      "description": "Dessert",
      "score": 83
    },
    {
      "mid": "/m/0bp3f6m",
      "description": "Fried Food",
      "score": 75
    },
    {
      "mid": "/m/01wydv",
      "description": "Beignet",
      "score": 67
    },
    {
      "mid": "/m/0pqdc",
      "description": "Hors D Oeuvre",
      "score": 54
    }
  ]
}

description带有物品的名称。

score,一个 0 - 100 的数字,表示描述与图像中的内容匹配的可信度。

mid映射到谷歌知识图中项目的mid的值。当调用知识图 API 时,您可以使用mid来获取关于该项目的更多信息。

参考

官网视觉 AI
官网所有样品

定价

这是公司或开发商可能考虑的另一个主要问题。我把定价图贴在这里供参考。

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

柴犬、秋田,傻傻分不清楚

这是一个鉴别柴犬和秋田犬的网站。这是一个如何用 AutoML 模型训练你的模型并在产品上实现的例子。这只是为了好玩,享受它。

[## 柴犬、秋田傻傻分不清楚?一起來 AutoML 訓練機器學習辨識 | GCP 專門家

用 GCP 只要三步驟,您也可以輕鬆訓練 AutoML model,快找 GCP 專門家。

gcp .专家](https://gcp.expert/automl/)

总之,Vision API 确实是一个很好的工具,可以帮助我们简单地处理图像分析。对于许多开发者来说,它提供了一个进入专业领域的入口。图像分析不再是一件非常困难的事情。Vision API 可能有很多实现,包括娱乐、教育、医学等等。真的很期待以后的创意产品!

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

Picture from Returnjet.com

新手和专业人士的 MLaaS 平台:选择你需要的

原文:https://towardsdatascience.com/mlaas-platforms-for-novices-and-pros-opt-the-one-you-need-6b64c377a89c?source=collection_archive---------28-----------------------

了解 MLaaS 平台和采用机器学习的原因

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

机器学习是相当新的技术,尽管第一个计算机学习软件是在 20 世纪 50 年代创建的。因此,机器学习技术今天被集成到许多类型的软件中,这些软件将每个软件变成一个智能项目,可以帮助人们解决许多日常事务。

像谷歌和微软这样的大公司不想落后,他们建立了自己的机器学习平台,使开发者能够毫无困难地将机器学习功能添加到他们的项目中。

我们在本文中的目标是挑出市场上可用的所有主要的机器学习即服务平台。此外,我们将向您展示集成人工智能的项目示例。

关于 MLaaS 的更多信息

我们认为您听说过 BaaS(后端即服务)概念或 SaaS(软件即服务)?MLaaS 还处理基础设施和所有相关问题。因此,开发人员不需要花时间处理模型训练、评估,并且基于云的预测已经配置好了。

如果您想知道基于云的预测如何为您的内部基础架构带来结果。可以使用 REST APIs 将预测和基础设施结合起来。

事实上,云机器学习服务可以用于创建第一个功能模型,这将帮助您基于预测获得有用的见解。此外,在这种情况下,大的开发团队是不必要的。

真正神奇强大的 MlaaS 平台代表是亚马逊 MLaaS,谷歌的云机器学习引擎,微软的 Azure ML。使用这些 MLaaS 平台不需要在机器学习方面有很高的技能。

软件需要机器学习的原因(反之亦然)

在我们继续描述顶级 MLaaS 平台之前,我们希望您就机器学习实现的必要性做出决定。为了帮助您考虑所有的利弊,我们将涵盖您应该在软件中添加机器学习的所有原因,以及何时最好放弃这一想法。

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

Image by Author

当机器学习整合的时候到了

下面这些提示将是人工智能集成的一个起点。

您的软件使用大数据。简而言之,如果您的软件需要处理和分析大量数据,您可能会考虑机器学习算法集成。例如,你创建一个电子商务网站或移动应用程序,人工智能可以用来为用户提供个性化体验、特别推荐、为他们提供他们真正需要的产品等等。或者,如果您在医疗保健行业工作,并且您的软件将执行医疗保健相关的任务,基于 ML 的预测分析将会非常及时。

你的软件需要一个永久的改进。机器学习技术的优势在哪里?从名字就很清楚——机器学习就是不断学习新的信息,自我完善。因此,你的软件获得了永久的经验,并且变得更加强大。

因此,如果你有金融、医疗保健或电子商务软件——它应该改善用户的体验,给他们新的机会,并且也为欺诈预防保护数据。AI 还有助于解决安全问题。见下一点。

你的软件应该足够安全。机器学习技术应用新的安全工具来保护你的应用程序,保护所有用户的个人数据。基于 ML 的软件能够学习新的威胁,并创建额外的保护层,以确保您的软件足够安全。

此外,还可以及时检测到任何欺诈活动并加以抑制。

而当你最好放弃机器学习整合的想法

不幸的是,尽管机器学习有很多优点,但在某些情况下,它可能会成为负担而不是发现。看看这些案子。

你的 app 相当小。只有当你的软件包含太多数据时,机器学习才会有用。它需要大量的数据来学习。但如果你的应用很小,机器学习就无法正常工作,弊大于利。因此,您的应用程序可能会提交错误的推荐、不当的信息等等。

你的资源有限。机器学习集成不是一件便宜的事情,在进一步的改进过程中,你也需要花钱。此外,处理大量数据需要强大的计算机能力,因此这一领域也需要额外的投资。专家需要时间来训练数据集,所以他们工作得越多,你需要花的钱就越多。

你的软件有简单的功能。举例来说,如果你用当地地铁的时间表或管理购物的应用程序创建一个应用程序,它根本不需要机器学习。这种应用程序执行非常简单的任务,它们不需要永久的改进和数据学习。

我们希望这些建议能帮助你了解你需要什么,不需要什么。如果你知道你的应用将从机器学习中受益,那么我们就进入顶级 MLaaS 平台的列表。

顶级机器学习平台

嗯,少说话。现在,我们将讨论所有提到的平台,它们有什么功能,我们还将添加一些现有的平台。

云机器学习引擎

定价:非常多样化,你可以在平台的官方页面找到你需要的方案。

CMLE 是一项帮助开发者和数据科学家创建和运行强大的机器学习模型的服务。CLME 有培训和预测服务,专家可以一起使用或单独使用。它已经被许多公司用于卫星图像中的云识别、食品安全保证、自动回复客户电子邮件等等。AI 平台训练和 AI 平台预测用于相应的训练和预测服务。

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

Image by Author

CMLE 有许多如下的特征:

  • 便携式型号。使用 ML 支持的框架训练的模型可以下载用于本地执行或移动集成。
  • 自定义容器支持。你可以使用任何运行在 CMLE 上的 ML 框架,Docker 容器是实现这个的必要工具。
  • 分布式训练。如果数据和模型对于一台机器来说太大而无法正常工作,CMLE 就推出一个在多台机器上运行的环境。
  • HyperTune 。它使自动调整深度学习超参数成为可能,并更快地达到所需的结果。

当然,这只是 Cloud ML Engine 提供的几个有用的特性,但如果需要,您可以更深入地研究它。

Azure 机器学习

价格:免费/每月 9.99 美元

Azure ML 提供了一个可视化界面,帮助构建和训练模型,选择要应用的算法,等等。这个平台与 ML Studio 框架一起工作,使得构建模块化解决方案成为可能。

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

Image by Author

这是一个基于云的平台,面向新手和熟练的专家,它的许多操作可以手动实现。此外,Azure Machine 有详细的文档,它还提供了数百个存储在 Cortana Intelligence Gallery 中的 ML 解决方案。任何其他开发人员都可以自行决定使用这些解决方案。

亚马逊机器学习

定价:0.42 美元/小时计算,0.10 美元/1000 个预测

这项服务是最受欢迎和领先的 ML 服务之一。这对许多项目来说是非常好的,尤其是如果这个项目到了最后期限,但并不是所有的事情都实现了。

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

Image by Author

然而,与此同时,在自动化过程中有一些限制,所以它不是一个非常灵活的机器学习工具。

亚马逊机器学习可用于检测欺诈、文档分类和许多其他任务。此外,各种开发人员可能会找到适合他们编程语言的 SDK,如 Ruby、Java 等。NET 等语言都有。

BigML

定价:从免费到每月 10,000 美元

创建这个平台的同名公司试图使 BigML 成为每个客户的有用平台,提供各种价格计划和详细的文档以及灵活的集成 API。

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

Image by Author

大数据解决方案、客户细分、购物篮分析、预测分析和其他任务的完美选择。此外,BigML 为开发人员提供了现成的脚本,尽管这个平台与上面提到的平台相比并不大。

预测

定价:开源

对于那些想要控制机器学习部署的人来说,这是一个完美的解决方案。允许开发者创建预测引擎的开源服务器。

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

Image by Author

这个服务器提供了很多编程语言的 SDK,比如 Python,PHP,Ruby,Java。此外,GitHub 上的一个大型社区也为 Swift、Node.js 等语言创建了 SDK。

IBM 沃森

价格:从免费到 1070.00 美元/实例,
,0.43 美元/1000 个预测,
,0.43 美元/能力单位小时

IBM Watson 在概念上并不是一个 ML 平台。IBM MlaaS 目前只提供数据可视化和数据值相互交互的描述。这项服务提供了自动预测分析和认知能力,对于不精通计算机科学的用户来说,这是一个很好的选择。

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

Image by Author

然而,数据科学家也可以与开发人员一起使用 IBM Watson,将人工智能集成到软件中,并简化部署过程。

但是 IBM Watson 每年都在发展,其功能的数量将呈指数级增长。

张量流

价格:开源

这不是 MlaaS 平台,但它是谷歌的一个非常有用的机器学习库,它有大量必要的机器学习工具。该库缺乏可视化界面,它是为希望更深入地了解数据科学的开发人员而构建的。张量流集成到我们上面提到的云机器学习引擎中,但它也可以与许多其他服务提供商集成。

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

Image by Author

数据存储解决方案—寻找最合适的解决方案

为数据收集及其处理寻找存储已不再是问题。为了实现这一点,将需要 NoSQL 和 SQL 数据库。除了数据库,还有必要使用像 Cassandra、Redfish、亚马逊 S3 这样的辅助解决方案。

如果你计划使用机器学习平台,这个挑战就变得简单了。您可以使用一个服务提供商来实现机器学习和数据存储。因此,它将帮助您避免数据源配置的麻烦。如果您认为这不是您的首选,请注意,一些 MLaaS 平台支持与第三方数据存储的集成。

应用机器学习算法的应用程序示例

让我们回顾几个已经使用机器学习功能并使用户体验更加明亮的应用程序。

Snapchat

Snapchat 用户喜欢用该应用进行有趣和搞笑的实验,因此机器学习使之成为可能。Snapchat 在人工智能的基础上有很多特殊的滤镜。滤镜用于跟踪人脸,添加帽子、眼镜等配件,用小胡子、胡须、眼睛颜色等改变人脸。此外,最近的过滤器甚至允许用户改变性别,这也是一个有趣的功能。

该公司在收购乌克兰专注于计算机视觉的 Looksery 公司时,已经开始将机器学习算法集成到 Snapchat 中。

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

Image by Author

我们人类可以毫不费力地识别人脸,而机器需要很长时间来学习这种能力。因此,专家们花了很多时间让算法变得足够智能,以识别面孔和面部特征。

照片墙

这个流行的照片和视频社交网络也想用人工智能的力量吸引用户,所以它有特殊的算法来执行特定的任务。首先,Instagram 应用程序用户通过机器学习来阻止垃圾邮件和攻击性评论,但如果用户不需要,可以关闭这一功能。还有,Instagram 使用 AI 来删除虚假的关注者,以避免大量带有机器人的虚假个人资料。

从而,Instagram 与虚假的喜欢和用户作战,为真实用户提供高质量的沉浸式体验。

推特

这种人们分享新闻的社交网络服务也认为机器学习是他们所需要的。当用户点击“首先向我展示最好的推文”按钮时,他们会看到开发团队为用户提供热门推文而创建的算法提要。这项技术使得基于一些指标评估推文成为可能。智能算法可能会理解客户的偏好,并显示他们特别感兴趣的内容。

此外,Twitter 使用机器学习来打击钓鱼,它删除不适当的和攻击性的内容。

除此之外,机器学习算法可能会裁剪图像中最有趣的部分进行预览。

拼趣

这个图片托管的社交网络服务也应该知道如何为用户提供正确的内容。这就是机器学习算法有所帮助并变得有用的地方。Pinterest 收购了 Kosei 公司,该公司专门开发用于增强内容搜索和更好推荐的 ML 算法。

因此,Pinterest ML 算法可以检测垃圾邮件,为用户提供个性化内容,并且还可以用于广告货币化。

销售力量

你认为社交网络是唯一应用机器学习的应用吗?你错了。Salesforce CRM 使用机器学习算法来分析客户、他们的偏好和行为,它帮助公司建立更好的客户关系,并为他们提供高质量的体验。

这就是我们想告诉你的。MlaaS 平台的列表相当大,您可以选择一个您感兴趣的平台,它可以增强您的应用程序并对其进行修改。如果你不擅长数据科学,有些平台不需要这些技能。你只需要决定你的软件中是否需要机器学习,然后你就会成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值