@Override public Matrix predict(Matrix x) { Matrix xt = MatlibMatrixUtils.transpose(x); final Matrix mult = MatlibMatrixUtils.dotProduct(MatlibMatrixUtils.dotProduct(MatlibMatrixUtils.transpose(u), xt),this.w); if(this.biasMode) MatlibMatrixUtils.plusInplace(mult,this.bias); Matrix ydiag = new DiagonalMatrix(mult); return ydiag; } }
if(this.biasMode){ Matrix mult = MatlibMatrixUtils.dotProductTransposeTranspose(newu, X); mult = MatlibMatrixUtils.dotProduct(mult, neww); MatlibMatrixUtils.plusInplace(mult, bias);
@Override public double eval(Matrix W) { Matrix resid = null; if(W == null){ resid = X; } else { resid = MatlibMatrixUtils.dotProduct(X,W); } Matrix vnobias = MatlibMatrixUtils.copy(X); if(this.bias!=null) { MatlibMatrixUtils.plusInplace(resid, bias); } Matrix v = MatlibMatrixUtils.copy(resid); MatlibMatrixUtils.minusInplace(resid,Y); double retval = 0; for (int t = 0; t < resid.columnCount(); t++) { double loss = resid.get(t, t); retval += loss * loss; logger.debug( String.format( "yr=%d,y=%3.2f,v=%3.2f,v(no bias)=%2.5f,error=%2.5f,serror=%2.5f", t, Y.get(t, t), v.get(t, t), vnobias.get(t,t), loss, loss*loss ) ); } return retval; } @Override
@Override public Matrix gradient(Matrix W) { Matrix ret = W.newInstance(); Matrix resid = MatlibMatrixUtils.dotProduct(X, W); if(this.bias!=null) { MatlibMatrixUtils.plusInplace(resid, this.bias); } MatlibMatrixUtils.minusInplace(resid, Y); for (int t = 0; t < resid.columnCount(); t++) { Vector row = this.X.row(t); row.times(resid.get(t, t)); MatlibMatrixUtils.setSubMatrixCol(ret, 0, t, row); } return ret; } @Override