scikit-learn을 사용하여 Random Forest에서 재귀 적 기능 제거

Bryan

scikit-learn재귀 프로세스 중에 생성 된 각 하위 집합의 점수를 매기는 방법으로 OOB ROC를 사용하여 및 임의 포리스트 분류기를 사용하여 재귀 기능 제거를 수행하려고합니다 .

그러나 RFECV방법 을 사용하려고 하면 오류가 발생합니다.AttributeError: 'RandomForestClassifier' object has no attribute 'coef_'

랜덤 포레스트는 그 자체로 계수가 없지만 지니 점수에 따른 순위가 있습니다. 그래서,이 문제를 해결하는 방법이 궁금합니다.

pandas최종 분류 자에 입력 할 데이터의 양을 최소화하기 위해 재귀 적 기능 선택을 사용하므로 최적의 그룹화 에서 내 DataFrame의 어떤 기능 이 선택 되었는지 명시 적으로 알려주는 방법을 사용하고 싶습니다 .

다음은 몇 가지 예제 코드입니다.

from sklearn import datasets
import pandas as pd
from pandas import Series
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import RFECV

iris = datasets.load_iris()
x=pd.DataFrame(iris.data, columns=['var1','var2','var3', 'var4'])
y=pd.Series(iris.target, name='target')
rf = RandomForestClassifier(n_estimators=500, min_samples_leaf=5, n_jobs=-1)
rfecv = RFECV(estimator=rf, step=1, cv=10, scoring='ROC', verbose=2)
selector=rfecv.fit(x, y)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/feature_selection/rfe.py", line 336, in fit
    ranking_ = rfe.fit(X_train, y_train).ranking_
  File "/Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/feature_selection/rfe.py", line 148, in fit
    if estimator.coef_.ndim > 1:
AttributeError: 'RandomForestClassifier' object has no attribute 'coef_'
Bryan

여기 내가 시작한 것입니다. 매우 간단한 솔루션이며 고도로 불균형 한 데이터 세트를 분류하기 때문에 사용자 지정 정확도 메트릭 (weightedAccuracy라고 함)에 의존합니다. 그러나 원하는 경우 더 쉽게 확장 할 수 있어야합니다.

from sklearn import datasets
import pandas
from sklearn.ensemble import RandomForestClassifier
from sklearn import cross_validation
from sklearn.metrics import confusion_matrix


def get_enhanced_confusion_matrix(actuals, predictions, labels):
    """"enhances confusion_matrix by adding sensivity and specificity metrics"""
    cm = confusion_matrix(actuals, predictions, labels = labels)
    sensitivity = float(cm[1][1]) / float(cm[1][0]+cm[1][1])
    specificity = float(cm[0][0]) / float(cm[0][0]+cm[0][1])
    weightedAccuracy = (sensitivity * 0.9) + (specificity * 0.1)
    return cm, sensitivity, specificity, weightedAccuracy

iris = datasets.load_iris()
x=pandas.DataFrame(iris.data, columns=['var1','var2','var3', 'var4'])
y=pandas.Series(iris.target, name='target')

response, _  = pandas.factorize(y)

xTrain, xTest, yTrain, yTest = cross_validation.train_test_split(x, response, test_size = .25, random_state = 36583)
print "building the first forest"
rf = RandomForestClassifier(n_estimators = 500, min_samples_split = 2, n_jobs = -1, verbose = 1)
rf.fit(xTrain, yTrain)
importances = pandas.DataFrame({'name':x.columns,'imp':rf.feature_importances_
                                }).sort(['imp'], ascending = False).reset_index(drop = True)

cm, sensitivity, specificity, weightedAccuracy = get_enhanced_confusion_matrix(yTest, rf.predict(xTest), [0,1])
numFeatures = len(x.columns)

rfeMatrix = pandas.DataFrame({'numFeatures':[numFeatures], 
                              'weightedAccuracy':[weightedAccuracy], 
                              'sensitivity':[sensitivity], 
                              'specificity':[specificity]})

print "running RFE on  %d features"%numFeatures

for i in range(1,numFeatures,1):
    varsUsed = importances['name'][0:i]
    print "now using %d of %s features"%(len(varsUsed), numFeatures)
    xTrain, xTest, yTrain, yTest = cross_validation.train_test_split(x[varsUsed], response, test_size = .25)
    rf = RandomForestClassifier(n_estimators = 500, min_samples_split = 2,
                                n_jobs = -1, verbose = 1)
    rf.fit(xTrain, yTrain)
    cm, sensitivity, specificity, weightedAccuracy = get_enhanced_confusion_matrix(yTest, rf.predict(xTest), [0,1])
    print("\n"+str(cm))
    print('the sensitivity is %d percent'%(sensitivity * 100))
    print('the specificity is %d percent'%(specificity * 100))
    print('the weighted accuracy is %d percent'%(weightedAccuracy * 100))
    rfeMatrix = rfeMatrix.append(
                                pandas.DataFrame({'numFeatures':[len(varsUsed)], 
                                'weightedAccuracy':[weightedAccuracy], 
                                'sensitivity':[sensitivity], 
                                'specificity':[specificity]}), ignore_index = True)    
print("\n"+str(rfeMatrix))    
maxAccuracy = rfeMatrix.weightedAccuracy.max()
maxAccuracyFeatures = min(rfeMatrix.numFeatures[rfeMatrix.weightedAccuracy == maxAccuracy])
featuresUsed = importances['name'][0:maxAccuracyFeatures].tolist()

print "the final features used are %s"%featuresUsed

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

scikit-learn에서 rbf 커널이있는 SVM에 대한 재귀 기능 제거를 사용하는 ValueError

분류에서Dev

Python scikit-learn에서 Random Forest의 각 트리에서 회귀 예측을 출력하는 방법은 무엇입니까?

분류에서Dev

Windows에서 읽기 전용 속성을 재귀 적으로 제거하는 방법

분류에서Dev

Prolog에서 증분기를 사용하여 각 재귀 호출을 추적

분류에서Dev

LinearRegression Python을 사용한 재귀 기능 제거

분류에서Dev

SciKit-Learn : Random Forest 사용시 JoblibException

분류에서Dev

scikit-learn DecisionTreeRegressor에서 "X"대신 실제 기능 이름을 사용하는 방법은 무엇입니까?

분류에서Dev

재귀 적 역 추적을 사용하여 유 방향 그래프에서 모든주기 찾기

분류에서Dev

python : scikit learn classfiers (SVM) 등에서 POS (품사) 기능을 사용하는 방법

분류에서Dev

Powershell을 사용하여 재귀 적으로 파일 삭제

분류에서Dev

재귀 적으로 유형 클래스 제약 조건을 생성하고 재귀 함수에서 사용

분류에서Dev

랜덤 포레스트 모델에서 재귀 적 기능 제거로 기능 선택 오류

분류에서Dev

scikit-learn을 사용하여 범주 형 기능 처리

분류에서Dev

scikit에서 PCA / LDA / MDS를 사용하여 최적의 기능 선택

분류에서Dev

파일 이름에서 개행을 재귀 적으로 제거

분류에서Dev

작성기 DAG를 사용하여 GCP 버킷에서 재귀 적으로 파일 이름을 읽는 방법

분류에서Dev

scikit-learn을 사용하여 Python에서 간단한 선형 회귀의 절편과 기울기를 인쇄하는 방법은 무엇입니까?

분류에서Dev

Typescript에서 재귀 적으로 읽기 전용 속성 제외

분류에서Dev

Scala에서 재귀 적으로 제곱근 계산하기

분류에서Dev

scikit-learn에서 ARDRegression을 사용하는 메모리 문제

분류에서Dev

스칼라에서 기능적으로 프로그래밍 할 때 재귀에서 배열을 사용하는 것이 효율적입니까?

분류에서Dev

기본값을 사용하여 상호 재귀 적으로 정의 된 typeclass 메서드

