佑华硬盘拷贝机系统直接拷贝到新佑华硬盘拷贝机吗?

10363人阅读
数据挖掘(5)
封装Libsvm与Liblinear
开篇我们基于以下场景:
& & & &假设我们已经用libsvm或者是Liblinear训练了一个模型,现在需要读入该模型并基于该模型对一个样本进行预测,返回预测的类标签以及相应的隶属度分数。
&从封装的角度我们需要考虑一下几个问题:
&如何规范输入,使得读入的数据在Libsvm与Liblinear上都可以直接运行系统如何识别读入的模型的类别,并根据模型类别,选择Libsvm或者是Liblinear中合适的函数进行预测如何预测该样本对应的标签以及得分
因为我们对单个样本进行预测,所以这里直接定义单个节点的格式即可。对于多个样本,则可以循环调用。
在上一篇文章中,我们看到虽然Libsvm与Liblinear在向量节点的定义上有所差别,但是其中的成员变量还是一致的,因此为了统一,我们只需要重新定义一个新的类。
public class SvmNode {
/** 封装的Libsvm与Liblinear的节点格式**/
public SvmNode( final int index, final double value ) {
if (index & 0) throw new IllegalArgumentException(&index must be &= 0&);
this.index =
this.value =
/**以下Getter和Setter、hashCode、equals函数省略**/
我们首先来剖析一下Libsvm与Liblinear生成的模型的文件格式
从上述文件中,我们看到两者的模型文件存在很大的差异,因此我们只需要写一个解析函数直接读取模型的格式来判断到底属于那种模型。
最简单的形式就是直接通过第一行来判断,因为其模型的文件都是固定的,所以这种最简单的方式也是很有效的。
* 读入模型文件。通过文件中的格式来判断到底属于Libsvm还是liblinear
* @param model_filename 模型文件保存的路径及名称
public void load_model(String model_filename){
InputStream in = new FileInputStream(model_filename);
fp = new BufferedReader(new InputStreamReader(in,&UTF-8&));
String line =
while((line = fp.readLine())!=null){
String[] arg = whitespace.split(line);
//通过判断文件中每行第一个字符是否包含&svm_type&或者是&solver_type&
//来判断是Libsvm还是Liblinear
if(arg[0].equals(&svm_type&)){
svm_type = &libsvm&;
svmModel = svm.svm_load_model(model_filename);
nr_class = svmModel.nr_
linearModel =
if(arg[0].equals(&solver_type&)){
svm_type=&liblinear&;
svmModel =
linearModel = Linear.loadModel(new File(model_filename));
nr_class = linearModel.getNrClass();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
多分类策略
这里我们研究一下Libsvm与Liblinear的多分类策略,虽然为多分类,但其实也适用于二分类。
对于Libsvm来说,采用为One-against-one的策略,而Liblinear则采用为One-against-rest的策略,关于这两类分类策略的解释,可以看下图:
我们接下来通过源代码具体分析一下:
首先来看一下Libsvm的模型训练部分:
* Libsvm的模型训练函数
* @param prob 输入的问题
* @param param 输入的参数
* @return 训练好的模型
public static svm_model svm_train(svm_problem prob, svm_parameter param)
/**为了代码的简洁性,此处删除了部分**/
* 此处省略了部分代码:这里的代码主要做:
* 1、统计类别总数,同时记录类别的标号,统计每个类的样本数目
* 2、计算权重C
* 3、初始化nozero数组,便于统计SV
* 4、初始化概率数组
svm_model model = new svm_model();
model.param =
// 将属于同一个类别的数据组织起来
svm_group_classes(prob,tmp_nr_class,tmp_label,tmp_start,tmp_count,perm);
//采用one-against-one进行分类
int p = 0;
//定义决策函数数组,将每一个而分类存储起来
decision_function[] f = new decision_function[nr_class*(nr_class-1)/2];
for(i=0;i&nr_i++)
for(int j=i+1;j&nr_j++)
svm_problem sub_prob = new svm_problem();
//计算第i个类与第j个类的起始位置与数目。
int si = start[i], sj = start[j];
int ci = count[i], cj = count[j];
sub_prob.l = ci+
//将第i个类的标签定义为+1,第j个类的标签定义为-1
for(k=0;k&k++)
sub_prob.x[k] = x[si+k];
sub_prob.y[k] = +1;
for(k=0;k&k++)
sub_prob.x[ci+k] = x[sj+k];
sub_prob.y[ci+k] = -1;
//对第i个类与第j个类采用二分类策略,训练模型
f[p] = svm_train_one(sub_prob,param,weighted_C[i],weighted_C[j]);
* 此处省略了部分代码:这里的代码主要做:
* 1、统计一下nozero,如果nozero已经是真,就不变,如果为假,则改为真
* 2、输出模型,主要是填充svm_model
然后再来看一下其模型预测部分:
* Libsvm模型预测部分,预测该样本的类标签以及属于该类的分值。
* 这里采用的方法为投票策略
* @param model 已训练好的Libsvm模型
* @param x 一个待预测的样本向量
* @param dec_values 保存预测结果的向量,其维度为k*(k-1)/2
public static double svm_predict_values(svm_model model, svm_node[] x, double[] dec_values)
//对一些变量进行初始化
int nr_class = model.nr_
int l = model.l;
double[] kvalue = new double[l];
//根据模型中的支持向量以及内核函数计算数值
for(i=0;i&l;i++)
kvalue[i] = Kernel.k_function(x,model.SV[i],model.param);
int[] start = new int[nr_class];
start[0] = 0;
for(i=1;i&nr_i++)
start[i] = start[i-1]+model.nSV[i-1];
//初始化vote向量
int[] vote = new int[nr_class];
for(i=0;i&nr_i++)
vote[i] = 0;
//依次计算k*(k-1)/2个二分类模型的预测值
for(i=0;i&nr_i++)
for(int j=i+1;j&nr_j++)
double sum = 0;
int si = start[i];
int sj = start[j];
int ci = model.nSV[i];
int cj = model.nSV[j];
//根据决策函数计算每一个二分类对样本预测的分值
double[] coef1 = model.sv_coef[j-1];
double[] coef2 = model.sv_coef[i];
for(k=0;k&k++)
sum += coef1[si+k] * kvalue[si+k];
for(k=0;k&k++)
sum += coef2[sj+k] * kvalue[sj+k];
sum -= model.rho[p];
//dec_values存储的就是第p个二分类模型对样本的预测值
dec_values[p] =
//根据dec_values 值的正负决定给那个类别投票
if(dec_values[p] & 0)
++vote[i];
++vote[j];
//遍历vote向量,找出具有最大投票数的所对应类别即为所预测的类标签。
//而dec_values则存储了k*(k-1)/2个二分类模型的预测值
int vote_max_idx = 0;
for(i=1;i&nr_i++)
if(vote[i] & vote[vote_max_idx])
vote_max_idx =
return model.label[vote_max_idx];
接下来我们分析一下Liblinear的模型训练与模型预测部分
模型训练部分:
* Liblinear模型训练部分
* @param prob 输入的问题
* @param param 输入的参数
* @return 返回训练好的模型
*/public static Model train(Problem prob, Parameter param) {
* 此处省略了部分代码:这里的代码主要做:
* 1、统计类别总数,同时记录类别的标号,统计每个类的样本数目
* 2、将属于相同类的样本分组,连续存放
* 3、计算权重C
* 4、初始化nozero数组,便于统计SV
* 5、初始化概率数组
//此处可以看出需要寻k个模型
for (int i = 0; i & nr_ i++) {
int si = start[i];
int ei = si + count[i];
//重建子数据集,样本的特征不变,但样本的类别要改为+1/-1
int k = 0;
for (; k & k++)
sub_prob.y[k] = -1;
for (; k & k++)
sub_prob.y[k] = +1;
for (; k & sub_prob.l; k++)
sub_prob.y[k] = -1;
//训练子数据集svm_train_one
train_one(sub_prob, param, w, weighted_C[i], param.C);
for (int j = 0; j & j++)
model.w[j * nr_class + i] = w[j];
* 此处省略了部分代码:这里的代码主要做:
* 1、统计一下nozero,如果nozero已经是真,就不变,如果为假,则改为真
* 2、输出模型,主要是填充svm_model
模型预测部分:
* 模型预测部分,根据训练好的模型对样本进行预测。
* @param model 已训练好的模型
* @param x 样本的向量
* @param dec_values 每个模型预测分值
* @return 预测的类标签
public static int predictValues(Model model, Feature[] x, double[] dec_values) {
//变量的初始化
if (model.bias &= 0)
n = model.nr_feature + 1;
n = model.nr_
double[] w = model.w;
if (model.nr_class == 2 && model.solverType != SolverType.MCSVM_CS)
nr_w = model.nr_
for (int i = 0; i & nr_w; i++)
dec_values[i] = 0;
//计算每个模型预测分值
for (Feature lx : x) {
int idx = lx.getIndex();
// the dimension of testing data may exceed that of training
if (idx &= n) {
for (int i = 0; i & nr_w; i++) {
dec_values[i] += w[(idx - 1) * nr_w + i] * lx.getValue();
//根据预测的分值来计算所属的标签,和Libsvm所不同的是:
//这里采用的方式是比较那个模型预测分值大。
if (model.nr_class == 2)
return (dec_values[0] & 0) ? model.label[0] : model.label[1];
int dec_max_idx = 0;
for (int i = 1; i & model.nr_ i++) {
if (dec_values[i] & dec_values[dec_max_idx]) dec_max_idx =
return model.label[dec_max_idx];
综上所述,Libsvm采用的为One-against-one策略,Liblinear采用的One-against-rest策略。最后都能返回预测的类标签。但是对于由于他们采用的策略不同,导致其在预测的分值上不同。所以接下来我们将会对预测的分值进行归一化处理。
模型会返回两个结果:label和score,其中label即其预测的标签。而score是该样本属于该类的隶属度,分值越大,代表属于该类的置信度越大。具体的计算方式则是根据:
其中k为所有支持判别类得个数,n为所有类别个数,si 为所有支持判别类的分数。这样就相当于把两个软件计算出来的分数进行了统一,而且经过公式的计算,会将分数的映射到[0,1]区间内,这样方便进行阈值控制。
* 返回具有最大投票数的标签所获得分数的总和
* @param des_values
public double sumPreValue(double[] des_values){
int size=1;
double init_score=0.0;
//对于Libsvm的类型,对其k*(k-1)/2个值进行计算
if (this.svm_type.equals(&libsvm&)){
int n = 1+(int)Math.sqrt(2.0*des_values.length+1);
size = n-1;
int [] vote = new int[n];
double[] score = new double[n];
for(int i =0;i&n-1;i++){
for(int j =i+1;j&n;j++){
if(des_values[p]&0){
vote[i]+=1;
score[i]+=Math.abs(des_values[p]);
vote[j]+=1;
score[j]+=Math.abs(des_values[p]);
int max = 0;
for(int i =1;i&n;i++)
if(vote[i]&vote[max])
k = vote[max];
init_score = score[max];
//对于Liblinear的类型,对其k个值进行计算
if (this.svm_type.equals(&liblinear&)){
int n =des_values.
int max = 0;
for(int i =1;i&n-1;i++){
if(des_values[i]&des_values[max]){
init_score = des_values[max];
return init_score/(2.0*k)+k/(2.0*size) ;
以Libsvm为例,说明一下分数的计算
这样我们通过输入一个样本,根据读入的模型,就可以真正的对样本进行预测了。而且通过归一化两者的分值,可以很好的对结果进行阈值控制。更多详细的代码请见 /p/tmsvm/
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:162240次
积分:1569
积分:1569
排名:千里之外
原创:14篇
评论:127条
(1)(1)(2)(7)(1)(1)(1)(2)LIBSVM数据格式及其使用
关于支持向量机(SVM)的理论部分推荐一个博客:
http://blog.csdn.net/v_july_v/article/details/7624837
July的博客分三层讲述支持向量机,对于我们需要了解道不同层次的学习者来说,一目了然。
我也是通过此博客进行学习的。
假若你已经基本上掌握了SVM的理论部分,那么如何对数据进行分析呢?
我们一般对数据使用SVM进行分类的时候,使用的是林智仁的SVM库:LIBSVM
在这里可以下载到最新的库,而且能够下载到训练所用的数据,但是数据连接点开之后只能复制,就像这个数据集:
不能下载,那我们复制完之后存储成什么格式呢?
我们可以从LIBSVM里面随便下载一个数据,比如libsvm里面自带的heart_scale,然后用notepad打开,粘贴保存即可
对于自己的数据怎么办呢?
首先,我们知道LIBSVM里面的数据格式如下:
Label 1:value 2:value
其次,我们使用FormatDataLibsvm.xls生成这种格式,具体如下:
下载FormatDataLibsvm.xls(百度搜索)
运行FormatDataLibsvm.xls(注意这时会有一个关于“宏已禁宏”的安全警示,点击“选项”,选择“启用此内容”,确定即可);1,先运行FormatDataLibsvm.xls然后将数据粘贴到sheet1的topleft单元。
打开data.xls,(注:网上很多的介绍都是直接将数据粘贴到sheet1的topleft单元),要特别注意的是这时候的数据排列顺序应该是:
& & & 条件属性a
& 条件属性b &...
& 5 & &...
& 2 & &...
3、"工具"--&"宏"--&执行下面有一个选项(FormatDatatoLibsvm)--&执行,要选中这个然后点击“运行”
,这时候数据讲变成:
& & &决策属性
&条件属性a &条件属性b
&2:5 & &...
&2:2 & &...
等数据转换完成后,将该文件保存为.txt文件。这时数据转换的问题就解决了。
最后,从LIBSVM里面随便下载一个数据,比如libsvm里面自带的heart_scale,然后用notepad打开,数据粘贴进保存即可
使用libsvm 3.18
MATLAB&编程对UCI的数据breast进行分类:
数据连接:
程序如下:
%数据本身分组加预测
[breast_label, breast_inst] =libsvmread('../breast_scale');
&data= [breast_inst(:,1),
breast_inst(:,2),breast_inst(:,3), breast_inst(:,4)];
�ta = breast_
ismember(breast_label,2);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%将标签转换成1和0
&[train, test]
=crossvalind('holdOut',groups,0.7);&&&&&&&&&&&&&&&&&&&&&&&&
%利用交叉耦合函数进行分组,70%的数据用来训练,剩下的数据进行预测
&train_breast =
data(train,:);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%获取train标签对应的训练数据
&train_breast_labels = groups(train,:);
&train_breast_labels = double(train_breast_labels
&test_breast =
data(test,:);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%获取train标签对应的训练数据
&test_breast_labels =
groups(test,:);&&&&&&&&&&&&&&&&&&&&&
&test_breast_labels
=double(test_breast_labels);
&%&数据归一化
&train_breast =
normalization(train_breast',2);
&test_breast&=
normalization(test_breast',2);
&train_breast = train_breast';
&test_breast = test_breast';
&%训练和预测
svmtrain(train_breast_labels,train_breast, '-s 0 -t 0 -c 1 -g
&[predict_label, accuracy, dec_values]
=svmpredict(test_breast_labels, test_breast, model);
&[mm,mn] = size(model.SVs);
[m,n] = size(train_breast);
for run = 1:m
train_breast_labels(run) == 0
= plot( train_breast(run,1),train_breast(run,2),'r+' );
= plot( train_breast(run,1),train_breast(run,2),'g*' );
&&&for i =
model.SVs(i,1)==train_breast(run,1)
&&model.SVs(i,2)==train_breast(run,2)
&&&&&&&&&&&h3
= plot( train_breast(run,1),train_breast(run,2),'o' );
&&&&&&&end
legend([h1,h2,h3],'1','0','SupportVectors');
运行结果:
分类结果图
optimization finished, #iter = 67190
nu = 0.093757
obj = -18.486007, rho = -0.113756
nSV = 22, nBSV = 16
Total nSV = 22
Accuracy = 95.1782% (454/477)(classification)
总之,数据前期处理很重要,归一化很重要,明白参数,逐一试试,才能达到较好的分类效果。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。求助: libsvm训练得到的model怎样保存为txt格式_matlab吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:162,353贴子:
求助: libsvm训练得到的model怎样保存为txt格式收藏
如题,我用libsvm训练得到model我该用什么函数保存为txt格式的文件就像下图这种形式求解答,
亚马逊AWS-云创计划.最高可达10万元免费云资源!
x = 0:.1:1;
y = [x; exp(x)];
fid = fopen('exp.txt','w');
fprintf(fid,'%6.2f
%12.8f\n',y);
fclose(fid);
下图的train.txt如何用matlab导入成libsvm训练的model啊?急求
楼主,问题解决了吗,能否告诉我如何解决的
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或主要就是讲解利用libsvm-mat工具箱建立分类(回归模型)后,得到的模型model里面参数的意义都是神马?以及如果通过model得到相应模型的表达式,这里主要以分类问题为例子。测试数据使用的是libsvm-mat自带的heart_scale.mat数据(270*13的一个属性据矩阵,共有270个样本,每个样本有13个属性),方便大家自己测试学习。首先上一个简短的测试代码:
%% ModelDecryption
% by faruto @ faruto's Studio~
% .cn/faruto
% http://www.mfun.la
% last modified by
%% a litte clean work
%&首先载入数据
load heart_
data = heart_scale_
label = heart_scale_
%&建立分类模型
model = svmtrain(label,data,'-s 0 -t 2 -c 1.2 -g 2.8');
%&利用建立的模型看其在训练集合上的分类效果
[PredictLabel,accuracy] = svmpredict(label,data,model);
运行结果:
Parameters: [5x1 double]
nr_class: 2
totalSV: 259
rho: 0.0514
Label: [2x1 double]
nSV: [2x1 double]
sv_coef: [259x1 double]
SVs: [259x13 double]
Accuracy = 99.6296% (269/270) (classification)
accuracy =
Elapsed time is 0.040155 seconds.
这里面为了简单起见没有将测试数据进行训练集和测试集的划分,这里仅仅是为了简单明了而已,分类结果估计可以不要管,参数优化也不要管,另有帖子讲解。下面我们就看看&model这个结构体里面的各种参数的意义都是神马,model如下:
model =Parameters: [5x1 double]nr_class: 2totalSV: 259rho: 0.0514Label: [2x1 double]ProbA: []ProbB: []nSV: [2x1 double]sv_coef: [259x1 double]SVs: [259x13 double]
model.Parameters我们先来看一下model.Parameters里面承装的都是什么:
&& model.Parameters
重要知识点:
model.Parameters参数意义从上到下依次为:-s svm类型:SVM设置类型(默认0)-t&核函数类型:核函数设置类型(默认2)-d degree:核函数中的degree设置(针对多项式核函数)(默认3)-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数) (默认类别数目的倒数)-r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)即在本例中通过model.Parameters我们可以得知&–s&参数为0;-t&参数为&2;-d&参数为3;-g&参数为2.8(这也是我们自己的输入);-r&参数为0。关于libsvm参数的一点小说明:
Libsvm中参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。model.Label model.nr_class
&& model.Label
&& model.nr_class
重要知识点:
model.Label表示数据集中类别的标签都有什么,这里是&1,-1;model.nr_class表示数据集中有多少类别,这里是二分类。
model.totalSV model.nSV
&& model.totalSV
&& model.nSV
重要知识点:
model.totalSV代表总共的支持向量的数目,这里共有259个支持向量;model.nSV表示每类样本的支持向量的数目,这里表示标签为1的样本的支持向量有118个,标签为-1的样本的支持向量为141。注意:这里model.nSV所代表的顺序是和model.Label相对应的。
model.ProbA model.ProbB关于这两个参数这里不做介绍,使用-b参数时才能用到,用于概率估计。
-b probability_estimates: whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
model.sv_coef model.SVs model.rho
sv_coef: [259x1 double]
SVs: [259x13 double]
model.rho = 0.0514
重要知识点:
model.sv_coef是一个259*1的矩阵,承装的是259个支持向量在决策函数中的系数;model.SVs是一个259*13的稀疏矩阵,承装的是259个支持向量。model.rho是决策函数中的常数项的相反数(-b)
在这里首先我们看一下 通过&–s 0&参数(C-SVC模型)得到的最终的分类决策函数的表达式是怎样的?这里如果有关于C-SVC模型不懂的地方,请看这个pdf文件:libsvm_library.pdf附件:最终的决策函数为:在由于我们使用的是RBF核函数(前面参数设置&–t 2),故这里的决策函数即为:其中|| x-y ||是二范数距离&;这里面的
b就是-model.rho(一个标量数字);b = -model.n代表支持向量的个数即&n = model.totalSV(一个标量数字);&对于每一个i:wi =model.sv_coef(i);&支持向量的系数(一个标量数字)xi = model.SVs(i,:)&支持向量(1*13的行向量)x&是待预测标签的样本 (1*13的行向量)gamma&就是&-g&参数好的下面我们通过model提供的信息自己建立上面的决策函数如下:
%% DecisionFunction
function plabel = DecisionFunction(x,model)
gamma = model.Parameters(4);
RBF = @(u,v)( exp(-gamma.*sum( (u-v).^2) ) );
len = length(model.sv_coef);
for i = 1:len
u = model.SVs(i,:);
y = y + model.sv_coef(i)*RBF(u,x);
b = -model.
plabel = 1;
plabel = -1;
有了这个决策函数,我们就可以自己预测相应样本的标签了:
plable = zeros(270,1);
for i = 1:270
x = data(i,:);
plabel(i,1) = DecisionFunction(x,model);
%%&验证自己通过决策函数预测的标签和svmpredict给出的标签相同
flag = sum(plabel == PredictLabel)
最终可以看到&flag = 270&,即自己建立的决策函数是正确的,可以得到和svmpredict得到的一样的样本的预测标签,事实上svmpredict底层大体也就是这样实现的。最后我们来看一下,svmpredict得到的返回参数的意义都是什么在下面这段代码中&:
%&首先载入数据
load heart_
data = heart_scale_
label = heart_scale_
%&建立分类模型
model = svmtrain(label,data,'-s 0 -t 2 -c 1.2 -g 2.8');
%&利用建立的模型看其在训练集合上的分类效果
[PredictLabel,accuracy] = svmpredict(label,data,model);
运行可以看到
Parameters: [5x1 double]
nr_class: 2
totalSV: 259
rho: 0.0514
Label: [2x1 double]
nSV: [2x1 double]
sv_coef: [259x1 double]
SVs: [259x13 double]
Accuracy = 99.6296% (269/270) (classification)
accuracy =
这里面要说一下返回参数accuracy的三个参数的意义。重要的知识点:
返回参数accuracy从上到下依次的意义分别是:分类准率(分类问题中用到的参数指标)平均平方误差(MSE (mean squared error))&[回归问题中用到的参数指标]平方相关系数(r2 (squared correlation coefficient))[回归问题中用到的参数指标]其中mse&和r2的计算公式分别为:插图:写在后面的话,至此关于model中相应参数的一些意义,以及到底如果得到决策函数的表达式或者计算方式的就算是说的很明了了。可能还有的同学会问,如何得到分类决策函数中的那个alpha系数【这个肯定会有人问】,还是再磨叽说一下吧:上面的wi其实是alpha和支持向量的类别标签(1或-1的乘积),原始决策函数的表达式如下:插图:上面的yi是支持向量的类别标签(1或者-1),在libsvm中将yi和alpha的乘积放在一起用model.sv_coef(w)来承装。都说到这份上,应该能明白了吗?
再说点废话:就是在关于SVM的学习中,我发现很多朋友都不主动思考和尝试,老是在问,这样很不好,这样很被动,上面这些也没有人教我,都是我自己思考出来,然后编程验证,如果出现不合理的地方就再继续思考,反正道理和书籍里面都有讲解,总能洞穿的啊。O(∩_∩)Oo
转自:.cn/s/blog_8fqc.html
阅读(...) 评论()}

我要回帖

更多关于 系统拷贝到固态硬盘 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信