机器学习的建模工作问题

阅读: 评论:0

机器学习的建模⼯作问题
⽂章⽬录
1 快速搭建你的第⼀个系统,并进⾏迭代(Build your firstsystem quickly, then iterate)
如果你正在开发全新的机器学习应⽤,我通常会给你这样的建议,你应该尽快建⽴你的第⼀个系统原型,然后快速迭代。
蛇油精
让我告诉你我的意思,我在语⾳识别领域研究了很多年,如果你正在考虑建⽴⼀个新的语⾳识别系统,其实你可以⾛很多⽅向,可以优先考虑很多事情。
⽐如,有⼀些特定的技术,可以让语⾳识别系统对嘈杂的背景更加健壮,嘈杂的背景可能是说咖啡店的噪⾳,背景⾥有很多⼈在聊天,或者车辆的噪⾳,⾼速上汽车的噪⾳或者其他类型的噪⾳。有⼀些⽅法可以让语⾳识别系统在处理带⼝⾳时更健壮,还有特定的问题和麦克风与说话⼈距离很远有关,就是所谓的远场语⾳识别。⼉童的语⾳识别带来特殊的挑战,挑战来⾃单词发⾳⽅⾯,还有他们选择的词汇,他们倾向于使⽤的词汇。还有⽐如说,说话⼈⼝吃,或者说了很多⽆意义的短语,⽐如“哦”,“啊”之类的。你可以选择很多不同的技术,让你听写下来的⽂本可读性更强,所以你可以做很多事情来改进语⾳识别系统。
⼀般来说,对于⼏乎所有的机器学习程序可能会有 50 个不同的⽅向可以前进,并且每个⽅向都是相对合理的可以改善你的系统。但挑战在于,你如何选择⼀个⽅向集中精⼒处理。即使我已经在语⾳识别领域⼯作多年了,如果我要为⼀个新应⽤程序域构建新系统,我还是觉得很难不花时间去思考这个问题就直接选择⽅向。所以我建议你们,如果你想搭建全新的机器学习程序,就是快速搭好你的第⼀个系统,然后开始迭代。我的意思是我建议你快速设⽴开发集和测试集还有指标,这样就决定了你的⽬标所在,如果你的⽬标定错了,之后改也是可以的。但⼀定要设⽴某个⽬标,然后我建议你马上搭好⼀个机器学习系统原型,然后到训练集,训练⼀下,看看效果,开始理解你的算法表现如何,在开发集测试集,你的评估指标上表现如何。当你建⽴第⼀个系统后,你就可以马上⽤到之前说的偏差⽅差分析,还有之前讨论的错误分析,来确定下⼀步优先做什么。特别是如果错误分析让你了解到⼤部分的错误的来源是说话⼈远离麦克风,这对语⾳识别构成特殊挑战,那么你就有很好的理由去集中
精⼒研究这些技术,所谓远场语⾳识别的技术,这基本上就是处理说话⼈离麦克风很远的情况。
建⽴这个初始系统的所有意义在于,它可以是⼀个快速和粗糙的实现(quick and dirty implementation),你知道的,别想太多。初始系统的全部意义在于,有⼀个学习过的系统,有⼀个训练过的系统,让你确定偏差⽅差的范围,就可以知道下⼀步应该优先做什么,让你能够进⾏错误分析,可以观察⼀些错误,然后想出所有能⾛的⽅向,哪些是实际上最有希望的⽅向。
簧网
所以回顾⼀下,我建议你们快速建⽴你的第⼀个系统,然后迭代。不过如果你在这个应⽤程序领域有很多经验,这个建议适⽤程度要低⼀些。还有⼀种情况适应程度更低,当这个领域有很多可以借鉴的学术⽂献,处理的问题和你要解决的⼏乎完全相同,所以,⽐如说,⼈脸识别就有很多学术⽂献,如果你尝试搭建⼀个⼈脸识别设备,那么可以从现有⼤量学术⽂献为基础出发,⼀开始就搭建⽐较复杂的系统。但如果你第⼀次处理某个新问题,那我真的不⿎励你想太多,或者把第⼀个系统弄得太复杂。我建议你们构建⼀些快速⽽粗糙的实现,然后⽤来帮你到改善系统要优先处理的⽅向。我见过很多机器学习项⽬,我觉得有些团队的解决⽅案想太多了,他们造出了过于复杂的系统。我也见过有限团队想的不够,然后造出过于简单的系统。平均来说,我见到更多的团队想太多,构建太复杂的系统。
所以我希望这些策略有帮助,如果你将机器学习算法应⽤到新的应⽤程序⾥,你的主要⽬标是弄出能
⽤的系统,你的主要⽬标并不是发明全新的机器学习算法,这是完全不同的⽬标,那时你的⽬标应该是想出某种效果⾮常好的算法。所以我⿎励你们搭建快速⽽粗糙的实现,然后⽤它做偏差/⽅差分析,⽤它做错误分析,然后⽤分析结果确定下⼀步优先要做的⽅向。
2 在不同的划分上进⾏训练并测试
2.1 为什么要在不同的划分上?
深度学习算法对训练数据的胃⼝很⼤,当你收集到⾜够多带标签的数据构成训练集时,算法效果最好,这导致很多团队⽤尽⼀切办法收集数据,然后把它们堆到训练集⾥,让训练的数据量更⼤,即使有些数据,甚⾄是⼤部分数据都来⾃和开发集、测试集不同的分布。在深度学习时代,越来越多的团队都⽤来⾃和开发集、测试集分布不同的数据来训练,这⾥有⼀些微妙的地⽅,⼀些最佳做法来处理训练集和测试集存在差异的情况,我们来看看。
假设你在开发⼀个⼿机应⽤,⽤户会上传他们⽤⼿机拍摄的照⽚,你想识别⽤户从应⽤中上传的图⽚
是不是猫。现在你有两个数据来源,⼀个是你真正关⼼的数据分布,来⾃应⽤上传的数据,⽐如右边的应⽤,这些照⽚⼀般更业余,取景不太好,有些甚⾄很模糊,因为它们都是业余⽤户拍的。另⼀个数据来源就是你可以⽤爬⾍程序挖掘⽹页直接下载,就这个样本⽽⾔,可以下载很多取景专业、⾼分辨率、拍摄专业的猫图⽚。如果你的应⽤⽤户数还不多,也许你只收集到 10,000 张⽤户上传的照⽚,但通过爬⾍挖掘⽹页,你可以下载到海量猫图,也许你从互联⽹上下载了超过 20 万张猫图。⽽你真正关⼼的算法表现是你的最终系统处理来⾃应⽤程序的这个图⽚分布时效果好不好,因为最后你的⽤户会上传类似右边这些图⽚,你的分类器必须在这个任务中表现良好。现在你就陷⼊困境了,因为你有⼀个相对⼩的数据集,只有 10,000 个样本来⾃那个分布,⽽你还有⼀个⼤得多的数据集来⾃另⼀个分布,图⽚的外观和你真正想要处理的并不⼀样。但你⼜不想直接⽤这 10,000 张图⽚,因为这样你的训练集就太⼩了,使⽤这 20 万张图⽚似乎有帮助。但是,困境在于,这 20 万张图⽚并不完全来⾃你想要的分布,那么你可以怎么做呢?
这⾥有⼀种选择,你可以做的⼀件事是将两组数据合并在⼀起,这样你就有 21 万张照⽚,你可以把这 21 万张照⽚随机分配到训练、开发和测试集中。为了说明观点,我们假设你已经确定开发集和测试集各包含 2500 个样本,所以你的训练集有 205000 个样本。现在这么设⽴你的数据集有⼀些好处,也有坏处。好处在于,你的训练集、开发集和测试集都来⾃同⼀分布,这样更好管理。但坏处在于,这坏处还不⼩,就是如果你观察开发集,看看这2500 个样本其中很多图⽚都来⾃⽹页下载的图⽚,那并不是你真正关⼼的数据分布,你真正要处理的是来⾃⼿机的图⽚。
所以结果你的数据总量,这 200,000 个样本,我就⽤200 缩写表⽰,我把那些是从⽹页下载的数据总量写成210 ,所以对于这 2500个样本,数学期望值是:2500 ×200 /210  = 2381, 有 2381 张图来⾃⽹页下载,这是期望值,确切数⽬会变化,取决于具体的随机分配操作。但平均⽽⾔,只有 119 张图来⾃⼿机上传。要记住,设⽴开发集的⽬的是告诉你的团队去瞄准的⽬标,⽽你瞄准⽬标的⽅式,你的⼤部分精⼒都⽤在优化来⾃⽹页下载的图⽚,这其实不是你想要的。所以我真的不建议使⽤第⼀个选项,因为这样设⽴开发集就是告诉你的团队,针对不同于你实际关⼼的数据分布去优化,所以不要这么做。
2.2 怎样进⾏划分?
我建议你⾛另外⼀条路,就是这样,训练集,⽐如说还是 205,000 张图⽚,我们的训练集是来⾃⽹页下载的 200,000 张图⽚,然后如果需要的话,再加上 5000 张来⾃⼿机上传的图⽚。然后对于开发集和测试集,这数据集的⼤⼩是按⽐例画的,你的开发集和测试集都是⼿机图。⽽训练集包含了来⾃⽹页的 20 万张图⽚,还有 5000 张来⾃应⽤的图⽚,开发集就是 2500 张来⾃应⽤的图⽚,测试集也是2500 张来⾃应⽤的图⽚。这样将数据分成训练集、开发集和测试集的好处在于,现在你瞄准的⽬标就是你想要处理的⽬标,你告诉你的团队,我的开发集包含的数据全部来⾃⼿机上传,这是你真正关⼼的图⽚分布。我们试试搭建⼀个学习系统,让系统在处理⼿机上传图⽚分布时效果良好。缺点在于,
当然了,现在你的训练集分布和你的开发集、测试集分布并不⼀样。但事实证明,这样把数据分成训练、开发和测试集,在长期能给你带来更好的系统性能。我们以后会讨论⼀些特殊的技巧,可以处理 训练集的分布和开发集和测试集分布不⼀样的情况。
我们来看另⼀个样本,假设你正在开发⼀个全新的产品,⼀个语⾳激活汽车后视镜,这在中国是个真实存在的产品,它正在进⼊其他国家。但这就是造⼀个后视镜,把这个⼩东西换掉,现在你就可以和后视镜对话了,然后只需要说:“亲爱的后视镜,请帮我到最近的加油站的导航⽅向”,然后后视镜就会处理这个请求。所以这实际上是⼀个真正的产品,假设现在你要为你⾃⼰的国家研制这个产品,那么你怎么收集数据去训练这个产品语⾔识别模块呢?
嗯,也许你已经在语⾳识别领域上⼯作了很久,所以你有很多来⾃其他语⾳识别应⽤的数据,它们并
不是来⾃语⾳激活后视镜的数据。现在我讲讲如何分配训练集、开发集和测试集。对于你的训练集,你可以将你拥有的所有语⾳数据,从其他语⾳识别问题收集来的数据,⽐如这些年你从各种语⾳识别数据供应商买来的数据,今天你可以直接买到成 , 对的数据,其中 是⾳频剪辑, 是听写记录。或者也许你
研究过智能⾳箱,语⾳激活⾳箱,所以你有⼀些数据,也许你做过语⾳激活键盘的开发之类的。
举例来说,也许你从这些来源收集了 500,000 段录⾳,对于你的开发集和测试集也许数据集⼩得多,⽐如实际上来⾃语⾳激活后视镜的数据。因为⽤户要查询导航信息或试图到通往各个地⽅的路线,这个数据集可能会有很多街道地址,对吧?“请帮我导航到这个街道地址”,或者说:“请帮助我导航到这个加油站”,所以这个数据的分布和左边⼤不⼀样,但这真的是你关⼼的数据,因为这些数据是你的产品必须处理好的,所以你就应该把它设成你的开发和测试集。
在这个样本中,你应该这样设⽴你的训练集,左边有 500,000 段语⾳,然后你的开发集和测试集,我把它简写成 和 ,可能每个集
包含 10,000 段语⾳,是从实际的语⾳激活后视镜收集的。或者换种⽅式,如果你觉得不需要将 20,000 段来⾃语⾳激活后视镜的录⾳全部放进开发和测试集,也许你可以拿⼀半,把它放在训练集⾥,那么训练集可能是 51 万段语⾳,包括来⾃那⾥的 50 万段语⾳,还有来⾃后视镜的 1 万段语⾳,
然后开发集和测试集也许各⾃有 5000 段语⾳。所以有 2 万段语⾳,也许 1 万段语⾳放⼊了训练集,5000 放⼊开发集,5000 放⼊测试集。所以这是另⼀种将你的数据分成训练、开发和测试的⽅式。这样你的训练集⼤得多,⼤概有 50 万段语⾳,⽐只⽤语⾳激活后视镜数据作为训练集要⼤得多。
所以,你们见到⼏组样本,让你的训练集数据来⾃和开发集、测试集不同的分布,这样你就可以有更多的训练数据。在这些样本中,这将改善你的学习算法。
现在你可能会问,是不是应该把收集到的数据都⽤掉?答案很微妙,不⼀定都是肯定的答案,我们看看⼀个反例。
3 不匹配数据划分的偏差和⽅差(Bias and Variance with mismatched data distributions)
3.1 什么是不匹配数据?
估计学习算法的偏差和⽅差真的可以帮你确定接下来应该优先做的⽅向,但是,当你的训练集来⾃和开发集、测试集不同分布时,分析偏差和⽅差的⽅式可能不⼀样,我们来看为什么。
我们继续⽤猫分类器为例,我们说⼈类在这个任务上能做到⼏乎完美,所以贝叶斯错误率或者说贝叶斯最优错误率,我们知道这个问题⾥⼏乎是 0%。所以要进⾏错误率分析,你通常需要看训练误差,也要看看开发集的误差。⽐如说,在这个样本中,你的训练集误差是1%,你的开发集误差是 10%,
如果你的开发集来⾃和训练集⼀样的分布,你可能会说,这⾥存在很⼤的⽅差问题,你的算法不能很好的从训练集出发泛化,它处理训练集很好,但处理开发集就突然间效果很差了。
但如果你的训练数据和开发数据来⾃不同的分布,你就不能再放⼼下这个结论了。特别是,也许算法在开发集上做得不错,可能因为训练集很容易识别,因为训练集都是⾼分辨率图⽚,很清晰的图像,但开发集要难以识别得多。所以也许软件没有⽅差问题,这只不过反映了开发集包含更难准确分类的图⽚。所以这个分析的问题在于,当你看训练误差,再看开发误差,有两件事变了。⾸先算法只见过训练集数据,没见过开发集数据。第⼆,开发集数据来⾃不同的分布。⽽且因为你同时改变了两件事情,很难确认这增加的 9%误差率有多少是因为算法没看到开发集中的数据导致的,这是问题⽅差的部分,有多少是因为开发集数据就是不⼀样。cng撬装加气站
沥青阻尼板
为了弄清楚哪个因素影响更⼤,如果你完全不懂这两种影响到底是什么,别担⼼我们马上会再讲⼀遍。但为了分辨清楚两个因素的影响,定义⼀组新的数据是有意义的,我们称之为训练-开发集,所以这是⼀个新的数据⼦集。我们应该从训练集的分布⾥挖出来,但你不会⽤来训练你的⽹络。
我的意思是我们已经设⽴过这样的训练集、开发集和测试集了,并且开发集和测试集来⾃相同的分布,但训练集来⾃不同的分布。
3.2 不匹配情况下的训练-开发集
我们要做的是随机打散训练集,然后分出⼀部分训练集作为训练-开发集(training-dev),就像开发集和测试集来⾃同⼀分布,训练集、训练-开发集也来⾃同⼀分布。
但不同的地⽅是,现在你只在训练集训练你的神经⽹络,你不会让神经⽹络在训练-开发集上跑后向传播。为了进⾏误差分析,你应该做的是看看分类器在训练集上的误差,训练-开发集上的误差,还有开发集上的误差。
⽐如说这个样本中,训练误差是 1%,我们说训练-开发集上的误差是 9%,然后开发集误差是 10%,和以前⼀样。你就可以从这⾥得到结论,当你从训练数据变到训练-开发集数据时,错误率真的上升了很多。⽽训练数据和训练-开发数据的差异在于,你的神经⽹络能看到第⼀部分数据并直接在上⾯做了训练,但没有在训练-开发集上直接训练,这就告诉你,算法存在⽅差问题,因为训练-开发集的错误率是在和训练集来⾃同⼀分布的数据中测得的。所以你知道,尽管你的神经⽹络在训练集中表现良好,但⽆法泛化到来⾃相同分布的训练-开发集⾥,它⽆法很好地泛化推⼴到来⾃同⼀分布,但以前没见过的数据中,所以在这个样本中我们确实有⼀个⽅差问题。
我们来看⼀个不同的样本,假设训练误差为 1%,训练-开发误差为 1.5%,但当你开始处理开发集时,错误率上升到 10%。现在你的⽅差问题就很⼩了,因为当你从见过的训练数据转到训练-开发集数据,神经⽹络还没有看到的数据,错误率只上升了⼀点点。但当你转到开发集时,错误率就⼤⼤上升了,所以这是数据不匹配的问题。因为你的学习算法没有直接在训练-开发集或者开发集训练过,但是这两个数据集来⾃不同的分布。但不管算法在学习什么,它在训练-开发集上做的很好,但开发集上做的不好,所以总之你的算法擅长处理和你关⼼的数据不同的分布,我们称之为数据不匹配的问题。
我们再来看⼏个样本,我会在下⼀⾏⾥写出来,因上⾯没空间了。所以训练误差、训练-开发误差、还有开发误差,我们说训练误差是10%,训练-开发误差是 11%,开发误差为 12%,要记住,⼈类⽔平对贝叶斯错误率的估计⼤概是 0%,如果你得到了这种等级的表现,那就真的存在偏差问题了。存在可避免偏差问题,因为算法做的⽐⼈类⽔平差很多,所以这⾥的偏差真的很⾼。
最后⼀个例⼦,如果你的训练集错误率是 10%,你的训练-开发错误率是 11%,开发错误率是 20%,那么这其实有两个问题。第⼀,可避免偏差相当⾼,因为你在训练集上都没有做得很好,⽽⼈类能做到接近 0%错误率,但你的算法在训练集上错误率为 10%。这⾥⽅差似乎很⼩,但数据不匹配问题很⼤。所以对于这个样本,我说,如果你有很⼤的偏差或者可避免偏差问题,还有数据不匹配问题。
我们看看这张幻灯⽚⾥做了什么,然后写出⼀般的原则,我们要看的关键数据是⼈类⽔平错误率,你
的训练集错误率,训练-开发集错误率,所以这分布和训练集⼀样,但你没有直接在上⾯训练。根据这些错误率之间差距有多⼤,你可以⼤概知道,可避免偏差、⽅差数据不匹配问题各⾃有多⼤。
我们说⼈类⽔平错误率是 4%的话,你的训练错误率是 7%,⽽你的训练-开发错误率是10%,⽽开发错误率是 12%,这样你就⼤概知道可避免偏差有多⼤。因为你知道,你希望你的算法⾄少要在训练集上的表现接近⼈类。⽽这⼤概表明了⽅差⼤⼩,所以你从训练集泛化推⼴到训练-开发集时效果如何?⽽这告诉你数据不匹配的问题⼤概有多⼤。技术上你还可以再加⼊⼀个数字,就是测试集表现,我们写成测试集错误率,你不应该在测试集上开发,因为你不希望对测试集过拟合。但如果你看看这个,那么这⾥的差距就说明你对开发集过拟合的程度。所以如果开发集表现和测试集表现有很⼤差距,那么你可能对开发集过拟合了,所以也许你需要⼀个更⼤的开发集,对吧?要记住,你的开发集和测试集来⾃同⼀分布,所以这⾥存在很⼤差距的话。如果算法在开发集上做的很好,⽐测试集好得多,那么你就可能对开发集过拟合了。如果是这种情况,那么你可能要往回退⼀步,然后收集更多开发集数据。现在我写出这些数字,这数字列表越往后数字越⼤。假山的堆叠
这⾥还有个例⼦,其中数字并没有⼀直变⼤,也许⼈类的表现是 4%,训练错误率是 7%,训练-开发错误率是 10%。但我们看看开发集,你发现,很意外,算法在开发集上做的更好,也许是 6%。所以如果你见到这种现象,⽐如说在处理语⾳识别任务时发现这样,其中训练数据其实⽐你的开发集和测试集难识别得多。所以这两个(7%,10%)是从训练集分布评估的,⽽这两个(6%,6%)是从开发
切筋测试集分布评估的。所以有时候如果你的开发测试集分布⽐你应⽤实际处理的数据要容易得多,那么这些错误率可能真的会下降。所以如果你看到这样的有趣的事情,可能需要⽐这个分析更普适的分析,我在下⼀张幻灯⽚⾥快速解释⼀下。
所以,我们就以语⾳激活后视镜为例⼦,事实证明,我们⼀直写出的数字可以放到⼀张表⾥,在⽔平轴上,我要放⼊不同的数据集。⽐如说,你可能从⼀般语⾳识别任务⾥得到很多数据,所以你可能会有⼀堆数据,来⾃⼩型智能⾳箱的语⾳识别问题的数据,你购买的数据等等。然后你收集了和后视镜有关的语⾳数据,在车⾥录的。所以这是表格的 轴,不同的数据集。在另⼀条轴上,我要标记处理数据不同
的⽅式或算法。
⾸先,⼈类⽔平,⼈类处理这些数据集时准确度是多少。然后这是神经⽹络训练过的数据集上达到的错误率,然后还有神经⽹络没有训练过的数据集上达到的错误率。所以结果我们上⼀张幻灯⽚说是⼈类⽔平的错误率,数字填⼊这个单元格⾥(第⼆⾏第⼆列),⼈类对这⼀类数据处理得有多好,⽐如来⾃各种语⾳识别系统的数据,那些进⼊你的训练集的成千上万的语⾳⽚段,⽽上⼀张幻灯⽚中的例⼦是 4%。这个数字(7%),可能是我们的训练错误率,在上⼀张幻灯⽚中的例⼦中是 7%。是的,如果你的学习算法见过这个样本,在这个样本上跑过梯度下降,这个样本来⾃你的训练集分布或⼀般的语⾳识别数据分布,你的算法在训练过的数据中表现如何呢?然后这就是训练-开发集错误率,通常来⾃这个分布的错误率会⾼⼀点,⼀般的语⾳识别数据,如果你的算法没在来⾃这个分布的样本上训练过,它的表现如何呢?这就是我们说的训练-开发集错误率。
如果你移到右边去,这个单元格是开发集错误率,也可能是测试集错误,在刚刚的例⼦中是 6%。⽽开发集和测试集,实际上是两个数字,但都可以放⼊这个单元格⾥。如果你有来⾃后视镜的数据,来⾃从后视镜应⽤在车⾥实际录得的数据,但你的神经⽹络没有在这些数据上做过反向传播,那么错误率是多少呢?
我们在上⼀张幻灯⽚作的分析是观察这两个数字之间的差异(Human level 4%和 Training error 7%),还有这两个数字之间(Training error 7%和 Training-dev error 10%),这两个数字之间(Training-dev error 10%和 Dev/Test dev 6%)。这个差距(Human level 4%和 Training error 7%)
衡量了可避免偏差⼤⼩,这个差距 Training error 7%和 Training-dev error 10%)衡量了⽅差⼤⼩,⽽这个差距(Training-dev error 10%和 Dev/Test dev 6%)衡量了数据不匹配问题的⼤⼩。
事实证明,把剩下的两个数字(rearview mirror speech data 6%和 Error on examples trained on 6%),也放到这个表格⾥也是有⽤的。如果结果这也是 6%,那么你获得这个数字的⽅式是你让⼀些⼈⾃⼰标记他们的后视镜语⾳识别数据,看看⼈类在这个任务⾥能做多好,也许结果也是 6%。做法就是,你收集⼀些后视镜语⾳识别数据,把它放在训练集中,让神经⽹络去学习,然后测量那个数据⼦集上的错误率,但如果你得到这样的结果,好吧,那就是说你已经在后视镜语⾳数据上达到⼈类⽔平了,所以也许你对那个数据分布做的已经不错了。
当你继续进⾏更多分析时,分析并不⼀定会给你指明⼀条前进道路,但有时候你可能洞察到⼀些特征。⽐如⽐较这两个数字(General speech recognition Human level 4%和 rearview mirror speech data 6%),告诉我们对于⼈类来说,后视镜的语⾳数据实际上⽐⼀般语⾳识别更难,因为⼈类都有 6%的错误,⽽不是 4%的错误,但看看这个差值,你就可以了解到偏差和⽅差,还有数据不匹配这些问题的不同程度。所以更⼀般的分析⽅法是,我已经⽤过⼏次了。我还没⽤过,但对于很多问题来说检查这个⼦集的条⽬,看看这些差值,已经⾜够让你往相对有希望的⽅向前进了。但有时候填满整个表格,你可能会洞察到更多特征。

本文发布于:2023-06-10 01:32:01,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/134007.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:训练   数据   开发
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图