हाय क्योंकि मैं स्केलेर लाइब्रेरी का उपयोग करके मशीन सीखने के तरीकों में नया हूं, मैं निर्णय पेड़ को पाइपलाइन में शामिल करने का प्रयास करता हूं और फिर मॉडल की भविष्यवाणी और आउटपुट दोनों करता हूं, लेकिन जैसा कि मैं निम्नलिखित कोड चलाता हूं, मुझे चेतावनी मिली:

'पाइपलाइन' ऑब्जेक्ट में कोई विशेषता नहीं है 'tree_'

इसलिए मुझे आश्चर्य है कि क्या पाइपलाइन ट्री आउटपुट का समर्थन नहीं करती है, और मैं इस समस्या को कैसे ठीक कर सकता हूं? मैंने सीधे निर्णय_ट्री वर्ग का उपयोग करने का भी प्रयास किया है, लेकिन मुझे एक और चेतावनी मिली है कि: एक अनुक्रम के साथ एक सरणी तत्व सेट करना। मुझे पता है कि ऐसा प्रतीत होता है क्योंकि मेरे पास विभिन्न आयामों वाले वैक्टर हैं, लेकिन अभी भी कोई सुराग नहीं है कि स्थिति से कैसे निपटा जाए।

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.pipeline import Pipeline

from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree.export import export_text
from sklearn import tree


# a function that reads the corpus, tokenizes it and returns the documents
# and their labels
def read_corpus(corpus_file, use_sentiment):
    documents = []
    labels = []
    with open(corpus_file, encoding='utf-8') as f:
        for line in f:
            tokens = line.strip().split()

            documents.append(tokens[3:])

            if use_sentiment:
                # 2-class problem: positive vs negative
                labels.append( tokens[1] )
            else:
                # 6-class problem: books, camera, dvd, health, music, software
                labels.append( tokens[0] )

    return documents, labels

# a dummy function that just returns its input
def identity(x):
    return x

# read the data and split i into train and test
X, Y = read_corpus('/Users/dengchenglong/Downloads/trainset', use_sentiment=False)
split_point = int(0.75*len(X))
Xtrain = X[:split_point]
Ytrain = Y[:split_point]
Xtest = X[split_point:]
Ytest = Y[split_point:]

# let's use the TF-IDF vectorizer
tfidf = False

# we use a dummy function as tokenizer and preprocessor,
# since the texts are already preprocessed and tokenized.
if tfidf:
    vec = TfidfVectorizer(preprocessor = identity,
                          tokenizer = identity)
else:
    vec = CountVectorizer(preprocessor = identity,
                          tokenizer = identity)


# combine the vectorizer with a Naive Bayes classifier
classifier = Pipeline( [('vec', vec),
                        ('cls', tree.DecisionTreeClassifier())])


# train the classifier on the train dataset
decision_tree = classifier.fit(Xtrain, Ytrain)


# predict the labels of the test data 
Yguess = classifier.predict(Xtest)
tree.plot_tree(classifier.fit(Xtest, Ytest)) 
# report performance of the classifier
print(accuracy_score(Ytest, Yguess))
print(classification_report(Ytest, Yguess))
2
Deng Cheng Long 20 सितंबर 2019, 17:49

1 उत्तर

क्या होगा यदि आप यह कोशिश करते हैं:

from sklearn.pipeline import make_pipeline

# combine the vectorizer with a Naive Bayes classifier
clf = DecisionTreeClassifier()
classifier = make_pipeline(vec,clf)

जैसा कि लगता है, पाइपलाइन का उपयोग करने से पहले आपको उस मॉडल को शुरू करना होगा जिसे आप लागू करने का प्रयास कर रहे हैं। मुझे बताएं कि क्या यह काम करता है और यदि नहीं, तो यह त्रुटियां लौट रही हैं। प्रेषक: Scikit-learn प्रलेखन इसका उदाहरण: पेड़ों के साथ पाइपलाइन उदाहरण बनाएं

0
Celius Stingher 20 सितंबर 2019, 18:20
काम नहीं करता... वही चेतावनी रखती है, ऐसा लगता है जैसे पाइपलाइन पेड़ में कार्यों का समर्थन नहीं करती है?
 – 
Deng Cheng Long
20 सितंबर 2019, 18:08
संपादित उत्तर... जांचें?
 – 
Celius Stingher
20 सितंबर 2019, 18:19
किसी भी मामले में मेरा मानना ​​​​है कि यदि आप मेरे द्वारा साझा किए गए दूसरे लिंक का पालन करते हैं, तो आप पेड़ों को अपनी पाइपलाइन के भीतर काम करने में सक्षम होना चाहिए। मुझे बताएं कि क्या इस नए उत्तर के साथ कोई समस्या है
 – 
Celius Stingher
20 सितंबर 2019, 18:21