<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>deep-of-machine.log</title>
        <link>https://velog.io/</link>
        <description>HanYang ERICA Univ. Department of Artificial Intelligence</description>
        <lastBuildDate>Tue, 09 May 2023 05:19:05 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>deep-of-machine.log</title>
            <url>https://velog.velcdn.com/images/deep-of-machine/profile/81dad6f2-afd9-4b11-8f98-d1e0e7ff0b83/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. deep-of-machine.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/deep-of-machine" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[VScode] 비주얼 스튜디오 코드 설치 (Visual Studio Code Install)]]></title>
            <link>https://velog.io/@deep-of-machine/VSCode-%EB%B9%84%EC%A3%BC%EC%96%BC-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-%EC%BD%94%EB%93%9C-%EC%84%A4%EC%B9%98-Visual-Studio-Code</link>
            <guid>https://velog.io/@deep-of-machine/VSCode-%EB%B9%84%EC%A3%BC%EC%96%BC-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-%EC%BD%94%EB%93%9C-%EC%84%A4%EC%B9%98-Visual-Studio-Code</guid>
            <pubDate>Tue, 09 May 2023 05:19:05 GMT</pubDate>
            <description><![CDATA[<h1 id="visual-studio-code-설치-가이드">Visual Studio Code 설치 가이드</h1>
<h2 id="1-visual-studio-code-소개와-특징">1. Visual Studio Code 소개와 특징</h2>
<p>Visual Studio Code는 Microsoft에서 개발한 무료 오픈소스 코드 편집기입니다. 다양한 플랫폼에서 지원되며, 코드 편집을 비롯한 다양한 개발 작업을 보다 쉽게 수행할 수 있는 기능들을 제공합니다. Visual Studio Code의 주요 특징은 다음과 같습니다.</p>
<ul>
<li>높은 확장성과 개인화 가능성</li>
<li>다양한 프로그래밍 언어 지원</li>
<li>코드 작성 및 디버깅 기능</li>
<li>Git과 같은 버전 관리 시스템 연동 기능</li>
<li>강력한 IntelliSense 기능</li>
</ul>
<hr>
<h2 id="2-설치-방법">2. 설치 방법</h2>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/b19f7e82-3817-460a-9f05-cd592ebaba60/image.png" alt=""></p>
<h3 id="21-windows에서-설치하기">2.1. Windows에서 설치하기</h3>
<ol>
<li>Visual Studio Code를 다운로드합니다. 다운로드 링크: <a href="https://code.visualstudio.com/download">https://code.visualstudio.com/download</a></li>
<li>다운로드한 설치 파일을 실행합니다.</li>
<li>설치 파일이 압축 해제되고, 설치 프로그램이 실행됩니다.</li>
<li>설치할 경로를 선택하고, &quot;Next&quot; 버튼을 클릭합니다.</li>
<li>추가 옵션을 선택하고, &quot;Next&quot; 버튼을 클릭합니다.</li>
<li>&quot;Install&quot; 버튼을 클릭하여 설치를 진행합니다.</li>
<li>설치가 완료되면 &quot;Finish&quot; 버튼을 클릭합니다.</li>
</ol>
<h3 id="22-macos에서-설치하기">2.2. macOS에서 설치하기</h3>
<ol>
<li>Visual Studio Code를 다운로드합니다. 다운로드 링크: <a href="https://code.visualstudio.com/download">https://code.visualstudio.com/download</a></li>
<li>다운로드한 설치 파일을 실행합니다.</li>
<li>설치 파일이 압축 해제되고, 설치 프로그램이 실행됩니다.</li>
<li>&quot;Visual Studio Code&quot;를 &quot;Applications&quot; 폴더에 설치하도록 설정합니다.</li>
<li>&quot;Continue&quot; 버튼을 클릭합니다.</li>
<li>&quot;Install&quot; 버튼을 클릭하여 설치를 진행합니다.</li>
<li>설치가 완료되면 &quot;Close&quot; 버튼을 클릭합니다.</li>
</ol>
<h3 id="23-linux에서-설치하기">2.3. Linux에서 설치하기</h3>
<ol>
<li><p>Visual Studio Code를 다운로드합니다. 다운로드 링크: <a href="https://code.visualstudio.com/download">https://code.visualstudio.com/download</a></p>
</li>
<li><p>다운로드한 설치 파일을 실행합니다.</p>
</li>
<li><p>&quot;dpkg&quot; 또는 &quot;rpm&quot; 명령어를 사용하여 설치 파일을 설치합니다. 예를 들어, &quot;dpkg&quot; 명령어를 사용하여 설치 파일을 설치하면 다음과 같은 명령어를 실행합니다.</p>
<pre><code>sudo dpkg -i &lt;파일명&gt;.deb</code></pre></li>
<li><p>설치가 완료되면 &quot;code&quot; 명령어를 실행하여 Visual Studio Code를 시작합니다.</p>
</li>
</ol>
<hr>
<h2 id="3-파이썬-사용-시-기본-설정">3. 파이썬 사용 시 기본 설정</h2>
<h3 id="31-python-extension">3.1. Python Extension</h3>
<ul>
<li>파이썬 Extension 추가
VScode에서 파이썬을 사용하기 위해서 Python Extension을 설치해준다. 
<img src="https://velog.velcdn.com/images/deep-of-machine/post/fdb16bcc-7eba-47bb-b568-39a621e512be/image.png" alt=""></li>
</ul>
<h3 id="32-python-interpreter">3.2. Python Interpreter</h3>
<ul>
<li>Interpreter 선택
Extension 설치가 끝났다면, 어떤 파이썬의 Interpreter 환경을 통해 코드를 실행할지 선택한다. 
<img src="https://velog.velcdn.com/images/deep-of-machine/post/f06fe247-7353-4ba7-ad8b-95948d21df75/image.png" alt="">
화면 오른쪽 하단에 인터프리터를 선택할 수 있는 칸이 있다.</li>
</ul>
<hr>
<h2 id="4-특징-및-주요-기능">4. 특징 및 주요 기능</h2>
<h3 id="41-높은-확장성과-개인화-가능성">4.1. 높은 확장성과 개인화 가능성</h3>
<p>Visual Studio Code는 많은 플러그인과 확장성을 가지고 있습니다. 사용자가 원하는 기능을 추가하거나 제거할 수 있으며, 자신만의 개인화된 환경을 만들 수 있습니다.</p>
<h3 id="42-다양한-프로그래밍-언어-지원">4.2. 다양한 프로그래밍 언어 지원</h3>
<p>Visual Studio Code는 다양한 프로그래밍 언어를 지원합니다. JavaScript, HTML, CSS, Python, Java, C#, PHP, Ruby 등 다양한 언어의 코드를 작성할 수 있습니다.</p>
<h3 id="43-코드-작성-및-디버깅-기능">4.3. 코드 작성 및 디버깅 기능</h3>
<p>Visual Studio Code는 코드 작성을 위한 다양한 기능을 제공합니다. IntelliSense를 통해 자동 완성 기능을 제공하며, 코드 스니펫, Emmet, 터미널 등 다양한 기능을 지원합니다. 또한, 디버깅 기능을 통해 코드의 문제를 더 쉽게 해결할 수 있습니다.</p>
<h3 id="44-git과-같은-버전-관리-시스템-연동-기능">4.4. Git과 같은 버전 관리 시스템 연동 기능</h3>
<p>Visual Studio Code는 Git과 같은 버전 관리 시스템과 연동할 수 있는 기능을 제공합니다. Git의 브랜치, 커밋, 푸시 등의 작업을 Visual Studio Code에서 수행할 수 있습니다.</p>
<h3 id="45-강력한-intellisense-기능">4.5. 강력한 IntelliSense 기능</h3>
<p>Visual Studio Code는 강력한 IntelliSense 기능을 제공합니다. IntelliSense를 통해 코드 작성 시 자동 완성 기능을 제공하며, 코드에서 오류를 식별하고 해결하는 데 도움을 줍니다.</p>
<hr>
<p>이상으로 Visual Studio Code 설치 가이드와 주요 기능에 대한 소개였습니다. Visual Studio Code는 다양한 개발 작업에서 사용되는 강력한 도구입니다. 많은 개발자들이 사용하는 이유가 있습니다. 이제 여러분도 Visual Studio Code를 설치하고 사용해 보세요!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] - 파이썬 설치 (Python 3 Installation)]]></title>
            <link>https://velog.io/@deep-of-machine/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%84%A4%EC%B9%98-Python-3-Installation</link>
            <guid>https://velog.io/@deep-of-machine/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%84%A4%EC%B9%98-Python-3-Installation</guid>
            <pubDate>Tue, 09 May 2023 04:59:24 GMT</pubDate>
            <description><![CDATA[<hr>
<h2 id="1-파이썬이란">1. 파이썬이란?</h2>
<p>파이썬(Python)은 1991년 귀도 반 로섬(Guido van Rossum)이 개발한 고급 프로그래밍 언어입니다. 파이썬은 인터프리터 언어로, 컴파일러 언어인 C나 자바보다 느린 속도를 가지고 있습니다. 그러나 파이썬은 간결하고 읽기 쉬운 문법, 빠른 개발 속도, 다양한 라이브러리 지원 등의 이유로 프로그래머들에게 매우 인기 있는 언어 중 하나입니다.</p>
<hr>
<h2 id="2-파이썬-설치하기">2. 파이썬 설치하기</h2>
<h3 id="21-공식-홈페이지-다운로드">2.1 공식 홈페이지 다운로드</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/11cab4fc-20bd-4089-9753-d17dd8bbc047/image.png" alt=""> <a href="https://www.python.org/">https://www.python.org/</a></p>
<p>파이썬 공식 홈페이지에서 다운로드 받아 설치하는 방법입니다. 파이썬 공식 홈페이지에서는 다양한 운영체제에 대한 설치 파일을 제공하고 있으므로, 운영체제에 맞는 파일을 다운로드 받아 설치하면 됩니다.</p>
<ul>
<li>Downloads 창에서 자신의 운영체제와 원하는 버전을 선택합니다. 
<img src="https://velog.velcdn.com/images/deep-of-machine/post/5752730d-9321-4604-a363-7ced329c2a3c/image.png" alt=""></li>
</ul>
<h3 id="22-환경-변수-설정">2.2 환경 변수 설정</h3>
<p>파이썬을 설치할 떄 시스템 환경 변수에 파이썬 실행 파일 경로를 추가해줘야 합니다. 이를 통해 커맨드 라인에서 파이썬을 실행할 수 있게 됩니다.</p>
<ul>
<li>자동으로 파이썬 인터프리터를 할당하기 위해 Path를 추가합니다. 
<img src="https://velog.velcdn.com/images/deep-of-machine/post/4fc751d5-050d-4d00-9999-adc1219c76df/image.png" alt=""></li>
</ul>
<h4 id="체크를-하지-않고-설치를-했다면-다음과-같이-추가적으로-설정이-가능하다">체크를 하지 않고 설치를 했다면 다음과 같이 추가적으로 설정이 가능하다.</h4>
<ul>
<li><p>Windows 환경 변수 설정</p>
<p>Windows 운영체제에서는 &#39;시스템 속성&#39; -&gt; &#39;고급 시스템 설정&#39; -&gt; &#39;환경 변수&#39;에서 Path 변수를 편집하여 파이썬 실행 파일 경로를 추가해줍니다.</p>
</li>
<li><p>macOS 및 Linux 환경 변수 설정</p>
<p>macOS나 Linux 운영체제에서는 .bash_profile 파일을 수정하여 PATH 변수에 파이썬 실행 파일 경로를 추가해줍니다. .bash_profile 파일이 없다면 생성해주면 됩니다.</p>
</li>
</ul>
<hr>
<h2 id="3-파이썬의-특징">3. 파이썬의 특징</h2>
<h3 id="31-인터프리터-언어">3.1 인터프리터 언어</h3>
<p>파이썬은 인터프리터 언어로, 코드를 실행할 때 컴파일을 하지 않습니다. 이는 코드 수정 후 바로 실행이 가능하며, 디버깅이 쉽고 개발 속도가 빠르다는 장점을 가집니다.</p>
<h3 id="32-객체-지향-및-다양한-라이브러리">3.2 객체 지향 및 다양한 라이브러리</h3>
<p>파이썬은 객체 지향 언어로, 클래스와 객체를 이용한 프로그래밍이 가능합니다. 또한 파이썬은 다양한 라이브러리를 제공하여 데이터 분석, 인공지능, 웹 프로그래밍 등 다양한 분야에서 활용됩니다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/8b2ca8cf-071c-478d-9d54-6f448800f58a/image.png" alt=""></p>
<h3 id="33-high-level-language-vs-low-level-language">3.3 High-Level Language VS Low-Level Language</h3>
<h4 id="high-level-language">High level language</h4>
<p>사람이 이해하기 쉬운 추상화 수준이 높은 프로그래밍 언어를 의미합니다. 이러한 언어는 컴퓨터가 이해하는 기계어로 번역되기 전에 인터프리터나 컴파일러를 통해 변환됩니다. 파이썬은 대표적인 High level language 중 하나로, 사람 친화적인 문법과 간결한 코드 작성이 가능한 특징을 가지고 있습니다. 이러한 특징 덕분에 파이썬은 개발자들에게 높은 생산성과 효율성을 제공하며, 다양한 분야에서 활용되고 있습니다.</p>
<h4 id="low-level-language">Low level language</h4>
<p>Low level language는 컴퓨터가 직접 이해할 수 있는 기계어와 가까운 프로그래밍 언어를 의미합니다. 이러한 언어는 기계어로의 변환이 쉽고 빠르게 이루어지기 때문에, 컴퓨터와의 통신이 빠르고 효율적입니다. 그러나 Low level language는 사람이 이해하기 어려운 문법과 복잡한 코드 작성이 필요한 단점이 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/9b9fb8ff-9bd3-462b-bda9-f4fa185d6c97/image.png" alt=""></p>
<hr>
<h2 id="4-파이썬-활용-분야-소개">4. 파이썬 활용 분야 소개</h2>
<p>파이썬은 다양한 분야에서 활용됩니다. 그 중에서도 특히 다음과 같은 분야에서 많이 사용됩니다.</p>
<h3 id="41-웹-프레임워크">4.1 웹 프레임워크</h3>
<p>웹 프레임워크는 웹 어플리케이션을 쉽게 개발할 수 있도록 도와줍니다. 파이썬에서 많이 사용되는 웹 프레임워크로는 Flask, Django 등이 있습니다.</p>
<h3 id="42-데이터-분석">4.2 데이터 분석</h3>
<p>파이썬은 데이터 분석에 매우 적합한 언어입니다. 데이터 분석에 많이 사용되는 라이브러리로는 numpy, pandas, matplotlib 등이 있습니다.</p>
<h3 id="43-인공지능">4.3 인공지능</h3>
<p>파이썬은 인공지능 분야에서도 매우 많이 사용되는 언어입니다. Tensorflow, Keras, PyTorch 등의 딥러닝 라이브러리를 사용해 강화학습, 자연어 처리, 이미지 분석 등 다양한 분야에서 활용됩니다.</p>
<h3 id="44-웹-스크래핑">4.4 웹 스크래핑</h3>
<p>웹 스크래핑은 웹 페이지에서 데이터를 추출하는 기술입니다. 파이썬에서는 BeautifulSoup, Scrapy 등의 라이브러리를 사용해 웹 스크래핑을 할 수 있습니다.</p>
<h3 id="45-게임-개발">4.5 게임 개발</h3>
<p>파이썬에서는 Pygame이라는 라이브러리를 사용해 게임을 개발할 수 있습니다.</p>
<p>이 외에도, 파이썬은 네트워크 프로그래밍, 시스템 자동화, 데이터베이스 관리 등 다양한 분야에서 활용되며, 그 범위는 지속적으로 확장되고 있습니다. 이렇게 다양한 활용 분야를 가진 파이썬으로 여러분의 프로젝트를 시작해보세요!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] - K-Nearest Neighbor (KNN, K-최근접 이웃)]]></title>
            <link>https://velog.io/@deep-of-machine/ML-K-Nearest-Neighbor-KNN-K-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83</link>
            <guid>https://velog.io/@deep-of-machine/ML-K-Nearest-Neighbor-KNN-K-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83</guid>
            <pubDate>Mon, 28 Nov 2022 07:44:46 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="k-nearest-neighbor">K-Nearest Neighbor</h1>
