分類分析

Pulearnでの陽性のラベルとラベルなしデータの分類分析

  目次 1. Pulearnの概要 2. 実験 2.1 データロード 2.2 SVCモデル 2.3 BaggingPuClassifierのSVCモデル 3. まとめ   1.Pulearnの概要 Pu learningとは Learning from Positive and Unlabeled dataの英語略称で、陽性のラベルとラベルなしデータで学習です。通常の二項分類分析には、1はラベル陽(positive)、0は陰性(negative)であるデータセットです。一方で、0は陰性ではなく、明示的に与えられないデータもあり、そのようなデータセットはpu learningの手法を利用します。   今回の記事では、pulerningを実験したいと思います。   論文:https://cseweb.ucsd.edu//~elkan/posonly.pdf 資料:https://pulearn.github.io/pulearn/   2.実験 環境:Google Colab データセット:陽性のラベルとラベルなしデータセットを見つけないので、scikit-learnの二項分類のbreast_cancerのデータセットにします。 モデル: SVCモデル vs BaggingPuClassifier SVCモデル   2.1 データロード ライブラリのインストール !pip install pulearn   データロードします。 569件のデータは陽性のラベルが357件あります。 import pandas as pd import numpy as np from sklearn.datasets import load_breast_cancer   cancer = load_breast_cancer() data = pd.DataFrame(np.c_[cancer[‘data’], cancer[‘target’]], columns= np.append(cancer[‘feature_names’], [‘target’]))   X = data.drop(columns=[‘target’]) …

Pulearnでの陽性のラベルとラベルなしデータの分類分析 Read More »

eli5での文書分類モデルの解釈

目次 1. eli5の概要 1.1 eli5とは 1.2 eli5のライブラリ 2. 実験 2.1 データロード 2.2 SVCの分類分析 2.3 eli5のモデル解釈 1. eli5の概要 1.1 eli5とは Eli5は「Explain Like I’m 5 (私が5歳だと思って説明して)」を略したスラングです。Eli5は統合されたものを使用してさまざまな機械学習モデルを解釈するPythonライブラリです。   1.2 eli5のライブラリ 対応機械学習ライブラリ: scikit-learn XGBoost LightGBM CatBoost lightning sklearn-crfsuite Keras   2. 実験 環境:Google colab データセット:20 Newsgroups:Usenet*1から収集した約20000文書、20カテゴリのデータセットです。 モデル:SVCの分類分析 モデル解釈:eli5のTextExplainer   ライブラリのインストール !pip install eli5 2.1 データロード Scikit-learnのデータセットから、20 Newsgroupsの学習とテストのデータセットを読み込みます。 from sklearn.datasets import fetch_20newsgroups   categories = [‘alt.atheism’, ‘soc.religion.christian’, ‘comp.graphics’, ‘sci.med’] …

eli5での文書分類モデルの解釈 Read More »

キャリブレーション(calibrated classifiers)

  目次 1. キャリブレーション(calibrated classifiers)の概要 1.1 キャリブレーションのクラスター分析とは 1.2 キャリブレーションのライブラリ 2. 実験 2.1 環境設定 2.2 データセット作成 2.3 SVC 2.4 SVC +キャリブレーションClassifierCV 2.5 まとめ   1. キャリブレーションの概要 1.1 キャリブレーションとは キャリブレーション(calibrated classifiers)はモデルによって算出された予測確率を本来の確率に近づける手法です。普通の分類問題では、どのクラスに属するかを判別するモデルを作りますが、あるクラスに属する確率はどのくらいか、を予測したい場合を考えます。 モデルの出力値を各クラスに属する確率に近づけることを、キャリブレーションと言います。 キャリブレーションの方法を2つ記載します。   Sigmoid/Platt Scaling 説明変数をモデル出力値、目的変数を正解ラベルとしてSigmoid関数にフィットさせ、そのSigmoid関数に通した値をキャリブレーションした値とします。 Isotonic Regression 与えられた順序制約を満たすようにパラメータを推定する問題は単調回帰 (isotonic regression) と呼ばれます。 検量線(けんりょうせん:calibration curve) 下記ののプロットは、calibration_curveを使用して、さまざまな分類器の確率的予測がどの程度適切に較正されているかを比較しています。 x軸は、各ビンの平均予測確率を表します。 y軸は、陽性の割合、つまり、クラスが陽性クラスであるサンプルの割合です。 詳細:https://scikit-learn.org/stable/modules/calibration.html   SklearnのCalibratedClassifierCV https://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html#sklearn.calibration.CalibratedClassifierCV   sklearn.calibration.CalibratedClassifierCV(base_estimator=None, *, method=’sigmoid’, cv=None, …

キャリブレーション(calibrated classifiers) Read More »

