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 平滑概率 叶子节点类别频率,不连续

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

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

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

一句话总结:

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

文章仅供参考用。

相关推荐
王大师王文峰4 小时前
Java+AI 面试题(二):业务场景设计 10 例【客服机器人、合同审查、Text2SQL、告警降噪、成本优化】场景题答法与追问链路
java·开发语言·人工智能
言乐64 小时前
Python实现三轴联动根据数据自动打磨镜片模型
开发语言·python
万化冥合4 小时前
如何批量把 PPT 转成视频?
python·1024程序员节
CHHH_HHH4 小时前
【Linux网络篇】初识网络与Socket编程基础
linux·服务器·c语言·开发语言·网络·后端·1024程序员节
xiangjiaodalishi4 小时前
武汉玖叁鹿科技:我们把 GEO 服务做成了可以审计的交付工程
python·1024程序员节
思麟呀4 小时前
BTree的原理与 C++ 完整实现
c语言·数据结构·c++·算法·1024程序员节
jimy14 小时前
C++ 中 xvalue 的 identity 存在哪里?和 lvalue 的 identity 有什么区别?
开发语言·c++·1024程序员节
yujunl4 小时前
U9 无授权的模式WebAPI开发的总结
开发语言·1024程序员节
zzu123zsw4 小时前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
开发语言·python·rust·大模型·ai agent
jiangliushi64 小时前
GPT-6.1 Sol 免费用:Python 读文件报 ‘gbk‘ codec can‘t decode?加一个参数就好
python·编码·1024程序员节