当前位置:文档之家› SVM实验报告

SVM实验报告

SVM实验报告
SVM实验报告

SVM分类算法

一、数据源说明

1、数据源说远和理解:

采用的实验数据源为第6组:The Insurance Company Benchmark (COIL 2000) TICDATA2000.txt: 这个数据集用来训练和检验预测模型,并且建立了一个5822个客户的记录的描述。每个记录由86个属性组成,包含社会人口数据(属性1-43)和产品的所有关系(属性44-86 )。社会人口数据是由派生邮政编码派生而来的,生活在具有相同邮政编码地区的所有客户都具有相同的社会人口属性。第86个属性:“大篷车:家庭移动政策” ,是我们的目标变量。共有5822条记录,根据要求,全部用来训练。

TICEVAL2000.txt: 这个数据集是需要预测( 4000个客户记录)的数据集。它和TICDATA2000.txt它具有相同的格式,只是没有最后一列的目标记录。我们只希望返回预测目标的列表集,所有数据集都用制表符进行分隔。共有4003(自己加了三条数据),根据要求,用来做预测。

TICTGTS2000.txt:最终的目标评估数据。这是一个实际情况下的目标数据,将与我们预测的结果进行校验。我们的预测结果将放在result.txt文件中。

数据集理解:本实验任务可以理解为分类问题,即分为2类,也就是数据源的第86列,可以分为0、1两类。我们首先需要对TICDATA2000.txt进行训练,生成model,再根据model进行预测。

2、数据清理

代码中需要对数据集进行缩放的目的在于:

A、避免一些特征值范围过大而另一些特征值范围过小;

B、避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,

通常将数据缩放到[ -1,1] 或者是[0,1] 之间。

二、数据挖掘的算法说明

1、s vm算法说明

LIBSVM软件包是台湾大学林智仁(Chih-Jen Lin)博士等用C++实现的

SVM库,并且拥有matlab,perl等工具箱或者代码,移植和使用都比较方

便.它可以解决分类问题(包括C-SVC、n-SVC)、回归问题(包括e-SVR、

n-SVR)以及分布估计(one-class-SVM )等问题,提供了线性、多项式、

径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、

交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。

2、实现过程

在源程序里面,主要由以下2个函数来实现:

(1) struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param);

该函数用来做训练,参数prob,是svm_problem类型数据,具体结构定义如下:struct svm_problem //存储本次参加运算的所有样本(数据集),及其所属类别。{

int n; //记录样本总数

double *y; //指向样本所属类别的数组

struct svm_node **x; //指向一个存储内容为指针的数组

};

其中svm_node的结构体定义如下:

struct svm_node //用来存储输入空间中的单个特征

{

int index; //输入空间序号,假设输入空间数为m

double value; //该输入空间的值

};

所以,prob也可以说是问题的指针,它指向样本数据的类别和输入向量,在内存中的具体结构图如下:

图1.1LIBSVM训练时,样本数据在内存中的存放结构

只需在内存中申请n*(m+1)*sizeof(struct svm_node)大小的空间,并在里面填入每个样本的每个输入空间的值,即可在程序中完成prob参数的设置。

参数param,是svm_parameter数据结构,具体结构定义如下:

struct svm_parameter // 训练参数

{

int svm_type; //SVM类型,

int kernel_type; //核函数类型

int 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 权重,元素个数由nr_weight 决定*/

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 指明是否要做概率估计*/

}

其中,SVM类型和核函数类型如下:

enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */

enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */

只需申请一个svm_parameter结构体,并按实际需要设定SVM类型、核函数和各

种参数的值即可完成参数param的设置。

设定完这两个参数,就可以直接在程序中调用训练函数进行训练了,该其函数返

回一个struct svm_model *SVM模型的指针,可以使用svm_save_model(const char

*model_file_name, const struct svm_model *model)函数,把这个模型保存在

磁盘中。至此,训练函数的移植已经完成。

(2) double svm_predict(const struct svm_model *model, const struct

svm_node *x);

参数model,是一个SVM模型的指针,可以使用函数struct svm_model

*svm_load_model(const char *model_file_name),导入训练时保存好的SVM模

型,此函数返回一个SVM模型的指针,可以直接赋值给变量model。

参数x,是const struct svm_node结构体的指针,本意是一个输入空间的指针,

但实际上,该函数执行的时候,是从参数x处计算输入空间,直到遇到单个样

本数据结束标记-1才结束,也就是说,该函数运算了单个样本中的所有输入空间

数据。因此,在调用此函数时,必须先把预测样本的数据按图3.4中的固定格式

写入内存中。另外,该函数只能预测一个样本的值,本文需要对图像中的所有像

数点预测,就要使用for循环反复调用。

该函数返回一个double类型,指明被预测数据属于哪个类。面对两分类问题的时

候,通常使用+1代表正样本,即类1;-1代表负样本,即类2。最后根据返回的

double值就可以知道预测数据的类别了。

三、算法源代码及注释说明

1、需要在工程中添加头文件svm.h 和源文件svm.cpp

2、自己编写的源代码(C++实现)(共230行):

#include "svm.h"

#include

#include

#include

#include

#include

#include

using namespace std;

#ifdef WIN32

#pragma warning (disable: 4514 4786)

#endif

