<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD with MathML3 v1.1d2 20140930//EN" "JATS-journalpublishing1-mathml3.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="1.1d2" xml:lang="en">
  <front>
    <journal-meta>
      <journal-id journal-id-type="nlm-ta">TSEL</journal-id>
      <journal-id journal-id-type="publisher-id">IECE</journal-id>
      <journal-title-group>
        <journal-title>IECE Transactions on Swarm and Evolutionary Learning</journal-title>
      </journal-title-group>
      <issn pub-type="ppub" publication-format="print">pending</issn>
      <issn pub-type="epub" publication-format="electronic">pending</issn>
      <publisher>
        <publisher-name>Institute of Emerging and Computer Engineering Inc</publisher-name>
        <publisher-loc>522 W RIVERSIDE AVE STE N, SPOKANE, WA, 99201-0508, UNITED STATES</publisher-loc>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.62762/TSEL.2025.947593</article-id>
      <article-categories>
        <subj-group subj-group-type="heading">
          <subject>Research Article</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Modified Salp Swarm Algorithm with Adaptive Weighting Based Bidirectional LSTM Network Ensemble Method for Crop Recommendation</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-2324-7685</contrib-id>
          <name>
            <surname>Majumdar</surname>
            <given-names>Parijata</given-names>
          </name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff1"><label>1</label>Indian Institute of Information Technology Agartala, Barjala, Tripura 799046, India</aff>
      </contrib-group>
      <author-notes>
        <corresp id="cor1">Corresponding Author: Parijata Majumdar. Email: <email>parijata.majumdar@iiitagartala.ac.in</email></corresp>
      </author-notes>
      <pub-date date-type="pub" pub-type="epub" publication-format="online">
        <day>29</day>
        <month>5</month>
        <year>2025</year>
      </pub-date>
      <volume>1</volume>
      <issue>1</issue>
      <fpage>3</fpage>
      <lpage>11</lpage>
      <history>
        <date date-type="received">
          <day>23</day>
          <month>4</month>
          <year>2025</year>
        </date>
        <date date-type="accepted">
          <day>04</day>
          <month>5</month>
          <year>2025</year>
        </date>
      </history>
      <permissions>
        <copyright-statement>Copyright © 2025 TSEL. All rights reserved.</copyright-statement>
        <copyright-year>2025</copyright-year>
        <copyright-holder>Institute of Emerging and Computer Engineering Inc</copyright-holder>
      </permissions>
      <self-uri xlink:href="https://www.iece.org/article/abs/tsel.2025.947593">This article is available from https://www.iece.org/article/abs/tsel.2025.947593</self-uri>
      <abstract>
        <p>Farmers sometimes grow crops with low yields, wasting land, labor, and time—especially in developing countries where demand for food is increasing. A Crop Recommendation System (CRS) can help by using precision farming techniques that analyze soil and environmental data to suggest the most suitable crops. This study proposes a CRS using a Modified Salp Swarm Algorithm (MSSA) for feature selection and an Adaptive Weighted Bi-directional Long Short-Term Memory (AWBiLSTM) ensemble for prediction. MSSA enhances the original algorithm by improving local search and convergence speed, addressing SSA's limitations. Climate data is pre-processed and relevant features are selected using MSSA. AWBiLSTM then predicts suitable crops with improved accuracy. Experimental results show that the MSSA-AWBiLSTM approach outperforms existing methods in precision, recall, and execution time. The proposed method obtains an accuracy of 98.72%, precision of 98.81%, recall of 98.54%, specificity of 98.10%, PR-Score of 98.18%, ROC-Score of 98.49%, F1-Score of 98.48%, and Matthews Correlation Coefficient (MCC) of 97.63%.</p>
      </abstract>
      <kwd-group kwd-group-type="author" xml:lang="en">
        <kwd>soil and climate conditions</kwd>
        <kwd>feature Selection</kwd>
        <kwd>crop recommendation</kwd>
        <kwd>modified salp swarm algorithm</kwd>
        <kwd>adaptive weighting based BiLSTM</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="S1">
      <label>1.</label>
      <title>Introduction</title>
      <p id="S1.p1">Precision Agriculture (PA) utilizes advanced sensors and analytical tools to improve crop yield and support decision-making [<xref rid="ref001" ref-type="bibr">1</xref>]. Globally adopted, PA helps reduce labor, optimize resource use, and improve the management of fertilizers and irrigation. Successful crop selection depends on several factors including irrigation, rainfall, soil conditions, sunlight, and pest control [<xref rid="ref002" ref-type="bibr">2</xref>, <xref rid="ref020" ref-type="bibr">20</xref>]. One major challenge is choosing crops compatible with the soil conditions [<xref rid="ref003" ref-type="bibr">3</xref>]. Climate and soil factors must be thoroughly analyzed before implementing any PA strategy, as they directly impact crop growth [<xref rid="ref004" ref-type="bibr">4</xref>, <xref rid="ref005" ref-type="bibr">5</xref>].</p>
      <p id="S1.p2">Accurate crop recommendations are essential to avoid losses many farmers cannot afford [<xref rid="ref006" ref-type="bibr">6</xref>]. However, traditional machine learning (ML) models often produce inaccurate results due to noisy and incomplete datasets [<xref rid="ref007" ref-type="bibr">7</xref>, <xref rid="ref008" ref-type="bibr">8</xref>]. Deep learning (DL) models have emerged as a more effective alternative, capable of training on large datasets and solving complex decision problems with greater accuracy [<xref rid="ref009" ref-type="bibr">9</xref>]. The Internet of Things (IoT) further strengthens PA by enabling real-time data collection and analysis. Climate information is critical for planning, and timely crop selection is key to maximizing yield [<xref rid="ref010" ref-type="bibr">10</xref>]. Classification models using variables like temperature, humidity, soil type, pH, and crop period can support accurate decision-making [<xref rid="ref012" ref-type="bibr">12</xref>].</p>
      <p id="S1.p3">Farmers still often rely on intuition due to limited access to real-time, reliable data, which leads to poor crop choices and reduced productivity [<xref rid="ref011" ref-type="bibr">11</xref>]. Despite existing research, crop recommendation systems (CRS) still face issues with data quality, long processing times, and low accuracy. To overcome these limitations, DL models have been applied to improve both efficiency and precision [<xref rid="ref011" ref-type="bibr">11</xref>]. Among optimization methods, the Salp Swarm Algorithm (SSA), inspired by marine salps, has shown success in various domains like feature selection and forecasting [<xref rid="ref014" ref-type="bibr">14</xref>, <xref rid="ref015" ref-type="bibr">15</xref>, <xref rid="ref017" ref-type="bibr">17</xref>, <xref rid="ref013" ref-type="bibr">13</xref>]. SSA benefits from minimal parameter tuning and strong neighborhood search but can face slow convergence and local optima stagnation [<xref rid="ref016" ref-type="bibr">16</xref>].</p>
      <p id="S1.p4">To improve SSA's performance, we introduce a Modified SSA (MSSA) that incorporates local best solution strategies, enhancing population diversity and convergence. This is paired with an Adaptive Weighted Bi directional Long Short-Term Memory (AWBiLSTM) model for precise crop prediction. Given the increasing complexity of DL models and the risk of overfitting, effective feature selection becomes essential. Our MSSA-AWBiLSTM approach uses real-time soil and climate data to provide fast, accurate crop recommendations, enabling informed decision-making and improved yield outcomes.</p>
    </sec>
    <sec id="S2">
      <label>2.</label>
      <title>Literature Review</title>
      <p id="S2.p1">Soni et al. [<xref rid="ref025" ref-type="bibr">25</xref>] used ensemble ML but lacked deep temporal modeling and adaptive optimization for crop recommendation based on soil parameters using XGBoost and decision tree. In [<xref rid="ref024" ref-type="bibr">24</xref>] the potential of LSTM networks is emphasized, but the lack of integration with optimization techniques is noted for the prediction and recommendation of crop yields. By combining an adaptive weighting-based ensemble of BiLSTM networks with a MSSA, this research presents a novel hybrid framework for crop recommendation. The suggested method makes use of MSSA for dynamic hyperparameter optimization and model selection, which improves convergence efficiency and prevents local optima in contrast to current methods that rely on static machine learning models or isolated deep networks. Furthermore, adaptive weighting is used by the ensemble method to highlight the predictions of more dependable BiLSTM learners, enhancing the system's overall generalization and robustness. The model performs noticeably better than state-of-the-art methods thanks to this synergistic integration, which allows it to capture intricate temporal correlations in agricultural data while adjusting to changing environmental and soil conditions.</p>
      <p id="S2.p2">For agriculture to be sustainable and to maximize output, accurate crop recommendations are essential. Single deep learning methods frequently lack robustness, while traditional machine learning models have trouble with nonlinear, temporal agricultural data. This paper suggests a novel hybrid technique that combines an adaptive weighting-based ensemble of bidirectional LSTM networks with a MSSA for improved hyperparameter tuning in order to overcome these constraints. This integration increases prediction accuracy, speeds up convergence, and captures bidirectional temporal trends. For farmers and agricultural planners, the suggested system provides a scalable and intelligent decision-support tool that enables more adaptive and knowledgeable crop selection depending on soil and environmental factors.The primary contributions of the MSSA-AWBiLSTM CRS are outlined:</p>
      <p>
        <list list-type="bullet" id="S2.I1">
          <list-item id="S2.I1.i1">
            <p id="S2.I1.i1.p1">Initially, pre-processing is conducted to improve the quality of the real-time soil and climatic parameters.</p>
          </list-item>
          <list-item id="S2.I1.i2">
            <p id="S2.I1.i2.p1">MSSA is then utilized for feature selection. The objective is to swiftly identify the most informative and relevant features, ensuring reliable prediction results.</p>
          </list-item>
          <list-item id="S2.I1.i3">
            <p id="S2.I1.i3.p1">Crop recommendations are generated using the BiLSTM Network Ensemble via the Adaptive Weighting approach, facilitating farmers in obtaining instantaneous and accurate crop recommendations by inputting their preferred climate and crop attributes.</p>
          </list-item>
          <list-item id="S2.I1.i4">
            <p id="S2.I1.i4.p1">To validate the proposed method, extensive comparisons are conducted with other conventional frameworks, focusing on precision, recall, and execution time.</p>
          </list-item>
        </list>
      </p>
      <p id="S2.p4">The remaining sections are organized as follows: Section 2 describes the mechanism for the proposed CRS. Section 3 presents the results and discussions. Finally, Section 4 summarizes the work and suggests directions for further research.</p>
    </sec>
    <sec id="S3">
      <label>3.</label>
      <title>Methodology</title>
      <p id="S3.p1">MSSA with AWBiLSTM is designed for optimal crop prediction and recommendation utilizing optimal feature set chosen according to their fitness values. The primary aim is to guide farmers in suitable crop cultivation based on real-time soil and climate information gathered using IoT based sensors for increased crop productivity and maximizing yield.</p>
      <sec id="S3.SS1">
        <label>3.1</label>
        <title>Data collection and Preprocessing</title>
        <p id="S3.SS1.p1">The crop recommendation dataset, available at Kaggle (<ext-link xlink:href="https://www.kaggle.com/siddharthss/crop-recommendation-dataset/">https://www.kaggle.com/siddharthss/crop-recommendation-dataset/</ext-link>), contains vital agricultural parameters such as rainfall, crop yield, nitrogen (N), phosphorus (P), potassium (K) levels, temperature, humidity, pH, and precipitation. To ensure high-quality inputs, data preprocessing is performed—addressing missing values (denoted by '.'), removing duplicates, and standardizing the structure. Missing entries are replaced with distinct large negative values to help models identify them as outliers. As the dataset lacks class labels, supervised learning labels are generated based on crop yield and cultivated area: crops with an area &gt; 0 are labeled as class 1, otherwise class 0.</p>
        <p id="S3.SS1.p2">Sensors are used to monitor soil moisture, pH, temperature, humidity, and rainfall, which are essential for accurate crop recommendations. Additionally, mobile cameras detect crop infections to suggest suitable fertilizers, with all data securely stored in the cloud. The dataset is split into training and testing sets, and deep learning (DL) algorithms are used to train the crop recommendation model effectively.</p>
      </sec>
      <sec id="S3.SS2">
        <label>3.2</label>
        <title>MSSA algorithm for feature selection</title>
        <p id="S3.SS2.p1">In this proposed modification of the SSA (MSSA) [<xref rid="ref031" ref-type="bibr">31</xref>], the concept of the local best solution is introduced. The mathematical model of the MSSA is kept unchanged compared to SSA for its leader salp position update, while the followers salp positions are updated using the following equation:</p>
        <p>
          <disp-formula id="S3.E1">
            <mml:math alttext="x^{i}_{j}=b^{i}_{j}+\epsilon(x^{q}_{j}-x^{i}_{j}),j=1,...,D" display="block">
              <mml:mrow>
                <mml:mrow>
                  <mml:msubsup>
                    <mml:mi>x</mml:mi>
                    <mml:mi>j</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msubsup>
                  <mml:mo>=</mml:mo>
                  <mml:mrow>
                    <mml:msubsup>
                      <mml:mi>b</mml:mi>
                      <mml:mi>j</mml:mi>
                      <mml:mi>i</mml:mi>
                    </mml:msubsup>
                    <mml:mo>+</mml:mo>
                    <mml:mrow>
                      <mml:mi>ϵ</mml:mi>
                      <mml:mo>⁢</mml:mo>
                      <mml:mrow>
                        <mml:mo stretchy="false">(</mml:mo>
                        <mml:mrow>
                          <mml:msubsup>
                            <mml:mi>x</mml:mi>
                            <mml:mi>j</mml:mi>
                            <mml:mi>q</mml:mi>
                          </mml:msubsup>
                          <mml:mo>−</mml:mo>
                          <mml:msubsup>
                            <mml:mi>x</mml:mi>
                            <mml:mi>j</mml:mi>
                            <mml:mi>i</mml:mi>
                          </mml:msubsup>
                        </mml:mrow>
                        <mml:mo stretchy="false">)</mml:mo>
                      </mml:mrow>
                    </mml:mrow>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo>,</mml:mo>
                <mml:mrow>
                  <mml:mi>j</mml:mi>
                  <mml:mo>=</mml:mo>
                  <mml:mrow>
                    <mml:mn>1</mml:mn>
                    <mml:mo>,</mml:mo>
                    <mml:mi mathvariant="normal">…</mml:mi>
                    <mml:mo>,</mml:mo>
                    <mml:mi>D</mml:mi>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p id="S3.SS2.p3">where <inline-formula><mml:math alttext="b^{i}_{j}" display="inline"><mml:msubsup><mml:mi>b</mml:mi><mml:mi>j</mml:mi><mml:mi>i</mml:mi></mml:msubsup></mml:math></inline-formula> is the <inline-formula><mml:math alttext="i^{th}" display="inline"><mml:msup><mml:mi>i</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>⁢</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> local best position in the <inline-formula><mml:math alttext="j^{th}" display="inline"><mml:msup><mml:mi>j</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>⁢</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> dimension, <inline-formula><mml:math alttext="x^{i}_{j}" display="inline"><mml:msubsup><mml:mi>x</mml:mi><mml:mi>j</mml:mi><mml:mi>i</mml:mi></mml:msubsup></mml:math></inline-formula> is the <inline-formula><mml:math alttext="i^{th}" display="inline"><mml:msup><mml:mi>i</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>⁢</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> position in the <inline-formula><mml:math alttext="j^{th}" display="inline"><mml:msup><mml:mi>j</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>⁢</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> dimension, <inline-formula><mml:math alttext="x^{q}_{j}" display="inline"><mml:msubsup><mml:mi>x</mml:mi><mml:mi>j</mml:mi><mml:mi>q</mml:mi></mml:msubsup></mml:math></inline-formula> is a randomly selected position in a <inline-formula><mml:math alttext="j^{th}" display="inline"><mml:msup><mml:mi>j</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>⁢</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> dimension from a set of N solution. dimension. While the best fitness values <inline-formula><mml:math alttext="B_{i}" display="inline"><mml:msub><mml:mi>B</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula> are assigned the corresponding outcomes <inline-formula><mml:math alttext="F_{i}" display="inline"><mml:msub><mml:mi>F</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula>'s, the best local solutions <inline-formula><mml:math alttext="b_{i}" display="inline"><mml:msub><mml:mi>b</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula>'s are first made equal to the first created population. As the least (or greatest) fitness function value <inline-formula><mml:math alttext="F_{i}" display="inline"><mml:msub><mml:mi>F</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula> and its accompanying solution <inline-formula><mml:math alttext="x_{i}" display="inline"><mml:msub><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula>, the global optimum G and its corresponding solution g are chosen.</p>
        <p id="S3.SS2.p4">Inside the main loop, Eq. (1) is used to update the leader's salp position in [<xref rid="ref031" ref-type="bibr">31</xref>], and Eq. (1) is used to calculate the new follower salp's locations. The newly created positions' feasibility is confirmed, and the associated fitness function is assessed and stored. By comparing the recently acquired best local optimums to the previously stored global optimum, the MSSA's final step finds a new global optimum. Once a predetermined maximum number of generations has been achieved, the iteration ends. In contrast to SSA, MSSA incorporates information on the local best in each individual of the population into its exploration techniques. This could be useful if the food supply becomes trapped in a local minimum and enable the finding of other food sources using the modified MSSA method. However, each neighborhood of the local best is additionally exploited using a step size that is established by comparing the associated local position <inline-formula><mml:math alttext="x^{i}" display="inline"><mml:msup><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msup></mml:math></inline-formula> with a random individual <inline-formula><mml:math alttext="x^{q}" display="inline"><mml:msup><mml:mi>x</mml:mi><mml:mi>q</mml:mi></mml:msup></mml:math></inline-formula>. This enables the neighborhood search area surrounding the local best to be expanded or reduced.</p>
        <p id="S3.SS2.p5">Each solution is represented by a binary value ("1" denoting a feature that was selected and "0" denoting features that were not), and a random population of salps is produced. The food fitness of each solution (climate feature) is then calculated by MSSA. Next, the food source is selected from the solution with the lowest fitness value. As a result, it uses the K-Nearest Neighbor (KNN) based fitness goal function to choose the best answer. In the subsequent phase, MSSA uses Eq. (1) in [<xref rid="ref031" ref-type="bibr">31</xref>] to modify the salp positions. Using climate data, the fitness value is updated at each cycle to update the optimal solution and enhance the relevant feature. The optimal solution is provided as a vector of binary values once the maximum number of iterations has been reached. On the dataset's testing segment, KNN makes use of the chosen features. It is used in conjunction with the KNN classifier to assess it on feature selection problems. Therefore, MSSA is used to identify feature combinations that use the fewest features possible while maximizing classification precision. Using training data, the fitness function is changed to improve crop prediction performance on the validation dataset.</p>
        <p id="S3.SS2.p6">Therefore, using climatic data as a reference, the salp with the highest fitness score is modified to improve the chosen features. Salps with the highest total fitness score related to food discovery process are superior, and optimal values for each salp (matching to climate features) are established. The MSSA method uses a small set of attributes to find feature combinations that maximize classification accuracy. In the feature space, every feature has a distinct dimension that ranges from 0 to 1.</p>
      </sec>
      <sec id="S3.SS3">
        <label>3.3</label>
        <title>Long Short Term Memory Network</title>
        <p id="S3.SS3.p1">A specific kind of Recurrent Neural Network called LSTM was created to solve the vanishing gradient problem and learn long-term dependencies. Every LSTM cell has a hidden state (ht) for short-term output and a cell state (Ct) for long-term memory. Three gates are used, namely:</p>
        <p id="S3.SS3.p2">The forget gate determines which data from the prior cell state should be discarded.</p>
        <p>
          <disp-formula id="S3.E2">
            <mml:math alttext="f_{t}=\sigma(W_{f}\cdot[h_{t-1},x_{t}]+b_{f})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>f</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mi>σ</mml:mi>
                  <mml:mo>⁢</mml:mo>
                  <mml:mrow>
                    <mml:mo stretchy="false">(</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mi>f</mml:mi>
                        </mml:msub>
                        <mml:mo lspace="0.222em" rspace="0.222em">⋅</mml:mo>
                        <mml:mrow>
                          <mml:mo stretchy="false">[</mml:mo>
                          <mml:msub>
                            <mml:mi>h</mml:mi>
                            <mml:mrow>
                              <mml:mi>t</mml:mi>
                              <mml:mo>−</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                          </mml:msub>
                          <mml:mo>,</mml:mo>
                          <mml:msub>
                            <mml:mi>x</mml:mi>
                            <mml:mi>t</mml:mi>
                          </mml:msub>
                          <mml:mo stretchy="false">]</mml:mo>
                        </mml:mrow>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:msub>
                        <mml:mi>b</mml:mi>
                        <mml:mi>f</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo stretchy="false">)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p id="S3.SS3.p3">The input gate determines which additional data should be added to the cell state.</p>
        <p>
          <disp-formula id="S3.E3">
            <mml:math alttext="i_{t}=\sigma(W_{i}\cdot[h_{t-1},x_{t}]+b_{i})\tilde{C}_{t}=\tanh(W_{C}\cdot[h_%&#10;{t-1},x_{t}]+b_{C})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>i</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mi>σ</mml:mi>
                  <mml:mo>⁢</mml:mo>
                  <mml:mrow>
                    <mml:mo stretchy="false">(</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mi>i</mml:mi>
                        </mml:msub>
                        <mml:mo lspace="0.222em" rspace="0.222em">⋅</mml:mo>
                        <mml:mrow>
                          <mml:mo stretchy="false">[</mml:mo>
                          <mml:msub>
                            <mml:mi>h</mml:mi>
                            <mml:mrow>
                              <mml:mi>t</mml:mi>
                              <mml:mo>−</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                          </mml:msub>
                          <mml:mo>,</mml:mo>
                          <mml:msub>
                            <mml:mi>x</mml:mi>
                            <mml:mi>t</mml:mi>
                          </mml:msub>
                          <mml:mo stretchy="false">]</mml:mo>
                        </mml:mrow>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:msub>
                        <mml:mi>b</mml:mi>
                        <mml:mi>i</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo stretchy="false">)</mml:mo>
                  </mml:mrow>
                  <mml:mo>⁢</mml:mo>
                  <mml:msub>
                    <mml:mover accent="true">
                      <mml:mi>C</mml:mi>
                      <mml:mo>~</mml:mo>
                    </mml:mover>
                    <mml:mi>t</mml:mi>
                  </mml:msub>
                </mml:mrow>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mi>tanh</mml:mi>
                  <mml:mo>⁡</mml:mo>
                  <mml:mrow>
                    <mml:mo stretchy="false">(</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mi>C</mml:mi>
                        </mml:msub>
                        <mml:mo lspace="0.222em" rspace="0.222em">⋅</mml:mo>
                        <mml:mrow>
                          <mml:mo stretchy="false">[</mml:mo>
                          <mml:msub>
                            <mml:mi>h</mml:mi>
                            <mml:mrow>
                              <mml:mi>t</mml:mi>
                              <mml:mo>−</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                          </mml:msub>
                          <mml:mo>,</mml:mo>
                          <mml:msub>
                            <mml:mi>x</mml:mi>
                            <mml:mi>t</mml:mi>
                          </mml:msub>
                          <mml:mo stretchy="false">]</mml:mo>
                        </mml:mrow>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:msub>
                        <mml:mi>b</mml:mi>
                        <mml:mi>C</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo stretchy="false">)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p id="S3.SS3.p4">The input gate decides what portion of the cell state is output.</p>
        <p>
          <disp-formula id="S3.E4">
            <mml:math alttext="o_{t}=\sigma(W_{o}\cdot[h_{t-1},x_{t}]+b_{o})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>o</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mi>σ</mml:mi>
                  <mml:mo>⁢</mml:mo>
                  <mml:mrow>
                    <mml:mo stretchy="false">(</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mi>o</mml:mi>
                        </mml:msub>
                        <mml:mo lspace="0.222em" rspace="0.222em">⋅</mml:mo>
                        <mml:mrow>
                          <mml:mo stretchy="false">[</mml:mo>
                          <mml:msub>
                            <mml:mi>h</mml:mi>
                            <mml:mrow>
                              <mml:mi>t</mml:mi>
                              <mml:mo>−</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                          </mml:msub>
                          <mml:mo>,</mml:mo>
                          <mml:msub>
                            <mml:mi>x</mml:mi>
                            <mml:mi>t</mml:mi>
                          </mml:msub>
                          <mml:mo stretchy="false">]</mml:mo>
                        </mml:mrow>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:msub>
                        <mml:mi>b</mml:mi>
                        <mml:mi>o</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo stretchy="false">)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p id="S3.SS3.p6">Cell state Update equation:</p>
        <p>
          <disp-formula id="S3.E5">
            <mml:math alttext="C_{t}=f_{t}*C_{t-1}+i_{t}*\tilde{C}_{t}" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>C</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mrow>
                    <mml:msub>
                      <mml:mi>f</mml:mi>
                      <mml:mi>t</mml:mi>
                    </mml:msub>
                    <mml:mo lspace="0.222em" rspace="0.222em">∗</mml:mo>
                    <mml:msub>
                      <mml:mi>C</mml:mi>
                      <mml:mrow>
                        <mml:mi>t</mml:mi>
                        <mml:mo>−</mml:mo>
                        <mml:mn>1</mml:mn>
                      </mml:mrow>
                    </mml:msub>
                  </mml:mrow>
                  <mml:mo>+</mml:mo>
                  <mml:mrow>
                    <mml:msub>
                      <mml:mi>i</mml:mi>
                      <mml:mi>t</mml:mi>
                    </mml:msub>
                    <mml:mo lspace="0.222em" rspace="0.222em">∗</mml:mo>
                    <mml:msub>
                      <mml:mover accent="true">
                        <mml:mi>C</mml:mi>
                        <mml:mo>~</mml:mo>
                      </mml:mover>
                      <mml:mi>t</mml:mi>
                    </mml:msub>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p id="S3.SS3.p8">Hidden State (Output):</p>
        <p>
          <disp-formula id="S3.E6">
            <mml:math alttext="h_{t}=o_{t}*\tanh(C_{t})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>h</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>o</mml:mi>
                    <mml:mi>t</mml:mi>
                  </mml:msub>
                  <mml:mo lspace="0.222em" rspace="0.222em">∗</mml:mo>
                  <mml:mrow>
                    <mml:mi>tanh</mml:mi>
                    <mml:mo>⁡</mml:mo>
                    <mml:mrow>
                      <mml:mo stretchy="false">(</mml:mo>
                      <mml:msub>
                        <mml:mi>C</mml:mi>
                        <mml:mi>t</mml:mi>
                      </mml:msub>
                      <mml:mo stretchy="false">)</mml:mo>
                    </mml:mrow>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p id="S3.SS3.p10">Each gate controls the cell state using a tanh function and permits or prohibits information flow using a sigmoid function. Retained old memory and newly acquired information are combined to update the cell state.</p>
      </sec>
      <sec id="S3.SS4">
        <label>3.4</label>
        <title>Crop recommendation using BiLSTM Network Ensemble via Adaptive Weighting method</title>
        <p id="S3.SS4.p1">This research employs a BiLSTM Network Ensemble via Adaptive Weighting to predict optimal crop conditions by learning from historical data. The system enables farmers to quickly receive accurate crop recommendations based on climate and crop preferences. LSTM networks are well-suited for handling sequential data due to their ability to capture long-term dependencies through memory cells and gated structures. These networks efficiently extract high-level temporal features using recurrent hidden layers, making them effective in representing evolving input sequences [<xref rid="ref021" ref-type="bibr">21</xref>]. LSTMs operate over time-series data by using a sequence length parameter, which reflects changes in input vectors across time steps. Each memory block includes a memory cell, input gate, forget gate, and output gate. The memory cell retains temporal knowledge, while the gates manage the flow of information. At each time step t, the LSTM updates the memory cell <inline-formula><mml:math alttext="c_{t}" display="inline"><mml:msub><mml:mi>c</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula> and generates a hidden state <inline-formula><mml:math alttext="h_{t}" display="inline"><mml:msub><mml:mi>h</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula>. These operations are governed by a set of equations that define the internal dynamics of modern LSTM models with forget gates [<xref rid="ref022" ref-type="bibr">22</xref>].</p>
        <p>
          <disp-formula id="S3.E7">
            <mml:math alttext="i_{t}=\sigma(W_{xi}x_{t}+W_{hi}x_{t-1}+b_{i})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>i</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mi>σ</mml:mi>
                  <mml:mo>⁢</mml:mo>
                  <mml:mrow>
                    <mml:mo stretchy="false">(</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mrow>
                            <mml:mi>x</mml:mi>
                            <mml:mo>⁢</mml:mo>
                            <mml:mi>i</mml:mi>
                          </mml:mrow>
                        </mml:msub>
                        <mml:mo>⁢</mml:mo>
                        <mml:msub>
                          <mml:mi>x</mml:mi>
                          <mml:mi>t</mml:mi>
                        </mml:msub>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mrow>
                            <mml:mi>h</mml:mi>
                            <mml:mo>⁢</mml:mo>
                            <mml:mi>i</mml:mi>
                          </mml:mrow>
                        </mml:msub>
                        <mml:mo>⁢</mml:mo>
                        <mml:msub>
                          <mml:mi>x</mml:mi>
                          <mml:mrow>
                            <mml:mi>t</mml:mi>
                            <mml:mo>−</mml:mo>
                            <mml:mn>1</mml:mn>
                          </mml:mrow>
                        </mml:msub>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:msub>
                        <mml:mi>b</mml:mi>
                        <mml:mi>i</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo stretchy="false">)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p>
          <disp-formula id="S3.E8">
            <mml:math alttext="f_{t}=\sigma(W_{xf}x_{t}+W_{hf}x_{t-1}+b_{f})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>f</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mi>σ</mml:mi>
                  <mml:mo>⁢</mml:mo>
                  <mml:mrow>
                    <mml:mo stretchy="false">(</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mrow>
                            <mml:mi>x</mml:mi>
                            <mml:mo>⁢</mml:mo>
                            <mml:mi>f</mml:mi>
                          </mml:mrow>
                        </mml:msub>
                        <mml:mo>⁢</mml:mo>
                        <mml:msub>
                          <mml:mi>x</mml:mi>
                          <mml:mi>t</mml:mi>
                        </mml:msub>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mrow>
                            <mml:mi>h</mml:mi>
                            <mml:mo>⁢</mml:mo>
                            <mml:mi>f</mml:mi>
                          </mml:mrow>
                        </mml:msub>
                        <mml:mo>⁢</mml:mo>
                        <mml:msub>
                          <mml:mi>x</mml:mi>
                          <mml:mrow>
                            <mml:mi>t</mml:mi>
                            <mml:mo>−</mml:mo>
                            <mml:mn>1</mml:mn>
                          </mml:mrow>
                        </mml:msub>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:msub>
                        <mml:mi>b</mml:mi>
                        <mml:mi>f</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo stretchy="false">)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p>
          <disp-formula id="S3.E9">
            <mml:math alttext="o_{t}=\sigma(W_{xo}x_{t}+W_{ho}x_{t-1}+b_{o})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>o</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mi>σ</mml:mi>
                  <mml:mo>⁢</mml:mo>
                  <mml:mrow>
                    <mml:mo stretchy="false">(</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mrow>
                            <mml:mi>x</mml:mi>
                            <mml:mo>⁢</mml:mo>
                            <mml:mi>o</mml:mi>
                          </mml:mrow>
                        </mml:msub>
                        <mml:mo>⁢</mml:mo>
                        <mml:msub>
                          <mml:mi>x</mml:mi>
                          <mml:mi>t</mml:mi>
                        </mml:msub>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>W</mml:mi>
                          <mml:mrow>
                            <mml:mi>h</mml:mi>
                            <mml:mo>⁢</mml:mo>
                            <mml:mi>o</mml:mi>
                          </mml:mrow>
                        </mml:msub>
                        <mml:mo>⁢</mml:mo>
                        <mml:msub>
                          <mml:mi>x</mml:mi>
                          <mml:mrow>
                            <mml:mi>t</mml:mi>
                            <mml:mo>−</mml:mo>
                            <mml:mn>1</mml:mn>
                          </mml:mrow>
                        </mml:msub>
                      </mml:mrow>
                      <mml:mo>+</mml:mo>
                      <mml:msub>
                        <mml:mi>b</mml:mi>
                        <mml:mi>o</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo stretchy="false">)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p>
          <disp-formula id="S3.E10">
            <mml:math alttext="c_{t}=f_{t}\oplus c_{t-1}+i_{t}\oplus\phi(W_{xc}x_{t}+W_{hc}h_{t-1}+b_{c})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>c</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>f</mml:mi>
                        <mml:mi>t</mml:mi>
                      </mml:msub>
                      <mml:mo>⊕</mml:mo>
                      <mml:msub>
                        <mml:mi>c</mml:mi>
                        <mml:mrow>
                          <mml:mi>t</mml:mi>
                          <mml:mo>−</mml:mo>
                          <mml:mn>1</mml:mn>
                        </mml:mrow>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo>+</mml:mo>
                    <mml:msub>
                      <mml:mi>i</mml:mi>
                      <mml:mi>t</mml:mi>
                    </mml:msub>
                  </mml:mrow>
                  <mml:mo>⊕</mml:mo>
                  <mml:mrow>
                    <mml:mi>ϕ</mml:mi>
                    <mml:mo>⁢</mml:mo>
                    <mml:mrow>
                      <mml:mo stretchy="false">(</mml:mo>
                      <mml:mrow>
                        <mml:mrow>
                          <mml:msub>
                            <mml:mi>W</mml:mi>
                            <mml:mrow>
                              <mml:mi>x</mml:mi>
                              <mml:mo>⁢</mml:mo>
                              <mml:mi>c</mml:mi>
                            </mml:mrow>
                          </mml:msub>
                          <mml:mo>⁢</mml:mo>
                          <mml:msub>
                            <mml:mi>x</mml:mi>
                            <mml:mi>t</mml:mi>
                          </mml:msub>
                        </mml:mrow>
                        <mml:mo>+</mml:mo>
                        <mml:mrow>
                          <mml:msub>
                            <mml:mi>W</mml:mi>
                            <mml:mrow>
                              <mml:mi>h</mml:mi>
                              <mml:mo>⁢</mml:mo>
                              <mml:mi>c</mml:mi>
                            </mml:mrow>
                          </mml:msub>
                          <mml:mo>⁢</mml:mo>
                          <mml:msub>
                            <mml:mi>h</mml:mi>
                            <mml:mrow>
                              <mml:mi>t</mml:mi>
                              <mml:mo>−</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                          </mml:msub>
                        </mml:mrow>
                        <mml:mo>+</mml:mo>
                        <mml:msub>
                          <mml:mi>b</mml:mi>
                          <mml:mi>c</mml:mi>
                        </mml:msub>
                      </mml:mrow>
                      <mml:mo stretchy="false">)</mml:mo>
                    </mml:mrow>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p>
          <disp-formula id="S3.E11">
            <mml:math alttext="h_{t}=o_{t}\oplus\phi(c_{t})" display="block">
              <mml:mrow>
                <mml:msub>
                  <mml:mi>h</mml:mi>
                  <mml:mi>t</mml:mi>
                </mml:msub>
                <mml:mo>=</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>o</mml:mi>
                    <mml:mi>t</mml:mi>
                  </mml:msub>
                  <mml:mo>⊕</mml:mo>
                  <mml:mrow>
                    <mml:mi>ϕ</mml:mi>
                    <mml:mo>⁢</mml:mo>
                    <mml:mrow>
                      <mml:mo stretchy="false">(</mml:mo>
                      <mml:msub>
                        <mml:mi>c</mml:mi>
                        <mml:mi>t</mml:mi>
                      </mml:msub>
                      <mml:mo stretchy="false">)</mml:mo>
                    </mml:mrow>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p id="S3.SS4.p7">where <inline-formula><mml:math alttext="W_{mn}" display="inline"><mml:msub><mml:mi>W</mml:mi><mml:mrow><mml:mi>m</mml:mi><mml:mo>⁢</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> represents the weight of the link between gate <inline-formula><mml:math alttext="m" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math alttext="n" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math alttext="b_{n}" display="inline"><mml:msub><mml:mi>b</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:math></inline-formula> acts as a bias parameter to be learned, where <inline-formula><mml:math alttext="m\in{x,h}" display="inline"><mml:mrow><mml:mi>m</mml:mi><mml:mo>∈</mml:mo><mml:mrow><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math alttext="n\in{i,f,o,c}" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mo>∈</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>f</mml:mi><mml:mo>,</mml:mo><mml:mi>o</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula>. Furthermore, <inline-formula><mml:math alttext="\oplus" display="inline"><mml:mo>⊕</mml:mo></mml:math></inline-formula> represents the Hadamard product, <inline-formula><mml:math alttext="\sigma" display="inline"><mml:mi>σ</mml:mi></mml:math></inline-formula> designates the normal logistic sigmoid function, and <inline-formula><mml:math alttext="\phi" display="inline"><mml:mi>ϕ</mml:mi></mml:math></inline-formula> represents the hyperbolic tangent function. <inline-formula><mml:math alttext="\sigma(x)=1/(1+e^{-x})" display="inline"><mml:mrow><mml:mrow><mml:mi>σ</mml:mi><mml:mo>⁢</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:msup><mml:mi>e</mml:mi><mml:mrow><mml:mo>−</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:math></inline-formula>; <inline-formula><mml:math alttext="\phi(x)=(e^{x}-e^{-x})/(e^{x}+e^{-x})" display="inline"><mml:mrow><mml:mrow><mml:mi>ϕ</mml:mi><mml:mo>⁢</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mi>e</mml:mi><mml:mi>x</mml:mi></mml:msup><mml:mo>−</mml:mo><mml:msup><mml:mi>e</mml:mi><mml:mrow><mml:mo>−</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mi>e</mml:mi><mml:mi>x</mml:mi></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mi>e</mml:mi><mml:mrow><mml:mo>−</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:math></inline-formula>. The input, forget, and output gates are indicated as <inline-formula><mml:math alttext="i_{t}" display="inline"><mml:msub><mml:mi>i</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula>, <inline-formula><mml:math alttext="f_{t}" display="inline"><mml:msub><mml:mi>f</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula>, and <inline-formula><mml:math alttext="o_{t}" display="inline"><mml:msub><mml:mi>o</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula>, respectively; <inline-formula><mml:math alttext="c_{t}" display="inline"><mml:msub><mml:mi>c</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula> represents the internal state of the memory cell <inline-formula><mml:math alttext="c" display="inline"><mml:mi>c</mml:mi></mml:math></inline-formula> at time <inline-formula><mml:math alttext="t" display="inline"><mml:mi>t</mml:mi></mml:math></inline-formula>. It's hidden layer at time <inline-formula><mml:math alttext="t" display="inline"><mml:mi>t</mml:mi></mml:math></inline-formula> is represented by the vector <inline-formula><mml:math alttext="h_{t}" display="inline"><mml:msub><mml:mi>h</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula>, whereas <inline-formula><mml:math alttext="h_{t-1}" display="inline"><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> represents the values output by each memory cell in the hidden layer at the previous time step.</p>
        <p id="S3.SS4.p8">This paper proposes an innovative BiLSTM ensemble recommendation approach to improve prediction accuracy. The method combines outputs from multiple BiLSTM models by dynamically adjusting their weights based on previous prediction errors and a forgetting factor. These adaptive weights enhance the ability of the system to generate accurate recommendations. Each LSTM network in the ensemble serves as a base predictor [<xref rid="ref023" ref-type="bibr">23</xref>]. To promote diversity and capture complex data patterns, individual networks are trained with varying sequence lengths and memory cell configurations. This variation allows the ensemble to better model non-linear dependencies and complement each other's strengths, resulting in more precise and robust predictions.</p>
        <p id="S3.SS4.p9">Assuming a total of M LSTM models, their combined prediction for the time series, denoted as (<inline-formula><mml:math alttext="y^{(1)},y^{(2)},...,y^{(N)}" display="inline"><mml:mrow><mml:msup><mml:mi>y</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi>y</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mn>2</mml:mn><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msup><mml:mi>y</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>N</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>) with N observations, can be shown as:</p>
        <p>
          <disp-formula id="S3.E12">
            <mml:math alttext="\hat{y}^{k}=\sum^{M}_{m=1}w_{m}\hat{y}^{k}_{m},\quad\text{for }k=1,\ldots,N" display="block">
              <mml:mrow>
                <mml:mrow>
                  <mml:msup>
                    <mml:mover accent="true">
                      <mml:mi>y</mml:mi>
                      <mml:mo>^</mml:mo>
                    </mml:mover>
                    <mml:mi>k</mml:mi>
                  </mml:msup>
                  <mml:mo rspace="0.111em">=</mml:mo>
                  <mml:mrow>
                    <mml:munderover>
                      <mml:mo movablelimits="false">∑</mml:mo>
                      <mml:mrow>
                        <mml:mi>m</mml:mi>
                        <mml:mo>=</mml:mo>
                        <mml:mn>1</mml:mn>
                      </mml:mrow>
                      <mml:mi>M</mml:mi>
                    </mml:munderover>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>w</mml:mi>
                        <mml:mi>m</mml:mi>
                      </mml:msub>
                      <mml:mo>⁢</mml:mo>
                      <mml:msubsup>
                        <mml:mover accent="true">
                          <mml:mi>y</mml:mi>
                          <mml:mo>^</mml:mo>
                        </mml:mover>
                        <mml:mi>m</mml:mi>
                        <mml:mi>k</mml:mi>
                      </mml:msubsup>
                    </mml:mrow>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo rspace="1.167em">,</mml:mo>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mtext>for </mml:mtext>
                    <mml:mo>⁢</mml:mo>
                    <mml:mi>k</mml:mi>
                  </mml:mrow>
                  <mml:mo>=</mml:mo>
                  <mml:mrow>
                    <mml:mn>1</mml:mn>
                    <mml:mo>,</mml:mo>
                    <mml:mi mathvariant="normal">…</mml:mi>
                    <mml:mo>,</mml:mo>
                    <mml:mi>N</mml:mi>
                  </mml:mrow>
                </mml:mrow>
              </mml:mrow>
            </mml:math>
          </disp-formula>
        </p>
        <p id="S3.SS4.p11">The recommendation output (at the kth time stamp) derived using mth LSTM model denoted by <inline-formula><mml:math alttext="{\hat{y}}^{k}_{m}" display="inline"><mml:msubsup><mml:mover accent="true"><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover><mml:mi>m</mml:mi><mml:mi>k</mml:mi></mml:msubsup></mml:math></inline-formula>, while the related combining weight is <inline-formula><mml:math alttext="w_{m}" display="inline"><mml:msub><mml:mi>w</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:math></inline-formula>. Each weight <inline-formula><mml:math alttext="w_{m}" display="inline"><mml:msub><mml:mi>w</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:math></inline-formula> corresponds to certain model's output. We have <inline-formula><mml:math alttext="0\leq w_{m}\leq 1" display="inline"><mml:mrow><mml:mn>0</mml:mn><mml:mo>≤</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo>≤</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math alttext="\sum^{M}_{m=1}w_{m}=1" display="inline"><mml:mrow><mml:mrow><mml:msubsup><mml:mo>∑</mml:mo><mml:mrow><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>M</mml:mi></mml:msubsup><mml:msub><mml:mi>w</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:math></inline-formula>.</p>
        <p id="S3.SS4.p12">BiLSTM is an advanced form of LSTM that processes input sequences in both forward and backward directions. This dual processing allows BiLSTMs to capture contextual information from both past and future elements, making them highly effective for sequence modeling tasks. A BiLSTM consists of two LSTM layers: one reads the input from start to end, while the other reads from end to start. Their outputs are combined at each time step, offering a richer understanding of the sequence. BiLSTMs excel in capturing long-range dependencies and are especially useful in tasks like time series prediction, natural language processing, and speech recognition, where full context is essential for accurate predictions.</p>
        <sec id="S3.SS4.SSS1">
          <label>3.4.1</label>
          <title>Adaptive weights for BiLSTM models</title>
          <p id="S3.SS4.SSS1.p1">A distinctive weight determination method is used to accommodate the changing dynamics of the underlying time series data in a flexible manner. When the regression errors of individual estimators exhibit zero mean and are uncorrelated, their weighted aggregation achieves minimal variance by assigning weights inversely proportional to the variances of the estimators [<xref rid="ref026" ref-type="bibr">26</xref>]. This principle forms the theoretical foundation of our weight determination solution. A novel strategy for weight determination is utilized, with the goal of dynamically capturing the evolving dynamics of the underlying time series. The computation of the combining weights is conducted recursively:</p>
          <p>
            <disp-formula-group id="S3.E13">
              <disp-formula id="S3.E13X">
                <mml:math alttext="\displaystyle w^{k=1}_{m}=w^{k}_{m}+\lambda\Delta w^{k}_{m},\quad\text{for }m=%&#10;1,\ldots,M" display="inline">
                  <mml:mrow>
                    <mml:mrow>
                      <mml:msubsup>
                        <mml:mi>w</mml:mi>
                        <mml:mi>m</mml:mi>
                        <mml:mrow>
                          <mml:mi>k</mml:mi>
                          <mml:mo>=</mml:mo>
                          <mml:mn>1</mml:mn>
                        </mml:mrow>
                      </mml:msubsup>
                      <mml:mo>=</mml:mo>
                      <mml:mrow>
                        <mml:msubsup>
                          <mml:mi>w</mml:mi>
                          <mml:mi>m</mml:mi>
                          <mml:mi>k</mml:mi>
                        </mml:msubsup>
                        <mml:mo>+</mml:mo>
                        <mml:mrow>
                          <mml:mi>λ</mml:mi>
                          <mml:mo>⁢</mml:mo>
                          <mml:mi mathvariant="normal">Δ</mml:mi>
                          <mml:mo>⁢</mml:mo>
                          <mml:msubsup>
                            <mml:mi>w</mml:mi>
                            <mml:mi>m</mml:mi>
                            <mml:mi>k</mml:mi>
                          </mml:msubsup>
                        </mml:mrow>
                      </mml:mrow>
                    </mml:mrow>
                    <mml:mo rspace="1.167em">,</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:mtext>for </mml:mtext>
                        <mml:mo>⁢</mml:mo>
                        <mml:mi>m</mml:mi>
                      </mml:mrow>
                      <mml:mo>=</mml:mo>
                      <mml:mrow>
                        <mml:mn>1</mml:mn>
                        <mml:mo>,</mml:mo>
                        <mml:mi mathvariant="normal">…</mml:mi>
                        <mml:mo>,</mml:mo>
                        <mml:mi>M</mml:mi>
                      </mml:mrow>
                    </mml:mrow>
                  </mml:mrow>
                </mml:math>
              </disp-formula>
            </disp-formula-group>
          </p>
          <p id="S3.SS4.SSS1.p3">where <inline-formula><mml:math alttext="\lambda=0.3" display="inline"><mml:mrow><mml:mi>λ</mml:mi><mml:mo>=</mml:mo><mml:mn>0.3</mml:mn></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math alttext="\Delta w_{m}^{k}" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo>⁢</mml:mo><mml:msubsup><mml:mi>w</mml:mi><mml:mi>m</mml:mi><mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is computed according to the inverse prediction error of the respective BiLSTM base model:</p>
          <p>
            <disp-formula id="S3.E14">
              <mml:math alttext="\Delta w^{k}_{m}=\frac{\frac{1}{\epsilon^{k}_{m}}}{\frac{1}{\epsilon^{1}_{m}+%&#10;\frac{1}{\epsilon^{2}_{m}+\frac{1}{\epsilon^{3}_{m}+....+\frac{1}{\epsilon^{k}%&#10;_{m}}}}}}" display="block">
                <mml:mrow>
                  <mml:mrow>
                    <mml:mi mathvariant="normal">Δ</mml:mi>
                    <mml:mo>⁢</mml:mo>
                    <mml:msubsup>
                      <mml:mi>w</mml:mi>
                      <mml:mi>m</mml:mi>
                      <mml:mi>k</mml:mi>
                    </mml:msubsup>
                  </mml:mrow>
                  <mml:mo>=</mml:mo>
                  <mml:mfrac>
                    <mml:mfrac>
                      <mml:mn>1</mml:mn>
                      <mml:msubsup>
                        <mml:mi>ϵ</mml:mi>
                        <mml:mi>m</mml:mi>
                        <mml:mi>k</mml:mi>
                      </mml:msubsup>
                    </mml:mfrac>
                    <mml:mfrac>
                      <mml:mn>1</mml:mn>
                      <mml:mrow>
                        <mml:msubsup>
                          <mml:mi>ϵ</mml:mi>
                          <mml:mi>m</mml:mi>
                          <mml:mn>1</mml:mn>
                        </mml:msubsup>
                        <mml:mo>+</mml:mo>
                        <mml:mfrac>
                          <mml:mn>1</mml:mn>
                          <mml:mrow>
                            <mml:msubsup>
                              <mml:mi>ϵ</mml:mi>
                              <mml:mi>m</mml:mi>
                              <mml:mn>2</mml:mn>
                            </mml:msubsup>
                            <mml:mo>+</mml:mo>
                            <mml:mfrac>
                              <mml:mn>1</mml:mn>
                              <mml:mrow>
                                <mml:mrow>
                                  <mml:msubsup>
                                    <mml:mi>ϵ</mml:mi>
                                    <mml:mi>m</mml:mi>
                                    <mml:mn>3</mml:mn>
                                  </mml:msubsup>
                                  <mml:mo>+</mml:mo>
                                  <mml:mi mathvariant="normal">…</mml:mi>
                                </mml:mrow>
                                <mml:mo lspace="0em" rspace="0.167em">.</mml:mo>
                                <mml:mrow>
                                  <mml:mo>+</mml:mo>
                                  <mml:mfrac>
                                    <mml:mn>1</mml:mn>
                                    <mml:msubsup>
                                      <mml:mi>ϵ</mml:mi>
                                      <mml:mi>m</mml:mi>
                                      <mml:mi>k</mml:mi>
                                    </mml:msubsup>
                                  </mml:mfrac>
                                </mml:mrow>
                              </mml:mrow>
                            </mml:mfrac>
                          </mml:mrow>
                        </mml:mfrac>
                      </mml:mrow>
                    </mml:mfrac>
                  </mml:mfrac>
                </mml:mrow>
              </mml:math>
            </disp-formula>
          </p>
          <p id="S3.SS4.SSS1.p5">The <inline-formula><mml:math alttext="\epsilon_{m}^{k}" display="inline"><mml:msubsup><mml:mi>ϵ</mml:mi><mml:mi>m</mml:mi><mml:mi>k</mml:mi></mml:msubsup></mml:math></inline-formula> is related to past prediction error measured up to the <inline-formula><mml:math alttext="k^{th}" display="inline"><mml:msup><mml:mi>k</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>⁢</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> time step:</p>
          <p>
            <disp-formula id="S3.E15">
              <mml:math alttext="\epsilon_{m}^{k}=\sum_{t=k-V+1}^{k}\gamma^{k-t}e_{m}^{t}" display="block">
                <mml:mrow>
                  <mml:msubsup>
                    <mml:mi>ϵ</mml:mi>
                    <mml:mi>m</mml:mi>
                    <mml:mi>k</mml:mi>
                  </mml:msubsup>
                  <mml:mo rspace="0.111em">=</mml:mo>
                  <mml:mrow>
                    <mml:munderover>
                      <mml:mo movablelimits="false">∑</mml:mo>
                      <mml:mrow>
                        <mml:mi>t</mml:mi>
                        <mml:mo>=</mml:mo>
                        <mml:mrow>
                          <mml:mrow>
                            <mml:mi>k</mml:mi>
                            <mml:mo>−</mml:mo>
                            <mml:mi>V</mml:mi>
                          </mml:mrow>
                          <mml:mo>+</mml:mo>
                          <mml:mn>1</mml:mn>
                        </mml:mrow>
                      </mml:mrow>
                      <mml:mi>k</mml:mi>
                    </mml:munderover>
                    <mml:mrow>
                      <mml:msup>
                        <mml:mi>γ</mml:mi>
                        <mml:mrow>
                          <mml:mi>k</mml:mi>
                          <mml:mo>−</mml:mo>
                          <mml:mi>t</mml:mi>
                        </mml:mrow>
                      </mml:msup>
                      <mml:mo>⁢</mml:mo>
                      <mml:msubsup>
                        <mml:mi>e</mml:mi>
                        <mml:mi>m</mml:mi>
                        <mml:mi>t</mml:mi>
                      </mml:msubsup>
                    </mml:mrow>
                  </mml:mrow>
                </mml:mrow>
              </mml:math>
            </disp-formula>
          </p>
          <p id="S3.SS4.SSS1.p7">where <inline-formula><mml:math alttext="0&lt;\gamma\leq 1" display="inline"><mml:mrow><mml:mn>0</mml:mn><mml:mo>&lt;</mml:mo><mml:mi>γ</mml:mi><mml:mo>≤</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math alttext="1\leq V\leq k" display="inline"><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>V</mml:mi><mml:mo>≤</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math alttext="e_{m}^{t}" display="inline"><mml:msubsup><mml:mi>e</mml:mi><mml:mi>m</mml:mi><mml:mi>t</mml:mi></mml:msubsup></mml:math></inline-formula> denotes the prediction error at each time step <inline-formula><mml:math alttext="t" display="inline"><mml:mi>t</mml:mi></mml:math></inline-formula> of the <inline-formula><mml:math alttext="m" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula>th LSTM model, <inline-formula><mml:math alttext="\epsilon_{m}^{k}" display="inline"><mml:msubsup><mml:mi>ϵ</mml:mi><mml:mi>m</mml:mi><mml:mi>k</mml:mi></mml:msubsup></mml:math></inline-formula> is computed by constructing a sliding time window comprising the last <inline-formula><mml:math alttext="V" display="inline"><mml:mi>V</mml:mi></mml:math></inline-formula> prediction errors. The introduction of the forgetting factor <inline-formula><mml:math alttext="\gamma" display="inline"><mml:mi>γ</mml:mi></mml:math></inline-formula> serves to reduce the influence of older prediction errors. Through updating weights over time, we can determine these weights by examining inherent patterns in consecutive data forecasting attempts. This approach is suitable as it circumvents the need for complex optimization to ascertain adaptive weights.</p>
          <p id="S3.SS4.SSS1.p8">Using the preceding Eq., the weights evolve over the time series encompassing <inline-formula><mml:math alttext="T" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> time steps (where <inline-formula><mml:math alttext="K=1,\ldots,T" display="inline"><mml:mrow><mml:mi>K</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula>), culminating in the ultimate weights <inline-formula><mml:math alttext="w_{m}^{T}" display="inline"><mml:msubsup><mml:mi>w</mml:mi><mml:mi>m</mml:mi><mml:mi>T</mml:mi></mml:msubsup></mml:math></inline-formula> (where <inline-formula><mml:math alttext="m=1,\ldots,M" display="inline"><mml:mrow><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula>). Eventually, the weight designated to each model is calculated as:</p>
          <p>
            <disp-formula id="S3.E16">
              <mml:math alttext="w_{m}=\frac{w_{m}^{T}}{\sum_{n=1}^{M}w_{n}^{T}}form=1,...,M" display="block">
                <mml:mrow>
                  <mml:mrow>
                    <mml:msub>
                      <mml:mi>w</mml:mi>
                      <mml:mi>m</mml:mi>
                    </mml:msub>
                    <mml:mo>=</mml:mo>
                    <mml:mrow>
                      <mml:mfrac>
                        <mml:msubsup>
                          <mml:mi>w</mml:mi>
                          <mml:mi>m</mml:mi>
                          <mml:mi>T</mml:mi>
                        </mml:msubsup>
                        <mml:mrow>
                          <mml:msubsup>
                            <mml:mo>∑</mml:mo>
                            <mml:mrow>
                              <mml:mi>n</mml:mi>
                              <mml:mo>=</mml:mo>
                              <mml:mn>1</mml:mn>
                            </mml:mrow>
                            <mml:mi>M</mml:mi>
                          </mml:msubsup>
                          <mml:msubsup>
                            <mml:mi>w</mml:mi>
                            <mml:mi>n</mml:mi>
                            <mml:mi>T</mml:mi>
                          </mml:msubsup>
                        </mml:mrow>
                      </mml:mfrac>
                      <mml:mo>⁢</mml:mo>
                      <mml:mi>f</mml:mi>
                      <mml:mo>⁢</mml:mo>
                      <mml:mi>o</mml:mi>
                      <mml:mo>⁢</mml:mo>
                      <mml:mi>r</mml:mi>
                      <mml:mo>⁢</mml:mo>
                      <mml:mi>m</mml:mi>
                    </mml:mrow>
                    <mml:mo>=</mml:mo>
                    <mml:mn>1</mml:mn>
                  </mml:mrow>
                  <mml:mo>,</mml:mo>
                  <mml:mrow>
                    <mml:mi mathvariant="normal">…</mml:mi>
                    <mml:mo>,</mml:mo>
                    <mml:mi>M</mml:mi>
                  </mml:mrow>
                </mml:mrow>
              </mml:math>
            </disp-formula>
          </p>
          <p id="S3.SS4.SSS1.p10">The weights computed satisfy the constraints such that <inline-formula><mml:math alttext="0\leq w_{m}\leq 1" display="inline"><mml:mrow><mml:mn>0</mml:mn><mml:mo>≤</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo>≤</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math alttext="\sum_{m=1}^{M}w_{m}=1" display="inline"><mml:mrow><mml:mrow><mml:msubsup><mml:mo>∑</mml:mo><mml:mrow><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>M</mml:mi></mml:msubsup><mml:msub><mml:mi>w</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:math></inline-formula>[<xref rid="ref027" ref-type="bibr">27</xref>]. </p>
          <p id="S3.SS4.SSS1.p11">The equations presented indicate that adaptive weight based amplification is effectively carried out within the LSTM. Therefore, it proves instrumental in generating precise crop recommendation outcomes [<xref rid="ref027" ref-type="bibr">27</xref>]. Figure <xref ref-type="fig" rid="F1">1</xref> shows the general architecture of AWBiLSTM model.</p>
          <p>
            <fig id="F1">
              <label>Figure 1.</label>
              <caption>
                <p>General architecture of AWBiLSTM model.</p>
              </caption>
              <graphic xlink:href="New.jpg"/>
            </fig>
          </p>
        </sec>
      </sec>
    </sec>
    <sec id="S4">
      <label>4.</label>
      <title>Experimental Results and Discussion</title>
      <p id="S4.p1">The performance evaluation of the MSSA-AWBiLSTM method is carried out using Python 3.6.5 on a PC equipped with an i5-8600k processor, GeForce 1050Ti 4 GB GPU, 16 GB RAM, 250 GB SSD, and 1 TB HDD. The proposed MSSA-AWBiLSTM is compared with existing AWBiLSTM model to assess its effectiveness. Notably, the proposed MSSA-AWBiLSTM model surpasses existing classification algorithms [<xref rid="ref028" ref-type="bibr">28</xref>, <xref rid="ref029" ref-type="bibr">29</xref>, <xref rid="ref030" ref-type="bibr">30</xref>, <xref rid="ref018" ref-type="bibr">18</xref>, <xref rid="ref019" ref-type="bibr">19</xref>] for crop recommendation across various performance metrics including recall, precision, accuracy, specificity, Precision Recall Curve (PR-Score), receiver operating characteristic (ROC-Score), F1-Score, Matthews correlation coefficient (MCC), R2-Score and execution time. These algorithms have previously demonstrated their performance in related literature. The comparison of performance evaluation metrics is presented in Table <xref rid="T1" ref-type="table">1</xref>.</p>
      <p>
        <table-wrap id="T1">
          <label>Table 1</label>
          <caption>
            <p>Performance evaluation of MSSA-AWBiLSTM across standard classification metrics.</p>
          </caption>
          <table>
            <thead>
              <tr>
                <th style="border-top: 1px solid black;" align="left">Performance Metrics</th>
                <th style="border-top: 1px solid black;" align="left">Values</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td style="border-top: 1px solid black;" align="left">Accuracy</td>
                <td style="border-top: 1px solid black;" align="left">
                  <bold>98.72</bold>
                </td>
              </tr>
              <tr>
                <td align="left">Precision</td>
                <td align="left">
                  <bold>98.81</bold>
                </td>
              </tr>
              <tr>
                <td align="left">Recall</td>
                <td align="left">
                  <bold>98.54</bold>
                </td>
              </tr>
              <tr>
                <td align="left">Specificity</td>
                <td align="left">
                  <bold>98.10</bold>
                </td>
              </tr>
              <tr>
                <td align="left">PR-Score</td>
                <td align="left">
                  <bold>98.18</bold>
                </td>
              </tr>
              <tr>
                <td align="left">ROC-Score</td>
                <td align="left">
                  <bold>98.49</bold>
                </td>
              </tr>
              <tr>
                <td align="left">F1-Score</td>
                <td align="left">
                  <bold>98.48</bold>
                </td>
              </tr>
              <tr>
                <td style="border-bottom: 1px solid black;" align="left">MCC</td>
                <td style="border-bottom: 1px solid black;" align="left">
                  <bold>97.63</bold>
                </td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
      </p>
      <p id="S4.p2">Table <xref rid="T1" ref-type="table">1</xref> shows the crop recommendation results obtained from the MSSA-AWBiLSTM. Results demonstrate superior performance with an accuracy of 98.72%, precision of 98.81%, recall of 98.54%, specificity of 98.10%, PR-score of 98.18%, ROC-score of 98.49%, F1-score of 98.48%, and MCC of 97.63%.</p>
      <p id="S4.p3">Table <xref rid="T2" ref-type="table">2</xref> presents a comparative analysis of crop recommendation results achieved by the MSSA-AWBiLSTM model alongside existing models, including [<xref rid="ref012" ref-type="bibr">12</xref>, <xref rid="ref028" ref-type="bibr">28</xref>, <xref rid="ref029" ref-type="bibr">29</xref>, <xref rid="ref030" ref-type="bibr">30</xref>, <xref rid="ref019" ref-type="bibr">19</xref>]. The crop recommendation outcomes of the MSSA-AWBiLSTM model are compared with those of existing models in terms of R2 score, as presented in Table <xref rid="T3" ref-type="table">3</xref>. These values affirm the superior crop recommendation capabilities of the MSSA-AWBiLSTM model compared to other models.</p>
      <p>
        <table-wrap id="T2">
          <label>Table 2</label>
          <caption>
            <p>Comparative analysis of MSSA-AWBiLSTM and benchmark models on classification performance.</p>
          </caption>
          <table>
            <thead>
              <tr>
                <th style="border-top: 1px solid black;" align="left">Methods</th>
                <th style="border-top: 1px solid black;" align="left">Accuracy</th>
                <th style="border-top: 1px solid black;" align="left">Precision</th>
                <th style="border-top: 1px solid black;" align="left">Recall</th>
                <th style="border-top: 1px solid black;" align="left">
                  <p>
                    <table-wrap>
                      <table>
                        <tr>
                          <td align="left">F1-</td>
                        </tr>
                        <tr>
                          <td align="left">Score</td>
                        </tr>
                      </table>
                    </table-wrap>
                  </p>
                </th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td style="border-top: 1px solid black;" align="left">XAI-CROP</td>
                <td style="border-top: 1px solid black;" align="left">95.12</td>
                <td style="border-top: 1px solid black;" align="left">95.62</td>
                <td style="border-top: 1px solid black;" align="left">95.78</td>
                <td style="border-top: 1px solid black;" align="left">95.86</td>
              </tr>
              <tr>
                <td align="left">
                  <p>
                    <table-wrap>
                      <table>
                        <tr>
                          <td align="left">IDCSO-</td>
                        </tr>
                        <tr>
                          <td align="left">WLSTM</td>
                        </tr>
                      </table>
                    </table-wrap>
                  </p>
                </td>
                <td align="left">92.68</td>
                <td align="left">90.88</td>
                <td align="left">91.98</td>
                <td align="left">91.79</td>
              </tr>
              <tr>
                <td align="left">
                  <p>
                    <table-wrap>
                      <table>
                        <tr>
                          <td align="left">MSSA-</td>
                        </tr>
                        <tr>
                          <td align="left">AWBiLSTM</td>
                        </tr>
                      </table>
                    </table-wrap>
                  </p>
                </td>
                <td align="left">
                  <bold>98.72</bold>
                </td>
                <td align="left">
                  <bold>98.81</bold>
                </td>
                <td align="left">
                  <bold>98.54</bold>
                </td>
                <td align="left">
                  <bold>98.48</bold>
                </td>
              </tr>
              <tr>
                <td align="left">RFOERNN</td>
                <td align="left">98.45</td>
                <td align="left">98.51</td>
                <td align="left">98.45</td>
                <td align="left">98.46</td>
              </tr>
              <tr>
                <td align="left">MMML</td>
                <td align="left">97.91</td>
                <td align="left">97.97</td>
                <td align="left">97.91</td>
                <td align="left">97.92</td>
              </tr>
              <tr>
                <td align="left">NC-SAE</td>
                <td align="left">94.64</td>
                <td align="left">94.06</td>
                <td align="left">94.78</td>
                <td align="left">95.49</td>
              </tr>
              <tr>
                <td align="left">
                  <p>
                    <table-wrap>
                      <table>
                        <tr>
                          <td align="left">SVM-Kernel</td>
                        </tr>
                      </table>
                    </table-wrap>
                  </p>
                </td>
                <td align="left">91.73</td>
                <td align="left">91.13</td>
                <td align="left">92.42</td>
                <td align="left">93.80</td>
              </tr>
              <tr>
                <td align="left">SVM</td>
                <td align="left">89.49</td>
                <td align="left">88.17</td>
                <td align="left">88.70</td>
                <td align="left">88.46</td>
              </tr>
              <tr>
                <td align="left">SSAE-CNN</td>
                <td align="left">90.85</td>
                <td align="left">93.86</td>
                <td align="left">90.60</td>
                <td align="left">92.94</td>
              </tr>
              <tr>
                <td align="left">PCA-CNN</td>
                <td align="left">88.62</td>
                <td align="left">89.27</td>
                <td align="left">87.75</td>
                <td align="left">89.08</td>
              </tr>
              <tr>
                <td style="border-bottom: 1px solid black;" align="left">DT</td>
                <td style="border-bottom: 1px solid black;" align="left">85.07</td>
                <td style="border-bottom: 1px solid black;" align="left">84.73</td>
                <td style="border-bottom: 1px solid black;" align="left">85.91</td>
                <td style="border-bottom: 1px solid black;" align="left">85.39</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
      </p>
      <p>
        <table-wrap id="T3">
          <label>Table 3</label>
          <caption>
            <p>Comparison of R2 score analysis.</p>
          </caption>
          <table>
            <thead>
              <tr>
                <th style="border-top: 1px solid black;" align="left">Methods</th>
                <th style="border-top: 1px solid black;" align="left">R2-Score</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td style="border-top: 1px solid black;" align="left">XAI-CROP</td>
                <td style="border-top: 1px solid black;" align="left">94.15</td>
              </tr>
              <tr>
                <td align="left">IDCSO-WLSTM</td>
                <td align="left">92.54</td>
              </tr>
              <tr>
                <td align="left">MSSA-AWBiLSTM</td>
                <td align="left">
                  <bold>99.14</bold>
                </td>
              </tr>
              <tr>
                <td align="left">RFOERNN</td>
                <td align="left">99.88</td>
              </tr>
              <tr>
                <td align="left">MMML</td>
                <td align="left">98.54</td>
              </tr>
              <tr>
                <td align="left">SVR</td>
                <td align="left">91.99</td>
              </tr>
              <tr>
                <td align="left">KNN</td>
                <td align="left">87.05</td>
              </tr>
              <tr>
                <td align="left">MLR</td>
                <td align="left">89.10</td>
              </tr>
              <tr>
                <td style="border-bottom: 1px solid black;" align="left">ANN</td>
                <td style="border-bottom: 1px solid black;" align="left">91.97</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
      </p>
      <p id="S4.p4">When the proposed method operates at a faster pace, it signifies an improvement in the system's efficiency. Both the proposed MSSA-AWBiLSTM algorithm and the current methods are utilized to compare their execution times as a measure of comparison. Remarkably, the MSSA-AWBiLSTM algorithm demonstrates shorter execution times when applied to the crop recommendation dataset. Table <xref rid="T4" ref-type="table">4</xref> provides a comparison between the existing and proposed systems based on Execution Time (in seconds).</p>
      <p>
        <table-wrap id="T4">
          <label>Table 4</label>
          <caption>
            <p>Comparison of Execution time of MSSA-AWBiLSTM approach with existing methodologies.</p>
          </caption>
          <table>
            <thead>
              <tr>
                <th style="border-top: 1px solid black;" align="left">Methods</th>
                <th style="border-top: 1px solid black;" align="left">Execution time (sec)</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td style="border-top: 1px solid black;" align="left">XAI-CROP</td>
                <td style="border-top: 1px solid black;" align="left">240.0554</td>
              </tr>
              <tr>
                <td align="left">IDCSO-WLSTM</td>
                <td align="left">241.0484</td>
              </tr>
              <tr>
                <td align="left">MSSA-AWBiLSTM</td>
                <td align="left">
                  <bold>228.0112</bold>
                </td>
              </tr>
              <tr>
                <td align="left">RFOERNN</td>
                <td align="left">240.0529</td>
              </tr>
              <tr>
                <td align="left">MMML</td>
                <td align="left">242.0492</td>
              </tr>
              <tr>
                <td align="left">SVR</td>
                <td align="left">242.0532</td>
              </tr>
              <tr>
                <td align="left">KNN</td>
                <td align="left">241.0639</td>
              </tr>
              <tr>
                <td align="left">MLR</td>
                <td align="left">242.0677</td>
              </tr>
              <tr>
                <td style="border-bottom: 1px solid black;" align="left">ANN</td>
                <td style="border-bottom: 1px solid black;" align="left">242.0704</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
      </p>
      <p id="S4.p5">Figure <xref ref-type="fig" rid="F2">2</xref> depicts the R2 convergence curve derived from the MSSA-AWBiLSTM model. This curve gives crucial information about the model's performance and capacity to simulate the dataset's intrinsic patterns and connections. The R2 convergence curve, which serves as an indicator of convergence during training, shows the R2 score on the y-axis against the number of iterations on the x-axis. The R2 score indicates how much of the target variable's variance is explained by the proposed model. A higher R2 value shows that the model is more aligned with the data and has enhanced prediction accuracy. Analysis of the R2 convergence curves allows researchers to gauge training dynamics, performance stability, convergence rate, and the potential for overfitting or underfitting.</p>
      <p>
        <fig id="F2">
          <label>Figure 2.</label>
          <caption>
            <p>R2 convergence curve for MSSA-AWBiLSTM model.</p>
          </caption>
          <graphic xlink:href="Untitled.jpg"/>
        </fig>
      </p>
      <sec id="S4.SS1">
        <label>4.1</label>
        <title>Multivariable Analysis</title>
        <p id="S4.SS1.p1">Soil pH, nitrogen (N), phosphorus (P), potassium (K), organic carbon, temperature, rainfall, humidity, sunshine hours, soil type index, and area ID were among the important variables that were included in the multivariable analysis for crop recommendation. Principal component analysis (PCA) was performed to reduce dimensionality and maintain 95% of the variance using the top six principal components, while multiple linear regression (MLR) was utilized to evaluate the effect of these factors on crop yield. Additionally, the analysis used the variance inflation factor (VIF) to check for multicollinearity and the analysis of variance (ANOVA) to assess the significance of the grouped variables. The AWBiLSTM ensemble model was used to improve prediction after the MSSA selected features based on the PCA results. The main conclusion of the analysis were that temperature, rainfall, and soil pH all significantly affected crop yield (p &lt; 0.01). Furthermore, when multivariable features were used instead of raw input data, AWBiLSTM performance increased.</p>
      </sec>
    </sec>
    <sec id="S5">
      <label>5.</label>
      <title>Conclusion and Future Work</title>
      <p id="S5.p1">Agriculture is the primary livelihood for farmers, making crop selection based on soil conditions crucial for maximizing yield. Data-driven recommendations using ML and IoT can significantly improve farmers' decision-making, reducing costs and enhancing precision in precision agriculture. This study presents a novel MSSA-AWBiLSTM method for crop recommendation and yield prediction, addressing the challenge of selecting the most suitable crop during the growing season. The model is fine-tuned using region-specific data and validated for different soil types.</p>
      <p id="S5.p2">The MSSA algorithm selects key features from the dataset, while AWBiLSTM predicts and recommends crops using an LSTM network ensemble with adaptive weighting. Experimental results show that MSSA-AWBiLSTM outperforms other methods, achieving a 98.72% improvement in crop prediction accuracy and a higher R2 value by optimally selecting climate parameters.</p>
      <p id="S5.p3">While the MSSA-AWBiLSTM method improves crop prediction, it may not perform well with weed species detection. Future work will focus on expanding the dataset with more variables, integrating yield prediction, and incorporating market factors, such as post-harvest storage and profitability, to further enhance and validate the proposed model's applicability.</p>
      <p id="S5.p4">The MSSA-AWBiLSTM approach has drawbacks despite its great accuracy. It might have trouble with tasks that need for multiple kinds of data, including inputs based on images, like weed species detection. Additionally, the model's scalability may be constrained by the availability and quality of region-specific data. Furthermore, outside variables like insect outbreaks and market dynamics are not taken into account. Future studies will concentrate on adding more economic and environmental factors, broadening the dataset to encompass a variety of crop and soil types, and improving the model to facilitate post-harvest decision-making, storage planning, and profitability forecasting for more useful implementation.</p>
    </sec>
  </body>
  <back>
    <ack>
      <title>Acknowledgments</title>
      <p id="ack.p1">This work was supported without any funding.</p>
    </ack>
    <sec id="sec0100" sec-type="COI-statement">
      <title>Conflict of interest</title>
      <p>The author declare no conflicts of interest.</p>
    </sec>
    <ref-list>
      <title>References</title>
      <ref id="ref001">
        <label>[1]</label>
        <mixed-citation> Zhai, Z., Martínez, J. F., Beltran, V., &amp; Martínez, N. L. (2020). Decision support systems for agriculture 4.0: Survey and challenges. <italic>Computers and Electronics in Agriculture, 170</italic>, 105256. [<uri>https://doi.org/10.1016/j.compag.2020.105256</uri>] </mixed-citation>
      </ref>
      <ref id="ref002">
        <label>[2]</label>
        <mixed-citation> Bondre, D. A., &amp; Mahagaonkar, S. (2019). Prediction of crop yield and fertilizer recommendation using machine learning algorithms. <italic>International Journal of Engineering Applied Sciences and Technology, 4</italic>(5), 371-376. </mixed-citation>
      </ref>
      <ref id="ref003">
        <label>[3]</label>
        <mixed-citation> Akulwar, P. (2020). A recommended system for crop disease detection and yield prediction using machine learning approach. <italic>Recommender System with Machine Learning and Artificial Intelligence: Practical Tools and Applications in Medical, Agricultural and Other Industries</italic>, 141-163. [<uri>https://doi.org/10.1002/9781119711582.ch8</uri>] </mixed-citation>
      </ref>
      <ref id="ref004">
        <label>[4]</label>
        <mixed-citation> Kumar, A., Sarkar, S., &amp; Pradhan, C. (2019, April). Recommendation system for crop identification and pest control technique in agriculture. In <italic>2019 International Conference on Communication and Signal Processing (ICCSP)</italic> (pp. 0185-0189). IEEE. [<uri>https://doi.org/10.1109/ICCSP.2019.8698099</uri>] </mixed-citation>
      </ref>
      <ref id="ref005">
        <label>[5]</label>
        <mixed-citation> Shahana, I. L., Kamal, V. P., Anoop, R. L., &amp; Francis, A. (2022). Crop prediction methods: A comparative study. <italic>Asian J Agric Ext Econ Sociol, 40</italic>(8), 228-236. </mixed-citation>
      </ref>
      <ref id="ref006">
        <label>[6]</label>
        <mixed-citation> Gosai, D., Raval, C., Nayak, R., Jayswal, H., &amp; Patel, A. (2021). Crop recommendation system using machine learning. <italic>International Journal of Scientific Research in Computer Science, Engineering and Information Technology, 7</italic>(3), 558-569. </mixed-citation>
      </ref>
      <ref id="ref007">
        <label>[7]</label>
        <mixed-citation> Das, B., Ali, S. M., Shaikh, M. Z., Chandio, A. F., Rahu, M. A., Pabani, J. K., &amp; Khalil, M. U. R. (2023, January). Linear regression based crop suggestive system for local pakistani farmers. In <italic>2023 Global Conference on Wireless and Optical Technologies (GCWOT)</italic> (pp. 1-6). IEEE. [<uri>https://doi.org/10.1109/GCWOT57803.2023.10064668</uri>] </mixed-citation>
      </ref>
      <ref id="ref008">
        <label>[8]</label>
        <mixed-citation> Ray, R. K., Das, S. K., &amp; Chakravarty, S. (2022, January). Smart crop recommender system-a machine learning approach. In <italic>2022 12th International Conference on Cloud Computing, Data Science &amp; Engineering (Confluence)</italic> (pp. 494-499). IEEE. [<uri>https://doi.org/10.1109/Confluence52989.2022.9734173</uri>] </mixed-citation>
      </ref>
      <ref id="ref009">
        <label>[9]</label>
        <mixed-citation> Ujjainia, S., Gautam, P., &amp; Veenadhari, S. (2021). A crop recommendation system to improve crop productivity using ensemble technique. <italic>International Journal of Innovative Technology and Exploring Engineering (IJITEE), 10</italic>(4). </mixed-citation>
      </ref>
      <ref id="ref010">
        <label>[10]</label>
        <mixed-citation> Pudumalar, S., Ramanujam, E., Rajashree, R. H., Kavya, C., Kiruthika, T., &amp; Nisha, J. (2017, January). Crop recommendation system for precision agriculture. In <italic>2016 eighth international conference on advanced computing (ICoAC)</italic> (pp. 32-36). IEEE. [<uri>https://doi.org/10.1109/ICoAC.2017.7951740</uri>] </mixed-citation>
      </ref>
      <ref id="ref011">
        <label>[11]</label>
        <mixed-citation> Venkatanaresh, M., &amp; Kullayamma, I. (2024). Deep learning based concurrent excited gated recurrent unit for crop recommendation based on soil and climatic conditions. <italic>Multimedia Tools and Applications, 83</italic>(24), 64109-64138. [<uri>https://doi.org/10.1007/s11042-023-18004-y</uri>] </mixed-citation>
      </ref>
      <ref id="ref012">
        <label>[12]</label>
        <mixed-citation> Kiruthika, S., &amp; Karthika, D. (2023). IOT-BASED professional crop recommendation system using a weight-based long-term memory approach. <italic>Measurement: Sensors, 27</italic>, 100722. [<uri>https://doi.org/10.1016/j.measen.2023.100722</uri>] </mixed-citation>
      </ref>
      <ref id="ref013">
        <label>[13]</label>
        <mixed-citation> Tubishat, M., Ja'afar, S., Alswaitti, M., Mirjalili, S., Idris, N., Ismail, M. A., &amp; Omar, M. S. (2021). Dynamic salp swarm algorithm for feature selection. <italic>Expert Systems with Applications, 164</italic>, 113873. [<uri>https://doi.org/10.1016/j.eswa.2020.113873</uri>] </mixed-citation>
      </ref>
      <ref id="ref014">
        <label>[14]</label>
        <mixed-citation> Mirjalili, S., Gandomi, A. H., Mirjalili, S. Z., Saremi, S., Faris, H., &amp; Mirjalili, S. M. (2017). Salp Swarm Algorithm: A bio-inspired optimizer for engineering design problems. <italic>Advances in engineering software, 114</italic>, 163-191. [<uri>https://doi.org/10.1016/j.advengsoft.2017.07.002</uri>] </mixed-citation>
      </ref>
      <ref id="ref015">
        <label>[15]</label>
        <mixed-citation> Faris, H., Heidari, A. A., Ala'M, A. Z., Mafarja, M., Aljarah, I., Eshtay, M., &amp; Mirjalili, S. (2020). Time-varying hierarchical chains of salps with random weight networks for feature selection. <italic>Expert Systems with Applications, 140</italic>, 112898. [<uri>https://doi.org/10.1016/j.eswa.2019.112898</uri>] </mixed-citation>
      </ref>
      <ref id="ref016">
        <label>[16]</label>
        <mixed-citation> Kassaymeh, S., Abdullah, S., Al-Betar, M. A., &amp; Alweshah, M. (2022). Salp swarm optimizer for modeling the software fault prediction problem. <italic>Journal of King Saud University-Computer and Information Sciences, 34</italic>(6), 3365-3378. [<uri>https://doi.org/10.1016/j.jksuci.2021.01.015</uri>] </mixed-citation>
      </ref>
      <ref id="ref017">
        <label>[17]</label>
        <mixed-citation> Aljarah, I., Habib, M., Faris, H., Al-Madi, N., Heidari, A. A., Mafarja, M., … &amp; Mirjalili, S. (2020). A dynamic locality multi-objective salp swarm algorithm for feature selection. <italic>Computers &amp; Industrial Engineering, 147</italic>, 106628. [<uri>https://doi.org/10.1016/j.cie.2020.106628</uri>] </mixed-citation>
      </ref>
      <ref id="ref018">
        <label>[18]</label>
        <mixed-citation> Shams, M. Y., Gamel, S. A., &amp; Talaat, F. M. (2024). Enhancing crop recommendation systems with explainable artificial intelligence: a study on agricultural decision-making. <italic>Neural Computing and Applications, 36</italic>(11), 5695-5714. [<uri>https://doi.org/10.1007/s00521-023-09391-2</uri>] </mixed-citation>
      </ref>
      <ref id="ref019">
        <label>[19]</label>
        <mixed-citation> Gopi, P. S. S., &amp; Karthikeyan, M. (2024). Red fox optimization with ensemble recurrent neural network for crop recommendation and yield prediction model. <italic>Multimedia Tools and Applications, 83</italic>(5), 13159-13179. [<uri>https://doi.org/10.1007/s11042-023-16113-2</uri>] </mixed-citation>
      </ref>
      <ref id="ref020">
        <label>[20]</label>
        <mixed-citation> Colombo-Mendoza, L. O., Paredes-Valverde, M. A., Salas-Zárate, M. D. P., &amp; Valencia-García, R. (2022). Internet of Things-driven data mining for smart crop production prediction in the peasant farming domain. <italic>Applied Sciences, 12</italic>(4), 1940. [<uri>https://doi.org/10.3390/app12041940</uri>] </mixed-citation>
      </ref>
      <ref id="ref021">
        <label>[21]</label>
        <mixed-citation> Lipton, Z. C., Berkowitz, J., &amp; Elkan, C. (2015). A critical review of recurrent neural networks for sequence learning. <italic>arXiv preprint arXiv:1506.00019</italic>. </mixed-citation>
      </ref>
      <ref id="ref022">
        <label>[22]</label>
        <mixed-citation> Hochreiter, S., &amp; Schmidhuber, J. (1997). Long short-term memory. <italic>Neural computation, 9</italic>(8), 1735-1780. [<uri>https://doi.org/10.1162/neco.1997.9.8.1735</uri>] </mixed-citation>
      </ref>
      <ref id="ref023">
        <label>[23]</label>
        <mixed-citation> Adhikari, R. (2015). A neural network based linear ensemble framework for time series forecasting. <italic>Neurocomputing, 157</italic>, 231-242. [<uri>https://doi.org/10.1016/j.neucom.2015.01.012</uri>] </mixed-citation>
      </ref>
      <ref id="ref024">
        <label>[24]</label>
        <mixed-citation> Oikonomidis, A., Catal, C., &amp; Kassahun, A. (2023). Deep learning for crop yield prediction: a systematic literature review. <italic>New Zealand Journal of Crop and Horticultural Science, 51</italic>(1), 1-26. [<uri>https://doi.org/10.1080/01140671.2022.2032213</uri>] </mixed-citation>
      </ref>
      <ref id="ref025">
        <label>[25]</label>
        <mixed-citation> Soni, T., Gupta, G., &amp; Dutta, M. (2024, November). A Comparative Analysis of Decision Trees, Random Forests, and XGBoost for Enhanced Crop Recommendation. In <italic>2024 4th International Conference on Technological Advancements in Computational Sciences (ICTACS)</italic> (pp. 626-630). IEEE. [<uri>https://doi.org/10.1109/ICTACS62700.2024.10841044</uri>] </mixed-citation>
      </ref>
      <ref id="ref026">
        <label>[26]</label>
        <mixed-citation> Perrone, M. P., &amp; Cooper, L. N. (1995). When networks disagree: Ensemble methods for hybrid neural networks. In <italic>How we learn; How we remember: Toward an understanding of brain and neural systems: Selected papers of Leon N Cooper</italic> (pp. 342-358). [<uri>https://doi.org/10.1142/9789812795885_0025</uri>] </mixed-citation>
      </ref>
      <ref id="ref027">
        <label>[27]</label>
        <mixed-citation> Choi, J. Y., &amp; Lee, B. (2018). Combining LSTM network ensemble via adaptive weighting for improved time series forecasting. <italic>Mathematical problems in engineering, 2018</italic>(1), 2470171. [<uri>https://doi.org/10.1155/2018/2470171</uri>] </mixed-citation>
      </ref>
      <ref id="ref028">
        <label>[28]</label>
        <mixed-citation> Dash, R., Dash, D. K., &amp; Biswal, G. C. (2021). Classification of crop based on macronutrients and weather data using machine learning techniques. <italic>Results in Engineering, 9</italic>, 100203. [<uri>https://doi.org/10.1016/j.rineng.2021.100203</uri>] </mixed-citation>
      </ref>
      <ref id="ref029">
        <label>[29]</label>
        <mixed-citation> Gopal, P. M., &amp; Bhargavi, R. (2019). A novel approach for efficient crop yield prediction. <italic>Computers and Electronics in Agriculture, 165</italic>, 104968. [<uri>https://doi.org/10.1016/j.compag.2019.104968</uri>] </mixed-citation>
      </ref>
      <ref id="ref030">
        <label>[30]</label>
        <mixed-citation> Zhang, W. T., Wang, M., Guo, J., &amp; Lou, S. T. (2021). Crop classification using MSCDN classifier and sparse auto-encoders with non-negativity constraints for multi-temporal, Quad-Pol SAR data. <italic>Remote Sensing, 13</italic>(14), 2749. [<uri>https://doi.org/10.3390/rs13142749</uri>] </mixed-citation>
      </ref>
      <ref id="ref031">
        <label>[31]</label>
        <mixed-citation> Ouaar, F., &amp; Boudjemaa, R. (2021). Modified salp swarm algorithm for global optimisation. <italic>Neural Computing and Applications, 33</italic>(14), 8709-8734. [<uri>https://doi.org/10.1007/s00521-020-05621-z</uri>] </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>
