Partage de technologie

Algorithme d'augmentation de gradient Python28-11 CatBoost

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

image

CatBoost (Categorical Boosting) est un algorithme d'apprentissage automatique basé sur le gradient boosting développé par Yandex (une société Internet russe dont le moteur de recherche détenait autrefois plus de 60 % des parts de marché en Russie et fournit également d'autres produits et services Internet). CatBoost est particulièrement efficace dans la gestion des fonctionnalités catégorielles et peut efficacement éviter les problèmes de surajustement et de fuite de données. Le nom complet de CatBoost est « Catégorique Boosting ». Il est conçu pour être plus performant lors du traitement de données contenant un grand nombre de fonctionnalités catégorielles.

Fonctionnalités CatBoost

  1. Traitement des caractéristiques catégorielles: CatBoost peut traiter directement les fonctionnalités catégorielles sans encodage supplémentaire (tel qu'un encodage à chaud).

  2. Évitez le surapprentissage: CatBoost adopte une nouvelle méthode de traitement des caractéristiques des catégories, qui réduit efficacement le surajustement.

  3. Efficacité: CatBoost fonctionne bien en termes de vitesse d'entraînement et de vitesse de prédiction.

  4. Prend en charge la formation CPU et GPU: CatBoost peut fonctionner sur le CPU ou utiliser le GPU pour un entraînement accéléré.

  5. Gérer automatiquement les valeurs manquantes: CatBoost peut gérer automatiquement les valeurs manquantes sans étapes de prétraitement supplémentaires.

Les principes fondamentaux de CatBoost

Le principe de base de CatBoost est basé sur un arbre de décision d'amplification de gradient (GBDT), mais il est innovant dans le traitement des caractéristiques catégorielles et en évitant le surajustement. Voici quelques points techniques clés :

  1. Traitement des fonctionnalités de catégorie

    • CatBoost introduit une méthode appelée « codage moyen » pour calculer de nouvelles fonctionnalités basées sur la moyenne des catégories.

    • Grâce à une technique appelée « codage cible », le risque de fuite de données est réduit en utilisant la moyenne des valeurs cibles lors de la conversion des caractéristiques catégorielles en caractéristiques numériques.

    • Pendant le processus de formation, les données sont traitées à l'aide d'informations statistiques pour éviter de coder directement la variable cible.

  2. Boosting ordonné

    • Afin d'éviter les fuites de données et le surapprentissage, CatBoost traite les données de manière ordonnée pendant la formation.

    • Le boosting ordonné fonctionne en mélangeant aléatoirement les données pendant la formation et garantit que le modèle ne voit les données passées qu'à un moment donné et n'utilise pas les informations futures pour prendre des décisions.

  3. Optimisation informatique

    • CatBoost accélère le processus de calcul des fonctionnalités grâce au précalcul et à la mise en cache.

    • Prend en charge la formation CPU et GPU et peut fonctionner correctement sur des ensembles de données à grande échelle.

Utilisation de base de CatBoost

Ce qui suit est un exemple de base d'utilisation de CatBoost pour une tâche de classification. Nous utilisons l'ensemble de données Auto MPG (Miles Per Gallon), qui est un ensemble de données de problème de régression classique couramment utilisé dans l'apprentissage automatique et l'analyse statistique. Cet ensemble de données enregistre l'efficacité énergétique (c'est-à-dire les miles par gallon) de différents modèles de voitures ainsi que plusieurs autres caractéristiques connexes.

Caractéristiques de l'ensemble de données :

  • mpg: Miles par gallon (variable cible).

  • cylindres: Nombre de cylindres, indiquant le nombre de cylindres du moteur.

  • déplacement: Cylindrée du moteur (pouces cubes).

  • chevaux-vapeur: Puissance du moteur (chevaux-vapeur).

  • poids: Poids du véhicule en livres.

  • accélération: Temps d'accélération de 0 à 60 mph (secondes).

  • année modèle: Année de production du véhicule.

  • origine: Origine du véhicule (1=États-Unis, 2=Europe, 3=Japon).