svm_parameter param;

svm_problem prob;

svm_model *svmModel;

list xList;

list yList ;

const int MAX=10;

const int nTstTimes=10;

vector predictvalue;

vector realvalue;

int trainNum=0;

//设置参数

void setParam()

{

param.svm_type = C_SVC;

param.kernel_type = RBF;

param.degree = 3;

param.gamma = 0.5;

param.coef0 = 0;

param.nu = 0.5;

param.cache_size = 40;

param.C = 500;

param.eps = 1e-3;

param.p = 0.1;

param.shrinking = 1;

// param.probability = 0;

param.nr_weight = 0;

param.weight = NULL;

模式识别第二次上机实验报告

北京科技大学计算机与通信工程学院 模式分类第二次上机实验报告 姓名:XXXXXX 学号:00000000 班级:电信11 时间:2014-04-16

一、实验目的 1.掌握支持向量机(SVM)的原理、核函数类型选择以及核参数选择原则等; 二、实验内容 2.准备好数据,首先要把数据转换成Libsvm软件包要求的数据格式为: label index1:value1 index2:value2 ... 其中对于分类来说label为类标识,指定数据的种类;对于回归来说label为目标值。(我主要要用到回归) Index是从1开始的自然数,value是每一维的特征值。 该过程可以自己使用excel或者编写程序来完成,也可以使用网络上的FormatDataLibsvm.xls来完成。FormatDataLibsvm.xls使用说明: 先将数据按照下列格式存放(注意label放最后面): value1 value2 label value1 value2 label 然后将以上数据粘贴到FormatDataLibsvm.xls中的最左上角单元格,接着工具->宏执行行FormatDataToLibsvm宏。就可以得到libsvm要求的数据格式。将该数据存放到文本文件中进行下一步的处理。 3.对数据进行归一化。 该过程要用到libsvm软件包中的svm-scale.exe Svm-scale用法: 用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值:lower = -1,upper = 1,没有对y进行缩放)其中,-l:数据下限标记;lower:缩放后数据下限;-u:数据上限标记;upper:缩放后数据上限;-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;(回归需要对目标进行缩放,因此该参数可以设定为–y -1 1 )-s save_filename:表示将缩放的规则保存为文件save_filename;-r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;filename:待缩放的数据文件(要求满足前面所述的格式)。缩放规则文件可以用文本浏览器打开,看到其格式为: y lower upper min max x lower upper index1 min1 max1 index2 min2 max2 其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表示特征序号;min 转换前该特征的最小值;max 转换前该特征的最大值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。该文件中的参数可用于最后面对目标值的反归一化。反归一化的公式为: (Value-lower)*(max-min)/(upper - lower)+lower 其中value为归一化后的值,其他参数与前面介绍的相同。 建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。 4.训练数据,生成模型。 用法:svmtrain [options] training_set_file [model_file] 其中,options(操作参数):可用的选项即表示的涵义如下所示-s svm类型:设置SVM 类型,默

机器学习SVM(支持向量机)实验报告

实验报告 实验名称:机器学习:线性支持向量机算法实现 学员:张麻子学号: *********** 培养类型:硕士年级: 专业:所属学院:计算机学院 指导教员: ****** 职称:副教授 实验室:实验日期:

