前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ML】逻辑回归——详细概述

【ML】逻辑回归——详细概述

作者头像
陆勤_数据人网
发布2018-12-26 09:57:56
7640
发布2018-12-26 09:57:56
举报

笔者邀请您,先思考:

1 逻辑回归算法如何理解和应用?

逻辑回归在20世纪早期被用于生物科学。它后来被用于许多社会科学应用。因变量(目标)为分类变量时采用Logistic回归

例如,

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

考虑一个场景,我们需要对电子邮件是否为垃圾邮件进行分类。如果我们用线性回归来解决这个问题,就需要设置一个阈值,根据这个阈值可以进行分类。假设实际类为恶性,预测连续值为0.4,阈值为0.5,则将数据点划分为非恶性,会导致严重后果。

从这个例子可以推断线性回归不适合分类问题。线性回归是无界的,逻辑回归的值严格从0到1。

简单线性回归

完整的源代码:

https://github.com/SSaishruthi/LogisticRegression_Vectorized_Implementation/blob/master/Logistic_Regression.ipynb

模型 输出:0或者1 假设:Z=WX+B

如果Z→∞,Y(预测值)= 1,如果Z→-∞,Y(预测值)= 0。

假设分析

假设的输出是估计的概率。这是用来推断当给定输入x时,预测值是实际值的可信度。

X = [x0 x1] = [1 IP-Address]

根据x1值,假设我们得到的估计概率是0.8。这说明电子邮件有80%的可能是垃圾邮件。

数学可以写成

这说明了“逻辑回归”这个名称的合理性。数据拟合为线性回归模型,再通过logistic函数对目标分类因变量进行预测。

逻辑回归的类型
  1. 二元逻辑回归:分类反应只有两种可能结果。例子:垃圾邮件或非垃圾邮件
  2. 多项逻辑回归:三个或更多的类别,没有排序。例子:预测哪种食物更受欢迎(素食,非素食,纯素食)
  3. 顺序逻辑回归:三个或更多类别的排序。例子:电影分级从1到5
决策边界

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

如果predicted_value≥0.5,电子邮件邮件分类为垃圾邮件反之不是。 决策边界可以是线性的,也可以是非线性的。多项式阶增加以获得复杂的决策边界。

代价函数

为什么用于线性的代价函数不能用于逻辑回归?

线性回归以均方误差为代价函数。如果将其用于逻辑回归,则为参数的非凸函数。只有当函数为凸函数时,梯度下降才收敛到全局最小值。

代价函数的解释
简化的代价函数
为什么这是代价函数

这个负函数是因为当我们训练时,我们需要通过最小化损失函数来最大化概率。假设样本来自相同独立分布,降低成本会增加样本的最大似然。

推导梯度下降算法的公式

Python实现

代码语言:javascript
复制
 1def weightInitialization(n_features):
 2    w = np.zeros((1,n_features))
 3    b = 0
 4    return w,b
 5def sigmoid_activation(result):
 6    final_result = 1/(1+np.exp(-result))
 7    return final_result
 8
 9def model_optimize(w, b, X, Y):
10    m = X.shape[0]
11
12    #Prediction
13    final_result = sigmoid_activation(np.dot(w,X.T)+b)
14    Y_T = Y.T
15    cost = (-1/m)*(np.sum((Y_T*np.log(final_result)) + ((1-Y_T)*(np.log(1-final_result)))))
16    #
17
18    #Gradient calculation
19    dw = (1/m)*(np.dot(X.T, (final_result-Y.T).T))
20    db = (1/m)*(np.sum(final_result-Y.T))
21
22    grads = {"dw": dw, "db": db}
23
24    return grads, cost
25def model_predict(w, b, X, Y, learning_rate, no_iterations):
26    costs = []
27    for i in range(no_iterations):
28        #
29        grads, cost = model_optimize(w,b,X,Y)
30        #
31        dw = grads["dw"]
32        db = grads["db"]
33        #weight update
34        w = w - (learning_rate * (dw.T))
35        b = b - (learning_rate * db)
36        #
37
38        if (i % 100 == 0):
39            costs.append(cost)
40            #print("Cost after %i iteration is %f" %(i, cost))
41
42    #final parameters
43    coeff = {"w": w, "b": b}
44    gradient = {"dw": dw, "db": db}
45
46    return coeff, gradient, costs
47def predict(final_pred, m):
48    y_pred = np.zeros((1,m))
49    for i in range(final_pred.shape[1]):
50        if final_pred[0][i] > 0.5:
51            y_pred[0][i] = 1
52    return y_pred
成本与迭代次数

系统的训练和测试精度为100% 此实现用于二元逻辑回归。对于超过两个类的数据,必须使用softmax回归。 完整的代码:

https://github.com/SSaishruthi/LogisticRegression_Vectorized_Implementation/blob/master/Logistic_Regression.ipynb

作者:Saishruthi Swaminathan 原文链接: https://towardsdatascience.com/logistic-regression-detailed-overview-46c4da4303bc

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学与人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单线性回归
    • 假设分析
      • 逻辑回归的类型
        • 决策边界
          • 代价函数
            • 代价函数的解释
              • 简化的代价函数
                • 为什么这是代价函数
                  • 推导梯度下降算法的公式
                  • Python实现
                    • 成本与迭代次数
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档