機械学習モデルのチューニング

機械学習モデルのチューニング




パラメータの調整

1. パラメータチューニングの目的

  • パラメーター チューニングとは、モデルのパラメーターを調整して、モデルのパフォーマンスが最高になるパラメーターを見つけることです。パラメーター調整の目標は、モデル全体の偏差と分散の間の優れた調和を達成することです。
  • パラメータは、プロセスに影響されるパラメータとサブモデルに影響されるパラメータの 2 つのカテゴリに分類できます。
  • プロセス影響パラメーターとは、具体的には、サブモデルが変わらないことを前提として、「サブモデルの数(n_estimators)」や「学習率(learning_rage)」などのパラメーターを調整し、学習プロセスを変更することで改善するものです。モデル全体のパフォーマンス。サブモデル影響クラスパラメータは、「ツリーの最大深さ(max_ Depth)」や「分割基準(criterion)」などのパラメータを調整してサブモデルの性能を変化させるものです。これにより、モデル全体のパフォーマンスが向上します。バギングのトレーニング プロセスは分散を減らすことを目的としていますが、ブースティングのトレーニング プロセスはバイアスを減らすことを目的としており、クラスに影響を与えるプロセスのパラメーターはモデル全体のパフォーマンスに大きな変化を引き起こす可能性があります。

2. モデル全体のパフォーマンスに対するパラメーターの影響

* 複雑さを軽減し、複雑さに大きな影響を与えるパラメーターを選択し、その単調性を検討してから、状況に応じて、単調ではないパラメーターや複雑さを増大させるパラメーターについて、複雑さを最大限に軽減できるパラメーターの調整に重点を置きます。ほとんどの場合、後退することもできます。(表の上から下に向かうにつれて、推奨パラメータ調整の度合いが徐々に低くなります)。

3. グリッド検索

グリッドサーチは、全数検索を行うためのパラメータチューニング手法です。すべてのパラメータ選択候補のうち、ループ トラバーサルを通じてあらゆる可能性が試行され、最高のパフォーマンスを持つパラメータが最終結果となります。その原理は、配列内の最大値を見つけるのと似ています。2 つのパラメータを持つモデルを例にとると、パラメータ a には 3 つの可能性があり、パラメータ b には 4 つの可能性があります。すべての可能性をリストすると、各単位がグリッドである 3*4 のテーブルとして表現できます。ループ処理は次のようになります。グリッド内を走査して検索するのと似ているため、グリッド検索という名前が付けられています。
以下はグリッド サーチの簡単な例です。iris データセットを使用して、SVC モデルのパラメーターに対してグリッド サーチの調整が実行されます。プロセスは次の表に示されています。

C=0.001 C=0.01 C=0.1 C=1 C=10
ガンマ=0.001 SVC(C=0.001、ガンマ=0.001) SVC(C=0.01、ガンマ=0.001) SVC(C=0.1、ガンマ=0.001) SVC(C=1、ガンマ=0.001) SVC(C=10、ガンマ=0.001)
ガンマ=0.01 SVC(C=0.001、ガンマ=0.01) SVC(C=0.01、ガンマ=0.01) SVC(C=0.1、ガンマ=0.01) SVC(C=1、ガンマ=0.01) SVC(C=10、ガンマ=0.01)
ガンマ=0.1 SVC(C=0.001、ガンマ=0.1) SVC(C=0.01、ガンマ=0.1) SVC(C=0.1、ガンマ=0.1) SVC(C=1、ガンマ=0.1) SVC(C=10、ガンマ=0.1)
ガンマ=1 SVC(C=0.001、ガンマ=1) SVC(C=0.01、ガンマ=1) SVC(C=0.1、ガンマ=1) SVC(C=1、ガンマ=1) SVC(C=10、ガンマ=1)
ガンマ=10 SVC(C=0.001、ガンマ=10) SVC(C=0.01、ガンマ=10) SVC(C=0.1、ガンマ=10) SVC(C=1、ガンマ=10) SVC(C=10、ガンマ=10)
ガンマ=100 SVC(C=0.001、ガンマ=100) SVC(C=0.01、ガンマ=100) SVC(C=0.1、ガンマ=100) SVC(C=1、ガンマ=100) SVC(C=10、ガンマ=100)
  • 具体的なコードとチューニング結果は以下の通りです。
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, stratify=iris.target, random_state=0)  # stratify=y 是根据 y 值对训练和数据集各类别进行训练数据和测试数据等比划分,避免出现训练集和测试集种某种类别失衡
print(f"Size of training set:{
      
      X_train.shape[0]}\nSize of testing set:{
      
      X_test.shape[0]}")

