MLA Review之四:logistic回归

2024-05-09 07:58

本文主要是介绍MLA Review之四:logistic回归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

终于来到logistic回归,logistic回归其实很简单,之前的说到的神经网络就用到了这个方法,其中最重要的就是使用了sigmoid损失函数。当然使用的方法也就最简单的梯度下降法,这里并没有使用之前神经网络的随机梯度下降法,也是为了简单起见。因为之前在神经网络里面使用过了,所以这篇文章就略微介绍下。

 

logistic回归是属于广义线性回归的一种,基本形式:

z=w0+w1*x1+w2*x2+...+wn*xn

s=1/(1+exp(-z))

损失函数:1/2* (s-y)^2

 

然后按照梯度下降方法求解参数即可

 

代码如下:

 

Python代码   收藏代码
  1. # -*- coding: UTF8 -*-  
  2. """ 
  3. author:luchi 
  4. date:16/2/19 
  5. desc: 
  6.     logistic回归,最常用的回归问题,虽然是回归但是更多的是用到了分类的问题上 
  7.     其主要的函数是sigmoid,以及使用的训练参数方法也是最常使用的梯度下降法 
  8. """  
  9. import math  
  10. import numpy as np  
  11. def loadDataset():  
  12.   
  13.     retDataset=[]  
  14.     retLabels=[]  
  15.     fr=open("testSet.txt")  
  16.     for str in fr.readlines():  
  17.         strList=str.strip().split()  
  18.         retDataset.append([1.0,float(strList[0]),float(strList[1])])  
  19.         retLabels.append(int(strList[2]))  
  20.     return retDataset,retLabels  
  21.   
  22. """ 
  23. 计算sigmoid函数 
  24. """  
  25. def sigmoid(inX):  
  26.     return 1.0/(1+np.exp(-inX))  
  27.   
  28. """ 
  29. 梯度下降方法训练参数 
  30. """  
  31. def GradientDecrease(epoch,dataset,labels,alpha):  
  32.   
  33.     weight=np.ones((len(dataset[0]),1)) #初始化权重  
  34.     weightMat=np.mat(weight)  
  35.     datasetMat=np.mat(dataset)  
  36.     labelsMat=np.mat(labels).transpose()  
  37.   
  38.     size=len(dataset)  
  39.     for i in range(epoch):  
  40.   
  41.         result=datasetMat*weightMat  
  42.         result=sigmoid(result)  
  43.   
  44.         error=result-labelsMat  
  45.         # print result  
  46.         # print 1-result  
  47.         grad=np.multiply(result,1-result)  
  48.         # print grad  
  49.         # print alpha*multiply(multiply(error,grad),datasetMat)  
  50.         nweightMat=np.multiply(np.multiply(error,grad),datasetMat)  
  51.         # print np.sum(nweightMat,axis=0)/float(size)  
  52.         weightMat=weightMat-alpha*(np.sum(nweightMat,axis=0)/float(size)).transpose()  
  53.         # print weightMat  
  54.     # print weightMat  
  55.     return weightMat  
  56.   
  57.   
  58.   
  59. def plotBestFit(weights):  
  60.     import matplotlib.pyplot as plt  
  61.     dataMat,labelMat=loadDataset()  
  62.     dataArr = np.array(dataMat)  
  63.     n = np.shape(dataArr)[0]  
  64.     xcord1 = []; ycord1 = []  
  65.     xcord2 = []; ycord2 = []  
  66.     for i in range(n):  
  67.         if int(labelMat[i])== 1:  
  68.             xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2])  
  69.         else:  
  70.             xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2])  
  71.     fig = plt.figure()  
  72.     ax = fig.add_subplot(111)  
  73.     ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')  
  74.     ax.scatter(xcord2, ycord2, s=30, c='green')  
  75.     x = np.arange(-3.03.00.1)  
  76.     y = (-weights[0]-weights[1]*x)/weights[2]  
  77.     print len(y)  
  78.     ax.plot(x, y)  
  79.     plt.xlabel('X1'); plt.ylabel('X2');  
  80.     plt.show()  
  81.   
  82. dataset,labels=loadDataset()  
  83.   
  84. # dataset=np.array([[1,1,2],[1,2,3]])  
  85. # labels=np.array([0,1])  
  86. weights=GradientDecrease(500,dataset,labels,alpha=0.25)  
  87. print weights  
  88. plotBestFit(np.array(weights))  

 结果如下:



 

从图中可以看出效果还不错。

 

