资源经验分享数据特征提取

数据特征提取

2019-12-04 | |  77 |   0

原标题:数据特征提取

原文来自:博客园      原文链接:https://www.cnblogs.com/weijiazheng/p/10943485.html


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

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

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#############################  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()

1
2
3
4
5
6
7
8
9
#导入神经网络
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


1
2
3
4
5
6
7
8
#导入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)


1
2
3
4
#使用白化后的数据训练神经网络
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的.


1
2
3
4
5
6
7
8
9
#############################  非负矩阵分解用于特征提取 #######################################
#导入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)


1
2
3
4
#用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机器学习》


免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com


上一篇:数据表达

下一篇:机器学习——Day 3 多元线性回归

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...

  • 反向传播是什么?

    深度学习系统能够学习极其复杂的模式,它们通过调...