본문 바로가기
프로그램

[파이썬-AI] 지도학습 : GaussianNB

by 오디세이99 2022. 10. 1.
728x90
반응형

train, test 데이터 입니다.

a,b,c,d 는 난수로 -5부터 5까지 임의 생성된 것이고 taget은 sum(a,b,c,d) 이 0보다 크면 1, 작으면 0 입니다.

 

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
from sklearn.naive_bayes import GaussianNB
import numpy as np
import pandas as pd
import random 

# train = pd.read_csv('train.csv', sep=',')
# test = pd.read_csv('predict.csv', sep=',')
def genData(n_row):
    lst = []
    for i in range(n_row):
        tmp = []
        for j in range(4):
            n = random.randint(-5, 5)
            tmp.append(n)
        lst.append(tmp)

    df = pd.DataFrame(lst)
    df.columns = ['a','b','c','d']

    return df

train = genData(500)
test = genData(60)

train['target'] = np.where(train[['a','b','c','d']].sum(axis=1) > 0, 1, 0)
test['target'] = np.where(test[['a','b','c','d']].sum(axis=1) > 0, 1, 0)

X_train = train[['a','b','c']]
y_train = train[['target']]  

X_test = test[['a','b','c']]
y_test = test[['target']]

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

pred = nb.predict(X_test)

r_cnt = 0                         # 맞추는 수
for i in range(len(y_test)):
    r = y_test['target'].tolist()[i]
    r_avg = 0
    if r == pred[i]:
        r_cnt += 1
        r_avg = round(r_cnt  / len(y_test) * 100,1)
        
    print('[',i,'] real=',r, ' /pred=',pred[i], ' /sum=',r_cnt,' /avg=',r_avg,' %')

print(classification_report(y_test, pred))

# X_test.to_csv('result.csv')

결과

[ 0 ] real= 0  /pred= 0  /sum= 1  /avg= 1.7  %
[ 1 ] real= 1  /pred= 1  /sum= 2  /avg= 3.3  %
[ 2 ] real= 0  /pred= 0  /sum= 3  /avg= 5.0  %
[ 3 ] real= 0  /pred= 0  /sum= 4  /avg= 6.7  %
[ 4 ] real= 0  /pred= 0  /sum= 5  /avg= 8.3  %
[ 5 ] real= 0  /pred= 0  /sum= 6  /avg= 10.0  %
[ 6 ] real= 0  /pred= 0  /sum= 7  /avg= 11.7  %
[ 7 ] real= 0  /pred= 0  /sum= 8  /avg= 13.3  %
[ 8 ] real= 1  /pred= 1  /sum= 9  /avg= 15.0  %
[ 9 ] real= 0  /pred= 0  /sum= 10  /avg= 16.7  %
[ 10 ] real= 1  /pred= 1  /sum= 11  /avg= 18.3  %
[ 11 ] real= 0  /pred= 0  /sum= 12  /avg= 20.0  %
[ 12 ] real= 1  /pred= 1  /sum= 13  /avg= 21.7  %
[ 13 ] real= 1  /pred= 1  /sum= 14  /avg= 23.3  %
[ 14 ] real= 0  /pred= 0  /sum= 15  /avg= 25.0  %
[ 15 ] real= 0  /pred= 0  /sum= 16  /avg= 26.7  %
[ 16 ] real= 1  /pred= 1  /sum= 17  /avg= 28.3  %
[ 17 ] real= 1  /pred= 1  /sum= 18  /avg= 30.0  %
[ 18 ] real= 1  /pred= 1  /sum= 19  /avg= 31.7  %
[ 19 ] real= 0  /pred= 0  /sum= 20  /avg= 33.3  %
[ 20 ] real= 0  /pred= 0  /sum= 21  /avg= 35.0  %
[ 21 ] real= 0  /pred= 0  /sum= 22  /avg= 36.7  %
[ 22 ] real= 0  /pred= 0  /sum= 23  /avg= 38.3  %
[ 23 ] real= 0  /pred= 0  /sum= 24  /avg= 40.0  %
[ 24 ] real= 1  /pred= 1  /sum= 25  /avg= 41.7  %
[ 25 ] real= 0  /pred= 0  /sum= 26  /avg= 43.3  %
[ 26 ] real= 0  /pred= 0  /sum= 27  /avg= 45.0  %
[ 27 ] real= 0  /pred= 0  /sum= 28  /avg= 46.7  %
[ 28 ] real= 0  /pred= 0  /sum= 29  /avg= 48.3  %
[ 29 ] real= 1  /pred= 0  /sum= 29  /avg= 0  %
[ 30 ] real= 1  /pred= 1  /sum= 30  /avg= 50.0  %
[ 31 ] real= 1  /pred= 1  /sum= 31  /avg= 51.7  %
[ 32 ] real= 1  /pred= 1  /sum= 32  /avg= 53.3  %
[ 33 ] real= 1  /pred= 1  /sum= 33  /avg= 55.0  %
[ 34 ] real= 0  /pred= 0  /sum= 34  /avg= 56.7  %
[ 35 ] real= 1  /pred= 1  /sum= 35  /avg= 58.3  %
[ 36 ] real= 0  /pred= 1  /sum= 35  /avg= 0  %
[ 37 ] real= 0  /pred= 0  /sum= 36  /avg= 60.0  %
[ 38 ] real= 0  /pred= 1  /sum= 36  /avg= 0  %
[ 39 ] real= 0  /pred= 0  /sum= 37  /avg= 61.7  %
[ 40 ] real= 1  /pred= 1  /sum= 38  /avg= 63.3  %
[ 41 ] real= 1  /pred= 1  /sum= 39  /avg= 65.0  %
[ 42 ] real= 0  /pred= 0  /sum= 40  /avg= 66.7  %
[ 43 ] real= 1  /pred= 1  /sum= 41  /avg= 68.3  %
[ 44 ] real= 1  /pred= 0  /sum= 41  /avg= 0  %
[ 45 ] real= 0  /pred= 1  /sum= 41  /avg= 0  %
[ 46 ] real= 1  /pred= 1  /sum= 42  /avg= 70.0  %
[ 47 ] real= 1  /pred= 1  /sum= 43  /avg= 71.7  %
[ 48 ] real= 0  /pred= 0  /sum= 44  /avg= 73.3  %
[ 49 ] real= 0  /pred= 0  /sum= 45  /avg= 75.0  %
[ 50 ] real= 1  /pred= 1  /sum= 46  /avg= 76.7  %
[ 51 ] real= 1  /pred= 1  /sum= 47  /avg= 78.3  %
[ 52 ] real= 0  /pred= 0  /sum= 48  /avg= 80.0  %
[ 53 ] real= 1  /pred= 1  /sum= 49  /avg= 81.7  %
[ 54 ] real= 0  /pred= 1  /sum= 49  /avg= 0  %
[ 55 ] real= 0  /pred= 0  /sum= 50  /avg= 83.3  %
[ 56 ] real= 0  /pred= 0  /sum= 51  /avg= 85.0  %
[ 57 ] real= 1  /pred= 1  /sum= 52  /avg= 86.7  %
[ 58 ] real= 0  /pred= 0  /sum= 53  /avg= 88.3  %
[ 59 ] real= 0  /pred= 0  /sum= 54  /avg= 90.0  %
              precision    recall  f1-score   support

           0       0.94      0.89      0.91        35
           1       0.85      0.92      0.88        25

    accuracy                           0.90        60
   macro avg       0.90      0.90      0.90        60
weighted avg       0.90      0.90      0.90        60
728x90
반응형

댓글