歌曲分類和流行度預測

1. 項目介紹

? ? ? 本項目從kaggle平臺上下載了數據集,該數據集包含了3萬多首來自Spotify API 的歌曲,共有23個特征。首先對數據集進行預處理,如重復行、缺失值、標準化處理等。再對預處理后的數據進行探索性分析,觀察各變量的分布情況,各變量之間是否存在關系,如線性關系、相關性等。然后根據探索分析的結果,進行歌曲分類和流行度預測。歌曲分類依次用了決策樹分類器、隨機森林分類器、xgboost分類器進行分類,再根據結果比較分析了哪個分類器效果好。歌曲流行度預測選用隨機森林回歸器和梯度提升回歸器對歌曲流行度進行預測,使用sklearn中的Grid Search方法進行最佳超參數組合的搜索,得到最佳模型。最后分析在最佳模型中,各個特征的貢獻率。

2. 數據介紹

該數據集共有32833首歌曲的相關數據信息,共有23個特征,具體如表1。

表格 1 變量特征

變量名

類型

含義

變量名

類型

含義

track_id

object

歌曲id

track_name

object

歌曲名稱

track_artist

object

歌曲家

track_popularity

int64

歌曲人氣

track_album_id

object

專輯id

track_album

_name

object

專輯名稱

track_album

_release_data

object

專輯發行日期

playlist_name

object

播放列表名稱

playlist_id

object

播放列表id

playlist_genre

object

播放列表類型

playlist_subgenre

object

播放列表子流派

danceability

float64

可舞性

energy

float64

強度和活動的感知量度

key

int64

音階

loudness

float64

響度

mode

int64

曲目的模態

speechiness

float64

語音類型

acousticness

float64

聲學

instrumentalness

float64

是否為純音樂

liveness

float64

是否現場

valence

float64

是否積極

tempo

float64

平均節奏時間

duration_ms

int64

曲目時間

共有10個object類型的變量,9個float型變量,4個int型變量。查看該數據集前5行數據,如圖1、圖2。

圖 1數據集前5行數據

圖 2 數據集前5行數據

3. 數據預處理方法

? ? ? 先導入該數據集,再進行相應的數據預處理,然后進行探索性數據分析

3.1 數據預處理

? ? ? 數據預處理的作用是對原始數據進行清洗、轉換和集成,以便于后續的數據分析和建模工作。數據清洗,可以去除數據中的噪聲、異常值和缺失值,以提高數據的質量和準確性。數據標準化,對數據進行標準化處理,以消除不同特征之間的量綱差異,提高數據的可比性和可解釋性。通過數據預處理,可以提高數據的質量和準確性,減少數據分析和建模過程中的誤差和偏差,從而提高數據分析和建模的效果和準確性。

? ? ? 經過查看數據集的前5行,發現只需要處理該數據集是否有重復行、重復值、缺失值,無需進行數據降維、數據轉換等。

3.1.1 處理重復行

? ? ? 首先查看數據集中是否存在重復行,重復行數據增加了數據的冗余,屬于無效數據,應該將其刪除。使用代碼“df.duplicated().sum()”查看,結果如圖3。

圖 3 重復行結果

發現該數據集并沒有重復行,因此無需進行多余的處理。

3.1.2 處理缺失值

? ? ? 缺失值會導致數據不完整,處理缺失值可以提高數據質量;缺失值可能會導致數據分布的偏移,處理缺失值可以減少這種偏差,使數據更符合真實情況;缺失值會影響模型的訓練和預測結果,處理缺失值可以提高模型的性能和準確度;處理缺失值可以通過插補或預測的方式填充缺失值,從而保留數據中的重要信息,避免丟失有價值的數據。處理缺失值時,可以采用直接刪除缺失值、插補缺失值、使用回歸模型預測缺失值、使用聚類方法填充缺失值等方法。

在本項目中先使用代碼“df.isnull().sum()”,檢查該數據集是否有缺失值,結果如圖4。

圖 4 缺失值結果

