From 3cb8b37cd0b11b8a880410ef9e38d3a7a3a6c8ea Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 19 Apr 2017 23:52:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A06.SVM=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E4=B8=AD2=E4=B8=AA=E9=97=AE=E9=A2=98=E7=9A=84=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/python/6.SVM/svm-complete.py | 4 ++-- src/python/6.SVM/svm-complete_Non-Kernel.py | 4 ++-- src/python/6.SVM/svm-simple.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/python/6.SVM/svm-complete.py b/src/python/6.SVM/svm-complete.py index aed2e954..743f096a 100644 --- a/src/python/6.SVM/svm-complete.py +++ b/src/python/6.SVM/svm-complete.py @@ -247,8 +247,7 @@ def innerL(i, oS): return 0 # eta是alphas[j]的最优修改量,如果eta==0,需要退出for循环的当前迭代过程 - # 如果ETA为0,那么计算新的alphas[j]就比较麻烦了, 为什么呢? 因为2个值一样。 - # 2ab <= a^2 + b^2 + # 类似:2ab <= a^2 + b^2 eta = 2.0 * oS.K[i, j] - oS.K[i, i] - oS.K[j, j] # changed for kernel if eta >= 0: print("eta>=0") @@ -274,6 +273,7 @@ def innerL(i, oS): # 在对alpha[i], alpha[j] 进行优化之后,给这两个alpha值设置一个常数b。 # w= Σ[1~n] ai*yi*xi => b = yi- Σ[1~n] ai*yi(xi*xj) # 所以: b1 - b = (y1-y) - Σ[1~n] yi*(a1-a)*(xi*x1) + # 为什么减2遍? 因为是 减去Σ[1~n],当好2个变量i和j,所以减2遍 b1 = oS.b - Ei - oS.labelMat[i] * (oS.alphas[i] - alphaIold) * oS.K[i, i] - oS.labelMat[j] * (oS.alphas[j] - alphaJold) * oS.K[i, j] b2 = oS.b - Ej - oS.labelMat[i] * (oS.alphas[i] - alphaIold) * oS.K[i, j] - oS.labelMat[j] * (oS.alphas[j] - alphaJold) * oS.K[j, j] if (0 < oS.alphas[i]) and (oS.C > oS.alphas[i]): diff --git a/src/python/6.SVM/svm-complete_Non-Kernel.py b/src/python/6.SVM/svm-complete_Non-Kernel.py index dcc8897a..6f2dd1dc 100644 --- a/src/python/6.SVM/svm-complete_Non-Kernel.py +++ b/src/python/6.SVM/svm-complete_Non-Kernel.py @@ -196,8 +196,7 @@ def innerL(i, oS): return 0 # eta是alphas[j]的最优修改量,如果eta==0,需要退出for循环的当前迭代过程 - # 如果ETA为0,那么计算新的alphas[j]就比较麻烦了, 为什么呢? 因为2个值一样。 - # 2ab <= a^2 + b^2 + # 类似:2ab <= a^2 + b^2 eta = 2.0 * oS.X[i, :] * oS.X[j, :].T - oS.X[i, :] * oS.X[i, :].T - oS.X[j, :] * oS.X[j, :].T if eta >= 0: print("eta>=0") @@ -223,6 +222,7 @@ def innerL(i, oS): # 在对alpha[i], alpha[j] 进行优化之后,给这两个alpha值设置一个常数b。 # w= Σ[1~n] ai*yi*xi => b = yj Σ[1~n] ai*yi(xi*xj) # 所以: b1 - b = (y1-y) - Σ[1~n] yi*(a1-a)*(xi*x1) + # 为什么减2遍? 因为是 减去Σ[1~n],当好2个变量i和j,所以减2遍 b1 = oS.b - Ei - oS.labelMat[i] * (oS.alphas[i] - alphaIold) * oS.X[i, :] * oS.X[i, :].T - oS.labelMat[j] * (oS.alphas[j] - alphaJold) * oS.X[i, :] * oS.X[j, :].T b2 = oS.b - Ej - oS.labelMat[i] * (oS.alphas[i] - alphaIold) * oS.X[i, :] * oS.X[j, :].T - oS.labelMat[j] * (oS.alphas[j] - alphaJold) * oS.X[j, :] * oS.X[j, :].T if (0 < oS.alphas[i]) and (oS.C > oS.alphas[i]): diff --git a/src/python/6.SVM/svm-simple.py b/src/python/6.SVM/svm-simple.py index 852371a5..990fba0d 100644 --- a/src/python/6.SVM/svm-simple.py +++ b/src/python/6.SVM/svm-simple.py @@ -127,8 +127,7 @@ def smoSimple(dataMatIn, classLabels, C, toler, maxIter): continue # eta是alphas[j]的最优修改量,如果eta==0,需要退出for循环的当前迭代过程 - # 如果ETA为0,那么计算新的alphas[j]就比较麻烦了, 为什么呢? 因为2个值一样。 - # 2ab <= a^2 + b^2 + # 类似:2ab <= a^2 + b^2 eta = 2.0 * dataMatrix[i, :]*dataMatrix[j, :].T - dataMatrix[i, :]*dataMatrix[i,:].T - dataMatrix[j, :]*dataMatrix[j, :].T if eta >= 0: print("eta>=0") @@ -147,6 +146,7 @@ def smoSimple(dataMatIn, classLabels, C, toler, maxIter): # 在对alpha[i], alpha[j] 进行优化之后,给这两个alpha值设置一个常数b。 # w= Σ[1~n] ai*yi*xi => b = yj- Σ[1~n] ai*yi(xi*xj) # 所以: b1 - b = (y1-y) - Σ[1~n] yi*(a1-a)*(xi*x1) + # 为什么减2遍? 因为是 减去Σ[1~n],当好2个变量i和j,所以减2遍 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 if (0 < alphas[i]) and (C > alphas[i]):