云端大数据实战记录-大数据推荐
前言
? ?? WHY 云:為什么我們需要云,大數據時代我們面對兩個問題,一個是大數據的存儲,一個是大數據的計算。由于數據量過大,在單個終端上運行效率過差,所以人們用云來解決這兩個問題。
? ? ?WHAT IS 云:云得益于分布式計算的思想。舉個簡單的例子,執行一千萬個數據每個數據都乘以10并輸出,在個人pc上需要大概20分鐘。如果是100臺電腦做這個工作,可能只用幾十秒就可以完成。云就是我們將復雜的工作通過一定的算法分配給云端的n個服務器,這樣可以大大提高運算效率。
? ? How 云:云的實現也就是分步式計算的過程。分布式的思想起源于MapReduce,是google最先發表的一篇論文中提到的,現在很多的分布式計算方法都是從中演變過來的。大體的思路是,將任務通過map分離——計算——合并——reduce——輸出。
? ? 云的價值不光是存儲數據,更是用來分析和處理數據,得益于云,更多的算法可以快捷的實現,所以說云計算和大數據倔是不可分割的,可能大家在平時的學習過程中還沒有機會在云端接觸大數據運算,下面就分享一下本人的一次云計算的經歷。
1.背景
? ? 這是博主第一次大數據實戰的經歷,之前都是自己寫一些算法然后測試很小的數量級。這次是真正接觸到TB集的數據,而且完全是在云端處理。下面就把這次的經歷簡單分享一下。?? 首先簡單介紹一下這次比賽的環境吧: 1.云:采用的是阿里云 2.數據:從四月十五號到八月十五號期間,用戶兩千多萬的購買行為(包括時間,購買、收藏、購物車的次數) 3.工具:阿里提供的xlab(里面有很多算法,隨機森林、邏輯回歸、knn等)、odps(也就是sql數據庫)、mapreduce環境(java分布式計算)、udf(主要是提供sql的一些function功能)。 4.目的:預測八月十五號之后的用戶行為。2.工具的簡單說明
? (1)odps ? ? ? 這個主要是sql數據庫的一些簡單操作。sql玩的溜的大神們都可以用sql語句實現很多的算法,當然博主只能用sql合并表、簡單查詢之類的。比如我們實現一個簡單的查詢去重的功能,odps可以通過分布式計算將任務量分不給很多云端服務器,然后快速的執行大數據的查詢工作。差不多三百多萬的數據查詢只用一分鐘就解決的,如果要是離線測試,估計得幾十分鐘,這就是云的魅力。select distinct * from table_name;(2)mapreduce ? ? mapreduce簡稱mr,主要是實現一些復雜的邏輯的時候使用,比如說像是一些算法。我們使用mr實現算法,可以通過配置文件設置一些分布式的規則,然后將jar文件post到云端就實現了云計算。上一張mr的圖片。
3.TRY
? ? ? 因為這次比賽的獎金很高,阿里組織的也很靠譜,所以參賽的隊伍實力都很強的。看眼排行榜就知道了。博主碼農大學(北郵)還在兩百多名徘徊?(1)第一次嘗試-尿布與啤酒的幻想破滅 ? ? ?做推薦系統的應該都知道尿布與啤酒的故事。這是一個協同過濾的問題,很多大的電商網站都是通過icf也就是關于商品的協同過濾來進行推薦的。博主最早也是通過聚類算法,找出了一些志趣相投的人(買相同品牌的商品的人),具體的實現是通過xlab里的聚類算發還有udf實現的。結果是準確率不到百分之一,不知道是我的方法不對還是本來這種數據集不適合用cf。
(2)利用規則 ? ? ?因為博主是金牌買家,所以將心比心,我們可以輕易的得出幾個規則可能準確率比較高。 ? ? ? 規則一:用戶每個月都會購買的商品 ? ? ? 規則二:用戶最后一個月點擊n次的商品 ? ? ? 規則三:用戶購買次數超過k的商品 ? ? ? 利用這些規則推薦,雖然也能取得一個相對不錯的結果,但是想更進一步就要通過算法了。 (3)算法:隨機森林 ? ? ? ?什么是隨機森林,就是用很對決策樹來實現的數據集的分類預測,具體的算法如下。 ? ? ??算法的主要思想就是將數據集按照特征對目標指數的影響由高到低排列。行成一個二叉樹序列,進行分類。現在的問題關鍵就是,當我們有很多特征值時,哪些特征值作為父類寫在二叉樹的上面的節點,哪下寫在下面。我們可以直觀的看出上面的特征值節點應該是對目標指數影響較大的一些特征值。那么如何來比較哪些特征值對目標指數影響較大呢。這里引出一個概念,就是信息熵。
? ? ? ??信息理論的鼻祖之一Claude E. Shannon把信息(熵)定義為離散隨機事件的出現概率。說白了就是信息熵的值越大就表明這個信息集越混亂。
? ? ? ? 信息熵的計算公式,(建議去wiki學習一下)
? ? ? ? 這里我們通過計算目標指數的熵和特征值得熵的差,也就是熵的增益來確定哪些特征值對于目標指數的影響最大。
第一部分-計算熵:函數主要是找出有幾種目標指數,根據他們出現的頻率計算其信息熵。 ?
[python]?view plaincopy第二部分-分割數據?因為要每個特征值都計算相應的信息熵,所以要對數據集分割,將所計算的特征值單獨拿出來。
[python]?view plaincopy第三部分-找出信息熵增益最大的特征值
[python]?view plaincopy4.具體實現
? ? ? ??以上是用python寫的決策樹算法,在比賽中xlab工具已經提供這些底層的算法,主要的工作是要特征值選擇和調試參數。? ?? ? ? ?除了數據集提供的基本的幾個參數以外,主要是通過一些特征間的組合又找出了十個左右的特征。 ? ? ?? ? (1)特征提取 ?
? ? ? ? ? ?我的經驗是在特征組合的時候,如果某個值的區間特別大,我們可以使用log函數來處理。比如說data的數值是1-100,而click的數值是0-3。如果這個時候我們直接提取特征data_click=click/data的話,可能會造成曲線波動比較大。這個時候可以用log函數,data_click=ln(1+data)來提取特征,會使曲線變得更加平滑。 ? ? 特征值得平方是個不錯的選擇。因為y=x+1是一條直線。而如果是,就會變為一條曲線,更容易實現擬合。? ? ?(2)隨機森林參數調試
? ?? ? ? ?主要是設置樹的數量和深度。數量就是使用決策樹的數量,這個一般來講數量較大效果比較好,我是用了100棵。深度是指每棵決策樹的深度,這個特征值如果多就多設置一些。我是有15個特征值,深度設為4。秀一下我的決策樹:5.總結
? ?? ? ? ?推薦一些學習的材料吧。 ? ? ?有一本書叫機器學習與實戰,感覺挺不錯的,自己用代碼實現算法會加深理解。 ? ? ?也可以訪問我的github(github.com/jimenbian,里面有很多算法的實現。 ? ? ?斯坦福的機器學習公開課也非常好。 ? ? ? ?(最后如果您覺得有收獲,請為我投票)/********************************
* 本文來自博客 ?“李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
總結
以上是生活随笔為你收集整理的云端大数据实战记录-大数据推荐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斯坦福机器学习公开课学习笔记(3)—拟合
- 下一篇: github如何make contrib