Datawhale AI 夏令營 機器學習挑戰賽

一、賽事背景

在當今科技日新月異的時代,人工智能(AI)技術正以前所未有的深度和廣度滲透到科研領域,特別是在化學及藥物研發中展現出了巨大潛力。精準預測分子性質有助于高效篩選出具有優異性能的候選藥物。以PROTACs為例,它是一種三元復合物由目標蛋白配體、linker、E3連接酶配體組成,靶向降解目標蛋白質。本次大賽聚焦于運用先進的人工智能算法預測其降解效能,旨在激發參賽者創新思維,推動AI技術與化學生物學的深度融合,進一步提升藥物研發效率與成功率,為人類健康事業貢獻智慧力量。通過此次大賽,我們期待見證并孵化出更多精準、高效的分子性質預測模型,共同開啟藥物發現的新紀元。

二、賽事任務

選手根據提供的demo數據集,可以基于demo數據集進行數據增強、自行搜集數據等方式擴充數據集,并自行劃分數據。運用深度學習、強化學習或更加優秀人工智能的方法預測PROTACs的降解能力,若DC50>100nM且Dmax<80% ,則視為降解能力較差(demo數據集中Label=0);若DC50<=100nM或Dmax>=80%,則視為降解能力好(demo數據集中Label=1)。

下面給出代碼流程:

  1. 數據加載
    • 使用pandas庫從Excel文件中加載訓練和測試數據集。
  2. 數據預處理
    • 刪除訓練集中不需要的列('DC50 (nM)'和'Dmax (%)')。
    • 檢查測試集中的列,如果某列的非空值少于10個,則將該列從訓練和測試集中刪除。
    • 將訓練和測試集合并為一個數據集,以便進行統一處理。
  3. SMILES轉換
    • 使用rdkit庫將SMILES字符串轉換為isomeric SMILES,并將其連接成一個字符串。
  4. TF-IDF計算
    • 使用TfidfVectorizer計算SMILES字符串的TF-IDF值,并將其添加到數據集中。
  5. 自然數編碼
    • 對所有對象類型的列進行自然數編碼,即將每個唯一值映射到一個整數。
  6. 數據分割
    • 將帶有標簽的數據分割為訓練集和驗證集,測試集保持不變(包含NaN標簽)。
  7. 特征篩選
    • 選擇除'uuid'、'Label'和'smiles_list'之外的所有列作為特征。
  8. 網格搜索優化參數
    • 使用GridSearchCV進行參數優化,找到最佳的CatBoost分類器參數。
  9. 模型訓練和驗證
    • 使用最佳參數訓練CatBoost分類器,并使用驗證集進行早停,以防止過擬合。
  10. 預測和保存結果
    • 使用訓練好的模型對測試集進行預測,并將預測結果保存為CSV文件。

下面是具體代碼的分享

import numpy as np  
import pandas as pd  
from catboost import CatBoostClassifier  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import f1_score  
from rdkit import Chem  
from rdkit.Chem import Descriptors  
from sklearn.feature_extraction.text import TfidfVectorizer  
import os, gc, warnings 
from sklearn.model_selection import GridSearchCV, KFold  
warnings.filterwarnings('ignore')  # 數據加載  
train_full = pd.read_excel(r'C:\\Users\\admin\\Desktop\\dataset-new\\dataset-new\\traindata-new.xlsx')  
test = pd.read_excel(r'C:\\Users\\admin\\Desktop\\dataset-new\\dataset-new\\testdata-new.xlsx')  # 數據預處理  
train_full = train_full.drop(['DC50 (nM)', 'Dmax (%)'], axis=1)  
drop_cols = []  
for f in test.columns:  if test[f].notnull().sum() < 10:  drop_cols.append(f)  
train_full = train_full.drop(drop_cols, axis=1)  
test = test.drop(drop_cols, axis=1)  data = pd.concat([train_full, test], axis=0, ignore_index=True)  
cols = data.columns[2:]  # 假設前兩列是uuid和Label(或類似的列),這里需要根據實際情況調整  # SMILES轉換  
data['smiles_list'] = data['Smiles'].apply(lambda x: [Chem.MolToSmiles(mol, isomericSmiles=True) for mol in [Chem.MolFromSmiles(x)]])  
data['smiles_list'] = data['smiles_list'].map(lambda x: ' '.join(x))  # TF-IDF計算  
tfidf = TfidfVectorizer(max_df=0.9, min_df=1, sublinear_tf=True)  
res = tfidf.fit_transform(data['smiles_list'])  
tfidf_df = pd.DataFrame(res.toarray())  
tfidf_df.columns = [f'smiles_tfidf_{i}' for i in range(tfidf_df.shape[1])]  
data = pd.concat([data, tfidf_df], axis=1)  # 自然數編碼  
def label_encode(series):  unique = list(series.unique())  return series.map(dict(zip(unique, range(series.nunique()))))  for col in cols:  if data[col].dtype == 'object':  data[col] = label_encode(data[col])  labeled_data = data[data.Label.notnull()]  train, val = train_test_split(labeled_data, test_size=0.01, random_state=42, stratify=labeled_data['Label'])  # 外部驗證集仍然是原始測試集,它包含NaN標簽  
test = data[data.Label.isnull()]   # 特征篩選  
features = [f for f in train.columns if f not in ['uuid', 'Label', 'smiles_list']]  # 構建訓練集和驗證集  
x_train = train[features]  
y_train = train['Label'].astype(int)  
x_val = val[features]  
y_val = val['Label'].astype(int)  # 網格搜索優化參數  
params = {  'learning_rate': [0.1],  'depth': [ 6],  'l2_leaf_reg': [1],  'bootstrap_type': ['Bernoulli'],  'od_type': ['Iter'],  'random_seed': [42]  
}  model = CatBoostClassifier(iterations=20, eval_metric='AUC', verbose=1)  
grid_search = GridSearchCV(model, params, cv=5, scoring='f1', verbose=1, n_jobs=-1)  
grid_search.fit(x_train, y_train)  # 輸出最佳參數  
print("Best parameters:", grid_search.best_params_)  
print("Best score:", grid_search.best_score_)  # 使用最佳參數訓練模型,并使用驗證集進行早停  
best_model = CatBoostClassifier(**grid_search.best_params_, iterations=2, eval_metric='AUC', use_best_model=True, verbose=1)  
best_model.fit(x_train, y_train, eval_set=[(x_val, y_val)])  # 預測  
test_pred = best_model.predict_proba(test[features])[:, 1]  # 保存結果  
pd.DataFrame({  'uuid': test['uuid'],  'Label': np.where(test_pred > 0.5, 1, 0)  
}).to_csv('submit.csv', index=None)

