-
Notifications
You must be signed in to change notification settings - Fork 0
/
SVM_train.py
54 lines (46 loc) · 1.46 KB
/
SVM_train.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#-*- coding:utf-8 -*-
import svmutil
import os
import re
from data_cleaner import loadDataSet
from data_cleaner import libSvmFormatSaveInFile
from data_cleaner import libSvmFormat
#y,x = svm_read_problem('data/ ')
class svmModel(object):
def __init__(self,name):
self.dataMat = []
self.labelMat = []
self.legalName = name
def cSvmTrainSet(self):
dataMat = []
labelMat = []
file_pattern = re.compile('^%s-\d.rec' % self.legalName)
for fdata in os.listdir('data'):
if file_pattern.match(fdata):
data,label = loadDataSet('data/'+fdata,1)
else:
data,label = loadDataSet('data/'+fdata,-1)
dataMat+=data
labelMat+=label
libSvmFormatSaveInFile(dataMat,labelMat,'data_format/%s.mat' % self.legalName) # todo: duoxiancheng
y,x = svmutil.svm_read_problem('data_format/%s.mat' % self.legalName)
prob = svmutil.svm_problem(y,x,isKernel = True)
param = svmutil.svm_parameter('-t 0 ')
self.model = svmutil.svm_train(prob,param)
print self.model
def cSvmPredict(self,filename,isLegal = True):
label = 1 if isLegal else -1
dataMat,labelMat = loadDataSet(filename,label)
x=[]
y=[]
for data in dataMat:
formatData = libSvmFormat(data)
x.append(formatData)
y.append(label)
p_labs, p_acc, p_vals = svmutil.svm_predict(y,x, self.model )
print p_labs,p_acc,p_vals
return p_labs
if __name__ == '__main__':
tmp = svmModel('hfz')
tmp.cSvmTrainSet()
tmp.cSvmPredict('data_ready_predict/xxy-1.rec',False)