Pracuję nad ulepszeniem istniejącego nadzorowanego klasyfikatora, do klasyfikowania sekwencji {białka} jako należących do określonej klasy (prekursorów hormonu neuropeptydowego), czy nie.
Istnieje około 1150 znanych „pozytywów” na tle około 13 milionów sekwencji białek („Nieznane / słabo opatrzone adnotacjami tło”) lub około 100 000 sprawdzonych, odpowiednich białek, opatrzonych różnorodnymi właściwościami (ale bardzo niewiele opatrzonych wyraźnymi adnotacjami „negatywny” sposób).
Moja poprzednia implementacja traktowała to jako problem z klasyfikacją binarną: Zestaw dodatni = Białka oznaczone jako Neuropeptydy. Zestaw ujemny: losowe pobieranie próbek z 1300 próbek (ogółem) spośród pozostałych białek o mniej więcej podobnym rozkładzie długości.
To działało, ale chcę znacznie poprawić zdolności dyskryminacyjne maszyn (obecnie wynosi około 83-86% pod względem dokładności, AUC, F1, mierzone za pomocą CV, na wielu losowo wybranych próbach ujemnych).
Moje myśli były następujące: 1) Spraw, aby był to problem wieloklasowy, wybierając 2-3 różne klasy białka, które z pewnością będą negatywne, według ich właściwości / klasy funkcjonalnej, wraz z (być może) innym losowo pobranym zestawem. (W tym przypadku priorytetem byłyby zestawy ujemne, które pod względem właściwości / cech są podobne do zestawu dodatniego, a jednocześnie mają cechy definiujące). 2) Uczenie się w jednej klasie - byłoby fajne, ale jak rozumiem, jest przeznaczone tylko do wykrywania anomalii i ma gorszą wydajność niż podejścia dyskryminujące.
*) Słyszałem o nauce PU, co brzmi nieźle, ale jestem programistą N00b i nie znam żadnych istniejących implementacji. (W Python / sci-kit learn).
Czy podejście 1 ma sens w teoretycznym POV? Czy istnieje najlepszy sposób na tworzenie wielu zestawów ujemnych? (Mógłbym również po prostu użyć ogromnej ilości [50 000] białek „negatywnych”, ale wszystkie one bardzo się od siebie różnią, więc nie wiem, jak dobrze klasyfikator poradziłby sobie z nimi jako jedną dużą, niezrównoważoną mieszanką ). Dzięki!