最大似然估计和最小二乘法 含代码

        

目录

一、最小二乘法

二、最大似然估计

三、解决非线性回归问题

四、代码 

 五、总结

最大似然估计和最小二乘法的区别:

最大似然估计和最小二乘法的联系:


        最大似然估计和最小二乘法是机器学习中经常用到的两种方法,它们既有区别又有千丝万缕的联系,而且容易搞混,今天我们以简单的线性回归为例(简单到没有偏执,只有权重w),简单介绍一下两种算法。

639ca677c7364047a7840d279b9bebab.png

一、最小二乘法

        使用最小二乘法解决线性回归问题,我们需要确定参数w,使估计值和观测值之差的平方和最小,其推导过程如下:

               (1)

        很显然上式是凸函数,我们要让误差L最小,只需要让L对w的一阶导数等于0,解方程:

                 (2)

                                                 (3)

二、最大似然估计

        我们使用最大似然估计解决线性回归问题,需要确定参数w,使得从模型中抽取该n组样本观测值的概率最大,也就是概率分布函数或者说是似然函数最大.因此最大似然估计需要已知这个概率分布函数。 

        在现实中,通过线性拟合,我们基本不可能让直线精确无误的通过每一个样本点,使得拟合出来的直线的误差为0。因为样本数据本身是带有噪声的,带有随机性的。似然估计假设真的实际存在一条线能完美的反应实际的数据分布(这就是所谓的分布假设),而数据之所以没有全部在这条线上,是观测误差,我们可以假设这个误差符合高斯分布。

        直观点说,我们看最上面那幅图,所有的样本点都围绕着直线上下,在直线附近上下夹杂着这种随机的噪声。那么意味着:拟合出来的直线代表了样本数据的确定性,而拟合值和观测值之间的误差,也可以称之为是噪声,则代表了随机性。这种带有随机性的噪声我们就可以用符合某个分布的随机变量来描述,比如高斯分布。

        首先假设线性回归模型如下:

                                                (4)

        其中误差 ,也就是说,用最大似然估计推导如下,要做的是最大化Q:

(5)

        因为上式中第二项没有参数w,所以可以舍掉,简化得到如下式子:

        

         要做的是最小化上面的L,这就得出了(1)式,和最小二乘法一样了。

三、解决非线性回归问题

        其实,就算不是线性回归问题,分布假设叠加上高斯噪声的最大似然估计和最小二乘估计也是等价的。

        分布假设叠加上高斯噪声公式如下:

        似然函数是:

        因为 ,所以得到:

 

        去掉后面不包含的两项, 做后得出一最小二乘法相同的式子:

四、代码 

        我们已经波士顿房价数据集为例,根据历史房价数据建立回归模型,预测不同类型房屋的价格。数据集链接:http://t.csdn.cn/t5VcH

import pandas as pd
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression,Lasso,ElasticNet
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
import seaborn as sn

data = pd.read_csv("HousingData.csv")#读取csv
y = data['MEDV'] # 标签-房价
X = data.drop(['MEDV'], axis=1) #去掉标签(房价)的数据子集
# X_train为训练数据, y_train为训练集标签,X_test为测试数据,y_test为测试集标签。
# 抽取70%的数据作为训练集, 用剩余样本进行分类结果测试。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
scaler=preprocessing.StandardScaler().fit(X_train)
# Z-score标准化,在训练集上训练,在训练集与测试集上标准化,泛化时标准化也用训练集上的训练结果。
X_train=scaler.transform(X_train)
X_test=scaler.transform(X_test)
# 模型构建\训练\预测\评价
lr = LinearRegression() #实例化一个线性回归对象
lr.fit(X_train, y_train) #采用fit方法,拟合回归系数和截距
print(lr.intercept_)   #输出截距
print(lr.coef_)   #输出系数   可分析特征的重要性以及与目标的关系
y_pred = lr.predict(X_test)#模型预测
print("R2=", r2_score(y_test, y_pred))#模型评价, 决定系数
#print("mse=",mean_squared_error(y_test, y_pred))#均方误差
#print(lr.intercept_)  #输出截距
#print(lr.coef_)  #系数
# 可视化
plt.plot(y_test.values, c="r", label="y_test")
plt.plot(y_pred, c="b", label="y_pred")
plt.legend()
plt.show()

 五、总结

最大似然估计和最小二乘法的区别:

        1.最大的不同在于思想不同,最小二乘法通过缩小预测值和观测值得距离来确定参数;最大似然估计通过最大化观测值出现的概率来确定参数。
        2.最大似然估计是需要有分布假设的,属于参数统计;而最小二乘法则没有这个假设。
        3.最小二乘法是一个凸优化问题,最大似然估计不一定是。

最大似然估计和最小二乘法的联系:

        1.两者都把估计问题变成了最优化问题。
        2.对于噪声符合高斯分布的数据,使用最小二乘法和最大似然估计是等价的。

<think>好的,用户想了解如何在MATLAB中使用最小二乘法最大似然估计在通信信道中的应用,并且需要示例代码。我需要先理清楚这两个方法的基本概念在通信中的常见应用场景。 首先,最小二乘法(Least Squares, LS)通常用于参数估计,尤其是在有噪声的情况下,通过最小化误差平方来找到最佳拟合。在通信信道中,可能用于信道估计,比如根据接收到的信号已知的导频序列来估计信道响应。 最大似然估计(Maximum Likelihood Estimation, MLE)则是通过最大化似然函数来估计参数,适用于已知噪声分布的情况,比如高斯噪声。在通信中,MLE可以用于信号检测,比如在接收端判断发送的是哪个符号,或者在信道估计中更精确地估计参数。 接下来,我需要考虑如何在MATLAB中实现这两种方法。对于最小二乘法,可能需要构造一个线性模型,使用矩阵运算来求解。比如,假设接收信号是信道矩阵发送信号的乘积加上噪声,那么通过伪逆来求解信道系数。 对于MLE,可能需要根据噪声的分布(通常是高斯)构建似然函数,然后通过优化算法(如梯度下降、牛顿法)或者直接求解导数为零的方程来找到最大似然估计值。在简单的例子中,比如估计信道增益,可以直接用接收信号的平均值作为估计值,假设噪声是零均值的。 然后,用户需要示例代码。我需要确保代码简洁,并且有注释说明每一步的作用。比如,对于LS,生成发送信号,添加信道响应噪声,然后用LS方法估计信道系数。对于MLE,可能需要生成多个样本,计算样本均值作为估计值。 另外,用户提到的引用中有关于盲估计的内容,可能涉及到在没有先验信息的情况下估计信号噪声功率。但用户的问题更偏向于具体的信道应用,比如信道估计信号检测,所以示例可能需要集中在这些方面。 需要注意MATLAB的矩阵操作,比如矩阵的转置、逆运算,以及如何生成随机信号噪声。同时,可能需要使用到MATLAB的优化工具箱,但对于MLE的简单情况,可能不需要复杂的优化函数。 最后,验证代码的正确性。例如,在LS方法中,估计的信道系数应该接近真实值,尤其是在噪声较小时。对于MLE,当样本数足够多时,估计值应趋近于真实值。 可能还需要考虑不同调制方式下的应用,比如QPSK,但为了简化示例,可能使用BPSK或者简单的实数信号。此外,是否需要考虑多径信道或单径信道?在示例中,可能先以单径信道为例,保持简单。 总结步骤: 1. 生成发送信号(例如随机BPSK符号) 2. 通过信道(乘以信道增益并添加高斯噪声) 3. 使用LS估计信道增益 4. 使用MLE估计信道增益(在高斯假设下,MLE与LS可能相同) 或者,对于信号检测,使用MLE进行符号判决。 可能需要区分两种应用:信道估计信号检测。在示例中,可能分别给出两个例子。 比如,LS用于信道估计,MLE用于信号检测。或者两者都用于信道参数估计,但方法不同。 例如,LS信道估计示例: 发送已知导频序列,接收端通过LS估计信道响应。 MLE示例:在已知噪声分布的情况下,估计发送符号的概率,并选择最大似然的符号作为检测结果。 现在,编写代码框架: 对于LS信道估计: - 生成导频序列X - 接收信号Y = H*X + N - H_hat = Y * X' / (X * X') 或者用矩阵伪逆 对于MLE符号检测: - 假设发送符号是BPSK,+1或-1 - 接收信号Y = H*s + N - 对每个可能的s,计算似然函数,选择最大者 或者,MLE用于信道估计: - 假设H的真实值,通过最大化似然函数得到H的估计,可能结果与LS相同,因为在高斯噪声下,MLE等价于LS。 可能需要解释在什么情况下LSMLE会得到相同的结果,比如高斯噪声时,LS等价于MLE。 因此,在示例中,可以展示这两种情况,或者说明它们的联系。 最后,确保代码正确,并添加必要的注释输出结果,比如估计值与真实值的比较。</think>以下是通过MATLAB实现最小二乘法最大似然估计在通信信道中的应用的示例代码及原理说明: --- ### **一、最小二乘法(LS)在信道估计中的应用** 假设信道模型为 $y = Hx + n$,其中 $H$ 为信道增益,$n$ 为高斯噪声。通过已知的发送信号 $x$ 接收信号 $y$,利用最小二乘法估计 $H$。 ```matlab % 生成发送信号(导频序列) N = 1000; % 导频符号数量 x = randi([0,1], N, 1)*2 -1; % BPSK调制,生成±1序列 % 真实信道参数 H_true = 0.8 + 0.1j; % 复信道增益 % 添加高斯噪声 SNR_dB = 20; % 信噪比 noise_power = 10^(-SNR_dB/10); n = sqrt(noise_power/2)*(randn(N,1) + 1j*randn(N,1)); % 接收信号 y = H_true * x + n; % 最小二乘估计 H_LS = (x' * y) / (x' * x); % 公式: Ĥ = (X^H X)^{-1} X^H Y % 显示结果 disp(['真实信道增益: ', num2str(H_true)]); disp(['LS估计值: ', num2str(H_LS)]); ``` **输出示例**: ``` 真实信道增益: 0.8+0.1i LS估计值: 0.7985+0.0993i ``` --- ### **二、最大似然估计(MLE)在信号检测中的应用** 假设接收信号 $y = Hs + n$,发送符号 $s \in \{+1, -1\}$,噪声 $n \sim \mathcal{N}(0, \sigma^2)$。通过MLE判断发送符号。 ```matlab % 生成单次传输信号 H = 0.5; % 信道增益(实数简化) s_true = (rand > 0.5)*2 -1; % 随机生成±1符号 % 添加高斯噪声 SNR_dB = 10; noise_power = 10^(-SNR_dB/10); n = sqrt(noise_power)*randn; % 接收信号 y = H * s_true + n; % 最大似然检测 s_candidates = [1, -1]; % 候选符号 likelihood = exp(-abs(y - H*s_candidates).^2 / (2*noise_power)); % 高斯似然函数 [~, idx] = max(likelihood); % 选择最大似然对应的符号 s_MLE = s_candidates(idx); % 显示结果 disp(['真实符号: ', num2str(s_true)]); disp(['MLE检测符号: ', num2str(s_MLE)]); ``` **输出示例**: ``` 真实符号: -1 MLE检测符号: -1 ``` --- ### **三、联合应用:基于导频的信道估计与均衡** 结合LSMLE,先估计信道参数,再用于信号检测: ```matlab % 生成导频序列 N_pilot = 100; x_pilot = randi([0,1], N_pilot, 1)*2 -1; % 真实信道参数 H_true = 0.7 + 0.2j; % 接收导频信号(噪声) y_pilot = H_true * x_pilot + sqrt(0.01)*(randn(N_pilot,1)+1j*randn(N_pilot,1)); % LS信道估计 H_LS = (x_pilot' * y_pilot) / (x_pilot' * x_pilot); % 生成数据符号并传输 N_data = 1000; s_data = randi([0,1], N_data, 1)*2 -1; y_data = H_true * s_data + sqrt(0.01)*(randn(N_data,1)+1j*randn(N_data,1)); % 使用估计的H进行MLE检测 s_estimated = sign(real(y_data / H_LS)); % 简化检测(实数域) % 计算误码率 BER = sum(s_estimated ~= s_data) / N_data; disp(['误码率: ', num2str(BER)]); ``` --- ### **四、关键原理说明** 1. **最小二乘法**:通过最小化误差平方 $ \min \| y - Hx \|^2 $ 估计信道参数,适合线性模型且计算高效[^2]。 2. **最大似然估计**:假设噪声服从高斯分布时,MLE等价于最小二乘估计;在信号检测中通过最大化似然函数选择最可能的符号[^2]。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小殊小殊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值