* 이 글은 Andrew Ng 교수님의 Coursera 무료 온라인 강의인 'Machine Learning' 강의를 정리하였습니다.
1주차 - (4) 퀴즈 답!
2주차 - (1) Linear Regression with multiple variables
여러분께서 1주차의 Linear Regression with Univariable의 내용을 잘 이해하셨다면, 2주차는 훨씬 수월합니다.
1주차에서는 데이터에 feature값의 종류가 하나뿐인('집의 크기') Univariable Regression Problem에 대해 gradient descent를 적용하여 cost function의 값을 최소화하는 파라미터를 찾는 과정을 배웠습니다.
2주차에서는 데이터 feature값의 종류가 2개 이상인 경우에 알맞은 파라미터를 찾는 과정에 대해 소개하도록 하겠습니다.
1. Multiple Features
1주차와 동일하게 '집의 가격'을 예측하는 문제를 푼다고 가정해봅시다. 1주차에서는 '집의 크기'와 '집의 가격'과의 관계만을 가지고 식을 세우고 이에 맞는 파라미터를 찾는 과정을 가졌습니다.
하지만 '집의 가격'을 결정하는 요인은 비단 '집의 크기'만이 아닐 것입니다. '방의 개수', '몇 층인지','집이 지어지고 지난 햇수(집의 나이)' 등 또한 '집의 가격'을 결정하는 영향을 미치는 요인입니다.
따라서 2주차에서는 여러가지 feature(특징)들과 y와의 관계를 학습하고 최적의 파라미터를 찾는 과정을 배웁니다. Feature가 여러 개이기 때문에 다음과 같이 표현을 정의합니다.
n = feature들의 개수
x(i) = 전체 m개의 input data 중 i번째 input(features) data
xj(i) = 전체 m개의 input data 중i번째 input data의 j번째 feature

Feature가 여러 개가 되면서 당연히 hypothesis 즉 hΘ(x)도 바뀝니다. hΘ(x)에서 x는 하나의 값이 아닌 여러 개의 feature들의 값을 담고 있는 벡터입니다. 지금의 예시에서 feature는 4개이기 때문에, hΘ(x)는 다음과 같이 표현됩니다.
hΘ(x) = Θ0+Θ1* x1+Θ2*x2+Θ3*x3+Θ4*x4
이렇게 feature가 늘어감에 따라 파라미터도 늘어가기 때문에 feature도 계속 늘고 파라미터도 계속 늘어나면 계산이 복잡해지게 됩니다. 따라서 백터와 행렬을 이용해 식을 표현합니다.

x는 x0(bias를 위한 값, x0=1)과 n개의 feature값을 담고 있는 벡터이고, 파라미터 Θ는 Θ0부터 Θn까지를 담고 있는 벡터입니다. 이 때 hΘ(x)는 기존에 저희가 사용하던 식으로 표현하면 hΘ(x) = Θ0*x0+Θ1* x1+ ... + Θn* xn 으로 표현되는데, 이를 벡터의 곱으로 표현하게 되면 hΘ(x) = ΘT*x 로 간단히 표현됩니다. 표현도 표현이지만, 실제로 코드를 구현해서 실행시킬 때, 반복문을 돌려 hΘ(x)의 모든 항을 계산해서 더하는 과정보다 벡터의 연산으로 한 번에 계산할 수 있기 때문에 코드도 짧아지고 실행 효율도 높아집니다.
2. Gradient Descent for Multiple Features
그러면 이제 2개 이상의 feature들이 있는 경우 gradient descent을 해보겠습니다.
단일 변수에 대한 선형회귀를 배울 때, gradient descent는 cost function이 감소하는 방향으로 파라미터를 계속해서 업데이트 하는 과정이라는 것을 배웠는데요, 식 자체는 동일합니다.
다만 feature값이 많아지면 식이 복잡해지기 때문에, input data와 output data, 그리고 파라미터를 벡터화해서 식을 정리해보겠습니다.
앞서 hΘ(x)를 hΘ(x) = ΘT*x로 간단히 표현하였기에, hΘ(x)를 포함하고 있는 J(Θ)도 벡터를 이용해 간단히 만들 수 있을 것으로 보입니다.

