최근 몇 년 동안 데이터 과학과 기계 학습의 발전으로 인해 Python 프로그래밍 언어는 데이터 과학자와 기계 학습 엔지니어가 가장 좋아하는 언어 중 하나가 되었습니다. Python은 NumPy, Pandas, Scikit-learn 등과 같은 수많은 라이브러리와 프레임워크를 제공하므로 고품질 기계 학습 모델을 더 쉽게 구축할 수 있습니다.
ROC 곡선(Receiver Operating Characteristic Curve)은 기계 학습에서 중요한 도구로 분류 알고리즘의 성능을 평가하는 데 사용되며 알고리즘의 분류 능력과 견고성을 이해하는 데 도움이 됩니다. Python에서는 분류 알고리즘을 평가하는 데 도움이 되는 다양한 방법으로 ROC 곡선을 그릴 수 있습니다. 이 기사에서는 Python의 ROC 곡선 그리기 기술을 소개하고 Scikit-learn 라이브러리와 Matplotlib 라이브러리를 사용하여 아름다운 ROC 곡선을 만드는 방법을 보여줍니다.
ROC 곡선은 어떻게 작동하나요?
ROC 곡선은 이진 분류기 성능 평가에서 가장 일반적으로 사용되는 도구 중 하나입니다. 이 곡선은 거짓 긍정 비율과 참 긍정 비율 사이의 관계를 플롯하여 분류기의 성능을 보여줍니다. 위양성률은 모든 네거티브 클래스에 대한 위양성 클래스의 비율이고, 참양성률은 모든 양성 클래스에 대한 참 클래스의 비율입니다. ROC 곡선의 X축은 위양성률이고 Y축은 참양성률입니다.
일반적으로 분류 문제는 이진 판단 문제를 포함하며, 여기서 긍정적인 사례와 부정적인 사례를 각각 "1"과 "0"이라고 합니다. 분류기는 특정 임계값에 따라 인스턴스를 긍정적인 사례 또는 부정적인 사례로 분류할 수 있습니다. 분류기의 임계값이 너무 높으면 많은 수의 인스턴스가 실수로 부정적인 예로 분류됩니다. 이로 인해 거짓 음성 비율이 증가하고 분류자가 인스턴스를 놓칠 수 있습니다. 반대로, 분류기의 임계값이 너무 낮으면 많은 수의 인스턴스가 긍정 사례로 분류되어 위양성 비율이 높아져 오판으로 이어질 수 있습니다. 최적의 분류기를 구현하려면 이 두 가지 오류 유형을 비교해야 합니다.
이상적인 ROC 곡선은 진양성률이 1, 거짓양성률이 0인 지점에서 시작되며, 이 지점에서 임계값이 최대값으로 설정됩니다. 임계값을 높이면 참양성률은 동일하게 유지되지만 거짓양성률은 증가합니다. 따라서 ROC 곡선의 어느 지점에서나 높은 참양성률과 낮은 거짓양성률은 높은 거짓양성률보다 더 나은 성능으로 간주됩니다.
ROC 곡선 기술
파이썬에서 ROC 곡선을 그리는 데는 여러 가지 기술이 있습니다. 다음은 몇 가지 일반적인 팁입니다.
Scikit-learn은 다양한 임계값에서 참양성 및 거짓양성 출력을 계산하고 위양성률과 참양성률 결과를 반환하는 편리한 기능을 제공합니다. 이러한 출력이 확보되면 이를 ROC 곡선으로 시각화할 수 있습니다. 다음은 Scikit-learn 라이브러리를 사용하여 ROC 곡선을 계산하고 그리는 예입니다.
from sklearn.metrics import roc_curve from sklearn.metrics import auc fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob) roc_auc = auc(fpr, tpr) plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic (ROC) Curve') plt.legend(loc="lower right") plt.show()
이 예에서는 이진 분류기를 장착하고 테스트 세트를 사용하여 확률을 계산했다고 가정합니다. y_test는 테스트 데이터의 분류 라벨이고, y_pred_prob는 분류기가 예측한 확률입니다. 이 예제에서는 fpr과 tpr을 계산하고 Scikit-learn의 auc 함수를 사용하여 ROC 곡선 아래 면적을 계산합니다. Matplotlib를 사용하여 ROC 곡선을 그릴 수 있습니다. 그래프는 Y축에 참양성률을 표시하고 X축에 거짓양성률을 표시합니다.
ROC 곡선의 모양을 더욱 사용자 정의하고 싶다면 Matplotlib를 사용하여 자신만의 차트를 만들 수 있습니다. 다음은 Matplotlib을 사용하여 ROC 곡선을 그리는 방법을 보여주는 예입니다.
import numpy as np import matplotlib.pyplot as plt # Generate some data N = 50 x_true = np.random.randn(N) x_false= np.random.randn(N) # Add some noise x_true = x_true + np.random.randn(N) * 0.3 x_false= x_false + np.random.randn(N) * 0.3 # Create labels and predictions y_true = np.ones(N) y_false= np.zeros(N) y_pred = np.concatenate([x_true, x_false]) y_true = np.concatenate([y_true, y_false]) # Determine threshold for each point thresholds = np.sort(y_pred) tpr_all = [] fpr_all = [] for threshold in thresholds: y_pred_bin = (y_pred >= threshold).astype(int) tn, fp, fn, tp = confusion_matrix(y_true, y_pred_bin).ravel() tpr = tp / (tp + fn) fpr = fp / (fp + tn) tpr_all.append(tpr) fpr_all.append(fpr) plt.figure() plt.plot(fpr_all, tpr_all) plt.plot([0, 1], [0, 1], '--', color='grey') plt.xlabel("False Positive Rate") plt.ylabel("True Positive Rate") plt.title("ROC Curve") plt.show()
이 예에서는 먼저 일부 시뮬레이션 데이터를 생성한 다음 약간의 노이즈를 추가하여 더욱 현실적으로 만들었습니다. 다음으로, 결합된 데이터에 대한 레이블과 예측을 생성하고 각 포인트에 대한 참양성률과 거짓양성률 및 임계값을 계산했습니다. 마지막으로 Matplotlib을 사용하여 ROC 곡선을 그립니다. 이 예에서는 Python 프로그래밍을 사용하여 ROC 곡선을 그리는 방법과 사용자 정의 차트를 그리는 방법을 보여줍니다.
결론
ROC 곡선은 분류기의 성능을 평가하는 중요한 도구입니다. Python에서는 Scikit-learn 및 Matplotlib 라이브러리를 모두 사용하여 ROC 곡선을 그릴 수 있습니다. Scikit-learn은 ROC 곡선을 계산하는 편리한 기능을 제공하는 반면 Matplotlib는 고도로 사용자 정의 가능한 그리기 도구를 제공합니다. 설명된 예에서는 ROC 곡선을 그리는 두 가지 기술을 보여줍니다. 라이브러리 함수를 사용할 것인지 아니면 사용자 정의 플롯을 사용할 것인지에 관계없이 이러한 기술은 실제 데이터에 대한 분류기의 성능을 평가하는 데 도움이 될 수 있습니다.
위 내용은 Python의 ROC 곡선 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!