zoukankan      html  css  js  c++  java
  • IVM import vector machine

    本文为《Kernel Logistic Regression and the Import Vector Machine》的阅读笔记
    是技法课的课外阅读

    Abstract:
    基于KLR kernel logistic regression,能自然延伸到多分类问题
    提供属于各类的概率
    也有类似support vector,且这部分training data占比比SVM小

    algrithm:
    IVM基于Kernal logistic regression(KLR),下面介绍KLR

    原始logistic regression为:
    $H = -frac{1}{n}sum_i^n left{ [y_i=1]ln(p(x_i))+[y_i=0]ln(1-p(x_i)) ight }+frac{lambda}{2}w^tw$ (1)
    其中$p(x)=frac{1}{1+exp(-(xw+b))}$

    根据represent theory,$xw=sum_i^n K(x,x_i)a_i$(2),这里K表示kernel
    (1)中前半部分,很容易用(2)替换后得到对应的kernel化版本
    (1)中后半部分,令$a=(a_1,a_2,...,a_n)$,$K$为nxn的矩阵,$K_{ij}=K(x_i,x_j)$,
    $X$为nxd的矩阵,n为样本量,d为每个样本变换后的维度,$K=XX^t$根据(2),有
    $Xw=Ka=XX^ta$,$w=X^ta$,$w^tw=a^tXX^ta=a^tKa$

    $H=frac{1}{n}sum_i^n left{ [y_i=1]ln(1+exp(-f(x_i)))+[y_i=0]ln(1+exp(f(x_i))) ight }+frac{lambda}{2}a^tKa$(3)
    其中$f(x)=b+sum_{x_iin S} K(x,x_i)a_i,S=left{x_1,x_2,...,x_n ight}$(4)

    由于KLR并非hinge loss,所以解完后得到的每个$a_i$都不等于0
    IVM是基于KLR的,所做的改进即选出一些$a_i eq 0$,而其他$a_i=0$,这些不等于0的样本点,类似于SVM的support vector,此处叫Import point

    令这些Import point组成的集合成为$S$,大小为$n_s$,此时(4)式中的$S$只包含Import point
    (3)式中的$K$也有变动
    重新考虑(2)式:$xw=sum_i^n K(x,x_i)a_i$,令$X_s$为由Import point变换后组成的矩阵,大小为$n_s imes d,$令$K_a=XX_s^t$为$n imes n_s$的矩阵
    有$Xw = K_a a = XX_s^t a$,$w = X_s^t a$,$w^tw = a^tX_sX_s^ta=a^tK_q a$,此处$K_q=X_sX_s^t$,是$n_s imes n_s$的矩阵

    用牛顿法求解$H$,令$H_1=frac{1}{n}sum_i^n left{ [y_i=1]ln(1+exp(-f(x_i)))+[y_i=0]ln(1+exp(f(x_i))) ight }$,$H_2=frac{lambda}{2}a^tK_qa$
    $frac{partial H_1}{partial a_j} = frac{1}{n}sum_i^n left{ -[y_i=1]K(x_i,x_j)frac{exp(-f(x_i))}{1+exp(-f(x_i))}+[y_i=0]K(x_i,x_j)frac{exp(f(x_i))}{1+exp(f(x_i))} ight }\ = frac{1}{n}sum_i^n left{ -[y_i=1]K(x_i,x_j)(1-p(x_i))+[y_i=0]K(x_i,x_j)p(x_i) ight }\ = frac{1}{n}sum_i^n left{ -y_iK(x_i,x_j)(1-p(x_i))+(1-y_i)K(x_i,x_j)p(x_i) ight }\ = frac{1}{n}sum_i^n (p(x_i)-y_i)K(x_i,x_j)=frac{1}{n}sum_i^n {K_a^t}_{ji}{(p-y)}_{i1}=frac{1}{n} {[K_a^t(p-y)]}_{j1}$
    由于$H_2$是一个数字,所以$trace H_2=H_2$
    $partial a trace H_2 = partial a trace frac{lambda}{2}a^tK_qa = frac{lambda}{2}(K_qa+K_qa)=lambda K_qa$
    $frac{partial H_2}{partial a_j}=lambda {[K_qa]}_{j1}=lambda sum_i^{n_s} {[K_q]}_{ji}a_{i1}$

    $frac{partial^2 H_1}{partial a_jpartial a_z}=frac{1}{n}sum_i^n frac{exp(-f(x_i))}{(1+exp(-f(x_i)))^2}K(x_i,x_z)K(x_i,x_j)=frac{1}{n}sum_i^np(x_i)(1-p(x_i)){[K_a]}_{iz}{[K_a]}_{ij}$
    令$W=diag(p(x_i)(1-p(x_i)))$
    $frac{partial^2 H_1}{partial a_jpartial a_z}=frac{1}{n}sum_i^n {[K_a^t]}_{ji}W_{ii}{[K_a]}_{iz}=frac{1}{n} {[K_a^tWK_a]}_{jz}$
    $frac{partial^2 H_2}{partial a_jpartial a_z}=lambda {[K_q]}_{jz}$

    根据牛顿法的更新公式:$alpha_{k+1} = alpha_{k}-Hessian^{-1}g$
    $a_{k+1} = a_{k}+{(frac{1}{n} K_a^tWK_a+lambda K_q)}^{-1}(frac{1}{n}K_a^t(y-p)-lambda K_qa_k)\ ={(frac{1}{n} K_a^tWK_a+lambda K_q)}^{-1} (frac{1}{n}K_a^t(y-p)-lambda K_qa_k+frac{1}{n} K_a^tWK_aa_k+lambda K_qa_k)\ ={(frac{1}{n} K_a^tWK_a+lambda K_q)}^{-1} (frac{1}{n}K_a^t[(y-p)+WK_aa_k])$ (3)

    detail:
    1.$S=emptyset$,$R={x_1,x_2,...,x_n}$
    2.遍历R中的每一个样本,令$S=Sigcup x_l$,求解a,使H最小
    3.选取使H最小的$x_l$,记此时H的値为$H_{k+1}$
    4.如果$frac{|H_{k+1}-H_k|}{H_k}<eta$,判定为收敛,返回S,以及a;否则重复2-4,直到收敛(通常设$eta=0.001$)

    2步骤中如果加入一个$x_l$,就要进行一轮牛顿法的迭代,是很花时间的,改为如下更新策略
    每一次加入一个$x_l$,按公式(3)执行一次迭代

  • 相关阅读:
    vue使用laydate.js插件报错laydate.css: Invalid
    自定义css样式结合js控制audio做音乐播放器
    福利福利~262集前端免费视频!
    解决Vue在IE中报错出现不支持=>等ES6语法和“Promise”未定义等问题
    设置Chart.js默认显示Point点的值不用鼠标经过才显示
    js监听某个元素高度变化来改变父级iframe的高度
    Vue中注意target和currentTarget的使用
    VUE中让由全局变量添加生成的新数组不随全局变量的变化而变化
    bootstrap-table前端实现多条件时间段查询数据
    js小数点相乘或相除出现多位数的问题
  • 原文地址:https://www.cnblogs.com/porco/p/4621345.html
Copyright © 2011-2022 走看看