zoukankan      html  css  js  c++  java
  • 机器学习面试问题5

    常见问题

    和svm相关的

    如何组织训练数据

    1)将数据分开为训练集、测试集; 
    2)对训练集寻优,构建好决策函数,训练分类器; 
    3)用测试集验证准确率,达到满足需要的准确率后,就可以用新数据分类。

    如何调节惩罚因子

    惩罚因子(参数C):为了使用松弛变量才引入的,表示对离群点的重视程度。C越大越重视,越不想丢掉离群点。可用来解决数据集偏斜问题,方法是调整惩罚因子,给样本数量少的类更大的惩罚因子。

    惩罚因子C决定了你有多重视离群点带来的损失,显然当所有离群点的松弛变量的和一定时,你定的C越大,对目标函数的损失也越大,此时就暗示着你非常不愿意放弃这些离群点,最极端的情况是你把C定为无限大,这样只要稍有一个点离群,目标函数的值马上变成无限大,马上让问题变成无解,这就退化成了硬间隔问题。

    惩罚因子C不是一个变量,整个优化问题在解的时候,C是一个你必须事先指定的值,指定这个值以后,解一下,得到一个分类器,然后用测试数据看看结果怎么样,如果不够好,换一个C的值,再解一次优化问题,得到另一个分类器,再看看效果,如此就是一个参数寻优的过程,但这和优化问题本身决不是一回事,优化问题在解的过程中,C一直是定值,要记住。

    详细可参见: 
    http://blog.csdn.net/qll125596718/article/details/6910921

    如何防止过拟合

    过拟合表现为在训练数据上模型的预测很准,在未知数据上预测很差。过拟合主要是因为训练数据中的异常点,这些点严重偏离正常位置。我们知道,决定SVM最优分类超平面的恰恰是那些占少数的支持向量,如果支持向量中碰巧存在异常点,那么我们傻傻地让SVM去拟合这样的数据,最后的超平面就不是最优的。

    解决过拟合的办法是为SVM引入了松弛变量ξ。

    详细可参见: 
    http://blog.csdn.net/vincent2610/article/details/52033250

    综上,可以得出:为了解决离群的异常点引入了松弛变量,为了解决松弛变量的引入带来的分类精度的影响问题,引入了惩罚因子,松弛变量用来舍弃离群点,而惩罚因子用来保护离群点。

    除却svm,一般防止模型过拟合,提高模型泛化能力时,最常用的方法是:正则化,即在对模型的目标函数或代价函数加上正则项。此外,为了防止过拟合,我们也会用到一些其他方法,如:early stopping、数据集扩增(Data augmentation)、Dropout等。

    详细可参见: 
    http://blog.csdn.net/heyongluoyao8/article/details/49429629

    svm的泛化能力

    泛化能力是指机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据对背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。

    svm进阶可参考: 
    http://www.cnblogs.com/tornadomeet/archive/2013/05/26/3100603.html

    增量学习

    增量式学习是计算机视觉中的一种学习算法,主要用于分类问题中。

    增量式算法:就是每当新增数据时,并不需要重建所有的知识库,而是在原有知识库的基础上,仅做由于新增数据所引起的更新,即只需修改因数据变化而涉及的规则。

    svm增量学习可参见: 
    http://xueshu.baidu.com/s?wd=paperuri%3A%280cb9ee19ed8568e081958ce3e457ae31%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Fwww.docin.com%2Fp-478883661.html&ie=utf-8&sc_us=7212435835612971359

    交叉验证

    交叉验证的基本思想是把在某种意义下将原始数据进行分组,一部分做为训练集,另一部分做为验证集,首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型,以此来做为评价分类器的性能指标。

    常见的交叉验证形式: 
    1)Holdout 验证 
    常识来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。 随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。 一般来说,少于原本样本三分之一的数据被选做验证数据。 
    2)K-fold cross-validation 
    K折交叉验证,初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的。 
    3)留一验证 
    正如名称所建议, 留一验证(LOOCV)意指只使用原本样本中的一项来当做验证资料, 而剩余的则留下来当做训练资料。 这个步骤一直持续到每个样本都被当做一次验证资料。 事实上,这等同于和K-fold 交叉验证是一样的,其中K为原本样本个数。 在某些情况下是存在有效率的演算法,如使用kernel regression 和Tikhonov regularization。

  • 相关阅读:
    shutil的一些基本用法
    python用random产生验证码,以及random的一些其他用法
    hashlib 文件校验,MD5动态加盐返回加密后字符
    python中logging日志基本用法,和进程安全问题
    用递归函数得到目录下的所有文件
    python装饰器
    列表推导式三种模式和生成器
    vue.js响应式原理解析与实现
    Promise详解
    三分钟教你同步 Visual Studio Code 设置
  • 原文地址:https://www.cnblogs.com/hellochennan/p/6654134.html
Copyright © 2011-2022 走看看