【机器学习】Exam4

news/2024/9/13 16:46:12/ 标签: 机器学习, 人工智能

实现线性不可分logistic逻辑回归

我们目前所学的都是线性回归,例如 y = w 1 x 1 + w 2 x 2 + b y = w_1x_1+w_2x_2+b y=w1x1+w2x2+b
用肉眼来看数据集的话不难发现,线性回归没有用了,那么根据课程所学,我们是不是可以增加 x 3 = x 1 x x , x 4 = x 1 2 , x 5 = x 2 2 x_3=x_1x_x,x_4=x_1^2,x_5=x_2^2 x3=x1xx,x4=x12,x5=x22呢?那么逻辑回归就可以变成
y = w 1 x 1 + w 2 x 2 + w 3 x 3 + w 4 x 4 + w 5 x 5 + b y=w_1x_1+w_2x_2+w_3x_3+w_4x_4+w_5x_5+b y=w1x1+w2x2+w3x3+w4x4+w5x5+b

import numpy as np
import pandas as pd
from matplotlib import pyplot as pltdef sigmoid(x):return 1/(1+np.exp(-x))def compute_loss(X, y, w, b, lambada):m = X.shape[0]cost = 0.cost_gradient = 0.for i in range(m):z_i = sigmoid((np.dot(X[i], w) + b))cost += -y[i] * np.log(z_i) - (1 - y[i]) * np.log(1 - z_i)cost_gradient += w[i] ** 2return cost / m + lambada * cost_gradient / (2 * m)def compute_gradient_logistic(X, y, w, b, eta, lambada):m, n = X.shapedb_w = np.zeros(n)db_b = 0for i in range(m):z_i = sigmoid((np.dot(X[i], w) + b))err_i = z_i - y[i]for j in range(n):db_w[j] += err_i * X[i][j]db_b += err_ireturn db_w / m, db_b / mdef gradient_descent(X, y, w, b, eta, lambada, iterator):m, n = X.shapefor i in range(iterator):w_tmp = np.copy(w)b_tmp = bdb_w, db_b = compute_gradient_logistic(X, y, w_tmp, b, eta, lambada)db_w += lambada * w / mw = w - eta * db_wb = b - eta * db_breturn w, bif __name__ == '__main__':data = pd.read_csv(r'D:\BaiduNetdiskDownload\data_sets\ex2data2.txt')X_train = data.iloc[:, 0:-1].to_numpy()y_train = data.iloc[:, -1].to_numpy()x1 = (X_train[:, 0] * X_train[:, 1]).reshape(-1, 1)x2 = (X_train[:, 0] ** 2).reshape(-1, 1)x3 = (X_train[:, 1] ** 2).reshape(-1, 1)X_train = np.hstack((X_train, x1, x2, x3))w_tmp = np.zeros_like(X_train[0])b_tmp = 0.alph = 0.1lambada = 0.01iters = 10000w_out, b_out = gradient_descent(X_train, y_train, w_tmp, b_tmp, alph, lambada, iters)count = 0for i in range(X_train.shape[0]):ans = sigmoid(np.dot(X_train[i], w_out) + b_out)prediction = 1 if ans > 0.5 else 0if y_train[i] == prediction:count += 1print('Accuracy = {}'.format(count/X_train.shape[0]))print(w_out, b_out)plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train)# 绘制决策边界x_min, x_max = X_train[:, 0].min() - 0.1, X_train[:, 0].max() + 0.1y_min, y_max = X_train[:, 1].min() - 0.1, X_train[:, 1].max() + 0.1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),np.arange(y_min, y_max, 0.01))# 创建与网格形状匹配的特征grid = np.c_[xx.ravel(), yy.ravel()]print('grid_shape : {}'.format(grid.shape))grid_x1 = (grid[:, 0] * grid[:, 1]).reshape(-1, 1)grid_x2 = (grid[:, 0] ** 2).reshape(-1, 1)grid_x3 = (grid[:, 1] ** 2).reshape(-1, 1)grid_features = np.hstack((grid, grid_x1, grid_x2, grid_x3))# 计算网格点的预测值Z = sigmoid(np.dot(grid_features, w_out) + b_out)Z = Z.reshape(xx.shape)# 绘制决策边界plt.contour(xx, yy, Z, levels=[0.5], colors='g')# 显示图形plt.xlabel('x1')plt.ylabel('x2')plt.title('Decision Boundary')plt.show()
一些图

在这里插入图片描述

Accuracy = 0.8376068376068376
然后就是各个参数w1,w2,w3,w4,b
[ 2.12915132 2.82388529 -4.83135528 -8.64819153 -8.31828602] 3.7305124000753627


http://www.ppmy.cn/news/1475870.html

相关文章

【Linux】Vim 使用教程

Linux - Vim Vim 是一款在 Linux 系统中广泛使用的文本编辑器,它是 Vi 编辑器的升级版。Vim 不仅功能强大,而且可高度定制化,是许多程序员和系统管理员的首选工具。以下是 Vim 在 Linux 系统中的安装、配置和使用过程的详细讲解。 附注&…

Gitea 仓库事件触发Jenkins远程构建

文章目录 引言I Gitea 仓库事件触发Jenkins远程构建1.1 Jenkins配置1.2 Gitea 配置引言 应用场景:测试、生产环境的项目自动构建和部署 手动构建和部署 Gitea 仓库事件触发Jenkins远程构建I Gitea 仓库事件触发Jenkins远程构建 Gitea支持用于仓库事件的Webhooks 1.1 Jenkin…

3-2 多层感知机的从零开始实现

import torch from torch import nn from d2l import torch as d2lbatch_size 256 # 批量大小为256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size) # load进来训练集和测试集初始化模型参数 回想一下,Fashion-MNIST中的每个图像由 28 28 784…