最后是運行結果:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43391.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43391.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43391.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hi3861 OpenHarmony嵌入式應用入門--MQTT

MQTT 是機器對機器(M2M)/物聯網(IoT)連接協議。它被設計為一個極其輕量級的發布/訂閱消息傳輸 協議。對于需要較小代碼占用空間和/或網絡帶寬非常寶貴的遠程連接非常有用&#xff0c;是專為受限設備和低帶寬、 高延遲或不可靠的網絡而設計。這些原則也使該協議成為新興的“機器…

AutoMQ 生態集成 Kafdrop-ui

Kafdrop [1] 是一個為 Kafka 設計的簡潔、直觀且功能強大的Web UI 工具。它允許開發者和管理員輕松地查看和管理 Kafka 集群的關鍵元數據&#xff0c;包括主題、分區、消費者組以及他們的偏移量等。通過提供一個用戶友好的界面&#xff0c;Kafdrop 大大簡化了 Kafka 集群的監控…

量產工具一一UI系統(四)

目錄 前言 一、按鈕數據結構抽象 1.ui.h 二、按鍵處理 1.button.c 2.disp_manager.c 3.disp_manager.h 三、單元測試 1.ui_test.c 2.上機測試 前言 前面我們實現了顯示系統框架&#xff0c;輸入系統框架和文字系統框架&#xff0c;鏈接&#xff1a; 量產工具一一顯…

Redis 底層數據結構

? 簡單動態字符串 ? 鏈表 ? 字典 ? 跳躍表 ? 整數集合 ? 壓縮列表 ? 對象 SDS 增加了len和free屬性&#xff0c;記錄buf數組的使用空間和剩余空間。好處:strken函數直接讀取len值&#xff0c;時間復雜度是O(1)&#xff1b;預分配buf長度&#xf…

集控中心操作臺材質選擇如何選擇

作為集控中心的核心組成部分&#xff0c;操作臺不僅承載著各種設備和工具&#xff0c;更是工作人員進行監控、操作和管理的重要平臺。因此&#xff0c;選擇適合的集控中心操作臺材質顯得尤為重要。 一、材質選擇的考量因素 在選擇集控中心操作臺材質時&#xff0c;我們需要綜合…

SpringCloud跨微服務的遠程調用,如何發起網絡請求,RestTemplate

在我們的業務流程之中不一定都會是自己模塊查詢自己模塊的信息&#xff0c;有些時候就需要去結合其他模塊的信息來進行一些查詢完成相應的業務流程&#xff0c;但是在SpringCloud每個模塊都相對獨立&#xff0c;數據庫也有數據隔離。所以當我們需要其他微服務模塊的信息的時候&…

什么是SpringCloud Stream?

Spring Cloud Stream 是一個構建消息驅動微服務的框架&#xff0c;其基于Spring Boot來開發&#xff0c;并使用Spring Integration來連接消息代理中間件。該項目的目標是提供一套用于開發消息驅動應用的通用模型&#xff0c;并定義了用于發送和接收消息的綁定器&#xff08;Bin…

前端javascript中的排序算法之選擇排序

選擇排序&#xff08;Selection Sort&#xff09;基本思想&#xff1a; 是一種原址排序法&#xff1b; 將數組分為兩個區間&#xff1a;左側為已排序區間&#xff0c;右側為未排序區間。每趟從未排序區間中選擇一個值最小的元素&#xff0c;放到已排序區間的末尾&#xff0c;從…

玩轉springboot之為什么springboot可以直接執行

