import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
np.random.seed(7)
def inverse_lda(lda, C):
c = np.flatnonzero(model.classes_ == C)
return model.means_[c]
AB, C = make_blobs(n_samples=333, n_features=2, centers=2) # toy data
A, B = AB.T
plt.scatter(A, B, c=C, alpha=0.5)
plt.xlabel('A')
plt.ylabel('B')
model = LDA(store_covariance=True).fit(AB, C)
# reconstruct A and B for C=[0, 1]
ABout = inverse_lda(model, C=[0, 1])
plt.plot(ABout[0, 0], ABout[0, 1], 'o', label='C=0')
plt.plot(ABout[1, 0], ABout[1, 1], 'o', label='C=1')
plt.legend()
是的,有可能!你知道吗
但是你需要非常清楚你想要什么:A、B和C之间有什么关系-决定什么是合适的预测模型。你知道吗
你还需要意识到,不可能有一个“完美”的重建。A和B通常比C更丰富。除非它们非常有限(例如A和B之间的高度相关性),否则从AB到C时会丢失一些信息。这些信息无法恢复。你知道吗
这并不适用于所有模型,它对每个模型的工作方式都不同,并且它不是直接在sciketlearn中实现的。换句话说,你将不得不做一些手工工作,你需要知道你在做什么。特别是,您需要了解您正在使用的模型。没有顺其自然的解决办法。你知道吗
假设A和B是连续特征,C是离散的0或1。在这种情况下,合适的模型应该是分类器。我们进一步假设A和B对于不同的C很好地聚集在不同的blob中。在这种情况下,线性分类器可以工作。你知道吗
我将用Linear Discriminant Analysis提供一个示例。它的工作原理是将类中心线性投影到最有区别的方向。一般来说,我们需要逆转这种预测,但幸运的是,LDA暴露了原来的班级中心。为了从给定的C中得到原始特征的表示,我们只需要找到正确的类中心。你知道吗
相关问题 更多 >
编程相关推荐