当前位置: 首页 > article >正文

第L6周:机器学习|支持向量机(SVM):2. 支持向量机实战

  • 本文为365天深度学习训练营 中的学习记录博客
  • 原作者:K同学啊

这里展示一下怎么调用scikit-learn库实现线性SVM,知道怎么调用扩展一下知识面就OK了。

1.scikit-learn库实现线性可分的SVM

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 数据预处理
sc = StandardScaler()
X = sc.fit_transform(X)

# 训练集和测试集的分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建SVM模型
svm = SVC(kernel='linear', C=1.0)

# 训练模型
svm.fit(X_train, y_train)

# 预测
y_pred = svm.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % (accuracy * 100.0))

代码输出:

Accuracy: 97.78

2.scikit-learn库实现非线性可分的SVM

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 数据预处理
sc = StandardScaler()
X = sc.fit_transform(X)

# 训练集和测试集的分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建SVM模型
svm = SVC(kernel='rbf', C=1.0, gamma=0.1)

# 训练模型
svm.fit(X_train, y_train)

# 预测
y_pred = svm.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % (accuracy * 100.0))

代码输出:

Accuracy: 100.00

3.sklearn.svm.SVC函数详解

sklearn.svm.SVC 是 Scikit-learn 库中用于实现支持向量机(SVM)分类的一个类。

函数定义:

sklearn.svm.SVC(
    C=1.0,
    kernel='rbf',
    degree=3,
    gamma='scale',
    coef0=0.0,
    shrinking=True,
    probability=False,
    tol=1e-3,
    cache_size=200,
    class_weight=None,
    verbose=False,
    max_iter=-1,
    decision_function_shape='ovr',
    break_ties=False,
    random_state=None
)

● 官方文档:sklearn.svm.SVC.html

常用参数详解:

  1. C(默认值:1.0)

○ 作用:惩罚参数,用于平衡最大化分类间隔和误分类惩罚之间的关系。
○ 解释:较大的 C 值意味着对误分类的惩罚更大,模型会倾向于将更多的训练数据点分类正确,但可能会导致间隔变小,可能出现过拟合;较小的 C 值则会更关注于间隔的大小,而允许更多的误分类,从而提高模型的泛化能力。
○常用范围:通常在 0.001 到 1000 之间进行调节。

  1. kernel(默认值:‘rbf’)

○ 作用:指定要使用的核函数,支持不同的非线性映射方法。
○ 可选值:
■ ‘linear’:线性核函数,即不进行任何非线性映射。
■ ‘poly’:多项式核函数,通常用于多项式可分的情况。
■ ‘rbf’:径向基函数(Radial Basis Function),又称高斯核,是最常用的非线性核函数。
■ ‘sigmoid’:类似于神经网络的激活函数,较少使用。
■ 你也可以传递自定义核函数,方法是传递一个函数。

  1. degree (默认值:3)

○ 作用:当 kernel=‘poly’ 时,指定多项式核的多项式次数。
○ 解释:如果使用多项式核函数(poly),degree 参数决定多项式的阶数,通常是 2 或 3。

  1. gamma(默认值:‘scale’)

○ 作用:核函数系数,适用于 ‘rbf’、‘poly’ 和 ‘sigmoid’ 核函数。
○ 可选值:
■ ‘scale’:使用 1 / (n_features * X.var()) 作为默认值。这个值会根据输入特征的数量和方差自动调整。
■ ‘auto’:使用 1 / n_features 作为值。
○ 解释:gamma 值越大,模型越倾向于拟合训练数据,但可能会导致过拟合;gamma 值越小,模型更倾向于平滑。

  1. coef0(默认值:0.0)

○ 作用:核函数中的独立项,仅在 kernel=‘poly’ 或 kernel=‘sigmoid’ 时有意义。
○ 解释:用于控制多项式核函数和 sigmoid 核函数中的偏移量。

可见下面的截图,和上面的参数详解内容是一样的:

在这里插入图片描述


http://www.kler.cn/a/329461.html

相关文章:

  • 基于ESP32+VUE+JAVA+Ngnix的一个小型固件编译系统
  • 什么是SSL及SSL的工作流程
  • 游戏引擎学习第81天
  • 计算机网络 (51)鉴别
  • 非科班转码第5年零241天
  • iOS - Objective-C 底层实现中的哈希表
  • 深入探索机器学习中的聚类算法
  • 每日一题|983. 最低票价|动态规划、记忆化递归
  • OpenCV视频I/O(4)视频采集类VideoCapture之获取异常处理模式函数getExceptionMode()的使用
  • 【JavaEE初阶】深入理解多线程阻塞队列的原理,如何实现生产者-消费者模型,以及服务器崩掉原因!!!
  • 2024年7月大众点评全国美食店铺基础信息分析
  • C++初阶:STL详解(十)——priority_queue的介绍,使用以及模拟实现
  • 【C++】第一节:C++入门
  • Spring Boot与足球青训后台系统的协同
  • Golang | Leetcode Golang题解之第442题数组中重复的数据
  • Python知识点:使用Azure IoT Edge与Python进行边缘计算
  • SpringBoot-MybatisPlus项目中,在控制台查看sql执行日志的方法
  • Git 与标签管理
  • 人工智能领域机器学习与深度学习的区别
  • 初始爬虫10
  • Django学习笔记三:QuerySet使用详解
  • Rust赋能前端:为WebAssembly 瘦身
  • 8.使用 VSCode 过程中的英语积累 - Help 菜单(每一次重点积累 5 个单词)
  • 第1 章 第一节:基础语法
  • coco(json)、yolo(txt)、voc(xml)标注格式的相互转换
  • 每日练习 4332: 数学大佬带带我啊