損失函式
梯度下降法求引數 ω
\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...