Briankabiru commited on
Commit
f9ad69d
1 Parent(s): d4e469a

Create README.md

Browse files
Files changed (1) hide show
  1. README.md +157 -0
README.md ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ datasets:
4
+ - custom
5
+ metrics:
6
+ - mean_squared_error
7
+ - mean_absolute_error
8
+ - r2_score
9
+ model_name: Fertilizer Recommendation System
10
+ tags:
11
+ - random-forest
12
+ - regression
13
+ - multioutput
14
+ - classification
15
+ - agriculture
16
+ - soil-nutrients
17
+ ---
18
+
19
+ # Fertilizer Recommendation System
20
+
21
+ ## Overview
22
+
23
+ This model predicts the fertilizer requirements for various crops based on input features such as crop type, target yield, field size, and soil properties. It utilizes a combination of Random Forest Regressor and Random Forest Classifier to predict both numerical values (e.g., nutrient needs) and categorical values (e.g., fertilizer application instructions).
24
+
25
+ ## Training Data
26
+
27
+ The model was trained on a custom dataset containing the following features:
28
+
29
+ - Crop Name
30
+ - Target Yield
31
+ - Field Size
32
+ - pH (water)
33
+ - Organic Carbon
34
+ - Total Nitrogen
35
+ - Phosphorus (M3)
36
+ - Potassium (exch.)
37
+ - Soil moisture
38
+
39
+ The target variables include:
40
+
41
+ **Numerical Targets**:
42
+ - Nitrogen (N) Need
43
+ - Phosphorus (P2O5) Need
44
+ - Potassium (K2O) Need
45
+ - Organic Matter Need
46
+ - Lime Need
47
+ - Lime Application - Requirement
48
+ - Organic Matter Application - Requirement
49
+ - 1st Application - Requirement (1)
50
+ - 1st Application - Requirement (2)
51
+ - 2nd Application - Requirement (1)
52
+
53
+ **Categorical Targets**:
54
+ - Lime Application - Instruction
55
+ - Lime Application
56
+ - Organic Matter Application - Instruction
57
+ - Organic Matter Application
58
+ - 1st Application
59
+ - 1st Application - Type fertilizer (1)
60
+ - 1st Application - Type fertilizer (2)
61
+ - 2nd Application
62
+ - 2nd Application - Type fertilizer (1)
63
+
64
+ ## Model Training
65
+
66
+ The model was trained using the following steps:
67
+
68
+ 1. **Data Preprocessing**:
69
+ - Handling missing values
70
+ - Scaling numerical features using `StandardScaler`
71
+ - One-hot encoding categorical features
72
+
73
+ 2. **Modeling**:
74
+ - Splitting the dataset into training and testing sets
75
+ - Training a `RandomForestRegressor` for numerical targets using a `MultiOutputRegressor`
76
+ - Training a `RandomForestClassifier` for categorical targets using a `MultiOutputClassifier`
77
+
78
+ 3. **Evaluation**:
79
+ - Evaluating the models using the test set with metrics like Mean Squared Error (MSE), Mean Absolute Error (MAE), and R-squared (R2) Score for regression, and accuracy for classification.
80
+
81
+ ## Evaluation Metrics
82
+
83
+ The model was evaluated using the following metrics:
84
+
85
+ - Mean Squared Error (MSE)
86
+ - Mean Absolute Error (MAE)
87
+ - R-squared (R2) Score
88
+ - Accuracy for categorical targets
89
+
90
+ ## How to Use
91
+
92
+ ### Input Format
93
+
94
+ The model expects input data in JSON format with the following fields:
95
+
96
+ - "Crop Name": String
97
+ - "Target Yield": Numeric
98
+ - "Field Size": Numeric
99
+ - "pH (water)": Numeric
100
+ - "Organic Carbon": Numeric
101
+ - "Total Nitrogen": Numeric
102
+ - "Phosphorus (M3)": Numeric
103
+ - "Potassium (exch.)": Numeric
104
+ - "Soil moisture": Numeric
105
+
106
+ ### Preprocessing Steps
107
+
108
+ 1. Load your input data.
109
+ 2. Ensure all required fields are present and in the expected format.
110
+ 3. Handle any missing values if necessary.
111
+ 4. Scale numerical features based on the training data.
112
+ 5. One-hot encode categorical features (if applicable).
113
+
114
+ ### Inference Procedure
115
+
116
+ ```python
117
+ from joblib import load
118
+ import pandas as pd
119
+
120
+ # Load the preprocessor and trained models
121
+ preprocessor = load('preprocessor.joblib')
122
+ numerical_model = load('numerical_model.joblib')
123
+ categorical_model = load('categorical_model.joblib')
124
+
125
+ # Example input data
126
+ new_data = {
127
+ 'Crop Name': 'maize(corn)',
128
+ 'Target Yield': 3600.0,
129
+ 'Field Size': 1.0,
130
+ 'pH (water)': 6.1,
131
+ 'Organic Carbon': 11.4,
132
+ 'Total Nitrogen': 1.1,
133
+ 'Phosphorus (M3)': 1.8,
134
+ 'Potassium (exch.)': 3.0,
135
+ 'Soil moisture': 20.0
136
+ }
137
+
138
+ # Preprocess the input data
139
+ input_df = pd.DataFrame([new_data])
140
+ input_transformed = preprocessor.transform(input_df)
141
+
142
+ # Make numerical predictions
143
+ numerical_predictions = numerical_model.predict(input_transformed)
144
+
145
+ # Make categorical predictions
146
+ categorical_predictions = categorical_model.predict(input_transformed)
147
+
148
+ # Decode categorical predictions
149
+ label_encoders = {col: load(f'label_encoder_{col}.joblib') for col in categorical_targets}
150
+ categorical_predictions_decoded = {col: label_encoders[col].inverse_transform(categorical_predictions[:, i]) for i, col in enumerate(categorical_targets)}
151
+
152
+ # Combine predictions into a single dictionary
153
+ predictions_combined = {**{col: numerical_predictions[0, i] for i, col in enumerate(numerical_targets)}, **categorical_predictions_decoded}
154
+
155
+ print("Predicted Fertilizer Requirements:")
156
+ for col, pred_value in predictions_combined.items():
157
+ print(f"{col}: {pred_value}")