簡體   English   中英

KeyError:“[Int64Index([112, 113,..121,\n.\n 58, 559],\n dtype='int64', length=448)] 都不在 [列] 中”

[英]KeyError: "None of [Int64Index([112, 113,..121,\n .\n 58, 559],\n dtype='int64', length=448)] are in the [columns]"

我使用極限學習機 (ELM) model 進行預測。 我使用 K-fold 來驗證 model 預測。 但是在執行以下代碼后,我收到此消息錯誤:

KeyError: "None of [Int64Index([112, 113, 114, 115, 116, 117, 118, 119, 120, 121,\n            ...\n            550, 551, 552, 553, 554, 555, 556, 557, 558, 559],\n           dtype='int64', length=448)] are in the [columns]"

我怎么解決這個問題? 怎么了? 代碼:

 dataset = pd.read_excel("un.xls")
    
    X=dataset.iloc[:,:-1]
    y=dataset.iloc[:,-1:]
    
    
    #----------Scaler----------
    scaler = MinMaxScaler()
    scaler_X = MinMaxScaler()
    X=scaler.fit_transform(X)
    
    #---------------------- Divided the datset----------------------
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2)
    
    # Splits dataset into k consecutive folds (without shuffling by default).
    
    kfolds = KFold(n_splits=5, random_state=16, shuffle=False)   
    for train_index, test_index in kfolds.split(X_train, y_train):
       X_train_folds, X_test_folds = X_train[train_index], X_train[test_index]
       y_train_folds, y_test_folds = y_train[train_index], y_train[test_index]
       
       # put all code in the for loop so that for every set of (X_train_folds, y_train_folds), the model is fitted.
       # call predict() for corresponding set of X_test_folds
       # put all code in the for loop so that for every set of (X_train_folds, y_train_folds), the model is fitted.
       # call predict() for corresponding set of X_test_folds
    
    #----------------------------(input size)-------------
    input_size = X_train.shape[1]
    hidden_size = 23

#---------------------------(To fix the RESULT)-------
seed =22   # can be any number, and the exact value does not matter
np.random.seed(seed)

#---------------------------(weights & biases)------------
input_weights = np.random.normal(size=[input_size,hidden_size])
biases = np.random.normal(size=[hidden_size])

#----------------------(Activation Function)----------
def relu(x):
   return np.maximum(x, 0, x)

#--------------------------(Calculations)----------
def hidden_nodes(X):
    G = np.dot(X, input_weights)
    G = G + biases
    H = relu(G)
    return H

#Output weights 
output_weights = np.dot(pinv2(hidden_nodes(X_train)), y_train)


#------------------------(Def prediction)---------
def predict(X):
    out = hidden_nodes(X)
    out = np.dot(out, output_weights)
    return out

#------------------------------------(Make_PREDICTION)--------------

prediction = predict(X_test_folds)
    

消息錯誤:

raise KeyError(f"[{key}] 都不在 [{axis_name}] 中")

KeyError: "[Int64Index([112, 113, 114, 115, 116, 117, 118, 119, 120, 121,\n...\n 550, 551, 552, 553, 554, 555, 556, 557, 558, 559],\n dtype='int64', length=448)] 在 [columns] 中”

您應該使用train_test_split()KFold()來拆分數據。 不是兩者

正如KFold()文檔所說:

您應該只在KFold.split()中使用X 所以使用這個:

kfolds = KFold(n_splits=5, random_state=16, shuffle=False)   
for train_index, test_index in kfolds.split(X):
   X_train_folds, X_test_folds = X[train_index], X[test_index]
   y_train_folds, y_test_folds = y[train_index], y[test_index]

此外,刪除所有X_trainy_train ,因為它不是必需的。

input_size = X.shape[1]

def relu(x):
   return np.maximum(x, 0)

output_weights = np.dot(pinv2(hidden_nodes(X_train_folds)), y_train_folds)

如果代碼仍然由於KFold()導致錯誤,您應該考慮使用train_test_split()並將 KFold() 的訓練、測試變量替換為train_test_split() KFold()的變量

對於train_test_split()

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2)

input_size = X_train.shape[1]

def relu(x):
   return np.maximum(x, 0)

output_weights = np.dot(pinv2(hidden_nodes(X_train)), y_train)

prediction = predict(X_test)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM