在GridSearchCV和SVM分类器中使用多核的问题

时间:2017-05-10 19:02:27

标签: scikit-learn

我正在尝试使用SVM分类器进行网格搜索。

考虑我从文件中解析并输入到numpy数组的datatarget

然后我预处理它们。

# Transform the data to have zero mean and unit variance.
zeroMeanUnitVarianceScaler = preprocessing.StandardScaler().fit(data)
zeroMeanUnitVarianceScaler.transform(data)
scaledData = data

# Transform the target to have range [-1, 1].
scaledTarget = np.empty([161L,], dtype=int)
for i in range(len(target)):
    if(target[i] == 'Malignant'):
        scaledTarget[i] = 1
    if(target[i] == 'Benign'):
        scaledTarget[i] = -1

我现在尝试设置网格并将缩放后的数据与目标相匹配。

# Generate parameters for parameter grid.
CValues = np.logspace(-3, 3, 7)
GammaValues = np.logspace(-3, 3, 7)
kernelValues = ('poly', 'sigmoid')
# kernelValues = ('linear', 'rbf', 'sigmoid')
degreeValues = np.array([0, 1, 2, 3, 4])
coef0Values = np.logspace(-3, 3, 7)

# Generate the parameter grid.
paramGrid = dict(C=CValues, gamma=GammaValues, kernel=kernelValues, 
coef0=coef0Values)

# Create and train a SVM classifier using the parameter grid and with 
stratified shuffle split.
stratifiedShuffleSplit = StratifiedShuffleSplit(n_splits = 10, test_size = 
0.25, train_size = None, random_state = 0)
clf = GridSearchCV(estimator=svm.SVC(), param_grid=paramGrid, 
cv=stratifiedShuffleSplit, n_jobs=1) 
clf.fit(scaledData, scaledTarget)

如果我取消注释行kernelValues = ('linear', 'rbf', 'sigmoid'),那么代码将在我运行Windows 10的16 GB i7-4950 3.6 GHz计算机上运行大约50秒。 但是,如果我尝试以'poly'作为可能的内核值运行代码,那么代码将永远挂起。例如,我昨天一夜之间就跑了,当我今天回到办公室时它没有返回任何东西。

有趣的是,如果我尝试使用多核创建SVM分类器,它会立即返回结果

clf = svm.SVC(kernel='poly',degree=2)
clf.fit(data, target)

当我执行上述代码时,它会挂起。我没有尝试过其他cv方法来查看是否有任何改变。

这是sci-kit学习的错误吗?我做得好吗?另外,我使用GridSearchCV和StratifiedShuffleSplit做网格搜索/交叉验证的方法是否明智?在我看来,这是最蛮力(即耗时)但强有力的方法。

谢谢!

0 个答案:

没有答案