Python 中的 10 折交叉验证代码错误
Error in 10-fold cross validation code in 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: list assignment index out of range.
我该如何纠正这个问题?我对从头实现这类问题不是很有经验。
您必须先填充列表才能使用它的索引,将 foldx[i]=X[j:j+143,:]
行更改为
foldx.append(X[j:j+143,:])
同样适用于 foldy
foldy.append(y[foldx[j]])
我在 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: list assignment index out of range.
我该如何纠正这个问题?我对从头实现这类问题不是很有经验。
您必须先填充列表才能使用它的索引,将 foldx[i]=X[j:j+143,:]
行更改为
foldx.append(X[j:j+143,:])
同样适用于 foldy
foldy.append(y[foldx[j]])