码迷,mamicode.com
首页 > 其他好文 > 详细

再探mlpy,降维、分类、可视化

时间:2018-10-19 16:07:30      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:支持向量机   笔记   一个   details   降维   ora   cmap   first   analysis   

一个非常常见的问题就是遇到的数据是多维度数据,维度过高会导致模型极度的复杂,折衷的法案就是降维,然后再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:\Analyze\Python Matlab\Python\DataLib Py\wine.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,降维、分类、可视化

标签:支持向量机   笔记   一个   details   降维   ora   cmap   first   analysis   

原文地址:https://www.cnblogs.com/amoor/p/9816679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!