Advertisement
Guest User

Untitled

a guest
May 25th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 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.  
  10. from sklearn.preprocessing import LabelEncoder
  11.  
  12. # Importing libraries for building the neural network
  13. from keras.models import Sequential
  14. from keras.layers import Dense
  15.  
  16.  
  17. from sklearn.utils import shuffle
  18. from keras.optimizers import SGD
  19.  
  20. from keras.utils import to_categorical
  21.  
  22.  
  23.  
  24. number_of_neurons = int(input("Podaj liczbę neuronów: "))
  25. momentum_value = float(input("Podaj wartość momentum, wartość zero oznacza brak momentu, dopuszczalne liczby zmiennoprzecinkowe: "))
  26.  
  27. for counter in range(5):
  28. excel_data = pan.read_excel('data/oczyszczone.xls', sheet_name = 'daneSOB') #załadowanie arkusza daneSOB z pliku oczyszczone.xls
  29. column_headers = excel_data.columns.values #uzyskanie wartości jako listę/łączenie kolumn
  30. excel_data = shuffle(excel_data) #Metoda shuffle () losuje elementy listy na miejscu
  31.  
  32. # one hot encoding – kodowanie etykiet jako tablicę numeryczną
  33. for i in column_headers:
  34. label_enc = LabelEncoder() #normalizacja etykiet - usuwa zbędne powtórzenia
  35. 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
  36. excel_data[str(i)] = label_enc.transform(excel_data[str(i)]) #Przekształć etykiety w znormalizowane kodowanie
  37. encoded = to_categorical(excel_data[str(i)]) #Konwertuje wektor klasy (liczby całkowite) na macierz klas binarnych.
  38.  
  39. if len(encoded[0]) > 2 and i != 'Klasy diagnozy':
  40. insert_loc = npy.where(column_headers==i) #zwraca elementy jeżeli column_headers = 1
  41. insert_loc = insert_loc[0][0]
  42.  
  43. excel_data = excel_data.drop(columns = i) #usuwa kolumnę 1
  44. for label in range(len(encoded[0])):
  45. excel_data.insert(int(insert_loc), str(i) + "_" + str(label), encoded[:,label])
  46. #print(insert_loc)
  47. #print(excel_data.head())
  48. #excel_data.head()
  49. Y_data = excel_data['Klasy diagnozy']
  50. X_data = excel_data.drop(columns = 'Klasy diagnozy')
  51. # ratio 1/2 to 1/2
  52. X_train = X_data[:238] # bierzecie wartości od indeksu 0 do 238 (bez 238)
  53. Y_train = Y_data[:238]
  54.  
  55. #print(X_train)
  56. #print(Y_train)
  57. X_test = X_data[238:] # od 238 do konca
  58. Y_test = Y_data[238:]
  59.  
  60. kfold = [[X_train, Y_train, X_test, Y_test], [ X_test, Y_test, X_train, Y_train]]
  61. # kfold[0] == [X_train, Y_train, X_test, Y_test]
  62. # kfold[1] == [ X_test, Y_test, X_train, Y_train]
  63. cvscores = []
  64. # print(kfold)
  65.  
  66. #Dense - każde wejście połączone jest z wyjściem.
  67. model = Sequential() #Opcjonalnie pierwsza warstwa może otrzymać argument `input_shape`
  68. 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ą.
  69. model.add(Dense(units = number_of_neurons, activation = 'relu')) # warstwa ukryta, activation - funkcja aktywacji do użycia
  70. model.add(Dense(units = 8, activation = 'softmax')) # warstwa wyjściowa. softmax, zamienia logikę na prawdopodobieństwo
  71.  
  72. for X_train, Y_train, X_test, Y_test in kfold:
  73. #Metoda compile () Konfiguruje model do treningu.
  74. #SGD() - oblicza gradient i aktualizuje naszą macierz wagową W na małych partiach danych treningowych,
  75. #a nie cały zestaw treningowy
  76.  
  77. model.compile(optimizer= SGD(lr = 0.07, momentum=momentum_value),loss= 'sparse_categorical_crossentropy', metrics= ['accuracy'])
  78. #model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
  79. #SGD - trenuje na małych partiach danych treningowych, a nie na cały zestaw treningowy. - doczytać
  80.  
  81. model.fit(X_train, Y_train, epochs = 5,shuffle = True, verbose = 0, validation_data=(X_test, Y_test)) #trenuje model
  82.  
  83. scores = model.evaluate(X_test, Y_test, verbose=0)
  84. #Zwraca wartość strat i wartości metryk dla modelu w trybie testowym.
  85. #print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) #wyświetli etykiety dla wyjść skalarnych
  86. #Ustawienie pełnej wartości (verbose) na True w konfiguracji spowoduje, że usługa wygeneruje więcej danych wyjściowych
  87. #Jeśli shuffle jest True, całe dane są najpierw tasowane, a następnie dzielone
  88. #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
  89. #validation_data - ocenia się stratę i wszelkie metryki modelu na końcu każdej epoki.
  90.  
  91. cvscores.append(scores[1] * 100)
  92.  
  93. 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
  94.  
  95. print (model.summary())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement