<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sun4_you.log</title>
        <link>https://velog.io/</link>
        <description>My path to becoming contributor from user</description>
        <lastBuildDate>Tue, 02 May 2023 07:55:17 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sun4_you.log</title>
            <url>https://velog.velcdn.com/images/sun4_you/profile/03af5945-448f-4eb6-b79b-41d513c214ad/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sun4_you.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sun4_you" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 20. SVD]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-20.-SVD</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-20.-SVD</guid>
            <pubDate>Tue, 02 May 2023 07:55:17 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-20-svd">✏️ 20. SVD</h2>
<hr>
<h2 id="svdsingular-value-decomposition">SVD(Singular Value Decomposition)</h2>
<ul>
<li><p>SVD - 특잇값 분해: 고유분해와 더불어 대표적인 행렬 분해 방법이다.</p>
</li>
<li><p>고유분해는 정방행렬에 대해서만 분해가 가능하지만, 특잇값 분해는 행과 열의 크기가 다른 행렬도 분해가 가능하다.</p>
<ul>
<li><code>𝐴 = 𝑈Σ𝑉**𝑇</code></li>
</ul>
</li>
<li><p>분해된 행렬 U를 왼쪽 특이행렬(왼쪽 직교행렬), Σ를 대각행렬, VT를 오른쪽 특이행렬(오른쪽 직교행렬)이라고 한다.</p>
</li>
<li><p>행렬 U와 V에 속한 벡터를 특이벡터(Singular Vector)라고 하며, 모든 특이벡터는 서로 직교하는 성질을 갖는다.</p>
<ul>
<li><code>𝑈**𝑇𝑈 = 𝐼, 𝑉**𝑇𝑉 = 𝐼</code></li>
</ul>
</li>
<li><p>Σ는 대각행렬이며, 행렬의 대각에 위치한 값만 0이 아니고 나머지 위치의 값은 모두 0이 된다.</p>
</li>
<li><p>Σ가 위치한 0이 아닌 값이 행렬 A의 특잇값이 된다.</p>
</li>
</ul>
<br />

<h3 id="full-svd">Full SVD</h3>
<ul>
<li>행렬 A를 n x n 크기인 U, m x n 크기인 ∑, m x m 크기인 Vt 로 특이값 분해(SVD)한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/d5c4bf57-4126-420b-81d2-376fe93f924f/image.png" alt=""></p>
<br />

<h3 id="compact-svd">Compact SVD</h3>
<ul>
<li>비대각 부분과 대각 원소가 0인 부분을 제거한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/cd8474e5-e4e7-4a42-9182-1de1817ed92b/image.png" alt=""></p>
<br />

<h3 id="truncated-svd">Truncated SVD</h3>
<ul>
<li><p>대각 원소 가운데 상위 r개만 추출하여 차원을 축소한다</p>
</li>
<li><p>차원 축소를 위한 행렬 분해를 통해 Latent Factor(잠재 요인)을 찾을 수 있다. 이렇게 찾아진 Latent Factor는 많은 분야에 활용된다.(추천 엔진, 문서의 잠재의미 등)</p>
</li>
<li><p>Truncated SVD로 차원 축소 해열 분해된 후 다시 분해된 행렬을 이용하여 원복된 데이터 셋은 잡음이 제거된 형태로 재구성 된다.</p>
<ul>
<li>데이터를 표현하기 위한 중요한 성질만 남게 된다.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/c3571f4e-8a67-4c6e-adab-6c245d22de80/image.png" alt=""></p>
<br />


<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/decomposition.html#decompositions">https://scikit-learn.org/stable/modules/decomposition.html#decompositions</a></li>
<li>🔗 <a href="https://datascienceschool.net/02%20mathematics/03.03%20%EA%B3%A0%EC%9C%B3%EA%B0%92%20%EB%B6%84%ED%95%B4.html#id28">https://datascienceschool.net/02%20mathematics/03.03%20%EA%B3%A0%EC%9C%B3%EA%B0%92%20%EB%B6%84%ED%95%B4.html#id28</a><ul>
<li>🔗 <a href="https://angeloyeo.github.io/2019/08/01/SVD.html">https://angeloyeo.github.io/2019/08/01/SVD.html</a></li>
</ul>
</li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 19. LDA]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-19.-LDA</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-19.-LDA</guid>
            <pubDate>Tue, 02 May 2023 07:37:53 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-19-lda">✏️ 19. LDA</h2>
<hr>
<h2 id="ldalinear-disciminant-analysis">LDA(Linear Disciminant Analysis)</h2>
<ul>
<li><p>LDA는 선형 판별 분석법으로 불리며, PCA와 매우 흡사한 기법이다.</p>
</li>
<li><p>LDA는 PCA와 유사하게 입력 데이터 세트를 저차원 공간에 투영해 차원을 축소하는 기법이지만,
중요한 차이는 LDA는 지도학습의 분류(Classification)에서 사용하기 쉽도록 개별 클래스를 분별할 수 있는 기준을 최대한 유지하면서 차원을 축소한다.</p>
</li>
<li><p>PCA는 입력 데이터의 변동성이 가장 큰 축을 찾지만, 
LDA는 입력 데이터의 결정 값 클래스를 최대한으로 분리할 수 있는 축을 찾는다. 즉 LDA는 같은 클래스의 데이터는 최대한 근접해서, 다른 클래스의 데이터는 최대한 떨어뜨리는 축 매핑을 수행한다</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/d72ee3e0-40f2-4568-bb50-e21216f9e562/image.png" alt=""></p>
<br />

<h3 id="lda-차원-축소-방식">LDA 차원 축소 방식</h3>
<ul>
<li><p>LDA는 특정 공간상에서 클래스 분리를 최대화하는 축을 찾기 위해 클래스 간 분산(between-class scatter)과
클래스 내부 분산(within-class scatter)의 비율을 최대화하는 방식으로 차원을 축소한다.</p>
</li>
<li><p>즉, 클래스 간 분산은 최대한 크게 가져가고, 클래스 내부 분산은 최대한 작게 가져간다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/3409946a-5144-4a8d-8ed9-aeda2cee9e0f/image.png" alt=""></p>
<br />

<h3 id="lda-절차">LDA 절차</h3>
<ul>
<li>LDA를 구하는 것은 PCA와 매우 유사하나, 가장 큰 차이점은 공분산 행렬이 아닌 클래스간 분산과 내부 분산 행렬을
생성한 뒤 이 행렬에 기반해 고유벡터를 구하고 입력 데이터를 투영한다는 것이다.</li>
</ul>
<ol>
<li><p>클래스 내부와 클래스 간 분산 행렬 구하기.</p>
<ul>
<li>이 두 개의 행렬은 입력 데이터의 클래스 별로 개별 Feature의 평균벡터를 기반으로 구한다.</li>
</ul>
</li>
<li><p>클래스 내부 분산 행렬(𝑆𝑊), 클래스 간 분산 행렬(𝑆𝐵)를 고유벡터로 분해</p>
<ul>
<li><img src="https://velog.velcdn.com/images/sun4_you/post/ff04f868-0444-4d11-abbb-cbb3678a40b4/image.png" alt=""></li>
</ul>
</li>
</ol>
<ol start="3">
<li><p>고윳값이 가장 큰 순으로 K개(LDA 변환 차수만큼) 추출</p>
</li>
<li><p>고윳값이 가장 큰 순으로 K개 추출, 고윳값이 가장 큰 순으로 추출된 고유벡터를 이용해 새롭게 입력 데이터를 변환</p>
</li>
</ol>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/decomposition.html#decompositions">https://scikit-learn.org/stable/modules/decomposition.html#decompositions</a></li>
<li>🔗 <a href="https://datascienceschool.net/02%20mathematics/03.03%20%EA%B3%A0%EC%9C%B3%EA%B0%92%20%EB%B6%84%ED%95%B4.html#id28">https://datascienceschool.net/02%20mathematics/03.03%20%EA%B3%A0%EC%9C%B3%EA%B0%92%20%EB%B6%84%ED%95%B4.html#id28</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 18. PCA]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-18.-PCA</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-18.-PCA</guid>
            <pubDate>Tue, 02 May 2023 07:28:57 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-18-pca">✏️ 18. PCA</h2>
<hr>
<h2 id="pcaprincipal-component-analysis">PCA(Principal Component Analysis)</h2>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/16027132-0043-4a46-8e9d-ad8f600db533/image.png" alt=""></p>
<ul>
<li><p>고차원의 원본 데이터를 저차원의 부분 공간으로 투영하여 데이터를 축소하는 기법</p>
<ul>
<li>10차원의 데이터를 2차원의 부분 공간으로 투영하여 데이터를 축소</li>
</ul>
</li>
<li><p>PCA는 원본 데이터가 가지는 데이터 변동성(분산)을 가장 중요한 정보로 간주하며 이 변동성에 기반한 원본 데이터
투영으로 차원 축소를 수행</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/7fee86b2-1337-4338-953b-2d88cdbd8b4c/image.png" alt=""></p>
<ul>
<li>PCA는 원본 데이터 변동성이 가장 큰 방향으로 순차적으로 축들을 생성하고 이렇게 생성된 축으로 데이터를 투영한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/8d882e57-a8b3-4fce-adbd-ebb78af7f10b/image.png" alt=""></p>
<ul>
<li><p>PCA는 제일 먼저 원본 데이터의 가장 큰 데이터 변동성(분산)을 기반으로 첫 번째 벡터 축을 생성하고, 두 번째 축은 첫 번째 축을 제외하고 그 다음 변동성(분산)이 큰 축을 설정한다. </p>
<ul>
<li>이 때 두 번째 축은 첫 번째 축과 직각이 되는 벡터(직교 벡터) 축이 된다. </li>
</ul>
</li>
<li><p>세 번째 축은 다시 직각이 되는 벡터를 설정하는 방식으로 축을 생성하게 된다. </p>
</li>
<li><p>이렇게 생성된 벡터 축에 원본 데이터를 투영하면 벡터 축의 개수 만큼 차원으로 원본 데이터가 차원 축소 된다</p>
</li>
</ul>
<blockquote>
<p>PCA, 즉 주성분 분석은 이처럼 원본 데이터의 피처 개수에 비해 매우 작은 주성분으로 원본 데이터의 총 변동성을 대부분 설명할 수 있다.</p>
</blockquote>
<br />

<h3 id="선형대수-관점의-pca-변환">선형대수 관점의 PCA 변환</h3>
<ul>
<li>선형대수 관점으로 PCA 변환을 보면 입력 데이터의 공분산 행렬(Covariance Matrix)을 고윳값 분해 하고,
이렇게 구한 고유벡터에 입력 데이터를 선형 변환 하는 것이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/6693c9c5-2feb-4858-b056-0372a24025fe/image.png" alt=""></p>
<ul>
<li><p>고유벡터는 PCA의 주성분 벡터로서 입력 데이터의 분산이 큰 방향을 나타낸다.</p>
</li>
<li><p>고윳값(eigenvalue)은 바로 이 고유벡터의 크기를 나타내며, 동시에 입력 데이터의 분산을 나타낸다.</p>
</li>
</ul>
<br />

<h3 id="공분산-행렬의-고윳값-분해">공분산 행렬의 고윳값 분해</h3>
<ul>
<li><p>공분산 행렬은 정방행렬이며, 대칭행렬이다. 대칭행렬은 고윳값 분해와 관련해 매우 좋은 특징이 있다.</p>
</li>
<li><p>대칭행렬은 항상 고유벡터를 직교행렬로, 고윳값을 정방 행렬로 대각화 할 수 있다는 것이다.</p>
</li>
<li><p><code>𝐶 = 𝑃Σ𝑃**𝑇</code></p>
<ul>
<li><code>𝑃</code>는 <code>𝑁 × 𝑁</code>의 직교행렬이며, <code>Σ</code>는 <code>𝑁 × 𝑁</code> 정방행렬, <code>𝑃**𝑇</code>는 정방행렬 <code>𝑃</code>의 전치행렬이다.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/5d4c3533-21d1-4384-a2a4-726431724c67/image.png" alt=""></p>
<ul>
<li><p>공분산 <code>𝐶</code>는 고유벡터 직교행렬, 고윳값 정방행렬, 고유벡터 직교행렬의 전치행렬로 분해된다.</p>
</li>
<li><p><code>𝑒𝑖</code>는 𝑖번째 고유벡터를, <code>𝜆𝑖</code>는 𝑖번째 고유벡터의 크기를 의미한다. 이 고유벡터가 바로 PCA의 축이 된다.</p>
</li>
<li><p><code>𝑒1</code>은 가장 분산이 큰 방향을 가진 고유벡터이며, <code>𝑒2</code>는 <code>𝑒1</code>에 수직이면서 다음으로 가장 큰 분산이 큰 방향을 가진 고유벡터이다.</p>
</li>
</ul>
<br />

<h3 id="pca-변환과-수행-절차">PCA 변환과 수행 절차</h3>
<ul>
<li>입력 데이터의 공분산 행렬이 고유벡터와 고윳값으로 분해될 수 있으며, 
이렇게 분해된 고유벡터를 이용해 입력 데이터를 선형 변환한다.</li>
</ul>
<ol>
<li><p>입력 데이터 세트의 공분산 행렬을 생성</p>
</li>
<li><p>공분산 행렬의 고유벡터와 고윳값을 계산</p>
</li>
<li><p>고윳값이 가장 큰 순으로 K개(PCA의 변환 차수만큼)만큼 고유벡터를 추출</p>
</li>
<li><p>고윳값이 가장 큰 순으로 추출된 고유벡터를 이용해 새롭게 입력 데이터를 변환</p>
</li>
</ol>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/decomposition.html#decompositions">https://scikit-learn.org/stable/modules/decomposition.html#decompositions</a></li>
<li>🔗 <a href="https://datascienceschool.net/02%20mathematics/03.03%20%EA%B3%A0%EC%9C%B3%EA%B0%92%20%EB%B6%84%ED%95%B4.html#id28">https://datascienceschool.net/02%20mathematics/03.03%20%EA%B3%A0%EC%9C%B3%EA%B0%92%20%EB%B6%84%ED%95%B4.html#id28</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 17. 차원 축소]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-17.-%EC%B0%A8%EC%9B%90-%EC%B6%95%EC%86%8C</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-17.-%EC%B0%A8%EC%9B%90-%EC%B6%95%EC%86%8C</guid>
            <pubDate>Tue, 02 May 2023 06:47:49 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-17-차원-축소">✏️ 17. 차원 축소</h2>
<hr>
<h2 id="차원-축소">차원 축소</h2>
<ul>
<li><p>차원 축소는 단순히 데이터의 압축을 의미하는 것이 아니다. 더 중요한 의미는 차원 축소를 통해 좀 더 데이터를 설명할 수 있는 잠재적(Latent)인 요소를 추출하는 데에 있다.</p>
</li>
<li><p>대표적으로 추천엔진, 이미지 분류 및 변환, 문서 토픽 모델링 등에서 차원 축소가 사용된다.</p>
</li>
</ul>
<br />

<h3 id="차원의-저주">차원의 저주</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/55da4e92-6354-4c1b-a4bc-602de0f5910f/image.png" alt=""></p>
<ul>
<li><p>차원이 커지면 커질수록 데이터 포인트들간 거리가 크게 늘어나며, 데이터가 희소화(Sparse)되기 시작한다.</p>
</li>
<li><p>수백~수천 개 이상의 Feature로 구성된 포인트들간 거리에 기반한 머신러닝 알고리즘들이 무력화 된다.</p>
</li>
<li><p>또한 Feature가 많을 경우 개발 Feature간에 상관관계가 높아 선형 회귀 같은 모델에서는 다중공선성 문제로 모델의 예측 성능이 저하될 가능성이 매우 높다.</p>
</li>
</ul>
<br />

