# SBNNR: Small-Size Bat-Optimized KNN Regression
## 5 Experimental Results
### Computational Cost  
The computational complexity of the SBNNR (small-size bat-optimized KNN regression) method can be broken down as follows:  
* K-Nearest Neighbors (KNN): For a dataset with \(n\) instances and \(d\) features, a naive KNN has a complexity of \(O(n\cdot d)\) for each query point. In SBNNR, instance and feature selection reduce \(n\) and \(d\), so if \(n^{\prime}\) and \(d^{\prime}\) represent the reduced instances and features after selection, the adjusted KNN complexity per query is \(O(n^{\prime}\cdot d^{\prime})\).
* Bat Algorithm (BA): The BA runs iterative optimizations, with each iteration evaluating potential solutions. For \(T\) iterations and a population size of \(P\), the BA has a complexity of \(O(T\cdot P\cdot n^{\prime}\cdot d^{\prime})\), where \(n^{\prime}\) and \(d^{\prime}\) are the reduced dimensions for instance and feature sets.
* Generative Adversarial Networks (GANs): GAN training involves both a generator and a discriminator, each with a training complexity of \(O(n^{\prime}\cdot e\cdot g)\), where \(e\) is the number of epochs and \(g\) is the number of layers in the network. As the GAN generates synthetic data, it impacts both training time and complexity based on these parameters.  
\begin{table}
\begin{tabular}{c c c} \hline \hline
**Dataset** & **Mean CV \(R^{2}\)** & \(R^{2}\)**Standard Deviation** \\ \hline BONE & 0.9694 & 0.01465 \\ FAT & 0.9915 & 0.00882 \\ \hline \hline \end{tabular}
\end{table}
Table 6: Cross-validations results (\(R^{2}\)).  
* Deep Neural Networks (DNNs): DNN feature extraction requires forward passes and backpropagation for each layer and sample, with complexity expressed as \(O(n^{\prime}\cdot h\cdot l)\), where \(h\) is the number of hidden units per layer and \(l\) is the number of layers. The combined complexity, considering the components in sequence, can be approximated as follows: \[O(T\cdot P\cdot n^{\prime}\cdot d^{\prime})+O(n^{\prime}\cdot e\cdot g)+O(n^{ \prime}\cdot h\cdot l)\] (13)  
In practice, SBNNR's BA optimization step dominates the complexity, especially when \(T\) and \(P\) are large. The approach is designed to maintain feasible computational demands by minimizing \(n^{\prime}\) and \(d^{\prime}\) through instance and feature selection. Table 7 shows the execution times for the SBNNR method across different datasets, detailing both overall execution and final training times. While computational complexity provides insight into the scalability and demands of the proposed approach, practical execution time is a more relevant metric in real-world scenarios. Execution time captures the effects of hardware, implementation efficiencies, and any preprocessing overheads, which are critical for understanding deployment feasibility.  
The SBNNR framework, implemented in Python 3.10, leverages optimized libraries and routines that help manage the inherent complexity of the BA, GANs, and DNNs. Python 3.10's enhancements, including pattern matching and improved runtime performance, contribute to the efficiency of this implementation. Consequently, the actual execution times observed in Table 7 offer a more practical perspective, helping developers anticipate resource requirements and identify potential bottlenecks.  
By balancing theoretical complexity with observed runtime performance in Python 3.10, the framework ensures robust modeling for small datasets while remaining feasible for deployment on standard computational setups.