吴恩达机器学习作业8 :Anomaly Detection and Recommender Systems python 实现

Week 9:Anomaly Detection课后习题解答 大家好,我是Mac Jiang,今天和大家分享Coursera-Stanford University-Machine Learning-Week 8:Anomaly Detection的课后习题解答。注意:每个同学的习题的参数和选项都是不同的,在参考时不要照抄,避免带来错误!我的分析也不一定是正确的,如果各位博友发现错误,请留言联系,谢谢。希望我的博客能给你带来一些学习上的帮助!1.第一题 阅读详情

一、异常检测

例子1:二维数据的异常检测

1.数据可视化

data = scio.loadmat(r'ex8data1.mat')
X = data['X']
Xval = data['Xval']
yval = data['yval']

# 数据可视化
plt.scatter(X[:, 0], X[:, 1], c='b', marker='x')
plt.show()

结果:
在这里插入图片描述

2.正态分布图

mu, sigma2 = estimate_gaussian(X)
visualize_fit(X, mu, sigma2)

可视化函数:

import numpy as np
import matplotlib.pyplot as plt
from multivariateGaussian import multi_variate_gaussian


def visualize_fit(x, mu, sigma2):

    xx, yy = np.meshgrid(np.linspace(0, 35, 200), np.linspace(0, 35, 200))
    Z = multi_variate_gaussian(np.c_[xx.flatten(), yy.flatten()], mu, sigma2)
    Z = Z.reshape(xx.shape[0], xx.shape[1])

    plt.scatter(x[:, 0], x[:, 1])
    lev = 10 ** np.arange(-20, 0, 3).astype(np.float)
    plt.contour(xx, yy, Z, levels=lev)
    plt.show()

结果:
在这里插入图片描述

3. 选择判断异常与否的临界点ε

选择实现:

  1. 根据训练集求出n个特征各自的的平均值mu与方差σ^2

  2. 求出交叉验证集每个example的 总p(x)

    注意这里的 总p(x) 有两种计算方法:

第一种:一个example有n个特征,用下面的公式计算每一个特征的p(x)然后全部相乘得到总p(x)。

在这里插入图片描述

第二种 :加入协方差矩阵进行计算。
在这里插入图片描述
总p(x) 的实现:

import numpy as np

# ======================== 版本1 ===========================================
# def multi_variate_gaussian(x, mu, sigma2):
#
#     p = 1 / np.square(2 * np.pi * sigma2) * \
#         np.exp(-np.power(x-mu, 2) / (2 * sigma2))
#
#     return np.multiply(p[:, 0], p[:, 1])

# =========================== 版本2 ==========================================


def multi_variate_gaussian(X, mu, sigma2):
    k = mu.size
    if sigma2.ndim == 1 or (sigma2.ndim == 2 and (sigma2.shape[1] == 1 or sigma2.shape[0] == 1)):
        sigma2 = np.diag(sigma2)

    x = X - mu
    p = (2 * np.pi) ** (-k / 2) * np.linalg.det(sigma2) ** (-0.5) * np.exp(-0.5*np.sum(np.dot(x, np.linalg.pinv(sigma2)) * x, axis=1))

    return p

选择函数的实现:

import numpy as np


def select_threshold(yval, p):

    bestEpsilon = 0
    bestF1 = 0
    F1 = 0

    stepsize = (p.max() - p.min()) / 1000
    for epsilon in np.arange(p.min(), p.max(), stepsize):

        pred = np.where(p < epsilon, 1, 0).reshape(yval.shape[0], yval.shape[1])

        tp = np.sum(np.multiply(pred, yval))
        fp = np.sum(np.where(pred > yval, 1, 0))
        fn = np.sum(np.where(pred < yval, 1, 0))

        prec = tp / (tp + fp)
        rec = tp / (tp + fn)

        F1 = (2 * prec * rec) / (prec + rec)

        if F1 > bestF1:

            bestF1 = F1
            bestEpsilon = epsilon

    return bestEpsilon

两种计算方式结果:

第一种:
在这里插入图片描述
第二种:
在这里插入图片描述
可以看见,从F1来衡量这两种算法,结果是一样的。不同的只是最终选择ε的值不同。

例子2:高维数据的异常检测

# 加载数据
data = scio.loadmat(r'ex8data2.mat')
X = data['X']
Xval = data['Xval']
yval = data['yval']

mu, sigma2 = estimate_gaussian(X)
p = multi_variate_gaussian(Xval, mu, sigma2)
best_epsilon = select_threshold(yval, p)

