最小二乘支持向量机的分析与改进及Python实现
WLSSVM最小二乘支持向量机
- 1. LSSVM的简单理解
- 2. WLSSVM
- 3. WLSSVM的Python实现
1. LSSVM的简单理解
LSSVM通过训练数据学习回归方程,将自变量映射到更高维特征空间。
LSSVM回归模型的优化思想是使离回归平面距离最大的样本与回归平面之间的距离最小。
优化问题就转化为:
因此,LSSVM回归模型输出为:
LSSVM模型的缺点:缺少稀疏性,对于每一次预测都需要所有训练数据参与。
因为LSSVM模型求解中的Lagrange乘子都是非零数值,只有当误差变量ei的分布符合高斯分布时,支持向量数值的估计才是最优的。
2. WLSSVM
1.求解LSSVM模型的优化问题,求解出Lagrange乘子序列和误差ei序列。
2.将误差ei序列变为高斯分布的每一个误差ei的权重vi。
3.代入Vi序列,并求解WLSSVM的优化模型。
4.模型的稀疏化。
3. WLSSVM的Python实现
from numpy import *def loadDataSet(filename):'''导入数据input: filename:文件名'''dataMat = []labelMat = []fr = open(filename)for line in fr.readlines():lineArr = line.strip().split('\t')dataMat.append(float(lineArr[0]))labelMat.append(float(lineArr[1]))return mat(dataMat).T,mat(labelMat).Tdef kernelTrans(X,A,kTup):'''数据集中每一个数据向量与A的核函数值input: X--特征数据集A--输入向量kTup--核函数参量定义output: K--数据集中每一个数据向量与A的核函数值组成的矩阵'''X = mat(X)m,n = shape(X)K = mat(zeros((m,1)))if kTup[0] == 'lin':K = X * A.Telif kTup[0] == 'rbf':for j in range(m):deltaRow = X[j] - AK[j] = deltaRow * deltaRow.TK = exp(K/(-1 * kTup[1] ** 2))else: raise NameError('Houston We Have a Problem ,That Kernel is not recognized')return Kclass optStruct:def __init__(self,dataMatIn,classLabels,C,kTup):self.X = dataMatInself.labelMat = classLabelsself.C = Cself.m = shape(dataMatIn)[0]self.alphas = mat(zeros((self.m,1)))self.b = 0self.K = mat(zeros((self.m,self.m))) #特征数据集合中向量两两核函数值组成的矩阵,[i,j]表示第i个向量与第j个向量的核函数值for i in range(self.m):self.K[:,i] = kernelTrans(self.X, self.X[i,:], kTup)def leastSquares(dataMatIn,classLabels,C,kTup):'''最小二乘法求解alpha序列input:dataMatIn:特征数据集classLabels:分类标签集C:参数,(松弛变量,允许有些数据点可以处于分隔面的错误一侧)kTup: 核函数类型和参数选择 output:b--w.T*x+b=y中的balphas:alphas序列 '''##1.参数设置oS = optStruct(dataMatIn,classLabels,C,kTup)unit = mat(ones((oS.m,1))) #[1,1,...,1].TI = eye(oS.m)zero = mat(zeros((1,1)))upmat = hstack((zero,unit.T))downmat = hstack((unit,oS.K + I/float(C)))##2.方程求解completemat = vstack((upmat,downmat)) #lssvm中求解方程的左边矩阵rightmat = vstack((zero,oS.labelMat)) # lssvm中求解方程的右边矩阵b_alpha = completemat.I * rightmat##3.导出偏置b和Lagrange乘子序列oS.b = b_alpha[0,0]for i in range(oS.m):oS.alphas[i,0] = b_alpha[i+1,0]e = oS.alphas/Creturn oS.alphas,oS.b,edef weights(e):'''计算权重序列input:e(mat):LSSVM误差矩阵output:v(mat):权重矩阵'''##1.参数设置c1 = 2.5c2 = 3m = shape(e)[0]v = mat(zeros((m,1)))v1 = eye(m)q1 = int(m/4.0)q3 = int((m*3.0)/4.0)e1 = []shang = mat(zeros((m,1)))##2.误差序列从小到大排列for i in range(m):e1.append(e[i,0])e1.sort()##3.计算误差序列第三四分位与第一四分位的差IQR = e1[q3] - e1[q1]##4.计算s的值s = IQR/(2 * 0.6745)##5.计算每一个误差对应的权重for j in range(m):shang[j,0] = abs(e[j,0]/s)for x in range(m):if shang[x,0] <= c1:v[x,0] = 1.0if shang[x,0] > c1 and shang[x,0] <= c2:v[x,0] = (c2 - shang[x,0])/(c2 - c1)if shang[x,0] > c2:v[x,0] = 0.0001v1[x,x] = 1/float(v[x,0])return v1def weightsleastSquares(dataMatIn,classLabels,C,kTup,v1):'''最小二乘法求解alpha序列input:dataMatIn:特征数据集classLabels:分类标签集C:参数,(松弛变量,允许有些数据点可以处于分隔面的错误一侧)kTup: 核函数类型和参数选择 output:b--w.T*x+b=y中的balphas:alphas序列 '''##1.参数设置oS = optStruct(dataMatIn,classLabels,C,kTup)unit = mat(ones((oS.m,1))) #[1,1,...,1].T#I = eye(oS.m)gamma = kTup[1]zero = mat(zeros((1,1)))upmat = hstack((zero,unit.T))downmat = hstack((unit,oS.K + v1/float(C)))##2.方程求解completemat = vstack((upmat,downmat)) #lssvm中求解方程的左边矩阵rightmat = vstack((zero,oS.labelMat)) # lssvm中求解方程的右边矩阵b_alpha = completemat.I * rightmat##3.导出偏置b和Lagrange乘子序列oS.b = b_alpha[0,0]for i in range(oS.m):oS.alphas[i,0] = b_alpha[i+1,0]e = oS.alphas/Creturn oS.alphas,oS.bdef predict(alphas,b,dataMat):'''预测结果input:alphas(mat):WLSSVM模型的Lagrange乘子序列b(float):WLSSVM模型回归方程的偏置dataMat(mat):测试样本集output:predict_result(mat):测试结果'''m,n = shape(dataMat)predict_result = mat(zeros((m,1)))for i in range(m):Kx = kernelTrans(dataMat,dataMat[i,:],kTup) #可以对alphas进行稀疏处理找到更准确的值 predict_result[i,0] = Kx.T * alphas + b return predict_resultdef predict_average_error(predict_result,label):'''计算平均预测误差input:predict_result(mat):预测结果label(mat):实际结果output:average_error(float):平均误差'''m,n = shape(predict_result)error = 0.0for i in range(m):error += abs(predict_result[i,0] - label[i,0])average_error = error / mreturn average_errorif __name__ == '__main__':##1.数据导入print('--------------------Load Data------------------------')dataMat,labelMat = loadDataSet('sine.txt')##2.参数设置print('--------------------Parameter Setup------------------')C = 0.6k1 = 0.3kernel = 'rbf'kTup = (kernel,k1)##3.求解LSSVM模型print('-------------------Save LSSVM Model-----------------')alphas,b,e = leastSquares(dataMat,labelMat,C,kTup)##4.计算误差权重print('----------------Calculate Error Weights-------------')v1 = weights(e)##5.求解WLSSVM模型print('------------------Save WLSSVM Model--------------- -')alphas1,b1 = weightsleastSquares(dataMat,labelMat,C,kTup,v1)##6.预测结果print('------------------Predict Result------------------ -')predict_result = predict(alphas1,b1,dataMat)##7.平均误差print('-------------------Average Error------------------ -')average_error = predict_average_error(predict_result,labelMat)
最小二乘支持向量机的分析与改进及Python实现相关推荐
- 【lssvm预测模型】基于蝙蝠算法改进的最小二乘支持向量机lssvm预测
1 简介 为了提高短期电力负荷预测结果的准确性,该文提出了蝙蝠算法优化最小二乘支持向量机(BA-LSSVM)的方法.该方法利用蝙蝠算法对最小二乘支持向量机的核函数参数进行优化,并用优化后的参数建立短期 ...
- 【LSSVM回归预测】基于matlab人工蜂群算法优化最小二乘支持向量机LSSVM数据回归预测【含Matlab源码 2213期】
⛄一.人工蜂群算法优化最小二乘支持向量机LSSVM简介 1 最小二乘支持向量机 最小二乘支持向量机是支持向量机的一种改进算法[9,10],它将SVM算法中的不等式约束转化为等式约束,采用最小二乘线性系 ...
- 【回归预测-lssvm分类】基于最小二乘支持向量机lssvm实现数据分类代码
1 内容介绍 在信息爆炸的新时代,由于全球科技与经济迅猛发展,数据充斥在各行各业,数据的结构也变得多样化.其中对于数据的分类最常见,伴随着数据分类的同时出现两大处理难点,一个是非均衡问题,另一个就是高 ...
- 【lssvm预测】基于天鹰算法优化最小二乘支持向量机lssvm实现数据回归预测附matlab代码
1 简介 短时交通流预测是实现智能交通控制与管理,交通流状态辨识和实时交通流诱导的前提及关键,也是智能化交通管理的客观需要.到目前为止,它的研究结果都不尽如人意.现有的以精确数学模型为基础的传统预测方 ...
- 粒子群优化最小二乘支持向量机SVM回归分析,pso-lssvm回归预测
目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 SVM应用实例,粒子群优化最小二乘支持向量机SVM回归分析 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(su ...
- 【lssvm预测】基于花朵授粉算法优化最小二乘支持向量机lssvm实现预测附matlab代码
1 简介 短时交通流预测是实现智能交通控制与管理,交通流状态辨识和实时交通流诱导的前提及关键,也是智能化交通管理的客观需要.到目前为止,它的研究结果都不尽如人意.现有的以精确数学模型为基础的传统预测方 ...
- 最小二乘支持向量机预测matlab实现,最小二乘支持向量机及其 Pre-computed Kernel 的 matlab 实现...
1. 最小二乘支持向量机的推导 与支持向量机(Support Vector Machines, SVM)不同,Suykens 等提出的最小二乘支持向量机(Least Squared Support V ...
- 【LSSVM回归预测】人工蜂群算法优化最小二乘支持向量机LSSVM数据回归预测【含Matlab源码 2213期】
⛄一.人工蜂群算法优化最小二乘支持向量机LSSVM简介 1 最小二乘支持向量机 最小二乘支持向量机是支持向量机的一种改进算法[9,10],它将SVM算法中的不等式约束转化为等式约束,采用最小二乘线性系 ...
- 应用支持向量机(SVM)实现图像分类——Python
应用支持向量机(SVM)实现图像分类--Python 文章目录 1.代码运行 2.注意事项 3.代码分析 4.源代码 1.代码运行 输入 1 测试一张图片并预测结果 输入 2 对测试集整体进行测试,得 ...
最新文章
- saltstack 服务配置
- java的销毁方法_销毁Spring Bean的三种方法
- 【sklearn学习】集成算法之梯度提升树GBDT
- 【Modern OpenGL】纹理 Textures
- 写一个公用的gpio口驱动
- Centos7.x 在线安装Docker和离线安装 Docker
- CYP音乐emlog主题免费版 炫酷黑色主题
- 计算机单机考试,信息技术考试系统(单机版)
- matlab幂级数展开的收敛区间,常见函数的幂级数展开式收敛区间的快速确定法.pdf...
- 8. 数仓开发之 DIM 层
- 为何苹果赚取智能手机市场大部分利润?
- 直流电源输入防反接保护电路总结
- 【实操】下载在线m3u8视频为本地mp4
- Elasticsearch索引yellow修复
- 使用Eclipse搭建STM32嵌入式开发环境
- linux如何永久获取root,Linux如何获取root权限?我只想到这些方法了,欢迎补充
- 一对同居男女同一天的日记
- 2020年全球救市两种方法的分析,从世界高度来理解富人思维
- [学习笔记]模拟退火
- 多个txt文件合并成一个文本