You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/ko/2-Regression/1-Tools/README.md

16 KiB

회귀 모델을 위한 Python과 Scikit-learn 시작하기

스케치노트에 정리된 회귀 요약

스케치노트 작성자 Tomomi Imura

수업 전 퀴즈

이 수업은 R로도 제공됩니다!

소개

이 네 개의 수업에서 회귀 모델을 어떻게 구축하는지 배우게 될 것입니다. 이것들이 무엇을 위한 것인지 곧 설명하겠습니다. 하지만 무엇을 하기에 앞서, 프로세스를 시작하기 위한 올바른 도구들이 갖추어져 있는지 확인하십시오!

이 수업에서는 다음을 배우게 됩니다:

  • 컴퓨터를 로컬 머신러닝 작업을 위해 구성하는 방법.
  • Jupyter 노트북 작업하기.
  • 설치를 포함한 Scikit-learn 사용법.
  • 실습을 통한 선형 회귀 탐색.

설치 및 구성

초보자를 위한 ML - 머신러닝 모델 구축 준비를 위한 도구 설정

🎥 위 이미지를 클릭하면 컴퓨터를 ML용으로 구성하는 과정을 담은 짧은 영상이 나옵니다.

  1. Python 설치. 컴퓨터에 Python이 설치되어 있는지 확인하세요. 데이터 과학과 머신러닝 작업에 많이 사용됩니다. 대부분의 컴퓨터 시스템에는 이미 Python이 설치되어 있습니다. 일부 사용자들을 위해 설치를 쉽게 해주는 유용한 Python 코딩 팩도 있습니다.

    하지만 Python 사용 용도에 따라 소프트웨어 버전이 다르게 요구될 수 있으므로, 가상 환경에서 작업하는 것이 유용합니다.

  2. Visual Studio Code 설치. 컴퓨터에 Visual Studio Code가 설치되어 있는지 확인하세요. 기본 설치를 위한 Visual Studio Code 설치법을 따르세요. 이번 과정에서는 Visual Studio Code에서 Python을 사용할 것이므로, Visual Studio Code에서 Python 개발 설정법을 익히는 것도 좋습니다.

    학습 모듈 모음을 통해 Python에 익숙해지세요.

    VS Code에서 Python 설정하기

    🎥 위 이미지를 클릭하면 VS Code 내에서 Python을 사용하는 영상이 나옵니다.

  3. Scikit-learn 설치이 안내를 따르세요. Python 3를 사용해야 하므로 가상 환경 사용을 권장합니다. Mac M1에서 설치할 경우 위 링크 페이지에 특수 지침이 있습니다.

  4. Jupyter Notebook 설치. Jupyter 패키지를 설치해야 합니다.

머신러닝 개발 환경

Python 코드 작성과 머신러닝 모델 생성에 노트북을 사용할 것입니다. 이 파일 유형은 데이터 과학자들이 흔히 쓰는 도구로 .ipynb 확장자를 가집니다.

노트북은 개발자가 코딩과 노트, 문서 작성을 같이 할 수 있는 대화형 환경으로, 실험적이거나 연구 중심 프로젝트에 매우 유용합니다.

초보자를 위한 ML - Jupyter 노트북 설정하여 회귀 모델 시작

🎥 위 이미지를 클릭하면 이 실습 과정을 담은 짧은 영상이 나옵니다.

실습 - 노트북 작업

이 폴더에 notebook.ipynb 파일이 있습니다.

  1. Visual Studio Code에서 _notebook.ipynb_를 엽니다.

    Python 3+와 함께 Jupyter 서버가 시작됩니다. 노트북 내에서 실행(run) 가능한 코드 조각들을 볼 수 있습니다. 재생 버튼 모양 아이콘을 클릭해 코드 블록을 실행할 수 있습니다.

  2. md 아이콘을 선택하고 마크다운 문법으로 다음 텍스트를 입력하세요: # Welcome to your notebook.

    이어서 Python 코드를 몇 줄 추가합니다.

  3. 코드 블록에 print('hello notebook') 을 입력합니다.

  4. 실행 화살표를 선택하여 코드를 실행하세요.

    출력문이 나타나는 것을 볼 수 있을 것입니다:

    hello notebook
    

노트북이 열려있는 VS Code

코드 사이에 주석을 넣어 노트북을 자가 문서화할 수 있습니다.

웹 개발자 작업 환경과 데이터 과학자의 작업 환경이 얼마나 다른지 잠시 생각해 보세요.

Scikit-learn 시작하기

로컬 환경에 Python을 설치하고 Jupyter 노트북을 익혔다면, 이제 Scikit-learn도 편안하게 사용해 봅시다 (sciscience의 발음과 같습니다). Scikit-learn은 머신러닝 작업에 도움이 되는 광범위한 API를 제공합니다.

