Γεωργία και βαθιά μάθηση: Βελτίωση της απόδοσης του εδάφους και των καλλιεργειών

Γεωργία και βαθιά μάθηση: Βελτίωση της απόδοσης του εδάφους και των καλλιεργειών

Κόμβος πηγής: 3066255

Εισαγωγή

Η γεωργία είναι κάτι περισσότερο από μια απλή δουλειά για πολλούς Ινδούς. ειναι ΤΡΟΠΟΣ ΖΩΗΣ. Είναι το μέσο μέσω του οποίου στηρίζουν τα προς το ζην και συνεισφέρουν πάρα πολύ στην οικονομία της Ινδίας. Ο προσδιορισμός του τύπου του εδάφους που έχει τα σωματίδια αργίλου, άμμου και λάσπης στις αντίστοιχες αναλογίες είναι σημαντικός για την κατάλληλη επιλογή καλλιέργειας και τον προσδιορισμό της ανάπτυξης του ζιζανίου. Ανακαλύψτε τις δυνατότητες της Deep Learning στη Γεωργία. Κατανοήστε τη σημασία των τύπων εδάφους και της ανίχνευσης ζιζανίων για την Ινδία.

Βαθιά μάθηση είναι μια αναδυόμενη τεχνολογία που είναι χρήσιμη σε κάθε τομέα. Η βαθιά μάθηση έχει εφαρμοστεί ευρέως στην έξυπνη γεωργία σε όλες τις κλίμακες για παρακολούθηση αγρού, λειτουργία αγρού, ρομποτική, πρόβλεψη εδάφους, νερού, κλιματικών συνθηκών και παρακολούθηση τύπων γης και καλλιεργειών σε επίπεδο τοπίου. Μπορούμε να τροφοδοτήσουμε τη φωτογραφία του εδάφους σε μια αρχιτεκτονική βαθιάς μάθησης, να την καθοδηγήσουμε ώστε να μάθει να ανιχνεύει χαρακτηριστικά και, στη συνέχεια, να χρησιμοποιήσουμε την αρχιτεκτονική βαθιάς μάθησης για να ταξινομήσουμε το έδαφος.

Βαθιά μάθηση στη γεωργία

Σε αυτό το blog, θα συζητήσουμε τη σημασία του εδάφους στη γεωργία. Θα ταξινομήσουμε το έδαφος χρησιμοποιώντας μοντέλα μηχανικής μάθησης και βαθιάς μάθησης.

Στόχοι μάθησης

  • Θα καταλάβετε πόσο σημαντικό είναι το έδαφος στη γεωργία.
  • Θα μάθετε πώς οι αλγόριθμοι μηχανικής μάθησης μπορούν να ταξινομήσουν τους τύπους εδάφους.
  • Θα εφαρμόσετε ένα μοντέλο βαθιάς μάθησης στη γεωργία για να ταξινομήσετε τους τύπους εδάφους.
  • Εξερευνήστε την έννοια της εκμάθησης συνόλου πολλαπλών στοίβαξης για να αυξήσετε την ακρίβεια των προβλέψεών μας.

Αυτό το άρθρο δημοσιεύθηκε ως μέρος του Data Science Blogathon.

Πίνακας περιεχομένων

Ο ρόλος του εδάφους στη γεωργία

Η οργανική ύλη, τα μέταλλα, τα αέρια, τα υγρά και άλλες ουσίες που εκκρίνονται από φυτά και ζώα αποτελούν σημαντικό έδαφος, ένα θεμέλιο για τη γεωργία. Η βάση της γεωργίας βρίσκεται στα αέρια, τα μέταλλα, την οργανική ύλη και άλλες ουσίες που προέρχονται από φυτά και ζώα, που σχηματίζουν το εδαφικό σύστημα.

Η οικονομία της Ινδίας βασίζεται καθαρά στη γεωργία. το έδαφος είναι σημαντικό για τις καλλιέργειες και οδηγεί στην ανάπτυξη ανεπιθύμητων ζιζανίων λόγω της γονιμότητάς του.

