뭔가 흐름이 끊겼지만, 포기하기는 싫어서 달려보련다!

목차 1
목차 2

 

 

06-1 군집 알고리즘 (Clustering)

- 비지도 학습

- 이미지(gray, 2차원) 데이터 다루기

 

06-2 k-평균 (KMeans)

- 하이퍼파라미터 (k)

- 최적의 k 찾기 : inertia

 

06-3 주성분 분석 (PCA)

- 차원축소

- PCA

- 설명된 분산 (explained variance ratio)

 

혼공학습 숙제

 

[ 기본 숙제 : k-평균 알고리즘 작동 방식 ]

- 비지도 학습(Unsupervised Learning)의 가장 대표적인 사례가 바로 군집화(Clustering)이다.

- 군집화(Clustering)의 가장 대표적인 알고리즘이 바로 K-평균(K-Means) 알고리즘이다.

 

- centroid(중심점)을 기준으로 데이터들과의 거리를 최소화하는 것을 목표로 한다.

- 거리를 계산하는 여러 방법이 있으나 보통 유클리드 거리(Euclidian Distance) 방식을 사용한다.

 

- 이를 이용하여 K-Means 알고리즘은 다음과 같은 방식으로 최적화 한다.

 

 

[ 추가 숙제 : Ch.06(06-3) 확인 문제 풀고, 풀이 과정 정리하기 ]

 

1. 특성이 20개인 대량의 데이터셋이 있습니다. 이 데이터셋에서 찾을 수 있는 주성분 개수는 몇 개일까요?

→ 주성분 분석(PCA)라는 것은 차원 축소 방법 중 하나로써, 원본 데이터의 특성 개수와 같거나 적을 수 있다.

     그러므로 정답은 ②번이긴 할텐데.... 사실 ①번이라고 해도 틀렸다고 하기 힘들지 않을까 한다.

     "이 데이터셋에서 찾을 수 있는 최대 주성분 개수는 몇 개일까요?"라고 하는 것이 맞을 것 같다.

 

2. 샘플 개수가 1,000개이고 특성 개수는 100개인 데이터셋이 있습니다. 즉 이 데이터셋의 크기는 (1000, 100)입니다. 이 데이터를 사이킷런의 PCA 클래스를 사용해 10개의 주성분을 찾아 변환했습니다. 변환된 데이터셋의 크기는 얼마일까요?

→ 10개의 주성분을 찾아 변환했다고 했으니 당연하게도 ①번이 정답이다.

 

3. 2번 문제에서 설명된 분산이 가장 큰 주성분은 몇 번째인가요?

→ 분산이 큰 것부터 정렬되므로 ①번 첫 번째 주성분의 분산이 가장 크다.

 

그냥 문제 풀기만 하니까 아쉬워서 직접 코드로 증명을 해봤다.

 

 

여기까지~!!

반응형

가족 여행 및 대학원 MT로 인해... 엄청난 지각 공부를 한다.

미리 하지 못했음에 대해 반성 !!!! 무릎 꿇고 반성 !!!

 

05-1 결정 트리 (Decision Tree)

- 로지스틱 회귀 (Logistic Regression)

- 결정 트리 (Decision Tree Classifier), 가지 치기(Prunning)

 

05-2 교차 검증과 그리드 서치

- 검증 세트 (validation)

- 교차 검증 (Cross Validation)

  . 분할기(Splitter)를 사용한 교차 검증 : StratifiedKFold

- 하이퍼파라미터 튜닝 (Hyperparameter Optimization)

  . 그리드 서치 (GridSearchCV)

  . 확률 분포 선택 : uniform, randint

  . 랜덤 서치 (RandomizedSearchCV)

 

05-3 트리의 앙상블 (Ensemble)

- 정형 데이터와 비정형 데이터

  . 텍스트/오디오/이미지/영상 등의 비정형 데이터는 주로 DL 에서 취급

- 랜덤 포레스트 (RandomForest)

- 엑스트라 트리 (ExtraTrees)

- 그래디언트 부스팅 (Gradient Boosting)

- 히스토그램 기반 그래디언트 부스팅 (Histogram Gradient Boosting)

- XGBoost vs LightGBM

 

 

 

 

기본 숙제 : 교차 검증을 그림으로 설명하기

 

추가 숙제 : 앙상블 모델 손 코딩

- 전체를 캡처하는 것은 무의미한 것 같아, 하단부 부분만 캡처 !!!

 

반응형

 

