반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<머신러닝 관련 지난 글>

 

2021.07.19 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해할 수 있는 인공지능/머신러닝/딥러닝 개념 총정리

 

2021.09.01 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_1편. 머신러닝과 Scikit-learn 소개(ft. 지도학습, 비지도학습, 강화학습)

2021.09.07 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_2편. Scikit-learn 학습용 데이터 셋 불러오기(ft. 붓꽃 데이터)

2021.09.11 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_3편. 머신러닝 준비물! 학습/검증/예측 데이터(ft.과대적합과 과소적합)

2021.09.13 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_4편. 모델 학습과 분류 (ft. 붓꽃의 꽃잎, 꽃받침 데이터로 종류 예측하기)

2021.09.16 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_5편. 머신러닝 주요 분류(Classification) 알고리즘 5가지 총정리

2021.10.15 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_6편. 선형 회귀(Linear Regression) 예측 (ft.보스턴 주택 가격 예측)

 


 

오늘은 분류에서 배웠던 KNN(K-Nearest Neighbor), 번역하면 K-최근접 이웃 알고리즘으로 분류가 아닌 회귀 예측을 해보겠습니다.

 

 

1.  K-최근접 이웃 분류(K-NN Clssification)

 

먼저 예전에 배웠던 K-NN 분류를 떠올려봅시다.

 

K-NN 알고리즘을 이용한 분류는 '새로운 데이터 X(별표)가 주어졌을 때, X에 가장 가까운 K개의 A와 B 중에서 근처에 더 많은 갯수의 Class(A or B)로 판단하는 것'입니다.

 

 

 

2. K-최근접 이웃 회귀(K-NN Regression)

 

그렇다면 K-NN을 이용한 회귀는 무엇일까요?

 

회귀는 값을 예측하는 것이므로, '새로운 데이터 X(별표)가 주어졌을 때, X에 가장 가까운 K개의 데이터 값을 평균내서 값을 예측하는 것'입니다.

 

아래의 그림에서 빨간별의 위치에 있을 데이터 값은 (10+9+8)/3의 결과값인 9로 예측하는 것이죠.

 

엄밀히 따지면 정확한 그림은 아니지만 그냥 느낌만 가져가시기 바랍니다.

 

 

3. K-최근접 이웃 회귀의 한계

 

K-NN 알고리즘은 매우 간단하고 직관적이기에 처음 머신러닝의 분류와 회귀의 개념을 잡기에는 좋지만, 치명적인 한계가 있습니다.

 

그것은 바로 '데이터 범위 밖의 새로운 데이터는 예측이 불가능하다는 것'입니다.

 

아래의 그래프를 보시면, X값이 증가 됨에 따라 Y값이 증가하는 추세임을 알 수 있습니다. 정확히는 모르겠지만 X가 60일 때는 1000은 훨씬 넘는 Y값일 것이라고 예상해볼 수 있죠.

 

하지만 K-최근접 이웃 알고리즘으로 모델을 학습시키고, 60이라는 값을 입력시키면 가장 가까운 3개의 데이터의 Y값 평균(대략 1000)을 예측합니다.

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<머신러닝 관련 지난 글>

 

2021.07.19 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해할 수 있는 인공지능/머신러닝/딥러닝 개념 총정리

 

2021.09.01 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_1편. 머신러닝과 Scikit-learn 소개(ft. 지도학습, 비지도학습, 강화학습)

2021.09.07 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_2편. Scikit-learn 학습용 데이터 셋 불러오기(ft. 붓꽃 데이터)

2021.09.11 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_3편. 머신러닝 준비물! 학습/검증/예측 데이터(ft.과대적합과 과소적합)

2021.09.13 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_4편. 모델 학습과 분류 (ft. 붓꽃의 꽃잎, 꽃받침 데이터로 종류 예측하기)

2021.09.16 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_5편. 머신러닝 주요 분류(Classification) 알고리즘 5가지 총정리


오늘은 Scikit-learn 라이브러리를 이용해서 회귀 예측을 해보겠습니다.

 

예측에 활용할 데이터 셋은 '보스턴 주택 가격 데이터'입니다.

 

1. 관련 패키지 및 라이브러리 import

 

가장 먼저 해줄 일은 당연히 꼭 필요한 파이썬 패키지 및 라이브러리들을 불러와주는 것입니다.

# 데이터 셋을 다루기
import pandas as pd

# 보스턴 주택 가격 데이터 셋 불러오기
from sklearn.datasets import load_boston

# 데이터 셋을 훈련 셋과 테스트 셋으로 나누기
from sklearn.model_selection import train_test_split

# 선형 회귀 다루기
from sklearn.linear_model import LinearRegression

 

 

2. 데이터 셋 불러오기

 

다음으로 보스턴 데이터 셋을 불러와보겠습니다.

 

data = load_boston()

data

 

실행결과를 보면 아래와 같이 아주 지저분하게 나옵니다.

이런 데이터를 Pandas를 이용하면 아주 깔끔한 형태(데이터 프레임)로 정리가 가능합니다.

 

<여기서 잠깐>

 

scikit-learn에서 어떤 데이터 셋을 불러왔을 때, 데이터 항목들을 확인하려면 아래의 코드를 실행해주시면 됩니다.

print(data['DESCR'])

 

보스턴 주택 가격 데이터 셋은 아래와 같은 내용들이 나올텐데요.

 

한글로 번역하면 아래와 같습니다.

번호 컬럼 설명
1 CRIM 범죄율
2 ZN 25,000평방 피트 당 주거용 토지의 비율
3 INDUS 비소매(non-retail) 비즈니스 면적 비율
4 CHAS 찰스 강 더미 변수 (통로가 하천을 향하면 1, 그렇지 않으면 0)
5 NOX 산화 질소 농도 (천만 분의 일)
6 RM 주거 당 평균 객실 수
7 AGE 1940 년 이전에 건축된 자가 소유 점유 비율
8 DIS 5 개의 보스턴 고용 센터까지의 가중 거리
9 RAD 고속도로 접근성 지수
10 TAX 10,000 달러 당 전체 가치 재산 세율
11 PTRATIO 도시 별 학생-교사 비율
12 B 1000 (Bk-0.63) ^ 2 여기서 Bk는 도시 별 검정 비율입니다.
13 LSTAT 낮은 지위에 있는 인구의 비율(%)
14 MEDV 자가 주택의 중앙값 (1,000 달러 단위)

 

3. 판다스 데이터 프레임으로 정리하기

 

앞서 언급하였 듯이 복잡한 데이터 셋을 보기 좋은 형태로 정리해봅시다.

 

df = pd.DataFrame(data['data'], columns=data['feature_names'])

 

보스턴 데이터 셋의 data들을 데이터 프레임 형태로 바꿔주면서, 컬럼들이 의미하는 이름들을 붙여주는 코드입니다.

 

