Кросс-валидация не будет завершена, застрял в cross_val_score - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь запустить перекрестную проверку kfold. но по какой-то причине он застревает здесь, он не закончится отсюда accuracies = cross_val_score(estimator = classifier, X = X_train, y = y_train, cv = 10, n_jobs = -1) Я не могу понять, в чем проблема. и как мне это исправить.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd


dataset = pd.read_csv('Churn_Modelling.csv')
X = dataset.iloc[:, 3:13].values
y = dataset.iloc[:, 13].values

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()
X = X[:,1:]

# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)


import keras
from keras.models import Sequential #Required to initialize the ANN
from keras.layers import Dense #Build layers of ANN
from keras.layers import Dropout


# Evaluating the ANN
import keras
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score

from keras.models import Sequential #Required to initialize the ANN
from keras.layers import Dense #Build layers of ANN

def build_classifier(): # Builds the architecture, or the classifier
    classifier = Sequential()
    classifier.add(Dense(activation = 'relu', input_dim = 11, units = 6, kernel_initializer = 'uniform'))# add layers
    classifier.add(Dense(activation = 'relu', units = 6, kernel_initializer = 'uniform'))# add layers
    classifier.add(Dense(activation = 'sigmoid', units = 1, kernel_initializer = 'uniform'))
    classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
    return classifier
classifier = KerasClassifier(build_fn = build_classifier, batch_size = 10, nb_epoch = 100)
accuracies  = cross_val_score(estimator  = classifier, X = X_train, y = y_train, cv = 10, n_jobs = -1)
mean = accuracies.mean()
variance = accuracies.std()

Редактировать
Я на Windows 10, используя Anaconda с Python 3.6.
Набор данных: Ссылка на диск для набора данных
Он отлично работает, когда я устанавливаю n_jobs = 1, но не когда n_jobs = -1

1 Ответ

0 голосов
/ 27 июня 2018

Так как вы установили n_jobs = -1, то все процессоры используются в соответствии с упомянутой документацией здесь . Однако вы должны понимать, что использование всех процессоров не обязательно может привести к сокращению времени выполнения, потому что:

  • Существуют накладные расходы, связанные с созданием и распределением ресурсов для новых потоков.
  • Кроме того, могут существовать другие узкие места, такие как данные слишком большого размера для одновременной широковещательной рассылки всем потокам, преимущественное использование потоков над ОЗУ (или другими ресурсами и т. Д.), Способ передачи данных в каждый поток и т. Д. .
  • Также многопоточность в Python имеет различные недостатки, см. здесь и здесь .

Вы можете проверить аналогичную проблему с GridSearchCV и параличностью здесь, в этом ответе .

Кроме того, как уже упоминалось @ncfith, в настоящее время нет решения этой проблемы.

Ссылки

...