## 2 Materials and Methods
### Vector Manipulation  
Our enhancement process involves modifying the input vectors with the objective of assisting the DR algorithm in performing better. Since we are working with labelled data, our goal is to enhance the clustering of the reduced data. To validate the effectiveness of our approach, we assess the clustering performance of the reduced datasets. We take an input set \(X=[x^{1},\ldots,x^{n}]\) of data points, where each vector \(x^{i}\) is a set of real-valued observations that may come from simulations or measurements. Therefore, each vector \(x\) from \(X\) has the form: \(x=(w_{1},\ldots,w_{d})\), where \(d\) is the dimension of the vector. Each real value \(w_{i}\) is referred to as a _weight_. The primary objective of our vector manipulation is to segregate the more relevant weights from the less relevant ones. The rationale behind our vector manipulation is that fewer specific values are likely to be more specific to the data point. To achieve this, we adopt the concept of Inverse Document Frequency [31], borrowed from information retrieval. **Inverse Document Frequency** (IDF), introduced as _term specificity_ Spark [PERSON] [32; 33] is a common concept used in document processing, and it is defined as:  
\[-\log_{2}(n_{t}/N), \tag{1}\]  
where \(n_{t}\) is the number of documents where the term \(t\) appears, and \(N\) is the total number of documents of the corpus. The idea behind this concept is that words that appear in few documents from a corpus may be more relevant as a feature for those documents than words that appear frequently in all documents. By computing the IDF score for each term in a collection of documents, we can identify the relative importance of each term in characterizing the content of individual documents. A common reformulation of IDF is the smooth version:  
\[\log_{2}(N/(n_{t}+1))+1. \tag{2}\]  
In our specific domain, we adapt the IDF concept as follows: We treat our vectors as documents, with the total number of vectors denoted by \(N\). The individual weights within the vectors are considered analogous to words. To compute the IDF measure, we count the number of vectors in which each weight \(w_{i}>0\) appears across the entire set of vectors. This calculation results in a vector of dimensions \(1\times D\), which we refer to as the IDFs' vector: \(IDFs=(\mathit{idf}_{1},\ldots,\mathit{idf}_{D})\). For every vector in the set \(\mathbb{X}\), we calculate the IDF by considering all the weights as terms. Consequently, we determine the number of times each weight \(i\) is nonzero across the entire dataset. This enables us to define the set of weights that all vectors have for each dimension \(d\) as \(\mathbb{W}_{d}\). We can then calculate the count of nonzero elements in this set of weights as \(weights=\mathrm{count}(w_{d}\in\mathbb{W}_{d}\mid w_{d}>0)\). With this information, we can use \(weights\) as the value of \(n_{t}\) in Equation (2). To apply the IDF measure while preserving the significance of the individual weight values, a direct substitution of each weight by its IDF is not suitable, as this would lead to the loss of the weight's original magnitude and relevance. Instead, we aim to modulate the IDF by a factor that reflects the significance of the value. To achieve this, we approximate the significance of a weight by considering the dispersion of the channel in which it exists. For example, in a channel where most values are \(1\), a weight with a value of zero would be highly significant, whereas a weight close to the average may not be highly significant. To address this, we use the square root of the difference between each weight and the average of all weights in that particular dimension. Specifically, for each weight \(w_{d}\), we calculate the average as \(\overline{w_{d}}=\sum_{j=1..N}w_{j,d}/N\), where \(N\) is the number of vectors in the dataset. We then compute the corresponding weighting factor \(wf\) as follows: \(wf=\mathrm{sign}(w_{1}-\overline{w_{1}})\cdot\sqrt{|w_{1}-\overline{w_{1}}|}\).