You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已完成鸢尾花数据集逻辑回归,如何用参数权重构建测试数据评分公式?

手动实现逻辑回归预测(无需predict函数)

没问题!我来带你一步步实现不用predict函数,直接用模型参数计算预测结果的方法,完全贴合你用鸢尾花数据集训练的逻辑回归场景~

第一步:先补全完整的训练流程

首先把你没写完的训练代码补全,确保我们有训练好的模型和预处理好的测试数据:

from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 数据标准化(注意:测试集要用训练集的scaler拟合结果!)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 训练逻辑回归模型(默认是多分类的multinomial模式,用softmax)
model = LogisticRegression()
model.fit(X_train_scaled, y_train)

第二步:提取模型核心参数

训练好的模型会输出两个关键参数:

  • model.coef_:形状为(n_classes, n_features),每个类别对应一组特征权重
  • model.intercept_:形状为(n_classes,),每个类别的截距项

你可以先打印看看参数:

print("权重矩阵(coef_):\n", model.coef_)
print("截距项(intercept_):\n", model.intercept_)

第三步:手动计算预测结果

因为鸢尾花是3分类任务,sklearn默认用Softmax回归(属于多分类逻辑回归),所以我们分两步计算:

1. 计算每个类别的线性得分(Logits)

对于每个标准化后的测试样本x,每个类别k的线性得分公式是:

z_k = x · coef_[k].T + intercept_[k]

用矩阵运算可以一次性计算所有测试样本的所有类别得分:

import numpy as np

# 计算所有测试样本的类别得分:形状为(n_samples, n_classes)
logits = np.dot(X_test_scaled, model.coef_.T) + model.intercept_

2. 用Softmax转换为类别概率

Softmax函数会把每个样本的logits转换成0-1之间的概率,所有类别概率之和为1:

# 实现softmax函数(防止数值溢出的优化版)
def softmax(logits):
    # 先减去每个样本的最大logit,避免指数运算溢出
    exp_logits = np.exp(logits - np.max(logits, axis=1, keepdims=True))
    return exp_logits / np.sum(exp_logits, axis=1, keepdims=True)

# 计算概率
probabilities = softmax(logits)

3. 得到最终预测类别

取每个样本概率最大的类别索引,就是预测结果:

# 手动预测结果
manual_predictions = np.argmax(probabilities, axis=1)

# 和sklearn的predict结果对比,验证正确性
sklearn_predictions = model.predict(X_test_scaled)
print("手动预测和sklearn预测是否一致:", np.array_equal(manual_predictions, sklearn_predictions))

补充:如果是二分类任务

如果是二分类场景,逻辑回归用的是Sigmoid函数,公式会更简单:

  1. 计算线性得分:z = x · coef_.T + intercept_
  2. 转换为概率:prob = 1 / (1 + np.exp(-z))
  3. 预测类别:np.where(prob >= 0.5, 1, 0)

关键注意事项

  • 必须用训练集的标准化参数处理测试集:绝对不能对测试集重新fit,否则会引入数据泄露,导致结果错误
  • 多分类和二分类的区别:sklearn的LogisticRegression当multi_class="multinomial"时用Softmax,multi_class="ovr"时是一对多的二分类逻辑回归,手动计算时要对应调整

内容的提问来源于stack exchange,提问作者Kumar AK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:48:02