15

Mam następujące daneNadaje głęboką strukturę multi-Learning dla klasy klasyfikacji

  feat_1 feat_2 ... feat_n label 
gene_1 100.33  10.2 ... 90.23 great 
gene_2 13.32  87.9 ... 77.18 soso 
.... 
gene_m 213.32  63.2 ... 12.23 quitegood 

Wielkość M jest duża ~ 30K wierszy i N jest znacznie mniejsze ~ 10 kolumn. Moje pytanie brzmi: jaka jest odpowiednia struktura Deep Learning do nauki i przetestuj dane jak powyżej.

Pod koniec dnia użytkownik poda wektor genów z wyrażeniem.

gene_1 989.00 
gene_2 77.10 
... 
gene_N 100.10 

System będzie oznaczać, która etykieta dotyczy każdego genu np. wielki lub soso, etc ...

strukturą mam na myśli jeden z nich:

  • splotowy Neural Network (CNN)
  • Autoencoder
  • Głęboka wiara Network (DBN)
  • Restricted Boltzmana Maszyna
+1

Jeśli dobrze rozumiem, nakarmisz [feat_1 feat_2 ... feat_n] i przepiszesz etykietę, prawda? W tym przypadku, ponieważ masz tylko ~ 10 cech, powiedziałbym, że waniliowa sieć neuronowa będzie dobrym początkiem. –

+0

Co sprawia, że ​​Deep Learning jest twoim paradygmatem wyboru? Sądzę, że najpierw wypróbujesz Naive Bayes, Losowy Las, SVM o wielu klasach lub podobną strukturę. – Prune

+0

Czy klasyfikacja jest skalarnym kontinuum, takim jak ocena 1-10? Jeśli tak, możesz lepiej z funkcją ciągłego oceniania, po prostu zaokrąglając do najbliższej liczby całkowitej. – Prune

Odpowiedz

13

Aby nieco powiększyć komentarz @ sung-kim:

  • CNN są używane przede wszystkim do rozwiązywania problemów związanych z obrazowaniem komputerowym, takich jak klasyfikowanie obrazów za pomocą . Są one wzorowane na kortach wzrokowych zwierząt, mają one w zasadzie sieć połączeń tak, że istnieją kafelki o cechach, które częściowo się pokrywają. Zazwyczaj wymagają one dużo danych o wartości ponad 30 tys.
  • Autoenery są używane do generowania obiektów i redukcji wymiarów. Zaczynają się od wielu neuronów na każdej warstwie, a następnie liczba ta jest zmniejszana, a następnie zwiększana ponownie. Każdy obiekt jest szkolony sam. Powoduje to, że warstwy środkowe (niska liczba neuronów) zapewniają znaczącą projekcję przestrzeni cech w niskim wymiarze.
  • Chociaż nie wiem zbyt wiele o DBN, wydają się być nadzorowanym rozszerzeniem Autoencodera. Wiele parametrów do treningu.
  • Znowu nie wiem dużo o maszynach Boltzmann, ale nie są one powszechnie stosowane dla tego rodzaju problemu (według mojej wiedzy)

jak w przypadku wszystkich problemów modelowania chociaż, proponuję począwszy od najbardziej podstawowy model, aby szukać sygnału. Być może dobrym miejscem na rozpoczęcie jest Logistic Regression, zanim zaczniesz się martwić o głębokie uczenie się.

Jeśli doszedłeś do punktu, w którym chcesz spróbować głębokiego uczenia się, z jakichkolwiek powodów. W przypadku tego typu danych najlepszym miejscem do rozpoczęcia jest podstawowa sieć przekazywania informacji. Pod względem głębokiego uczenia się, punkty danych 30k nie są dużą liczbą, więc zawsze najlepiej zacząć od małej sieci (1-3 ukrytych warstw, 5-10 neuronów), a następnie zwiększyć. Upewnij się jednak, że przy optymalizacji parametrów masz przyzwoity zestaw sprawdzania poprawności. Jeśli fanem scikit-learn API, proponuję Keras jest dobrym miejscem do rozpoczęcia

jeden dodatkowy komentarz, będziemy chcieli użyć OneHotEncoder na etykietach klasowych, zanim zrobisz żadnego szkolenia.

EDIT

widzę z dobroci i komentarze, które chcesz zobaczyć nieco więcej na temat sieci te prace. Proszę zapoznać się z przykładem, jak zbudować model feed-forward i zrobić kilka prostych parametr optisation

import numpy as np 
from sklearn import preprocessing 
from keras.models import Sequential 
from keras.layers.core import Dense, Activation, Dropout 

# Create some random data 
np.random.seed(42) 
X = np.random.random((10, 50)) 

# Similar labels 
labels = ['good', 'bad', 'soso', 'amazeballs', 'good'] 
labels += labels 
labels = np.array(labels) 
np.random.shuffle(labels) 

# Change the labels to the required format 
numericalLabels = preprocessing.LabelEncoder().fit_transform(labels) 
numericalLabels = numericalLabels.reshape(-1, 1) 
y = preprocessing.OneHotEncoder(sparse=False).fit_transform(numericalLabels) 

# Simple Keras model builder 
def buildModel(nFeatures, nClasses, nLayers=3, nNeurons=10, dropout=0.2): 
    model = Sequential() 
    model.add(Dense(nNeurons, input_dim=nFeatures)) 
    model.add(Activation('sigmoid')) 
    model.add(Dropout(dropout)) 
    for i in xrange(nLayers-1): 
     model.add(Dense(nNeurons)) 
     model.add(Activation('sigmoid')) 
     model.add(Dropout(dropout)) 
    model.add(Dense(nClasses)) 
    model.add(Activation('softmax')) 

    model.compile(loss='categorical_crossentropy', optimizer='sgd') 

    return model 

