python训练和测试中的错误:如何修复"TypeError: unhashable type: 'list'"



我正在尝试编写一段代码,其中数据集分为训练和测试。主要列车部分将分为列车和交叉验证。使用K-fold值,我想运行代码,使主序列集被划分为我们想要的尽可能多的折叠(或组,取决于我们提到的折叠的值(,并将(folds-1(组分配给划分的序列集,其余的进行交叉验证。例如,如果有3个折叠,那么主列车被分为三组:g1、g2、g3。首先,将g1+g2作为训练,g3是交叉验证,然后,g2+g3是训练,g1是交叉验证等等,以找到准确度,从而找到最佳K值。

我使用的逻辑是根据折叠数划分主列,并对其进行随机选择。因此,从"split_list"函数中选择一组进行交叉验证。其余部分用于训练(主列车交叉验证(。

导入随机从sklearn.metrics导入精度_score

def split_list(x_train,folds(:

length = len(x_train)
return  random.choices([ x_train[i*length // folds: (i+1)*length // folds] 
for i in range(folds) ])
def Random_Search(x_train,y_train,classifier, params, folds):
trainscores = []
cvscores = []
for k in tqdm(params['n_neighbors']):
trainscores_folds = []
cvscores_folds = []
for j in range(0, folds):   
cv_indices = split_list(list(x_train), folds)
train_indices = list(set(list(range(1, len(x_train)))) - 
set(cv_indices))

我得到的错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-114-808deaf8461e> in <module>
8 params = {'n_neighbors':sorted(random.sample(range(1,50),10))}
9 folds = 9
---> 10 trainscores,cvscores = Random_Search(X_train, y_train, neigh, params, folds)
11 plt.plot(params['n_neighbors'],trainscores, label='train cruve')
12 plt.plot(params['n_neighbors'],cvscores, label='cv cruve')
<ipython-input-113-fc0b09f4ad82> in Random_Search(x_train, y_train, classifier, params, folds)
14         for j in range(0, folds):
15             cv_indices = split_list(list(x_train), folds)
---> 16             train_indices = list(set(list(range(1, len(x_train)))) - set(cv_indices))
17 # selecting the data points based on the train_indices and test_indices
18             X_train = x_train[train_indices]
TypeError: unhashable type: 'list'

我不知道你想在那里做什么,但问题可能出在train_indices列表像输出一样显示什么是列表,但你有一个包含项目列表的列表,所以他不知道如何读取该列表。他期望的是项目,而不是项目列表。

所以你有一个主列表,其中包含一个项目列表,但他希望找到的是项目,而不是另一个项目。

最新更新