如何绘制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
相关产品推荐
相关产品推荐

