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

        

目录

一、最小二乘法

二、最大似然估计

三、解决非线性回归问题

四、代码 

 五、总结

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

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


        最大似然估计和最小二乘法是机器学习中经常用到的两种方法,它们既有区别又有千丝万缕的联系,而且容易搞混,今天我们以简单的线性回归为例(简单到没有偏执,只有权重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.对于噪声符合高斯分布的数据,使用最小二乘法和最大似然估计是等价的。

  • 20
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
极大似然估计是一种参数估计方法,其基本思想是在给定数据的情况下,通过最大化似然函数来确定模型的参数。在多项式拟合问题中,我们可以将其视为一个线性回归问题,使用最小二乘法来求解。 具体步骤如下: 1. 假设多项式的形式为 f(x) = a0 + a1*x + a2*x^2 + ... + an*x^n,其中n为多项式的次数。 2. 根据极大似然估计的思想,我们可以假设数据点的噪声服从高斯分布,即 yi = f(xi) + εi,其中εi为均值为0,方差为σ^2的高斯白噪声。因此,我们可以写出似然函数: L(a0, a1, ..., an) = ∏[i=1]^n (1 / sqrt(2πσ^2)) * exp(-(yi - f(xi))^2 / (2σ^2)) 3. 将似然函数取对数,并将多项式展开,得到: log L(a0, a1, ..., an) = -n/2 * log(2πσ^2) - ∑[i=1]^n (yi - (a0 + a1*xi + a2*xi^2 + ... + an*xi^n))^2 / (2σ^2) 4. 对上式求导,将导数置为0,得到: ∑[i=1]^n (yi - (a0 + a1*xi + a2*xi^2 + ... + an*xi^n)) * xi^j = 0,其中j为0到n 5. 将上式表示成矩阵形式,得到: AX = Y,其中A是一个n*(n+1)的矩阵,X是一个(n+1)*1的矩阵,Y是一个n*1的矩阵 6. 通过最小二乘法求解X,得到多项式的系数。 具体实现请见以下Python代码: ```python import numpy as np def poly_fit(x, y, order): A = np.zeros((len(x), order+1)) for i in range(order+1): A[:, i] = np.power(x, i) Y = y.reshape(-1, 1) X = np.linalg.inv(A.T @ A) @ A.T @ Y f = lambda x: sum([X[i] * np.power(x, i) for i in range(order+1)]) return f ``` 使用该函数,我们可以得到一个可求解f(x)的函数。例如: ```python x = [1, 2, 3, 4, 5] y = [4, 1, 2, 3, 5] f = poly_fit(x, y, 4) print(f(2.5)) ``` 输出结果为2.486,表示f(2.5)约等于2.486。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小殊小殊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值