정규화(Normalizaiton), 표준화(Standardization)

  • 머신러닝과 딥러닝에서 데이터 전처리는 모델의 성능에 결정적인 영향을 미치며, 그 중에서도 정규화와 표준화는 특히 중요한 기법들입니다.
  • 정규화와 표준화는 둘다 데이터의 스케일을 조정하는 방법이다.

정의

  • 정규화(Normalization)는 다양한 크기의 데이터를 특정 범위(보통 0~1)로 조정하는 방법
  • 데이터 $x_i$를 정규화(0~1)된 데이터 $x_{i, normalization}$으로 변환하는 방법:
    $$ x_{i,normalizaiton} = \frac{x_i - x_{min}}{x_{max} - x_{min}}$$
    $x_{max}$ : n개의 데이터 $x_1,..,x_n$ 중 최대값
    $x_{min}$ : n개의 데이터 $x_1,..,x_n$ 중 최소값
  • 표준화(Standardization)는 데이터의 평균이 0, 표준편차가 1이 되도록 조정하는 방법이다.
  • 데이터 $x_i$를 표준화된 데이터 $x_{i, standardization}$으로 변환하는 방법:
    $$x_{i,standardization} = \frac{x_i - \overline{x}}{s}$$
    $\overline{x}$ : n개의 데이터 $x_1,..,x_n$에 대한 평균
    $s$ : n개의 데이터에 대한 표준편차(Standardization)

정규화의 필요성

  • 데이터 간 스케일 일치: 데이터 세트 내에 각 데이터들은 단위스케일이 당연히 다양하다. 그때 크기가 큰 특성이 결과에 더 큰 영향을 미칠 수 있습니다. 예를 들어, 주택 가격을 예측할 때 면적(제곱미터)과 방의 수(정수)가 있으면 면적의 스케일이 훨씬 크기 때문에 이 특성이 결과에 더 큰 영향을 미칠 수 있다.
  • 정규화를 통해 이러한 데이터들을 동일한 범위 (0과 1 사이)로 조정하여 모델이 공정하게 데이터를 학습할 수 있도록 도와줍니다.
  • 학습 속도 향상: 경사 하강법 같은 최적화 알고리즘은 정규화를 통해 특성들이 비슷한 범위에 있을 때 더 빠르게 수렴합니다. 다른 스케일의 데이터는 경사면이 불균형하게 되어 최적점에 도달하는 데 더 오랜 시간이 걸릴 수 있습니다.

표준화의 필요성

  • 평균과 분산의 조정: 표준화는 데이터의 평균 = 0으로, 분산 = 1로 조정합니다. 이는 많은 기계 학습 알고리즘, 특히 가중치를 사용하는 알고리즘(선형 회귀, 로지스틱 회귀, 신경망 등)에서 중요합니다. 평균이 0이 되면 학습 과정에서의 계산이 단순해지고, 분산이 1이 되면 모든 특성이 동일한 중요도를 갖게 됩니다.
  • 이상치 처리: 표준화는 이상치가 있는 데이터에 대해 더 강건하게 작동할 수 있습니다. 이상치가 존재하는 경우, 정규화는 전체 범위가 이상치에 의해 크게 영향을 받을 수 있지만, 표준화는 이상치의 영향을 상대적으로 덜 받습니다.
  • 알고리즘 요구 사항 충족: 많은 머신러닝 알고리즘, 특히 서포트 벡터 머신(SVM)이나 주성분 분석(PCA) 같은 알고리즘은 데이터가 정규 분포를 따를 때 최적의 성능을 보여줍니다. 표준화는 데이터를 정규 분포와 유사하게 만들어 이러한 알고리즘의 성능을 개선할 수 있습니다.

1차원 데이터 분석

분산, 표준편차

  • 둘다 데이터가 평균에서 얼마나 멀리 퍼져있는지를 수치화 한 값이고, 데이터와 같은 scale 혹은 단위로 만든 것이 표준편자, 그것의 제곱으로 표현된 것이 분산임.
