Suite

Comment avoir plus d'une sortie sur les tables d'itération (modelbuilder) ?


Je fais un modèle dans modelbuilder où j'ai en entrée 5 tableaux excel et ce que je veux, c'est avoir 5 sorties à la fin du modèle. Comment puis je faire ça?

Je veux avoir 5 sorties après l'outil Project. Le modèle actuellement est comme ceci:


Êtes-vous en train de dire qu'une fois que vous exécutez ce modèle, vous vous retrouvez avec une table, la dernière feuille de calcul de votre classeur ? Vous devez utiliser la substitution en ligne. Utilisez le Nom variable sortant de l'itérateur dans votre classe d'entités en sortie dans l'outil de projet. Un exemple serait c: empmyData_%Name%.shp


Comment puis-je optimiser un mysqldump d'une grande base de données ?

1,2 Go). J'utilise actuellement mysqldump pour sauvegarder la base de données tous les soirs.

En raison de ma connexion Comcast, souvent, si j'exécute un vidage manuellement, ma connexion au serveur expirera avant la fin du vidage, ce qui m'obligera à réexécuter le vidage. [Je lance actuellement un cron qui effectue le vidage tous les soirs, c'est juste pour les vidages que j'exécute manuellement.]

Existe-t-il un moyen d'accélérer les dumps pour le problème du délai d'expiration de la connexion, mais également de limiter le temps pendant lequel le serveur est occupé par ce processus ?

BTW, je travaille actuellement sur la réduction de la taille de la base de données globale pour résoudre ce problème.


2 réponses 2

Je sais que MD5 est l'algorithme de hachage le plus vulnérable

Eh bien techniquement (nous sommes techniques ici), il existe des algorithmes pires que MD5.

et particulièrement vulnérable aux collisions

Oui, les gens peuvent créer un hachage souhaité avec un texte en clair différent. Il est peu probable que cela se produise au hasard, mais cela pourrait se produire de manière malveillante.

Mais la vulnérabilité aux collisions n'est pas très risquée et quelqu'un pourrait l'utiliser comme un avantage, mais c'est par pure chance.

Pas de chance. Il existe des techniques pour trouver un texte en clair qui produit un MD5 souhaité. C'est un bon sujet pour une question différente.

OK, disons que je stocke les mots de passe en utilisant MD5.

Aie. La principale raison pour laquelle vous ne devriez pas utiliser le MD5 est qu'il s'agit d'un Hash à usage général (rapide).

Vous devriez utiliser un Hachage de mot de passe (lent) tel que

  • BCrypt est généralement recommandé, mais assurez-vous d'exécuter un hachage SHA-2 rapide sur les données d'entrée, afin que les mots de passe très longs ne soient pas tronqués par BCrypt
  • PBKDF2 mais qui est moins résistant au GPU car il a des exigences de mémoire inférieures.
  • SCRypt est meilleur que BCrypt si vous avez un facteur de travail suffisamment élevé. Sinon, c'est pire contre les GPU. (encore une fois, en raison d'exigences de mémoire supérieures ou inférieures)
  • Le gagnant du concours de hachage de mot de passe est peut-être encore meilleur que celui-ci, mais n'a pas encore résisté à l'épreuve du temps, alors ne l'utilisez pas tout de suite. Il s'appelle Argon2 et possède des paramètres de facteur de travail distincts pour le temps CPU et la charge mémoire. (agréable!)
  • Le SHA-2 répétitif peut être utilisé à la place de PBKDF2 (toujours pas résistant au GPU), mais il est plus difficile d'implémenter la répétition efficacement (c'est-à-dire d'être résistant à la force brute) car SHA-2 est en fait un hachage à usage général (rapide).

La plupart de ces options génèrent du Salt aléatoire par défaut, mais vous devez vérifier si c'est le cas !

Il est préférable d'inclure du poivre (

72 bits d'entropie) avant le mot de passe avant hachage. Le Pepper peut être le même pour tous vos utilisateurs, mais doit être stocké dans un fichier en dehors de la base de données afin que ce composant ne puisse pas être trouvé via SQL Injection.

Assurez-vous que votre facteur de travail nécessite environ 100 ms (avec une protection DoS appropriée) sur votre matériel cible (sachant que les attaquants utiliseront du matériel plus rapide pour la force brute)

Bien sûr, aucune quantité de hachage ne protégera les mots de passe faibles, alors incluez des exigences de force de mot de passe.

vulnérabilité aux collisions. y a-t-il un moyen pour l'attaquant d'utiliser cela comme un avantage ?

Dans le contexte du stockage de hachage de mot de passe, cela n'aidera probablement pas l'attaquant.

La principale raison pour laquelle les algorithmes de hachage sont attaqués de nos jours n'a rien à voir avec les mots de passe. Je pense que MD5 est toujours raisonnablement sécurisé en matière de hachage de mot de passe. à condition que vous utilisiez des sels pour vaincre les tables arc-en-ciel et que vous réitériez l'algorithme plusieurs fois pour ralentir les devinettes par force brute (cependant, vous devriez vraiment utiliser un algorithme standard à la place). Le problème concerne les signatures numériques ou les certificats X.509, respectivement.

Depuis 10 ans, il y a "l'attaque par préfixe choisi" sur les signatures utilisant md5. En 2006 ou 2007, une équipe autour d'Arjen Lenstra de l'université technique d'Eindhoven a créé un certificat escroc qui avait le même hachage MD5 que celui délivré par une autorité de certification commerciale. L'attaque nécessitait une puissance de calcul importante et la configuration était extrêmement sophistiquée, mais le résultat était que MD5 était compromis. Voir ici et ici.

La même technique a également été employée dans la célèbre attaque FLAME.

Comme vous l'avez correctement remarqué, en ce qui concerne les hachages de mots de passe, la situation est complètement différente car une collision doit être générée sans connaître le texte brut. Lorsqu'il s'agit de signatures numériques, le texte en clair est généralement connu et, bien sûr, cela ouvre des vecteurs d'attaque supplémentaires, comme le montrent les travaux cités ci-dessus.


Dans mon guide Comment prendre en charge l'Unicode complet dans les bases de données MySQL, voici les requêtes que vous pouvez exécuter pour mettre à jour le jeu de caractères et le classement d'une base de données, d'une table ou d'une colonne :

(Ne pas copier-coller aveuglément ! L'instruction exacte dépend du type de colonne, de la longueur maximale et d'autres propriétés. La ligne ci-dessus n'est qu'un exemple pour une colonne VARCHAR.)

Notez, cependant, que vous ne pouvez pas automatiser complètement la conversion de utf8 en utf8mb4 . Comme décrit à l'étape 4 du guide mentionné ci-dessus, vous devrez vérifier la longueur maximale des colonnes et des clés d'index, car le nombre que vous spécifiez a une signification différente lorsque utf8mb4 est utilisé au lieu de utf8 .

Cette solution générera puis exécutera les requêtes nécessaires pour convertir les bases de données, les tables et les colonnes. Il convertit toutes les colonnes de type varchar , text , tinytext , mediumtext , longtext , char .

Vous devriez toujours sauvegarder votre base de données en cas de problème.

Copiez la requête suivante dans gen_queries.sql , en remplaçant les 4 occurrences de YOUR_DATABASE_NAME par le nom de la base de données que vous souhaitez convertir :

Exécutez la commande suivante pour générer un nouveau fichier queries.sql , avec toutes les requêtes dont vous avez besoin pour convertir la base de données :

