• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: C/C++
  • 标签: SVM  

资源简介

该C++代码,有助于理解SVM算法,通俗易懂,附带两个标签类,成功实现正确分类,。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

资源截图

代码片段和文件信息

#define _CRT_SECURE_NO_DEPRECATE
#include
#include
#include
#include
#include
#include
#include
#define feature_num 15 
#define lable_num 20
float data_mat[lable_num][feature_num];
float res_mat[lable_num];
using namespace std;


void main(void)
{
//int file(void)
//{
FILE *f1*f2;
int i = 0 j = 0k=0;
f1 = fopen(“bedroom.txt“ “r“);
f2=fopen(“lable.txt““r“);
while(!feof(f1))
{
if(j != feature_num-1)
fscanf(f1 “%f “ &data_mat[i][j++]);//注意此处有个空格
else
{
fscanf(f1 “%f“ &data_mat[i][j]);
j = 0;
++i;   
}
}
while(!feof(f2))
fscanf(f2 “%f “ &res_mat[k++]);
fclose(f1);
fclose(f2);

int t;
double y[20] = {0};  //对x的分类结果1或-1

double alphas[lable_num]={0};
double a_y[lable_num]={0};   //a[i]*y[i]
double w[feature_num]={0};
double b=0;
double aiold = 0ajold = 0ajnew = 0ainew = 0;
double HL;
double c=0.6Ei=0Ej=0;
double tolerance=1e-3;
int itermaxIter=400alphapairsChanged = 0;
double limit1limit2etabinewbjnew;          //HL的上下限
double K_ij=0K_ii=0K_jj=0K_ji=0;         //2K12-K11-K22
//ofstream f4;
//f4.open(“result.txt“);
srand(unsigned(time(0)));
iter=0;
while(iter {
Ei=0Ej=0;
K_ij=0;
K_ii=0;
K_jj=0;
K_ji=0;
alphapairsChanged = 0;

for(i=0;i {
for(k=0;k a_y[k]=alphas[k]*res_mat[k];///a[i]*y[i]
for(t=0;t {
w[t]=0;
}
for(k=0;k {

for(t=0;t {
w[k]+=a_y[t]*data_mat[t][k];
}
}
Ei=0Ej=0;
for(k=0;k {
Ei+=w[k]*data_mat[i][k];    //线性核求Ei
}
Ei=Ei+b;
Ei=Ei-res_mat[i];
if( ((res_mat[i]*Ei < -tolerance ) & (alphas[i] < c) )| ((res_mat[i]*Ei < -tolerance > tolerance) & (alphas[i] > 0))){
while(1)                     //随机选取与i不同的j
{
j=int(rand()%lable_num);
if(j!=i)
break;
}
for(k=0;k {
Ej+=w[k]*data_mat[j][k];   //求Ej,这里使用线性核
}
Ej=Ej+b;
Ej=Ej-res_mat[j];
aiold=alphas[i];
ajold=alphas[j];
limit1=ajold-aiold;
limit2=aiold+ajold;
if(res_mat[i]!=res_mat[j])
{
if(limit1>0)
{
L=limit1;
H=c;
}
else
{
L=0;
H=c+limit1;
}
}
else
{
if(limit2>c)
{
L=limit2-c;
H=c;
}
else
{
L=0;
H=limit2;
}
}
if(H==L)
continue;
K_ij=0;
K_ii=0;
K_jj=0;
K_ji=0;
for(k=0;k {
K_ij+=data_mat[i][k]*data_mat[j][k];
K_ii+=data_mat[i][k]*data_mat[i][k];
K_jj+=data_mat[j][k]*data_mat[j][k];
K_ji+=data_mat[j][k]*data_mat[i][k];
}
eta=2*K_ij-K_ii-K_jj; //w(a2)的2阶导数
if(eta>=0)
continue;
ajnew=ajold-res_m

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4601  2017-08-23 10:01  SVM算法\SVM.cpp
     文件        3018  2017-08-01 15:31  SVM算法\bedroom.txt
     文件        3020  2017-08-01 22:41  SVM算法\bedroom1.txt
     目录           0  2017-09-04 11:46  SVM算法\

评论

共有 条评论