[Kaggle] 여러가지 Titanic 해보기: 그리드 검색
5409 단어 파이썬scikit-learn기계 학습Kaggle
하이퍼파라미터 튜닝
지난번 계속
교차 검증을 조사하고 있으면 다음 기사를 만나
htps : // m / 모두 v3 / ms / 039d4271 d30490 df7b
이것의 후반에 모델에 대한 파라미터의 튜닝의 방법이 실려 있었으므로, 그것을 참고로 이번은 「하이퍼 파라미터의 튜닝」을 해 보기로 한다.
구구루
htps : // bg. 아메다마. jp/엔트리/2017/09/05/221037
몇 가지 구그라고 보았지만, 여기가 자신에게는 가장 알기 쉬웠다.
결국, 각각의 모델? 를 만들 때 매개 변수에 대해,
가득 시험하고 싶기 때문에 그것을 설정할 수 있도록 한 왜 일의 모습.
그래서 이만큼 이해해도 낭비였다.
각각의 모델에 먹이게 하고 싶은 파라미터를 이해하지 않으면 의미가 없다고 이해.
우선 결정 트리와 SVM의 파라미터를 만들어 보았다.
결정 나무
# GridSearchしてその結果最適なパラメータで設定
clf = DecisionTreeClassifier()
# 試行するパラメータを羅列する
params = {
'max_depth': list(range(1, 10)),
'min_samples_split' : list(range(3, 10)),
'criterion': ['gini', 'entropy'],
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
SVM
clf = SVC(class_weight='balanced', random_state=0)
# 試行するパラメータを羅列する
params = {
'C': [0.01, 0.1, 1.0],
'gamma' : [0.01, 0.1, 1.0],
'kernel': ['rbf', 'linear'],
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
GridSearch의 내용 자체는 함께이므로 함수화해 보았다.
def GridSearch(clf, param_grid, cv_cnt, predictor_var, response_var):
print(" --- grid_search ")
# グリッドサーチにより最適値を求める
# from sklearn import grid_search
from sklearn.model_selection import GridSearchCV
grid_search = GridSearchCV(estimator=clf, param_grid=param_grid, scoring='accuracy', cv=cv_cnt, n_jobs=-1)
grid_search.fit(predictor_var, response_var)
print(grid_search.best_score_)
print(grid_search.best_params_)
# print(gs.best_estimator_)
# return grid_search.best_params_
return grid_search.best_estimator_
best_estimator를 반환하는 것보다 grid_search 그 자체를 반환하는 편이 사용하기 쉬운 것일까?
그렇지만, 스코어라든지 파라미터를 반환되어도 사용하지 않을까?
그리고 어느 사이트에도 쓰고 있는 「시간이 걸린다」라는 의미도 이해.
여기 근처에서 PC의 파워가 필요하게 될지도 모른다.
드디어 효과가 높을 것 같은 RandomForest에 대해서도 GridSearch시켜 보기로 한다
참고 : htp : // bg. 타츠시 m. 이 m/? p=63
clf = RandomForestClassifier()
params = {
'n_estimators' : [5, 10, 20, 30, 50, 100, 300],
'max_features' : [3, 5, 10, 15, 20],
'random_state' : [0],
'n_jobs' : [1],
'min_samples_split' : [3, 5, 10, 15, 20, 25, 30, 40, 50, 100],
'max_depth' : [3, 5, 10, 15, 20, 25, 30, 40, 50, 100]
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
return best_estimator
하지만 예외 발생.ValueError: max_features must be in (0, n_features]
max_features로 화가 났기 때문에 일단 디폴트하게 해 그 이외의 파라미터로 시행.
그리고, 얻어진 파라미터가 이하.{'max_depth': 15, 'min_samples_split': 15, 'n_estimators': 50, 'n_jobs': 1, 'random_state': 0}
점수는 0.836139169473
이 파라미터+max_features로 재실시.
그러나 역시 ValueError: max_features must be in (0, n_features]
뭔가가 다르겠지.
잘 모르기 때문에 앞으로 나아가기로 한다.
업로드해보기
그래서 DecisionTree, SVM, Random Forest에 대해 GridSearch한 후 파라미터를 재설정한 결과가 이하.
model_name score
6 Random Forest 0.836176
0 DecisionTree 0.823866
1 LogisticRegression 0.798048
2 Support Vector Machines 0.785587
4 Gaussian Naive Bayes 0.782329
3 k近傍法(KNN) 0.714028
5 Perceptron 0.552625
전회와 비교하면 뭐 그렇게 포인트가 올라간다.
그래서 이것으로 테스트도 맡겨 업로드해 보기로 한다.
상당히 늘었다. Ranking도 가운데 정도까지 왔다.
[참고]
htps : // m / yhyhyhjp / ms / c81f7 72 44
htps : // 이 m / cゔsk / ms / 1f3b178f34c39be b29f
htps : // 코 m / 코지 무라카미 / ms / b7887 f1 세 f11 dc443 a4
h tp // 네우로 에즈카와 r. 이 m/ml8/
h tp // s r 펜타곤. 네 t/아나 ly 치 cs/s しき t_ぇ아 rn_gd d_세아 rch_cv/
Reference
이 문제에 관하여([Kaggle] 여러가지 Titanic 해보기: 그리드 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ryo_naka/items/26c9d63d07caf9990ce6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# GridSearchしてその結果最適なパラメータで設定
clf = DecisionTreeClassifier()
# 試行するパラメータを羅列する
params = {
'max_depth': list(range(1, 10)),
'min_samples_split' : list(range(3, 10)),
'criterion': ['gini', 'entropy'],
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
clf = SVC(class_weight='balanced', random_state=0)
# 試行するパラメータを羅列する
params = {
'C': [0.01, 0.1, 1.0],
'gamma' : [0.01, 0.1, 1.0],
'kernel': ['rbf', 'linear'],
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
def GridSearch(clf, param_grid, cv_cnt, predictor_var, response_var):
print(" --- grid_search ")
# グリッドサーチにより最適値を求める
# from sklearn import grid_search
from sklearn.model_selection import GridSearchCV
grid_search = GridSearchCV(estimator=clf, param_grid=param_grid, scoring='accuracy', cv=cv_cnt, n_jobs=-1)
grid_search.fit(predictor_var, response_var)
print(grid_search.best_score_)
print(grid_search.best_params_)
# print(gs.best_estimator_)
# return grid_search.best_params_
return grid_search.best_estimator_
clf = RandomForestClassifier()
params = {
'n_estimators' : [5, 10, 20, 30, 50, 100, 300],
'max_features' : [3, 5, 10, 15, 20],
'random_state' : [0],
'n_jobs' : [1],
'min_samples_split' : [3, 5, 10, 15, 20, 25, 30, 40, 50, 100],
'max_depth' : [3, 5, 10, 15, 20, 25, 30, 40, 50, 100]
}
best_estimator = GridSearch(clf, params, 10, predictor_var, response_var)
return best_estimator
model_name score
6 Random Forest 0.836176
0 DecisionTree 0.823866
1 LogisticRegression 0.798048
2 Support Vector Machines 0.785587
4 Gaussian Naive Bayes 0.782329
3 k近傍法(KNN) 0.714028
5 Perceptron 0.552625
Reference
이 문제에 관하여([Kaggle] 여러가지 Titanic 해보기: 그리드 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryo_naka/items/26c9d63d07caf9990ce6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)