#python #machine-learning #cross-validation #k-fold
Вопрос:
Я использовал модель экстремальной обучающей машины (ELM) для прогнозирования в виде регрессии. Я использовал K-кратное значение для проверки предсказания модели. Но после выполнения следующего кода я получаю это сообщение об ошибке:
ValueError: The number of folds must be of Integral type. [array([[0.25 , 0. ........
И когда я печатаю предсказание, оно не печатается.
мой код:
dataset = pd.read_excel("ar.xls")
X=dataset.iloc[:,:-1]
y=dataset.iloc[:,-1:]
#----------Scaler----------
scaler = MinMaxScaler(feature_range=(0, 1))
X=scaler.fit_transform(X)
#---------------------- Divided the datset----------------------
kfolds = KFold(train_test_split(X, y) ,n_splits=5, random_state=16, shuffle=False)
for train_index, test_index in kfolds.split(X):
X_train_split, X_test_split = X[train_index], X[test_index]
y_train_split, y_test_split = y[train_index], y[test_index]
#------------------------INPUT------------------
input_size = X.shape[1]
#---------------------------(Number of neurons)-------
hidden_size = 26
#---------------------------(To fix the RESULT)-------
seed =26 # can be any number, and the exact value does not matter
np.random.seed(seed)
#---------------------------(weights amp; 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)), y)
output_weights = np.dot(pinv2(hidden_nodes(X_train_split)), y_train_split)
#------------------------(Def prediction)---------
def predict(X):
out = hidden_nodes(X)
out = np.dot(out, output_weights)
return out
#------------------------------------(Make_PREDICTION)--------------
prediction = predict(X_test_split)
print(prediction)
Ответ №1:
Первый KFold
аргумент рассматривается как n_splits
тот, который можно увидеть здесь class sklearn.model_selection.KFold(n_splits=5, *, shuffle=False, random_state=None)
, и вы передаете train_test_split(X, y)
его вместо него, и, следовательно, вы получаете эту ошибку. Кроме того, в приведенном ниже цикле
for train_index, test_index in kfolds.split(X):
X_train_split, X_test_split = X[train_index], X[test_index]
y_train_split, y_test_split = y[train_index], y[test_index]
Вы перезаписываете свои переменные, и, следовательно, в конце вы будете учитывать только последние значения сгиба. Правильный способ был бы, как показано ниже
kfolds = KFold(n_splits=5, random_state=16, shuffle=False)
train_folds_idx = []
valid_folds_idx = []
for train_index, valid_index in kfolds.split(dataset.index):
train_folds_idx.append(train_index)
valid_folds_idx.append(valid_index)
Комментарии:
1. Спасибо, я написал ваш код, но я получаю это сообщение об ошибке: Ошибка имени: имя ‘valid_index’ не определено. Как я могу определить «valid_index» @Абхишек Праджапат
2. Давай, чувак. Это была просто ошибка с именем переменной. Я отредактировал ответ.
3. Хорошо, я исправил код, а затем получил следующее сообщение об ошибке: Ошибка в значении: формы (5640) и (26,26) не выровнены: 640 (тусклый 1) != 26 (тусклый 0) @Abhishek Prajapat
4. Вы выполняете умножение матрицы, и для этого второе измерение первой матрицы и первое измерение второй матрицы должны быть равны. Я не уверен, где вы это делаете, но сейчас я бы рекомендовал вам пройти курс
Numpy
иImpliment
просто логистической регрессии с использованием Python и Numpy. Это дало бы большую ясность.5. ОК. Большое спасибо. @ Абхишек Праджапат