# >>>网格搜索开始>>>
best_score = 0
for gamma in [0.001, 0.01, 0.1, 1, 10, 100]:
	for C in [0.001, 0.01, 0.1, 1, 10]:
		svm = SVC(gamma=gamma, C=C)  # 对于每种参数可能的组合,都进行一次训练
		svm.fit(X_train, y_train)
		score = svm.score(X_test, y_test)

		if score > best_score:  # 找到表现最好的参数
			best_score = score
			best_parameters = {
    
    'gamma': gamma, 'C': C}
# <<<网格搜索结束<<<

print("Best score: {:.2f}".format(best_score))
print("Best parameters: {}".format(best_parameters))

"""
Size of training set: 112
Size of testing set: 38
Best score: 0.97
Best parameters: {'gamma': 0.001', 'C': 100}
"""

4. ハイパーパラメータ空間のモデル化と調整

1. 徹底的なウェブ検索

  • データを使用してランダム フォレスト モデルをトレーニングし、グリッド検索メソッドを使用してパラメーターを調整します。コードは次のとおりです。
from sklearn.model_selection import GridSearchCV  # 导入网格搜索包
from sklearn.model_selection import train_test_split  # 导入数据集划分包
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_iris

# 切分数据,训练数据为80%,验证数据为20%
iris = load_iris()
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, test_size=0.2, stratify=iris.target, random_state=0)

randomForestRegressor = RandomForestRegressor()
parameters = {
    
    'n_estimators': [50, 100, 200], 'max_depth': [1, 2, 3]}

clf = GridSearchCV(randomForestRegressor, parameters, cv=5)
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print("Best parameters found by grid search are:", clf.best_params_)
print("RandomForestRegressor GridSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'max_depth': 2, 'n_estimators': 100}
RandomForestRegressor GridSearchCV test MSE:  0.01656100655431517
"""

2. ランダムパラメータの最適化

  • データを使用してランダム フォレスト モデルをトレーニングし、ランダム パラメーター最適化メソッドを使用してパラメーターを調整します。コードは次のとおりです。
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import train_test_split  # 导入数据集划分包
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

# 切分数据,训练数据为80%,验证数据为20%
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)

randomForestRegressor = RandomForestRegressor()
parameters = {
    
    'n_estimators': [50, 100, 200, 300], 'max_depth': [1, 2, 3, 4, 5]}

clf = RandomizedSearchCV(randomForestRegressor, parameters, cv=5, n_iter=10, random_state=42)  # n_iter=10 表示随即搜索10次,参数是随机组合的。
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print("Best parameters found by grid search are:", clf.best_params_)
print("RandomForestRegressor RandomizedSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'n_estimators': 100, 'max_depth': 2}
RandomForestRegressor RandomizedSearchCV test MSE:  0.017649606213520908
"""

LGB チューニング

  • データを使用して LGB モデルをトレーニングし、グリッド検索メソッドを使用してパラメーターを調整します。コードは次のとおりです。
import lightgbm as lgb
from sklearn.datasets import load_iris
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split

# 切分数据,训练数据为80%,验证数据为20%
iris = load_iris()
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, stratify=iris.target, random_state=20)

clf = lgb.LGBMRegressor(num_leaves=31)
parameters = {
    
    'learning_rate': [0.01, 0.1, 1], 'n_estimators': [20, 40]}

clf = GridSearchCV(clf, parameters, cv=5)
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print('Best parameters found by grid search are: ', clf.best_params_)
print("LGBMRegressor GridSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'learning_rate': 0.1, 'n_estimators': 40}
LGBMRegressor GridSearchCV test MSE:  0.016501047890079536
"""

おすすめ

転載: blog.csdn.net/weixin_51524504/article/details/130058913