Bilibili视频网站排行榜评分的线性回归分析

Bilibili(哔哩哔哩)是当下最热门的视频播放网站,人们在该网站对视频进行浏览,会根据自己喜好对视频进行点赞、投币、收藏、分享、回复等操作,Bilibili同时还有一个排行榜机制,记录了近期比较热门的视频,并给出了一个评分,排行榜的排序规则即根据该评分,本文将根据这些排行榜视频的各项数据,进行线性回归分析,结合实际情况找出对评分影响最大的数据。

Bilibili提供了获取排行榜数据的API,因此我们可以利用该API获取实时的排行榜数据,获取的数据为json格式,经过解析,已将数据保存至Bilibili.csv文件中。

本文的思路即为多元线性回归,在统计学中,线性回归(linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归(multivariable linear regression)。

完成了对各个自变量权重的计算,找出了对评分影响权重最高的因素,并得到了验证。

方程求根的迭代法

迭代法求解方程的根

求解方程的根,即$f(x)=0$的数值解等问题,对于经典的二次方程等函数我们可以直接进行求解,但是对于超越方程我们不能用常规方法进行求解。因此我们可以通过使用计算机实现某些求解算法进行计算。

选取样例

$f(x) =x^3 - x - 2$

$\frac{dy}{dx} = 3x^2-1$

求解$f(x)$在[1, 2]上的零点

迭代法求解线性方程组

求解线性方程组 在线性代数中,有一类经典问题,就是求解线性方程组,我们熟知的解法有高斯消元法,但是高斯消元法属于直接求解的方法,不适合编程计算,因此引入更适合计算机求解的迭代法。 以线性方程组: $ \left[ \begin{matrix} 10 & -1 & -2 \ -1 & 10 & -2 \ -1 & -1 & 5 \end{matrix} \right] x = \left[ \begin{matrix} 7.2 \ 8.3 \ 4.2 \end{matrix} \right] $ 为例 Jacobi迭代法 考虑线性方程组$Ax=b$ 用L和U分别表示严格下三角矩阵和严格上三角矩阵 可以利用迭代公式 $x^{k+1}=D^{-1}(b-(L+U)x^{k}))$ 进行迭代求解,可以通过精度控制迭代次数,还需要控制迭代是否收敛,不然迭代次数再多也无法求解。 迭代法需要给定解列向量的初值,因此初值的选取也很重要。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import numpy as np def Jacobi(A, B, N, x): # Ax=B N为迭代次数 # 获得对角矩阵的数组 D = np.

常微分方程初值问题求解方法

常微分方程初值问题 常微分方程描述了不同变量之间的变化关系,通过该关系我们可以确定变量之间的具体函数关系,但是微分方程不一定总是可解的,并且有些求解起来相当困难。给出积分曲线初始位置的状态,求解需要预测点的状态,为常微分方程的初值问题,我们可以在求解微分方程即的情况下对结果做出复合精度要求的预测。 以$f(x) = \sqrt{1+2x}$为例 有$y’=\frac{dy}{dx}=y-\frac{2x}{y}$ 本文给出几种算法的原理与实现。 Euler方法及其改进 从初始点开始,根据不同离散点的导数值对曲线进行预测,导数值可以通过对ODE的化简求解,做出一条折线图,最终曲线会逼近预测值。 该方法有明显的缺点就是在每一步做出抉择时,只考虑了当前的状态,并没有考虑后面的状态,因此必然会造成较大的误差,因此采用下一个结点的导数值进行修正。 具体流程如下 选取一定的步长h,一般为区间的n等分 预测下一个值$\overline{y}_{i+1} = y_i + hf(x_i, y_i)$ 校正预测值$y_{i+1} = y_i + \frac{h}{2}[f(x_i, y_i)+f(x_{i+1}, \overline{y}_{i+1})]$ 改写成平均化形式 $y_p = y_i +hf(x_i, y_i)$ $y_c = y_i + hf(x_{i+1}, y_p)$ $y_{i+1} = \frac{1}{2} (y_p+y_c), i =0,1,2,3,…,n-1$ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import numpy as np # 常微分方程化简 def ode(x, y): return y - 2 * x / y def f(x): return np.

数值积分方法

数值积分 应用背景:微积分的基本计算公式为经典的牛顿莱布尼茨公式,但是作为计算机来说,计算原函数等操作过于困难,因此需要其他方法进行优化,代替牛顿莱布尼茨公式进行计算,本文将分享两种求积公式及其代码实现。 使用语言: Python-Numpy 使用两种方法计算$f(x)=sin(x)$在[1,2]上的积分 复化梯形的递推公式 由梯形公式改进,将区间[a, b]等分为n个小区间 $[x_i, x_{i+1}]$ $\int_{a}^{b}f(x)dx=\sum_{i=0}^{n-1}\int_{x_i}^{x_{i+1}}f(x)dx\approx \frac{h_i}{2}[f(x_i)+f(x_{i+1})]$ 根据梯形公式化简为区间端点值组合 将求和公式展开,分离出左右端点 得到最终的化简结果 $T_n = \frac{h}{2} [f(a)+2\sum_{i=1}^{n-1}f(x_i)+f(b)]$ 但是该方法的步长太小的话会导致计算次数太大,步长太大又难以保证效率 采用区间不断对分的方法,取$n = 2^k$,反复使用复合求积公式 $T^{(k)}=\frac{1}{2}T^{(k-1)}+\frac{h_{k-1}}{2}\sum_{i=0}^{2^{k-1}-1}f(a+ih_{k-1} + 0.5h_{k-1})$ 其中$h_{k-1} = \frac{b-a}{2^{k-1}}$ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import numpy as np def f(x): return np.sin(x) def Calc(): eps = 1e-7 Flag = True l = 1.

三种插值方法及实现

插值方法 插值属于数值分析领域中的一种方法,是一种通过已知的离散的数据点,来拟合原函数根据给定的自变量估算因变量的方法。 常用的插值方法有很多,本文章给出三种常见的插值方法的实现。 使用语言: Python 使用下面的数据,预测函数在x=1处的值 1 2 x = np.array([0.5, 0.6, 0.4, 0.7]) y = np.array([-0.6931, -0.5108, -0.9163, -0.3567]) 线性插值 线性插值及求一次多项式$p(x)$,满足$p(x_0), p(x_1) = y_1$ 可以根据点斜式方程求解 即 $p(x) =y_0 \frac{y_{1}-y_{0}}{x_1-x_0}(x-x_0)$ 还可以将公式整理成如下形式 $p(x) = y_0 \frac{x - x_1}{x_0 - x_1} + y_1 \frac{x- x_0}{x_1 - x_0}$ 我们令这里的$l_0(x)=\frac{x-x_1}{x_0 - x_1}, l_1(x)=\frac{x-x_0}{x_1-x_0}$ 将其线性组合之后即为 $p(x)=y_0 l_0(x)+y_1 l_1(x)$ 是Lagrange插值的特殊形式 此处给出线性插值的代码实现: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import numpy as np def linear(x, y, x0): ''' x : 为横坐标数组 y : 为纵坐标数组 x0: 为需要预测点的横坐标 res: 预测结果 ''' res = y[1] + (y[1] - y[0])*(x0 - x[1])/(x[1] - x[0]) # 根据公式计算结果 return res x = np.
0%