GraphQL在Postman中:释放API查询的强大潜能

🚀 GraphQL在Postman中:释放API查询的强大潜能 Postman作为API开发和测试的领先工具,对GraphQL的支持为开发者提供了一种新的方式来查询和管理数据。GraphQL是一种查询语言,用于API,允许客户端明确指定他们需要哪些数…

Java数据结构-链表与LinkedList

链表 链表的概念 链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。 通俗来说,相比较于顺序表(物理上连续,逻辑上也连续),链表物理上不一定连续。 链表是…

OpenGL笔记十之Shader类的封装

OpenGL笔记十之Shader类的封装 —— 2024-07-10 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十之Shader类的封装1.运行2.目录结构3.main.cpp4.application4.1.CMakeLists.txt4.2.Application.h4.3.Application.cpp 5.assets5.1.shaders&#xf…

CentOS7 安装 git 命令

通过yum源install下载的git版本比较低,不推荐此方式安装。 官网下载最新版git源码:Git 1. 解压安装包 tar -xzvf git-2.45.2.tar.gz 2. 安装相关依赖 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils…

【qt】正则表达式来判断是否为邮箱登录

正则表达式是用来匹配字符串的神器. 在Qt中我们需要使用到QRegExp这个类 用exactMatch来进行匹配. [] 使用方括号 [] 来定义字符类,表示匹配方括号内的任意一个字符 A-Za-z0-9是字符的匹配范围. 是用于指定字符或字符类出现的次数,常见的如下 *(匹配 0…

07:串口通信二

串口编程 1、与波特率之相关的寄存器2、PCON寄存器3、SCON寄存器4、配置的代码分析5、向PC发送一段字符串6、PC机向单片机发送字符控制LED1灯的亮灭 1、与波特率之相关的寄存器 如图,与串口通信相关的寄存器主要是SCON和PCON寄存器。 2、PCON寄存器 SMOD&#xff1…

【postgresql】锁

PostgreSQL 提供了多种锁模式来控制对表和行的并发访问,以确保数据的一致性和完整性。这些锁模式包括表级锁和行级锁,它们可以由应用程序显式控制,也可以在执行大多数 PostgreSQL 命令时自动获取。 锁类型 PostgreSQL类型的锁包括&#xff…

git 提交远程仓库 方式

第一种方式: git init //初始化 gitgit clone https://github.com/luckygilrhpp/gitTest.git //克隆远程仓库代码将要提交的文件夹复制到这个clone的远程仓库里面 第二种方式: git init git remote add origin https://github.com/lucky…

Python调用摄像头

以下是一个使用 Python 调用摄像头的简单示例代码,需要使用 opencv-python 库: python 复制 import cv2 # 创建一个 VideoCapture 对象来捕获摄像头的视频 cap cv2.VideoCapture(0) # 0 表示默认的摄像头 while True: # 读取一帧视频 ret…

Pytorch中nn.Sequential()函数创建网络的几种方法

1. 创作灵感 在创建大型网络的时候,如果使用nn.Sequential()将几个有紧密联系的运算组成一个序列,可以使网络的结构更加清晰。 2.应用举例 为了记录nn.Sequential()的用法,搭建以下测试网络&…

Spring系列二:基于XML配置bean 中

基于XML配置bean 💖使用utillist进行配置💖属性级联赋值配置💖通过静态工厂获取bean💖bean配置信息重用💖bean创建顺序💖bean的单例和多实例💖bean的生命周期 💖使用utillist进行配置…

洞察解读:“李彦宏:不只迷恋模型,更应追求应用”

目录 洞察解读:“李彦宏:不只迷恋模型,更应追求应用” 模型与应用的区别与联系 个性化应用的重要性与挑战 从技术到应用的转化 展望未来 结语 洞察解读:“李彦宏:不只迷恋模型,更应追求应用” 在当前人工智能技术飞速发展的…

Qt 统计图编程

学习目标:Qt 折线图,柱形图和扇形统计图编程 学习基础 Qt QChart 曲线图表操作-CSDN博客 学习内容 Qt中绘制三种常见的图表非常方便, 主要步骤如下: 1. 折线图: - 使用QLineSeries定义折线数据,添加多个坐标点 - 使用QValueAxis创建X轴和Y轴 - 将…

ShardingSphere的项目应用

1. 事情的起因 最近,随着业务的发展,我们的项目面临着日益增长的数据挑战。系统使用的数据库是mysql,每天的增量差不多在百万左右,由于没有进行分库分表,以前设置的单表保存已经越发不能满足需求,所以想维持表的性能,甲方考虑对这些大数据量的表进行分表操作,同时也采…

【香橙派AiPro】基于VGG16的火灾检测模型预测

目录 引言开发板介绍开发板使用准备工作工具文档 拨码开关镜像烧录连接开发板下载MobaXterm网线-SSH连接开发板设置WIFI连接WIFI-SSH连接开发板确定开发板IP方法 Vnc可视化WindowsiPad 开发工具安装 散热风扇基于VGG16的火灾检测模型预测数据集准备目录结构代码操作 安装宝塔最…

自动驾驶的规划控制简介

自动驾驶的规划控制是自动驾驶系统中的核心组成部分,它负责生成安全、合理且高效的行驶轨迹,并控制车辆按照这个轨迹行驶。规划控制分为几个层次,通常包括行为决策(Behavior Planning)、轨迹规划(Trajector…

docker build 建立镜像,多出很多 none 的中间层镜像

虚悬镜像 仓库名、标签均为的镜像被称为虚悬镜像,一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的。 出现虚悬镜像的原因一般是在docker pull **:latest 时产生。当新版本发布后重新pull,旧的镜像名会被新镜像所占用&a…