gradient descent를 보면, feature가 하나일 때에는 파라미터가 Θ0, Θ1 두 개밖에 없었는데, feature가 여러 개가 되면 파라미터가 2개 이상으로 늘어나고, 모든 파라미터에 대해 동일하게 업데이트를 진행하면 됩니다. 여전히 중요한 것은 한 번 업데이트를 할 때 모든 파라미터를 동시에 업데이트를 해야합니다. 즉, 모든 파라미터를 업데이트 할 때까지는 어데이트 하기 전 파라미터들의 값을 사용해서 우변을 계산해야 합니다.
사실 multivariable gradient descent는 univariable gradient descent를 일반화한 것으로, univariable gradient descent가 multivariable gradient descent의 가장 단순한 경우라고 생각하면 될 것 같습니다.
다만 feature들이 많아질 때 벡터와 행렬을 이용하면 수식이나 코드를 훨씬 단순화할 수 있다는 것이 포인트입니다.

3. Gradient Descent in Practice I : Feature Scaling
Feature의 종류가 많아지면 나타나는 또 한 가지 문제가 있습니다. 바로 feature의 단위가 다를 수 있다는 것입니다.
예를 들어 '집의 크기'의 단위는 feet^2 또는 m^2이고, '방의 개수'는 몇 개로 표현됩니다.
데이터 값을 그대로 넣게 되면 '집의 크기'는 m^2을 단위로 썼을 때 80, 100, 200, 그리고 feet^2을 단위로 썼을 때 800, 1000, 2000과 같은 값이 나오는 반면, '방의 개수'는 많아봐야 10개 이하일 것입니다. 단위가 달라서 문제가 되는 이유는, 저희가 학습시키고자 하는 기계는 이들의 단위를 모르고 숫자만을 읽어서 계산하게 되는데, 이렇게 단위에 의해 값이 달라지는 차이 때문에 각 데이터의 비중을 잘못 파악하고 의도하지 않은 방향대로 파라미터가 업데이트되거나, 최적 값에 도달하는 데 오랜 시간이 걸릴 수 있기 때문입니다. 따라서 feature들이 output에 미치는 영향이 동등하다고 하면, feature들의 값의 범위가 유사해야 의도하는 방향으로 학습이 될 것입니다. 보통은 feature의 값을 모두 -1에서 1사이의 값으로 바꾸어 범위를 통일합니다.

그러면 단위가 각기 다른 feature 값들을 어떻게 -1과 1사이의 범위로 통일할 수 있을까요? 그 방법 중 하나가 바로 Mean Normalization인데요, 각 feature의 값의 분포를 표준 정규 분포에 맞는 값으로 바꾸어 표준화하는 방식입니다.
따라서 feature의 각 값에서 평균을 빼주고, 이 값을 (최댓값 - 최솟값)이나 표준편차로 나눈 값을 새로운 feature 값으로 사용하게 됩니다. 그렇게 하면 거의 모든 feature 값들이 -1에서 1 범위 안에 들어오므로, 단위로 인해 잘못된 학습이 일어나는 것을 막을 수 있습니다.

4. Gradient Descent in Practice II : Learning Rate
이 내용은 실제로 학습 모델을 구현하여 학습 시킬 때 아주 기본적이고도 유용한 내용입니다.
학습을 할 때, 저희가 학습 과정이 잘 돌아가고 있는지를 확인할 수 없다면, 학습이 제대로 되지 않고 있는데도 모른 채 시간을 버릴 것입니다. 하지만 학습 과정을 확인하고 잘 안될 때 이를 조정한다면 시간을 훨씬 단축하고 원하는 방향으로 학습을 할 수 있을 것입니다. 따라서 이 파트에서는 학습이 잘 되고 있는지 그 과정을 확인하고, learning rate을 조절하여 학습 과정을 개선하는 방법에 대해 배우려고 합니다.
학습이 잘 되고 있는지를 확인하기 위해서는 gradient descent가 제대로 되고 있는지, 즉 J(Θ)가 줄어드는 방향으로 파라미터를 잘 업데이트하고 있는지 확인해야 합니다. 이렇게 gradient descent 가 잘 작동하고 있는지를 확인하는 과정을 'debugging(디버깅)'한다고 합니다.
또 learning rate이 뭔지 한 번 상기를 하고 가겠습니다. learning rate은 처음 gradient descent를 소개 했을 때 같이 설명을 드렸던 친구인데요, \fraction{a/athetaj}\J(Θ) 값 앞에 붙어서 파라미터 업데이트 속도를 조절하는 데 영향을 주며 적당한 learning rate을 고르는 것이 중요하다고 말씀드렸습니다. 그래서 이번에는 적당한 learning rate을 찾아가는 방법에 대해서도 소개합니다.

