def test_ridge_regression_gradient(self):
        estimator = ridge.RidgeRegression(l2_reg=.01)
        d = 5
        input_vals = {"x": np.random.randn(d)}
        outcome_vals = {"y": np.array(np.random.randn())}
        parameter_vals = {"w": np.random.randn(d), "b":np.array(np.random.randn())}

        test_utils.test_ComputationGraphFunction(estimator.graph, input_vals, outcome_vals, parameter_vals)
        self.assertTrue(1 == 1)
Example #2
0
def one_dim_ridge():
    x = np.array([1, 2, 4, 6, 7])
    y = np.array([1, 3, 3, 5, 4])
    model = ridge.RidgeRegression(1.)
    model.fit(x, y)
    b, a = model.w_

    plt.scatter(x, y, color="k")
    xmax = x.max()
    plt.plot([0, xmax], [b, b + a * xmax], color="k")
    plt.show()
Example #3
0
def three_dim_ridge():
    n = 100
    scale = 10

    # np.random.seed(1)
    X = np.random.random((n, 2)) * scale
    w0 = 1
    w1 = 2
    w2 = 3
    y = w0 + w1 * X[:, 0] + w2 * X[:, 1] + np.random.randn(n)

    model = ridge.RidgeRegression()
    model.fit(X, y)

    xmesh, ymesh = np.meshgrid(np.linspace(0, scale, 20),
                               np.linspace(0, scale, 20))
    zmesh = (model.w_[0] + model.w_[1] * xmesh.ravel() +
             model.w_[2] * ymesh.ravel()).reshape(xmesh.shape)

    fig = plt.figure()
    ax = fig.add_subplot(111, projection="3d")
    ax.scatter(X[:, 0], X[:, 1], y, color="k")
    ax.plot_wireframe(xmesh, ymesh, zmesh, color="r")
    plt.show()
    axes[1, i].set_ylim([ymin, ymax])

    # 徐々にサンプル数を増やしたいため、iの値によってデータをスプリット
    xx = x[:2 + i * 2]
    yy = y[:2 + i * 2]
    # 一行目、二行目ともに同じデータを散文図で設定。
    axes[0, i].scatter(xx, yy, color="k")
    axes[1, i].scatter(xx, yy, color="k")

    # 普通の線形回帰
    model = linearreg.LinearRegression()
    model.fit(xx, yy)
    # 線形の図の始端、終端を定義
    xs = [xmin, xmax]
    ys = [model.w_[0] + model.w_[1] * xmin, model.w_[0] + model.w_[1] * xmax]
    # 図示するため0行目のi列に代入
    axes[0, i].plot(xs, ys, color="k")

    # リッジ回帰
    model = ridge.RidgeRegression(lambda_=10.)
    model.fit(xx, yy)
    xs = [xmin, xmax]
    ys = [model.w_[0] + model.w_[1] * xmin, model.w_[0] + model.w_[1] * xmax]
    axes[1, i].plot(xs, ys, color="k")

plt.show()
"""
図でわかる通り、リッジ回帰ではサンプル数が少ない時に、例外的なデータからの影響を受けにくい、という性質がある。
これが正則化項wによる効果。
これが望ましいかどうかは、適用しようとしているデータの性質と、「何に応用しているのか」による。
"""