Ο ρόλος του εδάφους στη γεωργία | Βαθιά μάθηση στη γεωργία

Η υγρασία και η θερμοκρασία είναι οι φυσικές μεταβλητές που επηρεάζουν το σχηματισμό πόρων και σωματιδίων στο έδαφος, επηρεάζοντας την ανάπτυξη των ριζών, τη διείσδυση του νερού και την ταχύτητα ανάδυσης των φυτών.

Κυρίως όμως, το έδαφος έχει σωματίδια άμμου και αργίλου. Ανάμεσα στα επικρατέστερα διαθέσιμα σωματίδια του εδάφους, ο πηλός είναι άφθονος στην περιοχή εξερεύνησης. Η διαθεσιμότητα σωματιδίων αργίλου στην επιφάνεια οφείλεται στην άφθονη διατροφή που παρέχεται. Η τύρφη και ο πηλός δεν υπάρχουν σχεδόν καθόλου. Το χώμα τύπου αργίλου είναι ευρύχωρο ενδιάμεσα, όπου συγκρατείται το νερό.

Σύνολο δεδομένων

Σύνδεσμος Kaggle

Σύνολο δεδομένων | Βαθιά μάθηση στη γεωργία
"
"
"
"

Η εξαγωγή χαρακτηριστικών είναι ένα από τα κύρια βήματα για τη δημιουργία ενός καλού μοντέλου βαθιάς μάθησης. Είναι σημαντικό να προσδιορίσετε χαρακτηριστικά που μπορεί να είναι απαραίτητα για τη δημιουργία των αλγορίθμων μηχανικής εκμάθησης. Θα χρησιμοποιήσουμε το Μαχώτας βιβλιοθήκη για την εξαγωγή χαρακτηριστικών του Haralick, τα οποία έχουν πληροφορίες για το χώρο και την υφή των εικόνων.

Θα χρησιμοποιήσουμε τη βιβλιοθήκη skimage για τη μετατροπή εικόνων σε κλίμακα του γκρι και για την εξαγωγή χαρακτηριστικών του ιστογράμματος κλίσης (HOG) που είναι χρήσιμες για την ανίχνευση αντικειμένων. Τέλος, θα συνδέσουμε τις τιμές των χαρακτηριστικών σε έναν πίνακα και αργότερα θα τις χρησιμοποιήσουμε σε αλγόριθμους μηχανικής εκμάθησης και βαθιάς μάθησης.

Εξαγωγή χαρακτηριστικών | Βαθιά μάθηση στη γεωργία
import mahotas as mh
from skimage import color, feature, io
import numpy as np

# Function to extract features from an image
def extract_features(image_path):
    img = io.imread(image_path)
    gray_img = color.rgb2gray(img)  # Converting image to grayscale
    
    # Converting the grayscale image to integer type
    gray_img_int = (gray_img * 255).astype(np.uint8)
    
    # Extracting Haralick features using mahotas
    haralick_features = mh.features.haralick(gray_img_int).mean(axis=0)
    
    # Extracting Histogram of Gradients (HOG) features
    hog_features, _ = feature.hog(gray_img, visualize=True)
    
    # Printing the first few elements of each feature array
    print("Haralick Features:", haralick_features[:5])
    print("HOG Features:", hog_features[:5])
    
    # Concatenating the features into a single array
    all_features = np.concatenate((haralick_features, hog_features))
    
    return all_features

image_path = '/kaggle/input/soil-classification-dataset/Soil-Dataset/Yellow Soil/20.jpg'
features = extract_features(image_path)
print("Extracted Features:", features)
"

Αλγόριθμοι Μηχανικής Μάθησης στην Ταξινόμηση Εδάφους

Τώρα, ας δημιουργήσουμε ένα μοντέλο μηχανικής μάθησης χρησιμοποιώντας τις εικόνες εδάφους που πήραμε από το Kaggle.

