반응형

경사하강법 정의


경사 하강법(傾斜下降法, Gradient descent)은 1차 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다
위키피디아

이 개념을 숙지하기 위해서는 비용함수라는 개념을 먼저 알아두면 좋다.

비용함수

$$y = w_1*x_1 + w_0$$ 라는 회귀식이 있을 경우, 이 함수의 *_비용함수 RSS**는 다음과 같다. (약간의 회귀분석에 대한 개념이 필요)

$$RSS(w_0, w_1) = \frac{1}{N}\sum_{i=1}^{N}(y_i-(w_0+w_1*x_i))^2$$

여기서 N은 학습데이터의 총 건수이며, i는 각 데이터포인트이다. 회귀에서는 이 RSS는 비용이라고 하며 w변수로 구성되는 RSS를 비용함수, 또는 손실함수(loss function)라고 한다. 머신러닝 회귀 알고리즘에서는 데이터를 계속 학습하면서 이 비용함수가 반환되는 값을 지속해서 감소시키고, 최종적으로는 더이상 감소하지 않는 최소의 오류값을 구하고자 한다.
오류값을 지속해서 작아지게 하는 방향으로 W값을 계속 업데이트해 나가며, 오류값이 더 이상 작아지지 않으면 그 오류값을 최소 비용으로 판단하고 그 W를 최적의 파라미터로 판단한다.

머신러닝에서 쓰이는 이유

그럼 비용함수가 최소가 되는 W파라미터를 어떻게 구할 수 있을까? 하는 대답에 경사하강법이 사용되는 것이다. 모든 변수(x)를 미분하여 최소값을 가지는 계수를 찾아내는 방법이 있을 수 있으나 아래의 이유로 경사하강법이 쓰인다.

  • 실제 분석에서는 함수의 형태가 복잡하므로 미분계수와 그 근을 계산하기 어려움
  • 컴퓨터로는 미분계산과정의 구현보다 경사하강법 구현이 더 쉬움
  • 데이터 양이 많을 수록 경사하강법이 계산량 측면에서 효율적임

경사하강법의 수식, 유도 및 원리

경사하강법을 유도하는 원리는 아래 사이트가 잘 정리되어 있어 참고했다.
https://angeloyeo.github.io/2020/08/16/gradient_descent.html

파이썬 코드 구현

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

np.random.seed(0)

# y = 4X + 6을 근사, 임의의 값은 노이즈를 위해 부여
X = 2 * np.random.rand(100,1) # 0~1 사이의 random 소수 
y = 6 + 4*X+ np.random.randn(100,1)
plt.scatter(X,y)

png

def get_cost(y, y_pred):
    N = len(y)
    cost = np.sum(np.square(y - y_pred))/N
    return cost
# w1과 w0를 업데이트할 w1_update, w0_update를 반환
def get_weight_updates(w1, w0, X, y, learning_rate=0.01):
    N = len(y)

    w1_update = np.zeros_like(w1)
    w0_update = np.zeros_like(w0)

    y_pred = np.dot(X, w1.T) + w0
    diff = y - y_pred

    w0_factors = np.ones((N,1))

    # w1과 w0를 업데이트할 w1_update와 w0_update 계산
    w1_update = -(2/N)*learning_rate*(np.dot(X.T, diff))
    w0_update = -(2/N)*learning_rate*(np.dot(w0_factors.T, diff))

    return w1_update, w0_update
def gradient_descent_stpes(X, y, iters=10000):
    # 초기값 0으로 설정
    w0 = np.zeros((1,1))
    w1 = np.zeros((1,1))

    # 인자로 주어진 iters 만큼 반복적으로 get_weight_updates() 호출해 w1, w0 업데이트
    for ind in range(iters):
        w1_update, w0_update = get_weight_updates(w1, w0, X, y, learning_rate=0.01)
        w1 = w1 - w1_update
        w0 = w0 - w0_update

    return w1, w0
def get_cost(y, y_pred):
    N = len(y)
    cost = np.sum(np.square(y - y_pred))/N
    return cost

w1, w0 = gradient_descent_stpes(X,y, iters=1000)
print(f"w1 : {w1[0,0]:.3f}, w0 : {w0[0,0]:.3f}")
y_pred = w1[0, 0]*X + w0
print("GD Total Cost", round(get_cost(y, y_pred),4))
w1 : 4.022, w0 : 6.162
GD Total Cost 0.9935
plt.scatter(X,y)
plt.plot(X, y_pred)

png

확률적 경사하강법


