1.SVM对偶函数最后的优化问题
2. 对核函数进行缓存
由于该矩阵是对称矩阵,因此在内存中的占用空间可以为m(m+1)/2
映射关系为:
#define OFFSET(x, y) ((x) > (y) ? (((x)+1)*(x) >> 1) + (y) : (((y)+1)*(y) >> 1) + (x))
//...
for (unsigned i = 0; i < count; ++i)
for (unsigned j = 0; j <= i; ++j)
cache[OFFSET(i, j)] = y[i] * y[j] * kernel(x[i], x[j], DIMISION);
//...
3. 求解梯度
既然α值是变量,因此对α值进行求导,后面根据梯度选取α值进行优化。
梯度:
for (unsigned i = 0; i < count; ++i) { gradient[i] = -1; for (unsigned j = 0; j < count; ++j) gradient[i] += cache[OFFSET(i, j)] * alpha[j]; }
若使W最大,则当α减少时,G越大越好。反之,G越小越好。
4. 序列最小化法(SMO)的约束条件
每次选取2个α值进行优化,其它α值视为常数,根据约束条件得: