基于球队比赛数据预测胜负:线性回归输出概率转分类方法咨询
问题:将连续预测值转为二分类结果(0/1)
我用某篮球队的比赛统计数据(得分、三分球等)预测比赛胜负(0负1胜),已完成数据预处理:
import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression # 定义变量 y = data.Result.values x_data = data.drop(["Result"],axis='columns') # 归一化与数据集划分 x = (x_data - np.min(x_data))/(np.max(x_data) - np.min(x_data)).values x_train, x_test, y_train, y_test = train_test_split(x,y, test_size = 0.2, random_state=42) # 转置调整维度 x_train = x_train.T x_test = x_test.T y_train = y_train.T y_test = y_test.T
使用线性回归预测时,输出的是连续值而非0/1的明确结果,如何处理?
解决方案
方法一:改用逻辑回归(推荐)
线性回归是为回归任务设计的,输出无概率约束,不适合二分类场景。逻辑回归专门针对二分类任务,输出是样本属于正类(1)的概率,可直接输出0/1类别:
from sklearn.linear_model import LogisticRegression # 初始化逻辑回归模型 lr = LogisticRegression() # 训练模型(注意将转置后的特征转回来适配sklearn接口) lr.fit(x_train.T, y_train.T) # 直接预测0/1类别 y_pred = lr.predict(x_test.T) # 输出测试集准确率 print("逻辑回归测试准确率: {}".format(lr.score(x_test.T, y_test.T)))
方法二:对线性回归输出做阈值转换
如果坚持使用线性回归,可设定阈值(通常选0.5)将连续预测值转为0/1:
# 获取线性回归的连续预测值 mlr_pred = mlr.predict(x_test.T) # 阈值转换:大于0.5转为1,否则为0 y_pred = (mlr_pred > 0.5).astype(int) # 手动计算准确率 accuracy = (y_pred == y_test.T).mean() print("线性回归转换后测试准确率: {}".format(accuracy))
注意:线性回归的输出没有概率意义,阈值选择缺乏理论依据,分类效果通常不如逻辑回归。
内容的提问来源于stack exchange,提问作者322quick1
相关产品推荐
相关产品推荐

