Bayes Classifier
因為一場面試讓我參加了一場kaggle的比賽,是有關aribnb舉辦的。 了解規則後,就上網去看一下,想說手刻一個簡單的bayes classifier。預測力不是很好,但之前都沒接觸分類法,之後真的要找時間學一下。
原始資料的"age"會除了包含歲數外,也會有西元年的資訊,在我的naive bayes classifier,會把西元年的資訊去除。所以對於事後預測的部分若有含西元年的資訊,會有偏誤的情形。
naive bayes的特色是運算非常快速,缺點是資料的前處理,以及它有個強大的假設,就是變項間彼此獨立。所以遇到變項有相依情形時(e.g. 變項“使用語系”, ”居住地"),就不適合用該方法。但在我們的原始變項中,個人覺得沒有高相關的變項(但也許”language”和使用的瀏覽器會在地域有相關,如東歐或俄羅斯可能常用Yandex etc…)。如果排除獨立性其實也不難,就讓兩個變項多個聯合條件機率進行即可(概念不難,但寫起來好像也很麻煩)。
在我這個模型我建了兩個方法,method="default”是原始的naive bayes,submit之後得到0.85065的分數。另外一個方法是用method="softmax”(都寫在bayesClassifier),softmax基本概念就是將各情形的總和為1的方法(機率的概念),但發現經轉換後效果反而不如原始的naive bayes好。這邊尚待釐清。不過若要精進method="default”預測力也不難,因為我跑randomforest發現importance dection於變項”age”佔有一席之地,所以我應該要把西元的資料撈回training set中,重新建模,應該會得到更佳的預測效果。
另外他們的檢定是Normalized Discounted Cumulative Gain (nDCG),也稍微看了一下背後的檢驗邏輯。雖然比DCG多增加排序的評分權重,但並沒有為排序錯誤進行扣分的動作(照理說應該預測錯誤要給予懲罰),這概念就好比估計參數時用了比較多的參數理當預測力變好,誤差變小,但同樣也是需要有penalty(例如Akaike information criterion (AIC), Bayesian information criterion (BIC))。 例如可以使用Discounted Cumulative Margin Penalty (DCMP),考量排錯位時的懲處。