2012年3月27日 星期二

關於 Hidden Markov Model 的一些整理


  • Markov Property: 如果一個過程(process)的"將來"僅依賴於"現在"而不依賴過去, 則這個過程具有Markov Property, 或稱此過程為馬科夫過程, 即 X(t+1) = f(X(t))
  • Markov Chain: 時間和狀態都離散的馬科夫過程稱為 Markov Chain
  • Hidden Markov Model 與 Markov Model 的差別: 除了 State 之間的 transition, 每個 State 還有自己對於各 Observable symbol 的產生機率
  • "Hidden" of Hidden Markov Model: 在大部分的情況下, 我們無法直接得知真正的"狀態"是什麼, 能夠直接觀測到的往往是一些"表徵", 例如頻率的高低
  • HMM 能夠解決的三個問題
    • (1) 給定一經觀察得到的 sequence 及 model , 評估此序列發生的可能性
      • 即 P(觀察到的現象|模型)     
      • Solution : Forward Algorithm
    • (2) 給定觀察序列以及 model , 找出一個最合理能夠解釋觀察率列的 State 序列    
      • 即 P(狀態序列|觀察到的現象,模型)    
      • Solution : Viterbi Algorithm
    • (3) 經由觀察序列學習出模型的參數    
      • 即 怎樣的 model 可以使 P(觀察到的現象|模型)最大化    
      • Solution : Baum-Welch Algorithm

2012年3月11日 星期日

存取 android market 資料的方法 (二) 第一次爬 Android App Market 就上手 ! Head first crawling Android app market


廢話不多說, 照做以下步驟就可以把整個 market 上的 app 資料都般回家!

開始!


1. 前置準備 

    1.1 一台裝有 Ubuntu 的電腦 

   1.2 並準備好 Ruby on Rails 的環境
          ps. 可參考 http://blog.longwin.com.tw/2008/11/ruby-on-rails-linux-environment-build-2008/ 或網路上任何相關文章 , 此文章是用 Ubuntu 10.04 版

    1.3 安裝 hg
           $sudo add-apt-repository ppa:tortoisehg-ppa/releases
           $sudo add-apt-repository ppa:mercurial-ppa/releases
           $sudo apt-get update
           $sudo apt-get install mercurial python-nautilus tortoisehg

     1.4 下載 source code
           $hg clone https://code.google.com/p/android-marketplace-crawler
           裡頭主要有兩個部分 , 分別是 crawler 以及 server           

2. 準備 crawler 
 
     2.0 安裝 ANT $sudo apt-get install ant
  
     2.1 準備 market-id : 最簡單的方式是在手機上撥打 *#*#8255#*#* 
           會出現如圖畫面 



           請記住紅線部分的字!


     3.1 填入 /crawler/src/com/marketplace/io/Secure.java 中 Secure() , getUsername() , getPassword() 中填妥你的 google 帳號 , 例如 : preferences.put("username_key","你的google帳號");   

     3.2  修改 /crawler/src/com/marketplace/util/Device.java. 中 Device() 的 market id 例如 this.marketId = "你的marketId";

     3.3  修改 /crawler/build.xml 第 38 行
               <fileset dir="/home/你的帳號/android-marketplace-crawler/crawler/bin"/>

     3.3 編譯程式 : $ant          

     3.4 $mv /crawler/permission /path_to_jar_file
           一般情形下 /path_to_jar_file 會在 /crawler/dist/lib 下

4. 準備 server

     4.0 修改 /android-marketplace-crawler/server/Gemfile 如下
           gem 'rake' , '>= 0.9.2' 
           gem 'mysql2', '0.2.18'
           存檔後 , $bundle update
     
    4.1 修改 /config/database.yaml
          增加 socket: /var/run/mysqld/mysqld.sock
          填上 root 之 密碼欄位 
          存檔後 $bundle check,  $bundle install

    4.2 建立資料庫 
          $rake db:create
          $rake db:seed
          $rake db:migrate

    4.3 啟動 Rails server     
          $rails s

5. 開始 crawling! 把資料都搬回家!
    
    切換到剛編譯完的.jar檔所在目錄 
    $java -jar crawler.jar -c


最後, 可以透過瀏覽 http://你的伺服器IP位置:3000 瀏覽目前已經被你爬下來的app資訊!