zoukankan      html  css  js  c++  java
  • 数据规约

    数据规约

    • 再大数据集上进行复杂得数据分析和挖掘需要很长得时间,数据规约产生更小但保持原数据完整性得新数据集,再规约后得数据集上进行分析和挖掘将更有效率
    • 数据规约得意义
      1. 降低无效,错误数据对建模得影响,提高建模得准确性
      2. 少量且具有代表性得数据将大幅缩减数据挖掘所需得时间
      3. 降低存储数据得成本
    • 属性规约
      • 属性规约通过属性合并来创建新属性维数,或者直接通过删除不相关得属性(维)来减少数据维数,从而提高数据挖掘得效率,降低计算成本.属性规约得目标是寻找出最小得属性子集并确保新数据子集得概率分布尽可能地接近原来数据集得概率分布,属性规约常用方法如下表:
      • 属性规约方法
        方法描述
        方法解析
        主要成分分析 用较少变量取解释原始数据中得大部分变量,即将许多相关型很高得变量转化成彼此相互独立或不相关得变量
        决策树归纳 利用决策树得归纳方法对初始数据进行分类归纳学习,获得一个初始决策树,所有没有出现再这个决策树上得属性均可认为是无关属性,因此将这些属性从初始集合中删除就可以获得一个较优得属性子集 初始属性集: {A1,A2,A3,A4,A5,A6}
        合并属性 将一些旧属性合并为新属性

        初始属性集: {A1,A2,A3,A4,B1,B2,B3,C}

        {A1,A2,A3,A4} -→A

        {B1,B2,B3,B4}-→B

        ===>规约后属性集:{A, B, C}

        逐步向前选择 从一个空属性集开始,每次从原来属性集合中选择一个当前最优得属性添加到当前属性子集中.直到无法选择出最优属性或满足一定阈值约束为止 初始属性集: {A1,A2,A3,A4,A5,A6} {}=>{A1}=>{A1,A4} =>规约后属性集:{A, B, C}
        逐步向后删除 从一个全属性集开始,每次从当前属性子集真能干选择一个当前最优得属性添加到当前属性子集中.直到无法选择出最差属性为止或满足一定阈值约束为止 初始属性值: {A1,A2,A3,A4,A5,A6} {}=>{A1,A3,A4,A5,A6}=>{A1,A4,A5,A6}=>规约后属性集:{A1,A4,A6}
      • copy
        • 类型:bool,True或者False,缺省时默认为True
        • 意义:表示是否在运行算法时,将原始训练数据复制一份.若为True,则运行PCA算法后,原始训练数据得值不会有任何改变,因为是再原始数据得副本上进行运算;若为False,则运行PCA算法后,原始训练数据得值会改,因为是在原始数据上进行降维计算
      • whiten
        • 类型:bool,缺省时默认为False
        • 意义:白化,使得每个特征具有相同得方差
      • import pandas as pd
        from sklearn.decomposition import PCA
        
        data = pd.read_csv("principal_component.csv", header=None)
        
        pca = PCA()  # 实例化PCA这个类
        pca.fit(data)  # 训练数据
        pca.components_  # 返回模型得各个向量特征
        pca.explained_variance_ratio_  # 返回各个成分各自得方差百分比
        得到相应得特征向量和各个方差得百分比(也称贡献率),其中方差备份逼越大,向量得权重越大,当选中其中得几个主要得成分时,累计贡献量达到97.37%,
        说明选取这几个成分已经相当不错了,因此可以重新建立PCA模型,选取n_components=之前选取得成分数,从而计算出成分结
        pca = PCA(3)
        pca.fit(data)
        low_d = pca.transform(data)  # 降低原数据得维度
        pd.DataFrame(low_d).to_csv("dimention_reducted.csv")  # 保存结果
        
        pca.inverse_transform(low_d)  # 必要可以用inverse_trans_form()函数来复原数据
      • 数值规约
        • 数值规约是指通过选择代替得,较小的数据来减少数据量,包括有参数方法和无参数方法两类.有参数方法时使用一个模型来评估数据,只需存放参数,而不需要存放实际数据,例如回归(线性回归和多元回归)和对数线性模型(近似离散属性集中得多维概率分布).无参数方法就需要存放实际数据,例如直方图,聚类,抽样(采样)
        • 直方图:
          • 直方图使用分箱来近似数据分布,是一种流行得数据规约形式.属性A得直方图将A得数据分布划分为不相交得子集或桶.如果每个桶只代表单个属性值/频率对,则该桶称为单桶.通常,桶表示给定属性得一个连续区间
        • 聚类:
          • 聚类技术将数据元组(即记录,数据表中的一行)视为对象.它将对象划分为簇,使一个簇中得对象相互"相似",而与其他簇中得对象"相异".再数据规约中,用数据得簇替换实际数据.该技术得有效性依赖于簇得定义是否符合数据分布得性质
        • 抽样:
          • 抽样也会死一种数据规约计数,他用比原始数据小得多得随机样本(子集)表示原始数据集.假定原始数据集D包含N个元组,可以采用抽样方法对D进行抽样
          • s个样本无放回简单随机抽样:从D得N个元组中抽取s个样本(s<N),其中D中任意元组被抽取得概率均为1/N,即所有元组得抽取时等可能得
          • s个样本有放回简单随机抽样:该方法类似于无放回简单随机抽样,不同在于每次一个元组从D中国抽取后,记录它,然后放回原处
          • 聚类抽样:如果D中得元组放入M个互不相交得得"簇",则可以得到s个簇得简单随机抽样,其中s<M.例如,数据库中元组通常依次检索一页,,这样每页就可以视为一个簇
          • 分层抽样:如果D划分互不相交得部分,称作层,则通过对每一层得简单随机抽样就可以得到D得分层样本.
          • 用于数据规约时,抽样最常用来估计聚集查询得结果,再指定得误差范围内,可以确定(使用中心基线定理)估计一个给定得函数所需要得样本大小.通常样本得大小s相对于N非常小,而通过简单地增加样本大小,这样得集合可以进一步求精.
        • 参数回归:
          • 简单线性模型和对数线性模型可以用来近似描述给定得数据.线性模型对数据建模,使之拟合一条直线.
      • Python主要数据预处理函数
          • 函数名
            函数功能
            所属扩展库
            interpolate 一维,高维书插值 scipy
            unique 去除数据中得重复元素,得到单值元素列表,它是对象得方法名 Pandas/Numpy
            isnull 判断是否为空值 pandas
            notnull 判断是否非空值 pandas
            PCA 对指标表变量矩阵进行主成分分析 Scikit-Learn
            random 生成随机矩阵 Numpy
        • interpolate

            • 功能:interpolate时Scipy得一个子库,包含了大量得插值函数,如拉格朗日插值,样条插值,高维插值等.使用前需要用from scipy.interpolate import *引入相应得插值函数.
            • 使用格式:f = scipy.interpolate.lagrange(x,y).这里仅仅展示了一维数据得拉格朗日插值命令,其中x,y为对应得自变量和因变量数据,插值完成后,可以通过f(a)计算新的差hi结果.
        • unique:
          • 功能:去除数据中得重复元素,得到单值元素列表.它即是Numpy库得一个函数(np.unique()),也是series对象得一个方法
          • 使用格式:
            • np.unique(D),D是一维数据,可以是list,array,Series;
            • D.unique(), D是pandas得Series对象
        • isnull/notnull
          • 功能:判断每个元素是否空值/非空值
          • 使用格式: D.isnull()/D.notnull.这里得D要求是Series对象,返回一个布尔Series.可以通过D[D.isnull()]或D[D.notnull()]找出D中得空值/非空值
        • random:
          • 功能:random是Numpy得一个子库(Python也自带了random,但Numpy得更强大),可以用该库下得各种函数生成服特定分布得随机矩阵,抽样时可以使用
          • 使用格式: np.random.rand(k, m, n,...) 生成一个k * m * n ...随机矩阵,其元素均匀分布再区间(0, 1)上, np.random.randn(k, m, n)随机矩阵,其元素服从标准正太分布
        • PCA
          • 功能:对指标变量矩阵进行主成分分析.使用前需要用from sklearn.decomposition import PCA引入该函数
          • 使用格式: model=PCA().注意, Scikit-Learn下的PCA是一个建模得对象,也就是说,一般得流程是建模,然后是训练model.fit(D), D为要进行主成分分析得数据矩阵,训练结束后获取模型参数,如.components_获取特征向量, 以及.explained_variance_ratio_获取各个属性得贡献率等
        • # -*- coding:utf-8 -*-
          
          import sys
          
          reload(sys)
          sys.setdefaultencoding("utf-8")
          
          import numpy as np
          from sklearn.decomposition import PCA
          
          D = np.random.rand(10, 4)
          pca = PCA()  # 建立模型
          pca.fit(D)  # 训练模型
          PCA(copy=True, n_components=None, whiten=False)
          print pca.components_  # 返回模型得各个特征向量
          print pca.explained_variance_ratio_  # 返回各个成分各自得方差百分比
  • 相关阅读:
    构建自己的PHP框架--定义ORM的接口
    装X神器--Hacker Typer
    inno setup读取注册表遇到的一个坑
    一个简单的inno setup模板
    Android Studio导入项目非常慢的解决办法
    Android Studio快捷键每日一练(6)
    Android Studio快捷键每日一练(5)
    Android Studio快捷键每日一练(4)
    Android中的FragmentManager的问题
    Android Studio快捷键每日一练(3)
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/11751620.html
Copyright © 2011-2022 走看看