<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>a-zer0 님의 블로그</title>
    <link>https://a-zer0.tistory.com/</link>
    <description>a-zer0 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 9 Sep 2026 18:19:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>a-zer0</managingEditor>
    <image>
      <title>a-zer0 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/8462002/attach/4f8a80c0b8844d90b99b5baf076f3561</url>
      <link>https://a-zer0.tistory.com</link>
    </image>
    <item>
      <title>[경기AI멤버십] Day 19. 팀프로젝트 SelfFit 기획</title>
      <link>https://a-zer0.tistory.com/19</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;1402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFTeHw/dJMcaaGMeAT/Jo5eNNrzCZUOQaRtQqX7Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFTeHw/dJMcaaGMeAT/Jo5eNNrzCZUOQaRtQqX7Fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFTeHw/dJMcaaGMeAT/Jo5eNNrzCZUOQaRtQqX7Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFTeHw%2FdJMcaaGMeAT%2FJo5eNNrzCZUOQaRtQqX7Fk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;600&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;1402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 19 오전에는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;Ultralytics를 활용한 YOLO 객체 탐지 모델의 학습과 평가 과정&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;YOLOv8의 특징과 객체 탐지 Loss를 살펴보고 사전학습 모델 학습부터 Precision, Recall, mAP 평가와 하이퍼파라미터 튜닝까지의 흐름을 확인했다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오후에는 경기 AI 멤버십 1차 프로젝트로 &lt;/span&gt;&lt;b&gt;&lt;span&gt;SelfFit이라는 웹캠 기반 면접 자가진단 서비스&lt;/span&gt;&lt;/b&gt;&lt;span&gt;를 기획했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이날은 본격적으로 기능을 개발하기보다 팀원들과 문제를 정의하고 MVP 범위를 정하는 데 집중했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;나는 프론트엔드 담당으로서 프로젝트 계획서 작성을 돕고 필요한 화면과 사용자 흐름 및 기능을 구체화했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 진행 흐름은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;YOLO 학습과 평가 &lt;/span&gt;&lt;span&gt;&amp;rarr; SelfFit 문제 정의 &lt;/span&gt;&lt;span&gt;&amp;rarr; 핵심 사용자 설정 &lt;/span&gt;&lt;span&gt;&amp;rarr; 초기 아이디어 검토&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 2일 안에 가능한 MVP 정의 &lt;/span&gt;&lt;span&gt;&amp;rarr; AI 모델과 웹 기능 구분 &lt;/span&gt;&lt;span&gt;&amp;rarr; 감정 라벨 조정 방향 논의&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 서비스 화면 구성 &lt;/span&gt;&lt;span&gt;&amp;rarr; 프론트엔드 기술 스택 선정 &lt;/span&gt;&lt;span&gt;&amp;rarr; 팀별 역할과 개발 일정 정리&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 오전 학습: Ultralytics와 YOLO&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.ultralytics.com/&quot;&gt;Ultralytics | Revolutionizing the World of Computer Vision&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1788832146562&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Ultralytics | Revolutionizing the World of Computer Vision&quot; data-og-description=&quot;End-to-end computer vision platform. Annotate data, train YOLO models, and deploy to 42 global regions.&quot; data-og-host=&quot;www.ultralytics.com&quot; data-og-source-url=&quot;https://www.ultralytics.com/&quot; data-og-url=&quot;https://www.ultralytics.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ip0TV/dJMb8Xkzdul/GDmHtnF5g24kXAxWdijLwK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ccnv8R/dJMb85v8FId/6Yura94ImdYVXMH7MQ9kAK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.ultralytics.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.ultralytics.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ip0TV/dJMb8Xkzdul/GDmHtnF5g24kXAxWdijLwK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ccnv8R/dJMb85v8FId/6Yura94ImdYVXMH7MQ9kAK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Ultralytics | Revolutionizing the World of Computer Vision&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;End-to-end computer vision platform. Annotate data, train YOLO models, and deploy to 42 global regions.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.ultralytics.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Ultralytics에서는 사전학습된 YOLO 모델을 불러와 새로운 데이터셋으로 학습하고 평가할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업에서는 YOLOv8의 주요 특징을 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Mosaic Data Augmentation&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Anchor-Free Detection&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;C2f Module&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Decoupled Head&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Box&amp;middot;Class&amp;middot;DFL Loss&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;다양한 크기의 사전학습 모델&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;객체 탐지 모델의 성능은 Precision, Recall과 mAP를 중심으로 평가했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Precision은 탐지한 객체의 정확성, Recall은 실제 객체를 얼마나 놓치지 않았는지, mAP는 여러 클래스의 객체 탐지 성능을 종합적으로 보여준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 하이퍼파라미터 튜닝 전후의 학습 곡선을 비교하며 Validation Loss와 일반화 성능을 함께 확인해야 한다는 점을 배웠다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. 오후 프로젝트: SelfFit&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;SelfFit은 사용자가 웹캠 앞에서 모의면접을 진행하면 AI가 시선과 표정을 분석하고 면접이 끝난 뒤 행동 리포트를 제공하는 서비스다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;핵심 사용자는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;면접을 앞두고 있지만 자신의 시선과 표정을 객관적으로 확인하기 어려운 취업준비생&lt;/span&gt;&lt;/b&gt;&lt;span&gt;으로 설정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;AI 면접과 카메라 기반 비대면 채용이 확대되고 있지만 혼자 연습하는 지원자는 자신의 비언어적 행동을 알아차리기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;SelfFit에서는 다음과 같은 정보를 제공하는 방향을 세웠다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;면접 중 시선 이탈 여부&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;표정과 감정 변화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;일정 시간 지속된 행동에 대한 알림&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;면접 종료 후 시선 유지율&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;표정 안정도와 감정 분포&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;질문별 답변 기록&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;개선을 위한 종합 피드백&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;조금 아이러니하게도 &lt;/span&gt;&lt;b&gt;&lt;span&gt;취업을 준비하는 우리가 취업준비생을 위한 면접 서비스를 기획하게 됐다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. 기획은 한 번에 완성되지 않았다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트 첫날에는 팀장과 참여 가능한 팀원들이 먼저 킥오프 미팅과 초기 논의를 시작했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 PM이 합류하면서 서비스의 목적과 기능 범위를 다시 맞춰나갔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초기의 SelfFit은 현재 기획보다 훨씬 복잡한 구조였다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;이력서 기반 맞춤 질문 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;답변에 따른 실시간 꼬리질문&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;STT를 이용한 답변 텍스트 변환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;답변의 논리 구조 평가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;면접관&amp;middot;평가&amp;middot;코칭 역할을 나눈 LLM Agent&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;LangGraph를 활용한 Agent Workflow&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Langfuse를 이용한 Prompt 품질 관리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기능만 보면 매력적이었지만 모델과 웹 서비스를 이틀 안에 함께 완성해야 하는 일정에는 범위가 너무 컸다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;기획의 첫 번째 중요한 결정은 하고 싶은 기능보다 확실하게 완성할 수 있는 기능을 우선하는 것이었다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. 행동 자가진단 중심의 MVP&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;팀 논의 끝에 프로젝트의 중심을 LLM 면접관에서 &lt;/span&gt;&lt;b&gt;&lt;span&gt;시선과 표정을 분석하는 행동 자가진단 서비스&lt;/span&gt;&lt;/b&gt;&lt;span&gt;로 좁혔다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;자유로운 질문 생성과 꼬리질문은 제외하고 면접 질문은 고정된 리스트로 제공하는 방식으로 단순화했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기획 단계에서 정한 MVP는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;AI 모델&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;안구 움직임 분석 모델&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;얼굴 표정&amp;middot;감정 분석 모델&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;MAIN 기능&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;고정 면접 질문 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;웹캠 기반 모의면접&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시선과 표정 실시간 분석&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;특정 행동이 3초 이상 지속될 때 Toast 알림&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;면접 종료 후 행동 분석 리포트&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;SUB 기능&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;기존 면접 영상 업로드&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;업로드 영상의 시선과 표정 분석&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;실시간 면접과 같은 형식의 리포트 제공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;많은 기능을 보여주기보다 면접 시작부터 분석과 결과 확인까지 하나의 흐름을 완성하는 것을 MVP의 기준으로 삼았다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. 음성 기능을 위한 확장 가능성&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초기 범위를 줄이면서 LLM Agent와 복잡한 음성 분석은 우선순위에서 제외했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 팀 논의에서는 백엔드 상황에 따라 다음 기능을 다시 연결할 수 있도록 확장 가능성을 남겨뒀다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;면접 답변 오디오 녹음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;STT를 통한 답변 텍스트 추출&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;질문별 답변 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;답변 내용을 바탕으로 한 LLM 총평&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음 구상했던 자유로운 LLM 면접관을 그대로 구현하는 것이 아니라 고정 질문 기반의 현재 구조에 연결 가능한 부분만 선택하는 방향이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;기획은 처음 작성한 기능 목록을 지키는 일이 아니라 개발 상황에 따라 구현 범위를 계속 다시 합의하는 과정이었다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. 감정 라벨 조정&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초기 계획에서는 다음 7개 감정을 분류하는 모델을 구상했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;기쁨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;당황&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;분노&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;불안&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;상처&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;슬픔&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;중립&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러나 AI팀이 데이터 Label의 품질을 검토하면서 클래스에 따라 불일치가 존재한다는 사실을 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파일명을 기준으로 한 업로더 Label과 Annotation 참여자 3명의 다수결 Label 사이에 최대 24%의 불일치가 있었고 특히 &lt;/span&gt;&lt;b&gt;&lt;span&gt;당황과 불안 사이의 혼동이 크게 나타났다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 반영해 서비스에서 실제로 보여줄 감정은 다음 4개로 좁히는 방향을 정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;중립, 당황, 불안, 기쁨&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델의 7클래스 구조는 유지하고 서비스 판정 로직에서 4개 감정만 사용하는 절충안도 함께 논의했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 방법을 사용하면 모델과 백엔드의 연결 구조를 크게 바꾸지 않으면서 실제 화면에서 사용하는 감정 정보를 단순화할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. 평가자가 아닌 기록자&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기획 단계에서 중요하게 정한 원칙은 SelfFit이 지원자의 면접 당락이나 능력을 판단하지 않는다는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;시선과 표정만으로 지원자의 역량과 태도를 평가하면 AI의 편향된 판단을 강화할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 SelfFit의 역할을 평가자가 아닌 &lt;/span&gt;&lt;b&gt;&lt;span&gt;면접 중 관찰된 행동을 정리하는 기록자&lt;/span&gt;&lt;/b&gt;&lt;span&gt;로 제한했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;서비스에서는 다음과 같은 객관적인 정보를 제공하도록 기획했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;시선이 화면을 벗어난 시간&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;전체 시선 유지율&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;감정별 관찰 비율&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;변화가 많이 나타난 구간&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;질문별 답변 내용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;사용자가 참고할 수 있는 총평&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;AI가 면접 결과를 결정하는 것이 아니라 사용자가 자신의 행동을 돌아볼 수 있도록 정보를 제공하는 것이 SelfFit의 원칙이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. 실제 서비스 환경을 고려한 데이터 선택&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;시선 분석에는 AI-Hub의 디스플레이 중심 안구 움직임 영상 데이터를 활용하기로 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?dataSetSn=71421&quot; rel=&quot;noopener&quot;&gt;https://www.aihub.or.kr/aihubdata/data/view.do?dataSetSn=71421&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1788832037321&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;AI-Hub&quot; data-og-description=&quot;&amp;nbsp; 구분 속성명 타입 필수여부 설명 범위 비고 1 Annotations object &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1-1 name string Y 이미지 파일명 &amp;nbsp; &amp;nbsp; 1-2 inst string Y 디스플레이 장치 S,T,L,V,M *디스플레이 장치 참고 1-3 image string Y 이미지 종&quot; data-og-host=&quot;www.aihub.or.kr&quot; data-og-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?dataSetSn=71421&quot; data-og-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?dataSetSn=71421&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbHqT5/dJMb85XcWyH/2ppCesweIcEWA0lGAMA9Fk/img.png?width=1292&amp;amp;height=590&amp;amp;face=20_104_96_526,https://scrap.kakaocdn.net/dn/KOLHA/dJMb8WMJiDn/vEFmPbA3bsZIPKR4AKCE6K/img.png?width=1201&amp;amp;height=272&amp;amp;face=0_0_1201_272,https://scrap.kakaocdn.net/dn/kD1AU/dJMb8PGPOEB/GDNjvykG6KZIaro73vo800/img.png?width=680&amp;amp;height=329&amp;amp;face=0_0_680_329&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?dataSetSn=71421&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?dataSetSn=71421&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbHqT5/dJMb85XcWyH/2ppCesweIcEWA0lGAMA9Fk/img.png?width=1292&amp;amp;height=590&amp;amp;face=20_104_96_526,https://scrap.kakaocdn.net/dn/KOLHA/dJMb8WMJiDn/vEFmPbA3bsZIPKR4AKCE6K/img.png?width=1201&amp;amp;height=272&amp;amp;face=0_0_1201_272,https://scrap.kakaocdn.net/dn/kD1AU/dJMb8PGPOEB/GDNjvykG6KZIaro73vo800/img.png?width=680&amp;amp;height=329&amp;amp;face=0_0_680_329');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AI-Hub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 구분 속성명 타입 필수여부 설명 범위 비고 1 Annotations object &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1-1 name string Y 이미지 파일명 &amp;nbsp; &amp;nbsp; 1-2 inst string Y 디스플레이 장치 S,T,L,V,M *디스플레이 장치 참고 1-3 image string Y 이미지 종&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.aihub.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;원본 데이터에는 차량 LCD, 태블릿, 스마트폰, 노트북과 모니터 등 여러 환경이 포함되어 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;SelfFit은 노트북이나 모니터의 웹캠으로 사용하는 서비스이므로 차량 LCD, 태블릿과 스마트폰 환경의 데이터는 처음부터 제외하는 방향을 세웠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;표정 분석에는 AI-Hub의 한국인 감정인식을 위한 복합 영상 데이터를 활용하기로 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://aihub.or.kr/aihubdata/data/view.do?dataSetSn=82&quot; rel=&quot;noopener&quot;&gt;https://aihub.or.kr/aihubdata/data/view.do?dataSetSn=82&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1788832103713&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;AI-Hub&quot; data-og-description=&quot;데이터셋 다운로드 승인이 완료 된 후 API 다운로드 서비스를 이용하실 수 있습니다. API 다운로드 파일은 분할 압축되어 다운로드 됩니다. 분할 압축 해제를 위해서는 분할 압축 파일들의 병합이&quot; data-og-host=&quot;aihub.or.kr&quot; data-og-source-url=&quot;https://aihub.or.kr/aihubdata/data/view.do?dataSetSn=82&quot; data-og-url=&quot;https://aihub.or.kr/aihubdata/data/view.do?dataSetSn=82&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1Z7Wj/dJMb9hDknIB/iy3s4rtldPD1GNgrx6hRAk/img.png?width=1118&amp;amp;height=2320&amp;amp;face=188_572_536_952,https://scrap.kakaocdn.net/dn/efpDeu/dJMb9jgQQIK/nvDCQOpZGOCYNzzXEoSgg0/img.png?width=2800&amp;amp;height=405&amp;amp;face=0_0_2800_405,https://scrap.kakaocdn.net/dn/cKUMJj/dJMb9kmvIaq/4KkdqApE2NOZnU7PAn42H0/img.png?width=1201&amp;amp;height=272&amp;amp;face=0_0_1201_272&quot;&gt;&lt;a href=&quot;https://aihub.or.kr/aihubdata/data/view.do?dataSetSn=82&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aihub.or.kr/aihubdata/data/view.do?dataSetSn=82&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1Z7Wj/dJMb9hDknIB/iy3s4rtldPD1GNgrx6hRAk/img.png?width=1118&amp;amp;height=2320&amp;amp;face=188_572_536_952,https://scrap.kakaocdn.net/dn/efpDeu/dJMb9jgQQIK/nvDCQOpZGOCYNzzXEoSgg0/img.png?width=2800&amp;amp;height=405&amp;amp;face=0_0_2800_405,https://scrap.kakaocdn.net/dn/cKUMJj/dJMb9kmvIaq/4KkdqApE2NOZnU7PAn42H0/img.png?width=1201&amp;amp;height=272&amp;amp;face=0_0_1201_272');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AI-Hub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;데이터셋 다운로드 승인이 완료 된 후 API 다운로드 서비스를 이용하실 수 있습니다. API 다운로드 파일은 분할 압축되어 다운로드 됩니다. 분할 압축 해제를 위해서는 분할 압축 파일들의 병합이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aihub.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;데이터가 많더라도 학습 환경과 실제 서비스 환경이 다르면 모델 성능이 그대로 이어지지 않을 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 데이터의 양보다 실제 PC 기반 면접 환경과의 유사성을 우선했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. 역할 분담과 협업 구조&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;팀은 다음과 같이 역할을 나눴다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;PM&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;어채*&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;프론트엔드&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;나&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;백엔드&amp;middot;AI 서비스 통합&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;박기*, 주세*&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;ML Engineer(CV)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;강덕*, 어채*, 이재*, 이주*, 주세*&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트 기간이 이틀뿐이어서 일부 팀원은 여러 역할을 함께 담당했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;PM도 모델 개발에 참여하고 백엔드 담당자는 AI 서비스 연결까지 함께 맡았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;나는 프론트엔드를 단독으로 담당하며 기획에도 참여했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아직 실제 API와 모델 결과가 준비되지 않은 상태였기 때문에 이날은 개발보다 &lt;/span&gt;&lt;b&gt;&lt;span&gt;프론트엔드에 필요한 화면과 데이터 및 기능의 기준을 정리하는 데 집중했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 파트가 동시에 작업할 수 있도록 이후에는 합의한 입출력 형태를 기준으로 Mock 데이터를 먼저 활용하는 방향도 정했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. 프론트엔드 화면 구상&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프론트엔드에서는 사용자가 SelfFit의 필요성을 이해하고 모의면접을 시작할 수 있도록 화면 흐름을 구성했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기획한 주요 화면은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;서비스 소개 화면&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;SelfFit의 핵심 메시지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;서비스가 필요한 이유&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시선과 표정 분석 기능 소개&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;실시간 면접과 영상 분석 안내&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;실시간 면접 화면&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;면접 질문 표시&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;웹캠 화면&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;현재 질문과 진행 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시선&amp;middot;표정 분석 결과&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;지속 행동 Toast 알림&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;영상 업로드 화면&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;녹화 영상 선택&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;영상 분석 진행 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;분석 완료 안내&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;행동 분석 리포트&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;시선 유지율&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;표정 안정도와 감정 분포&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;행동 변화 구간&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;질문별 답변 텍스트&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;AI 종합 피드백&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;프론트엔드 기획에서는 기능을 나열하기보다 사용자가 어떤 순서로 서비스를 이용할지를 먼저 정리했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. 프론트엔드 기술 스택과 배포 계획&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프론트엔드는 처음에 Vite와 React를 고려했지만 팀의 프로젝트 구조와 Convention을 통일하기 위해 Next.js를 사용하는 방향으로 변경했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Vercel 배포 자체는 Vite에서도 가능했지만 팀원들과 같은 기준으로 구조를 관리하는 것을 우선했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체 기술 스택은 다음과 같이 계획했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;프론트엔드: Next.js&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;백엔드: FastAPI&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;DB: Supabase PostgreSQL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;인증: Supabase Auth&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;AI 모델: PyTorch&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;얼굴&amp;middot;눈 영역 검출: MediaPipe&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;영상 처리: OpenCV&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;추론 최적화: ONNX Runtime&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초기에는 Vercel과 Render를 이용한 배포도 계획했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 이틀 동안 웹캠, AI 추론 서버와 백엔드까지 안정적으로 배포하기 어렵다면 노트북 한 대에서 전체 서비스를 실행하는 로컬 환경으로 변경하기로 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;기획 단계에서는 배포 자체보다 핵심 기능의 안정적인 연결을 우선순위로 설정했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. 이틀이라는 제약이 만든 기준&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기획 당시 일정은 다음과 같이 구성했다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Day 1｜2026년 9월 4일&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;킥오프 미팅과 서비스 기획&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터 분석&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;프론트엔드&amp;middot;백엔드 환경 구성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;프로젝트 계획서 작성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;화면과 기능 설계&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델 개발 준비&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Day 2｜2026년 9월 7일&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;데이터 분석과 모델 개발&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델 성능 평가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;프론트엔드&amp;middot;백엔드 기능 개발&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;추론 서버 환경 구성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;QA&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;최종 보고서와 발표 준비&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이틀이라는 시간은 모든 기획 결정의 공통 기준이었다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;자유로운 LLM 면접관 대신 고정 질문 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;서비스 감정 Label을 4개로 제한&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;실제 API가 준비되기 전 Mock 데이터 활용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;클라우드 배포보다 로컬 통합 실행 우선&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;음성 기능은 연동 가능한 범위만 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;MVP는 기능이 적은 서비스가 아니라 제한된 시간 안에 핵심 가치를 확인할 수 있도록 범위를 정한 서비스다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;오전에는 Ultralytics YOLO의 학습&amp;middot;평가&amp;middot;튜닝 과정을 공부했다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Precision, Recall과 mAP를 함께 사용해 객체 탐지 성능을 평가한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;SelfFit은 웹캠으로 시선과 표정을 분석하는 면접 자가진단 서비스다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;핵심 사용자는 비언어적 행동을 점검하기 어려운 취업준비생이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;초기에는 LLM Agent와 자유로운 꼬리질문까지 포함한 구조를 구상했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;2일 안에 완성하기 위해 고정 질문과 시선&amp;middot;표정 분석 중심으로 범위를 좁혔다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;음성&amp;middot;STT&amp;middot;LLM 기능은 개발 상황에 따라 일부 연결할 수 있도록 가능성을 남겼다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터 Label 검증 결과를 반영해 서비스 감정은 4개로 제한했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델의 7클래스 구조를 유지하는 절충안도 함께 논의했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;SelfFit은 채용 결과를 평가하지 않고 관찰된 행동을 기록한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;실제 웹캠 환경과 다른 시선 데이터는 학습 대상에서 제외하기로 했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;나는 프론트엔드 담당으로 화면 구성과 사용자 흐름 및 기능 정의에 집중했다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Next.js를 프론트엔드 기술 스택으로 선정했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;배포보다 핵심 기능의 안정적인 연결을 우선하도록 계획했다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 19는 본격적인 개발보다 프로젝트의 방향과 범위를 결정하는 데 많은 시간을 사용했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음에는 LLM Agent가 질문과 꼬리질문을 만들고 답변의 논리까지 평가하는 큰 구조를 생각했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 이틀이라는 시간을 기준으로 다시 살펴보니 핵심 기능이 무엇인지 정하는 과정이 필요했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;감정 Label 역시 처음 정한 7개를 그대로 사용하기보다 실제 데이터 품질을 검토한 결과에 따라 서비스에서 사용할 범위를 조정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프론트엔드를 단독으로 담당하는 만큼 화면 구조를 정할 때 각 기능이 어떤 데이터를 받고 무엇을 보여줘야 하는지도 함께 생각해야 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아직 많은 코드를 많이 작성하지는 않았지만 &lt;/span&gt;&lt;b&gt;&lt;span&gt;서비스 소개, 모의면접, 영상 업로드와 결과 리포트가 어떻게 연결돼야 하는지를 먼저 정리할 수 있었다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 기획을 통해 계획서는 처음의 아이디어를 고정하는 문서가 아니라 &lt;/span&gt;&lt;b&gt;&lt;span&gt;시간, 데이터와 팀의 상황을 반영해 가장 현실적인 방향을 계속 합의하는 기준&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이라는 점을 느꼈다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 19 오전에는 Ultralytics를 활용한 YOLO 객체 탐지 모델의 학습, 평가와 하이퍼파라미터 튜닝을 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오후에는 팀원들과 웹캠 기반 면접 자가진단 서비스 SelfFit을 기획했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;나는 프로젝트 계획서 작성을 돕고 프론트엔드 담당으로서 서비스에 필요한 화면, 사용자 흐름과 기능을 구체화했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초기의 복잡한 LLM Agent 아이디어는 이틀 안에 완성할 수 있는 고정 질문과 시선, 표정 분석 중심의 MVP로 조정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터 품질을 반영해 감정 Label의 범위를 좁히는 방안과 배포가 어려울 경우 로컬 환경에서 전체 서비스를 연결하는 방안도 함께 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘은 개발 결과물을 많이 만든 날이라기보다 &lt;/span&gt;&lt;b&gt;&lt;span&gt;팀이 같은 방향으로 개발할 수 있도록 서비스의 기준선을 만든 날&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이었다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>MVP</category>
      <category>nextjs</category>
      <category>YOLO</category>
      <category>감정분석</category>
      <category>경기AI멤버십</category>
      <category>시선추적</category>
      <category>컴퓨터비전</category>
      <category>프론트엔드</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/19</guid>
      <comments>https://a-zer0.tistory.com/19#entry19comment</comments>
      <pubDate>Tue, 8 Sep 2026 10:49:46 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 18. YOLO 객체 탐지와 AI 플랫폼 활용</title>
      <link>https://a-zer0.tistory.com/18</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JQfj2/dJMcacdlg3x/P0xPfKITevht7EeH8qmWb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JQfj2/dJMcacdlg3x/P0xPfKITevht7EeH8qmWb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JQfj2/dJMcacdlg3x/P0xPfKITevht7EeH8qmWb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJQfj2%2FdJMcacdlg3x%2FP0xPfKITevht7EeH8qmWb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1254&quot; height=&quot;1254&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;1254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 18에서는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;객체 탐지(Object Detection)의 기본 개념과 Roboflow 플랫폼 활용 방법&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;먼저 Bounding Box, 클래스와 Confidence의 의미를 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 Roboflow에서 이미지를 업로드하고 객체를 라벨링한 뒤 데이터를 Train&amp;middot;Validation&amp;middot;Test로 분리해 데이터셋 버전을 만드는 과정을 실습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막으로 사전학습 모델을 이용해 객체를 탐지하고 Roboflow에서 모델을 학습&amp;middot;평가하는 흐름을 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 학습 흐름은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;객체 탐지 &lt;/span&gt;&lt;span&gt;&amp;rarr; Bounding Box와 Confidence &lt;/span&gt;&lt;span&gt;&amp;rarr; Roboflow Universe &lt;/span&gt;&lt;span&gt;&amp;rarr; 사전학습 모델 예측&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 객체 탐지 결과 시각화 &lt;/span&gt;&lt;span&gt;&amp;rarr; 이미지 좌표 보정 &lt;/span&gt;&lt;span&gt;&amp;rarr; 프로젝트 생성과 이미지 업로드 &lt;/span&gt;&lt;span&gt;&amp;rarr; Bounding Box Annotation&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 데이터 분리와 증강 &lt;/span&gt;&lt;span&gt;&amp;rarr; 데이터셋 버전 생성 &lt;/span&gt;&lt;span&gt;&amp;rarr; YOLO 형식 다운로드 &lt;/span&gt;&lt;span&gt;&amp;rarr; 모델 학습과 평가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 객체 탐지란&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;객체 탐지는 이미지나 영상에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;객체의 종류와 위치를 함께 찾는 컴퓨터 비전 문제&lt;/span&gt;&lt;/b&gt;&lt;span&gt;다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지 분류가 이미지 전체의 대표 클래스를 예측한다면 객체 탐지는 한 이미지 안에 있는 여러 객체를 각각 찾아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;목적&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;이미지 전체의 클래스 예측&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;객체의 클래스와 위치 예측&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;주요 출력&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;클래스와 확률&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;클래스, Confidence와 Bounding Box&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;객체 수&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;하나의 대표 클래스&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;여러 객체 탐지 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;객체 탐지는 이미지 속에 무엇이 있는지뿐 아니라 어디에 있는지까지 예측한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. Bounding Box와 Confidence&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FuS04/dJMcab6BXBO/danNtNG3hTiRS99j79B3Kk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FuS04/dJMcab6BXBO/danNtNG3hTiRS99j79B3Kk/img.jpg&quot; data-alt=&quot;출처: https://www.peopleforai.com/glossary/bounding-box/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FuS04/dJMcab6BXBO/danNtNG3hTiRS99j79B3Kk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFuS04%2FdJMcab6BXBO%2FdanNtNG3hTiRS99j79B3Kk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;496&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://www.peopleforai.com/glossary/bounding-box/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Bounding Box는 모델이 객체가 있다고 판단한 영역을 사각형으로 표현한 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;탐지 결과에는 일반적으로 다음 정보가 포함된다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Bounding Box 중심의 x&amp;middot;y 좌표&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Bounding Box의 너비와 높이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;예측한 클래스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Class ID&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Confidence&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Confidence는 모델이 해당 예측을 얼마나 확신하는지 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;값이 높을수록 확신이 크지만 실제로 올바른 탐지인지 이미지 위에 결과를 표시해 확인해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;객체 탐지 결과는 위치, 클래스와 예측 신뢰도를 함께 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. Roboflow란&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://roboflow.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://roboflow.com/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1788484629060&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Roboflow: Computer vision tools for developers and enterprises&quot; data-og-description=&quot;Everything you need to build and deploy computer vision models, from automated annotation tools to high-performance deployment solutions.&quot; data-og-host=&quot;roboflow.com&quot; data-og-source-url=&quot;https://roboflow.com/&quot; data-og-url=&quot;https://roboflow.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bg4C1L/dJMb8QMvpqN/iudmJ0V23U0jSeNS3FGQSk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/5Gx5h/dJMb8YX4Y82/QCBgKa1DhOI9ktSo0oEuI1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://roboflow.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://roboflow.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bg4C1L/dJMb8QMvpqN/iudmJ0V23U0jSeNS3FGQSk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/5Gx5h/dJMb8YX4Y82/QCBgKa1DhOI9ktSo0oEuI1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Roboflow: Computer vision tools for developers and enterprises&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Everything you need to build and deploy computer vision models, from automated annotation tools to high-performance deployment solutions.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;roboflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Roboflow는 컴퓨터 비전 모델의 데이터 준비부터 학습과 배포까지 지원하는 플랫폼이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주요 기능은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;이미지 업로드와 데이터 관리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Bounding Box Annotation&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터 전처리와 증강&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train&amp;middot;Validation&amp;middot;Test 분리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델 학습과 성능 평가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;REST API를 이용한 모델 활용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;웹과 엣지 디바이스 배포&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;팀 단위 프로젝트 관리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;COCO, Pascal VOC와 YOLO 등 다양한 형식 지원&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Roboflow는 데이터 준비, 모델 학습, 평가와 배포 과정을 하나의 환경에서 관리할 수 있게 해준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. Roboflow Universe&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Roboflow Universe에서는 공개된 컴퓨터 비전 데이터셋과 사전학습 모델을 찾아볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;새로운 프로젝트에 필요한 데이터를 처음부터 모두 수집하지 않고 비슷한 목적의 공개 데이터셋을 활용해 빠르게 실험할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 공개 데이터셋을 사용할 때는 다음 내용을 확인해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;필요한 클래스가 포함되어 있는가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Annotation이 정확한가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;클래스별 이미지 수가 충분한가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;실제 사용 환경과 이미지 조건이 비슷한가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터셋의 라이선스가 적절한가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;공개 데이터셋은 편리하지만 데이터 품질, 클래스 기준과 라이선스를 반드시 검토해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. 사전학습 모델을 이용한 예측&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Roboflow에서는 이미 학습된 모델을 불러와 새로운 이미지의 객체를 탐지할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지를 입력하면 탐지된 객체별로 클래스, Confidence와 Bounding Box 좌표가 반환된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 결과를 이용해 어떤 객체가 탐지됐는지 확인하고 OpenCV 등으로 원본 이미지 위에 사각형과 클래스 이름을 표시할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;사전학습 모델은 직접 모델을 새로 학습하기 전에 데이터의 탐지 가능성을 빠르게 확인하는 데 활용할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. 이미지 크기와 좌표 보정&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델은 입력 이미지를 정해진 크기로 조정한 뒤 객체를 탐지할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업 예시에서는 모델이 이미지를 640&amp;times;640 크기로 변환하고 해당 크기를 기준으로 Bounding Box 좌표를 계산했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;원본 이미지의 크기가 다르면 예측 좌표를 그대로 표시했을 때 Box 위치가 어긋날 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 모델 입력 크기와 원본 이미지 크기의 비율을 이용해 좌표를 보정해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Bounding Box를 정확하게 표시하려면 모델의 좌표계와 결과를 표시할 이미지의 크기를 일치시켜야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. 객체 탐지 프로젝트 생성&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;직접 객체 탐지 데이터를 만들기 위해 Roboflow에서 새로운 프로젝트를 생성했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트를 만들 때는 프로젝트 이름, 공개 범위, 라이선스와 작업 유형 등을 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 학습에 사용할 이미지를 업로드하고 Batch Name이나 Tag를 지정해 데이터를 관리할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지를 준비할 때는 중복, 해상도, 객체의 크기와 촬영 환경이 충분히 다양한지 확인해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;모델 학습의 출발점은 많은 이미지가 아니라 목적에 맞고 품질이 좋은 이미지다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. Bounding Box Annotation&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMZEi4/dJMcagz20rh/qEVO8VmXC2i3KxdFaAG48k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMZEi4/dJMcagz20rh/qEVO8VmXC2i3KxdFaAG48k/img.png&quot; data-alt=&quot;손 빠르면서 꼼꼼한 사람에게 정말 잘 맞을 듯&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMZEi4/dJMcagz20rh/qEVO8VmXC2i3KxdFaAG48k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMZEi4%2FdJMcagz20rh%2FqEVO8VmXC2i3KxdFaAG48k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1915&quot; height=&quot;942&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;손 빠르면서 꼼꼼한 사람에게 정말 잘 맞을 듯&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Annotation은 이미지 속 객체의 위치와 클래스를 정답으로 표시하는 작업이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;객체 주변에 Bounding Box를 그리고 해당 객체의 클래스 Label을 지정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Box는 객체의 실제 경계에 최대한 가깝게 그려야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Box가 지나치게 크면 배경까지 객체의 특징으로 학습할 수 있고 너무 작으면 객체의 중요한 부분이 제외될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 같은 객체를 서로 다른 이름으로 등록하지 않도록 클래스 이름을 일관되게 사용해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;정확하고 일관된 Annotation은 객체 탐지 모델의 성능을 결정하는 핵심 데이터 품질 요소다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. 협업 라벨링&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Roboflow에서는 팀원을 초대해 Annotation 작업을 나눌 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 사람이 작업하면 많은 이미지를 빠르게 처리할 수 있지만 라벨링 기준이 서로 다르면 데이터의 일관성이 떨어질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;협업 전에는 다음과 같은 기준을 정하는 것이 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;일부가 가려진 객체의 처리 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이미지 밖으로 잘린 객체의 처리 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;겹쳐 있는 객체의 라벨링 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Bounding Box에 포함할 범위&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;클래스 이름과 구분 기준&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;협업 라벨링에서는 작업 속도뿐 아니라 모든 작업자가 같은 기준을 사용하는 것이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. 데이터 분리와 증강&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Annotation이 끝난 데이터는 Train, Validation과 Test로 분리한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Train:&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;모델의 가중치를 학습하는 데이터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Validation:&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;학습 중 일반화 성능을 확인하는 데이터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Test:&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;모델 결정 후 최종 성능을 평가하는 데이터&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업에서는 데이터를 7:2:1로 나누는 예시를 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Train Data에는 회전, 반전, 밝기 조절과 확대&amp;middot;축소 등의 Data Augmentation을 적용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 숫자 이미지처럼 방향이 의미에 영향을 주는 데이터는 과도한 회전이나 반전으로 클래스의 의미가 달라질 수 있으므로 주의해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Data Augmentation은 원래 객체의 의미와 Bounding Box가 유지되는 범위에서 적용해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. 데이터셋 버전과 YOLO 형식&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터 분리, 전처리와 증강 설정이 끝나면 새로운 데이터셋 버전을 생성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;버전에는 다음 정보가 함께 관리된다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;사용한 이미지와 Annotation&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train&amp;middot;Validation&amp;middot;Test 비율&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이미지 전처리 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Data Augmentation 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;출력 데이터 형식&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;생성한 데이터셋은 YOLOv8 등 원하는 형식으로 내려받을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지와 객체의 클래스&amp;middot;좌표가 저장된 Label 파일이 함께 제공되므로 학습 전에 각 폴더와 파일이 올바르게 연결됐는지 확인해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;데이터셋 버전 관리는 모델의 학습 조건과 결과를 비교하고 재현하기 위한 과정이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. 모델 학습과 성능 평가&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Roboflow에서는 생성한 데이터셋 버전을 기반으로 객체 탐지 모델을 학습할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습이 끝나면 다음과 같은 항목을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Box Loss&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Class Loss&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Object Loss&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Precision&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Recall&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;mAP&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이미지별 예측 결과&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Box Loss는 객체의 위치와 크기 예측, Class Loss는 객체의 클래스 분류, Object Loss는 해당 위치에 객체가 존재하는지를 학습한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Precision은 모델이 탐지한 결과 중 실제 객체가 맞는 비율이고 Recall은 실제 객체 중 모델이 찾아낸 비율이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;mAP는 여러 클래스의 객체 탐지 성능을 종합적으로 평가하는 대표적인 지표다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;모델 성능은 하나의 점수만 보지 않고 Loss, Precision, Recall, mAP와 실제 예측 결과를 함께 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;객체 탐지는 이미지 속 객체의 클래스와 위치를 함께 예측한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Bounding Box는 탐지한 객체의 위치를 사각형으로 표현한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Confidence는 모델의 예측 신뢰도를 나타낸다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Roboflow는 데이터 준비부터 모델 학습과 배포까지 지원한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Roboflow Universe에서는 공개 데이터셋과 사전학습 모델을 찾을 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;공개 데이터셋은 품질, 클래스 구성과 라이선스를 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;사전학습 모델로 새로운 이미지의 객체를 바로 탐지할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이미지 크기가 다르면 Bounding Box 좌표 보정이 필요하다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Annotation에서는 객체마다 정확한 Box와 클래스 Label을 지정한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;협업 라벨링에서는 일관된 기준이 중요하다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train&amp;middot;Validation&amp;middot;Test는 서로 다른 목적으로 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Data Augmentation은 객체의 의미가 유지되는 범위에서 적용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;데이터셋 버전은 분리 비율, 전처리와 증강 조건을 함께 관리한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터셋을 YOLO 형식으로 내려받아 모델 학습에 사용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델은 Box&amp;middot;Class&amp;middot;Object Loss를 이용해 위치와 클래스를 학습한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Precision, Recall과 mAP를 함께 확인해 성능을 평가해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 16과 Day 17에서는 CNN의 기본 구조와 전이학습을 공부했다. 오늘은 이미지 전체를 분류하는 것에서 더 나아가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;여러 객체의 종류와 위치를 동시에 찾는 객체 탐지 과정&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 경험했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음에는 Bounding Box를 그리는 작업이 단순해 보였지만 Box가 객체의 경계와 맞지 않거나 클래스가 일관되지 않으면 모델이 잘못된 정답을 학습할 수 있다는 점을 알게 됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Roboflow를 사용하면서 이미지 업로드, Annotation, 데이터 분리, 증강과 모델 학습이 하나의 Workflow로 연결되는 것도 확인할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 객체 탐지 결과를 이미지에 표시할 때는 모델이 사용한 입력 크기와 원본 이미지의 좌표계를 맞춰야 한다는 점도 새롭게 배웠다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞으로 객체 탐지 프로젝트를 진행할 때는 모델 실행부터 시작하기보다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;클래스 기준과 Annotation 방법을 먼저 정하고 데이터 품질을 확인하는 습관&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 들여야겠다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 18에서는 PDF의 31페이지까지 학습하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Roboflow를 활용한 객체 탐지 프로젝트의 준비 과정을 공부했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Bounding Box, 클래스와 Confidence의 의미를 알아보고, 사전학습 모델의 예측 결과를 이미지에 표시하는 방법을 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 직접 프로젝트를 생성해 이미지를 업로드하고, 객체마다 Bounding Box와 클래스 Label을 지정했다. Train&amp;middot;Validation&amp;middot;Test 분리와 Data Augmentation을 설정하고 데이터셋 버전을 생성하는 과정도 실습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막으로 Roboflow에서 모델을 학습하고 Loss, Precision, Recall과 mAP를 이용해 결과를 평가하는 흐름을 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘 수업을 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;좋은 객체 탐지 모델을 만들기 위해서는 모델 학습보다 먼저 정확한 Annotation과 체계적인 데이터 관리가 필요하다&lt;/span&gt;&lt;/b&gt;&lt;span&gt;는 점을 배울 수 있었다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>annotation</category>
      <category>boundingbox</category>
      <category>roboflow</category>
      <category>YOLO</category>
      <category>경기AI멤버십</category>
      <category>딥러닝</category>
      <category>이미지라벨링</category>
      <category>컴퓨터비전</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/18</guid>
      <comments>https://a-zer0.tistory.com/18#entry18comment</comments>
      <pubDate>Fri, 4 Sep 2026 10:19:24 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 17. 사전학습 모델 활용</title>
      <link>https://a-zer0.tistory.com/17</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nmAdP/dJMcaas7sQV/WHytjSRC79Xt0rBeiDVCZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nmAdP/dJMcaas7sQV/WHytjSRC79Xt0rBeiDVCZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nmAdP/dJMcaas7sQV/WHytjSRC79Xt0rBeiDVCZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnmAdP%2FdJMcaas7sQV%2FWHytjSRC79Xt0rBeiDVCZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1254&quot; height=&quot;1254&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;1254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 17에서는 &lt;b&gt;CNN 사전학습 모델(Pre-trained Model)과 전이&lt;/b&gt;학&lt;b&gt;습(Transfer Learning)&lt;/b&gt;을 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;먼저 ImageNet과 같은 대규모 이미지 데이터로 미리 학습된 CNN 모델의 특징을 살펴보고 Keras Applications에서 제공하는 대표적인 사전학습 모델을 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 기존 모델의 특징 추출 영역을 새로운 이미지 분류 문제에 재사용하는 방법과 &lt;/span&gt;&lt;b&gt;&lt;span&gt;Feature Extraction과 Fine-Tuning의 차이&lt;/span&gt;&lt;/b&gt;&lt;span&gt;를 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막으로 ResNet50을 이용한 새로운 이미지 분류 과정과 제한된 이미지 데이터를 보완하기 위한 Data Augmentation을 실습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실습 코드는 제외하고 수업에서 배운 핵심 개념을 중심으로 정리하려고 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 학습 흐름은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;CNN 사전학습 모델 &lt;/span&gt;&lt;span&gt;&amp;rarr; Keras Applications &lt;/span&gt;&lt;span&gt;&amp;rarr; ImageNet 데이터셋 &lt;/span&gt;&lt;span&gt;&amp;rarr; 전이학습의 개념 &lt;/span&gt;&lt;span&gt;&amp;rarr; 기존 출력층 제거&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 새로운 분류층 연결 &lt;/span&gt;&lt;span&gt;&amp;rarr; Feature Extraction &lt;/span&gt;&lt;span&gt;&amp;rarr; Fine-Tuning &lt;/span&gt;&lt;span&gt;&amp;rarr; ResNet50 이미지 예측 &lt;/span&gt;&lt;span&gt;&amp;rarr; 새로운 데이터셋 적용&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;rarr; Data Augmentation &lt;/span&gt;&lt;span&gt;&amp;rarr; ImageDataGenerator &lt;/span&gt;&lt;span&gt;&amp;rarr; 클래스별 폴더 구성 &lt;/span&gt;&lt;span&gt;&amp;rarr; 이미지 분류 실습&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 사전학습 모델이란&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사전학습 모델은 &lt;/span&gt;&lt;b&gt;&lt;span&gt;대규모 데이터셋으로 이미 학습을 마친 딥러닝 모델&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN을 처음부터 학습하려면 많은 이미지 데이터와 연산 자원이 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 실제 프로젝트에서는 새로운 문제마다 충분한 데이터를 확보하기 어려울 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이때 대규모 이미지 데이터에서 이미 다양한 특징을 학습한 모델을 불러오면 기존의 학습 결과를 새로운 문제에 활용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사전학습 모델은 일반적으로 이미지에서 다음과 같은 특징을 추출하는 능력을 가지고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;선과 경계&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;색상과 명암&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모서리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;질감&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;반복되는 형태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;물체의 부분적인 구조&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;복잡한 객체 형태&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초기 Layer에서는 경계와 질감처럼 일반적인 특징을 학습하고 뒤쪽 Layer로 갈수록 특정 물체를 구분하는 복잡한 특징을 학습한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;사전학습 모델은 처음부터 다시 학습하지 않고 이미 학습된 이미지 특징을 재사용할 수 있다는 장점이 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. ImageNet과 사전학습&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://www.image-net.org/index.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.image-net.org/index.php&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1788415166728&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ImageNet&quot; data-og-description=&quot;Mar 11 2021. ImageNet website update.&quot; data-og-host=&quot;www.image-net.org&quot; data-og-source-url=&quot;https://www.image-net.org/index.php&quot; data-og-url=&quot;https://www.image-net.org/index.php&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.image-net.org/index.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.image-net.org/index.php&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ImageNet&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Mar 11 2021. ImageNet website update.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.image-net.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN 사전학습 모델은 ImageNet과 같은 대규모 이미지 데이터셋으로 학습된 경우가 많다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ImageNet은 다양한 물체가 포함된 대규모 이미지 데이터셋이며 Keras에서 제공하는 사전학습 모델은 일반적으로 ImageNet의 1,000개 클래스를 구분하도록 학습되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델은 많은 종류의 이미지를 학습하면서 특정 클래스에만 한정되지 않는 다양한 시각적 특징을 익힌다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 새로운 동물 이미지를 분류하는 경우 사전학습 모델이 이미 학습한 털의 질감, 눈의 모양과 윤곽선 같은 특징을 재사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;ImageNet으로 학습된 모델의 목적은 1,000개 클래스를 분류하는 것이지만 그 과정에서 학습한 특징은 다른 이미지 문제에도 활용할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. Keras Applications&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Keras Applications는 다양한 CNN 사전학습 모델을 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://keras.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://keras.io/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1788415186870&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Keras: Deep Learning for humans&quot; data-og-description=&quot;Trusted for research and production Keras is used by CERN, NASA, NIH, and many more scientific organizations around the world (and yes, Keras is used at the Large Hadron Collider). Keras is used by Waymo to power self-driving vehicles. Keras partners with &quot; data-og-host=&quot;keras.io&quot; data-og-source-url=&quot;https://keras.io/&quot; data-og-url=&quot;https://keras.io/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://keras.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://keras.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Keras: Deep Learning for humans&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Trusted for research and production Keras is used by CERN, NASA, NIH, and many more scientific organizations around the world (and yes, Keras is used at the Large Hadron Collider). Keras is used by Waymo to power self-driving vehicles. Keras partners with&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;keras.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;대표적인 모델과 기본 입력 이미지 크기는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;VGG16, VGG19&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;224&amp;times;224&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;ResNet 계열&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;224&amp;times;224&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;MobileNet, MobileNetV2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;224&amp;times;224&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;DenseNet&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;224&amp;times;224&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Xception&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;299&amp;times;299&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;InceptionV3&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;299&amp;times;299&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;InceptionResNetV2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;299&amp;times;299&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;NASNetLarge&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;331&amp;times;331&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;NASNetMobile&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;224&amp;times;224&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Keras Applications의 모델은 다음과 같은 목적으로 활용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;기존 ImageNet 클래스 예측&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이미지 특징 추출&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;새로운 데이터셋에 전이학습 적용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;사전학습 모델의 일부를 Fine-Tuning&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델을 처음 불러오면 필요한 가중치 파일이 자동으로 다운로드되어 저장된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;사전학습 모델마다 입력 이미지 크기와 전처리 방식이 다르므로 모델의 조건을 정확하게 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. 전이학습이란&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSwF3u/dJMcafnHTfS/UPfBZztugL2kQeQSslwVg0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSwF3u/dJMcafnHTfS/UPfBZztugL2kQeQSslwVg0/img.jpg&quot; data-alt=&quot;출처: https://cbiz.chosun.com/svc/bulletin/bulletin_art.html?contid=2020092903142&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSwF3u/dJMcafnHTfS/UPfBZztugL2kQeQSslwVg0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSwF3u%2FdJMcafnHTfS%2FUPfBZztugL2kQeQSslwVg0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;352&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://cbiz.chosun.com/svc/bulletin/bulletin_art.html?contid=2020092903142&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전이학습은 한 문제에서 학습한 모델의 지식을 다른 문제에 활용하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지 분류 CNN은 앞쪽 Layer에서 선, 모서리, 색상과 질감처럼 여러 문제에서 공통으로 사용할 수 있는 특징을 학습한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 새로운 이미지 데이터가 많지 않더라도 기존 CNN의 특징 추출 영역을 활용하고 새로운 문제에 필요한 분류 영역만 다시 학습할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 ImageNet의 1,000개 클래스를 구분하던 모델을 가져와 정상, 초기 녹내장과 녹내장을 구분하는 3개 클래스 분류 모델로 변경할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전이학습의 핵심은 사전학습 모델이 이미 익힌 일반적인 이미지 특징을 새로운 분류 문제에 전달하는 것이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. 전이학습이 필요한 이유&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;새로운 CNN을 처음부터 학습하려면 많은 양의 이미지가 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터가 부족한 상태에서 복잡한 CNN을 학습하면 학습 이미지를 지나치게 기억하는 과적합이 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 모델의 모든 가중치를 처음부터 학습해야 하므로 학습 시간과 연산량도 커진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전이학습을 사용하면 다음과 같은 장점이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;적은 데이터로 학습을 시작할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;학습 시간을 줄일 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;필요한 연산 자원을 줄일 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;검증된 CNN 구조를 활용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;처음부터 학습하는 것보다 안정적인 결과를 기대할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 새로운 데이터가 사전학습 데이터와 매우 다르다면 기존 특징만으로 충분하지 않을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전이학습은 데이터가 부족한 이미지 분류 문제에서 특히 효과적으로 활용할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. CNN의 특징 추출 영역과 분류 영역&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일반적인 CNN 모델은 크게 특징 추출 영역과 분류 영역으로 나눌 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;특징 추출 영역&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Convolution과 Pooling Layer를 통과하며 이미지의 경계, 질감, 형태와 같은 특징을 추출한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;분류 영역&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;추출된 Feature Map을 이용해 입력 이미지가 어떤 클래스에 속하는지 최종적으로 판단한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ImageNet으로 학습된 모델의 마지막 분류 영역은 1,000개의 클래스를 구분하도록 구성되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;새로운 문제의 클래스가 3개라면 기존 분류 영역을 그대로 사용할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 기존 출력 부분을 제외하고 새로운 문제에 맞는 분류층을 연결해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전이학습에서는 CNN의 특징 추출 영역을 재사용하고 마지막 분류 영역을 새로운 클래스에 맞게 변경한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. include_top=False&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Keras에서 사전학습 모델을 불러올 때 &lt;/span&gt;&lt;span&gt;include_top=False&lt;/span&gt;&lt;span&gt;를 설정하면 기존 모델의 마지막 분류 영역을 제외할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여기서 Top은 ImageNet의 클래스를 분류하기 위해 모델 마지막에 연결된 Fully Connected Layer를 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기존 분류 영역을 제거한 뒤에는 새로운 데이터셋에 맞게 다음과 같은 Layer를 연결할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;추출된 특징을 펼치거나 요약하는 Layer&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;새로운 Fully Connected Layer&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;과적합을 줄이기 위한 Dropout&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;새로운 클래스 수에 맞는 출력층&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 3개 클래스를 분류한다면 마지막 출력층도 3개의 출력값을 갖도록 구성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;include_top=False&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;는 사전학습 모델의 특징 추출 영역만 가져와 새로운 분류기를 연결하기 위한 설정이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. Feature Extraction&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Feature Extraction은 사전학습된 CNN의 가중치를 고정하고 새롭게 추가한 분류층만 학습하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN 영역을 학습되지 않도록 고정하는 것을 Freeze라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델은 기존 CNN이 추출한 특징을 입력으로 사용하고 새로운 분류층에서 현재 데이터의 클래스 구분 방법만 학습한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Feature Extraction은 다음과 같은 상황에 적합하다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;새로운 학습 데이터가 많지 않은 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;빠르게 기준 모델을 만들고 싶은 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;연산 자원이 제한된 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;새로운 이미지가 ImageNet 이미지와 어느 정도 유사한 경우&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN 영역의 가중치를 변경하지 않기 때문에 학습해야 하는 파라미터가 줄어들고 학습 속도도 비교적 빠르다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Feature Extraction은 사전학습 모델을 고정된 특징 추출기로 사용하고 새로운 분류층만 학습하는 방법이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. Fine-Tuning&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1277&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMmMEu/dJMcacj4Zhm/IAdycF6L725FAludNVMzP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMmMEu/dJMcacj4Zhm/IAdycF6L725FAludNVMzP1/img.png&quot; data-alt=&quot;출처: https://kr.linkedin.com/pulse/what-supervised-fine-tuning-tagx-yq8if?tl=ko&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMmMEu/dJMcacj4Zhm/IAdycF6L725FAludNVMzP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMmMEu%2FdJMcacj4Zhm%2FIAdycF6L725FAludNVMzP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1277&quot; height=&quot;720&quot; data-origin-width=&quot;1277&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://kr.linkedin.com/pulse/what-supervised-fine-tuning-tagx-yq8if?tl=ko&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Fine-Tuning은 사전학습 모델의 일부 또는 전체 Layer를 다시 학습할 수 있도록 설정하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일반적으로 새로운 분류층을 먼저 학습한 뒤 사전학습 모델의 뒤쪽 Layer 일부를 Unfreeze하고 추가 학습을 진행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델의 앞쪽 Layer는 선과 경계처럼 일반적인 특징을 학습한 경우가 많다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반면 뒤쪽 Layer는 기존 데이터셋의 분류 문제에 더욱 특화된 특징을 학습한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 뒤쪽 Layer 일부를 새로운 데이터에 맞게 조정하면 현재 분류 문제에 더욱 적합한 특징을 만들 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Fine-Tuning에서는 기존의 유용한 가중치가 크게 변경되지 않도록 &lt;/span&gt;&lt;b&gt;&lt;span&gt;작은 Learning Rate를 사용하는 것이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습률이 지나치게 크면 사전학습 과정에서 얻은 특징이 손상될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. Feature Extraction과 Fine-Tuning 비교&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Feature Extraction과 Fine-Tuning은 모두 사전학습 모델을 활용하지만 학습 범위가 다르다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;구분&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Feature Extraction&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Fine-Tuning&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;사전학습 CNN&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;가중치 고정&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;일부 또는 전체 가중치 학습&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;주요 학습 대상&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;새로 추가한 분류층&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;분류층과 일부 CNN Layer&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;학습 속도&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;비교적 빠름&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;상대적으로 느림&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;연산량&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;적음&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;많음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;필요한 데이터&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;적은 데이터에도 활용 가능&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;상대적으로 많은 데이터가 유리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;학습률&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;일반적인 설정 가능&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;작은 학습률 권장&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;주요 목적&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;기존 특징을 그대로 활용&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;새로운 데이터에 특징을 세밀하게 조정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음부터 모든 Layer를 Fine-Tuning하기보다 Feature Extraction으로 기준 모델을 만든 뒤 필요한 경우 일부 Layer를 추가로 학습할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Feature Extraction은 기존 특징을 그대로 사용하고 Fine-Tuning은 기존 특징을 새로운 데이터에 맞게 조금 더 조정하는 방식이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. Freeze와 Unfreeze&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Freeze는 특정 Layer의 가중치가 학습 과정에서 변경되지 않도록 고정하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사전학습 모델을 불러온 뒤 CNN 전체를 Freeze하면 Optimizer는 새롭게 추가한 분류층의 가중치만 수정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Unfreeze는 고정했던 Layer를 다시 학습할 수 있도록 변경하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Fine-Tuning을 진행할 때는 다음과 같은 흐름을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;사전학습 모델 불러오기 &lt;/span&gt;&lt;span&gt;&amp;rarr; 기존 분류층 제외 &lt;/span&gt;&lt;span&gt;&amp;rarr; CNN 영역 Freeze&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;rarr; 새로운 분류층 학습 &lt;/span&gt;&lt;span&gt;&amp;rarr; 일부 CNN Layer Unfreeze &lt;/span&gt;&lt;span&gt;&amp;rarr; 작은 학습률로 추가 학습&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모든 Layer를 한 번에 학습 가능하도록 설정하면 데이터가 부족한 상황에서 과적합이 발생하거나 기존 가중치가 크게 변할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;어떤 Layer를 고정하고 어디부터 다시 학습할지는 데이터의 양과 새로운 문제의 특성을 고려해 결정해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. ResNet50을 이용한 이미지 예측&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://kr.mathworks.com/help/deeplearning/ref/resnet50.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kr.mathworks.com/help/deeplearning/ref/resnet50.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1788415367101&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;resnet50 - (권장되지 않음) ResNet-50 컨벌루션 신경망 - MATLAB&quot; data-og-description=&quot;ResNet-50은 50개 계층으로 구성된 컨벌루션 신경망입니다.&quot; data-og-host=&quot;kr.mathworks.com&quot; data-og-source-url=&quot;https://kr.mathworks.com/help/deeplearning/ref/resnet50.html&quot; data-og-url=&quot;https://kr.mathworks.com/help/deeplearning/ref/resnet50.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hNPEQ/dJMb9iIZsxY/RTUPZ2CNSnXzJWoghK4vq0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dFBPrl/dJMb8WMIGBX/MUX839YxzkLS88TsYPG8ck/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/tcRjX/dJMb8XkyALb/g0pCWLgvma698IkTuDr711/img.png?width=969&amp;amp;height=1173&amp;amp;face=0_0_969_1173&quot;&gt;&lt;a href=&quot;https://kr.mathworks.com/help/deeplearning/ref/resnet50.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kr.mathworks.com/help/deeplearning/ref/resnet50.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hNPEQ/dJMb9iIZsxY/RTUPZ2CNSnXzJWoghK4vq0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dFBPrl/dJMb8WMIGBX/MUX839YxzkLS88TsYPG8ck/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/tcRjX/dJMb8XkyALb/g0pCWLgvma698IkTuDr711/img.png?width=969&amp;amp;height=1173&amp;amp;face=0_0_969_1173');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;resnet50 - (권장되지 않음) ResNet-50 컨벌루션 신경망 - MATLAB&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ResNet-50은 50개 계층으로 구성된 컨벌루션 신경망입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kr.mathworks.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업에서는 ResNet50 사전학습 모델을 이용해 이미지의 클래스를 예측하는 흐름을 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ImageNet 가중치와 기존 분류층을 포함한 ResNet50을 사용하면 입력 이미지가 ImageNet의 1,000개 클래스 중 어디에 속하는지 예측할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본적인 처리 과정은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;이미지 불러오기 &lt;/span&gt;&lt;span&gt;&amp;rarr; 224&amp;times;224 크기로 조정 &lt;/span&gt;&lt;span&gt;&amp;rarr; 배열 형태로 변환 &lt;/span&gt;&lt;span&gt;&amp;rarr; Batch 차원 추가&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; ResNet50 전처리 적용 &lt;/span&gt;&lt;span&gt;&amp;rarr; 모델 예측 &lt;/span&gt;&lt;span&gt;&amp;rarr; 예측 결과를 클래스 이름으로 변환&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지 한 장을 예측할 때도 모델은 여러 이미지를 처리하는 Batch 형태의 입력을 기대하기 때문에 Batch 차원을 추가해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;사전학습 모델을 사용한 예측에서는 입력 크기와 모델 전용 전처리 방식을 정확하게 맞추는 것이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. 새로운 이미지 분류 모델 구성&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사전학습 모델을 새로운 데이터셋에 적용할 때는 기존 ImageNet 분류 영역을 제거하고 새로운 분류층을 연결한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업에서는 ResNet50을 기반으로 세 종류의 이미지를 분류하는 모델의 구성을 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 구조는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;새로운 입력 이미지 &lt;/span&gt;&lt;span&gt;&amp;rarr; ResNet50 특징 추출 영역 &lt;/span&gt;&lt;span&gt;&amp;rarr; 추출된 Feature Map&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Flatten &lt;/span&gt;&lt;span&gt;&amp;rarr; 새로운 Dense Layer &lt;/span&gt;&lt;span&gt;&amp;rarr; 클래스 수에 맞는 Softmax 출력층&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막 출력층의 노드 수는 분류할 클래스 수와 같아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다중 분류에서는 Softmax를 이용해 각 클래스에 속할 확률을 계산하고 가장 높은 확률을 가진 클래스를 최종 예측으로 선택할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전이학습 모델에서도 입력 형태, 출력 클래스 수, 활성화 함수와 손실함수를 현재 문제에 맞게 구성해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. Data Augmentation&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;840&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BwJyK/dJMcahZYiEt/b9KtKMJBcuYc5UFXiny8I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BwJyK/dJMcahZYiEt/b9KtKMJBcuYc5UFXiny8I0/img.png&quot; data-alt=&quot;출처: https://www.ibm.com/kr-ko/think/topics/data-augmentation&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BwJyK/dJMcahZYiEt/b9KtKMJBcuYc5UFXiny8I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBwJyK%2FdJMcahZYiEt%2Fb9KtKMJBcuYc5UFXiny8I0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;840&quot; height=&quot;840&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;840&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://www.ibm.com/kr-ko/think/topics/data-augmentation&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지 분류에서는 일반적으로 학습 데이터가 많고 다양할수록 새로운 이미지에 대한 일반화 성능이 좋아질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 실제 프로젝트에서는 이미지를 새롭게 수집하고 정답을 지정하는 과정에 많은 시간과 비용이 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Data Augmentation은 기존 이미지에 다양한 변형을 적용해 학습 과정에서 여러 형태의 이미지를 경험하게 만드는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;대표적인 이미지 변형은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;좌우 반전&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;회전&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;확대와 축소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;가로 방향 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;세로 방향 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;밝기 조절&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 변형을 사용하면 모델이 물체의 위치, 각도와 크기가 조금 달라져도 같은 클래스로 인식하도록 학습할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Data Augmentation은 제한된 이미지에 다양한 변형을 적용해 모델의 일반화 성능을 높이는 방법이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;16. Data Augmentation 사용 시 주의할 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Data Augmentation은 무조건 많은 변형을 적용한다고 좋은 것은 아니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;원본 이미지의 의미가 유지되는 범위 안에서 변형해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 좌우 방향 자체가 정답에 중요한 문제라면 Horizontal Flip을 적용했을 때 잘못된 학습 데이터가 만들어질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지를 지나치게 회전하거나 확대하면 분류에 필요한 영역이 사라질 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Data Augmentation을 설정할 때는 다음 내용을 확인해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;변형 후에도 원래 클래스의 의미가 유지되는가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;실제 환경에서 발생할 수 있는 변화인가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;중요한 이미지 영역이 잘리지 않는가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;변형 정도가 지나치게 크지 않은가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;특정 클래스에만 불리한 변형이 적용되지 않는가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 Validation과 Test 데이터는 모델의 성능을 일정한 기준으로 평가해야 하므로 무작위 변형을 적용하지 않는 것이 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Data Augmentation은 데이터를 무작정 늘리는 과정이 아니라 실제로 발생할 수 있는 이미지 변화를 학습시키는 과정이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;17. ImageDataGenerator&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Keras의 ImageDataGenerator를 사용하면 이미지 데이터를 Batch 단위로 불러오면서 전처리와 Data Augmentation을 적용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지를 모두 메모리에 한 번에 저장하지 않고 학습에 필요한 만큼 순서대로 불러올 수 있다는 장점이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습 데이터에는 다음과 같은 설정을 적용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;픽셀값 범위 조정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;회전 범위 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;가로와 세로 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;확대와 축소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;좌우 반전&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;밝기 범위 조절&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Validation 데이터에는 일반적으로 모델 입력에 필요한 크기 조정과 픽셀값 전처리만 적용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;학습 데이터에는 다양한 변형을 적용하고 Validation 데이터는 동일한 평가 조건을 유지하도록 구성해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;18. 폴더 구조와 클래스 분류&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ImageDataGenerator의 &lt;/span&gt;&lt;span&gt;flow_from_directory&lt;/span&gt;&lt;span&gt; 방식을 사용하면 폴더 이름을 기준으로 이미지의 클래스를 구분할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Train과 Test 또는 Validation 폴더 아래에 클래스별 하위 폴더를 구성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 세 개의 클래스를 분류한다면 다음과 같은 구조를 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Train&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Class A&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Class B&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Class C&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Validation&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Class A&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Class B&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Class C&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 클래스 폴더에는 해당 클래스의 이미지가 저장된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;폴더 이름이 클래스 Label로 사용되므로 Train과 Validation에서 같은 클래스 구조를 유지해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터를 불러온 뒤에는 생성된 클래스 번호와 이미지 개수, Batch Shape를 확인하는 것이 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;이미지 분류 데이터는 파일 이름뿐 아니라 클래스별 폴더 구조도 모델 학습 결과에 영향을 준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;19. 녹내장 이미지 분류 실습&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업에서는 ResNet50 사전학습 모델을 이용해 녹내장 관련 이미지를 세 종류로 분류하는 흐름을 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;새로운 데이터셋의 클래스 수에 맞게 분류층을 구성하고 ImageDataGenerator로 이미지를 불러와 모델을 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 실습 과정은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;이미지 데이터 폴더 확인 &lt;/span&gt;&lt;span&gt;&amp;rarr; 학습&amp;middot;검증 데이터 구분 &lt;/span&gt;&lt;span&gt;&amp;rarr; 이미지 크기와 전처리 설정 &lt;/span&gt;&lt;span&gt;&amp;rarr; Data Augmentation 적용&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; ResNet50 사전학습 모델 불러오기 &lt;/span&gt;&lt;span&gt;&amp;rarr; 기존 출력층 제거 &lt;/span&gt;&lt;span&gt;&amp;rarr; 새로운 분류층 연결&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Feature Extraction 또는 Fine-Tuning &lt;/span&gt;&lt;span&gt;&amp;rarr; 모델 학습 &lt;/span&gt;&lt;span&gt;&amp;rarr; 새로운 이미지 예측&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 과정을 통해 사전학습 모델을 단순히 불러오는 것에서 끝나지 않고 새로운 분류 문제에 맞게 변경하고 학습하는 전체 흐름을 확인할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전이학습에서도 데이터 구성부터 모델 평가까지 전체 학습 과정을 함께 관리해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;20. 전이학습에서 확인해야 할 것&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전이학습 모델을 구성할 때는 모델의 이름이나 크기만 보고 선택하면 안 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주요 확인 항목은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;사전학습 모델의 입력 이미지 크기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델에 맞는 전처리 함수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;기존 분류층 포함 여부&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;새로운 데이터의 클래스 수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;CNN Layer의 Freeze 여부&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Fine-Tuning할 Layer의 범위&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Fine-Tuning Learning Rate&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;학습 데이터와 검증 데이터 구분&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Data Augmentation의 적절성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train과 Validation 성능 차이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;과적합 발생 여부&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Feature Extraction 성능이 충분한지 먼저 확인하고 필요할 때 Fine-Tuning을 적용하는 방식으로 접근할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전이학습은 사전학습 모델을 불러오는 것보다 어떤 부분을 재사용하고 어떤 부분을 새롭게 학습할지 결정하는 과정이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;21. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;사전학습 모델은 대규모 이미지 데이터로 미리 학습된 CNN 모델이다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ImageNet으로 학습된 모델은 다양한 이미지 특징을 이미 학습하고 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Keras Applications에서는 VGG, ResNet, Xception과 MobileNet 등 여러 사전학습 모델을 제공한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델마다 입력 이미지 크기와 전처리 방식이 다르다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;전이학습은 기존 모델이 학습한 특징을 새로운 문제에 활용하는 방법이다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;새로운 분류 문제에서는 기존 ImageNet 출력층을 제거하고 새로운 분류층을 연결한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;include_top=False&lt;/span&gt;&lt;span&gt;를 이용해 기존 분류 영역을 제외할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Feature Extraction은 CNN의 가중치를 고정하고 새롭게 추가한 분류층만 학습한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Fine-Tuning은 사전학습 CNN의 일부 Layer를 작은 학습률로 다시 학습한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Fine-Tuning 전에 새로운 분류층을 먼저 학습하는 방식으로 접근할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ResNet50은 기본적으로 224&amp;times;224 크기의 이미지를 입력받는다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Data Augmentation은 제한된 이미지에 다양한 변형을 적용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이미지의 의미가 유지되는 범위에서 증강 방법을 선택해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ImageDataGenerator는 이미지 전처리, 증강과 Batch 생성을 지원한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;전이학습에서도 Train과 Validation 성능을 비교해 과적합 여부를 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;22. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 16에서는 CNN이 이미지에서 특징을 직접 추출하는 구조를 배웠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘은 그 CNN을 매번 처음부터 학습하지 않고 &lt;/span&gt;&lt;b&gt;&lt;span&gt;이미 대규모 데이터에서 학습한 특징을 새로운 문제에 재사용할 수 있다는 점&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 알게 됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음에는 Feature Extraction과 Fine-Tuning이 비슷한 방법처럼 느껴졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 정리해 보니 학습 범위에 분명한 차이가 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Feature Extraction은 기존 CNN을 고정된 특징 추출기로 사용하고 &lt;/span&gt;&lt;span&gt;&amp;rarr; Fine-Tuning은 기존 CNN의 일부 특징을 새로운 데이터에 맞게 조정한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사전학습 모델을 사용하면 무조건 좋은 결과가 나오는 것이 아니라 입력 이미지 크기와 전처리 방식, Freeze 범위와 학습률을 올바르게 설정해야 한다는 점도 중요했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Data Augmentation도 단순히 이미지 개수를 늘리는 기능이라고 생각했지만 실제로는 모델이 위치, 각도와 밝기의 변화에도 같은 특징을 인식하도록 학습시키는 과정이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞으로는 여러 사전학습 모델의 성능만 비교하기보다 &lt;/span&gt;&lt;b&gt;&lt;span&gt;데이터의 양과 특징, 모델의 크기, 학습 시간과 실제 사용 환경까지 고려해 적절한 전이학습 방법을 선택해야겠다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 17에서는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;CNN 사전학습 모델과 전이학습의 기본 원리를 학습했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ImageNet으로 미리 학습된 모델이 이미지의 경계, 질감과 형태 같은 특징을 가지고 있으며 이를 새로운 이미지 분류 문제에 재사용할 수 있다는 점을 알아봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 기존 출력층을 제거하고 새로운 클래스 수에 맞는 분류층을 연결하는 방법과 Feature Extraction, Fine-Tuning의 차이를 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ResNet50을 이용한 이미지 예측과 새로운 분류 모델 구성 흐름을 살펴보고 ImageDataGenerator를 이용한 Data Augmentation과 클래스별 폴더 구성 방법도 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘 수업을 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;전이학습은 완성된 모델을 그대로 사용하는 것이 아니라 기존 특징을 새로운 문제에 맞게 선택적으로 재사용하고 조정하는 학습 방법&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이라는 점을 이해할 수 있었다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>cnn</category>
      <category>resnet50</category>
      <category>tensorflow</category>
      <category>경기AI멤버십</category>
      <category>딥러닝</category>
      <category>사전학습모델</category>
      <category>이미지분류</category>
      <category>전이학습</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/17</guid>
      <comments>https://a-zer0.tistory.com/17#entry17comment</comments>
      <pubDate>Thu, 3 Sep 2026 15:03:54 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 16. 컴퓨터 비전과 CNN 이미지 분류</title>
      <link>https://a-zer0.tistory.com/16</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;나는 나를 있는 그대로 사랑한다.&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 16에서는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;컴퓨터 비전(Computer Vision)의 주요 문제 영역과 CNN(Convolutional Neural Network)의 기본 구조&lt;/span&gt;&lt;/b&gt;&lt;span&gt;를 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;먼저 이미지 분류, 객체 탐지, 얼굴 인식, OCR과 이미지 분할 등 컴퓨터 비전이 해결하는 다양한 문제를 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 컴퓨터가 이미지를 숫자로 인식하는 방식과 이미지 인식이 어려운 이유를 알아봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다음으로 합성곱, 필터, Feature Map, Stride, Padding, Pooling과 Dropout을 공부하고 CNN이 이미지에서 특징을 추출해 분류하는 전체적인 흐름을 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업 후에는 흑백 이미지의 다중 분류와 컬러 이미지의 이진 분류 실습을 진행했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실습 코드는 제외하고 수업에서 배운 핵심 개념을 중심으로 정리하려고 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 학습 흐름은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;컴퓨터 비전 문제 영역 &lt;/span&gt;&lt;span&gt;&amp;rarr; 이미지의 픽셀 표현 &lt;/span&gt;&lt;span&gt;&amp;rarr; 이미지 인식의 어려움 &lt;/span&gt;&lt;span&gt;&amp;rarr; 기존 특징 추출과 End-to-End Learning&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; CNN 구조 &lt;/span&gt;&lt;span&gt;&amp;rarr; Convolution과 Filter &lt;/span&gt;&lt;span&gt;&amp;rarr; Feature Map &lt;/span&gt;&lt;span&gt;&amp;rarr; Stride와 Padding &lt;/span&gt;&lt;span&gt;&amp;rarr; Pooling&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Flatten과 Fully Connected Layer &lt;/span&gt;&lt;span&gt;&amp;rarr; Softmax 분류 &lt;/span&gt;&lt;span&gt;&amp;rarr; Dropout과 과적합 방지 &lt;/span&gt;&lt;span&gt;&amp;rarr; 흑백&amp;middot;컬러 이미지 분류 실습&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 컴퓨터 비전이란&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컴퓨터 비전은 컴퓨터가 이미지나 영상에서 필요한 정보를 추출하고 그 의미를 이해하도록 만드는 AI 분야다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사람은 이미지를 보는 순간 물체, 사람, 배경과 상황을 자연스럽게 구분할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러나 컴퓨터가 처음 확인하는 것은 사물의 의미가 아니라 각 픽셀에 저장된 숫자다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 컴퓨터 비전에서는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;픽셀로 구성된 저차원 데이터에서 물체의 종류, 위치와 의미 같은 고차원 정보를 추출해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 차이를 Semantic Gap이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;CNN은 이미지의 픽셀값에서 분류에 필요한 특징을 단계적으로 학습하며 Semantic Gap을 줄이는 대표적인 딥러닝 모델이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. 다양한 컴퓨터 비전 문제&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컴퓨터 비전은 단순히 이미지의 종류를 맞히는 것보다 훨씬 넓은 문제를 다룬다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Image Classification&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;입력 이미지가 어떤 Label에 해당하는지 분류한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 이미지가 강아지인지 고양이인지 판단하는 문제다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Object Detection&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지 안에서 물체가 있는 위치를 Bounding Box로 찾고 각 영역에 존재하는 물체의 종류까지 분류한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Semantic Segmentation&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지의 각 픽셀이 어떤 클래스에 속하는지 분류한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;의료 영상에서 종양이 있는 영역을 찾는 문제에도 활용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Face Detection과 Face Alignment&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Face Detection은 얼굴이 있는 영역을 찾고 Face Alignment는 눈&amp;middot;코&amp;middot;입처럼 얼굴의 주요 지점을 Landmark로 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Face Recognition과 Face Verification&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Face Recognition은 이미지 속 인물이 누구인지 식별하는 문제다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Face Verification은 두 얼굴 이미지가 동일 인물인지 판단한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Text Detection과 OCR&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Text Detection은 이미지 안에서 글자가 존재하는 영역을 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;OCR은 해당 영역의 글자가 무엇인지 인식한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;두 기술을 결합하면 차량 번호판 인식과 문서 자동화 등에 활용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Human Pose Estimation&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사람의 주요 신체 부위를 Keypoint로 추정해 현재 자세를 파악한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이외에도 Super Resolution, Image Captioning, Neural Style Transfer, 결함 검출, 자율주행의 조향각 예측과 생성 모델 등 다양한 영역에서 컴퓨터 비전이 활용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;컴퓨터 비전 문제는 무엇을 출력해야 하는지에 따라 분류, 위치 탐지, 픽셀 단위 분할과 생성 문제 등으로 나뉜다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. 컴퓨터가 이미지를 보는 방법&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컴퓨터가 이미지를 확인할 때는 사람처럼 고양이, 자동차와 얼굴의 의미부터 이해하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컴퓨터에게 이미지는 각 픽셀의 밝기나 색상값이 저장된 숫자 행렬이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;흑백 이미지는 일반적으로 하나의 채널로 구성되고, 각 픽셀은 밝기를 나타내는 하나의 값을 가진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컬러 이미지는 보통 Red, Green, Blue의 세 채널로 구성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 이미지 데이터는 가로, 세로와 채널을 가진 다차원 배열로 표현할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;흑백 이미지: &lt;/span&gt;&lt;span&gt;가로 &amp;times; 세로 &amp;times; 1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;컬러 이미지: &lt;/span&gt;&lt;span&gt;가로 &amp;times; 세로 &amp;times; 3&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 15에서 배운 NumPy의 배열, Shape와 행렬 연산이 이미지 데이터에서도 그대로 연결됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;CNN을 구성할 때는 이미지 크기뿐 아니라 채널 수까지 포함한 입력 Shape를 정확하게 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. 이미지 인식이 어려운 이유&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;같은 물체를 촬영한 이미지도 항상 같은 픽셀값을 가지는 것은 아니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지 인식을 어렵게 만드는 대표적인 조건은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Illumination&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;조명과 밝기가 달라지면 같은 물체도 픽셀값이 크게 바뀔 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Deformation&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사람이나 동물처럼 형태가 고정되지 않은 대상은 자세와 움직임에 따라 모양이 변한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Occlusion&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;물체의 일부가 다른 사물에 가려져 전체 형태가 보이지 않을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Background Clutter&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;물체와 배경의 색상이나 형태가 비슷하면 경계를 구분하기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Intraclass Variation&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;같은 클래스에 속하더라도 크기, 색상, 자세와 외형이 서로 다를 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 모두 고양이 이미지라고 하더라도 품종, 털 색, 촬영 방향과 배경이 달라질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;좋은 이미지 인식 모델은 단순히 픽셀값을 기억하는 것이 아니라 다양한 변화 속에서도 공통으로 나타나는 특징을 학습해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. 기존 컴퓨터 비전과 딥러닝&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기존 컴퓨터 비전에서는 사람이 이미지에서 사용할 특징을 직접 설계하는 Handcrafted Feature 방식이 많이 사용됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;분석자가 경계선, 모서리, 색상과 질감처럼 문제 해결에 도움이 될 특징을 정하고, 이를 추출한 결과를 별도의 분류 모델에 입력하는 방식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN은 Raw Image를 입력받아 분류에 필요한 특징을 모델이 직접 학습한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 End-to-End Learning이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;사람이 특징 추출 방법 설계&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;모델이 특징을 자동으로 학습&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;특징 추출과 분류 과정 분리&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;입력 이미지부터 결과까지 함께 학습&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;문제마다 새로운 특징 설계 필요&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;데이터에 맞는 필터를 학습으로 결정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;CNN의 핵심은 이미지 분류에 필요한 Filter를 사람이 직접 정하지 않고 학습 과정에서 자동으로 찾아가는 것&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. CNN의 전체 구조&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qhWaW/dJMcaidFdoe/K1PWtFJE5FoTPokPKLSCoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qhWaW/dJMcaidFdoe/K1PWtFJE5FoTPokPKLSCoK/img.png&quot; data-alt=&quot;출처: https://www.aitimes.kr/news/articleView.html?idxno=11294&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qhWaW/dJMcaidFdoe/K1PWtFJE5FoTPokPKLSCoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqhWaW%2FdJMcaidFdoe%2FK1PWtFJE5FoTPokPKLSCoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;984&quot; height=&quot;623&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://www.aitimes.kr/news/articleView.html?idxno=11294&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN은 이미지 처리에 적합하도록 설계된 인공신경망이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;대표적인 CNN의 처리 과정은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;입력 이미지 &lt;/span&gt;&lt;span&gt;&amp;rarr; Convolution Layer &lt;/span&gt;&lt;span&gt;&amp;rarr; 활성화 함수 &lt;/span&gt;&lt;span&gt;&amp;rarr; Pooling Layer&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Convolution과 Pooling 반복 &lt;/span&gt;&lt;span&gt;&amp;rarr; Flatten &lt;/span&gt;&lt;span&gt;&amp;rarr; Fully Connected Layer &lt;/span&gt;&lt;span&gt;&amp;rarr; 출력층&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Convolution Layer와 Pooling Layer에서는 이미지의 공간적인 특징을 추출한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;추출된 Feature Map은 Flatten을 통해 1차원 벡터로 변환되고 Fully Connected Layer로 전달된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막 출력층에서는 문제에 따라 Sigmoid나 Softmax를 사용해 분류 결과를 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;CNN은 특징 추출 영역과 최종 분류 영역을 하나의 모델 안에서 함께 학습한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. Convolution 연산&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Convolution은 이미지의 일정 영역을 작은 Filter가 이동하면서 이미지와 Filter의 값을 연산하는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Filter는 Kernel이라고도 부르며 이미지 위를 이동하는 방식을 Sliding Window라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Filter와 겹친 이미지 영역의 값들을 연산하면 하나의 출력값이 만들어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Filter가 이미지 전체를 이동하면 새로운 행렬이 생성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 결과를 Feature Map 또는 Activation Map이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Filter의 종류에 따라 다음과 같은 서로 다른 특징이 강조될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;가로 방향 경계&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;세로 방향 경계&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모서리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;질감&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;특정 형태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;밝기 변화&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초기 CNN Layer에서는 경계나 방향처럼 단순한 특징을 학습하고 더 깊은 Layer에서는 여러 특징을 결합해 복잡한 형태를 학습할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Convolution Layer의 역할은 원본 이미지에서 분류에 필요한 지역적인 특징을 추출하는 것이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. Filter와 Feature Map&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN에서는 Filter의 값도 학습해야 하는 파라미터다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음에는 Filter가 어떤 특징을 찾아야 하는지 정해져 있지 않다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델은 손실함수를 줄이는 방향으로 Filter의 값을 수정하면서 현재 데이터 분류에 필요한 특징을 찾아간다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하나의 Filter는 하나의 Feature Map을 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 개의 Filter를 사용하면 서로 다른 특징을 강조한 여러 Feature Map을 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN Layer의 출력 채널 수는 해당 Layer에서 사용하는 Filter의 개수와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Filter 수를 늘리면 다양한 특징을 추출할 수 있지만 모델의 파라미터와 계산량도 함께 증가한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. 컬러 이미지와 다중 채널 Convolution&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컬러 이미지는 RGB 세 채널을 가지므로 Filter도 입력 이미지와 같은 채널 수를 가져야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 채널에서는 개별적으로 Convolution 연산이 수행된다. 이후 채널별 계산 결과를 모두 더해 하나의 Feature Map을 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;입력 채널 수는 이미지 또는 이전 Layer의 출력에 의해 결정되며 출력 채널 수는 적용한 Filter의 개수로 결정된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 CNN을 여러 층 쌓으면 각 층에서 가로&amp;middot;세로 크기뿐 아니라 채널 수도 계속 변화한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;CNN에서는 이미지의 높이와 너비만 보는 것이 아니라 각 Layer의 채널 수까지 함께 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. Stride&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J09CW/dJMcadwpwFI/TKKwrMQEkOUnVIGMX9aL51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J09CW/dJMcadwpwFI/TKKwrMQEkOUnVIGMX9aL51/img.png&quot; data-alt=&quot;출처: https://amber-chaeeunk.tistory.com/24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J09CW/dJMcadwpwFI/TKKwrMQEkOUnVIGMX9aL51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ09CW%2FdJMcadwpwFI%2FTKKwrMQEkOUnVIGMX9aL51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1223&quot; height=&quot;890&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;890&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://amber-chaeeunk.tistory.com/24&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Stride는 Filter가 이미지를 이동하는 간격을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Stride가 1이면 Filter가 한 칸씩 촘촘하게 이동한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Stride가 2이면 Filter가 두 칸씩 이동한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Stride가 커질수록 Filter가 확인하는 위치의 수가 줄어들기 때문에 출력 Feature Map의 가로와 세로 크기도 작아진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Stride를 크게 설정하면 연산량을 줄일 수 있지만 이미지의 세부 정보를 더 많이 건너뛸 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Stride는 특징을 얼마나 촘촘하게 추출할지와 출력 크기를 함께 결정하는 설정값이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. Padding&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xZ1TH/dJMcaa0SsFt/LEIuLc7R5U08bx7LFrXyfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xZ1TH/dJMcaa0SsFt/LEIuLc7R5U08bx7LFrXyfK/img.png&quot; data-alt=&quot;출처: https://amber-chaeeunk.tistory.com/24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xZ1TH/dJMcaa0SsFt/LEIuLc7R5U08bx7LFrXyfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxZ1TH%2FdJMcaa0SsFt%2FLEIuLc7R5U08bx7LFrXyfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1042&quot; height=&quot;438&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://amber-chaeeunk.tistory.com/24&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Filter가 이미지의 가장자리를 지나갈 때는 중앙보다 연산에 참여하는 횟수가 적어질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 Convolution을 반복하면 Feature Map의 가로와 세로 크기가 계속 줄어든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Padding은 입력 이미지의 가장자리에 새로운 값을 추가해 이러한 문제를 조절하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;가장 대표적인 방법은 가장자리에 0을 추가하는 Zero Padding이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Padding을 사용하면 다음과 같은 효과를 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;이미지 가장자리의 정보 보존&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;출력 Feature Map 크기 조절&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;여러 Convolution Layer를 쌓을 때 급격한 크기 감소 방지&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN Layer의 출력 크기는 입력 크기, Filter 크기, Stride와 Padding의 조합으로 결정된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Padding은 단순히 0을 추가하는 작업이 아니라 특징 정보와 Layer 출력 크기를 관리하는 방법이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. Pooling&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Pooling은 Feature Map의 대표값만 남겨 가로와 세로 크기를 줄이는 Downsampling 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일반적으로 Convolution과 활성화 함수 다음에 Pooling Layer를 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEMyfo/dJMcaikk8dE/rTO5G9hzMYYv2iR7KjqmXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEMyfo/dJMcaikk8dE/rTO5G9hzMYYv2iR7KjqmXK/img.png&quot; data-alt=&quot;출처: https://blog.naver.com/kkang9901/221776454163&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEMyfo/dJMcaikk8dE/rTO5G9hzMYYv2iR7KjqmXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEMyfo%2FdJMcaikk8dE%2FrTO5G9hzMYYv2iR7KjqmXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;600&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://blog.naver.com/kkang9901/221776454163&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Max Pooling&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;지정한 영역에서 가장 큰 값을 선택한다. 강하게 활성화된 특징을 유지할 수 있어 CNN에서 많이 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Average Pooling&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;지정한 영역의 평균값을 사용한다. 영역 전체의 정보를 부드럽게 요약한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Pooling을 적용하면 다음과 같은 효과를 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Feature Map 크기 감소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;연산량과 메모리 사용량 감소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;작은 위치 변화에 대한 민감도 완화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;과적합 완화에 도움&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 Pooling을 지나치게 많이 적용하면 분류에 필요한 세부 정보까지 사라질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Pooling은 모든 픽셀을 유지하지 않고 중요한 특징을 압축해 다음 Layer로 전달하는 과정이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. Convolution과 Pooling의 차이&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Convolution과 Pooling은 모두 이미지의 형태를 변화시키지만 역할은 서로 다르다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;구분&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Convolution&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Pooling&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;주요 목적&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;특징 추출&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;특징 압축&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;학습 파라미터&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Filter를 학습&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;일반적으로 학습 파라미터 없음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;출력&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;새로운 Feature Map&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;크기가 축소된 Feature Map&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;대표 설정&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Filter, Stride, Padding&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Window Size, Stride&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Convolution은 무엇을 볼 것인지 학습하고 Pooling은 추출한 특징을 더 작은 크기로 요약한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;두 과정을 반복하면 원본 이미지의 공간 크기는 점차 줄어들고 분류에 필요한 중요한 특징은 더욱 추상적인 형태로 정리된다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. Flatten과 Fully Connected Layer&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Convolution과 Pooling을 통과한 결과는 여러 개의 2차원 Feature Map으로 구성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 값을 일반적인 신경망의 입력으로 사용하려면 Flatten Layer를 통해 하나의 1차원 벡터로 펼쳐야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Flatten된 데이터는 Fully Connected Layer에 전달된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Fully Connected Layer에서는 추출된 특징들을 종합해 최종 클래스를 구분한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;이진 분류: 일반적으로 하나의 출력과 Sigmoid 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;다중 분류: 클래스 수에 맞는 출력과 Softmax 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;CNN 앞부분은 이미지 특징을 추출하고 Fully Connected Layer는 추출된 특징을 이용해 최종 분류를 수행한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;16. 흑백 이미지와 다중 분류&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업에서는 Fashion MNIST와 같은 흑백 이미지 데이터를 이용한 다중 분류 과정을 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;흑백 이미지는 하나의 채널을 가지며 여러 의류 클래스 중 이미지가 어느 클래스에 속하는지 예측하는 문제다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 문제의 출력층에서는 분류할 클래스 수에 맞는 노드를 사용하고 Softmax를 통해 각 클래스에 속할 확률을 계산할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다중 분류에서는 단순히 전체 Accuracy만 확인하지 않고 어떤 클래스끼리 자주 혼동하는지도 함께 살펴보는 것이 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;형태가 비슷한 의류는 픽셀 패턴도 비슷할 수 있기 때문에 모델이 두 클래스를 구분하기 어려울 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;17. 컬러 이미지와 이진 분류&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컬러 이미지 분류에서는 입력 데이터에 RGB 채널이 포함된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;고양이와 강아지처럼 두 개의 클래스를 구분하는 문제는 이진 분류로 구성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컬러 이미지는 흑백 이미지보다 입력 데이터의 크기가 크고 배경, 조명과 자세의 변화도 다양하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 모델이 학습 데이터의 특정 배경이나 촬영 조건을 정답의 특징으로 잘못 학습하지 않도록 주의해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실습에서는 CNN을 이용해 컬러 이미지의 특징을 추출하고 두 클래스를 분류하는 전체적인 흐름을 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;이미지 분류에서는 모델 구조뿐 아니라 학습 데이터가 클래스별로 충분히 다양하게 구성되어 있는지도 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;18. Dropout과 과적합 방지&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN은 많은 Filter와 파라미터를 학습하기 때문에 학습 데이터에 지나치게 맞춰질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Dropout은 학습 과정에서 일부 노드를 무작위로 사용하지 않도록 만드는 Regularization 기법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;항상 같은 노드에만 의존하지 못하게 하므로 여러 특징을 고르게 활용하도록 유도할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Dropout은 Training 과정에서만 적용하고 Test 또는 실제 예측에서는 모든 노드를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Dropout은 모델의 일부 연결을 학습마다 임시로 제외해 특정 특징에 지나치게 의존하는 현상을 줄인다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 비율을 너무 높게 설정하면 모델이 충분히 학습하지 못해 과소적합이 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;19. CNN 학습에서 확인해야 할 것&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CNN 모델을 구성할 때는 Layer를 많이 추가하는 것보다 각 단계에서 데이터가 어떻게 변하는지 확인해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주요 확인 항목은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;입력 이미지의 높이, 너비와 채널 수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Convolution 이후 Feature Map 크기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Filter 개수에 따른 출력 채널 수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Stride와 Padding 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Pooling 이후 크기 변화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Flatten 이후 벡터 크기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;문제에 맞는 출력층&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;활성화 함수와 손실함수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train과 Validation 성능 차이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;과적합 발생 여부&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 Shape를 확인하지 않고 Layer를 계속 추가하면 Flatten 이후 파라미터가 지나치게 많아지거나 연산할 수 없는 구조가 만들어질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;CNN에서도 각 Layer의 입력과 출력 Shape를 확인하는 습관이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;20. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;컴퓨터 비전은 이미지와 영상에서 의미 있는 정보를 추출하는 AI 분야다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이미지 분류, 객체 탐지, OCR, 얼굴 인식과 이미지 분할 등 다양한 문제를 다룬다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;컴퓨터는 이미지를 Pixel Intensity Matrix로 인식한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;조명, 변형, 가림, 복잡한 배경과 클래스 내부의 다양성 때문에 이미지 인식이 어렵다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;CNN은 Raw Image에서 필요한 특징을 자동으로 학습한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Convolution Layer는 Filter를 이용해 이미지의 지역적인 특징을 추출한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Convolution의 결과를 Feature Map 또는 Activation Map이라고 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Stride는 Filter가 이동하는 간격이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Padding은 이미지 가장자리의 정보를 보존하고 출력 크기를 조절한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;컬러 이미지에서는 입력과 Filter의 채널 수가 같아야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Pooling은 Feature Map을 Downsampling해 크기와 연산량을 줄인다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Max Pooling은 영역에서 가장 큰 활성화 값을 선택한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Flatten은 다차원 Feature Map을 1차원 벡터로 변환한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Fully Connected Layer는 추출된 특징을 이용해 최종 분류를 수행한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Dropout은 학습 중 일부 노드를 제외해 과적합을 줄이는 Regularization 방법이다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;21. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 15에서 DNN의 기본 구조를 배웠을 때는 모든 입력값이 서로 연결되는 Dense Layer를 중심으로 생각했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘 CNN을 배우면서 이미지에는 픽셀의 값뿐 아니라 &lt;/span&gt;&lt;b&gt;&lt;span&gt;픽셀이 배치된 위치와 주변 픽셀의 관계도 중요한 정보&lt;/span&gt;&lt;/b&gt;&lt;span&gt;라는 점을 알게 됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Convolution은 이미지 전체를 한 번에 펼쳐서 처리하지 않고 작은 영역을 순서대로 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 통해 경계, 모서리와 질감 같은 지역적인 특징을 찾을 수 있다는 점이 인상적이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Filter, Stride, Padding과 Pooling이 각각 별개의 설정처럼 느껴졌지만 정리해 보니 다음 흐름으로 연결됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Filter로 특징을 찾고 &lt;/span&gt;&lt;span&gt;&amp;rarr; Stride로 이동 간격을 정하고&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Padding으로 가장자리와 출력 크기를 조절하고 &lt;/span&gt;&lt;span&gt;&amp;rarr; Pooling으로 중요한 특징을 압축한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실습에서는 모델을 실행하는 것보다 이미지와 각 Layer의 Shape가 어떻게 변화하는지 이해하는 것이 더 중요하게 느껴졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞으로 CNN 모델을 만들 때는 Accuracy만 보는 것이 아니라 Validation 결과와 클래스별 예측 차이, 과적합 여부도 함께 확인해야겠다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 16에서는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;컴퓨터 비전의 다양한 문제를 살펴보고 CNN이 이미지의 특징을 추출해 분류하는 원리&lt;/span&gt;&lt;/b&gt;&lt;span&gt;를 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컴퓨터가 이미지를 픽셀값의 행렬로 본다는 점부터 시작해 조명, 변형, 가림과 복잡한 배경 때문에 이미지 인식이 어려워지는 이유를 알아봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 Convolution Layer가 Filter를 이용해 Feature Map을 만들고 Pooling Layer가 특징을 압축하는 과정을 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Stride와 Padding이 Feature Map 크기에 미치는 영향과 다채널 컬러 이미지의 연산 방식도 함께 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막으로 Flatten, Fully Connected Layer와 출력층을 연결해 이미지 분류 결과를 만드는 과정과 Dropout을 이용한 과적합 방지 방법을 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘 수업을 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;CNN은 이미지 분류 결과만 만드는 모델이 아니라 원본 이미지에서 필요한 특징을 직접 학습하고 단계적으로 압축하는 구조&lt;/span&gt;&lt;/b&gt;&lt;span&gt;라는 점을 이해할 수 있었다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>cnn</category>
      <category>FashionMNIST</category>
      <category>tensorflow</category>
      <category>경기AI멤버십</category>
      <category>딥러닝</category>
      <category>딥러닝실습</category>
      <category>컴퓨터비전</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/16</guid>
      <comments>https://a-zer0.tistory.com/16#entry16comment</comments>
      <pubDate>Wed, 2 Sep 2026 14:26:17 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 15. 딥러닝</title>
      <link>https://a-zer0.tistory.com/15</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;1402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6fFNf/dJMcahS7iyR/RZDh2kULkEEqs3YDMEN4e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6fFNf/dJMcahS7iyR/RZDh2kULkEEqs3YDMEN4e0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6fFNf/dJMcahS7iyR/RZDh2kULkEEqs3YDMEN4e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6fFNf%2FdJMcahS7iyR%2FRZDh2kULkEEqs3YDMEN4e0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;522&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;1402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 15에서는 머신러닝에서 한 단계 더 나아가 &lt;/span&gt;&lt;b&gt;&lt;span&gt;딥러닝과 DNN(Deep Neural Network)의 기본 구조&lt;/span&gt;&lt;/b&gt;&lt;span&gt;를 학습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;먼저 딥러닝의 개념과 인공신경망이 데이터를 학습하는 원리를 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이어서 신경망 연산의 기반이 되는 NumPy 배열과 행렬 연산을 복습하고 TensorFlow와 Keras를 이용해 신경망 모델을 구성하고 학습시키는 전체적인 흐름을 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업 이후에는 배운 내용을 바탕으로 실습을 진행했지만 이번 글에서는 코드보다 개념과 학습 흐름을 중심으로 정리하려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 학습 순서는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;딥러닝 개론 &lt;/span&gt;&lt;span&gt;&amp;rarr; 인공신경망과 퍼셉트론 &lt;/span&gt;&lt;span&gt;&amp;rarr; 가중치와 편향 &lt;/span&gt;&lt;span&gt;&amp;rarr; 활성화 함수 &lt;/span&gt;&lt;span&gt;&amp;rarr; 순전파와 손실함수&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 경사하강법과 역전파 &lt;/span&gt;&lt;span&gt;&amp;rarr; NumPy 배열&amp;middot;행렬 연산 &lt;/span&gt;&lt;span&gt;&amp;rarr; TensorFlow와 Tensor &lt;/span&gt;&lt;span&gt;&amp;rarr; Keras 모델 구성 &lt;/span&gt;&lt;span&gt;&amp;rarr; 모델 학습과 평가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 머신러닝과 딥러닝&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KuamH/dJMcai5Boi9/KqZY6aZg29axxeAZtxzIO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KuamH/dJMcai5Boi9/KqZY6aZg29axxeAZtxzIO0/img.png&quot; data-alt=&quot;출처: https://hongong.hanbit.co.kr/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84-%EC%86%8C%EA%B0%9C%ED%95%A9%EB%8B%88%EB%8B%A4/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KuamH/dJMcai5Boi9/KqZY6aZg29axxeAZtxzIO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKuamH%2FdJMcai5Boi9%2FKqZY6aZg29axxeAZtxzIO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;256&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://hongong.hanbit.co.kr/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84-%EC%86%8C%EA%B0%9C%ED%95%A9%EB%8B%88%EB%8B%A4/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;딥러닝은 머신러닝의 한 분야로 여러 층으로 구성된 인공신경망을 이용해 데이터의 복잡한 패턴을 학습하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기존 머신러닝에서는 분석자가 문제에 필요한 특징을 직접 선택하고 가공하는 과정이 중요한 경우가 많다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반면 딥러닝은 충분한 데이터가 주어지면 &lt;/span&gt;&lt;b&gt;&lt;span&gt;여러 신경망 층을 통과하면서 예측에 필요한 특징 표현까지 함께 학습할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;대표 모델&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;회귀, Decision Tree, Random Forest&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;DNN, CNN, RNN&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;특징 처리&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;사람이 직접 선택&amp;middot;가공하는 경우가 많음&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;신경망이 특징 표현을 함께 학습&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;비교적 적은 데이터에서도 활용 가능&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;일반적으로 많은 데이터가 필요&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;계산량&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;상대적으로 적음&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;많은 행렬 연산과 학습 자원 필요&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;해석&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;모델에 따라 비교적 쉬움&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;내부 판단 과정을 해석하기 어려울 수 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;딥러닝은 머신러닝과 완전히 별개의 기술이 아니라 깊게 쌓은 인공신경망을 사용하는 머신러닝 방법&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이라고 이해할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. 인공신경망과 퍼셉트론&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uUvSW/dJMcabS0tuq/y9cCkGstPybkFIGMUnw2uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uUvSW/dJMcabS0tuq/y9cCkGstPybkFIGMUnw2uK/img.png&quot; data-alt=&quot;출처: https://compmath.korea.ac.kr/deeplearning/Perceptron.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uUvSW/dJMcabS0tuq/y9cCkGstPybkFIGMUnw2uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuUvSW%2FdJMcabS0tuq%2Fy9cCkGstPybkFIGMUnw2uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;544&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://compmath.korea.ac.kr/deeplearning/Perceptron.html&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;퍼셉트론은 여러 입력값을 받아 하나의 결과를 출력하는 인공신경망의 기본 단위다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 입력값에는 가중치가 곱해지고 계산 결과에 편향을 더한 뒤 활성화 함수를 적용해 출력값을 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 계산 구조는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;입력값과 가중치의 연산 &lt;/span&gt;&lt;span&gt;&amp;rarr; 편향 추가 &lt;/span&gt;&lt;span&gt;&amp;rarr; 활성화 함수 적용 &lt;/span&gt;&lt;span&gt;&amp;rarr; 출력값 생성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;가중치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;가중치는 각 입력값이 결과에 얼마나 큰 영향을 주는지를 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;신경망은 학습을 반복하면서 예측 오차를 줄일 수 있는 가중치를 찾아간다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;편향&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;편향은 입력값과 별개로 출력의 기준을 조정하는 값이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;편향이 있으면 신경망이 데이터의 패턴을 더욱 유연하게 표현할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;신경망의 학습은 예측 오차를 줄이는 방향으로 가중치와 편향을 반복해서 수정하는 과정이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. DNN의 구조&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NpLrM/dJMcaas6Zpg/GUFT5qivHUBR9NzlJLnuD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NpLrM/dJMcaas6Zpg/GUFT5qivHUBR9NzlJLnuD1/img.png&quot; data-alt=&quot;출처: https://velog.io/@gmlstjq123/Deep-Neural-Network&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NpLrM/dJMcaas6Zpg/GUFT5qivHUBR9NzlJLnuD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNpLrM%2FdJMcaas6Zpg%2FGUFT5qivHUBR9NzlJLnuD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;648&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://velog.io/@gmlstjq123/Deep-Neural-Network&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하나의 퍼셉트론만으로는 복잡한 데이터의 패턴을 충분히 표현하기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 퍼셉트론을 층으로 연결한 구조를 다층 퍼셉트론이라고 하며 여러 개의 은닉층을 가진 신경망을 DNN이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DNN은 다음과 같은 층으로 구성된다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;입력층:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 학습에 사용할 데이터를 받는 층&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;은닉층:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 입력 데이터를 변환하며 특징과 패턴을 학습하는 층&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;출력층:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 회귀값이나 분류 확률 등 최종 예측값을 만드는 층&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 은닉층은 이전 층의 출력을 받아 새로운 값을 계산한 뒤 다음 층으로 전달한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;초기 층에서는 비교적 단순한 특징을 학습하고 뒤쪽 층으로 갈수록 여러 특징이 결합된 복잡한 표현을 학습할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;신경망을 깊게 만들면 표현력은 높아지지만 파라미터와 계산량이 증가하고 과적합 위험도 커질 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. 활성화 함수&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;신경망에서 가중치와 입력값을 곱하고 더하는 선형 연산만 반복하면 층을 여러 개 쌓아도 복잡한 비선형 관계를 충분히 표현하기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;활성화 함수는 각 층의 계산 결과를 변환해 신경망에 비선형성을 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/euQISh/dJMcag7OStQ/mL6vlwS1AGZKQbmvxVmhK1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/euQISh/dJMcag7OStQ/mL6vlwS1AGZKQbmvxVmhK1/img.webp&quot; data-alt=&quot;출처: https://wikidocs.net/250622&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/euQISh/dJMcag7OStQ/mL6vlwS1AGZKQbmvxVmhK1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeuQISh%2FdJMcag7OStQ%2FmL6vlwS1AGZKQbmvxVmhK1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;603&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://wikidocs.net/250622&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Sigmoid&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;출력값을 0과 1 사이로 변환한다. 이진 분류의 출력층에서 하나의 클래스에 속할 확률을 표현할 때 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 입력값이 매우 크거나 작으면 기울기가 거의 0이 되는 기울기 소실 문제가 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Tanh&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;출력값을 -1과 1 사이로 변환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;출력의 중심이 0이라는 특징이 있지만 Sigmoid와 비슷하게 기울기 소실이 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;ReLU&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;입력값이 0보다 크면 그대로 출력하고, 0 이하이면 0을 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;계산이 단순하고 깊은 신경망에서도 비교적 효율적으로 학습할 수 있어 &lt;/span&gt;&lt;b&gt;&lt;span&gt;은닉층에서 대표적으로 사용하는 활성화 함수&lt;/span&gt;&lt;/b&gt;&lt;span&gt;다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Softmax&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 출력값을 각 클래스에 속할 확률로 변환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주로 다중 분류 문제의 출력층에서 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;활성화 함수는 DNN이 단순한 직선 관계를 넘어 복잡한 데이터 패턴을 학습할 수 있게 하는 핵심 요소다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. 순전파와 손실함수&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;순전파(Forward Propagation)는 입력 데이터가 입력층에서 은닉층을 거쳐 출력층으로 이동하면서 예측값을 만드는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 층에서는 입력값과 가중치를 연산하고 편향을 더한 뒤 활성화 함수를 적용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;계산 결과는 다음 층의 입력으로 전달되고 마지막 출력층에서 최종 예측값이 만들어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음에는 가중치와 편향이 적절하지 않기 때문에 예측값과 실제값 사이에 차이가 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 차이를 계산하는 기준이 손실함수다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;문제 유형에 따라 사용하는 손실함수도 달라진다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;회귀: MSE, MAE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이진 분류: Binary Cross Entropy&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;다중 분류: Categorical Cross Entropy&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;손실함수는 현재 모델이 얼마나 잘못 예측했는지를 수치로 표현하며 신경망 학습은 이 손실을 줄이는 방향으로 진행된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. 경사하강법과 역전파&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J9Gro/dJMcac5sFkH/9qke1KBbzgMcrHuEoBZVWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J9Gro/dJMcac5sFkH/9qke1KBbzgMcrHuEoBZVWk/img.png&quot; data-alt=&quot;출처: https://re-code-cord.tistory.com/entry/%ED%95%B4%EB%AC%BC%ED%8C%8C%EC%A0%84%EB%A7%90%EA%B3%A0-%EC%97%AD%EC%A0%84%ED%8C%8C&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J9Gro/dJMcac5sFkH/9qke1KBbzgMcrHuEoBZVWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ9Gro%2FdJMcac5sFkH%2F9qke1KBbzgMcrHuEoBZVWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;402&quot; height=&quot;292&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://re-code-cord.tistory.com/entry/%ED%95%B4%EB%AC%BC%ED%8C%8C%EC%A0%84%EB%A7%90%EA%B3%A0-%EC%97%AD%EC%A0%84%ED%8C%8C&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;경사하강법은 손실함수의 기울기를 이용해 손실이 작아지는 방향으로 가중치와 편향을 수정하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이때 학습률은 한 번의 업데이트에서 파라미터를 얼마나 크게 변경할지를 결정한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;학습률이 너무 크면 최적 지점을 지나치며 학습이 불안정해질 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;학습률이 너무 작으면 학습 속도가 지나치게 느려질 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;역전파(Backpropagation)는 출력층에서 계산한 오차를 이전 층으로 전달하면서 각 가중치가 손실에 미친 영향을 계산하는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;신경망의 학습은 다음 과정을 반복한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;순전파로 예측값 생성 &lt;/span&gt;&lt;span&gt;&amp;rarr; 손실함수로 오차 계산 &lt;/span&gt;&lt;span&gt;&amp;rarr; 역전파로 기울기 계산&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;rarr; Optimizer가 파라미터 수정 &lt;/span&gt;&lt;span&gt;&amp;rarr; 다시 순전파 수행&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 과정을 반복하면서 모델은 손실을 줄일 수 있는 가중치와 편향을 찾아간다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. Epoch와 Batch&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;딥러닝 모델은 전체 학습 데이터를 한 번 사용하고 학습을 끝내지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Epoch&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체 학습 데이터를 한 번 모두 사용한 상태를 1 Epoch라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Epoch 수가 너무 적으면 데이터의 패턴을 충분히 학습하지 못할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반대로 너무 많으면 학습 데이터에 지나치게 맞춰지는 과적합이 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Batch&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체 데이터를 한 번에 처리하지 않고 일정한 크기로 나눈 데이터 묶음이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델은 하나의 Batch마다 예측값과 손실을 계산하고 가중치를 업데이트한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Batch Size&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;한 번의 업데이트에 사용하는 데이터의 개수다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Batch Size에 따라 메모리 사용량, 학습 속도와 가중치 업데이트의 안정성이 달라질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Epoch와 Batch Size는 단순한 실행 횟수가 아니라 신경망의 학습 과정과 성능에 영향을 주는 중요한 설정값이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. DNN을 위한 NumPy&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;딥러닝에서는 입력 데이터, 가중치와 각 층의 출력값을 벡터와 행렬 형태로 처리한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;NumPy는 다차원 배열인 &lt;/span&gt;&lt;span&gt;ndarray&lt;/span&gt;&lt;span&gt;를 제공하며 대량의 수치 데이터를 효율적으로 계산할 수 있게 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DNN 연산을 이해하기 위해 복습한 주요 개념은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;배열의 차원&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;shape&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;axis&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;인덱싱과 슬라이싱&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;reshape&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;행렬 곱&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Broadcasting&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;집계 연산&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 신경망의 한 층에서 일어나는 계산은 입력 행렬과 가중치 행렬의 곱으로 표현할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;NumPy는 단순한 데이터 분석 라이브러리가 아니라 신경망 내부의 벡터와 행렬 연산을 이해하기 위한 기반이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. Shape와 행렬 연산&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;신경망에 데이터를 입력하려면 모델이 요구하는 형태와 실제 데이터의 Shape가 일치해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 개의 샘플과 특성으로 구성된 입력 데이터는 일반적으로 다음과 같은 형태를 가진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;(샘플 개수, 특성 개수)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;가중치 행렬도 이전 층의 입력 수와 다음 층의 노드 수에 맞는 Shape를 가져야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;행렬 곱에서는 앞 행렬의 열 개수와 뒤 행렬의 행 개수가 같아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 조건이 맞지 않으면 신경망 연산을 수행할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;reshape()&lt;/span&gt;&lt;span&gt;는 전체 원소 수를 유지하면서 배열의 구조를 변경할 때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;딥러닝 실습에서 오류가 발생하면 코드만 보는 것보다 &lt;/span&gt;&lt;b&gt;&lt;span&gt;입력 데이터와 각 연산 결과의 Shape를 먼저 확인하는 것이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. Broadcasting과 벡터화&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Broadcasting은 Shape가 다른 배열 사이에서도 일정한 조건을 만족하면 NumPy가 작은 배열을 확장해 연산할 수 있도록 하는 기능이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;신경망에서는 여러 샘플의 계산 결과에 같은 편향을 더할 때처럼 작은 배열을 큰 행렬에 적용하는 상황이 자주 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또 데이터를 하나씩 반복문으로 계산하는 대신 배열 전체를 한 번에 처리하는 벡터화 연산을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;벡터화 연산은 코드를 줄이기 위한 기능을 넘어 대규모 신경망 계산을 효율적으로 수행하기 위한 핵심 방식이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. Tensor와 TensorFlow&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://www.tensorflow.org/?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.tensorflow.org/?hl=ko&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1788329202776&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;TensorFlow&quot; data-og-description=&quot;모두를 위한 엔드 투 엔드 오픈소스 머신러닝 플랫폼입니다. 도구, 라이브러리, 커뮤니티 리소스로 구성된 TensorFlow의 유연한 생태계를 만나 보세요.&quot; data-og-host=&quot;www.tensorflow.org&quot; data-og-source-url=&quot;https://www.tensorflow.org/?hl=ko&quot; data-og-url=&quot;https://www.tensorflow.org/?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xQNkd/dJMb87OfNUj/Q84Vg2mBHdJVR0h3AWS6O1/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/bqg8p2/dJMb87OfNUk/Hger16qzBLi23ulJUG9pnk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=862_224_950_320,https://scrap.kakaocdn.net/dn/culUNA/dJMb9aKXBs7/oeVAIjVvUXsVtQPS2xz3LK/img.png?width=863&amp;amp;height=485&amp;amp;face=0_0_863_485&quot;&gt;&lt;a href=&quot;https://www.tensorflow.org/?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.tensorflow.org/?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xQNkd/dJMb87OfNUj/Q84Vg2mBHdJVR0h3AWS6O1/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/bqg8p2/dJMb87OfNUk/Hger16qzBLi23ulJUG9pnk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=862_224_950_320,https://scrap.kakaocdn.net/dn/culUNA/dJMb9aKXBs7/oeVAIjVvUXsVtQPS2xz3LK/img.png?width=863&amp;amp;height=485&amp;amp;face=0_0_863_485');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;TensorFlow&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;모두를 위한 엔드 투 엔드 오픈소스 머신러닝 플랫폼입니다. 도구, 라이브러리, 커뮤니티 리소스로 구성된 TensorFlow의 유연한 생태계를 만나 보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.tensorflow.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Tensor는 TensorFlow에서 데이터를 표현하는 다차원 배열이다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;0차원 Tensor: Scalar&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;1차원 Tensor: Vector&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;2차원 Tensor: Matrix&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;3차원 이상 Tensor: 여러 축으로 구성된 다차원 데이터&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;TensorFlow는 Tensor 연산, 자동 미분과 신경망 학습을 지원하는 딥러닝 프레임워크다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;NumPy 배열과 Tensor는 형태가 비슷하지만 TensorFlow는 GPU와 같은 가속 장치를 활용할 수 있고 신경망 학습에 필요한 기울기를 자동으로 계산할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;TensorFlow는 Tensor로 계산 과정을 구성하고 자동 미분을 이용해 신경망의 파라미터를 학습한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. Tensor와 Variable&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일반적인 Tensor는 생성된 뒤 값을 직접 변경하기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반면 &lt;/span&gt;&lt;span&gt;Variable&lt;/span&gt;&lt;span&gt;은 학습 과정에서 값이 반복적으로 변경될 수 있도록 만든 객체다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;신경망의 가중치와 편향은 손실을 줄이는 방향으로 계속 수정되어야 하므로 Variable 형태로 관리된다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;구분&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;역할&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Tensor&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;입력 데이터와 중간 연산 결과 표현&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Variable&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;학습 중 변경되는 가중치와 편향 관리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 통해 TensorFlow가 &lt;/span&gt;&lt;b&gt;&lt;span&gt;일반적인 계산 데이터와 학습 과정에서 변경되는 파라미터를 구분해 관리한다&lt;/span&gt;&lt;/b&gt;&lt;span&gt;는 점을 이해할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. Keras를 이용한 모델 구성&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Keras는 TensorFlow에서 신경망 모델을 비교적 간단하게 구성하고 학습할 수 있도록 제공하는 고수준 API다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본적인 DNN은 여러 Dense Layer를 순서대로 연결하는 방식으로 구성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델을 만들 때는 다음 항목을 결정해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;입력 데이터의 Shape&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;은닉층의 개수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;각 층의 노드 수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;활성화 함수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;출력층의 구조&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;손실함수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Optimizer&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;평가 지표&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;회귀, 이진 분류와 다중 분류는 출력값의 의미가 다르기 때문에 출력층의 노드 수와 활성화 함수, 손실함수를 문제에 맞게 선택해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;층을 무조건 많이 쌓기보다 해결하려는 문제에 맞는 입력과 출력 구조를 설계하는 것이 먼저다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. 모델 학습과 평가&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;TensorFlow와 Keras를 이용한 기본적인 모델 학습 과정은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;모델 구성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;입력층, 은닉층과 출력층의 구조를 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Compile&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습에 사용할 Optimizer, 손실함수와 평가 지표를 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Fit&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습 데이터를 이용해 여러 Epoch 동안 가중치와 편향을 조정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Validation 데이터를 함께 사용하면 학습 중 일반화 성능도 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Evaluate&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습에 사용하지 않은 데이터로 손실과 평가 지표를 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Predict&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습된 모델에 새로운 데이터를 입력해 예측값을 얻는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;모델을 정상적으로 학습시켰다는 사실만으로는 충분하지 않으며 사용하지 않은 데이터에서도 안정적으로 예측하는지 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;16. 딥러닝의 과적합&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DNN은 많은 파라미터를 이용해 복잡한 관계를 학습할 수 있지만 그만큼 학습 데이터에 지나치게 맞춰질 가능성도 크다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습 손실은 계속 감소하지만 검증 손실이 증가하기 시작한다면 과적합이 발생하고 있을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;과적합을 줄이기 위한 대표적인 방법은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;충분한 데이터 확보&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;신경망의 복잡도 조절&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Validation 성능 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Epoch 조절&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Early Stopping&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Dropout&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;가중치 규제&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞에서 머신러닝을 공부하며 배운 Train&amp;middot;Validation&amp;middot;Test 데이터의 구분과 일반화 성능이 딥러닝에서도 그대로 중요했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;딥러닝의 목표는 학습 데이터를 완벽하게 기억하는 것이 아니라 새로운 데이터에서도 올바른 결과를 예측하는 것이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;17. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;딥러닝은 여러 층의 인공신경망으로 데이터의 복잡한 패턴을 학습한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;퍼셉트론은 입력값, 가중치, 편향과 활성화 함수로 구성된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;DNN은 입력층, 여러 은닉층과 출력층으로 구성된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;활성화 함수는 신경망에 비선형성을 추가한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ReLU는 은닉층에서 대표적으로 사용하는 활성화 함수다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;순전파에서는 입력 데이터로 예측값을 생성한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;손실함수는 실제값과 예측값의 차이를 측정한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;역전파와 경사하강법을 통해 가중치와 편향을 수정한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Epoch와 Batch Size는 학습 과정과 결과에 영향을 준다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;NumPy의 배열과 행렬 연산은 DNN 계산의 기반이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;신경망 연산에서는 입력과 가중치의 Shape를 확인해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Tensor는 TensorFlow에서 데이터를 표현하는 다차원 배열이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Variable은 학습 중 변경되는 가중치와 편향을 관리한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Keras에서는 모델 구성, Compile, Fit, Evaluate와 Predict의 흐름으로 신경망을 다룬다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;DNN은 표현력이 높은 만큼 Validation을 이용한 과적합 확인이 중요하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;18. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;머신러닝에서는 이미 만들어진 모델을 불러와 학습하고 평가하는 과정에 집중했다면 오늘은 모델이 내부에서 어떤 방식으로 예측값을 만들고 학습하는지 조금 더 깊게 들어간 느낌이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음에는 퍼셉트론, 가중치와 편향, 활성화 함수가 각각 별개의 개념처럼 보였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 학습 과정을 따라가 보니 모두 하나의 흐름으로 연결됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;입력값으로 예측하고 &lt;/span&gt;&lt;span&gt;&amp;rarr; 실제값과의 차이를 계산하고&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 오차의 원인을 뒤로 전달하고 &lt;/span&gt;&lt;span&gt;&amp;rarr; 가중치와 편향을 수정하는 과정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;NumPy에서 배웠던 Shape, Axis, Broadcasting과 행렬 곱이 실제 신경망 연산의 기반으로 다시 등장한 점도 기억에 남았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;TensorFlow와 Keras는 처음 보는 설정이 많아 복잡하게 느껴졌지만 코드를 외우기보다 모델의 입력과 출력 형태, 손실함수와 활성화 함수를 왜 선택했는지 이해하는 것이 더 중요하다고 느꼈다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞으로는 모델을 실행하는 데서 끝내지 않고 &lt;/span&gt;&lt;b&gt;&lt;span&gt;각 층에서 데이터의 Shape가 어떻게 바뀌는지와 학습&amp;middot;검증 손실이 어떻게 변화하는지도 함께 확인하는 습관&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 들여야겠다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 15에서는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;딥러닝과 DNN의 기본 개념을 학습하고 신경망 연산에 필요한 NumPy와 TensorFlow의 기초를 정리했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;퍼셉트론에서 시작해 입력층&amp;middot;은닉층&amp;middot;출력층의 역할과 가중치, 편향, 활성화 함수가 예측값을 만드는 과정을 살펴봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 손실함수, 경사하강법과 역전파를 통해 신경망이 오차를 줄이는 방향으로 학습하는 원리를 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;NumPy에서는 Shape, 행렬 곱과 Broadcasting이 DNN 연산에 어떻게 연결되는지 확인했고 TensorFlow에서는 Tensor와 Variable의 차이, Keras를 이용한 모델 구성과 학습 흐름을 배웠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘 수업을 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;딥러닝 모델에서는 층을 많이 쌓는 것보다 데이터의 형태와 문제에 맞는 출력층, 활성화 함수, 손실함수와 검증 방법을 올바르게 설정하는 것이 중요하다&lt;/span&gt;&lt;/b&gt;&lt;span&gt;는 점을 알 수 있었다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>DNN</category>
      <category>keras</category>
      <category>Tensor</category>
      <category>tensorflow</category>
      <category>경기AI멤버십</category>
      <category>경사하강법</category>
      <category>딥러닝</category>
      <category>역전파</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/15</guid>
      <comments>https://a-zer0.tistory.com/15#entry15comment</comments>
      <pubDate>Wed, 2 Sep 2026 14:15:56 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 14. 전기차 프로젝트 완성</title>
      <link>https://a-zer0.tistory.com/14</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;나는 내가 가진 모든 것에 감사한다.&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 진행한 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 14에서는 전날 진행한 전기차 에너지 소비량 프로젝트를 이어서 &lt;/span&gt;&lt;b&gt;&lt;span&gt;모델 학습, 성능 비교, 하이퍼파라미터 튜닝, 최종 모델 해석과 발표 자료 준비&lt;/span&gt;&lt;/b&gt;&lt;span&gt;까지 진행했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트에서 해결하려는 문제는 주행, 환경 조건에 따른 전기차의 100km당 에너지 소비량을 예측하는 것이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예측 결과는 차량 제조사의 내비게이션에서 후보 경로별 에너지 비용을 계산하는 데 활용하는 방향으로 설정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 진행 흐름은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전처리 및 데이터 분할 &lt;/span&gt;&lt;span&gt;&amp;rarr; 5-Fold 교차검증 &lt;/span&gt;&lt;span&gt;&amp;rarr; 회귀 모델 학습 &lt;/span&gt;&lt;span&gt;&amp;rarr; GridSearchCV 튜닝&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 모델 성능 비교 &lt;/span&gt;&lt;span&gt;&amp;rarr; 최종 모델 선정 &lt;/span&gt;&lt;span&gt;&amp;rarr; 특성 중요도와 잔차 분석 &lt;/span&gt;&lt;span&gt;&amp;rarr; 경로별 에너지 소비량 계산&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 분석 결과 발표 자료 제작 &lt;/span&gt;&lt;span&gt;&amp;rarr; 머신러닝 전체 내용 복습&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 전처리와 검증 전략&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터는 총 8,000건으로 구성되어 있었으며 9개의 입력변수와 하나의 목표변수를 사용했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;입력변수: 주행 속도, 적재량, 외부 기온, 냉난방 사용 전력, 도로 경사도, 배터리 온도, 운전 스타일, 타이어 공기압, 주행거리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;목표변수: &lt;/span&gt;&lt;span&gt;energy_consumption_kwhper100km&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;결측치: 0건&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;중복값: 0건&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;IQR 기준으로 목표변수에서 21건의 이상치 후보가 확인됐지만 전체 데이터의 약 0.26%였고 물리적으로 불가능한 값은 아니었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 성능 향상을 목적으로 데이터를 임의로 삭제하지 않고 그대로 유지했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;이상치는 발견 즉시 삭제하는 값이 아니라 오류인지 실제로 발생 가능한 극단 조건인지 먼저 판단해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터는 Train 80%, Test 20%로 분리했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Train 데이터: 6,400건&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test 데이터: 1,600건&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;random_state=42&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train 데이터에서 5-Fold 교차검증&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test 데이터는 최종 평가에만 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델과 전처리 기준은 모두 Train 데이터에서 결정해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;Test 데이터의 정보가 학습 과정에 포함되는 데이터 누수를 방지했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. 모델 비교 설계&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델 성능은 단순한 기준 모델부터 단계적으로 비교했다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;DummyRegressor&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;LinearRegression&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;기본 &lt;/span&gt;&lt;span&gt;DecisionTreeRegressor&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;튜닝된 &lt;/span&gt;&lt;span&gt;DecisionTreeRegressor&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;참고 모델 &lt;/span&gt;&lt;span&gt;RandomForestRegressor&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Dummy Regressor는 평균값만 예측하는 기준 모델로 사용했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 통해 복잡한 회귀 모델이 단순 평균 예측보다 실제로 얼마나 나은지 확인할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Linear Regression은 데이터의 선형적인 관계를 얼마나 잘 설명할 수 있는지 확인하기 위해 사용했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트의 중심 모델은 Decision Tree였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본 모델과 튜닝 모델을 비교하면서 &lt;/span&gt;&lt;b&gt;&lt;span&gt;트리의 복잡도를 조절했을 때 과적합과 일반화 성능이 어떻게 달라지는지&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest는 여러 결정 트리를 Bagging 방식으로 결합했을 때 단일 트리보다 성능이 얼마나 개선되는지 확인하기 위한 참고 모델로 포함했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. 모델 평가 지표&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델은 다음 지표를 이용해 평가했다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;R&amp;sup2;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;목표변수의 변동을 모델이 얼마나 설명하는지 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1에 가까울수록 모델의 설명력이 높다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;MAE&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실제값과 예측값 차이의 절댓값 평균이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 프로젝트에서는 모델이 평균적으로 몇 &lt;/span&gt;&lt;span&gt;kWh/100km&lt;/span&gt;&lt;span&gt; 정도 틀리는지 확인하는 지표로 활용했다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;RMSE&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;큰 예측 오차에 더 큰 영향을 받는 지표다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;MAE보다 RMSE가 크게 나타난다면 일부 조건에서 비교적 큰 오차가 발생했을 가능성이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;모델의 성능은 하나의 점수만 확인하지 않고 Train, 교차검증과 Test 결과를 함께 비교해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. Decision Tree 하이퍼파라미터 튜닝&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본 Decision Tree는 학습 데이터의 패턴을 매우 세밀하게 분할하면서 Train R&amp;sup2;가 1.000으로 나타났다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 Test R&amp;sup2;는 0.713으로 떨어졌기 때문에 학습 데이터에 지나치게 맞춰진 과적합이 발생했다고 판단했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;과적합을 완화하기 위해 &lt;/span&gt;&lt;span&gt;GridSearchCV&lt;/span&gt;&lt;span&gt;와 5-Fold 교차검증을 이용해 다음 하이퍼파라미터를 탐색했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;criterion&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;max_depth&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;min_samples_split&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;min_samples_leaf&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;max_features&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ccp_alpha&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;선택된 주요 설정은 다음과 같았다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;criterion&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;absolute_error&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;max_depth&lt;/span&gt;&lt;span&gt;: 15&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;min_samples_split&lt;/span&gt;&lt;span&gt;: 2&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;min_samples_leaf&lt;/span&gt;&lt;span&gt;: 10&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;max_features&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;트리의 성장을 완전히 허용하지 않고 최소 리프 데이터 수와 최대 깊이를 제한하면서 과적합을 줄였다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. 모델 성능 비교 결과&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Dummy Regressor&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.000&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;-0.001&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;-0.001&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;2.993&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;3.679&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Linear Regression&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.929&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.928&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.925&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.811&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;1.009&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Decision Tree 기본&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;1.000&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.693&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.713&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;1.559&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;1.971&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Decision Tree 튜닝&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.879&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.740&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.745&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;1.476&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;1.855&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Random Forest 참고&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.986&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.891&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.899&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.930&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;1.170&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Linear Regression이 가장 작은 Test 오차를 기록했고, Random Forest도 높은 성능을 보였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본 Decision Tree는 Train 성능이 완벽했지만 Test와 교차검증 성능이 크게 낮아 과적합이 확인됐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;튜닝 이후 Train R&amp;sup2;는 낮아졌지만 Test R&amp;sup2;는 0.713에서 0.745로 증가했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Train과 Test R&amp;sup2;의 차이도 약 0.29에서 0.13으로 감소했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;튜닝을 통해 학습 데이터에 대한 과도한 적합을 줄이고 새로운 데이터에서의 성능을 개선할 수 있었다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. 최종 모델 선정&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 데이터에서는 Linear Regression과 Random Forest가 튜닝된 Decision Tree보다 높은 예측 성능을 기록했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그럼에도 프로젝트의 최종 모델은 튜닝된 Decision Tree로 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 프로젝트에서는 가장 높은 정확도만을 기준으로 선택하지 않고 다음 요소를 함께 고려했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;수업의 중심 모델이 Decision Tree였다는 점&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;기본 트리와 튜닝 트리의 과적합 차이를 비교할 수 있다는 점&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;분기 규칙과 특성 중요도를 해석할 수 있다는 점&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;내비게이션의 경로별 에너지 비용 산정 근거를 설명하기 쉽다는 점&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;최종 모델 선정에서는 예측 성능뿐 아니라 프로젝트 목적, 해석 가능성과 실제 활용 방식도 함께 고려해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 발표에서는 Linear Regression과 Random Forest의 성능이 더 좋았다는 결과를 숨기지 않고, Decision Tree를 선택한 이유를 별도로 설명하도록 구성했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. 최종 모델의 성능 해석&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;튜닝된 Decision Tree의 최종 Test 결과는 다음과 같았다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Test R&amp;sup2;: &lt;/span&gt;&lt;span&gt;0.745&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test MAE: &lt;/span&gt;&lt;span&gt;1.476kWh/100km&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test RMSE: &lt;/span&gt;&lt;span&gt;1.855kWh/100km&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;MAE를 기준으로 보면 모델은 100km당 에너지 소비량을 평균적으로 약 &lt;/span&gt;&lt;span&gt;1.48kWh&lt;/span&gt;&lt;span&gt; 정도 차이 나게 예측했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;평균 전비가 약 &lt;/span&gt;&lt;span&gt;24.14kWh/100km&lt;/span&gt;&lt;span&gt;였으므로 평균적인 예측 오차는 약 6.1% 수준이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주행거리별 에너지 오차로 환산하면 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;50km 주행: 약 &lt;/span&gt;&lt;span&gt;0.74kWh&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;100km 주행: 약 &lt;/span&gt;&lt;span&gt;1.48kWh&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;200km 주행: 약 &lt;/span&gt;&lt;span&gt;2.95kWh&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 실제 운행 단위로 바꾸어 보니 &lt;/span&gt;&lt;b&gt;&lt;span&gt;MAE라는 모델 평가값이 운전자에게 어떤 의미가 있는지 조금 더 직관적으로 이해할 수 있었다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. 평균 전비 방식과 비교&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트의 효용성을 확인하기 위해 고정된 평균 전비를 사용하는 방식과 최종 모델의 예측 결과를 비교했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최종 Decision Tree는 평균 전비를 사용하는 기준 방식보다 전비 예측 MAE를 약 &lt;/span&gt;&lt;b&gt;&lt;span&gt;50.7% 감소&lt;/span&gt;&lt;/b&gt;&lt;span&gt;시켰다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주행거리를 반영한 총에너지 소비량 오차도 약 &lt;/span&gt;&lt;b&gt;&lt;span&gt;51.8% 감소&lt;/span&gt;&lt;/b&gt;&lt;span&gt;한 것으로 나타났다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이는 하나의 평균값만 사용하는 것보다 도로 경사도, 적재량, 속도와 냉난방 사용량 등 실제 주행 조건을 함께 반영했을 때 소비량을 더 세밀하게 예측할 수 있음을 보여준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;프로젝트의 핵심 효용성은 단순히 높은 R&amp;sup2;를 얻는 것이 아니라 고정 평균 전비 방식보다 실제 소비량 오차를 얼마나 줄였는지에 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. 특성 중요도 분석&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최종 모델의 특성 중요도를 확인한 결과 상위 세 변수는 다음과 같았다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;도로 경사도: 약 23.6%&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;적재량: 약 22.5%&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;주행 속도: 약 21.1%&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;세 변수의 중요도를 합하면 전체 예측 기여도의 약 67%를 차지했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그다음으로 냉난방 사용 전력과 운전 스타일의 중요도가 높게 나타났다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 결과는 EDA에서 목표변수와 상대적으로 높은 관련성을 보였던 변수들과 대체로 일치했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 &lt;/span&gt;&lt;b&gt;&lt;span&gt;특성 중요도는 모델이 예측할 때 해당 변수를 얼마나 활용했는지를 나타내며 인과관계를 증명하는 값은 아니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. 잔차와 모델의 한계&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실제값과 예측값의 차이인 잔차를 확인한 결과 평균은 약 &lt;/span&gt;&lt;span&gt;-0.01&lt;/span&gt;&lt;span&gt;로 0에 가까웠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적으로 한쪽 방향으로만 크게 치우쳐 예측하는 현상은 나타나지 않았지만 일부 극단적인 주행 조건에서는 오차가 비교적 크게 발생했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 Tree 기반 모델의 특성상 학습 데이터의 범위를 넘어서는 조건에 대해서는 안정적으로 외삽하기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;현재 데이터에는 다음 정보도 포함되어 있지 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;실제 지도와 도로망&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;구간별 고도&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;실시간 교통량&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;차량별 배터리 용량&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;현재 SOC&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;배터리 열화 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;회생제동량&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;충전소 위치와 요금&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;충전소 대기시간&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 이번 결과를 완성된 경로 안내 서비스라고 표현하지 않고 &lt;/span&gt;&lt;b&gt;&lt;span&gt;경로별 에너지 비용 산정에 활용할 수 있는 전비 예측 모델의 적용 가능성을 검토한 단계&lt;/span&gt;&lt;/b&gt;&lt;span&gt;로 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. 내비게이션용 에너지 비용 계산&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최종 모델이 예측한 전비는 다음 식을 이용해 경로의 총 예상 소비량으로 변환할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;총 예상 소비량(kWh) &lt;/span&gt;&lt;span&gt;= 예측 전비(kWh/100km) &amp;times; 경로 거리(km) &amp;divide; 100&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;내비게이션에서는 다음 흐름으로 모델을 활용하는 구조를 제안했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;후보 경로 생성 &lt;/span&gt;&lt;span&gt;&amp;rarr; 경로별 주행 조건 입력 &lt;/span&gt;&lt;span&gt;&amp;rarr; 예상 전비 산출 &lt;/span&gt;&lt;span&gt;&amp;rarr; 총 예상 소비량 계산 &lt;/span&gt;&lt;span&gt;&amp;rarr; 시간&amp;middot;거리&amp;middot;에너지 비교 안내&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;현재 데이터에는 실제 도로 경로가 없기 때문에 프로젝트에서는 학습 데이터의 범위 안에서 가상의 후보 경로를 만들어 적용 가능성을 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. 가상 경로 비교&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;구분&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;경로 A&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;경로 B&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;거리&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;15km&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;18km&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;도로 경사도&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;6.5%&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;0.5%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;주행 속도&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;110km/h&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;70km/h&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;예측 전비&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;26.92kWh/100km&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;22.00kWh/100km&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;총 예상 소비량&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;4.04kWh&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;3.96kWh&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;경로 B는 경로 A보다 거리가 20% 길었지만 경사가 완만하고 속도가 낮아 예측 전비가 더 좋았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그 결과 총 예상 소비량도 경로 A보다 조금 낮게 나타났다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 결과를 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;경사가 낮은 경로를 무조건 추천하는 것이 아니라 예측 전비와 경로 거리를 함께 계산해야 한다&lt;/span&gt;&lt;/b&gt;&lt;span&gt;는 점을 보여줄 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;현재 시나리오는 실제 지도 경로가 아닌 가상의 적용 사례다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실제 내비게이션에서는 시간, 거리, 교통상황과 에너지 소비량을 함께 비교해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. 발표 자료 준비&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;분석이 끝난 뒤에는 코드의 실행 순서대로 내용을 나열하지 않고, 프로젝트의 문제와 결과가 자연스럽게 연결되도록 발표 자료를 구성했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;발표에서는 단순히 그래프와 점수를 보여주는 것보다 다음 질문에 답하는 방식으로 내용을 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;왜 이 분석이 필요한가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;무엇을 예측했는가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델의 성능은 어느 정도인가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;왜 이 모델을 선택했는가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;예측 결과를 어디에 사용할 수 있는가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;현재 데이터로 할 수 없는 것은 무엇인가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;분석 발표는 코드를 설명하는 자리가 아니라 데이터에서 발견한 결과를 실제 문제와 의사결정에 연결해 전달하는 과정&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이라는 점을 배웠다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. 머신러닝 전체 과정 복습&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트와 발표 준비를 마친 뒤에는 머신러닝 정리 자료를 보면서 그동안 학습한 전체 흐름을 다시 복습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;지도학습의 회귀와 분류부터 Decision Tree, Random Forest, Bagging, Boosting과 XGBoost 등 앙상블 모델까지 앞에서 배운 내용을 연결해 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 실제 모델을 만들 때는 알고리즘만 선택하는 것이 아니라 다음 과정이 모두 필요하다는 점을 다시 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;문제 정의 &lt;/span&gt;&lt;span&gt;&amp;rarr; 데이터 확인 &lt;/span&gt;&lt;span&gt;&amp;rarr; EDA &lt;/span&gt;&lt;span&gt;&amp;rarr; 결측치와 이상치 처리 &lt;/span&gt;&lt;span&gt;&amp;rarr; 범주형 데이터 인코딩&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; Train&amp;middot;Test 분리 &lt;/span&gt;&lt;span&gt;&amp;rarr; 교차검증 &lt;/span&gt;&lt;span&gt;&amp;rarr; 모델 학습 &lt;/span&gt;&lt;span&gt;&amp;rarr; 하이퍼파라미터 튜닝 &lt;/span&gt;&lt;span&gt;&amp;rarr; 성능 평가 &lt;/span&gt;&lt;span&gt;&amp;rarr; 결과 해석과 활용&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;One-Hot Encoding과 Outlier 처리처럼 처음에는 단순한 전처리 과정으로 보였던 내용도 모델의 성능과 신뢰성에 직접 연결될 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest와 XGBoost 역시 이름과 사용법만 외우기보다 &lt;/span&gt;&lt;b&gt;&lt;span&gt;Bagging과 Boosting이 각각 어떤 방식으로 여러 모델을 결합하는지 이해하는 것이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;16. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;기본 Decision Tree에서는 과적합이 확인됐다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;GridSearchCV와 5-Fold 교차검증을 이용해 트리의 하이퍼파라미터를 조정했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;튜닝 이후 Train과 Test 성능의 차이가 약 0.29에서 0.13으로 줄었다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;최종 Decision Tree의 Test R&amp;sup2;는 0.745였다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test MAE는 약 &lt;/span&gt;&lt;span&gt;1.48kWh/100km&lt;/span&gt;&lt;span&gt;, RMSE는 약 &lt;/span&gt;&lt;span&gt;1.86kWh/100km&lt;/span&gt;&lt;span&gt;였다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Linear Regression과 Random Forest가 더 높은 예측 성능을 기록했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;최종 모델은 성능뿐 아니라 수업 목표와 해석 가능성을 함께 고려해 선정했다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;도로 경사도, 적재량과 주행 속도가 예측 기여도의 약 67%를 차지했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;최종 모델은 고정 평균 전비 방식보다 MAE를 약 50.7% 줄였다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;경로의 효율성은 전비만이 아니라 거리까지 반영한 총소비량으로 비교해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;특성 중요도를 인과관계로 해석해서는 안 된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;현재 결과는 완성된 경로 추천 시스템이 아니라 에너지 비용 예측 모델의 활용 가능성을 검토한 것이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;발표 자료는 코드보다 문제, 분석 결과와 활용 방안을 중심으로 구성해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;17. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트를 시작할 때는 모델의 성능을 높이는 것이 가장 중요하다고 생각했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 실제로 여러 모델을 비교해 보니 가장 높은 성능을 기록한 모델과 프로젝트에서 최종적으로 설명하기 좋은 모델이 항상 같지는 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Linear Regression과 Random Forest가 더 좋은 성능을 보였다는 결과를 확인하면서 모델 선정 이유를 정확하게 설명하는 것이 중요하다고 느꼈다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Decision Tree를 튜닝하는 과정에서는 Train 점수가 낮아지는 것이 무조건 나쁜 결과가 아니라는 점도 이해할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Train 데이터에 대한 완벽한 학습보다 &lt;/span&gt;&lt;b&gt;&lt;span&gt;처음 보는 데이터에서도 안정적으로 예측하는 일반화 성능이 더 중요했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또 모델의 MAE를 &lt;/span&gt;&lt;span&gt;kWh/100km&lt;/span&gt;&lt;span&gt;로만 볼 때보다 실제 주행거리별 에너지 오차로 환산하고 가상 경로에 적용해 보니 분석 결과가 서비스와 어떻게 연결되는지 더 잘 보였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;발표 자료를 만들면서는 많은 내용을 넣는 것보다 각 장에서 전달할 결론을 하나씩 정하는 것이 더 어려웠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그래도 프로젝트의 문제 정의부터 EDA, 모델 비교와 활용 방안까지 하나의 흐름으로 정리하면서 처음보다 분석의 목적이 훨씬 명확해졌다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 14에서는 전기차 에너지 소비량 프로젝트의 전처리 이후 과정을 마무리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Dummy Regressor, Linear Regression, Decision Tree와 Random Forest를 비교하고 GridSearchCV를 이용해 Decision Tree의 과적합을 완화했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최종 모델의 성능과 특성 중요도를 해석하고 평균 전비 방식과의 오차 차이를 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 예측 전비와 경로 거리를 결합한 가상 경로 비교를 통해 내비게이션의 에너지 비용 산정에 활용할 수 있는 구조도 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막에는 분석 결과를 발표 자료로 구성하고 머신러닝의 전체 흐름을 다시 복습했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 프로젝트를 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;머신러닝은 모델을 학습하는 것으로 끝나는 것이 아니라 문제 정의, 검증, 결과 해석과 실제 활용 가능성까지 연결해야 완성된다는 점&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 배울 수 있었다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>DecisionTree</category>
      <category>GridSearchCV</category>
      <category>randomforest</category>
      <category>경기AI멤버십</category>
      <category>교차검증</category>
      <category>머신러닝</category>
      <category>하이퍼파라미터튜닝</category>
      <category>회귀분석</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/14</guid>
      <comments>https://a-zer0.tistory.com/14#entry14comment</comments>
      <pubDate>Mon, 31 Aug 2026 15:03:40 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 13. 모델 검증</title>
      <link>https://a-zer0.tistory.com/13</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&lt;span&gt;지금 하는 프로젝트 모두 잘 완성해서 미래에 도움이 된다.&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 13에서는 지난 시간에 배운 Random Forest와 XGBoost 같은 모델을 어떻게 검증하고 조정할지 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Train&amp;middot;Validation&amp;middot;Test 데이터의 역할, K-Fold 교차검증, 하이퍼파라미터 튜닝과 GridSearchCV의 흐름&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 정리했다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업 이후에는 전기차 에너지 소비량 데이터를 활용한 프로젝트의 기획을 구체화하고 EDA와 전처리를 진행하면서 앞으로의 모델링 방향을 세웠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 진행 흐름은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Train&amp;middot;Validation&amp;middot;Test 구분 &lt;/span&gt;&lt;span&gt;&amp;rarr; K-Fold 교차검증 &lt;/span&gt;&lt;span&gt;&amp;rarr; 하이퍼파라미터 탐색 방법 &lt;/span&gt;&lt;span&gt;&amp;rarr; GridSearchCV&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 전기차 에너지 프로젝트 기획 &lt;/span&gt;&lt;span&gt;&amp;rarr; 데이터 품질 점검 &lt;/span&gt;&lt;span&gt;&amp;rarr; EDA &lt;/span&gt;&lt;span&gt;&amp;rarr; 전처리 및 검증 전략 수립 &lt;/span&gt;&lt;span&gt;&amp;rarr; 모델 비교 방향 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. Train, Validation, Test 데이터의 역할&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vm4OO/dJMcablexXf/PvKA2HTukWKvrYcIp3BXA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vm4OO/dJMcablexXf/PvKA2HTukWKvrYcIp3BXA0/img.png&quot; data-alt=&quot;출처: https://goatlab.tistory.com/entry/Train-Validation-Test-set&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vm4OO/dJMcablexXf/PvKA2HTukWKvrYcIp3BXA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvm4OO%2FdJMcablexXf%2FPvKA2HTukWKvrYcIp3BXA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;558&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://goatlab.tistory.com/entry/Train-Validation-Test-set&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;머신러닝 모델을 평가할 때는 학습 데이터와 테스트 데이터를 단순히 한 번 나누는 것보다 각 데이터가 어떤 목적으로 사용되는지 구분해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Training Set:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 모델이 데이터의 패턴을 학습하는 데 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Validation Set:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 학습 중 모델과 하이퍼파라미터를 비교하는 데 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Test Set:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 모든 학습과 검증이 끝난 뒤 최종 성능을 확인하는 데 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 데이터가 충분하지 않으면 데이터를 어떻게 나누느냐에 따라 모델의 성능이 크게 달라질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Test 데이터는 모델을 선택하거나 튜닝하는 과정에 반복해서 사용하지 않고 최종 평가 단계에서만 사용하는 것이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;테스트 결과를 보면서 모델을 계속 수정하면 모델이 테스트 데이터에까지 맞춰질 수 있고 처음 보는 데이터에서의 실제 성능을 제대로 확인하기 어려워진다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. K-Fold 교차검증&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zqyva/dJMcad4hjtB/xZK0fSXaioX3gk9yTA2aQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zqyva/dJMcad4hjtB/xZK0fSXaioX3gk9yTA2aQk/img.png&quot; data-alt=&quot;출처: https://incodom.kr/k-%EA%B2%B9_%EA%B5%90%EC%B0%A8_%EA%B2%80%EC%A6%9D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zqyva/dJMcad4hjtB/xZK0fSXaioX3gk9yTA2aQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzqyva%2FdJMcad4hjtB%2FxZK0fSXaioX3gk9yTA2aQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1020&quot; height=&quot;626&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://incodom.kr/k-%EA%B2%B9_%EA%B5%90%EC%B0%A8_%EA%B2%80%EC%A6%9D&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;K-Fold 교차검증은 학습 데이터를 K개의 폴드로 나눈 뒤 검증용 폴드를 번갈아 바꾸면서 학습과 평가를 반복하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 &lt;/span&gt;&lt;span&gt;K=5&lt;/span&gt;&lt;span&gt;라면 전체 학습 데이터를 다섯 부분으로 나눈다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그중 네 부분으로 모델을 학습하고 나머지 한 부분으로 검증한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;검증 영역을 바꾸어 이 과정을 총 다섯 번 반복한 뒤, 각 평가 결과의 평균을 최종 검증 점수로 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;K-Fold는 특정한 한 번의 데이터 분할 결과에만 의존하지 않고 모델의 일반화 성능을 보다 안정적으로 확인할 수 있게 해준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트에서는 전체 데이터를 Train과 Test로 먼저 분리한 뒤 Train 데이터 안에서 5-Fold 교차검증을 수행하는 방향으로 정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전체 데이터 &lt;/span&gt;&lt;span&gt;&amp;rarr; Train 80% / Test 20% 분리 &lt;/span&gt;&lt;span&gt;&amp;rarr; Train 데이터에서 5-Fold 교차검증&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 모델과 설정 선택 &lt;/span&gt;&lt;span&gt;&amp;rarr; Test 데이터로 최종 평가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 하면 모델을 선택하는 과정에서 Test 데이터의 정보가 사용되는 데이터 누수를 방지할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. 하이퍼파라미터 튜닝&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하이퍼파라미터는 모델이 학습 과정에서 자동으로 결정하는 값이 아니라 &lt;/span&gt;&lt;b&gt;&lt;span&gt;모델을 학습하기 전에 사용자가 설정해야 하는 값&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest의 트리 개수나 최대 깊이, XGBoost의 학습률처럼 같은 알고리즘이라도 하이퍼파라미터 설정에 따라 모델의 복잡도와 성능이 달라질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;적절한 값을 찾는 대표적인 방법은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Grid Search&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;지정한 모든 조합 탐색&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;탐색 범위가 작을 때 적합&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Random Search&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;일부 조합을 무작위 탐색&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;탐색 범위가 넓을 때 효율적&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Halving Grid Search&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;모든 조합에서 성능이 낮은 조합을 단계적으로 제거&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Grid Search보다 계산량 절감 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Halving Random Search&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;무작위 조합을 단계적으로 제거&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;넓은 범위를 빠르게 탐색할 때 유리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Bayesian Optimization&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;이전 탐색 결과로 다음 조합 결정&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;복잡하고 학습 비용이 큰 모델에 적합&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;하이퍼파라미터 튜닝의 목적은 학습 데이터에서 가장 높은 점수를 만드는 것이 아니라 새로운 데이터에서도 안정적으로 작동할 설정을 찾는 것이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. GridSearchCV의 학습 흐름&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pSOoc/dJMcagNDkRs/Rc2JvNKoXFeigJtwlQ9k0k/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pSOoc/dJMcagNDkRs/Rc2JvNKoXFeigJtwlQ9k0k/img.webp&quot; data-alt=&quot;출처: https://sungmin93.tistory.com/88&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pSOoc/dJMcagNDkRs/Rc2JvNKoXFeigJtwlQ9k0k/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpSOoc%2FdJMcagNDkRs%2FRc2JvNKoXFeigJtwlQ9k0k%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;588&quot; height=&quot;485&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://sungmin93.tistory.com/88&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;GridSearchCV&lt;/span&gt;&lt;span&gt;는 사용자가 지정한 하이퍼파라미터 조합을 교차검증으로 평가하고 가장 좋은 조합을 선택하는 기능이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 흐름은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;모델 정의 &lt;/span&gt;&lt;span&gt;&amp;rarr; 하이퍼파라미터 후보 설정 &lt;/span&gt;&lt;span&gt;&amp;rarr; 필요한 전처리 Pipeline 구성 &lt;/span&gt;&lt;span&gt;&amp;rarr; GridSearchCV 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;rarr; Train 데이터로 학습과 교차검증 &lt;/span&gt;&lt;span&gt;&amp;rarr; 최적 파라미터와 Best Model 선택 &lt;/span&gt;&lt;span&gt;&amp;rarr; Test 데이터로 최종 성능 평가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Pipeline을 사용하면 스케일링이나 인코딩 같은 전처리가 각 교차검증의 학습 데이터 안에서만 수행되도록 구성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 전처리와 모델을 하나의 흐름으로 묶으면 &lt;/span&gt;&lt;b&gt;&lt;span&gt;검증 데이터의 정보가 학습 과정에 미리 반영되는 데이터 누수를 방지하는 데 도움이 된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. 전기차 에너지 소비량 프로젝트 기획&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수업 이후에는 전기차 주행 데이터를 활용한 프로젝트의 방향을 구체화했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트의 대상은 &lt;/span&gt;&lt;b&gt;&lt;span&gt;차량 제조사의 전기차 내비게이션&lt;/span&gt;&lt;/b&gt;&lt;span&gt;으로 정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전기차는 같은 거리를 주행하더라도 도로 경사도, 속도, 적재량, 외부 기온, 냉난방 사용량과 운전 습관 등에 따라 실제 에너지 소비량이 달라질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 하나의 고정된 평균 전비만 사용하면 각 경로의 실제 주행 조건에 따른 차이를 충분히 반영하기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 프로젝트의 목적은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;주행&amp;middot;환경 조건으로 100km당 에너지 소비량을 예측하고 그 값을 내비게이션의 후보 경로별 에너지 비용 계산에 활용할 수 있는 모델을 만드는 것&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델이 예측할 목표변수는 &lt;/span&gt;&lt;span&gt;energy_consumption_kwhper100km&lt;/span&gt;&lt;span&gt;이며 단위는 &lt;/span&gt;&lt;span&gt;kWh/100km&lt;/span&gt;&lt;span&gt;다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. 프로젝트에서 해결하려는 문제&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트를 진행하기 전에 다음 네 가지 질문을 기준으로 문제를 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;왜 필요한가&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전기차의 에너지 소비량은 주행거리뿐 아니라 경사도, 속도, 기온, 공조 부하 등 여러 조건에 따라 달라진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 차이를 충분히 반영하지 않으면 목적지 도착 시 예상 배터리 잔량과 충전 필요 시점에 오차가 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;무엇을 예측하나&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주행 및 환경 조건에 따른 &lt;/span&gt;&lt;b&gt;&lt;span&gt;100km당 에너지 소비량&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 예측한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예측 전비와 경로 거리를 결합하면 다음과 같이 경로의 총 예상 소비량도 계산할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;경로 총 예상 소비량(kWh) &lt;/span&gt;&lt;span&gt;= 예측 전비(kWh/100km) &amp;times; 경로 거리(km) &amp;divide; 100&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;어디에 쓰나&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;후보 경로별 예상 에너지 소비량 비교&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;목적지 도착 가능 여부 판단 지원&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;도착 예상 배터리 잔량 계산&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;충전소 경유 필요성 판단&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;경로별 예상 전기요금 산출&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;누가 쓰나&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델을 직접 활용하는 주체는 차량 제조사의 내비게이션 개발&amp;middot;기획 부서이며, 최종 사용자는 전기차 운전자다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. 프로젝트 범위 정하기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;현재 데이터에는 실제 지도, 도로망, 경로 좌표와 실시간 교통정보가 포함되어 있지 않다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 이번 프로젝트에서 경로를 직접 생성하거나 완성된 최적 경로 안내 시스템을 구현한다고 표현하면 실제 데이터 범위를 넘어선다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 프로젝트의 범위는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;내비게이션이 생성한 후보 경로의 조건을 입력받아 경로별 예상 에너지 소비량을 계산하는 비용 모델을 개발하는 것&lt;/span&gt;&lt;/b&gt;&lt;span&gt;으로 정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 경사가 낮은 경로를 무조건 에너지 최적 경로로 판단해서는 안 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;경사가 완만하더라도 우회 거리가 길어지면 총소비량이 더 증가할 수 있기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;경로의 효율성은 전비 하나가 아니라 예측 전비와 실제 경로 거리를 결합한 총 예상 소비량으로 비교해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. 데이터 구성과 품질 점검&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트 데이터는 총 8,000건이며, 9개의 입력변수와 1개의 목표변수로 구성되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주요 입력변수는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;주행 속도&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;적재량&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;외부 기온&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;냉난방 사용 전력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;도로 경사도&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;배터리 온도&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;운전 스타일 지수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;타이어 공기압&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;주행거리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터를 확인한 결과 결측치는 존재하지 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 결측치가 없다는 이유만으로 바로 모델을 학습할 수 있는 것은 아니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;변수별 데이터 타입과 범위, 중복값, 이상치 후보와 물리적으로 비정상적인 값도 함께 확인해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;이상치는 모델 성능을 높이기 위해 자동으로 삭제하지 않고 실제 오류인지 의미 있는 극단 조건인지 먼저 판단하기로 했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. 목표변수와 전비 변동성&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터에서 100km당 에너지 소비량은 약 &lt;/span&gt;&lt;b&gt;&lt;span&gt;11.62~35.00kWh/100km&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 범위로 나타났다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최대값과 최소값 사이에 약 3배의 차이가 있어 주행 조건에 따른 전비 변동이 상당히 크다는 것을 확인할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;60kWh 배터리를 기준으로 단순 환산하면 예상 주행가능거리는 약 171~516km 범위가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 이 값은 60kWh 전체를 사용할 수 있다고 가정한 단순 계산이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실제 차량에서는 배터리의 가용 용량, 현재 SOC, 안전 잔량과 배터리 열화 상태 등을 추가로 고려해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;이번 EDA에서 확인한 전비의 넓은 범위는 주행 조건을 반영한 예측 모델이 필요한 이유를 보여준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. EDA에서 확인한 주요 관계&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;상관관계를 확인한 결과 목표변수와 상대적으로 관련성이 크게 나타난 변수는 다음과 같았다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;도로 경사도: 약 &lt;/span&gt;&lt;span&gt;0.50&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;적재량: 약 &lt;/span&gt;&lt;span&gt;0.47&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;주행 속도: 약 &lt;/span&gt;&lt;span&gt;0.45&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;냉난방 사용 전력: 약 &lt;/span&gt;&lt;span&gt;0.37&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;구간별 평균에서도 차이를 확인할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;조건&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;평균 에너지 소비량&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;내리막 구간&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;약 22.15kWh/100km&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;경사도 4% 이상&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;약 26.42kWh/100km&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;저적재 조건&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;약 22.13kWh/100km&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;고적재 조건&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;약 26.19kWh/100km&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;저속 조건&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;약 22.08kWh/100km&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;고속 조건&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;약 26.04kWh/100km&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;도로 경사도, 적재량과 속도가 높아지는 구간에서 평균 에너지 소비량도 높아지는 경향을 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 &lt;/span&gt;&lt;b&gt;&lt;span&gt;상관관계는 인과관계를 의미하지 않는다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 변수가 직접적인 원인이라고 단정하지 않고 비선형 관계와 변수 간 상호작용을 모델링 과정에서 추가로 확인해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. 통제 가능한 조건과 통제하기 어려운 조건&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;EDA 결과에서 도로 경사도가 전비와 가장 높은 관련성을 보였지만 운전자가 도로의 경사를 직접 바꿀 수는 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 정리하면서 변수를 두 가지 관점으로 구분했다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;통제하기 어려운 조건&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;도로 경사도&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;외부 기온&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;경로 거리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;배터리 온도&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;일부 조절할 수 있는 조건&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;주행 속도&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;냉난방 사용량&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;적재량&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;운전 스타일&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;타이어 공기압&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;통제하기 어려운 변수도 예측에서는 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자가 변경할 수 없더라도 &lt;/span&gt;&lt;b&gt;&lt;span&gt;모델이 실제 소비량을 정확하게 계산하려면 반드시 반영해야 하는 조건&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;내비게이션은 경사도와 기온처럼 바꾸기 어려운 조건을 소비량 예측에 사용하고 운전자에게는 속도나 냉난방 설정처럼 조절 가능한 요인을 중심으로 안내할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. 전처리와 검증 방향&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;EDA 이후에는 다음과 같은 전처리와 검증 원칙을 정했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;입력변수 &lt;/span&gt;&lt;span&gt;X&lt;/span&gt;&lt;span&gt;와 목표변수 &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt; 분리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train/Test 80:20 분할&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;random_state=42&lt;/span&gt;&lt;span&gt; 적용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train 데이터에서 5-Fold 교차검증 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test 데이터는 최종 평가에만 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이상치는 근거 없이 자동 제거하지 않음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;전처리와 모델 설정은 Train 데이터에서 결정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;필요한 전처리는 Pipeline 내부에서 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;의사결정나무와 Random Forest는 변수 사이의 거리를 계산하는 모델이 아니므로 스케일링이 필수적이지 않다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반면 선형 모델에 스케일링이 필요하다면 Pipeline 내부에서 적용하는 방향으로 정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;전처리 과정에서도 전체 데이터의 정보를 미리 사용하지 않고 학습 데이터 안에서 처리하여 데이터 누수를 방지하는 것이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. 앞으로 비교할 모델&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 단계에서는 아직 최종 모델을 선정하지 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;먼저 다음 모델들을 동일한 검증 기준으로 비교할 계획을 세웠다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;DummyRegressor&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;LinearRegression&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;기본 &lt;/span&gt;&lt;span&gt;DecisionTreeRegressor&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;튜닝된 &lt;/span&gt;&lt;span&gt;DecisionTreeRegressor&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;RandomForestRegressor&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Dummy Regressor는 복잡한 모델이 단순 평균 예측보다 실제로 나은지 확인하기 위한 기준선으로 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기본 의사결정나무에서는 학습 데이터에 과적합되는 현상이 나타나는지 확인하고 GridSearchCV를 이용해 최대 깊이, 최소 분할 표본 수, 최소 리프 표본 수와 가지치기 강도 등을 조정할 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest는 여러 결정 트리를 배깅 방식으로 결합했을 때 단일 트리보다 성능이 개선되는지 그리고 그만큼 추론 시간과 모델 크기가 증가하는지를 확인하기 위한 비교 모델로 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. 모델 평가 기준&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델은 하나의 점수만으로 선정하지 않고 다음 항목을 함께 비교할 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Train R&amp;sup2;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;교차검증 RMSE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test R&amp;sup2;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test MAE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test RMSE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Train과 Test 성능 차이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;추론 시간&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모델 파일 크기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;해석 가능성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;내비게이션 적용 가능성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;가장 높은 정확도를 기록한 모델이 반드시 차량 환경에 가장 적합한 모델은 아니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;차량 내비게이션에 적용하려면 예측 성능뿐 아니라 빠른 응답 속도, 제한된 저장공간, 모델의 안정성과 결과를 설명할 수 있는지도 함께 고려해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;16. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Validation 데이터는 모델과 설정을 비교하기 위한 데이터다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Test 데이터는 모든 학습과 검증이 끝난 뒤 최종 평가에만 사용해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;K-Fold는 학습 데이터를 여러 폴드로 나누어 학습과 검증을 반복한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;교차검증을 사용하면 한 번의 데이터 분할에 따른 성능 변동을 줄일 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;GridSearchCV는 지정한 하이퍼파라미터 조합을 교차검증으로 비교한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;전처리와 모델을 Pipeline으로 묶으면 데이터 누수 방지에 도움이 된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;전기차 프로젝트는 주행 조건별 에너지 소비량을 예측하는 회귀 문제로 정의했다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;현재 프로젝트의 범위는 경로 생성이 아니라 경로별 에너지 비용 산정 모델 개발이다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;전비는 약 11.62~35.00kWh/100km 범위로 크게 달라졌다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;도로 경사도, 적재량, 주행 속도와 냉난방 사용량이 전비와 상대적으로 높은 관련성을 보였다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;상관관계를 인과관계로 단정하지 않아야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이상치는 자동으로 삭제하지 않고 의미와 발생 원인을 먼저 확인해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;최종 모델은 정확도, 과적합, 속도, 크기와 해석 가능성을 함께 비교해 선정해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;17. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그동안 모델을 학습하고 Test 점수를 확인하면 평가가 끝난다고 생각했는데 오늘은 &lt;/span&gt;&lt;b&gt;&lt;span&gt;모델을 선택하는 과정과 최종 평가를 분리해야 하는 이유&lt;/span&gt;&lt;/b&gt;&lt;span&gt;를 이해할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 K-Fold 교차검증은 같은 데이터라도 분할 위치에 따라 결과가 달라질 수 있다는 문제를 줄여준다는 점이 기억에 남았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로젝트에서는 코드를 작성하기 전에 무엇을 예측하고 그 결과를 어디에 사용할지 먼저 정하는 과정이 중요했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음에는 경사도가 낮은 경로를 추천하는 방향을 생각했지만, 경사가 완만하더라도 우회 거리가 길어지면 총소비량이 더 커질 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;하나의 변수만 보고 결론을 내리지 않고 프로젝트의 최종 목적에 맞는 계산 기준을 만들어야 한다&lt;/span&gt;&lt;/b&gt;&lt;span&gt;는 점을 배웠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아직 모델 학습과 최종 선정은 남아 있지만 오늘은 문제 정의부터 EDA, 전처리와 검증 전략까지 연결하면서 프로젝트의 전체 방향을 세울 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 13에서는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;K-Fold 교차검증과 하이퍼파라미터 튜닝의 필요성을 학습하고 GridSearchCV의 전체적인 흐름을 정리했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 전기차 에너지 소비량 데이터를 활용한 프로젝트에서 차량 제조사의 내비게이션이라는 활용 대상을 정하고 주행 조건별 전비를 예측해 후보 경로의 에너지 비용을 계산하는 방향으로 문제를 구체화했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;EDA에서는 전비의 변동 범위와 주요 변수의 관계를 확인했고 이상치를 임의로 삭제하지 않으며 Train 데이터 안에서 교차검증과 전처리를 수행하는 원칙도 정했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다음 단계에서는 동일한 검증 조건에서 여러 회귀 모델을 학습하고 &lt;/span&gt;&lt;b&gt;&lt;span&gt;예측 성능과 과적합뿐 아니라 추론 속도, 모델 크기와 실제 내비게이션 적용 가능성까지 함께 비교해 최종 모델을 선정할 예정이다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>EDA</category>
      <category>GridSearchCV</category>
      <category>KFold</category>
      <category>경기AI멤버십</category>
      <category>교차검증</category>
      <category>데이터전처리</category>
      <category>머신러닝</category>
      <category>하이퍼파라미터튜닝</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/13</guid>
      <comments>https://a-zer0.tistory.com/13#entry13comment</comments>
      <pubDate>Sat, 29 Aug 2026 23:11:58 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 12. 앙상블 학습</title>
      <link>https://a-zer0.tistory.com/12</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&lt;span&gt;나는 여러 면에서 훌륭한 사람이다.&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 12에서는 여러 모델의 예측을 결합하는 &lt;b&gt;앙상블 학습(Ensemble Learning)&lt;/b&gt;을 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;먼저 보팅, 배깅, 부스팅 등 앙상블의 주요 유형을 살펴보고 결정 트리를 기반으로 하는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;Random Forest와 XGBoost&lt;/span&gt;&lt;/b&gt;&lt;span&gt;의 학습 방식을 비교했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 호주 날씨 데이터를 이용해 내일 비가 올지를 예측하면서 결측치 처리, One-Hot Encoding, 이상치 제거와 모델 성능 비교까지 실습했다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전체적인 학습 흐름은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;앙상블 학습 &lt;/span&gt;&lt;span&gt;&amp;rarr; Voting과 Bagging &lt;/span&gt;&lt;span&gt;&amp;rarr; Random Forest &lt;/span&gt;&lt;span&gt;&amp;rarr; 결측치 처리 &lt;/span&gt;&lt;span&gt;&amp;rarr; One-Hot Encoding&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;rarr; 날씨 데이터 분류 실습 &lt;/span&gt;&lt;span&gt;&amp;rarr; Outlier 제거 &lt;/span&gt;&lt;span&gt;&amp;rarr; Boosting과 GBM &lt;/span&gt;&lt;span&gt;&amp;rarr; XGBoost &lt;/span&gt;&lt;span&gt;&amp;rarr; 하이퍼파라미터와 과적합 조정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 여러 모델의 예측을 결합하는 앙상블&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앙상블 학습은 &lt;/span&gt;&lt;b&gt;&lt;span&gt;여러 개의 모델이 만든 예측 결과를 결합해 하나의 최종 예측을 만드는 방법&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;어려운 문제를 한 명의 판단에 맡기지 않고 여러 전문가의 의견을 모아 결론을 내리는 것과 비슷하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;개별 모델의 약점을 다른 모델이 보완할 수 있기 때문에 단일 모델보다 안정적이고 신뢰도 높은 결과를 기대할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;무조건 성능이 좋은 모델만 모으는 것보다 &lt;/span&gt;&lt;b&gt;&lt;span&gt;서로 다른 특성을 가진 모델을 적절히 결합하는 것이 전체 성능 향상에 도움이 될 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앙상블의 대표적인 유형으로는 Voting, Bagging, Boosting, Stacking이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Voting&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;서로 다른 모델의 예측 결과를 투표 또는 확률 평균으로 결합&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Bagging&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;같은 종류의 모델을 서로 다른 표본으로 학습한 뒤 결과 결합&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Boosting&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;약한 모델을 순차적으로 학습하며 이전 단계의 오류를 보완&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Stacking&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;여러 모델의 예측값을 새로운 모델의 입력으로 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. Voting과 Bagging의 차이&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEk2KD/dJMcacRLR6X/bjKv19wmfjkotVLcAAyth0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEk2KD/dJMcacRLR6X/bjKv19wmfjkotVLcAAyth0/img.png&quot; data-alt=&quot;출처: https://velog.io/@jiselectric/Ensemble-Learning-Voting-and-Bagging-at6219ae&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEk2KD/dJMcacRLR6X/bjKv19wmfjkotVLcAAyth0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEk2KD%2FdJMcacRLR6X%2FbjKv19wmfjkotVLcAAyth0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;353&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://velog.io/@jiselectric/Ensemble-Learning-Voting-and-Bagging-at6219ae&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Voting과 Bagging은 여러 예측을 결합한다는 점에서는 비슷하지만 모델을 구성하는 방법이 다르다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Voting은 일반적으로 서로 다른 종류의 모델을 함께 사용한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 KNN, Logistic Regression, SVM이 각각 예측한 결과를 모아 최종 클래스를 결정할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Voting에는 두 가지 방식이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Hard Voting: 각 모델이 예측한 클래스를 다수결로 결정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Soft Voting: 각 클래스의 예측 확률을 평균하여 결정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반면 &lt;/span&gt;&lt;b&gt;&lt;span&gt;Bagging은 동일한 종류의 기본 모델을 여러 개 만들고 각각 다른 부트스트랩 표본으로 학습한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;부트스트랩은 원본 데이터에서 복원추출하는 방식이므로 하나의 표본이 여러 번 선택될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 서로 조금씩 다른 데이터를 학습한 모델들의 결과를 합치면 개별 모델의 편향된 판단을 줄일 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. Bagging의 대표 모델, Random Forest&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4GXYw/dJMb991WeH7/MQnotkBcrrtxec3DZkm63K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4GXYw/dJMb991WeH7/MQnotkBcrrtxec3DZkm63K/img.jpg&quot; data-alt=&quot;출처: https://consuledge.com.au/blog/mastering-random-forests-a-beginners-guide-to-smarter-machine-learning/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4GXYw/dJMb991WeH7/MQnotkBcrrtxec3DZkm63K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4GXYw%2FdJMb991WeH7%2FMQnotkBcrrtxec3DZkm63K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;914&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;914&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://consuledge.com.au/blog/mastering-random-forests-a-beginners-guide-to-smarter-machine-learning/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;여러 개의 결정 트리를 배깅 방식으로 학습한 뒤 각 트리의 예측을 결합하는 앙상블 모델&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;결정 트리는 구조가 직관적이지만 학습 데이터에 지나치게 맞춰지는 과적합 문제가 발생하기 쉽다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest는 서로 다른 데이터를 학습한 다수의 트리를 결합해 이러한 단점을 보완한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주요 장점은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;많은 튜닝을 하지 않아도 비교적 안정적인 성능을 보인다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;분류와 회귀 문제에 모두 사용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;여러 트리를 병렬로 학습할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;다양한 데이터에서 높은 예측 성능을 기대할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반면 트리의 개수가 많아지면 학습 시간과 모델 크기도 함께 증가한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Scikit-learn에서는 문제 유형에 따라 다음 모델을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;분류: &lt;/span&gt;&lt;span&gt;RandomForestClassifier&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;회귀: &lt;/span&gt;&lt;span&gt;RandomForestRegressor&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. Random Forest의 주요 하이퍼파라미터&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest에서는 여러 개의 결정 트리를 사용하므로 트리의 수와 복잡도를 함께 조절해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;n_estimators&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;생성할 결정 트리의 개수다. 트리를 늘리면 일반적으로 예측이 안정될 수 있지만 &lt;/span&gt;&lt;b&gt;&lt;span&gt;트리 수를 계속 늘린다고 성능이 무조건 향상되는 것은 아니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;트리가 많아질수록 학습 시간도 길어진다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;max_depth&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 결정 트리가 성장할 수 있는 최대 깊이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;값이 지나치게 크면 개별 트리가 복잡해져 과적합될 가능성이 커진다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;min_samples_leaf&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하나의 리프 노드가 가져야 하는 최소 샘플 수다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;너무 작은 값은 학습 데이터에 지나치게 세밀한 분할을 만들 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;max_features&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 노드에서 분할 기준을 찾을 때 검토할 특성의 수를 제한한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모든 트리가 항상 같은 특성만 사용하지 않도록 만들어 &lt;/span&gt;&lt;b&gt;&lt;span&gt;트리 사이의 다양성을 높이는 역할&lt;/span&gt;&lt;/b&gt;&lt;span&gt;을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;n_jobs&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여러 트리를 학습할 때 사용할 처리 자원의 수를 지정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;n_jobs=-1&lt;/span&gt;&lt;span&gt;로 설정하면 사용 가능한 모든 논리 프로세서를 활용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. 호주 날씨 데이터로 내일 비 예측하기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest 실습에서는 호주 기상청의 날씨 데이터를 이용해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;내일 비가 올지를 예측하는 이진 분류 문제&lt;/span&gt;&lt;/b&gt;&lt;span&gt;를 다뤘다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터는 약 14만 5천 건으로 구성되어 있었고 기온&amp;middot;강우량&amp;middot;풍향&amp;middot;풍속&amp;middot;습도&amp;middot;기압&amp;middot;구름량 등 다양한 날씨 정보가 포함되어 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Target: &lt;/span&gt;&lt;span&gt;RainTomorrow&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Class: &lt;/span&gt;&lt;span&gt;Yes&lt;/span&gt;&lt;span&gt; 또는 &lt;/span&gt;&lt;span&gt;No&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;비교 모델: &lt;/span&gt;&lt;span&gt;DecisionTreeClassifier&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;RandomForestClassifier&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 실습에서 중요했던 것은 단순히 모델을 실행하는 것이 아니라 &lt;/span&gt;&lt;b&gt;&lt;span&gt;실제 데이터를 모델이 학습할 수 있는 상태로 정리하는 과정&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 날씨 데이터에는 수치형 변수와 범주형 변수가 함께 존재하고 결측치도 많았기 때문에 모델 학습 전에 데이터 유형에 맞는 처리가 필요했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. 결측치와 범주형 데이터 처리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;결측치는 모든 컬럼에서 같은 방법으로 처리하기보다 데이터의 특성을 고려해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수치형 데이터는 극단값의 영향을 비교적 적게 받는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;중위값&lt;/span&gt;&lt;/b&gt;&lt;span&gt;으로 채우고 범주형 데이터는 가장 자주 등장하는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;최빈값&lt;/span&gt;&lt;/b&gt;&lt;span&gt;으로 채울 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 &lt;/span&gt;&lt;span&gt;RainToday&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;RainTomorrow&lt;/span&gt;&lt;span&gt;처럼 &lt;/span&gt;&lt;span&gt;Yes&lt;/span&gt;&lt;span&gt;와 &lt;/span&gt;&lt;span&gt;No&lt;/span&gt;&lt;span&gt;로 구성된 값은 &lt;/span&gt;&lt;span&gt;replace()&lt;/span&gt;&lt;span&gt;를 이용해 1과 0으로 변환할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 지역이나 풍향처럼 여러 범주를 가진 데이터를 단순히 1, 2, 3과 같은 숫자로 바꾸면 문제가 생길 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실제로는 순서가 없는 값인데 모델이 숫자의 크기나 순서에 의미가 있다고 판단할 수 있기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. One-Hot Encoding&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IBwVb/dJMcafOGt6x/Gea0QqNrWySWtqvejrQmg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IBwVb/dJMcafOGt6x/Gea0QqNrWySWtqvejrQmg0/img.png&quot; data-alt=&quot;출처: https://towardsdatascience.com/encoding-categorical-variables-one-hot-vs-dummy-encoding-6d5b9c46e2db/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IBwVb/dJMcafOGt6x/Gea0QqNrWySWtqvejrQmg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBwVb%2FdJMcafOGt6x%2FGea0QqNrWySWtqvejrQmg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;342&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://towardsdatascience.com/encoding-categorical-variables-one-hot-vs-dummy-encoding-6d5b9c46e2db/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;One-Hot Encoding은 범주형 데이터를 0과 1로 구성된 여러 개의 이진 변수로 변환하는 방법&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 개, 고양이, 말이라는 범주가 있다면 하나의 숫자로 순서를 부여하지 않고 각 범주에 해당하는 위치만 1로 표시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;순서가 없는 범주형 데이터에 잘못된 크기 관계가 생기는 것을 방지할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Scikit-learn에서는 &lt;/span&gt;&lt;span&gt;OneHotEncoder&lt;/span&gt;&lt;span&gt;를 사용할 수 있고 Pandas에서는 &lt;/span&gt;&lt;span&gt;get_dummies()&lt;/span&gt;&lt;span&gt;를 이용해 비교적 간단하게 One-Hot Encoding을 적용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;날씨 데이터처럼 지역과 풍향 등 범주형 컬럼이 많은 데이터에서는 모델 학습 전에 반드시 고려해야 하는 전처리 과정이었다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. Outlier가 모델에 미치는 영향&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Outlier는 다른 관측값과 비교했을 때 지나치게 크거나 작은 값을 가진 데이터다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실제 현상을 나타내는 의미 있는 값일 수도 있지만 측정 오류나 입력 오류로 발생한 값이라면 모델의 학습을 방해할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 &lt;/span&gt;&lt;b&gt;&lt;span&gt;이상치를 무조건 삭제하는 것이 아니라 데이터의 의미와 분포를 먼저 확인해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 수업에서는 Boxplot과 IQR을 이용해 이상치를 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;IQR = Q3 - Q1&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일반적으로 다음 범위를 벗어나는 값을 이상치 후보로 판단한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;하한: &lt;/span&gt;&lt;span&gt;Q1 - 1.5 &amp;times; IQR&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;상한: &lt;/span&gt;&lt;span&gt;Q3 + 1.5 &amp;times; IQR&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한 모든 컬럼의 이상치를 일괄적으로 제거하기보다 상관분석을 이용해 Target과 관련성이 높은 Feature를 확인한 뒤 해당 컬럼을 중심으로 이상치를 처리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;이상치 제거는 단순한 데이터 삭제가 아니라 모델 학습에 실제로 방해가 되는 값을 판단하는 전처리 과정&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이라는 점이 중요했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. Bagging과 Boosting 비교&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;933&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmna98/dJMb99U6IwR/aguAg3KCsZtSXaSHhzlCGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmna98/dJMb99U6IwR/aguAg3KCsZtSXaSHhzlCGk/img.png&quot; data-alt=&quot;출처: https://medium.com/data-science-collective/bagging-vs-boosting-a-deep-dive-into-ensemble-learning-for-tree-based-models-b3a061da3e62&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmna98/dJMb99U6IwR/aguAg3KCsZtSXaSHhzlCGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmna98%2FdJMb99U6IwR%2FaguAg3KCsZtSXaSHhzlCGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1400&quot; height=&quot;933&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;933&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://medium.com/data-science-collective/bagging-vs-boosting-a-deep-dive-into-ensemble-learning-for-tree-based-models-b3a061da3e62&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest가 사용하는 Bagging은 여러 모델을 독립적으로 학습한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반면 Boosting은 모델을 순차적으로 추가하면서 앞선 모델의 오류를 보완한다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Bagging&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Boosting&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;여러 모델을 독립적으로 학습&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;여러 모델을 순차적으로 학습&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;부트스트랩 표본 사용&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;이전 단계의 오류를 다음 학습에 반영&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;병렬 학습에 유리&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;앞선 학습 결과에 영향을 받음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;대표 모델: Random Forest&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;대표 모델: AdaBoost, GBM, XGBoost, LightGBM&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Bagging이 여러 모델의 판단을 모아 예측의 안정성을 높이는 방식이라면 Boosting은 틀린 부분을 반복해서 보완하며 성능을 높이는 방식&lt;/span&gt;&lt;/b&gt;&lt;span&gt;으로 이해할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. GBM과 XGBoost&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;941&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ex366u/dJMcaf8MVNi/o4S3xakXgWKV8K9QkzNBK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ex366u/dJMcaf8MVNi/o4S3xakXgWKV8K9QkzNBK0/img.png&quot; data-alt=&quot;출처: GPT로 직접 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ex366u/dJMcaf8MVNi/o4S3xakXgWKV8K9QkzNBK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fex366u%2FdJMcaf8MVNi%2Fo4S3xakXgWKV8K9QkzNBK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1672&quot; height=&quot;941&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;941&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: GPT로 직접 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;GBM은 여러 개의 약한 학습기를 순차적으로 추가하면서 &lt;/span&gt;&lt;b&gt;&lt;span&gt;실제값과 이전 예측값의 차이인 잔차를 다음 모델이 학습하도록 만드는 방식&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;XGBoost는 이러한 Gradient Boosting을 기반으로 만든 외부 라이브러리로 효율적인 연산과 최적화 기능을 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주요 장점은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;다양한 상황에서 안정적으로 좋은 성능을 보인다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;정형 데이터의 분류와 회귀 문제에서 강력한 성능을 기대할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;병렬 처리와 여러 최적화 기능을 지원한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;많은 Feature Engineering 없이도 비교적 안정적인 결과를 낼 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 &lt;/span&gt;&lt;b&gt;&lt;span&gt;조정할 하이퍼파라미터가 많아 튜닝이 어렵다는 단점&lt;/span&gt;&lt;/b&gt;&lt;span&gt;도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. XGBoost의 주요 하이퍼파라미터&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;booster&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용할 부스터 구조를 결정한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;gbtree&lt;/span&gt;&lt;span&gt;: 일반적인 트리 기반 부스팅&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;dart&lt;/span&gt;&lt;span&gt;: 일부 트리를 제외하는 방식이 적용된 트리 부스팅&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;gblinear&lt;/span&gt;&lt;span&gt;: 선형 부스터&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;learning_rate&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 학습기가 이전 오류를 얼마나 크게 보정할지 결정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;값이 크면 빠르게 학습할 수 있지만 과적합 위험도 커질 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;n_estimators&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;생성할 약한 학습기의 수다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;learning_rate&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;를 낮추면 일반적으로 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;n_estimators&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;를 충분히 늘려야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;max_depth&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;각 트리의 최대 깊이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;값이 커질수록 모델이 복잡해지며 과적합 가능성도 높아진다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;objective&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모델이 해결할 문제와 사용할 목적함수를 지정한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;reg:squarederror&lt;/span&gt;&lt;span&gt;: 회귀&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;binary:logistic&lt;/span&gt;&lt;span&gt;: 이진 분류&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;multi:softmax&lt;/span&gt;&lt;span&gt;: 다중 분류 클래스 반환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;multi:softprob&lt;/span&gt;&lt;span&gt;: 각 클래스의 예측 확률 반환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;eval_metric&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;학습 과정에서 모델의 성능을 확인할 평가 지표다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;문제에 따라 RMSE, MAE, Log Loss, Error, AUC 등을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. XGBoost의 과적합 조절&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;XGBoost는 성능이 강력한 만큼 모델이 지나치게 복잡해지지 않도록 여러 파라미터를 함께 살펴봐야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;과적합을 줄이기 위해 다음과 같은 방향으로 조정할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;learning_rate&lt;/span&gt;&lt;span&gt; 낮추기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;learning_rate&lt;/span&gt;&lt;span&gt;를 낮춘 만큼 &lt;/span&gt;&lt;span&gt;n_estimators&lt;/span&gt;&lt;span&gt; 늘리기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;max_depth&lt;/span&gt;&lt;span&gt; 낮추기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;min_child_weight&lt;/span&gt;&lt;span&gt; 높이기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;gamma&lt;/span&gt;&lt;span&gt; 높이기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;subsample&lt;/span&gt;&lt;span&gt; 낮추기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;colsample_bytree&lt;/span&gt;&lt;span&gt; 낮추기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 규제를 지나치게 강하게 설정하면 과소적합이 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 &lt;/span&gt;&lt;b&gt;&lt;span&gt;하나의 파라미터만 크게 변경하기보다 학습 속도, 트리 수, 트리 깊이와 샘플 비율의 균형을 맞추는 것이 중요하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;앙상블은 여러 모델의 예측을 결합해 단일 모델의 약점을 보완하는 방법이다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Voting은 서로 다른 모델의 결과를 투표 또는 확률 평균으로 결합한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Bagging은 동일한 기본 모델을 서로 다른 부트스트랩 표본으로 학습한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Random Forest는 여러 결정 트리를 배깅 방식으로 학습하는 모델이다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Random Forest는 비교적 안정적인 성능을 보이지만 트리가 많아지면 학습 시간이 길어진다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;범주형 데이터는 숫자의 잘못된 순서 관계를 방지하기 위해 One-Hot Encoding을 적용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;수치형 결측치는 중위값, 범주형 결측치는 최빈값을 활용해 처리할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Outlier는 IQR과 Boxplot으로 확인할 수 있지만 데이터의 의미를 고려해 처리해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Boosting은 이전 모델의 오류를 다음 모델이 순차적으로 보완한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;GBM은 이전 예측의 잔차를 다음 학습기의 학습 대상으로 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;XGBoost는 Gradient Boosting을 효율적으로 구현한 강력한 앙상블 알고리즘이다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;XGBoost에서는 &lt;/span&gt;&lt;span&gt;learning_rate&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;n_estimators&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;max_depth&lt;/span&gt;&lt;span&gt; 등의 균형이 중요하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;결정 트리를 하나만 사용할 때보다 여러 트리를 결합한 Random Forest가 왜 안정적인 성능을 낼 수 있는지 이해할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 앙상블은 단순히 좋은 모델을 여러 개 사용하는 방법이 아니라 &lt;/span&gt;&lt;b&gt;&lt;span&gt;각 모델이 서로 다른 데이터나 오류를 학습하도록 만드는 과정이 핵심&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이라는 점이 기억에 남았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;날씨 데이터 실습에서는 모델을 만드는 것보다 결측치, 범주형 데이터와 이상치를 처리하는 과정이 더 길었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;실제 머신러닝에서는 알고리즘 선택뿐 아니라 학습할 데이터를 어떻게 준비하는지가 성능에 큰 영향을 준다&lt;/span&gt;&lt;/b&gt;&lt;span&gt;는 점을 다시 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest와 XGBoost 모두 결정 트리를 기반으로 하지만 Random Forest는 여러 트리를 독립적으로 학습하고 XGBoost는 이전 단계의 오류를 순차적으로 보완한다는 차이도 확실히 정리할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하이퍼파라미터는 아직 종류가 많아 어렵게 느껴지지만 값을 외우기보다 &lt;/span&gt;&lt;b&gt;&lt;span&gt;각 설정이 모델의 복잡도, 학습 속도와 과적합에 어떤 영향을 주는지 중심으로 복습해야겠다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Day 12에서는 &lt;/span&gt;&lt;b&gt;&lt;span&gt;앙상블 학습의 기본 구조를 이해하고 Random Forest와 XGBoost의 차이를 비교했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Random Forest 실습에서는 호주 날씨 데이터를 이용해 내일의 강수 여부를 예측하면서 결측치 처리, One-Hot Encoding, 이상치 제거와 모델 성능 비교 과정을 경험했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 Boosting과 GBM의 학습 방식을 살펴보고 XGBoost의 주요 하이퍼파라미터와 과적합 조절 방향까지 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘 수업을 통해 &lt;/span&gt;&lt;b&gt;&lt;span&gt;좋은 머신러닝 모델을 만들기 위해서는 알고리즘뿐 아니라 데이터 전처리, 모델의 학습 방식과 복잡도를 함께 고려해야 한다&lt;/span&gt;&lt;/b&gt;&lt;span&gt;는 점을 배울 수 있었다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>bagging</category>
      <category>boosting</category>
      <category>OneHotEncoding</category>
      <category>randomforest</category>
      <category>XGBoost</category>
      <category>경기AI멤버십</category>
      <category>머신러닝</category>
      <category>앙상블학습</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/12</guid>
      <comments>https://a-zer0.tistory.com/12#entry12comment</comments>
      <pubDate>Thu, 27 Aug 2026 10:43:59 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 11. 지도학습 분류모델과 성능평가</title>
      <link>https://a-zer0.tistory.com/11</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;긍정 확언&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;나에게는 모든 문제를 해결할 수 있는 지혜가 있다.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 11에서는 Day 10에서 배운 회귀모델에 이어 &lt;b&gt;지도학습의 두 번째 큰 영역인 분류(Classification)&lt;/b&gt;를 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 강의의 핵심은 단순히 분류 알고리즘을 사용하는 것에서 끝나는 것이 아니라 &lt;b&gt;분류모델이 어떤 방식으로 결과를 예측하는지 이해하고 그 결과를 어떤 기준으로 평가해야 하는지&lt;/b&gt;까지 살펴보는 것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 로지스틱 회귀와 결정 트리를 시작으로 분류모델의 성능평가 방법을 학습했고 이후 SVM, 나이브 베이즈, KNN 등 다양한 분류 알고리즘의 특징도 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 파트의 주요 목표로는 분류모델 생성, 모델 저장, Confusion Matrix 해석, 정확도&amp;middot;정밀도&amp;middot;재현율&amp;middot;F1-score 등을 이용한 평가가 제시됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 학습 흐름은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지도학습 분류 &amp;rarr; Logistic Regression &amp;rarr; Sigmoid &amp;rarr; Decision Tree &amp;rarr; 과적합과 하이퍼파라미터&lt;br /&gt;&amp;rarr; Confusion Matrix &amp;rarr; Accuracy &amp;middot; Precision &amp;middot; Recall &amp;middot; F1-score &amp;rarr; ROC &amp;middot; AUC &amp;rarr; SVM&lt;br /&gt;&amp;rarr; Naive Bayes &amp;rarr; KNN&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 회귀와 분류의 차이 다시 정리하기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 10에서는 연속적인 숫자값을 예측하는 회귀모델을 배웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 11의 분류에서는 &lt;b&gt;새로운 데이터가 어떤 클래스에 속하는지를 예측&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 다음과 같은 문제들이 분류에 해당한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;항공편 지연 / 정상&lt;/li&gt;
