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

相关推荐
weixin_377634842 天前
【多模型预测】 如何合理融合多个预测分值
算法·机器学习·概率论·预测·agent预测
知识分享小能手2 天前
统计学学习教程,从入门到精通,参数估计 — 知识点详解与公式推导(10)
学习·机器学习·概率论
维克兜率天4 天前
【维克】概率论入门:从“抛硬币“到理解金融市场的不确定性
经验分享·学习·概率论
luoganttcc5 天前
指数分布的完整推导
线性代数·机器学习·概率论
学究天人12 天前
数学公理体系大全:第六章 选择公理的等价形式及证明
人工智能·线性代数·算法·机器学习·数学建模·概率论·原型模式
m0_5474866612 天前
南京信息工程大学《概率论与数理统计》期末试卷20-24学年PDF
概率论
无限码农14 天前
gb字符串被误检为utf8的解决办法
概率论
学究天人14 天前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷7)
线性代数·矩阵·动态规划·概率论·图论·抽象代数·拓扑学
m0_5474866618 天前
广东海洋大学《概率论与数理统计》期末试卷17-22 23-24学年+复习题PDF
pdf·概率论
apcipot_rain19 天前
计科八股2026705——正态分布、独立与不相关、范数、列表元组集合、链表队列、sort函数、URL执行
python·计算机网络·概率论