확률적 경사 하강법(Stochastic Gradient Descent)는 경사 하강법과 다르게 한번 학습할 때 모든 데이터에 대해 가중치를 조절하는 것이 아니라, 램덤하게 추출한 일부 데이터에 대해 가중치를 조절함. 결과적으로 속도는 개선되었지만 최적 해의 정확도는 낮다.

img1

출처: 흰고래의꿈

파이썬 코드 구현

def stochastic_gradient_descent_stpes(X, y, batch_size=10, iters=1000):
    w0 = np.zeros((1,1))
    w1 = np.zeros((1,1))
    prev_cost = 100000
    iter_index = 0

    for ind in range(iters):
        np.random.seed(ind)
        # 전체 X,y 데이터에서 랜덤하게 batch_size만큼 데이터 추출하여 sample_X, sample_y로 저장
        stochastic_random_index = np.random.permutation(X.shape[0])
        sample_X = X[stochastic_random_index[0:batch_size]]
        sample_y = y[stochastic_random_index[0:batch_size]]
        # 랜덤하게 batch_size만큼 추출된 데이터 기반으로 w1_update, w0_update 계산 후 업데이트
        w1_update, w0_update = get_weight_updates(w1, w0, sample_X, sample_y, learning_rate = 0.01)
        w1 = w1 - w1_update
        w0 = w0 - w0_update

    return w1, w0
w1, w0 = stochastic_gradient_descent_stpes(X, y, iters= 1000)
print("w1 :", round(w1[0,0], 3), "w0:", round(w0[0,0], 3))
y_pred = w1[0, 0]*X + w0
print("Stochastic Gradient Descent Total cost : ",get_cost(y, y_pred))
w1 : 4.028 w0: 6.156
Stochastic Gradient Descent Total cost :  0.9937111256675345

참고 사이트

반응형
반응형

고유값과 고유벡터

고유값과 고유벡터는 앞서 활용한 공분산행렬, 그리고 앞에 설명할 주성분 분석과 뗄 수 없는 관계이다. 따라서 PCA의 메커니즘을 제대로 이해하기 위해서는 고유값과 고유벡터가 의마하는 바를 제대로 이해하는 게 좋다.

고유값과 고유벡터 설명


$$X=\begin{bmatrix} 1 \\ 1 \end{bmatrix}$$ 이라는 행렬이 있다고 가정해보자. 이 행렬에 만약 $$A=\begin{bmatrix} 2&1 \\ 1&2 \end{bmatrix}$$를 선형변환하면 이렇게 계산할 수 있다.

  • $$AX= \begin{bmatrix} 2&1 \\ 1&2 \end{bmatrix}\begin{bmatrix} 1 \\ 1 \end{bmatrix}=\begin{bmatrix} 3 \\ 3 \end{bmatrix}$$
    즉 어떤 벡터에 A를 곱하니 벡터의 방향은 그대로이고 길이만 변하였다고 표현할 수 있다. 다시 말하면 아래 좌표평면에 있는 (1,1) 벡터가 (3,3)가지 방향의 변환 없이 그대로 이동한 것이다.

img

여기서 $$AX = \lambda X$$ 가 되는 $$\lambda$$ 값이 바로 고유값(eigen value)이다. 조금 더 정리를 해보자

  • $$AX - \lambda IX = (A - \lambda I)X = 0$$
  • $$det(A - \lambda I) = 0$$ (det는 determinant이며, $$ad-bc$$의 형태로 행렬값을 계산하는 수식임)
  • $$det(A - \lambda I) = det\begin{bmatrix} 2-\lambda&1 \\ 1&2-\lambda \end{bmatrix} = 0$$
  • $$(2-\lambda)^2 -1 = (\lambda-1)(\lambda-3) = 0 $$
  • $$\lambda =2$$ or $$\lambda =3$$
  • 즉 고유값은 2 또는 3이다

그럼 여기서 고유벡터를 구하면 아래와 같이 볼 수 있다

  • 고유값이 3인 경우, $$\begin{bmatrix} 2&1 \\ 1&2 \end{bmatrix}\begin{bmatrix} X_1 \\ X_2 \end{bmatrix} = 3\begin{bmatrix} X_1 \ X_2 \end{bmatrix}$$
    • $$2X_1 + X_2 = 3X_1$$
    • $$X_1 + 2X_2 = 3X_2$$
    • $$X_1 = X_2$$
    • 가장 쉬운 형태의 고유행렬로 $$\begin{bmatrix} X_1 \\ X_2 \end{bmatrix} = \begin{bmatrix} 1 \\ 1 \end{bmatrix} $$로 볼 수 있다.
  • 고유값이 1인 경우도 동일하게 구할 수 있다

