셀프스터디/빅데이터 분석기사

[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) #저장 후 다시 열어서 확인해보기

출처 : 네이버 이기적스터디카페