我在尝试使用LinearSVC
和OneVsRestClassifier
计算SVM模型中的每个预测概率时遇到了错误
AttributeError: 'LinearSVC' object has no attribute 'predict_proba'
尝试的代码如下:
model = Pipeline([('vectorizer', CountVectorizer(ngram_range=(1,2))), ('tfidf', TfidfTransformer(use_idf=True)), ('clf', OneVsRestClassifier(LinearSVC(class_weight="balanced")))])model.fit(X_train, y_train)y_train.shapepred = model.predict(X_test)probas = model.predict_proba(X_test)
还尝试了以下方法:
from nltk.classify.scikitlearn import SklearnClassifierfrom sklearn.svm import SVCLinearSVC_classifier = SklearnClassifier(SVC(kernel='linear',probability=True))prob_1 = LinearSVC_classifier.predict_proba(X_test)
但仍然得到错误AttributeError: 'SklearnClassifier' object has no attribute 'predict_proba'
请提供解决建议。
回答:
使用您的线性SVM模型时:
from sklearn.calibration import CalibratedClassifierCVfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.pipeline import FeatureUnion, make_pipelinefrom sklearn.svm import LinearSVCword_vectorizer = TfidfVectorizer(ngram_range=(1, 2))features = FeatureUnion([('words', word_vectorizer), ])calibrated_svc = CalibratedClassifierCV(LinearSVC(), method='sigmoid', cv=3)pipeline = make_pipeline(features, calibrated_svc)pipeline.fit(train_x, train_y)predicted = pipeline.predict_proba(test_x)
或者使用逻辑回归模型:
from sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.pipeline import FeatureUnion, make_pipelinefrom sklearn.linear_model import LogisticRegressionword_vectorizer = TfidfVectorizer(ngram_range=(1, 2))features = FeatureUnion([('words', word_vectorizer), ])pipeline = make_pipeline(features, LogisticRegression())pipeline.fit(train_x, train_y)predicted = pipeline.predict_proba(test_x)