幾霜::残日録::2008/11/22 (土)

 

2008/11/22 (土)

[Hardware|Software] Linux/FreeBSDでネットワークバックアップアプライアンスは作れないか - 22:12:00

 LinuxやFreeBSDからWindowsマシンの共有フォルダへアクセスして、ネットワーク越しにバックアップを取るアプライアンスは構築できないだろうか。なんかそういうソフトはありそうな気もする。とりあえず要件を下記に示す。

Webインターフェイスを用いたバックアップ対象や間隔の設定
 一々ログインなどやっていられない。これ必須。

ネットワーク越しにファイルを取得してイメージバックアップ
 ファイルをそのままだったり、ファイルごとに圧縮では困る。というのも、私のメインマシンのHDD内は大量の細かいテキストファイルがあるからだ。イメージ化しないと格納効率が悪すぎる。

バックアップイメージは圧縮形式で、一部破損しても非破損部分を問題無く取り出せる
 テキストなので圧縮がよく効くはず。何世代分も保持して欲しいので圧縮してくれる方が助かる。だからと言って、ファイルの一部が破損しただけでイメージ内の全ファイルが展開できなくなるようなクソ形式では困る。

バックアップイメージ内の世代ごと、フォルダごとのブラウズや指定ファイルの取出しができるWebインターフェイス
 対象と間隔ができるならこれもできないとダメでしょう。

FreeBSD、GentooまたはUbuntu Linuxで簡単にインストール・設定ができること
 インストール手順が多いのは面倒くさいので、ports・portage・aptで一発インストールできると嬉しい。

 これのキモは、あくまでこのマシンの側がバックアップの作業を行うため、バックアップされる側はリクエストに応えてファイルを送るだけでいいということだ。その間、送り側マシンでは何の問題も無く、バックグラウンドで特別なソフトを動作させること無く作業が継続できる。さて、こんな要件を満たすソフトはあるだろうか。なかなかキーワードが難しくて検索ではヒットしない。既存のNASにこういう機能のあるものがあれば即買うんですけどねぇ。むしろそっちの方が探しやすそうな気がする。とりあえずITmediaで瓜生氏がやたらマニアックなレビューをしていた記憶があるので、まずはその辺りを当たってみますか。

追記 - 2008/11/24 19:16:52
 Windows Home Serverに上記のような機能があるようです。PC内の全ファイルバックアップしてしまうようですけど。フォルダ指定はできないんでしょうかね。どちらにしろ単機能目当てとしては高すぎるのでLinux上でできるのがやはり理想ですね。IO DATAのLANDISK Teraにも同様の機能があるようですが、こちらは複数世代のバックアップはできないようです。

[Software] Vistaの「ファイルのバックアップ」が相変わらず使えない - 19:56:54

 Complete PC バックアップは悪くない。が、ファイルのバックアップがまるで使い物にならない。フォルダ限定のバックアップが何故できんのだ。また、ファイルの種類に応じて限定することはできるが、「画像」とか「メール」とか言われても、曖昧だしどうせBeckyのメールはメールとして認識しないんでしょうが(いや試してないですけど)。

 しかもシステムのインストールされたドライブは強制的にバックアップされ、対象から外すことができない。これは最悪。私はCドライブはプログラムとシステム専用とし、Dドライブをデータ専用ドライブとして運用しています。CドライブはComplete PC バックアップに任せ、Dドライブをファイルのバックアップに任せたいので、必ずCドライブのファイルまでバックアップされるのは困るんですよ。なんでその程度の自由も無いのか。

 BunBackupなどのソフトによる単純なファイルコピーは利便性は高いが遅すぎる。ここをTimeMachine並みに作りこんでUltimate限定で提供すれば絶対にUltimateを買うという人もたくさんいるだろうに。そこまでいけば自由度が低くても我慢できるんですけどねぇ。MSにその程度の技術が無いはずはないんだが。

 やはり、超巨大ドライブを載せて全てComplete PC バックアップで運用するのが正解か。Complete PC バックアップもWindowsインストール後にしか復元ができないのが痛い。バックアップ先から起動して復元できればいいのになぁ。

追記 - 20:14:50
 Windows XP ProfessionalのバックアップでウィザードをOFFにしたら特定フォルダのみのバックアップできるやん。なんでVista Ultimateでできへんのよ。Vistaはデフラグも驚くほど劣化して、UIのシンプル化を図ったつもりが単なる機能削減にしかなっていないという典型パターンにはまり込んでいる気がする。

