核方法 : 多项式核函数

一、定义

多项式核函数: 将数据映射到高维空间,从而实现 低维线性不可分 到 高维线性可分

二、核心代码介绍

1、关于 PolynomialFeatures(degree=3) : 三次多项式核函数

2、关于 svm_clf.decision_function : 推理

三、代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.preprocessing import PolynomialFeatures
from sklearn.svm import SVC

def generate_non_linear_data():
    # 生成线性不可分的二维数据
    X, y = make_moons(n_samples=100, noise=0.15, random_state=42)
    return X, y

def plot_original_data(X, y):
    # 绘制原始数据(处理前)
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)
    plt.title("Original Data (Not Linearly Separable)")
    plt.xlabel("Feature 1")
    plt.ylabel("Feature 2")

def train_svm_with_polynomial_kernel(X, y,degree=3):
    # 创建多项式核函数对象(将数据映射到更高维度)
    poly_kernel = PolynomialFeatures(degree=degree)
    X_poly = poly_kernel.fit_transform(X)
    
    # 使用支持向量机分类器(SVC)进行训练
    svm_clf = SVC(kernel="linear")
    svm_clf.fit(X_poly, y)
    
    return svm_clf,poly_kernel

def plot_transformed_data(svm_clf,poly_kernel, X, y):
    # 创建一个网格来覆盖数据的特征空间
    xx, yy = np.meshgrid(np.linspace(X[:, 0].min(), X[:, 0].max(), 200),
                         np.linspace(X[:, 1].min(), X[:, 1].max(), 200))
    
    # 对网格中的每个点进行预测,确定其所属类别
    Z = svm_clf.decision_function(poly_kernel.transform(np.c_[xx.ravel(), yy.ravel()]))
    Z = Z.reshape(xx.shape)
    
    # 绘制处理后的数据(处理后)
    plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral, alpha=0.8)
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)
    plt.title("Transformed Data (Linearly Separable)")
    plt.xlabel("Feature 1")
    plt.ylabel("Feature 2")

def main():
    # 生成非线性数据
    X, y = generate_non_linear_data()
    
    # 绘制原始数据
    plt.figure(figsize=(25, 5))
    plt.subplot(1, 4, 1)
    plot_original_data(X, y)
    
    # 训练 SVM 模型并绘制决策边界
    svm_clf,poly_kernel = train_svm_with_polynomial_kernel(X, y,3)
    plt.subplot(1, 4, 2)
    plot_transformed_data(svm_clf, poly_kernel,X, y)
    

    svm_clf,poly_kernel = train_svm_with_polynomial_kernel(X, y,4)
    plt.subplot(1, 4, 3)
    plot_transformed_data(svm_clf, poly_kernel,X, y)

    svm_clf,poly_kernel = train_svm_with_polynomial_kernel(X, y,5)
    plt.subplot(1, 4, 4)
    plot_transformed_data(svm_clf, poly_kernel,X, y)

    plt.tight_layout()
    plt.show()

if __name__ == "__main__":
    main()

结果展示:

四、分析

三次多项式核函数:将数据映射到三次多项式特征空间,形式是 (x * x' + c)^3

四次多项式核函数:将数据映射到四次多项式特征空间,形式为 (x * x' + c)^4

总结: 增加多项式的次数可以 增加模型的拟合能力,但也会增加计算复杂性和过拟合的风险

 

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值