합격/불합격 여부를 결정하는 평균, 과락에 관한 파생변수 추가
# 파생변수 생성/추가
data['평균'] = data[['국어','영어','수학']].mean(axis=1)
data['최저'] = data[['국어', '영어', '수학']].min(axis=1)
파생변수 추가시 성능 개
# 파생변수 생성시 성능 개선됨
# 항상 그런 것은 아님
for no in [1234, 1225, 1245] :
model5 = LogisticRegression(max_iter=1000)
data = make_sample(seedno=no, size=20000)
data['평균'] = data[['국어', '영어', '수학']].mean(axis=1)
data['최저'] = data[['국어', '영어', '수학']].min(axis=1)
ModelTrain(model5, data)
[(26104, 5), (6526, 5), (26104,), (6526,)]
train 성능: 0.9850980692614159
test 성능: 0.9828378792522219
[(26126, 5), (6532, 5), (26126,), (6532,)]
train 성능: 0.9871775243052897
test 성능: 0.9837721984078384
[(26233, 5), (6559, 5), (26233,), (6559,)]
train 성능: 0.9866199062249837
test 성능: 0.9865833206281446
맨 마지막 0.97이 파생변수 생성시
# 1,2 충분한 데이터
# 부족한 데이터
# 파생변수
data = make_all()
X1 = data.iloc[:, :3]
X2 = data.drop(columns=['합격여부'])
Y = data['합격여부']
print(Y.value_counts())
for x in model1, model2, model3, model4:
print(x.score(X1, Y))
print(model5.score(X2, Y))
0 841140
1 189161
Name: 합격여부, dtype: int64
0.9202815487901108
0.9206610495379506
0.9057314318825276
0.9204028725586018
0.976593247992577
스케일러 사용
for no in [1234, 1225, 1245] :
model6 = LogisticRegression(max_iter=1000)
data = make_sample(seedno=no, size=20000)
data['국어'] *= 500
data['수학'] *= 1000
ModelTrain(model6, data)
[(26284, 3), (6572, 3), (26284,), (6572,)]
train 성능: 0.5
test 성능: 0.5
[(26174, 3), (6544, 3), (26174,), (6544,)]
train 성능: 0.5
test 성능: 0.5
[(26081, 3), (6521, 3), (26081,), (6521,)]
train 성능: 0.500019171044055
test 성능: 0.49992332464345957
성능 향상!! 0.94
# StancardScaler 사용하여 정규 분포 만들기
#
from sklearn.preprocessing import StandardScaler
for no in [1234, 1225, 1245]:
model7 = LogisticRegression(max_iter=1000)
data = make_sample(seedno=no, size=20000)
data['국어'] *= 500
data['수학'] *= 1000
X = data[['국어', '영어', '수학']]
Y = data['합격여부']
scaledX = StandardScaler().fit_transform(X)
scaledX = pd.DataFrame(scaledX, columns=['국어', '영어', '수학'])
data = pd.concat([scaledX, Y], axis=1)
ModelTrain(model7, data)
[(26120, 3), (6530, 3), (26120,), (6530,)]
train 성능: 0.9477029096477795
test 성능: 0.9468606431852986
[(26265, 3), (6567, 3), (26265,), (6567,)]
train 성능: 0.9476108890158005
test 성능: 0.944266788487894
[(26163, 3), (6541, 3), (26163,), (6541,)]
train 성능: 0.9485533004624852
test 성능: 0.9438923711970647
'빅데이터 분석기사 > 작업 유형 2 (ML)' 카테고리의 다른 글
이항분류 성능평가, 예측값 저장 (0) | 2023.06.06 |
---|---|
이항분류 모델링(lr, knn, dt, rf, xgb) (0) | 2023.06.06 |
충분한 데이터의 중요성 (0) | 2023.06.06 |
sample 생성 함수 & 모델 학습 및 성능 평가 함수 (0) | 2023.06.02 |
GridSearchCV (0) | 2023.06.02 |