吴恩达老师机器学习-ex8

data1

导入库,读取数据并进行可视化

因为这次的数据是mat文件,需要使用scipy库中的loadmat进行读取数据。

通过对数据类型的分析,发现是字典类型,查看该字典的键,可以发现又X等关键字。

import numpy as np
import scipy.io as sio
import matplotlib.pyplot as plt#读取数据
path = "./ex8data1.mat"
data = sio.loadmat(path)
# print(data.keys())
X = data.get("X")
Xval = data.get("Xval")
yval = data.get("yval")
# print(X.shape)#可视化数据
plt.scatter(X[:,0],X[:,1])
plt.show()

开发异常检测系统的步骤:

  1. 选择合适的特征变量x_{j}
  2. 拟合参数(\mu _{1},\mu _{2},\mu _{3},...,\mu _{n},\sigma _{1}^{2},\sigma _{2}^{2},\sigma _{3}^{2},...,\sigma _{n}^{2})。其中\mu _{j}=\frac{1}{m}\sum_{i=1}^{m}x_{j}^{(i)}\sigma ^{2}=\frac{1}{m}\sum_{i=1}^{m}(x_{j}^{(i)}-\mu _{j})^{2}
  3. 对于给定的x_{test}计算P(x_{test})=\prod_{j=1}^{n}P(x_{test};\mu ,\sigma ^{2})=\prod_{j=1}^{n}\frac{1}{\sqrt{2\pi }\sigma _{j}}exp(-\frac{(x_{i}-\mu _{i})^{2}}{2\sigma ^{2}})
  4. 如果P(x_{test})\geq \varepsilon,则认为该样本正常;如果P(x_{test})< \varepsilon,则认为该样本异常。

我们可以通过可视化数据发现,数据之间并没有线性相关。所以在这,我采用的是一般的高斯分布模型。

首先,计算数据集的平均值以及方差。

#求均值和方差
def fit_parameters(X):m = len(X)means = np.mean(X,axis=0)cov = np.var(X,axis=0)return means,cov

然后,计算密度估计。

#进行密度估计
def probability(X,means,cov):m = len(X)p = np.exp(-np.power(X-means,2)/(2 * cov))/((np.power(2 * np.pi, 0.5) * np.power(cov, 0.5)))p_new = np.ones((m,1))for i in range(p.shape[1]):for j in range(p.shape[0]):p_new[j] = p_new[j] * p[j,i]# p_new = p_new * p[:,i]return p_new

接着,很重要的一步就是阈值\varepsilon的确定。可以尝试不同的\varepsilon作为阈值,使得最后的F1-score最大。(通过计算真阳性、真阴性、假阳性和假阴性计算查准率和召回率)

#确定阈值
def get_threshold(yval,p):best_F1= 0best_threshold = 0step = (np.max(p) - np.min(p)) / 1000for th in np.arange(np.min(p), np.max(p), step):y_p = p < thtp = np.sum((yval == 1) & (y_p == 1))fp = np.sum((yval == 0) & (y_p == 1))tn = np.sum((yval == 0) & (y_p == 0))fn = np.sum((yval == 1) & (y_p == 0))if (tp+fp):prec = tp / (tp+fp)else:prec = 0if (tp+fn):rec = tp / (tp+fn)else:rec = 0if (prec+rec):F1 = (2*prec*rec)/(prec + rec)else:F1 = 0if F1 > best_F1:best_F1 = F1best_threshold = threturn best_F1,best_threshold

调用函数,并找到异常点。

means, cov = fit_parameters(X)
# print(cov)
p_new = probability(X,means,cov)
# print(p_new)
best_F1,best_threshold = get_threshold(yval,p_new)
# print(best_F1)
# print(best_threshold)plt.scatter(X[:,0],X[:,1],c="b")
for i in range(len(X)):if p_new[i] < best_threshold:plt.scatter(X[i,0],X[i,1],c="r")
plt.show()

data2

data2对应的是多维的数据

