희소 예측 변수 및 반응을 사용하는 CART와 유사한 방법에 사용할 수있는 라이브러리가 있습니까?


11

R의 gbm 패키지를 사용하여 일부 큰 데이터 세트로 작업하고 있습니다. 예측 변수 행렬과 응답 벡터가 매우 희박합니다 (즉, 대부분의 항목이 0 임). 나는 여기 에서했던 것처럼이 sparseness를 이용하는 알고리즘을 사용하여 의사 결정 트리를 구축하기를 바랐다 . 이 백서에서와 같이 대부분의 항목에는 가능한 많은 기능 중 일부만 있으므로 데이터가 명시 적으로 다르게 언급되지 않는 한 항목에 지정된 기능이 없다고 가정하여 계산 낭비를 피할 수있었습니다. 내 희망은 이런 종류의 알고리즘을 사용하여 비슷한 속도를 낼 수 있다는 것입니다 (그리고 예측 정확도를 높이기 위해 증폭 알고리즘을 래핑합니다).

그들이 코드를 공개하지 않은 것 같아서,이 경우에 최적화 된 오픈 소스 패키지 나 라이브러리 (어떤 언어)가 있는지 궁금했습니다. 이상적으로는 R의 Matrix패키지 에서 직접 희소 행렬을 취할 수있는 것을 원 하지만 얻을 수있는 것을 취할 것입니다.

나는 둘러 보았고 이런 종류의 것이 거기에 있어야하는 것처럼 보입니다.

  • 화학자들은이 문제를 많이 겪고있는 것 같습니다 (위의 링크 된 논문은 새로운 약물 화합물을 찾는 법을 배우는 것에 관한 것이 었습니다). 그러나 내가 찾은 구현은 독점적이거나 화학 분석에 매우 특화된 것입니다. 그래도 그중 하나가 용도 변경 될 수 있습니다.

  • 문서 분류는 또한 희소 피쳐 공간에서 학습하는 것이 유용한 영역 인 것 같습니다 (대부분의 문서에는 대부분의 단어가 포함되지 않음). 예를 들어, 이 백서 에는 C4.5 (CART와 유사한 알고리즘)의 스파 스 구현에 대한 기울어 진 참조가 있지만 코드는 없습니다.

  • 메일 링리스트 에 따르면 WEKA는 희소 데이터를 받아 들일 수 있지만, 위에 링크 된 논문의 방법과 달리 WEKA는 CPU 사이클 낭비를 피하는 데 실제로 활용하도록 최적화되지 않았습니다.

미리 감사드립니다!


2
R은 아니지만 Python scikits.learn 은 희소 행렬에 대한 지원이 증가하고 있습니다.
chl

@ ch1 감사합니다. 아직 트리 메소드를 추가하지 않은 것 같습니다. 누군가가 구현을 하고 있지만 스파 스 데이터를 사용할 수 있는지 확실하지 않습니다. 그래도 희소 한 SVM 방법을 염두에 두겠습니다!
David J. Harris

"CART-like"라고 말하면 의사 결정 트리 또는 모든 종류의 예측 모델이 필요하십니까?
마이클 맥고완

@Michael-나는 나무를 부스트 절차로 먹일 것이고 높은 분산을 가지기 때문에 나무를 원합니다.
David J. Harris

2
나는 나무 모델의 모르겠지만 glmnete1071::svm모두 지원 스파 스 Matrix객체. GAMboostGLMboost(패키지 GAMboost) 할 수있다뿐만 아니라.
Zach

답변:


2

rf에 사용되는 최신 CART 구현에 대한 스파 스 구현의 벤치 마크를보고 싶습니다. 이 종이는이 분야의 발전 측면에서 상당히 오래되었으며 여전히 상당한 속도를 제공한다면 놀랄 것입니다.

그 이유 중 하나는 분할 검색에서 Quicksort와 같은 영리한 정렬 알고리즘을 사용하면 거의 일정한 기능 (드문 드문 기능 포함)에 대해 거의 O (n)의 성능을 제공 할 수 있기 때문입니다. 빠른 구현은 기능이 트리의 분기 내에서 일정 해졌을 때 추적하여 더 이상 검사하지 않아야합니다. 고밀도 기능 표현은 CPU 캐시 친화적 인 방식으로 빠른 조회를 제공하므로 CPU 사이클에서 승리하려면 실제로 영리한 희소 표현이 필요합니다.

