Compartilhamento de tecnologia

Algoritmo de aumento de gradiente Python28-11 CatBoost

2024-07-12

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

foto

CatBoost (Categorical Boosting) é um algoritmo de aprendizado de máquina baseado em gradiente boosting desenvolvido pela Yandex (uma empresa russa de Internet cujo mecanismo de pesquisa já detinha mais de 60% da participação de mercado na Rússia e também fornece outros produtos e serviços de Internet). CatBoost é particularmente bom no tratamento de recursos categóricos e pode efetivamente evitar problemas de overfitting e vazamento de dados. O nome completo do CatBoost é "Categorical Boosting". Ele foi projetado para ter melhor desempenho ao processar dados que contêm um grande número de recursos categóricos.

Recursos do CatBoost

  1. Processando recursos categóricos: CatBoost pode processar recursos categóricos diretamente sem codificação adicional (como codificação one-hot).

  2. Evite ajuste excessivo: CatBoost adota um novo método de processamento de recursos de categoria, que reduz efetivamente o overfitting.

  3. Eficiência: CatBoost tem um bom desempenho tanto na velocidade de treinamento quanto na velocidade de previsão.

  4. Suporta treinamento de CPU e GPU: CatBoost pode ser executado na CPU ou usar a GPU para treinamento acelerado.

  5. Lidar automaticamente com valores ausentes: CatBoost pode lidar automaticamente com valores ausentes sem etapas adicionais de pré-processamento.

Os princípios básicos do CatBoost

O princípio básico do CatBoost é baseado na árvore de decisão de aumento de gradiente (GBDT), mas é inovador no processamento de recursos categóricos e evitando overfitting. Aqui estão alguns pontos técnicos importantes:

  1. Processamento de recursos de categoria

    • CatBoost introduz um método chamado “codificação média” para calcular novos recursos com base na média das categorias.

    • Usando uma técnica chamada "codificação de destino", o risco de vazamento de dados é reduzido usando a média dos valores de destino ao converter recursos categóricos em recursos numéricos.

    • Durante o processo de treinamento, os dados são processados ​​usando informações estatísticas para evitar a codificação direta da variável alvo.

  2. Impulso ordenado

    • Para evitar vazamento de dados e ajuste excessivo, CatBoost processa os dados de maneira ordenada durante o treinamento.

    • O boosting ordenado funciona embaralhando aleatoriamente os dados durante o treinamento e garante que o modelo só veja os dados passados ​​​​em um determinado momento e não use informações futuras para tomar decisões.

  3. Otimização computacional

    • CatBoost acelera o processo de cálculo de recursos por meio de pré-computação e armazenamento em cache.

    • Suporta treinamento de CPU e GPU e pode funcionar bem em conjuntos de dados em grande escala.

Uso básico do CatBoost

A seguir está um exemplo básico de uso do CatBoost para uma tarefa de classificação. Usamos o conjunto de dados Auto MPG (Miles Per Gallon), que é um conjunto de dados de problema de regressão clássico comumente usado em aprendizado de máquina e análise estatística. Este conjunto de dados registra a eficiência de combustível (ou seja, milhas por galão) de diferentes modelos de automóveis, bem como diversas outras características relacionadas.

Características do conjunto de dados:

  • milha por galão: Milhas por galão (variável alvo).

  • cilindros: Número de cilindros, indicando a quantidade de cilindros do motor.

  • deslocamento: Cilindrada do motor (polegadas cúbicas).

  • cavalo-vapor: Potência do motor (cavalos de potência).

  • peso: Peso do veículo em libras.

  • aceleração: Tempo de aceleração de 0 a 60 mph (segundos).

  • ano modelo: Ano de produção do veículo.

  • origem: Origem do veículo (1=Estados Unidos, 2=Europa, 3=Japão).

As primeiras linhas do conjunto de dados:

  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

Exemplo de código:

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

Erro Quadrático Médio (MSE) : Erro quadrático médio, que representa a diferença quadrática média entre o valor previsto e o valor real. Quanto menor o valor, melhor o desempenho do modelo, aqui o valor do MSE é 4,9042.

Erro Absoluto Médio (MAE) : Erro médio absoluto, que representa a diferença média absoluta entre o valor previsto e o valor real. Quanto menor o valor, melhor o desempenho do modelo, aqui o valor do MAE é 1,6381.

foto

  1. Gráfico de dispersão : Cada ponto na figura representa uma amostra de teste. A abscissa representa o valor verdadeiro da amostra (MPG) e a ordenada representa o valor previsto do modelo (MPG).

  2. diagonal: A linha pontilhada preta na figura é uma linha diagonal de 45 graus, que representa o resultado da previsão em condições ideais, ou seja, o valor previsto é igual ao valor verdadeiro.

  3. Distribuição de pontos:

    • perto da diagonal: indica que o valor previsto do modelo está muito próximo do valor verdadeiro e a previsão é precisa.

    • fique longe da diagonal: indica que há uma grande lacuna entre o valor previsto e o valor real e que a previsão é imprecisa.

A partir dos pontos da figura, você pode ver que a maioria dos pontos está concentrada perto da diagonal, o que indica que o modelo tem um bom desempenho de previsão. Porém, também existem alguns pontos que estão distantes da diagonal, indicando que existe. uma certa lacuna entre os valores previstos dessas amostras e os valores reais.

foto

  1. Gráfico de barras : Cada barra representa a importância de um recurso no modelo. Quanto mais longa a barra, maior será a contribuição do recurso para a previsão do modelo.

  2. Nome do recurso: lista os nomes de todos os recursos no eixo Y.

  3. Valor de importância do recurso: mostra o valor de importância relativa de cada recurso no eixo X.

Como pode ser visto na foto:

  1. ano modelo: A mais importante entre todas as características, indicando que o ano de produção do carro tem um forte impacto na eficiência de combustível prevista.

  2. peso: O peso de um carro é a segunda característica mais importante e também tem um impacto significativo na eficiência de combustível.

  3. deslocamentoecavalo-vapor: A cilindrada e a potência do motor também contribuem significativamente para a eficiência de combustível.

No exemplo, usamos CatBoost para processar o conjunto de dados Auto MPG, cujo objetivo principal é construir um modelo de regressão para prever a eficiência de combustível de um carro (ou seja, milhas por galão, MPG).

O conteúdo acima foi resumido da Internet. Se for útil, encaminhe-o na próxima vez!