공식 웹사이트에 따르면 "Scikit-learn은 감독 및 비감독 학습을 지원하는 오픈 소스 머신러닝 라이브러리입니다. 모델 적합, 데이터 전처리, 모델 선택 및 평가, 기타 다양한 유틸리티를 제공합니다."

이 과정에서 Scikit-learn과 기타 도구를 사용해 전통적인 머신러닝 작업을 수행하는 모델을 구축할 것입니다. 신경망과 딥러닝은 의도적으로 제외했으며, 향후 'AI for Beginners' 커리큘럼에서 자세히 다룰 예정입니다.

Scikit-learn은 모델을 쉽게 구축하고 평가할 수 있게 해 줍니다. 주로 수치 데이터를 사용하는 데 중점을 두며, 학습 도구로 사용할 몇 가지 준비된 데이터셋도 포함되어 있습니다. 학생들이 시도해볼 수 있는 사전 제작 모델도 있습니다. 먼저, 기본 데이터를 사용해 미리 포장된 데이터 로딩과 내장 추정기를 사용하는 기본 ML 모델 과정을 살펴봅시다.

실습 - 첫 번째 Scikit-learn 노트북

이 튜토리얼은 Scikit-learn 웹사이트의 선형 회귀 예제에서 영감을 받았습니다.

초보자를 위한 ML - Python에서 첫 선형 회귀 프로젝트

🎥 위 이미지를 클릭하면 이 실습에 관한 짧은 영상이 나옵니다.

notebook.ipynb 파일에서, 모든 셀을 '휴지통' 아이콘을 눌러 삭제하세요.

여기서는 학습 목적용으로 Scikit-learn에 내장된 당뇨병에 관한 작은 데이터셋을 사용합니다. 당뇨 환자 치료법을 평가해 보고자 한다고 가정해 보세요. 머신러닝 모델은 변수 조합에 근거해 어떤 환자가 치료에 더 잘 반응할지 예측하는 데 도움을 줄 수 있습니다. 시각화된 기본 회귀 모델조차, 이론적 임상시험 구성에 도움이 될 변수 정보를 보여줄 수 있습니다.

회귀 방법에는 여러 유형이 있으며 선택하는 방법은 찾고자 하는 답변에 달려 있습니다. 특정 연령대 사람의 예상 키를 예측하고 싶다면 선형 회귀를 사용합니다. 이는 수치 값을 찾기 때문입니다. 어떤 요리가 비건으로 분류되어야 하는지 알고 싶다면, 범주 할당 문제이므로 로지스틱 회귀를 사용합니다. 로지스틱 회귀는 나중에 더 배울 것입니다. 데이터에 대해 질문할 수 있는 것들과 어떤 방법이 적절할지 잠시 생각해 보세요.

이제 이 작업을 시작해 봅시다.

라이브러리 가져오기

이 작업을 위해 일부 라이브러리를 불러오겠습니다:

  • matplotlib. 유용한 그래프 도구이며 선 그래프를 만드는 데 사용할 것입니다.
  • numpy. numpy는 파이썬에서 수치 데이터를 다루는 데 유용한 라이브러리입니다.
  • sklearn. 이것은 Scikit-learn 라이브러리입니다.

작업을 돕기 위해 라이브러리를 임포트하세요.

  1. 다음 코드를 입력하여 임포트합니다:

    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn import datasets, linear_model, model_selection
    

    위 코드는 matplotlib, numpy를 임포트하며, sklearn에서 datasets, linear_model, model_selection을 가져옵니다. model_selection은 데이터를 훈련 세트와 테스트 세트로 분할하는 데 사용됩니다.

당뇨병 데이터셋

내장된 당뇨병 데이터셋은 당뇨병 관련 442개의 샘플과 10개의 특성 변수를 포함합니다. 일부 변수는 다음과 같습니다:

  • age: 나이(년 단위)
  • bmi: 체질량 지수
  • bp: 평균 혈압
  • s1 tc: T-세포(백혈구의 일종)

이 데이터셋은 연구에 중요한 '성별'을 특성 변수로 포함합니다. 많은 의학 데이터셋에 이런 이진 분류가 포함되어 있습니다. 이런 분류 기준이 인구 일부를 치료 대상에서 제외할 수 있다는 점을 생각해보세요.

이제 X와 y 데이터를 불러옵니다.

🎓 이 것은 감독 학습이므로 'y' 타겟이 필요하다는 점을 기억하세요.

