본문 바로가기
자격증/빅분기

[빅분기] 2유형

by kime2 2024. 6. 20.

1) 분류 : 랜덤포레스트 + 평가(교차검증) :f1_macro

#1. 라이브러리 불러오기
 import pandas as pd
 
#2. 데이터 불러오기 
train = pd.read_csv("../input/big-data-analytics-certification-kr-2022/train.csv")
test = pd.read_csv("../input/big-data-analytics-certification-kr-2022/test.csv")

#3. EDA
train.head()
train.info()
train.describe(include ="O")

#4.전처리
#1) 범주형 : 원핫 인코딩 -> pd.get_dummies
train= pd.get_dummies(train)
test = pd.get_dummies(test)

#2) train에서 라벨을 target으로 따로 저장
target = train.pop('Segmentation')

#3) 분류에 불필요한 데이터 삭제 : ID
train = train.drop('ID',axis =1)

#4) test데이터에 ID따로 저장 > 답안으로 ID + target위함
test_id = test.pop('ID')

#5. 모델링 : 라이브러리 > 모델지정 > train,target학습 > test예측
from sklearn.ensemble import RandomForestClasstifier
rf = RandomForestClasstifier(random_state =0)
# 추가 파라미터 max_depth =7(보통 5~7), n_estimators = 500
rf.fit(train, target)
pred = rf.predict(test)

#6. 교차검증
from sklearn.model_selection import cross_val_score
scores = cross_val_score(rf, train, target, scoring = 'f1_macro',cv=5)
print(score.mean())

#7. 데이터 저장
submit = pd.DataFrame({'ID':test_id, 'Segmentation':pre})
submit.to_csv('저장이름', index=False)

 

2) 분류 : 랜덤포레스트 + 평가 : roc-auc

# test ID의 클래스 예츨

import pandas as pd
train = pd.read_csv("/kaggle/input/big-data-analytics-certification-kr-2024-2/train.csv")
test = pd.read_csv("/kaggle/input/big-data-analytics-certification-kr-2024-2/test.csv")

# EDA
train.info() #결측치 없음
test.info() #결측치 없음

# 모델링 위한 데이터 분리
# train의 결과
target = train.pop('Class')
# test의 id별도 저장
test_id = test.pop('id')
# train의 id삭제
train = train.drop('id',axis = 1)

# 모델링 라이브러리 불러오기
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state = 0)
#분류 힉습
rf.fit(train, target)
# 분류 예측
pre = rf.predict(test)

# 제출 파일 생성
submission = pd.DataFrame({'id': test_id, 'Class': y_pred})
submission.to_csv('submission.csv', index=False)

 

3) 회귀:RandomForestRegressor + 평가 : rmse

  • 예측할 값(y): SalePrice
# EDA
pd.set_option('display.max_columns'100)

# 전처리
# 결측치가 너무 많은 컬럼 제거
drop = ['Alley','MasVnrType','FireplaceQu','PoolQC','Fence','MiscFeature']
train.drop(columns = drop,inplace =True)
drop = ['Alley','MasVnrType','FireplaceQu','PoolQC','Fence','MiscFeature']
test.drop(columns = drop,inplace =True)

# 컬럼수가 많으므로 범주형 제거
train = train.select_dtypes(exclude=['object'])
test = test.select_dtypes(exclude=['object'])

# 필요한 컬럼 빼놓기 및 train, ID제거
target = train.pop('SalePrice')
test_id = test['Id']
train = train.drop('Id',axis =1)

# Imputer 활용한 결측치 채우기 > numpy변환
from sklearn.impute import SimpleImputer
imp = SimpleImputer()
train = imp.fit_transform(train)
test = imp.transform(test)

# 데이터 분할하기
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.15, random_state=2022)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape

# rmse평가
from sklearn.metrics import mean_squared_error, r2_score
def rmse(y, y_pred):
    return mean_squared_error(y, y_pred) ** 0.5
    
# 찐 모델링
from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor()
model.fit(X_tr, y_tr)
pred = model.predict(X_val)

print("R2 : " + str(r2_score(y_val, pred)))
print("RMSE : " + str(rmse(y_val, pred)))

 

 

다중분류 : RandomForestClassifier , 평가 : accuracy

Test의 ID별로 Target을 분류한다

train = pd.read_csv("/kaggle/input/playground-series-s4e6/train.csv")
test = pd.read_csv("/kaggle/input/playground-series-s4e6/test.csv")

# 결측치 없음~~~
print(train.info())
print(test.info())

# 필요한 데이터 분리
target = train.pop('Target')
teat_id = test.pop('id')
train = train.drop('id',axis = 1)

# 성능평가를 위한 분류
from sklearn.model_selection import train_test_split
x_train, X_test, Y_train, Y_test = train_test_split(train, target, random_state = 42)

#모델링
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state = 42)
model.fit(x_train,  Y_train)
Y_test_pre = model.predict(X_test)

# 모델 평가
from sklearn.metrics import accuracy_score
score = accuracy_score(Y_test,Y_test_pre)
print(score)

# 최종예측
pre = model.predict(test)

# 제출
sub = pd.DataFrame({'id':teat_id,'Target':pre})

 

 

평가지표 관련 > accuracy활용

# 문제 : Id,quality

# 데이터 불러오기
train = pd.read_csv("/kaggle/input/wine-qualit-dataset/train.csv")
test = pd.read_csv("/kaggle/input/wine-qualit-dataset/test.csv")

# 해주면 좋음~
pd.set_option('display.max_columns',100)

# EDA : 범주형 없음, 결측치 없음
print(train.shape, test.shape)
print(train.info())
print(test.info())

# ID와 target 분리
train = train.drop('id',axis =1)
target = train.pop('quality')
test_id = test.pop('id')

# 모델링을 위한 데이터 분리
from sklearn.model_selection import train_test_split
x_train,x_test, y_train, y_test =  train_test_split(train, target)

# 분류 모델링
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state = 42, max_depth =7)
model.fit(x_train, y_train)
x_test_pre = model.predict(x_test)

# 모델 성능 평가 :accuracy
from sklearn.metrics import accuracy_score
score = accuracy_score(y_test, x_test_pre)
print(score)

pre = model.predict(test)

#제출
sub =pd.DataFrame({'Id': test_id,'quality': pre})

 

예측 : 오차를 계산한 것으로 작을수록 좋다

분류 : 0~1 값사이로 1에 가까울수록 좋다

 

https://bigdaheta.tistory.com/53

 

 

 

'자격증 > 빅분기' 카테고리의 다른 글

[빅분기] 3유형  (0) 2024.06.21
[빅분기]유형1 기출  (0) 2024.06.19
[빅분기] 판다스 전처리 100제  (0) 2024.06.18