<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jhdai_ly.log</title>
        <link>https://velog.io/</link>
        <description>사회 과학과 딥 러닝에 관심이 있는 학부생(CS&amp;E)입니다. 기술과 사회에 대한 이해를 바탕으로, 비즈니스 감각과 기술적 역량을 함께 갖춘 인공지능 프로그래머•데이터 과학자로 성장하고 싶습니다.</description>
        <lastBuildDate>Tue, 10 Feb 2026 03:45:30 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>jhdai_ly.log</title>
            <url>https://velog.velcdn.com/images/jhdai_ly/profile/97969a1a-bf9e-4acc-8f89-8eecf07a1725/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. jhdai_ly.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jhdai_ly" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2026 동계 모각코 - 6회차 (결과)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Tue, 10 Feb 2026 03:45:30 GMT</pubDate>
            <description><![CDATA[<p>부제 : 2026 동계 모각코를 마무리하며</p>
<ol>
<li>ADsP 자격증 취득</li>
</ol>
<p>모각코 활동 지원비로 교재를 구매할 수 있다고 하여, 자격증 취득을 위한 이론서를 구매했고, 공부를 어느정도 마무리 하고 있다. 학습을 위한 지원금이 제공되어 좋았다고 생각한다.
시험은 지난주 토요일, 2/7일날 응시했다. 채점은 2월 말까지 마무리 된다고 하여, 조금 기다려 봐야겠다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/1c37793d-d4f4-424e-9929-b57e1ccae8ad/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/ccfb3953-79ec-4a06-b770-3af840efe78c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/1eeba8b0-edbc-4862-b46a-c6ce78e18e26/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/ea439259-1a06-4a57-a18b-fba6f60804a4/image.png" alt=""></p>
<ol start="2">
<li>그래프 기계학습 (스탠포드 강의 활용)
한달 정도 되는 시간 동안 그래프 기계학습 전반을 훑어보는 프로젝트가 알차게 마무리된 것 같아 기쁘다.
<img src="https://velog.velcdn.com/images/jhdai_ly/post/ed0c241c-0826-4c9f-9c63-c7605093ac40/image.png" alt=""></li>
</ol>
<p>세상이 너무 좋아져서 물어보고 싶은 것들을 바로바로 해결할 수 있어 좋았다. 앞으로는 학부연구생으로서 연구 아이디어를 실현시킬 수 있도록 공부해야할 것 같다. 우선 라인그래프 기반 그래프 신경망에 관심이 있어, 해당 논문을 읽어봤다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/0b3dc864-9b26-45ea-9f24-fcdd29471952/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/0b2ba55e-d93d-4750-9521-ed2c7b298e09/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 6회차 (계획)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Tue, 10 Feb 2026 03:08:11 GMT</pubDate>
            <description><![CDATA[<p>모각코의 마지막 회차 계획은 우선 아래 활동들에 대한 매듭을 짓겠다. 
또 6주동안의 모각코 활동을 되돌아 보며 그동안 내가 공부했던 것들에 대해 정리해볼 것이다.</p>
<ul>
<li><p>ADsP 자격증 취득 (2/7 시험을 응시했다)
<img src="https://velog.velcdn.com/images/jhdai_ly/post/cd3a1619-afb3-4dec-8e25-ab380fe4e2c3/image.png" alt=""></p>
</li>
<li><p>CS224 Machine Learning with Graph 강의 수강을 마무리 한다.
<img src="https://velog.velcdn.com/images/jhdai_ly/post/38a42fcb-53e4-4148-9d9b-21f2ec23b0a3/image.png" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[도서리뷰] 2026 이기적 SQLD 이론 + 기출문제 구매 후기]]></title>
            <link>https://velog.io/@jhdai_ly/%EB%8F%84%EC%84%9C%EB%A6%AC%EB%B7%B0-2026-%EC%9D%B4%EA%B8%B0%EC%A0%81-SQLD-%EC%9D%B4%EB%A1%A0-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-%EA%B5%AC%EB%A7%A4-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@jhdai_ly/%EB%8F%84%EC%84%9C%EB%A6%AC%EB%B7%B0-2026-%EC%9D%B4%EA%B8%B0%EC%A0%81-SQLD-%EC%9D%B4%EB%A1%A0-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-%EA%B5%AC%EB%A7%A4-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Wed, 04 Feb 2026 11:56:42 GMT</pubDate>
            <description><![CDATA[<p>최근 영진닷컴 이기적 교재로 ADsP를 공부하며, SQLD 자격증도 취득해볼까 생각을 했고 마찬가지로 영진닷컴 교재로 선택했다. 여러 이유가 있겠지만, ADsP 교재를 구매했던 기준과 같이 적절한 분량과 충분한 연습문제를 풀 수 있다는 점이 마음에 들었다.</p>
<p>학습하기에 너무 좋은 구성으로 되어있어 SQLD 자격증 취득을 고려하고 있는 분들께 적극 권해주고 싶은 마음으로 후기를 남긴다.</p>
<p>특히 SQLD 교재를 살펴보면서 가장 인상 깊었던 점은 비전공자도 충분히 이해할 수 있도록 단계적으로 설명되어 있다는 점이었다. SQL이라는 과목 자체가 처음 접하면 낯설고, 문법 하나하나가 암기처럼 느껴질 수 있는데, 이기적 SQLD 교재는 단순히 문법 나열에 그치지 않고 “왜 이런 쿼리가 필요한지”, “실무에서는 어떤 식으로 활용되는지”를 함께 설명해 주어 학습 부담이 훨씬 덜했다. 만약 어렵게 느껴진다면 저자 직강 동영상 강의도 무료로 제공된다고 하니 참고해보면 도움이 될 듯 하다. </p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/2ebc2de4-bbb7-45b5-9fdf-adbb9ef9051a/image.png" alt=""></p>
<p>또 책을 살펴보면서 알게 된 점은 이기적 스터디 카페에서 도서 구매 인증을 하면 SQL 구문을 연습할 수 있는 실습 문제와 데이터를 제공해준다고 해서 참고하여 공부해보면 좋을 듯 싶다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/a620e9e9-de35-44a8-99d3-40d1fc2f6872/image.png" alt=""></p>
<p>ADsP를 공부할 때도 느꼈지만, 영진닷컴 이기적 시리즈의 가장 큰 장점은 과하지 않은 분량과 명확한 학습 포인트라고 생각한다. 자격증 서적이 분량이 다 천차만별인건 좀 이상한 일이지만, 너무 두껍고 방대한 교재는 처음엔 든든해 보여도, 진도가 나가지 않아 중도 포기하게 되는 경우가 많다. 반면 이기적 SQLD 교재는 시험에 꼭 필요한 내용 위주로 정리되어 있어 반복적으로 학습하기 좋은 구성이다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/f275d8d9-2e62-4abb-b569-65a7fc069d2d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/665bdd7d-c6c5-480a-98ad-e81826f75a98/image.png" alt=""></p>
<p>교재 구성 또한 학습 흐름에 최적화되어 있다. 이론 파트를 먼저 꼼꼼히 읽고 나면, 바로 해당 내용과 연계된 연습문제와 기출 유형 문제를 풀 수 있도록 구성되어 있어 자연스럽게 복습이 된다. 
<img src="https://velog.velcdn.com/images/jhdai_ly/post/fd507bed-7ed4-4740-b2ed-26e2da0b2581/image.png" alt=""></p>
<p>또 하나 마음에 들었던 부분은 실제 시험을 염두에 둔 문제 구성이다. SQLD 시험은 단순 암기보다는 개념 이해와 응용이 중요한 시험인데, 교재에 수록된 문제들이 최신 출제 경향을 잘 반영하고 있어 실전 감각을 키우는 데 도움이 된다. 특히 후반부에 있는 모의고사는 시간 제한을 두고 풀어보면 실제 시험장에서의 긴장감도 미리 경험할 수 있어 매우 유용했다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/bd436d2d-37df-4cf3-982b-2e0d7d429692/image.png" alt=""></p>
<p>개인적으로는 SQL이 데이터 분석, 개발, 기획 등 다양한 분야에서 활용도가 높다는 점에서 SQLD 자격증의 메리트도 크게 느끼고 있다. 단순히 자격증 취득을 넘어서, 실무에서 바로 활용할 수 있는 기본기를 다질 수 있다는 점이 이 교재를 선택하게 만든 또 하나의 이유다. 쿼리를 직접 작성해보며 데이터를 다루는 연습을 하다 보니, 데이터에 대한 이해도도 자연스럽게 높아지는 느낌을 받았다.</p>
<p>ADsP에 이어 SQLD까지 이기적 교재로 학습을 이어가면서 느낀 점은, ‘공부하는 사람의 입장을 정말 많이 고민한 교재’라는 것이다. 자격증 공부가 부담스럽고 막막하게 느껴지는 분들, 특히 혼자서 계획을 세워 공부해야 하는 독학러라면 이기적 SQLD 교재는 충분히 만족스러운 선택이 될 것 같다.</p>
<p>SQLD 자격증 취득을 고민 중이거나, 어떤 교재로 시작해야 할지 망설이고 있다면, 나처럼 적절한 분량과 풍부한 연습문제, 그리고 신뢰할 수 있는 구성을 갖춘 이기적 SQLD 교재로 시작해보는 것을 추천하며 후기를 마치고 싶다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 5회차 (결과)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Tue, 03 Feb 2026 06:04:57 GMT</pubDate>
            <description><![CDATA[<ol>
<li>GNN의 표현력을 수학적으로 증명해보며 WL-Test, GIN 신경망의 필요성에 대해 알아봤다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/e985fb0a-52a5-4576-9c06-a2546d7077f6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/d255f4f8-42d3-411a-80a7-a80d871d4046/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/afa9e400-3779-4cd6-96c3-a2b0437102d3/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 5회차 (계획)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Tue, 03 Feb 2026 02:53:42 GMT</pubDate>
            <description><![CDATA[<ol>
<li>Stanford CS224W 강의 수강
GNN의 표현력에 대해서 공부해볼 계획이다.</li>
</ol>
<ul>
<li>How Expressive are Graph Neural Networks 논문을 위주로 학습해보면 좋을 듯 하다.
<img src="https://velog.velcdn.com/images/jhdai_ly/post/468bb8af-ab35-46e4-81b8-c396f5eb785b/image.png" alt=""></li>
</ul>
<p>세부 학습 소주제는 다음과 같이 계획하였다.</p>
<ul>
<li>Local Neighborhood Structures</li>
<li>Rooted subtree</li>
<li>Injective Function</li>
<li>GIN</li>
<li>MLP</li>
<li>Universal Approximation Theorem</li>
<li>Multi-set Fuction</li>
</ul>
<ol start="2">
<li>Adsp 데이터 모델링 파트 학습
3과목에 해당하는 부분이다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[서평] 관성끊기 (빌 오한론)]]></title>
            <link>https://velog.io/@jhdai_ly/%EC%84%9C%ED%8F%89-%EA%B4%80%EC%84%B1%EB%81%8A%EA%B8%B0-%EB%B9%8C-%EC%98%A4%ED%95%9C%EB%A1%A0</link>
            <guid>https://velog.io/@jhdai_ly/%EC%84%9C%ED%8F%89-%EA%B4%80%EC%84%B1%EB%81%8A%EA%B8%B0-%EB%B9%8C-%EC%98%A4%ED%95%9C%EB%A1%A0</guid>
            <pubDate>Sat, 31 Jan 2026 08:48:28 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/1584c02c-e764-4d41-969c-e1b7b889e724/image.png" alt=""></p>
<p><strong>#서평단 
#관성끊기
#행동변화</strong></p>
<p>빌 오한론, 『관성 끊기 - <strong>반복된 문제를 부수는 최소한의 행동 설계법</strong>』</p>
<hr>
<p>우리는 살아가면서 수많은 문제를 마주친다. 물론 그리 중요하지 않거나 쉽게 해결되는 문제도 있지만, 일부 문제는 지속적으로 삶에 등장하여 우리를 괴롭게 만들기도 한다.</p>
<p>그런 문제는 보통, 우리의 행동 흐름이 이미 굳어져 있기 때문에 더욱 접근하기 어려운 것 같다. 예를 들면 내가 더 나은 선택 A와 더 나쁜 선택 B 중, 꾸준히 B를 선택해왔다면 이미 습관이 되어버린 그 선택을 바꾸는 것은 무척 어려울 것이다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/4ff300d2-8615-41eb-addb-7106aab7e970/image.png" alt=""></p>
<p>나는 &#39;관성 끊기&#39;라는 책 제목을 보고, 늘 하던 방식대로 살아가는 삶에 작은 변화를 만들어낼 수 있는 이야기가 담겨 있을 것 같아 이 책을 집어 들었다.</p>
<hr>
<p>대다수의 사람들과 같이, 우리는 문제가 반복될수록 “왜 이런 일이 생겼지?”라는 질문에 더 자주 던지는 것 같다. 문제의 원인을 해결하기 위해 더욱 정교하게 해석하려고 노력하는 것이다. 하지만 그렇게 쉽게 문제가 해결되지는 않음을 우리는 매번 느끼고 있다. 즉, &#39;문제가 반복&#39;되고 있는 것이다.</p>
<p>이 책은 총 3부에 걸쳐 반복된 문제를 극복하는 방법을 제시한다. 1부 &#39;문제 대응 방식 바꾸기&#39;에서는 패턴 깨기, 효과 있는 것 시도하기, 2부 &#39;문제를 바라보는 관점 바꾸기&#39;에서는 과거와 감정에서 벗어나기, 주의 전환하기, 문제 해결을 위해 미래 이용하기, 문제적 신념을 해결 지향적 생각으로 바꾸기, 3부 &#39;해결 지향적 접근법 구체적으로 이용하기&#39;에서는 해결 지향적 관계를 포함한 4가지의 방법이 그것이다.</p>
<p>우선 나에게 인상깊었던 부분 중 하나는 &#39;문제를 과도하게 분석하는 습관&#39;이 문제 해결에 악영향을 미칠 수 있다는 인사이트였다. 덧붙여 이러한 분석하는 습관을 &#39;해결 지향적 접근&#39;으로 전환하라는 메시지를 던진다.</p>
<blockquote>
<p> 소크라테스는 성찰하지 않는 삶은 살 가치가 없다고 말했다. 그러나 지나친 자기 성찰적 삶은 당신을 죽은 사람처럼 만든다. 《관성 끊기 中》</p>
</blockquote>
<blockquote>
<p> 해결 지향적 접근법은 다르다. 이것은 사람들이 다양한 문제를 가지고 있다는 점을 참작한다. (중략) 해결 지향적 접근법은 문제의 원인보다 그 사람이 지금 하고 있는 행동 중에서 변화의 도움이 될 만한 요소를 찾는 데 집중한다. 《관성 끊기 中》</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/6cc0f62f-484d-4e95-b486-5a2d61ec7ee9/image.png" alt=""></p>
<p>책에서 반복적으로 강조하는 해결 지향적인 행동에 대해, 저자는 몇가지 해결 열쇠를 제공한다. 그 중 두번째는 해결 패턴을 찾아서 활용하는 것이다. 문제를 없애려 애쓰기보다, 문제가 잠시나마 약해졌던 순간에 주목하라는 제안이다. 언제는 분명 같은 문제였는데 덜 힘들었고, 더 버틸 만했고, 어쩌면 생각보다 잘 넘어갔던 때가 있다. 저자는 바로 그때를 그냥 지나치지 말라고 말한다.</p>
<p>우리는 보통 문제가 가장 심각해졌을 때만 그것을 분석한다. 왜 이렇게까지 되었는지, 무엇이 잘못되었는지를 집요하게 되짚는다. 하지만 해결 지향적 관점은 질문의 방향을 바꾼다. “왜 망가졌는가”가 아니라 “언제는 괜찮았는가”를 묻는다. 그리고 그 차이를 만들어낸 행동, 선택, 태도를 찾아내어 다시 써먹는다. 해결은 완전히 새로운 해답에서 나오기보다, 이미 한 번 효과를 냈던 행동의 반복에서 비롯된다는 것이다.</p>
<p>이 접근이 흥미로운 이유는, 문제 해결의 실마리가 이미 내 안에 있다고 전제하기 때문인 것 같다. 해결되지 않았다는 사실이 곧 무능함은 아닐 것이고, 오히려 문제 속에서도 균열을 만들었던 작은 성공들이 있었을것이다. 저자는 그 패턴을 의식적으로 끌어올리는 것을 해결로 가는 현실적인 방법으로 제시한다.</p>
<p>나는 이 부분을 읽고 문제가 지속되고 있다고 느끼긴 하지만, &#39;항상&#39;인 것은 아니라는 생각을 해보게 됐다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/d5efd19f-d419-430b-80bb-aaca13bd8421/image.png" alt=""></p>
<p>독서를 마무리하며 해결지향적으로 살겠다는 결심을 해본다. 책에서 구체적으로 조언되는 문제에 다르게 대응하는, 해결 지향적인 삶은 꽤 즐거운 일이 될 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 4회차 (결과)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Fri, 30 Jan 2026 04:21:13 GMT</pubDate>
            <description><![CDATA[<ol>
<li>아래 주제들에 대한 학습을 진행하였습니다</li>
</ol>
<ul>
<li>GNN Augumentation and Training</li>
<li>Prediction with GNNs</li>
<li>Virtual nodes/edges</li>
<li>constant vs one-hot 방식 비교 (Augmentation)</li>
<li>Prediction Heads (Node/Edge/Graph-Level)</li>
<li>Hierarchical Global Pooling</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/d261e138-c6e2-496f-bb37-8c3610283163/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/c5a3096f-b911-495e-ba0a-c7987e8453a2/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/ddc18902-8715-47ea-bed0-648dd83f5585/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/8e7d9a69-d3d9-4b1c-8dbd-7355ff6e9727/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/a95b1537-73e9-43f2-8501-7075f4de3ddc/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/456c38a7-8842-4374-beb9-81ca77bdb30b/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/74e79f3d-99d2-4b77-8652-890cdb669a57/image.png" alt=""></p>
<ol start="2">
<li>ADSP 3과목 데이터 분석 파트 학습</li>
</ol>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/10631ad3-e0b2-445e-a3d3-25cbb597dcfa/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 4회차 (계획)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Fri, 30 Jan 2026 04:12:03 GMT</pubDate>
            <description><![CDATA[<ol>
<li>Stanford CS224W 강의 수강</li>
</ol>
<p>GNN을 위한 증강 기법, 학습 기법 등에 대해서 공부해볼 계획이다.</p>
<p>세부 학습 소주제는 다음과 같이 계획하였다.</p>
<ul>
<li>GNN Augumentation and Training</li>
<li>Prediction with GNNs</li>
<li>Virtual nodes/edges</li>
<li>constant vs one-hot 방식 비교 (Augmentation)</li>
<li>Prediction Heads (Node/Edge/Graph-Level)</li>
<li>Hierarchical Global Pooling</li>
</ul>
<ol start="2">
<li>Adsp 데이터 모델링 파트 학습</li>
</ol>
<p>3과목에 해당하는 부분이다.</p>
<ul>
<li><p>EDA 방법론</p>
</li>
<li><p>피어슨, 스피어만 상관 분석</p>
</li>
<li><p>다차원 척도법 (MDS)
<img src="https://velog.velcdn.com/images/jhdai_ly/post/f64c1a36-0282-4cde-83ce-1b407d9fd30d/image.png" alt="">
<img src="blob:https://velog.io/6d941ca3-83f7-4465-b372-691651a710d7" alt="업로드중.."></p>
</li>
<li><p>주성분 분석 (PCA)</p>
</li>
<li><p>스크리 플롯</p>
</li>
<li><p>바이플롯</p>
</li>
<li><p>시계열 분석</p>
</li>
<li><p>시계열 모형 (AR, MA, ARIMA, SARIMA) 등</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 3회차 (결과)
]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Tue, 13 Jan 2026 06:06:31 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/aed4ee36-663e-4c94-9bdb-1ef2e02039af/image.png" alt=""></p>
<ol>
<li>아래 주제들에 대한 학습을 진행하였습니다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/c971d554-9224-4b6a-b56d-1fc7de727014/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/00efd022-a962-455d-a055-d19c3d0bcbdb/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/2c34c801-20da-4e3d-9bf4-e84c49871138/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/d15812f2-bcbd-48e1-b52d-26b88f797bc4/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/26827783-5c42-4b28-aaaa-0299c33cb237/image.png" alt=""></p>
<ol start="2">
<li>ADSP 2과목 데이터 분석 기획 파트 학습
시험에 출제되는 아래 주제들에 대한 문제를 풀고 개념을 정리했습니다.</li>
</ol>
<ul>
<li>데이터 분석 기획의 이해</li>
<li>분석 기획</li>
<li>분석 방법론</li>
<li>분석 마스터 플랜</li>
<li>마스터 플랜 수립</li>
<li>분석 거버넌스 체계 수립</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/d76f9b54-4045-45b9-b02c-4592f50ba40f/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/8e039176-89f0-4fc2-946d-d71e683f1dd6/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 3회차 (계획)
]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Tue, 13 Jan 2026 02:55:10 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/b6124039-46ed-4f25-a849-90abab1558c9/image.png" alt="">
*<em>1. Stanford CS224W 강의 수강
*</em>
Graph Neural Networks 및 그래프 기반 표현 학습에 대한 심화 학습을 진행할 계획이다. 학습을 진행할 세부 topic은 아래와 같다.</p>
<ul>
<li><p>Graph Neural Networks 기본 개념 및 수식적 이해</p>
</li>
<li><p>Geometric Deep Learning과 Erlangen Programme 관점에서의 ML 해석</p>
</li>
<li><p>Graph Convolutional Networks (GCN) 구조 및 동작 원리</p>
</li>
<li><p>Semi-Supervised Node Classification 문제 설정</p>
</li>
<li><p>Message Passing Framework 기반 모델 이해</p>
</li>
<li><p>실제 그래프 데이터(소셜, 네트워크, Ads) 적용 사례 분석</p>
</li>
</ul>
<p>*<em>2. ADSP 2과목 데이터 분석 기획 파트 학습
*</em><img src="https://velog.velcdn.com/images/jhdai_ly/post/d1a74cfa-68a7-4e13-b553-830f00fec355/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 2회차 (결과)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Tue, 06 Jan 2026 07:06:48 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/05ce4924-782a-49da-b169-4f2db0eda80e/image.png" alt="">
26/1/6 13:00 ~ 16:00</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/4b875c63-64a8-418a-a36c-69e25700741b/image.png" alt=""></p>
<ol>
<li>위 주제들에 대한 학습을 진행하였습니다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/15d503e0-122f-4e21-8f65-ef70c046fd63/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/3d5a767b-c69c-4911-aaf7-d8b6399bbdc4/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/f6da4d15-a4c5-48f0-bcf7-9e64f658900b/image.png" alt=""></p>
<p>Random Walk 전략과 더불어, node2vec 까지 확장하여 인코더로서의 gnn 이전의 접근법에 대해 살펴보았습니다.</p>
<ol start="2">
<li>데이터 분석론 학습</li>
</ol>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/1a423372-273a-454e-a30d-75eb0c57ec40/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 2회차 (계획)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Tue, 06 Jan 2026 04:01:50 GMT</pubDate>
            <description><![CDATA[<ol>
<li>Stanford CS224W 강의 수강</li>
</ol>
<ul>
<li>GNN 모델링에 대한 학습을 진행할 계획이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/205df62a-3c03-4315-839a-4ce84a6aab2f/image.png" alt=""></p>
<p>학습을 진행할 세부 topic은 아래와 같다.</p>
<ul>
<li>random walk approaches for node embeddings</li>
<li>embedding entire graphs</li>
<li>Negative Sampling</li>
<li>Node2Vec</li>
<li>Deep Graph Encoders</li>
</ul>
<ol start="2">
<li>Adsp 데이터 모델링 부분 학습 부분 학습</li>
</ol>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/9339dc40-03ce-4c99-bd3b-9e8f9230ba3c/image.png" alt=""></p>
<ul>
<li>빅데이터 분석 방법론</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 1회차 (결과)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%ED%9A%8C%EC%B0%A8-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Tue, 30 Dec 2025 05:59:07 GMT</pubDate>
            <description><![CDATA[<p>25/12/30 12:00~15:00</p>
<p>그래프 기계학습 강의 (Stanford CS224)의 Introduction 부분, Node Embedding 부분에 대한 학습을 진행하였습니다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/70873d8e-2fc7-4618-b4c2-df4a2279eb96/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/de7b84f9-a14e-4571-a579-a1becc69f541/image.png" alt=""></p>
<p>데이터 분석과 관련하여, ADsP 교재를 통해 데이터 사이언스의 미래와 데이터 사이언티스트의 역할에 대한 학습을 진행하였습니다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/627dc778-4655-43e9-985b-5e31433eaaa0/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/f59de732-40a7-444b-9919-4d02cd0254b0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/93d3ab6d-c167-4b41-bbd9-001d4c948735/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/a04e05e0-0264-4a66-be4a-e9e0a22f59b4/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 1회차 (계획)]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%ED%9A%8C%EC%B0%A8-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Tue, 30 Dec 2025 03:05:22 GMT</pubDate>
            <description><![CDATA[<p><strong>1. Stanford CS224W 강의 수강</strong></p>
<ul>
<li><ol>
<li>Introduction</li>
</ol>
</li>
<li><ol start="2">
<li>Node Embeddings</li>
</ol>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/5637a50b-ba37-4728-b675-dae9b376ffca/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/3fdc6659-4f1e-4571-80a5-07d1138f3cf3/image.png" alt=""></p>
<p><strong>2. 데이터 분석 활용</strong>
<img src="https://velog.velcdn.com/images/jhdai_ly/post/360104cd-6124-4d38-97f1-75307ed3731b/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2026 동계 모각코 - 전체 목표]]></title>
            <link>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%EB%AA%A9%ED%91%9C</link>
            <guid>https://velog.io/@jhdai_ly/2026-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%EB%AA%A9%ED%91%9C</guid>
            <pubDate>Mon, 29 Dec 2025 06:10:32 GMT</pubDate>
            <description><![CDATA[<p>2025~2026 동계 모각코 목표는 다음과 같다.</p>
<h2 id="1-그래프-기계학습-학습">1. 그래프 기계학습 학습</h2>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/8e5044d1-babe-4681-8502-70154af77659/image.png" alt=""></p>
<p>Stanford CS224 강의를 수강하고, 그래프 신경망 및 관련 개념을 학습할 예정이다.
<img src="https://velog.velcdn.com/images/jhdai_ly/post/e2805ea1-214b-4e03-bd42-420177c3b438/image.png" alt=""></p>
<h2 id="2-pyg로-신경망-구현-실습">2. PyG로 신경망 구현 실습</h2>
<p>Pytorch, 특히 Pytorch Geometric을 활용한 그래프 기반 신경망 구축 실습을 진행할 계획이다.
<img src="https://velog.velcdn.com/images/jhdai_ly/post/ffe9d6a0-7ce9-4cb5-a531-7b22bbedbbc1/image.png" alt=""></p>
<h2 id="3-데이터-분석-활용">3. 데이터 분석 활용</h2>
<p>데이터분석준전문가 기출문제 활용
<img src="https://velog.velcdn.com/images/jhdai_ly/post/fd3f633a-acf1-4118-8edb-f5db0ef084e0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/682f3630-6fe3-4dfa-9cfb-d39e5268e493/image.png" alt="">
<img src="https://velog.velcdn.com/images/jhdai_ly/post/7567ecb4-81d9-46b6-baf9-284d552a08b8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[머신러닝(ML)]다중선형회귀(Multiple Linear Regression)-원 핫 인코딩, 다중 공선성, 회귀 모델 평가지수(MAE, MSE, RMSE, R square), 사이킷런(Sklearn) 실습]]></title>
            <link>https://velog.io/@jhdai_ly/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9DML%EB%8B%A4%EC%A4%91%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80Multiple-Linear-Regression-%EC%9B%90-%ED%95%AB-%EC%9D%B8%EC%BD%94%EB%94%A9-%EB%8B%A4%EC%A4%91-%EA%B3%B5%EC%84%A0%EC%84%B1-%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95-%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0Sklearn-%EC%8B%A4%EC%8A%B5</link>
            <guid>https://velog.io/@jhdai_ly/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9DML%EB%8B%A4%EC%A4%91%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80Multiple-Linear-Regression-%EC%9B%90-%ED%95%AB-%EC%9D%B8%EC%BD%94%EB%94%A9-%EB%8B%A4%EC%A4%91-%EA%B3%B5%EC%84%A0%EC%84%B1-%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95-%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0Sklearn-%EC%8B%A4%EC%8A%B5</guid>
            <pubDate>Thu, 20 Oct 2022 13:38:54 GMT</pubDate>
            <description><![CDATA[<h2 id="💡오늘-배울-내용">💡오늘 배울 내용</h2>
<hr>
<p>다중 선형 회귀 모델을 만들고 평가해봅시다. 범주형 데이터를 전처리 하고, 다중 공선성을 해소하기 위한 사이킷런(sklearn) 라이브러리의 클래스를 살펴봅시다. </p>
<h2 id="🔎다중-선형-회귀">🔎다중 선형 회귀</h2>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/3cb12cc5-abf3-4595-922d-0116d1292a09/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/e54de3df-4b7a-4367-9cda-5da367fc87c2/image.png" alt=""></p>
<p>이전에 공부했던 단순 선형 회귀는 모델의 결과값 예측을 위한 독립 변수가 1개인 경우입니다. 예를 들면 공부 시간을 통해 시험 점수를 예측하는 모델을 만들려면 공부 시간(X;독립 변수)과 시험 점수(y;결과 값) 간의 관계를 유추해야합니다.</p>
<p>다중 선형 회귀는 하나의 모델 안에 독립 변수가 여러개일 수 있습니다. 여러 독립변수를 함께 고려한 종속 변수를 예측하기 때문에 단순 선형회귀보다는 더 좋은 성능을 기대할 수 있습니다. 예를 들면 시험 점수를 예측하는 모델을 만들고자 할때, 결석 횟수와 공부 장소, IQ와 수업 집중도 등을 함께 고려하는 경우 종속 변수에 영향을 미치는 독립변수가 여러개 일 것입니다.</p>
<h3 id="🔔다중-공선성">🔔다중 공선성</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/a7a71e92-8774-4c2a-9997-64ae095691f0/image.png" alt="">
통계적으로 회귀 분석을 진행할때, 다중 공선성 문제를 고려할 필요가 있습니다. 다중 공선성 문제란 회귀분석에서 <strong>독립변수들 간에 강한 상관관계가 나타나는 문제</strong>를 말합니다. 상단의 우측 사진 처럼 x1와 x2간의 양의 상관관계가 존재하는 경우 다중 공선성이 있다고 할 수 있습니다.</p>
<p>독립 변수가 많이 투입되면, 결정 계수는 높아지는 경향성이 있지만 회귀 계수는 신뢰하지 못하게 될 수 있습니다. 공차 한계(Tolerance)와 VIF(Variance Inflation Factor)를 통해 검정 할 수 있으며 다중공선성이 높은 독립변수가 있다면 그 변수를 삭제하는 것을 고려해야 합니다.</p>
<p>구체적으로 이야기해보면, 선형 모델을 만든다는 것은 독립 변수와 결과값 간의 관계를 설명하는 선형 모델의 가중치(=회귀 계수)를 찾는 것입니다. 여기서의 회귀 계수가 의미하는 것은 독립 변수 x의 한 단위가 바뀔때 결과 값 y가 변하는 정도를 말하는데, 회귀 계수끼리 상관성이 높다면 결과값 y가 변화하는 것이 x1 혹은 x2의 독립적인 영향 만을 의미하는지 확신할 수 없게 됩니다.</p>
<h3 id="🔔범주형-데이터-전처리one-hot-encoding">🔔범주형 데이터 전처리(One-hot Encoding)</h3>
<hr>
<p>분석을 위해 사용하는 모델은 수치형 데이터만 다룰 수 있습니다. 즉, 문자열로 된 데이터를 전처리하는 과정이 필요한데요. 주요 기법인 라벨 인코딩(Label Encoding)과 원 핫 인코딩(One-hot Encoding)중 원 핫 인코딩 기법을 알아보겠습니다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/c06d61e1-2408-41e4-bfaf-72ff8771c22a/image.png" alt=""></p>
<p>원 핫 인코딩은 범주형 데이터의 각 카테코리를 0과 1로 된 벡터로 나타내는 방법입니다. 카테고리의 수 만큼 벡터가 생성되어 숫자의 크고 작은 특성(중요도)를 없앨 수 있습니다. 이 부분은 라벨 인코딩(Label Encoding)과 차이가 나는 부분입니다.</p>
<p>우리는 사이킷런의 하위 패키지 sklearn.processing의 OneHotEncoder을 통해 해당 실습을 진행할 것입니다.</p>
<h2 id="🔎모델-평가지수">🔎모델 평가지수</h2>
<hr>
<p>회귀 계수가 다 구해진 완성된 선형 모델을 평가하기 위해 몇가지 지표가 사용됩니다. 모델 성능 평가란 실제값과 모델에 의해 예측된 값을 비교하여 두 값의 차이를 구하는 것입니다. 현실적으로 예측값과 실제 값이 정확히 같을 수는 없기 때문에 오차를 구하고, 어느정도까지 오차를 허용할지 결정하는 과정을 거쳐야합니다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/92e04979-bd1f-4813-9fe7-2285b71dd894/image.png" alt=""></p>
<p>모델평가를 통해 과적합을 방지하고 최적의 모델을 찾고자 노력합니다. 과적합이란 훈련 데이터에 만 과하게 훈련된 경우로, Validation 데이터를 사용하여 평가했을때 성능이 확연하게 떨어진다면 과적합된 상태로 볼 수 있습니다. Output Label이 존재하는 지도학습에서만 사용할 수 있으며 모델링의 목적에 따라 서로 다른 평가지표가 이용됩니다.</p>
<h3 id="🔔mae">🔔MAE</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/debe612d-7f7a-4bc6-9303-10f6b57c1f16/image.png" alt="">
MAE(Mean Absolute Error : 평균 절대 오차)
: 실제 값과 예측값의 차이를 절댓값으로 변환해 평균낸 것.</p>
<h3 id="🔔mse">🔔MSE</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/72ebb4cd-200d-49ad-aa41-b7f611ecebdc/image.png" alt="">
MSE(Mean Squared Error : 평균 제곱 오차)
: 실제값과 예측값의 차이를 제곱해 평균낸 것.</p>
<h3 id="🔔rmse">🔔RMSE</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/5e7535a0-bfe2-4e9c-9db0-bbb05ca2ec53/image.png" alt="">
RMSE(Root Mean Squared Error : 평균 제곱근 오차)
: MSE가 제곱을 통해 구해지는 과정에서 값이 커지므로 이를 제곱근으로 보정한 것.</p>
<h3 id="🔔r-square">🔔R Square</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/485ca061-9309-408c-b600-09311370aa19/image.png" alt="">
R square
: 결정계수 (데이터의 분산을 기반으로 한 평가 지표)
: 1에 가까울수록 좋은 모델</p>
<h2 id="🔎실습sklearn">🔎실습(Sklearn)</h2>
<hr>
<p>사이킷런 라이브러리를 통해 공부 시간, 결석 횟수, 공부 장소를 독립 변수로 하고 시험 점수를 결과값으로 하는 모델을 훈련하고 평가해봅시다.</p>
<h3 id="🔔실습-자료">🔔실습 자료</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/0df3fc84-fd2f-499e-b88a-bf02e956964e/image.png" alt=""></p>
<p>공부 시간, 결석 횟수, 공부 장소와 점수가 담겨있는 CSV 파일을 판다스 라이브러리로 불러 사용합니다. 공부 장소(place)는 범주형 자료이므로 One-hot Encoding을 통해 전처리를 진행합니다.</p>
<h3 id="🔔모델-훈련-및-평가">🔔모델 훈련 및 평가</h3>
<hr>
<pre><code class="language-py">import pandas as pd
dataset = pd.read_csv(&#39;MultipleLinearRegressionData.csv&#39;)
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
&gt;&gt; X</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/f8f3b19e-f5e2-4aef-92da-62eb5f74257c/image.png" alt="">
실습 자료에서 확인했던 것 처럼, 판다스 <code>read_csv</code>를 통해 자료를 가져옵니다. X에는 독립변수들의 데이터를, y는 결과값을 넣어 줍니다.</p>
<pre><code class="language-py"># 다음은 사이킷런 라이브러리의 하위 패키지로 따로 임포트 해주어야 한다.
# from 패키지이름 import 명령어1, 명령어2, 명령어3

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

# 다중 공선성 고려 - drop=&#39;first&#39;
ct = ColumnTransformer(transformers=[(&#39;encoder&#39;, OneHotEncoder(drop=&#39;first&#39;), [2])], remainder=&#39;passthrough&#39;)
X = ct.fit_transform(X)
X

# 1 0 : Home
# 0 1 : Library
# 0 0 : Cafe</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/cef6fa3b-46e0-4ca7-b68f-32ae80083f9d/image.png" alt=""></p>
<p>사이킷런의 하위 패키지에 들어있는 <code>ColumnTransformer</code>과 <code>OneHotEncoder</code>를 사용하여 범주형 자료를 전처리(원-핫 인코딩) 해줍니다. OneHotEncoder의 drop 옵션을 사용해 다중 공선성을 고려해줍니다. Dummy Column이 n개면, n-1개만 사용함으로써 다중 공선성 문제를 해결하는 과정입니다. </p>
<pre><code class="language-py">from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)</code></pre>
<p>훈련 세트와 테스트 세트를 분리해주는 과정입니다. 사이킷런 sklearn.model_selection 패키지의 <code>train_test_split</code>을 이용합니다.</p>
<pre><code class="language-py">from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(X_train, y_train)
&gt;&gt; LinearRegression()</code></pre>
<p>사이킷런 <code>LinearRegression 클래스</code>, <code>LinearRegression()</code>, <code>fit()</code> 메서드를 통해 다중 선형 회귀 모델을 훈련합니다.</p>
<pre><code class="language-py">y_pred = reg.predict(X_test)
y_pred
&gt;&gt; array([ 92.15457859,  10.23753043, 108.36245302,  38.14675204])

y_test
&gt;&gt; array([ 90,   8, 100,  38], dtype=int64)</code></pre>
<p>만들어진 선형 모델(reg)에 테스트 세트를 넣어 예측 결과를 출력해봅니다. y_test(결과값)과 비교해보면 어느정도 비슷한 것을 확인할 수 있습니다.</p>
<pre><code class="language-py">reg.coef_ #독립 변수에 대한 회귀 계수(기울기) 정보
&gt;&gt; array([-5.82712824, -1.04450647, 10.40419528, -1.64200104])

reg.intercept_
&gt;&gt; 5.365006706544733</code></pre>
<p><code>coef_</code>와 <code>intercept_</code>를 통해 모델의 기울기와 절편을 확인할 수 있습니다.</p>
<pre><code class="language-py">reg.score(X_train, y_train)
&gt;&gt; 0.9623352565265528

reg.score(X_test, y_test)
&gt;&gt; 0.9859956178877445</code></pre>
<p>모델의 정확도를 확인하는 모델 평가입니다. 훈련 세트를 통해 확인한 정확도와 테스트 세트를 통해 확인한 정확도를 둘 다 확인할 수 있습니다.</p>
<pre><code class="language-py">from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test, y_pred) #실제값, 예측값 # MAE
&gt;&gt; 3.225328518828811

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test, y_pred) #실제값, 예측값 # MSE
&gt;&gt; 19.90022698151514

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test, y_pred, squared=False) #실제값, 예측값 # RMSE
&gt;&gt; 4.460967045553591

from sklearn.metrics import r2_score
r2_score(y_test, y_pred) # R2
&gt;&gt; 0.9859956178877445</code></pre>
<p>회귀 모델을 평가하는 지표입니다. MAE, MSE, RMSE, R2등 다양한 지표들을 사이킷런 라이브러리에서 제공하는 <code>sklearn.metrics</code> 패키지를 통해 확인해 볼 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[머신러닝(ML)]단순선형회귀(Simple Linear Regression)-최소 제곱법(OLS), 확률적 경사하강법(SGD), RSS, 사이킷런(Sklearn) 실습]]></title>
            <link>https://velog.io/@jhdai_ly/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9DML%EB%8B%A8%EC%88%9C%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%84%B8%ED%8A%B8-%EB%B6%84%EB%A6%AC-%EC%B5%9C%EC%86%8C-%EC%A0%9C%EA%B3%B1%EB%B2%95OLS-%ED%99%95%EB%A5%A0%EC%A0%81-%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95SGD-%EC%A0%81%EC%9A%A9-%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0Sklearn-%EC%8B%A4%EC%8A%B5</link>
            <guid>https://velog.io/@jhdai_ly/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9DML%EB%8B%A8%EC%88%9C%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%84%B8%ED%8A%B8-%EB%B6%84%EB%A6%AC-%EC%B5%9C%EC%86%8C-%EC%A0%9C%EA%B3%B1%EB%B2%95OLS-%ED%99%95%EB%A5%A0%EC%A0%81-%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95SGD-%EC%A0%81%EC%9A%A9-%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0Sklearn-%EC%8B%A4%EC%8A%B5</guid>
            <pubDate>Tue, 18 Oct 2022 16:29:45 GMT</pubDate>
            <description><![CDATA[<h2 id="💡오늘-배울-내용">💡오늘 배울 내용</h2>
<hr>
<p>_한가지 독립 변수와 그에 대응되는 종속 변수와의 관계_를 밝히는 <strong>단순 선형 회귀 알고리즘</strong>을 학습합니다. 사이킷런(Sklearn) 라이브러리를 사용하여 실습을 진행하고, <strong>최소 제곱법을 손실 함수로 차용하여 해결하는 방법</strong> 하나와 <strong>확률적 경사하강법(SGD)을 적용시켜 모델을 학습</strong>하는 방법 두가지를 살펴봅시다. 또한 <strong>경사하강법의 개념</strong>에 대해서도 공부해봅시다.
<code>단순 선형회귀</code> <code>사이킷런</code>
<code>최소제곱법(OLS)</code> <code>잔차 제곱의 합(RSS)</code>
<code>경사하강법</code>
<code>확률적 경사하강법(SGD)</code></p>
<h2 id="🔎단순-선형회귀">🔎단순 선형회귀</h2>
<hr>
<p>지난시간에 공부했던 회귀의 개념을 이어 설명하자면, 선형 회귀에는 몇가지 종류가 더 있습니다. </p>
<ul>
<li><strong>일반 선형회귀 : 예측값과 실제값의 차이(RSS)를 최소화</strong>, 규제 적용 없음</li>
<li>릿지(Ridge) 회귀 : 선형회귀에 L2* 규제를 추가
(상대적으로 큰 회귀 계수 값의 예측 영향도 감소를 위해 회귀 계수값을 더 작게 만듦)</li>
<li>라쏘(Lasso) 회귀 : 선형회귀에 L1* 규제를 추가
(예측 영향력이 작은 피처의 회귀 계수를 0으로 만들어 예측 시 피처가 선택되지 않게 함)</li>
<li>엘라스틱넷(ElasticNet) : L2, L1 규제를 함께 결합, 多Feature 데이터 세트 일때 적용
(L1 규제로 피처를 줄이고 L2규제로 계수 값의 크기를 조정)</li>
</ul>
<p>단순 선형회귀는 여기서 일반 선형회귀에 속하는 모델입니다. 독립변수(X)와 종속변수(y)가 하나씩 존재합니다. 예를 들면, 공부시간(X)과 점수(y)의 관계 등을 모델링 할때 사용할 수 있습니다.
<img src="https://velog.velcdn.com/images/jhdai_ly/post/5130645f-d83a-4641-a176-bff7a287cf87/image.png" alt=""></p>
<h2 id="🔎최소제곱법ols-모델">🔎최소제곱법(OLS) 모델</h2>
<hr>
<p>X와 y의 관계를 나타낸 좌표평면에 데이터가 흩뿌려져 있다고 해봅시다. 데이터들을 가장 잘 나타내는 직선 하나를 찾아내는 문제를 선형 회귀라고 할때, 데이터의 실제 값과 모델의 예측 값은 분명 차이가 있을 것입니다. 이러한 차이를 통해 모델의 오차를 구할 수 있고, 이 오차를 줄이는 방식으로 모델을 훈련할 수 있습니다.</p>
<h3 id="🔔최소제곱법">🔔최소제곱법</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/71f249f8-b8c7-4382-ba63-4e497d0d3e78/image.png" alt="">
RSS(Residual Sum of Squares)는 실제 값과 예측 값 사이의 제곱의 합을 의미합니다. 잔차 제곱의 합이 클수록 모델의 예측 값이 부정확하다는 의미이므로, 이 값(RSS)을 가장 적게 갖는 모델을 만드는 것이 중요합니다.</p>
<p>최소제곱법(OLS;Ordinary Least Squares)란 이런 잔차 제곱의 합을 최소로 하는 직선을 찾는 방법입니다. 최소제곱법은 노이즈가 적은 자료를 훈련시킬때 유리하지만, 반대로 말하면 노이즈(극단적인 값들)에 매우 취약하다는 특징이 있습니다.</p>
<h3 id="🔔실습코드-sklearn">🔔실습코드-Sklearn</h3>
<hr>
<p>사이킷런 라이브러리를 통해 최소제곱법으로 선형 회귀를 모델을 만들어봅시다. 공부 시간과 점수와의 관계를 나타낸 CSV 자료를 불러와 실습을 진행하고, 훈련 세트(80%)와 테스트 세트(20%)를 분리하는 과정을 거칩니다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/64c9c5d7-a67b-4b02-8785-fb5548381a8c/image.png" alt=""></p>
<pre><code class="language-py">import matplotlib.pyplot as plt #데이터 시각화
import pandas as pd #CSV 데이터 불러와 활용</code></pre>
<pre><code class="language-py">dataset = pd.read_csv(&#39;LinearRegressionData.csv&#39;)
dataset.head()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/5e35e133-4c64-443d-b3c3-a5ff4e33eea3/image.png" alt="">
CSV 파일의 데이터가 판다스 라이브러리를 통해 분석 환경으로 잘 불러졌음을 확인할 수 있습니다.</p>
<pre><code class="language-py">X = dataset.iloc[:, :-1].values #독립변수 
y = dataset.iloc[:, -1].values #종속변수</code></pre>
<p>독립변수(X)에는 데이터에서 공부 시간(hour)에 해당하는 부분을 넣어주고, 종속변수(y)에는 데이터에서 점수(score)에 해당하는 부분을 넣어줍니다.</p>
<pre><code class="language-py">from sklearn.model_selection import train_test_split #데이터 세트 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)</code></pre>
<p>모델에서 학습을 위한 데이터(훈련 데이터)와 모델이 잘 학습되었는지 확인하기 위한 데이터(테스트 데이터)를 구분합니다. 사이킷런 라이브러리의 <code>train_test_split()</code> 메서드를 이용합니다.</p>
<pre><code class="language-py">X_train, len(X_train)</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/1cb50efc-08b0-4bc8-a380-0e49d358e186/image.png" alt="">
테스트 데이터의 크기를 0.2로 정했으므로 16개의 훈련 데이터가 2차원 배열에 잘 저장되어있는 것을 확인할 수 있습니다.</p>
<pre><code class="language-py">X_test, len(X_test)</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/4a8bc0b7-1cca-4cad-9940-8bdea960452f/image.png" alt="">
테스트 데이터의 크기를 0.2로 정했음으로 전체 데이터 20개 중, 4개의 데이터가 2차원 배열로 잘 저장되어 있습니다.</p>
<pre><code class="language-py">from sklearn.linear_model import LinearRegression #선형 회귀 모델 생성(OLS)
reg = LinearRegression()</code></pre>
<p>사이킷런 라이브러리에서 <code>LinearRegression()</code>을 import해서 사용하면, OLS 방법을 통해 자동으로 모델을 만들어줍니다.</p>
<pre><code class="language-py">reg.fit(X_train, y_train) #훈련 세트로 학습
&gt;&gt; LinearRegression()</code></pre>
<p>훈련 세트를 사용하여 모델의 학습을 진행합니다. 종속 변수와 독립 변수를 <code>fit()</code> 메서드 안에 잘 담습니다. 다음의 과정을 통해 모델의 생성과 훈련이 끝났습니다.</p>
<pre><code class="language-py">reg.predict(X_train)</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/bf5efc7d-96c6-4b17-952b-5aa296c04e08/image.png" alt=""></p>
<p><code>reg.predict(X)</code>를 통해 X에 대한 예측값을 확인할 수 있습니다. X는 2차원 배열 형태로 입력되어야 합니다.</p>
<pre><code class="language-py">reg.coef_
&gt;&gt; array([10.49161294])

reg.intercept_
&gt;&gt; 0.6115562905169796</code></pre>
<p><code>reg.coef_</code>는 만들어진 선형 모델의 기울기를 의미합니다. <code>reg.intercept_</code>는 선형 모델의 y절편을 의미합니다.</p>
<pre><code class="language-py">plt.scatter(X_train, y_train, color=&#39;blue&#39;) #산점도 확인
plt.plot(X_train, reg.predict(X_train), color=&#39;green&#39;) #선그래프
plt.title(&#39;Score by hours(train data)&#39;) #제목
plt.xlabel(&#39;hours&#39;) #X축 이름
plt.ylabel(&#39;score&#39;) #y축 이름
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/660e4734-a8b0-4742-963f-1c9573d5c564/image.png" alt="">
맷플롯립 라이브러리를 통해 만들어진 모델(Linear Model)과 훈련 데이터를 확인해봅시다. 훈련 데이터를 기반으로 상단 그림과 같은 선이 만들어진 것입니다.</p>
<blockquote>
<p><code>plot</code> 메서드를 통해 선 그리기</p>
</blockquote>
<pre><code class="language-py"># plot() 함수에 두 개의 리스트를 입력하면 순서대로 x, y 값들로 인식
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [2, 3, 5, 10]) # (1, 2), (2, 3), ...
plt.show()</code></pre>
<p>마지막으로, 테스트 세트를 활용한 검증과 모델 평가를 해봅시다.</p>
<pre><code class="language-py">#테스트 세트는 학습할때 사용하지 않았음
plt.scatter(X_test, y_test, color=&#39;blue&#39;) #산점도

plt.plot(X_train, reg.predict(X_train), color=&#39;green&#39;) #선그래프
plt.title(&#39;Score by hours(train data)&#39;) #제목
plt.xlabel(&#39;hours&#39;) #X축 이름
plt.ylabel(&#39;score&#39;) #y축 이름
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/760d428b-dc50-4772-ba48-56b3e3a4cb98/image.png" alt="">
상단 그래프에서 녹색 선은 훈련 세트로 만든 선형 모델입니다. 훈련에 사용되지 않은 테스트 세트가 네개의 점으로 표시되어있습니다.</p>
<pre><code class="language-py">reg.score(X_test, y_test) #테스트 세트를 통한 모델 평가
&gt;&gt; 0.9727616474310156

reg.score(X_train, y_train) #훈련 세트를 통한 모델 평가
&gt;&gt; 0.9356663661221668</code></pre>
<p><code>score()</code> 메서드로 모델을 평가할 수 있습니다. 원래 훈련 세트를 통한 모델 평가 정확도가 더 높은 경향을 보이지만(해당 세트로 훈련시켰기 때문) 오늘 데이터가 워낙 작은 크기로 학습이 진행되어 상단 코드 결과와 같은 양상을 띄게 되었습니다.</p>
<h2 id="🔎확률적-경사하강법sgd-모델">🔎확률적 경사하강법(SGD) 모델</h2>
<hr>
<p>모델의 예측값과 정답값의 차이를 통해 선을 구할 수 있었습니다. 하지만 실제 선형회귀를 RSS 방법으로만 구하기란 어려운 일입니다. 모델의 독립 변수(파라미터)가 많을 수도 있고, 그렇게 되면 손실 함수를 RSS 처럼 간단하게 나타낼 수 없을 수도 있습니다. 또한 RSS 방법은 노이즈의 영향을 많이 받아 부정확할 수도 있습니다. 이런 상황에서 경사하강법을 도입할 수가 있겠습니다.</p>
<h3 id="🔔경사하강법">🔔경사하강법</h3>
<hr>
<p>독립 변수로 구성된 손실 함수에서 최솟값을 찾기 위해 사용하는 방법으로, 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것입니다.
<img src="https://velog.velcdn.com/images/jhdai_ly/post/7f9700a3-95f4-4a88-94c3-a5cb1bc8174b/image.png" alt="">
왼쪽의 그림이 선형 모델의 매개변수를 통해(기울기:m, y절편:b) 만든 손실 함수이고, 이 손실 함수에서 가장 낮은 지점을 찾을 수 있다면, 그 지점의 매개 변수들은 손실 함수의 값을 가장 낮추는 변수들일 것입니다. 즉, 그 지점에서의 m과 b값이 가장 정확한 선형 회귀 모델을 만드는데 사용될 수 있는 것입니다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/b1e2fb7c-d18d-4b39-a52c-d8c41f1c4035/image.png" alt="">
손실 함수를 2차 함수로 가정하고, 경사하강법을 설명해보겠습니다. 선형 모델의 파라미터가 하나만 있을 것이라고 가정하는 것입니다. 우리의 목표는 손실 함수의 값을 가장 적게 갖는 가중치(wi)의 값을 찾아내는 것입니다. </p>
<p>우선 w1에 대한 시작점을 선택합니다. 우리가 가정한 손실 함수는 매끈한 모양의 2차 함수라서 시작점이 그다지 중요하지 않습니다. 어디를 시작점으로 선택해도, 극소값으로 도착하기 때문입니다. 하지만 실제 손실 함수는 여러개의 파라미터가 변수로써 구성되고, 매우 복잡하므로, 시작점을 잘 정하는 것이 매우 중요할 수 있습니다. global minimum이 아니라 local minimum에 빠져버릴 수도 있기 때문입니다.</p>
<p>선택한 시작점에서 손실 곡선의 기울기(Gradient)를 계산합니다. 여기서 기울기를 계산하는 방식으로 편미분이 활용됩니다. 손실 곡선이 다양한 파라미터를 변수로 하여 구성되는 경우, cost function을 우리가 관심 있는 단일 가중치에 대해 편미분 하여 방향을 찾아낼 것이기 때문입니다. 편미분계수(기울기)가 다음 가중치 후보로의 방향을 결정하고, Learning Rate(학습률;step size)가 이동할 보폭을 결정합니다. 위의 방식을 반복하면 최소값에 점점 가까워집니다.</p>
<blockquote>
<p><strong>▣학습률</strong>(Learning Rate; StepSize)</p>
</blockquote>
<ul>
<li><strong>학습률이 너무 작을 경우</strong> : 알고리즘이 수렴하기 위해 반복해야 하는 값이 많으므로 학습시간이 오래걸림. 지역 최소값(local minimum)에 수렴할 수 있음.</li>
<li><strong>학습률이 너무 클 경우</strong> : 학습 시간은 적게 걸림. 스텝이 너무 커서 전역 최소값(global minimum)을 가로질러 반대편으로 건너뛰어 최소값에서 멀어질 수 있음.</li>
</ul>
<h3 id="🔔확률적-경사하강법">🔔확률적 경사하강법</h3>
<hr>
<p>경사하강법은 한 지점에서 계속적으로 계산을 진행하여 극값을 찾아내는 방식입니다. 조금 더 풀어서 말하자면, 모든 데이터를 한번에 이용하여 cost function을 모델링 하고, 이 함수로 계속해서 경사하강법을 진행하는 것입니다. 하지만 이러한 방식은 학습 데이터가 큰 경우 부담이 있을 수 있습니다. 전체 데이터를 모두 사용해서 기울기를 계산해야 하기 때문입니다. 즉, Gradient Descent의 등고선이 일정한 보폭과 방향을 갖는 것은, 한가지 함수를 올려놓고 같은 학습률로 진행하기 때문입니다.</p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/e70b88f6-5963-4052-80cf-ebd622e4b87f/image.png" alt=""></p>
<p>확률적 경사하강법은 매 step에서 딱 한개의 샘플을 무작위로 선택하고, 그 하나의 샘플에 대한 기울기를 계산합니다. 즉, 한가지 샘플로 cost function을 모델링하고, 이 샘플에 대한 경사하강법을 통해 한번의 움직임을 정합니다.
<img src="https://velog.velcdn.com/images/jhdai_ly/post/07b1a67a-d612-4ca3-bf44-7792a6abd371/image.png" alt=""></p>
<p>매 step마다 무작위로 선택하므로, 계속해서 새로운 cost function이 모델링되고, 매번 이동하는 보폭이 다릅니다. 즉, cost funciton이 local minimum에 이를 때까지 부드럽게 감소하지 않고 위아래로 요동치며 평균적으로 감소합니다.</p>
<p>에포크(epoch)는 확률적 경사 하강법에서 훈련세트를 한 번 모두 사용하는 과정을 말합니다. 에포크를 크게 하면 한번 훈련 세트를 사용하여 가중치를 찾아낸 후에도 가중치를 계속해서 탐색합니다. 
<img src="https://velog.velcdn.com/images/jhdai_ly/post/8ef03dde-f488-4104-98f5-dd029cf24123/image.png" alt=""></p>
<p>에포크가 진행될 수록 훈련 세트의 정확도는 꾸준히 증가하게 됩니다. 하지만 에포크 횟수가 지나치게 많으면 훈련된 모델은 훈련 세트에 너무 잘 맞아 테스트 세트에는 오히려 점수가 나쁜 과대적합 모델일 가능성이 높습니다. 또한 에포크 횟수가 적으면 훈련된 모델은 훈련 세트와 테스트 세트에 잘 맞지 않은 과소적합된 모델일 가능성이 높습니다. 각각 에포크 과대적합과 에포크 과소 적합이라고 합니다.</p>
<h3 id="🔔실습-코드-sklearn">🔔실습 코드-Sklearn</h3>
<hr>
<p>사이킷런 SGDRegressor() 메서드는 손실 함수로 MSE를 사용하여 경사하강법을 진행합니다.</p>
<pre><code class="language-py">from sklearn.linear_model import SGDRegressor
sr = SGDRegressor(max_iter=1000, eta0=1e-4, random_state=0, verbose=1)
sr.fit(X_train, y_train)</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/13bf0b74-9e8d-4327-8cb6-4075332f8036/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/b79d92af-7933-4b39-bc5d-66d2690346b9/image.png" alt="">
SGDRegressor() 메서드를 통해 확률적 경사 하강법으로 선형 회귀 모델을 훈련시킬 수 있습니다. <code>max_iter</code> 옵션은 에포크를, <code>eta0</code> 옵션은 학습률을 결정합니다.</p>
<pre><code class="language-py">plt.scatter(X_train, y_train, color=&#39;blue&#39;) #산점도
plt.plot(X_train, sr.predict(X_train), color=&#39;green&#39;) #선그래프
plt.title(&#39;Score by hours(train data, SGD)&#39;) #제목
plt.xlabel(&#39;hours&#39;) #X축 이름
plt.ylabel(&#39;score&#39;) #y축 이름
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/04bfee44-bc7d-41cf-8fb0-66cf4e08b46e/image.png" alt=""></p>
<pre><code class="language-py">sr.coef_, sr.intercept_
&gt;&gt; (array([10.19197471]), array([1.77603038]))

sr.score(X_test, y_test) #테스트 세트를 통한 모델 평가
&gt;&gt; 0.9748430825252619

sr.score(X_train, y_train) #훈련세트를 통한 모델 평가
&gt;&gt; 0.9347804758954794</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[머신러닝(ML)]머신러닝 개요-머신러닝 정의, 종류(지도, 비지도), ML Techniques, 회귀, 분류, 군집화, 연관 규칙]]></title>
            <link>https://velog.io/@jhdai_ly/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9DML%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B0%9C%EC%9A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%A0%95%EC%9D%98-%EC%A2%85%EB%A5%98%EC%A7%80%EB%8F%84-%EB%B9%84%EC%A7%80%EB%8F%84-ML-Techniques-%ED%9A%8C%EA%B7%80-%EB%B6%84%EB%A5%98-%EA%B5%B0%EC%A7%91%ED%99%94-%EC%97%B0%EA%B4%80-%EA%B7%9C%EC%B9%99</link>
            <guid>https://velog.io/@jhdai_ly/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9DML%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B0%9C%EC%9A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%A0%95%EC%9D%98-%EC%A2%85%EB%A5%98%EC%A7%80%EB%8F%84-%EB%B9%84%EC%A7%80%EB%8F%84-ML-Techniques-%ED%9A%8C%EA%B7%80-%EB%B6%84%EB%A5%98-%EA%B5%B0%EC%A7%91%ED%99%94-%EC%97%B0%EA%B4%80-%EA%B7%9C%EC%B9%99</guid>
            <pubDate>Tue, 18 Oct 2022 04:04:47 GMT</pubDate>
            <description><![CDATA[<h2 id="🔎머신러닝의-정의">🔎머신러닝의 정의</h2>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/b8df8da6-68e1-4734-b4d2-1c09d54f45be/image.png" alt=""></p>
<blockquote>
<p>A computer program is said to learn from <strong>experience E</strong> with respect to some class of <strong>tasks T</strong> and performance <strong>measure P</strong>, if its performance at tasks in <strong>T</strong>, as measured by <strong>P</strong>, improves with experience <strong>E.</strong> (Mitchell, 1997)</p>
</blockquote>
<p>Mitchell의 정의에 의하면 머신러닝은, _<strong>작업 T를 수행하기 위한 경험 E로부터 획득한 데이터를 기반으로 모델을 자동으로 구성하여 성능 P를 향상시킬 수 있는 컴퓨터 프로그램</strong>_이다.</p>
<p>핵심적으로 데이터를 재료로 하여 자동적으로 일정한 규칙을 생성하고, 이 규칙을 기반으로 일정한 문제를 해결하는 것에 초점을 둔 기술이다.</p>
<ul>
<li>Feature Extraction (사람 전문가가 결정)</li>
<li>학습 데이터 수집 ▶ Feature Vecor화</li>
<li>알고리즘 학습 = 모델 형성</li>
<li>Inference / Prediction (모델 적용)</li>
</ul>
<h2 id="🔎머신러닝의-종류">🔎머신러닝의 종류</h2>
<hr>
<p>머신러닝으로 해결 가능한 문제들은 다음과 같은 특징을 갖는다. 명시적 문제 해결 지식의 부재하거나, 프로그래밍이 어려운 문제, 지속적으로 변화하는 문제들이다. 또한 아래와 같은 3가지의 알고리즘으로 분류된다.</p>
<blockquote>
<ol>
<li>지도학습(Supervised Learning)</li>
<li>비지도 학습(Unsupervised Learning)</li>
<li>강화학습(Reinforcement learning)</li>
</ol>
</blockquote>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/f7b53f1c-2317-4dd6-989b-698d8d1bb419/image.png" alt=""></p>
<h2 id="🔎지도학습">🔎지도학습</h2>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/da4f60f1-ab2d-435c-9d15-0728c857470a/image.png" alt="">
모델을 학습하는 과정에서 데이터와 정답(label)을 함께 제공한다. 입력값에 대응되는 정답 데이터가 항상 존재한다. 크게 <strong>학습(Training) 단계와 적용(Inference/Prediction) 단계</strong>로 나뉠 수 있다. <strong>학습 단계에서는 주어진 데이터(Input Data)에서 특징(Feature)을 추출하고, 추출된 Feature Vector과 Label을 통해 자동으로 모델을 구성</strong>한다. <strong>적용 단계에서 이 모델(Predictive Model)을 기반으로 예측가능한 정답(Label)을 얻</strong>는다. 지도학습의 종류로는 분류(Classification), 회귀(Regression)이 있다.</p>
<h3 id="🔔분류classification">🔔분류(Classification)</h3>
<hr>
<p>주어진 데이터를 정해진 카테고리에 따라 분류해야 하는 문제를 말한다. 예측해야 하는 출력이 미리 정해져 있는 값(finite set of values)일때 사용한다. 둘 중 하나로 분류하는 이진분류와 여러값 중 하나로 분류하는 다중 분류로 나뉜다.</p>
<p>다음과 같은 실생활의 문제에 적용 가능하다.</p>
<blockquote>
<ul>
<li>스팸 메일 분류</li>
</ul>
</blockquote>
<ul>
<li>기사 분야 분류</li>
<li>이미지 분류</li>
<li>인종 분류</li>
<li>질병 종류 분류</li>
</ul>
<h3 id="🔔회귀regression">🔔회귀(Regression)</h3>
<hr>
<p>예측해야 하는 출력이 number(continuous value)인 문제들을 말한다. 데이터들의 특징(Feature)을 토대로 입력에 대한 출력값을 예측한다.</p>
<p>다음과 같은 실생활의 문제에 적용 가능하다.</p>
<blockquote>
<ul>
<li>주가 예측</li>
</ul>
</blockquote>
<ul>
<li>기대 수명 예측</li>
<li>예상 가격 예측</li>
</ul>
<h3 id="🔔지도학습-알고리즘">🔔지도학습 알고리즘</h3>
<hr>
<p>다음은 지도학습(분류와 회귀)에서 사용되는 알고리즘들이다. </p>
<ul>
<li>Naive Bayesian<ul>
<li>K-nearest neighbors</li>
<li>Linear Regression</li>
<li>Logistic Regression</li>
<li>Multinomial Logistic Regression</li>
<li>Suport Vector Machine</li>
<li>Decision Tree</li>
<li>Random Forest</li>
<li>MLP (⊂Neural Network)</li>
</ul>
</li>
</ul>
<h2 id="🔎비지도학습">🔎비지도학습</h2>
<hr>
<p>비지도 학습이란 정답 라벨이 없는 데이터를 기반으로 학습시키는 것이다. 해결해야 하는 문제의 종류도 정답(Label)이 존재하지 않는다. 비슷한 특징을 갖는 것 끼리 묶어 새로운 데이터에 대한 결과를 예측한다. 데이터의 패턴이나 형태를 찾는 것에 집중한다. 지도 학습의 전처리 방법으로 사용하기도 한다. </p>
<h3 id="🔔군집화clustering">🔔군집화(Clustering)</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/b823a917-c188-4a14-a127-ea60f8f88898/image.png" alt=""></p>
<p>주어진 데이터 집합을 유사한 데이터들끼리 묶어 내는 작업을 군집화(Clustering)라 하고 이렇게 나누어진 유사한 데이터의 그룹을 군집(Cluster)이라 한다.</p>
<p>원래 데이터가 어떻게 군집화되어 있었는지를 보여주는 정답(groundtruth)이 있다고 하더라도, 성능 기준을 만드는 것은 분류 문제보다 더 까다롭다. 애초에 정답 레이블이 존재하지 않기 때문이다. 다음은 실제 군집화의 성능을 파악하기 위해 사용되는 기준들이다.</p>
<ul>
<li>조정 랜드지수(Adjusted Rand Index)</li>
<li>조정 상호정보량 (Adjusted Mutual Information)</li>
<li>실루엣계수 (Silhouette Coefficient)</li>
</ul>
<h3 id="🔔연관규칙association">🔔연관규칙(Association)</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/b5108326-72f0-4ad2-a1e5-801c2421c396/image.png" alt=""></p>
<p>연관규칙(association rule) 학습은 대형 데이터베이스에서 변수 간의 흥미로운 관계를 발견하기 위한 규칙-기반 기계 학습 방법이다. 이것은 흥미로운 측도를 사용하여 데이터베이스에서 발견된 강력한 규칙을 식별하기 위한 것이다.</p>
<p>Agrawal 등(1993)은 강력한 규칙의 개념을 바탕으로 슈퍼마켓 POS(point-of-sale) 시스템에서 기록한 대규모 거래 데이터에서 제품 간의 규칙성을 발견하는 연관 규칙을 소개하였다. 예를 들어,슈퍼마켓의 판매 데이터에서 발견된 “{양파, 감자} ⇒ {버거}” 규칙은 고객이 양파와 감자를 함께 구매하면 햄버거 고기도 사기 쉽다는 것을 알 수 있다.</p>
<h3 id="🔔비지도학습-알고리즘">🔔비지도학습 알고리즘</h3>
<hr>
<p>다음은 비지도학습(군집화와 연관규칙)에서 사용되는 알고리즘들이다. </p>
<ul>
<li>K-means</li>
<li>Spectral Clustering</li>
<li>Hierarchical Cluster Analysis</li>
<li>Affinity Propagation Clustering</li>
<li>DBSCAN Clustering</li>
<li>Expectation Maximization</li>
<li>Dimensionality Reduction</li>
<li>Principal Component Analysis</li>
<li>Kernel PCA</li>
<li>Visualization</li>
<li>Locally-Linear Embedding</li>
<li>t-distributed Stochastic Neighbor Embedding</li>
<li>Apriori</li>
<li>Eclat</li>
<li>FP-Growth</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[판다스(Pandas)]그룹화-groupby(), get_group(), 그룹화 후 연산]]></title>
            <link>https://velog.io/@jhdai_ly/%ED%8C%90%EB%8B%A4%EC%8A%A4Pandas%EA%B7%B8%EB%A3%B9%ED%99%94-groupby-getgroup-%EA%B7%B8%EB%A3%B9%ED%99%94-%ED%9B%84-%EC%97%B0%EC%82%B0</link>
            <guid>https://velog.io/@jhdai_ly/%ED%8C%90%EB%8B%A4%EC%8A%A4Pandas%EA%B7%B8%EB%A3%B9%ED%99%94-groupby-getgroup-%EA%B7%B8%EB%A3%B9%ED%99%94-%ED%9B%84-%EC%97%B0%EC%82%B0</guid>
            <pubDate>Tue, 11 Oct 2022 13:32:41 GMT</pubDate>
            <description><![CDATA[<h2 id="💡오늘-배울-내용">💡오늘 배울 내용</h2>
<hr>
<p>동일한 값을 가진 것들끼리 뭉쳐서 계산을 쉽게 할 수 있습니다. 그룹화 문법을 공부해봅시다.</p>
<h2 id="🔎데이터-불러오기">🔎데이터 불러오기</h2>
<hr>
<pre><code class="language-py">import pandas as pd
import numpy as np
data = {
    &#39;이름&#39; : [&#39;유재석&#39;, &#39;박명수&#39;, &#39;정준하&#39;, &#39;노홍철&#39;, &#39;정형돈&#39;, &#39;하하&#39;],
    &#39;지역&#39; : [&#39;서울&#39;, &#39;부산&#39;, &#39;부산&#39;, &#39;서울&#39;, &#39;서울&#39;, &#39;서울&#39;],
    &#39;전공&#39; : [&#39;문과&#39;, &#39;이과&#39;, &#39;이과&#39;, &#39;이과&#39;, &#39;문과&#39;, &#39;문과&#39;], 
    &#39;나이&#39; : [19, 23, 20, 25, 18, 21],
    &#39;국어점수&#39; : [86, 90, 80, 65, 50, 60],
    &#39;수학점수&#39; : [86, 100, 66, 70, 40, 80],
    &#39;코딩&#39; : [&#39;Python&#39;, &#39;Java&#39;, np.nan, &#39;Javascript&#39;, &#39;PYTHON&#39;, np.nan]
}
df = pd.DataFrame(data, index=[&#39;1번&#39;, &#39;2번&#39;, &#39;3번&#39;, &#39;4번&#39;, &#39;5번&#39;, &#39;6번&#39;])
df.index.name = &#39;번호&#39;</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/21386592-35c6-4fba-a06f-68631be0dac2/image.png" alt=""></p>
<h2 id="🔎groupby">🔎groupby()</h2>
<hr>
<p>같은 값을 하나로 묶어 통계 또는 집계 결과를 얻기 위해 사용하는 것이 <code>groupby()</code>입니다. 기본적인 groupby() 문법을 알아봅시다.</p>
<h3 id="🔔mean">🔔mean()</h3>
<hr>
<p>&#39;지역&#39; 별로 값들의 평균을 구하고 싶을때 <code>groupby().mean()</code>을 이용합니다. 그룹 지정을 하면, 자동으로 그룹 라벨이 index가 됩니다. 인덱스를 없애라면 groupby()의 옵션으로 <code>as_index=False</code>를 설정할 수 있습니다.</p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;).mean()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/249ede15-c312-481f-9586-b42df4b42249/image.png" alt=""></p>
<pre><code class="language-py">df.groupby(&#39;전공&#39;)[&#39;국어점수&#39;].mean()
&gt;&gt; 전공
   문과    65.333333
   이과    78.333333
   Name: 국어점수, dtype: float64</code></pre>
<p>상단의 코드는 &#39;전공&#39;을 기준으로 묶은 뒤, &#39;국어점수&#39;의 평균을 확인하는 코드입니다. &#39;국어점수&#39; 외에도 여러개를 확인하고 싶다면, <code>[[&#39;국어점수&#39;, &#39;수학점수&#39;, &#39;나이&#39;]]</code> 처럼 팬시 인덱싱을 이용하면 됩니다.</p>
<p>그룹 지정은 여러개를 할 수도 있습니다. </p>
<pre><code class="language-py">df.groupby([&#39;지역&#39;, &#39;전공&#39;]).mean()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/cdf41466-adf0-4c8d-af87-4a5e57bcdf28/image.png" alt="">
상단의 코드는 &#39;지역&#39;과 &#39;전공&#39; 두가지를 그룹으로 지정하여 평균을 확인합니다.</p>
<h3 id="🔔meansort_values">🔔mean().sort_values()</h3>
<hr>
<p>그룹 지정 후, 정렬하여 출력 할 수 있습니다. 자료들의 평균을 지정한 기준에 맞게 순서대로 출력합니다.</p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;).mean().sort_values(&#39;국어점수&#39;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/bfc0b994-c297-4c12-a611-644f17fe3818/image.png" alt=""></p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;).mean().sort_values(&#39;국어점수&#39;, ascending=False)</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/302528d3-3424-4369-af16-ae4674dfe57e/image.png" alt=""></p>
<p>상단의 코드를 보면, &#39;지역&#39;으로 묶은 후, &#39;국어점수&#39;를 기준으로 순서를 정해 출력되고 있는 것을 확인 할 수 있습니다.</p>
<h3 id="🔔sum">🔔sum()</h3>
<hr>
<pre><code class="language-py">df.groupby([&#39;지역&#39;]).sum()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/1aa973e2-695d-4c51-b50a-f3263a3d81fa/image.png" alt="">
&#39;지역&#39;을 기준으로 묶은 후, 값들을 다 합한 결과를 출력합니다.</p>
<pre><code class="language-py">df.groupby([&#39;지역&#39;, &#39;전공&#39;]).sum()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/fa25de13-0f1e-45c7-b9a2-34f5102f1f7e/image.png" alt=""></p>
<p>값들을 다 합한 결과를 출력하되, &#39;지역&#39;과 &#39;전공&#39; 두가지를 기준으로 합니다.</p>
<h3 id="🔔count">🔔count()</h3>
<hr>
<p><code>df.groupby()[].count()</code></p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;)[&#39;코딩&#39;].count()
&gt;&gt; 지역
   부산    1
   서울    3
   Name: 코딩, dtype: int64</code></pre>
<p>&#39;지역&#39;을 기준으로 묶은 뒤, &#39;코딩&#39; 컬럼에 저장된 데이터의 수를 셉니다.</p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;)[[&#39;이름&#39;, &#39;코딩&#39;]].count()</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/477da65d-b67e-47e0-b016-7733dab98c20/image.png" alt="">
&#39;지역&#39;을 기준으로 묶은 뒤, &#39;이름&#39;과 &#39;코딩&#39; 컬럼에 저장된 데이터 수를 세서 각각 보여줍니다. 부산 지역의 두 명의 학생 중 프로그래밍 언어를 아는 학생은 한명이 있고, 서울 지역의 세명의 학생 중 프로그래밍 언어를 아는 학생은 세명이 있음을 알 수 있습니다.</p>
<h3 id="🔔value_counts">🔔value_counts()</h3>
<hr>
<p><code>df.groupby()[].value_counts()</code></p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;)[&#39;전공&#39;].value_counts()
&gt;&gt; 지역  전공
   부산  이과    2
   서울  문과    3
       이과    1
   Name: 전공, dtype: int64</code></pre>
<p><code>value_counts()</code>는 값별로 데이터의 수를 출력해주는 함수입니다. 상단의 코드는 &#39;지역&#39;을 기준으로 묶고, &#39;전공&#39; 컬럼에 들어있는 데이터 수를 출력합니다.</p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;)[&#39;전공&#39;].value_counts().loc[&#39;서울&#39;]
&gt;&gt; 전공
   문과    3
   이과    1
   Name: 전공, dtype: int64</code></pre>
<p><code>loc()</code> 문법을 이용하여 그중 &#39;서울&#39;에 해당하는 데이터만 불러올 수 있습니다.</p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;)[&#39;전공&#39;].value_counts(normalize=True).loc[&#39;서울&#39;]
&gt;&gt; 전공
   문과    0.75
   이과    0.25
   Name: 전공, dtype: float64</code></pre>
<p>value_counts의 옵션으로 normalize=True를 선택하면 비율을 확인할 수 있습니다.</p>
<h2 id="🔎groupby-특성">🔎groupby() 특성</h2>
<hr>
<p>groupby() 오브젝트 특성입니다. groupby()에 붙여 사용합니다.</p>
<h3 id="🔔get_group">🔔get_group()</h3>
<hr>
<p>그룹 안에 데이터를 확인하고 싶을때 <code>groupby().get_group()</code>을 이용합니다.</p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;).get_group(&#39;서울&#39;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/79e34a15-2b72-4a53-8731-600f73d9c8f6/image.png" alt=""></p>
<p>&#39;지역&#39;을 기준으로 했을때 &#39;서울&#39;에 해당하는 자료들을 불러옵니다.</p>
<h3 id="🔔size">🔔size()</h3>
<hr>
<p>각 그룹의 사이즈를 확인할때 <code>groupby().size()</code>를 이용합니다.</p>
<pre><code class="language-py">df.groupby(&#39;지역&#39;).size()
&gt;&gt; 지역
   부산    2
   서울    4
   dtype: int64</code></pre>
<pre><code class="language-py">df.groupby(&#39;지역&#39;).size()[&#39;서울&#39;]
&gt;&gt; 4</code></pre>
<p>전체 자료에서 &#39;지역&#39;을 기준으로 묶었을때 각각 몇개로 묶이는지(size)를 시리즈로 반환해서 보여줍니다. 반환된 배열에서 특정 그룹의 사이즈만을 얻을 수도 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[판다스(Pandas)]데이터 수정-컬럼 추가/삭제/수정, Row(행) 추가/삭제/수정, 컬럼 순서 변경, 컬럼 이름변경]]></title>
            <link>https://velog.io/@jhdai_ly/%ED%8C%90%EB%8B%A4%EC%8A%A4Pandas%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%88%98%EC%A0%95-%EC%BB%AC%EB%9F%BC-%EC%B6%94%EA%B0%80%EC%82%AD%EC%A0%9C%EC%88%98%EC%A0%95-Row%ED%96%89-%EC%B6%94%EA%B0%80%EC%82%AD%EC%A0%9C%EC%88%98%EC%A0%95-%EC%BB%AC%EB%9F%BC-%EC%88%9C%EC%84%9C-%EB%B3%80%EA%B2%BD-%EC%BB%AC%EB%9F%BC-%EC%9D%B4%EB%A6%84%EB%B3%80%EA%B2%BD</link>
            <guid>https://velog.io/@jhdai_ly/%ED%8C%90%EB%8B%A4%EC%8A%A4Pandas%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%88%98%EC%A0%95-%EC%BB%AC%EB%9F%BC-%EC%B6%94%EA%B0%80%EC%82%AD%EC%A0%9C%EC%88%98%EC%A0%95-Row%ED%96%89-%EC%B6%94%EA%B0%80%EC%82%AD%EC%A0%9C%EC%88%98%EC%A0%95-%EC%BB%AC%EB%9F%BC-%EC%88%9C%EC%84%9C-%EB%B3%80%EA%B2%BD-%EC%BB%AC%EB%9F%BC-%EC%9D%B4%EB%A6%84%EB%B3%80%EA%B2%BD</guid>
            <pubDate>Tue, 11 Oct 2022 13:31:35 GMT</pubDate>
            <description><![CDATA[<h2 id="💡오늘-배울-내용">💡오늘 배울 내용</h2>
<hr>
<p>데이터프레임의 컬럼과 row(행)을 수정, 삭제, 추가하는 방법을 알아봅시다.</p>
<h2 id="🔎컬럼column">🔎컬럼(Column)</h2>
<hr>
<p>컬럼은 같은 타입의 자료형으로 되어있는 데이터프레임의 세로줄 영역입니다.</p>
<h3 id="🔔데이터-불러오기">🔔데이터 불러오기</h3>
<hr>
<pre><code class="language-py">import pandas as pd
import numpy as np
data = {
    &#39;이름&#39; : [&#39;유재석&#39;, &#39;박명수&#39;, &#39;정준하&#39;, &#39;노홍철&#39;, &#39;정형돈&#39;, &#39;하하&#39;],
    &#39;지역&#39; : [&#39;서울&#39;, &#39;부산&#39;, &#39;부산&#39;, &#39;서울&#39;, &#39;서울&#39;, &#39;서울&#39;],
    &#39;나이&#39; : [19, 23, 20, 25, 18, 21],
    &#39;국어점수&#39; : [86, 90, 80, 65, 50, 60],
    &#39;수학점수&#39; : [86, 100, 66, 70, 40, 80],
    &#39;코딩&#39; : [&#39;Python&#39;, &#39;Java&#39;, np.nan, &#39;Javascript&#39;, &#39;PYTHON&#39;, np.nan]
}
df = pd.DataFrame(data, index=[&#39;1번&#39;, &#39;2번&#39;, &#39;3번&#39;, &#39;4번&#39;, &#39;5번&#39;, &#39;6번&#39;])
df.index.name = &#39;번호&#39;</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/0c5da594-5302-46ef-b164-f4053f15cb10/image.png" alt=""></p>
<h3 id="🔔컬럼-수정">🔔컬럼 수정</h3>
<hr>
<blockquote>
<ul>
<li>replace() 메서드</li>
</ul>
</blockquote>
<ul>
<li>컬럼 수정 후 재(再)바인딩</li>
</ul>
<pre><code class="language-py">df[&#39;지역&#39;].replace({&quot;서울&quot;:&quot;경기&quot;, &quot;부산&quot;:&quot;대구&quot;}, inplace=True)</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/11efa9d1-a21f-4eb9-9a69-12ac5b5570db/image.png" alt="">
&#39;지역&#39; 컬럼에 &#39;서울&#39;과 &#39;부산&#39;이 &#39;경기&#39;와 &#39;대구&#39;로 바꼈다면, replace() 메서드를 통해 컬럼 내용을 수정해줄 수 있습니다.</p>
<pre><code class="language-py">df[&#39;코딩&#39;] = df[&#39;코딩&#39;].str.lower()
df</code></pre>
<p>대소문자가 섞여있는 &#39;코딩&#39;컬럼을 모두 소문자로 바꾸고 싶다면, 문자열 함수 <code>str.lower()</code>을 적용할 수 있습니다. df[&#39;코딩&#39;]에 <code>str.lower()</code> 함수를 적용하면 컬럼이 수정된 시리즈가 불러지는데, 이를 다시 df[&#39;코딩&#39;]에 바인딩해줌으로써 데이터프레임을 수정할 수 있습니다.</p>
<p>모두 대문자로 바꾸려면, <code>str.upper()</code>함수도 있습니다.</p>
<h3 id="🔔컬럼-추가">🔔컬럼 추가</h3>
<hr>
<pre><code class="language-py">df[&#39;점수총합&#39;] = df[&#39;국어점수&#39;] + df[&#39;수학점수&#39;]
df</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/d89ec255-98be-45df-ba32-3e5c90eaa108/image.png" alt=""></p>
<p>다음과 같이 새로운 컬럼을 추가할 수 있습니다.</p>
<pre><code class="language-py">df[&#39;결과&#39;] = &#39;불합격&#39; #결과 컬럼 생성 후, &#39;불합격&#39;으로 초기화하기
df.loc[df[&#39;점수총합&#39;]&gt;160, &#39;결과&#39;] = &#39;합격&#39; #총합 160 넘으면 &#39;합격&#39;
df</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/8316c9dc-3297-4278-90d8-b4192aff97b6/image.png" alt="">
상단의 코드는 &#39;결과&#39;라는 새로운 컬럼을 만들고, <code>df.loc()</code> 메서드를 사용하여 두 점수의 합 160을 기준으로 합격과 불합격을 나누고 있습니다.</p>
<h3 id="🔔컬럼-삭제">🔔컬럼 삭제</h3>
<hr>
<pre><code class="language-py">df.drop(columns=[&#39;점수총합&#39;], inplace=True)
df</code></pre>
<p><code>drop()</code> 메서드를 통해 기존의 컬럼을 삭제할 수 있습니다.</p>
<h2 id="🔎row행">🔎Row(행)</h2>
<hr>
<p>행은 데이터프레임의 가로줄 부분으로 다양한 컬럼들로 구성되는 담고있는 하나의 개체에 해당합니다. 데이터를 다시 불러와 실습해봅시다.</p>
<h3 id="🔔데이터-불러오기-1">🔔데이터 불러오기</h3>
<hr>
<pre><code class="language-py">import pandas as pd
import numpy as np
data = {
    &#39;이름&#39; : [&#39;유재석&#39;, &#39;박명수&#39;, &#39;정준하&#39;, &#39;노홍철&#39;, &#39;정형돈&#39;, &#39;하하&#39;],
    &#39;지역&#39; : [&#39;서울&#39;, &#39;부산&#39;, &#39;부산&#39;, &#39;서울&#39;, &#39;서울&#39;, &#39;서울&#39;],
    &#39;나이&#39; : [19, 23, 20, 25, 18, 21],
    &#39;국어점수&#39; : [86, 90, 80, 65, 50, 60],
    &#39;수학점수&#39; : [86, 100, 66, 70, 40, 80],
    &#39;코딩&#39; : [&#39;Python&#39;, &#39;Java&#39;, np.nan, &#39;Javascript&#39;, &#39;PYTHON&#39;, np.nan]
}
df = pd.DataFrame(data, index=[&#39;1번&#39;, &#39;2번&#39;, &#39;3번&#39;, &#39;4번&#39;, &#39;5번&#39;, &#39;6번&#39;])
df.index.name = &#39;번호&#39;</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/0c5da594-5302-46ef-b164-f4053f15cb10/image.png" alt=""></p>
<h3 id="🔔row-추가">🔔Row 추가</h3>
<hr>
<pre><code class="language-py">df.loc[&#39;7번&#39;] = [&#39;길&#39;, &#39;부산&#39;, 22, 90, 90, &#39;Kotlin&#39;]
df</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/88958511-32f6-45f0-b083-48f342b79c73/image.png" alt=""></p>
<p><code>df.loc</code>메서드로 새롭게 만들 row를 지정하고, 각각 자료형에 맞는 값들을 리스트형태로 바인딩해주면 됩니다.</p>
<h3 id="🔔셀-수정">🔔셀 수정</h3>
<hr>
<pre><code class="language-py">df.loc[&#39;4번&#39;, &#39;국어점수&#39;] = 100
df</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/d4cd0f70-a66f-4a5b-a341-5ddff1d1481d/image.png" alt=""></p>
<p>데이터프레임 내 데이터 중, 수정하고 싶은 셀이 있을때 자유롭게 값을 바꿀 수 있습니다. 역시 <code>df.loc</code>메서드로 행과 열을 선택해주고, 새로운 값을 바인딩해주면 됩니다.</p>
<pre><code class="language-py">df.loc[&#39;4번&#39;, [&#39;지역&#39;, &#39;코딩&#39;]] = [&#39;대구&#39;, &#39;C&#39;]
df</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/c1be1174-4204-42f9-8698-0057dd547634/image.png" alt=""></p>
<p>팬시 인덱싱으로 한 행에서 두가지 값을 한번에 바꿀 수도 있습니다.</p>
<h2 id="🔎컬럼-순서-변경">🔎컬럼 순서 변경</h2>
<hr>
<p>컬럼들을 리스트로 저장하고, 슬라이싱과 더하기 문법으로 컬럼의 순서를 변경할 수 있습니다. 바로 위 코드를 이어서 실습해봅시다.</p>
<pre><code class="language-py">cols = list(df.columns)
df = df[[cols[-1]] + cols[0:-1]]
df</code></pre>
<p><img src="https://velog.velcdn.com/images/jhdai_ly/post/1f3aaeff-3971-463e-95a7-48b06b4e6851/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>