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 |