<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>13ae_13ao.log</title>
        <link>https://velog.io/</link>
        <description>통계를 판다</description>
        <lastBuildDate>Wed, 14 Feb 2024 01:20:02 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. 13ae_13ao.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/13ae_13ao" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[혼공학습단11기] 회고]]></title>
            <link>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A811%EA%B8%B0-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A811%EA%B8%B0-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Wed, 14 Feb 2024 01:20:02 GMT</pubDate>
            <description><![CDATA[<p>방학 때 뭘 하면 좋을까 생각하던 때!!!
sns에서 마주치게 된 혼공학습단 모집글..
아직도 기억이 난다ㅎㅎ
가끔 혼공뫄 핵심단어노트 공유? 그런거 올라올 때마다 좋아했었는데 진짜 마음먹고 공부할 수 있는 이런 이벤트? 기회가 있어서 너무너무 좋았다!
오랜만에 서점가서 직접 책도 사고!
짧지만 길었던 6주지만 정말 이 책을 열심히 보면서 따라하고 이해해보려고 했고, 무엇보다 또 좋았던 건!!
velog로 overleaf 문법도 좀 알게 되었다!
논문 쓸 때 어차피 쓰게 될 프로그램인데 이런 기회에 또 알게 되어 좋았다.</p>
<p>그리고 매주 올라오는 우수혼공족 발표가 더 열심히 하게끔 열정에 부채질을 해주어 끝까지 완주할 수 있는 좋은 계기가 되었다.
근데 다른 사람들이 열심히 하는 것도 보면서 대체 다들 어떻게 이렇게 정리를 잘한담? 이라고 생각하기도 하고 점차 나도 overleaf문법을 배우며 표도 넣어보고 수식도 넣어보고 이모티콘도 써보고 그러긴 했다.
ㅋㅋㅋㅋㅋ부족한 내 모습에 살짝...놓을까 했지만 그냥 어차피 처음인데! 라고 생각하며...쭉...하하핳ㅎ..자기만족..!!</p>
<p>또 좋은 점은 많은 개념들을 직접 스스로 찾아보기도 하며 공부할 수도 있었다. 앞서 말한 우수혼공족분들의 정리를 보며 다시 배우기도 하고 실제로 구글링을 더 하면서 배운 것도 있었다!</p>
<p>혼자서 한 책을 다 떼기가 참 어려운데!!!!!!!!
매주 댓달아주시는 족장님의 따수운 한마디도 너무 재밌고 함께 하는 분들이 많아서 더 즐거운 공부였는데 게다가 심지어!!!!!!!!
기프티콘을 막?!!! 어?!!!! 맛있는 것까지 사먹을 수 있게 해주시고!!!
진짜...짱짱 혼공..!!!!!!!👍</p>
<p>다음 방학엔..뭘 혼공해볼까나....?ㅋㅋㅋㅋ
또 sns에 나타나주라! 혼공!!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신] 6주차_ 딥러닝을 시작합니다]]></title>
            <link>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-6%EC%A3%BC%EC%B0%A8-%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%84-%EC%8B%9C%EC%9E%91%ED%95%A9%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-6%EC%A3%BC%EC%B0%A8-%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%84-%EC%8B%9C%EC%9E%91%ED%95%A9%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Sat, 10 Feb 2024 14:05:36 GMT</pubDate>
            <description><![CDATA[<h3 id="7-1-인공신경망">7-1. 인공신경망</h3>
<p>📌 패션 MNIST 데이터 준비
<img src="https://velog.velcdn.com/images/13ae_13ao/post/ee47cf88-9266-429d-b0b2-4ec1b01c082c/image.png" alt=""></p>
<ul>
<li>훈련 데이터는 총 60000개이며 28 * 28 의 형태로 돼있고, 훈련데이터의 타겟데이터는 60000개의 원소가 있는 1차원배열이다.</li>
<li>테스트 데이터는 총 10000개이며 28 * 28의 형태이고 타겟 데이터는 10000개의 원소가 있는 1차원배열이다.</li>
<li>각 픽셀은 0<del>255사이의 정숫값을 가지고 보통 255로 나누어 0</del>1 사이의 값으로 정규화를 함.</li>
</ul>
<table>
<thead>
<tr>
<th align="center">레이블</th>
<th align="center">0</th>
<th align="center">1</th>
<th align="center">2</th>
<th align="center">3</th>
<th align="center">4</th>
<th align="center">5</th>
<th align="center">6</th>
<th align="center">7</th>
<th align="center">8</th>
<th align="center">9</th>
</tr>
</thead>
<tbody><tr>
<td align="center">패션아이템</td>
<td align="center">티셔츠</td>
<td align="center">바지</td>
<td align="center">스웨터</td>
<td align="center">드레스</td>
<td align="center">코트</td>
<td align="center">샌달</td>
<td align="center">셔츠</td>
<td align="center">스니커즈</td>
<td align="center">가방</td>
<td align="center">앵클 부츠</td>
</tr>
</tbody></table>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/d56b1614-2adb-4c90-8fe6-4b2db620e394/image.png" alt=""></p>
<p>각 레이블 별로 샘플이 6000개씩 있음을 확인하였다.</p>
<p>📌 로지스틱 회귀로 패션 MNIST 분류</p>
<ul>
<li><p>훈련 샘플이 60000개이므로 샘플을 하나씩 꺼내서 모델을 훈련하는 확률적 경사 하강법이 적절!</p>
</li>
<li><p>reshape으로 1차원 배열로 만들기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/4d7b0238-f6b5-4e80-822c-819b2ef4a8a3/image.png" alt="">
28 * 28 = 784 이므로 2차원이 1차원으로 바뀌었음!</p>
</li>
<li><p>반복횟수를 늘려가며 교차검증의 성능 확인
<img src="https://velog.velcdn.com/images/13ae_13ao/post/0edef972-f4ab-441f-b673-5e24b2c1d452/image.png" alt=""></p>
</li>
</ul>
<p>→ 반복횟수를 늘려도 성능이 크게 향상되지는 않음.</p>
<ul>
<li>패션 MNIST 데이터에서의 로지스틱 회귀 공식
z_티셔츠 = w1 $\times$ (픽셀1) + w2 $\times$ (픽셀2) + ... + w784 $\times$ (픽셀784) + b
z_바지 = w1&#39; $\times$ (픽셀1) + w2&#39; $\times$ (픽셀2) + ... + w784&#39; $\times$ (픽셀784) + b
...
z_앵클 부츠 = w1&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39; $\times$ (픽셀1) + w2&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39; $\times$ (픽셀2) + ... + w784&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39; $\times$ (픽셀784) + b</li>
</ul>
<p>총 10개의 레이블에 대해 각각 로지스틱 회귀공식이 존재하며 각 레이블의 가중치와 절편은 모두 다르다.
선형 방정식을 모두 계산한 후 소프트맥스 함수를 통해 각 클래스에 대한 확률을 알 수 있다.</p>
<p>💡인공 신경망
: 생물학적 뉴런에서 영감을 얻어 모양을 본떠 만든 수학 모델로, 비정형데이터(이미지, 음성, 텍스트)에서 뛰어난 성능을 발휘하여 주목받고 있는 새로운 머신러닝 알고리즘이다. 딥러닝이라고 부르기도 한다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/835efcf9-2f93-4507-a307-cb44ce6b2e21/image.png" alt=""></p>
<p>입력데이터가 들어있는 입력층, 클래스로 예측된 최종 반환값인 출력층, 여러 가중치들과 절편들로 이루어져있다.
이때, 최종 반환값인 출력층은 뉴런으로 이루어져 있다.</p>
<ul>
<li><p>딥러닝 라이브러리 텐서플로를 이용
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9910d6f2-24b1-4084-935d-1fb1c529ab4f/image.png" alt=""></p>
</li>
<li><p>텐서플로를 백엔드로 하는 케라스 라이브러리 이용
<img src="https://velog.velcdn.com/images/13ae_13ao/post/2bb2ddf9-bcbb-45e2-9c70-6364e338f47f/image.png" alt=""></p>
</li>
<li><p>훈련 세트와 검증 세트로 분리
교차 검증을 하기에 시간이 오래걸리고 데이터셋이 충분히 크므로 검증 점수가 안정적이므로 검증 세트를 별도로 분리</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/3bc3f29e-7d78-4e2d-87c4-2c46d9d2a8e7/image.png" alt=""></p>
<ul>
<li>밀집층(784개의 픽셀로 만들어진 입력층과 10개의 뉴런으로 이루어진 출력층을 연결하는 선들) 만들기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9d6a6a1e-63cc-444f-8517-7ea56aa0cdad/image.png" alt="">
→ keras.layers.Dense(뉴런 수, 뉴런의 출력에 적용할 함수, 입력의 크기를 튜플로 )</li>
</ul>
<p>다중분류일때에는 여러 선형 방정식의 출력값을 0~1 사이로 압축학 전체합이 1이 되도록 만들어야해서 활성화함수로 <strong>&quot;softmax&quot;</strong> 함수이용!
이진분류일때에는 활성화함수로 <strong>&quot;sigmoid&quot;</strong> 함수이용!</p>
<ul>
<li><p>모델 만들기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/267af1da-20a8-4497-a2d5-c81d8d325f93/image.png" alt=""></p>
</li>
<li><p>compile 메서드로 손실함수의 종류와 측정값 지정
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9c951cc9-531d-48c6-9e72-609d540c9c1b/image.png" alt=""></p>
</li>
</ul>
<p>이진분류에서 주로 손실함수는 &#39;binary_crossentropy&#39;
타깃 : 0 이면
(1-타깃) $\times$ -log(1-a)
a가 0에서 멀어질수록 손실이 아주 큰 양수
타깃 : 1 이면
타깃 $\times$ -log(a)
a가 1에서 멀어질수록 손실이 아주 큰 양수</p>
<p>다중분류에서 주로 손실함수는 &#39;categorical_crossentropy&#39;
타깃에 해당하는 확률만 남기고 나머지에는 모두 0을 곱해줌.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/8d6e3b15-0366-4a85-95f2-a1bf0beafd60/image.png" alt=""></p>
<p>→ 티셔츠 샘플값(타깃 : 1)에서 손실을 낮추려면 첫번째 뉴런의 활성화 출력 a1의 값을 가능한 1에 가깝게 만들어야 함!
그전에 타깃값을 해당클래스만 1이고 나머지는 모두 0인 배열로 만들어주는 원-핫 인코딩 과정이 필요한데 텐서플로에서는 정수로된 타깃값이어도 원-핫 인코딩 과정없이 바로 sparse_categorical_crossentropy로 손실을 계산할 수 있다.
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9068b23f-1379-4fc8-8d6b-30aed40457c4/image.png" alt=""></p>
<p>metrics = &#39;accuracy&#39; : 정확도를 함께 출력해달라는 의미</p>
<ul>
<li>모델 훈련
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9d89fb22-b987-4fe5-837f-519f18029e34/image.png" alt="">
→ 5번 반복하여 정확도가 85%가 넘었고, 검증세트에서도 살짝 낮은 정확도를 보였음.</li>
</ul>
<h2 id="미션">미션</h2>
<p>p.366 확인문제</p>
<p>1) ③
가중치는 입력 특성과 뉴런 개수에 하나씩 대응하도록 있으니까 1000개,
절편은 뉴런마다 하나씩 있으니까 10개
그러므로 총 1010개의 모델 파라미터가 필요하다.</p>
<p>2) ②
이진분류모델일때에는 활성화 함수로 &#39;sigmoid&#39;
다중분류모델일때에는 활성화 함수로 &#39;softmax&#39;</p>
<p>3) ④
compile(loss=&#39;&#39;,metrics = )
손실함수와 출력하고 싶은 측정값을 지정해줌.</p>
<p>4) ①
정수값을 타깃으로 가지는 다중 분류문제에서 케라스 모델의 compile 메서드에 지정할 함수는 sparse_categorical_crossentropy
원-핫 인코딩없이 바로 손실값 계산 가능</p>
<h3 id="7-2-심층-신경망">7-2. 심층 신경망</h3>
<p>📌 층을 추가해보자!</p>
<ul>
<li>데이터 불러오기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/cb0b26cb-28f6-4d6d-8c37-941b7511c272/image.png" alt=""></li>
</ul>
<ul>
<li>입력층과 출력층 사이의 모든 층을 은닉층이라고 하는데,
출력층에서의 활성화 함수보다 다양한 함수들을 사용하며 각 층의 계산이 의미가 있도록 선형 계산을 비선형적으로 비틀어주어야 한다!</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/f2f1150d-1a23-4a7c-bae0-31590a4b4121/image.png" alt=""></p>
<p>은닉층의 활성화함수를 sigmoid $1 \over 1+e^{-z}$ 로 출력값을 0과 1 사이로 만듦.
뉴런의 개수를 100이라 했는데 경험을 통해 적절한 뉴런의 개수를 정하면 된다. 단, 출력층의 뉴런보다는 많게!!!</p>
<p>출력층의 활성화 함수는 다중분류이므로 softmax로 설정.</p>
<p>📌 심층 신경망 만들기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/bd8e47f8-08b0-4fe9-8eca-b10ddd272e2d/image.png" alt=""></p>
<p>Sequential 클래스 객체에 여러 층을 추가하고 맨 마지막에는 출력층을 적어줄 것!
여러 층은 입력 데이터를 여러번 학습하여 인공신경망이 좋은 성능을 내도록 함.</p>
<p>summary를 보면,
모델에 있는 층이 순서대로 나오고 층 이름, 클래스, 출력 크기, 모델 파라미터 개수가 처음 추가한 은닉층부터 출력층까지 모두 출력된다.</p>
<p>출력 크기를 보면 모두 None인데 기본 미니배치 크기가 32임에도 어떤 배치 크기에도 유연하게 대응할 수 있도록 샘플 개수를 고정하지 않았다.
그리고 은닉층의 뉴런을 100개로 두어서 100개가 출력된 것.
즉, 784개의 픽셀 입력값이 100개로 압축됨.</p>
<p>모델 파라미터 개수는 각 784개의 픽셀에 100개의 가중치가 붙고, 100개의 절편이 있으므로 78500이다.</p>
<p>📌 층을 추가하는 다른 방법
① Sequential 클래스의 생성자 안에서 Dense 클래스의 객체를 만드는 경우
<img src="https://velog.velcdn.com/images/13ae_13ao/post/ac11cabf-5dce-4f62-b915-f55bbd5ad2d0/image.png" alt=""></p>
<p>② Sequential 클래스의 객체를 만들고 이 객체의 add() 메서드를 호출하는 경우
<img src="https://velog.velcdn.com/images/13ae_13ao/post/272074b7-2627-423c-b3e4-1fa23ec7a89f/image.png" alt=""></p>
<ul>
<li>추가한 층으로 5번 반복하여 모델학습
<img src="https://velog.velcdn.com/images/13ae_13ao/post/3309e93f-d191-4589-80c5-543874cc4208/image.png" alt=""></li>
</ul>
<p>📌 ReLu 함수</p>
<ul>
<li>시그모이드함수
오른쪽과 왼쪽 끝으로 갈수록 그래프가 납작하게 수렴하는 형태여서 올바른 출력을 만드는데 어려웠다. 특히 층이 많아질수록 학습을 더 어렵게 한다!
<img src="https://velog.velcdn.com/images/13ae_13ao/post/d6d37745-565c-4e9a-a4cd-c174aff55516/image.png" alt=""></li>
</ul>
<p>▲ 시그모이드 함수 그래프
출처 : <a href="https://icim.nims.re.kr/post/easyMath/64">https://icim.nims.re.kr/post/easyMath/64</a></p>
<ul>
<li>ReLu 함수
입력이 양수일때에만 그냥 입력값을 출력하고 음수일 경우에는 0으로 만들어줌. 이미지처리에서 좋은 성능을 내줌.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/62a4574e-7d3d-40f0-b537-dd6bb3ae1d16/image.png" alt=""></p>
<p>▲ ReLu 함수 그래프
출처 : <a href="https://wikidocs.net/60683">https://wikidocs.net/60683</a></p>
<hr>
<p>Flatten 클래스를 이용하여 배치차원을 제외한 나머지 입력차원을 모두 일렬로 펼침.
그 후 추가된 층의 활성화 함수를 relu로 설정
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9a4e0864-499d-4115-b960-4d1c5d143046/image.png" alt=""></p>
<p>Flatten층을 통해 얼만큼의 입력데이터가 은닉층에 전달된것인지 알 수 있다.
reshape을 이용하지 않은 훈련데이터를 다시 준비하여 모델을 훈련
<img src="https://velog.velcdn.com/images/13ae_13ao/post/8a511217-e42a-439a-9b51-7f95d90a6ebb/image.png" alt=""></p>
<p>→ 시그모이드를 쓸때보다 좀 더 향상됨.
<img src="https://velog.velcdn.com/images/13ae_13ao/post/0073e809-6962-45ca-9f8e-3c6bd856fb37/image.png" alt=""></p>
<p>→ 검증데이터에서도 마찬가지</p>
<p>📌 옵티마이저</p>
<ul>
<li><p>하이퍼 파라미터 : 모델이 학습하지 않아 사람이 지정해주어야 하는 파라미터
ex) 은닉층의 개수, 뉴런 개수, 활성화 함수, 층의 종류, 배치 사이즈 매개변수, 에포크 매개변수 등</p>
</li>
<li><p>옵티마이저 : 신경망의 가중치와 절편을 학습하기 위한 알고리즘
ex) 케라스의 다양한 경사하강법 알고리즘 : SGD(기본, 미니배치), 네스테로프 모멘텀, RMSprop, Adam</p>
</li>
</ul>
<p>1) SGD 옵티마이저 : learning_rate, momentum, 네스테로프 모멘텀
<img src="https://velog.velcdn.com/images/13ae_13ao/post/b70888cb-c035-48f9-bfc4-86d51595957a/image.png" alt=""></p>
<p>모멘텀 &gt; 0 : 이전의 그레디언트를 가속도처럼 사용하는 모멘텀 최적화를 사용. 보통 0.9이상 사용
네스테로프 모멘텀 = True : 모멘텀 최적화를 2번 반복하여 구현</p>
<p>2) Adagrad, RMSprop 옵티마이저 : 적응적 학습률 사용</p>
<ul>
<li>적응적 학습률 : 모델이 최적점에 가까이 갈수록 학습률을 낮추는데 그때의 학습률
<img src="https://velog.velcdn.com/images/13ae_13ao/post/e4c57a50-e129-43dc-b8f2-cfef04b76a19/image.png" alt=""></li>
</ul>
<p>3) Adam 옵티마이저 : 모멘텀 최적화와 RMSprop의 장점을 접목
<img src="https://velog.velcdn.com/images/13ae_13ao/post/b245c02a-d597-4bd2-8d68-4590b5457e2f/image.png" alt=""></p>
<h2 id="선택미션">선택미션</h2>
<p>p.390-391 확인문제</p>
<p>1) ②
add() 메서드에는 층을 추가하고 Dense 클래스에는 (뉴런수, 활성화함수, 입력 크기)를!</p>
<p>2) ②
케라스에서 층을 1차원으로 펼칠 때는 Flatten</p>
<p>3) ③
이미지 분류에는 relu 활성화함수가 좋다!</p>
<p>4) ①
Adagrad, RMSprop, Adam은 적응적 학습률을 사용하는 옵티마이저</p>
<h3 id="7-3-신경망-모델-훈련">7-3. 신경망 모델 훈련</h3>
<p>📌 손실곡선
History 객체에 훈련 과정에서 계산된 손실과 정확도 값이 저장되어 있으므로 이를 사용하여 그래프를 그려보자!</p>
<ul>
<li><p>패션 MNIST 데이터를 훈련 세트와 검증세트로 나누기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/6b1e3747-e2c2-46da-a1c3-5aad877ca19f/image.png" alt=""></p>
</li>
<li><p>함수를 통해 모델 만들기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/572db56f-5141-4aed-a9da-cb601d782e25/image.png" alt=""></p>
</li>
</ul>
<p>if의 의미 : model_fn() 함수에 층을 추가하면 은닉층 뒤에 또 하나의 층이 추가되는 것.</p>
<ul>
<li><p>fit의 결과를 history에 저장
<img src="https://velog.velcdn.com/images/13ae_13ao/post/d6b5e1ef-b8ad-481a-8f8b-ae1f18575662/image.png" alt=""></p>
</li>
<li><p>history안의 key값 확인
<img src="https://velog.velcdn.com/images/13ae_13ao/post/56387522-6054-4d8d-a2a7-aff71c9defb9/image.png" alt=""></p>
</li>
<li><p>에포크에 따른 손실값 그래프로 나타내기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/90fdb839-c7d7-404b-9156-125236eb59e8/image.png" alt=""></p>
</li>
<li><p>에포크에 따른 정확도 그래프로 나타내기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/b6e162c7-bdd4-4339-89bc-d102ef05c992/image.png" alt=""></p>
</li>
<li><p>에포크 횟수를 20으로 늘려서 손실값 그래프로 나타내기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/19a62eb2-f478-43fd-9448-ab05f51267b5/image.png" alt=""></p>
</li>
</ul>
<p>→ 손실이 감소함.</p>
<p>📌 검증 손실</p>
<p>에포크에 따른 과대적합과 과소적합을 알려면 검증세트에 대한 점수도 필요.</p>
<ul>
<li><p>fit 메서드의 validation_data 매개변수에 검증에 사용할 입력과 타깃값을 튜플로 만들어서 전달
<img src="https://velog.velcdn.com/images/13ae_13ao/post/199bb1ca-966b-409c-afb5-01b7d8c6b4b2/image.png" alt=""></p>
</li>
<li><p>history에서 key값 확인
<img src="https://velog.velcdn.com/images/13ae_13ao/post/1b593a74-fbd8-47fe-8828-da0a241a553c/image.png" alt=""></p>
</li>
<li><p>검증 손실과 훈련 손실 모두 그래프에 나타내어 비교
<img src="https://velog.velcdn.com/images/13ae_13ao/post/37cf4476-003b-43cd-8e50-77df24675e3a/image.png" alt=""></p>
</li>
<li><p>과대적합을 막기위해 Adam 옵티마이저를 이용하여 손실 그래프 비교 
<img src="https://velog.velcdn.com/images/13ae_13ao/post/94bc0b2a-3e95-4cac-8466-9ace9c1a81de/image.png" alt=""></p>
</li>
</ul>
<p>📌 드롭 아웃
: 훈련 과정에서 층에 있는 일부 뉴런의 출력을 랜덤하게 0으로 만들어서 과대적합을 막는 방법. 특정 뉴런에 과대하게 의존하는 것을 줄일 수 있음.
일부 뉴런의 출력이 없을 경우에도 더 안정적인 예측을 생성해줌.</p>
<ul>
<li>모델을 만들때 30%를 드롭아웃
<img src="https://velog.velcdn.com/images/13ae_13ao/post/7886dbf7-9979-4524-81d9-5539813cd7fb/image.png" alt=""></li>
</ul>
<p>→ 출력을 0으로 만들었다해서 배열의 크기가 달라지지 않았음!!</p>
<ul>
<li>검증 손실과 훈련 손실 모두 그래프에 나타내어 비교
<img src="https://velog.velcdn.com/images/13ae_13ao/post/e196b2ce-25fa-46c0-9543-d4f91aafefe2/image.png" alt=""></li>
</ul>
<p>📌 모델 저장과 복원</p>
<ul>
<li><p>10번의 에포크 횟수로 모델 훈련
<img src="https://velog.velcdn.com/images/13ae_13ao/post/4d144200-e5d5-4f9b-8618-45b047049e35/image.png" alt=""></p>
</li>
<li><p>훈련된 모델의 파라미터는 save_weights()에 저장돼 있음. HDF5 포맷
<img src="https://velog.velcdn.com/images/13ae_13ao/post/0aa48478-2fcf-4d99-83c6-e5fd5f63774a/image.png" alt=""></p>
</li>
<li><p>모델 구조와 모델 파라미터를 함께 저장하는 save() 메서드
<img src="https://velog.velcdn.com/images/13ae_13ao/post/489e6ba7-8d48-45e1-9d85-d6e034583a3c/image.png" alt=""></p>
</li>
<li><p>두 파일 확인
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9603b239-a477-4071-a58e-fabf811d2499/image.png" alt=""></p>
</li>
<li><p>두 모델 비교</p>
</li>
</ul>
<p>1) 훈련하지 않은 새로운 모델을 만들고, 훈련된 모델의 파라미터를 읽어서 사용</p>
<ul>
<li><p>12000개의 샘플에 각각 10개의 확률값이 나오는데 가장 큰 값의 인덱스를 골라 타깃 레이블과 비교하여 정확도 계산
<img src="https://velog.velcdn.com/images/13ae_13ao/post/d790b42a-74b7-4d82-9be1-1b303e55ccbc/image.png" alt=""></p>
</li>
<li><p>검증 세트의 정확도 출력
<img src="https://velog.velcdn.com/images/13ae_13ao/post/7eb51700-1234-4503-a37c-b93872ad7eb1/image.png" alt=""></p>
</li>
</ul>
<p>→ 20번을 반복하여 모델을 훈련하여 검증 점수가 상승하는 지점을 확인한 후 과대적합 되지 않은 에포크만큼 다시 훈련함. 즉, 두 번씩 반복하여 모델을 훈련한 것. =&gt; 해결책 : 콜백!</p>
<p>2) 아예 파라미터 파일에서 새로운 모델을 만들어 바로 사용
💡콜백 : 훈련 과정 중간에 어떤 작업을 수행할 수 있게 하는 객체</p>
<ul>
<li><p>ModelCheckpoint 콜백 : 에포크마다 모델을 저장하는데 save_best_only=True 매개변수로 가장 낮은 검증 점수를 만드는 모델을 저장할 수 있다.</p>
</li>
<li><p>모델을 만들고 compile 메서드 호출
<img src="https://velog.velcdn.com/images/13ae_13ao/post/3549fdc7-70b3-4e26-ab11-3c137354441e/image.png" alt=""></p>
</li>
</ul>
<p>→ 모델이 훈련한 후에 best-model.h5에 최상의 검증 점수를 낸 모델이 저장됨.</p>
<ul>
<li><p>과대적합이 시작되기 전에 훈련을 미리 중지하기 위해 조기종료를 이용
EarlyStopping 콜백을 ModelCheckpoint 콜백과 함께 사용하여 가장 낮은 검증 손실의 모델을 파일에 저장하고 검증 손실이 다시 상승할 때 훈련을 중지한 후 현재 모델의 파라미터를 최상의 파라미터로 되돌림.
<img src="https://velog.velcdn.com/images/13ae_13ao/post/ea512fb9-054f-470f-8080-46f9efac1bcb/image.png" alt=""></p>
</li>
<li><p>10번째 에포크에서 훈련이 중지됨. patience = 2 이므로 최상의 모델은 8번째 에포크일때
<img src="https://velog.velcdn.com/images/13ae_13ao/post/4034d62d-237b-4a2e-a80e-de3ff30690ef/image.png" alt=""></p>
</li>
<li><p>훈련 손실과 검증 손실 그래프
<img src="https://velog.velcdn.com/images/13ae_13ao/post/7ec62570-87d6-426c-8bab-ccdb65a9e178/image.png" alt=""></p>
</li>
<li><p>검증세트에 대한 성능 확인
<img src="https://velog.velcdn.com/images/13ae_13ao/post/bdb5b113-80ad-4c54-8d92-2663ebfd7a9c/image.png" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신] 5주차_ 비지도 학습]]></title>
            <link>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-5%EC%A3%BC%EC%B0%A8-%EB%B9%84%EC%A7%80%EB%8F%84-%ED%95%99%EC%8A%B5</link>
            <guid>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-5%EC%A3%BC%EC%B0%A8-%EB%B9%84%EC%A7%80%EB%8F%84-%ED%95%99%EC%8A%B5</guid>
            <pubDate>Thu, 01 Feb 2024 15:32:30 GMT</pubDate>
            <description><![CDATA[<p>💡 비지도 학습 : 타겟이 없을때 데이터 패턴을 찾거나 구조를 파악하는 머신러닝</p>
<ul>
<li>군집 : 비슷한 샘플끼리 그룹으로 모으는 작업</li>
<li>클러스터 : 군집 알고리즘에서 만든 그룹</li>
</ul>
<p>☞ 문제 : 타깃이 없을때 과일 이미지를 종류별로 분류하는 방법?</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/72ac630b-9414-4415-ac6b-dac4bc237bb1/image.png" alt=""></p>
<p>과일사진데이터의 처음 100개는 사과, 그 다음 100개는 파인애플, 나머지 100개는 바나나로 이루어져있다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/a124d8ce-e2c2-4d85-a7ed-2b1e2a6cde69/image.png" alt=""></p>
<p>300개의 사진샘플이 있고, 하나의 샘플이 100 * 100의 픽셀로 이루어져있다고 생각하면 됨!</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/bc123693-a821-4054-8dbc-723d40d3bc1d/image.png" alt=""></p>
<p>첫번째 이미지 : 어두운색(0) &lt;----------------&gt; 밝은색(255)</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/da9c83ca-5826-444a-a4ed-124824dbc41b/image.png" alt=""></p>
<p>알아보기 좋게 흑백반전 이미지 : 밝은색(0) &lt;----------&gt; 어두운색(255)
큰 출력값에 의미부여하도록 만들어주는 것이 좋다!</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/bdc7f751-115e-4d15-a8df-cbfa47cef0c4/image.png" alt=""></p>
<hr>
<p>2차원 배열을 1차원 배열로 만들어 주는 것이 계산할 때 좋다!
<img src="https://velog.velcdn.com/images/13ae_13ao/post/f7366615-f4fd-4b27-b111-e01162a7e1c1/image.png" alt=""></p>
<p>사과 샘플은 100개이고, 배열의 크기가 10000으로 변환되었다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/604e6239-cf59-4408-a494-4fc706353904/image.png" alt=""></p>
<p>각 사과 샘플들 픽셀 평균을 계산한 결과</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/68a0495d-9c0a-414b-a51f-c546f57f1a15/image.png" alt="">
→ 바나나는 밝은 부분이 많고, 파인애플은 어두운 부분이 많다.
반면, 사과는 어두운 부분이 많은데 약간 덜 어두운 부분과 고루 있는 편으로 보여진다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/c9798777-9676-4104-9c4c-b318beb76d6e/image.png" alt="">
→ 각 클러스터별로 막대그래프로 나타내보았더니
사과는 가운데 부분이 어둡고, 파인애플은 울퉁불퉁한 표면때문인지 오르락내리락하는 부분이 있고, 바나나는 정가운데 부분만 어두워서 그런지 정규분포처럼 보인다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/ce2525ab-77e7-404e-921f-e835d8614a96/image.png" alt="">
→ 평균값으로 만든 이미지인데 얼추 과일들의 이미지와 비슷하게 나온다.</p>
<p>☞ 그럼, 평균값에 가까운 이미지들을 골라보자!</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/96b8d309-492b-4c2b-a319-e9637a3a4012/image.png" alt=""></p>
<p>먼저, (원래 fruits 데이터 - 사과 샘플의 평균)에 절댓값을 취해주고
그 값들의 평균을 구한 후 
가장 작은 값 순서대로 100개를 골라서 이미지로 출력</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/b00abb66-39d1-46aa-b4ff-f79742b9118a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/551f4d35-e06b-4e1b-94bf-3dea719a9f82/image.png" alt=""></p>
<p>→ 사과 샘플의 평균과 가까운 사진들이 모두 사과사진!! 🍎</p>
<p>바나나도 시도해보았다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/9e7d7dfa-046d-4dc7-b7b3-b068b3e37b92/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/0689619b-1576-4812-9f44-79549f6ee346/image.png" alt=""></p>
<p>→ 바나나도 대부분 바나나 사진이 나왔다..! 🍌 눈치없는..사과...도..</p>
<hr>
<p>☞ 진짜 비지도 학습일땐, 평균값을 구할 수 없다.
이럴땐!! k-means 알고리즘 사용!!!</p>
<ul>
<li>k-means 알고리즘 : 랜덤하게 정한 클러스터 중심(센트로이드)를 계속해서 업데이트하여 최적의 클러스터를 구성하는 알고리즘
① 임의로 k개의 클러스터 중심을 지정
② 각 샘플들을 가장 가까운 클러스터 중심으로 클러스터링 되도록 지정
③ 위와 같이 클러스터링된 샘플들의 평균값을 계산하여 새로운 클러스터 중심으로 변경
④ 클러스터 중심이 변하지 않을때까지 위의 과정을 반복
cf) 클러스터 중심(센트로이드) : k-means 알고리즘이 만든 클러스터에 속한 샘플들의 특성 평균값</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/3adbccb4-5628-4b2f-b0fd-1013f34effd7/image.png" alt=""></p>
<p>각 클러스터별 샘플의 개수를 확인한 후 
각 클러스터를 확인하기 위해서 이미지를 출력해봐야 한다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/a119cde7-9297-470e-8d71-544d350b7fae/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/4659da6a-3bcc-4153-838c-9eece92f5193/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/8eb6c12c-5a86-4306-a2b1-90536ec370f3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/341ac369-e912-4dd7-84f9-41c2248a986c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/8efe85b7-a456-45bf-a945-87763e4c5925/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/147e5573-d366-4ea4-b8df-8d7abbf2ed34/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/d10dd6ea-1c5d-4552-8c5f-f5766a66060b/image.png" alt=""></p>
<p>→ 첫번째 : 파인애플, 두번째 : 바나나, 세번째 : 사과
완벽하게 구분해내지는 못했지만 비지도 학습이니까 괜찮은 편!
🤔 근데 축을 없애려고 axis(&#39;off&#39;) 썼는데 책처럼 왜 깔끔하게 나오는게 아니라 축이 출력된건지....흠..</p>
<ul>
<li>각 클러스터의 중심을 이미지로 출력해보자.
<img src="https://velog.velcdn.com/images/13ae_13ao/post/c8582b75-4e5a-4b97-9fd7-eef27722f13b/image.png" alt=""></li>
</ul>
<p>→ 클러스터와 비슷하게 출력됨.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/b0b09787-f2cd-4958-87ee-2f42eba22ac5/image.png" alt=""></p>
<p>🚨 여기서 fruits_2d[100] 이라고 쓰면 (10000, )크기의 배열이 되므로 슬라이싱 연산자를 사용해서 fruits_2d[100:101]로 (1,10000) 크기의 배열을 전달해야 한다!!</p>
<p>→ 그렇게 나온 클러스터 중심까지의 거리는 첫번째 클러스터가 가장 가까웠고, 그래서 예측한 클러스터의 인덱스가 0이었다.</p>
<ul>
<li>알고리즘을 반복한 횟수는 n_iter_ 속성에 저장된다.
<img src="https://velog.velcdn.com/images/13ae_13ao/post/32a61e6d-df03-4a89-8e0a-2eaa11678fa0/image.png" alt=""></li>
</ul>
<p>✔️ 엘보우 방법 : 최적의 클러스터 개수 k 찾는 방법으로 클러스터의 개수를 늘려가면서 이너셔의 변화를 관찰</p>
<ul>
<li>이너셔 : 클러스터 중심과 클러스터에 속한 샘플 사이의 거리의 제곱합
→ 클러스터에 속한 샘플이 얼마나 가깝게 모여 있는지를 나타내는 값
→ 클러스터의 수 ↑ → 각 클러스터 내 샘플수 ↓ → 이너셔 ↓ </li>
</ul>
<p>클러스터의 수를 증가시키면서 이너셔를 그래프로 그렸을때 꺾이는 지점부터는 클러스터의 수를 늘려도 클러스터에 밀집된 정도가 개선되지 않고, 이너셔가 더이상 줄어들지 않음.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/95ae47b3-4f29-490c-9e4f-8636191e1e1b/image.png" alt=""></p>
<p>→ k =3 일때 이후로 기울기가 완만해졌음. 하지만 명확하게 줄어들지는 않았음.</p>
<hr>
<p>☞ 너무 많은 사진 데이터를 줄일 수 있는 방법은? : 차원축소
데이터를 가장 잘 나타내는 일부 특성을 선택하여 데이터 크기를 줄이고 지도학습 모델의 성능을 향상시킬 수 있는 방법
ex) PCA(주성분분석)</p>
<ul>
<li><p>차원 
1차원배열(벡터)에서의 차원 : 원소의 개수
2차원이상의 배열에서의 차원 : 축
ex) 행, 열</p>
</li>
<li><p>주성분분석이란,
데이터에 있는 분산이 큰 방향을 찾는 것으로, 분산이 큰 방향은 더 잘 퍼져있어서 데이터를 고루 설명할 수 있다.</p>
</li>
</ul>
<p>⭐ 주성분벡터 : 원본데이터에 있는 어떤 방향으로 주성분벡터의 원소갯수는 원본데이터에 있는 특성갯수와 같음.</p>
<p>⭐ 주성분은 원본 데이터와 차원이 같고 주성분으로 바꾼 데이터는 차원이 줄어듦!!!</p>
<p>⭐ 주성분이 가장 분산이 큰 방향이므로 주성분에 투영하여 바꾼 데이터는 원본이 가지고 있는 특성을 가장 잘 나타냄.</p>
<p>첫번째 주성분 벡터는 분산이 제일 큰 방향으로 찾아낸 후 그 다음 주성분 벡터는 첫 번째 벡터에 수직이고 분산이 가장 큰 방향을 찾음.</p>
<p>과일 이미지 데이터를 2차원 넘파이 배열로 바꾼 후 50개의 주성분으로 PCA 수행</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/d3d53cf3-436d-4328-9c2f-8114782b23a2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/654ba9a3-0269-4529-9d86-e8e10f4ab258/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/ae4556cc-c1c0-49d4-9c9b-76e6fcc208dc/image.png" alt=""></p>
<p>→ 첫번째 주성분이 가장 데이터를 잘 설명하므로 뚜렷하게 보이고 갈수록 흐릿해지고 알아볼 수 없는 경향이 보인다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/e2cd61b6-8d8a-4622-b162-92e27a747478/image.png" alt=""></p>
<p>→ pca한 데이터는 원래 데이터보다 크기가 줄어들었다!</p>
<ul>
<li>pca한 데이터를 원래 데이터로 되돌리기</li>
</ul>
<p>줄어든 차원에서 다시 원본 차원으로 손실을 최대한 줄이면서 복원할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/1a3492a9-0463-43cf-87aa-7793890a265d/image.png" alt=""></p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/13ae_13ao/post/9ec97cfd-c218-482e-9851-dd785375a587/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/13ae_13ao/post/df688c92-9d83-4efb-a954-1471cc045210/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/13ae_13ao/post/909b0e0b-fa3f-4d0e-9551-142e3f1be1cf/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>→ 50개의 특성이 분산을 가장 잘 보존하도록 변환되어 잘 복원됨!</p>
<ul>
<li>설명된 분산 : 주성분이 원본 데이터의 분산을 얼마나 잘 나타내는지 기록한 값</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/62bf0ade-8496-4222-a16b-9ea0906488da/image.png" alt=""></p>
<hr>
<p>🔥 원래 데이터 vs pca로 축소한 데이터</p>
<p>먼저, 로지스틱회귀로 교차 검증을 수행해보자.
교차검증시 타겟데이터가 필요하므로 생성 후 교차검증
<img src="https://velog.velcdn.com/images/13ae_13ao/post/e700ec1e-edc5-4244-9b3b-b7277f46c514/image.png" alt=""></p>
<p>→ 50개의 특성을 사용해도 정확도가 100%가 나옴.</p>
<ul>
<li>원하는 설명된 분산의 비율에 도달할 때까지 자동으로 주성분을 찾아보자!</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/6b88738d-fc0c-427d-a82f-8d4d691a73bf/image.png" alt=""></p>
<p>→ 2개의 특성만으로도 99%를 설명할 수 있다.</p>
<ul>
<li>차원 축소된 데이터로 k-means 알고리즘으로 클러스터 찾기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/78dca317-59ec-4857-8da2-28b2c0aa3035/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/5df88c2c-9079-4235-a79e-94379aa3137a/image.png" alt=""></p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/13ae_13ao/post/0e475742-49ba-454b-bb06-5d3e56215266/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/13ae_13ao/post/782da421-dc70-4565-9e94-47b27b86d286/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/13ae_13ao/post/2665a299-9798-4d8e-b377-c9199b5e693e/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>클러스터별로 나누어 산점도 그리기</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/201a77b6-5eaf-409d-ad74-569e43328355/image.png" alt=""></p>
<p>→ 2개의 특성만으로도 산점도가 잘 구분되는 양상이지만 사과와 파인애플은 겹치는 부분이 있어서 혼동을 일으킬 수 있을것.</p>
<h3 id="선택미션">선택미션</h3>
<p>p.337 확인문제</p>
<ol>
<li><p>②
주성분 벡터의 원소 개수 = 원본 데이터셋에 있는 특정계수</p>
</li>
<li><p>①
샘플 수는 같으니까 1000그대로이고, 크기만 100개에서 10개로  줄어들었으므로 (1000,10)</p>
</li>
<li><p>①
주성분의 분산이 가장 큰 것이므로 첫번째 주성분이다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신] 4주차_ 트리 알고리즘]]></title>
            <link>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-4%EC%A3%BC%EC%B0%A8-%ED%8A%B8%EB%A6%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-4%EC%A3%BC%EC%B0%A8-%ED%8A%B8%EB%A6%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Thu, 01 Feb 2024 11:05:31 GMT</pubDate>
            <description><![CDATA[<h3 id="5-1-결정트리">5-1. 결정트리</h3>
<ul>
<li>데이터셋 불러오기
<img src="https://velog.velcdn.com/images/o3o3bae/post/e088067e-ba12-4134-9f05-ffdf6ea270e7/image.png" alt=""></li>
</ul>
<p>null값 확인 : 데이터.info( )
cf) 누락된 값은 데이터를 버리거나 평균값을 사용하되 훈련세트의 평균값을 테스트세트에 채워야 함.</p>
<p>평균, 최대, 최솟값 확인 : 데이터.describe( )</p>
<ul>
<li>로지스틱 회귀로 와인 분류
<img src="https://velog.velcdn.com/images/o3o3bae/post/b2f9fc5a-51d5-4588-a534-4ab4865a6d4b/image.png" alt="">
<img src="https://velog.velcdn.com/images/o3o3bae/post/12bba886-d0f1-4e0d-8a76-3e4e77f41bab/image.png" alt=""></li>
</ul>
<p>→ 0.512 $\times$ 알코올도수 +1.673 $\times$ 당도 -0.687 $\times$ pH +1.817 &gt; 0 : 화이트와인
→ 0.512 $\times$ 알코올도수 +1.673 $\times$ 당도 -0.687 $\times$ pH +1.817 &lt; 0 : 레드와인</p>
<p>즉, 알코올도수와 당도가 높으면 화이트와인일 확률이 높지만 사람들에게 이해시키기가 어려움!</p>
<p>▶ 결정트리
: 이유를 설명하기 쉬우며 데이터를 잘 나눌 수 있는 질문을 추가해서 분류 정확도를 높일 수 있는 알고리즘</p>
<p>▼ 로지스틱 회귀 모형대신 결정트리를 적합했더니 과대적합 결과가 나옴.
<img src="https://velog.velcdn.com/images/o3o3bae/post/81439219-303e-4c16-b8b3-ca5deef050a3/image.png" alt=""></p>
<p>결정트리에 대해 더 알아보자!</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/53e52486-a229-4707-9a30-40d5d5127062/image.png" alt="">
출처 : <a href="https://skirttt.com/wp-content/uploads/2023/07/image.png">https://skirttt.com/wp-content/uploads/2023/07/image.png</a></p>
<ul>
<li>네모칸 하나를 &quot;노드&quot;라고 부르며 훈련데이터의 특성에 대한 테스트를 실시함.</li>
<li>맨 위를 루트 노드, 맨 아래를 리프 노드라고 부름.</li>
<li>함수에서 filled = True 로 지정하면 클래스마다 색깔을 부여해서 어떤 클래스의 비율이 높아지면 점점 진한 색으로 표시
★ 리프노드에서 가장 많은 클래스가 예측 클래스가 됨.</li>
<li>가지는 테스트 결과를 나타내어 Yes, No 등을 보여줌.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/99a135e5-d2d3-42db-9c3f-99ab8447443c/image.png" alt=""></p>
<ul>
<li><p>max_depth = 1로 설정하여 루트 노드를 제외하고 하나의 노드를 더 확장하여 그림.</p>
</li>
<li><p>feature_names로 특성들의 이름을 전달함.</p>
</li>
<li><p>하나의 노드 칸은 
테스트 조건(sugar)
불순도(gini)
총 샘플 수(samples)
클래스별 샘플 수(value)
로 이루어져 있음.</p>
</li>
<li><p>오른쪽 노드는 2194개의 양성클래스의 샘플이 왼쪽노드보다 더 몰려있어서 진한 색깔이 나타남.</p>
</li>
<li><p>왼쪽 노드와 오른쪽 노드 모두 양성 클래스가 많으므로 양성클래스로 예측됨.</p>
</li>
</ul>
<p>✔️ 불순도
: 결정트리가 최적의 질문을 찾기 위한 기준 또는 노드에서 데이터를 분할할 기준을 정하는 것</p>
<p>① 지니불순도 (criterion = &#39;gini&#39;)
: 1 - (음성클래스비율$^2$ + 양성클래스비율$^2$)</p>
<p>지니불순도 = 0.5인 경우 : 두 클래스의 비율이 1/2씩 이므로 최악
지니불순도 = 0인 경우 : 하나의 클래스만 있는 경우. 순수노드</p>
<p>결정트리모델은 정보이득(= 부모 노드와 자식 노드의 불순도 차이)이 최대가 되도록 데이터를 나눠서 트리를 성장시킴.</p>
<p>정보 이득 : 부모의 불순도 - (왼쪽 노드 샘플 수 / 부모의 샘플수) $\times$ 왼쪽 노드 불순도 - (오른쪽 노드 샘플 수 / 부모의 샘플수) $\times$ 오른쪽 노드 불순도</p>
<p>② 엔트로피 불순도 (criterion = &#39;entropy&#39;)</p>
<p>$-$ 음성클래스 비율 $\times$ $log_2$(음성클래스 비율) - 양성클래스 비율 $\times$ $log_2$(양성클래스 비율)</p>
<p>✔️ 가지치기
: 결정트리의 과대적합 제한</p>
<p>트리의 최대깊이지정 : max_depth
루트노드 : 깊이가 0인 노드</p>
<ul>
<li>깊이가 3인 노드까지 성장시킴
<img src="https://velog.velcdn.com/images/o3o3bae/post/d6f74af1-9a2b-47a5-933e-c9bbb26ac256/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/e92408cd-0efc-4d01-9870-9e40aa92a527/image.png" alt=""></p>
<p>→ 알코올 도수 &lt;= 0.454, -0.802 &lt; 당도 &lt; -0.239 : 레드 와인</p>
<p>이때, 음수의 당도를 설명할 방법이 없으며, 클래스별 비율을 가지고 계산하는 불순도로 샘플을 나누는데 특성값의 스케일이 이 계산에 영향을 미치지 않으므로 표준화 전 데이터를 이용해보자!</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/358772bd-fb4f-4216-b07d-41804d450784/image.png" alt=""></p>
<p>→ 훈련 세트와 테스트 세트의 결과가 정확히 같음!</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/626430a4-e362-4544-9e3e-acc4e2f71e91/image.png" alt=""></p>
<p>→ 알코올 도수 &lt;= 11.025, 1.625 &lt; 당도 &lt; 4.325 : 레드 와인</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/5a7ebd03-db7d-49e5-9a89-cf25023aea15/image.png" alt=""></p>
<p>→ 특성 중요도를 통해 당도가 가장 유용한 특성 중 하나임을 알 수 있다.</p>
<h3 id="5-2-교차-검증과-그리드-서치">5-2. 교차 검증과 그리드 서치</h3>
<p>문제 : 테스트세트를 사용해 자꾸 성능을 확인하다보면 일반화 성능을 올바르게 예측할 수 없다!</p>
<p>✔️ 검증세트
총 데이터 중에 60% : 훈련, 20% : 검증, 20% : 테스트 세트로 나눔.</p>
<p>[과정]</p>
<ul>
<li><p>훈련세트에서 모델 훈련 후 검증세트로 모델 평가</p>
</li>
<li><p>테스트하고 싶은 매개변수를 바꿔가며 가장 좋은 모델 선택</p>
</li>
<li><p>그 매개변수로 훈련세트 + 검증세트로 모델 다시 훈련
<img src="https://velog.velcdn.com/images/o3o3bae/post/7b2023ef-39ca-4064-94bf-485994a6697e/image.png" alt=""></p>
</li>
<li><p>테스트세트로 최종 점수 평가
그런데 이 경우 과대적합되어있으므로 매개변수를 바꿔서 더 좋은 모델을 찾아야 함!</p>
</li>
</ul>
<p>✔️ 교차 검증 (k-fold cross validation)
: 검증 세트를 떼어 내어 평가하는 과정을 여러번 반복한 후 점수들을 평균하여 최종 검증 점수를 얻음.
ex) 4-폴드 교차 검증
<img src="https://velog.velcdn.com/images/o3o3bae/post/5edcf4a2-5ad5-4157-a73c-b50a8431b48b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/b4f2babd-bd6c-4138-871f-f98911c4cb77/image.png" alt=""></p>
<p>→ fit_time, score_time은 모델을 훈련하는 시간, 검증하는 시간
cross_validate( )함수는 기본적으로 5-폴드 교차 검증이므로 각 키마다 5개의 값이 담겨져 있음.
교차 검증의 최종 점수는 test_score의 5개 값의 평균값</p>
<p>🚨주의점🚨
: 교차검증시 훈련세트를 섞으려면 분할기splitter를 지정해야 함.
회귀모델일 경우 : KFold 분할기 사용
분류모델일 경우 : StratifiedKFold 분할기 사용</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/6bd2b167-6b9b-4f53-bee9-c62939fdd885/image.png" alt=""></p>
<p>✔️ 하이퍼 파라미터 튜닝
: 여러 매개변수의 값을 바꿔가며 최적의 값 찾기!</p>
<p>GridSearchCV : 하이퍼파라미터 탐색과 교차 검증을 한 번에 수행</p>
<p>ex) min_impurity_decrease 매개변수의 최적값 찾기</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/597b9efa-1d50-4ef1-85f0-9a5851363305/image.png" alt=""></p>
<p>0.0001부터 0.0005까지 5개의 값을 5-폴드 교차 검증을 수행한 결과 0.0001이 가장 좋은 값으로 선택됨.
25개의 모델 중에서 검증 점수가 가장 높은 모델의 매개변수 조합으로 전체 훈련 세트에서 자동으로 다시 모델을 훈련하여 가장 좋은 값 선택.</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/68495980-8555-41f9-b0e0-e3c79caea46a/image.png" alt=""></p>
<p>5번의 교차 검증의 평균 점수를 mean_test_score로 얻음.
그 후 argmax()를 통해 최상의 검증 점수를 만든 매개변수를 출력할 수 있음.</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/251434f2-c4ba-470a-994b-e029570db755/image.png" alt=""></p>
<p>(최소값, 최대값, 간격) 을 통해 매개변수 값을 지정하는 range, np.arange를 통해서도 매개변수의 조합을 확인할 수 있다.</p>
<p>💡값의 범위나 간격을 미리 정하기 어려운 경우, <strong>랜덤서치</strong> 이용!
<img src="https://velog.velcdn.com/images/o3o3bae/post/5bd887fc-7931-4f51-b5cb-7b3003e67aaf/image.png" alt=""></p>
<p>정수를 뽑아내는 확률분포 randint를 사용하거나
실수를 뽑아내는 확률분포 uniform을 사용</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/ff4872cf-9e79-47f6-b5fa-fe89b8ba2a66/image.png" alt=""></p>
<p>최종 모델로 결정된 테스트 세트의 성능..생각보다 잘 나오진 않았지만 다양한 매개변수 값을 테스트하여 얻은 결과!</p>
<h3 id="5-3-트리의-앙상블">5-3. 트리의 앙상블</h3>
<ul>
<li>데이터</li>
</ul>
<p>ⓐ 정형데이터 : 데이터베이스나 엑셀에 저장하기 좋게 어떤 구조로 되어있는 데이터
→ 더 좋은 결과를 얻기위해 여러개의 모델을 훈련하는 머신러닝 알고리즘인 앙상블학습이 가장 뛰어난 성과를 냄.</p>
<p>ⓑ 비정형데이터 : 텍스트, 사진, 음악 등 데이터베이스나 엑셀로 표현하기 어려운 데이터
cf) NoSQL은 텍스트나 JSON 데이터 저장 가능
→ 규칙성을 찾기 어려워서 신경망 알고리즘 이용</p>
<hr>
<p>① 랜덤 포레스트
: 훈련데이터에서 랜덤하게 샘플을 복원추출(부트스트랩샘플) 후 결정트리 훈련</p>
<ul>
<li>각 노드를 분할할때 전체 특성 중 일부 특성을 무작위로 고른 후에 최선의 분할을 찾음. RandomForestClassifier로 전체 특성 개수의 제곱근만큼의 특성을 선택.
ex) 9개의 특성이 있다면 노드마다 3개를 랜덤하게 선택하고 그 다음 분류일때는 각 트리의 클래스별 확률을 평균하여 가장 높은 확률을 가진 클래스를 예측으로 삼음. 즉, 랜덤하게 선택한 샘플과 특성으로 과대적합을 막아줌.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/ea60d6b6-7cf4-4f2d-8481-6e1505d2c052/image.png" alt=""></p>
<p>각 결정트리의 특성중요도를 취합하여 나온 특성중요도를 살펴보면
결정트리에서의 특성중요도와는 달리 당도의 중요도가 감소하고 알코올 도수와 pH의 중요도가 올랐음. 하나의 특성에 과도하게 집중하지 않고 좀 더 많은 특성이 훈련에 반영되어 과대적합을 줄일 수 있음.</p>
<p>또한, 부트스트랩 샘플에 포함되지 않고 남는 샘플(OOB 샘플)을 사용하여 부트스트랩 샘플로 훈련한 결정 트리를 평가할 수 있고, 이 결과 교차 검증에서의 결과와 비슷하게 나옴.</p>
<p>② 엑스트라 트리
: 결정 트리를 사용하되 부트스트랩샘플을 사용하지는 않고일부 특성을 랜덤하게 선택하여 노드를 분할하여 과대적합을 감소시키는 앙상블 모델
이 모델은 각 결정 트리를 만들때 전체 훈련세트를 사용함.</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/363b9a2d-c4a6-466a-9207-54647df469e7/image.png" alt=""></p>
<p>무작위성이 더 커서 랜덤 포레스트보다 더 많은 결정 트리를 훈련해야하지만 랜덤하게 노드를 분할하여 빠른 계산 속도를 낼 수 있다.</p>
<p>③ 그레디언트 부스팅
: 깊이가 얕은 결정 트리를 연속적으로 추가하여 손실 함수를 최소화하는 앙상블 모델.</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/90d67539-e19a-4cac-a4ba-d61cdd6854cb/image.png" alt=""></p>
<p>과대적합이 일어나지 않았으므로 학습률 매개변수로 속도를 조절하고 결정 트리의 개수를 늘려보자!</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/8c11bd19-56f6-4251-9989-8252abde558d/image.png" alt=""></p>
<p>과대적합은 일어나지 않았지만, 당도에 대한 특성 중요도가 높게 나타났다.
순서대로 트리를 추가하므로 훈련 속도가 느리다는 단점이 있다.</p>
<p>④ 히스토그램 기반 그레디언트 부스팅
: 그레디언트 부스팅의 속도를 개선하여 안정적인 결과와 높은 성능을 내는 앙상블 모델.
입력 특성을 256개의 구간으로 나누어 노드를 분할할 때 최적의 분할을 매우 빠르게 찾을 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/o3o3bae/post/fcb35bb2-adac-4503-b9bd-9b5e4388b244/image.png" alt=""></p>
<p>이 모델에서도 당도에 특성중요도가 높은 것을 알 수 있고,
테스트 세트에서 87%의 정확도를 보이지만 단일 결정 트리보다 좋은 결과가 나왔다.</p>
<p>▼ XGBoost 라이브러리를 통한 히스토그램 기반 그레디언트 부스팅
<img src="https://velog.velcdn.com/images/o3o3bae/post/c1edf6ca-3e93-455e-ad45-5d4be9a262f0/image.png" alt=""></p>
<p>▼ LightBGM 라이브러리를 통한 히스토그램 기반 그레디언트 부스팅
<img src="https://velog.velcdn.com/images/o3o3bae/post/591ee36b-cc8e-43da-a897-df52b46e3d9c/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신] 3주차_ 다양한 분류 알고리즘]]></title>
            <link>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-3%EC%A3%BC%EC%B0%A8-%EB%8B%A4%EC%96%91%ED%95%9C-%EB%B6%84%EB%A5%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-3%EC%A3%BC%EC%B0%A8-%EB%8B%A4%EC%96%91%ED%95%9C-%EB%B6%84%EB%A5%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Mon, 22 Jan 2024 02:01:25 GMT</pubDate>
            <description><![CDATA[<h3 id="문제--생선의-크기-무게-등이-주어졌을때-럭키백에-들어간-생선의-확률을-알려주자">문제 : 생선의 크기, 무게 등이 주어졌을때 럭키백에 들어간 생선의 확률을 알려주자!</h3>
<p><strong>① k-최근접 이웃 방법 이용</strong></p>
<ul>
<li><p>데이터준비
<img src="https://velog.velcdn.com/images/13ae_13ao/post/81d5cc3d-7760-42e9-8376-23f1a01251ce/image.png" alt=""></p>
</li>
<li><p>타깃데이터 : 생선의 종류
<img src="https://velog.velcdn.com/images/13ae_13ao/post/bc419dca-f511-4927-bcdc-3a2b101a32f1/image.png" alt=""></p>
</li>
</ul>
<p>▶ 다중분류 : 타깃데이터에 2개 이상의 클래스가 포함된 경우
이 경우에도 물고기의 종류가 7가지로, 타깃데이터가 7개이므로 다중분류에 해당.</p>
<ul>
<li><p>입력데이터 : 생선의 무게, 길이 등 총 5가지 특성
<img src="https://velog.velcdn.com/images/13ae_13ao/post/fec2cc50-42e4-4f9a-a129-0f3d9e05a183/image.png" alt=""></p>
</li>
<li><p>훈련 세트와 테스트 세트로 나누기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/cf050f39-7498-4578-bfa6-c3baa3492662/image.png" alt=""></p>
</li>
<li><p>★ 데이터 표준화 전처리
<img src="https://velog.velcdn.com/images/13ae_13ao/post/14697dd1-e20e-4238-9f26-cff7d595687f/image.png" alt=""></p>
</li>
<li><p>최근접 이웃을 3개로 해서 모델 훈련
<img src="https://velog.velcdn.com/images/13ae_13ao/post/4df3988f-9cba-4c87-861e-a02770937d27/image.png" alt=""></p>
</li>
<li><p>🚨주의🚨 
타깃값을 그대로 사이킷런에 전달하면 순서가 자동으로 알파벳순이 되므로 KNeighborsClassifier에서 정렬된 타깃값 kn.classes_를 사용할 것!
<img src="https://velog.velcdn.com/images/13ae_13ao/post/6e4c8328-c524-422e-8fe1-4ba79349248c/image.png" alt=""></p>
</li>
<li><p>테스트 세트의 5개 샘플에 대해 예측 타깃과 확률값 출력
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9e3a79fe-3a46-4568-acce-eb5abdbbff3f/image.png" alt=""></p>
</li>
<li><p>4번째 샘플의 3개의 최근접 이웃이 뭔지?
<img src="https://velog.velcdn.com/images/13ae_13ao/post/f2f8e5ae-fea6-4f82-b127-2ebbf754bbde/image.png" alt=""></p>
</li>
</ul>
<p>→ 여기서 원리는 3개의 이웃 중 2개가 Perch이므로 2/3의 확률로 4번째 샘플을 Perch로 클러스터링함!</p>
<p>그러므로, 3개의 최근접 이웃을 사용하면 0, 1/3, 2/3, 1의 확률로 클러스터링하는 방법밖에 없음. </p>
<p><strong>② 로지스틱 회귀</strong></p>
<ul>
<li>선형방정식을 사용한 분류 알고리즘</li>
<li>ex)
z = a $$\times$$ (Weight) + b $$\times$$ (Length) + c $$\times$$ (Diagonal) + d $$\times$$ (Height) + e $$\times$$ (Width) + f  일때, </li>
<li><ul>
<li>💡로지스틱 함수(시그모이드 함수) : $\frac{1}{1+e^{-z}}$ **
즉, z가 아주 큰 음수일땐 0 으로, 아주 큰 양수일땐 1이 되도록 바꿔줌.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/6bcf3a4f-7831-405f-9cfb-4a1f9e22c318/image.png" alt=""></p>
<p><strong>[이진분류]</strong></p>
<p>✔️ 시그모이드 함숫값 ≥ 0.5 : 양성 클래스
✔️ 시그모이드 함숫값 ≤ 0.5 : 음성 클래스</p>
<ul>
<li><p>도미와 빙어 데이터 골라낸 후 표준화
<img src="https://velog.velcdn.com/images/13ae_13ao/post/2a96bfdc-05d1-4aa2-acf1-45bbf660a67b/image.png" alt=""></p>
</li>
<li><p>학습세트로 모델 학습
<img src="https://velog.velcdn.com/images/13ae_13ao/post/6dfb67bc-1152-4839-95d6-245cfbbf2678/image.png" alt=""></p>
</li>
<li><p>5개의 샘플에 대한 예측 타겟과 확률 출력
<img src="https://velog.velcdn.com/images/13ae_13ao/post/8df5d6b3-73fa-4043-bd56-0d2d4e3ae6d4/image.png" alt=""></p>
</li>
</ul>
<p>→ 두 개의 클래스(도미, 빙어)에 대한 확률값을 보여주므로 2열로 나타남. </p>
<ul>
<li><p>타깃 순서 확인 
<img src="https://velog.velcdn.com/images/13ae_13ao/post/73e38a14-d5d8-4943-a354-beb8407edc01/image.png" alt=""></p>
</li>
<li><p>로지스틱 회귀계수 확인
<img src="https://velog.velcdn.com/images/13ae_13ao/post/5427061b-f305-4bba-923d-54b64aa4bd4f/image.png" alt=""></p>
</li>
</ul>
<p>→ 무게, 길이 등 5개의 특성에 대한 계수와 상수값</p>
<ul>
<li><p>5개 샘플의 z값 출력
<img src="https://velog.velcdn.com/images/13ae_13ao/post/ed3af6d6-63c9-4f97-b7f1-db0f3d567438/image.png" alt=""></p>
</li>
<li><p>각 z에 대한 로지스틱 회귀 함숫값 출력
<img src="https://velog.velcdn.com/images/13ae_13ao/post/68296c34-5d81-4d68-b1a5-fb1daa937c5f/image.png" alt=""></p>
</li>
</ul>
<p>→ 그 결과, 함숫값들과 양성 클래스의 z값과 같은 결과가 나옴.</p>
<p><strong>[다중분류]</strong></p>
<ul>
<li><p>logistic regression은 반복적인 알고리즘이므로 충분한 훈련을 위해 반복횟수를 1000으로 설정</p>
</li>
<li><p>logistic regression은 계수의 제곱을 규제($L_2$규제)
이때, 규제를 제어하는 매개변수 C가 커질수록 규제는 작아짐. (C의 기본값 = 1)
cf. $L_2$규제인 릿지는 규제를 제어하는 매개변수 α가 커질수록 규제 커짐</p>
</li>
<li><p>C = 20, 반복횟수 1000으로 설정 후 모델 훈련
<img src="https://velog.velcdn.com/images/13ae_13ao/post/f2e56426-c571-430d-9383-2b6bd88f6e2e/image.png" alt=""></p>
</li>
<li><p>5개 샘플에 대한 예측 타깃값과 확률 출력
<img src="https://velog.velcdn.com/images/13ae_13ao/post/8983c4ee-3bca-4187-b1f4-7057f52ab76d/image.png" alt=""></p>
</li>
<li><p>타깃 순서 확인
<img src="https://velog.velcdn.com/images/13ae_13ao/post/7a1e00f9-cdc4-4ee7-b1ca-97cf7ff44105/image.png" alt=""></p>
</li>
<li><p>다중회귀의 계수와 상수 크기 출력
<img src="https://velog.velcdn.com/images/13ae_13ao/post/66559a9c-75c6-4207-85d3-4b2f60c1ad23/image.png" alt=""></p>
</li>
</ul>
<p>→ 5개의 특성(무게,길이 등)과 7개의 클래스이므로!</p>
<ul>
<li>5개 샘플에 대한 클래스별 z값 구하기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/e9148011-677a-4655-8d68-b1d0633eaa45/image.png" alt=""></li>
</ul>
<p><strong>- 💡소프트맥스 함수 : 다중분류에서 z값을 확률로 변환하는 방법</strong>
여러 개의 선형방정식의 출력값을 0과 1로 압축하고 전체합이 1이 되도록 만듦.
$e_s$ = $e^{z_1}$ + $e^{z_2}$ + $e^{z_3}$ + $e^{z_4}$ + $e^{z_5}$ + $e^{z_6}$ + $e^{z_7}$ </p>
<p>$s_1$ = $\frac{e^{z_1}}{e_s}$ </p>
<ul>
<li>z값을 소프트맥스를 이용하여 각 행에 대해 확률로 변환
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9cec098d-031a-4aa8-b558-741707fa8d93/image.png" alt=""></li>
</ul>
<p>→ 앞서 출력한 예측 타깃 확률과 정확히 일치!</p>
<h2 id="미션">미션</h2>
<p>p.198 확인문제 2번
답 : ①</p>
<ul>
<li>시그모이드 함수 : 로지스틱 회귀가 이진분류에서 확률을 출력하려고 사용하는 함수</li>
<li>소프트맥스 함수 : 다중분류에서 확률을 출력하려고 사용하는 함수</li>
</ul>
<h3 id="문제--기존의-데이터에-새로운-데이터를-추가하여-모델을-매일-다시-훈련해야-한다면">문제 : 기존의 데이터에 새로운 데이터를 추가하여 모델을 매일 다시 훈련해야 한다면?</h3>
<p>▶ 점진적 학습 : 기존의 훈련데이터로 훈련한 모델을 버리지 않고 새로운 데이터에 대해 조금씩 더 훈련하는 방법
ex) 
ⓐ 확률적 경사 하강법 : 훈련세트로 산 아래 최적의 장소로 가장 가파른 경사를 따라 원하는 지점에 도달하는 것. 이때, 하나의 샘플을 훈련세트에서 랜덤하게 골라서 가장 가파른 길을 찾아 내려가고 산을 다 내려오지 못했다면 훈련세트에 모든 샘플을 다시 채워넣고 랜덤하게 하나의 샘플을 선택해서 경사를 내려감.</p>
<p>ⓑ 미니배치 경사 하강법 : 훈련세트의 여러개의 샘플을 이용해서 경사하강법을 수행하는 방식</p>
<p>ⓒ 배치 경사 하강법 : 극단적으로 한 번 경사로를 따라 이동하기 위해 훈련세트의 전체 샘플 사용</p>
<p>cf. 신경망은 많은 데이터를 사용하므로 한번에 모든 데이터를 사용하기 어렵고 모델이 매우 복잡하여 미니배치나 확률적 경사 하강법을 이용</p>
<p>▶ 손실함수 : 어떤 문제에서 머신러닝 알고리즘이 얼마나 엉터리인지 측정하는 기준으로 샘플 하나에 대한 손실을 의미.
ex) 다중분류에서의 크로스엔트로피 손실함수, 평균제곱오차
cf. 비용함수 : 훈련세트에 있는 모든 샘플에 대한 손실함수의 합</p>
<p>✔️손실함수 ↓ : 좋음!
✔️손실함수 ↑ : 알고리즘이 엉터리니까 나쁨.</p>
<p>→ 손실함수의 최솟값을 찾기 위해 확률적 경사 하강법 이용</p>
<ul>
<li>로지스틱 손실함수 : 정확도에 -1을 곱한 후 손실함수가 연속적인 값을 갖도록 로지스틱 함수를 이용</li>
</ul>
<p>ex) 
예측 : 0.9  정답(타깃) : 1 → 손실함수 값 : -0.9
예측 : 0.3  정답(타깃) : 1 → 손실함수 값 : -0.3
예측 : 0.2  정답(타깃) : 0 → 손실함수 값 : -(1-0.2) $\times$ 1 → -0.8
예측 : 0.8  정답(타깃) : 0 → 손실함수 값 : -(1-0.8) $\times$ 1 → -0.2</p>
<p>→ 손실이 양수여야 더 이해하기 좋으므로 예측확률에 로그함수를 취한 후 손실값이 양수가 되게 하자!</p>
<p>✔️양성클래스 (타깃=1) : 손실함수 값 : -log(예측확률)
✔️음성클래스 (타깃=0) : 손실함수 값 : -log(1-예측확률)</p>
<p>즉, 예측확률이 0에서 멀어져 1에 가까워질수록 손실은 아주 큰 양수가 됨.</p>
<ul>
<li><p>데이터 불러온 후 훈련세트와 테스트세트로 나누고 표준화 전처리
<img src="https://velog.velcdn.com/images/13ae_13ao/post/c5cc7dbb-14c5-4cca-95e0-63d8d4cc0bfe/image.png" alt=""></p>
</li>
<li><p>경사 하강법 이용
<img src="https://velog.velcdn.com/images/13ae_13ao/post/49e6572b-a174-4489-89dc-b9a9e0ae8d27/image.png" alt=""></p>
</li>
<li><p>학습한 모델로 또 학습(점진적 학습)
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9232b068-d19b-4669-baab-d60934e45e92/image.png" alt=""></p>
</li>
</ul>
<p>→ 정확도는 향상되었지만 여러 에포크로 더 훈련해볼 필요가 있겠다! 그럼 몇 번이나 해야할까?</p>
<p>✔️ 에포크횟수 ↓ : 훈련세트를 덜 학습 → 과소적합
✔️ 에포크횟수 ↑ : 훈련세트를 많이 학습 → 과대적합</p>
<ul>
<li>에포크 횟수를 늘려가며 점수를 봐보자!
<img src="https://velog.velcdn.com/images/13ae_13ao/post/e7f01337-f7b5-4fed-870a-16801eeba411/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/4144ff35-7e88-4355-8707-15847a6a6527/image.png" alt=""></p>
<p>→ 훈련세트와 테스트세트의 점수가 제일 비슷해지는 100번이 적절해보임!</p>
<ul>
<li>100번 훈련
<img src="https://velog.velcdn.com/images/13ae_13ao/post/a6185c30-8bcf-4785-a8ff-aaafda03e2af/image.png" alt=""></li>
</ul>
<p>→ 훈련세트와 테스트세트의 정확도 점수가 비교적 높게 나옴!</p>
<p>번외) SGDClassifier에서 loss 매개변수 기본값 : hinge (서포트 벡터 머신)
<img src="https://velog.velcdn.com/images/13ae_13ao/post/f75fa1c1-0eed-4a7a-b0f2-3cb4a40dc9b3/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신] 2주차_ k-최근접 이웃 회귀]]></title>
            <link>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-2%EC%A3%BC%EC%B0%A8-k-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83-%ED%9A%8C%EA%B7%80</link>
            <guid>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-2%EC%A3%BC%EC%B0%A8-k-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83-%ED%9A%8C%EA%B7%80</guid>
            <pubDate>Sun, 14 Jan 2024 12:48:24 GMT</pubDate>
            <description><![CDATA[<p>💡 지도학습</p>
<p>① 분류 : 샘플을 몇 개의 클래스 중 하나로 분류 ex) 도미와 빙어</p>
<p>▶ <strong>&quot;k-최근접 이웃 분류&quot;</strong> 알고리즘</p>
<ul>
<li>KNeighborsClassifier 라는 사이킷런 클래스 이용</li>
<li>예측하려는 샘플에 가장 가까운 샘플 k개를 선택 (ex.3개)</li>
<li>샘플들의 클래스를 확인하여 다수 클래스를 새로운 샘플의 클래스로 예측(ex.△△□ 이면 샘플의 클래스는 △) </li>
</ul>
<p>② 회귀 : 임의의 어떤 숫자를 예측 즉, 두 변수 사이의 상관관계를 분석하여 어떤 숫자를 예측하는 것. ex) 배달이 도착할 시간 예측, 내년 경제 성장률 예측</p>
<p>▶ <strong>&quot;k-최근접 이웃 회귀&quot;</strong> 알고리즘</p>
<ul>
<li>KNeighborsRegressor 라는 사이킷런 클래스 이용</li>
<li>이웃샘플의 타깃값의 평균을 예측 타깃값으로 사용</li>
<li>결정계수로 타깃의 평균정도를 예측하는지 확인(0에 가까우면 타깃의 평균정도이고 1에 가까우면 타겟에 가깝게 예측한 것.)</li>
<li>타깃값과 예측값의 평균 절댓값 오차 계산</li>
<li>과대/과소 적합인 경우 모델을 덜 복잡하게 또는 더 복잡하게 만들어서 해결.</li>
</ul>
<p>1) 농어 길이와 무게 데이터 파악
<img src="https://velog.velcdn.com/images/13ae_13ao/post/cdf42235-92d2-4b0b-b837-43e6ece6298b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/2926b56c-e872-4d5c-81b7-8422b0c0a807/image.png" alt="">
길수록 무거워짐!</p>
<p>2) train과 test set으로 나눈 후 사이킷런을 이용하기 위해 2차원 배열로 만들기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/3c5fface-1875-4bb4-926a-73efde65b008/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/35012b69-6378-4e12-a756-df4c6879d453/image.png" alt=""></p>
<p>3) 모형 훈련 후 결정계수(점수)로 타깃의 평균정도를 예측하는지 확인</p>
<p>▶ 결정계수 = 1 - $$\frac{(타깃-예측)^2의 합}{(타깃-평균)^2의 합}$$</p>
<ul>
<li>타깃의 평균 정도를 예측하면 분수가 1이 되어 결정계수가 0에 가까워짐.</li>
<li>예측이 타깃에 아주 가까워지면 분수가 0이 되어 결정계수가 1에 가까워짐. (good👍) 
<img src="https://velog.velcdn.com/images/13ae_13ao/post/63e2a3ca-0702-46ed-9a79-2f71c3081bc8/image.png" alt="">
결과 : 예측한 값이 타깃에 가까워서 결정계수가 높음.👍</li>
</ul>
<p>4) 타깃과 예측한 값의 절댓값 오차를 평균하여 어느 정도 예측이 벗어났는지 알아보기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/824b909e-add3-4768-94c9-c2f2634b8c78/image.png" alt="">
결과 : 예측한 값이 평균적을 19g정도 타깃값과 다르다.</p>
<p>✔️ 과대적합, 과소적합</p>
<ul>
<li>과대적합 : 훈련 세트의 점수는 높은데 테스트 세트의 점수가 안 좋은 경우/ 훈련세트에만 잘 맞는 모델</li>
</ul>
<p>→ 해결책 : 모델을 <strong>덜</strong> 복잡하게 만들면 됨.</p>
<ul>
<li>과소적합 : 훈련 세트의 점수보다 테스트 세트의 점수가 높거나 두 점수 모두 너무 낮은 경우/ 모델이 너무 단순하여 훈련세트에서 적절하게 훈련되지 않은 경우/ 훈련세트와 테스트 세트의 크기가 작으면 일어날 수 있음.</li>
</ul>
<p>→ 해결책 : 모델을 <strong>더</strong> 복잡하게 만들면 됨.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/c1f886d5-09cb-4743-9350-6736482327b8/image.png" alt="">
결과 : 최적의 k값을 찾는 방법은 5장에서!
이웃의 개수를 줄임으로써 모델을 더 복잡하게 만들어서 테스트 세트의 점수가 훈련 세트의 점수보다 낮아졌으므로 과소적합 문제 해결</p>
<h2 id="미션">미션</h2>
<p>p.128 확인문제 2
k-최근접 이웃 회귀 모델의 k값을 1,5,10으로 바꿔가면서 훈련하고, 농어의 길이를 5에서 45까지 바꿔가면서 예측을 만들어 그래프로 나타내기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/9204ac35-1244-498e-8188-f91d71995ee4/image.png" alt=""></p>
<ul>
<li><p>k=1 일때
<img src="https://velog.velcdn.com/images/13ae_13ao/post/d97fc0fb-b8e6-4cf9-b57b-160dc5ae341f/image.png" alt=""></p>
</li>
<li><p>k=5 일때
<img src="https://velog.velcdn.com/images/13ae_13ao/post/c3e892f8-b4bc-40e3-adcf-701d2a5f3f40/image.png" alt=""></p>
</li>
<li><p>k=10 일때
<img src="https://velog.velcdn.com/images/13ae_13ao/post/64fcecc1-0bf5-4446-a7a6-1b5466c9abd1/image.png" alt=""></p>
</li>
</ul>
<p>결론 : k가 커지면서 그래프가 smooth해지는 것을 보아 모델이 단순해지는 것을 알 수 있다.</p>
<p><strong>👎 한계 : 훈련 세트 범위 밖의 값을 예측하지 못함.</strong></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/276a12f7-2bf1-4c9a-bc4e-8c1edd2e7825/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/725a0ebd-a3ae-4d1b-b0f1-863145ff30fd/image.png" alt=""></p>
<p>실제로 산점도에 표현해보니
<img src="https://velog.velcdn.com/images/13ae_13ao/post/6dba2e7c-61a9-4945-a0a6-35d5f5330b95/image.png" alt="">
이웃 한 점들이 너무 동떨어져 있었고
<img src="https://velog.velcdn.com/images/13ae_13ao/post/2664d30c-b60c-44db-9877-1344aa3442de/image.png" alt="">
이웃한 샘플의 타깃값의 평균을 예측 타깃값으로 사용하다보니 길이가 50에서나 100에서나 똑같은 값을 출력해준 것.</p>
<p>→ 해결책 : </p>
<ul>
<li>시간과 환경의 변화를 반영하여 새로운 데이터로 반복적으로 k-최근접 이웃 모델을 학습해줄것.</li>
<li>선형회귀 알고리즘 이용</li>
</ul>
<p>▶ 선형회귀</p>
<ul>
<li>특성이 하나일 때 그 특성을 가장 잘 나타낼 수 있는 직선을 찾는 알고리즘</li>
<li>LinearRegression 클래스 이용
<img src="https://velog.velcdn.com/images/13ae_13ao/post/56b0d574-54db-4aff-a75a-b9bdd6ed83f3/image.png" alt="">
최적의 모델 파라미터를 찾아 나온 회귀선 :<p align='center'>무게 = 39 * 길이 - 709  </p>

