Chapter 52

重要度解析

poclabweb
poclabweb
2022.10.23に更新

3. 結果の確認 model.feature_importances_

重要度を算出して表示させる

# 重要度を出力する。
fi_rf = model.feature_importances_  
features_rf = pd.DataFrame({'feature': list(X_train.columns),
                            'feature_importance': fi_rf[:]}).sort_values('feature_importance', ascending = False)
features_rf = features_rf[features_rf['feature_importance'] != 0]

# 図を出力 
plt.rcParams["figure.figsize"] = [10,4] # 出力される図の大きさを変える
plt.scatter(features_rf.iloc[:10, :].feature, features_rf.iloc[:10, :].feature_importance);

# 表を出力する。
features_rf

重要度の高かったフラグメントを有する分子のlogSのヒストグラムを比較してみる。

今回は、finger printで561を有するものを表示させる。

# finger printの561を有する構造を表示してみる。
finger_print_number = 561
# finger_print_numberが1である行数を表示
print(len(df_comb[df_comb[finger_print_number] == 1]))
# データの一行目を表示
df_comb[df_comb[finger_print_number] == 1].head(1)

# 上が全体のlogSのヒストグラム
print(df_comb.hist("logS"))
# 下がfinger printで561を有するもののヒストグラム
print(df_comb[df_comb[561] == 1].hist("logS"))

重要度の高かったフラグメントを確認する。

# ライブラリーのインポート
from rdkit.Chem import Draw
from rdkit.Chem.Draw import IPythonConsole
from IPython.display import display
from IPython.display import Image
 
# 特定のsmilesを有する構造を表示してみる。
smiles = "c1c2ccc[nH0]c2ccc1"
compound = Chem.MolFromSmiles(smiles)
bitI_morgan = {}
fp_morgan = AllChem.GetMorganFingerprintAsBitVect(compound, 2, bitInfo=bitI_morgan)
print(fp_morgan.GetNumBits(),fp_morgan.GetNumOnBits()) 
print(len(bitI_morgan)) 

morgan_turples = ((compound , bit, bitI_morgan) for bit in list(bitI_morgan.keys()))
Draw.DrawMorganBits(morgan_turples, molsPerRow=4, legends=['bit: '+str(x) for x in list(bitI_morgan.keys())])