zoukankan      html  css  js  c++  java
  • CS229作业之过拟合

    一、使用循环:

    1.1原始版逻辑回归:

        

    1 function g = sigmoid(z)
    2 g = zeros(size(z));
    3 g = 1 ./ (1 + exp(-z));
    4 end
     1 function [J, grad] = costFunction(theta, X, y)
     2 
     3 % Initialize some useful values
     4 m = length(y); % number of training examples
     5 
     6 J = 0;
     7 grad = zeros(size(theta));
     8 
     9 n = size(theta);
    10 gradtemp = 0;
    11 
    12 %compute costfunction
    13 for i = 1:m
    14   temp1 = y(i) * log(sigmoid(X(i,:) * theta)) + (1 - y(i)) * log(1 - sigmoid(X(i,:) * theta));
    15   J = J + temp1;
    16 endfor
    17 
    18 J = -(J / m);
    19 
    20 %compute grade
    21 for j = 1:n
    22   for i = 1:m
    23     temp2 = (sigmoid(X(i,:) * theta) - y(i)) * X(i,j);
    24     gradtemp = gradtemp + temp2;
    25   endfor
    26   gradtemp = gradtemp / m;
    27   grad(j) = gradtemp;
    28   gradtemp = 0;
    29 endfor
    30 
    31 end
     1 function p = predict(theta, X)
     2 
     3 m = size(X, 1); % Number of training examples
     4 
     5 p = zeros(m, 1);
     6 
     7 for i =1:m
     8   h = sigmoid(X(i,:) * theta);
     9   if h >= 0.5
    10     y = 1;
    11   else
    12     y = 0;
    13   endif
    14   p(i) = y;
    15 endfor
    16 
    17 end

    1.2正则化版逻辑回归:

     1 function [J, grad] = costFunctionReg(theta, X, y, lambda)
     2 
     3 % Initialize some useful values
     4 m = length(y); % number of training examples
     5 
     6 J = 0;
     7 grad = zeros(size(theta));
     8 
     9 n = length(theta)
    10 temp1 = 0;
    11 temp2 = 0;
    12 temp3 = 0;
    13 result1 = 0;
    14 result2 = 0;
    15 %compute costfunction
    16 for i = 1:m
    17   h = sigmoid(X(i,:) * theta)
    18   temp1 = y(i) * log(h) + (1 - y(i)) * log(1-h);
    19   result1 = result1 + temp1;
    20 endfor
    21 for j = 2:n
    22   temp2 = theta(j) * theta(j);
    23   result2 = result2 + temp2;
    24 endfor
    25 
    26 J = (-1 / m) * result1 + lambda / (2 * m) * result2;
    27 
    28 temp3 = 0
    29 temp4 = 0
    30 result3 = 0
    31 for i = 1:m
    32     h = (sigmoid(X(i,:) * theta))
    33     temp3 = (h - y(i)) * X(i,1);
    34     result3 = result3 + temp3;
    35 endfor
    36 grad(1) = (1 / m) * result3
    37 
    38 
    39 
    40 %compute grade
    41 for j = 2:n
    42   result4 = 0;
    43   for i = 1:m
    44     h = (sigmoid(X(i,:) * theta))
    45     temp4 = (h - y(i)) * X(i,j);
    46     result4 = result4 + temp4;
    47   endfor
    48   grad(j) = (1 / m) * result4 + (lambda / m) * theta(j)
    49 endfor
    50 
    51 end

    二、矩阵向量方式整体运算:

    2.1原始版逻辑回归:

    1 function g = sigmoid(z)
    2 
    3 g = zeros(size(z));
    4 
    5 g = 1 ./ (1 + exp(-z));
    6 
    7 end
     1 function [J, grad] = costFunction(theta, X, y)
     2 % Initialize some useful values
     3 m = length(y); % number of training examples
     4 
     5 J = 0;
     6 grad = zeros(size(theta));
     7 
     8 h = sigmoid(X * theta);
     9 
    10 J = sum(- y .* log(h) - (1 - y) .* log(1 - h)) / m;
    11 
    12 grad = (1/m * sum((h - y).* X))';
    13 
    14 end
     1 function p = predict(theta, X)
     2 
     3 m = size(X, 1); % Number of training examples
     4 
     5 p = zeros(m, 1);
     6 
     7 h = sigmoid(X * theta);
     8 
     9 p(find(h >= 0.5)) = 1;
    10 
    11 end

    2.2正则化版逻辑回归:

     1 function [J, grad] = costFunctionReg(theta, X, y, lambda)
     2 
     3 % Initialize some useful values
     4 m = length(y); % number of training examples
     5 
     6 J = 0;
     7 grad = zeros(size(theta));
     8 
     9 n = size(theta,1);
    10 
    11 h = sigmoid(X * theta);
    12 
    13 J = sum(- y .* log(h) - (1 - y) .* log(1 - h)) / m + lambda / (2 * m) * sum(theta(2:n) .^ 2);
    14 
    15 grad = (1/m * sum((h - y).* X))';
    16 
    17 grad(2:n) = grad(2:n) + lambda / m * theta(2:n);
    18 
    19 end

     

  • 相关阅读:
    java-实现两种排序方法
    暑假,一遍一遍敲代码吧!
    java学习-如何定义一个函数及其简单练习
    关于函数重载的理解
    java学习中关于函数的练习
    在校大三学生,真心想学好计算机。可是,,,,没有目标,。。。。。。
    伪分布式网络爬虫框架的设计与自定义实现(一)
    网站架构成长路程之 箴言
    使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目
    使用visualStudio2017创建一个简单的控制台程序
  • 原文地址:https://www.cnblogs.com/tommyngx/p/9933803.html
Copyright © 2011-2022 走看看