我使用sklearn中的LinearDiscriminantAnalysis分类器将一些数据分为两类,并且它的效果非常好,因此我做了这个操作:
from sklearn.cross_validation import train_test_split
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25) # 25% of the dataset are not used for the training
clf = LDA()
clf.fit(x_train, y_train)
然后我用它进行预测,没问题。
但是,这都在一个 ipython 笔记本中,我想在其他地方使用分类器。我看到了使用 pickle 和 joblib 的可能性,但是由于我只有 2 组和 2 个特征,所以我认为我可以“仅仅”得到边界线的方程,然后检查给定点是否在线的上方或下方,以确定它属于哪一组。
据我所知,这条线垂直于投影线,并通过聚类均值的平均值。我认为我用 np.mean(clf.means_, axis=0)
得到了聚类均值。
但是,我卡在了如何使用所有属性,比如 clf.coef_
,clf.intercept_
等等来找到投影线的方程。
因此,我的问题是如何根据我的分类器得到边界线方程。
也有可能我没有正确理解 LDA,如果能有更多的解释,我会非常高兴。
谢谢
ValueError: shapes (1,2) and (127,2) not aligned when doing the dot product
的错误。而且我只有两个特征,所以也许这解释了上面的维度问题,因为使用clf.coef_*x - est.intercept
是有效的。然后它给我投影线上的点,对吗?如果是的话,我会通过回归找到它的斜率和截距,并得到通过聚类均值的垂直线,但是当我画出来时,看起来还好,但是有几个点在线的错误一侧,而且斜率似乎不完全正确。我做错了什么?谢谢。 - jrjcf(x) = -clf.coef_[0][0]/clf.coef_[0][1] * x - clf.intercept_/clf.coef_[0][1]
看起来像是正确的直线,但我是从C0*x + C1*y + intercept = 0
推导出来的,这样对吗? - jrjc