2015-10-02 2 views
0
import numpy as np 
import sklearn.svm as svm 

Вот моя функция ядраКак заставить мое собственное ядро ​​работать?

def my_kernel(p1, p2): 
    r = 1-np.dot(p1.T, p2) 
    return np.exp(-r**2/4) 

И мои данные

X1 = np.random.random((50,5)) 
X1 = X1/np.sum(X1) 
X1 = X1.T 
Y1 = [0, 0, 1, 1, 1] 

Затем используйте sklearn SVM

my_svm = svm.SVC(kernel=my_kernel) 
my_svm.fit(X1,Y1) 

выводит

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, 
    kernel=<function my_kernel at 0x109891e18>, max_iter=-1, 
    probability=False, random_state=None, shrinking=True, tol=0.001, 
    verbose=False) 

Но когда я использую предсказать()

y_pred = my_svm.predict(X1) 

это говорит

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-151-48e55060e495> in <module>() 
----> 1 y_pred = my_svm.predict(X1) 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/sklearn/svm/base.py in predict(self, X) 
    498    Class labels for samples in X. 
    499   """ 
--> 500   y = super(BaseSVC, self).predict(X) 
    501   return self.classes_.take(np.asarray(y, dtype=np.intp)) 
    502 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/sklearn/svm/base.py in predict(self, X) 
    290   X = self._validate_for_predict(X) 
    291   predict = self._sparse_predict if self._sparse else self._dense_predict 
--> 292   return predict(X) 
    293 
    294  def _dense_predict(self, X): 

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/sklearn/svm/base.py in _dense_predict(self, X) 
    304     raise ValueError("X.shape[1] = %d should be equal to %d, " 
    305         "the number of samples at training time" % 
--> 306         (X.shape[1], self.shape_fit_[0])) 
    307 
    308   svm_type = LIBSVM_IMPL.index(self._impl) 

ValueError: X.shape[1] = 50 should be equal to 5, the number of samples at training time 

ответ

0

Проблема заключается в функции ядра, где скалярное произведение должно быть

def my_kernel(p1, p2): 
    r = 1-np.dot(p1, p2.T) 
    return np.exp(-r**2/4) 
Смежные вопросы