먼저 gradient descent가 잘 작동하는지 확인하는 방법은, iteration에 따른 J(Θ) 의 값을 그래프로 그려보는 것입니다. Iteration은 반복을 의미하는데, 모든 파라미터를 한 번 업데이트 하는 것이 1 iteration이라고 생각하시면 됩니다. 즉, 모든 파라미터가 한 번 업데이트 될 때마다 cost function J(Θ)를 계산해서, 그 그래프를 그려보는 것입니다.

gradient descent가 정상적으로 작동한다면 J(Θ)를 감소 시키는 방향으로 계속 업데이트를 할 것이기 때문에, iteration이 증가할 때마다 J(Θ)는 무조건 감소해야 합니다. 그러다가 J(Θ)가 한 번의 iteration후에 감소하는 정도가 10^(-3)이하인 경우가 되면 우리는 이때를 수렴 했다, 즉 더 이상 업데이트 되지 않는다고 판단합니다. 이 경우에는 J(Θ) 가 global minmum이나 local minimum값에 도달했을 수도 있고(가장 이상적인 경우, 학습 성공), 최적 값에 아직 도달하지 않았지만 지금 가진 데이터로는 더 이상 업데이트가 되지 않는 상황일 수도 있습니다(이러한 상황은 다다음 파트에서 좀 더 설명합니다!). 어쨌거나 J(Θ)가 이렇게 더이상 감소하지 않는, 거의 일정한 구간에 도달하기 전까지 J(Θ)는 항상 감소해야합니다.
따라서 만약 J(Θ)값이 iteration을 반복함에 따라 증가하거나, 증가와 감소를 반복한다면, 이는 gradient descent가 제대로 작동하고 있지 않다는 의미입니다. 여기에서 한 가지 해결책은 무엇일까요?

여러 원인이 있을 수 있지만, 지난 번에 learning rate이 너무 크면 파라미터가 값이 한 번에 큰 차이로 변하게 되어 J(Θ)가 최소가 되는 Θ값을 지나칠 수 있기 때문에, 잘못하면 수렴이 되지 않거나 발산이 될 수도 있다는 설명을 드렸습니다. 따라서 한 가지 해결책은 이 learning rate (α)을 줄여볼 수 있습니다. 하지만 또 learning rate (α)이 너무 작으면 학습이 느려지기 때문에, learning rate (α) 을 0.001 정도의 적당히 작은 값으로 시작해서 J(Θ)가 감소하는 것이 확인되면, J(Θ)가 증가하거나 증가 감소를 반복하기 전까지 learning rate (α)의 크기를 적당히 키워나가보면 알맞은 값을 찾을 수 있을 것입니다.

요약
1) Number of iteration을 x축으로 하여 J(Θ)의 그래프를 그려보면 gradient descent가 제대로 작동하고 있는지 파악할 수 있다.
2) J(Θ)는 수렴해야하고, 수렴하기 전까지 매 iteration마다 감소해야 한다. 그렇지 않으면 gradient descent에 문제가 있다는 것이다.
3) J(Θ)가 매 iteration마다 감소하지 않을 경우 learning rate (α)을 줄여본다.
4) learning rate (α)이 너무 작으면 학습이 느리고, learning rate (α)이 너무 크면 J(Θ)가 수렴하지 않거나 발산해버리기 때문에 적당한 learning rate (α)을 찾자.
5. Features and Polynomial Regressoin
마당이 있는 '집의 가격'을 예측한다고 할 때, 여러가지 feature를 후보에 둘 수 있을 것입니다.
당연히 마당의 특징도 들어갈텐데, 저희가 가진 데이터에는 feature로 '마당의 가로 길이', '마당의 세로 길이' 이렇게 2개가 주어졌다고 합시다. 이를 이용해 선형 회귀 식을 만들면 다음과 같이 됩니다.
hΘ(x) = Θ0 + Θ1*x1(마당의 가로 길이) + Θ2*x2(마당의 세로 길이)
하지만, 주어진 feature를 꼭 있는 그대로 쓸 필요는 없습니다. 주어진 feature들을 조합해서 새로운 feature를 만들어 낼 수도 있습니다. 만약 여러분이 '마당의 넓이'를 feature로 사용하고 싶다면 '마당의 가로 길이'와 '마당의 세로 길이'를 곱한 값이 '마당의 넓이'이고, 이 feature 하나만을 가지고 회귀식을 작성할 수도 있습니다.
hΘ(x) = Θ0 + Θ1*x1(마당의 넓이)
어떻게 보면 '마당의 가로 길이'와 '마당의 세로 길이'를 따로 feature 사용하는 것보다 '마당의 넓이'와 '집의 가격'과의 관계가 더 의미 있을 수 있기 때문에, 제대로 학습이 되기 위해서는 학습하고자 하는 output 값의 특징에 맞게 feature를 선택하거나 조절하는 과정이 필요합니다.

