Я пытаюсь создать новый алгоритм валидации для оценки производительности классификаторов.Но с тех пор я наткнулся на стену, по которой не могу подняться самостоятельно.Каждый раз, когда я пытаюсь выполнить оценку на 2 помеченных данных, как это
> ([[0.517, 0.118 | C2], [0.422, 0.745 | C2], [0.504, 0.422 | C2],
> [0.377, 0.520 | C2], [0.286, 0.636 | C1], [0.500, 0.066 | C2], [0.437,
> 0.639 | C2], [0.478, 0.138 | C2], [0.299, 0.140 | C1], [0.293, 0.275 | C1], [0.470, 0.246 | C2], [0.335, 0.405 | C1], [0.229, 0.563 | C1],
> [0.347, 0.295 | C1], [0.470, 0.176 | C2], [0.309, 0.069 | C1]])
Эта ошибка происходит SVM сбой с ошибкой: ValueError: Количество классов должно быть больше одного;получил 1 класс.
В связи с тем, что он рассчитывает, когда предоставляется достаточно данных (до 100 точек данных), мой профессор предложил мне отсортировать данные поочередно (C1, C2, C1,C2 ...).Но я думаю, что проблема скорее в потере ярлыка.Я напечатал np.unique
этикетки self.data
, X
(trainset) и Y
(testset) и получил для всех одинаковые (только с другими и намного больше поплавков):
E.g for X
[0. 0.17289992 0.20676427 0.24686935 0.47190027 0.48798112
0.62406178 0.63207783 0.65526534 1. ]
Я действительно не знаю, что с этим делать.Прошу прощения за мои плохие навыки кодирования, я психолог, а не кодер.
Это мой код
class IndependentValidation(Results):
"""
Independent Validation Testing
split data into test_data, train_data.
split test_data in n_splits = number of observations
---Loop---
for each n_split_test_data do:
train on train_data
predict and test on 1 observation = (1_split_test_data)
add used 1_split_test_data to train_data
(re)move used 1_split_test_data from test_data
do until test_data=0 / while test_data!=0
Structure e.g = Leave One Out
"""
score_by_folds = False
def __init__(self, data, learners, store_data=False, store_models=False, preprocessor=None,
callback=None, n_jobs=1, train_size=None, test_size=0.8, random_state=42):
self.train_size = train_size
self.test_size = test_size
self.random_state = random_state
super().__init__(data, learners=learners, store_data=store_data, store_models=store_models,
preprocessor=preprocessor, callback=callback, n_jobs=n_jobs)
def setup_indices(self, train_data, test_data):
X, Y = skl.train_test_split(self.data, test_size=0.8, random_state=42, shuffle = True)
train_data = np.array(range(_num_samples(X)))
test_data = np.array(range(len(train_data), _num_samples(Y)))
StratArr = []
lngth = len(test_data)
while lngth != 1:
x, test_data = test_data[+0] , test_data[::-1]
y, test_data = test_data[+0], test_data[:-1]
z, test_data = test_data[+0], test_data[::-1]
x = np.array([x])
StratArr.insert(len(StratArr), ((train_data), (x)))
train_data = np.concatenate((train_data,x), axis= 0)
lngth = lngth - 1
StratArr.insert(len(StratArr), ((train_data), (test_data)))
self.indices = StratArr
def prepare_arrays(self, StratArr):
# sped up version of super().prepare_arrays(data)
self.row_indices = np.arange(len(StratArr))
self.folds = self.row_indices
self.actual = StratArr.Y.flatten()