[PYTHON] Fühlen wir uns wie ein Materialforscher mit maschinellem Lernen

Dies ist der Artikel zum 10. Tag von Nextremer Adventskalender 2016. Ich studiere ein Fach, das ** maschinelles Lernen und Materialentwicklung ** an der Universität kombiniert. Dieses Mal schrieb ich einen Artikel mit der Hoffnung, dass ** Menschen, die maschinelles Lernen lieben, sich wie ein Materialforscher fühlen **. (Eigentlich möchte ich, dass sich Materialforscher wie KI-Forscher fühlen und maschinelles Lernen stärker in Materialien integrieren.)

Was ist Materialentwicklung?

Zunächst einmal denke ich, dass Materialentwicklung so etwas wie Material ist. Wie Sie sagten, gibt es verschiedene Materialien wie Keramik, Polymere und Metalle.

Zum Beispiel iPhone iphone.jpg

Es gibt Hunderte solcher kleinen Keramikkondensatoren.

0206_img0002.jpg

Und um einen von Apple ausgewählten Hochleistungskondensator herzustellen,

・ Welche Elemente sollten kombiniert werden? ・ Was für einen Prozess sollten Sie durchführen?

Es wird das schwierige Problem lösen. Hier ist ein Beispiel, wie man es löst.

  1. Wollen Sie vorerst die von den großen Männern der Vergangenheit gemachte ändern?
  2. Unerwartet ... Ich frage mich, ob es besser ist, die Mischzeit zu verlängern (Prozessoptimierung)
  3. Es ist geschafft! Verschiedene Dinge messen und beobachten (Messung)
  4. Ich sehe, es ist eine hohe Leistung mit einem solchen physikalischen Phänomen (Theorie, Analyse)
  5. Die Tendenz wurde durch Theorie und Analyse gefunden, also möchte ich es das nächste Mal mit solchen Elementen machen ... (Suche)

Es ist wie es ist. Dies ist nur ein Beispiel, aber was ist Materialforschung?

Machen Sie großartige Materialien, indem Sie Prozessoptimierung, Messung, Theorie, Analyse, Exploration usw. voll ausnutzen.

Es ist chaotisch, aber es sieht so aus.

Apropos maschinelles Lernen, Daten

Der Weg, Materialien durch maschinelles Lernen zu entwickeln, besteht natürlich darin, Merkmale aus Daten zu lernen. Dann prognostizieren und suchen wir nach Materialien mit guten physikalischen Eigenschaften.

Die aktuelle Situation ist jedoch, dass die KI aufgrund fehlender Daten nicht viele Ergebnisse in der Materialforschung erzielen konnte.

Es gibt zwei Haupttypen von Daten zu Materialien. ・ Experimentelle Messdaten ・ Analysedaten durch Berechnung

Experimentelle Messdaten

Die experimentellen Messdaten sind

--Papier

Das ist die Situation. Ich möchte die Fehlerdaten durcheinander bringen, die nicht in der Veröffentlichung oder in Deep Learning erwähnt werden, aber sie sind mit Staub bedeckt, wie sie im Experimentierheft geschrieben sind. Ich möchte eine riesige Datenbank, aber es scheint schwierig zu sein, weil jeder wichtige Ergebnisse verbergen möchte.

Analysierte Daten durch Berechnung

Die Datenbank mit Berechnungsdaten ist für die Öffentlichkeit kostenlos zugänglich Materials Project Ist eine Organisation. Die hier veröffentlichten Daten werden mit einer beängstigend klingenden Methode berechnet, die als ** First-Principles-Berechnung ** bezeichnet wird. Die Daten können einfach im REST-Format unter https://materialsproject.org/ abgerufen werden!

Für diejenigen, die interessiert sind.

Was ist First-Principles-Berechnung? Ein allgemeiner Begriff für Berechnungen (Methoden), die nach dem ersten Prinzip durchgeführt werden. ([Wikipedia](https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E5%8E%9F%E7%90%86%E8%A8%88%E7% Ab AE% 97))

Ja.

Was ist das erste Prinzip? Die ersten naturwissenschaftlichen Prinzipien beziehen sich auf die grundlegendsten Grundregeln, die keine Annäherungen oder empirischen Parameter enthalten, und können Naturphänomene unter dieser Voraussetzung erklären. .. ([Wikipedia](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 Von .8E.9F.E7.90.86))

Einfach ausgedrückt ist es eine Person, die das Verhalten einer sehr komplizierten Substanz nur durch physikalische Grundgesetze wie Elektronen und Atome berechnet. Aber

Die Anzahl der Atome, die mit der sogenannten elektronischen Zustandsberechnungsmethode nach den ersten Prinzipien verarbeitet werden können, liegt ab 2003 immer noch bei etwa 100 bis 1000, was weit unter der Avocadro-Konstante liegt. Auf dieser Ebene kann ein Protein (oder eine Aminosäure) mit der einfachsten Struktur schließlich in der Größenordnung von 1000 Atomen gehandhabt werden. ([Wikipedia](https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E5%8E%9F%E7%90%86%E8%A8%88%E7% Ab AE% 97))

