我正在尝试运行Fisher的LDA(1, 2)来减少矩阵的特征数量。
基本上,如果我没有理解错的话,给定若干类别分类的n个样本,Fisher的LDA试图找到一个轴,使得投影到该轴上可以最大化J(w)的值,即总样本方差与各类别内部方差之和的比率。
我认为这可以用来找出每个类别最有用的特征。
我有一个包含m个特征和n个样本的矩阵X(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.]])
此时我有点困惑,如何获得最具代表性的特征?
回答:
你要找的特征在你拟合分类器后位于clf.coef_
中。
请注意,这里n_components=3
没有意义,因为X.shape[1] == 2
,即你的特征空间只有两个维度。
你不需要调用fit_transform
来获得coef_
,调用clf.fit(X, y)
就足够了。