체인의정석

머신러닝 스터디 02 - 나이브베이즈 분류기 본문

빅데이터&인공지능

머신러닝 스터디 02 - 나이브베이즈 분류기

체인의정석 2020. 8. 10. 22:26
728x90
반응형

나이브 베이즈 분류기는 선형 모델과 유사하며 선형 분류기 보다 훈련 속도가 빠르지만, 일반화 성능이 조금 뒤지는 문제가 있습니다. 사이킷 런에서 구현된 나이브 베이즈 분류기는 연속적인 어떠한 데이터에도 적용할 수 있는 GaussinanNB, 이진데이터에 적용할 수 있는 BernoulliNB, 카운트 데이터에 적용되는 MultinomialNB의 3개 입니다.

BernoulliNB와 MultinomialNB는 대부분 텍스트 데이터를 분류할 때 사용합니다.

 

BernoulliNB분류기는 다음과 같습니다.

X= np.array([
    [0,1,0,1],
    [1,0,1,1],
    [0,0,0,1],
    [1,0,1,0]
])
y=np.array([0,1,0,1])

이진 특성을 4개 가진 데이터 포인트 를 X로 두고

이에 대한 출력이 y에 담기게 됩니다. 

 

이때 특성의 개수는 새는 방법은 아래 식과 같이

y의  np.unique=[0,1]을 기준으로 label이 나오게 된다. 이때 label==y로 실행하여 0일때 한번 1일때 한번 실행될때

0이 있는 부분인 X[0]+X[2]를 행기준(axis=0)으로 더하여 특성 카운트 counts[0]으로 나오게 되며,

1이 있는 부분의 값인 X[1]+X[3]이 마찬가지로 행기준으로 더하여 counts[1]으로 나오게 된다.

따라서 각 특성별로 0이 아닌 원소를 셀 수 있습니다.

counts={}
for label in np.unique(y):
    counts[label] = X[y==label].sum(axis=0)
    print("특성 카운트:n{}".format(counts))

특성 카운트:n{0: array([0, 1, 0, 2])} 특성 카운트:n{0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}

 

이때 MultinomialNB는 각 클래스 별로 평균을 , GaussinanNB는 각 클래스 별로 표준편차와 평균을 구합니다.

 

또한 MultinomialNB와 BernoulliNB는alpha값을 통하여 복잡도를 조정할 수 있습니다. 

 

GaussinanNB는 고차원인 데이터셋에 사용하고 다른 두 모델은 텍스트 같은 희소한 데이터를 카운트하는 데 사용합니다. MultinomialNB는 보통 0이 아닌 특성이 비교적 많은 데이터셋에서 BernoulliNB보다 성능이 높습니다.

 

나이브 베이즈 모델과 선형모델은 희소한 고차원데이터에서 잘 작동하며 비교적 매개변수에 민감하지 않고, 예측속도가 빠르고 훈련과정을 이해하기 쉽습니다. 선형 모델로는 학습 시간이 너무 오래걸리는 매우 큰 데이터셋에서 나이브베이즈가 종종 사용됩니다.

 

 

 

IT 유튜브 타임해커 보러가기

www.youtube.com/channel/UCHsRy47P2KlE749oAAjb0Yg?view_as=subscriber

 

타임해커

-블록체인/인공지능 -웹개발(프론트/백) -광고(페이스북/구글/네이버) -사업계획서 작성 -비전공생을 위한 IT 공부법 채널이름은 기획,마케팅,개발을 다 같이해서 업무성과를 내는데 드는 시간을

www.youtube.com

깃허브에서 소스코드/모든 시리즈 보러가기

github.com/hynki95/machine_learning

 

hynki95/machine_learning

Contribute to hynki95/machine_learning development by creating an account on GitHub.

github.com

 

728x90
반응형
Comments