特征的基本处理

一.特征抽取

1.字典特征提取

  • sklearn.feature_extraction.DictVectorizer
  • 语法使用:
  1. DictVectorizer(sparse=True) # sparse默认为True,返回sparse矩阵
  2. DictVectorizer.fit_transform(X)
    X:字典或包含字典的迭代器
    返回值:返回sparse矩阵
  3. DictVectorizer.inverse_transform(X) # 不常用
    X:array数组或sparse矩阵
    返回值:转换之前数据格式
  4. DictVectorizer.get_feature_names()
    返回类别名称
  5. DictVectorizer.transform(X)
    按照原先的标准转换
    eg:
import numpy as np
import pandas as pd
from sklearn.feature_extraction import DictVectorizer

a=[{'city':'北京','temperature':100},  #创建数据
{'city': '上海','temperature':60},
{'city': '深圳','temperature':30}]

def dictvec(x):  #封装一个函数
    ''' 
    字典数据抽取
    '''
    #实例化
    dict=DictVectorizer()
    #调用fit_transform
    data=dict.fit_transform(x)
    return print(data)

dictvec(a)   #sparse矩阵

在这里插入图片描述

#实例化
dict=DictVectorizer(sparse=False)   #修改为False后,输出为ndarray数组
#调用fit_transform
data2=dict.fit_transform(a)
dict.get_feature_names(),data2      #ndarray二维数组

在这里插入图片描述

2.1文本特征抽取1(count法进行特征值化)

  • sklearn.feature_extraction.text.CountVectorizer
  1. CountVectorizer()
    返回词频矩阵
  2. CountVectorizer.fit_transform(X)
    X:文本或包含文本字符串的可迭代对象
    返回值:返回sparse矩阵
  3. CountVectorizer.inverse_transform(X)
    X:array数组或者sparse矩阵
    返回值:转换之前数据格式
  4. CountVectorizer.get_feature_names()
    返回值:单词列标
    eg:
from sklearn.feature_extraction.text import CountVectorizer

b=["life is short,i like python",
"life is too long,i dislike python"]

def countvec(x):
    '''
    对文本进行特征值化
    '''
    cv=CountVectorizer()
    data=cv.fit_transform(x)
    return print(data)
    
countvec(b)         #sparse矩阵

在这里插入图片描述

def countvec2(x):   #输出ndarray及特征名称
    '''
    对文本进行特征值化
    '''
    cv=CountVectorizer()
    data=cv.fit_transform(x)
    feature_names=cv.get_feature_names()
    return print(data.toarray()),feature_names  #.toarray()转化为数组
    
countvec2(b)        

在这里插入图片描述

2.2文本特征抽取2(tfidf)

– tf:term frequency(词的频率)

  • idf:inverse document frequency(逆文档评率)
    log(总文档数量/该词出现的文档数量)
    1.sklearn.feature_extraction.text.TfidfVectorizer
    2.TfidfVectorizer(stop_words=None,…)
    返回词的权重矩阵
    3.TfidfVectorizer.fit_transform(X,y)
    X:文本或者包含文本字符串的可迭代对象
    返回值:返回sparse矩阵
    4.TfidfVectorizer.inverse_transform(X)
    X:array数组或者sparse矩阵
    返回值:转换之前数据格式
    5.TfidfVectorizer.get_feature_names()
    返回值:单词列表
  • 由于未安装jieba分词,这里暂不演示。

二.特征预处理:对连续型变量进行处理

1.归一化

  • sklearn.preprocessing
  • 特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
  • 注:作用于每一列,max为一列的最大值,min为一列的最小值,那么X’'为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0
  • 𝑋^′= (𝑥−𝑚𝑖𝑛)/(𝑚𝑎𝑥−𝑚𝑖𝑛)
  • 𝑋′′=𝑋′∗(𝑚𝑥−𝑚𝑖)+𝑚𝑖
  1. sklearn.preprocessing.MinMaxScaler

  2. MinMaxScalar(feature_range=(0,1)…)
    每个特征缩放到给定范围(默认[0,1])

  3. MinMaxScalar.fit_transform(X)
    X:numpy array格式的数据[n_samples,n_features]
    返回值:转换后的形状相同的array

特点:
  • 消除量纲的影响
  • 容易受到异常值干扰,鲁棒性较差(稳定性较差),只适合传统精确小数场景

eg:

from sklearn.preprocessing import MinMaxScaler,StandardScaler
df=pd.DataFrame({'x1':[90,2,10,40],'x2':[60,4,15,45],'x3':[75,3,13,46]})
mm=MinMaxScaler()
mm.fit_transform(df.T)

在这里插入图片描述

nn=MinMaxScaler(feature_range=(2,3))   # 设置区间在[2,3]
nn.fit_transform(df.T)

在这里插入图片描述

2.标准化

  • 𝑋^′= (𝑥−mean)/𝜎
  • 注:作用于每一列,mean为平均值,𝜎为标准差(考量数据的稳定性)
  1. scikit-learn.preprocessing.StandardScaler

  2. StandardScaler(…)
    处理之后每列来说所有数据都聚集在均值0附近方差为1

  3. StandardScaler.fit_transform(X,y)
    X:numpy array格式的数据[n_samples,n_features]
    返回值:转换后的形状相同的array

    StandardScaler.mean_
    原始数据中每列特征的平均值

    StandardScaler.std_
    原始数据每列特征的方差

特点:
  • 通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
  • 适合大数据场景

eg:

df2=pd.DataFrame({'x1':[1,-1,3],'x2':[2,4,2],'x3':[4,6,-1]})
ST=StandardScaler()
ST.fit_transform(df2.T)

在这里插入图片描述

三.特征的降维

1.特征选择和降维有诸多方法,这里只简单讲述主成分分析的降维。

2.主成分分析PCA

  1. sklearn. decomposition

  2. PCA(n_components=None)
    可以填写小数,表示分解后保留多少数据,一般90%到95%
    也可以直接填写整数,保留几个特征
    将数据分解为较低维数空间

  3. PCA.fit_transform(X)
    X:numpy array格式的数据[n_samples,n_features]
    返回值:转换后指定维度的array

  • 特征数量达到上百的时候,需要考虑数据的简化
from sklearn.decomposition import PCA
df=pd.DataFrame({'x1':[90,2,10,40],'x2':[60,4,15,45],'x3':[75,3,13,46]})
df.T

在这里插入图片描述

data=StandardScaler().fit_transform(df.T)
data

在这里插入图片描述

pca=PCA(n_components=2).fit(data)       #可以直接用fit_transform(),参数也可以是小数(要求包含多少总体的信息)
pca.explained_variance_ratio_           # 查看处理后的2个各种包含了总体的多少信息

包含了近98%的信息

pca.transform(data)      #查看主成分分析后的结果

在这里插入图片描述

pca2=PCA(0.95).fit_transform(data)      #当然也可以直接用fit_transform
pca2

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值