Python (scikit learn) lda 折叠成单一维度
Python (scikit learn) lda collapsing to single dimension
总的来说,我对 scikit 学习和机器学习还很陌生。
我目前正在设计一个 SVM 来预测特定氨基酸序列是否会被蛋白酶切割。到目前为止,SVM 方法似乎运行良好:
我想可视化两个类别(切割和未切割)之间的距离,所以我尝试使用类似于主成分分析的线性判别分析,使用以下代码:
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]]
但是,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]]
编辑:这是一个 link 到两个 google-docs 的输入数据。我没有使用序列信息,只使用后面的数字信息。这些文件分为阳性和阴性对照数据。
输入数据:
file1
file2
LDA 不是降维技术。 LDA 是一个分类器,人们可视化 决策函数 的事实只是一个副作用,而且 - 不幸的是对于你的用例 - 二元问题的决策函数 (2 类) 是1 维。您的代码没有任何问题,这就是线性二元分类器的每个决策函数的样子。
一般来说,对于 2 类,您最多可以获得 1-dim 投影,对于 K>2 类,您最多可以获得 K-dim 投影。使用其他分解技术(如 1 对 1),您可以达到 K(K-1)/2 但同样,只能超过 2 类.
总的来说,我对 scikit 学习和机器学习还很陌生。
我目前正在设计一个 SVM 来预测特定氨基酸序列是否会被蛋白酶切割。到目前为止,SVM 方法似乎运行良好:
我想可视化两个类别(切割和未切割)之间的距离,所以我尝试使用类似于主成分分析的线性判别分析,使用以下代码:
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]]
但是,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]]
编辑:这是一个 link 到两个 google-docs 的输入数据。我没有使用序列信息,只使用后面的数字信息。这些文件分为阳性和阴性对照数据。 输入数据: file1 file2
LDA 不是降维技术。 LDA 是一个分类器,人们可视化 决策函数 的事实只是一个副作用,而且 - 不幸的是对于你的用例 - 二元问题的决策函数 (2 类) 是1 维。您的代码没有任何问题,这就是线性二元分类器的每个决策函数的样子。
一般来说,对于 2 类,您最多可以获得 1-dim 投影,对于 K>2 类,您最多可以获得 K-dim 投影。使用其他分解技术(如 1 对 1),您可以达到 K(K-1)/2 但同样,只能超过 2 类.