一、实验目的和要求 实验目的:验证SVM(支持向量机)机器学习算法学习情况 要求:自主完成。 二、实验内容和原理 支持向量机(Support V ector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法。通过引入了核方法之后SVM也可以用来解决非线性问题。 但本次实验只针对线性二分类问题。 SVM算法分割原则:最小间距最大化,即找距离分割超平面最近的有效点距离超平面距离和最大。 对于线性问题: 假设存在超平面可最优分割样本集为两类,则样本集到超平面距离为: 需压求取: 由于该问题为对偶问题,可变换为: 可用拉格朗日乘数法求解。 但由于本实验中的数据集不可以完美的分为两类,即存在躁点。可引入正则化参数C,用来调节模型的复杂度和训练误差。

作出对应的拉格朗日乘式: 对应的KKT条件为: 故得出需求解的对偶问题: 本次实验使用python 编译器,编写程序,数据集共有270个案例,挑选其中70%作为训练数据,剩下30%作为测试数据。进行了两个实验,一个是取C值为1,直接进行SVM训练;另外一个是利用交叉验证方法,求取在前面情况下的最优C值。 三、实验器材 实验环境:windows7操作系统+python 编译器。 四、实验数据(关键源码附后) 实验数据:来自UCI 机器学习数据库,以Heart Disease 数据集为例。 五、操作方法与实验步骤 1、选取C=1,训练比例7:3,利用python 库sklearn 下的SVM() 函数进

SVM实验报告

SVM分类算法 一、数据源说明 1、数据源说远和理解: 采用的实验数据源为第6组:The Insurance Company Benchmark (COIL 2000) TICDATA2000.txt: 这个数据集用来训练和检验预测模型,并且建立了一个5822个客户的记录的描述。每个记录由86个属性组成,包含社会人口数据(属性1-43)和产品的所有关系(属性44-86 )。社会人口数据是由派生邮政编码派生而来的,生活在具有相同邮政编码地区的所有客户都具有相同的社会人口属性。第86个属性:“大篷车:家庭移动政策” ,是我们的目标变量。共有5822条记录,根据要求,全部用来训练。 TICEVAL2000.txt: 这个数据集是需要预测( 4000个客户记录)的数据集。它和TICDATA2000.txt它具有相同的格式,只是没有最后一列的目标记录。我们只希望返回预测目标的列表集,所有数据集都用制表符进行分隔。共有4003(自己加了三条数据),根据要求,用来做预测。 TICTGTS2000.txt:最终的目标评估数据。这是一个实际情况下的目标数据,将与我们预测的结果进行校验。我们的预测结果将放在result.txt文件中。 数据集理解:本实验任务可以理解为分类问题,即分为2类,也就是数据源的第86列,可以分为0、1两类。我们首先需要对TICDATA2000.txt进行训练,生成model,再根据model进行预测。 2、数据清理 代码中需要对数据集进行缩放的目的在于: A、避免一些特征值范围过大而另一些特征值范围过小; B、避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此, 通常将数据缩放到[ -1,1] 或者是[0,1] 之间。 二、数据挖掘的算法说明 1、s vm算法说明 LIBSVM软件包是台湾大学林智仁(Chih-Jen Lin)博士等用C++实现的 SVM库,并且拥有matlab,perl等工具箱或者代码,移植和使用都比较方 便.它可以解决分类问题(包括C-SVC、n-SVC)、回归问题(包括e-SVR、 n-SVR)以及分布估计(one-class-SVM )等问题,提供了线性、多项式、 径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、 交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。 2、实现过程

大数据挖掘weka大数据分类实验报告材料

一、实验目的 使用数据挖掘中的分类算法,对数据集进行分类训练并测试。应用不同的分类算法,比较他们之间的不同。与此同时了解Weka平台的基本功能与使用方法。 二、实验环境 实验采用Weka 平台,数据使用Weka安装目录下data文件夹下的默认数据集iris.arff。 Weka是怀卡托智能分析系统的缩写,该系统由新西兰怀卡托大学开发。Weka使用Java 写成的,并且限制在GNU通用公共证书的条件下发布。它可以运行于几乎所有操作平台,是一款免费的,非商业化的机器学习以及数据挖掘软件。Weka提供了一个统一界面,可结合预处理以及后处理方法,将许多不同的学习算法应用于任何所给的数据集,并评估由不同的学习方案所得出的结果。 三、数据预处理 Weka平台支持ARFF格式和CSV格式的数据。由于本次使用平台自带的ARFF格式数据,所以不存在格式转换的过程。实验所用的ARFF格式数据集如图1所示 图1 ARFF格式数据集(iris.arff)

对于iris数据集,它包含了150个实例(每个分类包含50个实例),共有sepal length、sepal width、petal length、petal width和class五种属性。期中前四种属性为数值类型,class属性为分类属性,表示实例所对应的的类别。该数据集中的全部实例共可分为三类:Iris Setosa、Iris Versicolour和Iris Virginica。 实验数据集中所有的数据都是实验所需的,因此不存在属性筛选的问题。若所采用的数据集中存在大量的与实验无关的属性,则需要使用weka平台的Filter(过滤器)实现属性的筛选。 实验所需的训练集和测试集均为iris.arff。 四、实验过程及结果 应用iris数据集,分别采用LibSVM、C4.5决策树分类器和朴素贝叶斯分类器进行测试和评价,分别在训练数据上训练出分类模型,找出各个模型最优的参数值,并对三个模型进行全面评价比较,得到一个最好的分类模型以及该模型所有设置的最优参数。最后使用这些参数以及训练集和校验集数据一起构造出一个最优分类器,并利用该分类器对测试数据进行预测。 1、LibSVM分类 Weka 平台内部没有集成libSVM分类器,要使用该分类器,需要下载libsvm.jar并导入到Weka中。 用“Explorer”打开数据集“iris.arff”,并在Explorer中将功能面板切换到“Classify”。点“Choose”按钮选择“functions(weka.classifiers.functions.LibSVM)”,选择LibSVM分类算法。 在Test Options 面板中选择Cross-Validatioin folds=10,即十折交叉验证。然后点击“start”按钮:

概率论实验报告蒙特卡洛方法估计积分值

概率论实验报告 ——蒙特卡洛方法估计积分值 姓名: 学号: 班级: 实验内容:用蒙特卡洛方法估计积分值 1用蒙特卡洛方法估计积分 20sin x xdx π ?,2-0x e dx +∞?和 22221x y x y e dxdy ++≤??的值,并将估 计值与真值进行比较。 2用蒙特卡洛方法估计积分 21 0x e dx ? 和 22x y +≤??的值, 并对误差进行估计。 要求:(1)针对要估计的积分选择适当的概率分布设计蒙特卡洛方法; (2)利用计算机产生所选分布的随机数以估计积分值; (3)进行重复试验,通过计算样本均值以评价估计的无偏性;通过计算均方误差(针对第1类题)或样本方差(针对第2类题)以评价估计结果的精度。 目的:(1)能通过 MATLAB 或其他数学软件了解随机变量的概率密度、分布函数及其期望、方差、协方差等; (2) 熟练使用 MATLAB 对样本进行基本统计,从而获取数据的基本信息; (3) 能用 MATLAB 熟练进行样本的一元回归分析。 实验一、估计2 sin x xdx π ?的值,并将估计值与真值进行比较。 MATLAB 代码: s=0;m=0;f=0;r=0;n=50; h(1:10)=0; for j=1:10 for i=1:n a=unifrnd(0,pi/2,n,1); x=sort(a); y=pi/2*mean(x.*sin(x)); s=s+y; end b=s./n; fprintf('b=%.4f\n',b); h(j)=b;

s=0; m=m+b; end p=m./10 z=1 for j=1:10 r=(h(j)-z).^2; f=f+r; end f=f./10; fprintf('f=%.6f\n',f) 运行结果: b=1.0026 b=1.0061 b=1.0037 b=1.0135 b=0.9932 b=0.9988 b=1.0213 b=1.0310 b=0.9813 b=1.0041 p = 1.0056 z = 1 f=0.000207 >> (运行截图) 结果显示f=0.000207,表明估计结果与理论值非常接近。 实验二、估计 2-0x e dx +∞ ?的值,并将估计值与真值进行比较。 I=dx e x ?+∞-02=1/2*pi dx e pi e x x *2***2/1*2/2/22-+∞ ∞--? =)(x f x 2/2**2/1x e pi - g(x)=e pi x *2*2/2- )(x f x 为标准正态分布的概率密度.分别取10个估计值h(j),求得估计值的均值p ,对照积分的真实值求得估计均方误差f 。

python实验报告(经过pca算法)

#-*-coding:utf-8-*- """ Created on Fri923:15:472017 @author """ #-*-coding:utf-8-*- """ Created on Tue May3020:31:022017 @author: """ import pandas as pd import numpy as np from sklearn.preprocessing import Imputer from sklearn.cross_validation import train_test_split from sklearn import svm from sklearn import cross_validation from sklearn.decomposition import PCA from sklearn.lda import LDA def loadData(filePath): fr=open(filePath,'r+') lines=fr.readlines() Data=[] label=[] for line in lines: items=line.strip().split(",") label.append(items[0]) Data.append([float(items[i])for i in range(1,len(items))]) return Data,label if__name__=='__main__': x1_train,y1_train=loadData('C:\Users\Administrator\SPECTF.train') x_test,y_test=loadData('C:\Users\Administrator\SPECTF.test') x_train=[] y_train=[] for i in range(23,37): x_train.append(x1_train[i]) y_train.append(y1_train[i]) for i in range(173,187): x_train.append(x1_train[i]) y_train.append(y1_train[i])

实验5 蒙特卡罗法求PI及排序算法

浙江大学城市学院实验报告 课程名称多核与并行程序设计 实验项目名称实验五蒙特卡罗法求PI及排序算法 学生姓名专业班级学号 实验成绩指导老师(签名)日期 【实验环境】 硬件平台:联想4核,4GZ内存 编译器:Microsoft Visual Studio C++ 6.0 操作系统:Windows 2003 server sp2 测试数据集合:由随机数函数产生的数据集合 【实验1】 一、问题描述 蒙特卡洛算法可理解为通过大量实验,模拟实际行为,来收集统计数据。本例中,算法随机产生一系列点,模拟这些点落在如下图所示的正方形区域内的情况。其几何解释如下 1 1 图1 如图1所示,正方形边长为1,左下顶点与原点重合,两边分别与x,y轴重合。曲线为1/4圆弧,圆心位于原点,与正方形左下定点重合,半径为1。正方形面积S1=1,圆弧内 面积S2= π π 4 1 4 1 2= r。算法模拟大量点随机落在此正方形区域内,落在圆弧内的点 的数量(n2)与点的总数(n1)的比例与面积成正比关系。即

π42121==S S n n (1) 由此可得 124n n =π (2) 因此,只要计算出落在圆弧内的点的数量在点总数中所占的比例,就能求出π的值。 由图1可知,所有点均落在正方形范围内,因此点的x 坐标满足10≤≤x 。又,当点落在圆弧范围内,则点的二维坐标关系满足 122≤+y x 。检验每一个点是否满足此关系即可判定改点是否落在圆弧内。 二、串行算法描述 本项目中使用了标准C 语言库中的产生随机数函数。该函数原型为: int rand( void ); 此函数产生随机数列,每次调用时均返回0到RAND_MAX 之间的一个整数。 void srand( unsigned int seed ); 此函数为rand ()函数所生成的伪随机数序列设置起始点,使之产生不同的伪随机数。 算法: 产生2n 个随机数据,范围[0,1],对每个数据点计算其坐标是否满足122≤+y x ,统计满足此关系的点的数量count ,则 n count 4=π 三、并行算法 3.1 并行算法描述 算法步骤: 1、确定需要产生的点的个数n ,参与运行的处理器数m ; 2、对每一个处理器,生成两个随机数x ,y ,范围[0,1]; 3、判断两个随机数x ,y 是否满足12 2≤+y x ;

蒙特卡罗实验报告

蒙特卡罗方法 实验一 实验报告 蒙特卡罗方法实验一实验报告 一、实验目的 1、了解蒙特卡罗方法方法的基本思想; 2、掌握蒙特卡罗方法计算面积、体积的方法; 3、掌握由已知分布的随机抽样方法。 二、实验原理

Monte Carlo 方法,又称统计模拟方法或计算机随机模拟方法,是一种基于“随机数”进行数值模拟的方法,一种采用统计抽样理论近似求解物理或数学问题的方法。 倘若待求量可以表述成某些特征量的期望值、某些事件出现的概率或两者的函数形式,那么可采用蒙特卡罗方法求解。在求解某些特征量的期望值或某些事件出现的概率时,必须构建合符实际的数学模型。例如采用蒙特卡罗方法计算某函数所围面积时,构建的数学模型是构造一已知面积的可均匀抽样区域,在该区域投点,由伯努利定理大数定理可知,进入待求区域投点的频率依概率1收敛于该事件出现的概率(面积之比)。 由已知分布的随机抽样方法指的是由已知分布的总体中抽取简单子样。抽样方法有: 直接抽样方法:离散型分布随机抽样方法、连续型分布直接抽样方法;挑选抽样方法;复合抽样方法;随机抽样一般方法:加抽样方法、减抽样方法、乘抽样方法、乘加抽样方法、乘减抽样方法、对称抽样方法、替换抽样方法、多为分布抽样方法、积分抽样方法;随机抽样其他方法:偏倚抽样方法、近似分布抽样方法、近似-修正抽样方法。 三、实验内容 1、安装所需计算工具(MA TLAB 、fortran 、C++等); 2、编写一伪随机数发生器;(如乘加同余a=1366,c=150889,M=714025、a=9301,c=49297,M=233280;乘同余a=16807,M=232 -1;或采用其它方法) 以下内容选取一个采用自编伪随机数发生器进行计算,其余采用工具软件中自带伪随机数发生器进行计算。 3、求解以下区域的面积、体积: 3.1、给定曲线y =2 – x 2 和曲线y 3 = x 2,曲线的交点为:P 1( – 1,1 )、P 2( 1,1 )。曲线围成平面有限区域,用蒙特卡罗方法计算区域面积; 3.2、计算22 22 11z x y z x y ?≥+? ?≤+--??所围体积 其中{(,,)|11,11,02}x y z x y z Ω=-≤≤-≤≤≤≤。 4、对以下已知分布进行随机抽样: 4.1、()() []2 3 321,0,12 f x x x x =+ -∈; 4.2、()() ()[]11,1,21E f x f x x E k E = ?∈+

人工智能实验报告四

课程实验报告 课程名称:人工智能 实验项目名称:实验四:分类算法实验 专业班级: 姓名: 学号: 实验时间: 2016年 6月18日

实验四:分类算法实验 一.实验目的 1.了解有关支持向量机的基本原理 2.能够使用支持向量机的代码解决分类与回归问题 3.了解图像分类的基本原理 二、实验的硬件、软件平台 硬件:计算机 软件:操作系统:WINDOWS 10 应用软件:C++,Java或者Matlab 三、实验内容 支持向量机算法训练分类器: 1.训练数据集:见文档“分类数据集.doc”,前150个数据作为训练数据,其他数据作为测试数据,数据中“+1”“-1”分别表示正负样本。 2.使用代码中的C-SVC算法和默认参数来训练“分类数据集.doc”中所有的数据(包括训练数据和测试数据),统计分类查准率。 3.在2的基础上使用k-折交叉验证思想来训练分类器并统计分类查准率。 4.使用2中的设置在训练数据的基础上学习分类器,将得到的分类器在测试数据上进行分类预测,统计查准率。 5.在4上尝试不同的C值(“-c”参数)来调节分类器的性能并绘制查准率曲线。 6.尝试不同的kernel函数(“-t”参数)来调节分类器的性能并绘制查准率曲线,对每种kernel函数尝试调节其参数值并评估查准率。 四.实验操作 采用提供的windows版本的libsvm完成实验。 1.文档“分类数据集.doc”改名为trainall.doc,前150组数据保存为 train.doc 后120组保存为test.doc

2. 使用代码中的C-SVC算法和默认参数来训练“分类数据集.doc”中所有的数据(包括训练数据和测试数据),统计分类查准率。 用法:svm-scale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值: lower = -1,upper = 1,没有对y进行缩放) 按实验要求这个函数直接使用缺省值就行了。 svm-train 按要求使用默认的参数; 直接在cmd窗口输入:svm-train trainall.doc trainall.model trainall.doc 包含“分类数据集.doc”的270组数据 即可建立模型,模型文件为:trainall.model. cmd窗口输出: 其中,#iter为迭代次数,nu 与前面的操作参数-n n 相同,obj为SVM文件转换为的二次规划求解得到的最小值,rho 为判决函数的常数项b,nSV 为支持向量个数,nBSV为边界上的支持向量个数,Total nSV为支持向量总个数。 svm-predict 是根据训练获得的模型,对数据集合进行预测。

