python-sklearn 에서 RandomForestClassifier 함수 와 ROC 곡선 그리 기

블 로 거들http://blog.itpub.net/12199764/viewspace-1572056/
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()
#
#
 # 
   
  

#

 
 

좋은 웹페이지 즐겨찾기