【发布时间】:2018-05-18 08:42:22
【问题描述】:
我正在尝试使用以下结构将模型拟合到数据集上:
# Import stuff and generate dataset.
import sklearn as skl
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn import preprocessing
from sklearn import svm
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn import metrics
from tempfile import mkdtemp
from shutil import rmtree
from sklearn.externals.joblib import Memory
X, y = skl.datasets.make_classification(n_samples=1400, n_features=11, n_informative=5, n_classes=2, weights=[0.94, 0.06], flip_y=0.05, random_state=42)
X_train, X_test, y_train, y_test = skl.model_selection.train_test_split(X, y, test_size=0.3, random_state=42)
# 1. Instantiate a scaler.
#normer = preprocessing.Normalizer()
normer = preprocessing.StandardScaler()
# 2. Instantiate a Linear Support Vector Classifier.
svm1 = svm.SVC(probability=True, class_weight={1: 10})
# 3. Forge normalizer and classifier into a pipeline. Make sure the pipeline steps are memorizable during the grid search.
cached = mkdtemp()
memory = Memory(cachedir=cached, verbose=1)
pipe_1 = Pipeline(steps=[('normalization', normer), ('svm', svm1)], memory=memory)
# 4. Instantiate Cross Validation
cv = skl.model_selection.KFold(n_splits=5, shuffle=True, random_state=42)
# 5. Instantiate the Grid Search for Hypereparameter Tuning
params = [ {"svm__kernel": ["linear"], "svm__C": [1, 10, 100, 1000]},
{"svm__kernel": ["rbf"], "svm__C": [1, 10, 100, 1000], "svm__gamma": [0.001, 0.0001]} ]
grd = GridSearchCV(pipe_1, params, scoring='roc_auc', cv=cv)
调用时程序在我的 Jupyter 笔记本中冻结
y_pred = grd3.fit(X_train, y_train).predict_proba(X_test)[:, 1]
我在 20 分钟后中止了。 当我使用 preprocessing.Normalizer() 而不是 StandardScaler 时,.fit() 会在两三分钟后完成。
这可能是什么问题?
编辑:这里是 GridSearchCV() 的输出:
GridSearchCV(cv=KFold(n_splits=5, random_state=2, shuffle=True), error_score='raise',estimator=Pipeline(memory=None, steps=[('normalization', StandardScaler(copy=True, with_mean=True, with_std=True)), ('svm', SVC(C=1.0, cache_size=200, class_weight={1: 10}, coef0=0.0, decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=True, random_state=None, shrinking=True, tol=0.001, verbose=False))]), fit_params=None, iid=True, n_jobs=1,param_grid=[{'svm__kernel': ['linear'], 'svm__C': [1, 10, 100, 1000]}, {'svm__kernel': ['rbf'], 'svm__C': [1, 10, 100, 1000], 'svm__gamma': [0.001, 0.0001]}],pre_dispatch='2*n_jobs', refit=True, return_train_score=True, scoring='roc_auc', verbose=0)
【问题讨论】:
-
嗯,这很奇怪。你能给我们一些数据,以便我们重现错误吗?此外,可能需要添加 verbose = 2(或 5),以便您可以看到 GridSearchCV 正在测试的折叠。它可能一直在运行,但没有告诉你
-
如果我设置详细,打印输出在第五块左右后停止
-
运行 45 分钟后使用 GridSearchCV 输出修改您的帖子。 SVN 的 RBF 内核通常需要很长时间才能适应,所以这可能是你的“冻结”
-
你的意思是 grd.best_param_ 吗?
-
不,从
GridSearchCV(pipe_1, params, verbose = 2, scoring='roc_auc', cv=cv)发送到控制台的文本
标签: python scikit-learn normalization scaling grid-search