Coursera NG 机器学习 第八周 异常检测 推荐系统 Python实现

【machine learning】GMM算法(Python版) 事实上,GMM 和 k-means 很像,不过 GMM 是学习出一些概率密度函数来(所以 GMM 除了用在 clustering 上之外,还经常被用于 density estimation ),简单地说,k-means 的结果是每个数据点被 assign 到其中某一个 cluster 了,而 GMM 则给出这些数据点被 assign 到每个 cluster 的概率,又称作 soft assignment 。 阅读详情

Anomaly Detection ex8.py

from scipy.io import loadmat
from ex8Modules import *
import numpy as np

#Part 1:low-dimensional exmaples
data=loadmat('ex8data1.mat')
X=data['X'] #X.shape (307,2)
Xval=data['Xval'] #Xval.shape (307,2)
yval=data['yval'] #yval.shape (307,1)

visualize(X)

mu,sigma=estimateGaussian(X)
visualizeFit(X,mu,sigma,0,0)

p=multiGaussian(X,mu,sigma)
pval=multiGaussian(Xval,mu,sigma)

_,epsilon=selectThreshold(yval,pval)
outliers=np.where(p<epsilon)
visualizeFit(X,mu,sigma,outliers,1)

#Part 2:High-dimensional exmaples
data=loadmat('ex8data2.mat')
X=data['X']
Xval=data['Xval']
yval=data['yval']

mu,sigma=estimateGaussian(X)
p=multiGaussian(X,mu,sigma)
pval=multiGaussian(Xval,mu,sigma)
F1,epsilon=selectThreshold(yval,pval)

print("Best epsilon found using cv-sets: ",epsilon)
print("Best F1 score on cv-sets: ",F1)
print("Outliers found:",np.sum(p<epsilon))

                                                   

 

                                                 


Recommender System

ex8cofi.py

from scipy.io import loadmat
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as op
from ex8Modules import *

#Part 1: Loading movie ratings dataset
moviedata=loadmat('ex8_movies.mat')
Y=moviedata['Y']
R=moviedata['R']
ysum=np.sum(Y[0,:])
rsum=np.where(R[0,:]==1)[0].shape[0]
print("Average rating for movie 1 (Toy Story): %f /5\n" % (ysum/rsum))
plt.imshow(Y,aspect='auto')
plt.ylabel("Movies")
plt.xlabel("Users")
plt.show()

#Part 2: Collaborative Filtering Cost Function and Gradient
params=loadmat('ex8_movieParams.mat')
X=params['X']
Theta=params['Theta']
num_users=4
num_movies=5
num_features=3

X_test=X[:num_movies,:num_features]
Theta_test=Theta[:num_users,:num_features]
Y_test=Y[:num_movies,:num_users]
R_test=R[:num_movies,:num_users]

param=np.r_[X_test,Theta_test].ravel()

J=cofiCostFunc(param,Y_test,R_test,num_users,num_movies,num_features,lamda=0)
print("Cost at loaded parameters with lambda=0: %f (should be about 22.22)" % J)
J=cofiCostFunc(param,Y_test,R_test,num_users,num_movies,num_features,lamda=1.5)
print("Cost at loaded parameters with lambda=1.5: %f (should be about 34.34)" % J)

#Part 3: Ratings for a new user
movieList=loadMovieList()
my_ratings=np.zeros((len(movieList),1))
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[65]= 3
my_ratings[68] = 5
my_ratings[182] = 4
my_ratings[225] = 5
my_ratings[354]= 5
print("\nNew user ratings: ")
for i in range(len(movieList)):
    if my_ratings[i]>0:
        print("Rated %d for %s" % (my_ratings[i],movieList[i]))

#Part 4: Learning Movie Ratings
Y=np.column_stack((my_ratings,Y))
R=np.column_stack(((my_ratings!=0)+0,R))
ymean,ynorm=normalizeRatings(Y,R)

num_users=Y.shape[1]
num_movies=Y.shape[0]
num_features=10
lamda=10

X=loadmat('X.mat')['X']
Theta=loadmat('Theta.mat')['Theta']
init_params=np.r_[X,Theta].ravel()

