모델의 선택과 평가 - 교차 검증

5528 단어
모델의 선택과 평가 참고 기계 학습 참고 1.sklearn.model_selection
  • 교차 검증을 통해 득점: 모델selection.cross_val_score(clf,data,target,cv=5,scoring=“f1_macro”)
  • 입력한 데이터 포인트마다 교차 검증 추정: 모델selection.cross_val_predict(clf,data,target,cv=5)
  • 모형의 학습률 곡선을 계산하고 그리기: 모델selection.learning_curve(estimator,X,y)

  • 2.klearn.metrics
  • 는 모든 분류의 정확한 비율을 가리킨다. 정확도: (accuracy score(target, y test,normalize=True,sample weight=None))normalize: 기본값은 True이고 정확한 분류의 비율을 되돌려준다.False인 경우 올바른 분류 샘플 수
  • 를 반환합니다.
  • recall_score: 리콜율에서 찾은 숫자와 전체적으로 우리가 찾는 숫자의 비례.
    klearn.metrics.recall_score(y_true, y_pred, labels=None, 
    					pos_label=1,average='binary', sample_weight=None)
    
    매개 변수average:string, [None,'micro','macro'(default),'samples','weighted'] macro: 두 가지 분류의metrics의 평균값을 계산하여 각 클래스에 같은 권한을 부여하는 값을 제시한다.따라서 Macro-averaging 방법은 소형의 성능에 큰 영향을 미칠 수 있다.weighted: 불균형 수량의 클래스에 대해 2분류metrics의 평균을 계산하고 각 클래스의score에 가중하여 실현한다.마이크로: 모든 샘플 클래스와 전체 metrics에 기여한pair(sample-weight)를 제공합니다. 전체 클래스에 대한 metrics 구화가 아니라 모든 클래스의 metrics에 대한 권중과 인자를 구화하여 전체 몫을 계산합니다.Micro-averaging 방법은 다중 탭(multilabel) 문제에 설정되어 여러 분류를 포함하고 있으며, 이 때 큰 클래스는 무시됩니다.samples: multilabel 문제에 적용됩니다.이것은 모든 클래스를 계산하지 않습니다. 반대로, 평가 데이터에서 실제 클래스와 예측 클래스의 차이를 계산하는metrics를 통해 평균(sample weight-weighted)average:average=None은 모든 클래스의 득점을 포함하는 그룹을 되돌려줍니다.
  • roc_curve: ROC 곡선은 수험자의 작업 특징 곡선/수신기 조작 특성(receiver operating characteristic, ROC) 곡선을 가리키며 민감성과 특수효과성 연속 변수를 반영하는 종합 지표로 구도법으로 민감성과 특이성의 상호 관계를 밝히는 것이다. 연속 변수를 여러 개의 서로 다른 임계값으로 설정하여 일련의 민감성과 특이성을 계산한다.ROC 곡선은 일련의 다른 두 가지 분류 방식(분계값 또는 한계 결정)에 따라 실제 예율(즉 민감도)(True Positive Rate, TPR)을 누진, 가짜 정례율(1-특수성)(False Positive Rate, FPR)을 가로로 그린 곡선이다.
    sklearn.metrics.roc_curve(y_true,y_score, pos_label=None, 
    							sample_weight=None, drop_intermediate=True)
    
    이 함수는 이 세 변수를 되돌려줍니다. fpr, tpr, 한도값thresholds;분류기의 중요한 기능인'확률 출력'은 분류기가 어떤 견본이 얼마나 큰 확률을 가지고 양견본(또는 음견본)에 속한다고 생각하는지 나타낸다.Score는 각 테스트 샘플이 양의 샘플에 속할 확률을 나타냅니다.다음에 우리는 높은 것부터 낮은 것까지 차례대로'Score'값을 한도값인threshold로 한다. 테스트 샘플이 정샘플에 속할 확률이 이threshold보다 크거나 같을 때 우리는 그것을 정샘플이라고 생각하고 그렇지 않으면 마이너스 샘플이라고 생각한다.매번 다른threshold를 선택할 때마다 우리는 FPR과 TPR, 즉 ROC 곡선의 한 점을 얻을 수 있다.threshold를 1과 0으로 설정하면 ROC 곡선의 (0, 0) 과 (1, 1) 두 점을 얻을 수 있습니다.이러한 (FPR, TPR) 쌍을 연결하면 ROC 커브가 생성됩니다.threshold 수치가 많을수록 ROC 곡선이 매끄럽습니다.사실 우리는 반드시 모든 테스트 샘플이 정샘플의 확률치를 얻어야 하는 것은 아니다. 이 분류기가 이 테스트 샘플에 대한'평점치'를 얻으면 된다(평점치가 반드시 (0,1)구간에 있는 것은 아니다).평점이 높을수록 분류기는 이 테스트 샘플이 정샘플이라고 확신하고 각 평점값을threshold로 동시에 사용한다.나는 평점치를 확률로 바꾸는 것이 좀 더 이해하기 쉽다고 생각한다.fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
  • Auc: AUC 값을 계산하여 AUC 값을 계산한다. 그 중에서 x(fpr), y(tpr)는 각각 수조 형식으로 (xi, yi)가 좌표에 있는 점에 따라 생성된 곡선을 계산한 다음에 AUC 값을 계산한다.sklearn.metrics.auc(x, y, reorder=False)
  • roc_auc_score sklearn.metrics.roc_auc_score(y_true, y_score, average=‘macro’, sample_weight=None)
  • confusion_matrix: 혼동 행렬sklearn.metrics.confusion_matrix(y true, y pred, labels=None, sample weight=None) labels: 행렬을 혼동하는 색인(위의 고양이와 토끼의 예시), 값이 없으면 ytrue, y_pred에 표시된 값 정렬
  • 균형 오차는 매개 변수의 평가값과 매개 변수의 진가의 차이 제곱의 기대값을 가리킨다.MSE는 데이터의 변화 정도를 평가할 수 있고 MSE의 값이 작을수록 예측 모델 묘사 실험 데이터가 더욱 정확함을 가진다는 것을 의미한다.
    (mean_squared_error(target,dicted))
    

  • 교차 검증: 평가기의 성능 학습 예측 함수의 매개 변수를 평가하고 같은 데이터에서 테스트하는 것은 방법상의 오류이다. 방금 본 견본만 반복하는 라벨의 모델은 완벽한 점수를 가지지만 유용하고 보이지 않는 데이터를 예측할 수 없다.이런 상황을 과의합이라고 부른다.이러한 상황을 피하기 위해 일반적인 방법은 기계 학습 실험을 집행(감독)하여 일부 사용 가능한 데이터를 테스트 집합으로 삼는 것이다.X_test, y_test
    **train_test_split**: scikit , .
    
    ```
    rom sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.svm import  SVC
    
    data=load_iris().data
    target=load_iris().target
    X_train,X_test,y_train,y_test=train_test_split(data,target,test_size=0.4,random_state=0)
    clf=SVC(kernel="linear").fit(X_train,y_train)
    print(clf.score(X_test,y_test))
    ```
    

    분석: 평가기에 사용되는 다른 설정('초파라미터')을 평가할 때, 예를 들어 C가 SVM에 수동으로 설정해야 하는 설정을 평가할 때, 평가기가 가장 잘 실행될 때까지 파라미터를 조정할 수 있기 때문에 테스트 집합에서 과도하게 맞출 수 있다.이렇게 하면 테스트 집합에 대한 지식을 모델에 누설할 수 있고 평가 지표는 범용 성능을 보고하지 않는다.이 문제를 해결하기 위해 데이터 집합의 또 다른 부분은 이른바'검증집합'이라고 할 수 있다. 훈련은 훈련집합에서 하고 그 다음에 검증집합을 평가하며 실험이 성공한 것 같을 때 테스트집합에서 최종 평가를 할 수 있다.그러나 사용 가능한 데이터를 세 그룹으로 나누어 학습 모델에 사용할 샘플 수를 크게 줄였고 결과는 한 쌍(훈련, 검증) 집합의 특정한 무작위 선택에 달려 있을 수 있다.해결: 이 문제를 해결하는 방법은 교차 검증(약칭 이력서)이라고 불리는 과정이다.하나의 테스트 세트에는 최종 평가가 필요하지만 CV에서는 더 이상 검증 세트가 필요하지 않습니다.기본적인 방법에서 k-fold CV라고 하는데 훈련집은 k개의 비교적 작은 집합으로 나뉜다(다른 방법은 다음과 같지만 보통 같은 원칙을 따른다).그리고 k배 교차 검증 보고서를 통해 실적 지표는 순환에서 계산된 값의 평균값이다.이런 방법은 계산에 있어서 비쌀 수 있지만 너무 많은 데이터(예를 들어 임의의 테스트 집합을 고정시키는 경우)를 낭비하지 않는다. 이것은 문제의 주요 장점이다. 예를 들어 역추리 등이다. 그 중에서 견본의 수량은 매우 적다.
    교차 검증의 도량을 계산하고 교차 검증을 사용하는 가장 간단한 방법은crossval_score는 추정기와 데이터 집합에서 도움말 함수를 호출합니다.기본적으로 각 CV가 반복적으로 계산하는 점수는 score 추정량의 방법입니다.점수 매개 변수를 사용하여 그것을 바꿀 수 있다. print(cross_val_score(clf,data,target,cv=5,scoring="f1_macro")) 따라서 점수 추정의 평균 점수와 95% 신뢰 구간은 다음과 같다.
    print('Accuracy:%.2f(+/-%.2f)'%(scores.mean(),scores.std()*2))
    

    교차 검증을 통해 이 함수와 입력된 모든 요소cross 를 예측합니다val_predict는 유사한 인터페이스cross 를 가지고 있습니다val_score, 그러나 이 원소가 테스트에 집중되었을 때 이 원소에 대한 예측을 되돌려줍니다.교차 검증 정책만이 모든 요소를 테스트 집합에 한 번 정확하게 분배할 수 있습니다. (그렇지 않으면 이상이 발생합니다.)그런 다음 이러한 예측을 사용하여 분류기를 평가할 수 있습니다.
     
    dicted=cross_val_predict(clf,data,target,cv=5)
    print(accuracy_score(target,dicted))
    print(mean_squared_error(target,dicted))
    

    좋은 웹페이지 즐겨찾기