2016-01-30 8 views
5

sklearn और panads का उपयोग कर पार सत्यापन के साथ एक निर्णय पेड़ बनाने का प्रयास।क्रॉस सत्यापन + sklearn में निर्णय पेड़

मेरा प्रश्न नीचे दिए गए कोड में है, क्रॉस सत्यापन डेटा को विभाजित करता है, जिसे मैं प्रशिक्षण और परीक्षण दोनों के लिए उपयोग करता हूं। मैं अलग-अलग अधिकतम गहराई सेट के साथ एन बार पुन: प्रयास करके पेड़ की सबसे अच्छी गहराई को खोजने का प्रयास कर रहा हूं। क्रॉस सत्यापन का उपयोग करने के बजाय मुझे इसके बजाय केवी फोल्ड सीवी का उपयोग करना चाहिए और यदि ऐसा है तो मैं उस कोड के भीतर इसका उपयोग कैसे करूं?

import numpy as np 
import pandas as pd 
from sklearn import tree 
from sklearn import cross_validation 

features = ["fLength", "fWidth", "fSize", "fConc", "fConc1", "fAsym", "fM3Long", "fM3Trans", "fAlpha", "fDist", "class"] 

df = pd.read_csv('magic04.data',header=None,names=features) 

df['class'] = df['class'].map({'g':0,'h':1}) 

x = df[features[:-1]] 
y = df['class'] 

x_train,x_test,y_train,y_test = cross_validation.train_test_split(x,y,test_size=0.4,random_state=0) 

depth = [] 
for i in range(3,20): 
    clf = tree.DecisionTreeClassifier(max_depth=i) 
    clf = clf.fit(x_train,y_train) 
    depth.append((i,clf.score(x_test,y_test))) 
print depth 

यहां डेटा का एक लिंक है जिसका उपयोग मैं किसी भी व्यक्ति की मदद करता हूं। https://archive.ics.uci.edu/ml/datasets/MAGIC+Gamma+Telescope

उत्तर

14

अपने कोड में आप एक स्थिर प्रशिक्षण-परीक्षण विभाजन बना रहे हैं। यदि आप क्रॉस-सत्यापन द्वारा सर्वोत्तम गहराई का चयन करना चाहते हैं तो आप लूप के अंदर sklearn.cross_validation.cross_val_score का उपयोग कर सकते हैं।

अधिक जानकारी के लिए आप sklearn's documentation पढ़ सकते हैं।

import numpy as np 
import pandas as pd 
from sklearn import tree 
from sklearn.cross_validation import cross_val_score 
from pprint import pprint 

features = ["fLength", "fWidth", "fSize", "fConc", "fConc1", "fAsym", "fM3Long", "fM3Trans", "fAlpha", "fDist", "class"] 

df = pd.read_csv('magic04.data',header=None,names=features) 
df['class'] = df['class'].map({'g':0,'h':1}) 

x = df[features[:-1]] 
y = df['class'] 

# x_train,x_test,y_train,y_test = cross_validation.train_test_split(x,y,test_size=0.4,random_state=0) 
depth = [] 
for i in range(3,20): 
    clf = tree.DecisionTreeClassifier(max_depth=i) 
    # Perform 7-fold cross validation 
    scores = cross_val_score(estimator=clf, X=x, y=y, cv=7, n_jobs=4) 
    depth.append((i,scores.mean())) 
print(depth) 

वैकल्पिक रूप से, आप sklearn.grid_search.GridSearchCV का उपयोग करें और नहीं कर सकते पाश खुद के लिए लिखते हैं, खासकर यदि आप एक से अधिक अति पैरामीटर के लिए अनुकूलित करना चाहते हैं:

यहाँ सीवी के साथ अपने कोड की एक अद्यतन है।

import numpy as np 
import pandas as pd 
from sklearn import tree 
from sklearn import grid_search 

features = ["fLength", "fWidth", "fSize", "fConc", "fConc1", "fAsym", "fM3Long", "fM3Trans", "fAlpha", "fDist", "class"] 

df = pd.read_csv('magic04.data',header=None,names=features) 
df['class'] = df['class'].map({'g':0,'h':1}) 

x = df[features[:-1]] 
y = df['class'] 


parameters = {'max_depth':range(3,20)} 
clf = grid_search.GridSearchCV(tree.DecisionTreeClassifier(), parameters, n_jobs=4) 
clf.fit(X=x, y=y) 
tree_model = clf.best_estimator_ 
print (clf.best_score_, clf.best_params_) 
+0

यह वही था जो मैं ढूंढ रहा था; धन्यवाद – razeal113

+1

इसे सुनकर अच्छा लगा। क्या आप जवाब स्वीकार कर सकते हैं? प्रश्न पूछने के लिए – Dimosthenis

+2

+1 और ग्रिड खोज का सुझाव देने के लिए +1, जो इस प्रकार की समस्या – dsal1951

संबंधित मुद्दे