From 01168f3588d9449ad92d36333635334642b8cef8 Mon Sep 17 00:00:00 2001 From: bastien Date: Tue, 25 Jun 2024 18:06:30 +0200 Subject: [PATCH 1/5] add visu to prediction regression --- frontend/pages/prediction_regression.py | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/frontend/pages/prediction_regression.py b/frontend/pages/prediction_regression.py index 377274e..42acf34 100644 --- a/frontend/pages/prediction_regression.py +++ b/frontend/pages/prediction_regression.py @@ -1,6 +1,8 @@ import streamlit as st from sklearn.linear_model import LinearRegression import pandas as pd +import matplotlib.pyplot as plt +import numpy as np st.header("Prediction: Regression") @@ -25,5 +27,34 @@ if "data" in st.session_state: prediction = model.predict(pd.DataFrame([pred_values], columns=data_name)) st.write("Prediction:", prediction[0]) + + fig = plt.figure() + dataframe_sorted = pd.concat([X, y], axis=1).sort_values(by=data_name) + + if len(data_name) == 1: + X = dataframe_sorted[data_name[0]] + y = dataframe_sorted[target_name] + + prediction_array_y = [ + model.predict(pd.DataFrame([[dataframe_sorted[data_name[0]].iloc[i]]], columns=data_name))[0] + for i in range(dataframe_sorted.shape[0]) + ] + + plt.scatter(dataframe_sorted[data_name[0]], dataframe_sorted[target_name], color='b') + plt.scatter(dataframe_sorted[data_name[0]], prediction_array_y, color='r') + else: + ax = fig.add_subplot(111, projection='3d') + + prediction_array_y = [ + model.predict(pd.DataFrame([[dataframe_sorted[data_name[0]].iloc[i], dataframe_sorted[data_name[1]].iloc[i]]], columns=data_name))[0] + for i in range(dataframe_sorted.shape[0]) + ] + + ax.scatter(dataframe_sorted[data_name[0]], dataframe_sorted[data_name[1]], dataframe_sorted[target_name], color='b') + ax.scatter(dataframe_sorted[data_name[0]], dataframe_sorted[data_name[1]], prediction_array_y, color='r') + + st.pyplot(fig) + + else: st.error("File not loaded") From 405439564147fc6430b9a933e156fe1e480372da Mon Sep 17 00:00:00 2001 From: bastien Date: Tue, 25 Jun 2024 19:54:35 +0200 Subject: [PATCH 2/5] update --- frontend/pages/prediction_classification.py | 23 +++++++++++++++++++++ frontend/pages/prediction_regression.py | 7 +++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/frontend/pages/prediction_classification.py b/frontend/pages/prediction_classification.py index 5aaf52f..20ae5e1 100644 --- a/frontend/pages/prediction_classification.py +++ b/frontend/pages/prediction_classification.py @@ -4,6 +4,8 @@ from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.preprocessing import LabelEncoder import pandas as pd +import matplotlib.pyplot as plt + st.header("Prediction: Classification") @@ -60,5 +62,26 @@ if "data" in st.session_state: prediction = label_encoders[target_name].inverse_transform(prediction) st.write("Prediction:", prediction[0]) + + + + + fig = plt.figure() + dataframe_sorted = pd.concat([X, y], axis=1).sort_values(by=data_name) + + X = dataframe_sorted[data_name[0]] + y = dataframe_sorted[target_name] + + prediction_array_y = [ + model.predict(pd.DataFrame([[dataframe_sorted[data_name[0]].iloc[i]]], columns=data_name))[0] + for i in range(dataframe_sorted.shape[0]) + ] + + plt.scatter(dataframe_sorted[data_name[0]], dataframe_sorted[target_name], color='b') + plt.scatter(dataframe_sorted[data_name[0]], prediction_array_y, color='r') + + st.pyplot(fig) + + else: st.error("File not loaded") diff --git a/frontend/pages/prediction_regression.py b/frontend/pages/prediction_regression.py index 42acf34..6d125e0 100644 --- a/frontend/pages/prediction_regression.py +++ b/frontend/pages/prediction_regression.py @@ -41,8 +41,8 @@ if "data" in st.session_state: ] plt.scatter(dataframe_sorted[data_name[0]], dataframe_sorted[target_name], color='b') - plt.scatter(dataframe_sorted[data_name[0]], prediction_array_y, color='r') - else: + plt.plot(dataframe_sorted[data_name[0]], prediction_array_y, color='r') + elif len(data_name) == 2: ax = fig.add_subplot(111, projection='3d') prediction_array_y = [ @@ -51,10 +51,9 @@ if "data" in st.session_state: ] ax.scatter(dataframe_sorted[data_name[0]], dataframe_sorted[data_name[1]], dataframe_sorted[target_name], color='b') - ax.scatter(dataframe_sorted[data_name[0]], dataframe_sorted[data_name[1]], prediction_array_y, color='r') + ax.plot(dataframe_sorted[data_name[0]], dataframe_sorted[data_name[1]], prediction_array_y, color='r') st.pyplot(fig) - else: st.error("File not loaded") From 27e69b2af8b4dfd1adb7c5441f8e0a713d1192d4 Mon Sep 17 00:00:00 2001 From: bastien ollier Date: Wed, 26 Jun 2024 10:45:50 +0200 Subject: [PATCH 3/5] add confusion_matrix --- frontend/pages/prediction_classification.py | 26 +++++++++------------ frontend/pages/prediction_regression.py | 2 +- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/frontend/pages/prediction_classification.py b/frontend/pages/prediction_classification.py index 20ae5e1..c11d7ee 100644 --- a/frontend/pages/prediction_classification.py +++ b/frontend/pages/prediction_classification.py @@ -1,11 +1,11 @@ import streamlit as st from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split -from sklearn.metrics import accuracy_score +from sklearn.metrics import accuracy_score,confusion_matrix from sklearn.preprocessing import LabelEncoder import pandas as pd import matplotlib.pyplot as plt - +import seaborn as sns st.header("Prediction: Classification") @@ -63,24 +63,20 @@ if "data" in st.session_state: st.write("Prediction:", prediction[0]) + if len(data_name) == 1: + fig = plt.figure() + y_pred = [model.predict(pd.DataFrame([pred_value[0]], columns=data_name)) for pred_value in X.values.tolist()] + print([x[0] for x in X.values.tolist()]) + cm = confusion_matrix(y, y_pred) + sns.heatmap(cm, annot=True, fmt="d") - fig = plt.figure() - dataframe_sorted = pd.concat([X, y], axis=1).sort_values(by=data_name) + plt.xlabel('Predicted') + plt.ylabel('True') - X = dataframe_sorted[data_name[0]] - y = dataframe_sorted[target_name] + st.pyplot(fig) - prediction_array_y = [ - model.predict(pd.DataFrame([[dataframe_sorted[data_name[0]].iloc[i]]], columns=data_name))[0] - for i in range(dataframe_sorted.shape[0]) - ] - - plt.scatter(dataframe_sorted[data_name[0]], dataframe_sorted[target_name], color='b') - plt.scatter(dataframe_sorted[data_name[0]], prediction_array_y, color='r') - - st.pyplot(fig) else: diff --git a/frontend/pages/prediction_regression.py b/frontend/pages/prediction_regression.py index 6d125e0..e06fa12 100644 --- a/frontend/pages/prediction_regression.py +++ b/frontend/pages/prediction_regression.py @@ -2,7 +2,6 @@ import streamlit as st from sklearn.linear_model import LinearRegression import pandas as pd import matplotlib.pyplot as plt -import numpy as np st.header("Prediction: Regression") @@ -31,6 +30,7 @@ if "data" in st.session_state: fig = plt.figure() dataframe_sorted = pd.concat([X, y], axis=1).sort_values(by=data_name) + if len(data_name) == 1: X = dataframe_sorted[data_name[0]] y = dataframe_sorted[target_name] From da1e97f07f3dca68e0762700ba4a1b79f023dad3 Mon Sep 17 00:00:00 2001 From: bastien ollier Date: Wed, 26 Jun 2024 10:59:25 +0200 Subject: [PATCH 4/5] add r2 score --- frontend/pages/prediction_classification.py | 6 +----- frontend/pages/prediction_regression.py | 5 +++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/frontend/pages/prediction_classification.py b/frontend/pages/prediction_classification.py index c11d7ee..bb6bb22 100644 --- a/frontend/pages/prediction_classification.py +++ b/frontend/pages/prediction_classification.py @@ -67,7 +67,6 @@ if "data" in st.session_state: fig = plt.figure() y_pred = [model.predict(pd.DataFrame([pred_value[0]], columns=data_name)) for pred_value in X.values.tolist()] - print([x[0] for x in X.values.tolist()]) cm = confusion_matrix(y, y_pred) sns.heatmap(cm, annot=True, fmt="d") @@ -75,9 +74,6 @@ if "data" in st.session_state: plt.xlabel('Predicted') plt.ylabel('True') - st.pyplot(fig) - - - + st.pyplot(fig, figsize=(1, 1)) else: st.error("File not loaded") diff --git a/frontend/pages/prediction_regression.py b/frontend/pages/prediction_regression.py index e06fa12..35b648d 100644 --- a/frontend/pages/prediction_regression.py +++ b/frontend/pages/prediction_regression.py @@ -1,5 +1,6 @@ import streamlit as st from sklearn.linear_model import LinearRegression +from sklearn.metrics import r2_score import pandas as pd import matplotlib.pyplot as plt @@ -21,6 +22,10 @@ if "data" in st.session_state: model = LinearRegression() model.fit(X, y) + y_pred = [model.predict(pd.DataFrame([pred_value[0]], columns=data_name)) for pred_value in X.values.tolist()] + r2 = r2_score(y, y_pred) + st.write('R-squared score:', r2) + st.subheader("Enter values for prediction") pred_values = [st.number_input(f"Value for {feature}", value=0.0) for feature in data_name] prediction = model.predict(pd.DataFrame([pred_values], columns=data_name)) From 9bc9e21e45412fca2f2ffce6230cb61573ad928c Mon Sep 17 00:00:00 2001 From: bastien ollier Date: Wed, 26 Jun 2024 11:05:04 +0200 Subject: [PATCH 5/5] add r2 score --- frontend/pages/prediction_regression.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/frontend/pages/prediction_regression.py b/frontend/pages/prediction_regression.py index 35b648d..a290c10 100644 --- a/frontend/pages/prediction_regression.py +++ b/frontend/pages/prediction_regression.py @@ -22,10 +22,6 @@ if "data" in st.session_state: model = LinearRegression() model.fit(X, y) - y_pred = [model.predict(pd.DataFrame([pred_value[0]], columns=data_name)) for pred_value in X.values.tolist()] - r2 = r2_score(y, y_pred) - st.write('R-squared score:', r2) - st.subheader("Enter values for prediction") pred_values = [st.number_input(f"Value for {feature}", value=0.0) for feature in data_name] prediction = model.predict(pd.DataFrame([pred_values], columns=data_name)) @@ -35,8 +31,11 @@ if "data" in st.session_state: fig = plt.figure() dataframe_sorted = pd.concat([X, y], axis=1).sort_values(by=data_name) - if len(data_name) == 1: + y_pred = [model.predict(pd.DataFrame([pred_value[0]], columns=data_name)) for pred_value in X.values.tolist()] + r2 = r2_score(y, y_pred) + st.write('R-squared score:', r2) + X = dataframe_sorted[data_name[0]] y = dataframe_sorted[target_name]