&lt;li&gt;합격 / 불합격&lt;/li&gt;
&lt;li&gt;정상 거래 / 이상 거래&lt;/li&gt;
&lt;li&gt;정상 제품 / 불량품&lt;/li&gt;
&lt;li&gt;스팸 메일 / 정상 메일&lt;/li&gt;
&lt;li&gt;붓꽃의 품종 분류&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉,&amp;nbsp;&lt;b&gt;Regression &amp;rarr; 연속적인 숫자 예측,&amp;nbsp;&lt;/b&gt;&lt;b&gt;Classification &amp;rarr; 정해진 클래스 또는 범주 예측&lt;/b&gt;으로 구분할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 과거 기상정보를 이용해 항공 지연 여부를 예측하는 사례를 통해 &lt;b&gt;결과가 YES/NO처럼 두 개의 클래스로 나뉘는 이진 분류 문제&lt;/b&gt;를 설명했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. Logistic Regression&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ISlZ2/dJMcaiqXYsY/jZv4lNCUQZkXBixcvmmcMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ISlZ2/dJMcaiqXYsY/jZv4lNCUQZkXBixcvmmcMk/img.png&quot; data-alt=&quot;출처: https://towardsdatascience.com/logistic-regression-explained-9ee73cede081/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ISlZ2/dJMcaiqXYsY/jZv4lNCUQZkXBixcvmmcMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FISlZ2%2FdJMcaiqXYsY%2FjZv4lNCUQZkXBixcvmmcMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;725&quot; height=&quot;615&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;615&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://towardsdatascience.com/logistic-regression-explained-9ee73cede081/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째로 학습한 분류 알고리즘은 &lt;b&gt;Logistic Regression&lt;/b&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름에는 Regression이 들어가 있지만 실제로는 &lt;b&gt;분류 문제에 사용하는 알고리즘&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀는 입력 데이터 X를 이용해 특정 사건이 발생할 확률을 예측하고 그 확률을 기준으로 클래스를 결정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 선형회귀 결과를 확률로 변환해 이진 분류 문제를 해결하는 방법으로 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 학생의 공부 시간을 이용해 시험 합격 여부를 예측한다면 단순히 점수를 예측하는 것이 아니라&amp;nbsp;&lt;b&gt;이 학생이 합격할 확률이 얼마나 되는가?&lt;/b&gt;를 계산한 뒤 일정 기준을 이용해 합격과 불합격으로 분류한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. Sigmoid 함수와 분류 기준&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀에서 중요한 개념은 &lt;b&gt;Sigmoid 함수&lt;/b&gt;였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀의 출력값은 음수부터 양수까지 제한 없이 나올 수 있지만 확률은 0~1 사이의 값이어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sigmoid 함수는 선형식에서 나온 값을 &lt;b&gt;0과 1 사이의 확률값으로 변환하는 역할&lt;/b&gt;을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 예측 확률이 0.5 이상이면 1, 0.5 미만이면 0으로 분류하는 기본적인 형태를 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분을 통해 로지스틱 회귀의 핵심 흐름을 다음과 같이 이해했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력 데이터 &amp;rarr; 선형 관계 계산 &amp;rarr; Sigmoid를 이용해 확률로 변환 &amp;rarr; 임계값과 비교 &amp;rarr; 클래스 결정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 0과 1을 바로 예측하는 것이 아니라 &lt;b&gt;먼저 확률을 계산한 다음 기준에 따라 분류한다는 점&lt;/b&gt;이 중요했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. 로지스틱 회귀와 규제&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀에서는 &lt;b&gt;과적합을 방지하기 위한 규제(Regularization)&lt;/b&gt;도 함께 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 penalty와 C 같은 하이퍼파라미터가 소개됐다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L1 규제: 불필요한 특성을 0으로 만드는 효과&lt;/li&gt;
&lt;li&gt;L2 규제: 여러 특성의 영향을 전체적으로 줄이는 방식&lt;/li&gt;
&lt;li&gt;C: 규제 강도를 조정하는 값&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 &lt;b&gt;규제는 학습 데이터에만 지나치게 맞는 모델이 되는 것을 막기 위한 방법&lt;/b&gt;이라는 점을 기억해두려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로지스틱 회귀는 비교적 가볍고 빠르면서 이진 분류의 기본 모델로 많이 활용되고 텍스트 분류에서도 사용된다는 특징도 함께 배웠다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. Decision Tree&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;901&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hl3I3/dJMcac5ndxc/aycrTkErD1z2MN9zeGgMx0/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hl3I3/dJMcac5ndxc/aycrTkErD1z2MN9zeGgMx0/tfile.svg&quot; data-alt=&quot;출처: https://scikit-learn.org/stable/modules/tree.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hl3I3/dJMcac5ndxc/aycrTkErD1z2MN9zeGgMx0/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHl3I3%2FdJMcac5ndxc%2FaycrTkErD1z2MN9zeGgMx0%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1155&quot; height=&quot;901&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;901&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://scikit-learn.org/stable/modules/tree.html&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 학습한 알고리즘은 &lt;b&gt;Decision Tree&lt;/b&gt;였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결정 트리는 데이터에 존재하는 규칙을 학습해 &lt;b&gt;if-else 형태의 조건을 트리 구조로 만들어 분류하는 방법&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트리는 크게 다음과 같은 구조로 이루어진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Root Node&lt;/li&gt;
&lt;li&gt;Decision Node&lt;/li&gt;
&lt;li&gt;Leaf Node&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 Feature와 기준을 이용해 데이터를 나눠야 가장 효율적으로 클래스를 구분할 수 있는지를 반복해서 찾는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념적으로는 사람이 조건문을 만드는 것과 비슷해 보이지만 &lt;b&gt;어떤 조건으로 데이터를 나눌지를 모델이 학습을 통해 찾아낸다는 점&lt;/b&gt;이 다르다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. 붓꽃 데이터로 Decision Tree 이해하기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결정 트리에서는 대표적인 머신러닝 데이터셋인 &lt;b&gt;Iris 데이터&lt;/b&gt;를 활용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;붓꽃 데이터에서는 다음 네 가지 값을 Feature로 사용한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Sepal length&lt;/li&gt;
&lt;li&gt;Sepal width&lt;/li&gt;
&lt;li&gt;Petal length&lt;/li&gt;
&lt;li&gt;Petal width&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Target은 다음 세 품종이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Setosa&lt;/li&gt;
&lt;li&gt;Versicolor&lt;/li&gt;
&lt;li&gt;Virginica&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 이 데이터를 학습 데이터와 테스트 데이터로 나눈 뒤 Decision Tree를 학습하고 테스트 데이터의 품종을 예측한 다음 실제 품종과 비교해 정확도를 평가하는 전체 과정을 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 10에서 배운&amp;nbsp;&lt;b&gt;데이터 준비 &amp;rarr; Train/Test 분리 &amp;rarr; fit() &amp;rarr; predict() &amp;rarr; 평가&amp;nbsp;&lt;/b&gt;흐름이 분류 문제에서도 동일하게 반복된다는 점을 확인할 수 있었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. Decision Tree와 과적합&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결정 트리는 구조가 직관적이고 결과를 해석하기 쉽다는 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Feature Scaling이나 정규화 같은 전처리의 영향을 비교적 적게 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 트리를 계속 깊게 만들면 학습 데이터의 세세한 특징까지 모두 학습하게 되어 &lt;b&gt;과적합(Overfitting)이 발생하기 쉽다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 결정 트리의 대표적인 장단점을 다음과 같이 정리했다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;구조가 직관적&lt;/td&gt;
&lt;td&gt;과적합 가능성이 높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;결과 해석이 쉬움&lt;/td&gt;
&lt;td&gt;지나치게 복잡한 트리가 만들어질 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling 영향이 비교적 작음&lt;/td&gt;
&lt;td&gt;트리 크기를 조절하는 튜닝 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;복잡한 모델이 항상 좋은 모델은 아니며 새로운 데이터에서도 잘 동작할 수 있는 적절한 복잡도를 찾아야 한다는 점&lt;/b&gt;이 중요했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. Decision Tree의 하이퍼파라미터&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트리의 복잡도를 조절하기 위해 여러 하이퍼파라미터를 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 수업에서는 대표적으로 다음 항목을 살펴봤다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;max_depth&lt;/td&gt;
&lt;td&gt;트리의 최대 깊이 제한&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;max_features&lt;/td&gt;
&lt;td&gt;분할 시 고려할 Feature 수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;min_samples_split&lt;/td&gt;
&lt;td&gt;노드를 분할하기 위한 최소 데이터 수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;min_samples_leaf&lt;/td&gt;
&lt;td&gt;Leaf Node에 필요한 최소 데이터 수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;max_leaf_nodes&lt;/td&gt;
&lt;td&gt;Leaf Node의 최대 개수&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 max_depth를 제한하지 않으면 트리가 계속 복잡해질 수 있고 min_samples_split, min_samples_leaf 등을 이용하면 지나치게 작은 데이터 단위까지 분할하는 것을 방지할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하이퍼파라미터를 조절하는 것은 단순히 성능 점수를 높이는 것이 아니라 과적합과 일반화 사이의 균형을 찾는 과정&lt;/b&gt;이라고 이해했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. Feature Importance&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결정 트리에서는 모델이 분류 과정에서 &lt;b&gt;어떤 Feature를 중요하게 사용했는지 확인할 수 있는 Feature Importance&lt;/b&gt;도 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scikit-learn의 Decision Tree 모델에서는 feature_importances_를 이용해 각 Feature가 예측에 얼마나 기여했는지 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의의 Iris 데이터 예제에서는 꽃잎 길이와 꽃잎 너비가 상대적으로 중요한 Feature로 나타나는 시각화도 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 10에서 Feature Engineering을 배울 때 어떤 Feature가 중요한지를 판단하는 과정이 필요했는데 이번에는 &lt;b&gt;학습된 모델 자체에서도 Feature Importance 정보를 얻을 수 있다는 점&lt;/b&gt;이 흥미로웠다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. Overfitting과 Underfitting&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kPHXj/dJMcaiLeLCj/tPiK9tVMyheLQQYLF13BWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kPHXj/dJMcaiLeLCj/tPiK9tVMyheLQQYLF13BWk/img.png&quot; data-alt=&quot;출처: https://hwi-doc.tistory.com/entry/%EC%96%B8%EB%8D%94-%EC%83%98%ED%94%8C%EB%A7%81Undersampling%EA%B3%BC-%EC%98%A4%EB%B2%84-%EC%83%98%ED%94%8C%EB%A7%81Oversampling&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kPHXj/dJMcaiLeLCj/tPiK9tVMyheLQQYLF13BWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkPHXj%2FdJMcaiLeLCj%2FtPiK9tVMyheLQQYLF13BWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;929&quot; height=&quot;283&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://hwi-doc.tistory.com/entry/%EC%96%B8%EB%8D%94-%EC%83%98%ED%94%8C%EB%A7%81Undersampling%EA%B3%BC-%EC%98%A4%EB%B2%84-%EC%83%98%ED%94%8C%EB%A7%81Oversampling&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류모델을 평가하면서 &lt;b&gt;Overfitting과 Underfitting&lt;/b&gt;을 다시 자세히 살펴봤다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Overfitting&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 데이터에는 매우 잘 맞지만 새로운 테스트 데이터에서는 성능이 떨어지는 현상이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 학습 데이터의 패턴뿐 아니라 불필요한 세부 특징까지 과도하게 학습한 상태라고 볼 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Underfitting&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 너무 단순하거나 표현력이 부족해 &lt;b&gt;학습 데이터조차 제대로 설명하지 못하는 상태&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 학습을 계속할수록 Training Error는 감소하지만 어느 시점부터 Validation Error가 증가할 수 있으며 이를 통해 과적합 상태를 이해했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 과적합을 방지하기 위한 방법으로 Regularization과 Early Stopping 등의 개념도 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 중요한 것은&amp;nbsp;&lt;b&gt;너무 단순하지도 않고&amp;nbsp; &amp;rarr; 학습 데이터에 지나치게 맞지도 않는 &amp;rarr; 새로운 데이터에서도 잘 동작하는 모델&lt;/b&gt;을 만드는 것이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. 분류모델은 Accuracy 하나로 평가할 수 없다&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;551&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQyO5q/dJMcahS4bpw/xctvsB061BTyudsvCC8NyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQyO5q/dJMcahS4bpw/xctvsB061BTyudsvCC8NyK/img.png&quot; data-alt=&quot;출처: https://juni5184.tistory.com/57&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQyO5q/dJMcahS4bpw/xctvsB061BTyudsvCC8NyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQyO5q%2FdJMcahS4bpw%2FxctvsB061BTyudsvCC8NyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;551&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;551&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://juni5184.tistory.com/57&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류모델에서는 회귀와 다른 평가 지표를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서 학습한 대표적인 분류 평가 지표는 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Accuracy&lt;/li&gt;
&lt;li&gt;Precision&lt;/li&gt;
&lt;li&gt;Recall&lt;/li&gt;
&lt;li&gt;F1-score&lt;/li&gt;
&lt;li&gt;ROC / AUC&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 Accuracy가 높으면 좋은 모델이라고 생각하기 쉽지만 &lt;b&gt;데이터의 클래스 비율이 크게 불균형한 문제에서는 정확도만으로 모델의 성능을 판단하면 문제가 생길 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 어떤 데이터를 맞혔고 어떤 데이터를 틀렸는지를 더 자세히 확인하기 위해 &lt;b&gt;Confusion Matrix&lt;/b&gt;를 사용한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. Confusion Matrix&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Confusion Matrix는 모델의 분류 결과를 다음 네 가지 경우로 나눈다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TP&lt;/td&gt;
&lt;td&gt;실제 Positive를 Positive로 예측&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TN&lt;/td&gt;
&lt;td&gt;실제 Negative를 Negative로 예측&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FP&lt;/td&gt;
&lt;td&gt;실제 Negative를 Positive로 잘못 예측&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FN&lt;/td&gt;
&lt;td&gt;실제 Positive를 Negative로 잘못 예측&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 보험사기 탐지 사례를 통해 Confusion Matrix를 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 일반 고객을 일반 고객으로 맞힌 경우는 TN, 일반 고객을 사기자로 잘못 분류하면 FP, 실제 사기자를 놓치면 FN, 사기자를 정확히 찾아내면 TP가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 사례를 보면서 &lt;b&gt;같은 오답이라도 FP와 FN이 실제 서비스에서 가지는 의미와 비용이 완전히 다를 수 있다는 점&lt;/b&gt;이 중요하게 느껴졌다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. Precision과 Recall&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Confusion Matrix를 기반으로 Precision과 Recall을 이해했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Precision&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모델이 Positive라고 예측한 것 중 실제로 Positive인 비율&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보험사기 탐지라면 모델이 보험사기라고 판단한 사람 중 실제 사기자가 얼마나 되는지를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Precision을 높인다는 것은 &lt;b&gt;FP를 줄이는 것&lt;/b&gt;과 연결된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Recall&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실제 Positive 데이터 중 모델이 Positive라고 제대로 찾아낸 비율&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보험사기 사례에서는 실제 사기자 중 모델이 사기자로 탐지한 비율이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Recall을 높인다는 것은 &lt;b&gt;FN을 줄이는 것&lt;/b&gt;과 연결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Precision과 Recall 중 무엇이 더 중요한지는 문제에 따라 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 잘못된 경고가 큰 문제가 되는 서비스라면 Precision이 중요할 수 있고 실제 위험 대상을 놓치는 것이 더 큰 문제라면 Recall을 더 중요하게 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;평가지표를 선택할 때도 모델이 사용되는 실제 상황을 함께 생각해야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. F1-score&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F1-score는 &lt;b&gt;Precision과 Recall의 조화평균&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Precision만 지나치게 높거나 Recall만 지나치게 높은 경우보다 &lt;b&gt;두 지표가 모두 균형 있게 높은 모델에서 좋은 값&lt;/b&gt;을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 F1-score가 0~1 사이의 값을 가지며 특히 불균형한 분류 문제에서 평가척도로 많이 사용된다고 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Accuracy 하나만 보고 모델을 판단하는 것이 아니라 &lt;b&gt;문제에 따라 Precision, Recall, F1-score를 함께 확인해야 한다는 점&lt;/b&gt;을 배웠다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;16. ROC Curve와 AUC&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NZ4ZM/dJMcacEqaAJ/HEiWczxPJbXm1u7rjiGXWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NZ4ZM/dJMcacEqaAJ/HEiWczxPJbXm1u7rjiGXWk/img.png&quot; data-alt=&quot;출처: https://bioinfoblog.tistory.com/221&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NZ4ZM/dJMcacEqaAJ/HEiWczxPJbXm1u7rjiGXWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNZ4ZM%2FdJMcacEqaAJ%2FHEiWczxPJbXm1u7rjiGXWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;960&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://bioinfoblog.tistory.com/221&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROC Curve와 AUC도 분류모델의 성능을 확인하는 방법으로 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROC Curve는 &lt;b&gt;분류 임계값을 변화시키면서 FPR과 TPR의 관계를 나타내는 그래프&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AUC는 ROC Curve 아래의 면적으로 &lt;b&gt;1에 가까울수록 Positive와 Negative를 잘 구분하는 모델&lt;/b&gt;이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 AUC를 다음과 같이 해석했다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1.0 : 완벽한 모델&lt;/li&gt;
&lt;li&gt;0.9~1.0 : 매우 우수&lt;/li&gt;
&lt;li&gt;0.8~0.9 : 우수&lt;/li&gt;
&lt;li&gt;0.7~0.8 : 보통&lt;/li&gt;
&lt;li&gt;0.5 : 무작위 예측 수준&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류에서는 단순히 최종 예측값만 확인하는 것이 아니라 &lt;b&gt;임계값 변화에 따라 모델의 분류 성능이 어떻게 달라지는지도 평가할 수 있다는 점&lt;/b&gt;을 알게 됐다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;17. SVM&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oSCJU/dJMcabZNLnu/jB5tFkQPJyz6rClnpqU1d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oSCJU/dJMcabZNLnu/jB5tFkQPJyz6rClnpqU1d1/img.png&quot; data-alt=&quot;출처: https://velog.io/@bo-lim/SVM-%EB%B3%B5%EC%9E%A1%ED%95%9C-%EC%88%98%EC%8B%9D-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oSCJU/dJMcabZNLnu/jB5tFkQPJyz6rClnpqU1d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoSCJU%2FdJMcabZNLnu%2FjB5tFkQPJyz6rClnpqU1d1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;960&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://velog.io/@bo-lim/SVM-%EB%B3%B5%EC%9E%A1%ED%95%9C-%EC%88%98%EC%8B%9D-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후반부에는 대표적인 다른 분류 알고리즘도 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 &lt;b&gt;SVM(Support Vector Machine)&lt;/b&gt;은 서로 다른 클래스 사이에서 &lt;b&gt;가장 좋은 결정 경계를 찾는 알고리즘&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 두 클래스 사이에 선을 하나 긋는 것이 아니라 &lt;b&gt;각 클래스의 데이터와 최대한 멀리 떨어진 결정 경계&lt;/b&gt;, 즉 Margin이 가장 큰 경계를 찾는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결정 경계와 가장 가까운 데이터가 Support Vector가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 이상치를 얼마나 허용할 것인지에 따라 Hard Margin과 Soft Margin으로 구분할 수 있다는 것도 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVM은 선형 분류뿐 아니라 비선형 분류에도 사용할 수 있고 고차원 데이터에서도 활용할 수 있다는 특징이 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;18. Naive Bayes&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kyViN/dJMcadC4vIh/hxjr9gczpIymi7ly5z2YTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kyViN/dJMcadC4vIh/hxjr9gczpIymi7ly5z2YTK/img.png&quot; data-alt=&quot;출처: https://angeloyeo.github.io/2020/01/09/Bayes_rule.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kyViN/dJMcadC4vIh/hxjr9gczpIymi7ly5z2YTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkyViN%2FdJMcadC4vIh%2Fhxjr9gczpIymi7ly5z2YTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1030&quot; height=&quot;491&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://angeloyeo.github.io/2020/01/09/Bayes_rule.html&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 &lt;b&gt;Naive Bayes&lt;/b&gt; 분류였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Naive Bayes는 베이즈 정리를 기반으로 하며 &lt;b&gt;각 Feature가 서로 독립적이라는 가정 아래 확률을 계산해 클래스를 예측하는 방법&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 스팸 메일 분류 사례를 통해 이해했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 메일에 들어 있는 단어들을 확인하고 &lt;b&gt;스팸일 확률과 정상 메일일 확률을 비교해 더 높은 쪽으로 분류&lt;/b&gt;하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징의 형태에 따라 다음과 같은 학습기도 사용할 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GaussianNB : 연속형 데이터&lt;/li&gt;
&lt;li&gt;MultinomialNB : 단어 등장 횟수와 같은 카운트 데이터&lt;/li&gt;
&lt;li&gt;BernoulliNB : 단어 존재 여부와 같은 이진 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 스팸 메일이나 텍스트 분류처럼 &lt;b&gt;확률 기반 판단이 필요한 문제에서 활용할 수 있다는 점&lt;/b&gt;을 확인했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;19. KNN&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rNFJw/dJMcag7JWfg/PS5PtJHuWtUwb7Jwl2jIsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rNFJw/dJMcag7JWfg/PS5PtJHuWtUwb7Jwl2jIsk/img.png&quot; data-alt=&quot;출처: https://velog.io/@khsfun0312/KNN&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rNFJw/dJMcag7JWfg/PS5PtJHuWtUwb7Jwl2jIsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrNFJw%2FdJMcag7JWfg%2FPS5PtJHuWtUwb7Jwl2jIsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;405&quot; height=&quot;346&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://velog.io/@khsfun0312/KNN&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 &lt;b&gt;KNN(K-Nearest Neighbor)&lt;/b&gt;을 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KNN은 새로운 데이터가 들어왔을 때 &lt;b&gt;가장 가까이에 있는 k개의 기존 데이터를 확인하고 주변 데이터가 많이 속한 클래스로 분류하는 방법&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 주변 3개의 데이터 중 2개가 A 클래스라면 새로운 데이터도 A로 분류하는 식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KNN에서 중요한 것은 k값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;k값이 어떻게 설정되느냐에 따라 예측 결과가 달라질 수 있기 때문에 적절한 값을 선택해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 주로 홀수 값을 사용한다고 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KNN은 구조가 직관적이고 결과를 이해하기 쉽지만 &lt;b&gt;k값 설정에 따라 성능이 크게 달라진다는 특징&lt;/b&gt;이 있었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;20. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;분류는 새로운 데이터가 어떤 클래스에 속하는지를 예측하는 지도학습 문제다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Logistic Regression은 입력 데이터를 확률로 변환해 클래스를 예측한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sigmoid 함수는 값을 0~1 사이의 확률로 변환한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Decision Tree는 데이터에서 조건을 학습해 트리 형태의 분류 규칙을 만든다.&lt;/li&gt;
&lt;li&gt;트리가 지나치게 복잡해지면 과적합이 발생할 수 있기 때문에 하이퍼파라미터 조절이 필요하다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Feature Importance를 이용하면 모델이 어떤 Feature를 중요하게 사용했는지 확인할 수 있다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Overfitting은 학습 데이터에 지나치게 맞은 상태이고, Underfitting은 모델의 표현력이 부족한 상태다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분류모델은 Accuracy만으로 평가하면 부족할 수 있다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Confusion Matrix에서는 TP, TN, FP, FN을 이용해 모델의 예측 결과를 세부적으로 확인한다.&lt;/li&gt;
&lt;li&gt;Precision은 &lt;b&gt;Positive라고 예측한 데이터 중 실제 Positive의 비율&lt;/b&gt;이다.&lt;/li&gt;
&lt;li&gt;Recall은 &lt;b&gt;실제 Positive 중 모델이 찾아낸 비율&lt;/b&gt;이다.&lt;/li&gt;
&lt;li&gt;F1-score는 Precision과 Recall의 균형을 확인하는 지표다.&lt;/li&gt;
&lt;li&gt;ROC Curve와 AUC를 이용해 분류모델의 구분 성능을 평가할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SVM은 Margin을 최대화하는 결정 경계를 찾는다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Naive Bayes는 베이즈 정리를 이용한 확률 기반 분류 방법이다.&lt;/li&gt;
&lt;li&gt;KNN은 주변의 가장 가까운 데이터들을 기준으로 새로운 데이터를 분류한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;21. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 10에서 회귀를 배울 때는 실제값과 예측값 사이의 오차를 얼마나 줄이는지가 중요했다면 분류에서는 &lt;b&gt;무엇을 맞혔고 무엇을 잘못 분류했는지를 더 세밀하게 확인해야 한다는 점&lt;/b&gt;이 가장 크게 느껴졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 Confusion Matrix가 기억에 남았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 Accuracy가 높으면 모델 성능이 좋은 것이라고 단순하게 생각했는데 보험사기 사례를 보니 실제 사기자를 놓치는 것과 일반 고객을 사기자로 잘못 판단하는 것은 같은 오답이라도 의미가 완전히 달랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 Precision과 Recall 중 어느 쪽을 더 중요하게 볼 것인지도 &lt;b&gt;모델을 사용하는 목적과 실제 비용에 따라 달라진다는 점&lt;/b&gt;이 인상적이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Decision Tree는 조건문 형태로 결과를 확인할 수 있어서 지금까지 본 모델 중에서는 비교적 직관적으로 느껴졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 트리를 계속 세분화하면 학습 데이터에는 잘 맞아도 새로운 데이터에서는 성능이 떨어질 수 있다는 과적합 문제도 함께 이해할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVM, Naive Bayes, KNN까지 여러 알고리즘이 한꺼번에 나와 아직 각각을 자유롭게 선택할 정도로 익숙하지는 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 지금 단계에서는 &lt;b&gt;알고리즘 이름을 외우기보다 각 모델이 데이터를 어떤 기준으로 나누는지&lt;/b&gt;를 중심으로 정리해두는 것이 더 중요할 것 같다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;22. 다음 학습을 위한 TODO&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Regression과 Classification 차이 다시 정리하기&lt;/li&gt;
&lt;li&gt;Logistic Regression과 Sigmoid 관계 복습하기&lt;/li&gt;
&lt;li&gt;Decision Tree의 노드 구조 직접 설명해보기&lt;/li&gt;
&lt;li&gt;max_depth, min_samples_split, min_samples_leaf 역할 다시 확인하기&lt;/li&gt;
&lt;li&gt;Overfitting과 Underfitting 예시로 구분해보기&lt;/li&gt;
&lt;li&gt;Confusion Matrix에서 TP, TN, FP, FN 직접 구분해보기&lt;/li&gt;
&lt;li&gt;Precision과 Recall이 각각 중요한 사례 찾아보기&lt;/li&gt;
&lt;li&gt;F1-score와 Accuracy 차이 다시 정리하기&lt;/li&gt;
&lt;li&gt;ROC Curve와 AUC 해석 복습하기&lt;/li&gt;
&lt;li&gt;SVM, Naive Bayes, KNN의 분류 기준 비교해보기&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 11에서는 &lt;b&gt;지도학습의 분류모델과 모델의 성능을 평가하는 방법&lt;/b&gt;을 중심으로 공부했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Logistic Regression을 통해 확률을 이용한 분류를 살펴보고 Decision Tree에서는 데이터의 규칙을 트리 구조로 학습하는 방법과 과적합을 조절하기 위한 하이퍼파라미터를 배웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Confusion Matrix를 시작으로 Accuracy, Precision, Recall, F1-score, ROC/AUC까지 살펴보면서 &lt;b&gt;분류모델의 성능은 하나의 점수만으로 판단하기 어렵다는 점&lt;/b&gt;을 이해할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막에는 SVM, Naive Bayes, KNN까지 다양한 분류 알고리즘의 기본 원리를 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 학습을 통해 머신러닝에서는 단순히 모델을 학습시키고 정확도만 확인하는 것이 아니라 &lt;b&gt;문제의 목적에 맞는 모델과 평가 기준을 선택하는 것이 중요하다&lt;/b&gt;는 점을 알게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 실제 분류 데이터를 더 많이 다뤄보면서 각 알고리즘의 차이와 평가 지표를 직접 비교해봐야겠다.&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>ConfusionMatrix</category>
      <category>DecisionTree</category>
      <category>KNN</category>
      <category>Regression</category>
      <category>SVM</category>
      <category>경기AI멤버십</category>
      <category>머신러닝</category>
      <category>지도학습</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/11</guid>
      <comments>https://a-zer0.tistory.com/11#entry11comment</comments>
      <pubDate>Thu, 27 Aug 2026 09:58:47 +0900</pubDate>
    </item>
    <item>
      <title>[경기AI멤버십] Day 10. 머신러닝 기초와 지도학습 회귀모델</title>
      <link>https://a-zer0.tistory.com/10</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;1. 오늘 배운 내용&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 10부터는 지금까지 배운 Python, 통계, NumPy, Pandas, 데이터 시각화를 바탕으로 &lt;b&gt;본격적인 머신러닝 학습&lt;/b&gt;에 들어갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 머신러닝의 전체적인 개념과 학습 방법을 살펴보고 Feature, Target, 학습 데이터와 테스트 데이터처럼 앞으로 계속 사용하게 될 기본 용어를 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 Scikit-learn을 이용해 머신러닝 모델을 만드는 전체 흐름을 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 지도학습을 회귀와 분류로 구분하고, 이후 앙상블과 모델 배포까지 이어지는 전체 머신러닝 학습 과정을 함께 소개했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음에는 지도학습의 첫 번째 주제로 &lt;b&gt;회귀(Regression)&lt;/b&gt;를 공부했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Linear Regression의 기본 원리부터 모델의 오차를 평가하는 MSE, RMSE, MAE, R&amp;sup2;를 학습했고, 모델의 성능을 높이기 위한 &lt;b&gt;Feature Engineering&lt;/b&gt;까지 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 학습 흐름은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;머신러닝 개요 &amp;rarr; 지도학습&amp;middot;비지도학습&amp;middot;강화학습 &amp;rarr; Classification과 Regression &amp;rarr; Feature와 Target &amp;rarr; Scikit-learn&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; Train/Test 데이터 &amp;rarr; 모델 학습과 예측 &amp;rarr; Linear Regression &amp;rarr; 회귀모델 성능 평가 &amp;rarr; Feature Engineering&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;2. 머신러닝은 데이터를 통해 규칙을 찾는 과정&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝은 개발자가 모든 규칙을 직접 코드로 작성하는 방식과 달리 &lt;b&gt;데이터에서 패턴을 학습하고 학습한 결과를 이용해 새로운 데이터의 결과를 예측하는 방식&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 머신러닝의 흐름을 다음과 같이 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;데이터 &amp;rarr; 머신러닝 모델 학습 &amp;rarr; 예측&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 이미 관측된 데이터를 이용해 데이터 안에 존재하는 패턴을 학습하고 그 패턴을 새로운 데이터에 적용하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 사람이 모든 조건을 직접 정의하기 어려운 문제에서 머신러닝이 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 사용자에게 어떤 광고를 보여줄지, 카드 사용 내역이 정상인지 이상 거래인지, 어떤 콘텐츠를 추천할지와 같은 문제는 조건문만으로 모든 상황을 정의하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;머신러닝은 사람이 일일이 규칙을 만드는 대신 데이터로부터 규칙을 찾아내는 방법&lt;/b&gt;이라고 이해했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;3. 지도학습, 비지도학습, 강화학습&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝의 학습 방법은 크게 지도학습, 비지도학습, 강화학습으로 나눠서 살펴봤다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;지도학습&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도학습은 &lt;b&gt;입력 데이터와 그에 대응하는 정답을 함께 제공해 학습하는 방식&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력은 Feature, 출력은 Target으로 표현하며, 모델은 두 데이터 사이의 관계를 학습한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도학습은 다시 결과값의 형태에 따라 크게 두 가지로 나눌 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Classification&lt;/td&gt;
