分類分析

LightGBMの解説

関連記事: 決定木分析、ランダムフォレスト、Xgboost、CatBoost 「勾配ブースティング」の開発は順調に進んでいます。 勾配ブースティングは、Kaggleで上位ランキングを取った半数以上もの勝者が勾配ブースティングを利用しました。 この記事では、Microsoft開発の「勾配ブースティング」のlightGBMを解説します。 目次 1. LightGBMとは 2. LightGBMの特徴 3. LightGBMのパラメーター 4. 実験・コード __4.1 データ読み込み __4.2 xgb __4.3 lightgb __4.4 モデル評価 1. LightGBMとは LightGBM(読み:ライト・ジービーエム)決定木アルゴリズムに基づいた勾配ブースティング(Gradient Boosting)の機械学習フレームワークです。LightGBMは米マイクロソフト社2016年にリリースされました。前述した通り勾配ブースティングは複数の弱学習器(LightGBMの場合は決定木)を一つにまとめるアンサンブル学習の「ブースティング」を用いた手法です。 LightGBMは大規模なデータセットに対して計算コストを極力抑える工夫が施されています。この工夫により、多くのケースで他の機械学習手法と比較しても短時間でモデル訓練が行えます。 LightGBMはこの「Leaf-wise」という手法を採用しています。従来の「Level-wise」に比べてLightGBMが採用している「Leaf-wise」は訓練時間が短くなる傾向にあります。 2. LightGBMの特徴 モデル訓練に掛かる時間が短い メモリ効率が高い Leaf-Wiseのため推測精度が高い。 LightGBMは大規模データに適している手法 3. LightGBMのパラメーター ・booster [default=gbtree] モデルのタイプを選択: gbtree: ツリーベースのモデル gblinear: 線形モデル ・silent [default=0]: メッセージのモード:1=メッセージを表示しない  0 = メッセージを表示する ・nthread [デフォルトで利用可能なスレッドの最大数] スレッド数の設定 ・eta [default=0.3 GBMのlearning rate 各ステップの重みを縮小することにより、モデルをより堅牢にする …

LightGBMの解説 Read More »

PythonでCatBoostの解説

関連記事: 決定木分析、ランダムフォレスト、Xgboost Kaggleなどのデータ分析競技といえば、XGBoost, Light GBM, CatBoost の決定木アルゴリズムをよく使われています。分類分析系と予測分析系の競技のKaggleの上位にランクされています。今回の記事はCatBoostの新しい決定木アルゴリズムを解説します。 目次 1. CatBoostとは 2. 実験・コード __2.1 データロード __2.2 10,000件くらいサンプルデータを作成 __2.3. XGBoost グリッドサーチで 81モデルから最適なパラメータを探索 __2.4 XGBoost 最適なパラメータのモデルを作成 __2.5. Light GBM グリッドサーチで 81モデルから最適なパラメータを探索 __2.6 Light GBM最適なパラメータのモデルを作成(Categorial Feature除く) __2.7 Light GBM最適なパラメータのモデルを作成(Categorial Feature含む) __2.8. CatBoost グリッドサーチで 81モデルから最適なパラメータを探索 __2.9 CatBoost 最適なパラメータのモデルを作成(Categorial Feature除く) __2.10 CatBoost 最適なパラメータのモデルを作成(Categorial Feature含む 3. モデル評価評価:学習時間 AUC 1. CatBoostとは CatBoostはCategory Boostingの略で、決定木ベースの勾配ブースティングに基づく機械学習ライブラリ。2017にYandex社からCatBoostが発表されました。 特徴: 1)回帰予測、分類の教師あり学習に対応 2)過学習を減らして、高い精度、学習速度を誇る 3)GPU、マルチGPUに対応 決定木ベースのアルゴリズムの歴史 CatBoostは、オーバーフィットを減らし、データセット全体をトレーニングに使用できるようにする、より効率的な戦略を使用します。 …

PythonでCatBoostの解説 Read More »

Azure ML Studioで顧客データ分析の実験(CRM analysis)

