Сільське господарство та глибоке навчання: покращення ґрунту та врожайності

Сільське господарство та глибоке навчання: покращення ґрунту та врожайності

Вихідний вузол: 3066255

Вступ

Для багатьох індійців сільське господарство — це більше, ніж просто робота; це спосіб життя. Це засіб, за допомогою якого вони забезпечують собі засоби до існування та роблять величезний внесок в економіку Індії. Визначення типу ґрунту, який містить частинки глини, піску та мулу у відповідних пропорціях, є важливим для вибору відповідної культури та визначення росту бур’янів. Відкрийте для себе потенціал глибокого навчання в сільському господарстві. Зрозумійте важливість типів ґрунтів і виявлення бур’янів для Індії.

Глибоке навчання це нова технологія, яка корисна в усіх сферах. Глибоке навчання широко застосовується в інтелектуальному сільському господарстві в різних масштабах для моніторингу полів, польових робіт, робототехніки, прогнозування ґрунту, води, кліматичних умов, а також моніторингу земель і типів культур на рівні ландшафту. Ми можемо передати фотографію ґрунту в архітектуру глибокого навчання, навчити її виявляти особливості, а потім використовувати архітектуру глибокого навчання для класифікації ґрунту.

Глибоке навчання в сільському господарстві

У цьому блозі ми обговоримо важливість ґрунту в сільському господарстві. Ми будемо класифікувати ґрунт за допомогою моделей машинного та глибокого навчання.

Мета навчання

  • Ви зрозумієте, наскільки важливий ґрунт у сільському господарстві.
  • Ви дізнаєтесь, як алгоритми машинного навчання можуть класифікувати типи ґрунтів.
  • Ви запровадите модель глибокого навчання в сільському господарстві для класифікації типів ґрунтів.
  • Ознайомтеся з концепцією навчання ансамблю з кількома накопиченнями, щоб підвищити точність наших прогнозів.

Ця стаття була опублікована як частина Blogathon Data Science.

Зміст

Роль ґрунту в сільському господарстві

Органічні речовини, мінерали, гази, рідини та інші речовини, що виділяються з рослин і тварин, утворюють важливий ґрунт, основу для сільського господарства. Основою сільського господарства є гази, мінерали, органічні речовини та інші речовини, які надходять від рослин і тварин, утворюючи ґрунтову систему.

Економіка Індії повністю залежить від сільського господарства; ґрунт важливий для сільськогосподарських культур, і завдяки своїй родючості він призводить до розвитку небажаних бур’янів.

Роль ґрунту в сільському господарстві | Глибоке навчання в сільському господарстві

Вологість і температура є фізичними змінними, які впливають на утворення пор і частинок у ґрунті, впливаючи на ріст коренів, проникнення води та швидкість сходів рослин.

Але в основному в грунті присутні частинки піску і глини. Серед переважно доступних частинок ґрунту на дослідницькому місці є велика кількість глини. Наявність частинок глини на поверхні пояснюється рясним живленням. Торф і суглинки майже не присутні. Глинистий ґрунт просторий між ними, де вода утримується.

Набір даних

Kaggle Link

Набір даних | Глибоке навчання в сільському господарстві
"
"
"
"

Вилучення ознак є одним із основних кроків у побудові хорошої моделі глибокого навчання. Важливо визначити функції, які можуть знадобитися для створення алгоритмів машинного навчання. Ми будемо використовувати Махотас бібліотека для вилучення характеристик 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 ініціалізується базовими класифікаторами та a логістична регресія мета-класифікатор остаточний_оцінювач. Це об’єднує результати базових класифікаторів, щоб зробити остаточний прогноз. Потім, після навчання і прогнозування, розраховується точність.

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. Чому в сільському господарстві важлива правильна класифікація ґрунту?

A. Це важливо для правильного вибору культури та виявлення росту бур’янів.

Q2. Які ключові ознаки враховуються при ідентифікації ґрунту?

A. Враховуються особливості, включаючи пісок, глину, мул, торф і суглинок.

Q3. Чим глибоке навчання відрізняється від традиційного машинного навчання в цій темі?

A. Глибоке навчання дозволяє моделі приймати розумні рішення, тоді як традиційне машинне навчання приймає рішення шляхом інтерпретації даних.

Q4. Яка роль запропонованої моделі ансамблю Multi-Stacking?

A. Ансамблева модель Multi-Stacking підвищує точність класифікації типу ґрунту.

Медіафайли, показані в цій статті, не належать Analytics Vidhya та використовуються на розсуд Автора.

Часова мітка:

Більше від Аналітика Vidhya