고유값과 고유벡터의 의미


$$A$$ 행렬을 공분산 행렬(covariance matrix)이라고 생각해보자.

  • $$\begin{bmatrix} 2&1 \\ 1&2 \end{bmatrix}$$ 행렬의 고유값은 1과 3이다
  • 고유값의 합은 4로, 두 분산의 합(2+2)과 같다
  • 고유값의 곱은 $$det(A) = (2_2 - 1_1)$$과 동일
  • 분산정보는 최대한 해치지 않으면서 차원을 축소하기 위해 고유값과 고유벡터를 찾아낸 것
  • 고유벡터는 행렬 A를 곱하더라도 방향이 변하지 않고 그 크기만 변하는 벡터를 의미함

주성분 분석(PCA)

주성분 분석의 목적


주성분 분석의 목적 및 핵심은 아래와 같다.

  • 고차원의 데이터를 저차원으로 줄이는 것
  • 공통된 변수들을 줄여서 주성분을 찾는 것
    • 사용된 변수의 개수 > 주성분의 개수
  • 하지만 전체 데이터의 분산에 영향을 주어서는 안됨

주성분 뽑아낼 때 원칙


  • 분산이 가장 커지는 축을 첫 번째 주성분으로 두고, 그 다음 분산이 두번째로 커지는 축을 두 번째 주성분으로 두는 식으로 주성분은 추출

  • 각 주성분은 서로간 90도 직교함

    • 공분산 행렬의 고유벡터 개념임
  • 위에서 고유값 3일 때 계산되는 첫 번째 고유벡터가 바로 첫 번째 주성분(PC1)이 된다. 즉, $$ \begin{bmatrix} 1 \ 1 \end{bmatrix} $$ 고유벡터가 첫 번째 주성분 축이 된다는 의미임

  • 원본 데이터가 있을 경우 먼저 표준화가 진행된다

  • 표준화가 되었다고 가정하고, $$ \begin{bmatrix} 70&80 \\ 50&40 \\ 70&90 \end{bmatrix} \begin{bmatrix} 1 \\ 1 \end{bmatrix} $$ 이 계산 되어 최종 $$\begin{bmatrix} 150 \\ 90 \\ 160 \end{bmatrix} $$이 되어 새로운 축으로 반영되는 것이다. 이 축은 국어와 영어점수를 설명하는 '언어능력점수' 정도로 해석해 볼 수 있다.

  • 2차원 좌표평면에서 설명해야 이해가 빠른데, 해당 설명은 참고유튜브를 참조하자

  • 고유값이 1일 때 나왔던 주성분 PC2(고유벡터)는 분산의 설명도에 따라 사용할 수도, 안 할 수도 있다

  • PC1과 PC2의 상관관계는 0이다(고유값의 계산관계 상 0이 될 수 밖에 없다.)

