임의의 숲이 과적 합


15

scikits-learn에서 Random Forest Regression을 사용하려고합니다. 문제는 테스트 오류가 매우 높다는 것입니다.

train MSE, 4.64, test MSE: 252.25.

내 데이터 모양은 다음과 같습니다. (파란색 : 실제 데이터, 초록색 : 예측 됨) :

산림 회귀 청소

훈련에 90 %, 시험에 10 %를 사용하고 있습니다. 이것은 여러 매개 변수 조합을 시도한 후 사용중인 코드입니다.

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

피팅 개선을위한 가능한 전략은 무엇입니까? 기본 모델을 추출하기 위해 다른 방법이 있습니까? 같은 패턴을 너무 많이 반복 한 후에는 모델이 새로운 데이터로 너무 나쁘게 동작한다는 것은 놀라운 일입니다. 이 데이터를 맞추려고 전혀 희망이 있습니까?


x 축을 입력으로, y 축을 x <= 245의 레이블로 사용하여이주기 함수를 학습 한 다음 x> 245를 테스트합니까? 아니면 음모를 잘못 해석하고 있습니까?
rrenaud

실제로 x 축은 관측 지수이며, 총 300 개의 관측치가 있으므로 245 이상에서 모델 학습에 사용되지 않는 테스트 데이터이며 입력 특징 벡터는 정수로 구성되며 모양 (300,2)입니다 관측 지수의 선형 함수와 매우 유사하므로 질문을 복잡하게 만들지 않기 위해 정보를 추가하지 않았습니다.
elyase

1
먼저 데이터에서 사이클 (계절 부분)을 제거하고 추세를 제거 할 수 있습니다.
R. Prost

시계열 분석을 살펴 보셨습니까? x 축에 무엇이 있는지 명확하지 않지만 주기적으로 보입니다. 여기를 확인하고 이것이 도움이되는지 알려주십시오. otexts.org/fpp/7/5
Bram Van Camp

답변:


21

당신이 잘못된 도구를 사용하고 있다고 생각합니다. 전체 X가 색인과 동일한 경우 기본적으로 샘플 기능이 있습니다. 있고 추정하려고합니다. 머신 러닝은 역사를 보간하는 것에 관한 것이므로이 경우 엄청난 실패를 기록하는 것은 놀라운 일이 아닙니다.f:RR

시계열 분석 (예 : 추세 추출, 스펙트럼 분석 및 자동 회귀 또는 나머지 HMMing) 또는 물리학 (즉, 이러한 출력을 생성하고 보존 된 수량을 통해 매개 변수를 맞추려는 ODE가 있는지 생각)이 필요합니다.


데이터에서 일반화 모델을 추출하는 것에 대한 기계 학습이 아닙니까? 데이터를 잘 보간하는 특정 세트가 있으면 교차 검증과 같은 더 나은 외삽 / 일반화 속성을 가진 것을 선택할 수 있습니다. 내 이해에 문제가 있습니까?
12

외삽 법은 일반화와 다릅니다. 다음 실험의 대상이라고 가정합니다. 화면이 표시되고 빨간색과 녹색 버튼이 있습니다. 먼저, 화면에는 다른 사람이 화면에 표시된 고양이, 사자 및 호랑이에 대한 녹색 버튼을 누른 다음 늑대와 개에 대한 빨간색 버튼을 눌렀을 때 방의 비디오가 표시됩니다.이 방법으로 5 개의 맛있는 쿠키가 수집되었습니다.

1
이제 화면에 밥캣이 표시됩니다. 기록을 적절하고 일반화 할 수있는 보간을 수행하고 녹색 버튼을 누르면 쿠키 대신 감전이 발생합니다. 왜 이런 일이 일어 났습니까? 해결책은주기 (gggrrr)이고 동물 사진은기만 일뿐입니다. 당신은 당신의 숲과 똑같은 일을했습니다. 실제 정보를 숨기면서 훈련 세트를 멍청한 재현으로 끌어들이었습니다.

