在实际工程中,机器学习往往以“数据 → 处理 → 建模 → 评估”的流程展开。本文以“温度与冰淇淋销售额”为示例,完整演示如何使用 Python 工具链完成一次标准的单因子线性回归实践。

流程结构如下:

1、导入库

2、读取数据

3、数据清理

4、数据可视化

5、划分特征与标签

6、划分训练集与测试集

7、建立模型

8、训练模型

9、查看模型参数

10、模型预测

11、绘制线性回归线

12、模型评估

这是一套可复用的机器学习工程流程模板。

完整可运行参考代码:

"""单因子线性回归:完整可运行示例运行环境:pip install numpy pandas matplotlib scikit-learn"""
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt
from sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_squared_error, r2_score
import matplotlib
# ========= 1) 环境配置(可选:中文显示) =========# SimHei 常见于 Windows;Mac/Linux 可能需要换成其他中文字体,或直接注释掉matplotlib.rcParams["font.sans-serif"] = ["SimHei"]matplotlib.rcParams["axes.unicode_minus"] = False
# ========= 2) 数据读取(以读取 CSV 文件为例) =========path = "单因子线性回归.csv"df = pd.read_csv(path, encoding="utf-8")
# ========= 3) 基础检查 =========print("数据类型与形状:", type(df), df.shape)print(df.head())
# ========= 4) 选择 x/y 列(示例:默认取前两列) =========# 注意:如果你的 CSV 前两列不是“特征/标签”,请改成显式列名x_col = df.columns[0]  # 特征列y_col = df.columns[1]  # 标签列
# ========= 5) 数据清理 =========# 只对用于建模的两列做缺失值处理,避免列删改导致列名失效df = df[[x_col, y_col]].dropna()print("清理后形状:", df.shape)print(df)
# ========= 6) 可视化散点图 =========plt.figure()plt.scatter(df[x_col].to_numpy(), df[y_col].to_numpy())plt.xlabel(x_col)plt.ylabel(y_col)plt.title(f"散点图:{x_col} vs {y_col}")plt.show()
# ========= 7) 划分特征与标签 =========X = df[[x_col]]  # 必须二维y = df[y_col]    # 可一维
# ========= 8) 划分训练集与测试集 =========X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.3, random_state=42)
# ========= 9) 建模与训练 =========model = LinearRegression()model.fit(X_train, y_train)
# ========= 10) 查看参数 =========w = float(model.coef_[0])b = float(model.intercept_)print(f"回归方程:y = {w:.4f}x + {b:.4f}")
# ========= 11) 预测 =========y_pred = model.predict(X_test)
# ========= 12) 绘制回归线(覆盖全体 X 范围) =========x_min = float(X[x_col].min())x_max = float(X[x_col].max())x_line = np.linspace(x_min, x_max, 100)
# 保持与训练数据一致:仍用 DataFrame,且列名一致x_line_df = pd.DataFrame({x_col: x_line})y_line = model.predict(x_line_df)
plt.figure()plt.scatter(X[x_col].to_numpy(), y.to_numpy())  # 全量散点plt.plot(x_line, y_line)                        # 回归线plt.xlabel(x_col)plt.ylabel(y_col)plt.title(f"散点图:{x_col} vs {y_col}")plt.show()
# ========= 13) 模型评估 =========mse = mean_squared_error(y_test, y_pred)rmse = float(np.sqrt(mse))r2 = r2_score(y_test, y_pred)
print(f"MSE  = {mse:.4f}")print(f"RMSE = {rmse:.4f}")print(f"R^2  = {r2:.4f}")
# ========= 14) 单点预测(示例) =========# 预测 x=90 时的 y(输入必须二维)x_single = pd.DataFrame({x_col: [90.0]})y_single = float(model.predict(x_single)[0])print(f"当 {x_col}=90 时,预测 {y_col} 为:{y_single:.2f}")

图片

“点赞有美意,赞赏是鼓励”

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