Scikit-learn 의 datasets 서브 패키지에는 회귀 분석 시험용 가상 데이터를 생성하는 명령어인 make_regression()
이 있다.
make_regression()
는 다음과 같은 입출력 요소를 가진다.
n_samples
: 정수 (옵션, 디폴트 100)n_features
: 정수 (옵션, 디폴트 100)n_targets
: 정수 (옵션, 디폴트 1)n_informative
: 정수 (옵션, 디폴트 10)effective_rank
: 정수 또는 None (옵션, 디폴트 None)tail_strength
: 0부터 1사이의 실수 (옵션, 디폴트 0.5)effective_rank
가 None이 아닌 경우 독립 변수간의 상관 관계 형태를 결정하는 변수bias
: 실수 (옵션, 디폴트 0.0)noise
: 실수 (옵션, 디폴트 0.0)coef
: 불리언 (옵션, 디폴트 False)random_state
: 정수 (옵션, 디폴트 None)X
: [n_samples
, n_features
] 형상의 2차원 배열y
: [n_samples
] 형상의 1차원 배열 또는 [n_samples
, n_targets
] 형상의 2차원 배열coef
: [n_features
] 형상의 1차원 배열 또는 [n_features
, n_targets
] 형상의 2차원 배열 (옵션)coef
가 True 인 경우에만 출력됨예를 들어 독립 변수가 1개, 종속 변수가 1개 즉, 선형 모형이 다음과 같은 수식은 경우
$$ y = C_0 + C_1 x + e $$이러한 관계를 만족하는 표본 데이터는 다음과 같이 생성한다.
In [7]:
from sklearn.datasets import make_regression
In [50]:
X, y, c = make_regression(n_samples=10, n_features=1, bias=0, noise=0, coef=True, random_state=0)
print("X\n", X)
print("y\n", y)
print("c\n", c)
plt.scatter(X, y, s=100)
plt.show()
위 선형 모형은 다음과 같다.
$$ y = 100 + 79.1725 x $$noise
인수를 증가시키면 $\text{Var}[e]$가 증가하고 bias
인수를 증가시키면 y 절편이 증가한다.
In [51]:
X, y, c = make_regression(n_samples=50, n_features=1, bias=100, noise=10, coef=True, random_state=0)
plt.scatter(X, y, s=100)
plt.show()
이번에는 n_features
즉, 독립 변수가 2개인 표본 데이터를 생성하여 스캐터 플롯을 그리면 다음과 같다. 종속 변수 값은 점의 명암으로 표시하였다.
In [68]:
X, y, c = make_regression(n_samples=300, n_features=2, noise=10, coef=True, random_state=0)
plt.scatter(X[:,0], X[:,1], c=y, s=100)
plt.xlabel("x1")
plt.ylabel("x2")
plt.axis("equal")
plt.show()
만약 실제로 y값에 영향을 미치는 종속 변수는 하나 뿐이라면 다음과 같이 사용한다.
In [69]:
X, y, c = make_regression(n_samples=300, n_features=2, n_informative=1, noise=0, coef=True, random_state=0)
plt.scatter(X[:,0], X[:,1], c=y, s=100)
plt.xlabel("x1")
plt.ylabel("x2")
plt.axis("equal")
plt.show()
만약 두 종속 변수가 상관관계가 있다면 다음과 같이 생성하고 스캐터 플롯에서도 이를 알아볼 수 있다.
In [74]:
X, y, c = make_regression(n_samples=300, n_features=2, effective_rank=1, noise=0, tail_strength=0, coef=True, random_state=0)
plt.scatter(X[:,0], X[:,1], c=y, s=100)
plt.xlabel("x1")
plt.ylabel("x2")
plt.axis("equal")
plt.show()
In [72]:
X, y, c = make_regression(n_samples=300, n_features=2, effective_rank=1, noise=0, tail_strength=1, coef=True, random_state=0)
plt.scatter(X[:,0], X[:,1], c=y, s=100)
plt.xlabel("x1")
plt.ylabel("x2")
plt.axis("equal")
plt.show()