热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

异常检测(三)之线性模型

线性模型即线性方法,本文介绍线性回归与主成成分分析2种方法对数据进行线性建模的两个前提:近似线性相关假设因变量与所有自变量存在线性关系,且与每一个自变量之间都存在线性关系的假设子空



线性模型即线性方法,本文介绍线性回归与主成成分分析2种方法
对数据进行线性建模的两个前提:


  • 近似线性相关假设
    因变量与所有自变量存在线性关系,且与每一个自变量之间都存在线性关系的假设
  • 子空间假设
    子空间假设认为数据是镶嵌在低维子空间中的,线性方法的目的是找到合适的低维子空间使得异常点(o)在其中区别于正常点(n)。

  1. 数据可视化
    首先,确定数据集适应的模型,因此需要对数据进行可视化
    采用的数据集为breast-cancer-unsupervised-ad数据集,下载地址:
    数据集包下载
    观察数据,打印出前5行,共31列,最右边的列为标签在这里插入图片描述
    使用train.tail()函数,观察数据尾部,得到一共367行数据
    使用train.describe()函数,得到数据的最大值最小值等统计量,如下图
    在这里插入图片描述
    使用train.info()函数,每一列数据的类型和数量,可见每一列都是367个数据,类型是64位,如下图
    在这里插入图片描述
    得到数据的特征,首先计算相关系数,即计算线性数据的相关系数。

numeric_features = ['f' + str(i) for i in range(30)]
print(numeric_features)
## 1) 相关性分析
numeric = train_data[numeric_features]
correlation = numeric.corr()
print(correlation)#相关系数
f , ax = plt.subplots(figsize = (14, 14))
sns.heatmap(correlation,square = True)
plt.title('Correlation of Numeric Features with Price',y=1,size=16)
plt.show()
f = pd.melt(train_data, value_vars=numeric_features)#列数据合并为行数据
print(f)
g = sns.FacetGrid(f, col="variable", col_wrap=6, sharex=False, sharey=False)#结构化多绘图网格,col_wrap=6-6列,是否共享x轴或者y轴
g = g.map(sns.distplot, "value", hist=False, rug=True)
sns.set()
#主要展现的是变量两两之间的关系
sns.pairplot(train_data[numeric_features],size = 2 ,kind ='scatter',diag_kind='kde')#对于特征使用散点图
plt.savefig('correlation.png')
plt.show()

facetgrid:多网格,不共享x或者y轴
pairplot:
kind:用于控制非对角线上的图的类型,可选"scatter"与"reg"

diag_kind:控制对角线上的图的类型,可选"hist"与"kde"
最终输出为:
热力图
热力图,相关系数
在这里插入图片描述
facegrid输出,30,30个特征的分布
在这里插入图片描述
pairplot输出,30*30,两两之间

接着使用降维方法:TSNE
t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 等在08年提出来。此外,t-SNE 是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可视化。该算法可以将对于较大相似度的点,t分布在低维空间中的距离需要稍小一点;而对于低相似度的点,t分布在低维空间中的距离需要更远。
其主要用于可视化,很难用于其他目的,t-SNE没有唯一最优解,且没有预估部分。点击这里查看更多有关tsne的介绍

init:字符串,可选(默认值:“random”)嵌入的初始化。可能的选项是“随机”和“pca”。 PCA初始化不能用于预先计算的距离,并且通常比随机初始化更全局稳定

#数据降维可视化
from sklearn.manifold import TSNE
tsne = TSNE(n_compOnents=2, init='pca', random_state=0)
result = tsne.fit_transform(numeric)
x_min, x_max = np.min(result, 0), np.max(result, 0)
#对结果进行标准化
result = (result - x_min) / (x_max - x_min)
label = train_data['label']
fig = plt.figure(figsize = (7, 7))
#f , ax = plt.subplots()
color = {'o':0, 'n':7}#8种颜色
for i in range(result.shape[0]):
plt.text(result[i, 0], result[i, 1], str(label[i]),
color=plt.cm.Set1(color[label[i]] / 10.),#颜色
fOntdict={'weight': 'bold', 'size': 9})#字体
plt.xticks([])
plt.yticks([])
plt.title('Visualization of data dimension reduction')

