Python中十折交叉验证代码中的错误

我从头开始在Python中实现10倍交叉验证。语言是Python 3.6,我是在Spyder(Anaconda)中编写的。我的输入形状是data =(1440,390),label =(1440,1)。


我的代码:


def partitions(X,y):

  np.random.shuffle(X)

  foldx=[]

  foldy=[]

  j=0

  for i in range(0,10):

    foldx[i]=X[j:j+143,:]

    foldy[i]=y[foldx[j]]

    j+=144

  return np.array(foldx),np.array(foldy)


def cv(X,y,model):

  trainx,trainy=partitions(X,y)

  scores=[]

  for i in range(0,10):

    xtest=trainx[i]

    ytest=trainy[xtest]

    xtrain=trainx[:i]+trainx[i+1:]

    ytrain=trainy[xtrain]

    model.fit(xtrain,ytrain)

    preds=model.predict(xtest)

    print(accuracy_score(np.ravel(ytest),preds))

    scores.append(accuracy_score(np.ravel(ytest),preds))

  return scores.mean()

错误出现在


foldx[i]=X[j:j+143,:]

它在哪里说


IndexError:列表分配索引超出范围。


我该如何纠正?我对从头开始实施此类问题不是很有经验。


翻过高山走不出你
浏览 367回答 1
1回答

Cats萌萌

您必须首先填充列表以使用其索引,然后将foldx[i]=X[j:j+143,:]行更改为 foldx.append(X[j:j+143,:])同样的 foldyfoldy.append(y[foldx[j]])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python