發現變量“track_name”、“track_artist”、“track_album_name”,均有5個缺失值,使用插補法進行填充缺失值,將缺失值都填充為N/A。結果如圖5

圖? 5 缺失值填充后結果

缺失值插補完成,數據集中已無缺失值。

3.2 數據探索性分析

? ? ? ?雖然數據集已經處理完成了,但是并不清楚各變量的分布情況,及相互之間的關系,先進行一些探索性分析,為后續的分析、建模奠定基礎。

? ? ? ?首先查看變量“playlist_genre”的分布情況,即播放列表中各流派的占比情況,如圖6。

圖 6 播放列表中各流派占比餅狀圖

從餅狀圖結果來看,在播放列表中的各流派的占比情況相差不大,較為均勻。

接著分析在播放列表中的各流派的的人氣情況,如圖7、圖8。

圖 7 各流派人氣情況

圖 8 各流派人氣分布條形圖

從結果來看,各流派的人氣中位數相差不大,其中最受歡迎的是latin流派,相對不受歡迎的是edm流派;其中rock、r&b、pop受歡迎的范圍相對于其他三個流派較廣。

再分析變量'energy'、'danceability'、'valence'在不同的音樂流派中是否有關聯、區別,可以幫助我們發現數據中的模式、離群值和異常值,分析結果如圖9。

圖 9 各流派在不同特征上的關系圖

從結果上可以得出,edm流派的曲目的活力最強,讓人聽了精力充沛;這6種流派的音樂,可舞性較好,都比較適合作為跳舞的背景音樂;edm流派的曲目偏消極一點,其他5種流派的大多數曲目偏中性,少部分既有消極的又有積極的。edm流派的律動性最好。

其次分析數值型變量,分別統計各個變量不同取值的個數,然后繪制圖形觀察其分布狀況,如是否存在有明顯的線性關系。其分析結果如圖10。

圖 10 數值型變量的線性圖

從運行結果來看,這些數值型變量都不存在一元線性關系,但變量danceability、energy、valence、duration存在比較明顯的正態分布。如變量danceability其值主要分布在0.6-0.8,表明該數據集中的曲目,大多都具有可舞性,可舞性是根據音樂元素的組合,如節奏、節奏穩定性、節拍強度和整體規律性等,來描述曲目適合跳舞的程度,即表明大多數曲目節奏、律動較好。

再用小提琴圖來分析不同音樂流派的能量(Energy)的分布情況,得到的結果如圖11。

圖 11 不同音樂流派的energy分布小提琴圖

從結果來看,pop搖滾樂和edm電舞曲往往更有活力,r&b歌曲通常是最沒有活力的,這也驗證了上面的結論edm流派的音樂的可舞性是最強的。

分析不同年份專輯的發行量情況,用條形圖來展示,如圖12。

從結果來看,2013-2019年專輯的發行量,不斷增加,并且在2019年激增,約為2018年的專輯發行量的3倍,但在2020年又顯著下降,猜測2019年可能發生了促進專輯發行的大事件。

然后分析各變量隨年份的變化趨勢,如圖12。

圖 12各變量隨時間的變化趨勢

從結果來看,隨著時間的移動,該數據集中整體的聲學在下降,特別是在1980年后,波動較為平緩;曲目的整體可舞性在上升,音樂的律動性越來越強;歌曲是否為現場的音頻整體變化不大;歌曲中含有口語的占比在1970-2000年顯著增加,整體的波動較大。

然后繪制散點圖,來觀察不同變量之間兩兩之間的關系,結果如圖13。

圖 13 散點圖

從結果來看,發現各特征兩兩之間并無明顯線性關系,所以在后續的類別和流行度預測的模型中無需剔除變量。

最后繪制各特征之間的熱力圖,如圖14所示。

圖 14 各特征之間熱力圖

