问题标签 [dimension-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.

0 投票
6 回答
24134 浏览

algorithm - 将 N 维值映射到希尔伯特曲线上的点

我有大量的 N 维点(数千万;N 接近 100)。

我需要将这些点映射到一个维度,同时保留空间局部性。我想用希尔伯特空间填充曲线来做。

对于每个点,我想选择曲线上最近的点。点的希尔伯特值(从曲线起点到选取点的曲线长度)是我寻求的单维值。

计算不必是即时的,但我希望在体面的现代家用 PC 硬件上不会超过几个小时。

对实施有何建议?有什么图书馆可以帮助我吗?(语言并不重要。)

0 投票
3 回答
3525 浏览

math - 降维

我正在尝试将高维数据集减少为二维。但是,我无法预先访问整个数据集。所以,我想生成一个函数,它接受一个 N 维向量并返回一个二维向量,这样如果我将它提供给在 N 维空间中接近的向量,则结果在二维空间中很接近空间。

我认为 SVD 是我需要的答案,但我无法让它发挥作用。

为简单起见,让 N=3 并假设我有 15 个数据点。如果我将所有数据预先存储在 15x3 矩阵 X 中,则:

做我想做的事。但是假设我得到一个新的数据点 A,一个 1x3 的向量。有没有办法使用 U、S 或 V 将 A 变成适当的 1x2 向量?

如果SVD是一个失败的原因,有人可以告诉我我应该做什么吗?

注意:这是 Matlab 代码,但我不在乎答案是 C、Java 还是数学。如果您看不懂 Matlab,请询问,我会澄清。

0 投票
2 回答
2317 浏览

cluster-analysis - Mahout binary data clustering

I have points with binary features:

and the size of matrix is about 20k * 200k but it is sparse. I am using Mahout for clustering data by kmeans algorithm and have the following questions:

  1. Is kmeans a good candidate for binary features?
  2. Is there any way to reduce dimensions while keeping the concept of Manhattan distance measure (I need manhattan instead of Cosine or Tanimoto)
  3. The memory usage of kmeans is high and needs 4GB memory for each Map/Reduce Task on (4Mb Blocks on 400Mb vector file for 3k clusterss). Considering that Vector object in Mahout uses double entries, is there any way to use just Boolean entries for points but double entries for centers?
0 投票
1 回答
254 浏览

matlab - Matlab:函数@(x,y,z)的一维积分

让我们说

我想在 [0,1] 中为 x 积分 f。看来我必须定义 g 并执行 quad(g,0,1)

我的问题是是否可以在不定义新函数的情况下直接在 f 上执行 quad。

0 投票
1 回答
1530 浏览

math - 如何降低向量的维数

我有一组向量。我正在研究将n维向量减少为一元值(1-d)的方法,比如说

这个单一的值需要是向量的特征值。每个唯一的向量产生一个唯一的输出值。以下哪种方法是合适的:

1- 向量的范数 - 平方和的平方根,用于测量距原点的欧几里得距离

2- 计算 F 的散列,使用一些散列技术避免冲突

3- 使用线性回归计算,y = w1*x1 + w2*x2 + ... + wn*xn - 如果输入值对输出没有很好的依赖性,则不太可能是好的

4- 特征提取技术,如 PCA,根据输入向量集为 x1、x2、..xn 中的每一个分配权重

0 投票
1 回答
158 浏览

out-of-memory - 如何解决内存不足错误?

我在 OCR 中做我的项目。为此,我使用 64x64 的图像大小,因为当我尝试 32x32 等时,一些像素丢失了。我尝试了诸如区域密度、Zernike 矩、投影直方图、距离剖面、交叉等功能。主要问题是特征向量的大小太大。我已经采用了上述特征的组合并尝试过。但是每当我训练神经网络时,我都会遇到“内存不足”的错误。我尝试过 PCA 降维,但效果不佳。我在训练期间没有获得效率。在我的 PC 和笔记本电脑上运行代码。在他们两个中我都有相同的错误。我的 RAM 是 2GB。所以我考虑减少图像的大小。有没有解决这个问题的方法。

每当我尝试使用相同的特征训练神经网络时,我又遇到了一个问题,结果是多种多样的。如何也解决这个问题?

0 投票
3 回答
499 浏览

r - 读取 R 中的列矩阵

我花了很多时间尝试,但不知何故没有任何效果——我想这对于高级 R 用户来说很容易。我得到了一个数据格式,其中每个元素都按行出现。首先是作为字符串的标签,后跟 1000 个数字特征,全部用空格分隔:

我遇到的问题是读取矩阵时的标签(第一行或总是第一列)。我想将此矩阵应用于 tsne (降维),但标签会导致问题。所以我需要没有标签的矩阵,但我想稍后存储标签,这样我就可以用它们的新尺寸打印它们。到目前为止我得到的是以下(相当伪代码):

在这里,我需要将新的二维矩阵与每个标签一起打印的东西,例如label[x] + tsne[xDimension] + tsne[yDimension]

我希望你们中的某个人可以帮助我,在此先感谢并致以最诚挚的问候。

0 投票
0 回答
154 浏览

java - 活动识别 - 连续 HMM 的降维

我是 HMM 的新手,但我尝试使用 Jahmm 为 UCI 人类活动识别数据集构建代码。该数据集有 561 个特征,7352 行,还包括加速度计和陀螺仪的 xyz 惯性值,主要用于识别 6 种活动:步行、步行上楼、步行下楼、坐着、站立和躺着。数据已标准化 [-1,1],但未进行 z 缩放。我只能在缩放后得到不错的结果(R 中的 scale() 函数)。缩放后,我尝试了 PCA、90+% 的相关性和 mtry=8 的 randomForest 重要性度量以降低维度,但到目前为止,randomForest 是唯一似乎有效的方法,但结果仍然很低(80%) . 此外,有时,某些活动在 Jahmm 代码上运行时会给出 NaN 值。

根据我到目前为止所读到的关于 HMM 的内容,这些结果太低了。在使用上述降维技术之前我应该​​做更多的预处理吗?是否有与 HMM 兼容的特定降维技术?我过拟合了吗?还是我最好让它离散而不是连续?我真的必须为我的项目做活动识别和 HMM。我很高兴能从已经尝试过 Jahmm 和 R 进行连续 HMM 的人那里得到建议/反馈。如果有人可以建议一个使用对数概率的包/库,并在给定一组新的测试数据的情况下从拟合的 HMM 中发出维特比序列,那也很棒。

0 投票
1 回答
107 浏览

matlab - 逻辑数组的降维

我在两个不同的时间点测量了 5 台设备。测量基本上由对应于相应位置的位值的 1 和 0 数组组成:

我假设对于特定设备,测量时间 1 和 2 之间的变化是唯一的。但是,由于我在不同位置处理 32768 位,因此很难想象是否存在某种依赖关系。

由于位置的每一位都x可以被视为观察的一个维度,我认为使用 PCA 来减少维度的数量。

因此,对于 5 个设备中的每一个:

  1. 我随机抽样n测量点t1t2分开
  2. pca()我准备了一个数组作为m*n 列的输入(m< 32768;它是所有观察到的位的子集,因为原始数据对于 pca 可能太大)和 4 行(每个设备一行)。
  3. 在这个数组上A,我计算 pca:`[coeff score latent] = pca(zscore(A))```
  4. 然后我尝试使用以下方法将其可视化biplotbiplot(coeff(:,1:2), 'score', score(:,1:2))

然而,这给了我非常奇怪的结果。也许 PCA 不是解决这个问题的正确方法?我还修改了输入数据以不在逻辑位数组本身上执行 PCA。相反,我创建了一个向量,它保存原始测量数组中存在“1”的索引。这也会产生奇怪的结果。

由于我对 PCA 完全陌生,我想问您是否发现过程中存在缺陷,或者 PCA 是否不是我目标的正确方法,我最好寻找其他降维方法或聚类算法。

0 投票
1 回答
1163 浏览

text - 在自然语言处理 (NLP) 中,如何进行有效的降维?

在 NLP 中,特征的维度总是非常巨大的。例如,对于手头的一个项目,特征的维度几乎是 2 万(p = 20,000),每个特征都是一个 0-1 的整数,以显示论文中是否呈现了特定的单词或二元组(一篇论文是一个数据点 $x \in R^{p}$)。

我知道特征之间的冗余是巨大的,所以降维是必要的。我有三个问题:

1)我有 1 万个数据点(n = 10,000),每个数据点有 10,000 个特征(p = 10,000)。进行降维的有效方法是什么?矩阵 $X \in R^{n \times p}$ 是如此巨大,以至于 PCA(或 SVD,截断 SVD 都可以,但我不认为 SVD 是减少二进制特征维度的好方法)和 Bag单词的数量(或 K-means)很难直接在 $X$ 上进行(当然,它是稀疏的)。我没有服务器,我只是用我的电脑:-(。

2)如何判断两个数据点之间的相似度或距离?我认为欧几里得距离可能不适用于二元特征。L0范数怎么样?你用什么?

3)如果我想使用SVM机器(或其他内核方法)进行分类,我应该使用哪个内核?

非常感谢!