</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/a819888a-62cf-4d3b-9cf7-c62c9786cc7d/image.png" alt=""></p>
<p><strong>👎그래프의 왼쪽 끝부분을 보면 농어의 무게가 0g이하로 예측될 때도 있음.</strong></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/7403ede4-7e5a-4a57-a111-5d0d2b07285c/image.png" alt=""></p>
<p><strong>👎과소적합의 문제도 있음.</strong></p>
<p>→ 해결책 : 농어의 길이와 무게에 대한 산점도를 보면 왼쪽 아래 부분이 곡선에 가까우므로 최적의 곡선을 찾아보자.</p>
<p>▶ 다항회귀 : 다항식을 사용한 선형회귀
길이의 제곱항 추가 후 모델 훈련
<img src="https://velog.velcdn.com/images/13ae_13ao/post/5232069e-6a78-4370-b757-08f4af757de7/image.png" alt="">
주의점 : </p>
<ul>
<li>np.column_stack()은 튜플로 전달해야 해서 괄호를 2개써야함!</li>
<li>2차원으로 만들어진 데이터셋인지 확인</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/7394b4d0-9176-46c5-910c-dcce262bc1cc/image.png" alt=""></p>
<p>최적의 모델 파라미터를 찾아 나온 회귀선 :</p>
<p align='center'>무게 = 1.01 * 길이*길이 - 21.6 * 길이 +116.05  </p>

