《C++Primer》第十六章:模板与泛型编程

函数模板

  1. 面向对象编程和泛型编程都能处理在编写程序的时候不知道类型的情况。不同之处在于:OOP能处理类型在程序运行之前都未知的情况;而在泛型编程中在编译时就能获知类型了。(因为在编写模板的时候不确定类型,但是在使用模板的时候要给出具体类型。模板是一种“蓝图”,在编译的时候这种蓝图已经可以转化成具体的类或者函数了。)
  2. 当调用函数模板的时候,编译期通常可以通过函数实参来推断模板实参。当编译器实例化一个模板的时候,它使用实际的模板实参代替对应的模板参数来创建出模板的一个新“实例”。
  3. 类型模板参数可以使用typename或者class,前者更直观但是旧的编译器可能不支持。非类型模板参数使用特定的类型名指定,非类型模板参数必须是一个值,而且是常量表达式。
  4. 函数模板可以声明为inline或者constexpr的,就像非模板函数一样。
  5. 编写泛型代码的两个重要原则:一、模板中的函数参数是const的引用。二、函数体中的条件判断仅使用<比较运算。前者除了更快,还保证了函数可以用于不能拷贝的类型。后者降低了函数模板对位置类型的要求。

Read More

【译】Parameter estimation for text analysis

2. Parameter estimation approaches

我们面临两个推论问题,(1)一组分布参数的估算值 θ 能最好的解释一组观察 X 和(2)在已有观测结果 X 的前提下,得到新观测 $\tilde x$ 的概率,即计算 $P(\tilde x|X)$ 。我们将前一个问题称为估计问题,后一个问题称为预测或回归问题。

数据集X可以看作是一个随机变量的独立的、同分布的(i.i.d)序列。参数θ是依赖于你所考虑的分布,对于高斯分布,$\theta={ \mu, \sigma }$。

对于这些数据和参数,贝叶斯统计中普遍存在两个概率函数。它们是贝叶斯规则的一部分,如下:

$$P(\theta|X)=\frac{P(X|\theta) \cdot P(\theta)}{P(X)} \qquad(1)$$

对此定义了相应的术语:

$$posterior=\frac{likelihood \cdot prior}{evidence}\qquad(2)$$

在接下来的段落中,我们将会展示不同的估计方法,从简单的似然最大化开始,然后展示如何通过最大化后验来合并参数的先验信念,最后使用贝叶斯规则来推断一个完整的后验分布。

Read More

【新人赛】工业蒸汽量预测建模算法小结

零、前言

之前分别以个人名义参加过两次比赛,一次是阿里天池的糖尿病预测比赛,还有一次是 DataCastle 的游戏氪金用户预测比赛,这两次比赛成绩都是一般般,而且最后由于组内各种杂事最后不了了之。这次抽出时间打算好好的从头到尾调一次比赛,虽然还是自己一个人单干……考虑到自己前两次的失败经验,我决定先从新人赛下手试试,主要目的是明确比赛项目结构和调参整个的流程积累一下经验。最后截止到10月28日晚上时分数是0.1233,排名是2/398。对这个成绩还算比较满意,虽然人肉调参过程中有不少的运气成分在,但是还是学到了不少东西,后面会详细说明。我参加的是第一赛季,截止时间是2019年1月31日,下个月会回来继续尝试优化模型。

一、题目分析

题目背景是火力发电中,目标是将化学能转变为内能,内能表现在蒸汽上,蒸汽量越大,能量转化效率越高,我们的目标就是预测蒸汽量大小。数据维度是38维特征向量,数据规模是训练集有2889条数据,数据量很小。而且拿到数据之后,检查数据情况,首先就是看数据的分布情况。首先特征向量没有缺失值,然后每个维度的分布范围的数量级都差不多,都在正负10内。然后查看各个特征之间的pearson相关系数。

可以看到有些特征之间两两之间存在较强的线性相关,因此在这里考虑我考虑使用PCA降维,但是实际后面做交叉验证的时候发现效果没有特别好的提升。然后还有就是可以考虑用和目标值的卡方分析做特征选择,但是我考虑尝试一下用Lasso回归看看能不能有去掉的特征,但是最后也没有去掉无用特征。

然后直接用所有目标值的中位数和均值作为baseline试了一下误差是多少,都是0.9左右。

Read More

优化算法小备忘

优化是不只是机器学习中一个基础而重要的步骤,对于这种计算机学科乃至理工科,都是

一、数值计算与优化基础

1.1 溢出

在计算机中,我们通过有限的离散位数来表示无限的连续实数域,这使得这种原因导致的数值误差————即舍入误差,几乎不可能避免。上溢和下溢是一种非常严重的舍入误差。比如机器学习中常见的Softmax函数,其中的除法和指数运算就是经常会出现溢出并导致计算错误的案例,常见的防范措施是对于每个Softmax的$$$w$$$,进行计算$$$w=w-maxw_j$$$。

1.2 病态条件

条件数表征函数相对于输入的微小变化而变化的快慢程度。输入被轻微扰动而迅速改变的函数对于数值计算来说可能是有问题的,因为输入中的舍入误差可能导致输出的巨大变化。
考虑函数 $$$f(x)=A^{-1}x$$$ ,当$$$A$$$可以特征值分解时,其条件数为:

$$max_{i,j} \bigg| \frac{\lambda_i}{\lambda_j}\bigg|$$

Read More

本站总访问量