逻辑回归(二)

逻辑回归

在学习逻辑回归之前我们先回顾一下线性回归。线性回归解决的是回归问题,简单来说就是,我们需要找到一个函数,这个函数需要尽可能的拟合所有训练集的样本点。
在这里插入图片描述

逻辑回归解决的是分类问题,它的目标是找到一个函数,利用这个函数尽可能把不同种类的数据区分开来。利用sigmod激活函数可以将前面类似线性回归的计算结果映射为离散值。
在这里插入图片描述
通过激活函数我们可以将下面图片中不同位置的点映射为不同的离散值。
需要注意:这个图横纵坐标都是自变量X,跟上面的线性回归是有区别的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/743fbcb1b1204c91be6cbd24d37fd010.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zi_5p2-5Li2,size_20,color_FFFFFF,t_70,g_se,x_16在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import classification_report
from sklearn import preprocessing
# 数据是否需要标准化
scale = False# 画图正常显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号def sigmoid(x):return 1.0 / (1 + np.exp(-x))def cost(xMat, yMat, ws):left = np.multiply(yMat, np.log(sigmoid(xMat * ws)))right = np.multiply(1 - yMat, np.log(1 - sigmoid(xMat * ws)))return np.sum(left + right) / -(len(xMat))def gradAscent(xArr, yArr):if scale == True:xArr = preprocessing.scale(xArr)xMat = np.mat(xArr)yMat = np.mat(yArr)# 学习率lr = 0.001# 迭代次数epochs = 10000# 申明一个列表用来存储losscostList = []# 计算数据行列数# 行代表数据个数,列代表权值个数m, n = np.shape(xMat)# 初始化权值ws = np.mat(np.ones((n, 1)))for i in range(epochs + 1):# xMat和weights矩阵相乘h = sigmoid(xMat * ws)# 计算误差ws_grad = xMat.T * (h - yMat) / mws = ws - lr * ws_gradif i % 50 == 0:costList.append(cost(xMat, yMat, ws))return ws, costListdef plot(x_data, y_data):x0 = []x1 = []y0 = []y1 = []# 切分不同类别的数据for i in range(len(x_data)):if y_data[i] == 0:x0.append(x_data[i, 0])y0.append(x_data[i, 1])else:x1.append(x_data[i, 0])y1.append(x_data[i, 1])# 画图scatter0 = plt.scatter(x0, y0, c='b', marker='o')scatter1 = plt.scatter(x1, y1, c='r', marker='x')# 画图例plt.title("训练数据集散点分布")plt.xlabel("自变量:x0")plt.ylabel("自变量:x1")plt.legend(handles=[scatter0, scatter1], labels=['label0', 'label1'], loc='best')plt.savefig("LR_scatter.png")# plt.show()def plot_result(ws,x_data,y_data):# 画图决策边界plot(x_data,y_data)x_test = [[-4],[3]]y_test = (-ws[0] - x_test*ws[1])/ws[2]plt.plot(x_test, y_test, 'k')plt.savefig("LR_result.png")plt.show()def plot_loss(costList):# 画图 loss值的变化x = np.linspace(0, 10000, 201)plt.plot(x, costList, c='r')plt.title('Train')plt.xlabel('Epochs')plt.ylabel('Cost')plt.savefig("LR_Loss.png")plt.show()# 预测
def predict(x_data, ws):if scale == True:x_data = preprocessing.scale(x_data)xMat = np.mat(x_data)ws = np.mat(ws)return [1 if x >= 0.5 else 0 for x in sigmoid(xMat*ws)]def train():# 载入数据data = np.genfromtxt("LR-testSet.csv", delimiter=",")x_data = data[:, :-1]y_data = data[:, -1]# 绘制散点图plot(x_data, y_data)# 数据处理,添加偏置项x_data = data[:, :-1]y_data = data[:, -1, np.newaxis]print("x_data的数据形状为:", np.mat(x_data).shape)print("y_data的数据形状为:", np.mat(y_data).shape)# 给样本添加偏置项X_data = np.concatenate((np.ones((100, 1)), x_data), axis=1)print("x_data添加偏执后X_data的数据形状为:", X_data.shape)# 训练模型,得到权值和cost值的变化ws, costList = gradAscent(X_data, y_data)print("训练后得到的权值列表为:", ws)print("保存决策边界结果图像")plot_result(ws, x_data, y_data)predictions = predict(X_data, ws)print(classification_report(y_data, predictions))print("保存loss下降结果……")plot_loss(costList)if __name__ == '__main__':train()

