חקלאות ולמידה עמוקה: שיפור תפוקת קרקע ויבול

חקלאות ולמידה עמוקה: שיפור תפוקת קרקע ויבול

צומת המקור: 3066255

מבוא

חקלאות היא יותר מסתם עבודה עבור הודים רבים; זו דרך חיים. זה האמצעי שבאמצעותו הם תומכים בפרנסתם ותורמים רבות לכלכלת הודו. קביעת סוג הקרקע שבה חלקיקי החימר, החול והסחף נמצאים בפרופורציות המתאימות חשובה לבחירת יבול מתאימה ולזיהוי צמיחת העשב. גלה את הפוטנציאל של למידה עמוקה בחקלאות. הבן את החשיבות של סוגי קרקע ואיתור עשבים עבור הודו.

למידה עמוקה היא טכנולוגיה מתפתחת המועילה בכל תחום. למידה עמוקה יושמה באופן פופולרי בחקלאות חכמה על פני קנה מידה לניטור שדה, תפעול שדה, רובוטיקה, חיזוי קרקע, מים, תנאי אקלים וניטור קרקע וסוגי יבול ברמת הנוף. אנחנו יכולים להזין את תמונת האדמה לארכיטקטורת למידה עמוקה, להנחות אותה ללמוד לזהות תכונות, ולאחר מכן להשתמש בארכיטקטורת הלמידה העמוקה כדי לסווג את האדמה.

למידה עמוקה בחקלאות

בבלוג זה נדון בחשיבות הקרקע בחקלאות. נסווג קרקע באמצעות מודלים של למידת מכונה ולמידה עמוקה.

מטרות למידה

  • אתה תבין כמה חשובה האדמה בחקלאות.
  • תלמד כיצד אלגוריתמים של למידת מכונה יכולים לסווג סוגי קרקע.
  • תוכלו ליישם מודל למידה עמוקה בחקלאות לסיווג סוגי קרקע.
  • חקור את הרעיון של לימוד אנסמבל רב-ערימה כדי להגביר את הדיוק של התחזיות שלנו.

מאמר זה פורסם כחלק מה- בלוגתון מדעי הנתונים.

תוכן העניינים

תפקידה של הקרקע בחקלאות

חומרים אורגניים, מינרלים, גזים, נוזלים וחומרים אחרים המופרשים מצמחים ובעלי חיים יוצרים אדמה חשובה, בסיס לחקלאות. הבסיס של החקלאות טמון בגזים, במינרלים, בחומר אורגני ובשאר החומרים המגיעים מצמחים ובעלי חיים ויוצרים את מערכת הקרקע.

כלכלת הודו מסתמכת אך ורק על חקלאות; האדמה חשובה לגידולים, והיא מובילה להתפתחות של עשבים לא רצויים בשל פוריותה.

תפקיד הקרקע בחקלאות | למידה עמוקה בחקלאות

לחות וטמפרטורה הם המשתנים הפיזיים המשפיעים על היווצרות נקבוביות וחלקיקים באדמה, ומשפיעים על צמיחת השורשים, חדירת המים ומהירות הופעת הצמח.

אבל בעיקר, באדמה יש חלקיקים של חול וחמר. בין חלקיקי האדמה הזמינים בדרך כלל, חימר נמצא בשפע באתר החקר. הזמינות של חלקיקי חימר על פני השטח נובעת מהתזונה הרב שסופקה. הכבול והחמור כמעט ולא נמצאים. האדמה מסוג חימר מרווחת ביניהן, שבה המים נשמרים.

מערך נתונים

קישור Kaggle

מערך נתונים | למידה עמוקה בחקלאות
"
"
"
"

מיצוי תכונות הוא אחד השלבים העיקריים בבניית מודל טוב ללמידה עמוקה. חשוב לזהות תכונות שעשויות להיות נחוצות לבניית אלגוריתמי למידת מכונה. נשתמש ב- מהוטות ספרייה כדי לחלץ תכונות של Haralick, שיש בהן מידע מרחבי ומרקם של התמונות.

