2013-12-16 44 views
3

我正在使用scikit进行机器学习。虽然我完全按照官方文件中提到的步骤进行,但我遇到了两个问题。这里是代码的主要部分:python scikit中更快的数据拟合(或学习)功能

1)trdata是使用sklearn.train_test_split创建的训练数据。 2)p试验和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)当我使用n_jobs = 8在GridSearchCV,代码运行直到GridSearchCV但挂起或说需要非常长的时间,而不结果在执行'clf.fit',即使是非常小的数据集。当我删除它,然后执行,但clf.fit花费很长时间来收敛大数据集。我的数据大小为600 x 12矩阵的正面和负面。你能告诉我什么n_jobs会做什么以及如何使用它?还有什么更快的拟合技术或代码修改,可以用来使其更快?

问题2)StandardScaler也应该结合使用正数据还是负数据?我想它必须结合使用,因为只有我们可以在测试集上使用定标器参数。

+0

您problem2,使用定标器上的P/N数据完全 – lennon310

+0

好的,谢谢你。 .. 你能不能更新我的一个更多的信息。尺寸为 m样本x n特征的数据是沿行还是沿着列进行归一化的?我想它是沿着列完成的,但是建议在用分类器对它进行分类或预测之前对用户输入进行规范化。那么考虑到输入将具有1个样本x n个特征的事实,单个输入是如何归一化的呢?显然,规范化不能沿着按行排列的功能进行。 – Ashutosh

+0

还有一件事...用户输入规范化与训练数据的规模相同。 – Ashutosh

回答

3

SVC似乎是不是归一化数据非常敏感,你可以尝试通过数据标准化的:

from sklearn import preprocessing 
trdata = preprocessing.scale(trdata) 
+1

非常重要的细节,我看到很少有人提到这一点。 – dividebyzero