You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何借助sklearn实现逆LLE解决分类任务降维数据泄露问题

基于sklearn实现LLE测试集映射方案

首先澄清概念:你需要的功能是训练集拟合LLE后对测试集做无泄露的降维映射,属于LLE的out-of-sample扩展能力,不是逆LLE(逆LLE是指从低维嵌体重构回原始高维特征的操作)。sklearn自带的LocallyLinearEmbedding类已经原生支持该能力,无需额外实现。

实现逻辑

sklearn的LLE在fit训练集后,会保留训练集的原始特征、低维嵌入结果、邻域计算规则等参数,调用transform方法处理测试集时会执行以下步骤,完全避免数据泄露:

  • 对每个测试样本,仅在训练集样本中查找k近邻
  • 沿用训练阶段的权重计算规则,得到测试样本对应训练集近邻的线性重构权重
  • 用训练集的低维嵌入结果,结合上述权重计算得到测试样本的低维表示,和训练集降维结果分布完全对齐

修正后的完整代码

import numpy as np
from sklearn import preprocessing, model_selection
from sklearn import svm
from sklearn.manifold import LocallyLinearEmbedding

### 生成模拟数据
n_row = 10000 
n_col = 50 
X = np.random.random((n_row, n_col)) # 修正原代码参数格式错误
y = np.random.randint(5, size=n_row) 

### 数据预处理
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size = 0.5, random_state = 1)
scaler = preprocessing.StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

### LLE降维部分
# 初始化LLE对象
lle = LocallyLinearEmbedding(n_neighbors=15, n_components=10, method='modified', eigen_solver='dense')
# 拟合训练集同时得到训练集降维结果
X_train_lle = lle.fit_transform(X_train)
# 直接对测试集做映射,无数据泄露,结果和训练集分布对齐
X_test_lle = lle.transform(X_test)

### 模型训练与推理
clf = svm.SVC(kernel='linear') 
clf.fit(X_train_lle, y_train)
y_pred = clf.predict(X_test_lle)

补充说明

如果你确实需要实现逆LLE(从低维嵌入重构回原始高维特征),可以基于训练集的低维嵌入lle.embedding_和原始训练特征X_train拟合一个逆映射模型,比如用k近邻回归或者MLP实现,输入低维向量输出高维原始特征即可。

内容的提问来源于stack exchange,提问作者Djordje Savic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:06:03