吴恩达老师机器学习-ex8

news2024/9/25 1:20:53

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= 0
    best_threshold = 0
    step = (np.max(p) - np.min(p)) / 1000
    for th in np.arange(np.min(p), np.max(p), step):
        y_p = p < th
        tp = 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 = 0
        if (tp+fn):
            rec = tp / (tp+fn)
        else:
            rec = 0
        if (prec+rec):
            F1 = (2*prec*rec)/(prec + rec)
        else:
            F1 = 0
        if F1 > best_F1:
            best_F1 = F1
            best_threshold = th
    return 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.coloradmin.cn/o/1981635.html

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

相关文章

matplotlib库学习之绘图透明度设置(精炼准确)

matplotlib库学习之透明颜色设置 一、简介 在数据可视化中&#xff0c;透明度设置可以使图表更具层次感&#xff0c;特别是在多层叠加图表时。matplotlib库提供了多种方法来设置图表各个部分的透明度&#xff0c;包括图形、文本、图例、坐标轴等部分。 二、为什么要设置成透明…

某PM2项目管理系统 ExcelIn.aspx 文件上传漏洞复现

FOFA:body="PM2项目管理系统BS版增强工具.zip" 访问漏洞url抓包 上传压缩包 请求包 POST /FlowChartDefine/ExcelIn.aspx HTTP/1.1 Host: Accept-Encoding: gzip, deflate Content-Type: multipart/form-data; boundary=---------------------------335518608136…

WPF学习(2)-UniformGrid控件(均分布局)+StackPanel控件(栈式布局)

UniformGrid控件&#xff08;均分布局&#xff09; UniformGrid和Grid有些相似&#xff0c;只不过UniformGrid的每个单元格面积都是相等的&#xff0c;不管是横向的单元格&#xff0c;或是纵向的单元格&#xff0c;它们会平分整个UniformGrid。 UniformGrid控件提供了3个属性…

自动化测试使用jenkins做CICD持续集成(docker)

1.什么是&#xff08;CI/CD&#xff09; 1.1持续集成 定义&#xff1a;频繁地&#xff08;一天多次&#xff09;将代码集成到主干。将软件个人研发的部分向软件整体部分 交付&#xff0c;频繁进行集成以便更快地发现其中的错误。 每完成一点更新&#xff0c;就集成到主干&…

儿童活动床栏亚马逊temu美国ASTM F2085测试报告16 CFR 1224标准CPC认证办理

亚马逊temu美国站儿童活动床栏ASTM F2085-19测试报告活动床栏16 CFR 1224标准CPC认证 什么是便携式床栏杆&#xff1f; 便携式床栏杆是一种旨在安装在成人床上以防止儿童跌落的装置。便携式床栏适用于在没有帮助的情况下方便儿童&#xff08;通常为 2 至 5 岁&#xff09;上下…

编程深水区之并发①:什么是并发编程

并发编程是一种让程序能够执行多个任务的编程技术&#xff0c;多个任务的执行时间有重合&#xff0c;如交替执行、同时执行等。相对于传统的从上到下依次同步执行代码&#xff0c;我们也称并发编程为异步编程。目前&#xff0c;常见的并发模型主要有两种&#xff0c;一是多线程…

MySQL --- 内置函数介绍