<h3 id="차원-축소의-장점">차원 축소의 장점</h3>
<ul>
<li><p>수십 ~ 수백 개의 Feature들을 작은 수의 Feature 들로 축소 한다면?</p>
<ul>
<li><p>학습 데이터 크기를 줄여서 학습 시간을 절약할 수 있다.</p>
</li>
<li><p>불필요한 Feature들을 줄여서 모델 성능 향상에 기여할 수 있다.</p>
</li>
<li><p>다차원 데이터를 3차원 이하의 차원축소를 통해 시각적으로 보다 쉽게 데이터 패턴을 인지할 수 있다.</p>
</li>
</ul>
</li>
</ul>
<blockquote>
<p>차원 축소의 목적은 원본 데이터의 정보를 최대한으로 유지한 채로 차원 축소를 수행하는 것이다.</p>
</blockquote>
<br />

<h3 id="feature-selection-feature-extraction">Feature Selection, Feature Extraction</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/e2ff635a-535a-4d51-b2da-a471e631719d/image.png" alt=""></p>
<ul>
<li><p>일반적으로 차원 축소는 특성 선택(feature selection)과 특성 추출(feature extraction)로 나눌 수 있다.</p>
</li>
<li><p>특성 선택(Feature Selection)</p>
<ul>
<li>특정 특성에 종속성이 강한 불필요한 특성은 아예 제거하고 데이터의 특징을 잘 나타내는 주요 특성만 선택하는 것</li>
</ul>
</li>
<li><p>특성 추출(Feature Extraction)</p>
<ul>
<li>특성 추출은 기존 특성을 저차원의 중요 특성으로 압축해서 추출하는 것이다. 새롭게 추출된 중요 특성은 기존의 특성을 반영해 압축된 것이지만 새로운 특성으로 추출하게 된다.</li>
</ul>
</li>
</ul>
<br />

<h4 id="특성-추출feature-selection">특성 추출(Feature Selection)</h4>
<ul>
<li>특성 추출은 기존 특성을 단순하게 압축하는 것이 아닌 특성을 함축적으로 더 잘 설명할 수 있는 또 다른 공간으로
매핑해 추출하는 것이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/c859a218-a235-42dc-a3d3-b917bc3e3702/image.png" alt=""></p>
<ul>
<li><p>6차원 데이터를 3차원으로 요악한다.</p>
</li>
<li><p>기존 데이터 세트에서 내재된 특성(Latent)을 찾는다.</p>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/decomposition.html#decompositions">https://scikit-learn.org/stable/modules/decomposition.html#decompositions</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 16. 회귀 트리]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-16.-%ED%9A%8C%EA%B7%80-%ED%8A%B8%EB%A6%AC</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-16.-%ED%9A%8C%EA%B7%80-%ED%8A%B8%EB%A6%AC</guid>
            <pubDate>Sun, 30 Apr 2023 11:57:05 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-16-회귀-트리">✏️ 16. 회귀 트리</h2>
<hr>
<h2 id="tree-기반-회귀-모델">Tree 기반 회귀 모델</h2>
<ul>
<li><p>사이킷런의 결정 트리 및 결정 트리 기반의 앙상블 알고리즘은 분류 뿐만 아니라 회귀도 가능</p>
</li>
<li><p>이는 사이킷런의 트리가 CART(Classification And Regression Tree)를 기반으로 만들어졌기 때문이다. CART는
분류 뿐만 아니라 회귀도 가능한 트리 분할 알고리즘</p>
</li>
<li><p>CART 회귀 트리는 분류와 유사하게 분할을 하며, 최종 분할이 완료된 후에 각 분할 영역에 있는 데이터 결정값들의 평균
값으로 학습 / 예측을 수행한다.</p>
</li>
</ul>
<br />

<h3 id="회귀-트리-프로세스">회귀 트리 프로세스</h3>
<ol>
<li>기준에 따라 트리 분할</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/c8707e12-5c30-40f1-b04d-d6de65d1a8c8/image.png" alt=""></p>
<ol start="2">
<li>최종 분할된 영역에 있는 데이터들의 평균값들로 학습 / 예측</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/32424a09-d6f4-4764-bd70-688ef271a88a/image.png" alt=""></p>
<h3 id="회귀-트리-오버-피팅">회귀 트리 오버 피팅</h3>
<ul>
<li>회귀 트리 역시 복잡한 트리구조를 가질 경우 과적합 되기 쉽다. 
따라서 트리의 크기와 노드 개수의 제한 등의 방법을 통해 과적합을 개선할 수 있다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/f07ea773-846f-42c6-a9df-de56701a06b4/image.png" alt=""></p>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/linear_model.html">https://scikit-learn.org/stable/modules/linear_model.html</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 15. 로지스틱 회귀]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-15.-%EB%A1%9C%EC%A7%80%EC%8A%A4%ED%8B%B1-%ED%9A%8C%EA%B7%80</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-15.-%EB%A1%9C%EC%A7%80%EC%8A%A4%ED%8B%B1-%ED%9A%8C%EA%B7%80</guid>
            <pubDate>Sun, 30 Apr 2023 11:49:54 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️--15-로지스틱-회귀">✏️ # 15. 로지스틱 회귀</h2>
<hr>
<h2 id="로지스틱-회귀logistic-regression">로지스틱 회귀(Logistic Regression)</h2>
<ul>
<li><p>로지스틱 회귀는 선형 회귀 방식을 분류에 적용한 알고리즘이다. 즉, 로지스틱 회귀는 분류에 사용된다.</p>
</li>
<li><p>로지스틱 회귀가 선형 회귀와 다른 점은 선형 함수의 회귀 최적선을 찾는 것이 아니라 시그모이드(𝜎) 함수의 최적선을
찾고 이 시그모이드 함수의 반환 값을 확률로 간주해 확률에 따라 분류를 결정한다는 것이다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/7dd58edb-3617-4d58-863f-6640850b9190/image.png" alt=""></p>
<br />

<h3 id="로지스틱-회귀-예측">로지스틱 회귀 예측</h3>
<ul>
<li><p>로지스틱 회귀는 주로 이진 분류(0과 1)에 사용된다. </p>
</li>
<li><p>다중 분류에도 사용이 될 수 있다.</p>
</li>
<li><p>로지스틱 회귀에서 예측 값은 예측 확률을 의미하며 예측 값(예측 확률)이 0.5 이상이면 1로, 0.5 이하이면 0으로 예측한다.</p>
</li>
<li><p>로지스틱 회귀의 예측 확률은 시그모이드 함수의 출력값으로 계산된다.</p>
</li>
<li><p>단순 선형 회귀 <code>𝑦 = 𝑤1𝑥 + 𝑤0</code>가 있다고 할 때</p>
</li>
<li><p>로지스틱 회귀는 0과 1을 예측하기에 단순 회귀식에 적용할 수는 없다. 
하지만 Odds(성공확률 p)을 통해 선형 회귀식에 확률을 적용한다. 성공확률이 p이면 실패 확률은 1-p이다.</p>
<blockquote>
<p>𝑂𝑑𝑑𝑠(𝑝) = 𝑝/(1 − 𝑝)</p>
</blockquote>
</li>
<li><p>하지만 확률 p의 범위가 0 ~ 1 사이이고, 선형 회귀의 반환값인 −∞ ~ + ∞값에 대응하기 위해서
로그 변환을 수행하고 아래와 같이 선형 회귀를 적용한다. 이를 로짓 변환(Logit)이라고 한다.</p>
<blockquote>
<p>log(𝑂𝑑𝑑𝑠(𝑝)) = 𝑤1𝑥 + 𝑤0</p>
</blockquote>
</li>
<li><p>해당 식을 데이터 값 x의 확률 p로 정리하면 다음과 같다.</p>
<blockquote>
<p>𝑝(𝑥) =1/1 + 𝑒-(𝑤1𝑥+𝑤0)</p>
</blockquote>
</li>
<li><p>로지스틱 회귀는 학습을 통해서 시그모이드 함수의 𝑤를 최적화하여 예측하는 것이다</p>
</li>
</ul>
<br />

<h3 id="사이킷런-로지스틱-회귀">사이킷런 로지스틱 회귀</h3>
<ul>
<li><p>사이킷런은 로지스틱 회귀를 <code>LogisticRegression</code> 클래스로 구현</p>
</li>
<li><p>LogisticRegression의 주요 하이퍼 파라미터로 <code>penalty, C, solver</code>가 있다.</p>
<ul>
<li><p><code>penalty</code> : 규제 유형 설정. <code>‘l2’, ‘l1’</code> 설정 가능</p>
</li>
<li><p><code>C</code> : 규제 강도를 조절하는 𝛼의 역수. 즉 C=1/alpha. C가 작을 수록 규제 강도가 커짐</p>
</li>
<li><p><code>solver</code> : 회귀 계수 최적화를 위한 다양한 최적화(Optimization) 방식</p>
<ul>
<li><p><code>lbfgs</code> : 사이킷런 버전 0.22 부터 solver의 기본 설정값. 메모리 공간을 절약할 수 있고 CPU 코어 수가 많다면 최적화를 병렬로 수행 가능</p>
</li>
<li><p><code>liblinear</code> : 사이킷런 버전 0.21 까지 solver의 기본 설정값. 다차원이고 작은 데이터 세트에서 효과적으로 동작하지만 국소 최적화(Local Minimum)에 이슈가 있고, 병렬 최적화가 불가능</p>
</li>
<li><p><code>newtown-cg</code> : 좀 더 정교한 최적화를 가능하게 하지만, 대용량의 데이터에서 속도가 많이 느려짐</p>
</li>
<li><p><code>sag</code> : Stochastic Average Gradient로서 경사 하강법 기반의 최적화를 사용. 대용량의 데이터에서 빠르게 최적화 가능</p>
</li>
<li><p><code>saga</code> : sag와 유사한 최적화 방식이며 L1 정규화를 가능하게 해준다</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/linear_model.html">https://scikit-learn.org/stable/modules/linear_model.html</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 14. 규제 선형 회귀]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-14.-%EA%B7%9C%EC%A0%9C-%EC%84%A0%ED%98%95-%ED%9A%8C%EA%B7%80</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-14.-%EA%B7%9C%EC%A0%9C-%EC%84%A0%ED%98%95-%ED%9A%8C%EA%B7%80</guid>
            <pubDate>Sun, 30 Apr 2023 11:04:13 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️--14-규제-선형-회귀">✏️ # 14. 규제 선형 회귀</h2>
<hr>
<h2 id="규제-선형-회귀regularized-linear-regression">규제 선형 회귀(Regularized Linear Regression)</h2>
<ul>
<li><p>앞서 본 Degree=15의 다항회귀 처럼 지나치게 모든 데이터에 적합한 회귀식을 만들기 위해서 다항식이 복잡해지고 회귀 계수가 매우 크게 설정이 되면서 과대적합이 되었고, 테스트 데이터 세트에 대해 좋지 않는 성능을 보였다.</p>
<ul>
<li>참조 <a href="https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-13.-%EB%8B%A4%ED%95%AD%ED%9A%8C%EA%B7%80-%ED%8E%B8%ED%96%A5-%EB%B6%84%EC%82%B0-%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%EC%98%A4%ED%94%84">✏️ 13. 다항회귀, 편향-분산 트레이드 오프</a></li>
</ul>
</li>
<li><p>따라서 회귀 모델은 적절히 데이터에 적합하면서도 회귀 계수가 기하급수적으로 커지는 것을 제어할 수 있어야 한다.</p>
</li>
<li><p>즉 최적의 모델이 되기 위한 손실 함수의 목표는 학습 데이터에 대한 잔차 오류도 최소화 되어야 하지만, 회귀 계수의
크기 제어도 목적이 되어야 한다.</p>
</li>
</ul>
<br />

<h3 id="규제-선형-모델의-alpha의-역할">규제 선형 모델의 alpha의 역할</h3>
<ul>
<li><p><code>𝛼</code>가 <code>0</code> 또는 매우 작은 값이라면 손실 함수의 식은 기존과 동일한 <code>𝐿𝑜𝑠𝑠(𝑥, 𝑦) = arg min_𝑤 𝑅𝑆𝑆(𝑊) + 0</code>이 될 것이다.</p>
</li>
<li><p>반면에 <code>𝛼</code>가 무한대 또는 매우 큰 값이라면 손실 함수 식은 <code>𝑅𝑆𝑆(𝑊)</code> 에 비해 <code>𝛼∑𝑤**2</code> 또는 <code>𝛼∑|𝑤|</code>의 값이 너무 커지게 되므로 <code>𝑊</code>를 작게 만들어야 손실이 최소화되는 비용 함수 목표를 달성할 수 있게 된다.</p>
</li>
<li><p>즉 <code>𝛼</code>값을 크게 하면 비용 함수는 회귀 계수 <code>𝑊</code>의 값을 작게 해 과적합을 개선할 수 있으며, 𝛼값을 작게 하면 회귀 계수 𝑊의 값이 커져도 어느 정도 상쇄가 가능하므로 학습 데이터 적합을 더 개선할 수 있게 된다.</p>
</li>
<li><p><code>𝛼 = 0</code>인 경우에는 <code>𝑊</code>가 커도 <code>𝛼∑𝑤**2</code> 또는 <code>𝛼∑|𝑤|</code>이 <code>0</code>이 되어 비용 함수는 <code>arg min_𝑤 𝑅𝑆𝑆(𝑊)</code></p>
</li>
<li><p><code>𝛼 = ∞</code>인 경우에는 <code>𝛼∑𝑤**2</code> 또는 <code>𝛼∑|𝑤|</code> 역시 무한대가 되므로 비용 함수는 <code>𝑊</code>를 <code>0</code>에 가깝게 최소화 해야 한다.</p>
</li>
</ul>
<hr>
<ul>
<li><p>이처럼 손실 함수에 𝛼값으로 패널티를 부여해 회귀 계수 값의 크기를 감소시켜 과적합을 개선하는 방식을 규제(Regularization)라고 한다.</p>
</li>
<li><p>규제는 크게 L2 방식과 L1 방식으로 구분된다.</p>
<ul>
<li><p>L2 방식 <code>𝐿𝑜𝑠𝑠(𝑥, 𝑦) = arg min_𝑤∑𝑅𝑆𝑆(𝑊) + 𝛼∑𝑤**2</code></p>
</li>
<li><p>L1 방식 <code>𝐿𝑜𝑠𝑠(𝑥, 𝑦) = arg min_𝑤∑𝑅𝑆𝑆(𝑊) + 𝛼∑|𝑤|</code></p>
</li>
</ul>
</li>
<li><p><code>릿지(Ridge)</code> 회귀는 L2 방식을 적용한 회귀이며, L2 방식을 적용하면 회귀 계수 값을 무한히 0에 가깝게 만들지만 0이 되진 않는다.</p>
</li>
<li><p><code>라쏘(Lasso)</code> 회귀는 L1 방식을 적용한 회귀이며, L1 방식을 적용하면 영향력이 크지 않은 회귀 계수 값을 0으로 반환한다.</p>
</li>
<li><p><code>엘라스틱 넥(ElasticNet)</code>은 L2, L1 방식을 결합한 모델로서, 주로 Feature가 많은 데이터 세트에 적용된다.
L1 규제로 Feature의 개수를 줄임과 동시에 L2 규제로 계수 값의 크기를 조정한다.</p>
</li>
</ul>
<br />

<h3 id="릿지ridge-회귀">릿지(Ridge) 회귀</h3>
<ul>
<li><p>릿지 회귀는 𝛼값을 이용하여 회귀 계수의 크기를 조절한다. </p>
<ul>
<li><p>𝛼값이 크면 회귀 계수의 값이 작아진다.</p>
</li>
<li><p>𝛼값이 작아지면 회귀 계수의 값이 커진다</p>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="라쏘lasso-회귀">라쏘(Lasso) 회귀</h3>
<ul>
<li><p>L2 규제가 회귀 계수의 크기를 감소만 시키는 데 반해, L1 규제는 불필요한 회귀 계수를 급격하게 감소시켜 0으로
만들어 버리고 제거하는 역할이 있다.</p>
</li>
<li><p>즉 L1 규제는 적절한 Feature만 회귀에 포함시키는 특성 선택(Feature Selection)의 특징도 가지고 있다.</p>
</li>
</ul>
<br />

