2010年12月31日 星期五

[Weka] Result

RandomForest: 2.1642
AdaboostM1: 1.8344
Logistic: 2.1132
SimpleLogistic: all 1
SMO: all 1

PCA+RandomForest:2.114
PCA+BayesNet: 1.9256
PCA+Bagging: all 1
PCA+MultiBoostAB: all 1
PCA+RotationForest: 2.0868

RandomTree_D22: 2.0948
Ridor_D22: 1.8836
Ridor_D14: 1.8634

--

java -Xmx4096m -jar weka.jar -cp *.jar

2010年12月30日 星期四

[Weka] Random Forest

try了好久  終於可以用了

Weka 參戰!!

first result


RandomForest: 2.1642

Weka!

上次用自己的程式 不僅改了很久 也try了很久 完全沒進展
結果被小明用Matlab Decision Tree 一下子就被打爆了
一整個超灰心
想到之前SAI用的tool - weka 感覺什麼都有  包山包海
一副就是超威的感覺
因此決定召喚 W.E.K.A !

--

今天靠著Ryan 大力相助  已經可以用它們的程式寫出arff檔
下次就把我們的train 及 test 寫成arff檔
然後就可以展開 Weka 力場

2010年12月28日 星期二

3 Feasible Method

剛在洗澡的時候想到一些方法,先把它們記下來

A. [Training for each Case]
這個想法是最早就有的
想法很簡單   就是針對每筆test data 去看哪幾個dimension 不是 '?'
然後把同樣那些dimension 都有值的每成一種case
每個case 就找相應的dimensions 的training data 下去 train model
最後再把每個人的label 組起來
但當初都用libSVM去跑  不但跑很久
而且幾個迴圈之後Matlab就掛了
現在有了liblinear 跑超快的  因此可能可以試試看

--

用liblinear試過了A的方法
不但沒有進步還更差... 真灰心

--

B. [Fill Value into '?']
這個想法就跟字面上一樣
填的方法目前想到的就是把每個class 每個dimension 取平均
因此一個 '?' 就有4種填法
每筆 data 都用暴力法去try所有可能
然後用最好的model 去做svmpredict
但這個方法可能有點行不通
因為假設一筆 data 平均來說有 140 個 '?' (D = 171)
因此try 一筆就要 4^140 總共要跑 10000 * (4^140)
這應該是天文數字了吧 XD

C. [DCForest]
這個方法就比較講究了
上次聽學長報完paper 有提到用不同的tree 去建 random forest
只要tree 的答對率 > 1/2 理論上random forest 就能work
但前提是每棵tree要盡量 independent
因此我想可能的方法是random 取 2000 筆 train data 建 tree
總共建 100 棵,平均來說每筆data會出現在5棵tree
所以要先試看看這樣train一棵出來  看看結果會不會比All-in-1要來得好
而且現在DCtree除了Binary Search(效果較差)
Full Search 的版本也改進了  因此應該可行
所以會先試這個方法  因為這些東西都是自己implement的 比較有成就感

--

為了建forest 發現好多bug
改了好多東西都改不好...只好放棄
不過小明用了Matlab的 Decision Tree 跑到1.55多
看來自己寫的真的打不贏別人的tool...
So sad...

--
God Bless!

Liblinear

聽小光光說 liblinear 很好用
於是就來try一下
發現跑超快的!!
baseline的就還不錯

model_linear : 1.8654

----

給了weight 之後
雖然每個class 猜的個數都差不多
但效果卻很好

model_lin_w : 1.6892

----

用了 -c 100 效果反而比baseline 糟

model_lin_c100w : 2.2376
model_lin_c10w : 2.0488

----

model_lin_s7w: 1.713
model_lin_s2w: 1.7374

----

model_lin_e1w: 1.6892

2010年12月27日 星期一

DCtree Theta Binary Search

Decision Tree index 要試所有的theta 時間太長
因此寫了一個 Binary Search 的版本
感覺時間短了不少
在所有train data D=3
原來的版本大概要半小時以上
現在不用一分鐘了

DCtree_D3_BS = 2.223
只比原本的差了一點

----

用了全部的dimension 下去跑  '?' = 0
DCtree_D171_BS = 2.0652
雖然連2 都沒破
但至少是自己寫的tool

threshold = 10000, 效果不好
DCtree_D42_BS = 2.187 

DCtree_D3

用hw 的decision tree 去跑了一下
40000筆data 真的要花很多時間
因此就選了那三個都沒'?'的dimension去作測試
train 出來的結果超漂亮的
test -> 1 = 8280, 2=750, 3=799, 4=171
根本就是perfect的結果呀!!!
一整個超興奮的!!

結果submit的成績只有2.2146...

因為tree要跑太久  所以想說改成binary index search 的方法
然後一直有錯...囧>

----

改成theta 取 mid
DCtree_d3_mid = 2.206
看來也沒多好
可見要用很多維去train才有用?!

----

用random perm 取一半 去 train  剩的一半作validation
然後取最好的結果
DCtree_d3_valid = 2.24
結果效果反而更差了
如果train 的sample個數一樣 效果會好一點
但這比全部下去 train 要少了一半 因此效果變差了

2010年12月21日 星期二

1.6598!!

