【发布时间】:2014-01-03 12:04:53
【问题描述】:
我将 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 也应该用于正负数据组合或单独用于两者?我想它必须结合使用,因为只有我们才能在测试集上使用缩放器参数。
【问题讨论】:
-
对于您的问题2,在 P/N 数据上完全使用 Scaler
-
好的,谢谢...你能不能再给我一个更新信息。维度为 m-samples x n-features 的数据是沿行还是沿列标准化?我想它是沿着列完成的,但是建议在使用分类器对其进行分类或预测之前对用户输入进行规范化。那么考虑到输入将具有 1 个样本 x n 特征这一事实,如何对单个输入进行归一化呢?显然,不能沿着按行的特征进行归一化。
-
还有一件事...用户输入标准化是按照与训练数据相同的规模完成的。
-
Ashutosh,对每个特征的数据进行规范化,因此您可能需要沿行进行。当您的测试数据出现时,请使用与您的训练数据相同的标准化标准。
标签: python machine-learning classification scikit-learn