เกษตรกรรมและการเรียนรู้เชิงลึก: การปรับปรุงดินและผลผลิตพืชผล

เกษตรกรรมและการเรียนรู้เชิงลึก: การปรับปรุงดินและผลผลิตพืชผล

โหนดต้นทาง: 3066255

บทนำ

เกษตรกรรมเป็นมากกว่างานสำหรับคนอินเดียจำนวนมาก มันเป็นวิถีชีวิต เป็นช่องทางที่พวกเขาสนับสนุนการดำรงชีวิตของพวกเขาและมีส่วนช่วยอย่างมากต่อเศรษฐกิจของอินเดีย การกำหนดชนิดของดินที่มีอนุภาคดินเหนียว ทราย และตะกอนตามสัดส่วนเป็นสิ่งสำคัญสำหรับการเลือกพืชที่เหมาะสมและระบุการเจริญเติบโตของวัชพืช ค้นพบศักยภาพของการเรียนรู้เชิงลึกในด้านการเกษตร เข้าใจถึงความสำคัญของประเภทของดินและการตรวจจับวัชพืชสำหรับอินเดีย

เรียนรู้อย่างลึกซึ้ง เป็นเทคโนโลยีเกิดใหม่ที่เป็นประโยชน์ในทุกด้าน การเรียนรู้เชิงลึกถูกนำมาใช้อย่างแพร่หลายในการเกษตรอัจฉริยะในหลายระดับสำหรับการตรวจสอบภาคสนาม การปฏิบัติงานภาคสนาม หุ่นยนต์ การทำนายดิน น้ำ สภาพภูมิอากาศ และการตรวจสอบประเภทที่ดินและพืชผลในระดับภูมิทัศน์ เราสามารถป้อนภาพถ่ายของดินให้กับสถาปัตยกรรมการเรียนรู้เชิงลึก แนะนำให้เรียนรู้ที่จะตรวจจับคุณลักษณะต่างๆ จากนั้นใช้สถาปัตยกรรมการเรียนรู้เชิงลึกเพื่อจำแนกดิน

การเรียนรู้เชิงลึกในด้านการเกษตร

ในบล็อกนี้ เราจะพูดถึงความสำคัญของดินในด้านการเกษตร เราจะจำแนกดินโดยใช้การเรียนรู้ของเครื่องและโมเดลการเรียนรู้เชิงลึก

วัตถุประสงค์การเรียนรู้

  • คุณจะเข้าใจว่าดินมีความสำคัญต่อการเกษตรอย่างไร
  • คุณจะได้เรียนรู้ว่าอัลกอริธึมการเรียนรู้ของเครื่องสามารถจำแนกประเภทของดินได้อย่างไร
  • คุณจะใช้โมเดลการเรียนรู้เชิงลึกในด้านการเกษตรเพื่อจำแนกประเภทของดิน
  • สำรวจแนวคิดของการเรียนรู้แบบ Ensemble แบบหลายซ้อนเพื่อเพิ่มความแม่นยำในการทำนายของเรา

บทความนี้เผยแพร่โดยเป็นส่วนหนึ่งของไฟล์ Blogathon วิทยาศาสตร์ข้อมูล

สารบัญ

บทบาทของดินในด้านการเกษตร

อินทรียวัตถุ แร่ธาตุ ก๊าซ ของเหลว และสารอื่นๆ ที่ถูกขับออกจากพืชและสัตว์กลายเป็นดินที่สำคัญซึ่งเป็นรากฐานของการเกษตร รากฐานของการเกษตรอยู่ที่ก๊าซ แร่ธาตุ อินทรียวัตถุ และสารอื่นๆ ที่มาจากพืชและสัตว์ ก่อให้เกิดระบบดิน

เศรษฐกิจของอินเดียอาศัยเกษตรกรรมเพียงอย่างเดียว ดินมีความสำคัญต่อพืชผล และนำไปสู่การพัฒนาของวัชพืชที่ไม่พึงประสงค์เนื่องจากความอุดมสมบูรณ์

บทบาทของดินต่อการเกษตร | การเรียนรู้เชิงลึกในด้านการเกษตร

ความชื้นและอุณหภูมิเป็นตัวแปรทางกายภาพที่ส่งผลต่อการก่อตัวของรูพรุนและอนุภาคในดิน ส่งผลต่อการเจริญเติบโตของราก การแทรกซึมของน้ำ และความเร็วในการงอกของพืช

