数据STUDIO

线性优化模型简介

Image

Image

优化

优化提供了一种最小化损失函数的方法。优化旨在减少训练误差,而深度学习优化则关注于找到合适的模型。深度学习优化的另一个目标是最小化泛化误差。在本文中,我们将讨论线性模型。

回归线性模型

线性模型是机器学习中最简单的模型之一,但线性模型是深度神经网络的基石。监督学习问题主要分为两类:回归和分类。反过来,目标值就是实际值。例如,如果我们有职位描述数据,并想预测这份工作的薪水,那么这就是一个回归任务,因为薪水是一个实际值。或者,如果我们有药品库存数据,其中有需求(x 1)和使用量(x 2)变量,而要预测的变量(因变量)是供应量(y)。这也是回归可以解决的问题,因为库存变量是一个实际值。

而如果目标数量有限,则属于分类任务。例如,如果我们想识别图像中的某个物体,比如说,我们想知道图片中是否有摩托车、汽车、栅栏、建筑物或自行车。这就是一个物体识别任务。由于物体数量有限,分类可以解决这个问题。或者,例如,我们正在分析一篇文章,想知道它的主题是机器学习、计算机视觉还是深度学习,那么这也是一个分类任务,因为目标值的数量同样有限。

矢量符号:

Image

对于样本 X:

Image

这个线性模型是权重向量和特征向量X的点积。如果我们想将模型应用于整个训练集,那么我们有一个矩阵X,它有L行和d列。这个乘法产生一个大小为L的向量,每个分量都预测线性模型。那么如何测量模型误差,或者了解训练集或测试集的质量呢?

均方误差:

Image

均方误差是回归分析中损失函数的常用选择之一。例如,一个特定的例子。计算此示例的模型预测值是 w 与 xi 的乘积,然后从目标值 (yi ) 中减去该乘积。然后,计算目标值与预测值的偏差,取其平方,并在所有训练集上对偏差的平方取平均值。它衡量我们的模型与数据的拟合程度。均方误差越小,模型提供的数据越好。均方误差以矢量形式表示。

配件型号:

Image

机器学习的本质是优化损失,从而找到最佳模型。因此,我们最后一个函数通过最小化损失来衡量模型与数据的拟合程度。因此,目标是找到一组参数 w,使训练集的均方误差达到最小。

精确解:

Image

如果我们求导并求解方程,就能得到优化问题的解析解。但这涉及到求逆和矩阵运算,运算过程极其复杂,而且如果特征数量较多(比如超过 100 个),求逆矩阵的难度也会非常大。线性回归模型虽然简单易懂,但对于深度神经网络来说却非常有价值。

分类的线性模型

如何将线性方法应用于分类问题?逻辑回归。逻辑回归是一种回归模型,可以用于从最简单的分类,即二元分类(目标只有两个值,例如-1和-1)、正/负、是/否、成功/失败,甚至多个分类问题类别(例如强烈同意、同意、强烈不同意和不同意)的分类问题。

让我们首先使用 Python 编程解决合成数据的二维分类问题,以便更好地理解算法的工作原理。

import numpy as np
from sklearn.datasets import make_moons
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_moons(n_samples=1000, noise=0.5)
# scatter plot, dots colored by class value
df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
colors = {0:’red’, 1:’blue’}
fig, ax = pyplot.subplots()
grouped = df.groupby(‘label’)
for key, group in grouped:
group.plot(ax=ax, kind=’scatter’, x=’x’, y=’y’, label=key, color=colors[key])
pyplot.show()

它无法线性分离。这就是我们上面看到的数据状态。然后我们必须添加特征或使用非线性模型。由于两个类之间的决策线是圆形的,我们可以添加一个二次部分,使上面数据中的问题线性分离,如下所示。

表示线性表面的图形
表示线性表面的图形

下一步是添加特征。扩展允许线性模型进行非线性分离。

defexpand(X):
    X_expanded = np.zeros((X.shape[0], 6))
    X_expanded[:, 0] = X[:, 0]
    X_expanded[:, 1] = X[:, 1]
    X_expanded[:, 2] = X[:, 0] ** 2
    X_expanded[:, 3] = X[:, 1] ** 2
    X_expanded[:, 4] = X[:, 0] * X[:, 1] 
    X_expanded[:, 5] = 1
return X_expanded

上述函数的工作原理如下:对于每个样本(矩阵中的行),计算一个扩展行:[feature0, feature1, feature0^2, feature1^2, feature0*feature1, 1]

接下来,我们来看看逻辑回归部分。当对事物进行分类时,我们将获得该事物属于类别“1”的概率。我们使用如下的线性模型和逻辑函数来预测概率。

物流功能:

Image
defprobability(X, w):
return1 / (1 + np.exp(-np.dot(X, w)))
dummy_weights = np.linspace(-1, 1, 6)

predict_prob = probability(X_expanded[:1, :], dummy_weights)[0]

概率大约为 0.8678884252629746

接下来是用交叉熵计算逻辑回归中的损失。在逻辑回归中,最优参数 w 是通过交叉熵最小化找到的。

一个样本的损失:

Image

多样本损失:

Image

为了计算损失,我们使用以下函数:

defcompute_loss(X, y, w):
    l = X.shape[0]
    p = probability(X, w)
return -(1.0/l) * np.sum(y * np.log(p) + (1-y) * np.log(1-p))
cross_ent = compute_loss(X_expanded, y, dummy_weights)

交叉熵值约为1.0523716363491382

结论

在回归问题中,我们讨论了平方误差、损失函数和解析解,但这些并不容易计算。在逻辑回归中,最优参数是通过交叉熵最小化找到的。

🏴‍☠️宝藏级🏴‍☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫等,从入门到进阶!

长按👇关注- 数据STUDIO -设为星标,干货速递ImageImage