machine-learning - Python(scikit learn)lda 崩溃为单一维度

标签 machine-learning scikit-learn scientific-computing

总的来说,我对 scikit learn 和机器学习非常陌生。

我目前正在设计一个 SVM 来预测特定的氨基酸序列是否会被蛋白 enzyme 切割。到目前为止,SVM 方法似乎运行得很好: sensitivity and specificity of one of my SVM models

我想可视化两个类别(剪切和未剪切)之间的距离,因此我尝试使用线性判别分析,这与主成分分析类似,使用以下代码:

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
targs = np.array([1 if _ else 0 for _ in XOR_list])
DATA = np.array(data_list)
X_r2 = lda.fit(DATA, targs).transform(DATA)
plt.figure()
for c, i, target_name in zip("rg", [1, 0],["Cleaved","Not Cleaved"]):
    plt.scatter(X_r2[targs == i], X_r2[targs == i], c=c, label=target_name)
plt.legend()
plt.title('LDA of cleavage_site dataset')

但是,LDA 只给出一维结果

In: print X_r2[:5]
Out: [[ 6.74369996]
 [ 4.14254941]
 [ 5.19537896]
 [ 7.00884032]
 [ 3.54707676]]

enter image description here

但是,主成分分析分析将根据我输入的数据给出 2 个维度:

pca = PCA(n_components=2)
X_r = pca.fit(DATA).transform(DATA)
print X_r[:5]
Out: [[ 0.05474151  0.38401203]
 [ 0.39244191  0.74113729]
 [-0.56785236 -0.30109694]
 [-0.55633116 -0.30267444]
 [ 0.41311866 -0.25501662]]

编辑:这里是两个带有输入数据的谷歌文档的链接。我没有使用序列信息,只是使用后面的数字信息。文件分为阳性和阴性对照数据。 输入数据: file1 file2

最佳答案

LDA 不是一种降维技术。 LDA 是一个分类器,人们可视化决策函数的事实只是一个副作用,而且 - 不幸的是,对于您的用例来说 - 二元问题(2类)的决策函数是一维。您的代码没有任何问题,这就是线性二元分类器的每个决策函数的样子。

一般来说,对于 2 个类别,您最多可以获得 1 维投影,而对于 K>2 类别,您最多可以获得 K 维投影。使用其他分解技术(例如 1 vs 1),您可以达到 K(K-1)/2,但同样,仅限于 2 个以上的类。

关于machine-learning - Python(scikit learn)lda 崩溃为单一维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39083308/

相关文章:

python - 降维后使用选定的变量会引发值错误

ios - 如何在turi create中导入apple core运动数据集?

Python 代码在 Eclipse 中出错,但在终端中运行良好

testing - 协作科学/数据处理项目的仪表板

计算数学相关函数/自相关函数的C程序

opencv - 使用 SVM 进行实时面部表情分类

c++ - 解决类不平衡 : scaling contribution to loss and sgd

python - scikit learn 是否包含具有连续输入的朴素贝叶斯分类器?

python - 构建训练 doc2vec 嵌入的学习曲线

python - numpy randint 和 floor of rand 之间的区别