機械学習

キャリブレーション(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 »

星クラスター分析(Star Clustering)の解説

目次 1. 星クラスター分析の概要 1.1 星クラスター分析のクラスター分析とは 1.2 星クラスター分析のライブラリ 2. 実験 2.1 環境設定 2.3 データロード 2.4 星クラスター分析の可視化   1. 星クラスター分析の概要 1.1 星クラスター分析のクラスター分析とは 星クラスター分析(Star Clustering)は、大まかに触発され、星系形成のプロセスに類似したクラスタリング手法です。 その目的は、事前にクラスターの数を知る必要がない、クラスター作成します。   1.2 Star Clusteringのライブラリ Star Clusteringのライブラリはpip installができないです。ただjosephius のgithub(下記のURL)からstar_clustering.pyをダウンロードすれば、star = StarCluster()のオブジェクトを作成して、星クラスター分析ができます。 https://github.com/josephius/star-clustering   2. 実験 環境:Colab データセット:Sci-kit learnのirisはアヤメの種類と特徴量に関するデータセットで、3種類のアヤメの花弁と萼(がく)に関する特徴量について多数のデータです。 モデル:Star Clusteringのクラスター分析   2.1 環境設定 Star Clusteringのモジュールをダウンロードします。 import urllib from urllib import request   img_src = “https://github.com/josephius/star-clustering/raw/master/star_clustering.py” img_path = ‘star_clustering.py’ urllib.request.urlretrieve(img_src, img_path)   ライブラリのインストール …

星クラスター分析(Star Clustering)の解説 Read More »

HDBSCANの解説

  目次 1. HDBSCANの概要 1.1 HDBSCANのクラスター分析とは 1.2 HDBSCANのライブラリ 2. 実験 2.1 環境設定 2.3 データ作成 2.4 HDBSCANのモデル 2.5可視化   1. HDBSCANの概要 1.1 HDBSCANのクラスター分析とは HDBSCAN は、Campello、Moulavi、および Sander によって開発されたクラスタリング アルゴリズムです。DBSCANの拡張版で、階層的クラスタリング アルゴリズムに変換し、の安定性に基づいてフラットなクラスタリングをおこなう手法です。 HDBSCANの手順 密度/疎性に応じて空間を変形 距離加重グラフの最小全域木を構築 接続されたコンポーネントのクラスター階層を構築 最小クラスター サイズに基づいてクラスター階層を圧縮 凝縮木から安定したクラスターを抽出 その他のクラスター分析のアルゴリズムに対して、HDBSCANは速いアルゴリズムであることが知られています。 論文:Density-Based Clustering Based on Hierarchical Density Estimates https://link.springer.com/chapter/10.1007%2F978-3-642-37456-2_14 HDBSCANの資料 https://hdbscan.readthedocs.io/en/latest/basic_hdbscan.html   1.2 HDBSCANのライブラリ HDBSCAN(algorithm=’best’, allow_single_cluster=False, alpha=1.0, approx_min_span_tree=True, cluster_selection_epsilon=0.0, cluster_selection_method=’eom’, …

HDBSCANの解説 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 »

Networkxのグラフのクラスタリング(コミュニティ)

  目次 1. Networkxのクラスタリング(コミュニティ) 1.1 コミュニティとは 1.2 ガーバンニューマンのアルゴリズム 1.3 クラスタリング係数 2. 実験 2.1 環境準備 2.2 データ準備 2.3 ガーバンニューマンのアルゴリズム 2.4 クラスタリング係数 1. Networkxのクラスタリング(コミュニティ) 1.1 コミュニティとは コミュニティは、接続されたノードの集まりです。 コミュニティ内のノードは密に接続されていますが、中でのクラスタリング結果されたものを指します。 1.2 ガーバンニューマンのアルゴリズム コミュニティを見つけるアルゴリズムの中に、ガーバンニューマン(GirvanNewma) アルゴリズムというものがあります。 ネットワーク内のエッジを段階的に削除することにより、コミュニティを識別します。 中間性を「エッジ中間性」と呼びます。 これは、このエッジを通過するノードのペア間の最短パスの数に比例するスコアです。 このアルゴリズムの手順は次のとおりです。 ネットワーク内の既存のすべてのエッジの中間性を計算します。 中間が最も高いエッジを削除します。 このエッジを削除した後、すべてのエッジの間隔を再計算します。 エッジがなくなるまで、手順2と3を繰り返します。   1.3 クラスタリング係数 ローカルクラスタリング係数は、ノードiを中心とする三角形の数とノードiを中心とする三角形の数の比率です。 ある意味で、ノードiとその隣接ノードが完全グラフにどれだけ近いかを測定します。 実際の例としては、ノードαがノードβとノードγのどちらにも繋がっており、さらにノードβとノードγに繋がっている時だと三角形αβγが形成されています。このような三角形を多く含むネットワークは「クラスターの密度が高い」と考えていくのがこのローカルクラスタリングの考え方です。 これを全体として求めるのがグローバル係数であり、グラフ内の三角形(ローカルクラスター)の密度を測定します。   2. 実験 環境:Google Colab (networkxのパッケージがインストールしている) データセット:networkxのFlorentine Families:結婚の絆によって、ルネッサンスのフィレンツェの家族間の同盟を描いたフィレンツェの家族のグラフです。 モデル:ガーバンニューマンのアルゴリズム   …

Networkxのグラフのクラスタリング(コミュニティ) Read More »

半教師あり学習

  目次 1. 半教師あり学習の概要 1.1 半教師あり学習とは 1.2 ラベル拡散法 (label spreading) 2. 実験 2.1 環境準備 2.2 データ準備 2.3 ラベル拡散法モデル学習 2.4 分類モデル学習 2.5 まとめ   1. 半教師あり学習の概要 1.1 半教師あり学習とは 半教師あり学習(Semi-Supervised Learning)とは教師あり学習と教師なし学習を組み合わせて学習する方法です。教師あり学習はラベル付きデータでモデルを作成します。例えば、ネゴの画像と犬の画像の分類問題です。教師なし学習はラベルなしデータでモデルを作成します。例えば、複数画像の特徴から、クラスターを作成します。 1.2 ラベル拡散法 (label spreading) 正確なモデルを予測するための十分なラベル付きデータがなく、より多くのデータを取得するための能力またはリソースがない場合は、半教師あり手法を使用してトレーニングデータの規模を大きくすることができます。半教師あり学習アルゴリズムを使用してデータにラベルを付け、新しくラベルが付けられたデータセットでモデルを再トレーニングします。   scikit-learnにはラベル拡散法 (label spreading) が実装されており,あるデータのラベルを予測する事によってラベルのないデータにコピーする (伝播させる) ことで,少量のラベル付きデータからモデルを学習します。   sklearn.semi_supervised.LabelSpreading(kernel=’rbf’, *, gamma=20, n_neighbors=7, alpha=0.2, max_iter=30, tol=0.001, n_jobs=None) 2. 実験 データセット:iris (アヤメの種類と特徴量に関する分類データセット) モデル:ラベル拡散法 (label spreading) ⇒ランダムフォレスト モデル評価;Accuracy   2.1 環境準備 …

半教師あり学習 Read More »

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 »