df.head( )를 통해 데이터를 확인해보면 아래와 같이 출력됩니다.

 

자세히 보니 가장 마지막 컬럼인 MEDV가 없는 것을 확인 할 수 있습니다.

 

왜냐하면 MEDV는 속성(feature)이 아닌 타겟(label), 즉 정답 값이기 때문입니다.

 

위에서 만든 데이터 프레임(df)에 데이터 셋의 target 데이터들을 'MEDV'라는 컬럼명으로 추가해줍니다.

df['MEDV'] = data['target']

 

다시 df.head( )를 통해 데이터를 확인해보면 아래와 같이 출력됩니다.

 

4. 훈련(Train) 셋과 테스트(Test) 셋으로 나누기

 

본격적인 머신러닝을 위해서 훈련 셋과 테스트 셋으로 나누어줍니다.

 

x_train, x_test, y_train, y_test = train_test_split(df.drop('MEDV', 1), df['MEDV'])

 

나눈 결과는 아래의 코드로 확인 할 수 있습니다.

 

x_train.shape, x_test.shape, y_train.shape, y_test.shape

<출력 결과>

 

5. 선형 회귀(Linear Regression) 모델 학습시키기

 

이제 데이터 셋은 모두 준비되었으니, 우선 train set로 모델을 학습시켜보겠습니다. 오늘 사용해볼 모델은 선형 회귀 모델입니다.

 

# LinearRegression 모델을 선정
model = LinearRegression(n_jobs=-1) #n_jobs = -1은 현재 컴퓨터의 CPU 코어를 모두 사용한다는 뜻

# 모델 학습
model.fit(x_train, y_train)

# 학습된 모델에 x_test 데이터 입력
pred = model.predict(x_test)

 

여기까지 따라오셨다면 pred에 예측한 값들이 들어있을텐데요.

 

오늘은 아주 간단하게 pred에 들어있는 값과 y_test에 들어있는 값을 몇개만 살펴보는 것으로 결과 확인을 해보겠습니다.

 

대충 확인하기 위한 코드이니 아주 허접함에 놀라지 마세요.

print(pred[:5])
print(y_test[:5])

가로로 출력된 값들이 예측값, 세로로 출력된 값들이 실제값입니다. 비슷하긴 한데 오차가 좀 있네요.

 

오늘 준비한 내용은 여기까지입니다.

 

다음 시간에는 예측 결과를 시각화 해보고, 오차의 정도도 계산해보겠습니다.

 


이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


 

오늘은 딥러닝을 공부하기 위해서 필요한 선형대수학의 기본개념 잠시 정리하는 시간을 가져보려 합니다.

 

우선 벡터와 행렬에 대해서 어느정도 본적이 있고, 대충 무엇인지는 아신다는 전제로 설명을 해보겠습니다.

 

1. 벡터, 행렬, 텐서의 개념

 

출처. 파이토치로 시작하는 딥러닝 기초 (부스트코스 강의)

 

제가 공부를 시작한 Pytorch 라이브러리에는 텐서(Tensor)라는 개념이 나오는데요. 이 텐서라는 것이 생소하지만 그렇다고 이해 못할 정도로 어려운 개념은 아닙니다.

 

텐서는 예전에 배웠던 Numpy의 ndarray와 거의 같으므로 ndarray로 설명드려 보겠습니다.

 

ndarray는 numpy의 가장 기본적인 구조로 1D array(벡터), 2D array(행렬), 3D array(텐서)와 같은 데이터 구조를 가집니다.

참고로 ndarray라는 말은 n dimension array의 줄임말입니다.

 

출처.  https://velog.io/@mingki

 

여기서 알아두셔야 할 개념이 있는데 바로 axis와 shape입니다.

axis shape
기준이 되는 축으로 축의 갯수는 차원과 같음


(axis 0) = 1D array = 1D Tensor
(axis0, axis 1) = 2D array = 2D Tensor
(axis0, axis1, axis 2) = 3D array = 3D Tensor

배열의 차원과 크기 정보



(3, ) = 3의 shape(=size)
(4,3) = 4x3의 shape(=size)
(2,5,3) = 2x5x3의 shape(=size)

 

앞으로 Pytorch를 다룰 때에는 array를 Tensor로 바꿔서 생각하시면 됩니다.

그리고 shape의 개념은 Numpy와 Pytorch 모두 사용하며, shape는 size와 같은 의미입니다.

 

 

2. axis와 shape(size) 헷갈리지 않는 법

 

제가 배열을 파이썬 코딩으로 구현할 때, 항상 헷갈리던게 있어서 팁을 공유해보려 합니다.

 

바로 텐서의 size와 axis가 실제 코드와 매칭이 잘 되지 않는 문제였는데요.

 

사실 텐서의 차원(dimension)이나 크기(size)를 파악하는 함수가 따로 있어서 코딩 한 줄이면 파악 가능하지만, 추후에 텐서의 차원과 형태를 바꿔주는 함수를 사용할 때, 제가 알려드리는 팁을 이용하면 조금 더 편하실 거라고 생각합니다.

 

한 번 차근차근 함께 알아보겠습니다.

 

이 텐서는 1차원 텐서입니다. 당연히 사이즈는 3이겠죠? 문제는 2차원 이상부터인데요.

 

이 텐서의 사이즈가 (3,2)인가요? 아니면 (2,3)일까요?

 

정답은 (2,3)입니다. 판단하는 방법은 '가장 바깥쪽의 괄호가 axis 0, 즉 사이즈 가장 앞의 숫자인 것입니다.

 

좀 더 풀어서 설명하자면 [1, 2, 3]와 [4, 5, 6] 2개가 가장 바깥 대괄호[ ]안에 묶여져 있으므로 사이즈의 가장 앞 숫자는 2가 되는 것입니다.

 

자 그럼 마지막으로 이 규칙을 3차원 텐서에 적용해보겠습니다.

가독성을 위해서 색깔을 넣어보았습니다. 보시면 가장 바깥의 괄호가 요소를 2개를 갖고 있으니 axis 0의 크기는 2가 되겠네요.

그 다음 안쪽 괄호 역시 각각 2개의 요소를 갖고 있으니 axis 1의 크기는 2가 될 것이고, 마지막 axis 2는 딱봐도 3이 되겠네요.

 

따라서 정답은 (2, 2, 3)의 사이즈를 갖습니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<머신러닝 관련 지난 글>

 

2021.07.19 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해할 수 있는 인공지능/머신러닝/딥러닝 개념 총정리

 

2021.09.01 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_1편. 머신러닝과 Scikit-learn 소개(ft. 지도학습, 비지도학습, 강화학습)

2021.09.07 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_2편. Scikit-learn 학습용 데이터 셋 불러오기(ft. 붓꽃 데이터)

