原标题:数据特征提取
原文来自:博客园 原文链接: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 | 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 | 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 | from sklearn.decomposition import 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)
print ( 'NMF处理后数据形态:{}' . format (X_train_nmf.shape))
|
NMF处理后数据形态:(50, 15)
1 2 3 4 | 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