機械学習

異常検出アルゴリズム 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 »

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 »

協調フィルタリング(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 »

線形判別分析(Linear Discriminant Analysis) LDA 次元削減

  目次 1. 線形判別分析 (LDA) とは 2. 実験 _2.1 データロード _2.2 データ前処理 _2.3 主成分分析 (PCA) _2.4 線形判別分析 (LDA) 1. 線形判別分析 (LDA) とは 線形判別分析(Linear Discriminant Analysis, LDA)は、次元削減を用いた統計学上の特徴抽出手法のひとつです。主成分分析 (Principle Component Analysis, PCA) は、データの分散が最大となるような次元を探すのに対して、線形判別分析は、データのクラスを最もよく分けられる次元を探します。ここでは、主成分分析 (PCA)と線形判別分析 (LDA)を比較していきたいと思います。 線形判別分析の手法 グループ間の分散を最大にグループの分類を最小にする軸を選びます。 1. クラス内およびクラス間の散布行列を計算します。 2. 散布行列の固有ベクトルと対応する固有値を計算します。 3. 固有値を並べ替えて、上位kを選択します。 4. k個の固有値にマップする固有ベクトルを含む新しい行列を作成します。 5. ステップ4のデータと行列の内積を取得して、新しい特徴(つまり、LDAコンポーネント)を取得します。 線形判別分析の特徴: ・分離を最適化する特徴部分空間を探す ・教師あり ・正規分布が仮定される ・サンプル間が独立であることが仮定される scikit learnの線形判別分析 sklearn.discriminant_analysis.LinearDiscriminantAnalysis(*, solver=’svd’, shrinkage=None, …

線形判別分析(Linear Discriminant Analysis) LDA 次元削減 Read More »

生存分析のKaplan-Meier

目次 1. 生存分析の概要 2. 使用事例 3. 実験 _3.1 Kaplan-Meier _3.2 Kaplan-Meierの比較 _3.3 ログランク検定(Log-rank) 1. 生存分析の概要 生存分析とは、 生存分析は何らかのイベントが起きるまでの時間とイベント発生率の統計的手法です。イベントは、死、回復、誕生、退職のような目的変数です。 どのような分析: ・患者が症状を示すまでの日数を見つけること ・複数のグループ間のイベントを比較すること ・どの治療法が最も高い生存確率があるかを見つけること ・患者の生存数の中央値を見つけること ・どの要因が患者の生存により大きな影響を与えるかを比較すること 生存時間とは、被験者が生きているか、または積極的に調査期間に参加するまでの時間のことです。 イベントの主な種類: 1) 再発(Relapse: relapse-free survival):治療後、元気になるまでの時間。 2)プログレッション(Progression: progression-free survival):治療後、まだ病気で生きているが悪化しない時間。 3) 死(Death):破壊または研究の永久的な終了です。 打ち切り(Censoring) は、データの欠落の問題の一種であり、何らかの理由でイベントまでの時間が観察されません。 2. 使用事例 医療 ・患者の生存時間分析 ・治療時間分析 製造 ・機械故障時間分析 ・運用生産障害分析 ・機械のクリティカルレベル ・修理期間分析 ビジネス ・保証請求期間の分析 ・販売時間分析につながる ・最初の販売分析に販売員の分析 3. 実験 環境:Google Colab ライブラリ:lifelines …

生存分析のKaplan-Meier Read More »

距離と類似度の解説

目次 1. 距離 とは 2. ユークリッド距離 (euclidean distance) 3. マンハッタン距離 (manhattan distance) 4. ミンコフスキー距離 (Minkowski distance) 5. チェビシェフ距離(Chebyshev distance) 6. ハミング距離(Hamming distance) 1. 距離 とは 距離 とは2つのデータが似ている度合いを,類似度の大きさや距離の近さといった数値にしてあらわすことです。機械学習では、多くの機械学習タスクで使用されるデータの類似性と距離を測定します。クラスター分析、レコメンダシステム、自然言語処理(NLP)に色々な距離アルゴリズムが必要です。今回の記事は下記の距離と類似度を解説します。 ・ ユークリッド距離 (euclidean distance) ・ マンハッタン距離 (manhattan distance) ・ ミンコフスキー距離 (Minkowski distance) ・ チェビシェフ距離(Chebyshev distance) ・ ハミング距離(Hamming distance) 2. ユークリッド距離 (英:euclidean distance) ユークリッド距離は、2つのベクトル間の直線距離です。点pとqの間のユークリッド距離は、それらを結ぶ線分の長さです。高次元でマンハッタン距離やチェビシェフ距離よりノイズに強いので、距離差が出にくいです。 計算式: Python script: import scipy.spatial.distance …

距離と類似度の解説 Read More »

OpenCVで画像のInpaintingの解説

目次 1.画像のInpaintingの概要 __1.1 画像のInpaintingとは __1.2 OpenCVのInpainting __1.3 Navier-Stokesのアルゴリズム vs Fast Marching のアルゴリズム 2. 実験 __2.1 実験1: 兎画像に墨痕の削除 __2.2 実験2: 人の画像にウォーターマークの削除 1.画像のInpaintingの概要 1.1 画像のInpaintingとは Inpaint は日本語では修復するという意味です。引っかき傷や,画像の上に書かれた文字などがナチュラルに復元される方法です。今回はOpenCVでのinpaintを説明と実験したいと思います。 1.2 OpenCVのInpainting cv2.inpaint(image, mask, radius, method) –image:修復作業を行う損傷した写真への道 –mask:写真の損傷部分に対応するマスクへのパス –radius:デフォルトの修復半径は3ピクセルに設定されています。 この値を調整して、画像復元の範囲を大きくします。 –method:「telea」または「ns」アルゴリズムの選択ができます。アルゴリズムは、以下のようになっています。 Navier-Stokesのアルゴリズム(INPAINT_NS) 流体力学の理論を適用して、コンピュータービジョンの問題を解決します。下の画像の目的は、黒い領域を塗りつぶして、右のような画像を取得する事です。領域内の画像強度を上記の制約で更新する偏微分方程式(partial differential equation - PDE)を用いて補完をおこなっていきます。画像の滑らかさの情報は、画像のラプラシアンによって推定され、等輝度線(強度が等しい輪郭)に沿って伝播されます。 等輝度線は、90度回転した画像勾配によって推定されます。 Fast Marching のアルゴリズム(INPAINT_TELEA) Fast Marching のアルゴリズムは、異なる手法を使用して補完をしていきます。 滑らかさの推定量として画像ラプラシアンを使用する代わりに、ピクセルの既知の画像近傍の加重平均を使用して修復します。 及び既知の近傍ピクセルと勾配を使用して、修復されるピクセルの色を推定します。逐次的なアルゴリズムであり、ピクセルが修復されると、境界を更新していきます。 長所と短所 理論と論文によれば、Navier-Stokesベースのインペインティングは遅い傾向があり、Fast Marchingベースの方法よりもぼやけた結果を生成する傾向があります。INPAINT_NSはテストでより良い結果を生成し、速度もINPAINT_TELEAよりわずかに優れていました。しかし以下で実験したところそうとは限らないことがわかりました。 アルゴリズムの論文: cv2.INPAINT_TELEA: An …

OpenCVで画像のInpaintingの解説 Read More »