け日記

最近はPythonでいろいろやってます

Python

NumPyを使って線形モデルのパラメータを最小二乗法で推定する

線形モデルと最小二乗法について調べることがありましたので、まとめておきます。 今回は青本の2章を参考に、繰り返し測定、1元配置、多項式の3つのモデルで例示します。また、NumPyを使った行列計算でナイーブに最小二乗法を実装します。 自然科学の統計学 …

PythonでRedisを参照・更新する

仕事でPythonアプリケーションからアクセスするRedisの導入を検討した際に、redis-pyでRedisを参照・更新する方法について調べましたので、備忘録にしておきます。 redis-pyのドキュメントはこちらです。 http://redis-py.readthedocs.io/ DockerでRedisコン…

Python: SciPyを使った仮説検定

前回はSciPyを使った推定をとりあげましたが、今回は正規分布に関する仮説検定をSciPyを使って行います。 サンプルには前回同様、Irisデータセットを使いますので、UCIのWebサイトからダウンロードして品種ごと(setosa, virginica, versicolor)に分けておき…

Python: SciPyを使った統計的推定

SciPyを使って統計的推定を行います。 Irisデータセットを使いますので、UCIのWebサイトからダウンロードし、品種ごと(setosa, virginica, versicolor)に分けておきます。それぞれの標本数は50です。 import pandas as pd import math from scipy import sta…

時系列データで使うPandas小技集

時系列データを扱うにあたって役に立った、Pandasのテクニックを紹介します。 文字列型のSeriesから日時型・日付型のSeriesへ変換する 日付に欠測値を含むデータを日毎に集計する 累積和を計算する 今回の例に使う時系列データは以下です。 ある商品の4/1〜4…

Apache AirFlowをDocker環境で構築して簡単なジョブを作る

仕事でApache AirFlowを使う機会がありましたので、調査がてらに、Dockerで環境を構築し、簡単なジョブを定義します。 AirFlow AirFlowはジョブのスケジューリング・監視を、コード(主にPython)で定義・制御するためのプラットフォームです。ワークフロー、…

Python: Luigiの実行結果をCentral Schedulerで見やすくする

前回の投稿(Python: Luigiでデータパイプラインを作る - け日記)では、Pythonのデータパイプラインフレームワーク Luigi を使って依存関係のあるタスクを定義しました。 前回は1つ1つコマンドライン上で実行結果を見ていましたが、今回はCentral Schedulerを…

Python: Luigiでデータパイプラインを作る

バッチ処理の実装にLuigiを使う機会があり、少し調べて整理しました。 irisデータセットをダウンロードしてきて、scikit-learnで学習したモデルをS3にアップロードする、簡単なサンプルも作ります。 Luigi Luigiは、データパイプラインを記述するためのPytho…

Python: 回帰モデルで市場反応分析

