当前位置:网站首页>最大似然估计和最小二乘法 含代码
最大似然估计和最小二乘法 含代码
2022-07-31 06:35:00 【小殊小殊】
目录
最大似然估计和最小二乘法是机器学习中经常用到的两种方法,它们既有区别又有千丝万缕的联系,而且容易搞混,今天我们以简单的线性回归为例(简单到没有偏执,只有权重w),简单介绍一下两种算法。
一、最小二乘法
使用最小二乘法解决线性回归问题,我们需要确定参数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.对于噪声符合高斯分布的数据,使用最小二乘法和最大似然估计是等价的。
边栏推荐
- 解决安装 Bun 之后出现 zsh compinit: insecure directories, run compaudit for list. Ignore insecure directorie
- Zabbix6.2惊喜发布!特别优化中大型环境部署的性能!
- 2704:寻找平面上的极大点
- 从入门到一位合格的爬虫师,这几点很重要
- 手把手教你开发微信小程序自定义底部导航栏
- Explain the example + detail the difference between @Resource and @Autowired annotations (the most complete in the entire network)
- Embedded system driver primary [2] - _ parameters and dependencies under the kernel module
- 2022.07.13_Daily Question
- LeetCode:952. 按公因数计算最大组件大小【欧拉筛 + 并查集】
- 2. (1) Chained storage of stack, operation of chain stack (illustration, comment, code)
猜你喜欢
熟悉而陌生的新朋友——IAsyncDisposable
2022.07.13_Daily Question
《白帽子说Web安全》思维导图
完美指南|如何使用 ODBC 进行无代理 Oracle 数据库监控?
Leetcode952. Calculate maximum component size by common factor
DAY18:XSS 漏洞
2022.07.12 _ a day
Postgresql source code learning (33) - transaction log ⑨ - see the overall process of log writing from the insert record
Embedded system driver primary [2] - _ parameters and dependencies under the kernel module
剑指offer(一)
随机推荐
The Ballad of Lushan Sends Lu's Servant to the Void Boat
把 VS Code 当游戏机
中断及pendSV
2022.07.29_Daily Question
R——避免使用 col=0
Chapter 17: go back to find the entrance to the specified traverse, "ma bu" or horse stance just look greedy, no back to search traversal, "ma bu" or horse stance just look recursive search NXM board
客户端navicat安装教程
强化学习科研知识必备(数据库、期刊、会议、牛人)
【Go语言刷题篇】Go完结篇函数、结构体、接口、错误入门学习
Zabbix6.2惊喜发布!特别优化中大型环境部署的性能!
2022.07.15_Daily Question
How to set the computer password?How to add "safety lock" to your computer
Leetcode952. Calculate maximum component size by common factor
2. (1) Chained storage of stack, operation of chain stack (illustration, comment, code)
【网络攻防】常见的网络攻防技术——黑客攻防(通俗易懂版)
2022.07.18 _ a day
03-SDRAM: Write operation (burst)
mysql的建表语句_三种常用的MySQL建表语句
Super detailed mysql database installation guide
Log4net 思维导图