<blockquote>
<p>대표적인 지도학습 알고리즘 중 하나</p>
</blockquote>
<h2 id="knn-k-최근접-이웃">KNN (K-최근접 이웃)</h2>
<ul>
<li>K-최근접 이웃은 지정한 K의 수만큼 근접한 데이터의 정보를 기반으로, 새로운 데이터의 종속 변수(y값, 타깃)을 예측하는 알고리즘이다.</li>
</ul>
<hr>
<h2 id="문제-설정">문제 설정</h2>
<p>현재 동그라미, 세모, 네모 데이터가 존재한다.
새로운 데이터가 추가됐을 때, 동그라미, 네모, 세모 중 어느 클래스에 속하는지 예측(분류)해보자.
<img src="https://velog.velcdn.com/images/deep-of-machine/post/953f42d2-3d84-4e51-af97-969cef3905a7/image.png" alt=""></p>
<ul>
<li>십자가 데이터가 테스트 데이터로 들어왔다.
십자가는 동그라미, 세모, 네모 중 어느 클래스에 속할까?</li>
</ul>
<hr>
<h2 id="파라미터-k-knn에서-k">파라미터 K (KNN에서 K)</h2>
<p>K-NN은 지정한 K의 수만큼 근접한 데이터의 정보를 기반으로, 새로운 데이터의 종속 변수(y값, 타깃)을 예측하는 알고리즘이라고 했다.</p>
<ul>
<li>즉 하이퍼 파라미터인 K를 개발자가 지정해주어야한다.</li>
</ul>
<h3 id="k가-무엇일까">K가 무엇일까?</h3>
<p>K의 의미는 새로운 샘플 데이터로 부터 가장 가까운 데이터들 몇개를 이용할 것인지이다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/db580964-9018-4598-beb9-52a44071f442/image.png" alt=""></p>
<ul>
<li>K가 1이면 테스트 데이터로부터 가장 가까운 훈련 데이터 1개만을 이용한다는 것이고,
k가 2이면 2개의 데이터
k가 9이면 9개의 데이터를 기반으로 예측한다는 것이다.
(위 그림 참고)</li>
</ul>
<blockquote>
<p>테스트 데이터의 클래스를 예측하기 위해서, K의 개수 가장 가까운 훈련 데이터의 클래스 수를 세고, 가장 많이 나온 클래스가 테스트 데이터의 종속변수 Y가 된다.</p>
</blockquote>
<p>가장 가까운 K개 만큼의 훈련 데이터를 이용한다고 했다.
Test 데이터로부터 어떤 Train 데이터가 가장 가까운지 판단할까?</p>
<hr>
<h2 id="거리-계산">거리 계산</h2>
<p>Test 데이터의 Label을 예측하기 위해서, 가장 가까운 K개 만큼의 Test 데이터와 Train 데이터 사이의 거리를 계산해야한다. </p>
<h3 id="1-유클리디언-거리">1. 유클리디언 거리</h3>
<h4 id="유클리디언-거리-euclidean-distance">유클리디언 거리 (Euclidean Distance)</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/61402dd3-4ad9-4705-b66e-3e766f7b660d/image.png" alt=""></p>
<p>거리를 측정할때 대표적으로 가장 많이 사용되는 방법이다. 
점과 점 사이의 거리를 측정할 때 이용된다. (최단 직선 거리)
<img src="https://velog.velcdn.com/images/deep-of-machine/post/d6cb5182-c987-4599-a91e-984b1b828162/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/25ba2ab6-5cd6-4e42-820c-801b206823c8/image.png" alt=""></p>
<ul>
<li>두 점의 좌표 차의 제곱합을 루트 씌운 것과 같다. </li>
</ul>
<hr>
<h3 id="2-맨하탄-거리">2. 맨하탄 거리</h3>
<p>다음 그림을 보면 4가지 경로로 길을 갔다.
초록색이 유클리디언 거리로 구한 최단 직선거리이다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/bdeb97d2-711d-47f6-b43d-fb6fa59b528c/image.png" alt=""></p>
<p>그럼 초록색을 제외하고 무슨색 선이 최단 거리일까?</p>
<p>파란색 선이 초록과 가장 인접해 있기 때문에 최단거리 처럼 보이지만,
-&gt; 정답은 빨,파,노란색 모두 동일한 거리라는 것이다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/9eea84b0-78cf-41a4-a08d-3681e7757a0c/image.png" alt=""></p>
<p>맨하탄 거리식에 의하면 x축, y축 각각 지나간 거리는 모두 같기 때문에 총 거리도 같다는 것이다.</p>
<hr>
<h3 id="최적의-k-gridsearchcv를-통한-최적의-k-값">최적의 K (GridSearchCV를 통한 최적의 K 값)</h3>
<p>K개를 지정하고 거리를 구했으니, 이제 예측을 할 수 있다.</p>
<p>하지만 KNN은 K값에 따라서 예측 결과에 큰 영향을 미치므로, 적절한 K값을 잘 선택해야한다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/7088694b-e55b-4877-aec1-141512583717/image.png" alt=""></p>
<h4 id="k-값이-너무-작으면">K 값이 너무 작으면?</h4>
<p>너무 적은 수의 데이터의 값만 참고하기 때문에, 이상치에 민감하다.
세세한 데이터 하나하나에 Fitting되기 때문에 오버피팅 되었다고 볼 수도 있다.</p>
<h4 id="k값이-너무-크면">K값이 너무 크면?</h4>
<p>많은 데이터를 참고하기 때문에, 이상치에 덜 민감하다.
하지만 너무 많은 데이터를 참고해서 언더피팅이 일어날 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/e051be9d-5e00-434c-af99-3f9f96a935a0/image.png" alt=""></p>
<p>K가 커질수록 더 완만한 Decision Boundary가 형성된다.</p>
<hr>
<h4 id="최적을-k를-찾기-위한-gridsearchcv">최적을 k를 찾기 위한 GridsearchCV</h4>
<p>그리드 서치 교차검증을 통해 Validation data에서 가장 높은 성능을 내는 파라미터 K값을 찾을 수 있다.
<img src="https://velog.velcdn.com/images/deep-of-machine/post/f49b4451-447a-4b0d-8a27-6ff69d4c91be/image.png" alt=""></p>
<p>K에 따른 validation 정확도를 나타낸 것이다.</p>
<p>위 그래프에서는,</p>
<ul>
<li>k가 1~10 정도 일때는 Underfitting으로 정확도가 65% 정도로 낮을 것을 볼 수 있다.</li>
<li>K가 100을 넘어가면 Overfitting되어 정확도가 70% 정도로 떨어진다.</li>
<li>k가 75정도일 때, ACC가 73% 정도로 가장 높으니 적절한 k값이라고 볼 수 있다. </li>
</ul>
<hr>
<h3 id="모델-기반-학습-vs-인스턴스-기반-학습">모델 기반 학습 vs 인스턴스 기반 학습</h3>
<h4 id="model-based-learning">Model based learning</h4>
<p>  <img src="https://velog.velcdn.com/images/deep-of-machine/post/a616acfe-665d-4582-a2df-d580e64e58f3/image.png" alt=""></p>
<ul>
<li>분류/ 예측 모델을 만들고 Test 데이터를 넣어 예측을 진행한다. </li>
<li>모델을 미리 학습시켜야한다.</li>
</ul>
<h4 id="instance-based-learning">Instance based learning</h4>
<p>  <img src="https://velog.velcdn.com/images/deep-of-machine/post/1ed447f9-a567-421d-a0a9-1d980018fbb7/image.png" alt=""></p>
<ul>
<li>모델을 미리 학습시키는 것이 아닌, 예측 진행 시점에 Train 데이터(인스턴스)를 참고하여 연산 후 예측한다.</li>
</ul>
<hr>
<h3 id="knn-특징">KNN 특징</h3>
<ol>
<li>모델 기반 학습을 하지 않고, 인스턴스 기반 학습을 통해 예측을 하기 때문에, 모델을 만들지 않는다.</li>
<li>학습 데이터의 차원과 K 값이 예측 결과에 영향을 많이 미친다.</li>
<li>지도 학습 알고리즘이다. (정답 레이블을 가지고 학습)</li>
</ol>
<hr>
<h3 id="이미지-출처">이미지 출처</h3>
<p><a href="https://bskyvision.com/entry/%EC%A7%81%EA%B4%80%EC%A0%81%EC%9D%B4%EA%B3%A0%EB%8F%84-%EB%A7%A4%EC%9A%B0-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%B6%84%EB%A5%98-%EB%AA%A8%EB%8D%B8-kNNk-Nearest-Neighbor">https://bskyvision.com/entry/%EC%A7%81%EA%B4%80%EC%A0%81%EC%9D%B4%EA%B3%A0%EB%8F%84-%EB%A7%A4%EC%9A%B0-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%B6%84%EB%A5%98-%EB%AA%A8%EB%8D%B8-kNNk-Nearest-Neighbor</a></p>
<p><a href="https://gomguard.tistory.com/51">https://gomguard.tistory.com/51</a></p>
<p><a href="https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-6-K-%EC%B5%9C%EA%B7%BC%EC%A0%91%EC%9D%B4%EC%9B%83KNN">https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-6-K-%EC%B5%9C%EA%B7%BC%EC%A0%91%EC%9D%B4%EC%9B%83KNN</a></p>
<p><a href="https://eunsukimme.github.io/ml/2019/10/20/KNN-classification/">https://eunsukimme.github.io/ml/2019/10/20/KNN-classification/</a></p>
<p><a href="https://www.youtube.com/watch?v=W-DNu8nardo">https://www.youtube.com/watch?v=W-DNu8nardo</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] - 아나콘다 설치 (Anaconda) ]]></title>
            <link>https://velog.io/@deep-of-machine/Python-%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-%EC%84%A4%EC%B9%98-Anaconda</link>
            <guid>https://velog.io/@deep-of-machine/Python-%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-%EC%84%A4%EC%B9%98-Anaconda</guid>
            <pubDate>Sun, 20 Nov 2022 05:40:06 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="anaconda-아나콘다">Anaconda (아나콘다)</h1>
<h2 id="1-아나콘다란">1. 아나콘다란?</h2>
<h3 id="가상환경">가상환경?</h3>
<p>우리는 파이썬을 이용해 여러 프로젝트를 진행한다.
프로젝트를 하기 위해서 파이썬을 깔고 패키지를 Pip을 통해 다운 받는다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/ce79f81f-eada-4c9e-aa11-b627957ce1d5/image.png" alt=""></p>
<p>하지만 사용하는 파이썬 버전과 패키지의 버전이 각각의 프로젝트별로 다를 확률이 크다.
따라서 프로젝트별 버전 호환성 문제가 발생한다.</p>
<p>그럼 이를 어떻게 해결할 수 있을까?
-&gt; 가상환경에 대해서 알아보자.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/7a883fdd-6bd8-4685-8ac5-7d81daf4769e/image.png" alt=""></p>
<p>호환성 문제를 해결하기 위해서는 프로젝트별 각각 독립적인 환경을 만들어 주면 된다.</p>
<blockquote>
<p> 아나콘다는 가상환경을 만들어 파이썬과 패키지를 독립적으로 관리할 수 있게 해주는 툴이다.</p>
</blockquote>
<hr>
<h2 id="2-아나콘다-설치">2. 아나콘다 설치</h2>
<p><a href="https://www.anaconda.com/products/distribution">Anaconda.org</a></p>
<ul>
<li>위 링크에 접속한 뒤, 맨 밑으로 스크롤하면 다음 사진과 같을 것이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/0beec817-d613-4cd2-a431-97650a03c976/image.png" alt=""></p>
<p>여기서 자신에게 맞는 플랫폼을 선택해준다. </p>
<ul>
<li>그 후 저장 라이선스 동의와 아나콘다가 설치될 위치를 정하고, 계속을 눌러준다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/822426d7-b2d1-4178-b210-f1966ba199ec/image.png" alt=""></p>
<p>이 장면이 아나콘다 설치에서 가장 중요한 부분이다. (나머지는 계속, 다음만 누르면 된다.)</p>
<blockquote>
<p>Add Anaconda to the system PATH enviroment variable 은 아나콘다를 시스템 환경 변수에 등록을 하겠다는 것이다. (이 부분을 체크해준다)</p>
</blockquote>
<ul>
<li><p>Path 설정을 해주지 않으면 파이썬 인터프린터를 선택할 때, 매번 아나콘다 설치폴더로 찾아가야하는 번거로움이 있다.</p>
</li>
<li><p>Path 설정을 하면 컴퓨터가 자동으로 아나콘다의 설치위치를 인식하기 때문에, 쉽게 인터프린터 등을 설정할 수 있다.</p>
</li>
</ul>
<hr>
<h2 id="3-아나콘다-사용법-명령어">3. 아나콘다 사용법 (명령어)</h2>
<p>Mac에서는 zsh, Windows는 Anaconda Prompt로 아나콘다를 실행해준다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/0e303926-8efc-4bb8-ae10-e55cf6728674/image.png" alt=""></p>
<p>터미널 사용자 현재 위치 앞에 (base)라고 보일 것이다. 
이것은 아나콘다의 기본이 되는 위치이다.</p>
<p>그럼 이제 우리가 프로젝트별 사용할 가상환경을 만들어보자!</p>
<h3 id="가상환경-생성">가상환경 생성</h3>
<pre><code>conda create -n 가상환경 이름 python=파이썬 버전

$ conda create -n velog python=3.8</code></pre><ul>
<li>나는 python version이 3.8인 velog라는 이름을 가진 가상환경을 생성해 보았다.</li>
</ul>
<hr>
<h3 id="가상환경-활성화--비활성화">가상환경 활성화 &amp; 비활성화</h3>
<pre><code>conda activate 가상환경 이름

$ conda activate velog</code></pre><ul>
<li>가상환경을 이용하기 위해서 가상환경을 활성화 시켜주었다.
<img src="https://velog.velcdn.com/images/deep-of-machine/post/ce7d8234-83f7-4a51-8c82-0ab1bb8c832e/image.png" alt=""></li>
</ul>
<p>가상환경을 활성화 시켜니 (base) 에서 (velog)로 환경이 바뀐것을 볼 수 있다.</p>
<pre><code>conda activate 가상환경 이름

$ conda deactivate </code></pre><ul>
<li>비활성화시에는 가상환경 이름을 적지 않는다!</li>
</ul>
<hr>
<h3 id="visual-studio-code에서-anaconda-가상환경-설정">Visual Studio Code에서 Anaconda 가상환경 설정</h3>
<p>이제 환경을 만들었으니, Visual Studio Code에서 이 환경을 이용해보자.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/ef59b20d-2348-4acf-9cb6-86fef6716613/image.png" alt=""></p>
<p>VScode에서 파이썬 파일을 하나 만들고, 화면 오른쪽 맨 밑부분을 보면 인터프린터 설정하는 란을 클릭해준다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/9ebf3ace-1fbd-49b9-bb4f-17027df5c97d/image.png" alt=""></p>
<ul>
<li>3.8.9 64-bit 라고 되어있는 부분이 인터프린터 설정 부분이다. (클릭)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/566cc9e8-6f36-46a6-bac3-bc675919d8e3/image.png" alt=""></p>
<ul>
<li>내가 만든 아나콘다 가상환경들이 나온다. 
(만약 아나콘다 설치시 Path 등록 체크를 안했으면 수동으로 이 위치를 잡아주어야하지만, 등록 체크를 했다면 자동으로 위치가 잡힌다.)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/8f508fc0-2058-4c63-bb08-570355d1eeda/image.png" alt=""></p>
<ul>
<li>아까 우리가 생성한 velog 환경이 있는 것을 볼 수 있다.</li>
</ul>
<blockquote>
<p>!! 가상환경에 패키지를 설치할 땐!! 
base가 아닌 반드시 velog 환경을 활성화 시킨 뒤 설치해야한다.</p>
</blockquote>
<hr>
<h3 id="존재하는-가상환경-목록-보기">존재하는 가상환경 목록 보기</h3>
<pre><code>$ conda info --envs

 또는

$ conda env list</code></pre><p><img src="https://velog.velcdn.com/images/deep-of-machine/post/e6548423-7ba2-4cf5-8391-346744dfc902/image.png" alt=""></p>
<hr>
<h3 id="가상환경-삭제">가상환경 삭제</h3>
<p>아나콘다 가상환경을 삭제하기 위해서는 다음 명령어를 입력하면 된다.</p>
<pre><code>conda env remove -n 가상환경 이름

$ conda env remove -n velog</code></pre><hr>
<h3 id="이미지-출처">이미지 출처</h3>
<p><a href="https://wikidocs.net/14629">https://wikidocs.net/14629</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] - Support Vector Machine (SVM, 서포트 벡터 머신)]]></title>
            <link>https://velog.io/@deep-of-machine/ML-SVM-Support-Vector-Machine</link>
            <guid>https://velog.io/@deep-of-machine/ML-SVM-Support-Vector-Machine</guid>
            <pubDate>Sun, 20 Nov 2022 02:54:01 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="svm-서포트-벡터-머신">SVM (서포트 벡터 머신)</h1>
