• 大小: 491KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: Python
  • 标签: svm  python  

资源简介

python实现支持向量机svm算法,主要用于数值型数据的二分类算法

资源截图

代码片段和文件信息

#coding:UTF-8
import numpy as np
import pickle as pickle

class SVM:
    def __init__(self dataSet labels C toler kernel_option):
        self.train_x = dataSet # 训练特征
        self.train_y = labels  # 训练标签
        self.C = C # 惩罚参数
        self.toler = toler     # 迭代的终止条件之一
        self.n_samples = np.shape(dataSet)[0] # 训练样本的个数
        self.alphas = np.mat(np.zeros((self.n_samples 1))) # 拉格朗日乘子
        self.b = 0
        self.error_tmp = np.mat(np.zeros((self.n_samples 2))) # 保存E的缓存
        self.kernel_opt = kernel_option # 选用的核函数及其参数
        self.kernel_mat = calc_kernel(self.train_x self.kernel_opt) # 核函数的输出

def cal_kernel_value(train_x train_x_i kernel_option):
    ‘‘‘样本之间的核函数的值
    input:  train_x(mat):训练样本
            train_x_i(mat):第i个训练样本
            kernel_option(tuple):核函数的类型以及参数
    output: kernel_value(mat):样本之间的核函数的值
            
    ‘‘‘
    kernel_type = kernel_option[0] # 核函数的类型,分为rbf和其他
    m = np.shape(train_x)[0] # 样本的个数
    
    kernel_value = np.mat(np.zeros((m 1)))
    
    if kernel_type == ‘rbf‘: # rbf核函数
        sigma = kernel_option[1]
        if sigma == 0:
            sigma = 1.0
        for i in range(m):
            diff = train_x[i :] - train_x_i
            kernel_value[i] = np.exp(diff * diff.T / (-2.0 * sigma**2))
    else: # 不使用核函数
        kernel_value = train_x * train_x_i.T
    return kernel_value


def calc_kernel(train_x kernel_option):
    ‘‘‘计算核函数矩阵
    input:  train_x(mat):训练样本的特征值
            kernel_option(tuple):核函数的类型以及参数
    output: kernel_matrix(mat):样本的核函数的值
    ‘‘‘
    m = np.shape(train_x)[0] # 样本的个数
    kernel_matrix = np.mat(np.zeros((m m))) # 初始化样本之间的核函数值
    for i in range(m):
        kernel_matrix[: i] = cal_kernel_value(train_x train_x[i :] kernel_option)
    return kernel_matrix

def cal_error(svm alpha_k):
    ‘‘‘误差值的计算
    input:  svm:SVM模型
            alpha_k(int):选择出的变量
    output: error_k(float):误差值
    ‘‘‘
    output_k = float(np.multiply(svm.alphas svm.train_y).T * svm.kernel_mat[: alpha_k] + svm.b)
    error_k = output_k - float(svm.train_y[alpha_k])
    return error_k


def update_error_tmp(svm alpha_k):
    ‘‘‘重新计算误差值
    input:  svm:SVM模型
            alpha_k(int):选择出的变量
    output: 对应误差值
    ‘‘‘
    error = cal_error(svm alpha_k)
    svm.error_tmp[alpha_k] = [1 error]

def select_second_sample_j(svm alpha_i error_i):
    ‘‘‘选择第二个样本
    input:  svm:SVM模型
            alpha_i(int):选择出的第一个变量
            error_i(float):E_i
    output: alpha_j(int):选择出的第二个变量
            error_j(float):E_j
    ‘‘‘
    # 标记为已被优化
    svm.error_tmp[alpha_i] = [1 error_i]
    candidateAlphaList = np.nonzero(svm.error_tmp[: 0].A)[0]
    
    maxStep = 0
    alpha_j = 0
    error_j = 0

    if len(candidateAlphaList) > 1:
        for alpha_k in candidateAlphaList:
            if alpha_k == alpha_i: 
                continue
            error_k = cal_error(svm alpha_k)
            if abs(error_k - error_i) > maxStep:
                maxStep = abs(error_k - error_i)
                

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

     文件      15958  2018-05-11 11:51  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\readme.docx

     文件      27670  2018-05-11 11:13  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\heart_scale

     文件     620514  2018-05-11 11:46  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\model_file

     文件        318  2018-05-11 11:48  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\result

     文件       9710  2018-05-11 11:46  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\svm.py

     文件       2418  2018-05-11 11:48  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\svm_test.py

     文件       6877  2018-05-11 11:13  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\svm_test_data

     文件       1769  2018-05-11 11:30  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\svm_train.py

     文件       6662  2018-05-11 11:46  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\__pycache__\svm.cpython-36.pyc

     文件      37193  2018-05-11 11:47  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\svm.jpg

     目录          0  2018-05-11 11:51  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM\__pycache__

     目录          0  2018-05-11 11:51  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码\SVM

     目录          0  2018-05-12 15:01  Python实现支持向量机算法SVM源代码\Python实现支持向量机算法SVM源代码

     目录          0  2019-03-03 19:12  Python实现支持向量机算法SVM源代码

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

               729089                    14


评论

共有 条评论