2016年6月22日 星期三

線性迴歸模型問題


       在線性迴歸模型,發生共線性的問題可能會導致自變數在係數上會有正負號的改變,會造成模型上判斷的錯誤,所以共線性是需要解決的問題之一,要如何知道有共線性問題?遇到共線性問題如何解決?
              對於共線性 可以從Variable inflation factor (VIF)發現,如果VIF5表示有高度共線性的問題,5VIF1則有輕微共線性的問題,有些教材會使用容許度(tolerance)作為判斷依據,而容許度跟VIF的關係為 : 容許度=1/VIF,換言之,容許度≦0.2則有高度共線性的問題。
共線性解決的方式如下 :

1.逐步迴歸法(stepwise regression)
2.差分法 : 將原模型變換為差分模型
3.脊迴歸法(ridge regression)


決策樹(Decision tree)
        決策樹根據使用情況不同時被稱為分類樹或迴歸樹。決策樹的生成是將大量的data按照一定的劃分,逐層分類至不可分或者不需要再分為止,但生成決策樹的分枝太過於繁雜,就需要做到剪枝的動作,將節點(Node)進行刪減,例如 : maxdepth(Tree的深度),透過了剪枝如果還不夠,必須做到minsplit(每個節點最少要幾個data)minsplit愈小決策樹愈複雜,反之,愈簡單。最後一步complexity parameter此法為決定精度的參數,如果將CP設太大決策樹將會失去重要性,CP要怎設法對於不同的data及目的都有影響,正確取值必須自行揣測。以下為決策樹最普遍使用的算法 :
1.C4.5(successor of ID3)
2.CART(Classification and Regression Tree)



隨機森林(randomForest)
        隨機森林是用上述CART的算法建構而成,簡單來說CART就是一棵樹,而隨機森林就是由許多小樹所形成的一座森林,森林的輸出採用多數投票法或是單棵樹輸出結果的平均。其中多數投票法主要用於分類模型;單棵樹輸出結果的平均主要用於回歸模型。
1.首先用N表示原始data數量,用m來表示變數的數量
2.決定一個定值m,此值用來決定一個節點上會使用多少個變量,mM,在分類模型上m的取值建議為√M;在回歸模型上取值建議為M/3
3.Ndata中做簡單隨機抽樣抽取一部分做為train data ,未抽到的data做為test data,來計算錯誤率
4.決定森林中樹的數量(ntree) : 決策樹的數量愈多,錯誤率趨近於穩定,穩定時的數量通常為ntree適合的棵數
5.最後預測錯誤率,根據每個樹投票的結果取票數最高的一個類別,也要提醒目的的不同對於錯誤率的認知或接受上也會有差異。

Online News Popularity

一. 介紹

      現在網路發達,閱讀習慣也跟著在改變,報紙、書籍……等紙筆資料的數量開始下降,網路資料開始抬頭,文章以及知識逐漸被收藏在網路上。新聞訊息也是開始科技化的其中一項,像是Mashable是個國外新聞網站,裏頭包含非常多類型的新聞,而讀者比較愛好於分享哪種類型的新聞?這是我們這份分析的目標。



二.目的

      我們閱讀文章的時候會因會文章標題不夠吸引或其他因素不想閱讀,所以近年出現"懶人包"這個名詞,意思就是濃縮過或精簡過的版本但能讓人馬上看懂。讀者偏愛的類型像是文章長短、影片圖片數、詞語正面與負面運用……我們要在其中的元素中研究出最能抓住讀者的資料,並發展出新聞該如何吸引人、無聊的文章都能變有趣、冗長的文章變成精簡的懶人包。另外,分析完受歡迎文章之後,廣告公司可以在很多則文章中找出受歡迎的新聞做廣告,從中打響知名度且增加新聞網站中的廣告利益。



三.變數介紹

            Data來源自UCIMachine Learning Repository中其中一篇,裏頭大約包含了近4萬筆的資料及56個變數,在這裡我們介紹一些就好詳細資料請點上方連結。


1. timedelta: Days between the article publication and the dataset acquisition (non-predictive與調查時間間格天數 
2. n_tokens_title: Number of words in the title 主題字數
3. n_tokens_content: Number of words in the content 內文字數
4. num_hrefs: Number of links link數量
5. num_imgs: Number of images 圖片數量
6. num_videos: Number of videos 影片數量
7. weekday_is_monday: Was the article published on a Monday? 是否在星期一刊登  yes=1No=0
8. weekday_is_tuesday: Was the article published on a Tuesday? 是否在星期二刊登  yes=1No=0
9. weekday_is_wednesday: Was the article published on a Wednesday? 是否在星期三刊登  yes=1No=0
10. weekday_is_thursday: Was the article published on a Thursday? 是否在星期四刊登  yes=1No=0
11. weekday_is_friday: Was the article published on a Friday? 是否在星期五刊登  yes=1No=0
12. weekday_is_saturday: Was the article published on a Saturday? 是否在星期六刊登  yes=1No=0
13. weekday_is_sunday: Was the article published on a Sunday? 是否在星期日刊登  yes=1No=0
14. shares: Number of shares (target)分享數量

其中7~12這幾項我們有稍作調整,調整為"在星期幾刊登?",禮拜一的話就叫1、禮拜二叫2...以此類推,這樣合併對整體訊息是不變的而且變數越少跑程式會更快,而最後分享數的分類改為二分法,1400以上的分享數設定為高;1399以下的分享數設定為低。而下面開始講我們使用的分類方法。


四.方法


我們使用Random Forest(RF)Support Vector Machine(SVM)LassoAda boostingKNNLinear RegressionLinear Discriminant Analysis(LDA)等方法去做分析與預測。忽略較差的結果,以二分法將分享數分成兩類。以SVM預測的結果如下:training datatesting data大約是31,預測成功的結果67%,計算時間約60秒。而使用RF預測的結果因為電腦計算的記憶體容量並不夠大,因此我們只用了整個data20%traintest的數量約為11tree使用數量為200,二分法預測的結果約為67%,秒數比起SVM快一些,約40秒。雖然我們有時候可以達到甚至超越70%,可是以常態而言,67%才是RF主要的正確率。

Algorithms
Train
Test
Random Forest(tree=200)
67%
67%
SVM(RBF)
69%
67%
LDA
NA
66%
Ada Boosting
NA
66%


五、結論


我們的預測最高只有達到67%,三次預測中就有一次是失敗的,一般而言預測達到80~90%才算是合格。由於也有不少人做這一個相關的題目或是比賽,因此我們查詢了其他相關資料和我們的資料相比對,以下是Kaggle比賽的預測成果(此比賽已結束),他們預測的比我們複雜一些所以最多的正確率才56%,在這看來我們的67%其實是不錯的,因此可能這data給予的資訊太過於稀少,導致預測並不佳。





















六.參考資料

1.K. Fernandes, P. Vinagre and P. Cortez. A Proactive Intelligent Decision Support System for Predicting the Popularity of Online News. Proceedings of the 17th EPIA 2015 - Portuguese Conference on Artificial Intelligence, September, Coimbra, Portugal.
2.Quan Yang and He Ren Predicting and Evaluating the Popularity of Online News

以下圖片為操考資料中第一篇paper的預測結果,他們做出來的結果比我們的預測結果更好,但他們的SVM比我們差,也許他們將TYPE換成我們使用的TPYE會更加完美。RF的話語我們的結果差不多,有點小差別可能是在選變數的整理過程中有所不同造成些許的差異。