4. 리스트
• 대괄호로 초기화
a = [0, 1]
• 리스트에 원소 추가
a.append(2)
• 리스트의 길이
len(a)
• 리스트 슬라이스
a[0:2]
딕셔너리
• 순서가 없는 인덱스를 가짐(문자열
가능)
• 중괄호로 초기화
b = {‘sun’: 0}
• 키를 지정해 원소 추가
b[‘mon’] = 1
• 딕셔너리 참조는 리스트와 동일
b[’mon’]
Python-data type
4
5. if i == 10:
print(10)
elif i < 10:
print(0)
else:
print(100)
for a in lst:
print(a)
for k in dct:
print(dct[k])
for k, v in dct.items():
print(k, v)
Python-if, for
5
6. TensorFlow Graph 와 Session
• 텐서플로우의 연산자를 사용하여 계산 구조를 정의합니다.
a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a, b)
• 세션 객체를 만들어 만들어진 계산 그래프를 실행합니다.
x
<tf.Tensor 'Add:0' shape=() dtype=int32>
tf.Session().run(x)
5
6
8. tf.Variable()
• 상수가 아니라 계산 그래프에서 변하는 값을 담는 도구입니다.
• 변수는 초깃값이 주어져야 하고 사용하기 전에 초기화 되어야 합니다.
a = tf.Variable(tf.constant(2))
a
<tensorflow.python.ops.variables.Variable at ...>
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
sess.run(a)
2
8
13. 회귀 분석
• 숫자 결과를 예측합니다.
• 출력 값은 연속적인 속성을 가집니다.
• Regression Analysis
ex)
• 환자의 당뇨병 데이터를 이용하여 1년뒤 악화 정도를 측정
• 과거 주식시장의 데이터를 이용하여 내일 주가를 예측
• 지역, 방 개수, 평수 등의 데이터를 이용하여 주택 가격 예측
13
16. 일반화
• n 개의 특성이 있을 때 선형 회귀의 일반 방정식
𝑦; = 𝛽D 𝑥D + 𝛽I 𝑥I + ⋯ + 𝛽N 𝑥N + 𝛽O
• 𝑥O = 1 인 항을 추가
𝑦;D = 𝛽D 𝑥D + 𝛽I 𝑥I + ⋯ + 𝛽N 𝑥N + 𝛽O 𝑥O
⋮
𝑦;Q = 𝛽D 𝑥QD + 𝛽I 𝑥QI + ⋯ + 𝛽N 𝑥QN + 𝛽O 𝑥QO
𝑦; =
𝑥DD ⋯ 𝑥DO
⋮ ⋱ ⋮
𝑥QD ⋯ 𝑥QO
𝛽D
⋮
𝛽O
, 𝑚 = 데이터개수 → 𝒚V = 𝑿𝜷Y
16
17. 솔루션
• 최소제곱법(Ordinary Least Squares)를 사용하여 평균제곱오차(Mean
Squared Error)를 최소화하는 파라미터를 찾음.
• 평균제곱오차
1
𝑚
Z 𝑦 − 𝑦; I , 𝑦; = 𝑋𝛽
Q
]D
• 최소제곱법
𝛽^ = 𝑋_ 𝑋 `D 𝑋_ 𝑦
오차의 제곱
모든 훈련 데이터의
오차 제곱을 더함
훈련 데이터
갯수로 나눔
• 데이터가 아주 많은 경우 문제
• 역행렬을 구할 수 없는 경우 문제
17
18. 경사하강법(Gradient Descent)
• 오차함수의 낮은 지점을 찾아가는 최적화 방법
• 낮은 쪽의 방향을 찾기 위해 오차함수를 현재 위치에서 미분함
𝐽 =
1
2𝑚
Z 𝑦 − 𝑦; I , ∇𝐽 =
1
𝑚
(𝑦 − 𝑦;)
Q
]D
18
24. 적당한 속도
• 파라미터 w, b 의 업데이트가 클 경우 최저점(local minima)을 지나칠 수
있습니다.
• 학습 속도(learning rate)로 그래디언트 업데이트를 조절합니다.
𝑤 = 𝑤 + 𝜶
1
𝑚
(𝑦 − 𝑦;)𝑥 𝑏 = 𝑏 + 𝜶
1
𝑚
(𝑦 − 𝑦;)
24
25. 하이퍼파라미터
• 하이퍼파라미터(Hyperparameter)는 알고리즘이 데이터로부터 학습할 수
없는 파라미터입니다.
• 모델 파라미터는 알고리즘이 데이터로 부터 학습하는 파라미터입니다. 예
를 들면, w, b 입니다.
• 학습속도(learning rate)은 하이퍼파라미터입니다.
• 이 외외에도 신경망의 레이어수나 유닛수, k-NN 알고리즘의 k 값 등 알고
리즘마다 여러가지의 모델 파라미터를 가지고 있습니다.
• 최적의 하이퍼파라미터를 찾기위해서 반복적인 학습, 검증 과정을 거쳐야
합니다.
25
32. 선형 회귀 정리
• 선형 회귀 분석은 선형 함수를 사용하여 연속적인 결과를 예측합니다.
• 선형 회귀의 대표적인 비용함수는 MSE(mean square error) 함수입니다.
• 최소제곱법 대신 경사하강법을 사용하여 점진적으로 최적의 파라미터를
찾았습니다.
• 특성이 많을 경우 높은 성능을 낼 수 있습니다. 이럴 경우 오히려 성능을
제한해야 할 때가 많습니다.
• 비교적 대량의 데이터셋에서도 잘 작동합니다.
• 데이터 분석을 할 때 처음 시도할 모델로서 좋습니다.
32
34. 분류(Classification)
• 클래스 레이블을 예측합니다.
• 출력 결과는 이산적입니다.
• Binary Classification(이진 분류), Multiclass Classification(다중 분류)
ex)
• 스팸 분류
• 암 진단
• 붓꽃의 품종 판별
• 손글씨 숫자 분류
34
35. 로지스틱 회귀 (이진 분류)
• 이진 분류는 샘플을 True(1), 또는 False(0)으로 분류합니다.
• 회귀의 선형 함수를 그대로 이용합니다.
• 선형 함수의 결과를 0~1 사이의 확률로 변환합니다.
• 0.5 이상일 경우 True, 아니면 False 로 분류합니다.
𝑦; = 𝑤 × 𝑥 + 𝑏
35
36. 로지스틱 함수
• 로지스틱(logistic) 또는 시그모이드(sigmoid) 함수는 -∞~+∞입력에 대해
0~1 사이의 값을 출력합니다.
𝑦; =
1
1 + 𝑒`(g × h i j)
=
1
1 + 𝑒`k
𝑧 = 𝑤 × 𝑥 + 𝑏
36
41. 로지스틱 정리
• 분류에 사용하는 모델입니다.
• 선형 함수 결과를 시그모이드 함수를 사용하여 0~1 사이로 압축합니다.
• 이진 분류는 0.5 보다 높을 때는 True 로하고 그 이하는 False 로 하여 모델
을 학습시킵니다.
• 시그모이드 함수를 사용한 크로스 엔트로피 비용함수의 미분 결과는 선형
함수를 사용한 MSE 비용함수의 미분과 동일합니다.
• 로지스틱 회귀는 다중 분류도 지원합니다.
41
43. 위스콘신 유방암 데이터
사이킷런의 데이터셋 이용
넘파이
위스콘신 유방암 데이터 로드
샘플 데이터를 가지고 있는
scikit-learn의 Bunch 오브젝트
43
44. 넘파이(NumPy)
• 데이터 과학을 위한 다차원 배열 패키지로 많은 배열 연산을 제공합니다.
• 넘파이는 파이썬 리스트와는 달리 다른 종류의 데이터 타입을 담을 수 없
습니다.
• scikit-learn, tensorflow 등 많은 머신 러닝 패키지들이 입력 값으로 넘파이
배열을 받을 수 있습니다.
44
49. 학습
• 여기서는 예를 간단히 하기위해 학습 데이터로 모델의 성능을
평가했습니다만 실전에서는 이렇게 해서는 안됩니다
prediction 의 모든 원
소에 적용, 0.5보다 크
면 True, 작으면 False[569, 1] 크기
5000번 학습하면서
손실함수 값 기록
92% 정확도
49
50. 정리
• 선형 모델을 이용해 회귀와 분류 학습을 했습니다.
• 분류는 로지스틱 함수를 이용해 확률로 변환하여 레이블을 예측합니다.
• 회귀에서는 임의의 샘플 데이터 1000개, 특성 1개를 사용했고 분류에서는
샘플 데이터 569개, 특성 30개를 사용했습니다.
• 회귀에서 학습한 모델 파라미터는 가중치 w 1개, 편향 b 1개 입니다.
• 분류에서 학습한 모델 파라미터는 가중치 w 30개, 편향 b 1개 입니다.
• 선형 함수를 표현하는 계산 그래프를 만들고 텐서플로우에서 제공하는 손
실함수를 사용했습니다.
• 경사하강법 최적화 알고리즘을 적용하여 최적값을 찾았습니다.
50