셀프스터디/빅데이터 분석기사
[12.2 목] 빅데이터 분석기사 실기 - 작업 2유형 문제풀이2(분류/f1-score)
티로즈
2021. 12. 2. 23:15
#데이터 설명 : 유방암 발생여부 예측 (종속변수 diagnosis : B(양성) , M(악성) ) 1, 0
#문제타입 : 분류유형
#평가지표 : f1-score
|
import pandas as pd
submission = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/cancer/submission.csv')
a.diagnosis.head(5)
train.diagnosis.unique()
train.diagnosis = pd.get_dummies(train.diagnosis) #diagnosis = 양성은 1, 음성은 0
train = train.drop(columns='id',axis=1) #분석에 필요 없는 데이터 삭제(column id 정도만 삭제하는 게 확실함)
test = test.drop(columns='id',axis=1)
from sklearn.model_selection import train_test_split
X = train.iloc[:,1:]
Y = train.iloc[:,0]
x_train, x_test, y_train, y_test = train_test_split(X, Y, stratify=Y)
# 정규화
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train_sc = scaler.fit_transform(x_train)
x_test_sc = scaler.fit_transform(x_test)
type(x_train_sc)
x_train = pd.DataFrame(x_train_sc) #정규화 후에는 ndarray가 되기 때문에 형변환 잊지말기☆
x_test = pd.DataFrame(x_test_sc)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(x_train, y_train)
print(model.score(x_test, y_test), model.score(x_train, y_train))
from sklearn.metrics import f1_score, roc_auc_score
y_pred = model.predict(x_test)
#f1 score
f1_score(y_test, y_pred)
#양성일 확률을 예측하라고 할 때
proba = model.predict_proba(x_test)[:,1] #양성(1)일 때의 확률
#roc-auc score
roc_auc_score(y_test,proba) #roc-auc score를 낼 때는 확률을 넣어줘야 함(직접 값을 넣는 것 X)
#결과 예측값 데이터로 저장하기 test_sc = scaler.fit_transform(test) #자꾸 까먹음!! 최종 제출을 위한 test 데이터 스케일링!!
test = pd.DataFrame(test_sc)
submission = model.predict(test)
result = pd.DataFrame(submission)
result.to_csv('0000.csv',index=False )
check = pd.read_csv('0000.csv')
print(check) #저장 후 다시 열어서 확인해보기
|
출처 : 네이버 이기적스터디카페