&lt;td&gt;이산적인 값&lt;/td&gt;
&lt;td&gt;개/고양이 분류, 정상/이상 판단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression&lt;/td&gt;
&lt;td&gt;연속적인 숫자&lt;/td&gt;
&lt;td&gt;집값, 몸무게, 주가 등 예측&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 &lt;b&gt;분류는 정해진 범주를 예측하고, 회귀는 연속적인 숫자값을 예측하는 문제&lt;/b&gt;로 구분했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;비지도학습&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비지도학습은 정답 없이 입력 데이터만을 이용해 &lt;b&gt;데이터 내부에 숨어 있는 특징이나 구조를 찾는 방식&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적으로 PCA를 이용한 차원 축소와 K-means, DBSCAN 등을 이용한 클러스터링이 소개됐다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;강화학습&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강화학습은 Agent가 주어진 환경에서 Action을 선택하고 Reward를 받으면서 &lt;b&gt;더 큰 보상을 얻는 방향으로 전략을 학습하는 방법&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 방법이 모두 머신러닝에 포함되지만 이번 수업에서는 앞으로 가장 먼저 사용하게 될 &lt;b&gt;지도학습과 회귀모델&lt;/b&gt;을 중심으로 학습했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;4. Feature와 Target&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝을 시작하면서 가장 먼저 익혀야 했던 용어가 &lt;b&gt;Feature와 Target&lt;/b&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X는 모델에 입력되는 Feature를 의미하고, y는 모델이 맞혀야 하는 Target을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 사람의 키를 이용해 몸무게를 예측한다면&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;X = 키
y = 몸무게
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같이 생각할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 X를 특징행렬, 설명변수, 독립변수라고도 표현하고, y를 label, target, 정답, 종속변수 등으로 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 통계 시간에 사용했던 독립변수와 종속변수가 머신러닝에서는 Feature와 Target이라는 이름으로 다시 등장한 점도 연결해서 이해할 수 있었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;5. 학습 데이터와 테스트 데이터&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 하나의 데이터셋을 그대로 학습에 모두 사용하는 것이 아니라 &lt;b&gt;학습용 데이터와 테스트용 데이터를 구분한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 데이터는 모델이 데이터의 패턴을 배우기 위해 사용하고 테스트 데이터는 학습에 사용하지 않은 데이터를 이용해 &lt;b&gt;모델이 새로운 데이터에서도 제대로 예측할 수 있는지 확인하기 위해 사용한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 다음과 같이 정리했다.&lt;/p&gt;
&lt;pre class=&quot;autohotkey&quot;&gt;&lt;code&gt;X_train, y_train
&amp;rarr; 모델 학습

