본문 바로가기

머신러닝, 딥러닝

선형회귀에서 2차원 array를 사용하는 이유

 

from sklearn.linear_model import LinearRegression # 1. choose model class
model  = LinearRegression() # 2. instantiate model
feature = ['feature_A']
target = ['feature_A']

#타겟 벡터 만들기
X_train = df[feature_B]
y_train = df[feature_B]
model.fit(X_train, y_train) # 3. fit the model to your data

# 전체 데이터를 모델을 통해 예측하기
X_test = [[x] for x in select_df['']]
y_pred = model.predict(X_test)

선형 회귀에서Train, Test 데이터를 구할 때 결과적으로

X_train = df[[feature_B]] 
y_train = df[[feature_B]]

와 같은 열벡터 형식을 사용하게 되는데,

노란색이 타겟 피쳐, 주황색이 훈련시킬 피쳐이다

데이터에서 훈련 대상으로 삼을 피쳐를 골라

X_train = df['feature'] 과 같이 해버리면 오류가 뜬다. 

1차원 형식이다.

ValueError: Expected 2D array, got 1D array instead: array=[1180 2570 770 ... 1020 1600 1020]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

최소제곱법은 훈련을 시키는 독립변수(x)와 타깃인 y(종속변수) 2개가 존재하기 때문에,

회귀선(예측선)을 계산할 때

y = ax + b 와 같은 일차식을 사용한다.

이를 계산하기 위해

2차원 벡터나 행렬을 사용한다.

2차원 행렬을 train 데이터로 쓰면 역행렬을 써서 회귀선의 기울기와 절편을 구하기 쉽기 때문이다.

따라서 Train 데이터는 2차원이어야 한다.

 

2차원

df[feature].reshape(-1, 1) #방법 1
df[[feature]] #방법 2

로 2차원 벡터를 만들어준다.