Les ressources ont été chargées... Je charge...

L'apprentissage automatique amusant: le guide le plus simple

Auteur:L'inventeur de la quantification - un petit rêve, Créé le 12/07/2016 12:37:21, mis à jour le 12/07/2016 12:40:26

L'apprentissage automatique amusant: le guide le plus simple


Lorsque vous entendez parler d'apprentissage automatique, n'avez-vous pas une vague idée de ce que cela signifie? Êtes-vous fatigué de simplement hocher la tête lorsque vous parlez à vos collègues?

Ce guide s'adresse à tous les amis qui sont curieux de savoir ce qu'est l'apprentissage automatique mais qui ne savent pas comment commencer. Je suppose que beaucoup d'entre vous ont déjà lu les termes de Wikipedia sur l'apprentissage automatique et sont frustrés de ne pas pouvoir donner une explication de haut niveau. Cet article est ce que vous cherchez.

L'objectif de cet article est d'être accessible, ce qui signifie qu'il y a beaucoup de généralisations.

  • Pourquoi l'apprentissage automatique?

    Le concept de l'apprentissage automatique suppose que vous n'avez pas besoin d'écrire de code de programmation spécialisé pour les problèmes en suspens et que les algorithmes génériques peuvent vous donner des réponses intéressantes sur un ensemble de données.

    Par exemple, il existe un type d'algorithme appelé algorithme de classification qui peut diviser les données en différents groupes. Un algorithme de classification utilisé pour identifier les chiffres manuscrits peut être utilisé pour diviser les e-mails en spam et courrier ordinaire sans modifier une ligne de code. L'algorithme n'a pas changé, mais les données de formation entrées ont changé, ce qui donne une logique de classification différente.

    img

    Les algorithmes d'apprentissage automatique sont une boîte noire qui peut être réutilisée pour résoudre de nombreux problèmes de classification différents.

    L'apprentissage automatique est un terme générique qui couvre un grand nombre d'algorithmes génétiques similaires.

  • Deux types d'algorithmes d'apprentissage automatique

    Vous pouvez considérer les algorithmes d'apprentissage automatique comme étant divisés en deux grandes catégories: l'apprentissage supervisé et l'apprentissage non supervisé.

    • Apprentissage supervisé

      Supposons que vous soyez un agent immobilier et que votre entreprise s'agrandisse, et que vous ayez donc engagé un groupe d'internes pour vous aider. Mais le problème est que vous pouvez savoir à première vue la valeur de votre maison, les internes n'ont aucune expérience et ne savent pas comment l'évaluer.

      Afin d'aider votre stagiaire (peut-être pour vous libérer pour partir en vacances), vous décidez d'écrire un petit logiciel qui permet d'évaluer la valeur d'une maison dans votre région en fonction de facteurs tels que la taille de la maison, le terrain et le prix d'achat d'une maison similaire.

      Vous écrivez chaque transaction de logement dans la ville depuis trois mois, chaque transaction avec une longue série de détails sur le nombre de chambres, la taille de la maison, le terrain, etc. Mais le plus important, vous écrivez le prix final:

      C'est notre base de données de formation à la cuisine.

      img

      Nous allons utiliser ces données de formation pour écrire un programme pour estimer la valeur des autres maisons de la région:

      img

      C'est ce qu'on appelle l'apprentissage supervisé. Vous connaissez déjà le prix de vente de chaque maison, en d'autres termes, vous connaissez la réponse à la question et vous pouvez inverser la logique de la solution.

      Pour écrire le logiciel, vous entrez les données de formation contenues dans chaque ensemble de propriétés dans votre algorithme d'apprentissage automatique.

      C'est comme un exercice d'arithmétique où les symboles de fonctionnement sont effacés:

      img

      Mon Dieu! un étudiant sournois a complètement effacé le symbole arithmétique sur les réponses de son professeur.

      Vous savez ce que vous devriez faire à la corde numérique de gauche de l'arithmétique pour obtenir la réponse à droite de l'arithmétique.

      Dans l'apprentissage supervisé, vous laissez l'ordinateur calculer les relations entre les nombres pour vous. Une fois que vous connaissez les méthodes mathématiques nécessaires pour résoudre ce type de problème particulier, vous pouvez résoudre d'autres problèmes du même type.

    • Apprentissage non supervisé

      Revenons à l'exemple du courtier immobilier au début. Si vous ne savez pas ce qu'il faut pour vendre chaque maison, vous pouvez faire des choses géniales, même si vous ne savez que la taille et l'emplacement de la maison. C'est ce qu'on appelle l'apprentissage non supervisé.

      img

      Même si vous ne voulez pas prédire des données inconnues (comme les prix), vous pouvez utiliser l'apprentissage automatique pour faire quelque chose d'intéressant.

      C'est un peu comme si quelqu'un vous donnait un morceau de papier sur lequel il y avait une liste de nombres et vous disait: " Oh, je ne sais pas ce que ces nombres signifient, peut-être que vous pourrez en tirer une formule ou les classer, ou quelque chose comme ça -- bonne chance!

      Comment allez-vous gérer ces données? Tout d'abord, vous pouvez utiliser un algorithme pour segmenter automatiquement les différents marchés à partir des données. Peut-être que vous constaterez que les acheteurs près de l'université préfèrent les maisons petites mais avec plusieurs chambres à coucher, alors que les acheteurs en banlieue préfèrent les grandes maisons avec trois chambres à coucher.

      Vous pouvez aussi faire quelque chose de génial: trouver automatiquement des données sur les prix des maisons qui diffèrent des autres données. Les propriétés de ces groupes peuvent être des immeubles de grande hauteur, et vous pouvez concentrer les meilleurs vendeurs dans ces zones car leurs commissions sont plus élevées.

      Dans le reste de cet article, nous parlerons principalement de l'apprentissage supervisé, mais ce n'est pas parce que l'apprentissage non supervisé n'est pas très utile ou n'a aucun goût. En fait, l'apprentissage non supervisé devient de plus en plus important à mesure que les algorithmes s'améliorent et que les données ne doivent pas être associées aux bonnes réponses.

      Il y a beaucoup d'autres types d'algorithmes d'apprentissage automatique.

      C'est cool, mais peut-on vraiment considérer l'évaluation des prix comme un apprentissage par soi-même?

      En tant qu'être humain, votre cerveau est capable de gérer la plupart des situations sans aucune instruction claire. Si vous êtes agent immobilier depuis longtemps, vous avez une intuition instinctive de l'appropriation des prix, de la meilleure façon de les commercialiser, des clients qui seront intéressés, etc. L'objectif de la recherche sur l'IA forte est de pouvoir reproduire cette capacité par ordinateur.

      Cependant, les algorithmes d'apprentissage automatique actuels ne sont pas si bons qu'ils ne peuvent se concentrer que sur des problèmes très spécifiques et limités. Peut-être que dans ce cas, la définition la plus appropriée de l'apprentissage automatique est de trouver une équation pour résoudre un problème spécifique sur la base d'un petit nombre de données de cas.

      Malheureusement, le nom de la machine à écrire est trop mauvais pour trouver une équation pour résoudre un problème spécifique basé sur un petit nombre de données de cas.

      Bien sûr, si vous lisez cet article 50 ans plus tard, nous aurons des algorithmes d'intelligence artificielle puissants, et cet article ressemble à une vieille antiquité.

      C'est un peu comme si nous écrivions du code.

      Dans l'exemple précédent, comment comptez-vous écrire le processus d'évaluation de la valeur d'un logement?

      Si vous ne savez rien de l'apprentissage automatique, il est fort probable que vous essayez d'écrire quelques règles de base pour évaluer les prix des maisons:

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
          # In my area, the average house costs $200 per sqft
          price_per_sqft = 200
      
          if neighborhood == "hipsterton":
          # but some areas cost a bit more
              price_per_sqft = 400
      
          elif neighborhood == "skid row":
          # and some areas cost less
              price_per_sqft = 100
      
          # start with a base price estimate based on how big the place is
          price = price_per_sqft * sqft
      
          # now adjust our estimate based on the number of bedrooms
          if num_of_bedrooms == 0:
          # Studio apartments are cheap
              price = price — 20000
          else:
          # places with more bedrooms are usually
          # more valuable
              price = price + (num_of_bedrooms * 1000)
      
          return price
      

      Si vous êtes occupé comme ça pendant quelques heures, vous pouvez obtenir un peu de résultats, mais votre programme ne sera jamais parfait et il sera difficile de le maintenir lorsque les prix changent.

      N'est-il pas préférable que l'ordinateur trouve un moyen d'accomplir les fonctions ci-dessus?

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = <computer, plz do some math for me>
          return price
      

      Une façon de considérer ce problème est de voir le prix d'un logement comme un plat de sauce délicieuse, composé par le nombre de chambres, la surface et le terrain. Si vous pouvez calculer l'impact de chaque composant sur le prix final, vous pouvez peut-être obtenir une proportion spécifique de tous les composants mélangés pour former le prix final.

      Cela pourrait simplifier votre programme initial (tous les if-else phrases sont folles) en quelque chose comme ceci:

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
      
          # a little pinch of this
          price += num_of_bedrooms * .841231951398213
      
          # and a big pinch of that
          price += sqft * 1231.1231231
      
          # maybe a handful of this
          price += neighborhood * 2.3242341421
      
          # and finally, just a little extra salt for good measure
          price += 201.23432095
      
          return price
      

      Attention aux chiffres magiques en gras. 841231951398213, 1231.1231231, 2.3242341421 et 201.23432095 ; ils sont appelés poids. Si nous pouvions trouver le poids parfait pour chaque maison, notre fonction pourrait prédire tous les prix des maisons!

      Une méthode simple pour trouver le poids optimal est la suivante:

      Première étape:

      Tout d'abord, chaque poids doit être de 1.0:

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
      
          # a little pinch of this
          price += num_of_bedrooms * 1.0
      
          # and a big pinch of that
          price += sqft * 1.0
      
          # maybe a handful of this
          price += neighborhood * 1.0
      
          # and finally, just a little extra salt for good measure
          price += 1.0
      
          return price
      

      Deuxième étape:

      Apportez chaque propriété dans votre calcul fonctionnel et vérifiez l'écart entre la valeur estimée et le prix correct:

      img

      Il y a des gens qui se demandent si les prix des maisons vont augmenter.

      Par exemple: le premier lot de la table ci-dessus a une valeur de transaction réelle de 250 000 $ et votre valeur de fonction est de 178 000 $, ce qui vous fait perdre 72 000 $.

      Ensuite, placez la somme après le carré de la valeur d'écart d'évaluation de chaque ensemble de propriétés dans votre ensemble de données. Supposons que le ensemble de données comporte 500 transactions immobilières dont la valeur d'écart dévaluation au carré de demande s'élève au total à 86,123,373 $. Cela reflète le bon degré d'écart actuel de votre fonction.

      Maintenant, divisez le total par 500 pour obtenir la valeur moyenne de l'estimation de chaque lot de propriété. Appellez cette valeur d'erreur moyenne votre coût de fonction.

      Si vous pouvez ajuster la pondération pour que ce coût devienne 0, votre fonction est parfaite. Cela signifie que votre programme évalue à peu près la même chose pour chaque transaction immobilière en fonction des données entrées.

      Étape 3:

      Continuez à répéter l'étape 2 et essayez toutes les combinaisons de poids possibles. La combinaison qui rapproche le plus le coût de zéro est celle que vous allez utiliser, et dès que vous trouverez cette combinaison, le problème est résolu!

      Les pensées dérangent le temps

      C'est tellement simple, n'est-ce pas? Pensez à ce que vous venez de faire. Vous obtenez des données, vous les entrez en trois étapes simples et générales, et vous avez finalement une fonction qui peut estimer les maisons de votre région. Mais les faits suivants peuvent vous déranger:

      • 1. Au cours des 40 dernières années, des études menées dans de nombreux domaines (comme la linguistique/la traduction) ont montré que ces algorithmes d'apprentissage à base de données dynamiques génériques (les mots que j'ai inventés) ont surpassé les méthodes qui nécessitent l'utilisation de personnes réelles avec des règles claires.

      • 2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。

      • 3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。

      • 4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!

      C'est vraiment fou, n'est ce pas?

      Et si vous essayez chaque chiffre, que se passe-t-il avec le chiffre 3?

      Eh bien, bien sûr, vous ne pouvez pas essayer toutes les valeurs de poids possibles pour trouver la meilleure combinaison possible. Cela prendrait beaucoup de temps, car il y a probablement une infinité de chiffres à essayer. Pour éviter cela, les mathématiciens ont trouvé de nombreuses façons intelligentes de trouver rapidement de bonnes valeurs de poids sans trop essayer. Voici l'une d'entre elles: Tout d'abord, écrivez une équation simple qui représente les deux étapes précédentes:

      C'est votre fonction de coût.

      img

      Ensuite, réécrivons les termes mathématiques de l'apprentissage automatique de cette même équation (pour l'instant, vous pouvez les ignorer):

      θ représente la valeur de pondération actuelle. J ((θ) représente la valeur de pondération actuelle correspondante au prix de la valeur de pondération.

      img

      L'équation indique la grandeur de la déviation de notre estimation à la valeur pondérée actuelle.

      Si l'on affiche graphiquement toutes les pondérations possibles attribuées au nombre et à l'espace des chambres, on obtient un graphique qui ressemble à celui ci-dessous:

      img

      Le graphique de la fonction de coût ressemble à un bol.

      Le point le plus bas dans le graphique en bleu est l'endroit où le coût est le plus bas. Le point le plus haut signifie le plus grand écart. Donc, si nous pouvons trouver un ensemble de poids qui nous amène au point le plus bas du graphique, nous avons la réponse!

      img

      Par conséquent, nous n'avons qu'à ajuster la pondération pour que nous puissions descendre en pente vers le point le plus bas du graphique. Si nous continuons à nous déplacer vers le point le plus bas, nous y arriverons sans trop d'efforts.

      Si vous vous souvenez un peu de l'arithmétique, vous vous souvenez peut-être que si vous demandez la dérive d'une fonction, le résultat vous dira l'inclinaison de la fonction à n'importe quel point. En d'autres termes, pour un point donné sur le diagramme, il nous dit que le chemin est en descente. Nous pouvons utiliser ce point pour avancer vers le bas.

      Donc, si nous demandons à la fonction de coût un biais sur chaque poids, alors nous pouvons soustraire cette valeur de chaque poids. Cela nous rapproche du bas de la montagne. Continuez à le faire, et finalement vous arriverez au bas et vous obtiendrez la valeur maximale de la poids.

      Cette méthode pour trouver le poids idéal est appelée la descente de la gradiente de masse, dont la hauteur est généralement indiquée ci-dessus.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/Je ne peux pas le faire.

      Lorsque vous utilisez une bibliothèque d'algorithmes d'apprentissage automatique pour résoudre des problèmes réels, tout est prêt pour vous.

      Qu'est-ce que vous avez oublié?

      L'algorithme en trois étapes que j'ai décrit ci-dessus s'appelle la régression multilinéaire. Votre équation d'estimation consiste à rechercher une ligne droite capable de s'adapter à tous les points de données sur les prix des maisons. Ensuite, vous utilisez cette équation pour estimer le prix des maisons jamais vues en fonction de la position où les prix des maisons peuvent apparaître sur votre ligne droite.

      Mais l'approche que je vais vous montrer peut fonctionner dans des cas simples, et elle ne fonctionnera pas dans tous les cas.

      Mais, heureusement, il existe de nombreuses façons de gérer cette situation. Pour les données non linéaires, de nombreux autres types d'algorithmes d'apprentissage automatique peuvent être utilisés (comme les réseaux de neurones ou les vecteurs nucléaires). Il existe également de nombreuses façons d'utiliser la régression linéaire plus flexiblement, en pensant à l'ajustement avec des lignes plus complexes. Dans tous les cas, l'idée de base de trouver la valeur de la pondération la plus élevée est toujours valable.

      En outre, j'ai ignoré le concept de surajustement. Il est facile de rencontrer un ensemble de pondérations qui peuvent parfaitement prédire les prix des maisons dans votre dataset initial, mais pas pour les nouvelles maisons en dehors du dataset initial. Il existe de nombreuses solutions à cette situation (comme la normalisation et l'utilisation de dataset de vérification croisée).

      En d'autres termes, les concepts de base sont très simples et il faut des compétences et de l'expérience pour utiliser l'apprentissage automatique pour obtenir des résultats utiles.

    • Le pouvoir de l'apprentissage automatique est-il sans limites?

      Une fois que vous commencez à comprendre que les techniques d'apprentissage automatique peuvent facilement être appliquées pour résoudre des problèmes apparemment difficiles (comme la reconnaissance manuscrite), vous avez le sentiment que, si vous avez suffisamment de données, vous pouvez résoudre n'importe quel problème avec l'apprentissage automatique.

      Mais il est important de se rappeler que l'apprentissage automatique ne s'applique qu'à des problèmes qui peuvent être résolus avec les données que vous possédez.

      Par exemple, si vous construisez un modèle pour prédire le prix d'un logement en fonction du nombre de plantes dans chaque maison, il ne réussira jamais. Il n'y a aucune relation entre le nombre de plantes dans la maison et le prix du logement.

      img

      Vous ne pouvez modéliser que des relations qui existent réellement.

    • Comment apprendre en profondeur

      Je pense que le plus gros problème de l'apprentissage automatique actuel est qu'il est principalement actif dans les organisations de recherche académique et commerciale. Il n'y a pas beaucoup de matériel simple et facile à apprendre pour les gens qui veulent apprendre en général et non pas pour les experts. Mais cela s'améliore chaque jour.

      Le cours gratuit d'apprentissage automatique du professeur Andrew Ng sur Coursera est très bien. Je le recommande vivement.

      En outre, vous pouvez télécharger et installer SciKit-Learn pour tester des milliers d'algorithmes d'apprentissage automatique.

Transférée de développeur Python


Plus de

OclouoquanC'est un exemple que le professeur Benoit répète à chaque fois qu'il ouvre une nouvelle classe.

le trainPourquoi est-ce que c'est devenu 2m?