- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个机器学习问题,我不知道是否有理论上的解决方案。
我有 标记 数据(我们称之为数据集 D1 )来构建随机森林分类模型并且它表现良好。
现在我的主要兴趣是将此模型应用于另一个数据集 D2 它的标签为零,这意味着我不能将它用于训练。在 上衡量性能的唯一方法D2 是检查从中预测的类的比例。
问题: D2 与 相比偏斜D1 (特征不具有相同的均值或拟合相同的分布)。因此,该模型适用于 D2 给一个类(class)的结果严重倾斜。我知道这是正常的,因为大多数 D2 类似于 的一个小子集D1 .
但是有没有办法纠正这种偏斜?我从我的问题的性质知道,预测的类(class)比例应该不那么有偏见。我试过规范化,但它并没有真正的帮助。
我觉得我没有直接思考:3
最佳答案
令人紧张的问题。我的回答分为三个部分。
免责声明:天下没有免费的午餐。因此,如果不检查真实测试集标签上的性能,您永远无法确定。最坏的情况是,您的问题中存在概念漂移,从而无法预测您的目标类别。但是,有一些解决方案可以提供非常好的结果
对于符号:
特征由 X
表示目标变量由 Y
和由f(X) |-> Y
学习的分类器. X
的分布在 D1
来自 P(X|D1)
(有点滥用符号)
测试集中的类分布
您“假设可以使用预测变量中的分布(“检查从中预测的类的比例。”)。然而,这只能作为一个指示。我正在行业中构建分类器来预测机器将失败(预测性维护)。有很多工程师试图使我的输入数据倾斜,这使产生数据的机器更可靠。但是,这不是问题,因为一个类基本上消失了。但是,分类器仍然有效.
关于“如何修复”测试集上目标标签中的分布的问题,有一个非常简单的方法。这个想法基本上是根据预测的标签对所有测试实例进行分类,并根据所需的目标变量分布对数据点进行采样(替换)。然后,您可以尝试检查特征 X
的分布情况。但这不会告诉你太多。
偏度可能是个问题吗?实际上,作为分类器,它通常可以尝试最小化 accuracy
的 F1
度量或其他一些统计属性。如果您事先知道 D2
中的分布你可以提供一个成本函数来最小化这个分布下的成本。这些成本可用于对另一个答案中提到的训练数据进行重新采样,但是,一些学习算法也有更复杂的技术来合并这些信息。
异常值检测
一个问题是您是否可以检测到输入 X
中的某些内容发生了变化。 .这非常重要,因为这可能表明您拥有错误的数据。您可以应用相当简单的测试,例如所有维度的均值和分布。但是,这忽略了变量之间的依赖关系。
对于以下两个插图,我使用的是 iris 数据集
我想到了两种技术,它们可以让您检测数据中的某些内容发生了变化。第一种技术依赖于 PCA 转换。仅用于数值,但对于分类特征也有类似的想法。 PCA 允许您将输入数据转换为低维空间。这是PCA(X,t)=PCA([X1,...,Xn],t)=[Cond1,...,Condm]=Cond
带投影t
通常用 n<<m
这种转换仍然是可逆的,使得 PCA^1(Cond,t) = X'
和错误 MSE(X,X')
是小。要检测问题,您可以监控此错误,一旦错误增加,您就可以说您不相信自己的预测。
如果我对来自 versicolor
的所有数据构建 PCA和 virginica
并绘制重建二维(所有虹膜维度上的PCA)的误差,我得到
然而,如果 versicolor 是新数据,结果就不那么令人信服了。
然而,无论如何,PCA(或类似的)是针对数值数据完成的,因此,它可以在没有太多开销的情况下给出很好的指示。
我知道的第二种技术是基于所谓的一类支持向量机。正常的支持向量机将构建一个分类器来尝试分离两个目标类 Y
.一类支持向量机试图将可见数据与不可见数据分开。如果您使用支持向量机进行分类,那么使用这种技术是相当有吸引力的。你基本上会得到两个分类。第一个表示目标数据,第二个表示之前是否看过类似的数据。
如果我在 setosa
上建立一个单级分类器和 virginca
和新奇颜色我得到以下图表:
可以看出数据来自versicolor
似乎戒烟了。在这种情况下,它是一个新类。然而,如果我们假设这些是 virginica 的实例,它们正在危险地靠近超平面。
半监督学习和转导
解决您的根本问题。 Transductive Learning 的想法,半监督学习的一个特例,可能很吸引人。在半监督学习中,训练集由两部分组成。标记数据和未标记数据。 Semi-sup-l 使用所有这些数据来构建分类器。转导学习是一种特殊情况,其中未标记的数据是您的测试数据 D2
. Vapnik 给出的想法是“当你想解决一个更简单的问题 [预测 D2
的标签] 时,不要试图解决更复杂的问题 [为所有可能的数据构建一个分类器]”
附录
绘图的 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()
关于machine-learning - 机器学习哲学 : applying model to biased data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34666265/
PyCaret是一个开源、低代码Python机器学习库,能够自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具,极大地加快了实验周期,提高了工作效率。PyCaret本质上是围绕几个机器学习
在我的研究进展中,我现在已经将寄生虫从图像中分离出来。寄生虫看起来像蠕虫。我希望 MATLAB 读取所有输入图像,查找类似深紫色图像的蠕虫,如果检测到,则给出检测到的答复。我尝试使用直方图比较,但我认
目前我正在尝试了解机器学习算法的工作方式,但我没有真正了解的一件事是预测标签的计算准确度与视觉混淆矩阵之间的明显差异。我会尽量解释清楚。 这是数据集的片段(这里你可以看到 9 个样本(在真实数据集中大
第一章 绪论 机器学习 : 致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中, “经验” 通常以“数据“形式存在,因此,机器学习所研究的主要内容,是关于在计算
1. 算法原理(K-Nearest Neighbor) 本质是通过距离判断两个样本是否相似,如果距离够近就认为他们足够相似属于同一类别 找到离其最近的 k 个样本,并将这些样本称
前言 K-means是一种经典的无监督学习算法,用于对数据进行聚类。K-means算法将数据集视为具有n个特征的n维空间,并尝试通过最小化簇内平方误差的总和来将数据点划分为簇。本文将介绍K-m
目录 前言 介绍LightGBM LightGBM的背景和起源 L
前言 可以说掌握了机器学习,你就具备了与机器对话,充分利用机器为人类服务的能力。在人工智能时代,这将成为一项必备技能,就好比十年前你是编程大牛,二十年前你英语超好一样。因此,无论你是什么专业的
几个贯穿始终的概念 当我们把人类学习简单事物的过程抽象为几个阶段,再将这些阶段通过不同的方法具体化为代码,依靠通过计算机的基础能力-- 计算 。我们就可以让机器能够“学会”一些简单的事物。
1、选题背景 人脸识别技术是模式识别和计算机视觉领域最富挑战性的研究课题之一,也是近年来的研究热点,人脸性别识别作为人脸识别技术
每当我们在公有云或者私有云发布训练好的大数据模型,为了方便大家辨识、理解和运用,参照huggingface所制定的标准制作一个Model Card展示页,是种非常好的模型展示和组织形式。 下面就是一
2. 支持向量机 对偶优化 拉格朗日乘数法可用于解决带条件优化问题,其基本形式为: \[\begin{gather} \min_w f(w),\\ \mathrm{s.t.} \quad
我正在尝试运行以下代码: https://github.com/opencv/opencv/blob/master/samples/dnn/classification.cpp 我在这里找到所有经过预
我是机器学习新手。当我使用 scikit-learn 模块中的波士顿数据集练习具有默认参数的决策树回归模型时。 在此链接解决方案( How to Build a Decision tree Regre
我有用于训练的数据。当我将其输入神经网络时,该数据出现 3% 的错误。 我知道这些数据有一定的过度代表性 - 例如,第 5 类的示例大约是其他类的十分之一。 我的作业指出,我可以通过偏置训练数据(即删
我在 Python 的多类分类中使用 SVM 时遇到问题。事实上,问题在于性别分类(来自图像),其中训练数据集仅包含“y=1”或“ y=-1”作为类标签(二进制)。但是,在预测中,如果是男性,我必须预
以防万一你们不知道,对抗性图像是属于某个类别的图像,但随后被扭曲,而人眼没有任何视觉感知差异,但网络错误地将其识别为完全不同的类别。 有关此内容的更多信息,请参见此处: http://karpathy
我正在进行一个 ML 语言识别项目 (Python),该项目需要具有高维特征输入的多类分类模型。 目前,我所能做的就是通过反复试验来提高准确性。无意识地结合可用的特征提取算法和可用的机器学习模型,看看
import numpy as np def sigmoid(x): return 1.0/(1+np.asmatrix(np.exp(-x))) def graD(X,y,alpha,s0,
所以我有多个列表: ['disney','england','france'] ['disney','japan'] ['england', 'london'] ['disney', 'france'
我是一名优秀的程序员,十分优秀!