logistic回归是一种比较简单的方法,与其说是回归,其实更多的可以将其列为二元分类问题,因为sigmoid函数的特点,而且据说logistic回归在现实工作中还运用的比较多,可见并不是都是要高大上的东西才有运用空间,只要实用,也是不错的

 

最后说一说在Python里面有自带的sum函数,例如计算a=[1,2,3] sum(a)即为6,但是程序中使用到的是numpy里面的sum函数,numpy里面的sum函数还可以设置第二个参数,sum(a,axis),其中a就是array数组或者矩阵,axis=0表示按列求和,axis=1表示按行求和,这点需要注意。另外如果涉及到array或者矩阵的math运算,需要使用numpy里面的相对应的math函数,因此程序中是import numpy as np,然后使用np.log()等等,这点需要注意的

这篇关于MLA Review之四:logistic回归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/972831

相关文章

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

J.U.C Review - ThreadLocal原理源码分析

文章目录 一致性问题一致性问题简介解决一致性问题的常见方法 ThreadLocal什么是 ThreadLocalThreadLocal 的 线程模型ThreadLocal 的工作原理使用场景ThreadLocal 的基本 API1. 构造函数 `ThreadLocal()`2. 初始化方法 `initialValue()`3. 访问器 `get()` 和 `set()`4. 回收方法 `re

深度学习与大模型第3课:线性回归模型的构建与训练

文章目录 使用Python实现线性回归:从基础到scikit-learn1. 环境准备2. 数据准备和可视化3. 使用numpy实现线性回归4. 使用模型进行预测5. 可视化预测结果6. 使用scikit-learn实现线性回归7. 梯度下降法8. 随机梯度下降和小批量梯度下降9. 比较不同的梯度下降方法总结 使用Python实现线性回归:从基础到scikit-learn 线性

【python因果推断库11】工具变量回归与使用 pymc 验证工具变量4

目录  Wald 估计与简单控制回归的比较 CausalPy 和 多变量模型 感兴趣的系数 复杂化工具变量公式  Wald 估计与简单控制回归的比较 但现在我们可以将这个估计与仅包含教育作为控制变量的简单回归进行比较。 naive_reg_model, idata_reg = make_reg_model(covariate_df.assign(education=df[

什么是GPT-3的自回归架构?为什么GPT-3无需梯度更新和微调

文章目录 知识回顾GPT-3的自回归架构何为自回归架构为什么架构会影响任务表现自回归架构的局限性与双向模型的对比小结 为何无需梯度更新和微调为什么不需要怎么做到不需要 🍃作者介绍:双非本科大四网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发,目前开始人工智能领域相关知识的学习 🦅个人主页:@逐梦苍穹 📕所属专栏:人工智能 🌻gitee地址:x

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出 目录 回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出预测效果基本介绍模型介绍PSO模型LSTM模型PSO-LSTM模型 程序设计参考资料致谢 预测效果 Matlab实现PSO-LSTM多变量回归预测 1.input和outpu

【ML--04】第四课 logistic回归

1、什么是逻辑回归? 当要预测的y值不是连续的实数(连续变量),而是定性变量(离散变量),例如某个客户是否购买某件商品,这时线性回归模型不能直接作用,我们就需要用到logistic模型。 逻辑回归是一种分类的算法,它用给定的输入变量(X)来预测二元的结果(Y)(1/0,是/不是,真/假)。我们一般用虚拟变量来表示二元/类别结果。你可以把逻辑回归看成一种特殊的线性回归,只是因为最后的结果是类别变

逻辑回归与线性回归的目标函数和应用场景比较

概述 逻辑回归和线性回归是两种常用的预测模型,它们在目标函数和应用场景上存在显著差异。本文将详细比较这两种回归模型,并提供相应的代码示例。 线性回归 线性回归是一种预测连续数值的模型,其目标是找到特征( X )和目标变量( Y )之间的线性关系。线性回归的目标函数是最小化预测值和实际值之间的平方差,即均方误差(MSE)。 目标函数 线性回归的损失函数是均方误差: [ J(\theta)

J.U.C Review - Stream并行计算原理源码分析

文章目录 Java 8 Stream简介Stream单线程串行计算Stream多线程并行计算源码分析Stream并行计算原理Stream并行计算的性能提升 Java 8 Stream简介 自Java 8推出以来,开发者可以使用Stream接口和lambda表达式实现流式计算。这种编程风格不仅简化了对集合操作的代码,还提高了代码的可读性和性能。 Stream接口提供了多种集合