SoftMax回歸詳解

2021-10-17 08:46:31 字數 2770 閱讀 9202

損失函式

梯度下降法求引數 ω

\omega

ω, b

bb

實現與 logistic 回歸的關係(重點)關係

求導的關係(重點)

from sklearn import datasets

import numpy as np

iris = datasets.load_iris(

)#載入鳶尾花資料集

x = iris[

"data"][

:,(2

,3)]

#花瓣的長,寬

y = iris[

"target"

]x_with_bias = np.c_[np.ones(

[len

(x),1]

), x]

#增廣矩陣

test_ratio =

0.2validation_ratio =

0.2total_size =

len(x_with_bias)

test_size =

int(total_size * test_ratio)

validation_size =

int(total_size * validation_ratio)

train_size = total_size - test_size - validation_size

rnd_indices = np.random.permutation(total_size)

x_train = x_with_bias[rnd_indices[

:train_size]

]y_train = y[rnd_indices[

:train_size]

]x_valid = x_with_bias[rnd_indices[train_size:

-test_size]

]y_valid = y[rnd_indices[train_size:

-test_size]

]x_test = x_with_bias[rnd_indices[

-test_size:]]

y_test = y[rnd_indices[

-test_size:

]]

def

to_one_hot

(y):

#類索引轉換為矩陣,例如 0,1,2 類中屬於 1 類,則 [0,1,0]

n_classes = y.

max()+

1 m =

len(y)

y_one_hot = np.zeros(

(m, n_classes)

)#全 0 向量

y_one_hot[np.arange(m)

, y]=1

return y_one_hot

y_train_one_hot = to_one_hot(y_train)

#轉換y_valid_one_hot = to_one_hot(y_valid)

y_test_one_hot = to_one_hot(y_test)

def

softmax

(logits)

:#與 logistic 函式完全一樣

exps = np.exp(logits)

exp_sums = np.

sum(exps, axis=

1, keepdims=

true

)return exps / exp_sums

eta =

0.01

#學習率

n_iterations =

5001

#迭代次數

m =len

(x_train)

#訓練樣本數

epsilon =1e-

7#平滑,為了防止 log(0) 出錯

theta = np.random.randn(n_inputs, n_outputs)

#隨便生成 3 個 3 維的 theta

for iteration in

range

(n_iterations)

: logits = x_train.dot(theta)

y_proba = softmax(logits)

loss =

-np.mean(np.

sum(y_train_one_hot * np.log(y_proba + epsilon)

, axis=1)

)#計算損失

error = y_proba - y_train_one_hot

# if iteration % 500 == 0: #輸出損失測試一下

# print(iteration, loss)

gradients =

1/m * x_train.t.dot(error)

#偏導數

theta = theta - eta * gradients

logits = x_valid.dot(theta)

y_proba = softmax(logits)

y_predict = np.argmax(y_proba, axis=1)

accuracy_score = np.mean(y_predict == y_valid)

Softmax回歸練習

整個流程包括以下四部分 1 定義演算法公式,也就是神經網路的forward時的計算 y softmax w.tx b 2 定義損失函式 h y y log y 並制定優化器 梯度下降 3 迭代的對資料進行訓練 4 在測試集或驗證集上對準確率進行評測 import tensorflow as tf 匯...

線性回歸與softmax回歸的區別

線性回歸是一種回歸演算法,根據當前資料去學習直線的兩個引數。可以用輸入特徵維度為2輸出為1的單層神經網路來實現。線性回歸模型適 於輸出為連續值的情景 softmax回歸,是一種分類方法,模型輸出可以是 個 像影象類別這樣的離散值。對於這樣的離散值 問題,我們可以使 諸如softmax 回歸在內的 分...

邏輯回歸 交叉熵 softmax

softmax是一種歸一化函式,用於將向量中元素的值都歸一化0 1之間,並保持其加和為1。公示表達為 根據公式和可看出,前一層的啟用值越大,經過softmax函式後的值也就越大,又因為softmax的所有輸出加和為1,因此,常利用softmax層將啟用值與概率實現對映。多元分類 multi clas...