机器学习案列:分析B站视频评分的影响因素?

人工智能 机器学习
dreamadmirer
发布时间: 2019-05-06
阅读: 12640

封面.png


大家好,我是电子芯吧客社区的dreamadmirer,前段时间在B站上看到一个视频,是使用机器学习方法分析B站视频评分的影响因素。兴趣使然,我通过视频UP主提供的idea,开始了实现的复现过程。


实验环境:本篇文章的实现代码通过Tensorflow实现,编程语言为Python3,软件平台为Anaconda3 jupyter notebook


相信社区的各位伙伴应该对人工智能、深度学习、机器学习这些名词已经非常耳熟了。这些年来,人工智能的概念越来越热,无论各国学者,还是国家政策,都在提人工智能。似乎各行各业都可能会被人工智能影响,更有甚者,很多职业也会被人工智能所取代。


目前,人工智能的研究核心还是机器学习。那么什么是机器学习?如何使用机器学习来解决一些实际问题?希望阅读完这篇文章能解答一些你的困惑。


AI.jpg


其实,机器学习、深度学习技术就应用在我们身边,现在我们的日常生活已经离不开机器学习的产物了。比如:当你在淘宝点开一个链接浏览了或者购买了某个宝贝,那么它会向你智能推荐一些相关的商品。比如你在今日头条上浏览了某哥网页中包含商品信息,那么京东就会向你智能推荐一些商品,大大刺激了消费。还比如,现在手机都内置AI摄影功能,你只需镜头对向物体,它会自动识别出物体类型并作出针对性优化调教。当然还有很多…….


机器学习大致可分为:监督学习、半监督学习、非监督学习、强化学习;简单解释一下,不作深入讨论。监督学习就是数据集有特征值、有标签,非监督学习就是数据集有特征值、无标签。


神经网络.jpg

目前在计算机视觉和NLP领域非常红火的深度学习也是属于机器学习的一种,对于监督式机器学习两个部分:特征和标签。本文研究的视频评分的影响因素问题也是一个监督学习问题,特征主要包括视频播放量、收藏量、弹幕数,标签就是视频评分;


机器学习包括三个部分:输入、学习模型、输出。用比较通俗的语言解释就是:往学习模型中输入数据集,经过学习算法自学习过程,训练得到模型。将输入的特征与输出标签建立映射关系,通过机器学习算法的训练过后得到的模型,只需要输入特征值(feature)后,可直接得到标签值(label)。


模型展示.PNG


主要步骤包括:1.数据获取及处理 2.数据集处理 3.机器学习模型训练 4.使用模型预测


影响B站视频总体评分的因素主要包括了:播放量、弹幕、收藏、点赞、投币、分享、评论(当然还有差评数,由于官方并未直接公布数值,本文就先不做考虑)。


第一步:数据获取及处理


获取数据有很多种方式:最常用的是网络爬虫(慎重使用,注意网络隐私安全,搞不好被请喝茶),当然也有最安全的方法(也是最笨的方法),就是手动输入数据,手动建立数据集。虽然这样会耗时比较长,但是手动输入也有其独特的好处,它可以省略了数据清洗这个步骤。使用Excel保存视频数据,文件格式:csv

如果你的数据集是爬虫得到的,那么数据处理过程将主要包括:异常值清理、缺失值填补、数据样本平衡分析。

当然本文由于选择的特征值量纲大小不统一,还需要进行归一化处理。

由于各个特征值量纲不一致,比如视频播放量普遍都在10~40万之间,而分享量仅仅在20~1000之间,特征数值差了上百倍。如果不对特征值进行处理,那么会导致梯度爆炸,也就是无法收敛,得到最终结果。

对量纲不一致的特征值处理,通常采用归一化处理,如下公式:

归一化.png

本文中数据集特征(feature)的解释:ID:视频编号;View:视频播放量;favorite:收藏量;like:点赞;coin:投币量;barrage:弹幕数;review:评论数;share:分享;score:视频评分;

如图1所示,就是文中使用数据集的截取部分,具体文件会以附件形式展示。

数据集.png


第二步:数据集处理


一般需要将样本数据集分成独立的三部分训练集(train set)、验证集(validation set)和测试集(test set)。其中训练集用来估计模型,验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。一个典型的划分是训练集占总样本的50%,而其它各占25%,三部分都是从样本中随机抽取。 

顾名思义,训练集就是用来训练算法模型的,而测试集就是用来测试算法模型的。那么我们用什么来评估我们的算法模型是否能有良好的泛化能力,能够适应新的场景呢?


我们可以通过代价函数来评估你的模型。通过测试集来评估你的模型就可以得到泛化误差的评估,这个估值就可以告诉你,你的算法模型是否能良好的处理新的环境数据和处理能力如何?如果训练误差很低,但是相应的泛化误差很高,那么模型就是过拟合了。过拟合就需要正则化、Dropout等方法去解决。过拟合是因为对测试集的泛化误差进行了多次度量,并调整模型和超参数来得到拟合那个测试集的最佳模型。也就是说,你这个算法模型更多是为测试集准备的,因此在新的数据面前往往得不到良好的表现。


为了解决这个问题,我们的做法就是从数据中在分出一个验证集。这样,我们同样适用多个不同的超参数训练多个模型,然后通过验证集,选择最好的模型及其相应的超参数。最后使用测试集进行一遍测试,并得到泛化误差的估值。