어느덧 벌써 4장을 공부하고 있는 3주차가 되었다.

만날 일요일 밤에 벼락치기하고 있는 불량한 참가자 신세이지만....

이렇게라도 공부하려하는 스스로를 기특해 해야지 !!!!! 쓰담~ 쓰담~

 

 

04-1 로지스틱 회귀 (Logistic Regression)

- 분류 (Classifier) 모델

- vs. KNeighborClassifier

- 이진 분류 : 시그모이드(Sigmoid)

- 다중 분류 : 소프트맥스(Softmax), parameter C

 

04-2 확률적 경사 하강법 (Stochastic Gradient Descent)

- 점진적 학습 → 확률적 경사 하강법

- 손실함수 (loss function)

- 로지스틱 손실 함수 (logistic loss function, Binary Cross-Entropy loss function)

- partial_fit()

 

 

가제트 형사를 그려주신 것 같은데... MZ(GenZ?) 분들은 아시려나!? ㅋㅋㅋ

 

 

 

Homework

 

 

[기본 숙제]

 

 

- ① 시그모이드 함수(Sigmoid Function)

 

→ 기본적으로 선형 함수만 사용하는 경우 결과값이 너무 커지거나 너무 작아질 수 있으므로

     비선형 함수를 이용하여 값을 수렴하게 만드는 것이 계산하기에 용이해진다.

     이 때, 로지스틱 회귀에서 이진 분류를 사용하는 경우 시그모이드 함수를 이용하면

     0에서 1사이의 값으로 변환이 되며, 0.5를 기준으로 0과 1로 결과를 판단하기에 적합하다.

 

[추가 숙제]

반응형

 

고작 2주차인데, 뭔가 많다!

그런데, 여기서 끝이 아니라 뒤에 좀 더 있다!!!

 

다시 한 번 느꼈지만, 이 책은 절대 초보자를 위한 책이 아니다 !!!

 

03-1. K-최근접 이웃 회귀 (K-NN Regression)

- n_neighbors 파라미터를 이용하여 최근접 이웃과의 거리 평균을 이용하여 회귀

- 과대적합 vs. 과소적합

- n_neighbors 값 변경을 통해 과대적합, 과소적합 이슈 해결

 

03-2. 선형 회귀 (Linear Regression)

- coef_, intercept_

- 과대/과소 적합 이슈 → 다항 회귀

 

03-3. 특성공학과 규제

- 다항 특성 만들기 : PolynomialFeatures

- 규제 전에 표준화 : StadardScaler

- Ridge & Lasso

 

 

기본 숙제

동영상 강의에 얼추 나와있는 내용이라 어렵지 않다 ^^

 

n_neioghbors 값을 바꿔가면서 예측하고, 이것을 그래프로 표현하면 된다.

 

눈으로 봐도 얼추 5값이 적당하지 싶다~

 

추가 숙제

[ 모델 파라미터에 대해 설명하기 ]

 

파라미터는 머신러닝 및 딥러닝 모델의 핵심 요소로써,

모델이 데이터를 통해 학습하고 예측을 수행하는 데 필요한 내부 변수들을 의미한다.

이 값들을 적절히 조정하게 되면 모델은 주어진 문제를 효과적으로 해결할 수 있게 된다.

 

K-최근접 이웃 회귀(K-NN Regression) 챕터에서 n_neighbors 값을 조정하면서

과대적합이나 과소적합 문제를 완화하는 과정을 앞에서 살펴보았는데

여기에서 n_neighbors가 바로 모델 파라미터 중 하나이다.

 

 

반응형

첫 주는 조금 여유로울줄 알았는데, 공부할게 많다.

 

 

02-1. 훈련 세트와 테스트 세트

확인 문제를 통해 이 부분을 공부해보자.

 

1. 머신러닝 알고리즘의 한 종유로서 샘플의 입력과 타깃(정답)을 알고 있을 때 사용할 수 있는 학습방법은 무엇인가요?

- 머신러닝은 크게 지도학습과 비지도학습으로 구분할 수 있고, 정답을 알고 있는 경우 지도학습을 적용한다.

→ ① 지도학습

 

2. 훈련 세트와 테스트 세트가 잘못 만들어져 전체 데이터를 대표하지 못하는 현상을 무엇이라고 부르나요?

- 훈련 세트와 테스트 세트를 만들 때 전체적인 데이터 분포를 유지하는 것이 중요하며 그렇지 못한 경우 편향을 보인다.

