Blogger 對於非資訊學科的工程師實在不是很好用耶,好多功能需要自己加程式碼在範本裡,像是 程式區塊、Latex 的數學式等等。有時候改一改還怕改爛掉。也因為這些功能不是 Google 自有的,所以不能確定永遠能用(哀哉 WatchMath),就連是 Google 提供的服務也不見得一直能用,更何況是其他的營利公司呢!
最近把想法都放到 Logdwon 裡了,那裡功能比較符合我的需要。Logdown 是一個很新的 Blog 的服務網站。或許就因為是新出來的,許多功能更貼近我現在的需求。像是支援輕量級的標記語法 Markdown、原生支援 Latex 語法(這個我愛死了~)、可以直接編輯表格、甚至拖拉放置圖片等等。這些功能的服務看起來簡單衛生又實用。不知道 Google 是不是擺著 Blogger 自生自爛,明明在 Gmail 已經有拖拉放圖的功能,甚至還可以直接 Ctrl-V 把圖貼入郵件裡,為啥 Blogger 裡就不一起加上這個功能呢?或許 Google 太大了,不屑作這個吧。這樣也好,讓一些新秀高手可以多發揮,世界也可以更進步囉~
Logdown 還有很多新功能,有機會大家可以來看看。
不過這裡還是會寫一些不那麼嚴謹的東西,關於學習或研究的心得之類,畢竟對這裡也有些感情了...
Friday, November 01, 2013
Friday, June 14, 2013
Friday, May 17, 2013
使用 LIBSVM 的 One-Class SVM 來尋找離群值
由於目前研究需要辨識資料樣本的離群值,而最近正好在學習 SVM,就想用 LIBSVM 的 distribution estimation (one-class SVM) 功能來試試看。以下是測試 one-class 的說明與 Matlab 程式碼。
一開始先試做出一個資料集。這個資料集裡有兩種類別,分別是是 x 和 y。這兩種資料均是高斯分佈的隨機變數,各有 200 筆資料。這兩類別的前 100 筆資料都是平均值為 +2,變異數為 1 的高斯亂數。而後 100 筆資料為平均值是 -2,變異數為 1 的高斯亂數。
就這樣囉~(LIBSVM 真的好用!)
一開始先試做出一個資料集。這個資料集裡有兩種類別,分別是是 x 和 y。這兩種資料均是高斯分佈的隨機變數,各有 200 筆資料。這兩類別的前 100 筆資料都是平均值為 +2,變異數為 1 的高斯亂數。而後 100 筆資料為平均值是 -2,變異數為 1 的高斯亂數。
data_x = [ randn( 100, 1 ) + 2; randn( 100, 1 ) - 2 ] ;將這些資料放在一起,並作完均等化(normailized)後就可以得到要訓練模型與測試的事例(instance)。
data_y = [ randn( 100, 1 ) + 2; randn( 100, 1 ) - 2 ] ;
instance = [ data_x, data_y ] ;而這些事例對應到的標示(label)均為 1。
[ norm_instance, min_val, max_val ] = normalize( instance ) ;
label = ones( 200, 1 ) ;之後就可以用 LIBSVM 來建立分類模型。
svm_cmd = '-s 2 -t 2 -n 0.1 -g 12' ;在這裡的參數 "-s 2" 表示要用 one-class SVM,"-t 2" 表示要用 RBF Kernal,而 "-n 0.1" 及 "-g 12" 則是建立模型所需的參數,可以依據實際需求來調整。譬如說,如果期望離群值的數量不超過全部資料數的 10%,就要找一組 n 及 g 使得分類正確率超過 90%。尋找的方法可以用暴力法,全部都試過一次看看。在此先以 n=0.1 及 g=12 來試試看。實驗的結果如下:
model = libsvmtrain64( label, norm_instance, svm_cmd ) ;
[ predicted, accuracy ] = libsvmpredict64( label, norm_instance, model ) ;
optimization finished, #iter = 92下圖的綠點是 SVM 判斷為正常的點 ,紅點為判斷異常的點,藍色的區域則是會判斷為異常的區域。
obj = 38.822651, rho = 4.093761
nSV = 25, nBSV = 16
Accuracy = 90% (180/200) (classification)
就這樣囉~(LIBSVM 真的好用!)
Subscribe to:
Posts (Atom)