《Python大规模机器学习》—3.2.3 ​探究通过子采样改善非线性SVM

举报
华章计算机 发表于 2019/06/12 23:17:20 2019/06/12
【摘要】 本节书摘来自华章计算机《Python大规模机器学习》一书中的第3章,第3.2.3节,作者是[荷]巴斯蒂安·贾丁(Bastiaan Sjardin)[意]卢卡·马萨罗(Luca Massaron)[意]阿尔贝托·博斯凯蒂(Alberto Boschetti)王贵财 刘春明 译。

3.2.3    探究通过子采样改善非线性SVM

相比于其他机器学习算法,SVM具有很多优势:

  •  能处理大多数监督学习问题,例如回归、分类和异常检测。尽管实际上最适合二分类问题。

  •  能够很好处理噪声数据和异常值,而且与仅使用支持向量相比,常常进行较小的过拟合。

  •  更适用于宽数据集(比示例有更多的特征),虽然与其他机器学习算法一样,SVM会同时采用降维和特征选择。

    当然也存在以下缺点:

  •  只能得到估计值,除非使用Platt缩放方法运行某些耗时和计算量密集的概率校准方法,否则没有概率。

  •  与示例数量呈超线性比例。

尤其是最后一个缺点严重限制了对大数据集使用SVM。优化算法是此学习技术的

核心,这就是二次规划,它在Scikit-learn实现中运行规模介于O(特征数量*样本数量^2)和O(特征数量*样本数量^3)之间,其算法复杂度将算法的可操作性

严重限制于不超过有

10^4个实例的数据集。

同样,如上一章所见,当提供批处理算法和大量数据时仅有几个选项:子采样、并行化和通过流化进行非核心学习。子采样和并行化很少被当作最佳解决方法,流化是实现SVM以处理大规模问题的首选方法。

可是,尽管使用较少,但利用蓄水池采样技术很容易实现子采样,该技术可以从数据集和无限在线数据流中快速生成随机样本。通过子采样,能生成多个SVM模型,然后对其结果取平均值以获得更好结果。多个SVM模型的预测甚至可以叠加,以创建一个新数据集,

用于构建一个融合所有预测能力的新模型,这将在第6章中介绍。

蓄水池采样是从数据流中随机选择样本,而不需事先知道该流的长度的算法。事实上,每次在流中观察都有相同的被选择概率。

样本中的每个元素都以

流中的第一次观察所得到的样本进行初始化,它们都可以根据概率被流中的实例随时替代,而概率与到目前为止流入的元素数量成比例。所以,(例如)当流的第i个元素到达时,它可能以某概率***入样本中某个随机元素的位置。这种插入概率相当于样本维数除以i,因此,它会随流长度逐渐减小。如果流无限,那么通过随时停止可确保样本能代表迄今为止所看到的元素。

在我们的示例中,将从流中抽取两个随机且互斥的样本,一个用于训练,一个用于测试。我们将从森林覆盖类型数据库的原始有序文件从中提取这些样本。(由于采样前会流化所有数据,因此随机采样不会受排序影响。)我们选定5000个实例用于训练样本,这个数量应该在大多数台式计算机上都能得到很好扩展。测试集选用20 000个实例:

 image.png

该算法在超过500 000行数据矩阵上运行非常快。事实上,为尽可能保持最快速度,在流化过程中未作任何预处理。因此,现在需要将数据转换为NumPy数组并标准化特征:

 image.png

一旦处理完训练数据X、y,我们必须以相同方式处理测试数据;特别是必须在训练样本中使用标准参数标准化特征(均值和标准差):

 image.png

当训练和测试集都准备就绪时,可以拟合SVC模型并预测结果:

image.png

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。