# Do an exhaustive search over a given parameter space 
for nLayers in xrange(2, 4): 
    for nNeurons in xrange(5, 8): 
     model = buildModel(X.shape[1], y.shape[1], nLayers, nNeurons) 
     modelHist = model.fit(X, y, batch_size=32, nb_epoch=10, 
           validation_split=0.3, shuffle=True, verbose=0) 
     minLoss = min(modelHist.history['val_loss']) 
     epochNum = modelHist.history['val_loss'].index(minLoss) 
     print '{0} layers, {1} neurons best validation at'.format(nLayers, nNeurons), 
     print 'epoch {0} loss = {1:.2f}'.format(epochNum, minLoss) 

które wyjścia

2 layers, 5 neurons best validation at epoch 0 loss = 1.18 
2 layers, 6 neurons best validation at epoch 0 loss = 1.21 
2 layers, 7 neurons best validation at epoch 8 loss = 1.49 
3 layers, 5 neurons best validation at epoch 9 loss = 1.83 
3 layers, 6 neurons best validation at epoch 9 loss = 1.91 
3 layers, 7 neurons best validation at epoch 9 loss = 1.65 
+1

DBN są wykonane z zastrzeżonych maszyn Boltzmana. Restricted Boltzman Machines to sieci stochastyczne, które mogą nauczyć się dystrybucji danych wejściowych. – sietschie

+0

Dzięki! Tak naprawdę nie spotkałem się, by być szczerym, po prostu rozejrzałem się szybko, by sprawdzić, czy są odpowiednie. Ciekawe wiedzieć, może mi się przydać w najbliższej przyszłości. – ncfirth

+0

https://stackoverflow.com/questions/47842931/valueerror-error-when-checking-target-expected-model-2-to-have-shape-none-25 wszelkie sugestie? –

5

Głęboka struktura uczenia mogłyby być zalecane, jeśli do czynienia z surowych danych i chciał aby automatycznie znaleźć funkcje, które działają zgodnie z celem klasyfikacji. Ale na podstawie nazw kolumn i ich liczby (tylko 10) wygląda na to, że masz już zaprojektowane funkcje.

Z tego powodu można po prostu wybrać standardową wielowarstwową sieć neuronową i zastosować uczenie się przez nadzorowanie (propagacja wsteczna). Taka sieć miałaby liczbę wejść odpowiadającą liczbie twoich kolumn (10), po której nastąpiłaby liczba ukrytych warstw, a następnie warstwa wyjściowa z liczbą neuronów odpowiadającą liczbie twoich etykiet. Możesz eksperymentować z użyciem różnych warstw ukrytych, neuronów, różnych typów neuronów (esowatej, tanh, rektyfikowanej liniowej itd.) I tak dalej.

Alternatywnie można użyć surowych danych (jeśli są dostępne), a następnie przejść do DBN (są znane jako niezawodne i uzyskują dobre wyniki w przypadku różnych problemów) lub do automatycznego kodowania.

+0

Dziękuję bardzo za odpowiedź. Dwa pytania: 1) Czy DBN może posłużyć do klasyfikacji? Załóżmy, że mój problem jest taki sam jak powyżej, ale funkcje są nieznane. Załóżmy, że mam surowe dane, których użyłem do stworzenia powyższych funkcji. 2) W przypadku MLP, w jaki sposób decydujesz, ile potrzebnych warstw ukrytych? – neversaint

+0

1) Tak DBN może być używany do klasyfikacji z nieprzetworzonymi danymi. 2) Zależy to od problemu, wielkości zestawu treningowego, wielkości wejściowej, jakości wzorców w danych. Coś, co wymaga eksperymentowania. Zacznij od jednego i sprawdź, jaki wpływ na twoją precyzję/przypominanie ma dodanie. – krychu

+0

https://stackoverflow.com/questions/47842931/valueerror-error-when-checking-target-expected-model-2-to-have-shape-none-25 wszelkie sugestie? –

3

Jeśli planują wyjście do być traktowane jak punktacji dla wytwórni (jak zrozumiałem z twojego pytania), spróbuj nadzorowanego multi-klasy logistycznej regresji klasyfikatora. (najwyższy wynik zajmuje etykieta).

Jeśli masz zamiar używać głębokiego uczenia się.

Proste, ciągłe działanie SSN powinno polegać na nadzorowaniu uczenia się poprzez propagację wsteczną. Warstwę wejściową z N neuronami i jedną lub dwiema ukrytymi warstwami można dodać, nie więcej. Nie ma potrzeby, aby "głębokie" i dodać więcej warstw dla tych danych, Istnieje ryzyko, aby łatwo nadpisać dane z więcej warstw, jeśli to zrobisz, może to być trudne, aby dowiedzieć się, co to jest problem, i dokładność testu zostanie znacznie zmieniona.

Po prostu wykreślenie lub wizualizacja danych, np. Z t-sne, może być dobrym początkiem, jeśli trzeba ustalić, które funkcje są ważne (lub jakąkolwiek korelację, która może istnieć).

można wtedy grać z większą mocą tych wymiarów funkcji/lub zwiększać wagę do ich wyniku.

W przypadku takich problemów głębokie nauczanie prawdopodobnie nie jest odpowiednie. ale prostsza architektura SSN powinna działać dobrze w zależności od danych.

+0

https://stackoverflow.com/questions/47842931/valueerror-error-when-checking-target-expected-model-2-to-have-shape-none-25 wszelkie sugestie? –

Powiązane problemy