print("\nTraining collaborative filtering...")
results=op.fmin_cg(f=cofiCostFunc,x0=init_params,\
                   args=(ynorm,R,num_users,num_movies,num_features,lamda),fprime=cofiGrads)

X=results[:num_movies*num_features].reshape((num_movies,num_features))
Theta=results[num_movies*num_features:].reshape((num_users,num_features))
print("Recommender system learning completed.")

#Part 5: Recommendation for you
p=X.dot(Theta.T)
my_pred=p[:,0]+ymean.ravel()
pred_idx=np.argsort(-my_pred)
pred_score=np.sort(-my_pred)

print("\nTop recommendations for you :")
for i in range(10):
    print('Predicting rating %.1f for movie %s' % (-pred_score[i],movieList[pred_idx[i]]))

print("\nOriginal user ratings: ")
for i in range(len(movieList)):
    if my_ratings[i]>0:
        print("Rated %d for %s" % (my_ratings[i],movieList[i]))

print()

#Part 6: Find closest movies
findCloestMovies(my_ratings,X,movieList,10)

                                                          

                                         

                                                                

                                          

这里在初始化电影特征矩阵X和用户喜好矩阵Theta的时候,直接用了matlab里面randn生成的mat矩阵。如果使用numpy.random.randn,cost非常的大,高达60W,而且评分也不对。如果乘以一个很小的系数(改变sigma),结果就正常了。具体原因不知。。。可能matlab跟Numpy生成标准正态分布的方式不一样。

X=loadmat('X.mat')['X']
Theta=loadmat('Theta.mat')['Theta']

X=np.random.randn(num_movies,num_features)
Theta=np.random.randn(num_users,num_features)

X=np.random.randn(num_movies,num_features)*0.1
Theta=np.random.randn(num_users,num_features)*0.1

random.randn

                                   

                                    

random.randn*0.1

                                       

                                  

最后,写了个找到与评分电影相似的k个电影:

                                  


ex8Modules.py

import numpy as np
import math
import matplotlib.pyplot as plt

def estimateGaussian(X):
    (m,n)=X.shape
    mu=np.zeros((n,1))
    sigma2=np.zeros((n,1))
    for i in range(n):
        mu[i]=np.mean(X[:,i])
        sigma2[i]=np.sum(np.square(X[:,i]-mu[i]))/m
    return mu,sigma2

def multiGaussian(X,mu,sigma2):
    (n,m) = mu.shape
    mu = mu.reshape((m, n))
    if sigma2.shape[0] == 1 or sigma2.shape[1] == 1:
        sigma2 = np.diag(sigma2.ravel())
    p = (2 * math.pi) ** (-n / 2) * np.linalg.det(sigma2) ** (-0.5) \
        * np.exp(-0.5 * np.sum((X - mu).dot(np.linalg.pinv(sigma2)) * (X - mu), axis=1))
    return p

def visualize(X):
    plt.scatter(X[:, 0], X[:, 1], marker='x', c='b')
    plt.xlim(0, 30)
    plt.ylim(0, 30)
    plt.xlabel('Latency (ms)')
    plt.ylabel('Throughput (mb/s)')
    plt.show()

def visualizeFit(X,mu,sigma2,outliers,flag):
    X1, X2 = np.meshgrid(np.arange(0, 35.5, .5), np.arange(0, 35.5, .5))
    XX = np.zeros((71 * 71, 2))
    for i in range(71):
        XX[i * 71:(i + 1) * 71, 0] = i * 0.5
        XX[i * 71:(i + 1) * 71, 1] = np.arange(0, 35.5, .5)
    Z = multiGaussian(XX, mu, sigma2).reshape(71,-1).T
    plt.scatter(X[:, 0], X[:, 1], marker='x', c='b')
    if (np.sum(np.isinf(Z) == 0)):
        plt.contour(X1, X2, Z, 10.0 ** np.arange(-20, 0, 3))
    if(flag==1):
        plt.scatter(X[outliers[0],0],X[outliers[0],1],marker='x',c='r')
    plt.xlabel('Latency (ms)')
    plt.ylabel('Throughput (mb/s)')
    plt.xlim(0,30)
    plt.ylim(0,30)
    plt.show()