これまで緑本などで学んできた統計モデルを、マーケティングに応用するための勉強を行っています。 今回は市場反応分析を線形回帰モデルとポアソン回帰モデルで行います。 市場反応分析に関する理論や使用するデータは、マーケティングの統計モデル (統計解…

Python: statsmodelsでガンマ回帰

これまで読み進めてきた緑本を改めて復習するために、statsmodelsで一般化線形モデル(GLM)を作り、糖尿病に関するデータの回帰分析を行います。 実装はこちらです。 blog/statsmodels_gamma.ipynb at master · ohke/blog · GitHub データセット 今回はscikit…

Pythonで実装しながら緑本を学ぶ (第10章 階層ベイズモデル)

データ解析のための統計モデリング入門(通称、緑本)を読み進めています。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第10章です。PyMC3を使って階層ベイズモデルを表現します。実装は以…

Pythonで実装しながら緑本を学ぶ (第9章 GLMのベイズモデル化と事後分布の推定)

データ解析のための統計モデリング入門(通称、緑本)を読み進めています。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第9章です。PyMC3を使って、GLMをベイズモデルで表現します。実装は…

Python: foliumで地図を描画する

Jupyter Notebook上で、緯度経度の情報を地図へ簡単にプロットできる方法を探していたところ、foliumの使い勝手が良かったので紹介します。 folium PythonからLeaflet.jsで地図をプロットするパッケージです。 https://github.com/python-visualization/foli…

Pythonで実装しながら緑本を学ぶ (第8章 マルコフ連鎖モンテカルロ(MCMC)法とベイズ統計モデル)

データ解析のための統計モデリング入門(通称、緑本)を読み進めています。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第8章です。実装は以下で公開しています。 introduction_to_machine_…

Pythonで実装しながら緑本を学ぶ (第7章 一般化線形混合モデル(GLMM))

データ解析のための統計モデリング入門(通称、緑本)を読み進めています。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第7章です。実装は以下で公開しています。 introduction_to_machine_…

Pythonで実装しながら緑本を学ぶ (第6章 GLMの応用範囲を広げる -ロジスティック回帰など-)

データ解析のための統計モデリング入門(通称、緑本)を読み進めています。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第6章です。実装は以下で公開しています。 introduction_to_machine_…

Pythonで実装しながら緑本を学ぶ (第5章 GLMの尤度比検定と検定の非対称性)

データ解析のための統計モデリング入門(通称、緑本)を読み進めています。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第5章です。実装は以下で公開しています。 introduction_to_machine_…

Pythonで実装しながら緑本を学ぶ (第4章 GLMのモデル選択)

前回から引き続き、データ解析のための統計モデリング入門(通称、緑本)を読み進めています。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第4章です。実装は以下で公開しています。 introd…

Pythonで実装しながら緑本を学ぶ (第3章 一般化線形モデル(GLM))

データ解析のための統計モデリング入門(通称、緑本)を読み始めました。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第3章です(前回の投稿はこちら)。実装は以下で公開しています。 introd…

Pythonで実装しながら緑本を学ぶ (第2章 確率分布と統計モデルの最尤推定)

データ解析のための統計モデリング入門(通称、緑本)を読み始めました。 述べられている理論を整理しつつ、Rでの実装をPythonに置き換えた際のポイントなども深掘りしていきます。 今回は第2章です。実装は以下で公開しています。 introduction_to_machine_le…

Python: レコメンドの行列分解を確率的勾配降下法で実装してMovieLens100Kに適用する

前々回の投稿( Python: レコメンドの行列分解を確率的勾配降下法で実装する - け日記 )では、欠測値やバイアスを考慮した行列分解を、確率的勾配降下法(SGD)で求める実装を行いました。 今回はおなじみMovieLens100K Datasetへ、このアルゴリズムを適用しま…

Python: scipy.sparseで疎行列計算する

疎行列計算用のモジュール scipy.sparse について解説します。 https://docs.scipy.org/doc/scipy/reference/sparse.html 疎行列クラス 疎行列とは要素のほとんど(90%以上)が0で構成される行列です。 レコメンドやソーシャルグラフなどの分野ではしばしば現…

Python: レコメンドの行列分解を確率的勾配降下法で実装する

過去3回の投稿で、行列分解(SVDとNMF)によるレコメンドを実装してきました。 Pythonで特異値分解(SVD)を理解する - け日記 SVDでMovieLensのレコメンドを実装する - け日記 NMFでMovieLensのレコメンドを実装する - け日記 ですが、いずれも欠測値やユーザご…

NMFでMovieLensのレコメンドを実装する

前回の投稿( SVDでMovieLensのレコメンドを実装する - け日記 )に引き続き、今回はNMFで映画のレコメンドを実装します。 NMF 非負値行列因子分解(Non-negative Matrix Factorization: NMF)は、ある行列XをW・Hに近似的に分解する方法の一つです。その名の通…

SVDでMovieLensのレコメンドを実装する

前回の投稿( Pythonで特異値分解(SVD)を理解する - け日記 )で特異値分解(SVD)についてPythonで(車輪の再発明的に)実装してみました。 今回はSVDを使って、映画のレコメンドシステムを作ります。データセットはMovieLens 100Kを用います。 データセット 今回…

Pythonで特異値分解(SVD)を理解する

以前の投稿( 論文メモ: Item2Vec: Neural Item Embedding for Collaborative Filtering - け日記 )で比較対象になっていた特異値分解(SVD)についてまとめ、Pythonで実装してみます。 SVDとは 特異値分解(singular value decomposition: SVD)は、数学的にはM×…

word2vecでitem2vecを実装して映画を推薦する

自然言語処理 Advent Calendar 2017 - Qiita 8日目の投稿となります。 qiita.com 前回の投稿ではword2vecを推薦に応用したitem2vecを紹介しました。 今回は、gensimのword2vecを使ってitem2vecの実装を行い、映画を推薦するシステムを作ります。 ohke.hatebl…

LDAでブログ記事のトピックを抽出・分類する

今回はLDAを使って、京大ブログコーパスをトピック毎に分類できないか試みてみます。 LDA LDA(Latent Dirichlet Allocation, 潜在ディリクレ配分法)は、文書のトピック(文書の話題、カテゴリ、ジャンルとも言える)についてのモデルです。 初出は以下の論文で…

Word2Vecで京都観光に関するブログ記事の単語をベクトル化する

京都観光に関するブログ記事を使い、Word2Vecで単語のベクトル化します。 ベクトル化することで、例えば「紅葉」という言葉から紅葉の名所を列挙したり、「カップル」という言葉からデートコースを探したりできないか、というのを試みてみたいと思います。 W…

Python janomeのanalyzerが便利

前回の投稿でも形態素解析に利用したjanomeですが、形態素解析を単純にラッピングするだけでなく、いくつかシンプルで便利な機能も実装されています。 今回は、形態素解析以外の前処理も簡単に統合できるanalyzerについて紹介します。 前処理が必要なデータ …