機械学習

Networkxのネットワーク類似度

  目次 1. NetworkXの概要 2. NetworkXの類似性の測定 3. 実験 ・NetworkX環境設定 ・共通部分のノードとエッジの可視化 ・Jaccard係数の集合の類似度 ・graph_edit_distance ・optimal_edit_paths ・optimize_graph_edit_distance ・simrank_similarity 1. NetworkXの概要 NetworkXは、グラフ/ネットワークの作成、加工、構造分析をのPythonのパッケージです。そもそも、数学者、物理学者、生物学者、コンピューター科学者、社会科学者などの分野で活用されています。ソーシャル ネットワーク、分子グラフ、通信ネットワーク、物流ネットワーク、エネルギーネットワークなどの分析を対応します。 このライブラリは多くの機能があり、今回はネットワーク類似度を解説します。   2. NetworkXの類似性の測定(編集距離) グラフ編集距離は、2つのグラフを同形にするために必要なエッジ/ノードの変更の数です。 デフォルトのアルゴリズムは、正確な値ではなく近似値を用いています。 理由は、正確なグラフ編集距離(Graph Edit Distance – GED)における計算の問題は、多くの場合時間がかかります。 グラフ編集距離の例 四角のグラフは三角のグラフに編集は以下の図のような4つステップです。この時は、距離4です。 NetworkXのsimilarityのモジュール: graph_edit_distance(G1, G2[, node_match, …]) グラフG1とG2の間のGED(グラフ編集距離)を返します。 optimal_edit_paths(G1, G2[, node_match, …]) G1をG2に変換するすべての最小コストの編集パスを返します。 optimize_graph_edit_distance(G1, G2[, …]) グラフG1とG2の間のGED(グラフ編集距離)の連続近似を返します。 optimize_edit_paths(G1, G2[, node_match, …]) GED (graph edit distance) …

Networkxのネットワーク類似度 Read More »

ハミングとMLIPNSの文字列の距離

目次 1. ハミング(Hamming) 1.1 ハミングとは 1.2 ハミングのコード例 2. MLIPNS距離 2.1 MLIPNSとは 2.2 MLIPNSのコード例   関連記事: Pythonでの文字列の距離や類似性 距離と類似度の解説   前回はPythonでの文字列の距離や類似性について解説しました。今回の記事はHammingとMLIPNSを解説したいと思います。   1. ハミング(Hamming) 1.1 ハミング距離とは ハミング距離はHamming distanceの英語略称で、等しい文字数を持つ二つの文字列の中で、対応する位置にある異なった文字の個数です。例えば、 「101」と「100」の距離は、1です。 「make」と「made」の距離は、1です。 「job」と「jab」の距離は、1です。 あくまでも異なるかどうかでしか見ないため意味合い等は見る事は当然できません。ただしデータの誤り検知のような確実に同じと思われるような所で使われます。   1.2 ハミングのコード例 TextDistanceのライブラリでハミング距離を計算します。 すべてのアルゴリズムには、いくつかの一般的な方法があります。 .distance(* sequences)-シーケンス間の距離を計算します。 .similarity(* sequences)-シーケンスの類似性を計算します。 .maximum(* sequences)-距離と類似性の可能な最大値。 distance + similarity == maximum .normalized_distance(* sequences)-シーケンス間の正規化された距離。 戻り値は0と1の間の浮動小数点数です。ここで、0は等しいことを意味し、1は完全に異なることを意味します。 .normalized_similarity(* sequences)-シーケンスの正規化された類似性。 戻り値は0と1の間の浮動小数点数です。ここで、0は完全に異なることを意味し、1は等しいことを意味します。   init引数: qval–シーケンスをqグラムに分割するためのq値。 …

ハミングとMLIPNSの文字列の距離 Read More »

Pythonでの文字列の距離や類似性

  目次 1.TextDistanceのライブラリ 2.文字列の距離や類似性のアルゴリズム 2.1 編集ベース(Edit based) 2.2 トークンベース(Token based) 2.3 順序ベース(Sequence based) 2.4 圧縮ベース(Compression based) 2.5 音声ベース(Phonetic based) 2.6 シンプルアルゴリズム(Simple algorithm)   前回は距離と類似度について解説しました。今回の記事は文字列の距離や類似性を解説したいと思います。文字列類似性アルゴリズムは、ドメインに分類できます。 記事:距離と類似度の解説 1.TextDistanceのライブラリ Pythonは文字列の距離を計算するTextDistanceのライブラリがあります。TextDistanceは多くのアルゴリズムによって2つ以上のシーケンス間の距離を比較するためのPythonライブラリです。 特徴: ・30以上のアルゴリズム ・純粋なPythonの実装 ・簡単な使い方 ・比較する3つ以上のシーケンス ・一部のアルゴリズムでは、1つのクラスに複数の実装があります。 ・最高速度のためのオプションのnumpyの使用法。   ライブラリのインストール !pip install textdistance 詳細:https://pypi.org/project/textdistance/   2.文字列の距離や類似性のアルゴリズム   2.1 編集ベース(Edit based) 編集ベースアルゴリズムは、ある文字列を別の文字列に変換するために必要な操作の数を計算しようとします。 操作の数が多いほど、2つの文字列間の類似性は低くなります。 この場合、文字列のすべてのインデックス文字に同等の重要性が与えられることに注意してください。   編集ベースアルゴリズムの一覧 Algorithm Class Functions Hamming Hamming hamming …

