机器学习 --- 多分类学习

本文介绍了多分类学习在解决非二元问题中的应用,探讨了如何通过二分类算法扩展来处理多类别任务,重点讲解了"一对一"(OvO)和"一对其余"(OvR)两种经典策略,并在实训项目中对这两种策略进行了阐述。
摘要由CSDN通过智能技术生成

在现实生活中,很多问题并非“非黑即白”的问题,而是可以分为多个不同的类别,这些问题可以视为多分类学习任务。
多分类学习任务可以基于二分类算法进行推广后解决。有些二分类算法可以直接推广用于解决多分类问题,但是在更多情形下需要基于一些基本策略来对二分类算法进行处理从而更有效的解决多分类问题。
最经典和最基础的拆分策略包括两种:“一对一”(One vs. One,简称OvO)和“一对其余”(“One vs. Rest”,简称OvR)。本实训项目主要介绍这两类多分类处理策

OvO多分类策略

import numpy as np

# 逻辑回归
class tiny_logistic_regression(object):
    def __init__(self):
        #W
        self.coef_ = None
        #b
        self.intercept_ = None
        #所有的W和b
        self._theta = None
        #01到标签的映射
        self.label_map = {
   }


    def _sigmoid(self, x):
        return 1. / (1. + np.exp(-x))


    #训练
    def fit(self, train_datas, train_labels, learning_rate=1e-4, n_iters=1e3):
        #loss
        def J(theta, X_b, y):
            y_hat = self._sigmoid(X_b.dot(theta))
            try:
                return -np.sum(y*np.log(y_hat)+(1-y)*np.log(1-y_hat)) / len(y)
            except:
                return float('inf')

        # 算theta对loss的偏导
        def dJ(theta, X_b, y):
            return X_b.T.dot(self._sigmoid(X_b.dot(theta)) - y) / len(y)

        # 批量梯度下降
        def gradient_descent(X_b, y, initial_theta, leraning_rate, n_iters=1e2, epsilon=1e-6):
            theta = initial_theta
            cur_iter = 0
            while cur_iter < n_iters:
                gradient = dJ(theta, X_b, y)
                last_theta = theta
                theta = theta - leraning_rate * gradient
                if (abs(J(theta, X_b, y) - J(last_theta, X_b, y)) < epsilon):
                    break
                cur_iter += 1
            return theta

        unique_labels = list(set(train_labels))
        labels = train_labels.copy()

        self.label_map[0] = unique_labels[
  • 24
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值