머신러닝 - 서포트벡터머신(SVM) 🔑 Support Vector Machine | R | svm() | 초평면 hyperplane | 슬랙변수 slack | 커널함수 kernel

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

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

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

    교수님 꼼꼼한 설명 너무 감사합니다

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

    늦게 공부 시작한 학생인데요, 정말 여러 통계 영상보면서도 댓글은 잘 안쓰는데, 교수님 강의로 뭔가 답답한 부분이 해결된 것 같아 감사하다는 말씀 꼭 드리고 싶었습니다. 좋은 영상 정말 감사합니다.

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

      감사합니다. 도움이 되셨다니 저도 기쁩니다.

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

    와 설명 너무 좋습니다! 감사합니다

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

    자세한 설명 감사합니다! ㅠㅠ

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

    1. svm으로 다중 분류할 때는 영상에서처럼 y(종속변수)를 제외한 x(독립변수)끼리의 다차원척도법(MDS)으로 변경 후 적용해야만 하나요?
    2. svm으로 회귀모델을 구축할 때에도 svm() 함수에 kernel = "linear"를 입력해주면 되는건가요?

    • @kykwahk
      @kykwahk  2 года назад +2

      1. 아니에요. 지금 말씀하신 것은 강의 중 SVM 결과를 다차원척도법(multidimensional scaling)을 이용하여 2차원 공간상에 나타내 보여준 부분입니다. 다차원척도법을 이용하여 관측값들을 두 개의 차원으로 매핑한 것일 뿐이지 SVM 모델을 적용한 것은 아닙니다. 강의 영상을 주의 깊게 다시 보시길 권해드려요.
      2. 관계 없습니다. svm() 함수는 기본적으로 종속변수, 즉 y 인수에 지정된 값이 팩터(factor)이면 분류문제로 간주하고, 그렇지 않으면 회귀문제로 인식합니다.

  • @trthffil
    @trthffil 4 года назад

    교수님 첫출부터 오류가 있어서 여쭤봅니다.
    제 컴의 iris의 열은 sepal.length sepa.width petal.length petal.width species 과 같습니다.
    그런데 교수님의 첫줄
    iris.sub = subset(iris,
    select=c("Sepal.Length", "Sepal.Width","Species"),
    subset=Species %in% c("setosa", "virginica"))
    을 입력하면 결과는
    Error in Species %in% c("setosa", "virginica") :
    객체 'Species'를 찾을 수 없습니다.
    라고 나옵니다. 그리고 그 뒤로는 진도를 나갈 수가 없습니다. 위의 제 컴의 iris의 열의 문제일까요? 제 컴의 열대로 바꿔서 해봐도 결과가 안나옵니다. 대문자나 문자가 안맞는 것 같은데요. 뭐가 문제일까요?
    > iris.sub$Species = factor(iris.sub$Species)
    > head(iris.sub); tail(iris.sub)
    [1] sepal.length sepa.width species Species
    [1] sepal.length sepa.width species Species
    두번째줄을 입력하면 이렇게 나옵니다.

    • @kykwahk
      @kykwahk  4 года назад

      표준패키지에 포함되어 있는 iris 데이터셋은 변수명의 첫글자 두 개가 대문자입니다. 작업공간에 동일 이름의 다른 데이터셋이 적재되어 있는 것 같습니다. 다음과 같이 작업공간을 모두 지운 다음에 iris 데이터셋을 확인해보세요: rm(list=ls()).

    • @trthffil
      @trthffil 4 года назад

      @@kykwahk 감사합니다. 정상적으로 작업이 됩니다.^^

  • @trthffil
    @trthffil 4 года назад

    set.seed(123)
    iris.svm2 = svm(Species ~ ., data=iris.sub,
    kenel="linear", cost=100, scale = FALSE)
    summary(iris.svm2)
    w = t(iris.svm2$coefs) %*% iris.svm2$SV
    b = -iris.svm2$rho
    ggplot(iris.sub, aes(x=Sepal.Length, y=Sepal.Width)) +
    geom_point(aes(color=Species, shape=Species), size=2) +
    geom_point(data=iris.sub[iris.svm2$index, c(1, 2)],
    color="darkblue", shape=21, stroke=1.0, size=5) +
    geom_abline(intercept = -b/w[1, 2], slope = -(w[1, 1]/w[1, 2]),
    color="dimgray", lty="dashed", lwd=1)
    교수님 위의 그래프를 출력하면 교수님 처럼 출력이 안됩니다. 세토사 2개와 버지니카 1개 사이에 직선이 그려지지 않습니다.
    그래프가 정상적으로 출력이 안되는 것은 코드봐도 틀린 부분이 없습니다. 문제가 무엇일지 여쭤봅니다.
    아래 부분은 정상적으로 출력이 됩니다.
    iris.svm2.pred = predict(iris.svm2, newdata = iris.sub)
    table(iris.sub$Species, iris.svm2.pred,
    dnn = c("Actual", "Predicted"))
    mean(iris.sub$Species==iris.svm2.pred)

    • @kykwahk
      @kykwahk  4 года назад +1

      RStudio의 Environment 탭에서 작업공간에 적재되어 있는 함수와 변수를 잘 살펴보세요. 예를 들어, t() 함수를 사용자 정의 함수로 만든 것이 있다면 base 패키지의 t() 함수가 아니라 사용자 정의 함수가 먼저 실행됩니다. 다음과 같이 작업공간을 모두 삭제하고 실행해보세요: rm(list=ls()).