当前位置:  开发笔记 > 人工智能 > 正文

机器学习理念:将模型应用于有偏见的数据

如何解决《机器学习理念:将模型应用于有偏见的数据》经验,为你挑选了1个好方法。

我有机器学习问题,我不知道是否有理论上的解决方案.

我已经标记了数据(我们称之为数据集D1)来构建一个随机的森林分类模型并且表现良好.

现在我的主要兴趣是将此模型应用于另一个具有零标签的数据集D2,这意味着我无法将其用于训练.衡量D2性能的唯一方法是检查从中预测的类的比例.

问题:与D1相比,D2是偏斜的(功能不具有相同的均值或适合相同的分布).因此,应用于D2的模型会给一个类带来严重偏差的结果.我知道这是正常的,因为大多数D2类似于D1的一小部分.

但有没有办法纠正这种偏斜?我从问题的本质上知道预测的班级比例应该不那么偏颇.我已经尝试了规范化,但它并没有真正帮助.

我觉得我没有直接思考:3



1> CAFEBABE..:

咄咄逼人的问题.我对此的回答有三个部分.

免责声明:没有免费午餐.因此,如果不检查实际测试集标签上的性能,您永远无法确定.最糟糕的情况是,你的问题有一个概念漂移,这使得无法预测你的目标类.但是,有一些解决方案可以提供相当不错的结果

用于表示法:

这些特征由X目标变量by Y和学习的分类器表示f(X) |-> Y.Xin D1by 的分布P(X|D1)(滥用符号)

Testset中的类分布

你"假设人们可以在预测变量中使用分布("检查从中预测的类的比例.").但这仅仅是一个指示.我在工业中建立分类器来预测机器会失败(预测性维护).有很多工程师试图使我的输入数据偏斜,这使得机器生成数据更可靠.但是,这不是问题,因为一个类基本上消失了.但是,分类器仍然有效.

关于"如何修复"测试集上目标标签中的分布问题,有一种非常简单的方法.该想法基本上是根据预测的标签对所有测试实例进行分类,并根据期望的目标变量分布对数据点进行采样(替换).然后,您可以尝试检查功能上的分布,X但这不会告诉您太多.

偏斜是一个问题吗?事实上,它可以作为一个典型的分类器试图最小化accuracyF1措施或其他一些统计特性.如果您事先知道,D2您可以提供成本函数,从而最大限度地降低此分配下的成本.这些成本可以用于重新采样其他答案中提到的训练数据,但是,一些学习算法也有更复杂的技术来合并这些信息.

异常值检测

一个问题是,您是否可以检测到输入中的某些内容已发生变化X.这非常重要,因为这可能表明您输入了错误的数据.您可以应用相当简单的测试,例如所有维度的均值和分布.但是,这会忽略变量之间的依赖关系.

对于以下两个插图我使用虹膜数据集 在此输入图像描述

我想到了两种技术,可以让您检测到数据中的某些内容已经发生了变化.第一种技术依赖于PCA转换.仅用于数字,但对于分类特征有类似的想法.PCA允许您将输入数据转换为较低维度的空间.这是 PCA(X,t)=PCA([X1,...,Xn],t)=[Cond1,...,Condm]=Cond一个投影,t 通常n<这种变换仍然是可逆的,PCA^1(Cond,t) = X'因此误差MSE(X,X')很小.要检测问题,您可以监控此错误,一旦增加,您可以说您不信任您的预测.

如果我从所有数据建立一个PCA versicolorvirginica和重建二维绘图的误差(PCA所有光圈尺寸),我得到

在此输入图像描述

然而,如果杂色是新数据,则结果不那么令人信服.

在此输入图像描述

然而,无论如何,PCA(或类似的smth)都是为数值数据完成的,因此,它可以提供良好的指示而没有太多的开销.

我所知道的第二种技术是基于所谓的一类支持向量机.普通支持向量机将构建一个试图分离两个目标类的分类器Y.一类支持向量机试图将看不见的数据分开.如果使用支持向量机进行分类,使用这种技术是相当有吸引力的.你基本上会得到两个分类.第一个是目标数据,第二个是先前是否看过类似数据.

如果我建立在一个类分类setosa,并virginca通过新颖性和颜色我得到如下图:

在此输入图像描述

可以看出,数据versicolor似乎已经不再可疑了.在那种情况下,它是一个新的类.然而,如果我们假设这些是弗吉尼亚的实例,它们就会危险地靠近超平面漂移.

半监督学习和转导

解决你的根本问题.转导学习的概念,半监督学习的特例可能是咄咄逼人的.在Semi监督学习中,训练集由两部分组成.标记数据和未标记数据.Semi-sup-l使用所有这些数据来构建分类器.转换学习是一种特殊情况,其中未标记的数据是您的测试数据D2.Vapnik给出了这样的想法:"当你想解决一个更简单的问题时,不要试图解决一个更复杂的问题[为所有可能的数据建立一个分类器] [预测标签D2]

APENDIX

RCODE用于绘图

ggplot(iris)+aes(x=Petal.Width,y=Petal.Length,color=Species)+geom_point()+stat_ellipse()
library(e1071)
iris[iris$Species %in% c("virginica","setosa"),]

ocl <- svm(iris[iris$Species %in% c("virginica","setosa"),3:4],type="one-classification")
coloring <- predict(ocl,iris[,3:4],decision.values=TRUE)

ggplot(iris)+aes(x=Petal.Width,y=Petal.Length,color=coloring)+geom_point()+stat_ellipse()
ggplot(iris)+aes(x=Petal.Width,y=Petal.Length)+geom_point(color=rgb(red=0.8+0.1*attr(coloring,"decision.values"),green=rep(0,150),blue=1-(0.8+0.1*attr(coloring,"decision.values"))))

pca <- prcomp(iris[,3:4])

#pca <- prcomp(iris[iris$Species %in% c("virginica","setosa"),1:4], retx = TRUE,  scale = TRUE)
pca <- prcomp(iris[iris$Species %in% c("virginica","setosa"),1:4], retx = TRUE,  scale = TRUE,tol=0.2)
  pca <- prcomp(iris[iris$Species %in% c("virginica","versicolor"),1:4], retx = TRUE,  scale = TRUE,tol=0.4)
  predicted <-predict(pca,iris[,1:4])
  inverted <- t(t(predicted %*% t(pca$rotation)) * pca$scale + pca$center)
  ggplot(inverted[,3:4]-iris[,3:4])+aes(x=Petal.Width,y=Petal.Length,color=iris$
                                    Species)+geom_point()+stat_ellipse()

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有