admin2

TensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】

2020年9月23日GoogleはTensorFlow Recommenders (TFRS)のレコメンデーション システムのパッケージを発表しました。この記事は、TensorFlowレコメンダーのパッケージを紹介したいと思います。 目次 1. TensorFlowのレコメンダーとは 2. tensorflow-recommendersの特徴 3. 実験 _3.1 データロード _3.2 レコメンデーションモデルの定義 _3.3 モデル評価の関数 _3.4 モデル学習 _3.5 モデル評価 1. TensorFlowのレコメンダーとは TensorFlow Recommendationsは、TensorFlowを使用してレコメンダーシステムモデルを構築するためのオープンソースライブラリです。 これは、レコメンダーシステムを構築するための完全なワークフロー(データの準備、モデルの定式化、トレーニング、評価、および展開)に役立ちます。 Kerasに基づいて構築されており、複雑なモデルを構築する柔軟性を提供しながら、穏やかな学習曲線を持つことを目的としています。 2. tensorflow-recommendersの特徴 ・柔軟な候補者指名モデルを構築して評価します。 ・アイテム、ユーザー、およびコンテキスト情報を推奨モデルに自由に組み込みます。 ・複数の推奨目標を共同で最適化するマルチタスクモデルをトレーニングします。 ・TensorFlow Servingを使用する事が出来ます。 3. 実験 環境:Google Colab データセット:MovieLens 100Kデータセット TFRSをインポート pip install -q tensorflow-recommenders pip install -q –upgrade tensorflow-datasets ライブラリインポート import os import pprint …

TensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】 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 »

SciPyでの疎行列(sparse matrix)の膨大な量のデータ前処理

目次 1. 疎行列(sparse matrix)の概要 2. 密行列(dense matrix) 3. 疎行列の処理 ―3.1 COO方式 ―3.2 CSR方式 ―3.3 CSC方式 4. まとめ 1. 疎行列(sparse matrix)の概要 疎行列とは、ほとんど行列の要素がゼロであるような行列です。行列内のほとんどが0という特徴から、0を無視する工夫をすれば、メモリや計算速度を節約が可能になります。疎行列ではない、よくある行列を「密行列」(dense matrix)と呼ぶこともあります。数値計算や機械学習や自然言語処理など幅広い分野で扱われています。 以下の図は10×10の密行列と10×10の疎行列になります。8割近くが0の疎行列で非ゼロ部分だけ用いて計算すれば、計算時間が約2/10になり計算が早く終わらせることが可能になります。 PythonのSciPyライブラリには、疎行列を作成、保存、操作するための多くのオプションがあります。PythonのScipyを用いて、疎行列計算について解説していきます。 密行列(dense matrix) 85、90、99ゼロ率の10,000 x 10,000密行列のデータを作成します。 # Create Sparse Data import numpy as np from scipy import sparse from scipy.stats import uniform from sys import getsizeof np.random.seed(seed=42) array = uniform.rvs(size=100000000, loc = …

SciPyでの疎行列(sparse matrix)の膨大な量のデータ前処理 Read More »

MCAR、MAR、MNARの欠損値+欠損値処理

