您的位置:首页 > 其它

Coursera机器学习 Week3 笔记

2017-08-16 16:19 519 查看
编程作业放到了github上:coursera_machine_learning

1. Logistic Regression

1.1 Logistic Regression (Classification) Model

之前对房价的预测,其预测结果是一个连续变量,属于回归模型(Linear regression)。接下来要讲的是分类模型(Logistic regression),即其预测结果是一个离散变量,有固定的取值分布。

分类问题,又分成了“二分类”和“多分类”,先讲简单的“二分类”。

例子:判断一个病人是否罹患癌症。一个二分类问题,是或者否。

判断是否罹患癌症的标准就是通过看肿瘤大小来预测罹患癌症的概率。既然是概率,那么预测结果ŷ =hθ(x)就是在[0,1]范围中的。

之前Linear regression中hθ(x)=θTx,预测结果是连续变量,转换到Logistic regression,只需要将这个hθ(x)映射到[0,1]范围内即可。新的预测函数如下:

hθ(x)=σ(θTx)

σ(z)=sigmoid(z)=11+e−z

sigmoid函数形状如下:



即:

hθ(x)=11+e−θTx

现在可以用这个[0,1]之间的值来表示罹患癌症的概率了,设定一个阈值(threshold),如果h(x)>threshold,则罹患癌症,反之。

注意:这里的sigmoid只是起到了映射到(0, 1)范围的作用。

逻辑回归的边界依然是: θTx==threshold

从这个边界中看到,这样的逻辑回归是一个线性分类器。

用等高线图画出来就是这样的:



三维图是这样的:



画图的代码如下:

% Here is the grid range
u = linspace(30, 100, 100);
v = linspace(30, 100, 100);

z = zeros(length(u), length(v));
% Evaluate z = theta*x over the grid
for i = 1:length(u)
for j = 1:length(v)
t = [1, u(i), v(j)];
z(i,j) = sigmoid(t * theta);
end
end
z = z'; % important to transpose z before calling contour
% Plot z = 0
% Notice you need to specify the range [0, 0]
contour(u, v, z, [0.5, 0.5], 'LineWidth', 2)
xlabel('Exam 1 score')
ylabel('Exam 2 score')
hold off;

figure;
surf(u, v, z)


接下来就是loss function的设置了。

在logistic regression中,不再使用平方差来表示error了,转而使用negative log来表示error:

Ji(θ)={−log(hθ(x)) if y=1−log(1−hθ(x))if y=0

解释为什么使用negative log;

首先说明loss function的定义:当预测结果越接近真实结果时,loss越小。只要函数可以满足这一点,就可以成为loss function。

首先看y=1的情况,预测结果为h(x),真是结果为1,当h(x)越接近1的时候,−log(hθ(x))越小,即error越小,所以可以用这个式子表示error。

然后当y=0的时候,预测结果为h(x),真是结果为0,当h(x)越接近0的时候,−log(1−hθ(x))越小,即error越小,所以可以用这个式子表示error。

然后为方便计算,将以上的两个式子整合到一个式子中,通过y和1−y来决定出现两个式子中的哪一个:

Ji(θ)=−ylog(hθ(x))−(1−y)log(1−hθ(x))

整个训练集的error就是所有Ji(θ)的和:

J(θ)=1m∑i=1mJi(θ)=−1m∑i=1m[ylog(hθ(x))+(1−y)log(1−hθ(x))]

最后要做的就是不断更新θ从而减小J(θ),使用的方法就是gradient descent:

θj:=θj−α∂∂θjJ(θ)

逻辑回归一般情况下是线性分类器,但是在特定的情况下,可以转变成非线性分类器,如下图:



1.3 Multiclass Classification Model

OK, OK…但是还有很多情况,分类不止“是”、“否”两种。

下图左边是二分类的情况,右边是多分类的情况。



对于多分类问题可以转化成多个二分类问题来解决,如下图,先取一种类别,把其他的都归并为一类。然后再去一种类别,把剩余的归并为一类……直至所有类别都遍历完。



最后,对于一个x,有k个h(x),分别代表k个类概率,取最大h(x)所属的类别即可。

2. Regularization

2.1 Overfitting Problem

overfitting就是在训练集中拟合的特别好,或者说是过分好了,导致在新数据上的预测的效果不好。如下图:

左边没有overfitting,右边的overfitting





2.2 Regularization Intuition

下面两幅图中,左边的没有overfitting,右边的overfitting了,原因就是多了最后θ3和θ4这两项使得整个模型变复杂了。



所以我们需要在cost function中增加一项惩罚项penalty,我们的目的就是让θ3和θ4尽可能的小,最好接近于0,这样就可以消除这两项的干扰了。

2.3 Regularization Term

非常简单而暴力地增加一项:(注意,没有包含θ0,在实际操作过程中,加不加θ0的影响不大,这里举例子就不加了)

θ21+θ22+..+θ2n

到cost function中,并且用λ来权衡这一个惩罚项:

J(θ)=−1m∑i=1mJi(θ)+λ∑j=1nθ2j

模型学习的目的就是减小J(θ),这样一来,θ21+θ22+..+θ2n也就减小了。

如果λ非常大,那么模型在学习过程中,为了让J(θ)减小,就会让θ21+θ22+..+θ2n非常小,接近于0,整个模型就会变得特别简单,≈θ0,只剩下一个常数项了。

反之,如果λ非常小,接近于0,那么相当于θ21+θ22+..+θ2n这一项不存在了,模型有overfitting的危险。

总而言之,λ是用来控制惩罚项的影响因子,越大就是让惩罚项越发挥作用。

最后,在gradient descent中,把这一项也求导了就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习
相关文章推荐