論文はこちら。

Online Passive-Aggressive Algorithms

ソースコードはこちら。 下の関数でおこなわれている重みの更新以外はほとんどパーセプトロンと一緒です。

func (p *PassiveAggressive) Update(X map[string]float64, y string, sign float64) Weight {
        loss := math.Max(0, 1-sign*Dot(X, p.weight[y]))
        //         tau := loss / Norm(X) // PA
        tau := loss / (Norm(X) + 1 / (2 * p.C)) // PA-II
        if _, ok := p.weight[y]; ok == false {
            p.weight[y] = map[string]float64{}
        }

        for f, _ := range X {
                if _, ok := p.weight[y][f]; ok {
                    p.weight[y][f] += tau * sign
                } else {
                    p.weight[y][f] = tau * sign
                }
        }
        return p.weight
}

関連記事



最近の記事