机器学习笔记——支持向量机SMO算法完整版代码(核函数)

本文介绍了如何在支持向量机SMO算法中使用高斯核函数,针对线性不可分的样本数据进行转换和分类。代码中详细展示了如何修改间隔计算方法,并添加了高斯核的实现,以适应非线性问题。其他核函数的使用可以根据需求自行添加。

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

机器学习笔记——支持向量机SMO算法完整版代码(核函数)

\qquad 前面的代码中(机器学习笔记——支持向量机SMO算法完整版代码分析)使用的“间隔”为线性的间隔计算方法,即向量內积( K i j = ( x i , x j ) K_{ij}=(x_i,x_j) Kij=(xi,xj))。

\qquad 但是在样本数据线性不可分时,就需要通过核函数来进行转换,将低维数据映射到更高位当中进行分类,那么就要将算法中的代码进行修改。

\qquad 由于修改了“间隔”计算方法,也就是说在代码中涉及到 K i j K_{ij} Kij的计算都要修改,有 η 、 b 、 u i \eta、b、u_i ηbui,添加了 k e r n e l T r a n s kernelTrans kernelTrans核转换函数,这里只添加了高斯核,需要使用其他核函数可自行添加,下面为修改后的代码:

# -*- coding: utf-8 -*-
"""
Created on Thu Aug 22 15:07:35 2019

@author:wangtao_zuel

E-mail:[email protected]

"""

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def svmSmo(dataPath,outerPath,C=0.6,toler=0.001,maxIters=40,kTup=('lin',0)):
    """
    主函数、外循环
        kTup为核函数参数,第一个元素表示核函数类型,第二个元素表示核函数所需要的参数
            'lin':线性
            'rbf':高斯核
    """
    # 读取数据,此处用的为xlsx类型数据,其他类型的数据进行相应的改动
    dataMat,labelMat = loadData(dataPath)
    # 将数据放在参数类中,并定义一些后面需要用到参数
    oS = parameter(dataMat,labelMat,C,toler,kTup)
    # 统计大循环次数
    iters = 0
    # 用于切换边界、非边界情况
    entireSet = True
    # 统计在边界、非边界情况下是否进行了优化,若当前没有不再有优化则进行切换
    alphaPairsChanged =0
    # 循环结束条件:达到最大迭代次数或迭代无法提高精度(非边界、边界情况下都无法再进行优化)
    while (iters < maxIters) and ((alphaPairsChanged > 0) or (entireSet)):
        # 每次循环重新统计
        alphaPairsChanged =0
        # 最初将所有的alpha都定义为0,所以先遍历整个训练集
        if entireSet:
            for i in range(oS.m):
                alphaPairsChanged += innerL(oS,i)
            print("fullSet. iters:%d. alphaPairsChanged:%d"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值