#machine-learning #deep-learning #artificial-intelligence #logistic-regression #divide-by-zero
Вопрос:
Это простая модель:
import numpy as np
import copy
def sigmoid(z):
return 1/(1 np.exp(-z))
Я инициализирую веса и смещение как нули
Эта функция создает вектор нулей формы (dim, 1) для w и инициализирует b до 0.
Аргумент: dim — размер вектора w, который мы хотим (или количество параметров в данном случае)
Возвращает: w — инициализированный вектор формы (dim, 1) b — инициализированный скаляр (соответствует смещению) типа float
def initialize_with_zeros(dim):
w = np.zeros((dim,1))
b = 0.
return w,b
Эта функция предназначена для прямого и обратного прохода
def propagate(w, b, X, Y):
m = X.shape[1]
# epsilon = 1e-5
A = sigmoid(np.dot(w.T,X) b)
cost = (-1/m) * (np.dot(Y,np.log(A).T) np.dot((1-Y),np.log(1-A).T))
dw = 1 / m *(np.dot(X,(A - Y ).T))
db = 1/m * (np.sum(A-Y))
cost = np.squeeze(np.array(cost))
grads = {"dw": dw,
"db": db}
return grads, cost
Эта функция предназначена для обновления параметров
def optimize(w,b,X,Y,num_iterations=100,learning_rate=0.009,print_cost=False):
w = copy.deepcopy(w)
b = copy.deepcopy(b)
costs = []
for i in range(num_iterations):
#gradient and cost calculations
grads, cost = propagate(w,b,X,Y)
#retrieve derivatives from grads
dw = grads["dw"]
db = grads["db"]
#update
w = w - learning_rate * dw
b = b - learning_rate * db
#record cost every 100th iterations
if i0==0:
costs.append(cost)
if print_cost:
print("cost after %i:%f" %(i,cost))
params = {"w": w,
"b": b}
grads = {"dw": dw,
"db": db}
return params, grads, costs
This function is for predicting the result
def predict(w,b,X):
m = X.shape[1]
Y_prediction = np.zeros((1,m))
w = w.reshape(X.shape[0],1)
A = sigmoid(np.dot(w.T,X) b)
for i in range(A.shape[1]):
if A[0][i] > 0.5:
Y_prediction[0][i] = 1.0
else:
Y_prediction[0][i] = 0.0
return Y_prediction
Logistic regression model :
def logisticregressionmodel(X_train, Y_train, X_test, Y_test, num_iterations=2000, learning_rate=0.5, print_cost=False):
w,b = initialize_with_zeros(X_train.shape[0])
parameters, grads, costs = optimize(w, b, X_train, Y_train, num_iterations, learning_rate, print_cost)
w = parameters["w"]
b = parameters["b"]
Y_prediction_test = predict(w, b, X_test)
Y_prediction_train = predict(w, b, X_train)
# Print train/test Errors
if print_cost:
print("train accuracy: {} %".format(100 - np.mean(np.abs(Y_prediction_train - Y_train)) * 100))
print("test accuracy: {} %".format(100 - np.mean(np.abs(Y_prediction_test - Y_test)) * 100))
d = {"costs": costs,
"Y_prediction_test": Y_prediction_test,
"Y_prediction_train" : Y_prediction_train,
"w" : w,
"b" : b,
"learning_rate" : learning_rate,
"num_iterations": num_iterations}
return d
#result
cost after 0:0.693147
cost after 100:nan
cost after 200:nan
cost after 300:nan
cost after 400:nan
cost after 500:nan
cost after 600:nan
cost after 700:nan
cost after 800:nan