Πρώτα, θα εισαγάγουμε όλες τις βιβλιοθήκες και στη συνέχεια θα δημιουργήσουμε μια συνάρτηση με το όνομα εξαγωγή_χαρακτηριστικών για εξαγωγή χαρακτηριστικών από εικόνες. Στη συνέχεια, οι εικόνες εισάγονται και υποβάλλονται σε επεξεργασία, η οποία περιλαμβάνει τη μετατροπή σε κλίμακα του γκρι και, στη συνέχεια, έχουμε αυτές τις δυνατότητες. Στη συνέχεια, μετά την εξαγωγή των χαρακτηριστικών για κάθε εικόνα, οι ετικέτες κωδικοποιούνται χρησιμοποιώντας Κωδικοποιητής ετικετών.

import os
import numpy as np
import mahotas as mh
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report
from skimage import color, feature, io

# Function to extract features from an image
def extract_features(image_path):
    img = io.imread(image_path)
    gray_img = color.rgb2gray(img)  # Converting image to grayscale
    gray_img_int = (gray_img * 255).astype(np.uint8)
    haralick_features = mh.features.haralick(gray_img_int).mean(axis=0)
    hog_features, _ = feature.hog(gray_img, visualize=True)
    hog_features_flat = hog_features.flatten()  # Flattening the HOG features
    # Ensuring both sets of features have the same length
    hog_features_flat = hog_features_flat[:haralick_features.shape[0]]
    return np.concatenate((haralick_features, hog_features_flat))

data_dir = "/kaggle/input/soil-classification-dataset/Soil-Dataset"

image_paths = []
labels = []

class_indices = {'Black Soil': 0, 'Cinder Soil': 1, 'Laterite Soil': 2, 
'Peat Soil': 3, 'Yellow Soil': 4}

for soil_class, class_index in class_indices.items():
    class_dir = os.path.join(data_dir, soil_class)
    class_images = [os.path.join(class_dir, image) for image in os.listdir(class_dir)]
    image_paths.extend(class_images)
    labels.extend([class_index] * len(class_images))

# Extracting features from images
X = [extract_features(image_path) for image_path in image_paths]

# Encoding labels
le = LabelEncoder()
y = le.fit_transform(labels)

# Splitting the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Initializing and training a Random Forest Classifier
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
rf_classifier.fit(X_train, y_train)

# Making predictions
y_pred_rf = rf_classifier.predict(X_test)

# Evaluating the Random Forest model
accuracy_rf = accuracy_score(y_test, y_pred_rf)
report_rf = classification_report(y_test, y_pred_rf)

print("Random Forest Classifier:")
print("Accuracy:", accuracy_rf)
print("Classification Report:n", report_rf)
ΕΞΟΔΟΣ | Βαθιά μάθηση στη γεωργία
ΠΑΡΑΓΩΓΉ

Βαθιά Νευρωνικά Δίκτυα

Λειτουργεί με βάση τις υπολογιστικές μονάδες και τον αριθμό των νευρώνων. Κάθε νευρώνας δέχεται εισόδους και παρέχει έξοδο. Χρησιμοποιείται για να αυξήσει την ακρίβεια και να κάνει καλύτερες προβλέψεις, ενώ οι αλγόριθμοι μηχανικής μάθησης βασίζονται στην ερμηνεία των δεδομένων και οι αποφάσεις θα λαμβάνονται βάσει αυτών.

Επίσης, διαβάστε: Ένας εισαγωγικός οδηγός για τη βαθιά μάθηση και τα νευρωνικά δίκτυα

Τώρα, ας δημιουργήσουμε το μοντέλο που ορίζεται χρησιμοποιώντας το Sequential API από την Keras. Αυτό το μοντέλο θα έχει ένα στρώμα συνέλιξης Conv2D, MaxPooling2D, ένα επίπεδο ισοπέδωσης Flatten και πυκνά στρώματα Dense.

