因特尔的oneAPI提供了诸多针对于其CPU与GPU的运算效率优化扩展。本文尝试了Scikit-learn扩展的接口调用方法,并将该扩展应用在一个随机森林分类项目上,对比了使用前后的速度以及准确率表现。
接口调用
该接口调用十分简单,参照Installation — Intel(R) Extension for Scikit-learn* 2023.0.1 documentation的教程示例,在Windows系统上直接使用pip方法安装对应库即可。
pip install scikit-learn-intelex
完成安装后,只需在正常使用scikit-learn所提供的方法之前调用扩展,之后运算时会自动地进行效率优化(需注意该扩展仅在python3.9以上的版本可用)。调用方法如下:
from sklearnx import patch_sklearn
patch_sklearn()
扩展应用
本应用案例的母题来自2022年数维杯数学建模竞赛,题目提供了针对阿尔兹海默症的潜在或已患病人群的调查信息数据集,要求实现对患者患病程度的分类。本题可使用sklearn提供的随机森林预训练模型作为分类模型。分类算法的核心代码如下(以下代码中所使用的数据已经预处理):
from sklearn.ensemble import RandomForestClassifier
t0 = time()
classifier = RandomForestClassifier(n_estimators=50)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
t1 = round(time() - t0, 3)
from sklearn.metrics import classification_report
result1 = classification_report(y_test, y_pred)
result2 = accuracy_score(y_test,y_pred)
print (result1)
print("Accuracy:",result2)
print('time:',t1)
设置决策树的数目为5000,实际上并不需要这么多,当决策树数量到达一定值后,决策树数量的提升对分类效果的提升就会变得很有限(此前使用该模型时的决策树数目设置为50)。这个操作的主要目的是提供足够长的模型训练时间以供参考。其余参数为默认值。未使用扩展时,模型在训练集上的表现和时间占用情况如下:
应用扩展后,得到模型在训练集上的表现和时间占用情况如下:
可见,应用前后的准确率提升有限,但训练时间被大大降低,随机森林模型的时间优化在2~3倍左右。