發現除了loudness與energy,acousticness與energy之間有較強的相關性后,其他變量兩兩之間均無明顯的相關性。因此在后續的建模中,應該考慮loudness與energy,acousticness與energy之間的相關性。弱相關性表明,預測曲目受歡迎程度可能受到當前數據集范圍之外的因素組合的影響。由于 track_populariy 和 duration_ms 之間的相關性為 -0.14,因此較長的歌曲與平均略低的曲目受歡迎程度相關的趨勢較弱。然而,這種關系并不牢固,其他因素可能會影響整體情況。

看起來track_popularity與給定的任何功能都沒有很強的相關性。

隨著歌曲響度的增加,歌曲的能量也可能會增加。相反,如果響度降低,能量更有可能降低。由于 track_populariy 和 duration_ms 之間的相關性為 -0.14,因此較長的歌曲與平均略低的曲目受歡迎程度相關的趨勢較弱。然而,這種關系并不牢固,其他因素可能會影響整體情況。基于-0.15的相關系數,器樂性較高的歌曲與平均曲目受歡迎程度略低的趨勢較弱。但是,這種關系并不牢固,其他因素可能會在決定曲目受歡迎程度方面發揮作用。

4. 構建模型方法

基于前面的探索性分析,我們對該數據集進行歌曲流派的分類和歌曲流行度的預測。

4.1 歌曲流派分類

歌曲流派分類我們分別采用決策樹分類器、隨機森林分類器、xgboost分類器三種機器學習方法進行分類。

4.1.1 決策樹分類器

決策樹分類器是一種基于樹結構的機器學習算法,用于解決分類問題。它通過對數據集進行遞歸分割,構建一個樹形結構的分類模型。

(1)原理:

(a)決策樹的根節點表示整個數據集,每個內部節點表示一個特征,每個葉節點表示一個類別。

(b)決策樹的構建過程是一個遞歸的過程,每次選擇一個最優的特征進行分割,使得分割后的子集中的樣本盡可能屬于同一類別。

(c)決策樹的構建過程會根據特征的不同取值進行分割,直到滿足停止條件,例如達到最大深度、樣本數量小于閾值等。

(2)實現步驟:

(a)選擇一個合適的特征選擇度量指標,例如信息增益、信息增益比、基尼指數等。

(b)根據特征選擇度量指標,選擇最優的特征進行分割。

(c)根據選擇的特征的不同取值,將數據集分割成多個子集。

(d)對每個子集遞歸地重復步驟2和步驟3,直到滿足停止條件。

(e)構建完整的決策樹后,可以使用決策樹進行分類預測。

決策樹分類器的優點包括易于理解和解釋、能夠處理離散和連續特征、能夠處理多類別問題等。然而,決策樹分類器也存在一些缺點,例如容易過擬合、對輸入數據的變化敏感等。因此,在實際應用中,可以通過剪枝、集成學習等方法來改進決策樹分類器的性能。

從前面分析來看,先將該數據集中的數值型變量全部加入到特征工程中,再選出最優特征,然后將數據集按照二八比例分為測試集和訓練集,最后進行調參訓練模型,得到結果如圖15。

圖 15決策樹分類器結果

使用該方法得到的結果并不好,準確度約為0.47。

4.1.2 隨機森林分類器

隨機森林是一種集成學習方法,它通過組合多個決策樹來進行分類或回歸。

(1)原理:

(a)隨機森林由多個決策樹組成,每個決策樹都是獨立訓練的。

(b)每個決策樹的訓練集是通過有放回抽樣(bootstrap)從原始訓練集中抽取的。

(c)在每個節點上,決策樹選擇最佳的特征來進行分割,分割依據可以是信息增益、基尼系數等。

(d)每個決策樹的分割過程會一直進行,直到達到預定的停止條件,例如達到最大深度或節點中的樣本數小于某個閾值。

(e)預測時,隨機森林中的每個決策樹都會進行預測,最終的預測結果是通過投票或取平均值來確定的。

(2)實現步驟:

(a)準備訓練集和測試集。

(b)根據需要設置隨機森林的參數,例如決策樹的數量、最大深度等。