蒙特卡罗方法及应用实验讲义2016

蒙特卡罗方法及应用 实验讲义 东华理工大学核工系 2016.8

实验一 蒙特卡罗方法基本思想 一、实验目的 1、了解蒙特卡罗方法方法的基本思想; 2、掌握蒙特卡罗方法计算面积、体积的方法; 3、掌握由已知分布的随机抽样方法。 二、实验原理 Monte Carlo 方法,又称统计模拟方法或计算机随机模拟方法,是一种基于“随机数”进行数值模拟的方法,一种采用统计抽样理论近似求解物理或数学问题的方法。 如待求量可以表述成某些特征量的期望值、某些事件出现的概率或两者的函数形式,那么可采用蒙特卡罗方法求解。在求解某些特征量的期望值或某些事件出现的概率时,必须构建合符实际的数学模型。例如采用蒙特卡罗方法计算某函数所围面积时,构建的数学模型是构造一已知面积的可均匀抽样区域,在该区域投点,由伯努利定理大数定理可知,进入待求区域投点的频率依概率1收敛于该事件出现的概率(面积之比)。 由已知分布的随机抽样方法指的是由已知分布的总体中抽取简单子样。具体方法很多,详见教材第三章。 三、实验内容 1、安装所需计算工具(MATLAB 、fortran 、C++等); 2、学习使用rand(m,n)、unifrnd(a,b,m,n)函数 3、求解下列问题: 3.0、蒲丰氏投针求圆周率。 3.1、给定曲线y =2 – x 2 和曲线y 3 = x 2,曲线的交点为:P 1( – 1,1 )、P 2( 1,1 )。曲线围成平面有限区域,用蒙特卡罗方法计算区域面积; 3.2 、计算1z z ?≥??≤??所围体积 其中{(,,)|11,11,02}x y z x y z Ω=-≤≤-≤≤≤≤。 4、对以下已知分布进行随机抽样:

