Mezőgazdaság és mélyreható tanulás: a talaj és a terméshozam javítása

Mezőgazdaság és mélyreható tanulás: a talaj és a terméshozam javítása

Forrás csomópont: 3066255

Bevezetés

A mezőgazdaság sok indiai számára több, mint munka; ez egy életforma. Ez az az eszköz, amellyel támogatják megélhetésüket, és óriási mértékben hozzájárulnak India gazdaságához. Az agyag-, homok- és iszapszemcséket megfelelő arányban tartalmazó talaj típusának meghatározása fontos a megfelelő növényválasztáshoz és a gyomnövények növekedésének azonosításához. Fedezze fel a mély tanulásban rejlő lehetőségeket a mezőgazdaságban. Ismerje meg a talajtípusok és a gyomok kimutatásának fontosságát Indiában.

Mély tanulás egy feltörekvő technológia, amely minden területen hasznos. A mély tanulást az intelligens mezőgazdaságban széles körben alkalmazzák a szántóföldi megfigyelés, a szántóföldi műveletek, a robotika, a talaj-, víz-, éghajlati viszonyok előrejelzésére, valamint tájszintű föld- és növényfajták megfigyelésére. A talaj fotóját betáplálhatjuk egy mély tanulási architektúrába, irányíthatjuk, hogy megtanulja felismerni a jellemzőket, majd a mélytanulási architektúra segítségével osztályozzuk a talajt.

Mély tanulás a mezőgazdaságban

Ebben a blogban a talaj mezőgazdaságban betöltött fontosságáról fogunk beszélni. A talaj osztályozását gépi tanulási és mély tanulási modellekkel fogjuk végezni.

Tanulási célok

  • Meg fogja érteni, milyen fontos a talaj a mezőgazdaságban.
  • Megtanulja, hogy a gépi tanulási algoritmusok hogyan osztályozhatják a talajtípusokat.
  • Mély tanulási modellt fog alkalmazni a mezőgazdaságban a talajtípusok osztályozására.
  • Fedezze fel a több halmozású együttes tanulás koncepcióját, hogy növelje előrejelzéseink pontosságát.

Ez a cikk részeként jelent meg Adattudományi Blogaton.

Tartalomjegyzék

A talaj szerepe a mezőgazdaságban

A növényekből és állatokból kiürült szerves anyagok, ásványok, gázok, folyadékok és egyéb anyagok fontos talajt, a mezőgazdaság alapját képezik. A mezőgazdaság alapja a növényekből és állatokból származó gázokban, ásványi anyagokban, szerves anyagokban és egyéb anyagokban rejlik, amelyek a talajrendszert alkotják.

India gazdasága tisztán a mezőgazdaságra támaszkodik; a talaj fontos a növények számára, termékenysége miatt nemkívánatos gyomok kialakulásához vezet.

A talaj szerepe a mezőgazdaságban | Mély tanulás a mezőgazdaságban

A nedvesség és a hőmérséklet azok a fizikai változók, amelyek befolyásolják a pórusok és részecskék képződését a talajban, befolyásolva a gyökérnövekedést, a víz beszivárgását és a növények kelési sebességét.

De főleg a talajban vannak homok- és agyagrészecskék. A túlnyomóan elérhető talajrészecskék közepette agyag bőven található a kutatási területen. Az agyagrészecskék a felszínen való elérhetősége a bőséges tápanyagnak köszönhető. Tőzeg és vályog alig van jelen. Az agyagos talaj között tágas, a víz visszatartja.

adatbázisba

Kaggle Link

Adatkészlet | Mély tanulás a mezőgazdaságban
"
"
"
"

A jellemzők kinyerése a jó mélytanulási modell felépítésének egyik fő lépése. Fontos azonosítani azokat a funkciókat, amelyek szükségesek lehetnek a gépi tanulási algoritmusok felépítéséhez. Használjuk a Mahotas könyvtárat a Haralick-jellemzők kinyeréséhez, amelyek a képek tér- és textúrájával rendelkeznek.

A képtárat használjuk a képek szürkeárnyalatossá alakítására, valamint az objektumészlelésnél hasznos Gradient hisztogram (HOG) funkciók kinyerésére. Végül a funkciók értékeit összefűzzük egy tömbbe, és később felhasználjuk őket a gépi tanulásban és a mélytanulási algoritmusokban.

Funkció kivonás | Mély tanulás a mezőgazdaságban
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)
"

Gépi tanulási algoritmusok a talajosztályozásban

