#회귀예측문제
- 성능이 우수한 예측모형 구축위해 적절한 데이터 전처리
- 피쳐엔지니어링, 분류알고리즘, 초매개변수 최적화, 모형 앙상블
- 수험번호로 파일만들기
- 제출한 모형의 성능은 RMSE, MAE가 평가지표
- 종속변수 mpg
임의로 seaborn에서 제공하는 데이터를 가져와 회귀예측문제를 풀어보겠습니다
#데이터 파일열고 분리
import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
df = sns.load_dataset('mpg')
X_train,X_test,y_train,y_valid = train_test_split(df,df['mpg'],test_size=0.2, random_state=42)
#['mpg']를 종속번수로 쓰려하기때문에 drop해줍니다
X_train = X_train.drop(['mpg'],axis=1)
X_test = X_test.drop(['mpg'],axis=1)
data가 이런 식으로 되어있습니다 참고로 'mpg'는 없앤 결과입니다
#결측치 제거
print(X_train.isna().sum())
X_train['horsepower'] = X_train['horsepower'].fillna(X_train['horsepower'].median())
X_test['horsepower'] = X_test['horsepower'].fillna(X_test['horsepower'].median())
Horsepower쪽에 결측치가 있고 그 데이터의 형태를 체크해 median으로 채워주는게 좋을것 같아요
#LabelEncoder
문자열에 대해서 LabelEncoder를 진행해줍니다
이런식으로 간단하게 할수 있습니다
label = ['origin','name']
from sklearn.preprocessing import LabelEncoder
X_train[label] = X_train[label].apply(LabelEncoder().fit_transform)
X_test[label] = X_test[label].apply(LabelEncoder().fit_transform)
#카테고리 변환, 더미처리
category = ['origin']
for i in category:
X_train[i] = X_train.astype('category')
X_test[i] = X_test.astype('category')
X_train = pd.get_dummies(X_train)
X_test = pd.get_dummies(X_test)
#파생변수 만들기
X_train['horsepower_qcut'] = pd.qcut(X_train['horsepower'], 5, labels=False)
X_test['horsepower_qcut'] = pd.qcut(X_test['horsepower'], 5, labels=False)
#5. Scale 작업
from sklearn.preprocessing import MinMaxScaler
scaler = ['displacement','horsepower','weigth']
min = MinMaxScaler()
min.fit(X_train[scaler])
X_train[scaler] = min.transform(X_train[scaler])
X_test[scaler] = min.transform(X_test[scaler])
#6. 데이터 분리
# X_train -> X_train, X_valid
X_train, X_valid,y_train,y_valid = train_test_split(X_train,y_train,test_size=0.2,random_state=42)
#7. 모델학습
#LinearRegression
from sklearn.linear_model import LinearRegrssion
model1= LinearRegression
model1.fit(X_train,y_train)
pred1 = model1.predict(X_valid)
#RandomForestregressor
from sklearn.ensemble import RandomForestRegressor
model2= RandomForestRegressor()
model2.fit(X_train,y_train)
pred2= model2.predict(X_valid)
이번엔 lineargression 모델과 randomforestregressor모델을 사용했습니다
#8. 앙상블
from sklearn.ensemble import StackingRegressor
estimators = [('lr',model1),('rf',model2))
model3= StackingRegressor(estimators= estimators, final_estimator = RandomForestRegreesor())
model3.fit(X_train,y_train)
pred3= model3.predict(X_valid)
이번엔 stackingRegressor을 사용했는데요 예측한 결과값을 메타데이터로 만들어 다시 예측하는 것입ㄴ디ㅏ
이런식의 array가 만들어집니다
#9. 모형평가
MSE와 RMSE를 사용해 모델을 평가해보겠습니다. sklearn.metrics에서 mean_squared_error모듈을 사용합니다
mean_squared_error를쓰는데, RMSE는 mean_squared_error에 np.sqrt를 씌워주면 됩니다
from sklearn.metrics import mean_squared_error
#MSE
print('선형회귀 mse :', mean_squared_error(y_valid,pred1))
print('랜포 mse :', mean_squared_error(y_valid,pred2))
print('스태킹 mse :', mean_squared_error(y_valid,pred3))
#RMSE
print('선형회귀 mse :', np.sqrt(mean_squared_error(y_valid,pred1))
print('랜포 mse :', np.sqrt(mean_squared_error(y_valid,pred2))
print('스태킹 mse :', np.sqrt(mean_squared_error(y_valid,pred3))
랜포 성능이 제일 좋네요
이제 파일 저장을 해봅시다
제일 성능이 좋았던 랜포를 사용합니다
#파일저장
result = pd.Dataframe(model2.predict(X_test))
result = result.iloc[:,0]
pd.DataFrame({'id':X_test.index,'result':,result}).to_csv('00400.csv',index=False)
check = pd.read_csv('00400.csv')
check.head()
predict한 결과에서 첫번째 열만 index없이 저장한것입니다
'자격증 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사 실기] 제1유형 문제 풀어보기 (0) | 2023.06.21 |
---|---|
[빅데이터 분석기사 실기] 작업형 2 연습문제 : 분류 예측문제, ROC_curve, predict_proba (0) | 2023.06.21 |
[빅데이터 분석기사 실기] 작업유형 2 연습문제 : 데이터 수집부터 저장까지 (0) | 2023.06.20 |
[빅데이터분석기사 실기] 작업유형 1유형 문제풀이 : 결측치 대체, 표준편차 비교 (0) | 2023.06.20 |
[빅데이터 분석기사 실기] 작업형 1 연습문제풀이: 평균 산출, 상위 10번째 값 추출 (0) | 2023.06.15 |