模式识别实验一

实验一

一 实验名称

正态分布的贝叶斯决策

二 目的和意义

  1. 熟悉使用python进行数据分析的方法。
  2. 根据给出的数据文件,求出各分类的统计数据。
  3. 使用最小错误率贝叶斯决策进行分类。

三 操作步骤或算法结构

  1. 安装使用一种python语言开发平台(Anaconda、Spyder、PyCharm、VSCode等),并完成数据导入的操作( iris.csv 文件,可用pandas 的 read_csv函数)。

  2. 取出数据中的某一列( c1=my_data['sepal_length']),并转换成数组(a1=c1.to_numpy())。用自定义函数方法求各列数据的均值,及每一分类中各列数据的前 40 40 40 个的均值。

  3. 求上一步中的每种分类下某一列数据的前40的协方差矩阵(numpy.cov(a))、协方差矩阵的逆矩阵(numpy.linalg.inv(a))和协方差矩阵的行列式(numpy.linalg.det(a))。

  4. 在先验概率 p ( w i ) = 0.5 p(w_i)=0.5 p(wi)=0.5 的条件下,将每种分类下各列数据中后 10 10 10 个作为分类研究样本,写出教材中 公式 2.32 2.32 2.32 所示的判别式。

    • 公式 2.32 2.32 2.32
      g i ( x ) = ln ⁡ p ( x ∣ w = i ) + ln ⁡ p ( w = i ) = − d 2 ln ⁡ 2 π − 1 2 ln ⁡ ∣ Σ i ∣ + ln ⁡ p ( w = i ) − 1 2 ( x − μ ) T Σ j − 1 ( x − μ i ) g_i(\textbf x) = \ln p(\textbf x|w = i) + \ln p(w = i) \\= -\frac d2\ln 2 \pi -\frac 12\ln |\Sigma_i| + \ln p(w=i) -\frac 12(\textbf x - \mu)^T\Sigma_j^{-1}(\textbf x-\mu_i) gi(x)=lnp(xw=i)+lnp(w=i)=2dln2π21lnΣi+lnp(w=i)21(xμ)TΣj1(xμi)
  5. *根据判别式判断使用哪一列进行分类最有效。(选做)

四 操作步骤或者算法结构

导入数据

import pandas as pd

iris = pd.read_csv('iris.csv')

或者

f = open('\iris.csv', encoding='utf-8')
my_data = pd.read_csv(f)

数组转换

s1 = slice(0, 40, 1)
s2 = slice(0, 2, 1)
s3 = slice(40, 50, 1)
c1 = my_data[my_data['variety'] == 'Setosa']
w1 = c1.to_numpy()
c2 = my_data[my_data['variety'] == 'Versicolor']
w2 = c2.to_numpy()
c3 = my_data[my_data['variety'] == 'Virginica']
w3 = c3.to_numpy()
w = np.array([w1[s1, s2], w2[s1, s2], w3[s1, s2]])
print(w1[s1, s2])

进行分类

def classification(x, t, p):
    for i in p:
        print(i)

    classifications = []
    for i in x:
        class_number = 0
        max_g = -sys.maxsize - 1  
        ls = []
        for j in range(len(t)):
            g = discriminant_function(i, t[j], p[j])
            print(str(i.T[0]) + "for w " + str(j + 1) + "with func" + str(g[0][0]))
            if g > max_g:
                class_number = j + 1  
                max_g = g
        ls.append(str(i.T[0]))
        ls.append(class_number)
        classifications.append(ls)
    return classifications
print(classification(w1[s3, s2].astype(float), w.astype(float), [0.5]))

五 结果讨论与分析

本次实验和此后三次实验均基于 PyCharm 这一 IDE 进行

得到结果如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本实验的协方差矩阵计算存在一定问题,可能需要对数据进行一定的”清洗“或者归一化操作。

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值