当前位置: 首页 > article >正文

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

程序如下:

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类。


http://www.kler.cn/a/458967.html

相关文章:

  • 使用npm 插件[mmdc]将.mmd时序图转换为图片
  • 什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系
  • 云效流水线使用Node构建部署前端web项目
  • 如何逐步操作vCenter修改DNS服务器?
  • 第R3周:RNN-心脏病预测
  • 【pytorch】现代循环神经网络-2
  • 小程序笔记
  • Linux系统编程之文件系统的挂载
  • 海陆并进 陵水农业向深图强
  • cpp编译链接与命名空间
  • ​虚幻引擎UE5渲染不够快的解决办法
  • 4种更快更简单实现Python数据可视化的方法
  • 001__VMware软件和ubuntu系统安装(镜像)
  • 精准测算与优化策略:大流量网站海外服务器带宽需求分析
  • HTML——28.音频的引入
  • 如何开发一个前端自动回复机器人:从零开始的入门指南
  • 嵌入式应用实例→电子产品量产工具→UI界面的绘制和测试
  • 走方格(蓝桥杯2020年试题H)
  • TDengine 新功能 VARBINARY 数据类型
  • VScode 只能运行c,运行不了c++的解决问题
  • HTML——21. 文件下载
  • 什么是出海投资安全评估报告?如何写出海投资安全评估报告?
  • 基于 InternLM 和 LangChain 搭建你的知识库
  • YUM与开源项目(Web运维)
  • 微服务SpringCloud分布式事务之Seata
  • 基于Pytorch和yolov8n手搓安全帽目标检测的全过程