<h2 id="1-서포트-벡터-머신">1. 서포트 벡터 머신</h2>
<p>서포트 벡터 머신은 대표적인 머신러닝 모델이다.</p>
<p>SVM은 SVR과 SVC로 나뉘는데, SVR은 회귀 모델이고 SVC는 분류모델이다.</p>
<p>하지만 통상적으로 SVM이라 하면, 주로 이진분류를 진행한다.</p>
<h4 id="binary-classification-이진-분류">Binary Classification (이진 분류)</h4>
<ul>
<li>이진분류는 구분하려는 결과가 참 또는 거짓의 형태나, A 그룹 또는 B 그룹으로 데이터를 나누는 경우를 의미</li>
</ul>
<p>ex) 사진이 개인지 고양이인지 분류, 영화 리뷰가 긍정인지 부정인지 판별 등</p>
<h3 id="문제-정의">문제 정의</h3>
<h4 id="개와-고양이를-가장-잘-구분-짓는-직선-하나를-찾아보자">개와 고양이를 가장 잘 구분 짓는 직선 하나를 찾아보자!</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/c20d6496-6875-4de9-8df8-94668877cfef/image.png" alt=""></p>
<p>** 다음 사진과 볼 수 있듯이, 우리는 이 데이터들을 기반으로 무한대에 가까운 다양한 선을 그을 수 있다.**</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/25332520-b641-41dd-ad7c-f26090fa9cd8/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/fbc06667-701a-464f-ada3-36d3956755d6/image.png" alt=""></p>
<blockquote>
<p>하지만 어느 선이 개와 고양이를 가장 잘 분류하는지 알 수 없다.
따라서 <strong>새로운 데이터에 대해서 일반화 성능이 높은(잘 분류할 수 있는)</strong> 직선을 찾는 것이 목표이다.</p>
</blockquote>
<p>그렇다면 어떻게 최적의 선을 찾을 수 있을까?
-&gt; <strong>SVM 머신러닝 알고리즘</strong>을 통해 다음을 해결해보자</p>
<hr>
<h2 id="2-decision-boundary">2. Decision Boundary</h2>
<h3 id="hyper-plane">Hyper-Plane</h3>
<h4 id="서포트-벡터-머신은-두-클래스개-고양이를-구분하기-위해-decision-boundary-즉-hyper-plane을-결정-짓는다">서포트 벡터 머신은 두 클래스(개, 고양이)를 구분하기 위해 Decision Boundary, 즉 Hyper-Plane을 결정 짓는다.</h4>
<ul>
<li>다음 사진에서 <strong>빨간 직선이 Hyper-Plane(Decision Boundary)</strong>이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/49008a39-a48e-4b99-bf9c-6392e1cd747f/image.png" alt=""></p>
<blockquote>
<p>SVM은 Hyper-Plane을 결정짓기 위해서 <strong>Margin을 최대화</strong> 한다. </p>
</blockquote>
<p>Margin을 최대화한다고 했는데, 그럼 Margin은 무엇인가?</p>
<hr>
<h2 id="3-margin">3. Margin</h2>
<h3 id="margin은-plus-plane과-minus-plane-사이의-거리이다">Margin은 Plus-Plane과 Minus-Plane 사이의 거리이다.</h3>
<p>Plus-Plane은 치와와 강아지에 걸쳐있는 점선이고, 
Minus-Plane은 고양이에 걸쳐있는 점선이다. </p>
<ul>
<li>Hyper Plane은 Plus-Plane과 Minus-Plane으로 부터 <strong>같은 거리</strong>에 결정된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/b2a373f6-0a3c-4f4d-aea5-f2f2011fb94a/image.png" alt=""></p>
<p>일반화 성능을 가장 잘 내는 직선을 찾기 위해서 마진을 최대화 해야한다고 했다.
그럼 마진을 결정짓는 요소를 보자.</p>
<blockquote>
<p>Margin은 <strong>Plus-Plane과 Minus-Plane 사이의 거리</strong>인데, </p>
</blockquote>
<ul>
<li>Plus-Plane을 결정 짓는 것은 다양한 개들 중에 치와와이고 </li>
<li>Minus-Plane을 결정 짓는 것은 하늘을 나는 고양이 사진이다.</li>
</ul>
<blockquote>
<p>즉 하늘을 나는 고양이와 치와와가 <strong>두 클래스를 전체를 대표해서</strong> Hyper-Plane을 찾았다. </p>
</blockquote>
<p>왜 많고 많은 데이터들 중에, 하늘을 나는 고양이와 치와와가 두 클래스의 대표가 되었을까?
-&gt; Support Vector에 대해서 알아보자.</p>
<hr>
<h2 id="4-support-vector-서포트-벡터">4. Support Vector (서포트 벡터)</h2>
<h4 id="서포트-벡터란-각각의-클래스를-대표하고-마진을-형성하기-위한-plus-minus-plane을-결정짓는데-필요한-데이터">서포트 벡터란 각각의 클래스를 대표하고, 마진을 형성하기 위한 Plus, Minus-Plane을 결정짓는데 필요한 데이터</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/c8654a92-075f-4c4c-a494-a1525d857702/image.png" alt=""></p>
<h3 id="soft-margin">Soft Margin</h3>
<ul>
<li>어느정도 오차를 허용해, 여유있게 서포트 벡터를 결정한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/87656716-4955-4a84-8116-e3449f913085/image.png" alt=""></p>
<h3 id="hard-margin">Hard Margin</h3>
<ul>
<li>어느 하나의 오차를 허용하지 않고, 타이트 하게 서포트 벡터를 결정한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/1f040dce-2666-4931-83f8-6a588eca3afa/image.png" alt=""></p>
<hr>
<p>직선 w^T • x + b = 1을 만족하는 데이터 x와 w^T • x + b = -1을 만족하는 데이터 x가 
Support Vector (서포트 벡터) 데이터가 된다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/76d0ab18-de61-4c61-b175-17ba2f2846e3/image.png" alt=""></p>
<blockquote>
<p>SVM으로 Prediction을 하기 위해, 데이터 전체가 아닌 오직 <strong>서포트 벡터만 이용하기 때문에 연산량이 매우 적다</strong>.</p>
</blockquote>
<p>** w^T • x + b &gt; 0 ** 인 경우</p>
<ul>
<li>양성 클래스인 개 클래스로 분류</li>
</ul>
<p>** w^T • x + b &lt; 0 ** 인 경우</p>
<ul>
<li>음성 클래스인 고양이 클래스로 분류</li>
</ul>
<hr>
<h2 id="5-커널-트릭-kernel-trick">5. 커널 트릭 (Kernel Trick)</h2>
<h3 id="not-linearly-separable-data">Not Linearly Separable Data</h3>
<p>개 고양이 데이터는 선형적으로 잘 분리되는 데이터였다.
하지만 대부분 Feature가 여러개이고, 선형적으로만 데이터가 존재하지 않는다.</p>
<p>따라서 SVM으로 Non-Linear Data를 Classification 하기 위해서는 커널을 이용해 차원을 변경시켜주어야 한다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/ff54781d-ddb9-4aef-be86-7a4776390d29/image.png" alt=""> </p>
<ul>
<li>왼쪽 그림은 Linearly Separable한 데이터를 Classcification한 결과이고</li>
<li>오른쪽 그림은 Non Linearly Separable하기에 Classcification을 하지 못했다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/0499223d-3f12-4462-95a1-bdf800abbe8f/image.png" alt=""></p>
<p>-&gt; Not Linearly Separable한 데이터는 Hyper-Plane을 찾을 수 없다.</p>
<blockquote>
<p>따라서 2D data를 3D로 차원을 변경시켜주면 Hyper-Plane을 찾을 수 있다.
(Kernel Trick)</p>
</blockquote>
<hr>
<h3 id="출처">출처</h3>
<p><a href="https://medium.com/pursuitnotes/day-12-kernel-svm-non-linear-svm-5fdefe77836c">https://medium.com/pursuitnotes/day-12-kernel-svm-non-linear-svm-5fdefe77836c</a>
<a href="https://yngie-c.github.io/machine%20learning/2020/04/26/SVM/">https://yngie-c.github.io/machine%20learning/2020/04/26/SVM/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] - Linear Regression (선형 회귀)]]></title>
            <link>https://velog.io/@deep-of-machine/ML-Linear-Regression-%EC%84%A0%ED%98%95-%ED%9A%8C%EA%B7%80</link>
            <guid>https://velog.io/@deep-of-machine/ML-Linear-Regression-%EC%84%A0%ED%98%95-%ED%9A%8C%EA%B7%80</guid>
            <pubDate>Tue, 08 Nov 2022 21:46:40 GMT</pubDate>
            <description><![CDATA[<h1 id="linear-regression-선형-회귀">Linear Regression (선형 회귀)</h1>
<p>회귀 분석 종류 중 가장 대표적인 회귀 분석</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/9c04e4d9-e7c4-421b-80c3-9abe4a5fbf88/image.png" alt=""></p>
<h2 id="1-선형회귀">1. 선형회귀</h2>
<h3 id="선형-회귀-문제란">선형 회귀 문제란?</h3>
<ul>
<li>독립 변수와 종속 변수간의 상관관계가 있어야 한다. </li>
<li>독립 변수와 종속 변수 데이터를 가지고 학습을 진행한 뒤, 새로운 독립 변수를 주었을 때 종속 변수의 값을 예측 하는 것.</li>
</ul>
<p>예) 몸무게와 키 데이터를 가지고 학습한 뒤, 몸무게 만으로 키 예측하기.
공부시간과 시험 성적 데이터를 가지고 학습한 뒤, 공부 시간만으로 성적 예측하기 등.
(몸무게-키, 공부 시간-시험 성적 모두 상관관계를 가지고 있다.)</p>
<hr>
<h2 id="2-원리-및-데이터">2. 원리 및 데이터</h2>
<p>키를 가지고 몸무게를 예측하는 프로그램을 만든다고 가정을 하자.</p>
<ul>
<li>X 데이터 =  키</li>
<li>Y 데이터 =  몸무게</li>
</ul>
<p>X = [160, 172, 181, 183, 187, 193]
Y = [56, 64, 74, 86, 93, 104]
<img src="https://velog.velcdn.com/images/deep-of-machine/post/40267d54-5fb1-4711-a792-2b0ddfe548f6/image.png" alt=""></p>
<ul>
<li>이 데이터를 가장 잘 일반화 할 수 있는 직선 하나를 찾는다. (직선 = 함수)</li>
</ul>
<p>그 직선 함수를 H(x) 라고 하면, H(x) = aX + b 이다. (y = ax + b 꼴)</p>
<p>어떻게 하면 컴퓨터가 직선을 찾을 수 있을까?</p>
<hr>
<h2 id="3-근사-직선-구하는-법">3. 근사 (직선 구하는 법)</h2>
<h4 id="직선을-구하는-방법은-임의로-기울기와-절편을-초기화-한-뒤-두-값을-바꿔가며-직선이-데이터를-잘-근사하는-시점의-값을-찾는다">직선을 구하는 방법은 임의로 기울기와 절편을 초기화 한 뒤, 두 값을 바꿔가며 직선이 데이터를 잘 근사하는 시점의 값을 찾는다.</h4>
<h3 id="임의의-a-기울기-b-절편-값-초기화">임의의 a (기울기), b (절편) 값 초기화</h3>
<ul>
<li>a = 1, b = 1로 임의로 초기화 하겠다. 
H(x) = 1X + 1</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/76d2ca41-6326-48eb-881b-4e762c5cdd70/image.png" alt=""></p>
<h3 id="a-기울기-b-절편-업데이트">a (기울기), b (절편) 업데이트</h3>
<h4 id="이제-적절한-a와-b의-값을-찾아나가면-된다">이제 적절한 a와 b의 값을 찾아나가면 된다.</h4>
<ul>
<li>그러기 위해서는 얼마 만큼의 <strong>오차</strong>가 있고 <strong>어떤 방법으로 오차를 줄일지</strong> 정해야한다. </li>
</ul>
<hr>
<h2 id="4-오차-error">4. 오차 (Error)</h2>
<h3 id="cost-fuction-loss-fuction-손실함수">Cost Fuction (Loss Fuction) (손실함수)</h3>
<h4 id="손실-함수는-우리가-예측한-값과-실제-데이터-값의-차이를-알기-위해서-쓰인다"><strong>손실 함수</strong>는 우리가 <strong>예측한 값</strong>과 <strong>실제 데이터 값</strong>의 차이를 알기 위해서 쓰인다.</h4>
<h4 id="1-오차를-구하는-방법">1. 오차를 구하는 방법</h4>
<p>H(x)의 예측 값 (1X + 1)과 실제 데이터 Y의 차이는, 같은 X값에 대해서 각각의 Y값을 서로 빼주면 알 수 있다.</p>
<ul>
<li>Error = Y - (1X + 1)</li>
</ul>
<p>데이터를 보면 키가 160(X)인 사람의 몸무게는 56(Y)이다
H(160) = 160(예측 값) 이다. (a=1, b=1 일 때)
즉 오차는 56 - 160 으로 <strong>-104</strong> 이다.</p>
<h4 id="2-오차가-음수가-나왔다">2. 오차가 음수가 나왔다.</h4>
<p>즉 Y가 (1X + 1)보다 크면 양의 오차, 작으면 음의 오차가 나온다.
양의 오차든 음의 오차든, 오차는 오차이다. 하지만 양의 오차와 음의 오차를 더하면 오차가 없다는 결과가 나온다. 
이 경우를 배제하기 위해서 절댓값을 취해, 모든 오차를 양의 오차로 만들어 준다.</p>
<ul>
<li>Error = | Y - (1X + 1) |</li>
</ul>
<p>이러면 오차는 |56 - 160| 으로 <strong>104</strong> 이다.</p>
<p>+ 하지만 절댓 값을 취하면 구간을 나눠줘야해서 미분하기 어려워지고, 연산 속도가 떨어진다.</p>
<h4 id="3-절댓값-대신-제곱">3. 절댓값 대신 제곱</h4>
<p>절댓값 대신 제곱을 취해주고, (+ 제곱을 취해주면 오차가 커질수록 더 극대화 된다.)</p>
<p>모든 X에 대해서 오차를 구해야 하므로 시그마를 취해준다.</p>
<p>(Y는 실제 데이터 값이고, Y_hat은 H(x)의 예측 값이다.)</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/0afb2269-f810-44f7-91af-e1379fca9f91/image.png" alt=""></p>
<ul>
<li>이것이 SSE Cost Function 이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/d600e18e-4a99-4210-b33f-bcda320d6619/image.png" alt=""></p>
<ul>
<li>단순 합산이 아닌 평균을 취해주면 MSE가 된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/68556ae6-fedf-4ffd-8793-c7d48cb7e2a3/image.png" alt=""></p>
<ul>
<li>MSE에 루트를 취해주면 RMSE가 된다.</li>
</ul>
<h4 id="손실-함수-종류">&lt;손실 함수 종류&gt;</h4>
<ul>
<li>SSE (sum squared error)</li>
<li>MSE(Mean Square Error)</li>
<li>RMSE(Root Mean Squared Error)</li>
<li>Cross-entropy
등</li>
</ul>
<p>이제 오차는 구했고, 어떻게 하면 그 오차를 줄여나갈 수 있을까?</p>
<hr>
<h2 id="5-오차-줄이기-optimizer">5. 오차 줄이기 (Optimizer)</h2>
<h3 id="경사-하강법-gradient-descent">경사 하강법 (Gradient Descent)</h3>
<h4 id="cost-function에서-실제-y-데이터-값과-예측한-y_hat-값의-차이를-구했다면-optimizer는-그-구한-오차를-줄여나가는-법에-대해서-다룬다">Cost Function에서 실제 Y 데이터 값과 예측한 Y_hat 값의 차이를 구했다면, Optimizer는 그 구한 오차를 줄여나가는 법에 대해서 다룬다.</h4>
<ul>
<li>실제 Y 데이터 값은 고정되어있다.</li>
<li>오차는 |Y - H(x)|이기 때문에, 오차를 줄이기 위해서는 H(x) 함수의 aX + b 에서 a와 b의 값을 바꿔주어야한다.
(a, b를 파라미터라고 한다.)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/5af87e77-9109-48b4-99f0-32ecfc1223d3/image.png" alt=""></p>
<ul>
<li>현재 파라미터를 임의로 초기화하여 a = 1, b=1 인 상태이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/48080a01-b508-4377-bc13-49933cb5e253/image.png" alt=""></p>
<ul>
<li>a 값만 1에서 1/2로 바꾸어 보았다. (a = 1/2, b = 1)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/6342b238-7544-4443-add2-286cc0fcd60f/image.png" alt=""></p>
<ul>
<li>이번에는 a 값만 1로 두고 a만 -120으로 바꾸어 보았다. (a = 1, b = -120)</li>
</ul>
<p>a, b값에 따라 Error 값이 확연히 바뀌는 것을 볼 수 있다.</p>
<h4 id="즉-각각의-파라미터-θa-b에-따른-error-그래프를-그려보면">즉 각각의 파라미터 θ(a, b)에 따른 Error 그래프를 그려보면</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/5ce9ba4b-b515-409d-8522-acea219d9cf3/image.png" alt=""></p>
<ul>
<li>b를 1에서 -120으로 바꾸면 Error가 16으로 줄어든다. </li>
<li>최적해를 가지는 Global Optimum (Error = 0)일 때의 θ(a, b) 값을 찾는 것이 목표이다.</li>
<li>최적해를 가질 때의 접선의 기울기 값은 0이다.</li>
</ul>
<h3 id="cost-function의-접선의-기울기">Cost Function의 접선의 기울기</h3>
<h4 id="기울기가-0이-되는-지점의-θa-b를-구하면-된다">기울기가 0이 되는 지점의 θ(a, b)를 구하면 된다.</h4>
<ul>
<li>기울기가 0이 되는 지점을 알기 전에, 기울기를 구하려면 미분을 해야한다. </li>
<li>현재 파라미터는 a와 b 두가지이다.
즉 기울기를 알기 위해서 a와 b에 대해서 각각 편미분을 진행해 기울기를 구하고, Error 값을 최소가 되도록 각각의 a와 b를 Update 하면 된다.</li>
</ul>
<h3 id="편미분---파라미터-θ-a-b를-update하는-방법">편미분 &amp;  파라미터 θ (a, b)를 Update하는 방법</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/7d86e81b-0908-4ef6-a26f-38c8a167c408/image.png" alt=""></p>
<ul>
<li>기존의 θ 에 (η x 편미분 한 값)을 빼준다.
(η: Learning Rate)</li>
</ul>
<p>η: Learning Rate (학습률)</p>
<ul>
<li>보폭을 결정한다. 주로 보폭을 줄이기 위해 0.1 ~ 0.0001 사이의 값을 준다.</li>
<li>θ를 한번 Update할 때 보폭을 정하는 값이라고 생각하면 좋다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/99e7921b-239d-4b6e-9392-02169c91fb8a/image.png" alt=""></p>
<ul>
<li>Learning Rate가 너무 크면 Global Optimum으로 수렴하지 못하고 발산하게 된다.</li>
<li>Learning Rate가 너무 작으면 Global Optimum에 수렴하는데 걸리는 시간이 너무 커져 연산에 있어서도 비효율 적이고, Local Optimum에서 고일 가능성이 있다.</li>
<li>따라서 적당한 값의 Learning Rate의 값을 찾아주어야 한다. </li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/8eb586b7-5868-4805-b433-79a7f704a346/image.png" alt=""></p>
<ul>
<li>이 값이 θ(a) 보다 커지면 기울기는 음수값을 가져 반대방향으로 a를 Update한다.</li>
<li>즉, 여러 Iteration을 거치면 자동으로 기울기는 0으로 수렴하게 된다.</li>
</ul>
<hr>
<h2 id="6-반복-epoch-iteration">6. 반복 Epoch (Iteration)</h2>
<h4 id="머신러닝에서-인공지능-모델을-반복적으로-학습시키는데-이때-학습의-횟수를-epoch에포크라고-한다">머신러닝에서 인공지능 모델을 반복적으로 학습시키는데, 이때 학습의 횟수를 Epoch(에포크)라고 한다.</h4>
<ul>
<li><p>즉 Epoch 만큼 반복해서 model의 파라미터 θ를 Update하는 것이다.</p>
</li>
<li><p>Epoch이 커질 수록 훈련 데이터에 더 잘 근사하게 된다.</p>
</li>
<li><p>하지만 너무 훈련데이터에 Fitting 되어, 일반화 성능이 떨어지는 Over Fitting 문제가 발생할 수도 있다.</p>
<h3 id="overfitting--underfitting과대-과소-적합">OverFitting &amp; UnderFitting(과대, 과소 적합)</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/ea1e0cdf-7534-45d7-97a9-b3ba020ad91e/image.png" alt=""></p>
</li>
<li><p>OverFitting은 학습데이터에 너무 많이 Fitting되어,
새로운 테스트 데이터에 대해 일반화 성능을 내지 못하는 것을 의미한다. </p>
</li>
<li><p>UnderFitting은 학습데이터에 너무 적게 Fitting되어,
새로운 테스트 데이터에 대해 일반화 성능을 내지 못하는 것을 의미한다. </p>
</li>
</ul>
<h4 id="overfitting--underfitting은-다음과-같은-상황에서-발생-가능하다">OverFitting &amp; UnderFitting은 다음과 같은 상황에서 발생 가능하다.</h4>
<h4 id="overfitting">&lt;&lt; OverFitting &gt;&gt;</h4>
<ol>
<li>Epoch를 크게하여 모델을 너무 많이 학습시켰을 때 </li>
<li>데이터에 비해 너무 무거운 모델을 사용하여, 모델 복잡도가 클 때</li>
<li>BatchSize를 너무 작게하여, 작은 Batch 마다 너무 잦은 Update 할 때</li>
</ol>
<h4 id="underfitting">&lt;&lt; UnderFitting &gt;&gt;</h4>
<ol>
<li>모델을 너무 적게 학습 시켰을 때</li>
<li>데이터에 비해 너무 가벼운 모델을 사용하여, 모델 복잡도가 작을 때</li>
<li>학습 데이터의 양이 너무 적을 때</li>
</ol>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] - Regression vs Classification (회귀, 분류)]]></title>
            <link>https://velog.io/@deep-of-machine/ML-Regression-vs-Classification-%ED%9A%8C%EA%B7%80-%EB%B6%84%EB%A5%98</link>
            <guid>https://velog.io/@deep-of-machine/ML-Regression-vs-Classification-%ED%9A%8C%EA%B7%80-%EB%B6%84%EB%A5%98</guid>
            <pubDate>Tue, 08 Nov 2022 16:50:30 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>머신러닝 학습 방법 중 지도학습에서 인공지능이 두 가지 종류의 문제를 해결하는데, <strong>분류와 회귀 분석</strong>을 통한 해결이다.<img src="https://velog.velcdn.com/images/deep-of-machine/post/06c04ba2-6b13-4c37-b899-339917009687/image.png" alt=""></p>