2021.09.11 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_3편. 머신러닝 준비물! 학습/검증/예측 데이터(ft.과대적합과 과소적합)

2021.09.13 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_4편. 모델 학습과 분류 (ft. 붓꽃의 꽃잎, 꽃받침 데이터로 종류 예측하기)

2021.09.16 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_5편. 머신러닝 주요 분류(Classification) 알고리즘 5가지 총정리

 


오늘은 머신러닝을 공부하면서 반드시 알아야 할 개념에 대해서 간단히 정리하는 시간을 가져보려 합니다.

 

그 개념은 아래와 같습니다.

 

1) 가설 함수(Hypothesis)

2) 손실 함수(Loss Function) = 비용 함수 (Cost Function) 

 

 

1. 가설 함수

 

가설 함수를 설명드리기 위해서 잠시 머신러닝의 개념을 다시 상기해보겠습니다.

 

머신러닝이란 데이터를 모델에 넣어주면 스스로 학습을 하는 말그대로 기계가 학습하는 것입니다.

 

머신러닝 중에서 비교적 이해가 쉬운 선형 회귀(Linear regression)를 예로 들어보면, 학습이란 것은 데이터들의 추세선을 긋고 그 선의 함수식을 구하는 것과 같습니다. 우리가 학창 시절 배우던 y = f(x)의 f(x)를 구해주는 것이죠.

 

 

아래의 식은 우리가 오늘 배울 가설 함수 식입니다. 참고로 W는 Weight, b는 Bias의 약자입니다.

 

그리고 f(x)가 아닌 H(x)인 이유는 가설을 뜻하는 hypothesis의 H인 듯 하네요.

 

다시 본론으로 돌아와서, 아까의 데이터에서 추세선을 긋고 함수를 구해줘볼까요?

 

계산 과정 생략하고 답은 Y = 3X + 1이 될 것입니다. 바로 이 함수가 '가설 함수'입니다.

 

 

2. 손실 함수 (비용 함수)

 

쉬운 이해를 위해서 간단한 데이터와 정확도 100%의 가설 함수를 계산으로 구했지만, 실제 데이터와 컴퓨터가 학습하는 과정은 단순하지 않습니다.

 

현실에서의 데이터는 직선 1개로는 모든 데이터들을 커버할 수 없을 정도로 흩어져 있고, 컴퓨터는 W와 b를 계속해서 바꾸어 가며 입력한 x(feature)와 출력되는 y값(label)을 만족시키는 최적의 W와  b를 바꾸는 과정을 반복하기 때문입니다.

 

실제 데이터 느낌

 

그렇다면 컴퓨터는 어떻게 무슨 기준으로 최적의 가설 함수를 찾는걸까요?

 

이를 위해 필요한 개념이 손실 함수입니다. 아래의 식이 좀 어렵게 느껴질 수 있지만 최대한 쉽게 설명드려 보겠습니다.

 

 출처. 파이토치로 시작하는 딥러닝 기초 (부스트코스 강의)

 

아까 가설 함수를 추세선에 비유했었는데, 추세선이란 모든 데이터들을 최대한 아우르며 그어지는 직선을 뜻 합니다.

 

그말은 즉, 추세선(가설 함수)의 Y값(예측값 = Prediction)과 실제 데이터의 Y값(실제값 = Label = Target)들과의 차이가 최소화 되어야 최적화된 추세선인 것입니다.

 

이 때, 단순히 차이값들을 더해주면 진짜 차이가 작아서 0에 가깝게 나올 수도 있고, 엄청 큰 차이들이 더해지고 빼지면서 0이 될 수도 있으므로 제곱을 해줍니다.

 

거기다가 데이터 갯수가 많아질 수록 손실 함수가 커지는 영향을 제거 해주기 위해서 평균을 구합니다.

 


 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<머신러닝 관련 지난 글>

 

2021.07.19 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해할 수 있는 인공지능/머신러닝/딥러닝 개념 총정리

 

2021.09.01 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_1편. 머신러닝과 Scikit-learn 소개(ft. 지도학습, 비지도학습, 강화학습)

2021.09.07 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_2편. Scikit-learn 학습용 데이터 셋 불러오기(ft. 붓꽃 데이터)

2021.09.11 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_3편. 머신러닝 준비물! 학습/검증/예측 데이터(ft.과대적합과 과소적합)

2021.09.13 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_4편. 모델 학습과 분류 (ft. 붓꽃의 꽃잎, 꽃받침 데이터로 종류 예측하기)

 


 

오늘은 Scikit-learn의 분류 모델 함수들을 다루기 전에, 조금 이론적인 내용을 다루어 보려합니다.

 

Scikit-learn 함수를 적용하는 것은 아주 간단하지만, 그 의미를 모른다면 어느 상황에 어떤 모델을 적용할지 알 수 없기 때문이죠.

 

오늘 소개드릴 분류(Classification) 모델은 총 5가지입니다.

 

1. SGD, Stochastic Gradient Descent (확률적 경사하강법)

2. Logistic regression (로지스틱 회귀)

3. KNN, K-Nearest Neighbor (K-최근접 이웃)

4. Decision Tree (의사결정 나무)

5. SVM, Support Vector Machine (서포트 벡터 머신)

 

하나씩 살펴보겠습니다.

 

 

1. SGD, Stochastic Gradient Descent (확률적 경사하강법)

 

직역하면 확률적 경사하강법이라 불리는 이 모델은 경사하강법을 개선한 방법입니다.

 

경사하강법이란 함수의 기울기(Gradient)가 작아지는 방향으로 가중치를 조절하면서,

기울기가 0이 되는 지점을 찾는 알고리즘을 말합니다.

 

아래 그래프의 Y값이 오차를 의미한다면, 기울기가 0이 되는 지점이 오차(혹은 손실)가 가장 작아지는,

다시 말해 우리가 찾고자 하는 결과가 되는 것입니다.

 

경사하강법 (출처.machinelearningnotepad)

 

 

확률적 경사 하강법의 특징은 경사 하강법과 다르게 한번 학습할 때 모든 데이터에 대해 가중치를 조절하는 것이 아니라,

램덤하게 추출한 일부 데이터에 대해 가중치를 조절합니다.

 

쉽게 말해 속도는 빠르지만 정확도는 낮다고 합니다.

 

출처. White Whale 티스토리 블로그

 

 

2. Logistic regression (로지스틱 회귀)

 

출처. 공돌이의 수학정리노트

 

이름에 붙어있는 regression이란 단어 때문에 분류가 아닌 회귀(예측) 모델로 착각할 수도 있는 분류 알고리즘입니다.

 

나중에 배울 Linear regression(선형 회귀)가 연속형 데이터(숫자)를 예측하는 것이라면, Logistic regression은 범주형 데이터(남자/여자, 개/고양이)를 분류하는 것입니다.

 

 

