机器学习-RBF高斯核函数处理
SVM高斯核函数-RBF优化
重要了解数学的部分:
协方差矩阵,高斯核函数公式。
个人建议具体的求法还是看下面的核心代码吧,更好理解,反正就我个人而言,烦躁的公式,还不如一段代码来的实际。本来想用Java的一个叫jblas的矩阵包,但是想了想,还是自己动手写一下吧。加深一下自己理解。实现的语言用的是java孪生兄弟Scala。我想应该不难懂。矩阵变换用二位数组将就。
以下代码建议用scala命令行调试
核心代码
def TransposedMatrix(a:Array[Array[Double]]):Array[Array[Double]]={//返回转置矩阵
val length=a.length
val width=a(0).length
var TransposedM =Array.ofDim[Double](width,length)
for(i <- 0 to length-1)
for(j <- 0 to width-1) {
TransposedM(j)(i) = a(i)(j)
}
TransposedM
}
def R1(i:Int,j:Int,M:Array[Array[Double]]):Double={//R(i,j)=(第i列-第j列)*[(第i列-第j列)转置]
var sum:Double=0
for(x <- 0 to M.length-1)
sum+=Math.pow((M(x)(i)-M(x)(j)),2)
sum
}
def RowAverage(a:Array[Array[Double]]):Array[Double]={//返回列的均值,返回一个列矩阵
val length=a.length
val width=a(0).length
var b=new Array[Double](width)
for(i <- 0 to width-1)
for(j <- 0 to length-1)
b(i) += a(j)(i)
for(i <- 0 to width-1)
b(i)=b(i)/length
b
}
def sumOfRow(a:Array[Array[Double]]):Array[Double]={//返回矩阵列的和,返回一个列矩阵
val length=a.length
val width=a(0).length
var b=new Array[Double](width)
for(i <- 0 to width-1)
for(j <- 0 to length-1)
b(i) += a(j)(i)
for(i <- 0 to width-1)
b(i)=b(i)
b
}
def sum(i:Int,j:Int,a:Array[Array[Double]]):Double={//i列乘j列的转置
var result:Double=0
for(x<- 0 to a.length-1)
result +=(a(x)(i)*a(x)(j))
result
}
def cov(a:Array[Array[Double]]):Array[Array[Double]]={//将特征矩阵作为参数,返回协方差矩阵
val m1=TransposedMatrix(a)
val m2=RowAverage(m1)
val m3=datasort(m1,m2)//将矩阵中心化
val width=m3(0).length
var b =Array.ofDim[Double](width,width)
for(i <- 0 to width-1)
for(j <- 0 to width-1)
b(i)(j)=sum(i,j,m3)
b
}
def datasort(a:Array[Array[Double]],b:Array[Double]):Array[Array[Double]]={//矩阵中心化,将每列减去列的均值
for(i <- 0 to a(0).length-1)
for(j <- 0 to a.length-1)
a(j)(i) -= b(i)
a
}
def gaussMatrix(a:Array[Array[Double]],delta:Array[Double]):Array[Array[Double]]={//a为特征矩阵,delta为协方差矩阵列之和,返回高斯核函数矩阵
val b=TransposedMatrix(a)
val length=b(0).length
var R =Array.ofDim[Double](length,length)
for(i <- 0 to length-1)
for(j <- 0 to length-1)
R(i)(j)=Math.exp(-R1(i,j,b)/delta(j))
R
}
val test=Array(Array(2.0, 8.0), Array(3.0, 6.0), Array(9.0, 2.0))
val test2=cov(test)
val rowOfsum=sumOfRow(res65)
gaussMatrix(test,rowOfsum)
欢迎各位看官大爷批评指教。
感谢下面百度知道回复的朋友,实现的代码段很多得到他的启示。
http://zhidao.baidu.com/link?url=-u5LznclWQ0LbvEx3DB8sofohyP7nJCWws78TsWBNaDR15rDn-7ENoRealHRIM8W8ycioegl_NGAFzQJ33PbZ90ACQQ7eLf8HgR7DAQUJjS
机器学习-RBF高斯核函数处理的更多相关文章
- 机器学习:SVM(核函数、高斯核函数RBF)
一.核函数(Kernel Function) 1)格式 K(x, y):表示样本 x 和 y,添加多项式特征得到新的样本 x'.y',K(x, y) 就是返回新的样本经过计算得到的值: 在 SVM 类 ...
- 【机器学习】SVM核函数
知识预备 1. 回顾:logistic回归出发,引出了SVM,即支持向量机[续]. 2. Mercer定理:如果函数K是上的映射(也就是从两个n维向量映射到实数域).那么如果K是一个有效核函数(也称 ...
- RBF高斯径向基核函数【转】
XVec表示X向量.||XVec||表示向量长度.r表示两点距离.r^2表示r的平方.k(XVec,YVec) = exp(-1/(2*sigma^2)*(r^2))= exp(-gamma*r^2) ...
- 机器学习之高斯混合模型及EM算法
第一部分: 这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类 ...
- 吴裕雄 python 机器学习——混合高斯聚类GMM模型
import numpy as np import matplotlib.pyplot as plt from sklearn import mixture from sklearn.metrics ...
- 机器学习 : 高斯混合模型及EM算法
Mixtures of Gaussian 这一讲,我们讨论利用EM (Expectation-Maximization)做概率密度的估计.假设我们有一组训练样本x(1),x(2),...x(m),因为 ...
- 机器学习-SVM-手写识别问题
机器学习-SVM-手写识别问题 这里我们解决的还是之前用KNN曾经解决过的手写识别问题(https://www.cnblogs.com/jiading/p/11622019.html),但相比于KNN ...
- SVM-支持向量机总结
一.SVM简介 (一)Support Vector Machine 支持向量机(SVM:Support Vector Machine)是机器学习中常见的一种分类算法. 线性分类器,也可以叫做感知机,其 ...
- 《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
说在前面:前几天,公众号不是给大家推送了第二篇关于决策树的文章嘛.阅读过的读者应该会发现,在最后排版已经有点乱套了.真的很抱歉,也不知道咋回事,到了后期Markdown格式文件的内容就解析出现问题了, ...
随机推荐
- dijkstra算法为什么不能有负边?
因为Dijkstra算法在计算最短路径时,不会因为负边的出现而更新已经计算过(收录过)的顶点的路径长度, 这样一来,在存在负边的图中,就可能有某些顶点最终计算出的路径长度不是最短的长度. 假设前两个数 ...
- python进程间通信 queue pipe
python进程间通信 1 python提供了多种进程通信的方式,主要Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信 1.1 Queue有两个方法: Put ...
- css 垂直+水平居中
垂直+水平居中是一个老生常谈的问题了,现在就固定高度和不固定高度两种情况去讨论 1.父盒子固定高度[定位] 实现1: father-box: position:relative child-box:p ...
- Spring Boot:Boot2.0版本整合Neo4j
前面介绍了Boot 1.5版本集成Neo4j,Boot 2.0以上版本Neo4j变化较大. 场景还是电影人员关系 Boot 2.0主要变化 GraphRepository在Boot2.0下不支持了,调 ...
- 如何用最暴力的方法改写Liferay的原生portlet
最近在论坛上看到有人问如何改写Liferay原有的calendar portlet. 然后研究了一下,直接从portal中把calendar portlet的源码拷贝出来,然后修改再部署上去,但是这个 ...
- PHP来控制Linux,ssh2来控制服务器端
注意:我们用PHP来控制Linux,php环境可以在windows也可以在linux,但是我们要控制的机器是一台linux(被控制的linux关闭selinux和firewalld). 如果php在l ...
- Beetl 3中文文档 转载 http://ibeetl.com/guide/
Beetl作者:李家智(闲大赋) <xiandafu@126.com> 1. 什么是Beetl 广告:闲大赋知识星球,付费会员 Beetl( 发音同Beetle ) 目前版本是3.0.7, ...
- 【JZOJ4810】【NOIP2016提高A组五校联考1】道路规划
题目描述 输入 输出 样例输入 5 1 4 5 2 3 3 4 2 1 5 样例输出 3 数据范围 样例解释 解法 模型显然. 设第一列为a[],第二列为b[],f[i]为前i个数的最大答案. 顺序枚 ...
- day39-Spring 12-Spring的JDBC模板:快速入门
Spring AOP的关键是它的底层的原理和思想,配置和使用并不是十分困难.AOP本身就是一个思想,是面向对象的延伸,不是用来替换面向对象的,而是用来解决面向对象中的一些问题的.在最初的时候提出过一个 ...
- 2019-4-29-dotnet-core-通过-frp-发布自己的网站
title author date CreateTime categories dotnet core 通过 frp 发布自己的网站 lindexi 2019-04-29 12:26:45 +0800 ...