追記 - 20:30:34
 実はものすごくインテリジェントで私の意図通りのバックアップがなされるかもしれないのでとりあえずバックアップを行ってみることにした。バックアップ後に特定ファイルの復元を行ってみることにして今日はとりあえず帰宅します。

追記 - 2008/11/24 19:16:52
 終了したバックアップを眺めてみると、80GBほど食っています。Cドライブの余計なものまで大量にバックアップしてしまっていますね。まぁ耐えられないほどの大容量というわけではないので、これでよしとしましょうか。ダウンロードファイルのバックアップなんて要らないんですけどねぇ・・・。ダウンロードすればいいし。

[Life] こーぼ - 10:31:36

 もう1件よさげな公募を見つけた。まぁ論文5編送れとか書いてあるので苦しそうですが、該当する人間が沢山いるとも思えませんので出してみますか。少なくとも仕事内容と応募資格は完璧に満たしているはず。

[Science|Software] Rのglm()・glmmML()・lmer()のAICとLaplace近似・Gauss-Hermite近似による尤度計算 - 03:09:46

 以前にも話題になりましたが、ちょっと気になったのでメモっておきます。

glm(cbind(val, 30-val)~treatment+1, family=binomial, data=dat)$aic
1184.947
glm(cbind(val, 30-val)~treatment+id+1, family=binomial, data=dat)$aic
864.1475
glmmML(cbind(val, 30-val)~treatment+1, family=binomial, data=dat, cluster=id)$aic
509.8764
glmmML(cbind(val, 30-val)~treatment+1, family=binomial, data=dat, cluster=id, start.sigma=0, fix.sigma=T)$aic
789.4502
summary(lmer(cbind(val, 30-val)~treatment+(1|id), family=binomial, data=dat))@AICtab$AIC
509.8764

 で、つまるところ、どれが一番いいのかということだが、これは既出なので「glm glmmML lmer AIC」などというキーワードで検索すれば見つかります。念のため計算してみます。

model.glm<-glm(cbind(val, 30-val)~treatment+1, family=binomial, data=dat)
deviance(model.glm) + attr(logLik(model.glm),"df")*2
789.4501
model.glm<-glm(cbind(val, 30-val)~treatment+id+1, family=binomial, data=dat)
deviance(model.glm) + attr(logLik(model.glm),"df")*2
468.6507

 実はこのデータは毒論のもので、どのモデルを当てはめるか厳密に検討していないような気がします(でもやったような気もする)。しかし、結局毒論ではidも固定効果として入れるモデルでやったのでそれで良かったのかもしれません。もう少しで計算をやり直しする羽目になるところでした。

追記 - 04:22:38
 ちなみに、

glmmML(cbind(val, 30-val)~treatment+1, family=binomial, data=dat, cluster=id, method="ghq")$aic
511.0618
summary(glmer(cbind(val, 30-val)~treatment+(1|id), family=binomial, data=dat, nAGQ=10))@AICtab$AIC
551.6978
summary(glmer(cbind(val, 30-val)~treatment+(1|id), family=binomial, data=dat, nAGQ=100))@AICtab$AIC
431.8578
summary(glmer(cbind(val, 30-val)~treatment+(1|id), family=binomial, data=dat, nAGQ=1000))@AICtab$AIC
794.3166

となっています。近似の精度を上げると値が上下するのは勘弁して欲しいですね。というか、nAGQ=100の結果が本当なら計算やり直しなんですけど・・・。それにしても変動激しすぎでしょ。もっとも、いずれにしてもかなり遅いので膨大な回数の最適化を行う私のコードを走らせるのは非現実的ですが。とりあえずは最高精度のはずのnAGQ=1000の値は大きいのでよしとしておきます。

 この計算過程で、help(glmmML)したら実はglmmML()のデフォルトもLaplace近似でやっていると初めて知りました(ver.0.81-3)。K保セソセイのサイトではMLだと書いてあったのでてっきりMLだと思っていましたが、あのページが書かれた頃にはMLだったのでしょうか。でもMLができるのにオプションを削除するか? 実は当時からLaplace近似だったりして。つまり、あのページの結果はlmer()のLaplace近似計算とglmmML()のLaplace近似計算がよく似た結果を返すことを示しているだけではないか、ということ。

 ともあれ、個人的にはLaplace近似によるGLMMの最適化計算は全く信用できない、という印象を持ちました。そういう目で見てみると、信用できない結果が氾濫している気がします。これを読んでいる人の中にも身に覚えのある方、おられるのでは? lmer()でのREMLは大丈夫なんだろうか。というか、そもそも今ちゃんと動くところまで実装されているのかねぇ。と、脅しておいてなんですが、nAGQ=2以上の計算がバグっているだけで、nAGQ=1(つまり、Laplace近似)ならちゃんと計算できているという可能性もあります(あくまで可能性ですけど、開発状況からすれば高い気がします)。

