File size: 2,361 Bytes
3ec88bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import gradio as gr
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error


def get_plots(min_alpha, max_alpha):
    clf = Ridge()

    X, y, w = make_regression(
        n_samples=10, n_features=10, coef=True, random_state=1, bias=3.5
    )

    coefs = []
    errors = []

    alphas = np.logspace(min_alpha, max_alpha, 200)

    # Train the model with different regularisation strengths
    for a in alphas:
        clf.set_params(alpha=a)
        clf.fit(X, y)
        coefs.append(clf.coef_)
        errors.append(mean_squared_error(clf.coef_, w))

    # Display results
    fig, ax = plt.subplots(1, 2, figsize=(20, 6))

    ax[0].plot(alphas, coefs)
    ax[0].set_xscale("log")
    ax[0].set_xlabel("alpha")
    ax[0].set_ylabel("weights")
    ax[0].set_title("Ridge coefficients as a function of the regularization")

    ax[1].plot(alphas, errors)
    ax[1].set_xscale("log")
    ax[1].set_xlabel("alpha")
    ax[1].set_ylabel("error")
    ax[1].set_title("Coefficient error as a function of the regularization")
    fig.tight_layout()

    return fig


with gr.Blocks() as demo:
    with gr.Row():
        with gr.Column(scale=1):
            gr.Markdown(
                "Choose the range of alpha values to plot."
                + " The models you input for alpha are for the exponents of 10,"
                + " so a value of -6 means 10^-6."
            )
            min_alpha = gr.Slider(
                minimum=-10,
                maximum=10,
                step=0.5,
                value=-6,
                label="Minimum Alpha Exponent",
            )
            max_alpha = gr.Slider(
                minimum=-10,
                maximum=10,
                step=0.5,
                value=6,
                label="Maximum Alpha Exponent",
            )

        with gr.Column(scale=4):
            plots = gr.Plot()

    min_alpha.change(
        get_plots,
        [min_alpha, max_alpha],
        plots,
        queue=False,
    )
    max_alpha.change(
        get_plots,
        [min_alpha, max_alpha],
        plots,
        queue=False,
    )

    demo.load(
        get_plots,
        [min_alpha, max_alpha],
        plots,
        queue=False,
    )

if __name__ == "__main__":
    demo.launch()