Exécutez la commande suivante pour exécuter les requêtes et effectuer la conversion :

  • Pour exécuter la conversion sur plusieurs bases de données, ajustez la partie table_schema LIKE "YOUR_DATABASE_NAME" de la requête, par exemple :
    • Le remplacement par table_schema LIKE "wiki_%" convertirait toutes les bases de données dont le nom commence par wiki_
    • Remplacer par table_type != 'SYSTEM VIEW' convertirait toutes les bases de données

    J'ai utilisé le script shell suivant. Il prend le nom de la base de données comme paramètre et convertit toutes les tables en un autre jeu de caractères et une autre collation (données par un autre paramètre ou une valeur par défaut définie dans le script).

    J'écrirais un script (en Perl ou autre) pour utiliser information_schema (TABLES et COLUMNS) pour parcourir toutes les tables et faire MODIFY COLUMN sur chaque champ CHAR/VARCHAR/TEXT. Je rassemblerais tous les MODIFY dans un seul ALTER pour chaque table, ce sera plus efficace.

    Je pense (mais je ne suis pas sûr) que la suggestion de Raihan ne change que le défaut pour le tableau.

    J'ai rencontré cette situation, voici l'approche que j'ai utilisée pour convertir ma base de données :

    Tout d'abord, vous devez éditer my.cnf pour que la connexion à la base de données par défaut (entre les applications et MYSQL) soit conforme à utf8mb4_unicode_ci. Sans cela, les caractères tels que les emojis et similaires soumis par vos applications ne seront pas intégrés à vos tables dans les octets/encodages corrects (à moins que les paramètres DB CNN de votre application ne spécifient une connexion utf8mb4).

    Exécutez le SQL suivant (pas besoin de préparer le SQL pour modifier des colonnes individuelles, les instructions ALTER TABLE le feront).

    Avant d'exécuter le code ci-dessous, remplacez "DbName" par votre nom de base de données réel.

    Collectez et enregistrez la sortie du SQL ci-dessus dans un fichier dot sql et exécutez-le.

    Si vous obtenez une erreur comme #1071 - La clé spécifiée était trop longue, la longueur maximale de la clé est de 1000 octets. avec le nom de la table problématique, cela signifie que la clé d'index sur une colonne de cette table (qui était censée être convertie en chaîne de caractères MB4) sera très grande, donc cette colonne Varchar devrait être <= 250 afin que sa clé d'index soit au maximum de 1000 octets. Vérifiez les colonnes sur lesquelles vous avez des index et si l'un d'entre eux est un varchar > 250 (probablement 255) alors

    Étape 1 : vérifiez les données de cette colonne pour vous assurer que la taille maximale de la chaîne dans cette colonne est <= 250.

    Étape 2 : si max charlength des données de la colonne indexée <= 250, modifiez la longueur de la colonne en 250. si ce n'est pas possible, supprimez l'index sur cette colonne

    Étape 3: puis exécutez à nouveau la requête alter table pour cette table et la table devrait maintenant être convertie en utf8mb4 avec succès.

    De mon travail, j'ai vu qu'ALTER la base de données et les tables n'est pas suffisant. J'ai dû aller dans chaque table et MODIFIER chacune des colonnes text/mediumtext/varchar aussi.

    Heureusement, j'ai pu écrire un script pour détecter les métadonnées des bases de données MySQL, afin qu'il puisse parcourir les tables et les colonnes et les MODIFIER automatiquement.

    Index long pour MySQL 5.6 :

    Il y a une chose que vous devez avoir le privilège DBA/SUPER USER à faire : Définir les paramètres de la base de données :

    Dans les réponses à cette question, il y a des instructions sur la façon de définir ces paramètres ci-dessus : https://stackoverflow.com/questions/35847015/mysql-change-innodb-large-prefix

    Bien sûr, dans mon article, il y a des instructions pour le faire aussi.

    Pour MySQL version 5.7 ou plus récente, innodb_large_prefix est activé par défaut et innodb_file_format est également Barracuda par défaut.

    Pour les personnes qui pourraient avoir ce problème, la meilleure solution consiste à modifier d'abord les colonnes en un type binaire, selon ce tableau :

    1. CHAR => BINAIRE
    2. TEXTE => BLOB
    3. TINYTEXT => TINYBLOB
    4. MEDIUMTEXT => MEDIUMBLOB
    5. TEXTE LONG => LONGBLOB
    6. VARCHAR => VARBINAIRE

    Et après cela, remettez la colonne à son ancien type et avec le jeu de caractères souhaité.

    J'ai essayé dans plusieurs tableaux latin1 et il a gardé tous les signes diacritiques.

    Vous pouvez extraire cette requête pour toutes les colonnes en procédant comme suit :

    Exécutez les instructions SQL suivantes pour obtenir les instructions de résultat pour la mise à jour du jeu de caractères et du classement :

    • Il ne modifie que la base de données, les tables ou les colonnes qui ne sont pas cohérentes avec le jeu de caractères ou le classement donné.
    • Il ne traite pas les vues comme des tables normales.
    • Il évite la violation de clé étrangère en désactivant les vérifications associées.
    • Mettez à jour les valeurs des variables en conséquence avant d'exécuter les instructions SQL ci-dessus.
      • Le classement par défaut utf8mb4_0900_ai_ci peut ne pas être adapté à votre langue préférée. Par exemple, il considère les parenthèses demi-chasse () comme les parenthèses pleine chasse , et cause des problèmes dans certains cas.
      • Exécutez SHOW COLLATION WHERE CHARSET = 'utf8mb4' AND COLLATION LIKE 'utf8mb4%0900%' et choisissez une collation adaptée à vos besoins.

      Si vous, comme moi, ne faites pas confiance à l'automatisation, c'est ainsi que j'ai géré le problème.

      Arrêtez de creuser d'abord !

      Commencez par modifier le jeu de caractères par défaut des nouvelles tables en modifiant la définition de la base de données (comme dans toutes les autres réponses):

      Ensuite, générez sql pour modifier le jeu de caractères par défaut pour les nouvelles colonnes de toutes les tables existantes :

      Maintenant, nous pouvons gérer le "legacy"

      Répertoriez les types de données de caractères que vous utilisez :

      Pour moi, cette liste était "varchar" et "text"

      Liste character_SETS_ en cours d'utilisation :

      Cela me donne "utf8", "latin1" et "utf8mb4", ce qui est une raison pour laquelle je ne fais pas confiance à l'automatisation, les colonnes latin1 risquent d'avoir des données sales.

      Vous pouvez maintenant faire une liste de toutes les colonnes que vous devez mettre à jour avec :

      Edit : la syntaxe d'origine ci-dessus avait une erreur.

      Les tables contenant uniquement utf8 ou utf8mb4 peuvent être converties avec "CONVERT TO CHARACTER SET" comme Mathias et MrJingles le décrivent ci-dessus, mais vous risquez alors que MySQL change les types pour vous. arrive.

      Si vous avez des colonnes non utf8, ces questions peuvent vous inspirer pour vérifier les données des colonnes : https://stackoverflow.com/q/401771/671282 https://stackoverflow.com/q/9304485/671282

      Étant donné que vous savez probablement ce que vous vous attendez à avoir dans la plupart des colonnes, quelque chose comme ceci gérera probablement la plupart d'entre elles après avoir modifié les caractères non ASCII autorisés pour répondre à vos besoins :

      Lorsque ce qui précède ne correspondait pas, j'ai utilisé les éléments ci-dessous qui ont un maching un peu plus "fuzzier":

      Cette requête correspond à deux caractères qui pourraient commencer un caractère utf8, vous permettant ainsi d'inspecter ces enregistrements, cela peut vous donner beaucoup de faux positifs. La conversion utf8 échoue en renvoyant null s'il y a un caractère qu'il ne peut pas convertir, donc dans un grand champ, il y a de fortes chances qu'il ne soit pas utile.


      Puisque vous savez déjà comment boucler sur un fichier, vous pouvez combiner les fichiers, puis traiter les fichiers combinés. La commande coller joint deux fichiers ligne par ligne. Il met une tabulation entre les lignes provenant des deux fichiers, donc cette solution suppose qu'il n'y a pas de tabulations dans vos noms de fichiers. (Vous pouvez changer le séparateur mais vous devez trouver un caractère qui n'est pas présent dans un nom de fichier.)

      Si vous souhaitez ignorer les lignes vides, vous devez le faire dans chaque fichier séparément, car coller peut correspondre à une ligne vide d'un fichier avec une ligne non vide d'un autre fichier. Vous pouvez utiliser grep pour filtrer les lignes non vides.

      Notez que si les deux fichiers ont des longueurs différentes, vous obtiendrez un $file2 vide (quelle que soit la liste qui s'est terminée en premier).


      PRODUCTION:

      Ce qui suit est en fait buggé :

      Si vous avez bash 4.4 ou une version plus récente, une option optimale est disponible :

      . alors qu'avec bash 4.0, vous pouvez avoir du laconisme au détriment de la détection des pannes et de la prise en charge littérale des nouvelles lignes :

      . ou bash 3.x compatibilité et détection d'échec, mais sans prise en charge de la nouvelle ligne :

      . ou la compatibilité bash 3.x et la prise en charge des nouvelles lignes, mais sans détection d'échec :

      Utilisez jq pour produire une instruction shell que vous évaluez :

      Étant donné le document JSON dans votre question, l'appel à jq produira la chaîne

      qui est ensuite évalué par votre shell. L'évaluation de cette chaîne créera le tableau nommé arr avec les deux éléments value2 et value2_2 :

      L'opérateur @sh dans jq prend soin de citer correctement les données pour le shell.

      Vous pouvez également déplacer la partie arr=( . ) hors de l'expression jq :

      Maintenant, jq génère uniquement la liste d'éléments entre guillemets, qui est ensuite insérée dans arr=( . ) et évaluée.


      Cela faisait un moment que je n'avais pas joué avec NumPy, mais j'appelais la fonction numpy.savetxt pour exporter mes données au format .csv :

      L'exemple de fichier mydata.csv a été généré en conséquence :

      Avec la magie de pgfplotstable , nous pourrions faire ce qui suit :

      Je ne sais pas s'il est possible de supprimer les en-têtes, mais en tout cas je demanderai à Christian Feuersänger à ce sujet. :)

      Mon bon ami Percusse a fourni un bon moyen de supprimer ces en-têtes :

      Une autre "façon" de le faire est de faire en sorte que numpy.savetxt agisse comme :

      ce qui nous donnera le fichier de sortie suivant :

      Enfin, mais non des moindres, datatool peut également être utilisé. Malheureusement, il semble que datatool ne reconnaisse pas la notation scientifique comme des valeurs réelles, il la traite donc comme une valeur de chaîne. Pour y remédier, j'ai exporté mon fichier .csv avec une virgule comme délimiteur et avec des valeurs à virgule fixe :

      qui générera la sortie suivante :

      Maintenant, notre code LaTeX, basé sur la réponse d'Alan :

      En utilisant DTLdisplaydb , les en-têtes sont obligatoires. Si vous ne les voulez pas, vous pouvez parcourir les valeurs de la valeur .csv à la place.

      Vous pouvez obtenir plus d'informations sur ces packages en recherchant leurs balises : siunitx, datatool, pgfplotstable


      La disponibilité d'analyseurs dans presque tous les langages de programmation est l'un des avantages de JSON en tant que format d'échange de données.

      Plutôt que d'essayer d'implémenter un analyseur JSON, vous feriez probablement mieux d'utiliser un outil conçu pour l'analyse JSON tel que jq ou un langage de script à usage général doté d'une bibliothèque JSON.

      Par exemple, en utilisant jq, vous pouvez extraire l'ImageID du premier élément du tableau Instances comme suit :

      Alternativement, pour obtenir les mêmes informations en utilisant la bibliothèque JSON de Ruby :

      Je ne répondrai pas à toutes vos questions et commentaires révisés, mais ce qui suit est, espérons-le, suffisant pour vous aider à démarrer.

      Supposons que vous ayez un script Ruby qui puisse lire un à partir de STDIN et afficher la deuxième ligne dans votre exemple output[0]. Ce script pourrait ressembler à quelque chose comme :

      Comment pourriez-vous utiliser un tel script pour accomplir tout votre objectif ? Eh bien, supposons que vous ayez déjà les éléments suivants :

      • une commande pour lister toutes vos instances
      • une commande pour obtenir le json ci-dessus pour n'importe quelle instance de votre liste et le sortir sur STDOU

      Une façon serait d'utiliser votre shell pour combiner ces outils :

      Maintenant, vous avez peut-être une seule commande qui vous donne un blob json pour toutes les instances avec plus d'éléments dans ce tableau "Instances". Eh bien, si tel est le cas, vous aurez juste besoin de modifier un peu le script pour parcourir le tableau plutôt que d'utiliser simplement le premier élément.

      En fin de compte, le moyen de résoudre ce problème est le moyen de résoudre de nombreux problèmes sous Unix. Décomposez-le en problèmes plus faciles. Trouvez ou écrivez des outils pour résoudre le problème le plus simple. Combinez ces outils avec votre shell ou d'autres fonctionnalités du système d'exploitation.

      [0] Notez que je n'ai aucune idée d'où vous obtenez le centre de coûts, alors je l'ai juste inventé.


      6. Comment définir des liens RDF vers d'autres sources de données

      Les liens RDF permettent aux navigateurs et aux robots d'exploration de données liées de naviguer entre les sources de données et de découvrir des données supplémentaires.

      Le domaine d'application déterminera quelles propriétés RDF sont utilisées comme prédicats. Par exemple, les propriétés de liaison couramment utilisées dans le domaine de la description des personnes sont foaf:knows, foaf:based_near et foaf:topic_interest . Des exemples de combinaison de ces propriétés avec des valeurs de propriété de DBpedia, la bibliographie DBLP et le RDF Book Mashup se trouvent dans les profils FOAF de Tim Berners-Lee et Ivan Herman.

      Il est courant d'utiliser la propriété owl:sameAs pour indiquer qu'une autre source de données fournit également des informations sur une ressource non informationnelle spécifique. Un lien owl:sameAs indique que deux références d'URI font en réalité référence à la même chose. Par conséquent, owl:sameAs est utilisé pour mapper entre différents alias d'URI (voir Section 2.1). Des exemples d'utilisation de owl:sameAs pour indiquer que deux URI parlent de la même chose sont à nouveau le profil FOAF de Tim qui indique que http://www.w3.org/People/Berners-Lee/card#i identifie la même ressource que http : //www4.wiwiss.fu-berlin.de/bookmashup/persons/Tim+Berners-Lee et http://www4.wiwiss.fu-berlin.de/dblp/resource/person/100007. D'autres exemples d'utilisation se trouvent dans DBpedia et le serveur DBLP de Berlin.

      Les liens RDF peuvent être définis manuellement, ce qui est généralement le cas pour les profils FOAF, ou ils peuvent être générés par des algorithmes de liaison automatisés. Cette approche est généralement utilisée pour relier de grands ensembles de données.

      6.1 Configuration manuelle des liens RDF

      Avant de pouvoir définir des liens RDF manuellement, vous devez savoir quelque chose sur les ensembles de données que vous souhaitez lier. Afin d'avoir une vue d'ensemble des différents ensembles de données pouvant être utilisés comme cibles de liaison, veuillez vous reporter à la liste des ensembles de données de données ouvertes de liaison. Une fois que vous avez identifié des ensembles de données particuliers comme cibles de liaison appropriées, vous pouvez y rechercher manuellement les références d'URI auxquelles vous souhaitez établir un lien. Si une source de données ne fournit pas d'interface de recherche, par exemple un point de terminaison SPARQL ou un formulaire Web HTML, vous pouvez utiliser des navigateurs de données liées comme Tabulator ou Disco pour explorer l'ensemble de données et trouver les bons URI.

      Vous pouvez également utiliser des services tels que Uriqr ou Sindice pour rechercher des URI existants et choisir le plus populaire si vous trouvez plusieurs candidats. Uriqr vous permet de trouver les URI des personnes que vous connaissez, simplement en recherchant leur nom. Les résultats sont classés en fonction du degré de référencement d'un URI particulier dans les documents RDF sur le Web, mais vous devrez appliquer un peu d'intelligence humaine pour choisir l'URI le plus approprié à utiliser. Sindice indexe le Web sémantique et peut vous dire quelles sources mentionnent un certain URI. Par conséquent, le service peut vous aider à choisir l'URI le plus populaire pour un concept.

      N'oubliez pas que les sources de données peuvent utiliser les redirections HTTP-303 pour rediriger les clients des URI identifiant les ressources non informatives vers les URI identifiant les ressources informatives qui décrivent les ressources non informatives. Dans ce cas, assurez-vous de créer un lien vers la référence URI identifiant la ressource non informative, et non le document la concernant.

      6.2 Génération automatique de liens RDF

      L'approche décrite ci-dessus ne s'adapte pas aux grands ensembles de données, par exemple en reliant 70 000 lieux dans DBpedia à leurs entrées correspondantes dans Geonames. Dans de tels cas, il est logique d'utiliser un algorithme de couplage d'enregistrements automatisé pour générer des liens RDF entre les sources de données.

      Le couplage d'enregistrements est un problème bien connu dans la communauté des bases de données. Le projet Linking Open Data rassemble des informations relatives à l'utilisation d'algorithmes de couplage d'enregistrements dans le contexte des données liées sur la page wiki Equivalence Mining.

      Il manque encore de bons outils faciles à utiliser pour générer automatiquement des liens RDF. Par conséquent, il est courant de mettre en œuvre des algorithmes de couplage d'enregistrements spécifiques à un ensemble de données pour générer des liens RDF entre les sources de données. Dans ce qui suit, nous décrivons deux classes de tels algorithmes :

      Algorithmes basés sur des modèles

      Dans divers domaines, il existe des schémas de nommage généralement acceptés. Par exemple, dans le domaine de la publication, il y a des numéros ISBN, dans le domaine financier, il y a des identifiants ISIN. Si ces identifiants sont utilisés dans le cadre d'URI HTTP identifiant des ressources particulières, il est possible d'utiliser des algorithmes simples basés sur des modèles pour générer des liens RDF entre ces ressources.

      Un exemple de source de données utilisant des numéros ISBN dans le cadre de ses URI est le RDF Book Mashup, qui utilise par exemple l'URI http://www4.wiwiss.fu-berlin.de/bookmashup/books/0747581088 pour identifier le livre ' Harry Potter et le prince de sang mêlé'. Le fait d'avoir le numéro ISBN dans ces URI a permis à DBpedia de générer facilement des liens owl:sameAs entre les livres de DBpedia et le Book Mashup. DBpedia utilise l'algorithme basé sur les modèles suivant :

      1. Itérer sur tous les livres dans DBpedia qui ont un numéro ISBN.
      2. Créez un lien owl:sameAs entre l'URI d'un livre dans DBpedia et l'URI Book Mashup correspondant en utilisant le modèle suivant pour les URI Book Mashup : http://www4.wiwiss.fu-berlin.de/bookmashup/books/.

      L'exécution de cet algorithme sur tous les livres de DBpedia a abouti à 9 000 liens RDF qui ont été fusionnés avec l'ensemble de données DBpedia. Par exemple, le lien résultant pour le livre Harry Potter est :

      Algorithmes plus complexes basés sur les propriétés

      Dans les cas où il n'existe aucun identifiant commun entre les ensembles de données, il est nécessaire d'employer des algorithmes de couplage basés sur les propriétés plus complexes. Nous décrivons ci-dessous deux algorithmes :

      1. Relier DBpedia et Geonames. Les informations sur les lieux géographiques apparaissent dans la base de données Geonames ainsi que dans DBpedia. Afin d'identifier les lieux qui apparaissent dans les deux ensembles de données, l'équipe Geonames utilise une heuristique basée sur les propriétés, basée sur le titre de l'article ainsi que sur des informations sémantiques telles que la latitude et la longitude, mais aussi le pays, la division administrative, le type d'entité, la population et les catégories. L'exécution de cette heuristique sur les deux sources de données a abouti à 70 500 correspondances qui ont été fusionnées en tant que liens Geonames owl:sameAs avec le jeu de données DBpedia ainsi qu'avec le jeu de données Geonames.
      2. Relier Jamendo et MusicBrainz. Veuillez vous référer à l'article de blog d'Yves Raimond sur son approche pour lier Jamendo et MusicBrainz.

      Contenu

      L'apprentissage automatique implique que les ordinateurs découvrent comment ils peuvent effectuer des tâches sans être explicitement programmés pour le faire. Cela implique que les ordinateurs apprennent à partir des données fournies afin qu'ils effectuent certaines tâches. Pour les tâches simples assignées aux ordinateurs, il est possible de programmer des algorithmes indiquant à la machine comment exécuter toutes les étapes nécessaires pour résoudre le problème posé de la part de l'ordinateur, aucun apprentissage n'est nécessaire. Pour des tâches plus avancées, il peut être difficile pour un humain de créer manuellement les algorithmes nécessaires. En pratique, il peut s'avérer plus efficace d'aider la machine à développer son propre algorithme, plutôt que de demander à des programmeurs humains de spécifier chaque étape nécessaire. [7]

      La discipline de l'apprentissage automatique utilise diverses approches pour apprendre aux ordinateurs à accomplir des tâches pour lesquelles aucun algorithme pleinement satisfaisant n'est disponible. Dans les cas où un grand nombre de réponses potentielles existent, une approche consiste à étiqueter certaines des réponses correctes comme valides. Cela peut ensuite être utilisé comme données d'apprentissage pour l'ordinateur afin d'améliorer le ou les algorithmes qu'il utilise pour déterminer les réponses correctes. Par exemple, pour former un système à la tâche de reconnaissance de caractères numériques, l'ensemble de données MNIST de chiffres manuscrits a souvent été utilisé. [7]

      Le terme apprentissage automatique a été inventé en 1959 par Arthur Samuel, un IBMer américain et pionnier dans le domaine des jeux informatiques et de l'intelligence artificielle. [8] [9] Un livre représentatif de la recherche sur l'apprentissage automatique au cours des années 1960 était le livre de Nilsson sur les machines d'apprentissage, traitant principalement de l'apprentissage automatique pour la classification des modèles. [10] L'intérêt lié à la reconnaissance des formes s'est poursuivi dans les années 1970, comme décrit par Duda et Hart en 1973. [11] En 1981, un rapport a été publié sur l'utilisation de stratégies d'enseignement pour qu'un réseau de neurones apprenne à reconnaître 40 caractères (26 lettres, 10 chiffres et 4 symboles spéciaux) à partir d'un terminal informatique. [12]

      Tom M. Mitchell a fourni une définition plus formelle et largement citée des algorithmes étudiés dans le domaine de l'apprentissage automatique : « On dit qu'un programme informatique apprend de l'expérience E par rapport à une classe de tâches T et mesure du rendement P si sa performance à des tâches dans T, mesuré par P, s'améliore avec l'expérience E." [13] Cette définition des tâches dans lesquelles l'apprentissage automatique est concerné offre une définition fondamentalement opérationnelle plutôt que de définir le domaine en termes cognitifs. Cela suit la proposition d'Alan Turing dans son article "Computing Machinery and Intelligence", dans lequel la question " Les machines peuvent-elles penser ?" est remplacée par la question « Les machines peuvent-elles faire ce que nous (en tant qu'entités pensantes) pouvons faire ?". [14]

      L'apprentissage automatique moderne a deux objectifs, l'un est de classer les données sur la base de modèles qui ont été développés, l'autre objectif est de faire des prédictions pour les résultats futurs sur la base de ces modèles. Un algorithme hypothétique spécifique à la classification des données peut utiliser la vision par ordinateur des grains de beauté couplée à un apprentissage supervisé afin de l'entraîner à classer les grains de beauté cancéreux. Alors que, un algorithme d'apprentissage automatique pour la négociation d'actions peut informer le commerçant des futures prédictions potentielles. [15]

      Intelligence artificielle Modifier

      En tant qu'entreprise scientifique, l'apprentissage automatique est né de la quête de l'intelligence artificielle. Au début de l'IA en tant que discipline universitaire, certains chercheurs souhaitaient que les machines apprennent à partir des données. Ils ont tenté d'aborder le problème avec diverses méthodes symboliques, ainsi que ce que l'on appelait alors « réseaux de neurones », il s'agissait principalement de perceptrons et d'autres modèles qui se sont avérés plus tard être des réinventions des modèles linéaires généralisés de statistiques. [18] Le raisonnement probabiliste a également été utilisé, en particulier dans le diagnostic médical automatisé. [19] : 488

      Cependant, l'accent mis de plus en plus sur l'approche logique basée sur les connaissances a provoqué un fossé entre l'IA et l'apprentissage automatique. Les systèmes probabilistes étaient en proie à des problèmes théoriques et pratiques d'acquisition et de représentation des données. [19] : 488 En 1980, les systèmes experts en étaient venus à dominer l'IA et les statistiques n'étaient plus à la mode. [20] Les travaux sur l'apprentissage symbolique/basé sur la connaissance se sont poursuivis au sein de l'IA, conduisant à une programmation logique inductive, mais la ligne de recherche plus statistique était désormais en dehors du domaine de l'IA proprement dite, dans la reconnaissance de formes et la recherche d'informations. [19] : 708–710 755 La recherche sur les réseaux de neurones avait été abandonnée par l'IA et l'informatique à la même époque. Cette ligne a également été poursuivie en dehors du domaine de l'IA/CS, en tant que « connexionnisme », par des chercheurs d'autres disciplines, notamment Hopfield, Rumelhart et Hinton. Leur principal succès est venu au milieu des années 1980 avec la réinvention de la rétropropagation. [19] : 25

      L'apprentissage automatique (ML), réorganisé en un domaine distinct, a commencé à prospérer dans les années 1990. Le domaine a changé son objectif, passant de la réalisation de l'intelligence artificielle à la résolution de problèmes de nature pratique pouvant être résolus. Il s'est détourné des approches symboliques héritées de l'IA pour se tourner vers des méthodes et des modèles empruntés aux statistiques et à la théorie des probabilités. [20]

      À partir de 2020, de nombreuses sources continuent d'affirmer que l'apprentissage automatique reste un sous-domaine de l'IA. [21] [22] [16] Le principal désaccord est de savoir si tout le ML fait partie de l'IA, car cela signifierait que toute personne utilisant le ML pourrait prétendre qu'elle utilise l'IA. D'autres pensent que tout le ML ne fait pas partie de l'IA [23] [24] [25] où seul un sous-ensemble « intelligent » du ML fait partie de l'IA. [26]

      La question de savoir quelle est la différence entre le ML et l'IA est répondue par Judea Pearl dans Le livre du pourquoi. [27] En conséquence, le ML apprend et prédit sur la base d'observations passives, tandis que l'IA implique un agent interagissant avec l'environnement pour apprendre et prendre des mesures qui maximisent ses chances d'atteindre ses objectifs avec succès. [30]

      Exploration de données Modifier

      L'apprentissage automatique et l'exploration de données utilisent souvent les mêmes méthodes et se chevauchent de manière significative, mais tandis que l'apprentissage automatique se concentre sur la prédiction, basée sur connu propriétés apprises à partir des données de formation, l'exploration de données se concentre sur la découverte de (auparavant) inconnu propriétés dans les données (c'est l'étape d'analyse de la découverte des connaissances dans les bases de données). L'exploration de données utilise de nombreuses méthodes d'apprentissage automatique, mais avec des objectifs différents, d'un autre côté, l'apprentissage automatique utilise également des méthodes d'exploration de données en tant qu'"apprentissage non supervisé" ou en tant qu'étape de prétraitement pour améliorer la précision de l'apprenant. Une grande partie de la confusion entre ces deux communautés de recherche (qui ont souvent des conférences et des revues distinctes, ECML PKDD étant une exception majeure) vient des hypothèses de base avec lesquelles elles travaillent : dans l'apprentissage automatique, les performances sont généralement évaluées en fonction de la capacité à reproduire connu connaissances, tandis que dans la découverte des connaissances et l'exploration de données (KDD), la tâche principale est la découverte de inconnu connaissance. Évaluée par rapport aux connaissances connues, une méthode non informée (non supervisée) sera facilement surpassée par d'autres méthodes supervisées, tandis que dans une tâche KDD typique, les méthodes supervisées ne peuvent pas être utilisées en raison de l'indisponibilité des données d'apprentissage.

      Optimisation Modifier

      L'apprentissage automatique a également des liens intimes avec l'optimisation : de nombreux problèmes d'apprentissage sont formulés comme la minimisation d'une fonction de perte sur un ensemble d'exemples d'apprentissage. Les fonctions de perte expriment l'écart entre les prédictions du modèle en cours d'entraînement et les instances de problème réelles (par exemple, dans la classification, on veut attribuer une étiquette aux instances, et les modèles sont entraînés pour prédire correctement les étiquettes pré-attribuées d'un ensemble de exemples). [31]

      Généralisation Modifier

      La différence entre l'optimisation et l'apprentissage automatique découle de l'objectif de généralisation : alors que les algorithmes d'optimisation peuvent minimiser la perte sur un ensemble d'apprentissage, l'apprentissage automatique vise à minimiser la perte sur des échantillons invisibles. Caractériser la généralisation de divers algorithmes d'apprentissage est un sujet de recherche actif, en particulier pour les algorithmes d'apprentissage en profondeur.

      Statistiques Modifier

      Machine learning and statistics are closely related fields in terms of methods, but distinct in their principal goal: statistics draws population inferences from a sample, while machine learning finds generalizable predictive patterns. [32] According to Michael I. Jordan, the ideas of machine learning, from methodological principles to theoretical tools, have had a long pre-history in statistics. [33] He also suggested the term data science as a placeholder to call the overall field. [33]

      Leo Breiman distinguished two statistical modeling paradigms: data model and algorithmic model, [34] wherein "algorithmic model" means more or less the machine learning algorithms like Random forest.

      Some statisticians have adopted methods from machine learning, leading to a combined field that they call statistical learning. [35]

      A core objective of a learner is to generalize from its experience. [4] [36] Generalization in this context is the ability of a learning machine to perform accurately on new, unseen examples/tasks after having experienced a learning data set. The training examples come from some generally unknown probability distribution (considered representative of the space of occurrences) and the learner has to build a general model about this space that enables it to produce sufficiently accurate predictions in new cases.

      The computational analysis of machine learning algorithms and their performance is a branch of theoretical computer science known as computational learning theory. Because training sets are finite and the future is uncertain, learning theory usually does not yield guarantees of the performance of algorithms. Instead, probabilistic bounds on the performance are quite common. The bias–variance decomposition is one way to quantify generalization error.

      For the best performance in the context of generalization, the complexity of the hypothesis should match the complexity of the function underlying the data. If the hypothesis is less complex than the function, then the model has under fitted the data. If the complexity of the model is increased in response, then the training error decreases. But if the hypothesis is too complex, then the model is subject to overfitting and generalization will be poorer. [37]

      In addition to performance bounds, learning theorists study the time complexity and feasibility of learning. In computational learning theory, a computation is considered feasible if it can be done in polynomial time. There are two kinds of time complexity results. Positive results show that a certain class of functions can be learned in polynomial time. Negative results show that certain classes cannot be learned in polynomial time.

      Machine learning approaches are traditionally divided into three broad categories, depending on the nature of the "signal" or "feedback" available to the learning system:

        : The computer is presented with example inputs and their desired outputs, given by a "teacher", and the goal is to learn a general rule that maps inputs to outputs. : No labels are given to the learning algorithm, leaving it on its own to find structure in its input. Unsupervised learning can be a goal in itself (discovering hidden patterns in data) or a means towards an end (feature learning). : A computer program interacts with a dynamic environment in which it must perform a certain goal (such as driving a vehicle or playing a game against an opponent). As it navigates its problem space, the program is provided feedback that's analogous to rewards, which it tries to maximize. [4]

      Supervised learning Edit

      Supervised learning algorithms build a mathematical model of a set of data that contains both the inputs and the desired outputs. [38] The data is known as training data, and consists of a set of training examples. Each training example has one or more inputs and the desired output, also known as a supervisory signal. In the mathematical model, each training example is represented by an array or vector, sometimes called a feature vector, and the training data is represented by a matrix. Through iterative optimization of an objective function, supervised learning algorithms learn a function that can be used to predict the output associated with new inputs. [39] An optimal function will allow the algorithm to correctly determine the output for inputs that were not a part of the training data. An algorithm that improves the accuracy of its outputs or predictions over time is said to have learned to perform that task. [13]

      Types of supervised learning algorithms include active learning, classification and regression. [40] Classification algorithms are used when the outputs are restricted to a limited set of values, and regression algorithms are used when the outputs may have any numerical value within a range. As an example, for a classification algorithm that filters emails, the input would be an incoming email, and the output would be the name of the folder in which to file the email.

      Similarity learning is an area of supervised machine learning closely related to regression and classification, but the goal is to learn from examples using a similarity function that measures how similar or related two objects are. It has applications in ranking, recommendation systems, visual identity tracking, face verification, and speaker verification.

      Unsupervised learning Edit

      Unsupervised learning algorithms take a set of data that contains only inputs, and find structure in the data, like grouping or clustering of data points. The algorithms, therefore, learn from test data that has not been labeled, classified or categorized. Instead of responding to feedback, unsupervised learning algorithms identify commonalities in the data and react based on the presence or absence of such commonalities in each new piece of data. A central application of unsupervised learning is in the field of density estimation in statistics, such as finding the probability density function. [41] Though unsupervised learning encompasses other domains involving summarizing and explaining data features.

      Cluster analysis is the assignment of a set of observations into subsets (called clusters) so that observations within the same cluster are similar according to one or more predesignated criteria, while observations drawn from different clusters are dissimilar. Different clustering techniques make different assumptions on the structure of the data, often defined by some similarity metric and evaluated, for example, by internal compactness, or the similarity between members of the same cluster, and séparation, the difference between clusters. Other methods are based on estimated density et graph connectivity.

      Semi-supervised learning Edit

      Semi-supervised learning falls between unsupervised learning (without any labeled training data) and supervised learning (with completely labeled training data). Some of the training examples are missing training labels, yet many machine-learning researchers have found that unlabeled data, when used in conjunction with a small amount of labeled data, can produce a considerable improvement in learning accuracy.

      In weakly supervised learning, the training labels are noisy, limited, or imprecise however, these labels are often cheaper to obtain, resulting in larger effective training sets. [42]

      Reinforcement learning Edit

      Reinforcement learning is an area of machine learning concerned with how software agents ought to take actions in an environment so as to maximize some notion of cumulative reward. Due to its generality, the field is studied in many other disciplines, such as game theory, control theory, operations research, information theory, simulation-based optimization, multi-agent systems, swarm intelligence, statistics and genetic algorithms. In machine learning, the environment is typically represented as a Markov decision process (MDP). Many reinforcement learning algorithms use dynamic programming techniques. [43] Reinforcement learning algorithms do not assume knowledge of an exact mathematical model of the MDP, and are used when exact models are infeasible. Reinforcement learning algorithms are used in autonomous vehicles or in learning to play a game against a human opponent.

      Dimensionality Reduction Edit

      The Dimensionality reduction is a process of reducing the number of random variables under the consideration by obtaining a set of principal variables. [44] In other words, it is a process of reducing the dimension of your feature set also called no of features. Most of the dimensionality reduction techniques can be considered as either feature elimination or extraction. One of the popular method of dimensionality reduction is called as principal component analysis.

      The PCA involves changing higher dimensional data (eg. 3D) to a smaller space (eg. 2D). This results in a smaller dimension of data, (2D instead of 3D) while keeping all original variables in the model without changing the data. [45]

      Other types Edit

      Other approaches have been developed which don't fit neatly into this three-fold categorisation, and sometimes more than one is used by the same machine learning system. For example topic modeling, meta learning. [46]

      As of 2020, deep learning has become the dominant approach for much ongoing work in the field of machine learning. [7]

      Self learning Edit

      Self-learning as a machine learning paradigm was introduced in 1982 along with a neural network capable of self-learning named crossbar adaptive array (CAA). [47] It is a learning with no external rewards and no external teacher advice. The CAA self-learning algorithm computes, in a crossbar fashion, both decisions about actions and emotions (feelings) about consequence situations. The system is driven by the interaction between cognition and emotion. [48] The self-learning algorithm updates a memory matrix W =||w(a,s)|| such that in each iteration executes the following machine learning routine:

      It is a system with only one input, situation s, and only one output, action (or behavior) a. There is neither a separate reinforcement input nor an advice input from the environment. The backpropagated value (secondary reinforcement) is the emotion toward the consequence situation. The CAA exists in two environments, one is the behavioral environment where it behaves, and the other is the genetic environment, wherefrom it initially and only once receives initial emotions about situations to be encountered in the behavioral environment. After receiving the genome (species) vector from the genetic environment, the CAA learns a goal-seeking behavior, in an environment that contains both desirable and undesirable situations. [49]

      Feature learning Edit

      Several learning algorithms aim at discovering better representations of the inputs provided during training. [50] Classic examples include principal components analysis and cluster analysis. Feature learning algorithms, also called representation learning algorithms, often attempt to preserve the information in their input but also transform it in a way that makes it useful, often as a pre-processing step before performing classification or predictions. This technique allows reconstruction of the inputs coming from the unknown data-generating distribution, while not being necessarily faithful to configurations that are implausible under that distribution. This replaces manual feature engineering, and allows a machine to both learn the features and use them to perform a specific task.

      Feature learning can be either supervised or unsupervised. In supervised feature learning, features are learned using labeled input data. Examples include artificial neural networks, multilayer perceptrons, and supervised dictionary learning. In unsupervised feature learning, features are learned with unlabeled input data. Examples include dictionary learning, independent component analysis, autoencoders, matrix factorization [51] and various forms of clustering. [52] [53] [54]

      Manifold learning algorithms attempt to do so under the constraint that the learned representation is low-dimensional. Sparse coding algorithms attempt to do so under the constraint that the learned representation is sparse, meaning that the mathematical model has many zeros. Multilinear subspace learning algorithms aim to learn low-dimensional representations directly from tensor representations for multidimensional data, without reshaping them into higher-dimensional vectors. [55] Deep learning algorithms discover multiple levels of representation, or a hierarchy of features, with higher-level, more abstract features defined in terms of (or generating) lower-level features. It has been argued that an intelligent machine is one that learns a representation that disentangles the underlying factors of variation that explain the observed data. [56]

      Feature learning is motivated by the fact that machine learning tasks such as classification often require input that is mathematically and computationally convenient to process. However, real-world data such as images, video, and sensory data has not yielded to attempts to algorithmically define specific features. An alternative is to discover such features or representations through examination, without relying on explicit algorithms.

      Sparse dictionary learning Edit

      Sparse dictionary learning is a feature learning method where a training example is represented as a linear combination of basis functions, and is assumed to be a sparse matrix. The method is strongly NP-hard and difficult to solve approximately. [57] A popular heuristic method for sparse dictionary learning is the K-SVD algorithm. Sparse dictionary learning has been applied in several contexts. In classification, the problem is to determine the class to which a previously unseen training example belongs. For a dictionary where each class has already been built, a new training example is associated with the class that is best sparsely represented by the corresponding dictionary. Sparse dictionary learning has also been applied in image de-noising. The key idea is that a clean image patch can be sparsely represented by an image dictionary, but the noise cannot. [58]

      Anomaly detection Edit

      In data mining, anomaly detection, also known as outlier detection, is the identification of rare items, events or observations which raise suspicions by differing significantly from the majority of the data. [59] Typically, the anomalous items represent an issue such as bank fraud, a structural defect, medical problems or errors in a text. Anomalies are referred to as outliers, novelties, noise, deviations and exceptions. [60]

      In particular, in the context of abuse and network intrusion detection, the interesting objects are often not rare objects, but unexpected bursts of inactivity. This pattern does not adhere to the common statistical definition of an outlier as a rare object, and many outlier detection methods (in particular, unsupervised algorithms) will fail on such data unless it has been aggregated appropriately. Instead, a cluster analysis algorithm may be able to detect the micro-clusters formed by these patterns. [61]

      Three broad categories of anomaly detection techniques exist. [62] Unsupervised anomaly detection techniques detect anomalies in an unlabeled test data set under the assumption that the majority of the instances in the data set are normal, by looking for instances that seem to fit least to the remainder of the data set. Supervised anomaly detection techniques require a data set that has been labeled as "normal" and "abnormal" and involves training a classifier (the key difference to many other statistical classification problems is the inherently unbalanced nature of outlier detection). Semi-supervised anomaly detection techniques construct a model representing normal behavior from a given normal training data set and then test the likelihood of a test instance to be generated by the model.

      Robot learning Edit

      In developmental robotics, robot learning algorithms generate their own sequences of learning experiences, also known as a curriculum, to cumulatively acquire new skills through self-guided exploration and social interaction with humans. These robots use guidance mechanisms such as active learning, maturation, motor synergies and imitation.

      Association rules Edit

      Association rule learning is a rule-based machine learning method for discovering relationships between variables in large databases. It is intended to identify strong rules discovered in databases using some measure of "interestingness". [63]

      Rule-based machine learning is a general term for any machine learning method that identifies, learns, or evolves "rules" to store, manipulate or apply knowledge. The defining characteristic of a rule-based machine learning algorithm is the identification and utilization of a set of relational rules that collectively represent the knowledge captured by the system. This is in contrast to other machine learning algorithms that commonly identify a singular model that can be universally applied to any instance in order to make a prediction. [64] Rule-based machine learning approaches include learning classifier systems, association rule learning, and artificial immune systems.

      Based on the concept of strong rules, Rakesh Agrawal, Tomasz Imieliński and Arun Swami introduced association rules for discovering regularities between products in large-scale transaction data recorded by point-of-sale (POS) systems in supermarkets. [65] For example, the rule < o n i o n s , p o t a t o e s >⇒ < b u r g e r > >Rightarrow >> found in the sales data of a supermarket would indicate that if a customer buys onions and potatoes together, they are likely to also buy hamburger meat. Such information can be used as the basis for decisions about marketing activities such as promotional pricing or product placements. In addition to market basket analysis, association rules are employed today in application areas including Web usage mining, intrusion detection, continuous production, and bioinformatics. In contrast with sequence mining, association rule learning typically does not consider the order of items either within a transaction or across transactions.

      Learning classifier systems (LCS) are a family of rule-based machine learning algorithms that combine a discovery component, typically a genetic algorithm, with a learning component, performing either supervised learning, reinforcement learning, or unsupervised learning. They seek to identify a set of context-dependent rules that collectively store and apply knowledge in a piecewise manner in order to make predictions. [66]

      Inductive logic programming (ILP) is an approach to rule-learning using logic programming as a uniform representation for input examples, background knowledge, and hypotheses. Given an encoding of the known background knowledge and a set of examples represented as a logical database of facts, an ILP system will derive a hypothesized logic program that entails all positive and no negative examples. Inductive programming is a related field that considers any kind of programming language for representing hypotheses (and not only logic programming), such as functional programs.

      Inductive logic programming is particularly useful in bioinformatics and natural language processing. Gordon Plotkin and Ehud Shapiro laid the initial theoretical foundation for inductive machine learning in a logical setting. [67] [68] [69] Shapiro built their first implementation (Model Inference System) in 1981: a Prolog program that inductively inferred logic programs from positive and negative examples. [70] The term inductive here refers to philosophical induction, suggesting a theory to explain observed facts, rather than mathematical induction, proving a property for all members of a well-ordered set.

      Models Edit

      Performing machine learning involves creating a model, which is trained on some training data and then can process additional data to make predictions. Various types of models have been used and researched for machine learning systems.

      Artificial neural networks Edit

      Artificial neural networks (ANNs), or connectionist systems, are computing systems vaguely inspired by the biological neural networks that constitute animal brains. Such systems "learn" to perform tasks by considering examples, generally without being programmed with any task-specific rules.

      An ANN is a model based on a collection of connected units or nodes called "artificial neurons", which loosely model the neurons in a biological brain. Each connection, like the synapses in a biological brain, can transmit information, a "signal", from one artificial neuron to another. An artificial neuron that receives a signal can process it and then signal additional artificial neurons connected to it. In common ANN implementations, the signal at a connection between artificial neurons is a real number, and the output of each artificial neuron is computed by some non-linear function of the sum of its inputs. The connections between artificial neurons are called "edges". Artificial neurons and edges typically have a weight that adjusts as learning proceeds. The weight increases or decreases the strength of the signal at a connection. Artificial neurons may have a threshold such that the signal is only sent if the aggregate signal crosses that threshold. Typically, artificial neurons are aggregated into layers. Different layers may perform different kinds of transformations on their inputs. Signals travel from the first layer (the input layer) to the last layer (the output layer), possibly after traversing the layers multiple times.

      The original goal of the ANN approach was to solve problems in the same way that a human brain would. However, over time, attention moved to performing specific tasks, leading to deviations from biology. Artificial neural networks have been used on a variety of tasks, including computer vision, speech recognition, machine translation, social network filtering, playing board and video games and medical diagnosis.

      Deep learning consists of multiple hidden layers in an artificial neural network. This approach tries to model the way the human brain processes light and sound into vision and hearing. Some successful applications of deep learning are computer vision and speech recognition. [71]

      Decision trees Edit

      Decision tree learning uses a decision tree as a predictive model to go from observations about an item (represented in the branches) to conclusions about the item's target value (represented in the leaves). It is one of the predictive modeling approaches used in statistics, data mining, and machine learning. Tree models where the target variable can take a discrete set of values are called classification trees in these tree structures, leaves represent class labels and branches represent conjunctions of features that lead to those class labels. Decision trees where the target variable can take continuous values (typically real numbers) are called regression trees. In decision analysis, a decision tree can be used to visually and explicitly represent decisions and decision making. In data mining, a decision tree describes data, but the resulting classification tree can be an input for decision making.

      Support-vector machines Edit

      Support-vector machines (SVMs), also known as support-vector networks, are a set of related supervised learning methods used for classification and regression. Given a set of training examples, each marked as belonging to one of two categories, an SVM training algorithm builds a model that predicts whether a new example falls into one category or the other. [72] An SVM training algorithm is a non-probabilistic, binary, linear classifier, although methods such as Platt scaling exist to use SVM in a probabilistic classification setting. In addition to performing linear classification, SVMs can efficiently perform a non-linear classification using what is called the kernel trick, implicitly mapping their inputs into high-dimensional feature spaces.

      Regression analysis Edit

      Regression analysis encompasses a large variety of statistical methods to estimate the relationship between input variables and their associated features. Its most common form is linear regression, where a single line is drawn to best fit the given data according to a mathematical criterion such as ordinary least squares. The latter is often extended by regularization (mathematics) methods to mitigate overfitting and bias, as in ridge regression. When dealing with non-linear problems, go-to models include polynomial regression (for example, used for trendline fitting in Microsoft Excel [73] ), logistic regression (often used in statistical classification) or even kernel regression, which introduces non-linearity by taking advantage of the kernel trick to implicitly map input variables to higher-dimensional space.

      Bayesian networks Edit

      A Bayesian network, belief network, or directed acyclic graphical model is a probabilistic graphical model that represents a set of random variables and their conditional independence with a directed acyclic graph (DAG). For example, a Bayesian network could represent the probabilistic relationships between diseases and symptoms. Given symptoms, the network can be used to compute the probabilities of the presence of various diseases. Efficient algorithms exist that perform inference and learning. Bayesian networks that model sequences of variables, like speech signals or protein sequences, are called dynamic Bayesian networks. Generalizations of Bayesian networks that can represent and solve decision problems under uncertainty are called influence diagrams.

      Genetic algorithms Edit

      A genetic algorithm (GA) is a search algorithm and heuristic technique that mimics the process of natural selection, using methods such as mutation and crossover to generate new genotypes in the hope of finding good solutions to a given problem. In machine learning, genetic algorithms were used in the 1980s and 1990s. [74] [75] Conversely, machine learning techniques have been used to improve the performance of genetic and evolutionary algorithms. [76]

      Training models Edit

      Usually, machine learning models require a lot of data in order for them to perform well. Usually, when training a machine learning model, one needs to collect a large, representative sample of data from a training set. Data from the training set can be as varied as a corpus of text, a collection of images, and data collected from individual users of a service. Overfitting is something to watch out for when training a machine learning model. Trained models derived from biased data can result in skewed or undesired predictions. Algorithmic bias is a potential result from data not fully prepared for training.

      Federated learning Edit

      Federated learning is an adapted form of distributed artificial intelligence to training machine learning models that decentralizes the training process, allowing for users' privacy to be maintained by not needing to send their data to a centralized server. This also increases efficiency by decentralizing the training process to many devices. For example, Gboard uses federated machine learning to train search query prediction models on users' mobile phones without having to send individual searches back to Google. [77]

      There are many applications for machine learning, including:

      In 2006, the media-services provider Netflix held the first "Netflix Prize" competition to find a program to better predict user preferences and improve the accuracy of its existing Cinematch movie recommendation algorithm by at least 10%. A joint team made up of researchers from AT&T Labs-Research in collaboration with the teams Big Chaos and Pragmatic Theory built an ensemble model to win the Grand Prize in 2009 for $1 million. [79] Shortly after the prize was awarded, Netflix realized that viewers' ratings were not the best indicators of their viewing patterns ("everything is a recommendation") and they changed their recommendation engine accordingly. [80] In 2010 The Wall Street Journal wrote about the firm Rebellion Research and their use of machine learning to predict the financial crisis. [81] In 2012, co-founder of Sun Microsystems, Vinod Khosla, predicted that 80% of medical doctors' jobs would be lost in the next two decades to automated machine learning medical diagnostic software. [82] In 2014, it was reported that a machine learning algorithm had been applied in the field of art history to study fine art paintings and that it may have revealed previously unrecognized influences among artists. [83] In 2019 Springer Nature published the first research book created using machine learning. [84] In 2020, machine learning technology was used to help make diagnoses and aid researchers in developing a cure for COVID-19. [85] Machine learning is recently applied to predict the green behavior of human-being. [86] Recently, machine learning technology is also applied to optimise smartphone's performance and thermal behaviour based on the user's interaction with the phone. [87] [88]

      Although machine learning has been transformative in some fields, machine-learning programs often fail to deliver expected results. [89] [90] [91] Reasons for this are numerous: lack of (suitable) data, lack of access to the data, data bias, privacy problems, badly chosen tasks and algorithms, wrong tools and people, lack of resources, and evaluation problems. [92]

      In 2018, a self-driving car from Uber failed to detect a pedestrian, who was killed after a collision. [93] Attempts to use machine learning in healthcare with the IBM Watson system failed to deliver even after years of time and billions of dollars invested. [94] [95]

      Machine learning has been used as a strategy to update the evidence related to systematic review and increased reviewer burden related to the growth of biomedical literature. While it has improved with training sets, it has not yet developed sufficiently to reduce the workload burden without limiting the necessary sensitivity for the findings research themselves. [96]

      Bias Edit

      Machine learning approaches in particular can suffer from different data biases. A machine learning system trained specifically on current customers may not be able to predict the needs of new customer groups that are not represented in the training data. When trained on man-made data, machine learning is likely to pick up the constitutional and unconscious biases already present in society. [97] Language models learned from data have been shown to contain human-like biases. [98] [99] Machine learning systems used for criminal risk assessment have been found to be biased against black people. [100] [101] In 2015, Google photos would often tag black people as gorillas, [102] and in 2018 this still was not well resolved, but Google reportedly was still using the workaround to remove all gorillas from the training data, and thus was not able to recognize real gorillas at all. [103] Similar issues with recognizing non-white people have been found in many other systems. [104] In 2016, Microsoft tested a chatbot that learned from Twitter, and it quickly picked up racist and sexist language. [105] Because of such challenges, the effective use of machine learning may take longer to be adopted in other domains. [106] Concern for fairness in machine learning, that is, reducing bias in machine learning and propelling its use for human good is increasingly expressed by artificial intelligence scientists, including Fei-Fei Li, who reminds engineers that "There’s nothing artificial about AI. It’s inspired by people, it’s created by people, and—most importantly—it impacts people. It is a powerful tool we are only just beginning to understand, and that is a profound responsibility.” [107]

      Classification of machine learning models can be validated by accuracy estimation techniques like the holdout method, which splits the data in a training and test set (conventionally 2/3 training set and 1/3 test set designation) and evaluates the performance of the training model on the test set. In comparison, the K-fold-cross-validation method randomly partitions the data into K subsets and then K experiments are performed each respectively considering 1 subset for evaluation and the remaining K-1 subsets for training the model. In addition to the holdout and cross-validation methods, bootstrap, which samples n instances with replacement from the dataset, can be used to assess model accuracy. [108]

      In addition to overall accuracy, investigators frequently report sensitivity and specificity meaning True Positive Rate (TPR) and True Negative Rate (TNR) respectively. Similarly, investigators sometimes report the false positive rate (FPR) as well as the false negative rate (FNR). However, these rates are ratios that fail to reveal their numerators and denominators. The total operating characteristic (TOC) is an effective method to express a model's diagnostic ability. TOC shows the numerators and denominators of the previously mentioned rates, thus TOC provides more information than the commonly used receiver operating characteristic (ROC) and ROC's associated area under the curve (AUC). [109]

      Machine learning poses a host of ethical questions. Systems which are trained on datasets collected with biases may exhibit these biases upon use (algorithmic bias), thus digitizing cultural prejudices. [110] For example, in 1988, the UK's Commission for Racial Equality found that St. George's Medical School had been using a computer program trained from data of previous admissions staff and this program had denied nearly 60 candidates who were found to be either women or had non-European sounding names. [97] Using job hiring data from a firm with racist hiring policies may lead to a machine learning system duplicating the bias by scoring job applicants by similarity to previous successful applicants. [111] [112] Responsible collection of data and documentation of algorithmic rules used by a system thus is a critical part of machine learning.

      AI can be well-equipped to make decisions in technical fields, which rely heavily on data and historical information. These decisions rely on objectivity and logical reasoning. [113] Because human languages contain biases, machines trained on language corpora will necessarily also learn these biases. [114] [115]

      Other forms of ethical challenges, not related to personal biases, are seen in health care. There are concerns among health care professionals that these systems might not be designed in the public's interest but as income-generating machines. [116] This is especially true in the United States where there is a long-standing ethical dilemma of improving health care, but also increasing profits. For example, the algorithms could be designed to provide patients with unnecessary tests or medication in which the algorithm's proprietary owners hold stakes. There is potential for machine learning in health care to provide professionals an additional tool to diagnose, medicate, and plan recovery paths for patients, but this requires these biases to be mitigated. [117]

      Since the 2010s, advances in both machine learning algorithms and computer hardware have led to more efficient methods for training deep neural networks (a particular narrow subdomain of machine learning) that contain many layers of non-linear hidden units. [118] By 2019, graphic processing units (GPUs), often with AI-specific enhancements, had displaced CPUs as the dominant method of training large-scale commercial cloud AI. [119] OpenAI estimated the hardware compute used in the largest deep learning projects from AlexNet (2012) to AlphaZero (2017), and found a 300,000-fold increase in the amount of compute required, with a doubling-time trendline of 3.4 months. [120] [121]

      Software suites containing a variety of machine learning algorithms include the following: