File size: 3,343 Bytes
c0dea5b 3b612a0 c0dea5b 4fe5564 c0dea5b 3b612a0 c0dea5b e8a36ef c0dea5b 4fe5564 c0dea5b d8fcce6 c0dea5b 3b612a0 d8fcce6 c0dea5b 3b612a0 c0dea5b cbb5768 c0dea5b | 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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | ## CSCI4750/5750-SLU
# Jie Hou, Jan, 2024
import gradio as gr
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import matplotlib.colors as colors
import itertools
from scipy.stats import norm
from scipy import stats
from sklearn.naive_bayes import GaussianNB
def gaussian(x, n, u, s):
#u = x.mean()
#s = x.std()
# divide [x.min(), x.max()] by n
x = np.linspace(x.min(), x.max(), n)
a = ((x - u) ** 2) / (2 * (s ** 2))
y = 1 / (s * np.sqrt(2 * np.pi)) * np.exp(-a)
return x, y, u, s
def plot_figure(N, u1, std1, show_dist):
#N = 100
import numpy as np
import matplotlib.pyplot as pp
pp.style.use('default')
val = 0. # this is the value where you want the data to appear on the y-axis.
points_class1 = [stats.norm.rvs(loc=u1, scale = std1) for x in range(N)]
pd_class1 = pd.DataFrame({'Feature 1 (X)': points_class1})
pd_all = pd_class1
import numpy as np
X_data= pd_all['Feature 1 (X)'].to_numpy().reshape((len(pd_all),1))
# define x, y limits
x_min, x_max = X_data[:, 0].min() - 1, X_data[:, 0].max() + 1
y_min, y_max = 0-0.5, 1
fig = pp.figure(figsize=(8, 6)) # figure size in inches
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.3, wspace=0.05)
pp.tick_params(left = False, right = False , labelleft = False ,
labelbottom = True, bottom = False)
#reference = [stats.uniform.rvs(loc=1, scale = 1) for x in range(N)]
pp.plot(points_class1, np.zeros_like(points_class1) + val, 'x', label = 'Feature', markersize = 10)
if show_dist:
x = np.arange(x_min, x_max, 0.01) # define range of x
x, y, u, s = gaussian(x, 10000, np.mean(points_class1), np.std(points_class1) )
pp.plot(x, y)
#pp.plot(x, y, label=r'$Gaussian (\mu=%.2f,\ \sigma=%.2f)$' % (u, s))
pp.xlim([x_min, x_max])
pp.ylim([y_min, y_max])
pp.xlabel("Feature 1 (X1)", size=20)
pp.xticks(fontsize=20)
pp.ylabel("Density")
pp.legend(loc='upper right', borderpad=0, handletextpad=0, fontsize = 20)
pp.savefig('plot.png')
return 'plot.png', pd_all
set_mean_class1 = gr.Slider(-20, 20, step=0.5, label = 'Mean (Feature)')
set_std_class1 = gr.Slider(1, 10, step=0.5, label = 'Standard Deviation (Feature)')
# 3. Define the number of data points
set_number_points = gr.Slider(100, 1000, step=5, label = 'Number of samples')
# 4. show distribution or not
set_show_dist = gr.Checkbox(label="Show data distribution")
# 6. define output imagem model
set_out_plot_images = gr.Image(label="Data visualization")
set_out_plot_table = gr.Dataframe(type='pandas', label ='Simulated Dataset')
### configure gradio, detailed can be found at https://www.gradio.app/docs/#i_slider
interface = gr.Interface(fn=plot_figure,
inputs=[set_number_points,set_mean_class1,set_std_class1, set_show_dist],
outputs=[set_out_plot_images,set_out_plot_table],
examples_per_page = 2,
#examples = get_sample_data(10),
title="CSCI4750/5750 Demo: Web Application for Practicing Gaussian Distribution",
description= "Click examples below for a quick demo",
theme = 'huggingface',live=True
)
interface.launch(debug=True)
|