您的位置:首页 > 其它

数据预处理系列:(十三)用字典学习分解法分类

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),将数据集转换成一个稀疏的形式。


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的情况下,尝试发现一个适当的数据表现形式。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: