ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Logistic regression을 사용한 예측 모델 만들기
    ML,DL 2024. 1. 23. 18:36

    Logistic regression은 binary classification 문제를 푸는데 쓰이는 머신러닝 방법론이다.

    💡 독립변수가 (-∞,∞)의 어느 숫자이든 상관없이 종속 변수 또는 결과 값이 항상 범위 [0,1] 사이에 있도록 한다. 이는 오즈를 로짓변환 수행함으로써 항상 [0,1]사이 값을 갖는 로지스틱 함수(시그모이드 함수)를 얻을 수 있다.

     


    kaggle제공

    https://www.kaggle.com/code/adepvenugopal/logistic-regression-predicting-insurance-buying/notebook

     

    Logistic Regression : Predicting Insurance buying

    Explore and run machine learning code with Kaggle Notebooks | Using data from Insurance Data

    www.kaggle.com

     

     

    EDA

    pandas library

    data.head() :처음 몇개의 행을 보여주는 명령어이다, 표 형식의 데이터를 다루는데 사용된다.

    data.describe() : 데이터프레임의 간단한 통계적 요약정보를 제공한다. 각 열의 평균, 표준편차, 최소값, 최대값 등을 확인할 수 있다. 이를 통해 인풋 데이터의 통계적 특성을파악할 수 있다.

    data.info() : 데이터프레임의 열에 대한 데이터타입, 비어있지 않은 값의 개수, 메모리 사용량 등을 알 수 있다. 데이터 전처리를 수행할 때 도움이된다.

    data.corr() : 데이터프레임의 열 간 상간관계를 계산하여 표시하는 명령어이다. 이 명령어를 사용하면 각 열 사이 상관계수를 확인할 수 있다. (상관계수는 -1에서 1까지의 값을 가지며, 0에 가까울수록 두 열 간의 상관관계가 낮고, 1이나 -1에 가까울수록 두 열 간의 강한 상관관계를 나타낸다.)

    Seaborn library

    pairplot() : 데이터 간 산점도 행렬을 그리는 명령어이다. 데이터 열 간 관계를 시각화 할 수 있다.

     

    데이터 전처리

    # 특성 행렬 x와 타겟 벡터 y를 분리한다
    x = data.iloc[:, :-1].values  # 모든 행, 마지막 열을 제외한 열들을 특성 행렬로 설정
    y = data.iloc[:, 1].values     # 모든 행, 마지막 열을 타겟 벡터로 설정
    

    iloc은 행렬을 특정 위치에 있는 값을 추출한다. [:,:,-1] 는 모든 행에 대해 마지막 열을 제외한 열을 선택한다. [:, 1] 모든 행에 대해 마지막 열을 선택한다.

    x는 입력데이터의 특성을 담은 행렬이되고, y는 모델이 예측하고자 하는 결과값을 담은 벡터가 된다.

    이렇게 나누어진 두 벡터는 머신러닝 모델을 학습시키거나 테스트할때 사용된다.

     

    # 학습용과 테스트용 데이터로 나눈다
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
    

    train_test_split 함수는 입력 데이터 x와 타켓 데이터 y를 받아서 지정된 비율(0.2 → 20%)로 나누어준다.

    학습용 → 80% / 테스트용→20%

    이렇게 데이터를 나누는 이유는 모델을 학습시키고 나서 그 모델의 성능을 평가하기 위해 일부 데이터를 테스트에 사용하는 것이다. 이를 통해 overfitting을 방지하고 일반화된 성능을 낼 수 있다.

     

    머신러닝

    # 머신러닝 알고리즘으로 로지스틱 회귀 모델을 정의한다
    ml = LogisticRegression()
    

    LogisticRegression()은 Scikit-Learn 라이브러리에서 제공하는 로지스틱 회귀 모델을 생성하는 함수이다. 이는 binary classification문제에서 사용되며, 주어진 데이터를 두 개의 클래스로 분류한다.

    # 머신러닝 알고리즘을 학습시킨다
    ml.fit(x_train, y_train)
    

    x_train : 학습용 특성 벡터

    y_train : 학습용 타켓 벡터

    # 머신러닝 알고리즘을 사용하여, 테스트 데이터에 대한 예측을 수행한다
    y_pred = ml.predict(x_test)
    

    predict() : 훈련된 모델을 사용하여, 입력된 데이터에 대한 예측값을 반환한다.

    x_test : 테스트용 특성행렬

    y_pred : 모델이 예측한 결과값 (예측된 타켓 벡터)

     

    예측결과비교

    import matplotlib.pyplot as plt
    
    # 실제값과 모델의 예측값을 산점도로 표시한다
    plt.scatter(x_test, y_test, color='red', marker='+', label='실제값')
    plt.scatter(x_test, y_pred, color='blue', marker='.', label='모델 예측값')
    plt.xlabel("사람의 나이")
    plt.ylabel("보험 구매 여부 (1=구매, 0=미구매)")
    plt.legend()  # 범례 표시
    
    # 그래프를 출력한다
    plt.show()
    

    평가

    # 모델의 정확도를 계산한다
    accuracy = ml.score(x_test, y_test)
    

    테스트 데이터와 그와 대응하는 실제값을 사용하여 모델의 accuracy를 계산한다.

    반환값은 0~1까지 범위이며 1에가까울수록 모델이 더 정확하게 예측했음을 나타낸다.

    from sklearn.metrics import confusion_matrix
    
    # confusion_matrix를 계산한다.
    cm = confusion_matrix(y_test, y_pred)
    

     

    confusion matix는 이진 분류(Binary Classification)에서 모델의 성능을 평가하는 데 사용되며, 각 셀은 다음과 같이 정의된다.

    • True Positive (TP): 모델이 Positive으로 예측하고 실제로도 Positive인 경우
    • True Negative (TN): 모델이 Negative으로 예측하고 실제로도 Negative인 경우
    • False Positive (FP): 모델이 Positive으로 예측했지만 실제로는 Negative인 경우
    • False Negative (FN): 모델이 Negative으로 예측했지만 실제로는 Positive인 경우

     

    kaggle에서 code에 들어가면 원하는 머신러닝 알고리즘을 어떻게 구현하고 데이터분석에 사용하는지 레퍼런스를 볼 수 있습니다.

    https://www.kaggle.com/code?searchQuery=binary+classification

     

    Run Data Science & Machine Learning Code Online | Kaggle

    Kaggle Notebooks are a computational environment that enables reproducible and collaborative analysis.

    www.kaggle.com

     

    댓글

lee-ding