Les premières lignes de l'ensemble de données :

  1.     mpg  cylinders  displacement  horsepower  weight  acceleration  model_year  origin
  2. 0  18.0          8         307.0       130.0  3504.0          12.0          70       1
  3. 1  15.0          8         350.0       165.0  3693.0          11.5          70       1
  4. 2  18.0          8         318.0       150.0  3436.0          11.0          70       1
  5. 3  16.0          8         304.0       150.0  3433.0          12.0          70       1
  6. 4  17.0          8         302.0       140.0  3449.0          10.5          70       1

Exemple de code :

  1. import pandas as pd  # 导入Pandas库,用于数据处理
  2. import numpy as np  # 导入Numpy库,用于数值计算
  3. from sklearn.model_selection import train_test_split  # 从sklearn库导入train_test_split,用于划分数据集
  4. from sklearn.metrics import mean_squared_error, mean_absolute_error  # 导入均方误差和平均绝对误差,用于评估模型性能
  5. from catboost import CatBoostRegressor  # 导入CatBoost库中的CatBoostRegressor,用于回归任务
  6. import matplotlib.pyplot as plt  # 导入Matplotlib库,用于绘图
  7. import seaborn as sns  # 导入Seaborn库,用于绘制统计图
  8. # 设置随机种子以便结果复现
  9. np.random.seed(42)
  10. # 从UCI机器学习库加载Auto MPG数据集
  11. url = "http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data"
  12. column_names = ['mpg''cylinders''displacement''horsepower''weight''acceleration''model_year''origin']
  13. data = pd.read_csv(url, names=column_names, na_values='?', comment='t', sep=' ', skipinitialspace=True)
  14. # 查看数据集的前几行
  15. print(data.head())
  16. # 处理缺失值
  17. data = data.dropna()
  18. # 特征和目标变量
  19. = data.drop('mpg', axis=1)  # 特征变量
  20. = data['mpg']  # 目标变量
  21. # 将类别特征转换为字符串类型(CatBoost可以直接处理类别特征)
  22. X['cylinders'= X['cylinders'].astype(str)
  23. X['model_year'= X['model_year'].astype(str)
  24. X['origin'= X['origin'].astype(str)
  25. # 将数据集划分为训练集和测试集
  26. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2random_state=42)
  27. # 定义CatBoost回归器
  28. model = CatBoostRegressor(
  29.     iterations=1000,  # 迭代次数
  30.     learning_rate=0.1,  # 学习率
  31.     depth=6,  # 决策树深度
  32.     loss_function='RMSE',  # 损失函数
  33.     verbose=100  # 输出训练过程信息
  34. )
  35. # 训练模型
  36. model.fit(X_train, y_train, eval_set=(X_test, y_test), early_stopping_rounds=50)
  37. # 进行预测
  38. y_pred = model.predict(X_test)
  39. # 评估模型性能
  40. mse = mean_squared_error(y_test, y_pred)  # 计算均方误差
  41. mae = mean_absolute_error(y_test, y_pred)  # 计算平均绝对误差
  42. # 打印模型的评估结果
  43. print(f'Mean Squared Error (MSE): {mse:.4f}')
  44. print(f'Mean Absolute Error (MAE): {mae:.4f}')
  45. # 绘制真实值与预测值的对比图
  46. plt.figure(figsize=(106))
  47. plt.scatter(y_test, y_pred, alpha=0.5)  # 绘制散点图
  48. plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], '--k')  # 绘制对角线
  49. plt.xlabel('True Values')  # X轴标签
  50. plt.ylabel('Predictions')  # Y轴标签
  51. plt.title('True Values vs Predictions')  # 图标题
  52. plt.show()
  53. # 特征重要性可视化
  54. feature_importances = model.get_feature_importance()  # 获取特征重要性
  55. feature_names = X.columns  # 获取特征名称
  56. plt.figure(figsize=(106))
  57. sns.barplot(x=feature_importances, y=feature_names)  # 绘制特征重要性条形图
  58. plt.title('Feature Importances')  # 图标题
  59. plt.show()
  60. # 输出
  61. '''
  62. mpg  cylinders  displacement  horsepower  weight  acceleration  
  63. 0  18.0          8         307.0       130.0  3504.0          12.0   
  64. 1  15.0          8         350.0       165.0  3693.0          11.5   
  65. 2  18.0          8         318.0       150.0  3436.0          11.0   
  66. 3  16.0          8         304.0       150.0  3433.0          12.0   
  67. 4  17.0          8         302.0       140.0  3449.0          10.5   
  68.    model_year  origin  
  69. 0          70       1  
  70. 1          70       1  
  71. 2          70       1  
  72. 3          70       1  
  73. 4          70       1  
  74. 0: learn: 7.3598113 test: 6.6405869 best: 6.6405869 (0) total: 1.7ms remaining: 1.69s
  75. 100: learn: 1.5990203 test: 2.3207830 best: 2.3207666 (94) total: 132ms remaining: 1.17s
  76. 200: learn: 1.0613606 test: 2.2319632 best: 2.2284239 (183) total: 272ms remaining: 1.08s
  77. Stopped by overfitting detector  (50 iterations wait)
  78. bestTest = 2.21453232
  79. bestIteration = 238
  80. Shrink model to first 239 iterations.
  81. Mean Squared Error (MSE): 4.9042
  82. Mean Absolute Error (MAE): 1.6381
  83. <Figure size 1000x600 with 1 Axes>
  84. <Figure size 1000x600 with 1 Axes>
  85. '''

