Maatalous ja syväoppiminen: maaperän ja viljelykasvien sadon parantaminen

Maatalous ja syväoppiminen: maaperän ja viljelykasvien sadon parantaminen

Lähdesolmu: 3066255

esittely

Maatalous on monille intialaisille enemmän kuin pelkkä työ; se on elämäntapa. Se on keino, jolla he tukevat toimeentuloaan ja myötävaikuttavat valtavasti Intian talouteen. Sen maaperän määrittäminen, jossa on savea, hiekkaa ja lietehiukkasia vastaavassa suhteessa, on tärkeää sopivan sadon valinnan ja rikkakasvien kasvun tunnistamisen kannalta. Tutustu syvän oppimisen potentiaaliin maataloudessa. Ymmärrä maaperätyyppien ja rikkakasvien havaitsemisen merkitys Intialle.

Syvällinen oppiminen on nouseva tekniikka, josta on apua kaikilla aloilla. Syväoppimista on sovellettu älykkäässä maataloudessa laajasti peltovalvontaan, peltokäyttöön, robotiikkaan, maaperän, veden, ilmasto-olosuhteiden ennustamiseen sekä maisematason maa- ja viljelykasvien seurantaan. Voimme syöttää valokuvan maaperästä syväoppimisarkkitehtuuriin, ohjata sen oppimaan havaitsemaan ominaisuuksia ja sitten käyttää syväoppimisarkkitehtuuria maaperän luokitteluun.

Syväoppiminen maataloudessa

Tässä blogissa keskustelemme maaperän merkityksestä maataloudessa. Luokittelemme maaperän koneoppimisen ja syväoppimisen malleilla.

Oppimistavoitteet

  • Ymmärrät kuinka tärkeä maaperä on maataloudessa.
  • Opit kuinka koneoppimisalgoritmit voivat luokitella maaperätyyppejä.
  • Toteutat syvän oppimismallin maataloudessa maaperätyyppien luokitteluun.
  • Tutustu usean pinoamisen kokonaisuusoppimisen käsitteeseen parantaaksesi ennusteidemme tarkkuutta.

Tämä artikkeli julkaistiin osana Data Science Blogathon.

Sisällysluettelo

Maaperän rooli maataloudessa

Orgaaniset aineet, mineraalit, kaasut, nesteet ja muut kasveista ja eläimistä erittyvät aineet muodostavat tärkeän maaperän, maatalouden perustan. Maatalouden perusta on kaasuissa, mineraaleissa, orgaanisissa aineissa ja muissa kasveista ja eläimistä peräisin olevissa aineissa, jotka muodostavat maaperän.

Intian talous on puhtaasti maatalouden varassa; maaperä on tärkeä viljelykasveille, ja se johtaa ei-toivottujen rikkakasvien kehittymiseen sen hedelmällisyyden vuoksi.

Maaperän rooli maataloudessa | Syväoppiminen maataloudessa

Kosteus ja lämpötila ovat fysikaalisia muuttujia, jotka vaikuttavat huokosten ja hiukkasten muodostumiseen maaperässä, vaikuttaen juurien kasvuun, veden tunkeutumiseen ja kasvien syntynopeuteen.

Mutta pääasiassa maaperässä on hiekka- ja savehiukkasia. Yleisesti saatavilla olevien maapartikkelien keskellä tutkimuspaikalla on runsaasti savea. Savihiukkasten saatavuus pinnalla johtuu toimitetusta runsaasta ravinnosta. Turvetta ja savea ei juurikaan ole. Savityyppinen maaperä on väliltä tilava, jossa vesi pidättyy.

aineisto

Kaggle-linkki

Tietojoukko | Syväoppiminen maataloudessa
"
"
"
"

Ominaisuuden poimiminen on yksi tärkeimmistä vaiheista hyvän syväoppimismallin rakentamisessa. On tärkeää tunnistaa ominaisuuksia, jotka voivat olla tarpeellisia koneoppimisalgoritmien rakentamisessa. Tulemme käyttämään Mahotas kirjasto Haralick-ominaisuuksien poimimiseksi, joissa on kuvien tila- ja tekstuuritiedot.

Käytämme Skimage-kirjastoa kuvien muuntamiseen harmaasävyiksi ja poimimaan gradientin histogrammin (HOG) ominaisuuksia, jotka ovat hyödyllisiä kohteen havaitsemisessa. Lopuksi ketjutamme ominaisuuksien arvot taulukkoon ja käytämme niitä myöhemmin koneoppimisessa ja syväoppimisalgoritmeissa.

Ominaisuuden purkaminen | Syväoppiminen maataloudessa
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)
"

Koneoppimisalgoritmit maaperän luokittelussa

Rakennetaan nyt koneoppimismalli käyttämällä Kagglesta saamiamme maaperäkuvia.