<h3 id="엘라스틱-넷elastic-net-회귀">엘라스틱 넷(Elastic Net) 회귀</h3>
<ul>
<li><p><code>ElasticNet</code> 클래스의 주요 하이퍼 파라미터는 <code>alpha</code>와 <code>l1_ratio</code>이다.</p>
</li>
<li><p><code>alpha</code></p>
<ul>
<li><p>alpha 파라미터는 L1, L2 규제에 사용될 <code>alpha의 합</code>이다.</p>
</li>
<li><p><code>∑𝑅𝑆𝑆(𝑊) + 𝛼2∑𝑤**2 + 𝛼1∑|𝑤| 에서 𝛼 = 𝛼2 + 𝛼1</code>이 된다.</p>
<ul>
<li>alpha=10, l1_ratio=0.7 이라면 𝛼1 = 10 × 0.7 = 7이 되고, 𝛼2 = 10 × 1 − 0.7 = 10 × 0.3 = 3이 된다.</li>
</ul>
</li>
</ul>
</li>
<li><p><code>l1_ratio</code></p>
<ul>
<li><p>l1_ratio는 L1 규제에 사용할 alpha의 비율로서 <code>𝛼1/(𝑎1 + 𝑎2)</code>이다. </p>
</li>
<li><p><code>l1_ratio가 0</code>이면 <code>𝛼1 = 0</code>이 되면서 L2 규제와 동일해 진다.</p>
</li>
<li><p><code>l1_ratio가 1</code>이면 <code>𝛼2 = 0</code>이 되면서 L1 규제와 동일해 진다.</p>
</li>
<li><p><code>0 &lt; l1_ratio &lt; 1</code> 이면 L1과 L2 규제를 적절히 잘 적용한다.</p>
</li>
</ul>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/linear_model.html">https://scikit-learn.org/stable/modules/linear_model.html</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 13. 다항 회귀, 편향-분산 트레이드 오프]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-13.-%EB%8B%A4%ED%95%AD%ED%9A%8C%EA%B7%80-%ED%8E%B8%ED%96%A5-%EB%B6%84%EC%82%B0-%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%EC%98%A4%ED%94%84</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-13.-%EB%8B%A4%ED%95%AD%ED%9A%8C%EA%B7%80-%ED%8E%B8%ED%96%A5-%EB%B6%84%EC%82%B0-%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%EC%98%A4%ED%94%84</guid>
            <pubDate>Sun, 30 Apr 2023 10:36:32 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-13-다항-회귀-편향-분산-트레이드-오프">✏️ 13. 다항 회귀, 편향-분산 트레이드 오프</h2>
<hr>
<h2 id="다항-회귀polynormial-regression">다항 회귀(Polynormial Regression)</h2>
<ul>
<li>다항 회귀는 <code>𝑦 = 𝑤0 + 𝑤1𝑥1 + 𝑤2𝑥2 + 𝑤3𝑥1𝑥2 + 𝑤4𝑥1**2 + 𝑤5𝑥2**2</code>과 같이 회귀식이 독립변수의 단항식이 아닌 2차, 3차 방정식과 같은 형태로 표현되는 것을 지칭한다</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/59c4a42c-a441-4d03-ada6-108e0db7629c/image.png" alt=""></p>
<ul>
<li>데이터 세트에 대해서 Feature에 대해 Target 값의 관계를 단순 선형 회귀 직선으로 표현한 것 보다 다항 회귀 곡선으로 표현한 것이 더 예측 성능이 높다.</li>
</ul>
<br />

<h2 id="선형-회귀와-비선형-회귀의-구분">선형 회귀와 비선형 회귀의 구분</h2>
<ul>
<li><p>선형 회귀</p>
<ul>
<li><p><code>𝑦 = 𝑤0 + 𝑤1𝑥1 + 𝑤2𝑥2 + 𝑤3𝑥1𝑥2 + 𝑤4𝑥1**2 + 𝑤5𝑥2**2</code> 에서 만약 새로운 변수인 𝑍를 <code>𝑍 = [𝑥1, 𝑥2, 𝑥1𝑥2, 𝑥1**2, 𝑥2**2]</code>로 정의한다면 <code>𝑦 = 𝑤0 + 𝑤1𝑧1 + 𝑤2𝑧2 + 𝑤3𝑧3 + 𝑤4𝑧4 + 𝑤5𝑧5</code> 로 표현되기 때문에 다항 회귀가 곡선으로 표현된다고 해서 비선형 회귀인 것은 아니다.</p>
</li>
<li><p>즉 다항 회귀는 선형 회귀 이며 회귀에서 선형 회귀 / 비선형 회귀를 나누는 기준은 회귀 계수가 선형 / 비선형인지에 따른 것이지 독립 변수의 선형 / 비선형 여부와는 무관하다.</p>
</li>
</ul>
</li>
<li><p>비선형 회귀</p>
<ul>
<li><code>𝑦 = 𝑤1 cos 𝑥 + 𝑤4 + 𝑤2 cos(2𝑥 + 𝑤4) + 𝑤3</code> cos 함수를 이용해 각각의 계수 𝑤가 묶여 있기 때문에 비선형 회귀이다</li>
</ul>
</li>
</ul>
<br />

<h2 id="사이킷런-다항회귀">사이킷런 다항회귀</h2>
<ul>
<li><p>사이킷런에는 다항회귀 API가 존재하지는 않기 때문에 PolynomialFeatures 클래스를 이용해 원본 단항 피처를 단항 피처로 변환해 LinearRegression을 적용시켜야 한다.</p>
</li>
<li><p>단항 피처 <code>[𝑥1, 𝑥2]</code>의 차수(degree)를 2차 다항 피처로 변환시키면 <code>(𝑥1 + 𝑥2)**2</code>의 식 전개에 대응되는<code>[1, 𝑥1, 𝑥2, 𝑥1𝑥2, 𝑥1**2, 𝑥2**2]</code>의 다항 피처로 변환된다.</p>
<ul>
<li>1차 단항 피처가 <code>𝑥1, 𝑥2 = [0, 1]</code>이라면 2차 다항 피처는 <code>[1, 𝑥1 = 0, 𝑥2 = 1, 𝑥1𝑥2 = 0,𝑥1 2 = 0, 𝑥22 = 1]</code> 형태인 <code>[1, 0, 1, 0, 0, 1]</code>이 된다.</li>
</ul>
</li>
</ul>
<br />

<h2 id="과대적합-과소적합">과대적합, 과소적합</h2>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/044f8623-4294-4a4f-8b87-7cf93aac3989/image.png" alt=""></p>
<ul>
<li><p>Degree 1: 그림은 방향성만 고려하고, 실제 데이터를 고려하지는 못한다. (과소적합)</p>
</li>
<li><p>Degree 4: 그림은 데이터의 방향성과 실제 데이터를 적절히 고려한다. (일반화)</p>
</li>
<li><p>Degree 15: 그림은 모델의 변동성이 매우 심하다. 즉 데이터를 너무 과하게 해석한다. (과대적합)</p>
</li>
</ul>
<ul>
<li><p><code>과소적합</code>은 문제를 굉장히 단순하게 보기 때문에 약간만 문제가 복잡해져도 해결하지 못한다.</p>
</li>
<li><p><code>과대적합</code>은 단순한 문제를 고차원으로 풀기 때문에 훈련 데이터에 대해서는 잘 맞을지 모르나, 테스트 데이터에 대한 성능은 매우 떨어질 수 있다</p>
</li>
</ul>
<br />

<h2 id="편향-분산-트레이드-오프">편향-분산 트레이드 오프</h2>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/f6c13b1c-5108-41f1-a6ad-3bc674f45106/image.png" alt=""></p>
<ul>
<li><p>Bias(편향)는 훈련 데이터에 대한 방향성, 예측이 정확하게 방향성을 잘 잡고 가고 있는가를 의미한다. </p>
</li>
<li><p>훈련 데이터와 모델 예측의 차이. 즉 에러를 의미한다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/c239e779-b626-4161-90fe-d35a9993b81f/image.png" alt=""></p>
<ul>
<li><p>Variance(분산)은 테스트 데이터를 예측 할 때 마다 초점에서 얼마만큼 벗어나는가를 의미한다. </p>
</li>
<li><p>즉 훈련 데이터 예측에 대한 분산이 커지면, 테스트 세트의 예측이 잘 안된다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/a3ec05d1-42e4-41e5-b9ae-c1034697c1d0/image.png" alt=""></p>
<ol>
<li><p><code>Best</code>인 상황. 방향성과 예측하고자 하는 초점이 정확하게 맞는다</p>
</li>
<li><p>머신러닝 모델을 만들었을 때 많이 만나볼 수 있는 상황이다. 방향성은 괜찮지만 예측 시 이리저리 산만하게 분산되는 것을 알 수 있다. 이 상태가 바로 <code>과대적합 상태</code>이다.</p>
</li>
<li><p>예측 방향이 잘못 됐으나, 테스트 할 때마다 비슷하게 값이 모여 있는 경우이다. <code>예측 전 세팅이 잘못 되어 있는 경우</code>이다</p>
</li>
<li><p>방향성, 예측의 초점이 모두 엉망이다. 즉 데이터를 하나도 반영하지 못하는 <code>과소적합 상태</code>라고 볼 수 있다</p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/044f8623-4294-4a4f-8b87-7cf93aac3989/image.png" alt=""></p>
<ul>
<li><p>일반적으로 편향이 높으면 분산은 낮아지고 편향이 낮아지면 분산이 높은 경향이 많다.</p>
</li>
<li><p>Degree 1: 1차원 직선으로 예측했기 때문에 예측의 분산이 낮다. 하지만 편향이 높다. (과소적합)</p>
</li>
<li><p>Degree 4: 데이터의 방향성과 실제 데이터를 적절히 고려한다. (일반화)</p>
</li>
<li><p>Degree 15: 모든 데이터 포인트를 예측을 하였기 때문에 편향은 낮으나 모델 예측의 분산은 높다 (과대적합)</p>
</li>
</ul>
<br />

<h3 id="모델-복잡도에-따른-편향-분산-트레이드-오프">모델 복잡도에 따른 편향-분산 트레이드 오프</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/201c4cf6-25dd-4f40-86d6-1d6d16a549f9/image.png" alt=""></p>
<ol>
<li><p><code>Underfit</code>: 모델의 복잡도가 낮은 상태. 모델이 훈련 데이터를 잘 파악하지 못하고 있는 상태이다. 편향이 크고(방향성이 맞지 않고) 분산은 낮은(모델은 단순한) 과소적합 상태를 뜻한다.</p>
</li>
<li><p><code>Trade-off fit</code>: 모델이 최적의 편향과 분산을 찾은 상태이다.</p>
</li>
<li><p><code>Overfit</code>: 모델이 훈련 데이터를 과하게 해석한 상태이다. 편향은 낮으나(방향성은 제대로) 분산이 매우 높아(모델이 매우 복잡함) 과대적합 상태를 뜻한다.</p>
</li>
</ol>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/linear_model.html">https://scikit-learn.org/stable/modules/linear_model.html</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 12. 선형 회귀]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-12.-LinearRegression</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-12.-LinearRegression</guid>
            <pubDate>Sun, 30 Apr 2023 09:47:24 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-12-선형-회귀">✏️ 12. 선형 회귀</h2>
<hr>
<h2 id="linearregression-클래스">LinearRegression 클래스</h2>
<pre><code class="language-py">sklearn.linear_model.LinearRegression(fit_intercept=True,normalize=False)</code></pre>
<ul>
<li><p>LinearRegression 클래스는 예측값과 실제값의 RSS를 최소화하는 OLS(Ordinary Least Squares) 추정 방식으로 구현한 클래스이다.</p>
</li>
<li><p>LinearRegression 클래스는 훈련(fit) 시에 회귀 계수(Coefficients)인 W를 coef_ 속성에 저장한다.</p>
<ul>
<li>단, 절편(bias, intercept)는 intercept_ 속성에 저장된다.</li>
</ul>
</li>
</ul>
<br />

<h4 id="fit_intercept">fit_intercept</h4>
<ul>
<li><p>절편 값을 계산할 것인지 여부 결정한다.</p>
</li>
<li><p>False로 설정 시 intercept가 0으로 지정된다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/10137fad-de1e-4859-94b0-aa6faf5c3716/image.png" alt=""></p>
<h4 id="normalize">normalize</h4>
<ul>
<li><p>fit_intercept가 False인 경우엔 무시된다.</p>
</li>
<li><p>True로 설정하면 회귀를 수행 하기 전 입력 데이터 세트를 정규화(Standard Scaling)한다.</p>
</li>
<li><p>대체로 사용하지 않는 것을 추천한다.</p>
</li>
</ul>
<br />

<h3 id="선형-회귀의-다중-공선성-문제">선형 회귀의 다중 공선성 문제</h3>
<ul>
<li><p>일반적으로 선형 회귀는 입력 Feature의 독립성에 많은 영향을 받는다.</p>
</li>
<li><p>Feature간의 상관관계가 매우 높은 경우 분산이 매우 커져서 오류에 매우 민감해지는 현상을 다중공선성(multi-collinearity)라고 한다.</p>
</li>
<li><p>일반적으로 상관관계가 높은 Feature가 많은 경우 독립적인 중요한 Feature만 남기고 제거하거나 규제를 적용한다.</p>
</li>
<li><p>EX</p>
<ul>
<li><p>평수(25평, 34평), 제곱 미터(59𝑚2, 84𝑚2)</p>
</li>
<li><p>자동차 무게와 연비</p>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="사이킷런-linearregression-클래스">사이킷런 LinearRegression 클래스</h3>
<br />

<table>
<thead>
<tr>
<th align="center">파이썬 Wrapper</th>
<th align="center">사이킷런 Wrapper</th>
<th align="center">하이퍼 파라미터 설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center">lambda</td>
<td align="center">reg_lambda</td>
<td align="center">L2 규제(regularization) 적용 값. 기본값은 1로서 값이 클 수록 규제 값이 커진다. 과적합 제어</td>
</tr>
<tr>
<td align="center">alpha</td>
<td align="center">reg_alpha</td>
<td align="center">L1 규제(regularization) 적용 값. 기본값은 0으로서 값이 클 수록 규제 값이 커진다. 과적합 제어</td>
</tr>
<tr>
<td align="center">early_stopping_round</td>
<td align="center">early_stopping_rounds</td>
<td align="center">학습 조기 종료를 위한 early stopping interval 값</td>
</tr>
<tr>
<td align="center">num_leaves</td>
<td align="center">num_leaves</td>
<td align="center">최대 리프 노드 개수</td>
</tr>
<tr>
<td align="center">min_sum_hessian_in_leaf</td>
<td align="center">min_child_weight</td>
<td align="center">결정트리의 min_child_leaf와 유사. 과적합 조절용</td>
</tr>
<tr>
<td align="center"><br /></td>
<td align="center"></td>
<td align="center"></td>
</tr>
</tbody></table>
<h3 id="선형-회귀를-위한-데이터-변환">선형 회귀를 위한 데이터 변환</h3>
<ul>
<li><p>선형 회귀 모델은 일반적으로 피처와 타겟값 간에 선형의 관계가 있다고 가정하고 이러한 최적의 선형 함수를 찾아내
결과 값을 예측한다.</p>
</li>
<li><p>선형 회귀 모델은 피처값과 타겟값의 분포가 정규 분포인 형태를 선호한다</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/2d0e6d26-5188-453e-901f-49a6cd77b32e/image.png" alt=""></p>
<h4 id="데이터-변환-방법">데이터 변환 방법</h4>
<br />

<table>
<thead>
<tr>
<th align="center">변환 대상</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Target 변환</td>
<td>타겟값은 정규 분포를 선호한다. Skew 되어 있을 경우 주로 로그 변환을 적용한다</td>
</tr>
<tr>
<td align="center">Feature 변환 – Scaling</td>
<td>Feature들에 대한 균일한 스케일링 / 정규화를 적용한다.<br>StandardScaler를 이용하여 표준 정규 분포 형태 또는 MinMaxScaler를 이용하여 최솟값 0, 최댓값 1로 변환한다.</td>
</tr>
<tr>
<td align="center">Feature 변환 – 다항 특성 변환</td>
<td>스케일링 / 정규화를 수행한 데이터 세트에 다시 다항 특성(Polynomial Feature)을 적용하여 변환한다.</td>
</tr>
<tr>
<td align="center">Feature 변환 – 로그 변환</td>
<td>왜도(Skewness)가 심한 중요 Feature들에 대해서 로그 변환을 적용한다. 일반적으로 많이 사용된다</td>
</tr>
</tbody></table>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/linear_model.html">https://scikit-learn.org/stable/modules/linear_model.html</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 11. RSS와 경사하강법]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-11.-RSS%EC%99%80-%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-11.-RSS%EC%99%80-%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95</guid>
            <pubDate>Sat, 29 Apr 2023 11:21:05 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-11-rss와-경사하강법">✏️ 11. RSS와 경사하강법</h2>
