• PCA分析的疑问


    R 与python scikit-learn PCA的主成分结果有部分是反的

    • 通过R和python分别计算出来的PCA的结果存在某些主成分的结果是相反的,这些结果是没有问题的,只是表示这个分量被反转了,结果同样是有效的。
    • PCA的本质是寻找一条正交的线,这条线应该是可以有不同方向的

    数据格式

    148    41    72    78
    139    34    71    76
    160    49    77    86
    149    36    67    79
    159    45    80    86
    142    31    66    76
    153    43    76    83
    150    43    77    79
    151    42    77    80
    139    31    68    74
    140    29    64    74
    161    47    78    84
    158    49    78    83
    140    33    67    77
    137    31    66    73
    152    35    73    79
    149    47    82    79
    145    35    70    77
    160    47    74    87
    156    44    78    85
    151    42    73    82
    147    38    73    78
    157    39    68    80
    147    30    65    75
    157    48    80    88
    151    36    74    80
    144    36    68    76
    141    30    67    76
    139    32    68    73
    148    38    70    78
    

    python计算PCA代码

    from sklearn.decomposition import PCA
    pca = PCA()
    data = pd.read_csv("test.xls",sep="	")
    mda = data.T.values
    pca = PCA()
    pc = pca.fit_transform(mda)
    pd.DataFrame(pc)
    
    

    R计算PCA代码

    test<-data.frame(
      X1=c(148, 139, 160, 149, 159, 142, 153, 150, 151, 139,
               140, 161, 158, 140, 137, 152, 149, 145, 160, 156,
               151, 147, 157, 147, 157, 151, 144, 141, 139, 148),
      X2=c(41, 34, 49, 36, 45, 31, 43, 43, 42, 31,
               29, 47, 49, 33, 31, 35, 47, 35, 47, 44,
               42, 38, 39, 30, 48, 36, 36, 30, 32, 38),
      X3=c(72, 71, 77, 67, 80, 66, 76, 77, 77, 68,
              64, 78, 78, 67, 66, 73, 82, 70, 74, 78,
              73, 73, 68, 65, 80, 74, 68, 67, 68, 70),
      X4=c(78, 76, 86, 79, 86, 76, 83, 79, 80, 74,
               74, 84, 83, 77, 73, 79, 79, 77, 87, 85,
               82, 78, 80, 75, 88, 80, 76, 76, 73, 78)
      )
    data=t(as.matrix(test))
    #'princomp'只能在单位比变量多的情况下使用
    data.pr<-princomp(data,cor=TRUE)
    #cor是逻辑变量 当cor=TRUE表示用样本的相关矩阵R做主成分分析
    当cor=FALSE表示用样本的协方差阵S做主
    das = summary(data.pr,loadings=TRUE)
    
    #当样品比比变量少时用fast.prcomp
    data.pca = fast.prcomp(data,retx=T,scale=F,center=T)
    a = summary(data.pca)
    pc = as.data.frame(a$x)
    
    
    
  • 相关阅读:
    HDU1006
    白话经典算法系列之六 高速排序 高速搞定
    pca算法
    硬件这碗饭有那么好吃吗?
    《学会等待》有感
    oracle execute immediate
    HDU 2059 龟兔赛跑
    C++ Tricks(一)—— 判断字符串 string 对象的所有字符都相等
    辨异 —— 数学基本概念
    辨异 —— 数学基本概念
  • 原文地址:https://www.cnblogs.com/raisok/p/11432985.html
Copyright © 2020-2023  润新知