[PYTHON] Sentons-nous comme un chercheur en matériaux avec l'apprentissage automatique

Ceci est l'article du 10e jour du Calendrier de l'Avent Nextremer 2016. J'étudie un domaine qui combine ** apprentissage automatique et développement matériel ** à l'université. Cette fois, j'ai écrit un article dans l'espoir que ** les gens qui aiment l'apprentissage automatique se sentiront comme un chercheur en matériaux **. (En fait, je veux que les chercheurs en matériaux se sentent comme des chercheurs en IA et intègrent davantage l'apprentissage automatique dans les matériaux.)

Qu'est-ce que le développement matériel

Tout d'abord, je pense que le développement matériel est quelque chose comme quel genre de matériel il s'agit. Comme vous l'avez dit, il existe divers matériaux tels que la céramique, les polymères et les métaux.

Par exemple iPhone iphone.jpg

Il contient des centaines de ces petits condensateurs céramiques.

0206_img0002.jpg

Et afin de fabriquer un condensateur haute performance choisi par Apple,

・ Quels types d'éléments doivent être combinés? ・ Quel genre de processus devriez-vous faire?

Cela résoudra le problème difficile. Voici un exemple de la façon de le résoudre.

  1. Pour le moment, voulez-vous changer celui des grands hommes du passé?
  2. De manière inattendue ... je me demande s'il vaut mieux augmenter le temps de mélange (optimisation du processus)
  3. C'est fait! Mesurer et observer diverses choses (mesure)
  4. Je vois, c'est très performant avec un tel phénomène physique (théorie, analyse)
  5. La tendance a été trouvée par la théorie et l'analyse, donc la prochaine fois je voudrais la faire avec de tels éléments ... (recherche)

C'est comme ça. Ceci n'est qu'un exemple, mais qu'est-ce que la recherche matérielle?

Fabriquer de bons matériaux en utilisant pleinement l'optimisation des processus, la mesure, la théorie, l'analyse, l'exploration, etc.

C'est désordonné, mais ça ressemble à ça.

En parlant de machine learning, de données

La manière de développer des matériaux par apprentissage automatique est, bien sûr, d'apprendre des fonctionnalités à partir de données. Ensuite, nous prédisons et recherchons des matériaux avec de bonnes propriétés physiques.

Cependant, la situation actuelle est que l'IA n'a pas été en mesure de produire beaucoup de résultats dans la recherche matérielle en raison du manque de données.

Il existe deux principaux types de données sur les matériaux. ・ Données de mesure expérimentales ・ Données d'analyse par calcul

Données de mesure expérimentales

Les données de mesure expérimentales sont

--Papier

Telle est la situation. J'aimerais gâcher les données d'échec qui ne sont pas mentionnées dans l'article ou le Deep Learning, mais je porte de la poussière telle qu'elle est écrite dans le cahier d'expérimentation. Je veux une énorme base de données, mais cela semble difficile car tout le monde veut cacher des résultats importants.

Données analysées par calcul

La base de données des données de calcul est ouverte au public gratuitement Materials Project Est une organisation. Les données publiées ici sont calculées par une méthode de sondage effrayante appelée ** calcul des premiers principes **. Les données peuvent être facilement récupérées au format REST en utilisant https://materialsproject.org/!

Pour ceux qui sont intéressés.

Qu'est-ce que le calcul des premiers principes? Un terme général pour les calculs (méthodes) effectués sur la base du premier principe. ([Wikipédia](https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E5%8E%9F%E7%90%86%E8%A8%88%E7% À partir de AE% 97))

Oui.