运行结果:
x_data的数据形状为: (100, 2)
y_data的数据形状为: (100, 1)
x_data添加偏执后X_data的数据形状为: (100, 3)
训练后得到的权值列表为: [[ 2.05836354]
[ 0.3510579 ]
[-0.36341304]]
保存决策边界结果图像
precision recall f1-score support

     0.0       0.82      1.00      0.90        471.0       1.00      0.81      0.90        53accuracy                           0.90       100

macro avg 0.91 0.91 0.90 100
weighted avg 0.92 0.90 0.90 100

保存loss下降结果……

输出图片:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios 顶部tab滑动实现_iOS开发之多表视图滑动切换示例(仿头条客户端)

好长时间没为大家带来iOS开发干货的东西了,今天给大家分享一个头条新闻客户端各个类别进行切换的一个示例。在Demo中对所需的组件进行的简单封装,在封装的组件中使用的是纯代码的形式,如果想要在项目中进行使用,稍微进行修改即可。…

上元节的灯会(灭)-区间dp

题目背景 上元节的庙会上,牛宝靠自己的聪明才智成功破解了花灯阵,点亮了在场所有花灯,但他没料到的是这个游戏包含AB两个项目,A项目就是点亮所有花灯,而B项目则是熄灭所有花灯。不过点亮的是花灯阵,熄灭的…

Asp.Net Core 中IdentityServer4 授权中心之应用实战

一、前言查阅了大多数相关资料,搜索到的IdentityServer4 的应用文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应用分析中会以一个电商系统架构升级过程中普遍会遇到的场景进行实战性讲述分析,…

交通标志识别项目教程

项目结构图 下载好项目压缩包后解压,得到以上的文件,首先将画红圈的文件删除(如果有) 安装软件 安装Anaconda 安装Pycharm 安装格式工厂 在上图中这个位置输入cmd回车,即可打开命令终端。用这样的方式打开命令终端…

内存超频trfc_这只是开始?四款DDR4内存超频效果对比

原标题:这只是开始?四款DDR4内存超频效果对比之前有人说DDR4内存的频率极限是5000MHz,但在最近结束的台湾电脑展上,有些内存的默认频率已经达到了4400MHz,看样子5000MHz的频率极限很快要实现了,由此也说明5…

素数-试除法和埃式筛选法模板

试除法&#xff1a; bool is_prime(int n) {if (n < 1) return false;for (int i 2;i<sqrt(n);i)//这样写更好!if (n % i0) return false;return true; }埃式筛选法&#xff1a; const int N 1e7; int prime[N 1]; bool vis[N 1];int n_prime(int n) {int k 0;mem…

C# 视频监控系统

去过工厂或者仓库的都知道&#xff0c;在工厂或仓库里面&#xff0c;会有很多不同的流水线&#xff0c;大部分的工厂或仓库&#xff0c;都会在不同流水线的不同工位旁边安装一台电脑&#xff0c;一方面便于工位上的师傅把产品的重要信息录入系统&#xff0c;便于公司系统数据采…

sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比

机器学习xueyifeiyun1989zx&#xff0c;公众号&#xff1a;围着围巾的小黑机器学习之监督学习实战前文我们提到机器学习中的监督学习&#xff0c;其中有一个模型是我们提到的但是没有训练测试的&#xff0c;叫做支持向量机(简称SVM)。支持向量机也是监督学习里面一个非常容易理…

7的序列-数论

题目背景 墨家机关城即将被攻陷&#xff0c;墨家家主无意间发现了一道逃生密道&#xff0c;但这道密道需要密码&#xff0c;机智的你决定参与密码的破译。 题目描述 密码门上有两行数字序列&#xff0c;数字均为非负整数&#xff0c;根据门上的古语&#xff0c;你需要求出满足…

程序员过关斩将--从每秒6000写请求谈起

点击上方“蓝字”关注我们菜菜哥&#xff0c;紧急求助呀怎么回事&#xff1f;产品经理砍你了&#xff1f;没有&#xff0c;只是写了个新项目&#xff0c;上线就被压垮了什么功能&#xff0c;这么强悍&#xff1f;一个记录用户观看视频进度信息的功能那如果用户基数大&#xff0…

