ハイパーパラメータを学習と評価を自動的に繰り返すことによって、最適値にする方法があります
Contents
ハイパーパラメータとは
- ユーザーが手動で設定するパラメータのこと。(訓練によって決まらない)
- 決定木の層の深さ、ランダムフォレストの決定木カバレッジなど。
最適化の方法
グリッドサーチ:ハイパーパラメーターを自動で色々振った機械学習モデルを作成するします。(ランダムサーチというやり方もありますがマイナーなので割愛)
グリッドサーチと交差検証を行うのが一般的です。
ではやってみましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# 決定木のハイパーパラメータである層深さの最適化 from sklearn.datasets import load_iris from sklearn.model_selection import GridSearchCV # グリッドサーチ from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split # Irisデータをセットする iris = load_iris() iris.keys() # dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename']) X = iris.data y = iris.target # 訓練用データ と 検証用データに分割する X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 決定木モデルを作成す tree = DecisionTreeClassifier() ''' DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best') ''' # グリッドサーチ用のハイパーパラメータのリストをディクショナリで定義する param_grid = {'max_depth': [3,4,5]} # 層化 10分割 交差検証を行う #(引数としてインスタンス化された決定木モデルをここで入れる) cv = GridSearchCV(tree, param_grid=param_grid, cv=10) cv.fit(X_train, y_train) ''' GridSearchCV(cv=10, error_score='raise-deprecating', estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best'), fit_params=None, iid='warn', n_jobs=None, param_grid={'max_depth': [3, 4, 5]}, pre_dispatch='2*n_jobs', refit=True, return_train_score='warn', scoring=None, verbose=0) ''' # 最適なパラメータを出力する cv.best_params_ # {'max_depth': 3} ''' param_gridを層深さに指定したので、best_prams_も層深さで出力される ''' # 最適なモデルを確認する cv.best_estimator_ ''' DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=5, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best') ''' # 最適なモデルで予測する y_predicted = cv.predict(X_test) y_predicted ''' array([2, 1, 0, 2, 0, 2, 0, 1, 1, 1, 2, 1, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2, 0, 0, 1, 1, 0, 2, 1, 0, 2, 2, 1, 0, 2, 1, 1, 2, 0, 2, 0, 0]) ''' y_true = y_predicted == y_test y_true ''' array([ True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, True, True, True, True, True, True]) ''' |
ああ
ああ
The following two tabs change content below.
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日