ROC(Receiver Operating Characteristic) 곡선과 AUC는 이진 분류기의 품질을 평가하는 데 자주 사용됩니다. 이 기사에서는 먼저 ROC와 AUC를 간략하게 소개한 다음 예제를 사용하여 Python에서 ROC 곡선을 만들고 AUC를 계산하는 방법을 보여줍니다.
AUC(Area Under Curve)는 기계 학습 이진 분류 모델에서 매우 일반적으로 사용되는 평가 지표로 F1-Score에 비해 현재 일반적인 기계 학습 라이브러리에서 사용됩니다. .(scikit-learn 등)은 일반적으로 이 지표의 계산을 통합하지만 때로는 모델이 별도로 작성되거나 직접 작성되는 경우도 있습니다. 이 기사는 쿼리 중입니다. 정보를 검색할 때 libsvm-tools에 auc 계산이 매우 이해하기 쉽다는 것을 발견하여 나중에 사용하기 위해 선택했습니다.
AUC 계산은 다음 세 단계로 나누어집니다.
1. 계산 데이터 준비 모델 훈련 중에 훈련 세트만 있으면 일반적으로 교차 검증을 사용하여 계산합니다. 평가 세트(evaluate)가 있습니다. 일반적으로 데이터 형식에는 예측 점수와 대상 범주가 필요합니다(예측 범주가 아니라 대상 범주라는 점에 유의하세요)
2. 임계값, 수평(X: False Positive Rate) 및 수직(Y:True Positive Rate) 지점
3. 좌표점을 곡선으로 연결한 후 AUC 값인 곡선 아래 면적을 계산합니다
#! -*- coding=utf-8 -*-import pylab as pl from math import log,exp,sqrt evaluate_result="you file path"db = [] #[score,nonclk,clk]pos, neg = 0, 0 with open(evaluate_result,'r') as fs: for line in fs: nonclk,clk,score = line.strip().split('\t') nonclk = int(nonclk) clk = int(clk) score = float(score) db.append([score,nonclk,clk]) pos += clk neg += nonclk db = sorted(db, key=lambda x:x[0], reverse=True) #计算ROC坐标点xy_arr = []tp, fp = 0., 0. for i in range(len(db)): tp += db[i][2] fp += db[i][1] xy_arr.append([fp/neg,tp/pos]) #计算曲线下面积auc = 0. prev_x = 0for x,y in xy_arr: if x != prev_x: auc += (x - prev_x) * y prev_x = x print "the auc is %s."%auc x = [_v[0] for _v in xy_arr] y = [_v[1] for _v in xy_arr] pl.title("ROC curve of %s (AUC = %.4f)" % ('svm',auc)) pl.xlabel("False Positive Rate") pl.ylabel("True Positive Rate") pl.plot(x, y)# use pylab to plot x and y pl.show()# show the plot on the screen
형식은 다음과 같습니다.
nonclk \t clk \t score
그 중:
1. nonclick: 클릭하지 않은 데이터는 음수 샘플 수로 간주할 수 있습니다. 2. clk: 클릭 수는 양수 샘플 수로 간주할 수 있습니다. 3. 점수: 예측 점수를 그룹으로 사용하여 양성 및 음성 샘플의 사전 통계를 수행합니다. AUC 계산량을 줄입니다.
실행 결과는 다음과 같습니다.
pylab이 설치되지 않은 경우 기계, 종속성 및 그리기 부분에 직접 주석을 달 수 있습니다
참고
위에 게시된 코드:1. 두 범주의 결과만 계산할 수 있습니다(두 범주의 레이블은 부담 없이 처리할 수 있습니다)
2. 위 코드의 각 점수에는 실제로 임계값이 있습니다. 실제로 이 효율성은 상당히 낮습니다. 수평축 좌표를 계산할 때 샘플을 샘플링하거나 동일한 계산을 수행할 수 있습니다.
정말 감사합니다.
저는 Python을 배우기로 결정했습니다. 제가 대학에 다닐 때, 부족한 컴퓨터 기초로 인해 고생을 하게 되었고, 내일 모레 만회할 수 밖에 없었습니다. 코딩과 더불어 나만의 반격을 시작했습니다. 그 과정에서 계속해서 파이썬의 핵심 지식을 배우고 컴퓨터 기초 지식을 심도있게 공부할 예정입니다. 정리한 후 위챗 공개 계정인 "프로그래머 아카데미"에 올리겠습니다. 평범해지고 싶지 않다면 코딩 밖에서 저와 함께 계속 성장하세요!
사실 여기에는 기술뿐만 아니라 "디아오스"가 아닌 절묘한 프로그래머가 되는 방법 등 기술 이외의 것들도 존재하는데요. 프로그래머 자체가 고귀한 존재죠? [참가하려면 클릭] 나 자신이 되고 싶고, 고귀한 사람이 되고 싶다면 어서오세요!
읽어주신 모든 분들께 감사드리며, 많은 도움이 되셨으면 좋겠습니다.
추천 튜토리얼: "
python tutorial위 내용은 Python은 ROC 곡선을 그리고 AUC 값을 계산합니다(코드 포함).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!