2013年9月20日金曜日

確率系のことが書いてあったサイトとか

今日は、基本的な数学のお勉強。

もともとはLDA(潜在的ディリクレ配分法)を勉強しようと思ったのだが、
いろいろと基本的な数学の定理をど忘れしてしまったので
また基本に戻って勉強しているところ(T-T)

自分はアホな脳みそしか持っていないので、
勉強のしなおしを恐れずに勉強しつづけるしかないのであります。。。



事前確率と事後確率(FROM :: Red cat の数学よもやま話・新装開店)
http://mathneko.hatenablog.com/entry/2012/11/28/063057

ギブスサンプラー
http://miyahn.blog80.fc2.com/blog-entry-111.html

LDA入門
http://www.slideshare.net/tsubosaka/tokyotextmining

LDAでは何故ディリクレ分布を仮定するのか
http://yuku-tech.hatenablog.com/entry/20110508/1304860257


ふむ。。。
これらを読んだだけでも、頭が疲れてきちゃった。
でも、消化できるよう頑張るよ。これから。

2013年7月28日日曜日

「ご苦労様」という言葉

私は「ご苦労様」という言葉が嫌いです。

一番の理由は、相手を労っている言葉であるにも関わらず
上から目線な表現だからです。
役所系の仕事をしているオッサンとか、良い例ですね。
我々がしぶしぶ納める税金で生活しているクセに、
何だこの上から目線な表現は・・・とか思ってしまいます(笑)


自分がそう言われたらとても不快に感じるので、
私は、仮に後輩に対してであっても使わないようにしています。

「ご苦労様」という言葉は、私が封印した言葉の1つです。


「代替」と「続柄」

代替の読み方は 『だいたい』。
『だいがえ』ではない。

続柄の読み方は『つづきがら』。
『ぞくがら』ではない。


でも、間違った読み方をあえてした方が
話が通じてしまう。

正しく読むことの意味を考えてしまう。

(半分皮肉です(笑))

Ubuntuにpostgresqlを

UbuntuにPostgresqlを入れたときに参考にしたリンク。


■インストール

http://fusigi-movement.blogspot.jp/2012/03/ubuntu1004postgresqlphppgadmin.html

■初期の使い方

http://www.kkaneko.com/rinkou/postgresinstall/postgreslinux.html


2013年5月31日金曜日

ホウレンソウ禁止で1日7時間15分しか働かないから仕事が面白くなる

表題は、未来工業(株)創業者の山田昭男相談役による著書です。

http://www.amazon.co.jp/dp/B009T0B1S2/



ホウレンソウ禁止、たかだか1日7時間強の時間で
どうやって仕事を回しているのかが気になったので
興味で読んでみました。


一番印象的だったのは、差別化の考え方。
私は技術職なので、どうしても技術の差別化を考えてしまうのだが、
他社とほとんど似ている製品であっても、1つでも違うところがあれば、
そこは立派な差別化要素だというのが、山田さんの言い分。
差別化要素が発掘できないのは、考え抜いていないからとのことでした。

そう言われて、私にとっての「差別化」という言葉のハードルは
かなり下がったような気分になりました。
いろいろ差別化を諦めてしまった案件があるので、
頭の体操がてら、やってみようかな、と。

差別化を考える際、その差があると得られるメリットって何だろう。
そこをいくつも発掘してみよう。



あと、日本の会社の97%の会社は儲かっていない、という点はびっくり。
利益を出せていない会社が多いのは良くわかっていたつもりだったが、
それでも儲けている会社は、2割くらいあるんじゃないかと感覚的に思っていた。
そうなれば、他社の方々が考えていることとは真逆のことを探し出した方が
儲かるんだというセリフには説得力がある。

今は米国のG社やA社、韓国のS社などが勢力を拡大しまくっていて
日本の電気業界にとってはかなり手ごわい相手になっていますが、
逆に考えると、一部の企業がマジョリティを作り出しているのであれば
逆のネタを思いつくこと自体は、実は簡単だったりするのかな・・・??



