ajout prediction classification

prediction
Hugo PRADIER 10 months ago
parent a914c3f8f9
commit 2d1c867bed

@ -1,7 +1,8 @@
import streamlit as st
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import LabelEncoder
import pandas as pd
st.header("Prediction: Classification")
@ -9,33 +10,54 @@ if "data" in st.session_state:
data = st.session_state.data
with st.form("classification_form"):
st.subheader("Random Forest Parameters")
data_name = st.multiselect("Features", data.select_dtypes(include="object").columns, help="Sélectionnez les caractéristiques pour l'entraînement.")
target_name = st.selectbox("Target", data.columns, help="Sélectionnez la variable cible pour l'entraînement.")
n_estimators = st.number_input("Number of estimators", step=1, min_value=1, value=100, help="Nombre d'arbres dans la forêt.")
max_depth = st.number_input("Max depth", step=1, min_value=1, value=10, help="Profondeur maximale des arbres.")
submit_button = st.form_submit_button('Train and Predict')
if submit_button and data_name and target_name:
st.subheader("Classification Parameters")
data_name = st.multiselect("Features", data.columns)
target_name = st.selectbox("Target", data.columns)
test_size = st.slider("Test Size", min_value=0.1, max_value=0.5, value=0.2, step=0.1)
st.form_submit_button('Train and Predict')
if data_name and target_name:
X = data[data_name]
y = data[target_name]
label_encoders = {}
for column in X.select_dtypes(include=['object']).columns:
le = LabelEncoder()
X = data[data_name].apply(le.fit_transform)
y = le.fit_transform(data[target_name])
X[column] = le.fit_transform(X[column])
label_encoders[column] = le
model = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, random_state=111)
model.fit(X, y)
st.subheader("Enter values for prediction")
if y.dtype == 'object':
le = LabelEncoder()
y = le.fit_transform(y)
label_encoders[target_name] = le
pred_values = [st.selectbox(f"Value for {feature}", options=data[feature].unique(), key=f"value_{feature}") for feature in data_name]
pred_values_encoded = [le.transform([val])[0] for val in pred_values]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=42)
prediction = model.predict([pred_values_encoded])
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
prediction_decoded = le.inverse_transform(prediction)
st.subheader("Model Accuracy")
st.write(f"Accuracy on test data: {accuracy:.2f}")
st.write("Prediction:", prediction_decoded[0])
st.subheader("Enter values for prediction")
pred_values = []
for feature in data_name:
if feature in label_encoders:
values = list(label_encoders[feature].classes_)
value = st.selectbox(f"Value for {feature}", values)
value_encoded = label_encoders[feature].transform([value])[0]
pred_values.append(value_encoded)
else:
value = st.number_input(f"Value for {feature}", value=0.0)
pred_values.append(value)
prediction = model.predict([pred_values])
if target_name in label_encoders:
prediction = label_encoders[target_name].inverse_transform(prediction)
st.write("Prediction:", prediction[0])
else:
st.error("File not loaded")

Loading…
Cancel
Save