Python体现逻辑回归和决策树的区别

代码1:逻辑回归

```python

import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets import make_moons

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score

1. 生成非线性数据:两个交错半圆

X, y = make_moons(n_samples=300, noise=0.25, random_state=42)

X_train, X_test, y_train, y_test = train_test_split(

X, y, test_size=0.3, random_state=42

)

2. 训练逻辑回归

clf = LogisticRegression()

clf.fit(X_train, y_train)

3. 预测与评估

y_pred = clf.predict(X_test)

print("逻辑回归准确率:", accuracy_score(y_test, y_pred))

print("逻辑回归系数:", clf.coef_)

print("逻辑回归截距:", clf.intercept_)

4. 绘制决策边界

xx, yy = np.meshgrid(

np.linspace(X:, 0.min() - 0.5, X:, 0.max() + 0.5, 500),

np.linspace(X:, 1.min() - 0.5, X:, 1.max() + 0.5, 500)

)

Z = clf.predict(np.c_xx.ravel(), yy.ravel()).reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.3, cmap='coolwarm')

plt.scatter(X_train:, 0, X_train:, 1, c=y_train,

edgecolor='k', cmap='coolwarm', label='train')

plt.scatter(X_test:, 0, X_test:, 1, c=y_test,

marker='x', cmap='coolwarm', label='test')

plt.title("逻辑回归:线性决策边界")

plt.legend()

plt.show()

```

特点:

逻辑回归的决策边界是一条直线,因为它的本质是线性分类器。它在这个非线性数据上通常表现一般。


代码2:决策树

```python

import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets import make_moons

from sklearn.model_selection import train_test_split

from sklearn.tree import DecisionTreeClassifier, export_text

from sklearn.metrics import accuracy_score

1. 同一份数据

X, y = make_moons(n_samples=300, noise=0.25, random_state=42)

X_train, X_test, y_train, y_test = train_test_split(

X, y, test_size=0.3, random_state=42

)

2. 训练决策树

clf = DecisionTreeClassifier(max_depth=4, random_state=42)

clf.fit(X_train, y_train)

3. 预测与评估

y_pred = clf.predict(X_test)

print("决策树准确率:", accuracy_score(y_test, y_pred))

print("特征重要性:", clf.feature_importances_)

4. 打印树规则,展示可解释性

print("\n决策树规则示例:")

print(export_text(clf, feature_names='x1', 'x2'))

5. 绘制决策边界

xx, yy = np.meshgrid(

np.linspace(X:, 0.min() - 0.5, X:, 0.max() + 0.5, 500),

np.linspace(X:, 1.min() - 0.5, X:, 1.max() + 0.5, 500)

)

Z = clf.predict(np.c_xx.ravel(), yy.ravel()).reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.3, cmap='coolwarm')

plt.scatter(X_train:, 0, X_train:, 1, c=y_train,

edgecolor='k', cmap='coolwarm', label='train')

plt.scatter(X_test:, 0, X_test:, 1, c=y_test,

marker='x', cmap='coolwarm', label='test')

plt.title("决策树:非线性、阶梯状决策边界")

plt.legend()

plt.show()

```

特点:

决策树可以拟合非线性边界,决策边界是"阶梯状"的。它不需要特征缩放,但树太深容易过拟合。


两者核心区别

对比项 逻辑回归 决策树

模型类型 线性模型 非线性模型

决策边界 直线 / 超平面 轴对齐的阶梯状边界

可解释性 系数表示特征对对数几率的影响 if-else 规则,直观但树深后复杂

特征缩放 通常需要 不需要

概率输出 Sigmoid 平滑概率 叶子节点类别频率,不连续

过拟合 较不容易,配合正则化 容易过拟合,需要剪枝/限制深度

外推能力 可以外推 不能外推,只会在训练范围附近划分

适用场景 线性可分、需要概率和解释 非线性、规则复杂、混合类型特征

一句话总结:

逻辑回归是"画一条线"来分类,决策树是"不断切蛋糕"来分类。前者简单稳定、可解释为权重;后者灵活强大、可解释为规则,但更容易过拟合。

文章仅供参考用。

相关推荐
特立独行的猫A3 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
大可不必了8 小时前
03 函数定义和调用
开发语言·python
I_belong_to_jesus8 小时前
C++关于分支预测的优化1
开发语言·c++·算法
承渊政道9 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛9 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
imgsq9 小时前
GESP Python 一到四级:备考路线与真题特点
python·青少年编程
eggwyw10 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
2601_9679791211 小时前
纯手写:Python安装pip完整教程,搞了几小时,终于成功
python·教程·pip·安装·包管理
Norna11 小时前
缓存文件从没写出来:一个 .json 被当成目录用了
python