应用多元统计分析第五章判别分析例题python代码

通过W(X)线性判别函数,判断样本的所属类别。

代码如下:

import numpy as np
	#类别1
X1 = np.mat([[13.85,2.79,7.8,49.6],[22.31,4.67,12.31,47.8],[28.82,4.63,16.18,62.15],[15.29,3.54,7.5,43.20],[28.79,4.9,16.12,58.10]])
    #类别2
X2 = np.mat([[2.18,1.06,1.22,20.60],[3.85,0.8,4.06,47.10],[11.40,0,3.5,0],[3.66,2.42,2.14,15.1],[12.1,0,5.68,0]])
X3=np.mat([[8.85,3.38,5.17,26.10],[28.6,2.4,1.2,127],[20.7,6.7,7.6,30.2],[7.9,2.4,4.3,33.2],[3.19,3.2,1.43,9.9],[12.4,5.1,4.43,24.6],[16.8,3.4,2.31,31.3],[15,2.7,5.02,64]])
def average(dataset):#计算均值矩阵
	ave = []
	a, b = np.shape(dataset)
	for i in range(b):
		n = np.sum(dataset[:,i]) / a
		ave.append(n)
	return np.array(ave)

def compute_sw(dataset, ave):#计算单一类组内离差阵
	sw = 0
	a, b = np.shape(dataset)
	for i in range(a):
		sw += np.dot((dataset[i,:] - ave).T, dataset[i,:] - ave)
	return np.array(sw)
x1_sw = compute_sw(X1, average(X1))
x2_sw = compute_sw(X2, average(X2))
x12=(average(X1)+average(X2))/2
Sw = (x1_sw + x2_sw)/3#计算合并样本协查阵

pinv = np.linalg.pinv(Sw)#计算合并样本协查阵的逆
c,d=np.shape(X3)
for i in range(c):
    wx=np.dot((X3[i,:]-x12),np.dot(pinv,(average(X1)-average(X2)).T))#线性叛别函数
    print(wx)
    if wx>0:
        print("第")
        print(i+1)
        print("个样本属于含钾盐泉")
    else:
        print("第")
        print(i+1)
        print("个样本属于含钠盐泉")

运行结果如下图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值