기계 학습에서 희소 데이터와 밀도가 높은 데이터를 병합하여 성능 향상


17

나는 예측 가능한 희소 특징을 가지고 있으며, 또한 예측 가능한 조밀 한 특징이 있습니다. 분류기의 전반적인 성능을 향상 시키려면 이러한 기능을 결합해야합니다.

이제는 이들을 함께 결합하려고 할 때 밀도가 높은 기능은 희소 기능보다 더 많이 지배되는 경향이 있으므로 밀도가 높은 기능이있는 모델에 비해 AUC가 1 % 향상됩니다.

누군가 비슷한 문제를 겪었습니까? 고착 된 입력을 고맙게 생각합니다. 나는 이미 많은 분류기, 분류기의 조합, 기능 변환 및 다른 알고리즘으로 처리를 시도했습니다.

도움을 주셔서 감사합니다.

편집 :

나는 의견에 주어진 제안을 이미 시도했다. 내가 관찰 한 것은 거의 45 %의 데이터에서 희소 한 특징이 실제로 잘 수행되고 희소 한 특징만으로 약 0.9의 AUC를 얻지 만 나머지 특징의 경우 밀도가 높은 특징은 약 0.75의 AUC로 잘 수행된다는 것입니다. 이러한 데이터 세트를 분리하려고 시도했지만 AUC 0.6을 얻으므로 단순히 모델을 훈련시키고 사용할 기능을 결정할 수 없습니다.

코드 스 니펫과 관련하여 너무 많은 것을 시도했지만 정확히 무엇을 공유 해야할지 모르겠습니다.


당신의 기능은 얼마나 드물습니까? 1 % 이하입니까?
João Almeida

2
또한 기능이 희소 한 경우 데이터 집합의 작은 부분 만 분류하는 데 도움이되므로 전체 정확도가 크게 바뀌지 않아야합니다. 데이터 세트의 특성이 무엇인지 모르기 때문에 일종의 추측입니다.
João Almeida

@ JoãoAlmeida 그들은 희소하지 않습니다. 그들은 약 5 % 채워집니다. 문제는 예측이 다른 두 가지 모델의 예측 차이를 볼 때 희소 한 특징을 가진 모델이 더 잘 수행되는 경향이 있기 때문에 밀도가 높은 특징과 결합 할 때 AUC의 부스트를 볼 것으로 기대하는 이유입니다 . 부스트를 받고 있지만 매우 낮은 것 같습니다.
Sagar Waghmode

흠 ... 그때 당신을 위해 아무 생각이 없습니다
João Almeida

나는 같은 문제를 만났고, 아마도 단일 모델에 조밀하고 희박한 기능을 넣는 것은 좋은 선택이 아닙니다. 어쩌면 당신은 넓고 깊은 모델을 시도 할 수 있습니다. 이 방법을 시도한 경우 답변을 알려주십시오.
Jianye Ji

답변:


6

이것은 주성분 분석의 일처럼 보입니다. Scikit에서는 PCA 가 잘 구현되어 여러 번 도움이되었습니다.

PCA는 특정 방식으로 기능을 결합합니다. 구성 요소의 수를 제한함으로써 노이즈가없는 데이터 (가장 좋은 경우)로 모델을 가져옵니다. 모델이 데이터만큼 우수하기 때문입니다.

아래의 간단한 예를 고려하십시오.

from sklearn.pipeline import Pipeline
pipe_rf = Pipeline([('pca', PCA(n_components=80)),
                    ('clf',RandomForestClassifier(n_estimators=100))])
pipe_rf.fit(X_train_s,y_train_s)

pred = pipe_rf.predict(X_test)

내가 왜 80을 선택 했습니까? 누적 분산을 플로팅하면 아래에이 값이 나와 ~ 80 성분으로 거의 모든 분산에 도달합니다. 누적 분산

그래서 시도해보십시오. 귀하의 모델에서 사용하십시오. 도움이 될 것입니다.


4

기능을 결합하는 가장 좋은 방법은 앙상블 방법입니다. 기본적으로 bagging, boosting 및 stacking의 세 가지 방법이 있습니다. 기능 선택 (확산 기능과 밀도가 높은 기능 모두 고려)으로 보강 된 Adabbost를 사용하거나 스택 기반 (무작위 기능-임의의 하위 공간)을 사용할 수 있습니다. 무작위를 사용하여 기본 학습자 세트 (의사 결정 트리)를 학습 할 수있는 두 번째 옵션을 선호합니다. 하위 집합 및 임의의 기능 (전체 기능 집합을 처리 할 때까지 학습 기반 학습자 유지) 다음 단계는 메타 데이터를 생성하기 위해 학습 집합을 테스트하는 것입니다. 이 메타 데이터를 사용하여 메타 분류기를 훈련시킵니다. 메타 분류기는 어떤 기능이 더 중요하고 어떤 관계를 사용해야하는지 파악합니다.


