Я сравниваю модели для генетической классификации, они классифицируют 4 класса по генам, которые, вероятно, вероятно, вероятны или неизвестны в отношении воздействия на заболевание.
Я запускаю их, и все они получают точность около 65-80%, это с вложенной перекрестной проверкой, чтобы избежать переобучения для получения этих процентов. Но затем я даю этим моделям рандомизированный набор данных, и некоторым моделям удается получить одинаковую точность при многократных прогонах (без перекрестной проверки и просто точного наблюдения с данными раздельного теста), действительно ли это возможно или это модели достигают плато? С моей точки зрения начинающего, я бы предположил, что это маловероятно, любая помощь будет оценена.
Вот мой код для тестирования случайных данных:
inner_cv = KFold(n_splits=10, shuffle=True, random_state=seed)
outer_cv = KFold(n_splits=10, shuffle=True, random_state=seed)
models = []
models.append(('LR', dcv.GridSearchCV(logreg, LR_par, cv=inner_cv, iid=False, n_jobs=-1)))
models.append(('SVM', dcv.GridSearchCV(svm, tuned_parameters, cv=inner_cv, iid=False, n_jobs=-1)))
models.append(('RFC', dcv.GridSearchCV(rfc, param_grid, cv=inner_cv,iid=False, n_jobs=-1)))
models.append(('Keras', GridSearchCV(estimator=keras, param_grid=kerasparams, cv=inner_cv,iid=False, n_jobs=-1)))
arr = np.arange(5400).reshape((600, 9))
random = np.random.permutation(arr)
ran = np.random.randint(4, size=600)
rand = np.column_stack((random, ran))
print(rand.shape)
X1 = rand[0:600,0:8]
Y1 = rand[0:600,-1]
print("Random data counts of label '0': {}".format(sum(ran==0)))
print("Random data counts of label '1': {}".format(sum(ran==1)))
print("Random data counts of label '2': {}".format(sum(ran==2)))
print("Random data counts of label '3': {}".format(sum(ran==3)))
print(X1.shape)
print(Y1.shape)
X1 = MinMaxScaler().fit_transform(X1)
X_train1, X_test1, Y_train1, Y_test1 = train_test_split(X1, Y1, test_size=0.2, random_state=0)
for name, model in models:
model.fit(X1, Y1)
print(name, 'Random accuracy: {:.2f}'.format(model.score(X_test1, Y_test1)*100), '%')
Вывод выглядит так:
(600, 10)
Random data counts of label '0': 136
Random data counts of label '1': 153
Random data counts of label '2': 155
Random data counts of label '3': 156
(600, 8)
(600,)
LR Random accuracy: 26.67 %
SVM Random accuracy: 26.67 %
RFC Random accuracy: 38.33 %
Keras Random accuracy: 23.33 %
Похоже, что если я запускаю этот код 4 раза, то в первый раз точность отличается, в следующие 3 раза они остаются неизменными, как правило, для SVM и LR (логистическая регрессия).
Я использую Python 3.7 в Anaconda и Jupyterlab 0.35.4