def selectThreshold(yval,pval):
    bestEpsilon = 0
    bestF1 = 0
    pmin = np.min(pval)
    pmax = np.max(pval)
    stepsize = (pmax - pmin) / 1000
    for epsilon in np.arange(pmin, pmax, stepsize):
        cvPredictions = np.zeros((pval.shape[0], 1))
        for i in range(pval.shape[0]):
            if pval[i] < epsilon:
                cvPredictions[i] = 1
        fp = np.sum((yval == 0) & (cvPredictions == 1) + 0)
        tp = np.sum((yval == 1) & (cvPredictions == 1) + 0)
        fn = np.sum((yval == 1) & (cvPredictions == 0) + 0)
        prec = tp / (tp + fp + 1e-20)
        rec = tp / (tp + fn + 1e-20)
        F1 = 2 * prec * rec / (prec + rec + 1e-20)
        if F1 > bestF1:
            bestF1 = F1
            bestEpsilon = epsilon
    return bestF1,bestEpsilon

def cofiCostFunc(params,Y,R,num_users,num_movies,num_features,lamda):
    X=params[:num_movies*num_features].reshape((num_movies,num_features))
    Theta=params[num_features*num_movies:].reshape((num_users,num_features))
    J = np.sum(np.square(R * X.dot(Theta.T) - Y)) / 2 + lamda / 2 * np.sum(np.square(Theta)) \
        + lamda / 2 * np.sum(np.square(X))
    return J

def cofiGrads(params,Y,R,num_users,num_movies,num_features,lamda):
    X = params[:num_movies * num_features].reshape((num_movies, num_features))
    Theta = params[num_features * num_movies:].reshape((num_users, num_features))
    X_grads = ((R * X.dot(Theta.T) - Y).dot(Theta) + lamda * X).ravel('F')
    Theta_grads = ((R * X.dot(Theta.T) - Y).T.dot(X) + lamda * Theta).ravel('F')
    grads = np.r_[X_grads, Theta_grads]
    return grads.flatten()

def loadMovieList():
    with open('movie_ids.txt', 'rb') as f:
        lines = f.readlines()
        moviesList = []
        for line in lines:
            line = str(line).split(' ', 1)
            newline = line[1].replace('\\n', '')
            newline = newline.replace('\'', '')
            newline = newline.replace('\"', '')
            moviesList.append(newline)
    return moviesList

def normalizeRatings(Y,R):
    ymean = np.zeros((Y.shape[0], 1))
    ynorm = np.zeros(Y.shape)
    for i in range(R.shape[0]):
        idx = np.where(R[i, :] == 1)[0]
        numrated = len(idx)
        ymean[i] = np.sum(Y[i, :]) / numrated
        ynorm[i,idx] = Y[i, idx] - ymean[i]
    return ymean,ynorm

def findCloestMovies(my_ratings,X,movieList,num):
    j = 0
    myFavormovies=X[np.where(my_ratings>0)[0],:]
    recmvList = np.zeros((myFavormovies.shape[0], num))
    for movie in myFavormovies:
        dist = np.zeros((X.shape[0], 1))
        for i in range(X.shape[0]):
            dist[i] = np.linalg.norm(movie - X[i, :])
        sorted = np.argsort((-dist).ravel())[1:num+1]
        recmvList[j:] = sorted
        j = j + 1
    j = -1
    for i in range(len(movieList)):
        if my_ratings[i] > 0:
            j = j + 1
            idx = recmvList[j, :]
            print("%d movies similar to movie %s is" % (num,movieList[i]))
            for k in range(num):
              print("                         %d %s"%(k+1,movieList[int(idx[k])]))

 

机器学习实战成长路线图:从环境配置到模型部署的七步实操指南 机器学习(ML)作为人工智能的核心分支,其本质是通过数据驱动的方式解决预测与决策问题。理解其原理需扎根于数学基础与编程实践,技术价值体现在将模糊业务需求转化为可量化、可迭代、可监控的模型服务。典型应用场景包括用户流失预测、智能推荐、异常检测与图像分类等。然而初学者常困于环境配置失败、特征工程无从下手、模型调参盲目低效等现实瓶颈。本文聚焦scikit-learn工程实践、Kaggle端到端项目闭环、Python数据处理肌肉记忆三大高频痛点,提供一条经1172天验证、43次复盘打磨的渐进式成长路径,覆盖从pip 阅读详情