<hr>
<h2 id="rss-기반의-회귀-오류-측정">RSS 기반의 회귀 오류 측정</h2>
<ul>
<li>RSS : 각 데이터 포인트의 오류 값(𝐸𝑟𝑟𝑜𝑟𝑖)의 제곱을 구해서 더하는 방식.
일반적으로 미분 등의 계산을 편리하게하기 위해서 RSS 방식으로 오류 합을 구한다. 
즉, ∑𝐸𝑟𝑟𝑜𝑟2 = 𝑅𝑆𝑆 이다</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/7e6c180c-ffec-465c-98d9-c1f988f579aa/image.png" alt=""></p>
<br />

<h3 id="rss의-이해">RSS의 이해</h3>
<ul>
<li><p>RSS는 이제 변수가 𝑤0, 𝑤1인 식으로 표현할 수 있으며, 이 RSS를 최소로 하는 회귀 계수(𝑤0, 𝑤1)를 학습을 통해서 찾는 것이 머신러닝 기반 회귀의 핵심 사항</p>
</li>
<li><p>RSS는 회귀식의 독립변수 X, 종속변수 Y가 중심 변수가 아니라 회귀 계수 𝑤가 중심 변수임을 인지하는 것이 매우 중요하다.</p>
</li>
<li><p>학습 데이터로 입력되는 독립변수와 종속변수는 RSS에서 모두 상수로 간주</p>
</li>
<li><p>일반적으로 RSS는 학습 데이터의 건수로 나누어서 다음과 같이 정규화된 식으로 표현</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/30c9b0bc-f2c4-4048-878e-14666cd62b9b/image.png" alt=""></p>
<br />

<h3 id="회귀의-비용-함수">회귀의 비용 함수</h3>
<ul>
<li><p>회귀에서 RSS는 비용(Cost)이며 w 변수(회귀 계수)로 구성되는 RSS를 비용 함수(Cost Function)라 한다.</p>
</li>
<li><p>머신러닝 회귀 알고리즘은 데이터를 계속 학습하면서 이 비용 함수가 반환하는 값(오류 값)을 지속해서 감소</p>
</li>
<li><p>최종적으로는 더 이상 감소하지 않는 최소의 오류 값을 구하는 것이 목적.</p>
</li>
<li><p>비용 함수를 손실함수(Loss Function)라고도 한다.</p>
</li>
</ul>
<br />

<h2 id="경사-하강법gradient-descent">경사 하강법(Gradient Descent)</h2>
<ul>
<li><p>W 파라미터의 개수가 적다면 고차원 방정식으로 비용 함수가 최소가 되는 𝑤 변숫값을 도출할 수 있다.</p>
</li>
<li><p>하지만 𝑤 파라미터가 많다면 고차원 방정식을 동원하더라도 해결하기가 힘들다.</p>
<ul>
<li>𝑤가 2개라면 이차방정식, 3개라면 삼차방정식… 100개면? 백차방정식이 된다.</li>
</ul>
</li>
<li><p>경사 하강법은 이러한 고차원 방정식에 대한 문제를 해결해주면서 비용 함수 RSS를 최소화하는 방법을 직관적으로 제공하는 뛰어난 방식이다.</p>
</li>
<li><p>경사 하강법의 사전적 의미는 ‘점진적 하강’ 으로 ‘점진적으로’ 반복적인 계산을 통해 𝑊 파라미터 값을 업데이트 하면서 오류 값이 최소가 되는 𝑊 파라미터를 구하는 방식이다</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/977ab112-1cf1-4f07-9541-0e91eb951edd/image.png" alt=""></p>
<ul>
<li><p>경사 하강법은 반복적으로 비용 함수의 반환 값, 즉 예측값과 실제값의 차이가 작아지는 방향성을 가지고 𝑊 파라미터를 지속해서 보정해 나간다.</p>
</li>
<li><p>최소 오류 값이 100이었다면 두 번째 오류 값은 100보다 작은 90, 세 번째는 80과 같은 방식으로 지속해서 오류를 감소시키는 방향으로 𝑊 파라미터 값을 계속 업데이트 해 나간다.</p>
</li>
<li><p>오류 값이 더 이상 작아지지 않으면 그 오류 값을 최소 비용으로 판단하고 그 때의 𝑊 파라미터를 최적 파라미터로 반환한다.</p>
</li>
</ul>
<br />

<h3 id="미분을-통한-비용-함수의-최소값-찾기">미분을 통한 비용 함수의 최소값 찾기</h3>
<ul>
<li>어떻게 하면 오류가 작아지는 방향으로 𝑊 값을 보정할 수 있을까?</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/e326e436-ec8b-49b4-a77b-ae3b60e1c8cd/image.png" alt=""></p>
<ul>
<li><p>비용 함수가 다음 그림과 같은 포물선 형태의 2차함수라면 경사 하강법은 최초 𝑊 에서부터 미분을 적용한 뒤 이 미분 값이 계속 감소하는 방향으로 순차적으로 𝑊 를 업데이트 한다.</p>
</li>
<li><p>마침내 더 이상 미분 된 1차 함수의 기울기가 감소하지 않는 지점을 비용 함수가 최소인 지점으로 간주하고 그 때의 𝑊 를 반환한다.</p>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 10. 회귀 알고리즘]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-10.-%ED%9A%8C%EA%B7%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-10.-%ED%9A%8C%EA%B7%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Sat, 29 Apr 2023 11:03:57 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-10-회귀-알고리즘">✏️ 10. 회귀 알고리즘</h2>
<hr>
<h2 id="회귀regression-개념">회귀(Regression) 개념</h2>
<ul>
<li><p>회귀는 현대 통계학을 이루는 큰 축</p>
</li>
<li><p>회귀 분석은 유전적 특성을 연구하던 영국의 통계학자 갈톤(Galton)이 수행한 연구에서 유래했다는 것이 일반론</p>
<ul>
<li>“부모의 키가 크더라도 자식의 키가 대를 이어 무한정 커지지 않으며, 
부모의 키가 작더라도 대를 이어 자식의 키가 무한정 작아지지 않는다.”</li>
</ul>
</li>
<li><p>회귀 분석은 이처럼 데이터 값이 평균과 같은 일정한 값으로 돌아가려는 경향을 이용한 통계학 기법</p>
</li>
</ul>
<br />

<h3 id="회귀-개요">회귀 개요</h3>
<ul>
<li><p>회귀는 여러 개의 독립변수(X)와 한 개의 종속변수(y) 간의 상관관계를 모델링하는 기법을 통칭한다.</p>
</li>
<li><p>𝑦 = 𝑓(𝑋)</p>
<ul>
<li><code>아파트 가격 &lt; - &gt; 방 개수, 아파트 크기, 주변 학군, 역과의 거리 등</code>
<code>𝑦 = 𝑤1𝑥1 + 𝑤2𝑥2 + 𝑤3𝑥3 + ⋯ + 𝑤𝑛𝑥𝑛</code></li>
</ul>
</li>
<li><p>𝑦 는 종속변수, 즉 아파트 가격</p>
</li>
<li><p>𝑥1, 𝑥2, 𝑥3, ⋯ , 𝑥𝑛은 방 개수, 아파트 크기, 주변 학군, 역과의 거리 등 독립 변수</p>
</li>
<li><p>𝑤1, 𝑤2, 𝑤3, ⋯ , 𝑤𝑛은 이 독립 변수의 값에 영향을 미치는 회귀 계수(Regression Coefficients)</p>
</li>
</ul>
<blockquote>
<p>머신러닝 회귀 예측의 핵심은 주어진 Feature와 Target 데이터 기반에서 학습을 통해 최적의 회귀 계수를 찾아내는 것이다.</p>
</blockquote>
<br />

<h2 id="회귀-유형">회귀 유형</h2>
<ul>
<li><p>회귀는 회귀 계수의 선형/비선형 여부, 독립변수의 개수, 종속변수의 개수에 따라 여러 가지 유형으로 나뉜다.</p>
</li>
<li><p>회귀에서 가장 중요한 것은 회귀 계수로서, 이 회귀 계수가 선형인지 아닌지에 따라 선형 회귀와 비선형 회귀로 나눌 수 있다.</p>
</li>
<li><p>독립변수의 개수가 한 개인지 여러 개인지에 따라 단일 회귀, 다중 회귀로 나뉘게 된다.</p>
</li>
<li><p>정형 데이터의 경우 선형 회귀가 비선형 회귀보다 대부분의 경우 성능이 월등히 좋다.</p>
</li>
</ul>
<br />


<table>
<thead>
<tr>
<th align="center">독립변수 개수</th>
<th align="center">회귀 계수의 결합</th>
</tr>
</thead>
<tbody><tr>
<td align="center">1개 : 단일 회귀</td>
<td align="center">선형 : 선형 회귀</td>
</tr>
<tr>
<td align="center">여러 개 : 다중 회귀</td>
<td align="center">비선형 : 비선형 회귀</td>
</tr>
</tbody></table>
<br />


<h3 id="선형-회귀의-종류">선형 회귀의 종류</h3>
<ul>
<li><p>일반 선형 회귀(LinearRegression) </p>
<ul>
<li>예측값과 실제 값의 RSS(Residual Sum of Squares)를 최소화할 수 있도록 회귀 계수를 최적화하며, 
규제(Regularization)를 적용하지 않은 모델</li>
</ul>
</li>
<li><p>릿지(Ridge)</p>
<ul>
<li>릿지 회귀는 선형 회귀에 L2 규제를 추가한 회귀 모델</li>
</ul>
</li>
<li><p>라쏘(Lasso)</p>
<ul>
<li>라쏘 회귀는 선형 회귀에 L1 규제를 적용한 방식</li>
</ul>
</li>
<li><p>엘라스틱넷(ElasticNet)</p>
<ul>
<li>L2, L1 규제를 함께 결합한 모델</li>
</ul>
</li>
<li><p>로지스틱 회귀(Logistic Regression)</p>
<ul>
<li>로지스틱 회귀는 회귀라는 이름이 붙어있지만, 사실은 분류에 사용되는 선형 모델</li>
</ul>
</li>
</ul>
<br />


<h2 id="단순-선형-회귀simple-regression을-통한-회귀의-이해">단순 선형 회귀(Simple Regression)을 통한 회귀의 이해</h2>
<ul>
<li>가격이 아파트 평수로만 결정 되는 단순 선형 회귀로 가정하면 다음과 같이 가격은 아파트 평수에 대해 선형(직선 형태)의 관계로 표현이 가능하다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/b52cc030-f019-49dc-94dd-1e5db69948a2/image.png" alt=""></p>
<blockquote>
<p>최적의 회귀 모델을 만든다는 것은 전체 데이터의 잔차(오류 값) 합이 최소가 되는 모델을 만든다는 의미이며 동시에 오류 값의 합이 최소가 될 수 있는 최적의 회귀 계수 w를 찾는다는 의미이다.</p>
</blockquote>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 09. 앙상블 학습 : 부스팅]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-09.-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-%EB%B6%80%EC%8A%A4%ED%8C%85</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-09.-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-%EB%B6%80%EC%8A%A4%ED%8C%85</guid>
            <pubDate>Fri, 28 Apr 2023 02:00:20 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-09-앙상블-학습--부스팅">✏️ 09. 앙상블 학습 : 부스팅</h2>
<hr>
<h2 id="앙상블-학습">앙상블 학습</h2>
<ul>
<li><p>앙상블 학습을 통한 분류는 여러 개의 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법을 일컫는다.</p>
</li>
<li><p>복합적이고 어려운 문제의 결론을 내기 위해 각 분야 별 전문가들의 다양한 의견을 수렴하고 결정하듯이 앙상블 학습의 목표는 다양한 분류기의 예측 결과를 결합함으로써 단일 분류기보다 신뢰성이 높은 예측값을 얻는 것이다</p>
</li>
</ul>
<br />

<h3 id="앙상블의-유형">앙상블의 유형</h3>
<ul>
<li><p>앙상블의 유형은 <code>보팅(Voting)</code>, <code>배깅(Bagging)</code>, <code>부스팅(Boosting)</code>으로 구분할 수 있으며 이외에 <code>스태킹(Stacking)</code> 등의 기법이 있다.</p>
</li>
<li><p>대표적인 배깅 방식은 랜덤 포레스트 알고리즘이 있으며, 
부스팅은 에이다 부스팅, 그라디언트 부스팅, XGBoost, LightGBM 등이 존재한다.</p>
</li>
<li><p>정형 데이터의 분류나 회귀에서는 GBM 부스팅 계열의 앙상블이 전반적으로 높은 예측 성능을 나타낸다.</p>
</li>
<li><p>넓은 의미로는 서로 다른 모델을 결합한 것들을 앙상블로 지칭하기도 한다.</p>
</li>
</ul>
<br />

<h3 id="앙상블의-특징">앙상블의 특징</h3>
<ul>
<li><p>단일 모델의 약점을 다수의 모델들을 결합하여 보완</p>
</li>
<li><p>뛰어난 성능을 가진 모델들로만 구성하는 것보다 성능이 떨어지더라도 서로 다른 유형의 모델을 섞는 것이 오히려 전체 성능에 도움이 됨</p>
</li>
<li><p>랜덤 포레스트 및 뛰어난 부스팅 알고리즘들은 모두 결정 트리 알고리즘을 기반 알고리즘으로 적용함</p>
</li>
<li><p>결정 트리의 단점인 과적합(오버피팅)을 수십~수천개의 많은 분류기를 결합해 보완하고 
장점인 직관적인 분류 기준은 강화됨</p>
</li>
</ul>
<br />

<h2 id="부스팅boosting">부스팅(Boosting)</h2>
<ul>
<li><p>부스팅 알고리즘은 여러 개의 약한 학습기(Weak Learner)를 순차적으로 학습 - 예측한 데이터나 
학습 트리에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식</p>
</li>
<li><p>부스팅의 대표적인 구현은 <code>AdaBoost(Adaptive Boosting</code>)과 <code>그라디언트 부스트</code>가 있음</p>
</li>
</ul>
<br />

<h3 id="에이다-부스팅의-학습예측-프로세스">에이다 부스팅의 학습/예측 프로세스</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/5cab88ce-8568-4d30-b968-d882deaccd90/image.png" alt=""></p>
<ul>
<li><p>Step 1: 첫 번째 분류 기준에서 2개의 동그라미는 잘 예측 했으나, 3개의 동그라미는 잘 예측하지 못함</p>
</li>
<li><p>Step 2: 잘못 예측된 3개의 파란색 동그라미에 가중치를 부여. 중요한 값이라고 알려줌</p>
<ul>
<li>근데 그러다 보니 또다시 노란색 데이터에서는 오류가 발생함. 
따라서 이전과 마찬가지로 노란색 데이터를 잘 분류할 수 있도록 가중치를 부여</li>
</ul>
</li>
<li><p>Step 3: 그 다음 학습기에서는 이전 단계에서 잘못 분류된 데이터를 맞추려고 노력함</p>
</li>
<li><p>Step 4: 노란색 데이터에 가중치가 부여됨</p>
</li>
<li><p>Step 5: 가중치가 부여된 노란색 원을 분류하기 위한 분류 기준이 만들어짐</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/f9ffed40-420a-4060-9121-fc175d756646/image.png" alt=""></p>
<ul>
<li>Step 1, Step 3, Step 5 즉, 분류기준 1, 2, 3에 의해 결과물이 도출 된다.</li>
</ul>
<br />