<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/86ad5f37-b578-4c4d-b83b-10ac3df8dddb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/b030f7d3-f276-4a7c-8fc4-2f3067922f9c/image.png" alt=""></p>
<p>결과 : 훈련 세트보다 테스트 세트의 점수가 더 높게 나와서 과소적합이므로 모델을 더 복잡하게 하여 적합시켜봐야함!</p>
<p>→ 해결책 : 농어의 길이뿐만 아니라, 높이와 두께를 다항 회귀에 함께 적용해보자!</p>
<p>▶ 다중회귀 : 여러 개의 특성을 사용한 선형회귀
▶ 특성공학 : 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업
ex) 농어길이 * 농어높이</p>
<p>1) 판다스로 데이터프레임 가져온 후 넘파이로 변환 후 훈련세트와 테스트 세트로 나누기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/eb0ff527-f023-481c-9179-17f049c87faf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/123388ea-9b08-4ca7-9f96-42baac7bfd6f/image.png" alt=""></p>
<p>2) PolynomialFeatures 클래스를 통해 각 특성을 제곱한 항을 추가하고 특성끼리 서로 곱한 항을 추가
<img src="https://velog.velcdn.com/images/13ae_13ao/post/3692905a-89b2-456a-80e5-b7c2ae6536aa/image.png" alt=""></p>
<ul>
<li>transform한 결과를 보면 각 성분끼리의 곱값과 제곱값이 들어가있는 걸 볼 수 있음.
주의점 : 절편은 항상 값이 1인 특성과 곱해지는 계수이고 사이킷런은 자동으로 절편을 추가해주므로 1은 필요없음. → include_bias=False</li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/3f83eefc-4be4-401f-a847-fb93d9b5056a/image.png" alt=""></p>
<ul>
<li>테스트 세트도 똑같이 진행해주면 됨!</li>
</ul>
<p>3) 다중 회귀 모델 훈련
<img src="https://velog.velcdn.com/images/13ae_13ao/post/0a36ff0f-74b9-4c97-a8a7-18fbf898055c/image.png" alt=""></p>
<p>4) degree 매개변수를 통해 고차항의 최대개수 늘려보기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/ea771e32-83d9-4c04-aba9-10f4e0a6eee8/image.png" alt=""></p>
<ul>
<li>훈련세트에 과대적합되어 결정계수가 매우 낮게 나옴. 즉, 최대차수를 5로 지정하여 특성의 개수가 55개가 되었는데 훈련 세트의 샘플은 42개이므로 과대적합된 것.</li>
</ul>
<p>▶ 규제 : 머신러닝 모델이 훈련 세트를 과도하게 학습하지 못하도록 하는 것. 
ex) 선형회귀에서는 계수의 크기를 작게 하는것.</p>
<p>5) 곱해지는 계수의 값이 차이가 없도록 특성의 스케일을 정규화
<img src="https://velog.velcdn.com/images/13ae_13ao/post/181ff3b6-252d-4471-a926-7438c37688d8/image.png" alt=""></p>
<p>6) 
① 릿지 회귀 : 계수를 제곱한 값을 기준으로 규제를 적용
<img src="https://velog.velcdn.com/images/13ae_13ao/post/421bced3-1fd9-418a-a9e0-d52204fe4484/image.png" alt=""></p>
<p>55개라는 많은 특성을 사용했는데도 과대적합되지 않았음.
<img src="https://velog.velcdn.com/images/13ae_13ao/post/c0000de1-6cd0-401d-967b-259b9d5aed74/image.png" alt=""></p>
<p>alpha ↑ : 규제 강도 세지고 계수값을 더 줄이고 과소적합 되도록 유도
alpha ↓ : 계수를 줄이는 역할이 줄어들고 과대적합될 가능성 커짐.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/6b5941e8-7b54-4f20-a177-880979a11f0d/image.png" alt=""></p>
<p>그래프에 6개의 동일한 간격의 값으로 나타나도록 log(alpha)를 x축으로 지정
결과 : (훈련세트가 파랑, 테스트 세트가 주황) 왼쪽에서는 과대적합, 오른쪽에서는 과소적합이며 두 그래프가 가장 가깝고 테스트 점수가 가장 큰 -1 즉, alpha가 0.1일때에 대해 모델을 훈련시켜보자.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/64384254-9efc-4e8d-90d1-bc5def31e971/image.png" alt=""></p>
<p>👍</p>
<p>② 라쏘 회귀 : 계수의 절댓값을 기준으로 규제를 적용하며 계수의 크기를 아예 0으로 만들 수 있음.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/f451bd85-fb99-4d37-ae10-e7bb61cd6acd/image.png" alt=""></p>
<p>괜찮은 결과를 보여줬지만 alpha를 통해 규제 강도를 조절해보면</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/83b949d0-3396-41aa-899a-1f93633bfe69/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/eb7b9ebb-040b-48b3-9357-1c6755258253/image.png" alt=""></p>
<p>결과 : (훈련세트가 파랑, 테스트 세트가 주황) 왼쪽은 과대적합, 오른쪽은 점수가 크게 떨어지면서 과소적합 그러므로 라쏘에서 최적의 log(alpha)=1이므로  alpha = 10
<img src="https://velog.velcdn.com/images/13ae_13ao/post/c6c76525-1c7f-4245-8896-3f955f8021e5/image.png" alt=""></p>
<p>테스트 세트의 성능이 높아짐.</p>
<p>라쏘 모델의 계수 중 0인 것의 개수?
<img src="https://velog.velcdn.com/images/13ae_13ao/post/64272c3b-352a-40de-98fb-746a8fd21fb1/image.png" alt=""></p>
<p>55개의 특성을 사용했는데 그 중 40개가 0이므로 15개의 특성만 사용함.
💡라쏘는 유용한 특성을 골라내는 데에도 쓰임!</p>
<h2 id="선택미션">선택미션</h2>
<p>파라미터</p>
<ul>
<li><p>모델 파라미터 : 머신러닝 모델이 학습 알고리즘을 통해 데이터를 추정 또는 학습한 파라미터/머신러닝 모델의 성능이 파라미터에 의해 결정됨.
ex) 인공신경망의 가중치, SVM의 서포트 벡터, 선형 회귀에서의 결정계수, 데이터의 평균, 분산, 표준편차 등</p>
</li>
<li><p>하이퍼 파라미터 : 경험, 데이터의 특성 등을 고려하여 사용자가 설정한 값
ex) k- 최근접 이웃 방법에서 최근접 이웃의 개수 k, 경사하강법에서 학습률, 에포크 수</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공머신] 1주차_ 머신러닝 시작과 데이터]]></title>
            <link>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-1%EC%A3%BC%EC%B0%A8-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%9C%EC%9E%91%EA%B3%BC-%EB%8D%B0%EC%9D%B4%ED%84%B0-lxyvqvuk</link>
            <guid>https://velog.io/@13ae_13ao/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-1%EC%A3%BC%EC%B0%A8-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%8B%9C%EC%9E%91%EA%B3%BC-%EB%8D%B0%EC%9D%B4%ED%84%B0-lxyvqvuk</guid>
            <pubDate>Sun, 07 Jan 2024 12:55:55 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>인공지능 : 사람처럼 학습하고 추론할 수 있는 지능을 가진 컴퓨터 시스템을 만드는 기술</p>