Quel est le premier principe? Les premiers principes en sciences naturelles font référence aux règles de base les plus fondamentales qui n'incluent pas d'approximations ou de paramètres empiriques, et peuvent expliquer les phénomènes naturels sur la base de cela. .. ([Wikipédia](https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E5%8E%9F%E7%90%86#.E8.87.AA.E7 .84.B6.E7.A7.91.E5.AD.A6.E3.81.AB.E3.81.8A.E3.81.91.E3.82.8B.E7.AC.AC.E4.B8.80.E5 À partir de .8E.9F.E7.90.86))

Pour faire simple, c'est une personne qui calcule le comportement d'une substance très compliquée uniquement par des lois physiques de base telles que les électrons et les atomes. Mais

Le nombre d'atomes pouvant être manipulés par la méthode dite de calcul de l'état électronique des premiers principes est toujours d'environ 100 à 1000 en 2003, ce qui est bien en dessous de la constante d'avocat. C'est un niveau qu'une protéine (ou un acide aminé) avec la structure la plus simple peut finalement être manipulée de l'ordre de 1000 atomes. ([Wikipédia](https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E5%8E%9F%E7%90%86%E8%A8%88%E7% À partir de AE% 97))

Il semble. Il a fait beaucoup de progrès maintenant en 2016, mais la situation actuelle est qu'il faut beaucoup de coûts et de savoir-faire pour calculer des matériaux complexes et des propriétés physiques. Donc, si vous souhaitez collecter une grande quantité de données, retournez l'ordinateur et calculez-le tranquillement, ou prenez-le dans le projet Matériaux.

C'est difficile, mais nous sommes en 2016 et je souhaite fabriquer des matériaux par apprentissage automatique.

Après tout, les temps sont l'IA et l'apprentissage automatique. Pour fabriquer des matériaux avec l'IA

** ① Prédire les propriétés physiques du matériau avec AI à partir de la formule chimique → ② Recherche à partir d'une énorme combinaison d'atomes avec AI → ③ Fabriquer le matériau tout en contrôlant le robot tout en optimisant le processus avec AI **

À l'heure actuelle, même ** ① n'est pas du tout terminé. ** ** Donc, je suis désolé pour le sujet principal, mais essayons ensemble ** la prédiction des propriétés physiques ** et ressentons le sentiment d'un chercheur de matériaux ** avec l'apprentissage automatique!

Prédisons en fait les propriétés des matériaux par apprentissage automatique

En fait, il existe une société appelée Citrine Informatics qui est engagée dans un service qui aide au développement de matériel avec l'IA, et elle a un beau tutoriel, alors j'aimerais l'essayer. Je pense. Source: MACHINE LEARNING FOR THE MATERIALS SCIENTIST

Objectif

Apprenez à la machine la ** bande interdite ** d'une substance. La bande interdite représente la taille de la barrière lorsque les électrons se déplacent. Si la bande interdite est large, l'électricité ne passera pas (pierre). Si la bande interdite est étroite, l'électricité passera (métal). Il peut réussir ou non s'il est OK (semi-conducteur)

** Choses nécessaires **

--python3.5 (2 séries sont probablement possibles, mais je ne l'ai pas essayé)

** Installer **

pip install scikit-learn
pip install numpy
pip install pymatgen

** Essayez l'apprentissage automatique avec des variables explicatives uniquement pour les formules chimiques **

Premièrement, récupérez les données. Téléchargez le fichier bandgapDFT.csv depuis ici. À propos, la DFT est une méthode de calcul basée sur les premiers principes appelée théorie fonctionnelle de la densité.

Tout d'abord, importons les bibliothèques nécessaires et chargeons le csv téléchargé.

bandgap.py


from pymatgen import Composition, Element
from numpy import zeros, mean
trainFile = open("bandgapDFT.csv","r").readlines()

En regardant les données,

LiH,2.981
BeH2,5.326
B9H11,2.9118
B2H5,6.3448
BH3,5.3234
B5H7,3.5551
H34C19,5.4526
H3N,4.3287
(Ce qui suit est omis)

Je pense que ça ressemble à ça. La première ligne est la formule chimique et la deuxième ligne est la bande interdite (eV). Créez une fonction pour traiter la formule chimique comme un vecteur de longueur fixe pour l'apprentissage automatique. La composition qui apparaît ici est un objet Composition de pymatgen, et vous pouvez obtenir l'atome, le rapport de composition, etc. à partir de la formule chimique.

bandgap.py


#input:Objet de composition de pymatgen
#output:Vecteur de composition
def naiveVectorize(composition):
       vector = zeros((MAX_Z))
       for element in composition:
               #l'élément est un atome. fraction est le pourcentage de l'atome dans la composition
               fraction = composition.get_atomic_fraction(element)
               vector[element.Z - 1] = fraction
       return(vector)

Lisez la formule chimique et la bande interdite de csv, et préparez le vecteur des variables explicatives de la formule chimique avec la fonction ci-dessus. (Génération de données enseignants)

bandgap.py


materials = []
bandgaps = []
naiveFeatures = []

MAX_Z = 100 #Longueur maximale du vecteur caractéristique

for line in trainFile:
       split = str.split(line, ',')
       material = Composition(split[0])
       materials.append(material) #Formule chimique
       naiveFeatures.append(naiveVectorize(material)) #Génération de vecteurs de caractéristiques
       bandgaps.append(float(split[1])) #Chargement de la bande interdite

Le vecteur de quantité d'entités devient des données super discrètes comme celle-ci.

[ 0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ,  0. ,  0. ,  0. ,  0. ,  0.5,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ,  0. ,  0. ,  0. ,  0. ,  0.5,  0. ,  0. ,  0. ,  0. ,  0. ,
        0. ]

Ainsi, les données des enseignants sont prêtes. Après cela, nous ferons l'apprentissage automatique en utilisant le module pratique de scikitlearn. Avant cela, trouvons d'abord une erreur moyenne simple pour vérifier l'exactitude de la prédiction de la bande interdite.

bandgap.py


baselineError = mean(abs(mean(bandgaps) - bandgaps))
print("Mean Absolute Error : " + str(round(baselineError, 3)) + " eV")

Maintenant, il devrait être de 0,728eV. Faisons donc un prédicteur de bande interdite dans une forêt aléatoire.

bandgap.py


from sklearn.model_selection import cross_val_score
from sklearn.model_selection import ShuffleSplit
from sklearn import linear_model, metrics, ensemble

#Retour en forêt aléatoire de sklearn
rfr = ensemble.RandomForestRegressor(n_estimators=10)

#Vérification croisée
cv = ShuffleSplit(n_splits=10, test_size=0.1, random_state=0)

scores_composition = cross_val_score(rfr, naiveFeatures,\
	bandgaps, cv=cv, scoring='neg_mean_absolute_error')

print("Mean Absolute Error by Random Forest with composition data: "\
	+ str(round(abs(mean(scores_composition)), 3)) + " eV")

Si l'erreur moyenne est d'environ 0,36 à eV, vous avez terminé. Par rapport à 0,728eV, je pense avoir réussi à apprendre.

** Utilisons une valeur physique comme variable explicative ** Jusqu'à présent, nous n'avons utilisé que le type d'atomes contenus comme variables explicatives, mais nous utiliserons ensuite des valeurs telles que le rapport de composition atomique et la négativité électrique comme variables explicatives. C'est seulement 4 dimensions. Par exemple, BeH2 [2.0, 0.63, 1.0, 2.0] Ce sera.

bandgap.py


physicalFeatures = []

for material in materials:
       theseFeatures = []
       fraction = []
       atomicNo = []
       eneg = []
       group = []

       for element in material:
               fraction.append(material.get_atomic_fraction(element))
               atomicNo.append(float(element.Z))
               eneg.append(element.X)
               group.append(float(element.group))

       mustReverse = False
       if fraction[1] > fraction[0]:
               mustReverse = True

       for features in [fraction, atomicNo, eneg, group]:
               if mustReverse:
                       features.reverse()
       theseFeatures.append(fraction[0] / fraction[1])
       theseFeatures.append(eneg[0] - eneg[1])
       theseFeatures.append(group[0])
       theseFeatures.append(group[1])
       physicalFeatures.append(theseFeatures)

Entraînons-nous avec l'arbre de décision de la même manière en utilisant la variable explicative créée physicalFeatures.

bandgap.py



scores_physical =cross_val_score(rfr, physicalFeatures,\
	bandgaps, cv=cv, scoring='mean_absolute_error')

print("Mean Absolute Error by Random Forest with physical data: "\
	+ str(round(abs(mean(scores_physical)), 3)) + " eV")

Puis Mean Absolute Error by Random Forest with physical data:: 0.267 eV Ce sera.

Par comparaison

Il s'est avéré qu'il est plus exact d'utiliser la quantité physique comme variable explicative. C'est inutile du tout, mais je pense que je pourrais d'une manière ou d'une autre ressentir l'humeur d'un chercheur en matériaux grâce à l'apprentissage automatique.

finalement

En fait, il existe déjà de nombreux articles qui proposent la prédiction des propriétés physiques à l'aide de réseaux neuronaux et d'arbres de décision, ainsi que des méthodes de recherche de matériaux utilisant des algorithmes génétiques, et ils ne sont actuellement pas applicables à un niveau pratique, mais à l'avenir. Je pense que la recherche matérielle utilisant l'IA deviendra sûrement active. Cependant, j'estime que le Japon est loin derrière dans ce domaine par rapport aux États-Unis et à d'autres pays. Si vous êtes une personne spécialisée dans les matériaux et les propriétés physiques, j'aimerais vraiment que vous procédiez à des recherches intégrant l'apprentissage automatique.

Merci beaucoup!

Recommended Posts

Sentons-nous comme un chercheur en matériaux avec l'apprentissage automatique
Sentons-nous comme un chercheur de matériaux avec python [Introduction à pymatgen]
Une histoire sur l'apprentissage automatique avec Kyasuket
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
L'apprentissage automatique appris avec Pokemon
Apprentissage automatique avec Python! Préparation
Démineur d'apprentissage automatique avec PyTorch
Créer un environnement d'apprentissage automatique
Commencer avec l'apprentissage automatique Python
Essayez le machine learning à la légère avec Kaggle
Créez une application d'apprentissage automatique avec ABEJA Platform + LINE Bot
Nostalgique, reproduisons un jeu de personnages comme CBM-3032 avec ncursesw.
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
J'ai essayé l'apprentissage automatique avec liblinear
Apprentissage automatique par python (1) Classification générale
Faisons une rupture de bloc avec wxPython
SVM essayant l'apprentissage automatique avec scikit-learn
Analyse inverse du modèle d'apprentissage automatique
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Machine learning d'inspiration quantique avec des réseaux de tenseurs
Démarrez avec l'apprentissage automatique avec SageMaker
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Comment créer une API de machine learning sans serveur avec AWS Lambda
Une histoire sur l'automatisation du mahjong en ligne (Jakutama) avec OpenCV et l'apprentissage automatique
Création d'un environnement d'apprentissage automatique avec le serveur Tellus GPU (Sakura High-Power Computing)
Faisons un jeu de shiritori avec Python
Amplifiez les images pour l'apprentissage automatique avec Python
Jouez comme une application Web avec ipywidgets
Sklearn de données déséquilibrées avec apprentissage automatique k-NN
Apprentissage automatique avec python (2) Analyse de régression simple
Créons un groupe gratuit avec Python
Faisons la voix lentement avec Python
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
Faisons un langage simple avec PLY 1
Apprentissage automatique avec Pytorch sur Google Colab
Créez un framework Web avec Python! (1)
Faisons une IA à trois yeux avec Pylearn 2
Analysons la machine de jeu rétro chinoise
Construisez une machine d'acquisition de capture avec Selenium
Faisons un bot Twitter avec Python!
Créer un environnement de développement pour l'apprentissage automatique
Construction d'environnement AI / Machine Learning avec Python
Créez un framework Web avec Python! (2)
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
Apprentissage automatique
[Apprentissage automatique] Créez un modèle d'apprentissage automatique en effectuant un apprentissage par transfert avec votre propre ensemble de données
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 1
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Apprentissage automatique à partir de Python Personal Memorandum Part2
[Piyopiyokai # 1] Jouons avec Lambda: création d'une fonction Lambda
Apprentissage automatique à partir de Python Personal Memorandum Part1
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
Apprentissage automatique à partir de zéro (apprentissage automatique appris avec Kaggle)