분류에서Dev

특정 값을 찾기 위해 중첩 배열에서 요소를 재귀 적으로 제거합니다.

분류에서Dev

Spectre를 사용하여 맵 맵에서 값을 재귀 적으로 변경

분류에서Dev

Java에서 DocumentTraversal을 사용하여 XML 요소를 재귀 적으로 탐색

분류에서Dev

하위 경로에서 특정 파일을 재귀 적으로 제거하는 스크립트?

분류에서Dev

중첩 json 객체에서 빈 배열을 포함하는 객체를 재귀 적으로 제거합니다.

분류에서Dev

지우기 기능을 사용하여 문자열에서 문자 제거-C ++

분류에서Dev

Javascript Replace 기능을 사용하여 문자열에서 € 기호 제거

Related 관련 기사

  1. 1

    scikit-learn에서 rbf 커널이있는 SVM에 대한 재귀 기능 제거를 사용하는 ValueError

  2. 2

    Python scikit-learn에서 Random Forest의 각 트리에서 회귀 예측을 출력하는 방법은 무엇입니까?

  3. 3

    Windows에서 읽기 전용 속성을 재귀 적으로 제거하는 방법

  4. 4

    Prolog에서 증분기를 사용하여 각 재귀 호출을 추적

  5. 5

    LinearRegression Python을 사용한 재귀 기능 제거

  6. 6

    SciKit-Learn : Random Forest 사용시 JoblibException

  7. 7

    scikit-learn DecisionTreeRegressor에서 "X"대신 실제 기능 이름을 사용하는 방법은 무엇입니까?

  8. 8

    재귀 적 역 추적을 사용하여 유 방향 그래프에서 모든주기 찾기

  9. 9

    python : scikit learn classfiers (SVM) 등에서 POS (품사) 기능을 사용하는 방법

  10. 10

    Powershell을 사용하여 재귀 적으로 파일 삭제

  11. 11

    재귀 적으로 유형 클래스 제약 조건을 생성하고 재귀 함수에서 사용

  12. 12

    랜덤 포레스트 모델에서 재귀 적 기능 제거로 기능 선택 오류

  13. 13

    scikit-learn을 사용하여 범주 형 기능 처리

  14. 14

    scikit에서 PCA / LDA / MDS를 사용하여 최적의 기능 선택

  15. 15

    파일 이름에서 개행을 재귀 적으로 제거

  16. 16

    작성기 DAG를 사용하여 GCP 버킷에서 재귀 적으로 파일 이름을 읽는 방법

  17. 17

    scikit-learn을 사용하여 Python에서 간단한 선형 회귀의 절편과 기울기를 인쇄하는 방법은 무엇입니까?

  18. 18

    Typescript에서 재귀 적으로 읽기 전용 속성 제외

  19. 19

    Scala에서 재귀 적으로 제곱근 계산하기

  20. 20

    scikit-learn에서 ARDRegression을 사용하는 메모리 문제

  21. 21

    스칼라에서 기능적으로 프로그래밍 할 때 재귀에서 배열을 사용하는 것이 효율적입니까?

  22. 22

    기본값을 사용하여 상호 재귀 적으로 정의 된 typeclass 메서드

  23. 23

    특정 값을 찾기 위해 중첩 배열에서 요소를 재귀 적으로 제거합니다.

  24. 24

    Spectre를 사용하여 맵 맵에서 값을 재귀 적으로 변경

  25. 25

    Java에서 DocumentTraversal을 사용하여 XML 요소를 재귀 적으로 탐색

  26. 26

    하위 경로에서 특정 파일을 재귀 적으로 제거하는 스크립트?

  27. 27

    중첩 json 객체에서 빈 배열을 포함하는 객체를 재귀 적으로 제거합니다.

  28. 28

    지우기 기능을 사용하여 문자열에서 문자 제거-C ++

  29. 29

    Javascript Replace 기능을 사용하여 문자열에서 € 기호 제거

뜨겁다태그

보관