</blockquote>
<h1 id="regression-회귀">Regression (회귀)</h1>
<blockquote>
<p>연속된 값을 예측 하는 것</p>
</blockquote>
<p>독립 변수와 종속 변수 간의 상관 관계가 존재한다. 
회귀 분석은 독립 변수가 종속 변수에 얼마나 영향을 미치는지 알아보고, 이를 통해 응용하며 분석하는 방법이다.</p>
<ul>
<li>독립 변수 : 독립적으로 존재하는 <strong>데이터 변수 X</strong> 를 의미한다. </li>
<li>종속 변수 : 독립 변수가 변함에 따라, <strong>영향을 받아</strong> 같이 변하는 데이터 변수 Y 를 의미한다. </li>
<li>상관관계 : 독립 변수와 종속 변수가 서로(둘 이상) 간의 <strong>얼마나 관련이 있는가</strong>를 의미한다.</li>
</ul>
<p>쉽게 말하면 임의의 변수들이 서로 영향을 미치는데, 이를 가지고 우리가 <strong>원하는 값을  예측</strong>하는 방법이다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/01edbc48-efd2-47d6-9d69-d5a9f3d20792/image.png" alt=""></p>
<p><strong>&lt; 회귀 종류 &gt;</strong>
 <strong>선형 회귀(Linear regression) ...</strong>
 <strong>로지스틱 회귀(Logistic regression) ...</strong>
 <strong>리지 회귀(Ridge regression) ...</strong>
 <strong>라쏘 회귀(Lasso regression) ...</strong>
 <strong>다항 회귀(Polynomial regression) ...</strong></p>
<hr>
<h1 id="classification-분류">Classification (분류)</h1>
<blockquote>
<p>비연속적인 범주형 값을 분류하는 것</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/5544100c-f371-4cd9-a2e6-213990882ebe/image.png" alt=""></p>
<h3 id="binary-classification이진-분류">Binary Classification(이진 분류)</h3>
<ul>
<li>Class가 O, X 와 같이 두가지로 나뉘는 문제를 해결할 때 이진분류가 사용된다.</li>
<li>인공지능 모델의 출력층의 노드 개수가 2개로, 2가지의 결과만 출력한다.</li>
</ul>
<p>예) 위에 사진에서도 알 수 있듯이, 스팸인지 아닌지 분류하는 문제는 &#39;이메일이 스팸이다 아니다&#39; 2가지 클래스 중 하나로 표현되기 때문에 이진분류이다.</p>
<hr>
<h3 id="multi-class-classification-다중-분류">Multi-Class Classification (다중 분류)</h3>
<ul>
<li>Class가 두개가 아닌 여러개인 문제를 해결할 때 다중 분류가 사용된다. </li>
<li>하나의 사진에 하나의 클래스를 부여한다.</li>
<li>인공지능 모델의 출력층의 노드 개수가 여러개로, 여러개 중 하나의 클래스를 출력한다.</li>
</ul>
<p>예) 위에 사진에서도 알 수 있듯이, &#39;개인지 고양이인지 말인지 등 동물의 종류를 분류&#39;하는 문제는 정답 클래스가 어려개 중 하나로 표현되기 때문에 다중 분류이다.</p>
<hr>
<h3 id="multi-label-classification-다중-레이블-분류">Multi-Label Classification (다중 레이블 분류)</h3>
<ul>
<li>하나의 사진에 하나의 클래스를 부여하는 것이 아니라, 하나의 사진에 여러개의 클래스를 부여한다.</li>
<li>한 사진에 여러 종류의 클래스가 있을 때 여러개의 클래스를 동시에 표현한다. </li>
<li>하나의 클래스가 같은 사진에서 두번 나올 수도 있다.</li>
</ul>
<p>예) 위에 사진에서도 알 수 있듯이, 하나의 사진에서 여러개의 클래스가 존재할 때 이를 모두 표현해야하지 때문에 출력층이 여러개이다. 즉 정답 클래스가 어려개 중 해당 되는 것 모두를 표현되기 때문에 다중 레이블 분류이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] - Machine Learning vs  Traditional Programming (Rule-Based)]]></title>
            <link>https://velog.io/@deep-of-machine/ML-Machine-Learning-vs-Traditional-Programming-Rule-Based</link>
            <guid>https://velog.io/@deep-of-machine/ML-Machine-Learning-vs-Traditional-Programming-Rule-Based</guid>
            <pubDate>Mon, 07 Nov 2022 11:47:02 GMT</pubDate>
            <description><![CDATA[<hr>
<p>*<em>우리는 어떠한 문제를 해결하기 위해 프로그램(알고리즘)을 만든다. 
사람들은 그 프로그램이 최고의 성능을 내도록 하기 위해서, 백준과 같은 사이트에서 알고리즘 문제를 풀곤 한다.
*</em></p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/38a62e20-3d84-41fa-a498-455bb29561ce/image.png" alt=""></p>
<blockquote>
<p>전통적인 프로그래밍과 머신러닝은 서로 방식은 다르지만 두 가지 모두 프로그램(알고리즘)을 만드는 것을 목표로 한다.
그래서 전통적인 프로그래밍과 머신러닝이 어떤 방식의 차이가 있는지  알아볼 것이다.</p>
</blockquote>
<hr>
<h1 id="traditional-programming">Traditional Programming</h1>
<h2 id="rule-based-규칙-기반-프로그래밍">Rule-Based (규칙 기반 프로그래밍)</h2>
<blockquote>
<p>어떠한 문제를 해결하기 위해, 사람이 데이터를 가지고 이를 어떻게 활용하면 좋은 결과 값(정답, 타깃)이 나올지 생각한다. 그리고 그 생각을 가지고 프로그램(알고리즘)을 구현한다.</p>
</blockquote>
<p>흔히 백준 사이트에서 문제를 푸는 것과 같다. </p>
<p>예를 들어 소수 판별 프로그램을 만든다고 생각해보자!</p>
<ul>
<li>소수 찾기 프로그램에서 주어진 <strong>데이터(정보)</strong>는 숫자(1,2,3,4,5....)이다. </li>
<li><strong>결과 값(정답, 타깃)</strong>은 2,3,5,7,11.... 등이 소수라는 것이고, 그 이외에는 소수가 아니라는 것이다.</li>
</ul>
<p>이를 가지고 사람이 직접 소수를 판별하는 규칙을 구상하여 알고리즘을 생각해 구현해낸다. </p>
<hr>
<h1 id="artificial-intelligence">Artificial Intelligence</h1>
<h2 id="machine-learning-기계-학습">Machine Learning (기계 학습)</h2>
<blockquote>
<p>어떠한 문제를 해결하기 위해, 인공지능에게 데이터와 결과 값(정답, 타깃)을 주면 두 값의 상관 관계를 분석해서 스스로 알고리즘을 만든다.</p>
</blockquote>
<p>예를 들어 비행기인지 자동차인지 판별하는 프로그램을 만든다고 하자!</p>
<ul>
<li>사진 이미지 파일은 <strong>데이터</strong>이다.</li>
<li>그 사진이 어떤 사진인지 알려주는 이름은 <strong>정답(타깃, 레이블)</strong>이 된다.</li>
</ul>
<p>머신러닝은 데이터와 정답을 알려주면 이를 기반으로 스스로 프로그램(알고리즘)을 만들어 낸다.</p>
<hr>
<h1 id="traditional-programming-machine-learning-차이">Traditional Programming, Machine Learning 차이</h1>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/dd6db8bc-95a3-40a0-988b-296299363772/image.png" alt=""></p>
<blockquote>
<p>전통적인 프로그램은 데이터와 알고리즘을 주면 결과를 내는 것이고,
머신러닝은 데이터와 결과를 주면 알고리즘을 내는 것이다.</p>
</blockquote>
<p>예를 들어 개와 고양이를 구분하는 프로그램(알고리즘)을 만들고 싶다고 하자!</p>
<p>어떻게 개와 고양이를 구분하는 프로그램을 만들 수 있을까?</p>
<ul>
<li><p>전통적인 프로그래밍에서는 개의 특징과 고양이의 특징을 가지고 조건문을 만들어 분류할 것이다.</p>
</li>
<li><p>머신러닝에서는 개와 고양이라는 레이블(정답, 타깃)과 사진 데이터를 주어 스스로 학습해서 알고리즘을 만들어 내도록 할 것이다.</p>
</li>
</ul>
<hr>
<p>&lt;&lt; 전통적인 프로그래밍에서는 &gt;&gt; </p>
<ul>
<li>다리가 4개 있고 꼬리가 길고 기어다니는 동물을 강아지라고 프로그래밍했고,</li>
<li>다리가 4개 있고 꼬리가 짧고 기어다니는 동물을 고양이라고 프로그래밍 했다고 가정하자.</li>
</ul>
<p>이때 만약 불의의 사고로 꼬리가 짧아졌거나, 애초에 태생부터 꼬리가 짧은 강아지인 경우에는 강아지가 아닌 고양이라고 판별할 것이다.
즉, 전통적인 프로그래밍에서는 예외적인 범용적인 상황에서는 좋은 성능을 낼 수 없다.</p>
<hr>
<p>&lt;&lt; 머신러닝에서는 &gt;&gt;</p>
<ul>
<li>수 많은 고양이와 강아지 사진을 주고 인공지능 모델이 스스로 학습하게 했다고 하자.</li>
</ul>
<p>사람이 프로그래밍을 하는 것이 아니기에, 어떻게 인공지능이 고양이와 강아지를 구분짓는지 우리는 알 수 없다. 인공지능 모델이 스스로 어떠한 특징이 두 클래스를 구분짓는데 중요한지를 학습하기 때문이다. 이것을 <strong>블랙박스</strong>라고 한다. </p>
<p>일일히 모든 조건을 만들기 어렵고 어떤 특징이 중요한지 잘 모르는 문제에 있어서는 머신러닝이 훨씬 좋다. 하지만 데이터가 너무 적고 단순한 문제는 전통적인 프로그래밍이 더 좋다. 
(좋다 나쁘다는 정확도와 프로그램의 가벼움 기준)</p>
<p>또한 머신러닝은 많은 데이터를 주면 줄수록 다양한 특징 모두 고려할 수 있다.</p>
<p>이때 만약 불의의 사고로 꼬리가 짧아졌거나, 애초에 태생부터 꼬리가 짧은 강아지인 경우에도 인공지능은 두가지 클래스를 잘 판별할 것이다. </p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Open Source Software] - Git (VSC, Git, Github)]]></title>
            <link>https://velog.io/@deep-of-machine/Open-Source-Software-Git-VSC-Git-Github</link>
            <guid>https://velog.io/@deep-of-machine/Open-Source-Software-Git-VSC-Git-Github</guid>
            <pubDate>Thu, 27 Oct 2022 23:54:34 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="vcsversion-control-system">VCS(Version Control System)</h1>
