Pourquoi ne pas aborder la classification par régression?

51

Certains documents sur l'apprentissage automatique que j'ai vus disent qu'il est une mauvaise idée d'aborder un problème de classification par régression. Mais je pense qu'il est toujours possible de faire une régression continue pour ajuster les données et tronquer la prédiction continue afin de produire des classifications discrètes. Alors pourquoi est-ce une mauvaise idée?

Strin
la source
Je pense que la régression est toujours plus compliquée que la classification dans un environnement de production

Réponses:

57

"..approach problème de classification par régression .." par "régression" Je supposerai que vous entendez une régression linéaire, et je comparerai cette approche à l'approche de "classification" consistant à ajuster un modèle de régression logistique.

Avant de faire cela, il est important de clarifier la distinction entre les modèles de régression et de classification. Les modèles de régression prédisent une variable continue, telle que la quantité de pluie ou l'intensité du soleil. Ils peuvent également prévoir des probabilités, telles que la probabilité qu'une image contienne un chat. Un modèle de régression à prédiction de probabilité peut être utilisé dans le cadre d'un classificateur en imposant une règle de décision. Par exemple, si la probabilité est de 50% ou plus, décidez qu'il s'agit d'un chat.

La régression logistique prédit les probabilités et constitue donc un algorithme de régression. Cependant, il est communément décrit comme une méthode de classification dans la littérature d’apprentissage automatique, car il peut être (et est souvent) utilisé pour créer des classificateurs. Il existe également de "vrais" algorithmes de classification, tels que SVM, qui ne prédisent qu'un résultat et ne fournissent pas de probabilité. Nous ne discuterons pas de ce type d'algorithme ici.

Régression linéaire ou logistique sur les problèmes de classification

Comme Andrew Ng l'explique , avec la régression linéaire, vous insérez un polynôme dans les données - par exemple, comme dans l'exemple ci-dessous, nous ajustons une ligne droite dans l' ensemble d'échantillons {taille de la tumeur, type de tumeur} :

entrez la description de l'image ici

En haut, les tumeurs malignes gagnent , les non malignes, , et la ligne verte correspond à notre hypothèse . Pour faire des prédictions, nous pouvons dire que pour toute taille de tumeur donnée , si dépasse nous prédisons une tumeur maligne, sinon nous prédisons bénigne.10h(x)xh(x)0.5

On dirait que nous pourrions prédire correctement chaque échantillon d’entraînement, mais modifions maintenant un peu la tâche.

Intuitivement, il est clair que toutes les tumeurs supérieures à un certain seuil sont malignes. Ajoutons donc un autre échantillon avec une taille de tumeur énorme et exécutons à nouveau la régression linéaire:

entrez la description de l'image ici

Maintenant notre ne fonctionne plus. Pour continuer à faire des prédictions correctes, nous devons le changer en ou quelque chose du genre - mais cela ne signifie pas comment l'algorithme devrait fonctionner.h(x)>0.5malignanth(x)>0.2

Nous ne pouvons pas modifier l'hypothèse chaque fois qu'un nouvel échantillon arrive. Au lieu de cela, nous devrions l’apprendre à partir des données du jeu d’entraînement, puis (en utilisant l’hypothèse que nous avons apprise) faire des prédictions correctes pour les données que nous n’avons pas vues auparavant.

J'espère que cela explique pourquoi la régression linéaire n'est pas la meilleure solution pour les problèmes de classification! En outre, vous voudrez peut-être regarder VI. Régression logistique. Vidéo de classement sur ml-class.org qui explique l'idée plus en détail.


MODIFIER

probabilislogic a demandé ce qu'un bon classificateur ferait. Dans cet exemple particulier, vous utiliseriez probablement une régression logistique qui pourrait apprendre une hypothèse comme celle-ci (je l'invente):

entrez la description de l'image ici

Notez que la régression linéaire et la régression logistique vous donnent une ligne droite (ou un polynôme d'ordre supérieur) mais ces lignes ont une signification différente:

  • h(x) pour la régression linéaire interpole ou extrapole la sortie et prédit la valeur de nous n'avons pas vue. C'est simplement comme brancher un nouveau et obtenir un nombre brut, et est plus approprié pour des tâches telles que la prédiction, par exemple le prix d'une voiture basé sur {la taille de la voiture, l'âge de la voiture}, etc.xx
  • h(x) pour la régression logistique vous indique la probabilité que appartienne à la classe "positive". C'est pourquoi on appelle cela un algorithme de régression: il estime une quantité continue, la probabilité. Cependant, si vous définissez un seuil sur la probabilité, tel que , vous obtenez un classificateur, ce qui est souvent le cas avec la sortie d'un modèle de régression logistique. Cela équivaut à mettre une ligne sur l'intrigue: tous les points situés au-dessus de la ligne du classificateur appartiennent à une classe alors que les points ci-dessous appartiennent à l'autre classe.xh(x)>0.5

Ainsi, la ligne de fond est que dans le scénario de classification , nous utilisons un tout autre raisonnement et un tout autre algorithme que dans le scénario de régression.