结果:
在这里插入图片描述

二、电影推荐系统

代价函数:

import numpy as np


def cofi_costfunc(com_mat, R, Y, num_movies, num_users,num_feature, mylambda):

    X = com_mat[0:num_movies*num_feature].reshape(num_movies, num_feature)
    Theta = com_mat[num_movies*num_feature:].reshape(num_users , num_feature)

    pred = np.dot(X, Theta.T)
    cost = np.sum(np.multiply(pred - Y, R)) / 2 + \
           (mylambda / 2) * np.sum(np.power(Theta[1:, 1:], 2)) + (mylambda / 2) * np.sum(np.power(X[1:, 1:], 2))

    return cost

梯度下降函数:

import numpy as np


def gradinet(com_mat, R, Y, num_movies, num_users, num_feature, mylambda):

    X = com_mat[0:num_movies * num_feature].reshape(num_movies, num_feature)
    Theta = com_mat[num_movies * num_feature:].reshape(num_users, num_feature)

    error = np.multiply(np.dot(X, Theta.T) - Y, R)

    grad_Theta = np.dot(error.T, X) + Theta * mylambda
    grad_X = np.dot(error, Theta) + X * mylambda

    return np.r_[grad_X.flatten(), grad_Theta.flatten()]

训练过程:(主函数)

# ========================  练习二 part1 ======================================
# 加载数据
data1 = scio.loadmat(r'ex8_movies.mat')
Y = data1['Y']
R = data1['R']

data2 = scio.loadmat(r'ex8_movieParams.mat')
X = data2['X']
Theta = data2['Theta']
num_users = data2['num_users'][0, 0]
num_movies = data2['num_movies'][0, 0]
num_features = data2['num_features'][0, 0]

# 初始化自己的序列
my_ratings = np.zeros(num_movies)

# 电影评分
my_ratings[0] = 4
my_ratings[97] = 2
my_ratings[6] = 3
my_ratings[11] = 5
my_ratings[53] = 4
my_ratings[63] = 5
my_ratings[66] = 3
my_ratings[68] = 5
my_ratings[183] = 4
my_ratings[225] = 5
my_ratings[354] = 5

# 加载电影名字
movies_list = load_movie_list()

# for i in range(len(my_ratings)):
#     if my_ratings[i] > 0:
#         print('Rated {} for {}'.format(my_ratings[i], movies_list[i]))

# 在原始的Y中加入一列自己对电影的评分,R中对应加入一列向量判断是否评分
Y = np.c_[my_ratings, Y]
R = np.c_[my_ratings != 0, R]

# 初始化X, Theta
initia_X = np.random.randn(num_movies, num_features)
initia_Theta = np.random.randn(num_users + 1, num_features)

mat = np.r_[initia_X.flatten(), initia_Theta.flatten()]
mylambda = 1.5

# 标准化函数
Ynorm, Ymean = normalize_ratings(Y, R)

# 最小化函数
result = opt.minimize(fun=cofi_costfunc, x0=mat,
                      args=(R, Ynorm, num_movies, num_users + 1, num_features, mylambda), method='TNC', jac=gradinet)

print(result)
res_mat = result.x
res_X = res_mat[0:num_movies * num_features].reshape(num_movies, num_features)
res_Theta = res_mat[num_movies * num_features:].reshape(num_users + 1, num_features)

# 预测分数
res_Y = np.dot(res_X, res_Theta.T)
my_predictions = res_Y[:, 0] + Ymean

加载电影名字 txt 文件的函数:

def load_movie_list():
    movie_list = []
    with open(r'movie_ids.txt', 'r', encoding='ISO-8859-1') as f:
        lines = f.readlines()
        for line in lines:
            idx, *movie_name = line.split(' ')
            # join在每行元素之间加入空格成为用空格连接的一个元素
            # rstrip()除去原txt字符后面的空格(换行符号)
            movie_list.append(' '.join(movie_name).rstrip())

    return movie_list

训练结果:
在这里插入图片描述
预测结果:
在这里插入图片描述