蒙特卡罗算法实验报告

多核软件设计——实验指导蒙特卡洛算法求 项目 开发者: 开发时间: 版本号:

一、问题描述 蒙特卡洛算法可理解为通过大量实验,模拟实际行为,来收集统计数据。本例中,算法随机产生一系列点,模拟这些点落在如下图所示的正方形区域内的情况。其几何解释如下 1 1 图1 如图1所示,正方形边长为1,左下顶点与原点重合,两边分别与x ,y 轴重合。曲线为1/4圆弧,圆 心位于原点,与正方形左下定点重合,半径为1。正方形面积S 1=1,圆弧内面积S 2=ππ4 1412=r 。 算法模拟大量点随机落在此正方形区域内,落在圆弧内的点的数量(n 2)与点的总数(n 1)的比例与面积 成正比关系。即 π 42121==S S n n (1) 由此可得 1 2 4n n = π (2) 因此,只要计算出落在圆弧内的点的数量在点总数中所占的比例,就能求出π的值。 由图1可知,所有点均落在正方形范围内,因此点的x 坐标满足10≤≤x 。又,当点落在圆弧范围内,则点的二维坐标关系满足122 ≤+y x 。检验每一个点是否满足此关系即可判定改点是否落在 圆弧内。

二、串行算法描述 本项目中使用了标准C 语言库中的产生随机数函数。该函数原型为: int rand( void ); 此函数产生随机数列,每次调用时均返回0到RAND_MAX 之间的一个整数。 void srand( unsigned int seed ); 此函数为rand ()函数所生成的伪随机数序列设置起始点,使之产生不同的伪随机数。 算法: 产生2n 个随机数据,范围[0,1],对每个数据点计算其坐标是否满足122 ≤+y x , 统计满足此关系的点的数量count ,则n count 4=π 示例见附件Serial.c 三、并行算法 3.1 并行算法描述 算法步骤: 1、确定需要产生的点的个数n ,参与运行的处理器数m ; 2、对每一个处理器,生成两个随机数x ,y ,范围[0,1]; 3、判断两个随机数x ,y 是否满足12 2 ≤+y x ; 4、若满足,则变量COUNT i ++; 5、重复步骤2-4,直至每个处理器均生成n/m 个随机点; 6、收集COUNT i 的值,并累加至变量COUNT 中,此即为随机点落在圆弧内的数量; 7、通过(2)式计算π的值。 3.2 并行算法的一个例子 在这个实验中,采用Linux 操作系统pthread 接口来实现程序的并行化。这些接口函数和数据类型都在头文件中声明。因为pthread 并没有包含在C 的标准库中,编译的时候需要加上-lpthread 选项,