<h3 id="버전-관리-시스템의-필요성">버전 관리 시스템의 필요성</h3>
<ul>
<li>인원이 많을 수록 프로젝트 기간이 길어질수록 최종 업데이트 파일을 확인하기 어려워진다
<img src="https://velog.velcdn.com/images/deep-of-machine/post/e513a11f-724a-4d8c-98d6-6b8d70188e62/image.png" alt=""></li>
</ul>
<hr>
<h3 id="로컬-버전-관리-vcs">로컬 버전 관리 (VCS)</h3>
<ul>
<li>Patch set (파일 변경 부분) 관리 - 모든 파일을 특정 시점으로 되돌릴 수 있음
<img src="https://velog.velcdn.com/images/deep-of-machine/post/3a0b0295-aaad-47ae-b34d-9de9e5f8f500/image.png" alt=""></li>
</ul>
<hr>
<h3 id="중앙-집중식-버전-관리-cvcs-centralized-version-control-system">중앙 집중식 버전 관리 (CVCS, Centralized Version Control System)</h3>
<ul>
<li>파일 관리 서버 존재 - 클라이언트가 중앙 서버에서 파일을 받아 사용</li>
<li>서버에 문제가 발생했을 때 복구가 힘들고, 작업 재개에 오랜 시간이 소요 됨</li>
<li>오프라인 상태에서 작업하기 힘듦
<img src="https://velog.velcdn.com/images/deep-of-machine/post/5d60d904-7d7c-4ab8-815b-0ef1b969d94c/image.png" alt=""></li>
</ul>
<hr>
<h3 id="분산-버전-관리-dvcs-distributed-version-control-system">분산 버전 관리 (DVCS, Distributed Version Control System)</h3>
<ul>
<li>서버 뿐만 아니라 개발자들도 History를 보관</li>
<li>저장소를 History와 더불어 전부 복제 - Remote Repository(원격 저장소) 존재</li>
<li>CVCS 단점 보완</li>
<li>Git, Mercurial, Darcs 등
<img src="https://velog.velcdn.com/images/deep-of-machine/post/cc221132-ebd1-4522-b0cf-7418cd439ab4/image.png" alt=""></li>
</ul>
<h4 id="git과-기존-cvs의-차이">Git과 기존 CVS의 차이</h4>
<ul>
<li>기존 CVS의 경우 델타 베이스로 구성 (변경된 내용만 보관)</li>
<li>Git은 프로젝트 전체 내용을 스냅 샷으로 보관</li>
<li>각각의 스냅 샷은 변경되지 않은 파일에 대한 예전 링크를 가진다. (가볍고 빠르다)</li>
</ul>
<hr>
<h1 id="git">Git</h1>
<h4 id="여러-개발-pc와-저장소에-분산해서-저장">여러 개발 PC와 저장소에 분산해서 저장</h4>
<h4 id="컴퓨터에-있는-대부분의-파일을-git으로-관리하는-것이-가능">컴퓨터에 있는 대부분의 파일을 Git으로 관리하는 것이 가능</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/50cd86b1-a0d9-4576-bd9e-a6bf29e3841b/image.png" alt=""></p>
<h3 id="특징">특징</h3>
<ul>
<li>코드를 저장하거나 저장 시점으로 되돌아 갈 수 있게 해주는 시스템</li>
<li>가장 많이 사용</li>
<li>무료/ 오픈소스</li>
<li>빠르며 오프라인 작업 가능</li>
<li>실수 고치기 쉬움</li>
<li>쉽고 빠른 브랜치를 이용해서 각각의 기능별로 브랜치를 만들어 효율적인 협업이 가능</li>
<li>무엇보다 개인의 포트폴리오를 관리할 수 있음 (자기 PR)</li>
</ul>
<hr>
<h2 id="git-설치">Git 설치</h2>
<h4 id="-linux">// Linux</h4>
<pre><code>~$ sudo apt update
~$ sudo apt install git
~$ git</code></pre><h4 id="-windows">// Windows</h4>
<p>-&gt; <a href="https://git-scm.com/downloads">다운로드</a></p>
<hr>
<h3 id="스테이징-staging">스테이징 (Staging)</h3>
<ul>
<li>작업 디렉터리(Working Directory)의 파일을 스테이지 영역으로 전달 (Index)</li>
<li>커밋할 파일들을 선택해서 모아두는 장소 (Stage Area)</li>
<li>“git add” 명령 사용</li>
</ul>
<h3 id="커밋-commit">커밋 (Commit)</h3>
<ul>
<li>“소프트웨어 버전“ 또는 “버전 만들기&quot;로 이해</li>
<li>스테이지 영역의 파일을 로컬 저장소(.git)으로 전달</li>
<li>파일의 이력 (내용, 이유 등)을 추적하기 쉽도록 상세 설명을 추가할 수 있다</li>
<li>현재 커밋을 가리키는 HEAD 생성</li>
<li>“git commit” 명령 사용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/a5392b3d-042c-4f68-bfdf-d21deae6fff4/image.png" alt=""></p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Open Source Software] - 가상화 (Hypervisor, Linux Container, Docker)]]></title>
            <link>https://velog.io/@deep-of-machine/Open-Source-Software-%EA%B0%80%EC%83%81%ED%99%94-Hypervisor-Linux-Container-Docker</link>
            <guid>https://velog.io/@deep-of-machine/Open-Source-Software-%EA%B0%80%EC%83%81%ED%99%94-Hypervisor-Linux-Container-Docker</guid>
            <pubDate>Thu, 27 Oct 2022 22:54:17 GMT</pubDate>
            <description><![CDATA[<h1 id="가상화-virtualization">가상화 (Virtualization)</h1>
<blockquote>
<p>단일한 물리 하드웨어 시스템에서 여러 시뮬레이션 환경이나 전용 리소스를 생성할 수 있는 기술</p>
</blockquote>
<ul>
<li>사용자 또는 환경에 기능을 분산하여 물리적 시스템의 전체 용량을 사용
<img src="https://velog.velcdn.com/images/deep-of-machine/post/43dd538a-3225-4a56-a4ae-500b71461af4/image.png" alt=""></li>
<li>하나의 서버에 단일 운영체제와 개별 작업을 실행하는 것이 더 쉽고, 안정적이지만 각 서버는 잠재적인 용량의 일부에 불과한 약 30%를 사용</li>
<li>가상화를 사용하면 서버를 독립적인 작업으로 처리할 수 있는 2개의 고유한 서버로 분할하여 레거시 앱을 마이그레이션 할 수 있음</li>
<li>즉, 동일한 하드웨어이지만 더 많은 것을 더 효율적으로 사용</li>
</ul>
<h4 id="가상화-등장-배경">가상화 등장 배경</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/7225e921-94b3-4ce6-8a62-6ac09091c43d/image.png" alt=""> </p>
<hr>
<h2 id="1-하이퍼바이저-hypervisor">1. 하이퍼바이저 (Hypervisor)</h2>
<blockquote>
<p>Virtual Machine Monitor (VMM)라고도 하는 하이퍼바이저는 가상 머신(VM)을 생성하고 실행하는 소프트웨어 </p>
</blockquote>
<ul>
<li>메모리나 프로세싱과 같은 리소스를 가상으로 공유하여 하나의 호스트 컴퓨터에서 여러 게스트 가상머신(VM)을 지원
<img src="https://velog.velcdn.com/images/deep-of-machine/post/d350f412-3a2a-476a-a161-b86e9c649518/image.png" alt=""><h3 id="type-1---hypervisor-bare-metal">Type 1 - Hypervisor (Bare-metal)</h3>
</li>
<li>경량의 운영 체제처럼 작동하며 호스트의 하드웨어에서 직접 실행</li>
<li>공격을 받기 쉬운 운영 체제와 격리되어 있기 때문에 매우 안전</li>
<li>성능이 더 좋고 효율적</li>
<li>대부분의 기업은 데이터 센터 컴퓨팅 요구 사항을 위해 베어메탈 하이퍼바이저를 선택</li>
</ul>
<h3 id="type-2---hypervisor-hosted">Type 2 - HyperVisor (Hosted)</h3>
<ul>
<li>다른 컴퓨터 프로그램처럼 운영 체제에서 소프트웨어 계층으로 실행</li>
<li>호스트 시스템의 운영 체제(OS) 위에서 실행되며, 하이퍼바이저 위에 추가(및 다른) 운영 체제를 설치</li>
<li>대기 시간이 길다 (하드웨어와 하이퍼바이저 간의 통신은 OS 계층을 통과하기 때문)</li>
<li>대기 시간이 문제가 되지 않는 최종 사용자 및 소프트웨어 테스트에 가장 자주 사용(클라이언트 하이 퍼바이저라고도 함)</li>
</ul>
<p>하드웨어 가속 기술은 베어 메탈 및 호스팅된 하이퍼바이저 모두의 처리 속도를 높이고,
가상 리소스를 더 빠르게 생성 및 관리</p>
<hr>
<h2 id="2-리눅스-컨테이너-linux-container">2. 리눅스 컨테이너 (Linux Container)</h2>
<blockquote>
<p>운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/3359998f-c323-4294-a980-ff2672338c6f/image.png" alt=""></p>
<ul>
<li>애플리케이션 실행 환경을 컨테이너라는 단위로 가상화</li>
<li>컨테이너의 기반이 되는 이미지를 효율적으로 만드는(빌드) 기능</li>
<li>이미지를 배포하기 위한 구조 (Docker Hub와 같은 저장소 서비스)를 제공</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/f2879512-f2fc-4366-b8c7-6a53e80d4a78/image.png" alt=""></p>
<hr>
<h1 id="가상화-관련-오픈-소스">가상화 관련 오픈 소스</h1>
<h2 id="임베디드-가상화">임베디드 가상화</h2>
<h3 id="automotive">Automotive</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/a225f28a-1bbe-4258-953a-40410b0e1291/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/b101a8b4-4683-482d-b4cc-3606aab87f7b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/9378ac7f-9a39-4e89-917a-374ab7df0505/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/641ae38f-c83b-4ffa-94da-e9495c3724c1/image.png" alt=""></p>
<h3 id="edge-device--container">Edge Device &amp; Container</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/9309664e-3a37-40e2-a9e4-f44be9c672df/image.png" alt=""></p>
<h3 id="edge-computing--k8s">Edge Computing &amp; K8s</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/40da4a71-9348-472b-912c-cb257f5ff17c/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Open Source Software] - 웹 (HTML, XML, CGI, PHP + 스레드와 프로세스)]]></title>
            <link>https://velog.io/@deep-of-machine/Open-Source-Software-%EC%9B%B9-HTML-XML-CGI-PHP-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%99%80-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4</link>
            <guid>https://velog.io/@deep-of-machine/Open-Source-Software-%EC%9B%B9-HTML-XML-CGI-PHP-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%99%80-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4</guid>
            <pubDate>Thu, 27 Oct 2022 19:26:21 GMT</pubDate>
            <description><![CDATA[<h1 id="1-웹-www">1. 웹 (www)</h1>
<h2 id="www-world-wide-web">www (World Wide Web)</h2>
<blockquote>
<p> 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말한다.</p>
</blockquote>
<h2 id="하이퍼-텍스트-ht">하이퍼 텍스트 (HT)</h2>
<blockquote>
<p>기존의 책과 같은 선형적인 텍스트가 아니라, 월드 와이드 웹에서 사용되는 하이퍼링크와 하이퍼텍스트를 통해서 이어지는 비선형적인 텍스트가 신개념이라는 의미에서 만들어진 용어이다. 
HTML의 HT가 HyperText의 줄임말이다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/6fc69f3f-b2c5-46d9-9736-b4aa41d0f70d/image.png" alt=""></p>
<hr>
<h2 id="웹-표준-기구">웹 표준 기구</h2>
<h3 id="w3c-world-wide-web-consortium">W3C (World Wide Web Consortium)</h3>
<blockquote>
<p> 월드 와이드 웹을 위한 표준을 개발하고 장려하는 조직</p>
</blockquote>
<h3 id="w3c-표준">W3C 표준</h3>
<h4 id="종류">종류</h4>
<ul>
<li>CGI</li>
<li>DOM</li>
<li>HTML</li>
<li>CSS</li>
<li>RDF</li>
<li>SVG</li>
<li>XML</li>
<li>XPath</li>
<li>XQuery
등</li>
</ul>
<h3 id="html과-xml의-차이">HTML과 XML의 차이?</h3>
<h4 id="html-hyper-text-markup-language">HTML (Hyper Text Markup Language)</h4>
<h4 id="--웹-페이지-및-웹-응용-프로그램의-구조를-만들기-위한-표준-마크업-언어">- 웹 페이지 및 웹 응용 프로그램의 구조를 만들기 위한 표준 마크업 언어</h4>
<h4 id="xml-extensible-markup-language">XML (eXtensible Markup Language)</h4>
<h4 id="--사람과-기계가-읽을-수-있는-형식으로-문서를-인코딩하기-위한-규칙-집합을-정의하는-마크업-언어">- 사람과 기계가 읽을 수 있는 형식으로 문서를 인코딩하기 위한 규칙 집합을 정의하는 마크업 언어</h4>
<h4 id="대소문자-구분">&lt; 대소문자 구분 &gt;</h4>
<ul>
<li>HTML <strong>대소문자 구분 X</strong></li>
<li>XML <strong>대소문자 구분 O</strong><h4 id="태그">&lt; 태그 &gt;</h4>
</li>
<li>HTML <strong>미리 정의된 태그</strong> 존재</li>
<li>XML 프로그래머가 <strong>자신만의 태그</strong> 집합 정의</li>
</ul>
<h4 id="태그-닫기">&lt; 태그 닫기 &gt;</h4>
<ul>
<li>HTML <strong>일부</strong> 태그에는 <strong>닫는 태그 없음</strong></li>
<li>XML 사용된 각 <strong>태그를 닫아야 함</strong><h4 id="주요-초점">&lt; 주요 초점 &gt;</h4>
</li>
<li>HTML <strong>데이터 표시</strong>에 중점</li>
<li>XML <strong>정보 전달</strong>에 초점</li>
</ul>
<h4 id="용법">&lt; 용법 &gt;</h4>
<ul>
<li>HTML <strong>웹 페이지 구조를 개발하는데 사용</strong></li>
<li>XML <strong>다양한 플랫폼 간에 데이터 교환에 사용</strong></li>
</ul>
<h4 id="결론">결론</h4>
<blockquote>
<p>HTML, XML 둘 다 마크업 언어 (계산을 사용하지 않으므로 프로그래밍 언어는 아님!)
마크업 언어는 태그를 사용하여 문서 내의 요소를 정의하는 컴퓨터 언어
HTML은 웹 페이지의 구조를 개발하는데 사용되는 하이퍼 텍스트 마크업 언어
XML은 플랫폼 간 데이터를 교환하는데 사용되는 확장 가능한 마크업 언어</p>
</blockquote>
<hr>
<h2 id="웹-외부-연동-기술">웹 외부 연동 기술</h2>
<h3 id="cgi-common-gateway-interface">CGI (Common Gateway Interface)</h3>
<h4 id="웹-서버가-보통-cgi-프로그램-혹은-cgi-스크립트라고-부르는-웹-페이지-내용을-만드는-외부-프로그램과-통신하는-방법을-정의">웹 서버가 보통 CGI 프로그램 혹은 CGI 스크립트라고 부르는, (웹 페이지 내용을 만드는) 외부 프로그램과 통신하는 방법을 정의</h4>
<ul>
<li>웹 사이트에서 동적인 페이지를 만드는 가장 흔하고 간단한 방법
<img src="https://velog.velcdn.com/images/deep-of-machine/post/b31de19b-9154-4a5b-85d5-7a68e99eac86/image.png" alt=""></li>
</ul>
<h3 id="php-personal-home-page-tools---hypertext-preprocessor">PHP (Personal Home Page Tools -&gt; Hypertext Preprocessor)</h3>
<h4 id="프로그래밍-언어의-일종으로-동적-페이지를-만들기-위해-설계됨">프로그래밍 언어의 일종으로 동적 페이지를 만들기 위해 설계됨</h4>
<ul>
<li>PHP로 작성된 코드를 HTML 소스 문서 안에 넣으면,
PHP 처리 기능이 있는 웹 서버에서 해당 코드를 인식하여 작성자가 원하는 웹 페이지를 생성한다.
<img src="https://velog.velcdn.com/images/deep-of-machine/post/4a742860-010a-4a23-a189-7b8c78c70165/image.png" alt=""></li>
</ul>
<h3 id="php-vs-cgi-jsp-asp-차이">PHP vs CGI, +(JSP, ASP) 차이</h3>
<h4 id="cgi는-호출될-때마다-process를-생성한다">CGI는 호출될 때마다 Process를 생성한다.</h4>
<ul>
<li>Web Page 호출이 100건 들어오면 100개의 Process가 생성되었다가 소멸된다. 그러나 PHP는 한 개의 Process로 운영된다. Web Page 호출이 100 건이 들어오더라도 하나의 PHP Process가 그 안에서 접속을 처리한다.</li>
</ul>
<ul>
<li>접속자 수가 많아지면 CGI는 System resource를 많이 사용하게 되는 반면, PHP는 system resource를 적게 사용한다. </li>
</ul>
<ul>
<li>CGI의 리소스 문제를 해결하기 위해 나온 기술이 PHP, ASP, JSP</li>
</ul>
<ul>
<li>PHP는 CGI보다 안정적이고, 속도와 최적화에 큰 장점이 있는 언어이기 때문에 JSP, ASP보다 속도 면에서 더욱 뛰어나다. </li>
</ul>
<ul>
<li>PHP는 JSP, ASP보다 사용자가 많을 때 불안정 하지만 속도가 빠르기 때문에 개인 홈페이지에서 많이 사용된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/f1f1a07b-181b-4bc6-9904-67ec546bc267/image.png" alt=""></p>
<ul>
<li><strong>CGI: Process 방식</strong> / <strong>PHP: Thread 방식</strong></li>
</ul>
<hr>
<h2 id="스레드와-프로세스thread-process">스레드와 프로세스(Thread, Process)</h2>
<h3 id="프로그램-vs-프로세스-vs-스레드">프로그램 vs 프로세스 vs 스레드</h3>
<h3 id="1-프로그램-program">1. 프로그램 (Program)</h3>
<ul>
<li>작업을 수행할 수 있는 파일<h3 id="2-프로세스-process">2. 프로세스 (Process)</h3>
<h4 id="메모리에-적재되어-실행되고-있는-프로그램의-인스턴스-독립적인-개체">메모리에 적재되어 실행되고 있는 프로그램의 인스턴스 (독립적인 개체)</h4>
</li>
<li>연속적으로 실행되고 있는 컴퓨터 프로그램</li>
<li>운영체제에서 자원을 할당 받는 작업의 단위</li>
<li>동적인 개념으로 실행된 프로그램을 의미</li>
<li>프로세스는 최소 1개의 스레드(메인 스레드)를 가진다. </li>
<li>할당 받는 시스템 자원 
예) CPU, 주소 공간, (code, data, heap, stack)으로 구성되는 메모리 영역</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/0d98f227-581e-4cad-8ee5-025ad82de5df/image.png" alt=""></p>
<ul>
<li>각 프로세스는 서로 별도의 주소 공간에서 실행되며, 
다른 프로세스의 변수나 자료구조에 접근하기 위해서는 프로세스 간 통신 (IPC)을 이용한다.</li>
</ul>
<h3 id="3-스레드-thread">3. 스레드 (Thread)</h3>
<h4 id="프로세스-내에서-실행되는-흐름의-단위로-할당받은-자원을-공유">프로세스 내에서 실행되는 흐름의 단위로 할당받은 자원을 공유</h4>
<ul>
<li>프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. </li>
<li>반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다. </li>
<li>각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.</li>
<li>한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다. </li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/360bbd5e-663a-4f7f-80b7-3050143f0b93/image.png" alt=""></p>
<hr>
<h3 id="멀티-프로세스-vs-멀티-스레드">멀티 프로세스 vs 멀티 스레드</h3>
<h3 id="1-멀티-프로세싱">1. 멀티 프로세싱</h3>
<h4 id="하나의-응용프로그램을-여러개의-프로세스로-구성하여-각-프로세스가-하나의-작업task을-처리">하나의 응용프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업(Task)을 처리</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/e5a6392a-e78d-4862-a4c8-db22a58485c5/image.png" alt=""></p>
<h4 id="멀티-프로세싱-장점">&lt; 멀티 프로세싱 장점 &gt;</h4>
<ul>
<li>여러개의 자식 프로세스 중 하나만 문제가 발생하면, 
그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.<h4 id="멀티-프로세싱-단점">&lt; 멀티 프로세싱 단점 &gt;</h4>
</li>
<li>Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등 오버헤드가 발생하게 된다. </li>
<li>프로세스는 각각의 독립된 메모리 영역을 할당 받기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching가 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 함</li>
<li>프로세스 사이의 어렵고 복잡한 통신기법 (IPC)
프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에, 하나의 프로그램에 속하는 다른 프로세스들 사이의 변수를 공유할 수 없다. </li>
</ul>
<p><strong>+ 참고) Context Switching이란?</strong>
-&gt; CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는데, 이 과정을 Context Switching이라 한다. </p>
<p>구체적으로, </p>
<ol>
<li>동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, </li>
<li>대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업</li>
</ol>
<h3 id="2-멀티-스레딩">2. 멀티 스레딩</h3>
<h4 id="하나의-응용프로그램을-여러-개의-스레드로-구성하고-각-스레드로-부터-하나의-작업을-처리하도록-하는-것">하나의 응용프로그램을 여러 개의 스레드로 구성하고, 각 스레드로 부터 하나의 작업을 처리하도록 하는 것</h4>
<ul>
<li>윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만, 멀티 스레딩을 기본으로 함 </li>
<li>웹 서버는 대표적인 멀티 스레드 응용프로그램</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/578190b7-c3ab-43af-a996-410c8ffa9d5a/image.png" alt=""></p>
<h4 id="멀티-스레딩-장점">&lt; 멀티 스레딩 장점 &gt;</h4>
<ul>
<li>시스템 자원 소모 감소 (자원의 효율성 증대)</li>
<li>프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어, 자원을 효율적으로 관리 가능</li>
<li>스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어듬</li>
<li>스레드 사이의 작업량이 작아 Context Switching이 빠름</li>
<li>간단한 통신 방법으로 인한 프로그램 응답 시간 단축
스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적음<h4 id="멀티-스레딩-단점">&lt; 멀티 스레딩 단점 &gt;</h4>
</li>
<li>주의 깊은 설계가 필요</li>
<li>디버깅이 까다로움</li>
<li>단일 프로세스 시스템의 경우에 효과를 기대하기 어려움</li>
<li>다른 프로세스에서 스레드를 제어할 수 없음 (= 프로세스 밖에서 스레드 각각을 제어 할 수 없음)</li>
<li>자원 공유릐 문제 발생 (동기화 문제)</li>
<li>하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음</li>
</ul>
<hr>
<h2 id="웹-프로그래밍-언어">웹 프로그래밍 언어</h2>
<h3 id="javascript">JavaScript</h3>
<h4 id="객체-기반의-스크립트-프로그래밍-언어">객체 기반의 스크립트 프로그래밍 언어</h4>
<ul>
<li>웹 브라우저 내에서 주로 사용</li>
<li>다른 응용 프로그램의 내장 객체에도 접근 가능</li>
<li>사용자 언터렉트 동작 기능을 구현할 때 주로 사용</li>
<li>탈 웹화의 가속화 (다른 분야에서도 사용, V8 엔진 공개)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/bee9e44c-b2a0-4e47-8c57-783bbdafa110/image.png" alt=""> </p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/cd3765a9-83fa-44b5-8ad8-03deef8ab6b1/image.png" alt=""></p>
<hr>
<h1 id="2-웹-관련-오픈소스">2. 웹 관련 오픈소스</h1>
<h2 id="웹-서버">웹 서버</h2>
<h3 id="ncsa-httpd">NCSA HTTPd</h3>
<h3 id="apache-http-sever">Apache HTTP Sever</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/3680ecb5-8a5b-4bc0-823a-def4c218d2b8/image.png" alt=""></p>
<h3 id="nginx">Nginx</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/ce38eedf-8f51-4947-bfc7-71ca0fce463c/image.png" alt=""></p>
<h3 id="nginx-vs-apache">Nginx vs Apache</h3>
<p><a href="https://velog.io/@ksso730/Nginx-Apache-%EB%B9%84%EA%B5%90"><em>Nginx, Apache 비교 사이트 바로가기</em></a></p>
<h2 id="스크립트-언어">스크립트 언어</h2>
<h3 id="javascript-1">JavaScript</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/38950e22-e8a3-42b6-b867-fb90874598d5/image.png" alt=""></p>
<h3 id="python">Python</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/2c82eea2-c1af-431b-8dc9-db325d997ffc/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Open Source Software] - 인터넷,  네트워크 (OSI 7 Layer, TCP/ IP, Topology)]]></title>
            <link>https://velog.io/@deep-of-machine/Open-Source-Software-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-Internet-Network</link>
            <guid>https://velog.io/@deep-of-machine/Open-Source-Software-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-Internet-Network</guid>
            <pubDate>Thu, 27 Oct 2022 16:39:59 GMT</pubDate>
            <description><![CDATA[<h1 id="1-인터넷-internet">1. 인터넷 (Internet)</h1>
<blockquote>
<p> 컴퓨터로 연결하여 TCP/IP(Transmission Control Protocol/Internet Protocol)라는 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크이다.</p>
</blockquote>
<ul>
<li>Inter : ~ 사이에</li>
<li>Net : 그물</li>
</ul>
<p><strong>- Inter + Net = Internet (컴퓨터 사이에 형성되는 그물망)</strong>
<img src="https://velog.velcdn.com/images/deep-of-machine/post/56368c05-b56c-4884-8272-21300db72e7b/image.png" alt=""></p>
<ul>
<li>Visualization of Internet routing paths</li>
</ul>
<hr>
<h1 id="2-컴퓨터-네트워크-computer-network">2. 컴퓨터 네트워크 (Computer Network)</h1>
<blockquote>
<p> 노드들이 자원을 공유할 수 있게 하는 디지털 전기통신망의 하나이다. 
즉, 분산되어 있는 컴퓨터를 통신망으로 연결한 것을 말한다.</p>
</blockquote>
<ul>
<li>서로 다른 네트워크를 연결할 때 라우터(Router) 장비가 필요
<img src="https://velog.velcdn.com/images/deep-of-machine/post/846b22c2-a5bd-42aa-a8fd-9982ba2e9e36/image.png" alt=""></li>
</ul>
<hr>
<h2 id="네트워크-토폴로지-topology">네트워크 토폴로지 (Topology)</h2>
<blockquote>
<p> 컴퓨터 네트워크의 요소들(링크, 노드 등)을 물리적으로 연결해 놓은 것, 또는 그 연결 방식을 말한다.</p>
</blockquote>
<h3 id="네트워크-토폴로지-종류">네트워크 토폴로지 종류</h3>
<ul>
<li>버스 토폴로지</li>
<li>스타 토폴로지</li>
<li>링 토폴로지</li>
<li>트리 토폴로지</li>
<li>메시 토폴로지(Mesh topology)
  -&gt; 완전 메시형(Fully connected mesh topology) 
  -&gt; 부분 메시형(Partially connected mesh topology)</li>
</ul>
<h3 id="네트워크-토폴로지-분류">네트워크 토폴로지 분류</h3>
<ul>
<li>물리적 토폴로지</li>
<li>신호 토폴로지</li>
<li>논리적 토폴로지</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/2031344c-5ca7-4dcc-841d-b4fb80e8510d/image.png" alt=""></p>
<ul>
<li>Many Different type of Topology</li>
</ul>
<hr>
<h2 id="네트워크-계층-모델">네트워크 계층 모델</h2>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/034d7ec1-a065-4acd-ba2c-7dedfda70072/image.png" alt=""></p>
<h2 id="osi-7-계층">OSI 7 계층</h2>
<blockquote>
<p> ** 국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. **</p>
<blockquote>
</blockquote>
</blockquote>
<h3 id="layer-1---물리-계층">Layer 1 - 물리 계층</h3>
<p>전선, 전파, 광섬유, 동축케이블, 도파관, PSTN, 리피터, DSU, CSU, 모뎀</p>
<h3 id="layer-2---데이터-링크-계층">Layer 2 - 데이터 링크 계층</h3>
<p>이더넷, 토큰링, PPP, HDLC, 프레임 릴레이, ISDN, ATM, 무선랜, FDDI</p>
<h3 id="layer-3---네트워크-계층">Layer 3 - 네트워크 계층</h3>
<p>IP, ICMP, IGMP, X.25, CLNP, ARP, RARP, BGP, OSPF, RIP, IPX, DDP</p>
<h3 id="layer-4---전송-계층">Layer 4 - 전송 계층</h3>
<p>TCP, UDP, RTP, SCTP, SPX, 애플토크</p>
<h3 id="layer-5---세션-계층">Layer 5 - 세션 계층</h3>
<p>TLS, SSL, ISO 8327 / CCITT X.225, RPC, 넷바이오스, 애플토크</p>
<h3 id="layer-6---표현-계층">Layer 6 - 표현 계층</h3>
<p>XDR, ASN.1, SMB, AFP</p>
<h3 id="layer-7---응용-계층">Layer 7 - 응용 계층</h3>
<p>HTTP, SMTP, SNMP, FTP, 텔넷, SSH &amp; Scp, NFS, RTSP</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/ef9de63d-0058-460e-a0b4-53f92cc3899c/image.png" alt=""></p>
<h2 id="tcpip-계층">TCP/IP 계층</h2>
<blockquote>
<p> <strong>인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다. 인터넷 프로토콜 슈트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 슈트라고도 불린다.</strong></p>
<blockquote>
</blockquote>
</blockquote>
<h3 id="layer-1---네트워크-엑세스-계층">Layer 1 - 네트워크 엑세스 계층</h3>
<p>이더넷, Wi-Fi, 토큰링, PPP, SLIP, FDDI, ATM, 프레임 릴레이, SMDS</p>
<h3 id="layer-2---인터넷-계층">Layer 2 - 인터넷 계층</h3>
<p>IP (IPv4, IPv6)</p>
<h3 id="layer-3---전송-계층">Layer 3 - 전송 계층</h3>
<p>TCP, UDP, DCCP, SCTP, IL, RUDP</p>
<h3 id="layer-4---응용-계층">Layer 4 - 응용 계층</h3>
<p>DNS, TFTP, TLS/SSL, FTP, HTTP, IMAP, IRC, NNTP, POP3, SIP, SMTP, SNMP, SSH, 텔넷, ECHO, 비트토렌트, RTP, PNRP, rlogin, ENRP</p>
<h3 id="네트워크를-계층화-하는-이유">네트워크를 계층화 하는 이유?</h3>
<h4 id="네트워크-계층화-장점">네트워크 계층화 장점</h4>
<ul>
<li>네트워크의 각 기능들의 독립성을 보장 가능</li>
<li>계층별 기능 확장 및 변경에 의한 영향에 무관</li>
</ul>
<p>-&gt; 상위 계층을 하위 계층의 세부적인 사항으로부터 독립시킴으로써 기능 단위로 모듈화 가능</p>
<h4 id="네트워크-계층화-단점">네트워크 계층화 단점</h4>
<ul>
<li>하나의 데이터가 수신지에 도착하기 위해서 각 계층 간에 많은 상호작용이 필요함</li>
</ul>
<p>-&gt; 과다한 처리의 오버헤드와 지연시간이 증가</p>
<hr>
<h1 id="3-소켓-프로그래밍">3. 소켓 프로그래밍</h1>
<h3 id="클라이언트--서버-모델">클라이언트 / 서버 모델</h3>
<ul>
<li>클라이언트와 서버는 프로그램을 의미</li>
<li>서버는 클라이언트의 연결 요청을 대기</li>
<li>클라이언트는 서버에 요청을 하고 응답을 기다리는 호스트</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/6d666e3b-33be-4147-94e5-2db7a7bbe5b5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/eaf54d43-81c3-4532-ad27-740267f085ab/image.png" alt=""></p>
<h4 id="서버-소켓-구현">서버 소켓 구현</h4>
<pre><code class="language-c">// 소켓 생성
#include &lt;sys/socket.h&gt;
int socket (int domain, int type, int protocol)</code></pre>
<pre><code class="language-c">// 주소 할당 (IP 주소, Port 정보)
 #include &lt;sys/socket.h&gt;
int bind(int sockfd, struct sockaddr *myaddr, int addrlen)</code></pre>
<pre><code class="language-c">// 연결 요청 대기
#include &lt;sys/socket.h&gt;
int listen(int sockfd, int backlog)
</code></pre>
<pre><code class="language-c">// 연결 요청 수락
#include &lt;sys/socket.h&gt;
int accept(int sockfd, struct sockaddr *addr, int *addrlen)</code></pre>
<h4 id="클라이언트-소켓-구현">클라이언트 소켓 구현</h4>
<pre><code class="language-c">// 소켓 생성    
#include &lt;sys/socket.h&gt;
int socket (int domain, int type, int protocol)</code></pre>
<pre><code class="language-c">// 연결 요청
 #include &lt;sys/socket.h&gt;
int connect(int sockfd, struct sockaddr *server_addr, int addrlen)</code></pre>
<hr>
<h1 id="4-네트워크-관련-오픈-소스">4. 네트워크 관련 오픈 소스</h1>
<h3 id="하드웨어-tcp-ip-칩">하드웨어 TCP/ IP 칩</h3>
<h4 id="--이더넷-쉴드-w5100">- 이더넷 쉴드 (W5100)</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/59bf2ff8-7c84-4f22-84ea-7c544e01f590/image.png" alt=""></p>
<h3 id="네트워크-운영체제">네트워크 운영체제</h3>
<blockquote>
<p> 라우터, 스위치, 방화벽과 같은 네트워크 장치를 위한 특화된 운영체제이다. 
네트워크와 네트워크 메시지를 (이를테면 패킷) 트래픽과 대기열(큐)을 제어하고, 여러 명의 사용자가 파일과 같은 네트워크 리소스에 접근할 수 있게 해 주며, 보안을 포함한 특정한 관리자 기능을 제공하는 소프트웨어이다.</p>
</blockquote>
<h4 id="--sonic">- SONiC</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/03c22e01-1f51-49fd-9939-880c86603023/image.png" alt=""></p>
<h4 id="--open-vswitch">- Open vSwitch</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/89256770-476d-4cea-b05e-aa8a3d10dd6f/image.png" alt=""></p>
<h3 id="고속-패킷-처리-sw">고속 패킷 처리 SW</h3>
<h4 id="--dpdk">- DPDK</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/d1ea07b6-82c0-4625-8cee-0f4cfdb58eca/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Open Source Software] - 오픈소스, 라이선스 (GNU, GPL, BSD 등)]]></title>
            <link>https://velog.io/@deep-of-machine/Open-Source-Software-%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4-GNU-BSD-%EB%93%B1</link>
            <guid>https://velog.io/@deep-of-machine/Open-Source-Software-%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4-GNU-BSD-%EB%93%B1</guid>
            <pubDate>Thu, 27 Oct 2022 13:30:34 GMT</pubDate>
            <description><![CDATA[<h1 id="오픈소스">오픈소스</h1>
<blockquote>
<p>사용자가 프로그램의 소스코드에 아무런 제약 없이 접근 할 수 있다.
    - 수정 및 배포 가능하며, 사용 상의 제약이 없다. </p>
</blockquote>
<ul>
<li>자유 배포 (Free Redistribution)</li>
<li>소스코드 공개 (Source Code Open)</li>
<li>2차적 저작물 (Derived Works) (허용)</li>
<li>소스코드 수정 제한 (Integrity of The Author&#39;s Source Code)</li>
<li>개인이나 단체에 대한 차별 금지 (No Discrimination Against Persons or Groups) </li>
<li>사용 분야에 대한 제한 금지 (No Discrimination Against Fields of Endeavor)</li>
<li>라이선스의 배포 (Distribution of License)</li>
<li>라이선스 적용상의 동일성 유지 (License must not be specific to a product)</li>
<li>다른 라이선스의 포괄적 수용 (License must not contaminate other software)</li>
<li>라이선스의 기술적 중립성 (License must be Technology-Neutral)</li>
</ul>
<hr>
<h3 id="오픈소스-커뮤니티의-성장-계기">오픈소스 커뮤니티의 성장 계기</h3>
<ul>
<li>Netscape 브라우저 소스를 공개 -&gt; 이후 Firefox 프로젝트로 발전<h3 id="오픈소스의-장점">오픈소스의 장점</h3>
</li>
<li>자유롭게 프로그램의 소스에 접근</li>
<li>수정 및 재배포</li>
<li>제조사에 의존적인 부분을 제거</li>
<li>높은 수준의 협력</li>
</ul>
<hr>
<h1 id="라이선스">라이선스</h1>
<blockquote>
<p>소프트웨어를 사용할 수 있는 권한 또는 사용을 허가하는 것이다. (소프트웨어 사용권)</p>
</blockquote>
<hr>
<h2 id="gnu-gnu-is-not-unix">GNU (GNU is Not Unix)</h2>
<h3 id="gnu-4가지-강령">GNU 4가지 강령</h3>
<ul>
<li>누구나 어떤 목적으로든 프로그램을 실행할 자유를 가쟈야 한다. </li>
<li>사용자의 요구에 맞게 프러그램을 수정할 수 있어야 한다. </li>
<li>다른 사람들을 위해 재배포가 가능해야 한다. </li>
<li>수정된 버전의 배포를 통해 해당 커뮤니티가 이득을 볼 수 있어야 한다. </li>
</ul>
<hr>
<h2 id="gpl">GPL</h2>
<h3 id="특징">특징</h3>
<ul>
<li>수정한 소스코드 또는 GPL 소스코드를 활용한 소프트웨어는 모두 GPL로 공개</li>
<li>개인적, 내부적 이용에 한해서는 소스코드를 공개하지 않아도 됨</li>
<li>외부 배포시 해당 소프트웨어의 전체 소스코드를 공개해야 함</li>
</ul>
<p>ex) FireFox (2.0), 리눅스 커널, 깃마리아 DB</p>
<hr>
<h2 id="lgpl">LGPL</h2>
<h3 id="특징-1">특징</h3>
<ul>
<li>기존의 GPL의 높은 제약을 완화시키기 위해 탄생</li>
<li>소스코드를 단순 라이브러리 이용 이외의 목적으로 사용 시 소스코드 공개</li>
</ul>
<p>ex) FireFox (2.1)</p>
<hr>
<h2 id="bsd">BSD</h2>
<h3 id="특징-2">특징</h3>
<ul>
<li>소스코드의 공개 의무가 없고 제약 조건이 낮다.</li>
<li>버클리 캘리포니아 대학에서 제정</li>
<li>BSD 자체가 공기관에서 만든 것이므로 공공 환원의 의도가 강함</li>
<li>저작권 및 라이선스 명시 이외엔 아무 제약 없이 사용 가능한 자유로운 라이선스</li>
</ul>
<p>ex) OpenCV</p>
<hr>
<h2 id="apache-20">Apache 2.0</h2>
<h3 id="특징-3">특징</h3>
<ul>
<li>BSD와 거의 비슷하며 BSD보다 좀 더 완화된 내용</li>
<li>Apache 1.0, 1.1은 OSI 인증 라이선스 제외 (OSI = Open Source Initiative)</li>
<li>2차 라이선스 가능
ex) 안드로이드, 하둡 </li>
</ul>
<hr>
<h2 id="mit">MIT</h2>
<h3 id="특징-4">특징</h3>
<ul>
<li>BSD 라이선스를 기초로 MIT 대학에서 제정</li>
<li>MIT 라이선스를 따르는 소프트웨어를 사용하여 만든 개발품을 꼭 오픈소스로 해야할 필요는 없으며, 소스코드 공개 의무도 없음</li>
<li>2차 라이선스 가능</li>
</ul>
<p>ex) X 윈도우 시스템, Jsoup</p>
<hr>
<h2 id="mpl">MPL</h2>
<h3 id="특징-5">특징</h3>
<ul>
<li>수정한 소스코드는 MPL 라이선스로 공개 (단순 이용 시에는 공개 의무 없음)</li>
<li>소스코드와 실행 파일의 저작권 분리</li>
<li>MPL 라이선스의 소스코드를 사용하여 개발했을 시 수정한 소스코드를 MPL로 공개하고 원작자에게 수정한 부분에 대해 알려줘야 함</li>
<li>실행 파일은 독점 라리선스로 배포 가능 </li>
<li>또한 MPL과 무관하게 작성된 소스코드는 공개할 필요가 없다.</li>
<li>2차 라이선스 가능</li>
</ul>
<p>ex) 파이어폭스 (1.1)</p>
<hr>
<h2 id="eclipse">Eclipse</h2>
<h3 id="특징-6">특징</h3>
<ul>
<li>수정한 소스코드를 Eclipse 라이선스로 공개 (단순 이용 시에는 공개 의무 없음)</li>
<li>GPL을 대체하며, GPL보다 약한 수준으로 기업 친화적인 특징</li>
<li>2차 라이선스 가능</li>
</ul>
<p>ex) Eclipse</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] - 클래스, 메서드 (Class, Method)]]></title>
            <link>https://velog.io/@deep-of-machine/Java-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%A9%94%EC%84%9C%EB%93%9C-Class-Method</link>
            <guid>https://velog.io/@deep-of-machine/Java-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%A9%94%EC%84%9C%EB%93%9C-Class-Method</guid>
            <pubDate>Tue, 18 Oct 2022 12:36:44 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="클래스-class">클래스 (Class)</h1>
