2016-03-30 37 views
5

Sto imparando la ricerca della griglia di convalida incrociata e ho trovato questo youtube playlist e il tutorial è stato anche caricato su github come un notebook ipython. Sto cercando di ricreare i codici nella sezione Ricerca simultanea parametri multiplima invece di usare knn sto usando SVM Regression. Questo è il mio codiceScikit-learn griglia di ricerca con regressione SVM

from sklearn.datasets import load_iris 
from sklearn import svm 
from sklearn.grid_search import GridSearchCV 
import matplotlib.pyplot as plt 
import numpy as np 
iris = load_iris() 
X = iris.data 
y = iris.target 

k=['rbf', 'linear','poly','sigmoid','precomputed'] 
c= range(1,100) 
g=np.arange(1e-4,1e-2,0.0001) 
g=g.tolist() 
param_grid=dict(kernel=k, C=c, gamma=g) 
print param_grid 
svr=svm.SVC() 
grid = GridSearchCV(svr, param_grid, cv=5,scoring='accuracy') 
grid.fit(X, y) 
print() 
print("Grid scores on development set:") 
print() 
print grid.grid_scores_ 
print("Best parameters set found on development set:") 
print() 
print(grid.best_params_) 
print("Grid best score:") 
print() 
print (grid.best_score_) 
# create a list of the mean scores only 
grid_mean_scores = [result.mean_validation_score for result in grid.grid_scores_] 
print grid_mean_scores 

Ma il suo dare questo errore

raise ValueError("X should be a square kernel matrix") ValueError: X should be a square kernel matrix

+0

Quando si segnala un errore di Python si dovrebbe sempre citare il traceback completo Python presso dà informazioni su dove è stata sollevata l'eccezione. – ogrisel

risposta

10

Rimuovere 'precomputed' dal vostro spazio dei parametri.

kernel='precomputed' può essere utilizzato solo quando passa una matrice di dati che rappresenta (n_samples, n_samples) somiglianze coppie di campioni al posto del tradizionale matrice rettangolare dati (n_samples, n_features).

Vedere la documentazione per maggiori dettagli sul significato del parametro del kernel:

+0

Hey, grazie per la risposta, ma puoi dirmi come esportare questo modello è questo il modo corretto '>>> da sklearn.externals import joblib >>> joblib.dump (grid, 'my_model.pkl', compress = 9) ' – Eka