주성분 분석을 사용할 때


  • 주성분 분석은 언제나 가능한가?
    • 주성분 분석은 데이터의 이면에 보이지 않는 원인이 있음을 전제
    • 즉 국어점수와 영어점수를 설명하는 '언어능력'이 있음을 생각하는 것
  • 주성분 분석에 적합한 데이터란 무엇인가?
    • 구형성 검증(Bartlett's test of sphericity)
    • "상관관계가 0이라면 주성분이 존재할 수 있는가?"를 생각하는 것
    • 즉 상관관계가 업는 형태라면 주성분 분석을 할 수 없음

PCA 실습


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns # seaborn
import warnings
warnings.filterwarnings("ignore") # 경고메세지 무시

df = pd.read_excel("./data/pca_credit_card/card.xls", header=1).iloc[:,1:]
print(df.shape)
df.head(3)
(30000, 24)
LIMIT_BAL SEX EDUCATION MARRIAGE AGE PAY_0 PAY_2 PAY_3 PAY_4 PAY_5 ... BILL_AMT4 BILL_AMT5 BILL_AMT6 PAY_AMT1 PAY_AMT2 PAY_AMT3 PAY_AMT4 PAY_AMT5 PAY_AMT6 default payment next month
0 20000 2 2 1 24 2 2 -1 -1 -2 ... 0 0 0 0 689 0 0 0 0 1
1 120000 2 2 2 26 -1 2 0 0 0 ... 3272 3455 3261 0 1000 1000 1000 0 2000 1
2 90000 2 2 2 34 0 0 0 0 0 ... 14331 14948 15549 1518 1500 1000 1000 1000 5000 0

3 rows × 24 columns

default payment next month가 Target 이며 1이면 "다음달 연체", 0이면 "정상납"임

df.rename(columns={"PAY_0":"PAY_1", "default payment next month":"default"}, inplace=True)
y_target = df["default"]
X_features = df.drop("default", axis=1)
corr = X_features.corr()
plt.figure(figsize=(14,14))
sns.heatmap(corr, annot=True, fmt='.1g')

img

  • PAY_1 ~ 6까지의 상관도와 BILL_AMT1 ~ 6까지의 상관도가 각각 높음
  • PCA로 변환을 시행
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# BILL
cols_bill = ["BILL_AMT" + str(i) for i in range(1,7)]
print("대상 속성명 :", cols_bill)

# PCA 객체 생성 후 변환
scaler = StandardScaler()
df_cols_scaled = scaler.fit_transform(X_features[cols_bill])
pca = PCA(n_components=2)
pca.fit(df_cols_scaled)
print("PCA Component 별 변동성 :", pca.explained_variance_ratio_)
대상 속성명 : ['BILL_AMT1', 'BILL_AMT2', 'BILL_AMT3', 'BILL_AMT4', 'BILL_AMT5', 'BILL_AMT6']
PCA Component 별 변동성 : [0.90555253 0.0509867 ]
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

rcf = RandomForestClassifier(n_estimators=300, random_state=156)
scores = cross_val_score(rcf, X_features, y_target, scoring="accuracy", cv=3)

print("개별 정확도 :", scores)
print("평균정확도:", np.round(np.mean(scores),3))
개별 정확도 : [0.8083 0.8196 0.8232]
평균정확도: 0.817
# 원본 데이터 세트에 먼저 StandardScaler
scaler = StandardScaler()
df_scaled = scaler.fit_transform(X_features)

# 6개의 컴포넌트를 가진 PCA 변환 수행 cross_val_score()로 분류 예측 수행
pca = PCA(n_components=6)
df_pca = pca.fit_transform(df_scaled)
scores_pca = cross_val_score(rcf, df_pca, y_target, scoring="accuracy", cv=3)

print("개별 정확도 :", scores_pca)
print("평균정확도:", np.round(np.mean(scores_pca),3))
개별 정확도 : [0.7905 0.7976 0.8021]
평균정확도: 0.797
# 6개의 변수만으로도 성능의 차이가 크게 없음
pca.explained_variance_ratio_
array([0.28448215, 0.17818817, 0.06743307, 0.06401153, 0.04457547,
       0.04161736])
  • 결론적으로 PCA를 사용할 때는 변수가 많고, X변수 간의 상관관계가 있다 싶을 때 사용한다
  • 그리고 원본 데이터를 돌려보고 시간이 많이 걸린다 싶을 때 차원 축소를 고려해볼 수 있다
  • 대신 각 변수의 해석의 문제가 남는다.
반응형
반응형

차원축소(Dimension Reduction)


변수의 개수를 줄이는 것을 의미함

차원축소를 하는 이유


  • 변수가 많으면 다 사용하는 것이 비효율적인 경우
  • 간혹 변수의 개수보다 관찰값의 개수가 적은 경우
  • 변수 간 상관관계가 있는 경우
    • 국어, 영어, 사회 -> 인문영역
    • 수학, 물리 -> 수리탐구영역
    • 위와 같이 5개의 변수를 두 가지의 변수로 축소하여 표현 가능

차원축소를 하는 방법


  • 상관관계가 높은 변수들을 묶어보기
  • 공분산행렬을 이용
  • Covariance Matrix는 Corrlation Matrix와 유사
  • 두 변수의 공변(covariate)량과 관계가 있음

치원축소를 할 때 주의사항


  • 원 데이터의 분산을 최대한 유지하는 것이 중요(분산이 커지거나 작아지는 것은 지양)
  • 원 데이터와 다른 새로운 데이터가 생성되는 것
  • 분석자의 의도대로 축소되지 않거나 해석이 어려운 경우도 발생함

공분산과 상관관계

공분산


공분산 공식은 아래와 같다.

$$\frac{1}{n-1}\sum_{i=1}^{N}(x_i-\bar{x})(y_i-\bar{y})$$

  • 두 변수의 방향을 의미함
  • 두 변수의 공분산행렬은 다음과 같이 표현된다. 여기서 a는 첫 번째 변수의 분산, b는 공분산, c는 두 번째 변수의 분산으로 표현된다. 만약 국어와 영어점수가 있다고 한다면 a는 국어의 분산, c는 영어의 분산, 그리고 b는 공분산이 된다.

$$\begin{pmatrix}a & b \\ b & c \end{pmatrix}$$

  • 분산은 언제나 양수이나 공분산은 음수일 수도 있음
  • 공분산이 양수라면 X와 Y는 같은 방향으로 움직인다는 의미
  • 반대로 공분산이 음수라면 X,Y는 음의 상관관계를 갖는다는 의미
  • 공분산이 0이라면? -> 상관관계가 없다는 뜻
  • 다만 상관관계가 얼마나 큰지는 제대로 설명하지 못함
    참고유튜브

상관관계


상관계수(p)는 아래와 같이 계산이 된다.
$$p = $$ $$Cov(x,y) \over \sqrt{Var(x)*Var(y)}$$

  • 공분산을 각각의 분산으로 나누어 표준화한 개념
  • 상관계수는 -1에서 1 사이의 값을 가지며 각 -1과 1에 근접할수록 상관관계가 있는 것을 판단 가능
반응형
반응형

Ridge 회귀 (L2 규제)


img

  • 선형 모델이며 최소적합법을 사용
  • 일반 회귀와 다른 점은 가중치(w 또는 β) 의 절대값을 최대한 작게 함
  • 즉 기울기를 0으로 만듬
  • 이렇게 하는 이유는 과대적합이 생기지 않도록 모델을 강제로 제한함을 의미

Lasso 회귀 (L1 규제)


img

  • Ridge에서와 마찬가지로 계수를 0에 가깝게 제한하는 것은 동일함
  • 하지만 정말로 0인 계수가 생기기도 함. 즉 제외되는 계수도 발생
  • 이는 자동으로 특성이 선택된다고 볼 수 있으며 가장 중요한 특성이 무엇인지 드러내 준다고 생각하면 됨
  • 간혹 Lasso를 이용하면 과속적합이 발생하기도 하는데, 이는 너무 많은 Feature를 Drop하여 모델을 못 쓰게 만드는 경우이다.

무엇을 사용할 것인가?


  • 일반적으로 Ridge 회귀를 분석에서 선호하는 편
  • 다만 분석하기 쉬운 모델을 고를 경우 Lasso가 더 좋은 선택이 될 수 있음
  • Lasso와 Ridge의 패널티를 결합한 ElasticNet이라는 것도 있음. 최상의 결과를 내기도 하지만 두 개의 매개변수를 조정해야 함.

참고 사이트

반응형
반응형

Decision Tree( 의사결정 나무 ) Model

 

 

 

 

모델


스무 고개처럼 일정한 기준을 질문으로 제시하였을 때, '예' 혹은 '아니오'로 갈라질 수 있는 결정 모델이다.

 

아래는 Decision Tree를 설명하는 가장 좋은 이미지

출처 : 위키백과

타이타닉 호의 생존율을 구할 때 사용하는 Decision Tree의 예이다.

 

 

 

 

 

 

 

Decision Tree Regression


 

출처 : https://gdcoder.com/decision-tree-regressor-explained-in-depth/

 

보통 Classification 모델을 쉽게 떠올리는데, 위 그림처럼 관측치에 대한 Regression도 가능하다.

다만 Continusous한 모델이 아니므로 회귀선을 그렸을 경우 아래처럼 직각형의 그래프가 나오게 된다

 

Random Forest Regression Model

위의 예제는 Random Forest의 그래프이다. 일반적인 Decision Tree보다 굴곡(꺾인 점)이 더 많다.

Random Forest는 Decision Tree를 모아서 그 결과치를 평균낸 모델이라고 해석하면 된다.

반응형
반응형

심플하게 얘기하자면

 

fit은 train_data에서 독립변수들을 통해서 y를 fitting할 때 그대로 사용하면 되는 함수다

 

그래서 regressor.fit()의 모양새가 된다.

 

하지만 이 훈련된 데이터 모델을 가지고 test_datat에 적용할 때는 fit_transform을 사용해야 한다.

μ와 σ를 train_data에서 가져다 써야하므로 transform 한다는 개념이다.

 

자세한 내용은 아래 내용 참조!

 

 

Difference between fit and fit_transform in scikit_learn models?

I am newbie to data science and I do not understand the difference between fit and fit_transform methods in scikit-learn. Can anybody simply explain why we might need to transform data? What doe...

datascience.stackexchange.com

 

반응형
반응형

(Data preprocessing, Linear Regression, Multinomial Regression 등은 이미 공부를 마친 상태이다... 나중에 추가 보완하거나 Data preprocessing Templete을 공유하는 방향으로 보충할 예정 ㅠ_ㅠ) 

 

 

 

1. Polynomial 회귀란 무엇인가?

 

Polynomial Regression(다항식 회귀)에 대해서 알아보자.

기본적으로 선형회귀에 대한 내용으로 n차 다항식의 형태를 띈다.

 

 

Machine Learning A-Z™: Hands-On Python & R In Data Science 중 Polynomial Regression Intuition

 

왜 P

 

olynomial 회귀를 사용하는가?

위키피디아 '선형회귀'

모든 데이터가 선형적인 모형을 띄면 쉽게 추정이 가능하겠지만

선형적이지 않은 모양(ex) 위 그림의 1사분면의 모양)으로 데이터가 분포되어 있다면 선형모형은 맞지 않을 것이다.

