一、逻辑回归基本流程

1、逻辑回归

从一组样本的多个特征值中学习规律,建立模型(学习的模型抽象为一个公式f(x)),用这个模型来预测其他样本的结果。而逻辑回归是将预测结果分类。
逻辑回归步骤:
(1)将x的值归一化
(2)写权重函数z=w1x1+w2x2+…+wixi
(3)写激活函数a=σ(z)
(4)写损失函数L=-ylog(a)-(1-y)log(1-a)
(5)做梯度下降w=w-αdw
(6)用训练好的权重参数w做预测

2、激活函数

针对每个特征设权重wi,计算出的z=f(x)会有很多值,想把计算结果z归类到0和1之间,要用激活函数sigmoid:y=1/(1+e^(-z)),这时得到的就是预测值。
激活函数的特点:连续且可导、非线性变换。
激活函数有很多,如sigmoid(0,1),tanh(-1,1),Relu(z>0则=z;z<0则=0)

3、损失函数

损失函数的作用:
(1)建立真实值和预测值之间的一种联系,L=-ylog(a)-(1-y)log(1-a)
(2)能衡量真实值和预测值之间的差距,当y等于0时可以算出L的值,也就知道了差距
(3)通过a、y之间的差距能反推权重w和b

4、梯度下降与学习率

损失函数实质是L与W之间的函数,梯度下降能不断找到使损失函数取最小值的w。
学习率控制权重w每次迭代的步长。

5、归一化

(1)x’=(x-xmin)/(xmax-xmin)
(2)x’=(x-均值)/标准差
归一化的公式有很多,目的是加快模型收敛速度,防止模型训练走很多弯路。

二、鸢尾花实战

项目描述:根据鸢尾花花萼长度与宽度的特征数据统计,对其进行逻辑回归分类
数据特征:花萼长度、花萼宽度
类别标签:0-山鸢尾、1-杂色鸢尾、2-维吉尼亚鸢尾
第一步:导入numpy,matplotlib,数据集

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

第二步:可视化数据,分析数据

iris = load_iris()
iris.feature_names,
iris.target_names
iris.data/#能看特征数据的具体信息
iris.target/#能看每行数据的标签的值
##取100个样本,取前两列特征,花萼长度和宽度
x=iris.data[0:100,0:2]
y=iris.target[0:100]
##分别取前两类样本,0和1
samples_0 = x[y==0, :]#把y=0的样本取出来
samples_1 = x[y==1, :]
#散点图可视化
plt.scatter(samples_0[:,0],samples_0[:,1],marker='o',color='r')
plt.scatter(samples_1[:,0],samples_1[:,1],marker='x',color='b')
plt.xlabel('X')
plt.ylabel('Y')


第三步:分拆数据,80个训练数据,20个测试数据

x_train=np.vstack([x[:40,:],x[60:100,:]])#取前40和后40的数据
y_train=np.concatenate([y[:40],y[60:100]])
x_test=x[40:60,:]
y_test=y[40:60]

第四步:逻辑回归算法的实现

class Logistic_Regression():def __init__(self):self.w=Nonedef sigmoid(self,z):a=1/(1+ np.exp(-z))return adef output(self,x):z=np.dot(self.w,x.T)a=self.sigmoid(z)return adef compute_loss(self,x,y):num_train=x.shape[0]a=self.output(x)loss=np.sum(-y*np.log(a)-(1-y)*np.log(1-a))/num_traindw=np.dot((a-y),x)/num_trainreturn loss,dwdef train(self,x,y,learning_rate=0.01,num_iterations=10000):num_train,num_features=x.shapeself.w=0.001*np.random.randn(1,num_features)loss=[]for i in range(num_iterations):error,dw=self.compute_loss(x,y)loss.append(error)self.w-=learning_rate*dwif i%200==0:print('steps:[%d/%d],loss:%f'%(i,num_iterations,error))return lossdef predict(self,x):a=self.output(x)y_pred=np.where(a>=0.5,1,0)return y_pred

第五步:创建lr实例,训练模型

lr=Logistic_Regression()
loss=lr.train(x_train,y_train)
plt.plot(loss)
##决策边界可视化
plt.scatter(samples_0[:,0],samples_0[:,1],marker='o',color='r')
plt.scatter(samples_1[:,0],samples_1[:,1],marker='x',color='b')
plt.xlabel('x')
plt.ylabel('y')
x1=np.arange(4,7.5,0.05)
x2=(-lr.w[0][0]*x1)/lr.w[0][1]
#sigmoid=1/(1+np.exp(-x))
#x1*w1+x2*w2=0
plt.plot(x1,x2,'-',color='black')

第六步:测试集上预测

num_test=x_test.shape[0]
prediction=lr.predict(x_test)
accuracy=np.sum(prediction==y_test)/num_test
print(r'the accuracy of prediction is :', accuracy)

