MCPcopy Create free account
hub / github.com/Dod-o/Statistical-Learning-Method_Code / calcKernel

Method calcKernel

SVM/SVM.py:84–118  ·  view source on GitHub ↗

计算核函数 使用的是高斯核 详见“7.3.3 常用核函数” 式7.90 :return: 高斯核矩阵

(self)

Source from the content-addressed store, hash-verified

82
83
84 def calcKernel(self):
85 '''
86 计算核函数
87 使用的是高斯核 详见“7.3.3 常用核函数” 式7.90
88 :return: 高斯核矩阵
89 '''
90 #初始化高斯核结果矩阵 大小 = 训练集长度m * 训练集长度m
91 #k[i][j] = Xi * Xj
92 k = [[0 for i in range(self.m)] for j in range(self.m)]
93
94 #大循环遍历Xi,Xi为式7.90中的x
95 for i in range(self.m):
96 #每100个打印一次
97 #不能每次都打印,会极大拖慢程序运行速度
98 #因为print是比较慢的
99 if i % 100 == 0:
100 print('construct the kernel:', i, self.m)
101 #得到式7.90中的X
102 X = self.trainDataMat[i, :]
103 #小循环遍历Xj,Xj为式7.90中的Z
104 # 由于 Xi * Xj 等于 Xj * Xi,一次计算得到的结果可以
105 # 同时放在k[i][j]和k[j][i]中,这样一个矩阵只需要计算一半即可
106 #所以小循环直接从i开始
107 for j in range(i, self.m):
108 #获得Z
109 Z = self.trainDataMat[j, :]
110 #先计算||X - Z||^2
111 result = (X - Z) * (X - Z).T
112 #分子除以分母后去指数,得到的即为高斯核结果
113 result = np.exp(-1 * result / (2 * self.sigma**2))
114 #将Xi*Xj的结果存放入k[i][j]和k[j][i]中
115 k[i][j] = result
116 k[j][i] = result
117 #返回高斯核矩阵
118 return k
119
120 def isSatisfyKKT(self, i):
121 '''

Callers 1

__init__Method · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected