본문 바로가기
BoostCampAITECH4th

부스트캠프 AITECH4기 1주차 학습정리.

by soypablo 2022. 9. 23.

1주차에는 입단 전에 미리 제공되었던 python, aimath강의가 제공되었다.

#아직 키워드로만 저장해 놓아서 아직 정리를 못했다.

1일차(9/19)

f-string에서,

ex code

a = 1

print(f”{a:a<10.2f}”)

에서 :a<10.2f를 자세히 살펴보았다.

→ a 이거는 빈 공간을 a라는 문자로 채운다.

→ < 왼쪽으로 정렬한다.(>, ^ 를 넣으면 각각 오른쪽, 중간정렬을 수행한다.)

→ 10 반공간 포함,10칸을 출력하도록 한다.

→ .2 소수점 2칸까지 출력한다.

→ f 이 자료형이 float형임을 나타낸다.

그리고 파이썬에서 0 <= x <= 2같이 사용하지 말고,

0 <= x and x <= 2이런식으로 사용되는 것이 권장 된다.

원래는 0 <= x <= 2같이 사용했었는데 고쳐야 겠다.

 

2일차(9/20)

3-2 Pythonic Code

def func(one, two=3, *args, **kwargs):

      print(asdadasfq)

이 함수를 실제로 실행한다면, 순서를 지켜야 한다.

예를 들어, func(1, 2, 3, 4, 5, 6, a=112, b=123)은 순서가 one, two, *args, kwargs순으로 지켜진 예이고,

func(1, 2, 3, 4, 5, 6, a=112, b=123, 55)는 순서가 지켜지지 않아 에러가 발생한다.

 

4-1 OOP

Class에서 self → 생성된 인스턴스 자기 자신을 의미한다. 약간 Jsthis와 비슷하면서도 다른 느낌이라고 생각했다.

객체의 매직 메소드 에 대해 알아봐야 할 것 같다.

객체의 특징 세가지 → 상속, 다형성, 가시성

상속

상속하기

class child(parent): ← 이런식으로 부모클래스를 상속받을 수 있다.

객채를 생성할 때, 부모클래스의 init을 상속받기 위해, super.__init__을 사용한다.

마찬가지로 부모클래스의 메소드를 사용하고 싶으면, super.(method_name)을 사용하여 사용할 수 있다.

다형성

같은 부모에서 받은 메소드를, 각 클래스마다 다르게 이용할 수 있다.

같은 이름의 메소드라도, 클래스마다 다르게 사용할 수 있다? 로 이해했음

 

가시성

객체의 정보를 볼 수 있는 레벨을 조정하는것, 보안?

캡슐화 라고도 한다. 클래스간 정보공유를 최소화? 그러니까 다른 클래스와 상호작용할 떄, 상대 클래스의 모든 정보를 가져오는 것이 아니라, 필요한 정보만 공유

사용법만 알면 된다!

 

 

Closure?????

Decorator???????<-주말에 정리해보자.

 

4-2 모듈과 라이브러리.

모듈을 import할때, 평소에는

from collections import deque ->이런식으로 임포트했는데,

import collections as col → 이런 식으로 설정하는 것이 좋은 것 같다.

좋은 이유: 여러개의 모듈을 임포트하여 사용할 때, 내가 지금 사용하는 함수가 어느 모듈에서 왔는지 알 수 있다. 그리고 만약 함수명이 중복될 경우, 예전 방식의 경우에는 문제가 생길 수 있을 것 같다.

 

모듈을 생성시, 폴더별로 __init__.py 파일을 만들어야 한다.(3.3부터는 안 만들어도 되지만, 일단 만든다.)

하위폴더와, py파일을 모두 포함한다?

__all__ = [“(사용할 모듈명 입력)”]

 

 

 

2.벡터가 뭐에요!

두벡터의 곱셈:XY → 먼저오는 행렬의 i번째 행백터와, 나중에 오는 행렬의 j번쨰 열벡터를 곱한다.

X의 열의 개수와, Y의 행의 개수가 같아야 한다.

역행렬 → 행렬의 열ij의 개수가 같아야만 가능(i == j)그리고 determinant(행렬식)0이 아니어야 가능하다.(이게 성립하지 않을 경우, 유사역행렬을 이용하여 원래차원으로 되돌릴 수 있다.)

 

AA(t) = I := [[1, 0, 0],

[0, 1, 0],

[0, 0, 1]]

선형회귀란? 어떤 공간에 점의 모음(즉 행렬)이 있을때, 이 점의 모음을 가장 잘 표현하는 선을 찾는 것