<p>   일반인공지능 : 사람과 구분하기 어려운 지능을 가진 컴퓨터 시스템</p>
<p>   약인공지능 : 특정분야에서 사람의 일을 도와주는 보조 역할</p>
<p>   ex) 음성비서, 자율 주행 자동차, 음악추천, 기계번역, 알파고 등</p>
</li>
</ul>
<ul>
<li>머신러닝 : 규칙을 일일이 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야로 주로 파이썬의 사이킷런(Scikit-learn) 라이브러리 이용</li>
</ul>
<p>(참고로 파이썬은 컴파일(인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업)을 하지 않아도 되므로 사용하기 편리하다.)</p>
<ul>
<li>딥러닝 : 머신러닝 알고리즘 중 인공신경망을 기반으로 한 방법들을 통칭하며 구글의 텐서플로 라이브러리나 페이스북의 파이토치 라이브러리를 이용.</li>
</ul>
<ul>
<li>구글 코랩 : 구글 클라우드의 가상서버를 사용한 주피터 노트북 개발환경(가상서버는 최대5개까지가능)</li>
</ul>
<h3 id="미션--도미와-빙어-데이터를-구분하여-생선-이름을-자동으로-알려주는-머신러닝-만들기">미션 : 도미와 빙어 데이터를 구분하여 생선 이름을 자동으로 알려주는 머신러닝 만들기</h3>
<p>(머신러닝은 스스로 각 생선마다의 기준을 찾아서 분류 및 판별할 수 있어야 함.)</p>
<p>▶ k-최근접 이웃 알고리즘 이용</p>
<p>: 어떤 데이터에 대한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로 사용하는 알고리즘</p>
<p>데이터를 모두 갖고 있어야하며 새로운 데이터를 예측할 때는 가장 가까운 직선거리에 어떤 데이터가 있는지를 살피기만 하면 됨.</p>
<p>단점은 데이터가 아주 많은 경우 메모리가 많이 필요하고 직선거리를 계산하는 양이 많아서 사용하기 어려움.</p>
<p>1) 도미와 빙어 데이터 파악</p>
<ul>
<li>도미 데이터
<img src="https://velog.velcdn.com/images/13ae_13ao/post/c0ef24ef-8bd1-42a8-9444-d88e6b1f172f/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/803e0e1c-36d7-442c-9508-c91221d39ca3/image.png" alt=""></p>
<ul>
<li>빙어 데이터
<img src="https://velog.velcdn.com/images/13ae_13ao/post/f14032bf-efe4-42a9-8e64-9417e1a05f58/image.png" alt=""></li>
</ul>
<p>2) 데이터 합치기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/f291f31e-0410-4a38-b4b3-28f731ad3a51/image.png" alt=""></p>
<p>3) 사이킷런을 이용하기 위해 2차원 리스트로 만들어주기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/8ed8165e-6eab-4fbe-8b2c-6714922891f7/image.png" alt=""></p>
<p>또 다른 방법
<img src="https://velog.velcdn.com/images/13ae_13ao/post/d8d5706b-308b-4e18-870f-b5d9f7cd6af8/image.png" alt=""></p>
<p>4) 도미(35마리)를 1로, 빙어(14마리)를 0으로 하는 정답리스트 만들기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/071484b8-a8c9-43b3-be8c-3588b566b658/image.png" alt=""></p>
<p>또 다른 방법</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/7a14c205-a986-4d18-8439-db44ede5d57a/image.png" alt=""></p>
<p>5) 넘파이 라이브러리를 이용하여 fish_data와 fish_target 무작위 배열
(훈련세트와 테스트 세트에 도미와 빙어가 골고루 섞여야 샘플링 편향이 일어나지 않기 때문!)
<img src="https://velog.velcdn.com/images/13ae_13ao/post/b583b4a4-b920-4f64-8453-9adea402a009/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/90460c82-0029-4352-bf4f-bb80f370d0ba/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/eda67d12-c904-4800-9095-3c394e9f2e4b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/b709fb47-748b-474f-8792-3e9fba36a34e/image.png" alt=""></p>
<p>※ 주의 ※
weight는 200씩 0부터 1000까지, length는 5씩 10부터 40까지 표현된 그래프</p>
<p>6) xlim을 이용해서 weight와 length 범위 맞춰주기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/bc707424-c2fa-486e-9b8b-d2c404b1b74f/image.png" alt=""></p>
<p>생선의 길이는 가장 가까운 이웃을 찾는 데 크게 영향을 미치지 못하여 오로지 생선의 무게만 생각하면 됨.</p>
<p>※ 한계
길이와 무게의 스케일이 달라서 알고리즘이 올바르게 예측할 수 없음.</p>
<p>▶데이터 전처리 필요
특성값을 일정한 기준으로 맞춰주는 작업</p>
<p> ex) 표준점수 : 각 특성값이 평균에서 표준편차의 몇 배만큼 떨어져 있는              지를 나타내며 이를 통해 실제 특성값의 크기와 상관없이 
             동일한 조건으로  비교할 수 있음.</p>