KTBoostの解説

  目次 1. KTBoostの概要 1.1 KTBoostのクラスター分析とは 1.2 KTBoostのライブラリ 2. 実験 2.1 環境設定 2.2 データロード 2.3 モデル作成 2.4モデル評価 2.5 # 特徴量の重要性 1. KTBoostの概要 1.1 KTBoostとは KTBoostとは、カーネルブースティングとツリーブースティングを組み合わせた新たなブースティングアルゴリズムです。カーネルとツリーブーストを組み合わせたアイデアは、ツリーは関数の粗い部分を学習するのに適し、RKHS回帰関数は関数の滑らかな部分をよりよく学習できるため、不連続ツリーと連続RKHS関数は互いに補完し合うと考えられています。 論文の結果ですが、RKHSとTreeに比べて良い予測結果がでています。 カーネルとツリーのブースティングの組み合わせの関数: 論文:KTBoost: Combined Kernel and Tree Boosting https://arxiv.org/abs/1902.03999   1.2 KTBoostのライブラリ 2つの主要なクラスは、KTBoost.BoostingClassifierとKTBoost.BoostingRegressorです。 BoostingClassifierは分類分析のクラス、BoostingRegressorは回帰分析のクラスです。   パラメター loss :損失:最適化される損失関数。 KTBoost.BoostingClassifier {‘deviance’, ‘exponential’}, optional (default=’deviance’) KTBoost.BoostingRegressor {‘ls’, ‘lad’, ‘huber’, ‘quantile’, ‘poisson’, ‘tweedie’, …

KTBoostの解説 Read More »

RandomForestのdtreevizで決定木の可視化

  目次 1. dtreeviz 決定木の可視化 2.実験 2.1 環境設定 2.2 データロード 2.3 RandomForestClassifierモデル 2.4 決定木の図 2.5 dtreeviz決定木の図 2.6 葉の純度 2.7 ターゲットクラスの分布   1. dtreeviz 決定木の可視化 dtreevizは決定木関係のアルゴリズム結果を、可視化するライブラリです。対応ライブラリーとしては、scikit-learn, XGBoost, Spark MLlib, LightGBMにおいて利用できます。   Dtreevizは複数プラットフォームに対応されています。 pip install dtreeviz             # sklearn pip install dtreeviz[xgboost]    # XGBoost pip install dtreeviz[pyspark]    # pyspark pip install dtreeviz[lightgbm]   # LightGBM   dtreevizライブラリ:https://github.com/parrt/dtreeviz   dtreeviz関数 …

RandomForestのdtreevizで決定木の可視化 Read More »

LogitBoostの解析

関連記事: NGBoost CatBoost LightGBM      目次 1. LogitBoostの概要 __1.1 LogitBoostとは __1.2 LogitBoostのライブラリ 2. 実験・コード __2.1 環境の準備 __2.2 ライブラリのインポート __2.3. データロード __2.4. データ加工 __2.5. モデル学習 __2.6. モデル評価 1. LogitBoostの概要 1.1 LogitBoostとは LogitBoostは、バイナリまたはマルチクラス分類アルゴリズムの一つになります(一応回帰も可能です)。LogitBoost と AdaBoost は、どちらも加法ロジスティック回帰を行うという点で似ています。違いは、AdaBoost が指数損失を最小化し、LogitBoost がロジスティック関数の損失関数を最小化するように学習する事です。 1.2 LogitBoostのライブラリ 下記のようにScikit-learnライクに使う事ができます。 logitboost.LogitBoost(base_estimator=None, n_estimators=50, weight_trim_quantile=0.05, max_response=4.0, learning_rate=1.0, bootstrap=False, random_state=None) パラメータの意味です。 base_estimator (object, optional (default=None)) classifierまたはregressorを指定することができます。 base_estimatorが指定されていない場合は、decision stump(分ける時に2値のフラグでわけます)が使用されます。 n_estimators …

LogitBoostの解析 Read More »

LiteMORTの解説

関連記事: Xgboost、LightGBM 今回の記事はヒストグラムベースの特徴の新たなLiteMORTを解説します。         目次: 1.  LiteMORTとは 2.  LiteMORTの特徴 3. 実験・コード __3.1 データ読み込み __3.2 LiteMORT xgboost lightGBM __3.3 モデル評価 4. まとめ 1.  LiteMORTとは LiteMORT(A memory efficient gradient boosting tree system on adaptive compact distributions)は、分割の際にヒストグラムを用いていきます。ノイズの多い特徴をよりコンパクトで堅牢に評価します。このアルゴリズムにより、速度が向上し、メモリ使用量が大幅に削減され、精度が維持されます。 LiteMORTの論文 LiteMORT: A memory efficient gradient boosting tree system on adaptive compact distributions  2. LiteMORTの特徴 2.1 適応的なサイズ変更されたビンでの機能の分布。 ヒストグラムのビンは、実際にはさまざまな変数の分布を計算する基礎です。 より洗練されたビンを使用すると、より良い分布パラメーターを取得できます。 一部のビンがより重要な場合は、そのサイズを縮小するか、2つのビンに分割します。 …

LiteMORTの解説 Read More »

NGBoostの解説

Stanford ML Groupは予測の不確かさを扱える新しい勾配ブースティング「NGBoost」を発表された。今回の記事はNGBoostを解説と実験したいです。 関連記事: 決定木分析、ランダムフォレスト、Xgboost、LightGBM 目次: 1.  NGBoostとは 2.  NGBoostの特徴 3. 実験・コード __3.1 データ読み込み __3.2 Xgboost、LightGBM、NGBoost __3.3 モデル評価 __3.4 可視化 4. まとめ 1.  NGBoostとは 勾配ブースティング(Gradient Boosting)は、いくつかの弱学習器(または基本学習器)が加法アンサンブルで結合されています。NGBoostアルゴリズムは、ブースティングを使用して条件付き確率分布のパラメーターを推定する、確率的予測のための教師あり学習方法です。 NGBoostの論文:  NGBoost: Natural Gradient Boosting for Probabilistic Prediction https://arxiv.org/abs/1910.03225 https://stanfordmlgroup.github.io/projects/ngboost/ アルゴリズムには3つの構成要素があります。 Base learner (f) Parametric probability distribution (Pθ) Proper scoring rule (S) Base Learner 決定木などのアルゴリズム Probability Distribution 出力する確率分布、正規分布、ラプラス分布などの分布設定 Scoring rule MLE, …

NGBoostの解説 Read More »

エクストラツリー(ExtraTree)の解説

前回の記事はランダムフォレスト(Random Forest)について解説しました。今回はランダムフォレストに似ているExtraTreesについて解説します。 関連記事: 決定木分析、ランダムフォレスト、Xgboost、CatBoost、LightGBM 目次: 1.  エクストラツリー ExtraTreesとは 2.  エクストラツリー ExtraTreesの特徴 3.  SklearnのExtraTreesのパラメーター 4.  実験・コード __4.1 データ読み込み __4.2 決定木、ランダムフォレスト、ExtraTrees __4.3 モデル評価 1.  エクストラツリー ExtraTreesとは ExtraTrees とは Extremely Randomized Treesの略称です。ExtraTreesClassifierは、基本的に決定木に基づくアンサンブル学習方法です。RandomForestのようなExtraTreesClassifierは、特定の決定とデータのサブセットをランダム化して、データからの過剰学習をランダムフォレストよりも少なくすることを想定されています。 論文はこれになります。 Extremely randomized trees Pierre Geurts · Damien Ernst · Louis Wehenkel https://link.springer.com/content/pdf/10.1007/s10994-006-6226-1.pdf 2.  エクストラツリー ExtraTreesの特徴 決定木とランダムフォレストとExtraTreesを比較します。 決定木 通常、単一の決定木はめ、学習元のデータに対してオーバーフィッテングになりやすいです。通常、ランダムフォレストのほうが精度高い事が多いです。 ランダムフォレスト ランダムフォレストモデルは、複数ツリー(n_estimators)を作成し、過学習を減らす事が出来ます。 Extra Trees Extra Treesはランダムフォレストに似ています。複数のツリーを構築する所は、一緒ですが、木のノード(葉)を分割する所の特徴量(ジニ係数、エントロピー)のどちらかをランダムに選びます。 3.  SklearnのExtraTreesのパラメーター class …

エクストラツリー(ExtraTree)の解説 Read More »

kaggle1位の解析手法 「Cdiscountの画像分類チャレンジ」3 モデルの解説

前回記事の過去のkaggleコンペの「Cdiscountの画像分類チャレンジ」のデータ概要と環境準備を話しました。今回の記事はCdiscountの1位の解析モデル作成と解説します。 目次 1.  「Cdiscountの画像分類チャレンジ」のコンペの概要 ___1.1 コンペの概要 ___1.2 データセットの概要 ___1.3 データの理解 2.  1位の解説の環境準備とデータ処理 ___2.1 特徴量生成 ___2.2 解析方法のサマリー ___2.3 大きなデータセットの準備 3.  1位のモデルの解説 ___3.1 学習済みモデルの調整 ___3.2複数枚の画像データセットを利用 ___3.3 OCRデータの追加 ___3.4そのたの方法 ___3.5 restnetモデルのコード 3.1 学習済みモデルの調整 Resnet34で実験を開始しました。 実験の結果: 1.ほとんどすべての学習済みモデルのネットワーク構造は、1000ラベルのイメージネット用ですが、今回のコンペは5270ラベルがあります。それを直接使用すると、ネットワークのボトルネックが発生します。 2. SGD(Stochastic Gradient Descent)よりADAM Optimizerはエポックの学習が速いと変わりました。 restnet34に1×1カーネルコンボリューションレイヤーを追加しました。チャネルが512から5270になり、FC(完全接続)が5270 * 5270になります。 Adamを追加ました。エポックを増やしたから、Learning rateを小さいくなります。 lr = 0.0003 if epoch > 7: lr = 0.0001 if epoch …

kaggle1位の解析手法 「Cdiscountの画像分類チャレンジ」3 モデルの解説 Read More »