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
반응형