andreister
la source
@andreister: Mais que se passerait-il si toutes les valeurs aberrantes avaient été supprimées ou tronquées, la régression linéaire est-elle toujours une mauvaise idée?
Tomek Tarczynski
Votre exemple est bon, mais il ne montre pas ce qu'un "bon classificateur" ferait. Pourriez-vous ajouter ceci? notez que l'ajout de points de données devrait modifier la ligne pour n'importe quelle méthode. Vous n'avez pas expliqué pourquoi c'est un mauvais changement.
probabilitéislogique
1
@andreister: Votre exemple a montré que de mauvaises données pourraient gâcher la régression linéaire. Mais pouvons-nous utiliser une régression quadrique ou une hypothèse encore plus compliquée pour faire de la "régression" un bon classificateur?
Strin
1
@probabilityislogic - bon point, j'ai mis à jour la réponse.
andreister
2
@ Strine: les hypothèses plus compliquées sont plus susceptibles de sur-adapter les données. (C’est-à-dire, pour s’adapter aux bizarreries des données que vous avez en main, ce qui entraînerait une mauvaise adaptation des données futures.) Je me souviens d’un cours que j’ai suivi et où un gars au premier rang était juste sûr que le professeur nous retenait et ne nous donnant pas les algorithmes sophistiqués qui nous permettraient de faire un tabac sur les marchés de l'électricité ... Il n'a jamais vraiment compris le surajustement.
Wayne
14

Je ne peux pas penser à un exemple dans lequel la classification est en réalité l'objectif ultime. Le but réel est presque toujours de faire des prévisions précises, par exemple des probabilités. Dans cet esprit, la régression (logistique) est votre ami.

Frank Harrell
la source
5
Il me semble que ce qui constitue effectivement une classification est en définitive l'objectif de la plupart des processus automatisés dans lesquels il est impossible, voire impossible, d'intervenir ou de juger par l'homme. Lorsqu'il reçoit, par exemple, un signal numérique transmis bruyant, le récepteur ne peut pas décider qu'un bit particulier doit être 0,97 au lieu de 0 ou 1.
Cardinal
6
À l'exception du fait que le coût d'un faux positif ou le coût d'un faux négatif est rarement sous le contrôle de l'analyste qui a effectué la classification, l'analyste d'origine ne peut donc pas choisir de manière fiable le point de coupure "correct" pour la classification. En outre, il est sage de créer une "zone grise" de risque intermédiaire dans laquelle aucune classification n'est effectuée et la recommandation est "d'obtenir davantage de données".
Frank Harrell
1
Je pense que je crois exactement le contraire de l'affirmation dans cette réponse, et je n'ai jamais rencontré cette perspective dans toute ma formation universitaire en apprentissage automatique. C'est très surprenant pour moi que quelqu'un dise cela. En pratique, j'ai presque toujours rencontré des problèmes lorsque les gens pensent qu'ils veulent prédire une quantité continue, mais en réalité ils veulent prédire l'appartenance à différents compartiments catégoriques de cette quantité. J'ai du mal à trouver des cas où la prévision d'une quantité continue est utile en termes d'inférence de fond sous-jacente au problème.
Ely
9
Je pense que vous avez pris pour acquis une bonne partie du dogme de l'apprentissage automatique. Vous faites un grand nombre d'hypothèses injustifiées. L'une d'elles est que les gens ont réellement besoin d'un choix forcé pour devenir un seau catégorique. Ils peuvent prétendre vouloir cela, mais ils n'en ont vraiment pas besoin dans la plupart des situations. Les choix ne doivent pas être forcés. Un bon choix est "pas de décision, obtenez plus de données". La prévision d’une quantité continue sous-jacente est généralement ce qui est nécessaire. Il serait intéressant d’étudier la théorie de la décision optimale (Bayes). Si vous pouvez fournir un exemple concret, je commenterai davantage.
Frank Harrell
11
+1 sur le commentaire de @Frank Harrell. Par exemple, prédire les températures, les précipitations, le niveau des rivières est immensément plus utile que les prédictions selon lesquelles il fera chaud ou humide ou inondera. Même si le problème est un mouton ou une chèvre? une estimation de pr (mouton) est plus informative que binaire "mouton" ou "chèvre".
Nick Cox
1

Pourquoi ne pas regarder certaines preuves? Bien que beaucoup soutiennent que la régression linéaire ne convient pas à la classification, elle peut quand même fonctionner. Pour gagner un peu d'intuition, j'ai inclus la régression linéaire (utilisée comme classificateur) dans la comparaison de classificateur de scikit-learn . Voici ce qui se passe:

entrez la description de l'image ici

La limite de décision est plus étroite qu'avec les autres classificateurs, mais la précision est la même. Tout comme le classifieur de vecteur de support linéaire, le modèle de régression vous donne un hyperplan qui sépare les classes dans l'espace des fonctions.

Comme nous le voyons, l’utilisation de la régression linéaire comme classifieur peut fonctionner, mais comme toujours, je validerais les prédictions.

Pour mémoire, voici à quoi ressemble mon code de classificateur:

class LinearRegressionClassifier():

def __init__(self):
    self.reg = LinearRegression()

def fit(self, X, y):
    self.reg.fit(X, y)

def predict(self, X):
    return np.clip(self.reg.predict(X),0,1)

def decision_function(self, X):
    return np.clip(self.reg.predict(X),0,1)

def score(self, X, y):
    return accuracy_score(y,np.round(self.predict(X)))
Nils
la source
Regardez la règle de
précision
0

En outre, pour développer des réponses déjà bonnes, pour toute tâche de classification au-delà d’une tâche à deux variables, l’utilisation de la régression nous obligerait à imposer une distance et un ordre entre les classes. En d'autres termes, nous pourrions obtenir des résultats différents simplement en remuant les étiquettes des classes ou en modifiant l'échelle des valeurs numériques attribuées (par exemple, les classes étiquetées vs ) , ce qui va à l'encontre de l'objectif du problème de classification.1,10,100,...1,2,3,...

Noisette
la source