Machine Learning/Coding

[실습] Gaussian Naive Bayes(가우시안 나이브 베이즈)

ju_young 2021. 6. 7. 23:50
728x90

Import

다음과 같이 필요한 라이브러리를 임포트한다.

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
#가우시안 나이브 베이즈
from sklearn.naive_bayes import GaussianNB
from sklearn import metrics
from sklearn.metrics import accuracy_score

데이터 불러오기

각 데이터 속성의 뜻은 다음과 같다.
sepal length : 꽃받침 길이
sepal width : 꽃받침 너비
petal length : 꽃잎 길이
petal width : 꽃잎 너비
target : 붓꽃의 종류

# iris 데이터 불러오기
dataset = load_iris()
df = pd.DataFrame(dataset.data, columns=dataset.feature_names)
df['target'] = dataset.target #target 칼럼을 추가
df.target = df.target.map({0:"setosa", 1:"versicolor", 2:"virginica"}) # 숫자 형태의 target 값을 문자로 변경
df.head()

[출력]

데이터 시각화

# 붖꽃의 종류별로 데이터 프레임을 나눈다
setosa_df = df[df.target == 'setosa']
versicolor_df = df[df.target == 'versicolor']
virginica_df = df[df.target == 'virginica']
#setosa 붖꽃의 꽃받침의 길이에 따른 분포도를 다음과 같이 시각화할 수 있다
ax = setosa_df['sepal length (cm)'].plot(kind='hist')
setosa_df['sepal length (cm)'].plot(kind='kde', ax=ax, secondary_y=True, title='setosa sepal length (cm) distribution', figsize = (8,4))

[출력]

이후 각 붖꽃에 대한 꽃받침 길이, 너비의 분포도를 시각화하면 다음과 같다

꽃받침 길이

꽃받침 너비

꽃잎 길이

꽃잎 너비

데이터 나누기

X_train, X_test, y_train, y_test = train_test_split(dataset.data, dataset.target, test_size=0.2) # 데이터 나누기

가우시안 나이브 베이즈 모델 학습

model = GaussianNB()
model.fit(X_train, y_train)

[출력]

테스트

predicted = model.predict(X_test)
print(metrics.classification_report(y_test, predicted))

[출력]

accuracy_score(y_test, predicted)

[출력]

728x90