[머신러닝] PCA 차원 축소 알고리즘 및 파이썬 구현 (주성분 분석)

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ก.ย. 2024
  • github.com/min...
    PCA (Principal Component Analysis) 알고리즘을 설명 드리고 직접 파이썬으로 구현해봅니다.
    제가 만든 모든 머신러닝 관련 영상은 아래 재생목록에서 쉽게 찾으실 수 있습니다.
    • 머신러닝

ความคิดเห็น • 65

  • @보라색사과-l1r
    @보라색사과-l1r 5 ปีที่แล้ว +2

    머신러닝을 공부하는 학생입니다. PCA에 대해 배운지는오래되었는데 매끄럽게 이해가 안돼 설명하라고 하면 잘 못했는데, 이제는 명쾌하게 말할 수 있을것 같아요. 대단히 감사합니다!!

  • @이드니
    @이드니 ปีที่แล้ว +1

    기반지식이 부족하더라도 한번에 이해할수 있게 해주는 강의 였습니다
    특히 2:17 여기 그림을 보니 왜 분산을 가장 크게 하는 축을 찾는지 단박에 이해 되었네요ㅠ
    여러가지 강의를 돌려봐도 그 의미가 안와닿았었는데
    감사합니다ㅠ

  • @a1034a
    @a1034a 5 ปีที่แล้ว +3

    강의가 매끄럽고 너무 좋습니다. 강화학습도 인공지능의 한 영역을 구축해가는 것 같은데, 나중에 한번 다뤄 주시면 좋겠습니다. 감사합니다.

  • @정현석-v9l6v
    @정현석-v9l6v 3 ปีที่แล้ว +2

    캬,, 설명 눈물나게 잘하시네요

  • @장종훈-u1t
    @장종훈-u1t 11 หลายเดือนก่อน

    와.. 예전영상인데 돌고 돌아서 다시 보니 또 다른게 보이네요. 이 영상이 AI를 이해하는데 큰 도움이 되네요.

  • @ukjoeee
    @ukjoeee 6 ปีที่แล้ว +5

    최근에 eigen vector를 배웠는데 PCA까지 연결시켜 설명해주셔서 너무 감사합니다.!!!

    • @TheEasyoung
      @TheEasyoung  6 ปีที่แล้ว +2

      감사합니다. eigen vector를 정확히 이해하시면 머신러닝에 너무나 큰 도움이 되요. eigen vector의 특성은 외우다 보면 힘들 정도로 너무 많아요, 저같은 경우, eigen vector가 이용되는 사례들을 경험하면서 다시 한번 그 위대함을 느꼈답니다, PCA도 그 중 하나에요. ㅎ

  • @박해찬-x7v
    @박해찬-x7v 4 ปีที่แล้ว +1

    뭐지 내가 똑똑해진건가 이 분이 설명을 엄청 잘 하시는건가 아님 둘다 인건가 다 이해가 되넹

  • @clark87
    @clark87 5 ปีที่แล้ว +1

    언제 들어도 너무 쉽게 설명을 해주시는것 같아요
    많은 도움이 되어 감사드립니다

  • @escapin_gravity
    @escapin_gravity 2 ปีที่แล้ว +2

    그저 갓민석...

  • @brownblackrock1024
    @brownblackrock1024 6 ปีที่แล้ว +4

    이사람은천재야

  • @Sunnyparticle
    @Sunnyparticle 5 ปีที่แล้ว +3

    우와! 정말 설명 잘하시네요. 막연하게 뒤죽박죽 뒤엉켜있던 개념이 이 짧은 강의 하나로 딱 잡혔습니다. 정말 감사합니다.

  • @hananehome2108
    @hananehome2108 3 ปีที่แล้ว +1

    제가 배경지식이 있지만 보면서 옳다구나 했습니다... 설명 감사합니다...

  • @ssmoon4969
    @ssmoon4969 5 ปีที่แล้ว +2

    우연히 이 채널을 보게됐는데 너무 좋은 설명이네요!! 감사합니다 ㅎㅎ

  • @user-rp2lk2fe2x
    @user-rp2lk2fe2x 2 ปีที่แล้ว +1

    덕분에 졸업논문 쓸 수 있을거 같네요... 정말 감사합니다 ㅎㅎ

  • @펭아-i9z
    @펭아-i9z 5 ปีที่แล้ว +1

    설명이 깔끔하고 이해하기쉬워요!

  • @jinhwanjung4406
    @jinhwanjung4406 6 ปีที่แล้ว +2

    항상 잘 보고 있습니다. 쉽게 설명해주셔서 감사드립니다.

    • @TheEasyoung
      @TheEasyoung  6 ปีที่แล้ว

      jinhwan Jung 답글 남겨주셔서 고마워요, 힘이 정말 많이 됩니다. 덕분에 저도 기뻐요 ^^

    • @jinhwanjung4406
      @jinhwanjung4406 6 ปีที่แล้ว +1

      개인적으로 ML 구독중, Machine Learning in Action에서 봤던 내용도 있어서, 더욱 끌립니다. 가장 흥미로웠던 부분은 Kaggle Titanic 예제였습니다. 저는 R로 실습하다가 Python으로 하려니 버벅대서 결과가 안좋은 예제였는데, 무척이나 깔끔한 코딩에 감탄했습니다. 출력해서, 어떤식으로 접근해서 Data를 풀어가는지, 틈날때보다 들여다봅니다. 기회되시면, Kaggle 다른 예제도 다루어주시면 좋겠습니다.

    • @TheEasyoung
      @TheEasyoung  6 ปีที่แล้ว +1

      너무 감사합니다. 안그래도 Kaggle의 MNIST 예제를 TensorFlow로 예측하는 예제도 구상하고 있어요. 기본적인 머신러닝이 완료되면 NLP쪽으로도 진행할 예정이기도 하구요. 피드백 너무 감사드려요!

    • @jobsub2613
      @jobsub2613 6 ปีที่แล้ว +1

      최고십니다. NLP도 당근 Python으로 진행해 주시는거죠?

    • @TheEasyoung
      @TheEasyoung  6 ปีที่แล้ว +1

      seongmin lee 아이쿠! 제 전문 분야가 NLP 머신러닝인거 어떻게 아셨죠? ㅎㅎ 제 강의 내용을 보고 유추하셨다면 대박! 2017년도는 딥러닝 NLP의 해였다고 해도 될만한 해였어요. 네, 만들겁니다 ㅎㅎㅎ 기초부터 최신 논문까지 좌악 정리해볼께요

  • @miyu4277
    @miyu4277 5 ปีที่แล้ว +2

    감사합니다. 넘 쉽게 잘배웠어요

  • @linuxer2460
    @linuxer2460 3 ปีที่แล้ว +1

    설명 너무 감사합니다~

  • @joykwon77
    @joykwon77 4 ปีที่แล้ว +1

    명쾌한 설명 감사합니다.

  • @jahoonjeong8649
    @jahoonjeong8649 6 ปีที่แล้ว +1

    완벽한 설명 감사합니다! (as always!)

  • @faketrue6283
    @faketrue6283 ปีที่แล้ว +1

    선생님 감사합니다!!

  • @haneulkim4902
    @haneulkim4902 3 ปีที่แล้ว +1

    좋은영상 감사합니다 :)

  • @jobsub2613
    @jobsub2613 6 ปีที่แล้ว +3

    이렇게 쉽게 설명하셔도 되나요 ㅎㅎㅎ

    • @TheEasyoung
      @TheEasyoung  6 ปีที่แล้ว +1

      seongmin lee 감사합니다, 쉽게 이해되었다는 말이 제게 가장 큰 칭찬이에요 ㅎㅎ

  • @pasongsong
    @pasongsong 5 ปีที่แล้ว +1

    와, 정말 이해하기 쉽고 기억하기 좋게 알려주시네요 =.=b 구독하고 갑니다'

  • @dkd8970
    @dkd8970 6 ปีที่แล้ว +1

    감사합니다 덕분에 많이 배우고 갑니다!!

    • @TheEasyoung
      @TheEasyoung  6 ปีที่แล้ว +1

      에이프릴 감사합니다, 덕분에 저도 힘이 나네요 ^^

  • @가상민-x7n
    @가상민-x7n 4 ปีที่แล้ว +1

    와...미쳣습니다 진짜 감사합니다 요즘 차원축소 pca와 독립성분분석 음원분리.칵테일문제 ica에 대해서 엄청 배우고 있습니다.PCA 주성분분석은 고유값과 고유벡터를 구해서 가장 높은 고유값을 이용해서 구하는 분산이 가장 큰것을 이용하는것이 맞겠죠!! ㅎㅎ
    혹시...ICA에 대해서도 아신다면 답변해주실 수 있으 실까요 ! 저는 현재ica의 특이값분해와 정보이론으로 선형종속성을 제거한후 정규화작업을 하고 회전벡터을 구하려고 하는데 ...아직 제데로된 정리글을 모르겠습니다 ㅠ 전 오일석 교수님과 튜토리얼 논문을 참고했습니다 ^^ 감사합니다 이런 좋은 영상 ~

    • @TheEasyoung
      @TheEasyoung  4 ปีที่แล้ว

      감사합니다. 제가 ica 경험이 없어서 지금은 무리입니다 ㅎㅎ 그래도 언젠가 알게 되면 잘 정리해보도록 하겠습니다.

  • @sookhyanglee7741
    @sookhyanglee7741 4 ปีที่แล้ว

    강의가 너무 좋아요~ 정말 천재세요~ 2차원 output이 레이블일 경우는 어떻게 되는지요. 14개의 상관 변수를 통해 레이블인 2개 좌표로 학습을 시켜야 하는 경우는 어떻게 되는지요.

    • @TheEasyoung
      @TheEasyoung  4 ปีที่แล้ว +1

      보통 레이블은 1차원인데요, 레이블이 2차원이시면 그건 시각화를 잘 해보시면 될 것 같습니다. Seaborn에 많은 plot 그래프가 있으니 참조해보세요.

  • @beenzino1152
    @beenzino1152 4 ปีที่แล้ว +1

    좋은 영상 감사합니다.
    영상을 보고 한 가지 궁금한 점이 생겼습니다.
    7분 33초에 x_std와 고유값이 큰 고유벡터를 행렬곱해서 projected_X를 만드셨던데
    PC에 정사영시키려면, 기존의 데이터 행렬과 PC를 단순히 행렬곱하면 되는겁니까?
    자세한 답변 부탁드립니다.
    감사합니다.

  • @user-mi7cc4hb2g
    @user-mi7cc4hb2g 2 ปีที่แล้ว

    pca는 연속형 변수에 사용하도록 최적화 된 차원축소 기법이며, 범주형에는 맞지 않다는것이 많은 연구를 통해 증명된 것으로 알고있습니다. 저렇게 범주형 변수까지 pca로 차원축소하는것이 올바른 방법인가요?

  • @user-in3bu1ow1r
    @user-in3bu1ow1r ปีที่แล้ว

    첨부하신 코드로 직접 따라가보면서 실행해보면
    직접 계산 한것과 sklearn의 함수 이용한 것의 plot에서 라벨에 차이가 있습니다.
    영상에는 똑같이 보이게 나오는데 왜 그런지 알 수 있을까요?

  • @jhoncharles3207
    @jhoncharles3207 3 ปีที่แล้ว +1

    정말 감사합니다!! 정말 궁금한 것이 있는데요, 중간에 feature들이 column에 있는데, 이것을 row로 바꾼다고 하셨는데요, 바꾸려고 하는 이유가 무엇인지 알 수 있을까요??? @6:23 부근입니다!

    • @TheEasyoung
      @TheEasyoung  2 ปีที่แล้ว

      안녕하세요. 데이터들이 최대한 겹치지 않게 차원 축소를 하기 위해서 각 피쳐마다의 데이터를 모은다고 생각하시면 됩니다. 감사합니다.

  • @양상민-d1x
    @양상민-d1x 3 ปีที่แล้ว

    안녕하세요! 알고리즘에 이끌려 이것저것 찾아보다 들어왔는데 정말 이해가 쉽습니다 ㅎㅎ 혹시 제가 현재 시계열 데이터를 이용해서 분류를 하고자 하는데 해당 PCA방법을 사용하여 진행하여도 군집화를 잘 이루어 낼 수 있을까요?

  • @hlee6239
    @hlee6239 3 ปีที่แล้ว +1

    안녕하세요? 혹시, 비지도학습의 경우에 레이블이 없는 데이터 테이블(매트릭스)에 대해선 차원축소를 실행할때 다른점이 있을까요?

    • @TheEasyoung
      @TheEasyoung  3 ปีที่แล้ว

      다른 점이 없습니다. 레이블이 없어도 pca는 수행 가능합니다.

  • @쵸이-s4w
    @쵸이-s4w 3 ปีที่แล้ว +1

    혹시 이미지 데이터에 주성분분석을 사용하면 Y값이 들어가는 부분은 어떻게 해야하나요? pca가 정답이 따로 없는 비지도 학습아닌가용? ㅠ

    • @TheEasyoung
      @TheEasyoung  3 ปีที่แล้ว

      Pca는 데이터의 차원을 변경하는 알고리즘입니다. 차원 변경 시 y값은 사용되지 않습니다. 차원 변경 후 y값에 따라 데이터의 색상을 달리하여, 차원 축소가 잘 이뤄졌는 지 확인 하실 수 있어요.

  • @dalnara14
    @dalnara14 4 ปีที่แล้ว

    강의 감사합니다! 그래프에 y-axis 없이 넘버라인에 플랏해도 되는건가요? 그리고 혹시 2d로 reduce할 경우 eigenvalue가 가장 높은 pc 두개를 사용해도 되는건지요..?

  • @이은영-v6l
    @이은영-v6l 3 ปีที่แล้ว +1

    안녕하세요 강의 잘 들었습니다. 한 가지 질문이 있는데요, 이 PCA 차원 축소 기법을 적용하여 압축한 데이터를 CNN의 인풋 데이터로 사용할 수 있나요?

    • @TheEasyoung
      @TheEasyoung  3 ปีที่แล้ว

      네 사용 가능합니다. 단 PCA는 차원이 축소되며 정보 역시 손실될 수 있는 점 알아두시면 좋을 것 같습니다.

    • @이은영-v6l
      @이은영-v6l 3 ปีที่แล้ว

      @@TheEasyoung 답변 감사합니다. 한 가지 더 여쭤봐도 될까요? '이미지 데이터'를 PCA 처리한 뒤 CNN에 적용하고 싶은데요, 한 이미지의 픽셀 값을 feature로 주어 PCA 차원 축소한 결과가 각 이미지 별 PC값으로 구성된 데이터 시트로 나오는데, CNN은 2차원 배열의 데이터를 인풋으로 받는다고 알고 있습니다. 그렇다면 위의 결과를 다시 가로 세로 2차원 배열로 변경해야 하나요? 예를들어, 주성분을 6개로 했을 때 나온 PC1 ~ PC6에 해당하는 값을 2*3으로 변경해서 CNN의 인풋으로 집어넣으면 될까요?

    • @TheEasyoung
      @TheEasyoung  3 ปีที่แล้ว +1

      참고로 CNN의 커널의 차원은 2차원일 필요는 없습니다. CNN의 장점은 동물 얼굴을 인풋으로 줄 경우, 주변 픽셀과 현재 픽셀을 전체적으로 봐서 이게 눈인지 코인지 판별할 수 있는 정보를 준다는 점이죠. 픽셀들을 pca로 축소해서 6개의 숫자가 나왔는데, 이 6개의 숫자를 2*3으로 이웃되게해서 CNN이 봐야할 이유를 특별히 모르겠습니다.

    • @이은영-v6l
      @이은영-v6l 3 ปีที่แล้ว +2

      ​@@TheEasyoung 저는 동물 얼굴에 해당하는 인풋 이미지를 pca 처리하여 이미지의 픽셀 개수를 줄이고, 이 줄어든 이미지를 인풋으로 넣고자 했습니다. pca에 적용하기 이전에, 한장의 이미지의 픽셀들을 일렬로 배열(flatten)하고 pca를 처리하기 때문에, 이후의 결과를 다시 사각형의 이미지로 변경시켜야 하는지에 대해 의문이 들었습니다. CNN에 자주 활용되는 mnist의 28*28의 이미지 처럼요.. 아직 공부가 부족하여 제가 착각하고 있는 부분이 있는 것 같네요. 더 공부해 봐야할 것 같습니다! 늘 좋은 강의 감사드리고 답변 주신 것 또한 감사드립니다~!!

    • @TheEasyoung
      @TheEasyoung  3 ปีที่แล้ว +1

      별도로 pca 안쓰시고 그냥 cnn의 컨볼루셔널 레이어를 여러개 사용해서 차원을 줄여가시는 게 더 심플하고 이웃정보도 유지될 거로 보입니다. 즐거운 연구되세요.

  • @sunwooim1851
    @sunwooim1851 4 ปีที่แล้ว +2

    선생님 안녕하세요. TSNE의 경우, 예를들어 10차원을 줄였는데, 원래 정보대비 정보손실률을 확인할 수 있는 방법이 있나요? PCA의경우 변수.explained_variance_ratio_ 명령어로 사용하면 되는데. TSNE의 경우는 확인 할 수 있는 방법을 모르겠습니다.

    • @TheEasyoung
      @TheEasyoung  4 ปีที่แล้ว +1

      제 능력 이상의 질문이네요! 나름 검색해보았는데 마땅한 답변도 못찾았습니다. 혹여 알게 되시면 공유 부탁드릴께요. 감사합니다.

    • @sunwooim1851
      @sunwooim1851 4 ปีที่แล้ว

      @@TheEasyoung 말씀주셔서 감사합니다!

  • @haneulkim4902
    @haneulkim4902 3 ปีที่แล้ว +1

    PCA 를 적용한후에 PC들을 보는데 만약 총 100개feature 에서 50개의 PC가 83%variance in dataset을 설명한다는것은 저희 데이터가 linear model 에 적합하지 않다는건가요? 추가로 std_scaler -> PCA (n_components=50)-> logistic regression 이 그냥 전처리 없이 logistic regression 한것보다 accuracy가 낮은건 어떤 이미이죠? 어떤식으로 더 debugging 가능할까요?
    p.s.수치들은 예시입니다.

    • @TheEasyoung
      @TheEasyoung  3 ปีที่แล้ว

      해당 정보만으로 리니어 모델에 적합한지 규정하긴 어렵구요, 랜덤 포레스트 모델을 사용해서 feature importance을 알아봐서 몇개의 피쳐가 중요한지 알아보실 수도 있고 accuracy가 로지스틱 모델보다 나은지 보실 수 있어요. 딥러닝 모델과 비교해서 non linear 모델이 성능이 더 나은 지 보실 수도 있습니다. pca 출력값을 활용한 로지스틱 모델이 성능이 낮다는 것은 아마 pca가 오리지널 입력값에서 필요란 정보를 조금 손실해서 일수도 있습니다. 100개의 피쳐에 있는 정보가 50개로 축약되서 정보의 손실 가능성이 있어요.

    • @haneulkim4902
      @haneulkim4902 3 ปีที่แล้ว +1

      @@TheEasyoung 감사합니다 :)
      1. 랜덤 포레스트도 non linear 모델 인데 그럼 만약 랜덤 포레스트가 더 좋은 퍼포먼스를 보이면 저희 데이터는 non-linearly separable 이란건가요?
      2. 혹시 모델 적용 전데 데이터가 linear 인지 non-linear 인지 볼수있는방법은 뭐가 있나요 (high dimensional dataset 일때요)?

    • @TheEasyoung
      @TheEasyoung  3 ปีที่แล้ว +1

      모든 데이터라는 게 샘플된 데이터이기에 선형분리 된다 안된다 판단이 어렵습니다. 선형분리 되었다하여도 오버피팅되었을 수도 있구요. 랜덤 포레스트와 비교하셔도 되고, 리니어 svm과 커널 svm을 비교하셔도 될 거 같습니다. 보통 선형모델의 학습 에러율 변화가 일어나지 않지만, 비선형 모델의 학습 시 에러율이 많이 줄어든다면 데이터의 선형 분리가 어렵다고 판단할 수 있습니다.

    • @haneulkim4902
      @haneulkim4902 3 ปีที่แล้ว

      @@TheEasyoung 감사합니다 :)