24/8/14算法笔记 复习_OVR和softmax

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)#随机数种子

#ovr建模
from sklearn.metrics import accuracy_score

model = LogisticRegression(multi_class = 'ovr')
model.fit(X_train,y_train)

y_pred = model.predict(X_test)

print('逻辑回归实现方式准确率',model.score(X_test,y_test))

accuracy_score(y_test,y_pred)#计算模型正确预测的样本数占总样本数的比例。

(y_pred == y_test).mean()  #这部分代码会逐元素比较 y_pred 和 y_test 数组(或 Series)。如果 y_pred 中的元素与 y_test 中的对应元素相等,则结果为 True(在布尔上下文中相当于 1),否则为 False(相当于 0)。

#进行概率预测
np.set_printoptions(suppress=True)#不用科学计数
proba_ = model.predict_proba(X_test)
#几列,几维
proba_[:10]

#概率的手动计算
#OVR依然是sigmoid
def sigmoid(z):
    return 1/(1+np.exp(-z))

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

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
def softmax(x):
    return np.exp(x)/np.exp(z).sum()
z = [3,1,-3]
softmax(z).round(2)

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)

#模型选择
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]

OvR(One vs Rest)算法是一种解决多分类问题的方法,它将多分类问题转化为多个二分类问题。具体来说,如果有N个类别,OvR算法会为每个类别训练一个二分类器,将该类别作为正例,其余所有类别作为负例。在预测时,所有二分类器都会对测试样本进行预测,然后选择预测为正例的概率最高的类别作为最终预测结果。如果多个分类器预测为正类,则选择置信度最大的类别作为最终分类结果。这种方法的优点是实现简单,计算量相对较小,但是可能会在类别不平衡的情况下导致性能下降

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值