追記 - 04:53:13
 lme4に入っているmcmcsamp()でMCMCを走らせて結果を比較しようかと思ったのですが、「Update not yet written」というエラーで止まる。どうやらまだ実装されていないようです。検索すると、正規分布以外では動かないんだとか。K保セソセイのサイトには二項分布の例が書かれているんですけど、一旦機能が廃止にでもなったんだろうか。

追記 - 05:18:43
 lme4のバージョンを書き忘れていました。こちらの環境ではver.0.999375-27がインストールされています。とりあえずglmmML()のmethod="ghq"でもn.pointsを変えて計算してみます。

追記 - 07:15:45
 n.points=100では「Hessian non-positive definite. No variance!」のエラーで計算できず。でも200ではできたり。

glmmML(cbind(val, 30-val)~treatment+1, family=binomial, data=dat, cluster=id, method="ghq", n.points=1)$aic
509.8764
glmmML(cbind(val, 30-val)~treatment+1, family=binomial, data=dat, cluster=id, method="ghq", n.points=10)$aic
510.8662
glmmML(cbind(val, 30-val)~treatment+1, family=binomial, data=dat, cluster=id, method="ghq", n.points=50)$aic
510.8029
glmmML(cbind(val, 30-val)~treatment+1, family=binomial, data=dat, cluster=id, method="ghq", n.points=200)$aic
503.6199
glmmML(cbind(val, 30-val)~treatment+1, family=binomial, data=dat, cluster=id, method="ghq", n.points=300)$aic
1002.548

この感じだとlmer()とは別個に実装を行っているように思えます。Laplace近似やGauss-Hermite近似が悪いのではなくてglmer()のnAGQ=2以上の場合の実装がよろしくない、という可能性が高そうです。また、Gauss-Hermite近似は複数区間に区切ってLaplace近似計算を行うものと理解していますが、あんまり細かく区間を区切るのもよろしくなさそうです。glmer()も区関数をもう少し検討してみます。

追記 - 07:32:01
 glmmML()とglmer()でn.points・nAGQを1〜20まで変化させてみました。glmmML()では510.8、glmer()では551.7辺りが解ということになりそうですが、この差は何なんでしょうか。区間を区切るときの処理をどちらか(または両方)がミスっているんじゃないかという気が。n=1とそれ以外での計算からすると、glmer()の方が怪しいか。

n  glmmML() glmer()
1  509.8764 509.8764
2  514.4465 550.3231
3  515.695  550.3231
4  508.9775 551.78
5  511.7244 551.78
6  510.8373 551.7011
7  510.5851 551.7011
8  511.0618 551.6956
9  510.6492 551.6956
10 510.8662 551.6978
11 510.8043 551.6978
12 510.775  551.6978
13 510.8363 551.6978
14 510.7776 551.6976
15 510.8172 551.6976
16 510.7983 551.6976
17 510.8012 551.6976
18 510.8077 551.6976
19 510.7978 551.6976
20 510.8071 551.6976
いずれにしろ、Laplace近似の近似の良さはモデルに依存することに変わりは無いので、あまり過信すると危ないのではないでしょうか。全く信用できない、というのは言いすぎだと現時点では思いますが。Gauss-Hermite近似のnの値を安定するまで増やしていくというやり方もアリかと思ったのですが、glmer()だと微妙ですね。まぁそれでもLaplace近似の結果のみに依存するよりは安全性は増すというか、言い訳はできそうな気がします。

Go to front page
Comments and TrackBacks
Web antenna system: NaTsuMi
Search in this site
Picasa web album
Access Count : 1507438