좋은 예이지만 당신이하는 방식으로 보지 마십시오. 귀하의 예에는 target ( g또는 r) 및 2 개의 feature ( index(temporal) 및 animal) 데이터가 있습니다. 이 데이터를 통해 피처 1 또는 2 (또는 둘 다)에 다소의 가중치를 부여 할 수있는 여러 모델에 적합 할 수 있습니다. 교차 검증 (충분한 데이터를 가정)은 덜 중요한 기능 2 (동물)를 가진 모델에 도달해야합니다. 내 모델이 데이터에 과적 합하고 있음을 알 수 있지만 여전히 모델 공간이 충분한이 동작을 변경하지 않았기 때문에이 패턴을 따르는 모델을 추출 할 수 있어야한다고 생각합니다.
elyase

1
아니; 더 많은 데이터를 요구하더라도 실험가는 여전히 동물의 속임수를 확장하고 패턴을 명확하지 않게 패턴을 난독 처리 할 수 ​​있습니다. 즉, 정의에 따라 훈련에 포함되지 않은 정보가 필요하기 때문에 단순히 외삽 법을 학습으로 수행 할 수 없습니다. 이러한 방식으로 문제를 보간하기 위해 몇 가지 가정을 적용하거나 추가 데이터를 수집해야합니다.

9

가장 큰 문제는 회귀 트리 (및 임의 포리스트와 같은 알고리즘을 기반으로하는 알고리즘)가 조각 별 상수 함수를 예측하여 각 리프 아래로 떨어지는 입력에 대해 일정한 값을 제공한다는 것입니다. 이것은 훈련 영역 밖에서 외삽 할 때 훈련 데이터가있는 가장 가까운 지점과 동일한 가치를 예측한다는 것을 의미합니다. @mbq는 일반적인 기계 학습 기술보다 나은 시계열 학습을위한 특수화 된 도구가 있다는 것이 맞습니다. 그러나 임의 포리스트는이 예에서 특히 좋지 않으며 다른 일반적인 ML 기술은 현재보고있는 것보다 훨씬 더 나은 성능을 발휘할 수 있습니다. 비선형 커널이있는 SVM은 하나의 옵션입니다. 함수는주기적인 구조를 가지고 있기 때문에 주파수 영역을 사용하는 것이 좋습니다.


AFAIK SVM에는 임의 포리스트와 동일한 문제가 있습니다. 그들은 훈련받은 공간 밖에서 잘 예측하지 못합니다. 아마도 신경망이 더 나은 솔루션 일 것입니다
Donbeo

데이터가 커브에 있고 커널이 해당 커브에 적합한 종류 인 경우 SVM은 해당 커브를 따라 외삽 할 수 있습니다. 데이터에 선형 추세가있는 경우 선형 SVM은 해당 라인을 따라 외삽 될 것입니다. 더 복잡한 커널은 더 복잡한 행동에 적합하고 외삽 할 수 있습니다. 올바른 종류의 커널을 사용해야합니다. SVM을 외삽 및 TS 예측에 적합한 도구로 만들지는 않지만 임의 포리스트보다 우수합니다.
Daniel Mahler

3

이것은 데이터 과적 합에 대한 교과서의 예이며, 모델은 훈련 된 데이터에서는 잘 수행되지만 새로운 테스트 데이터에서는 축소됩니다. 이는이를 해결하기위한 전략 중 하나입니다. 교육 데이터를 10 배 교차 검증하여 매개 변수를 최적화하십시오.

단계 1. NM 최적화를 사용하여 MSE 최소화 기능을 작성하십시오. 예를 여기에서 볼 수 있습니다. http://glowingpython.blogspot.de/2011/05/curve-fitting-using-fmin.html