→ ④ 샘플링 편향

 

3. 사이킷런은 입력 데이터(배열)가 어떻게 구성되어 있을 것으로 기대하나요?

- 문제 해석이 조금 오해의 여지가 있어 보이지만, 특성은 열(column)로 나열되어 있고 데이터의 구분은 행으로 된다.

→ ② 행: 샘플, 열: 특성

 

 

 

02-2. 데이터 전처리

이 책은 초보자를 위한 수준은 아닌 것 같고, 기본 지식이 좀 있어야 따라갈만한 것 같다.

어쩐지 처음 이 책으로 공부할 때 왠지 자괴감이 좀 들더라니..... ㅠㅠ

 

분산 = 기대값(평균)으로부터 얼마나 떨어진 곳에 분포하는지를 가늠하는 숫자

표준편차 = 분산의 제곱근

 

 

표준화(Standardization) = 평균을 0, 분산을 1로 만들어주는 스케일링 기법 (Z-Score 활용)

 

기본이 될만한 것들을 같이 정리하면서 공부해봐야겠다.

반응형

새해를 맞이하여 야심찬 목표를 세우고 힘차게 달리다가 ... 살짝 지치기도 하고 ... 번아웃도 오고 ...

그러던 와중 또 다시 심장을 뛰게 해주는 혼공학습단 12기 모집 공지를 발견했다 !!!

 

그리고, 정말 고맙게도 지원을 받아주셔서 12기로 활동(공부?)하게 되었다 !!!

 

이번에 공부할 책은 바로~ 바로~

"혼자 공부하는 머신러닝+딥러닝"

 

책을 구매한지는 정말 오래되었는데, 사실 완독하지는 못했었다.

예전에 무심코 지나갔던 책 안의 중요한 정보~!!!

 

이제서야 함께 합니다 !!!

 

 

6주 코스, 열심히 완주해야지 !!!

https://hongong.hanbit.co.kr/혼공-게시판/?uid=162&mod=document&pageid=1

 

개인적으로 너무나 존경하고 애정하는 "박해선"님의 서적인만큼,

책 자체의 퀄리티도 너무나 훌륭하고 예제 및 동영상 등 부수적인 부분들도 너무나 훌륭하다.

https://www.youtube.com/playlist?list=PLVsNizTWUw7HpqmdphX9hgyWl15nobgQX

 

저 동영상 녹화할 때 몇 번 라이브에 참여도 했었는데 ^^

 

 

우리를 공부시키기 위해 박해선님은 정말 많은 고민을 하시는 것 같다 ^^

 

챕터 구성에 대해서도 많은 고민의 흔적이 엿보인다.

 

 

 

뭔가 서론이 길었다!

이제 시작해보자.

 

 

Chapter 01. 나의 첫 머신러닝

 

 

01-1. 인공지능과 머신러닝, 딥러닝

박해선님은 직접 그린 그림과 글씨를 좋아하시는 것 같다 ^^

https://www.youtube.com/watch?v=J6wehCO_c58

 

 

 

01-2. 코랩과 주피터 노트북

이제는 이 책이 나온지도 조금 시간이 지나서

사용한 도구/패키지들의 버전들이 좀 옛날 것들이다.

 

Colab에 들어가서 기본적으로 설치된 Python 버전만 확인해봐도 좀 차이가 발생한다.

https://colab.research.google.com/

 

직접 실습들을 해보면서 버전 차이로 발생하는 것들이 있는지 확인해보면 재미있을 것 같다.

 

 

 

01-3. 마켓과 머신러닝

타이틀이 조금 웃기는데, 저런 제목이 나온이유는 다음과 같다.

https://www.youtube.com/watch?v=GOCVVSMeIf8

 

머신러닝을 공부하기 위해서 문제 상황을 다음과 같이 가정해보자.

- 생선을 파는 마켓이 있다.

- 생선의 크기나 무게를 가지고 그 생선이 무엇인지 맞추고 싶다.

 

동영상 강의 듣다보면 소음(?) 이슈가 있는데,

라이브로 참여했었을 때 마이크 켜 놓은 참석자가 한 명 있어서 조금 짜증났던 기억이 있다.

메시지로 그 사람한테 계속 뭐라했는데 강의를 듣지도 않았던 것 같고 메시지도 보지도 않았던 나쁜 사람 !!! ㅋㅋㅋ

 

첫 실습 내용인데,

