ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Naive Bayes
    기계학습이론과실습 2022. 5. 3. 00:33

    * Bayes' Rule

     

    * Bayes' Rule에 따라 X1=x1, X2=x2일 때 Yi=1일 확률과 X1=x1, X2=x2일 때 Yi=0일 확률을 서로 비교하여 Y값 예측

     

    분모는 같으므로 비교시 생략이 가능하고, 사건 X1과 사건 X2가 독립이라고 Naive하게 가정할 경우 다음과 같이 계산


    import numpy as np
    import pandas as pd

     

    url= 'http://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data'
    # 설명: https://rstudio-pubs-static.s3.amazonaws.com/118220_5a7997d6b0aa493c878d661968fc1f08.html
    car_df = pd.read_csv(url, names=['buying','maint','doors','persons','lug_boot','safety','class'], sep=",")
    car_df.head()

     

    features = car_df.columns.tolist()
    features.remove('class')
    features

    ['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety']

    from sklearn.preprocessing import OrdinalEncoder, LabelEncoder

    # 독립변수 인코딩

    o_encoder = OrdinalEncoder()
    data_encoded = o_encoder.fit_transform(car_df[features])
    car_df_encoded = pd.DataFrame(data_encoded, columns=features)
    # 종속변수 인코딩

    l_encoder = LabelEncoder()
    target_encoded = l_encoder.fit_transform(car_df['class'])
    car_df_encoded['class'] = target_encoded

     

    # data frame을 numpy array로 변환

    data_np = car_df_encoded.values

    X=data_np[:,:-1]
    y=data_np[:,-1]

     

    # train data, test data 분리

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=0)

     

    # model fit & model score

    from sklearn.naive_bayes import CategoricalNB

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

    model.score(X_test,y_test)

     

    # classification report

    y_predictions = model.predict(X_test)

    from sklearn.metrics import accuracy_score, classification_report

    accuracy_score(y_test, y_predictions)

    print(classification_report(y_test, y_predictions))

      precision    recall  f1-score   support
    
             0.0       0.60      0.63      0.61       115
             1.0       0.38      0.12      0.18        25
             2.0       0.90      0.95      0.92       363
             3.0       0.78      0.44      0.56        16
    
        accuracy                           0.82       519
       macro avg       0.66      0.53      0.57       519
    weighted avg       0.80      0.82      0.81       519
    

    독립변수가 연속변수인 경우

    1) 범주형 변수로 변환

    2) 특정 확률분포의 PDF(Probability Density Function)를 사용

    이때, 정규분포를 사용하기 위해 GaussianNB를 사용할 수 있다.

     

    독립변수에 범주형 변수와 연속형 변수가 섞여 있을 경우

    1) 범주형 변수로 변환

    2) 범주형 변수에 대해서는 Categorical NB, 연속형 변수에 대해서는 GaussianNB를 사용한 후, 각 관측치에 대해 Categoricla NB에서 Yi=1일 확률과 Gaussian NB에서 Yi=1일 확률을 더하고,

    Categoricla NB에서 Yi=0일 확률과 Gaussian NB에서 Yi=0일 확률을 더한 후 두 값을 비교하여 Y값을 최종 예측한다.

    '기계학습이론과실습' 카테고리의 다른 글

    Clustering  (0) 2022.05.04
    Course Intro  (0) 2022.05.04
    Document Classification  (0) 2022.04.25
    Imbalanced Classification  (0) 2022.04.25
    Hyper-parameter Tuning  (0) 2022.04.20

    댓글

Designed by Tistory.