如何根据pandas数据框中的数据计算主成分分析?
我正在尝试使用FactoMineR在数据表上运行MCA.它仅包含0/1数字列,其大小为200.000*20.
require(FactoMineR)
result <- MCA(data[, colnames, with=F], ncp = 3)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
其中的错误(unlist(lapply(listModa,is.numeric))):'which'的参数不合逻辑
我真的不知道如何处理这个错误.然后我试着将每一列都变成了角色,一切都运转了.我认为它可能对其他人有用,也许有人能够向我解释错误;)
干杯
我一直在研究R中主成分分析的概念.
我很乐意将PCA应用于(例如,标记的)数据集,并最终从我的矩阵中提取出最有趣的前几个主要组件作为数值变量.
从某种意义上说,最终的问题是什么呢?在计算完成后,我在PCA上遇到的大部分读数都会立即停止,特别是在机器学习方面.请原谅我的夸张,但我觉得好像每个人都认为这项技术很有用,但没有人愿意在他们这么做之后真正使用它.
更具体地说,这是我真正的问题:
我认为主要组件是您开始使用的变量的线性组合.那么,这种转换后的数据如何在监督机器学习中发挥作用?有人如何使用PCA作为减少数据集维数的方法,然后,将这些组件与受监督的学习者(例如SVM)一起使用?
我对我们的标签发生了什么感到困惑.一旦我们进入了本征空间,那就太好了.但是,如果这种转变打破了我们的分类概念,那么我认为没有任何办法可以继续推进机器学习(除非有一些"是"或"否"的线性组合我没有遇到过!)
如果你有时间和资金,请介入并指导我.提前致谢.
machine-learning pca supervised-learning principal-components
libpca是一个用于主成分分析的C++库,它建立在线性代数库Armadillo之上.
不过,我遇到了问题.我将其输出与Lindsay Smith在其关于PCA的精彩教程中给出的示例进行比较.当我检索第一个主要组件时,我在他的教程中获得与Smith相同的值,但其符号被反转.对于第二主成分,符号和值是正确的.
有谁知道这是为什么?
码:
#include "pca.h"
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
stats::pca pca(2);
double* elements = new double[20]{2.5, 2.4, 0.5, 0.7, 2.2, 2.9, 1.9, 2.2, 3.1, 3.0, 2.3, 2.7, 2, 1.6, 1, 1.1, 1.5, 1.6, 1.1, 0.9};
for (int i = 0; i < 20; i++) {
vector<double> record;
record.push_back(elements[i++]);
record.push_back(elements[i]);
pca.add_record(record);
}
pca.solve();
const vector<double> principal_1 = pca.get_principal(0);
for (int i = 0; i < principal_1.size(); i++) …Run Code Online (Sandbox Code Playgroud) 所以在Matlab中我用手写数字执行PCA.基本上,我说30*30维图片,即900像素,我认为在PCA之后捕获大部分方差的组件,比如基于某个阈值的前80个主要组件(PC).现在这些80个PC也是900维度,当我使用imshow绘制这些时,我会得到一些图像,比如看起来像0,6,3,5等等.这些前几个PC的解释是什么?我提取的80)?
matlab pattern-recognition machine-learning principal-components
我的 PCA 使用sklearn. 为什么我的转换不会像文档所说的那样产生相同尺寸的数组?
fit_transform(X, y=None)
Fit the model with X and apply the dimensionality reduction on X.
Parameters:
X : array-like, shape (n_samples, n_features)
Training data, where n_samples is the number of samples and n_features is the number of features.
Returns:
X_new : array-like, shape (n_samples, n_components)
Run Code Online (Sandbox Code Playgroud)
用 iris 数据集检查一下(150, 4),我正在制作 4 台 PC:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from …Run Code Online (Sandbox Code Playgroud) machine-learning pca dimensionality-reduction scikit-learn principal-components
为什么pca在Matlab中使用,我无法得到正交主成分矩阵
例如:
A=[3,1,-1;2,4,0;4,-2,-5;11,22,20];
A =
3 1 -1
2 4 0
4 -2 -5
11 22 20
>> W=pca(A)
W =
0.2367 0.9481 -0.2125
0.6731 -0.3177 -0.6678
0.7006 -0.0150 0.7134
>> PCA=A*W
PCA =
0.6826 2.5415 -2.0186
3.1659 0.6252 -3.0962
-3.9026 4.5028 -3.0812
31.4249 3.1383 -2.7616
Run Code Online (Sandbox Code Playgroud)
这里,每列都是主要组成部分.所以,
>> PCA(:,1)'*PCA(:,2)
ans =
84.7625
Run Code Online (Sandbox Code Playgroud)
但主成分矩阵没有相互正交的成分.
我检查了一些材料,它说它们不仅不相关,而且严格正交.但我无法得到理想的结果.谁能告诉我哪里出错了?
谢谢!