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]
相关推荐
EterNity_TiMe_几秒前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
dr李四维8 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
机器学习之心11 分钟前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds22 分钟前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao1 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian1 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek2 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz2 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
jiao_mrswang3 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca3 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法