3. KNN, K-Nearest Neighbor (K-최근접 이웃)

 

출처. machinelearningnotepad

 

KNN, 최근접 이웃 알고리즘이란 한마디로 '새로운 데이터가 주어졌을 때, A와 B 중에서 근처에 A가 더 많다면 A라고 판단하는 것'이라고 설명할 수 있습니다.

 

이때, 새로운 데이터에 최고 근접하는 데이터들을 K개 선정하여서 판단하는 알고리즘이 K-Nearest Neighbor인 것입니다.

 

아래의 그림과 같이 K(갯수)에 따라서 별표(새로운 데이터)가 A가 될수도, B가 될수도 있으므로, 추후에 사이킷 런 KNN 함수에서 K가 하이퍼 파라미터로 들어갑니다.

 

 

 

4. Decision Tree (의사결정 나무)

 

붓꽃 데이터에 Decision Tree 알고리즘을 적용한 예시 (출처. https://www.researchgate.net/figure/Decision-tree-for-Iris-dataset_fig1_293194222)

 

마치 스무고개 하듯 데이터를 분류하는 알고리즘으로, 그 생김새가 나무와 같아서 의사결정 나무라는 이름이 붙었습니다.

 

Decision Tree는 root에서부터 적절한 node를 선택하면서 진행하다가 최종 결정을 내리게 되는 모델입니다.

 

원리가 매우 직관적이라서 누구나 쉽게 결과를 해석할 수 있다는 장점이 있습니다.

 

 

 

5. SVM, Support Vector Machine (서포트 벡터 머신)

 

SVM 개념도 (출처. TCP 스쿨)

 

서포트 벡터 머신(SVM)은 주로 두 그룹을 분류하는 경계선을 긋고, 경계선과 두 그룹간의 거리(Margin)이 최대가 되는 경계선을 찾는 알고리즘입니다.

 

그렇게 정해진 선을 기준으로 데이터를 A와 B로 분류하는 것이죠. 물론 2개 이상도 분류 가능합니다.

 

주로 이진(2개의 데이터) 분류에 많이 사용되며, 굉장히 높은 인식률을 보여주어서 아직까지도 많이 사용된다고 하네요.

 

 


<참고 자료>

 

1. TCP 스쿨_머신러닝 알고리즘

http://tcpschool.com/deep2018/deep2018_machine_algorithm

 

2. White Whale(티스토리 블로그)_수식과 코드로 보는 경사하강법

https://twinw.tistory.com/247

 

3. 패스트 캠퍼스 유료강의_직장인을 위한 파이썬 데이터 분석

 

4. 공돌이의 수학노트_로지스틱 회귀, 경사하강법

 

 

 

 

이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<머신러닝 관련 지난 글>

 

2021.07.19 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해할 수 있는 인공지능/머신러닝/딥러닝 개념 총정리

 

2021.09.01 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_1편. 머신러닝과 Scikit-learn 소개(ft. 지도학습, 비지도학습, 강화학습)

2021.09.07 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_2편. Scikit-learn 학습용 데이터 셋 불러오기(ft. 붓꽃 데이터)

2021.09.11 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_3편. 머신러닝 준비물! 학습/검증/예측 데이터(ft.과대적합과 과소적합)

 

 

 

오늘은 지난 시간 준비한 학습 데이터와 검증 데이터를 이용해서, 붓꽃의 3가지 종류로 분류해보는 머신러닝을 실습해보겠습니다.

 

예측 개념도

 

참고로 오늘도 여전히 쥬피터 노트북 (저의 경우엔 VS code 위에서)을 개발환경으로 사용하였습니다.

 


 

지난 시간 내용 (데이터 분류)

 

먼저 지난 시간의 코드를 그대로 실행해보겠습니다.

 

# 붓꽃 데이터 로드 / 데이터 셋 분류와 관련된 모듈 import
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 붓꽃 데이터 셋 객체화
dataset = load_iris()

# feature는 붓꽃 특징 데이터, label은 붓꽃 종류 데이터
feature= dataset['data']
label = dataset['target']

 

 

훈련 데이터와 검증 데이터의 분류는 이번 시간에 다시 실행해보겠습니다. 지난 시간 설정하지 않았던 파라미터를 넣어줄 예정이거든요.

 

x_train, x_valid, y_train, y_valid = train_test_split(feature, label, test_size=0.2, shuffle=True, stratify=label)

 

<train_test_split 함수 / 하이퍼 파라미터 설명>

 

1) test_size: 0~1까지 검증 데이터의 비율을 설정 (0.2는 데이터 셋의 20%를 검증 데이터로 사용하겠다는 뜻)

 

2) shuffle: 데이터 셋을 분류할 때, 섞어서 랜덤으로 분류할지 설정 (True는 섞는 것, False는 섞지 않는 것)

 

3) stratify: 데이터 셋을 분류할 때, 클래스(붓꽃의 종류)를 골고루 뽑도록 설정 (파라미터의 인자로는 label 데이터를 입력해줌)

 

4) random_state: 정수를 인자로 가지며, 분류할 때마다 동일하게 분류할 수 있게 해주는 파라미터 (여기서는 사용하지 않았음)

 

 

머신러닝 맛보기 (붓꽃 종류 분류)

 

이번 시간의 메인 주제인 붓꽃 종류 분류를 해보겠습니다. 여기까지 완료하신다면 머신러닝이 이런거구나라는 느낌이 조금 오실거예요.

 

머신러닝의 지도학습에는 분류(Classification)와 회귀(Regression) 모델이 있다고 말씀드렸죠?

 

이번 시간에는 이 둘 중에, 분류를 해보도록 하겠습니다.

 

분류 알고리즘에는 다양한 것들이 있지만 오늘은 LogisticRegression을 사용할 예정입니다.

(다음에 자세히 설명드릴테니, 그냥 분류 알고리즘이라고 대충 이해하고 넘어가도록 하겠습니다)

 

 

개념은 다음과 같습니다.

 

1. 모델 선언 (scikit-learn에 내장된 분류 모델)

2. x_train 데이터와 y_train 데이터로 모델 학습 (머신러닝)

3. 학습된 모델에 x_valid 데이터 입력 --> 예측 데이터 따로 저장

4. y_valid(정답)와 예측한 데이터 비교 --> 정확도 측정

 

 

지금부터 하나씩 코드로 실행해 보겠습니다.

 

 

1. 모델 선언

 

먼저 관련 모듈을 불러온 다음, 모델을 선언해 줍니다. 

 

# LogisticRegression 알고리즘을 사용하기 위한 모듈 import
from sklearn.linear_model import LogisticRegression

# 모델 선언
model = LogisticRegression()

 

2. 모델 학습

 

