精华内容
下载资源
问答
  • applied multivariate statistical analysis 里用到的数据
  • 鸢尾花数据集是非常经典的数据集,常被用来数据挖掘初学者进行数据探索,本文基于鸢尾花数据集分别进行K-均值聚类、层次聚类、DBSCAN(密度聚类),比较这三类算法的区别。 一、K-均值聚类 关于K-均值聚类算法的...

    鸢尾花数据集是非常经典的数据集,常被用来数据挖掘初学者进行数据探索,本文基于鸢尾花数据集分别进行K-均值聚类、层次聚类、DBSCAN(密度聚类),比较这三类算法的区别。

    一、K-均值聚类

    关于K-均值聚类算法的详细介绍可见《多元统计分析——聚类分析——K-均值聚类(K-中值、K-众数)》。

    二、层次聚类

    关于层次聚类算法的详细介绍可见《多元统计分析——聚类分析——层次聚类》。

    三、DBSCAN(密度聚类)

    关于DBSCAN(密度聚类)聚类算法的详细介绍可见《多元统计分析——聚类分析——DBSCAN(基于密度的聚类)》。

    本文主要目的是结合数据集探索三者的区别,接下来我们直接上案例。

    四、案例:鸢尾花数据集

    1、导入数据

    import matplotlib.pyplot as plt  
    import numpy as np  
    from sklearn.cluster import KMeans
    from sklearn import datasets 
    from sklearn.decomposition import PCA, FactorAnalysis
    
    iris = datasets.load_iris() 
    print(iris.data.shape)
    

    输出:

    (150, 4)
    

    2、原始数据集PCA降维及可视化

    iris_pca = PCA(n_components=2)
    iris_pca_score = iris_pca.fit_transform(iris.data)
    print(iris_pca.explained_variance_ratio_ )

    输出:

    [0.92461872 0.05306648]
    

    降成二维能够解释将近98%的方差。我们进一步可视化,查看原始标签下的数据分布:

    for cluster, marker in zip(range(3), ['x', 'o', '+']):
        x_axis = iris_pca_score[:, 0][iris.target == cluster] #降维之后第一维数据
        y_axis = iris_pca_score[:, 1][iris.target == cluster] #降维之后第二维数据
        plt.scatter(x_axis, y_axis, marker=marker)
        
    plt.show()

    输出:

    3、KMeans、DBSCAN、层次聚类效果比较

    为了区别不同数据分布(比如噪声)对聚类效果的差异,聚类之前我们不进行降维,我们降维的目的是为了方便绘制图形。

    #K-均值
    from sklearn.cluster import KMeans
    from sklearn.cluster import dbscan
    import pandas as pd
    import scipy.cluster.hierarchy as sch  #层次聚类
    import matplotlib.pyplot as plt
    
    
    
    fig=plt.figure(figsize=[16, 3])
    
    #原始标签
    ax=fig.add_subplot(1,4,1)
    
    for cluster, marker in zip(range(3), ['x', 'o', '+']):
        x_axis = iris_pca_score[:, 0][iris.target == cluster] #降维之后第一维数据
        y_axis = iris_pca_score[:, 1][iris.target == cluster] #降维之后第二维数据
        plt.scatter(x_axis, y_axis, marker=marker)
        
    plt.title('cluster by target')
    
    #KMeans聚类
    ax=fig.add_subplot(1,4,2)
    iris_kmeans = KMeans(n_clusters=3, n_init=15) 
    iris_kmeans.fit(iris.data)
    for cluster, marker in zip(range(3), ['x', 'o', '+']):
        x_axis = iris_pca_score[:, 0][iris_kmeans.labels_ == cluster]
        y_axis = iris_pca_score[:, 1][iris_kmeans.labels_ == cluster]
        plt.scatter(x_axis, y_axis, marker=marker)
        
    plt.title('cluster by KMeans')
    
    #DBSCAN
    ax=fig.add_subplot(1,4,3)
    
    core_samples,cluster_ids = dbscan(iris.data, eps = 0.4, min_samples=4) # eps为邻域半径,min_samples为最少点数目
    cluster_ids
    
    for cluster, marker in zip(range(-1,3,1), ['x', 'o', '+','*']):
        x_axis = iris_pca_score[:, 0][cluster_ids == cluster]
        y_axis = iris_pca_score[:, 1][cluster_ids == cluster]
        plt.scatter(x_axis, y_axis, marker=marker)
    plt.title('cluster by DBSCAN')
    
    #层次聚类
    ax=fig.add_subplot(1,4,4)
    
    Z = sch.linkage(iris.data, method ='ward',metric='euclidean') #euclidean代表欧式距离。
    
    label = sch.cut_tree(Z,n_clusters=3)
    
    A=pd.DataFrame(iris.data,columns=iris.feature_names)
    A['label']=label
    
    for cluster, marker in zip(range(3), ['x', 'o', '+']):
        x_axis = iris_pca_score[:, 0][A['label'] == cluster]
        y_axis = iris_pca_score[:, 1][A['label'] == cluster]
        plt.scatter(x_axis, y_axis, marker=marker)
        
    plt.title('cluster by hierarchy')
    

    输出:

    4、聚类结果分析

    从上面三种聚类效果图可以看出,k-means聚类和层次聚类分析结果大致相同,但是两者与DBSCAN的结果(较多的噪声点)不一样。

    层次聚类适用于小样本的聚类,相对于k-means时间复杂度较高,计算较慢。

    k-means对于大型数据集也是简单高效、时间复杂度、空间复杂度低。 最重要是数据集大时结果容易局部最优;需要预先设定K值,对最先的K个点选取很敏感;对噪声和离群值非常敏感;只用于numerical类型数据;不能解决非凸数据。

    DBSCAN对噪声不敏感;能发现任意形状的聚类。 但是聚类的结果与参数有很大的关系;DBSCAN用固定参数识别聚类,但当聚类的稀疏程度不同时,相同的判定标准可能会破坏聚类的自然结构,即较稀的聚类会被划分为多个类或密度较大且离得较近的类会被合并成一个聚类。

    展开全文
  • 《应用多元统计分析》王学民-书中例题习题数据及SAS代码
  • 【R描述统计分析多元数据


    在R中,计算多元数据的均值与方差采用数据框的结构输入数据,计算比较方便。

    二元数据的数据特征及相关系数

    例如对矿石中的两种成分进行统计分析:
    在这里插入图片描述

    ore<-data.frame(
         x=c(67, 54, 72, 64, 39, 22, 58, 43, 46, 34),
         y=c(24, 15, 23, 19, 16, 11, 20, 16.1, 17, 13)
    )
    ore.m<-mean(ore); ore.m
    ore.s<-cov(ore); ore.s
    ore.r<-cor(ore); ore.r
    
    attach(ore)
    cor.test(x,y)
    
    cor.test(x,y, method="spearman")
    
    cor.test(x,y, method="kendall")
    

    mean( ) 函数 计算均值
    cov( ) 函数 计算协方差
    cor( ) 函数 计算相关矩阵(相关系数)
    cov.wt 计算加权协方差
    cor.test 计算相关性检验
    cov(ore) = var(ore)

    二元数据的相关性检验

    对于二元数据:
    在这里插入图片描述
    可以计算出样本的相关系数r
    且总体的相关系数为:
    在这里插入图片描述
    当样本的个数n充分大时,样本的相关系数r可以作为总体相关系数的估计,即样本个数较大时,样本相关,总体也相关。
    问题是:当样本个数n取到多少时,样本相关才能得到总体相关?

    Ruben置信区间的近似逼近公式

    Ruben(鲁宾)给出了总体相关系数的区间估计的近似逼近公式
    设n是样本个数,r是样本相关系数,u是标准正态分布的上α/2分位点,则计算
    在这里插入图片描述
    按照上述计算公式,编写R程序:

    ruben.test<-function(n, r, alpha=0.05){
       u<-qnorm(1-alpha/2)
       r_star<-r/sqrt(1-r^2)
       a<-2*n-3-u^2; b<-r_star*sqrt((2*n-3)*(2*n-5))
       c<-(2*n-5-u^2)*r_star^2-2*u^2
       y1<-(b-sqrt(b^2-a*c))/a
       y2<-(b+sqrt(b^2-a*c))/a
       data.frame(n=n, r=r, conf=1-alpha, 
          L=y1/sqrt(1+y1^2), U=y2/sqrt(1+y2^2))
    }
    

    将n,r调入已编好的ruben.test() 函数中
    在这里插入图片描述
    ①n=6,r=0.8
    置信区间为(﹣0.095,0.97),其置信下界是负数,即使r=0.8,也不能说明总体是相关的
    ②n=25,r=0.7
    置信区间为(0.41,0.85),此时基本能说总体是相关的

    关于置信区间的近似逼近方法还有David提出的图表方法,Kendall和Stuart提出的Fisher逼近方法等。

    Pearson相关性检验

    确认总体是否相关最有效的方法是作总体(X,Y)^T 的相关性检验,可以证明
    在这里插入图片描述
    服从自由度为n-2的t分布
    利用此分布的性质,可以对数据X和Y的相关性进行检验,该方法称为Pearson相关性检验。
    此外,还有Spearman秩检验和Kendall秩检验,R软件中的cor.test()提供了这三种检验方法。

    cor.test()使用方法

    cor.test(x,y,
    alternative = c("two.sided","less","spearman"),
    method = c("pearson","kendall","spearman"),
    exact = NULL, conf.level = 0.95,...)
    

    在这里插入图片描述
    另一种使用格式:

    cor.test(formula, data, subset, na.action, ...)
    

    多元数据的数字特征及相关矩阵

    关于相关性检验,R软件没有为多元数据提供更多的函数,仍是cor.test()作两两分量的相关性检验
    例:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    从计算结果可以看出,X1,X2,X3两两均是不相关的

    多元数据的图表示方法

    轮廓图

    outline<-function(x, txt=TRUE){
       # x is a matrix or data frame of data
       if (is.data.frame(x)==TRUE)
          x<-as.matrix(x)
       m<-nrow(x); n<-ncol(x)
       plot(c(1,n), c(min(x),max(x)), type="n", 
            main="The outline graph of Data",
            xlab="Number", ylab="Value")
       for(i in 1:m){
          lines(x[i,], col=i)
          if (txt==TRUE){
             k<-dimnames(x)[[1]][i]
             text(1+(i-1)%%n, x[i,1+(i-1)%%n], k)
          }
       }
    }
    

    在这里插入图片描述

    星图

    在这里插入图片描述
    R软件中给出了作星图的函数stars()

    stars(x)
    

    在这里插入图片描述
    调整stars中的参数:

    stars(x, full=FALSE, draw.segments = TRUE, 
    key.loc = c(5,0.5), mar = c(2,0,0,0) )
    

    在这里插入图片描述

    调和曲线图

    调和曲线图是Andrews提出来的三角表示法,其思想是将多维空间中的一个点对应于二维平面的一条直线,对于p维数据,假设X_r是第r观测值,即
    在这里插入图片描述
    则对应的调和曲线是
    在这里插入图片描述
    n次观测数据对应n条曲线,在同一张纸上就是一张调和曲线图,当各变量数据的数值相差太大时,先标准化再画图。
    按照上述计算式,编写调和曲线函数:

    unison<-function(x){
       # x is a matrix or data frame of data
       if (is.data.frame(x)==TRUE)
          x<-as.matrix(x)
       t<-seq(-pi, pi, pi/30)
       m<-nrow(x); n<-ncol(x)
       f<-array(0, c(m,length(t)))
       for(i in 1:m){
          f[i,]<-x[i,1]/sqrt(2)
          for( j in 2:n){
              if (j%%2==0) 
                 f[i,]<-f[i,]+x[i,j]*sin(j/2*t)
              else
                 f[i,]<-f[i,]+x[i,j]*cos(j%/%2*t)
          } 
       }
       plot(c(-pi,pi), c(min(f),max(f)), type="n", 
            main="The Unison graph of Data",
            xlab="t", ylab="f(t)")
      for(i in 1:m) lines(t, f[i,] , col=i)
    }
    

    unison(x)得到图像如下
    在这里插入图片描述

    展开全文
  • LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。...

    一、LDA的思想

    Fisher线性判别分析(Fisher's Linear Discriminant Analysis, 以下简称LDA)是一种有监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。通俗理解就是:将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大,如下图所示。

    只所以称为线性判别分析,其实是因为其最早用在分类当中:判别分析是寻找一种“分类规则”,即利用变量的函数(判别函数)来描述(解释)两组或多组之间的区别。

    例如对于银行来说,最重要的是判断申请者是否能够成功还款,以此作为是否给其贷款的依据。判别分析即利用历史数据(成功还款和未偿还贷款),通过两类人的一些有区别的特征(年龄、收入等),找到一个“最优”的规则区分这两类人。

    二、二类LDA原理

    1、原理

    上面我们已经知道,Fisher线性判别分析的思想是寻找两个群体“最好”的线性判别法则,来最大限度的区分两个群体。从几何角度上理解,其实也就是找到一个最佳的投影线(定义为a),使其在该投影线上的投影最大限度的分开,对于该投影线,我们只要找到其方向就可以了。如下图所示:

    我们假设有两个群体,总体均值向量\mu _{1}\neq \mu _{2},但具有相同的协防差矩阵\Sigma

    从中抽取两个随机样本:

    第一个p维样本y_{11}......y_{1n}的样本均值向量为\overline{y}_{1},则样本的协方差矩阵为\frac{\Sigma }{n_{1}}

    第二个p维样本y_{21}......y_{2n}的样本均值向量为\overline{y}_{2},则样本的协方差矩阵为\frac{\Sigma }{n_{2}}

    类似于两样本的t检验,我们比较两个群体,只要比较两个群体的均值即可。这里也是,我们只要使得原始均值向量\overline{y}_{1},\overline{y}_{2}a上的投影距离最大(下图黄线的长度)即可。

    由线性代数我们知道:如果a为单位向量,{a}'y即为ya方向上的投影向量长度。\overline{y}_{1}a方向上的投影向量长度我们可以表示为:\overline{Z}_{1}={a}'\overline{y}_{1}\overline{y}_{2}a方向上的投影向量长度表示为:\overline{Z}_{2}={a}'\overline{y}_{2},两投影的距离为d=\overline{Z}_{1}-\overline{Z}_{2}={a}'\overline{y}_{1}-{a}'\overline{y}_{2},即我们的目的:找到一个a,使得d=\overline{Z}_{1}-\overline{Z}_{2}={a}'\overline{y}_{1}-{a}'\overline{y}_{2}最大。

    上面 d=\overline{Z}_{1}-\overline{Z}_{2}={a}'\overline{y}_{1}-{a}'\overline{y}_{2},我们衡量的是欧式距离,我们知道欧式距离的缺陷在于:1、欧式距离易受变量不同量纲的影响;2、没有考虑变量之间的相关性。

    关于欧式距离和马氏距离的区别可参考:《多元统计分析——欧式距离和马氏距离

    我们知道:马氏距离即是我们将向量“标准化”过后的欧式距离,如何标准化,即乘上向量其自身的协防差矩阵的逆的矩阵根

    {a}'\overline{y}_{1}-{a}'\overline{y}_{2}的协方差矩阵cov(a'(\overline{y_{1}}-\overline{y_{2}})) =[a'(\overline{y_{1}}-\overline{y_{2}})][a'(\overline{y_{1}}-\overline{y_{2}})]'=a'(\overline{y_{1}}-\overline{y_{2}})(\overline{y_{1}}-\overline{y_{2}})'a

    其中(\overline{y_{1}}-\overline{y_{2}})(\overline{y_{1}}-\overline{y_{2}})'=cov(\overline{y_{1}}-\overline{y_{2}})=\frac{\Sigma }{n_{1}}+\frac{\Sigma }{n_{2}}=\Sigma(\frac{1 }{n_{1}}+\frac{1}{n_{2}}),由上面的假设我们已知两总体是具有相同的协方差矩阵\Sigma,借助t检验中的“两均值之差的方差等于两均值方差的之和”的思想,我们知道多元统计分析同样具有这样的性质:cov(\overline{y_{1}}-\overline{y_{2}})=cov(\overline{y_{1}})+cov(\overline{y_{2}})=\frac{\Sigma }{n_{1}}+\frac{\Sigma }{n_{2}}

    (\overline{y_{1}}-\overline{y_{2}})(\overline{y_{1}}-\overline{y_{2}})=\Sigma(\frac{1 }{n_{1}}+\frac{1}{n_{2}})代入到a'(\overline{y_{1}}-\overline{y_{2}})(\overline{y_{1}}-\overline{y_{2}})'a,可得{a}'\overline{y}_{1}-{a}'\overline{y}_{2}的协方差矩阵cov(a'(\overline{y_{1}}-\overline{y_{2}}))=a'\Sigma(\frac{1 }{n_{1}}+\frac{1}{n_{2}})a=(\frac{1 }{n_{1}}+\frac{1}{n_{2}})a'\Sigma a

    {a}'\overline{y}_{1}-{a}'\overline{y}_{2}“标准化过后”的马氏距离为:[(\frac{1 }{n_{1}}+\frac{1}{n_{2}})a'\Sigma a]^{-\frac{1}{2}}[{a}'\overline{y}_{1}-{a}'\overline{y}_{2}],化简得\frac{​{a}'(\overline{y}_{1}-\overline{y}_{2})}{\sqrt{(\frac{1 }{n_{1}}+\frac{1}{n_{2}})a'\Sigma a}}

    总体的协方差矩阵\Sigma我们一般是未知的,我们一般以样本的协方差矩阵S_{pl}代替,得\frac{​{a}'(\overline{y}_{1}-\overline{y}_{2})}{\sqrt{(\frac{1 }{n_{1}}+\frac{1}{n_{2}})a'S_{pl} a}}

    为了避免负数的出现,我们对马氏距离加上一个平方,则投影后马氏距离的平方,我们定义成t^{2}(a)

    t^{2}(a)=\frac{[{a}'(\overline{y}_{1}-\overline{y}_{2})]^{2}}{(\frac{1 }{n_{1}}+\frac{1}{n_{2}})a'S_{pl} a}\propto \frac{[{a}'(\overline{y}_{1}-\overline{y}_{2})]^{2}}{a'S_{pl} a}

    Fisher线性判别分析的思想即为找到一个a使得t^{2}(a)最大,由于\frac{1 }{n_{1}}+\frac{1}{n_{2}}t^{2}(a)求极值无影响,可去掉。

    2、利用柯西不等式求最大值

    由上面我们已知:寻找两个群体“最好”的线性判别法则问题转换为求t^{2}(a)\propto \frac{[{a}'(\overline{y}_{1}-\overline{y}_{2})]^{2}}{a'S_{pl} a}极值得问题。

    我们知道柯西不等式的一般表示式为:(a'b)^{2}\leq (a'a)(b'b),当a=b时取等。

    我们令a=W^{\frac{1}{2}}ab=W^{-\frac{1}{2}}b,则不等式左边变成:[(W^{\frac{1}{2}}a)'(W^{-\frac{1}{2}}b)]^{2}=[a'(W^{\frac{1}{2}})'W^{-\frac{1}{2}}b]^{2}=(a'b)^{2},不等式右边变成[(W^{\frac{1}{2}}a)'W^{\frac{1}{2}}a][(W^{-\frac{1}{2}}b)'W^{-\frac{1}{2}}b]=[a'(W^{\frac{1}{2}})'W^{\frac{1}{2}}a][b'(W^{-\frac{1}{2}})'W^{-\frac{1}{2}}b]=(a'Wa)(b'W^{-1}b),组成变形后的柯西不等式为:(a'b)^{2}\leq(a'Wa)(b'W^{-1}b),当W^{\frac{1}{2}}a=W^{-\frac{1}{2}}b时取等。

    (a'b)^{2}\leq(a'Wa)(b'W^{-1}b)可继续变形为\frac{(a'b)^{2}}{a'Wa}\leq b'W^{-1}b,取等条件可以变形为:a=W^{-\frac{1}{2}}W^{-\frac{1}{2}}b=W^{-1}b

    关于柯西不等式可参考:《线性代数——柯西不等式

    参考柯西不等式:\frac{(a'b)^{2}}{a'Wa}\leq b'W^{-1}ba=W^{-1}b时取等,我们可以求t^{2}(a)\propto \frac{[{a}'(\overline{y}_{1}-\overline{y}_{2})]^{2}}{a'S_{pl} a}的极值条件,即为a=S_{pl}^{-1}(\overline{y}_{1}-\overline{y}_{2})时,t^{2}(a)取最大值。

    其中,a=S_{pl}^{-1}(\overline{y}_{1}-\overline{y}_{2})被称为判别函数系数a'y被称为Fisher判别函数。

    3、案例

    有两个样本数据,有两个维度进行刻画,已知第一个样本\overline{y}_{1}=\begin{pmatrix} 36.4\\ 62.6 \end{pmatrix},第二个样本\overline{y}_{2}=\begin{pmatrix} 39.0\\ 60.4 \end{pmatrix},协方差矩阵S_{pl}=\begin{pmatrix} 7.92 & 5.68\\ 5.68 & 6.29 \end{pmatrix},样本数据分布如下:

     如果这些点投影到y_{1}轴或者y_{2}轴,会有较大的重叠,在单个维度上,我们可以用t检验进行检验:

    y_{1}轴上:t_{1}=\frac{\overline{y}_{11}-\overline{y}_{21}}{\sqrt{s_{11}(1/n_{1}+1/n_{2})}}=\frac{36.4-39.0}{\sqrt{7.92(1/5+1/7)}}=-1.58

    y_{2}轴上:t_{2}=\frac{\overline{y}_{12}-\overline{y}_{22}}{\sqrt{s_{22}(1/n_{1}+1/n_{2})}}=\frac{62.6-60.4}{\sqrt{6.29(1/5+1/7)}}=1.48

    双侧检验t_{\alpha /2}(10)=2.23(显著性水平\alpha =0.05),即两样本在单个维度上的差别不显著。

    但是,我们还是可以很好的将其分开,如下图:

     利用上面知识,可计算出判别函数系数a=S_{pl}^{-1}(\overline{y}_{1}-\overline{y}_{2})=\begin{pmatrix} -1.633\\ 1.820 \end{pmatrix},判别函数Z=a'y=-1.6333Y_{1}+1.820Y_{2}

    其中Y_{1}Y_{2}分别代表了样本两个维度的数据,我们将原始数据代入到判别函数Z,算出来的Z即为降维过后的数据(点在a上的投影坐标),即实现了原来二维的数据降到一维。

    注意:Z=a'y=-1.6333Y_{1}+1.820Y_{2}中,系数代表每个变量对区分规则的贡献,如果变量的量级差别较大,我们可以先进行标准化处理再进行判别分析。

    三、多类LDA原理

    1、原理

    现有g个群体G_{k}k=1,....,g,第k个群体样本为y_{k1},......,y_{kn_{k}},其中n_{k}代表第第k个群体的样本容量,第k个群体的样本均值为\overline{y}_{k},所有群体的样本均值为\overline{y}=\frac{1}{g}\sum ^{g}_{k=1}\overline{y}_{k}

    借助简单统计学中的方差分析的思想:

    如果各个群体均数相等,F的数值不会太大(在1的左右不会太远)。相反,如果的数值过大,“各个群体均数相等”这个假设就值得怀疑了。 

    关于方差分析可参考:《统计推断——假设检验——方差分析

    而LDA的思想可以用一句话概括,就是“经过a投影后组内方差最小,组间方差最大”,当然这个a就可能有多个了。

    组间平方和为:

    SSG=\sum ^{g}_{k=1}n_{k}(a'\overline{y}_{k}-a'\overline{y})^{2}=a'[\sum ^{g}_{k=1}n_{k}(\overline{y}_{k}-\overline{y})'(\overline{y}_{k}-\overline{y})]a,我们令\sum ^{g}_{k=1}n_{k}(\overline{y}_{k}-\overline{y})'(\overline{y}_{k}-\overline{y})=B,得到:

    SSG=a'BaB代表原始样本数据的组间方差矩阵。

    组内平方和为:

    SSE=\sum ^{g}_{k=1}\sum ^{n_{k}}_{i=1}(a'y_{ki}-a'\overline{y}_{k})^{2}=a'[\sum ^{g}_{k=1}\sum ^{n_{k}}_{i=1}(y_{ki}-\overline{y}_{k})'(y_{ki}-\overline{y}_{k})]a,我们令\sum ^{g}_{k=1}\sum ^{n_{k}}_{i=1}(y_{ki}-\overline{y}_{k})'(y_{ki}-\overline{y}_{k})=W,得到:

    SSE=a'WaW代表原始样本数据的组内方差矩阵。

    F=\frac{SSG/g-1}{SSE/n-g}=\frac{n-g}{g-1}\cdot \frac{a'Ba}{a'Wa},如果g组均值有显著差异,则F数值充分大。

    \frac{n-g}{g-1}对求极值无影响,则可以去掉,故我们应求令\frac{a'Ba}{a'Wa}最大化时的a值。

    \frac{a'Ba}{a'Wa}这一表达在数学物理中被称为广义瑞利熵,关于广义瑞利熵的概念和应用大家可以自己查阅相关资料。我们这边直接应用性质进行\frac{a'Ba}{a'Wa}最大化的求解。

    最大化瑞利熵的必要条件是:存在一个向量W使得Ba=\lambda Wa,稍微变形一下:W^{-1}Ba=\lambda a,这个正好就是我们对特征值和特征向量的定义一致,即\lambda是方阵W^{-1}B的特征值,a为方阵W^{-1}B\lambda为特征值对应的特征向量。即求F数值得最大化问题转换为求W^{-1}B的特征根问题。

    2、LDA算法流程

    以下是LDA算法的大致流程:

    • 计算组间方差矩阵B=\sum ^{g}_{k=1}n_{k}(\overline{y}_{k}-\overline{y})'(\overline{y}_{k}-\overline{y})
    • 计算组内方差矩阵W=\sum ^{g}_{k=1}\sum ^{n_{k}}_{i=1}(y_{ki}-\overline{y}_{k})'(y_{ki}-\overline{y}_{k})
    • 计算矩阵W^{-1}B
    • 计算W^{-1}B的特征值\lambda _{1}\lambda _{2},....,\lambda _{s}以及对应的特征向量e_{1}e_{2},...,e_{s}
    • 将特征值\lambda _{1}\lambda _{2},....,\lambda _{s}按照从大到小的顺序排列,选择非零特征值及对应的特征向量(s\leq min(g-1,p)g代表组数,p代表样本数据维度,如原始数据是3个组群,5个维度的数据,则非零特征值最多为2个),注意:非零特征值的意思是抛弃无限接近0的特征值,可通过特征值的占比来筛选特征值。
    • 将样本Y投影到新的空间Z,即得到了LDA降维后的结果。
    • ***计算Fisher判别函数:Z={a}'Y={e_{s}}'Y,其中Y根据数据维度可分解为\left [ y_{1},y_{2},...,y_{p} \right ],注意:输出的判别函数即为分类的规则,有多少个特征向量e_{s},就有多少个判别式****。 

    注意:1、上面第四步所说的非零特征值其实是特征值无限接近0的特征值,即特征值占总特征值之和的占比很小。

               2、第七步中计算Fisher判别函数,是多元统计分析用于刻画分类规则而产生的,如果单纯为了实现降维,可跳过这一步。

    3、案例

    科考人员从加利福尼亚的砂岩中收集了原油样本。这些原油分别来自三类地层(3个类别)中的一类:

    现试图基于砂岩中五种化学成分含量(5个维度),找到一种划分地层类别的方法 

    数据样本如下:

    使用pairplot()函数可以画全局图,即两两变量之间的分布关系。

    对角线的分布图,单从各个维度上看,各组的数据都有较大的重叠,即从单一维度上,无法较好的区分数据。

    使用LDA算法降维过程:

    step1:计算组间方差矩阵B=\sum ^{g}_{k=1}n_{k}(\overline{y}_{k}-\overline{y})'(\overline{y}_{k}-\overline{y})

    #租的标签
    clusters=np.unique(data['label'])
    
    #组间协方差矩阵
    B = np.zeros((data.shape[1]-1,data.shape[1]-1)) #构造一个和原始数据特征维度一样的方阵B
    y_hat = data.iloc[:,:-1].mean(0)  #所有样本的平均值
    for i in clusters:
        Ni = data[data['label'] == i].iloc[:,:-1].shape[0]  #各个样本的样本数
        ui = data[data['label'] == i].iloc[:,:-1].mean(0)  #某个类别的平均值
        SBi = Ni*np.dot(np.mat(ui - y_hat).T,np.mat(ui - y_hat))
        B += SBi
    B

    输出:

    array([[ 7.82102934e+01, -4.51200260e+02,  7.66358682e+00,
            -4.46707730e+01, -7.10295522e+01],
           [-4.51200260e+02,  2.65873662e+03, -4.31571861e+01,
             2.50295766e+02,  4.89521636e+02],
           [ 7.66358682e+00, -4.31571861e+01,  7.70884752e-01,
            -4.51741260e+00, -5.45103771e+00],
           [-4.46707730e+01,  2.50295766e+02, -4.51741260e+00,
             2.65002117e+01,  2.99625104e+01],
           [-7.10295522e+01,  4.89521636e+02, -5.45103771e+00,
             2.99625104e+01,  1.78617620e+02]])

    step2:计算组内方差矩阵W=\sum ^{g}_{k=1}\sum ^{n_{k}}_{i=1}(y_{ki}-\overline{y}_{k})'(y_{ki}-\overline{y}_{k})

    #组内协方差矩阵
    W = np.zeros((data.shape[1]-1,data.shape[1]-1))  #构造一个和原始数据特征维度一样的方阵W
    for i in clusters:
        data_i=data[data['label'] == i]
        data_i=data_i.iloc[:,:-1]
        y_i_hat=data_i.mean(0)     #组内平均值 
        for i in range(data_i.shape[0]): 
            data_i_k = data_i.iloc[i,:]
            Swi = np.dot(np.mat(data_i_k-y_i_hat).T,np.mat(data_i_k-y_i_hat))  
            W += Swi
    W

    输出:

    array([[ 9.19015584e+01,  1.02800260e+02, -2.87254978e+00,
             1.48740260e+00,  3.66821818e+01],
           [ 1.02800260e+02,  1.73134338e+03,  9.67186147e-01,
             6.24842338e+01,  8.55836364e+00],
           [-2.87254978e+00,  9.67186147e-01,  1.43065599e+00,
             2.92030519e+00, -1.33146970e+00],
           [ 1.48740260e+00,  6.24842338e+01,  2.92030519e+00,
             2.45342623e+01,  1.56760636e+01],
           [ 3.66821818e+01,  8.55836364e+00, -1.33146970e+00,
             1.56760636e+01,  1.71479255e+02]])

    step3:计算矩阵W^{-1}B

    S = np.dot(np.linalg.inv(W),B) 
    S

    输出:

    array([[ 1.82516012e+00, -1.07591870e+01,  1.74495236e-01,
            -1.01190860e+00, -1.98628881e+00],
           [-2.80144016e-01,  1.70631002e+00, -2.57448644e-02,
             1.48018421e-01,  3.83404462e-01],
           [ 1.41480726e+01, -7.79818659e+01,  1.45518636e+00,
            -8.56489218e+00, -7.64169791e+00],
           [-2.62000045e+00,  1.37399432e+01, -2.82742831e-01,
             1.67932992e+00,  4.11969952e-01],
           [-4.41300084e-01,  3.20954366e+00, -3.06844034e-02,
             1.63783970e-01,  1.35039633e+00]])

    step4:计算W^{-1}B的特征值\lambda _{1}\lambda _{2},....,\lambda _{s}以及对应的特征向量e_{1}e_{2},...,e_{s}

    eigVals,eigVects = np.linalg.eig(S)  #求特征值,特征向量
    eigpairs = [(np.abs(eigVals[i]), eigVects[:,i]) for i in range(len(eigVals))]  #将特征值和对应的特征向量绑定成一个元祖。
    eigpairs

    输出:

    [(6.736305722392899,
      array([ 0.12841268+0.j, -0.01991815+0.j,  0.97486544+0.j, -0.17787167+0.j,
             -0.03335415+0.j])),
     (6.245004513516506e-17,
      array([-0.30577419+0.j, -0.01618153+0.j,  0.9340433 +0.j, -0.18296885+0.j,
             -0.01805021+0.j])),
     (1.2800770307908278,
      array([ 0.03545112+0.j, -0.01766616+0.j, -0.93249504+0.j,  0.32884656+0.j,
             -0.14402803+0.j])),
     (3.782695793427638e-16,
      array([ 0.20869023-0.05456166j,  0.02924344-0.02887822j,
              0.93259111+0.j        ,  0.24577484+0.14294114j,
             -0.0099238 +0.03346897j])),
     (3.782695793427638e-16,
      array([ 0.20869023+0.05456166j,  0.02924344+0.02887822j,
              0.93259111-0.j        ,  0.24577484-0.14294114j,
             -0.0099238 -0.03346897j]))]

    step5:将特征值\lambda _{1}\lambda _{2},....,\lambda _{s}按照从大到小的顺序排列,选择非零特征值及对应的特征向量(s\leq min(g-1,p)g代表组数,p代表样本数据维度,如原始数据是3个组群,5个维度的数据,则非零特征值最多为2个),注意:非零特征值的意思是抛弃无限接近0的特征值,可通过特征值的占比来筛选特征值。

    eigpairs = sorted(eigpairs, key=lambda k: k[0], reverse=True) # 根据特征值降序排序
    eigpairs

    输出:

    [(6.736305722392899,
      array([ 0.12841268+0.j, -0.01991815+0.j,  0.97486544+0.j, -0.17787167+0.j,
             -0.03335415+0.j])),
     (1.2800770307908278,
      array([ 0.03545112+0.j, -0.01766616+0.j, -0.93249504+0.j,  0.32884656+0.j,
             -0.14402803+0.j])),
     (3.782695793427638e-16,
      array([ 0.20869023-0.05456166j,  0.02924344-0.02887822j,
              0.93259111+0.j        ,  0.24577484+0.14294114j,
             -0.0099238 +0.03346897j])),
     (3.782695793427638e-16,
      array([ 0.20869023+0.05456166j,  0.02924344+0.02887822j,
              0.93259111-0.j        ,  0.24577484-0.14294114j,
             -0.0099238 -0.03346897j])),
     (6.245004513516506e-17,
      array([-0.30577419+0.j, -0.01618153+0.j,  0.9340433 +0.j, -0.18296885+0.j,
             -0.01805021+0.j]))]

     计算特征值占比:

    # 通过特征值的比例来筛选特征值
    for i,j in enumerate(eigpairs):
        print('eigVal%s: %f' %(i+1, (j[0]/eigVals.sum())))

    输出:

    eigVal1: 0.840317
    eigVal2: 0.159683
    eigVal3: 0.000000
    eigVal4: 0.000000
    eigVal5: 0.000000

    筛选特征向量组成映射矩阵:

    #选择非零特征值对应的特征向量作为映射矩阵Z
    Z= np.vstack((eigpairs[0][1], eigpairs[1][1])).T
    Z

    输出:

    array([[ 0.12841268+0.j,  0.03545112+0.j],
           [-0.01991815+0.j, -0.01766616+0.j],
           [ 0.97486544+0.j, -0.93249504+0.j],
           [-0.17787167+0.j,  0.32884656+0.j],
           [-0.03335415+0.j, -0.14402803+0.j]])

    step6:将样本Y投影到新的空间Z,即得到了LDA降维后的结果,降维后为2维特征。

    data_=np.dot(np.mat(data.iloc[:,:-1]),Z)
    data_

    输出:

    matrix([[-1.98240436+0.j, -0.38325885+0.j],
            [-2.23895967+0.j, -0.24869691+0.j],
            [-1.68704195+0.j, -0.142058  +0.j],
            [-2.13486186+0.j, -0.26578783+0.j],
            [-2.17974478+0.j, -0.03259639+0.j],
            [-1.74667874+0.j, -0.13214131+0.j],
            [-1.55953271+0.j, -0.13844398+0.j],
            [-1.68508356+0.j,  0.72475706+0.j],
            [-1.1974488 +0.j,  0.60711313+0.j],
            [-1.17539724+0.j,  1.19866906+0.j],
            [-0.46583313+0.j,  1.35188424+0.j],
            [-1.50070354+0.j,  1.37555728+0.j],
            [-0.75650544+0.j,  0.6157262 +0.j],
            [-1.31782703+0.j,  0.74866093+0.j],
            [-1.32474307+0.j,  1.14561945+0.j],
            [-1.26497509+0.j,  0.19023476+0.j],
            [-1.816251  +0.j,  0.92796843+0.j],
            [-1.48223369+0.j, -0.29111897+0.j],
            [ 0.00748193+0.j, -0.26936795+0.j],
            [-0.08522769+0.j,  0.23168825+0.j],
            [-0.41231509+0.j,  0.83135552+0.j],
            [ 0.23014115+0.j, -0.0957719 +0.j],
            [ 0.02054684+0.j,  0.06162732+0.j],
            [ 0.48231118+0.j,  0.17544311+0.j],
            [ 0.11349465+0.j,  0.32497595+0.j],
            [-0.11256643+0.j,  0.03207345+0.j],
            [ 0.46192225+0.j, -0.2352691 +0.j]])

     降维后的数据可视化:

    data_=pd.DataFrame(data_)
    data_['label']=data['label']
    plt.scatter(data_[0],data_[1],c=data['label'],cmap='rainbow')

    输出:

    step7:计算Fisher判别函数:Z={a}'Y={e_{s}}'Y,其中Y根据数据维度可分解为\left [ y_{1},y_{2},...,y_{p} \right ],注意:输出的判别函数即为分类的规则,有多少个特征向量e_{s},就有多少个判别式。 

    本案例的降维之后的2维数据,第一维度可用判别式Z_{1}=0.1284y_{1}-0.0199y_{2}+0.9748y_{3}-0.1778y_{4}-0.0333y_{5}表示,第二维度可用判别式Z_{2}= 0.0354y_{1}-0.0176y_{2}-0.9324y_{3} +0.3288y_{4} -0.1440y_{5}表示。

    五、LDA与PCA的联系和区别

    LDA用于降维,和PCA有很多相同,也有很多不同的地方,因此值得好好的比较一下两者的降维异同点。

    1、相同点:

    • 两者均可以对数据进行降维。
    • 两者在降维时均使用了矩阵特征分解的思想。
    • 两者都假设数据符合高斯分布。

    2、不同点:

    • LDA是有监督的降维方法,而PCA是无监督的降维方法(可以理解为LDA寻求的是两个或多个群体之间距离最大化的线性组合,而PCA中只有一个群体,目标是找到能使这个群体中个体之间分得最开的变量组合)。
    • LDA降维最多降到类别数k-1的维数,所以当数据维度很高,但是类别数少的时候,算法并不适用。而PCA没有这个限制。
    • LDA除了可以用于降维,还可以用于分类。
    • LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。

        这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。

     我们知道:LCA是选组间变异最大的投影方向(可理解为每组均值的变异),而PCA选择样本点投影具有最大方差的方向。如上图左图,均值相隔较远,则LCA降维之后的效果优于PCA;右图,均值相隔很近,则LDA降维之后的效果不如PCA。

    3、LDA算法主要优点:

    • 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
    • LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

    4、LDA算法主要缺点:

    • LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
    • LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。目前有一些LDA的进化版算法可以绕过这个问题。
    • LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
    • LDA可能过度拟合数据。

     

     

     

     

    展开全文
  • 判别分析是用一种统计的方法根据已有的数据集分析新的数据属于那一类的方法 适用于数据集较小的情况,因为数据量够大的话神经网络的准确率会比传统的判别分析高得多 距离判别法:  欧氏距离  简单的计算...

     

    判别分析是用一种统计的方法根据已有的数据集去分析新的数据属于那一类的方法

    适用于数据集较小的情况,因为数据量够大的话神经网络的准确率会比传统的判别分析高得多

     

    距离判别法:

      欧氏距离

        简单的计算数据集中每一类的样本均值

        对于新数据,计算新数据与各类样本均值的欧氏距离

        取离此新数据距离最近的类别为此数据的类别

     

      马氏距离

        马氏距离的优点是考虑了各特征之间的相互关系与尺度

        马氏距离的公式 

        当协方差阵为单位阵时,各特征间无关,此时马氏距离等于欧氏距离

        对马氏距离的具体分析在https://www.cnblogs.com/likai198981/p/3167928.html

        

        具体做法

          算出样本对每一类的距离,(在马氏距离中使用哪一类的均值和方差)

          取距离最小的那一类即可

     

    fisher判别法

      fisher判别法是去找一个过原点的直线这个直线要达到的效果是

      

      具体做法:

      

      w即为这条直线的方向

       直线为Y = wX

      临界点y0 = (n0 * u0 +  n1 * u1) / (n0 + n1)

      判别时计算数据在线上的投影,将此投影与聚类的中心投影相比较得出此数据应属于那一类

     

    贝叶斯判别法

      书上的贝叶斯做法如下

      对于两个多元总体

      第一类有n1个样本,第二类有n2个样本

      q1 = n1 / (n1 + n2)

      q2 = n2 / (n1 + n2)

      

      第一类的均值为u1,第二类的均值为u2

      根据总体计算出协方差矩阵Σ

      第i类样本的判别函数为

      fi(x) = ln(qi) - 1/2 ui.T * Σ-1 * ui + x.T *  Σ-1 * ui

      然后对于所有点fi(x)做一个softmax然后其中的最大值就是后验概率

      对于样本来说

     

      首先我要知道密度函数和先验概率

      对于k种分类先验概率为qk, 密度函数为fk

      那么P(g|x)表示样本为x的情况下,种类为g的概率

      P(g|x) = qg * fg(x)   /   ∑ qi * fi(x)

      找出那个最大的P(g|x)即可

     

      一般来说 qg使用样品频率来代替

      计算出g的均值和方差,fg(x)使用正太分布来代替

     

     

      工业上贝叶斯判别法用的也比较多

      但一般来说不是这么用的

      贝叶斯公式如下:

      

      将其移项即可得到

      P(gk|x) = P(x|gk) *  ∑P(xi|gi) / P(x)

      对于多元变量x,我们假设x的各个特征相互独立 设X = (u1,u2, ,,,,,um)

      那么P(x|gk)  = P(u1|gk) * P(u2|gk) **** P(um|gk)

      P(x) = P(u1)*P(u2)*.....*P(um)

      

      概率就用样本中的频率表示即可

     

     

    一些理解

      距离判别法

        欧式距离只考虑了样本中心点的位置

        马氏距离不仅考虑了样本中心点的位置,还考虑了样本各个特征间的相互关系以及样本的度量

      

      fisher判别法

        利用一条过原点的判别函数,使得不同类别在判别函数上投影的距离尽可能大

        使得同一类的距离尽可能小

      

      贝叶斯判别法

        利用样本的先验概率计算密度函数

        再使用密度函数,计算特定点的后验概率

    转载于:https://www.cnblogs.com/shensobaolibin/p/10064921.html

    展开全文
  • 多元统计分析上机题之R语言实现(多元正态分布)

    万次阅读 多人点赞 2015-10-18 16:33:07
    教材使用的是约翰逊的《多元统计分析》第六版,中英文版教材、数据集、讲义见 还参考了王斌会老师的《多元统计分析及R语言建模》本文内容主要为第4章多元正态分布的上机题,图略。 [rmd文档见]...
  • R语言案例分析:多元数据的基本统计分析数据集下载 我们利用该数据集中的Case1来完成下面的R语言操作: > options(digits = 4) #输出结果位数> par(mar=c(4, 4, 2, 1) + 0.1, cex=0.8) # 图形修饰> case1 > head...
  • 多元统计分析】12.逐步回归

    千次阅读 2020-11-05 20:54:23
    一般来说,衡量的标度把不同,可能会造成最优线性回归模型的不同,本节就介绍一些评判最优子的方法,接下来定义数据量为 nnn,可用的自变量总数为 mmm。最优子的选择,总可以先找到变量个数为 k(1≤k≤m)k(1\le ...
  • 在回归分析中,我们以多项式函数拟合数据集,多项式的“项”越多,对数据集的拟合程度越好,如下图。 于是这个问题就转换为求解一个多项式函数(“项”的个数越多拟合越好,可以无穷大),让这个多项式函数无限地...
  • 在UCL机器学习数据库里一个糖尿病数据集,通过这一数据集,学习如何利用线性回归分析来预测糖尿病: 数据地址: https://github.com/susanli2016/Machine-Learning-with-Python/blob/master/diabetes.csv 数据特征...
  • 在《多元统计分析——聚类分析——K-均值聚类(K-中值、K-众数)》当中,我们理解了K-均值聚类的原理,也简单的介绍了K-均值聚类的两个应用场景: 发现异常情况:如果不对数据进行任何形式的转换,只是经过中心标准...
  • 聚类方法 适用场景 代表算法 优点 缺陷 延伸 层次聚类 小样本数据 - ... 对处理大数据,该算法保持可伸缩性和高效率 当簇近似为高斯分布时,它的效果较好 .
  • 第6章 判别分析 文章会用到的数据请在这个网址下下载多元统计分析及R语言建模(第五版)数据
  • 在前面我们讲到《多元统计分析——分类分析——基于Fisher线性判别分析(LDA)的分类》当中,LDA分类完全是基于样本数据来呈现的(找一个投影方向,让两组数据分的最开),没有考虑到任何先验的信息。贝叶斯的优势...
  • MVAPureData.rar

    2021-06-10 15:48:10
    多元统计分析数据集
  • 对有助于营养评估和预测的有用信息的变量(波段)的识别在多元统计建模中起着关键作用。 近年来,研究人员已成功开发出许多连续的,几乎无偏的,稀疏且准确的变量选择方法来克服此问题。 本文比较了四种正则化和一...
  • 多元统计分析概述 变量之间相依性分析 构造预测模型,进行预报控制 进行数值分类,构造分类模式 简化系统结构,探讨系统内核 多元数据的数学表示 多元数据的直观分析 多元线性相关分析 多元线性回归分析 广义和...
  • 向量化的多元统计函数,例如两个多维数据集之间的协方差,相关性和回归 可以计算滞后的关系 可以提供关系的置信度 方便的矢量化“趋势”功能,可消除数据中的时间趋势 从xarray构建:返回的对象可以利用所有xarray....
  • 一、两分类问题 1、LDA分类 1.1、概念 判别分析旨在寻找一种分类规则,而分类分析更进一步:将新的观察对象分到一个合适的类别——即在... 应对这样的数据集,我们可能得用机器学习的方法,或者非线性的方法进行分类。
  • 多元统计:判别分析

    千次阅读 2020-06-09 13:11:26
    多元统计:判别分析一. 判别分析介绍二. 距离判别法1. 欧几里得距离与马氏距离的区别和联系1.1欧几里得距离1.2马氏距离2. 距离判别法的基本思想和方法3. 距离判别法例题三. 贝叶斯判别法1. 贝叶斯判别法原理2. ...
  • ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测 目录 基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯...
  • 转载自:... www.biostatistic.net/统计分析 生物信息 sas matlab R语言 Multivariate Statistics (多元统计) 网址:http://cran.r-project.org/web/views/Multivariate.html 转:h
  • LANDSAT数据用于准备土地使用/土地覆盖图,并使用Arc GIS软件将土壤图数字化。 计算线性和形状参数以优先处理23个子水区,并根据计算出的复合参数(Cp)指定等级。 归为高优先级类别的子流域面临高侵蚀风险; ...
  • 聚类方法 适用场景 代表算法 优点 缺陷 延伸 层次聚类 小样本数据 - ... 对处理大数据,该算法保持可伸缩性和高效率 当簇近似为高斯分布时,它的效果较好 .
  • # 第4章 相关分析与回归分析及R使用 # 4.1一元线性回归分析 # 4.1.1 简单相关分析的R计算 x1 y2 plot(x1, y2) lxy  n=length(x)  return(sum(x*y)-sum(x)*sum(y)/n) } # 计算pearson相关系数 r cor(x1, y2, ...
  • DPS数据处理系统集数据全屏幕编辑制表、试验设计及统计分析多元分析、数值计算以及建立各种数学模型等多功能为一体,可广泛适用于教学、科研和生产各个领域。不管是青年学生、还是高级科研人员,不管是计算机应用...
  • www.biostatistic.net/统计分析 ...Multivariate Statistics (多元统计) 网址:http://cran.r-project.org/web/views/Multivariate.html 转:http://rbbs.biosino.org/Rbbs/posts/list/223.page 基本的R包已经实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,560
精华内容 5,024
关键字:

多元统计分析数据集