소박 한 베 이 루스 분류 알고리즘 원리 와 Python 실현 및 사용 방법 사례

본 논문 의 사례 는 소박 한 베 이 루스 분류 알고리즘 원리 와 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기