python中支持向量分类的时间尺度
我使用支持向量机,特别是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进行拟合和评分 这是我的密码: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在
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,我认为这只是一个平均精度