(c)對于每個決策樹:①從訓練集中有放回地抽取樣本,構建決策樹。②在每個節點上選擇最佳的特征進行分割。③重復步驟①和②,直到達到停止條件。

(d)對于每個測試樣本,通過投票或取平均值來確定最終的預測結果。

(e)計算預測結果的準確率或其他評估指標。

4.1.3 xgboost分類器

xgboost(eXtreme Gradient Boosting)是一種基于梯度提升樹的機器學習算法,它在許多數據科學競賽中表現出色。XGBoost結合了梯度提升樹和正則化技術,具有高效性和準確性。

(1)原理如下: (a)初始化模型:將所有樣本的預測值初始化為一個常數,通常為樣本標簽的均值。(b)計算損失函數的梯度和二階導數:根據當前模型的預測值和樣本標簽,計算損失函數的一階導數(梯度)和二階導數。(c)選擇最佳分割點:對每個特征,根據樣本的梯度和二階導數,選擇最佳的分割點,將樣本劃分為左右兩個子節點。(d)計算葉子節點權重:根據樣本的梯度和二階導數,計算每個葉子節點的權重。(e)更新模型:根據葉子節點權重,更新模型的預測值。(f)迭代步驟2-5,直到達到指定的迭代次數或損失函數的收斂條件。

(2)實現步驟如下:(a)準備數據:將數據集劃分為訓練集和測試集,并進行特征工程,如缺失值填充、特征選擇、特征縮放等。(b)初始化模型參數:設置樹的最大深度、學習率、正則化參數等。(c)訓練模型:使用訓練集數據訓練XGBoost分類器,通過迭代優化模型參數,使損失函數最小化。(d)預測結果:使用訓練好的模型對測試集數據進行預測,得到分類結果。(e)評估模型:根據預測結果和真實標簽,計算模型的準確率、精確率、召回率等指標,評估模型的性能。(f)調參優化:根據模型評估結果,調整模型參數,如增加樹的數量、調整學習率、正則化參數等,以提高模型的性能。

通過不斷迭代優化模型參數,XGBoost能夠有效地處理高維稀疏數據,并在許多機器學習任務中取得優秀的性能。

4.2 歌曲流行度預測

選用隨機森林回歸器和梯度提升回歸器對歌曲流行度進行預測,使用sklearn中的Grid Search方法進行最佳超參數組合的搜索。同時根據預測值和真實值之間的平均絕對誤差MAE來選擇出最佳模型。得到最佳梯度提升模型后,再根據此模型獲取個特征在此模型中的貢獻,并繪圖直觀展示,觀察各特征對歌曲流行度的影響程度。

5. 研究結果及分析

5.1 歌曲流派分類

5.1.1 決策樹分類器

用決策樹分類器對該數據集進行分類,得到結果如圖16。

圖 16決策樹分類器結果

從結果來看,使用該方法得到的結果并不好,準確度約為0.47。可能是在特征工程中未考慮到loudness與energy,acousticness與energy之間有一定的相關性。

5.1.2 隨機森林分類器

對該歌曲數據集用隨機森林方法進行分類,先創建一個Random Forest分類器的實例,再通過設置n_estimators參數為300來指定使用300個決策樹進行集成學習,并設置random_state參數為42以確保結果的可重復性。然后使用fit方法將分類器與訓練數據進行擬合,使用predict方法對測試數據進行預測,將預測結果保存在y_pred_rf變量中,最后使用metrics.accuracy_score方法計算分類器的準確率。運行結果如圖17。

圖 17隨機森林分類器結果

該方法的準確效率約為0.87,相較于之前的決策樹分類器的分類準確率明顯提高。

5.1.3 xgboost分類器

先定義xgboost模型的超參數,網格搜索(grid?search)調優?XGBoost?模型的超參數,進行訓練獲得最佳超參數和最佳模型,然后進行預測,并計算出其準確率,得到結果如圖18。

圖 18 xgboost分類器結果

