投稿

5月, 2014の投稿を表示しています

私と主成分分析と独立成分分析

データマイニング・ビッグデータなるものが流行っている.
多くの顧客情報や取得したセンサデータやログを対象にして, 何らかの数理的な仕組みを使って有用な知見を導き出すことである.
この「数理的な仕組み」の部分は,学生時代にPRML(Pattern Recognition and Machine Learning)を読んでいたこともあり, 読めばサクッと頭のなかに入ってくる. 特に主成分分析や独立成分分析は面白かったと記憶している.

主成分分析と私 主成分分析は,高次元データを低次元データで表現するために分散が最大になるような軸を見つけ出して整理するといった手法. 固有値固有ベクトルの数理的な問題に落とし込めるエレガントさがあったと記憶している.
学生時代は,グー・チョキ・パーの手の形をした膨大な画像を仕分ける課題が与えられたのが主成分分析と出会ったきっかけだったのだが,その数学的な美しさに感動していた.
数学的に美しいものは実装も容易で,画像のパターン認識くらいであれば,2次元画像をベクトル化して,定式化された式にぶっこんで学習フィルタを設計するだけ. 京大は研究費が結構貰えるありがたい環境だったので,MATLABが必ず与えられていた. MATLABで書くと100行もいかなかったと記憶している. # 今思うとこれがものすごくゆとり脳をつくる元凶だった # C++で最適化するくらいのスピード狂にでもなっていれば優れたソフトウェアエンジニアになれていたと思う.
独立成分分析と私 あれは研究室選びをしていた学部三回生の頃だった. あの頃は不景気だったこともあり,「就職できる」研究室選びを主眼においていた実につまらない学生だった. バイオは就職できないし,機械系はドカタだし...なんて本当に失礼なことを考えていた. そこで出会ったのが音声信号処理の研究室. そこでは二人の話者が同時に喋った音声を分離する,「音源分離」という技術を見せてもらった,これが非常に面白い. 混ざった音声を分ける仕組みがどういうものなのか知りたくて知りたくて震えた. 聞いてみると独立成分分析という理論が使われている模様. 独立なサンプルの平均はガウス分布に近づくといった性質を逆手に取ることで,独立な信号に仕分ける仕組み. # いまだによくわかっていない 「これがあればみんな聖徳太子になれるやん!」なんてこ…

いわゆるIoTの先駆け、SmartThingsが素晴らしすぎる件

イメージ
IoT( = Internet Of Things ) というワードがいつのまにやら現れました。 直訳すると、「モノのインターネット」。 様々な家電製品を家庭内のLANに繋いでコントロールすることを意味します。

最近の家電業界に目を向けてみると全体的に 個々の製品はコモディティ化していて、今後は価格競争になって儲かんねー!って悩んでるように見えます。 多機能路線であったり、お客さんから分からないレベルのちょっとした高機能化程度の進歩にとどまってる。
今後の正しいイノベーションの方向性としては、 パソコン・クルマ・キッチン・冷蔵庫・洗濯機等々、全部をつないでより便利なシステムのトータルコーディネートが求められます。
これからは、白物家電・クルマ・PC等の機器類がいい感じにつながって、 ユーザーが気持ちよく使えるようなものが求められてる。ちょうど下の図のように。


この文脈に沿った会社がKickstarter(= アメリカの有名なクラウドファンディング)で2012年に資金調達に成功した。 その名は SmartThings

動画を見てわかると思いますが、2014年の今はまだ家のインターネット化は進んでいません。
家がインターネットに接続されたら何ができるのか、未来の家電はどう進化するのかをいち早く先取りできるこのデバイス。

セットアップはすごく簡単でだれでもできる3つのステップ。  1. 製品キットを買う  2. スマホアプリをインストールする  3. デバイスの接続設定をする



スマホからiPhone/Androidアプリを経由して家電製品を制御する未来をいち早く体感したい方には是非おすすめ。若干高い気がするけども未来への投資と、技術動向の調査という観点で私は購入する予定です!