훈련 데이터를 학습(fit)시키는 코드입니다. 아마도 이 코드는 앞으로 머신러닝을 계속하는 한, 엄청 우려먹을 것 같네요!

 

model.fit(x_train, y_train)

 

 

3. 예측(분류) 수행

 

위에서 학습시킨 모델에 검증 데이터를 넣고, 그 결과를 y_predict라는 변수에 넣어줍니다.

 

y_predict = model.predict(x_valid)

 

y_predict에는 120개의 붓꽃 데이터 종류(0, 1, 2)가 들어가 있을 것입니다.

 

 

4. 예측 결과 검증

 

검증 컨셉은 간단합니다. 예측값(y_predict)과 정답(y_valid)을 비교해서 맞으면 True(1), 틀리면 False(0)이 나오겠죠?

 

120개의 0과 1이 나올 것이고, 이들의 평균을 구하면 그것이 예측의 정확도가 되는 것입니다.

 

코드로 구현하면 아래와 같습니다.

 

(y_predict == y_valid).mean()

 

저는 결과가 1.0으로 나왔네요. 코드 몇 줄로 100% 정확도의 머신러닝을 구현하다니 참 놀라운 세상이네요!

 

scikit-learn으로 머신러닝을 구현하는 일은 오늘 배운 내용에서 모델의 종류만 달라질뿐 모두 이런 방식을 따릅니다.

 

단, 모델마다 하이퍼 파라미터가 다르고, 이 하이퍼 파라미터를 적절하게 설정해주는 것이 머신러닝 정확도의 핵심입니다.

 

오늘 준비한 내용은 여기까지입니다.

 

오늘도 코딩유치원을 찾아주신 여러분들께 진심으로 감사드립니다.

 


 

<참고 자료>

 

1. 테디노트 블로그_scikit-learn 데이터 셋(dataset) 다루기

https://teddylee777.github.io/scikit-learn/scikit-learn-dataset

 

 

2. 패스트 캠퍼스 유료강의_직장인을 위한 파이썬 데이터 분석

 


이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<머신러닝 관련 글>

 

2021.07.19 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해할 수 있는 인공지능/머신러닝/딥러닝 개념 총정리

 

2021.09.01 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_1편. 머신러닝과 Scikit-learn 소개(ft. 지도학습, 비지도학습, 강화학습)

2021.09.07 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_2편. Scikit-learn 학습용 데이터 셋 불러오기(ft. 붓꽃 데이터)

2021.09.11 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_3편. 머신러닝 준비물! 학습/검증/예측 데이터(ft.과대적합과 과소적합)

2021.09.13 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_4편. 모델 학습과 분류 (ft. 붓꽃의 꽃잎, 꽃받침 데이터로 종류 예측하기)

 

 

오늘은 머신러닝을 위한 준비물인 학습 데이터와 검증 데이터가 무엇인지, Scikit-learn 라이브러리를 이용해서 어떻게 데이터들을 나누고, 모델을 학습 시킬 수 있는지 알아보겠습니다.

 

참고로 오늘도 여전히 쥬피터 노트북 (저의 경우엔 VS code 위에서)을 개발환경으로 사용하였습니다.

 


1. Feature & Label

 

우선 가장 기본적인 개념인 Feature와 Label에 대해서 알아보겠습니다.

 

옛날 고등학생 때 배웠던 함수, y = f(x)가 기억나시나요? 함수 f(x)에 x를 입력하면, y가 나온다라는 개념입니다.

 

여기서 x(변수)가 feature이고 y(결과값)이 label이라고 생각하시면 됩니다.

 

x = feature

y = label

 

이때, x는 보통 학습을 위한 데이터 셋실제 예측을 위한 테스트 셋으로 나뉩니다.

 

코딩 할 때는 흔히 x_train, x_test로 표현하고, 이 값들을 모델(함수)에 넣어서 나오는 결과값을 y_train, y_test로 표현해줍니다.

 

 

2. Training set & Test set

 

위에서 언급했 듯, 데이터 셋은 학습을 위한 데이터 셋과 실제 예측을 위한 테스트 셋으로 나뉩니다.

 

1) Training set

 

- 컴퓨터에게 문제(feature)와 정답(label)을 알려주는 지도학습용 데이터 셋

- 마치 수학 문제와 해설 답안이 함께 제공된 시험공부하는 상황

 

2) Test set

 

- 문제(feature)만 존재

- 실제 시험에서 문제를 풀어야 하는 상황

 

 

3. 과대적합 & 과소적합

 

어떤 예측을 수행할 때, 아래 그래프의 가장 오른쪽(과대적합)처럼 모든 점(데이터)들을 100% 예측하는 모델을 만들었다고 가정해봅시다.

 

이런 경우는 너무 과하게 해당 데이터들에 적합하도록 모델이 만들어져서, 테스트 셋을 넣었을 때 예측을 빗나갈 확률이 커지게 됩니다.

 

마치 시험 공부를 하는데 교수님이 집어주신 문제만 달달 외우듯 공부했더니, 막상 시험 칠 때는 다른 문제가 나와서 틀리는 느낌이랄까요?

 

반대로 가장 왼쪽(과소적합) 그래프는 시험공부를 너무 대충한 느낌이라고 이해하시면 좋을 것 같아요.

 

참고로 나중에 배울 개념이지만, 전체 데이터 셋을 1회 학습한 것을 1 epoch(에포크)라고 합니다.

모델을 학습시킬 때 이 에포크를 설정해줄 수 있는데, 마치 문제집을 몇 번 반복하는지와 같은 개념입니다.

 

 

역시 적당한 것이 가장 좋은 것이라는 진리는 머신러닝에서도 적용되는 듯 합니다.

 

4. 검증 데이터 셋 (Validation set)

 

 

위에서 언급한 과대적합과 과소적합을 피하기 위해서 Training set의 20% 정도를 따로 분리하여 Validation set로 활용해줍니다.

(다만, 학습을 위한 코딩을 할 때엔 단순히 Training set와 Test set으로만 나누는 경우가 많습니다)

 

Validation set는 트레이닝 과정에서 최적점을 찾아주는 역할을 합니다.

 

모델 복잡도를 epoch와 동일하게 봐도 무방

 

 

5. Scikit-learn으로 Training set과 Validation set 나누기

 

이제 위에서 배운 개념을 토대로 Scikit-learn의 함수들을 이용해서 데이터를 나누어보겠습니다. 

 

데이터 셋은 지난 시간에 다루었던 붓꽃 데이터 셋을 이용하겠습니다.

 

붓꽃 데이터 셋 5개 행 출력

 

먼저 붓꽃 데이터 로드와 데이터 셋 분류와 관련된 scikit-learn 패키지를 불러와 줍니다.

 

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

 

다음으로는 dataset을 불러와서, feature와 label 변수에 필요한 데이터를 넣어줍니다.

 

