記事のディレクトリ
ランダムフォレストチューニングアプリケーション-乳がんデータセット
次のチューニングプロセスを参照してください:機械学習チューニングの基本的な考え方
Ⅰ。データセットを取得する
# 1.导包
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# 2.导入数据集
breast = load_breast_cancer()
x = breast.data # 获取数据集
y = breast.target # 获取标签
Ⅱ。モデリングと評価の精度
予備的な交差検定評価を通じて、モデルはすでにかなり良好であることがわかります。
# 3.建模、简单评估
rfc = RandomForestClassifier(n_estimators=100,random_state=90)
score = cross_val_score(rfc,x,y,cv=10).mean() # 使用交叉验证默认精确度评估模型
score # 输出交叉验证的分数
0.9648809523809524
Ⅲ。パラメータの調整— n_estimators
ここでは、事前調整テストを実施しn_estimators参数
ます。最も重要なことは、対象を絞った評価です。数、範囲
をトラバースし、さまざまなものを評価し、最終的には、より直感的に傾向を反映します。20
(1,201)
n_estimators
交叉验证十折取平均值
绘制评分曲线
# 4.调参 --- n_estimators
scores = []
for i in range(0, 200, 10):
rfc = RandomForestClassifier(n_estimators=i + 1,
n_jobs=-1,
random_state=90)
score = cross_val_score(rfc, x, y, cv=10).mean()
scores.append(score)
print("最高评分为:", max(scores), "此时的n_estimators是:",
scores.index(max(scores)) * 10 + 1)
# 可视化
plt.figure(figsize=(10, 6))
plt.plot(range(1, 201, 10), scores)
# 设置图形坐标轴颜色为白色
plt.tick_params(axis='x', colors='white')
plt.tick_params(axis='y', colors='white')
plt.show()
Ⅳ。洗練されたパラメータ調整---- n_estimators
予備評価により、n_estimators=71
近くにあるときに最大値があると結論付けることができます。次に、範囲を狭め、学習曲線を改良し、最適なn_estimatorsをさらに選択できるかどうかを確認します。
ここで範囲を取ります(65,75)
、
# 5.细化调参 --- n_estimators
scores = []
for i in range(65,75):
rfc = RandomForestClassifier(n_estimators=i,
n_jobs=-1,
random_state=90)
score = cross_val_score(rfc, x, y, cv=10).mean()
scores.append(score)
print("最高评分为:", max(scores), "此时的n_estimators是:",
[*range(65,75)][scores.index(max(scores))])
# 可视化
plt.figure(figsize=(10, 6))
plt.plot(range(65,75), scores)
# 设置图形坐标轴颜色为白色
plt.tick_params(axis='x', colors='white')
plt.tick_params(axis='y', colors='white')
plt.show()
調整n_estimators
の効果は大きく、モデルの精度はすぐに上がり0.03
ます。次に、グリッド検索を入力します。グリッド検索を使用して、パラメーターを1つずつ調整します。
複数のパラメータを同時に調整してみませんか?2つの理由があります:
- 1)複数のパラメータを同時に調整すると、実行が非常に遅くなります。
- 2)複数のパラメータを同時に調整すると、パラメータの組み合わせがどのように得られるのか理解できなくなるため、グリッド検索の結果が良くなくても、どこを変更すればよいのかわかりません。ここでは、複雑度汎化誤差法(分散バイアス法)を使用するために、パラメーターを1つずつ調整します。
Ⅴ。グリッド検索の調整
参照されていないパラメータがいくつかあり、範囲を特定するのは困難です。この場合、学習曲線を使用して傾向を確認し、曲線の結果からより小さな間隔を選択してから、曲線を実行します。
param_grid = {
'n_estimators':np.arange(0, 200, 10)}
param_grid = {
'max_depth':np.arange(1, 20, 1)}
param_grid = {
'max_leaf_nodes':np.arange(25,50,1)}
大規模なデータセットの場合、1000から構築し、最初に1000を入力し、100リーフごとに間隔を入力してから、範囲を徐々に狭くすることができます。範囲内で見つけることができるいくつかのパラメーターがあるか、それらの値と、モデルの全体的な精度がそれらの値によってどのように変化するかがわかっています。そのようなパラメーターについては、グリッド検索を直接実行できます:
param_grid = {
'criterion':['gini', 'entropy']}
param_grid = {
'min_samples_split':np.arange(2, 2+20, 1)}
param_grid = {
'min_samples_leaf':np.arange(1, 1+10, 1)}
param_grid = {
'max_features':np.arange(5,30,1)}
次の調整パラメーターを汎化誤差のグラフと組み合わせて分析します。
•max_depthを調整します
ここでmax_depthを調整すると、元の値と比較して0.9648809523809524
大幅な改善が見られます。これは、このパラメーターを調整すると、モデル全体が大幅に改善されることを示しています。
# 6.1 调整max_depth
# 一般根据数据的大小来进行一个试探,乳腺癌数据很小,所以可以采用1~10,或者1~20这样的试探
param_grid = {
'max_depth':np.arange(1,20,1)}
rfc = RandomForestClassifier(n_estimators=73,random_state=90)
GS = GridSearchCV(rfc,param_grid,cv=10)
GS.fit(x,y)
print("最佳参数:",GS.best_params_)
print("对应评分:",GS.best_score_)
最佳参数: {
'max_depth': 8}
对应评分: 0.9666353383458647
max_depthを制限することは、モデルを単純にすることです。モデルを左に押します。一般的に言えば、ランダムフォレストは汎化誤差の最低点の右側にある必要があり、ツリーモデルは過適合ではなく過剰適合に傾いている必要があります。現在の観点によれば、より一貫性があります。ただし、最小の汎化誤差を追求するため、より高い精度を達成するのに役立つ他の要因がない限り、以前は最高のn_estimatorsを保持します。
モデルが画像の右側にある場合、必要なのはモデルの複雑さ降低方差,增加偏差
を減らすオプション()であるため、max_depthはできるだけ小さくし、min_samples_leafとmin_samples_splitはできるだけ大きくする必要があります。これはmax_featuresに加えて、我々はまた試すことができ、ほとんどの実例であるmin_samples_leaf
とmin_samples_split
するので、max_depth、min_samples_leaf、およびmin_samples_splitは、複雑さを軽減するためのパラメーターであるプルーニングパラメーターです。。
ここでは、モデルの上限に非常に近いことが予測でき、モデルはさらに改善できる可能性があります。次に、max_featuresを調整して、モデルがどのように変化するかを確認しましょう
•max_featuresを調整します
max_featuresを調整した後、スコアがさらに大幅に増加していることがわかります。また最佳的特征数是24
、特徴の最大数30(データセット自体の特徴の数)よりも少ないことがわかります。これは、元のデータセットの特徴の数が多すぎて、過剰適合している可能性があることを意味します。上の図の汎化誤差、モデルの複雑さは、元の高い方(右側)から左側にわずかにシフトし、徐々に中央の最適なモデルの複雑さに移動します。
# 6.2 调整max_features
"""
max_features是唯一一个即能够将模型往左(低方差高偏差)推,也能够将模型往右(高方差低偏差)推的参数。我
们需要根据调参前,模型所在的位置(在泛化误差最低点的左边还是右边)来决定我们要将max_features往哪边调。
现在模型位于图像左侧,我们需要的是更高的复杂度,因此我们应该把max_features往更大的方向调整,可用的特征
越多,模型才会越复杂。max_features的默认最小值是sqrt(n_features),因此我们使用这个值作为调参范围的
最小值。
"""
param_grid = {
'max_features':np.arange(5,30,1)}
rfc = RandomForestClassifier(n_estimators=73,random_state=90)
GS = GridSearchCV(rfc,param_grid,cv=10)
GS.fit(x,y)
print("最佳参数:",GS.best_params_)
print("对应评分:",GS.best_score_)
最佳参数: {
'max_features': 24}
对应评分: 0.9666666666666668
•min_sample_leafes、min_sample_split、基準を調整します
上記のパラメータのいずれかの調整は、元のモデルよりも大幅に改善されることがわかります。ただし、最適なmax_featuresチューニングパラメータと比較すると、わずかに低く、モデルの上限が基本的に決定されていることを示しています。
したがって、全体として、最適なモデルは次のとおりです。
# 最佳模型
rfc = RandomForestClassifier(n_estimators=73,max_features=24,random_state=90)
score = cross_val_score(rfc,x,y,cv=10).mean()
score
0.9666666666666668