如何在Azure机器学习中构建集合分类器

938 阅读7分钟

绪论

本文是Azure机器学习系列文章的最新内容,即Azure机器学习的集合分类器。在这篇文章的讨论中,我们重点讨论了机器学习的数据清理特征选择技术。此外,我们还讨论了Azure机器学习中的几个机器学习任务,如分类聚类回归推荐系统时间序列异常检测。此外,我们还讨论了Azure机器学习服务中的AutoML功能。在AutoML技术中,我们已经确定了如何在AutoML中利用分类。这篇文章是我们之前讨论的分类技术的延伸。

从下图中可以看出,Azure机器学习中有很多两类分类技术。

two-class classification techniques that are available in Azure Machine Learning.

每个数据建模者都会有这样的问题:如何在这些可用的算法中选择最佳算法。在分类中,我们可以使用准确率、精确度、召回率、F1测量、ROC曲线来选择最佳分类技术。这意味着我们将通过比较评价参数来选择单一技术。

在集合分类器中,我们将研究如何使用多种分类技术进行预测,以便它能产生具有更高精确度的更好的模型,或者它们能避免过度拟合。这就相当于一个病人要找多个专科医生来诊断疾病,而不是依赖一个医生。

下图显示了集合分类的设计方式。

Ensemble classification diagram.

从上图可以看出,多个分类器被组合起来,以定义一个集合分类。

使用Azure机器学习构建标准分类器

让我们首先使用Azure机器学习建立标准分类,正如我们在之前的文章中所讨论的那样。 以下是为实现上述目标而建立的实验,这个实验可以在双类贝叶斯点机的分类器中找到。

Standard Classification Model in Azure Machine Learning.

让我们快速了解一下如何进行配置以构建上述分类器。首先,我们选择了本系列文章中一直在使用的Adventureworks数据集。然后,我们使用 "选择数据集中的列 ",删除了不必要的列,如姓名和地址,因为这些列不会影响预测结果。然后,使用 "规范化数据 "控件,用MinMax转换方法对工资和年龄列进行了规范化。接下来,使用编辑元数据(Edit Metadata)控件来表明CustomerKey应该从分类器特征中删除,因为CustomerKey对分类没有贡献,但我们需要Customer Key来加入数据集。

然后将数据按70/30的比例分割,以便进行训练和测试。然后使用双类分类技术的训练模型。然后,Score模型Evaluate模型控件被用来衡量所建模型的性能,以下是所建模型的评估参数。

Evaluation parameters for the built models.

在Azure机器学习中配置集合分类器

让我们看看如何在Azure机器学习中把标准分类扩展到Ensemble分类器。在我们讨论这个配置的细节之前,你可以从Ensemble Classification中查看或下载这个实验

下图显示了Azure机器学习中集合分类器的复杂布局。 Experiment for Ensemble Classifiers in Azure Machine Learning

请注意,由于实验的复杂性,实验的布局可能不可见,所以你可能要从Azure AI Gallery中查看实验。

以下是我们在Azure机器学习中用于集合分类器的Azure机器学习控件。

控件

用途和说明

数据集

这个控件将从数据集开始,并将使用冒险数据集。

选择数据集中的列

这个控件将用于从现有的数据集中选择列,因为所有的属性都不是下一层次所需要的。

归一化数据

使用MinMax归一化技术来归一化客户的年收入和年龄。

编辑元数据

这个控件的使用有两个原因。

  1. 从分类变量中删除CustomerKey。
  2. 重命名属性以提高可用性。

分割数据

由于这是一种分类技术,我们需要两个独立的数据集来训练和测试模型。 这个控件用于以70/30的分布来分割训练/测试数据集的数据。

双类提升决策树

这五种分类算法用于Azure机器学习中的集合分类器。

双类神经网络

双类支持向量机

二类逻辑回归

双类决策丛林

培训模型

五种控制的Train模型被用来训练上述分类技术的数据集。

分数模型

使用得分模型对每个分类算法进行测试。

评估模型

评估模型被用来评估每种分类技术的准确性。

连接数据

连接数据控制被用来连接来自五个不同分类训练模型的数据流。

应用SQL转换

SQL查询被用来得出集合分类的分类结果。本实验使用了其中两个控件来定义两种不同方法的分类,即投票和称重。

