一般来说,我对scikit学习和机器学习非常陌生。

我目前正在设计一种SVM,以预测特定的氨基酸序列是否会被蛋白酶切割。到目前为止,SVM方法似乎运行良好:
machine-learning - Python(Scikit Learn)LDA折叠为一维-LMLPHP

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

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]]


machine-learning - Python(Scikit Learn)LDA折叠为一维-LMLPHP

但是,pca分析将使用我输入的数据给出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]]


编辑:这是带有输入数据的两个Google文档的链接。我不是在使用序列信息,而是在后面的数字信息。这些文件分为正控制数据和负控制数据。
输入数据:
file1
file2

最佳答案

LDA不是降维技术。 LDA是一个分类器,人们将决策函数可视化只是一个副作用,并且-不幸的是,对于您的用例-二元问题(2类)的决策函数是1维的。您的代码没有错,这就是线性二进制分类器的每个决策函数的外观。

通常,对于2个类,您最多可以得到1个维度的投影;对于K> 2类,则最多可以得到K个维度的投影。使用其他分解技术(例如1对1),您可以提高到K(K-1)/ 2,但又只能提高两个以上的类。

关于machine-learning - Python(Scikit Learn)LDA折叠为一维,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39083308/

10-12 23:22