概率论与随机过程--作业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类。 |

相关推荐
FF-Studio2 小时前
【硬核数学】3. AI如何应对不确定性?概率论为模型注入“灵魂”《从零构建机器学习、深度学习到LLM的数学认知》
大数据·人工智能·深度学习·机器学习·数学建模·自然语言处理·概率论
如果你想拥有什么先让自己配得上拥有10 天前
概率论中的生日问题,违背直觉?如何计算? 以及从人性金融的角度分析如何违背直觉的?
金融·概率论
云博客-资源宝11 天前
Excel函数大全
机器学习·excel·概率论
爱学习的capoo13 天前
【解析法与几何法在阻尼比设计】自控
线性代数·机器学习·概率论
TomcatLikeYou14 天前
概率论中的基本定义(事件,期望,信息量,香农熵等)
深度学习·机器学习·概率论
phoenix@Capricornus16 天前
期望最大化(EM)算法的推导——Q函数
算法·机器学习·概率论
Algo-hx17 天前
概率论的基本概念:开启不确定性世界的数学之旅
概率论
Algo-hx17 天前
随机变量及其分布:概率论的量化核心
概率论
小钻风336619 天前
概率论几大分布的由来
概率论
猿饵块19 天前
slam--高斯分布
概率论