contents
summary
연속형 데이터: 두 개의 값이 무한한 개수로 나누어진 데이터
ex) 키, 몸무게
이산형 데이터: 두 개의 값이 유한한 개수로 나누어진 데이터
ex) 주사위 눈, 나이
ex) 학점,등급
2. 명목형 자료: 자료의 순서 의미가 없음
ex) 혈액형, 성별
☑️ 범주형 데이터 실습-머신러닝 모델에 데이터를 훈련시킬려면 해당 데이터를 숫자로 바꿔야함
-성별, 날짜 와 같은 데이터를 범주형 데이터라고 부르며 이를 임의로 0,1 등에 숫자로 바꿀 수 있음. 이를 Encoding 과정이라 함
1) 범주형 데이터 인코딩
2) 훈련
3) 학습
4) 평가
tips_df.head(3)
# Female 0, Male 1
def get_sex(x):
if x == 'Female':
return 0
else:
return 1
#apply함수는 매 행을 특정한 함수 적용
tips_df['sex_en']=tips_df['sex'].apply(get_sex)
tips_df.head(3)
#모델 설계도 가져오기
model_lr3 = LinearRegression()
x = tips_df[['total_bill','sex_en']]
y = tips_df['tip']
x.head(3)
#학습
model_lr3.fit(x,y)
#예측
y_pred_tip2 = model_lr3.predict(x)
y_pred_tip2[:3]
array([2.72117624, 1.99477235, 3.1176016 ])
#단순선형회귀 mse: x변수가 전체 금액
#다중선형회귀 mes: x변수가 전체 금액, 성별
print('단순선형회귀', mean_squared_error(y_true_tip, y_pred_tip))
print('다중선형회귀', mean_squared_error(y_true_tip, y_pred_tip2))
단순선형회귀 1.036019442011377
다중선형회귀 1.0358604137213614
print('단순선형회귀', r2_score(y_true_tip, y_pred_tip))
print('다중선형회귀', r2_score(y_true_tip, y_pred_tip2))
단순선형회귀 0.45661658635167657
다중선형회귀 0.45669999534149974
#원래는 밑에 그래프를 그려보면서 전체 데이터가 얼마나 차이가 있는지 확인하는 과정이 필요했다.
sns.barplot(x='sex', y='tip', data=tips_df)
plt.title('Sex & Tip')
plt.xlabel('Sex')
plt.ylabel('Tip')
만약 위에서 예시를 들었던 Weight, Height 가지고 다른 Y(이를 테면 발사이즈)를 예측한다면 Weight, Height가 연관있는 변수이기 때문에 다중공선성 문제가 나타난다.
-Weight vs Height 산점도
sklearn.linear_model.LinearRegression
insight
선형회귀의 경우 선형관계가 없다면 유의미한 결과를 얻기에 다소 무리가 있다. 사실 우리 주변의 데이터는 뚜렸한 직선의 형태를 보이지 않는 경우가 다수이기에 실제 데이터에 선형회귀 모델을 적용하는 것은 무리가 있지 않을까 하는 생각이든다.
하지만, 기본적인 지식이고, 이로인해 다른 모델을 이해하기에 훨씬 용이하기에 개념과 과정에 대해 잘 알아두는 것은 필수적으로 보인다.