Data version: ToxCast_v.4.1
- MACCS
- Morgan
- RDKit
- Pattern
- Layered
- Decision Tree (
dt.py) - Logistic Regression (
logistic.py) - Gradient Boost Tree (
gbt.py) - XGBoost (
xgb.py) - Random Forest (
rf.py)
입력데이터.xlsx의 데이터프레임 1행의 열 구성은 반드시 아래와 같아야 합니다.
1행 : DTXSID | SMILES | assay_name1 | assay_name2 | ...
assay_name1 (두번째 행)의 데이터를 이용하고자 하는 경우, assay_num = 1을 입력합니다.
코드상에서 assay_num+1을 사용하므로 데이터프레임의 형식이 위와 동일해야 두번째 행(assay_num+1=2)을 불러올 수 있습니다.
모델 훈련 시마다 분자지문으로 변환하는 과정을 중복 실행하지 않기 위해, 최초 한 번 변환 후 저장한 파일을 불러와 사용합니다.
훈련하고자 하는 SMILES에 대해 smiles2fing.py를 통해 fingerprints를 생성합니다.
ToxCast_v.4.1_v.2 데이터는 KNIME을 통한 염 제거, 무기물질 제거, 그리고 Hitcall의 개수가 5개 미만인 데이터를 제거한 결과물입니다.
run 디렉토리 내 scikit-learn 기반 머신러닝 코드에서는 아래와 같이 데이터를 처리합니다.
-
SMILES로부터 분자지문(mol 형식)으로 변환되지 않는 화학물질의 인덱스는
dropidx.csv파일에 저장합니다. (예시 코드에서 사용하는 변수:drop_idx) -
Hitcall 데이터에서 결측값이 있는 인덱스는
na_idx변수로 받아 해당 행을 제거합니다.
x = pd.read_csv(file_path_fp)
df_drop_idx = pd.read_csv(f'{fp_path}/{fingerprint_type}_dropidx.csv')
drop_idx = df_drop_idx[f'{fingerprint_type}'].tolist()
df = pd.read_excel(file_path)
y = df.iloc[:, assay_num+1].drop(drop_idx).reset_index(drop=True)
na_idx = y[y.isnull()].index
y = y.drop(index=na_idx).reset_index(drop=True)
x = x.drop(index=na_idx).reset_index(drop=True)
모델 코드 내 사용된 assay_num 변수는 ToxCast 내 다양한 assay 데이터를 반복문으로 처리하기 위해 설정되었습니다.
*데이터에 따라 수정하여 사용하는 파이썬 파일과 수정하는 부분*
-
smiles2fing.py
input_excel_path = "./data/example_data_DBPs/for_train/example_DBPs_ER.xlsx"output_dir = "./data/example_data_DBPs/for_train/fingerprints"
-
ToxCast_model_training.sh
models=('dt')(예시: 'xgb', 'gbt', 'rf', 'logistic' 등으로 모델 정의)fingerprints=('MACCS')(예시: 'Morgan', 'RDKit', 'Layered', 'Pattern' 등으로 지문 정의)file_path = "./data/example_data_DBPs/for_train/example_DBPs_ER.xlsx"(데이터 경로)fp_path = "./data/example_data_DBPs/for_train/fingerprint_outputs"(fingerprints 경로)data_name = "example_DBPs_ER"
-
smiles2fing.py
input_excel_path = "./data/example_data_DBPs/for_train/example_DBPs_ER.xlsx"output_dir = "./data/example_data_DBPs/for_train/fingerprints"
-
Predict_data.py
input_excel_path = "./prediction/example_prediction_DBPs/example_assay_list_ER.xlsx"(수정 필요)model_path_base = "./results/example_DBPs_ER/2025-03-25/model_save_path"input_fp_path_base = "./data/example_data_DBPs/for_predict/fingerprints"SMILES_path = "./data/example_data_DBPs/for_predict/example_DBPs_for_pred.xlsx"