Notes of Machine Learning Specialization

Reading time ~7 minutes

课程中的部分笔记,比较零散。

Regression

Regulation 是不在intercept 在上面做的。

Ridge closed-form solution: 就是令梯度为0,然后直接求解。 梯度: 令` -2H^T (vec y - H * vec w) + 2 lambda I vec w = 0` ,解得` vec w = (H^T H + lambda I ) ^ -1 H^T vec y`

训练、验证、测试比例:80%,10%,10% 或 50%,25%,25%

Cross Validation 求的error ,是每一次的平均。

  • Lasso Regression 就是 L1 Regularisation
  • Ridge Regression 就是 L2 Regularisation

Coordinate descent for lasso

Lasso Cost = `RSS(vec w) + lambda ||vec w||_1 = sum_(i=1)^N (y_i - sum_(j=0)^D w_j * h_j(x_i))^2 + lambda sum_(j=0)^D |w_j|`

预先计算 `z_j = sum_{i=1}^N h_j(x_i)^2`

而 `rho _j = sum_{i=1}^N h_j(x_i)(y_i - hat y_i(hat w _j))`

则令`delta _ (w_j)[lasso\ co\st] = 2 z_j w_j - 2 rho _j + delta L1`

其中

\[\delta L1 = \begin{cases} -\lambda & w_j <0 \\\\ [-\lambda, \lambda] & w_j = 0 \\\\ \lambda & w_j>0 \\\\ \end{cases}\]

优化,从而求得

\[w_j = \begin{cases} \frac{2\rho \_j + \lambda}{2 z_j} & if \rho \_j < -0.5 \lambda\\\\ 0 & if \rho \_j \in[-0.5 \lambda, 0.5 \lambda] \\\\ \frac{2\rho \_j - \lambda}{2 z_j} & if \rho \_j > 0.5 \lambda \\\\ \end{cases}\]

Log likelihood and log loss

对于样本`vec x, vec y`,实际上我们就需要学习参数 $\vec w$ 以最大化likelihood:

\begin{aligned} ll(\vec w) &= \prod P(y_i | x_i, \vec w) \
&= \prod P(y_i == h(x_i, \vec w)) \
&= \prod y_i * h(x_i, \vec w) + (1-y_i)*(1-h(x_i, \vec w)) \
& , where \ y_i \in \{0, 1\} ; 0 \le h(x_i, \vec w) \le 1 \end{aligned}

实际上如果$\vec w$使得每个样本的$y_i = h(x_i, \vec w)$ ,实际上我们的likelihood 就为1 。对上面式子求log 即可得log likelihood

而实际上求解max likelihood 还是不方便(最大值没有上界),不如求解 min loss(最小值就0) 。则将上式变换得

\[ls(\vec w)= \prod y_i *(1-h(x_i, \vec w)) + (1-y_i) * h(x_i, \vec w)\]

对上式求log 就得到了常见的log loss

partial derivative ?

Classification

Tree

Tree Early stopping 注意

  • 树深度多大;
  • 叶子的节点数量太小;
  • 每次split 带来的增益得有一个阀值;

    do not consider any split that does not cause a sufficient decrease in classification error

如果有missing value,处理重点还是看覆盖度:

  1. 有missing value 就去掉该样本,别去太多
  2. 对于missing value 太多的特征,去掉。也别去太多特征。

pruning 自底向上,保证去掉每个node 后整体cost 变小。

Ensemble classifier

对于每个分类器$f_t(\vec x)$ 都对应一个权重 $\hat w_t$ ,从而求和得结果为正负例结果。 `hat y = sign (sum_(t=1)^T hat w_t f_t(x))`

AdaBoost 其实步骤就如后,然后按上式预估。

  • 初始化每个样本的权重 `alpha _i = 1 / N`
  • for t = 1 to T:
    • learn $f_t(x)$ with data weights $\alpha _i$
    • compute coefficients `\hat w _t = 0.5 ln ((1-weightederro\r(f_t))/(weightederro\r(f_t)))`
    • recompute weights `\alpha _i *= e^( (-1)^(P(f_t(x_i) -= y_i)) hat w_t) `, where `P(f_t(x_i) -= y_i) = 0 or 1`
    • 每一轮归一化保证`sum alpha_i -= 1`
      其中weighted error 就是分类分错的比例。

其实整个过程中,样本的权重变化就是这样的:

  • 模型经常预估错这个样本,则其权重渐渐变大
  • 模型经常预估对这个样本,则其权重渐渐变小

分类指标:F1, AUC; 排序有precision at K, MAP

SGD 过程中,权重一定要用过去T 份数据迭代的平均,而不是当轮当前这份数据迭代的结果。

Clustering for IR

  • KD-tree 低纬度,精确度高。k-NN 时通常表现好,但维度超过2 就不太理想了。(KD-Tree 的每个节点会记录分裂的特征及数值,以及其子节点的值域范围)
  • LSH 高纬度,会损失一定精确度。

K-means 思路

  1. 初始化各类centroids
  2. 把每个新的点放到最近的centroid
  3. 完成所有点的分配后,重新计算centroid
  4. 重复迭代

LDA 中,每个word 都会在其topic 得到一个score;每个topic 在document 上也有不同分布。

  • 输入:corpus 中每个doc 对应的words 集合。

  • 输出:corpus-wide 的topic 分布;每个word 的topic;每个doc 的topic 占比。

EM 算法

  • E-step: estimate cluster responsibilities $$\hat r_{ik} = \frac{\hat \pi_k N(x_i\hat \mu_k, \hat \Sigma _k)}{\sum _{j=1}^K\hat \pi_j N(x_i\hat \mu_j, \hat \Sigma _j}$$
  • M-step: maximize likelihood over parameters $$ \hat \pi_k , \hat \mu_k, \hat \Sigma _k{\hat r_{ik}, x_i} $$

Mathjax was not loaded successfully

Original post: http://blog.josephjctang.com/2016-01/notes-of-machine-learning-specialization/

重操堆文这旧业之时间日志分析

写作的习惯,已经断了许久了。上一篇已经是去年的文章了,也是做的[时间日志分析]({% post_url 2019-02-23-time-log-analysis %}) 。 正好做时间总结,也把写作捡起来吧。# 低效时间分析用 [RescueTime](https://www.rescueti...… Continue reading

个人近期时间日志分析

Published on February 23, 2019

问问题的妙用

Published on May 27, 2018