Teknologian jakaminen

Python28-11 CatBoost gradientin tehostusalgoritmi

2024-07-12

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

kuva

CatBoost (Categorical Boosting) on ​​Yandexin (venäläinen Internet-yritys, jonka hakukone omisti aikoinaan yli 60 % Venäjän markkinaosuudesta ja joka tarjoaa myös muita Internet-tuotteita ja -palveluita) kehittämä koneoppimisalgoritmi, joka perustuu gradienttitehostukseen. CatBoost on erityisen hyvä käsittelemään kategorisia ominaisuuksia ja voi tehokkaasti välttää yliasennus- ja tietovuoto-ongelmia. CatBoostin koko nimi on "Categorical Boosting". Se on suunniteltu toimimaan paremmin käsiteltäessä tietoja, jotka sisältävät suuren määrän kategorisia ominaisuuksia.

CatBoost-ominaisuudet

  1. Kategoristen ominaisuuksien käsittely: CatBoost voi käsitellä kategorisia ominaisuuksia suoraan ilman ylimääräistä koodausta (kuten one-hot-koodausta).

  2. Vältä yliasennusta: CatBoost ottaa käyttöön uuden menetelmän luokkaominaisuuksien käsittelyyn, mikä vähentää tehokkaasti yliasennusta.

  3. Tehokkuus: CatBoost toimii hyvin sekä harjoitusnopeudessa että ennustusnopeudessa.

  4. Tukee CPU- ja GPU-koulutusta: CatBoost voi toimia suorittimella tai käyttää GPU:ta nopeutettuun harjoitteluun.

  5. Käsittele puuttuvat arvot automaattisesti: CatBoost pystyy käsittelemään puuttuvat arvot automaattisesti ilman ylimääräisiä esikäsittelyvaiheita.

CatBoostin perusperiaatteet

CatBoostin ydinperiaate perustuu gradienttitehostuspäätöspuuhun (GBDT), mutta se on innovatiivinen käsittelemään kategorisia ominaisuuksia ja välttämään ylisovitusta. Tässä on joitain keskeisiä teknisiä kohtia:

  1. Luokkaominaisuuksien käsittely

    • CatBoost esittelee menetelmän nimeltä "keskiarvokoodaus" uusien ominaisuuksien laskemiseksi luokkien keskiarvon perusteella.

    • Käyttämällä "kohdekoodaukseksi" kutsuttua tekniikkaa tietovuodon riskiä pienennetään käyttämällä tavoitearvojen keskiarvoa muunnettaessa kategorisia ominaisuuksia numeerisiksi ominaisuuksiksi.

    • Harjoitteluprosessin aikana dataa käsitellään käyttämällä tilastotietoja, jotta vältytään kohdemuuttujan koodaamiselta suoraan.

  2. Tilattu Boosting

    • Tietovuotojen ja ylisovittamisen estämiseksi CatBoost käsittelee tiedot järjestelmällisesti harjoituksen aikana.

    • Tilattu tehostus toimii sekoittamalla dataa satunnaisesti harjoituksen aikana ja varmistaa, että malli näkee vain tietyllä hetkellä menneitä tietoja eikä käytä tulevaa tietoa päätöksentekoon.

  3. Laskennallinen optimointi

    • CatBoost nopeuttaa ominaisuuden laskentaprosessia esilaskennan ja välimuistin avulla.

    • Tukee CPU- ja GPU-koulutusta ja voi toimia hyvin suurissa tietosarjoissa.

CatBoostin peruskäyttö

Seuraavassa on perusesimerkki CatBoostin käyttämisestä luokitustehtävässä. Käytämme Auto MPG (Miles Per Gallon) -tietojoukkoa, joka on klassinen regressio-ongelmatietojoukko, jota käytetään yleisesti koneoppimisessa ja tilastoanalyysissä. Tämä tietojoukko tallentaa eri automallien polttoainetehokkuuden (eli mailia gallonaa kohti) sekä useita muita asiaan liittyviä ominaisuuksia.