前回の記事は「Azure ML Studioでの機械学習の設定」を解説しました。 今回の記事はAzure ML Studioで顧客データ分析の実験を紹介します。 今回のデータセットはThe KDD Cup 2009 のデータです。 230特徴量の顧客属性とアップセル、新製品販売、解約の顧客行動履歴のフランスの通信会社Orangeデータです。50,000件のデータから3つの分類分析モデルを作成します。   解決課題 1)アップセルデータでアップセルしやすい人を見つけます。 2)新製品販売のデータで新製品を買う可能性高い人を見つけます。 3)解約データで解約したい人を見つけます   全体のExperimentの図は下記になります。特徴量の顧客属性と3つの過去行動のターゲットを結合して、モデルを作成します。   Var1からVar230は特徴量の5万件のデータセットです。 特徴データは欠損値がありますので、欠損値を0に置き換えます。   「Add Columns」 のモジュールで特徴量のと各ターゲットを結合します。 次に、vol1の層別化でテストとトレーニングを半分に分割します。   次に、予測モデルを構築するために、既定のパラメーターを持つ2クラスブーストデシジョンツリーバイナリ分類器を使用します。 ブースト デシジョン ツリーとは第2の木が第1の木の誤差を補正し、第3の木が第1および第2の木の誤差を補正するというように、集団学習法である。 ツリー全体の集合に基づいて予測あします。   Evaluate Model:アップセルタ テストセットに対するモデルのパフォーマンスは、Evaluate Modelモジュールの出力を視覚化することで確認できます。 「アップセルタ」では、ROC曲線は、モデルがランダムモデルよりも優れていること、および曲線下面積(AUC)が0.857であることを示しています。 しきい値が0.5の場合、精度は0.663、再現率は0.463、F1スコアは0.545です。   Evaluate Model:新製品販売 「新製品販売」のROC曲線では、AUCが0.727であることを示しています。   Evaluate Model:解約 「解約」のROC曲線では、AUCが0.711であります。     モデルの確認 [Train Model]のモジュールの Visualization 決定木図が表します。 モデルの判断を確認することができます。 決定木は、葉が分類を表し、枝がその分類に至るまでの特徴の集まりを表すような木構造を示します。データの持つ素性の中で集められたデータを一番よく分割する素性と閾値の組を選びます.その素性と閾値で分割後、またそれぞれのノードで分割を繰り返し行っていきます。分割が実行不可能となった場合、または、部分集合の個々の要素が各々1つずつの分類となってしまう段階で終了します。 …

Azure ML Studioで顧客データ分析の実験(CRM analysis) Read More »

グリッドサーチ(ハイパーパラメータ最適化)のまとめと例

(2019年7月27日の更新) 前回の記事は「モデル評価」を話しました。 今回の記事はグリッドサーチでのハイパーパラメータ最適化を解説します。 1)グリッドサーチ とは グリッドサーチとは、モデルの精度を向上させるために用いられる手法です。全てのパラメータの組み合わせを試してみる方法のことです。機械学習モデルのハイパーパラメータを自動的に最適化してくれるというありがたい機能。例えば、SVMならCや、kernelやgammaとか 2)GridSearchCV関数の説明 Pythonの機械学習ライブラリscikit-learnにはモデルのハイパーパラメータを調整する方法としてGridSearchCVが用意されています。 class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, iid=’warn’, refit=True, cv=’warn’, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’, return_train_score=False) パラメータ名 説明 estimator : estimator object チューニングを行うモデル param_grid : dict or list of dictionaries パラメタ候補値を「パラメタ名, 候補値リスト」の辞書で与える scoring : string, callable, list/tuple, dict or None, default: None 複数のメトリックを評価するには、文字例のリストか、の辞書で与える n_jobs : int or None, optional (default=None) 同時実行数(-1にするとコア数で同時実行) pre_dispatch …

グリッドサーチ(ハイパーパラメータ最適化)のまとめと例 Read More »

決定木分析のパラメータ解説

前回の記事は決定木の特徴とアルゴリズムを説明しました。今回の記事は決定木のパラメータ設定を説明します。決定木の紹介はこちらです。 Scikit-learnのライブラリのパラメータを説明していきます。 class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)[source]   from sklearn.datasets import load_iris from sklearn import tree   clf = tree.DecisionTreeClassifier(criterion=’gini’,                                   splitter=’best’,                                   max_depth=4,                                   min_samples_split=3,                                   min_samples_leaf=1,                                   min_weight_fraction_leaf=0.0,                                   max_features=4,                                   random_state=None,                                   max_leaf_nodes=8,                                   min_impurity_split=1e-07,                                   class_weight=’balanced’,                                   presort=False)   iris = load_iris() …

