机器学习-SM0算法

这篇博客是个人的机器学习笔记,主要聚焦于SM0算法的理解。作者通过参考《机器学习实战》等书籍,尝试解释SMO算法的核心原理,并在Python环境下导入data.txt数据集,应用smoSimple实现寻找支撑向量。最终,计算出支撑线和分界线,并将它们与原始数据一起在图表中展示。
摘要由CSDN通过智能技术生成

类别:个人机器学习笔记(数学推导见上传的手写PDF)
书籍参考:《机器学习实战》、李航《统计学习》、周志华西瓜书《机器学习》
目标:
1)尝试理解smoSimple的核心原理,对关键步骤做出注释。

2)导入data.txt,利用smoSimple找到对应的支撑向量。

3)求出对应的支撑线和分界线,并和原始数据集一起绘制在同一图例中。

import matplotlib.pyplot as plt
from numpy import *
import numpy as np
import warnings


def loadDataSet(fileName):  
#读取文件
    dataMat = []; labelMat = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr = line.strip().split('\t')
        dataMat.append([float(lineArr[0]), float(lineArr[1])])
        labelMat.append(float(lineArr[2]))
    return dataMat,labelMat

def selectJrand(i,m):   #随机选择随机数,不等于J
    j=i #we want to select any J not equal to i
    while (j==i):          #   一直在挑选随机数j,直到不等于i,随机数的范围在0~m
        j = int(random.uniform(0,m))
    return j        # 返回挑选好后的随机数

def clipAlpha(aj,H,L):   # 门限函数
    if aj > H: 
        aj = H           # aj最大不能超过H,最小不能低于L
    if L > aj:
        aj = L
    return aj


    
def smoSimple(dataMatIn, classLabels):# 输入数据,标记,常数C,容错率,最大迭代次数
    dataMatrix = mat(dataMatIn);  # 转换成矩阵
    labelMat = mat(classLabels).transpose() # 转换成矩阵,并转置,标记成为一个列向量,每一行和数据矩阵对应
    b 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值