再探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:\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

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

时间: 2024-10-12 23:23:30

再探mlpy,降维、分类、可视化的相关文章

流形学习-高维数据的降维与可视化

1.流形学习的概念 流形学习方法(Manifold Learning),简称流形学习,自2000年在著名的科学杂志<Science>被首次提出以来,已成为信息科学领域的研究热点.在理论和应用上,流形学习方法都具有重要的研究意义. 假设数据是均匀采样于一个高维欧氏空间中的低维流形,流形学习就是从高维采样数据中恢复低维流形结构,即找到高维空间中的低维流形,并求出相应的嵌入映射,以实现维数约简或者数据可视化.它是从观测到的现象中去寻找事物的本质,找到产生数据的内在规律. 以上选自百度百科 简单地理解

再探Linux动态链接 -- 关于动态库的基础知识

  在近一段时间里,由于多次参与相关专业软件Linux运行环境建设,深感有必要将这些知识理一理,供往后参考. 编译时和运行时 纵观程序编译整个过程,细分可分为编译(Compiling,指的是语言到平台相关目标文件这一层次)和链接(Linking,指目标文件到最终形成可执行文件这一层次),这个总的过程可称为编译时:就动态链接而言,还存在一个运行时,即程序在被操作系统加载的过程中,系统将该程序需要的动态库加载至内存到程序开始运行的这一段过程.明确这两个过程在一般linux开发中的地位,以及了解每个"

再探css3

再探css3 我们知道,这几年来智能手机的高速发展使得人们使用移动端上网的时间和人数已经超过了PC端.例如在2015年,就中国电商而言,各电商平台在移动端持续发力,移动端购物占比不断攀升,双11期间,天猫交易额突破912亿元,其中移动端交易额占比68%,京东移动端下单量占比达到74%,其余各大电商平台移动端的支付比例也在60%-80%之间.即移动端在2015年超越PC端,成为网购市场的主流选择.这也使得网页设计师需要更加注重移动端的网页制作,而移动端对于HMTL5和CSS3目前已经支持的非常好了

【再探JNI】

上一次了解了一点JNI,然后不甘心的找到了JNI的官方文档.(官方文档绝对是一个最好的学习资料),百度找出来的一些资料大多数是比较零零碎碎的,不具有系统学习的可能,对于我这样的初学者,先全面的了解一个技术比往一个死角里钻研要好很多.并且百度出来的部分资料估计就是跟我这样的半吊子水平还不到的人的一些心得体会呢.因此,个人建议是看官方文档去全面了解一项技术,然后不理解的地方去再去搜集资料.加上自己的理解和实践,这样会进步的快一点. 好了,闲话少说.进入今天的真题.<再探JNI> (1)什么时候用J

再探 butterfly.js - grunt.js篇(一)

再探 butterfly.js - grunt.js篇(一) 神器 grunt.js 久仰grunt.js的大名,学习grunt.js一直是我todo List的第一位.趁着新春佳节来临之际(打酱油的日子),就来填了这个坑,完了这个心愿. grunt.js的强大,强大在于它拥有很多用途丰富的插件,和不同插件之间的联动实现更牛逼的功能. 这里默认大家已经安装了npm和会用npm install等指令,就不详细讲了.下面讲用到grunt-contrib-watch和grunt-contrib-con

【足迹C++primer】33、再探迭代器

再探迭代器 这里有插入迭代器,有流迭代器,反向迭代器,移动迭代器. 插入迭代器 这是一种迭代器适配器,接受一个容器,生成一个迭代器,实现向给定容器添加元素. 插入迭代器有三种类型,差异在于元素插入的位置 back_inserter创建一个使用push_back的迭代器. front_inserter创建一个使用push_front的迭代器. inserter创建一个使用insert的迭代器. void fun1() { list<int> lst={1,2,3,4}; list<int&

再探jQuery

再探jQuery jQuery是一个JavaScript库,它极大的简化了JavaScript编程,虽然目前网络上有大量开源的JS框架,但是jQuery是目前最流行的JS框架,而且提供了大量的扩展.包括Google.Microsoft.IBM等大公司都在使用jQuery框架,值得注意的是,jQuery团体知道JS咋不同浏览器中存在这大量的兼容性问题,所以jQuery兼容所有主流浏览器,包括Internet Explorer 6! 第一部分:使用方法 那么如何使用jQuery呢?很简单,只需要在j

再探oVirt-配置一个2节点的ovirt环境

日期:2015/11/4 - 2015/11/5 主机:engine, node01, node02 目的:再探oVirt-配置一个2节点的ovirt环境 操作内容: 一.基础操作 1.资源 ovirt engine: engine ovirt node: node01, node02 2.hosts 10.50.200.141 engine.ovirt 10.50.200.101 n101.ovirt 10.50.200.102 n102.ovirt 3.防火墙放行同一个局域网内的访问限制 后

[老老实实学WCF] 第五篇 再探通信--ClientBase

原文:[老老实实学WCF] 第五篇 再探通信--ClientBase 老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创建了通道,实现了和服务端的通信.然而,与服务端通信的编程模型不只一种,今天我们来学习利用另外一个服务类ClientBase<>来完成同样的工作,了解了这个类的使用方法,我们对服务引用中的关键部分就能够理解了. ClientBase