《Python大规模机器学习》—3 实现快速SVM
第3章
实现快速SVM
上一章内容已接触了在线学习,与批量学习相比,读者可能已经对其简单性、有效性和可扩展性感到惊讶。尽管每次只学习单个示例,SGD依然能得到很好的估计结果,就好像使用批处理算法处理存储在核心存储器中的所有数据一样,唯一的要求就是数据流确实是随机的(数据中无趋势),并且学习器也针对问题进行了很好调整(学习率通常是需要固定的关键参数)。
无论如何,仔细检查这些成果,相对于批线性模型,计算结果仍然具有可比性,但不适用于更复杂并具有方差高于偏差特征的学习器。例如支持向量机(SVM)、神经网络或者bagging和boosting决策树。
对于某些问题,比如高而宽但稀疏的数据,仅仅线性组合就足够了,因为我们观察到,具有更多数据的简单算法要胜过以更少数据训练的更复杂的算法。然而,即使使用线性模型并明确地将现有特征映射到更高维数的特征(使用不同交互顺序、多项式展开式和核近似),我们也能加速并改善对响应和特征间的复杂非线性关系的学习。
因此,本章我们首先介绍线性SVM,将它作为替代线性模型的机器学习算法,并采用不同方法解决从数据中学习的问题。然后,在面对大规模数据,尤其是高数据(有很多待学习案例的数据集)时,演示如何利用已有特征创造更丰富的特征,以便更好完成机器学习任务。
综上所述,本章讨论以下主题:
介绍SVM的基本概念和数学公式并了解其工作原理。
给出大规模任务的基于hinger loss的SGD解决方法,使用与批处理SVM相同的优化方法。
推荐SGD的非线性近似。
介绍Scikit-learn的SGD算法以外的其他大型在线解决方法。
3.1 测试数据集
与前一章一样,我们将使用来自UCI 机器学习存储库的数据集,具体是共享单车数据集(回归问题)和森林覆盖类型数据(多类别分类问题)。
如果之前没有下载或者需要再次下载这两个数据集,需要用到在2.2.1节定义的两个函数unzip_from_UCI和gzip_from_UCI,两者都提供了与UCI存储库的Python连接;只需下载压缩文件并将其解压到Python工作目录中。如果从IPython单元调用这些函数,将会发现需要的新目录和文件正好是IPthyon要求的位置。如果函数不工作,我们将为你提供直接下载链接,下载后将数据解压到当前Python工作目录中,通过在Python接口(IPython或其他IDE)运行以下命令即可发现该目录:
3.1.1 共享单车数据集
该数据集包括两个CSV格式文件,包含2011~2012年在美国华盛顿特区的共享单车系统内每小时和每日租用单车的总数。提醒一下,数据包含有关出租当天的相应天气和季节信息。下面的代码使用方便的unzip_from_UCI封装函数将数据集保存在本地硬盘:
如果运行成功,该代码会指示CSV文件保存在哪个目录,并输出两个解压缩文件的名称。如果失败,只需从https://archive.ics.uci.edu/ml/machine-learning-databases/00275/Bike-Sharing-Dataset.zip下载文件,并将day.csv和hour.csv两个文件解压到先前在Python工作目录中创建的bikesharing目录。
- 点赞
- 收藏
- 关注作者
评论(0)