数据预处理——数据特征选择

数据类型——面对什么数据
数据质量——数据有什么问题
数据预处理——如何解决数据问题
数据量化表示——相似和相异如何量化表示

数据类型和质量

数据集:一个基本数据集是由对象和属性构成

属性和度量
在这里插入图片描述
测量常常是表示数据和现实之间的关系,不能完全的反映。
**测量标度(measurement scale)**将数值或符号和对象的属性相关联的规则或函数,将一个值和一个特定对象的特定属性相关联。
不同属性在、适用范围和操作方式上存在显著差异。

  1. 对操作影响在这里插入图片描述
  2. 对属性的影响
    在这里插入图片描述数据的展现形式:
    矩阵、图、时间序列

数据质量
测量误差:包括测量对象的误差或者是属性的误差
噪声:测量误差的随机部分,通常涉及值得扭曲或加入其他谬误对象因此在设计挖掘工作关注鲁棒法
离群点:特征极端点、利用异常检测
遗失值:通常采用删除法或者查值法解决
不一致值:具体问题具体分析,如地址信息(长地址统一)、人名消歧(多人一名,一人多名)等等
重复数据:如果两个对象实际代表同一个对象,但属性有所区别,就需要解决不一致值问题,避免因高度相似简单去重。

数据预处理

抽样
选择数据的子集,找到最有代表性的样本,因为代表性强的样本和使用整个数据集的效果几乎一样,注意在选择样本时候的信息丢失问题。
区别统计学抽样的不同在于,统计学获取感兴趣整个数据集代价太高且太费时间,处理所有数据所需要的内存和时间方面计算成本太高。注意解决:过采样和欠采样——可以补齐样本或删除样本

渐进抽样法:当合适的样本容量很难确定时,可以使用的抽样方法是渐进抽样

聚集
先有一定的分组,将两个或多个 对象合并成为单个对象。
动机:数据规约使得较小数据集仅需要更少内存和处理时间;聚集起到范围或标度转换的作用,得到更高层的视图;对象或属性群的行为通常比个体属性更为稳定。

特征提取

1 将任意数据(如文本或图像)转换为可用于机器学习的数字特征
注:特征值化是为了计算机更好的去理解数据
具体内容:
字典特征提取(特征离散化)
文本特征提取
图像特征提取
应用DictVectorizer实现对类别特征进行数值化、离散化
应用CountVectorizer实现对文本特征进行数值化
应用TfidfVectorizer实现对文本特征进行数值化

对字典特征进行提取

  1. sklearn.feature_extraction.DictVectorizer(dtype=<class’numpy.float64’>,separator=’=’,sparse=True,sort=True)
    将<特征-值>映射转化为向量。字典类型的对象转化为numpy.array或者scipy.sparse,特征值为string类型时,向量表示为one-hot二元编码,出现的string为1,其余为0。特征值为int等数字类型时,对应的值为相应的数字。
    参数:
    dtype:特征值的类型。
    separator:可选。当特征值为string时,用来连接特征名称和值的符号,默认为’=’。例,当特征名为’f’,而特征值含有’pam’和’spam’时,one-hot对应的向量名为’f=pam’和’f=spam’
    sparse:boolean,可选。默认为True,转换过程中生成一个scipy.sparse矩阵。当数据多表示为one-hot类型时,占用内存过大,稀疏表示可以节约大量空间。
    sort:boolean,可选,默认为True。转化完成后对feature_names_和vocabulary_按字典序排列。
    属性:
    feature_names_:长度为n_features的列表,含有所有特征名称.
    vocabulary_:字典类型,特征名映射到特征在list中的index的字典对象

  2. DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵

  3. DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式

  4. DictVectorizer.get_feature_names() 返回类别名称

from sklearn.feature_extraction import DictVectorizer
def dict_demo():
    """
    对字典类型的数据进行特征抽取
    :return: None
    """
    data = [{
    
    'city': '北京','temperature':100}, {
    
    'city': '上海','temperature':60}, {
    
    'city': '深圳','temperature':30}]
    # 1、实例化一个转换器类
    transfer = DictVectorizer(sparse=False)
    # 2、调用fit_transform
    data = transfer.fit_transform(data)
    print("返回的结果:\n", data)
    # 打印特征名字
    print("特征名字:\n", transfer.get_feature_names())

    return None

对文本特征进行提取
处理文本的步骤应该是先使用 preprocessor参数提供预处理器,对文本进行预处理。在使用tokenizer对文本进行拆分。再使用fit拟合得到词汇表,再使用transform转换为计数矩阵。
5. sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
返回词频矩阵, 如果不提供一个先验字典,并且不使用进行某种特征选择的分析器,那么特征的数量将与通过分析数据得到的词汇表的大小一致。
CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格
CountVectorizer.get_feature_names() 返回值:单词列表
sklearn.feature_extraction.text.TfidfVectorizer

  1. jieba进行分词

Tf-idf文本特征提取
分类机器学习算法进行文章分类中前期数据处理方式
TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量,某一类词在文本出现的次数除以文本词数。
某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到
在这里插入图片描述

特征预处理

通过转换函数将特征转化成更符合算法模型的特征数据的过程。解决特征单位不同、大小差异过大等对结果带来不良影响问题。
数值型数据无量钢化:归一化和标准化
应用MinMaxScaler实现对特征数据进行归一化
应用StandardScaler实现对特征数据进行标准化

归一化——映射到[0,1]间
在这里插入图片描述
归一化好处
1、对于方差非常小的属性可以增强其稳定性。
2、维持稀疏矩阵中为0的条目
3、…
利用API:
sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
MinMaxScalar.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

import numpy as np
from sklearn import preprocessing
X_train =np.array([[1.,-1.,2.],
                 [2.,0.,0.],
                 [3.,1.,0.],
                 [4.,0.,1.]])
min_max_scaler =  preprocessing.MinMaxScaler()
x_train_minmax = min_max_scaler.fit_transform(X_train)
X_train_minmax

注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

标准化
通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内。对每一列作用mean为平均值,σ为标准差在这里插入图片描述
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
利用API:
sklearn.preprocessing.StandardScaler( )处理之后每列来说所有数据都聚集在均值0附近标准差差为1
StandardScaler.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

猜你喜欢

转载自blog.csdn.net/matthewchen123/article/details/108664471
今日推荐