Τέλος, το μοντέλο συντάσσεται χρησιμοποιώντας το Αδάμ βελτιστοποιητής και κατηγορική απώλεια διασταυρούμενης εντροπίας.

import tensorflow as tf
from tensorflow.keras.preprocessing import image_dataset_from_directory

data_dir = "/kaggle/input/soil-classification-dataset/Soil-Dataset"

# Setting up data generators
batch_size = 32
image_size = (224, 224)

# Using image_dataset_from_directory to load and preprocess the images
train_dataset = image_dataset_from_directory(
    data_dir,
    labels='inferred',
    label_mode='categorical',
    validation_split=0.2,
    subset='training',
    seed=42,
    image_size=image_size,
    batch_size=batch_size,
)

validation_dataset = image_dataset_from_directory(
    data_dir,
    labels='inferred',
    label_mode='categorical',
    validation_split=0.2,
    subset='validation',
    seed=42,
    image_size=image_size,
    batch_size=batch_size,
)

# Displaying the class indices
print("Class indices:", train_dataset.class_names)

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(len(train_dataset.class_names), activation='softmax')
])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# Training the model
epochs = 10
history = model.fit(train_dataset, epochs=epochs, validation_data=validation_dataset)
"
import numpy as np
from tensorflow.keras.preprocessing import image

# Function to load and preprocess an image for prediction
def load_and_preprocess_image(img_path):
    img = image.load_img(img_path, target_size=image_size)
    img_array = image.img_to_array(img)
    img_array = np.expand_dims(img_array, axis=0)
    img_array /= 255.0  
    return img_array

image_path = '/kaggle/input/soil-classification-dataset/Soil-Dataset/Peat Soil/13.jpg'
new_image = load_and_preprocess_image(image_path)

# Making predictions
predictions = model.predict(new_image)
predicted_class = np.argmax(predictions[0])

# Getting the class label based on the class indices
class_labels = {0: 'Black Soil', 1: 'Cinder Soil', 2: 'Laterite Soil',
 3: 'Peat Soil', 4: 'Yellow Soil'}
predicted_label = class_labels[predicted_class]

# Displaying the prediction
print("Predicted Class:", predicted_class)
print("Predicted Label:", predicted_label)
ΠΑΡΑΓΩΓΉ
ΠΑΡΑΓΩΓΉ

Όπως μπορείτε να δείτε, η προβλεπόμενη κλάση είναι 0, που είναι Μαύρο Έδαφος. Έτσι, το μοντέλο μας ταξινομεί σωστά τον τύπο του εδάφους.

Προτεινόμενες αρχιτεκτονικές μοντέλων εκμάθησης συνόλου πολλαπλών στοίβαξης

Η StackingClassifier αρχικοποιείται με τους baseClassifiers και α λογική παλινδρόμηση μετα-ταξινομητής τελικός_εκτιμητής. Αυτό συνδυάζει τις εξόδους των baseClassifiers για να κάνει μια τελική πρόβλεψη. Στη συνέχεια, μετά την εκπαίδευση και την πρόβλεψη, υπολογίζεται η ακρίβεια.

base_classifiers = [
    ('rf', RandomForestClassifier(n_estimators=100, random_state=42)),
    ('knn', KNeighborsClassifier(n_neighbors=5)),
    ('svm', SVC(kernel='rbf', C=1.0, probability=True)),
    ('nb', GaussianNB())
]

# Initializing the stacking classifier with a logistic regression meta-classifier
stacking_classifier = StackingClassifier(estimators=base_classifiers, 
final_estimator=LogisticRegression())

# Training the stacking classifier
stacking_classifier.fit(X_train, y_train)

# Making predictions with Stacking Classifier
y_pred_stacking = stacking_classifier.predict(X_test)

# Evaluating the Stacking Classifier model
accuracy_stacking = accuracy_score(y_test, y_pred_stacking)
report_stacking = classification_report(y_test, y_pred_stacking)

print("nStacking Classifier:")
print("Accuracy:", accuracy_stacking)
print("Classification Report:n", report_stacking)
"