알맞은 feature 를 정하는 과정과 밀접한 관련이 있는 것이 바로 Polynomial Regression(다항 회귀)입니다. 다항 회귀는 선형 회귀와 대비되는 회귀 함수로, 직선으로 표현되지 않는 회귀 함수입니다. 다항 회귀는 데이터의 경향성이 직선으로 표현되기 어려울 때, 즉 좀 더 복잡한 데이터 분포를 표현할 때 사용됩니다.
예를 들어, 아래 그림과 같이 '집의 크기'에 따른 '집의 가격' 데이터가 다음과 같은 경향을 가진다고 할 때, 이 데이터는 선형 회귀함수로 표현하게 되면 데이터의 경향성을 잘 나타내지 못하게 됩니다.
그렇다면 '집의 크기' 즉 input data x에 대한 2차함수는 어떨까요? x에 대한 2차함수를 회귀 함수로 쓰게 되면 hΘ(x) 식은 다음과 같게 됩니다.
hΘ(x) = Θ0 + Θ1*x + Θ2*x^2
하지만 2차 함수의 그래프 개형을 생각해보면 2차 함수는 이 데이터를 표현하는 회귀 함수로 적합하지 않습니다.
2차 함수는 오목하거나 볼록한 그래프 개형으로, 반드시 어느 구간에서는 x 값이 증가함에 따라 감소하는 구간이 있습니다. 하지만 상식적으로 생각했을 때 '집의 크기'가 커지는데 '집의 가격'이 내려가는 것은 말이 안됩니다. 그러면 이 데이터를 잘 표현하는 함수로 어떤 함수를 선택해야 할까요?
한 가지 후보는 3차 함수가 있습니다. 우선 3차 함수는 최고차항 계수가 양수라면 계속해서 증가하는(정확히 말하자면 적어도 감소하지는 않는) 개형을 가지기 때문에 어느 정도 타당한 결정이라고 할 수 있습니다. 이 경우 hΘ(x) 의 식은 다음과 같게 됩니다.
hΘ(x) = Θ0 + Θ1*x + Θ2*x^2 + Θ3 *x^3

추가로 선형 회귀와 비교해서 다항회귀에서 특히 더더더 중요한 것이 바로 feature scaling입니다. feature scaling은 오늘 글의 3번에서 설명한 내용으로, feature를 여러 개 쓰게 되면서 feature들의 단위가 다름으로 인해 값의 범위 차이가 나는 문제를 해결하기 위해 진행하는 작업이라고 하였습니다.
다항 회귀에서도 feature를 여러 개 쓴다고 생각하시면 됩니다. 예시에서도 저희에게 주어진 feature는 '집의 크기(x)' 하나 밖에 없지만 다항 회귀를 사용하면서 (집의 크기)^2 이나 (집의 크기)^3 도 새로운 feature로 추가되는 것입니다. 당연히 '집의 크기'에 제곱, 세제곱 등의 작업을 해줬기 때문에 단위가 달라지고 값의 범위가 차이 나게 되므로 학습을 진행하기 전에 꼭!! feature scaling을 통해 값의 범위를 통일해주어야 합니다.
다항 회귀 설명의 마지막으로, 예시 데이터의 경향에 맞는 다항 회귀 식을 하나 더 소개하고 마치겠습니다.
다항 회귀에는 제곱근항도 추가될 수 있는데, 제곱근 식을 생각하면 계속해서 증가하면서 위로 볼록인 개형을 가지고 있습니다. 따라서 지금 저희가 보고 있는 데이터의 경향과 가장 유사한 개형을 가지고 있다고 생각할 수 있습니다. 제곱근 항을 새로운 feature로 추가할 경우 hΘ(x) 의 식은 다음과 같게 됩니다.
hΘ(x) = Θ0 + Θ1*x + Θ2*x^(1/2)

