I have a database holding 10-ish features that describe different breeds of dogs. They are mostly categorical features, but some provide ranges for values. Here's a demo representation of the database, showing the mixture:
|Breed|Min_Height|Max_Height|Min_Weight|Max_Weight|sub_cat|is_friendly|
|---------------------------------------------------------------------|
|Dober|20 |20 |40 |52 |sport |FALSE |
|Pood |15 |25 |35 |45 |water |TRUE |
...
As you can see, the data is mixed and the ranges have some overlap from entry to entry.
Say I receive an input of:
|height|weight|sub_cat|is_friendly|
|---------------------------------|
|16 |43 |water |TRUE |
I need to calculate the 5 most similar breeds in the database, and give the user a probability of it being each of those 5.
The pain point is the ranges provided, the way they overlap, and the mixed datatype nature of the problem. Gower's Distance caught my eye, but the ranges are throwing me off.
I thought about just calculating the mean for the ranges and calculating the similarity between input and the means, but in the case of the min_height and max_height in the example database above, the mean would be the same between entries! So that won't work.
Something that allows me to assign weights to features would be nice too (ex : we are confident in accuracy of the input weight value, not as much in height, so add some favor to weight when making our similarity calculation).
How should I approach this classification problem?