Проблемы с печатью класса, имени и оценки точности классификатора голосования - PullRequest
0 голосов
/ 17 октября 2018

Я хотел бы обучить голосующего классификатора в SciKit-Learn с тремя различными классификаторами.У меня возникли проблемы с последним этапом - печатью итоговых показателей точности классификаторов.

from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

import pandas as pd
import numpy as np 

log_clf=LogisticRegression()
rnd_clf=RandomForestClassifier()
svm_clf=SVC()

voting_clf=VotingClassifier(estimators=[('lr',log_clf),('rf',rnd_clf),('svc',svm_clf)],voting='hard')
voting_clf.fit(X_train, y_train)

Я получаю ошибки, когда запускаю следующий код:

for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
    clf.fit(X_train, y_train)
    y_predict=clf.predict(X_test)
    print(clf._class_._name_,accuracy_score(y_test,y_pred))

Когда я запускаю этот кусок кода, я получаю следующее:

AttributeError: 'LogisticRegression' object has no attribute '_class_'

Я предполагаю, что вызов ' class ' немного устарел, поэтому я изменил класс на 'classes _':

for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
    clf.fit(X_train, y_train)
    y_pred=clf.predict(X_test)
    print(clf.classes_._name_,accuracy_score(y_test,y_pred))

Когда я запускаю этот кусок кода, я получаю следующее:

AttributeError: 'numpy.ndarray' object has no attribute '_name_'

Когда я удаляю ' имя ' и запускаю следующий код, я все равно получаю сообщение об ошибке:

for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
    clf.fit(X_train, y_train)
    y_pred=clf.predict(X_test)
    print(clf.classes_,accuracy_score(y_test,y_pred))

Ошибка:

 NameError: name 'accuracy_score' is not defined

Я не уверен, почему не определено precision_score, если импортировать библиотеку

1 Ответ

0 голосов
/ 23 октября 2018

Для первой ошибки, связанной с class , вам необходимо указать здесь два подчеркивания.

Измените

print(clf._class_._name_,accuracy_score(y_test,y_pred))

на:

print(clf.__class__.__name__, accuracy_score(y_test,y_pred))

Смотрите этот вопрос о других способах получения имени объекта в python:

Сейчасдля второй ошибки о 'accuracy_score' не определено, это происходит, когда вы неправильно импортировали accuracy_score.Но я вижу, что в вашем коде вы импортировали accuracy_score.Так вы уверены, что выполняете строку print(clf.__class__.__name__, accuracy_score(y_test,y_pred)) в том же файле?или в любом другом файле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...