数据预处理系列:(十三)用字典学习分解法分类
2016-06-27 11:54
399 查看
声明:版权所有,转载请联系作者并注明出处 http://blog.csdn.net/u013719780?viewmode=contents
博主简介:风雪夜归子(英文名: Allen),机器学习算法攻城狮,喜爱钻研Machine Learning的黑科技,对Deep Learning和Artificial Intelligence充满兴趣,经常关注kaggle数据挖掘竞赛平台,对数据、Machine Learning和Artificial Intelligence有兴趣的各位童鞋可以一起探讨哦,个人CSDN博客: http://blog.csdn.net/u013719780?viewmode=contents
在这个主题中,我们将介绍一种可以用于分类的分解方法——字典学习(Dictionary Learning),将数据集转换成一个稀疏的形式。
In [1]:
In [2]:
首先,导入
In [3]:
然后用三个成分表示
In [4]:
再用
In [5]:
Out[5]:
我们可以可视化这个结果。注意,每个成分的值分别平行xx,yy和zz三个轴,其他坐标都是0;这就是稀疏性。
In [6]:
如果你细心看,还是会发现一些误差。有一个样本分错了类型,虽然一个错误并不是很严重。
下面,让我们用
In [7]:
In [8]:
还是有一些分类错误的样本。如果你看看之前降维主题中的图,会发现绿色和蓝色两类数据有交叉部分。
博主简介:风雪夜归子(英文名: Allen),机器学习算法攻城狮,喜爱钻研Machine Learning的黑科技,对Deep Learning和Artificial Intelligence充满兴趣,经常关注kaggle数据挖掘竞赛平台,对数据、Machine Learning和Artificial Intelligence有兴趣的各位童鞋可以一起探讨哦,个人CSDN博客: http://blog.csdn.net/u013719780?viewmode=contents
用字典学习分解法分类
在这个主题中,我们将介绍一种可以用于分类的分解方法——字典学习(Dictionary Learning),将数据集转换成一个稀疏的形式。
Getting ready
DictionaryLearning方法的思想是把特征看作构成数据集的基础。首先我们导入
iris数据集:
In [1]:
%matplotlib inline import matplotlib.pyplot as plt import numpy as np
In [2]:
from sklearn.datasets import load_iris iris = load_iris() iris_data = iris.data iris_target = iris.target
How to do it...
首先,导入DictionaryLearning:
In [3]:
from sklearn.decomposition import DictionaryLearning
然后用三个成分表示
iris数据集中花的类型:
In [4]:
dl = DictionaryLearning(3)
再用
fit_transform转换其他数据,这样我们就可以对比训练前后的数据了:
In [5]:
transformed = dl.fit_transform(iris_data[::2]) transformed[:5]
Out[5]:
array([[ 0. , 6.34476574, 0. ], [ 0. , 5.83576461, 0. ], [ 0. , 6.32038375, 0. ], [ 0. , 5.89318572, 0. ], [ 0. , 5.45222715, 0. ]])
我们可以可视化这个结果。注意,每个成分的值分别平行xx,yy和zz三个轴,其他坐标都是0;这就是稀疏性。
In [6]:
from mpl_toolkits.mplot3d import Axes3D colors = np.array(list('rgb')) f = plt.figure() ax = f.add_subplot(111, projection='3d') ax.set_title("Training Set") ax.scatter(transformed[:, 0], transformed[:, 1], transformed[:, 2], color=colors[iris.target[::2]]);
如果你细心看,还是会发现一些误差。有一个样本分错了类型,虽然一个错误并不是很严重。
下面,让我们用
fit而不用
fit_transform来训练数据集:
In [7]:
transformed = dl.transform(iris_data[1::2])
In [8]:
colors = np.array(list('rgb')) f = plt.figure() ax = f.add_subplot(111, projection='3d') ax.set_title("Training Set") ax.scatter(transformed[:, 0], transformed[:, 1], transformed[:, 2], color=colors[iris.target[1::2]]);
还是有一些分类错误的样本。如果你看看之前降维主题中的图,会发现绿色和蓝色两类数据有交叉部分。
How it works...
DictionaryLearning具有信号处理和神经学领域的背景知识。其理念是某一时刻只有少数特征可以实现。因此,
DictionaryLearning在假设大多数特征都是0的情况下,尝试发现一个适当的数据表现形式。
相关文章推荐
- C#中的委托之操作符(基础二)
- logiscope 应用度量元 翻译和解释
- Android自动识别<a>标签的自定义TextView(可自定义点击事件)
- undo/delete a commit on git
- centos6: mysql+nginx+php
- 精通iOS开发--第15章 Grand Central Dispatch和后台处理之程序生命周期 NSNotificationCenter和线程
- 怎样把多张图片转为PDF文件
- 1B. Spreadsheets
- Call requires API level 11 (current min is 10): android.content.ContentResol 解决方法
- 文本属性Attributes
- [期望DP] BZOJ 1417 Pku3156 Interconnect
- jdbc入门一(简单使用)
- FrameWork创建
- Android开发资源整理
- 红黑树探索笔记
- FileSystemXmlApplicationContext方法的绝对路径问题
- 1B. Spreadsheets
- 精通iOS开发-第15章 Grand Central Dispatch和后台处理
- MySQL保存或更新 saveOrUpdate
- hadoop 第一节 安装与配置