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]
相关推荐
酷酷的崽7981 小时前
【数据结构】——原来排序算法搞懂这些就行,轻松拿捏
数据结构·算法·排序算法
八月的雨季 最後的冰吻2 小时前
C--字符串函数处理总结
c语言·前端·算法
YHPsophie2 小时前
AT3340-6T杭州中科微BDS定位授时板卡性能指标
经验分享·笔记·学习·车载系统·信息与通信
Pandaconda3 小时前
【C++ 面试 - 新特性】每日 3 题(六)
开发语言·c++·经验分享·笔记·后端·面试·职场和发展
手打猪大屁4 小时前
STM32——串口通信(发送/接收数据与中断函数应用)
经验分享·笔记·stm32·单片机·嵌入式硬件
阿拉伯的劳伦斯2924 小时前
LeetCode第一题(梦开始的地方)
数据结构·算法·leetcode
Mr_Xuhhh4 小时前
C语言深度剖析--不定期更新的第六弹
c语言·开发语言·数据结构·算法
贾saisai4 小时前
Xilinx系FPGA学习笔记(四)VIO、ISSP(Altera)及串口学习
笔记·学习·fpga开发
月夕花晨3744 小时前
C++学习笔记(13)
c++·笔记·学习
吵闹的人群保持笑容多冷静4 小时前
2024CCPC网络预选赛 I. 找行李 【DP】
算法