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

相关推荐
red_redemption3 天前
概率论与数理统计
概率论
IT古董6 天前
【漫话机器学习系列】029.累积分布函数(Cumulative Distribution Function)
人工智能·机器学习·概率论
秋落风声6 天前
【概率论第二章:一维随机变量及其分布】
概率论
牛顿没有错8 天前
概率论与随机过程--作业2
概率论·概率论与随机过程
orion-orion9 天前
概率论沉思录:概率论的怪异应用
人工智能·概率论·科学哲学
赛丽曼10 天前
随机变量是一个函数-如何理解
概率论
渣渣威的仿真秀10 天前
Jensen-Shannon Divergence:定义、性质与应用
人工智能·算法·概率论
杨善锦11 天前
Posison Distribution
概率论
Jamence12 天前
【深度学习数学知识】-贝叶斯公式
人工智能·深度学习·概率论