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 »

pythonでの画像データお互い変換

目次 画像データロード – IPythonで画像データを表示 OpenCV – cv型データを読み込み – cv型データを表示 – Matplotlibでcv型データを表示 – cv型データ→pil型の変換 – cv型データ→sk型の変換 Pillow – pil型データを読み込み – pil型データを表示 – io.BytesIOでpil型データを表示 – Matplotlibでpil型データを表示 – pil型データ→cv型の変換 skimage – sk型データを読み込み – sk型データを表示 – Matplotlibでsk型データを表示 – sk型データ→cv型の変換 – sk型データ→pil型の変換 Matplotlib – Matplotlib型データを読み込み – Matplotlib型データを表示 PythonはOpencv、Pillow、 scikit-image、Matplotlibなどの複数便利なライブラリがあります。各ライブラリはデータ型が違います。今回の記事は画像データお互い変換をまとめたいと思います。それぞれのライブラリで特徴があります。 実験の環境は google colabです。 画像データロード # 画像をロード import urllib import urllib.request img_src = “https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Origami_cranes_on_match_heads.jpg/320px-Origami_cranes_on_match_heads.jpg” img_file = ‘image.jpg’ urllib.request.urlretrieve(img_src, img_file) (‘image.jpg’, …

pythonでの画像データお互い変換 Read More »

GELUの活性化関数の解説

  目次 1. GELU活性化関数の概要 1.1 GELU活性化関数とは 1.2 GELU定義 1.3 GELUの違い 2. 実験 2.1 データロード 2.2 データ前処理 2.3 GELU活性化関数のモデル作成 2.4 ReLU活性化関数のモデル作成 2.5 まとめ 活性化関数のまとめ   1.  GELU活性化関数の概要 1.1 GELU活性化関数とは GELU活性化関数は、Gaussian Error Linear Unit functionsの略称です。GELUはOpenAI GPTやBERTなどの有名なモデルで使われている活性化関数です。 GELUはReLU、ELU、PReLUなどのアクティベーションにより、シグモイドよりも高速で優れたニューラルネットワークの収束が可能になったと言われています。コツとしては、Dropoutに似た要素を入れている事です。Dropoutとは、いくつかのアクティベーションに0をランダムに乗算することにより、モデルを頑強します。   1.2 GELU定義 Geluは以下のように定義されます。 Computes gaussian error linear: approximateがFalse場合は、 approximateがTrue場合は、 論文:https://arxiv.org/abs/1606.08415   1.3 GELUの違い GELUとReLUとELUは非凸(non-convex)、非単調(non-monotonic)関数ですが、GELUは正の領域で線形ではなく、曲率があります。 GELUは単調増加ではありません。 GELUは確率的な要素を加味しています(Dropout)。 ライブラリ: Tensorflow/Keras https://www.tensorflow.org/addons/api_docs/python/tfa/activations/gelu#returns …

GELUの活性化関数の解説 Read More »

Nadamの最適化アルゴリズム

目次 1. Nadam最適化アルゴリズムの概要 1.1 Nadam最適化アルゴリズムとは 1.2 TensorflowのNadam関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 Nadamの最適化アルゴリズムを作成 2.3 Adamの最適化アルゴリズムを作成 2.5 まとめ   前回の記事は「最適化アルゴリズムのまとめ」を解説しました。今回の記事はNadamを解説と実験したいと思います。   1. Nadam 1.1 Nadam最適化アルゴリズムとは Nadam (Nesterov-accelerated Adaptive Moment Estimation)はAdamとNAGを組み合わせます。 このことにより、前のタイムステップmt-1の運動量ベクトルにおけるバイアス補正された推定値を置き換えるだけで、以前と同じようにネステロフ運動量を追加できます。 現在の運動量ベクトルmtのバイアス補正された推定値を使用するのが、Nadam更新ルールを取得します。 1.2 TensorflowのNadam関数 Tensorflowの詳細 tf.keras.optimizers.Nadam( learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, name=’Nadam’, **kwargs )   Learning_rate テンソルまたは浮動小数点値。 学習率。   beta_1 浮動小数点値または定数浮動小数点テンソル。 一次モーメント推定の指数関数的減衰率。   …

Nadamの最適化アルゴリズム Read More »

DET曲線

