问题标签 [dimensionality-reduction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 选择在 PCA 中表现出最大差异的组件
我有一个庞大的数据集 (32000*2500) 需要用于训练。这对我的分类器来说似乎太多了,所以我决定阅读一些降维内容,特别是 PCA。
据我了解,PCA 选择当前数据并将它们重新绘制在另一个 (x,y) 域/尺度上。这些新坐标没有任何意义,只是重新排列数据以提供一个轴的最大变化。在这些新系数之后,我可以放弃cooeff
具有最小变化的系数。
现在我正在尝试在 MatLab 中实现这一点,并且在提供的输出方面遇到了问题。MatLab 始终将行视为观察值,将列视为变量。所以我对pca
函数的输入将是我的 size 矩阵(32000*2500)
。这将在 size 的输出矩阵中返回 PCA 系数2500*2500
。
pca 的帮助指出:
coeff 的每一列都包含一个主成分的系数,并且这些列按成分方差的降序排列。
在此输出中,我的数据的观察值是哪个维度?我的意思是,如果我必须将其提供给分类器,行将coeff
代表我的数据观察,还是现在是 的列coeff
?
以及如何删除变化最小的系数?
matlab - 维度大于数据个数时可以使用t-SNE吗?
我正在使用 t-SNE 和来自该网站 ( https://lvdmaaten.github.io/tsne/ ) 的 matlab 代码。但是,每当我在数据维度大于数据数量的情况下运行此程序时,都会出现错误。下面的代码是我目前使用的代码,这里总是出现错误
错误是
我用matlab中的命令调用这个tsne函数
输入大小为(162x640),维度为640,数据数为162。下面的程序是上面网站的代码。
我试图理解这段代码,但我无法理解发生错误的部分。
为什么需要这个条件?由于 'X' 的大小为 (162x640),else 语句将被执行。我想这就是问题所在。在 else 语句中,'C' 的大小将为 (162x162)。然而,在下一行
使用等于 640 的“initial_dims”。我是否以错误的方式使用了此代码?或者它只是不适用于我使用的数据集?
kernel - 与 PCA 相比,内核 PCA 增加了维度以实现相同的方差解释?
我试图使用 sklearn 来执行具有 28*28 = 784 dims 数据的内核 PCA。起初我使用 PCA 来减少维度,我选择减少到 k 维,其中 k 可以解释 95% 的方差。PCA 给了我 k = 174。后来我尝试了使用 3 次多项式内核的内核 PCA,类似地,使用解释方差方法我得到了 k = 1993。由于 1993 > 784,内核 PCA 实际上增加了维数,这与我的意图。
另外,我使用了 5000 个数据进行训练,而 Kernel PCA 给了我 5000 个特征向量,我从中选择了 k = 1993。为什么内核 PCA 给了我 5000 个特征向量?为什么与 PCA 相比,内核 PCA 增加了维度?
r - 如何在使用 R 的文本分析中使用 LSA 进行降维
我是数据科学的初学者,我正在从事一个带有推文的文本分析/情感分析项目。我一直在尝试做的是对我的推文训练集进行一些降维,并将训练集输入到 NaiveBayes 学习器中,并使用学习到的 NaiveBayes 来预测测试推文集上的情绪。
我一直在按照本文中的步骤进行操作:
对于像我这样的初学者来说,他们的解释有点太简短了。
我已经使用 lsa() 创建了一个在 RStudio 中标记为“Large LSAspace(3 个元素)”的东西。并按照他们的示例,我创建了另外 3 个数据框:
当我查看lsa.train.tk数据时,它看起来像这样(lsa.train.dk看起来与这个矩阵非常相似):
我的lsa.train.sk如下所示:
我的问题是,我如何解释这些信息?我如何利用这些信息来创建可以输入 NaiveBayes 学习者的东西?我尝试将 lsa.train.sk 用于 NaiveBayes 学习者,但我想不出任何好的解释来证明我的尝试是正确的。任何帮助将非常感激!
编辑: 到目前为止我所做的:
- 把所有东西都变成术语文档矩阵
- 将矩阵传递给 NaiveBayes 学习器
- 使用学习算法进行预测
我的问题是:
准确率只有 50%……我意识到它将所有内容都标记为积极情绪(所以如果我的测试集只包含消极情绪推文,我可以获得 1% 的准确率)。
当前代码不可扩展。由于它使用大型矩阵,我最多只能处理 3.5k 行数据。不仅如此,我的电脑会崩溃。因此我想做一个降维,以便我可以处理更多数据(例如 10k 或 100k 行推文)
python-2.7 - 使用 t-SNE 的奇怪迭代结果“error is nan”和 RuntimeWarning
我正在使用 t-SNE python 实现进行降维,X
其中包含 100 个实例,每个实例由 1024 个参数描述,用于 cnn 可视化。
X.shape = [100, 1024]
X.dtype = float32
当我运行时:
第一个警告出现在 tsne.py 的第 23 行:
RuntimeWarning:除以在日志中遇到的零 H = Math.log(sumP) + beta * Math.sum(D * P) / sumP
然后在以下几行中还有更多类似这样的警告:
RuntimeWarning:在除法中遇到无效值
最后我在处理过程中的每次迭代后得到这个结果:
迭代 xyz:错误是 nan
代码结束时没有“错误”,最后我得到一个空的散点图。
编辑:
-> 我已经尝试过使用不同的数据集,并且效果很好。但是,我也需要它在我的第一组上工作(似乎会引起问题的那个)
问题 :
有谁知道这可能是什么原因造成的?有解决方法吗?
categorical-data - 基于连续变量值的分类变量降维
我有兴趣使用一组土地利用分类变量来预测反映植物生产的连续变量。该数据集是一个像素级数据集,其中每个像素都有一个植物生产值和一个土地利用分类。有 50 多个土地利用类别,我想将其减少到更小的数量。我想根据土地利用类别对植物生产总体差异的贡献来执行降维。据我所知,除非我将植物生产分类并使其分类,否则 MCA 将无法工作。任何关于如何基于连续变量的值对分类变量执行降维的想法将不胜感激。
需要明确的是 - 我对所需矩阵的构造以及在 R 或 Python 中处理矩阵的包感兴趣。谢谢!
matlab - Matlab:降维
让我们 x_t = F(x_{t-1})
在时间上成为离散状态下的一个动态系统。
从一个初始条件开始 x_0
,我们可以生成一个时间序列 =x_t
其中 t =1,2,...,T
表示时间索引。
s_t = 1
否则, 一维图的平均值在x_t
> c
哪里 s_t = 0
。 c
所以地图的每次迭代 F
都会给出一个新符号。将 0 和 1 的序列放入符号向量中,我们得到 {s} = s_0s_1s_2....
现在,假设我们有一个 3 维系统,让d=3
. 让第一个坐标称为x
,第二个坐标 y 和第三个坐标 z 产生(x,y,z)
形成多维系统。我的问题是如何获得这种情况下的符号动态?
例子 :
每个维度都会有一个符号序列还是将一个符号分配给一个点 (x,y,z) ?解释将非常有助于清除概念然后编程。使用任何其他现有技术来分配符号的解决方案也将很有用。
python - 稀疏矩阵上的降维(TSNE/PCA)
我想执行降维(DR)技术来可视化我的数据以及它们之间的相关性。我计划使用Barnes-hut tsne,但我无法了解如何向 TSNE 提供输入,因为示例应用程序根据用户指南具有常规矩阵形式的数据。我有大约 1200 万条记录和 5000 个不同的值,我无法将它们存储到主内存中。我想执行降维(DR),以便在二维散点图上可视化这些不同的值。我有邻接列表形式的数据(因为它太稀疏了)。
比方说,我有以下记录:
这些应该是我的前 6 条记录。在这种情况下,我只有 10 个不同的值。上面的矩阵(表)表明第一条记录有 2,3 和 10 列为 1,而其他列为 0(邻接表)。
这些不同的值映射到文档(记录)中存在的单词(标签)。
如何使用此类数据执行快速 TSNE。或者如何将其转换为 TSNE 所需的兼容格式?我应该更喜欢哪种语言?
我更喜欢使用 Python 或 Matlab,但其他任何东西也都可以。让我知道你的建议。
PS我有非常高的计算机来完成这项任务。