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

如何在Matplotlib绘图中展示Logistic回归的S型拟合曲线

错误原因

  • 你代码中plt.plot传入的y未定义,从报错维度推断你大概率错误传入了Y = model.predict(X_test)的结果:X_train有40条样本,X_test只有10条,二者长度不匹配直接画图就会触发维度错误
  • 直接调用predict()得到的是离散的分类结果(0/1),无法输出连续的S型概率曲线,需要调用predict_proba()获取正类的预测概率

修正后代码

%matplotlib inline
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# 数据读取与拆分
log_df = pd.read_csv("datalist/education/pollingData.csv")
X_train, X_test, y_train, y_test = train_test_split(log_df[['PercentYes']], log_df.side_val, test_size=0.2)

# 模型训练
model = LogisticRegression()
model.fit(X_train, y_train)

# 绘图部分
plt.figure(1, figsize=(4, 3))
plt.clf()
# 绘制原始训练集散点
plt.scatter(X_train, y_train, color="black", marker='+', label='训练样本')

# 生成连续的x取值区间,用于绘制平滑S曲线
x_range = np.linspace(X_train.min(), X_train.max(), 100).reshape(-1, 1)
# 预测每个x值对应正类的概率,取结果第二列即类别1的概率值
y_sigmoid = model.predict_proba(x_range)[:, 1]

# 绘制S型拟合曲线
plt.plot(x_range, y_sigmoid, color='red', label='拟合S曲线')
plt.xlabel('PercentYes')
plt.ylabel('分类概率')
plt.legend()
plt.show()

调整说明

  • 生成覆盖训练集取值范围的100个连续x点,避免直接用离散训练集点绘制出现折线效果
  • 用predict_proba()获取正类的预测概率,输出的就是Logistic回归对应的S型sigmoid曲线值
  • 连续x值通过reshape(-1,1)转为sklearn要求的二维输入格式,避免传入一维序列触发格式报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:24:03