Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GridSearchCV在具有任何n_作业的windows上冻结_Python_Windows_Machine Learning_Scikit Learn_Svm - Fatal编程技术网

Python GridSearchCV在具有任何n_作业的windows上冻结

Python GridSearchCV在具有任何n_作业的windows上冻结,python,windows,machine-learning,scikit-learn,svm,Python,Windows,Machine Learning,Scikit Learn,Svm,我目前在使用scikit学习库中的GridSearchCV方法时遇到问题。我已经挣扎了一个星期了,似乎还没想好。当调用它来优化C参数上的线性SVM时,它会一直冻结。 奇怪的是,它不仅在分配n_jobs=-1时发生,而且在分配1个n_jobs时也会发生,所以我不认为多处理是特别的问题。此外,当我给它输入一个X形状数组(24481024)时,它工作正常,但当我给它输入一个形状数组(52021024)时,它完全冻结 我向它提供的数据:float64 numpy数组,形状从(24481024)到(795

我目前在使用scikit学习库中的GridSearchCV方法时遇到问题。我已经挣扎了一个星期了,似乎还没想好。当调用它来优化C参数上的线性SVM时,它会一直冻结。 奇怪的是,它不仅在分配n_jobs=-1时发生,而且在分配1个n_jobs时也会发生,所以我不认为多处理是特别的问题。此外,当我给它输入一个X形状数组(24481024)时,它工作正常,但当我给它输入一个形状数组(52021024)时,它完全冻结

我向它提供的数据:float64 numpy数组,形状从(24481024)到(79561024)不等

我已经尝试过的事情:

  • 使用多线程,如中所建议
  • 将n_作业的数量减少到1
  • 分配少量预分配作业。它开始计算前几行冗长的行,表示它适合C,然后冻结
  • 按照中的建议,添加if
    \uuuuu name\uuuuu=='\uuuuu main\uuuuuu'
  • 从终端运行代码,而不是从我一直在工作的Jupyter笔记本运行代码
我无法按照中的建议运行以下代码,因为我正在Windows上运行代码

from multiprocessing import pool, get_context
forkserver = get_context('forkserver')
p = forkserver.Pool()
需要注意的是:我使用f1函数,而不是默认的精度函数,这可能是一个问题,如以下线程所示:

以下是一些代码片段:

 from sklearn.externals.joblib import parallel_backend

 scaler = StandardScaler()
 X = scaler.fit_transform(fv_train.data) #traininig samples
 y = fv_train.axes[0] #class labels
 X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size = 0.1, train_size = 0.9)


clf = SVC(kernel = 'linear', probability=True)
scoring = ['f1']
C_range = np.linspace(start=1000, stop=10000, num=4, endpoint = True)
param_grid = dict(C = C_range)
grid = GridSearchCV(clf, param_grid = param_grid, scoring = scoring, cv = 3,
                    refit = 'f1', verbose = 42, n_jobs=-1, pre_dispatch=3)
with parallel_backend('threading'):
    grid.fit(X_train, y_train)

尝试在
\uuuu name\uuu=='\uuuuu main\uuuu'
中指定代码,从windows命令行运行它,但不使用parallel\u backend语句。使用
n_作业
指定GridSearhCV应自行处理多处理

clf = SVC(kernel = 'linear', probability=True)
scoring = ['f1']
param_grid = {'C': np.linspace(start=1000, stop=10000, num=4, endpoint = True)}
grid = GridSearchCV(clf, param_grid = param_grid, scoring = scoring, cv = 3,
                refit = 'f1', verbose = 42, n_jobs=-1, pre_dispatch=3)
grid.fit(X_train, y_train)
打开windows任务管理器,查看运行时发生的情况。看看你的CPU百分比、RAM和windows进程。通常,您希望看到的是您的CPU变得非常高,并且您应该在进程列表中看到几个称为Python的进程。它可能会冻结,因为您使用的是完整的CPU

另一种可能是,n_作业尚未用于f1评分。您可以尝试在不使用n_jobs语句的情况下运行代码,如下所示:

clf = SVC(kernel = 'linear', probability=True)
scoring = ['f1']
param_grid = {'C': np.linspace(start=1000, stop=10000, num=4, endpoint = True)}
grid = GridSearchCV(clf, param_grid = param_grid, scoring = scoring, cv = 3,
                refit = 'f1', verbose = 42, pre_dispatch=3)
grid.fit(X_train, y_train)

谢谢我尝试了第一个建议,还将C范围更改为
C_range=np.logspace(-1,2,4,endpoint=True,base=10)
,现在它似乎可以工作了,不过仍然需要很多时间(~2小时)。任务管理器显示CPU为75%,RAM为1GB。您可以验证是否有多个Python进程(任务管理器->进程->按CPU排序->应该有多个Python进程)。如果工作正常,您必须加快速度,那么您唯一能做的就是减少参数网格的大小或交叉验证的数量(但它们似乎合理),或者找到一台更快的计算机(可能是AWS或其他平台上的云计算机)。是的,我确实列出了许多Python进程(大约6或7个)。我还考虑过减少交叉验证中的k-折叠次数,但事实上,它已经比我想要的要低很多(并且比推荐的要低),但由于这个问题,我没有其他选择。我没有听说过AWS,我会去看看,但我正试图将我的培训上传到谷歌云引擎。问题是,我需要这些结果马上,我真的没有时间去学习如何使用它。谢谢你的帮助!