数据挖掘实战(十)--基于sklearn的SVM使用

文章介绍了支持向量机(SVM)的基本原理和参数,如C参数和核函数,并展示了如何使用SVM对MNIST数据集进行分类,以及通过SVM对垃圾邮件和正常邮件进行判断。在邮件处理中,使用jieba进行分词,CountVectorizer构建数据集,最终通过SVM模型进行训练和评估,得出高精度的分类结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、支持向量机(SVM)

  1. 简介

定义:支持向量机是一种二类分类器。假如我们有两个类别的数据,而这两个类别恰好能被一条线分开,线上所有点为一类,线下所有的点属于另一类。SVM要做的就是找到这条线,用它来做预测,跟线性回归原理很像。只是SVM要找出最佳的分割线。

最佳分隔线:最优化问题,让各点到分割线之间的距离最大化。

多类别分类问题:创建多个SVM分类器。为每个类别创建一对多分类器,把训练数据分为两个类别——属于特定类别的数据其他所有类别数据。对新数据进行 分类时,从这些类别中找出最匹配的。

  1. 参数

C参数:与分类器正确分类比例相关 。C值越高,间隔越小,表示要尽可能把所有数据正确分类;C值越小,间隔越大——有些数据将无法正确分类。

kernel参数:指定内核函数。

SVM(基础形式)局限性之一就是只能用来对线性可分的数据进行分类。如果线性不可分 呢?SVM中使用核技巧(kernel trick)来解决非线性问题。核技巧及构造核函数

非线性问题:如果数据线性不可分,就需要将其置入更高维的空间中,加入更多伪特征直到数据线性可分 。

常见的核函数:线性核(两个个体的特征向量的点积、带权重的 特征和偏置项 )、多项式核(提高点积的阶数(比如2) )、高斯核(rbf)、拉普拉斯核、Sigmoid核。这些内核能够有效地确定两类数据之间的距离,SVM可以据此对新数据进行分类。

二、基于SVM对MNIST数据集进行分类

  1. 加载minist数据集

import numpy as np
X = np.load('./data/dataset.npy')
y = np.load('./data/class.npy')

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, random_state=14)
  1. 使用SVM训练

SVM有很多类型的Estimators: svm.SVR、svm.SVC、svm.OneClassSVM、svm.NuSVR等。

from sklearn import svm
predictor = svm.SVC(gamma='scale', C=1.0, decision_function_shape='ovr', kernel='rbf')
predictor.fit(x_train, y_train)
  1. 预测并使用f1评估

# 预测结果
result = predictor.predict(x_test)
# 进
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值