使用daal4py扩展机器学习算法

曾经遇到过机器学习算法的每个人都知道,即​​使对大量数据的简单ML模型也可以在不可接受的长时间内进行训练。恢复依赖关系,对对象进行分类的任务变成了数分钟甚至数小时的网络培训。



本文将通过使用Scikit-Learn库中的算法示例演示如何通过使用daal4py库的加速计算来扩展神经网络的学习功能。



介绍



Scikit-Learn提供了一套可靠的工具来解决机器学习问题。分类,回归,聚类... sklearn具有针对所有这些的算法。我们将使用其中一些算法。



在2019年,daal4py库将英特尔数据分析加速库(DAAL)的基础上形成。英特尔提出了一种与预测数据分析直接相关的解决方案,由于其性能和易用性,该解决方案在同行中具有明显的优势。





由于基于Intel DAAL的加速计算(特别是矩阵转换),Daal4py技术可以提高经典sklearn方法的性能



实作



让我们看一下关于测试问题的daal4py.sklearn方法。



在kaggle上发布的数据集:心血管疾病数据集

该任务是创建一个能够预测人类心血管疾病是否存在的模型。



此任务是分类任务,因此决定使用LogisticRegression,RandonForestClassifier和KNeighborsClassifier模型中的ensamble,并通过GridSearchCV参数拟合工具Scikit-Learn实施。



首先,让我们使用相同的参数训练两种算法的实现,并进行比较:



:



from sklearn.model_selection import GridSearchCV

# Best Logistic Regression
def get_best_clf_lr(name, clf, params):
    start = timer()
    grid_clf = GridSearchCV(estimator=clf, param_grid=params, n_jobs=-1)
    grid_clf.fit(X_train, y_train)
    end = timer()
    learning_time = end - start
    print(learning_time)

    return name, learning_time, grid_clf.best_estimator_

# Best Random Forest Classifier
def get_best_clf_rf(name, clf, params):
    start = timer()
    grid_clf = GridSearchCV(estimator=clf, param_grid=params, n_jobs=-1, cv=5)
    grid_clf.fit(X_train, y_train)
    end = timer()
    learning_time = end - start
    print(learning_time)

    return name, learning_time, grid_clf.best_estimator_

# Best K Neighbors Classifier
def get_best_clf_knn(name, clf, params):
    start = timer()
    grid_clf = GridSearchCV(estimator=clf, param_grid=params, n_jobs=-1)
    grid_clf.fit(X_train, y_train)
    end = timer()
    learning_time = end - start
    print(learning_time)

    return name, learning_time, grid_clf.best_estimator_


, , , . sklearn daal4py . RandomForestClassifier :



from sklearn.ensemble import RandomForestClassifier as RandomForestClassifier_skl
from daal4py.sklearn import ensemble

# Random Forest Classifier

params_RF = {
    'n_estimators': [1, 3, 5, 7, 10],
    'max_depth': [3, 5, 7, 9, 11, 13, 15],
    'min_samples_leaf': [2, 4, 6, 8],
    'min_samples_split': [2, 4, 6, 8, 10]
}

name, lrn_time, model = get_best_clf_lr("RF_sklearn", RandomForestClassifier_skl(random_state = 42), params_RF)
learn_data_skl.append([name, model, lrn_time])

name, lrn_time, model = get_best_clf_lr("RF_daal4py", ensemble.RandomForestClassifier(random_state = 42), params_RF)
learn_data_daal.append([name, model, lrn_time])


. KNeigborsClassifier, 45. , , , - . 1.5 — 2 .



, RandomForestClassifier , 34% .



ensamble .

ROC_AUC score.



, feature engineering, , roc_auc_score 0.74 .





快速矩阵转换库daal4py可以加速机器学习模型并扩展学习功能,而不会浪费时间。在此测试问题上,可以增加枚举参数的数量,并且可以将训练样本增加34%,而无需更改执行时间。



GitHub

数据集

Daal4py




All Articles