Можно ли использовать np.array () со списками в качестве входных данных? - PullRequest
1 голос
/ 05 марта 2020

Я строил свой алгоритм MLP и пытался использовать k-кратную перекрестную проверку в сочетании с поиском по сетке, чтобы найти наилучшую комбинацию скрытых слоев / узлов.

Сначала я пытался просто варьировать альфа-уровни, и это сработало, и я использовал:

from sklearn.model_selection import cross_val_score
import numpy as np
from sklearn.neural_network import MLPClassifier
import matplotlib.pyplot as plt 
import mglearn 

mlp = MLPClassifier()
param_grid = {'alpha': np.arange(0,1,0.5)}
knn_gscv = GridSearchCV(mlp, param_grid, cv=5)

#fit model to data
knn_gscv.fit(X, y)

#check top performing n_neighbors value
print("best alpha value is",knn_gscv.best_params_)
#check mean score for the top performing value of n_neighbors
print("best score best alpha",knn_gscv.best_score_)

Это сработало. Но теперь я пытался изменить количество скрытых слоев и узлов и попытался это сделать:

from sklearn.model_selection import cross_val_score
import numpy as np
from sklearn.neural_network import MLPClassifier
import matplotlib.pyplot as plt 
import mglearn 

mlp = MLPClassifier()
param_grid = {'hidden_layer_sizes': np.arange([10,10],[20,20],[30,30])}
knn_gscv = GridSearchCV(mlp, param_grid, cv=5)

#fit model to data
knn_gscv.fit(X, y)

#check top performing n_neighbors value
print("best alpha value is",knn_gscv.best_params_)
#check mean score for the top performing value of n_neighbors
print("best score best alpha",knn_gscv.best_score_)

Но я получаю сообщение об ошибке. Я думаю, это потому, что np.array () плохо работает со списками в качестве входных данных. Но я все еще считаю, что должен использовать np.array, так как это самый простой способ реализовать его с помощью поиска по сетке. Есть ли способ go обойти это?

1 Ответ

2 голосов
/ 05 марта 2020

Прежде всего,

np.arange([10,10],[20,20],[30,30]) никогда не сработает.

или даже np.arange([[10,10],[20,20],[30,30]]), как предлагается в комментариях.

И то и другое вызовет:

TypeError: неподдерживаемые типы операндов для -: 'list' и 'list'


Краткий ответ

Для 'hidden_layer_sizes' вы нужен список кортежей.

Например param_grid = {'hidden_layer_sizes': [(10,10), (20,20)]}


Длинный ответ

Чтобы создать диапазон кортежей, используйте что-то вроде этого:

start=10
stop=20
step = 5

param_grid = {'hidden_layer_sizes': 
               [(n, min(n+step, stop)) for n in range(start, stop, step)]}

param_grid
Out[29]: {'hidden_layer_sizes': [(10, 15), (15, 20)]}
...