说个实话,知乎专栏还是非常不错的
其实矩阵分解不能算作是一种预测算法,任何一个矩阵拿来就可以进行矩阵分解。
当分类器确定下来之后,最困难的事情就是交叉验证了。
说句实话,我整个实验就是在做验证。
因为模型都非常的简单。
半监督学习下的实验流程:(我以下所讲的均是半监督学习下的情况,不使用与有监督学习的情况。就想杨为泰学长说的那样,不同的情况下我们的处理方式不一样)
1.取的是所有的样本。
2.用留一法和五折交叉进行验证
留一法验证:
思路:对每一个样本点进行遍历。也就是说对网格中的每一个样本进行遍历。
将该样本作为测试集,网格中剩余的其他样本作为训练集。
但是因为我的预测模型的要求,我需要用到网格矩阵。但是原始网格中既包含了训练集,又包含了测试集,所以需要将网格中测试集的位置置为0,然后将置0之后的网格传进去,作为训练矩阵,最终得到一个分数矩阵。
然而,我们只是对测试集进行验证,所以这一次预测,我只是为了预测刚刚测试集对应位置的分数,所以我只提取这一个位置的分数。但是本次实验结果的测试集中仅仅有一个值,是无法通过阈值来绘制roc曲线的。因此需要将所有折计算完毕之后得到一个总的分数矩阵。这个矩阵就是打分矩阵
该打分矩阵中的每一个元素都对应着一次实验的训练集,他们所对应的真实值就是原本的训练矩阵。 通过这两个矩阵就可以绘制roc曲线,计算各项指标了。
以上是通过循环遍历来解决问题的。其实是可以有优化的地方。当测试集为0时,此时将测试集置0,得到的是一个跟原矩阵相同的矩阵。我们将这个矩阵作为训练矩阵,结果我们只提取了该位置的分数。对原矩阵中所有为0的位置,我们都是进行这样的操作,实际上我们都是在对原矩阵进行操作。所以我们只需要将原矩阵作为训练矩阵,只需要计算一次,就提取原矩阵中所有为0的位置的分数。大大的提高了效率
半监督五折交叉验证:
1.五折交叉验证的样本是取所有的样本吗?
答:是的。
2.半监督为什么不划分正负样本比例,而是仅仅对正样本进行平分五份?
答:半监督1代表已知标签,0代表未知标签。所以只需要对正样本进行划分。每一次将一部分正样本对应位置在训练矩阵中置为0,(注意此时训练矩阵中的0有两类,一类是我测试集置为0的,一类是本身就是0的)。得出来分数后,我取train_matrix中所有为0的位置作为预测值集合,用原来矩阵中对应位置的值作为真实值,进行模型评估。
在回答这个问题的时候,我去查了很多资料,说句实话,网上并没有非常好的东西。这就是为什么到现在老师还没有被替代的原因。只不过是学得快慢的问题。
网友评论