文章目录

  • 第一章 贝叶斯决策理论(正态分布下的贝叶斯)概率密度估计
  • 作业及代码
  • 第四课 感知机
  • 5.14 作业,线性分割,计算最短的
  • 5.19线性可分SVM(hard)、线性SVM(soft)、都加核函数为非线性svm



模式识别与机器学习PRML 模式识别要学哪些课程_核函数


16课时,内容参考


本课程较全面、系统地介绍模式识别的的基本理论、原理方法和应用,重点需要学生掌握

  1. 贝叶斯决策理论、
  2. 概率密度函数的估计、
  3. 线性分类函数:回归、线性可分svm、感知机
  4. 非线性分类函数:svm、核函数svm,多层感知机神经网路(次要、分段线性判别、二次判别函数)
  5. 近邻法、
  6. 特征的选择与提取、
  7. 基于K-L展开式的特征提取、
  8. 非监督学习方法、
  9. 人工神经网络、
  10. 模糊模式识别方法、
  11. 统计学习理论比如支持向量机等。

第一章 贝叶斯决策理论(正态分布下的贝叶斯)概率密度估计

模式识别与机器学习PRML 模式识别要学哪些课程_核函数_02


模式识别与机器学习PRML 模式识别要学哪些课程_感知机_03


其中模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_04 是假设样本服从指数族分布的(两点、高斯)模型参数,每一类进行模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_04估计

模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_06


模式识别与机器学习PRML 模式识别要学哪些课程_感知机_07


模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_08

模式识别与机器学习PRML 模式识别要学哪些课程_模式识别与机器学习PRML_09

模式识别与机器学习PRML 模式识别要学哪些课程_感知机_10


模式识别与机器学习PRML 模式识别要学哪些课程_感知机_11


模式识别与机器学习PRML 模式识别要学哪些课程_感知机_12


解读贝叶斯,理解先验和后验概率

作业及代码

模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_13


模式识别与机器学习PRML 模式识别要学哪些课程_模式识别与机器学习PRML_14


模式识别与机器学习PRML 模式识别要学哪些课程_感知机_15

import glob
import cv2
import numpy as np
import time

start= time.time()
#---------------------------1 读取数据拉成一行,append到列表------------------------------------
w=112
size=(w,w)
#img_list[4][arry],4是类别
img_list=[list() for i in range(10)]
sum_data=0
for i in range(10):
    img_list_tmp=glob.glob('./train/'+str(i)+'/*.bmp')
    print('样本数字{}的个数{}'.format(i,len(img_list_tmp)))
    for path in img_list_tmp:
        img=cv2.imread(path,0)
        img=cv2.resize(img,size)
        # cv2.imshow('resize',img)
        # cv2.waitKey(0)
        cv_img = img.astype(np.uint8)
        cv2.threshold(cv_img, 50, 1, cv2.THRESH_BINARY_INV, cv_img)
        vector=cv_img.reshape(-1)
        # print((len(vector)))
        img_list[i].append(vector)
    sum_data=sum_data+len(img_list_tmp)

#---------------------------2 计算先验概率和类条件概率,append到列表里---------------------------------
#计算先验
prior_prob=[]
for i in range(10):
    prior_prob.append(len(img_list[i])/sum_data)
print(prior_prob)

#计算条件类概率
condition_prob=[list([list([list() for j in range(len(vector))]) for i in range(10)]) for c in range(2)]
#统计各列X0/1,且标签=0...9,
for i in range(2):
    #y类别
    for j in range(10):
        print(j)
        #所有x的该维度的
        for k in range(len(vector)):
            # 样本数,所有标签为j的且维度为k,且数值=i的数量
            count=0
            for x in range(126):
                if img_list[j][x][k]==i:
                    count=count+1
            condition_prob[i][j][k]=np.log((count+1)/(len(img_list[j])+2)) #拉普拉斯平滑,并且取对数,后面的连乘,变成加
        print(condition_prob[i][j])

#---------------------------3 预测:计算后验概率,正正确率------------------------------------------
##预测,计算10个类别的各个概率,每次是连乘法转换成加法
def predict(vector_test):
    post_prob=[list() for i in range(10)]
    for i in range(10):
        pai=0
        lenth=0
        for j in vector_test:
            pai=pai+condition_prob[int(j)][i][lenth]
            lenth+=1
        # post_prob[i]=prior_prob[i]*pai
        #因为所有的先验概率都是0.1,这不用再做乘法
        post_prob[i] = pai
    # print(post_prob)
    predict_lable=post_prob.index(max(post_prob))
    # print(predict)
    return predict_lable

rightcount_per_class=[]
rightness_per_class=[]
for c in range(10):
    right_num=0
    for vector_test in img_list[c]:
        #进行预测和判断是否为正确预测,
        predict_lable=predict(vector_test)
        if predict_lable==c:
            right_num+=1
    rightcount_per_class.append(right_num)
    rightness_per_class.append(right_num/126)

print('各类别正确数',rightcount_per_class)
print('各类别正确率',rightness_per_class)
print('总正确数',sum(rightcount_per_class))
print('总正确率',sum(rightcount_per_class)/1260)
print('vectorsize',size)
print('花费时间',time.time()-start)

参考

模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_16


模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_17


模式识别与机器学习PRML 模式识别要学哪些课程_模式识别与机器学习PRML_18

第四课 感知机

模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_19


模式识别与机器学习PRML 模式识别要学哪些课程_核函数_20

5.14 作业,线性分割,计算最短的

模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_21


模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_22

5.19线性可分SVM(hard)、线性SVM(soft)、都加核函数为非线性svm

模式识别与机器学习PRML 模式识别要学哪些课程_核函数_23


模式识别与机器学习PRML 模式识别要学哪些课程_贝叶斯决策_24