在这里插入图片描述
可以看到上面的图非常奇怪。。。
确实也分开了,接下来使用pca看看效果:


  1. PCA提取特征
    首先用pyod库生成example,这里选择生成30维的数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pyod as py
from pyod.utils.data import generate_data
from pyod.models.pca import PCA
from pyod.utils.example import visualize
from pyod.utils.data import evaluate_print
import seaborn as sns
#生成数据 维度30
x_train,y_train=generate_data(
n_train=500, n_features=30,
train_Only=True,behaviour='old',offset=10)
outlier_fraction = 0.1

再将数据转换成dataframe格式,看看数据之间的关联性

#转换为dataframe
df_train = pd.DataFrame(x_train)
numeric_features = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]
print(numeric_features)
numeric = df_train[numeric_features]
correlation = numeric.corr()#相关系数
f , ax = plt.subplots(figsize = (14, 14))
sns.heatmap(correlation,square = True)
plt.title('Correlation of Numeric Features with Price',y=1,size=16)
plt.show()
f = pd.melt(df_train, value_vars=numeric_features)#列数据合并为行数据
print(f)
g = sns.FacetGrid(f, col="variable", col_wrap=6, sharex=False, sharey=False)#结构化多绘图网格,col_wrap=6-6列,是否共享x轴或者y轴
g = g.map(sns.distplot, "value", hist=False, rug=True)
sns.set()
#主要展现的是变量两两之间的关系
sns.pairplot(df_train[numeric_features],size = 2 ,kind ='scatter',diag_kind='kde')#对于特征使用散点图
plt.savefig('correlation.png')
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

随后对数据进行PCA分析

df_train['y'] = y_train
#定义异常值点
x_outliers, x_inliers = py.utils.data.get_outliers_inliers(x_train,y_train)
n_inliers = len(x_inliers)
n_outliers = len(x_outliers)
sns.scatterplot(x=0, y=1, hue='y', data=df_train)
plt.show()
xx , yy = np.meshgrid(np.linspace(-10, 10, 200), np.linspace(-10, 10, 200))
#使用PCA
classifiers = {
'Principal component analysis (PCA)': PCA(n_compOnents=2,cOntamination=outlier_fraction)
}
for i, (clf_name, clf) in enumerate(classifiers.items()):
clf.fit(x_train)
y_train_pred = clf.labels_ # binary labels (0: inliers, 1: outliers)
y_train_scores = clf.decision_scores_ # raw outlier scores
# get the prediction on the test data
clf_name = 'PCA'
print("\nOn Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)
# print(precision_score(y_train,y_train_pred))
sns.scatterplot(x=0, y=1, hue=y_train_scores, data=df_train, palette='RdBu_r')
plt.show()

在这里插入图片描述

在这里插入图片描述
可见效果良好。



推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • python seaborn_大白话Python绘图系列Seaborn篇
    1.目的了解python第三方绘图包seaborn,从常用绘图实例开始,快速体验seaborn绘图。建议用时:10分钟绘图例子:12个每个例子代码量:1 ... [详细]
  • 注意力汇聚:NadarayaWatson 核回归
    Nadaraya-Watson核回归是具有注意力机制的机器学习范例。Nadaraya-Watson核回归的注意力汇聚是对训练数据中输出的加权平均。从注意力的角度来看, ... [详细]
  • 开发笔记:共享单车数据分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了共享单车数据分析相关的知识,希望对你有一定的参考价值。共享单车数据分析和共享单车用户行为分析PPT从数据分 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • 循环发电厂电能输出预测
    前言本次项目是就某联合循环发电厂的数据,运用线性回归模型进行预测电能输出,若文中出现错误的地方,还望指正,谢谢!目录1.数据来源及背景2.数据探索分析3.相关分析4.回 ... [详细]
  • Python交叉分析学习笔记
    Python交叉分析学习笔记本文将介绍两种方法来进行交叉分析:1.独立T检验2.数据透视表。数据源:百度网盘,课程来源:慕课网数据源共包括10个变量,如下:satisfaction ... [详细]
author-avatar
手机用户2602918163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有