내 작업에는 전적으로 부울 데이터로 구성된 기능 세트가 있으며 기능에 속하는 클래스가 있습니다. 클래스는 문자열입니다.
feature set class (String)
[True False True ...] "A"
[True True True ...] "B"
[True True False ...] "C"
Random Forest 알고리즘으로이 데이터를 훈련 시키면
factor = pd.factorize(classes)
classes = factor[0]
classifier = RandomForestClassifier(n_estimators=100, criterion="entropy", random_state=0)
classifier.fit(x_train, classes)
분류자는 97 %의 클래스를 올바르게 감지 할 수 있습니다. 내가 할 때
classifier.predict_proba(sample1_feature_set)
sample1에 대한 각 클래스의 상대적 확률을 제공합니다. 예를 들면 다음과 같습니다. 처럼
[0.80 0.05 0.15]
↓ ↓ ↓
Prob. Prob. Prob.
of of of
"A" "B" "C"
for for for
sample1 sample1 sample1
그래서리스트 (0.80 + 0.05 + 0.15)의 값을 더하면 결과는 항상 1입니다. 이것은 실제로 상대 평가를한다는 것을 보여줍니다. 즉, 한 클래스의 확률이 다른 클래스의 확률에 영향을줍니다.
sample1에 대한 모든 클래스의 독립적 인 확률을 얻고 싶습니다.
[0.95 0.69 0.87]
↓ ↓ ↓
Prob. Prob. Prob.
of of of
"A" "B" "C"
for for for
sample1 sample1 sample1
Sample1은 "A"의 % 95, "B"의 % 69 및 "C"클래스의 % 87입니다. 내가 어떻게 할 수 있을지 아십니까?
랜덤 포레스트는 앙상블 방법 입니다. 기본적으로 데이터의 다른 하위 집합 (배깅이라고 함)을 사용하여 개별 의사 결정 트리를 만들고 모든 트리에서 예측을 평균하여 확률을 제공합니다. 도움말 페이지는 실제로 시작하기에 좋은 곳입니다.
평균화 방법에서 추진 원리는 여러 추정치를 독립적으로 구축 한 다음 예측을 평균화하는 것입니다. 평균적으로 결합 된 추정량은 분산이 감소하기 때문에 단일 기준 추정량보다 일반적으로 더 좋습니다.
예 : 배깅 방법, 무작위 나무의 숲,…
따라서 확률은 항상 1로 합산됩니다. 다음은 각 트리의 개별 예측에 액세스하는 방법의 예입니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.33, random_state=42)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=10)
model.fit(X_train, y_train)
pred = model.predict_proba(X_test)
pred[:5,:]
array([[0. , 1. , 0. ],
[1. , 0. , 0. ],
[0. , 0. , 1. ],
[0. , 0.9, 0.1],
[0. , 0.9, 0.1]])
다음은 첫 번째 트리에 대한 예측입니다.
model.estimators_[0].predict(X_test)
Out[42]:
array([1., 0., 2., 2., 1., 0., 1., 2., 2., 1., 2., 0., 0., 0., 0., 2., 2.,
1., 1., 2., 0., 2., 0., 2., 2., 2., 2., 2., 0., 0., 0., 0., 1., 0.,
0., 2., 1., 0., 0., 0., 2., 2., 1., 0., 0., 1., 1., 2., 1., 2.])
우리는 모든 나무를 집계합니다.
result = np.zeros((len(X_test),3))
for i in range(len(model.estimators_)):
p = model.estimators_[i].predict(X_test).astype(int)
result[range(len(X_test)),p] += 1
result[:5,:]
Out[63]:
array([[ 0., 10., 0.],
[10., 0., 0.],
[ 0., 0., 10.],
[ 0., 9., 1.],
[ 0., 9., 1.]])
이것을 나무 수로 나누면 이전에 얻은 확률이됩니다.
result/10
Out[65]:
array([[0. , 1. , 0. ],
[1. , 0. , 0. ],
[0. , 0. , 1. ],
[0. , 0.9, 0.1],
[0. , 0.9, 0.1],
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다