2017年9月6日 星期三

[Python] Install lightgbm in MacOS

If you cannot pip install lightgbm, try this:
https://github.com/Microsoft/LightGBM/wiki/Installation-Guide

If you cannot cmake .. to build lightgbm, try this: brew install gcc@7


[Python] Install xgboost in MacOS

By executing pip install xgboost in MacOS, we may get the following error message:
List of candidates:
/private/var/folders/.../xgboost/libxgboost.so /private/var/folders/.../xgboost/../../lib/libxgboost.so /private/var/folders/.../xgboost/./lib/libxgboost.so
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/.../

My solution:
$ brew install gcc@5
$ pip install xgboost

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%,打了好多通好不容易聯絡到沿莉趕緊報平安,然後再把手機弄成飛航模式。三個人在山上發呆許久,話題漸漸圍繞在小腳ㄚ的兩三事,有時候假的消息也可以講得栩栩如生,彷彿真的發生。煮咖啡、煮、煮空虛的香菇湯,還好有沿莉三包調理包,不然吃東西配八卦還是稍嫌冷場。

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


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