이럴 때 다항식 회귀가 필요하다.

다항형태이면 분포와 맞을 수 있다.

 

 

 

다항식 회귀(Polynomial) vs 다중 회귀(Multinomial)

 

 

처음엔 다중회귀와 다항식 회귀의 차이를 몰랐는데, 위 그림과 같이 간단히 설명할 수 있다.

다시 말하자면, n차형 다항식 형태이면 다항회귀, 1차형이고 변수가 많으면 다중회귀인 것이다.

 

 

 

 

 

왜 Linear라고 부르는가?

어쨌든 선형으로 표현이 가능하다.

y와 x간의 관계를 직선형이 아니더더라도, 곡선형으로라도 선형으로 표현 가능하기 때문이다.

만약에 분모의 영역에 x가 들어가게 된다면 더이상 선형이라고 부를 수 없을 것이다.

 

 

반응형
반응형

머신러닝은 통계학도로서 데이터 업계에 관심을 갖고 따라오다 보니 결국에는 마주하게 되는 관문 같은 것 같다.

 

일부 마케팅적인 용어와 섞이며 주가를 높이고는 있지만 실제로 이게 어떻게 구동하는지 잘 몰라 면접 때도 애를 먹었던 머신러닝. 다양한 루트로 지식을 접해오다가 문득 체계적으로 공부하고 배워보고 싶다는 열망이 생겼다.

 

