>>> from sklearn.metrics import mean_squared_error >>> mean_squared_error(X, X_preimage) 32.786308795766132
```
现在你可以使用交叉验证的方格搜索来寻找可以最小化重建前图像误差的核方法和超参数。
### LLE
局部线性嵌入(Locally Linear Embedding)是另一种非常有效的非线性降维(NLDR)方法。这是一种流形学习技术,不依赖于像以前算法那样的投影。简而言之,LLE首先测量每个训练实例与其最近邻居(c.n.)之间的线性关系,然后寻找能最好地保留这些局部关系的训练集的低维表示(稍后会详细介绍) 。这使得它特别擅长展开扭曲的流形,尤其是在没有太多噪音的情况下。
这是LLE的工作原理:首先,对于每个训练实例 x<sup>( i )</sup>,该算法识别其最近的k个邻居(在前面的代码中k = 10中),然后尝试将 x<sup>( i )</sup>重构为这些邻居的线性函数。更特殊的,它假设如果 x <sup>( j )</sup>不是 x<sup>( i )</sup>的k个最近邻之一,就找到权重 w<sub>i , j</sub>从而使 x<sup>( i )</sup>和<b>aaaaa</b>之间的平方距离尽可能的小。因此,LLE的第一步是方程8-4中描述的约束优化问题,其中**W**是包含所有权重 w<sub>i,j</sub>的权重矩阵。第二个约束简单地对每个训练实例 **x**<sup>( i )</sup>的权重进行归一化。
<caption><i>公式 8-4 LLE 第一步:对局部关系进行线性建模</i></caption>
(Equation here)
在这步之后,权重矩阵 <b>W ooo</b>(包含权重 <b>wiiii</b>)对训练实例的线形关系进行编码。现在第二步是将训练实例投影到一个 d 维空间( d <n)中去,同时尽可能的保留这些局部关系。如果**z**<sup>( i )</sup>是 **x**<sup>( i )</sup>在这个d维空间的图像,那么我们想要 **z**<sup>( i )</sup> aaaaaaaaaaa之间的平方距离尽可能的小。这个想法让我们提出了公式8-5中的非限制性优化问题。它看起来与第一步非常相似,但我们要做的不是保持实例固定并找到最佳权重,而是恰相反:保持权重不变,并在低维空间中找到实例图像的最佳位置。请注意,**Z**是包含所有 **z**<sup>( i )</sup>的矩阵。
Scikit-Learn的LLE实现具有如下的计算复杂度:查找k个最近邻为<i>O ( m log ( m ) n log ( k ) )</i>,优化权重为<i>O ( m n k<sup>3</sup> )</i>,建立低维表示为 <i>O ( d m <sup>2</sup> )</i>。不幸的是,在最后一项的 m <sup>2</sup>使得这个算法在处理大数据集的时候表现较差。