首页 > 其他分享 >【机器学习】必会核函数之:多项式核函数

【机器学习】必会核函数之:多项式核函数

时间:2024-07-29 11:56:54浏览次数:15  
标签:函数 多项式 模型 train 必会 test 数据

多项式核函数

1、引言

多项式核函数 (Polynomial Kernel) 是一种用于机器学习,尤其是支持向量机 (SVM) 中的核函数。

它通过计算输入数据的多项式变换,映射到一个更高维度的特征空间,从而使得非线性问题能够在高维空间中变得线性可分。

2、多项式核函数

2.1 定义

多项式核函数的一般形式是:

[ K ( x , y ) = ( γ x T y + r ) d ] [ K(x, y) = (\gamma x^T y + r)^d ] [K(x,y)=(γxTy+r)d]

其中:

  • ( x ) ( x ) (x) 和 ( y ) ( y ) (y) 是输入向量。
  • ( γ ) ( \gamma ) (γ) 是一个尺度参数,通常默认为 1。
  • ( r ) ( r ) (r) 是自由项,可以是任何常数,通常默认为 1。
  • ( d ) ( d ) (d) 是多项式的阶数,表示多项式核的维度。
    在这里插入图片描述

2.2 核心原理

多项式核函数通过将输入向量映射到一个高维空间,使得在低维空间中难以分离的样本在高维空间中变得线性可分。

该函数的作用相当于计算输入向量之间的多项式组合,从而捕捉到更加复杂的特征和关系。

具体来说,多项式核函数的作用是计算输入数据点之间在高维空间中的点积,从而引入非线性特征

这种核方法可以避免显式地进行高维映射计算,从而提高计算效率,特别是在处理大规模数据时。

2.3 实现步骤

多项式核函数实现步骤:

  • 数据准备:获取并准备数据集,包括数据标准化和划分训练集与测试集。
  • 选择模型:选择支持向量机 (SVM) 模型,并设置多项式核函数。
  • 模型训练:使用训练集拟合模型。
  • 模型评估:使用测试集评估模型性能。
  • 模型预测:使用训练好的模型进行预测。

在这里插入图片描述

2.4 应用场景

多项式核函数广泛应用于各种机器学习任务中,尤其是以下场景:

  • 分类问题:例如非线性可分的二分类问题,通过多项式核函数映射到高维空间,利用支持向量机进行分类。
  • 回归问题:例如非线性回归,通过多项式核函数找到输入特征与输出变量之间的非线性关系。
  • 特征提取:通过多项式核函数捕捉输入数据的高阶特征,增强模型对复杂模式的识别能力。

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-07-24
# @Author : Carl_DJ

'''
实现:
 scikit-learn 库实现一个的多项式核函数 SVM 分类示例
'''


import numpy as np
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

# 数据标准化
scaler = StandardScaler()
X = scaler.fit_transform(X)

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

# 选择多项式核函数的支持向量机模型
# 设定degree=3,即多项式核的阶数为3
polynomial_svm = SVC(kernel='poly', degree=3, coef0=1, gamma='auto')

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

# 模型预测
y_pred = polynomial_svm.predict(X_test)

# 模型评估
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy * 100:.2f}%')

# 输出预测结果和真实结果
print("\nPredicted labels: ", y_pred)
print("True labels:      ", y_test)


解析

  • 1. 数据准备

    • 使用 datasets.load_iris() 加载鸢尾花数据集,这是一个常见的多分类数据集。
    • 利用 StandardScaler 对数据进行标准化处理,使数据均值为0,标准差为1。
    • 用 train_test_split 函数将数据集划分为训练集 (70%) 和测试集 (30%)。
  • 2. 选择 SVM 模型

    • 使用 SVC 类,并设置 kernel=‘poly’,即选择多项式核函数。
    • 指定 degree=3 表示使用3次多项式核, coef0=1 为核函数中的自由项, gamma=‘auto’ 表示其值为特征数的倒数。
  • 3.模型训练

    • 调用 fit 方法在训练集上训练 SVM 模型。
  • 4. 模型预测:

    • 使用 predict 方法对测试集进行预测,并获得预测标签。
  • 5. 模型评估:

    • 使用 accuracy_score 评估模型的准确率,并输出预测的标签与真实标签进行对比。

