尝试在Python中使用catboost


什么是助推器?

基于基于决策树的梯度提升的机器学习库。
最近,它已开始在kaggle中使用,其功能如下。
1.支持有监督的回归和分类学习
2.与kaggle中的主流xg boost和lightGBM相比,它具有较高的准确性和学习速度
3.支持GPU和多GPU
4.支持多种语言(Python,R,C / C)

我使用lightGBM参加了kaggle的监督学习比赛,但是
效果不错,因此请尝试一下。

安装

由于我是Python用户,因此我将介绍如何在Python中安装它。
但是,如果已经安装了pip,则非常简单。

安装必需的软件包

1
2
3
4
5
6
7
# 必須パッケージ
 pip install numpy
 pip install six
 pip install catboost

# オプションパッケージ
 pip install ipywidgets

*请参见下面的conda和源代码安装

https://tech.yandex.com/catboost/doc/dg/concepts/python-installation-docpage/

数据集

在catboost中,泰坦尼克号和亚马逊数据可用作示例数据。
这次,我们将使用与上载到kaggle的呼叫中心相关的数据集。这是取消合同的用户的属性的集合。
https://www.kaggle.com/blastchar/telco-customer-churn

实施

从预处理到学习的过程在下面执行。

读取数据

1
2
3
4
5
6
7
8
9
10
import gc
import pandas as pd

data = pd.read_csv("../inputs/WA_Fn-UseC_-Telco-Customer-Churn.csv")

# strで読み込まれてしまうので、floatに変換
data.TotalCharges = data.TotalCharges.convert_objects(convert_numeric=True)

# 文字列を数値に変換
data.Churn = data.Churn.apply(lambda x : int(0) if x == "No" else int(1))

数据分割

1
2
3
4
X = data.drop(['customerID', 'Churn'], axis=1)
y = data.Churn
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

培训

创建数据集以加载

1
2
3
4
5
6
7
8
9
10
from catboost import Pool
import numpy as np

# カテゴリのカラムのみを抽出
categorical_features_indices = np.where(X.dtypes != np.float)[0]

# データセットの作成。Poolで説明変数、目的変数、
# カラムのデータ型を指定できる
train_pool = Pool(X_train, y_train, cat_features=categorical_features_indices)
validate_pool = Pool(X_test, y_test, cat_features=categorical_features_indices)

模型实例化

1
2
3
4
5
6
7
# 分類用のインスタンスを作成
from catboost import CatBoostClassifier
model = CatBoostClassifier(custom_loss=['Accuracy'],
                           random_seed=42)

# CatBoost, CatBoostRegressorも存在するが損失関数が異なるだけ
# CatBoostClassifierの損失関数はlog_lossデフォルト

开始学习

1
2
3
4
5
model.fit(train_pool,
          eval_set=validate_pool,    # 検証用データ
          early_stopping_rounds=10,  # 10回以上精度が改善しなければ中止
          use_best_model=True,       # 最も精度が高かったモデルを使用するかの設定
          plot=True)                 # 誤差の推移を描画するか否かの設定

*如果将plot设置为True,将显示以下屏幕。
newplot.png

参数调整

1
2
3
4
5
6
7
8
9
10
11
params = {
    'depth' : 6,                  # 木の深さ
    'learning_rate' : 0.16,       # 学習率
    'early_stopping_rounds' : 10,
    'iterations' : 200,
    'custom_loss' :['Accuracy'],
    'random_seed' :42
}
# パラメータを指定した場合は、以下のようにインスタンスに適用させる
model = CatBoostClassifier(**params)
model.fit(train_pool, eval_set=validate_pool)

交叉验证

1
2
3
4
5
6
7
8
from catboost import cv
cv_params = model.get_params()
cv_data = cv(pool=Pool(X, y, cat_features=categorical_features_indices),
             params=cv_params,
             plot=True,
             nfold=10,
             early_stopping_rounds=10
)

您可以使用以下命令检查准确性等。

精度偏差

1
2
3
4
5
print('Best validation accuracy score: {:.2f}±{:.2f} on step {}'.format(
    np.max(cv_data['test-Accuracy-mean']),
    cv_data['test-Accuracy-std'][np.argmax(cv_data['test-Accuracy-mean'])],
    np.argmax(cv_data['test-Accuracy-mean'])
))
功能的重要性

1
2
3
4
feature_importances = model.get_feature_importance(train_pool)
feature_names = X_train.columns
for score, name in sorted(zip(feature_importances, feature_names), reverse=True):
    print('{}: {}'.format(name, score))

摘要

一个易于使用的库。轻松将训练有素的模型转移到C或Python
它可以导出并可以投入实际使用。
我想更深入地研究参数调整,并在将来看到精度的变化。
<铅>