작성
·
399
0
p.327쪽에서
위와 같이 lr.coef_ 의 회귀계수 값과 X_data.columns 의 피처 변수명을 맵핑시키는 데.. 이게 제대로 맵핑되는 원리가 무엇인가요?
lr에 이미 X_data도 학습을 시켜 놓았으니 각 회귀계수별 피처명 정보가 어딘가에 들어가 있는 것이고, 이를 X_data.columns로 뽑아온다...? 맞나요..?
답변 1
0
안녕하십니까,
LinearRegression 객체인 lr의 회귀계수 속성 값인 coef_ 는 lr이 학습 데이터 피처들에 대해서 순차적으로 회귀 계수를 가지고 있습니다.
즉 회귀 계수값: [ -0.1 0.1 0. 3. -19.8 3.4 0. -1.7 0.4 -0. -0.9 0. -0.6] 에서
-0.1은 첫번째 피처, 0.1은 두번째 피처, 0은 세번째 피처의 회귀 계수를 의미합니다.
기본적으로 사이킷런 모델이 학습하는 데이터 세트는 numpy ndarray 입니다. numpy ndarray는 피처명을 가지고 있지 않습니다. 학습 데이터를 DataFrame으로 하여도 numpy ndarray로 변환되어 모델이 학습됩니다.
DataFrame은 컬럼명(피처명)을 가지고 있기 때문에 피처순을 피처명으로 변환할 수 있습니다.
X_data는 학습에 사용된 DataFrame이고 X_data.columns는 피처순으로 피처명을 가지고 있습니다.
즉 X_data.columns는
Index(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='object')
가 되는데 이를 이용해서 피처순으로 피처명을 매핑하는 겁니다. X_data.columns가 Index이므로 이를 Series로 변환하면 아래와 같이 변환될 수 있습니다.
coeff = pd.Series(data=np.round(lr.coef_, 1), index=X_data.columns )
이렇게 변환된 Series는 내림차순 정렬등으로 회귀 계수가 큰 값으로 정렬하여 쉽게 표현될 수 있도록 coeff.sort_values(ascending=False) 를 적용한 것입니다.
혹 이해가 안되는 부분이 있으면 다시 글 부탁드립니다.
감사합니다.