다양한 공부 루트가 있을 수 있다.

Udacity, Datacamp, 앵드류 응 교수의 강의 등

 

하지만 개인적으로 하나하나 체계적으로 따라가고 짚어주면서 나름 실습도 겸할 수 있는 강의를 원했고

마지막으로 선택하게 된 게 udemy 강의였다.

 

 

 

(해당 페이지는 구글 서칭을 통해 발견할 수 있는 다양한 블로그 중에서 공부방법을 잘 정리해 놓은 페이지인 것 같아 링크를 공유한다.)

 

머신러닝 공부 순서, 방법 및 강의 정리

이번 포스팅에서는 작년부터 머신러닝 공부를 시작하면서 들었던 강의와 머신러닝 공부 방법에 대해서 정리해보려고 한다. 필자도 아직 머신러닝을 마스터하려면 갈 길이 멀었지만, 그간 공부했던 경험을 토대로..

gomcine.tistory.com

 

 

그 중에서도 아래 강의를 듣기 시작했는데, 생각보다 굉장히 상세하게 설명해주고 넘어가는 편이다.

이론적인 부분부터 실제적인 부분까지,

게다가 중간에 코드가 업데이트 되거나 바뀌면 수정해서 업데이트를 다시 해주는 강사의 친절함까지.

게다가 9만 명이 넘는 사람들의 평가가 4.5가 넘는다는 건 꽤나 높은 신뢰도를 준다.

게다가 대폭 할인행사를 자주하는 편이라 저렴한 가격으로 들을 수 있다.

 

이제 거의 다섯 번째 챕터를 넘어가는 과정이지만, 상당히 만족하는 편

 

 

다만 어느 정도의 영어가 뒷받침 되어야 편할 것이다. 자막이 있긴 한데 코드와 내용 그리고 영어까지 따라가는 것은 입력의 문제가 발생할 수도 있다.

 

아무튼 앞으로의 포스팅은 내 공부와 더불어 차분히 이런 내용들을 정리하여 올려볼 생각이다.

반응형

+ Recent posts