相关推荐

EM算法逼近GMM参数针对二维数据点的python实现

GMM即高斯混合模型,是将数据集看成是由多个高斯分布线性组合而成,即数据满足多个高斯分布。EM算法用来以迭代的方式寻找GMM中个高斯分布的参数以及权值。GMM可以用来做k分类,而混合的高斯分布个数也就是分类数K。 当数据Y都是一维的时候,我们假设由两个高斯分布组成 就有概率密度函数 PI和1-PI作为各自分布的权值 这样EM的实现步骤矩很简单了

XiaoPANGXia的专栏 4541

C3_W2_Collaborative_RecSys_Assignment_吴恩达_中英_Pytorch

Practice lab: Collaborative Filtering Recommender Systems(实践实验室:协同过滤推荐系统) In this exercise, you will implement collaborative filtering to build a recommender system for movies. 在本次实验中,你将实现协同过滤来构建一个电影推荐系统。 Outline 1 - Notation(注释) 2 - Recommender Syst

2303_79620604的博客 1786

ZYNQ双核通信实战:手把手教你用OpenAMP搭建Linux+FreeRTOS开发环境(2018.3版)

本文详细介绍了如何在ZYNQ平台上使用OpenAMP框架实现双核通信,构建Linux与FreeRTOS协同开发环境。从开发环境配置、系统组件编译到OpenAMP框架应用,手把手指导开发者完成ZYNQ双核通信系统的搭建与调试,为异构计算开发提供实用解决方案。

weixin_33737134的博客 475

机器学习(十八)异常检测

机器学习(十八)异常检测问题提出实际生产过程中,出产投入使用之前,经常会评价某些参数是否有异常,然后再判断是否要重新检测。评价并不是简单的根据特定参数的阈值来的,而是根据宏观上产出群体的所有参数分布得出的。 比如生成飞机引擎,震动和热量参数,对所有出产的引擎进行测试,得到如下分布: 为了评价这种差异,定性分析如下: 高斯分布从上面的直观感受、定性分析可知越接近中心区域的越不可能是异常。

lonelyrains的专栏 1万+

「点燃我,温暖你」用Python制作一个动态爱心效果

最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。

Modeler_xiaoyu的博客 1万+

python指纹识别算法(亲测代码可用)

python指纹识别算法

2301_76482796的博客 3078

机器学习-异常检测(高斯分布模型)-Python代码

知识点 机器学习-【8】异常检测(高斯分布模型)【手抄笔记】 运行效果 程序代码+数据下载 异常检测(高斯分布模型)+测试数据 程序 from tools import TXTtoNumpy import numpy as np import random import matplotlib.pyplot as plt def GaussianParamEstimation...

Brianone的博客 3705

全志T527 适配双目tp2815_mipi

在全志T527 linux下适配双目TP2815 mipi摄像头,支持六路同时输出,四路可用作360环视、一路face id等,一路用于其它开发。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3812

机器学习(八):AnomalyDetection异常检测_Python

七、异常检测 Anomaly Detection github地址:https://github.com/lawlite19/MachineLearning_Python 全部代码 1、高斯分布(正态分布)Gaussian distribution 分布函数: 其中,u为数据的均值,σ为数据的标准差 σ越小,对应的图像越尖 参数估计(parameter estimation) 2、异常检测算法

莫失莫忘的博客 1万+

Docker - 基本概念、与虚拟机的区别、架构、镜像操作、容器操作、数据卷挂载

p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口(配置映射是因为用户只能通过 http 请求访问到服务器,不能直接访问到对应的容器,因此需要服务器端口与容器端口建立映射关系)这里我们有两种启动 redis 的方式,第一种是直接启动 redis ,第二种是以 AOF 持久化的方式启动容器(--appendonly yes),如下图。如果需要持续查看日志信息可以添加 -f 参数,例如:docker logs -f mn ,这里 mn 是自定义容器名称, ctrl + c 可以停止跟踪。

CYK_byte的博客 1万+

SCTPPortScan SCTP协议端口扫描、关联地址识别、传输状态检测

