一、跑通baseline
在下跑通baseline的关键在于以下两点:
1.在官网下载数据集存放在方便调用的文件夹中,我一般放在桌面。
2.针对代码中的相关库的安装以及在最开始读取csv文件的相关路径更改。
在baseline中最大的收获毫无疑问是TFIDF与CATBOOST。
TFIDF技术作为一种用于信息检索与文本挖掘的常用加权技术,它的主要思想是:如果某个词语在一篇文章中出现的频率高(Term Frequency,TF),并且在其他文章中很少出现(Inverse Document Frequency,IDF),则认为这个词语具有很好的类别区分能力,对这篇文章的内容有很好的指示作用。
简而言之,一种自动检索并计算特征值权重的技术。
简单的代码应用:
# 将SMILES转换为分子对象列表,并转换为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))
# 使用TfidfVectorizer计算TF-IDF
tfidf = TfidfVectorizer(max_df = 0.9, min_df = 1, sublinear_tf = True) res = tfidf.fit_transform(data['smiles_list'])
# 将结果转为dataframe格式
tfidf_df = pd.DataFrame(res.toarray()) tfidf_df.columns = [f'smiles_tfidf_{i}' for i in range(tfidf_df.shape[1])]
# 按列合并到data数据
data = pd.concat([data, tfidf_df], axis=1)
至于CATBOOST,就是利用其中包含的CatBoostClassifier
或CatBoostRegressor
进行分类或预测的相关机器学习任务。简单代码介绍:
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}')
重要的是CatBoostClassifier中的相关参数的含义和设置。,则上文加粗部分。
二、构思idea,改进baseline
对比之前的baseline,本次采用的baseline有两大重要改变,也是前文提到的重要收获,TFIDF技术和CATBOOST,二者相辅相成,在进行CATBOOST调用时,TFIDF是建造CATBoost相关的分类器模型的前提。而CatBoost使用梯度提升决策树(GBDT)作为基学习器,使用基于GPU和CPU的并行计算,可以高效处理大规模数据集。
提起优化基于GBDT的baseline,我们想到以下几个重点:1.调整参数。2.使用GPU调动更好的资源。3.在数据预处理上继续下功夫。
针对第一种方法,我们可调超参数包括学习率(learning_rate
)、迭代次数(iterations
)、树的深度(depth
)、L2正则化参数(l2_leaf_reg
)并观察score_mean判断修改后模型的性能。
最终得到一定优化结果。根据F1_score的判分标准也提升部分。
对于第二个方法,受限于电脑GPU配置,跑不了,后面开个虚拟机在LINUX试一下好像说可以。
对于第三个,本次BASELINE所采用的TFIDF技术是数据预处理的重要板块,想要对BASELINE进行优化,对TFIDF进行优化是必须的。对于TFIDF优化最简单的也是调整其相关参数。
调整的参数
一些输出结果
三、学习记录
通过本次学习,最大的收获是学会使用CATBOOST库进行机器学习任务。且学会利用网格模型等模型对参数进行调整。此外,也收获到了一个数据处理赋权的好东西TFIDF。