Próbuję wykonać klasyfikację wielowartościową z SVM. Mam prawie 8k funkcji, a także wektor y o długości prawie 400. Mam już binaryzowane wektory Y, więc nie używałem MultiLabelBinarizer()
, ale kiedy używam go z surową formą moich danych Y, to wciąż daje to samo.Scikit-Learn: Label not x jest obecny we wszystkich przykładach szkoleniowych
Używam tego kodu:
X = np.genfromtxt('data_X', delimiter=";")
Y = np.genfromtxt('data_y', delimiter=";")
training_X = X[:2600,:]
training_y = Y[:2600,:]
test_sample = X[2600:2601,:]
test_result = Y[2600:2601,:]
classif = OneVsRestClassifier(SVC(kernel='rbf'))
classif.fit(training_X, training_y)
print(classif.predict(test_sample))
print(test_result)
Wszakże procesu dopasowania, jeśli chodzi o części predykcji, to mówi Label not x is present in all training examples
(x jest kilka różnych numerów w zakresie mojego y długości wektora, która wynosi 400) . Następnie podaje przewidywany wektor y, który jest zawsze wektorem zerowym o długości 400 (długość wektora y). Jestem nowy w nauce scikit, a także w uczeniu maszynowym. Nie mogłem wymyślić problemu tutaj. W czym problem i co należy zrobić, aby to naprawić? Dzięki.
Cześć, dziękuję za odpowiedź z mnóstwem przydatnych rzeczy. Wypróbowałem 'Y.sum (axis = 0) .all()' i zwróciło True. Ponadto wypróbowałem 'Y.mean (axis = 0) .max()' i zwróciło '0.315981070258'. Czy nadal powinienem implementować 'clf.decision_function'? Czy możesz dokładniej o tym wiedzieć, jak go wdrożyć? Przykro mi, jestem bardzo nowy w tych sprawach, więc nie mogłem zrozumieć, co zrobić z 'decyzją_funkcyjną'. – malisit
Mówię, że jeśli otrzymujesz wszystkie prognozy zera i wiesz, że tam powinny być jakieś 1, możesz spróbować uzyskać wartości decyzyjne zamiast tego i przewidywać 1, gdy jest powyżej pewnego progu.Twoje przewidywane etykiety to: '(próg_oceny> próg) .astype (float)'. Próg będzie mniejszy niż 0, ponieważ 0 jest progiem używanym przez klasyfikator i nie uzyskuje żadnych pozytywów. Ewentualnie, jeśli wiesz, że istnieje co najmniej jedna etykieta pozytywna na instancję, możesz wybrać etykietę, która ma najwyższy DV (nadal będzie ujemny). – Dthal
Dzięki! Intuicja i kod podany na GitHub naprawdę pomogły. – malisit