決定木分析のパラメータ解説 Read More »

決定木分析

前回の記事は複数の決定木を作成するランダムフォレストを説明しました。決定木のモデルを分からない人があるかもしれません。今回の記事は決定木を説明します。   決定木とは 決定木((Decision Tree:デシジョン ツリー)は予測や分類を目的として使われる教師あり機械学です。段階的にデータを分割していき、木のような分析結果を出力する」ものです。モデルをツリーで表現できるので、どの説明変数が目的変数にどのように効いているのかが視覚的な手法です。目標は、1つのグループ内のすべての要素が同じカテゴリに属するようにデータをグループに分割することです。   決定木分析の長所 説明変数と目的変数にどのように効いているのかが視覚的に分かりやすいというメリットがあります。 数値データとカテゴリデータも対応できるモデルです。 正規化のデータ準備が必要ではありません。 過剰適合しやすく汎化性能が低いです。 「分類」にも「回帰」にも利用可能です。   主要な決定木分析のアルゴリズム 複数ある機械学習アルゴリズムによって異なります。以下に、そのアルゴリズムの一覧を記載します。 種類 分岐に利用する情報 分岐数 目的変数の型 説明変数の型 特徴 CHAID カイ2乗値 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 学習アルゴリズムの中で、最も古いものとして知られています。CARTやC5.0では過学習させてから枝刈りを行いますが、CHAIDでは過学習が起こるまえに木構造の生長を止めます。 CART ジニ係数 2分岐まで 数値変数・カテゴリカル変数 数値変数・カテゴリカル変数 CARTは、C5.0と並び、決定木を構築する代表的なアルゴリズムとして用いられています。CARTでは、過学習を避け、正確な予測モデルを構築するために、いったん木を生長させた後に枝刈りを行います。 ID3 エントロピー 2分岐まで カテゴリカル変数 数値変数・カテゴリカル変数 「繰り返し2分木生成器」と呼ばれる学習アルゴリズムです。最も単純な機械学習アルゴリズムとしても知られています。ヒストリカル変数に対して情報量を用いて、木を構築します。 C4.5 エントロピー 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 ID3の改善版となる学習アルゴリズムです。メモリ効率が良く、意思決定ツリーが小さく、またboostingと呼ばれる技術により高精度であることが利点です。 C5.0 エントロピー 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 C4.5の改善版で、決定木を構築する代表的なアルゴリズムのひとつです。C4.5に比べ、より効率的にメモリを使用することでパフォーマンスの改善が行われています。CARTとよく似ていますが、CARTでは常に2分木構造の決定木を生成しますが、C5.0では3分岐以上の木を生成することができます。   では、Pythonの scikit-learnで決定木のモデル作成し、dtreevizで可視化します。 …

決定木分析 Read More »

Azure ML StudioのTune Hyper Parameterのオプション解説

前回の記事は【Azure ML StudioでのTwo class decision forestのパラメータチューニング】を説明しました。 今回の記事では、Azure ML Studioで機械学習モデルのパラメータ最適化の「Tune Hyper Parameter」のお話になります   各アルゴリズムは既定のパラメータを利用して、実験しているため、最適化されていません。ただし、どのパラメータを変更すればいいのは手間になります。そういう時に利用するモジュールが、「Tune Hyper Parameter」です。このモジュールは、適当に何個かのパラメータを用意し、それぞれの組み合わせで試した後、一番精度の高かったパラメータの組み合わせを学習モデルとして利用できるようになります。そのため各パラメータの最適値を見つける時に、用います。   前回のモデルはTwo class decision forestで献血の過去のデータから、献血の分類モデルを作成しました。     テストデータのAUCは0.632の結果の結果から改善できるか試していきます。   ハイパーパラメータ最適化 「Tune Hyper Parameter」とは、適当に何個かのパラメータを用意し、それぞれの組み合わせで試した後、一番精度の高かったパラメータの組み合わせを学習モデルとして利用できます。   設定するときは、検索範囲を定義し、無作為に選択された有限数のパラメータを使用するか、定義したパラメータ空間を網羅した検索を行います。   Random sweep(ランダムスイープ)決められた回数で、値の範囲を指定し、ランダムに検索されます。   Grid sweep(グリッドスイープ)このオプションは、指定した値の範囲内のすべてのパラメータの組み合わせで、値を検索します。このオプションでチューニングを開始すると、複数のモデルがこれらのパラメータの組み合わせを使用して訓練されます。   Entire grid(グリッド全体)全ての組み合わせで、検索していきます。このオプションは最も徹底的だと考えられますが、最も時間がかかります。   Random grid(ランダムグリッド)このオプションを選択すると、すべての組み合わせの中から、指定した回数だけ評価を行っていきます。     今回は「Random grid」を利用します。 Maximum number of runs on randomは120に設定しました。実際に120種類の組み合わせで試してみました。各組合せの結果は「Tune Model Hyperparameters」を右クリックし、「Sweep Results」>「Visualize」で確認できます。 …

Azure ML StudioのTune Hyper Parameterのオプション解説 Read More »

Azure ML studio Two class decision forestのパラメータ解説

前回の記事は【Azure Machine Learning Studioのモデル作成・デプロイするサービス】を説明しました。 この記事では、Azure ML StudioでTwo class decision forestモデルをお話になります   Two class decision forestとは(ランダムフォレスト) 決定木を弱学習器とする集団学習アルゴリズムであり、この名称は、ランダムサンプリングされたトレーニングデータによって学習した多数の決定木を使用しています。つまりランダムフォレストのようなものになります。 詳細の説明はこちらです。 では、下記の献血の過去のデータから、献血の分類モデルを作成します。 「Two class decision forest」のモデルを作成します。 インポートデータを学習とテストを分けます。学習データからモデル作成します。そして、学習したモデルの予測結果とテストに対して評価します。 精度が高くするために、パラメータを変更します。 値が高ければ高いほど色んな組み合わせが試されるため、精度が上がる可能性が高まりますが、その分実行回数も多いため、結果を得られるまでの時間が長くなります。 設定の説明: Resampling method Bagging または、Replicateの木の構築方法を選択することができます。 Bagging(バギング)はブートストラップアグリゲーションとも呼ばれます。この方法では、各ツリーは、元のデータセットのサイズと同じサイズになるまで、元のデータセットを置換しながらランダムにサンプリングすることによって作成された新しいサンプルで作成されます。 Replicate(複製)各ツリーはまったく同じ入力データについてトレーニングされます。どの分割述語が各ツリーノードに使用されるかの決定はランダムなままであり、ツリーは多様になるだろう   Create trainer mode モデルの学習方法を選べます。 Single Parameter(単一パラメータ)モデルの構成方法がわかっている場合は、引数として特定の値のセットを指定できます。 Parameter Range(パラメータ範囲)最適なパラメータがわからない場合は、複数の値を指定し、Tune Model Hyper parametersモジュールを使用して最適な設定を見つけることによって、最適なパラメータを見つけることができます。提供された設定の複数の組み合わせを反復し、最良のモデルを生成する値の組み合わせを決定します。     Number of decision trees アンサンブルに作成する決定木の総数を示します。 より多くの決定木を作成することで、より良い精度を得ることができますが、トレーニング時間が長くなります。この値は、訓練されたモデルを視覚化するときに表示されるツリーの数も制御します。ただし過学習しやすくなります。   Maximum depth of …

Azure ML studio Two class decision forestのパラメータ解説 Read More »

ランダムフォレスト(分類分析)

ランダムフォレスト(Random Forest)とは   ランダムフォレスト(Random Forest)とは、分類や回帰に使える機械学習の手法です。前回までのリッジ回帰・ラッソ回帰は回帰問題つまり数値を予測する時にしか用いられません。これは最も柔軟で使いやすいアルゴリズムの1つです。 ランダムフォレストはランダムに選択されたデータサンプルによって決定木を作成し、各ツリーから予測を取得し、投票によって最良の解決策を選択します。例えばですが、決定木を5つ作り、5つのうち3つがA、2つがBならばAを選択します。また回帰問題の時は、5つが [10,12,8,4,14]と予測すれば、その平均値9.6、中央値10で予測します。   ランダムフォレストには、レコメンドエンジン、画像分類、機能選択など、さまざまな応用例があります。 というのも精度が非常に高く、評判の良いアルゴリズムになります。   アルゴリズムの4つのステップ 1.与えられたデータセットからランダムサンプルを選択する。 2.各サンプルの決定木を構築し、各決定木から予測結果を得る。 3.予測結果ごとに投票を行います。 4.最終的な予測として最も多くの票を有する予測結果を選択する。   特所 ランダムフォレストは、各決定木の特徴が異なり、複雑な意思決定ができます。 決定木と比較すると過剰適合(オーバーフィッティング 過去記事のリンク)の問題はありません。 主な理由は、すべての予測の平均をとることで、バイアスを相殺します。 ランダムフォレストは欠損値も処理できます。 これらを処理するには、中間値を使用して連続変数を置き換え、欠損値の近接加重平均を計算する2つの方法があります。 重要度を得ることができます。これは、分類子に最も寄与する特徴を選択するのに役立ちます。   短所 ランダムフォレストは、複数の決定木があるため予測の生成が遅い。 予測を行うたびに、フォレスト内のすべてのツリーは、同じ入力に対して予測を行い、その上で投票を実行する必要があります。 このプロセス全体は時間がかかります。 決定木と比較して、モデルは解釈が難しくなっています。なぜならば、複数の木が存在するためです。   Scikit-learnのランダムフォレストのpython   #ライブラリーのインポート from sklearn import datasets #Irisデータロード iris = datasets.load_iris() import pandas as pd data=pd.DataFrame({     ‘sepal length’:iris.data[:,0],     ‘sepal width’:iris.data[:,1],     ‘petal length’:iris.data[:,2], …

ランダムフォレスト(分類分析) Read More »

Mnistで深層学習入門 活性化関数 時間/精度比較

最近、ニュースや記事でよく目にする、耳にする“ ディープラーニング(Deep Learning) ” 。ディープラーニングに興味ある方が多方面に増えてきている一方で、Deep Learningについて知りたいけれども、実際よくわからないと感じている方も多く見受けられます。この記事はディープラーニングについて説明します。過去に紹介してきたクラスタリングや回帰分析とは異なります。 ディープラーニングとは ディープラーニング(deep learning)または深層学習とは、人間の脳神経回路を模したニューラルネットワークを多層的にすることで、コンピューター自らがデータに含まれる潜在的な特徴をとらえ、より正確で効率的な判断を実現させる技術や手法です。 具体的な例は、世界囲碁トップレベルに勝利した人工知能の囲碁プログラム「AlphaGo」のアルゴリズムはディープラーニングです。 「機械学習」と「ディープラーニング」の違いとは? ディープラーニングは機械学習をさらに発展させたものだ。従来の機械学習との大きな違いは、情報やデータを分析する際に使う枠組みが異なっていること。構成、データ量、コンピューティングソースなどの異は下記の表にまとめました。 実験 ディープラーニングを実験すると思っていたところ、kerasでmnistのデータを画像分類します。 Kerasは,Pythonで書かれた,TensorFlowまたはCNTK,Theano上で実行可能な高水準のニューラルネットワークライブラリです. Kerasは,コードが書きやすく、迅速な実験を可能にすることに重点を置いて開発されました. アイデアから結果を得るまでの時間を早くする事で試行錯誤をしやすいというメリットがあります。 mnistのデータ 28×28ピクセル、白黒画像の 手書き数字 のデータセットになります。各ピクセルは0(白)~255(黒)の値をとる。6万枚の学習用画像と1万枚のテスト画像が入っています。今回は活性化関数を変えながら精度と時間比較をしてみます。 https://keras.io/ja/datasets/#mnist 実行環境 Python3.6 Anaconda 5.2.0 Jupyter Notebook5.6.0 Python ライブラリー Tensoflow 1.10.0 Keras 2.2.2 Sklearn 0.19.1 mnist_kerasのPython import numpy as np import tensorflow as tf from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.optimizers import …

Mnistで深層学習入門 活性化関数 時間/精度比較 Read More »