对数几率回归Logistic Regression(Matlab)

这里的数据均来源于吴恩达老师机器学习的课程

       上一篇内容是线性回归,利用线性模型进行回归学习,最终结果是找到一组合适的theta值,使代价函数的值最小,可是对于分类任务该如何解决呢?其实也是希望学习到的也是一组满足这种条件的theta。

       先从简单的二分类问题考虑,比如从两门考试的成绩x1,x2,判断录取与否。对于结果y只有两种取值,,录取时y=1,不录取y=0.这时候,如果还像之前那怎样直接相乘算出预测值就不太合适了,因为此时需要把预测值的范围控制在[0,1],想要做到这一点,可以利用sigmoid函数,对数几率函数(logistic function)是sigmoid函数的重要代表。也就是说,要找到一组theta,在预测函数是这个样子的条件下,代价函数值最小。

      总的来说,方法没有变,只是改了预测函数的形式。

二分类

data = load('ex2data1.txt');
X = data(:, [1, 2]); y = data(:, 3);
figure; hold on;
pos=find(y==1);
neg=find(y==0);
plot(X(pos,1),X(pos,2),'k+','LineWidth',2,'MarkerSize',7);
plot(X(neg,1),X(neg,2),'ko','MarkerFaceColor','y','MarkerSize',7);
% Labels and Legend
xlabel('Exam 1 score')
ylabel('Exam 2 score')
hold off;
[m, n] = size(X);
% Add intercept term to x and X_test
X = [ones(m, 1) X];
% Initialize fitting parameters
initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 400);
[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
%plot decision boundary
hold on;
if size(X, 2) <= 3
    % Only need 2 points to define a line, so choose two endpoints
    plot_x = [min(X(:,2))-2,  max(X(:,2))+2];
    % Calculate the decision boundary line
    plot_y = (-1./theta(3)).*(theta(2).*plot_x + theta(1));
    plot(plot_x, plot_y)
    % Legend, specific for the exercise
    legend('Admitted', 'Not admitted', 'Decision Boundary')
    axis([30, 100, 30, 100])
else
    % Here is the grid range
    u = linspace(-1, 1.5, 50);
    v = linspace(-1, 1.5, 50);
    z = zeros(length(u), length(v));
    % Evaluate z = theta*x over the grid
    for i = 1:length(u)
        for j = 1:length(v)
            z(i,j) = mapFeature(u(i), v(j))*theta;
        end
    end
    z = z'; 
    contour(u, v, z, [0, 0], 'LineWidth', 2)
end
hold off;

%costFunction.m
function [J, grad] = costFunction(theta, X, y)
m = length(y); % number of training examples
J = 0;
grad = zeros(size(theta));
h=1.0./(1.0+exp(-1*X*theta));
m=size(y,1);
J=((-1*y)'*log(h)-(1-y)'*log(1-h))/m;
for i=1:size(theta,1),
    grad(i)=((h-y)'*X(:,i))/m;
end
end

二分类的决策边界不总是直线的,这取决于你的假设函数。例如,当给出的训练数据是这样的:

简单的特征x1,x2,就不能满足了,需要做个映射。


这样就可以很好的分类了。


多分类

二分类问题也可以推广到多分类问题,例如有A,B,C三类,可以训练出三组theta,对于theta1,训练数据的结果只有1-->A,0-->B,C,y预测结果也是[0,1],theta2,theta3,也是如此,最终判断归于是哪一类,就取这三个预测结果更大的那一类。就不累述了。


  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Logistic regressionMatlab中是用于分类问题的一种常用算法。通过使用Matlab自带的数据库,并使用logistic regression算法进行训练,可以得到一个准确率为96%的模型。 Logistic regression和Linear regression都是回归算法,但它们解决的问题类型不同。Linear regression用于解决连续的预测和拟合问题,而Logistic regression用于解决离散的分类问题。然而,它们的本质是相似的,都可以被看作是指数函数族的特例。 在Matlab中,可以使用梯度下降算法来实现logistic regression。以下是一个使用梯度下降算法实现logistic regression的示例代码: ``` def gradientdescentlogistic(theta,alpha,iterations,X,y,m): J_h=np.zeros((iterations,1)) for i in range (0,iterations): h_x=1/(1+np.exp(-np.dot(X,theta))) theta=theta-alpha*np.dot(X.transpose(),(h_x-y)) J=-sum(y*np.log(h_x) + (1-y)*np.log(1-h_x))/m J_h[i,:]=J ``` 这段代码定义了一个梯度下降的函数gradientdescentlogistic,其中theta表示参数,alpha表示学习率,iterations表示迭代次数,X表示特征矩阵,y表示标签,m表示样本数量。代码中h_x表示预测值,J表示损失函数。函数会根据给定的参数和数据进行迭代计算,更新参数theta,并返回损失函数J的历史值。 总结来说,logistic regressionMatlab中是一种用于分类问题的算法,可以使用梯度下降等方法进行实现和训练。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Logistic Regression with matlab](https://download.csdn.net/download/weixin_44280798/10964552)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [logistic regression(Python实现以及MATLAB实现)](https://blog.csdn.net/qq_20406597/article/details/80088702)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值