DataWhale 주간 알고리즘 실천 4 - 모델 변조 (50% 할인 교차 검증 실천)
29178 단어 알고리즘 항목
이번 임무
격자 검색 법 을 사용 하여 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 는 자체 적 으로 포크 검증 을 완성 하 는 것 외 에 가장 좋 은 초 매개 변수 와 대응 하 는 최 적 화 된 모델 도 되 돌려 주 었 다.