Erreur quadratique moyenne (MSE) : Erreur quadratique moyenne, qui représente la différence quadratique moyenne entre la valeur prédite et la valeur réelle. Plus la valeur est petite, meilleures sont les performances du modèle, ici la valeur de MSE est de 4,9042.

Erreur absolue moyenne (MAE) : Erreur absolue moyenne, qui représente la différence absolue moyenne entre la valeur prédite et la valeur réelle. Plus la valeur est petite, meilleures sont les performances du modèle, ici la valeur de MAE est de 1,6381.

image

  1. Nuage de points : Chaque point de la figure représente un échantillon test. L'abscisse représente la vraie valeur de l'échantillon (MPG) et l'ordonnée représente la valeur prédite du modèle (MPG).

  2. diagonale: La ligne pointillée noire sur la figure est une ligne diagonale de 45 degrés, qui représente le résultat de la prédiction dans des conditions idéales, c'est-à-dire que la valeur prédite est égale à la valeur réelle.

  3. Répartition des points :

    • proche de la diagonale: Indique que la valeur prédite du modèle est très proche de la valeur réelle et que la prédiction est précise.

    • reste loin de la diagonale: Indique qu'il existe un écart important entre la valeur prédite et la valeur réelle et que la prédiction est inexacte.

À partir des points de la figure, vous pouvez voir que la plupart des points sont concentrés près de la diagonale, ce qui indique que le modèle a de bonnes performances de prédiction. Cependant, certains points sont également éloignés de la diagonale, ce qui indique qu'il y en a. un certain écart entre les valeurs prédites de ces échantillons et l'écart des valeurs réelles.

image

  1. Diagramme à bandes : Chaque barre représente l'importance d'une fonctionnalité dans le modèle. Plus la barre est longue, plus la contribution de la fonctionnalité à la prédiction du modèle est importante.

  2. Nom de la fonctionnalité: Répertorie les noms de toutes les entités sur l'axe Y.

  3. Valeur d'importance des fonctionnalités: affiche la valeur d'importance relative de chaque entité sur l'axe X.

Comme on peut le voir sur la photo :

  1. année modèle: La plus importante de toutes les caractéristiques, indiquant que l’année de production de la voiture a un fort impact sur la consommation de carburant prévue.

  2. poids: Le poids d'une voiture est la deuxième caractéristique la plus importante et a également un impact significatif sur l'efficacité énergétique.

  3. déplacementetchevaux-vapeur: La cylindrée et la puissance du moteur contribuent également de manière significative à l’efficacité énergétique.

Dans l'exemple, nous utilisons CatBoost pour traiter l'ensemble de données Auto MPG, dont l'objectif principal est de créer un modèle de régression pour prédire le rendement énergétique d'une voiture (c'est-à-dire miles par gallon, MPG).

Le contenu ci-dessus est résumé à partir d'Internet. S'il est utile, veuillez le transmettre à la prochaine fois !