数据特征提取

Posted weijiazheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据特征提取相关的知识,希望对你有一定的参考价值。

数据表达 : 有时,我们通过对数据集原来的特征进行转换,生成新的"特征"或者说成分,会比直接使用原始的特征效果要好,即数据表达(data representation)

特征提取 : 如图像识别,数据表达显得十分重要,因为图像是有成千上万个像素组成的,每个像素又有不同的的RGB色彩值,所以我们要使用特征提取这种数据处理方法,特征提取是指使用计算机提取图像中属于特征性的信息的方法及过程。

1.使用PCA主成分分析法用于特征提取

#############################  PCA主成分分析法用于特征提取  #######################################
#导入画图工具
import matplotlib.pyplot as plt
#导入数据集拆分工具
from sklearn.model_selection import train_test_split

#导入数据集获取工具
from sklearn.datasets import fetch_lfw_people
#载入人脸数据集
faces = fetch_lfw_people(min_faces_per_person=20,resize=0.8)
image_shape = faces.images[0].shape
#将照片打印出来
fig,axes = plt.subplots(3,4,figsize=(12,9),subplot_kw={‘xticks‘:(),‘yticks‘:()})
for target,image,ax in zip(faces.target,faces.images,axes.ravel()):
    ax.imshow(image,cmap=plt.cm.gray)
    ax.set_title(faces.target_names[target])
#显示图像
plt.show()

技术图片

#导入神经网络
from sklearn.neural_network import MLPClassifier
#对数据进行拆分
X_train,X_test,y_train,y_test = train_test_split(faces.data/255,faces.target,random_state=62)
#训练神经网络
mlp=MLPClassifier(hidden_layer_sizes=[100,100],random_state=62,max_iter=400)
mlp.fit(X_train,y_train)
#打印模型准确率
print(‘模型识别准确率:{: .2f}‘.format(mlp.score(X_test,y_test)))
模型识别准确率: 0.88
#导入PCA
from sklearn.decomposition import PCA
#使用白化功能处理人脸数据
pca = PCA(whiten=True,n_components=0.9,random_state=62).fit(X_train)
X_train_whiten = pca.transform(X_train)
X_test_whiten = pca.transform(X_test)
#打印白化后数据形态
print(‘白化后数据形态:{}‘.format(X_train_whiten.shape))
白化后数据形态:(50, 21)
#使用白化后的数据训练神经网络
mlp.fit(X_train_whiten,y_train)
#打印模型准确率
print(‘数据白化后模型识别准确率:{: .2f}‘.format(mlp.score(X_test_whiten,y_test)))
数据白化后模型识别准确率: 0.94

2.使用非负矩阵分解用于特征提取

非负矩阵分解(Non-Negative Matrix Factorization,NMF) : 矩阵分解,就是把一个矩阵拆解为n个矩阵的乘积,而非负矩阵分解,就是原始的矩阵中所有的数值必须大于或等于0,当然分解之后的矩阵中数据也是大于或等于0的.

#############################  非负矩阵分解用于特征提取 #######################################
#导入NMF
from sklearn.decomposition import NMF
#使用NMF处理数据
nmf = NMF(n_components=15,random_state=62).fit(X_train)
X_train_nmf = nmf.transform(X_train)
X_test_nmf = nmf.transform(X_test)
#打印NMF处理后的数据形态
print(‘NMF处理后数据形态:{}‘.format(X_train_nmf.shape))
NMF处理后数据形态:(50, 15)
#用NMF处理后的数据训练神经网络
mlp.fit(X_train_nmf,y_train)
#打印模型准确率
print(‘nmf处理后模型准确率:{:.2f}‘.format(mlp.score(X_test_nmf,y_test)))
nmf处理后模型准确率:0.94

总结 : 

  NMF非负矩阵分解与PCA主成分分析法不同的是,如果我们降低NMF的成分数量,它会重新生成新的成分,而新的成分和原来的成分是完全不一样的,

  另外,NMF中的成分是没有顺序的,这点和PCA有是不同的.

  NMF关于n_components参数不支持使用浮点数,只能设置为正的整数型,这也是与PCA的不同之处.

 

文章引自 : 《深入浅出python机器学习》

以上是关于数据特征提取的主要内容,如果未能解决你的问题,请参考以下文章

Python代码提取时间序列特征基于tsfeature

时间序列特征提取的Python和Pandas代码示例

Moravec(莫拉维克)影像特征点提取(含原理与C代码)

Android课程---Android Studio使用小技巧:提取方法代码片段

使用多个特征的支持向量机 (SVM) 训练

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销