Обмен технологиями

Алгоритм повышения градиента Python28-11 CatBoost

2024-07-12

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

картина

CatBoost (Категорическое бустинг) — алгоритм машинного обучения, основанный на градиентном бустинге, разработанный Яндексом (российской интернет-компанией, чья поисковая система когда-то занимала более 60% доли рынка в России, а также предоставляла другие интернет-продукты и услуги). CatBoost особенно хорошо справляется с категориальными функциями и позволяет эффективно избегать проблем переобучения и утечки данных. Полное название CatBoost — «Категорическое повышение». Оно предназначено для повышения производительности при обработке данных, содержащих большое количество категориальных функций.

Возможности CatBoost

  1. Обработка категориальных признаков: CatBoost может напрямую обрабатывать категориальные функции без дополнительного кодирования (например, горячего кодирования).

  2. Избегайте переобучения: CatBoost использует новый метод обработки функций категорий, который эффективно уменьшает переобучение.

  3. Эффективность: CatBoost показывает хорошие результаты как по скорости обучения, так и по скорости прогнозирования.

  4. Поддерживает обучение процессора и графического процессора.: CatBoost может работать на процессоре или использовать графический процессор для ускоренного обучения.

  5. Автоматически обрабатывать пропущенные значения: CatBoost может автоматически обрабатывать пропущенные значения без дополнительных шагов предварительной обработки.

Основные принципы CatBoost

Основной принцип CatBoost основан на дереве решений повышения градиента (GBDT), но он является инновационным в обработке категориальных функций и предотвращении переобучения. Вот некоторые ключевые технические моменты:

  1. Обработка признаков категории

    • CatBoost представляет метод под названием «кодирование среднего значения» для расчета новых функций на основе среднего значения категорий.

    • Используя метод, называемый «целевое кодирование», риск утечки данных снижается за счет использования среднего значения целевых значений при преобразовании категориальных признаков в числовые признаки.

    • В процессе обучения данные обрабатываются с использованием статистической информации, чтобы избежать прямого кодирования целевой переменной.

  2. Заказное усиление

    • Чтобы предотвратить утечку данных и переобучение, CatBoost упорядоченно обрабатывает данные во время обучения.

    • Упорядоченное повышение работает путем случайного перемешивания данных во время обучения и гарантирует, что модель видит прошлые данные только в определенный момент и не использует будущую информацию для принятия решений.

  3. Вычислительная оптимизация

    • CatBoost ускоряет процесс расчета объектов за счет предварительного вычисления и кэширования.

    • Поддерживает обучение процессоров и графических процессоров и может хорошо работать с крупномасштабными наборами данных.

Базовое использование CatBoost

Ниже приведен базовый пример использования CatBoost для задачи классификации. Мы используем набор данных Auto MPG (мили на галлон), который представляет собой классический набор данных для задачи регрессии, обычно используемый в машинном обучении и статистическом анализе. В этом наборе данных фиксируется топливная экономичность (т. е. количество миль на галлон) различных моделей автомобилей, а также некоторые другие связанные характеристики.

Характеристики набора данных:

  • миль на галлон: миль на галлон (целевая переменная).

  • цилиндры: Число цилиндров, указывающее количество цилиндров в двигателе.

  • смещение: Объем двигателя (кубические дюймы).

  • Лошадиные силы: Мощность двигателя (лошадиные силы).

  • масса: Вес автомобиля в фунтах.

  • ускорение: Время разгона от 0 до 60 миль в час (секунд).

  • год выпуска: Год выпуска автомобиля.

  • источник: Происхождение автомобиля (1=США, 2=Европа, 3=Япония).

Первые несколько строк набора данных:

  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

Пример кода:

  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. '''

Среднеквадратическая ошибка (СКО) : Среднеквадратическая ошибка, которая представляет собой среднеквадратическую разницу между прогнозируемым значением и фактическим значением. Чем меньше значение, тем лучше производительность модели, здесь значение MSE равно 4,9042.

Средняя абсолютная ошибка (MAE) : Средняя абсолютная ошибка, которая представляет собой среднюю абсолютную разницу между прогнозируемым значением и фактическим значением. Чем меньше значение, тем лучше производительность модели, здесь значение MAE составляет 1,6381.

картина

  1. График рассеяния : Каждая точка на рисунке представляет тестовый образец. По оси абсцисс отображается истинное значение выборки (миль на галлон), а по оси ординат — прогнозируемое значение модели (миль на галлон).

  2. диагональ: Черная пунктирная линия на рисунке представляет собой диагональную линию под углом 45 градусов, которая представляет результат прогнозирования в идеальных условиях, то есть прогнозируемое значение равно истинному значению.

  3. Распределение очков:

    • близко к диагонали: указывает, что прогнозируемое значение модели очень близко к истинному значению и прогноз является точным.

    • держись подальше от диагонали: указывает на большой разрыв между прогнозируемым значением и фактическим значением, а также на то, что прогноз является неточным.

Из точек на рисунке видно, что большинство точек сосредоточено вблизи диагонали, что указывает на хорошую прогнозируемость модели. Однако есть также некоторые точки, которые находятся далеко от диагонали, что указывает на ее наличие. определенный разрыв между прогнозируемыми значениями этих образцов и истинными значениями.

картина

  1. Гистограмма : каждая полоса отражает важность функции в модели. Чем длиннее полоса, тем больший вклад признака в прогноз модели.

  2. Название функции: список названий всех объектов по оси Y.

  3. Значение важности функции: Показывает относительную важность каждой функции по оси X.

Как видно из картинки:

  1. год выпуска: Самая важная из всех характеристик, указывающая на то, что год выпуска автомобиля оказывает сильное влияние на прогнозируемую топливную экономичность.

  2. масса: Вес автомобиля является второй по значимости характеристикой и также оказывает существенное влияние на топливную экономичность.

  3. смещениеиЛошадиные силы: Объем и мощность двигателя также существенно влияют на топливную экономичность.

В этом примере мы используем CatBoost для обработки набора данных Auto MPG, основная цель которого — построить регрессионную модель для прогнозирования топливной эффективности автомобиля (т. е. миль на галлон, миль на галлон).

Вышеуказанный контент взят из Интернета. Если он вам полезен, перешлите его. Увидимся в следующий раз!