giangtran/linear_regression_visualization
0
1import gradio as gr2import numpy as np3from linear_regression import LinearRegression4 5def transform_space(X, degree):6 X_temp = X[:]7 for d in range(2, degree + 1):8 X_temp = np.concatenate(((X[:, 0] ** d).reshape(-1, 1), X_temp), axis=1)9 return X_temp10 11def prepare_data(num_points=100, degree=1, noise=10):12 X = np.linspace(-2, 4, num_points)13 X = X.reshape(-1, 1)14 coef = []15 for d in range(degree):16 coef.append(np.random.uniform(0, 8))17 coef.append(np.random.uniform(0, 10))18 coef = np.array(coef)19 X_transform = transform_space(X, degree)20 ones = np.ones((X.shape[0], 1))21 X_transform = np.concatenate((X_transform, ones), axis=1)22 y = X_transform.dot(coef).reshape((num_points, 1)) + np.random.uniform(1, noise, (num_points, 1))23 return X, X_transform[:, :-1], y24 25def create_examples():26 linear_X, linear_X_transform, linear_y = prepare_data(num_points=100, degree=1, noise=10)27 polynomial2_X, polynomial2_X_transform, polynomial2_y = prepare_data(num_points=100, degree=2, noise=10)28 polynomial3_X, polynomial3_X_transform, polynomial3_y = prepare_data(num_points=100, degree=3, noise=20)29 30 LRModel = LinearRegression(alpha=0.05, epochs=1000, lambda_=0.01, do_visualize=True)31 LRModel.train(linear_X_transform, linear_y)32 LRModel.create_gif(linear_X, linear_X_transform, linear_y, "linear_regression_1.gif")33 34 LR2Model = LinearRegression(alpha=0.05, epochs=1000, lambda_=0.01, do_visualize=True)35 LR2Model.train(polynomial2_X_transform, polynomial2_y)36 LR2Model.create_gif(polynomial2_X, polynomial2_X_transform, polynomial2_y, "linear_regression_2.gif")37 38 LR3Model = LinearRegression(alpha=0.001, epochs=1000, lambda_=0.01, do_visualize=True)39 LR3Model.train(polynomial3_X_transform, polynomial3_y)40 LR3Model.create_gif(polynomial3_X, polynomial3_X_transform, polynomial3_y, "linear_regression_3.gif")41 42create_examples()43 44def visualize(choice):45 if choice == "Linear":46 return "linear_regression_1.gif"47 elif choice == "Polynomial":48 return "linear_regression_2.gif"49 else:50 return "linear_regression_3.gif"51 52iface = gr.Interface(visualize, 53 inputs=[ 54 gr.Dropdown(choices=["Linear", "Polynomial 2 degree", "Polynomial 3 degree"], value="Linear")55 ], 56 outputs=gr.Image().style(full_width=True, height="600"))57iface.launch()