【问题标题】:Is is possible to use np.array() with lists as inputs?是否可以将 np.array() 与列表一起用作输入?
【发布时间】:2020-06-18 07:18:41
【问题描述】:

我正在构建我的 MLP 算法,并尝试结合使用 k 折交叉验证和网格搜索来找到隐藏层/节点的最佳组合。

我最初只是尝试简单地改变 alpha 级别,它奏效了,我使用了:

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 ,因为这是使用网格搜索实现它的最简单方法。有没有办法绕过它?

【问题讨论】:

  • 请在问题中包含错误信息
  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
  • 问题是param_grid = {'hidden_layer_sizes': np.arange([10,10],[20,20],[30,30])}需要param_grid = {'hidden_layer_sizes': np.arange([[10,10],[20,20],[30,30]])}
  • 是的,您需要将这些排列好的列表对传递到列表中
  • 也回答你的问题:是的,很有可能将列表作为输入传递,问题不是将它传递给 np 数组,而是将该 numpy 数组传递给 SKL MLP。

标签: python arrays numpy machine-learning scikit-learn


【解决方案1】:

首先,

np.arange([10,10],[20,20],[30,30]) 永远不会工作。

甚至是 cmets 中建议的 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)]}

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2019-11-17
    • 2021-11-12
    • 2016-04-01
    • 2011-01-20
    • 2018-08-11
    相关资源
    最近更新 更多