| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- import os.path
- import itertools
- import Tools
- from sklearn import svm
- import random
- import numpy as np
- # Number of vectors to test for each test
- NBTESTSAMPLE = 100
- # Dimension of the vectors
- VECDIM = 10
- # Number of vectors for training
- NBVECTORS=10
- # Distance between the two centers (training vectors are gaussianly
- # distributed around the centers)
- CENTER_DISTANCE = 1
- # SVM KIND
- LINEAR=1
- POLY=2
- RBF=3
- SIGMOID=4
- C0 = np.zeros((1,VECDIM))
- C1 = np.copy(C0)
- C1[0,0] = C1[0,0] + CENTER_DISTANCE
- # Data for training
- X = []
- Xone = []
- y = []
- class1 = 0
- class2 = 1
- for i in range(NBVECTORS):
- v = np.random.randn(1,VECDIM)
- v = v * CENTER_DISTANCE/2.0/10
- # 2 classes are needed
- if i == 0:
- c = 0
- elif i == 1:
- c = 1
- else:
- c = np.random.choice([0,1])
- if (c == 0):
- v = v + C0
- y.append(class1)
- else:
- v = v + C1
- y.append(class2)
- if c == 0:
- Xone.append(v[0].tolist())
- X.append(v[0].tolist())
- def newSVMTest(config,kind,theclass,clf,nb):
- inputs = []
- references = []
- for i in range(NBTESTSAMPLE):
- v = np.random.randn(1,VECDIM)
- v = v * CENTER_DISTANCE/2.0/6.0
- c = np.random.choice([0,1])
- if (c == 0):
- v = v + C0
- else:
- v = v + C1
- inputs.append(v[0].tolist())
- toPredict=[v[0].tolist()]
- references.append(clf.predict(toPredict))
- inputs=np.array(inputs)
- inputs=inputs.reshape(NBTESTSAMPLE*VECDIM)
- config.writeInput(nb, inputs,"Samples")
- references=np.array(references)
- references=references.reshape(NBTESTSAMPLE)
- # Classifier description
- supportShape = clf.support_vectors_.shape
- nbSupportVectors=supportShape[0]
- vectorDimensions=supportShape[1]
- intercept = np.array(clf.intercept_)
- dualCoefs=clf.dual_coef_
- dualCoefs=dualCoefs.reshape(nbSupportVectors)
- supportVectors=clf.support_vectors_
- supportVectors = supportVectors.reshape(nbSupportVectors*VECDIM)
-
- if kind == LINEAR:
- dims=np.array([kind,theclass[0],theclass[1],NBTESTSAMPLE,VECDIM,nbSupportVectors])
- elif kind==POLY:
- dims=np.array([kind,theclass[0],theclass[1],NBTESTSAMPLE,VECDIM,nbSupportVectors,clf.degree])
- elif kind==RBF:
- dims=np.array([kind,theclass[0],theclass[1],NBTESTSAMPLE,VECDIM,nbSupportVectors])
- elif kind==SIGMOID:
- dims=np.array([kind,theclass[0],theclass[1],NBTESTSAMPLE,VECDIM,nbSupportVectors])
-
- config.writeInputS16(nb, dims,"Dims")
- if kind == LINEAR:
- params=np.concatenate((supportVectors,dualCoefs,intercept))
- elif kind == POLY:
- coef0 = np.array([clf.coef0])
- gamma = np.array([clf._gamma])
- params=np.concatenate((supportVectors,dualCoefs,intercept,coef0,gamma))
- elif kind == RBF:
- gamma = np.array([clf._gamma])
- params=np.concatenate((supportVectors,dualCoefs,intercept,gamma))
- elif kind == SIGMOID:
- coef0 = np.array([clf.coef0])
- gamma = np.array([clf._gamma])
- params=np.concatenate((supportVectors,dualCoefs,intercept,coef0,gamma))
- config.writeInput(nb, params,"Params")
- config.writeReferenceS32(nb, references,"Reference")
- def writeTests(config):
- clf = svm.SVC(kernel='linear')
- clf.fit(X, y)
- newSVMTest(config,LINEAR,[class1,class2],clf,1)
- clf = svm.SVC(kernel='poly',gamma='auto', coef0=1.1)
- clf.fit(X, y)
- newSVMTest(config,POLY,[class1,class2],clf,2)
- clf = svm.SVC(kernel='rbf',gamma='auto')
- clf.fit(X, y)
- newSVMTest(config,RBF,[class1,class2],clf,3)
- clf = svm.SVC(kernel='sigmoid',gamma='auto')
- clf.fit(X, y)
- newSVMTest(config,SIGMOID,[class1,class2],clf,4)
- clf = svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
- clf.fit(X)
- newSVMTest(config,RBF,[-1,1],clf,5)
-
- def generatePatterns():
- PATTERNDIR = os.path.join("Patterns","DSP","SVM","SVM")
- PARAMDIR = os.path.join("Parameters","DSP","SVM","SVM")
-
- configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
-
- writeTests(configf32)
- if __name__ == '__main__':
- generatePatterns()
|