print("-------------data2-------------")#读取数据
path2 = "./ex8data2.mat"
data2 = sio.loadmat(path2)
# print(data2.keys())
X2 = data2.get("X")
Xval2 = data2.get("Xval")
yval2 = data2.get("yval")means2, cov2 = fit_parameters(X2)
# print(cov)
p2_new = probability(Xval2,means2,cov2)
# print(p_new)
best2_F1,best2_threshold = get_threshold(yval2,p2_new)
p2_new = probability(X2,means2,cov2)
print(best_F1)
print(best_threshold)anoms = []
for i in range(len(X2)):if p2_new[i] < best2_threshold:anoms.append(X2[i,:])
print(len(anoms))

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

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

相关文章

十七、Intellij IDEA2022.1.1下载、安装、激活

目录 &#x1f33b;&#x1f33b; 一、下载二、 安装三、激活 一、下载 官网下载地址 本地直接下载 目前Intellij IDEA的最新版本已经更新到了 2024.1.4&#xff0c;由于最新版本可能存在不稳定的问题&#xff0c;此处选择其他版本进行下载&#xff0c;此处以2022.1.1为例进行下…

【Spring】Bean详细解析

1.Spring Bean的生命周期 整体上可以简单分为四步&#xff1a;实例化 —> 属性赋值 —> 初始化 —> 销毁。初始化这一步涉及到的步骤比较多&#xff0c;包含 Aware 接口的依赖注入、BeanPostProcessor 在初始化前后的处理以及 InitializingBean 和 init-method 的初始…

基于STM32的智能家居安防系统教程

目录 引言环境准备智能家居安防系统基础代码实现&#xff1a;实现智能家居安防系统 门窗传感器模块视频监控模块报警与通知模块用户界面与远程控制应用场景&#xff1a;家庭安防与监控常见问题与解决方案收尾与总结 引言 随着智能家居的普及&#xff0c;家庭安防系统成为保护…

艾瑞白皮书解读(一)丨为什么说数据工程是中国企业数据治理的最佳实践?

2024年7月 艾瑞咨询公司对国内数据治理行业进行了研究&#xff0c;访问了国内多位大中型企业数据治理相关负责人&#xff0c;深度剖析中国企业在数字化转型过程中面临到的核心数据问题后&#xff0c;重磅发布《2024中国企业数据治理白皮书》&#xff08;以下简称“白皮书”&…

算法通关:017_1:二叉树及三种顺序的递归遍历