為什么springboot可以直接執行 先看一下springboot打包生成的MANIFEST.MF內容是什么 Manifest-Version: 1.0Implementation-Title: exam-adminImplementation-Version: 1.0-SNAPSHOTStart-Class: com.zhanghe.exam.ApplicationSpring-Boot-Classes: BOOT-INF/classes/Spring-Bo…

小米采取措施禁止國行版設備安裝國際版系統 刷機后將報錯無法進入系統

據知名官改版系統 Xiaomi.EU 測試者 Kacper Skrzypek 發布的消息&#xff0c;小米目前已經在開機引導中新增區域檢測機制&#xff0c;該機制將識別硬件所屬的市場版本&#xff0c;例如中國大陸市場銷售的小米即將在安裝國際版系統后將無法正常啟動。 測試顯示該檢測機制是在開…

1.DDR3 SO-DIMM 內存條硬件總結

最近在使用fpga讀寫DDR3&#xff0c;板子上的DDR3有兩種形式與fpga相連&#xff0c;一種是直接用ddr3內存顆粒&#xff0c;另一種是通過內存條的形式與fpga相連。這里我們正好記錄下和ddr3相關的知識&#xff0c;先從DDR3 SO-DIMM 內存條開始。 1.先看內存條的版本 從JEDEC下載…

四步帶你實現【Open3d】--邊緣檢測

Open3D邊緣檢測技術從3D數據中精準識別并提取邊界&#xff0c;對于場景解析、物體輪廓提取等任務至關重要。Open3D提供多種算法&#xff0c;幫助用戶高效實現邊緣檢測&#xff0c;促進3D數據的深度分析和應用。 一、安裝 pip install open3d # 即可 二、使用 首先&#…

《算法筆記》總結No.5——遞歸

一.分而治之 將原問題劃分為若干個規模較小而結構與原問題相同或相似的子問題&#xff0c;然后分別解決這些子問題&#xff0c;最后合并子問題的解&#xff0c;即可得到原問題的解&#xff0c;步驟抽象如下&#xff1a; 分解&#xff1a;將原問題分解為若干子問題解決&#x…

用VLM訓練實時計算機視覺模型

經過數十億個參數訓練的 AI 模型非常強大&#xff0c;但并不總是適合實時使用。但是&#xff0c;它們可以通過自動監督快速專用模型的標注來減少人力投入。 ? 如果你曾經構建過計算機視覺模型&#xff0c;就就會知道監督需要大量工作——人類花時間&#xff08;數小時或數天&a…

自動化測試全攻略:從入門到精通!

1、自動化測試專欄 隨著技術的發展和工作需求的增長&#xff0c;自動化測試已成為軟件質量保障體系中不可或缺的一環。 為了幫助廣大測試工程師、開發者和對自動化測試感興趣的讀者們更好地掌握這一技能&#xff0c;今年特別推出了全新的《自動化測試全攻略&#xff1a;從入門…

scratch繪制四個三角形 2024年6月中國電子學會 圖形化編程 scratch編程等級考試二級真題和答案解析

scratch繪制四個三角形 一、題目要求 2024年6月電子學會圖形化編程Scratch等級考試二級真題 1、準備工作 1.保留默認角色小貓; 2.添加背景Stars。 2、功能實現 1 .隱藏角色小貓&#xff0c;設置畫筆裙始位置為(0,0)&#xff0c;畫筆顏色為黃色&#xff0c;畫筆的粗細為5…

Scala Trait(特征)

Scala Trait(特征) Scala中的Trait是一種特殊的概念,它類似于Java中的接口,但提供了更多的功能。Trait允許我們定義一組方法,這些方法可以被子類實現,同時還可以包含方法的實現。這使得Trait既具有接口的靈活性,又具有抽象類的實用性。在本文中,我們將深入探討Scala Tra…

NET Core 中的空對象設計模式

介紹 一種稱為“空對象模式”的行為設計模式提供了一個對象來表示接口缺少的對象。在空對象會導致空引用異常的情況下&#xff0c;這是一種提供替代行為的方法。在本文中&#xff0c;我們將深入探討 C# 空對象模式&#xff0c;并逐步解決更復雜的情況。 空對象設計模式它是什…

k8s離線部署芋道源碼前端

目錄 概述 編譯Dockerfile 構建Dockerfilenginx.conf構建 k8s部署前端鏡像部署ingress 概述 本篇將對 k8s離線部署芋道源碼前端 進行詳細的說明&#xff0c;對如何構建 Dockerfile&#xff0c;如何整合 Nginx&#xff0c;如何整合 ingress 進行實踐。 相關文章&#xff1a;naco…

python 進階教程--PIL圖像處理

PIL圖像處理 1. Pillow庫簡介2. 圖像處理基礎3. 圖像操作4. 圖像增強5. 圖像處理進階6. 圖像繪制7. 圖像序列和動畫8. 圖像識別和特征提取9. 實戰項目10. 常見問題解答 1. Pillow庫簡介 PIL與Pillow的關系 PIL&#xff08;Python Imaging Library&#xff09;是一個提供圖像處…