첫번째 실습 내용부터 이렇게 쭉~ 진도를 나간다는 것이 조금 당황스럽기는 한데 ...

 

일단 Chapter01 진도는 여기까지!

반응형

Chapter 06

 

어느덧 6주차까지 왔다. 혼공 완주 !!!

스스로에게 칭찬해줘야지 !!! 쓰담~ 쓰담~

 

▶ 내용 요약

06-1 객체지향 API로 그래프 꾸미기

- pyplot 방식과 객체지향 API 방식

 

 

- 그래프에 한글 출력하기

  . 한글 폰트가 필요하기 때문에, 나눔폰트를 설치해야 한다.

  . 예제에서는 구글 코랩에 대해서만 설명되어 있지만, 일반적인 Ubuntu 환경에서도 적용된다.

 

 

  . 사용할 수 있는 폰트 목록을 확인해볼 수도 있다.

  . 사용할 폰트를 지정할 수도 있고, 크기도 정할 수 있다.

 

 

  . 잘 되는지 확인해보자.

 

 

- 출판사별 발행 도서 개수 산점도 그리기

  . 교재와는 다르게, 내가 이용하는 도서관의 데이터로 진행해봤다.

 

 

  . 모든 데이터가 아닌 Top 30 출판사를 뽑아서 사용한다.

 

 

  . 산점도를 그리면 된다!

 

 

  . Marker 크기를 확인하거나 설정을 할 수도 있다.

  . 그냥 점이 아니라 크기에 따라 의미를 부여해보자. (대출건수)

 

 

- 맷플롯립의 다양한 기능으로 그래프 개선하기

 

 

 

 

06-2 맷플롯립의 고급 기능 배우기

- 실습준비하기

  . 한글 폰트 설치 및 도서관 CSV 파일 읽어오기 (앞에서 진행했던 내용 활용)

 

- 하나의 피겨에 여러 개의 선 그래프 그리기

  . 대출건수 크기가 유사한 출판사 2개를 선택해서 그려보자

 

 

  . 레전드를 표현하거나 모든 출판사 정보를 그려보거나 해보자.

 

 

  . 피봇 테이블을 이용해서 데이터를 만들어서 stackplot으로 그려보자.

 

 

 

- 하나의 피겨에 여러 개의 막대 그래프 그리기

 

 

  . 나란히 나오도록 할 수도 있다.

 

 

  . 2개의 bar 그래프를 합쳐서 그리는 2가지 방법이 있다.

 

 

 

  . 데이터 값 누적한 것을 그려보기 위해서 데이터를 먼저 확인해보자

 

 

  . cumsum()을 이용해서 누적 데이터를 만들 수 있다.

 

 

- 원 그래프 그리기

  . 10개 출판사를 뽑아서 pie를 그리면 된다.

 

 

  . startangle 및 여러 옵션들을 줘서 멋진 원 그래프를 만들 수 있다.

 

 

- 여러 종류의 그래프가 있는 서브플롯 그리기

  . 앞에서 살펴본 것들의 종합판이다!

 

 

  . 한 방에 모두 그려진다!!!

 

 

- 판다스로 여러 개의 그래프 그리기

  . DataFrame에서 바로 그래프를 그릴 수도 있다.

 

 

 

 

▶ 기본 미션

p.344의 손코(맷플롯립의 컬러맵으로 산점도 그리기)를 코랩에서 그래프 출력하고 화면 캡쳐하기

 

→ 코랩이 아닌 로컬 환경에서 실행해봤다 ^^

 

 

 

 

▶ 선택 미션

p.356~359의 스택 영역 그래프를 그리는 과정을 정리하기

 

① 기본 데이터 준비

  - 작업 준비 과정이다.

 

 

② 그래프로 표현할 데이터 만들기

  - Top30 출판사 기준으로 "출판사 / 발행년도 / 대출건수"를 추출하고,

  - "출판사 / 발행년도" 기준으로 그룹핑을 하면서, 대출건수는 sum()을 했다.

  - 전체적으로 reset_index()까지 해줬다.

 

 

③ pivot_table()

  - 발행년도를 X축으로 하고, 출판사를 Y축으로 하고, 대출건수를 데이터로 하는 테이블을 만든다.

 

 

④ get_level_values()

  - pivot_table()을 사용했다보니, column이 다단으로 구성되어 있다.

  - 이런 경우 원하는 레벨의 값만 추출하기 위해 get_level_values()를 사용했다.

 

 

⑤ stackplot()

  - 이제 그래프를 그리면 된다.

 

 

