赞
踩
(1)首先需要将多类别转化为两类别,positive和negative,论文"Positive and Unlabeled Learning with Label Disambiguation"中的多类别转两类别是将其中几个类别样本看作是positive(在本文中是先分开,之后处理完之后再训练模型之前加百分之p的正样本作为unlabeled samples),剩余的类别样本看作是negative。似乎是相似的类别转化为同一个类别!
(2)需要对数据进行预处理,即归一化,xi=x1/(x_max-x_min)即可。
(3)再从positive样本中取出部分与negative一起构成unlabeled data即可成功转化为positive 和negative样本。
breast数据集699instance,但是有16instance数据缺失,故只用了683instance,9attribute+1个class,类别只有两类,2表示良性,4表示恶性,在实验中,将恶性病视为是阳性样本,可以轻易获得,但是良性样本为无标记样本,有一定实际意义,其余数据均是如此操作。
注意,liblinear就是个线性分类器,得到的W就是每一个维度的权重,predict预测得到的就是预测的值跟真实值的区别。(这里predict用在衡量模型在positive数据上的正确度)
W = model.w; %dateUN数据中每一个维度的权重。
%注意维度问题:W是1*N(N为population中每个粒子的维度,即unlabeled数目)
%dataUN是N*M(N表示每个样本的维度,M是样本个个数),最后就得到了M个样本的得分。
%W不就是线性拟合得出的权重吗!!!
evaluation1(i,:) = W*dataUN;% the scores of every unlabeled datas.
上述的MATLAB代码是计算population中第i个个体的P_UAR值的第一步,需要评价出第i个体中每一维度也就是unlabeled每个个体的得分。第二步:让unlabeled个体按分数值排序,计算出分数值大的负样本后面的正样本总数(这个值越小越好,因为分数值越大越有可能为正样本)
注意与线性回归、逻辑回归区分开,在这里是直接通过模型可以预测样本类别,二分类以及多分类等等。
下面为一个三分类的栗子(PS:这里的W不好,预测结果灰常的不准确。)
W*x+b--->f
(1)这里的W是权重,对于二分类器而言只需要一个输出即可,可以设置阈值直接判断属于哪个类,但是对于多分类器而言,有N个分类器最后就要输出一个1*N的向量,对应的最大值的那个类别就是最终预测出的类别。而W中每一个列向量就是一个分类器,对应第i个分类的分类器。
(2)对于样本数很多,需要预测的数据也很多时,线性分类器要比KNN好很多,KNN每预测
一个就需要计算全部训练样本里评价样本最近的K个样本,计算量很大,但是对于线性回归算法则不需要,经过训练得出分类器之后就可以不再管训练样本了,之后只要输入待测样本,进行向量计算即可。
是基于Similarity-Based Approach for Positive and Unlabelled Learning论文中的基于全局相似度的权重方法推出的,只不过在那篇论文中计算距离使用的余玄相似度cosine similarity,而本篇论文是也是计算PU相似性,但是只计算了跟正样本的相似性,这里的相似性也是权重。在initiate population中,先随机生成第i个样本中1的维度的最大个数m(选择允许存在重复!!!),然后for循环m次,每次从中选出两个维度,PU相似度大的那个维度值设置为1即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。