机器学习算法

代码下载链接

最小二乘支持向量详解

目录

  • 数据
  • 导入包
  • 导入数据
  • 定义核函数
  • 初始化实例
  • 最小二乘法求 参数
    • 对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代码实例相关推荐

  1. 多层感知器用实际例子和Python代码进行解释情绪分析

    多层感知器用实际例子和Python代码进行解释情绪分析 多层感知器是一种学习线性和非线性数据之间关系的神经网络. 这是专门介绍深度学习系列的第一篇文章,深度学习是一组机器学习方法,其根源可以追溯到20 ...

  2. 机器学习决策树DecisionTree以及python代码实现

    机器学习决策树DecisionTree以及python代码实现 1.基本算法原理 2.选择最优特征进行划分 2.1信息增益 2.2信息增益率 2.3基尼系数 4.连续值以及缺失值的处理 4.1连续值的 ...

  3. 详解 Benders 分解与一个算例的 python 代码

    听说过 benders 分解几年了,在生产管理.路径规划与选址问题中经常应用,一直没有细看,最近论文里面也见到,还是有必要了解一下它的基本思想与用法的. 目录 1. 基本思想 2. 线性规划模型与对偶 ...

  4. matlab代码重改python代码,对应函数

    (2021)matlab代码重改python代码,对应函数--全!_Troublemaker丶的博客-CSDN博客

  5. 用Python代码自己写Python代码,竟如此简单

    用Python代码自己写Python代码,竟如此简单 Python作为一门功能强大且使用灵活的编程语言,可以应用于各种领域,具有"无所不能"的特质. Python甚至可以代替人,自 ...

  6. 【机器学习】梯度下降 (python代码)

    梯度下降 (python代码) 文章介绍 1.前提 2.代码实现 文章介绍 文章配图来自网络 个人学习笔记,推荐直接买课去学习 得懂python,本文代码可直接跑,环境基于[ PyCharm 2022 ...

  7. python 运行部分代码_改改Python代码,运行速度还能提升6万倍

    如果摩尔定律注定终结,人类的算力会被「锁死」吗?MIT.英伟达.微软研究者合著的一篇 Science 论文告诉我们:不会. 这份最新研究指出,在后摩尔定律时代,人类所获得的的算力提升将更大程度上来源于 ...

  8. python神经网络代码_11行Python代码建立神经网络

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 用11行Python代码写出一个神经网络 通过构造一个裸骨神经网络来解释反向传播的内部工作原理. 概览:对 ...

  9. python100行代码-100行Python代码自动抢火车票!

    今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool. 先准备好: 1)12306网站用户名和密码 2)chrome浏览器及下载chromedriver 3)下载Python代码,来自网络整理 ...

  10. python画图简单代码-简单画图 - python代码库 - 云代码

    [python]代码库#使用turtle库绘制图形 #画出 NUESOFT #导入turtle库 使用import + 模块名 as 相当于起一个别名 import turtle as t #设置画布 ...

最新文章

  1. 五年之内博士会开始内卷吗?
  2. git reset 命令详解(一)—— Git 学习笔记 07
  3. [Leetcode总结] 98.验证二叉搜索树
  4. “象征界”的奇观:刘天怜花鸟工笔作品印象
  5. dropbox_来自提示框:望远镜激光瞄准器,Dropbox桌面和Kindle剪辑转换
  6. 我的内核学习笔记16:海思Hi3516平台PWM使用记录
  7. python对象属性是与数据有关的项目_python之对象产生,属性(定义的值)的查找原则,对象绑定关系...
  8. .Net转Java自学之路—Mybatis框架篇五(查询缓存)
  9. prototype 对象的进一步深入理解
  10. 第01课 OpenGL窗口(1)
  11. eslint+prettier+husky的配置说明
  12. JavaAndroid(2、Android开发环境搭建)
  13. ActionForm工作原理
  14. Java多线程 - 线程状态
  15. Linux下服务器密码正确,登录的时候却提示密码错误
  16. Ps如何把背景图片拉长并不变形!
  17. 来自 Repository 的一丝线索,Domain Model 再重新设计
  18. 洞见科技解决方案总监薛婧:联邦学习助力数据要素安全流通
  19. H5打开QQ聊天窗口
  20. 【Java】Java安装与配置指南

热门文章

  1. html年会抽奖代码实例,基于JavaScript实现简单抽奖功能代码实例
  2. Angular4_获取当前Url地址和获取Url传递的参数
  3. 笔记本外接显示器后分辨率无法调回到正常模式
  4. nessus在kali中的安装与详细使用
  5. 王童:知行合一 · 当大数据遇到生物学 | 优秀毕业生专访
  6. OpenFOAM-多孔介质模型(porous media)
  7. 日本语能力测试考点地址及联系方式
  8. Java自动生成数据库设计文档(Word)
  9. Python 声音降噪
  10. 汉语言编程不得不说的八款软件