<p><code>접근자 class 클래스 이름{...}</code></p>
<h3 id="1-접근지정자">1. 접근(지정)자</h3>
<p>*<em>-&gt; 외부에서 이 클래스에 접근할 수 있는지 여부 *</em></p>
<ul>
<li>(public: 다른 클래스에서 이 클래스를 이용할 수 있음)</li>
<li>중괄호 안에 클래스의 필드와 메소드를 모두 작성<h3 id="2-멤버-필드">2. 멤버 (필드)</h3>
</li>
<li>객체의 상태 값을 저장할 멤버변수. “접근지정자 타입 이름;”<h3 id="3-메서드">3. 메서드</h3>
</li>
<li>실행가능한 객체의 행위를 구현 (함수)</li>
<li>경우에 따라 생략가능! “접근지정자 반환타입 함수이름(매개변수) { ... return 값; }”</li>
</ul>
<pre><code class="language-java">/** Location 클래스: 위도 경도 표현 및 다른 위치까지의 거리 계산 */ 
public class Location
{
     public double latitude;    // 멤버 (필드)
     public double longitude;  // 멤버 (필드)

    public Location(double lat, double lon) // 생성 메소드 
    {
          this.latitude = lat;
        this.longitude = lon;
    }

     public double distance(Location other) {
         ...
    }
}</code></pre>
<ul>
<li>this: 현재 만들어지고 있는 객체</li>
</ul>
<hr>
<h1 id="객체">객체</h1>
<h2 id="new">new</h2>
<ol>
<li>인스턴스 생성</li>
<li>Heap 메모리 공간 할당</li>
<li>객체(nes)에게 참조값 리턴</li>
</ol>
<h2 id="객체의-생성과-사용-내부-과정">객체의 생성과 사용 내부 과정</h2>
<h3 id="메모리-모델-memory-model">메모리 모델 (Memory Model)</h3>
<ul>
<li>new를 통해 Location 인스턴스 생성 == Location</li>
<li>Heap 메모리 공간 할당 == latitude, longitude</li>
<li>객체에게 참조값 리턴 == erica, seoul
<img src="https://velog.velcdn.com/images/deep-of-machine/post/f65e2385-cb19-4cc9-bd66-55f50bc260ee/image.png" alt=""></li>
</ul>
<h3 id="함수의-인자-전달-parameter-passing">함수의 인자 전달 (Parameter Passing)</h3>
<h3 id="변수의-유효-범위-variable-scope">변수의 유효 범위 (Variable Scope)</h3>
<blockquote>
<p>변수의 사용 가능한 범위</p>
</blockquote>
<h4 id="변수의-유효-범위가-한전됨에-따른-이점">변수의 유효 범위가 한전됨에 따른 이점</h4>
<ul>
<li>이름(변수명) <strong>재사용 가능</strong></li>
<li>전체 프로그램의 <strong>모든 이름을 외울 필요 없음</strong></li>
<li>이름이 필요한 곳에만 알려짐</li>
</ul>
<h4 id="1-지역-변수">1. 지역 변수</h4>
<p>-&gt; 현재 <strong>메서드 안에서만</strong> 값이 정의되고 사용될 수 있음</p>
<h4 id="2-멤버전역-변수">2. 멤버(전역) 변수</h4>
<p>-&gt; 현재 클래스의 <strong>어떠한 메서드에서도</strong> 값이 정의되고 사용될 수 있음</p>
<hr>
<h1 id="메서드-method">메서드 (Method)</h1>
<h3 id="1-main-메서드">1. main 메서드</h3>
<h4 id="프로그램-실행을-시작시키는-역할">프로그램 실행을 시작시키는 역할</h4>
<ul>
<li>무조건 있어야 하는 메서드</li>
<li>this 객체를 반환하며 Initial을 취한다.</li>
</ul>
<h3 id="2-반환값-return">2. 반환값 (Return)</h3>
<h4 id="알고리즘이-다-수행되고-마지막으로-출력되는-값">알고리즘이 다 수행되고 마지막으로 출력되는 값</h4>
<ul>
<li>Return 이후의 코드는 실행되지 않는다. </li>
<li>반환 값을 받지 않아도 수행된다.</li>
<li>받지 않은 값은 무시</li>
</ul>
<h3 id="3-메서드-오버로딩-overloading">3. 메서드 오버로딩 (Overloading)</h3>
<h4 id="같은-이름의-메서드-여러개-정의">같은 이름의 메서드 여러개 정의</h4>
<ul>
<li>메서드 이름이 같다.</li>
<li>매개변수의 개수 or 매개변수의 자료형이 달라야 한다.</li>
<li>리턴 타입이 같아야 한다. </li>
</ul>
<h3 id="4-public-vs-private">4. Public vs Private</h3>
<h4 id="public--어디에서나-접근-읽기-쓰기-가능">Public : 어디에서나 접근 (읽기/ 쓰기) 가능</h4>
<ul>
<li>Public 일 때, new로 객체 생성 및 사용 가능 <h4 id="private--현재-클래스-메서드-내에서만-접근-가능">Private : 현재 클래스/ 메서드 내에서만 접근 가능</h4>
</li>
<li>setter: 값을 바꾸어 줄 때 사용됨.</li>
<li>getter: Private 때문에 setter의 반환값을 사용하지 못해서 getter를 이용</li>
</ul>
<h4 id="--필드-멤버변수들은-private으로">-&gt; 필드 멤버변수들은 Private으로</h4>
<h4 id="--메소드들은-성질에-따라-public-or-private">-&gt; 메소드들은 성질에 따라 Public or Private</h4>
<h3 id="5-static-필드-변수-및-메서드">5. Static 필드 변수 및 메서드</h3>
<ul>
<li><p>객체 생성 없이 바로 사용가능
  ex) Math.PI, Math.abs(f)</p>