Libsvm分类实验报告

一、LIBSVM介绍 LIBSVM是台湾大学林智仁(Chih-Jen Lin)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件还有一个特点,就是对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数就可以解决很多问题;并且提供了交互检验(Cross Validation)的功能。 二、准备工作 2.1软件下载安装 使用的平台是Windows XP,从命令列执行。先把一些需要的东西装好,总共需要三个软件:libsvm, python, gnuplot。这里我选择的版本是libsvm-2.88,python26。 Libsvm:到https://www.doczj.com/doc/1c4660946.html,.tw/~cjlin/libsvm/下载libsvm,然后解压缩就好了。 Python:到https://www.doczj.com/doc/1c4660946.html,/download/下载完直接安装就好了。 Gnuplot:下载ftp://https://www.doczj.com/doc/1c4660946.html,/pub/gnuplot/gp400win32.zip解压缩。 这里全部解压安装在c盘 c:\libsvm-2.88 c:\python26 c:\gnuplot 2.2参数修改 (1)把c:\libsvm-2.88\tools中的easy.py和grid.py复制到c:\libsvm-2.91\python中 (2)在c:\libsvm-2.88\python中修改easy.py和grid.py的路径: ①点中easy.py在右键中选Edit with IDLE打开,将else下面的路径修改如下: else: # example for windows svmscale_exe = r"c:\libsvm-2.88\windows\svm-scale.exe" svmtrain_exe = r"c:\libsvm-2.88\windows\svm-train.exe" svmpredict_exe = r"c:\libsvm-2.88\windows\svm-predict.exe" gnuplot_exe = r"c:\gnuplot\bin\pgnuplot.exe" grid_py = r"c:\libsvm-2.88\python\grid.py"