유사 역행렬?

 

9/21

선형회귀와 경사하강법에 대하여 학습했다.

선형회귀 -> 공간의 점들(데이터의 집합 aka matrix)를 가장 잘 나타내는 선분을 찾는 것!

gradient descent는 선형 회귀의 한 방법으로서 사용할 수 있다.

GD -> 함수를 미분하여 점차 loss를 줄임으로 minima?(최소점)을 찾는것. (가장 잘 나타낼 수있는 가중치 찾기)

후에 노트북으로 따로 공유할 예정.

 

9/22

딥러닝에서 왜 확률론이 필요할까? ← 딥러닝의 기반이 확률론의 기계학습 이론에 바탕을 두고있기 때문

회귀분석에서, 사용되는 loss함수인 L2norm 예측오차의 분산

각 데이터(y), 데이터의 예측값또는 WX + b 또는 XB)의 오차를 계산하여, 줄어드는 방향으로 SGD를 수행하여 학습하는 방법을 택함.

 

분류문제 에서는, 모델 예측의 불확실성을 최소화 하는 방향으로 학습하도록 한다.

즉 우리가 딥러닝에서 얻고자 하는것은, 우리가 설계한 모델의 불확실성과 분산의 최소화.

불확실성과 분산을 최소화 하기 위해서는 이 두가지를 측정을 잘해야한다. 그 방법이 확률론에 있다.

 

 

데이터 공간은 X x Y 로 표현

D는 데이터 공간에서 데이터를 추출하는 분포

데이터는 확률변수로 (x,y) ~ D로 표기(x, y) ∈ X x Y

(x, y)는 데이터 공간상에서 랜덤으로 데이터공간에서 관측한 함수.

 

확률변수는 이산형, 연속형 두가지로 구분되어 있다.

이산형 확률변수는 이산형 확률변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링 한다.

P(X 2 A) = X x2A P(X = x)

 

E(X) = 4

분산 = E(x^2) – E(X)^2

 

 

 

 

 

파일 핸들링

폴더 만들기 import os

파일 복사하기 import shutil

최근에는 pathlib을 사용한다.(다양한 os에서도 똑같이 사용가능하다.)

 

pickle

객체는 원래 메모리에 있어야한다?

메모리에 있는 상태면 어떤 상태? 컴파일 된 상태?

메모리에 있는 객체를 저장하는 게 pickle(영속화 한다.)

모델같은거 생성한뒤에, 끊어서 사용하고 싶을때, pickle로 저장

 

log

 

argparser

콘솔창에서 python -h 이런식으로 타이핑하는데, 그 콘솔창에서 넣는 args를 다룬다.

Command option 이라고도 한다.

 

 

통계학 맛보기

통계젹 모델링은 적절한 가정 위에서, 확률분포를 추정 (딥러닝에서 선형회귀를 통해 데이터를 가장 잘 표현하는 식을 찾는것과 비슷한것?)

모수란?

데이터가 어떤 확률분포(딥러닝에서는 WX + b)를 따른다고 가정하고, 그 모수(파라미터)를 추정하는 것이 모수적 방법론

 

특정 확률분포를 가정하지 않고 데이터에 따라 모델의 구조 및 모수의 개수 가 유연하게 바뀌면 비모수 방법론

 

확률분포를 가정하는법

데이터가 2개의 값(0, 1) → 베르누이

데이터가 n개의 이산적인 값 → 카테고리 분포

데이터가 [0, 1]사이에서 값을 가지는 경우 → 베타분포

데이터가 0 이상의 값을 가지는 경우 → 감마분포, 로그정규분포

데이터가 R전체에서 확률을 가진다. → 정규분포, 라플라스 분포.

 

이론적으로 가장 가능성이 높은 모수를 측정하는 방법은, 최대가능도 추정법이다.(그래서 최대가능도를 배운다?

)

 

9/23

심화과제를 공부했다.

어렵다. 수학에 대한 이해가 동반되지 않아서 어려운 것같다.

 

 

주간회고

정말 바쁜 한주였지만, 재미있었다.

다른 팀원에 비해서 내가 많이 부족함을 느꼈다. 열심히 해야 남들보다 더 성장 할 수 있을것이다!

부스트캠프에 지원하길 정말 잘한 것 같다.

주말에도 추가 공부를 해야할 것 같다. 정말 오랫만에 열심히 공부를 즐겁게 한다.

'BoostCampAITECH4th' 카테고리의 다른 글

두런두런 후기.  (4) 2023.01.15