non_fraud = df[df['Class']== 0] #Only normal transactions
fraud = df[df['Class']== 1] #Fraudulent transactions
# Spltting normal transactions into one for training and one for validation later on
df_train, val = train_test_split(non_fraud, test_size=0.20)
df_val = val.drop('Class',axis=1) # Drop Class Column from validation normal transactions
df_fraud = fraud.drop('Class',axis=1) #Drop Class Column from fraudulent transactions
y_val = val['Class'] #Class of validation noraml transactions
y_fraud = fraud['Class'] #Class of fraudulent transactions
y_testval = pd.concat([y_val, y_fraud]) #Combine Classes of above two, will be used for evaluation
y_testval = np.array(y_testval)
df_testval = pd.concat([df_val, df_fraud]) #Combine validation normal transactions and fraudulent transactions
from sklearn import svm
from pyod.models.feature_bagging import FeatureBagging
ocsvm = svm.OneClassSVM(kernel='rbf', nu=0.01,gamma=0.007, verbose=1)
FB_IF = FeatureBagging(base_estimator=ocsvm, n_estimators=10, n_jobs=1)
FB_IF.fit(df_train.drop('Class',axis=1))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<timed exec> in <module>
~\anaconda3\lib\site-packages\pyod\models\feature_bagging.py in fit(self, X, y)
288
289 # decision score matrix from all estimators
--> 290 all_decision_scores = self._get_decision_scores()
291
292 if self.combination == 'average':
~\anaconda3\lib\site-packages\pyod\models\feature_bagging.py in _get_decision_scores(self)
357 all_decision_scores = np.zeros([self.n_samples_, self.n_estimators])
358 for i in range(self.n_estimators):
--> 359 all_decision_scores[:, i] = self.estimators_[i].decision_scores_
360 return all_decision_scores
361
AttributeError: 'OneClassSVM' object has no attribute 'decision_scores_'
我正在尝试通过One class SVM学习不平衡数据。 为了在没有标签的情况下学习,请删除class属性并将其应用于fit函数。 如何解决这个问题?