Моя цель состоит в том, чтобы иметь отчет о классификации для всех сгибов в перекрестной проверке с K-сгибами.
Я адаптировал свой сценарий в соответствии с решением, предложенным в этом посте . Вот мой код:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn import metrics
from sklearn.metrics import classification_report, accuracy_score, make_scorer
from sklearn.model_selection._validation import cross_val_score
from sklearn.model_selection import KFold
from scipy.stats import sem
r_filenameTSV = 'TSV/A19784.tsv'
tsv_read = pd.read_csv(r_filenameTSV, sep='\t',names=["vector"])
df = pd.DataFrame(tsv_read)
df = pd.DataFrame(df.vector.str.split(' ',1).tolist(),
columns = ['label','vector'])
print(df)
y = pd.DataFrame([df.label]).astype(int).to_numpy().reshape(-1,1).ravel()
print(y.shape)
#exit()
X = pd.DataFrame([dict(y.split(':') for y in x.split()) for x in df['vector']])
print(X.astype(float).to_numpy())
print(X)
#exit()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,random_state=0)
clf = svm.SVC(kernel='rbf',
C=100,
gamma=0.001,
)
#scores = cross_val_score(clf, X, y, cv=10)
print ("K-Folds scores:")
#print (scores)
def classification_report_with_accuracy_score(y_true, y_pred):
print (classification_report(y_true, y_pred)) # print classification report
return accuracy_score(y_true, y_pred) # return accuracy score
# Nested CV with parameter optimization
scores = cross_val_score(clf, X, y, cv=10, \
scoring=make_scorer(classification_report_with_accuracy_score))
print (scores)
У меня есть отчет о классификации для каждого сгиба, подобный следующему:
precision recall f1-score support
0 1.00 0.48 0.65 702
1 0.78 1.00 0.88 1276
accuracy 0.82 1978
macro avg 0.89 0.74 0.76 1978
weighted avg 0.86 0.82 0.80 1978
Чтобы получить такой же отчет об общем вычислении 10 сгибов, что Я должен изменить?
С уважением