シリコンバレーで部屋の照明が再発明されてたことを知る

The lightbulb reinvented LIFX® is a wifi enabled, multi-color, energy efficient LED light bulb that you can control with your smartphone.

シリコンバレーで今度は部屋の照明の再発明が行われてたようです( @2012年 )
LED照明がWiFi経由で屋内LANにつながって、スマホ経由で部屋の照明のON/OFFや色の制御ができちゃうというスグレモノ。

ユースケースとしては、
 - 気分に合わせて好きな色が選べる
 - タイマーをセットして照明を消す
 - SNSからのPUSH通知にあわせてLEDを点滅させてお知らせ
 - 寝るときにタイマーかけてゆっくり照明を暗くする
 - cafeやバーのおしゃれな照明に使う
 - 電気の消し忘れがあったときに外から消す
 - 音楽に合わせて照明を変える
 - スマホなくした時はハードウェアボタンで代替する
なかなかあったら嬉しいものです。

2012年のデバイスだから今の視点で見ると色々と改善点が見えてくる。
そもそも伝送量なんて数ビットなのでWiFiである必要が無い。
WiFiルーターのセットアップもいちいち面倒。

こういう時に選択すべき技術はBluetooth。
一度ペアリングすれば以降はマスタ・スレーブの関係で直接つながるので便利。
部屋の照明は日常的に使うものなので省エネのためBLEで代替すべき。

あと、どうせWiFi使うんだったらコントローラ側はiPhoneに限定するだけじゃなくて、他のデバイスからも制御できるようにしたいところ。
Restful APIを用意するとかしてHTTPで制御できるとかだと嬉しいかも。
本気で商用利用するのであれば、Webサーバー経由での制御ができると楽だし。

Raspberry Pi を買ってみたら幸せになった話。

イメージ
遅ればせながらRaspberry Piを購入しました。これ、コスパ最高!
電子工作もできちゃう小さなLinuxとして使えます。
セットアップが驚くほど簡単で敷居がめっちゃ低いです。
プロトタイピングやらお勉強やら様々な用途で活躍中。

平々凡々なWindowsユーザーから見た、主要なLinux利用パターンのメリット・デメリットをざっくりまとめてみました。

メリット デメリット 仮想環境 他のOSとの共存ができる 高いPCスペックが必要 メモリ割り当て等の設定が難しい デュアルブート ホストOSとしての軽快な動作 ブートローダーの設定が面倒 パーティションの設定が面倒 他のOSとの共存ができない クラウド sshでのログインでお手軽 IaaSベンダのHow to記事が充実 お金がかかる Raspberry Pi セットアップが簡単 電子工作入門が用意 ウェブ上に記事が充実

データビジュアライゼーションのためのd3.js最速入門

イメージ
D3.jsとはなにか?


 D3 = Data Driven Document
 データビジュアライゼーション向けJavascriptライブラリ
 公式サイト: http://d3js.org/
 必要な知識: html, css, javascript, SVG
 できること:
   データのグラフ化
   ヒートマップ
   デンドログラム
   地形図
   (参考) 数字で見るFacebookのIPO




導入方法


1. ライブラリのリンクをして、
    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>

2. 要素を指定(select selectAll)して、値の設定や取得をするだけ

    // text, attr, style, append, remove
    var p = d3.select("body").selectAll("p");
    // method chain
    p.text("Hello from d3!")
        .style("font-size", "28px")
        .style("font-weight", "bold");
    // brief description
    p.text("Hello from d3!")
        .style({
            "font-size" : "28px",
            "font-weight": "bold"
        });
学習メモ

詳しくはdotinstallを参照。
勉強用のソースコードをgithubにもおいておく。
 https://github.com/ks6088ts/d3.js

非同期勉強会に参加してきた

イメージ
先日,C#エンジニア向けの非同期勉強会なるものがあったので参加してきました.
私はC#というよりはC,C++系の人間ですが,非同期処理についてはしょっちゅう実装する機会がありましたので,非同期処理の一般的な話についての知見を深めるために参加しました.
当日の講師の方々はMicrosoft MVPを取られた技術に明るい人ばかりで,すごく豪華な勉強会でした!


