機械学習メモ

化学を機械学習で何か

同じ化学構造かどうかを調べるツール

データベースの中に、同じ化学構造が入っていて、あーーってことあります。自分が作っていないと、余計に気になります。なので、確かめるプログラムを作っています。

import pandas as pd
from rdkit import Chem, DataStructs
from rdkit.Chem import AllChem
csv="iQSPR_sample_data.csv"
data=pd.read_csv(csv)
data=data[ data["SMILES"] != "FBr(F)(F)(F)F"  ]
smi=data["SMILES"]
mols=[Chem.MolFromSmiles(m) for m in smi]
morgan_fps = [AllChem.GetMorganFingerprintAsBitVect(mol, 2, 2048) for mol in mols]
sameOne=0
for i in range(len(smi)):
    morgan = DataStructs.BulkTanimotoSimilarity(morgan_fps[i], morgan_fps)
    for j in range(len(smi)):
        if i != j :
            if morgan[j] > 0.9:
                a=Chem.MolToSmiles(mols[i])
                b=Chem.MolToSmiles(mols[j])
                if a==b:
                    print("Tanimo coefficient and SMILES test",i,j,a,list(data["E"])[i],list(data["E"])[j])
                    sameOne+=1
print(len(smi),sameOne)

実行してみると、
16673 814
という答えがあるので、814/2個分だけ余計なデータが入っていたようです。

そこまで多くはないので、学習モデルには影響していないのかもしれない。おなじ化学構造でエネルギー計算の値が0.8kJ/molほど違っていたので、その差はそんなにないのか。

計算化学のデータだからと言って、鵜呑みにせず、調べてみることが必要かもしれないですね。
(自分でデータ作るか、検算はしておこうということですね)