使用决策树算法识别用户喜欢或不喜欢的歌曲
当我们听音乐时,有时我们倾向于喜欢或不喜欢某些音乐曲目。可能有不同的原因。用户的偏好可能取决于旋律,歌词,歌曲的含义,节奏和流派等。
因此,考虑到上述事实,让我们使用决策树算法识别歌曲的喜欢或不喜欢。
决策树
决策树是监督学习中最受欢迎和最强大的算法之一。与其他监督学习算法不同,决策树可用于分类和回归问题。它是用于机器学习,统计和数据挖掘的预测模型。决策树是树,其中每个节点表示特征(属性),每个链接(分支)表示决策(规则),每个叶象征结果。
使用决策树算法是因为它模仿了人类思维,因此很容易识别数据并使决策树的预测和逻辑清晰易懂。
不需要数据预处理,也不需要任何变量变换,不受异常值的影响。
有不同类型的决策树算法
1. ID3算法(使用熵和信息增益作为指标)
2. C4.5算法(使用增益比作为指标)
3. CART算法(使用基尼指数作为指标)
分类和回归树(CART)算法是一种基于Gini杂质指数作为分裂准则构建决策树的分类算法。基尼指数是衡量随机选择的元素被错误识别的频率的指标。Sklearn支持基尼指数的“基尼”标准,默认情况下; 它需要“Gini”的价值。Scikit-learn使用CART算法的优化版本。
决策树的实现
决策树实现
由于使用了Kaggle网站的数据集Spotify分类数据集(https://www.kaggle.com/geomack/spotifyclassification)。Kaggle是一个预测建模和分析竞赛的平台,统计人员和数据挖掘者在竞争中生成预测和描述公司和用户上传的数据集的最佳模型。
Spotify歌曲属性数据集是包含2017歌曲及其属性的数据集。数据集创建者已从Spotify的API生成数据集。
数据集包含16列:歌曲名称,艺术家姓名,作为标签的目标和13个轨道属性:声学,舞蹈,持续时间,能量,乐器,键,活力,响度,模式,语音,节奏,时间标记,效价,歌曲名称,艺术家姓名和标签作为目标。
决策树的Python代码如下
#Import the necessary python machine learning libraries
import pandas as pd
import numpy as np
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import train_test_split
from matplotlib import pyplot as plt
from sklearn.metrics import accuracy_score
import seaborn as sns
import graphviz
import pydotplus
import io
import imageio
#Import the data set
data=pd.read_csv(‘data.csv’)
#Split the dataset into training set and test set
train,test=train_test_split(data,test_size=0.15)
classifier=DecisionTreeClassifier(min_samples_split=100)
features=[“danceability”,”loudness”,”valence”,”energy”,”instrumentalness”,”acousticness”,”key”,”speechiness”,”duration_ms”,”liveness”,”mode”,”tempo”,”valence”]
#Traing the Model and Test the Model
X_train=train[features]
y_train=train[“target”]
X_test=test[features]
y_test=test[“target”]
#Decision Tree
dt=classifier.fit(X_train,y_train)
#Visualize the decision tree
def show_tree(tree,features,path):
f=io.StringIO()
export_graphviz(tree,out_file=f,feature_names=features)
pydotplus.graph_from_dot_data(f.getvalue()).write_png(path)
img=imageio.imread(path)
plt.rcParams[“figure.figsize”]=(20,20)
plt.imshow(img)
show_tree(dt, features,”Decision_Tree_Spotify_Songs.png”)
y_pred=classifier.predict(X_test)
score=accuracy_score(y_test,y_pred)*100
print(“Accuracy using the Decision Tree”,round(score,2),”%”)
决策树可视化
最后,获得了72.28%的准确度。过度拟合是构建决策树模型的实际问题。该模型存在过度拟合的问题,当算法继续越来越深入以减少训练集错误时会考虑过度拟合,但会导致测试集误差增加。
可以使用两种方法来避免过度拟合:
- 预修剪 - 通过尽早停止来修剪树木。如果分割的测量值小于阈值,则停止进一步分割子树。停止节点成为一片叶子。
- 修剪后 - 在完全成长的树中删除给定树的子集,并用叶节点替换。
决策树是可解释的:可以识别模型使用的过程。并且需要最小的数据准备。根据数据大小,将分割值的最小值用作100。如果最小的分割值是一个较小的值,则生成密集决策树。一般来说,与其他机器学习算法相比,它给出了数据集的预测精度。