日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

云端大数据实战记录-大数据推荐

發布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 云端大数据实战记录-大数据推荐 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

? ?? 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
  • def?calcShannonEnt(dataSet):??
  • ????numEntries=len(dataSet)??
  • ??????
  • ????labelCounts={}??
  • ??
  • ????for?featVec?in?dataSet:??
  • ????????currentLabel=featVec[-1]??
  • ?????????
  • ????????if?currentLabel?not?in?labelCounts.keys():??
  • ????????????labelCounts[currentLabel]=0??????????
  • ????????labelCounts[currentLabel]+=1??
  • ????shannonEnt=0.0??
  • ??????
  • ????for?key?in?labelCounts:??
  • ???????????
  • ?????????prob?=float(labelCounts[key])/numEntries??????????
  • ?????????shannonEnt-=prob*math.log(prob,2)??
  • ??
  • ????return?shannonEnt ? ? ? ?? ?
  • 第二部分-分割數據?因為要每個特征值都計算相應的信息熵,所以要對數據集分割,將所計算的特征值單獨拿出來。

    [python]?view plaincopy
  • def?splitDataSet(dataSet,?axis,?value):??
  • ????retDataSet?=?[]??
  • ????for?featVec?in?dataSet:??
  • ????????if?featVec[axis]?==?value:??
  • ????????????reducedFeatVec?=?featVec[:axis]?????#chop?out?axis?used?for?splitting??????????????
  • ????????????reducedFeatVec.extend(featVec[axis+1:])????????
  • ????????????retDataSet.append(reducedFeatVec)????????????
  • ????return?retDataSet??

  • 第三部分-找出信息熵增益最大的特征值

    [python]?view plaincopy
  • def?chooseBestFeatureToSplit(dataSet):??
  • ????numFeatures?=?len(dataSet[0])?-?1??????#the?last?column?is?used?for?the?labels??
  • ????baseEntropy?=?calcShannonEnt(dataSet)??
  • ????bestInfoGain?=?0.0;?bestFeature?=?-1??
  • ????for?i?in?range(numFeatures):????????#iterate?over?all?the?features??
  • ????????featList?=?[example[i]?for?example?in?dataSet]#create?a?list?of?all?the?examples?of?this?feature??
  • ?????????
  • ????????uniqueVals?=?set(featList)???????#get?a?set?of?unique?values??
  • ??????????
  • ????????newEntropy?=?0.0??
  • ????????for?value?in?uniqueVals:??
  • ????????????subDataSet?=?splitDataSet(dataSet,?i,?value)??
  • ????????????prob?=?len(subDataSet)/float(len(dataSet))??
  • ????????????newEntropy?+=?prob?*?calcShannonEnt(subDataSet)???????
  • ????????infoGain?=?baseEntropy?-?newEntropy?????#calculate?the?info?gain;?ie?reduction?in?entropy??
  • ??????????
  • ????????if?(infoGain?>?bestInfoGain):???????#compare?this?to?the?best?gain?so?far??
  • ????????????bestInfoGain?=?infoGain?????????#if?better?than?current?best,?set?to?best??
  • ????????????bestFeature?=?i??
  • ????return?bestFeature??????????????????????#returns?an?integer??
  • 第四部分-建立決策樹 [python]?view plaincopy
  • def?createTree(dataSet,labels):??
  • ????#把所有目標指數放在這個list里??
  • ????classList?=?[example[-1]?for?example?in?dataSet]??
  • ????#下面兩個if是遞歸停止條件,分別是list中都是相同的指標或者指標就剩一個。??
  • ????if?classList.count(classList[0])?==?len(classList):???
  • ????????return?classList[0]??
  • ????if?len(dataSet[0])?==?1:???
  • ????????return?majorityCnt(classList)??
  • ????#獲得信息熵增益最大的特征值??
  • ????bestFeat?=?chooseBestFeatureToSplit(dataSet)??
  • ????bestFeatLabel?=?labels[bestFeat]?????
  • ????#將決策樹存在字典中??
  • ????myTree?=?{bestFeatLabel:{}}??
  • ????#labels刪除當前使用完的特征值的label??
  • ????del(labels[bestFeat])??
  • ????featValues?=?[example[bestFeat]?for?example?in?dataSet]??
  • ????uniqueVals?=?set(featValues)??
  • ????#遞歸輸出決策樹??
  • ????for?value?in?uniqueVals:?????????
  • ????????subLabels?=?labels[:]???????#copy?all?of?labels,?so?trees?don't?mess?up?existing?labels??
  • ?????????
  • ????????myTree[bestFeatLabel][value]?=?createTree(splitDataSet(dataSet,?bestFeat,?value),subLabels)??
  • ????return?myTree??

  • 4.具體實現

    ? ? ? ??以上是用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

    ******************************************/


    總結

    以上是生活随笔為你收集整理的云端大数据实战记录-大数据推荐的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 小柔的淫辱日记(1~7) | 国产成人精品一区二区三区在线观看 | 懂色av蜜臀av粉嫩av分享吧最新章节 | 国产a级精品 | 激情视频免费观看 | 美国黄色一级视频 | 午夜影院在线观看视频 | 国产香蕉视频在线播放 | 色婷婷av777 麻豆传媒网站 | 人人插插 | av片在线看 | 性chinese天美传媒麻 | 亚洲熟伦熟女新五十路熟妇 | 国产一区二区三区中文字幕 | 69视频入口 | 91九色蝌蚪视频 | 天天干精品 | 一级特黄bbbbb免费观看 | 九九热视频在线观看 | 日韩在线免费看 | 国产精品乱码 | 国产真实偷伦视频 | 色悠悠久久综合 | 亚洲av无码国产精品久久久久 | 色婷婷久久久亚洲一区二区三区 | 亚洲自拍偷拍网站 | 老司机精品在线 | 天堂va蜜桃 | 欧美日韩一区二区视频观看 | 日韩深夜视频 | 国产精品一区在线观看你懂的 | 日干夜干| 特大黑人巨交吊性xx | 久久精品中文字幕 | 欧美乱码精品一区二区三区 | 雪花飘电影在线观看免费高清 | 黄色亚洲网站 | 又色又爽又黄无遮挡的免费视频 | 5个黑人躁我一个视频 | 美女被草出水 | 欧美三级久久久 | 中文字幕一区二区三区乱码 | 天天操天天干天天干 | 四虎在线看片 | 一起草最新网址 | 漂亮少妇高潮午夜精品 | 黄色片在哪看 | 性囗交免费视频观看 | 亚洲欧美999 | 不卡视频在线 | 亚洲国产剧情 | 91蝌蚪九色 | 国产成人免费电影 | 日本精品在线一区 | 椎名由奈av一区二区三区 | 91av成人| 蜜桃久久久久久 | 96人xxxxxxxxx69| 窝窝在线视频 | 欧美a级在线免费观看 | 91毛片观看 | 久久久精品小视频 | 中文字幕在线免费观看视频 | 亚洲美女av在线 | 亚洲九九 | av网站黄色 | 91操操操 | 久操免费在线 | 亚洲第一成人在线 | 国产精品一区二区三区免费在线观看 | 欧美精品videos另类 | 91毛片网| 永久av在线免费观看 | 蜜臀久久精品久久久用户群体 | 中文字幕无线码一区 | 亚洲一二三区av | 亚洲天堂麻豆 | 神马伦理影视 | 亚洲天堂美女视频 | 日本韩国欧美一区二区三区 | 欧美三级视频 | 亚洲精品成人无码 | 奇米综合网| a极毛片 | 精品爆乳一区二区三区无码av | 欧美一级片观看 | 北京富婆泄欲对白 | 中文字幕久久熟女蜜桃 | 夫妻性生活黄色片 | 国产精品伦子伦 | 好爽快一点高潮了 | 免费日皮视频 | 亚洲天堂成人在线 | 三级黄色在线播放 | 午夜精品视频 | 国产精品嫩草69影院 | 日韩一区二区三区四区五区六区 | 久草综合在线观看 | 大桥未久恸哭の女教师 |