Es scheint. Es war jetzt ein enormer Fortschritt im Jahr 2016, aber die aktuelle Situation ist, dass es viel Kosten und Know-how erfordert, um komplizierte Materialien und physikalische Eigenschaften zu berechnen. Wenn Sie also eine große Datenmenge erfassen möchten, drehen Sie den Computer um und berechnen Sie sie leise oder nehmen Sie sie aus dem Materialprojekt.

Es ist schwierig, aber es ist 2016 und ich möchte Materialien mit maschinellem Lernen erstellen.

Immerhin sind die Zeiten KI und maschinelles Lernen. Materialien mit KI herstellen

** ① Vorhersage der physikalischen Eigenschaften von Materialien mit AI anhand chemischer Formeln → ② Suche aus einer Vielzahl von Atomkombinationen mit AI → ③ Herstellung von Materialien unter Steuerung von Robotern bei gleichzeitiger Optimierung von Prozessen mit AI **

Derzeit ist sogar ** ① überhaupt nicht abgeschlossen. ** ** ** Das Hauptthema tut mir leid, aber lassen Sie uns gemeinsam die Vorhersage physikalischer Eigenschaften versuchen und das Gefühl eines Materialforschers beim maschinellen Lernen erleben!

Lassen Sie uns die Materialeigenschaften durch maschinelles Lernen vorhersagen

Tatsächlich gibt es eine Firma namens Citrine Informatics, die einen Dienst anbietet, der die Materialentwicklung mit KI unterstützt, und der ein nettes Tutorial hat, also würde ich es gerne ausprobieren. Ich denke. Quelle: MASCHINENLERNEN FÜR DEN MATERIALWISSENSCHAFTLER

Zweck

Lernen Sie die ** Bandlücke ** einer Substanz maschinell. Die Bandlücke repräsentiert die Größe der Barriere, wenn sich Elektronen bewegen. Wenn die Bandlücke groß ist, wird kein Strom durchgelassen (Stein). Wenn die Bandlücke eng ist, wird Elektrizität durchgelassen (Metall). Es kann passieren oder nicht, wenn es in Ordnung ist. (Halbleiter)

** Notwendige Dinge **

--python3.5 (2 Serien sind wahrscheinlich möglich, aber ich habe es nicht ausprobiert)

** Installieren **

pip install scikit-learn
pip install numpy
pip install pymatgen

** Versuchen Sie maschinelles Lernen mit erklärenden Variablen nur für chemische Formeln **

Holen Sie sich zuerst die Daten. Laden Sie die Datei bandgapDFT.csv von [hier] herunter (https://citrineinformatics.box.com/shared/static/0ch2f96jxbqtntia49ipk7g8vx64tuap.csv). DFT ist übrigens eine Berechnungsmethode nach dem ersten Prinzip, die als Dichtefunktionaltheorie bezeichnet wird.

Importieren wir zunächst die erforderlichen Bibliotheken und laden die heruntergeladene CSV.

bandgap.py


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

Mit Blick auf die Daten,

LiH,2.981
BeH2,5.326
B9H11,2.9118
B2H5,6.3448
BH3,5.3234
B5H7,3.5551
H34C19,5.4526
H3N,4.3287
(Folgendes wird weggelassen)

Ich denke es sieht so aus. Die erste Zeile ist die chemische Formel und die zweite Zeile ist die Bandlücke (eV). Erstellen Sie eine Funktion, um die chemische Formel als Vektor fester Länge für maschinelles Lernen zu behandeln. Die Zusammensetzung, die hier erscheint, ist ein Zusammensetzungsobjekt von Pymatgen, und Sie können das Atom, das Zusammensetzungsverhältnis usw. aus der chemischen Formel erhalten.

bandgap.py


#input:Kompositionsobjekt von Pymatgen
#output:Zusammensetzungsvektor
def naiveVectorize(composition):
       vector = zeros((MAX_Z))
       for element in composition:
               #Element ist ein Atom. Fraktion ist der Prozentsatz des Atoms in der Zusammensetzung
               fraction = composition.get_atomic_fraction(element)
               vector[element.Z - 1] = fraction
       return(vector)

Lesen Sie die chemische Formel und die Bandlücke aus csv und bereiten Sie den Vektor der erklärenden Variablen aus der chemischen Formel mit der obigen Funktion vor. (Generierung von Lehrerdaten)

bandgap.py


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

MAX_Z = 100 #Maximale Länge des Merkmalsvektors

for line in trainFile:
       split = str.split(line, ',')
       material = Composition(split[0])
       materials.append(material) #Chemische Formel
       naiveFeatures.append(naiveVectorize(material)) #Erzeugung von Merkmalsvektoren
       bandgaps.append(float(split[1])) #Bandlückenbelastung

Der Merkmalsmengenvektor wird zu super diskreten Daten wie diesen.

[ 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. ]

Die Lehrerdaten sind also fertig. Danach werden wir maschinelles Lernen mit dem praktischen Modul von scikitlearn durchführen. Lassen Sie uns vorher zunächst einen einfachen Durchschnittsfehler finden, um die Genauigkeit der Bandlückenvorhersage zu überprüfen.

bandgap.py


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

Jetzt sollte es 0,728 eV sein. Machen wir also einen Bandlücken-Prädiktor in einem zufälligen Wald.

bandgap.py


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

#Zufällige Waldrückgabe von sklearn
rfr = ensemble.RandomForestRegressor(n_estimators=10)

#Gegenüberstellung
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")

Wenn der durchschnittliche Fehler etwa 0,36 bis eV beträgt, sind Sie fertig. Im Vergleich zu 0,728 eV habe ich es geschafft zu lernen.

** Verwenden wir einen physikalischen Wert als erklärende Variable ** Bisher haben wir nur verwendet, welche Art von Atomen als erklärende Variablen enthalten sind, aber als nächstes werden wir Werte wie das Atomzusammensetzungsverhältnis und die elektrische Negativität als erklärende Variablen verwenden. Es sind nur 4 Dimensionen. Zum Beispiel BeH2 [2.0, 0.63, 1.0, 2.0] Es wird sein.

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)

