2017年9月3日 星期日

[Kaggle] House Prices: Advanced Regression Techniques


Problem: https://www.kaggle.com/c/house-prices-advanced-regression-techniques/leaderboard

參考 https://www.kaggle.com/apapiu/regularized-linear-models,現在算是模仿階段,所以盡量參考別人做法,接下來才有機會談創新,巨人肩膀好用。

Hyperparameters 改良為: preds = 0.85 * lasso_preds + 0.15 * xgb_preds,分數有進步 (0.12086 -> 0.12049),但名次還是很差。




https://www.kaggle.com/serigne/stacked-regressions-top-4-on-leaderboard


改善計畫:

# 移除 outliers: (仔細看題目給的文件)

There are 5 observations that an instructor may wish to remove from the data set before giving it to students (a plot of SALE PRICE versus GR LIV AREA will indicate them quickly). Three of them are true outliers (Partial Sales that likely don’t represent actual market values) and two of them are simply unusual sales (very large houses priced relatively appropriately). I would recommend removing any houses with more than 4000 square feet from the data set (which eliminates these 5 unusual observations) before assigning it to students.

不過文件也說:

A second issue closely related to the intended use of the model, is the handling of outliers and unusual observations. In general, I instruct my students to never throw away data points simply because they do not match a priori expectations (or other data points). I strongly make this point in the situation where data are being analyzed for research purposes that will be shared with a larger audience. Alternatively, if the purpose is to once again create a common use model to estimate a “typical” sale, it is in the modeler’s best interest to remove any observations that do not seem typical (such as foreclosures or family sales).

有點兩難,https://www.kaggle.com/humananalog/xgboost-lasso/code 做法是把所有 GrLivArea > 4000 的濾掉,然後調整 y_pred = 0.4 * y_pred_xgb + 0.6 * y_pred_lasso,分數大有進步,下面仔細研究怎麼做 feature engineering。



# Feature Engineering


然後在另外一台電腦重跑程式,分數會變爛(0.11481)。

# Imputation

# Stacked Regression


2017年8月23日 星期三

[FWD] Data Science Tutorial


https://www.kaggle.com/helgejo/an-interactive-data-science-tutorial



關鍵就是第一步 Business understanding,這讓我想起《怎樣解題》這本書,所以請老婆幫忙買中譯本回來研究。事實上工作也常碰到類似情境,解決問題之前要先了解問題。


例子:https://www.kaggle.com/c/titanic

「目標」是預測怎樣的人可以存活下來,如果有看《鐵達尼號》這部電影,大概會有小孩和女人容易存活的印象,但電影有幾幕拍到年邁的老男人偷偷混到救生艇求生,以 machine learning 的術語就是 outlier,也就是說,leaderboard 上百分百正確預測率不見得是用 machine learning 方法做出來的。

以這份資料來說:https://en.wikipedia.org/wiki/Sinking_of_the_RMS_Titanic,我們知道二等艙的小孩存活率百分之百,這個根據是歷史資料不是亂編的,所以當 test data 滿足以上條件,大概可以說 survived = 1。

以上是歷史統計資料。


如果是歷史乘客資料呢?如果我們知道所有乘客姓名等資料,train/test data 中 Name field 看似沒什麼用途,其實這是最重要的 feature。(當然還有某些用途,例如透過 surname 確定某些家人,假設有爸爸、媽媽、小孩,小孩存活率比較高,而爸爸或媽媽存活率比較低,這就是父母親的愛)

只要把乘客姓名丟到 Google search,前幾名網頁點進去看一下,比對性別年齡等等資訊,幾乎可以確定生還或死亡。不過因為 Google search API 要錢,Bing search API 試用期間不用錢(但沒有 Google 準確),所以先用 Bing 查一遍,不確定的再手動查。以下是細節:

https://github.com/Meng-Gen/KaggleStudy/blob/master/c/titanic/study.ipynb


以上。

完全沒有用到任何 machine learning 的東西。因此 https://www.kaggle.com/c/digit-recognizer/leaderboard 完美預測的結果,或許也是某種 data leak age。


