<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>pythonnn_.log</title>
        <link>https://velog.io/</link>
        <description>고수</description>
        <lastBuildDate>Thu, 08 Dec 2022 08:21:57 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>pythonnn_.log</title>
            <url>https://velog.velcdn.com/images/pythonnn_/profile/71811977-1c55-4a12-8bb9-c1503b37ebbe/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. pythonnn_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/pythonnn_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[CNN 기초 개념]]></title>
            <link>https://velog.io/@pythonnn_/CNN-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@pythonnn_/CNN-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90</guid>
            <pubDate>Thu, 08 Dec 2022 08:21:57 GMT</pubDate>
            <description><![CDATA[<p><strong>Convolution(합성곱)</strong> : 이미지 상의 어떠한 특징이 어느 부분에서 나타나는지를 찾는 방법</p>
<ul>
<li>이미지 처리와 신호 처리 분야에서 매우 유명한 도구</li>
<li>합성곱 신경망은 크게 <strong>합성곱층과(Convolution layer)</strong>와 <strong>풀링층(Pooling layer)</strong>으로 구성</li>
<li>합성곱 연산을 통해서 <strong>이미지의 특징을 추출</strong>하는 역할</li>
</ul>
<p><strong>conv2D</strong></p>
<p>parameter 종류</p>
<p>*<em>1. filters 
*</em></p>
<ul>
<li>몇 개의 다른 종류의 필터를 활용할 것인지를 나타냄</li>
<li>출력 모양의 깊이(depth)를 결정</li>
<li>filters= 를 생략하고 숫자만 사용할 수 있음.</li>
<li>필터의 개수에 따라 출력 이미지 수도 바뀜.</li>
</ul>
<p>*<em>2. kernel_size 
*</em></p>
<ul>
<li>n×m 크기의 행렬</li>
<li>높이(height) × 너비(width) 크기의 이미지를 처음부터 끝까지 겹치며 훑으면서 n×m 크기의 겹쳐지는 부분의 각 이미지와 커널의 원소의 값을 곱해서 모두 더한 값을 출력으로 하는 것을 말합니다</li>
<li>이미지의 가장 왼쪽 위부터 가장 오른쪽 아래까지 순차적으로 훑습니다.</li>
</ul>
<blockquote>
<p>커널(kernel)은 일반적으로 3 × 3 또는 5 × 5를 사용합니다.</p>
</blockquote>
<p>*<em>3. stride
*</em></p>
<ul>
<li><p>커널의 이동 범위가 위의 예제에서는 한 칸이었지만, 이 또한 사용자가 정할 수 있습니다. 이러한 이동 범위를 스트라이드(stride)라고 합니다.</p>
</li>
<li><p>스트라이드의 연산</p>
<p>  input의 사이즈: <code>n x n</code></p>
<p>  output의 사이즈: <code>m x m</code></p>
<p>  kernel_size: <code>k x k</code></p>
<p>  stride 값: <code>s</code></p>
</li>
</ul>
<p>*<em>4. padding 
*</em></p>
<ul>
<li>입력의 가장자리에 지정된 개수의 폭만큼 행과 열을 추가하는 과정.</li>
<li>패딩을 0으로 설정하면 가장자리 값은 0으로 채워집니다</li>
<li>이미지 데이터의 축소 방지</li>
<li>가장자리 학습</li>
</ul>
<p>*<em>5. activation function
*</em></p>
<ul>
<li>활성화 함수는 뉴런에 공급되는 입력과 다음 레이어로 가는 출력 사이의 관문입니다</li>
<li>뉴런의 활성화 여부를 결정하는 기능을 합니다.</li>
</ul>
<p><em>Activation function의 기능</em></p>
<p> <strong>Linear or Identity Activation Function</strong></p>
<ol>
<li><strong>역전파가 불가능합니다.</strong></li>
</ol>
<p>함수의 도함수는 상수이고 입력과 관련이 없습니다. 그렇기 때문에 돌아가서 어떤 가중치가 더 나은 예측을 제공할 수 있는지 이해하는것은 불가능합니다.</p>
<ol>
<li><strong>신경망의 모든 계층은 하나로 축소됩니다.</strong></li>
</ol>
<p>선형 활성화 함수를 사용하면 신경망의 계층수에 관계없이 마지막 계층은 첫 번째 계층의 선형 함수가 됩니다.</p>
<p> <strong><strong>Non-linear Activation Function</strong></strong></p>
<ol>
<li><p>비선형 활성화 함수는 미분 함수를 가지고 있기 때문에 <strong>역전파를 허용합니다.</strong></p>
</li>
<li><p>이를 통해 여러 계층의 뉴런을 ‘<strong>stacking</strong>’하여 <strong>심층 신경망을 만들 수 있습니다</strong>. 높은 수준의 정확도로 복잡한 데이터 세트를 학습하려면 여러 숨겨진 뉴런 계층이 필요합니다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[confusion matrix ...]]></title>
            <link>https://velog.io/@pythonnn_/confusion-matrix-</link>
            <guid>https://velog.io/@pythonnn_/confusion-matrix-</guid>
            <pubDate>Thu, 24 Nov 2022 08:36:03 GMT</pubDate>
            <description><![CDATA[<h1 id="confusion-matrix혼동행렬-이란-">confusion matrix(혼동행렬) 이란 ..?</h1>
<blockquote>
<p>어떤 개인이나 모델, 검사도구, 알고리즘의 진단·분류·판별·예측 능력을 평가하기 위하여 고안된 표</p>
</blockquote>
<h1 id="5개의-주요-성능-지표">5개의 주요 성능 지표</h1>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/4d4938f2-0914-4b8c-82b2-133f65876d88/image.png" alt="">
혼동행렬을 설명하는 굉장히 유명한 짤 ..</p>
<ul>
<li><p><strong>True Positive(TP)</strong></p>
<p>  positive로 예측을 했고, 그것이 맞음.</p>
</li>
<li><p><strong>True Negative(TN)</strong></p>
<p>  negative로 예측을 했지만, 그것이 맞음. </p>
</li>
<li><p><strong>False Positive(FP)</strong></p>
<p>  positive로 예측을 했지만, 그것이 틀림. <strong>(TYPE 1 ERROR)</strong></p>
</li>
<li><p><strong>False Negative(FN)</strong></p>
<p>  negative로 예측을 했지만, 그것이 틀림. <strong>(TYPE 2 ERROR)</strong></p>
</li>
</ul>
<p><strong>민감도 (Sensitivity)</strong> : (TP / (TP + FN)) 양성 중 맞춘 양성의 수
<strong>특이도 (Specificity)</strong> : (TN / (FP + TN)) 음성 중 맞춘 음성의 수
<strong>정밀도 (Precision)</strong> : (TP / (TP + FP)) 양성이라고 판정 한 것 중에 실제 양성 수
<strong>재현율 (Recall)</strong> : (TP / (TP + FN)) 전체 양성 수에서 검출 양성 수
<strong>정확도 (accuracy)</strong> : ((TP + TN) / (TP + FN + FP + TN)) 전체 개수 중에서 양성과 음성을 맞춘 수</p>
<h2 id="recall">Recall</h2>
<ul>
<li>한국말로는 <strong>재현율</strong> (직관적으론 검출율이라고 봐도 됨)</li>
<li>검출해야하는 물체들 중에서 제대로 검출된 것의 비율</li>
<li>대상 물체들을 빠뜨리지 않고 얼마나 잘 잡아내는지를 나타냄</li>
<li>실제 positive 중 정확히 positive라고 식별된 사례의 비율</li>
<li>통계학에서는 <strong>sensitivity</strong>으로, 그리고 다른 분야에서는 <strong>hit rate</strong> 라는 용어로도 사용</li>
</ul>
<pre><code>from sklearn.metrics import recall_score
</code></pre><h2 id="precision">Precision</h2>
<ul>
<li>한국말로는 <strong>정밀도</strong></li>
<li>모든 검출 결과 중 옳게 검출한 비율</li>
<li>positive로 식별된 사례 중 실제 positive 사례의 비율</li>
</ul>
<pre><code>from sklearn.metrics import precision_score</code></pre><h2 id="accuracy-acc">Accuracy (ACC)</h2>
<ul>
<li>정확도</li>
<li>예측이 현실에 부합할 확률</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[k mooc 실습으로 배우는 머신러닝 정리]]></title>
            <link>https://velog.io/@pythonnn_/k-mooc-%EC%8B%A4%EC%8A%B5%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@pythonnn_/k-mooc-%EC%8B%A4%EC%8A%B5%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Tue, 22 Nov 2022 07:29:09 GMT</pubDate>
            <description><![CDATA[<h2 id="분류classification와-회귀regression">분류(Classification)와 회귀(Regression)</h2>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/cd68accc-7c9d-49be-85ef-a94e5c88af6c/image.png" alt=""></p>
<p><strong>분류</strong>는 타겟이 분류되는 선 즉, 함수를 찾는 것이 목적.</p>
<p><strong>회귀</strong>는 어떤 변화를 수치적으로 확인하고 싶을 때, x 와 y 간의 상관관계를 표현해 줄 수 있는 함수를 찾는 것이 목적</p>
<h2 id="data-준비-과정">Data 준비 과정</h2>
<p><strong>1. Dataset Exploration</strong></p>
<ul>
<li>데이터 모델링을 하기 전에 데이터 변수 별 기본적인 특성들을 탐색하고 데이터의 분포적인 특징을 이해</li>
<li>EDA(탐색적 데이터 분석)</li>
</ul>
<p><strong>2. Missing Value</strong></p>
<ul>
<li>데이터를 수집하다 보면 일부 데이터가 수집되지 않고 결측치로 남아 있는 경우가 있어서 이러한 부분 보정필요</li>
</ul>
<p><strong>3. Data Types and Conversion</strong></p>
<ul>
<li>데이터셋 안에 여러 종류의 데이터 타입(숫자, 텍스트, 범주, 시간 등)이 있을 수 있고, 이를 분석 가능한 형태로 변환 후 사용해야 한다.</li>
<li>이 데이터 정제 단계에서 사실 가장 많은 시간이 소요된다.</li>
</ul>
<p><strong>4. Normalization</strong></p>
<ul>
<li>데이터 변수들의 단위가 크게 다른 경우들이 있고, 이러한 것들이 모델 학습에 영향을 주는 경우가 있어서 정규화 함.</li>
<li>ex) 몸무게 10<del>100 단위, 소득 100만</del>1000만 단위 처럼 많은 차이가 나는경우 모형에 영향을 줄 수 있음</li>
<li>스케일링</li>
</ul>
<p><strong>5. Outliers(이상치)</strong></p>
<ul>
<li>관측치 중에서 다른 관측치와 크게 차이가 나는 관측치들이 있고 이러한 관측치들은 모델링 전처리가 필요함.</li>
</ul>
<p><strong>6. Feature Selection(변수 선택)</strong></p>
<ul>
<li>많은 변수 중에서 모델링을 할 때 중요한 변수가 있고 그렇지 않은 변수가 있어서 선택이 필요한 경우가 있음.</li>
</ul>
<p><strong>7. Data Sampling</strong></p>
<ul>
<li>모델을 검증하거나 이상 관측치를 찾는 모델링을 할 때 또는 앙상블 모델링을 할 때 가지고 있는 데이터를 일부분 추출하는 과정을 거치기도 함.</li>
</ul>
<h2 id="modeling모델링">Modeling(모델링)</h2>
<ul>
<li><strong>Model</strong>
모델은 입력 변수와 출력 변수 간의 관계를 정의해줄 수 있는 추상적인 함수 구조.
<img src="https://velog.velcdn.com/images/pythonnn_/post/949fbe53-a74c-4b8f-ba2b-14f8f4dbc50c/image.png" alt=""></li>
</ul>
<blockquote>
<p>Build model 단계와 Evaluation 단계에서 원하는 만큼의 결과가 나오지 않는다면 계속 순환하면서 feedback 과정이 필요하다. </p>
</blockquote>
<p>그 후 최종적인 모델을 정한다.</p>
<h2 id="modeling-검증">Modeling 검증</h2>
<ul>
<li>Testing error = validation error =&gt; 둘 다 트레이닝에 사용되지 않았던 데이터를 가지고 검증한다</li>
<li>오차가 크면 underfitting 과 overfitting 을 의심해볼 필요가 있다.</li>
<li>validation error 가 가장 작을 때, 그때의 복잡도를 가지는 모형을 잘 선택해주어야 한다.</li>
</ul>
<h3 id="복잡도는-어떻게-결정을-할까-">복잡도는 어떻게 결정을 할까 ?</h3>
<ul>
<li>모형의 기본적인 형태를 직접 구축해야하는데, 이 기본적인 형태를 구축하는 과정에서 모형의 복잡도를 사용자가 결정을 해줄 수 있다 =&gt; <strong>hyperparameter</strong> 를 조정한다.</li>
</ul>
<h3 id="검증-방식">검증 방식</h3>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/c2427aed-b042-4d41-8a50-1c046ed360e3/image.png" alt=""></p>
<ol>
<li>training data만 사용해서 정말 이 모형이 일반화가 잘되는지 확인할 수 없음. (사용 X)</li>
<li>트레이닝을 하고 학습된 모형을 테스팅에다가 테스트 해보는 방법.</li>
</ol>
<ul>
<li><strong>hyperparameter</strong> 를 바꿔가면서 검증해보고 검증한 결과에도 사용되지 않았던 테스트 데이터를 가지고 검증하는 것이 가장 검증력이 높은데, <U>적절한 hyperparameter를 고를 수가 없음.</U></li>
</ul>
<ol start="3">
<li>가장 일반적인 절차</li>
</ol>
<ul>
<li>train, validation, test 세개로 나눈다.</li>
<li>train 데이터로 모형을 학습하고, validation 데이터에 대해서 검증을 하면서 가장 적합한 어떤 모델의 복잡도를 결정 해준다.</li>
<li>결정이 됐으면 validation 을 test로 편입 시켜서 최종적으로 결정된 모델 복잡도의 모형을 가지고서 train 을 시키고 최종 테스팅을 해서 실제로 이 정도의 성능이 나올 것이라는 결과를 도출.</li>
<li>일반적으로 train 데이터 7, validation 2, test 1 정도로 나누기도 하고 5:3:2 로 나눌 수도 있음.</li>
</ul>
<ol start="4">
<li>데이터 숫자가 적은 경우 주로 사용.</li>
</ol>
<ul>
<li>전체 데이터를 폴더를 나눠서 사용</li>
<li>나눠진 상황에서 validation 을 순차적으로 바꿔가면서 적용 후 최적의 파라미터와 복잡도를 찾고</li>
<li>마지막에 테스팅하는 방법이다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인공지능과 머신러닝에 대해 ..]]></title>
            <link>https://velog.io/@pythonnn_/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EA%B3%BC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EC%97%90-%EB%8C%80%ED%95%B4-</link>
            <guid>https://velog.io/@pythonnn_/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EA%B3%BC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EC%97%90-%EB%8C%80%ED%95%B4-</guid>
            <pubDate>Tue, 22 Nov 2022 04:24:28 GMT</pubDate>
            <description><![CDATA[<p>_k-mooc 실습으로 배우는 머신러닝 _</p>
<ul>
<li>인공지능과 머신러닝 개요</li>
<li>머신러닝 학습 개념</li>
<li>머신러닝 프로세스 및 활용 
내용 정리</li>
</ul>
<p><strong>머신러닝</strong> : 함수를 학습하는것 =&gt; 데이터가 있고 그 다음에 우리가 컴퓨터를 학습시킬 수 있는 알고리즘을 컴퓨터에게 입력 시켜주면 컴퓨터가 스스로 데이터 안에 있는 유용한 패턴을 찾아서 유용한 함수를 찾는다. =&gt; 이 함수를 사용하면 되는것</p>
<p><strong>딥러닝</strong> : 일종의 머신러닝 기법. =&gt; 인간의 인지능력, 시각능력, 언어적인 능력에 관련되어 모델링을 하는데 굉장히 좋은 성능을 보이고 있음.</p>
<p>완벽한 머신러닝 기법은 없기때문에 다양한 알고리즘들을 배워야함.</p>
<p><strong>CPU Computing</strong>
=&gt; 기본적으로 우리가 쓰는 컴퓨팅 환경</p>
<p>=&gt; 기본적인 연산과 계산을 해주는 장치</p>
<p><strong>GPU Computing</strong>
=&gt; pc 게임에서 사용하는 연산장치</p>
<p>=&gt; 분산해서 빠르게 쉬운 계산들을 처리할 수 있다.</p>
<p>=&gt; 요즘 빅데이터에 접목 시켜서 GPU를 활용한 대용량 데이터 처리가 굉장히 효율적으로 진행되고있다.</p>
<p>=&gt; 딥러닝의 발전을 가속화 시키는데 굉장히 큰 역할을 했다.</p>
<p>=&gt; 딥러닝에서의 성공을 보면서 기존 기본적인 머신러닝 알고리즘들도 GPU를 응용하기 시작</p>
<p>즉, 많은 양의 데이터를 처리하고 계산할 수 있게 되었다 =&gt; 이게 키포인트</p>
<h2 id="머신러닝의-정의">머신러닝의 정의</h2>
<p>컴퓨터 알고리즘에 대한 학습과정 =&gt; 자동으로 자기 스스로 어떤 경험들에 의해서 스스로를 발전시켜나갈 수 있는 그러한 일련의 컴퓨터 프로그램 체계를 학습하는 학문.</p>
<h2 id="머신러닝의-구성요소">머신러닝의 구성요소</h2>
<ol>
<li><strong>Environment(E)</strong>
=&gt; 머신러닝 알고리즘이 대응되는, 실제로 머신러닝 알고리즘이 적용되는 환경을 뜻함.
=&gt; 우리가 학습을 한다 하면 경험(experience)가 필요한데 머신러닝에서의 경험은 Data를 뜻함.</li>
<li><strong>Date(D)</strong></li>
<li><strong>Model(M)</strong>(중요)
=&gt; 함수
=&gt; 이 함수에 데이터를 넣어서 함수를 학습시킨다.
=&gt; 처음에는 함수를 대략적인 형태만 잡아주고 그 다음에 데이터를 넣어서 이 함수가 정말로 쓸모 있게끔 만들어준다.</li>
<li><strong>Performance(P)</strong>
=&gt; &#39;좋은 함수로 만들었다&#39; 를 알려면 이 함수를 &#39;평가&#39; 해주어야 함.
=&gt; 우리가 공부를 잘하고 있는지 평가하기 위해 시험을 보는 것과 같다.
=&gt; 즉, 최종적인 모형의 성능을 평가할 수 있는 그런 기준을 뜻함.</li>
</ol>
<blockquote>
<p>결국 모델(함수)를 잘 만들어야 하는데 함수의 output과 input 간에 상관관계를 잘 설명할 수 있는 그런 함수를 찾아야 한다. =&gt; input 과 output 을 이어주는 함수를 찾아야 한다.</p>
</blockquote>
<p>=&gt; 이러한 잘 만든 함수는 오차가 작은 것 !! (오차가 작아야 좋은 모델)</p>
<p><strong>MSE(Mean Squared Error)</strong> : 가장 기본적인 오차의 개념 (수식을 만들어 기준을 잡은 것.) =&gt; 작을수록 좋은 모델</p>
<h2 id="지도학습과-비지도학습-및-강화학습">지도학습과 비지도학습 및 강화학습</h2>
<p>머신러닝은 input과 output 간의 관계를 설명하는 방법론이 가장 대표적인 방법.
=&gt; 이것을 크게 <strong>Supervised Learning(지도학습)</strong> 이라고 부른다.
=&gt; 어떤 입력이 들어갔을 때 어떤 output이 나와야 된다는 걸 잘 지도를 해주는 것.
=&gt; 정답을 알려주면서 학습을 하는 것.</p>
<p><strong>Supervised Learning(지도학습)</strong>
=&gt; 크게 Classification(분류) 과 Regression(회귀) 이 있다.
=&gt; y의 최종적인 output이 어떠한 범주이다.
=&gt; 강아지, 자동차, 고양이 같은 범주라면 Classification
=&gt; 혈압의 정확한 수치, 몸무게 같이 수치와 같은 continuous(연속적인) 한 값이 라고 하면, Regression</p>
<p><strong>Unsupervised Learning(비지도학습)</strong>
=&gt; 인간도 그냥 어떤 사물들을 바라보고 어떠한 지도 없이 학습하는 것들이 있다.</p>
<p><strong>Reinforcement Learning(강화학습)</strong>
=&gt; 알파고가 강화학습을 이용해서 학습됨.</p>
<p>학습 오차를 줄이는 것과 예측 했을때 생기는 오차도 굉장히 중요한 이슈이다.</p>
<blockquote>
<p>=&gt; 머신러닝에서 모형을 잘 학습시키는 것도 중요한 이슈지만, 학습된 모형이 잘 예측 되게끔 만들어 주는 것도 굉장히 중요한 이슈이다.</p>
</blockquote>
<p>=&gt; 학습 오차를 줄이는 함수를 찾는 것 만으로도 만족스러운 상황이 있을 수 있지만(데이터의 패턴을 설명한다는 측면에서), 대부분의 케이스에서 우리는 내가 가지고 있지 않은 데이터를 가진 데이터 내에서 잘 예측하기를 원한다.
ex) 나이와 혈압 간 관계를 나타낸 데이터가 있다면 그 데이터에 없는 나이대의 사람들에 대해서도 잘 예측하기를 원한다. </p>
<p>=&gt; 그것과 연관해서 error의 개념이 Training error 와 Validation error 로 쪼개진다.</p>
<h2 id="training-error--validation-error">Training error &amp; Validation error</h2>
<p><strong>Training error(학습오차)</strong>
=&gt; 내가 학습시키는 그 데이터 내에서 발생하는 오차</p>
<p><strong>Validation error(검증오차)</strong>
=&gt; 내가 학습할 때 사용하지 않았던 데이터에 대해서 검증한, 그 데이터를 이 모형에 넣으면 출력되는 y값이 있고,
=&gt; 그 y가 실제 y, validation 데이터에 있는 실제 y랑 모형에서 출력된 y랑 정말 차이가 큰지 작은지 검증용으로 쓰는 error
=&gt; 일반화 오류 라는 개념으로 연관이 되어진다.
=&gt; 내가 학습한 모형이 정말 일반적으로 좋은가 ? 일반화가 잘 되는가에 대한 정보를 주는 것이다.</p>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/4d9aba26-8736-4cf8-8b63-6e2151d6a904/image.png" alt=""></p>
<p>전체적으로 모형이 복잡해지면 Training error 는 쭉 줄어들지만, validation error(일반화 예측오차) 는 줄어들다가 다시 커지는 모습이 보인다.</p>
<p>여기서 모형이 너무 적합이 안되고, 너무 심플하다. 우리의 모형이 너무 단순해서 데이터에 들어있는 전체 패턴을 표현하지 못한다 =&gt; <strong>Under-fitting</strong> </p>
<p>너무 복잡해서 쓸데없는 패턴까지 다 학습을 해버렸다. 그러면 예측이 잘 안되게 되고 일반화가 잘 안된다.
내가 갖고 있는 트레이닝 데이터에만 너무 집중을 해서 그 패턴에만 몰두를 했기 때문에 일반적인 패턴에 가면 오히려 실패를 하게 된다 =&gt; <strong>Over-fitting</strong></p>
<p>=&gt; 그래서 우리는 validation error를 보면서 적합하게 가장 이 validation error가 최소가 되는 그런 적절한 모형을 찾아야 한다.
<img src="https://velog.velcdn.com/images/pythonnn_/post/f3b16460-13e1-4f1b-b1da-7f014b2500f1/image.png" alt=""></p>
<p>model complexity 를 결정하는데 <strong>hyperparameter</strong> 라는게 영향을 준다.</p>
<p><strong>hyperparameter</strong> : 이 모형을 구축하는, 모형의 형태들이나 모형의 특성을 규정하는 모형의 외적인 요소 이고, 유저들이 직접 결정해 주어야 한다.</p>
<blockquote>
<p>그래서 그런 hyperparameter 모형의 형태들을 조정해가면서 가장 좋은 것을 찾는 절차가 필요하다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/c4d70db0-58e5-4de0-a2cf-cba5e2a0009c/image.png" alt=""></p>
<p>3번째 경우를 가장 추천.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[깃허브에 대해]]></title>
            <link>https://velog.io/@pythonnn_/%EA%B9%83%ED%97%88%EB%B8%8C%EC%97%90-%EB%8C%80%ED%95%B4</link>
            <guid>https://velog.io/@pythonnn_/%EA%B9%83%ED%97%88%EB%B8%8C%EC%97%90-%EB%8C%80%ED%95%B4</guid>
            <pubDate>Thu, 17 Nov 2022 08:24:54 GMT</pubDate>
            <description><![CDATA[<h3 id="git-과-github-기본-개념">Git 과 GitHub 기본 개념</h3>
<p><strong>용량</strong> : 수정 내역만 저장
<strong>협업</strong> : 파일 주고 받기, 누가 수정했는지, 얼마만큼 수정되었는지, 프로젝트 보드
<strong>관리</strong> : 원하는 version으로 되돌리기, code 피드백과 리뷰</p>
<blockquote>
<p>git 에서 원격 저장소는 코드의 원본이나 변경 내역을 저장하는 매우 중요한 역할을 한다.
이러한 기능을 하는 툴을 형상관리 툴이라고 부르고 git, svn, cvs 등이 있다.</p>
</blockquote>
<p>git 을 클라우드 환경에서 사용할 수 있게 제공하는 공간이 <strong>github</strong>이다.
github는 단순히 저장소 역할만 하는 것이 아니라, 자신의 프로젝트 및 다른 개발자들의 인기 있는 프로젝트의 코드를 볼 수 있고, 이슈를 제기할 수 있으며, 원한다면 다른 이의 프로젝트를 수정하고 발전 시키는데 참여할 수있다. =&gt; 오픈소스에 기여 할 수 있다.</p>
<h3 id="branch-사용하기">branch 사용하기</h3>
<p>연관성이 없는 기능을 개발한다고 할 때 =&gt; 별도로 작업하여 합치는 방안이 가장 효율적임
=&gt; 이를 가능하게 하는게 branch 와 merge</p>
<p><strong>branch</strong> : 독립적인 작업을 할 수 있는 공간을 만드는 것.
=&gt; a 기능을 a branch 에서 작업하고, b 기능을 b branch 에서 작업하면, 서로 다른 독립적 공간에서 작업하는 것이기 때문에 서로에게 영향을 주지않고 작업할 수 있음.
=&gt; 메인 작업 공간의 코드를 복사한 개별적인 작업 공간을 만들고 거기서 각각의 기능 개발을 진행한다.</p>
<p><strong>merge</strong> : 합치는 것.
=&gt; 각각의 작업이 완료되었을 때, 코드를 합치는 것.</p>
<h3 id="fork란-">Fork란 ?</h3>
<p>전체를 복사해온 다음에 코드를 수정하거나 추가하는 것. =&gt; 내 레파지토리에 저장된다.</p>
<h3 id="pull-requests-란-">pull requests 란 ?</h3>
<p>fork 한 코드를 수정하고 fork 해온 계정의 레파지토리에 적용시키기 위한 요청을 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인코딩과 피처 엔지니어링]]></title>
            <link>https://velog.io/@pythonnn_/%EC%9D%B8%EC%BD%94%EB%94%A9%EA%B3%BC-%ED%94%BC%EC%B2%98-%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81</link>
            <guid>https://velog.io/@pythonnn_/%EC%9D%B8%EC%BD%94%EB%94%A9%EA%B3%BC-%ED%94%BC%EC%B2%98-%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81</guid>
            <pubDate>Thu, 10 Nov 2022 07:32:56 GMT</pubDate>
            <description><![CDATA[<h2 id="feature-engineering">Feature Engineering</h2>
<blockquote>
<p><strong>Feature Engineering</strong> 은 머신 러닝 알고리즘이 작동할 수 있도록 하는 Feature들을 만드는 과정으로 그 과정에서 데이터에 대한 도메인 지식을 사용한다. </p>
</blockquote>
<p><strong>Feature Engineering</strong>은 머신러닝의 적용에 있어서 근본적인 부분이며, 어려운 동시에 까다롭다. 하지만 이것이 적절히 수행되었을 때, 결과가 정말 좋다. 이것은 알고리즘이 잘 작동할지, 또는 작동하지 않을 지의 차이를 일으키는 중요한 요소이다.</p>
<h2 id="인코딩">인코딩?</h2>
<p>인코딩이란 문자를 숫자로 변환하는 것으로 우리가 지금 배우고 있는 머신러닝에서는 문자형 변수가 있으면 오류가 발생하기 때문에 문자형 변수에 대해 인코딩 작업을 해주어야 한다.</p>
<h3 id="머신러닝의-대표적인-인코딩-방식">머신러닝의 대표적인 인코딩 방식</h3>
<ul>
<li><strong><code>레이블 인코딩 (Lable Encoding)</code></strong><ul>
<li>문자열 카테고리 값을 숫자형 카테고리 값으로 변환</li>
</ul>
</li>
<li><strong><code>원-핫 인코딩 (Ont-Hot Encoding)</code></strong><ul>
<li>행 형태의 피처값을 열 형태로 변환한 뒤 피처값 인덱스에 해당하는 컬럼에는 1로 표시하고 나머지 칼럼에는 0으로 표시하는 방식.</li>
</ul>
</li>
</ul>
<p>이 중에서도 One-Hot-Encoding에 대해 배워보자!</p>
<h2 id="정의">정의</h2>
<ul>
<li>단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식</li>
<li><strong>한 개의 요소는 True, 나머지 요소는 False로 만들어주는 기법</strong><ul>
<li><strong><code>순서가 없는 데이터</code></strong>에 사용</li>
<li>해당 관계는 <code>**독립적**</code>임을 표현</li>
<li>흩어져있을 뿐 모든 정보 유지</li>
</ul>
</li>
<li>즉, 모든 범주형 변수를 정수인 1과 0의 이진형 벡터로 표시하면서 범주형 변수를 열거하고, 해당하지 않는 모든 항목은 0(Flase 값)으로, 해당하는 항목은 1(True 값)로 표시하는 것이다.</li>
</ul>
<h2 id="필요성">필요성</h2>
<ul>
<li>ML 알고리즘은 데이터에 기반하고 있기 때문에 어떤 데이터를 입력하느냐에 따라 결과도 크게 달라진다.</li>
<li>데이터를 컴퓨터가 인식할 수 있도록 변형해줘야 한다.</li>
<li>scikit-learn에서 제공하는 머신러닝 알고리즘은 문자열 값을 입력 값으로 허락하지 않기 때문에 모든 문자열 값들을 숫자형으로 인코딩하는 전처리 작업 후에 머신러닝 모델에 학습을 시켜야 한다.<ul>
<li>모든 데이터는 숫자형(정수, 실수)</li>
<li>데이터에 빈 값이 없어야 함 (Null 안됨)</li>
<li>문자열은 허용X</li>
</ul>
</li>
</ul>
<h2 id="사용방법">사용방법</h2>
<h3 id="1-pandas의-get_dummies">1. <strong>pandas의 get_dummies()</strong></h3>
<p><strong>주요 Parameters</strong></p>
<p>data: 적용할 데이터</p>
<p>prefix: 생성할 더미 데이터의 컬럼이름</p>
<p>prefix_sep: <code>default=&#39;_&#39;</code></p>
<p>dummpy_na: <code>NaN</code>도 포함시킬지</p>
<p>columns: 대상이 되는 컬럼</p>
<p>dtype: 새로운 columns의 데이터 타입</p>
<p><strong>get_dummies()를 사용해서 인코딩해보기</strong></p>
<pre><code class="language-python">df[&quot;Embarked&quot;].value_counts()</code></pre>
<pre><code class="language-python">pd.get_dummies(df[&quot;Embarked&quot;])</code></pre>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/8f27d3be-c9f0-4880-ba0e-ab3d9fdd8cce/image.png" alt=""></p>
<p>💡<strong>장점</strong>💡</p>
<p>수치형 변수만 알아서 인코딩을 해주기 때문에 편리하다.</p>
<p>💡<strong>단점  및 주의사항</strong>💡</p>
<p>pandas.get_dummies는 train data set과 test data set 각각에 인코딩이 적용된다. </p>
<p>따라서 train 데이터에만 있고 test 데이터에는 없는 카테고리를 test 데이터에서 One-Hot-Encoding 된 칼럼으로 바꿔주지 않는다. </p>
<p> ⇒ train과 test의 컬럼 개수와 컬럼 명 등이 일치하는지를 확인해야 한다.</p>
<h3 id="2-sklearn의-onehotencoder">2. <strong>sklearn의 OneHotEncoder</strong></h3>
<p><strong>sklearn.preprocessing.OneHotEncoder</strong></p>
<pre><code class="language-python">from sklearn.preprocessing import OneHotEncoder

# sparse : bool, default=True
# Will return sparse matrix if set True else will return an array.
# True로 설정하면 희소 행렬을 반환하고 그렇지 않으면 배열을 반환합니다.
ohe = OneHotEncoder(sparse=False)

# fit_transform은 train에만 사용하고 test에는 학습된 인코더에 fit만 해야한다
train_em = ohe.fit_transform(df[[&#39;Embarked&#39;]])
train_em</code></pre>
<p><img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/eda37787-baf2-4278-ba39-817e8a2eb5e4/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2022-11-10_%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10.20.31.png" alt="스크린샷 2022-11-10 오전 10.20.31.png"></p>
<p>sklearn.preprocessing.OneHotEncoder를 사용하여 변환된 결과는 numpy.array이기 때문에 이를 데이터프레임으로 변환하는 과정이 필요하다. (concat 사용)</p>
<p>⇒ pandas.get_dummies를 사용할때보다는 손이 많이 가는 작업이지만 train 데이터에 있던 카테고리의 정보가 test 데이터에도 똑같이 반영할 수 있다.</p>
<h3 id="3-okt-형태소-분석기를-통한-one-hot-encoding"><strong>3. Okt 형태소 분석기를 통한 One-Hot-Encoding</strong></h3>
<p><strong>One-Hot-Encoding은</strong> 표현하고 싶은 단어에 1 다른 곳에는 0으로 표현함으로써 구현하는 벡터 표현 방식이다. 이 때 표현된 벡터는 (One-Hot-Vector)라고 한다. </p>
<p><strong>문장 : 나는 자연어 처리를 배운다</strong></p>
<p>Okt 형태소 분석기를 통해서 문장에 대해서 토큰화를 수행합니다.</p>
<pre><code class="language-python">from konlpy.tag import Okt  

okt = Okt()  
tokens = okt.morphs(&quot;나는 자연어 처리를 배운다&quot;)  
print(tokens)</code></pre>
<pre><code class="language-python">[&#39;나&#39;, &#39;는&#39;, &#39;자연어&#39;, &#39;처리&#39;, &#39;를&#39;, &#39;배운다&#39;]</code></pre>
<p>각 토큰에 대해서 고유한 정수를 부여한다. 지금은 문장이 짧기 때문에 각 단어의 빈도수를 고려하지 않지만, 빈도수 순으로 단어를 정렬하여 정수를 부여하는 경우가 많다.</p>
<pre><code class="language-python">word_to_index = {word : index for index, word in enumerate(tokens)}
print(&#39;단어 집합 :&#39;,word_to_index)</code></pre>
<pre><code class="language-python">단어 집합 : {&#39;나&#39;: 0, &#39;는&#39;: 1, &#39;자연어&#39;: 2, &#39;처리&#39;: 3, &#39;를&#39;: 4, &#39;배운다&#39;: 5}</code></pre>
<p>토큰을 입력하면 해당 토큰에 대한 원-핫 벡터를 만들어내는 함수를 만든다.</p>
<pre><code class="language-python">def one_hot_encoding(word, word_to_index):
  one_hot_vector = [0]*(len(word_to_index))
  index = word_to_index[word]
  one_hot_vector[index] = 1
  return one_hot_vector</code></pre>
<p>&#39;자연어&#39;라는 단어의 원-핫 벡터를 얻어보자.</p>
<pre><code class="language-python">one_hot_encoding(&quot;자연어&quot;, word_to_index)</code></pre>
<pre><code class="language-python">[0, 0, 1, 0, 0, 0]</code></pre>
<p>&#39;자연어&#39;는 정수 2이므로 원-핫 벡터는 인덱스 2의 값이 1이며, 나머지 값은 0인 벡터가 나오게 된다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 복습]]></title>
            <link>https://velog.io/@pythonnn_/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%B3%B5%EC%8A%B5</link>
            <guid>https://velog.io/@pythonnn_/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%B3%B5%EC%8A%B5</guid>
            <pubDate>Thu, 03 Nov 2022 07:09:25 GMT</pubDate>
            <description><![CDATA[<p><strong>정규화</strong> =&gt; 숫자 스케일의 차이가 클 때 값을 정규분포로 만들어 주거나 스케일 값을 변경해 주는 것 
<strong>이상치</strong> =&gt; 이상치를 제거하거나 대체 
<strong>대체</strong> =&gt; 결측치를 다른 값으로 대체 
<strong>인코딩</strong> =&gt; 호칭, 탑승지의 위치, 문자 데이터를 수치화, 너무 범위가 큰 수치 데이터를 구간화 해서 인코딩 할 수도 있다.</p>
<p><strong>Accuracy</strong> : 올바르게 예측한 샘플 개수 / 전체 샘플 개수
(실제값 == 예측값) =&gt; 평균(올바르게 예측한 샘플 개수 / 전체 샘플 개수) =&gt; Accuracy</p>
<p>y_test가 없을때 accuracy score 구하기</p>
<p>cross_val_predict 사용
hold-out-validation 이라든지 cross_validation을 사용해서 구할 수 있다.
hold-out-validation (valid 가 한 조각) cross_validation(valid 가 여러 조각)</p>
<p><strong>R2 Score</strong> : 회귀 모델이 얼마나 &#39;설명력&#39; 이 있느냐를 의미.</p>
<p>-&#39;실제 값의 분산 대비 예측값의 분산 비율&#39; 로 요약 될 수 있으며, 예측 모델과 실제 모델이 얼마나 강한 상관관계(Correlated)를 가지는가로 설명력을 요약할 수도 있다.
-회귀 모델을 평가할 때 사용하는 평가지표이다.</p>
<p>특징 : 다른 평가지표인 MAE MSE RMSE 모두 에러에 대한 값이기 때문에 작을수록 좋은 값이지만, R2 Score는 1에 가까울 수록 좋습니다</p>
<p>피처엔지니어링도 많이 할수록 꼭 점수가 오른다는 보장은 없다.
오히려 피처엔지니어링을 많이 했을 때 점수가 더 낮아질 수도 있다.
피처엔지니어링을 제대로 도메인지식, EDA를 통해서 생존여부에 중요한 역할을 하는 변수를 찾아서 전처리 해주면 성능이 더 나아질 수 있다.</p>
<h3 id="엔트로피">엔트로피</h3>
<p>엔트로피 공식 예제</p>
<ul>
<li>((549/891) * np.log2(549/891) + (342/891) * np.log2(342/891))</li>
</ul>
<p>지니불순도와 엔트로피를 사용하는 목적</p>
<p>분류를 했을 때 True, False 로 완전히 나뉘지 않는데 이 때 값이 얼마나 섞여있는지 수치로 확인하기 위해서이고, 0에 가까울 수록 다른 값이 섞여있지 않은 상태이다. 분류의 분할에 대한 품질을 평가하고 싶을 때 사용한다.
ex)콩과 팥을 분류하는데 콩 분류집단에 팥이 얼마나 들어가있는지, 팥 분류집단에 콩이 얼마나 들어가있는지 파악하기 위해서 수치화한게 지니계수, 앤트로피로 나타낸다 라고 이해.</p>
<p>데이터 전처리를 할 때는 train 을 기준으로 한다.
현실 세계에서 test 는 아직 모르는(미래의) 데이터이기 때문에 train을 기준으로 전처리</p>
<p>train 에만 등장하는 호칭은 학습을 해도 test 에 없기 때문에 예측에 큰 도움 안됨.
train 에만 등장하는 호칭을 피처로 만들어 주게 되면 피처의 개수가 늘어나는데
불필요한 피처가 생기기도 하고 데이터의 크기도 커지기 때문에 학습에도 시간이 더 걸림.
너무 적게 등장하는 값을 피처로 만들었을 때 해당 값에 대한 오버피팅 문제도 있을 수 있음.
train 과 test 의 피처 개수가 다르면 오류가 발생.</p>
<h3 id="원핫인코딩">원핫인코딩</h3>
<p>원핫인코딩을 할 때 train, test 피처의 개수와 종류가 같은지 확인이 필요.
예를 들어 train 피처는 수학인데 test 피처는 국어라고 하면 피처의 개수가 같더라도 다른 종류 값이기 때문에 제대로 학습할 수 없다. 피처를 컬럼명으로 만들 때도 제대로 만들어지지 않는다.</p>
<p><strong>pd.get_dummies</strong> : 범주형 데이터를 수치형으로 바꿔준다.</p>
<p>범주형 데이터의 경우에는 결측치 처리를 하면 원핫인코딩을 했을 때 해당 값이 만들어지지 않습니다.</p>
<p>One-Hot-Encoding
pandas에서는 Ordinal-Encoding을 category 타입에 대해서 cat 속성의 codes 속성으로 지원</p>
<p>pandas에서는 One-Hot-Encoding을 get_dummies 메서드로 지원</p>
<p>sklearn에서는 Ordinal-Encoding을 OrdinalEncoder 객체로 지원</p>
<p>sklearn에서는 One-Hot-Encoding을 OneHotEncoder 객체로 지원</p>
<p>sklearn 을 사용하게 되면 일단 학습을 해서 전처리를 하게 된다. 어떤 피처가 있는지를 확인하게 된다.</p>
<p>test 에 없는 값이라도 test 에 해당 피처를 생성해 준다.</p>
<p>그런데 pandas 의 get_dummies 를 사용하면 각각 전처리를 하기 때문에 다른 값이 있다면 다른 컬럼으로 생성이 된다.
이 부분도 피처가 만들어지고 나서 다른 컬럼은 제외해 주는 방법도 있다.</p>
<p>모델이 학습할 때 문자는 인식을 하지 못해서 학습할 때 에러가 뜹니다. 따라서 문자에서 숫자로 바꿔주는 인코딩이 필요한데 그 인코딩 방식 중 하나가 <strong>OneHotEncoder</strong> 이다.</p>
<p><em>int, float, bool 은 머신러닝 알고리즘에서 수치데이터로 취급한다.</em></p>
<p>결측치 채우는 다양한 방법</p>
<pre><code class="language-python">fillna(method=&quot;ffill”)
fillna(method=“bfill&quot;)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝 기본 개념]]></title>
            <link>https://velog.io/@pythonnn_/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@pythonnn_/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90</guid>
            <pubDate>Thu, 27 Oct 2022 07:40:22 GMT</pubDate>
            <description><![CDATA[<p>머신러닝의 기본 개념에 대해 알아보는 시간을 가졌다.</p>
<p>머신러닝은 기계학습을 뜻하고, 정답이 있냐 없냐에 따라 지도학습과 비지도 학습으로 나뉨.
지도학습 : 분류, 회귀
비지도학습 : 군집화, 변환, 연관</p>
<p>*<em>Supervised learning(지도학습)
*</em>
큰흐름</p>
<p>Fit : 학습</p>
<p>Predict : 예측</p>
<p>Evaluate : 평가</p>
<p>*<em>unsupervised learning(비지도학습)
*</em></p>
<p>여기서 지도학습을 보면 분류는 예측값이 카테고리와 같은 범주형이고, 회귀는 연속형 양적 자료이다.</p>
<p>*<em>머신러닝의 학습과 예측 전체 과정
*</em></p>
<ul>
<li>feature_names : 학습(훈련), 예측에 사용할 컬럼을 리스트 형태로 만들어서 변수에 담아줍니다.</li>
<li>label_name : 정답값</li>
<li>X_train : feature_names 에 해당되는 컬럼만 train에서 가져옵니다.<ul>
<li>학습(훈련)에 사용할 데이터셋 예) 시험의 기출문제</li>
</ul>
</li>
<li>X_test : feature_names 에 해당되는 컬럼만 test에서 가져옵니다.<ul>
<li>예측에 사용할 데이터셋 예) 실전 시험문제</li>
</ul>
</li>
<li>y_train : label_name 에 해당 되는 컬럼만 train에서 가져옵니다.<ul>
<li>학습(훈련)에 사용할 정답 값 예) 기출문제의 정답</li>
</ul>
</li>
<li>model : 학습, 예측에 사용할 머신러닝 알고리즘</li>
<li>model.fit(X_train, y_train) : 학습(훈련), 기출문제와 정답을 가지고 학습(훈련)하는 과정과 유사합니다.</li>
<li>model.predict(X_test) : 예측, 실제 시험을 보는 과정과 유사합니다. =&gt; 문제를 풀어서 정답을 구합니다.</li>
<li>score<ul>
<li>시험을 봤다면 몇 문제를 맞고 틀렸는지 채점해 봅니다.</li>
</ul>
</li>
<li>metric<ul>
<li>점수를 채점하는 공식입니다. (예를 들어 학교에서 중간고사를 봤다면 전체 평균을 계산해 줍니다.)</li>
</ul>
</li>
</ul>
<p>*<em>Scikit learn
*</em>
장점:</p>
<p>간단하고 효율</p>
<p>누구나 접근 가능하고 다양한 맥락에서 사용가능</p>
<p>오픈 소스, 상업적으로 사용 가능</p>
<p>단점 :</p>
<p>딥러닝 및 강화학습을 지원하지 않음</p>
<p>특징</p>
<p>다른 많은 python 라이브러리와 통합이 잘 됨</p>
<p>*<em>머신러닝 대표 알고리즘 
*</em></p>
<p><strong>DecisionTree</strong>
결정에 다다르기 위해 스무고개와 같은 예/아니오 질문을 이어나가면서 학습한다</p>
<p>각 네모칸을 트리의 <em><strong>노드(node)</strong></em>
마지막 노드는 <em><strong>리프 노드(leaf node)</strong></em>
_<strong>에지(edge)</strong>_는 질문의 답과 다음 질문을 연결한다.</p>
<p>특징 : 내부적인 기준을 통해 참/거짓 판별 후 노드가 뻗어나가는 형태</p>
<p>장점 : 
시각화하기 편하고, 직관적으로 이해가 가능, 훈련된 과정을 명확하게 알 수 있음.
데이터 스케일에 구애받지 않음. 따라서 전처리하는 과정이 필요없음.</p>
<p>단점 : 
과대적합 문제가 발생할 수 있음</p>
<p>불러오기 :</p>
<pre><code class="language-python">from sklearn.tree import DecisionTreeClassifier</code></pre>
<p>*<em>k-최근접 이웃 회귀
*</em></p>
<p>주변의 가장 가까운 K개의 샘플을 통해 값을 예측하는 방식이다. 예를 들어 가장 간단한 방식으로는 K개 샘플의 평균을 이용할 수 있다.</p>
<p>예측하려는 샘플에 가장 가까운 샘플 k개를 선택한다. 그 다음이 샘플들의 클래스를 확인하여다수 클래스를 새로운 샘플의 클래스로 예측한다. 쉽게 말하면 C 주변에 A 가 1개, B 가 2개 일경우 C == B 다 라는 공식을 이용한다는 말이다.</p>
<p>특징 : 
이웃 샘플들의 값을 토대로 타깃값을 예측</p>
<p>장점 : 
직관적 추론이 가능하며, 극단적인 값의 영향을 적게 받음</p>
<p>단점 : 
테스트하고자 하는 샘플에 근접한 훈련 데이터가 없는 경우 즉, 이상치 샘플을 제대로 예측하기 힘듬.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[seaborn]]></title>
            <link>https://velog.io/@pythonnn_/seaborn</link>
            <guid>https://velog.io/@pythonnn_/seaborn</guid>
            <pubDate>Thu, 29 Sep 2022 08:45:11 GMT</pubDate>
            <description><![CDATA[<h2 id="seaborn">seaborn</h2>
<p><strong>정의</strong> : matplotlib 기반의 파이썬 시각화 라이브러리
<strong>특징</strong> : figure level 함수와 axes level 함수로 나눠져 있다.</p>
<blockquote>
<p><strong>figure level</strong> : seaborn에 figure를 만들어 plotting 한다,
facetgrid를 통해 레이아웃을 변경한다.</p>
</blockquote>
<blockquote>
<p><strong>axes level</strong> : matplotlib의 axes에 plotting 한다,
plt.figure()와 같은 메소드로 레이아웃을 변경한다.</p>
</blockquote>
<h3 id="relplot">Relplot</h3>
<p>특징 : </p>
<ol>
<li>각 값들의 관계를 나타낼 때 사용</li>
<li>그래프 형식 기본값은 scatterplot</li>
<li>두 가지 공통적인 접근방식을 사용하는데, 산점도를 나타낼때는 scatterplot이고, 선 그래프를 나타낼 때는 lineplot이다.
실습 결과 :
<img src="https://velog.velcdn.com/images/pythonnn_/post/863a7074-11f5-4262-abb0-2db13b52cc70/image.png" alt=""></li>
</ol>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/030d2dbf-e59f-46ea-9d53-c5443a70fe0a/image.png" alt=""></p>
<p>col을 통해 서브플랏을 형성할 수 있음.</p>
<h3 id="scatterplot">scatterplot</h3>
<p>특징 :</p>
<ol>
<li>수치형 데이터끼리의 상관관계를 볼 때 주로 사용</li>
<li>산점도를 효과적으로 나타냄.
실습 결과 : 
<img src="https://velog.velcdn.com/images/pythonnn_/post/e7e0c834-794b-482e-9fc1-0da5463fd16a/image.png" alt=""></li>
</ol>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/b19cb0ac-5b06-4f6f-ae6d-37a377d87d31/image.png" alt=""></p>
<p>hue와 style을 통해 원하는 형태로 보다 직관적으로 그래프를 꾸밀 수 있다.</p>
<h3 id="lineplot">lineplot</h3>
<p>특징 :</p>
<ol>
<li>선을 이용한 그래프</li>
<li>연령, 기간, 연도 등 변화 폭의 흐름을 보고 싶을 때 좋음</li>
<li>신뢰구간 값을 그림자표현으로 표시함. 모수가 적어서 편차가 그릴게 없으면 그림자 구간이 안나옴.</li>
</ol>
<ul>
<li>신뢰구간이란? : 변수가 어느 범위 안에 있는지를 확률적으로 보여주는 방법!</li>
</ul>
<p>실습 결과 : 
<img src="https://velog.velcdn.com/images/pythonnn_/post/6275d24c-96dd-49f5-abe8-b8f761067ddb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/pythonnn_/post/70b074f2-655a-4b3e-b805-b045be0d0376/image.png" alt=""></p>
<p>참고문서 : <a href="https://seaborn.pydata.org/api.html">https://seaborn.pydata.org/api.html</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이썬 기초 문법]]></title>
            <link>https://velog.io/@pythonnn_/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EB%B2%95</link>
            <guid>https://velog.io/@pythonnn_/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EB%B2%95</guid>
            <pubDate>Thu, 22 Sep 2022 08:46:20 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>❗️ 파이썬을 공부하기 앞서 알아두면 좋은 꿀팁</p>
</blockquote>
<ul>
<li><strong>미리 알아두면 좋은 Tip!</strong><ul>
<li>Python 은 대소문자를 구분한다.</li>
<li>Python 은 들여쓰기에 민감하다.</li>
<li>들여쓰기는 암묵적으로 스페이스 4번을 기준으로 한다.
( 도구 &gt; 설정 &gt; 편집기 &gt; 들여쓰기(공백개수) &gt; 4번으로 설정)</li>
<li>Python은 첫번째 인덱스가 <code>0</code> 부터 시작한다.</li>
</ul>
</li>
</ul>
<h1 id="🔥자료형">🔥자료형</h1>
<p><a href="https://wikidocs.net/11">자료참조</a></p>
<h2 id="숫자형">숫자형</h2>
<p>숫자 형태로 이루어진 자료형으로 따로 괄호에 넣지 않고 그냥 사용한다.</p>
<blockquote>
<p><strong>사칙연산</strong>
실제 사용하는 기호들을 그대로 사용하지만 살짝 다른 점들이 있다.
대표적으로 <code>=</code>
우리가 생각하는 <code>=</code>은 파이썬에서는 <code>==</code>에 해당될 것이다.
파이썬에서 <code>=</code>은 할당을 해주는 것이고, <code>==</code>이 비교하는 기호이다.</p>
</blockquote>
<p><strong>그 밖의 기호들</strong></p>
<p>** : 제곱
% : 나눗셈 후 나머지를 반환
// : 나눗셈 후 몫을 반환</p>
<h2 id="문자열">문자열</h2>
<p>문자 및 단어 등으로 구성되어 있다.</p>
<p>특징 : &quot;&quot;로 둘러싸여 있다.</p>
<blockquote>
<p>❗️주의사항
&quot;123&quot; 이 안에 들어있는 것이 숫자이더라도 &quot;&quot;안에 있으니 문자열로 보면된다.
&quot;&quot;를 &#39;&#39;로 바꿔써도 똑같이 작동하지만, &quot;&#39;과 같이 한번에 사용하면 안된다.</p>
</blockquote>
<p><strong>그 밖의 기능들</strong>
&quot;&quot;를 문자열에 포함시키기 위해서는 백슬래시()를 사용한다.
\를 &quot;앞에 사용하면 문자열을 둘러싸는 기능이 아닌 문자 그 자체의 의미를 가지게 된다.</p>
<p>&quot;&quot;&quot;로 긴 문장을 둘러싸게 되면 줄바꿈이 적용된다.</p>
<p>문자열도 변수에 넣어 더하기와 곱하기가 가능하고, 문자열과 숫자열을 곱할 수도 있다.
문자열의 길이 
len함수를 사용하고 len은 파이썬의 내장함수이다.</p>
<p><strong>인덱싱과 슬라이싱</strong>
인덱싱 : 무언가를 가리킨다.
슬라이싱 : 무언가를 잘라낸다.
❗️사전적으로 정의하는 것보다 직관적으로 단어의 뜻을 흡수 하는게 좋다.</p>
<p>ex)</p>
<blockquote>
<pre><code>a = &quot;안녕하세요 저는 홍길동 입니다&quot;
a[4]
&#39;요&#39;</code></pre></blockquote>
<pre><code>

처럼 a[번호] 형식으로 문자열 안의 값을 뽑아내는 것을 `인덱싱`이라 한다.

&gt;```
a = &quot;안녕하세요 저는 홍길동 입니다&quot;
a[0:4]
&#39;안녕하세요&#39;</code></pre><p>처럼 한 단어를 뽑아내는 것을 <code>슬라이싱</code>이라 한다.</p>
<h2 id="리스트">리스트</h2>
<blockquote>
<pre><code>number = [1, 2, 3, 4, 5]</code></pre></blockquote>
<pre><code>
위와 같은 형태를 리스트라 한다. 
(대괄호)로 감싸주고 (,)로 요솟값을 구별한다.

**리스트 인덱싱** :
&gt;```
number = [1, 2, 3, 4, 5]
number[0]
1</code></pre><p><strong>리스트 슬라이싱</strong> : </p>
<blockquote>
<pre><code>number = [1, 2, 3, 4, 5]
number[0:2]
[1, 2, 3]</code></pre></blockquote>
<pre><code>
**리스트 길이구하기**
&gt;```
number = [1, 2, 3, 4, 5]
len(number)
5</code></pre><h2 id="딕셔너리">딕셔너리</h2>
<p>이름 = 홍길동, 취미 = 운동
과 같은 <code>대응 관계</code>를 나타낼 수 있는 자료형이 딕셔너리다.</p>
<blockquote>
<pre><code>#기본적인 모습
dic = {&quot;key&quot; : &quot;value&quot;, &quot;이름&quot; : &quot;홍길동&quot;, &quot;취미&quot; : &quot;운동&quot;}</code></pre></blockquote>
<pre><code>
쉽게 말해 앞에 요소는 key, 뒤에 요소는 value 이다.

❗️**key를 이용해서 value를 불러오기**
&gt;```
dic = {&quot;key&quot; : &quot;value&quot;, &quot;이름&quot; : &quot;홍길동&quot;, &quot;취미&quot; : &quot;운동&quot;}
dic[&quot;이름&quot;]
&#39;홍길동&#39;</code></pre><p>위와 같은 방식으로 불러오면 된다.</p>
<h2 id="불">불</h2>
<p>참(True)와 거짓(False)을 나타내는 자료형이다.</p>
<p>특징</p>
<blockquote>
<p>-<em>첫문자를 항상 대문자로 사용한다.</em>
-&quot;&quot;로 감싸지 않아도 오류가 발생하지 않고 잘 실행된다.</p>
</blockquote>
<p>간단한 예제로 알아보자.</p>
<blockquote>
<pre><code>7 == 7
True</code></pre></blockquote>
<pre><code>
&gt;```
7 == 6
False</code></pre><p><em>이렇게 참과 거짓을 구별해주고 조건문에 활용되니 꼭 개념을 알아두어야 한다.</em></p>
<h2 id="변수">변수</h2>
<blockquote>
<p>❗️주의사항 :
-변수명은 숫자로 시작할 수 없다. (중간이나 뒤에는 사용가능)
-변수명은 언더바(_)를 제외한 특수문자를 사용할 수 없다.</p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>