【python机器学习】——线性回归算法

线性回归

线性回归基本概念

线性回归是一种预测模型,它用于分析两个或多个变量之间的关系。在简单的线性回归中,我们通常有一个目标变量(称为响应变量或因变量)和一个或多个预测变量(称为解释变量或自变量)。目标是找到一条直线(在多元情况下是超平面),使得这条直线尽可能地拟合数据点,即最小化预测值和实际值之间的差异。

线性回归的基本原理是通过最小化误差平方和来寻找最佳拟合直线。误差平方和是每个数据点到直线的距离(即预测值和实际值之间的差异)的平方的总和。在二维空间中,这条直线可以表示为y = ax + b的形式,其中a是斜率,b是截距。

线性回归的主要步骤包括:

数据收集:收集相关的输入变量(自变量)和目标变量(因变量)的数据。
数据预处理:包括数据清洗、异常值处理、特征选择等。
模型拟合:使用最小二乘法或其他方法来找到最佳拟合直线的参数a和b。
模型评估:使用诸如均方误差(MSE)的指标来评估模型的性能。
预测:使用模型对新数据进行预测。

线性回归的一个重要假设是数据点之间存在线性关系,即响应变量可以被解释变量线性预测。

简单线性回归

简单线性回归模型的数学表达式为:

y = a * x + b

其中:

y 是因变量(目标变量)
x 是自变量(预测变量)
a 是斜率,表示自变量x每变化一个单位,因变量y预期的平均变化量
b 是截距,表示当自变量x为0时,因变量y的值

机器学习中的最优解

Actual value:真实值,即已知的y
Predicted value:预测值,是把已知的x 带入到公式里面和猜出来的参数a,b 计算得到的
Error:误差,预测值和真实值的差距
最优解:尽可能的找到一个模型使得整体的误差最小,整体的误差通常叫做损失Loss
Loss:整体的误差,loss 通过损失函数loss function 计算得到
MSE,即均方误差(Mean Squared Error),是统计学中用于衡量模型预测值与实际观测值之间差异的一个常用的性能评价指标。它衡量的是预测值与实际值之间差的平方的平均值,计算公式如下:
在这里插入图片描述

中心极限定理

中心极限定理(Central Limit Theorem, CLT)是概率论和统计学中的一个重要定理。它描述了以下现象:当我们从任意的总体中随机抽取足够大的样本,并计算这些样本的均值,这些均值的分布将随着样本容量的增加趋于一个正态分布,无论原始总体的分布如何。

具体来说,中心极限定理的几个关键点包括:

  1. 总体分布的任意性:总体的分布可以是任意的,无论它是正态的、偏态的、连续的还是离散的
  2. 样本均值:我们关心的是随机样本的均值的分布,而不是单个观测值的分布。
  3. 足够大的样本大小:样本大小需要足够大。没有明确的标准来界定“足够大”,但一般来说,样本容量n至少需要达到30,根据不同的总体分布,这个数字可能需要更高。
  4. 正态趋势:随着样本大小的增加,样本均值的分布逐渐接近正态分布。

正态分布,也称高斯分布,是一种连续概率分布。它的概率密度函数(PDF)呈钟形曲线,两侧对称。正态分布是最常见的分布之一,在很多自然和社会现象中都有体现。在这里插入图片描述以下是正态分布的几个关键特性:

  1. 钟形曲线:正态分布的PDF图形呈钟形,这意味着它有一个峰值,并且两边的尾巴逐渐减小,但永远不会触及x轴。
  2. 对称性:正态分布是对称的,这意味着均值位于分布的中心,两侧的面积相等。
  3. 68-95-99.7规则:大约68%的数据值分布在距离均值一个标准差的范围内,约95%在两个标准差内,而约99.7%在三个标准差内。
    下图为正态分布示意图:
    在这里插入图片描述其中μ为期望,σ2 是分布的方差。方差越小,表现在图中越瘦高,方差越大,表现在图中越矮胖。

最大似然估计简介

最大似然估计(Maximum Likelihood Estimation,MLE)是一种统计学方法,用于估计一个概率模型的参数。MLE的基本思想是找到一组参数,使得在这组参数下,观察到的数据出现的概率最大。

具体来说,假设我们有一个概率模型,其概率分布由参数θ决定。我们观察到了一组数据X={x1, x2, …, xn},我们希望找到参数θ的值,使得这组数据出现的概率最大。
在MLE中,我们通常使用对数似然函数来简化计算。对数似然函数定义为:

L(θ) = ln(P(X|θ)) = Σ ln(P(xi|θ))

其中,P(X|θ)是给定参数θ下观察到数据X的概率,P(xi|θ)是给定参数θ下观察到数据xi的概率。