<h3 id="gbmgradient-boost-machine-개요">GBM(Gradient Boost Machine) 개요</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/31513a6a-12e3-4344-9e18-a6351c12f684/image.png" alt=""></p>
<ul>
<li><p>GBM도 AdaBoost와 유사하나, 가중치 업데이터를 경사 하강법을 이용한다.</p>
</li>
<li><p>feature(x)를 입력했을 때 모델의 예측 함수를 F(x), 실제 타깃값을 y라고 한다면 오류식 h(x) = y – F(x)가 된다. 
이 h(x)를 최소화 하는 방향성을 가지고 반복적으로 가중치 값을 갱신하는 것이 경사하강법이다.</p>
</li>
<li><p>경사 하강법은 반복 수행을 통해 오류를 최소화 할 수 있도록 가중치의 업데이트 값을 도출하는 기법으로서 머신러닝에서 매우 중요한 기법 중 하나이다</p>
</li>
</ul>
<br />

<h3 id="사이킷런-gbm-주요-하이퍼-파라미터-및-튜닝">사이킷런 GBM 주요 하이퍼 파라미터 및 튜닝</h3>
<ul>
<li><p><code>loss</code> : 경사 하강법에서 사용할 손실 함수 지정. 기본은 deviance</p>
</li>
<li><p><code>learning_rate</code> : GBM이 학습을 진행할 때 마다 적용하는 학습률. Weak Learner가 순차적으로 오류 값을 보정해 나가는데 적용하는 계수로서, 0 ~ 1 사이의 값을 지정한다. </p>
<ul>
<li><p>너무 작은 값을 적용하면 업데이트 되는 값이 작아져서 최소 오류 값을 찾아 예측 성능이 높아질 가능성이 높으나, 많은 Weak Learner는 순차적인 반복이 필요해서 수행 시간이 오래 걸리고, 또 너무 작게 설정하면 모든 Weak Learner의 반복이 완료되어도 최소 오류 값을 찾지 못할 가능성이 생긴다. </p>
</li>
<li><p>반대로 너무 큰 값을 적용하면 최소 오류 값을 찾지 못하고 그냥 지나쳐 버려 예측 성능이 떨어질 가능성이 높아지지만 빠른 수행이 가능하다.</p>
</li>
</ul>
</li>
<li><p><code>n_estimators</code> : Weak Learner의 개수. </p>
<ul>
<li>Weak Learner가 순차적으로 오류를 보정하므로 개수가 많을 때는 예측 성능이 일정 수준까지는 좋아질 수는 있으나 개수가 많을수록 수행 시간이 오래 걸린다. 기본값은 100</li>
</ul>
</li>
<li><p><code>subsample</code>: Weak Learner가 학습에 사용하는 데이터의 샘플링 비율로서 기본값은 1이다. </p>
<ul>
<li>기본적으로 전체 학습 데이터를 기반으로 학습하는데, 과적합이 염려되는 경우 subsample을 1보다 작은 값으로 설정하면 된다.</li>
</ul>
</li>
</ul>
<br />

<h3 id="xgboostextra-gradient-boost-개요">XGBoost(eXtra Gradient Boost) 개요</h3>
<ul>
<li><p>주요 장점</p>
<ul>
<li><p>뛰어난 예측 성능</p>
</li>
<li><p>GBM 대비 빠른 수행 시간. CPU 병렬 처리, GPU 지원</p>
</li>
<li><p>다양한 성능 향상 기능</p>
</li>
<li><p>규제(Regularization) 기능 탑재</p>
</li>
<li><p>Tree Pruning (가지치기)</p>
</li>
<li><p>다양한 편의 기능</p>
</li>
<li><p>조기 중단(Early Stopping)</p>
</li>
<li><p>자체 내장된 교차 검증</p>
</li>
<li><p>결손값 자체 저리</p>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="xgboost-조기-중단-기능early-stopping">XGBoost 조기 중단 기능(Early Stopping)</h3>
<ul>
<li><p>XGBoost는 특정 반복 횟수 만큼 더 이상 손실함수가 감소하지 않으면 지정된 반복횟수를 다 완료하지 않고 수행을 종료할 수 있다.</p>
</li>
<li><p>학습을 위한 시간을 단축시킨다. 특히 최적화 튜닝 단계에서 적절하게 사용이 가능하다.</p>
</li>
<li><p>너무 반복 횟수를 단축할 경우 예측 성능 최적화가 안된 상태에서 학습이 종료될 수 있으므로 유의해야 한다.</p>
</li>
<li><p>조기중단 설정 파라미터</p>
<ul>
<li><p><code>early_stopping_rounds</code> : 더 이상 손실 평가 지표가 감소하지 않는 최대 반복 횟수</p>
</li>
<li><p><code>eval_metric</code> : 반복 수행 시 사용하는 비용 평가 지표</p>
</li>
<li><p><code>eval_set</code> : 평가를 수행하는 별도의 검증 데이터 세트 설정. 일반적으로 검증 데이터 세트에서 반복적으로 손실 감소 성능을 평가</p>
</li>
</ul>
</li>
</ul>
<br />


<h3 id="xgboost-python-wrapper-와-scikit-learn-wrapper-하이퍼-파라미터-비교">XGboost Python Wrapper 와 Scikit Learn Wrapper 하이퍼 파라미터 비교</h3>
<br />

<table>
<thead>
<tr>
<th>항목</th>
<th>파이썬 Wrapper</th>
<th>사이킷런 Wrapper</th>
</tr>
</thead>
<tbody><tr>
<td>사용 모듈</td>
<td>from xgboost as xgb</td>
<td>from xgboost import XGBClassifier</td>
</tr>
<tr>
<td>학습용과 테스트용<br>데이터 세트</td>
<td>DMatrix 객체를 별도 생성<br>train = xgb.DMatrix(data=X_train, label=y_train)<br>DMatrix 생성자로 피처 데이터 세트와 레이블 데이터 세트를 입력</td>
<td>Numpy 또는 Pandas 사용</td>
</tr>
<tr>
<td>학습 API</td>
<td>xgb_model = xgb.train()<br>xgb_model은 학습된 객체를 반환 받음</td>
<td>XGBClassifier.fit()</td>
</tr>
<tr>
<td>예측 API</td>
<td>xgb.train()으로 학습된 객체에서 predict() 호출. <br>즉, xgb_model.predict()<br>이때 반환 결과는 예측 결과가 아닌 예측 결과를 추정하는 확률값</td>
<td>XGBClassifier.predict()<br>예측 결과값 반환</td>
</tr>
<tr>
<td>피처 중요도 시각화</td>
<td>plot_importance() 함수 이용</td>
<td>plot_importance() 함수 이용</td>
</tr>
<tr>
<td><br /></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<br />

<table>
<thead>
<tr>
<th>파이썬 Wrapper</th>
<th>사이킷런 Wrapper</th>
<th>하이퍼 파라미터 설명</th>
</tr>
</thead>
<tbody><tr>
<td>eta</td>
<td>learning_rate</td>
<td>GBM의 학습률과 같은 파라미터. 파이썬 래퍼 기반의 xgboost를 사용할 때의 기본값은 0.3,<br>사이킷런 래퍼 클래스를 사용할 때는 0.1</td>
</tr>
<tr>
<td>num_boost_rounds</td>
<td>n_estimators</td>
<td>사이킷런 앙상블의 n_estimators와 동일. 약한 학습기의 개수(반복 수행 횟수)</td>
</tr>
<tr>
<td>min_child_weight</td>
<td>min_child_weight</td>
<td>결정트리의 min_child_leaf와 유사</td>
</tr>
<tr>
<td>max_depth</td>
<td>max_depth</td>
<td>결정트리의 max_depth와 동일. 트리의 최대 깊이</td>
</tr>
<tr>
<td>sub_sample</td>
<td>subsample</td>
<td>GBM의 subsample과 동일. <br>트리가 커져서 과적합 되는 것을 방지하기 위해 데이터를 샘플링할 비율을 지정. <br>일반적으로 0.5 ~ 1 사이의 값을 사용</td>
</tr>
<tr>
<td>lambda</td>
<td>reg_lambda</td>
<td>L2 규제(regularization) 적용 값. 기본값은 1로서 값이 클 수록 규제 값이 커진다. 과적합 제어</td>
</tr>
<tr>
<td>alpha</td>
<td>reg_alpha</td>
<td>L1 규제(regularization) 적용 값. 기본값은 0으로서 값이 클 수록 규제 값이 커진다. 과적합 제어</td>
</tr>
<tr>
<td>colsample_bytree</td>
<td>colsample_bytree</td>
<td>GBM의 max_features와 유사함. 트리 생성에 필요한 피처를 임의로 샘플링 하는 데 사용된다. <br>매우 많은 피처가 있는 경우 과적합을 조정하는 데 적용한다.</td>
</tr>
<tr>
<td>scale_pos_weight</td>
<td>scale_pos_weight</td>
<td>특정 값으로 치우친 비대칭한 클래스로 구성된 데이터 세트의 균형을 유지하기 위한 파라미터. <br>기본값은 1</td>
</tr>
<tr>
<td>gamma</td>
<td>gamma</td>
<td>트리의 리프 노드를 추가적으로 나눌지를 결정하는 최소 손실 감소 값. <br>해당 값보다 큰 손실이 감소된 경우에 리프 노드를 분리. 값이 커질수록 과적합 감소 효과가 있음.</td>
</tr>
</tbody></table>
<br />

<h3 id="lightgbm-개요">LightGBM 개요</h3>
<ul>
<li><p>XGBoost 대비 장점</p>
<ul>
<li><p>더 빠른 학습과 예측 수행 시간</p>
</li>
<li><p>더 작은 메모리 사용량</p>
</li>
<li><p>카테고리 피처의 자동 변환과 최적 분할(One Hot Encoding)을 사용하지 않고도 카테고리형 피처를 최적으로 변환하고 이에 따른 분할 노드 수행)</p>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="lightgbm-작동-방식">LightGBM 작동 방식</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/dd575c1c-540c-41ce-b75d-8dde5037f748/image.png" alt=""></p>
<ul>
<li><p>균형 트리 분할(Lavel Wise) </p>
<ul>
<li>XGBoost를 포함한 일반적인 GBM 방식. 균형잡힌 트리를 만들어 Depth를 최소화 할 수 있다. 한쪽으로만 트리가 뻗어 나가게 되면 과대적합 될 수 있다! 라는 것이 이론적 근거가 있다.</li>
</ul>
</li>
<li><p>리프 중심 트리 분할(Leaf Wise)</p>
<ul>
<li>한쪽 방향으로 예측을 했을 때 예측 오류를 줄여줄 수 있으면 그 노드
쪽으로 계속 리프 노드를 생성하면 조금 더 정확하겠다고 판단</li>
</ul>
</li>
</ul>
<br />

<h3 id="lightgbm-python-wrapper-와-scikit-learn-wrapper-하이퍼-파라미터-비교">LightGBM Python Wrapper 와 Scikit Learn Wrapper 하이퍼 파라미터 비교</h3>
<br />

