Confusion Matrix - THE DATA SCIENCE LIBRARY https://sigmaquality.pl/tag/confusion-matrix/ Wojciech Moszczyński Wed, 05 Sep 2018 19:24:00 +0000 pl-PL hourly 1 https://wordpress.org/?v=6.8.3 https://sigmaquality.pl/wp-content/uploads/2019/02/cropped-ryba-32x32.png Confusion Matrix - THE DATA SCIENCE LIBRARY https://sigmaquality.pl/tag/confusion-matrix/ 32 32 Różnica między PRECISION a RECALL w interpretacji Confusion Matrix https://sigmaquality.pl/uncategorized/roznica-miedzy-precision-a-recall-w-interpretacji-confusion-matrix/ Wed, 05 Sep 2018 19:24:00 +0000 http://sigmaquality.pl/?p=5759 Różnica między  PRECISION a RECALL nie jest łatwa do interpretacji dlatego pozwoliłem sobie zrobić małą ściągawkę z tego tematu. Najlepiej opisana jest interpretacja Confusion Matrix [...]

Artykuł Różnica między PRECISION a RECALL w interpretacji Confusion Matrix pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>

Różnica między  PRECISION a RECALL nie jest łatwa do interpretacji dlatego pozwoliłem sobie zrobić małą ściągawkę z tego tematu.

Najlepiej opisana jest interpretacja Confusion Matrix w Wikipedii.

Confusion Matrix jest metodą oceny modeli dyskretnych

W przykładzie zaproponowanym przez Wikipedia mamy zbiór 13 zwierzą:  8 kotów i 5 psów. Model ma za zadanie identyfikację zwierząt ze zdjęć.

W RECALL Confusion Matrix szuka się dobrych odpowiedzi

W tym przypadku sukces jest gdy: (1) model zidentyfikowała kota jako kota, (2) model zidentyfikowała psy jako psy. Na diagramie dobre odpowiedzi zaznaczone są kolorem zielonym.

PRECISION Confusion Matrix analizuje się pod kontem jednej kategorii

Tą jedną kategorią w naszym przypadku są Koty.

W tym przypadku PRECISION analizuje dwie rzeczy: (1) ile razy model zidentyfikowała kota jako kota, (2) ile było wszystkich zidentyfikowanych kotów, w tym przypadków 5 kotów zostało rozpoznanych na zdjęciu jako koty oraz dwa psy zostały błędnie uznane za koty, co daje łączną liczbę 7 kotów.

Nazewnictwo Confusion Matrix

W interpretacji Confusion Matrix stosuje się specyficzne nazewnictwo pól macierzy.

Przy interpretacji Confusion Matrix bardzo ważne jest aby ocenić czy zbiór danych jest zrównoważony.

Niezrównoważony zbiór danych, to taki, gdzie w próbce byłoby na przykład 95

Model mógłby identyfikować wszystkie zwierzęta na zdjęciu jako psy i miałby 95

positive (P)  liczba rzeczywistych przypadków pozytywnych w danych

negative (N) liczba rzeczywistych negatywnych przypadków w danych

Różnica między  PRECISION a RECALL.

 Recall zwany też true positive rate (TPR) 

 RECALL to „jak kompletne są wyniki” 

Z 8 kotów program zidentyfikował 5. Wynik 62

 Precision albo positive predictive value (PPV) 

 PRECISION precyzja to „jak przydatne są wyniki wyszukiwania” 

Program zidentyfikował poprawnie 5 kotów oraz zidentyfikował 2 psy jako koty.

PRECISION oznacza, że ​​algorytm zwrócił znacznie bardziej istotne wyniki niż te nieistotne. Precyzja może być postrzegana jako miara dokładności lub jakości.

Różnica między  PRECISION a RECALL

Na przykład jest 100 stron na temat X. Wyszukiwarka znalazła 70 stron na temat X, program łącznie otworzyła 120 stron.