분산 (Variance, $\sigma$)
  • 분산은 데이터가 평균에서 얼마나 멀리 떨어져 있는지를 수치화한 값.
  • 즉, 데이터의 흩어진 정도를 의미
  • 분산이 크면 데이터 포인트들이 평균에서 멀리 떨어져 있음을,
  • 분산이 작으면 평균 근처에 데이터가 모여 있음을 의미함.
  • 계산 방법: 각 데이터와 평균의 차이를 제곱한 후, 이 값들의 평균을 계산
    $\sigma = \frac{\sum_{i=1}^n (x_i - \overline{x})^2}{n}$
    $x_i$: $i$번째 데이터, $\overline{x}$는 데이터의 평균, $𝑛$은 데이터 수
표준편차(Standard deviation, $s$)
  • 표준편차는 분산의 제곱근으로, 데이터가 평균에서 얼마나 멀리 퍼져 있는지를 나타내는 척도입니다. 분산과 마찬가지로 표준편차가 클수록 데이터가 평균에서 멀리 퍼져 있음을, 작을수록 평균에 가깝게 모여 있음을 나타냅니다.
  • 계산 방법: $s = \sqrt{\sigma}$

2차원 데이터 분석

공분산, 상관계수

공분산 (Covariance)
  • 분산 1차원 데이터에 대한 값이라면, 공분산은 2차원 데이터 $x$와 $y$의 관계를 나타내며, 이 두 변수가 함께 변하는 경향을 수치화 한것
  • 분산은 항상 양수, 공분산은 양수와 음수 둘다 가능
  • 공분산 > 양수 : 두 변수가 같은 방향으로 변하는 경향을 으미
  • 공분산 < 음수 : 반대 방향으로 변하는 경향이 있습니다.
  • $cov(x, y) = \frac{\sum_{i=1}^n (x_i - \overline{x})(y_i - \overline{y})}{n}$
상관계수 (Correlation coefficient)
  • 1차원 데이터의 표준편차와 대응하는 2차원 데이터의 상관계수는 두 변수 사이의 선형적 관계의 강도와 방향을 수치화 한 값이다.
  • 상관계수는 공분산을 표준화한 값으로 -1 ~ 1 사이의 값임.
  • 1에 가까우면 강한 양의 선형 관계,
  • -1에 가까우면 강한 음의 선형 관계,
  • 0에 가까우면 선형 관계가 약하거나 없음을 의미합니다.
  • $cor(x,y) =\frac{cov(x,y)}{s_xs_y}$
  • $s_x$ : 데이터 x에 대한 표준편차, $s_y$ : 데이터 y에 대한 표준편차
예제 코드

다음은 2차원 데이터 분석 ipynb 코드
10명의 학생의 영어점수, 수학점수를 이용해서 데이터의 시각화 및 상관관계 분석
ipynb code

git branch

  • 현 로컬 저장소(local repository)의 모든 branch 목록 확인

git branch -r

  • 현 로컬 저장소(local repository)와 연결된 원격 저장소(remote repository)의 모든 branch 목록 확인
  • 로컬 저장소의 브랜치가 아니라 원격 저장소의 브랜치 목록이란 점 주의!
    alt text

git branch -a

  • local과 remote branch 목록 모두 확인

git remote -v

  • 현 로컬 저장소에 연결된 모든 원격 저장소의 목록을 보여줌
  • v=(verbose) 각 원격 저장소의 이름(보통 origin)과 해당 원격 저장소의 url을 보여줌

git branch py-init

  • local 저장소에 py-init라는 로컬 branch 생성

git switch py-init

  • 로컬 저장소에 연결된 py-init라는 branch로 이동
    alt text

git branch -D py-init

  • py-init branch 삭제
    alt text

git 사용 중 conflict가 발생하는 경우!
alt text

  • 이런 경우 충돌이 일어난 파일을 결국 프로그래머가 중재해서 하나로 통일시켜야함.
  • 즉 지울것 지우고 바꿀꺼 바꿔서 다시 commit, git push 하면 다음과같이 visualize됨
  • conflict를 중재하고 github에 commit하면 이렇게 보임
    alt text

