欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

总类内散度阵、总类间散度阵、某类数据的类内散度矩阵 python

程序员文章站 2024-02-11 17:14:52
...
def cacuSW(train_face,k):#利用总的样本矩阵计算总的类内散度矩阵
#train_face:行为样本,所有样本矩阵,每k行为一类为
    m,n=train_face.shape
    sw=np.zeros([n,n])#大小为特征数*特征数
    meanlei=np.zeros([40,n])#计算40个类中,每个类的平均
    meanlei=[]
    for i in range(0,m,k):
        train0=train_face[i:i+k,:]
        sw+=np.cov(train0.T)
        mean0=np.mean(train0,0)
        meanlei.append(mean0)
    meanlei=np.array(meanlei)
    allmean=np.mean(meanlei,0)
    return sw,meanlei,allmean#返回类内散度矩阵,每个类的平均,总平均
def cacuSB(meanlei,allmean,train_face,k):
##计算类间散度矩阵 每k个数据为一类
    sb=np.zeros([train_face.shape[1],train_face.shape[1]])
    for i in range(0,meanlei.shape[0]):
        mean0=meanlei[i,:]-allmean
        sb+=np.cov(mean0.T)
    SB=sb*k
    return sb
   
def cacuSWi(train):#计算某类的类内散度矩阵
##输入为一类数据组成的矩阵m*n,行为样本,
#输出为该类数据的类内散度矩阵:大小为:特征数*特征数
    m,n=train.shape
    mean=np.mean(train,0)###得到该类平均样本
    train=train-mean
    swi=np.dot(train.T,train)
    return swi#返回类内散度矩阵,每个类的平均,总平均

总类内散度阵、总类间散度阵、某类数据的类内散度矩阵 python