Snakeの活性化関数

目次 1. Snake活性化関数の概要 1.1 Snake活性化関数とは 1.2 Snake関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 Snakeの活性化関数を作成 2.5 LSTMの活性化関数を作成 2.6 まとめ 関連記事:活性化関数のまとめ   1. Snake活性化関数の概要 1.1 Snake活性化関数とは Snakeの活性化関数は、単純な周期関数の外挿を学習できないLSTMに用います。通常の活性化関数であるtanh、sigmoid、reluの弱点を改善するために使用します。LSTMベースのアクティベーションの優れた最適化特性を維持しながら、周期関数を学習するために必要な周期的誘導バイアスを実現する新しいアクティベーション、つまりx + sin2(x)のような学習が難しいタイプで用いられます。   tfa.activations.snake( x: tfa.types.TensorLike, frequency: tfa.types.Number = 1 ) -> tf.Tensor 論文:Neural Networks Fail to Learn Periodic Functions and How to Fix It https://arxiv.org/abs/2006.08195 TensorFlow: …

Snakeの活性化関数 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 »

Swishの活性化関数

  目次 1. Swish活性化関数の概要 1.1 Swish活性化関数とは 1.2 Swish関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 Swishの活性化関数を作成 2.5 Reluの活性化関数を作成 2.6 まとめ 関連記事:活性化関数のまとめ   1. Swish活性化関数の概要 1.1 Swish活性化関数とは Swishは、線形関数とReLU関数の間を非線形に補間する滑らかな関数です。 Swishは、シグモイド関数とβで定義されます。 βがトレーニング可能なパラメーターとして設定されている場合、補間の程度はモデルによって制御できます。 ReLUと同様に、Swishは上に制限がなく、下に制限があります。 ReLUとは異なり、Swishは滑らかで単調ではありません。 実際、Swishの非単調性は、最も一般的な活性化関数とは異なります。 Swishの導関数は: 論文:Searching for Activation Functions https://arxiv.org/abs/1710.05941 TensorFlow: https://www.tensorflow.org/api_docs/python/tf/keras/activations/swish Pytorch: https://pytorch.org/docs/stable/generated/torch.nn.SiLU.html   1.2 Swish関数 def swish(x): return x * tf.math.sigmoid(x)   2.実験 データセット:CIFAR-10 は、32×32 のカラー画像からなるデータセットで、その名の通り10クラスあります。全体画像数は60000件となり、そのうち50000件が訓練用データ、残り10000件がテスト用データに分けます。 モデル:Swishの活性化関数のモデル …

Swishの活性化関数 Read More »

Yogiの最適化アルゴリズムの解説

目次 1 Yogi最適化アルゴリズムの概要 1.1 Yogi最適化アルゴリズムとは 1.2 Yogi定義 2. 実験 2.1 データロード 2.2 データ前処理 2.3 Yogi最適化アルゴリズムのモデル作成 2.4 Adam最適化アルゴリズムのモデル作成 2.5 まとめ 記事:最適化アルゴリズムのまとめ   1 Yogi最適化アルゴリズムの概要 1.1 Yogi最適化アルゴリズムとは yogiは適応勾配の最適化アルゴリズムであり、ミニバッチサイズを大きいときでも収束が速いと言われておりり、非収束の問題を回避する方法です。 ADAMは、学習率が急速に低下しないようにしながら、適応勾配を使用することです。 これを実現するために、ADAMは本質的に乗法であるEMAを使用します。 これは、過去の勾配がかなり速く忘れられる状況につながります。Yogiは制御された実効学習率の増加を採用することにより、パフォーマンスを向上させています。   MNISTデータの実験から、yogiはより良いパフォーマンスを示しています。   論文:Adaptive Methods for Nonconvex Optimization https://papers.nips.cc/paper/8186-adaptive-methods-for-nonconvex-optimization.pdf Tensorflow: https://www.tensorflow.org/addons/api_docs/python/tfa/optimizers/Yogi PyTorch: https://pytorch-optimizer.readthedocs.io/en/latest/_modules/torch_optimizer/yogi.html   TensorflowのYogi最適化アルゴリズムは下記のパラメータになります。 yogi = tfa.optimizers.Yogi( learning_rate = 0.01, beta1 = 0.9, beta2 = 0.999, epsilon = 0.001, l1_regularization_strength = 0.0001, l2_regularization_strength = 0.0001, initial_accumulator_value = 1e-06, activation = ‘sign’, name = ‘Yogi’, ) …

Yogiの最適化アルゴリズムの解説 Read More »