# 붓꽃 데이터 셋
dataset = load_iris()

# feature는 붓꽃 특징 데이터, label은 붓꽃 종류 데이터
feature= dataset['data']
label = dataset['target']

 

 

이제 scikit-learn의 Train_test_split( ) 함수로 Train set과 Validation set을 나누어 주겠습니다.

 

x_train, x_valid, y_train, y_valid = train_test_split(feature, label, test_size=0.2, shuffle=True)

 

잘 나누어 졌는지 확인해볼까요? 

print(feature.shape)
print(label.shape)
print(x_train.shape)
print(y_train.shape)
print(x_valid.shape)
print(y_valid.shape)

>>>
(150, 4)
(150,)
(120, 4)
(120,)
(30, 4)
(30,)

 

원래 150개의 데이터가 Training set 120개와 Validation set 30개로 나뉜 것을 확인 할 수 있습니다.

 

이번 시간엔 데이터를 나누는 것 까지해보겠습니다.

 

다음 시간에는 분류한 데이터로 모델을 학습시키고, 검증 데이터로 얼마나 잘 작동하는지 검증 해보도록 하겠습니다.

 

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

최근들어 머신러닝과 머신러닝의 대표적인 라이브러리인 Scikit-learn에 대해서 공부하고 있습니다.

 

<머신러닝 관련 글>

 

2021.07.19 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해할 수 있는 인공지능/머신러닝/딥러닝 개념 총정리

 

2021.09.01 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_1편. 머신러닝과 Scikit-learn 소개(ft. 지도학습, 비지도학습, 강화학습)

2021.09.07 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_2편. Scikit-learn 학습용 데이터 셋 불러오기(ft. 붓꽃 데이터)

2021.09.11 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_3편. 머신러닝 준비물! 학습/검증/예측 데이터(ft.과대적합과 과소적합)

2021.09.13 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_4편. 모델 학습과 분류 (ft. 붓꽃의 꽃잎, 꽃받침 데이터로 종류 예측하기)

 


 

원래 Scikit-learn 설치를 먼저 다루려 했으나, 아나콘다 패키지로 파이썬을 설치한 경우엔 이미 설치가 되어 있다고 합니다.

 

그래서 별도로 설치 방법은 별도로 설명하지 않고 바로 데이터 셋을 불러오는 것 부터 시작해보겠습니다.

 

참고로 오늘도 여전히 쥬피터 노트북 (저의 경우엔 VS code 위에서)을 개발환경으로 사용하였습니다.

 


1. Scikit-learn의 데이터 셋

 

sklearn.dataset 모듈에는 기본적으로 내장되어 있는 데이터 셋들이 있습니다.

 

튜토리얼 진행할 정도의 Toy 데이터 셋도 있고, 실제 사용하는 데이터가 아주 큰 Real 데이터 셋도 있습니다.

 

그 외에도 sklearn.datasets.fetch_openml 모듈을 이용해서 openml.org 에서 제공하는 데이터 셋을 받을 수 있다고 합니다.

(아직 해본적은 없어서 추후에 필요하다면 이용하는 방법을 포스팅해보겠습니다)

 

이번 시간에는 장난감 데이터 셋을 활용하여, 데이터 셋을 로드하고 다루어 보는 연습을 해보겠습니다.

 

 

<scikit-learn 공식 문서의 데이터 셋 관련 목록>

출처. scikit-learn 공식 문서 (구글 번역을 사용하여 용어가 어색할 수 있음)

 

2.  장난감 데이터 셋의 종류

 

  • load_boston: 보스톤 집값 데이터
  • load_iris: 붓꽃 데이터
  • load_diabetes: 당뇨병 환자의 특성 데이터
  • load_digits: 0~9 필기 숫자 데이터
  • load_linnerud:  피트니스 클럽의 중년 남성 20명의 몸무게, 허리, 맥박데이터와 턱걸이, 윗몸 일으키기, 점프 횟수 데이터
  • load_wine: 와인 성분 데이터
  • load_breast_cancer: 위스콘신 유방암 환자 데이터

 

이 데이터들 중, seaborn을 공부할 때 많이 보았던 붓꽃 데이터를 불러와보겠습니다.

 

# 데이터 셋 중에서 iris 데이터 셋 관련된 클래스만 import
from sklearn.datasets import load_iris

# iris 변수에 데이터 셋 담기 (클래스의 객체 선언)
iris = load_iris()

# 출력
iris

 

출력 결과는 너무 길고 복잡해서 생략하고 출력한 데이터 셋이 어떤 형태를 가지고 있는지 설명드려 보겠습니다.

 

여러분들은 직접 실행해보신 후, 출력 결과를 아래의 내용과 비교해보세요.

 

 

3. 데이터 셋 자료구조

 

장난감 데이터 셋을 로드하시면 sklearn.utils.Bunch라는 자료구조(클래스)를 반환해 줍니다.

 

Bunch 클래스는 key-value 형식으로 구성되어 있으며, 딕셔너리(dict) 자료형과 유사한 구조를 가지고 있습니다.

 

key는 다음과 같습니다. 

 

  • data: Feature 데이터, Numpy의 배열(ndarray) 혹은 Pandas의 dataframe 형태
  • target: Label 데이터, Numpy의 배열(ndarray) 혹은 Pandas의 Series 형태
  • feature_names: Feature 데이터의 이름, 리스트
  • target_names: Label 데이터의 이름, 리스트
  • DESCR: 데이터 셋의 설명, 문자열
  • filename: 데이터 셋의 파일 저장 위치 (csv), 문자열

 

참고로 data와 feature_names가 특징 데이터(꽃잎 길이와 너비, 꽃받침의 길이와 너비), target과 target_names가 정답 데이터(붓꽃의 3가지 종류) 입니다.

 

 

해당 데이터들은 앞서 해본 것과 같이 iris로 한번에 불러올 수도 있지만 아래와 같이 각각 선택해서 가져올 수 있습니다.

 

# iris 데이터 셋의 data만 가져오기
data = iris['data']

# 데이터 10개만 출력
data[:10]

 

<출력 결과>

 

 

4. 데이터 셋 DataFrame으로 변환

 

이미 pandas를 배우신 분들은 느끼셨겠지만 위와 같은 형식은 직관성이 너무 떨어집니다.

 

그래서 우리는 key로 분류된 데이터들을 합쳐서 데이터 프레임으로 만들어보겠습니다.

 

 

1) pandas 패키지 불러오기

 

먼저 pandas를 import 해줍니다.

 

import pandas as pd

 

 

2) data와 feature_names 합쳐주기

 

iris 데이터 셋의 'data'를 데이터 프레임으로 불러는 동시에, 컬럼명을 'feature_names'의 값들로 변경해줍니다.

 