새로운 코드 셀에서 load_diabetes()를 호출해 당뇨병 데이터셋을 불러오세요. 입력값 return_X_y=TrueX가 데이터 매트릭스, y가 회귀 타겟임을 나타냅니다.

  1. 데이터 매트릭스의 형태와 첫 번째 요소를 출력하는 코드를 추가합니다:

    X, y = datasets.load_diabetes(return_X_y=True)
    print(X.shape)
    print(X[0])
    

    반환되는 값은 튜플입니다. 이 튜플의 처음 두 값을 각각 Xy로 할당하는 것입니다. 튜플에 대해 더 알아보기.

    이 데이터가 442 개의 항목으로 구성되며 각 항목은 10요소 배열임을 알 수 있습니다:

    (442, 10)
    [ 0.03807591  0.05068012  0.06169621  0.02187235 -0.0442235  -0.03482076
    -0.04340085 -0.00259226  0.01990842 -0.01764613]
    

    데이터와 회귀 타겟 간의 관계를 잠시 생각해보세요. 선형 회귀는 특성 X와 타겟 변수 y 간 관계를 예측합니다. 문서에서 당뇨병 데이터셋의 타겟을 찾을 수 있나요? 이 타겟을 고려할 때 이 데이터셋이 무엇을 보여주는지 생각해 보세요.

  2. 다음으로, 데이터셋의 일부를 선택해 플로팅합니다. 데이터셋의 3번째 열을 선택하세요. : 연산자로 모든 행을 선택하고 인덱스 2로 3번째 열을 선택할 수 있습니다. 플로팅에 필요한 2D 배열로 변경하려면 reshape(n_rows, n_columns)를 사용하세요. 매개변수 중 하나가 -1이면 해당 차원이 자동 계산됩니다.

    X = X[:, 2]
    X = X.reshape((-1,1))
    

    데이터 모양을 확인하기 위해 언제든 출력해 보세요.

  3. 이제 플로팅할 데이터가 준비되었으니, 머신이 이 데이터 숫자 사이에 논리적 구분을 짓도록 해봅니다. 이를 위해서는 데이터(X)와 타겟(y)을 테스트 세트와 학습 세트로 분할해야 합니다. Scikit-learn에는 이를 쉽게 하는 방법이 있습니다. 원하는 지점에서 테스트 데이터를 분할할 수 있습니다.

    X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
    
  4. 이제 모델 학습 준비가 되었습니다! 선형 회귀 모델을 불러와 model.fit()으로 X와 y 학습 세트로 학습시킵니다:

    model = linear_model.LinearRegression()
    model.fit(X_train, y_train)
    

    model.fit() 함수는 TensorFlow 등 많은 ML 라이브러리에서 공통으로 사용됩니다.

  5. 그런 다음, predict() 함수를 이용해 테스트 데이터를 기반으로 예측을 만듭니다. 이를 통해 데이터 그룹 사이에 선을 그릴 수 있습니다.

    y_pred = model.predict(X_test)
    
  6. 이제 데이터를 그래프로 나타냅니다. Matplotlib은 이를 위해 매우 유용합니다. 모든 X와 y 테스트 데이터를 산점도로 나타내고, 모델의 데이터 그룹 간 가장 적절한 위치에 예측된 선을 그리세요.

    plt.scatter(X_test, y_test,  color='black')
    plt.plot(X_test, y_pred, color='blue', linewidth=3)
    plt.xlabel('Scaled BMIs')
    plt.ylabel('Disease Progression')
    plt.title('A Graph Plot Showing Diabetes Progression Against BMI')
    plt.show()
    

    당뇨병 주변 데이터 포인트를 나타내는 산점도

    여기서 무슨 일이 일어나고 있는지 조금 생각해 보세요. 여러 개의 작은 데이터 점을 통과하는 직선이 있는데, 정확히 무엇을 하고 있는 걸까요? 이 직선을 사용하여 새로운, 본 적 없는 데이터 포인트가 플롯의 y축과 어떤 관계를 맺어야 하는지 예측할 수 있어야 한다는 점을 볼 수 있나요? 이 모델의 실질적인 용도를 말로 표현해 보세요.

축하합니다, 첫 번째 선형 회귀 모델을 만들고, 이를 사용해 예측을 수행했으며, 플롯에 표시했습니다!


🚀도전 과제

이 데이터셋에서 다른 변수를 플로팅해 보세요. 힌트: 이 줄을 수정하세요: X = X[:,2]. 이 데이터셋의 목표 값을 고려할 때, 당뇨병이라는 질병의 진행에 대해 무엇을 발견할 수 있나요?

강의 후 퀴즈

복습 & 자기 주도 학습

이 튜토리얼에서는 단순 선형 회귀를 다뤘으며, 단변량 또는 다중 선형 회귀와는 다릅니다. 이 방법들 간의 차이점에 대해 조금 읽어 보거나, 이 영상을 참조하세요.

회귀 개념에 대해 더 읽고, 이 기법으로 어떤 질문들에 답할 수 있는지 생각해 보세요. 이해를 깊게 하려면 이 튜토리얼을 통해 학습해 보세요.

과제

다른 데이터셋


면책 조항: 이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.