<jupyter_start><jupyter_text>Scikit-learn을 활용한 나이브 베이즈 분류기나이브 베이즈(Naive Bayes)는 베이즈 이론(Bayes theorem)의 확률 모델을 기반으로 하는 매우 단순하지만 강력한 분류 모형이다.  날씨, 기온에 따른 축구 여부 분류2개의 Feature (Weather, Temp)와 1개의 Label (Play)로 구성된 dataset을 생성한다.  * weather 구분 : 0='흐림', 1='비', 2='맑음'* temp 구분 : 0='시원',1='더움',2='보통'* label 구분 : 0='경기 안함', 1='경기 함'<jupyter_code>import numpy as np
weather = np.array([2, 2, 0, 1, 1, 1, 0, 2, 2, 1, 2, 0, 0, 1])
temp = np.array([1, 1, 1, 2, 0, 0, 0, 2, 0, 2, 2, 2, 1, 2])
label = np.array([0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0])
features = zip(weather,temp)
features = list(features)
print(features)<jupyter_output>[(2, 1), (2, 1), (0, 1), (1, 2), (1, 0), (1, 0), (0, 0), (2, 2), (2, 0), (1, 2), (2, 2), (0, 2), (0, 1), (1, 2)]<jupyter_text>* sklearn을 활용하여 나이브 베이즈 분류기 모델을 생성한다.  * 모델 생성 -> 훈련 데이터 Fitting -> 분류로 실행한다.<jupyter_code>#Import Gaussian Naive Bayes model
from sklearn.naive_bayes import GaussianNB

#Create a Gaussian Classifier
model = GaussianNB()

# Train the model using the training sets
model.fit(features,label)

#Predict Output
predicted= model.predict([[0,2]]) # 0:Overcast, 2:Mild

print("Predicted Value:", predicted) # 1: Yes
print("Predicted probability:", model.predict_proba([[0,2]]))<jupyter_output>Predicted Value: [1]
Predicted probability: [[0.00770751 0.99229249]]<jupyter_text>> 예측 결과: 날씨가 흐림이고 기온이 보통일 때, "경기 함"으로 분류된다.  나이브 베이즈를 활용한 wine 데이터 분류사이킷런에서 기본 제공하는 와인 데이터를 사용하여 와인의 class('class_0' 'class_1' 'class_2')를 분류하는 분류 모형을 생성한다.<jupyter_code>#Import scikit-learn dataset library
from sklearn import datasets

#Load dataset
wine = datasets.load_wine()

# print the names of the 13 features
print("Features: ", wine.feature_names)

# print the label type of wine(class_0, class_1, class_2)
print("Labels: ", wine.target_names)
wine.data.shape
wine.data[0:5]
wine.target<jupyter_output><empty_output><jupyter_text>데이터 나누기데이터를 train 데이터와 test 데이터로 나눈다.<jupyter_code># Import train_test_split function
from sklearn.model_selection import train_test_split

# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(wine.data, wine.target, test_size=0.3, random_state=109)<jupyter_output><empty_output><jupyter_text>모형의 생성, 훈련가우시안 나이브 베이즈 모형을 사용하여 와인 데이터 분류 모형을 만들어 훈련한다.<jupyter_code>#Import Gaussian Naive Bayes model
from sklearn.naive_bayes import GaussianNB

#Create a Gaussian Classifier
gnb = GaussianNB()

#Train the model 
gnb.fit(X_train, y_train)

#Predict
y_pred = gnb.predict(X_test)<jupyter_output><empty_output><jupyter_text>나이브베이즈 모형에서 predict_proba를 사용하면 각 클래스에 대한 예측 확률값을 출력한다.<jupyter_code>prob = np.round(gnb.predict_proba(X_test),2)

for prob, pred in zip(prob, y_pred) : 
    print(prob, '\t==> ', pred)<jupyter_output>[1. 0. 0.] 	==>  0
[0.55 0.45 0.  ] 	==>  0
[0. 1. 0.] 	==>  1
[0. 0. 1.] 	==>  2
[1. 0. 0.] 	==>  0
[0.23 0.77 0.  ] 	==>  1
[1. 0. 0.] 	==>  0
[1. 0. 0.] 	==>  0
[0. 1. 0.] 	==>  1
[1. 0. 0.] 	==>  0
[0.   0.44 0.56] 	==>  2
[0.   0.18 0.82] 	==>  2
[0. 0. 1.] 	==>  2
[0. 0. 1.] 	==>  2
[1. 0. 0.] 	==>  0
[0. 1. 0.] 	==>  1
[0. 1. 0.] 	==>  1
[1. 0. 0.] 	==>  0
[1. 0. 0.] 	==>  0
[0.   0.97 0.03] 	==>  1
[0. 0. 1.] 	==>  2
[0. 1. 0.] 	==>  1
[1. 0. 0.] 	==>  0
[0. 0. 1.] 	==>  2
[1. 0. 0.] 	==>  0
[1. 0. 0.] 	==>  0
[0. 1. 0.] 	==>  1
[0. 0. 1.] 	==>  2
[1. 0. 0.] 	==>  0
[0. 1. 0.] 	==>  1
[0. 0. 1.] 	==>  2
[0. 1. 0.] 	==>  1
[0. 1. 0.] 	==>  1
[1. 0. 0.] 	==>  0
[0. 1. 0.] 	==>  1
[0.   0.95 0.05] 	==>  1
[1. 0. 0.] 	==>  0
[0. 0. 1.] 	==>  2
[0. 0. 1.] 	==>  2
[1. 0. 0.] 	==>  0
[0. 0. 1.] 	==>  2
[0.04 0.96 0.  ] 	==>  1
[1. 0. 0.] 	==>  0
[1. 0. 0.] 	==>  0
[1. 0. 0.] 	==>  0
[0. 0. 1.] 	==>  2
[0. 0. 1.] 	==>  2
[1. 0. 0.] 	==>  0
[0. 1. 0.] 	==>  1
[0. 1. 0.] 	==>  1
[0. 0. 1[...]<jupyter_text>모형의 정확도 평가테스트 데이터로 모형을 평가하고 정확도를 출력한다.<jupyter_code>#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics

# Model Accuracy
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))<jupyter_output>Accuracy: 0.9074074074074074<jupyter_text>실습1. 가우시안 나이브 베이즈(GaussianNB)를 다항분포 나이브 베이즈(MultinomialNB)로 바꾸어 모형을 생성하고 정확도(accuracy)와 분류 확률(predict_proba)을 출력해 보시오.<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.20004780114722753, 'fraction_numerical': 0.08867112810707457, 'mean_word_length': 3.2573753814852493, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 83, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '380166', 'license': 'MIT', 'n_tokens_mistral': 2590, 'n_tokens_neox': 2620, 'n_words': 567, 'path': '03Supervised/05NaiveBayes/NaiveBayes.ipynb', 'repo_name': 'aonekoda/YGL_2', 'size': '4184'}