如何解决如何在python中应用序数分类
我正在尝试进行序数分类,我发现了 mord 库。但是它支持逻辑回归和岭回归。我认为这仅对数据集中的线性关系有用,对吗?。我跟着这个tutrial: https://towardsdatascience.com/simple-trick-to-train-an-ordinal-regression-with-any-classifier-6911183d2a3c。在本教程中,问题被分为 (k-1) 个二元分类器,其中 K 是类的数量。但是我有一些错误。 这是我的数据集:
class OrdinalClassifier():
def __init__(self,clf):
self.clf = clf
self.clfs = {}
def fit(self,X,y):
self.unique_class = np.sort(np.unique(y))
if self.unique_class.shape[0] > 2:
for i in range(self.unique_class.shape[0]-1):
# for each k - 1 ordinal value we fit a binary classification problem
print("i is ",str(i))
binary_y = (y > self.unique_class[i]).astype(np.uint8)
print(binary_y)
clf = clone(self.clf)
clf.fit(X,binary_y)
self.clfs[i] = clf
print(self.clfs)
def predict_proba(self,X):
clfs_predict = {k:self.clfs[k].predict_proba(X) for k in self.clfs}
print(clfs_predict)
predicted = []
for i,y in enumerate(self.unique_class):
print(" i and y")
print(i)
print(y)
if i == 0:
# V1 = 1 - Pr(y > V1)
predicted.append(1 - clfs_predict[y][:,1])
elif y in clfs_predict:
# Vi = Pr(y > Vi-1) - Pr(y > Vi)
predicted.append(clfs_predict[y-1][:,1] - clfs_predict[y][:,1])
else:
# Vk = Pr(y > Vk-1)
predicted.append(clfs_predict[y-1][:,1])
return np.vstack(predicted).T
def predict(self,X):
return np.argmax(self.predict_proba(X),axis=1)
clf = OrdinalClassifier(DecisionTreeClassifier(max_depth=3))
clf.fit(df[['x1','x3']],df['x2'])
clf.predict(df[['x1','x3']])
我在尝试调用预测函数时收到错误 KeyError: 2
。我知道这是因为 clfs_predict
没有密钥 2
。但是,我不太确定我在这里缺少什么?
另外,有没有其他推荐的方法可以在python中实现序数分类?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。