目次 1. DET曲線とは 2. sci-kit learnのDET曲線 3. 実験 _3.1 環境構築 _3.2 データ生成 _3.3 モデル作成 _3.4 DET曲線の計算 _3.5 DET曲線の可視化   1. DET曲線とは DET曲線とは、Detection Error Tradeoff curvesの略称で、二項分類システムのエラー率のグラフプロットであり、偽陽性率(False positive rate)と偽陰性率(False negative rate)をプロットします。DET曲線には、2種類の試行の基礎となるスコア分布が正常である場合、曲線が直線になるという特性があります。   2. sci-kit learnのDET曲線 sklearn.metrics.det_curve(y_true, y_score, pos_label=None, sample_weight=None) パラメーター y_truendarray of shape (n_samples,) ラベルが{-1、1}または{0、1}のいずれでもない場合は、pos_labelを明示的に指定する必要があります。   y_scorendarray of shape of (n_samples,) ターゲットスコアは、正のクラスの確率推定値、信頼値、またはしきい値以外の決定の尺度(一部の分類子の「decision_function」によって返される)のいずれかです。   pos_labelint or str, default=None …

DET曲線 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 »

Pythonでの魚眼フィルター

目次 1. 魚眼フィルター 2. 実験: _2.1 画像の読み込む _2.2 魚眼フィルターの関数 _2.3 結果   1. 魚眼フィルター(fisheye) 魚眼フィルターとは、魚眼レンズを通して見たかのように、イメージを歪めます。結果は、樽型歪曲という、超広角の歪みのエフェクトになります。下記のような画像の加工になります。 2. 実験: 環境: google colab 入力データ:ウィキメディアの画像データ モデル:魚眼フィルターの関数 Gil-Mor/iFish   Imageioのライブラリをインストールします。 !pip3 install numpy imageio   ライブラリをインポートします。 # 画像をロード import urllib import urllib.request import sys import fish import imutils from IPython.display import Image   fishのモジュールをインストールします。 #  Import scripts sys.path.append(”) py_src = “https://raw.githubusercontent.com/Gil-Mor/iFish/master/fish.py” py_file = ‘fish.py’ urllib.request.urlretrieve(py_src, py_file) import fish   2.1 画像の読み込む # 画像をロード img_src = “https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Chess_board_blank.svg/472px-Chess_board_blank.svg.png” …

Pythonでの魚眼フィルター Read More »

深層学習の最適化アルゴリズムまとめ

目次 1. 最適化アルゴリズムとは 2. 最適化アルゴリズムのまとめ ・確率的勾配降下法(SGD) ・Adams ・Adamax ・Nadam ・AMSGrad ・AdamW 3.その他 AdaDelta, AdaGrad, A2GradExp, A2GradInc, A2GradUni, AccSGD, AdaBelief, AdaMod, Adafactor, Adahessian, AdamP, AggMo, Apollo, DiffGrad, RMSProp, AveragedOptimizerWrapper, ConditionalGradient, CyclicalLearningRate, ExponentialCyclicalLearningRate, extend_with_decoupled_weight_decay, LAMB, LazyAdam, Lookahead, MovingAverage, NovoGrad, ProximalAdagrad, RectifiedAdam, SGDW, SWA, Triangular2CyclicalLearningRate, TriangularCyclicalLearningRate, Yogi, AdaBound, AMSBound, Shampoo, SWATS, SGDP, Ranger, RangerQH, RangerVA, PID, QHAdam, QHM, …

深層学習の最適化アルゴリズムまとめ Read More »

活性化関数のまとめ

  目次 1 活性化関数とは 2. 活性化関数のまとめ – ReLu関数 – Leaky ReLU関数 – PReLU関数 – ELU関数 – sigmoid関数 – TanH関数 – softmax 関数 – GELU関数 – SELU関数 -その他まとめ 1 活性化関数とは 活性化関数は、(英: Activation functions)ニューラルネットワークの出力を決定する数式です。この関数はネットワーク内の各ニューロンに関連付けられており、各ニューロンの入力がアクティブ化(「起動」)するかどうかを決定します。各ニューロンの出力を1〜0または-1〜1の範囲に正規化するのにも役立ちます。 2. 活性化関数のまとめ   ReLu関数 ReLu関数(「ランプ」と読む)はRectified Linear Unitの略称で、ランプ関数もと呼ばれています。関数への入力値が0以下の場合には出力値が常に0、入力値が0より上の場合には出力値が入力値と同じ値となる関数です。 ReLUのメリット ・非常に迅速に収束するネットワークなので、処理が速いです。 ・勾配消失問題に強いです。勾配消失問題は層が深くなるにつれ勾配が消えてしまう。 ・linear関数のように見えますが、ReLUには微分関数があり、バックプロパゲーションが可能です。 ReLUのデメリット ・入力がゼロに近づくか、負の場合、関数の勾配はゼロになり、ネットワークはバックプロパゲーションを実行できず、学習できません。 ライブラリ: Tensorflow/Keras https://www.tensorflow.org/api_docs/python/tf/keras/activations/relu PyTorch https://pytorch.org/docs/stable/generated/torch.nn.ReLU.html   Leaky ReLU関数 Leaky ReLU関数はLeaky …

活性化関数のまとめ Read More »