[Exercice SkLearn] Ensemble de données d'application de réglage aléatoire des forêts sur le cancer du sein



Application de réglage aléatoire des forêts - Ensemble de données sur le cancer du sein

Reportez-vous au processus de réglage suivant: l' idée de base du réglage de l'apprentissage automatique

Ⅰ. Obtenez l'ensemble de données

# 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 # 获取标签

Retour au sommet


Ⅱ. Précision de la modélisation et de l'évaluation

Grâce à une évaluation de validation croisée préliminaire, on peut constater que le modèle est déjà assez bon.

# 3.建模、简单评估
rfc = RandomForestClassifier(n_estimators=100,random_state=90)
score = cross_val_score(rfc,x,y,cv=10).mean() # 使用交叉验证默认精确度评估模型
score # 输出交叉验证的分数
0.9648809523809524

Retour au sommet


Ⅲ. Paramètres de réglage - n_estimators

Ici, nous effectuons un test de réglage préliminaire, le plus important est l' n_estimators参数évaluation ciblée .
Nous parcourons le 20nombre, la gamme (1,201), les différents n_estimatorsont été 交叉验证十折取平均值évalués, et finalement 绘制评分曲线, plus intuitifs reflètent les tendances.

# 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()

Insérez la description de l'image ici

Retour au sommet


Ⅳ. Réglage des paramètres affiné ---- n_estimators

Grâce à une évaluation préliminaire, on peut conclure n_estimators=71qu'il y a une valeur maximale quand il est à proximité. Ensuite, nous allons réduire la portée, affiner la courbe d'apprentissage et voir si nous pouvons sélectionner davantage les n_estimateurs optimaux.
Ici nous prenons la gamme (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()

Insérez la description de l'image ici

n_estimatorsL'effet de l' ajustement est significatif et la précision du modèle augmente immédiatement 0.03. Ensuite, entrez dans la recherche de grille, nous utiliserons la recherche de grille pour ajuster les paramètres un par un.

Pourquoi ne pas ajuster plusieurs paramètres en même temps? Il y a deux raisons:

  • 1) Le réglage de plusieurs paramètres en même temps se déroulera très lentement.
  • 2) Ajuster plusieurs paramètres en même temps nous rendra incapable de comprendre comment la combinaison de paramètres est obtenue, donc même si le résultat de la recherche de grille n'est pas bon, nous ne savons pas où le changer. Ici, pour utiliser la méthode d'erreur de complexité-généralisation (méthode de variance-biais), nous ajustons les paramètres un par un.

Retour au sommet


Ⅴ. Réglage de la recherche de grille

Certains paramètres ne sont pas référencés et il est difficile de déterminer une plage. Dans ce cas, nous utilisons la courbe d'apprentissage pour voir la tendance et sélectionnons un intervalle plus petit à partir des résultats de la courbe, puis exécutons la courbe.

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)}

Pour un ensemble de données volumineux, vous pouvez essayer de créer à partir de 1000, entrez d'abord 1000 et un intervalle pour 100 feuilles, puis rétrécissez progressivement la plage. Certains paramètres peuvent être trouvés dans une plage, ou nous connaissons leurs valeurs et comment la précision globale du modèle changera avec leurs valeurs. Pour ces paramètres, nous pouvons directement lancer une recherche de grille:

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)}

Les paramètres de réglage suivants sont combinés avec le graphique d'erreur de généralisation à analyser:
Insérez la description de l'image ici


• Ajuster max_depth

On peut constater que lorsque max_depth est ajusté ici, il y a 0.9648809523809524une amélioration significative par rapport à l'original , indiquant que l'ajustement de ce paramètre a une plus grande amélioration dans le modèle global.

# 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

Limiter max_depth est de rendre le modèle simple, pousser le modèle vers la gauche. D'une manière générale, la forêt aléatoire doit se trouver à droite du point le plus bas de l'erreur de généralisation et le modèle arborescent doit être enclin au surajustement plutôt qu'au sous-ajustement. Selon le point de vue actuel, il est plus cohérent. Cependant, étant donné que nous recherchons l'erreur de généralisation la plus faible, nous conserverons les meilleurs n_estimateurs avant, à moins qu'il n'y ait d'autres facteurs qui peuvent nous aider à obtenir une plus grande précision.

Lorsque le modèle est sur le côté droit de l'image, nous avons besoin d' 降低方差,增加偏差une option pour réduire la complexité du modèle ( ), donc max_depth doit être aussi petit que possible, et min_samples_leaf et min_samples_split doivent être aussi grands que possible. C'est presque une illustration, en plus de max_features, on peut aussi essayer min_samples_leafet min_samples_split, parce quemax_depth, min_samples_leaf et min_samples_split sont des paramètres d'élagage, qui sont des paramètres pour réduire la complexité

Ici, nous pouvons prédire que nous sommes très proches de la limite supérieure du modèle et que le modèle pourra peut-être encore s'améliorer. Puis ajustons max_features pour voir comment le modèle change

Retour au sommet


• Ajuster max_features

Après avoir ajusté max_features, on constate que le score a encore augmenté de manière significative. Et on peut voir que c'est 最佳的特征数是24moins que le nombre maximum d'entités 30 (le nombre d'entités dans l'ensemble de données lui-même), ce qui signifie que le nombre d'entités dans l'ensemble de données d'origine est trop élevé et qu'il peut y avoir un surajustement. l'erreur de généralisation de la figure ci-dessus, le modèle La complexité de est légèrement décalée de l'original supérieur (à droite) vers la gauche, et progressivement déplacée vers la meilleure complexité du modèle au milieu.

# 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

Retour au sommet


• Ajuster min_sample_leafes, min_sample_split, critère

On peut constater que l'ajustement de l'un des paramètres ci-dessus aura une amélioration plus élevée que le modèle d'origine. Mais par rapport au meilleur paramètre de réglage max_features, il est légèrement inférieur, ce qui montre que la limite supérieure du modèle est essentiellement déterminée.

Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Donc, dans l'ensemble, notre meilleur modèle est le suivant:

# 最佳模型
rfc = RandomForestClassifier(n_estimators=73,max_features=24,random_state=90)
score = cross_val_score(rfc,x,y,cv=10).mean()
score

0.9666666666666668

Retour au sommet


Je suppose que tu aimes

Origine blog.csdn.net/qq_45797116/article/details/113808101
conseillé
Classement