이때, columns 파라미터 설정안해주면 컬럼명이 0,1,2,3으로 출력됩니다.

 

df = pd.DataFrame(iris['data'], columns=iris['feature_names'])

df.head()

 

<출력 결과>

 

 

3) 데이터 프레임 가장 오른쪽에 target 데이터를 추가하기

 

해당 데이터들이 어떤 붓꽃 종류인지를 알려주는 target 데이터를 추가해보겠습니다.

 

참고로, 0은 'setosa', 1은 'versicolor', 2는 'virginica'를 의미합니다. (iris['target_names]로 확인 가능)

 

# df에 iris 데이터 셋의 target 데이터를 추가하고 컬럼명을 'target'으로 설정
df['target'] = iris['target']

# df 확인
df.head()

 

<출력 결과>

 

오늘은 준비한 내용은 여기까지입니다.

 

다음 시간에는 오늘 불러온 데이터 프레임을 활용하여 간단한 머신러닝을 해보겠습니다.

 

감사합니다.


<참고 자료>

 

1. 테디노트 블로그_scikit-learn 데이터 셋(dataset) 다루기

https://teddylee777.github.io/scikit-learn/scikit-learn-dataset

 

 

2. scikit-learn 공식 문서_붓꽃 데이터 셋

https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html#sklearn.datasets.load_iris

반응형
반응형

요약

 

둘 다 같은 의미

 

컴퓨터과학(Computer Science) 측면 --> 머신러닝

통계학(Statistics) 측면 --> 데이터 마이닝

 

굳이 차이를 짚어보자면,

 

머신러닝은 학습과 예측에 초점이 맞춰져 있고,

데이터 마이닝은 데이터를 활용한 어플리케이션에 초점이 맞춰져 있다.

 

 

Data Mining

출처. 자비스가 필요해(티스토리 블로그)

 

- 대규모로 저장된 데이터에서 규칙이나 패턴을 분석하여 가치있는 정보를 추출하는 과정

- KDD(knowledge-discovery in databases)와 같은 의미

- 분류, 예측, 군집 등의 모델을 사용

 

데이터 마이닝의 응용 분야

1) 스팸 필터

2) 신용평점 시스템

3) 사기탐지시스템

4) 장바구니 분석

5) 최적 포트폴리오 구축

 

 

 

Machine Learning

 

 

- 기계(Machine) + 학습(Learning)의 합성어로 기계가 스스로 학습하는 것을 말함.

- 기존에 사람이 정해주었던 규칙(모델)을 스스로 학습

- 분류, 예측, 군집 등의 모델을 사용

- 머신러닝의 한 종류가 딥러닝

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<머신러닝 관련 글>

 

2021.07.19 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해할 수 있는 인공지능/머신러닝/딥러닝 개념 총정리

 

2021.09.01 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_1편. 머신러닝과 Scikit-learn 소개(ft. 지도학습, 비지도학습, 강화학습)

2021.09.07 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_2편. Scikit-learn 학습용 데이터 셋 불러오기(ft. 붓꽃 데이터)

2021.09.11 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_3편. 머신러닝 준비물! 학습/검증/예측 데이터(ft.과대적합과 과소적합)

2021.09.13 - [파이썬 패키지/머신러닝] - [Python/Scikit-learn] 머신러닝 라이브러리_4편. 모델 학습과 분류 (ft. 붓꽃의 꽃잎, 꽃받침 데이터로 종류 예측하기)

 


 

이번 시간에는 머신러닝과 머신러닝의 대표적인 라이브러리인 Scikit-learn에 대해서 공부해보겠습니다.

 

머신러닝

 

머신러닝이란 말그대로 기계(Machine) + 학습(Learning)의 합성어로 기계가 스스로 학습하는 것을 말합니다.

 

무엇을 학습하냐면 기존에 사람이 정해주었던 규칙(모델)을 스스로 학습 합니다. 즉, 머신러닝은 모델을 만드는 하나의 방법론인 것입니다.

 

사람이 컴퓨터에 데이터(개와 고양이 사진)와 도출하고자 하는 판단 결과(이것은 고양이/개입니다) 데이터를 입력해주면, 컴퓨터가 알아서 판단 알고리즘을 모델링 하는 것입니다.

 

머신 러닝의 목적은 한마디로 모델을 만드는 것이라고 할 수 있습니다.

 

1. 모델(Model)이란?

 

모델이란 무엇일까요?

 

저는 모델이란 '현실에 적용 할 수 있는 쓸모있는 가상의 무언가'이라고 생각합니다.

 

머신러닝에서 흔히 사용하는 모델의 예는 아래와 같습니다. 다양한 모델들이 있지만 명료한 이해를 위해서 3가지만 소개드리겠습니다.

 

1) 개와 고양이를 구분해주는 분류(Classification) 알고리즘

2) 유튜브 시청 기록을 이용한 예측 혹은 회귀(Regression) 알고리즘

3) 고객의 구매 데이터로 고객군을 그룹화 해주는 클러스터링(Clustering) 알고리즘

 

 

2. 머신러닝의 분류

 

 

머신러닝은 크게 지도학습, 비지도학습, 강화학습으로 나눕니다. 이외에도 더 많은 학습 방법이 있지만 3가지만 다루도록 하겠습니다.

 

1) 지도학습(Supervised Learning)

 

출처. TTA정보통신용어사전-지도형 기계 학습

 

지도학습은 데이터(Data)와 그 데이터가 무엇인지 알려주는 정답(Label)을 컴퓨터에게 입력해주는 학습법입니다.

 

즉, 컴퓨터에게 '이게 정답이야~'라고 지도해준다고 해서 지도학습이라고 부릅니다.

 

위에서 말씀드렸던 분류(Classification)회귀(Regression) 모델에 지도학습이 사용됩니다.

 

분류 모델에는 정상/스팸 메일 분류, 개/고양이 분류 등이 있으며, 회귀 모델에는 집값 예측, 지지율 예측 등과 같은 예가 있습니다.

 

 

2) 비지도학습(Unsupervised Learning)

 

 

비지도학습은 정답(Label)이 없는 데이터만을 컴퓨터에게 입력해주는 학습법입니다.

 

정답이 없으므로, 컴퓨터가 할 수 있는 일을 데이터만을 가지고 비슷한 그룹끼리 나누어 주는 것(군집화)이겠죠?

 

비지도학습의 대표적인 모델로는 군집화(Clustering)차원축소(Dimensionality reduction)이 있습니다.

 

앞서 배운 분류가 정확히 어떤 데이터는 무엇이다라고 하는 것과 다르게, 군집화는 일단 나누어놓고 이 그룹은 무엇이겠다라고 추후에 정해주는 차이라고 생각하시면 됩니다.

 

군집화 모델의 예로는 뉴스 카테고리 분류, DNA 분류 등이 있습니다.

 

