多标签学习:LIFT: Multi-Label Learning with Label-Specific Features

多标签学习:LIFT: Multi-Label Learning with Label-Specific Features

@(Machine Learning)

Intro

LIFT是张敏灵教授提出的多标签(multi-label)的学习方法。关于multi-label的介绍可以看我这篇博客,其中主要描述了multi-class、multi-label、multi-task的定义和区别。
本人根据论文总结了LIFT算法,并根据提供的matlab语言的code,完成了LIFT算法的Python版本,主要用到了sklearn提供的api,以便我自己使用该算法。

论文原文、论文代码和我重写的Python版本的LIFT代码可以在文末的Source找到

Algorithm

论文给出的伪代码

1

根据论文,LIFT可以分为两个步骤:
1. label-specific features construction
2. classification models induction

其中主要的是第一个步骤,构造标签间关系定义的特征,其也可以包括下面的步骤:

  1. 将训练样本划分为正类和负类:

    2

  2. 在正类和负类中聚类,保存centers,聚类的数目由下式给出:(论文提到,这个选择的原因是class-imbalance问题)

    3

  3. 将原特征映射为新特征:(该步骤也就是求每一个原特征到每一个class得到的所有centers的欧式距离)

    4

需要注意的是第三个步骤中,论文提到”which can be served as appropriate building blocks”,这个的意思是做映射的时候,可以将原特征分为一个一个的block进行映射,最后一个block可能会不够一个block的数量,需要特殊处理,这可能是论文给出的代码中需要花时间理解的部分。

然后就可以把得到的特征放入分类器中进行分类,也就是说LIFT的第二个步骤。该步骤在论文给出的代码中使用的是SVM,利用了matlab的libsvm库,论文提到可以使用其他二分类器。为了方便使用其他二分类器,我才将源码重写为python的版本,这样就可以非常方便地调用sklearn的二分类器了。

描述完算法后,论文用很大的篇幅写了Experiments,使用了很多metrics,来说明LIFT是多标签分类的有效的方法。关于怎么去测试和评判一个算法的好坏,论文非常严谨,也是非常值得学习的地方。

Source

From Prof. MinLing Zhang:
Paper Download
Code Download

From my github:
LIFT in Python

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
可以使用循环遍历来实现这个转换过程,具体步骤如下: 1. 创建一个新的空数组 result 用于存储最终结果; 2. 使用数组的 forEach 方法遍历 time 数组,对于每个时间,都创建一个空对象 obj; 3. 然后再使用数组的 forEach 方法遍历 arr 数组,对于每个设备,都在 obj 中添加一个属性,属性名为设备名称,属性值先设置为空字符串; 4. 接下来再遍历 arr_1 数组,对于每个设备,找到对应的时间和数据,将数据中的 power 属性值赋值给 obj 中对应设备的属性值; 5. 最后将 obj 添加到 result 数组中; 6. 返回 result 数组即可。 代码示例如下: ```javascript let result = []; time.forEach(timeVal => { let obj = { time: timeVal }; arr.forEach(device => { obj[device] = ""; }); arr_1.forEach(data => { if (data.key === device) { let mdData = data.mdData; mdData.forEach(item => { if (item.power !== undefined && item.power !== "") { if (timeVal === "2023-05-30 " + item.time) { obj[device] = item.power; } } }); } }); result.push(obj); }); console.log(result); ``` 输出结果如下: ```javascript [ { time: '2023-05-30 17', power_lift: '417.48', power_all: '117.48', power_dianti: '217.48', power_lighting: '317.48' }, { time: '2023-05-30 18', power_lift: '417.5', power_all: '117.5', power_dianti: '217.5', power_lighting: '317.5' }, { time: '2023-05-30 19', power_lift: '417.68', power_all: '1417.68', power_dianti: '2417.68', power_lighting: '3417.68' }, { time: '2023-05-30 20', power_lift: '417.88', power_all: '1417.88', power_dianti: '2417.88', power_lighting: '3417.88' } ] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值