<table>
<thead>
<tr>
<th>파이썬 Wrapper</th>
<th>사이킷런 Wrapper</th>
<th>하이퍼 파라미터 설명</th>
</tr>
</thead>
<tbody><tr>
<td>num_iterations</td>
<td>num_eatimators</td>
<td>약한 학습기의 개수(반복 수행 회수</td>
</tr>
<tr>
<td>learning_rate</td>
<td>learning_rate</td>
<td>학습률(learning rate). <br>0 에서 1 사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행할 때 업데이트 되는 학습률 값</td>
</tr>
<tr>
<td>max_depth</td>
<td>max_depth</td>
<td>결정트리의 max_depth와 동일. 트리의 최대 깊이</td>
</tr>
<tr>
<td>min_data_in_leaf</td>
<td>min_child_samples</td>
<td>리프 노드가 될 수 있는 최소 데이터 건수(Sample 수)</td>
</tr>
<tr>
<td>bagging_fraction</td>
<td>subsample</td>
<td>트리가 커져서 과적합되는 것을 제엏가ㅣ 위해 데이터를 샘플링 하는 비율을 지정. <br>sub_sample=0.5로 지정하면 전체 데이터의 절반을 트리를 생성하는데 사용한다</td>
</tr>
<tr>
<td>feature_fraction</td>
<td>colsample_bytree</td>
<td>GBM의 max_features와 유사하다. 트리 생성에 필요한 피처를 임의로 샘플링하는데 사용된다. <br>매우 많은 피처가 있는 경우 과적합을 조정하는데 적용한다.</td>
</tr>
<tr>
<td>lambda</td>
<td>reg_lambda</td>
<td>L2 규제(regularization) 적용 값. 기본값은 1로서 값이 클 수록 규제 값이 커진다. 과적합 제어</td>
</tr>
<tr>
<td>alpha</td>
<td>reg_alpha</td>
<td>L1 규제(regularization) 적용 값. 기본값은 0으로서 값이 클 수록 규제 값이 커진다. 과적합 제어</td>
</tr>
<tr>
<td>early_stopping_round</td>
<td>early_stopping_rounds</td>
<td>ds 학습 조기 종료를 위한 early stopping interval 값</td>
</tr>
<tr>
<td>num_leaves</td>
<td>num_leaves</td>
<td>최대 리프 노드 개수</td>
</tr>
<tr>
<td>min_sum_hessian_in_leaf</td>
<td>min_child_weight</td>
<td>t 결정트리의 min_child_leaf와 유사. 과적합 조절용</td>
</tr>
</tbody></table>
<ul>
<li><code>num_leaves</code>의 개수를 중심으로 <code>min_child_samples(min_data_in_leaf)</code>, <code>max_depth</code>를 함께 조정하면서 모델의 복잡도를 줄이는 것이 기본 튜닝 방안</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/ensemble.html">https://scikit-learn.org/stable/modules/ensemble.html</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 08. 앙상블 학습 : 보팅, 배깅]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-08.-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-%EB%B3%B4%ED%8C%85-%EB%B0%B0%EA%B9%85</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-08.-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-%EB%B3%B4%ED%8C%85-%EB%B0%B0%EA%B9%85</guid>
            <pubDate>Thu, 27 Apr 2023 16:25:26 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-08-앙상블-학습--보팅-배깅">✏️ 08. 앙상블 학습 : 보팅, 배깅</h2>
<hr>
<h2 id="앙상블-학습">앙상블 학습</h2>
<ul>
<li><p>앙상블 학습을 통한 분류는 여러 개의 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법을 일컫는다.</p>
</li>
<li><p>복합적이고 어려운 문제의 결론을 내기 위해 각 분야 별 전문가들의 다양한 의견을 수렴하고 결정하듯이 앙상블 학습의 목표는 다양한 분류기의 예측 결과를 결합함으로써 단일 분류기보다 신뢰성이 높은 예측값을 얻는 것이다</p>
</li>
</ul>
<br />

<h3 id="앙상블의-유형">앙상블의 유형</h3>
<ul>
<li><p>앙상블의 유형은 <code>보팅(Voting)</code>, <code>배깅(Bagging)</code>, <code>부스팅(Boosting)</code>으로 구분할 수 있으며 이외에 <code>스태킹(Stacking)</code> 등의 기법이 있다.</p>
</li>
<li><p>대표적인 배깅 방식은 랜덤 포레스트 알고리즘이 있으며, 
부스팅은 에이다 부스팅, 그라디언트 부스팅, XGBoost, LightGBM 등이 존재한다.</p>
</li>
<li><p>정형 데이터의 분류나 회귀에서는 GBM 부스팅 계열의 앙상블이 전반적으로 높은 예측 성능을 나타낸다.</p>
</li>
<li><p>넓은 의미로는 서로 다른 모델을 결합한 것들을 앙상블로 지칭하기도 한다.</p>
</li>
</ul>
<br />

<h3 id="앙상블의-특징">앙상블의 특징</h3>
<ul>
<li><p>단일 모델의 약점을 다수의 모델들을 결합하여 보완</p>
</li>
<li><p>뛰어난 성능을 가진 모델들로만 구성하는 것보다 성능이 떨어지더라도 서로 다른 유형의 모델을 섞는 것이 오히려 전체 성능에 도움이 됨</p>
</li>
<li><p>랜덤 포레스트 및 뛰어난 부스팅 알고리즘들은 모두 결정 트리 알고리즘을 기반 알고리즘으로 적용함</p>
</li>
<li><p>결정 트리의 단점인 과적합(오버피팅)을 수십~수천개의 많은 분류기를 결합해 보완하고 
장점인 직관적인 분류 기준은 강화됨</p>
</li>
</ul>
<br />

<h2 id="보팅voting-배깅bagging">보팅(Voting), 배깅(Bagging)</h2>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/0f578610-ec56-4c53-827d-cf218f00505d/image.png" alt=""></p>
<ul>
<li><p>보팅과 배깅은 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식</p>
</li>
<li><p>보팅과 배깅의 차이</p>
<ul>
<li><p>보팅은 서로 다른 알고리즘을 가진 분류기를 결합</p>
</li>
<li><p>배깅은 같은 알고리즘을 가진 분류기를 결합하지만
데이터 샘플링을 서로 다르게 수행하면서 학습을 수행해 보팅을 수행</p>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="hard-voting-soft-voting">Hard Voting, Soft Voting</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/83ab5e6e-f4ce-46f4-917a-f44e687b99da/image.png" alt=""></p>
<ul>
<li><p>Hard Voting은 다수의 Classifier 간 다수결로 최종 class 결정</p>
</li>
<li><p>Soft Voting은 다수의 Classifier 들의 class 확률을 평균하여 결정
일반적으로 많이 사용된다.</p>
</li>
</ul>
<br />

<h3 id="배깅bagging---랜덤-포레스트randomforest">배깅(Bagging) - 랜덤 포레스트(RandomForest)</h3>
<ul>
<li><p>Bagging은 Bootstrap Sampling의 줄임말</p>
</li>
<li><p>Bootstrap이란 기존 학습 데이터 세트로 부터 랜덤하게 복원추출 하여 동일한 사이즈의 데이터 세트를 여러 개 만드는 것을 의미한다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/fdccdad7-71c5-4b85-8efc-dda449003ac0/image.png" alt=""></p>
<ul>
<li><p>배깅의 대표적인 알고리즘은 랜덤 포레스트</p>
</li>
<li><p>랜덤 포레스트는 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측 결정을 한다.</p>
</li>
<li><p>Bootstrap을 통해 데이터를 Random하게, Tree를 모아 놓은 구조이기 때문에 숲(Forest)이 붙어 RandomForest가 되었다.</p>
</li>
</ul>
<br />

<h3 id="랜덤-포레스트-주요-하이퍼-파라미터">랜덤 포레스트 주요 하이퍼 파라미터</h3>
<ul>
<li><p><code>n_estimators</code> : 랜덤 포레스트에서 결정 트리의 개수를 지정. 기본은 100개</p>
<ul>
<li><p>많이 설정할수록 좋은 성능을 기대할 수 있지만 무조건 향상 되는 것은 아미</p>
</li>
<li><p>트리의 개수가 많아질수록 학습 수행 시간이 오래 걸리는 것도 감안해야 한다.</p>
</li>
</ul>
</li>
<li><p><code>max_features</code> : 결정 트리에 사용된 <code>max_features</code> 파라미터와 같다. </p>
<ul>
<li><p>기본 <code>max_features</code>는 ‘auto’ 로서 ‘sqrt’를 사용한다. </p>
</li>
<li><p>랜덤 포레스트의 트리를 분할하는 피처를 참조할 때 전체 피처가 아니라 sqrt(전체 피처 개수)만큼 참조한다.</p>
</li>
</ul>
</li>
<li><p><code>max_depth</code>나 <code>min_samples_leaf</code>와 같이 결정 트리에서 과적합을 개선하기 위해 사용되는 파라미터가 랜덤 포레스트에도 똑같이 적용될 수 있다</p>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://continuous-development.tistory.com/m/179">https://continuous-development.tistory.com/m/179</a></li>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/ensemble.html">https://scikit-learn.org/stable/modules/ensemble.html</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 07. 결정 트리]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-07.-%EA%B2%B0%EC%A0%95-%ED%8A%B8%EB%A6%AC</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-07.-%EA%B2%B0%EC%A0%95-%ED%8A%B8%EB%A6%AC</guid>
            <pubDate>Tue, 25 Apr 2023 16:22:03 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-07-결정-트리">✏️ 07. 결정 트리</h2>
<hr>
<h2 id="분류-알고리즘의-종류">분류 알고리즘의 종류</h2>
<ul>
<li><p>분류(Classification)는 학습 데이터로 주어진 데이터의 feature와 label 값(결정 값, 클래스 값)을 머신러닝 알고리즘으로 학습해 모델을 생성하고, 
생성된 모델에 새로운 데이터 값이 주어졌을 때 미지의 레이블 값을 예측</p>
</li>
<li><p>대표적인 분류 알고리즘</p>
<ul>
<li><p>베이즈 통계와 생성 모델에 기반한 나이브 베이즈(Naive Bayes)</p>
</li>
<li><p>독립변수와 종속변수 선형 관계성에 기반한 로지스틱 회귀(Logistic Regression)</p>
</li>
<li><p>데이터 균일도에 따른 규칙 기반의 결정 트리(Decision Tree)</p>
</li>
<li><p>개별 클래스 간의 최대 분류 마진을 효과적으로 찾아주는 서포트 벡터 머신(Support Vector Machine)</p>
</li>
<li><p>근접 거리를 기준으로 하는 최소 근접 알고리즘 (Nearest Neighbor)</p>
</li>
<li><p>심층 연결 기반의 신경망</p>
</li>
<li><p>서로 다른(또는 같은) 머신러닝 알고리즘을 결합한 앙상블(Ensemble)</p>
</li>
</ul>
</li>
</ul>
<br />

<h2 id="결정-트리">결정 트리</h2>
<ul>
<li><p>결정 트리 알고리즘은 데이터에 있는 규칙을 학습을 통해 자동으로 찾아내는 트리 기반의 분류 규칙을 만든다.</p>
</li>
<li><p>따라서 데이터의 어떤 기준을 바탕으로 규칙을 만들어야 가장 효율적인 분류가 될 것인가가 알고리즘의 성능을 크게
좌우한다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/64bf7267-6c4f-4d79-97d1-39b2f0e8de4a/image.png" alt=""></p>
<ul>
<li><p>Root Node: 시작 규칙 노드</p>
</li>
<li><p>Rule Node: 분류를 위해 규칙을 만들어 주는 노드</p>
</li>
<li><p>Leaf Node: 더 이상 분류을 위한 규칙을 마련할 수 없는 결정된 분류값이 들어 있는 노드</p>
</li>
<li><p>브랜치/서브트리: 새로운 규칙 조건마다 규칙 노드 기반의 서브 트리 생성</p>
</li>
<li><p>나무의 깊이(Depth): Rule Node에 의해 서브 트리가 생성되면 깊이가 증가한다.</p>
</li>
</ul>
<br />

<h3 id="정보-균일도-측정-방법">정보 균일도 측정 방법</h3>
<ul>
<li><p>정보 이득(Information Gain)</p>
<ul>
<li><p>정보 이득은 엔트로피라는 개념을 기반으로 주어진 데이터의 혼잡도를 사용</p>
</li>
<li><p>서로 다른 값이 섞여 있으면 엔트로피가 높고, 같은 값이 섞여 있으면 엔트로피가 낮다.</p>
</li>
<li><p>정보 이득 지수는 1에서 엔트로피 지수를 뺀 값.</p>
<ul>
<li>정보 이득 지수 = 1 – 엔트로피 지수</li>
</ul>
</li>
<li><p>결정 트리는 이 정보 이득 지수로 분할 기준을 정한다. 즉 정보 이득이 높은 속성을 기준으로 분할한다.</p>
</li>
</ul>
</li>
<li><p>지니 계수</p>
<ul>
<li><p>지니 계수는 원래 경제학에서 불평등 지수를 나타낼 때 사용하는 지수</p>
</li>
<li><p>0이 가장 평등하고, 1로 갈수록 불평등해 진다.</p>
</li>
<li><p>머신러닝에 적용될 때는 지니 계수가 낮을 수록 데이터 균일도가 높은 것으로 해석되어 계수가 낮은 속성을 기준으로 분할 한다</p>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="결정-트리의-규칙-노드-생성-프로세스">결정 트리의 규칙 노드 생성 프로세스</h3>
<ol>
<li><p>데이터 집합의 모든 아이템이 같은 분류에 속하는지 확인</p>
</li>
<li><p>데이터의 집합의 모든 아이템이 한 종류라면 리프 노드로 만들어서 분류 결정</p>
</li>
<li><p>데이터의 집합의 아이템이 여러 종류라면 데이터를 분할하는데 가장 좋은
속성과 분할 기준을 찾음( 정보 이득 or 지니 계수 )</p>
</li>
<li><p>해당 속성과 분할 기준으로 데이터를 분할하여 규칙 노드 생성</p>
</li>
</ol>
<blockquote>
<p>모든 데이터 집합의 분류가 결정 될 때 까지 1 – 3 – 4 단계가 반복된다</p>
</blockquote>
<br />

<h3 id="결정-트리의-장단점">결정 트리의 장단점</h3>
<ul>
<li><p>장점</p>
<ul>
<li><p>쉽고 직관적이다. 시각화를 통해 모델이 어떻게 학습했는지 보기 쉽다.</p>
</li>
<li><p>feature의 스케일링이나 정규화 등의 사전 가공 영향도가 크지 않다.</p>
</li>
</ul>
</li>
<li><p>단점</p>
<ul>
<li><p>과적합(Overfitting)으로 알고리즘 성능이 떨어진다.</p>
</li>
<li><p>이를 극복하기 위해 트리의 크기를 사전에 제한하는 튜닝이 필요하다.</p>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="graphiz를-이용한-tree-시각화">Graphiz를 이용한 Tree 시각화</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/98e9dde4-4244-4700-830b-fb0b4ebcc4a5/image.png" alt=""></p>
<br />

<h3 id="결정-트리-주요-하이퍼-파라미터">결정 트리 주요 하이퍼 파라미터</h3>
<ul>
<li><p><code>max_depth</code></p>
<ul>
<li><p>트리의 최대 깊이를 규정</p>
</li>
<li><p>Default는 None으로 설정하면 완벽하게 클래스 결정 값이 될 때까지 깊이를 계속 키우며 분할하거나 노드가
가지는 데이터 개수가 <code>min_samples_split</code>보다 작아질 때 까지 계속 깊이를 증가시킴</p>
</li>
<li><p>깊이가 깊어지면 <code>min_samples_split</code>설정대로 최대 분할하여 과적합할 수 있으므로 적절한 값으로 제어 필요</p>
</li>
</ul>
</li>
<li><p><code>max_features</code></p>
<ul>
<li><p>최적의 분할을 위해 고려할 최대 feature의 개수</p>
</li>
<li><p>Default는 None으로 모든 feature를 사용</p>
</li>
<li><p><code>max_features</code>=정수 설정하면 개수, max_features=실수 설정하면 비율</p>
</li>
<li><p><code>max_features</code>=‘sqrt’ : feature 개수의 제곱근</p>
</li>
<li><p><code>max_features</code>=‘auto’: sqrt와 같음</p>
</li>
<li><p><code>max_features</code>=‘log’ : log(feature 개수)</p>
</li>
</ul>
</li>
<li><p><code>min_samples_split</code></p>
<ul>
<li><p>노드를 분할하기 위한 최소한의 샘플 데이터 개수</p>
</li>
<li><p>Default는 2이고, 작게 설정할 수록 분할되는 노드가 많아져 과적합 가능성 증가</p>
</li>
</ul>
</li>
<li><p><code>min_samples_leaf</code></p>
<ul>
<li><p>규칙 노드에서 분할된 왼쪽 / 오른쪽 노드를 만들기 위해 가지고 있어야 할 최소한의 샘플 데이터 개수</p>
</li>
<li><p>큰 값으로 설정 될 수록 분할된 왼쪽 / 오른쪽 노드에서 가져야 할 최소한의 샘플 데이터 수 조건을 만족시키기가 어려우므로 상대적으로 노드 수행을 덜 수행한다.</p>
</li>
</ul>
</li>
<li><p><code>max_leaf_nodes</code></p>
<ul>
<li>말단 노드의 최대 개수</li>
</ul>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://docs.sangyunlee.com/ml/analysis/classification">https://docs.sangyunlee.com/ml/analysis/classification</a></li>
<li>🔗 <a href="https://scikit-learn.org/stable/modules/tree.html">https://scikit-learn.org/stable/modules/tree.html</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 06. 평가]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-06.-%ED%8F%89%EA%B0%80</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-06.-%ED%8F%89%EA%B0%80</guid>
            <pubDate>Sun, 23 Apr 2023 15:52:18 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-06-평가">✏️ 06. 평가</h2>
<hr>
<h3 id="분류-성능-평가-지표">분류 성능 평가 지표</h3>
<ul>
<li><p>정확도(Accuracy)</p>
</li>
<li><p>오차행렬(Confusion Matrix)</p>
</li>
<li><p>정밀도(Precision)</p>
</li>
<li><p>재현율(Recall)</p>
</li>
<li><p>F1 Score</p>
</li>
<li><p>ROC AUC</p>
</li>
</ul>
<br />

<h3 id="정확도accuracy">정확도(Accuracy)</h3>
<blockquote>
<p>정확도(Accuracy) = 예측 결과가 동일한 데이터 건수 / 전체 예측 데이터 건수</p>
</blockquote>
<ul>
<li><p>정확도는 직관적으로 모델 예측 성능을 나타내는 평가 지표이다. </p>
</li>
<li><p>하지만 이진 분류의 경우 데이터의 성에 따라 모델의 성능을 왜곡할 수 있기 때문에 정확도 수치 하나만 가지고 성능을 평가하지 않는다.</p>
</li>
<li><p>특히 정확도는 불균형한(imbalanced) 레이블 값 분포에서 모델의 성능을 판단할 경우 적합한 평가 지표가 아니다.</p>
</li>
<li><p>문제점</p>
<ul>
<li><p>y = [0,0,0,0,0,0,0,0,0,1]</p>
<ul>
<li><p>위의 타겟에서 맞춰야 할 양성 데이터는 1개이다.</p>
</li>
<li><p>모델을 만들지 않고 임의로 모두 0으로 예측을 해도 정확도는 90%가 나오게 된다</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="오차행렬confusion-matrix">오차행렬(Confusion Matrix)</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/4eeb8a48-e742-406d-a15b-18ac9ebd1cb5/image.png" alt=""></p>
<ul>
<li>오차 행렬은 이진 분류의 예측 오류가 얼마인지와 더불어 어떤 유형의 예측 오류가 발생하고 있는지를 함께 나타내는 지표이다.</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>예측<br>Negative(0)</th>
<th>예측<br>Positive(1)</th>
</tr>
</thead>
<tbody><tr>
<td>실제<br>Negative(0)</td>
<td>음성을 음성으로 잘 예측</td>
<td>음성을 양성으로 잘못 예측</td>
</tr>
<tr>
<td>실제<br>Positive(1)</td>
<td>양성을 음성으로 잘못 예측</td>
<td>양성을 양성으로 잘 예측</td>
</tr>
</tbody></table>
<br />

<h3 id="정밀도precision와-재현율recall">정밀도(Precision)와 재현율(Recall)</h3>
<ul>
<li><p>정밀도 = TP / (FP + TP)</p>
<ul>
<li><p>Negative를 Positive로 잘못 예측하면 정밀도가 내려간다.</p>
</li>
<li><p>정밀도는 예측을 Positive로 한 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율</p>
</li>
</ul>
</li>
<li><p>재현율 = TP / (FN + TP)</p>
<ul>
<li><p>Positive를 Negative로 잘못 예측하면 재현율이 내려간다.</p>
</li>
<li><p>재현율은 실제 값이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율</p>
</li>
</ul>
</li>
</ul>
<h4 id="업무에-따른-상대적-중요도">업무에 따른 상대적 중요도</h4>
<ul>
<li><p>정밀도(Precision)가 상대적으로 더 중요한 지표인 경우</p>
<ul>
<li>실제 Negative 데이터 예측을 Positive로 잘못 판단하면 업무상 큰 영향이 발생하는 경우. 스팸 메일 등</li>
</ul>
</li>
<li><p>재현율(Recall)이 상대적으로 더 중요한 지표인 경우</p>
<ul>
<li>실제 Positive 데이터 예측을 Negative로 잘못 판단하면 업무상 큰 영향이 발생하는 경우. 암 진단, 금융 사기 판별 등</li>
</ul>
</li>
</ul>
<br />

<h3 id="정밀도--재현율-트레이드-오프">정밀도 / 재현율 트레이드 오프</h3>
<ul>
<li><p>분류하려는 업무의 특성상 정밀도 또는 재현율이 특별히 강조돼야 할 경우 분류의결정 <code>임곗값(Threshold)</code>을 조정해 정밀도 또는 재현율의 수치를 높일 수 있다.</p>
</li>
<li><p>하지만 정밀도와 재현율은 상호 보완적인 지표이기 때문에 어느 한쪽을 강제로높이면 다른 하나의 수치는 떨어지기가 쉽다. 이를 정밀도 / 재현율의 <code>트레이드 오프(trade-off)</code>라고 한다</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/678c4bc6-89d3-4cb5-8352-7411075bfa0b/image.png" alt=""></p>
<ul>
<li><p>Positive로 예측되는 기준. Threshold! 이 수치를 넘어가면 Positive가 된다. </p>
</li>
<li><p>기본은 0.5 사이킷런 Estimator의 predict_proba() 메소드는 분류 결정 예측 확률을 반환하고, 이 값이 0.5가 넘으면 1로 예측한다.</p>
</li>
<li><p>Threshold를 낮추면 Positive로 예측될 확률이 커지게 된다. 즉 Negative로 잘못 예측할 확률이 낮아지므로 재현율이 상승하게 된다</p>
</li>
</ul>
<h4 id="정밀도와-재현율의-맹점">정밀도와 재현율의 맹점</h4>
<ul>
<li><p>정밀도를 100%로 만드는 법. 정밀도 = TP / (TP + FP), FP = 0</p>
<ul>
<li><p>확실한 기준이 되는 경우만 Positive로 예측하고 나머지는 모두 Negative로 예측.</p>
</li>
<li><p>전체 1000명의 환자 중 1명만 확실한 환자면 이 1명만 Positive로 예측하고,
나머지를 모두 Negative로 예측하더라도 FP=0, TP=1이 되므로 1 / (1 + 0)으로 100%가 된다.</p>
</li>
</ul>
</li>
<li><p>재현율을 100%로 만드는 법. 재현율 = TP / (TP + FN), FN = 0</p>
<ul>
<li><p>모든 데이터를 Positive로 예측</p>
</li>
<li><p>전체 1000명의 환자를 모두 Positive로 예측하면 실제 Positive인 사람이 30명 정도라도 TN이 수치에
포함되지 않고 FN은 아예 0이므로 30 / ( 30 + 0 )으로 100%가 된다</p>
</li>
</ul>
</li>
</ul>
<br />

<h3 id="f1-score">F1 Score</h3>
<ul>
<li>F1 스코어는 정밀도와 재현율을 결합한 지표로서, 정밀도와 재현율이 어느 한쪽으로 치우치지 않는 수치를 나타낼 때
상대적으로 높은 값을 가지게 된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/a6815f13-0478-463a-bb43-149e5a4912d5/image.png" alt=""></p>
<ul>
<li><p>만일 모델 A의 정밀도가 0.9, 재현율이 0.1이면 모델 A의 F1 Score는 0.18이다.</p>
</li>
<li><p>만일 모델 B의 정밀도가 0.5, 재현율이 0.5이면 모델 B의 F1 Score는 0.5로 B 모델이 A 모델에 비해 우수한 F1 
Score를 가지게 된다.</p>
</li>
</ul>
<br />

<h3 id="roc-곡선과-auc">ROC 곡선과 AUC</h3>
<ul>
<li><p><code>ROC 곡선(Receiver Operation Characteristic Curve)</code>과 이에 기반한 <code>AUC(Area Under Curve) 스코어</code>는 이진 분류의 예측 성능측정에서 중요하게 사용되는 지표이다.</p>
</li>
<li><p>일반적으로 의학 분야에서 많이 사용되지만, 머신러닝 이진 분류 모델의 예측 성능을 판단하는 중요한 평가 지표이기도 하다.</p>
</li>
<li><p><code>TPR</code>은 True Positive Rate이며, 이는 재현율(Recall)을 의미한다.</p>
<ul>
<li>TPR = Recall = TP / (FN + TP)</li>
</ul>
</li>
<li><p><code>FPR</code>은 False Positive Rate이며, 이는 Negative를 Positive로
잘못 예측한 비율이다.</p>
<ul>
<li>FPR = FP / (FP + TN)</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/bf9dd901-1ec0-499a-b27f-7d0464504a76/image.png" alt=""></p>
<ul>
<li><p>ROC 곡선은 FPR이 변할 때 TPR이 어떻게 변하는지를 나타내는 곡선이다.</p>
</li>
<li><p>FPR를 X 축으로, TPR을 Y축으로 잡으면 FPR의 변화에 따른 TPR의 변화가 곡선 형태로 나타난다.</p>
</li>
<li><p>분류의 성능 지표로 사용되는 것은 ROC 곡선 면적에 기반한 AUC 값으로 결정된다. AUC 값은 ROC 곡선 밑의 면적을 구한 것으로서 일반적으로 1에 가까울 수록(커브의 꼭짓점이 좌상단에 위치) 좋은 수치이다</p>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="http://hleecaster.com/ml-accuracy-recall-precision-f1/">http://hleecaster.com/ml-accuracy-recall-precision-f1/</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 05. 데이터 전처리]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-05.-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-05.-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Sat, 22 Apr 2023 17:21:24 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-04-교차검증">✏️ 04. 교차검증</h2>
<hr>
<h3 id="데이터-전처리preprocessing">데이터 전처리(Preprocessing)</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/e988bbce-670e-4469-ac53-32dff0bf9b6d/image.png" alt=""></p>
<ul>
<li><p>모든 데이터 분석 프로젝트에서 데이터 전처리는 반드시 거쳐야 하는 과정이다. 대부분의 데이터 분석가가 좋아하지 않는 과정이지만, 분석 결과 / 인사이트와 모델 성능에 직접적인 영향을 미치는 과정이기 때문에 중요하게 다루어지는 과정이다.</p>
</li>
<li><p>한 설문조사에 의하면, 분석가의 80% 시간을 데이터 수집 및 전처리에 사용한다고 하니, 얼마나 중요한 과정인지 짐작할 수 있다. 물론 지루하고 반복 작업의 연속이기 때문에 시간이 많이 들어가는 측면도 있을 것이다.</p>
</li>
<li><p>실무에 사용되는 데이터셋은 바로 분석이 불가능할 정도로 지저분(messy)하다. 분석이 가능한 상태로 만들기 위해 아래와 같은 전처리 방식이 자주 사용된다.</p>
<ul>
<li>데이터 클린징</li>
<li>결손값 처리(Null, NaN 처리)</li>
<li>데이터 인코딩(레이블, 원-핫 인코딩)</li>
<li>데이터 스케일링</li>
<li>이상치(Outlier) 제거</li>
<li>Feature 선택, 추출 및 가공</li>
</ul>
</li>
</ul>
<br />

<h3 id="데이터-인코딩">데이터 인코딩</h3>
<ul>
<li><p>머신러닝 알고리즘은 문자열 데이터 속성을 입력 받지 않는다.</p>
</li>
<li><p>문자형 카테고리형 속성은 모두 숫자값으로 변환/인코딩 되어야 한다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/bed6ed6e-e2a8-4ccd-8efb-a8888898f0d5/image.png" alt=""></p>
<ul>
<li>레이블(Label) 인코딩, 원-핫(One-Hot) 인코딩, Feature Scaling 방식에 대해 알아보자.</li>
</ul>
<br />

<h3 id="레이블label-인코딩">레이블(Label) 인코딩</h3>
<ul>
<li>Label Encoding이란 문자열의 unique값을 숫자로 바꿔주는 방법이다.</li>
</ul>
<pre><code class="language-py">from sklearn.preprocessing import LabelEncoder

fruit=[&#39;바나나&#39;, &#39;사과&#39;, &#39;사과&#39;, &#39;포도&#39;, &#39;딸기&#39;, &#39;포도&#39;, &#39;바나나&#39;]
print(sorted(set(fruit)))
encoder = LabelEncoder()
labels = encoder.fit_transform(fruit)
print(labels)

# outputs
# [&#39;딸기&#39;, &#39;바나나&#39;, &#39;사과&#39;, &#39;포도&#39;]
# [1 2 2 3 0 3 1]</code></pre>
<ul>
<li><p>fruit라는 변수를 내림차순으로 정렬하여 고유값에 번호를 매긴것을 확인할 수 있다.</p>
</li>
<li><p>문제점</p>
<ul>
<li>숫자값으로 변환되어 숫자의 ordinal한 특성이 반영되기 독립적인 관측값간의 관계성이 생긴다.</li>
<li>숫자값을 가중치로 잘못 인식하여 값에 왜곡이 생긴다<ul>
<li>ex) 1+2 = 3, 1&lt;2&lt;3&lt;4</li>
</ul>
</li>
</ul>
</li>
<li><p>이러한 특성은 예측 성능의 저하를 일으키고, 레이블 인코딩은 선형회귀와 같은 ML알고리즘에는 보통 적용하지 않는다. 하지만 트리계열의 ML알고리즘은 숫자의 ordinal 특성을 반영하지 않으므로 레이블 인코딩도 별 문제 없다.</p>
</li>
</ul>
<br />

<h3 id="원-핫one-hot-인코딩">원-핫(One-Hot) 인코딩</h3>
<ul>
<li><p>원-핫 인코딩은 Feature의 유형에 따라 새로운 Feature를 추가해 고유 값에 해당하는 컬럼에만 1을 표시한다.</p>
</li>
<li><p>나머지 컬럼에는 0을 표시한다.</p>
</li>
</ul>
<pre><code class="language-py">from sklearn.preprocessing import OneHotEncoder
import numpy as np

fruit=[&#39;바나나&#39;, &#39;사과&#39;, &#39;사과&#39;, &#39;포도&#39;, &#39;딸기&#39;, &#39;포도&#39;, &#39;바나나&#39;]

# Step1: 모든 문자를 숫자형으로 변환
encoder = LabelEncoder()
encoder.fit(fruit)
labels = encoder.transform(fruit)

# Step2: 2차원 데이터로 변환
labels = labels.reshape(-1, 1)

# Step3: One-Hot Encoding 적용
oh_encoder = OneHotEncoder()
oh_encoder.fit(labels)
oh_labels = oh_encoder.transform(labels)
print(oh_labels.toarray())
print(oh_labels.shape)

# [[0. 1. 0. 0.]
# [0. 0. 1. 0.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]
# [1. 0. 0. 0.]
# [0. 0. 0. 1.]
# [0. 1. 0. 0.]]
# (7, 4)</code></pre>
<ul>
<li><p>이처럼 One-Hot Encoding은 각 범주를 고유한 이진 벡터로 나타내는 방법이다.</p>
</li>
<li><p>모델은 범주간의 관계를 학습하지 않고, 각 범주가 독립적으로 다루어지기 때문에 더욱 정확한 학습이 가능해진다.</p>
</li>
</ul>
<br />

<h3 id="feature-scaling">Feature Scaling</h3>
<ul>
<li><p>표준화</p>
<ul>
<li><p>데이터의 feature 각각이 평균이 0이고 분산이 1인 가우시안 정규 분포를 가진 값으로 변환</p>
</li>
<li><p>𝑥𝑖 = (𝑥𝑖−𝜇𝜎) / 𝜎  [𝜎 : 표준 편차, 𝜇 : 평균]</p>
</li>
<li><p>[20, 30, 40] → [-1.22, 0, 1.22]</p>
</li>
<li><p>데이터 분포의 중심을 0으로 변경(Zero-Centered)</p>
</li>
</ul>
</li>
<li><p>정규화</p>
<ul>
<li><p>𝑥𝑖 = (𝑥𝑖−min(𝑥)) / (max 𝑥 −min(𝑥))</p>
</li>
<li><p>[20, 30, 40] → [0, 0.5, 1]</p>
</li>
<li><p>데이터의 최소값을 0으로, 최대값을 1로 변경</p>
</li>
</ul>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://wikidocs.net/16582">https://wikidocs.net/16582</a></li>
<li>🔗 <a href="https://ichi.pro/ko/label-inkoding-gwa-won-has-inkoding-255778339871323">https://ichi.pro/ko/label-inkoding-gwa-won-has-inkoding-255778339871323</a></li>
<li>🔗 <a href="https://hye-z.tistory.com/m/16">https://hye-z.tistory.com/m/16</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 04. 교차 검증]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-04.-%EA%B5%90%EC%B0%A8%EA%B2%80%EC%A6%9D</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-04.-%EA%B5%90%EC%B0%A8%EA%B2%80%EC%A6%9D</guid>
            <pubDate>Sat, 22 Apr 2023 16:46:42 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-04-교차-검증">✏️ 04. 교차 검증</h2>
<hr>
<h3 id="검증validation-세트">검증(Validation) 세트</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/d3ae4ede-d3dd-4d35-8365-4d6062a422fc/image.png" alt=""></p>
<ul>
<li><p>데이터 세트 A</p>
<ul>
<li><p>Training set와 Test set만 사용</p>
</li>
<li><p>Test set가 훈련된 모델을 테스트 한다.</p>
</li>
</ul>
</li>
<li><p>데이터 세트 B</p>
<ul>
<li><p>Training set, <code>Validation set</code>, Test set를 사용</p>
</li>
<li><p><code>Validation set</code>가 훈련된 모델을 테스트 하고, Test set는 최종 모델을 평가한다.</p>
</li>
</ul>
</li>
<li><p>이 검증 데이터 세트를 여러 번 바꿔서 미리 성능 검증을 하는 것을 교차 검증이라고 한다.</p>
</li>
</ul>
<br />

<h3 id="k-폴드fold-교차-검증">K 폴드(fold) 교차 검증</h3>
<p><img src="https://velog.velcdn.com/images/sun4_you/post/bd1ab14c-0a66-4975-8b69-cb2a840058e6/image.png" alt=""></p>
<ul>
<li>k=5 일 경우 총 5개의 폴드 세트에 5번의 학습과 검증 평가 반복 수행</li>
</ul>
<br />

<h3 id="cross_val_score"><code>cross_val_score</code></h3>
<ul>
<li><p>K-Fold 클래스를 이용한 교차 검증 방법을 간편화 한 사이킷런의 검증 함수</p>
<ul>
<li>폴드 세트 추출, 학습/예측, 평가를 한번에 수행할 수 있다.</li>
</ul>
<pre><code class="language-py">cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_jobs=1)</code></pre>
</li>
<li><p><code>estimator</code> : 모델</p>
</li>
<li><p><code>X</code> : feature</p>
</li>
<li><p><code>y</code> : target</p>
</li>
<li><p><code>scoring</code> : 예측 성능 평가 방식</p>
</li>
<li><p><code>cv</code> : 폴드의 개수</p>
</li>
</ul>
<br />

<h3 id="gridsearchcv"><code>GridSearchCV</code></h3>
<ul>
<li><p>사이킷런은 GridSearchCV를 이용해 분류, 회귀 모델 알고리즘에 사용되는 하이퍼 파라미터를 순차적으로 입력하면서 편리하게 최적의 파라미터를 도출할 수 있다.</p>
</li>
<li><p>하이퍼 파라미터</p>
<ul>
<li><p>머신러닝의 개별적인 모델에 입력해야 하는 값을 의미한다.</p>
</li>
<li><p>즉 모델이 학습하는 값이 아닌 개발자가 직접 넣어줘야 하는 값을 지칭한다.</p>
</li>
<li><p>하이퍼 파라미터에 의해 모델의 성능이 조절되기 때문에 모델 알고리즘의 최적 튜닝을 할 수 있다</p>
</li>
</ul>
</li>
</ul>
<pre><code class="language-py"> GridSearchCV(estimator.param_gird, cv, refit=True, return_train_score=True)</code></pre>
<ul>
<li><p><code>estimator</code> : 모델</p>
</li>
<li><p><code>param_grid</code> : 하이퍼 파라미터의 목록이 들어있는 딕셔너리, 여러 개의 딕셔너리를 이용할 수도 있다.</p>
</li>
<li><p><code>cv</code> : 폴드의 개수</p>
</li>
<li><p><code>refit</code> : True로 설정하면 가장 좋은 파라미터 설정으로 재학습 시킨다.</p>
</li>
<li><p><code>return_train_score</code> : 훈련 결과 점수를 확인할 수 있다.</p>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>참조 자료</p>
<ul>
<li>🔗 <a href="https://en.wikipedia.org/wiki/Training,_validation,_and_test_data_sets">https://en.wikipedia.org/wiki/Training,_validation,_and_test_data_sets</a></li>
<li>🔗 <a href="https://www.incodom.kr/k-%EA%B2%B9_%EA%B5%90%EC%B0%A8_%EA%B2%80%EC%A6%9D">https://www.incodom.kr/k-%EA%B2%B9_%EA%B5%90%EC%B0%A8_%EA%B2%80%EC%A6%9D</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 03. 훈련 데이터와 테스트 데이터]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-03.-%ED%9B%88%EB%A0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-03.-%ED%9B%88%EB%A0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0</guid>
            <pubDate>Fri, 21 Apr 2023 05:51:42 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-03-훈련-데이터와-테스트-데이터">✏️ 03. 훈련 데이터와 테스트 데이터</h2>
<hr>
<h3 id="훈련-데이터-세트">훈련 데이터 세트</h3>
<ul>
<li><p>머신러닝 알고리즘의 학습을 위해 사용</p>
</li>
<li><p>데이터의 속성들과 결정값(레이블) 모두를 가지고 있다.</p>
</li>
<li><p>훈련 데이터를 기반으로 머신러닝 알고리즘이 데이터 속성과 결정값의 패턴을 인지하고 학습</p>
</li>
</ul>
<br />

<h3 id="테스트-데이터-세트">테스트 데이터 세트</h3>
<ul>
<li><p>훈련 데이터 세트에서 학습된 머신러닝 알고리즘을 테스트</p>
</li>
<li><p>테스트 데이터는 속성 데이터만 머신러닝알고리즘에 제공하며, 머신러닝 알고리즘은 제공된 데이터를 기반으로 결정값을 예측</p>
</li>
<li><p>테스트 데이터는 학습 데이터와 별도의 데이터 세트로 제공되어야 한다.</p>
</li>
</ul>
<br />

<h3 id="데이터-세트가-따로-존재하는-이유">데이터 세트가 따로 존재하는 이유</h3>
<blockquote>
<blockquote>
<ul>
<li>만약 가지고 잇는 모든 데이터를 머신러닝 모델 훈련을 위해 사용한다면</li>
</ul>
</blockquote>
</blockquote>
<p>-&gt; 이미 알고 있는 데이터에 대한 평가 의미 X
-&gt; 새로운 데이터에 대한 예측 잘할 수 있다는 근거 X</p>
<blockquote>
<blockquote>
<ul>
<li>데이터 분할 시</li>
</ul>
</blockquote>
</blockquote>
<p>-&gt; 새로운 데이터에 대해 얼마나 잘 예측 할지 가능
-&gt; 일반화 오차 추출 가능</p>
<br />

<h3 id="train_test_split"><code>train_test_split</code></h3>
<pre><code class="language-py">X_train, X_test, y_train, y_test = train_test_split(data, target, test_size, random_state, stratifiy)</code></pre>
<ul>
<li><p><code>data</code>: feature 데이터</p>
</li>
<li><p><code>target</code>: label 데이터</p>
</li>
<li><p><code>test_size</code>: 전체 데이터에서 테스트 데이터 세트의 비율 (기본값은 0.25로서 25%를 테스트 세트로 사용)</p>
</li>
<li><p><code>random_state</code>: <code>train_test_split</code>은 모든 데이터를 랜덤하게 섞고(shuffle) 분할(split)하기 때문에, 수행 시 마다 다른 데이터 세트가 생성될 수 있으므로 <code>random_state</code>를 이용해 난수 값을 고정</p>
</li>
<li><p><code>stratify</code>: 데이터 분할 시 원본 데이터의 비율과 동일하게 테스트 세트를 생성하기 위해 지정하는 데이터 기준</p>
</li>
</ul>
<br />

<h3 id="랜덤이-필요한-이유">랜덤이 필요한 이유</h3>
<blockquote>
<p>target = [0,0,0,0,0,1,1,1,1,1,2,2,2,2,2]</p>
</blockquote>
<ul>
<li><p>만약 위 데이터를 단순하게 앞에서 부터 10개, 5개로 끊어서 훈련 / 테스트 데이터 세트로 만든다면 다음과 같다.</p>
<ul>
<li><p>훈련 데이터 세트 : [0,0,0,0,0,1,1,1,1,1]</p>
</li>
<li><p>테스트 데이터 세트 : [2,2,2,2,2]</p>
</li>
</ul>
</li>
<li><p>훈련 데이터 세트에는 0과 1번 레이블만 학습하게 되고, 테스트 시에는 2번만 테스트하기 때문에 머신러닝 모델이 0, 1, 2 클래스를 골고루 학습할 수 없다.</p>
</li>
<li><p><code>train_test_split</code>은 랜덤성을 이용해 train/test 데이터 세트를 적절히 섞어서 잘라준다</p>
</li>
</ul>
<br />

<h3 id="계층적-분할">계층적 분할</h3>
<ul>
<li><p><code>train_test_split</code> 을 이용하여 위 데이터를 랜덤하게 분할할 때 한쪽 데이터가 많아지거나 적어질 수도 있게 된다.</p>
</li>
<li><p>원본 데이터 비율에 맞게 훈련 세트와 테스트 세트를 분할하는 것을 계층적 분할이라고 한다.</p>
<ul>
<li><p>훈련 데이터 세트 : [0,0,0,1,1,1,2,2,2]</p>
</li>
<li><p>테스트 데이터 세트 : [0,0,1,1,2,2]</p>
</li>
</ul>
</li>
</ul>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 02. 사이킷런]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-02.-%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-02.-%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0</guid>
            <pubDate>Thu, 20 Apr 2023 08:34:18 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-02-사이킷런">✏️ 02. 사이킷런</h2>
