机器学习_02逻辑回归(附加)
I.综述
附加问题是在逻辑回归中,我们对题目中所给数据的过度拟合问题。虽然在数据可视化问题上看出了,求得的拟合函数最大可能的走过每一个已知点,但是拟合的效果并非理想,如下图所示。显然蓝色的拟合函数不如粉红色的拟合函数更为“实用”。
蓝色的拟合函数都是我们加入过多的变量导致。举一个简单的例子。例如在预测房子的价格中,我们把房子的面积、离市区的距离、客厅的面积、厨房的面积作为参数变量来预测房子的价格。显然房子的面积、距离市区的距离为决定因素。客厅的面积和厨房的面积与房子的总价格关系不大。所以我们强行加上这两个变量就没有什么太大的意义。有两种方法可以解决这类问题: 1.人为的去掉变量中意义较小的变量。 2.由于意义较小的变量对预测函数的造成了很大的影响,所以根据影响程度对其进行惩罚(正则化)。 对于(2)来说惩罚就是在意义较小的变量前乘上一个较大的常数值。意义越小常数值越大。因为在自定义的最小代价算法中,为了确定变量的值,每一项都会接近零(最优解),那么由于变量所乘的常数值越大则变量就会越小,即theta值越小。所以其意义在代价函数中变体现出来。
II.数据可视化
将ex2data2.txt里的数据load到Octave中,然后利用上篇博客中写好的poltData.m函数在二维表中显示出来。
III.编写costFunctionReg.m函数
根据下图公式写出代价函数。
function [J, grad] = costFunctionReg(theta, X, y, lambda)% Initialize some useful valuesm = length(y); % number of training examplesn = size(theta);% You need to return the following variables correctly theta_t = theta(2:n);X1 = X(:, 1);X_t = X(:, 2:n);H = sigmoid(X*theta);J = -(y'*log(H) + (1-y)'*log(1-H)) / m + lambda * theta_t' * theta_t / (2*m);grad = (X_t'*(H-y) + lambda * theta_t) ./ m;grad1 = X1'*(H-y) / m;grad = [grad1; grad];end
IV.拟合实现
% Initialize fitting parametersinitial_theta = zeros(size(X, 2), 1);% Set regularization parameter lambda to 1 (you should vary this)lambda = 1;%第一次%lambda = 0; 第二次%lambda = 100; 第三次% Set Optionsoptions = optimset('GradObj', 'on', 'MaxIter', 400);% Optimize[theta, J, exit_flag] = fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options);
经过对lambda的初始化分别为1,0,100的拟合函数。
lambda = 1 (拟合最好)
lambda = 0 (过渡拟合)
lambda = 100 (欠拟合)
综上机器学习的第二次作业逻辑回归部分全部做完。