RECALL oznacza, że znalazła 70 stron na temat X ze 100 istniejących (dlatego nazywa się to kompletnością 70/100 = 70

PRECISION oznacza, że z pośród 120 stron znalazła 70 stron na temat X. (70/120 = 58

RECALL definiuje się jako liczbę odpowiednich dokumentów pobranych przez wyszukiwanie podzieloną przez całkowitą liczbę istniejących odpowiednich dokumentów.

PRECISION definiuje się jako liczbę odpowiednich dokumentów pobranych przez wyszukiwanie podzieloną przez całkowitą liczbę dokumentów pobranych przez to wyszukiwanie.

 

Artykuł Różnica między PRECISION a RECALL w interpretacji Confusion Matrix pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>
Standaryzacja danych do modeli machine learning za pomocą StandardScaler() https://sigmaquality.pl/uncategorized/standaryzacja-danych-do-modeli-machine-learning-za-pomoca-standardscaler/ Wed, 05 Sep 2018 19:24:00 +0000 http://sigmaquality.pl/?p=5771 Wyjaśnienie teoretyczne Standaryzacja danych do modeli machine learning polega na przekształceniu danych pierwotnych, aby ich rozkład miał średnią wartość równą 0 i odchylenie standardowe równe [...]

Artykuł Standaryzacja danych do modeli machine learning za pomocą StandardScaler() pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>

Wyjaśnienie teoretyczne

Standaryzacja danych do modeli machine learning polega na przekształceniu danych pierwotnych, aby ich rozkład miał średnią wartość równą 0 i odchylenie standardowe równe 1. Od każdej wartość w kolumnie danych będzie odejmowana średnia wartość kolumny, a następnie to co wyjdzie będzie podzielona przez odchylenie standardowe kolumny danych. Opisany proces dotyczy każdej kolumny oddzielnie.

 Standaryzacja danych do modeli machine learning jest krokiem niezbędnym  

W naszym przykładzie mamy kolumnę z poziomem glukozy we krwi, gdzie poziom ten w większości znajduje się w okolicach 100-120 jednostek. Obok mamy kolumnę z ciśnieniem krwi, obok grubością skóry na brzuchu – tam wartości wahają się między 10 a 40 mm.

Ponieważ te dwie kolumny różnią się skalą, są standaryzowane, aby mieć wspólną skalę podczas budowania modelu. Standaryzacja jest więc sposobem na przyporządkowania danych posiadających różne jednostki i różne zakresy wartości do wspólnej skali.

Przykład standaryzacja danych do modeli machine learning

Otwieram bazę:

from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd

df = pd.read_csv('c:/1/diabetes.csv') 
df.head()

Tworzony z powyższej tabeli szereg.

a = np.array(df)
a

Średnia z kolumn wynosi:

np.mean(a, axis=0)

Odchylenie standardowe kolumn wynosi:

np.std(a, axis=0)

Transformujemy dane do postaci standardowego rozkładu normalnego o średniej 0 i odchyleniu standardowym 1.

scaler = StandardScaler()
scaled_data = scaler.fit_transform(a)
k = scaler.transform(df)
k

Średnie z kolumn po standaryzacji.

np.std(k, axis=0)

Odchylenia standardowe po standaryzacji. Wartość k została sprowadzona do formatu int aby lepiej pokazać zero.

k=k.astype(int)
np.mean(k, axis=0)

Teraz każda kolumna ma średnią 0 i odchylenie standardowe 1.

Graficzny obraz standaryzacji

Wybierzmy do testów kolumnę: „Glucose”. Przed standaryzacją parametry tej kolumny były następujące.

df['Glucose'].agg(['min','max','mean','std'])

Rozkład prawdopodobieństwa utworzony z danych z kolumny „Glucose”.

import seaborn as sns
plt.figure(figsize=(4,4))
sns.distplot(df['Glucose'].dropna(),kde=True,bins=170, color='blue')

Taką charakterystykę miały dane z kolumny „Glucose” przed standaryzacją. Teraz przekształcimy wektor k na tabelę danych.

kf = pd.DataFrame(k, columns = ['Pregnancies', 'Glucose STANDARDISED', 'BloodPressure', 'SkinThickness', 'Insulin',
       'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'])

kf.head(8)

Teraz przedstawiamy standaryzowane wartości „Glucose” w formie rozkładu.

plt.figure(figsize=(4,4))
sns.distplot(kf['Glucose STANDARDISED'].dropna(),kde=True,bins=170, color='green')

Dane standaryzowane bardzo różnią się od danych pierwotnych. Widać to najlepiej na wykresie połączonym.

fig, ax = plt.subplots()
df['Glucose'].plot.kde(ax=ax, legend=True, title='Standardisation')
kf['Glucose STANDARDISED'].plot.kde(ax=ax, legend=True)
ax.set_ylabel('Probability')
ax.grid(axis='y')

 

 

Standaryzować można pojedyncze kolumny

Ta jest gdy inne kolumny nie potrzebują standaryzacji lub już są standaryzowane.

Dane do tego przykładu można znaleźć tutaj.

import pandas as pd
import numpy as np

from sklearn.preprocessing import StandardScaler, Normalizer, scale

df = pd.read_csv('c:/1/creditcard.csv') 
df.sample(6)

Teraz dokonujemy standaryzacji kolumny ‘Amount’.

scaler = StandardScaler()
df['Amount'] = scaler.fit_transform(df['Amount'].values.reshape(-1, 1))

Sprawdzamy właściwości nowej kolumny:

Okazuje się że mamy zmienne, które maja wartość 40, oznacza to że istotnie odstają od średniej i od odchylenia standardowego. Sprawdzamy rozkład danych w kolumnie ‘Amount’.

df['Amount'].plot(kind = 'hist')

Rozkład jest prawidłowy.

 

Artykuł Standaryzacja danych do modeli machine learning za pomocą StandardScaler() pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>