카테고리 없음
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
반응형