起因
這個系列主要也是自己最近在研究大資料方向,所以邊研究、開發也邊整理相關的資料。網上的資料經常是碎片式的,如果要完整的看完可能需要同時看好幾篇文章,所以我希望有興趣的人能夠更輕鬆和快速地學習相關的知識。我會盡可能用簡單的方式去簡介一些概念和演算法,盡可能讓沒有工科基礎的人也能大致了解。
ps:由於工作繁忙,更新不定期會發到我的部落格上,大家可以收藏
collaborative filtering recommendations (協同過濾,簡稱cf) 是目前最流行的推薦方法,在研究界和工業界得到大量使用。但是,工業界真正使用的系統一般都不會只有cf推薦演算法,content-based recommendations (基於內容推薦)基本也會是其中的一部分。
基於內容推薦應該算是最早被使用的推薦方法,而且非常常見,可以用於很多地方。
基於內容推薦的過程一般包括以下三步:
item representation:為每個item抽取出一些特徵(也就是item的content了)來表示此item;
profile learning:利用乙個使用者過去喜歡(及不喜歡)的item的特徵資料,來學習出此使用者的喜好特徵(profile);
這種演算法常用於根據使用者的行為歷史資訊,如評價、分享、點讚等行為並將這些行為整合計算出使用者的偏好,再對計算推薦專案與使用者偏好的相似度,將最相似的推薦給使用者。例如在書籍推薦中,可以根據使用者已經看過或者評分的書籍的一些共性(比如作者、分類、標籤)再推薦給使用者相似度高的書籍。
基於內容推薦可以通過兩種方式,乙個是像上面所說通過使用者的行為進行個性化推薦,但是上面的推薦方式很依賴使用者的資料、不利於沒有使用者資料情況下的冷啟動。一般適合商品不多、使用者有特殊興趣的情況。
第二種就是根據事物的相關性,這種方式是通過比較事物之間共有屬性的相似度來進行推薦,例如如果a使用者喜歡dota2,dota2是屬於競技類網遊,那麼a使用者就有可能喜歡英雄聯盟。
這種方式的好處就是可以不依賴使用者的行為,但是要求事物的內容是準確和完善的並且是沒有歧義的,不過也可以通過手動輸入標籤的方式來解決這個問題。
相關演算法
tf-idf對區別文件最有意義的詞語應該是那些在文件中出現頻率高,而在整個文件集合的其他文件中出現頻率少的詞語,所以如果特徵空間座標系取tf詞頻作為測度,就可以體現同類文字的特點。
另外考慮到單詞區別不同類別的能力,tf-idf法認為乙個單詞出現的文字頻數越小,它區別不同類別文字的能力就越大。因此引入了逆文字頻度idf的概念,以tf和idf的乘積作為特徵空間座標系的取值測度,並用它完成對權值tf的調整,調整權值的目的在於突出重要單詞,抑制次要單詞。
有很多不同的數學公式可以用來計算tf-idf。
如果某個詞或短語在一篇文章中出現的頻率tf(詞頻)高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。tfidf實際上是:tf * idf,tf詞頻(term frequency),idf反文件頻率(inverse document frequency)。tf表示詞條在文件d中出現的頻率。idf的主要思想是:如果包含詞條t的文件越少,也就是n越小,idf越大,則說明詞條t具有很好的類別區分能力。如果某一類文件c中包含詞條t的文件數為m,而其它類包含t的文件總數為k,顯然所有包含t的文件數n=m+k,當m大的時候,n也大,按照idf公式得到的idf的值會小,就說明該詞條t類別區分能力不強。
詞頻 (tf) 是一詞語出現的次數除以該檔案的總詞語數。假如一篇檔案的總詞語數是100個,而詞語「母牛」出現了3次,那麼「母牛」一詞在該檔案中的詞頻就是 0.03 (3/100)。乙個計算檔案頻率 (df) 的方法是測定有多少份檔案出現過「母牛」一詞,然後除以檔案集裡包含的檔案總數。所以,如果「母牛」一詞在1,000份檔案出現過,而檔案總數是 10,000,000份的話,其檔案頻率就是 0.0001 (1000/10,000,000)。最後,tf-idf分數就可以由計算詞頻除以檔案頻率而得到。以上面的例子來說,「母牛」一詞在該檔案集的tf- idf分數會是 300 (0.03/0.0001)。這條公式的另乙個形式是將檔案頻率取對數。
向量空間模型是通過進行特徵選擇計算,通過加權公式將文字轉化為數值的一種形式。這樣就可以將向量空間模型通過計算得到相似度。
我們可以將使用者的喜好以文件描述並轉換成向量模型,對商品也是這麼處理,然後再通過計算商品文件和使用者偏好文件的余弦相似度。
有關余弦相似度和tf-idf會在其它講解。
2.rocchoi演算法
rocchio演算法,是一種高效的分類演算法,廣泛地被應用到文字分類,查詢擴充套件等領域。它通過構造原型向量的方法得到最優解。
rocchio演算法應該算是人們思考文字分類問題時最先能想到,也最符合直覺的解決方法。基本的思路是把乙個類別裡的樣本文件各項取個平均值(例如把所有 「體育」類文件中詞彙「籃球」出現的次數取個平均值,再把「裁判」取個平均值,依次做下去),可以得到乙個新的向量,形象的稱之為「質心」,質心就成了這 個類別最具代表性的向量表示。再有新文件需要判斷的時候,比較新文件和質心有多麼相像(八股點說,判斷他們之間的距離)就可以確定新文件屬不屬於這個類。
3.樸素貝葉斯分類演算法
樸素貝葉斯演算法是一種非常簡單的分類演算法,簡單來說就是將要分類的事物出現在各個分類下的概率,哪個概率最大就認定是哪個分類。比如國內喜歡吃麵條的一般是北方人,當然也有南方人喜歡,但是北方人概率更大。
不過樸素貝葉斯分類要求先進行訓練,先準備好訓練用的資料人後由人工進行分類,然後由機器自動根據不同分類下的事物提取特徵並估算不同特徵在不同分類下出現的概率。
最後再由機器將需要分類的資料進行分類。
BABY夜談大資料 計算文字相似度
簡單講解 文字相似度計算在資訊檢索 資料探勘 機器翻譯 文件複製檢測等領域有著廣泛的應用。比如 控制,我們假設你開發了乙個微博 並且已經把世界上罵人的句子都已經收錄進了資料庫,那麼當乙個使用者發微博時會先跟罵人句子的資料庫進行比較,如果符合裡面的句子就不讓使用者發出。通常情況下,很多任務程師就會想到...
基於大資料的精準營銷
在大資料時代到來之前,企業營銷只能利用傳統的營銷資料,包括客戶關係管理系統中的客戶資訊 廣告效果 展覽等一些線下活動的效果。資料的 僅限於消費者某一方面的有限資訊,不能提供充分的提示和線索。網際網路時代帶來了新型別的資料,包括使用 的資料 地理位置的資料 郵件資料 社交 資料等。大資料時代的企業營銷...
大資料資料倉儲要學習的內容
框架版本,伺服器選型,集群規劃 埋點資料 事件日誌 logback hadoop hdfs多目錄,lzo解壓,基準測試 zookeeper 集群日誌生成啟動指令碼,同步修改指令碼,程序檢視指令碼 日誌採集flume etl 分型別 kafka集群 壓力測試,消費flume資料 kafka manag...