카테고리 없음

ML_01 (Mini Project s3-03)

쿠룽지 2023. 11. 5. 23:03
728x90
반응형
728x90

 

 

부모의 키를 사용하여 자녀의 키를 예측하는 회귀 모델 작성

 

- 아들 키 예측

 

초기 데이터---------------------------------

data_train = 아빠, 엄마, 아들, 딸 

df = pd.DataFrame(data_train)

df.index.name = 'id'

 

df[['아빠', '엄마']].to_csv('X_train.csv')

df[['아들']].to_csv('Y1_train.csv')

df[['딸']].to_csv('Y2_train.csv')

 

data_test = {'아빠', '엄마'}

df2 = pd.DataFrame(data_test)

df2.index.name = 'id'

df2.to_csv('X_test.csv')

------------------------------------------------------------

X_train = 아빠엄마 Y1_train 아들 Y2_train 딸 X_test 아빠엄마 + id

 

 

1) 파일 가져오기

X_train = pd.read_csv('X_train.csv')
Y1_train = pd.read_csv('Y1_train.csv')
X_test = pd.read_csv('X_test.csv')

 

 

  • df.corr : 각 Feature 간 상관관계를 확인할 수 있는 df 생성 (-1~1 / 1과 가까울 수록 높은 상관관계)
  • 예측 모델: from sklearn.linear_model import LinearRegression
    • model.fit(대상1, 대상2) : 학습
    • model.score(대상1, 대상2) : 평가
    • model.predict(대상1) :예측값
# 아빠, 엄마, 아들 키의 상관관계
df = X_train.copy()
df['아들'] = Y1_train['아들']
print(df.corr()) #부모님-아들간 상관관계 확인 가능

#아빠, 엄마의 키를 사용 -> 아들의 키 예측
#데이터 지정하기 (부모님 X 아들 Y1)
X = df[['아빠', '엄마']]
Y1 = df['아들']

#아들 키를 예측하는 모델 만들어 분석하기
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, Y1)

#아들 모델 성능 평가하기
model.score(X, Y1) #0.9420204329984175 

#결과를 표로 작성하기 (예측, 오차)
result = df[['엄마', '아빠', '아들']]
result['아들예측'] = model.predict(X)
result['아들오차'] = result['아들'] - result['아들예측']
print(result)

 

 

 

입력 받을 수도 있음

#새로운 데이터로 예측하기
아빠키 = int(input('아빠키를 입력해주세요: '))
엄마키 = int(input('엄마키를 입력해주세요: '))
data = [[아빠키, 엄마키]]
아들키 = model.predict(data)
print(f'아들의 예상키는 {아들키[0]}입니다.')

#새로운 데이터로 확인 
Xt = X_test[['아빠', '엄마']]
model.predict(Xt)

 

 

 

 

!실습!

딸 키 예측해보기

#딸 키 예측
X_train = pd.read_csv('X_train.csv')
Y2_train = pd.read_csv('Y2_train.csv')
X_test = pd.read_csv('X_test.csv')

df = X_train.copy()
df['딸'] = Y2_train['딸']

X = df[['아빠', '엄마']]
Y2 = df['딸']

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model_d.fit(X, Y2)
model_d.score(X, Y2)

#예측값 및 오차 확인
result = df[['아빠', '엄마', '딸']]
result['딸키예측'] = model_d.predict(X)
result['딸키오차'] = result['딸'] - result['딸예측']

 

 

 

기울기(회귀계수), 절편 확인

  • model.coef_ : 기울기 확인
  • model.intercept_ :  절편 확인
#기울기, 절편 확인하기
#Y1 = a1 * X['아빠'] + a2 * X['엄마'] + b
print(model.coef_) #[0.82386061 0.69947881] 기울기
print(model.intercept_) #-92.45748687514276 절편

# ex) 아들키 기준 아빠키: 180 엄마키: 160 아들 예상키: 167.7540 ...
# 절편을 이용해서 다시 검증해보기
Yh = 0.82386061*180 + 0.69947881*160 + -92.45748687514276
print(Yh) #167.7540 ...

 

 

 

 

객체를 파일로 저장

#모델 저장하기
import shelve
with shelve.open('height') as data: #파일명
	data['model_son'] = model # dictionary처럼 key = value 형태로 저장
    data['model_daughter'] = model_d
print('저장완료')



#모델 불러오기
import shelve
with shelve.open('height') as data:
	A = data['model_son']
    B = data['model_daughter']
print('불러오기 완료')


#새로운 데이터로 다시 확인해보기
아빠키 = int(input('아빠키를 입력해 주세요 : '))
엄마키 = int(input('엄마키를 입력해 주세요 : '))
data = [[아빠키, 엄마키]]
아들키 = A.predict(data)
print(f'아들의 예상키는 {아들키[0]}입니다')
728x90
반응형