一.特征抽取
1.字典特征提取
- sklearn.feature_extraction.DictVectorizer
- 语法使用:
- DictVectorizer(sparse=True) # sparse默认为True,返回sparse矩阵
- DictVectorizer.fit_transform(X)
X:字典或包含字典的迭代器
返回值:返回sparse矩阵 - DictVectorizer.inverse_transform(X) # 不常用
X:array数组或sparse矩阵
返回值:转换之前数据格式 - DictVectorizer.get_feature_names()
返回类别名称 - 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
- CountVectorizer()
返回词频矩阵 - CountVectorizer.fit_transform(X)
X:文本或包含文本字符串的可迭代对象
返回值:返回sparse矩阵 - CountVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式 - 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
- 𝑋^′= (𝑥−𝑚𝑖𝑛)/(𝑚𝑎𝑥−𝑚𝑖𝑛)
- 𝑋′′=𝑋′∗(𝑚𝑥−𝑚𝑖)+𝑚𝑖
-
sklearn.preprocessing.MinMaxScaler
-
MinMaxScalar(feature_range=(0,1)…)
每个特征缩放到给定范围(默认[0,1]) -
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为平均值,𝜎为标准差(考量数据的稳定性)
-
scikit-learn.preprocessing.StandardScaler
-
StandardScaler(…)
处理之后每列来说所有数据都聚集在均值0附近方差为1 -
StandardScaler.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的arrayStandardScaler.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
-
sklearn. decomposition
-
PCA(n_components=None)
可以填写小数,表示分解后保留多少数据,一般90%到95%
也可以直接填写整数,保留几个特征
将数据分解为较低维数空间 -
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个各种包含了总体的多少信息
pca.transform(data) #查看主成分分析后的结果
pca2=PCA(0.95).fit_transform(data) #当然也可以直接用fit_transform
pca2