西瓜书《机器学习》课后答案——chapter6_6.2

6.2 试使用LIBSVM,在西瓜数据集3.0alpha上分别用线性核和高斯核训练一个SVM,并比较其支持向量的差别。
解答:
无论是线性核还是高斯核,在惩罚因子C比较大的时候,支持向量都比较少。这里我们使用C的默认值1。
另外,高斯核还有一个参数 γ ,使用默认值 1d ,d为实例的特征数。

(1) 首先,我们需要把3.0alpha西瓜数据集转换成libsvm需要的格式化文本,数据格式为

label index1:value1 index2:value2 ...
label index1:value1 index2:value2 ...
...

其中,label为整数,代表类别;index为从1开始的整数,代表第几个属性;value取实数,表示对应位置的特征值。
生成格式化数据的代码为:

""" Author: Victoria Created on 2017.9.30 15:30 """

import xlrd

book = xlrd.open_workbook("3.0alpha.xlsx")
sheet = book.sheet_by_name("Sheet1")
x1s = sheet.row_values(0)
x2s = sheet.row_values(1)
ys = sheet.row_values(3)

with open("3.0alpha_train.txt", "w") as f:
    for x1, x2, y in zip(x1s, x2s, ys):
        f.write("{} 1:{} 2:{}\n".format(int(y), x1, x2))

生成的3.0alpha_train.txt内容如下:

1 1:0.697 2:0.46
1 1:0.774 2:0.376
1 1:0.634 2:0.264
1 1:0.608 2:0.318
1 1:0.556 2:0.215
1 1:0.403 2:0.237
1 1:0.481 2:0.149
1 1:0.437 2:0.211
0 1:0.666 2:0.091
0 1:0.243 2:0.267
0 1:0.245 2:0.057
0 1:0.343 2:0.099
0 1:0.639 2:0.161
0 1:0.657 2:0.198
0 1:0.36 2:0.37
0 1:0.593 2:0.042
0 1:0.719 2:0.103

(2) 线性核训练的SVM
下载libsvm并且解压后,进入/windows/文件夹,可以看到有svm-train.exe,这个是用于训练SVM的可执行程序。把3.0alpha_train.txt文件复制到当前文件夹,然后在当前文件夹下打开命令行窗口,运行以下命令:

svm-train.exe -t 0 3.0alpha_train.txt #参数-t表示核函数,0代表线性核函数

CMD中会打印:
这里写图片描述

并且会在当前目录下生成3.0alpha_train.txt.model文件,内容如下:

svm_type c_svc
kernel_type linear
nr_class 2
total_sv 16
rho 1.1789
label 1 0
nr_sv 8 8
SV #支持向量,最左边的一列表示对应的拉格朗日因子
1 1:0.697 2:0.46 
1 1:0.774 2:0.376 
1 1:0.634 2:0.264 
1 1:0.608 2:0.318 
1 1:0.556 2:0.215 
1 1:0.403 2:0.237 
1 1:0.481 2:0.149 
1 1:0.437 2:0.211 
-1 1:0.666 2:0.091 
-1 1:0.243 2:0.267 
-1 1:0.343 2:0.099 
-1 1:0.639 2:0.161 
-1 1:0.657 2:0.198 
-1 1:0.36 2:0.37 
-1 1:0.593 2:0.042 
-1 1:0.719 2:0.103 

(3) 高斯核训练的SVM

svm-train.exe -t 2 3.0alpha_train.txt #参数-t表示核函数,2代表高斯核函数

CMD中会打印:
这里写图片描述

生成的3.0alpha_train.txt.model内容如下:

svm_type c_svc
kernel_type rbf
gamma 0.5
nr_class 2
total_sv 16
rho 0.856587
label 1 0
nr_sv 8 8
SV #支持向量
1 1:0.697 2:0.46 
1 1:0.774 2:0.376 
1 1:0.634 2:0.264 
1 1:0.608 2:0.318 
1 1:0.556 2:0.215 
1 1:0.403 2:0.237 
1 1:0.481 2:0.149 
1 1:0.437 2:0.211 
-1 1:0.666 2:0.091 
-1 1:0.243 2:0.267 
-1 1:0.343 2:0.099 
-1 1:0.639 2:0.161 
-1 1:0.657 2:0.198 
-1 1:0.36 2:0.37 
-1 1:0.593 2:0.042 
-1 1:0.719 2:0.103 

可以看到,无论是线性核还是高斯核,使用默认参数设置的情况下,支持向量都是16个,而且是一样的。

你可能感兴趣的:(机器学习)