6. Normal Equation
지금까지 저희는 Supervised Learning 중에서, 회귀 문제(Regression Problem)에 대해 공부했습니다. 이제 회귀 문제의 마지막 내용인데요, 바로 Normal Equation입니다.
Normal Equation은 특정 회귀 문제에서 한 번의 실행으로 파라미터 Θ의 최적의 값을 구하는 데 효과적인 방법입니다.
저희가 지금까지 최적의 파라미터 Θ를 구하는 데 사용한 방식은 Gradient Descent입니다. Gradient Descent는 J(Θ)를 최소화 하는 방향으로 수 차례 Θ를 업데이트하여 점차 optimal point로 수렴하는 방식이었습니다.
하지만 이와 달리 Normal Equation은 Θ를 분석적으로 구합니다. 여기서 분석적으로 구한다는 말은 수식(관계식)을 풀어서 정확한 값을 찾아내는 것을 말합니다. 그래서 여러번 알고리즘을 돌릴 필요 없이 한 번의 실행으로 최적의 값을 구할 수 있습니다.

그러면 Normal Equation이 어떻게 최적의 Θ를 구하는지 알아보겠습니다.
우선 이해를 돕기 위해 최대한 단순한 상황을 가정하겠습니다. 먼저 Θ를 벡터가 아닌 그냥 숫자로 생각하겠습니다.
그리고 cost function J(Θ)를 Θ에 대한 2차식 J(Θ) = a * Θ^2 + b* Θ +c으 로 표현하겠습니다. 그렇게 되면 J(Θ) 함수는 2차 함수이기 때문에 아래 그림과 같은 개형을 따릅니다. 여기서 2차 함수를 최소화하는 input 값 Θ를 찾는 방법이 무엇일까요? 미적분을 배웠다면, 2차 함수를 미분해서 미분값이 0이 되는 지점을 찾으면 그 지점의 함숫값이 극솟값이라는 것을 배웠을 것입니다. 따라서 저희는 2차함수를 미분해서 이 식이 0이 되는 파라미터 Θ를 구하면 이 값이 최적의 값일 것입니다. 이렇게 Θ를 구하는 과정을 분석적으로 Θ 값을 구한다고 이해하시면 됩니다.
그렇다면 Θ가 벡터일 때에는 어떻게 해야할까요? 저희가 지금까지 회귀 함수에서 사용한 cost function식을 그대로 사용하면, J(Θ) = 1/2m~~~~ 이 됩니다. 사실 이 때에도 같은 방식으로 하면 됩니다. feature가 n개 일 때 모든 Θ, 즉 Θ0,Θ1,Θ2, ..., Θn에 대해 cost function J(Θ)를 미분하고, 그 식이 0이 되는 값 중 함숫값이 극솟값이 되는 파라미터 값을 구하면 최적의 파라미터 값들이 구해질 수 있습니다.

