连载|线性回归

简介: 连载|线性回归

线性模型|线性回归

基本形式

image.png

回归分析

回归分析是用来评估变量之间关系的统计过程,用来解释自变量x与因变量y之间的关系,即当自变量x发生改变时,因变量y会如何发生改变。


线性回归

线性回归是回归分析的一种,评估的自变量x和因变量y之间是一种线性关系。当只有一个自变量时,称为简单线性回归,当具有多个自变量时,称为多元线性回归。


对线性关系的理解:


  • 画出来的图像是直的。
  • 每个自变量的最高次项是1。


简单的线性回归我们可以直接表示成如下形式:

image.png

注:此时的自变量只有一个值。

多元线性回归有多个自变量的值,而对于每一个自变量x都有一个与其对应的参数w,我们可以把x和w表示出向量或者矩阵的形式,表示方法如下:

image.png

对于向量来说可以展开成下面的形式:

image.png

简单线性回归的代码展示如下

import numpy as np
# 线性回归函数
from sklearn.linear_model import LinearRegression
# 用于切分数据集
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
# 使用花瓣长和花瓣宽作为x,y
X, y = iris.data[:, 2].reshape(-1, 1), iris.data[:, 3]
lr = LinearRegression()
X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    test_size=0.25,
                                                    random_state=0)
lr.fit(X_train, y_train)
print("权重:", lr.coef_)
print("截距:", lr.intercept_)
y_hat = lr.predict(X_test)
print("拟合函数:", 'y={}x+{}'.format(lr.coef_[0], lr.intercept_))
import matplotlib.pyplot as plt
# mac下使用中文
plt.rcParams["font.family"] = 'Arial Unicode MS'
# win下使用中文
# plt.rcParams["font.family"] = 'SimHei'
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["font.size"] = 15
plt.figure(figsize=(10, 6), dpi=300)
plt.scatter(X_train, y_train, c='orange', label='训练集')
plt.scatter(X_test, y_test, c='blue', marker='D', label='测试集')
plt.plot(X, lr.predict(X), 'r-')
plt.legend()
plt.xlabel("花瓣长")
plt.ylabel("花瓣宽")
plt.figure(figsize=(15, 6), dpi=300)
plt.plot(y_test, label="真实值", color='r', marker='o')
plt.plot(y_hat, label="预测值", ls='--', color='g', marker='o')
plt.xlabel("测试集数据序号")
plt.ylabel("数据值")
plt.legend()

多元线性回归的代码如下:

import numpy as np
# 线性回归函数
from sklearn.linear_model import LinearRegression
# 用于切分数据集
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
# 使用鸢尾花的data和target作为x和y
X, y = iris.data, iris.target
lr = LinearRegression()
X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    test_size=0.25,
                                                    random_state=0)
lr.fit(X_train, y_train)
print("权重:", lr.coef_)
print("截距:", lr.intercept_)
y_hat = lr.predict(X_test)
print(
    "拟合函数:",
    'y={}x1+{}x2+{}x3+{}x4+{}'.format(lr.coef_[0], lr.coef_[1], lr.coef_[2],
                                      lr.coef_[3], lr.intercept_))

线性回归的损失函数

损失函数:

理论值于观测值之差(误差、残差)的平方和。

image.png

损失函数的求解

image.png

矩阵下最小二乘法的求解过程:

image.png

最小二乘法的求解代码

import numpy as np
import matplotlib.pyplot as plt
# 在直线 y = 5x+3 附近生成随机点
X = np.arange(0, 5, 0.1)
Z = [5 * x + 3 for  x in X]
Y = [np.random.normal(z, 0.5) for z in Z] 
plt.plot(X, Y, 'ro')
plt.show()
from scipy.optimize import leastsq
# 需要拟合的函数func :指定函数的形状
def func(p,x):
    k,b=p
    return k*x+b
# 误差函数:
def error(p,x,y):
    # yi-y
    return func(p,x)-y
# 设置函数的初始参数
p0=[1,20]
Para=leastsq(error,p0,args=(X,Y))
print(Para)
k,b=Para[0]
_X = [0, 5]  
_Y = [b + k * x for x in _X]
plt.plot(X, Y, 'ro', _X, _Y, 'b', linewidth=2)  
plt.title("y = {}x + {}".format(k, b))  
plt.show()


目录
打赏
0
0
1
1
16
分享
相关文章
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
870 0
必看!淘宝商品详情数据接口调用,助力商城上货实战全流程(仅供参考)
本文介绍了一个实战案例,通过调用淘宝商品详情数据接口,实现商品信息的自动获取与上架至自建电商平台。主要步骤包括需求分析、技术选型、接口调用、数据存储、自动上货及定时更新,旨在提升工作效率,减少人工操作。
豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!
在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大代替方案,结合其在通用编程方面的强大实力,完全可以只使用Python这一种语言去构建以数据为中心的应用程序。 作为一个科学计算平台,Python的成功源于能够轻松的集成C、C++以及Fortran代码。大部分现代计算机环境都利用了一些Fortran和C库来是西安线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。
|
11月前
IBSS、BSS和ESS之间的区别
【8月更文挑战第23天】
965 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问