文章目录 题目思路代码运行结果 题目 二叉树及三种顺序的递归遍历 思路 代码 /*** Author: ggdpzhk* CreateTime: 2024-08-04** 二叉树及三种顺序的递归遍历* LeetCode 144. 二叉树的前序遍历* LeetCode 94. 二叉树的中序遍历* LeetCode 145. 二叉树的后序遍历* LeetCode 10…

龙迅LT8713SX 高性能TYPE-C/DP转三端口DP1.4/HDMI 2.0转换器,带音频

龙迅LT8713SX描述&#xff1a; LT8713SX是一个高性能类型-C/DP1.4到Type-C/DP1.4/HDMI2.0转换器&#xff0c;具有三个可配置的DP1.4/HDMI2.0/DP输出接口和音频输出接口。LT8713SX同时支持显示端口™单流传输&#xff08;SST&#xff09;模式和多流传输&#xff08;MST&#xf…

Adobe Acrobat不支持图片格式转换PDF文件

我在将图片格式&#xff08;PNG,JPEG&#xff09;转换为PDF的过程中遇到了如下问题&#xff1a; 单文件的解决办法——在软件外实现转换&#xff1a; 使用照片打开图片 选择打印 打印机选择Adobe PDF&#xff0c;执行打印 选择PDF文件的保存位置&#xff0c;过一会儿可以正…

基本K8s搭建Jekins+gitee项目自动部署

这里写目录标题 1.基本K8s部署安装Jekins2.设置Jenkins国内镜像源2.安装Gitee插件1.安装Gitee Plugin2.验证安装Gitee Plugin 3.新建任务1.输入任务名称2.输入你gitee上的项目链接3.测试构建 4.查看项目在k8s集群master节点的位置1.确认 Jenkins Pod 名称2.使用kubectl exec到 …

视频如何生成二维码(自动生成二维码)完整教程

在企业中&#xff0c;产品视频二维码怎么制作&#xff0c;产品二维码怎么实现微信扫码便捷观看&#xff1f;上图文教程&#xff1a;视频二维码生成器/上传视频自动生成二维码完整教程。 目前市面上有很多工具&#xff0c;可以实现&#xff0c;比如草料二维码、酷播云二维码等等…

【Web开发手礼】探索Web开发的秘密(十四)-Vue2(1)Node.js的安装、Vue入门

主要介绍了Node.js的安装教程、Vue2常用的一些指令、声明周期&#xff01;&#xff01;&#xff01; 文章目录 前言 Node.js安装 选择安装目录 验证NodeJS环境变量 配置npm的全局安装路径 切换npm的淘宝镜像 安装Vue-cli ​编辑 Vue2入门 引入vue.js文件 入门代码 常用指令 生…

前端(vue3)和后端(django)的交互

vue3中&#xff1a; <template><div><h2>注册页面</h2><form submit.prevent"submitForm"><label for"username">用户名&#xff1a;</label><input type"text" id"username" v-model…

AWS S3怎么收费的?一文带你搞懂!

Amazon Simple Storage Service&#xff08;S3&#xff09;是亚马逊网络服务&#xff08;AWS&#xff09;提供的一个高度可扩展的对象存储服务&#xff0c;广泛应用于数据存储、备份、归档和大数据分析等领域。S3的计费模式相对灵活&#xff0c;旨在满足不同用户的需求。本文中…

小试牛刀-walletconnect二维码及交互

目录 1.编写目的 2.实现功能 3.功能详解 依赖组件 3.1 二维码生成 3.1.1 初始化SignClient 3.1.2 创建会话空间获取WC协议uri 3.1.3 生成二维码供用户扫描 3.1.4 等待扫描 3.2 发送交易事务 3.2.1 创建交易事务 3.2.2 向用户发送交易事务 3.3 签名事务 3.3.1 接收…

安装VMware16

安装VMware16的步骤主要包括下载、‌安装和激活。‌ 下载VMware16 首先&#xff0c;‌需要从VMware官网下载VMware Workstation Pro 16的安装包。‌下载链接为https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro…

关于LLC知识2

LLC拓扑如下图所示&#xff0c;虚线框住的是LLC的核心部分&#xff0c;前面的部分是把输入交流电压经过整流和滤波使得在进入LLC的时候是直流电压&#xff08;带有纹波&#xff09;&#xff0c;如果忽略纹波&#xff0c;那么给LLC供电的就是稳定的直流电压。 LLC的稳态分析即&a…

浅谈线程组插件之jp@gc - Stepping Thread Group

浅谈线程组插件之jpgc - Stepping Thread Group jpgc - Stepping Thread Group 是一个高级线程组插件&#xff0c;专为Apache JMeter设计。相较于JMeter自带的基本线程组&#xff0c;此插件提供了更灵活、更精细的用户模拟方式&#xff0c;特别适合于模拟真实用户逐步增加的场…

MySQL--数据库备份

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、为什么要备份 备份&#xff1a;能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;例如将数据库文件保存在了其它地方。 冗余&#…

密码学基础:搞懂Hash函数SHA1、SHA-2、SHA3(2)

目录 1.引入 2. SHA512-224\256 3.SHA-3 4.MD5 5.SM3 1.引入 上篇密码学基础&#xff1a;搞懂Hash函数SHA1、SHA-2、SHA3(1)-CSDN博客&#xff0c;我们先就将基础的SHA1\2讲解了&#xff0c;接下来我们继续聊SHA-3、SHA2变体SHA512_224\256等 2. SHA512-224\256 SHA512…

TPS和QPS达到多少才算高并发?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

pytorch学习笔记3 tensor索引和切片

dim 0 占先 切片 &#xff08;前N或者后N个&#xff09; &#xff1a;2 表示 0到2&#xff08;不包含2&#xff09;&#xff0c; 1&#xff1a;表示 1到末尾&#xff0c; -1表示最后一个元素&#xff0c;-2表示倒数第二个 0:28:2 表示从0到27隔点采样 &#xff1a;&#xff…