좀 더 구체적으로 normal equation을 진행해보겠습니다.
m개의 sample들이 있고, feature가 n개 있다고 할 때, x는 dimension이 m x (n+1)인 matrix가 되고, y는 m x 1인 벡터, Θ는 (n+1) x 1인 벡터입니다.(n이 아니라 n+1인 이유는 bias(Θ0) 때문입니다..!)
이 경우 cost function J(Θ)의 미분식을 벡터와 행렬 식으로 표현하면 J(Θ)는 aJ(Θ)/aΘ = (1/m) * XT*(X * Θ - y) 입니다.
따라서 미분 값 aJ(Θ)/aΘ 이 0이 되기 위해서는 X * Θ = y이어야 하고, 이를 만족하는 벡터 Θ를 구하면 Θ = (XTX)^(-1)XTy 가 됩니다. 이는 선형대수에서 배우는 행렬 계산을 통해 얻은 값이며, 좀 더 자세히 식을 쓰자면
X*Θ =y
XTX*Θ =XTy
(XTX)^(-1)(XTX)*Θ =(XTX)^(-1)XTy
(XTX)^(-1)(XTX) = I 이므로 Θ =(XTX)^(-1)XTy
입니다. 더욱 자세한 계산 과정 및 원리는 선형 대수의 범위이므로 넘어가도록 하겠습니다.
다만 이 계산은 (XTX)^(-1)가 필요하기 때문에 (XTX)가 invertible한 행렬일 때만 계산이 가능합니다. (XTX)가 invertible하지 않으면 inverse matrix가 존재하지 않으므로 그 자체로는 normal equation을 이용할 수 없습니다.
그렇다면 (XTX)가 invertible하지 않을 때는 언제일까요?
1) 첫 번째는 feature들 중에 서로 linearly dependent한 것이 존재할 때입니다.
어떤 feature의 벡터(x 중 하나의 열벡터)가 다른 feature의 상수 배로 표현될 수 있다면, 또는 다른 feature들의 상수배의 합으로 표현될 수 있다면 행렬 X는 linearly dependent하다고 합니다.
예를 들어 특징 중에 '집의 크기를 feet^2으로 나타낸 것'과 '집의 크기를 m^2으로 나타낸 것'이 있다면 이 둘은 자신에게 상수를 곱해서 서로를 표현할 수 있습니다. 이 경우 행렬 X는 linearly dependent하고, (XTX)가 invertible하지 않으므로 이를 해결하는 방법은 두 가지 특징 중에서 하나만을 남기는 것입니다.
2) 두 번째 경우는 너무 많은 feature들이 있을 경우입니다.
sample이 m개이고, feature의 수가 n개일 때, input 행렬 X의 dimension은 m x n입니다.
선형 대수에서는 행렬 X에 대해 XTX가 invertible하기 위해서는 N(XTX)=N(X)=0이어야 하는데, 이 식이 성립하기 위한 조건은 m>=n입니다. 이 과정 또한 선형 대수의 부분이므로 더 자세한 이해를 하고자 하는 분들은 선형 대수학의 행렬의 linearly independency, invertible matrix, non-invertible matrix에 대한 개념을 찾아보시는 게 좋을 것 같습니다.
저희가 다루는 머신러닝에서 중요한 것은 이 문제가 어떤 것 때문에 생기고 어떻게 해결할 것인지인데요, feature가 너무 많은 것이 문제이기 때문에 몇 개의 feature를 지우거나 regularization을 사용하는 방법이 있습니다.
여기서 regularization은 아직 설명을 드리지 않았고 다음에 설명드릴 내용이며, 간단히 말하자면 regularization은 feature가 너무 많거나 지엽적인 데이터를 학습하여 일반화가 잘 되지 않는 경우, 이러한 문제를 해결하는 방법입니다.
즉 두 가지 상황 모두 비슷한 상황인데, 결국 normal equation을 사용하고자하는데 XTX가 invertible하지 않다면,
불필요한 feature를 줄이는 방향으로 문제를 해결하면 됩니다.
마지막으로 Gradient Descent와 Normal Equation을 비교하며 회귀 문제를 마무리 하겠습니다.
Gradient Descent 는 learning rate α를 선정해야 합니다. 또한 여러 반복을 통해 파라미터를 계속 업데이트하는 과정이 필요합니다. 하지만 Gradient Descent는 XTX의 invertibility 여부에 대해 고려하지 않아도 되고, n의 크기가 매우 클 때 잘 작동합니다.
반면에 Normal Equation은 learning rate을 정하지 않아도 되고, 반복 없이 한 번의 계산을 통해 최적의 파라미터 값을 결정할 수 있습니다. 다만 n이 커지게 되면 computing rate이 매우 느려지게 됩니다. Normal Equation을 통해 계산하기 위해서는 (XTX)^(-1)을 계산해야 하는데, 이 계산 과정은 알고리즘 복잡도가 O(n^3)입니다. 따라서 n의 값이 매우 커지면 Gradient Descent에 비해 계산이 매우 느려질 수 있습니다.

수고하셨습니다.
힘드셨겠지만 회귀 문제를 잘 이해하고 있다면 다음에 배울 것들이 훨씬 쉽게 느껴질 것입니다.
'Study with me' 카테고리의 다른 글
| [캐글 스터디] Titanic Dataset EDA 발표 자료 (0) | 2022.02.16 |
|---|---|
| [fastcampus] 딥러닝 유치원 & 딥러닝 초급반 내용 정리 (0) | 2021.10.01 |
| [Machine Learning #4] Linear Algebra Review(Optional) (0) | 2021.07.14 |
| [Machine Learning #3] Linear Regression with univariable(단일 변수 선형 회귀) (0) | 2021.07.14 |
| [Machine Learning #2] Supervised Learning & Unsupervised Learning (0) | 2021.07.14 |