資源簡介
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
- 上一篇:python批量灰度化處理圖片
- 下一篇:機器學習之KNN識別驗證碼
評論
共有 條評論