开始通过预测
- 基于examdata.csv数据,建立逻辑回归模型,评估模型表现
- 预测Exam1=75,Exam2=60时,该同学能否通过Exam3
- 建立二阶边界模型,重复1、2
Examdata.csv示例数据如下:
Exam1,Exam2,Pass
34.62365962,78.02469282,0
30.28671077,43.89499752,0
35.84740877,72.90219803,0
60.18259939,86.3085521,1
以下是结合数据可视化的完整代码,包含数据点、决策边界及新样本的标记:
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
matplotlib.use('TkAgg')
# 设置 Matplotlib 使用支持中文的字体
plt.rcParams['font.sans-serif'] = ['Noto Sans CJK SC'] # 根据字体名称调整
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 读取数据
data = pd.read_csv('examdata.csv')
X = data[['Exam1', 'Exam2']].values # 关键修改:转为 numpy 数组
# print(X)
y = data['Pass'].values
# print(y)
# 创建模型流水线
model = make_pipeline(
PolynomialFeatures(degree=2, include_bias=False),
StandardScaler(),
LogisticRegression(penalty='l2', solver='lbfgs')
)
model.fit(X, y)
# 生成网格点
x_min, x_max = data['Exam1'].min() - 5, data['Exam1'].max() + 5
y_min, y_max = data['Exam2'].min() - 5, data['Exam2'].max() + 5
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 500),
np.linspace(y_min, y_max, 500))
# 预测网格点的分类结果
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 可视化
plt.figure(figsize=(10, 6))
# 绘制决策边界
plt.contourf(xx, yy, Z, alpha=0.3, cmap='coolwarm')
# 绘制原始数据点(通过 numpy 布尔索引)
plt.scatter(X[y == 0, 0], X[y == 0, 1],
c='red', label='Failed', edgecolors='k')
plt.scatter(X[y == 1, 0], X[y == 1, 1],
c='blue', label='Passed', edgecolors='k')
# 标记新样本
plt.scatter(75, 60, c='green', s=200, marker='*',
label='New Sample (75, 60)')
plt.xlabel('Exam1 Score')
plt.ylabel('Exam2 Score')
plt.title('Logistic Regression with 2nd-Order Boundary')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
可视化说明:
- 颜色区域:红色区域表示预测为未通过(Failed),蓝色区域表示通过(Passed)
- 数据点:原始数据点按真实标签着色(红色=0,蓝色=1)
- 星号标记:绿色五角星表示待预测样本(Exam1=75, Exam2=60)
- 决策边界:二阶多项式生成的曲线边界能更灵活地划分数据
输出效果:
- 通过样本集中在右上角高分段区域
- 新样本位于蓝色通过区域,与代码预测结果一致
- 二阶边界呈现出明显的非线性形状,比一阶逻辑回归的直线边界更贴合数据分布
如下图所示:
可视化结果直观展示了模型如何通过非线性决策边界对复杂数据进行分类。
结语
❓QQ:806797785
⭐️仓库地址:https://gitee.com/gaogzhen
⭐️仓库地址:https://github.com/gaogzhen
[1]AI人工智能从入门到精通全套教程[CP/OL].