import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.neural_network import MLPClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.metrics import confusion_matrix from sklearn.preprocessing import StandardScaler # --- Listening 2 --- df = pd.read_csv( 'diabetes.csv' ) # Wczytanie zbioru z odpowiedniej ścieżki print( df.sample( 5 )) # Wyświetlenie wylosownych 5 rekordów stats = df.describe() # Obliczenie statystyk deskrypcyjnych i przechowanie stuktury DataFrame w zmiennej stats # sprawdzić czy są puste rekordy if df.isnull().sum().sum() <= 0: print( "Nie ma pustych" ) #sprządzić wykres korelacji plt.figure(figsize=(5,5)) sns.heatmap(df.corr(),annot=True) # wykres prezentujący histogram i funkcję gęstości oraz mediany dla atrybutu w rozkładzie zmiennej decyzyjnej dla zmiennej pregnencies plt.figure( figsize = ( 5, 5 )) sns.distplot( df[ df[ 'Outcome' ] == 0 ][ 'Pregnancies' ], bins = 10, kde_kws = { 'label' : 'drowa' }) sns.distplot( df[ df[ 'Outcome' ] == 1 ][ 'Pregnancies' ], bins = 10, kde_kws = { 'label' : 'Cukrzyca' }) plt.title( 'Liczba ciąż w śród badanych' ) plt.axvline( np.median( df[ df[ 'Outcome' ] == 0 ][ 'Pregnancies' ]), color = 'blue', linestyle = '--' ) plt.axvline( np.median( df[ df[ 'Outcome' ] == 1 ][ 'Pregnancies' ]), color = 'red', linestyle = '--' ) # --- Listening 3 --- #OkreśleniedokładnościklasyfikatoraZeroR accuZeroR = df[ 'Outcome' ].value_counts() / len(df) if accuZeroR[ 0 ] > accuZeroR[ 1 ]: print( "Skuteczność klasyfikatora ZeroR to %1.3f" % ( accuZeroR[ 0 ])) else: print( "Skuteczność klasyfikatora ZeroR to %1.3f" % accuZeroR[ 1 ]) # --- Listening 4 --- #ZmienneX,ybezstandaryzacji y = df.iloc[ :, -1 ] # Ostatnia kolumna jako zmienna decyzyjna X = df.drop( 'Outcome', axis = 1 ) #Podział zbioru na testowy i uczący w proporcjach 30% do 70% x_train, x_test, y_train, y_test = train_test_split( X, y, test_size = 0.30, random_state = 0 ) # Utworzenie modelu neuronowego przy wybranych cechach uczenia # Rozmiar sieci 3 warstwy ukryte po 100 neuronów każda # f.aktywacj i logistyczna # max_liczba_iteracji(epoki)500 # wartość alpha regularyzacji L2 ( Ridgeregression ) 0.0001 # algorytm uczenia sgd stochastic gradient descent # współczynnik uczenia # czy pokazywać progres uczenia # inicjalizacja generatora liczba losowych # toleracja − jeżeli funkcja straty nie poprawia się o wartość większą niż tol to przerwać uczenie model = MLPClassifier( hidden_layer_sizes = ( 100, 100, 100 ), activation = 'logistic', max_iter = 500, alpha = 0.0001, solver = 'sgd', learning_rate_init = 0.1, verbose = False, random_state = 0, tol = 0.000000001 ) # --- Listening 5 --- # Uruchomienie ewaluatora model.fit( x_train, y_train ) # Obliczenie wyjść przy zadanych wejściach w zbiorze uczącym y_pred_train = model.predict( x_train ) # Obliczenie wyjść przy zadanych wejściach w zbiorze testowym y_pred = model.predict( x_test ) print( "Skuteczność klasyfikatora dla danych uczących to %1.3f" % accuracy_score( y_train, y_pred_train )) print( "Skuteczność klasyfikatora dla danych testowych to %1.3f" % accuracy_score( y_test, y_pred )) # wykres błędu w krokach uczenia plt.figure( figsize = ( 5, 5 )) plt.plot( model.loss_curve_ ) plt.title( 'Zmiana wartości funkcji straty w procesie uczenia') plt.xlabel( " liczba korków" ) plt.ylabel( "wartość funkcji błędu" ) # Macierz pomyłek dla testu cm = confusion_matrix(y_test, y_pred) print( cm ) plt.figure( figsize = ( 5, 5 )) sns.heatmap( cm, center = True ) plt.show()