京公网安备 11010802034615号
经营许可证编号:京B2-20210330
使用Python进行线性回归
线性回归是最简单同时也是最常用的一个统计模型。线性回归具有结果易于理解,计算量小等优点。如果一个简单的线性回归就能取得非常不错的预测效果,那么就没有必要采用复杂精深的模型了。
今天,我们一起来学习使用Python实现线性回归的几种方法:
通过公式编写矩阵运算程序;
通过使用机器学习库sklearn;
通过使用statmodels库。
这里,先由简至繁,先使用sklearn实现,再讲解矩阵推导实现。
1.使用scikit-learn进行线性回归
设置工作路径
#
import os
os.getcwd()
os.chdir('D:\my_python_workfile\Project\Writting')
加载扩展包
import pandas as pd
import numpy as np
import pylab as pl
import matplotlib.pyplot as plt
载入数据并可视化分析
这里,为了简单起见,使用sklearn中自带的数据集鸢尾花数据iris进行分析,探索『花瓣宽』和『花瓣长』之间的线性关系。
from sklearn.datasets import load_iris
# load data
iris = load_iris()
# Define a DataFrame
df = pd.DataFrame(iris.data, columns = iris.feature_names)
# take a look
df.head()
#len(df)

# correlation
df.corr()


# rename the column name
df.columns = ['sepal_length','sepal_width','petal_length','petal_width']
df.columns
Index([u'sepal_length', u'sepal_width', u'petal_length', u'petal_width'], dtype='object')
plt.matshow(df.corr())

由上面分析可知,花瓣长sepal length和花瓣宽septal width有着非常显著的相关性。
下面,通过线性回归进一步进行验证。
# save image
fig,ax = plt.subplots(nrows = 1, ncols = 1)
ax.matshow(df.corr())
fig.savefig('./image/iris_corr.png')
建立线性回归模型
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
lr = LinearRegression()
X = df[['petal_length']]
y = df['petal_width']
lr.fit(X,y)
# print the result
lr.intercept_,lr.coef_
(-0.3665140452167297, array([ 0.41641913]))
# get y-hat
yhat = lr.predict(X = df[['petal_length']])
# MSE
mean_squared_error(df['petal_width'],yhat)
# lm plot
plt.scatter(df['petal_length'],df['petal_width'])
plt.plot(df['petal_length'],yhat)
#save image
plt.savefig('./image/iris_lm_fit.png')
2.使用statmodels库
#import statsmodels.api as sm
import statsmodels.formula.api as sm
linear_model = sm.OLS(y,X)
results = linear_model.fit()
results.summary()
OLS Regression Results

3.使用公式推导
线性回归,即是使得如下目标函数最小化:

使用最小二乘法,不难得到β的估计:

从而,我们可以根据此公式,编写求解β^的函数。
from numpy import *
#########################
# 定义相应的函数进行矩阵运算求解。
def standRegres(xArr, yArr):
xMat = mat(xArr)
yMat = mat(yArr).T
xTx = xMat.T * xMat
if linalg.det(xTx) == 0.0:
print "this matrix is singular, cannot do inverse!"
return NA
else :
ws = xTx.I * (xMat.T * yMat)
return ws
# test
x0 = np.ones((150,1))
x0 = pd.DataFrame(x0)
X0 = pd.concat([x0,X],axis = 1)
standRegres(X0,y)
matrix([[-0.36651405],
[ 0.41641913]])
结果一致。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
先回答:下半年能考的证书,大致分四类 2026年下半年仍有报名或考试安排的证书,主要集中在四个方向:财会金融类(如注册会计师 ...
2026-10-27毕业后该考什么证书,答案不是一张热门榜单,而是一个顺序问题:先确定你要投的岗位方向,再判断哪些证书现在就能报、哪些要等工 ...
2026-10-2734岁考证,和二十多岁刚毕业时不是同一道题。这个年龄找工作,招聘方通常已经默认你有十年上下的工作积累,会拿“经验能不能直接 ...
2026-10-27咨询岗位最该优先掌握的不是某个工具,而是四类能串起项目全流程的能力:问题定义与结构化拆解、指标与对比分析、数据获取与清洗 ...
2026-10-27多数咨询岗位需要一定程度的数据分析能力,但“需要”不等于“必须会写代码或建模型”。咨询顾问至少要能看懂客户给的数据、把业 ...
2026-10-27咨询岗位的分析能力,不是“会套框架”或“PPT写得漂亮”,而是一条从问题到结论的能力链:问题拆解—假设验证—信息获取—数据 ...
2026-10-27需要,而且它不是“加分项”,是日常工作的基本工具。直播运营每天要面对选品排期、流量承接、转化复盘和投流决策,这些任务的结 ...
2026-10-27证券分析师的培训需求,最好从“最终要交什么”往回推。日常输出大致四类:行业跟踪报告、财报拆解与盈利预测、估值模型、路演与 ...
2026-10-27先给答案:一张四层知识地图 如果只用一句话回答“证券分析师最重要的知识是什么”,答案是:以财务分析和估值建模为硬核,以行 ...
2026-10-27市场策划不是“会写文案、能办活动”这么简单。招聘方真正考察的,是你能否围绕一个业务目标,完成从调研、人群判断、创意主题、 ...
2026-10-27市场运营想靠学习推动职业发展,容易掉进两个坑:一是把课程清单当能力清单,学完不知道用在哪;二是只补营销方法,遇到渠道效果 ...
2026-10-27产品运营做久了,很容易陷入一种忙碌:活动一场接一场,功能推了一版又一版,日报周报天天写,但说不清自己到底积累了什么。想提 ...
2026-10-27运营岗的“快速提升”,不是把Excel、SQL、Python挨个学一遍,而是先补上能立刻改变工作产出的能力。判断标准很直接:同样一场活 ...
2026-10-27优秀市场专员的能力不是单点技能堆出来的,而是“用户洞察—内容与活动策划—渠道获客—数据复盘”四块形成闭环。想快速上手,正 ...
2026-10-27运营专员的“通用知识”,不是一份越长越好的工具清单,而是能支撑日常任务判断的一套底盘。不同细分方向差异很大:用户运营更关 ...
2026-10-27运营专员最常见的困境不是不忙,而是忙完之后说不清效果:活动做了、内容发了、社群拉了人,汇报时却只有“曝光多少、入群多少” ...
2026-10-27运营经理提升职业知识,靠的不是多报几门课,而是先有一张自己的“知识地图”,再按当前岗位最卡壳的环节排顺序。比较实用的做法 ...
2026-10-27运营岗位的能力素质提升,核心不是把工具学一遍,而是围绕“目标拆解—用户洞察—执行落地—数据复盘”四层能力逐层补齐。工具是 ...
2026-10-27运营岗位的能力提升,最容易走成两条弯路:一是把“提升”等同于学工具,Excel、SQL、Python挨个报班,回到工作里还是凭经验拍脑 ...
2026-10-27运营岗最容易陷入的学习误区,是把“提升”等同于收藏平台玩法、追热点模板、背活动话术。这些内容有用,但迁移性差:换个行业、 ...
2026-10-27