zoukankan      html  css  js  c++  java
  • 再探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

  • 相关阅读:
    eclipse添加xsd
    Ibatis 后台打印完整的sql语句
    eclipse 将文件夹作为sourcefolder
    git:hook declined FATAL: W refs/heads DENIED by fallthru error
    单点登陆CAS安装过程中可能遇到的问题
    单点登录的原理与CAS技术的研究
    【转载】软件开发模式对比(瀑布、迭代、螺旋、敏捷)
    UML工具选择
    UML 用例图,时序图,活动图的定义以及区别
    基于UML的需求分析和系统设计个人体会
  • 原文地址:https://www.cnblogs.com/amoor/p/9816679.html
Copyright © 2011-2022 走看看