正在加载

请稍等

第一次加载可能稍慢

股市新闻重要性学习与检测

Author: ljc Time: 2026/06/09 Tag: 项目 简介 梯度下降

股市新闻重要性学习与检测

本项目基于东方财富网新闻数据,通过历史新闻重要性学习,自动推荐重要新闻。

以下是本项目的设计过程。

数据量化

获取东方财富网新闻数据,与六六说财经重要新闻推荐数据,并在此基础上处理清洗数据。共 30000 个普通新闻与 1500 个重要新闻被筛选而出。

具体地,笔者将重要新闻的数据与普通新闻进行对应,考虑到可能有某些时段六六说并未选取新闻,只将重要新闻时间点前后 100 个普通新闻保留。

另外,笔者将一部分不影响重要性但出现频率很高的词语加入了黑名单。

数据可视化

将数据统计与新闻展示用一个网页呈现。

该网站基于 python flask

计算算法

TF-IDF

TF-IDF_百度百科

TF-IDF = 词频 (TF) × 逆文档频率 (IDF)

其中,TF 用于衡量该词在该文段中的频率,计算方法为:

$$ \text{TF}(\text{词},\text{文本}) = \frac{\text{该词在当前文本出现的次数}*\text{该词长度}}{\text{文本长度}} $$

IDF 用于衡量该词在所有新闻中的普遍程度,计算方法为:

$$ \text{IDF}(\text{词}) = \ln(\frac{\text{总新闻数}}{\text{包含该词的新闻数}+1}) $$

逻辑回归

线性加权

对所有特征进行线性加权求和,对于某一个新闻,具体公式如下:

$$ z = w_1 x_1+w_2 x_2+\dots +w_n x_n+b $$

参数解释: 1. $x_1,x_2,\dots,x_n$:一条新闻对应的 TF-IDF 特征。 2. $w_1,w_2,\dots,w_n$:学习权重,表示该词的重要性: - $w_i>0$:这个词出现,新闻更重要; - $w_i<0$:这个词出现,新闻更不重要。 3. $b$:偏置项,常数项,用来微调整体基准值。 4. $z$:线性加权后的总分。

Sigmoid 激活函数

使用 Sigmoid 激活函数,将线性加权后的结果压缩到 $[0,1]$ 之间,对于一个新闻,公式如下:

$$ \hat{y}=\sigma(z) = \frac{1}{1+e^{-z}} $$

损失函数

量化预测值与真实标签的误差,整体损失:

$$ L(\textbf{w},b) = -\frac{1}{N}\sum_{i=1}^{N}{[y_i \ln{\hat{y_i}}+(1-y_i)\ln(1-\hat{y_i})]} $$

其中,$N$ 为样本新闻数量,$y_i$ 为第 $i$ 个新闻是否重要($y_i\in{0,1}$)。

偏导数的推导

使用导数中的链式法则计算出损失函数的梯度 $\nabla L$,用于梯度下降的计算。

其中 $l_i = y_i \ln{\hat{y_i}}+(1-y_i)\ln(1-\hat{y_i})$;$f_{i,j}=\text{TF-IDF}$

$$ \begin{align} \frac{\partial l_i}{\partial \hat{y_i}} &=\frac{\partial}{\partial \hat{y_i}}\left[y_i \ln{\hat{y_i}}+(1-y_i)\ln(1-\hat{y_i})\right]\ &=y_i\frac{\partial}{\partial \hat{y_i}}\ln{\hat{y_i}}-(1-y_i)\frac{\partial}{\partial \hat{y_i}}\ln(1-\hat{y_i})\ &=\frac{y_i}{\hat{y_i}}-\frac{1-y_i}{1-\hat{y_i}}\ \end{align} $$

$$ \begin{align} \frac{\partial \hat{y_i}}{\partial z_i} &=\frac{\partial}{\partial z_i} \frac{1}{1+e^{-z_i}}\ &=\hat{y_i}(1-\hat{y_i})\ \end{align} $$

$$ \begin{align} \frac{\partial l_i}{\partial z_i} &=\frac{\partial l_i}{\partial \hat{y_i}} \cdot \frac{\partial \hat{y_i}}{\partial z_i}\ &=\left(\frac{y_i}{\hat{y_i}}-\frac{1-y_i}{1-\hat{y_i}}\right)\cdot \hat{y_i}(1-\hat{y_i})\ &=y_i-\hat{y_i}\ \end{align} $$

$$ \frac{\partial z_i}{\partial w_j} = f_{i,j} $$

最终导数结果:

$$ \frac{\partial L}{\partial w_j} = \frac{1}{N}\sum_{i=1}^N \big(\hat{y}i - y_i\big) \cdot f $$

$$ \frac{\partial L}{\partial b} = \frac{1}{N}\sum_{i=1}^N \big(\hat{y}_i - y_i\big) $$

梯度下降

设学习率为 $\eta$,梯度下降规则:

$$ \text{新参数}=\text{旧参数}−\eta\cdot\text{偏导数} $$

权重 $w_j$ 更新公式:

$$ w_j \leftarrow w_j - \eta \cdot \frac{1}{N}\sum_{i=1}^N \big(\hat{y}i - y_i\big) f $$

权重 $b$ 更新公式:

$$ b \leftarrow b - \eta \cdot \frac{1}{N}\sum_{i=1}^N \big(\hat{y}_i - y_i\big) $$

上线

目前已上线服务器,进入内测阶段,地址:http://106.53.100.188:8100/


声明:本博客由作者原创,转载请标明出处。