目次 1. 欠損値とは 2. MCARとは 3. MARとは 4. MNARとは 5. 欠損値の削除 5.1リストワイズ除去法 (listwise deletion) 5.2 ペアワイズ除去法 (pairwise deletion) 6. 代入法(imputation) _6.1 一変量代入法(Univariate feature Imputation) _6.2 多変量代入法(Multivariate feature imputation) 1. 欠損値とは 場合によっては全てのデータが得られていない場合があります。実際の集計には使われないような,データがないことを示す特別な値(欠損値)になります。よいモデル作成、良い分析するときに、欠損値処理が必要です。欠損値原因により、処理方法が異なります。たとえば、欠損値が50%を超える場はデータを削除するはずです。 欠損値が含まれるデータを扱う上で複数問題があります。まず、統計計算ができなくなります。また、分析の結果はバイアスが生じます。モデル作成する場合は欠損値を処理しないといけません。 欠損値のタイプ 欠損値が生じる要因として,大きく分けて3つが考えられています。 2. MCAR (Missing Completely At Random) MCAR とは,いわゆる欠損値が完全にランダムに生じているようなケースである。データになんにも依存していなくて,ほんと気まぐれ,という感じ。これは一番わかりやすい欠損のタイプです。 3. MAR (Missing At Random) MARとは,データが,測定されている値に依存して欠損する。MCAR と聞いた感じが似ているかもしれないが,MCAR よりもずっと制約が弱まっています。MCAR と違うのは,他の変数と欠損値の有無とが関係することを許容しています。 4. MNAR (Missing Not …

MCAR、MAR、MNARの欠損値+欠損値処理 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 »

画像分類・物体検出・セグメンテーションの比較

関連記事: U-net(画像セグメンテーション)の解説 先日の記事はU-net(画像セグメンテーション)の解説について解説しました。画像認識技術は画像分類・物体検出・セグメンテーションなどの技術があります。今回の記事は画像認識技術の違いを開設したいと思います。 目次 1. 画像認識(Image Recognition)とは 2. 画像分類(Image Classification)とは 3. 画像分類・物体位置特定(Image Classification・Localization)とは 4. 物体検出(Object Detection)とは 5. セグメンテーション(Segmentation) _5.1 セマンティック・セグメンテーション(Semantic Segmentation)とは _5.2 インスタント・セグメンテーション(Instant Segmentation)とは _5.3 パノプティック・セグメンテーション(Panoptic Segmentation)とは 6. まとめ 1. 画像認識(Image Recognition)とは 画像認識(Image Recognition)とは、画像や動画データから特徴をつかみ、対象物を識別するパターン認識技術の一つです。画像データから、対象物や、対象物の特徴(形状、寸法、数、明暗、色など)を抽出/分析/識別して認識検出する手法です。 コンピュータが画像認識を行うためには、前段階として、画像から対象物を抽出する必要があります。 下記の8ビットのグレースケール画像から、すべてのデジタル画像は0〜255の範囲の値を持つピクセルによって形成されます。0は黒、255は白です。 カラフルな画像の場合は、赤、緑、青の3つのマップと、0〜255の範囲のすべてのピクセルが含まれます。 画像認識を利用することで、顔認証システムや不審者検知、文字認識(OCR)、不適切画像の検出、 工場でのイレギュラー検知など幅広い分野で活用することができます。 今回の記事は物体検出の分野を中心にします。 2. 画像分類(Image Classification)とは 画像分類とは、機械学習やディープラーニングモデルで、画像を何らかの主題に基づき分類する処理方法です。いくつかの分類手法があります。教師あり学習では、ラベル付けされたデータセットを用いて、モデルを学習させていきます。 画像分類の結果は各クラスの予測信頼度です。 classes = [“dog”, “cat”, “nothing”] prediction = [ 0.8 , 0.1 …

画像分類・物体検出・セグメンテーションの比較 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 »

OpenCVでのモルフォロジー変換(Morphological Transformations)の解説

目次 モルフォロジー変換の概要 1. 収縮(Erosion) 2. 膨張(Dilation) 3. オープニング(Opening) 4. クロージング(Closing) 5. モルフォロジー勾配 6. トップハット変換 7. ブラックハット変換 モルフォロジー変換とは(Morphological Transformations) モルフォロジー変換は、2値画像に関して,「膨張」や「収縮」などのシンプルな画像処理のことです。モルフォロジー変換には入力画像と と構造的要素(Kernel)の二つを入力として与えます。基本的なモルフォロジー処理として,収縮(Erosion)と膨張(Dilation)が挙げられます.他には,この二つの処理を組み合わせたオープニングとクロージングといった処理も挙げられます。 ライブラリのインポート import cv2 from google.colab.patches import cv2_imshow 1. 収縮(Erosion) 収縮処理は、収縮処理が施された画像中のオブジェクトは細くなる処理です。オブジェクトの境界付近の情報が消えやすくなることです。下記の図は収縮処理です。 # 画像を読み込む img = cv2.imread(‘input_image01.jpg’, 0) kernel = np.ones((5,5), np.uint8) # 処理 img_erosion1 = cv2.erode(img,kernel,iterations = 1) img_erosion2 = cv2.erode(img,kernel,iterations = 2) # 結果表示 cv2_imshow(img) …

OpenCVでのモルフォロジー変換(Morphological Transformations)の解説 Read More »

ピンボールロス(Pinball loss)の解説

目次 1. ピンボールロス(Pinball loss)の概要 __1.1ピンボールロス(Pinball loss)とは __1.2ピンボールロスのロジック 2. 実験・コード __2.1 環境の準備 __2.2 データロード __2.3 モデル・結果作成 __2.4可視化・評価 3. まとめ 1. ピンボールロス(Pinball loss)の概要 1.1 ピンボールロス(Pinball loss)とは 分位点ロス(quantile loss) ピンボールロス関数または分位点ロス(quantile loss)、分位予測の学習する時に、使用される損失関数です。分位回帰は、偏りに強い回帰の種類になります。 予測される変数の平均を求める代わりに、分位点回帰では中央値と他の分位点を求めます。 τをターゲット分位数、yを実際の値、zを分位数予測とすると、ピンボール損失関数であるLτは次のように記述できます。 1.2ピンボールロスのロジック 「下記の図」ピンボールロス関数(赤)は、ピンボール上のボールの軌道の形状にちなんで名付けられました。 関数は常に正であり、ターゲットyから離れるほど、Lτ(y、z)の値は大きくなります。 傾斜は、分位数予測における望ましい不均衡を反映するために使用されます。 観測値から可能な限り近い予測を目標とする従来の予測とは異なり、分位点を予測するのに適した損失関数です。 上のグラフは、3つの異なる予測を示しています。 赤字は75%の分位数予測 黒字、平均の予測 緑色で、25%分位数予測 2. 実験・コード 環境:Google Colab データセット:scikit-learnのBoston house-prices (ボストン市の住宅価格) モデル:1)線形回帰(LinearRegression) 2)勾配ブースティング(Gradient Boosting) 3)分位点回帰(Quantile Regression) モデル評価:ピンボールロス(Pinball loss) 2.1 環境の準備 ライブラリのインポート …

