回归模型的python实现

**导言:**回归(Regression)模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量)。
站在数据挖掘的角度看待线性回归模型,它属于一种有监督的学习算法,即在建模过程中必须同时具备自变量x和因变量y。
站在机器学习的角度看待线性回归模型,它与分簇、分类和标注任务不同,回归任务预测的不是有限的离散的标签值,而是无限的连续值。
在这篇文章中,讨论使用Python的sklearn、statsmodels模块实现一元线性回归、多元线性回归和非线性回归。

一、简单的一元线性回归

方法1:statsmodels模块
(1) 准备测试数据
例子:y = 2x + 随机数
在这里插入图片描述
(2) 模块的使用方法

import statsmodels.api as sm
df = pd.read_csv("1. 一元线性回归数据.csv")

x = df['x']
y = df['y']
# -----------------------------------------------
fit = sm.formula.ols('y~x', data=df).fit()
print(fit.params)
# [out]
# Intercept   -2.229703  # 截距
# x            2.776964  # 系数
# dtype: float64
# 输出截距和一次项系数

–“y~x”: 构建模型,此处为一元线性回归方程,变量y,x必须是已定义的。
–data=: 数据来源,即x, y的出处。
(3) 回归方程显示
在这里插入图片描述
方法2: scipy.optimize模块leastsq()函数
(1)该方法的原理是通过计算误差的最小值得到回归方程

from scipy.optimize import leastsq
import pandas as pd
import numpy as np
df = pd.read_csv("1. 一元线性回归数据.csv")
x = df['x'].values
y = df['y'].values

# 1. 首先需要构建回归模型
def f(p, x_):
    k, b = p
    return k * x + b

# 2. 误差公式,该方法的原理是通过计算误差的最小值得到回归方程
def error(p, x_, y_):
    return f(p, x_) - y_


p = np.array([0, 100])
# -----------------------------------------
para = leastsq(error, p, args=(x, y))	  #
# -----------------------------------------
print(para)
# [out]
# (array([ 2.7769637 , -2.22970297]), 3

输出:
(array([ 2.7769637 , -2.22970297]), 3)
(2)得到 k, b

k, b = Para[0]

二、 多元线性回归
(1) 多元线性回归的形式
y = a1x1 + a2x2 + ··· + anxn
(2) 例子:二元线性回归
数据:
y = 2×x1 + 3×x2 + 随机数
在这里插入图片描述
(3)statsmodels.api中formula.ols()实现

data_ = pd.read_csv("2. 多元线性回归方程数据.csv")
# print(data_.values)
x1 = data_["x1"]
x2 = data_["x2"]
y = data_["y"]
fit = sm.formula.ols('y~x1+x2', data=data_).fit()
b, a1, a2 = fit.params
print(a1, a2, b)

(4) 回归方程的拟合
在这里插入图片描述

三、 非线性回归
(1)将上述一中的方法2的回归模型修改即可
此处构建的回归模型为:
y = k×x^2+b

def f(p, x_):
    k, b = p
    return k * x**2 + b


def error(p, x_, y_):
    return f(p, x_) - y_

在这里插入图片描述

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值