【发布时间】:2019-03-26 05:02:33
【问题描述】:
据我所知,线性判别分析 (LDA) 是一种减少输入特征数量的技术。维基也有同样的声明
线性判别分析 (LDA)、正态判别分析 (NDA) 或判别函数分析是 Fisher 线性判别式的推广,这是一种用于统计、模式识别和机器学习的方法,用于找到表征或分隔两个或多个类别的对象或事件。得到的组合可以用作线性分类器,或者更常见的是,在以后分类之前进行降维。
但是,当我尝试使用来自sklearn.discriminant_analysis 的LinearDiscriminantAnalysis 时,我无法获得功能减少的数据。
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
X, y = make_blobs(40000,600,2,cluster_std=20,random_state=101)
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=101)
model = LinearDiscriminantAnalysis(n_components=100)
model.fit(X_train,y_train)
X_train_new = model.transform(X_train)
print(X_train_new.shape)
>>> (28000, 1)
我的原始数据有 600 个特征,我想使用 LDA 将其减少到只有 100 个特征。但是来自sklearn 的LDA 给了我形状 (28000,1)。
为什么 LDA 转换后只有 1 个特征?我做错了什么?
【问题讨论】:
-
我想你想在这种情况下使用PCA。 LDA 会找到导致类之间差异最大的属性。因此,
n_components应该小于类数 - 1。
标签: python scikit-learn