Tietojoukon ominaisuudet:

  • mpg: Mailit per gallona (tavoitemuuttuja).

  • sylinterit: Sylinterien lukumäärä, joka ilmaisee sylinterien lukumäärän moottorissa.

  • siirtymä: Moottorin iskutilavuus (kuutiometriä).

  • hevosvoimaa: Moottorin teho (hevosvoimaa).

  • paino: Ajoneuvon paino paunassa.

  • kiihtyvyys: Kiihtyvyysaika 0 - 60 mph (sekuntia).

  • malli_vuosi: Ajoneuvon valmistusvuosi.

  • alkuperä: Ajoneuvon alkuperä (1 = Yhdysvallat, 2 = Eurooppa, 3 = Japani).

Tietojoukon ensimmäiset rivit:

  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

Esimerkki koodista:

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

Keskimääräinen neliövirhe (MSE) : Keskimääräinen neliövirhe, joka edustaa keskimääräistä neliöeroa ennustetun arvon ja todellisen arvon välillä. Mitä pienempi arvo, sitä parempi mallin suorituskyky, tässä MSE:n arvo on 4,9042.

Keskimääräinen absoluuttinen virhe (MAE) : Keskimääräinen absoluuttinen virhe, joka edustaa keskimääräistä absoluuttista eroa ennustetun arvon ja todellisen arvon välillä. Mitä pienempi arvo, sitä parempi mallin suorituskyky, tässä MAE:n arvo on 1,6381.

kuva

  1. Hajakuvaaja : Jokainen kaavion piste edustaa testinäytettä. Abskissa edustaa näytteen todellista arvoa (MPG) ja ordinaatta edustaa mallin ennustettua arvoa (MPG).

  2. diagonaalinen: Kuvan musta katkoviiva on 45 asteen vinoviiva, joka edustaa ennustustulosta ihanteellisissa olosuhteissa, eli ennustettu arvo on yhtä suuri kuin todellinen arvo.

  3. Pisteiden jakautuminen:

    • lähellä diagonaalia: Osoittaa, että mallin ennustettu arvo on hyvin lähellä todellista arvoa ja ennuste on tarkka.

    • pysy kaukana diagonaalista: Osoittaa, että ennustetun arvon ja todellisen arvon välillä on suuri ero ja ennuste on epätarkka.

Kuvan pisteistä näkyy, että suurin osa pisteistä on keskittynyt lähelle diagonaalia, mikä osoittaa, että mallilla on hyvä ennustekyky. Kuitenkin on myös joitain pisteitä, jotka ovat kaukana diagonaalista, mikä osoittaa, että on tietty ero näiden näytteiden ennustettujen arvojen ja todellisten arvojen välillä.

kuva

  1. Pylväsdiagrammi : Jokainen palkki edustaa mallin ominaisuuden tärkeyttä. Mitä pidempi palkki, sitä suurempi on ominaisuuden osuus mallin ennustuksessa.

  2. Ominaisuuden nimi: Näyttää kaikkien Y-akselin ominaisuuksien nimet.

  3. Ominaisuuden tärkeysarvo: Näyttää kunkin ominaisuuden suhteellisen tärkeysarvon X-akselilla.

Kuten kuvasta näkyy:

  1. malli_vuosi: Kaikista ominaisuuksista tärkein, mikä osoittaa, että auton valmistusvuodella on vahva vaikutus ennustettuun polttoainetehokkuuteen.

  2. paino: Auton paino on toiseksi tärkein ominaisuus ja sillä on myös merkittävä vaikutus polttoainetehokkuuteen.

  3. siirtymäjahevosvoimaa: Moottorin iskutilavuus ja teho vaikuttavat myös merkittävästi polttoainetehokkuuteen.

Esimerkissä käytämme CatBoostia automaattisen MPG-tietojoukon käsittelemiseen, jonka päätarkoituksena on rakentaa regressiomalli ennustamaan auton polttoainetehokkuutta (eli mailia gallonaa kohti, MPG).

Yllä oleva sisältö on tiivistetty Internetistä, jos siitä on apua, lähetä se eteenpäin.