⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernel.h

📁 使用KernelBDA实现三维模型相关反馈的算法注:1、使用本系统必须在本地计算机上安装matlab 2、算法使用的三维模型特征向量是从PSB模型库中自动提取的DESIRE三维模型特征向量 3、本
💻 H
字号:
#pragma once
#include <math.h>

typedef float Qfloat;template <class T> inline void swap(T& x, T& y) { T t=x; x=y; y=t; }template <class S, class T> inline void clone(T*& dst, S* src, int n){	dst = new T[n];	memcpy((void *)dst,(void *)src,sizeof(T)*n);}
enum { LINEAR, POLY, RBF, SIGMOID };	/* kernel_type *///////////////////////////////////////////////////////////////////////////
//kernel必须的一些东西都在这里了,主要就是k_function
//////////////////////////////////////////////////////////////////////////

struct svm_node{	int index;	double value;};
struct svm_parameter{	int svm_type;	int kernel_type;	double degree;	/* for poly */	double gamma;	/* for poly/rbf/sigmoid */	double coef0;	/* for poly/sigmoid */	/* these are for training only */	double cache_size; /* in MB */	double eps;	/* stopping criteria */	double C;	/* for C_SVC, EPSILON_SVR and NU_SVR */	int nr_weight;		/* for C_SVC */	int *weight_label;	/* for C_SVC */	double* weight;		/* for C_SVC */	double nu;	/* for NU_SVC, ONE_CLASS, and NU_SVR */	double p;	/* for EPSILON_SVR */	int shrinking;	/* use the shrinking heuristics */	int probability; /* do probability estimates */};

class QMatrix {public:	virtual Qfloat *get_Q(int column, int len) const = 0;	virtual Qfloat *get_QD() const = 0;	virtual void swap_index(int i, int j) const = 0;	virtual ~QMatrix() {}};

//class CKernel
//{
//public:
//	CKernel(void);
//	~CKernel(void);
//};

class Kernel: public QMatrix {public:	Kernel(int l, svm_node * const * x, const svm_parameter& param);	virtual ~Kernel();	static double k_function(const svm_node *x, const svm_node *y,		const svm_parameter& param);	virtual Qfloat *get_Q(int column, int len) const = 0;	virtual Qfloat *get_QD() const = 0;	virtual void swap_index(int i, int j) const	// no so const...	{		swap(x[i],x[j]);		if(x_square) swap(x_square[i],x_square[j]);	}protected:	double (Kernel::*kernel_function)(int i, int j) const;private:	const svm_node **x;	double *x_square;	// svm_parameter	const int kernel_type;	const double degree;	const double gamma;	const double coef0;	static double dot(const svm_node *px, const svm_node *py);	double kernel_linear(int i, int j) const	{		return dot(x[i],x[j]);	}	double kernel_poly(int i, int j) const	{		return pow(gamma*dot(x[i],x[j])+coef0,degree);	}	double kernel_rbf(int i, int j) const	{		return exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j])));	}	double kernel_sigmoid(int i, int j) const	{		return tanh(gamma*dot(x[i],x[j])+coef0);	}};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -