我正在使用scikit进行机器学习。虽然我按照官方文档中提到的完全按照步骤操作,但我遇到了两个问题。以下是代码的主要部分:
1)trdata是使用sklearn.train_test_split创建的训练数据。 2)ptest和ntest分别是阳性和阴性的测试数据
## Preprocessing
scaler = StandardScaler(); scaler.fit(trdata);
trdata = scaler.transform(trdata)
ptest = scaler.transform(ptest); ntest = scaler.transform(ntest)
## Building Classifier
# setting gamma and C for grid search optimization, RBF Kernel and SVM classifier
crange = 10.0**np.arange(-2,9); grange = 10.0**np.arange(-5,4)
pgrid = dict(gamma = grange, C = crange)
cv = StratifiedKFold(y = tg, n_folds = 3)
## Threshold Ranging
clf = GridSearchCV(SVC(),param_grid = pgrid, cv = cv, n_jobs = 8)
## Training Classifier: Semi Supervised Algorithm
clf.fit(trdata,tg,n_jobs=8)
问题1)当我使用在GridSearchCV n_jobs = 8,代码运行直到GridSearchCV但挂起或说需要非常长的时间,而不结果在执行“clf.fit”,即使是非常小的数据集。当我删除它然后执行,但clf.fit需要很长时间来收敛大数据集。对于正面和负面,我的数据大小为600 x 12矩阵。你能告诉我n_jobs究竟会做什么以及应该如何使用它?还有哪些更快的拟合技术或代码修改可以应用于使其更快?
问题2)也应将StandardScaler用于正面和负面数据的组合或分别用于两者?我想它必须结合使用,因为只有我们可以在测试集上使用缩放器参数。
答案 0 :(得分:3)
SVC似乎对未规范化的数据非常敏感,您可以尝试通过以下方式规范化数据:
from sklearn import preprocessing
trdata = preprocessing.scale(trdata)