Joonas' Note

Joonas' Note

[ML/Sklearn] ROC Curve visualization 본문

AI/머신러닝

[ML/Sklearn] ROC Curve visualization

2022. 4. 8. 19:41 joonas

    ROC(Receiver Operating Characteristic) curve는 TPR(True Positive Rate)와 FPR(False Positive Rate)의 변화값을 보는 데 이용한다. 분류가 잘 되었는 지 확인할 수 있는 성능 지표 중 하나이다.

    sklearn에서는 이것을 차트로 그려주는 RocCurveDisplay 모듈이 있다.

    3가지 방법이 있는데, 직접 TPR과 FPR을 넘겨서 그리는 방법은 문서에서 권장하지 않고, 모델로부터 그리는 from_estimator와, 정답 레이블과 예측 레이블을 넘겨서 그리는 from_predictions를 권장하고 있다.

    import matplotlib.pyplot as plt
    from sklearn.datasets import make_classification
    from sklearn.metrics import RocCurveDisplay
    from sklearn.model_selection import train_test_split
    from sklearn.svm import SVC
    
    X, y = make_classification(random_state=0)
    X_train, X_test, y_train, y_test = train_test_split(X, y)
    clf = SVC(random_state=0).fit(X_train, y_train)
    y_pred = clf.decision_function(X_test)
    
    fig, axes = plt.subplots(1, 2, figsize=(20,5))
    axes[0].set_title('ROC-AUC from estimator')
    axes[1].set_title('ROC-AUC from predictions')
    RocCurveDisplay.from_estimator(clf, X_test, y_test, ax=axes[0])
    RocCurveDisplay.from_predictions(y_test, y_pred, ax=axes[1])
    plt.show()

    from_esitmator / from_predictions

     

    predictions로 넘기는 y_pred는 2가지 방법이 있다. 위처럼 decision_function()의 결과값을 넘기는 방법이 첫 번째이고.

    두 번째는 y_pred_proba 함수의 결과값을 사용하는 것이다. 이 함수는 모델에 따라 별도의 설정이 필요할 수도 있고, 존재하지 않을 수 있다. (LinearSVC 등)

    # Method 1
    y_pred = clf.decision_function(X_test)
    RocCurveDisplay.from_predictions(y_test, y_pred)
    
    # Method 2
    y_pred_proba = clf.predict_proba(X_test)
    RocCurveDisplay.from_predictions(y_test, y_pred_proba[:,1])

     

    y_pred_proba[:,1] 로 한쪽 열만 슬라이싱하는 이유는, 어차피 합쳐서 1.0 이고, 차트에는 둘이 구분될 수 있도록 점을 표시하는 것이기 때문이다.

    Comments