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]
相关推荐
白狐_79836 分钟前
408数据结构第5章:树与二叉树②——遍历、线索树、森林与哈夫曼
数据结构·算法·深度优先
302wanger1 小时前
【阅读笔记】当AI拿走一切之后
笔记
疯狂打码的少年2 小时前
【数据结构】串(字符串):基本概念与存储
数据结构·笔记
致Great4 小时前
科研人的 AI,不该只回答问题:我用字节TraeWork 跑了一遍真实研究任务
算法
纵有疾風起4 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt
测试_AI_一辰5 小时前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程
Hotchip_MEMS5 小时前
TWS耳机微米级较量:超薄LGA封装如何助力MEMS麦克风小型化?
人工智能·笔记·物联网·电脑
lucas_AI5 小时前
给YOLO检测器插 LoRA,'插对地方'比'插什么'更要命
人工智能·算法
Ztt6666666665 小时前
金泉方壶四面端正,月白釉却把棱角放柔了
经验分享·笔记·其他·百度·微信公众平台
学习和思考5 小时前
非自动化专业如何自学PLC?我的6个月学习路线图
笔记·学习·自动化·学习方法