我正在尝试编写代码,其中,数据集分为训练和测试。火车的主要部分将分为火车验证和交叉验证。使用K-fold值,我想运行代码,以便将主训练集划分为任意数量的折叠(或组,具体取决于我们提到的折叠值),然后将(folds-1)组分配给划分后的训练集和其余的要交叉验证。例如,如果有3折,则火车将分为三组:g1,g2,g3。首先,以g1 + g2作为训练,g3为交叉验证,然后,以g2 + g3为训练,g1为交叉验证,依此类推,以求出准确度,从而得出最佳K值。
我使用的逻辑是根据折叠次数划分主火车,并在其上使用随机选择。因此,从“ split_list”功能中选择了一组,然后进行交叉验证。其余部分用于训练(主要火车交叉验证)。
随机导入 从sklearn.metrics导入precision_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'
答案 0 :(得分:0)
我不知道您想在此做什么,但是也许问题出在 train_indices列表像输出一样显示一个列表,但是您有一个包含项目列表的列表,所以他不知道如何阅读该清单。他希望物品不是物品清单。
因此,您有一个主列表,其中包含一个项目列表,但他希望找到的项目不是另一个项目列表。