scikit-learnでのカウントデータ予測するポワソン回帰

  目次 1. ポワソン回帰 2. カウントベースのデータ(count data) 3. scikit-learnでのポワソン回帰 4. 実験 _4.1 環境構築 _4.2 データロード・加工 _4.3 ポワソン回帰 _4.4 線形回帰 _4.5 モデル評価 1. ポワソン回帰 ポアソン回帰(Poisson regression )は、カウントデータと分割表をモデル化するために使用される回帰分析の一般化線形モデル形式です。 ポアソン回帰は、応答変数Yがポアソン分布を持っていることを仮定して分析していきます。 ポアソン回帰モデルは、特に分割表のモデル化に使用される場合、対数線形モデル(log-linear model)といいます。 ポアソン分布(Poisson distribution) ポアソン分布(Poisson distribution)は所与の時間内での生起回数の確率を示し、指数分布は生起期間の確率を表示します。横軸は確率変数値 k で、確率質量関数は k が 0 以上の整数のみで定義されます。整数値以外では分布関数は平らになります。 2. カウントベースのデータ(count data) カウントベースのデータはある現象が一定時間内に起こった回数を数え上げたデータのことです。カウントベースのデータの例: 1時間に交差点を通過する車両の数、 1か月に診療所を訪れる人の数 1か月に発見された地球のような惑星の数。 カウントベースのデータの特所: 1. 整数データ:データは非負の整数で構成されます:[0…∞] 2. 偏った分布:データには、ほんの数個の値に対して多数のデータポイントが含まれている可能性があるため、度数分布がかなり歪んでいます。 3. スパース性:データはまれなイベントの発生を反映している可能性があります。 4. 発生率:モデルを作成するために、そのようなデータの生成を駆動するイベントλの特定の発生率があると想定できます。 …

scikit-learnでのカウントデータ予測するポワソン回帰 Read More »

pythonでQRコード画像生成・読み取り(PyQRCode・pyzbar)

  目次 1. QRコードの概要 2. PyQRCode 3. 実験のコード _3.1 環境準備 _3.2 QRコードの生成(Encode) _3.3 QRコード画像の読み取り(Decode) _3.5 QRコード動画の読み取り(Decode)   1. QRコードの概要 どこにでもあるQRコードはpythonでどう生成しますか?この記事はこの質問に回答します。 QRコードの生成と読み取るPythonは複数のパッケージがあります。今回はPyQRCode・pyzbarを解説します。   2. PyQRCode PyQRCodeのパッケージはQRコード作成、エラー修正、QRコードのバージョン、Encodeのモードなどを設定することができます。 pyqrcode.create(content, error=’H’, version=None, mode=None, encoding=None) content(コンテンツ): QRコード error(エラー): ・‘L’ コードの7%を修正できる。 ・‘M’ コードの15%を修正できる「M」。 ・‘Q’一般)コードの25%を訂正できます。 ・‘H’ コードの30%を修正できる。 version(バージョン): ・バージョンは1から40まで設定ができます。バージョン1が最小のQRコードで、バージョン40が最大です。 mode(モード): ・整数をエンコードするために使用される「数値」。 ・一部のASCII文字をエンコードするために使用される「英数字」。 ・「漢字」モードは日本語の文字に使用できますが、shift-jis文字列エンコードで理解できる文字のみです。 ・バイトをQRコードに直接エンコードする「バイナリ」モード   3. 実験のコード 環境:Google Colab Pythonパッケージ:PyQRCode, pypng, pybar …

pythonでQRコード画像生成・読み取り(PyQRCode・pyzbar) Read More »

物体検出における学習モデル評価方法IoU, Precision, Recall

  目次 1. IoUとは 2. PrecisionとRecall 3. 実験 _3.1 データロード _3.2 IoUの関数 _3.3 Iouの可視化 _3.4 Precisionの関数 _3.5 Precisionの可視化 _3.6 Recallの関数 _3.7 Recallの可視化   前回の記事は「画像分類・物体検出・セグメンテーションの比較」を説明しました。また、 今回の記事は物体検出における学習モデル評価方法Iouについて説明したいです。   1. IoUとは IoUとは、Intersection over Unionの英語略称で、画像認識物の体検出精度のひとつのメリットです。画像中の検出したい物体を、作成したモデルがどの程度正しく検出できるかを評価する指標です。IoU は、以下の式で定義されます。つまり、領域の共通部分の割り算します。 予測が完全に正しい場合、IoU は1です。正解領域と予測領域の重なりが大きいほど IoU の値は大きくなります。 2. PrecisionとRecall Precision を確認 予測したデータのうち,実際に当たっているものです。予測データのうち必要な所を制限です。 Recallは予測データのうち必要な所を実際に合わします。 3. 実験 環境:Google Colab データセット:車画像 モデル評価:IoU, Precision, Recall 3.1 データロード ライブラリインポート from google.colab …