從結果來看,該分類器最大深度為6,樹為200,,準確率已經約為0.92,其分類效果是這三種分類方法中,最好的。

5.2 歌曲流行度預測

用該數據集進行流行度預測,得到的結果如圖19,在該模型中各特征的貢獻情況如圖19。

圖 19 流行度預測結果

圖 20 預測模型中各特征貢獻率

該預測模型的最低平均絕對誤差約為16,效果還是比較好。在該預測模型中,音軌時間、速度和音量是歌曲流行度預測中貢獻率前三,表明這三個特征變量是流行度預測中最重要的影響因素。

完整的數據集和源代碼:

https://download.csdn.net/download/qq_62974479/90439692

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72430.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72430.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72430.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Trae:國內首款AI原生IDE,編程效率大提升

今年一月,在新聞上看到字節跳動面向海外市場推出了一款名為Trae的AI集成開發環境(IDE)。起初,我并未給予過多關注,因為市面上已有不少IDE集成了AI插件,功能也非常全面,而字節跳動自家的MarsCode…

實訓任務1.3 使用eNSP搭建基礎網絡

目錄 1.【實訓目標】 2.【實訓內容】 1.【實訓目標】 1.掌握eNSP仿真軟件的基本操作方法。 2.掌握使用eNSP仿真軟件搭建簡單的端到端網絡的方法。 【實訓環境】 1.硬件環境:每人一臺配置網卡的計算機。 2.軟件環境:華為eNSP仿真軟件。 2.【實訓內…

藍橋杯備賽Day12 動態規劃1基礎

動態規劃 動態規劃基礎 動態規劃將復雜問題分解成很多重疊的子問題,再通過子問題的解得到整個問題的解 分析步驟: 確定狀態:dp[i][j]val,“到第i個為止,xx為j的方案數/最小代價/最大價值” 狀態轉移方程: 確定最終狀態 要求: (1)最優子結構 (2)無后效性…

mac Homebrew安裝、更新失敗

我這邊使用brew安裝git-lfs 一直報這個錯: curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL更新brew update也是報這個錯誤。最后使用使用大佬提供的腳本進行操作: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/mast…

簡易的微信聊天網頁版【項目測試報告】

文章目錄 一、項目背景二、項目簡介登錄功能好友列表頁面好友會話頁面 三、測試工具和環境四、測試計劃測試用例部分人工手動測試截圖web自動化測試測試用例代碼框架配置內容代碼文件(Utils.py)登錄頁面代碼文件(WeChatLogin.py)好…

【開源-鴻蒙土撥鼠大理石系統】鴻蒙 HarmonyOS Next App+微信小程序+云平臺

?本人自己開發的開源項目:土撥鼠充電系統 ?踩坑不易,還希望各位大佬支持一下,在GitHub給我點個 Start ??👍👍 ?GitHub開源項目地址👉:https://github.com/cheinlu/HarmonyOS-groundhog-mar…

如何停止Oracle expdp/impdp job

一、停止 expdp job舉例 1.執行 expdp 命令 $ expdp rui/rui DIRECTORYdmp_dir dumpfilestudyfull_expdp.dmp FULLy logfilestudyfullexpdp.log job_nameexpdp_job2.查看在運行的作業名稱 SQL> select job_name,state from dba_datapump_jobs; JOB_NAME …

深入解析SQL Server高級SQL技巧

SQL Server 是一種功能強大的關系型數據庫管理系統,廣泛應用于各種數據驅動的應用程序中。在開發過程中,掌握一些高級SQL技巧,不僅能提高查詢性能,還能優化開發效率。這篇文章將全面深入地探討SQL Server中的一些高級技巧&#xf…

ES批量查詢

在 Elasticsearch 中,multi_search(也稱為 msearch)是一種允許你在單個請求中執行多個搜索操作的 API。它可以顯著減少網絡開銷,尤其是在需要執行多個查詢時。multi_search 會將多個查詢打包成一個請求發送給 Elasticsearch&#…

