다항 회귀를 사용하여 학습한 모델이 여전히 과소적합이 나왔다.
이 문제를 해결하려면 제곱보다 더 고차항을 넣어야 할 것 같은데
수동으로 제곱, 세제곱 등등 고차항 데이터를 넣기 힘들다...
어디까지 제곱하여 항을 추가해야 적절한지 판단하기도 어렵다.
선형 회귀는 특성이 많을수록 엄청난 효과를 내기 때문에
사이킷런의 PolynomialFeatures 클래스를 사용하여
여러가지 특성을 추가해보자.
여러개의 특성을 사용한 선형 회귀를 다중 회귀라고 한다.
1개의 특성을 사용했을 때 선형 회귀 모델이 학습하는 것은 직선이다.
2개의 특성을 사용했을 때 학습하는 것은 평면이다.
특성이 2개면 3차원 공간을 형성하는데 특성이 3개일 경우는 어떨까?
특성이 너무 늘어나서 4차원 공간 이상을 그리게 되면
우리가 상상하거나 그릴 수 없다.
이를 위한 규제가 필요하다.
예를 들어 '농어의 길이 * 농어의 높이'로
2개의 특성으로 2차항인 데이터를
'농어의 넓이'라는 1차항 데이터로 차원을 줄일 수 있다.
이렇게 기존의 특성을 사용하여 새로운 특성을 뽑아내는 것을 특성 공학이라고 한다.
여러개인 특성의 데이터를 다루기 위해 판다스 라이브러리를 사용할 것이다.
판다스는 R 패키지를 모티브로 하여 만든 데이터 분석 라이브러리이다.
판다스의 핵심 데이터 구조가 데이터 프레임이라고 한다.
데이터 프레임은 행과 열로 이루어진 표를 말한다.
판다스는 R 패키지와 같고 데이터 프레임은 RDB의 테이블과 같다.
1 스칼라(상수)
1 2 3 4 벡터(1차원 배열)
판다스에서 1차원 배열을 시리즈(Series)라고 한다.
그리고 시리즈가 모인 2차원 배열을 데이터프레임이라고 하는 것이다.
데이터 프레임은 2차원, 3차원을 다루는데 특화되어있다.
1차원 배열을 만들어보자.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
s = pd.Series([1, 3, 5, np.nan, 6, 8]) # nan = null
print(s)
이 s 배열로 나중에 학습을 하기 위해서는 NaN값을 제거해주는 작업이 필요하다.
이때 NaN을 결측값이라고 한다.
1차원 배열을 만들었는데 자동으로 0부터 시작하는 인덱스가 붙었다.
인덱스도 시리즈, 우리가 만들어준 배열도 시리즈,
두개의 시리즈가 합쳐진 데이터프레임이 생성되었다.
s2 = pd.Series(['남', '여', '여', '남'])
print(s2)
다음과 같은 데이터를 나중에 분석하려면
남, 여값을 숫자로 치환해줘야 한다.
즉 정수화하는 데이터 전처리가 필요한것이다.
[출처]