이것은 여기 , 여기 , 여기 에서 논의 됩니다 .

실제로 rf 패키지 CloudForest의 한 지점에서 데이터의 스파 스 데이터 표현을 구현 했지만 데이터의 밀도가 느린 것으로 나타 으며 메모리 이점을 제공했지만 포기했습니다.

내 권장 사항은 부스팅에 내장 된 scikit learn 또는 cloudforest를 시도하고 그것이 충분히 빠른지 확인하는 것입니다. 비표준 작업을 수행하려는 경우 사용자 지정 부스팅 기준으로 두 가지를 모두 확장 할 수 있습니다. (실제로 설명하는 것과 매우 유사한 대규모의 고차원 유전자 데이터 세트로 작업하기 위해 클라우드 포레스트를 썼습니다.)


1

아마도 코드를 활용할 가능성이 거의 없을 것입니다. 직접 작성해야합니다.
그러나 다른 옵션은 중복 정보를 제거하는 데이터 크기를 줄이기 위해 데이터를 변환하는 것입니다. 데이터에 대한 정보가없는 방법을 말하기는 어렵지만 중복되지 않는 일부 기능, PCA 부분 또는 일부 설명 자의 표현을 변경하는 방법은 무엇입니까? 또한 응답이 드문 경우 응답이 0 인 객체를 다운 샘플링하는 것이 합리적입니까?


답장을 보내 주셔서 감사합니다. 다운 샘플링은 흥미로운 아이디어처럼 들립니다. 현재 다른 이유로 데이터의 일부 측면에 가중치를 부여 하고 있지만 좋은 아이디어 일 수도 있습니다. 그러나 왜 이것에 대한 코드가 존재하지 않을 것이라고 말합니까? 나는 12 년 전에 같은 문제를 해결 한 것으로 보이는 종이에 연결했습니다.
David J. Harris

@David 요컨대, 이것이 말이되지 않는다고 생각합니다. 이것은 "잘못된 질문"문제입니다. Sparseness는 데이터의 최적화 수준이 매우 낮음을 나타내며 훨씬 더 효과적인 방법은 데이터 변환을 시도하는 것입니다. 당신이 연결 한 종이는 약간 다른 문제입니다.

당신이 무슨 말을하는지 이해가되지 않습니다. 데이터 형식을 변환하는 것은 내가 원하는 일이며, 내가 알 수있는 한,이 백서가하는 일입니다. 그들은 각각의 화학 물질이 부족했던 모든 특징들을 열거하고 싶지 않았으며, 그 화학 물질들만 가지고있었습니다. 대부분의 화학 물질은 제 경우처럼 대부분의 기능이 없기 때문에 상황에 맞습니다. 그래서 그들은 특징을 희소 행렬로 변환 한 다음 그 희소 행렬에 대한 재귀 분할 알고리즘을 직접 변환했습니다. 내 데이터로 동일한 작업을 수행하는 오픈 소스 방법을 찾고 있습니다. 내가 무엇을 놓치고 있습니까? 감사합니다
David J. Harris

@David, mbq의 요점은 큰 1-n-n 코딩 (예 : 웹 사이트 / 고객 등의 식별자) 또는 존재하는 화학 물질 목록이 종종 학습에있어 매우 나쁜 표현이라고 생각합니다. 예를 들어 웹 사이트의 경우 상점 / 뉴스 / 블로그 스포츠 / 기술 등으로 분류 될 수 있습니다.
seanv507

1

R 의 caret패키지 를 보셨습니까 ? 그것은 쉽게 같은 재귀 분할에 대한 몇 가지를 포함하여 다양한 모델을 사용할 수있게하는 인터페이스를 제공 rpart, ctree하고 ctree2.


나는 그 패키지 / 함수에 익숙하며, 내가 알 수있는 한 스파 스 데이터에서 작동하지 않습니다.
David J. Harris

1
Matrix객체에 대한 캐럿 지원은 훌륭하지만 현재 존재하지 않습니다. 모든 것이 data.frame으로 강제됩니다.
Zach

개발자에게 이메일을 보내어 이에 대해 물어볼 수 있습니다. 나는 그에게 다른 것을 이메일로 보냈고 그는 유용한 답변을 제공했다-max.kuhn [at] pfizer.com
paul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.