・・・いや、やっぱり難しいよ(´・ω・`)



あとは、目先のコスト削減は、あまり得策じゃない、という考え。
こちらはとても共感できた。

例えば、月給30万円の正社員と、月給15万円の派遣社員。
雇うなら、どちらか。

山田さんは前者の方が得だと言う。

その理由は、契約社員は正社員よりも首を切られやすいし給料も安いので、
真剣に会社のために考えてくれないのではないか、とのことだった。

それもあると思いますが、契約社員は基本は会社にずっとつかないので、
せっかく蓄積してくれたノウハウが他の会社に行ってしまうのが勿体ないという
考えを私は持ちました。



ほかに面白かったところは、

・何が何でも製品の価格を下げない努力をする。
・人事部はいらない。
・人の管理なんてしない方が業務効率は良くなる。
・成果主義よりも年功序列の方が良い。
・上司に許可をとらずに、やったもん勝ちの社風。

など。
ここ10年くらい否定され続けている日本企業の性質を
精一杯肯定しているところが面白いです。


中でも、「やったもん勝ち」という社風って
とても重要じゃないかな、って思います。
とにかくやってみれば、それだけノウハウ貯まりますもんね。
そんなチャンスをみすみす逃すなんて、勿体ない。



表題はホウレンソウ禁止って書いてあって、それも興味をそそるんですが、
それ以上に、経営に対する考え方が、一般に良しとされているものと
少し違っていて、面白いし勉強になります。

Kindleストアで購入できますし、お薦めの1冊です。

2013年5月3日金曜日

JEITA 音声認識技術の新しい応用に関する調査報告

音声認識関連の情報収集のため、サイトを放浪していたら
表題のタイトルの資料を見つけました。

http://www.jeita-speech.org/report/content/NewApplications_v0.5.pdf


アプリケーションとして発想が面白いのは、
パーキンソン病判定やインテリジェント非常通報システムですね。
2つとも音声認識をセンサーとして使用している点が面白いです。

個人的には、ユーザーの発話を正しく認識できていることを前提にして
UI設計された音声認識システムに疑問を感じていました。
カーナビなんて、代表的な例ですね。

でも、このパーキンソン病判定やインテリジェント非常通報装置は
まずは運用者に実態をチェックさせる動機付けに使用されるので、
多少のシステムの誤りは許容されそうです。
しかも、音声認識のメリットである「素早い入力」をきちんと生かしているので、
とても現実的な使い方をしていると感じました。


書き起こし系のシステムは、シチュエーションに大きく依存しそうです。
自分用のメモといった殴り書き系であれば十分機能すると思うのですが、
システムとして提案されているのが、誰かに向けて提出する系が多いので、
ほぼ必然的に修正が発生してしまう状況を個人的には気になっています。

ただ、音声エージェントのように認識された結果をただちに操作に反映するのではなく
文字に直したところまで行えればシステムとしての役目を完了できるので、
誤作動によるユーザーの負荷や不快感は軽減できる点は良いですよね。



この資料は、ポイントにしぼってまとめられていて
音声認識業界から離れてしまった私がざっくり調査するのに
とても役立ちました。

JEITAに感謝。

2013年4月26日金曜日

randomForestの複数の決定木を合体させる方法 他


■調べたこと

 ◇randomForestの決定木をマージする方法
 
  CRAN
  randomForestマニュアル
  http://cran.r-project.org/web/packages/randomForest/randomForest.pdf

  combine関数で対応できる模様


 ◇BASH
 
  ・for文の組み方

    ファイヤープロジェクト
    for文
    http://www.fireproject.jp/feature/bash/basic/for.html

  ・BASHのsprintfっぽい役割をする関数の書き方
  
   それマグで!
   bashで指定回数ループして綺麗なファイル名を作る
   http://takuya-1st.hatenablog.jp/entry/20090217/1234871797

  
  ・変数に空白を含む文字列を与える場合

   HHeLiBeXの日記 正道編
   シェルスクリプトに空白を含むパスを渡した場合の扱い
   http://d.hatena.ne.jp/hhelibex/20100306/1267884583

   単に' 'でくくればOK

Twitter系参考資料(その1)



Twitterのサンプルソースを求めてWebをちょっと徘徊した時に見つかった
有益そうな情報のある参考サイト。



■Twitter Streaming API

 ★console.lealog();

  Twitter Streaming APIについてのメモ
  http://lealog.hateblo.jp/entry/2013/03/10/100845


 ★DoboWiki

  Twitter Streaming APIを使う 1
  http://wiki.dobon.net/index.php?.NET%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%A6%B5%E6%2F96



■OAuth

 ★OAuthライブラリ(PHP)

  https://github.com/abraham/twitteroauth

  ZIPボタンをポチる。


■OAuth認証+Twitter

 ★WEBOPIXEL

  PHPでOAuth認証して自分のつぶやきを表示する [Twitter API 1.1 対応版]
  http://www.webopixel.net/php/666.html


 ★きらら2号

  PHPでOAuthを使ったサンプルコード
  http://speit.blog78.fc2.com/blog-entry-50.html


 ★ITメモ帳

  twitter/PHPでつぶやき投稿(OAuth認証)
  http://hodade.adam.ne.jp/itmemo/index.php?twitter%2FPHP%A4%C7%A4%C4%A4%D6%A4%E4%A4%AD%C5%EA%B9%C6%A1%CAOAuth%C7%A7%BE%DA%A1%CB


2013年4月11日木曜日

CRANで提供されているパッケージのカスタマイズ方法のメモ

分類器の挙動をあまり良く知らなくても、
ライブラリの使い方がある程度把握できていれば
クラス分類とかが出来てしまう。

 しかも、それをフリーツールで実現できてしまう。


今はこんなご時世なので、「実際使ってみる方が先決」っていった
話になりやすい環境にあると感じるのですが・・・。

いろいろ検証し始めると、やっぱり自分専用に欲しくなってしまう機能なんて
出てきたりするもんなんですよ。
他にも、やっぱりライブラリの中身の挙動を
具体的に知りたいっていうときもあります。


そんなわけで、実際にCRANに公開されているrandomForestパッケージを使って
中身の改変に取り組んでみました。


実際の手順は次の通りになりました。
Rの開発実行環境があるのが前提です。
Mac OS X 10.8.xの場合です。

1.RToolsをインストールする。

2.CRANサイトから、randomForestのソースコードのtar.gzをダウンロードし、
  ワークディレクトリ上で解凍。
  解凍し終わったら、後に出来上がってくるtar.gzと区別する意味で
  どこか別のディレクトリに移しておくのをお薦め。

3.randomForest/srcやrandomForest/R で改変したいところを自由に編集する。

4.R CMD check randomForest --no-manual を実行。
  足りないパッケージが出てくるかもしれませんので、そういうのが出てきたら
  その都度R実行環境上でインストールする。

5.R CMD build randomForest でrandomForest.tar.gzを生成。

6.R開発実行環境を立ち上げ、R上でパッケージインストールからインストール。
  もしも、既にrandomForestをフレームワーク下に入れていたならば、
  フレームワーク側の方のrandomForestを削除してからR開発実行環境を立ち上げる。


ハマったのは、まず4。
--no-manualオプションを入れておかないと、マニュアル作成の処理までやろうとして
勝手にエラーを吐いて止まってくれちゃいます。。。
マニュアルが欲しい人はTexLiveを入れて対応するらしいのですが、
まずは改造してみたい人にとっては、マニュアル作成よりも先に
きちんと動かしたいのだと思います。
だから、--no-manualオプションは入れることをお薦めします。

ちなみに、私はTexLiveそのものをインストールしてみたんですが、
このセットアップだけで1時間弱の時間がかかってしまいました。

どうしてもインストールしておきたいならば、寝る前に回しておくことをお薦めします。


つぎに6。
普通にremove.packagesで本家のrandomForestを消してから6をやり直したりしたのですが、
自分で改変した箇所が反映されず、とても悩みました。
フレームワーク内にパッケージを入れているときは、
ユーザー領域にパッケージが入らないので、この点は注意です。



とりあえず、自分用のメモ書きとして、CRANで提供されているパッケージの
カスタマイズの方法を書いてみました。


あ、ちなみに、例題(ってほどでもないですが)で使ったrandomForestパッケージは
ライセンスがGPL2以上となっていますので、これを改造してCRANに上げたい方はご注意くださいね。


(参考)

iAnalysis ~おとうさんの解析日記~
 http://d.hatena.ne.jp/isseing333/20110117/1295197018

10分で分かるRパッケージの作り方
 http://www.slideshare.net/yokkuns/10r

生物統計学
 http://r.livedocs.net/dev/packging.html


2013年4月8日月曜日

kernlabパッケージのspamデータ

最近忙しくて、休みの日も仕事をする日々だったので、
記事が久しぶりになってしまいました。。。


Rのkernlabパッケージに入っているspamデータについて調べてみました。

私は、サンプルデータセットが充実している点がRの良いところの1つだと
思っているのですが、意外と日本語のページでデータそのもののことを
調べたという記事が見つからなかったので、興味のあるところだけを抜き出して
調べてみようというのが、この記事を書く発端です。

私が気になっているのは、このデータがクラス分類するにあたって
ふさわしいデータなのかどうか、ということです。

データが、1つの独立変数を選べば完璧にspam(nonspam)データだけを抽出できる
というものではクラス分類をわざわざ登場させる意味を感じませんし、
逆に全く分離できる希望を持てないような分布であっても、
サンプルとして適用するだけの価値はないようにも思えるのです。

だから、これらを足して2で割ったような感じの特性になっているのが
私はクラス分類のサンプルデータとしてふさわしいデータに思うんですね。

今回は、この視点で書いてみることにしました。
まずは、以下に置いてあるCRANのマニュアルを見てみました。
spamデータのことは、p90あたりに書いてあります。

このマニュアルから分かったことは、こんな感じ。
  •  HP研が収集したデータセットである。
  • 4601通のE-mailについて、スパムか否かを分類した。
    • spamは1813通, nonspamは2788通分である。
  • E-Mail中の単語や文字の出現頻度が示されている57の独立変数と、従属変数で構成されている。
    • 1〜48番目の独立変数は、変数名の出現頻度
    • 49〜54番目の独立変数は、記号文字の出現頻度である。
    • 55〜57番目の独立変数は、大文字の連なりの長さの平均, 最長, 合計を表す。
    • 58番目は従属変数であり、nonspam, spamのどちらかが記載されている。
  • spamは、製品やウェブサイトの広告,楽して儲けられる系のサイト,チェーンメール,アダルトなど。
  • non-spamは、仕事関係や個人のメールが対称。
    • george(データ提供者のご氏名)とかエリアコード650が含まれている単語はnonspamである。 
 
出現頻度と書いてあったので、単なるカウントかな?と思ったのですが、
実際にデータセットを見てみると、数値が小数点が入っていたり、
1以下の数値も出ていたりしました。
だから、単純なカウントではなく、何らかの正規化をかけているように見えます。


次にspamとnonspam別に独立変数別に平均と分散を見てみました。


この結果が以下の通りです。
各列の意味は、次の通りです。
  • spam Avg : spamクラスに該当するデータだけを集めて平均した結果。
  • spam Var : spamクラスに該当するデータだけを集めて分散を求めた結果。
  • nonspam Avg : nonspamクラスに該当するデータだけを集めて平均した結果。
  • nonspam Var : nonspamクラスに該当するデータだけを集めて分散を求めた結果。
  • 偏り: spam Avg / (spam Avg + nonspam Avg) の結果。
    • 0.5よりも小さいほどnonspamに偏って出現しやすい独立変数。
    • 0.5よりも大きいほどspamに偏って出現しやすい独立変数。

spam Avg spam Var nonspam Avg nonspam Var 偏り
make 0.1523 0.0965 0.0735 0.0887 0.6746
address 0.1646 0.1217 0.2445 2.6674 0.4025
all 0.4038 0.2311 0.2006 0.2530 0.6681
num3d 0.1647 4.9243 0.0009 0.0005 0.9946
our 0.5140 0.5001 0.1810 0.3776 0.7395
over 0.1749 0.1036 0.0445 0.0497 0.7970
remove 0.2754 0.3273 0.0094 0.0122 0.9671
internet 0.2081 0.2969 0.0384 0.0611 0.8442
order 0.1701 0.1259 0.0380 0.0394 0.8172
mail 0.3505 0.3986 0.1672 0.4137 0.6771
receive 0.1184 0.0630 0.0217 0.0224 0.8451
will 0.5500 0.4110 0.5363 0.9583 0.5063
people 0.1435 0.1228 0.0617 0.0671 0.6995
report 0.0836 0.1017 0.0424 0.1187 0.6634
addresses 0.1121 0.1499 0.0083 0.0089 0.9309
free 0.5184 1.0265 0.0736 0.3802 0.8757
business 0.2875 0.3922 0.0483 0.0479 0.8560
email 0.3192 0.4437 0.0973 0.1577 0.7664
you 2.2645 2.4551 1.2703 3.2171 0.6406
credit 0.2055 0.6216 0.0076 0.0093 0.9644
your 1.3804 1.5065 0.4387 1.0510 0.7588
font 0.2380 2.0757 0.0452 0.3724 0.8403
num000 0.2471 0.2695 0.0071 0.0046 0.9721
money 0.2129 0.3607 0.0171 0.0738 0.9255
hp 0.0175 0.0258 0.8955 4.2899 0.0191
hpl 0.0092 0.0099 0.4320 1.2216 0.0208
george 0.0015 0.0011 1.2653 18.0844 0.0012
num650 0.0188 0.0928 0.1938 0.4063 0.0884
lab 0.0007 0.0002 0.1628 0.5706 0.0042
labs 0.0060 0.0107 0.1659 0.3272 0.0347
telnet 0.0013 0.0013 0.1060 0.2634 0.0119
num857 0.0005 0.0002 0.0773 0.1757 0.0067
data 0.0146 0.0126 0.1510 0.4946 0.0880
num415 0.0018 0.0013 0.0778 0.1760 0.0223
num857 0.0069 0.0043 0.1695 0.4544 0.0393
technology 0.0295 0.0218 0.1417 0.2484 0.1724
num1999 0.0435 0.0721 0.1977 0.2397 0.1802
parts 0.0047 0.0025 0.0187 0.0786 0.2010
pm 0.0124 0.0080 0.1217 0.3019 0.0927
direct 0.0367 0.0231 0.0831 0.1862 0.3064
cs 0.0001 0.0000 0.0720 0.2133 0.0008
meeting 0.0024 0.0008 0.2168 0.9519 0.0111
original 0.0085 0.0025 0.0706 0.0795 0.1069
project 0.0062 0.0037 0.1266 0.6304 0.0470
re 0.1251 0.1042 0.4158 1.5883 0.2313
edu 0.0147 0.0179 0.2872 1.3292 0.0488
table 0.0012 0.0003 0.0082 0.0094 0.1295
conference 0.0021 0.0007 0.0512 0.1333 0.0394
charSemicolon 0.0206 0.0084 0.0503 0.0920 0.2904
charRoundbracket 0.1090 0.0796 0.1586 0.0679 0.4073
charSquarebracket 0.0082 0.0023 0.0227 0.0182 0.2655
charExclamation 0.5137 0.5538 0.1100 0.6738 0.8237
charDollar 0.1745 0.1299 0.0116 0.0049 0.9374
charHash 0.0789 0.3745 0.0217 0.0595 0.7841
capitalAve 9.5192 2484.6422 2.3773 26.1498 0.8002
capitalLong 104.3933 89571.4926 18.2145 1527.6210 0.8514
capitalTotal 470.6194 680758.9522 161.4709 126549.8115 0.7445


この表の 「偏り」列を見る感じですと、

num3d, remove, addresses, credit, num000, moneyがspamに、
george, lab, num857, cs, project, conference あたりはnonspamに
それぞれ出現しやすい単語?のようです。


逆に、spam, nonspamの両方に出やすいのは、
will, you, addressあたりでしょうか。

これらはクラス分類をするにあたっては
あまり意味をなさない独立変数なのかもしれませんね。


全体的には、多少出現頻度が偏っているんだけど、
必ずしもその独立変数のみではクラス分類できそうもないものばかりで、
クラス分類のし甲斐のあるデータセットになっているように思えました。



 データセットは、あともういくつか調べてみようと思います。