Most építsünk egy gépi tanulási modellt a Kaggle-től kapott talajképek felhasználásával.

Először az összes könyvtárat importáljuk, majd létrehozunk egy nevű függvényt kivonat_szolgáltatások hogy vonásokat vonjunk ki a képekből. A képeket ezután importálják és feldolgozzák, ami magában foglalja a szürkeárnyalatos átalakítást is, majd megkapjuk ezeket a funkciókat. Ezután az egyes képek jellemzőinek kinyerése után a címkék kódolása történik Címkekódoló.

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)
KIMENET | Mély tanulás a mezőgazdaságban
KIMENET

Mély neurális hálózatok

A számítási egységek és a neuronok száma alapján működik. Minden neuron fogad bemenetet és kimenetet biztosít. A pontosság növelésére és jobb előrejelzések készítésére szolgál, míg a gépi tanulási algoritmusok az adatok értelmezésére támaszkodnak, és ezek alapján születnek döntések.

Is Read: Bevezető útmutató a mély tanuláshoz és a neurális hálózatokhoz

Most építsük fel a Keras Sequential API-jával definiált modellt. Ennek a modellnek lesz egy Conv2D konvolúciós rétege, a MaxPooling2D, egy lapító rétege Flatten és egy sűrű rétege, a Dense.

Végül a modellt a Ádám optimalizáló és kategorikus keresztentrópia veszteség.

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)
KIMENET
KIMENET

Amint látja, a megjósolt osztály 0, ami a Black Soil. Tehát modellünk helyesen osztályozza a talaj típusát.

Javasolt többrétegű együttes tanulási modellarchitektúrák

A StackingClassifier a baseClassifiers és a logisztikus regresszió meta-osztályozó végső_becslő. Ez egyesíti a baseClassifiers kimeneteit, hogy végső előrejelzést készítsen. Ezután edzés és előrejelzés után kiszámítják a pontosságot.

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)
"

Következtetés

A talaj fontos eleme a jó terméshozamnak. Fontos tudni, hogy milyen talajtípus szükséges az adott növény termesztéséhez. Ezért fontos a talaj típusának osztályozása. Mivel a talajtípus manuális osztályozása időigényes feladat, így a mélytanulási modellek használata egyszerűvé válik. Számos gépi tanulási modell és mély tanulási modell létezik ennek a problémameghatározásnak a megvalósítására. A legjobb választás az adatkészletben lévő adatok minőségétől és mennyiségétől, valamint a problémameghatározástól függ. A legjobb algoritmus kiválasztásának másik módja az, hogy mindegyiket kiértékeli. Ezt úgy tehetjük meg, hogy mérjük a pontosságot, hogy mennyire tudják helyesen osztályozni a talajt. Végül megvalósítottunk egy Multi-Stacking együttes modellt, több modellt használva a legjobb modell felépítéséhez.

Kulcs elvezetések

  • A hatékony növényválasztáshoz teljes mértékben meg kell érteni a talajt.
  • A mélyreható tanulás a mezőgazdaságban hatékony eszköz, a növénybetegségek előrejelzésétől a talajtípusokig és a vízigényekig.
  • Funkciókivonást végeztünk, hogy a talajképekből vonjuk le a jellemzőket.
  • Ebben a blogban a gépi tanulási és mélytanulási modelleket vizsgáltuk a talaj osztályozására, valamint egy több halmozott együttes modellt a pontosság növelése érdekében.

Gyakran ismételt kérdések

Q1. Miért fontos a talaj helyes osztályozása a mezőgazdaságban?

V. Fontos a megfelelő növényválasztás és a gyomnövekedés azonosítása szempontjából.

Q2. Melyek a legfontosabb jellemzők a talajazonosítás során?

V. A jellemzőket, beleértve a homokot, agyagot, iszapot, tőzeget és vályogot, figyelembe kell venni.

Q3. Miben különbözik a mélytanulás a hagyományos gépi tanulástól ebben a témában?

V. A mély tanulás lehetővé teszi a modell számára, hogy intelligens döntéseket hozzon, míg a hagyományos gépi tanulás az adatok értelmezésével hoz döntéseket.

Q4. Mi a szerepe a javasolt Multi-Stacking együttes modellnek?

V. A Multi-Stacking ensemble modell növeli a talajtípusok osztályozásának pontosságát.

A cikkben bemutatott média nem az Analytics Vidhya tulajdona, és a szerző saját belátása szerint használja.

Időbélyeg:

Még több Analytics Vidhya