正規化と標準化などの特徴量のスケーリング(Feature Scaling)

  目次 1. 特徴量のスケーリングの概要 1.1 特徴量のスケーリングとは 1.2 特徴量のスケーリングのライブラリ 2. 特徴量のスケーリングの手法: 2.1 MinMaxScaler 正規化(normalization) 2.2 MaxAbsScaler 2.3 StandardScaler 標準化(standardization) 2.4 RobustScaler 2.5 PowerTransformer 2.6 QuantileTransformer 2.7 Normalizer 2.8 Log Transformation (対数変換) 2.9 Square Root Transformation (平方根変換) 2.10まとめ   1.特徴量のスケーリングの概要 1.1 特徴量のスケーリングとは 特徴量のスケーリング(Feature Scaling)とはモデルの学習する前処理の一つの手法で、特徴量間のスケールを変換することです。データセットの特徴量間でスケールが異なることは多々あります。特徴量間で異なるスケールのデータセットをモデルで学習させた場合、うまく学習できないということがおこります。そのため、学習前の前処理で、特徴量間のスケールを揃えるなど必要があります。   1.2 特徴量のスケーリングのライブラリ scikit-learnでsklearn.preprocessingのモジュールは複数特徴量のスケーリングの手法があります。scikit-learnとnumpyのライブラリで特徴量のスケーリングを実験します。 詳細:https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html   ライブラリのインポート import numpy as np import pandas as pd   from matplotlib import pyplot as plt plt.style.use(‘seaborn’)   …

正規化と標準化などの特徴量のスケーリング(Feature Scaling) Read More »

OpenCVの物体追跡

  目次 1. OpenCVの物体追跡の概要 1.1 物体追跡とは 1.2 OpenCV 2. 実験 2.1 環境の準備 2.2 コード 2.3 結果の動画   1. OpenCVの物体追跡の概要 1.1 物体追跡とは 物体追跡とは,与えられた動画から,指定した対象が各画像間でどのように移動したかを推定することです。動画の中を移動する物体の動きをトラッキング(追跡)することが出来れば、その物体の変位や速度、加速度といった物理量を計算することが出来ます。   1.2 OpenCVの物体追跡 OpenCVには物体追跡アルゴリズムがopencv-contrib-pythonとして提供されています。画像処理の方法がOpenCVに6つ実装されています。   MIL(Multiple Instance Learning) 考え方としてはBoostingにとても近いけど、分類対象の場所の近傍のサンプルについてもいくつか正の場所として扱うことが特徴です。 cv2.TrackerMIL_create()   KCF(Kernelized Correlation Filters) MILの近傍サンプルにはそれぞれ同士でオーバーラップする部分があって、その領域を加味することで性能を上げたらしいです。 cv2.TrackerKCF_create()   TLD(Tracking, learning and detection) 性質上、似たような他のものとの入れ替わりには引っ張られたりすることがあります。ただ、長い間遮られたりするものやスケールが大幅に変わるものには適しているらしいです。 cv2.TrackerTLD_create()   MedianFlow オブジェクトを時間的に順方向および逆方向の両方で追跡して、これらの軌跡間の差異を測定します。 cv2.TrackerMedianFlow_create()   GOTURN 深層学習を使ったトラッキング手法なため、向いているハードウェアに搭載すればとても早いらしいです。 cv2.TrackerGOTURN_create()   MOSSE …

OpenCVの物体追跡 Read More »

TanhExpの活性化関数

  目次 1. TanhExp活性化関数の概要 1.1 TanhExp活性化関数とは 1.2 TanhExp関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 TanhExpの活性化関数を作成 2.5 Reluの活性化関数を作成 2.6 まとめ   記事:活性化関数のまとめ   1. TanhExp活性化関数の概要 1.1 TanhExp活性化関数とは TanhExpはTanh Exponential Activation Functionの略称です。名前からわかるようにtanhとexpを使います。TanhExpの定義はf(x) = x tanh(e^x)である。様々なデータセットやネットワークモデルに対してTanhExpのシンプルさ、効率性、ロバスト性を実証し、TanhExpは収束速度と精度の両方で同等のものを凌駕することを示した。また、ノイズを追加したり、データセットを変更したりしても、TanhExpの挙動は安定している。ネットワークのサイズを大きくしなくても、少数の学習エポックと余分なパラメータを追加することなく、TanhExpによって軽量ニューラルネットワークの能力を向上させることができることを示す。 論文:TanhExp: A Smooth Activation Function with High Convergence Speed for Lightweight Neural Networks https://arxiv.org/abs/2003.09855   1.2 TanhExp関数 def tanhexp(x): return x * tf.math.tanh(tf.math.exp(x)) …

TanhExpの活性化関数 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 »