机器学习(周志华) 西瓜书 第六章课后习题6.2—— Python实现

机器学习(周志华) 西瓜书 第四章课后习题6.2—— Python实现

  • 实验题目

 试使用LIBSVM,在西瓜数据集3.0上分别用线性核和高斯核训练一个SVM,并比较其支持向量的差别。 

  • 实验原理

ibsvm在python版本提供了两个模块,svmutil.py为高层次版本,svm.py为低层次版本。在低层次版本svm.py中,没有对python内置库ctypes类型进行封装,而svmutil.py则提供了简单易用的函数可以直接使用;

svmtuil.py中含有下列主要函数:

svm_train()

训练SVM模型

svm_predict()

预测测试数据结果

svm_read_problem()

读取数据

svm_load_model()

加载SVM模型

svm_save_model()

保存SVM模型

evaluations()

检验预测结果

  • 实验过程

数据集获取

将数据转化为libsvm工具使用的格式

存为‘data_3a.txt’

1	 1:.697	 2:.46
1	 1:.774	 2:.376
1	 1:.634	 2:.264
1	 1:.608	 2:.318
1	 1:.556	 2:.215
1	 1:.402999999999999	 2:.237
1	 1:.481	 2:.149
1	 1:.437	 2:.211
0	 1:.665999999999999	 2:.091
0	 1:.243	 2:.267
0	 1:.245	 2:.057
0	 1:.342999999999999	 2:.099
0	 1:.639	 2:.161
0	 1:.657	 2:.198
0	 1:.36	 2:.37
0	 1:.593	 2:.042
0	 1:.719	 2:.103

机器学习(周志华) 西瓜书 第六章课后习题6.2—— Python实现_第1张图片

算法实现

数据读取和预处理:数据转化为libsvm工具使用的格式

读取LIBSVM数据,分别存入yx列表,其中y为类别,x为训练样本

运行SVM:

机器学习(周志华) 西瓜书 第六章课后习题6.2—— Python实现_第2张图片

对类别y、训练样本x,分别用线性核和高斯核进行SVM训练,并将训练产生的model保留成为文件

主函数:

  • 实验结果

线性核     

机器学习(周志华) 西瓜书 第六章课后习题6.2—— Python实现_第3张图片

高斯核

机器学习(周志华) 西瓜书 第六章课后习题6.2—— Python实现_第4张图片

  • 程序清单:

from svmutil import *

def processData(filename):
	prob_y, prob_x = svm_read_problem(filename)
	return prob_y, prob_x

def run(x, y):
	"""
	svm_train(y, x [, 'options']) -> model | ACC | MSE 
	svm_train(prob, [, 'options']) -> model | ACC | MSE 
	svm_train(prob, param) -> model | ACC| MSE 
	Train an SVM model from data (y, x) or an svm_problem prob using
	'options' or an svm_parameter param. 
	If '-v' is specified in 'options' (i.e., cross validation)
	either accuracy (ACC) or mean-squared error (MSE) is returned.
	'options':
	    -s svm_type : set type of SVM (default 0)
	        0 -- C-SVC
	        1 -- nu-SVC
	        2 -- one-class SVM
	        3 -- epsilon-SVR
	        4 -- nu-SVR
	    -t kernel_type : set type of kernel function (default 2)
	        0 -- linear: u'*v
	        1 -- polynomial: (gamma*u'*v + coef0)^degree
	        2 -- radial basis function: exp(-gamma*|u-v|^2)
	        3 -- sigmoid: tanh(gamma*u'*v + coef0)
	        4 -- precomputed kernel (kernel values in training_set_file)
	    -d degree : set degree in kernel function (default 3)
	    -g gamma : set gamma in kernel function (default 1/num_features)
	    -r coef0 : set coef0 in kernel function (default 0)
	    -c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
	    -n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
	    -p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
	    -m cachesize : set cache memory size in MB (default 100)
	    -e epsilon : set tolerance of termination criterion (default 0.001)
	    -h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
	    -b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
	    -wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
	    -v n: n-fold cross validation mode
	    -q : quiet mode (no outputs)
	"""
	model1 = svm_train(y, x,'-t 0') # 线性
	model2 = svm_train(y, x,'-t 2') # 高斯

	svm_save_model('Linear.model', model1)
	svm_save_model('Gauss.model', model2)

if __name__ == '__main__':
	filename = 'data_3a.txt'
	y, x = processData(filename)
	run(x, y)

 

你可能感兴趣的:(机器学习(周志华) 西瓜书 第六章课后习题6.2—— Python实现)