統計・機械学習

CNNによるMNISTの埋め込み(t-SNEも)

前回に続いて,学習済みモデルの中間層の出力を取り出す例として,学習済みCNNを自己符号化(オートエンコーダ)として使う例をやってみる。 コードはPyTorch公式exampleのmnistを少しいじって,モデルの中間層が取り出しやすくして,t-SNEによる埋め込みを行…

PyTorchのモデルの書き方の整理

サマリ いくつかの書き方があるが,混乱するのは下記の種類が色々Webに見られるからか。 ① initにはパラメタありだけ,パラメタが無いものはforwardに。これが一番柔軟性があるように思う。モデルの中間層を細かく取り出したり,活性化関数を変えたりしたい…

PyTorchでのモデルの中間層へのアクセス方法

PyTorchにはいろいろなモデルの書き方があるけど,このメモの内容を考えると学習パラメタが無いレイヤ含めてinitにもたせておくほうが良いのかもしれない。 (と思ったけど,一番最後のレイヤをとりあえずコピーしてforwardを再定義するやり方ならどっちでも…

CNN in MNIST with PyTorch (PyTorchの基本メモ)

PyTorchのチュートリアルとexampleはとても参考になる。0.4から色々変わっているようだし,改めて情報を整理する。 まず今回は,MNISTを動かしながら以下の項目についてメモしておく。 MNISTデータのロード方法。可視化方法。 ネットワーク,学習,テストの…

モンテカルロ法1 (モンテカルロ積分)

Rによるモンテカルロ法入門のメモ,その1。 イントロ 統計的推論では最適化と積分の計算,特に実用上は数値計算が必要になる。 数値積分の手法としてモンテカルロ積分がある。シンプソン法などの区分法は多次元の場合に区分を細かくしようとすると計算量が…

訓練・検証・テストの3つにデータを分割する理由

MLの教科書とか記事を読んでいると,データを訓練,検証, テストの3つに分けている場合が多い。 訓練と検証の2つじゃだめなの?とついつい勘違いしてしまうのでメモ。 テストはなんのため? ここの勘違いが全てなんだと思う。 テストの目的は実運用時の性…

機械学習の前処理でのデータの正規化/標準化

前処理の目的 体重と身長など複数の異なる特徴量を生で扱ってしまうと、出力に対して使いやすい(大まかにFitしやすい)方を優先してしまう問題がある。 内容 問題解決の単純な方法は異なるカテゴリのデータを同じ範囲のデータに変換する。 変換は入力だけでな…

matplotlibのメモ

覚えておく点 matplotlibの使い方をすぐ忘れる(特に、subplot)。この書き方にこだわる必要は無いけれど、要点だけまとめておく。 手順としては、figureを作る(大きなキャンバスを定義)、figureに対してadd_subplotでサブキャンバスを作る。これはaxesって言…

Kerasのバックエンドの使い方

勾配情報を取得したり、特定のレイヤの出力を得たい場合など、色々な場面でKerasプログラムの中でTensorflowレイヤの操作をしたいことが出てくる。そんな時に使うのがバックエンド。 多くはドキュメント見れば良いが、良く分からないAPI(functionとか)もある…

Kerasの処理テンプレート

メモ モデルのcompile時に与えるmetricsは、学習の各エポック毎に計算する学習の指標を表すもの。損失関数は何もやらなくても計算しているので、損失関数以外を指定する。自分で関数を作っても良いが、大概は用意されている。良くあるサンプルではaccuracyが…

Kerasで中間ノードの出力を確認する。

kerasのドキュメントのFAQに書かれているので、それ通りにやれば良い。一応、良くあるボストンの家の価格のデータの例を記載。 そう言えば、kerasが終了時にsessionのdelに失敗する場合がある。ちゃんと、backendのclear_session()を呼ぶ。 import numpy imp…

Keras with scikit-learnのメモ

KerasはTensorflow/Theanoを使って良くあるDeep Learningアルゴリズムのパタンを効率的に実装するライブラリだけど、機械学習と言えばデータ前処理やCross-Validation,パラメタ探索とか他にも共通してやることがたくさんある。そんな機械学習共通のライブラ…

情報量関連のメモ

概要 機械学習とか統計を勉強していると情報量とかエントロピーの話が出てきていつも復習をし直しているので,纏めておく. 情報量 事象Aが与えられた時に,その情報量って?というものに答える. 確率を使って考える.発生が稀な事象と,よくある事象があっ…

ヒストグラムの階級幅の決め方

階級幅は基本的に等間隔.非等間隔だとどうしてもそこに恣意性が入る 階級幅の決め方は,まず,幅に関する自明な知見,例えば学年などがあるならそれを採用する. 次に,データから幅を決める場合,基本的には幅を決めるというよりはビン数を決める.データ…

pandas@python

概要 pandasというのをよく目にする.Rっぽくデータ処理するためのライブラリみたいだ. DataFrameに2次元配列を渡してデータを生成する.タプルの配列や,ハッシュ配列でも行ける. 行はindex, 列はcolumnsで名前を付ければ,名前でアクセス可能.行は意味…

異常検知のメモ

異常検知というよりは機械学習の基礎題材として勉強中.少しずつ追記していこう. 参考文献 日本語だと異常検知だけを扱った本として以下の3冊があるみたい. * 山西, "データマイニングによる異常検知", 2009. * 井手, "入門機械学習による異常検知", コロ…

データ解析でまずやることのメモ

データ解析をする際に,いきなり回帰したりクラスタリングしたりしない.まずはデータを見ることが重要.これをささっとやれるようにするためのメモ.あまり好きではなかったpythonだけど,pandas, numpy, scipyなどなどに触れると便利だと気づく・・・悔し…

RandomForest@scikit-learn

注意点 データは内部でnp.float32に変換されている.np.info(np.float32)で確認すると3.4e+38程度であふれることがわかる. スパース行列には対応していないので,TruncatedSVDなどの次元圧縮と併用する. xの与え方は[x1, x2, x3, ...]のようにリストで渡す…

ニューラルネットワーク+深層学習

# ニューラルネット - 順方向ニューラルネットっていう一般的な構成は,オンライン型の関数回帰方法で,特に非線形関数の合成関数として回帰するものだと思う. - 3層でN層以上と等価な関数表現力があると言われているらしいが,じゃあ何で深層学習と呼ばれ…

データ解析の前準備 in R

平均やばらつきをみたり,何か解析手法を適用する前にデータ自体をある程度把握しておきたい. 難しそうで,かっこいい手法やるよりも,まずはしっかりと基本的な特徴を眺めてみることも重要. そこで,一般的にやることをRでさくっとやるためのテンプレート…

主成分分析(PCA)

一般事項 ・多変量解析において,もともとの説明変数(X)では現象が捉えにくい時に,説明変数を変換して新たな軸(説明変数Z)で事象を捉えようとする方法. ・新たな説明変数は元の説明変数の1次結合として表現される.(Z1=a1x1+a2x2+...anxn). ・寄与率…

EMアルゴリズム

# 何をするものか? 最尤推定のアルゴリズム,特に潜在変数Zを含むようなモデルを仮定した場合の逐次漸近的に最尤推定を行うアルゴリズム. 大まかにはパラメタθを固定して,その固定したθの場合に対して潜在変数Zを最適化(Eステップ),次にZを最適化した…

ボルツマンマシン

・無向グラフなニューラルネットワークで,確率的に発火する,というのがボルツマンマシンみたいだ. ・制限付きボルツマンマシン(RBN)ではユニットを幾つかのグループに分けて,グループ内での接続はしない形態.例えば2つのグループに分けると2部グラフ…

線形代数のメモ

よく使うけど,よく忘れるので要点を適時メモ.絶対に忘れちゃダメなこと 一般事項 ・A≠0,B≠0の時でも,AB=0になり得る.行列が写像であることを考えると,Aである軸に関して潰して,Bで別の軸に関して潰してBA合わせて0に潰す,みたいなイメージ. ・…

線形回帰,線形モデル

# 一般メモ 一次式の回帰を線形回帰というのではない.基底関数の線形結合で回帰されるモデル一般が線形モデル.だから関数自体は非線形になりうる. 最小二乗法による回帰係数の最小化は,各点の誤差の分散を最小化することを意味する(らしい).よって,…

ベイズ関連

ベイズ的な考え方がよくわからない.学習のメモ# 一般メモ ベイジアン的手法っていうのは,データにしたがって逐次確率を更新していくという手法だと思う.ベイズだとちょっとずつ回帰式が変化するのでまるで学習しているように見えるけど,最終的には一つの…

ガウス過程(ノンパラメトリック回帰)

ベイズ最適化などでは回帰式としてガウス過程(GP)を用いる場合が多いようだ.ということで勉強. パラメトリック回帰ではモデル式を仮定して,モデルが最もフィットするようにモデルのパラメタを推定する.”最もフィットする”は実際には最小二乗誤差や最尤…

強化学習

一般メモ 大枠は動学的最適化,つまり,目的関数がある関数の積分形式(または総和)で与えられ,目的関数を最大化する関数を求める問題の解法だと思われる. 強化学習の特徴として試行性(試行をしながら学習すること.探索と利用のトレードオフの話など.…

ディープニューラルネットワーク

過学習対策 ・重みのノルムを目的関数に入れることで重みが小さくなるようにする. オンライン学習のパーセプトロンと同様に,L1ノルムだと疎な解に落ちやすくなり, より有効な場合が多い. ・重みの上限を制約として加える ・ドロップアウトと呼ばれる方法…

多重共線性のメモ

意味 説明変数間に高い相関がある場合に,それら相関の高い説明変数群で 作られる回帰モデルの構築に問題が発生すること.具体的な問題は? 具体的な問題点 ・係数の符号の理解が困難になる.つまり,一つ一つの説明変数として 意味を考えることの合理性が弱…