蒙特卡洛树_四子棋实验报告

四子棋详细实验报告 实验算法: 局部UCT算法对朴素的蒙特卡洛算法加速: 更优化的算法,UCT算法。以下是算法: 给定一棵博弈树。 MCTNode nodes[MAXTREE];//蒙特卡洛树 1) 从博弈树的根点开始向下搜索,执行2)。 2)遇到节点a(bestIndex)后,若a存在从未评估过的子节点,执行3),否则执行4)。 3) 通过蒙特卡洛方法imitate(int bestIndex) //模拟对局评估该子节点,得到收益值后更新该子节点至根节点路径上所有节点的平均收益值nodes[bestIndex].winRound++;//相应层的胜盘数加一nodes[bestIndex].totRound++;//总盘数加一,执行1)。 4)计算每个子节点的UCB值,将UCB值最高的子节点作为节点a,执行2)。UCB=(double)nodes[index].winRound/((double)nodes[index].totRound +epsilon)+C*((double)log((double)nodes[fIndex].totRound+1)/((double )nodes[index].totRound+epsilon))+rand()*epsilon; 5)算法可随时终止,达到给定时间后终止。 {int Best()//选择最佳落子点 } 根节点下平均收益值最高的子节点作为算法的输出。

(对于这个算法,有几点需要解释: 1)博弈树的根节点指的是当前的局面。 2)评估过的节点及其平均收益值将在程序运行过程中保存及更新。 3)收益值设定合适的值。做法是将其设为1(胜)或0(负)。 ) 详细说明 蒙特卡洛算法: 利用一维中的掷点法完成对围棋盘面的评估。具体来讲,当我们给定某一个棋盘局面时,程序在当前局面的所有可下点中随机选择一个点摆上棋子,并不断重复这个随机选择可下点(掷点)的过程,直到双方都没有可下点(即对弈结束),再把这个最终状态的胜负结果反馈回去,作为评估当前局面的依据。 在随机选点的过程中,一些策略也可被加入进来。(因为本次实验我们没有足够的时间,所以在随机选点过程中,一些四子棋知识没有被加入进来)。 当棋手面对一个待决策盘面时,他需要从多个可下点中选择一个行棋。所以,如果我们有足够的时间做模拟,则我们可以做以下的统计:设轮到一方进行决策时共有k个点可供选择,第i个节点具有参数vi,wi,i属于〔1,k],分别一记录到该次模拟为止第i个节点被选中的次数以及 在这vi次模拟中第i个节点获得胜利的次数。介绍构建蒙特卡罗规划的应用过程:首先,我们将待决策的盘面作为某子树的根节点;然后在可下点中随机选择一点Pi,i属于【1,k】进行以下模拟过程:

实验报告 支持向量机