重新算了一次train 跟 test 的scale
總算是比較正常了
然後這裡用的是svm_weight
train 跟 test 都是把 '?' scale 後再轉成 0
這樣好像比把'?' 塞成各class的 mean 要好

model_weight: 1.6598

2010年12月20日 星期一

trying liblinear

liblinear 比較快所以不用每次跑都要等很就

先normalize之後 remove掉沒有用的row

跑出了1.9的成績 還不算太差

試了fscore feature selection 取前100dim 不過效果沒差多少1.892

等等試試看取少一點dim不知道會不會比較好

After Removing col = 106

train data 裡  除了class 3 都是 '?' 其他class 都 = 3
不曉得這行有沒有 training meaning

New Start from now on!! d = top30

用了新的scale
取 f-secore top 30 的dimension
model_top30 = 2.214
比baseline要好一些

WTF, the DAMN mistake I made!!s

scale function (X-mean) / std
我把std 寫成 variance...
這幾天白忙了...

我想接下來應該會有突破性的進展!!

? = 0 C = 10k

把train data 的 '?' 改回填成0
結果效果很差
所以還是填成各class平均值比較好
model_q2zero_c10k : 2.2316
lower than baseline...

2010年12月19日 星期日

4-class Centroid

稍微寫了一下算centroid去分類
結果效果很差 只有 2.2644
比all-1 的baseline還要差

SVM weight

另一個版本的SVM 不過可以給每個instance weight
按照 1:1, 2:10, 3:10, 4:50 這樣的weight

model_weight : 1.834

結果跟copy的效果完全一樣
看來weight 做的事就跟copy一樣

2010年12月18日 星期六

Random Select From 1,2,3,4

model_select_t0c50k : 2.3298

class 1, 2, 3 各random 取1000筆
class 4 全部使用
原本的目的是不要讓它全部都猜1
試出來的結果只有約23%會答 1
但效果整個變差了
因此取random sample 效果會變差

2010年12月17日 星期五

Matlab on Linux...

好不容易花了一整晚終於跑完了
結果pietty的螢幕一整個花掉
想說跑個指令來試試看  就打了 ls
結果linux 的 matlab 只要按了↑
不管你按了多少↓ 都會顯示到上一個指令
所以我就在上一個svmtrain之後加了ls...
然後svmtrain之旅又開始了...

震怒!!
所以我決定換別組參數了
weight_c50k gone...

Map 30k

想說用train_data 比較少 '?' 的 dimension 來trains
threshold 設在 30k (全部總數是40k)
出來的dimension 只剩38
用這38d 去建model 不給任何參數
結果仍然全部都猜1   > <"

取完c  = 10k
model_more30k_c10k :  2.23

Dimension Reduction

今天討論到可以用PCA等方法去Reduce Dimension
可是我算了一下它們的Covariance幾乎都很小
絕對值 > 0.2 的 似乎 < 10 個 dimensions
所以好像沒有去處理這個的必要性

cml9

很好奇這台為什麼幾乎沒人在用
一登進去就看到是@ryan, 原來是ryan那台呀
而且跑svmtrain比其他台快很多
建議在這台上跑

科科

1.6912!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

哈哈  終於突破了 baseline
而且還在第一頁名單  贏我們的其實只有兩組(某組submit好多次...)
Good Job! Happy Friday
原來之前給的test data都給錯了
因為忘了用scale + reduce的
這次的結果是再加參數 C = 10000 =>  model_c10k
Cheers!
結果weighted 那組好像沒有比這組好

model_c10k = 1.6912
model_select = 1.834 (class1, 2, 3 各隨機取1000個 class4 全部 )

2010年12月16日 星期四

Result of Weight Matrix

predict 的 結果仍然大多是 1   (9998/10000)
分數是 2.228
跟baseline一樣 完全沒進步...

---

上面是之前弄錯  test data的
現在重新跑了一次
加上 t 0 h 0 參數
model_copy_t0h0 : 1.7586

可能不要用t0 然後加上 c的參數會更好

Let's Bless on Weight Copy Matrix

今天等了好久時間在train這個 weighted matrix
結果後來才發現設錯了  一整個白忙
不過剛才又train完了
希望這次的結果可以打敗baseline
讓我們來期待吧~
但又怕受傷害  QQ

2010年12月15日 星期三

C = 10000

train 這個要好久
重點是最後還是大部分都猜 1 (9948/10000)
但想說有些終於不是1了 於是就上傳了 一波
score = 2.2316
連全部猜1 的 baseline都打不贏... 囧>

Scale + Remove Dumb Column

試完的結果還是一樣沒有improve
看來真的要分class來 train model

model_scale = all guess '1'

2010年12月14日 星期二

Value of a, b, c, d

剛試了一下全部猜 1, 2, 3, 4
本來想說會拉低平均  結果似乎沒這麼單純

1: 2.228  11140 => a = 4202
2: 2.4104 12052 => b = 329
3: 2.2884 11442 => c = 390
4: 2.2784 11392 => d = 79

用了一下簡單的矩陣運算  解出 a, b, c, d  XD
雖然沒什麼用,但還是可以看一下data 分佈

另外剛才train 的model 似乎不可行
因為太多 '1' 了  train出來的結果全部都回答 '1' ...

Let's FIGHT A WAVE!

今天小明試了一波 ALL-IN-ONE 是 2.228
這個就當作Baseline 吧!