【问题标题】:How to get the equation of the boundary line in Linear Discriminant Analysis with sklearn如何使用sklearn获得线性判别分析中的边界线方程
【发布时间】:2016-04-22 01:26:28
【问题描述】:

我使用 sklearn 的 LinearDiscriminantAnalysis 分类器将一些数据分为 2 类,效果很好,所以我这样做了:

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 笔记本中,我想在其他地方使用分类器。我已经看到了使用 pickles 和 joblib 的可能性,但是由于我只有 2 个组和 2 个功能,所以我认为我可以 just 得到边界线的方程,然后检查是否给定点在线上方或下方以判断它属于哪个组。

据我了解,这条线与投影线正交,并通过集群平均值的平均值。我想我用np.mean(clf.means_, axis=0) 得到了集群的意思。

但在这里我被困在如何使用 clf.coef_clf.intercept_ 等所有属性来找到投影线的方程。

所以,我的问题是如何在给定分类器的情况下获得边界线方程。

也有可能是我没有正确理解 LDA,我很高兴有更多的解释。

谢谢

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    决策边界是简单的线

    np.dot(clf.coef_, x) - clf.intercept_ = 0
    

    (直到截距的符号,取决于实现可能会翻转)因为这是决策函数的符号翻转的地方。

    【讨论】:

    • 这是每个线性分类器的通用方程。它们仅在查找 coef 和拦截的方式上有所不同。 LDA 假设数据来自具有相同协方差的正态分布,并为最优分离线找到一个封闭形式的解
    • 我得到一个`ValueError:形状(1,2)和(127,2)在做点积时没有对齐。另外我只有 2 个功能,所以也许它解释了上面的暗淡问题,因为做 clf.coef_*x - est.intercept 有效。然后它给了我投影线上的点,对吗?如果是的话,我用回归找到它的斜率和截距,并通过聚类的平均值得到这个正交线,但是当我画它时,它看起来还可以,但有几个点在错误的一边线,看起来斜率并不完全正确。我究竟做错了什么 ?谢谢
    • 您必须转置您的 X,仅此而已。您不必回归任何东西,这是精确的规范方程。 C0*x + C1*y - 截距 =0。没有什么可做的,只需绘制这条线。有些点会以错误的方式结束。 lda 不保证 100% 的训练准确度
    • 您似乎对手段的想法感到困惑。忘记手段。你不需要他们做任何事情。它们用于计算系数并截取其他任何内容。此时它们被丢弃
    • 哼,我想我对一切都感到困惑! np.dot(clf.coef_, x) 中的x 指的是什么?
    猜你喜欢
    • 2022-06-22
    • 2020-02-03
    • 1970-01-01
    • 2015-08-17
    • 2013-06-19
    • 2013-12-10
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多