在这里插入图片描述

3、总结

多项式核函数是一种强大的工具,可以通过映射数据到高维空间解决非线性问题。

其应用广泛,尤其在分类和回归分析中表现突出。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)评测一等奖获得者

关注小鱼,学习【机器学习】&【深度学习】领域的知识。

标签:函数,多项式,模型,train,必会,test,数据
From: https://blog.csdn.net/wuyoudeyuer/article/details/140764994

相关文章

  • 编译期new,constexpr虚函数,C++
    标准:C++20环境:VSCodeg++13.2C++20新特性,constexpr虚函数,编译期new表达式,可以在编译期实现多态。示例代码://这段仅仅示例编译期new。structA{constexprA(){p=newint(6);}constexpr~A(){deletep;}constexprautoget()co......
  • C++自学笔记32(虚析构函数)
    在以往的笔记中我们讲到过析构函数和虚函数。析构函数是释放被初始化的变量,虚函数是告诉编译器有重名的函数被复写去派生类找对应函数。虚析构函数就是在基类析构函数前加入virtual表示派生类引用析构函数需要找派生类。看以下栗子。#include<iostream>classBase{publi......
  • 发生错误:使用 Spotipy 函数时只能将元组(不是“str”)连接到元组
    当我尝试调用.playlist_tracks()或.track()并发送字符串时,出现此错误:canonlyconcatenatetuple(not"str")totupleplaylist_id=query.split("/")[-1].split("?")[0]print(playlist_id)try:......
  • 函数有时指局部变量,有时指全局变量
    我正在尝试从给定的输入变量创建一个字典。我遇到了一个非常奇怪的行为,所以我开始调查。我最终得出的结论是该函数有时引用局部变量,并且有时会搜索同名的全局变量。更具体地说:当我在循环中创建字典时,它指的是全局变量它指的是本地......
  • 在 GUI 按钮构造函数中使用 lambda 函数作为命令选项
    我的问题是关于在用于为下面这个Python计算器创建GUI按钮的语法中使用lambda函数。问题:我对如何编写lambda函数的理解如下1)中所示,那么它怎么可能按照2)中GUI按钮构造函数的命令选项中编写的方式编写它?计算器的完整代码如下。此Python计算器教程的视频......
  • Hive学习第八天--函数的用法
    Hive函数学习SQL练习1、count(*)、count(1)、count('字段名')区别从执行结果来看count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL最慢的count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL最快的count......
  • C语言中的断言函数assert
    简介assert是C语言中的一个宏,用于在程序运行时进行条件检查,主要用于调试目的。它在<assert.h>头文件中定义,用于验证程序中的假设条件是否成立,如果不成立,程序将打印错误信息并终止执行。特点调试用途:主要用于捕获程序中的逻辑错误或不期望的条件。可移除:通过定义NDEBUG......
  • Contest5408 - 数论函数
    Agcd\[\begin{aligned}&\sum\limits_{i=1}^n\sum\limits_{j=1}^n[\gcd(i,j)\inP]\\=&\sum\limits_{d=1}^n[d\inP]\sum\limits_{i=1}^n\sum\limits_{j=1}^n[\gcd(i,j)=d]\\=&\sum\limits_{d=1}^n[d\in......
  • 多项式全家桶
    多项式合集前置知识:多项式的定义,表示方法,FFT,NTT,微积分等。注意事项多项式的封装很重要,现在一般都是用将指针传入一个函数的方式来进行多项式操作,如:voidInv(ll*f,ll*g,intn),表示对\(n\)次多项式\(f\)求逆,结果存在\(g\)中。多项式数组多了一定要记得清空!!说的直接点,不......
  • [JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18328759出自【进步*于辰的博客】参考笔记一,P10.4、P13.2;笔记三,P48.1。目录先言1、通用函数2、Global对象函数3、数组相关函数3.1arr.find(item=>{})3.2Array.from(ob......