관련 문서를 공유 할 수 있습니까? 무슨 뜻인지 정확히 알지 못했습니까?
Sagar Waghmode

"스태킹 기술 문제, 1999"스태킹에 관한 기사를 읽고 stackingC에 대해 읽을 수 있습니다. 전체 벡터 (예 : Hog의 경우 1x36)에 대해 하나의 기능으로 이야기하고 있지만 그 크기는 아닙니다. 기본 학습자와 함께 사용 된 기능을 추적해야합니다. 과적 합 문제에주의하십시오
Bashar Haddad

데이터베이스, 클래스 수, 샘플 수, 코드, 시도한 사항, 발견 한 사항에 대한 자세한 정보를 제공하면 데이터 불균형 문제, 시끄러운 샘플 등이 있습니다. 이러한 모든 세부 사항은 중요하며 최상의 방법을 선택하는 데 도움이 될 수 있습니다. 이 확인하고 더 나은 방법으로 도움이 될 경우 자세한 내용을 알려주십시오
Bashar Haddad

1

변수 그룹이 다중 공선이거나 스파 스와 밀도 간의 변환이 잘못되었을 수 있습니다. 투표 분류 자 ​​/ 앙상블 분류 사용에 대해 생각해 보셨습니까? http://scikit-learn.org/stable/modules/ensemble.html 위의 두 가지 문제를 모두 해결할 수있는 방법입니다.


나는 투표 분류기뿐만 아니라 앙상블 기술을 이미 시험해 보았습니다. 아직 운이 없다.
Sagar Waghmode

그렇다면 두 데이터 세트의 예측 사이에 겹치는 부분이 많이 있습니까? 실제로 새로운 정보가 없을 수 있습니까? 즉, 데이터는 같은 이야기를 알려줍니다.
Diego

네, 정확히 했어요. 예측이 완전히 다른 것은 아니지만, 예측이 다른 샘플의 수는 데이터의 상당히 높습니다 (약 15-20 %). 이 샘플에서는 희소 피쳐가있는 모델이 밀도가 높은 피쳐의 모델보다 성능이 우수합니다. 저의 요점은 스파 스 기능이 더 나은 성능을 발휘할 수 있다는 것입니다. 지금까지 시도한 모델에서 중요한 기능이 아닌가?
Sagar Waghmode

어떤 예측 알고리즘을 사용하십니까?
Diego

나는 꽤 많은 알고리즘을 시도하고 그라디언트 부스트 모델에 정착했습니다. 또한 랜덤 포리스트를 내 문제에 상당히 많이 사용합니다.
Sagar Waghmode

1

위의 제안 중 일부 외에도 2 단계 모델링 접근법을 사용하는 것이 좋습니다 .

  1. 스파 스 기능을 먼저 사용하고 최상의 모델을 개발하십시오.
  2. 해당 모형에서 예측 된 확률을 계산하십시오.
  3. 해당 확률 추정값을 두 번째 모델 (입력 기능으로)에 입력하면 밀도가 높은 기능이 통합됩니다. 다시 말해서, 두 번째 모형을 만들기 위해 모든 조밀 한 특징 확률 추정치를 사용하십시오.
  4. 최종 분류는 두 번째 모델을 기반으로합니다.

0

스파 스 기능에서만 PCA를 시도하고 밀도가 높은 기능과 PCA 출력을 결합하십시오.

따라서 밀도가 높은 (원본) 기능 + 밀도가 높은 기능 세트 (원래는 드문 경우)를 얻을 수 있습니다.

질문에 +1 결과를 업데이트하십시오.


와우, 이것은 실제로 AUC를 떨어 뜨 렸습니다. 이러한 정보의 상실로 인해 AUC가 중단되었을 수 있습니다.
Sagar Waghmode

흥미 롭군 공유해 주셔서 감사합니다. 우리는 당신과 매우 유사한 데이터 세트를 가지고 있습니다 (1k-2k 스파 스 기능). 호기심으로, 당신은 얼마나 많은 주성분을 생성 했습니까? 그 수가 너무 낮 으면 AUC가 다운 된 이유를 설명 할 수 있습니다.
Tagar

이미 말했듯이 0.97 분산을 설명하는 1k 주성분을 생성했습니다.
Sagar Waghmode
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.