Pythonでの文字列の距離や類似性 Read More »

sktimeの時系列分類アルゴリズム

  目次 1.距離ベース(Distance-based) 2.間隔ベース(Interval-based) 3.辞書ベース(Dictionary-based) 4.頻度ベース(Frequency-based) 5.シェイプレットベース(Shapelet-based) 6.ハイブリッド(Hybrid)   一般的な分類アルゴリズムはデータの時間順序に含まれる情報を無視します。時系列分類アルゴリズムは、時系列分類の問題に対して表形式の分類器よりもパフォーマンスが優れている傾向があります。 sktimeには、時系列分類のための多くのアルゴリズムがあります。この記事は時系列分類アルゴリズムの5つのカテゴリを紹介します。   1.距離ベース(Distance-based ) これらの分類アルゴリズムは、距離メトリックを使用して分類します。   K-Nearest Neighbors (Dynamic Time Warping) 代表的なk最近傍(KNN)アルゴリズムは、ユークリッド距離メトリック(Euclidean distance) をdynamic time warping(DTW)メトリックに置き換えることにより、時系列に適合させることができます。DTWは、時間、速度、または長さが正確に一致しない可能性がある2つのシーケンス間の類似性を測定します。   メリット KNN+DTWは、シンプルでよい結果であり、ハイパーパラメータ調整を必要がありません。ベンチマークのベースアルゴリズムとしてよく利用します。   デメリット KNN+DTWは、計算に多くのスペースと時間を必要とします。 シリーズが特定のクラスに割り当てられた理由に関する限られた情報を提供します。 ノイズの多いデータはパフォーマンスが低下する可能性があります。   DTW(Dynamic Time Warping)動的時間伸縮法の記事 LINK   2.間隔ベース(Interval-based ) 時系列フォレスト分類(Time Series Forest Classifier) 時系列フォレスト(TSF)分類は、ランダムフォレスト分類器をシリーズデータに適合させます。下記のような計算を行います。 ランダムな開始位置とランダムな長さで、シリーズをランダムな間隔に分割します。 各区間から特徴量(平均、標準偏差、および勾配)を抽出します。 抽出された特徴量で決定木を学習します。 必要な数のツリーが構築し、学習時間が終わるまで、手順1〜3を繰り返します。 新しいデータは、モデルのすべての木の過半数の投票に従って分類されます。   メリット 実験的研究により、時系列フォレストは、動的なタイムワーピングを伴う最近傍などのベースラインよりも優れていることが示されています …

sktimeの時系列分類アルゴリズム Read More »

sktimeの時系列予測

目次 1. sktime 2. 実験: _2.1 環境構築 _2.2 データロード _2.3 モデル学習 _2.4 予測 _2.5 モデル評価   1. sktime Sktimeとはオープンソースのscikit-learns互換の時系列アルゴリズムのPythonライブラリです。時系列関連のタスクを使用した機械学習の統合インターフェースを提供します。これらのタスクは、次のような学習ベースのタスクと密接に関連しています。 時系列予測 時系列回帰 時系列分類 ディープラーニングについては、コンパニオンパッケージsktime-dlを参照してください。 https://github.com/sktime/sktime-dl   今回の記事は時系列分類を開設したいと思います。   2. 実験: 環境:Colab データセット:BasicMotions データセットは、4つのアクティビティのスマートウォッチから生成されます。 参加者は、ウォーキング、休憩、ランニング、バドミントンの動きを記録する必要がありました。 データは、10秒間、10分の1秒ごとに1回記録されます。 http://www.timeseriesclassification.com/description.php?Dataset=BasicMotions   2.1 環境構築 ライブラリをインストールします。 !pip install sktime   ライブラリをインポートします。 import numpy as np from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline from sktime.classification.compose import ( ColumnEnsembleClassifier, TimeSeriesForestClassifier, ) from sktime.classification.dictionary_based import BOSSEnsemble from sktime.classification.shapelet_based import MrSEQLClassifier from sktime.datasets import load_basic_motions from sktime.transformations.panel.compose import ColumnConcatenator   2.2 データロード …

sktimeの時系列予測 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 »

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 »