আমি আমার ডেটাসেটের ওপরে নমুনা করতে স্মোটেক কৌশল ব্যবহার করেছি এবং এখন আমার ভারসাম্যপূর্ণ ডেটাসেট রয়েছে। আমি যে সমস্যার মুখোমুখি হয়েছি তা হ'ল পারফরম্যান্স মেট্রিক্স; ভারসাম্যহীন ডেটাসেটের যথার্থতা, পুনর্বিবেচনা, এফ 1 পরিমাপ, নির্ভুলতা ভারসাম্যপূর্ণ ডেটাসেটের চেয়ে আরও ভালভাবে সম্পাদন করা হয়।
ভারসাম্যপূর্ণ ডেটাসেট মডেলটির কার্যকারিতা উন্নত করতে পারে তা দেখানোর জন্য আমি কোন পরিমাপ ব্যবহার করতে পারি?
এনবি: রক_আউক_স্কোর ভারসাম্যহীন ডেটাসেটে রক_উক_স্কোরের তুলনায় ভারসাম্যহীন ডেটাসেটের চেয়ে ভাল, এটিকে কি ভাল পারফরম্যান্সের পরিমাপ হিসাবে বিবেচনা করা যেতে পারে? ব্যাখ্যার পরে আমি কোডটি প্রয়োগ করেছি এবং আমি এই ফলাফল পেয়েছি
import pandas as pd
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt
plt.rc("font", size=14)
from sklearn.svm import LinearSVC
from sklearn.svm import SVC
from sklearn.cross_validation import train_test_split,StratifiedShuffleSplit,cross_val_score
import seaborn as sns
from scipy import interp
from time import *
from sklearn import metrics
X=dataCAD.iloc[:,0:71]
y= dataCAD['Cardio1']
# Split the dataset in two equal parts
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=0)
print(y_test.value_counts())
model=SVC(C=0.001, kernel="rbf",gamma=0.01, probability=True)
t0 = time()
clf = model.fit(X_train,y_train)
y_pred = clf.predict(X_test)
t = time() - t0
print("=" * 52)
print("time cost: {}".format(t))
print()
print("confusion matrix\n", metrics.confusion_matrix( y_test, y_pred))
cf=metrics.confusion_matrix(y_test, y_pred)
accuracy=(cf.item((0,0))/50)+(cf.item((1,1))/14)
print("model accuracy \n",accuracy/2)
print()
print("\t\tprecision_score: {}".format(metrics.precision_score( y_test, y_pred, average='macro')))
print()
print("\t\trecall_score: {}".format(metrics.recall_score(y_test, y_pred, average='macro')))
print()
print("\t\tf1_score: {}".format(metrics.f1_score(y_test, y_pred, average='macro')))
print()
print("\t\troc_auc_score: {}".format(metrics.roc_auc_score( y_test, y_pred, average='macro')))
ফলাফল:
Name: Cardio1, dtype: int64
====================================================
time cost: 0.012008905410766602
confusion matrix
[[50 0]
[14 0]]
model accuracy
0.5
precision_score: 0.390625
recall_score: 0.5
f1_score: 0.43859649122807015
roc_auc_score: 0.5
ভারসাম্যপূর্ণ ডেটাসেটের জন্য
X_train1,y_train1 = sm.fit_sample(X_train, y_train.ravel())
df= pd.DataFrame({'Cardio1': y_train1})
df.groupby('Cardio1').Cardio1.count().plot.bar(ylim=0)
plt.show()
print(X_train1.shape)
print(y_train1.shape)
#model=SVC(C=0.001, kernel="rbf",gamma=0.01, probability=True)
model=SVC(C=10, kernel="sigmoid",gamma=0.001, probability=True)
t0 = time()
clf = model.fit(X_train1,y_train1)
y_pred = clf.predict(X_test)
t = time() - t0
print("=" * 52)
print("time cost: {}".format(t))
print()
print("confusion matrix\n", metrics.confusion_matrix(y_test, y_pred))
cf=metrics.confusion_matrix(y_test, y_pred)
accuracy=(cf.item((0,0))/50)+(cf.item((1,1))/14)
print("model accuracy \n",accuracy/2)
print()
#print("\t\taccuracy: {}".format(metrics.accuracy_score( y_test, y_pred)))
print()
print("\t\tprecision_score: {}".format(metrics.precision_score( y_test, y_pred, average='macro')))
print()
print("\t\trecall_score: {}".format(metrics.recall_score(y_test, y_pred, average='macro')))
print()
print("\t\tf1_score: {}".format(metrics.f1_score(y_test, y_pred, average='macro')))
print()
print("\t\troc_auc_score: {}".format(metrics.roc_auc_score( y_test, y_pred, average='macro')))
ফলাফল:
(246, 71)
(246,)
====================================================
time cost: 0.05353999137878418
confusion matrix
[[ 0 50]
[ 0 14]]
model accuracy
0.5
precision_score: 0.109375
recall_score: 0.5
f1_score: 0.1794871794871795
roc_auc_score: 0.5
আমি কোনও কার্যকর ফলাফল পাইনি। আমি কি ক্রস বৈধতা ব্যবহার করে মডেলটি প্রয়োগ করব?