批量将PPM格式图片转化为JPG格式

将PPM格式图片转化为JPG格式 做图像识别的时候数据集常常是ppm格式的&#xff0c;虽然不影响建模训练&#xff0c;但是我们电脑往往不支持ppm格式的图像展示。 比如到做交通标志识别的时候用到的BelgiumTS交通数据集或者德国GTSRB数据集 下载后得到都是ppm格式的图像。 格式转…

python数据收集整理教案_数据收集整理教案讲解学习

一、数据收集整理第一课时教学目标初步体验数据收集、整理、描述的过程&#xff0c;会用分类数数的方法将数据整理成简单的统计表&#xff0c;初步认识统计表&#xff0c;能正确填写统计表&#xff0c;能从中获得简单统计的结果。通过对学生身边有趣事例的调查活动&#xff0c;…

hdu1873 看病要排队-优先队列

Problem Description 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察&#xff0c;他发现了医院里排队还是有讲究的。0068所去的医院有三个医生&#xff08;汗&#xff0c;这么少&#xff09;同时看病。而看病的人病情有轻重&#xff0c;所以不能根据简单的先来…

Magicodes.IE 2.2里程碑需求和建议征集

简介Magicodes.IE是导入导出通用库&#xff0c;支持Dto导入导出以及动态导出&#xff0c;支持Excel、Word、Pdf、Csv和Html。已加入NCC开源组织。Magicodes.IE 2.0发布Github&#xff1a;https://github.com/dotnetcore/Magicodes.IE码云&#xff08;手动同步&#xff0c;不维护…

启动azkaban报错_解决启动Azkaban报错问题:java.lang.NoSuchMethodError: com.google.comm

问题描述&#xff1a;启动Azkaban报错&#xff1a;java.lang.NoSuchMethodError:com.google.common.collect.ImmutableMap.toImmutableMap解决方法&#xff1a;从报错信息来看&#xff0c;是找不到toImmutableMap这个方法。首先找到类ImmutableMap对应的Jar包为guava&#xff0…

(一)tensorflow笔记:Tensor数据类型

常见的数据类型载体 listnp.arraytf.tensor list: 可以存储不同数据类型&#xff0c;缺点不适合存储较大的数据&#xff0c;如图片 np.array: 解决同类型大数据数据的载体&#xff0c;方便数据运算&#xff0c;缺点是在深度学习之前就设计好的&#xff0c;不支持GPU tf.ten…

吃鸡蛋-优先队列

题目描述 小林养了一只母鸡&#xff0c;一连 n 天&#xff0c;每天都可以生下若干个鸡蛋。在第 i 天&#xff0c;母鸡会生下 eggs[i] 个鸡蛋&#xff0c;这些鸡蛋将会在days[i] 天后&#xff08;也就是说&#xff0c;第 i days[i] 天时&#xff09;腐烂&#xff0c;变得无法食…

交通标志识别教程(二)

项目结构图 下载好项目压缩包后解压&#xff0c;得到以上的文件&#xff0c;首先将画红圈的文件删除&#xff08;如果有&#xff09; 安装软件 解压软件包 安装Anaconda 直接下一步&#xff0c;到了这个页面全部勾选&#xff0c;否则不会添加添加环境变量。 安装Pycharm …

深度长文:Power Automation 帮助企业实现数字化转型

01自动化始于您在Ignite 2019上&#xff0c;我们宣布将Flow更改为Power Automate&#xff0c;并在UI Flow连接器的公开预览中引入了机器人流程自动化&#xff08;RPA&#xff09;。我们对几种激动人心的功能感到兴奋&#xff0c;这些功能将在今年全面上市&#xff0c;并想花一点…

数字电路技术可能出现的简答题_数字电子技术复习题(本科)

1数字电子技术复习题(本科)一、简答题&#xff1a;1、简述组合电路和时序电路各自的特点是什么&#xff1f;答&#xff1a;组合电路的特点&#xff1a;任何时刻电路的稳定输出&#xff0c;仅取决于该时刻各个输入变量的取值&#xff0c;组合电路是由门电路组合而成&#xff0c;…