인프런 커뮤니티 질문&답변

greyy님의 프로필 이미지
greyy

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

작업형2 모의고사 풀어보기 (구 버전 help dir 예시문제)

f1_score값 관련

해결된 질문

작성

·

237

0

lgb를 썼을 때 f1_score가 1.0이 나오는데 뭐가 문제일까요?

from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train.drop('target', axis=1), train['target'], test_size=0.15, random_state=2023)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape

from sklearn.ensemble import RandomForestClassifier
import lightgbm as lgb
from sklearn.metrics import f1_score

model = lgb.LGBMClassifier(random_state=2023, max_depth=11)
model.fit(X_tr, y_tr)
pred = model.predict(X_val)
print(f1_score(y_val, pred))

답변 1

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

보통 1이 나오면 train.drop('target', axis=1)을 안한 케이스 인데

이번 건은 그것은 아니네요!
혹시 새로고침해서 해도 동일할까요? 그렇다면 풀 코드를 올려주시겠어요?
저도 한번 돌려보고 확인하겠습니다.

greyy님의 프로필 이미지
greyy
질문자

다시 해봐도 똑같네요. 랜덤포레스트로는 f1스코어가 잘 나오는 것 같은데, lgb로 해보면 f1스코어가 1.0으로 나와요 ㅠㅠ

# 시험환경 세팅
import pandas as pd
from sklearn import datasets
dataset = datasets.load_breast_cancer()
df = pd.DataFrame(dataset['data'], columns=dataset['feature_names'])
df['target'] = dataset['target']
df.to_csv("data2.csv", index=False)

from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.2, random_state=2022)
y_test = test.pop('target')
train.to_csv('train.csv', index=False)
test.to_csv('test.csv', index=False)

#####################################################################

# 출력을 원하실 경우 print() 함수 활용
# 예시) print(df.head())

# getcwd(), chdir() 등 작업 폴더 설정 불필요
# 파일 경로 상 내부 드라이브 경로(C: 등) 접근 불가

# 데이터 파일 읽기 예제
import pandas as pd
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
# 사용자 코딩

# 수치형 이상치 스케일링
# print(train.head())
train.select_dtypes(exclude=object).columns
cols = ['mean radius', 'mean texture', 'mean perimeter', 'mean area',
       'mean smoothness', 'mean compactness', 'mean concavity',
       'mean concave points', 'mean symmetry', 'mean fractal dimension',
       'radius error', 'texture error', 'perimeter error', 'area error',
       'smoothness error', 'compactness error', 'concavity error',
       'concave points error', 'symmetry error', 'fractal dimension error',
       'worst radius', 'worst texture', 'worst perimeter', 'worst area',
       'worst smoothness', 'worst compactness', 'worst concavity',
       'worst concave points', 'worst symmetry', 'worst fractal dimension']

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
train[cols] = scaler.fit_transform(train[cols])
test[cols] = scaler.transform(test[cols])
# print(train.head())

# 검증 데이터 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train.drop('target', axis=1), train['target'], test_size=0.15, random_state=2023)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape

from sklearn.ensemble import RandomForestClassifier
import lightgbm as lgb
from sklearn.metrics import f1_score

# model = RandomForestClassifier(random_state=2023)
# model.fit(X_tr, y_tr)
# pred = model.predict(X_val)
# print(f1_score(y_val, pred))

# 0.9876543209876543

model = lgb.LGBMClassifier()
model.fit(X_tr, y_tr)
pred = model.predict(X_val)
print(f1_score(y_val, pred))
퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

크게 문제 없어 보입니다. val을 조금 더 크게 잡아보시겠어요 ?
15%가 맞추기 쉬운 것들만 val로 나눠졌나? 란 생각도 드네요

greyy님의 프로필 이미지
greyy

작성한 질문수

질문하기