File size: 3,662 Bytes
c5c9dba a3d8df2 2907ba4 a3d8df2 93b3457 2907ba4 70716fb a3d8df2 35c2cfe 2907ba4 93b3457 70716fb a3d8df2 c5c9dba 2907ba4 c5c9dba 93b3457 c5c9dba bfa9489 4ec5db2 2907ba4 25d439e 2907ba4 4ec5db2 2907ba4 bfa9489 2907ba4 4ec5db2 2907ba4 bfa9489 2907ba4 a3d8df2 c5c9dba a3d8df2 3054620 a3d8df2 c5c9dba |
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 |
import gradio as gr
import numpy as np
import pickle
# Cargar el modelo
with open('model_rf.pkl', 'rb') as file:
rf = pickle.load(file)
# Cargar el scaler
with open('my-standard-scaler.pkl', 'rb') as file:
s_c = pickle.load(file)
# Definir la función de predicción
def predict_1(SOC: float):
SOC = SOC/1.724 # SOC <- MO/1.724
prediction = 1.58 + np.exp(-0.07*SOC)
return prediction.round(2)
def predict_2(SOC: float, Cy: float):
SOC = SOC/1.724 # SOC <- MO/1.724
prediction = np.array(2.03 - 0.008*Cy - 0.008*SOC)
return prediction.round(2)
def predict_3(SOC: float, Cy: float, eCa: float, eMg: float, eK: float, eNa: float, eAlH: float):
SOC = SOC/1.724 # SOC <- MO/1.724
ECEC = eCa + eMg + eK + eNa + eAlH
xK = eK/ECEC
prediction = np.array(1.53 - 0.076*SOC + 0.004*Cy - 2.04*xK)
return prediction.round(2)
def predict_4(pH: float, EC: float, CCE: float, SOC: float, Sa: float, Si: float,
Cy: float, CEC: float, eCa: float, eMg: float, eK: float, eNa: float, eAlH: float):
SOC = SOC/1.724 # SOC <- MO/1.724
ECEC = eCa + eMg + eK + eNa + eAlH
xCa = eCa/ECEC
xMg = eMg/ECEC
xK = eK/ECEC
xNa = eNa/ECEC
xAlH = eAlH/ECEC
BS1 = (eCa + eMg + eK + eNa)/CEC
BS2 = (eCa + eMg + eK + eNa)/ECEC
input_features = np.array([[pH, EC, CCE, SOC, Sa, Si, Cy, CEC, ECEC, xCa, xMg, xK, xNa, xAlH, BS1, BS2]])
input_features_scale = s_c.transform(input_features)
prediction = rf.predict(input_features_scale)[0].round(2)
return prediction
# Crear la interfaz Gradio
with gr.Blocks() as demo:
gr.Markdown("# Estimar la densidad aparente del suelo")
with gr.Row():
with gr.Column():
SOC = gr.Number(label="MO (%)", value=2.9408, interactive=True)
eK = gr.Number(label="K (meq/100g)", value=0.47, interactive=True)
pH = gr.Number(label="pH (1:1)", value=7.09, interactive=True)
EC = gr.Number(label="C.E. (dS/m)", value=0.31, interactive=True)
with gr.Column():
Cy = gr.Number(label="Arcilla (%)", value=31.0, interactive=True)
eNa = gr.Number(label="Na (meq/100g)", value=0.15, interactive=True)
CCE = gr.Number(label="CaCO3 (%)", value=0.20, interactive=True)
with gr.Column():
eCa = gr.Number(label="Ca (meq/100g)", value=19.44, interactive=True)
eAlH = gr.Number(label="Al + H (meq/100g)", value=0.0, interactive=True)
Si = gr.Number(label="Limo (%)", value=24.0, interactive=True)
with gr.Column():
eMg = gr.Number(label="Mg (meq/100g)", value=3.47, interactive=True)
Sa = gr.Number(label="Arena (%)", value=45.0, interactive=True)
CEC = gr.Number(label="CIC (meq/100g)", value=23.52, interactive=True)
with gr.Row():
with gr.Column():
submit_1 = gr.Button(value='Abdelbaki')
with gr.Column():
submit_2 = gr.Button(value='Benites')
with gr.Column():
submit_3 = gr.Button(value='MLRegression')
with gr.Column():
submit_4 = gr.Button(value='Random Forest')
output = gr.Textbox(label=": soil bulk density", interactive=False)
submit_1.click(predict_1, inputs=[SOC], outputs=[output])
submit_2.click(predict_2, inputs=[SOC, Cy], outputs=[output])
submit_3.click(predict_3, inputs=[SOC, Cy, eCa, eMg, eK, eNa, eAlH], outputs=[output])
submit_4.click(predict_4, inputs=[pH , EC, CCE, SOC, Sa, Si, Cy, CEC, eCa, eMg, eK, eNa, eAlH], outputs=[output])
demo.launch(share=False, debug=False) |