분류 알고리즘-Naïve Bayes
Naïve Bayes 알고리즘 소개
Naïve Bayes 알고리즘은 모든 예측 변수가 서로 독립적이라는 강력한 가정하에 Bayes 정리를 적용한 분류 기술입니다. 간단히 말해서, 한 클래스에있는 기능의 존재는 동일한 클래스에있는 다른 기능의 존재와 독립적이라는 가정입니다. 예를 들어, 터치 스크린, 인터넷 시설, 좋은 카메라 등이 있으면 스마트 폰으로 간주 할 수 있습니다. 이러한 모든 기능은 서로 의존적이지만 스마트 폰일 확률에 독립적으로 기여합니다.
베이지안 분류에서 주요 관심사는 사후 확률, 즉 일부 관찰 된 특징이 주어진 레이블의 확률 (|)을 찾는 것입니다. Bayes 정리의 도움으로 이것을 다음과 같이 정량적 형태로 표현할 수 있습니다.
$$ P (L | 특징) = \ frac {P (L) P (특징 | L)} {()} $$여기에서 (|)는 클래스의 사후 확률입니다.
()는 클래스의 사전 확률입니다.
(|)는 주어진 클래스에 대한 예측 자의 확률 인 가능성입니다.
()는 예측 변수의 사전 확률입니다.
Python에서 Naïve Bayes를 사용하여 모델 빌드
Python 라이브러리 인 Scikit learn은 Python으로 Naïve Bayes 모델을 빌드하는 데 도움이되는 가장 유용한 라이브러리입니다. Scikit learn Python 라이브러리 아래에 다음 세 가지 유형의 Naïve Bayes 모델이 있습니다.
가우시안 나이브 베이 즈
각 레이블의 데이터가 간단한 가우스 분포에서 추출된다는 가정을 가진 가장 간단한 Naïve Bayes 분류기입니다.
다항 나이브 베이 즈
또 다른 유용한 Naïve Bayes 분류기는 다항식 Naïve Bayes로, 특성이 단순 다항 분포에서 추출되었다고 가정합니다. 이러한 종류의 Naïve Bayes는 불연속 카운트를 나타내는 기능에 가장 적합합니다.
베르누이 나이브 베이 즈
또 다른 중요한 모델은 특성이 이진 (0s 및 1s)으로 가정되는 Bernoulli Naïve Bayes입니다. 'bag of words'모델을 사용한 텍스트 분류는 Bernoulli Naïve Bayes의 응용 프로그램이 될 수 있습니다.
예
데이터 세트에 따라 위에서 설명한 Naïve Bayes 모델 중 하나를 선택할 수 있습니다. 여기, 우리는 Python에서 Gaussian Naïve Bayes 모델을 구현하고 있습니다.
다음과 같이 필수 가져 오기부터 시작합니다.
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
이제 Scikit learn의 make_blobs () 함수를 사용하여 다음과 같이 Gaussian 분포를 사용하여 점의 얼룩을 생성 할 수 있습니다.
from sklearn.datasets import make_blobs
X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');
다음으로 GaussianNB 모델을 사용하려면 다음과 같이 객체를 가져 와서 만들어야합니다.
from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);
이제 우리는 예측을해야합니다. 다음과 같이 새로운 데이터를 생성 한 후 수행 할 수 있습니다.
rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)
다음으로 경계를 찾기 위해 새로운 데이터를 플로팅합니다.
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1)
plt.axis(lim);
이제 다음 코드 줄의 도움으로 첫 번째 및 두 번째 레이블의 사후 확률을 찾을 수 있습니다.
yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)
산출
array([[0.998, 0.002],
[1. , 0. ],
[0.987, 0.013],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[0. , 1. ],
[0.986, 0.014]]
)
장단점
장점
다음은 Naïve Bayes 분류기를 사용하는 몇 가지 장점입니다.
Naïve Bayes 분류는 구현하기 쉽고 빠릅니다.
로지스틱 회귀와 같은 차별적 모델보다 빠르게 수렴합니다.
훈련 데이터가 덜 필요합니다.
본질적으로 확장 성이 뛰어나거나 예측 변수 및 데이터 포인트 수에 따라 선형 적으로 확장됩니다.
확률 론적 예측을 할 수 있으며 연속 데이터와 불연속 데이터를 처리 할 수 있습니다.
Naïve Bayes 분류 알고리즘은 이진 및 다중 클래스 분류 문제 모두에 사용할 수 있습니다.
단점
다음은 Naïve Bayes 분류기를 사용하는 몇 가지 단점입니다.
Naïve Bayes 분류의 가장 중요한 단점 중 하나는 강력한 기능 독립성입니다. 실생활에서는 서로 완전히 독립적 인 기능 집합을 갖는 것이 거의 불가능하기 때문입니다.
Naïve Bayes 분류의 또 다른 문제는 '제로 빈도'입니다. 즉, 범주 형 변수에 범주가 있지만 학습 데이터 세트에서 관찰되지 않는 경우 Naïve Bayes 모델이 0 확률을 할당하고이를 만들 수 없음을 의미합니다. 예측.
Naïve Bayes 분류의 응용
다음은 Naïve Bayes 분류의 몇 가지 일반적인 응용 프로그램입니다.
Real-time prediction − 구현이 용이하고 계산이 빠르기 때문에 실시간 예측에 사용할 수 있습니다.
Multi-class prediction − Naïve Bayes 분류 알고리즘을 사용하여 여러 클래스의 대상 변수의 사후 확률을 예측할 수 있습니다.
Text classification− 다중 클래스 예측 기능으로 인해 Naïve Bayes 분류 알고리즘은 텍스트 분류에 적합합니다. 그렇기 때문에 스팸 필터링 및 감정 분석과 같은 문제를 해결하는데도 사용됩니다.
Recommendation system − 협업 필터링과 같은 알고리즘과 함께 Naïve Bayes는 보이지 않는 정보를 필터링하고 사용자가 주어진 리소스를 좋아할지 여부를 예측하는 데 사용할 수있는 권장 시스템을 만듭니다.