베 일 스 알고리즘 및 그 응용 사례
#
#
import numpy as np
class Bayes:
def _init_(self):
self.length=-1
self.labelcount=dict()
self.vectorcount=dict()
def fit(self,dataSet:list,labels:list):
if(len(dataSet)!=len(labels)):
raise ValueError(" ")
self.length=len(dataSet[0])
#
labelsnum=len(labels)
#
norlabels=set(labels)
#
for item in norlabels:
thislabel=item
labelcount[thislabel]=labels.count(thislabel)/labelsnum
#
for vector,label in zip(dataSet,labels):
#
if(label not in vectorcount):
self.vectorcount[label]=[]
self.vectorcount[label].append(vector)
print(" ")
def btest(self,TestData,labelsSet):
if(self.length==-1):
raise ValueError(" , ")
# testdata
IbDict=dict()
for thisIb in labelsSet:
p=1
alllabel=self.labelcount[thisIb]
#
allvector=self.vectorcount[thisIb]
vnum=len(allvector)
allvector=np.array(allvector).T
for index in range(0,len(TestData)):
vector=list(allvector[index])
p*=vector.count(TestData[index])/vnum
IbDict[thisIb]=p*alllabel
thislabel=sorted(IbDict,key=lambda x: IbDict[x],reverse=True)[0]
return thislabel
베 이 루스 알고리즘 으로 필기체 숫자 인식: \ # 데 이 터 를 불 러 옵 니 다.
#
def datatoarray(fname):
arr=[]
fh=open(fname)
for i in range(0,32):
thisline=fh.readline()
for j in range(0,32):
arr.append(int(thisline[j]))
return arr
#
def seplabel(fname):
filestr=fname.split(".")[0]
label=int(filestr.split("_")[0])
return label
#훈련 데이터 만 들 기
#
def traindata():
labels=[]
trainfile=listdir("D:/shujufenxi/traindata")
num=len(trainfile)
# 1024( ),
# , : , :1024
trainarr=zeros((num,1024))
for i in range(0,num):
thisfname=trainfile[i]
thislabel=seplabel(thisfname)
labels.append(thislabel)
trainarr[i,:]=datatoarray("D:/shujufenxi/traindata/"+thisfname)
return trainarr,labels
bys=Bayes()
#
train_data,labels=traindata()
bys.fit(train_data,labels)
\ # 테스트 데이터
# ( )
testfileall=listdir("D:/shujufenxi/testdata")
num=len(testfileall)
x=0
for i in range(0,num):
thisfilename=testfileall[i]
'''print(thisfilename)'''
thislabel=seplabel(thisfilename)
#print(thislabel)
thisdataarray=datatoarray("D:/shujufenxi/testdata/"+thisfilename)
label=bys.btest(thisdataarray,labelsall)
print(" :"+str(thislabel)+", :"+str(label)) #
if(label!=thislabel):
x+=1
print(" ")
print(x)
print(" :"+str(float(x)/float(num)))
: :0.1226215644820296
전체 코드 는 다음 과 같 습 니 다:
# ( )
from numpy import *
import operator
from os import listdir
import numpy as npy
import numpy
class Bayes:
def __init__(self):
self.length=-1
self.labelcount=dict()
self.vectorcount=dict()
def fit(self,dataSet:list,labels:list):
if(len(dataSet)!=len(labels)):
raise ValueError(" ")
self.length=len(dataSet[0])#
labelsnum=len(labels)#
norlabels=set(labels)#
for item in norlabels:
thislabel=item
self.labelcount[thislabel]=labels.count(thislabel)/labelsnum#
for vector,label in zip(dataSet,labels):
if(label not in self.vectorcount):
self.vectorcount[label]=[]
self.vectorcount[label].append(vector)
print(" ")
return self
def btest(self,TestData,labelsSet):
if(self.length==-1):
raise ValueError(" , ")
# testdata
lbDict=dict()
for thislb in labelsSet:
p=1
alllabel=self.labelcount[thislb]
allvector=self.vectorcount[thislb]
vnum=len(allvector)
allvector=numpy.array(allvector).T
for index in range(0,len(TestData)):
vector=list(allvector[index])
p*=vector.count(TestData[index])/vnum
lbDict[thislb]=p*alllabel
thislabel=sorted(lbDict,key=lambda x:lbDict[x],reverse=True)[0]
return thislabel
#
def datatoarray(fname):
arr=[]
fh=open(fname)
for i in range(0,32):
thisline=fh.readline()
for j in range(0,32):
arr.append(int(thisline[j]))
return arr
#
def seplabel(fname):
filestr=fname.split(".")[0]
label=int(filestr.split("_")[0])
return label
#
def traindata():
labels=[]
trainfile=listdir("D:/shujufenxi/traindata")
num=len(trainfile)
# 1024( ),
# , : , :1024
trainarr=zeros((num,1024))
for i in range(0,num):
thisfname=trainfile[i]
thislabel=seplabel(thisfname)
labels.append(thislabel)
trainarr[i,:]=datatoarray("D:/shujufenxi/traindata/"+thisfname)
return trainarr,labels
bys=Bayes()
#
train_data,labels=traindata()
bys.fit(train_data,labels)
#
thisdata=datatoarray("D:/shujufenxi/testdata/8_90.txt")
labelsall=[0,1,2,3,4,5,6,7,8,9]
#
'''
rst=bys.btest(thisdata,labelsall)
print(rst) # 8
'''
# ( )
testfileall=listdir("D:/shujufenxi/testdata")
num=len(testfileall)
x=0
for i in range(0,num):
thisfilename=testfileall[i]
'''print(thisfilename)'''
thislabel=seplabel(thisfilename)
#print(thislabel)
thisdataarray=datatoarray("D:/shujufenxi/testdata/"+thisfilename)
label=bys.btest(thisdataarray,labelsall)
print(" :"+str(thislabel)+", :"+str(label)) #
if(label!=thislabel):
x+=1
print(" ")
print(x)
print(" :"+str(float(x)/float(num)))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
베 일 스 알고리즘 및 그 응용 사례베 이 루스 분류 알고리즘: 베 이 루스 분 류 는 통계학 의 분류 알고리즘 으로 확률 통계 지식 을 이용 하여 분류 하 는 알고리즘 이다.많은 장소 에서 소박 한 베 이 루스 (Na ï ve Bayes, NB) 분...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.