Я пытаюсь выполнить перекрестную проверку в k-кратном порядке для randomsearchcv, но мой код не является обобщенным c для каждого раза, так как я написал код для 3 раз. Может ли кто-нибудь объяснить мне, как выполнить перекрестную проверку K-кратности без использования sklearn для случайного поиска ниже мой код
from sklearn.metrics import accuracy_score
def randomly_select_60_percent_indices_in_range_from_1_to_len(x_train):
return random.sample(range(0, len(x_train)), int(0.6*len(x_train)))
def RandomSearchCV(x_train,y_train,classifier, params, folds):
trainscores = []
testscores = []
for k in tqdm(params):
trainscores_folds = []
testscores_folds = []
for j in range(0, folds):
# check this out: https://stackoverflow.com/a/9755548/4084039
train_indices = randomly_select_60_percent_indices_in_range_from_1_to_len(x_train)
test_indices = list(set(list(range(1, len(x_train)))) - set(train_indices))
X_train = x_train[train_indices]
Y_train = y_train[train_indices]
X_test = x_train[test_indices]
Y_test = y_train[test_indices]
classifier.params = k
classifier.fit(X_train,Y_train)
Y_predicted = classifier.predict(X_test)
testscores_folds.append(accuracy_score(Y_test, Y_predicted))
Y_predicted = classifier.predict(X_train)
trainscores_folds.append(accuracy_score(Y_train, Y_predicted))
trainscores.append(np.mean(np.array(trainscores_folds)))
testscores.append(np.mean(np.array(testscores_folds)))
return trainscores,testscores
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
import random
import warnings
warnings.filterwarnings("ignore")
neigh = KNeighborsClassifier()
len(X_train))])
folds=3
params1=[]
sorted_train=[]
sorte_test=[]
params=np.random.uniform(low=1,high=50,size=10)
trainscores,testscores = RandomSearchCV(X_train, y_train, neigh,params ,folds)
params.sort()
plt.plot(params,trainscores, label='train cruve')
plt.plot(params,testscores, label='test cruve')
plt.title('Hyper-parameter VS accuracy plot')
plt.legend()
plt.show()