로지스틱 회귀 분석의 기초 이해와 분류 분석을 위한 기초 평가 지표들을 활용하여 이진 분류 모델을 구현
LogisticRegressionAPI의 Method(함수)
- fit(X, y) : 학습 데이터를 이용하여 모델의 회귀계수와 편향 학습
- predict(X) : 모델에 테스트 데이터를 입력하여 계산된 예측값 반환
- score(X, y) : 모델에 테스트 데이터를 입력하여 모델의 성능지표(정확도) 반환
LogisticRegressionAPI의 Attribute(속성)
- coef_: 학습된 모델의 회귀 계수(W)
- intercept_: 학습된 모델의 bias(b)
결론 : Count가 500 이상인 데이터 만을 학습시켜, 데이터의 불균형으로 모델의 Accuracy는 높지만 Precision과 Recall 값은 0이 출력되어 잘못 학습했음을 알 수 있다.
'''
-------- [최종 출력 결과] --------
Training Data Accuracy: 0.927
Testing Data Accuracy: 0.924
Confusion Matrixs :
[[3018 0]
[ 248 0]]
Accuracy: 0.9241, Precision: 0.0000, Recall: 0.0000
----------------------------------
'''
# 필요한 라이브러리 로딩
import pandas as pd
import numpy as np
# StandardScaler, train_test_split, LogisticRegression 로딩
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# 분류 모델을 위한 성능 지표 함수 로딩
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
# URL 통해서 캐글의 자전거 대여 수요 데이터셋 다운로드
url = 'https://codepresso-online-platform-public.s3.ap-northeast-2.amazonaws.com/learning-resourse/python-machine-learning-20210326/bike-demand.csv'
df_bike = pd.read_csv(url)
# 독립변수 데이터 생성
# temp, atemp, humidity, windspeed 컬럼 데이터만 저장
X_df_bike = df_bike.iloc[:, 5:9]
# print(X_df_bike.head(5))
# 종속변수 데이터를 위한 파생변수 생성
# 총 대여건수(count) 가 500 이상인 경우 1, 미만인 경우 0
df_bike['y'] = 1
df_bike.loc[df_bike['count'] < 500, 'y'] = 0
y = df_bike['y']
# StandardScaler 이용한 스케일링
scaler = StandardScaler()
scaler.fit(X_df_bike)
result = scaler.transform(X_df_bike)
# 스케일된 결과 데이터를 DataFrame 으로 저장
X_scaled_bike = pd.DataFrame(data=result, columns=X_df_bike.columns)
# 데이터셋 분리
x_train, x_test, y_train, y_test = train_test_split(X_scaled_bike, y, test_size=0.3, random_state=12)
# LogisticRegression 모델 객체 생성
clf = LogisticRegression()
# 훈련 데이터를 통한 학습
clf.fit(x_train, y_train)
# 학습된 모델에 테스트 데이터셋 이용하여 예측값 생성
y_pred = clf.predict(x_test)
# score 메소드를 통한 정확도 측정
train_score = clf.score(x_train, y_train)
test_score = clf.score(x_test, y_test)
print('Training Data Accuracy: {:0.3f}'.format(train_score))
print('Testing Data Accuracy: {:0.3f}'.format(test_score))
# 오차 행렬 생성
confusion = confusion_matrix(y_test, y_pred)
print('Confusion Matrixs : \n', confusion)
# 정확도, 정밀도, 재현율 계산
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
print('Accuracy: {0:.4f}, Precision: {1:.4f}, Recall: {2:.4f}'.format(accuracy , precision ,recall))
'프로젝트 > 코드프레소 체험단' 카테고리의 다른 글
파이썬으로 구현하는 머신러닝 : 분류분석 - AUC 지표를 통한 모델 성능분석 (0) | 2022.01.23 |
---|---|
파이썬으로 구현하는 머신러닝 : 분류분석 - ROC 커브의 주요 개념 이해 (0) | 2022.01.23 |
파이썬으로 구현하는 머신러닝 : 분류분석 - 분류 분석을 위한 성능 지표 (0) | 2022.01.21 |
파이썬으로 구현하는 머신러닝 : 분류분석 - 분류의 이해 (0) | 2022.01.20 |
시각화를 위한 Matplotlib, Pandas 활용하기 (0) | 2022.01.18 |