<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ordinary_c.log</title>
        <link>https://velog.io/</link>
        <description>이제 진짜 개발하려구요!</description>
        <lastBuildDate>Tue, 05 Mar 2024 01:35:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ordinary_c.log</title>
            <url>https://velog.velcdn.com/images/ordinary_c/profile/8615d96e-7408-4e4e-8750-5d9eb50040b3/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ordinary_c.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ordinary_c" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[회사가 죽었슴다 ㅡㅡ;]]></title>
            <link>https://velog.io/@ordinary_c/%ED%9A%8C%EC%82%AC%EA%B0%80-%EC%A3%BD%EC%97%88%EC%8A%B4%EB%8B%A4-%E3%85%A1%E3%85%A1</link>
            <guid>https://velog.io/@ordinary_c/%ED%9A%8C%EC%82%AC%EA%B0%80-%EC%A3%BD%EC%97%88%EC%8A%B4%EB%8B%A4-%E3%85%A1%E3%85%A1</guid>
            <pubDate>Tue, 05 Mar 2024 01:35:55 GMT</pubDate>
            <description><![CDATA[<p>1.
작년부터 이럴거라고 어느정도 예상은 했지만, 인생에 뼈아픈 순간은 언제나 예상을 벗어 나서 찾아오는 것 같다. 11월 급여가 밀리고, 12월을 무급으로 일하면서도 순진하게 회사에서 하는 말을 믿은 내 잘못이 일단 제일 크고, 나쁜 사람은 결국 나쁜 사람이다. 변하지 않는 사람은 변하지 않는다. 사람에 대한 염증이 생길지경이지만... 언제나 분노는 나에게만 손해다. 손해 본 것들은 잊으려고 노력하고 있다. 결국 자연 스럽게 흘러갈거다. 좋은 쪽으로 생각하면 난생처음으로 실업급여라는 걸 받게 되었고, 내 커리어나 스스로에 대해 생각할 시간이 드디어 생겼다는 것과... 새로운 도전과 환경에 들어서게 됐다는 것. 당분간은 이쪽에 생각을 집중하려고 노력해야겠다.</p>
<p>2.
그로기 상태에 빠져있다가, 설 지난 이후로 이력서 업데이트 하고 면접도 봤다. 기억나는 것은 보안관련회사(망연계솔루션)면접이었는데 결론은 불합격. 어찌보면 당연한일이다. </p>
<ol>
<li>뭔가 준비할 기력도 없는채로 본 면접(막연하게 부족한 네트워크 지식만 벼락치기)</li>
<li>익숙한 환경이라는 생각에 타성으로 진행</li>
<li>면접때를 회기해보면 같이 일하고 싶은 사람이란 생각을 심어주지 못함.</li>
<li>아주 기초적인 것들에 대해 제대로 설명하지 못함.(DB설계 어떻게 하셨는지, Trasaction의 작동, 양방향 암호화등... 경력직인데 이런걸 물어볼까? 싶었다가 당황함)</li>
</ol>
<p>그래도 다행히 제대로된 첫 면접에서 느낀점들은 있는데, &quot;말로 설명할줄 알아야&quot; 정말 아는 것이고, 익숙하다고 근본적인 이유를 잊은채 일하는 것이 진짜 실력이 늘고 있는것은 아니라는 것이다. 많은 반성이 됐고, 음 어찌보면 더 늦기전에 이런상황에 처한것이 다행일수도 있겠다 싶었다.</p>
<p>3.
몇몇 큰 회사 면접을 앞에 두고있다. 하지만 3월 안에 채용확정이 되지 않으면 프리시장에 잠시 뛰어들까 한다. 내가 안다고 착각하고 있던 모르는 것들이 너무 많아서, 책임감을 조금 내려놓아도 되는 위치에서 하나씩 해봐야겠다. 올초부터 시작한 ML부터 다시 마무리하고, 다시 한번 기본부터 시작해야겠지.</p>
<p>4.
그래도 개발일이 좋다. 다른 일보다 개발자로 사는게 좋다. 다시 한번 깨닫게 된 것만 해도 좋은 일이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]6주차_mission]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A06%EC%A3%BC%EC%B0%A8mission</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A06%EC%A3%BC%EC%B0%A8mission</guid>
            <pubDate>Wed, 14 Feb 2024 12:34:08 GMT</pubDate>
            <description><![CDATA[<h1 id="미션">미션</h1>
<h2 id="기본미션">기본미션</h2>
<h4 id="q1-어떤-인공-신경망의-입력-특성이-100개-이고-밀집층에-있는-뉴런-개수가-10개일-때-필요한-모델-파라미터의-개수는-몇-개-인가요">Q1) 어떤 인공 신경망의 입력 특성이 100개 이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는 몇 개 인가요?</h4>
<h4 id="a-3-1010개--100개의-뉴런과-10개의-밀집층-뉴런이-모두-연결되고-출력층의-뉴런마다-하나의-이-있다">A) 3. 1,010개 ( 100개의 뉴런과 10개의 밀집층 뉴런이 모두 연결되고 출력층의 뉴런마다 하나의 이 있다)</h4>
<h4 id="q2-케라스의-dense-클래스를-사용해-신경망의-출력층을-만들려고-합니다-이-신경망이-이진-분류-모델이라면-activation-매개변수에-어떤-활성화-함수를-지정해야-하나요-">Q2) 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요 ?</h4>
<h4 id="a-2-sigmoid-이진분류시에는-시그모이드-함수를-사용함-p354">A) 2. sigmoid (이진분류시에는 시그모이드 함수를 사용함 p.354</h4>
<h4 id="q3--케라스-모델에서-손실함수와-측정지표등을-지정하는-메서드는-무엇인가요">Q3)  케라스 모델에서 손실함수와 측정지표등을 지정하는 메서드는 무엇인가요?</h4>
<h4 id="a-4-compile">A) 4. compile()</h4>
<h4 id="q4--정수-레이블을-타깃으로-가지는-다중-분류-문제일-때-케라스-모델의-compile-메서드에-지정할-손실-함수로-적절한-것은-무엇인가요">Q4)  정수 레이블을 타깃으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가요?</h4>
<h4 id="a-1-sparse_categorical_crossentropy-다중분류시-클래스-레이블이-정수일때-사용한다">A) 1. sparse_categorical_crossentropy (다중분류시 클래스 레이블이 정수일때 사용한다.)</h4>
<h2 id="선택미션">선택미션</h2>
<h4 id="q1-다음-중-모델의-add메서드-사용법이-올바른-것은-어떤-것인가요">Q1) 다음 중 모델의 add()메서드 사용법이 올바른 것은 어떤 것인가요?</h4>
<h4 id="a-2-modeladdkeraslayersdense10-activationrelu">A) 2. model.add(keras.layers.Dense(10, activation=&#39;relu&#39;))</h4>
<h4 id="q2-크기가-300--300인-입력을-케라스-층으로-펼치려고합니다-다음-중-어떤-층을-사용해야-하나요">Q2) 크기가 300 * 300인 입력을 케라스 층으로 펼치려고합니다. 다음 중 어떤 층을 사용해야 하나요?</h4>
<h4 id="a-2-flatten">A) 2. Flatten</h4>
<h4 id="q3-다음중-이미지-분류를-위한-심층-신경망에-널리-사용되는-케라스의-활성화-함수는-무엇인가요">Q3) 다음중 이미지 분류를 위한 심층 신경망에 널리 사용되는 케라스의 활성화 함수는 무엇인가요?</h4>
<h4 id="a-3-relu">A) 3. relu</h4>
<h4 id="q4-다음-중-적응적-학습률을-사용하지-않는-옵티마이저는-무엇인가요">Q4) 다음 중 적응적 학습률을 사용하지 않는 옵티마이저는 무엇인가요?</h4>
<h4 id="a-1-sgd">A) 1. SGD</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]5주차_mission]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A05%EC%A3%BC%EC%B0%A8mission</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A05%EC%A3%BC%EC%B0%A8mission</guid>
            <pubDate>Thu, 01 Feb 2024 07:04:01 GMT</pubDate>
            <description><![CDATA[<h1 id="미션">미션</h1>
<h2 id="기본미션">기본미션</h2>
<blockquote>
<h3 id="k-평균-작동-방식">K-평균 작동 방식</h3>
</blockquote>
<ol>
<li>초기화: K개의 클러스터를 대표할 중심점을 무작위로 선택한다.</li>
<li>할당 : 각 데이터 샘플들을 가장 가까운 중심점에 할당한다. 보통 유클리드 거리같은 거리 측정 방법을 이용하여 가까움을 측정한다.</li>
<li>중심점 업데이트 : 클러스터에 속한 데이터 샘플들의 평균위치 값으로 새로운 데이터 중심점을 이동한다.</li>
<li>반복 : 클러스터의 중심점이 더이상 변하지 않거나, 설정한 반복횟수에 도달할 때까지 반복한다.</li>
</ol>
<h2 id="선택미션">선택미션</h2>
<h4 id="q1-특성이-20개인-대량의-데이터-셋이-있습니다-이데이터셋에서-찾을-수-있는-주성분의-개수는-몇개일까요">Q1) 특성이 20개인 대량의 데이터 셋이 있습니다. 이데이터셋에서 찾을 수 있는 주성분의 개수는 몇개일까요?</h4>
<h4 id="a-1-20개-주성분은-원본-특성의-개수만큼-찾을-수-있음">A) 1. 20개 (주성분은 원본 특성의 개수만큼 찾을 수 있음)</h4>
<h4 id="q2-샘플-개수가-1000개이고-특성-개수는-100개인-데이터셋이-있습니다-즉-이-데이터셋의-크기는-1000-100입니다-이-데이터를-사이킷런의-pca-클래스를-사용해-10개의-주성분을-찾아-변환했습니다-변환된-데이터셋의-크기는-얼마일까요">Q2) 샘플 개수가 1,000개이고 특성 개수는 100개인 데이터셋이 있습니다. 즉 이 데이터셋의 크기는 (1000, 100)입니다. 이 데이터를 사이킷런의 PCA 클래스를 사용해 10개의 주성분을 찾아 변환했습니다. 변환된 데이터셋의 크기는 얼마일까요?</h4>
<h4 id="a-1-100010-특성만-바뀜">A) 1. (1000,10) (특성만 바뀜)</h4>
<h4 id="q3-2번문제에서-설명된-분산이-가장-큰-주성분은-몇-번째-일까요">Q3) 2번문제에서 설명된 분산이 가장 큰 주성분은 몇 번째 일까요?</h4>
<h4 id="a-1-첫번쨰-주성분-주성분-분석은-분산이-가장-큰-방향부터-순서대로-찾아나간다">A) 1. 첫번쨰 주성분 (주성분 분석은 분산이 가장 큰 방향부터 순서대로 찾아나간다.)</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]5주차(chapter 06)]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A05%EC%A3%BC%EC%B0%A8chapter06</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A05%EC%A3%BC%EC%B0%A8chapter06</guid>
            <pubDate>Thu, 01 Feb 2024 06:57:23 GMT</pubDate>
            <description><![CDATA[<h1 id="5장-비지도-학습">5장 비지도 학습</h1>
<hr>
<h2 id="01-비지도-학습과-군집-알고리즘">01. 비지도 학습과 군집 알고리즘</h2>
<h3 id="정의">정의</h3>
<p>군집 알고리즘(Clustering Algorithm)은 비지도학습의 대표적인 예로써 서로 비슷한 특성 값을 갖는 데이터 샘플들을 특정한 그룹으로 분류하는 과정을 이야기한다. 300장의 과일 사진이 있을 때, 각 사진이 가지고 있는 픽셀 데이터 값을 기준으로 비슷한 그룹으로 묶고 새로운 사진이 어떤 그룹에 속하는지를 판별한다던가, 혹은 쇼핑몰의 고객의 데이터를 대상으로 연령, 지역, 성별등의 기준으로 어떤 구매 패턴을 보이는지에 대해 분석하기 위해 사용된다. 이처럼 정답 타깃이 지정되지 않은 채로 주어진 데이터로부터 패턴을 발견하거나 의미 있는 정보를 추출하기 위한 학습방식을 비지도학습(Unsupervised Learning) 이라고 하는데, 명시적인 정답이나 구체적인 결과를 얻을 수는 없지만 인간의 직관으로 파악하기 어려운 방대한 데이터 내의 구조나 관계를 파악할 수 있다.</p>
<hr>
<h2 id="02-k-평균">02. K-평균</h2>
<p>K-평균(K-means)알고리즘은 군집 알고리즘 중 하나로, 데이터를 K개의 클러스터로 나누고 각 클러스터를 데이터들의 중심점(Centroid)로 대표하는 간단한 알고리즘 이다.</p>
<blockquote>
<h3 id="작동-방식">작동 방식</h3>
</blockquote>
<ol>
<li>초기화: K개의 클러스터를 대표할 중심점을 무작위로 선택한다.</li>
<li>할당 : 각 데이터 샘플들을 가장 가까운 중심점에 할당한다. 보통 유클리드 거리같은 거리 측정 방법을 이용하여 가까움을 측정한다.</li>
<li>중심점 업데이트 : 클러스터에 속한 데이터 샘플들의 평균위치 값으로 새로운 데이터 중심점을 이동한다.</li>
<li>반복 : 클러스터의 중심점이 더이상 변하지 않거나, 설정한 반복횟수에 도달할 때까지 반복한다.</li>
</ol>
<h3 id="최적의-k값-찾기">최적의 K값 찾기</h3>
<p>K-평균의 단점은 클러스터의 개수를 사전에 지정해야 한다는 것이다. 완벽한 값을 찾는 방법은 없지만, 각 클러스터링에 대한 효과를 평가하고 자연스러운 그룹 수를 측정하기 위한 몇가지 방법이 존재한다.</p>
<blockquote>
<h3 id="엘보우-방법">엘보우 방법</h3>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/a49b65b3-1862-4678-b63d-31a53501dc08/image.png" alt="">
엘보우 방법은 클러스터 수 $K$의 변화에 따른 클러스터 중심과 샘플사이의 거리의 제곱의 합(이너셔:Inertia)의 변화를 시각화하여 최적의 값을 찾는 방법이다. 클러스터의 수를 늘려갈수록 이너셔값이 감소하지만, 어느 지점에서는 팔꿈치 처럼 감소율이 급격히 줄어든다. 감소율의 변화가 더이상 의미있지 않을 때 이 지점의 $K$값을 지정한다.</p>
</blockquote>
<blockquote>
<h3 id="실루엣-방법">실루엣 방법</h3>
<p>실루엣 방법은 클러스터링의 효과를 각 데이터 샘플이 자신이 속한 클러스터와 얼마나 잘 맞는지(응집도:cohension), 다른 클러스터와 얼마나 떨어져 있는지(분리도:separation)를 측정여 -1~1사이의 값으로 나타낸다. 객관적인 수치를 제공하지만, 데이터 셋이 큰 경우 시간이 많이 소요될 수 있다.
$Silhouette score = \frac{(b-a)}{max(a,b)}$ </p>
</blockquote>
<ul>
<li>a:응집도 , b:분리도</li>
<li>점수가 1에 가까울 때 : 데이터 샘플이 자신의 클러스터에 잘 맞고, 다른 클러스터와 잘 분리되어 있음</li>
<li>점수가 0에 가까울 때 : 데이터 샘플이 클러스터의 경계에 위치해 있고, 인접한 클러스터와 구분이 모호함.</li>
<li>점수가 -1에 가까울때 : 데이터 샘플이 잘못된 클러스터에 할당되어있음</li>
</ul>
<hr>
<h2 id="03-주성분-분석">03. 주성분 분석</h2>
<h3 id="정의-1">정의</h3>
<p>주성분 분석(Principal Component Analysis, PCA)은 차원 축소 알고리즘의 대표적인 방법이다. &quot;차원 축소&quot;에서의 차원이란 이전에 정의했던 데이터의 특성을 이야기한다. 만약 하나의 이미지의 10,000개의 픽셀이 있고 각 다른 색상 값을 가진다면 이 이미지는 10,000개 차원을 가지고 있고, 비슷한 수만장의 데이터로 학습을 진행한다면 비용과 시간이 매우 많이 들 수밖에 없다. 이런 많은 차원(특성)의 데이터를 분석하여 데이터의 주성분을 찾아 저차원으로 변환하여 데이터를 간략화하고, 노이즈를 제거하거나 주요 특성을 파악하여 요약하기 위해 쓰인다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]4주차_mission]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A04%EC%A3%BC%EC%B0%A8mission</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A04%EC%A3%BC%EC%B0%A8mission</guid>
            <pubDate>Mon, 22 Jan 2024 03:57:28 GMT</pubDate>
            <description><![CDATA[<h1 id="미션">미션</h1>
<h2 id="기본미션">기본미션</h2>
<h3 id="k-fold-교차-검증과정">K-FOLD 교차 검증과정<img src="https://velog.velcdn.com/images/ordinary_c/post/cc38b69a-83f1-40c8-9c52-743e2a7fd546/image.png" alt=""></h3>
<ol>
<li>전체 데이터 셋을 Training Data Set와 Test Data Set로 나눈다.</li>
<li>Training Data Set을 K개의 Fold로 나눈다.</li>
<li>첫번째 Fold를 Validation Set으로 사용하고, 나머지 Fold를 Training Set으로 사용해 훈련하고 평가한다.</li>
<li>차례대로 다음 Fold를 Validation Set으로 사용하고, 나머지 Fold를 Training Set으로 사용해 훈련하고 평가하는 과정을 총 K번 반복한다.</li>
<li>총 K개의 평가결과가 나오고, 이 결과를 평균하여 종합적으로 성능을 평가한다.</li>
</ol>
<h2 id="선택미션">선택미션</h2>
<h3 id="randomforest">RandomForest</h3>
<pre><code>## RandomForest
from sklearn.model_selection import cross_validate
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier( n_jobs=-1, random_state=42 )
scores = cross_validate( rf, train_input, train_target, return_train_score=True, n_jobs=-1 )
print( np.mean(scores[&#39;train_score&#39;]), np.mean(scores[&#39;test_score&#39;]) )

rf.fit( train_input, train_target )
print( rf.feature_importances_ )

rf = RandomForestClassifier( oob_score=True, n_jobs=-1, random_state=42 )
rf.fit( train_input, train_target )
print( rf.oob_score_)
</code></pre><p><img src="https://velog.velcdn.com/images/ordinary_c/post/03083462-8b2d-4f86-bb38-8300eff9c0ed/image.png" alt="">
순서대로 과대적합된 결과값, 각 특성의 중요도, OOB(Out of bag:부트스트랩에 포함되지 않은 샘플)로 평가한 평균 점수값.</p>
<h3 id="extra-trees">Extra Trees</h3>
<pre><code>## Extra Tree

from sklearn.ensemble import ExtraTreesClassifier
et = ExtraTreesClassifier( n_jobs=-1, random_state=42 )
scores = cross_validate( et, train_input, train_target, return_train_score=True, n_jobs=-1 )
print( np.mean(scores[&#39;train_score&#39;]), np.mean(scores[&#39;test_score&#39;]) )
et.fit(train_input,train_target)
print( et.feature_importances_ )</code></pre><p><img src="https://velog.velcdn.com/images/ordinary_c/post/982d0050-8f23-4b8a-8d14-057b802de895/image.png" alt="">
랜덤포레스트와 비슷한 결과값, 각 특성 중요도</p>
<h3 id="gradients-boosting">Gradients Boosting</h3>
<pre><code>## Gradients Boosting

from sklearn.ensemble import GradientBoostingClassifier
gb = GradientBoostingClassifier( random_state=42 )
scores = cross_validate( gb, train_input, train_target, return_train_score=True, n_jobs=-1 )
print(np.mean(scores[&#39;train_score&#39;]), np.mean(scores[&#39;test_score&#39;]))
</code></pre><p><img src="https://velog.velcdn.com/images/ordinary_c/post/13030382-902f-443b-808c-7b485d07e912/image.png" alt=""></p>
<p>과대적합이 거의 되지 않은 교차 검증 점수값</p>
<pre><code>gb = GradientBoostingClassifier( n_estimators=500, learning_rate=0.2, random_state=42 )
scores = cross_validate( gb, train_input, train_target, return_train_score=True, n_jobs=-1 )
print( np.mean(scores[&#39;train_score&#39;]), np.mean(scores[&#39;test_score&#39;]) )

gb.fit( train_input, train_target )
print( gb.feature_importantces_ )</code></pre><p><img src="https://velog.velcdn.com/images/ordinary_c/post/d859c452-5b2e-4496-a847-a068eb2d413b/image.png" alt=""></p>
<p>결정트리 갯수를 500까지 늘렸지만, 과대적합이 억제됨.
각 특성의 중요도</p>
<h3 id="histogram-based-gradient-boosting">Histogram-based Gradient Boosting</h3>
<pre><code>## Histogram-based Gradient Boosting
from sklearn.experimental import enable_hist_gradient_boosting
from sklearn.ensemble import HistGradientBoostingClassifier
hgb = HistGradientBoostingClassifier( random_state = 42 )
scores = cross_validate( hgb, train_input, train_target, return_train_score=True )
print( np.mean(scores[&#39;train_score&#39;]), np.mean(scores[&#39;test_score&#39;]) )

from sklearn.inspection import permutation_importance
hgb.fit( train_input,train_target )
result = permutation_importance(hgb, train_input, train_target, n_repeats=10, random_state=42, n_jobs= -1 )
print( result.importances_mean )

result = permutation_importance(hgb, test_input, test_target, n_repeats=10, random_state=42, n_jobs= -1 )
print( result.importances_mean )

hgb.score( test_input, test_target )</code></pre><p><img src="https://velog.velcdn.com/images/ordinary_c/post/e7fee2d1-d321-47c9-aae1-d9a7575c5c86/image.png" alt=""></p>
<p>그레디언트 부스팅에 비해 높은 성능, 훈련 데이터 세트와 테스트 세트의 특성 중요도, 테스트 세터에서의 최종 성능.</p>
<h3 id="xgboost">XGBoost</h3>
<pre><code>## XGBClassifier
from xgboost import XGBClassifier
xgb = XGBClassifier( tree_method=&#39;hist&#39;, random_state=42 )
scores =  cross_validate( xgb, train_input, train_target, return_train_score=True )
print( np.mean(scores[&#39;train_score&#39;]), np.mean(scores[&#39;test_score&#39;]) )
</code></pre><p><img src="https://velog.velcdn.com/images/ordinary_c/post/1076f85d-4a4c-42ea-96f3-48e2c505204e/image.png" alt=""></p>
<h3 id="lightgbm">LightGBM</h3>
<pre><code>## XGBClassifier
from lightgbm import LGBMClassifier
lgb = LGBMClassifier( random_state=42 )
scores =  cross_validate( lgb, train_input, train_target, return_train_score=True, n_jobs=-1 )
print( np.mean(scores[&#39;train_score&#39;]), np.mean(scores[&#39;test_score&#39;]) )

</code></pre><p><img src="https://velog.velcdn.com/images/ordinary_c/post/f7141c8e-b56e-496f-be7f-e64c3e9e06cc/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]4주차(chapter 05)]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A04%EC%A3%BC%EC%B0%A8chapter-05</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A04%EC%A3%BC%EC%B0%A8chapter-05</guid>
            <pubDate>Mon, 22 Jan 2024 03:11:29 GMT</pubDate>
            <description><![CDATA[<h1 id="5장">5장</h1>
<hr>
<h2 id="01-결정트리">01. 결정트리</h2>
<h3 id="정의">정의</h3>
<p>결정트리(Decision Tree)란 분류와 회귀의 문제를 모두 다룰 수있는 지도 학습 모델이다. 말 그대로 아래 그림과 같은 트리 구조를 이용하여 데이터를 학습하고 최적화 한다. 학습 데이터의 샘플들이 최상위의 루트 노드(root node)부터 스무고개 하듯 각 노드에서 선택되어진 하나의 특성의 True/False 조건을 통과하며 최말단의 리프 노드(leaf node) 까지 도달하며 분할되어 진다. 이때 어떤 특성이 선택되어질지, 어떤 기준이 이용될지는 양성, 음성클래스의 구분에 얼마나 효과적인지 모델이 몇가지 기준을 이용하여 선택하여 분할을 수행한다. 최종적으로 분할된 리프노드에서 양성클래스의 샘플이 많다면 그 리프노드의 도달한 샘플들은 모두 양성으로, 그반대라면 모두 음성으로 예측되어진다. 회귀의 경우 예측값은 샘플 타깃들의 평균값이다.</p>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/d7224b2f-84f2-48ee-8eb9-fefaca54bbf2/image.png" alt=""> <a href="https://medium.com/@polanitzer/building-a-decision-tree-classifier-in-python-step-by-step-9d4eeff02292">[출처]</a></p>
<p>결정트리는 이처럼 시각화하기 쉽고, 전처리의 중요도가 다른 모델에 비해 높지 않기 때문에 모델이 어떻게 데이터를 해석하고 예측하는지 사람이 직관적으로 이해하기가 쉽다. </p>
<h3 id="불순도">불순도</h3>
<p>불순도(impurity)는 한노드에서 서로 다른 클래스들이 얼마나 혼재되어 있는지를 나타내는 척도이다. 결정트리 모델에서는 criterion 매개변수를 이용하여 모델이 어떤 기준으로 노드를 분할할지 결정한다. 불순도가 높은 노드라는 것은 서로 다른 클래스들을 많이 가지고 있다는 의미이며, 불순도가 낮은 노드는 보통 하나의 클래스를 가지고 있다. 결정트리 모델에서는 최종적으로 리프노드의 불순도를 최소화 하는 방향으로 데이터를 분할하게 된다. 하지만 불순도가 완벽히 순수해진다는 것은 과적합의 위험이 증가한다는 이야기와 같다.</p>
<blockquote>
<h4 id="지니-불순도">지니 불순도</h4>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/e90fd99a-846b-4067-ba31-ccd0c707b5be/image.png" alt=""><a href="https://smalldataguru.com/%EA%B2%B0%EC%A0%95-%ED%8A%B8%EB%A6%ACdecision-tree%EC%9D%98-%EC%A7%80%EB%8B%88-%EB%B6%88%EC%88%9C%EB%8F%84gini-impurity%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C/">[출처]</a></p>
</blockquote>
<ul>
<li>정의 : 지니 불순도(Gini impurity)는  0에서 1사이의 값으로, 한 노드에 서로 다른 클래스가 얼마나 섞여있는지를 나타낸다. 하나의 클래스만 가진 노드는 0의 값을 가지며 순수노드라고 부른다.</li>
<li>계산 방식 : $Gini(D) = 1 - \sum_{j=1}^m({p_j}^2)$</li>
<li>설명 : $p$는  0~1사이의 확률로, $p_j$는 각 노드에서 $j$번째 클래스의 비율을 의미한다.  위 그림을 예로 들어 설명하면 어떤 노드에서 전체 10개중 파란 구슬이 3개 들어있는 비율을 $p_1$, 빨간 구슬이 7개 들어있는 비율은 $p_2$라고 정의한다면, 각 비율을 제곱하여 뺴주면 된다. 결국 지니 계수 $Gini(D)$는 $1 - \big((\frac{3}{10})^2+(\frac{7}{10})^2\big)=0.42$ 으로 42%의 불순도를 가지게 된다.</li>
</ul>
<blockquote>
<h4 id="엔트로피">엔트로피</h4>
</blockquote>
<ul>
<li>정의 : 엔트로피(Enthropy)는 노드의 불확실성이나 무질서도를 측정하는 척도로써, 계산 방식에서 제곱이아닌 밑이 2인로그를 이용하여 곱하는 점에서 차이가 있다. (이 전장의 로지스틱손실함수와 비슷하지만 로지스틱 손실함수는 두 확률의 차이를 나타낸다.)</li>
<li>계산 방식 : $1 - \sum_{j=1}^J\big(p_j*log_2(p_j)\big)$</li>
<li>설명 : 엔트로피 값이 높을수록 데이터가 더 무질서하고 혼합되어 있음을 나타낸다.</li>
</ul>
<h3 id="정보-이득">정보 이득</h3>
<p>정보 이득(Information Gain)이란 부모노드와 자식노드사이의 불순도의 차이를 이야기한다. 결정트리 모델에서는 이 정보이득을 가능한 최대화 시킬수 있도록 트리를 성장시키는데, 이때 분할하기 전 데이터셋의 불순도에서 분할 한 후의 불순도의 합을 빼는 식으로 계산하며 아래와 같은 식으로 계산될 수 있다.</p>
<blockquote>
<h4 id="formula">Formula</h4>
<p>$IG(D,A) = Gini(D) - \sum_{j=1}^k\big(\frac{|D_j|}{|D|}\cdot Gini(D)\big)$</p>
<ul>
<li>$IG(D,A)$ : 데이터셋 $D$에 대해 특성 $A$로 분할 할경우의 정보이득</li>
<li>$k$ : 특성 $A$로 분할한 후 생성되는 하위 데이터 셋의 수</li>
<li>$D_j$ : 분할 후 생성된 하위 데이터 셋</li>
<li>$\frac{|D_j|}{|D|}$ : 전체 데이터셋에 대한 하위 데이터셋의 크기(가중치)</li>
</ul>
</blockquote>
<h3 id="가지치기">가지치기</h3>
<p>훈련데이터에 대해 최소한의 불순도를 가지도록 결정트리가 성장한다면, 훈련데이터에만 알맞는 과적합의 위험성이 매우 커진다. 이를 위해서 조기종료처럼, 결정트리가 너무 복잡해지기 전에 트리의 성장을 제한하거나 생성된 트리의 일부를 제거하는 가지치기가 필요하다. 가장 간단한 방법으로는 최대 깊이의 레벨을 지정하는 방식이있다.</p>
<hr>
<h2 id="02-교차검증과-그리드-서치">02. 교차검증과 그리드 서치</h2>
<h3 id="교차검증">교차검증</h3>
<p>교차검증(Cross-validation)은 모델의 능력을 평가하기 위해 데이터를 여러 서브세트로 나누고 이 서브세트를 사용하여 반복적으로 훈련하고 검증하는 방법이다. 이 방법을 사용하여 모델이 특정한 훈련세트에 의존하는 것을 방지하고 실제 적용에서의 성능을 좀더 정확히 측정할 수 있다. sklearn.model_selection의의 cross_validate기능을 함수를 이용하여 쉽게 사용가능하다.</p>
<blockquote>
<h3 id="기본적인-교차검증-방식들">기본적인 교차검증 방식들</h3>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/6cbb7e04-9ee8-4ef9-b8c3-2625f6865201/image.png" alt=""></p>
<h4 id="k-겹-교차검증-k-fold">K-겹 교차검증 (K-Fold)</h4>
<p>데이터를 K개의 서브세트로 나누고, K번에 걸쳐 각기 다른 폴드를 검증 세트로 사용하고 나머지를 훈련 세트로 사용한다.
<img src="blob:https://velog.io/c2516b24-6ee0-4e71-8e5a-1d0b5d98a524" alt="업로드중.."> </p>
<h4 id="stratified-k-fold">Stratified K-Fold</h4>
<p>전체 데이터를 섞은 후 클래스의 비율들을 유지하며 K-Fold를 수행한다.</p>
</blockquote>
<h3 id="그리드-서치">그리드 서치</h3>
<p>그리드 서치(Grid search)란 하이퍼파라미터 듀닝을 위한 방법으로 모델의 성능을 최대화 할수있는 최적의 하이퍼파라미터 조합을 시스템이 반복하여 탐색한 후, 최적의 조합을 찾아내는 방법이다. sklearn.model_selection의 GridSearchCV를 이용하여 탐색할 매개변수와 간격을 지정하고 자동화 하여 매번 모델의 하이퍼파라미터의 조합을 찾아내는 수고를 덜어 낼 수있다. 그리드 서치를 이용해 최적의 하이퍼파라미터를 찾고(이 값이 적용된 모델은 .best_estimator_에 저장된다.), 이를 교차검증을 이용해 평가하는 방식으로 모델의 일반화 능력을 더 정확하게 평가할 수 있다.</p>
<ul>
<li>랜덤 서치 : 그리드 서치를 진행할때, 시스템 자원과 시간을 줄이기 위해 무작위 샘플링을 사용하여 빠르게 탐색하는 것. sklearn.model_selection의 RandomizeSearchCV를 이용한다.</li>
</ul>
<hr>
<h2 id="03-트리의-앙상블">03. 트리의 앙상블</h2>
<p>트리의 상상블(Tree ensemble)은 여러 개의 결정 트리를 결합하여 개별 트리모델의 한계를 보완하고, 예측의 정확도를 향상시키는 머신러닝 기법이다. 이처럼 여러 모델을 결합하여 성능을 향상시키는 방법을 앙상블학습(Ensemble Learning)이라고 한다. </p>
<h3 id="앙상블-학습의-대표적인-종류">앙상블 학습의 대표적인 종류</h3>
<blockquote>
<h3 id="랜덤-포레스트">랜덤 포레스트</h3>
<p>랜덤포레스트(Random Forest)는 결정트리를 랜덤하게 만들어 각 결정 트리의 예측을 사용해 최종 예측을 만든다. 여러개의 트리를 결합함으로써 단일 트리보다 더 높은 정확도를 가질 수 있고, 각 트리의 과적합 평균화하여 전체 모델에서의 과적합 위험성을 줄인다. </p>
<h4 id="동작-방식">동작 방식</h4>
<p><strong>1. 부트스트랩 샘플링</strong> : 원본 훈련데이터 세트에서 원본 세트와 크기는 같지만, 중복되거나 누락될 수 있는 부트스트랩 샘플들을 생성한다.
<strong>2. 결정 트리 구축</strong> : 각 부트스트램 샘플에 대해 결정 트리를 구축한다. 이때, 각 트리는 무작위로 선택된 소수의 특성만을 고려하여 분할 기준을 결정한다.
<strong>3. 예측 결합 및 최종 모델 형성</strong> : 회귀의 경우 개별트리 예측값의 평균을 취한다. 분류의 경우 각 트리의 클래스별 확률을 평균하여 가장 높은 확율을 가진 클래스를 예측결과로 결정한다.</p>
</blockquote>
<blockquote>
<h3 id="엑스트라-트리">엑스트라 트리</h3>
<p>랜덤포레스트와 비슷하지만, 부트스트램 샘플을 사용하지 않고 전체 데이터를 사용하여 훈련한다. 대신 노드를 분할 할때 가장 좋은 분할(정보이득의 최대화)이 아닌 무작위 분할을 진행함으로써 트리의 다양성을 증가 시키고 빠른 훈련 속도를 갖는다.</p>
</blockquote>
<blockquote>
<h3 id="그레디언트-부스팅">그레디언트 부스팅</h3>
<p>그레디언트 부스팅(Gradient Boosting)은 깊이가 얕은 결정트리를 순차적으로 학습시키면서, 이전 학습기의 오차를 보완하는 방식으로 앙상블하는 방법이다. 경사하강법을 사용하여 트리의 손실값을 줄여가며 깊이가 얕은 트리를 추가하는 방식으로 작동한다. 랜덤포레스트보다 조금 더 높은 성능을 얻을 수 있지만, 순서대로 트리를 추가하며 업데이트 하기 때문에 훈련속도가 느리고 자원을 많이 사용한다.</p>
<h4 id="동작-방식-1">동작 방식</h4>
<p><strong>1. 초기모델 생성</strong> : 전체 훈련 데이터에 대해 깊이가 낮은 트리를 훈련한다.
<strong>2. 그레디언트 계산 및 새 모델 훈련</strong> : 각 데이터 샘플에서 손실함수를 계산하여 이전의 트리보다 더 낮은 손실값을 갖는 얕은 트리를 훈련한다.
<strong>3. 모델 결합 및 가중치 업데이트</strong> : 새 모델의 예측을 이전 모델에 추가하여 모델을 업데이트 한다. 이때 학습률(Learning Rate)가중치를 이용해 이전 트리를 얼마나 업데이트를 할지 결정한다.
<strong>4. 반복 학습 및 최종 모델 형성</strong>: 지정된 수의 트리가 추가되거나, 오류가 일정 기준 이하가 될때까지 이 과정을 계속해서 반복한다. 최종 모델은 모든 트리의 예측의 합으로 구성된다.</p>
</blockquote>
<blockquote>
<h3 id="히스토그램-기반-그레디언트-부스팅">히스토그램 기반 그레디언트 부스팅</h3>
<p>히스토램 기반 그레디언트 부스팅(Histogram-based Gradient Boosting)은 기존 그레디언트 부스팅 방법을 개선한 알고리즘으로 입력 특성의 각 연속 변수를 고정된 수의 여러 구간으로 나누고, 히스토그램을 생성하여 각 구간의 요약된 정보만을 이용하여 최적의 분할을 찾는다. 이렇게 하여 모든 샘플을 고려하는 것보다 계산의 효율성이 극대화되고, 메모리를 적게 사용할 수 있어 대규머 데이터 세트에 사용하기 적합하다. 또 분할 구간중 한 개의 구간을 누락된 값을 위해 남겨두고 할당하여 누락값에 대한 전처리가 없어도 전체 데이터에 대해 효율적으로 훈련이 가능하다.</p>
<h4 id="동작-방식-2">동작 방식</h4>
<p><strong>1. 히스토그램 생성</strong> : 연속적인 특성 값을 고정된 수의 구간으로 나눈다. 예를 들어 &#39;주택의 가격&#39; 이라는 특성이 있고 여러 가격의 주택이 있다면 각 가격 (ex: 3억 2500만원, 4억 2천만원, 5억 6천만원, 7억 3천만원...)으로 모델을 훈련하는 것이 아니라 , 일정한 구간을 설정하여 속하게 한다.(ex: 5억 6천만원짜리 주택은 5억-6억 구간에 속한다.)
<strong>2. 순차적 트리 구축</strong> : 그레디언트 부스팅처럼 구간화된 데이터를 기반으로 간단한 트리를 생성하고, 손실값을 줄이고 이전 트리의 업데이트를 진행하는 일을 반복하며 새로운 트리를 추가한다.
<strong>3. 누락 값 처리</strong> : 누락값을 위해 할당된 구간에 누락된 값이 있는 샘플들을 모아 별도로 관리한다.
<strong>4. 최종 모델 형성</strong>: 지정된 수의 트리가 추가되거나, 오류가 일정 기준 이하가 될때까지 이 과정을 계속해서 반복한다. 최종 모델은 모든 트리의 예측의 합으로 구성된다.</p>
</blockquote>
<blockquote>
<h3 id="xgboostextream-gradient-boosting">XGBoost(eXtream Gradient Boosting)</h3>
<p>XGBoost는 그레디언트 부스팅 알고리즘을 효율적으로 구현한 라이브러리로, 높은 성능과 빠른 속도로 널리 사용된다.</p>
<h4 id="특징">특징</h4>
<ul>
<li>정규화된 학습 : 손실함수에 정규화 항을 포합하여 과적합을 방지한다.</li>
<li>트리 가지치기 : 최대깊이까지 트리가 성장한 후, 가지치기를 통해 과적합을 방지한다.</li>
<li>빠른 속도 : 병렬 처리, 캐시 최적화 등의 기법으로 빠른 학습 속도를 제공한다.</li>
<li>유연성 : 다양한 종류의 손실함수와 사용자 정의 함수를 지원한다.</li>
<li>결손값 처리 : 누락된 데이터를 자체적으로 처리할 수 있다.</li>
</ul>
</blockquote>
<blockquote>
<h3 id="lightgbm-light-gradient-boosting-machine">LightGBM (Light Gradient Boosting Machine)</h3>
<p>LightGBM는 마이크로소프트에서 개발한 그레디언트 부스팅 프레임워크로 적은 메모리 사용량과 빠른 학습속도, 높은 정확도가 특징이다. 하지만 리프중심의 트리 성장방식으로 과적합에 민감하기 때문에 10,000개이상의 데이터에서 사용하는 것이 더욱 좋다.</p>
</blockquote>
<blockquote>
<h4 id="특징-1">특징</h4>
<ul>
<li>히스토그램 기반 학습 : 특성값을 구간으로 나누어 빠르게 학습한다.</li>
<li>리프중심의 트리 성장 : 최대 손실값을 가지는 리프노드를 계속해서 분할하면서, 비대칭적인 트리를 생성한다. 즉 손실값이 가장 큰 부분을 계속 분할하여 손실값을 최대한으로 줄이고 다른노드의 분할이 없어 메모리를 절약하고 속도를 증가시킬 수 있다.</li>
<li>효율적인 메모리사용 : 병렬 처리, 네트워크 통신 최적화를 통해 빠른 학습 속도를 제공한다.</li>
<li>결손값 처리 : 누락된 데이터를 자체적으로 처리할 수 있다.</li>
</ul>
</blockquote>
<p>앙상블 학습은 그리드 서치, 랜덤 서치를 사용한 하이퍼파라미터 튜닝과 함께 사용하여 머신러닝 지도학습 모델의 성능을 극대화 할 수 있다. 수작업으로 일일히 모든 조건에 대해 최적의 값을 찾지 않아도, 반드시 복잡한 수학적인 사고를 통해 가중치를 조절하지 않아도 된다는 점은 머신러닝 분야에 대해 오해하고 있던 부분이 풀리고 마음이 좀 편해지는 느낌이었다. 물론 실제 문제를 해결하기 위해 모델을 구축한다면 컴퓨팅 자원, 데이터가 가진 특성들에 대하여 여러 시각으로 고려해야할 점이 많고... 다양한 경험을 통해 직관을 길러야할 필요성이 있을 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[수학] 미분]]></title>
            <link>https://velog.io/@ordinary_c/%EC%88%98%ED%95%99-%EB%AF%B8%EB%B6%84</link>
            <guid>https://velog.io/@ordinary_c/%EC%88%98%ED%95%99-%EB%AF%B8%EB%B6%84</guid>
            <pubDate>Thu, 18 Jan 2024 06:31:05 GMT</pubDate>
            <description><![CDATA[<h1 id="미분">미분</h1>
<h2 id="정의">정의</h2>
<p>미분(Derivative)이란 어떤 함수의 특정 지점에서의 순간적인 변화율을 이야기 한다. 함수$f(x)$가 어떤 실수 $x$에 대한 변화를 나타낸다고 할 때 $f(x)$의 미분이란 x가 아주 조금 변했을때, $f(x)$가 얼마나 변하는지를 나타내는 것이 미분이다. 쉽게 이야기 하자면, 대나무 숲에 있는 대나무가 지난 얼마만큼의 기간 동안 얼마만큼 자랐으니 다음 기간동안엔 얼마나 자랄까? 라는 문제에 대해 해결방법을 찾는 것이다. 이 문제에 대해 &quot;대충 일주일동안 1미터 자랐으니 다음 1주일동안 1미터 자라겠지...&quot;라는 정도로 게으른 예측을 할 수도 있겠지만 이럴 경우 시간($\Delta x$)이 대나무에 생장에 대해 얼마나 영향을 미치는지 정확히 파악하고 해설 할 수가 없다. 미분은 이런 문제에 대해 순간적인 변화를 찾아 낸다. 일주일의 데이터로 일주일을 예측하는 것보다 하루치 데이터로 하루를 예측하는 것이 더 정확할 것이기 때문에 한시간, 분, 초, 밀리초 단위... 이처럼 연속된 값을 한없이 0에 가까운 순간으로 확대해서 자르고 그 다음 지점에 대한 변화율(기울기)값을 구하는 것이 미분이다. (내생각은... 한 없이 작은 순간의 시간이 대나무의 성장에 대해 미치는 영향을 최대한 정확하게 파악하여 상수로 둔다면, 대나무의 성장에 영향을 미치는 다른 요소들에 대해 파악하고 조정하는데 도움이 될것 같다.) </p>
<blockquote>
<h3 id="formula">Formula</h3>
<p>$f\prime(x) = \lim_{\Delta{x\to0}}\frac{f(x+{\Delta{x}})-f(x)}{\Delta{x}}$</p>
<ul>
<li>$f\prime(x)$ : 함수$f(x)$의 도함수(에프 프라임 엑스라고 읽는 듯...) 순간적인 변화율, 즉 기울기 값을 의미한다.</li>
<li>$\lim_{\Delta{x\to0}}$ : 변화를 유발하는 $\Delta{x}$ 가 연속적으로 0에 무한히 가까워 질 때의 한계를 의미한다.</li>
<li>$\frac{f(x+{\Delta{x}})-f(x)}{\Delta{x}}$ : x에서 $\Delta{x}$까지 함수 $f(x)$의 평균 변화율을 나타낸다.</li>
</ul>
</blockquote>
<blockquote>
<h3 id="거듭제곱-법칙의-적용">거듭제곱 법칙의 적용</h3>
<p>함수 $f(x)=x^n$(n은 실수) 의 형태일 때 <a href="https://www.youtube.com/watch?v=NPwJbuSQ2Vs&amp;t=1570s">곱셈공식</a>에 의해 $f(x+{\Delta{x}})$는 $x^n+nx^{n-1}\Delta{x}+더 높은 차수의 항들$로 전개가 된다. 이후로, </p>
<ul>
<li><p>도함수는 $f\prime(x)=\frac{(x^n+nx^{n-1}\Delta{x}+더 높은 차수의 항들)-x^n}{x^n}$이된다. </p>
</li>
<li><p>$x^n$은 상쇄되어 사라지고, $f\prime(x)=x^n+nx^{n-1}\Delta{x}+더 높은 차수의 항들$ 의 형태가 된다.</p>
</li>
<li><p>$\Delta{x}$가 0으로 접근할 때 $\Delta{x}$를 포함하는 항들이 $\Delta{x}$로 나뉘어지면서 $nx^{n-1}$ 의 항만 남게 되고, 나머지 항은 사라진다. (<strong>극한</strong>의 정의에 대해서도  공부를 해야할듯 하다)</p>
</li>
<li><p>따라서 $f\prime(x)= nx^{n-1}$의 형태가 된다.</p>
<h4 id="한마디로">한마디로</h4>
<p>함수 $f(x)=x^n$의(n은 실수) 도함수를 구하기 위해서 $f\prime(x)= nx^{n-1}$ 으로 계수를 내리고 지수를 $-1$ 한다. </p>
</li>
<li><p>$f(x)= x^2$의 경우, 도함수는 $f\prime(x)= 2x^{2-1} = 2x$</p>
</li>
<li><p>$f(x)= x^3$의 경우, 도함수는 $f\prime(x)= 3x^{3-1} = 3x^2$</p>
</li>
<li><p>$f(x)= x^4$의 경우, 도함수는 $f\prime(x)= 4x^{4-1} = 4x^3$</p>
</li>
<li><p>$f(x)= x^5$의 경우, 도함수는 $f\prime(x)= 5x^{5-1} = 5x^4$</p>
</li>
</ul>
</blockquote>
<blockquote>
<h2 id="조금더-정리하면">조금더 정리하면...</h2>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/e7e5c1ae-6885-438b-9a4e-b08df8de59ea/image.png" alt=""></p>
<ul>
<li>파란색 곡선 :  $f(x)=x^2$의 그래프로 $x=0$일때 최소값은 0이다</li>
<li>빨간색 X : $x$가 3일경우 $f(3) = 3^2 = 9$를 나타내는 점으로 함수의 그래프와 접선이 만나는 지점이다.</li>
<li>녹색 직선 : 접선으로써 $x=3$일때의 그 순간의 기울기(변화율)을 나타낸다. $f(3) = 3^2 = 9$ 일때  $f\prime(3) = 3 * 2 = 6$ 이다. ($x=3$일때의 기울기는 $y=6(x-3)+9$로, $y=6x-9$가 된다.)</li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[수학] 미분에 대해 정리하려다가]]></title>
            <link>https://velog.io/@ordinary_c/%EB%AF%B8%EB%B6%84%EC%97%90%EB%8C%80%ED%95%B4%EC%A0%95%EB%A6%AC%ED%95%98%EB%A0%A4%EB%8B%A4%EA%B0%80</link>
            <guid>https://velog.io/@ordinary_c/%EB%AF%B8%EB%B6%84%EC%97%90%EB%8C%80%ED%95%B4%EC%A0%95%EB%A6%AC%ED%95%98%EB%A0%A4%EB%8B%A4%EA%B0%80</guid>
            <pubDate>Thu, 18 Jan 2024 04:27:41 GMT</pubDate>
            <description><![CDATA[<p> 나는 수학을 잘 모른다. 수학을 좋아했던 기억은 있다. 초등학교 입학도 전 학습지에서 수도 없이 따라 써야만 했던 한글과 한자등과 다르게, 숫자만 적으면 빠르게 끝나서 좋아했었다. 음, 중학교 때 어떤 경험에 의해 나는 수포자의 길로 들어섰고 심지어 수능시험에도 아예 응시하지 않고 외국어 영역 준비를 했었다.(별로 효율적이진 않았던 것 같다) 여튼, 어찌저찌 이차저차 살다보니 개발자라는 직업을 가지고 벌써 10년을 일하고 있는데 언제나 수학이란 단어를 떠올리면 부채감이나 열등감같은 감정을 느낀다. 두번째 회사에서 K모 대학 출신 CTO께서 &#39;당연히 이 정도는 알 것&#39;이라는 전제로 내게 외계어로 말을 걸어오셨고, 무지에 부끄러워 아는 척넘어간 이후로 &#39;어떻게든 필요하니 뒤늦게 중학교 수학정도는 해보자&#39;, &#39;필요한 개념에 대해 입댈정도로만 알아보자&#39;, 라는 식으로 땜질로 버텼으니 당연한 일이다. 아마 제일 적절 한 시기에 가장 쉬운, 적절한 조치를 취하지 않고 넘어가 버렸던 일이었던것 같다. 이런 일은 대게 나중에 곪기 마련이다.</p>
<p>  이 몇년동안 머신러닝이니 딥러닝이니 이슈가 되고 가까이서 AI관련 업무가 진행되는 걸 눈앞에서 보고 해보자! 하고 달려든게 몇번이나 됐지만 위와 같은 게으름에 대한 부채를 해결해야 하는 순간을 마주하면 결국 &quot;그래도 뭐 내가 어느정도 할 줄 아는 개발자인데 굳이 이런것 까지 해야하나...&quot; 하며 오만하게(생각해보면 부끄러워서 그랬던것 같다.) 몇번을 반복해서 스노우볼을 굴렸고 안일한 생각은 결국 필요할 때 필요한 대응을 못하게 만들었다. 좋은 기회를 그냥 한번 날려버렸고, 개발자 호황은 끝났고, 회사는 어렵고 난 그냥 평범한 개발자다. </p>
<p>  올해는 다시 AI분야에 대해 다시 공부를 시작했고 내가 잘 모르는 개념들에 대해 대충 넘어가려는 욕망이 계속해서 나를 유혹한다. 하지만 &#39;와 C... 공식은 x,y밖에 모르는데 뭐 왜이렇게 흉측하게 생겼냐.&#39; 싶다가도 부채를 쌓지 않기 위해 하루이틀만 고민해보면 영 모를 말은 사실 별로 없다. 내가 수능보려고 공부하는 것도 아니니까. 이번에는 확실히 공부하고 정리하고, 글을 쓰자. 이해하자. 잘할 필요는 없다. 자주 되뇌고 있는데 아직까지는 잘 하고 있는것 같다.</p>
<p>  수학을 공부하면서 방정식에 제곱이 들어갈 경우 그래프가 왜 곡선을 그리는지 일차방정식에서는 양과 음의 관계가 왜 같은지, 그리고 이차방정식이 왜 또 다른 모양을 그리게 되는지 이해하게 되었다. 가중치의 변화에 따라 그래프의 모양이 어떻게 바뀌는지를 이해하고 나서는 정말 큰 쾌감을 느꼈다. 물론 겨우 중학생 수준이나 될까 말까하니 어떤 사람들에겐 당연히 가소로워 보이겠지만,뭐 어떤가... 어떤 매너리즘에 빠져 있던 나에게는 마치 퍼즐하는 것 같은 기분이고 너무 즐겁다. 부끄러워 하면서 또 아무것도 안하는 것보다야.</p>
<p>  &#39;미분&#39; 듣기만 해도 알레르기가 날거같은 단어에 대해 공부하는 중이었다. 함수가 연속된 값이라 이어지는 그래프를 그릴수 있는거구나(!) 그래서 미분가능해야 한다는 거구나... 미분은 변화율(?)이구나(!) 순간의 변화구나(!) 그래야 측정이 되겠네? 뭐야 별것도 아니네! 근데 뭐야 도함수? ㅎㅎㅎ 뭔 소리야 이건또... 하다가 갑자기 웃픈 맘과 센치한 마음이들어 이렇게 길게 글을 쓰게 됐다.</p>
<p>  계속해서 이 카테고리에 글을 업데이트 하려고 한다. 개발자 초년생일때 단순히 에러케이스 해결에 대해 쌓아 놓다가 방치했던 블로그는 부끄러워서 폐쇄했다. 매번 글을 쓸 때마다 조금이라도 더 공부를 하겠지. 누군가는 나같은 사람도 있을텐데 조금이나마 도움이 되면 좋겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]3주차_mission]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A03%EC%A3%BC%EC%B0%A8mission</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A03%EC%A3%BC%EC%B0%A8mission</guid>
            <pubDate>Mon, 15 Jan 2024 06:16:05 GMT</pubDate>
            <description><![CDATA[<h1 id="미션">미션</h1>
<h2 id="기본-미션">기본 미션</h2>
<blockquote>
<p>로지스틱 회귀가 이진 분류에서 확률을 출력하기 위해 사용하는 함수는 무엇인가요?
답: 시그모이드 함수</p>
</blockquote>
<h2 id="선택미션">선택미션</h2>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/b7ade9bf-7f4e-41b2-8a82-c793db8095d7/image.png" alt=""> |<img src="https://velog.velcdn.com/images/ordinary_c/post/345f7cf2-db7b-4246-84f9-32a5e4579e1d/image.png" alt=""> |<img src="https://velog.velcdn.com/images/ordinary_c/post/44cc232f-5b13-4c30-a284-72ade607b7c0/image.png" alt="">
|--|--|--|</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]3주차(chapter 04)]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A03%EC%A3%BC%EC%B0%A8chapter-04</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A03%EC%A3%BC%EC%B0%A8chapter-04</guid>
            <pubDate>Mon, 15 Jan 2024 06:13:12 GMT</pubDate>
            <description><![CDATA[<h1 id="4장">4장</h1>
<h2 id="01-로지스틱-회귀">01. 로지스틱 회귀</h2>
<h3 id="정의">정의</h3>
<p>로지스틱 회귀(Logistic Regression)란 사건의 발생 가능성을 예측하는 데 사용되는 확률모델로써, 일반적인 회귀분석과 마찬가지로 입력된 데이터(독립변수) 간의 관계를 이용해서 값(종속변수)을 예측하는 방법이다. 선형회귀와 유사하지만 예측 값이 특정 분류로 나뉘기 때문에 분류기법이라고 할수 있다. 이진분류(ex: yes/no, true/false, positve/negative) 또는 다중분류(ex: 맑음,흐림,비) 이 될수 있다. 이진분류 일경우 2개의 카테고리는 확률값 0.5를 기준으로 각각 양성과 음성(0,1)으로 나타내어지고 다중분류일 경우 각 카테고리로 분류 될 확률의 합이 1로 나타내어 진다.</p>
<h3 id="선형회귀대신-사용하는-이유">선형회귀대신 사용하는 이유?</h3>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/ordinary_c/post/cad687d4-1831-4094-9478-ad2329ef13b5/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/ordinary_c/post/33063697-e283-4e18-be7e-05b58fe0789f/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>일반적으로 선형회귀의 경우 왼쪽의 그림처럼 길이에 따른 무게 값, 즉 독립변수들로 부터 연속된 종속변수들을 예측하는데 사용될 수 있다. 하지만 예측해야하는 종속변수가 6면 주사위를 굴렸을 때 각 주사위의 면이 나올 확률이라면? 무게와 길이값을 기준으로 어떤 종류의 물고기일지 분류해야 한다면? KNN알고리즘을 이용한다면 각각 독립변수가 종속변수에 미치는 영향을 정확히 분석하지 못할것이고, 선형회귀를 대입한다면 우측에 첫번째 그림과 같이 확률이나 범주에 대하여 제대로 설명하지 못할것이다. 결국 우측 마지막 그림처럼 결과에 영향을 미치는 각각의 독립변수의 상관관계로 인해 하나의 값이 발생할 0~1까지의 확율(종속변수)을 구하기 위해서는 로지스틱스 회귀를 이용해야한다.</p>
<h3 id="동작방식">동작방식</h3>
<p>로지스틱 회귀는 선형회귀와 동일하게 선형방정식을 학습한 후 시그모이드(sigmoid)함수 또는 소프트맥스(softmax)함수를 통과시켜 0과 1사이의 확률값($\phi$)를 얻는다. 이항분류에서는 $\phi$값이 0.5이상일 경우 양성 클래스(1)로, 그렇지 않을경우 음성 클래스(0)으로 분류한다.</p>
<blockquote>
<h4 id="선형결합linear-combination">선형결합(Linear Combination)</h4>
<p>$z = w_1x_1+w_2x_2+\cdots+ w_nx_n+b$</p>
<ul>
<li>$z$ = 종속변수(예측값)</li>
<li>$w_n$ = 계수(coefficient) 혹은 가중치(weight)</li>
<li>$x_n$ = 독립변수, 종속변수에 영향을 주는 변수(특성값)</li>
<li>$b$ = 절편(intercept)</li>
</ul>
</blockquote>
<blockquote>
<h4 id="시그모이드-함수sigmoid-functionlogistic-function">시그모이드 함수(Sigmoid Function,Logistic Function)</h4>
<p>$\phi  = \frac{1}{1+e^{-z}}$</p>
<ul>
<li>$\phi$ = 0과 1사이의 확률값. </li>
<li>$e^{-z}$ = $z$값이 매우 큰 양수일 경우 $e^{-z}$ 값은 0에 가까워져 ${1 \over 1+0 }= 1$ 에 한없이 가까워 지게되고, 매우 큰 음수일 경우 $e^{-z}$ 값은 매우 큰 수가되어 ${1 \over 1+ 큰 수 }$가되어 0에 한 없이 가까워 진다.</li>
</ul>
</blockquote>
<blockquote>
<h4 id="소프트맥스-함수softmax-function">소프트맥스 함수(SoftMax Function)</h4>
<p>$p_j  = \frac{e^{zj}}{\Sigma^K_{k=1} e^{zj}}$ = $j번째입력값 \over 입력값의 합$
$$softmax(z) = [\frac{e^{z_1}}{e^{z_1}+e^{z_2}+e^{z_3}},\ \ \ \frac{e^{z_2}}{e^{z_1}+e^{z_2}+e^{z_3}},\ \ \  \frac{e^{z_3}}{e^{z_1}+e^{z_2}+e^{z_3}}] = [p_1, p_2, p_3] = 1$$</p>
<ul>
<li>$j$:  출력값의 j번째 요소</li>
<li>$K$: 클래스의 총 개수</li>
<li>$e^{zj}$ : $z$의 $j$번째 요소에 대한 지수함수 </li>
<li>${\Sigma^K_{k=1} e^{zj}}$ : 모든 클래스 점수에 대한 지수 함수의 합</li>
<li>예를들어 만약 3개의 선형방정식의 출력 $z_1$<del>$z_3$까지 값이 있다면 지수함수 $e^{z_1}$</del>$e^{z_3}$ 을 모두 더한 값으로 $e^{z_1}$~$e^{z_3}$ 을 나누어 주고, $s1$에서 $s3$까지 모두 더하면 분자와 분모가 모두 같아져 1이된다.</li>
</ul>
</blockquote>
<blockquote>
<h4 id="확률-분석">확률 분석</h4>
<ul>
<li>이항분류일 경우 시그모이드 함수 값이 0.5이상이면 양성(1), 그렇지 않을경우 음성(0)으로 분류</li>
<li>다중분류일 경우 소프트 맥스 함수 값의 총 확률의 합이 1로 표현된다.</li>
</ul>
</blockquote>
<h2 id="02-확률적-경사-하강법">02. 확률적 경사 하강법</h2>
<h3 id="정의-1">정의</h3>
<p>경사하강법(Gradient Descent)란 손실함수(Loss function)의 기울기를 계산하여 이 기울기가 감소하는 반향으로 반복적으로 파라미터를 업데이터 하여 최적의 파라미터를 찾는 방법이다. 쉽게 이야기해서 머신러닝의 모델이 스스로 틀릴 확률이 가장 적은 가중치값을 찾는 과정이다. 확률적(Stochastic)이란 전체 데이터 세트에 대해 계산하지 않고 무작위로 선정된 데이터 세트의 대해 기울기를 계산하는 방식이다. 예를 들어 아래 이미지와 같이 $f(x)=x^2*\sin(x)$ 라는 함수가 존재할 때, $x$값을 증가시켰을 때 함수의 값이 증가한다면 x를 음의 반향으로 옮기고, 반대의 경우에 x를 양의 방향으로 움직인다면 어느 지점에서 함수의 값이 최소가 될수 있는 x값을 찾을 수 있을 것이다.</p>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/b26a5601-d7a9-4901-baa2-67a6f697e635/image.gif" alt=""></p>
<p align="center">
    출처 : https://hackernoon.com/life-is-gradient-descent-880c60ac1be8
</p>

<h3 id="왜-사용해야-하나">왜 사용해야 하나?</h3>
<p>머신러닝의 데이터는 계속해서 추가 되고 관리가 되어야하는데, 시간이 지날 수록 필연적으로 훈련 데이터 세트의 크기는 커질 수 밖에 없다. 매번 새로운 데이터가 추가 될때마다 모든 데이터 세트에서 최적의 가중치 값을 찾기 위해 학습을 한다면 비용과 시간은 계속해서 증가하게 된다. 이를 해결하기 위해 대표적으로 확률적 경사하강법을 사용하는데, 이러한 방식을 <strong>점진적 학습</strong>또는 온라인 학습이라고 부른다. 앞서 훈련된 데이터에서의 가중치 값을 유지한 채로, 새로운 데이터에 대해서 조금씩 가중치 값을 업데이트 하는 방식으로 모델은 훈련에 사용한 모든 데이터를 유지할 필요가 없다.</p>
<h3 id="손실함수">손실함수</h3>
<p>손실함수(Loss Function)는 모델의 성능을 측정하는 함수로, 모델의 예측값과 실제 타깃값 사이의 차이를 수치화 한다. 손실함수는 반드시  <strong>미분</strong> 가능해야한다. 즉 함수 $f(x)$ 에서 $x$의 변화가 함수에 어떻게 영향을 미치는지 그 변화의 양을 측정할수 있어야 한다. 그래프로 나타낼 수 있는 규칙이 존재 해야한다는 이야기다. </p>
<h4 id="로지스틱-손실함수">로지스틱 손실함수</h4>
<p>이진분류에서의 정확도는 샘플이 얼마나 타깃값을 잘 맞추었느냐에 따라 달려있기 때문에 연속적이라고 말할 수없고, 그에 따라 손실값을 최대한 줄이기 위한 용도로 사용할 수가 없다. 예를 들어  100개의 샘플중 90개를 맞추고 있는 모델이 하나의 샘플을 더 맞추기위해 가중치값을 계속 조정해 나갈때, 정확도는 아무런 변화가 없다가 샘플을 하나 더 맞추는 순간 갑자기 91%로 변할 것이다. 즉 모델이 가중치의 움직임에 따른 정확도의 변화량을 파악하여 어느 방향으로 가중치값을 조정해야할지를 결정할 수가 없다. 이러한 문제를 해결하기 위해 사용하는 것이 로지스틱 손실 함수(Logistic Loss Function) 혹은 이진 크로스엔트로피 손실함수(Binary Cross-entrophy Loss Function) 이라고 부른다.</p>
<blockquote>
<h4 id="formula">Formula</h4>
<p>$L  = -y\log(\hat{y})-(1-y)\log(1-\hat{y})$</p>
<ul>
<li>$y$ : 실제 타깃 값(0 or 1)</li>
<li>$\hat{y}$ : 모델의 예측 확률 (sigmoid를 통과한 0-1사이의 확률값)</li>
<li>타깃값이 1인경우 : $y=1$일 때 , 손실값은 $-\log(\hat{y})$ 이되고 $\hat{y}$의 값이 1에 가까울수록 손실값이 0에 가깝게, 0에 가까울수록 무한대로 증가한다.</li>
<li>타깃값이 0인경우 : $y=0$일 때 , 손실값은 $-\log(1 - \hat{y})$ 이되고 $\hat{y}$값이 0에 가까울수록 손실값이 0에 가깝게, 1에 가까울수록 손실은 무한대로 증가한다. (즉, 음성클래스의 예측값을 양성클래스에 대한 예측으로 바꾼다. 예측값이 0.2라면 음성클래스로 분류되는데, 이를 1 - 0.2로 0.8을 만들어 양성클래스에 대한 손실값으로 만든다.)</li>
</ul>
</blockquote>
<h3 id="에포크와-과대과소적합">에포크와 과대/과소적합</h3>
<p>에포크(Epoch)란 모델이 학습과정에서 전체 훈련 데이터세트를 한번 완전히 사용하는 것을 의미한다. 확률적 경사하강법 모델에서는 에포크 횟수가 적으면 모델이 경사를 따라 내려오다가 멈추어 과소적합한 모델이 되어 버릴것이고, 반대로 너무 많은 반복은 훈련세트에 과대적합한 모델이 될수 있다. 적절한 학습 반복횟수를 찾아내기위해 과대적합이 시작되기 전 훈련을 멈추는 기법을 조기종료라고 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[수학] 로그]]></title>
            <link>https://velog.io/@ordinary_c/%EC%88%98%ED%95%99-%EB%A1%9C%EA%B7%B8</link>
            <guid>https://velog.io/@ordinary_c/%EC%88%98%ED%95%99-%EB%A1%9C%EA%B7%B8</guid>
            <pubDate>Thu, 11 Jan 2024 06:02:04 GMT</pubDate>
            <description><![CDATA[<h1 id="로그">로그</h1>
<p>로그(log:logarithm)란 지수(Power)를 다른 방법으로 표현한것이다. 예를 들어 $2^4 = 16$ 라는 방정식이 있을 때 $2$는 밑, $4$를 지수, 16을 값이라고 읽고 &quot;2를 4번 제곱하면 16이라는 값이 나온다&quot; 라고 설명할 수 있을 것이다. 이 문제에 대해 <strong>&quot;2를 몇번 제곱하면 16이라는 값이 나올까?&quot;</strong> 라고 묻는 것이 바로 로그 방정식이다.</p>
<blockquote>
<p>$log_2(16)=4 \quad \Longleftrightarrow \quad2^4 = 16$ </p>
</blockquote>
<p>왼쪽의 방정식이 로그 방정식으로, <strong>&quot;2를 밑으로하는 16의 로그 방정식은 4&quot;</strong> 라고 읽는다. 로그가 발명된 목적은 한마디로 <strong>&quot;복잡한 수를 쉽게 계산하기 위해&quot;</strong> 서다. 본디 천문학적인 수의 쉬운 계산을 위해서 만들어졌다고 한다. 현대에서 복잡한 수학적 현상을 단순화하고, 문제에 대해 직관적으로 이해하고 분석하는데 사용된다. 예를 들어 모델에 제공하는 하이퍼파라미터 $\alpha$ 값의 리스트 [0.001, 0.01, 0.1, 1, 10, 100] 이 있을 때, 이를 그래프 상의 그리게 되면 스케일의 문제로 제대로 알아볼 수가 없을 것이다. 이때 밑을 10으로 가지는 상용로그함수를 이용하여 각 값을 10에 대한 지수값으로 $log_{10}(0.001) = x$ 으로써 $10^x=0.001$ 의 지수함수로 나타낼 수 있고  , $a^{-x} = \frac{1}{a^x}$ 이기 때문에 x값을  $-3$ 으로 나타내고 전체 리스트에 대해 [-3, -2, -1, 0, 1, 2] 표현하여 편~안하게 사용할 수가 있다. 한마디로, 로그를 이용해서 패턴이 숨겨져 있는 복잡한 수의 데이터를 지수로 스케일링하여 데이터의 구조를 더 잘 파악할수 있다... 라고 간단히 이해하면 될것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]2주차_mission]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A02%EC%A3%BC%EC%B0%A8mission</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A02%EC%A3%BC%EC%B0%A8mission</guid>
            <pubDate>Wed, 10 Jan 2024 04:15:57 GMT</pubDate>
            <description><![CDATA[<h1 id="미션">미션</h1>
<h2 id="선택-미션">선택 미션</h2>
<h3 id="모델-파라미터란">모델 파라미터란?</h3>
<p>머신러닝, 특히 딥러닝에서 주어진 데이터를 학습할때 작동하는 모델 내부의 변수를 의미한다.
예를 들어 물고기의 길이에 따라 무게는 어떻게 변화하는가? 라는 문제에 대해 데이터의 분포를 보고 키가 증가할수록 체중변화의 비율은 얼마나 될까? 기본적으로 키가 체중에 미치는 영향은 얼마나 될까? 키가 0일때 체중이 얼마일까? 따위등으로 데이터의 종류, 패턴에 따라 추가하거나 조정되며 최적화를 진행하게 된다. 파라미터의 수, 그리고 값에 설정은 모델의 학습 능력을 결정하는 중요한 요소이며 복잡도를 결정한다. 너무나 많은 파라미터의 사용은 과대적합을 유발하고, 너무 적은 파라미터는 과소적합을 유발한다. 많은 머신러닝 알고리즘에서 훈련과정이란, 최적의 모델 파라미터를 찾아 내는 것과 같다. 이를 <strong>&quot;모델기반 학습&quot;</strong> 이라고 한다.</p>
<h2 id="기본-미션">기본 미션</h2>
<h3 id="chapter03-01-문제-파라미터-조정-그래프">chapter03-01 문제 파라미터 조정 그래프</h3>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/28b8762a-5262-403d-8d4f-59f4d6b76d7a/image.png" alt="">
<img src="https://velog.velcdn.com/images/ordinary_c/post/4dd116df-22b9-4f5b-8ac7-b6ca8e2bec4a/image.png" alt="">
<img src="https://velog.velcdn.com/images/ordinary_c/post/afafccbb-b71e-4df6-85a8-bf8396e5b52c/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]2주차(chapter 03)]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A02%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A02%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Tue, 09 Jan 2024 04:24:37 GMT</pubDate>
            <description><![CDATA[<h1 id="3장">3장</h1>
<h2 id="01-회귀">01. 회귀</h2>
<h3 id="정의">정의</h3>
<p>회귀(regression)라는 단어는 프랜시스 골턴이라는 사람이 유전학을 연구하던 도중 아버지의 키에 따라 아들의 키가 결정되는 경향이 있지만 세대가 지나면서 키가 작은 아버지의 아들은 물론 키가 작지만 아버지보다는 커지고, 키가 큰 아버지의 아들도 키가 큰편이지만 아버지보다는 작아지는 경향을 보이며 평균에 가까워지는 &#39;평균으로의 회귀&#39; 현상을 증명하기 위해 만든 것으로 알려져 있다. 
즉 아버지의 키($x$), 아들의 키($y$)는 유전이라는 정해진 영향을 미치는 요인이 있고 이처럼 데이터의 값들의 상관관계, 특정한 경향이나 요인이 있다면 하나의 값($x$) 를 알고 있을 때 다른 나머지 값($y$)는 보통 전체 데이터의 상관관계상 평균적인 값을 벗어나지 않는 경향을 가지고 있다는 이야기다. </p>
<h3 id="머신러닝에서">머신러닝에서</h3>
<p>지도 학습 알고리즘은 크게 분류와 회귀(regression)으로 나뉜다. 분류는 샘플이 모델에 학습되어 있는 클래스중 어떤것과 가장 가까운지를 분별하는 문제이고, 회귀는 학습되어 있는 클래스로 분류하는 것이 아닌, 임의의 어떤 숫자를 예측하는 문제다.
예를 들어 생선의 무게와 길이데이터 값을 샘플로 이용할때 이 생선의 종류를 판별하는 것은 분류의 문제이고, 이 생선의 길이 데이터 값에 따라 무게를 얼마로 예측할 수 있는지에 대한 문제를 바로 회귀라고 한다. 책의 3장 첫부분에서는 K-최근접 이웃회귀를 다루는데, K-최근접 이웃 모델과 동일하게 입력값에 대한 근접한 이웃 샘플들을 구하고, 그 이웃한 샘플들의 평균값으로 출력값을 예측한다.</p>
<h3 id="결정계수r2">결정계수($R^2$)</h3>
<p>분류 문제는 입력값에 해당하는 클래스를 출력하면 되지만, 회귀의 경우 타깃값과 예측값이 모두 정해져 있지 않은 임의의 수치이기 때문에 정확한 숫자를 맞춘다는 것은 거의 불가능 하다. 하지만 테스트 데이터와 타깃값을 넣고 모델의 .score() 펑션으로 점수를 내어보면 0-1의 범위로 정확도를 나타내어주는데, 이 정확도는 어떻게 판별하는 것일까? 바로 결정계수(coefficient of determination) 값으로 나타 낸다고 한다.</p>
<blockquote>
<p>$R^2 = 1 - \frac{(타깃값-예측)^2의, 합}{(타깃값-평균)^2의, 합}$</p>
<ul>
<li><strong>타깃값</strong>: 테스트 타깃 데이터의 실제 값.</li>
<li><strong>예측값</strong>: 회귀 모델에 의해 예측된 값.</li>
<li><strong>평균</strong>: 테스트 타깃 데이터의 평균 값.</li>
</ul>
</blockquote>
<p>각 샘플의 타깃값과 예측한 값의 차이를 제곱하여 더하고, 타깃값과 타깃 데이터의 평균의 차이를 제곱하여 더한 값으로 나눈다. 예측 값이 타깃값의 평균정도를 나타낸다면, $R^2$값은 0에 가까운 값이 되고, 예측 값이 타깃값에 가까워진다면 분자가 0에 가까워져  $R^2$값은 1에 가까운 값이 된다. </p>
<h3 id="과대적합">과대적합</h3>
<p>훈련세트의 점수는 높게 나오지만, 테스트 세트에서의 점수가 굉장히 나쁘게 나왔을 경우 이를 과대적합(Overfitting) 이라고 정의한다. 훈련 세트에 너무 잘 맞추어져 있어서 새로운 데이터에 대한 분석 능력이 떨어지는 현상이다. 과대적합이 발생할 경우 이 모델을 이용해서 수행하고자 하는 분류나 예측 작업을 목적을 달성할 수 없다. </p>
<h4 id="과대적합의-원인들">과대적합의 원인들</h4>
<ul>
<li>과도한 복잡도 : 모델의 복잡도가 큰 경우</li>
<li>부적합한 데이터 : 데이터 세트내 분산이 크거나, 노이즈가 심한 경우 </li>
<li>데이터 부족 : 데이터 세트내 데이터가 충분하지 못한 경우</li>
<li>과도한 학습시간 : 과도하게 많은 epoch수로 학습하는 경우</li>
</ul>
<h4 id="과대적합의-해결방안들">과대적합의 해결방안들</h4>
<ul>
<li>정규화 : 정규화 기법을 사용하여 모델의 복잡도를 줄인다.</li>
<li>데이터 확장 : 학습 데이터 세트를 확장하여 다양성을 높인다.</li>
<li>조기종료 : 과적합 발생시점 이전에 학습을 이르게 종료</li>
</ul>
<h3 id="과소적합">과소적합</h3>
<p>테스트 세트의 점수가 훈련세트보다 높거나, 두 점수가 모두 너무 낮을 경우를 과소적합(Underfitting)이라고 정의한다. 모델을 제대로 이용하지 못한다는 점은 같지만 과대적합과는 다르게 학습된 데이터의 특성과 패턴조차 학습하지 못한 상황이다. </p>
<h4 id="과소적합의-원인들">과소적합의 원인들</h4>
<ul>
<li>부족한 복잡도 : 모델이 너무 단순하여 데이터의 패턴을 파악할 수 없는 경우</li>
<li>데이터 특성 누락 : 데이터의 상관관계를 결정짓는 특성이나 변수가 학습과정에 누락되었을 경우</li>
<li>과도한 정규화 : 반드시 필요한 데이터가 누락됐을 경우</li>
<li>부족한 학습시간 : 모델에 학습에 필요한 만큼의 epoch수가 충족되지 못할경우</li>
</ul>
<h4 id="과소적합의-해결방안들">과소적합의 해결방안들</h4>
<ul>
<li>복잡도 증가 : 데이터 특성에 맞게 파라미터등을 추가하여 복잡도를 증가 시킨다.</li>
<li>데이터의 특성추가 : 학습 데이터 세트의 특성을 추가하여 더 많은 정보를 제공한다.</li>
<li>데이터 전처리 검토 : 학습데이터 전처리의 문제점이 있는지를 체크한다.</li>
<li>학습시간 추가 : 충분한 정확도를 가질 때까지 epoch수를 증가 시킨다.</li>
</ul>
<blockquote>
</blockquote>
<h6 id="--노이즈--모델에서-의도한바와-관계가-없거나-무의미-무작위-오류데이터들을-의미한다-br---복잡도--모델에-데이터를-학습하고-해석하기-위한-파라미터-레이어등이-많거나-깊은-구조를-가질-때-복잡하다고-한다-br---epoch--모델이-전체-학습-데이터-세트를-한번-통과하여-훈련하는-사이클">- 노이즈 : 모델에서 의도한바와 관계가 없거나 무의미, 무작위, 오류데이터들을 의미한다. <br/> - 복잡도 : 모델에 데이터를 학습하고 해석하기 위한 파라미터, 레이어등이 많거나 깊은 구조를 가질 때 복잡하다고 한다. <br/> - epoch : 모델이 전체 학습 데이터 세트를 한번 통과하여 훈련하는 사이클</h6>
<h2 id="02-선형-회귀">02. 선형 회귀</h2>
<h3 id="정의-1">정의</h3>
<p>선형회귀(linera regression)란 말 그대로 특성이 하나인 선형적인 데이터를 다루기 위한 회귀 알고리즘이다. k-최근접 이웃 알고리즘은 이웃한 값들의 평균으로 출력값을 예측하기 때문에 훈련 세트를 벗어난 값을 예측하는 것에 한계가 있다. 예를들어 길이 10cm ~ 50cm까지의 훈련 세트로 학습을 했다면, 길이 100cm의 샘플의 값을 예측할 때 가장가까운 50cm근방의 데이터로 값을 예측하기 때문이다. 새로운 훈련데이터의 추가로 극복할 수 있겠지만, 길이가 증가할수록 무게가 증가하는 <u><strong>직선</strong></u>의 선형적인 데이터의 해석에는 효율적이지가 않다. 이러한 문제를 해결하기 위해 대표적으로 사용되는 것이 &quot;선형회귀(linera regression)&quot; 알고리즘이다. 말그대로 &quot;선형&quot; 즉 기울기와 절편이 있는 간단한 1차 방정식의 형태를 띄우고 있다.</p>
<blockquote>
<p>$y = ax + b$</p>
<ul>
<li>$y$ : 종속변수 (ex. 길이에 따라 영향을 받는 무게값)</li>
<li>$x$    : 독립변수, 종속변수에 영향을 주는 변수(ex. 기준이 되는 길이값)</li>
<li>$a$ : 기울기 , 계수(coefficient) 혹은 가중치(weight) 사이킷런 .coef_ 속성에 저장됨</li>
<li>$b$ : y절편(intercept), x가 사이킷런 .intercept_ 속성에 저장됨</li>
</ul>
</blockquote>
<h3 id="다항-회귀">다항 회귀</h3>
<p>다항회귀(Polynormial Regression)은 선형회귀의 확장된 형태로, 데이터가 단순한 직선일때보다 <u><strong>곡선의 형태</strong></u>로 더 잘 설명될 때 사용된다. 예를들어 데이터가 면적이 길이가 늘어날수록 무게가 일정하게 늘어나는 철근이라면 1차 방정식으로도 충분히 데이터를 예측할수 있겠지만, 살아있는 생물의 경우는 키가 증가함에 따른 체중은 곡선의 형태를 띌것이고, 간단하게 아래와 같은 2차 방정식의 그래프로 설명할 수 있다.</p>
<blockquote>
<p>$y = ax^2 + bx + c$</p>
<ul>
<li>$y$ : 종속변수 (ex. 키에 따라 영향을 받는 체중값)</li>
<li>$x$    : 독립변수 (ex. 키값)</li>
<li>$a$ : [파라미터] 2차항의 계수로 $a$값이 0에 가까우면 모델은 직선에 가까워지고, 커질수록 곡선에 가까워진다. 양수라면 곡선이 위로 볼록할 것이고, 음수라면 아래로 볼록한 곡선을 나타낸다. a</li>
<li>$b$ : [파라미터] 1차항의 계수로 기울기에 영향을 준다. 데이터가 독립변수(키값)에 따라 증감하는지에 대한 기본적인 경향을 나타낸다.</li>
<li>$c$ : [파라미터] y의 절편으로써 키값이 0일때 예상되는 체중을 나타낸다.</li>
</ul>
</blockquote>
<p>여기서 파라미터란 모델이 주어진 데이터에 대해 패턴과 구조를 어떻게 반영하고 해석하는지를 결정한다. 이 파라미터들 <strong>($a$:키가 증가할수록 체중변화의 비율은 얼마나 될까? $b$:기본적으로 키가 체중에 미치는 영향은 얼마나 될까? $c$:키가 0일때 체중이 얼마일까?)</strong> 을 조정하여 데이터 샘플들 간의 오차를 최소화하고 패턴을 가장 잘 설명하는 값을 찾아내는 과정을 &quot;모델 피팅&quot; 또는 &quot;모델 최적화&quot; 작업이라고 한다.</p>
<h2 id="03-특성-공학과-규제">03. 특성 공학과 규제</h2>
<h3 id="다중회귀">다중회귀</h3>
<p>다항회귀에서는 문제를 해결하기위해 하나의 특성을 사용하여 모델을 훈련했다. 하지만 우리가 실제로 해결해야할 대부분의 문제들은 결과(종속변수)를 도출하는 과정에 여러가지 상황(특성,독립변수)들이 영향을 미친다. 이렇게 여러개의 특성들을 사용한 선형회귀를 다중회귀(Multiple Regression)라고 부른다.</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/ordinary_c/post/add7b7ea-d326-4563-ad48-13a85860d666/image.png" alt=""> 특성이 1개인 그래프</th>
<th><img src="https://velog.velcdn.com/images/ordinary_c/post/86c27237-b2b0-4860-ae61-24574414c880/image.png" alt=""> 특성이 2개인 그래프</th>
</tr>
</thead>
</table>
<p>오른쪽 그래프 처럼 특성이 2개라면 3차원 공간을 나타낸다. 특성이 그 이상이라면 4차원 공간을 나타내어 그림으로 표현할 수없다.</p>
<h3 id="특성공학">특성공학</h3>
<p>주어진 특성을 사용해 새로운 특성을 뽑아내는 작업을 특성공학(Feature Engineering)이라고 한다. 예를 들어 길이, 높이, 폭이라는 세가지 특성이 있다면 길이와 높이를 곱해 면적이라는 특성을 만들어 내어 학습하고, 모델의 복잡성을 감소시키거나 데이터의 숨겨진 패턴들을 파악할 수 있다.</p>
<h4 id="변환기">변환기</h4>
<p>변환기(transformer)는 데이터의 전처리와 관련되어 특성공학을 수행하는데 사용되는 클래스이다.
예를 들어 사이킷런에서 PolynomialFeatures 클래스의 경우 훈련한 특성으로 설정한 차수까지의 다항식 조합을 생성한다. 차수가 높아질수록 더 많은 특성을 생성해 내어 모델이 해석할 수 있는 특성의 수를 늘려 데이터의 패턴에 대해 더 잘 설명할 수가 있게 된다. 사이킷런에서 제공하는 변환기들은 특성의 수를 확장하는 것 뿐만 아니라 데이터의 정규화, 표준화, 데이터 결손 보완, 이진 변환등 머신러닝에 효과적인 여러 알고리즘을 구현하여 제공한다. 하지만 과도하게 많은 특성은 과대적합을 유발하는 요소이다.</p>
<blockquote>
<h4 id="사이킷런에서-제공하는-변환기-종류">사이킷런에서 제공하는 변환기 종류</h4>
<ul>
<li>PolynomialFeatures: 기존 특성들의 다항식 조합을 생성하여 특성의 수를 확장한다.</li>
<li>StandardScaler: 데이터의 특성별로 평균을 0, 표준편차(분산)를 1로 조정하여 특성들을 표준화하여 정규 분표 형태에 가깝게 만든다.</li>
<li>MinMaxScaler: 특성값이 0과 1 사이에 위치하도록 데이터를 재조정한다. 데이터가 심하게 왜곡된 경우나 이상치에 민감한 알고리즘에서 유용하다.</li>
<li>RobustScaler: 중앙값과 사분위수를 사용하여 특성들을 스케일링한다. 특성들이 같은 스케일을 갖게되며 평균대신 중앙값을 사용하여 극단값에 영향을 받지 않는다.</li>
<li>OneHotEncoder: 범주형 변수를 이진 집합으로 변환한다. 예를 들어 서울,부산,대전등의 텍스트 데이터를 서울:[1,0,0], 대전:[0,1,0], 부산:[0,0,1] 로 변환한다.</li>
<li>LabelEncoder: 범주형 타깃 변수를 숫자로 변환한다. 분류 문제에서 타겟 레이블을 수치형으로 변환하는 데 사용된다.</li>
<li>SimpleImputer: 누락된 값(missing values)을 평균, 중앙값, 최빈값 등으로 채워넣는다. 데이터의 결측치를 처리하는 데 필요하다.</li>
<li>FunctionTransformer: 사용자 정의 함수를 사용하여 데이터를 변환한다.</li>
</ul>
</blockquote>
<p>여태 수학에 대해 아주 깊게 알아야 머신러닝을 다룰 수 있다고 생각했는데...  집짓는데 망치의 특성과 다루는 법을 알면 되지, 망치를 만드는 방법부터 배울 필요가 없는 것은 개발과 마찬가지인 부분인것 같다.</p>
<h3 id="규제">규제</h3>
<p>규제(Regularization)란 모델이 훈련세트를 과도하게 학습하여 과대적합되는 것을 막는 기술이다. 규제는 주로 선형회귀같은 지도학습 알고리즘에서 사용되며 대표적으로 특성에 곱해지는 계수나 기울기의 크기를 작게 만들어 규제하는 릿지회귀(ridge) 나 라쏘회귀(lasso)같은 모델들이 있다.</p>
<h3 id="하이퍼파라미터">하이퍼파라미터</h3>
<p>하이퍼파라미터(hyperparameter)란 모델에게 사람이 알려줘야하는 값이다. 학습을 실행할때 모델의 성능에 직접적인 영향이 미친다. 이를 통해 모델의 구조나 학습 과정을 사람이 조정하고 제어할 수 있다. 예를 들어 릿지,라쏘회귀의 하이퍼파라미터인 alpha값은 작을 수록 가중치에 대한 제약이 약해져 선형회귀 모델과 유사해진다.</p>
<blockquote>
<h4 id="하이퍼파라미터의-예시">하이퍼파라미터의 예시</h4>
<ul>
<li>학습률(Learning Rate): 매 반복에서 모델의 가중치를 얼마나 조정할지 영향을 미침.</li>
<li>정규화 매개변수(Regularization Parameter): 릿지 회귀나 라쏘 회귀에서 사용하는 규제의 강도를 결정한다. </li>
<li>트리의 깊이(Tree Depth) 또는 노드 수: 결정 트리, 랜덤 포레스트, 그래디언트 부스팅 트리 등에서 트리의 깊이나 노드의 최대 수를 설정함.</li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]1주차_extra(chapter 02-2)]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A01%EC%A3%BC%EC%B0%A8extrachapter02-2</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A01%EC%A3%BC%EC%B0%A8extrachapter02-2</guid>
            <pubDate>Wed, 03 Jan 2024 06:06:02 GMT</pubDate>
            <description><![CDATA[<h2 id="데이터-전처리">데이터 전처리</h2>
<h3 id="개요">개요</h3>
<p>K-최근접 이웃 모델로 길이, 무게 데이터로 이웃을 판단할때 두 특성간의 스케일 차이로 인해 올바른 예측이 불가능하다. 이 모델은 그래프상 기준 위치의 값과 가까운 데이터들의 많음이 어떠냐에 따라 정답을 예측하는데 무게의 기준값의 범위가 0 - 1,000g, 길이의 경우 0 - 40cm라면 길이의 대한 거리값이 얼마든 정답을 예측하는데 거의 영향을 미치지 못한다. 거리기반 모델의 경우일때 이런 경향이 더 심하다. 그렇기 때문에 각 특성값을 인정한기준으로 표준화를 해주어야 하고 이러한 작업을 &quot;데이터 전처리&quot; 라고 정의한다.</p>
<h3 id="전처리-방법">전처리 방법</h3>
<h4 id="표준점수standard-score-or-z-score">표준점수(Standard Score or z-score)</h4>
<p>표준점수는 각 특성값의 크기와 상관 없이 표준편차의 몇배 만큼 떨어져 있는지를 나타내기 때문에 동일한 기준으로 비교가 가능하다. 넘파이에서 제공을 해주기 때문에 간단히 이용가능하지만 가물가물한 개념때문에 <a href="https://velog.io/@ordinary_c/%EC%88%98%ED%95%99-%ED%91%9C%EC%A4%80-%ED%8E%B8%EC%B0%A8"><strong>표준 편차</strong>(링크)</a>에 대해서 간단히 정리해 봤다.
표준 점수는 넘파이를 이용해 간단하게 구할수 있다.</p>
<pre><code>import numpy as np

#평균
mean = np.mean(train_input, axis=0)
#표준편차
std = np.std(train_input, axis=0)
#각 특성의 표준점수
train_sacled = (train_input - mean) /std</code></pre><ul>
<li>확실히 파이썬은 다룰때마다 신기한데, 넘파이는 더 신기하다. train_input에 있는 각 행의 특성(관찰값) 마다 평균값을 빼주고 (편차) 표준편차로 나누어준다. 넘파이가 이렇게 배열을 스마트하게 계산해주는 것을 브로드캐스팅이라고 한다. axis의 개념이 대강 생각했던 바와 조금 다른데, 4차원을 넘어가는 axis의 개념은 조금더 공부를 해봐야할 것 같다.</li>
</ul>
<h3 id="전처리-데이터의-이용">전처리 데이터의 이용</h3>
<p>당연한 이야기겠지만, 전처리 데이터를 이용해서 모델을 훈련했을 경우, 테스트데이터 셋이나 판단한 데이터들도 훈련데이터와 동일한 전처리 기준을 이용하여 변환한 후 판단에 이용해야한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[수학] 표준편차]]></title>
            <link>https://velog.io/@ordinary_c/%EC%88%98%ED%95%99-%ED%91%9C%EC%A4%80-%ED%8E%B8%EC%B0%A8</link>
            <guid>https://velog.io/@ordinary_c/%EC%88%98%ED%95%99-%ED%91%9C%EC%A4%80-%ED%8E%B8%EC%B0%A8</guid>
            <pubDate>Wed, 03 Jan 2024 04:56:10 GMT</pubDate>
            <description><![CDATA[<h1 id="표준편차">표준편차</h1>
<p>자료의 값들이 얼마나 흩어져 있는지를 하나의 수치로 나타내는 방법. &quot;Standard Deviation&quot; 약어로는 SD 또는 StDev라고 쓴다. 관찰값들이 얼마나 떨어져있는지 수치로 나타내는 방법이다. 이것을 산포도라고 한다. 간단하게 생각해보면 어떤 데이터의 집단이 있을때 관찰값에서 평균(mean) 혹은 중앙값(median)을 뺀것인 편차(deviation)가 가장 간단할 것 같은데, 모든 값을 더한 후 데이터의 수로 나눈 값인 평균을 관찰값에서 모두 빼버리면 언제나 0이될수 밖에 없다. 예를들어 [3,6,9] 인 값들의 평균 6, 각 편차는 -3,0,3, 이를 대표할 편차의 평균이나 합은 0으로 의미가 없다.</p>
<p>그러므로 절대값을 이용하거나, 제곱을 이용할수 있겠는데 절대값을 이용하면 미분이 불가능하여 각 편차를 제곱한 것들의 평균인값을 &quot;분산(variance)&quot; 이라고 하고, 비대해진 이 값을 다시 루트를 씌워 구한 값을 표준 편차라고 한다. Standard Deviation의 S자를 기호로 $\Sigma$, $\sigma$라고 쓰고 시그마라고 읽는다. 추가로 분산은 당연히 $$σ^2$$이라고 쓴다. 모집단 전체의 분산에서 루트를 씌운것은 모 표준편차, 표본 분산에 루트를 씌운것은 표본 표준편차라고 한다.</p>
<p>표본 크기 $n$, 표본평균 $\bar{x}$, 표본 $x^n$
표본 분산 ${s^2}=\frac{\Sigma(x^n- \bar{x})^2 }{n - 1}$
표본 표준편차 $s= \sqrt s^2= \frac{\sqrt \Sigma(x^n- \bar{x})^2}{n - 1}$ </p>
<p>참고_
<a href="https://www.youtube.com/watch?v=naJQNDMbViY">https://www.youtube.com/watch?v=naJQNDMbViY</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신]1주차(chapter 01~02) ]]></title>
            <link>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@ordinary_c/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Tue, 02 Jan 2024 05:27:54 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/ordinary_c/post/01c11ddd-9f25-473e-8ccf-6f3bf10375f5/image.png" alt=""></p>
<h1 id="1장">1장</h1>
<h2 id="01-인공지능과-머신러닝-딥러닝">01. 인공지능과 머신러닝, 딥러닝</h2>
<h3 id="1-인공지능의-간략한-역사">1. 인공지능의 간략한 역사</h3>
<p>&quot;인간처럼 학습하고 추론할 수 있는 컴퓨터 시스템을 만드는 기술&quot; 실직적인 역사는 80년정도 되었으며, 사실상 전자식 컴퓨터의 역사와 발을 맞추어 왔다고 생각해도 별 문제는 없을것 같다.</p>
<p>컴퓨팅 성능의 한계, 전문가 시스템 붐의 거품 붕괴라는 이유로 두번의 겨울을 겪었지만, 98년 LeNet-5, 2012년 ImageNet 등 합성곱 신경망을 이용한 인공신경망 기술의 발전과 실증으로 다시한번 관심을 받게 되었으며 2016년 알파고의 등장으로 크게 유행하게 되었다. 긴 겨울을 겪었던 이전 시대와 달리, 컴퓨팅 성능의 향상과 혁신적 알고리즘의 개발로 인해서 계속해서 새로운 성과가 발표되고, 적용되고 있어 현재로써는 미래가 낙관적이다. 하지만 지금 우리가 보고있고, 경헙하는 인공지능은 인간의 활동을 보조하는 약 인공지능(Weak AI)을 말하고 영화속에서나 나올법한 (ex. 울트론) 일반 인공지능(Artificial General Intelligence) 혹은 강인공지능(Strong AI)의 시대는 아직 오지 않았다. 그저 점점 더 긍정적인 방향으로 나아가고 있을 뿐이다.</p>
<h3 id="2-머신러닝">2. 머신러닝?</h3>
<p>머신러닝이란 인공지능기술의 한 분야다. 규칙을 하나하나 사람이 정하지 않아도, 주어진 데이터에서 규칙을 &quot;학습&quot;하는 알고리즘을 연구하는 것을 의미한다. 수학, 특히 통계학과 관련이 깊지만 최근에는 특히 딥러닝 분야의 폭발적인 성장으로 인해 경험(정확한 수식의 계산보다는 직관의 의한 개발 경험의 조합..을 이야기할까?)을 바탕으로 성장하고 있다고 한다. 파이썬의 점유율이 높다. 사이킷런이 대표적인 파이썬 머신러닝 라이브러리다.</p>
<h3 id="3--딥러닝">3.  딥러닝?</h3>
<p>딥러닝이란 머신러닝분야중, 인공신경망을 기반으로한 방법들을 이른다. 텐서플로우, 파이토치 등 사용하기 쉬운 라이브러리와 프레임 워크들이 오픈소스로 많이 출시되어 있다. 6,7년전 회사에서 Image Matting 에 대해 개발을 할때만 해도 딥러닝을 통한 이미지 처리가 배우기 어렵고 굉장히 난해하다고 생각해서 전통적인 이미지 처리 방식을 이용했었는데, 요즘은 &quot;이미지 처리 = 딥러닝&quot; 으로 공식화가 된것 같다. 또 관련 지식을 얻거나 교육을 받는 것도 일상화가 되어있어 이제는 머신러닝, 딥러닝을 어느정도 알지 못하면 어디가서 개발자라고 말하기 부끄러울 정도!</p>
<h2 id="02-실습">02. 실습</h2>
<p><img src="https://velog.velcdn.com/images/ordinary_c/post/7c4706a7-c8e0-4932-897c-70c51cbe44e4/image.png" alt=""></p>
<h1 id="2장">2장</h1>
<h2 id="01-훈련-세트와-테스트-세트">01. 훈련 세트와 테스트 세트</h2>
<h3 id="1-지도-학습">1. 지도 학습</h3>
<p>지도 학습은 입력(데이터)와 타깃(정답)으로 이루어진 훈련데이터 세트가 필요함. 입력으로 사용된 데이터의 각 항들을 특성이라고 한다. (ex. 무게, 길이 등..) &quot;정답을 맞추는 것&quot;이 목표다. 이전 장에서 K-최근접 모델처럼, 데이터를 fit하고 특정 알고리즘을 사용하여 접수를 내어 정답을 판단하는 것이 일반적인 방식인듯</p>
<h3 id="2-비지도-학습">2. 비지도 학습</h3>
<p>비지도 학습은 타깃데이터가 없이 입력 데이터만을 이용한다. 정답을 맞출수는 없지만 데이터를 예측하거나 데이터를 변형할 때 사용한다. (책의 2장에서는 자세히 나와 있지 않음) </p>
<ul>
<li>몇년전 로그 수집 시스템 개발프로젝트에서 이상탐지시 비지도 학습을 이용한다는 내용이 기억이 났다. 그땐 그런가보다 똑똑한 양반들이 알아서 하겠지.. 싶었는데 일반적으로 입력된(학습된) 데이터의 내용을 벗어난 데이터를 예측하기 위해 사용하려면 당연한 방식이었겠다... </li>
</ul>
<h3 id="3-강화-학습">3. 강화 학습</h3>
<p>은 이책에서 다루지 않는다. 정답세트는 없고, 입력데이터 내에서 알고리즘이 행동한 결과로 얻은 보상을 통해 학습한다고 한다. </p>
<h3 id="4-훈련세트와-테스트-세트">4. 훈련세트와 테스트 세트</h3>
<p>훈련세트 내용대로 평가를 하면, 학습된 데이터를 기반으로 정답을 판단하기 때문에 100%의 정답률이 나온다. 모델의 제대로된 성능을 평가하기 위해서는 학습되지 않은 데이터로 평가를 해야하는데... 이를 테스트 세트라고 하고, 별개의 데이터를 준비하거나 미리 준비된 훈련세트에서 일부를 떼어 테스트 세트로 활용한다. 각각 데이터의 하나의 튜플을 &quot;샘플(sample)&quot;이라고 보통 칭한다.
샘플이 골고루 섞여있지 않을경우 &quot;샘플링 편향(sample bias)&quot;이라고 부른다. </p>
<h2 id="02-확인문제">02. 확인문제</h2>
<h3 id="1번-문제--지도학습">1번 문제 : 지도학습</h3>
<ul>
<li>지도학습 : 입력데이터와 정답데이터가 준비되어있을때, 정답을 맞추기휘한 알고리즘</li>
<li>비지도학습 : 입력데이터만으로 데이터를 예측,변형할때 사용하는 알고리즘</li>
<li>차원축소 : 비지도 학습의 하나로 데이터가 복잡할 경우 특성의 개수를 줄여 가공하는 방법</li>
<li>강화학습 : 입력 데이터 내에서 알고리즘이 행동한 결과로 보상을 통해 학습하는 알고리즘</li>
</ul>
<h3 id="2번-문제--샘플링-편향">2번 문제 : 샘플링 편향</h3>
<ul>
<li>훈련세트와 데이터 세트가 고루 섞이지 않아 알고리즘의 성능을 제대로 평가하지 못할 경우를 샘플링 편향이라고 한다.</li>
</ul>
<h3 id="3번-문제--행샘플--열--특성">3번 문제 : 행=샘플 , 열 = 특성</h3>
<ul>
<li>사이킷런의 데이터 배열은 행엔 샘플로, 열엔 특성으로 구성되있다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>