---恢復內容開始---
softmax regression 可以看做是 lr 演算法在多分類上的推廣,即類標籤 y 的取值大於或者等於 2。
假設資料樣本集為:$\left \,y ^ \right ) ,\left ( x^,y ^ \right ),\left ( x^,y ^ \right ),...,\left ( x^,y ^ \right )\right \}$
對於 sr 演算法,其輸入特徵為:$ x^ \in \mathbb^$,類別標記為:$y^ \in \$,假設函式為每乙個樣本估計其所屬類別的概率 $p(y=j|x)$,具體的假設函式為:
$h_(x^) =\begin
p(y^=1|x^;\theta)\\
p(y^=2|x^;\theta)\\
...\\
p(y^=k|x^;\theta)
\end = \frac^e^}}\begin
e^}\\
e^}\\
...\\
e^}\end$
其中,$\theta$表示的向量,且 $\theta_i \in \mathbb^$,則對於每乙個樣本估計其所屬的類別的概率為
$p(y^=j|x^;\theta) = \frac}}^e^}}$
sr 的損失函式為:
$j(\theta) = -\frac \left [\sum_^ \sum_^ i \=j \} \log \frac}}^e^}} \right ]$
其中,$i(x) = \left\
0 & if\;\;x = false\\
1 & if\;\;x = true
\end\right.$ 表示指示函式。
對於上述的損失函式,可以使用梯度下降法求解:
首先求引數的梯度:
$\frac = -\frac\left [ \sum_^\********down _\left \^i(y^=j) \log\frac}}^e^}} \right \} \right ]$
當 $y^=j$ 時, $\frac = -\frac\sum_^\left [\left ( 1-\frac}}^e^}} \right )x^ \right ]$
當 $y^\neq j$ 時,$\frac = -\frac\sum_^\left [\left (-\frac}}^e^}} \right )x^ \right ]$
因此,最終結果為:
$g(\theta_j) = \frac = -\frac\sum_^\left [x^ \cdot \left ( i\left \=j \right \}-p( y^=j|x^;\theta) \right ) \right ]$
梯度下降法的迭代更新公式為:
$\theta_j = \theta_j - \alpha \cdot g(\theta_j)$
主要python**
defview codegradientascent(feature_data,label_data,k,maxcycle,alpha):
'''梯度下降求解softmax模型
:param feature_data: 特徵
:param label_data: 標籤
:param k: 類別個數
:param maxcycle: 最大迭代次數
:param alpha: 學習率
:return: 權重
'''m,n =np.shape(feature_data)
weights = np.mat(np.ones((n,k))) #
一共有n*k個權值
i =0
while i <=maxcycle:
i+=1err = np.exp(feature_data*weights) #
e^(\theta_j * x^i)
if i%100==0:
print ("
\t-----iter:
",i,"
,cost:
",cost(err,label_data))
rowsum = -err.sum(axis = 1)
rowsum = rowsum.repeat(k,axis = 1)
err = err/rowsum #
-p(y^i = j|x^i;0)
for x in
range(m):
err[x,label_data[x,0]]+=1 #
i(y^i = j)-p(y^i = j|x^i;0)
weights = weights+(alpha/m)*feature_data.t*err #
weights
return weights
defview codecost(err,label_data):
'''計算損失函式值
:param err: exp的值
:param label_data: 標籤值
:return: sum_cost/m:損失函式值
'''m =np.shape(err)[0]
sum_cost = 0.0
for i in
xrange(m):
if err[i,label_data[i,0]] / np.sum(err[i,:])>0:
sum_cost -=np.log(err[i,label_data[i,0]]/np.sum(err[i,:]))
else
: sum_cost-=0
return sum_cost/m
sklearn**:
lr = logisticregressioncv(fit_intercept=true, cs=np.logspace(-5, 1, 100),view codemulti_class='
multinomial
', penalty='
l2', solver='
lbfgs
',max_iter = 10000,cv = 7)#
multinomial表示多類即softmax回歸
re = lr.fit(x_train, y_train)
機器學習之Softmax回歸模型
softmax在機器學習中有非常廣泛的應用,但是剛剛接觸機器學習的人可能對softmax的特點以及好處並不理解,其實你了解了以後就會發現,softmax計算簡單,效果顯著,非常好用。我們先來直 一下,softmax究竟是什麼意思 我們知道max,假如說我有兩個數,a和b,並且a b,如果取max,那...
機器學習之softmax回歸筆記
logistic回歸是用來解決二類分類問題的,如果要解決的問題是多分類問題呢?那就要用到softmax回歸了,它是logistic回歸在多分類問題上的推廣。此處神經網路模型開始亂入,softmax回歸一般用於神經網路的輸出層,此時輸出層叫做softmax層。首先介紹一下softmax函式,這個函式可...
機器學習之softmax回歸筆記
logistic回歸是用來解決二類分類問題的,如果要解決的問題是多分類問題呢?那就要用到softmax回歸了,它是logistic回歸在多分類問題上的推廣。此處神經網路模型開始亂入,softmax回歸一般用於神經網路的輸出層,此時輸出層叫做softmax層。首先介紹一下softmax函式,這個函式可...