confidence weighted learning

这个算法原作者意思是在NLP中面对高维向量和数据稀疏时效果会不错,算法保持了当前预测向量w的均值和方差,并做优化。代码实现如下:

#cw learning algorithm
def get_phi():
    '''confidence parameter phi'''
    import numpy as np
    from scipy import stats
    eta = float(raw_input("please input confidence parameter between (0 1)\n"))
    X = stats.norm(0.0,1.0)
    phi = X.ppf(eta)
    return phi

def get_data_size(datafile):
    f = open(datafile)
    size = f.readline().strip().split()
    f.close()
    return len(size)

def dot(X,Y):
    sum = 0
    for (x,y) in zip(X,Y):
        sum += x*y
    return sum
def mul(X,Y):
    Z = []
    for (x,y) in zip(X,Y):
        Z.append(x*y)
    return Z
def plus(X,Y):
    Z = []
    for (x,y) in zip(X,Y):
        Z.append(x+y)
    return Z

def opp(X):
    Y = []
    for x in X:
        Y.append(1/x)
    return Y
def init_u_E(datafile):
    #initialize
    #input
     #confidence parameter phi
    phi = get_phi()
    #init variance of predictor w
    a = float(raw_input("initial variance parameter a \n"))
    size = get_data_size(datafile)
    u = []
    E = []
    for i in range(size-1):
        u.append(0)
        E.append(a)
    return u,E,phi
def CWL(datafile,u,E,phi = 0.8):
    '''wl learning algorithm'''
    import math
    for line in open(datafile):
        Y_X_str = line.strip().split()
        Y_X = [float(t) for t in Y_X_str]
        X = Y_X[1:]
        Y = Y_X[0]
        Mi = Y*dot(X,u) #Mi>0 then the prediction is right,otherwise the prediction is wrong
        Vi = dot(X,mul(X,E))
        Ri = (-1-2*phi*Mi+float(math.sqrt((1+2*phi*Mi)*(1+2*phi*Mi)-8*phi*(Mi-phi*Vi))))/(4*phi*Vi)
        alpha = max(Ri,0)
        dlt_u = [alpha*Y*x for x in mul(E,X)]
        u = plus(u,dlt_u)
        dlt_E = [ 2*alpha*phi*x for x in mul(X,X)]
        E = opp(plus(opp(E),dlt_E))
    return u,E

#test
u,E,phi = init_u_E("data")
for i in range(10000):
    u,E = CWL("data",u,E,phi)
print u
print E
print dot(u,[0,1,0])

数据类型为

1 0 0 1

-1 0 1 0

第一列为准确的类型,后面是feature set。

两个参数,phi是对于当前预测的置信度,即当预测的概率大于phi时才做预测(代码中预设为0.8),alpha为初始预测向量w的方差(预设为1)

测试效果不定,手写了7组数据,5个是可以判断正确的

还有一部分是对于有多个label时设计的算法,multi-class CW。这里是假设存在一个feature function将当前x和一个lable映射为一个值,即f(x,y),那么在算法实际过程中,利用这个值来对所有的label进行一个排序,那么将产生K个(K为label总数)限制条件(在binary classify中只有一个限制条件),算法再根据这K个条件做取舍决定最后的参数更新值(原文中有几种不同的更新方法)。

参考文献 confidence weighted linear classification by Mark Dredze,Koby Crammer

Multii-class confidence weighted algoritms

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值