概率论与随机过程--作业6

计算题

今从1995年世界各国人文发展指数的排序中,选取高发展水平、中等发展水平的国家各五个作为两组样品,另选四个国家作为待判样品作距离判别分析。

数据选自《世界经济统计研究》1996年第1期

|----------------|-------------|---------------------|------------------------|----------------------|--------------------------|
| 类别 | 序号 | 国家名称 | 出生时的 予期寿命(岁) x1 | 成人识字率(%) 1992 x2 | 调正后人均GDP 1992 x3 |
| 第一类 (高发展水平国家) | 1 2 3 4 5 | 美国 日本 瑞士 阿根廷 阿联酋 | 76 79.5 78 72.1 73.8 | 99 99 99 95.9 77.7 | 5374 5359 5372 5242 5370 |
| 第二类 (中等发展水平国家) | 6 7 8 9 10 | 保加利亚 古巴 巴拉圭 格鲁吉亚 南非 | 71.2 75.3 70 72.8 62.9 | 93 94.9 91.2 99 80.6 | 4250 3412 3390 2300 3799 |
| 待判样品 | 11 12 13 14 | 中国 罗马尼亚 希腊 哥伦比亚 | 68.5 69.9 77.6 69.3 | 79.3 96.9 93.8 90.3 | 1950 2840 5233 5158 |

程序如下:

python 复制代码
import pandas as pd
import numpy as np
from numpy import *
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  #设置显示汉字
plt.rcParams['axes.unicode_minus'] = False
np.set_printoptions(precision=4)  #精度设置维保留4位有效小数
###############################################################
def get_coefficient(sample_list):
    k=len(sample_list)
    sample=sample_list[0]
    d=sample.shape[1]   #维数(属性个数)
    x_means=mat(np.zeros([d,k])) # 均值
    s_p=mat(np.zeros([d,d]))    
    I=mat(np.zeros([d,k]))
    C=mat(np.zeros([k,1]))
    n=0
    #对每类数据进行处理
    i=0
    for sample in sample_list:
        n_i=sample.shape[0]-1
        n=n+n_i
        s_i=np.cov(sample,rowvar=False)  #协方差矩阵
        s_p=s_p+n_i*s_i
        x_means[:,i]=np.mean(sample,axis=0).reshape(-1,1)  
        i=i+1
    s_p=s_p/n
    print("协方差矩阵:",s_p) #协方差
    s_p_iv=s_p.I  # 矩阵求逆
    
    #计算I
    for i in range(k):    
        I[:,i]=s_p_iv*x_means[:,i]
        c=-0.5*x_means[:,i].reshape(1,-1)*s_p_iv*x_means[:,i]
        C[i,0]=c
        
    return I, C
#######################可修改部分###############################
k=2 #总体个数
d=3 #属性个数
samples_I=mat(np.array([[76,99,5374],
                        [79.5,99,5359],
                        [78,99,5372],
                        [72.1,95.9,5272],
                        [73.9,77.7,5370]
                ]))
samples_II=mat(np.array([[71.2,93,4250],
                   [75.3,94.9,3412],
                   [70,91.2,3390],
                   [72.8,99,2300],
                   [62.9,80.6,3799]
                  ]))
    
#将训练数据添加到列表中
sample_list=[]
sample_list.append(samples_I)
sample_list.append(samples_II)   
 
#计算得到的系数
I,C=get_coefficient(sample_list) 
print("I=",I)
print("C=",C)
#输入要判定的数据样本
input_sample=mat(np.array([68.5,79.3,1950])) 
#input_sample=mat(np.array([77.6,93.8,5233])) 

#计算判定值
V=I.T*input_sample.T+C

#输出
print("计算得到各类别判定值为:")
for i in range(k):
    print("第{}类:{}".format(i+1,round(V[i,0],4)))
x=input_sample.tolist()[0]
x=tuple(x)
print("所以,输入数据{}属于第{}类。".format(x,argmax(V)+1))
                   

程序运行结果:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 协方差矩阵: [[ 1.5329e+01 2.1508e+01 -5.6979e+02] [ 2.1508e+01 6.6613e+01 -1.4394e+03] [-5.6979e+02 -1.4394e+03 2.6188e+05]] I= [[5.8621 5.1918] [0.2692 0.2588] [0.0347 0.0258]] C= [[-327.8449] [-239.0039]] 计算得到各类别判定值为: 第1类:162.6467 第2类:187.4976 所以,输入数据(68.5, 79.3, 1950.0)属于第2类。 |

相关推荐
jimmyleeee7 小时前
人工智能基础知识笔记七:随机变量的几种分布
人工智能·笔记·概率论
明月看潮生12 小时前
青少年编程与数学 02-015 大学数学知识点 03课题、概率论和数理统计
青少年编程·概率论·数理统计·编程与数学·大学数学
jackyrongvip4 天前
妙用《甄嬛传》中的选妃来记忆概率论中的乘法公式
概率论
lynn-667 天前
【深度学习与大模型基础】第8章-概率分布
人工智能·算法·机器学习·概率论
猎人everest10 天前
机器学习之概率论
人工智能·机器学习·概率论
豆芽81910 天前
二项式分布(Binomial Distribution)
人工智能·python·机器学习·numpy·概率论
zbdx不知名菜鸡12 天前
self Attention为何除以根号dk?(全新角度)
transformer·attention·概率论
优美的赫蒂13 天前
扩展卡尔曼滤波
机器学习·数学建模·矩阵·概率论
Lichenpar14 天前
AI小白的第七天:必要的数学知识(四)
人工智能·概率论·概率分布
pen-ai14 天前
离散概率分布:正态分布,二项分布,连续分布,正态分布的性质
算法·机器学习·概率论