MDPI 리모트 센싱에 냈던 논문 계속 수정 중. 일단 제일 중요한 코멘트는 cross-validation 할 때 사전에 smote 하면 안된다는 것.
우리가 (논란 끝에) 데이터를 먼저 smote해서 늘린 다음에 training/test 파티셔닝을 했다. 여기에 대해, smote 할 때 이미 test 데이터의 정보가 들어갔기 때문에 cross-validation 이라고 볼 수 있냐는 질문을 당연히 할 수 있고, 역시나 질문이 나왔다. 물론 틀린 얘긴 아니고, 그래서 초고의 마지막 시나리오가 smote에 보여주지 않은 데이터만 test에 이용한 것였다. 중간 시나리오들은 먼저 smote를 했고.
여기에 대해 우리가 여전히 smote를 우선 할 필요가 있다는 얘길 좀 하고 싶었는데, 우선 우리가 심하게 imbalance 된 자료를 쓰기 때문에 파티셔닝 할 때 자료가 이미 불어나 있지 않으면 minor class에 대해서는 테스트 픽셀 자체가 거의 없어진다. 암환자가 1000명 중 한 명이라고 하고, 그 한 명을 이미 training 할 때 썼으면 test할 환자가 한 명도 없는 것과 같은 얘기. 그래서 smote(혹은 다른 data augmentation 방법)을 써서 늘린 자료 중에서 test를 해도 되는 지가 결국 관건.
여기에 대해, 물론 완벽한 답은 아니지만, Moreno-Torres의 Study on the Impact of Partition-Induced Dataset Shift on k-fold Cross-Validation (202)
란 논문을 빌려와서, cross-validation 할 때 사실 dataset shift가 일어난다, 이걸로 보충하고자 한다. smote된 자료를 쓰지 않고 원자료만 가지고 cv 할 때 dataset shift 때문에 역시 그것도 좋지 않다는 얘기. smote하면 최소한 dataset shift를 피할 수 있다 그런 식으로 방어.
그리고 SVM learning 할 때 하이퍼파라미터 튜닝에 대한 코멘트가 있었고, 우리도 길게 토론을 했는데, external cross-validation에선 복잡한 파티셔닝 기법을 쓴느데 svm learning 할 때 내적으론 navie partitioning 하는 게 좋으냐 아니냐 갑론을박. 결국 svm 구현 자체의 CV는 끄고 외부에서 개별 learn/run 마다 cost 파라미터 (C) 만 튜닝 하기로 했다. 그 전엔 전체에 대해 C파라미터는 고정을 했음. sigma 파라미터는 찾아보니 svm 함수들에서 보통 휴리스틱 이용해서 적당한 값을 넣어 준대서 (최적화는 아님), 그대로 두기로 했다. cost파라미터를 보통 한 개 쓰는 데 다음 논문에 이용하려고 cost sensitive learning 이용하고 있음. 하지만 각 클래스/타입 별로 cost를 어떻게 정해야 하는 지가 당연히 또 다른 문제로 제기되고, 일단 비율의 역수를 썼을 때 결과는 좋지 않았음. 적당한 imbalance 일 때는 괜찮다고 보고돼 있는데, 우리처럼 심각한 임밸런스에선 잘 먹히지 않음. 그리고 클래스 숫자도 너무 많음. 이 너무 많은 클래스 숫자가 결국 논문의 창의적인 면이라 버리지 않고 있음. 셋 다 고집 세서 다행이다 이럴 때 보면.. 난 커널도 좀 튜닝하고 그러고 싶은데, 일단 나중에..
RSE에 낼 마지막 논문은 어떻게 돼야 하는지 좀 더 감이 오고 있음. landsat 자료도 같이 써서 비교하면 좋겠다 생각 중이다.
---
홈즈랑 로도스 얘길 했는데, 좀 기분이 나빴을 수도 있다. 무슨 얘기 하다가 내가, 딴에는 좋은 뜻으로 한 얘기 였는데, 여기가 로도스다, 뛰어 봐라, 란 말이 있다고 한 뒤에 잠깐 출처에 대해 얘길 했었다. 천정배 씨 책도 그 제목이었지만 여튼 홈 기분으론 실패한 정치인이라.. (나는 아직 좀 더 지켜보고 싶다). 여튼 원 출처를 찾다 보니 독어 위키피디어 페이지 나왔다.
http://de.wikipedia.org/w/index.php?title=Hic_Rhodus,_hic_salta
여기선 독어로 Zeig hier, beweise, was du kannst. 로 해석 해 둠.
나는 이솝을 인용한 에라스무스를 인용한 헤겔을 인용한 마르크스를 인용한 한국 뭔가 좌익서적에서 읽었을 가능성이 태반;
글쎄, 그래도 좋은 짬을 주는 말였다. 원래 말의 뜻과, 헤겔이나 마르크스가 그걸 어떻게 사용했는가에 대해 생각해 볼 기회도 있었지만, 얼마나 많은 말을 십 차 이십 차 인용하며 책임지지 못하고 있는 가, 그렇지 않은 가 스스로 반성하는 기회도 됐다. 한 5차 인용 쯤으로 넘어가면 원래 말이 가진 뜻은 사라지고, 그저 수사로 기능하게 된다, 다분히 좋지 않은 의도와 부정의한 권위를 등에 업은.
홈에게 좀 미안했고, 스스로에겐 반성에 더해 다시 한 번 생각 해 볼 기회를 줬다.
Hic Rhodus, hic salta.
나는 도대체 무엇을 할 수 있는가
----
그래도 솔직히, 지금까지 철학은 세계를 다양하게 해석해 왔지만 중요한 것은 세계를 변화시키는 것이다! 류의 주장 - 한 때 중요하게 생각했던 주장에 대해 지금 생각은 많이 다르다. 아니 뭐 제대로 해석도 안 되는데 뭘 어떻게 변화시키려는 것이냐, 하고. 너무 쉽게 타인의 삶과 가치에 개입하는 것을 정당화 했던, 역시 좋지 못한 10차 인용 아니었는 가 또 반성했다.
나는 반성만 하고 있는 가?
우리가 (논란 끝에) 데이터를 먼저 smote해서 늘린 다음에 training/test 파티셔닝을 했다. 여기에 대해, smote 할 때 이미 test 데이터의 정보가 들어갔기 때문에 cross-validation 이라고 볼 수 있냐는 질문을 당연히 할 수 있고, 역시나 질문이 나왔다. 물론 틀린 얘긴 아니고, 그래서 초고의 마지막 시나리오가 smote에 보여주지 않은 데이터만 test에 이용한 것였다. 중간 시나리오들은 먼저 smote를 했고.
여기에 대해 우리가 여전히 smote를 우선 할 필요가 있다는 얘길 좀 하고 싶었는데, 우선 우리가 심하게 imbalance 된 자료를 쓰기 때문에 파티셔닝 할 때 자료가 이미 불어나 있지 않으면 minor class에 대해서는 테스트 픽셀 자체가 거의 없어진다. 암환자가 1000명 중 한 명이라고 하고, 그 한 명을 이미 training 할 때 썼으면 test할 환자가 한 명도 없는 것과 같은 얘기. 그래서 smote(혹은 다른 data augmentation 방법)을 써서 늘린 자료 중에서 test를 해도 되는 지가 결국 관건.
여기에 대해, 물론 완벽한 답은 아니지만, Moreno-Torres의 Study on the Impact of Partition-Induced Dataset Shift on k-fold Cross-Validation (202)
란 논문을 빌려와서, cross-validation 할 때 사실 dataset shift가 일어난다, 이걸로 보충하고자 한다. smote된 자료를 쓰지 않고 원자료만 가지고 cv 할 때 dataset shift 때문에 역시 그것도 좋지 않다는 얘기. smote하면 최소한 dataset shift를 피할 수 있다 그런 식으로 방어.
그리고 SVM learning 할 때 하이퍼파라미터 튜닝에 대한 코멘트가 있었고, 우리도 길게 토론을 했는데, external cross-validation에선 복잡한 파티셔닝 기법을 쓴느데 svm learning 할 때 내적으론 navie partitioning 하는 게 좋으냐 아니냐 갑론을박. 결국 svm 구현 자체의 CV는 끄고 외부에서 개별 learn/run 마다 cost 파라미터 (C) 만 튜닝 하기로 했다. 그 전엔 전체에 대해 C파라미터는 고정을 했음. sigma 파라미터는 찾아보니 svm 함수들에서 보통 휴리스틱 이용해서 적당한 값을 넣어 준대서 (최적화는 아님), 그대로 두기로 했다. cost파라미터를 보통 한 개 쓰는 데 다음 논문에 이용하려고 cost sensitive learning 이용하고 있음. 하지만 각 클래스/타입 별로 cost를 어떻게 정해야 하는 지가 당연히 또 다른 문제로 제기되고, 일단 비율의 역수를 썼을 때 결과는 좋지 않았음. 적당한 imbalance 일 때는 괜찮다고 보고돼 있는데, 우리처럼 심각한 임밸런스에선 잘 먹히지 않음. 그리고 클래스 숫자도 너무 많음. 이 너무 많은 클래스 숫자가 결국 논문의 창의적인 면이라 버리지 않고 있음. 셋 다 고집 세서 다행이다 이럴 때 보면.. 난 커널도 좀 튜닝하고 그러고 싶은데, 일단 나중에..
RSE에 낼 마지막 논문은 어떻게 돼야 하는지 좀 더 감이 오고 있음. landsat 자료도 같이 써서 비교하면 좋겠다 생각 중이다.
---
홈즈랑 로도스 얘길 했는데, 좀 기분이 나빴을 수도 있다. 무슨 얘기 하다가 내가, 딴에는 좋은 뜻으로 한 얘기 였는데, 여기가 로도스다, 뛰어 봐라, 란 말이 있다고 한 뒤에 잠깐 출처에 대해 얘길 했었다. 천정배 씨 책도 그 제목이었지만 여튼 홈 기분으론 실패한 정치인이라.. (나는 아직 좀 더 지켜보고 싶다). 여튼 원 출처를 찾다 보니 독어 위키피디어 페이지 나왔다.
http://de.wikipedia.org/w/index.php?title=Hic_Rhodus,_hic_salta
여기선 독어로 Zeig hier, beweise, was du kannst. 로 해석 해 둠.
나는 이솝을 인용한 에라스무스를 인용한 헤겔을 인용한 마르크스를 인용한 한국 뭔가 좌익서적에서 읽었을 가능성이 태반;
글쎄, 그래도 좋은 짬을 주는 말였다. 원래 말의 뜻과, 헤겔이나 마르크스가 그걸 어떻게 사용했는가에 대해 생각해 볼 기회도 있었지만, 얼마나 많은 말을 십 차 이십 차 인용하며 책임지지 못하고 있는 가, 그렇지 않은 가 스스로 반성하는 기회도 됐다. 한 5차 인용 쯤으로 넘어가면 원래 말이 가진 뜻은 사라지고, 그저 수사로 기능하게 된다, 다분히 좋지 않은 의도와 부정의한 권위를 등에 업은.
홈에게 좀 미안했고, 스스로에겐 반성에 더해 다시 한 번 생각 해 볼 기회를 줬다.
Hic Rhodus, hic salta.
나는 도대체 무엇을 할 수 있는가
----
그래도 솔직히, 지금까지 철학은 세계를 다양하게 해석해 왔지만 중요한 것은 세계를 변화시키는 것이다! 류의 주장 - 한 때 중요하게 생각했던 주장에 대해 지금 생각은 많이 다르다. 아니 뭐 제대로 해석도 안 되는데 뭘 어떻게 변화시키려는 것이냐, 하고. 너무 쉽게 타인의 삶과 가치에 개입하는 것을 정당화 했던, 역시 좋지 못한 10차 인용 아니었는 가 또 반성했다.
나는 반성만 하고 있는 가?