2017年8月15日 星期二

李崠山會師。


第五屆小腳ㄚ會師,也是我的第五屆。

大合照(from 張欽政)


我們彼此靠近,處於登山教育社團之中,我們的邊界彼此接觸、混合,每屆的結束意味著另一屆的開始。以此方式運動相通、影響。彼此登山的相似性決定了絕對領域(登山安全),而絕對領域反過來保證更多的相異性(修行、把妹、美食、看景、抒壓、等等)。


會師最基本的相異性就是路線,路線反應我們彼此不同。

在登山口貝怡幫我們照。


第一屆神代線跟教授、阿來、祺盛、思賢一起走,那個時候是修行。第二屆明棲松生活多了沿莉,遺憾是有隊員受傷,那是不認輸的氣魄。第三屆合歡山溯溪跟沿莉一起溯溪,過程發生很寶的事情沒帶頭燈,那是生活。第四屆加羅神社,沿莉好像腳不舒服的樣子沒有跟來,越來越多人不認識,那是尋幽。第五屆李崠山,沿莉懷孕跟年輕人走總台線,那是抓住青春的尾巴。


有沒有一種很老的感覺(討打)(from 張欽政)


我不斷發表旅遊札記與敘述。但我深信,大家從這些記錄了解的爬山,不過是我自己罷了。


簡單記錄一下。


星期六從龍山寺捷運站出發,順著導航走國道三號到關西,路上買東西碰到萩萍、龍頭、賓賓,接著走奇怪的馬美產業道路到登山口,弄完出發。我很緊張怕走不上去,還好之前有練習,在最熱的天氣從小油坑走到七星山主峰,熟悉熱天氣的感覺,結果沒有太多休息(三次的樣子)就走到李崠山,七星山的坡還比較陡些,看時間差不多正午十二點。

因為上面有禁止露營的紅色牌子,無法大方承認晚上就是在古戰場露營,只好騙陌生山友,我們在山上等人,並沒有要露營。建緯用無線電跟大家聯絡,我本來有帶結果電池膨脹壞掉,等於背了無用的東西上山。貝怡就弄酸酸甜甜的飲料給大家喝,經過介紹才知道貝怡、建緯跟沿莉都是小七,沿莉懷孕很辛苦沒有參加會師,又要求我在記錄給她戲份,那我只好編寫尷尬的橋段進來,總之就是快當爸爸了,緊張。發現很多朋友還沒進入愛情的墳墓,想想也很正常,來參加登山團體的高等類猴生物,或多或少都有硬骨的一面。

山上雖然有古堡大空間,但手機收訊不怎麼好,短短幾分鐘電量掉了10%,打了好多通好不容易聯絡到沿莉趕緊報平安,然後再把手機弄成飛航模式。三個人在山上發呆許久,話題漸漸圍繞在小腳ㄚ的兩三事,有時候假的消息也可以講得栩栩如生,彷彿真的發生。煮咖啡、煮、煮空虛的香菇湯,還好有沿莉三包調理包,不然吃東西配八卦還是稍嫌冷場。

晚上看星星、看流星、看整片白雲把整個星空包圍,吃果子繼續聊八卦。


睡眠品質很好,早起吃完又繼續睡等待大家會師,看到許多老人跟年輕人很開心,雖然重疊部份不多,但還是很有向心力。一個登山團體的本質是什麼?答案應該是爬山吧。

[PKGO] 雷達更新


很久沒寫網誌。


道館雷達:

一班雷達:

目前戰績:
  • Articuno: 4/9 (Caught/Seen)
  • Zapdos: 5/13 (Caught/Seen)
  • Moltres: 5/7 (Caught/Seen)
  • Lugia: 2/4 (Caught/Seen)

2017年5月23日 星期二

《蝦蟆的油》黑澤明尋找黑澤明


(P114)

「全班一起看著我。」

「我滿臉發紅,一時無法動彈。」

「以前的老師,很多都是具有自由精神、個性豐富的人物。」

