机器学习入门笔记
#ai夏令营#datawhale#夏令营
分子性质AI预测挑战赛 算法挑战大赛
day 1:
# 1. 导入需要用到的相关库
# 导入 pandas 库,用于数据处理和分析
import pandas as pd
# 导入 numpy 库,用于科学计算和多维数组操作
import numpy as np
# 从 lightgbm 模块中导入 LGBMClassifier 类
from lightgbm import LGBMClassifier
# 2. 读取训练集和测试集
# 使用 read_excel() 函数从文件中读取训练集数据,文件名为 'traindata-new.xlsx'
train = pd.read_excel('./data/data280993/traindata-new.xlsx')
# 使用 read_excel() 函数从文件中读取测试集数据,文件名为 'testdata-new.xlsx'
test = pd.read_excel('./data/data280993/testdata-new.xlsx')
# 3 特征工程
# 3.1 test数据不包含 DC50 (nM) 和 Dmax (%),将train数据中的DC50 (nM) 和 Dmax (%)删除
train = train.drop(['DC50 (nM)', 'Dmax (%)'], axis=1)
# 3.2 将object类型的数据进行目标编码处理
for col in train.columns[2:]:
if train[col].dtype == object or test[col].dtype == object:
train[col] = train[col].isnull()
test[col] = test[col].isnull()
# 4. 加载决策树模型进行训练
model = LGBMClassifier(verbosity=-1)
model.fit(train.iloc[:, 2:].values, train['Label'])
pred = model.predict(test.iloc[:, 1:].values, )
# 5. 保存结果文件到本地
pd.DataFrame(
{
'uuid': test['uuid'],
'Label': pred
}
).to_csv('submit.csv', index=None)
day 2:
from rdkit import Chem
from rdkit.Chem import AllChem, Draw
# SMILES字符串
smiles = "NC1=NC=NC2=C1C(C1=CC=C(OC3=CC=CC=C3)C=C1)=NN2[C@@H]1CCCN(C(=O)C2=CN(CCOCCOCCOCCCC3=CC=CC4=C3CN(C3CCC(=O)NC3=O)C4=O)N=N2)C1"
# 将SMILES转换为分子对象
mol = Chem.MolFromSmiles(smiles)
# 检查分子是否有效
if mol is None:
print("The SMILES string is invalid.")
else:
print("The molecule was parsed successfully.")
# 绘制分子结构
molDrawer = Draw.MolToMPL(mol)
molDrawer.show()
-
数据集包含了多个字段,如
uuid
(唯一标识符)、Label
(降解能力的标签,0表示降解能力较差,1表示降解能力好)、Uniprot
、Target
、E3 ligase
、PDB
等,这些都是与PROTACs分子相关的信息。 -
还包括了降解能力相关的数值指标,如
DC50
(半数降解浓度)、Dmax
(最大降解效率)、IC50
(半抑制浓度)、EC50
(半有效浓度)等。 -
还包括了与分子物理化学性质相关的字段,如
Molecular Weight
(分子量)、Exact Mass
(精确质量)、XLogP3
(预测的脂水分配系数)等。
day 3:
from catboost import CatBoostClassifier, Pool
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
假设X是特征数据,y是目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
创建CatBoost模型
model = CatBoostClassifier(
iterations=100,
learning_rate=0.1,
depth=6,
loss_function='Logloss',
random_seed=42,
verbose=False
)
训练模型
model.fit(X_train, y_train)
预测测试数据
y_pred = model.predict(X_test)
评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
交叉验证是在机器学习建立模型和验证模型参数时常用的办法,一般被用于评估一个机器学习模型的表现。更多的情况下,我们也用交叉验证来进行模型选择(model selection)。
交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。
那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。