Ensin tuomme kaikki kirjastot ja rakennamme sitten funktion nimeltä Pura_ominaisuudet poimimaan piirteitä kuvista. Sitten kuvat tuodaan ja käsitellään, mikä sisältää muuntamisen harmaasävyiksi, ja sitten saamme nämä ominaisuudet. Sitten, kun kunkin kuvan ominaisuudet on purettu, tarrat koodataan käyttämällä Label Encoder.

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)
TUOTOS | Syväoppiminen maataloudessa
LÄHTÖ

Deep Neural Networks

Se toimii laskentayksiköiden ja neuronien lukumäärän perusteella. Jokainen neuroni hyväksyy syötteitä ja tuottaa ulostulon. Sitä käytetään tarkkuuden lisäämiseen ja parempien ennusteiden tekemiseen, kun taas koneoppimisalgoritmit luottavat datan tulkintaan ja niiden perusteella tehdään päätöksiä.

Lue myös: Johdatusopas syvään oppimiseen ja hermoverkkoihin

Rakennetaan nyt Kerasin Sequential API:lla määritetty malli. Tässä mallissa on Conv2D-konvoluutiokerros MaxPooling2D, litistävä kerros Flatten ja tiheät kerrokset Dense.

Lopuksi malli kootaan käyttämällä Aatami optimoija ja kategorinen ristientropiahäviö.

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)
LÄHTÖ
LÄHTÖ

Kuten näet, ennustettu luokka on 0, joka on Black Soil. Joten mallimme luokittelee maaperän oikein.

Ehdotetut usean pinoamisen kokonaisuusoppimismalliarkkitehtuurit

- StackingClassifier on alustettu baseClassifiersilla ja a logistinen regressio meta-luokittaja lopullinen_estimaattori. Tämä yhdistää baseClassifiersin lähdöt lopullisen ennusteen tekemiseksi. Sitten, harjoittelun ja ennustamisen jälkeen, tarkkuus lasketaan.

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

Yhteenveto

Maaperä on tärkeä osa hyvän sadon tuottamista. On tärkeää tietää, mikä maaperä on tarpeen kyseisen sadon tuottamiseksi. Joten maaperän luokittelusta tulee tärkeä. Koska maaperän manuaalinen luokittelu on aikaa vievä tehtävä, syväoppimismallien käyttäminen niiden luokittelussa on helppoa. On olemassa monia koneoppimismalleja ja syväoppimismalleja tämän ongelmanhallinnan toteuttamiseksi. Parhaan valinta riippuu aineistossa olevien tietojen laadusta ja määrästä sekä käsillä olevasta ongelmankuvauksesta. Toinen tapa valita paras algoritmi on arvioida jokainen. Voimme tehdä sen mittaamalla tarkkuuden, kuinka paljon he voivat luokitella maaperän oikein. Lopuksi otimme käyttöön Multi-Stacking ensemble -mallin käyttämällä useita malleja parhaan mallin rakentamiseen.

Keskeiset ostokset

  • Tehokkaan viljelykasvien valinnan kannalta on ymmärrettävä maaperä täysin.
  • Syväoppiminen maataloudessa on tehokas työkalu kasvitautien ennustamisesta maaperän tyyppeihin ja veden tarpeisiin.
  • Olemme tehneet ominaisuuspoiminnan saadaksemme ominaisuuksia maaperäkuvista.
  • Tässä blogissa tutkimme koneoppimis- ja syväoppimismalleja maaperän luokittelussa sekä monikerroksista kokonaisuusmallia tarkkuuden parantamiseksi.

Usein kysytyt kysymykset

Q1. Miksi maaperän oikea luokittelu on tärkeää maataloudessa?

V. Se on tärkeää sopivan sadon valinnassa ja rikkakasvien kasvun tunnistamisessa.

Q2. Mitkä ovat tärkeimmät piirteet maaperän tunnistamisessa?

A. Ominaisuudet, mukaan lukien hiekka, savi, liete, turve ja savi, otetaan huomioon.

Q3. Miten syväoppiminen eroaa perinteisestä koneoppimisesta tässä aiheessa?

V. Syväoppiminen sallii mallin tehdä älykkäitä päätöksiä, kun taas perinteinen koneoppiminen tekee päätökset tulkitsemalla tietoja.

Q4. Mikä on ehdotetun Multi-Stacking-kokonaisuusmallin rooli?

V. Multi-Stacking ensemble -malli lisää maaperätyypin luokittelun tarkkuutta.

Tässä artikkelissa näkyvä media ei ole Analytics Vidhyan omistuksessa, ja sitä käytetään tekijän harkinnan mukaan.

Aikaleima:

Lisää aiheesta Analyysi Vidhya