PYTHON/빅데이터분석기사

ML_01-1 (basic s3-03 자녀의 키 예측하기)

쿠룽지 2023. 11. 10. 08:57
728x90
반응형
728x90

 

1. ML 전처리

1-1. 문제지와 실제 dtype 차이 확인 

  • 숫자가 아닌 문자 포함되어 있는 경우 : 해당 문자 삭제 -> 숫자형 데이터로 변경
  • 날짜/시간 데이터의 경우 : pd.to_datetime(s, format='%Y%m%d') or astype('datetime64')사용

 

1-2. 모든 column의 dtype 확인

  • 모든 column의 dtype = int or float로 변경해야함
  • 범주형 data -> LabelEncoding / OneHotEncoding -> 수치형 data
  • 날짜/시간 data -> dt 사용, year/month/day 등 정보 분할 -> Feature로 사용

 

1-3. train, test 데이터

  • X/Y_train.csv : 학습용 데이터 
    • 학습 모델을 만들 때 사용
    • 성능 예측을 위해 2개 나누어 사용 또는 GridSearchCV 사용

 

  • X_test.csv : 평가용 데이터
    • 제출 용도의 파일 작성
    • train 데이터로 생성된 학습 모델을 사용하여 평가용 파일 작성

 

  • train, test 데이터의 X(입력) Feature
    • 동일한 가공 처리가 되어야 함
    • Feature순서, 개수가 동일해야 함
    • 2차원의 형태여야함

 

  • train데이터의 Y(출력, target)는 한 개의 column으로 1차원 형태여야 함
  • train, test 데이터가 서로 섞여서는 안됨
  • test 데이터는 그 행의 순서나 개수가 변경 되어서는 안됨 (shuffle, drop 금지)

 

1-4. 결측치

  • train, test 데이터에 양쪽에 결측치 有 -> 채우기 / train에만 결측치 有 -> 삭제 or 채우기

 


 

 

 

Mini project 자녀의 키 예측

 

데이터 import

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 = pd.read_csv('X_train.csv') # 아빠엄마
Y1_train = pd.read_csv('Y1_train.csv') #아들
X_test = pd.read_csv('X_test.csv')

 

 

 

DataFrame.corr() : 각 Feature 간 상관관계를 확인할 수 있는 DataFrame을 생성함 (-1~1)

df = X_train.copy()
df['아들'] = Y1_train['아들']
print(df.corr())

-> 아빠랑 아들의 상관관계가 높은걸 볼 수 있음

 

 

# 아빠, 엄마의 키를 사용해 아들의 키 예측
X = df[['아빠','엄마']]
Y1 = df['아들']

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, Y1)

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

#결과 표로 작성 (예측, 오차 컬럼 추가)
result = df[['아빠', '엄마', '아들']]
result['아들예측'] = model.predict(X)
result['아들오차'] = result['아들'] - result['아들예측']

 

 

 

from sklearn.linear_model import LinearRegression
model = LinearRegression

#새로운 데이터로 예측
#아빠/ 엄마 키 입력
아빠키 = int(input('아빠키를 입력해주세요: '))
엄마키 = int(input('엄마키를 입력해주세요: '))
data = [[아빠키, 엄마키]]
아들키 = model.predict(data)


# or


Xt = X_test[['아빠', '엄마']]
model.predict(Xt)

 

 

기울기(회귀계수), 절편확인, 객체 파일 저장 

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


#모델 저장하기
import shelve

with shelve.open('height') as data:
	data['model_son'] = model
    data['model_daughter'] = model_d #딸 예측 모델인데 블로그엔 기재 X
print('저장완료')


#모델 불러오기
import shelve

with shelve.open('height') as data:
    A = data['model_son']
    B = data['model_daughter']
print('불러오기 완료')
728x90
반응형