我们的目标是找到使得L(θ)最大的θ值,即:

θMLE = argmaxθ L(θ)

通常,我们可以通过求导数并令导数等于0来找到θMLE。这样,我们就可以得到θ的估计值。

MLE是一种非常强大的方法,它可以用于估计各种概率模型的参数,如正态分布、二项分布、泊松分布等。然而,MLE也有一些局限性,比如它可能对异常值比较敏感,而且在数据量较少的情况下可能不太稳定。

概率密度函数

概率密度函数(Probability Density Function,PDF)是概率论和统计学中的一个重要概念,主要用于连续随机变量。它描述了一个连续随机变量在某个确定的取值点附近的概率密度,即在这一点附近取值的概率有多大。

具体来说,对于连续随机变量XX,其概率密度函数f(x)f(x)具有以下性质:

  1. f(x)≥0:概率密度函数的值非负。
  2. ∫−∞+∞​f(x)dx=1:在整个定义域内,概率密度函数的总面积(积分)为1,这反映了随机变量取所有可能值的总概率为1。
    对于任意两个实数aa和bb(a<ba<b),随机变量XX在区间[a,b][a,b]内取值的概率可以通过概率密度函数来计算,即:

在这里插入图片描述

这里的积分可以理解为概率密度函数在区间[a,b]下的面积。

常见的连续概率分布,如正态分布、均匀分布、指数分布等,都有各自特定的概率密度函数。
最常见的连续概率分布是正态分布,其概率密度函数如下:
在这里插入图片描述随着参数μ和σ变化,概率分布也产生变化。
概率密度函数在机器学习和数据分析中有着广泛的应用,例如在参数估计、假设检验、模型建立和评估等方面。

正太分布的线性回归的最大总似然

正态分布(Normal distribution),也称高斯分布(Gaussian distribution),是统计学中非常重要的一个概率分布。线性回归是一种最常用的预测模型,用于建立自变量(解释变量)与因变量(响应变量)之间的线性关系。在线性回归分析中,通常假设因变量是正态分布的。

在正态分布的假设下,线性回归模型可以表述为:
在这里插入图片描述其中,Y 是因变量,X是自变量,β0是截距,β1 是斜率,而 ϵ 是误差项,它是一个随机变量,假设其服从正态分布,即 ϵ∼N(0,σ2)。

在最大总似然估计(Maximum Likelihood Estimation, MLE)中,我们寻找能够使得观测数据出现概率最大的参数值。对于正态分布的线性回归模型,最大总似然估计可以通过以下步骤进行:

  1. 设定模型参数的初始值。
  2. 计算每个观测值的似然函数。
  3. 对所有观测值计算似然函数的乘积。
  4. 找到使得这个乘积最大的参数值。
    具体地,对于正态分布,似然函数为:
    在这里插入图片描述正太分布假设下的最大似然估计函数可以写成如下:
    在这里插入图片描述

python代码求线性回归算法模型

依据线性回归原理求解

θ求解公式如下
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

#创建用于训练的x值,一维数组
X = 2 * np.random.rand(100, 1)
print(len(X))
print(X)
#模拟y值,需要y_hat +error
y = 5 + 4 * X + np.random.randn(100, 1)
#为求解截距项,给X矩阵加上一列全为1的X0
X_b = np.c_[np.ones((100,1)),X]
print(X_b)
#利用解析解公式求解θ,linalg.inv为求矩阵的逆
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
print(theta_best)
# 使用模型进行预测
X_new = np.array([[0],[2]])
X_new_b = np.c_[(np.ones((2, 1))), X_new]
print(X_new_b)
y_predict = X_new_b.dot(theta_best)
print(y_predict)

#绘图进行展示真实数据值和预测的模型
plt.plot(X_new,y_predict,'r-')
plt.plot(X, y, 'b.')
plt.axis([0, 2, 0, 15])
plt.show()

为保证数据一致以测试代码是否正确,可通过在代码最前面添加
np.random.seed(2)

依据sklearn实现

import numpy as np
from sklearn.linear_model import LinearRegression

X1 = 2 * np.random.rand(100, 1)
X2 = 2 * np.random.rand(100, 1)
X = np.c_[X1, X2]
y = 4 + 3 * X1 + 5 * X2 + np.random.randn(100, 1)
reg =LinearRegression()
reg.fit(X,y)
#打印截距项和参数
print(reg.intercept_,reg.coef_)
#新给定数据并预测结果
X_new = np.array([[0, 0],[2, 1],[2, 4]])
print(reg.predict(X_new))

总结

本文介绍了线性回归算法基本概念及python中如何实现,后续将继续介绍机器学习相关内容,下一节介绍梯度下降法

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值