우와~~~ 다했다!!!!

반응형

Chapter 05

 

뭔가 내가 대단해진 것 같은 느낌!!! 그 이유는? 책의 절반을 넘겨서?! ^^

 

▶ 내용요약

5-1 맷플롯립 기본 요소 알아보기

  - plt.figure(figsize=(x, y)) : 그래프 크기
  - plt.figure(dpi=d) : DPI
    . plt.figure(figsize=(x/d, y/d)) : 이처럼 계산하면 크기를 계산하면서 조절할 수 있다
  - plt.rcParams[parameter] : 관련 속성값을 확인하거나 설정할 수 있음
  - fig, axs = plt.subplots() : 그래프 묶음 관리. axs 를 통해 각 그래프를 지

 

5-2 선 그래프와 막대 그래프 그리기

  - plt.plot() : 선 그래프

plt.plot(count_by_year.index, count_by_year.values)
plt.title('Books by year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.show()

  - marker='.', linestyle=':', color='red' : 꾸미기 옵션
    . '*-g' : 여러 옵션을 한 방에 해치우기
  - plt.xticks() : 눈금값 설정하기

plt.plot(count_by_year, '*-g')
plt.title('Books by year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
plt.show()

  - plt.annotate() : 값 텍스트 출력
    . xytext : 출력 위치 보정
    . textcoords : 상대값으로 위치 보정

plt.plot(count_by_year, '*-g')
plt.title('Books by year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
for idx, val in count_by_year[::5].items():
  # plt.annotate(val, (idx, val), xytext=(idx+1, val+10))
  plt.annotate(val, (idx, val), xytext=(2, 2), textcoords='offset points')
plt.show()

  - plt.bar() : 막대 그래프

plt.bar(count_by_subject.index, count_by_subject.values)
plt.title('Books by subject')
plt.xlabel('subject')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
for idx, val in count_by_subject.items():
  plt.annotate(val, (idx, val), xytext=(0, 2), textcoords='offset points')
plt.show()

  - plt.annotate() : 값 텍스트 출력
    . fontsize : 폰트 크기
    . ha : 정렬

plt.bar(count_by_subject.index, count_by_subject.values, width=0.7, color='blue' )
plt.title('Books by subject')
plt.xlabel('subject')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
for idx, val in count_by_subject.items():
  plt.annotate(val, (idx, val), xytext=(0, 2), textcoords='offset points',
               fontsize=9, va='center', color='green')
plt.show()

  - plt.barh() : 막대 그래프 (세로)
    . height : 막대의 높
    . plt.annotate(va='center') : 정렬 (세로)

plt.barh(count_by_subject.index, count_by_subject.values, height=0.7, color='blue' )
plt.title('Books by subject')
plt.xlabel('subject')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
for idx, val in count_by_subject.items():
  plt.annotate(val, (val, idx), xytext=(2, 0), textcoords='offset points',
               fontsize=8, ha='center', color='green')
plt.show()

 

 

그래프에 대한 용어 파악을 위해 캡쳐&편집 해봤다.

(이런 정성을 보여야 우수 혼공족이 될 것 같은 욕심이........ 😁)

 

anotion

 

▶ 기본 미션

p. 314의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기

 

코랩에서는 다른 분들도 많이 할테니, 나는 나만의 환경에서~ ^^

 

 

① 데이터 불러오기 및 컬럼 정리

  - 지난 번에 '발행년도'를 int64로 만들기 위해 별의별 짓을 다 했는데 ... 간단히 끝냈다. 이런....

 

 

 

② 그래프 그리기

  - 나는 왜 매번 이상한 결과가 나오지!? ㅠ

 

 

 

③ sort_index

  - 'count_by_year' 의 index 값이 제대로 정렬이 되지 않아서 발생한 이슈이다.

  - 그래서, sort_index를 해줘야 한다.

 

 

 

④ graph

  - 이제 다시 그래프를 그려보자.

 

그런데, 미래에 출간된 책들은 정체가 뭘까!?

 

 

▶ 선택 미션

p. 316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기

 

① 데이터 불러오기 및 컬럼 정리

  - 책에 있는 내용대로 데이터를 만들었다.

 

 

② graph

  - 이거... 바로 결과가 나오니 뭔가 불안하다. 뭐지 ?!

 

 

 

 

주말에 가족여행이 있어서, 조금 서둘러 공부했다 !!! 아자 !!! 아자 !!!

반응형

+ Recent posts