「比較起來,現在的老師,普通上班族太多。部隊,是官僚式人物太多。」



(P228)

「沒有人比當權豢養的小官僚更可怕。」

「就拿納粹當例證,希特勒當然是狂人,但看看希姆萊、艾希曼即知,愈到組織下層,天才性的狂人愈是輩出。至於集中營的所長和守衛,更是超乎想像的獸人。」



別論:「五年前,當我從中國的飛機下來,離開杜勒斯機場的航站樓時,正準備戴上我準備的五個口罩中的一個,我呼吸到了第一口美國的空氣,立即放下了口罩。這空氣是如此清甜新鮮,有種奇妙的奢侈感,我感到很吃驚。我在中國長大,在我的家鄉,每次出門我都會戴上口罩,否則有可能會生病。但是,在機場外呼吸的那一刻,我感到很自由。」

反應是「自賤者必被人賤。」「一個連自己國家都不愛的人,又怎麼會愛別人?」。

黑澤明說的似乎有些真實,我在 Sunnyvale 發現當地空氣真的很奢侈,藍天烈日也很奢侈,更不用說奢侈的薪資水平及不斷浪費的石油與食物。每個人可以愛自己的國家,但真的不要懷疑,美國就是那麼棒(除了監獄有點過分、除了種族問題有點嚴重、除了食物不夠美味、除了工作壓力大、除了對某些國家不甚友善、除了點點點)。

2017年5月6日 星期六

[word2vec] Fitting Probability Models


Reference Book: Simon J. D. Prince, Computer Vision: Models, Learning, and Inference

Question: How to fit probability models to data {x_i}?

Answer: Learn about the parameters θ of the model.

Methods:
  • maximum likelihood
  • maximum a posteriori
  • Bayesian approach


Maximum likelihood (ML)
  • Likelihood function: 
    • Pr(x_i | θ) at single data point x_i
    • Pr(x_{1...I} | θ) for a set of points 
      • Assume that drawn independently from the distribution
      • Pr(x_{1...I} | θ) = \prod_{i from 1 to I} Pr(x_i | θ)
  • Estimate of the parameter
    • θ^{\hat} = argmax_θ [ Pr(x_{1...I} | θ) ]
  • Example #1: The skip-gram model
    • Reference: https://arxiv.org/pdf/1402.3722v1.pdf
    • Given a corpus of words w and their contexts c 
    • Consider the conditional probabilities Pr(c|w)
    • Goal: Set the parameters θ of Pr(c|w;θ) so as to maximize the corpus probability: 
      • argmax_θ \prod_{w in Text} [ \prod_{c in C(w)} Pr(c|w;θ) ]
      • argmax_θ \prod_{(w, c) in D} Pr(c|w;θ)
    • Model in Pr(c|w;θ):
      • e^{v_c \dot v_w} / \sum_{c' in C} e^{v_c' \dot v_w}
        • v_c, v_w: vector representation for c and w
        • C: all available contexts
    • Estimate: Take log
      • argmax_θ \sum_{(w, c) in D} log Pr(c|w;θ)
      • argmax_θ \sum_{(w, c) in D} (v_c \dot v_w - log(...) )
      • Very expensive to compute due to log(...)
      • Solutions:
        • Hierarchical softmax
        • Negative sampling
    • Negative sampling:
      • Pr( D=1 | w,c;θ ) = σ(v_c \dot v_w), σ: sigmoid
      • Estimate: argmax_θ \sum_{(w, c) in D} log σ(v_c \dot v_w)
      • D': all incorrect random (w, c) pairs
      • Estimate: 
        • argmax_θ \sum_{(w, c) in D} log Pr( D=1 | w,c;θ ) + \sum_{(w, c) in D'} log Pr( D=0 | w,c;θ )
        • argmax_θ \sum_{(w, c) in D} log σ(v_c \dot v_w) + \sum_{(w, c) in D'} log σ(-v_c \dot v_w)
      • Random sampling:
  • Example #2: Bernoulli trial