python中支持向量分类的时间尺度

python中支持向量分类的时间尺度,python,svm,grid-search,Python,Svm,Grid Search,我使用支持向量机,特别是scikit learn的svm.SVC和rbf核对28000张图像进行分类 这些图像是从0到9的手写数字,我的任务是对每个图像的数字进行分类。每个图像都表示为28 X 28像素矩阵,因此我的数据集实际上是一个28000 X 28 X 28的三维矩阵。因此,我将28 X 28矩阵展平为784个元素的列表,这使得我的数据矩阵现在为28000 X 784 我的策略是首先找到C和gamma的最佳参数。所以我使用了一个gridsearch,C在10^0到10^4之间,gamma在

我使用支持向量机,特别是scikit learn的svm.SVC和rbf核对28000张图像进行分类

这些图像是从0到9的手写数字,我的任务是对每个图像的数字进行分类。每个图像都表示为28 X 28像素矩阵,因此我的数据集实际上是一个28000 X 28 X 28的三维矩阵。因此,我将28 X 28矩阵展平为784个元素的列表,这使得我的数据矩阵现在为28000 X 784

我的策略是首先找到C和gamma的最佳参数。所以我使用了一个gridsearch,C在10^0到10^4之间,gamma在10^3到10^3之间。然后,我使用10倍的k倍,并在所有10倍上使用C和gamma的每种可能组合对svc进行拟合和评分

这是我的密码:

 import numpy as np
 import pandas as pd
 from sklearn import svm, cross_validation, grid_search
 import time

 digits = pd.read_csv("/home/ubuntu/Kaggle/Data/train_digits.csv")
 number_labels = digits['label'].values
 digits_pixels = digits.ix[:,'pixel0':]
 data = digits_pixels.values

 Classifier = svm.SVC()
 c_range = np.logspace(0,4,10)
 gamma_range = np.logspace(-3,3,10)
 K_folds = cross_validation.KFold(len(data),n_folds = 10)
 start_time = time.time()
 if __name__ == '__main__':
     Classifier_2 = grid_search.GridSearchCV(estimator = Classifier, param_grid = dict(C = c_range, gamma = gamma_range), n_jobs = -1)
     scores =  [Classifier_2.fit(data[train],number_labels[train]).score(data[test],number_labels[test]) for train,test in K_folds]
 print "the program took",time.time() - start_time,"to run"
 print "mean score:" , np.mean(scores)
 print ("best C: %1.2f best gamma: %1.3f" %  (Classifier_2.best_estimator_.C,Classifier_2.best_estimator_.gamma))
问题是,这段代码花了一个多小时来运行所有的拟合和评分,尽管我对gridsearch使用了多处理,有40个核心。有什么方法可以优化得分和配合吗?或者是代码中有一个巨大的错误导致了进程的放缓?我知道当我评分时,我使用的是默认的评分方法svm.svc,我认为这只是一个平均精度