逻辑回归-为什么逻辑回归predict_proba返回结果按行求和为1

本文探讨了逻辑回归的predict_proba方法在多分类问题中的工作原理。当multi_class设置为'multinomial'时,使用softmax函数预测各类概率;而设置为'ovr'时,对每个类别单独建模并归一化。通过load_iris数据集举例,解释了在不同设置下模型如何处理概率估计,以及为何输出的概率按行求和为1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里可以看一下帮助文档中的描述
predict_proba(X)

Probability estimates.
概率估计

The returned estimates for all classes are ordered by the label of classes.
这个方法的返回所有类别的概率的估计值按照类别的标签排序

For a multi_class problem, if multi_class is set to be “multinomial” the softmax function is used to find the predicted probability of each class. Else use a one-vs-rest approach, i.e calculate the probability of each class assuming it to be positive using the logistic function. and normalize these values across all the classes.
对于一个多分类问题,如果multi_clas桉树被设置为“multinomial” ,则softmax函数会被用于预测每个类别的预测概率。否则,使用ovr方法,即使用sigmoid函数,依次假设每个类为唯一正类,计算每个类别的概率,然后对所有类预测的概率进行归一化

  这里我们以load_iris数据集为例,这是一个三分类数据集

from sklearn.datasets import load_iris
import numpy as np

X,y = load_iris(return_X_y=True)

逻辑回归的multi_class没有’ovo’选项

  这里我们先说’ovr’情况,建立多分类情况下的模型

from sklearn.linear_model import LogisticRegression

clf = LogisticRegression(max_iter=1000,multi_class='ovr').fit(X,y)
clf.predict_proba(X[:5,:])
---
array([[8.96807569e-01, 1.03191359e-01, 1.07219602e-06],
       [7.78979389e-01, 2.21019299e-01, 1.31168933e-06],
       [8.34864184e-01, 1.65134802e-01, 1.01485082e-06],
       [7.90001986e-01, 2.09996107e-01, 1.90723705e-06],
       [9.12050403e-01, 8.79485212e-02, 1.07537143e-06]])

按行求和

clf.predict_proba(X[:5,:])
### 解决方案 `NameError: name 'lr' is not defined` 错误表明在代码中尝试访问名为 `lr` 的变量或对象时,该名称尚未被定义。这种错误通常发生在模型实例化之前就调用了它的方法,或者变量名拼写错误。 以下是具体原因和解决办法: #### 1. **确认模型是否已正确定义** 如果代码中有类似以下片段: ```python print(lr.predict_proba(X_test)) ``` 但在前面并未初始化 `lr` 对象,则会引发上述错误。应确保先创建模型实例再调用其方法。例如,对于逻辑回归模型,可以这样定义它[^1]: ```python from sklearn.linear_model import LogisticRegression lr = LogisticRegression() lr.fit(X_train, y_train) print(lr.predict_proba(X_test)) ``` #### 2. **检查是否有拼写错误** 有时可能是简单的拼写问题。比如实际应该使用的是另一个变量名而非 `lr`。仔细核对代码中的所有相关部分以排除此类可能性。 #### 3. **加载预训练模型** 如果是试图加载先前保存的模型而不是重新训练新模型,请记得正确导入并恢复模型状态。例如利用 joblib 或 pickle 库来完成这一操作[^2]: ```python import joblib # 加载已经存在的模型文件 lr = joblib.load('model_filename.pkl') print(lr.predict_proba(X_test)) ``` 以上步骤能有效防止因未定义而导致的名字错误。 ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression # 数据准备 data = load_iris() X = data.data[data.target != 2] y = data.target[data.target != 2] X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.5, random_state=0) scaler = StandardScaler().fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) # 定义并拟合模型 lr = LogisticRegression(random_state=0) lr.fit(X_train_scaled, y_train) # 使用predict_proba 方法 proba_results = lr.predict_proba(X_test_scaled) print(proba_results[:5]) ``` ### 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值