แต่โดยหลักแล้วดินจะมีอนุภาคของทรายและดินเหนียว ท่ามกลางอนุภาคดินที่มีอยู่อย่างแพร่หลาย พื้นที่สำรวจมีดินเหนียวอยู่เป็นจำนวนมาก ความพร้อมของอนุภาคดินเหนียวบนพื้นผิวเกิดจากการได้รับสารอาหารที่อุดมสมบูรณ์ แทบจะไม่มีพีทและดินร่วน ดินประเภทดินเหนียวมีพื้นที่กว้างในระหว่างที่กักเก็บน้ำไว้

ชุด

ลิงค์กะเกิ้ล

ชุดข้อมูล | การเรียนรู้เชิงลึกในด้านการเกษตร
"
"
"
"

การดึงฟีเจอร์เป็นหนึ่งในขั้นตอนหลักในการสร้างโมเดลการเรียนรู้เชิงลึกที่ดี การระบุคุณสมบัติที่อาจจำเป็นสำหรับการสร้างอัลกอริธึมการเรียนรู้ของเครื่องเป็นสิ่งสำคัญ เราจะใช้ มโหตร ไลบรารีเพื่อแยกคุณสมบัติ 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 Convolution, MaxPooling2D, เลเยอร์ที่แบนราบ, และเลเยอร์หนาแน่น 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 ซึ่งก็คือดินดำ ดังนั้นแบบจำลองของเราจึงจำแนกชนิดของดินได้อย่างถูกต้อง

สถาปัตยกรรมโมเดลการเรียนรู้แบบ Ensemble Multi-Stacking ที่เสนอ

พื้นที่ การซ้อนลักษณนาม เริ่มต้นได้ด้วย baseClassifiers และ a การถดถอยโลจิสติก เมตาลักษณนาม Final_estimator- ซึ่งจะรวมเอาต์พุตของตัวแยกประเภทฐานเพื่อทำการทำนายขั้นสุดท้าย จากนั้นหลังจากการฝึกอบรมและการทำนาย จะมีการคำนวณความแม่นยำ

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 Ensemble โดยใช้หลายโมเดลเพื่อสร้างโมเดลที่ดีที่สุด

ประเด็นที่สำคัญ

  • เพื่อการเลือกพืชผลที่มีประสิทธิภาพ เราควรเข้าใจดินให้ครบถ้วน
  • การเรียนรู้เชิงลึกในด้านการเกษตรเป็นเครื่องมืออันทรงพลัง ตั้งแต่การทำนายโรคพืชไปจนถึงชนิดของดินและความต้องการน้ำ
  • เราได้ทำการแยกคุณสมบัติเพื่อรับคุณสมบัติจากภาพดิน
  • ในบล็อกนี้ เราได้สำรวจโมเดลการเรียนรู้ของเครื่องและการเรียนรู้เชิงลึกเพื่อจำแนกดินและโมเดล Multi-stacked Ensemble เพื่อความแม่นยำที่ดีขึ้น

คำถามที่พบบ่อย

ไตรมาสที่ 1 เหตุใดการจำแนกดินอย่างถูกต้องจึงมีความสำคัญในการเกษตร?

A. การเลือกพืชผลที่เหมาะสมและการระบุการเจริญเติบโตของวัชพืชเป็นสิ่งสำคัญ

ไตรมาสที่ 2 คุณสมบัติที่สำคัญในการพิจารณาระบุดินคืออะไร?

A. พิจารณาลักษณะต่างๆ เช่น ทราย ดินเหนียว ตะกอน พีท และดินร่วน

ไตรมาสที่ 3 การเรียนรู้เชิงลึกแตกต่างจากการเรียนรู้ของเครื่องแบบดั้งเดิมในหัวข้อนี้อย่างไร

ก. การเรียนรู้เชิงลึกทำให้โมเดลสามารถตัดสินใจได้อย่างชาญฉลาด ในขณะที่การเรียนรู้ของเครื่องแบบเดิมทำการตัดสินใจโดยการตีความข้อมูล

ไตรมาสที่ 4 บทบาทของโมเดล Multi-Stacking Ensemble ที่เสนอคืออะไร?

A. แบบจำลอง Multi-Stacking Ensemble ช่วยเพิ่มความแม่นยำในการจำแนกประเภทของดิน

สื่อที่แสดงในบทความนี้ไม่ได้เป็นของ Analytics Vidhya และถูกใช้ตามดุลยพินิจของผู้เขียน

ประทับเวลา:

เพิ่มเติมจาก การวิเคราะห์ วิทยา