安裝 cnpm 出現 Unsupported URL Type “npm:“: npm:string-width@^4.2.0

Unsupported URL Type "npm:": npm:string-width^4.2.0 可能是 node 版本太低了,需要安裝低版本的 cnpm 試試 npm cache clean --force npm config set strict-ssl false npm install -g cnpm --registryhttps://registry.npmmirror.com 改為 npm insta…

計算機基礎面試(數據庫)

1. 事務的ACID特性?如何通過日志保證原子性和持久性? 專業解答: ACID:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Dura…

fastjson1.2.24 CVE-2017-18349 漏洞復現

fastjson1.2.24 CVE-2017-18349 漏洞復現 時間不等人啊/(ㄒoㄒ)/~~ 0. 前置知識 建議直接看參考鏈接 JNDI:Java命名和目錄接口 RMI:遠程方法調用注冊表 LDAP:輕量級目錄訪問協議 CORBA:公共對象請求代理體系結構 1. jndi …

【計算機視覺】手勢識別

手勢識別是計算機視覺領域中的重要方向,通過對攝像機采集的手部相關的圖像序列進行分析處理,進而識別其中的手勢,手勢被識別后用戶就可以通過手勢來控制設備或者與設備交互。完整的手勢識別一般有手的檢測和姿態估計、手部跟蹤和手勢識別等。…

Leetcode 37: 解數獨

Leetcode 37: 解數獨 是經典的回溯算法問題,考察如何利用遞歸和剪枝高效求解數獨問題。這題主要考察對回溯、遞歸、深度優先搜索 (DFS)、剪枝優化等算法思想的掌握。 題目描述 給定一個部分填充的數獨(9 x 9)網格,用一個有效的算…

VSCode 移除EmmyLua插件的紅色波浪線提示

VSCode 中安裝插件EmmyLua,然后打開lua文件的時候,如果lua代碼引用了C#腳本的變量,經常出現 “undefined global variable: UnityEngineEmmyLua(undefined-global)” 的紅色波浪線提示,這個提示看著比較煩人,我們可以通…

【音視頻】視頻基本概念

一、視頻的基本概念 1.1 視頻碼率(kb/s) 視頻碼率是指視頻文件在單位時間內使用的數據流量,也叫碼流率。碼率越大,說明單位時間內取樣率越大,數據流進度也就越高 1.2 視頻幀率(fps) 視頻幀率…

Grafana服務安裝并啟動

Grafana服務安裝并啟動 1、介紹2、下載Grafana3、解壓縮文件4、啟動Grafana服務5、增加數據源,填寫Prometheus訪問地址6、增加圖表 1、介紹 Grafana是一個開源的可視化系統監控和警報工具包。 2、下載Grafana 介紹:Grafana是一個開源的可視化系統監控和警報工具包…

如何將hf-mirror.com作為vllm默認的下載源? conda如何移除虛擬環境?conda 如何復制一份虛擬環境?

前言 上回咱說道,如果你沒辦法訪問huggingface.co,則可以把modelscope作為vllm默認的下載源。 但如果你非得用你用不了的huggingface.co呢?那你可以考慮將hf-mirror.com作為vllm默認的下載源。這里,hf-mirror.com和huggingface.co的效果是一樣的。 要將hf-mirror.com設為v…

MySQL零基礎教程14—子查詢

子查詢比較簡單,我們還是通過案例引入。 有時候我們查詢的時候,需要用到的不止一個表的數據,比如下面的場景: 查詢名字叫李曉紅同學的班主任姓名 我們提供三個表的基礎信息如下: 從三張表的結構,我們不難…

基于單片機和Wifi技術的智能臺燈設計

摘要 :本文主要介紹了基于單片機AT89C51和Wifi技術的智能臺燈的硬件和軟件設計。該智能臺燈具有根據當前光線自動調節燈光亮度的功能,還可對用戶使用臺燈時處于非正常的距離和姿態時給予報警提示,用戶可以隨時通過手機app查詢智能臺燈的報警記…