python-sklearn 에서 RandomForestClassifier 함수 와 ROC 곡선 그리 기
4498 단어 프로 그래 밍 언어python
RandomForest Classifier 함수 의 간단 한 용법 을 소개 합 니 다.
# -*- coding: utf-8 -*-
from sklearn.tree import DecisionTreeClassifier
from matplotlib.pyplot import *
from sklearn.cross_validation import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.externals.joblib import Parallel, delayed
from sklearn.tree import export_graphviz
final = open('c:/test/final.dat' , 'r')
data = [line.strip().split('\t') for line in final]
feature = [[float(x) for x in row[3:]] for row in data]
target = [int(row[0]) for row in data]
#
feature_train, feature_test, target_train, target_test = train_test_split(feature, target, test_size=0.1, random_state=42)
#
clf = RandomForestClassifier(n_estimators = 8)
#
s = clf.fit(feature_train , target_train)
print s
#
r = clf.score(feature_test , target_test)
print r
print ' :%s' % clf.predict(feature_test[0])
#print clf.predict_proba(feature_test[0])
print ' :%s' % clf.estimators_
print clf.classes_
print clf.n_classes_
print ' feature :%s' % clf.feature_importances_
print clf.n_outputs_
def _parallel_helper(obj, methodname, *args, **kwargs):
return getattr(obj, methodname)(*args, **kwargs)
all_proba = Parallel(n_jobs=10, verbose=clf.verbose, backend="threading")(
delayed(_parallel_helper)(e, 'predict_proba', feature_test[0]) for e in clf.estimators_)
print ' :%s' % all_proba
proba = all_proba[0]
for j in range(1, len(all_proba)):
proba += all_proba[j]
proba /= len(clf.estimators_)
print ' :%s , :%s' % (clf.n_estimators , proba[0,0])
print ' :%s , :%s' % (clf.n_estimators , proba[0,1])
# ,
print ' :%s' % clf.classes_.take(np.argmax(proba, axis=1), axis=0)
# word
for i in xrange(len(clf.estimators_)):
export_graphviz(clf.estimators_[i] , '%d.dot'%i)
위층 블 로 거 는 모델 을 dot 파일 에 저장 하고 모델 을 pkl 파일 에 저장 할 수 있 습 니 다.이 부분 은https://www.zhihu.com/question/31604690/answer/52708757
import pickle
model = RandomForestClassifier(n_estimators=100)
model.fit(x,y)\#랜 덤 숲 을 만 듭 니 다.그 중에서 x,y 는 각각 훈련 집 과 훈련 집의 태그 입 니 다.
‘’‘
그 다음 에 훈련 된 랜 덤 숲 을 pickle 에 저장 할 수 있 습 니 다.매번 훈련 을 절약 할 수 있 습 니 다.사실은 모든 유형 이 pickle 에 저장 할 수 있 는 것 은 아니 지만 랜 덤 숲 은 가능 합 니 다.여 기 는 model 에 국한 되 지 않 습 니 다.훈련 집,훈련 집의 라벨,랜 덤 숲 을 하나의 list 에 넣 고 함께 pickle 에 던 질 수 있 습 니 다.
’‘’
with open("data.pkl", "wb") as f:
pickle.dump(model, f)
\#다음 에 쓰 려 면 다시 읽 어 라
with open("data.pkl", "rb") as f:
model = pickle.load(f)
다음은 자신 이 쓴 코드 세 션 입 니 다.
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, auc
import pickle
df_train = pd.read_csv(utils.HEATMAP_FEATURE_CSV_TRAIN)
df_validation = pd.read_csv(utils.HEATMAP_FEATURE_CSV_VALIDATION)
n_columns = len(df_train.columns)
feature_column_names = df_train.columns[:n_columns - 1]# ,
label_column_name = df_train.columns[n_columns - 1]
train_x = df_train[feature_column_names]
train_y = df_train[label_column_name]
validation_x = df_validation[feature_column_names]
validation_y = df_validation[label_column_name]
clf = RandomForestClassifier(n_estimators=50, n_jobs=2) #
s = clf.fit(train_x, train_y) #
r = clf.score(validation_x,validation_y) #
print r
predict_y_validation = clf.predict(validation_x)# , label 1, predict——proba()
# print(predict_y_validation)
prob_predict_y_validation = clf.predict_proba(validation_x)# , label 1
predictions_validation = prob_predict_y_validation[:, 1]
fpr, tpr, _ = roc_curve(validation_y, predictions_validation)
#
roc_auc = auc(fpr, tpr)
plt.title('ROC Validation')
plt.plot(fpr, tpr, 'b', label='AUC = %0.2f' % roc_auc)
plt.legend(loc='lower right')
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
#
#
#
#
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 스 크 립 트 프로 그래 밍: sed 명령 으로 텍스트 편집red 는 온라인 편집기 의 일종 이다.그것 은 한 줄 의 내용 을 한꺼번에 처리한다.작업 중 에 한 고객 의 요 구 를 만 났 습 니 다. 기본 와 이 파이 의 ssid 이름 은 MAC 주소 의 뒷 6 자 리 를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.