机器学习实战--支持向量机

import random
from numpy import *
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
#功能:在(0, m)的区间范围内随机选择一个除i以外的整数
#输入:不能选择的整数i,区间上界m
#输出:随机选择的整数
def selectJrand(i,m):
    j=i
    while(j==i):
        j=int(random.uniform(0,m))
    return j
#功能:保证aj在区间[L, H]里面
#输入:要调整的数aj,区间上界H,区间下界L
#输出:调整好的数aj
def clipAlpha(aj,H,L):
    if aj>H:
        aj=H
    if L>aj:
        aj=L
    return aj
#功能:简化版SMO算法
#输入:数据矩阵dataMatIn,标签向量classLabels,常数C,容错率toler,最大迭代次数maxIter
#输出:超平面位移项b,拉格朗日乘子alpha
def smoSimple(dataMatIn,classLabels,C,toler,maxIter):
    dataMatrix=mat(dataMatIn);labelMat=mat(classLabels).transpose()
    b=0;m,n=shape(dataMatrix)#数据矩阵行数和列数,表示训练样本个数和特征值个数
    alphas=mat(zeros((m,1)))#m*1阶矩阵
    iter=0
    while(iter<maxIter):#循环直到超出最大迭代次数
        alphaPairsChanged=0
        for i in range(m):
            fxi=float(multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[i,:].T))+b
            Ei=fxi-float(labelMat[i])#误差
            if((labelMat[i]*Ei<-toler)and(alphas[i]<C))or((labelMat[i]*Ei>toler)and (alphas[i]>0)):#在(0, m)的区间范围内随机选择一个除i以外的整数,即随机选择第二个alpha
                j=selectJrand(i,m)
               #求变量alphaJ对应的误差
                fxj=float(multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[j,:].T))+b
                Ej=fxi-float(labelMat[j])
                #不能直接 alphaIold = alphas[i],否则alphas[i]和alphaIold指向的都是同一内存空间
                alphaIold=alphas[i].copy();
                alphaJold=alphas[j].copy();
                if (labelMat[i]!=labelMat[j]):
                    L=max(0,alphas[j]-alphas[i])
                    H=min(C,C+alphas[j]-alphas[i])
                else:
                    L=max(0,alphas[j]+alphas[i]-C)
                    H=min(C,alphas[j]+alphas[i])
                if L==H:print("L==H"); continue
                eta=2.0*dataMatrix[i:]*dataMatrix[j,:].T-dataMatrix[i,:]*dataMatrix[i,:].
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值