如何修复此错误类型错误:'(slice(None, None, None), array([False, False, False, ..., False, False, False]))'密钥无



我正在尝试使用以下代码训练/测试我的数据:

from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
import matlab.engine
eng = matlab.engine.start_matlab()
feat = tfidfvect
label = []
print(label)
for i in np.arange(1,len(dataset.data)+1).reshape(-1):
label.append(i)
print("--------")
print(label)
def jFitnessFunction(feat ,label ,X ,x_train, x_test ): 
if sum(X == 1) == 0:
cost = inf
else:
cost = jwrapperKNN(feat[:,X == 1],label,x_train, x_test)
return cost
def jwrapperKNN(sFeat ,label ,x_train, x_test): 
#---// Parameter setting for k-value of KNN //
k = 5
xtrain = sFeat[x_train == 1,:]
ytrain = label(x_train == 1)
xvalid = sFeat[x_test == 1,:]
yvalid = label(x_test == 1)
Model = fitcknn(xtrain,ytrain,'NumNeighbors',k)
pred = predict(Model,xvalid)
num_valid = len(yvalid)
correct = 0
for i in np.arange(1,num_valid+1).reshape(-1):
if yvalid(i)==pred(i):
correct = correct + 1

Acc = correct / num_valid
error = 1 - Acc
return error
return cost

但我一直收到这个错误:

TypeError                                 Traceback (most recent call     last)
~AppDataLocalTemp/ipykernel_17344/2041135029.py in <module>
26 max_Iter = 100
27 # Binary Grey Wolf Optimization
---> 28 sFeat,Sf,Nf,curve = jBGWO2(feat,label,N,max_Iter,x_train, x_test)
29 # Plot convergence curve
30 eng.plt.plot(np.arange(1,max_Iter+1),curve)
~AppDataLocalTemp/ipykernel_17344/2712339248.py in jBGWO2(feat, label, N, max_Iter, x_train, x_test)
16     fit = np.zeros((1,N))
17     for i in range(N):
---> 18         fit[i] = fun(feat,label,X[i,:],x_train, x_test)
19 
20     fit.sort(reverse=true)
~AppDataLocalTemp/ipykernel_17344/1835931109.py in jFitnessFunction(feat, label, X, x_train, x_test)
23         cost = inf
24     else:
---> 25         cost = jwrapperKNN(feat[:,X == 1],label,x_train, x_test)
26     return cost
27 
~anaconda3libsite-packagespandascoreframe.py in __getitem__(self, key)
3456             if self.columns.nlevels > 1:
3457                 return self._getitem_multilevel(key)
-> 3458             indexer = self.columns.get_loc(key)
3459             if is_integer(indexer):
3460                 indexer = [indexer]
~anaconda3libsite-packagespandascoreindexesbase.py in get_loc(self, key, method, tolerance)
3359             casted_key = self._maybe_cast_indexer(key)
3360             try:
-> 3361                 return self._engine.get_loc(casted_key)
3362             except KeyError as err:
3363                 raise KeyError(key) from err
~anaconda3libsite-packagespandas_libsindex.pyx in pandas._libs.index.IndexEngine.get_loc()
~anaconda3libsite-packagespandas_libsindex.pyx in pandas._libs.index.IndexEngine.get_loc()
TypeError: '(slice(None, None, None), array([False, False,  True, ...,  True,  True, False]))' is an invalid key

我也试过使用.loc,但我得到了这个

attributeerror: 'numpy.ndarray' object has no attribute 'loc'

错误出现在以下表达式中(代码的第25行(:

feat[:,X == 1]

:slice(None,None,None)X==1是布尔数组(或系列(,如错误消息中所述

TypeError: '(slice(None, None, None), array([False, False,  True, ...,  True,  True, False]))' is an invalid key

它由pandas引发,并且由于它谈论的是key,所以feat必须是DataFrame,其中feat[name]用于选择列。如果feat是一个numpy数组,那么该索引可能会起作用,但对DataFrame的索引无效。

您没有显示调用jFitnessFunction的代码,也没有显示任何关于如何创建feat的内容。所以我无法进一步追踪。

最新更新