ピンボールロス(Pinball loss)の解説 Read More »

Scikit-learnを用いた階層的クラスタリング (Hierarchical clustering)の解説

目次 1. 階層的クラスタリングの概要 __1.1階層的クラスタリング (hierarchical clustering)とは __1.2所と短所 __1.3 凝集クラスタリングの作成手順 __1.4 sklearn のAgglomerativeClustering __1.5 距離メトリック (Affinity) __1.6 距離の計算(linkage) 2. 実験・コード __2.1 環境の準備 __2.2 データロード __2.3 Euclidean距離のモデル学習・可視化 __2.4 Manhattan距離のモデル学習・可視化 __2.5 Cosine距離のモデル学習・可視化 1.1 階層的クラスタリング (hierarchical clustering)とは 階層的クラスタリングとは、個体からクラスターへ階層構造で分類する分析方法の一つです。樹形図(デンドログラム)ができます。デンドログラムとは、クラスター分析において各個体がクラスターにまとめられていくさまを樹形図の形で表したもののことです。ツリーのルートは、すべてのデータをクラスターで分類しており、一番下の部分は1件のデータになっています。 左側の図はクラスタリングする前のデータ分布で例えばこれを階層型クラスタリングしたものが右側の図になります(gifで過程が見えるようになっています)。この樹形図のグラフをよく階層型クラスターと呼びます。 1.2 階層的クラスタリングの長所と短所 クラスタリング手法の中でもkmeanのような非階層型クラスタリングと比べた時に以下のメリットとデメリットがあります。 長所 ・特定の数のクラスター(すなわち、k平均)の仮定なし ・可視化でクラスタリングの様子が自分で確認できる 短所 ・ノイズや外れ値に敏感です。 ・分類の対象が多い場合はkmeanよりも遅くなりがちなことがある。 代表的な階層型クラスタリングアルゴリズムには2つあります。 凝集性(Agglomerative)—ボトムアップアプローチ。 多くの小さなクラスターから始め、それらを結合して大きなクラスターを作成します。 分割型(Divisive) —トップダウンアプローチ。 小さなクラスターに分割するのではなく、単一のクラスターから始めます。 1.3 凝集クラスタリングの作成手順 1. 個々のデータが,それぞれ孤立したクラスタを形成している状態から開始します。 2. 全てのクラスタ対の間の距離を計算し,最も近いクラスタ対を見つけます。最も近いクラスタを併合し,この新しいクラスタにします。 …

Scikit-learnを用いた階層的クラスタリング (Hierarchical clustering)の解説 Read More »