# 学习机器学习中的向量量化

> 原文： [https://machinelearningmastery.com/learning-vector-quantization-for-machine-learning/](https://machinelearningmastery.com/learning-vector-quantization-for-machine-learning/)

K 最近邻的缺点是你需要坚持整个训练数据集。

学习向量量化算法（或简称LVQ）是一种人工神经网络算法，可让您选择要挂起的训练实例数，并准确了解这些实例的外观。

在这篇文章中，您将发现学习向量量化算法。阅读这篇文章后你会知道：

*   实际保存到文件的LVQ算法使用的表示形式。
*   可用于使用已学习的LVQ模型做出预测的过程。
*   如何从训练数据中学习LVQ模型。
*   用于从LVQ算法获得最佳表现的数据准备。
*   在哪里可以找到有关LVQ的更多信息。

这篇文章是为开发人员编写的，并没有统计或数学方面的背景。该文章重点介绍了算法的工作原理以及如何将其用于预测性建模问题。

如果您对LVQ有任何疑问，请发表评论，我会尽力回答。

让我们开始吧。

![Learning Vector Quantization for Machine Learning](img/128726af4ffca05f1009aa49f39525e8.jpg)

学习机器学习的向量量化
摄影： [Holly Victoria Norval](https://www.flickr.com/photos/hollystar47/20282213340) ，保留一些权利。

## LVQ模型表示

LVQ的表示是码本向量的集合。

LVQ已经开发出来并且最好被理解为分类算法。它支持二进制（两类）和多分类问题。

码本向量是与训练数据具有相同输入和输出属性的数字列表。例如，如果您的问题是类0和1的二分类，以及输入宽度，长度高度，那么代码簿向量将包含所有四个属性：宽度，长度，高度和类。

模型表示是从训练数据中学习的固定的码本向量池。它们看起来像训练实例，但每个属性的值都是根据学习过程进行调整的。

在神经网络的语言中，每个码本向量可以被称为神经元，码本向量上的每个属性被称为权重，并且码本向量的集合被称为网络。

## 获取免费算法思维导图

![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg)

方便的机器学习算法思维导图的样本。

我已经创建了一个由类型组织的60多种算法的方便思维导图。

下载，打印并使用它。

## 使用LVQ模型做出预测

使用LVQ码本向量以与K 最近邻相同的方式做出预测。

通过搜索K个最相似的实例的所有码本向量并总结那些K个实例的输出变量，对新实例（x）做出预测。对于分类，这是模式（或最常见）类值。

通常，预测是在K = 1的情况下进行的，匹配的码本向量称为最佳匹配单元（BMU）。

为了确定训练数据集中的哪个K实例与新输入最相似，使用距离度量。对于实值输入变量，最流行的距离测量是欧几里德距离。欧几里德距离被计算为每个属性j的新点（x）和现有点（xi）之间的平方差之和的平方根。

EuclideanDistance（x，xi）= sqrt（sum（（xj - xij）^ 2））

## 从数据中学习LVQ模型

LVQ算法从训练数据中学习码本向量。

您必须选择要使用的码本向量数，例如20或40.您可以通过测试训练数据集上的不同配置找到要使用的最佳码本向量数。

学习算法以随机码本向量池开始。这些可以是来自训练数据的随机选择的实例，或者是与训练数据具有相同比例的随机生成的向量。码本向量具有与训练数据相同数量的输入属性。它们还有一个输出类变量。

训练数据集中的实例一次处理一个。对于给定的训练实例，从池中选择最相似的码本向量。

如果码本向量具有与训练实例相同的输出，则码本向量移动到更接近训练实例。如果不匹配，则会进一步移动。向量移动的量由称为learning_rate的算法参数控制。

例如，如果类匹配如下，则将码本向量的输入变量（x）移动到更接近训练输入值（t）的学习量中的量：

x = x + learning_rate *（t - x）

将码本变量的输入变量从训练实例移开的相反情况计算如下：

x = x - learning_rate *（t - x）

这将针对每个输入变量重复。

因为选择一个码本向量用于每个训练实例的修改，所以该算法被称为[赢者通吃](https://en.wikipedia.org/wiki/Winner-take-all_(computing))算法或一种[竞争学习](https://en.wikipedia.org/wiki/Competitive_learning)。

对训练数据集中的每个实例重复此过程。训练数据集的一次迭代称为迭代。该过程已完成您必须选择的多个时期（max_epoch），例如200。

您还必须选择初始学习率（例如alpha = 0.3）。学习率随着时期而减少，从您在时期1指定的大值开始，这对于码本向量进行最大的改变并且在最后一个时期以接近零的小值结束，从而对码本向量进行非常小的改变。

每个时期的学习率计算如下：

learning_rate = alpha *（1 - （epoch / max_epoch））

其中learning_rate是当前时期（0到max_epoch-1）的学习率，alpha是在训练开始时为算法指定的学习率，而max_epoch是运行算法的时期总数，也是在跑步的开始。

学习过程的直觉是，码本向量池是将训练数据集压缩到最能表征类别分离的点。

## LVQ的数据准备

一般来说，为LVQ准备数据是一个好主意，就像为K 最近邻准备数据一样。

*   **分类**：LVQ是一种分类算法，适用于二进制（两类）和多分类算法。该技术已适用于回归。
*   **多次通过**：LVQ的良好技术涉及在码本向量上执行训练数据集的多次传递（例如，多次学习运行）。第一个具有较高学习率来解决池码本向量，第二个以较小的学习率来微调向量。
*   **多个最佳匹配**：LVQ的扩展选择多个最佳匹配单元以在学习期间进行修改，例如分别针对和远离训练样本绘制的相同类和不同类之一。其他扩展使用每个码本向量的自定义学习率。这些扩展可以改善学习过程。
*   **归一化输入**：传统上，输入被归一化（重新缩放）到0到1之间的值。这是为了避免一个属性支配距离测量。如果输入数据被归一化，则可以选择码本向量的初始值作为0和1之间的随机值。
*   **特征选择**：可以减少输入变量维数的特征选择可以提高方法的准确率。 LVQ在作为K 最近邻做出预测时遭受同样的维度诅咒。

## 进一步阅读

该技术由Kohonen开发，他编写了关于LVQ的开创性书籍和姐妹方法Self-Organizing Maps，名为：[自组织地图](http://www.amazon.com/dp/3540679219?tag=inspiredalgor-20)。

[![Amazon Image](img/741e0a605620af7a68b5e096dd05139b.jpg)](http://www.amazon.com/dp/3540679219?tag=inspiredalgor-20)

如果您对LVQ感兴趣，我强烈推荐这本书。

*   维基百科上的[学习向量量化](https://en.wikipedia.org/wiki/Learning_vector_quantization)。
*   [学习向量量化](http://www.cleveralgorithms.com/nature-inspired/neural/lvq.html)章节来自我的书“自然启发算法”。
*   [LVQ_PAK](http://www.cis.hut.fi/research/lvq_pak/) 由Kohonen负责LVQ的官方软件实现。
*   [LVQ作为WEKA](http://wekaclassalgos.sourceforge.net/) （我多年前创建）的插件。

## 摘要

在这篇文章中，您发现了LVQ算法。你了解到：

*   LVQ的表示是一小部分码本向量，小于训练数据集。
*   码本向量用于使用与K 最近邻相同的技术做出预测。
*   码本向量是从训练数据集中学习的，当它们匹配良好时将它们移近，当它们是不匹配时将它们移开。
*   码本向量是训练数据的压缩，以最好地分离类。
*   传统上，数据准备涉及将输入值标准化为0到1之间的范围。

您对此帖子或LVQ算法有任何疑问吗？发表评论并提出您的问题，我会尽力回答。