git push -u origin gh-fb

  • github에 없던 branch를 처음 push할때는 -u를 딱 한번 써야함
  • git push -u origin 명령은 현재 브랜치의 변경사항을 origin이라는 원격 저장소로 푸시하면서, 해당 브랜치를 기본 원격 브랜치로 설정하는 역할을 합니다. 이로써 추후에 동일 브랜치에서 git push나 git pull 명령을 실행할 때 원격지와 브랜치를 지정할 필요 없이 간단하게 명령을 실행할 수 있게 됩니다.

git pull origin main

  • remote에 있는 사항을 local에 업데이트(github과 동기화)

git mv main.py hello.py

  • 그냥 `mv main.py hello.py’라고 하면 파일명을 바꿔주고 끝
  • git을 앞에 붙이면 파일명 변환과 함께 git add가 동시에 반영되서 stage에 자동으로 올라감. 즉 add 없이 commit만 하면 됨.

git restore hello.py

  • hello.py 파일을 최신 commit 상태로 되돌려준다.
  • 최신 commit 이후 파일을 수정했는데 되돌리고 싶을때 사용

git restore –stage README.md
git reset HEAD README.md

  • 둘다 README.md라는 파일이 staged된 상태(git add 실행후)에서 unstaged상태로 되돌려준다.

git commit –amend

  • 마지막에 commit한 것의 commit message를 수정해주는 명령어

linux 명령어 정리

ls (= list)

1
$ ls [option]
  • ls : 현 디렉토리내 폴더, 파일 목록 조회
  • ls -l : 각 폴다와 파일 생성 날짜등 추가정보 포함
  • ls -a : 숨김파일(ex .bash등)까지 조회
  • ls -a -l (= ls -al) : -a와 -l 둘다 적용
  • ls *.exe : 확장자가 *.exe 인 파일 목록 조회

touch

1
$ touch [파일명]
  • 파일이 존재하면 마지막 수정시간을 현재시간으로만 변경
  • 파일이 없으면 해당 이름의 파일 생성(크기는 0 byte로)
  • 주로 새파일 생성해주는 용도로 사용
  • touch hello.txt : 현 디렉토리에 hello.txt 없으면 파일 생성해줌
  • touch .hello.txt : 숨김 파일도 만들어줌

cat

1
$ cat [option] [file]
  • 주로 txt 파일 출력할때 사용
  • 정확한 의미는 input 과 output을 연결
    (input = [file], output = standard output)
  • cat hello.txt : 파일 내용 출력
  • cat -e hello.txt : 출력 내용의 각 줄의 맨뒤에 $ 붙이기(숨겨진 공백 확인 가능)
  • cat -n hello.txt : 출력 내용의 각 줄 맨앞에 줄번호 붙이기

rm

1
$ rm [option] [파일명 or 폴더명]
  • rm [파일명] : 지정 디렉토리내 해당 파일 삭제
  • rm -r [폴더명] : 지정 디렉토리와 그 안에 있는 모든 하위 디렉토리와 파일 삭제
  • rm -f : 삭제시 모든 확인 요청 무시하고 강제 삭제
  • rm hello.txt : 현 디렉토리 내 hello.txt 파일 삭제
  • rm ./TIL : 현 디렉토리에 있는 TIL 폴더 삭제(그 폴더 및 하위 폴더와 파일들 모두)
  • rm -rf ./TIL : 확실히 삭제할 생각이면 이렇게 하면 됨(삭제후 취소불가)

Markdown 문법 학습 - 2024.04.21(sun)


Heading1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Paragraph


This is the bold text and this is the italic text and lets do strikethrouh

들여쓰기

목록 만들기:

  • 목록1
  • 목록2

목록 만들기2:

  • 목록1
  • 목록2

Numbers:

  1. first
  2. second
  3. third

click my tistory blog

Header Description
Cell1 Cell2
Cell1 Cell2
Cell1 Cell2

To print message in the console, usd console.log('your message') and ..

1
2
print("Hello world")

more information
click Github flavored markdown

첫번째 포스팅 입니다.



WSL 환경에서 hexo를 이용하여 next-theme 블로그를 만들었습니다.
블로그는 티스토리만 사용했었는데, 키보드로 모든걸 하려니 어색하네요.
앞으로 개발과 관련된 내용을 기록하기위해 사용할 예정입니다.


my tistory blog
my wedding invitation

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

0%