אנו נשתמש בספריית skiimage כדי להמיר תמונות לגווני אפור וכדי לחלץ תכונות היסטוגרמה של Gradient (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.

ראשית, נייבא את כל הספריות ולאחר מכן נבנה פונקציה בשם extract_features כדי לחלץ תכונות מתמונות. לאחר מכן התמונות מיובאות ומעובדות, הכוללות המרה לגווני אפור, ואז אנו מקבלים את התכונות הללו. לאחר מכן, לאחר חילוץ תכונות עבור כל תמונה, תוויות מקודדות באמצעות מקודד תווית.

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 Convolution, MaxPooling2D, שכבת שטוחה Flatten ושכבות צפופות.

לבסוף, המודל מורכב באמצעות ה אדם מייעל ואובדן צולב אנטרופיה קטגורי.

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 ו-a - רגרסיה לוגיסטית מטה מסווג סופי_אומד. זה משלב את הפלטים של ה-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)
"

סיכום

אדמה היא מרכיב חשוב ביצירת יבול טוב. חשוב לדעת איזה סוג אדמה נחוץ כדי לייצר את היבול הספציפי הזה. אז, סיווג סוג הקרקע הופך להיות חשוב. מכיוון שסיווג ידני של סוג הקרקע הוא משימה שגוזלת זמן, ולכן השימוש במודלים של למידה עמוקה לסיווגם הופך להיות קל. ישנם מודלים רבים של למידת מכונה ומודלים של למידה עמוקה ליישום הצהרת בעיה זו. הבחירה הטובה ביותר תלויה באיכות ובכמות הנתונים הקיימים במערך הנתונים ובהצהרת הבעיה שליד. דרך נוספת לבחור את האלגוריתם הטוב ביותר היא על ידי הערכה של כל אחד מהם. אנחנו יכולים לעשות זאת על ידי מדידת הדיוק, לפי כמה הם יכולים לסווג נכון את האדמה. לבסוף, הטמענו מודל אנסמבל רב-ערימה, תוך שימוש במספר מודלים כדי לבנות את המודל הטוב ביותר.

המנות העיקריות

  • לבחירת יבול יעילה, יש להבין את האדמה לחלוטין.
  • למידה עמוקה בחקלאות היא כלי רב עוצמה, מחיזוי מחלות צמחים ועד סוגי קרקע וצרכי ​​מים.
  • עשינו חילוץ תכונות כדי לקבל תכונות מתמונות אדמה.
  • בבלוג זה, חקרנו מודלים של למידת מכונה ולמידה עמוקה לסיווג אדמה ומודל אנסמבל רב-ערים לשיפור הדיוק.

שאלות נפוצות

שאלה 1. מדוע סיווג נכון של קרקע חשוב בחקלאות?

א. חשוב לבחירת יבול מתאימה ולזיהוי צמיחת עשבים.

שאלה 2. מהן המאפיינים העיקריים הנחשבים בזיהוי קרקע?

א. תכונות, לרבות חול, חימר, סחופת, כבול וחצץ, נחשבות.

שאלה 3. במה שונה למידה עמוקה מלמידת מכונה מסורתית בנושא זה?

א. למידה עמוקה מאפשרת למודל לקבל החלטות אינטליגנטיות, בעוד שלמידת מכונה מסורתית מקבלת החלטות על ידי פרשנות נתונים.

שאלה 4. מה תפקידו של המודל המוצע של אנסמבל ה-Multi-Stacking?

א. מודל ההרכב Multi-Stacking מגביר את הדיוק בסיווג סוג הקרקע.

המדיה המוצגת במאמר זה אינה בבעלות Analytics Vidhya והיא משמשת לפי שיקול דעתו של המחבר.

בול זמן:

עוד מ אנליטיקה וידיה