以下概要.

2014/05/10 (土) 13:00 - 18:00
非同期勉強会開催 非同期勉強会を開催します! 非同期処理はC#5.0から非常にシンプルな記述で出来るようになりました。ただシンプルに記述できるようになったからと言って簡単に書けるとは限りません。そこで、日本中から集まった豪華エキスパートの方々から半日間非同期の話をみっちり聞きまくる非同期Day、非同期勉強会を開催します。 これから勉強を始めたい方も、現在勉強中の方も、既にバリバリ使っている方も初心者向けから幅広くセッションを行いますので是非参加してくださいー。 スケジュール 12:45 開場
講師時間タイトル/概要プロフィール鈴木 孝明 @xin9le13:00-13:50「.NETにおける非同期処理の歴史」 .NET Frameworkが登場してから12年、非同期処理の記述方法もC#/.NETと共に進化してきました。この進化の歴史を今一度確認し、それぞれの方法をおさらいしてみましょう。社会人になってからプログラミングを始めるも、新人研修の担当が某C# MVPという幸運に恵まれたラッキーボーイ。Hokuriku.NETの中心メンバーとして北陸のIT業界を盛り上げるべく鋭意活動中。最近はSignalRが大好き。Microsoft MVP for Visual C# (2012/07-2014/06)。森理麟@moririring14:00-14:50「C#の高速化入門」 高速化の話をメインに非同期とマルチコアとマルチスレッドについての説明を入れながらゲームプログラマです。C#が好きでスピーカーをしたり、勉強会を開催したりしています。「VSハッカソン倶楽部」の主催です。C#、VS、ハッカソン、自動化、CI、TDD、Unity、リファクタリングが好きです。Microsoft MVP for Visual C#(2013/01-2014/12) 遥佐保(は…

Raspberry Piで遊びつつ技術習得をするまとめ( Node.js, Socket.IO, Samba, カメラモジュール, Dropbox)

イメージ
目的 Raspberry Piで遊びつつ技術習得をする!
買うならRaspberry Pi Type B 512MBの奴が使いやすくていいっすよ。


習得する技術 1. Node.jsでウェブサーバーを立てる
2. Socket.IOでローカルチャットサーバーを立てる
3. Sambaでファイル共有サーバーを立てる
4. カメラモジュールで監視システムを作る
5. デバイスのGPIO制御をブラウザから実行してみる


1. Node.jsでウェブサーバーを立てる

まずはNode.jsのインストール。
下記リンクにある方法でNodeをインストールします。
⇒ 【Node.js】nvmをインストールして設定するまでの方法

【注意】
 - Raspberry Piの貧弱CPUでビルドするので2h近く掛かる
 - nodeの設定をターミナル起動時に毎回読み込む必要があるため、
  以下を参考にして、 .bashrc等に設定スクリプトを入れる。
http://d.hatena.ne.jp/white_chi/20111101/1320097898

インストールできているかは以下で確認。
$ node -v
NodeでのHello worldはこんな感じにサクッと書けます。



2. Socket.IOでローカルチャットサーバーを立てる

以下のコードを実行してSocket.IOをインストール
$ npm install socket.io
環境設定はこれで完了したので、あとはサンプルアプリを実装して動作確認したいところ。
少し知識が必要な部分なので、こちらはdotinstallのSocket.IO入門を参照。
あとはこっちも参考にしましたね。
http://lealog.hateblo.jp/entry/2012/10/04/005326
実装コードはこんな感じ。

<サーバーサイド>

<クライアントサイド>


動作方法の一例としては、raspberry piにsshで入って以下のコマンドで実行でサーバーを立てる
$ node app.js
raspberry piと同一のLANに接続されたPCからブラウザで以下のURLにアクセス http://192.168.11.4:9999/
【注意】
IPアドレスは実行環境に合わせて変更する必要があります。
この辺自動取得しておくべきと…