为了避免验证集浪费太多的训练数据,我们常用的技术就是交叉验证。即将训练集分成若干个互补的子集,然后每个模型都通过这些子集的不同组合来训练,之后用剩余的子集进行验证。当我们选择了一个模型和超参数之后,在对整个训练集训练一次,最后再用测试集测量泛化误差。

由于本文使用的数据集仅仅才100个,数量较少,所以本文简化操作,仅仅设立训练集和数据集,比例为82


第三步:机器学习模型训练


3.1 理论知识

在机器学习有许多学习模型,监督学习模型,非监督学习模型。本文根据研究的问题只介绍监督学习模型,主要包括了单变量线性回归模型、多变量线性回归模型、逻辑回归模型、支持向量机(SVM)、神经网络模型。

在研究视频评分影响因素问题中,由于该问题中特征数较多,而且逻辑简单,我们选择多变量线性回归模型。该模型简单适用,效果好,具有“小而美”的特点。当然对于更加复杂的问题,可选择其他模型。比如二分类问题,可选择支持向量机或者逻辑回归。还有图像识别问题,可以采用神经网络或者卷积神经网络模型。但必须遵循一个原则,适合的才是最好的,并非是越复杂的模型效果越好。

在数据集获取过程中,我们已经找到了影响评分的各自因素了,主要有:View:视频播放量;favorite:收藏量;like:点赞;coin:投币量;barrage:弹幕数;review:评论数;share:分享;score:视频评分;但是这些影响因素中哪些对评分结果影响最大尼?这就是本文需要探究的问题。

首先,我们先对问题进行线性建模:

Y = w1*X1 + w2*X2+ w3*X3+ w4*X4+ w5*X5+ w6*X6+ w7*X7+ b

(注:Wn:权重、参数;Xn: 特征;Y:标签)

其中w1….w7是各影响因素对视频评分的影响权重,也就是影响程度。权重数值越大,对应的因素说明对最终评分越重要。X1:视频播放量;X2:收藏量;X3:点赞;X4:投币量;X5:弹幕数;X6:评论数;X7:分享;Y:视频评分;

如何评价一个模型优劣程度尼?这就需要代价函数,也称为损失函数,文中使用MSE均方误差损失函数来评价模型,模型对数据集拟合程度越好,说明该模型表现越好。

代价函数值越小,说明该模型越适合。那么如何来求解代价函数的最小值尼?梯度下降是求解函数最小值的算法,数学公式如下图所示。

梯度下降.JPG


3.2代码实现(基于Tensorflow

步骤一:导入程序中将要使用的库文件。

code1.JPG


步骤二:使用pandas库读取数据集csv文件,使用Numpy库对数据进行管理、转换数据格式,由于各个特征值之间量纲不统一,对数据进行归一化处理。最后,通过train_test_split函数划分数据集,由于本文数据集只有100个,所以只设置训练集和数据集,比例为82


code2.JPG


步骤三:定义机器学习模型结构,其中w是权重参数,b为偏置项,x为特征值,y为标签值,pred为模型预测的标签值。


code3.JPG


步骤四:设置一些超参数,包括学习率、迭代次数。此外,还有定义损失函数:MSE均方误差、训练优化器:梯度下降。


code4.JPG


步骤五:使用训练好的模型来预测测试集数据标签值。


code5.JPG

   

步骤六:使用Matplotlib绘制点状图,将实际标签值和模型预测的标签值绘制在图中。


code6.JPG



第四步:使用模型预测标签值 / 结果分析


经过我们之前的步骤,通过数据集的训练模型,得到了合适的模型参数。接下来,我们将使用训练好的模型参数来预测未知数据特征的标签值,也就是通过输入“视频播放量、点赞数、收藏数”等特征,就可以得到视频评分值。


如下图所示,将测试数据集中20个数据输入进模型,得到以下结果(蓝色:模型预测得到标签值。黄色:实际标签值),其中数据集预测结果95%与实际标签值相接近,证实了该模型良好的预测功能。


B_video_2.PNG


使用本文的数据集(附件提供数据集)训练多元线性模型模型后,还可以通过多元线性模型参数得到每个因素对视频评分值的影响程度。


结果如下:


影响因素

view

favorites

like

coin

barrage

review

share

占比

0.37397796

0.233692264

0.086595

0.052091

0.033256

0.165603

0.0547848

注:占比值总和为1

根据结果我们可以分析得到:视频播放量占比37%,在影响因素中占比最大。收藏量影响占比23%,排名第二。然后依次是:评论数、点赞数、分享量、投币数、弹幕数。

通过本次实验可以得到结论:对B站视频评分影响最大是视频播放量和收藏量,所以大力想要支持某位UP主,记得多多收藏!


这就是本文的全部内容,分享了使用机器学习方法分析、解决问题,欢迎大家点赞支持!谢谢你的阅读,总体内容偏基础,适合新手阅读,也欢迎大家指正错误、交流。

相关数据集、代码:分析B站视频评分的影响因素数据集、代码

申明:本文版权归电子芯吧客社区所有,未经允许不得随意转载!


原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

点赞 (7)
dreamadmirer 擅长:消费电子
评论(5)

登录后可评论,请 登录注册

mikeliujia 326天前...
点赞,我大论坛的电工都如此厉害
0   回复
仍人发放人 回复 mikeliujia 324天前...
牛逼啊
0   回复
f1ea83ab068c92f3 324天前...
强悍
0   回复
c09738060d889ce0 323天前...
6
0   回复
db7df0c0f9128bf4 111天前...
大佬,代码下载不了,提示坏了解压
0   回复
相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)