Normalizacja danych zapisanych w plikach *.dat

0

Witam

Mam taki problem, posiadam dane w plikach dat (mogę je wczytać do excela). Chciałbym wykonać następujące działanie, sprowadzić każdą z tych danych do zakresu wartości od 0 do 1. W jaki sposób mogę tego dokonać ? Polecilibyście jakiś program ?

0

Ty tak poważnie? Rozumiem ze te pliki to zwykłe CSV. Taka normalizacja to jest może 5-10 linijek w pythonie / dowolnym języku skryptowym. Szybciej byś to napisał niż ten temat...

0

Gdybyś napisał w jakim formacie są dane, jak zamienić je na wartość 0 - 1 i podał przykład to może nawet ktoś by Ci to napisał

0

No akurat "jak" zamienić to dość oczywiste. Poprzez podzielenie przez największą wartość w zbiorze / w kolumnie (zależy czy normalizujemy względem kolumn czy całości danych).

1
Shalom napisał(a):

No akurat "jak" zamienić to dość oczywiste. Poprzez podzielenie przez największą wartość w zbiorze / w kolumnie (zależy czy normalizujemy względem kolumn czy całości danych).

A co jeśli największą wartością jest 0 ;]

Wzór na normalizację jest rzeczywiście banalny i wygląda następująco: (Xi - Xmin)/(Xmax - Xmin);

Jeśli jest możliwość wrzucenia tych danych do excela to co za problem zrobić to w excelu?

0

Witam, wzór znam natomiast posiadam dużą ilość takich plików i trochę jestem zakłopotany. Inaczej mówiąc nie chce mi się myśleć. Dane w postaci następującej np. 2,22.5,3,4,9 i tak po kilka set linijek w pliku

0

@usm_auriga no ale gdzie widzisz problem?
Python -> os.walk() + codecs.open() + readlines() + split(","). Nie obiecuje ale przypuszczam ze zamkniesz się w 10 linijkach kodu i 10 minutach roboty. A na odpowiedź w tym temacie czekasz już 3 dni...
Jakbyś raczył napisać konkretnie jak wyglądają te pliki i względem czego normalizujesz (kolumna czy cały plik czy wszystkie dane?) to pewnie juz dawno miałbyś ten kod...

0

Dziękuje za te odpowiedzi, ja jednak poradziłem sobie z tym problemem. Czy znacie jakieś fachowe źródła dlaczego wykonujemy taką normalizację w systemach uczących się ?

0

@usm_auriga Wyobraź sobie że na wejściu masz dwa neurony, jeden ma parametr z wartościami 0..1 a drugi 1000...2000
Jaką chcesz ustawić wartość progową i jakie wagi chcesz losować na początku? Widzisz tu mały problem? Poza tym może sie okazać że ten drugi parametr "przyćmi" ten pierwszy. W rzeczywistości chcesz żeby każdy parametr miał równy wpływ na wynik klasyfikacji a to najprościej osiagnąć przez przeskalowanie parametrów do identycznych przedziałów.

0

Czy masz jakieś materiały na ten temat ? Jeśli będę wspominał o tym, to muszę podać źródło.

0

Normalizacja to tylko liniowe przekształcenie danych.

Tak na prawdę to normalizację dokonuje się tylko ze względu na gradientowe algorytmy uczenia - pochodna dla wag stojących przy danych przyjmujących wartości z dużych przedziałów będzie duża a w przypadku wag stojących przy danych przyjmujących wartości z małych przedziałów będzie mała - czyli nauka będzie "zaburzona". Oczywiście można to obejść np. ustawiając współczynnik uczenia dla każdej zmiennej osobno, ale to chyba bez sensu ... Trzeba byłoby również losować wagi z różnych przedziałów dla każdej zmiennej...

W przypadku innych algorytmów jak chociażby AG normalizacja ma mniejsze znaczenie - można się obejść bez normalizacji. Ale również trzeba pamiętać, że wagi przy zmiennych przyjmujących duże wartości powinna być odpowiednio mniejsza niże przy zmiennych przyjmujących odpowiednio małe wartości...

Reasumując, od biedy można się obejść bez normalizacji (szczególnie, gdy wszystkie zmienne są z podobnego zakresu)... Ale wykonanie normalizacji to chyba najmniej kłopotliwa czynność w "systemach uczących się" - więc czy jest sens na siłę jej unikać?!

1 użytkowników online, w tym zalogowanych: 0, gości: 1