소박 한 베 이 루스 분류 알고리즘 원리 와 Python 실현 및 사용 방법 사례
7572 단어 소박 한 베 이 루스 분류 알고리즘Python
소박 한 베 이 루스 분류 알고리즘
1.소박 한 베 이 루스 분류 알고리즘 원리
1.1 개술
베 일 스 분류 알고리즘 은 큰 분류 알고리즘 의 총칭 이다
베 이 루스 분류 알고리즘 은 견본 이 특정한 유형 에 속 할 수 있 는 확률 로 분류 근거 로 한다.
소박 한 베 이 루스 분류 알고리즘 은 베 이 루스 분류 알고리즘 중에서 가장 간단 한 것 이다.
주:소박 하 다
P(A|x1x2x3x 4)=p(A|x1)*p(A|x2)p(A|x3)p(A|x4)는 조건 확률 로 독립 한다.
P(xy|z)=p(xyz)/p(z)=p(xz)/p(z)*p(yz)/p(z)
1.2 알고리즘 사상
소박 한 베 이 루스 의 사상 은 이렇다.
만약 에 한 사물 이 일부 속성 조건 에서 발생 하 는 상황 에서 사물 이 A 에 속 할 확률>B 에 속 할 확률 이 있 으 면 사물 이 A 에 속 하 는 것 으로 판단 한다.
통속 적 으로 말 하면,예 를 들 어,너 는 길에서 흑인 을 보 았 는데,나 는 너 에 게 이 친구 가 어디에서 왔 는 지 맞 혀 보라 고 했 는데,너 는 십중팔구 아프리카 를 맞 혀 보라 고 했다.왜 일 까요?
당신 의 머 릿 속 에는 이런 판단 절차 가 있 습 니 다.
①、이 사람의 피부색 은 검은색<특징>
②、검 은 인종 은 아프리카 인 확률 이 가장 높 음<조건 확률:검 은 조건 에서 아프리카 인 확률>
③ 다른 보조 정보 가 없 는 경우 가장 좋 은 판단 은 아프리카 인
이것 이 바로 소박 한 베 이 루스 의 사상 적 기초 이다.
다시 한 번 확장 해 보 자.만약 거리 에서 흑인 이 영 어 를 말 하 는 것 을 본다 면 우 리 는 그 가 어디에서 왔 는 지 어떻게 판단 할 것 인가?
특징 추출:
피부색:검은색
언어:영어
흑인 이 아프리카 에서 올 확률:80%
흑인 이 미국 에서 올 확률:20%
영 어 를 말 하 는 사람 은 아프리카 에서 올 확률:10%
영 어 를 말 하 는 사람 이 미국 에서 올 확률:90%
우리 의 자연 사고방식 에서 이렇게 판단 한다.
이 사람 이 아프리카 에서 올 확률:80%*10%=0.08
이 사람 이 미국 에서 올 확률:20%*90%=0.18
우리 의 판단 결 과 는 바로 이 사람 은 미국 에서 왔 다 는 것 이다!
그 함 축 된 수학 원 리 는 다음 과 같다.
p(A|xy)=p(Axy)/p(xy)=p(Axy)/p(x)p(y)=p(A)/p(x)*p(A)/p(y)* p(xy)/p(xy)=p(A|x)p(A|y)
P(카 테 고리|특징)=P(특징|카 테 고리)*P(카 테 고리)/P(특징)
1.3 알고리즘 절차
① 각종 선험 견본 데이터 중의 특징 을 분해한다.
② 각종 데이터 에서 각 특징의 조건 확률 을 계산한다.
(예 를 들 어 특징 1 이 나타 난 경우 A 류 에 속 하 는 확률 p(A|특징 1),B 류 에 속 하 는 확률 p(B|특징 1),C 류 에 속 하 는 확률 p(C|특징 1)...)
③ 분류 대상 데이터 의 특징(특징 1,특징 2,특징 3,특징 4...)
④ 각 특징의 각 조건 확률 의 곱 을 계산 할 때 다음 과 같다.
A 류 로 판단 할 확률:p(A|특징 1)*p(A|특징 2)*p(A|특징 3)*p(A|특징 4).....
B 류 로 판 단 될 확률:p(B|특징 1)*p(B|특징 2)*p(B|특징 3)*p(B|특징 4).....
C 류 로 판단 할 확률:p(C|특징 1)*p(C|특징 2)*p(C|특징 3)*p(C|특징 4).....
......
⑤ 결과 의 최대 치 는 이 견본 이 속 한 유형 이다.
1.4 알고리즘 응용 예
대중 평론,타 오 바 오 등 전자상거래 에 대량의 사용자 평론 이 있다.예 를 들 어:
1.옷 의 질 이 너무 떨어진다!!!색깔 이 순수 하지 않 아!!!
0
2,나 는 속 은 느낌!!!
0
3、품질 이 너무 나 빠 서 옷 을 손 에 넣 으 면 고물 같 아 요!!!
0
4.상체 가 예 쁘 고 잘 어 울 려 판매자 에 게 칭찬
1
5.옷 을 입 으 면 멋 있어 요.좋아요 만 개 주세요.
1
6、나 는 그의 집에 서 옷 세 벌 을 샀 다!!!질 이 나 빠!
0
그 중 1/2/3/6 은 혹평 이 고 4/5 는 호평 이다.
지금 은 소박 한 베 이 루스 분류 알고리즘 을 사용 하여 다른 평론 을 자동 으로 분류 해 야 한다.예 를 들 어:
a、이렇게 나 쁜 옷 은 이제 안 사 요
b、멋지다
……
1.5.알고리즘 응용 절차
① 선험 데이터 의 각 특징 분해
(즉,단어,예 를 들 어'옷','질 이 너무 떨어진다','나쁘다','불순 하 다','멋있다','예쁘다','짠'...)
②、유형 별(호평,차 평)에서 특징 별 조건 확률 계산
(예 를 들 어 p("옷"|차 평),p("옷"|호평),p("차"|호평),p("차"|차 평)...)
③ 분류 대상 견본 의 각 특징 을 분해한다.
(예 를 들 어 분해 a:"차","옷"...)
④、유형 별 확률 계산
P(호평)=p(호평|'나 쁨')*p(호평|'옷')*.....
P(혹평)=p(혹평|'나 쁨')*p(혹평|'옷')*...
⑤,분명히 P(차 평)의 결과 치가 더 크기 때문에 a 는'차 평'으로 판단 된다.
1.6 소박 한 베 이 루스 분류 알고리즘 사례
대체 계산 방법:
P(호평|단어 1,단어 2,단어 3)=P(단어 1,단어 2,단어 3|호평)*P(호평)/P(단어 1,단어 2,단어 3)
분모 가 모두 같 기 때문에 비교 분자 만 사용 하면 된다--->P(단어 1,단어 2,단어 3|호평)P(호평)
단어 마다 서로 독립 적 인 P(단어 1|호평)P(단어 2|호평)P(단어 3|호평)*P(호평)
P(단어 1|호평)=단어 1 견본 호평 에 나타 난 총 횟수/견본 호평 문장 에 나타 난 총 단어 수
P(호평)=견본 호평 의 개수/견본 의 총 개수
같은 이치:
P(차 평|단어 1,단어 2,단어 3)=P(단어 1,단어 2,단어 3|차 평)*P(차 평)/P(단어 1,단어 2,단어 3)
분모 가 같 기 때문에 비교 분자 만 사용 하면 된다--->P(단어 1,단어 2,단어 3|차 평)P(차 평)
단어 마다 서로 독립 적 인->P(단어 1|차 평)P(단어 2|차 평)P(단어 3|차 평)*P(차 평)
2.파 이 썬 사례
#!/usr/bin/python
# coding=utf-8
from numpy import *
# :1 :0
#
def loadDataSet():
postingList = [['my','dog','has','flea','problems','help','please'],
['maybe','not','take','him','to','dog','park','stupid'],
['my','dalmation','is','so','cute','I','love','him'],
['stop','posting','stupid','worthless','garbage'],
['mr','licks','ate','my','steak','how','to','stop','him'],
['quit','buying','worthless','dog','food','stupid']]
classVec = [0,1,0,1,0,1]
return postingList, classVec
#
def createVocabList(dataSet):
vocabSet = set([]) #
for document in dataSet:
vocabSet = vocabSet | set(document) #
return list(vocabSet)
#
def setOfWords2Vec(vocabList, inputSet):
returnVec = [0]*len(vocabList) # 0
for word in inputSet:
if word in vocabList:
# returnVec[vocabList.index(word)] = 1 # index
returnVec[vocabList.index(word)] += 1 #
else: print "the word: %s is not in my Vocabulary!" % word
return returnVec
#
def trainNB0(trainMatrix, trainCategory):
numTrainDocs = len(trainMatrix)
numWords = len(trainMatrix[0])
pAbusive = sum(trainCategory)/float(numTrainDocs)
# p0Num = zeros(numWords); p1Num = zeros(numWords)
# p0Denom = 0.0; p1Denom = 0.0
p0Num = ones(numWords); # 0, 0
p1Num = ones(numWords); # ,
p0Denom = 2.0; # 0
p1Denom = 2.0 # 1
for i in range(numTrainDocs):
if trainCategory[i] == 1:
p1Num += trainMatrix[i]
p1Denom += sum(trainMatrix[i])
else:
p0Num += trainMatrix[i]
p0Denom += sum(trainMatrix[i])
# p1Vect = p1Num / p1Denom
# p0Vect = p0Num / p0Denom
p1Vect = log(p1Num / p1Denom) # 1 ,
p0Vect = log(p0Num / p0Denom) #
return p0Vect, p1Vect, pAbusive
#
def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):
p1 = sum(vec2Classify*p1Vec) + log(pClass1)
p0 = sum(vec2Classify*p0Vec) + log(1.0-pClass1)
if p1 > p0:
return 1
else:
return 0
def testingNB():
listOPosts, listClasses = loadDataSet()
myVocabList = createVocabList(listOPosts)
trainMat = []
for postinDoc in listOPosts:
trainMat.append(setOfWords2Vec(myVocabList, postinDoc))
p0V, p1V, pAb = trainNB0(array(trainMat), array(listClasses))
testEntry = ['love','my','dalmation']
thisDoc = array(setOfWords2Vec(myVocabList, testEntry))
print testEntry, 'classified as: ', classifyNB(thisDoc, p0V, p1V, pAb)
testEntry = ['stupid','garbage']
thisDoc = array(setOfWords2Vec(myVocabList, testEntry))
print testEntry, 'classified as: ', classifyNB(thisDoc, p0V, p1V, pAb)
# ----------------------------------------------------------------------
testingNB()
실행 결과:Python 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python SMTP에서 전자 메일을 보내는 예SMTP(Simple Mail Transfer Protocol)는 전자 메일 서버 간에 전자 메일과 라우팅 전자 메일을 처리하는 프로토콜입니다.Python은 SMTP 또는 ESMTP 탐지기 데몬이 있는 모든 인터넷 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.