"랜덤포레스트(with Scikit-learn)"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
(새 문서: ==개요== 사이킷런으로 랜덤포레스트를 만들 수 있다. ==랜덤 포레스트== {| class="wikitable" !절차 !설명 !방법 |- |패키지 불러오기 및 데이터...)
 
 
(같은 사용자의 중간 판 3개는 보이지 않습니다)
2번째 줄: 2번째 줄:
 
==개요==
 
==개요==
 
사이킷런으로 랜덤포레스트를 만들 수 있다.
 
사이킷런으로 랜덤포레스트를 만들 수 있다.
==랜덤 포레스트==
+
==방법==
 
{| class="wikitable"
 
{| class="wikitable"
 
!절차
 
!절차
8번째 줄: 8번째 줄:
 
!방법
 
!방법
 
|-
 
|-
|패키지 불러오기 및 데이터 정리
+
|데이터 정리
|
+
|데이터를 불러오고 정리한다.
 +
|<syntaxhighlight lang="python">
 +
import pandas as pd
 +
 
 +
file_path = "..path"
 +
data = pd.read_csv(file_path)  # 필요한 자료를 불러온다. 혹은 df자료를 만든다.
 +
data = data.dropna(axis=0)  # 해당 축에 대해 빈 자료가 있는 행을 버린다.
 +
</syntaxhighlight>
 +
|-
 +
|예측할 데이터 선정
 +
|어떤 값을 예측할지 판단 근거와 분리한다.
 
|<syntaxhighlight lang="python">
 
|<syntaxhighlight lang="python">
from sklearn.enssemble import RandomForestClassifier
+
# 레이블 만들기.
 +
y = data.판단할열  # 판단결과가 될 열을 지정한다.(해당 열을 시리즈로 반환.)
  
data = [
+
# 근거데이터 만들기.
    [1,2,4],
+
features = ['열1', '열2', ...]  # 판단할 자료가 될 열을 지정한다.
    [1,5,3],
+
x = data[features]  # 판단근거를 준비한다.
    [1,5,2]
 
    ]
 
   
 
# 데이터와 레이블 정리
 
data = []
 
label = []
 
for row in data:
 
    data.append(row[0], row[1]) # 판단의 기초가 되는 데이터리스트를 만든다.
 
    label.append(row[2]) # 판단의 결과를 모은다.
 
 
</syntaxhighlight>데이터프레임을 활용하는 경우.(열 이름을 사용해 분리하는 게 가장 간단하고 직관적이다.)
 
</syntaxhighlight>데이터프레임을 활용하는 경우.(열 이름을 사용해 분리하는 게 가장 간단하고 직관적이다.)
 
|-
 
|-
|학습
+
|패키지 불러오기 및 데이터 입력
|일반적으로 machine이라는 이름보다,
+
+ 학습
 +
|데이터를 입력한다.
 +
일반적으로 machine이라는 이름보다,
 
classifier의 약자인 clf를 주로 쓴다.
 
classifier의 약자인 clf를 주로 쓴다.
 
|<syntaxhighlight lang="python">
 
|<syntaxhighlight lang="python">
machine = RandomForestClassifier()  # 객체 지정
+
from sklearn.enssemble import RandomForestClassifier
machine.fit(data, label)  # 데이터와 레이블 지정
+
 
 +
machine = RandomForestClassifier(max_leaf_nodes=500, random_state=13)  # 객체 지정
 +
machine.fit(data, label)  # 데이터와 레이블 지정하여 학습 실행.
 +
</syntaxhighlight>machine에 대해 다양한 파라미터가 있는데, 이는 상황에 따라 활용.
 +
{| class="wikitable"
 +
!파라미터
 +
!설명
 +
|-
 +
|max_leaf_nodes
 +
|노드를 만드는 제한은 몇으로 할 것인지.(과적합 방지)
 +
(근데 이거 랜덤포레스트에서 쓰는 거 맞나? 의사결정트리 아니고?)
 +
|-
 +
|n_estimators
 +
|
 +
|-
 +
|random_state
 +
|자료들을 섞을 때 random함수에 동일한 seed를 주어 매번 똑같은 결과를 얻게 하기 위함.(검증용)
 +
|}
 +
|-
 +
|예측
 +
|판단근거를 넣어주면 예측값을 돌려준다.
 +
|<syntaxhighlight lang="python">
 +
data_for_predict = df.....  # 위에서 만든 판단근거와 동일한 형태의 df를 넣어준다.
 +
machine.predict(data_for_predict)
 +
</syntaxhighlight>가격을 예측할 때 넣는 판단근거의 df는 1행만 넣어줘도 되고, 여러 행을 넣으면 리스트로 결과가 반환된다.
 +
|-
 +
|
 +
|
 +
|
 +
|}
 +
 
 +
== 후처리 ==
 +
{| class="wikitable"
 +
!절차
 +
!설명
 +
!방법
 +
|-
 +
|검증
 +
|정확도가 얼마나 되는지 검증한다.
 +
 
 +
 
 +
훈련데이터와 검증데이터의 분류는 [[Scikit-learn]]문서를 참고하자.
 +
 
 +
여기선 평균 오류값을 구하는 예시를 두었다.
 +
|<syntaxhighlight lang="python">
 +
from sklearn.metrics import mean_absolute_error
 +
 
 +
new_data = df.....  # 테스트에 쓰일 df.
 +
y = new_data.판단할열  # 실제 결과
 +
# 근거데이터 만들기.
 +
features = ['열1', '열2', ...]  # 판단할 자료가 될 열을 지정한다.
 +
x = new_data[features]  # 판단근거를 준비한다.
 +
 
 +
predict = machine.predict(new_data)  # 결과 예상하기.
 +
mean_absolute_error(predict, y)  # 예상결과와 실제값을 비교하여 평균 에러를 반환한다.
 
</syntaxhighlight>
 
</syntaxhighlight>
|}이후 사용법은 위와 같다.
+
|}
 +
 
 +
=== 오버피팅 방지 ===
 
[[분류:랜덤포레스트]]
 
[[분류:랜덤포레스트]]
 
[[분류:Scikit-learn]]
 
[[분류:Scikit-learn]]

2021년 9월 3일 (금) 22:44 기준 최신판

1 개요[편집 | 원본 편집]

사이킷런으로 랜덤포레스트를 만들 수 있다.

2 방법[편집 | 원본 편집]

절차 설명 방법
데이터 정리 데이터를 불러오고 정리한다.
import pandas as pd

file_path = "..path"
data = pd.read_csv(file_path)  # 필요한 자료를 불러온다. 혹은 df자료를 만든다.
data = data.dropna(axis=0)  # 해당 축에 대해 빈 자료가 있는 행을 버린다.
예측할 데이터 선정 어떤 값을 예측할지 판단 근거와 분리한다.
# 레이블 만들기.
y = data.판단할열  # 판단결과가 될 열을 지정한다.(해당 열을 시리즈로 반환.)

# 근거데이터 만들기.
features = ['열1', '열2', ...]  # 판단할 자료가 될 열을 지정한다.
x = data[features]  # 판단근거를 준비한다.
데이터프레임을 활용하는 경우.(열 이름을 사용해 분리하는 게 가장 간단하고 직관적이다.)
패키지 불러오기 및 데이터 입력

+ 학습

데이터를 입력한다.

일반적으로 machine이라는 이름보다, classifier의 약자인 clf를 주로 쓴다.

from sklearn.enssemble import RandomForestClassifier

machine = RandomForestClassifier(max_leaf_nodes=500, random_state=13)  # 객체 지정
machine.fit(data, label)  # 데이터와 레이블 지정하여 학습 실행.
machine에 대해 다양한 파라미터가 있는데, 이는 상황에 따라 활용.
파라미터 설명
max_leaf_nodes 노드를 만드는 제한은 몇으로 할 것인지.(과적합 방지)

(근데 이거 랜덤포레스트에서 쓰는 거 맞나? 의사결정트리 아니고?)

n_estimators
random_state 자료들을 섞을 때 random함수에 동일한 seed를 주어 매번 똑같은 결과를 얻게 하기 위함.(검증용)
예측 판단근거를 넣어주면 예측값을 돌려준다.
data_for_predict = df.....  # 위에서 만든 판단근거와 동일한 형태의 df를 넣어준다.
machine.predict(data_for_predict)
가격을 예측할 때 넣는 판단근거의 df는 1행만 넣어줘도 되고, 여러 행을 넣으면 리스트로 결과가 반환된다.

3 후처리[편집 | 원본 편집]

절차 설명 방법
검증 정확도가 얼마나 되는지 검증한다.


훈련데이터와 검증데이터의 분류는 Scikit-learn문서를 참고하자.

여기선 평균 오류값을 구하는 예시를 두었다.

from sklearn.metrics import mean_absolute_error

new_data = df.....  # 테스트에 쓰일 df.
y = new_data.판단할열  # 실제 결과
# 근거데이터 만들기.
features = ['열1', '열2', ...]  # 판단할 자료가 될 열을 지정한다.
x = new_data[features]  # 판단근거를 준비한다.

predict = machine.predict(new_data)  # 결과 예상하기.
mean_absolute_error(predict, y)  # 예상결과와 실제값을 비교하여 평균 에러를 반환한다.

3.1 오버피팅 방지[편집 | 원본 편집]