• 大小: 86KB
    文件类型: .rar
    金币: 2
    下载: 2 次
    发布日期: 2021-06-27
  • 语言: Python
  • 标签: SMO  SVM  

资源简介

SVM支持向量机Python实现,大家可以当备用资料存储,也可以直接实际操作

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
# Filename : 01smoSimple.py

from numpy import *
import numpy as np
import operator
import svmMLiA2
import matplotlib.pyplot as plt 

# 数据文件
fileName = “testSet.txt“
# 初始化数据集     
dataArrlabelArr = svmMLiA2.loadDataSet(fileName)

# smoSimple
# dataMatIn:数据集,classLabels:标签集
# C:在允许有错误分类的情况下,控制最大化间距容错率toler:0.001
# 最大迭代次数maxIter:40 
dataMatIn=dataArr; classLabels=labelArr; C=0.6; toler=0.001; maxIter=40
dataMatrix = mat(dataMatIn); labelMat = mat(classLabels).T
b = 0; # 初始化截距
mn = shape(dataMatrix)
alphas = mat(zeros((m1))) # m行全0向量
iter = 0 # 初始化迭代次数
while (iter < maxIter):
    alphaPairsChanged = 0
    for i in range(m): # m行迭代
        # fXi:wTx + b 分类超平面
        fXi = float(multiply(alphaslabelMat).T*(dataMatrix*dataMatrix[i:].T)) + b
        Ei = fXi - float(labelMat[i])     # 预估分类i与实际分类的误差
        # 如果超出容错率和错误分类允许的边界
        if ((labelMat[i]*Ei < -toler) and (alphas[i] < C)) or ((labelMat[i]*Ei > toler) and (alphas[i] > 0)):
            j = svmMLiA2.selectJrand(im) # 随机选择一个不等于i的j
            # 计算fXj 公式同fXi
            fXj = float(multiply(alphaslabelMat).T*(dataMatrix*dataMatrix[j:].T)) + b
            Ej = fXj - float(labelMat[j])  # 计算预估分类j与实际分类的误差
            # 保存计算的 alphaI和alphaJ
            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:].T - dataMatrix[j:]*dataMatrix[j:].T
            if eta >= 0: 
             print “eta>=0“; 
             continue # 忽略后面的语句继续迭代
            alphas[j] -= labelMat[j]*(Ei - Ej)/eta # 见第二章公式九
            alphas[j] = svmMLiA2.clipAlpha(alphas[j]HL) # 见第二章公式十和公式十二
            # 计算调整后的alphas[j] 与 alphaJold是否相等(小于误差)
            if (abs(alphas[j] - alphaJold) < 0.00001): 
             # print “j not moving enough“; 
             continue # 忽略后面的语句继续迭代
            alphas[i] += labelMat[j]*labelMat[i]*(alphaJold - alphas[j])# 更新 alphas[i]
            #见第二章公式十四
            b1 = b - Ei- labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i:]*dataMatrix[i:].T - labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[i:]*dataMatrix[j:].T
            b2 = b - Ej- labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i:]*dataMatrix[j:].T - labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[j:]*dataMatrix[j:].T
            # 根据KKT条件更新b的取值
            if (0 < alphas[i]) and (C > alphas[i]): b = b1
            elif (0 < alphas[j]) and (C > alphas[j]): b = b2
            else: b = (b1 + b2)/2.0
            alphaPairsChanged +

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3905  2014-05-19 15:20  Ch06svmMLiA\01smoSimple.py

     文件       1039  2014-05-19 13:41  Ch06svmMLiA\02PlattSMO.py

     文件       2090  2014-05-19 15:32  Ch06svmMLiA\03svmRbf.py

     文件     129569  2011-05-04 16:03  Ch06svmMLiA\digits.zip

     文件       2336  2010-11-03 16:30  Ch06svmMLiA\EXTRAS\notLinSeperable.py

     文件        835  2011-02-16 18:24  Ch06svmMLiA\EXTRAS\plotRBF.py

     文件       1452  2010-11-23 19:46  Ch06svmMLiA\EXTRAS\plotSupportVectors.py

     文件      16320  2010-11-27 09:06  Ch06svmMLiA\svmMLiA.py

     文件      17344  2014-05-19 15:38  Ch06svmMLiA\svmMLiA2.py

     文件      15337  2014-05-19 15:34  Ch06svmMLiA\svmMLiA2.pyc

     文件       2208  2010-11-04 14:13  Ch06svmMLiA\testSet.txt

     文件       2945  2010-11-26 18:16  Ch06svmMLiA\testSetRBF.txt

     文件       2951  2010-11-26 18:17  Ch06svmMLiA\testSetRBF2.txt

     目录          0  2013-09-19 19:05  Ch06svmMLiA\EXTRAS

     目录          0  2014-05-19 15:34  Ch06svmMLiA

----------- ---------  ---------- -----  ----

               198331                    15


评论

共有 条评论