实验一
一 实验名称
正态分布的贝叶斯决策
二 目的和意义
- 熟悉使用python进行数据分析的方法。
- 根据给出的数据文件,求出各分类的统计数据。
- 使用最小错误率贝叶斯决策进行分类。
三 操作步骤或算法结构
-
安装使用一种python语言开发平台(Anaconda、Spyder、PyCharm、VSCode等),并完成数据导入的操作( iris.csv 文件,可用pandas 的
read_csv
函数)。 -
取出数据中的某一列(
c1=my_data['sepal_length']
),并转换成数组(a1=c1.to_numpy()
)。用自定义函数方法求各列数据的均值,及每一分类中各列数据的前 40 40 40 个的均值。 -
求上一步中的每种分类下某一列数据的前40的协方差矩阵(
numpy.cov(a)
)、协方差矩阵的逆矩阵(numpy.linalg.inv(a)
)和协方差矩阵的行列式(numpy.linalg.det(a)
)。 -
在先验概率 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(x∣w=i)+lnp(w=i)=−2dln2π−21ln∣Σi∣+lnp(w=i)−21(x−μ)TΣj−1(x−μi)
- 公式
2.32
2.32
2.32
-
*根据判别式判断使用哪一列进行分类最有效。(选做)
四 操作步骤或者算法结构
导入数据
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 进行
得到结果如下
本实验的协方差矩阵计算存在一定问题,可能需要对数据进行一定的”清洗“或者归一化操作。