상세 컨텐츠

본문 제목

[PLAYDATA] 데이터 엔지니어링 9월 2주차 9/6

PLAYDATA/PLAYDATA데일리노트

by Na느님 2023. 9. 6. 15:09

본문

  • 9월 6일
이제부터 머신러닝 수업을 들어가기 시작했다. 오늘은 처음이니 머신러닝의 기본 개념 위주로 배운다.

 

 

머신러닝의 분류
지도학습: target값(y)-선형회귀/로지스틱회귀/결정나무/KNN, Kmeans, ...
반지도학습(강화학습): 보상
비지도학습: target값 존재하지않음

Tip)
Feature Matrix: 입력역할(x1, x2, ...)
Target Vector: 출력역할 (y)
np.random.rand(m,n): 0부터1사이의 값을 랜덤으로 반환(mxn행렬로)

(주의!) 머신러닝을 이용할 때 데이터 형태는 DataFrame형태가 아니라 np.ndarray형태여야 한다!

<np.ndarray_data> = <df_name>[<column_list>].to_numpy()

선형회귀
from sklearn.linear_model import LinearRegression
LinearRegression()함수로 선형회귀 객체 생성
fit_intercept옵션은 모형에 상수항이 있는가 없는가를 결정

Tip) sklearn 라이브러리는 Python의 머신러닝 라이브러리로, 딥러닝보다는 데이터 전처리고전적 ML알고리즘(SVM, 결정트리 등)을 매우 편리하게 사용할 수 있는 라이브러리이다.

numpy의 reshape함수?
대상의 차원을 변형시키는 함수이다.
예를들어 np.reshape(x, (2,4))는 x리스트를 2x4 행렬로 변환시킨다.
차원을 -1로 지정하면, -1이 아닌 차원(행 or 열)에 맞춰서 알아서 행렬모양이 잡힌다.

(주의!) reshape함수는 대입연산자(=)를 사용해야 reshape가 적용된 행렬이 저장된다!

reshape가 적용될 대상이 list자료형 이라면 np.reshape(<list>, (m, n))형식으로 사용하고,

대상이 array자료형 이라면 <array>.reshape(m, n)으로 사용한다.
Tip) np.array(<list>)함수를 사용하면,

a) 1차원 list를 argument로 넣으면 nx1행렬이 만들어진다.

b) 2차원 list를 argument로 넣으면 nxm행렬이 만들어진다.

행렬의 차원은 <matrix_by_np>.shape로 확인 가능.



regression객체의 멤버변수, 멤버함수들
regr = LinearRegression([fit_intercept=T/F]) 명령어로 regr이라는 선형회귀 객체를 먼저 만든다.
regr.fit(x, y): 입력, 출력 벡터를 가지고 선형학습을 한다.
regr.coef_: 가중치 벡터값(기울기)
regr.intercept_: 상숫값(y절편)
regr.predict(input1, input2, ...): 새로운 독립변수 값(2차원 이상이면 list)에 대한 예측된 y값
-> 여기서 predict함수의 argument는 보통 linspace함수를 이용해서 일정한 간격을 가진 element의 list를 사용
np.linspace(start,stop,num): start는 시작값, stop은 끝값, num은 element갯수(기본값=50)


Mean Squared Error 구하기
from sklearn.metrics import mean_squared_error
mean_squared_error(y, y_predicted): 분산을 구한다
-> 표준편차를 구하려면 np.sqrt()함수를 사용.

 


데이터의 구분
훈련데이터/테스트데이터
훈련데이터는 다시 훈련/검증데이터로 나뉨
훈련(training)데이터: 모델 구축을 위한 데이터
검증(validation)데이터: 모델 성능향상
테스트(test)데이터: 성능평가


column의 값들 인코딩(숫자화)하기
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder() 명령어로 인코더 객체 생성
encoder.fit_transform(<Series>)를 통해 인코딩된 series반환


데이터(행) 분할
from sklearn.model_selection import train_test_split
train_test_split(<table_X>[, table_Y][, test_size][, train_size][, random_state = <n>][, shuffle=T/F][, stratify=target_name])
table: 분할 대상이 될 테이블(DataFrame 등)
test_size: 테스트용 테이블의 비율(float)이나 갯수 (기본값=0.25)
train_size: 훈련용 테이블의 비율(float)이나 갯수 (기본값=test_size의 나머지)
random_state: 셔플의 시드값
shuffle: 셔플할지 말지 결정
stratify: 쪼개기 전 target_name의 비율과 쪼개진 각각의 table의 target_name비율이 일정하게 유지됨.
반환값(순서 지켜야함!): X_train, X_test, Y_train, Y_test (하나의 큰 배열에 각각 unpacked되어서 대입됨)

-> X_train, X_test 이렇게만 반환도 가능(table_Y부분을 생략하면 된다)
예시) X_train, X_test, Y_train, Y_test = train_test_split(...)


교차검증
교차검증이란 전체 데이터 세트 중에서 파티션을 다르게 해 가면서 반복적으로 학습/테스트를 하는 작업이다.
-> 교차검증을 통해 많은 데이터들을 학습용으로 사용할 수 있다.


교차검증의 종류
k폴드 교차 검증
훈련 데이터 셋(training+validation)을 k개의 동일한 단위(폴드라고 부른다)로 나누고 각 폴드들을 한 번씩 테스트 데이터 셋으로 하는 것이다.
1. 훈련세트를 k개의 폴드로 나눈다.
2. k개의 폴드 중 첫 번째 폴드를 validation, 나머지 폴드들을 training으로 사용한다.
3. test데이터로 평가한다.
4. 두 번째 폴드부터 k번째 폴드까지 2번부터 반복한다.
5. k개의 test결과들을 평균내어 최종성능을 도출한다.

단일 관측치 제거 방식(LOOCV-Leave-One-Out-Cross-Validation)
데이터(row)가 n개 있을 때, 단 하나의 데이터만 test데이터로 사용하고 나머지 n-1개는 training+validation으로 사용하는 방법
n개의 성능지표가 필요하다.
훈련데이터 비중이 매우 높기 때문에 overfitting가능성 큼


CRISP-DM

CRISP-DM은 많이 사용되는 데이터마이닝 표준 방법론이다.

1. Business Understanding

2. Data Understanding

3. Data Preparation

4. Modeling

5. Evaluation

6. Deployment

 

Business Understanding

업무 목표 수립

현재 상황 평가

마이닝 목표 수립

프로젝트 계획 수립

 

Data Understanding

초기 데이터 수집

데이터 기술

데이터 탐색

데이터 품질 검증

 

Data Preparation

데이터 설정

데이터 선택

데이터 정제

데이터 생성

데이터 통합

데이터 형식 적용

 

Modeling

모델링 기법 선택

테스트 설계 생성

모델 생성

모델 평가

 

Evaluation

결과 평가

프로세스 재검토

향후 단계 결정

 

Deployment

전개 계획 수립

모니터링/유지보수 계획 수립

최종 보고서 작성

프로젝트 재검토

 

 

 

 

 

 

 

 

 

 

관련글 더보기