贝叶斯分类器也广泛应用于分类的实现。特别是文本的识别。本次主要介绍用朴素贝叶斯,在独立检验的条件下实现手写数字的识别。
基本原理:
计算当前图片类别占总类别的概率,从中找到占比最大的,就认定该图片从属于这个类。
代码:
构造分类器,并存储文件为bayes.py。
# -*- coding: utf-8 -*-
"""
Created on Mon Oct 8 15:27:37 2018
@author: Administrator
"""
from numpy import *
class Bayes():
def __init__(self):
self.length = -1
self.label = dict()
self.vector = dict()
def fit(self, train_data:list, labels:list):
if (len(train_data) != len(labels)):
raise ValueError('测试数组与类别数组长度不一致')
self.length = len(train_data[0]) #测试数据特征值长度
labels_num = len(labels) #所有数据量
classes = set(labels) #不重复的标签
for item in classes: #当前类别占总类别比例
this_labels = item
self.label[this_labels] = labels.count(this_labels)/labels_num #当前类别的比例
for vector, label in zip(train_data, labels):
if (label not in self.vector):
self.vector[label] = []
self.vector[label].append(vector)
#print('scuess')
return self
def test(self, test_data, labelSet):
if (self.length == -1):
raise ValueError('无训练数据')