如何使用多个预测因子训练LogisticRegression逻辑回归模型
多预测因子下的逻辑回归实现方法
sklearn的LogisticRegression原生支持任意数量的输入特征,你不需要修改模型初始化、训练的核心逻辑,只要保证传入的特征矩阵X符合格式要求即可。
核心格式要求
模型fit()方法要求特征输入X必须是二维结构,形状固定为(样本总数, 特征数):
- 每一行对应1条独立的观测样本
- 每一列对应1个预测特征,你使用X1、X2两个因子时,列数就是2
不管你用2个还是更多特征,只要满足这个结构要求,你之前写的训练集划分、模型训练代码可以直接复用。
具体数据组织方式
场景1:特征存储在pandas数据表中
这是最常见的使用场景,直接选取多列作为特征矩阵即可,选出来的结果天然是二维结构:
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # 假设df是你的原始数据集,包含X1、X2、Y三个字段 X = df[["X1", "X2"]] # 传入列名列表选多列,后续加特征直接在列表里加列名即可 y = df["Y"] # 原有逻辑不需要修改 x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = LogisticRegression() model.fit(x_train, y_train)
场景2:特征是独立的numpy一维数组
如果X1、X2是两个单独的一维向量,用np.column_stack按列拼接成二维矩阵即可:
import numpy as np # 假设X1、X2都是形状为(样本数,)的一维数组 X = np.column_stack((X1, X2)) # 拼接后形状为(样本数, 2),符合输入要求
常见错误避坑
- 不要直接把两个一维数组打包成列表传入,比如
X = [X1, X2],这种写法得到的结构形状是(特征数, 样本数),维度完全颠倒,模型会把特征当成样本训练,结果完全错误 - 不要传入一维结构的特征,哪怕单特征训练也要把特征转成二维(比如pandas选单列时用
df[["X1"]]而不是df["X1"]) - 不要先单独拆分每个特征的训练/测试集再拼接,必须先把所有特征拼成完整的X矩阵,再统一做数据集拆分,避免数据泄露
训练结果校验
训练完成后可以打印模型系数,确认两个特征都参与了训练:
# 系数顺序和你传入X的列顺序完全对应,分别是X1、X2的权重 print("X1对应系数:", model.coef_[0][0]) print("X2对应系数:", model.coef_[0][1]) print("模型截距:", model.intercept_[0]) # 预测时只要传入和训练时列顺序、列数一致的二维特征即可 y_pred = model.predict(x_test)
内容的提问来源于stack exchange,提问作者jin
相关产品推荐
相关产品推荐

