基于最大似然估计(matlab实验)

实验内容

1、了解分类和逻辑回归的技术原理,给出满足分类问题的假设函数形式,通过最大似然函数估计推导出新的代价函数
2、针对二分类问题,采用matlab编程,得到分类结果,实验通过程序,分析,加深对逻辑回归分类问题的理解

实验原理

1、分类问题中,由于y是离散值且y∈{0,1},则假设函数满足0≤hθ(x)≤1,因此选择:
在这里插入图片描述

2、对hθ(x)输出作进一步解释,hθ(x)是根据输入x得到的y=1或者(y=0)的可能性。因此假设:
在这里插入图片描述

3、假设m组训练试验是相互独立的,得到似然估计函数:
在这里插入图片描述

4、最大似然函数:
在这里插入图片描述

5、代价函数:
在这里插入图片描述

6、通过批梯度下降,同时更新所有的θj:其中α是学习率
在这里插入图片描述

数据集

链接:https://pan.quark.cn/s/54f8b6d8f1df
提取码:4UwS
第一、二列是入学前考试的成绩,第三列为是否可以入学:1(可以),2(不可以)
在这里插入图片描述

实验过程:

1、划分数据集,并展示训练数据集

>> data = load('E:/桌面/成绩单.txt');
>> X = data(:,1:2);
>> y = data(:,3);
>> [h,w] = size(train_data);
>>  for i=1:h
		if train_data(i,3)==1
			scatter(train_data(i,1),train_data(i,2),'g*');grid on;hold on;
		else
			scatter(train_data(i,1),train_data(i,2),'r.');grid on;hold on;
		end
	end

在这里插入图片描述

2、利用梯度下降算法求解最小的J和theta

%利用梯度下降的算法求解出最小的J和theta
>> alpha = 0.001;%学习率
>> [m,n] = size(X);
>> X = [ones(m,1) X];%特征矩阵
>> initial_theta = zeros(n+1,1);%初始化theta
>> prediction = X*initial_theta;%初始化预测
>> logistic = 1./(1+exp(-prediction));%逻辑函数
>> sqrError = (logistic-y)'*X;%均方误差
>> theta = initial_theta-alpha*(1/m)*sqrError';
>> couverg = (1/m)*sqrError';%J(theta)求导,用于判断是否达到最低点
>> J = -1*sum(y.*log(logistic)+(1-y).*log((1-logistic)))/m;%代价函数
>> a = 1;
>> Boolean = zeros(size(X,2),1);
%在最低点处退出循环,即导数为0
%while all(couverg(:)~=Boolean(:))
>> while a ~= 40000000
    prediction2 = X*theta;
    logistic1 = 1./(1+exp(-prediction2));
    sqrError2 = (logistic1-y)'*X;
    J = -1*sum(y.*log(logistic1)+(1-y).*log(1-logistic1))/m;
    theta = theta - alpha*(1/m)*sqrError2';
    couverg = (1/m)*sqrError2';
    a = a+1;
    end

解的J:
在这里插入图片描述

解得theta:

在这里插入图片描述

3、预测结果:

%预测某个学生的成绩为[45,90],求被录取的概率
>> pre1 = logsig([1 45 90]*theta)*100;
>> pre1

pre1 =

    99.93
    
%预测某个学生的成绩为[45,45],求被录取的概率    
>> pre2 = logsig([1 45 45]*theta)*100;
>> pre2

pre2 =

 	2.73

4、实验总结:
在逻辑分类的代价函数的推导过程中使用了最大似然估计,但最大似然估计求的是最大值,而代价函数求得是最小值,因此只差一个负号,这里的代价函数其实是一个交叉熵。除了梯度下降算法,还可以使用BFGC(变换度法)、L-BFGS(限制变尺度法),这些算法的优点是可以自动选取好得学习率,通常比下降算法要快的多,但也比较复杂。

最大似然估计Matlab算法可以通过使用Matlab函数来实现。一个常用的函数是"my_mle"函数,它可以用于估计参数的最大似然估计值。该函数的输入参数包括一个函数句柄(fun)、初始参数(para0)和其他可选参数(varargin)。函数的输出包括估计的参数(para)、标准差(standard_deviation)和似然函数值(fv)。\[1\] 另外,最大似然估计Matlab实现还可以使用网格搜索法和Newton-Raphson迭代法。网格搜索法通过在一定范围内以固定间隔递增的方式搜索参数的最大似然估计值。而Newton-Raphson迭代法则通过求解对数似然函数的导数为零的方程来获得参数的估计值。该方法通过迭代计算,不断更新猜测值,直到收敛到真实的估计值。\[2\] 总结起来,最大似然估计Matlab算法可以通过使用"my_mle"函数、网格搜索法和Newton-Raphson迭代法来实现。这些方法可以帮助我们获得参数的最大似然估计值,并用于解决复杂的估计问题。\[1\]\[2\] #### 引用[.reference_title] - *1* *3* [matlab最大似然估计](https://blog.csdn.net/weixin_28744423/article/details/115845590)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [最大似然估计matlab实现](https://blog.csdn.net/weixin_30298733/article/details/116044034)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值