Add Weighted Euclidean Distance Metric

### Describe the workflow you want to enable

The workflow I want to enable is the ability for users to easily incorporate feature importance into distance-based algorithms like clustering (e.g., KMeans) and nearest neighbors (e.g., KNeighborsClassifier). Currently, scikit-learn allows users to define custom distance metrics, but there is no built-in support for weighted distance metrics, which are essential when certain features are more important than others.

Example Workflow:
A user has a dataset where some features are more relevant than others (e.g., in customer segmentation, age and income might be more important than the number of children).

The user wants to use a clustering algorithm like KMeans or a nearest neighbors algorithm like KNeighborsClassifier but needs to account for the varying importance of features.

The user specifies a vector of weights corresponding to the importance of each feature.

The algorithm uses the weighted Euclidean distance metric to compute distances, ensuring that more important features have a greater influence on the results.

### Describe your proposed solution

I propose adding a Weighted Euclidean Distance Metric to scikit-learn as a built-in distance metric. This will allow users to specify feature weights directly, making it easier to incorporate feature importance into distance-based algorithms.
 **Key Components of the Solution:**

1. New Class: 

- Add a WeightedEuclideanDistance class to the sklearn.metrics.pairwise module.
This class will accept a vector of weights during initialization.
- It will compute the weighted Euclidean distance between two points using the formula:
**d(x, y) = sqrt( summation from i = 1 to n of [ w_i * (x_i - y_i) squared ] )**
where ​wi are the user-defined weights.



### Describe alternatives you've considered, if relevant

_No response_

### Additional context

Why This Feature is Needed:

- Feature Importance: In many real-world datasets, not all features are equally important. For example, in medical diagnosis, certain biomarkers might be more relevant than others. A weighted distance metric allows users to account for this.
- 
- Ease of Use: While scikit-learn allows users to define custom distance metrics, this requires writing additional code and can be error-prone. A built-in weighted distance metric would simplify the process and make it more accessible to users.
- 
- Alignment with scikit-learn’s Design: Scikit-learn emphasizes ease of use and consistency. Adding a weighted distance metric aligns with this philosophy by providing a simple, consistent way to incorporate feature importance into distance-based algorithms.

Existing Alternatives:

- Custom Distance Functions: Users can define custom distance functions using the metric parameter. However, this requires additional coding and lacks the convenience of a built-in solution.
- 
- Feature Weighting via Preprocessing: Users can scale features by their importance before applying distance-based algorithms. However, this approach is less intuitive and can be cumbersome.

Potential Impact:

- This feature would benefit users in domains like bioinformatics, finance, and customer analytics, where feature importance is critical.
- 
- It would also make scikit-learn more competitive with other machine learning libraries that offer weighted distance metrics.

COMMENT:
We've already discussed deprecating `paired_distances` and `paired_*_distances` in #26982, and there are ongoing PRs #27129, #30537 addressing this.

I feel that including the proposed weighted Euclidean metric would contradict the ongoing plans and the consensus reached during that discussion, particularly in [#26982 (comment)](https://github.com/scikit-learn/scikit-learn/issues/26982#issuecomment-1667511223).

Additionally, the implementation seems straightforward, and it might be better for users to implement it themselves. This way, they wouldn’t need to perform input validations, which would make their own implementation more efficient.

Maybe cc @Micky774 to see if he has any additional thoughts. Apologies for the spam.

Labels: New Feature, Needs Decision - Include Feature