</li>
<li><p>타입 앞에 static 붙이면 정의 가능</p>
</li>
<li><p>정적 매서드로 동적 필드에 접근 불가능</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] - 연산, 변수 (operation, variable)]]></title>
            <link>https://velog.io/@deep-of-machine/Java-%EC%97%B0%EC%82%B0-%EB%B3%80%EC%88%98-operation-variable</link>
            <guid>https://velog.io/@deep-of-machine/Java-%EC%97%B0%EC%82%B0-%EB%B3%80%EC%88%98-operation-variable</guid>
            <pubDate>Mon, 17 Oct 2022 11:43:58 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="변수-variable">변수 (variable)</h1>
<h2 id="변수">변수</h2>
<blockquote>
<p>값을 저장할 수 있는 저장소, 
메모리에 값이 저장된 위치(셀)를 참조하기 위해 정한 이름</p>
</blockquote>
<h3 id="선언">선언</h3>
<h4 id="변수명-만드는-규칙">변수명 만드는 규칙</h4>
<ol>
<li>영문자, 숫자, 언더바, $ 으로 구성</li>
<li>숫자로 시작 금지</li>
<li>Java 키워드 사용 금지 (Public, Class 등)</li>
</ol>
<ul>
<li>변수를 사용하기 전 취해야하는 절차 (사용 예고)<pre><code class="language-java">int variable_name;</code></pre>
<h3 id="초기화-initializatoin">초기화 (initializatoin)</h3>
</li>
<li>변수를 사용할 때 임의의 값 지정 </li>
<li>Assignment와 형태는 같으나, 맨 처음에 따로 변수 값을 저장하는 것을 초기화라고 한다.<pre><code class="language-java">variable_name = &#39;velog&#39;;</code></pre>
<h3 id="저장-or-대입-assignment">저장 or 대입 (Assignment)</h3>
</li>
<li>초기화 부분이 아닌, 알고리즘 부분에서 변수를 사용하고자 할 때 사용</li>
<li>변수 저장소 셀에 있는 값은 바꿀 수 있다.<pre><code class="language-java">variable_name = &#39;velog&#39;;</code></pre>
</li>
</ul>
<hr>
<h1 id="데이터-타입-data-types">데이터 타입 (Data Types)</h1>
<h2 id="데이터-타입-종류">데이터 타입 종류</h2>
<h3 id="1-기본-타입-primitive-type">1. 기본 타입 (Primitive type)</h3>
<h4 id="--int--정수">- int : 정수</h4>
<ul>
<li>문자열 20을 정수로 바꾸는 법<pre><code class="language-java">int c = new Integer(“20”).intValue();</code></pre>
<h4 id="--double--실수-유리수">- Double : 실수, 유리수</h4>
</li>
<li>문자열 20을 실수로 바꾸는 법<pre><code class="language-java">double c = new Double(“3.14159”).doubleValue();</code></pre>
<h4 id="--characters--문자">- Characters : 문자</h4>
</li>
<li>글자 하나. </li>
<li>문자는 정수로 변환 가능하다. (Unicode)<pre><code class="language-java">(char) (&#39;a&#39; + 1)</code></pre>
</li>
</ul>
<h4 id="--boolean-value">- Boolean Value</h4>
<ul>
<li>참, 거짓을 나타내는 값<pre><code class="language-java">boolean b = false;</code></pre>
<h3 id="2-참조-or-객체-타입-reference-or-object-type">2. 참조 or 객체 타입 (Reference or Object type)</h3>
<h4 id="--string--문자열">- String : 문자열;</h4>
</li>
<li>정수, 실수, 논리값과는 달리 &quot;객체&quot;이다.<pre><code class="language-java">String name = &quot;Gildong Hong&quot;;</code></pre>
</li>
</ul>
<hr>
<h2 id="타입-변환-type-cast">타입 변환 (Type Cast)</h2>
<h3 id="1-묵시적-타입-변환-implicit-type-casting">1. 묵시적 타입 변환 (implicit type casting)</h3>
<pre><code class="language-java">int i = 1;
double d = i;</code></pre>
<h3 id="2-명시적-타입변환explicit-type-casting">2. 명시적 타입변환(explicit type casting)</h3>
<pre><code class="language-java">double d = 1.5;

int i = d;         (X)
int i = (int) d;   (o)</code></pre>
<h3 id="decimalformat">DecimalFormat</h3>
<ul>
<li>DecimalFormat 객체 만들기</li>
</ul>
<p><code>new DecimalFormat(&lt;패턴&gt;)</code></p>
<pre><code class="language-java">DecimalFormat f = new DecimalFormat(“0.00”); //오른쪽 두자리 픽스, 왼쪽 최소 한자리
String s = f.format(100.0/3.0);

//결과 값 33.33</code></pre>
<h2 id="타입-오류">타입 오류</h2>
<pre><code class="language-java">boolean b = true; 
System.out.println(b * 5);    // data type error 

int i = 3 * 2.1;    // data type error

int x;
x = &quot;abc&quot;;    // data type error

GregorianCalendar c = new GregorianCalendar();
System.out.println(c.getTime()); 
c.println(&quot;oops&quot;); // data type error</code></pre>
<h2 id="타입-검사">타입 검사</h2>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/8dce30bc-d065-4150-ad71-ae3d1483e84b/image.png" alt=""></p>
<h2 id="실행시간-오류-run-time-error">실행시간 오류 (Run-Time Error)</h2>
<blockquote>
<p>Syntax 적으로는 문제가 없지만, 논리적으로 문제가 있어 실행 도중 생기는 에러</p>
</blockquote>
<h4 id="일부-오류는-실행해-보지-않고는-찾기-어려워-실행시간에-발생한다">일부 오류는 실행해 보지 않고는 찾기 어려워 실행시간에 발생한다.</h4>
<pre><code class="language-java">// 0으로 나눌 때
int x=0;
i/x

// 변환오류
new Integer(x).intValue() // x=”abc”</code></pre>
<ul>
<li>Java는 실행시간 오류가 발생하면 예외(exception)을 발생시키면서 발생 경 input, e.g.,</li>
</ul>
<hr>
<h1 id="연산">연산</h1>
<h3 id="비교-연산자">비교 연산자</h3>
<pre><code>&gt; &lt; &lt;= &gt;= == !=</code></pre><h3 id="논리-연산자">논리 연산자</h3>
<pre><code>&amp;&amp; (and), || (or), ! (not)</code></pre><h3 id="연산자-우선-순위-operator-precedence">연산자 우선 순위 (Operator Precedence)</h3>
<ul>
<li>괄호가 최강.<h4 id=""></h4>
<blockquote>
<p>&lt; 높음 &gt;
단항 연산자 : -, !
곱하기*나누기/나머지%
더하기+빼기-
비교 &lt; &lt;= &gt; &gt;=
비교 == !=
논리 &amp;&amp; ||
&lt; 낮음 &gt;</p>
</blockquote>
</li>
</ul>
<h3 id="연산자-결합-순서-associativity">연산자 결합 순서 (Associativity)</h3>
<h4 id="단항-연산자">단항 연산자</h4>
<ul>
<li>단항 연산자는 우결합 원칙</li>
</ul>
<pre><code>ex) ---4 = -(-(-(-4))) </code></pre><h4 id="이항-연산자">이항 연산자</h4>
<ul>
<li>이항 연산자는 좌결합 원칙<pre><code>ex) 1-2-3 = (1 - 2) - 3</code></pre></li>
</ul>
<hr>
<h1 id="예제-동전-계산-프로그램">예제) 동전 계산 프로그램</h1>
<h4 id="celsiustofahrenheit1-는-프로그램-인수로-섭씨온도를-받아-화씨온도로-바꾸-어-출력해-준다">CelsiusToFahrenheit1 는 프로그램 인수로 섭씨온도를 받아 화씨온도로 바꾸 어 출력해 준다.</h4>
<pre><code class="language-java">import java.text.*

public class CelsiusToFahrenheit1 {
    public static void main(String[] args)
    {
    int c = new Integer(args[0]).intValue();
    // args[0]가 프로그램 인수
    double f = ((9.0/5.0)*c) + 32; 
    System.out.println(&quot;For Celsius degrees &quot; + c + &quot;,&quot;); 
    DecimalFormat formatter = new DecimalFormat(“0.0”); 
    System.out.println(&quot;Degrees Fahrenheit = &quot; + formatter.format(f));
    } 
}</code></pre>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] - 자바 기초  (특징, 개발 환경)]]></title>
            <link>https://velog.io/@deep-of-machine/Java-%EC%9E%90%EB%B0%94-%EA%B8%B0%EC%B4%88-%ED%8A%B9%EC%A7%95-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD</link>
            <guid>https://velog.io/@deep-of-machine/Java-%EC%9E%90%EB%B0%94-%EA%B8%B0%EC%B4%88-%ED%8A%B9%EC%A7%95-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD</guid>
            <pubDate>Mon, 17 Oct 2022 09:15:29 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="컴파일-compile">컴파일 (Compile)</h1>
<blockquote>
<p>소스코드를 기계어로 번역하는 과정</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/853bbd9f-bd3a-467e-a44b-f7cb305e4a3d/image.png" alt=""></p>
<h2 id="컴파일-vs-인터프린터-스크립트">컴파일 vs 인터프린터 (스크립트)</h2>
<h3 id="인터프린터">인터프린터</h3>
<ul>
<li>소스코드를 실행코드로 변환하지 않고, 소스코드를 한줄한줄 바로 실행한다. </li>
<li>에러 발생 시, 에러가 발생한 해당 라인 직전 라인 까지는 실행이 된다.<h3 id="컴파일">컴파일</h3>
</li>
<li>인터프린터와는 다르게 소스코드를 실행코드로 변환하고, 실행코드를 실행한다. </li>
<li>에러가 있으면 해당 라인 까지 실행 되는 것이 아니라, 아예 실행이 되지 않는다. (실행파일을 만들지 못함 = 컴파일을 못함)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/9f378ae3-71ac-4184-ae93-3b91c983bd09/image.png" alt=""></p>
<hr>
<h1 id="플랫폼-종속성">플랫폼 종속성</h1>
<blockquote>
<p>개발하는 환경에 따라 사용자의 프로그램 사용 환경이 결정 됨.</p>
</blockquote>
<ul>
<li>ISA (Instruction set architecture), OS (Operating System) 때문에 cpu가 프로그램을 해석하는 방식이 다 다르다.
<img src="https://velog.velcdn.com/images/deep-of-machine/post/9d067b9d-93ef-40a3-8502-2548da987414/image.png" alt=""></li>
</ul>
<hr>
<h1 id="자바의-플랫폼-독립성-wora">자바의 플랫폼 독립성 (WORA)</h1>
<blockquote>
<p>사용자의 사용 환경이 개발하는 환경과 상관없이 범용성을 가짐</p>
</blockquote>
<h3 id="jre-jvm">JRE (JVM)</h3>
<ul>
<li>자바는 자바 가상 머신이 존재하여, 프로그램이 자바 가상머신 위에서 돌아간다.</li>
<li>프로그래밍 언어를 구현하는데 번역의 징검다리 역할
<img src="https://velog.velcdn.com/images/deep-of-machine/post/f67b07ea-2dfc-4875-94e4-eae8ba0c8e5f/image.png" alt=""><h3 id="자바-바이트코드">자바 바이트코드</h3>
</li>
<li>바이트코드란? 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드</li>
<li>.class 의 확장자 형태를 가짐
<img src="https://velog.velcdn.com/images/deep-of-machine/post/5de7dbce-2a45-4575-9483-819b3459ba57/image.png" alt=""></li>
</ul>
<hr>
<h1 id="플랫폼-독립성의-단점">플랫폼 독립성의 단점</h1>
<blockquote>
<p>종속적으로 개발했을 때보다 성능이 좋지 않음.</p>
</blockquote>
<ul>
<li>플랫폼 독립적일 때 최적화 문제가 있음</li>
<li><blockquote>
<p>(instruction/data-level parallelism, cache optimization)</p>
</blockquote>
</li>
</ul>
<hr>
<h1 id="main-메소드">main 메소드</h1>
<blockquote>
<p>프로그램 실행을 시작시키는 메소드</p>
</blockquote>
<ul>
<li>프로그램 객체가 메모리에 생성 -&gt; Main 메소드 호출</li>
<li>모든 자바 application은 main 메서드가 있어야 함
<img src="https://velog.velcdn.com/images/deep-of-machine/post/460ea2d6-c49f-4f8d-ba24-e116e1e0f034/image.png" alt=""></li>
</ul>
<hr>
<h1 id="자바-ide-eclipse-jdk">자바 IDE (Eclipse, JDK)</h1>
<h3 id="ide-integrated-development-environment">IDE (Integrated Development Environment)</h3>
<ul>
<li>통합 개발 환경</li>
<li>편집, 컴파일, 디버깅 등 여러 작업을 하는 툴<h3 id="eclipse-자바-ide">Eclipse (자바 IDE)</h3>
</li>
<li>자바 응용 프로그램 개발을 위한 통합 개발 환경</li>
<li>프로젝트 생성 -&gt; 패키지 생성 -&gt; 클래스 생성 -&gt; 소스코드 실행<h3 id="jdk-java-development-kit">JDK (Java Development Kit)</h3>
</li>
<li>자바 응용 개발 환경, 개발에 필요한 도구 포함 (컴파일러, 클래스 라이브러리, 샘플 등)</li>
<li>JRM과 JDK를 설치하면, Eclipse가 JRM과 JDK를 자동으로 선택해서 실행한다. </li>
</ul>
<hr>
<h1 id="mvc-구조">MVC 구조</h1>
<h3 id="모델-model">모델 (Model)</h3>
<ul>
<li>제어기의 메시지에 따라 계산을 하는 객체<h3 id="뷰-view">뷰 (View)</h3>
</li>
<li>사용자와의 상호작용을 관장하는 객체<h3 id="제어기-controller">제어기 (Controller)</h3>
</li>
<li>정보를 전달하는 것을 관장하는 객체</li>
</ul>
<hr>
<h1 id="간단한-프로그램-예제-hello-world">간단한 프로그램 예제 (Hello World)</h1>
<h3 id="이름-날짜-시간을-출력하는-프로그램-만들기">&lt; 이름, 날짜, 시간을 출력하는 프로그램 만들기 &gt;</h3>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/81504b69-3e14-4de4-9f10-b8bf71b5a8f3/image.png" alt=""></p>
<pre><code class="language-java">import java.util.*; // Java package
/** NameAndDate는 이름과 날짜, 시간을 출력 */ 

public class NameAndDate
{
  public static void main(String[] args)
  {
    System.out.print(“Hanyang ERICA --- &quot;);

    // The next statement creates an object: 
    GregorianCalendar c = new GregorianCalendar(); // 객체 생성은 new로

    // c에게 시간을 물어보고 그 결과를 출력
      System.out.println(c.getTime()); 
      System.out.println(&quot;Finished&quot;);
    } 
}</code></pre>
<hr>
<h1 id="java-패키지와-api">Java 패키지와 API</h1>
<blockquote>
<p>Java에서 기본적으로 제공하는 패키지를 Java API (Application Programming Interface)라고 부른다.
ex) java.lang, java.util  ...</p>
</blockquote>
<ul>
<li>일부 기초적인 API는 import 하지 않아도 사용할 수 있다. 
ex) System.out.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] - 인공지능, 머신러닝, 딥러닝 (AI vs Machine Learning vs Deep Learning)]]></title>
            <link>https://velog.io/@deep-of-machine/AI-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-AI-vs-Machine-Learning-vs-Deep-Learning</link>
            <guid>https://velog.io/@deep-of-machine/AI-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-AI-vs-Machine-Learning-vs-Deep-Learning</guid>
            <pubDate>Thu, 06 Oct 2022 23:45:26 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="1-인공지능-머신러닝-딥러닝의-차이">1. 인공지능, 머신러닝, 딥러닝의 차이?</h1>
