自编码器进行插值的详解与实现是什么?
编码器是另一个通过压缩再现输入的神经网络。由于编码器具有特殊特征,即,输入神经元的数量与输出神经元数相同。
AutoEncoder的目标是在输出层中创建输入表示,使得输出和输入类似。
AutoEncoder的实际使用是确定具有最低数据丢失的输入数据的压缩版本。这与主要成分分析非常相似,但在黑匣子中进行。由于编码器的编码器部分被压缩,因此数据不会丢失时不会丢失,但数据的大小减小。
使用AutoEncoder的缺点是压缩数据是黑匣子表示 - 我们不知道压缩版中的数据结构。
假设有一个具有10个参数的数据集,我们在此数据上培训一个自编码器。编码器不会忽略一些参数以获得更好的表示,但它融合了这些参数以创建压缩版本(参数的数量从10到5减少)。
由于编码器有两个部分,编码器和解码器。编码器压缩输入数据,解码器相反地生成未压缩的数据,以产生与原始输入尽可能接近的重建输入。
插值方法
插值是猜测两个数据点之间的函数值的过程。例如,给定x = [1,3,5,7,9],y = [230.02,321.01,305.00,245.75,345.62]给定x = 4,你想知道是多少。
有大量的插值方法,有些是基于模型的,有些是没有模型,即数据驱动。实现插值的最常用方法是符合数据。例如,使用线性回归分析将线性模型拟合到给定数据。
在线性回归,使用公式Y =β0+β1x拟合数据给出预测变量x和响应变量y,其中使用最小二乘法确定β0和β1。
顾名思义,线性回归是线性的,即,即使预测变量与响应变量之间的关系可能是非线性的,也是直线或超级平面。
然而,最常见的插值形式是多项式拟合。 K-1多项式非常简单,以提供K-1倍增多项式。给定数据集* {xi,yi} *,通过确定函数的多级因子ai来获得多项式拟合的。
通过以下表达式解决矩阵:
一旦我们有一个系数ai,我们就可以找到任何x函数f的值。
有一些特殊情况的多项式拟合,包括使用分段多项式的数据。其他非参数方法包括三个样条,平滑点,回归花键,核回归和密度估计。
本文的重点不是多项式拟合,但内容。多级拟合恰好有助于插值。多项式拟合方法存在问题 - 是否参数拟合是非参数拟合,它们的行为与教导相同。这意味着如果数据清洁,则拟合将是干净且平滑的,但如果数据是噪声,则拟合将是噪声。
该问题在传感器数据中更常见,例如,从从心率传感器捕获的心跳数据,从从激光雷达获取的距离数据,从汽车,GPS数据等获取的CAN总线速度数据。
此外,由于存在噪声,它们更难以处理,尤其是当您的算法需要执行这些数据的双或二阶衍生物时。
通常,这些传感器数据是时间序列数据,即它们随着时间的推移收集,因此响应变量可以是一些物理量,例如安装在顶部的激光雷达的距离,心率和预测变量。自动驾驶汽车。是时候了。
操作数据时,可能有几个目标:我想在这个时间戳上将数据插入时间戳,我的传感器无法记录任何响应,而是因为传感器在实时世界中工作,并且由于潜力物理原因,这些数据仍然嘈杂,我也希望可靠的插值,不受传感器噪声的影响。
它还可以包括这种时间序列数据的衍生品。然而,衍生物倾向于放大潜在时间序列数据中的噪声。如果有一种方法,我可以获得数据的底层表示,同时丢弃噪音?在这种情况下,您可以从编码器实现我的目标。
自我编码器作为插值者
为了证明AutoEncoder的去噪+插值目标的使用,我使用从车辆中收集的距离数据的示例,其中变量是距离我车辆前部的距离,并且参数是时间。
我在Github Repo上有少量数据,作为演示的一部分,您可以自由使用它。但它很小除了本文描述的教程之外,还没有其他用途。
注意:在使用数据之前,我应该指出时间(独立变量)和响应变量(由于变量)必须重新归类。在我的示例中,原始时间以1594247088.289515(以秒为单位)开始,结束于1594247110.290019。我使用公式(time-start_time)/(end_time - start_time)来标准化我的时间值。类似地,响应变量使用(message_max -message_min)标准化。提供的示例数据标准化,您可以直接重用它。
训练
如您所见,我没有执行任何正则化,因为我必须适合以充分利用数据的基本特征。是时候进行预测了。
您将看到我将在预测之前重新启动主值。
虽然我只训练了1000个时代,但如果您的数据很大,您的培训可能不会那么短。这种方法的最大优点是使用衍生物,从以下情况下可以看出,原始数据的导数差 - 或者可能不代表真实的衍生物!
这种方法的唯一缺点是时间复杂。根据数据点数,可能需要几个小时来完成培训。但是,如果您可以访问高性能计算群集,Amazonec2或类似的应用程序,则从编码器培训不会花费太多时间。