Advertisement
Guest User

Untitled

a guest
May 20th, 2019
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.04 KB | None | 0 0
  1. # W DOCS
  2. # *args -> w funkcji to jest lista
  3. # **kwargs -> w funkcji to jest słownik
  4. # [, arg] - >opcjonalny argument
  5.  
  6. import itertools
  7. import numpy as npy
  8. import pandas as pan
  9. import matplotlib.pyplot as mpy
  10. #import seaborn as sns
  11. # % matplotlib inline
  12. from sklearn.model_selection import train_test_split
  13. from sklearn.preprocessing import LabelEncoder
  14. from sklearn.preprocessing import StandardScaler
  15. from sklearn.pipeline import Pipeline
  16.  
  17. # Importing libraries for building the neural network
  18. from keras.models import Sequential
  19. from keras.layers import Dense
  20. from keras.wrappers.scikit_learn import KerasClassifier
  21. from sklearn.model_selection import StratifiedKFold
  22. from sklearn.model_selection import cross_val_score
  23.  
  24. from sklearn.utils import shuffle
  25. from keras.optimizers import SGD
  26. from sklearn.preprocessing import StandardScaler
  27.  
  28. from numpy import array
  29. from numpy import argmax
  30. from keras.utils import to_categorical
  31. from sklearn.model_selection import StratifiedKFold
  32. from sklearn.metrics import confusion_matrix
  33. from sklearn import svm
  34.  
  35. number_of_neurons = int(input("Podaj liczbę neuronów: "))
  36. momentum_value = float(input("Podaj wartość momentum, wartość zero oznacza brak momentu, dopuszczalne liczby zmiennoprzecinkowe: "))
  37.  
  38. for counter in range(5):
  39.     excel_data = pan.read_excel('data/oczyszczone.xls', sheet_name = 'daneSOB') #załadowanie arkusza daneSOB z pliku oczyszczone.xls
  40.     column_headers = excel_data.columns.values #uzyskanie wartości jako listę/łączenie kolumn
  41.     excel_data.head() #zwraca pierwsze n wierszy dla obiektu na podstawie pozycji
  42.     diagnosis_classes = len(excel_data.groupby('Klasy diagnozy').size())
  43.     diagnosis_classes = [ str(x + 1) for x in range(diagnosis_classes)] #rozmiar kolumny
  44.     excel_data = shuffle(excel_data) #Metoda shuffle () losuje elementy listy na miejscu
  45.    
  46.     # one hot encoding – kodowanie etykiet jako tablicę numeryczną
  47.     for i in column_headers:
  48.         label_enc = LabelEncoder() #normalizacja etykiet - usuwa zbędne powtórzenia
  49.         label_enc.fit(excel_data[str(i)]) # dopasuj koder etykiet.  Szacuje ona najlepszą reprezentatywną funkcję dla punktów danych, Znajduje współczynniki dla równania określonego za pomocą używanego algorytmu
  50.         excel_data[str(i)] = label_enc.transform(excel_data[str(i)]) #Przekształć etykiety w znormalizowane kodowanie
  51.         encoded = to_categorical(excel_data[str(i)]) #Konwertuje wektor klasy (liczby całkowite) na macierz klas binarnych.
  52.  
  53.         if len(encoded[0]) > 2 and i != 'Klasy diagnozy':
  54.             insert_loc = npy.where(column_headers==i) #zwraca elementy jeżeli column_headers = 1
  55.             insert_loc = insert_loc[0][0]
  56.  
  57.             excel_data = excel_data.drop(columns = i) #usuwa kolumnę 1
  58.             for label in range(len(encoded[0])):
  59.                 excel_data.insert(int(insert_loc), str(i) + "_" + str(label), encoded[:,label])
  60.     #print(insert_loc)
  61.     #print(excel_data.head())
  62.     excel_data.head()
  63.     Y_data = excel_data['Klasy diagnozy']
  64.     X_data = excel_data.drop(columns = 'Klasy diagnozy')
  65.      # ratio 1/2 to 1/2
  66.     X_train = X_data[:238] # bierzecie wartości od indeksu 0 do 238 (bez 238)
  67.     Y_train = Y_data[:238]
  68.  
  69.     #print(X_train)
  70.     #print(Y_train)
  71.     X_test = X_data[238:] # od 238 do konca
  72.     Y_test = Y_data[238:]
  73.  
  74.     kfold = [[X_train, Y_train, X_test, Y_test], [ X_test, Y_test, X_train, Y_train]]
  75.     # kfold[0] == [X_train, Y_train, X_test, Y_test]
  76.     # kfold[1] == [ X_test, Y_test, X_train, Y_train]
  77.     cvscores = []
  78.    # print(kfold)
  79.    
  80.     #Dense - każde wejście połączone jest z wyjściem.
  81.     model = Sequential() #Opcjonalnie pierwsza warstwa może otrzymać argument `input_shape`
  82.     model.add(Dense(units = 106,activation = 'relu',input_dim = 106)) # warstwa wejściowa. units - Dodatnia liczba całkowita, wymiarowość przestrzeni wyjściowej. input_dim -Ma zastosowanie tylko wtedy, gdy warstwa ma dokładnie jedno wejście, tj. Jeśli jest połączona z jedną warstwą wejściową.
  83.     model.add(Dense(units = number_of_neurons, activation = 'relu')) # warstwa ukryta, activation - funkcja aktywacji do użycia
  84.     model.add(Dense(units = 8, activation = 'softmax')) # warstwa wyjściowa. softmax, zamienia logikę na prawdopodobieństwo
  85.    
  86.     for X_train, Y_train, X_test, Y_test in kfold:
  87.         #Metoda compile () Konfiguruje model do treningu.
  88.         #SGD() - oblicza gradient i aktualizuje naszą macierz wagową W na małych partiach danych treningowych ,a nie cały zestaw treningowy
  89.         model.compile(optimizer= SGD(lr = 0.07, momentum=momentum_value),loss= 'sparse_categorical_crossentropy', metrics= ['accuracy'])
  90.         #model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
  91.         #SGD - trenuje na małych partiach danych treningowych, a nie na cały zestaw treningowy. - doczytać
  92.         model.fit(X_train, Y_train, epochs = 10,shuffle = True, verbose = 0, validation_data=(X_test, Y_test)) #trenuje model
  93.         scores = model.evaluate(X_test, Y_test, verbose=0) #Zwraca wartość strat i wartości metryk dla modelu w trybie testowym.
  94.        # print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) #wyświetli etykiety dla wyjść skalarnych
  95.         #Ustawienie pełnej wartości (verbose) na True w konfiguracji spowoduje, że usługa wygeneruje więcej danych wyjściowych
  96.         #Jeśli shuffle jest True, całe dane są najpierw tasowane, a następnie dzielone
  97.         #sufferpart2: Tasowanie” jest głównie przydatne, jeśli twoje dane są w jakiś sposób posortowane według klas, ponieważ wtedy każda fałda może zawierać tylko próbki z jednej klasy
  98.         #validation_data - ocenia się stratę i wszelkie metryki modelu na końcu każdej epoki.
  99.         cvscores.append(scores[1] * 100)
  100.        
  101.     print("%.2f%% (+/- %.2f%%)" % (npy.mean(cvscores), npy.std(cvscores))) # mean - Zwraca średnią elementów tablicy , std -Zwraca odchylenie standardowe, miarę rozprzestrzeniania się rozkładu elementów tablic
  102.    
  103. print (model.summary())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement