内容简介:逻辑回归在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 源码分析-概述
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python Algorithms
Magnus Lie Hetland / Apress / 2010-11-24 / USD 49.99
Python Algorithms explains the Python approach to algorithm analysis and design. Written by Magnus Lie Hetland, author of Beginning Python, this book is sharply focused on classical algorithms, but it......一起来看看 《Python Algorithms》 这本书的介绍吧!