<p>7) 2개의 특성에 대해 동시에 표준점수 만들기</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/f3c2ee22-7d90-40d9-94c5-70274a62c747/image.png" alt=""></p>
<p>8) 길이가 25, 무게가 150인 데이터를 표준점수로 변환하여 그래프 그리기
<img src="https://velog.velcdn.com/images/13ae_13ao/post/c2f6a6a8-5b88-4196-84a6-50886093a943/image.png" alt=""></p>
<p>9) 학습시킨 후 표준점수로 변환된 데이터의 생선 종류 예측
<img src="https://velog.velcdn.com/images/13ae_13ao/post/67195561-5aa7-4e5e-9f9d-9b6de0cd68a7/image.png" alt=""></p>
<p>이때, 기본적으로 가장 가까운 5개의 데이터를 참고하여 도미/빙어를 구분하지만 아래와 같이 n_neighbors = n 을 이용하여 임의로 참고할 데이터 수를 지정할 수도 있다.</p>
<p><img src="https://velog.velcdn.com/images/13ae_13ao/post/2671b830-3fa7-4373-b962-2de2c786e190/image.png" alt=""></p>
<p>아래의 코드로 n을 반복문을 통해 대입하여 정확도가 1보다 작아질 때를 알 수도 있다.
<img src="https://velog.velcdn.com/images/13ae_13ao/post/466bce20-b47b-45df-bc8c-54e5dd015090/image.png" alt=""></p>
<p>10) 표준점수로 변환된 도미(마름모), 빙어(원), 새로운 데이터(삼각형)
<img src="https://velog.velcdn.com/images/13ae_13ao/post/363318fc-b64d-4717-af2a-9f2f48721846/image.png" alt="">
예측된 결과에서와 같이 새로운 데이터는 도미와 많이 가깝게 있어서 도미로 예측하는 것이 맞다.</p>
<h1 id="선택미션">선택미션</h1>
<p>p.86 2-1 확인문제</p>
<p>1) ①
지도학습 : 샘플의 입력과 타깃(정답)을 알고 있을 때 사용할 수 있는 학습방법</p>
<p>2) ④
샘플링 편향 : 훈련 세트와 테스트 세트가 잘못 만들어져 전체 데이터를 대표하지 못하는 현상</p>
<p>3) ②
사이킷런의 입력데이터는 
[[길이,무게],
.
.
.
[길이,무게]]
이런 형식이므로 행은 샘플, 열은 특성을 나타낸다.</p>
]]></description>
        </item>
    </channel>
</rss>