问题标签 [pca]
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 - MATLAB 中的主成分分析
我正在使用稀疏数据的特征值分解来实现 PCA。我知道 matlab 实现了 PCA,但它可以帮助我在编写代码时理解所有技术细节。我一直在遵循这里的指导,但与内置函数 princomp 相比,我得到了不同的结果。
任何人都可以看看它并指出我正确的方向。
这是代码:
opencv - OpenCV CalcPca 输入数据
我正在尝试使用“eigenfaces”通过opencv实现人脸识别训练功能。我有示例数据,但找不到有关 CalcPCA 函数参数的任何信息。我所知道的是它需要数据矩阵,对平均特征面矩阵的引用,对特征向量的引用和对特征值矩阵的引用。
我的问题是,我应该如何将来自几个测试图像矩阵的数据传递到 CalcPCA 的第一个参数中,以便获得平均特征面和向量?
opencv - 如何使用 Cimg(或者可能是 openCV 或 eigen 库)计算 SVD?
谁能给我一个关于如何使用 Cimg 为 3 维数组计算 SVD 的快速指南?我只想对数组进行分解,以便将其压缩到很小以加快进一步处理。我应该在哪里输入什么值,以及如何获得输出?我一直在搜索,但仍然无法理解它是如何工作的。并没有真正完全理解 SVD 的工作原理。只知道它可以用来解压缩矩阵。
同时我发现 OpenCV 和 Eigen 库也可以完成这项工作,如果更容易的话,请告诉我他们的步骤..
(对我来说,替代 SVD 的是 PCA,我找到了它的源/库,但也不知道如何使用..)
谢谢!
python - 我的 PCA 有什么问题?
我的代码:
虹膜数据集:http: //archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
输出:
期望的输出:
特征值 -[2.9108 0.9212 0.1474 0.0206]
主成分 -Same as I got but transposed
好吧,我猜
另外,linalg.eig 函数的输出是什么?根据维基百科上的 PCA 描述,我应该这样做:
但它与我在网上找到的教程中的输出并不真正匹配。另外,如果我有 4 个维度,我认为我应该有 4 个特征值,而不是像 eig 给我的 150。难道我做错了什么?
编辑:我注意到这些值相差 150,这是数据集中元素的数量。此外,特征值应该相加等于维数,在这种情况下为 4。我不明白为什么会发生这种差异。如果我简单地将特征值除以len(data)
我可以得到我想要的结果,但我不明白为什么。无论哪种方式,特征值的比例都不会改变,但它们对我很重要,所以我想了解发生了什么。
python - Numpy.eig 和 PCA 中的方差百分比
所以我可以使用 linalg.eig 或 linalg.svd 来计算 PCA。当它们被输入相同的数据时(我目前正在使用 Iris 数据集),每个都返回不同的主成分/特征向量和特征值。
看这里或任何其他将 PCA 应用于虹膜数据集的教程,我会发现特征值是[2.9108 0.9212 0.1474 0.0206]
. 该eig
方法为我提供了一组不同的特征值/向量,我不介意使用,除了这些特征值,一旦相加,就等于维数 (4),并且可以用来找出每个分量对总方差。
取linalg.eig
我返回的特征值是做不到的。例如,返回的值为[9206.53059607 314.10307292 12.03601935 3.53031167]
. 在这种情况下,方差的比例为[0.96542969 0.03293797 0.00126214 0.0003702]
。另一页说(“一个组件解释的变化比例就是它的特征值除以特征值之和。”)
由于每个维度解释的方差应该是恒定的(我认为),因此这些比例是错误的。所以,如果我使用 的返回值svd()
,这是所有教程中使用的值,我可以从每个维度获得正确的变化百分比,但我想知道为什么eig
不能这样使用返回的值。
我假设返回的结果仍然是投影变量的有效方法,那么有没有办法转换它们,以便我可以得到每个变量解释的正确比例的方差?换句话说,我可以使用该eig
方法并且仍然具有每个变量的方差比例吗?此外,这种映射是否只能在特征值中完成,以便我可以同时拥有真实的特征值和归一化的特征值?
对不起,很长的文章顺便说一句。这是一个(::)
已经走到这一步的。假设你不只是阅读这一行。
c++ - 在 OpenCV 2.2 中使用 C++ 语法的 PCA + SVM
我在使用最新的 C++ 语法与 Mat 和 PCA 类一起工作时遇到问题。较旧的 C 语法采用 IplImage* 数组作为参数来执行其处理,而当前 API 仅采用按 Column 或 Row 格式化的 Mat。我采用了 Row 方法,使用 reshape 函数来拟合我的图像矩阵以适合单行。我最终想要获取这些数据,然后使用 SVM 算法进行检测,但是当我这样做时,我的所有数据都只是一个 0 流。有人可以帮我吗?我究竟做错了什么?谢谢!
我看到了这个问题,它有点相关,但我不确定解决方案是什么。
这基本上就是我所拥有的:
matlab - Matlab主成分分析(特征值顺序)
我想使用 Matlab 的“princomp”函数,但这个函数给出了排序数组中的特征值。这样我就无法找出哪个列对应哪个特征值。对于 Matlab,
是相同的
也就是说,交换前两列不会改变任何东西。潜在的结果(特征值)将是: (27,0,0) 信息(哪个特征值对应于哪个原始(输入)列)丢失。有没有办法告诉matlab不要对特征值进行排序?
matlab - 如何在由 PCA 系数和分数数据制成的双图上绘制一条线?
我正在使用 coeff 和 score 输出创建 PCA 数据的双图。我希望在双标图上最远的点之间画一条线。我不确定如何在不自己添加的情况下添加一条线(这会很乏味)。
我知道哪两个点彼此相距最远。我的系数是 7x7,但我使用双标图的前 3 列以及分数矩阵中的 1:3 列。
我将如何在这两个点之间用 line 或 plot3 绘制一条线。似乎可以完成,但我不确定要为该行指定哪些数据。
opencv - OpenCV 2.2 PCA 和 EigenFaces
我只是想知道 OpenCV 2.2 中的 cv::PCA::PCA 构造函数方法是否会减去均值,或者我是否必须传递已减去均值的数据。
我测试了两种方式,但是在可视化特征面时,它们都没有给我很好的结果,只是一个黑屏。我没有分段错误或错误,只是没有像论文中那样获得特征脸可视化。
matlab - 支持向量机分类
我是 MATLAB 的初学者,正在做我的数字图像处理编程项目,即使用小波特征+SVM+PCA+ANN 的磁共振图像分类。我从 MATLAB 工具中执行了示例 SVM 分类并对其进行了修改以满足我的要求。在输入向量中存储多个特征以及向 SVM 提供新输入时,我遇到了问题。请帮忙。