<hr>
<h3 id="사이킷런이란">사이킷런이란?</h3>
<ul>
<li><p>파이썬 기반의 다른 머신러닝 패키지도 사이킷런 스타일의 API를 지향할 정도로 쉽고, 가장 파이썬다운 API를 제공</p>
</li>
<li><p>머신러닝을 위한 매우 다양한 알고리즘과 개발을 위한 편리한 프레임워크와 API를 제공</p>
</li>
<li><p>오랜 기간 실전 환경에서 검증됐으며, 매우 많은 환경에서 사용되는 성숙한 라이브러리</p>
</li>
<li><p>주로 Numpy와 Scipy 기반 위에서 구축된 라이브러리</p>
</li>
</ul>
<br />

<h3 id="머신러닝을-위한-용어-정리">머신러닝을 위한 용어 정리</h3>
<ul>
<li>Feature (X)<ul>
<li>Feature는 데이터 세트의 일반 속성</li>
<li>머신러닝은 2차원 이상의 다차원 데이터에서도 많이 사용되므로 타겟값을 제외한 나머지속성을 모두 Feature로 지칭<br /></li>
</ul>
</li>
<li>Label, Class, Target (y)<ul>
<li>Target은 지도 학습 시 데이터의 학습을 위해 주어지는 정답 데이터</li>
<li>지도 학습 중 분류의 경우에는 이 타겟을 레이블로 지칭</li>
<li>클래스는 분류 문제에서 레이블의 종류를 의미</li>
</ul>
</li>
</ul>
<br />

