再探mlpy,降维分类可视化

Posted amoor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再探mlpy,降维分类可视化相关的知识,希望对你有一定的参考价值。

一个非常常见的问题就是遇到的数据是多维度数据,维度过高会导致模型极度的复杂,折衷的法案就是降维,然后再Q聚类、分类、回归。降维强调在不损失准确性的前提下来降低维度(选出最优特征

PCA是最常见降维算法,它寻找线性不相关的特征子集(主要因子),另外还有LDA(Linear Discriminant Analysis,线性判别分析)、MDS(Multidimensional Scaling,多维标度分析),文末的引文非常推荐,大牛总结的比较透?乛?乛?

以下采用mlpy模块中的PCA方法和LibSvm来进行降维和分类。注:当执行mlpy.LibSvm.learn(z,y)时会报错,暂时还不晓得怎么处理,这里仅做记录分享,有知道的小伙伴务必告知吖

 

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Fri Oct 19 09:54:54 2018
 4 
 5 @author: Luove
 6 """
 7 
 8 import numpy as np
 9 import matplotlib.pyplot as plt
10 import mlpy
11 from matplotlib import cm
12 
13 
14 filepath=D:AnalyzePython MatlabPythonDataLib Pywine.data
15 def getdata():
16     list1 = [line.strip().split(,) for line in open(filepath,r).readlines()]
17     return [list(list2[1:14]) for list2 in list1],[list2[0] for list2 in list1]
18 matrix, labels = getdata()
19 
20 x1=[];y1=[]
21 x2=[];y2=[]
22 x3=[];y3=[]
23 x=0;y=1  # 分别表示酒精和苹果酸属性,表示列索引号
24 for n,elem in enumerate(matrix):  # 会生成枚举字典(自动生成键值从0开始对应各个values为list) 
25     if int(labels[n]) == 1:   # str transform to int
26         x1.append(matrix[n][x])  # 提取该类别下酒精属性列值,下同
27         y1.append(matrix[n][y])
28     elif int(labels[n]) == 2:
29         x2.append(matrix[n][x])
30         y2.append(matrix[n][y])
31     elif int(labels[n]) == 3:
32         x3.append(matrix[n][x])
33         y3.append(matrix[n][y])
34 
35 plt.scatter(x1,y1,s=50,c=green,label=class 1)   # s控制点大小
36 plt.scatter(x2,y2,s=100,c=red,label=class 2)
37 plt.scatter(x3,y3,s=200,c=darkred,label=class 3)       
38 plt.title(Wine features,fontsize=14)
39 plt.xlabel(x axis)
40 plt.ylabel(y axis)
41 plt.legend()
42 plt.grid(True,linestyle=--,color=0.0)  # color=‘0.5‘,灰阶表示,取值[0,1],值越大越接近灰度越低越白,值越小越黑
43 plt.show()
44 # 降维 ,PCA(principal component analysis,principal Component Analysis)主成分分析;MDS(multidimensional scaling)多维标度分析
45 wine = np.loadtxt(filepath,delimiter=,)  # 第一列为label列其余为属性列
46 x,y=wine[:,1:6],wine[:,0].astype(np.int)
47 x.shape
48 y.shape
49 
50 pca=mlpy.PCA()  # 构建,实例化
51 pca.learn(x)  # 输入数据
52 z = pca.transform(x,k=2)  # 降为2维
53 z.shape
54 print(cm.cmap_d.keys())
55 plt.scatter(z[:,0],z[:,1],c=y,s=50,cmap=cm.Reds)
56 plt.xlabel(first component)
57 plt.ylabel(second component)
58 plt.show()
59 
60 svm=mlpy.LibSvm(kernel_type=linear,gamma=10)
61 svm.learn(x,y)
62 xmin,xmax = z[:,0].min()-0.1,z[:,0].max()+0.1
63 ymin,ymax = z[:,1].min()-0.1,z[:,1].max()+0.1
64 xx,yy = np.meshgrid(np.arange(xmin,xmax,0.01),np.arange(ymin,ymax,0.01))
65 grid = np.c_(xx.ravel(),yy.ravel())
66 result = svm.pred(grid)
67 plt.pcolormesh(xx,yy,result.reshape(xx.shape),cmap=cm.Greys_r)
68 plt.scatter(z[:,0],z[:,1],c=y,s=50,cmap=cm.Reds)
69 plt.xlabel(first component)
70 plt.ylabel(second component)
71 plt.xlim(xmin,xmax)
72 plt.ylim(ymin,ymax)

 

p.s. :实例运行中执行到61行是报错的,希望知道怎么解决的小伙伴告知,谢啦~

 

 

Ref:

人工智障学习笔记——机器学习(12)LDA降维

详解多维标度法(MDS,Multidimensional scaling)

【机器学习】支持向量机SVM原理及推导

《实用数据分析》:文中数据及mlpy文档需要可自取:https://github.com/Luove/Data

 

以上是关于再探mlpy,降维分类可视化的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中可视化tsne降维的结果并使用两个分类变量从颜色形状两个角度来可视化tsne降维的效果

R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中可视化tsne降维的结果并圈定降维后不匹配的数据簇(tSNE identifying mismatch)

R语言中多分类问题 multicalss classification 的性能测量

降维算法PCA的应用----高维数据的可视化

python实现TSNE检验 TSNE降维代码

python实现TSNE检验 TSNE降维代码