6
votes

Est-il possible d'utiliser des nombres complexes comme étiquettes cibles en scikit apprendre?

J'essaie d'utiliser Sklearn pour prédire une variable qui représente la rotation. En raison du saut malheureux de -PI à PI aux extrêmes de rotation, je pense qu'une bien meilleure méthode serait d'utiliser un nombre complexe comme cible. De cette façon, une erreur de 1 + 0,01J à 1-0.01J n'est pas aussi dévastatrice.

Je ne trouve aucune documentation décrivant si Sklearn prend en charge des nombres complexes en tant que cibles aux classificateurs. En théorie, la métrique de distance devrait fonctionner très bien. Cela devrait donc fonctionner pendant au moins certains algorithmes de régression.

Quelqu'un peut-il suggérer comment obtenir un algorithme de régression pour fonctionner avec des nombres complexes en tant que cibles?


0 commentaires

3 Réponses :


1
votes

bonne question. Que diriez-vous de transformer les angles en une paire d'étiquettes, à savoir. X et Y coordonnées. Ce sont des fonctions continues d'angle (cos et péché). Vous pouvez combiner les résultats des classificateurs distincts X et Y pour un angle? $ \ theta = \ signe (x) \ arctan (y / x) $. Cependant, ce résultat sera instable si les deux classificateurs renvoient des chiffres près de zéro.


1 commentaires

FYI, NUMPY a une fonction pratique appelée "arctan2" qui retournera thêta avec le quadrant correct donné un décalage X et Y.



4
votes

Plusieurs régresseurs soutiennent des objectifs de régression multidimensionnelle. Il suffit de voir les nombres complexes sous forme de points 2D.


1 commentaires

Pour fabriquer la réponse d'Andy encore plus claire, aucun régresseur Sklearn, je sais d'accepter des nombres complexes dans la variable cible (ni dans les variables d'entrée). Le suppose soit 32 ou 64 morceaux flottants. Un codage de flotteur 2D explicite des parties réelles et imaginaires de la variable complexe devrait fonctionner cependant.



1
votes

Jusqu'à présent, j'ai découvert que la plupart des classificateurs, comme des régresseurs linéaires, convertissent automatiquement des nombres complexes à la partie réelle.

Le Knn et les régresseurs Radiusnn, cependant, fonctionnent bien - car ils font une moyenne pondérée des étiquettes voisines et gèrent donc des nombres complexes gracieusement.

L'utilisation d'un classificateur multi-cible est une autre option, mais je ne veux pas découpler les instructions X et Y, car cela peut conduire à des solutions instables telles que les mentions de panique de colonel, lorsque les deux résultats sortent près de 0.

Je vais essayer d'autres classificateurs avec des cibles complexes et mettre à jour les résultats ici.


1 commentaires

En effet, comme mentionné le colonel mentionné, en utilisant la norme et la phase de la cible complexe, un codage de flotteur 2D au lieu de la vraie, une pièce imaginaire peut avoir plus de sens pour votre problème.