机器学习应用示例:多输出-多分类问题

本文使用的数据是一个多输出(Multioutput)问题,每个数据有9个属性的输出,每个输出下又细分为多个类别(Multiclass),需要预测的是每个数据在这9个输出下的具体类别(注:数据在每个输出下只能有一个类别)。

详细的数据介绍和问题描述可参考此链接


一、数据拆分

1、建立从数据中拆分测试集的函数

该函数使用数据的二维标签矩阵[shape: (数据数,9个属性的类别总数)],矩阵中的每个值为0或1。该函数保证每个属性的每个类别下都有一定数量的数据分入测试集中。

2、建立测试集的评价标准

3、拆分训练集和测试集



二、特征工程

1、将每个数据的所有文本特征整合成一个字符串,提取所有字符串的一元和二元词组,计算每个字符串中各一元和二元词组出现的次数

2、使用卡方检验对新生成的文本特征进行选择,卡方检验的步骤如下:

  • 计算观测矩阵OO_{ij}表示具有第i个标签的所有数据的第j个特征之和
  • 计算期望矩阵EE_{ij}表示若按照第i个标签在数据中所占比例进行分配,第i个标签对应的第j个特征之和
  • 计算每个特征对应的卡方统计量,在该特征与数据标签无关的假设条件下该统计量服从自由度为(总标签数-1)的卡方分布
  • 特征对应的卡方统计量越大,该特征在模型训练和预测时就越重要

3、合并数值和文本特征,并生成新的特征,建立数据管道



三、建立分类模型

该问题共有9个输出,每个输出都是一个多分类问题,共计有104个类别。可以使用三种模型来解决这个问题:

1、将其看作104个二分类问题,对每个类别(数据属于该类别则标签记为1,不属于记为0)分别进行训练,这里以Logistic算法为例进行说明。

2、将其看作9个多分类问题,对每个输出分别进行训练,这里以随机森林算法为例。这里随机森林的参数只是随意设置的,要使算法取得更好的效果还需要进一步优化这些超参数。

3、使用可以直接处理多输出-多分类问题的算法进行训练,这里仍以随机森林算法为例。需要注意的是随机森林直接解决多输出-多分类问题时与随机森林解决多分类问题时算法细节是不同的,最主要的区别在于构建决策树时分裂标准不一样,多输出-多分类问题需要计算分裂前后每个输出下的gini系数,再对所有输出下的gini系数进行平均,选取使得该平均值减小最多的分裂方式,具体可参考此链接

Leave a Comment

Your email address will not be published. Required fields are marked *