본문 바로가기
IT.데이터

빅데이터 분석기사 실기 - 작업형 2유형 준비 / 평가 함수, 사용 라이브러리 import

by JROK 2023. 6. 20.

 

 

본 포스팅은 작업형 2유형의 실습을 위해 작성하겠습니다.

이번 시간에는 평가 함수, 사용 라이브러리 import에 대해 알아보겠습니다.

실습 코드 위주로 작성하였으며 필요한 부분을 숙지하시어 실기 시험에 주요 키 포인트로 쓰시길 바라겠습니다.

 

작업형 2유형의 경우 여러 함수가 쓰입니다.

그 중 문제에 따라, 2항 분류, 다항 분류, 회귀로 문제가 설정이 됩니다.

 

각각의 특징에 따라 사용되는 함수가 달라집니다.

 

 

평가 함수

 

1. 2항 분류

#2항 분류
from sklearn.metrics import roc_auc_score, f1_score

def get_scores(model, x_train, x_test, y_train, y_test):
    A = model.score(x_train, y_train)  # accuracy
    B = model.score(x_test, y_test)    # accuracy
    y_pred = model.predict(x_test)
    C = f1_score(y_test, y_pred)    
    y_proba = model.predict_proba(x_test)[:, 1]
    D = roc_auc_score(y_test, y_proba)
    return f'ACC: {A:.4f} {B:.4f}  F1: {C:.4f} AUC: {D:.4f}'

 

2. 다항 분류

#다항 분류
from sklearn.metrics import f1_score, roc_auc_score

def get_scores(model, x_train, x_test, y_train, y_test):
    A = model.score(x_train, y_train)
    B = model.score(x_test, y_test)
    y_pred = model.predict(x_test)    
    C = f1_score(y_test, y_pred, average='macro')
    y_proba = model.predict_proba(x_test)
    D = roc_auc_score (y_test, y_proba, average='macro', multi_class='ovo')
    return f'ACC: {A:.4f} {B:.4f} F1: {C:.4f} AUC: {D:.4f}'

 

3. 회귀

#회귀
from sklearn.metrics import mean_squared_error as mse
from sklearn.metrics import mean_absolute_percentage_error as mape
from sklearn.metrics import mean_squared_log_error as msle

# msle, rmsle -> 음수가 있어서는 안됨
# rmse, rmsle -> sklearn.metrics에 없음 
# -> mse ** 0.5 -> rmse, msle ** 0.5 -> rmsle
def get_scores(model, x_train, x_test, y_train, y_test):
    A = model.score(x_train, y_train)  # r2_score
    B = model.score(x_test, y_test)
    y_pred = model.predict(x_test)
    y_pred = np.where(y_pred > 0, y_pred, -y_pred)  # 음수처리 방법
    C = mse(y_test, y_pred) ** 0.5
    D = mape(y_test, y_pred)
    E = msle(y_test, y_pred) ** 0.5  # 음수가 있어서는 안됨
    return f'R2 : {A:.4f} {B:.4f} rmse : {C:.4f}, mape: {D:.4f}, rmsle {E:.4f}'

 

 

 

사용되는 라이브러리 import

주요하게 쓰이는 라이브러리만 추가하였습니다.

 

1. 분류

#분류
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier

#모델링 시 과대적합 해결하기 위해 acc값이 비슷해져야하며 f1, auc는 1에 가까워져야함.
model1 = DecisionTreeClassifier(max_depth=3, random_state=1234)
model1.fit(x_train, y_train)
print(model1.get_depth()) #처음 depth를 찍어보고 점점 줄여가보기 
print(get_scores(model1, x_train, x_test, y_train, y_test))

model2 = RandomForestClassifier(max_depth=3, n_estimators=100, random_state=1234) #n_estimators 늘렸다 줄였다해보기
model2.fit(x_train, y_train)
print(get_scores(model2, x_train, x_test, y_train, y_test))

model3 = KNeighborsClassifier(3) #1은 넣으면 안됨. 점차 높은 숫자 넣어보기
model3.fit(x_train, y_train)
print(get_scores(model3, x_train, x_test, y_train, y_test))

 

2. 회귀

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor

#rmse 값이 작을 수록 평가가 좋음.
model = RandomForestRegressor(max_depth=30, n_estimator=100, random_state=1234)
#max_depth, n_estimator 값은 계속 바꿔주며서 scores 체크해준다.
model.fit(x_train, y_train)
print(get_scores(model, x_train, x_test, y_train, y_test))

 

 

 

 

댓글