[혼자 공부하는 머신러닝+딥러닝] 16강. 주성분 분석: 차원 축소 알고리즘 PCA 모델 만들기

Поделиться
HTML-код
  • Опубликовано: 17 янв 2025

Комментарии • 33

  • @kyoungheechu5398
    @kyoungheechu5398 2 года назад +1

    설명을 잘해주셔서 감사드려요

    • @haesun_park
      @haesun_park 2 года назад

      도움이 되셨다니 기쁘네요. 감사합니다. :)

  • @선형소수
    @선형소수 3 года назад +1

    잘들었습니다!

  • @관리자-j9h
    @관리자-j9h 5 месяцев назад +1

    안녕하세요! 좋은 강의 감사드립니다.
    책 321페이지, 영상에서는 17:20 부근에서 질문이 있습니다.
    P(4.5)라는 말은 주성분벡터(2 , 1)과 점 S(4,2)와의 수직거리를 나타내는 건가요??

    • @haesun_park
      @haesun_park 5 месяцев назад

      안녕하세요. P(4.5)는 점 (4, 2)가 벡터에 투영되었을 때 좌표와 원점까지의 거리를 의미합니다. 그런데 책에 실수가 좀 있네요. 사실 점 (4, 2)는 벡터 (2, 1) 위에 놓이게 되거든요. "샘플 데이터 s(4, 2)를"을 "샘플 데이터 s(2, 4)를"로 수정해 주세요. 감사합니다!

    • @관리자-j9h
      @관리자-j9h 5 месяцев назад

      @@haesun_park 그렇군요! 답변 감사합니다:)

  • @준홍-t6s
    @준홍-t6s Год назад +1

    와우!! 비전공자인 50대를 이해시키는 박해선 선생님의 클라스!!! 존경합니다. ^^ Deep Learning Illustrated도 시간되실때 강의 부탁드립니다.
    물론 습득 정도에 따라 다르겠지만 선생님이 올려주신 ML. DL BOOK Landscape를 다 따라가면 이 분야에서 어느 정도 수준이 되나요? 해당 분야 석사 수준은 되나요?

    • @haesun_park
      @haesun_park Год назад

      도움이 되신다니 기쁘네요. 책이나 영상 강의와 대학교 커리큘럼을 직접 비교하긴 어려울 것 같습니다. 감사합니다!

  • @null-vd2fm
    @null-vd2fm Год назад

    26:33

  • @몽키빈-f6l
    @몽키빈-f6l 3 года назад +1

    안녕하세요 저 17:51에 보면 점 (4,2) 가 4.5 로 투영된다는데 이유가뭘까요? 그리고 (2,1) 벡터에 (4,2)점이면 벡터위의점이여야하는거 아닌가요? 계산과정 적어주실수읶나요? 그냥 단순한 예시이신건지 책 지금까지 잘해왔는데 이부분이 이해가 잘 안되서요

    • @haesun_park
      @haesun_park 3 года назад

      안녕하세요. 아이고 이건 그냥 예입니다. 사례를 좀 더 실제처럼 만들었어야 하는데 죄송합니다. ㅠ.ㅠ

    • @몽키빈-f6l
      @몽키빈-f6l 3 года назад +1

      @@haesun_park 아 그렇군요 감사합니다 저기서 막혔는데 시원하네요 예시도그렇고 너무 이해하기쉬워서 저희스터디에서 책으로 공부중입니다 이렇게 바로바로 대답해주시니 더 좋네요 열심히하겠습니다 좋은책 감사합니다

  • @김영훈-z1e3z
    @김영훈-z1e3z 6 месяцев назад

    안녕하세요 교수님, 질문있습니다.
    다른 답변들을 바탕으로 궁금한게 생겼습니다.
    1. 주성분은 원본 데이터의 차원과 같다고 하셨습니다.
    즉, 강의 영상의 예시에 나온 10000개의 특성에서 나온 50개의 주성분은 각각 10000차원이라고 보면 될까요?
    2. (p.328 ~ p.329)
    10000개의 특성을 가진 이미지를 50개의 특성을 가진 데이터로 줄일 때, 0.03초로 20배 이상 감소했습니다.
    그렇다면, 2개의 특성으로 줄였을 때는 0.03초보다 감소해야 하는데 0.0412초가 나왔습니다.
    이는 결국 모순인데, 1번 질문처럼 각각의 주성분은 원본 데이터인 10000차원이라 특성이 줄어든다고 무조건 훈련 시간이 준다고 생각하면 안된다고 보면 될까요?
    50개의 주성분, 2개의 주성분으로 접근하면 이해가 되긴 합니다.

    • @haesun_park
      @haesun_park 6 месяцев назад +1

      안녕하세요. 훈련 세트의 차원이 10,000이면 주성분의 차원도 10,000이 됩니다. 훈련 세트의 차원이 줄면 훈련 속도가 줄어들지만 반드시 비례적으로 줄어드는 것은 아닙니다. 이는 알고리즘 구현 방식이나 컴퓨터 환경에 따라 달라질 수 있습니다. 감사합니다.

  • @다랑-d8e
    @다랑-d8e Год назад

    항상 좋은 강의와 책 감사합니다.
    주성분 분석에서 원본 데이터가 3차원이면 이것을 투영했을 때 분산이 최대가 되는 2차원 평면을 찾는거라고 생각했는데, 평면과 무관하게 3차원의 벡터만 찾는 것인가요?
    3차원이면 바로 1차원인 직선으로 투영하는 것보다 먼저 평면에 투영하는게 분산을 잘 보존하는 방법이 아닌지 궁금합니다.

    • @haesun_park
      @haesun_park Год назад

      안녕하세요. 주성분은 원본 공간에 있는 하나의 축입니다. 따라서 주성분은 항상 원본 데이터와 차원이 같습니다. 그다음 원본 차원보다 적은 개수의 주성분을 사용해 데이터를 변환합니다. 예를 들어 3차원 데이터에서 찾은 주성분 2개를 사용해 데이터를 변환하면 2차원 평면에 투영하는 효과를 얻게 됩니다. 이때 사용한 주성분은 원본 차원과 같은 3차원입니다. 혼동하지 마세요. 감사합니다.

  • @higher3088
    @higher3088 2 года назад +1

    마지막 35:35 이부분 보면 2개 특성 때문에 2차원으로 표현 가능하다고 하셨는데,
    제가 주성분을 50개로 하고 그냥 실행해 봤는데도 똑같은 결과가 나옵니다.. 여기서 특성(주성분)이 50개라서 오류가 나올줄 알았는데, 결과는 똑같이 나와서 어떤식으로 이해해야 할지 질문드립니다.

    • @haesun_park
      @haesun_park 2 года назад +1

      안녕하세요. 주성분은 가장 분산이 큰 방향을 찾습니다. 10개든 50개든 찾는 개수에 상관없이 분산이 큰 처음 두 개의 주성분은 동일합니다. 책 325페이지 설명된 분산 절의 설명을 참고하세요. 감사합니다!

  • @tho_mas_lee
    @tho_mas_lee 2 года назад

    30:34 두개의 특성으로 fit한 모델이 50개의 특성으로 fit한 모델보다 시간이 오래 걸리는 이유가 궁금합니다!

    • @haesun_park
      @haesun_park 2 года назад

      안녕하세요. 훈련 데이터의 특성은 두 개가 아닙니다. 324페이지를 참고해 주세요. 감사합니다!

    • @tho_mas_lee
      @tho_mas_lee 2 года назад

      @@haesun_park 32:40 에 사용한 fruits_pca에서 특성이 두개일때 cross_validate 시간이 앞서 50개로 하였을 때와 비교하면 0.039 과0.418 러2개일때가 더 오래 걸린 것 같아 질문드립니다!

  • @simon91982
    @simon91982 2 года назад

    선생님 항상 좋은 교재와 강의 덕분에 감사히 공부하고 있습니다!! 강의 중 질문이 있어 여쭤봅니다!!
    1) ‘주성분’이라는 게 데이터의 분산을 가장 잘 표현하는 방향을 찾는다고 하시니, 선형회귀의 회귀선으로 찾아도 되는 게 아닌가 하는 생각이 들었습니다. 회귀선을 사용하지 않고 굳이 ‘벡터’로 찾는 특별한 이유가 있는지 궁금합니다.
    2) inverse_transform 으로 복원할 때 원본데이터와 동일하게 10000개로 복원하셨는데, 실제로는 아예 똑같은 개수의 데이터로 복원하는 건 의미가 없지 않나요? 그냥 복원 과정 설명을 위한 예시라고 이해하면 되는거죠?
    3) 그렇다면 inverse_transform을 사용할 때 원본과 다른 개수로 복원도 가능한지 궁금합니다. 이를테면 50개의 주성분을 바탕으로 5000개 정도만 샘플을 만들어보고 싶다거나 할 때 PCA를 사용할 수 있는 건가요?
    감사합니다! 좋은 하루 되세요 :)

    • @haesun_park
      @haesun_park 2 года назад

      안녕하세요. 박해선입니다. 문의하신 내용에 답변 드립니다. 1) 주성분의 정의에 해당됩니다. 회귀가 분산이 큰 방향을 찾는 것은 아닙니다. 2) 원본 차원으로 복원하는 것이 필요한 작업이 있을 수 있지 않을까요? 3) 원본 차원보다 적은 차원으로 복원하는 것도 가능합니다. 감사합니다!

    • @simon91982
      @simon91982 2 года назад

      @@haesun_park 감사합니다!
      앞에서 배운 다른 알고리즘들과 달리, PCA는 어떤 문제해결에 직접적으로 쓰이기보다는 (마치 데이터 전처리처럼) 다른 모델을 사용하기 전에 차원을 축소해주는 변환기처럼 쓰이는 것이 주요 용도라고 이해해도 괜찮을까요?
      항상 질문도 금방금방 답해주셔서 너무 감사할 따름입니다ㅠㅠ 새해 복 많이 받으세요!!!

    • @haesun_park
      @haesun_park 2 года назад +1

      @@simon91982 넵, 그렇게 생각하셔도 좋습니다. 감사합니다!

  • @chjo70
    @chjo70 2 года назад

    주성분으로 변환한 데이터로 인식률과 인식 시간과 줄었는데...
    만약 새로운 입력 사진을 보낼때, 이때도 주성분으로 변환한 데이터로 인식을 해햐 하는거겠죠 ?

    • @haesun_park
      @haesun_park 2 года назад

      네 맞습니다. PCA를 데이터 변환의 하나로 보시면 됩니다. 감사합니다.

  • @HwangHanJae
    @HwangHanJae 3 года назад

    pca = PCA(n_components=0.5) 로 pca 객체를 만들고,
    print(pca.n_components_)출력하였더니 2가 나왔습니다.
    이것은 10000개의 특성(픽셀)을 2개의 특성(픽셀)으로 줄이고 사용할 수 있다고 이해해도 괜찮을까요??

    • @haesun_park
      @haesun_park 3 года назад +1

      안녕하세요. 2개로 줄인 특성이 효용성이 있는지는 문제에 따라 다릅니다. 만약 2개의 특성으로 하위 작업에서 성능이 만족스럽지 못하다면 설명된 분산의 비율을 높여서 더 많은 주성분을 사용해야 합니다. 감사합니다. :)

    • @HwangHanJae
      @HwangHanJae 3 года назад +1

      @@haesun_park 답변 감사합니다!

  • @gganghun
    @gganghun 2 года назад

    6-3 주성분 분석_다른 알고리즘과 함께 사용하기에서
    교차 검증 후, test_score의 평균값이 자꾸 0.37 정도로 나와서
    데이터를 보니까, 교차 검증의 1번째, 3번째, 5번째 훈련 점수가 0점으로 처리되고
    2번째, 4번째 훈련점수만 높은 점수를 보입니다.
    'score time'도 0초대인 부분이 있구요 ㅠㅠ
    무엇이 문제인지 모르겠네요 ㅠㅠ.
    혹시 몰라, 아래 제 코드를 첨부합니다!
    fruits = np.load('fruits_300.npy')
    fruits_2D = fruits.reshape(-1, 100*100)
    from sklearn.linear_model import LinearRegression
    lr = LinearRegression()
    target = np.array([0]*100 + [1]*100 + [2]*100)
    from sklearn.model_selection import cross_validate
    scores = cross_validate(lr, fruits_2D, target)
    print(scores)
    ----------------------------------------------
    실행 결과 중 'test_score'
    'test_score': array([0. , 0.96243541, 0. , 0.92424684, 0. ])

    • @haesun_park
      @haesun_park 2 года назад

      안녕하세요. 코드만으로는 어떤 문제인지 알기 어렵습니다. 코랩의 코드를 실행해서 차이점을 확인해 보시는 것이 좋을 듯 합니다. colab.research.google.com/github/rickiepark/hg-mldl/blob/master/6-3.ipynb 감사합니다!

    • @peterpanlab2694
      @peterpanlab2694 2 года назад

      책에는... LinearRegression -> LogisticRegression 이네요.