Visualizing-ML / voting_regressor_viz.py
suvradeepp's picture
files
49575d3
import matplotlib.pyplot as plt
import streamlit as st
from sklearn.linear_model import LinearRegression
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import VotingRegressor
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.metrics import r2_score,mean_absolute_error
def train_voting_regressor(algos):
vr = VotingRegressor(algos)
vr.fit(X_train,y_train)
y_pred = vr.predict(X_test1)
r2 = r2_score(y_test1,y_pred)
mae = mean_absolute_error(y_test1,y_pred)
return vr,r2,mae
plt.style.use('seaborn-bright')
# Create a random dataset
rng = np.random.RandomState(1)
X = np.sort(5 * rng.rand(80, 1), axis=0)
y = np.sin(X).ravel()
y[::5] += 3 * (0.5 - rng.rand(16))
# Random state - 8
X_train,X_test1,y_train,y_test1 = train_test_split(X,y,test_size=0.1,random_state=8)
# Predict
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
st.sidebar.markdown("# Voting Regressor")
# Estimator Multi-select
estimators = st.sidebar.multiselect(
'Estimators',
[
'Linear Regression',
'SVR',
'Decision Tree Regressor'
]
)
# Build estimators
algos = []
if 'Linear Regression' in estimators:
lr_reg = LinearRegression()
algos.append(('lr', lr_reg))
if 'SVR' in estimators:
svr_reg = SVR()
algos.append(('svr', svr_reg))
if 'Decision Tree Regressor' in estimators:
dt_reg = DecisionTreeRegressor(max_depth=5)
algos.append(('dt', dt_reg))
fig, ax = plt.subplots()
ax.scatter(X, y, s=100,color="yellow", edgecolor="black")
orig = st.pyplot(fig)
if st.sidebar.button("Run Algorithm"):
vr,r2,mae = train_voting_regressor(algos)
y_2 = vr.predict(X_test)
ax.plot(X_test, y_2, linewidth=3,label="Voting Regressor")
ax.legend()
orig.pyplot(fig)
figs = []
r2_scores = []
maes = []
for i in algos:
i[1].fit(X_train,y_train)
y_pred = i[1].predict(X_test)
y_pred1 = i[1].predict(X_test1)
r2_scores.append(r2_score(y_test1,y_pred1))
maes.append(mean_absolute_error(y_test1,y_pred1))
ax.plot(X_test, y_pred, linewidth=1,label=i[0],linestyle='dashdot')
ax.legend()
counter = 0
for i in st.beta_columns(len(algos)):
with i:
orig.pyplot(fig)
counter += 1
st.sidebar.subheader("Regression Metrics")
st.sidebar.text("R2 score Voting Regressor " + str(round(r2,2)))
st.sidebar.text("MAE Voting Regressor " + str(round(mae,2)))
for i in range(len(algos)):
st.sidebar.text("*"*35)
st.sidebar.text("R2 score for " + algos[i][0] + " " + str(round(r2_scores[i],2)))
st.sidebar.text("MAE score for " + algos[i][0] + " " + str(round(maes[i], 2)))