#include "cv.h"
#include "highgui.h"
#include "ml.h"
#include <cmath>
#include <iostream>
#include <iomanip>
using namespace std;
//以下例子用来拟合正弦曲线
int main(int argc, char **argv)
{
int num_train = 100;
int num_test = 100;
CvMat *train_data = cvCreateMat(num_train, 1, CV_32FC1);
CvMat *train_response = cvCreateMat(num_train, 1, CV_32FC1);
IplImage *dst=cvCreateImage(cvSize(400,320),8,3);
cvZero(dst);
dst->origin=1;
cvLine( dst, cvPoint(1,160), cvPoint(400,160), cvScalar(255,255,255,0), 3, 8, 0 );
cvLine( dst, cvPoint(8,1), cvPoint(8,320), cvScalar(255,255,255,0), 3, 8, 0 );
CvMat *test_data = cvCreateMat(num_test, 1, CV_32FC1);
CvMat *test_response = cvCreateMat(num_train, 1, CV_32FC1);
//initilize the training data and testing data
float *fptr_data = NULL, *fptr_response = NULL;
const float PI = 3.1415926f;
int i;
for(i = 0; i < train_data->rows; i++)
{
fptr_data = (float *)(train_data->data.ptr + i * train_data->step);
*fptr_data = 2*PI/train_data->rows *i;
//cout <<*fptr_data<<" ";
fptr_response = (float *)(train_response->data.ptr + i * train_response->step);
*fptr_response = sin(*fptr_data);
//cout <<*fptr_response<<endl;
}
for(i = 0; i < test_data->rows; i++)
{
fptr_data = (float *)(test_data->data.ptr + i * test_data->step);
*fptr_data = (2*PI/train_data->rows *i+0.5f);
fptr_response = (float *)(test_response->data.ptr + i * test_response->step);
*fptr_response = sin(*fptr_data);
}
CvSVM mysvm;
CvSVMParams param(103, 2, 2, 1, 1, 10, 1, 0.0001, NULL,
cvTermCriteria(CV_TERMCRIT_EPS, 100, 0.0001));
mysvm.train(train_data, train_response, 0, 0, param);
float tmp;
CvMat *sample = cvCreateMat(1,1, CV_32FC1);
cout<<"x\t\t"<<"y\t\t"<<"pre\t\t"<<"err"<<endl;
cvNamedWindow("output",1);
for(i = 0; i < test_data->rows; i++)
{
fptr_data = (float *)(test_data->data.ptr + i * test_data->step);
*((float *)sample->data.ptr) = *fptr_data;
tmp = mysvm.predict(sample);
float tmp2 = mysvm.predict(sample, false);
fptr_response = (float *)(test_response->data.ptr + i * test_response->step);
cout<<setprecision(4)<<*fptr_data<< "\t\t";
cout<<setprecision(4)<<*fptr_response<<"\t\t";
cout<<setprecision(4)<<tmp<<"\t\t";
cout<<setprecision(4)<<tmp - *fptr_response<<endl;
*fptr_data=*fptr_data*180/PI;
*fptr_response=100*(*fptr_response)+160;
tmp=100*tmp+160;
cvCircle( dst , cvPointFrom32f( cvPoint2D32f(*fptr_data,*fptr_response) ) ,
2, cvScalar(255,0,0,0) , -1 , 8 , 0 );
cvCircle( dst , cvPointFrom32f( cvPoint2D32f(*fptr_data,tmp) ) ,
2, cvScalar(0,0,255,0) , -1 , 8 , 0 );
cvShowImage("output",dst);
cvWaitKey(20);
}
cvWaitKey(0);
cvReleaseImage(&dst);
cvReleaseMat(&train_data);
cvReleaseMat(&test_data);
cvReleaseMat(&train_response);
cvReleaseMat(&test_response);
cvReleaseMat(&sample);
return 0;
}
- 大小: 14.2 KB
分享到:
相关推荐
一个简单的用MATLAB语言实现SVM做回归分析的例子,很简单实用,看完这个例子之后,你会对SVM做回归分析有初步的了解。
基于SVM的回归预测分析,MATLAB直接可以运行
在matlab使用SVM工具箱进行分类与回归的小例子
SVM神经网络的回归预测分析---上证开盘指数预测
2.内容:基于SVM的多输出回归模型,并通过PSO进行SVM的超参数寻优,最后对比SVM优化前后的数据预测性能 3.用处:用于PSO进行SVM的超参数寻优算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: ...
fitrsvm在中低维预测变量数据集上训练或交叉验证支持向量机(SVM)回归模型。 fitrsvm支持使用内核函数映射预测变量数据,并支持通过二次编程实现目标函数最小化。要在高维数据集(即包含许多预测变量的数据集)上...
MATLAB SVM神经网络的回归预测分析源码
支持向量机的回归预测问题(经典案例辛烷值预测的代码实现)
用svm来做回归预测,采用gridsearch方法来寻优,采用核函数为RBF
SVM的回归预测分析——上证指数开盘预测的matlab源程序与数据—SVM regression predictive analysis - the Shanghai Composite Index opened prediction matlab source data
MATLAB神经网络43个案例分析 初始SVM分类与回归MATLAB神经网络43个案例分析 初始SVM分类与回归MATLAB神经网络43个案例分析 初始SVM分类与回归MATLAB神经网络43个案例分析 初始SVM分类与回归MATLAB神经网络43个案例...
支持向量机非线性回归通用程序 使用支持向量机进行非线性回归
SVM回归的网格参数寻优以及LIBSVM的工具箱
SVM 回归,给出一个简单的函数,利用svm对其进行拟合及回归预测。
最小二乘支持向量机,用于多元非线性回归分析,非线性拟合与预测
基于SVM的回归预测分析——上证指数开盘指数预测 基于SVM的回归预测分析——上证指数开盘指数预测
matlab关于SVM的回归预测分析(上证指数开盘指数预测)相关代码
fitcsvm_SVM_回归模型_fitrsvm_svm回归_fitcsvm_源码.zip
里面包含了在matlab里面配置libsvm的教程,和svm回归使用方法
MATLAB实现svm回归,上证指数预测回归实例