总类内散度阵、总类间散度阵、某类数据的类内散度矩阵 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#返回类内散度矩阵,每个类的平均,总平均
上一篇: 微信小程序绘制canvas图片
下一篇: 微信小程序 3D轮播