5.4 支持向量机
我们将在本章中使用一个新的分类器,即线性支持向量机。支持向量机的算法使用“最大边缘超平面”,试图对数据点进行线性分离并归类。这是口头上的描述,下面让我们来看看这究竟是什么意思。
假设有两类数据,而我们想用一条线来分隔它们(这里只处理两个特征或维度)。放置这条线最有效的方法是什么?如图5-14所示。
图5-14
在图5-14中,线H1不能有效地区分两个类,所以我们可以不考虑这条。线H2能够清楚地区分它们,但是H3确保了最大的空余边缘。这意味着该线在两个类间最近点的当中,而这些点被称为支持向量。它们也可以看作是图5-15中的虚线。
图5-15
但是,如果数据不能被如此清晰地分到各个类中,那又该怎么办?如果点之间有重叠呢?在这种情况下也有办法。一种是使用所谓的softmargin SVM。这个公式仍然使边缘最大化,但是有一个权衡的策略:如果点错误地落在边缘的某一侧,那么对这样的点进行惩罚。另一种是使用所谓的kernel技巧。这种方法将数据转换到更高维度的空间,让这些数据可以被线性的分割。
如图5-16所示,其中有两个类,不能用单线性平面分开。
图5-16
不过,内核的某种实现可以将图5-16的图像映射到更高维度,如图5-17所示。这允许数据被线性分割。
我们已经将一维特征空间映射到二维特征空间。该映射简单地取每个x值并将其映射到x,x2。这个变换允许我们添加线性分割的平面。
介绍完这些,现在让我们将tf-idf矩阵传送给SVM模型。
from sklearn.svm import LinearSVC clf = LinearSVC() model = clf.fit(tv, df['wanted'])
这个tv参数是我们的矩阵,而df ['wanted']是我们的标签列表。记住标签是'y'或'n',表示我们是否对文章感兴趣。一旦运行完成,模型就训练完毕了。
图5-17
本章中尚未进行的一个步骤就是正式地评估我们的模型。你总是应该保留一份数据来评估模型,但由于我们需要不断更新模型,并且每天评估它,在这一章我们将跳过这一步。记得这通常是一个糟糕的想法[6]。
现在让我们继续建立每日的新闻源。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论