IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【数据处理_异常值检测及处理】 -> 正文阅读

[人工智能]【数据处理_异常值检测及处理】

在数据清洗的过程中,异常值的检测及处理是非常重要的一部分,现就以下问题学习异常值的相关知识。

1.什么是异常值?

??指样本中个别数值明显偏离其余的观测值,比如一个学生的年龄<0,身高>5m等等,这些数据都属于异常值

2.异常值有什么影响?

??回归模型对异常值比较敏感,如果数据样本中存在异常值,那么模型的拟合,变量的系数、显著性等都会产生较大影响。

3.怎么检测异常值?

- 箱型图

??首先计算变量的分位数(Q1、Q3),然后得到四分位数极差IQR=Q3-Q1,那么小于Q1-1.5IQR 或 大于Q3+1.5IQR的值称为异常值
在这里插入图片描述

代码如下:

# 函数:统计学方法计算每个字段的异常值情况
def outlier_box(data,cols_all,k=1.5):
    '''
    args:
        data:数据源
        cols_all:进行异常值分析的字段,列表形式
        k:超过高低四分位数时IQR的比例,1.5:中度异常,3:重度异常
    return:
        data_outlier:
            outlier_low:下部异常值
            outlier_up:上部异常值
            outlier_len:异常值记录条数
    '''
    outlier = {}
    for col in cols_all:
        print(col)
        # 下限
        low = np.percentile(data[col],25) - k*(np.percentile(data[col],75)-np.percentile(data[col],25))  
        low = float(np.where(low<data[col].min(),np.nan,low))
        # 上限
        up = np.percentile(data[col],75) + k*(np.percentile(data[col],75)-np.percentile(data[col],25))   
        up = float(np.where(up>data[col].max(),np.nan,up))
        # 异常记录条数
        out_index = (data[col]<low) | (data[col]>up)
        out_len = len(data[out_index]) 
        
        outlier[col] = [low,up,out_len]
        
    data_outlier = df(outlier).T.rename(columns={0:'outlier_low',1:'outlier_up',2:'outlier_len'})
    return data_outlier

# 画图:箱型图检测异常值
import seaborn as sns
sns.boxplot(data=data,whis=1.5)
'''
    x=None,
    y=None,
    hue=None,按照列名中的值分类形成分类的条形图
    data=None,
    order=None,用于控制条形图的顺序
    hue_order=None,用于控制条形图的顺序
    orient=None,"v"|"h" 用于控制图像使水平还是竖直显示(这通常是从输入变量的dtype推断出来的,此参数一般当不传入x、y,只传入data的时候使用)
    color=None,
    palette=None:调色板,控制图像的色调
    saturation=0.75,饱和度
    width=0.8,控制箱型图的宽度
    dodge=True,
    fliersize=5,用于指示离群值观察的标记大小
    linewidth=None,构图元素的灰线宽度
    whis=1.5,该值为超过高低四分位数时IQR的比例,超出此范围的点视为异常值
    ax=None,
'''

- 3σ准则

??如果样本是正态分布或者近似正态分布,认为数值分布在(μ-3σ,μ+3σ)中的概率为99.73%,超过这个范围的极大或极小值,即为异常值。
在这里插入图片描述

代码如下:

# 函数:3σ准则
def outlier_3sigma(data,cols_all):
    '''
    args:
        data:数据源
        cols_all:进行异常值分析的字段,列表形式
    '''
    outlier = {}
    for col in cols_all:
        print(col)
        miu = np.average(data[col]) # 均值
        sigma = np.std(data[col])   # 标准差
        # 下限
        low = miu - 3*sigma
        low = float(np.where(low<data[col].min(),np.nan,low))
        # 上限
        up = miu + 3*sigma
        up = float(np.where(up>data[col].max(),np.nan,up))
        # 异常记录条数
        out_index = (data[col]<low) | (data[col]>up)
        out_len = len(data[out_index]) 
        
        outlier[col] = [low,up,out_len]
        
    data_outlier = df(outlier).T.rename(columns={0:'outlier_low',1:'outlier_up',2:'outlier_len'})
    return data_outlier
      
# 画图:分布图
from matplotlib import pyplot as plt 
nrow = 2
ncol = 2
fig,axs = plt.subplots(nrows=nrow,ncols=ncol)

for i in range(nrow):
    print(i)
    for j in range(ncol):
        print(j)
        sns.distplot(data.iloc[:,i+j+1],ax=axs[i,j])

- DBSCAN聚类

过程:
1)在数据集中任意选取一个数据点 p 作为起始点;

2)对于给定的参数 eps(半径) 和 min_samples(最小样本数),
如果距起始点 p 的距离在 eps 之内的数据点个数小于 min_samples,那么这个点 p 被标记为噪声
如果距离在 eps 之内的数据点个数大于 min_samples,则这个点 p 被标记为核心样本,并被分配一个新的簇标签;

3)访问该点 p 的所有邻居(在距离 eps 以内)
如果它们还没有被分配一个簇,那么就将刚刚创建的新的簇标签分配给它们,
如果它们是核心样本,那么就依次访问其邻居,以此类推,
直到在簇的 eps 距离内没有更多的核心样本为止;

4) 选取另一个尚未被访问过的点,并重复相同的过程,直到所有点被处理。

代码如下:

from sklearn.preprocessing import StandardScaler
from sklearn.cluster import DBSCAN
# 标准化
stscaler = StandardScaler().fit(data)
data = stscaler.transform(data)

db = DBSCAN(min_samples = 20, eps = 3).fit(data)
y_pred = DBSCAN(min_samples = 20, eps = 3).fit_predict(data)

# plt.scatter(data[:,0],data[:,1],c=y_pred) # 数据维度低可以可视化查看效果

from sklearn import metrics  
score = metrics.silhouette_score(data,y_pred) # 轮廓系数评估聚类效果

4.异常值怎么处理?

  • 删除
  • 填充(盖帽、均值等)
  • 不处理
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:35:19  更:2022-03-22 20:37:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:39:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码