Vel*_*les 10 python opencv classification svm
所以我有一个矩阵,我的样本图像(都变成了矢量)通过PCA/LDA运行,一个矢量表示每个图像所属的类.现在我想使用OpenCV SVM类来训练我的SVM(我正在使用Python,OpenCV 2.3.1).但我在定义参数时遇到问题:
test = cv2.SVM()
test.train(trainData, responses, ????)
Run Code Online (Sandbox Code Playgroud)
我坚持如何定义SVM的类型(线性等)和其他东西.在C++中,您可以通过以下方式定义它:svm_type = CvSVM :: C_SVC ... Python没有.C++还有一个特殊的类来存储这些参数 - > CvSVMParams.有人能用Python给我一个例子吗?比如定义SVM类型,gamma等.
2.3.1文档说它是这样的:
Python: cv2.SVM.train(trainData, responses[, varIdx[, sampleIdx[, params]]]) ? retval
Run Code Online (Sandbox Code Playgroud)
什么是varIdx和sampleIdx,以及如何定义参数?
tim*_*luz 18
要使用OpenCV机器学习算法,您必须编写一些包装类:
1.第一个父母班
class StatModel(object):
'''parent class - starting point to add abstraction'''
def load(self, fn):
self.model.load(fn)
def save(self, fn):
self.model.save(fn)
Run Code Online (Sandbox Code Playgroud)
2.最后SvM包装器:
class SVM(StatModel):
'''wrapper for OpenCV SimpleVectorMachine algorithm'''
def __init__(self):
self.model = cv2.SVM()
def train(self, samples, responses):
#setting algorithm parameters
params = dict( kernel_type = cv2.SVM_LINEAR,
svm_type = cv2.SVM_C_SVC,
C = 1 )
self.model.train(samples, responses, params = params)
def predict(self, samples):
return np.float32( [self.model.predict(s) for s in samples])
Run Code Online (Sandbox Code Playgroud)
3.示例用法:
import numpy as np
import cv2
samples = np.array(np.random.random((4,2)), dtype = np.float32)
y_train = np.array([1.,0.,0.,1.], dtype = np.float32)
clf = SVM()
clf.train(samples, y_train)
y_val = clf.predict(samples)
Run Code Online (Sandbox Code Playgroud)
设置参数
设置参数很简单 - 只需编写一个将参数保存为键的字典.您应该查看原始文档以查看所有可能的参数和允许的值:http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#cvsvmparams
是的,svm_type和kernel_type的可能值在C++中,但是有很简单的方法可以将这些常量转换为Python表示,例如CvSVM :: C_SVC在Python中被编写为cv2.SVM_C_SVC.
前奏 要获得机器学习算法的详细包装,看看letter-recog.py例如在磁盘或OpenCV的库的打开URL您的OpenCV的例子:https://github.com/Itseez/opencv/tree/master/samples/python2
| 归档时间: |
|
| 查看次数: |
16483 次 |
| 最近记录: |