逻辑回归详述

Logistic回归-详细概述

图1:Logistic回归模型

Logistic回归在20世纪初被用于许多社会科学应用中。当因变量(目标)是分类时,可以使用逻辑回归。

例如,

  • 预测电子邮件是垃圾邮件(1)还是(0)
  • 肿瘤是否为恶性(1)(0)

考虑一种情况,在这种情况下,我们需要对电子邮件是否为垃圾邮件进行分类。如果我们对这个问题使用线性回归,则需要根据可完成的分类设置阈值。假设实际类别为恶性,预测连续值为0.4,阈值为0.5,则该数据点将归类为非恶性,这可能导致严重的实时后果。

简单逻辑回归

完整的源代码 : //github.com/SSaishruthi/LogisticRegression_Vectorized_Implementation/blob/master/Logistic_Regression.ipynb)

模型

输出= 0或1

假设=> Z = WX + B

hΘ(x)= Sigmoid(Z)

Sigmoid Function

图2:sigmoid激活函数

如果’Z’变为无穷大,则Y(预测)将变为1,如果’Z’变为负无穷大,则Y(预测)将变为0。

Logistic回归的类型\

  1. 二元Logistic回归

类别响应只有两个2种可能的结果。示例:是否为垃圾邮件

  1. 多项逻辑回归

三个或更多类别,无需订购。示例:预测哪种食物更受欢迎(蔬菜,非蔬菜,素食主义者)

  1. 有序逻辑回归

带有订购的三个或更多类别。示例:电影分级从1到5

决策边界\

为了预测数据属于哪个类别,可以设置一个阈值。基于该阈值,将获得的估计概率分类。

比如,predicted_value≥0.5,则将电子邮件分类为垃圾邮件,否则分类为非垃圾邮件。

决策边界可以是线性的或非线性的。可以增加多项式阶数以获得复杂的决策边界。

为什么已经用于线性的成本函数不能用于物流?

线性回归使用均方误差作为成本函数。如果将其用于逻辑回归,则它将是参数(theta)的非凸函数。仅当函数为凸函数时,梯度下降才会收敛到全局最小值。

图5:凸和非凸成本函数

成本函数说明\

图6:成本函数第1部分

图7:成本函数第2部分

简化成本函数\

图8:简化的成本函数

为什么要使用此成本函数?\

图9:最大似然说明第1部分

图10:最大似然说明第2部分

这个负函数是因为当我们训练时,我们需要通过最小化损失函数来最大化概率。假设从相同独立的分布中抽取样本,则降低成本将增加最大可能性。

推导梯度下降算法的公式\

图11:梯度下降算法第1部分

图12:梯度下降第2部分

Python实现\

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def weightInitialization(n_features):
w = np.zeros((1,n_features))
b = 0
return w,b
def sigmoid_activation(result):
final_result = 1/(1+np.exp(-result))
return final_result

def model_optimize(w, b, X, Y):
m = X.shape[0]

#Prediction
final_result = sigmoid_activation(np.dot(w,X.T)+b)
Y_T = Y.T
cost = (-1/m)*(np.sum((Y_T*np.log(final_result)) + ((1-Y_T)*(np.log(1-final_result)))))
#

#Gradient calculation
dw = (1/m)*(np.dot(X.T, (final_result-Y.T).T))
db = (1/m)*(np.sum(final_result-Y.T))

grads = {"dw": dw, "db": db}

return grads, cost
def model_predict(w, b, X, Y, learning_rate, no_iterations):
costs = []
for i in range(no_iterations):
#
grads, cost = model_optimize(w,b,X,Y)
#
dw = grads["dw"]
db = grads["db"]
#weight update
w = w - (learning_rate * (dw.T))
b = b - (learning_rate * db)
#

if (i % 100 == 0):
costs.append(cost)
#print("Cost after %i iteration is %f" %(i, cost))

#final parameters
coeff = {"w": w, "b": b}
gradient = {"dw": dw, "db": db}

return coeff, gradient, costs
def predict(final_pred, m):
y_pred = np.zeros((1,m))
for i in range(final_pred.shape[1]):
if final_pred[0][i] > 0.5:
y_pred[0][i] = 1
return y_pred

Cost vs Number_of_Iterations

系统的训练和测试精度为100%

此实现用于二进制逻辑回归。对于具有2个以上类别的数据,必须使用softmax回归。

参考

Logistic Regression — Detailed Overview


逻辑回归详述
http://example.com/2020/06/08/2020-06-08-逻辑回归详述/
作者
NSX
发布于
2020年6月8日
许可协议