物体検出における学習モデル評価方法IoU, Precision, Recall Read More »

Object Detection (英)

In computer vision, object detection is one of the tasks that AI shows remarkable result. Each object detection task has different models and creates different level of output. This is my wrap-up of object detection tasks. Image Classification Image Classification detects class from overall image input and returns class with probability. classes = [“dog”, “cat”, …

Object Detection (英) Read More »

OpenCVのWatershedで画像の領域分割

  目次 1. Watershed画像分割とは 2. OpenCVのWatershed 3. 実験 _3.1 データロード _3.2 画像加工 _3.3 輪郭検(findContours) _3.4 画像分割(watershed) 前回の記事は「OpenCV-Pythonでの図形検出、図形数える」を説明しました。Contoursのモジュールは、領域輪郭の図形検出ができますが、画像の領域分割はできません。画像分割の場合は、OpenCVのWatershedアルゴリズムを利用します。Watershedアルゴリズムとは、くっついているものを分離する事もできる古典的領域分割アルゴリズムです。日本語だと分水嶺アルゴリズムと言われています。画像の輝度勾配を山嶺とみなし、山の高い(= 輝度値の高い)位置から流れ込む水の作る領域をひとつの領域とする分割を行います。そのため輝度がはっきりと異なる場合は、弱いアルゴリズムです。 1. Watershed画像分割とは Watershedは、得られた画像を意味のある領域に分割する事は重要な技術です。Watershedアルゴリズムは画像ピラミッドによる画像のセグメント化・平均値シフト法による画像のセグメント化します。 2. OpenCVのWatershed cv.watershed(image, markers) image : 入力画像 markers:  画像のマーカー(画像と同じサイズ) https://docs.opencv.org/master/d7/d1b/group__imgproc__misc.html#ga3267243e4d3f95165d55a618c65ac6e1 3. 実験 環境:Google Colab データセット:硬貨の画像 ライブラリ:OpenCV 分析:画像分割(watershed) 3.1 データロード ライブラリインポート import cv2 import numpy as np import imutils from IPython.display import Image 画像のファイルを表示します。 img_file = “coin02.png” Image(img_file) 3.2 画像加工 pyrMeanShiftFilteringで同様の色分布で色を中和します。 image = cv2.imread(img_file) shifted = cv2.pyrMeanShiftFiltering(image, 21, 51) …

OpenCVのWatershedで画像の領域分割 Read More »

線形判別分析(Linear Discriminant Analysis) LDA 次元削減

  目次 1. 線形判別分析 (LDA) とは 2. 実験 _2.1 データロード _2.2 データ前処理 _2.3 主成分分析 (PCA) _2.4 線形判別分析 (LDA) 1. 線形判別分析 (LDA) とは 線形判別分析(Linear Discriminant Analysis, LDA)は、次元削減を用いた統計学上の特徴抽出手法のひとつです。主成分分析 (Principle Component Analysis, PCA) は、データの分散が最大となるような次元を探すのに対して、線形判別分析は、データのクラスを最もよく分けられる次元を探します。ここでは、主成分分析 (PCA)と線形判別分析 (LDA)を比較していきたいと思います。 線形判別分析の手法 グループ間の分散を最大にグループの分類を最小にする軸を選びます。 1. クラス内およびクラス間の散布行列を計算します。 2. 散布行列の固有ベクトルと対応する固有値を計算します。 3. 固有値を並べ替えて、上位kを選択します。 4. k個の固有値にマップする固有ベクトルを含む新しい行列を作成します。 5. ステップ4のデータと行列の内積を取得して、新しい特徴(つまり、LDAコンポーネント)を取得します。 線形判別分析の特徴: ・分離を最適化する特徴部分空間を探す ・教師あり ・正規分布が仮定される ・サンプル間が独立であることが仮定される scikit learnの線形判別分析 sklearn.discriminant_analysis.LinearDiscriminantAnalysis(*, solver=’svd’, shrinkage=None, …

線形判別分析(Linear Discriminant Analysis) LDA 次元削減 Read More »

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 »