fc2ブログ
MacOSXでPylearn2
Deep Learningのためのライブラリ、Pylearn2のインストールメモです。AnacondaのPython2.7とTheanoはすでにインストールされていました。このサイト参考にさせていただきました。
最初のインストールは、本家のサイトを参照。gitが必要です。環境変数は、以下の様に設定します。

export PYLEARN2_DATA_PATH="/Users/tsujishingo/pylearn2/data"
export PATH=/Users/tsuji/pylearn2/pylearn2/scripts:$PATH
export PYLEARN2_VIEWER_COMMAND="open -Wn"

openの引数がちょっと工夫ですが、その他はTheanoがちゃんと入っていればそれほど苦も無く動くと思いますが、このはじめの一歩をうごかすときのプチ嵌まりポイントが、サンプルデータ。ここから、「CIFAR-10 python version」を持ってきて、tarをDATAディレクトリで解凍しますが、

~/pylearn2/data/cifar10/cifar-10-batches-py

以下にファイルが入るようにします。まあ、make_dataset.pyのエラーが出るので、そのとき気が付きますが。
スポンサーサイト



【2014/09/01 16:10】 | データ解析 | トラックバック(0) | コメント(0) | page top↑
rpy2でJonckheere-Terpstra(ヨンクヒール・タプストラ)検定
たとえば、「無治療、ちょっと治療、ちゃんと治療」のように、3個以上のカテゴリに順序があるとき、これらの群間で数値にトレンドがあるかどうかを検定する方法に、Jonckheere-Terpstra(ヨンクヒール・タプストラ)検定という方法があります。詳しくは、Rを使った実例や、Wikipedia(英語)などを参考にしてください。Rにあるのに、scipy.statsに無く、大学の図書館に、この本があったので、Pythonで実装しようかと思ったのですが、面倒になってrpy2を使ってしまいました。数値データは、本の中から引用しています。

robj.r('library(SAGx)')
import rpy2.robjects as robj
v = robj.FloatVector([133,139,149,160,184,111,125,143,148,157,99,114,116,127,146])
l = robj.FactorVector([1,1,1,1,1,2,2,2,2,2,3,3,3,3,3],ordered=True)
robj.globalenv["v"] = v
robj.globalenv["l"] = l
_res = robj.r('JT.test(v,l,alt="decreasing")')
print(_res)

Jonckheere-Terpstra

data: v by l
J = 59, p-value = 0.01156
alternative hypothesis: decreasing: 1 > 2 > 3

事前にRのパッケージのインストールが必要です。
> source("http://bioconductor.org/biocLite.R")
> biocLite("SAGx")
とすれば行けると思いますが、手元の環境ではちょっとエラーが・・・。ま、動いているからいいか。

テーマ:プログラミング - ジャンル:コンピュータ

【2013/07/11 10:08】 | データ解析 | トラックバック(0) | コメント(0) | page top↑
RでROC
MacOSX10.8.2のR 2.15.2でROC(Receiver Operating Characteristic)曲線を描いてみました。ちょっと探したら、ROCRというパッケージがあったので、早速インストール。Macバイナリ版が使えなかったので、以下のコマンドで。

sudo R CMD INSTALL ROCR_1.0-2.tar.gz

なんらかの数値とクラス分けのための0,1を2列にしたデータを用意して読み込み、あとは言われるがままに使うだけです。

> roc.data <- read.delim("~/roc.txt")
> library(ROCR)
> pred <- prediction(roc.data$predictions,roc.data$label)
> perf <- performance(pred, measure = "tpr", x.measure = "fpr")
> plot(perf, col=rainbow(10))
【2013/03/06 09:08】 | データ解析 | トラックバック(0) | コメント(0) | page top↑
nimfaでNMF
生命科学の分野でも、遺伝子発現情報やDNAメチル化情報のクラスター解析に使われているNMF(non-negative matrix factorization)を応用した手法を実装したPython用ライブラリにに、nimfaがあります。データマイニングソフトのOrangeにも採用されているようなので、使って見ました。
まず、こちらのGithubサイトから、レポジトリをzipファイルで取得して解凍。sudo python setup.py installで入れます。Python Image Library(PIL)が必要なので、なければこちらはpipなどで手軽に入れておきます。
NMFはやはりいくつのクラスに分類するかがもっとも効いてくるパラメータですので、これを2から9でふるサンプルスクリプトを載せておきます。といっても、estimate_rankというメソッドがあるので便利です。データは、行方向に変数、列方向にサンプルが並んだテキストファイルを、ほとんど神といっても過言では無いPandasのDataFrameとして読み込んでいます。一部、nimfaのサンプルコードを利用しています。

#!/usr/bin/env python

import pandas
import nimfa
import numpy as np
from scipy.cluster.hierarchy import linkage, leaves_list
from matplotlib.pyplot import savefig, imshow, set_cmap

def reorder(C):
"""
Reorder consensus matrix.

:param C: Consensus matrix.
:type C: `numpy.matrix`
http://nimfa.biolab.si/nimfa.examples.all_aml.html
"""
c_vec = np.array([C[i,j] for i in xrange(C.shape[0] - 1) for j in xrange(i + 1, C.shape[1])])
# convert similarities to distances
Y = 1 - c_vec
Z = linkage(Y, method = 'average')
# get node ids as they appear in the tree from left to right(corresponding to observation vector idx)
ivl = leaves_list(Z)
ivl = ivl[::-1]
return C[:, ivl][ivl, :],ivl

def plot(_C, file_name):
"""
Plot reordered consensus matrix.

:param C: Reordered consensus matrix.
:type C: `numpy.matrix`
:param rank: Factorization rank.
:type rank: `int`
http://nimfa.biolab.si/nimfa.examples.all_aml.html
"""
C,idx = reorder(_C)
imshow(np.array(C))
set_cmap("RdBu_r")
savefig(file_name)

def run_nmf(data):
V = np.matrix(data.as_matrix())
model = nimfa.mf(V, method = "lsnmf", max_iter = 200)
est_rank = model.estimate_rank(range=xrange(2,10),n_run=100)
for i in xrange(2,10):
print('rank = {}'.format(i))
print('cophenetic coef = {}'.format(est_rank[i]['cophenetic']))
print('sample prediction')
print(est_rank[i]['predict_samples'][0])
f_name = 'clustered_consensus_matrix_{}.png'.format(i)
plot(est_rank[i]['consensus'],f_name)
return est_rank

if __name__ == '__main__':
data = pandas.read_table('data.txt',index_col=0,na_values=(' '))
run_nmf(data)

Consensus行列を可視化するとこんな感じになります。
4クラスのConsensus行列を可視化

テーマ:数学 - ジャンル:学問・文化・芸術

【2013/02/26 14:49】 | データ解析 | トラックバック(0) | コメント(0) | page top↑
| ホーム |