0802_py_math
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)
- cd
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 formatting
{}
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할 때
- 파이썬은 해당 파일을 주어진 path에서 찾는다.
- 그리고 각 파일(object)의 __name__변수를 초기화 함.
- 만약 실행 파일이 main 파일이면 name = ‘main‘으로 할당 함.
- 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