4 minute read

py 1-1 Basic computer class for newbies

운영체제

  • 운영체제: 사용자 프로그램(애플리케이션)과 사용자 인터페이스와 연결해 주고 대신 처리해줌. e.g. data.to_excel(…)와 같은 명령어만 치면 실제 작동은 알아서 해줌.

  • 운영체제에 dependent하다. 개발 환경에 맞는 OS가 있음. 환경을 사용하려고 할 때 OS을 고려해야 한다.

파일 시스템

  • 트리 구조. root/C드라이브 디렉토리에서부터 트리 자료구조 형태로 뻗어 나감 e.g. 폴더 안에 다른 폴더

경로

  • 절대 경로: pwd
  • 상대경로: ./

User Interface

  • GUI: Graphic Userface Interface
  • CLI: Command Line Interface e.g. 터미널

명령어

  • Linux/Unix command
    • cd
    • clear
    • cp
    • rm
    • ls(Unix 기반)/dir(Windows)

py 1-2 python

  • 플랫폼에 독립적: 운영체제에 상관없이 돌아감
  • 인터프리터 형식의 프로그래밍 언어(캄파일러가 아님)
  • 컴파일러와 인터프리터
    • 컴파일러: 먼저 번역함 -> 빠름 AND 번역 파일을 저장할 공간 큼. C, JAVA
    • 인터프리터: 실행할 때 번역 -> 느림 AND 번역 파일 저장 필요 없음. 파이썬
  • 블럭(객체)을 미리 만들어두고 나중에 합쳐서 프로그래밍을 한다
  • 실행 시점에 타입을 결정. syntax 에러에 관용적이다?
  • 이해하기 쉬움

1-3 파이썬 환경

  • 현재 파이썬 버전이 3.9까지 나옴. 사용하려는 프레임워크가 현재 설치된 버전과 호환되는지 확인하는게 필요.

편한 주피터 단축키