Windows:Winsock2+SCTP扩展)。- **SCTP API封装**:Linux下直接调用`socket()`、`connect()`、`getsockopt()`等系统函数,解析`struct sctp_status`和`struct sctp_paddrinfo`获取状态和关联地址。qDebug() << "开始SCTP扫描:" << ipList.size() << "个IP," << ports.size() << "个端口,共" << m_totalTasks << "个任务";

寒寒豆豆软件公司的博客 91

Andrew Ng coursera上的《机器学习》ex8

Andrew Ng coursera上的《机器学习》ex8按照课程所给的ex8的文档要求,ex8要求完成以下几个计算过程的代码编写: 一、estimateGuasssian.m要求求出符合高斯函数的均值和方差。function [mu sigma2] = estimateGaussian(X) %ESTIMATEGAUSSIAN This function estimates the parame

LilyNothing的博客 3036

2025年7月12日全国青少年信息素养大赛图形化(Scratch)编程小学低年级组复赛真题+答案解析

2025年7月12日全国青少年信息素养大赛图形化(Scratch)编程小学低年级组复赛真题+答案解析

伶俐角少儿编程 709

Python机器学习:从零基础到项目实战

当您翻开此书,您正踏入一场数据与智慧的修行。机器学习,并非冰冷的符码,而是机器模拟人类洞察世界的法门。本书将带您,以Python为舟,泛游于算法之海。我们不只传授“术”,更探求其后的“道”——从数据的生灭流转中观照规律,于模型的迭代演进里体悟得失。愿您合上书卷时,收获的不仅是驾驭数据的技能,更有一双洞悉复杂、化繁为简的“智慧之眼”。现在,让我们一同启程。

YunWisdom 966

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python深度学习:从入门到实战

亲爱的读者,欢迎您翻开这本书。我们即将探索的,是深度学习的宇宙——一个由数据、算法与算力构筑的奇妙世界。它既是严谨的科学,也是创造的艺术,更是一条通往未来智慧的修行之路。本书将带您从最基础的数学原理出发,亲手搭建神经网络,驾驭Transformer等前沿模型,最终将智慧转化为现实世界的价值。请放下畏惧,保持好奇。这不仅是一次知识的学习,更是一场思维的远行。来,随我一起,开启这趟非凡的旅程吧。

Yuner2000的博客 209

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

斯坦福大学(吴恩达) 机器学习课后习题详解 第九周 编程题 异常检测与推荐系统

作业 下载 地址:https://download.youkuaiyun.com/download/wwangfabei1989/10326175 1. estimateGaussian.m function [mu sigma2] = estimateGaussian(X) %ESTIMATEGAUSSIAN This function estimates the parameters of a...

未来战警 2608

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python异常值检测

Anomaly Detection异常检测 What are Outliers ? Statistical Methods for Univariate Data Using Gaussian Mixture Models Fitting an elliptic envelope Isolation Forest Local Outlier Factor Using clustering met...

平平淡淡,戒急用忍,一生学闭嘴。 5848

python3环境下使用EM算法实现GMM

# 导入模块 import numpy as np import matplotlib.pyplot as plt from scipy.stats import multivariate_normal # 构建测试数据 N = 200; pi1 = np.array([0.6, 0.3, 0.1]) mu1 = np.array([[0,4], [-2,0], [3,-3]]) sigma1 ...

sinat_38369128的博客 1221

高斯混合模型GMM理论和Python实现

简述 高斯混合模型,就是说用多个高斯函数去描述不同的元素分布。 通过EM方法来迭代生成不同的高斯模型的各个参数。 具体的EM算法的理论网上很多,但推荐各位先看完这个算法思路之后,再去看理论推导就更加好了。 更新方法 μi′=∑j=1mηji∗xj∑j=1mηji\mu_i^{&#x27;} = \frac{\sum_{j=1}^m{\eta_{ji} * x_j}}{\sum_{j=1}...

gc.collect() 5391
上一篇: Coursera NG 机器学习 第七周 KMeans PCA 图像压缩 Python实现
下一篇: Coursera NG 机器学习 第五周 正则化 bias Vs variance Python实现
csdn_inside
博客等级 码龄10年 52粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值