<p>-&gt; 데이터 사용 여부와 인공신경망의 사용 여부로 인공지능 머신러닝 딥러닝을 구분 할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/fb87b1ce-fd5d-4f80-895a-2a52f90f292b/image.png" alt=""></p>
<h1 id="2-artificial-intelligence">2. Artificial Intelligence</h1>
<ul>
<li>가장 넓은 범위의 개념으로, 인간의 지적 능력을 모방하는 어떠한 것이라도 인공지능이라 말할 수 있다. </li>
<li>ex) 간단한 프로그램, 시리, 빅스비, 인공지능 스피커, 등<h1 id="3-machine-learning">3. Machine Learning</h1>
</li>
<li><strong>데이터를 사용해 모델을 학습</strong>시키는 방법으로 구현한 인공지능을 머신러닝이라고 한다. </li>
<li>인공지능 + <strong>학습 데이터</strong> = 머신러닝</li>
<li><strong>사람이 훈련 데이터의 특징을 추출</strong>해서 인공지능 모델을 학습시켜야한다.</li>
<li>ex) SVM, Decision Tree, KNN, Random Forest<h1 id="4-deep-learning">4. Deep Learning</h1>
</li>
<li>머신러닝 + <strong>인공신경망(심층)</strong> = 딥러닝</li>
<li>머신러닝과 다르게 데이터로부터 특징을 추출할 필요 없고, <strong>모델이 알아서 특징을 추출</strong>한다. </li>
<li>ex) CNN, RNN, LSTM, ANN, DNN, MLP</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] - 지도학습, 비지도학습, 강화학습 (Supervised vs Unsupervised vs Reinforcement Learning)]]></title>
            <link>https://velog.io/@deep-of-machine/AI-%EC%A7%80%EB%8F%84-%ED%95%99%EC%8A%B5-%EB%B9%84%EC%A7%80%EB%8F%84-%ED%95%99%EC%8A%B5-%EA%B0%95%ED%99%94-%ED%95%99%EC%8A%B5-Supervised-vs-Unsupervised-vs-Reinforcement-Learning</link>
            <guid>https://velog.io/@deep-of-machine/AI-%EC%A7%80%EB%8F%84-%ED%95%99%EC%8A%B5-%EB%B9%84%EC%A7%80%EB%8F%84-%ED%95%99%EC%8A%B5-%EA%B0%95%ED%99%94-%ED%95%99%EC%8A%B5-Supervised-vs-Unsupervised-vs-Reinforcement-Learning</guid>
            <pubDate>Tue, 04 Oct 2022 16:31:59 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="1-지도-학습과-비지도-학습">1. 지도 학습과 비지도 학습?</h1>
<h2 id="지도학습과-비지도-학습의-차이">지도학습과 비지도 학습의 차이</h2>
<h4 id="--지도-학습과-비지도-학습을-구분하는-기준은-훈련-데이터가-label정답을-가지고-있는지-없는지이다">- 지도 학습과 비지도 학습을 구분하는 기준은, 훈련 데이터가 Label(정답)을 가지고 있는지 없는지이다.</h4>
<p><img src="https://velog.velcdn.com/images/deep-of-machine/post/c05b25a9-00ab-496d-b05a-23235e4aaacb/image.png" alt=""></p>
<hr>
<h1 id="2-지도-학습">2. 지도 학습</h1>
<p>-&gt; 정답 레이블이 <strong>있는</strong> 데이터를 가지고 인공지능을 학습 시킴</p>
<ul>
<li>지도 학습에는 <strong>분류</strong>와 <strong>회귀분석</strong>, 2가지 종류가 있다.
<img src="https://velog.velcdn.com/images/deep-of-machine/post/516a0abe-8ea9-4a99-864b-4790bb372baf/image.jpg" alt=""></li>
</ul>
<h3 id="분류">&lt; 분류 &gt;</h3>
<ul>
<li>Classification은 Binary, Multi-Class, Multi-Label Classification으로 나뉜다. </li>
</ul>
<h4 id="대표적인-분류-알고리즘">대표적인 분류 알고리즘</h4>
<ul>
<li>SVM, Decision Tree, KNN(K-nearest neighbor),  Random Forest, Naive Bayes</li>
</ul>
<h3 id="회귀">&lt; 회귀 &gt;</h3>
<ul>
<li>Regression은 Linear와 Non-Linear Regression으로 나뉜다. </li>
</ul>
<h4 id="대표적인-회귀-알고리즘">대표적인 회귀 알고리즘</h4>
<ul>
<li>Linear Regression, Polynomial Regression</li>
</ul>
<blockquote>
<p>!! 주의 !! 
_Logistic Regression과 Softmax Regression는 
이름은 Regression이지만 실제로 하는 일은 Classification이다. _</p>
</blockquote>
<hr>
<h1 id="3-비지도-학습">3. 비지도 학습</h1>
<p>-&gt; 정답 레이블이 <strong>없는</strong> 데이터를 가지고 인공지능을 학습 시킴</p>
<ul>
<li>지도 학습에는 <strong>군집화</strong>와 <strong>차원 축소</strong>, 2가지 종류가 있다.
<img src="https://velog.velcdn.com/images/deep-of-machine/post/fe454b39-b157-4cc0-b77b-83e3844933d0/image.png" alt=""></li>
</ul>
<h3 id="군집화-clustering">&lt; 군집화 (Clustering) &gt;</h3>
<ul>
<li>정답데이터가 없어, 차원을 바꿔가며 데이터끼리의 상관관계를 이용해 군집을 잡는다. <h4 id="대표적인-군집화-알고리즘">대표적인 군집화 알고리즘</h4>
</li>
<li>K-means Clustering, DBSCAN, Mean-Shift Clustering</li>
</ul>
<h3 id="차원-축소">&lt; 차원 축소 &gt;</h3>
<ul>
<li>고차원의 데이터로부터 특징을 추출하기 어렵기 때문에, 단순히 데이터를 압축하는 것이 아닌 데이터를 더 잘 설명할 수 있는 잠재적인 요소를 추출<h4 id="대표적인-차원-축소-알고리즘">대표적인 차원 축소 알고리즘</h4>
</li>
<li>PCA, LDA</li>
</ul>
<hr>
<h1 id="4-강화-학습">4. 강화 학습</h1>
<p>-&gt; 학습 데이터라는 것이 아닌, 강화학습의 5가지 구성 요소를 통해 모델 에이전트를 학습해나간다. 
<img src="https://velog.velcdn.com/images/deep-of-machine/post/54565a1b-59e0-45c0-812f-ccf3f70cd7e7/image.jpeg" alt=""></p>
<h2 id="강화학습-기초-개념">강화학습 기초 개념</h2>
<ul>
<li>아기가 걸음마를 때는 장면을 생각하면 이해하기 쉽다. 아기는 두 다리로만 중심을 잡을 수 없어 기어다닌다. 하지만 수차례의 넘어짐을 통해 중심 잡는 법을 터득하고, 결국에는 두 다리로만 중심을 잡고 서있는 법을 터득한다. <h2 id="강화학습-필수-요소">강화학습 필수 요소</h2>
<h3 id="1-agent">1. Agent</h3>
</li>
<li>학습을 하는 주체 (Model)<h3 id="2-enviroment">2. Enviroment</h3>
</li>
<li>Agent를 학습시킬 환경<h3 id="3-action">3. Action</h3>
</li>
<li>Agent가 Enviroment에서 내리는 행동<h3 id="4-state">4. State</h3>
</li>
<li>Agent가 Enviroment에서 Action을 내렸을 떄 발생하는 하나의 장면<h3 id="5-reward">5. Reward</h3>
</li>
<li>Agent가 Enviroment에서 Action을 내렸을 떄 발생하는 하나의 장면으로부터 나오는 기댓값 (보상과 벌점)</li>
</ul>
<h4 id="대표적인-강화학습-알고리즘">대표적인 강화학습 알고리즘</h4>
<ul>
<li>Q-Learning, DQN, Actor-Critic, A2C, A3C</li>
</ul>
<blockquote>
<p>강화학습은 Agent가 Enviroment에서 Action을 내리는데, 그때 생성되는 State로 부터 발생되는 Reward를 (보상을) Maximize하는 형태로 Agent를 학습한다. </p>
</blockquote>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] - 컴퓨터와 프로그래밍이란?]]></title>
            <link>https://velog.io/@deep-of-machine/Java-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</link>
            <guid>https://velog.io/@deep-of-machine/Java-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</guid>
            <pubDate>Tue, 04 Oct 2022 03:39:55 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="1-컴퓨터란">1. 컴퓨터란?</h1>
<h4 id="--명령을-수행하는-것이라고-하는데-내-생각에는-계산기이다">-&gt; 명령을 수행하는 것이라고 하는데, 내 생각에는 계산기이다.</h4>
<hr>
<h2 id="high-level-language-vs-low-level-language">High Level Language vs Low Level Language</h2>
<h4 id="--high로-갈수록-user-friendly-language-고급-언어">- High로 갈수록 User Friendly Language (고급 언어)</h4>
<pre><code>ex) Python</code></pre><h4 id="--low로-갈수록-machine-friendly-laguage-저급언어-기계어">- Low로 갈수록 Machine Friendly Laguage (저급언어, 기계어)</h4>
<pre><code>ex) Assembly, C</code></pre><p>_High Level 언어는 Low Level로 표현 가능하고, 
Low Level 언어는 0과 1로 표현 가능하다. _</p>
<h4 id="즉-컴퓨터란-코드를-컴파일러를-통해-저급-언어-0과-1로-변환한-뒤-계산해서-결과를-보여주는-계산기라고-생각한다">즉 컴퓨터란, 코드를 컴파일러를 통해 저급 언어 0과 1로 변환한 뒤, 계산해서 결과를 보여주는 계산기라고 생각한다.</h4>
<hr>
<h2 id="컴퓨터의-구성-요소">컴퓨터의 구성 요소</h2>
<h3 id="--프로세서-중앙처리장치-cpu">- 프로세서 (중앙처리장치, CPU)</h3>
<ul>
<li>명령을 처리하는 장치, (인간의 두뇌)<h3 id="--메인보드">- 메인보드</h3>
</li>
<li>각각의 장치 끼리 연결해주는 매개체의 역할<h3 id="--기억장치">- 기억장치</h3>
</li>
</ul>
<ol>
<li><p>주 기억장치 (RAM)</p>
<ul>
<li>속도는 빠르지만, <strong>휘발성</strong> 메모리로 전기가 나가면 파일 또한 날아간다. </li>
</ul>
</li>
<li><p>보조 기억장치 (SSD, HDD, ROM)</p>
<ul>
<li>속도는 느리지만, <strong>비휘발성</strong> 메모리로 전기가 나가도 파일은 살아있다.<h3 id="--파워-서플라이">- 파워 서플라이</h3>
</li>
</ul>
</li>
</ol>
<ul>
<li>전류를 각 장치의 전압과 전류의 세기에 맞게 분배하여 공급해주는 장치.<h3 id="--io">- I/O</h3>
</li>
<li>Input, Output (키보드, 마우스, 스피커, 모니터)</li>
</ul>
<hr>
<h1 id="2-프로그램이란">2. 프로그램이란?</h1>
<p>-&gt; 매우 구체적으로 작성된 명령 나열, 명령어 집합이다.</p>
<hr>
<h2 id="프로그램-vs-알고리즘">프로그램 VS 알고리즘</h2>
<h3 id="--프로그램">- 프로그램</h3>
<ul>
<li>컴퓨터가 수행할 수 있도록 매우 구체적으로 작성된 명령 나열
<img src="https://velog.velcdn.com/images/deep-of-machine/post/8054306b-d56d-4d23-908f-680d7166cbfb/image.png" alt=""></li>
<li>이를 작성하는 행위를 코딩, 프로그래밍이라 한다. </li>
</ul>
<h3 id="--알고리즘">- 알고리즘</h3>
<ul>
<li>어떤 문제를 해결하기 위해 정해놓은 일련의 절차
<img src="https://velog.velcdn.com/images/deep-of-machine/post/2e79591a-f4db-4538-be82-0e5f8dc1e52a/image.png" alt=""></li>
</ul>
<h4 id="--프로그램이-알고리즘보다-더-구체적이다">-&gt; 프로그램이 알고리즘보다 더 구체적이다.</h4>
<hr>
<h1 id="3-프로그램-설계">3. 프로그램 설계</h1>
<p><strong>건축가 (Architect)</strong> -&gt; 집을 어떻게 지을지 설계하는 사람
<strong>빌더 (Builder)</strong> -&gt; 집을 짓는 사람.</p>
<p>vs</p>
<p><strong>설계 (Design)</strong> -&gt; 구조, 알고리즘 구축 
<strong>구현 (Implementation)</strong> -&gt; 프로그램, 코드 구현</p>
<ul>
<li>프로그래밍에 있어서 두 작업 다 해야하지만, <strong>분리해서 사고</strong>하는 것이 좋다.</li>
</ul>
<hr>
<h2 id="객체-지향-설계-object-oriented-design">객체 지향 설계 (Object-Oriented Design)</h2>
<p>-&gt; 프로그램 설계 방법 중 한가지 방식</p>
<p>특징</p>
<ul>
<li>모든 것이 다 객체이다. </li>
<li>객체는 객체 자신의 메서드를 갖는다. 
<img src="https://velog.velcdn.com/images/deep-of-machine/post/ed06c41b-ba03-40e8-a256-1871514c7ac2/image.png" alt=""></li>
<li>화면, 사용자, 프로그램 등 모든것이 객체이다.
객체끼리 주고 받는 메시지를 통해 계산이 수행된다. 
(한 노드의 Output이 다른 노드의 Input으로 작용)</li>
</ul>
<hr>
<h2 id="클래스-구조도-class-diagram">클래스 구조도 (Class Diagram)</h2>
<h3 id="클래스-class">클래스 (class)</h3>
<ul>
<li>객체를 생성하기 위한 툴</li>
<li>클래스는 메서드를 지닌다.</li>
</ul>
<h4 id="클래스-구조도">클래스 구조도</h4>
<ul>
<li>클래스와 클래스간의 흐름을 그려놓은 설계도
<img src="https://velog.velcdn.com/images/deep-of-machine/post/d03b06ee-ca72-40cf-b3ce-03606ee5625d/image.png" alt=""></li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ROS] - ROS1 설치 (Ubuntu20.04, ROS Noetic)]]></title>
            <link>https://velog.io/@deep-of-machine/ROS-ROS1-%EC%84%A4%EC%B9%98-Ubuntu20.04-ROS-Noetic</link>
            <guid>https://velog.io/@deep-of-machine/ROS-ROS1-%EC%84%A4%EC%B9%98-Ubuntu20.04-ROS-Noetic</guid>
            <pubDate>Thu, 29 Sep 2022 06:25:39 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="ros1을-설치하기-전에-준비해야-할-것">ROS1을 설치하기 전에 준비해야 할 것</h1>
<p>ROS1은 Ubuntu 22.04를 지원하지 않는다. </p>
<ul>
<li>우리는 ROS1 Noetic을 사용할 것이기에, Ubuntu 20.04 버전을 준비해준다.</li>
</ul>
<hr>
<h2 id="1-설치-전-세팅">1. 설치 전 세팅</h2>
<h4 id="packagesrosorg-에서-package를-받아오기-위한-설정">packages.ros.org 에서 package를 받아오기 위한 설정</h4>
<pre><code>sudo sh -c &#39;echo &quot;deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main&quot; &gt; /etc/apt/sources.list.d/ros-latest.list&#39;</code></pre><h4 id="curl설치">cURL설치</h4>
<pre><code>sudo apt install curl</code></pre><h4 id="curl로-설치-키-설정">cURL로 설치 키 설정</h4>
<pre><code>curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -</code></pre><h4 id="apt를-최신버전으로-업데이트">apt를 최신버전으로 업데이트</h4>
<pre><code>sudo apt update</code></pre><hr>
<h2 id="2-ros-noetic-설치">2. ROS Noetic 설치</h2>
<h4 id="다음-명령을-사용-하여-ros-1-noetic-데스크탑을-설치합니다">다음 명령을 사용 하여 ROS 1 Noetic 데스크탑을 설치합니다.</h4>
<p><strong><em>주요 설치 코드</em></strong></p>
<pre><code>sudo apt install ros-noetic-desktop-full</code></pre><h4 id="기본-탑재-패키지-이외의-추가적인-패키지-설치">기본 탑재 패키지 이외의, 추가적인 패키지 설치</h4>
<ul>
<li>ex) slam-gmapping Package Install<pre><code>sudo apt install ros-noetic-slam-gmapping</code></pre><a href="https://index.ros.org/packages/page/1/time/#noetic">패키지 리스트 보기</a></li>
</ul>
<hr>
<h2 id="3-설치-후-환경-세팅">3. 설치 후 환경 세팅</h2>
<p>ROS 설치 후 매번 터미널을 켤때마다 </p>
<p><del>source /opt/ros/noetic/setup.bash</del></p>
<p>를 해줘야하는데, 귀찮으니 ~/.bashrc에 추가를 해준다.</p>
<h4 id="bashrc에-setupbash추가">~/.bashrc에 setup.bash추가</h4>
<pre><code>echo &quot;source /opt/ros/noetic/setup.bash&quot; &gt;&gt; ~/.bashrc</code></pre><pre><code>source ~/.bashrc</code></pre><h4 id="ros-package를-구축하기-위한-도구-및-기타-종속성을-설치">ROS Package를 구축하기 위한 도구 및 기타 종속성을 설치</h4>
<pre><code>sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential python3-roslaunch</code></pre><pre><code>sudo apt install python3-rosdep</code></pre><h4 id="initialize-update-rosdep">initialize, update rosdep</h4>
<pre><code>sudo rosdep init</code></pre><pre><code>rosdep update</code></pre><h2 id="4-ros-설치-확인">4. ROS 설치 확인</h2>
<h4 id="터미널에-roscore를-입력했을때-오류가-없으면-설치-된-것이다">터미널에 roscore를 입력했을때 오류가 없으면 설치 된 것이다.</h4>
<pre><code>roscore</code></pre>]]></description>
        </item>
    </channel>
</rss>