zoukankan      html  css  js  c++  java
  • 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)
    
    
    
  • 相关阅读:
    汉字获取首字母
    .net 实现对DNS服务器的管理
    css使图片变灰
    javascript实现文本框只能输入数字和字母
    解决Outlook不能打开的问题
    javascript实现弹出式登录界面
    asp.net防盗链技术
    javascript中replace()(转帖)
    chm文件无法显示问题
    使用Lucene.NET进行分词、搜索
  • 原文地址:https://www.cnblogs.com/raisok/p/11432985.html
Copyright © 2011-2022 走看看