자녀의 키 예측
부모의 키를 사용해 자녀의 키 예측하는 회귀 모델 작성
아들키 예측
# 이건 작성 안 해도 됨
# 나중에 줄 것임
import pandas as pd
data_train = {'아빠' : [175, 180, 172, 174, 178, 168, 173, 177],
'엄마' : [160, 158, 155, 161, 163, 160, 168, 167],
'아들' : [178, 182, 175, 180, 183, 174, 179, 183],
'딸' : [163, 168, 157, 164, 167, 158, 169, 169]}
df = pd.DataFrame(data_train)
# 인덱스는 id
df.index.name = 'id'
# 입력값
df[['아빠', '엄마']].to_csv('X_train.csv')
# 출력값
df[['아들']].to_csv('Y1_train.csv')
# 혼자 실습할 때 사용하기
df[['딸']].to_csv('Y2_train.csv')
# 변경가능
data_test = {'아빠' : [174, 179, 180],
'엄마' : [160, 160, 160]}
df2 = pd.DataFrame(data_test)
df2.index.name = 'id'
df2.to_csv('X_test.csv')
# [0] train, test 파일 가져오기
X_train = pd.read_csv('X_train.csv')
Y1_train = pd.read_csv('Y1_train.csv')
X_test = pd.read_csv('X_test.csv')
# 확인하는 작업 필요
print(X_train)
id 아빠 엄마
0 0 175 160
1 1 180 158
2 2 172 155
3 3 174 161
4 4 178 163
5 5 168 160
6 6 173 168
7 7 177 167
corr() : 상관관계 확인
# [1] 아빠, 엄마, 아들 키의 상관관계
# 양의 상관관계, 1에 가까울 수록 관계 큼
# 아빠가 가장 강함
df = X_train.copy()
df['아들'] = Y1_train['아들']
print(df.corr())
id 아빠 엄마 아들
id 1.000000 -0.223880 0.773127 0.168862
아빠 -0.223880 1.000000 0.133983 0.895192
엄마 0.773127 0.133983 1.000000 0.491595
아들 0.168862 0.895192 0.491595 1.000000
X: 아빠, 엄마의 키
Y1 : 아들의 키
Y2 :딸의 키
# [2] 데이터 지정하기
# 아빠, 엄마의 키를 사용해 아들의 키를 예측 (X=[아빠, 엄마], Y1=[아들])
# 나중에는 평가 데이터도 나눔
X = df[['아빠','엄마']]
Y1 = df['아들']
print(Y1)
0 178
1 182
2 175
3 180
4 183
5 174
6 179
7 183
Name: 아들, dtype: int64
model.fit(엄마와 아빠 키, 예측 키)
# [3] 아들 키를 예측하는 모델 만들어 분석하기
# 이런 코드를 암기해야 함
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X,Y1)
LinearRegression()
model.score(엄마와 아빠 키, 예측 키)
# [4] 아들 모델 성능 평가하기
# 회귀모델에서는 R2 스코어 확인
# 1에 가까울 수록 좋음
model.score(X,Y1)
0.9420204329984175
mode.predict(엄마와 아빠 키)
# [5] 결과를 표로 작성하기 (예측, 오차)
# 모델 예측 반드시 2차원이어야 함
result = df[['아빠', '엄마','아들']]
result['아들예측'] = model.predict(X)
result['아들오차'] = result['아들'] - result['아들예측']
result
아빠 엄마 아들 아들예측 아들오차
0 175 160 178 179.091446 -1.091446
1 180 158 182 182.354761 -0.354761
2 172 155 175 175.281252 -0.281252
3 174 161 180 178.618029 1.381971
4 178 163 183 182.304154 0.695846
5 168 160 174 173.686325 0.313675
6 173 168 179 179.937067 -0.937067
7 177 167 183 182.726965 0.273035
# [6] 새로운 데이터로 예측하기
아빠키 = int(input('아빠키를 입력해 주세요 : '))
엄마키 = int(input('엄마키를 입력해 주세요 : '))
# X 순서와 동일해야 함
data = [[아빠키, 엄마키]]
아들키 = model.predict(data)
print(f'아들의 예상키는 {아들키[0]}입니다')
아빠키를 입력해 주세요 : 181
엄마키를 입력해 주세요 : 155
아들의 예상키는 182.23069314463976입니다
# [7] 새로운 데이터로 확인하기 - X_test.csv 로 확인하기
# X 데이터에는 id 칼럼이 없다
print(X_test)
id 아빠 엄마
0 0 174 160
1 1 179 160
2 2 180 160
Xt = X_test[['아빠','엄마']]
print(Xt)
# 0, 1, 2의 결과
model.predict(Xt)
아빠 엄마
0 174 160
1 179 160
2 180 160
array([178.31928593, 182.18008636, 182.95224644])
'빅데이터 분석기사 > 작업 유형 2 (ML)' 카테고리의 다른 글
모델 학습, 평가, 예 (0) | 2023.06.02 |
---|---|
scikit-learn libraray 사용, 데이터 분할 (0) | 2023.06.01 |
머신러닝 용어 이해 (0) | 2023.05.31 |
Mini Project - 회귀식, 상관계수, 절편확인 객체 파일로 저장 (0) | 2023.05.31 |
Machine Learning 사전 학습 1 전처리, 탐색, 타입 확인, 인코딩 (0) | 2023.05.27 |