recall = (# true positive)/(# actual positive),
F1 = (2* pre\cision * recall)/(pre\cision+recall) `
虽然使用大数据能学到重要的规则,但是我们在选择特征的时候还是需要看,该特征是否含有足够的信息来预测我们的结果值。
SVM 中,目标函数跟LR 中类似,只是把LR 的目标函数
` J_(LR-RT)(f) = 1/(2m) sum_(i=1)^m - y_i log(f_i ) - (1-y_i ) log (1-f_i ) + lamda/(2m) sum_(j=1)^n theta_j^2 `
变成了:
` J_(SVM-RT)(f) = C sum_(i=1)^m - y_i cost_1 (f_i ) - (1-y_i ) cost_0 (f_i ) + 1/2 sum_(j=1)^n theta_j^2 `
其中,`cost_1 (f_i )` 和 `cost_0 (f_i )` 分别是y = 1/0 时,loss function 那两个log 函数的改写,并且新的这两个损失函数,不再是log 函数,而是把之前的log 函数,简化成更简单的elbow 函数,这样就比较方便的找到什么时候差不多就找到最小的loss 了5。
假设`z = theta ^ T vec x = f_i`,则另: ` z >= 1 if y = 1, z <=-1 if y = 0 `
且
`cost_1 (z )= {0.5 - 0.5z if z<1 :}, 0 if z >=1}`
`cost_0 (z )= {0.5 + 0.5z if z>=-1 :}, 0 if z <=-1}`
故而当 `|z| >=1`, `J_(SVM-RT)(f) = 1/2 sum_(j=1)^n theta_j^2 = 1/2||theta||^2`
同时不难看出C 跟 `1/lambda` 的效果是类似的。所以:
Small C –> Higher bias, low variance
Large C –> Lower bias, high variance
另外,`theta ^T vec x = |vec x| * cos beta * |theta| = p* |theta| `,其中`beta` 是参数`theta 和 vec x` 这两个向量的夹角,p 也就是 `vec x` 投影到向量`theta` 上的长度。所以如果SVM 分割面垂直的`theta `,每一条样本`vec x` 投影到`theta ` 上的均长越长,那么这个分割面就越好。
所以为了让`J_(SVM-RT)(f)` 最小,且满足`|p * theta|>=1`,只需要让$p$ 最大化即可。
Kernel 中我们手动找到landmarks 后(找不同的landmarks 那么对应的方差 `sigma^2 ` 也会不一样),若使用高斯函数 ` K_ (gaussian(x^i, x^l)) = e ^ ( - ||x^i- x^l||^2/ (2 sigma ^2)) = e ^ ( - (sum_(k=1)^n(x_k^i- x_k^l)^2)/ (2 sigma ^2))` ,则就需要选择`sigma^2 ` 。若`sigma^2 ` 越大,高斯函数相形的值就越高(目标函数也就越高),函数也就越平滑,那bias 就越高;反之越陡,bias 就越低。
找landmarks 的方式,假设原始特征长度n,样本长度m:
其他可用Kernels: Polynomial kernel, String kernel, Chi-square kernel, histogram intersection kernel. 同时,所有的kernel function 都需要满足Mercer’s Theorem 才能优化过程收敛。
同时,SVM 和 LR 的应用场景为:
K-means 思想:
则目标函数即为:
`J = 1/m sum_(i=1)^m ||x^i - mu_c(i)||^2`
所以在如上第一步随机选取centroid 可能出现很大偏差的情况下,可以尝试K-means 很多次,然后选取目标函数值最小的一次结果。
而k 数量的选择,也可以使用不同k 画出目标函数值的这种方式选择。通常这也叫elbow 原则,因为在某一个k 的位置之后,目标函数值减小就比较缓慢了。
PCA6 里做了feature scaling & mean normalisation 后有,
` Sigma = (X^T X)/m`
`[U, S, V] = svd(Sigma)`
而若要降维度降成k 维度,只需要计算`Z = X * U_(reduce) = X * U( :, 1:k)`,而要还原后近似的X则为:
`X_(appro\x) = Z * U_(reduce)^T = Z * U( :, 1:k)^T`
那现在就还有另外一个问题,选择多大的k?只需要
` (sum||x^i - x_(appro\x)^i||^2) / (sum||x^i||^2 )<= 0.01 `
so that 99% variance is retained. 上式等价于如后的计算
`(sum_(i=1)^k S_(ii)) / (sum_(i=1)^n S_(ii)) >= 0.99 `
,其中S 就是SVD 解出的。
假设每一个特征下的数据都符合正太分布(不符合的,可以通过log、幂、根号等形式转换成符合正太分布的数据)。然后简单一点单个样本数据x 是否异常,就用$p(x)< \epsilon$ 来判断:
` p(x) = prod_(k=1)^n p(x_k,mu_k,sigma_k^2) = prod 1/(sqrt (2 pi) sigma_k) e ^ (- (x_k -mu_k)^2 / (2 sigma_k ^2)) `
其中n 为特征个数,$\mu,\sigma$ 对应每个特征的期望和标准差。即当样本x 的每个特征基本都处于边缘时,我们就觉着它是异常的。这个$\epsilon$ 可以用CV 集里面的异常值进行确定。
其实更一般的表达式,就是多元高斯分布。对于m 个训练样本。求均值` vec mu = 1/m sum vec x^(i) ` 和协方差 `Sigma = 1/m sum (vec x^(i)-vec mu) (vec x^(i)-vec mu)^T ` 那么同样的有:
` p(vec x, vec mu, Sigma) = 1/((2 pi)^(n/2) sqrt Sigma) e ^ (- 1/ 2 (vec x -vec mu)^T Sigma^(-1)(vec x -vec mu)) `
其中n,为特征的维数。所以当各个特征相互独立时(也就是$\Sigma$ 是对角矩阵,且主对角线上的元素就是每个特征单独的方差),也就得到前面那个$p(x)$ 的特例了。
假设在豆瓣网上
如此CF 优化的过程则是:
如果给定$\vec x$,求$\vec \theta$ 则目标函数则为:
` J(theta) = 1 / 2 sum_ (j=1)^ (n_u) sum_(i:r(i,j)=1) theta^((:j:)T) * x^i + lambda / 2 sum_ (j=1)^ (n_u) sum_(k=1)^n (theta_k^j)^2 `
如果给定$\vec \theta$,求$\vec x$ 则目标函数则为:
` J(x) = 1 / 2 sum_ (i=1)^ (n_m) sum_(j:r(i,j)=1) theta^((:j:)T) * x^i + lambda / 2 sum_ (i=1)^ (n_m) sum_(k=1)^n (x_k^j)^2 `
如果要同时优化$\vec \theta$ 和 $\vec x$;则需要把上述两者目标函数相加得到
` J(x,theta) = 1 / 2 sum_((i,j):r(i,j)=1) theta^((:j:)T) * x^i + lambda / 2 sum_ (j=1)^ (n_u) sum_(k=1)^n (theta_k^j)^2 + lambda / 2 sum_ (i=1)^ (n_m) sum_(k=1)^n (x_k^j)^2 `
而优化过程同样可以像线性回归那样使用梯度下降求解,但需要随机初始化比较小的$\vec x , \vec \theta$ 。其中$n_u$ 和 $n_m$ 分别代表用户和电影的数量。
Batch gradient descent, 是针对特征j ,对全量样本计算梯度的平均后更新 ` theta_j = theta_j - alpha 1 / m sum _(i=1) ^m (f(x_i)-y_i)x_i `
而stochastic gradient descent,先对样本进行randomly shuffle 后,针对每个样本(一共m 个样本)都重新更新一下 ` theta_j = theta_j - alpha (f(x_i)-y_i)x_i ` 而若要让$\theta$ 最终收敛,则在迭代过程中就需要逐步减小$\alpha$
而mini-batch gradient descent 就是介于前两者之间,通常一次性计算2-100 个样本的平均梯度然后更新$\vec \theta$
最后吴教授使用OCR 来分析了一下pipeline,以及整个系统,如何来确定哪一部分更值得投入精力。 简单的讲就是以Overal accuracy 作为基线,然后在pipeline 中依次人工让每个component 局部的accuray 弄成100%,然后看Overal accuracy 的提升幅度,据此判断哪一个部分提升效果对整体效果更明显。
若用$P$ $Q$ 分别代表两个离散分布,那么用
` D_{kl}(P||Q) = sum_i P(i) log P(i)/Q(i) ` 表征两个分布的差异平均值,故其又叫相对熵。
Mathjax was not loaded successfully
Original post: http://blog.josephjctang.com/2015-08/ml-notes/
写作的习惯,已经断了许久了。上一篇已经是去年的文章了,也是做的[时间日志分析]({% post_url 2019-02-23-time-log-analysis %}) 。 正好做时间总结,也把写作捡起来吧。# 低效时间分析用 [RescueTime](https://www.rescueti...… Continue reading