Python线性回归实战:从一维直线拟合到三维平面预测

远山来客
远山来客
发布时间:2026-10-13 | 2人浏览过
原创

本文通过Python sklearn库演示线性回归的两种典型应用场景。首先利用历史房屋面积与价格数据,建立一维线性模型进行直线拟合与价格预测;其次通过虚拟数据构建三维空间平面模型,展示多变量线性方程的系数求解与预测方法。代码包含数据预处理、模型训练、参数获取及可视化绘图完整流程,适合机器学习初学者参考。

在Python中进行线性回归分析十分便捷,开发者可直接调用现成的科学计算库,例如numpy.linalg.lstsq、scipy.stats.linregress或pandas.ols等模块来实现。

本文重点介绍使用sklearn库中的linear_model.LinearRegression类,该模块支持任意维度的数据输入,功能强大且使用简便。

一、二维直线拟合示例

基础概念:线性方程形式为y=a*x+b,该方程在二维平面上表示一条直线。

以下案例基于房屋面积与房屋价格的历史数据集,构建线性回归模型。

模型建立后,即可根据给定的房屋面积数据预测对应的房屋价格。数据来源见下文代码部分。

import pandas as pd 
from io import StringIO  
from sklearn import linear_model  
import matplotlib.pyplot as plt 
# 房屋面积与价格历史数据(csv文件) 
csv_data = 'square_feet,price\n150,6450\n200,7450\n250,8450\n300,9450\n350,11450\n400,15450\n600,18450\n' 
 
# 读入dataframe 
df = pd.read_csv(StringIO(csv_data)) 
print(df)  
# 建立线性回归模型 
regr = linear_model.LinearRegression()  
# 拟合 
regr.fit(df['square_feet'].reshape(-1, 1), df['price']) # 注意此处.reshape(-1, 1),因为X是一维的! 
# 不难得到直线的斜率、截距 
a, b = regr.coef_, regr.intercept_ 
 
# 给出待预测面积 
area = 238.5 
 
# 方式1:根据直线方程计算的价格 
print(a * area + b) 
# 方式2:根据predict方法预测的价格 
print(regr.predict(area))  
# 画图 
# 1.真实的点 
plt.scatter(df['square_feet'], df['price'], color='blue')  
# 2.拟合的直线 
plt.plot(df['square_feet'], regr.predict(df['square_feet'].reshape(-1,1)), color='red', linewidth=4) 
 
plt.show() 

二、三维平面拟合示例

基础概念:线性方程形式为z=a*x+b*y+c,该方程在三维空间中表示一个平面。

由于缺乏公开的真实多维数据集,此处采用人工生成的虚拟数据进行演示。

import numpy as np  
from sklearn import linear_model  
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt  
xx, yy = np.meshgrid(np.linspace(0,10,10), np.linspace(0,100,10)) 
zz = 1.0 * xx + 3.5 * yy + np.random.randint(0,100,(10,10))  
# 构建成特征、值的形式 
X, Z = np.column_stack((xx.flatten(),yy.flatten())), zz.flatten() 
 
# 建立线性回归模型 
regr = linear_model.LinearRegression() 
 
# 拟合 
regr.fit(X, Z) 
# 不难得到平面的系数、截距 
a, b = regr.coef_, regr.intercept_  
# 给出待预测的一个特征 
x = np.array([[5.8, 78.3]])  
# 方式1:根据线性方程计算待预测的特征x对应的值z(注意:np.sum) 
print(np.sum(a * x) + b)  
# 方式2:根据predict方法预测的值z 
print(regr.predict(x))  
# 画图 
fig = plt.figure() 
ax = fig.gca(projection='3d')  
# 1.画出真实的点 
ax.scatter(xx, yy, zz) 
# 2.画出拟合的平面 
ax.plot_wireframe(xx, yy, regr.predict(X).reshape(10,10)) 
ax.plot_surface(xx, yy, regr.predict(X).reshape(10,10), alpha=0.3) 

plt.show() 

模型拟合效果如图所示。

总结

以上即为Python线性回归代码示例的全部内容,希望能为读者提供帮助。感兴趣的朋友可继续查阅本站其他文章:

Python八大排序算法速度实例对比

详解K-means算法在Python中的实现

Python算法之图的遍历

若内容存在不足,欢迎留言指正。感谢各位读者对本站的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表