逻辑回归基本流程及鸢尾花项目实战相关推荐

  1. 【机器学习】逻辑回归案例二:鸢尾花数据分类,决策边界绘制逐步代码讲解

    逻辑回归案例二:鸢尾花数据分类,决策边界绘制逐步代码讲解 1 数据加载 2 数据EDA 3 模型创建及应用 3.1 数据切分 3.2 创建模型与分类 3.3 决策边界绘制 3.3.1 二分类决策边界绘 ...

  2. 【机器学习】逻辑回归-基础认识与鸢尾花分类实操案例

    文章目录 前言 一.基本理解 二.数学原理 三.简单二元分类算法实现 四.实战案例 总结 前言 本文将会对逻辑回归的基础理解,数学原理,简单算法实现,鸢尾花分类问题实操案例去学习我们的逻辑回归. 一. ...

  3. orange实现逻辑回归_分别用逻辑回归和决策树实现鸢尾花数据集分类

    学习了决策树和逻辑回归的理论知识,决定亲自上手尝试一下.最终导出决策树的决策过程的图片和pdf.逻辑回归部分参考的是用逻辑回归实现鸢尾花数据集分类,感谢原作者xiaoyangerr 注意:要导出为pd ...

  4. 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战

    逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...

  5. python实现逻辑回归的流程_逻辑回归原理及其python实现

    September 28, 2018 7 min to read 逻辑回归原理及其python实现 原理 逻辑回归模型: $h_{\theta}(x)=\frac{1}{1+e^{-{\theta}^ ...

  6. 用逻辑回归对用户分类 (理论+实战)

    2019独角兽企业重金招聘Python工程师标准>>> 如果你在运营一个2C的平台,那么你肯定关心用户流失的问题.腾讯有个产品叫信鸽Pro,它能够通过对用户往期行为的挖掘,预测用户潜 ...

  7. mllib逻辑回归 spark_《Spark大数据分析实战》笔记

    写在前面:此书很棒,但需要一定的编程功底,此外强烈建议买书,因为很多架构图.算子列表,我也不会摘抄下来. 第一章 简介 1.Spark执行的特点 Hadoop中包含计算框架MapReduce和分布式文 ...

  8. 逻辑回归分类鸢尾花和红酒等级

    逻辑回归分类鸢尾花和红酒等级 源代码以及训练数据和测试数据已上传:https://download.csdn.net/download/j__max/10816259 一.实验准备 1.实验内容和目的 ...

  9. 数据量大了一定要分表,分库分表 Sharding-JDBC 入门与项目实战

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:juejin.im/post/684490418236581 ...

最新文章

  1. panda对于EXCEL单元赋值如何能够设置string?
  2. xcode升级xcode9 1之后报错swift stdlib tool error
  3. springboot中的拦截器interceptor和过滤器filter,多次获取request参数
  4. 互联网晚报 | 11月7日 星期日 | EDG夺得《英雄联盟》S11总冠军;拼多多推出“超拼夜”系列;VMware与戴尔完成分拆...
  5. redis原理解析与案例分享
  6. 如何进行产品规划?一次实战演练给出具体步骤
  7. Lambda表达式实现有限状态机
  8. 从零开始学 Web 之 jQuery(二)获取和操作元素的属性
  9. 关于STM32F107移植到GD32F307后,固件不断重启的一个解决方式
  10. 如何在html中加入注释,HTML如何加脚注(注释)?
  11. 游戏开发者“谈虎色变”的游戏审批流程到底是怎么一回事?
  12. matlab烟花动图程序,用PS制作漂亮烟花绽放效果的GIF图片
  13. C语言编程学习不难学,是你没找对方法!
  14. 南京廖华微型计算机原理答案,微机原理课后习题答案解析
  15. lepus(天兔)的安装与使用
  16. 娶一位俄罗斯姑娘当老婆是一种什么样的感觉?
  17. 智慧灯杆网关的单灯控制与边缘计算功能
  18. 在CODESYS中通过EtherCAT总线驱动单个电机
  19. joyful pandas第1章 Pandas基础
  20. sap 质检单位_sap质量管理-质检手册.doc

热门文章

  1. 基于BP神经网络算法的实现静态图片和视频人脸识别、性别识别
  2. 基于Java的奖学金评定管理系统
  3. 360云服务器关闭后,360云盘宣布关闭!7个问题回答告诉你关闭之后怎么办?
  4. 第十二届noc网络机器人赛项成绩_我省在第十二届中小学NOC活动决赛中获佳绩
  5. 通过网线连接获取树莓派的ip地址
  6. ctf练习之闯关游戏
  7. c语言结构体类型变量在程序运行期间(),C语言结构体类型变量在程序运行期间( )...
  8. 在vop中重构transform节点(一)
  9. 多通道国产源表之VCSEL老化测试
  10. 图像处理(3):深度学习之图像分类(垃圾分类案例)