728x90
반응형
※ 본 내용은 퇴근후딴짓 강의를 학습하며 참고하여 작성된 내용입니다.
이진분류(기출3회)
# 1. 문제정의
# 평가: roc-auc
# target: TravelInsurance
# 최종파일: result.csv(컬럼 1개 pred, 1확률값)
# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("3_train.csv")
test = pd.read_csv("3_test.csv")
# 3. 탐색적 데이터 분석(EDA)
# 우리가 예측해야하는것도 491개라는걸 기억하
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)
print("===== train 데이터 샘플 =====")
print(train.head(1))
print("===== test 데이터 샘플 =====")
print(test.head(1))
print("===== 데이터 정보(자료형) =====")
print(train.info())
print("===== train 결측치 수 =====")
print(train.isnull().sum().sum())
print("===== test 결측치 수 =====")
print(test.isnull().sum().sum())
print("===== target 빈도 =====")
print(train['TravelInsurance'].value_counts())
object가 있다는 것은 인코딩을 해야한다는 말임
결측치는 없음
train = pd.read_csv("3_train.csv")
test = pd.read_csv("3_test.csv")
# 4. 데이터 전처리
print(train.shape, test.shape)
train = pd.get_dummies(train)
test = pd.get_dummies(test)
print(train.shape, test.shape)
# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
target = train.pop('TravelInsurance')
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)
print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict_proba(X_val)
from sklearn.metrics import roc_auc_score
roc_auc = roc_auc_score(y_val, pred[:,1])
print('\n roc_auc:', roc_auc)
# 7. 예측 및 결과 파일 생성
pred = rf.predict_proba(test)
print(pred[:3])
submit = pd.DataFrame({'pred':pred[:,1]})
submit.to_csv("result.csv", index=False)
# 제출파일 확인
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").head())
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
타겟은 가급적 pop을 하자 !
모델은 RandomForestClassifier을 동일하게 사용한다.
ROC-AUC를 물어보면 무조건 predict_proba임
예측은 마지막에 test를 제출해야함 !
제출 시 index = False
마지막에는 제출파일을 출력해보고, shape도 확인해 볼 것
# ID를 같이내는 추세였짐나 요새는 PRED만 내고있음 (ID가 있을때는 크기가 달라서 오류가 나면 잘못냈다는걸 알 수 있었음)
응용
# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
# f1 스코어
from sklearn.metrics import f1_score
print(f1_score(y_val, pred))
# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
print(pred[:3])
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)
# 제출파일 확인
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").head())
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
다중분류(기출4회)
# 1. 문제정의
# 평가: f1 macro
# target: Segmentation
# 최종파일: result.csv(컬럼 1개 pred)
# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("4_train.csv")
test = pd.read_csv("4_test.csv")
# 3. 탐색적 데이터 분석(EDA)
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)
print("\n") # 줄 바꿈
print("===== 데이터 정보(자료형) =====")
print(train.info())
print("\n")
print("===== train 결측치 수 =====")
print(train.isnull().sum().sum())
print("\n")
print("===== test 결측치 수 =====")
print(test.isnull().sum().sum())
print("\n")
print("===== target 빈도 =====")
print(train['Segmentation'].value_counts())
object가 있으니 범주 처리를 해야겠군 => 원핫인코
pop을 할때는 int이면 밑에서해도 되지만, 문자이면
원핫인코딩하기 전에 해줘라!! (원핫인코딩이랑 같이 될 수 도 있음)
train = pd.read_csv("4_train.csv")
test = pd.read_csv("4_test.csv")
# 4. 데이터 전처리
# 원핫인코딩 (target컬럼이 object형이라 제외)
target = train.pop('Segmentation')
train = pd.get_dummies(train)
test = pd.get_dummies(test)
# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)
print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
from sklearn.metrics import f1_score
f1 = f1_score(y_val, pred, average='macro')
print('\n f1-macro:', f1)
# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)
# 제출파일 확인
print("\n ===== 제출파일 (샘플 5개) =====")
print(pd.read_csv("result.csv").head())
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
회귀(기출5회)
# 1. 문제정의
# 평가: RMSE
# target: price
# 최종파일: result.csv(컬럼 1개 pred)
# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("5_train.csv")
test = pd.read_csv("5_test.csv")
# 3. 탐색적 데이터 분석(EDA)
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)
print("\n ===== 데이터 정보(자료형) =====")
print(train.info())
print("\n ===== train 결측치 수 =====")
print(train.isnull().sum().sum())
print("\n ===== test 결측치 수 =====")
print(test.isnull().sum().sum())
print("\n ===== 카테고리 비교 =====")
print(train.describe(include='O'))
print(test.describe(include='O'))
# 각 컬럼별 카테고리 확인 및 비교 (3개중 1개만 샘플)
print(train['fuelType'].value_counts())
print(test['fuelType'].value_counts())
print("\n ===== target 기술 통계 =====")
# 수치형 데이터이므로
print(train['price'].describe())
응용(난 안 할꺼임)
print("\n ===== 카테고리 비교 =====")
cols = train.select_dtypes(include='object').columns
for col in cols:
set_train = set(train[col])
set_test= set(test[col])
same = (set_train == set_test)
if same:
print(col, "\t카테고리 동일함")
else:
print(col, "\t카테고리 동일하지 않음")
train = pd.read_csv("5_train.csv")
test = pd.read_csv("5_test.csv")
# 4. 데이터 전처리
target = train.pop('price')
# 원핫인코딩
train = pd.get_dummies(train)
test = pd.get_dummies(test)
# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)
print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
# RMSE(Root Mean Squared Error)
from sklearn.metrics import mean_squared_error
def rmse(y_true, y_pred):
mse = mean_squared_error(y_true, y_pred)
return mse ** 0.5
result = rmse(y_val, pred)
print('\n rmse:', result)
# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)
# 제출파일 확인
print("\n ===== 제출파일 (샘플 5개) =====")
print(pd.read_csv("result.csv").head())
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
pop은 전처리 시작할때 바로 해버리자 !!
회귀모델이므로 Classifier 하면 안됨!!! Regressor(회귀모델)임
회귀모델은 predict!
RMSE 모르면 MSE라도 그냥 대충 해봐라 !!
오차는 작아질수록 좋은거임 !!!
다중분류(기출6회)
# 1. 문제정의
# 평가: f1 macro
# target: Heat_Load
# 최종파일: result.csv(컬럼 1개 pred)
# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("6_train.csv")
test = pd.read_csv("6_test.csv")
# 3. 탐색적 데이터 분석(EDA)
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)
print("\n") # 줄 바꿈
print("===== 데이터 정보(자료형) =====")
print(train.info())
print("\n")
print("===== train 결측치 수 =====")
print(train.isnull().sum().sum())
print("\n")
print("===== test 결측치 수 =====")
print(test.isnull().sum().sum())
print("\n")
print("===== target 빈도 =====")
print(train['Heat_Load'].value_counts())
train = pd.read_csv("6_train.csv")
test = pd.read_csv("6_test.csv")
# 4. 데이터 전처리
# 원핫인코딩 (target컬럼이 object형이라 제외)
target = train.pop('Heat_Load')
train = pd.get_dummies(train)
test = pd.get_dummies(test)
# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)
print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
from sklearn.metrics import f1_score
f1 = f1_score(y_val, pred, average='macro')
print('\n f1-macro:', f1)
# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)
# 제출파일 확인
print("\n ===== 제출파일 (샘플 5개) =====")
print(pd.read_csv("result.csv").head())
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
회귀(기출7회)
# 1. 문제정의
# 평가: RMSE
# target: total
# 최종파일: result.csv(컬럼 1개 pred)
# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("7_train.csv")
test = pd.read_csv("7_test.csv")
# 3. 탐색적 데이터 분석(EDA)
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)
print("\n ===== 데이터 정보(자료형) =====")
print(train.info())
print("\n ===== train 결측치 수 =====")
print(train.isnull().sum().sum())
print("\n ===== test 결측치 수 =====")
print(test.isnull().sum().sum())
print("\n ===== 카테고리 비교 =====")
print(train.describe(include='O'))
print(test.describe(include='O'))
print("\n ===== target 기술 통계 =====")
print(train['total'].describe())
# 지수바꿀떄
pd.set_option('display.float_format', '{:.10f}'.format)
train['total'].describe()
train = pd.read_csv("7_train.csv")
test = pd.read_csv("7_test.csv")
# 4. 데이터 전처리
# 원핫인코딩
train = pd.get_dummies(train)
test = pd.get_dummies(test)
# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
target = train.pop('total')
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)
print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
# RMSE(Root Mean Squared Error)
from sklearn.metrics import mean_squared_error
def rmse(y_true, y_pred):
mse = mean_squared_error(y_true, y_pred)
return mse ** 0.5
result = rmse(y_val, pred)
print('\n rmse:', result)
# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)
# 제출파일 확인
print("\n ===== 제출파일 (샘플 5개) =====")
print(pd.read_csv("result.csv").head())
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
728x90
'IT&게임 > 빅데이터분석기사(빅분기)' 카테고리의 다른 글
[공식문제] 빅분기 제2유형 예제 문제 (분류) (0) | 2024.06.18 |
---|---|
[공식문제] 빅분기 제1유형 예제문제 (MinMaxScaler) (0) | 2024.06.18 |
인코딩 정리(원핫인코딩/레이블인코딩) (0) | 2024.06.18 |
작업형2 유형 참고(lightBGM-분류/회귀) (0) | 2024.06.18 |
[빅분기] 여러가지 에러 케이스 (0) | 2024.06.18 |
댓글