异常检测(anomaly detection) - 吴恩达机器学习基于python 1 多元高斯分布模型 1.1 算法步骤 对于给定的数据集,针对每个特征计算μ\muμ(均值)和Σ\SigmaΣ(协方差) μj=1m∑i=1mxj(i)\mu_j=\frac{1}{m}\sum_{i=1}^{m}x_j^{(i)}μj​=m1​i=1∑m​xj(i)​ Σ=1mXTX\Sigma=\frac{1}{m}X^TXΣ=m1​XTX 根据获得的μ\muμ(均值)和Σ\SigmaΣ(协... 阅读详情

相关推荐

coursera机器学习编程作业8

coursera机器学习 machine-learning-ex8 推荐系统 已校对,代码皆正确

吴恩达机器学习作业8 - 异常检测和推荐系统(Python实现)

吴恩达机器学习作业8 - 异常检测和推荐系统(Python实现) Introduction 在第一个实验中,将实现异常检测算法,并应用于检测网络上出现故障的服务器。在第二个实验中,将使用协同过滤来构建一个电影推荐系统。 1 Anomaly detection(异常检测) 在本实验中,将实现一个异常检测算法来检测服务器计算机中的异常行为。特征测量的是每个服务器的响应速度(mb/s)和延迟(ms)。当服务器运行时,收集了m=307m=307m=307个计算机行为的样本,因此有一个未标记的数据集{x(1),x(2

Phoenix_ZengHao的博客 2739

Python画图高斯分布的示例

如下所示: import matplotlib.pyplot as plt import numpy as np import math def gaussian(sigma, x, u): y = np.exp(-(x - u) ** 2 / (2 * sigma ** 2)) / (sigma * math.sqrt(2 * math.pi)) return y #x = np.linspace(220, 230, 10000) x = np.linspace(-800, 800, 10000) plt.title('PDF in Horizontal Direction', fon

机器学习吴恩达编程作业题8-异常检测和推荐系统

1、异常检测 实现一个异常检测算法来检测服务器计算机中的异常行为。这些特性测量每台服务器的吞吐量(mb/s)和响应延迟(ms)。在这个数据集中,你将拟合一个高斯分布,然后找到概率很低的值,因此可以被视为异常。然后,将异常检测算法应用到具有多个维度的更大的数据集。 将所需要的数据集ex8data1.mat复制到D:\Machine Learning\ex8目录下,然后利用plot函数可视化数据集: 1.1高斯分布 要执行异常检测,首先需要使模型适合数据的分布。 1.2估计高斯参数 使用以下公式估计第i个

qq_42148307的博客 733

字节跳动扣子AI应用开发平台之实战

推出背景:扣子平台由字节跳动推出,旨在让非开发者也能快速创建、调试和优化聊天机器人。上线时间:扣子平台于2024年2月1日正式上线。功能定位:扣子是一个AI聊天机器人和应用程序编辑开发平台,可以理解为字节跳动版的GPTs。

恩爸编程 5897

华强北手表256G真相大揭秘:ADB命令实测内存与存储(附完整调试教程)

本文通过ADB命令实战揭秘华强北智能手表256G存储等硬件参数的真实性。文章提供了从开启调试模式到使用ADB命令查询系统属性、验证内存与存储容量的完整教程,帮助用户识别参数虚标,评估设备真实性能与潜在风险。

e3f4g5的博客 1232

【吴恩达】机器学习作业ex8--异常检测和推荐系统(Python)

此部分目的是给新用户推荐10个新电影,利用以往的用户对电影的评分,通过协同过滤算法来求出X与Theta矩阵,ex8movies.mat的数据集中存放着Y矩阵(1682行*943列数据),行列分别代表了1682篇电影与943个用户,矩阵中存放的是用户对电影的打分。其中还有R矩阵(1682,943),矩阵中只有0和1俩个值,0代表用户没有看过此电影,1代表看过并且打分。

calmdownn的博客 1077

ENVI-met新手必看:从零开始创建城市微气候模型(附详细步骤+底图制作技巧)

本文为ENVI-met新手提供从零开始创建城市微气候模型的详细指南,包括环境准备、参数配置、底图制作技巧和三维模型构建步骤。特别针对常见问题提供解决方案,帮助初学者快速掌握城市微气候模拟技术,提升建模效率。

weixin_29269441的博客 405

Python吴恩达机器学习作业 8 -异常检测和推荐系统

编程作业 8 - 异常检测和推荐系统 在本练习中,我们将使用高斯模型实现异常检查算法,并将其以用于检查网络上的故障服务器。我们还将看到如何协作过滤构建推荐系统,并将其应用于电影推荐数据集。 Anomaly detection(异常检测) 我们的第一个任务是使用高斯模型来检测数据集中未标记的示例是否应被歧视为异常。我们有一个简单的二维数据集开始,以帮助可视化该算法正在做什么。 import numpy as np import pandas as pd import matplotlib.pyplot as

qq_41476257的博客 737

VSCode 降低适用版本并且关闭自动更新

官方表示,提高了远程服务器构建工具链的最低要求,更新了对 glibc 的要求,需要最低2.28版本。最快的方法是把vs code的版本降到1.85(为什么是这个版本呢?打开VS Code的官方网站(https://code.visualstudio.com/)通过查看可以知道,具体的版本没有直接显示分类,他是根据发布日期来分类的同时和版本匹配。在网站的顶部导航栏中找到”Updates”按钮,点击进入下载页面。找了半天一直没发现,原来就在紧挨着的下面。远程主机不满足运行vs code服务器的先决条件。

Sunflower的博客 9581

无线图像传输新突破:深度JSCC算法在低带宽环境下的性能实测

本文深入探讨了基于深度学习的信源信道联合编码(JSCC)算法在低带宽无线图像传输中的突破性表现。通过实测数据对比,深度JSCC在低信噪比环境下展现出卓越的鲁棒性,有效对抗传统方案的“悬崖效应”,实现图像质量的平滑下降,为远程医疗、工业巡检等严苛场景提供了新的解决方案。

weixin_29090089的博客 505

吴恩达机器学习ex8:异常检测和推荐系统

吴恩达机器学习作业八:异常检测和推荐系统 在本练习中,您将实现异常检测算法,并将其应用于检测网络上出现故障的服务器。在第二部分中,您将使用协作过滤来构建电影推荐系统。 1 Anomaly detection 在本练习中,您将实现异常检测算法来检测服务器计算机中的异常行为。这些特性测量每个服务器的吞吐量(mb/s)和响应延迟(ms)。当您的服务器运行时,您收集了m=307个它们的行为示例,因此有一个未标记的数据集{x(1),x(m)}。您怀疑这些示例中的绝大多数都是服务器正常运行的“正常”(非异常)示例,但

weixin_47798560的博客 703

Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)

Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建前言1.安装前的准备工作2.安装交叉编译器 前言 这篇文章,主要是基于 Ubuntu19.10版本而写,写此文的初衷,是为了自己使用,因为最近正在以Tiny6410板子做实训,所以也是初学者一枚,只能保证我遇上的问题统统能够解决掉,至于一些没遇上的,欢迎各位看客给我留言,大家一起讨论,一起解决。 注:本文会持续更新 1.安装前的准备工作 环境要求 Linux系统:U

繁臻的小窝 4894

吴恩达机器学习(二十一)—— ex8:Anomaly Detection and Recommender Systems (MATLAB + Python)

一、异常检测1.1高斯分布1.2 估计高斯参数1.3选择阈值εεε1.4 高维数据集二、推荐系统2.1 电影评分数据集2.2 协同滤波学习算法2.2.1 协同滤波代价函数2.2.2 协同滤波梯度   本次练习对应的基础知识总结→\rightarrow→异常检测和推荐系统。   本次练习对应的文档说明和提供的MATLAB代码→\rightarrow→ 提取码:7g7b 。 一、异常检测   在本练习中,我们将实现异常检测算法以检测服务器计算机中的异常行为。该特征测量每个服务器的响应的吞吐量(mb/s)和响.

大彤小忆的博客 4185

【立创EDA-PCB设计基础】4.模块化布局

本文对本专栏绘制的原理图进行模块化布局,首先进行预布局(将每个模块放一起),然后进行精细化布局(按照原理图来精细化布局)。

嵌入式阿齐Archie 3万+

MIKE水动力笔记7_实测数据与模型输出结果的拟合对比

上一博文【MIKE水动力笔记6】主要讲解如何自己制作实测数据的时间序列文件dfs0,而本博文讲解如何进行实测数据与模型输出结果的拟合对比。

晏长街的博客 1万+

吴恩达学习day8(机器学习系统的设计(Machine Learning System Design))

机器学习系统的设计首先要做什么误差分析类偏斜的误差度量查准率和查全率之间的权衡机器学习的数据 首先要做什么 以一个垃圾邮件分类器算法为例进行讨论。 ​ 为了解决这样一个问题,我们首先要做的决定是如何选择并表达特征向量xxx。我们可以选择一个由100个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得我们的特征向量(出现为1,不出现为0),尺寸为100×1 为了构建这个分类器算法,我们可以做很多事,例如: 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本 基于邮件的路由

沉晨尘宸的博客 449

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

吴恩达机器学习作业8(上)--- Anomaly Detection(异常检测)

文章目录代码分析前言实现高斯分布函数估计高斯分布的参数选择阈值ε高维数据集测试数据集 代码分析 前言 异常检测模型分为原始模型和多元高斯分布模型 原始模型为多元高斯分布模型的特例 其区别是 原始模型的协方差矩阵为对角矩阵,其特征相互独立 多元高斯分布模型的特征存在相关性 实现高斯分布函数 首先导入类库 import numpy as np import matplotlib.pyplot as plt import scipy.io import scipy.optimize #Use for fmi

NP_hard的博客 413

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

GMM混合高斯模型

最近研究经典论文:GrabCut, 里面讲到混合高斯模型GMM,特地学习一下。以下代码段来自:https://blog.youkuaiyun.com/u012436149/article/details/53557008 # -*- coding: utf-8 -*- # for multi-Gaussian __author__ = "KeithYin" import numpy as np def gaussian(x,mu,sigma): temp = -np.square(x-mu)/(2*sigma

Reaearcher-Du 527

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

吴恩达机器学习作业Python实现(八):异常检测与推荐系统

在数据集中,您将拟合高斯分布,然后找到概率很低的值,因此可以被视为异常,之后再将异常检测算法应用到具有更多维度的更大的数据集上,首先我们先对数据进行可视化。在这部分练习中,你将实现一个异常检测算法来检测服务器计算机中的异常行为,这些特征度量着每个服务器的吞吐量和响应延迟,当你的服务器在运行时,收集了 m = 307 个关于它们如何运行的样本,有一个未标记的数据集 {从上面的图我们可以清晰的看到,哪些样本的概率高,哪些样本的概率低,概率低的样本很大程度上就是异常值。接下来将全部异常值找出来。

在无人问津的日子里默默努力 1191

Stanford 机器学习 Anomaly Detection

Anomaly Dectection 检测异常点,通过判断该点出现的概率,如果概率较小,就判断为异常点,否则为正常点。 高斯分布,均值和方差这两个参数的估计,在实际情况下,分子为m或者m-1差别不大。 如何分配训练集和测试集。 对于算法的评估,如果anomalous点较少时,应该如何评估。 Anomaly Dection和Supervised learning的区别: 异

弱鸡 866

吴恩达机器学习作业8-异常检测

题目概述: 在本练习中,我们将使用高斯模型实现异常检测算法,并将其应用于检测网络上的故障服务器。 我们还将看到如何使用协作过滤构建推荐系统,并将其应用于电影推荐数据集。 import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy.io import loadmat data = loadmat('E:/shujuji/ex8data1.mat') X = data['X'] X.shape #(30.

kingsure001的博客 558

Andrew NG 机器学习 练习8-Anomaly Detection and Recommender Systems

1 Anomaly detection实现一个异常检测算法检测服务器的异常行为 特征是 每个服务器的 吞吐量(throughput)(mb/s) 和 相应延迟(ms) 采集 m=307 台运行中的服务器的特征,{x(1),...,x(m)x^{(1)},...,x^{(m)}} 其中大部分是 normal 的服务器特征你将使用 高斯模型 检测数据集中的异常样例 从 2D 数据集开始,以便可视

无关风月 1035

Coursera 机器学习 Week9 编程作业: Anomaly Detection and Recommender Systems

1 Anomaly detection estimateGaussian.m 这个函数主要让我们实现µ和σ的计算 function [mu sigma2] = estimateGaussian(X) %ESTIMATEGAUSSIAN This function estimates the parameters of a %Gaussian distribution using the data...

zamaochick的博客 489

吴恩达机器学习第八周学习笔记及编程作业答案

一、理论基础 聚类 1、无监督学习 在非监督学习中,我们需要将一系列无标签的训练数据,输入到一个算法中,然后我们告诉这个算法,快去为我们找找这个数据的内在结构给定数据。我们可能需要某种算法帮助我们寻找一种结构。 2、K-均值算法 K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为: 首先选择????个随机的点,称为聚类中心(cluster centroids); 对于数据集中的每一个数据,按照距离????个中

mysky54的博客 2297

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 404
上一篇: 吴恩达机器学习作业7 :K-means Clustering and Principal Component Analysis python 实现
下一篇: pytorch实现简单线性模型
zsiming
博客等级 码龄7年 43粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值