## 3 Materials and Methods
### Performance Evaluation  
Accuracy (A) is a common evaluation metric used to measure the performance of a classification model. It represents the percentage of correctly classified instances out of the total number of instances in the dataset.  
Precision (P) is used to measure how often the model is correct when it predicts the positive classes.  
Recall (R) is used to measure how well the model can detect positive samples and is useful for evaluating models that need to avoid false negatives.  
F1-score (F1) is used to balance precision and recall, indicating the model's overall performance. A high F1-score indicates that the model is good at avoiding both false positives and false negatives.  
Area under the curve (AUC) is used to measure the ability of a binary classification model to distinguish between positive and negative samples.  
Specificity (S) is an evaluation metric used to measure the ability of a classification model to correctly identify negative instances or the true-negative rate.  
Step:5 in Algorithm 2 explains the function EvaluateModels(\(X_{train}\), \(Y_{train}\), \(X_{test}\), \(Y_{test}\)), which conducts an empirical evaluation of machine learning algorithms on training and testing datasets. It trains and evaluates six different models ((\(LR\)), (\(SVM\)), (\(NB\)), (\(RF\)), (\(XGB\)), and (\(KNN\))) using the provided training (\(X_{train}\), \(Y_{train}\)) and testing (\(X_{test}\), \(Y_{test}\)) data.  
```
Input :Dataset with 266 features (\(X,Y\)) Output :Reduced feature set, evaluation results /* Step 4: Feature Selection and Scoring */ Function ChiSquareFeatureReduction(\(X,Y\)): // Reduce features from 266 to 150 using Chi-Square \(ReducedFeatures\leftarrow\textsc{ChiSquareReduction}(X,Y,150)\); // Score the top 50 features \(Chi2 Scores\leftarrow\textsc{ScoreFeatures}(ReducedFeatures,50)\); return\(ReducedFeatures,Chi2 Scores\); FunctionGiniImportanceFeatureReduction(\(ReducedFeatures\), \(Y\)): // Further reduce features from 150 to 50 using Gini \(TopFeatures\leftarrow\textsc{GiniReduction}(ReducedFeatures,Y,50)\); // Score the features \(GiniScores\leftarrow\textsc{ScoreFeatures}(TopFeatures,50)\); return\(TopFeatures,GiniScores\); FunctionSplitData(\(Data\), \(Ratio\)): // Split the data into training and testing sets \(\mathcal{X}_{train},\mathcal{X}_{test}\leftarrow\textsc{TrainTestSplit}(Data,Ratio)\); return\(\mathcal{X}_{train},\mathcal{X}_{test}\); /* Step 5: Empirical Evaluation of ML Models using Performance Metrics */ Function EvaluateModels(\(X_{train}\), \(Y_{train}\), \(X_{test}\), \(Y_{test}\)): // Empirical evaluation of ML algorithms on training and testing datasets \(LR\leftarrow\textsc{LogisticRegression}(X_{train},Y_{train},X_{test},Y_{test})\); \(SVM\leftarrow\textsc{SupportVectorMachine}(X_{train},Y_{train},X_{test},Y_{test})\); \(NB\leftarrow\textsc{NaiveBayes}(X_{train},Y_{train},X_{test},Y_{test})\); \(RF\leftarrow\textsc{RandomForest}(X_{train},Y_{train},X_{test},Y_{test})\); \(XGB\leftarrow\textsc{XGBoost}(X_{train},Y_{train},X_{test},Y_{test})\); \(KNN\leftarrow\textsc{KnearestNeighbors}(X_{train},Y_{train},X_{test},Y_{test})\); return\(LR,SVM,NB,RF,XGB,KNN\);
```  
**Algorithm 2**Feature selection, scoring, and empirical evaluation of ML  
**Main process:**  
\(X,Y\leftarrow\textsc{LoadData}()\); \(ReducedFeatures\leftarrow\textsc{ChiSquareFeatureReduction}(X,Y)\); \(TopFeatures\leftarrow\textsc{GiniImportanceFeatureReduction}(ReducedFeatures,Y)\); \(X_{train},Y_{train},X_{test},Y_{test}\leftarrow\textsc{TrainTestSplit}(TopFeatures,Ratio=0.8)\); \(LR,SVM,NB,RF,XGB,KNN\leftarrow\textsc{EvaluateModels}(X_{train},Y_{train},X_{test},Y_{test})\); // Store the results  WriteToExcel(\(LR,SVM,NB,RF,XGB,KNN\), 'evaluation-results.xlsx'); ```  
**Algorithm 3**Feature selection, scoring, and empirical evaluation of ML