Problem
- underfitting(欠拟合) 又称(high bias 高偏差)
- overfitting(过度拟合) 又称(high variance高方差):千方百计拟合训练集,导致无法泛化(一个假设模型应用到新样本的能力)到新的样本中。
Addressing overfitting
- 减少选取变量的数量(多项式的项数):
1. 手动选择
2. 模型选择算法 - 正则化
保留变量,但是减少量级/参数 θ 的大小,保证每一个变量都有助于预测 y 。
Regularization
- linear regression(梯度下降/正规方程)
1.cost function
(1). 新增项λΣ(θ^2)作用:惩罚参数,缩小每一个参数。(约定俗成:求和从θ1开始,不用给θ0添加惩罚项)
(2). 正则化参数λ:控制两个不同目标之间的取舍,从而保持假设模型相对简单,避免出现过拟合的情况。
目标一:更好地拟合训练集的目标
目标二:将参数θ控制得更小的目标
(3). λ过大(惩罚程度过大)影响:会使参数θ约等于0,相当于把假设函数的全部项忽略,h(x) = θ0(直线,欠拟合)
2.Gradient descent
不对θ0惩罚,因此将 θ0 分离出来。
- Normal equation
if λ>0, ( X^T * X + λ*)必可逆。
- logistic regression(梯度下降/高级优化)
- Cost function
- Gradient descent(形式同线性回归一致,但h(x)不一致)
3. Advanced optimization
Programming Exercise
本例子部分代码见上一个博客(logistic regression)
本例子是正则化 logistic regression
根据两个测试结果预测制造厂的微芯片是否通过质量保证
训练集(测试1,测试2,是否通过)
- 训练集可视化
data = load('ex2data2.txt');
X = data(:, [1, 2]); y = data(:, 3);
plotData(X, y);
2. 特征映射
X = mapFeature(X(:,1), X(:,2));
function out = mapFeature(X1, X2)
degree = 6; %1,x1,x2,x1^2,x1x2,x2^2......x1x2^5,x2^6
out = ones(size(X1(:,1))); %列数为1,元素为1的矩阵(注意size返回两个值,行和列)
for i = 1:degree
for j = 0:i
out(:, end+1) = (X1.^(i-j)).*(X2.^j);
end
end
end
- cost function
initial_theta = zeros(size(X, 2), 1);
lambda = 1;
[cost, grad] = costFunctionReg(initial_theta, X, y, lambda);
function [J, grad] = costFunctionReg(theta, X, y, lambda)
m = length(y);
J = 0;
grad = zeros(size(theta));
h = sigmoid(X * theta);
J = (-1/m)*((y' * log(h))+(1-y)' * (log(1 - h))) + (lambda/(2*m))*(theta'*theta-theta(1)*theta(1));
grad = (1/m)*(X' * (h - y)) + (lambda/m)*theta;
grad(1) = (1/m)*sum(h-y);
end
- 决策边界(代码见上一个博客(logistic regression))