3.非负矩阵分解
3.1 概念
非负矩阵分解(Non-Negative Matrix Factorization : NMF)。
矩阵分解:一个矩阵A分解为A=B1*B2*…*Bn。
非负矩阵分解:矩阵分解,矩阵A、 B1…Bn中元素均为非负。
3.2 代码
通过fromsklearn.decomposition.NMF方法来实现。
from sklearn.decomposition import NMF def nmf_for_face(): faces =datasets.fetch_lfw_people(min_faces_per_person=20,resize=0.8) #用NMF模型进行模拟 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) nmf = NMF(n_components=105,random_state=62).fit(X_train)#NMF中n_components不支持浮点数 X_train_nmf =nmf.transform(X_train) X_test_nmf =nmf.transform(X_test) print("NMF处理后数据形态:{}".format(X_train_nmf.shape)) #用神经网络模型进行训练 mlp.fit(X_train_nmf,y_train) print("NMF训练后模型识别准确率:{:.2%}".format(mlp.score(X_test_nmf,y_test)))
输出
NMF处理后数据形态:(2267,105) NMF训练后模型识别准确率:56.22%
NMF的效果比PCA略差
4. 线性判别分析
4.1 概念
线性判别分析(Linear DiscriminantAnalysis: LDA)。是有监督降维,寻找降维矩阵,投影后同类数据尽可能聚集在一起,不同类分开明显。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”
4.2 代码
通过sklearn.discriminant_analysis.LinearDiscriminantAnalysis方法来实现。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.neighbors import KNeighborsClassifier,NeighborhoodComponentsAnalysis from sklearn.pipeline import make_pipeline def my_LinearDiscriminantAnalysis(): n_neighbors = 3 random_state = 0 # 加载数字数据集 X, y =datasets.load_digits(return_X_y=True) # 分离测试/训练集 X_train, X_test, y_train,y_test = train_test_split(X, y,test_size=0.5, stratify=y,random_state=random_state) dim = len(X[0]) n_classes =len(np.unique(y)) #用PCA将维数降为2 pca = make_pipeline(StandardScaler(),PCA(n_components=2,random_state=random_state) # 使用线性判别分析将维度缩减为2 lda =make_pipeline(StandardScaler(),LinearDiscriminantAnalysis(n_components=2) # 使用最近邻分类器来评估这些方法 knn =KNeighborsClassifier(n_neighbors=n_neighbors) # 列出要比较的方法 dim_reduction_methods =[('PCA', pca), ('LDA', lda)] for i, (name, model) inenumerate(dim_reduction_methods): plt.figure() # 拟合方法的模型 model.fit(X_train,y_train) # 在嵌入的训练集上拟合最近邻分类器 knn.fit(model.transform(X_train), y_train) # 计算嵌入测试集的最近邻精度 acc_knn =knn.score(model.transform(X_test), y_test) # 使用拟合模型在二维中嵌入数据集 X_embedded =model.transform(X) # 绘制投影点并显示评估分数 plt.scatter(X_embedded[:, 0], X_embedded[:, 1], c=y, s=30, cmap='Set1') plt.title("{}, KNN(k={})\nTest accuracy = {:.2f}".format(name, n_neighbors,acc_knn)) plt.show()
5. LDA与PCA比较
5.1 LDA与PCA比较
思考方向 |
PCA |
LDA |
思想 |
从协方差角度出发 |
从分类标签角度出发 |
学习模型 |
无监督 |
有监督 |
降维后可用维度 |
最大可选择全部维度 |
C-1维,C表示标签数。与原始维度无关 |
5.2LDA与PCA选择
5.3图形比较
—————————————————————————————————
软件安全测试
https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486
接口自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486
DevOps 和Jenkins之DevOps
https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486
DevOps与Jenkins 2.0之Jenkins
https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486
Selenium自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486
性能测试第1季:性能测试基础知识
https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486
性能测试第2季:LoadRunner12使用
https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486
性能测试第3季:JMeter工具使用
https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486
性能测试第4季:监控与调优
https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486
Django入门
https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486
啄木鸟顾老师漫谈软件测试
https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486