X_test
&amp;rarr; 모델 예측

y_test
&amp;rarr; 실제 정답과 예측 결과 비교
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 데이터가 많으면 모두 학습시키는 것이 더 좋지 않을까 생각할 수 있지만 그렇게 하면 모델이 정말 새로운 데이터에서도 잘 동작하는지를 확인하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;머신러닝에서 중요한 것은 학습 데이터 자체를 잘 맞히는 것이 아니라 처음 보는 데이터에도 적용할 수 있는 모델을 만드는 것&lt;/b&gt;이라고 이해했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;6. Scikit-learn으로 모델을 만드는 흐름&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 수업에서는 Python의 대표적인 머신러닝 라이브러리인 &lt;b&gt;Scikit-learn&lt;/b&gt;을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scikit-learn은 NumPy와 SciPy를 기반으로 만들어졌으며 정형 데이터를 이용한 머신러닝 모델을 구현할 때 널리 활용되는 라이브러리다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 머신러닝에서 반복해서 사용하게 될 기본 흐름도 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;데이터 준비 &amp;rarr; 학습/테스트 데이터 분할 &amp;rarr; Estimator 생성 &amp;rarr; fit()으로 학습 &amp;rarr; predict()로 예측 &amp;rarr; 모델 평가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서도 Scikit-learn 모델의 전체 workflow를 이 순서로 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 알고리즘의 사용법은 달라질 수 있지만 fit(), predict()와 같은 기본적인 API 구조가 비슷하게 유지된다는 점이 Scikit-learn의 장점으로 느껴졌다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;7. 지도학습의 첫 번째 모델, 회귀&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 개요 이후에는 지도학습의 첫 번째 주제로 &lt;b&gt;회귀(Regression)&lt;/b&gt;를 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀는 데이터 변수 사이의 관계를 모델링하고, 이를 이용해 &lt;b&gt;연속적인 값을 예측하는 방법&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 주가나 아파트 가격처럼 연속적으로 변화하는 숫자를 예측하는 사례를 회귀모델의 예로 다뤘다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀는 여러 기준으로 구분할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;단순 회귀와 다중 회귀&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독립변수의 개수에 따라 나눌 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단순 회귀: Feature 1개&lt;/li&gt;
&lt;li&gt;다중 회귀: Feature 2개 이상&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;선형과 비선형 회귀&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 사용하는 함수 관계에 따라 선형과 비선형으로 나눌 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서 특히 주의해서 봤던 점은 &lt;b&gt;선형/비선형 여부와 Feature의 개수는 서로 다른 기준이라는 것&lt;/b&gt;이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;8. Linear Regression과 가설함수&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 처음 학습한 회귀 알고리즘은 &lt;b&gt;Linear Regression&lt;/b&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형회귀는 입력과 출력 사이의 관계를 직선 형태의 함수로 표현한다.&lt;/p&gt;
&lt;pre class=&quot;armasm&quot;&gt;&lt;code&gt;ŷ = wx + b
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x : 입력 데이터&lt;/li&gt;
&lt;li&gt;ŷ : 모델의 예측값&lt;/li&gt;
&lt;li&gt;w : Weight, 회귀계수&lt;/li&gt;
&lt;li&gt;b : Bias 또는 Intercept&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 w와 b가 처음부터 정해져 있는 값이 아니라 &lt;b&gt;학습 데이터를 가장 잘 설명하도록 모델이 찾아야 하는 Parameter&lt;/b&gt;라고 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 Linear Regression의 학습 과정은 &lt;b&gt;실제 데이터와 예측값의 차이를 줄일 수 있는 적절한 w와 b를 찾는 과정&lt;/b&gt;이라고 이해할 수 있었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;9. 모델 학습에서 중요한 것은 오차 줄이기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 만든 예측값이 실제값과 완전히 같을 수는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 머신러닝에서는 &lt;b&gt;실제값과 예측값 사이의 오차를 측정하고 이 오차를 줄이는 방향으로 학습&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 회귀모델의 대표적인 오차 측정 방법으로 MSE를 먼저 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSE는 각 데이터의 실제값과 예측값의 차이를 제곱한 뒤 평균을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오차가 클수록 MSE 값도 커지고, 예측이 실제값과 가까워질수록 MSE는 작아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의 예제에서도 크게 잘못 예측한 경우 MSE가 70.75였고 실제값과 비슷하게 예측한 경우에는 1.5로 크게 줄어드는 것을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회귀모델에서는 오차가 작을수록 더 좋은 예측을 하고 있다고 볼 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 오차를 최소화하는 과정과 연결해서 경사하강법(Gradient Descent)의 개념도 살펴봤다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;10. 회귀모델 평가 지표&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀모델의 성능을 평가할 때는 하나의 숫자만 보는 것이 아니라 여러 지표를 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 수업에서는 &lt;b&gt;MSE, RMSE, MAE, R&amp;sup2;&lt;/b&gt;를 학습했다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MSE&lt;/td&gt;
&lt;td&gt;오차를 제곱한 값의 평균&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RMSE&lt;/td&gt;
&lt;td&gt;MSE에 제곱근을 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MAE&lt;/td&gt;
&lt;td&gt;오차 절대값의 평균&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R&amp;sup2;&lt;/td&gt;
&lt;td&gt;모델이 데이터의 변동을 얼마나 설명하는지&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;MSE&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오차를 제곱하기 때문에 &lt;b&gt;큰 오차에 더 큰 패널티가 적용되는 특징&lt;/b&gt;이 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;RMSE&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSE에 제곱근을 적용한 값이다. 강의에서는 MSE가 차이를 제곱해 오차가 증폭될 수 있기 때문에 RMSE도 많이 사용한다고 설명했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;MAE&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제값과 예측값 사이 차이의 절대값을 평균낸 값이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;R&amp;sup2;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R&amp;sup2;는 오차의 크기보다는 &lt;b&gt;모델이 실제 데이터의 변화를 얼마나 잘 설명하는지를 나타내는 지표&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1에 가까울수록 데이터를 잘 설명하고, 0이면 평균값을 예측하는 수준이며, 음수가 나오면 평균값만 사용하는 것보다도 좋지 않은 모델로 해석할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 여러 평가 지표를 보면서 &lt;b&gt;좋은 모델인지 판단하려면 모델이 무엇을 예측하는지와 평가 지표의 의미를 함께 이해해야 한다&lt;/b&gt;는 점을 알게 되었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;11. Feature Engineering&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀모델을 학습한 뒤에는 &lt;b&gt;Feature Engineering&lt;/b&gt;을 공부했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature Engineering은 단순히 모델 알고리즘을 바꾸는 것이 아니라 &lt;b&gt;현재 가지고 있는 Feature를 분석해 모델이 학습하기 더 좋은 형태로 만드는 과정&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 크게 세 가지를 다뤘다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Feature Selection&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Target과 관련성이 낮거나 불필요한 Feature를 제거해 모델의 성능을 높이는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 Feature를 제거할지 판단하는 과정에서 앞에서 배웠던 &lt;b&gt;상관분석을 활용할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Feature Scaling&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature마다 값의 범위가 크게 다르면 학습에 영향을 줄 수 있기 때문에 데이터의 스케일을 맞추는 과정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수업에서는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Standardization&lt;/li&gt;
&lt;li&gt;Min-Max Scaling&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 다시 살펴봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Standardization은 평균을 0, 표준편차를 1에 맞추고, Min-Max Scaling은 값을 0~1 범위로 조정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계와 데이터 분석 시간에 배웠던 Scaling이 이번에는 &lt;b&gt;머신러닝 모델을 더 안정적으로 학습시키기 위한 전처리 과정&lt;/b&gt;으로 다시 연결됐다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff1d8;&quot;&gt;Feature Generation&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 Feature들을 조합해 &lt;b&gt;새로운 Feature를 만들어내는 방법&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의에서는 Polynomial Features를 이용해 기존 변수의 제곱항이나 변수 간 곱셈항을 만들어 새로운 특징을 생성하는 방법을 살펴봤다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;12. 지금까지 배운 데이터 분석과 머신러닝의 연결&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 10에서 머신러닝을 시작하면서 이전에 공부했던 내용들이 다시 연결되기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;통계 &amp;rarr; 변수의 관계와 데이터 분포 이해&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NumPy &amp;middot; Pandas &amp;rarr; 머신러닝에 사용할 데이터 가공&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시각화 &amp;middot; EDA &amp;rarr; 데이터 패턴과 Feature 관계 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Scaling &amp;middot; 상관분석 &amp;rarr; Feature Engineering&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Scikit-learn &amp;rarr; 실제 머신러닝 모델 학습과 평가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 데이터 분석을 배울 때는 각각의 내용이 따로 떨어져 있는 것처럼 느껴졌는데 머신러닝에 들어오면서 &lt;b&gt;이전 과정이 결국 모델에 좋은 데이터를 넣고 결과를 올바르게 평가하기 위한 준비 과정이었다는 점&lt;/b&gt;이 조금씩 보이기 시작했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;13. 오늘의 핵심 정리&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;머신러닝은 데이터에서 패턴을 학습하고 새로운 데이터의 결과를 예측하는 방법이다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;머신러닝 학습 방법에는 지도학습, 비지도학습, 강화학습이 있다.&lt;/li&gt;
&lt;li&gt;지도학습에서 입력 데이터는 Feature, 정답은 Target으로 표현한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Classification은 범주를 예측하고 Regression은 연속적인 숫자를 예측한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;학습 데이터와 테스트 데이터를 분리해 모델의 예측 성능을 확인한다.&lt;/li&gt;
&lt;li&gt;Scikit-learn에서는 데이터 준비 &amp;rarr; 모델 생성 &amp;rarr; fit() &amp;rarr; predict() &amp;rarr; 평가의 흐름으로 모델을 만든다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Linear Regression은 입력과 출력 사이의 관계를 선형 함수로 학습하는 회귀모델이다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;회귀모델은 실제값과 예측값의 오차를 줄이는 방향으로 학습한다.&lt;/li&gt;
&lt;li&gt;MSE, RMSE, MAE는 예측 오차를 측정하고 R&amp;sup2;는 모델이 데이터의 변동을 얼마나 설명하는지 확인한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Feature Engineering은 모델을 바꾸기 전에 데이터의 Feature를 더 적합하게 만드는 과정이다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Feature Selection, Feature Scaling, Feature Generation을 통해 모델 성능을 개선할 수 있다.&lt;/li&gt;
&lt;li&gt;이전에 배웠던 상관분석과 Scaling이 머신러닝의 Feature Engineering 과정과 다시 연결됐다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;14. 오늘의 느낀 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 10부터 드디어 머신러닝을 본격적으로 배우기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그동안 Python, 통계, NumPy, Pandas, 시각화를 공부할 때는 각각의 내용이 왜 필요한지 완전히 와닿지 않는 부분도 있었는데 머신러닝 수업을 시작하니 &lt;b&gt;앞에서 배웠던 내용들이 하나씩 다시 등장하면서 연결되는 느낌&lt;/b&gt;이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 상관분석이나 Scaling이 단순히 통계와 데이터 전처리에서 끝나는 것이 아니라 Feature Selection이나 Feature Scaling으로 다시 활용되는 부분이 인상적이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Linear Regression 자체는 수식만 보면 조금 복잡해 보였지만 결국 &lt;b&gt;입력 데이터와 정답 사이의 관계를 가장 잘 표현하는 선을 찾고 실제값과 예측값의 오차를 줄이는 과정&lt;/b&gt;이라고 생각하니 조금 이해하기 쉬웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평가 지표도 처음에는 MSE, RMSE, MAE, R&amp;sup2;가 한꺼번에 등장해 헷갈렸지만 각각 무엇을 측정하는지를 구분해서 이해하는 것이 중요할 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 더 다양한 머신러닝 모델을 배우게 되더라도 단순히 모델 이름과 코드를 외우는 것보다 &lt;b&gt;어떤 데이터를 입력하고 무엇을 예측하며, 어떤 기준으로 모델을 평가하는지&lt;/b&gt;를 먼저 생각하는 습관을 들여야겠다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;15. 다음 학습을 위한 TODO&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지도학습, 비지도학습, 강화학습 차이 다시 정리하기&lt;/li&gt;
&lt;li&gt;Classification과 Regression 문제를 직접 구분해보기&lt;/li&gt;
&lt;li&gt;Feature와 Target 개념 익숙해지기&lt;/li&gt;
&lt;li&gt;학습 데이터와 테스트 데이터를 분리하는 이유 다시 정리하기&lt;/li&gt;
&lt;li&gt;Linear Regression의 w, b 의미 복습하기&lt;/li&gt;
&lt;li&gt;MSE, RMSE, MAE, R&amp;sup2; 차이 다시 정리하기&lt;/li&gt;
&lt;li&gt;Feature Selection과 상관분석의 연결 확인하기&lt;/li&gt;
&lt;li&gt;Standardization과 Min-Max Scaling 복습하기&lt;/li&gt;
&lt;li&gt;Polynomial Features가 새로운 Feature를 만드는 방식 다시 확인하기&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffe4f1;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day 10에서는 &lt;b&gt;머신러닝의 전체적인 개념을 이해하고 지도학습의 첫 번째 모델인 Linear Regression까지 학습했다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature와 Target, Train/Test 데이터, Scikit-learn의 학습 흐름을 정리하면서 머신러닝 모델이 어떤 방식으로 만들어지는지 살펴봤고 회귀모델에서는 실제값과 예측값의 오차를 줄이는 과정과 다양한 평가 지표를 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막에는 Feature Engineering을 통해 &lt;b&gt;좋은 모델을 만들기 위해서는 알고리즘만큼 입력 데이터의 Feature를 잘 구성하는 것도 중요하다&lt;/b&gt;는 점을 배웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 분류와 다른 머신러닝 모델을 학습하면서 오늘 배운 기본 흐름이 어떻게 반복되고 확장되는지 계속 확인해볼 예정이다.&lt;/p&gt;</description>
      <category>경기 AI 멤버십 채용연계형 교육</category>
      <category>AI개발</category>
      <category>AI교육</category>
      <category>LinearRegression</category>
      <category>machinelearning</category>
      <category>mse</category>
      <category>경기AI멤버십</category>
      <category>데이터분석</category>
      <category>머신러닝</category>
      <category>지도학습</category>
      <category>회귀분석</category>
      <author>a-zer0</author>
      <guid isPermaLink="true">https://a-zer0.tistory.com/10</guid>
      <comments>https://a-zer0.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 26 Aug 2026 23:57:21 +0900</pubDate>
    </item>
  </channel>
</rss>