如何运行和解读scikit-learn中的Fisher线性判别分析
我正在尝试运行Fisher的线性判别分析(LDA),目的是减少矩阵中的特征数量。
简单来说,如果我理解得没错,给定n个样本并且这些样本被分类到几个类别中,Fisher的LDA会试图找到一个轴线,沿着这个轴线投影时,可以最大化一个叫做J(w)的值。这个J(w)的值是所有样本的方差与各个类别内部方差之和的比率。
我认为这可以用来找出每个类别中最有用的特征。
我有一个矩阵X,里面有m个特征和n个样本(m行,n列)。
我还有一个样本分类y,也就是一个包含n个标签的数组,每个标签对应一个样本。
基于y,我想把特征数量减少到,比如说,3个最具代表性的特征。
我使用scikit-learn
尝试了以下方法(参考这份文档):
>>> import numpy as np
>>> from sklearn.lda import LDA
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> y = np.array([1, 1, 1, 2, 2, 2])
>>> clf = LDA(n_components=3)
>>> clf.fit_transform(X, y)
array([[ 4.],
[ 4.],
[ 8.],
[-4.],
[-4.],
[-8.]])
在这个时候我有点困惑,怎么才能得到最具代表性的特征呢?
1 个回答
2
你想要的特性在 clf.coef_
中,前提是你已经训练好了分类器。
需要注意的是,n_components=3
在这里没有意义,因为 X.shape[1] == 2
,也就是说你的特征空间只有两个维度。
你不需要使用 fit_transform
来获取 coef_
,只要调用 clf.fit(X, y)
就可以了。