示例#1
0
def newton(app: ArrayApplication, model: GLM, beta, X: BlockArray,
           y: BlockArray, tol: BlockArray, max_iter: int):
    for _ in range(max_iter):
        mu: BlockArray = model.forward(X, beta)
        g = model.gradient(X, y, mu, beta=beta)
        # These are PSD, but inv is faster than psd inv.
        beta += -app.inv(model.hessian(X, y, mu)) @ g
        if app.max(app.abs(g)) <= tol:
            break
    return beta
示例#2
0
def irls(app: ArrayApplication, model: LogisticRegression, beta, X: BlockArray,
         y: BlockArray, tol: BlockArray, max_iter: int):
    for _ in range(max_iter):
        eta: BlockArray = X @ beta
        mu: BlockArray = model.link_inv(eta)
        s = mu * (1 - mu) + 1e-16
        XT_s = (X.T * s)
        # These are PSD, but inv is faster than psd inv.
        XTsX_inv = app.inv(XT_s @ X)
        z = eta + (y - mu) / s
        beta = XTsX_inv @ XT_s @ z
        g = model.gradient(X, y, mu, beta)
        if app.max(app.abs(g)) <= tol:
            break
    return beta
示例#3
0
def test_uops(app_inst: ArrayApplication):
    np_x = np.arange(100)
    ba_x = app_inst.array(np_x, block_shape=np_x.shape)
    assert np.allclose(np.abs(np_x), app_inst.abs(ba_x).get())
    assert np.allclose(np.linalg.norm(np_x), app_inst.norm(ba_x).get())