【机器学习代码例】LSSVM,python代码实例
机器学习算法
代码下载链接
最小二乘支持向量详解
目录
- 数据
- 导入包
- 导入数据
- 定义核函数
- 初始化实例
- 最小二乘法求 参数
- 对def leastSquares() 方法求参数 alphas,b 的解释说明
- 方程求解
- hstack() 堆栈数组水平顺序(列)
- vstack():堆栈数组垂直顺序(行)
- 预测
- 主函数
数据
导入包
from numpy import *
导入数据
def loadDataSet(filename):'''导入数据input: filename:文件名output:dataMat(list)样本特征labelMat(list)样本标签'''dataMat = []labelMat = []fr = open(filename)for line in fr.readlines():lineArr = line.strip().split('\t')dataMat.append([float(lineArr[0]),float(lineArr[1])])labelMat.append(float(lineArr[2]))return dataMat,labelMat
定义核函数
支持向量机的几种核函数
LSSVM
def kernelTrans(X,A,kTup):'''数据集中每一个数据向量与数据A的核函数值input: X--特征数据集A--输入向量kTup--核函数参量定义output: K--数据集中每一个数据向量与A的核函数值组成的矩阵'''# 本实验对该方法的调用# self.K[:,i] = kernelTrans(self.X, self.X[i,:], kTup)X = mat(X)m,n = shape(X)K = mat(zeros((m,1)))if kTup[0] == 'lin':# 线性函数K = X * A.Telif kTup[0] == 'rbf':# rbf 径向基函数# 对矩阵 K 的每一列的每一行进行核计算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 K
。。。。。。。
以上计算重复9次
初始化实例
class 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):# 对 矩阵 K 的每一列进行核计算self.K[:,i] = kernelTrans(self.X, self.X[i,:], kTup)print("i:",i)print("self.K:\n",self.K)# print(KKKKK)
循环9次
最小二乘法求 参数
def leastSquares(dataMatIn,classLabels,C,kTup):'''最小二乘法求解alpha序列input:dataMatIn(list):特征数据集classLabels(list):分类标签集C(float):参数,(松弛变量,允许有些数据点可以处于分隔面的错误一侧)kTup(string): 核函数类型和参数选择 output:b(float):w.T*x+b=y中的balphas(mat):alphas序列 '''# 调用 optStruct 方法,计算得到 核矩阵 K oS = optStruct(mat(dataMatIn),mat(classLabels).transpose(),C,kTup)# print("oS.X:\n",oS.X) # 100 * 2# print("oS.labelMat:\n",oS.labelMat) # 100 * 1# print("oS.C:\n",oS.C)# print("oS.m:\n",oS.m)# print("alphas:\n",oS.alphas)# print("oS.b:\n",oS.b) # 0# print("oS.K:\n",oS.K) ## print("oS.K.shape:\n",oS.K.shape) # 100 * 100# 打印自定义变量得到的参数 b ,alphas#1.参数设置unit = mat(ones((oS.m,1))) #[1,1,...,1].T# print("unit:\n",unit)I = eye(oS.m) # m 行 m 列的单位矩阵# print("I:\n",I)zero = mat(zeros((1,1)))# print("zero:\n",zero)# print("zero.shape:",zero.shape)# hstack():堆栈数组水平顺序(列)upmat = hstack((zero,unit.T)) # hstack((1,1),(1,m)) = (1,10)# print("upmat:\n",upmat)# print("upmat.shape:\n",upmat.shape)downmat = hstack((unit,oS.K + I/float(C))) # hstack((m,1),(m,m)+(m,m)) = (m,m+1)# print("downmat:\n",downmat)# print("downmat.shape:\n", downmat.shape)##2.方程求解#lssvm中求解方程的左边矩阵completemat = vstack((upmat,downmat)) # vstack((1,10),(9,10)) = (10,10)# print("completemat:\n",completemat)# print("completemat.shape:\n",completemat.shape)# lssvm中求解方程的右边矩阵rightmat = vstack((zero,oS.labelMat)) # vstack((1,1),(m,1)) = (m+1,1) # print("rightmat:\n",rightmat)# print("rightmat.shape",rightmat.shape)# completemat.I : completemat 的逆矩阵b_alpha = completemat.I * rightmat # 10 *1# print("b_alpha:\n",b_alpha)# print("b_alpha:\n",b_alpha.shape)oS.b = b_alpha[0,0]# print("oS.b:",oS.b)for i in range(oS.m):oS.alphas[i,0] = b_alpha[i+1,0]# print("oS.alphas:\n",oS.alphas)# print("oS.alphas.shape:\n",oS.alphas.shape)return oS.alphas,oS.b,oS.K
对def leastSquares() 方法求参数 alphas,b 的解释说明
方程求解
unit = mat(ones((oS.m,1))) # m行1列的 全1 矩阵
I = eye(oS.m) # m 行 m 列的单位矩阵
zero = mat(zeros((1,1))) # 1行1列的0矩阵
hstack() 堆栈数组水平顺序(列)
numpy中的stack操作:hstack()、vstack()、stack()、dstack()、vsplit()、concatenate()
upmat = hstack((zero,unit.T)) # hstack():堆栈数组水平顺序(列)
downmat = hstack((unit,oS.K + I/float(C)))
completemat = vstack((upmat,downmat)) #lssvm中求解方程的左边矩阵
vstack():堆栈数组垂直顺序(行)
rightmat = vstack((zero,oS.labelMat)) # lssvm中求解方程的右边矩阵
b_alpha = completemat.I * rightmat
oS.b = b_alpha[0,0]
for i in range(oS.m):oS.alphas[i,0] = b_alpha[i+1,0]
预测
def predict(alphas,b,dataMat,testVec):'''预测结果input:alphas(mat):Lagrange乘子序列b(float):分隔超平面的偏置dataMat()output:sign(float(predict_value))(int):预测样本的类别'''Kx = kernelTrans(dataMat,testVec,kTup) #可以对alphas进行稀疏处理找到更准确的值predict_value = Kx.T * alphas + b
# print('预测值为:%f'%predict_value)
# print('分类结果为:%f'%sign(float(predict_value)))return sign(float(predict_value))
主函数
if __name__ == '__main__':##1.导入数据print('-----------------------------1.Load Data-------------------------------')dataMat,labelMat = loadDataSet('testSetRBF.txt')# print("dataMat:\n",dataMat)# print("labelMat:\n",labelMat)C = 0.6k1 = 0.3kernel = 'rbf'print("kernel:",kernel) # 打印:kernel: rbfkTup = (kernel,k1)print("kTup:",kTup) # 打印:kTup:('rbf', 0.3)##2.训练模型print('----------------------------2.Train Model------------------------------')alphas,b,K = leastSquares(dataMat,labelMat,C,kTup)# print("alphas:\n",alphas)# print("b:\n",b)#3.计算训练误差print('----------------------------3.Calculate Train Error--------------------')error = 0.0Y_predict = []# print("训练集有 %int 条数据"%len(dataMat))for i in range(len(dataMat)):test = predict(alphas,b,dataMat,dataMat[i])Y_predict.append(test)if test != float(labelMat[i]):error +=1.0# print("Y_predict:\n",Y_predict)errorRate = error/len(dataMat)# print('---------------训练误差为:%f-------------------'%errorRate)
【机器学习代码例】LSSVM,python代码实例相关推荐
- 多层感知器用实际例子和Python代码进行解释情绪分析
多层感知器用实际例子和Python代码进行解释情绪分析 多层感知器是一种学习线性和非线性数据之间关系的神经网络. 这是专门介绍深度学习系列的第一篇文章,深度学习是一组机器学习方法,其根源可以追溯到20 ...
- 机器学习决策树DecisionTree以及python代码实现
机器学习决策树DecisionTree以及python代码实现 1.基本算法原理 2.选择最优特征进行划分 2.1信息增益 2.2信息增益率 2.3基尼系数 4.连续值以及缺失值的处理 4.1连续值的 ...
- 详解 Benders 分解与一个算例的 python 代码
听说过 benders 分解几年了,在生产管理.路径规划与选址问题中经常应用,一直没有细看,最近论文里面也见到,还是有必要了解一下它的基本思想与用法的. 目录 1. 基本思想 2. 线性规划模型与对偶 ...
- matlab代码重改python代码,对应函数
(2021)matlab代码重改python代码,对应函数--全!_Troublemaker丶的博客-CSDN博客
- 用Python代码自己写Python代码,竟如此简单
用Python代码自己写Python代码,竟如此简单 Python作为一门功能强大且使用灵活的编程语言,可以应用于各种领域,具有"无所不能"的特质. Python甚至可以代替人,自 ...
- 【机器学习】梯度下降 (python代码)
梯度下降 (python代码) 文章介绍 1.前提 2.代码实现 文章介绍 文章配图来自网络 个人学习笔记,推荐直接买课去学习 得懂python,本文代码可直接跑,环境基于[ PyCharm 2022 ...
- python 运行部分代码_改改Python代码,运行速度还能提升6万倍
如果摩尔定律注定终结,人类的算力会被「锁死」吗?MIT.英伟达.微软研究者合著的一篇 Science 论文告诉我们:不会. 这份最新研究指出,在后摩尔定律时代,人类所获得的的算力提升将更大程度上来源于 ...
- python神经网络代码_11行Python代码建立神经网络
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 用11行Python代码写出一个神经网络 通过构造一个裸骨神经网络来解释反向传播的内部工作原理. 概览:对 ...
- python100行代码-100行Python代码自动抢火车票!
今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool. 先准备好: 1)12306网站用户名和密码 2)chrome浏览器及下载chromedriver 3)下载Python代码,来自网络整理 ...
- python画图简单代码-简单画图 - python代码库 - 云代码
[python]代码库#使用turtle库绘制图形 #画出 NUESOFT #导入turtle库 使用import + 模块名 as 相当于起一个别名 import turtle as t #设置画布 ...
最新文章
- 五年之内博士会开始内卷吗?
- git reset 命令详解(一)—— Git 学习笔记 07
- [Leetcode总结] 98.验证二叉搜索树
- “象征界”的奇观:刘天怜花鸟工笔作品印象
- dropbox_来自提示框:望远镜激光瞄准器,Dropbox桌面和Kindle剪辑转换
- 我的内核学习笔记16:海思Hi3516平台PWM使用记录
- python对象属性是与数据有关的项目_python之对象产生,属性(定义的值)的查找原则,对象绑定关系...
- .Net转Java自学之路—Mybatis框架篇五(查询缓存)
- prototype 对象的进一步深入理解
- 第01课 OpenGL窗口(1)
- eslint+prettier+husky的配置说明
- JavaAndroid(2、Android开发环境搭建)
- ActionForm工作原理
- Java多线程 - 线程状态
- Linux下服务器密码正确,登录的时候却提示密码错误
- Ps如何把背景图片拉长并不变形!
- 来自 Repository 的一丝线索,Domain Model 再重新设计
- 洞见科技解决方案总监薛婧:联邦学习助力数据要素安全流通
- H5打开QQ聊天窗口
- 【Java】Java安装与配置指南