차원축소는 이해하기 난해하므로 추후에 최대한 쉽게 포스팅 해보도록 하겠습니다.

 

 

3) 강화학습(Reinforcement Learning)

 

강화학습은 마치 사람의 학습과 같이, 어떤 행동(action)을 했을 때 보상(reward)을 받으면서 학습하는 것을 말합니다.

 

아이가 어떤 행동을 하니 엄마가 칭찬을 해주고, 아이는 자신의 행동 중에서 엄마가 제일 기뻐하고 칭찬해주는 쪽으로 행동하는 것과 같은 것이죠.

 

앞서 배운 지도학습과 비지도학습이 환경에 변화가 없는 정적인 환경에서 학습을 진행했다면, 강화학습은 변화하는 환경 안에서 시행착오를 겪으며 학습을 진행한다는 것이 가장 큰 차이점입니다.

 

대표적인 강화학습의 예로는 알파고가 있습니다.

 

 

Scikit-learn

 

이러한 머신러닝의 개념을 파이썬에서 아주 쉽게 이용할 수 있게 해주는 라이브러리가 Scikit-learn입니다.

 

싸이킷런은 Numpy, Scipy, matplotlib을 기반으로 하는 파이썬 대표 머신러닝 라이브러리입니다.

 

seaborn과 비슷하게 샘플 데이터 셋이 내장되어 있으며, 초심자가 머신러닝을 다루어 볼 때 가장 적합한 라이브러리라고 합니다.

 

Scikit-learn 공식 문서

 

오늘은 준비한 내용은 여기까지 입니다.

 

다음시간에는 Scikit-learn을 설치하고 사용하는 방법, 주요 기능들에 대해서 알아보겠습니다.

 

오늘도 코딩유치원을 찾아주신 여러분들께 감사드립니다.

 


<참고자료>

 

1. TCP 스쿨 (머신러닝-강화학습)

http://tcpschool.com/deep2018/deep2018_machine_reinforcement

 

2. 싸이킷 런 공식 문서

https://scikit-learn.org/stable/

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 머신러닝에 대해서 공부해보려 합니다. 정말 자주 들었지만 정확히 무엇인지 몰랐던 머신러닝의 개념을 오늘 정리해 보겠습니다.

 

비전공자가 혼자서 독학으로 공부하고 정리한 것이라 잘 못된 점이 있을 수 있으니 양해 부탁드립니다.

 


 

인공지능 / 머신러닝 / 딥러닝

 

 

인공지능(AI): 사람의 지능을 모방하여, 사람이 하는 것과 같이 복잡한 일을 할 수 있게 기계를 만드는 것

머신러닝(ML): 기본적으로 알고리즘을 이용해 데이터를 분석 및 학습하며, 학습한 내용을 기반으로 판단및 예측

딥러닝(DL): 머신러닝의 다양한 방법론 중 하나로 인공신경망에서 발전한 형태의 인공지능

 

 

머신러닝을 설명하려면 먼저 인공지능이 무엇인지부터 알아야합니다.

 

인공지능이란?

 

인공지능(Artifical Intelligence)은 인간의 학습능력, 추론능력, 지각능력, 그외에 인공적으로 구현한 컴퓨터 프로그램 또는 이를 포함한 컴퓨터 시스템입니다. (위키 백과)

 

쉬운 예를 하나 들자면, 개와 고양이 사진을 보고 구분할 수 있도록 알고리즘을 만들어 컴퓨터가 알아서 판단하는 능력을 구현하는 것도 인공지능 기술이라 할 수 있겠습니다.

 

출처. pixabay

 

전통적이고 가장 쉽게 생각할 수 있는 구분 방법은 사람이 개와 고양이를 구분할 수 있는 특징을 알고리즘으로 구현해서 기계(컴퓨터)에 명령을 내려주는 것입니다. 반복되는 형태나 규칙을 패턴이라고 하는데 이런 패턴을 알고리즘으로 구현하는 일을 모델링(Modeling)이라고도 합니다.

 

 

모델링을 사람이 직접하고, 컴퓨터는 그 모델을 단순히 수행하는 역할에서, 머신러닝의 개념이 출현하고 컴퓨팅 파워가 발전하면서 모델링을 컴퓨터가 수행하게 된 것이죠.

 

 

머신러닝이란?

 

머신러닝이란 말그대로 기계(Machine) + 학습(Learning)의 합성어로 기계가 스스로 학습하는 것을 말합니다.

 

무엇을 학습하냐면, 위에서 언급했던 모델을 스스로 학습 합니다. 즉, 머신러닝은 모델을 만드는 하나의 방법론인 것입니다.

 

사람이 컴퓨터에 데이터(개와 고양이 사진)와 도출하고자 하는 판단 결과(이것은 고양이/개입니다) 데이터를 입력해주면, 컴퓨터가 알아서 판단 알고리즘을 모델링 하는 것입니다.

사실 엄밀히 말하면 컴퓨터가 알아서 하는 것은 없습니다. 컴퓨터가 알아서 모델링 하는 것도 사람이 여러가지 기계학습 방법을 만든 것입니다. 어떻게 하면 효율적으로 컴퓨터가 학습을 할 수 있을까를 연구하는 것이 인공지능(AI) 분야의 핵심이라고 생각됩니다.

 

이러한 방법론에는 지도학습, 비지도학습, 강화학습, 그 외 엄청나게 많은 방법론들이 있습니다. 다음에 하나씩 공부하며 포스팅 해보도록 하겠습니다.

 

 

딥러닝이란?

 

딥러닝은 인간 두뇌의 생물학적 신경망에서 영감을 얻어서 만든 머신러닝의 여러 방법론 중의 하나입니다. 딥러닝이 머신러닝 분야에서 너무 핫해서 일반인들에게는 거의 동일 시 되기도 하죠.

 

deep neural networks, convolutional deep neural networks, deep belief networks와 같은 다양한 딥 러닝 기법들이 컴퓨터 비전, 음성인식, 자연어 처리, 음성/신호처리 등의 분야에 적용되어 최첨단의 결과들을 보여주고 있습니다.

 

2016년 3월 한국을 떠들썩 하게 했던 알파고(AlphaGo)도 딥러닝 기술을 활용한 바둑 프로그램입니다.

 

딥러닝만 해도 엄청난 방법론들이 있고 그 개념이 어렵고 방대해서 이 부분도 추후 공부하며 포스팅 하도록 하겠습니다.

 


<참고 자료>

 

https://www.zendesk.kr/blog/machine-learning-and-deep-learning/

 

딥 러닝과 머신 러닝의 차이

By Brett Grossfeld, 콘텐츠 마케팅 부관리자 Published 2020-01-23 마지막 업데이트 날짜 2020-07-20

www.zendesk.kr

 

 

 

 

 

반응형

+ Recent posts