python - 使用 LDA 减少训练集维度时的单样本预测问题
问题描述
我对数据使用的监督分类方法有问题。
假设我们正在使用 LDA 降维方法将维度从 100 减少到 2 后用数据 (N=70) 训练我们的算法。
现在,我们想预测第 71 个样本的类别,我们完全不知道它的类别。但是,它仍然有 100 个功能;所以我们必须减小它的尺寸。
乍一看似乎很容易:我可以使用第一个归约的变换特性。例如,在 python 中:
clf.fit(X,Y)
lda = LinearDiscriminantAnalysis(n_components=2)
flda = lda.fit(X, Y)
X_lda = flda.transform(X)
我已经存储了训练数据的拟合属性。X_p 是我的单个样本。因此,当我再次使用“flda”进行转换时,会使用相同的拟合信息:
X_p = flda.transform(X_p.reshape(1, -1))
但是,它不能正确预测!为了测试,我使用了我的第一个 N=70 数据。提取其中一个(所以现在,它是 N=69)。我使用第 70 个数据作为测试样本。而且它没有再次正确预测。
当我比较之前的数据 (N=70) 和新的数据 (N=69) 时,我看到每个数字都发生了变化!如果我没有遗漏什么(我希望我遗漏了,你可以告诉我我遗漏了什么)LDA 降维不适用于真正的机器学习应用,因为只有一个数据可以改变一切。
请注意,尽管所有数字都发生了显着变化(这意味着点的相对位置没有变化),但简化数据的图没有变化。
你知道在真实的机器学习应用中如何使用 LDA 降维吗?我必须做什么,按以下顺序测试一个样品:
- 将训练数据的维度减少到 2
- 将测试数据的维度减少到 2
- 预测!
不使用相同的转换特性?
解决方案
推荐阅读
- android - 我可以保持一个前台服务运行以防止其他后台服务在android中被杀死
- csv - 导入并使用 d3.parseCsv 版本 5
- php - Wordpress 类别分页返回 404
- swift - UIProgressView 在 iOS 13 上没有动画进度
- c# - dotnet core 3.0 中不支持 DataMember 属性
- .net-core - 使用 Simple.OData.Client 动态语法投影到已知类型
- package - 如何在本地注册表中注册本地 Julia 包?
- python - 如何在 for 循环中重新分配 cuda gpu 设备数组而不会耗尽内存?
- java - 通过浮点数对包含“0.222:Hello test”等字符串的数组列表进行排序的最简单和最快的方法?
- azure-active-directory - AzureAD - 按 EmployeeID 阻止访问