跳转至

所有文章

\(\LaTeX\) 设置字体时指定字体文件目录

问题与需求

在编写多个\(\TeX\)文档时,我们可能会同时导入相同的外部字体文件。

通常的做法是,将字体文件放在与当前文档所在的同级目录。

重复存储多份 font.TTF
$ tree
.
|-- tex_1
|   |-- font.TTF
|   |-- tex_1.pdf
|   `-- tex_1.tex
`-- tex_2
    |-- font.TTF
    |-- tex_2.pdf
    `-- tex_2.tex

这样的做法会使得font.TTF同时存在于tex_1.textex_2.tex两个文档所在的目录下,而同一份字体文件是没有必要存两遍的。我们希望能将font.TTF存在一个公共目录,使得tex_1.textex_2.tex都可以导入其中的字体。

解决方法

普通最小二乘估计的假设条件

  1. 因变量\(Y\)与自变量\(X\)之间是 线性 关系。
  2. 自变量之间 不存在多重共线性 ,即\(\left(X^{\prime} X\right)^{-1}\)存在。
  3. 误差项的 条件均值为\(0\) ,即\(E\left[u \mid X\right]=0\)
  4. 误差项之间 同方差且不相关 ,即\(E\left[u u^{\prime} \mid X\right]=\sigma^2 I_T\)
  5. \(\left(Y_t, X_t\right)\) 独立同分布
  6. 误差项是 正态分布 的。

假设 1-4 可推出:普通最小二乘估计是最小方差线性无偏估计(BLUE)。

假设 1-3 与假设 5 可推出:普通最小二乘估计具有一致性

假设 6 并不影响普通最小二乘估计是最小方差线性无偏估计,它是为了便于在有限样本下对回归系数进行统计检验。

普通最小二乘估计的方差与高斯 - 马尔可夫定理

本文计算了普通最小二乘估计的方差,并证明了高斯 - 马尔可夫定理。

普通最小二乘估计的方差:

\[ \begin{aligned} \operatorname{Var}(\underbrace{\beta^{O L S}}_ {(K+1) \times 1} \mid X)&=\sigma^2 \underbrace{\left(X^{\prime} X\right)^{-1}} _ {(K+1) \times (K+1)} \end{aligned} \]

高斯 - 马尔可夫定理(Gauss-Markov Theorem)

在线性回归模型中,如果线性模型满足高斯马尔可夫假定,则回归系数的最佳线性无偏估计(BLUE, Best Linear Unbiased Estimator)就是普通最小二乘法估计。

线性回归的普通最小二乘估计

ols

本文推导了线性回归的普通最小二乘估计量的矩阵形式,并在一元线性回归的情境下给出了求和形式的表达式。 $$ Y=X \widehat{\beta}+e $$

\[ \beta^{O L S}=\left(X^{\prime} X\right)^{-1} X^{\prime} Y \]

在一元线性回归的情境下:

\[ \beta_1^{O L S} =\frac{\overline{X Y}-\overline{X} * \overline{Y}}{\overline{X^2}-\left(\overline{X}\right)^2} \]
\[ \beta_0^{O L S} =\frac{\overline{X^2} * \overline{Y}-\overline{X} * \overline{X Y}}{\overline{X^2}-\left(\overline{X}\right)^2} \]

Python 实现多列滚动计算——以“更优波动率”为例

对单列数据进行滚动计算,可以使用常规的.rolling()

如果需要对多列数据进行滚动计算,可以考虑下面两种方法:

  1. 引入外部包numpy_ext,使用其中的rollling_apply()方法。
  2. .rolling()中加入参数method='table'

本文以方正金工发表的一篇研报中提出的计算“更优波动率”为例,实现了对多列数据进行滚动计算,并对上述两种方法总结如下:

  1. numpy_ext.rollling_apply()需要引入外部包numpy_ext,该方法接受需要进行滚动计算的多个 Series,并返回计算出的一个数组。
  2. .rolling(method='table')是 Pandas 内置的函数(需要升级到较新的版本),指定method='table'后,就可以对数据框中的多列进行滚动计算,并返回一个数据框。若返回的多列结果相同,我们只需要取出其中一列即可。
  3. .rolling(method='table')使用了engine='numba',计算速度更快。

修改 Jupyter Notebook 的默认 Python 解释器

Conda 可以十分方便地创建虚拟环境,便于在不同的项目中使用不同的 Python 版本、外部包等。今天在创建新的虚拟 Conda 环境后,在 VS Code 中没有找到刚刚创建的 Python 解释器。

解决方案是:

  1. 先按Ctrl+Shift+P,调出Select Interpreter选项,这里应该可以看到最新创建的 Conda 环境;
  2. 再按Ctrl+Shift+P,调出Clear Cache and Reload Window选项,重新加载窗口;
  3. 最后点击右上角的“选择内核”,可以看到刚才创建的环境。

中文技术文档的写作规范

本文转载了阮一峰的《中文技术文档的写作规范》。

本站之前发布的文章有许多并没有遵循这一规范(例如中英文之间应有空格)。在今后的工作和写作中,我会尽量书写规范的文档,提高文章的易读性。

pandas 中的 axis

pandas 中的axis参数代表对数据进行处理时遵循的方向。在单行、单列操作(如drop)时,axis=0axis=1分别代表删除行和删除列。在聚合操作(如求mean)时,axis=0axis=1分别代表求列均值和行均值。

总结

  • axis=0

如果是单行操作,就指的是某一行;

如果是聚合操作,指的是跨行 cross rows。

  • axis=1

如果是单列操作,就指的是某一列;

如果是聚合操作,指的是跨列 cross columns。

基于 XGBoost 的音乐流行度预测与推荐

本文基于音乐平台 Spotify 中的 30 万余条音乐数据与 10 万余条歌手数据,分析并构造了音乐流派、音乐语言等特征,与歌手热度、音乐发行时间等特征共同建模预测音乐流行度,使用 XGBoost 内置的特征重要性计算函数和 SHAP 值评估各特征的重要性及其对预测结果的影响方向与大小,并构建了基于内容余弦相似度的音乐推荐系统。

image-20230108215611641