Lassen Sie uns mit dem Entscheidungsbaum auf die gleiche Weise trainieren, indem wir die erstellte erklärende Variable PhysicalFeatures verwenden.

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")

Dann Mean Absolute Error by Random Forest with physical data:: 0.267 eV Es wird sein.

Im Vergleich

Es stellte sich heraus, dass es genauer ist, die physikalische Größe als erklärende Variable zu verwenden. Es ist überhaupt nutzlos, aber ich denke, ich konnte durch maschinelles Lernen irgendwie die Stimmung eines Materialforschers spüren.

Schließlich

Tatsächlich gibt es bereits viele Veröffentlichungen, die die Vorhersage physikalischer Eigenschaften unter Verwendung neuronaler Netze und Entscheidungsbäume sowie Methoden zur Materialsuche unter Verwendung genetischer Algorithmen vorschlagen, und sie sind derzeit nicht auf praktischer Ebene anwendbar, sondern in Zukunft. Ich denke, dass die Materialforschung mit KI sicherlich aktiv werden wird. Ich bin jedoch der Meinung, dass Japan in diesem Bereich im Vergleich zu den USA und anderen Ländern weit hinterherhinkt. Wenn Sie eine Person sind, die sich auf Materialien und physikalische Eigenschaften spezialisiert hat, möchte ich, dass Sie mit der Forschung fortfahren, die maschinelles Lernen beinhaltet.

Vielen Dank!

Recommended Posts

Fühlen wir uns wie ein Materialforscher mit maschinellem Lernen
Fühlen wir uns wie ein Materialforscher mit Python [Einführung in Pymatgen]
Eine Geschichte über maschinelles Lernen mit Kyasuket
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Maschinelles Lernen mit Pokemon gelernt
Maschinelles Lernen mit Python! Vorbereitung
Maschinelles Lernen Minesweeper mit PyTorch
Erstellen Sie eine maschinelle Lernumgebung
Beginnend mit maschinellem Python-Lernen
Versuchen Sie es mit Kaggle leicht maschinell
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot
Nostalgisch, lasst uns ein Charakterspiel wie CBM-3032 mit ncursesw reproduzieren.
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Ich habe maschinelles Lernen mit liblinear versucht
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Machen wir einen Blockbruch mit wxPython
SVM versucht maschinelles Lernen mit Scikit-Learn
Inverse Analyse des maschinellen Lernmodells
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Quanteninspiriertes maschinelles Lernen mit Tensornetzwerken
Beginnen Sie mit dem maschinellen Lernen mit SageMaker
"Scraping & maschinelles Lernen mit Python" Lernnotiz
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Eine Geschichte über die Automatisierung von Online-Mahjong (Jakutama) mit OpenCV und maschinellem Lernen
Aufbau einer maschinellen Lernumgebung mit Tellus GPU-Server (Sakura High-Heat-Computing)
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Verstärken Sie Bilder für maschinelles Lernen mit Python
Spielen Sie wie eine Web-App mit ipywidgets
Unausgeglichenes Datenlernen mit maschinellem Lernen k-NN
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Erstellen wir mit Python eine kostenlose Gruppe
Lassen Sie uns mit Python langsam sprechen
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
Maschinelles Lernen mit Pytorch in Google Colab
Erstellen Sie ein Webframework mit Python! (1)
Machen wir mit Pylearn 2 eine dreiäugige KI
Lassen Sie uns die chinesische Retro-Spielmaschine analysieren
Erstellen Sie mit Selenium eine Capture-Erfassungsmaschine
Machen wir einen Twitter-Bot mit Python!
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Aufbau einer KI / maschinellen Lernumgebung mit Python
Erstellen Sie ein Webframework mit Python! (2)
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Maschinelles Lernen
[Maschinelles Lernen] Erstellen Sie ein Modell für maschinelles Lernen, indem Sie Transferlernen mit Ihrem eigenen Datensatz durchführen
Maschinelles Lernen eines jungen Ingenieurs Teil 1
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen einer Lambda-Funktion
Maschinelles Lernen beginnend mit Python Personal Memorandum Part1
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Maschinelles Lernen von Grund auf neu (maschinelles Lernen mit Kaggle)