2 단계.이 최소화 기능 내에서 목표는 MSE를 줄이는 것입니다. 이를 위해, 9 배로 새로운 모델을 학습하고 10 배로 테스트하는 데이터의 10 배 분할을 작성하십시오. 이 과정을 10 회 반복하여 각 접힘에서 MSE를 얻습니다. 집계 된 MSE는 목표의 결과로 리턴됩니다.

3 단계. 파이썬의 fmin이 반복을 수행합니다. 미세 조정에 필요한 하이퍼 파라미터 (n_estimators, max_features 등)를 확인하고 fmin에 전달하십시오.

결과는 과적 합의 가능성을 줄이는 최고의 하이퍼 파라미터가됩니다.


그렇습니다. 과도하게 적합합니다 (임의의 숲 회귀는 일반적으로 그렇지 않으므로 질문입니다). 이제 매개 변수를 변경해도 RF 회귀에는 거의 영향을 미치지 않습니다. 이제 교차 검증은 최적화 할 수있을 정도로 유연한 기본 모델이 필요합니다. 이런 종류의 데이터에 어떤 종류의 ML 모델 / 알고리즘을 권장합니까?
12

3

몇 가지 제안 :

  1. 롤링 윈도우 접근 방식을 사용하여 매개 변수 조정 ( 다음 을 예측하도록 모델을 최적화해야합니다. 제공된 값 중 값을 예측하지 않고 시계열 값 )
  2. 다른 모델을 사용해보십시오 (적절한 기능 선택 및 기능 엔지니어링 전략을 갖춘 더 간단한 모델도 문제에 더 적합 할 수 있음)
  3. 목표 변수의 최적 변환을 배우십시오 (이것도 조정하십시오. 음의 선형 / 지수 경향이 있습니다, 당신은 그것을 추정 할 수 있습니다)
  4. 스펙트럼 분석
  5. 최대 값 / 최소값은 동일한 간격으로 보입니다. 기능이 제공되는 위치 (연산자 입력 없음, 알고리즘이 검색하여 바이어스를 제거하도록 함)를 파악하고이를 기능으로 추가하십시오. 또한 기능을 설계하십시오 nearest maximum. Dunno, 작동 할 수도 있고 아닐 수도 있습니다. 테스트 한 경우에만 알 수 있습니다. :)

그러나 Daniel의 답변에서 랜덤 포리스트는 열차 샘플에서 관찰 된 범위를 벗어난 값을 예측할 수 없기 때문에 이러한 종류의 문제에 대해서는 설계 상으로는 작동하지 않습니다. 튜닝 매개 변수 등은 아무데도 이어지지 않습니다.

1
제안 # 2 @ 팀. 그리고 랜덤 포레스트는이 데이터에서 순진하게 작동하지 않지만 영리한 기능 추출로 인해 작동 할 수 있습니다.
Firebug


0

위의 게시물을 읽은 후에 다른 답변을주고 싶습니다.

랜덤 포레스트와 같은 트리 기반 모델의 경우 훈련 세트 이상의 가치를 추정 할 수 없습니다. 그래서 나는 그것이 너무 적합한 문제가 아니라 잘못된 모델링 전략이라고 생각합니다.

그렇다면 트리 모델을 사용하여 시계열 예측을 위해 무엇을 할 수 있습니까?

가능한 방법은 이것을 선형 회귀와 결합하는 것입니다. 먼저 시계열의 추세를 낮추거나 선형 회귀를 사용하여 모델링 추세를 유지 한 다음 잔차를 나무로 모델링합니다 (잔여가 제한되어 있으므로 트리 모델에서 처리 할 수 ​​있음).

또한 선형 회귀와 결합 된 나무 모델이 있는데, 입체파라고 부르며 잎에서 선형 회귀를 수행합니다.


0

그래프의 경계 내에서 단순히 예측하려면 데이터 세트를 분할하기 전에 관측치를 무작위 화하면 문제가 해결됩니다. 그런 다음 그림과 같이 외삽 법에서 보간 문제가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.