cell안

  • 실행: ctrl + enter , shift + enter, alt + enter
  • 툴팁: shift tab
  • 들여쓰기 ctr ] or [
  • 셀 나누기 ctr shift -

    cell 밖(ESC)

    셀 합치기: shift M 셀 오리기: x 셀 복사 : c 셀 붙이기: v 셀 지우기: dd 취소: z 마크다운 변환: mm 코드 변환: yy

코랩 단축키

  • 실행: ctrl + enter , shift + enter, alt + enter
  • 마크다운 변환: ctr + mm
  • 코드 변환: ctr + yy

2-1 파이썬 변수

2-2 function and console

  • {}
    print("{} {} {}".format("a","b","c")) 
    
  • fstring
    value = 'this is val'
    print(f'value is {value}')
    

str.format

  • {}안에 argument index 넣음.
  • format함수 안에 argument으로 string 값 자체를 넣는 것이 아니라 변수 이름을 전달한다.
  • {1:.3f}등으로 소수 점 padding 가능. 2번째 argument을 float으로 넣고 3자리 소수점.
arg1 = "first sentence"
arg2 = "second sentence
print("This is {0}, and there is another {1}.format(arg1, arg2))

naming

  • %() 사용이나 {}format 모두에 사용 가능.
  • key:value 형태를 지정해서 key 값으로 전달.
pring("This is %(str)10s. There is %(num)5.5f" %("str":"First sentence", "num":7.2))

print("This is {str:10s}, There is {num:5.5f}".format("str":"First sentence", "num":7.2))

string format 위치

  • > 단락 우측
  • < 단락 좌측
  • \^ 단락 중앙

2-3 조건문과 반복문

if name == ‘main’:

  • 파이썬으로 파일을 실행시키거나 import할 때
    1. 파이썬은 해당 파일을 주어진 path에서 찾는다.
    2. 그리고 각 파일(object)의 __name__변수를 초기화 함.
    1. 만약 실행 파일이 main 파일이면 name = ‘main‘으로 할당 함.
    2. import 파일이면 name = ‘file_name’으로 할당 함.
  • 따라서 `if name == ‘main‘이 있는 파일인 경우에,
    • 파일이 main으로 실행되거나 import 되었을 때 if 조건문이 실행됨.
    • main 파일로 실행된 경우에 __name__ 변수의 값이 __main__이 맞기에 해당 local scope을 실행.
    • import 되었을 때 해당 파일의 __name__의 값이 'file_name'이기 때문에 실행 안됨.

reference: https://stackoverflow.com/questions/419163/what-does-if-name-main-do

2-4 파이썬 string

sys.getsizeof(“a”)

  • string은 1바이트인데 1보다 훨씬 숫자를 반환함.
  • 실제 string data + python의 object meta 정보 등등을 모두 포함한 object 바이트 수를 반환하기 때문이다.

유용한 함수들

s.upper()
s.lower()
s.capitalize()
s.count(str_arg)
s.find(str_arg)
s.rfind(str_arg)
s.startwith(str_arg)
s.endwith(str_arg)
s.strip()
s.lstrip()
s.rstrip()
s.split(str_arg)
s.isdigit()
s.islower()
s.isupper()

raw string

문자열 안에 escape을 무시하고 다 내보냄

str = r"This is string\n"
print(str) # This is string\n : \n까지 밖으로 나옴.

python call by reference?

case 1

def func(arg)
    arg.append("new element")
    print("after change: ", arg)

data = ["This", " is ", "original ", "data " ]

print(data) # This is original data
func(data) # This is original data new element
print(data) # This is original data new element

case 2

def func(arg)
    print("before change: " , arg)
    arg = ["New ", "data"]
    print("after change: ", arg)

data = ["This", " is ", "original ", "data " ]

print(data) # This is original data
func(data) # New data
print(data) # This is original data new element
  • 함수에 전달되는 arg에 기존 data의 reference 값이 copy by value된다. 그래서 함수 내부에서 내용을 수정하면 바깥에서도 바뀐다.
  • 그런데 함수 내부에서 새로 assign을 하면 reference 값이 새로운 데이터로 바뀜. 그래서 바깥에서는 안바뀜.
  • 포인터의 주소값을 복사해서 전달한 것과 동일해보인다.

좋은 함수

  • 컨벤션 일관성 유지(camel case, tab or space 등등)
  • 함수의 기능은 unique한 기능 1개만
  • 다른 사람이 읽기 좋은 코드 짜기
  • 마지막 줄 항상 공백 추가
  • 등등

AI math: 벡터

내적의 해석: 두 벡터 x,y가 있을 때, projection 벡터에 $||\bold y||$을 곱해준 것.

given vector x and y, $||x|| \cos \theta \to ||x||_2 ||y||_2 \cos \theta$

AI math: 행렬

유사 역행렬 Moore-penrose 역행렬 maxtix A의 역행렬을 구할 수 없을 때(singular?) 유사 역행렬을 구할 수 있음. \(A \in R^{n \times m}\\ A^+ = \begin{cases} (A^TA)^{-1}A^T \text{ if } n \ge m\\ A^T(AA^T)^{-1} \text{ if } n \le m \end{cases}\\\)

AI math: 경사하강법

쉽게 생각하기: 제곱 함수가 convex하고, 제곱근 함수는 monotonically increasing하며, 1/n은 $\beta_k$에 대해 상수이다. 따라서 제거 하고 생각해도 극소 값이 동일하다.

$\argmin_\beta Loss(y, \hat y)$에서,

\[\argmin_\beta \big \{\frac{1}{n} \sum_i (y_i - \sum_j X_{ij} \beta_j)^2\}^{1/2}\\ = \argmin_\beta \sum_i (y_i - \sum_j X_{ij} \beta_j)^2\] \[\begin{aligned} \frac{L}{\partial \beta_k} & = \sum_i (y_i - \sum_j X_{ij}\beta_j) \cdot (- X_{ik})\\ & = - \sum_i [ (X_{ik}) (y_i - \sum_j X_{ij}\beta_j) ]\\ \end{aligned}\]

for given i, since $\sum_j a_j \cdot b_j = <a,b>$, \(\begin{aligned} & = (X_{ik}) (y_i - \sum_j X_{ij}\beta_j)\\ & = ( X_{ik}) (y_i - <X_i, \beta>)\\ \end{aligned}\)

for all i again, \(\begin{aligned} & = \sum_i ( X_{ik}) (y_i - <X_i, \beta>)\\ & = <X_{\cdot k}, (\vec \bold y - \bold X \bold \beta)>\\ & = X_{\cdot k}^T \cdot (\vec \bold y - \bold X \bold \beta) \end{aligned}\)

Recover all elements back, take the chain rule for square root and manipulate algebra, resulting in… \(\frac{1}{n} \frac{X_{\cdot k}^T \cdot (\vec \bold y - \bold X \bold \beta)}{||\bold y - \bold X \bold \beta||_2}\)

수렴에 대한 증명? SGD 기대값이 수렴 어떻게?

Comments