Scikit- विभिन्न स्कोरर्स के साथ सीखने के घटता सीखें और एक समूह को सीवी उपज के समान मूल्य छोड़ दें - पायथन, मशीन-लर्निंग, scikit-learn, svm

मैं एक प्रशिक्षित एसवीएम पर सीखने के वक्र प्लॉट करना चाहता हूंवर्गीकरण, विभिन्न का उपयोग कर स्कोर, और crossvalidation की विधि के रूप में छुट्टी वन समूह आउट का उपयोग कर। मैं सोचा था कि मैंने यह पता लगाया था, लेकिन दो अलग-अलग स्कोरर - "एफ 1_मिक्रो" और "सटीकता" - समान मूल्य उत्पन्न करेगी। मैं उलझन में हूं, क्या यह माना जाता है मामला होना है?

यहां मेरा कोड है (दुर्भाग्य से मैं डेटा साझा नहीं कर सकता क्योंकि यह खुला नहीं है):

from sklearn import svm
SVC_classifier_LOWO_VC0 = svm.SVC(cache_size=800, class_weight=None,
coef0=0.0, decision_function_shape=None, degree=3, gamma=0.01,
kernel="rbf", max_iter=-1, probability=False, random_state=1,
shrinking=True, tol=0.001, verbose=False)
training_data = pd.read_csv("training_data.csv")
X = training_data.drop(["Groups", "Targets"], axis=1).values
scaler = preprocessing.StandardScaler().fit(X)
X = scaler.transform(X)
y = training_data["Targets"].values
groups = training_data["Groups"].values
Fscorer = make_scorer(f1_score, average = "micro")
logo = LeaveOneGroupOut()
parm_range0 = np.logspace(-2, 6, 9)
train_scores0, test_scores0 = validation_curve(SVC_classifier_LOWO_VC0, X,
y, "C", parm_range0, cv =logo.split(X, y, groups=groups), scoring = Fscorer)

अब से:

train_scores_mean0 = np.mean(train_scores0, axis=1)
train_scores_std0 = np.std(train_scores0, axis=1)
test_scores_mean0 = np.mean(test_scores0, axis=1)
test_scores_std0 = np.std(test_scores0, axis=1)
print test_scores_mean0
print np.amax(test_scores_mean0)
print  np.logspace(-2, 6, 9)[test_scores_mean0.argmax(axis=0)]

मुझे मिला:

[0.20257407 0.35551122 0.40791047 0.49887676 0.5021742
0.50030438 0.4 9 426622 0.48066419 0.4868 9 7]

०.५०२१७४२००२०६

100.0

यदि मैं एक नया वर्गीकरण बनाता हूं, लेकिन उसी पैरामीटर के साथ, और चलाता हूं स्कोरिंग को छोड़कर, सब कुछ ठीक पहले, उदाहरण के लिए:

parm_range1 = np.logspace(-2, 6, 9)
train_scores1, test_scores1 = validation_curve(SVC_classifier_LOWO_VC1, X,
y, "C", parm_range1, cv =logo.split(X, y, groups=groups), scoring =
"accuracy")
train_scores_mean1 = np.mean(train_scores1, axis=1)
train_scores_std1= np.std(train_scores1, axis=1)
test_scores_mean1 = np.mean(test_scores1, axis=1)
test_scores_std1 = np.std(test_scores1, axis=1)
print test_scores_mean1
print np.amax(test_scores_mean1)
print  np.logspace(-2, 6, 9)[test_scores_mean1.argmax(axis=0)]

मुझे बिल्कुल वही उत्तर मिलता है:

[0.20257407 0.35551122 0.40791047 0.49887676 0.5021742
0.50030438 0.4 9 426622 0.48066419 0.4868 9 7]

०.५०२१७४२००२०६

100.0

यह कैसे संभव है, क्या मैं कुछ गलत कर रहा हूं, या कुछ याद कर रहा हूं?

धन्यवाद

उत्तर:

उत्तर № 1 के लिए 1

F1 = accuracy यदि और केवल यदि TP = TN, यानी, वास्तविक सकारात्मक संख्याओं की संख्या बराबर हैसच्चे नकारात्मक की संख्या, जो तब हो सकती है जब आपकी कक्षाएं पूरी तरह से संतुलित हों। तो यह या तो है, या आपके कोड में एक त्रुटि है। आप अपने स्कोरर को कहां शुरू करते हैं, निम्नानुसार: scorer = make_scorer(accuracy_score, average = "micro") ?


संबंधित सवाल
सबसे लोकप्रिय