머신러닝, 딥러닝에서 중요한 것은 바로 코드를 짤 줄 알아야 한 다는 것
전체 시간의 80%는 데이터 분석 및 전처리, 15%는 결과분석, 머신러닝은 단 5% 정도이다.
코딩에 막혀서 모델링을 하지 못하는 것이 제일 문제
우선 사용하고, 그 다음에 배워야 한다 (권고)
오늘은 1일차이고 처음 머신러닝을 접하는 만큼 코드 반복 숙달 위주로 진행
규칙 : 1 → 3
, 2 → 5
, 3 → 7
, 4 → 9
알고 싶은 것 : 5 → ?
여기서 규칙은 y = 2x + 1
이며 문제의 정답은 11임을 알 수 있다.
이렇게 주어진 학습데이터를 바탕으로 모델(규칙)을 만들어 정답을 추출하도록 하는 것이 머신 러닝이다.
실제로는 현실의 복잡한 데이터가 주어지므로 딱딱 맞아 떨어지는 답을 낼 순 없다. 대신 최대한 정답에 근접한 답을 도출하는 것을 목표로 한다.
과제를 명확히 파악하는 것이 중요하다.
과제에 따라 사용하는 알고리즘, 평가방법이 모두 달라지기 때문에 잘못하면 과정 전체가 잘못된다.
분류와 회귀를 구분하는 팁
- 두 값 사이의 중간 값이 의미가 있는가? -> 있다면 회귀 문제
- 가입여부 0, 1의 중간값 0.5는 아무 의미가 없지만, 온도 20도, 40도 사이의 30도는 의미가 있음
- 두 값 사이의 연산 결과가 의미가 있는가?
df.dropna()
메서드를 사용한다.axis=0
이면 결측치가 포함된 행을, axis=1
이면 결측치가 포함된 변수를 삭제한다.subset=
옵션을 통해 선택된 열의 결측치만 처리할 수 있다. (다른 열에 결측치가 있어도 제거하지 않음)결측치를 제거하지 않고, 주변값을 이용해 채우는 방법이다.
주로 df.fillna()
메서드를 이용한다.
df[column].fillna(var_mean)
으로 채운다df[column].fillna(최빈값)
으로 채운다.df.fillna(method=<채울 방법>)
으로 앞, 뒤값을 이용해 결측치를 채울 수 있다.method='ffill'
: 위쪽의 행에서 값을 가져와 결측치를 채운다.method='bfill'
: 아래쪽의 행에서 값을 가져와 결측치를 채운다.df.interpolate(method='linear')
로 선형보간법으로 결측치를 채울 수 있다.판다스가 제공하는 get_dummies
함수를 통해 가변수화가 가능하다.
data = pd.get_dummies(data, columns=<cols>, drop_first=<bool>
가변수화를 하는 목적은 크게 2가지가 있다.
1. 문자열(object) 자료형의 범주형 데이터를 숫자 자료형으로 변환
1, 2, 3, 4...
와 같은 값을 가진 범주 데이터는 머신러닝에서 연속형 변수와 동일하게 인식되기 때문에, 가변수화를 통해 범주별로 독립된 열을 만들어 해결가변수화는 오직 머신러닝을 위한 데이터 처리기 때문에, 데이터 분석 및 전처리를 모두 끝내고 머신러닝을 하기 직전 마지막으로 처리해주면 된다.
인덱스 | A | B | C |
---|---|---|---|
0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 |
2 | 0 | 1 | 0 |
3 | 0 | 0 | 1 |
여기서 A 변수의 값을 몰라도 B, C의 값을 알면 A가 1인지 0인지 유추할 수 있다.
즉 변수 A는 B, C에 종속되어있다고 할 수 있다.
공선성 제거가 필수는 아니지만, 일부 알고리즘에서 제거하는 것이 성능에 유리한 경우가 있다.
get_dummies()의 drop_first=True
옵션을 통해 첫번째 변수를 제거함으로써 공선성을 제거할 수 있다.
머신러닝에서는 행과 열이 아니라 다음과 같이 부르자.
평가용 데이터(Test Data)
학습 데이터 (Train Data)
검증용 데이터 (Validation Data)
데이터 분리 : 하나의 dataframe으로 부터 학습용 데이터(x, y), 평가용 데이터(x, y)를 각각 분리해 내는 것
이번 수업 과정에서는 검증용 데이터 없이 학습-평가데이터로만 나누도록 한다.
크게 5단계로 나눌 수 있다.
model.fit(x_train, y_train)
형태로 학습시킨다.model.predict(x_test)
형태로 학습을 바탕으로 한 예측값을 확인한다.학습함수(정답 데이터, 예측 데이터)
형태로 학습의 결과를 점수로 산출하여 평가한다.# 1단계 : 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# 2단계 : 선언하기
model = LinearRegression()
# 3단계 : 학습하기
model.fit(x_train , y_train)
# 4단계 : 예측하기
y_pred= model.predict(x_test)
# 5단계 : 평가하기
print(mean_absolute_error(y_test, y_pred))