邏輯回歸表達式:
$$
h_\theta(x) = g(\theta^tx)
z = \theta^tx
g(z) = {1\over 1+e^{-z}}
綜上,
h_\theta(x) = {1\over 1+e^{-\theta^tx}}
sigmoid函數:
選擇題1:
接下來我們深入的來了解下這個sigmoid函數。通過圖可以知道:
如果想要判斷預測分類$\color{red}{y=1}$,則必須保證$\color{red}{h_\theta(x)>=0.5}$,這裡如果用$g(z)$來代替$h_\theta(x)$的話也即$g(z)>=0.5$,則對應的$x$軸則是$z>=0$,是以轉換過來也即是$\color{red}{\theta^tx>=0}$。
如果想要判斷預測分類$\color{red}{y=0}$,則必須保證$\color{red}{h_\theta(x)<0.5}$,這裡如果用$g(z)$來代替$h_\theta(x)$的話也即$g(z)<0.5$,則對應的$x$軸則是$z<0$,是以轉換過來也即是$\color{red}{\theta^tx<0}$。
決策邊界
對于線性回歸:假設$\theta$矩陣中的$\theta_0,\theta_1,\theta_2$已經确定,也就是$\theta^tx$确定了,那麼就會确定一條直線,比如圖中的$\color{red}{x_1 + x_2 = 3}$這條直線,我們可以利用這條直線來确定一個邊界,邊界的一側是y=1類,另一側則是y=0類。
對于非線性回歸:假設$\theta$矩陣已經确定,也就是$\theta^tx$确定了,那麼就會确定一條曲線,比如圖中的$\color{red}{x_3^2 + x_4^2 = 1}$這條曲線,我們可以利用這條曲線來确定一個邊界,邊界的外側是y=1類,内側則是y=0類。
代價函數:
我們由線性代價函數來引入,可以看到,如果将各個單個值的序号去掉那麼線性的代價函數無非就是${1\over 2}(h_\theta(x)-y)^2$這個表達式,然而此時我們将線性代數的假設函數$h_\theta(x)$替換成了sigmoid函數,如果繼續按着之前的表達式求它的代價cost的話那麼它的函數曲線将會是一個“非凸”函數(non-convex),而非一個碗型的“凸”函數(convex)。是以,對于邏輯回歸我們将會采用新的代價函數。如下圖:
對于$\color{red}{y=1}$來說:
此時的cost計算公式為:
cost(h_\theta(x)) = -log(h_\theta(x))
因為$h_\theta(x)$是sigmoid函數,是以它的值域為(0,1),故我們隻讨論橫坐标$h_\theta(x)$在(0,1)範圍内的costj代價的變化。
如果$y=1,h_\theta(x)=1$,那麼就可以說我的預測值與實際值是無偏差的,可以說是$cost=0$,但是假如$y=1,h_\theta(x)=0$,那麼意味着我的預測值與實際值是有很大偏差的,那麼就要懲罰學習算法讓它的代價變大,于是對應上圖就可明白,當橫坐标$h_\theta(x)=1$時,曲線确實cost=0,而當$h_\theta(x)=0$時,cost趨于了無窮大。
對于$\color{red}{y=0}$來說:
cost(h_\theta(x)) = -log(1-h_\theta(x))
同樣$h_\theta(x)$的值域為(0,1),是以我們隻讨論橫坐标在(0,1)的範圍内的cost的變化。如果$y=0$,$h_\theta(x)=0$,那麼就可以說我的預測值與實際值是無偏差的,可以說是$cost=0$,但是假如$y=0$,$h_\theta(x)=1$,那麼意味着我的預測值與實際值是有很大偏差的,那麼就要懲罰學習算法讓它的代價變大,于是對應上圖就可明白,當橫坐标$h_\theta(x)=0$時,曲線确實cost=0,而當$h_\theta(x)=1$時,cost趨于了無窮大。
有時,我們也把上面的函數寫成一個表達式:
cost(h_\theta(x)) = -ylog(h_\theta(x))-(1-y)log(1-h_\theta(x))
如果x和y變成多元,則代價函數變為:
j(\theta) = -{1\over m}[\sum_{i=1}^{m}y^{(i)}log(h_\theta(x^{(i)})) + (1-y^{(i)})log(1-h_\theta(x^{(i)}))]
$color{red}{注意}$:上面是andrew ng直接給出的cost function,并沒有給出推導,這裡我把具體的cost function由來給寫一下供大家參考:
對于logistic regression,$h_\theta(x)$函數代表的是等于1的機率,是以有如下的條件機率分布:
p(y=1|x) = {1\over 1 + e^{-\theta^tx}} = h_\theta(x)
p(y=0|x) = 1-{1\over 1 + e^{-\theta^tx}} = 1 - h_\theta(x)
那麼将兩個式子合并起來寫在一起就是:
p(y|x) = h_\theta(x)^y(1-h_\theta(x))^{1-y}
對上面這個式子求似然函數:
l(\theta) = \prod_{i=1}^{m}{p(y_i|x_i)} = \prod_{i=1}^{m}{h_\theta(x_i)^{y_i}(1-h_\theta(x_i))^{1-y_i}}
在對上面的似然函數求對數為:
l(\theta) = logl(\theta) = \sum_{i=1}^{m}[{y_ilogh_\theta(x_i)+(1-y_i)log(1-h_\theta(x_i))}]
如果想求最優解則對上式求極大值時下的$\theta$,則此時運用的是梯度上升法,但是在andrew ng的課程中使用的是梯度下降算法,故有:
j(\theta) = -{1\over m}l(\theta) = -{1\over m}[\sum_{i=1}^{m}y^{(i)}log(h_\theta(x^{(i)})) + (1-y^{(i)})log(1-h_\theta(x^{(i)}))]
即為所求。
選擇題2:
選擇題3:
梯度下降
選擇題4:
選擇題5:
解析
也可寫成如下
優化梯度下降算法
在octave中,用此方法來替代梯度下降算法,因為此優化算法不用人為指定conjugate:
不需進行學習速率$\alpha$,是以可以将此算法看成是加強版的選擇。
通常比梯度下降算法快。
選擇題6:
多分類的一種方法是采用“one-vs-all”的方法将多種類别區分:具體思想是針對每一個類别可以訓練分類器以區分是否為該類,這樣如果有$k$個類别,那麼就會訓練出$k$個模型。
然後如果想要預測$test$到底為哪一類别時,将$test$分别輸入到這$k$個模型中,哪一類的輸出機率最大就分類為哪一類。
選擇題7:
小節測試題1:
小節測試題2:
小節測試題3:
小節測試題4:
小節測試題5:
線性回歸是用來拟合資料對資料進行預測屬于回歸,但是邏輯回歸是用來分類的屬于分類。而區分類别是根據$h_\theta(x)$與0.5的關系,也就是$\theta^tx$與0的關系,是以題中的$\theta^tx$即為$-x+6$,是以當$x-6>0$時為$y=1$類,反之為$y=0$類。
但是算法複雜。
産生過拟合問題的原因:資料集的特征非常多并且資料集很小。
如何解決過拟合:
1、減少特征的數量
手動的選擇要保留的特征。
模型選擇算法(會自動的選擇要保留的特征,之後會講到)
2、正則化
保留所有的特征,并減小$\theta_j$的值或數量級
如圖所示,将之前的cost function加上一個正則化項:
j(\theta)={1\over2}[\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum_{j=1}^{n}\theta_j^2]
注意到,後面的正則項是從$j=1$開始的,不包括$\theta_0$。參數$\lambda$叫做正則化項參數,用來減小$\theta_j$的值,當$\lambda$很大時,$\theta_j$都會變得很小。是以就相當于隻剩下$\theta_0$了。
在梯度下降方法中
如圖,
在帶有正則項的線性回歸的梯度下降中,可以将$\theta$的更新分成兩部分,一部分是$\theta_0$,另一部分是$\theta_j,j=1,2,3...$,而後者可以等價于:
\theta_j = \theta_j(1-\alpha{\lambda\over m})-\alpha{1\over m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
在正規方程中
在正規方程中,正則化項為一個$(n+1)*(n+1)$的矩陣。
在邏輯回歸中,cost function帶有了正則項後就變成這樣:
j(\theta)=-[{1\over m}\sum_{i=1}^{m}y^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]+{\lambda\over 2m}\sum_{j=1}^{n}\theta_j^2
于是,随後的計算梯度就變成了這樣,但一定要注意的是$\color{red}{j=0}$與$\color{red}{j=1}$是不同的。
${\partial j(\theta)\over \partial\theta_0} = {1\over m}\sum_{i=1}^m{(h_\theta(x^{(i)})-y^{(i)})}x_j^{(i)}$ $\color{red}{for\ j=0}$
${\partial j(\theta)\over \partial\theta_0} = ({1\over m}\sum_{i=1}^m{(h_\theta(x^{(i)})-y^{(i)})}x_j^{(i)})+{\lambda\over m}\theta_j$ $\color{red}{for\ j>=1}$