KerasでのFReLU活性化関数

目次 1. FReLU 2. 実験 _2.1 データロード _2.2 FReLU活性化関数 _2.3 モデル作成 _2.4 モデル学習 _2.5 モデル評価 1. FReLU Megvii ResearchInstituteが新しい活性化関数成果を紹介します。活性化関数の分野での革新て画像分類タスクでReLUを大幅に超える新しい活性化関数ファンネル活性化(FReLU)が提案されています。 Megvii Research Instituteは、ごくわずかなspace conditionを追加することにより、ReLUとPReLUを2D活性化関数に拡張しました。 ReLUとPReLUは、それぞれy = max(x、0)とy = max(x、px)として表されますが、FReLUの形式はy = max(x、T(x))です。ここで、T(・)は2D spatial conditionです。   spatial conditions は、ピクセルレベルのモデリング機能を簡単な方法で実装し、従来の畳み込みによって複雑な視覚的レイアウトをキャプチャします。 最後に、ImageNetデータセット、COCOデータセット検出タスク、およびセマンティックセグメンテーションタスクで実験が行われ、視覚認識タスクにおけるFReLU活性化関数の大幅な改善と堅牢性が実証されました。   論文:FReLU: Flexible Rectified Linear Units for Improving Convolutional Neural Networks https://arxiv.org/abs/1706.08098 論文:Funnel Activation for Visual Recognition https://arxiv.org/abs/2007.11824 …

KerasでのFReLU活性化関数 Read More »

RolexBoostの解説

目次 1. RolexBoostの概要 _1.1 RolexBoostとは _1.2 RolexBoostのアルゴリズム _1.3 RolexBoostのモデル評価 2. 実験 _2.1 環境準備 _2.2 データロード _2.3 RolexBoostモデル作成 _2.4 decision treeモデル作成 _2.5 モデル評価 1. RolexBoostの概要 1.1 RolexBoostとは モデルRolexBoostは Rotation-Flexible AdaBoostの略称で、新しい高い精度のアンサンブルのモデルです(RandomForestの亜種です)。RolexBoostはAdaBoostの拡張であり、違いは、適応損失関数を採用することでAdaBoostのパフォーマンスを向上させます。 ハイパーパラメーターは、指数損失の感度を制御します。これにより、各反復で最適な損失関数を特定できます。 RolexBoostは、柔軟な重み更新システムを使用して、範囲外のデータポイントに対してより堅牢な強力な分類器を構築します。 1.2 RolexBoostのアルゴリズム トレーニングデータDtr = {(x1、y1、…)、(xm、ym)}ここで、X = {x1、…、xm}およびY = {y1、…、ym}はそれぞれ説明変数、被説明変数に対応しています。 L:ブートストラップサブサンプルの数 S:部分空間の数 T:反復回数(基本分類子) K:指数損失関数の感度を制御するハイパーパラメーター トレーニングプロセス l = 1からLまで XをS個の部分空間にランダムに分割します:Xl、s s = 1からSの場合 ブートストラップXl、s:X’l、s PCAをX’l、sに適用し、主成分係数を抽出します:Rl、s   …

RolexBoostの解説 Read More »

異常検出アルゴリズム Isolation Forest

目次 1. Isolation Forestとは 2. scikit-learnのIsolationForest 3. 実験 _3.1 データ作成 _3.2 IsolationForestモデル作成 _3.3 モデル評価 1. Isolation Forestとは Isolation Forestは、他の一般的な外れ値検出方法とは異なり、通常のデータポイントをプロファイリングする代わりに、異常を明示的に識別(分類)します。 Isolation Forestは、他のランダムフォレストと同様に、決定木に基づいて構築されます。最初に特徴量をランダムに選択し、選択した特徴量の最小値と最大値の間でランダムな分割値を選択することによって、パーティションが作成されます。 異常データは通常の観測よりも頻度が低く、値の通常の点とは異なります。 そのため、このようなランダムパーティションを使用することで、必要な分割を減らして、ツリーのルートに近い場所でそれらを識別する必要があります。 距離が異常スコアを表し、距離が小さい=異常スコアが高いものです。異常な外れ値的データ点は、早い段階で(木の浅い段階で)分割される確率が高くでてきます。 論文:https://ieeexplore.ieee.org/document/4781136 異常スコアの計算式 異常な値をもつデータはたしかに早い段階でisolateされますが、その平均深さをそのままではなく、その木でふつうに二分探索する際の平均深さ c(n)c(n) で正規化しています。そのため異常スコアを(0,1)区間に収めているため扱いやすくなります。確率値s(x, n)が、1に近いと異常値、0.5に近いと正常値と見なせるようになります。 2. scikit-learnのIsolationForest https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html sklearn.ensemble.IsolationForest(*, n_estimators=100, max_samples=’auto’, contamination=’auto’, max_features=1.0, bootstrap=False, n_jobs=None, random_state=None, verbose=0, warm_start=False) n_estimatorsint, default=100 アンサンブル内の基本推定量の数   max_samples“auto”, int or float, default=”auto” 各基本推定量をトレーニングするためにXから抽出するサンプルの数。   contamination‘auto’ …

