0%

在python读取相同数据量不同格式时:
csv占用存储少,读取很慢
pickle占用存储多,读取很快

csv格式使用内存的大小会是存储空间的5倍左右(csv格式还可压缩,最终占用存储大小与占用内存大小差距可能达到50倍)
pickle格式使用的内存大小将与存储空间相当(pd 0.20中,pickle将可以压缩)

FTRL

FTRL是一种在线线性优化技术,类似于FTL,但在目标函数上有所差别。

FTL目标函数:$x_{T+1} = \arg\min_{x \in \mathcal{K}} \sum_{t=1}^T f’_t x$

FTRL目标函数:$x_{T+1} = \arg\min_{x \in \mathcal{K}} \sum_{t=1}^T f’_t x + cR(x)$
$R(x)$表示凸可微正则化项。
若用于分类,可以参考[1]

在线线性优化

在线线性优化(on-line linear optimization)定义为:学习者(玩家)和环境(对手,或现实)之间重复的游戏。
假设$\mathcal{K} \in \mathbb{R}^n$是一个紧凑的闭凸集。
游戏的协议是:
  FOR $t=1,2,\dots,T$
   玩家选择 $x_t \in \mathcal{K}$
   独立的对手选择 $f_t \in \mathbb{R}^n$
   玩家损失函数 $f’_t x_t$, 和观察到的反馈。
  END FOR.

玩家的目标是最小化:

$$
R _ { T } = \sum _ { t = 1 } ^ { T } f _ { t } ^ { \prime } x _ { t } - \min _ { x ^ { * } \in \mathcal { K } } \sum _ { t = 1 } ^ { T } f _ { t } ^ { \prime } x ^ { * }
$$

在完全信息的游戏设定下,玩家可以将$f_t$ 作为反馈,并作为他再次决策的参考。其它的设置是负向作用,玩家观察到只是标量值$f’_t x_t$。不知道“如果我们改变了我们的行动会是什么”,只有反馈。
其实,这样的设置对于各种各样的应用程序都是有用的。
由于这个理论有些缺憾,所以演化出来的FTL(Follow the Leader)算法偶尔被使用,而更多的时候则是使用FTRL(Follow the regularized leader)

FTL

FTL是一个用专家建议预测的算法。它衍生了一些其它算法,如FTRL,一种更有效的算法。
FTL仅仅跟随“到目前为止”最好的专家。
目标函数 $\gamma^T = \arg\min \sum_{t=1}^T \lambda(\omega^t,\gamma^t_k), k=1,\ldots,K$ (可以参考Prediction with expert advice或是其它类似的理论。
可以看出,即使是在平方损失函数的情况下,也不能证明该算法的良好后悔界限。
假设有两种输出${0,1}$,和两个可能的专家。一个总是预测$0$第二个总是预测$1$.在第一步,学习者选择跟随第一个专家,所以他的预测是$0$,然而现实总是可能让你失望,当产出是$1$时,学习者遭受损失$1$,第一个专家遭受损失$1$,第二个专家遭受损失$0$。在第二步中,学习者选择第二个专家,所以他的预测是$1$。实际输出是$0$,所以学习者遭受损失$1$。
(我咋感觉跟我买股票的节奏差不多呢+==+)
就这样, 经过$T$步后,学习者的损失是$T$,专家们的损失是$\dfrac{T}{2}$(只有大约,因为当专家的损失相等时,我们不知道在学习者选择他的决定之前哪个人遭受了非零损失),所以后悔的代价是$\dfrac{T}{2}$。

[1]:Shai Shalev-Shwartz and Yoram Singer. A primal-dual perspective of online learning algorithms. Mach. Learn., 69(2-3):115–142, 2007.

站在前人的肩膀上可以看得更远,但请也别忘了自己该走的路。

本文整理自:原文参考

比较成熟的机器学习经验大概有:

  1. 一个好的交叉验证策略很重要。
  2. 特征工程需要时间,在数据集上添加新特性可能需要花更多时间。
  3. 对稀疏数据来说哈希是必要的,而且从操作性和效率方面来看比独热编码(OHE)表现更好。
  4. 独热编码对于分类特征来说不是最优的。从经验来看,在树足够多的情况下,树的集成将在原始的分类特征值(ids)上表现得更好。因为可以将特征向量降低到更低的维度,增加随机特性集包含更多预测特性的机会。
  5. 测试多种框架对学习来说是好的,但也通常导致花费大量时间转换数据和格式、阅读文档以及调整超参数。
  6. 阅读涉及到的主要技术(FTRL、FFM)的论文,对于调整超参数这项工作来说是必不可少的。
  7. 从别人分享的博客、核心程序代码以及过往案例中学习也是至关重要的。每个人也都应当有所分享。
  8. 平均搭配、机器学习权重、堆叠技术可以大大提高准确性,基于堆叠使用在固定折上进行超折训练可以增加可用训练集并提高整体准确性。
  9. 不到最后一刻,不要放弃。
  10. kaggle是个好地方。

此外,可以基于成熟的云服务提供商解决可能遇到的大数据和分布式困境,让你专注于机器学习事业。

我理解

维特比算法可以算作一种优化技术,正是这些类优化技术的应用,加上算力的提升及数据量and分析方法的更新,构成了大数据&机器学习的核心。

所以,理解这类优化技术对于技术学习应当是很有必要的。

之前,读到这个算法的时候,对它的理解是是而非。
所以觉得有必要进行一下梳理及通俗理解,以便加强理解&灵活运用。

梳理

梳理之后的总结便是:

以层为中心,去筛选线(路径)

而不是以路径为中心,去筛选线(路径)

解释

解释一下就是:以层为中心,逐层筛选(V);
而另外一种方法就是穷举遍历法(E)。
作两张图说明一下:
Markdown
从上图寻找最优路径需要比较的次数是:

  • E方法:$1*2*2*3=12$
  • V方法:$0+1*2+2*2+2*3+3*0=12$

看起来两种方法的结果好像一样?
再看一图:
Markdown
从上图寻找最优路径需要比较的次数是:

  • E方法:$1*2*2*3*4*5=360$
  • V方法:$0+1*2+2*2+2*3+3*4+4*5+5*0=44$

“以层为中心逐层筛选”再通俗一点:每一层的每一次筛选,总能将当前的最短路径定位到该层的某一点。然后下一次计算时,将只考虑:锁定的那一点*下一层数目*下下层数目,即:1*(n+1)*(n+2),迭代之。

总结

算法的力量一目了然。显然真正的使用场景可能远比图二所示复杂,所以算法带来的提升将是若干几何级的。