DataWhale 주간 알고리즘 실천 4 - 모델 변조 (50% 할인 교차 검증 실천)

29178 단어 알고리즘 항목
글 목록
  • 이번 의뢰
  • 2 k 접 기 교차 검증 & 격자 검색 법
  • 3 코드 실천
  • 1. 논리 회귀
  • 2.svm
  • 3. 의사 결정 트 리
  • 4. 랜 덤 숲
  • 5.GBDT
  • 6.XGBoost
  • 7.lightGBM
  • 4 참조
  • 5 사고
  • 1.GridSearchCV & cross_val_score

  • 이번 임무
    격자 검색 법 을 사용 하여 7 개 모델 을 조정 (조정 시 50% 할인 교차 검증 방식) 하고 모델 평 가 를 실시 하여 코드 의 운행 결 과 를 보 여 주 는 것 을 기억 하 세 요.
    2 k 접 기 교차 검증 & 격자 검색 법
    K 접 기 교차 검증 (k - fold cross vaidation) 은 초기 샘플링 (샘플 집합 X, Y) 을 K 부 로 나 누 어 검증 모델 로 보 존 된 데이터 (test set), 기타 K - 1 부 는 훈련 (train set) 에 사용 합 니 다.교차 검증 중복 K 회, 각 검증 1 회, 평균 K 회의 결과 또는 기타 결합 방식 을 사용 하여 단일 한 평 가 를 받 습 니 다.
    Grid Search: 일종 의 인삼 조절 수단;검색: 모든 후보 들 의 매개 변수 선택 에서 순환 을 통 해 모든 가능성 을 시도 하고 가장 좋 은 매개 변 수 를 표현 하 는 것 이 최종 결과 입 니 다.그 원 리 는 수조 에서 최대 치 를 찾 는 것 과 같다.(왜 격자 검색 이 라 고 합 니까? 두 개의 매개 변수 가 있 는 모델 을 예 로 들 면 매개 변수 a 는 3 가지 가능성 이 있 습 니 다. 매개 변수 b 는 4 가지 가능성 이 있 습 니 다. 모든 가능성 을 열거 하면 3 * 4 의 표 로 표시 할 수 있 습 니 다. 그 중에서 모든 cell 은 하나의 격자 입 니 다. 순환 과정 은 모든 격자 에서 옮 겨 다 니 고 검색 하 는 것 과 같 기 때문에 grid search 라 고 합 니 다)
    삼 코드 실천
    1. 논리 회귀
    best_score = 0.0
    # for gamma in [0.001,0.01,0.1,1,10,100]:
    for C in [0.001,0.01,0.1,1,10,100]:
        log_model = LogisticRegression(C=C,random_state =2018)
        scores = cross_val_score(log_model,X_train_stand,y_train,cv=5) #5     
        score = scores.mean() #    
        if score > best_score:
            best_score = score
            best_parameters = {"C":C}
    log_model = LogisticRegression(**best_parameters)
    log_model.fit(X_train_stand,y_train)
    test_score = log_model.score(X_test_stand,y_test)
    print("Best score on validation set:{:.2f}".format(best_score))
    print("Best parameters:{}".format(best_parameters))
    print("Score on testing set:{:.2f}".format(test_score))
    
    Best score on validation set:0.79
    Best parameters:{'C': 0.01}
    Score on testing set:0.78
    

    2.svm
    best_score = 0.0
    for gamma in [0.001,0.01,0.1,1,10,100]:
        for C in [0.001,0.01,0.1,1,10,100]:
            svm = SVC(gamma=gamma,C=C,random_state =2018)
            scores = cross_val_score(svm,X_train_stand,y_train,cv=5) #5     
            score = scores.mean() #    
            if score > best_score:
                best_score = score
                best_parameters = {"gamma":gamma,"C":C}
    svm = SVC(**best_parameters)
    svm.fit(X_train_stand,y_train)
    test_score = svm.score(X_test_stand,y_test)
    print("Best score on validation set:{:.2f}".format(best_score))
    print("Best parameters:{}".format(best_parameters))
    print("Score on testing set:{:.2f}".format(test_score))
    
    Best score on validation set:0.79
    Best parameters:{'gamma': 0.001, 'C': 10}
    Score on testing set:0.78
    

    3. 의사 결정 트 리
    의사 결정 트 리 를 예 로 들 면, 우리 가 의사 결정 트 리 알고리즘 을 사용 할 것 을 확 정 했 을 때, 더욱 잘 맞 추고 예측 할 수 있 도록, 우 리 는 그 매개 변 수 를 조정 해 야 한다.결정 트 리 알고리즘 에서 우리 가 일반적으로 선택 하 는 매개 변 수 는 결정 트 리 의 최대 깊이 입 니 다.
    그래서 우 리 는 일련의 최대 깊이 의 값 을 제시 할 것 이다. 예 를 들 어 {'max depth': [1, 2, 3, 4, 5]}, 우 리 는 가능 한 한 가장 좋 은 깊이 를 포함 할 것 이다.
    def accuracy_score(truth, pred):
        """ Returns accuracy score for input truth and predictions. """
        
        # Ensure that the number of predictions matches number of outcomes
        #                
        if len(truth) == len(pred): 
            
            # Calculate and return the accuracy as a percent
            #        (   )
            #  bool        
            return(truth == pred).mean()*100
        
        else:
            return 0
    
    clf = fit_model_k_fold(X_train_stand, y_train)
    print ("k_fold Parameter 'max_depth' is {} for the optimal model.".format(clf.get_params()['max_depth']))
    print ("k_fold Parameter 'criterion' is {} for the optimal model.".format(clf.get_params()['criterion']))
    
    k_fold Parameter 'max_depth' is 3 for the optimal model.
    k_fold Parameter 'criterion' is gini for the optimal model.
    

    4. 랜 덤 숲
    %%time
    rf_clf = RandomForestClassifier(n_estimators=100, max_depth=5, max_features=0.6, oob_score=True, random_state=2018)
    param_grid = [
        {
          'n_estimators': range(50,300,10),
        }
    ]
    # AUC      ,  5         
    grid_search4 = GridSearchCV(rf_clf, param_grid, scoring='roc_auc', cv=5, n_jobs=-1)
    grid_search4.fit(X_train_stand,y_train)
    print("best para:", grid_search4.best_params_)
    print("Best score on:", grid_search4.best_score_)
    
    best para:{'n_estimators': 280}
    Best score on:0.7886
    

    5.GBDT
    model= GradientBoostingClassifier(learning_rate=1.0, random_state=2018)
    score = cross_validate(model, X_train_stand, y_train, cv=10, scoring='accuracy')
    print("  accuracy", score)
    
      accuracy {'fit_time': array([0.94503713, 0.89858294, 0.93704295, 0.92252803, 0.99808264,
           0.94257784, 1.03067875, 0.96216011, 0.99138594, 1.08498693]), 'score_time': array([0.00094891, 0.00092816, 0.00090098, 0.00241685, 0.0009973 ,
           0.00093627, 0.0008862 , 0.00088882, 0.00092483, 0.00136495]), 'test_score': array([0.75748503, 0.74550898, 0.75449102, 0.74474474, 0.70481928,
           0.74698795, 0.74096386, 0.72891566, 0.76807229, 0.76204819]), 'train_score': array([0.9973271 , 0.9923154 , 0.9973271 , 0.99532398, 0.99833055,
           0.99465776, 0.99732888, 0.99732888, 0.99465776, 0.99766277])}
    

    6.XGBoost
    best_score = 0.0
    # xgb_model = XGBClassifier()
    for gamma in [0.001,0.01,0.1,1,10,100]:
        for C in [0.001,0.01,0.1,1,10,100]:
            xgb_model = XGBClassifier(gamma=gamma,C=C,random_state =2018)
            scores = cross_val_score(svm,X_train_stand,y_train,cv=5) #5     
            score = scores.mean() #    
            if score > best_score:
                best_score = score
                best_parameters = {"gamma":gamma,"C":C}
    xgb_model = XGBClassifier(**best_parameters)
    xgb_model.fit(X_train_stand,y_train)
    test_score = xgb_model.score(X_test_stand,y_test)
    print("Best score on validation set:{:.2f}".format(best_score))
    print("Best parameters:{}".format(best_parameters))
    print("Score on testing set:{:.2f}".format(test_score))
    
    Best score on validation set:0.79
    Best parameters:{'gamma': 0.001, 'C': 0.001}
    Score on testing set:0.78
    

    7.lightGBM
    best_score = 0.0
    # lgb_model = LGBMClassifier()
    for gamma in [0.001,0.01,0.1,1,10,100]:
        for C in [0.001,0.01,0.1,1,10,100]:
            lgb_model = LGBMClassifier(gamma=gamma,C=C,random_state =2018)
            scores = cross_val_score(svm,X_train_stand,y_train,cv=5) #5     
            score = scores.mean() #    
            if score > best_score:
                best_score = score
                best_parameters = {"gamma":gamma,"C":C}
    lgb_model = LGBMClassifier(**best_parameters)
    lgb_model.fit(X_train_stand,y_train)
    test_score = lgb_model.score(X_test_stand,y_test)
    print("Best score on validation set:{:.2f}".format(best_score))
    print("Best parameters:{}".format(best_parameters))
    print("Score on testing set:{:.2f}".format(test_score))
    
    Best score on validation set:0.78
    Best parameters:{'gamma': 0.01, 'C': 0.001}
    Score on testing set:0.76
    

    참고
    https://blog.csdn.net/Softdiamonds/article/details/80062638 https://blog.csdn.net/ChenVast/article/details/79257097 https://www.cnblogs.com/ysugyl/p/8711205.html https://www.jianshu.com/p/3183dd02d579 결정 트 리http://www.cnblogs.com/maybe2030/p/4585705.html 랜 덤 숲https://www.cnblogs.com/zhangbojiangfeng/p/6428988.html XGboost
    다섯 가지 생각
    1.GridSearchCV & cross_val_score
    GridSearchCV (격자 검색) 는 간단 한 말로 모델 에서 변경 하고 자 하 는 인 자 를 수 동 으로 보 여 줍 니 다. 프로그램 은 자동 으로 빈 거 법 을 사용 하여 사용 하 는 인 자 를 한 번 씩 실행 합 니 다.cross_val_score 는 일반적으로 접 을 때마다 교차 검증 의 점 수 를 얻 은 다음 에 이 점 수 를 모델 로 하여 적당 한 초 파 라 메 터 를 선택 합 니 다. 보통 순환 을 통 해 교차 검증 과정 을 수 동 으로 완성 해 야 합 니 다.GridSearchCV 는 자체 적 으로 포크 검증 을 완성 하 는 것 외 에 가장 좋 은 초 매개 변수 와 대응 하 는 최 적 화 된 모델 도 되 돌려 주 었 다.

    좋은 웹페이지 즐겨찾기