24/8/5算法笔记 One vs Rest和softmax

"One-vs-Rest" (OvR) 是一种常见的多分类问题处理策略,特别是在机器学习领域中。在这种策略中,每个类别都被视为二分类问题,即一个类别与所有其他类别进行区分。例如,如果你有一个包含三个类别的问题,你会创建三个不同的模型,每个模型都试图区分一个特定的类别和所有其他类别的组合。

One VS Rest举例说明

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn import datasets

from sklearn.model_selection import train_test_split#拆分数据
X,y = datasets.load_iris(return_X_y=True)

X_train,X_test,y_train,y_test = train_test_split(X,y,
                                                 test_size=0.2,#测试比例
                                                random_state=1024)#随机打乱
display(X_train.shape,X_test.shape)
display(y_train.shape,y_test.shape)

display(X_train[:5])
ovr建模
from sklearn.metrics import accuracy_score

model = LogisticRegression(multi_class = 'ovr')

model.fit(X_train,y_train)

y_pred = model.predict(X_test)
display(y_test[:10],y_pred[:10])

print('逻辑回归实现方式准确率:',model.score(X_test,y_test))
accuracy_score(y_test,y_pred)
(y_pred == y_test).mean()
进行概率预测
np.set_printoptions(suppress=True)#不用科学计数
proba_ = model.predict_proba(X_test)
#几列,几维
proba_[:10]
概率的手动计算
#150个样本
#4表示每个样本特征属性,花瓣长,宽,花萼长款
X.shape
#OVR 依然是sigmoid

def sigmoid(z):
    return 1/(1+np.exp(-z))

#截距,
b_ = model.intercept_

#方程系数
#三行表示三个分类器
#四列表示每个方程,4个系数(4个属性,索引对应4个系数)
w_=model.coef_

y_self_pred = X_test.dot(w_.T) + b_

p = sigmoid(y_self_pred)
p = p/p.sum(axis=1).reshape(-1,1)#归一化,和就是1
print('手动计算的概率:\n',p[:5])
print('算法计算的概率:\n',proba_[:5])

softmax软最大(数据-->概率)

Softmax 是一个在机器学习和深度学习中常用的函数,特别是在处理多分类问题时。它将一个向量或一组实数转换成概率分布,使得所有输出值都在0到1之间,并且所有输出值的和为1。

Softmax 函数的定义:

对于一个输入向量 zz,其中包含 KK 个元素 z1,z2,...,zKz1​,z2​,...,zK​,Softmax 函数定义如下:

def softmax(x):
    return np.exp(x)/np.exp(z).sum()
z= [3,1,-3]

softmax(z).round(2)
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
#训练数据和测试数据
from sklearn.model_selection import train_test_split

X,y=datasets.load_iris(return_X_y=True)

X_train,X_test,y_train,y_test= train_test_split(X,y,random_state = 1024)

display(X_train.shape,y_train.shape)
display(X_test[:5])
model = LogisticRegression(multi_class='multinomial')#多分类,表示softmax进行概率划分

model.fit(X_train,y_train)

print('算法预测的概率:',model.score(X_test,y_test))
print('算法预测测试数据的概率:\n',model.predict_proba(X_test)[:5])
概率手动计算
w_ = model.coef_#方程系数

b_ =model.intercept_

def softmax(z):              #计算第一行的和
    return np.exp(z)/np.exp(z).sum(axis=1).reshape(-1,1)

z = X_test.dot(w_.T) + b_
softmax(z)[:5]
相关推荐
亦枫Leonlew11 分钟前
三维测量与建模笔记 - 3.3 张正友标定法
笔记·相机标定·三维重建·张正友标定法
考试宝14 分钟前
国家宠物美容师职业技能等级评价(高级)理论考试题
经验分享·笔记·职场和发展·学习方法·业界资讯·宠物
好奇龙猫1 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
香菜大丸2 小时前
链表的归并排序
数据结构·算法·链表
jrrz08282 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time2 小时前
golang学习2
算法
黑叶白树2 小时前
简单的签到程序 python笔记
笔记·python
幸运超级加倍~3 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
南宫生3 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法