什么是助推器?
基于基于决策树的梯度提升的机器学习库。
最近,它已开始在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,将显示以下屏幕。
参数调整
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 ) |
您可以使用以下命令检查准确性等。
精度偏差 h5>
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'])
))
功能的重要性 h5>
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))
摘要
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
它可以导出并可以投入实际使用。
我想更深入地研究参数调整,并在将来看到精度的变化。
<铅>