如何解决如何实现模糊粗略最近邻有序加权平均FRNN-OWA分类以生成准确度分数和分类报告?
- 我正在尝试使用 doc2vec 和 FRNN-OWA 方法对数据进行分类。对于我尝试从代码实现的 FRNN-OWA 代码: frnn_emotion_detection ,但是当我尝试运行 Cosine 类时,我收到一个 错误:类型对象 'NNSearch' 没有属性 'Model'.
代码余弦类:
class Cosine(NNSearch):
'''
This class defines the cosine similarity relation that can be used into FRNN OWA classification method
Cosine metric: cos(A,B) = (A * B)(||A|| x ||B||),where A,B - embedding vectors of tweets,* is a scalar product,and ||.|| is the vector norm
Cosine similarity: cos_similarity(A,B) = (1 + cos(A,B))/2.
'''
class Model(NNSearch.Model):
X_T: np.ndarray
X_T_norm: np.ndarray
def _query(self,X,m_int: int):
distances = 1 - 0.5 * X @ self.X_T / np.linalg.norm(X,axis=1)[:,None] / self.X_T_norm
return least_indices_and_values(distances,m_int,axis=-1)
def construct(self,X) -> Model:
model: NNSearch.Model = super().construct(X)
model.X_T = np.transpose(X)
model.X_T_norm = np.linalg.norm(model.X_T,axis=0)
return model
- 然后我尝试 git clone fuzzy-rough-learn ,它在运行 Cosine 类时工作。但是,当我尝试运行调用 'cross_validation_ensemble_owa' 函数的准确度命令时,会出现错误: AttributeError: 'Model' object has no attribute 'X_T' 。它来自 Cosine 类。
代码“cross_validation_ensemble_owa”:
def cross_validation_ensemble_owa(df,vector_names,K_fold,NNeighbours,lower,upper,method,alpha=0.8):
frnn_acc = []
random_indices = np.random.permutation(df.index)
for i in range(K_fold):
# Split df on train and test data
test_data = df.loc[df.index.isin(random_indices[i*len(df.index)//K_fold:(i+1)*len(df.index)//K_fold])]
train_data = df[~df.index.isin(test_data.index)]
y = train_data['Label']
y_true = test_data['Label']
# Apply FRNN OWA method for each feature vector depends on specified output type
if method == 'labels':
# Solution for labels calculation
y_pred_res = test_ensemble_labels(train_data,y,test_data,upper)
elif method == 'conf_scores':
# Solution for confidence scores calculation
y_pred_res = test_ensemble_confscores(train_data,alpha)
else:
print('Wrong output type was specified!')
# Calculate PCC
frnn_acc.append(accuracy_score(y_true,y_pred_res)[0])
return frnn_acc
产生新错误的准确率代码(AttributeError: 'Model' object has no attribute 'X_T'):
print('accuracy %s' % accuracy_score(cross_validation_ensemble_owa(data,["Vector_d2v"],[19],additive(),'labels')))
print(classification_report(cross_validation_ensemble_owa(data,'labels')))
这是错误的详细信息:
AttributeError Traceback (most recent call last)
<ipython-input-74-fc90f2bac465> in <module>()
----> 1 print('accuracy %s' % accuracy_score(cross_validation_ensemble_owa(data,'labels')))
2 print(classification_report(cross_validation_ensemble_owa(data,'labels')))
9 frames
<ipython-input-68-888ab6434fd0> in cross_validation_ensemble_owa(df,alpha)
27 if method == 'labels':
28 # Solution for labels calculation
---> 29 y_pred_res = test_ensemble_labels(train_data,upper)
30 elif method == 'conf_scores':
31 # Solution for confidence scores calculation
<ipython-input-67-14268dae82f2> in test_ensemble_labels(train_data,upper)
15 y_pred = []
16 for j in range(len(vector_names)):
---> 17 y_pred.append(frnn_owa_method(train_data,vector_names[j],NNeighbours[j],upper)[1])
18 # Use voting function to obtain the ensembled label - we used mean
19 y_pred_res = np.mean(y_pred,axis=0)
<ipython-input-64-f945d06e98a8> in frnn_owa_method(train_data,vector_name,upper)
28 cl = clf.construct(X_train,y)
29 # confidence scores
---> 30 conf_scores = cl.query(X_test)
31 # labels
32 y_pred = np.argmax(conf_scores,axis=1)
/content/fuzzy-rough-learn/frlearn/base.py in __call__(self,X)
109
110 def __call__(self,X):
--> 111 return super().__call__(X)
112
113 @property
/content/fuzzy-rough-learn/frlearn/base.py in __call__(self,*args,**kwargs)
52 for preprocessing_model in self.preprocessing_models:
53 X = preprocessing_model(X)
---> 54 return self._query(X,**kwargs)
55
56 @abstractmethod
/content/fuzzy-rough-learn/frlearn/neighbours/classifiers.py in _query(self,X)
41 vals = []
42 if self.upper_approximations:
---> 43 vals.append(np.stack([approximation(X) for approximation in self.upper_approximations],axis=1))
44 if self.lower_approximations:
45 vals.append(
/content/fuzzy-rough-learn/frlearn/neighbours/classifiers.py in <listcomp>(.0)
41 vals = []
42 if self.upper_approximations:
---> 43 vals.append(np.stack([approximation(X) for approximation in self.upper_approximations],axis=1))
44 if self.lower_approximations:
45 vals.append(
/content/fuzzy-rough-learn/frlearn/neighbours/data_descriptors.py in __call__(self,X)
42 for preprocessing_model in self.preprocessing_models:
43 X = preprocessing_model(X)
---> 44 q_neighbours,q_distances = self.nn_model(X,self.k)
45 return self._query(q_neighbours,q_distances)
46
/content/fuzzy-rough-learn/frlearn/neighbours/neighbour_search.py in __call__(self,k)
72 if callable(k):
73 k = k(self.n)
---> 74 return self._query(X,k)
75
76 @property
<ipython-input-63-01c68ac1ed40> in _query(self,m_int)
11
12 def _query(self,m_int: int):
---> 13 distances = 1 - 0.5 * X @ self.X_T / np.linalg.norm(X,None] / self.X_T_norm
14 return least_indices_and_values(distances,axis=-1)
15
AttributeError: 'Model' object has no attribute 'X_T'
对不起,如果我的解释不够详细,我仍在努力学习。也许有人已经实现了 FRNN-OWA 的代码,可以帮助我,谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。