<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>siy.log</title>
        <link>https://velog.io/</link>
        <description>.</description>
        <lastBuildDate>Thu, 20 Jan 2022 16:43:51 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>siy.log</title>
            <url>https://images.velog.io/images/siyeon-hwang/profile/81ca98eb-f2f6-43dd-b8d2-8c928c5ce581/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. siy.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/siyeon-hwang" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[exp_06_텍스트 감성분석하기]]></title>
            <link>https://velog.io/@siyeon-hwang/exp06%ED%85%8D%EC%8A%A4%ED%8A%B8-%EA%B0%90%EC%84%B1%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@siyeon-hwang/exp06%ED%85%8D%EC%8A%A4%ED%8A%B8-%EA%B0%90%EC%84%B1%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 20 Jan 2022 16:43:51 GMT</pubDate>
            <description><![CDATA[<p>딥러닝을 통해 텍스트에 담긴 감성을 분석하는 방법이다. IMDB나 네이버 영화리뷰텍스트에 담긴 이용자의 감성이 긍정적인지 부정적인지 분류할 수 있는 딥러닝 모델을 구축하는 노드였다.</p>
<p>SNS 등에서 광범위한 분량의 텍스트를 쉽게 얻을 수 있다. 이 데이터에는 소비자들의 개인적, 감성적 반응이 담겨 있고, 실시간으로 트렌드를 빠르게 반영한다.</p>
<p>텍스트 감성분석 접근법은 크게 2가지로 나눌 수 있는데, 기계학습 기반 접근법과 감성사전 기반 접근법이다. 기계학습 기반 접근법의 경우, 데이터마다의 라벨이 부여되어 있고, 이를 학습시켜 예측하는 기법이다. 감성사전 기반 접근법의 경우, 미리 정의된 감성사전으로 데이터를 분석하기 때문에 라벨이 필요하지 않다. 대신 감성사전의 경우 분석 대상에 따라 단어의 감성 정도(점수)가 달라질 수 있다. 즉 같은 단어라도 대상에 따라 부정적일수도, 긍정적일 수도 있다는 의미이다. 또한 단순 긍부정을 넘어 그 원인이 되는 대상 속성 기반의 감성 분석이 어렵다. </p>
<p>텍스트 데이터는 순서가 중요하다. 이러한 순서를 워드 임베딩을 통해 전달하게 된다. 
<img src="https://images.velog.io/images/siyeon-hwang/post/d219bd67-a80f-4f89-986e-a476288282cb/image.png" alt="">
이런 식으로 말이다.</p>
<p>대략적으로 자연어처리의 과정을 살펴보면</p>
<ol>
<li><p>단어를 쪼개고 그 단어마다 인덱스를 부여한다.
즉, 수치화를 시킨다.</p>
</li>
<li><p>부여된 인덱스를 가지고 벡터를 만든다. 
인덱스만으로는 단어의 의미를 전달하기 어렵기 때문에 이 과정이 필요하다.
이를 워드임베딩이라고 한다.  </p>
</li>
<li><p>임베딩 벡터를 가지고 머신/딥러닝 모델에 적용시켜 분석한다.
모델로 RNN, 1-D CNN을 이용했다.</p>
</li>
</ol>
<p>또한 <strong>전이학습</strong>을 이용했다. 전이학습이란 특정 문제를 풀기 위해 학습한 모델을 
다른 문제를 해결하는 데에 재사용하는 것을 의미한다. 
사람도 무언가를 배우기 위해 제로베이스에서 시작하지 않고 자신이 지닌 이전의 경험과 지식을 동원하는 것처럼, 광범위한 데이터를 통해 미리 학습해 놓은 <strong>임베딩</strong>속에 녹아있는 의미, 문법 등의 부가적인 정보를 내가 만드려는 모델이 활용할 수 있는 피쳐로 활용하는 것이 훨씬 빠르고 정확하게 학습할 수 있는 방법이 된다. </p>
<p>그래서 이번 노드에선 사전에 학습된 Word2Vec 등의 임베딩 모델을 활용하여 학습을 진행했다. 영어 데이터의 경우에는 이 전이학습의 전후 차이가 극명했는데, 한국어 데이터의 경우, 영어데이터에 비해 단어의 수도 너무 적고, 전처리를 따로 해줘야했기 때문에 더 복잡했다. 전처리에서도 단어사전을 만드는 것 외에, 정규화 작업이 필요할 것 같다. 단어사전에 &#39;.&#39;이나 &#39;ㅋㅋ&#39;, &#39;...&#39; 이런 쓸모없는 단어들이 너무 많았다.</p>
<p>노드는 하루안에 끝내려고 하지 말고 이것저것 시도해보는 시간이 필요할 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[  딥러닝과 머신러닝]]></title>
            <link>https://velog.io/@siyeon-hwang/%EB%94%A5%EB%9F%AC%EB%8B%9D%EA%B3%BC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D</link>
            <guid>https://velog.io/@siyeon-hwang/%EB%94%A5%EB%9F%AC%EB%8B%9D%EA%B3%BC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D</guid>
            <pubDate>Wed, 19 Jan 2022 09:49:55 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/siyeon-hwang/post/b2b91529-2afb-405c-b470-61d5ab7dac2d/image.png" alt=""></p>
<h2 id="인공지능이란">인공지능이란</h2>
<p>사람이 직접 프로그래밍한 내용이 아니라 기계가 자체 규칙 시스템을 구축하는 과학을 의미한다. </p>
<h3 id="그-중에서도-머신러닝은">그 중에서도 머신러닝은</h3>
<p>데이터를 통해 스스로 학습하는 방법론을 말한다. 데이터를 분석하고, 데이터 안에 있는 패턴을 학습하며, 학습한 내용을 토대로 판단이나 예측을 한다.</p>
<h3 id="딥러닝은">딥러닝은</h3>
<p>머신러닝의 하위 집합으로 볼 수 있는데, 학습하는 모델의 형태가 신경망인 방법론을 말한다. </p>
<p>조슈아 벤지오는 딥러닝을 다음과 같이 정의했다.</p>
<blockquote>
<p>Deep learning is inspired by neural networks of the brain to build learning machines which discover rich and useful internal representations, computed as a composition of learned features and functions.</p>
</blockquote>
<p>의역하면, &#39;<em>뇌의 신경구조로부터 영감을 받아 신경망 형태로 설계된 딥러닝의 목표는, 
합성된 함수를 학습시켜서 풍부하면서도 내재적 표현을 찾아내는 machine을 구축하는 것이다.</em>&#39; 이다. </p>
<p>여기서 내재적 표현이란 무엇일까? </p>
<p>딥러닝에서는 표현(Representation)이라는 개념을 중요하게 여긴다.</p>
<p>예를 들어 아래와 같은 물체가 있다고 해보자. 
<img src="https://images.velog.io/images/siyeon-hwang/post/8a63f843-eec0-490e-9178-8bbf662e87ab/image.png" alt="">
이 꽃은 다양한 방법으로 <strong>&#39;표현&#39;</strong>될 수 있다. </p>
<ol>
<li><p><strong>분자형태</strong>로, 실제 데이터(꽃) 그 자체로의 표현이다.</p>
</li>
<li><p><strong>이미지</strong>로도 표현할 수 있다. 컴퓨터에서 이미지를 표현할 때 특정 사이즈를 가지는 2차원 배열로 표현이 된다. 이 2차원 배열에서 색상 (RGB)이 더해지면 3차원의 배열로 표현이 된다. </p>
</li>
<li><p><strong>표</strong>로 나타내는 방법도 있다. 해당 데이터가 가진 특징(featrue)들을 각 열마다 나타내고 어떤 값을 가지는 지 표현하는 것이다. 이렇게 표로 표현하는 방식은 해당 데이터의 어떤 특징을 표현할 것인지, 그 내용을 적합한 것들로 정의하는 과정이 필요하다. 꽃을 표현하는 데 머리카락의 색과 같은 열이 있으면 안되는 것처럼 말이다. 즉, 사람이 개입하게 된다.</p>
</li>
<li><p>마지막 표현 방법은 <strong>카테고리</strong>이다. 카테고리는 머신러닝에서 주로 &#39;예측하고자 하는 값&#39;으로 사용되기도 한다. 데이터를 카테고리로 표현하려면 &#39;어떤 카테고리가 있는지&#39;와 &#39;그 중 어떤 카테고리에 속하는지&#39;를 정하는 과정이 필요하다. 예를 들어 카테고리에 [&#39;무궁화&#39;, &#39;목련&#39;, &#39;개나리&#39;]등이 있다고 했을 때, 위의 데이터는 &#39;무궁화&#39;라는 카테고리로 표현할 수 있는 것이다. 하지만 만일 카테고리가 [&#39;강아지&#39;,&#39;고양이&#39;,&#39;여우&#39;]등이라면 이 중에서 선택해봤자 데이터를 표현하기 어렵다. 즉, 이 카테고리를 활용해 데이터를 표현할 때에도 사람의 개입이 강하게 들어간다. </p>
</li>
</ol>
<p>이처럼, 분자형태와 이미지의 표현은 raw한 감각적인 표현이다. 그저 감각기관만으로 받아들일 수 있는 데이터이다. 
반면, 표와 카테고리의 표현방식은 매우 추상적이고 내재적인 표현들이다. 사람의 개입이 강하게 들어가며, 그렇기 때문에 함축적으로 표현을 할 수 있게 된다.</p>
<p>위에서 언급한 조슈아의 딥러닝에 대한 정의를 보면,
결국 딥러닝의 궁극적인 목표는 학습된 함수를 이용하여 유용한 내재적 표현을 뽑아내는 것이다. 즉, 표나 카테고리와 같은 표현들을 사람의 개입 없이 딥러닝만으로 나타낼 수 있는 모델을 학습시키고자 하는 것이 목적이다. </p>
<p>딥러닝의 본질은 <strong>데이터의 표현을 학습</strong>하고, 데이터로부터 <strong>내재된 표현을 추출</strong>해내는 것이다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[sort()와 sorted()]]></title>
            <link>https://velog.io/@siyeon-hwang/sort%EC%99%80-sorted</link>
            <guid>https://velog.io/@siyeon-hwang/sort%EC%99%80-sorted</guid>
            <pubDate>Fri, 14 Jan 2022 10:13:33 GMT</pubDate>
            <description><![CDATA[<h3 id="sort--list의-메소드로-list값을-정렬하여-반환한다">sort() : list의 메소드로, list값을 정렬하여 반환한다.</h3>
<h3 id="sorted--내장함수로-정렬된-새로운-리스트를-반환한다">sorted() : 내장함수로, 정렬된 새로운 리스트를 반환한다.</h3>
<blockquote>
<h3 id="1-sort">1. sort()</h3>
</blockquote>
<ul>
<li><p>list.sort()를 하게 되면, list <strong>원본 값이 수정</strong>되어 정렬된다. 
예를 들어보면,
<img src="https://images.velog.io/images/siyeon-hwang/post/5a2886b3-a373-4638-a1a0-8ee2a4191aaf/sort1.png" alt="">
이런 식이다.  </p>
</li>
<li><p>list2의 값이 None으로 나타나는 것을 보니 sort()함수는 정렬된 값을 따로 반환하지 않고, <strong>원본을 in-place</strong> 식으로 변경하는 것 같다.</p>
</li>
<li><p>프로그래머스에서 사용된 코드를 예로 들어보면 </p>
<pre><code>def solution(participant, completion):
  participant.sort()
  completion.sort()
  for i in range(len(completion)):
      if participant[i] != completion[i]:
          return participant[i]
  return participant[len(participant)-1]</code></pre></li>
</ul>
<p>이런 식으로 사용할 수 있다. </p>
<ul>
<li>두번째, 세번째 줄에 보면 함수의 매개변수로 들어온 값을 sort()메소드를 이용해 정렬된 값으로 변경하고 다음 코드를 이어간다. </li>
<li>따로 변수에 지정할 필요가 없는 것이다.</li>
</ul>
<blockquote>
<h3 id="2-sorted">2. sorted()</h3>
</blockquote>
<ul>
<li><p>내장함수로서, <strong>원본객체는</strong> <strong>그대로</strong> 두고 정렬된 객체를 반환한다. 예를 들어보면,
<img src="https://images.velog.io/images/siyeon-hwang/post/f6470444-d658-4148-a998-3dbac329b9dd/sorted.png" alt="">
이런 식이다.
원본은 그대로이고, 정렬된 객체가 list2 에 저장되었다.</p>
</li>
<li><p>또한 sort()가 리스트만을 위한 메소드라면, 
sorted()는 어떤 <strong>iterable 객체라도</strong> 받을 수 있다. 
예를 들면, </p>
<pre><code>sorted({3: &#39;D&#39;, 2: &#39;B&#39;, 5: &#39;B&#39;, 4: &#39;E&#39;, 1: &#39;A&#39;})
</code></pre></li>
</ul>
<p>결과: [1, 2, 3, 4, 5]</p>
<pre><code>이런 식으로 딕셔너리를 넣어 정렬할 수 있다. 
하지만 이 코드는 결과값을 key값만 포함한다.

- 모든 값을 포함하고 싶다면, </code></pre><p>sorted({3: &#39;D&#39;, 2: &#39;B&#39;, 5: &#39;B&#39;, 4: &#39;E&#39;, 1: &#39;A&#39;}.items())</p>
<p>결과: [(1, &#39;A&#39;), (2, &#39;B&#39;), (3, &#39;D&#39;), (4, &#39;E&#39;), (5, &#39;B&#39;)]</p>
<pre><code>이렇게 뒤에 **dict.items()**를 활용하여 나타낼 수 있다. 

- 이 때 key값이 아닌 value 값을 기준으로 정렬하고 싶다면, **sorted() 함수**의 매개변수 중 하나인 **key**를 이용하여 정렬할 수 있다. </code></pre><p>dict = {3: &#39;D&#39;, 2: &#39;B&#39;, 5: &#39;B&#39;, 4: &#39;E&#39;, 1: &#39;A&#39;}
sorted(dict.items(), key = lambda x: x[1])</p>
<p>결과: [(1, &#39;A&#39;), (2, &#39;B&#39;), (5, &#39;B&#39;), (3, &#39;D&#39;), (4, &#39;E&#39;)]</p>
<pre><code>단,** key에는 lambda함수가 인자**로 전달된다.
결과를 보면 value 값을 기준으로 정렬이 된 것을 볼 수 있다. 
위의 lambda 함수에서 x[1]이 value 값이고, x[0]은 key값이다.
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[anaconda dlib 설치하기]]></title>
            <link>https://velog.io/@siyeon-hwang/anaconda-dlib-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@siyeon-hwang/anaconda-dlib-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 11 Jan 2022 03:29:21 GMT</pubDate>
            <description><![CDATA[<p>하.. 2시간동안 삽질한 결과 내 로컬 주피터에 dlib을 설치할 수 있었다.
그냥 아나콘다가서 검색해볼걸 구글에서 별의별 방법을 다 써도 안되던 설치가 단 세줄로 바로 설치됨...
내 컴은 가상환경을 설치 안해놔서 로컬로 어떻게 안되나 걱정했다</p>
<p>암튼 일단 실패한 4가지 방법들</p>
<ol>
<li>주피터 노트북에<pre><code>!pip install cmake
!pip install opencv-contrib-python dlib</code></pre></li>
</ol>
<p>보통 이렇게 하면 다 된다길래 바로 실행해 봤지만 cmake는 잘 설치되고 아래 dlib에서 오류가 났다. 이 때까지만 해도 visual studio 설치가 안 되어 있어서 호다닥 가서 설치하고 옴. 설치하다보면 무슨 옵션을 선택해야 하는 게 있는데 cmake있는 옵션 하나 클릭해서 설치</p>
<p>그러고 다시 아나콘다 가서 실행했다. 인고의 시간 끝에 얻은 결과는 에러..</p>
<p>다시 찾아보기 시작</p>
<p>찾아보니 wheel로 설치를 하면 된다나.. 그래서</p>
<ol start="2">
<li>다시 주피터 노트북에서<pre><code>!pip install dlib-19.22.99-cp39-cp39-win_amd64.whl</code></pre></li>
</ol>
<p>이걸 다운받고 실행. 역시나 실패</p>
<p>다시 폭풍 검색해서 찾은 코드가 </p>
<ol start="3">
<li>cmd창에 들어가<pre><code>conda update conda
</code></pre></li>
</ol>
<p>conda update anaconda</p>
<p>conda create -m env_dlib python3.8.3 #난 내 버전 썼음 여기서. 3.9.몇</p>
<p>conda activate env_dlib</p>
<p>conda install -c conda-forge dlib</p>
<p>python</p>
<p>import dlib</p>
<pre><code>
이 순서로 하면 된다는 정보를 얻어 바로 실행해봤다.
세번째 줄에서 바로 실패... 왜인가 생각해보니 저 env가 가상환경을 의미하는 거였다. ㅋㅋㅋㅋㅋ 하..

그래도 덕분에 내 아나콘다 업데이트 됨

다시 찾다가 

4. python cmd에서 설치하는 다른 방법을 찾았다. </code></pre><p>!pip install opencv-python</p>
<p>c:&gt;python -m pip install --user opencv-python (opeCV와 numpy가 설치 됨)
c:&gt;python -m pip install --user dlib (설치 안 됨)</p>
<p>dlib를 설치하려면 CMake를 설치해야 한다고? 
Sulastri(참고3번째 ) 님의 순서를 따라했더니 설치 된다! 이때 다운로드에 dlib를 설치하면 install이 안 됨. 신기하게 c:\에 다운받아 압출풀고 빌드하면 실행 됨
C:\dlib-19.17&gt;python setup.py build
C:\dlib-19.17&gt;python setup.py install
C:\dlib-19.17&gt;python</p>
<blockquote>
<blockquote>
<blockquote>
<p>import dlib      #(확인)
오류 안 뜨면 설치 완료</p>
</blockquote>
</blockquote>
</blockquote>
<p>출처: <a href="https://ng1004.tistory.com/101">https://ng1004.tistory.com/101</a> [공익(public good)의, 공익의 의한, 공익을 위한!]</p>
<pre><code>이걸 보고 재빠르게 download파일에 있던 내 dlib파일을 C:로 옮김.
그리고 저 코드를 실행한 결과 성공!!!!!!!

곧바로 주피터가서 import dlib을 해봤다.
근데 오류뜨더라..? 하...


결국 성공한 방법은

**아나콘다 prompt에 들어가서 이 순서대로** 실행한 것..</code></pre><p>conda install -c conda-forge dlib
conda install -c conda-forge/label/cf201901 dlib
conda install -c conda-forge/label/cf202003 dlib</p>
<pre><code>2시간 동안 아무것도 못하고 저것만 찾다가 성공해서 그런가
기록을 남겨놔야겠다 싶었다. 


근데 왜 저 4번째 방법은 성공했는데 주피터에선 안 뜬걸까.. anaconda환경이 아니라 이건가? 

암튼 로컬에서 쓰고싶다면 저 마지막 방법 써보기 
그냥 설치하고 싶으면 아나콘다.org 들어가서 검색하는게 나을지도
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Estimator]]></title>
            <link>https://velog.io/@siyeon-hwang/Estimator</link>
            <guid>https://velog.io/@siyeon-hwang/Estimator</guid>
            <pubDate>Fri, 07 Jan 2022 11:52:52 GMT</pubDate>
            <description><![CDATA[<h3 id="사이킷런의-주요-모듈-estimator">사이킷런의 주요 모듈: Estimator</h3>
<ul>
<li>데이터셋을 기반으로 머신러닝 모델의 파라미터를 추정하는 객체를 Estimator라고 한다. </li>
<li>사이킷런의 모든 머신러닝 모델은 estimator라는 파이썬 클래스로 구현되어 있다. </li>
<li>추정을 하는 과정, 즉 훈련은 Estimator의 fit()메서드를 통해 이뤄지고, 예측은 predict()메서드를 통해 이뤄진다.</li>
<li>오늘 주피터 실습에 사용한 Estimator객체는 LinearRegression()과 RandomForestClassifier()이다.</li>
<li>지도학습의 경우 fit()에 data와 target 모두 넣어주지만, 비지도학습의 경우에는 data만 넣어준다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Confusion Matrix]]></title>
            <link>https://velog.io/@siyeon-hwang/Confusion-Matrix</link>
            <guid>https://velog.io/@siyeon-hwang/Confusion-Matrix</guid>
            <pubDate>Thu, 06 Jan 2022 12:30:19 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/siyeon-hwang/post/2d11caa0-a055-4b9f-aa52-568f7be0dd0a/image.png" alt="">
<a href="https://d3s0tskafalll9.cloudfront.net/media/images/E-2-3.max-800x600_mMmzi4T.jpg">[https://d3s0tskafalll9.cloudfront.net/media/images/E-2-3.max-800x600_mMmzi4T.jpg]</a></p>
<p> 위의 그림은 <strong>confusion matrix</strong>를 나타낸다.
 각 행은 실제 데이터 클래스를 나타내고, 각 열은 예측한 데이터의 클래스 값을 나타낸다. </p>
<ul>
<li>TP(True Positive) : 실제 Positive 데이터를 Positive하다고 예측한 경우</li>
<li>TN(True Negative) : 실제 Negative 데이터를 Negative하다고 예측한 경우
----------위의 경우는 모두 제대로 예측한 경우들----------<ul>
<li>FP(False Positive) : 실제 Positive 데이터를 Negative하다고 예측한 경우 - 제 2 오류형</li>
<li>FN(False Negative) : 실제 Negative 데이터를 Positive하다고 예측한 경우 - 제 1 오류형</li>
</ul>
</li>
</ul>
<p>실제 사례를 들어 설명하자면</p>
<ul>
<li>TP : 실제 환자에게 암 판정</li>
<li>TN : 건강한 사람에게 건강하다 판정</li>
<li>FP : 건강한 사람에게 암 판정 - 제 2 오류형</li>
<li>FN : 실제 환자에게 건강하다 판정 - 제 1 오류형</li>
</ul>
<p>이러한 수치로 계산되는 성능 지표 중 대표적으로 쓰이는 것은 Accuracy, Recall(Sensitivity), Precision, f1score 이다. </p>
<p>Accuracy는 전체데이터 중 올바르게 판단한 데이터개수의 비율이다.</p>
<p>위의 표에서 볼 수 있듯이 Precision과 Recall의 분자는 모두 TP이다. 이 값은 올바르게 판단한 값이므로 높을수록 좋다. 하지만 분모에 있는 FN과 FP는 잘못 판단된 값이므로 낮을수록 좋다. </p>
<p>즉, Precision과 Recall값은 클수록 좋다. </p>
<ul>
<li>Precision 이 크려면 negative한데 positive라고 판단하는 경우가 적어야,</li>
<li>Recall이 크려면 positive한데 negative라고 판단하는 경우가 적어야 한다. </li>
</ul>
<p>예를 들어 스팸메일을 거르는 모델에서 스팸메일을 positive, 정상메일을 negative라고 생각할때, 정상메일(negative)을 스팸메일(positive)로 판단하면 안되기 때문에 Precision이 중요한 지표가 된다.</p>
<p>하지만 암환자를 진단하는 모델에서는, 암환자(positive)를 건강하다(negative)고 판단하면 문제가 생기므로 Recall 지표가 더 중요하다고 볼 수 있다.</p>
<p>F1score는 Recall과 Precision의 조화평균이다. 이에 대한 내용은 따로 글을 남겨야 할 듯.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[상속에서의 동등관계, 포함관계]]></title>
            <link>https://velog.io/@siyeon-hwang/%EC%83%81%EC%86%8D%EC%97%90%EC%84%9C%EC%9D%98-%EB%8F%99%EB%93%B1%EA%B4%80%EA%B3%84-%ED%8F%AC%ED%95%A8%EA%B4%80%EA%B3%84</link>
            <guid>https://velog.io/@siyeon-hwang/%EC%83%81%EC%86%8D%EC%97%90%EC%84%9C%EC%9D%98-%EB%8F%99%EB%93%B1%EA%B4%80%EA%B3%84-%ED%8F%AC%ED%95%A8%EA%B4%80%EA%B3%84</guid>
            <pubDate>Wed, 05 Jan 2022 10:04:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Is - a 관계 : 동등관계</p>
</blockquote>
<p>상속에서 자식클래스와 부모클래스는 is-a관계가 성립된다. 
is-a 관계는 &quot;a는 b이다.&quot; 관계이다. 
상속의 계층구조를 올바르게 설계했는지 알기 위해 is-a 관계가 성립하는 지를 생각해보면 된다. </p>
<ul>
<li>자동차는 탈것이다 (Car is a Vehicle).</li>
<li>강아지는 동물이다 (Dog is a animal).</li>
</ul>
<p>코드로 예시를 들어보자면,</p>
<pre><code>class Animal(object):
    pass

class Dog(Animal):
    def __init__(self, name):
        self.name = name</code></pre><p>위의 코드에서 클래스 Animal과  Dog 은 &quot;개는 동물이다.&quot;의 관계가 성립한다. 둘은 동등관계이다. </p>
<blockquote>
<p>Has-a 관계 : 포함관계</p>
</blockquote>
<p>만약 &quot;a는 b를 가지고 있다&quot;와 같은 has-a(포함)관계가 성립되면 이 관계는 상속으로 모델링을 하면 안 된다.</p>
<ul>
<li>도서관은 책을 가지고 있다(Library has a book).</li>
</ul>
<p>객체지향프로그래밍에서 이 포함관계는 구성관계(composition) 또는 집합관계(aggregation)를 의미한다. </p>
<p>구성관계에서는 하나의 객체가 다른 객체의 부품이 된다. 
집합관계에서는 하나의 객체가 다른 객체를 소유한다. </p>
<p>코드로 예시를 들어보면, </p>
<pre><code>class Animal(object):
    pass

class Dog(Animal):
    def __init__(self, name):
        self.name = name

class Person(object):
    def __init__(self, name):
        self.name = name
        self.pet = None

dog1 = Dog(&quot;dog1&quot;)
person1 = Person(&quot;아이펠&quot;)
person1.pet = dog1</code></pre><p>위 코드에서는 Person이라는 class 가 추가되었다.
Person클래스를 보면 pet 이라는 인스턴스 변수를 비워두고,
아래에서 dog1이라는 객체를 참조하고 있다. </p>
<p>즉, dog1이라는 객체가 person1이라는 객체에 포함이 된다고 볼 수 있는 것이다. </p>
<br>
_출처: 천인국, 『어서와 파이썬은 처음이지!』, 인피니티북스(2019), 527-528p._




]]></description>
        </item>
        <item>
            <title><![CDATA[MNIST 데이터로 이미지 분석하기]]></title>
            <link>https://velog.io/@siyeon-hwang/MNIST-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@siyeon-hwang/MNIST-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 04 Jan 2022 09:25:39 GMT</pubDate>
            <description><![CDATA[<ol>
<li>데이터 준비하기
1) 데이터 불러오기 
2) 데이터 전처리하기(행렬변환, 정규화, reshape)</li>
<li>딥러닝 네트워크 설계하기
1) 객체생성 (model = keras.models.Sequential())
2) Layers 쌓기
3) model.summary() 로 확인하기</li>
<li>딥러닝 네트워크 학습시키기
1) model.compile()
2) model.fit()</li>
<li>성능 확인하기
1) model.evaluate(xtestdata, ytestlabel, verbose)
2) model.predict(xtestdata)</li>
</ol>
<p>이러한 순서로 진행된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[One-Hot Encoding]]></title>
            <link>https://velog.io/@siyeon-hwang/One-Hot-Encoding</link>
            <guid>https://velog.io/@siyeon-hwang/One-Hot-Encoding</guid>
            <pubDate>Mon, 03 Jan 2022 09:54:23 GMT</pubDate>
            <description><![CDATA[<p><strong>One-Hot Encoding</strong> 이란 <strong>범주형 변수</strong>의 카테고리 별로 <strong>이진 특성</strong>을 만들어 <strong>해당하는 특성만 1, 나머지는 0</strong>으로 만드는 방법이다. </p>
<blockquote>
<p>독립변수(예측변수)가 범주형 변수일 경우 이용할 수 있다. </p>
</blockquote>
<p>데이터 분석을 할 때 예측하려는 값이 연속형 변수가 아닌 범주형 변수일 경우, 그 값을 분석모델에 적용시키면 아래와 같이 에러가 난다. </p>
<pre><code>ValueError: could not convert string to float</code></pre><p>이러한 에러를 해결하기 위해 범주형 변수를 수치로 변경해야 한다. </p>
<p>예를 들면, 아래와 같은 데이터가 있다고 하자.
<img src="https://images.velog.io/images/siyeon-hwang/post/7059a336-f076-4a91-950a-e9627ee1229b/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202022-01-03%20183749.png" alt=""></p>
<p>이 DataFrame을 보면, 성별(sex)과 지역(region)의 경우 string으로 되어 있음을 알 수 있다. 이러한 경우 선형회귀를 돌리기 위해 데이터를 넣으면, 위에서 언급한 에러가 나타난다. </p>
<p>이를 해결하기 위해서, sex의 경우 female은 0, male은 1로 변경하여 수치로 만들 수 있다. </p>
<p>그렇다면 region의 경우는?
(참고로 위의 데이터 region은 [&#39;northeast&#39;, &#39;northwest&#39;, &#39;southeast&#39;, &#39;southwest&#39;] 이렇게 4개의 값을 가지고 있다.)</p>
<p>어떻게 생각하면 순서대로 0, 1, 2, 3으로 변환하여 바꾸면된다고 생각할 수 있다. 
하지만 이 값들은 서로 간 서열이 있거나 거리가 달라서는 안되는 값들이다. </p>
<p>이런경우 One-Hot Encoding을 쓰게 된다. </p>
<ul>
<li>범주형 변수가 가지는 값 만큼 변수를 만들고 자기 위치만 1, 나머지는 0을 만들어서 변환하는 것이다.</li>
<li>region의 경우에는</li>
</ul>
<p>&#39;northeast&#39;:[1,0,0,0]
&#39;northwest&#39;:[0,1,0,0]
&#39;southeast&#39;:[0,0,1,0]
&#39;southwest&#39;:[0,0,0,1] 로 변환하면 된다.</p>
<p>이렇게 변환하기 위한 방법으로 두 가지를 들 수 있다. </p>
<ul>
<li><p>pandas의 get_dummies()함수를 이용하거나</p>
<ul>
<li><pre><code>import pandas
</code></pre></li>
</ul>
<p>region = pd.get_dummies(DataFrame[&#39;region&#39;])</p>
</li>
</ul>
<pre><code></code></pre><ul>
<li><p>sklearn의 OneHotEncoder를 이용하면 된다.</p>
<ul>
<li><pre><code>from sklearn.preprocessing import OneHotEncoder
</code></pre></li>
</ul>
<p>onehot = OneHotEncoder(handle_unknown=&#39;ignore&#39;)</p>
<p>region = df[&#39;region&#39;].to_numpy().reshape(-1,1)</p>
<p>onehot.fit(region)</p>
<p>onehot.transform(region).toarray()
```</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[if __name__ == "__main__" 의미]]></title>
            <link>https://velog.io/@siyeon-hwang/if-name-main-%EC%9D%98%EB%AF%B8</link>
            <guid>https://velog.io/@siyeon-hwang/if-name-main-%EC%9D%98%EB%AF%B8</guid>
            <pubDate>Fri, 31 Dec 2021 09:47:49 GMT</pubDate>
            <description><![CDATA[<p>lms에서 병렬처리와 메인함수를 배우다가</p>
<pre><code>if __name__ == &quot;__main__&quot;:
</code></pre><p>이런 코드를 접하게 되었다.
메인함수 선언이라고 하는데 
이걸 왜쓰나 찾아보니</p>
<p><a href="https://madplay.github.io/post/python-main-function">https://madplay.github.io/post/python-main-function</a>
<a href="https://dojang.io/mod/page/view.php?id=2448">https://dojang.io/mod/page/view.php?id=2448</a>
이 글들에 잘 설명되어 있었다.</p>
<p>잘 모르면 다시 들어가서 보면 될 듯.</p>
<p>만일 저 선언이 없다면, 다른 모듈에서 불러서(import)사용할 때, 부르자마자 함수가 수행될 수 있다.
()</p>
<p>메인함수 선언을 통해 import를 해도 <strong>필요한 함수를 필요한 때</strong> 사용할 수 있는 것이다</p>
<p>시작파일일 때만 이 함수를 쓰게 하라는 것의 의미가 import를 통해 다른 모듈로 불려갔을 땐, 함수가 바로 수행되지 않고, import한 파일의 필요한 함수를 호출할 때에만 실행할 수 있다는 뜻인 듯.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[generator와 iterator]]></title>
            <link>https://velog.io/@siyeon-hwang/generator%EC%99%80-iterator</link>
            <guid>https://velog.io/@siyeon-hwang/generator%EC%99%80-iterator</guid>
            <pubDate>Thu, 30 Dec 2021 10:10:03 GMT</pubDate>
            <description><![CDATA[<p><strong>generator</strong>란, 키워드 yield를 사용하여 iterator를 생성함으로써 그때 그때 필요한 값을 사용할 수 있는 기능이다. </p>
<p><a href="https://bluese05.tistory.com/56">이 링크</a>를 보면 보다 자세한 정의가 나와있다.</p>
<blockquote>
<p>그럼 iterator란 무엇일까! </p>
</blockquote>
<p>우선 iterator는 iterable과는 좀 다른 의미를 가진다.</p>
<ul>
<li>*<em>iterable *</em>(이터러블) : member를 하나씩 차례로 호출할 수 있는 객체이다.<br>ex) list, tuple, dictionary, string 등</li>
<li><strong>iterator</strong>(이터레이터) : next()메소드로 <strong>데이터를 순차적으로 불러올 수 있는</strong> 객체이다. 만일 더 이상 불러올 데이터가 없다면 StopIteration exception을 발생시킨다.</li>
</ul>
<p>하지만, iterable 객체라고 해서 모두 iterator인 것은 아니다.</p>
<p>iter()함수를 사용하여 iterator로 만들어 줄 수 있지만, 
이 함수를 쓰지 않더라도 <strong>for문</strong>으로** 데이터를 순차적**으로 불러오는 것이 가능하다. 
(for문으로 looping 하는 동안 python내부에서 이 iterable객체를 iterator로 변환해준다고 한다.)</p>
<blockquote>
<p>generator란</p>
</blockquote>
<p>-generator란 앞서 말했듯이 키워드 <strong>yield</strong>를 사용하여 함수로부터 iterator를 생성해주는 함수이다. </p>
<p> -일반함수와의 차이점은 yield 뿐이다.</p>
<pre><code>def generator(n):
    i = 0
    while i &lt; n:
        yield i
        i += 1

g = generator(5)  #객체생성

for x in g:
    print(x)

&gt;&gt;&gt;0
   1
   2
   3
   4

출처: https://bluese05.tistory.com/56 [ㅍㅍㅋㄷ]


위의 코드를 보면 yield가 어떻게 작동하는지 알 수 있다.

1. for문이 실행되면, 우선 generator함수가 호출된다.

2. 함수 실행 중 yield를 만나면 함수가 호출된 for문으로 가 print(x)를 우선 수행한다. 
그럼 첫번째 값인 0이 출력된다.

**그렇다고 generator함수가 끝난게 아니라 yield에서 값을 반환한 후 그대로 유지하고 있는 상태임

3. 반환이 된 후, 다시 함수로 돌아가 yield 이후 구문인 i += 1 부터 수행한다.

4. 이후에 2번 3번 과정을 반복하게 된다.</code></pre><br>
yield는 '양보하다'라는 뜻을 가지고 있다. <br>
(밖으로 양보한다 라고 보면 됨)<br><br>
따라서 객체를 생성하는 시점에 우리가 원하는 값을 반환하는게 아니고<br>
for문을 통해 불러올 때 값을 하나씩 가져오는 것이다<br>

<br>
정리하자면, generator는 많은 데이터를 메모리에 올려놓고 시작할 필요없이<br>
현재 처리해야할 데이터를 하나씩 불러와서 사용할 수 있다.


]]></description>
        </item>
        <item>
            <title><![CDATA[mutable과 immutable]]></title>
            <link>https://velog.io/@siyeon-hwang/mutable%EA%B3%BC-immutable</link>
            <guid>https://velog.io/@siyeon-hwang/mutable%EA%B3%BC-immutable</guid>
            <pubDate>Wed, 29 Dec 2021 14:09:17 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>mutable (가변) 객체
-list, dictionary, set 등
-객체 생성 후 객체의 값을 바꿀 수 있음
-변수는 값이 수정된 객체를 가리키게 됨</p>
</li>
<li><p>immutable (불변) 객체
-int, float, string, tuple 등
-객체를 생성한 후 객체의 값을 바꾸는 것은 불가
-변수는 해당 값을 가진 다른 객체를 나타냄</p>
<p><a href="https://ledgku.tistory.com/54"><strong>여기</strong>에 쉽게 설명되어 있음</a></p>
</li>
</ul>
<blockquote>
<p><a href="https://webnautes.tistory.com/1181">https://webnautes.tistory.com/1181</a>
이 블로그의 내용을 바탕으로 이해한 것 정리하려고 함.</p>
</blockquote>
<p>파이썬에서 모든 것은 객체(object)이고 객체가 생성된 후 id는 변하지 않는다. id는 python에서 객체가 실제 저장된 메모리 주소를 나타낸다. </p>
<p>id함수를 이용하면 객체의 id를 알 수 있는데, 
위의 블로거는 <strong>id 함수</strong>와 <strong>is 연산자</strong>를 통해 mutable한 객체와 immutable한 객체를 비교했다. </p>
<p>즉, 변수에 대입한 값을 수정한 뒤 id함수로 비교하는 것. 
같으면 mutable(가변)객체, 다르면 immutable(불변)객체가 되는 것. 
(값은 같을 수 있어도, 저장된 주소는 다를 수 있기 때문)</p>
<blockquote>
<p>변수</p>
</blockquote>
<ul>
<li>변수는 값을 담는 그릇, 포인터 정도로 이해하면 된다.
이 때 변수는 저장공간을 할당받지 않으며 그 데이터값(객체)를 가리키기만 한다. </li>
</ul>
<ol>
<li><p>변수를 <strong>새로운 객체에 대입</strong>하거나 <strong>다른 변수에 대입</strong>하는 경우에서의_ mutable과 immutable 객체간 차이_</p>
<p><strong>1) mutable 객체</strong>_ ex. list</p>
<ul>
<li><p>a = [1, 2, 3]
b = a
a <strong>is</strong> b &gt;&gt; True</p>
<p>a.append(4)
a <strong>is</strong> b &gt;&gt; True</p>
<p><em>#a의 값과 b의 값을 보여줌</em>
a;b <br>&gt;&gt; [1, 2, 3, 4]<br>[1, 2, 3, 4]</p>
<p>즉, 변수 a와 a가 저장된 변수b는 같은 주소를 가리키고 있기 때문에 변수 a의 <strong>값이 변해도 주소가 바뀌지 않음</strong>.</p>
</li>
</ul>
<p>** 2) immutable 객체**_ ex. int</p>
<ul>
<li>a = 1
b = a
a is b &gt;&gt; True</li>
</ul>
<p><em>#둘은 같은 객체를 가리키고 있음</em></p>
<p>a = 2
a is b &gt;&gt; False
<em>#둘은 다른 객체를 가리키고 있음</em></p>
<p>a;b <br>&gt;&gt;2<br>1</p>
<p>즉, 불변객체인 int는 <strong>변수의 값이 변하면 새로운 주소</strong>를 할당한다. </p>
</li>
</ol>
<blockquote>
<p>   얕은복사(shallow copy)와 깊은복사(deep copy)
 <a href="https://blueshw.github.io/2016/01/20/shallow-copy-deep-copy/">참고 블로그</a></p>
</blockquote>
<p>얕은복사와 깊은복사는 객체가 다른 객체를 포함하고 있는 경우(복합객체)를 통해 잘 이해할 수 있다. </p>
<ul>
<li><p>얕은복사(shallow copy)</p>
<pre><code>import copy
a = [1, [1, 2, 3]]
b = copy.copy(a)   # a를 얕은 복사한 것
print(b)   &gt;&gt; [1, [1, 2, 3]]

b[0] = 100
print(b)   &gt;&gt; [100, [1, 2, 3]]
print(a)   &gt;&gt; [1, [1, 2, 3]]

c = copy.copy(a)   # a 얕은 복사
c[1].append(4)
print(c)   &gt;&gt; [1, [1, 2, 3, 4]]
print(a)   &gt;&gt; [1, [1, 2, 3, 4]]</code></pre><ul>
<li><p>두번째 블록을 보면 b에서 변경된 원소가 a에는 반영되지 않는다.
반면, 세번째 블록의 경우 c에서 변경된 원소가 a에도 반영이 되었다.</p>
</li>
<li><p>b의 수정값이 a에서 적용되지 않은 이유는 
100과 1 모두 immutable객체(int)이기 때문에
값이 바뀌자마자 새로운 주소를 할당한다.</p>
</li>
<li><p>c의 내부리스트[1, 2, 3]이 [1, 2, 3, 4]로 변경된 이유는 
이 내부 객체가 mutable객체(list)이기 때문이고, mutable객체는 같은 주소를 참조한다. </p>
</li>
<li><p>즉, 얕은 복사는 복합객체의 틀만 복사한다. 복합객체 속의 객체
(내부리스트)은 복사하지 못한다는 것. </p>
<pre><code></code></pre></li>
</ul>
</li>
</ul>
<pre><code></code></pre><ul>
<li>깊은복사 (deep copy)<pre><code>import copy
</code></pre></li>
</ul>
<p>a = [1, [1, 2, 3]]
b = copy.deepcopy(a)  #깊은 복사</p>
<p>b[0] = 100
b[1].append(4)
print(b)   &gt;&gt;&gt; [100, [1, 2, 3, 4]]</p>
<p>print(a)   &gt;&gt;&gt; [1, [1, 2, 3]]</p>
<ul>
<li>깊은 복사의 경우 복합객체의 내부객체까지 모두 복사한다.
따라서, b에서 변경한 내용이 a까지 미치지 못한다.<pre><code></code></pre></li>
</ul>
<blockquote>
<p>정수 (Integer)</p>
</blockquote>
<p>immutable한 객체이므로, 수정하면 새로운 객체가 생성된다.</p>
<p>예를 들어 1이라는 정수를 a에 대입한 값(a = 1)과 그냥 1이라는 정수는 같은 주소값(id(a) == id(1))을 가지지만**, 이 변수 a에 1을 더한 값을 다시 a에 저장하면(a = a + 1) a는 이전의 a와는 다른 새로운 객체가 되어 다른 주소값을 가진다. </p>
<p><em>** 정수 -5 ~ 256 까지는 효율성을 위해 기존 메모리에 생성되어 있는 객체를 참조한다. 따라서 a = 1 과 b = 1에서 a와 b의 주소값은 같다. 마찬가지로 변수 a에 대입한 1과 그냥 1의 주소값도 같다.</em></p>
<p>이 범위를 벗어나게 되면 새로운 주소를 할당하는데 변수에 대입되기 전까지는 같은 메모리 위치를 재사용한다.</p>
<p>예를 들어, 변수에 대입하지 않은 257이라는 값과 변수에 대입하지 않은 258이라는 값의 메모리 위치는 같다. 
(id(257) == id(258))
257을 변수에 대입하게 되면(a = 257), 258은 다른 메모리 위치를 가진다. (id(a) != id(258))</p>
<h4 id="뭐라고-쓴지-모르겠다-나중에-수정해야지">뭐라고 쓴지 모르겠다. 나중에 수정해야지</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[고정소수점수/ 부동소수점수]]></title>
            <link>https://velog.io/@siyeon-hwang/%EA%B3%A0%EC%A0%95%EC%86%8C%EC%88%98%EC%A0%90%EC%88%98-%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90%EC%88%98</link>
            <guid>https://velog.io/@siyeon-hwang/%EA%B3%A0%EC%A0%95%EC%86%8C%EC%88%98%EC%A0%90%EC%88%98-%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90%EC%88%98</guid>
            <pubDate>Tue, 28 Dec 2021 10:09:11 GMT</pubDate>
            <description><![CDATA[<p><strong>float</strong>이란 _floating point number_의 준말로, <strong>부동소수점수</strong>라고도 한다. 
이는 고정소수점수와 같이 이해하면 좋은데, 모두 소수를 표현하는 방식이라고 보면 된다. </p>
<h4 id="소수점-이진수로-변환하는-법은">소수점 이진수로 변환하는 법은</h4>
<p> <a href="https://woo-dev.tistory.com/93">https://woo-dev.tistory.com/93</a> 이 링크를 참조하면 좋다.</p>
<h4 id="고정-소수점이란">고정 소수점이란??</h4>
<ul>
<li><p>고정소수점에서는 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해두고, 그 비트만큼의 이진수로 표현한다. </p>
<h4 id="부동-소수점이란">부동 소수점이란??</h4>
</li>
<li><p>부동 소수점에서는 소수점의 위치를 고정하지 않고, 그 위치를 나타내는 수를 따로 적어 유효숫자를 나타내는 <strong>가수</strong>와, 소수점의 위치를 나타내는 <strong>지수</strong>로 나누어 표현한다.</p>
</li>
<li><p>IEEE 754는 부동소수점을 표현하는 가장 널리 쓰이는 표준이다.</p>
<p><a href="https://velog.io/@thms200/%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90-0.1-0.1-02-jbk5jrde3a">이 <strong>페이지</strong>를 참고하면 더 자세히 알 수 있다</a></p>
</li>
</ul>
<blockquote>
<p>ex) 1.0을 고정소수점 수와 부동소수점 수로 표현해보자</p>
</blockquote>
<ul>
<li>고정소수점수=&gt; 1bit(부호) + 16bit(정수) + 15bit(소수) </li>
<li>부동소수점수=&gt; 1bit(부호) + 8bit(지수) + 23bit(가수)</li>
</ul>
<p>우선 <strong>고정소수점</strong>의 경우,</p>
<ol>
<li><p><strong>부호</strong>는 양수이기 때문에 0</p>
</li>
<li><p><strong>정수</strong>부분의 경우, 1을 이진수로 바꾸면 1이지만, 16bit만큼의 공간을 채우기 위해 <em>0000000000000001</em> 이 된다.</p>
</li>
<li><p><strong>소수</strong>부분의 경우, 0이 되고 이는 마찬가지로 15bit만큼의 공간이 할당되어 있어 0으로 채우면,</p>
</li>
</ol>
<p>따라서_ 0 0000000000000001 000000000000000_ 가 1.0의 <strong>고정소수점수</strong>가 된다.</p>
<p>정리하면, 고정소수점수는 단순히 이진수로 바꿔주면 된다</p>
<hr>
<p><strong>부동소수점</strong>의 경우,</p>
<ol>
<li><p>마찬가지로 <strong>부호</strong>는 양수이기 때문에 0</p>
</li>
<li><p><strong>지수</strong>부분의 경우, 바이어스 상수와 소수점을 옮긴 지수만큼의 수를 더해 이를 이진수로 바꿔준다.
_(즉, 1.0에서는 더 이상 소수점을 옮길 필요가 없기 때문에 
bias 상수(2^(8bit-1)-1)인 127과 2^0의 지수인 0을 더해준 127을 이진수로 바꾼 값(1111111)이 된다.) _ 
따라서 01111111
<a href="https://thrillfighter.tistory.com/349">bias상수 더보기</a></p>
</li>
<li><p><strong>가수</strong>부분은 소수점 이하의 0부분을 이진수로 바꿔주면 되는데, 이 경우 0은 0이기 때문에 23bit를 0으로 채워주면</p>
</li>
</ol>
<p>따라서 <em>0 01111111 00000000000000000000000</em> 이 1.0의 <strong>부동소수점수</strong>가 된다. </p>
<p>정리하면, 부동소수점수는 소수를 (1)이진수로 바꿔준 후, (2)소수점을 이동시켜 위의 과정을 거치면 된다.  </p>
]]></description>
        </item>
    </channel>
</rss>