作者:eoda GmbH
編譯:大山、ShanLIU、Harry
昨天在python給你的聖誕帽上意猶未盡的動手黨(點擊查看相關文章),今天的話題依然和聖誕節有關。
前幾天,文摘菌發現了一個Kaggle上的聖誕歌曲數據禮包。這裡有你能想到所有的聖誕歌曲,總計超過5萬首。而Kaggle上的數據科學家用各種方式要把它們玩兒壞了,一起看看有哪些有趣的結論!
又是聖誕節,有沒有被大街小巷的聖誕歌曲洗耳朵?有沒有想過這些聖誕歌曲到底有什麼魔力?他們的歌詞又有什麼共同點?
我們把所有跟聖誕有關的歌曲都打包起來,總計超過5萬首歌曲。在這篇文章裡,文摘菌將首先用樸素貝葉斯對這些歌曲文本進行全面分析,來快速識別出,到底什麼樣的歌曲才能被成為真正意義上的聖誕歌曲。
之後,我們還可以一起看看,kaggle上的數據科學家用這個數據包分析出了的這些有趣的結論:
與聖誕關係最密切的歌詞TOP20;
聖誕歌產量最高的歌手TOP20;
聖誕歌詞中,什麼樣的雙音節詞最受歡迎?
這個數據集取自55000多段歌詞,同時涵蓋了超過55000首歌曲。你能想到的全都有,包括Jinglebell :)如下:這是一個有55000多行和4列的數據框:
我們的目標是對歌曲文本進行全面分析,幫助我們快速識別出聖誕歌曲。為此,我們首先在數據框中添加一個額外的列,給每首歌曲一個「聖誕」或「非聖誕」的標籤,也就是歌詞中包含「Christmas」,「Xmas」或「X-mas」的歌曲將被標記為「聖誕」,不包含的則標成「非聖誕」。
這還只是標籤的初始化,我們之後會將樸素貝葉斯應用於一組訓練集以識別其他聖誕歌曲。但現在,我們將通過一些直觀的描述性方法來探索數據集。看看會得到一些什麼有趣的結果。
清理 & 標記化
首先我們從數據清理和標記化開始~隨後,聖誕歌曲將被選中並被保存為一個變量。
相關性分析
現在我們可以從不同的角度由相關性來分析原始的聖誕歌曲。接下來,我們運用networkD3 html widget將相關性可視化:具有相同總連接數的節點將被賦予相同的顏色,而邊的顏色意味著由兩個節點共享的公共鄰居的數量。而且,一個節點的大小表明它的中心性,中心性由中間性(即通過它的最短路徑的數量)定義。在兩個節點之間的距離是1的最小最大變換減去相關度,這是有意義的,因為直觀來說,相關性越高,兩個節點應該越近。而且,距離越短,邊緣越寬。
請注意,相關性永遠要基於歌詞才行。
單詞之間的相關性
出現超過100次的單詞與至少另一個相關度大於0.55的單詞相關。
歌曲之間的相關性
一首歌曲與其他至少3首相關的歌曲之間的相關性大於0.75-通過這個方法,我們可以檢測到類似或被略微修改的歌曲。
特定的詞之間的相關性
藝術家之間的相關性
詞雲
原始聖誕歌曲的詞雲
樸素貝葉斯是一種流行的監督機器學習算法,它能處理具有大量特徵的分類問題。它是基於一個類,這個類的特徵是被假定獨立分布的,所以從這種意義上說,它是「樸素」的。在我們的例子中,我們想知道,給定一組特徵之後,即文檔中單詞的tf-idf,一首歌曲是否應該被樸素貝葉斯分類為聖誕歌曲。
構造最大似然估計的難點是先驗分布的選擇,即類的概率分布。通常假定它是按類頻率均勻分布或估計的。在我們的例子中,我們使用了先驗分布的多項式分布和均勻分布,這意味著我們在沒有進一步信息的情況下對歌曲的分類是沒有偏見。
我們識別出2965首隱藏的聖誕歌曲,在最初的500首聖誕歌曲中,有2首歌曲被樸素貝葉斯拒絕認定為聖誕歌曲。
因此我們已經成功地識別出一些宗教聖誕歌曲,它們的標題通常不包含「Christmas」或「X-mas」單詞。
數據準備
只有包括隱藏在內的聖誕歌曲的前300項特徵,將被用來計算Rtsne和LDA,否則存儲空間會不足。
LDA是潛在狄利克雷分布,2003年在Blei, Ng, Jordan的論文中被提出。這是一個生成語料庫的概率模型,其中的文檔被表示為關於潛在主題的隨機混合物,一個單獨的文檔通常只有幾個主題,被分配了不可忽視的概率。此外,每個主題的特點是單詞的分布,通常只有一小部分詞被大概率分配給某個主題。變分期望最大化算法或吉布斯抽樣用於參數的統計推斷。
LDA需要固定數量的主題,也就是說,在應用該算法之前,應該先知道主題的數目。然而,有可能通過不同的性能度量來確定主題的最佳數量,比如Nikita,用ldatuning包。
因此,我們將選擇8作為主題的最佳數量。
我們可以使用tidytext包 來檢查每個文檔的主題分布,即對於每個文檔,它屬於從1到8某個主題的概率的總和等於1。
同樣,我們也可以獲得每個主題詞的概率分布,即每個主題產生不同的單詞的概率總和等於1。
每個主題的關鍵詞是:
t-SNE
由van der Maaten和Hinton於2008年開發,t-SNE代表統計隨機鄰域嵌入,這是一種降維技術,用公式表示出捕獲的原始數據點的局部聚類結構。它是非線性的和不確定性的。
下面的計算大約需要30分鐘。
到目前為止,我們只運行了一次迭代的樸素貝葉斯。然而,我們可以為多個迭代重複這個過程,即訓練一個樸素貝葉斯分類器並重新標記所有的假陽性為隱藏聖誕/聖誕,所有的假陰性為隱藏非聖誕/非聖誕,一遍遍重複進行。
首先,我們再次準備數據以避免錯誤。
運行10次迭代。
然後,精度和f1得分開始時單調增長,然後收斂到大約0.95的值,這意味著沒有遺留很多待檢測的「隱藏聖誕歌曲」和「隱藏非聖誕歌曲」。然而,在這個過程中,我們始終相信樸素貝葉斯分類器是100%準確的,這實際上幾乎是不可能的。因此,在每一次迭代中,有一些歌曲被樸素貝葉斯錯誤地分類為「聖誕節」,在訓練集的下一個迭代中用於訓練樸素貝葉斯分類器。有了這個不斷累積的錯誤,我們可能會擔心,隨著迭代次數的增加,結果實際上會更糟。
最後,我們大約有一半的歌曲被歸類為「聖誕節」,而另一半為「不是聖誕節」,這似乎是非常不可信的。這倒是引出了一個問題:是否存在一個最佳的迭代次數?我們不能簡單地手動控制這57650首歌是否被正確分類。所以這仍然是一個有待回答的開放式問題!
之後,我們用這些數據,還分析出了以下這些有趣的結論,基於篇幅的原因,我們直接貼出kaggle上的一些有趣結論,不再在微信推文中po出實現代碼,想親手嘗試的同學,請拉到文末查看kaggle上的代碼和數據傳送門~
與聖誕關係最密切的歌詞TOP20
歌詞正負情感詞雲圖
聖誕歌產量最高的歌手TOP20
積極(positive)歌詞佔比最多的歌手TOP20
聖誕歌詞中,什麼樣的雙音節詞最受歡迎?
上邊的結論有沒有讓你腦洞大開,你有什麼其他的好想法嗎?歡迎在文末分享給我們!或許我們可以一起做點好玩的東西~
最後,祝大家聖誕快樂,平安喜樂~
55000首歌曲傳送門:
https://www.kaggle.com/mousehead/songlyrics
原文連結:
https://blog.eoda.de/2017/12/19/data-wonderland-christmas-songs-from-the-viewpoint-of-a-data-scientist/
大數據文摘編輯部招人啦!!!
地處宇宙之心
和最聰明的腦袋一起玩耍
擇個黃道吉日點擊下方二維碼加入我們~
回復「志願者」加入我們
點擊圖片閱讀
@微信官方給不了的聖誕帽,Python和OpenCV給你(附代碼)