Συμπέρασμα

Το έδαφος είναι ένα σημαντικό στοιχείο για την απόδοση μιας καλής καλλιέργειας. Είναι σημαντικό να γνωρίζετε ποιος τύπος εδάφους είναι απαραίτητος για την παραγωγή της συγκεκριμένης καλλιέργειας. Έτσι, η ταξινόμηση του τύπου του εδάφους γίνεται σημαντική. Δεδομένου ότι η χειροκίνητη ταξινόμηση του τύπου εδάφους είναι μια χρονοβόρα εργασία, επομένως η χρήση μοντέλων βαθιάς μάθησης για την ταξινόμησή τους γίνεται εύκολη. Υπάρχουν πολλά μοντέλα μηχανικής εκμάθησης και μοντέλα βαθιάς μάθησης για την εφαρμογή αυτής της δήλωσης προβλήματος. Η επιλογή του καλύτερου εξαρτάται από την ποιότητα και την ποσότητα των δεδομένων που υπάρχουν στο σύνολο δεδομένων και από τη δήλωση προβλήματος. Ένας άλλος τρόπος για να επιλέξετε τον καλύτερο αλγόριθμο είναι με την αξιολόγηση του καθενός. Μπορούμε να το κάνουμε αυτό μετρώντας την ακρίβεια, με το πόσο μπορούν να ταξινομήσουν σωστά το έδαφος. Τέλος, εφαρμόσαμε ένα μοντέλο συνόλου Multi-Stacking, χρησιμοποιώντας πολλαπλά μοντέλα για την κατασκευή του καλύτερου μοντέλου.

Βασικές τακτικές

  • Για την αποτελεσματική επιλογή των καλλιεργειών, θα πρέπει κανείς να κατανοήσει πλήρως το έδαφος.
  • Η βαθιά μάθηση στη γεωργία είναι ένα ισχυρό εργαλείο, από την πρόβλεψη ασθενειών των φυτών έως τους τύπους εδάφους και τις ανάγκες σε νερό.
  • Έχουμε κάνει εξαγωγή χαρακτηριστικών για να λάβουμε χαρακτηριστικά από εικόνες εδάφους.
  • Σε αυτό το ιστολόγιο, εξερευνήσαμε μοντέλα μηχανικής μάθησης και βαθιάς μάθησης για την ταξινόμηση του εδάφους και ένα μοντέλο συνόλου πολλαπλών στοίβων για βελτιωμένη ακρίβεια.

Συχνές Ερωτήσεις

Q1. Γιατί είναι σημαντική η σωστή ταξινόμηση του εδάφους στη γεωργία;

Α. Είναι σημαντικό για την κατάλληλη επιλογή καλλιέργειας και τον εντοπισμό της ανάπτυξης ζιζανίων.

Ε2. Ποια είναι τα βασικά χαρακτηριστικά που λαμβάνονται υπόψη στην αναγνώριση του εδάφους;

Α. Τα χαρακτηριστικά, συμπεριλαμβανομένης της άμμου, του αργίλου, της λάσπης, της τύρφης και του αργιλίου, λαμβάνονται υπόψη.

Ε3. Πώς διαφέρει η βαθιά εκμάθηση από την παραδοσιακή μηχανική εκμάθηση σε αυτό το θέμα;

Α. Η βαθιά μάθηση επιτρέπει στο μοντέλο να λαμβάνει έξυπνες αποφάσεις, ενώ η παραδοσιακή μηχανική μάθηση λαμβάνει αποφάσεις ερμηνεύοντας δεδομένα.

Q4. Ποιος είναι ο ρόλος του προτεινόμενου μοντέλου συνόλου Multi-Stacking;

Α. Το μοντέλο συνόλου Multi-Stacking αυξάνει την ακρίβεια της ταξινόμησης του τύπου εδάφους.

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του συγγραφέα.

Σφραγίδα ώρας:

Περισσότερα από Ανάλυση Vidhya