内容简介:逻辑回归在20世纪早期被用于生物科学。它后来被用于许多社会科学应用。因变量(目标)为分类变量时采用Logistic回归。例如,
逻辑回归在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到5
决策边界
为了预测数据点属于哪个类别,可以设置一个阈值。根据这个阈值,将获得的估计概率划分为类别。
如果predicted_value≥0.5,电子邮件邮件分类为垃圾邮件反之不是。 决策边界可以是线性的,也可以是非线性的。多项式阶增加以获得复杂的决策边界。
代价函数
为什么用于线性的代价函数不能用于逻辑回归?
线性回归以均方误差为代价函数。如果将其用于逻辑回归,则为参数的非凸函数。只有当函数为凸函数时,梯度下降才收敛到全局最小值。
代价函数的解释
简化的代价函数
为什么这是代价函数
这个负函数是因为当我们训练时,我们需要通过最小化损失函数来最大化概率。假设样本来自相同独立分布,降低成本会增加样本的最大似然。
推导梯度下降算法的公式
Python实现
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
成本与迭代次数
系统的训练和测试精度为100% 此实现用于二元逻辑回归。对于超过两个类的数据,必须使用softmax回归。 完整的代码:
**https://github.com/SSaishruthi/LogisticRegression_Vectorized_Implementation/blob/master/Logistic_Regression.ipynb **
作者:Saishruthi Swaminathan 原文链接 : https://towardsdatascience.com/logistic-regression-detailed-overview-46c4da4303bc
版权声明: 作者保留权利。文章为作者独立观点,不代表数据人网立场。严禁修改,转载请注明原文链接:http://shujuren.org/article/789.html
数据人网: 数据人学习,交流和分享的平台,诚邀您创造和分享数据知识,共建和共享数据智库。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 服务端指南 服务端概述 | 微服务架构概述
- centos创建逻辑卷和扩容逻辑卷
- AI「王道」逻辑编程的复兴?清华提出神经逻辑机,已入选ICLR
- 内聚代码提高逻辑可读性,用MCVP接续你的大逻辑
- 逻辑式编程语言极简实现(使用C#) - 1. 逻辑式编程语言介绍
- influxdb 源码分析-概述
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java常用算法手册
2012-5 / 59.00元
《Java常用算法手册》分三篇,共13章,分别介绍了算法基础、算法应用和算法面试题。首先介绍了算法概述,然后重点分析了数据结构和基本算法思想;接着,详细讲解了算法在排序、查找、数学计算、数论、历史趣题、游戏、密码学等领域中的应用;最后,列举了算法的一些常见面试题。书中知识点覆盖全面,结构安排紧凑,讲解详细,实例丰富。全书对每一个知识点都给出了相应的算法及应用实例,虽然这些例子都是以Java语言来编......一起来看看 《Java常用算法手册》 这本书的介绍吧!