目录 一、日期函数 二、字符串函数 三、数学函数 四、 其他函数 一、日期函数 current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime的日期部分date_add(date&#xff0c;interval d_value_type) 在date中添加时间/日期…

在没有备份的条件下,如何恢复微信聊天记录?

推荐2款数据恢复工具1个简单实用方法&#xff0c;帮你找回微信误删聊天记录&#xff01; 操作简单&#xff0c;可用于iOS、安卓手机和PC电脑端 1、万兴数据管家 点击直达官网下载>>https://huifu.wondershare.cn 万兴数据管家是一款专业的微信数据恢复软件。 支持苹果…

鲁班上门维修安装系统源码开发之功能模式

鲁班上门维修安装系统在当今的趋势呈现出显著的增长与创新。随着物联网、智能家居的普及&#xff0c;以及消费者对便捷、高效生活方式的追求&#xff0c;鲁班上门维修安装系统凭借其多渠道预约、智能派单、在线支付与费用明细透明等优势&#xff0c;赢得了市场的广泛认可。 …

「面试必看」Vue百题斩~ Vue数据响应式原理的四个核心模块

vue 响应式原理的四个核心模块 Observe Observe 要实现的目标非常简单&#xff0c;就是把一个普通对象转换成响应式对象。 为了实现这一点&#xff0c;Observe 把对象的每个属性通过 Object.defineProperty 转换为带有 setter 和 getter 的属性&#xff0c;这样一来&#xf…

重头开始嵌入式第十二天(预处理和指针)

预处理 在 C 语言中&#xff0c;预处理是指在编译之前由预处理器对源代码进行的一些处理操作。 主要包括以下几个方面&#xff1a; 1. 宏定义&#xff1a;使用 #define 指令定义一个标识符来代表一个常量值、表达式或一段代码。 例如&#xff1a; #define PI 3.14159 2.…

亚马逊澳大利亚站 带绳窗帘认证步骤

带绳窗帘是一种室内用窗帘&#xff0c;可通过一根吊绳控制升降。此类商品包括但不限于蜂窝帘、水平百叶帘、百褶帘、卷式百叶帘、卷帘、透光帘、罗马帘、帘杆&#xff08;包括使用帘杆的商品&#xff0c;如带帘杆的窗帘和布帘&#xff09;、面板轨道和垂直百叶帘。 我们的带绳窗…

vue 开发工具 Hbuilder 简介及应用

一、简介 HBuilderX 是一款流行的前端开发工具&#xff0c;由DCloud公司开发。它支持多种编程语言&#xff0c;如HTML、CSS、JavaScript、Vue、UniApp等&#xff0c;非常适合用来开发Web应用、移动端应用和跨平台应用。 官网地址&#xff1a;https://www.dcloud.io/hbuilderx.…

ShardingSphere 内核工作原理

文章目录 内核工作原理配置管控SQL Parser: SQL解析引擎SQL Router- SQL 路由引擎SQL Rewriter : SQL 优化引擎SQL Executor &#xff1a; SQL执行引擎Result Merger&#xff1a; 结果归并 内核工作原理 ShardingSphere的整体架构图是这样的&#xff1a; 配置管控 在进入Shar…

火车站NTP电子钟,自动授时,保证时间精准

在现代交通体系中&#xff0c;火车站作为重要的交通枢纽&#xff0c;每天承载着大量乘客的出行需求。为了确保列车运行的准时性和乘客信息的准确性&#xff0c;火车站NTP电子钟成为不可或缺的一部分。本文将详细介绍火车站NTP电子钟的特点及其在不同场景中的应用优势。 一、火车…

【STL】String的底层构造

1.String类对象的构造&#xff08;后面有每一个接口的实现&#xff09; #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace bit {class string{public:typedef char* iterator;typedef const…

字节实习面试

1.比左边的数都小&#xff0c;比右边的数都大 public class Test3 {/*** 从左往右找当前位置往左最小的* 从右往左遍历找当前位置往右最大的* 比较* param args*/public static void main(String[] args) { // int[] arr new int[]{9,8,7,3,4,2,1};int[] arr new int[…

【第十届泰迪杯数据挖掘挑战赛A题害虫识别】-农田害虫检测识别-高精度完整更新

农田害虫检测识别项目-高精度完整版 一、说明&#xff1a; 该版本为基于泰迪杯完整害虫数据重新制作数据集、优化增强数据集、重新进行模型训练&#xff0c;达到高精度、高召回率的最优模型代码。包含论文、最优模型文件以及相关文件、原始数据集、训练数据集XML版、增强扩充…

五款超好用的报表软件推荐,其中一款竟然完全免费

与以往需要通过繁琐的数据表格和复杂的数字分析不同&#xff0c;可视化报表通过表格、图表和图形&#xff0c;将数据以更加直观的方式呈现出来&#xff0c;使得原本繁杂无序的数据变得清晰易懂。无论是管理层的决策分析&#xff0c;还是一线员工的日常工作&#xff0c;可视化报…

vs+qt一些问题

一直遇到的两个问题&#xff0c;今天解决了 1、 因为前后端分离&#xff0c;前端写完了&#xff0c;后端还在一直修改&#xff0c;但是每次都是单独打开的后端的sln&#xff0c;所以会出现这个&#xff0c;把前端的模块删掉就好了。 2、打开vs项目&#xff0c;很多报错&#…