Python:BDOC算法

 Binary Decomposition ordinal classification

import numpy as np
import pandas as pd
from copy import deepcopy
from collections import OrderedDict
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score
from sklearn.model_selection import StratifiedKFold

def BDOC(X, y, absLabeled, test_idx):
    modelDict = OrderedDict()
    trainIndex = OrderedDict()
    trainTarget = OrderedDict()
    labels = np.unique(y)
    target = np.array([_ for _ in np.arange(labels[0],labels[-1],1)])
    ###----------------------------------
    for tar in target:
        modelDict[tar] = LogisticRegression(solver='newton-cg', penalty='l2')
        trainIndex[tar] = deepcopy(absLabeled)
        trainTarget[tar] = deepcopy(y[absLabeled])
        for j in range(len(absLabeled)):
            if trainTarget[tar][j] <= tar:
                trainTarget[tar][j] = tar
            else:
                trainTarget[tar][j] = tar + 1
    ###----------------------------------
    ###---------------------------------
    for tar, model in modelDict.items():
        model.fit(X[trainIndex[tar]], trainTarget[tar])
    probDict = OrderedDict()
    for tar, model in modelDict.items():
        probDict[tar] = model.predict_proba(X[test_idx])

    y_pred = []
    for j, idx in enumerate(test_idx):
        prob = OrderedDict()
        for ele in labels:
            if ele == labels[0]:
                prob[ele] = probDict[ele][j][0]
            elif ele == labels[-1]:
                prob[ele] = probDict[ele-1][j][1]
            else:
                prob[ele] = probDict[ele-1][j][1] - probDict[ele][j][1]
        y_pred.append(max(prob,key=prob.get))
    y_pred = np.array(y_pred)
    Acc = accuracy_score(y[test_idx],y_pred)
    return Acc

已验证!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeniuHe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值