JEPHONETORRE's picture
1st commit
f08ef39
raw
history blame
3.13 kB
import streamlit as st
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
import joblib
from huggingface_hub import hf_hub_download, upload_file
# Load or initialize the model
def load_model():
try:
# Attempt to download model from Hugging Face
model_path = hf_hub_download(repo_id="your-huggingface-repo", filename="crop_yield_model.pkl")
model = joblib.load(model_path)
return model
except Exception as e:
st.warning("Model not found on Hugging Face. Initializing a new one.")
# Initialize with dummy training data
model = LinearRegression()
dummy_features = np.array([[100, 50, 25]]) # Example realistic values for rainfall, fertilizer, temperature
dummy_target = np.array([2]) # Example realistic yield value
model.fit(dummy_features, dummy_target)
return model
def save_model(model):
joblib.dump(model, "crop_yield_model.pkl")
upload_file(
path_or_fileobj="crop_yield_model.pkl",
path_in_repo="crop_yield_model.pkl",
repo_id="your-huggingface-repo",
repo_type="model",
)
# Streamlit app
st.title("Crop Yield Prediction")
# Input features
st.sidebar.header("Input Features")
rainfall = st.sidebar.number_input("Rainfall (mm)", min_value=0.0, max_value=5000.0, step=0.1)
fertilizer = st.sidebar.number_input("Fertilizer Used (kg/ha)", min_value=0.0, max_value=1000.0, step=0.1)
temperature = st.sidebar.number_input("Temperature (°C)", min_value=-10.0, max_value=50.0, step=0.1)
# Train new model option
train_new = st.sidebar.checkbox("Train New Model")
# Load data for training if needed
if train_new:
st.sidebar.header("Training Data")
uploaded_file = st.sidebar.file_uploader("Upload a CSV file", type="csv")
if uploaded_file:
data = pd.read_csv(uploaded_file)
st.write("### Training Data Preview", data.head())
features = data[["Rainfall", "Fertilizer", "Temperature"]]
target = data["Yield"]
# Train model
model = LinearRegression()
model.fit(features, target)
save_model(model)
st.success("Model trained and saved successfully!")
else:
st.warning("Please upload a CSV file to train a new model.")
else:
model = load_model()
# Predict crop yield
if st.button("Predict Crop Yield"):
if model is not None:
input_data = np.array([[rainfall, fertilizer, temperature]])
try:
prediction = model.predict(input_data)
st.write(f"### Predicted Crop Yield: {prediction[0]:.2f} tons/ha")
except Exception as e:
st.error("An error occurred during prediction. Please ensure the model is properly trained.")
else:
st.warning("Model not found or not trained. Please train a new model.")
# Notes for Hugging Face integration
st.sidebar.markdown("---")
st.sidebar.write("Hugging Face Integration:")
st.sidebar.write("- Replace `your-huggingface-repo` with your repository name.")
st.sidebar.write("- Ensure the repository permissions allow model uploads and downloads.")