<h3 id="estimator-프레임-워크">Estimator 프레임 워크</h3>
<ul>
<li><p>추정기 초기화, 데이터 모델링, 모델의 파라미터 추정, 예측 수행</p>
</li>
<li><p>Estimator를 사용하면 일관된 API를 사용하여 다양한 모델들을 쉽게 비교하고, 성능을 개선하며, 모델을 선택할 수 있다.</p>
</li>
<li><p>모델 학습 및 예측을 병렬로 처리할 수 있어, 대규모 데이터 세트에서도 빠른 모델 학습과 예측을 수행 가능하다.</p>
</li>
<li><p>fit(X,y): 학습</p>
</li>
<li><p>predict(X): 예측</p>
</li>
</ul>
<br />

<h3 id="사이킷런-주요-모듈-소개">사이킷런 주요 모듈 소개</h3>
<table>
<thead>
<tr>
<th>Module</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>sklearn.datasets</td>
<td>사이킷런에 내장되어 예제로 제공하는 데이터 세트</td>
</tr>
<tr>
<td>sklearn.model_selection</td>
<td>교차 검증을 위한 학습용/테스트용 분리, 그리드 서치(Grid Search)로 최적 파라미<br>터 추출 등의 API 제공</td>
</tr>
<tr>
<td>sklearn.preprocessing</td>
<td>데이터 전처리에 필요한 다양한 가공 기능 제공<br>(인코딩, 정규화, 스케일링 등)</td>
</tr>
<tr>
<td>sklearn.feature_selection</td>
<td>알고리즘에 큰 영향을 미치는 피처를 우선순위 대로 셀렉션 작업을 수행하는 다양한<br>기능을 제공</td>
</tr>
<tr>
<td>sklearn.feature_extraction</td>
<td>텍스트 데이터나 이미지 데이터의 벡터화된 피처를 추출하는데 사용<br>텍스트 데이터 피처 추출( sklearn.feature_selection.text )<br>이미지 데이터 피처 추출(sklearn.feature_selection.image)</td>
</tr>
<tr>
<td>sklearn.decomposition</td>
<td>차원 축소와 관련한 알고리즘을 지원하는 모듈<br>PCA, NMF, Truncated SVD 등을 통한 차원 축소 기능 수행</td>
</tr>
<tr>
<td>sklearn.metrics</td>
<td>분류, 회귀, 클러스터링 등에 대한 다양한 성능측정 방법 제공<br>Accuracy, Precision, Recall, ROC-AUC, RMSE 등 제공</td>
</tr>
<tr>
<td>sklearn.ensemble</td>
<td>앙상블 알고리즘 제공<br>RandomForest, AdaBoost, GradientBoosting 등</td>
</tr>
<tr>
<td>sklearn.linear_model</td>
<td>주로 선형 회귀, Ridge, Lasso 및 LogisiticRegression 등 회귀 관련 알고리즘<br>지원. SGD(Stochastic Gradient Descent) 관련 알고리즘도 지원</td>
</tr>
<tr>
<td>sklearn.naive_bayes</td>
<td>나이브 베이즈 알고리즘 제공. 가우시안 NB, 다항 분포 NB 등 지원</td>
</tr>
<tr>
<td>sklearn.neighbors</td>
<td>최근접 이웃 알고리즘 제공. KNN 등</td>
</tr>
<tr>
<td>sklearn.svm</td>
<td>서포트 벡터 머신 알고리즘 제공</td>
</tr>
<tr>
<td>sklearn.tree</td>
<td>의사 결정 트리 알고리즘 제공</td>
</tr>
<tr>
<td>sklearn.cluster</td>
<td>비지도 클러스터링 알고리즘 제공<br>(K-Mean, 계층형, DBSCAN 등)</td>
</tr>
<tr>
<td>sklearn.pipeline</td>
<td>피처 처리 등의 변환과 ML 알고리즘 학습, 예측 등을 함께 묶어서 실행할 수 있는 유<br>틸리티 제공</td>
</tr>
</tbody></table>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>사이킷런 공식 홈페이지</p>
<ul>
<li>🔗 <a href="https://scikit-learn.org/stable/">https://scikit-learn.org/stable/</a></li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 머신러닝 완벽 가이드 # 01. 머신러닝의 개념]]></title>
            <link>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-01.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EC%9D%98-%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@sun4_you/Python-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-01.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EC%9D%98-%EA%B0%9C%EB%85%90</guid>
            <pubDate>Thu, 20 Apr 2023 07:33:38 GMT</pubDate>
            <description><![CDATA[<h2 id="✏️-01-머신러닝의-개념">✏️ 01. 머신러닝의 개념</h2>
<hr>
<h3 id="머신러닝이란">머신러닝이란?</h3>
<ul>
<li><p>머신러닝이란 애플리케이션을 수정하지 않고도 데이터를 기반으로 패턴을 학습하고 결과를 추론하는 알고리즘 기법을 통칭한다.</p>
</li>
<li><p>현실 세계에서의 매우 복잡한 조건으로 인해 기존의 소프트웨어 코드만으로는 해결하기 어려웠던 많은 문제점들을 이제 머신러닝을 이용해 해결해 나가고 있다.</p>
</li>
<li><p>특히 인간만이 가지는 인지능력만이 해결 가능하다고 여겨졌던 다양한 분야에서 머신러닝의 응용이 두드러지고 있으며 데이터 마이닝, 영상 인식, 음성 인식, 자연어 처리에서 머신러닝을 적용하면서 급속하게 발전하고 있다.</p>
</li>
</ul>
<br />

<h3 id="머신러닝과-기존-컴퓨터-사이언스의-차이점">머신러닝과 기존 컴퓨터 사이언스의 차이점</h3>
<ul>
<li><p>기존 컴퓨터 사이언스는 로직을 미리 만들어서 데이터를 받아 결과를 확인하는 방식</p>
</li>
<li><p>머신러닝은 특성 데이터와 결과를 넣어 로직을 머신이 학습하는 방식</p>
<ul>
<li>머신러닝 모델에 문제 데이터와 정답 데이터를 반복적으로 넣어주면 입력된 데이터의 패턴을 파악하여 어떤 연산이 이루어 질지를 학습하게 된다</li>
</ul>
</li>
</ul>
<br />

<h3 id="머신러닝-분류">머신러닝 분류</h3>
<ul>
<li><p>지도학습(Supervised Learning)</p>
<ul>
<li><p>명확한 결정값이 주어진 데이터를 학습</p>
</li>
<li><p>머신러닝 모델에게 문제(feature)와 답(label)을 모두 제공</p>
</li>
</ul>
</li>
<li><p>비지도학습(Un-supervised Learning)</p>
<ul>
<li><p>결정값이 주어지지 않는 데이터를 학습</p>
</li>
<li><p>머신러닝 모델에게 문제(feature)만 제공</p>
</li>
</ul>
</li>
</ul>
<ol>
<li>지도 학습</li>
</ol>
<ul>
<li>분류</li>
<li>회귀</li>
<li>추천 시스템</li>
<li>시각/음성 감지/인지</li>
<li>텍스트 분석, NLP</li>
</ul>
<ol start="2">
<li>비지도 학습</li>
</ol>
<ul>
<li>군집화(클러스터링)</li>
<li>차원 축소</li>
<li>강화학습</li>
</ul>
<br />

<h3 id="모델링-및-예측-프로세스">모델링 및 예측 프로세스</h3>
<ol>
<li><p>데이터 세트 분리 : 데이터를 학습 데이터, 테스트 데이터로 분리</p>
</li>
<li><p>모델 학습(fit) : 학습 데이터를 기반으로 머신러닝 알고리즘을 적용해 모델을 학습</p>
</li>
<li><p>예측 수행(predict) : 학습된 머신러닝 모델을 이용해 테스트 데이터로 예측</p>
</li>
<li><p>평가(evaluate) : 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 머신러닝 모델 성능을 평가</p>
</li>
</ol>
<br />

<hr>
<h3 id="📌-참고-문헌">📌 참고 문헌</h3>
<ul>
<li><p>책</p>
<ul>
<li>📕 파이썬 머신러닝 완벽 가이드  / 권철민</li>
</ul>
</li>
<li><p>해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.</p>
<ul>
<li>✍️ <a href="https://github.com/Sun4-me/DataSci-Notes">DataSci-Notes</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>