如何从scikit-learn运行和解释Fisher的线性判别分析

时间:2014-04-24 19:20:54

标签: python machine-learning scikit-learn

我正在尝试运行Fisher的LDA(12)来减少矩阵的特征数量。

基本上,正确如果我错了,给定n类样本分类,Fisher's LDA试图找到一个投影在其上的轴应该最大化值J(w),这是总样本方差与总和的比值不同类别内的差异。

我认为这可以用来为每个类找到最有用的功能。

我有一个m个特征的矩阵X和n个样本(m行,n列)。

我有一个样本分类y,即一个n个标签的数组,每个标签对应一个样本。

基于y我想减少功能的数量,例如,3个最具代表性的功能。

使用scikit-learn我尝试过这种方式(this documentation之后):

>>> 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 个答案:

答案 0 :(得分:2)

在您安装分类器后,您要查找的功能位于clf.coef_

请注意n_components=3这里没有意义,因为X.shape[1] == 2,即您的要素空间只有两个维度。

您无需调用fit_transform即可获得coef_,调用clf.fit(X, y)即可。