異常検出アルゴリズム Isolation Forest Read More »

ウォルラス演算子のユースケース(Walrus Operator:Use cases)

目次 ウォルラス演算子 Walrus Operatorとは ユースケース _2.1 If-Statementsからの値の再利用 _2.2 List Comprehensionsでのフィルタリング _2.3 While-Loopsでのデータ読み取り _2.4 計算されたの再利用   1. ウォルラス演算子 Walrus Operatorとは Python のバージョン 3.8 ( 2019 年 10 月リリース)はウォルラス演算子 (:=)というassignment expressions を導入されました。セイウチの牙に少し似ているため、「セイウチ演算子」(:=)とも呼ばれます。ウォルラス演算子はvarが「value」に設定され、同時に値が出力されます。   2. ユースケース 2.1 If-Statementsからの値の再利用 リストの数量を確認し、リストが指定された値を表示します。warningとリストの数量を出力します。 下記の例は、リストの値が5を超えると、warningとリストの数量を表示します。 values = [1, 2, 3, 4, 5, 6] if (n := len(values)) > 5: print(f’The list is longer …

ウォルラス演算子のユースケース(Walrus Operator:Use cases) Read More »

PyCaret(オープンソースの自動機械学習:AutoML)

目次 1. PyCaretとは 2. 実験: _2.1 環境構築 _2.2 データロード _2.3 モデル比較 _2.4 モデル作成 _2.5 モデルチューニング _2.6 モデル評価 _2.7 モデルのデプロイ _2.8 モデルの保存 _2.9 モデルのロード 1. PyCaretとは PyCaretは、機械学習ワークフローを自動化するPythonのオープンソースのローコード機械学習ライブラリです。 これは、データサイエンスにおいてモデル比較を指数関数的にスピードアップし、生産性を向上させるエンドツーエンドの機械学習およびモデル管理ライブラリーです。 PyCaretのモジュールは下記になります。 – 分類 Classification – 回帰 Regression – クラスタリング Clustering – 異常検出 Anomaly Detection – 自然言語処理(NLP  Natural Language Processing) – アソシエーションルール Association Rules – データセット 今回の実験はバイナリ分類を実験したいと思います。 https://pycaret.readthedocs.io/en/latest/index.html 2. 実験: 環境:Google colab データセット:UCIのmushroomキノコが食べられるか食べられないかのデータです。 e=edible,p=poisonousなどという頭文字だけのcsvデータです。 …

PyCaret(オープンソースの自動機械学習:AutoML) Read More »

レコメンドのランキングの評価指標 (PR曲線とAUC, MRR, MAP, nDCG)

目次 ランキングの評価指標とは PR曲線とAUC(Precision-Recall Curve) MRR(Mean Reciprocal Rank) MAP(Mean Average Precision) nDCG(normalized Discounted Cumulative Gain) 前回の記事は協調フィルタリングのレコメンデーションエンジンについて解説しました。今回はレコメンドの評価について解説していきます。   1. ランキングの評価指標とは ユーザに提示されるのはおすすめ度の高い上位数アイテム(TopN)複数であり、ユーザの嗜好が高いと思われる順にアイテムを正しく並べ変えるタスクと捉えることができます。   2. PR曲線(Precision-Recall Curve) Recallを横軸に、Precisionを縦軸にとり、Top1、Top2,…というように閾値であるTopNの Nを変動させると、RecallとPrecisionが複数点プロットできます。精度が良いほど右上のほうに曲線は膨らんでいきます。さらに曲線と縦軸・横軸で囲まれる部分の面積がPR曲線の AUC(Area Under Curve) です。AUCはArea under the curveの略で、Area under an ROC curve(ROC曲線下の面積)をROC-AUCなどと呼びます。 各クラスのアイテム数がほぼ等しい場合は、ROC曲線を使用します。PR曲線は、不均衡データの評価の時に、よく使われます。 PR曲線のコード サンプル予測結果を作成します。 import numpy as np testy = np.array([1, 1, 0, 0, 1]) yhat = np.array([1, 1, 0, 0, 0]) probs = np.array([0.6, 0.5, 0.1, 0.1, 0.1]) PR曲線とAUCを作成します。 from sklearn.metrics import precision_recall_curve from sklearn.metrics import f1_score from sklearn.metrics import auc from matplotlib import pyplot   # predict class values lr_precision, lr_recall, _ = precision_recall_curve(testy, probs) lr_f1, lr_auc = f1_score(testy, yhat), auc(lr_recall, lr_precision)   # summarize scores print(‘predict: f1=%.3f auc=%.3f’ % (lr_f1, lr_auc)) …

レコメンドのランキングの評価指標 (PR曲線とAUC, MRR, MAP, nDCG) Read More »

協調フィルタリング(Collaborative filtering)レコメンドエンジン

目次 1. 協調フィルタリングの概要 _1.1 協調フィルタリング(Collaborative Filtering)とは _1.2 協調フィルタリングの長所・短所 2. 実験: _2.1 環境設定 _2.2 データロード _2.3 データ確認 _2.4 モデル作成 _2.5 レコメンドエンジンで距離計算 _2.6 入力したデータからレコメンドエンジン利用 1. 協調フィルタリングの概要 前回はTensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】を話しました。レコメンドエンジンは複数アルゴリズムがあります。今回の記事は協調フィルタリング(Collaborative filtering)を解説したいと思います。例えば、Google Playでのアプリのインストールの40%は、推奨事項によるものです。YouTubeの総再生時間の60%は、おすすめによるものです。レコメンドエンジンは非常に大切なことです。 1.1 協調フィルタリング(Collaborative Filtering)とは 協調フィルタリング(Collaborative Filtering、CF)は、多くのユーザの過去の行動履歴と嗜好情報を蓄積し、あるユーザの行動履歴から嗜好を推論するレコメンドエンジンです。 Items:システムが推奨するエンティティ。 Google Playストアの場合、Itemsはインストールするアプリです。 Query:システムが推奨を行うために使用する情報。 クエリは、次の組み合わせにすることができます。 Embedding:離散セット(この場合は、クエリのセット、または推奨するアイテムのセット)から埋め込みスペースと呼ばれるベクトル空間へのマッピングであり、次元削減した結果です。 通常、埋め込みスペースは低次元です。 Similarity Measures:類似性は、二つのユーザーやアイテムのペアを取得し、それらの類似性を測定する値を返す関数です。 距離と類似度の解説の詳細はこちらです。   1.2 協調フィルタリングの長所・短所 長所 ・ドメイン知識は必要ありません。 ・セレンディピティ:このモデルは、ユーザーが新しい興味を発見するのに役立ちます。 ・優れた出発点:ある程度、システムは行列因数分解モデルをトレーニングするためにフィードバック行列のみを必要とします。 短所 ・新しいアイテムを処理できません(コールドスタートの問題)。WALSおよびHeuristicsの手法が必要です。 ・クエリ/アイテムのサイド機能(クエリまたはアイテムID以外の機能)を含めるのは難しいです。   2. …

協調フィルタリング(Collaborative filtering)レコメンドエンジン Read More »

Scikit-learnの新しい機械学習のアルゴリズHistGradientBoostingClassifier

目次 1. HistGradientBoostingClassifier 2. scikit-learnでのHistGradientBoostingClassifierのパラメータ 3. 実験 _3.1 データロード・加工 _3.2 データ前処理 _3.3 モデル作成 _3.4 モデル評価   1. HistGradientBoostingClassifier GradientBoostingTreeはヒストグラムベースの勾配ブースティング分類ツリーアルゴリズムです。この実装はMicrosoftのLightGBMに基づいており、並列化にOpenMPを利用しています。 大きなデータセット(n_samples> = 10000)の場合はGradientBoostingClassifierよりもはるかに高速です。この推定器は、欠測値(NaN)でも学習できます。Scikit-Learnのv0.21.1以降では、HistGradientBoostingを利用できます。   2. scikit-learnでのHistGradientBoostingClassifierのパラメータ sklearn.ensemble.HistGradientBoostingClassifier(loss=’auto’, *, learning_rate=0.1, max_iter=100, max_leaf_nodes=31, max_depth=None, min_samples_leaf=20, l2_regularization=0.0, max_bins=255, monotonic_cst=None, warm_start=False, early_stopping=’auto’, scoring=’loss’, validation_fraction=0.1, n_iter_no_change=10, tol=1e-07, verbose=0, random_state=None) loss{‘auto’, ‘binary_crossentropy’, ‘categorical_crossentropy’}, optional (default=’auto’) ブースティングプロセスで使用する損失関数: 「binary_crossentropy」は二項分類に使用されます マルチクラス分類の「categorical_crossentropy」。 「auto」は、データの性質に応じて、自動設定。 learning_ratefloat, optional (default=0.1) …

Scikit-learnの新しい機械学習のアルゴリズHistGradientBoostingClassifier Read More »

scikit-learnでのカウントデータ予測するポワソン回帰

  目次 1. ポワソン回帰 2. カウントベースのデータ(count data) 3. scikit-learnでのポワソン回帰 4. 実験 _4.1 環境構築 _4.2 データロード・加工 _4.3 ポワソン回帰 _4.4 線形回帰 _4.5 モデル評価 1. ポワソン回帰 ポアソン回帰(Poisson regression )は、カウントデータと分割表をモデル化するために使用される回帰分析の一般化線形モデル形式です。 ポアソン回帰は、応答変数Yがポアソン分布を持っていることを仮定して分析していきます。 ポアソン回帰モデルは、特に分割表のモデル化に使用される場合、対数線形モデル(log-linear model)といいます。 ポアソン分布(Poisson distribution) ポアソン分布(Poisson distribution)は所与の時間内での生起回数の確率を示し、指数分布は生起期間の確率を表示します。横軸は確率変数値 k で、確率質量関数は k が 0 以上の整数のみで定義されます。整数値以外では分布関数は平らになります。 2. カウントベースのデータ(count data) カウントベースのデータはある現象が一定時間内に起こった回数を数え上げたデータのことです。カウントベースのデータの例: 1時間に交差点を通過する車両の数、 1か月に診療所を訪れる人の数 1か月に発見された地球のような惑星の数。 カウントベースのデータの特所: 1. 整数データ:データは非負の整数で構成されます:[0…∞] 2. 偏った分布:データには、ほんの数個の値に対して多数のデータポイントが含まれている可能性があるため、度数分布がかなり歪んでいます。 3. スパース性:データはまれなイベントの発生を反映している可能性があります。 4. 発生率:モデルを作成するために、そのようなデータの生成を駆動するイベントλの特定の発生率があると想定できます。 …

scikit-learnでのカウントデータ予測するポワソン回帰 Read More »

pythonでQRコード画像生成・読み取り(PyQRCode・pyzbar)

  目次 1. QRコードの概要 2. PyQRCode 3. 実験のコード _3.1 環境準備 _3.2 QRコードの生成(Encode) _3.3 QRコード画像の読み取り(Decode) _3.5 QRコード動画の読み取り(Decode)   1. QRコードの概要 どこにでもあるQRコードはpythonでどう生成しますか?この記事はこの質問に回答します。 QRコードの生成と読み取るPythonは複数のパッケージがあります。今回はPyQRCode・pyzbarを解説します。   2. PyQRCode PyQRCodeのパッケージはQRコード作成、エラー修正、QRコードのバージョン、Encodeのモードなどを設定することができます。 pyqrcode.create(content, error=’H’, version=None, mode=None, encoding=None) content(コンテンツ): QRコード error(エラー): ・‘L’ コードの7%を修正できる。 ・‘M’ コードの15%を修正できる「M」。 ・‘Q’一般)コードの25%を訂正できます。 ・‘H’ コードの30%を修正できる。 version(バージョン): ・バージョンは1から40まで設定ができます。バージョン1が最小のQRコードで、バージョン40が最大です。 mode(モード): ・整数をエンコードするために使用される「数値」。 ・一部のASCII文字をエンコードするために使用される「英数字」。 ・「漢字」モードは日本語の文字に使用できますが、shift-jis文字列エンコードで理解できる文字のみです。 ・バイトをQRコードに直接エンコードする「バイナリ」モード   3. 実験のコード 環境:Google Colab Pythonパッケージ:PyQRCode, pypng, pybar …

pythonでQRコード画像生成・読み取り(PyQRCode・pyzbar) Read More »