일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SQL
- 군집화
- 팀프로젝트
- da
- 서브쿼리
- 데이터분석
- cross join
- 최종 프로젝트
- 프롬프트 엔지니어링
- Chat GPT
- data analyst
- 프로젝트
- 전처리
- 머신러닝
- pandas
- GA4
- 기초프로젝트
- lambda
- 크롤링
- 기초통계
- 데이터 분석
- 히트맵
- SQLD
- jd
- If
- 시각화
- Python
- 클러스터링
- streamlit
- 태블로
Archives
- Today
- Total
세조목
머신러닝 - 단순&다중선형회귀(24.01.30) 본문
단순선형회귀
1. LinearRegression 함수 가져오기
from sklearn.linear_model import LinearRegression
2. 독립변수, 종속변수 준비
X = body_df[['weight']]
y = body_df[['height']]
3. 학습시키기
model_lr = LinearRegression()
model_lr.fit(X=X, y=y)
4. 가중치 & 편향 구하고 변수에 넣기
w1 = model_lr.coef_[0][0] <- 가중치
w0 = model_lr.intercept_[0] <- 편향
5. 선형회귀식 출력
print('y={}x + {}'.format(w1.round(2), w2.round(2)))
→ y = 0.86x + 109.37
6. MSE(Mean Squared Error) 구하기
1) 에러값(실제값 - 예측값) 각각 계산하기
2) 에러값 제곱(for 음수 제거)
3) 모두 더하고 평균 구하기(= MSE 구하기)
1) 에러값(실제값 - 예측값) 각각 계산하기
body_df['pred'] = body_df['weight'] * w1 + w0 <- 예측값 계산
body_df['error'] = body_df['height] - body_df['pred] <- 에러값 구하기
2) 에러값 제곱(for 음수 제거)
body_df['error^2'] = body_df['error'] * body_df['error']
3) 모두 더하고 평균 구하기
body_df['error^2'].sum() / len(body_df)
>>> 10.152939045376309
7. 산점도 그래프와 선 그래프로 표현하기
sns.scatterplot(data = body_df, x='weight', y='height')
sns.lineplot(data = body_df, x='weight', y='pred', color = 'red')
8. 선형회귀 모델 평가
1) 라이브러리 import
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
또는
from sklearn.metrics import mean_squared_error, r2_score
2) MSE와 r2_score 구하기
MSE는 앞에서 살펴본것과같이
- 예측값을 바탕으로 오류값 구하고
- 제곱해서
- 평균 구하면 되지만
y_true = body_df['height']
y_pred = body_df['pred']
mean_squared_error(y_true, y_pred)
실제값은 y_true 변수에,
예측값은 y_pred 변수에
넣어준 후
mean_squared_error(y_true, y_pred)
함수를 사용해서 구할수도 있음
MSE가 0에 가까울수록 추측한 값이 원본에 가까운 것이기 때문에 정확도가 높다고 할 수 있다.
MSE를 구할 수 있는 방법이 한 가지 더 있는데 predict 메서드를 활용하는 것이다.
predict 메서드는 예측값을 구해주는 함수로
y_pred2 = model_lr.predict(body_df[['weight']])
>>> array([[184.40385835],
[179.22878362],
[180.09129608],
[188.71642061],
[186.99139571],
[161.97853455],
[183.54134589],
[166.29109682],
[168.87863418],
[168.87863418]])
위와 같이 배열 형태로 출력된다.
앞에서와 마찬가지로 mean_squared_error 함수를 사용하면 MSE를 구할 수 있다.
mean_squared_error(y_true, y_pred2)
>>> 10.152939045376309
그래서 MSE를 구하는 방법은 총 세가지로 정리할 수 있다.
1. body_df['error^2'].sum() / len(body_df)
2. mean_squared_error(y_true, y_pred)
* 예측값을 나타내는 pred컬럼을 별도로 만들어준 후 mean_squared_error 함수 사용
3. mean_squared_error(y_true, y_pred2)
* LinearRegression() 함수의 predict 메서드 사용해서 예측값 구하고, mean_squared_error 함수 사용
r2_score는
r2_score(y_true, y_pred)
>>> 0.8899887415172141
로 구할 수 있음
r2_score는 0과 1 사이에 존재하며
1에 가까울수록 모델이 데이터를 완벽하게 설명한다는 것을 의미한다.
다중선형회귀
독립변수를 2개 이상 넣고싶을때는
다중선형회귀를 사용하면 된다.
1. dataset 불러오기
tips_df = sns.load_dataset('tips')
* seaborn 라이브러리에서 자체적으로 제공하는 dataset 中 'tips' 를 사용한다
2. 인코딩(sex 컬럼 값을 0 또는 1로 바꾸기)
def get_sex(x):
if x == 'Female':
return 0
else:
return 1
3. 인코딩한 컬럼 추가하기
tips_df['sex_en'] = tips_df['sex'].apply(get_sex)
4. 독립 변수 & 종속 변수 지정
X = tips_df[['total_bill', 'sex_en']]
y = tips_df[['tip']]
5. 모델 학습시키기
model_rl3 = LinearRegression()
model_rl3.fit(X,y)
6. 예측값 구하기
y_pred_tip2 = model_rl3.predict(X)
>>> array([[2.70463616],
[2.00622312],
[3.12683472],
[3.40725019],
[3.5028225 ]])
7. MSE & r2 score 단순선형회귀, 다중선형회귀 비교
1) MSE
# 단순선형회귀
mean_squared_error(y_true_tip, y_pred_tip)
>>> 1.036019442011377
# 다중선형회귀
mean_squared_error(y_true_tip, y_pred_tip2)
>>> 1.0358604137213614
2) r2 score
# 단순선형회귀
r2_score(y_true_tip, y_pred_tip)
>>> 0.45661658635167657
# 다중선형회귀
r2_score(y_true_tip, y_pred_tip2)
>>> 0.45669999534149974
'데이터 분석 공부 > 머신러닝' 카테고리의 다른 글
머신러닝 - 의사결정나무, 랜덤포레스트, KNN, 부스팅 알고리즘(24.02.02) (1) | 2024.02.02 |
---|---|
머신러닝 - 전처리(인코딩, 스케일링)에서부터 로지스틱 회귀를 적용한 예측 모델 생성까지(feat. 선형회귀와 로지스틱 회귀의 차이, 스케일링의 정규화와 표준화는 각각 언제 사용하는지)(24.02.. (0) | 2024.02.02 |
머신러닝 - 데이터 분리(feat. 과적합)(24.02.01) (0) | 2024.02.01 |
머신러닝 - 전처리(인코딩, 스케일링)(24.02.01) (0) | 2024.02.01 |
머신러닝 - 로지스틱회귀(24.01.31) (0) | 2024.01.31 |