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

如何绘制Logistic Regression线性模型?求绘图方法及教程

Logistic Regression 绘图实现与通用绘图能力提升指南

一、添加绘图功能的完整代码

乳腺癌数据集是30维特征,无法直接可视化,先通过PCA降维到2维,再绘制决策边界和分类结果:

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn.decomposition import PCA
import seaborn as sns
import matplotlib.pyplot as plt


def sigmoid(x):
    return 1/(1+np.exp(-x))

class LogisticRegression():

    def __init__(self, lr=0.001, n_iters=1000):
        self.lr = lr
        self.n_iters = n_iters
        self.weights = None
        self.bias = None

    def fit(self, X, y):
        n_samples, n_features = X.shape
        self.weights = np.zeros(n_features)
        self.bias = 0

        for _ in range(self.n_iters):
            linear_pred = np.dot(X, self.weights) + self.bias
            predictions = sigmoid(linear_pred)

            dw = (1/n_samples) * np.dot(X.T, (predictions - y))
            db = (1/n_samples) * np.sum(predictions-y)

            self.weights = self.weights - self.lr*dw
            self.bias = self.bias - self.lr*db


    def predict(self, X):
        linear_pred = np.dot(X, self.weights) + self.bias
        y_pred = sigmoid(linear_pred)
        class_pred = [0 if y<=0.5 else 1 for y in y_pred]
        return class_pred

    # 新增:返回概率预测值,用于绘制决策边界
    def predict_proba(self, X):
        linear_pred = np.dot(X, self.weights) + self.bias
        return sigmoid(linear_pred)

# training
bc = datasets.load_breast_cancer()
X, y = bc.data, bc.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)

# PCA降维到2维,方便可视化
pca = PCA(n_components=2)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)

# 使用降维后的数据训练模型
clf = LogisticRegression(lr=0.01, n_iters=5000)  # 增加迭代次数保证收敛
clf.fit(X_train_pca, y_train)
y_pred = clf.predict(X_test_pca)

def accuracy(y_pred, y_test):
    return np.sum(y_pred==y_test)/len(y_test)

acc = accuracy(y_pred, y_test)
print('实现的模型准确率为:', acc)

# -------------------------- 绘图部分 --------------------------
plt.figure(figsize=(10,6))

# 1. 绘制训练集样本散点
sns.scatterplot(x=X_train_pca[:,0], y=X_train_pca[:,1], hue=y_train, 
                palette=['#ff6b6b','#4ecdc4'], alpha=0.6, label='训练集')

# 2. 绘制测试集预测结果散点
sns.scatterplot(x=X_test_pca[:,0], y=X_test_pca[:,1], hue=y_pred, 
                palette=['#ff8787','#66d9e8'], marker='*', s=100, alpha=0.8, label='测试集预测')

# 3. 绘制决策边界:生成网格点计算概率,找到0.5概率的分界线
x_min, x_max = X_train_pca[:,0].min()-0.5, X_train_pca[:,0].max()+0.5
y_min, y_max = X_train_pca[:,1].min()-0.5, X_train_pca[:,1].max()+0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
grid_points = np.c_[xx.ravel(), yy.ravel()]
probs = clf.predict_proba(grid_points).reshape(xx.shape)

# 绘制决策边界和概率等高线
plt.contour(xx, yy, probs, levels=[0.5], colors='black', linewidths=2)
plt.contourf(xx, yy, probs, levels=[0,0.5,1], colors=['#ffebee','#e0f7fa'], alpha=0.3)

plt.xlabel('PCA特征1')
plt.ylabel('PCA特征2')
plt.title('Logistic Regression 分类结果与决策边界')
plt.legend()
plt.show()

代码说明

  • 新增predict_proba方法:返回样本属于正类的概率,用于定位决策边界。
  • PCA降维:解决高维数据无法空间可视化的问题,将特征压缩到2维。
  • 决策边界绘制:通过生成网格点计算概率,用等高线标出概率=0.5的分类分界线,同时填充概率区域展示分类置信度。

二、通用绘图能力提升指南

1. 掌握基础绘图库核心API

  • Matplotlib:吃透plt.figure()、plt.scatter()、plt.contour()、plt.legend()等基础函数,理解画布、坐标轴、图例的控制逻辑。
  • Seaborn:重点掌握sns.scatterplot()、sns.histplot()、sns.heatmap(),利用其封装好的统计可视化能力快速生成规范图表。

2. 明确可视化目标再动手

  • 展示分类结果:用散点图区分类别,叠加决策边界或置信区域。
  • 展示数据分布:用直方图、箱线图、核密度图呈现数据离散程度和集中趋势。
  • 展示变量关系:用热力图看特征相关性,用折线图看趋势变化,用散点图看变量间关联。

3. 学会适配可视化的数据预处理

  • 高维数据降维:用PCA、t-SNE将高维数据降到2/3维,实现空间可视化。
  • 特征标准化:如果特征尺度差异大,先做StandardScaler标准化,避免单一特征主导可视化效果。

4. 自定义样式提升可读性

  • 合理设置画布大小:plt.figure(figsize=(width, height)),避免图表拥挤或空旷。
  • 选择适配场景的配色:优先用低饱和度配色,可复用Seaborn内置调色板(如palette='viridis')或自定义配色。
  • 添加清晰的标签与标题:每个图表必须有明确的坐标轴标签和主题标题,图例位置避开数据区域。

5. 实战迭代优化

  • 从基础到复杂:先画核心图表,再逐步添加细节(如决策边界、置信区域)。
  • 模仿优秀案例:参考学术论文、技术博客中的可视化布局和样式,逐步形成自己的风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:45:27