实验报告支持向量机 实验原理:支持向量机的原理和实现技术。。 实验题目:对鸢尾花数据利用SVM技术进行分类预测。 实验要求:把鸢尾花数据分成训练集和测试集,然后针对样本SVM预测分类。实验题目--分析报告: data(iris) > rm(list=ls()) > gc() used (Mb) gc trigger (Mb) max used (Mb) Ncells 252143 13.5 608394 32.5 410515 22.0 Vcells 528486 4.1 8388608 64.0 1606736 12.3 > library(MASS) > data(iris) > library(e1071) > summary(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 Median :5.800 Median :3.000 Median :4.350 Median :1.300 Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 Species setosa :50 versicolor:50 virginica :50

太原理工大学算法实验报告

本科实验报告 课程名称:算法设计与分析 实验项目:算法设计与分析实验 实验地点:致远楼403 专业班级:学号: 学生姓名: 指导教师: 2017年 3 月 28日

if(l>=r) return; int mid=(l+r)/2; __mergeSort(arr,l,mid); __mergeSort(arr,mid+1,r); if(arr[mid]>arr[mid+1]) __merge(arr,l,mid,r); } template void __merge(T arr[],int l,int mid,int r) { T *aux=new T[r-l+1]; for(int i=l;i<=r;i++) aux[i-l]=arr[i]; int i=l,j=mid+1; for(int k=l;k<=r;k++) { if(i>mid) { arr[k]=aux[j-l]; j++; } else if(j>r) { arr[k]=aux[i-l]; i++; }

else if(aux[i-l]

模式识别实验报告

河海大学物联网工程学院 《模式识别》 课程实验报告 学号 _______________ 专业 ____计算机科学与技术_____ 授课班号 _________________________ 学生姓名 ___________________ 指导教师 ___________________ 完成时间 _______________

实验报告格式如下(必要任务必须写上,可选的课后实验任务是加分项,不是必要任务,可不写): 实验一、Fisher分类器实验 1.实验原理 如果在二维空间中一条直线能将两类样本分开,或者错分类很少,则同一类别样本数据在该直线的单位法向量上的投影的绝大多数都应该超过某一值。而另一类数据的投影都应该小于(或绝大多数都小于)该值,则这条直线就有可能将两类分开。 准则:向量W的方向选择应能使两类样本投影的均值之差尽可能大些,而使类內样本的离散程度尽可能小。 2.实验任务 (1)两类各有多少组训练数据?(易) (2)试着用MATLAB画出分类线,用红色点划线表示(中) (3)画出在投影轴线上的投影点(较难) 3.实验结果 (1)第一类数据有200组训练数据,第二类数据有100组训练数据。 (2)如图所示,先得出投影线的斜率,后求其投影线的垂直线的斜率,即分类线的斜率,再求分类线的过的中垂点,加上即可得出。 画出红线代码:m = (-40:0.1:80); kw = w(2)/w(1); b = classify(w1, w2, w, 0); disp(b);

n = (-1/kw).* m + b; plot(m,n,'r-', 'LineWidth', 3); (3)画出投影上的投影点 如图,点用X表示。 代码: u = w/sqrt(sum(w.^2)); p1 = w1*u*u'; plot(p1(:,1),p1(:,2),'r+') p2 = w2*u*u'; plot(p2(:,1),p2(:,2),'b+') 实验二、感知器实验 1.实验原理 (1)训练数据必须是线性可分的 (2)最小化能量,惩罚函数法-错分样本的分类函数值之和(小于零)作为惩罚值(3)方法:梯度下降法,对权值向量的修正值-错分样本的特征向量 2.实验任务 (1)训练样本不线性可分时,分类结果如何?

用蒙特卡罗方法计算π值实验报告

本科生实验报告 实验课程蒙特卡罗模拟 学院名称核技术与自动化工程学院专业名称核技术及应用 学生姓名王明 学生学号2017020405 指导教师 邮箱511951451@https://www.doczj.com/doc/1c4660946.html, 实验成绩 二〇一七年九月二〇一八年一月

实验一、选择一种编程语言模拟出π的值 一、实验目的 1、理解并掌握蒙特卡罗模拟的基本原理; 2、运用蒙特卡洛思想解决实际问题; 3、分析总结蒙特卡洛解决问题的优缺点。 二、实验原理 用蒙特卡洛思想计算π的值分为如下几部: 第一步构建几何原理:构建单位圆外切正方形的几何图形。单位圆的面积为S0=π,正方形的面积S1=4; 第二步产生随机数进行打把:这里用MATLAB产生均匀随机数。分别生产均匀随机数(x,y)二维坐标。X,y的范围为-1到1.总共生成N个坐标(x,y).统计随机生成的坐标(x,y)在单位圆内的个数M。 第三步打把结构处理:根据S0/S1=M/N计算出π的值。因此π=4*M/N。 第四步改变N的值分析π的收敛性:总数1000开始打把,依次增长10倍到1百

万个计数。 三、实验内容 1、用matlab编写的实验代码,总计数率为1000。zfx_x=[1,-1,-1,1,1]; zfx_y=[1,1,-1,-1,1]; plot(zfx_x,zfx_y) axis([-3 3 -3 3]); hold on; r=1; theta=0:pi/100:2*pi; x=r*cos(theta); y=r*sin(theta); rho=r*sin(theta); figure(1) plot(x,y,'-') N=1000; mcnp_x=zeros(1,N); mcnp_y=zeros(1,N); M=0; for i=1:N x=2*(rand(1,1)-0.5); y=2*(rand(1,1)-0.5); if((x^2+y^2)<1) M=M+1; mcnp_x(i)=x; mcnp_y(i)=y; end end plot(mcnp_x,mcnp_y,'.') PI1=4*M/N; 2、用matlab绘制的图形

模式识别BP算法与SVM实验报告

《模式识别》实验报告 四.非线性分类器实验-BP 神经网络 1.(a)初始化高斯随机生成器为0,即randn(…seed?,0);产生2 维两类数据集(X1,y1),其中X1的数据来自4 个高斯分布,m=[-5,5,-5,5;5,-5,5,-5]的正态分布,S =s * I,s=2,I是一个2×2 的单位矩阵。前两个分布的数据为一类y=1,后两个分布的数据为另一类y=-1,每一类数据的数量N=100。 (b)初始化高斯随机生成器为10,即randn(…seed?,10),重复(a)产生数据集(X2,y2)。 (c)使s=5,重复(a)、(b)分别产生数据集(X3,y3)、(X4,y4)。 (d)画出数据集。 M1文件如下: function [X1,y] =data_generator(S) m=[-5,5,-5,5;5,-5,5,-5]; x1=mvnrnd(m(:,1),S,50); x2=mvnrnd(m(:,2),S,50); x3=mvnrnd(m(:,3),S,50); x4=mvnrnd(m(:,4),S,50); for i=1:50 for j=1:2 X1(i,j)=x1(i,j); end y(i,1)=1; end for i=1:50 for j=1:2 X1(i+50,j)=x2(i,j); end y(i+50,1)=1; end for i=1:50 for j=1:2 X1(i+100,j)=x3(i,j); end y(i+100,1)=-1; end for i=1:50 for j=1:2 X1(i+150,j)=x4(i,j);

相关主题
文本预览
相关文档 最新文档