执行Python脚本

我们写了一个Python脚本来计算不同的分类评估参数,如准确率、精确度、召回率和集合分类的F1度量。

现在让我们看看如何在Azure机器学习中为合集分类器创建一个实验。在这个实验中,使用了五种两类分类技术。五个配置中的一个配置(双类提升决策树)如下图所示。

Classfication using Two-Class Boosted Decision Tree

上述数据流在数据集中选择列之后的输出如下图所示。

Prediction of Bike Buyer using Two-Class Boosted Decision Tree technqiue.

CustomerKey是识别客户的关键,Bike buyer属性是自行车买家的实际值。 DT_Labels表示决策树对自行车买家的预测,DT_Probs表示预测的概率。

这是对其他四种两类分类技术进行的,即两类神经网络、两类支持向量机、两类逻辑回归和两类决策丛林。在完成所有五种分类技术的预测后,使用连接数据控制将所有技术连接起来,输出结果如下。

Prediction of Bike buyer using different classification techniques.

下一步是在五种分类完成后应用合集技术。

定义合集分类器的第一个技术是投票技术。这意味着,在五个分类中,最终的分类将取决于最大的票数。例如,在五个分类中,如果有三个或更多的分类被列为自行车买家的是,那么集合分类将是是。

下一个技术是根据每个技术的权重来定义集合分类。如下表所示,根据准确性分配不同的权重。

技术

准确率

权重

双类提升决策树

0.80

0.23

双类神经网络

0.75

0.21

双类支持向量机

0.62

0.17

双类逻辑回归

0.65

0.18

双类决策丛林

0.76

0.21

下图是这个实验的最后部分。

The final steps of the Ensemble Classifiers in Azure Machine Learning experiment.

两个Apply SQL Transformation控件都是用来将现有数值转换为集合分类器的。第一个查询是用于投票,第二个查询是用于加权技术。

SELECT CustomerKey
	,BikeBuyer
	,(DT_Labels + NN_Labels + SVM_Labels + LR_Labels + DJ_Labels) / 5 AS Pred
	,(DT_Prob + NN_Prob + SVM_Prob + LR_Prob + DJ_Prob) / 5 AS Prob
FROM t1;
 
SELECT CustomerKey
	,BikeBuyer
	,CASE 
		WHEN ((DT_Labels * 0.23) + (NN_Labels * 0.21) + (SVM_Labels * 0.17) + (LR_Labels * 0.18) + (DJ_Labels * 0.21)) >= 0.5
			THEN 1
		ELSE 0
		END AS Pred
	,((DT_Prob * 0.23) + (NN_Prob * 0.21) + (SVM_Prob * 0.17) + (LR_Prob * .18) + (DJ_Prob * .21)) AS Prob
FROM t1;

集合分类被定义后,下一个选项是在下面列出的python脚本中计算不同的分类评估参数。

import pandas as pd
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
 
 
def azureml_main(dataframe1 = None, dataframe2 = None):
    acc1 = accuracy_score(dataframe1["BikeBuyer"], dataframe1["Pred"])
    pre1 = precision_score(dataframe1["BikeBuyer"], dataframe1["Pred"])
    rec1 = recall_score(dataframe1["BikeBuyer"], dataframe1["Pred"])
    f11 = f1_score(dataframe1["BikeBuyer"], dataframe1["Pred"])
    
    acc2 = accuracy_score(dataframe1["BikeBuyer"], dataframe2["Pred"])
    pre2 = precision_score(dataframe1["BikeBuyer"], dataframe2["Pred"])
    rec2 = recall_score(dataframe1["BikeBuyer"], dataframe2["Pred"])
    f12 = f1_score(dataframe1["BikeBuyer"], dataframe2["Pred"])
    data = [["Voted",acc1,pre1,rec1,f11],["Weighted",acc2,pre2,rec2,f12]]
    df = pd.DataFrame(data,columns=['Type','Accuracy','Precision','Recall','F1'])
    return df,

以下是不同集合分类技术的评估参数。

Evaluation parameters for the different Ensemble Classification techniques

总结

Azure机器学习中的集合分类器是一种改进的分类技术,它结合了多种分类方法。这种技术将引入更高的准确性,并避免分类中的过度拟合。本文介绍了投票和加权的集合分类器技术。